<?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>223617</bug_id>
          
          <creation_ts>2021-03-22 18:04:43 -0700</creation_ts>
          <short_desc>[perf dashboard] Remove v1 and v2 code.</short_desc>
          <delta_ts>2021-03-30 00:16:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to>dewei_zhu</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1742621</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-03-22 18:04:43 -0700</bug_when>
    <thetext>[perf dashboard] Remove v1 and v2 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742628</commentid>
    <comment_count>1</comment_count>
      <attachid>423973</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-03-22 18:19:48 -0700</bug_when>
    <thetext>Created attachment 423973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742704</commentid>
    <comment_count>2</comment_count>
      <attachid>423995</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-03-23 01:16:18 -0700</bug_when>
    <thetext>Created attachment 423995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745003</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-29 18:05:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/75982927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745038</commentid>
    <comment_count>4</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-03-30 00:16:44 -0700</bug_when>
    <thetext>Change has been landed in r274907.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423973</attachid>
            <date>2021-03-22 18:19:48 -0700</date>
            <delta_ts>2021-03-23 01:16:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223617-20210322181947.patch</filename>
            <type>text/plain</type>
            <size>3973502</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0ODAwCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAzOTllZmNlZmExMjQxMGZiOWQxZTE4NGU0ZjQyODVhMGQ1ZjNhNmUzLi45MmNkNTg0MWY1
ODIwY2YyOGFlNWM2MzY1MmQ0OWEzNjc0ZjJkNTFjIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAyMS0wMy0yMiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZiBkYXNoYm9hcmRdIFJlbW92ZSB2MSBhbmQgdjIg
Y29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzYxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSB2MSBhbmQgdjIgY29kZSBmcm9tIHBlcmYgZGFzaGJvYXJkLgorICAgICAgICBSZW1vdmUg
ZGV0ZWN0LWNoYW5nZXMuanMgc2NyaXB0IHNpbmNlIHJ1bi1hbmFseXNpcy5qcyBpcyB0aGUgdjMg
dmVyc2lvbiBlcXVpdmFsZW50LgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6IEtlZXAg
dGhlIHJlZGlyZWN0aW9uIHRvIHYzLgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxwZXItY2xhc3Nl
cy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmNvbG9yaGVscGVycy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5lcnJvcmJhcnMuanM6
IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QubmF2aWdhdGUuanM6IFJlbW92ZWQuCisg
ICAgICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LnBsdWdpbnMuanM6IFJlbW92ZWQuCisgICAg
ICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LnJlc2l6ZS5qczogUmVtb3ZlZC4KKyAgICAgICAg
KiBwdWJsaWMvanMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAq
IHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5zdGFjay5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJs
aWMvanMvanF1ZXJ5LmZsb3Quc3ltYm9sLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9q
cy9qcXVlcnkuZmxvdC50aHJlc2hvbGQuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pz
L2pxdWVyeS5mbG90LnRpbWUuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVy
eS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvYW5hbHlzaXMuanM6IFJlbW92ZWQu
CisgICAgICAgICogcHVibGljL3YyL2FwcC5jc3M6IFJlbW92ZWQuCisgICAgICAgICogcHVibGlj
L3YyL2FwcC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvY2hhcnQtcGFuZS5jc3M6
IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL3YyL2NvbW1pdHMtdmlld2VyLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIHB1YmxpYy92Mi9kYXRhLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1Ymxp
Yy92Mi9pbmRleC5odG1sOiBLZWVwIHRoZSByZWRpcmVjdGlvbiB0byB2My4KKyAgICAgICAgKiBw
dWJsaWMvdjIvaW50ZXJhY3RpdmUtY2hhcnQuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGlj
L3YyL2pzL2QzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL3YyL2pzL2QzL2Qz
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9qcy9kMy9kMy5taW4uanM6IFJlbW92
ZWQuCisgICAgICAgICogcHVibGljL3YyL2pzL2VtYmVyLWRhdGEuanM6IFJlbW92ZWQuCisgICAg
ICAgICogcHVibGljL3YyL2pzL2VtYmVyLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92
Mi9qcy9oYW5kbGViYXJzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9qcy9qcXVl
cnkubWluLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9tYW5pZmVzdC5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvcG9wdXAuanM6IFJlbW92ZWQuCisgICAgICAgICog
cHVibGljL3YyL3N0YXRpc3RpY3Mtc3RyYXRlZ2llcy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiB0
b29scy9kZXRlY3QtY2hhbmdlcy5qczogUmVtb3ZlZC4KKwogMjAyMS0wMy0yMSAgRGV3ZWkgWmh1
ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBbcGVyZiBkYXNoYm9hcmRdIFJlbW92
ZSBub24taW5jbHVzaXZlIHdvcmRzIGZyb20gcGVyZiBkYXNoYm9hcmQuCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwKaW5kZXggNTBjNTU2Yjk1Y2QzNGJlNDc0NWVl
MWVlODNkZWRhMjNjMTc4NWFiZC4uYWEzYzhiZjZmYmM5NjY1NTc4ZGM3Y2FlMDYzYTQ5MTkzNzg1
NmE0YyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmRleC5o
dG1sCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5kZXguaHRtbApAQCAt
NywxMjc3ICs3LDYgQEAKIGlmIChsb2NhdGlvbi5oYXNoLmluZGV4T2YoJyNtb2RlPWRhc2hib2Fy
ZCcpID49IDAgfHwgIWxvY2F0aW9uLmhhc2ggfHwgbG9jYXRpb24uaGFzaCA9PSAnIycpCiAgICAg
bG9jYXRpb24uaHJlZiA9ICcvdjMvJzsKIAotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1
ZXJ5LmpzIiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5qcyIg
ZGVmZXI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpz
IiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vl
bi5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QucmVzaXpl
LmpzIiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5zZWxlY3Rp
b24uanMiIGRlZmVyPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90LnRpbWUu
anMiIGRlZmVyPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL2hlbHBlci1jbGFzc2VzLmpzIiBk
ZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzaGFyZWQvc3RhdGlzdGljcy5qcyIgZGVmZXI+
PC9zY3JpcHQ+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNvbW1vbi5jc3MiPgotPHN0
eWxlIHR5cGU9InRleHQvY3NzIj4KLQotI251bWJlck9mRGF5c1BpY2tlciB7Ci0gICAgY29sb3I6
ICM2NjY7Ci19Ci0KLSNudW1iZXJPZkRheXNQaWNrZXIgaW5wdXQgewotICAgIGhlaWdodDogMC45
ZW07Ci0gICAgbWFyZ2luLXJpZ2h0OiAxZW07Ci19Ci0KLXRkLCB0aCB7Ci0gICAgYm9yZGVyOiBu
b25lOwotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgcGFkZGluZy10b3A6IDAu
NWVtOwotfQotCi0jZGFzaGJvYXJkID4gdGJvZHkgPiB0ciA+IHRkIHsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogdG9wOwotfQotCi0jZGFzaGJvYXJkID4gdGhlYWQgdGggewotICAgIHRleHQtc2hhZG93
OiAjYmJiIDFweCAxcHggMnB4OwotICAgIGZvbnQtc2l6ZTogbGFyZ2U7Ci0gICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKLX0KLQotLmNoYXJ0IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAg
Ym9yZGVyOiBzb2xpZCAxcHggI2NjYzsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgbWFy
Z2luOiAwcHggMHB4IDEwcHggMHB4OwotfQotCi0uY2hhcnQud29yc2UgewotICAgIGJhY2tncm91
bmQ6ICNmY2M7Ci19Ci0KLS5jaGFydC5iZXR0ZXIgewotICAgIGJhY2tncm91bmQ6ICNjZmM7Ci19
Ci0KLSNjaGFydHMgLnBhbmUgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAx
MHB4OwotICAgIHRvcDogMTBweDsKLSAgICB3aWR0aDogMjMwcHg7Ci19Ci0KLS5jaGFydCBoZWFk
ZXIgewotICAgIGhlaWdodDogM2VtOwotICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7Ci0gICAgdmVy
dGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQotI2Rhc2hib2FyZCBoZWFkZXIgewotICAgIHBhZGRp
bmc6IDBweCAxMHB4OwotfQotCi0uY2hhcnQgaDIsIC5jaGFydCBoMyB7Ci0gICAgbWFyZ2luOiAw
IDAgMC4zZW0gMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGZvbnQtc2l6ZTogMWVtOwotICAgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgd29yZC1icmVhazogYnJlYWstYWxsOwotfQotCi0uY2hh
cnQgaDIgewotICAgIGZvbnQtc2l6ZTogbm9ybWFsOwotfQotCi0uY2hhcnQgaDMgewotICAgIGZv
bnQtc2l6ZTogbm9ybWFsOwotfQotCi0jZGFzaGJvYXJkIC5jaGFydCBoMyB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotI2Rhc2hib2FyZCAuY2hhcnQgLnN0YXR1cyB7Ci0gICAgbWFyZ2luOiAw
cHggMTBweDsKLX0KLQotLmNoYXJ0IC5zdGF0dXMgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0g
ICAgY29sb3I6ICM2NjY7Ci19Ci0KLS5wbG90IHsKLSAgICBtYXJnaW46IDVweCA1cHggMTBweCA1
cHg7Ci19Ci0KLS5jbG9zZUJ1dHRvbiBzdmcgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICBsZWZ0OiA4cHg7Ci0gICAgYm90dG9tOiA4cHg7Ci0gICAgd2lkdGg6IDE1cHg7Ci0gICAgaGVp
Z2h0OiAxNXB4OwotfQotCi0jZGFzaGJvYXJkIC5jaGFydCB7Ci0gICAgd2lkdGg6IDQxMHB4Owot
fQotCi0jZGFzaGJvYXJkIC5wbG90IHsKLSAgICB3aWR0aDogNDAwcHg7Ci0gICAgaGVpZ2h0OiAx
MDBweDsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgY3Vyc29yOiBoYW5kOwotfQotCi0jY2hh
cnRzIC5wbG90IHsKLSAgICBoZWlnaHQ6IDMyMHB4OwotICAgIG1hcmdpbi1sZWZ0OiAyNTBweDsK
LX0KLQotI2Rhc2hib2FyZCAub3ZlcnZpZXdQbG90IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQot
Ci0jY2hhcnRzIC5vdmVydmlld1Bsb3QgewotICAgIG1hcmdpbjogMTBweCAwcHggMHB4IDBweDsK
LSAgICBwYWRkaW5nOiAwOwotICAgIGhlaWdodDogNzBweDsKLX0KLQotLmNoYXJ0IC5zdW1tYXJ5
VGFibGUgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0gICAgY29sb3I6ICM2NjY7Ci0gICAgYm9y
ZGVyOiAwOwotfQotCi0uY2hhcnQgLm1ldGEgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0K
LQotLmNoYXJ0IC5tZXRhIHRhYmxlLAotLmNoYXJ0IC5tZXRhIHRkLAotLnRvb2x0aXAgdGFibGUs
Ci0udG9vbHRpcCB0ZCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5j
aGFydCAubWV0YSB0aCwKLS50b29sdGlwIHRoIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGlu
ZzogMCAwLjJlbSAwIDA7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKLX0KLQotLmNoYXJ0IC5tZXRhIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOmJlZm9yZSwK
LS50b29sdGlwIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOmJlZm9yZSB7Ci0gICAgY29udGVudDogIjog
IjsKLX0KLQotI2Rhc2hib2FyZCAuY2hhcnQgLnN1bW1hcnlUYWJsZSB7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHJpZ2h0OiAxMHB4OwotICAgIHRvcDogMHB4OwotfQotCi0jY2hhcnRz
IC5zdW1tYXJ5VGFibGUgewotICAgIG1hcmdpbi10b3A6IDAuM2VtOwotfQotCi0jZGFzaGJvYXJk
IC5hcnJvdyB7Ci0gICAgd2lkdGg6IDIwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IDUwcHg7Ci0gICAgbGVmdDogNXB4OwotfQotCi0j
Y2hhcnRzIC5hcnJvdyB7Ci0gICAgd2lkdGg6IDIwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEwcHg7Ci0gICAgbGVmdDogMjQwcHg7Ci19
Ci0KLS5jaGFydCBzdmcgewotICAgIHN0cm9rZTogI2NjYzsKLSAgICBmaWxsOiAjY2NjOwotICAg
IGNvbG9yOiAjY2NjOwotfQotCi0uY2hhcnQud29yc2Ugc3ZnIHsKLSAgICBzdHJva2U6ICNjOTk7
Ci0gICAgZmlsbDogI2M5OTsKLSAgICBjb2xvcjogI2M5OTsKLX0KLQotLmNoYXJ0LmJldHRlciBz
dmcgewotICAgIHN0cm9rZTogIzljOTsKLSAgICBmaWxsOiAjOWM5OwotICAgIGNvbG9yOiAjOWM5
OwotfQotCi0uY2hhcnQgLnlheGlzdG9nZ2xlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGJvdHRvbTogMTBweDsKLSAgICBsZWZ0OiAyMjVweDsKLSAgICB3aWR0aDogMTBweDsKLSAg
ICBoZWlnaHQ6IDI1cHg7Ci19Ci0KLSNkYXNoYm9hcmQgIC55YXhpc3RvZ2dsZXIgewotICAgIGRp
c3BsYXk6IG5vbmU7Ci19Ci0KLS50b29sdGlwIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
ICAgYm9yZGVyLXJhZGl1czogNXB4OwotICAgIHBhZGRpbmc6IDVweDsKLSAgICBvcGFjaXR5OiAw
Ljg7Ci0gICAgYmFja2dyb3VuZDogIzMzMzsKLSAgICBjb2xvcjogI2VlZTsKLSAgICBmb250LXNp
emU6IHNtYWxsOwotICAgIGxpbmUtaGVpZ2h0OiAxMzAlOwotICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7Ci19Ci0KLS50b29sdGlwOmJlZm9yZSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAg
IHdpZHRoOiAwOwotICAgIGhlaWdodDogMDsKLSAgICBsZWZ0OiA1MCU7Ci0gICAgbWFyZ2luLWxl
ZnQ6IC05cHg7Ci0gICAgdG9wOiAtMTlweDsKLSAgICBjb250ZW50OiAiIjsKLSAgICBkaXNwbGF5
OiBub25lOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAxMHB4
OwotICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzMzMyB0cmFuc3Bh
cmVudDsKLX0KLQotLnRvb2x0aXAuaW52ZXJ0ZWQ6YmVmb3JlIHsKLSAgICBkaXNwbGF5OiBibG9j
azsKLX0KLQotLnRvb2x0aXAuaW52ZXJ0ZWQ6YWZ0ZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KLS50b29sdGlwOmFmdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6
IDA7Ci0gICAgaGVpZ2h0OiAwOwotICAgIGxlZnQ6IDUwJTsKLSAgICBtYXJnaW4tbGVmdDogLTlw
eDsKLSAgICBib3R0b206IC0xOXB4OwotICAgIGNvbnRlbnQ6ICIiOwotICAgIGRpc3BsYXk6IGJs
b2NrOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAxMHB4Owot
ICAgIGJvcmRlci1jb2xvcjogIzMzMyB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVu
dDsKLX0KLQotLnRvb2x0aXAgYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0g
ICAgY29sb3I6ICNmZmY7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLS5jbGlja1Rvb2x0
aXAgewotICAgIG9wYWNpdHk6IDAuNjsKLX0KLQotLmhvdmVyVG9vbHRpcCB7Ci0gICAgei1pbmRl
eDogOTk5OTk7Ci19Ci0KLSN0ZXN0UGlja2VyIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
Ci0gICAgbWFyZ2luOiAxMHB4IDBweDsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOwotICAg
IGNvbG9yOiAjNjY2OwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLSAgICBwYWRkaW5nOiA1cHgg
OHB4OwotfQotCi08L3N0eWxlPgotPHNjcmlwdD4KLQotKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
Y2hhcnRzID0gW107Ci0gICAgdmFyIG1pblRpbWU7Ci0gICAgdmFyIGN1cnJlbnRab29tOwotICAg
IHZhciBzaGFyZWRQbG90T3B0aW9ucyA9IHsKLSAgICAgICAgbGluZXM6IHsgc2hvdzogdHJ1ZSwg
bGluZVdpZHRoOiAxIH0sCi0gICAgICAgIHhheGlzOiB7Ci0gICAgICAgICAgICBtb2RlOiAidGlt
ZSIsCi0gICAgICAgICAgICB0aW1lZm9ybWF0OiAiJW0vJWQiLAotICAgICAgICAgICAgbWluVGlj
a1NpemU6IFsxLCAnZGF5J10sCi0gICAgICAgICAgICBtYXg6IERhdGUubm93KCksIC8vIEZJWE1F
OiBUaGlzIGlzIGxpa2VseSBicm9rZW4gZm9yIG5vbi1QU1QKLSAgICAgICAgfSwKLSAgICAgICAg
eWF4aXM6IHsgdGlja0xlbmd0aDogMCB9LAotICAgICAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTog
MCB9LAotICAgICAgICBwb2ludHM6IHsgc2hvdzogZmFsc2UgfSwKLSAgICAgICAgZ3JpZDogewot
ICAgICAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEs
Ci0gICAgICAgICAgICBib3JkZXJDb2xvcjogJyM5OTknLAotICAgICAgICAgICAgYmFja2dyb3Vu
ZENvbG9yOiAnI2ZmZicsCi0gICAgICAgIH0KLSAgICB9OwotCi0gICAgZnVuY3Rpb24gYWRqdXN0
ZWRJbnRlcnZhbEZvclJ1bihyZXN1bHRzLCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5BZGp1c3Rl
ZEludGVydmFsKSB7Ci0gICAgICAgIGlmICghcmVzdWx0cykKLSAgICAgICAgICAgIHJldHVybiB7
bWluOiBOdW1iZXIuTUFYX1ZBTFVFLCBtYXg6IE51bWJlci5NSU5fVkFMVUV9OwotICAgICAgICB2
YXIgZGVncmVlT2ZXZWlnaHRpbmdEZWNyZWFzZSA9IDAuMjsKLSAgICAgICAgdmFyIG1vdmluZ0F2
ZXJhZ2UgPSByZXN1bHRzLmV4cG9uZW50aWFsTW92aW5nQXJpdGhtZXRpY01lYW4obWluVGltZSwg
ZGVncmVlT2ZXZWlnaHRpbmdEZWNyZWFzZSk7Ci0gICAgICAgIHZhciByZXN1bHRzQ291bnQgPSBy
ZXN1bHRzLmNvdW50UmVzdWx0cyhtaW5UaW1lKTsKLSAgICAgICAgdmFyIGFkanVzdG1lbnREZWx0
YSA9IHJlc3VsdHMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24obWluVGltZSkgLyA0OwotICAgICAg
ICB2YXIgYWRqdXN0ZWRNaW4gPSBtb3ZpbmdBdmVyYWdlOwotICAgICAgICB2YXIgYWRqdXN0ZWRN
YXggPSBtb3ZpbmdBdmVyYWdlOwotICAgICAgICB2YXIgYWRqdXN0bWVudENvdW50OwotICAgICAg
ICBmb3IgKGFkanVzdG1lbnRDb3VudCA9IDA7IGFkanVzdG1lbnRDb3VudCA8IDQgKiA0OyBhZGp1
c3RtZW50Q291bnQrKykgeyAvLyBEb24ndCBleHBhbmQgYmV5b25kIDQgc3RhbmRhcmQgZGV2aWF0
aW9ucy4KLSAgICAgICAgICAgIGFkanVzdGVkTWluIC09IGFkanVzdG1lbnREZWx0YTsKLSAgICAg
ICAgICAgIGFkanVzdGVkTWF4ICs9IGFkanVzdG1lbnREZWx0YTsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHRzLmNvdW50UmVzdWx0c0luSW50ZXJ2YWwobWluVGltZSwgYWRqdXN0ZWRNaW4sIGFkanVz
dGVkTWF4KSAvIHJlc3VsdHNDb3VudCA+PSBtaW5SYXRpb1RvRml0SW5BZGp1c3RlZEludGVydmFs
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYWRqdXN0bWVudENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHRz
LmNvdW50UmVzdWx0c0luSW50ZXJ2YWwobWluVGltZSwgYWRqdXN0ZWRNaW4gKyBhZGp1c3RtZW50
RGVsdGEsIGFkanVzdGVkTWF4KSAvIHJlc3VsdHNDb3VudCA8IG1pblJhdGlvVG9GaXRJbkFkanVz
dGVkSW50ZXJ2YWwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhZGp1c3Rl
ZE1pbiArPSBhZGp1c3RtZW50RGVsdGE7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhZGp1c3RtZW50Q291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKHJlc3VsdHMu
Y291bnRSZXN1bHRzSW5JbnRlcnZhbChtaW5UaW1lLCBhZGp1c3RlZE1pbiwgYWRqdXN0ZWRNYXgg
LSBhZGp1c3RtZW50RGVsdGEpIC8gcmVzdWx0c0NvdW50IDwgbWluUmF0aW9Ub0ZpdEluQWRqdXN0
ZWRJbnRlcnZhbCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFkanVzdGVk
TWF4IC09IGFkanVzdG1lbnREZWx0YTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ge21pbjog
YWRqdXN0ZWRNaW4sIG1heDogYWRqdXN0ZWRNYXh9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNv
bXB1dGVZQXhpc0JvdW5kc1RvRml0TGluZXMobWluVGltZSwgcmVzdWx0cywgYmFzZWxpbmUsIHRh
cmdldCkgewotICAgICAgICB2YXIgbWluT2ZBbGxSdW5zID0gcmVzdWx0cy5taW4obWluVGltZSk7
Ci0gICAgICAgIHZhciBtYXhPZkFsbFJ1bnMgPSByZXN1bHRzLm1heChtaW5UaW1lKTsKLSAgICAg
ICAgaWYgKGJhc2VsaW5lKSB7Ci0gICAgICAgICAgICBtaW5PZkFsbFJ1bnMgPSBNYXRoLm1pbiht
aW5PZkFsbFJ1bnMsIGJhc2VsaW5lLm1pbihtaW5UaW1lKSk7Ci0gICAgICAgICAgICBtYXhPZkFs
bFJ1bnMgPSBNYXRoLm1heChtYXhPZkFsbFJ1bnMsIGJhc2VsaW5lLm1heChtaW5UaW1lKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHRhcmdldCkgewotICAgICAgICAgICAgbWluT2ZBbGxSdW5z
ID0gTWF0aC5taW4obWluT2ZBbGxSdW5zLCB0YXJnZXQubWluKG1pblRpbWUpKTsKLSAgICAgICAg
ICAgIG1heE9mQWxsUnVucyA9IE1hdGgubWF4KG1heE9mQWxsUnVucywgdGFyZ2V0Lm1heChtaW5U
aW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIG1hcmdpblNpemUgPSAobWF4T2ZBbGxSdW5z
IC0gbWluT2ZBbGxSdW5zKSAqIDAuMTsKLQotICAgICAgICB2YXIgbWluUmF0aW9Ub0ZpdEluQWRq
dXN0ZWRJbnRlcnZhbCA9IDAuOTsKLSAgICAgICAgdmFyIGludGVydmFsRm9yUmVzdWx0cyA9IGFk
anVzdGVkSW50ZXJ2YWxGb3JSdW4ocmVzdWx0cywgbWluVGltZSwgbWluUmF0aW9Ub0ZpdEluQWRq
dXN0ZWRJbnRlcnZhbCk7Ci0gICAgICAgIHZhciBpbnRlcnZhbEZvckJhc2VsaW5lID0gYWRqdXN0
ZWRJbnRlcnZhbEZvclJ1bihiYXNlbGluZSwgbWluVGltZSwgbWluUmF0aW9Ub0ZpdEluQWRqdXN0
ZWRJbnRlcnZhbCk7Ci0gICAgICAgIHZhciBpbnRlcnZhbEZvclRhcmdldCA9IGFkanVzdGVkSW50
ZXJ2YWxGb3JSdW4odGFyZ2V0LCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5BZGp1c3RlZEludGVy
dmFsKTsKLSAgICAgICAgdmFyIGFkanVzdGVkTWluID0gTWF0aC5taW4oaW50ZXJ2YWxGb3JSZXN1
bHRzLm1pbiwgaW50ZXJ2YWxGb3JCYXNlbGluZS5taW4sIGludGVydmFsRm9yVGFyZ2V0Lm1pbik7
Ci0gICAgICAgIHZhciBhZGp1c3RlZE1heCA9IE1hdGgubWF4KGludGVydmFsRm9yUmVzdWx0cy5t
YXgsIGludGVydmFsRm9yQmFzZWxpbmUubWF4LCBpbnRlcnZhbEZvclRhcmdldC5tYXgpOwotICAg
ICAgICB2YXIgYWRqc3V0ZWRNYXJnaW5TaXplID0gKGFkanVzdGVkTWF4IC0gYWRqdXN0ZWRNaW4p
ICogMC4xOwotICAgICAgICByZXR1cm4ge21pbjogbWluT2ZBbGxSdW5zIC0gbWFyZ2luU2l6ZSwg
bWF4OiBtYXhPZkFsbFJ1bnMgKyBtYXJnaW5TaXplLAotICAgICAgICAgICAgYWRqdXN0ZWRNaW46
IE1hdGgubWF4KG1pbk9mQWxsUnVucyAtIG1hcmdpblNpemUsIGFkanVzdGVkTWluIC0gYWRqc3V0
ZWRNYXJnaW5TaXplKSwKLSAgICAgICAgICAgIGFkanVzdGVkTWF4OiBNYXRoLm1pbihtYXhPZkFs
bFJ1bnMgKyBtYXJnaW5TaXplLCBhZGp1c3RlZE1heCArIGFkanN1dGVkTWFyZ2luU2l6ZSl9Owot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbXB1dGVTdGF0dXMoc21hbGxlcklzQmV0dGVyLCBsYXN0
UmVzdWx0LCBiYXNlbGluZSwgdGFyZ2V0KSB7Ci0gICAgICAgIHZhciByZWxhdGl2ZURpZmZlcmVu
Y2VXaXRoQmFzZWxpbmUgPSBiYXNlbGluZSA/IGxhc3RSZXN1bHQucmVsYXRpdmVEaWZmZXJlbmNl
KGJhc2VsaW5lLmxhc3RSZXN1bHQoKSkgOiAwOwotICAgICAgICB2YXIgcmVsYXRpdmVEaWZmZXJl
bmNlV2l0aFRhcmdldCA9IHRhcmdldCA/IGxhc3RSZXN1bHQucmVsYXRpdmVEaWZmZXJlbmNlKHRh
cmdldC5sYXN0UmVzdWx0KCkpIDogMDsKLSAgICAgICAgdmFyIHN0YXR1c1RleHQgPSAnJzsKLSAg
ICAgICAgdmFyIHN0YXR1cyA9ICcnOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZURpZmZlcmVuY2VX
aXRoQmFzZWxpbmUgJiYgcmVsYXRpdmVEaWZmZXJlbmNlV2l0aEJhc2VsaW5lID4gMCAhPSBzbWFs
bGVySXNCZXR0ZXIpIHsKLSAgICAgICAgICAgIHN0YXR1c1RleHQgPSBNYXRoLmFicyhyZWxhdGl2
ZURpZmZlcmVuY2VXaXRoQmFzZWxpbmUgKiAxMDApLnRvRml4ZWQoMikgKyAnJSAnICsgKHNtYWxs
ZXJJc0JldHRlciA/ICdhYm92ZScgOiAnYmVsb3cnKSArICcgYmFzZWxpbmUnOwotICAgICAgICAg
ICAgc3RhdHVzID0gJ3dvcnNlJzsKLSAgICAgICAgfSBlbHNlIGlmIChyZWxhdGl2ZURpZmZlcmVu
Y2VXaXRoVGFyZ2V0ICYmIHJlbGF0aXZlRGlmZmVyZW5jZVdpdGhUYXJnZXQgPiAwID09IHNtYWxs
ZXJJc0JldHRlcikgewotICAgICAgICAgICAgc3RhdHVzVGV4dCA9IE1hdGguYWJzKHJlbGF0aXZl
RGlmZmVyZW5jZVdpdGhUYXJnZXQgKiAxMDApLnRvRml4ZWQoMikgKyAnJSAnICsgKHNtYWxsZXJJ
c0JldHRlciA/ICdiZWxvdycgOiAnYWJvdmUnKSArICcgdGFyZ2V0JzsKLSAgICAgICAgICAgIHN0
YXR1cyA9ICdiZXR0ZXInOwotICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aXZlRGlmZmVyZW5jZVdp
dGhUYXJnZXQpCi0gICAgICAgICAgICBzdGF0dXNUZXh0ID0gTWF0aC5hYnMocmVsYXRpdmVEaWZm
ZXJlbmNlV2l0aFRhcmdldCAqIDEwMCkudG9GaXhlZCgyKSArICclIHVudGlsIHRhcmdldCc7Ci0K
LSAgICAgICAgcmV0dXJuIHtjbGFzczogc3RhdHVzLCB0ZXh0OiBzdGF0dXNUZXh0fTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgbmFtZSwgcnVucywg
Y29sb3IsIGludGVyYWN0aXZlKSB7Ci0gICAgICAgIHZhciBlbnRyeSA9IHtjb2xvcjogY29sb3Is
IGRhdGE6IHJ1bnMubWVhblBsb3REYXRhKCl9OwotICAgICAgICBpZiAoIWludGVyYWN0aXZlKSB7
Ci0gICAgICAgICAgICBlbnRyeS5jbGlja2FibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGVudHJ5
LmhvdmVyYWJsZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydW5zLmhhc0NvbmZp
ZGVuY2VJbnRlcnZhbCgpKSB7Ci0gICAgICAgICAgICB2YXIgbG93ZXJOYW1lID0gbmFtZS50b0xv
d2VyQ2FzZSgpOwotICAgICAgICAgICAgdmFyIGNvbmZpZW5jZUVudHJ5ID0gJC5leHRlbmQodHJ1
ZSwge30sIGVudHJ5LCB7bGluZXM6IHtsaW5lV2lkdGg6IDB9LCBjbGlja2FibGU6IGZhbHNlLCBo
b3ZlcmFibGU6IGZhbHNlfSk7Ci0gICAgICAgICAgICBwbG90RGF0YS5wdXNoKCQuZXh0ZW5kKHRy
dWUsIHt9LCBjb25maWVuY2VFbnRyeSwge2lkOiBsb3dlck5hbWUsIGRhdGE6IHJ1bnMudXBwZXJD
b25maWRlbmNlUGxvdERhdGEoKX0pKTsKLSAgICAgICAgICAgIHBsb3REYXRhLnB1c2goJC5leHRl
bmQodHJ1ZSwge30sIGNvbmZpZW5jZUVudHJ5LAotICAgICAgICAgICAgICAgIHtmaWxsQmV0d2Vl
bjogbG93ZXJOYW1lLCBsaW5lczoge2ZpbGw6IDAuM30sIGRhdGE6IHJ1bnMubG93ZXJDb25maWRl
bmNlUGxvdERhdGEoKX0pKTsKLSAgICAgICAgfQotICAgICAgICBwbG90RGF0YS5wdXNoKGVudHJ5
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKG5hbWUsIHJ1
bnMpIHsKLSAgICAgICAgcmV0dXJuICc8dHI+PHRoPicgKyBuYW1lICsgJzwvdGg+PHRkPicgKyBy
dW5zLmxhc3RSZXN1bHQoKS5sYWJlbCgpICsgJzwvdGQ+PC90cj4nOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGJ1aWxkTGFiZWxXaXRoTGlua3MoYnVpbGQsIHByZXZpb3VzQnVpbGQpIHsKLSAgICAg
ICAgZnVuY3Rpb24gbGlua2lmeUlmTm90TnVsbChsYWJlbCwgdXJsKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdXJsID8gJzxhIGhyZWY9IicgKyB1cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIGxh
YmVsICsgJzwvYT4nIDogbGFiZWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZm9ybWF0dGVk
UmV2aXNpb25zID0gYnVpbGQuZm9ybWF0dGVkUmV2aXNpb25zKHByZXZpb3VzQnVpbGQpOwotICAg
ICAgICB2YXIgYnVpbGRJbmZvID0gewotICAgICAgICAgICAgJ0NvbW1pdCc6IGJ1aWxkLmZvcm1h
dHRlZFRpbWUoKSwKLSAgICAgICAgICAgICdCdWlsZCc6IGxpbmtpZnlJZk5vdE51bGwoYnVpbGQu
YnVpbGROdW1iZXIoKSwgYnVpbGQuYnVpbGRVcmwoKSkgKyAnKCcgKyBidWlsZC5mb3JtYXR0ZWRC
dWlsZFRpbWUoKSArICcpJwotICAgICAgICB9OwotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5
TmFtZSBpbiBmb3JtYXR0ZWRSZXZpc2lvbnMpCi0gICAgICAgICAgICBidWlsZEluZm9bcmVwb3Np
dG9yeU5hbWVdID0gbGlua2lmeUlmTm90TnVsbChmb3JtYXR0ZWRSZXZpc2lvbnNbcmVwb3NpdG9y
eU5hbWVdLmxhYmVsLCBmb3JtYXR0ZWRSZXZpc2lvbnNbcmVwb3NpdG9yeU5hbWVdLnVybCk7Ci0g
ICAgICAgIHZhciBtYXJrdXAgPSAnJzsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIGJ1aWxkSW5m
bykKLSAgICAgICAgICAgIG1hcmt1cCArPSAnPHRyPjx0aD4nICsga2V5ICsgJzwvdGg+PHRkPicg
KyBidWlsZEluZm9ba2V5XSArICc8L3RkPic7Ci0gICAgICAgIHJldHVybiAnPHRyPicgKyBtYXJr
dXAgKyAnPC90cj4nOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIENoYXJ0KGNvbnRhaW5lciwgaXNE
YXNoYm9hcmQsIHBsYXRmb3JtLCBtZXRyaWMsIGJ1Z1RyYWNrZXJzLCBvbkNsb3NlKSB7Ci0gICAg
ICAgIHZhciBsaW5raWZpZWRGdWxsTmFtZSA9IG1ldHJpYy5mdWxsTmFtZTsKLSAgICAgICAgaWYg
KG1ldHJpYy50ZXN0LnVybCkKLSAgICAgICAgICAgIGxpbmtpZmllZEZ1bGxOYW1lID0gJzxhIGhy
ZWY9IicgKyBtZXRyaWMudGVzdC51cmwgKyAnIj4nICsgbGlua2lmaWVkRnVsbE5hbWUgKyAnPC9h
Pic7Ci0gICAgICAgIHZhciBzZWN0aW9uID0gJCgnPHNlY3Rpb24gY2xhc3M9ImNoYXJ0Ij48ZGl2
IGNsYXNzPSJwYW5lIj48aGVhZGVyPjxoMj4nICsgbGlua2lmaWVkRnVsbE5hbWUgKyAnPC9oMj4n
Ci0gICAgICAgICAgICArICc8aDMgY2xhc3M9InBsYXRmb3JtIj4nICsgcGxhdGZvcm0ubmFtZSAr
ICc8L2gzPjwvaGVhZGVyPicKLSAgICAgICAgICAgICsgJzxkaXYgY2xhc3M9Im1ldGEiPjx0YWJs
ZSBjbGFzcz0ic3RhdHVzIj48dGJvZHk+PC90Ym9keT48L3RhYmxlPjx0YWJsZSBjbGFzcz0ic3Vt
bWFyeVRhYmxlIj48dGJvZHk+PC90Ym9keT48L3RhYmxlPjwvZGl2PicKLSAgICAgICAgICAgICsg
JzxkaXYgY2xhc3M9Im92ZXJ2aWV3UGxvdCI+PC9kaXY+PC9kaXY+JwotICAgICAgICAgICAgKyAn
PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+JwotICAgICAgICAgICAgKyAnPGRpdiBjbGFzcz0idW5p
dCI+PC9kaXY+JwotICAgICAgICAgICAgKyAnPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTAwIiBjbGFz
cz0iYXJyb3ciPicKLSAgICAgICAgICAgICsgJzxnIHN0cm9rZS13aWR0aD0iMTAiPjxsaW5lIHgx
PSIxMCIgeTE9IjgiIHgyPSIxMCIgeTI9IjkyIiAvPicKLSAgICAgICAgICAgICsgJzxwb2x5Z29u
IHBvaW50cz0iNSw4NSAxNSw4NSAxMCw5MCIgY2xhc3M9ImRvd253YXJkQXJyb3dIZWFkIiAvPicK
LSAgICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0iNSwxNSAxNSwxNSAxMCwxMCIgY2xhc3M9
InVwd2FyZEFycm93SGVhZCIgLz4nCi0gICAgICAgICAgICArICc8L2c+PC9zdmc+JwotICAgICAg
ICAgICAgKyAnPGEgaHJlZj0iIyIgY2xhc3M9InRvZ2dsZVlBeGlzIj48c3ZnIHZpZXdCb3g9IjAg
MCA0MCAxMDAiIGNsYXNzPSJ5YXhpc3RvZ2dsZXIiPjxnIHN0cm9rZS13aWR0aD0iMTAiPicKLSAg
ICAgICAgICAgICsgJzxsaW5lIHgxPSIyMCIgeTE9IjgiIHgyPSIyMCIgeTI9IjgyIiAvPicKLSAg
ICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0iMTUsMTUgMjUsMTUgMjAsMTAiIC8+JwotICAg
ICAgICAgICAgKyAnPHBvbHlnb24gcG9pbnRzPSIxNSw3NSAyNSw3NSAyMCw4MCIgLz4nCi0gICAg
ICAgICAgICArICc8bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iNDAiIHkyPSI5MiIgLz4nCi0gICAg
ICAgICAgICArICc8L2c+PC9zdmc+PC9hPicKLSAgICAgICAgICAgICsgJzxhIGhyZWY9IiMiIGNs
YXNzPSJjbG9zZUJ1dHRvbiI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+JwotICAgICAgICAg
ICAgKyAnPGcgc3Ryb2tlLXdpZHRoPSIxMCI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDUi
IGZpbGw9InRyYW5zcGFyZW50Ii8+PHBvbHlnb24gcG9pbnRzPSIzMCwzMCA3MCw3MCIgLz4nCi0g
ICAgICAgICAgICArICc8cG9seWdvbiBwb2ludHM9IjMwLDcwIDcwLDMwIiAvPjwvZz48L3N2Zz48
L2E+PC9zZWN0aW9uPicpOwotCi0gICAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoc2VjdGlvbik7
Ci0KLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBpZiAob25DbG9zZSkgewotICAg
ICAgICAgICAgc2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0
aW9uIChldmVudCkgewotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgICAgICAgICAgc2VjdGlvbi5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICBjaGFydHMu
c3BsaWNlKGNoYXJ0cy5pbmRleE9mKHNlbGYpLCAxKTsKLSAgICAgICAgICAgICAgICBvbkNsb3Nl
KHNlbGYpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNlY3Rpb24uZmluZCgnLmNsb3NlQnV0dG9uJyku
aGlkZSgpOwotCi0gICAgICAgIHNlY3Rpb24uZmluZCgnLnlheGlzdG9nZ2xlcicpLmJpbmQoJ2Ns
aWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICAgICAgICBzZWxmLnRvZ2dsZVlBeGlzKCk7
Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgcGxvdERhdGEgPSBbXTsKLSAgICAg
ICAgdmFyIHJlc3VsdHM7Ci0gICAgICAgIHZhciBiYXNlbGluZTsKLSAgICAgICAgdmFyIHRhcmdl
dDsKLQotICAgICAgICB2YXIgdG9vbHRpcCA9IG5ldyBUb29sdGlwKGNvbnRhaW5lciwgJ3Rvb2x0
aXAgaG92ZXJUb29sdGlwJyk7Ci0gICAgICAgIHZhciBib3VuZHM7Ci0gICAgICAgIHZhciBwbG90
Q29udGFpbmVyID0gc2VjdGlvbi5maW5kKCcucGxvdCcpOwotICAgICAgICB2YXIgbWFpblBsb3Q7
Ci0gICAgICAgIHZhciBvdmVydmlld1Bsb3Q7Ci0gICAgICAgIHZhciBjbGlja1Rvb2x0aXBzID0g
W107Ci0gICAgICAgIHZhciBzaG91bGRTaG93RW50aXJlWUF4aXMgPSBmYWxzZTsKLQotICAgICAg
ICB0aGlzLnBsYXRmb3JtID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm07IH0KLSAgICAg
ICAgdGhpcy5tZXRyaWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KLQotICAgICAg
ICB0aGlzLnBvcHVsYXRlID0gZnVuY3Rpb24gKHBhc3NlZFJlc3VsdHMsIHBhc3NlZEJhc2VsaW5l
LCBwYXNzZWRUYXJnZXQpIHsKLSAgICAgICAgICAgIHJlc3VsdHMgPSBwYXNzZWRSZXN1bHRzOwot
ICAgICAgICAgICAgYmFzZWxpbmUgPSBwYXNzZWRCYXNlbGluZTsKLSAgICAgICAgICAgIHRhcmdl
dCA9IHBhc3NlZFRhcmdldDsKLQotICAgICAgICAgICAgdmFyIHN1bW1hcnlSb3dzID0gJyc7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JS
dW4ocGxvdERhdGEsICdUYXJnZXQnLCB0YXJnZXQsICcjMDM5Jyk7Ci0gICAgICAgICAgICAgICAg
c3VtbWFyeVJvd3MgPSBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKCdUYXJnZXQnLCB0YXJnZXQpICsg
c3VtbWFyeVJvd3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZWxpbmUpIHsK
LSAgICAgICAgICAgICAgICBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgJ0Jhc2VsaW5lJywg
YmFzZWxpbmUsICcjOTMwJyk7Ci0gICAgICAgICAgICAgICAgc3VtbWFyeVJvd3MgPSBjcmVhdGVT
dW1tYXJ5Um93TWFya3VwKCdCYXNlbGluZScsIGJhc2VsaW5lKSArIHN1bW1hcnlSb3dzOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JSdW4ocGxvdERhdGEsICdDdXJy
ZW50JywgcmVzdWx0cywgJyM2NjYnLCB0cnVlKTsKLSAgICAgICAgICAgIHN1bW1hcnlSb3dzID0g
Y3JlYXRlU3VtbWFyeVJvd01hcmt1cCgnQ3VycmVudCcsIHJlc3VsdHMpICsgc3VtbWFyeVJvd3M7
Ci0KLSAgICAgICAgICAgIHZhciBzdGF0dXMgPSBjb21wdXRlU3RhdHVzKHJlc3VsdHMuc21hbGxl
cklzQmV0dGVyKCksIHJlc3VsdHMubGFzdFJlc3VsdCgpLCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAg
ICAgICAgICAgIGlmIChzdGF0dXMudGV4dCkKLSAgICAgICAgICAgICAgICBzdW1tYXJ5Um93cyA9
ICc8dHI+PHRkIGNvbHNwYW49IjIiPicgKyBzdGF0dXMudGV4dCArICc8L3RkPjwvdHI+JyArIHN1
bW1hcnlSb3dzOwotICAgICAgICAgICAgc2VjdGlvbi5hZGRDbGFzcyhzdGF0dXMuY2xhc3MpOwot
ICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcuc3RhdHVzIHRib2R5JykuaHRtbChidWlsZExhYmVs
V2l0aExpbmtzKHJlc3VsdHMubGFzdFJlc3VsdCgpLmJ1aWxkKCkpKTsKLSAgICAgICAgICAgIHNl
Y3Rpb24uZmluZCgnLnN1bW1hcnlUYWJsZSB0Ym9keScpLmh0bWwoc3VtbWFyeVJvd3MpOwotICAg
ICAgICAgICAgaWYgKHJlc3VsdHMuc21hbGxlcklzQmV0dGVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBzZWN0aW9uLmZpbmQoJy5hcnJvdyAuZG93bndhcmRBcnJvd0hlYWQnKS5zaG93KCk7Ci0gICAg
ICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcuYXJyb3cgLnVwd2FyZEFycm93SGVhZCcpLmhpZGUo
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcu
YXJyb3cgLmRvd253YXJkQXJyb3dIZWFkJykuaGlkZSgpOwotICAgICAgICAgICAgICAgIHNlY3Rp
b24uZmluZCgnLmFycm93IC51cHdhcmRBcnJvd0hlYWQnKS5zaG93KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90ID0gZnVuY3Rpb24gKHhN
aW4sIHhNYXgpIHsKLSAgICAgICAgICAgIGlmICghYm91bmRzKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgdmFyIG1haW5QbG90T3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUs
IHt9LCBzaGFyZWRQbG90T3B0aW9ucywgewotICAgICAgICAgICAgICAgIHhheGlzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1pbjogeE1pbiwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIHlheGlzOiB7Ci0gICAgICAgICAgICAgICAgICAgIHRpY2tMZW5ndGg6IG51bGwsCi0g
ICAgICAgICAgICAgICAgICAgIG1pbjogc2hvdWxkU2hvd0VudGlyZVlBeGlzID8gMCA6IGJvdW5k
cy5hZGp1c3RlZE1pbiwKLSAgICAgICAgICAgICAgICAgICAgbWF4OiBzaG91bGRTaG93RW50aXJl
WUF4aXMgPyBib3VuZHMubWF4IDogYm91bmRzLmFkanVzdGVkTWF4LAotICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgY3Jvc3NoYWlyOiB7J21vZGUnOiAneCcsIGNvbG9yOiAnI2M5
MCcsIGxpbmVXaWR0aDogMX0sCi0gICAgICAgICAgICAgICAgZ3JpZDoge2NsaWNrYWJsZTogdHJ1
ZX0sCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICh4TWF4KQotICAgICAgICAgICAg
ICAgIG1haW5QbG90T3B0aW9ucy54YXhpcy5tYXggPSB4TWF4OwotICAgICAgICAgICAgaWYgKGlz
RGFzaGJvYXJkKSB7Ci0gICAgICAgICAgICAgICAgbWFpblBsb3RPcHRpb25zLnlheGlzLmxhYmVs
V2lkdGggPSAyMDsKLSAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlvbnMueWF4aXMudGlja3Mg
PSBbbWFpblBsb3RPcHRpb25zLnlheGlzLm1pbiwgbWFpblBsb3RPcHRpb25zLnlheGlzLm1heF07
Ci0gICAgICAgICAgICAgICAgbWFpblBsb3RPcHRpb25zLmdyaWQuYXV0b0hpZ2hsaWdodCA9IGZh
bHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlv
bnMueWF4aXMubGFiZWxXaWR0aCA9IDMwOwotICAgICAgICAgICAgICAgIG1haW5QbG90T3B0aW9u
cy5zZWxlY3Rpb24gPSB7bW9kZTogIngifTsKLSAgICAgICAgICAgICAgICBwbG90RGF0YVtwbG90
RGF0YS5sZW5ndGggLSAxXS5wb2ludHMgPSB7c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1haW5QbG90ID0gJC5wbG90KHBsb3RDb250YWluZXIsIHBs
b3REYXRhLCBtYWluUGxvdE9wdGlvbnMpOwotICAgICAgICAgICAgcGxvdERhdGFbcGxvdERhdGEu
bGVuZ3RoIC0gMV0ucG9pbnRzID0ge307Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2xpY2tUb29sdGlwcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChjbGlj
a1Rvb2x0aXBzW2ldKQotICAgICAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2ldLnJlbW92
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xpY2tUb29sdGlwcyA9IFtdOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy50b2dnbGVZQXhpcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHNob3VsZFNob3dFbnRpcmVZQXhpcyA9ICFzaG91bGRTaG93RW50aXJlWUF4aXM7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudFpvb20pCi0gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hN
YWluUGxvdChjdXJyZW50Wm9vbS5mcm9tLCBjdXJyZW50Wm9vbS50byk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hNYWluUGxvdChtaW5UaW1lKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuem9vbSA9IGZ1bmN0aW9uIChmcm9tLCB0bykgewotICAgICAg
ICAgICAgdGhpcy5hdHRhY2hNYWluUGxvdChmcm9tLCB0byk7Ci0gICAgICAgICAgICBpZiAob3Zl
cnZpZXdQbG90KQotICAgICAgICAgICAgICAgIG92ZXJ2aWV3UGxvdC5zZXRTZWxlY3Rpb24oe3hh
eGlzOiB7ZnJvbTogZnJvbSwgdG86IHRvfX0sIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5jbGVhclpvb20gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLmF0dGFjaE1h
aW5QbG90KG1pblRpbWUpOwotICAgICAgICAgICAgaWYgKG92ZXJ2aWV3UGxvdCkKLSAgICAgICAg
ICAgICAgICBvdmVydmlld1Bsb3QuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdGhpcy5zZXRDcm9zc2hhaXIgPSBmdW5jdGlvbiAocG9zKSB7Ci0gICAgICAg
ICAgICBpZiAobWFpblBsb3QpCi0gICAgICAgICAgICAgICAgbWFpblBsb3Quc2V0Q3Jvc3NoYWly
KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmNsZWFyQ3Jvc3NoYWlyID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgaWYgKG1haW5QbG90KQotICAgICAgICAgICAgICAgIG1haW5Q
bG90LmNsZWFyQ3Jvc3NoYWlyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmhpZGVUb29s
dGlwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAodG9vbHRpcCkKLSAgICAgICAgICAg
ICAgICB0b29sdGlwLmhpZGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHRvZ2ds
ZUNsaWNrVG9vbHRpcChpbmRleCwgcGFnZVgsIHBhZ2VZKSB7Ci0gICAgICAgICAgICBpZiAoY2xp
Y2tUb29sdGlwc1tpbmRleF0pCi0gICAgICAgICAgICAgICAgY2xpY2tUb29sdGlwc1tpbmRleF0u
dG9nZ2xlKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
UHV0IHRoaXMgb24gVVJMU3RhdGUuCi0gICAgICAgICAgICAgICAgdmFyIG5ld1Rvb2x0aXAgPSBu
ZXcgVG9vbHRpcChjb250YWluZXIsICd0b29sdGlwIGNsaWNrVG9vbHRpcCcpOwotICAgICAgICAg
ICAgICAgIHNob3dUb29sdGlwV2l0aFJlc3VsdHMobmV3VG9vbHRpcCwgcGFnZVgsIHBhZ2VZLCBy
ZXN1bHRzLnJlc3VsdEF0KGluZGV4KSwgcmVzdWx0cy5yZXN1bHRBdChpbmRleCAtIDEpKTsKLSAg
ICAgICAgICAgICAgICBuZXdUb29sdGlwLmJpbmRDbGljayhmdW5jdGlvbiAoKSB7IHRvZ2dsZUNs
aWNrVG9vbHRpcChpbmRleCwgcGFnZVgsIHBhZ2VZKTsgfSk7Ci0gICAgICAgICAgICAgICAgbmV3
VG9vbHRpcC5iaW5kTW91c2VFbnRlcihmdW5jdGlvbiAoKSB7IHRvb2x0aXAuaGlkZSgpOyB9KTsK
LSAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2luZGV4XSA9IG5ld1Rvb2x0aXA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB0b29sdGlwLmhpZGUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHNob3dUb29sdGlwV2l0aFJlc3VsdHModG9vbHRpcCwgeCwgeSwgcmVzdWx0
LCByZXN1bHRUb0NvbXBhcmUpIHsKLSAgICAgICAgICAgIHZhciBuZXdCdWdVcmxzID0gJyc7Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0VG9Db21wYXJlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRp
dGxlID0gKHJlc3VsdFRvQ29tcGFyZS5pc0JldHRlclRoYW4ocmVzdWx0KSA/ICdSRUdSRVNTSU9O
OiAnIDogJycpICsgcmVzdWx0Lm1ldHJpYygpLmZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAg
ICsgJyBnb3QgJyArIHJlc3VsdC5mb3JtYXR0ZWRQcm9ncmVzc2lvbk9yUmVncmVzc2lvbihyZXN1
bHRUb0NvbXBhcmUpCi0gICAgICAgICAgICAgICAgICAgICsgJyBhcm91bmQgJyArIHJlc3VsdC5i
dWlsZCgpLmZvcm1hdHRlZFRpbWUoKTsKLSAgICAgICAgICAgICAgICB2YXIgcmV2aXNpb25zID0g
cmVzdWx0LmJ1aWxkKCkuZm9ybWF0dGVkUmV2aXNpb25zKHJlc3VsdFRvQ29tcGFyZS5idWlsZCgp
KTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIHRyYWNrZXJJZCBpbiBidWdUcmFja2Vycykg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgdHJhY2tlciA9IGJ1Z1RyYWNrZXJzW3RyYWNrZXJJ
ZF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXBvc2l0b3JpZXMgPSB0cmFja2VyLnJlcG9z
aXRvcmllczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJ1BsYXRmb3Jt
OiAnICsgcmVzdWx0LmJ1aWxkKCkucGxhdGZvcm0oKS5uYW1lICsgJ1xuXG4nOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcG9zaXRvcmllcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnlOYW1lID0gcmVwb3NpdG9y
aWVzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldmlzaW9uID0gcmV2aXNpb25z
W3JlcG9zaXRvcnlOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV2aXNpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmV2aXNpb24udXJsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uICs9IHJlcG9zaXRvcnlOYW1lICsgJzogJyArIHJldmlzaW9uLnVybDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdGlvbiArPSByZXZpc2lvbi5sYWJlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHVybCA9IHRyYWNrZXIubmV3QnVnVXJsCi0gICAgICAgICAgICAgICAgICAgICAgICAu
cmVwbGFjZSgvXCR0aXRsZS9nLCBlbmNvZGVVUklDb21wb25lbnQodGl0bGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkZGVzY3JpcHRpb24vZywgZW5jb2RlVVJJQ29tcG9u
ZW50KGRlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cJGxp
bmsvZywgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5ld0J1Z1VybHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdCdWdVcmxz
ICs9ICcsJzsKLSAgICAgICAgICAgICAgICAgICAgbmV3QnVnVXJscyArPSAnIDxhIGhyZWY9Iicg
KyB1cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIHRyYWNrZXIubmFtZSArICc8L2E+JzsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV3QnVnVXJscyA9ICdGaWxlOicgKyBu
ZXdCdWdVcmxzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9vbHRpcC5zaG93KHgsIHks
IHJlc3VsdC5sYWJlbChyZXN1bHRUb0NvbXBhcmUpICsgJzx0YWJsZT4nCi0gICAgICAgICAgICAg
ICAgKyBidWlsZExhYmVsV2l0aExpbmtzKHJlc3VsdC5idWlsZCgpLCByZXN1bHRUb0NvbXBhcmUg
PyByZXN1bHRUb0NvbXBhcmUuYnVpbGQoKSA6IG51bGwpICsgJzwvdGFibGU+JwotICAgICAgICAg
ICAgICAgICsgbmV3QnVnVXJscyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b29sdGlwLmJpbmRD
bGljayhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAodG9vbHRpcC5jdXJyZW50SXRlbSkK
LSAgICAgICAgICAgICAgICB0b2dnbGVDbGlja1Rvb2x0aXAodG9vbHRpcC5jdXJyZW50SXRlbS5k
YXRhSW5kZXgsIHRvb2x0aXAuY3VycmVudEl0ZW0ucGFnZVgsIHRvb2x0aXAuY3VycmVudEl0ZW0u
cGFnZVkpOwotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBjbG9zZXN0SXRlbUZvclBh
Z2VYUmVzcGVjdGluZ1Bsb3RPZmZzZXQoaXRlbSwgcGxvdCwgc2VyaWVzLCBwYWdlWCkgewotICAg
ICAgICAgICAgaWYgKCFzZXJpZXMgfHwgIXNlcmllcy5kYXRhLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgdmFyIG9mZnNldCA9ICQocGxvdENvbnRh
aW5lcikub2Zmc2V0KCk7Ci0gICAgICAgICAgICB2YXIgcG9pbnRzID0gc2VyaWVzLmRhdGFwb2lu
dHMucG9pbnRzOwotICAgICAgICAgICAgdmFyIHNpemUgPSBzZXJpZXMuZGF0YXBvaW50cy5wb2lu
dHNpemU7Ci0gICAgICAgICAgICB2YXIgeEluUGxvdCA9IHBhZ2VYIC0gb2Zmc2V0LmxlZnQ7Ci0K
LSAgICAgICAgICAgIGlmICh4SW5QbG90IDwgcGxvdC5nZXRQbG90T2Zmc2V0KCkubGVmdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGlmIChpdGVtKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpdGVtOwotCi0gICAgICAgICAgICB2YXIgcHJldmlvdXNQb2ludDsK
LSAgICAgICAgICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgICAgIHZhciBjdXJyZW50UG9pbnQgPSBwbG90LnBvaW50T2Zmc2V0KHt4OiBwb2lu
dHNbaW5kZXggKiBzaXplXSwgeTogcG9pbnRzW2luZGV4ICogc2l6ZSArIDFdfSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHhJblBsb3QgPCBjdXJyZW50UG9pbnQubGVmdCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldmlvdXNQb2ludCAmJiB4SW5QbG90IDwgKHByZXZpb3VzUG9pbnQubGVm
dCArIGN1cnJlbnRQb2ludC5sZWZ0KSAvIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4IC09IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBwcmV2aW91
c1BvaW50OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyAxID49IHNl
cmllcy5kYXRhLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgcHJldmlvdXNQb2ludCA9IGN1cnJlbnRQb2ludDsKLSAgICAgICAgICAgICAgICBpbmRl
eCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdhbnQgdG8g
cmV0dXJuIGEgcmVhbCBpdGVtIG9iamVjdCBidXQgZmxvdCBkb2Vzbid0IHByb3ZpZGUgYW4gQVBJ
IHRvIG9idGFpbiBvbmUKLSAgICAgICAgICAgIC8vIHNvIGNyZWF0ZSBhbiBvYmplY3QgdGhhdCBj
b250YWluIHByb3BlcnRpZXMgd2UgdXNlLgotICAgICAgICAgICAgcmV0dXJuIHtkYXRhSW5kZXg6
IGluZGV4LCBwYWdlWDogb2Zmc2V0LmxlZnQgKyBjdXJyZW50UG9pbnQubGVmdCwgcGFnZVk6IG9m
ZnNldC50b3AgKyBjdXJyZW50UG9pbnQudG9wfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJl
dHVybiBhIHBsb3QgZ2VuZXJhdG9yLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIGNo
YW5nZSB0aGUgbnVtYmVyIG9mIGRheXMgdG8gc2hvdy4KLSAgICAgICAgdGhpcy5hdHRhY2ggPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBib3VuZHMgPSBjb21wdXRlWUF4aXNCb3VuZHNUb0ZpdExp
bmVzKG1pblRpbWUsIHJlc3VsdHMsIGJhc2VsaW5lLCB0YXJnZXQpOwotCi0gICAgICAgICAgICB2
YXIgb3ZlcnZpZXdDb250YWluZXIgPSBzZWN0aW9uLmZpbmQoJy5vdmVydmlld1Bsb3QnKTsKLSAg
ICAgICAgICAgIGlmICghaXNEYXNoYm9hcmQpIHsKLSAgICAgICAgICAgICAgICBvdmVydmlld1Bs
b3QgPSAkLnBsb3Qob3ZlcnZpZXdDb250YWluZXIsIHBsb3REYXRhLAotICAgICAgICAgICAgICAg
ICAgICAkLmV4dGVuZCh0cnVlLCB7fSwgc2hhcmVkUGxvdE9wdGlvbnMsIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHhheGlzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBt
aW5UaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiB0aWNrcyB3ZSBjYW4gZml0IG9uIHRoZSBvdmVyZmxvdyBwbG90IGlzIDQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGlja1NpemU6IFsoVGVzdEJ1aWxkLm5vdygpIC0gbWluVGlt
ZSkgLyA0IC8gMTAwMCwgJ3NlY29uZCddCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JpZDogeyBob3ZlcmFibGU6IGZhbHNlLCBjbGlja2FibGU6
IGZhbHNlIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHsgbW9kZTogIngi
IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB5YXhpczogewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNob3c6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjog
Ym91bmRzLm1pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IGJvdW5kcy5tYXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkpOwotCi0gICAg
ICAgICAgICAgICAgJChwbG90Q29udGFpbmVyKS5iaW5kKCJwbG90c2VsZWN0ZWQiLCBmdW5jdGlv
biAoZXZlbnQsIHJhbmdlcykgeyBDaGFydC56b29tKHJhbmdlcy54YXhpcy5mcm9tLCByYW5nZXMu
eGF4aXMudG8pOyB9KTsKLSAgICAgICAgICAgICAgICAkKG92ZXJ2aWV3Q29udGFpbmVyKS5iaW5k
KCJwbG90c2VsZWN0ZWQiLCBmdW5jdGlvbiAoZXZlbnQsIHJhbmdlcykgeyBDaGFydC56b29tKHJh
bmdlcy54YXhpcy5mcm9tLCByYW5nZXMueGF4aXMudG8pOyB9KTsKLSAgICAgICAgICAgICAgICAk
KG92ZXJ2aWV3Q29udGFpbmVyKS5iaW5kKCJwbG90dW5zZWxlY3RlZCIsIGZ1bmN0aW9uICgpIHsg
Q2hhcnQuY2xlYXJab29tKG1pblRpbWUpIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoY3VycmVudFpvb20pCi0gICAgICAgICAgICAgICAgdGhpcy56b29tKGN1cnJlbnRab29t
LmZyb20sIGN1cnJlbnRab29tLnRvKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB0aGlzLmF0dGFjaE1haW5QbG90KG1pblRpbWUpOwotCi0gICAgICAgICAgICBpZiAoYmluZFBs
b3RFdmVudEhhbmRsZXJzKQotICAgICAgICAgICAgICAgIGJpbmRQbG90RXZlbnRIYW5kbGVycyh0
aGlzKTsKLSAgICAgICAgICAgIGJpbmRQbG90RXZlbnRIYW5kbGVycyA9IG51bGw7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgZnVuY3Rpb24gYmluZFBsb3RFdmVudEhhbmRsZXJzKGNoYXJ0KSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQ3Jvc3NoYWlyIHNob3VsZCBzdGF5IHdoZXJlIGl0IHdhcyBi
ZXR3ZWVuIGNoYXJ0cy4KLSAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgicGxvdGhv
dmVyIiwgZnVuY3Rpb24gKGV2ZW50LCBwb3MsIGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoYXJ0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2hhcnRzW2ldICE9PSBjaGFydCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hh
cnRzW2ldLnNldENyb3NzaGFpcihwb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRz
W2ldLmhpZGVUb29sdGlwKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzRGFzaGJvYXJkKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBtYWluUGxvdC5nZXREYXRhKCk7
Ci0gICAgICAgICAgICAgICAgaXRlbSA9IGNsb3Nlc3RJdGVtRm9yUGFnZVhSZXNwZWN0aW5nUGxv
dE9mZnNldChpdGVtLCBtYWluUGxvdCwgZGF0YVtkYXRhLmxlbmd0aCAtIDFdLCBwb3MucGFnZVgp
OwotICAgICAgICAgICAgICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyh0b29sdGlwLCBpdGVt
LnBhZ2VYLCBpdGVtLnBhZ2VZLCByZXN1bHRzLnJlc3VsdEF0KGl0ZW0uZGF0YUluZGV4KSwgcmVz
dWx0cy5yZXN1bHRBdChpdGVtLmRhdGFJbmRleCAtIDEpKTsKLSAgICAgICAgICAgICAgICB0b29s
dGlwLmN1cnJlbnRJdGVtID0gaXRlbTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAk
KHBsb3RDb250YWluZXIpLmJpbmQoIm1vdXNlbGVhdmUiLCBmdW5jdGlvbiAoZXZlbnQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJChwbG90Q29udGFpbmVyKS5vZmZzZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0LmxlZnQgPD0gZXZlbnQucGFnZVggJiYgb2Zmc2V0LnRv
cCA8PSBldmVudC5wYWdlWSAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICQocGxvdENv
bnRhaW5lcikub3V0ZXJXaWR0aCgpCi0gICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnBhZ2VZ
IDw9IG9mZnNldC50b3AgKyAkKHBsb3RDb250YWluZXIpLm91dGVySGVpZ2h0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hhcnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJ0c1tpXS5j
bGVhckNyb3NzaGFpcigpOwotICAgICAgICAgICAgICAgICAgICBjaGFydHNbaV0uaGlkZVRvb2x0
aXAoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICBpZiAoaXNEYXNoYm9hcmQpIHsgLy8gRklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IGJlbG9uZyBo
ZXJlLgotICAgICAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgnY2xpY2snLCBmdW5j
dGlvbiAoZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgb3BlbkNoYXJ0KHJlc3VsdHMucGxh
dGZvcm0oKSwgcmVzdWx0cy5tZXRyaWMoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgicGxv
dGNsaWNrIiwgZnVuY3Rpb24gKGV2ZW50LCBwb3MsIGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRvb2x0aXAuY3VycmVudEl0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2dn
bGVDbGlja1Rvb2x0aXAodG9vbHRpcC5jdXJyZW50SXRlbS5kYXRhSW5kZXgsIHRvb2x0aXAuY3Vy
cmVudEl0ZW0ucGFnZVgsIHRvb2x0aXAuY3VycmVudEl0ZW0ucGFnZVkpOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY2hhcnRzLnB1c2go
dGhpcyk7Ci0gICAgfQotCi0gICAgQ2hhcnQuY2xlYXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGNoYXJ0cyA9IFtdOwotICAgIH0KLQotICAgIENoYXJ0LnNldE1pblRpbWUgPSBmdW5jdGlvbiAo
bmV3TWluVGltZSkgewotICAgICAgICBtaW5UaW1lID0gbmV3TWluVGltZTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBjaGFydHNb
aV0uYXR0YWNoKCk7Ci0gICAgfQotCi0gICAgQ2hhcnQub256b29tY2hhbmdlID0gZnVuY3Rpb24g
KGZyb20sIHRvKSB7IH07Ci0KLSAgICBDaGFydC56b29tID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7
Ci0gICAgICAgIGN1cnJlbnRab29tID0ge2Zyb206IGZyb20sIHRvOiB0b307Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hhcnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgY2hhcnRz
W2ldLnpvb20oZnJvbSwgdG8pOwotICAgICAgICB0aGlzLm9uem9vbWNoYW5nZShmcm9tLCB0byk7
Ci0gICAgfQotCi0gICAgQ2hhcnQuY2xlYXJab29tID0gZnVuY3Rpb24gKG1pblRpbWUpIHsKLSAg
ICAgICAgY3VycmVudFpvb20gPSB1bmRlZmluZWQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hhcnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgY2hhcnRzW2ldLmNsZWFyWm9vbSgp
OwotICAgICAgICB0aGlzLm9uem9vbWNoYW5nZSgpOwotICAgIH0KLQotICAgIHdpbmRvdy5DaGFy
dCA9IENoYXJ0OwotfSkoKTsKLQotLy8gRklYTUU6IFdlIG5lZWQgdG8gZGV2aXNlIGEgd2F5IHRv
IGZldGNoIHJ1bnMgaW4gbXVsdGlwbGUgY2h1bmtzIHNvIHRoYXQKLS8vIHdlIGRvbid0IGhhdmUg
dG8gZmV0Y2ggdGhlIGVudGlyZSB0aW1lIHNlcmllcyB0byBqdXN0IHNob3cgdGhlIGxhc3QgMyBk
YXlzLgotLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhIG1hc3MtZmV0Y2ggd2hlcmUgd2UgZmV0Y2gg
SlNPTnMgZm9yIG11bHRpcGxlIHJ1bnMgYXQgb25jZS4KLWZ1bmN0aW9uIGZldGNoVGVzdChyZXBv
c2l0b3JpZXMsIGJ1aWxkZXJzLCBmaWxlbmFtZSwgcGxhdGZvcm0sIG1ldHJpYywgY2FsbGJhY2sp
IHsKLQotICAgIGZ1bmN0aW9uIGNyZWF0ZVJ1bkFuZFJlc3VsdHMocmF3UnVucykgewotICAgICAg
ICBpZiAoIXJhd1J1bnMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIg
cnVucyA9IG5ldyBQZXJmVGVzdFJ1bnMobWV0cmljLCBwbGF0Zm9ybSk7Ci0gICAgICAgIHZhciBy
ZXN1bHRzID0gcmF3UnVucy5tYXAoZnVuY3Rpb24gKHJhd1J1bikgewotICAgICAgICAgICAgLy8g
RklYTUU6IENyZWF0aW5nIFBlcmZUZXN0UmVzdWx0IGFuZCBrZWVwaW5nIHRoZW0gYWxpdmUgaW4g
bWVtb3J5IGFsbCB0aGUgdGltZSBzZWVtcyBsaWtlIGEgdGVycmlibGUgaWRlYS4KLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBjcmVhdGUgUGVyZlRlc3RSZXN1bHQgb24gZGVtYW5kLgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdFJlc3VsdChydW5zLCByYXdSdW4sIG5ldyBUZXN0QnVp
bGQocmVwb3NpdG9yaWVzLCBidWlsZGVycywgcGxhdGZvcm0sIHJhd1J1bikpOwotICAgICAgICB9
KTsKLSAgICAgICAgcnVucy5zZXRSZXN1bHRzKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYS5idWlsZCgpLnRpbWUoKSAtIGIuYnVpbGQoKS50aW1lKCk7IH0pKTsKLSAgICAg
ICAgcmV0dXJuIHJ1bnM7Ci0gICAgfQotCi0gICAgJC5nZXRKU09OKCdhcGkvcnVucy8nICsgZmls
ZW5hbWUgKyAnP2NhY2hlPXRydWUnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAgICAgICAgdmFy
IGRhdGEgPSByZXNwb25zZS5jb25maWd1cmF0aW9uczsKLSAgICAgICAgY2FsbGJhY2soY3JlYXRl
UnVuQW5kUmVzdWx0cyhkYXRhLmN1cnJlbnQpLCBjcmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEuYmFz
ZWxpbmUpLCBjcmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEudGFyZ2V0KSk7Ci0gICAgfSk7Ci19Ci0K
LWZ1bmN0aW9uIGZpbGVOYW1lRnJvbVBsYXRmb3JtQW5kVGVzdChwbGF0Zm9ybUlkLCB0ZXN0SWQp
IHsKLSAgICByZXR1cm4gcGxhdGZvcm1JZCArICctJyArIHRlc3RJZCArICcuanNvbic7Ci19Ci0K
LWZ1bmN0aW9uIGluaXQoKSB7Ci0gICAgdmFyIGFsbFBsYXRmb3JtczsKLSAgICB2YXIgdGVzdHMg
PSBbXTsKLSAgICB2YXIgZnVsbE5hbWVUb01ldHJpYzsKLSAgICB2YXIgZGFzaGJvYXJkUGxhdGZv
cm1zOwotICAgIHZhciBydW5zQ2FjaGUgPSB7fTsgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2xlYXIg
dGhpcyBjYWNoZSBhdCBzb21lIHBvaW50LgotICAgIHZhciByZXBvc2l0b3JpZXM7Ci0gICAgdmFy
IGJ1aWxkZXJzOwotICAgIHZhciBidWdUcmFja2VyczsKLQotICAgIC8vIEZJWE1FOiBTaG93IHNv
bWUgZXJyb3IgbWVzc2FnZSB3aGVuIHdlIGdldCA0MDQuCi0gICAgZnVuY3Rpb24gZ2V0T3JGZXRj
aFRlc3QocGxhdGZvcm0sIG1ldHJpYywgY2FsbGJhY2spIHsKLSAgICAgICAgdmFyIGZpbGVuYW1l
ID0gZmlsZU5hbWVGcm9tUGxhdGZvcm1BbmRUZXN0KHBsYXRmb3JtLmlkLCBtZXRyaWMuaWQpOwot
ICAgICAgICB2YXIgY2FjaGVzID0gcnVuc0NhY2hlW2ZpbGVuYW1lXTsKLQotICAgICAgICBpZiAo
Y2FjaGVzKQotICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKGNh
Y2hlcy5jdXJyZW50LCBjYWNoZXMuYmFzZWxpbmUsIGNhY2hlcy50YXJnZXQpOyB9LCAwKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmZXRjaFRlc3QocmVwb3NpdG9yaWVzLCBidWlsZGVy
cywgZmlsZW5hbWUsIHBsYXRmb3JtLCBtZXRyaWMsIGZ1bmN0aW9uIChjdXJyZW50LCBiYXNlbGlu
ZSwgdGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgcnVuc0NhY2hlW2ZpbGVuYW1lXSA9IHtjdXJy
ZW50OmN1cnJlbnQsIGJhc2VsaW5lOmJhc2VsaW5lLCB0YXJnZXQ6dGFyZ2V0fTsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFjayhjdXJyZW50LCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd0Rhc2hib2FyZCgpIHsK
LSAgICAgICAgdmFyIGRhc2hib2FyZFRhYmxlID0gJCgnPHRhYmxlIGlkPSJkYXNoYm9hcmQiPjwv
dGFibGU+Jyk7Ci0gICAgICAgICQoJyNtYWluQ29udGVudHMnKS5odG1sKGRhc2hib2FyZFRhYmxl
KTsKLQotICAgICAgICAvLyBTcGxpdCBkYXNoYm9hcmQgcGxhdGZvcm1zIGludG8gZ3JvdXBzIG9m
IHRocmVlIHNvIHRoYXQgaXQgZG9lc24ndCBncm93IGhvcml6b250YWxseSB0b28gbXVjaC4KLSAg
ICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhZGFwdGl2ZS4KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBNYXRoLmNlaWwoZGFzaGJvYXJkUGxhdGZvcm1zLmxlbmd0aCAvIDMpOyBpKyspCi0g
ICAgICAgICAgICBhZGRQbGF0Zm9ybXNUb0Rhc2hib2FyZChkYXNoYm9hcmRUYWJsZSwgZGFzaGJv
YXJkUGxhdGZvcm1zLnNsaWNlKGkgKiAzLCAoaSArIDEpICogMykpOwotCi0gICAgICAgIFVSTFN0
YXRlLnJlbW92ZSgnY2hhcnRMaXN0Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkUGxhdGZv
cm1zVG9EYXNoYm9hcmQoZGFzaGJvYXJkVGFibGUsIHNlbGVjdGVkUGxhdGZvcm1zKSB7Ci0gICAg
ICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOwotICAgICAg
ICBzZWxlY3RlZFBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChwbGF0Zm9ybSkgewotICAgICAg
ICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpOwotICAgICAgICAg
ICAgJChjZWxsKS50ZXh0KHBsYXRmb3JtLm5hbWUpOwotICAgICAgICAgICAgaGVhZGVyLmFwcGVu
ZENoaWxkKGNlbGwpOwotICAgICAgICB9KTsKLSAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5k
KGhlYWRlcik7Ci0KLSAgICAgICAgdmFyIHRib2R5ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0Ym9keScpKTsKLSAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5kKHRib2R5KTsKLSAgICAg
ICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7Ci0gICAgICAgIHRib2R5
LmFwcGVuZChyb3cpOwotCi0gICAgICAgIHNlbGVjdGVkUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rp
b24gKHBsYXRmb3JtKSB7Ci0gICAgICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RkJyk7Ci0gICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoY2VsbCk7Ci0KLSAgICAg
ICAgICAgIHBsYXRmb3JtLm1ldHJpY3MuZm9yRWFjaChmdW5jdGlvbiAobWV0cmljKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNoYXJ0ID0gbmV3IENoYXJ0KGNlbGwsIHRydWUsIHBsYXRmb3JtLCBt
ZXRyaWMsIGJ1Z1RyYWNrZXJzKTsKLSAgICAgICAgICAgICAgICBnZXRPckZldGNoVGVzdChwbGF0
Zm9ybSwgbWV0cmljLCBmdW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHJlbHkgb24gdGhlIG9yZGVy
IGluIHdoaWNoIFhIUiBmaW5pc2hlcyB0byBvcmRlciBwbG90cy4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGRhc2hib2FyZFRhYmxlLnBhcmVudCgpLmxlbmd0aCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhcnQucG9wdWxhdGUocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGFydC5hdHRhY2goKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHNob3dDaGFydHMobGlzdHMpIHsKLSAgICAgICAgdmFyIGNoYXJ0
c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKLSAgICAgICAg
Y2hhcnRzQ29udGFpbmVyLmlkID0gJ2NoYXJ0cyc7Ci0gICAgICAgICQoJyNtYWluQ29udGVudHMn
KS5odG1sKGNoYXJ0c0NvbnRhaW5lcik7Ci0KLSAgICAgICAgdmFyIHRlc3RQaWNrZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7Ci0gICAgICAgIHRlc3RQaWNrZXIuaWQgPSAn
dGVzdFBpY2tlcic7Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRkT3B0aW9uKHNlbGVjdCwgbGFiZWws
IHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnb3B0aW9uJyk7Ci0gICAgICAgICAgICBvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGFiZWwpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAg
ICAgICBvcHRpb24udmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGls
ZChvcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRlc3RMaXN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7Ci0gICAgICAgIHRlc3RMaXN0LmlkID0gJ3Rlc3RMaXN0
JzsKLSAgICAgICAgdGVzdFBpY2tlci5hcHBlbmRDaGlsZCh0ZXN0TGlzdCk7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0
ZXN0c1tpXS5wYXJlbnRUZXN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYWRkT3B0aW9uKHRlc3RMaXN0LCB0ZXN0c1tpXS5mdWxsTmFtZSwgdGVzdHNbaV0uaWQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG1ldHJpY0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzZWxlY3QnKTsKLSAgICAgICAgbWV0cmljTGlzdC5pZCA9ICdtZXRyaWNMaXN0JzsKLSAg
ICAgICAgdGVzdFBpY2tlci5hcHBlbmRDaGlsZChtZXRyaWNMaXN0KTsKLQotICAgICAgICB2YXIg
cGxhdGZvcm1MaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7Ci0gICAgICAg
IHBsYXRmb3JtTGlzdC5pZCA9ICdwbGF0Zm9ybUxpc3QnOwotICAgICAgICB0ZXN0UGlja2VyLmFw
cGVuZENoaWxkKHBsYXRmb3JtTGlzdCk7Ci0gICAgICAgIGNvbnN0IE9QVElPTl9WQUxVRV9GT1Jf
QUxMID0gJy0nOwotICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1MaXN0LCAnQWxsIHBsYXRmb3Jt
cycsIE9QVElPTl9WQUxVRV9GT1JfQUxMKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
bGxQbGF0Zm9ybXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1M
aXN0LCBhbGxQbGF0Zm9ybXNbaV0ubmFtZSk7Ci0KLSAgICAgICAgdGVzdExpc3Qub25jaGFuZ2Ug
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB3aGlsZSAobWV0cmljTGlzdC5maXJzdENoaWxk
KQotICAgICAgICAgICAgICAgIG1ldHJpY0xpc3QucmVtb3ZlQ2hpbGQobWV0cmljTGlzdC5maXJz
dENoaWxkKTsKLQotICAgICAgICAgICAgdmFyIG1ldHJpY3NHcm91cCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ29wdGdyb3VwJyk7Ci0gICAgICAgICAgICBtZXRyaWNzR3JvdXAubGFiZWwgPSAn
TWV0cmljcyc7Ci0gICAgICAgICAgICBtZXRyaWNMaXN0LmFwcGVuZENoaWxkKG1ldHJpY3NHcm91
cCk7Ci0gICAgICAgICAgICBhZGRPcHRpb24obWV0cmljc0dyb3VwLCAnQWxsIG1ldHJpY3MnLCBP
UFRJT05fVkFMVUVfRk9SX0FMTCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRl
c3RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RzW2ldLmlkID09IHRl
c3RMaXN0LnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRlc3QgPSB0
ZXN0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxlY3Rl
ZFRlc3QubWV0cmljcy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGZ1bGxOYW1lID0gc2VsZWN0ZWRUZXN0Lm1ldHJpY3Nbal0uZnVsbE5hbWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVOYW1lID0gZnVsbE5hbWUucmVwbGFjZShzZWxlY3Rl
ZFRlc3QuZnVsbE5hbWUsICcnKS5yZXBsYWNlKC9eWzovXS8sICcnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE9wdGlvbihtZXRyaWNzR3JvdXAsIHJlbGF0aXZlTmFtZSwgZnVsbE5hbWUp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIHN1YnRlc3RzR3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdvcHRncm91cCcpOwotICAgICAgICAgICAgc3VidGVzdHNHcm91cC5sYWJlbCA9ICdUZXN0cyc7
Ci0gICAgICAgICAgICBtZXRyaWNMaXN0LmFwcGVuZENoaWxkKHN1YnRlc3RzR3JvdXApOwotICAg
ICAgICAgICAgYWRkT3B0aW9uKHN1YnRlc3RzR3JvdXAsICdBbGwgc3VidGVzdHMnLCBPUFRJT05f
VkFMVUVfRk9SX0FMTCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXS5wYXJlbnRUZXN0IHx8
IHRlc3RzW2ldLnBhcmVudFRlc3QuaWQgIT0gdGVzdExpc3QudmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHZhciBzdWJ0ZXN0ID0gdGVzdHNbaV07
Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkVGVzdCA9IHN1YnRlc3QucGFyZW50VGVzdDsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnRlc3QubWV0cmljcy5sZW5n
dGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbE5hbWUgPSBzdWJ0ZXN0Lm1l
dHJpY3Nbal0uZnVsbE5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU5hbWUg
PSBmdWxsTmFtZS5yZXBsYWNlKHNlbGVjdGVkVGVzdC5mdWxsTmFtZSwgJycpLnJlcGxhY2UoL15b
Oi9dLywgJycpOwotICAgICAgICAgICAgICAgICAgICBhZGRPcHRpb24oc3VidGVzdHNHcm91cCwg
cmVsYXRpdmVOYW1lLCBmdWxsTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIG1ldHJpY0xpc3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgbWV0cmljID0gZnVsbE5hbWVUb01ldHJpY1ttZXRyaWNMaXN0LnZh
bHVlXTsKLSAgICAgICAgICAgIHZhciBzaG91bGRBZGRBbGxNZXRyaWNzID0gbWV0cmljTGlzdC52
YWx1ZSA9PT0gT1BUSU9OX1ZBTFVFX0ZPUl9BTEw7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBsYXRmb3JtTGlzdC5vcHRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG9wdGlvbiA9IHBsYXRmb3JtTGlzdC5vcHRpb25zW2ldOwotICAgICAgICAgICAgICAg
IGlmIChvcHRpb24udmFsdWUgPT09IE9QVElPTl9WQUxVRV9GT1JfQUxMKSAvLyBBZGRpbmcgYWxs
IG1ldHJpY3MgZm9yIGFsbCBwbGF0Zm9ybXMgd2lsbCBiZSB0b28gc2xvdy4KLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gc2hvdWxkQWRkQWxsTWV0cmljczsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmFtZVRv
UGxhdGZvcm1bb3B0aW9uLnZhbHVlXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3Jt
SGFzTWV0cmljID0gcGxhdGZvcm0ubWV0cmljcy5pbmRleE9mKG1ldHJpYykgPj0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gIXNob3VsZEFkZEFsbE1ldHJpY3MgJiYg
IXBsYXRmb3JtSGFzTWV0cmljOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICB0ZXN0TGlzdC5vbmNoYW5nZSgpOwotICAgICAgICBtZXRyaWNMaXN0
Lm9uY2hhbmdlKCk7Ci0KLSAgICAgICAgJCh0ZXN0UGlja2VyKS5hcHBlbmQoJyA8YSBocmVmPSIi
PkFkZCBDaGFydDwvYT4nKTsKLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVDaGFydChjaGFydCkg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydExpc3QubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcnRMaXN0W2ldWzBdID09IGNoYXJ0LnBsYXRmb3Jt
KCkubmFtZSAmJiBjaGFydExpc3RbaV1bMV0gPT0gY2hhcnQubWV0cmljKCkuZnVsbE5hbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2hhcnRMaXN0LnNwbGljZShpLCAxKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgVVJMU3RhdGUuc2V0KCdjaGFydExpc3QnLCBKU09OLnN0cmluZ2lmeShjaGFydExpc3Qp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWly
KHBsYXRmb3JtTmFtZSwgbWV0cmljRnVsbE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBwbGF0Zm9y
bSA9IG5hbWVUb1BsYXRmb3JtW3BsYXRmb3JtTmFtZV07Ci0gICAgICAgICAgICB2YXIgbWV0cmlj
ID0gZnVsbE5hbWVUb01ldHJpY1ttZXRyaWNGdWxsTmFtZV0KLSAgICAgICAgICAgIHZhciBjaGFy
dCA9IG5ldyBDaGFydChjaGFydHNDb250YWluZXIsIGZhbHNlLCBwbGF0Zm9ybSwgbWV0cmljLCBi
dWdUcmFja2VycywgcmVtb3ZlQ2hhcnQpOwotCi0gICAgICAgICAgICBnZXRPckZldGNoVGVzdChw
bGF0Zm9ybSwgbWV0cmljLCBmdW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgewot
ICAgICAgICAgICAgICAgIGlmICghY2hhcnRzQ29udGFpbmVyLnBhcmVudE5vZGUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjaGFydC5wb3B1bGF0ZShyZXN1
bHRzLCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBjaGFydC5hdHRhY2goKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgJCh0ZXN0UGlja2VyKS5jaGls
ZHJlbignYScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgICAgICB2YXIgbmV3Q2hhcnRMaXN0ID0g
W107Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1MaXN0LnZhbHVlID09PSBPUFRJT05fVkFMVUVf
Rk9SX0FMTCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUGxhdGZv
cm1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoYXJ0RnJvbUxp
c3RQYWlyKGFsbFBsYXRmb3Jtc1tpXS5uYW1lLCBtZXRyaWNMaXN0LnZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3Q2hhcnRMaXN0LnB1c2goW2FsbFBsYXRmb3Jtc1tpXS5uYW1lLCBtZXRy
aWNMaXN0LnZhbHVlXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlm
IChtZXRyaWNMaXN0LnZhbHVlID09PSBPUFRJT05fVkFMVUVfRk9SX0FMTCkgewotICAgICAgICAg
ICAgICAgIHZhciBncm91cCA9IG1ldHJpY0xpc3Quc2VsZWN0ZWRPcHRpb25zWzBdLnBhcmVudE5v
ZGU7Ci0gICAgICAgICAgICAgICAgdmFyIG1ldHJpY3NUb0FkZCA9IFtdOwotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IGdyb3VwLmNoaWxkcmVuW2ldLnZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobWV0cmljID09IE9QVElPTl9WQUxVRV9GT1JfQUxMKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRmb3JtTGlzdC52YWx1ZSwgbWV0cmljKTsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q2hhcnRMaXN0LnB1c2goW3BsYXRmb3JtTGlzdC52YWx1ZSwgbWV0
cmljXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjcmVhdGVDaGFydEZyb21MaXN0UGFpcihwbGF0Zm9ybUxpc3QudmFsdWUsIG1ldHJp
Y0xpc3QudmFsdWUpOwotICAgICAgICAgICAgICAgIG5ld0NoYXJ0TGlzdC5wdXNoKFtwbGF0Zm9y
bUxpc3QudmFsdWUsIG1ldHJpY0xpc3QudmFsdWVdKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY2hhcnRMaXN0ID0gY2hhcnRMaXN0LmNvbmNhdChuZXdDaGFydExpc3QpOwotICAgICAg
ICAgICAgVVJMU3RhdGUuc2V0KCdjaGFydExpc3QnLCBKU09OLnN0cmluZ2lmeShjaGFydExpc3Qp
KTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICAk
KCcjbWFpbkNvbnRlbnRzJykuYXBwZW5kKHRlc3RQaWNrZXIpOwotCi0gICAgICAgIHZhciBjaGFy
dExpc3QgPSBbXTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNoYXJ0TGlzdCA9IEpTT04u
cGFyc2UoVVJMU3RhdGUuZ2V0KCdjaGFydExpc3QnLCAnJykpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSB2ZXJpZnkgdGhhdCBwbGF0Zm9ybSBhbmQgdGVzdCBuYW1lcyBhcmUgdmFs
aWQgaGVyZT8KLSAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJ
Z25vcmUgYW55IGV4Y2VwdGlvbiB0aHJvd24gYnkgcGFyc2UuCi0gICAgICAgIH0KLQotICAgICAg
ICByZWRpcmVjdENoYXJ0c1RvVjMoY2hhcnRMaXN0KTsKLQotICAgICAgICBjaGFydExpc3QuZm9y
RWFjaChmdW5jdGlvbiAoaXRlbSkgeyBjcmVhdGVDaGFydEZyb21MaXN0UGFpcihpdGVtWzBdLCBp
dGVtWzFdKTsgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVkaXJlY3RDaGFydHNUb1YzKGNo
YXJ0TGlzdCkKLSAgICB7Ci0gICAgICAgIHZhciB2M1VSTFBhcmFtcyA9IFtdOwotICAgICAgICB2
YXIgbnVtYmVyT2ZEYXlzID0gVVJMU3RhdGUuZ2V0KCdkYXlzJyk7Ci0gICAgICAgIGlmIChwYXJz
ZUludChudW1iZXJPZkRheXMpID09IG51bWJlck9mRGF5cykKLSAgICAgICAgICAgIHYzVVJMUGFy
YW1zLnB1c2goJ3NpbmNlPScgKyAoK0RhdGUubm93KCkgLSBudW1iZXJPZkRheXMgKiAyNCAqIDM2
MDAgKiAxMDAwKSk7Ci0KLSAgICAgICAgdmFyIHYzUGFuZUxpc3QgPSBbXTsKLSAgICAgICAgZm9y
ICh2YXIgaXRlbSBvZiBjaGFydExpc3QpIHsKLSAgICAgICAgICAgIHZhciBwbGF0Zm9ybSA9IG5h
bWVUb1BsYXRmb3JtW2l0ZW1bMF1dOwotICAgICAgICAgICAgdmFyIG1ldHJpYyA9IGZ1bGxOYW1l
VG9NZXRyaWNbaXRlbVsxXV07Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm0gJiYgbWV0cmljKQot
ICAgICAgICAgICAgICAgIHYzUGFuZUxpc3QucHVzaChgKCR7cGxhdGZvcm0uaWR9LSR7bWV0cmlj
LmlkfSlgKTsKLSAgICAgICAgfQotICAgICAgICB2M1VSTFBhcmFtcy5wdXNoKGBwYW5lTGlzdD0o
JHt2M1BhbmVMaXN0LmpvaW4oJy0nKX0pYCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHZhciB6b29tVmFsdWVzID0gSlNPTi5wYXJzZShVUkxTdGF0ZS5nZXQoJ3pvb20nLCAnW10nKSk7
Ci0gICAgICAgICAgICBpZiAoem9vbVZhbHVlcy5sZW5ndGggPT0gMikKLSAgICAgICAgICAgICAg
ICB2M1VSTFBhcmFtcy5wdXNoKGB6b29tPSgke3pvb21WYWx1ZXNbMF19LSR7em9vbVZhbHVlc1sx
XX0pYCk7Ci0gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH0KLQotICAgICAgICBsb2NhdGlvbi5o
cmVmID0gJy92My8jL2NoYXJ0cz8nICsgdjNVUkxQYXJhbXMuam9pbignJicpOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGV4cG9uZW50aWFsIHNsaWRlciBmb3IgY2hhcnRz
IHBhZ2Ugd2hlcmUgd2UgZXhwZWN0IHRvIGhhdmUKLSAgICAvLyB0aGUgZnVsbCBKU09OIGFzIG9w
cG9zZWQgdG8gdGhlIGRhc2hib2FyZCB3aGVyZSB3ZSBjYW4ndCBhZmZvcmQgbG9hZGluZyByZWFs
bHkgYmlnIEpTT04gZmlsZXMuCi0gICAgdmFyIGV4cG9uZW50aWFsID0gdHJ1ZTsKLSAgICAoZnVu
Y3Rpb24gKCkgewotICAgICAgICB2YXIgaW5wdXQgPSAkKCcjbnVtYmVyT2ZEYXlzJylbMF07Ci0g
ICAgICAgIHZhciB1cGRhdGluZyA9IDA7Ci0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNwYW5BbmRD
YWxsKG5ld051bWJlck9mRGF5cykgewotICAgICAgICAgICAgJCgnI251bWJlck9mRGF5cycpLm5l
eHQoKS50ZXh0KG5ld051bWJlck9mRGF5cyArICcgZGF5cycpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbGlrZWx5IGJyb2tlbiBmb3Igbm9uLVBTVC4KLSAgICAgICAgICAgIENoYXJ0
LnNldE1pblRpbWUoRGF0ZS5ub3coKSAtIG5ld051bWJlck9mRGF5cyAqIDI0ICogMzYwMCAqIDEw
MDApOwotICAgICAgICB9Ci0gICAgICAgICQoJyNudW1iZXJPZkRheXMnKS5iaW5kKCdjaGFuZ2Un
LCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbmV3TnVtYmVyT2ZEYXlzID0gTWF0aC5y
b3VuZChleHBvbmVudGlhbCA/IE1hdGguZXhwKGlucHV0LnZhbHVlKSA6IGlucHV0LnZhbHVlKTsK
LSAgICAgICAgICAgIFVSTFN0YXRlLnJlbW92ZSgnem9vbScpOwotICAgICAgICAgICAgQ2hhcnQu
Y2xlYXJab29tKCk7Ci0gICAgICAgICAgICBVUkxTdGF0ZS5zZXQoJ2RheXMnLCBuZXdOdW1iZXJP
ZkRheXMpOwotICAgICAgICAgICAgdXBkYXRlU3BhbkFuZENhbGwobmV3TnVtYmVyT2ZEYXlzKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIGZ1bmN0aW9uIG9uY2hhbmdlKCkgewotICAgICAgICAgICAg
dmFyIG5ld051bWJlck9mRGF5cyA9IFVSTFN0YXRlLmdldCgnZGF5cycsIE1hdGgucm91bmQoZXhw
b25lbnRpYWwgPyBNYXRoLmV4cChpbnB1dC5kZWZhdWx0VmFsdWUpIDogaW5wdXQuZGVmYXVsdFZh
bHVlKSk7Ci0gICAgICAgICAgICAkKCcjbnVtYmVyT2ZEYXlzJykudmFsKGV4cG9uZW50aWFsID8g
TWF0aC5sb2cobmV3TnVtYmVyT2ZEYXlzKSA6IG5ld051bWJlck9mRGF5cyk7Ci0gICAgICAgICAg
ICB1cGRhdGVTcGFuQW5kQ2FsbChuZXdOdW1iZXJPZkRheXMpOwotICAgICAgICB9Ci0gICAgICAg
IFVSTFN0YXRlLndhdGNoKCdkYXlzJywgb25jaGFuZ2UpOwotICAgICAgICBvbmNoYW5nZSgpOwot
ICAgIH0pKCk7Ci0KLSAgICBVUkxTdGF0ZS53YXRjaCgnbW9kZScsIGZ1bmN0aW9uICgpIHsgc2V0
TW9kZShVUkxTdGF0ZS5nZXQoJ21vZGUnKSk7IH0pOwotICAgIFVSTFN0YXRlLndhdGNoKCdjaGFy
dExpc3QnLCBmdW5jdGlvbiAoY2hhbmdlZFN0YXRlcykgewotICAgICAgICB2YXIgbW9kZUNoYW5n
ZWQgPSBjaGFuZ2VkU3RhdGVzLmluZGV4T2YoJ21vZGUnKSA+PSAwOwotICAgICAgICBpZiAoVVJM
U3RhdGUuZ2V0KCdtb2RlJykgPT0gJ2NoYXJ0cycgJiYgIW1vZGVDaGFuZ2VkKQotICAgICAgICAg
ICAgc2V0TW9kZSgnY2hhcnRzJyk7Ci0gICAgfSk7Ci0KLSAgICBmdW5jdGlvbiB6b29tQ2hhcnRz
SWZQYXJzZWRDb3JyZWN0bHkoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB6b29tVmFs
dWVzID0gSlNPTi5wYXJzZShVUkxTdGF0ZS5nZXQoJ3pvb20nLCAnW10nKSk7Ci0gICAgICAgICAg
ICBpZiAoem9vbVZhbHVlcy5sZW5ndGggIT0gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDaGFydC56b29tKHBhcnNlRmxvYXQoem9vbVZhbHVlc1swXSksIHBh
cnNlRmxvYXQoem9vbVZhbHVlc1sxXSkpOwotICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsK
LSAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgZXhjZXB0aW9ucyB0aHJvd24gYnkgSlNPTi5wYXJz
ZS4KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBVUkxTdGF0
ZS53YXRjaCgnem9vbScsIGZ1bmN0aW9uIChjaGFuZ2VkU3RhdGVzKSB7Ci0gICAgICAgIHZhciBt
b2RlQ2hhbmdlZCA9IGNoYW5nZWRTdGF0ZXMuaW5kZXhPZignbW9kZScpID49IDA7Ci0gICAgICAg
IGlmIChVUkxTdGF0ZS5nZXQoJ21vZGUnKSA9PSAnY2hhcnRzJyAmJiAhbW9kZUNoYW5nZWQpIHsK
LSAgICAgICAgICAgIGlmICghem9vbUNoYXJ0c0lmUGFyc2VkQ29ycmVjdGx5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENoYXJ0LmNsZWFyWm9vbSgpOwotICAgICAgICB9Ci0gICAgfSk7Ci0K
LSAgICBDaGFydC5vbnpvb21jaGFuZ2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKLSAgICAgICAg
aWYgKGZyb20gJiYgdG8pCi0gICAgICAgICAgICBVUkxTdGF0ZS5zZXQoJ3pvb20nLCBKU09OLnN0
cmluZ2lmeShbZnJvbSwgdG9dKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFVSTFN0YXRl
LnJlbW92ZSgnem9vbScpOwotICAgIH0KLQotICAgIHdpbmRvdy5vcGVuQ2hhcnQgPSBmdW5jdGlv
biAocGxhdGZvcm0sIG1ldHJpYykgewotICAgICAgICBVUkxTdGF0ZS5zZXQoJ2NoYXJ0TGlzdCcs
IEpTT04uc3RyaW5naWZ5KFtbcGxhdGZvcm0ubmFtZSwgbWV0cmljLmZ1bGxOYW1lXV0pKTsKLSAg
ICAgICAgc2V0TW9kZSgnY2hhcnRzJyk7Ci0gICAgfQotCi0gICAgd2luZG93LnNldE1vZGUgPSBm
dW5jdGlvbiAobmV3TW9kZSkgewotICAgICAgICBVUkxTdGF0ZS5zZXQoJ21vZGUnLCBuZXdNb2Rl
KTsKLQotICAgICAgICBDaGFydC5jbGVhcigpOwotICAgICAgICBpZiAobmV3TW9kZSA9PSAnZGFz
aGJvYXJkJykgewotICAgICAgICAgICAgVVJMU3RhdGUucmVtb3ZlKCd6b29tJyk7Ci0gICAgICAg
ICAgICBDaGFydC5jbGVhclpvb20oKTsKLSAgICAgICAgICAgIHNob3dEYXNoYm9hcmQoKTsKLSAg
ICAgICAgfSBlbHNlIHsgLy8gRklYTUU6IER5bmFtaWNhbGx5IG9idGFpbiB0aGUgbGlzdCBvZiB0
ZXN0cyB0byBzaG93LgotICAgICAgICAgICAgc2hvd0NoYXJ0cygpOwotICAgICAgICAgICAgem9v
bUNoYXJ0c0lmUGFyc2VkQ29ycmVjdGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBmdWxsTmFtZSh0ZXN0KSB7Ci0gICAgICAgIHZhciBuYW1lcyA9IFtdOwotICAgICAgICBk
byB7Ci0gICAgICAgICAgICBuYW1lcy5wdXNoKHRlc3QubmFtZSk7Ci0gICAgICAgICAgICB0ZXN0
ID0gdGVzdC5wYXJlbnRUZXN0OwotICAgICAgICB9IHdoaWxlICh0ZXN0KTsKLSAgICAgICAgbmFt
ZXMucmV2ZXJzZSgpOwotICAgICAgICByZXR1cm4gbmFtZXMuam9pbignLycpOwotICAgIH0KLQot
ICAgIC8vIFBlcmhhcHMgd2Ugd2FudCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGxhdGZvcm1zLgotICAg
ICQuZ2V0SlNPTignZGF0YS9tYW5pZmVzdC5qc29uJywgZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAg
ICAgdmFyIG1hbmlmZXN0ID0gZGF0YTsKLQotICAgICAgICBuYW1lVG9UZXN0ID0ge307Ci0gICAg
ICAgIGZvciAodmFyIHRlc3RJZCBpbiBtYW5pZmVzdC50ZXN0cykgewotICAgICAgICAgICAgdmFy
IHRlc3QgPSBtYW5pZmVzdC50ZXN0c1t0ZXN0SWRdOwotICAgICAgICAgICAgdGVzdC5wYXJlbnRU
ZXN0ID0gbWFuaWZlc3QudGVzdHNbbWFuaWZlc3QudGVzdHNbdGVzdElkXS5wYXJlbnRJZF07Ci0g
ICAgICAgICAgICB0ZXN0LmlkID0gdGVzdElkOwotICAgICAgICAgICAgdGVzdC5tZXRyaWNzID0g
W107Ci0gICAgICAgICAgICB0ZXN0cy5wdXNoKHRlc3QpOwotICAgICAgICB9Ci0gICAgICAgIHRl
c3RzLmZvckVhY2goZnVuY3Rpb24gKHRlc3QpIHsKLSAgICAgICAgICAgIHRlc3QuZnVsbE5hbWUg
PSBmdWxsTmFtZSh0ZXN0KTsKLSAgICAgICAgICAgIG5hbWVUb1Rlc3RbdGVzdC5mdWxsTmFtZV0g
PSB0ZXN0OwotICAgICAgICB9KTsKLSAgICAgICAgdGVzdHMuc29ydChmdW5jdGlvbiAoYSwgYikg
ewotICAgICAgICAgICAgaWYgKGEuZnVsbE5hbWUgPCBiLmZ1bGxOYW1lKQotICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChhLmZ1bGxOYW1lID4gYi5mdWxsTmFtZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9KTsKLQotICAgICAgICBmdWxsTmFtZVRvTWV0cmljID0ge307Ci0gICAgICAgIGZvciAodmFy
IG1ldHJpY0lkIGluIG1hbmlmZXN0Lm1ldHJpY3MpIHsKLSAgICAgICAgICAgIHZhciBlbnRyeSA9
IG1hbmlmZXN0Lm1ldHJpY3NbbWV0cmljSWRdOwotICAgICAgICAgICAgZW50cnkuaWQgPSBtZXRy
aWNJZDsKLSAgICAgICAgICAgIGVudHJ5LnRlc3QgPSBtYW5pZmVzdC50ZXN0c1tlbnRyeS50ZXN0
XTsKLSAgICAgICAgICAgIGVudHJ5LmZ1bGxOYW1lID0gZW50cnkudGVzdC5mdWxsTmFtZSArICc6
JyArIGVudHJ5Lm5hbWU7Ci0gICAgICAgICAgICBpZiAoZW50cnkuYWdncmVnYXRvcikKLSAgICAg
ICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSArPSAnOicgKyBlbnRyeS5hZ2dyZWdhdG9yOwotICAg
ICAgICAgICAgZW50cnkudGVzdC5tZXRyaWNzLnB1c2goZW50cnkpOwotICAgICAgICAgICAgZnVs
bE5hbWVUb01ldHJpY1tlbnRyeS5mdWxsTmFtZV0gPSBlbnRyeTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRlc3RzLmZvckVhY2goZnVuY3Rpb24gKHRlc3QpIHsKLSAgICAgICAgICAgIHRlc3QubWV0
cmljcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA8
IGIubmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg
IGlmIChhLm5hbWUgPiBiLm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIGFsbFBsYXRmb3JtcyA9IFtdOwotICAgICAgICBuYW1lVG9QbGF0Zm9ybSA9IHt9Owot
ICAgICAgICBmb3IgKHZhciBwbGF0Zm9ybUlkIGluIG1hbmlmZXN0LmFsbCkgewotICAgICAgICAg
ICAgdmFyIHBsYXRmb3JtID0gbWFuaWZlc3QuYWxsW3BsYXRmb3JtSWRdOwotICAgICAgICAgICAg
cGxhdGZvcm0uaWQgPSBwbGF0Zm9ybUlkOwotICAgICAgICAgICAgYWxsUGxhdGZvcm1zLnB1c2go
cGxhdGZvcm0pOwotICAgICAgICAgICAgbmFtZVRvUGxhdGZvcm1bcGxhdGZvcm0ubmFtZV0gPSBw
bGF0Zm9ybTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb3J0IHRlc3RzCi0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBsYXRmb3JtLm1ldHJpY3MubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgcGxhdGZvcm0ubWV0cmljc1tpXSA9IG1hbmlmZXN0Lm1ldHJpY3NbcGxhdGZvcm0u
bWV0cmljc1tpXV07Ci0gICAgICAgIH0KLSAgICAgICAgYWxsUGxhdGZvcm1zLnNvcnQoZnVuY3Rp
b24gKGEsIGIpIHsgcmV0dXJuIGEubmFtZSA8IGIubmFtZSA/IC0xIDogKGEubmFtZSA+IGIubmFt
ZSA/IDEgOiAwKTsgfSk7Ci0KLSAgICAgICAgZGFzaGJvYXJkUGxhdGZvcm1zID0gW107Ci0gICAg
ICAgIGZvciAodmFyIHBsYXRmb3JtSWQgaW4gbWFuaWZlc3QuZGFzaGJvYXJkKSB7Ci0gICAgICAg
ICAgICB2YXIgcGxhdGZvcm0gPSBtYW5pZmVzdC5kYXNoYm9hcmRbcGxhdGZvcm1JZF07Ci0gICAg
ICAgICAgICBwbGF0Zm9ybS5pZCA9IHBsYXRmb3JtSWQ7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBsYXRmb3JtLm1ldHJpY3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAg
cGxhdGZvcm0ubWV0cmljc1tpXSA9IG1hbmlmZXN0Lm1ldHJpY3NbcGxhdGZvcm0ubWV0cmljc1tp
XV07Ci0gICAgICAgICAgICBwbGF0Zm9ybS5tZXRyaWNzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEuZnVsbE5hbWUgPCBiLmZ1bGxOYW1lID8gLTEgOiAoYS5mdWxsTmFtZSA+IGIuZnVs
bE5hbWUgPyAxIDogMCk7IH0pOwotICAgICAgICAgICAgZGFzaGJvYXJkUGxhdGZvcm1zLnB1c2go
bWFuaWZlc3QuZGFzaGJvYXJkW3BsYXRmb3JtSWRdKTsKLSAgICAgICAgfQotICAgICAgICBkYXNo
Ym9hcmRQbGF0Zm9ybXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5uYW1lIDwgYi5u
YW1lID8gLTEgOiAoYS5uYW1lID4gYi5uYW1lID8gMSA6IDApOyB9KTsKLQotICAgICAgICByZXBv
c2l0b3JpZXMgPSBtYW5pZmVzdC5yZXBvc2l0b3JpZXM7Ci0gICAgICAgIGJ1aWxkZXJzID0gbWFu
aWZlc3QuYnVpbGRlcnM7Ci0gICAgICAgIGJ1Z1RyYWNrZXJzID0gbWFuaWZlc3QuYnVnVHJhY2tl
cnM7Ci0KLSAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBtYW5pZmVzdC5zaXRlVGl0bGU7Ci0gICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaXRlVGl0bGUnKS50ZXh0Q29udGVudCA9IG1h
bmlmZXN0LnNpdGVUaXRsZTsKLQotICAgICAgICBzZXRNb2RlKFVSTFN0YXRlLmdldCgnbW9kZScs
ICdkYXNoYm9hcmQnKSk7Ci0gICAgfSk7Ci19Ci0KLXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdE
T01Db250ZW50TG9hZGVkJywgaW5pdCwgZmFsc2UpOwotCiA8L3NjcmlwdD4KIDwvaGVhZD4KLTxi
b2R5PgotCi08aGVhZGVyIGlkPSJ0aXRsZSI+Ci08aDE+PGEgaWQ9InNpdGVUaXRsZSIgaHJlZj0i
LyI+UGVyZiBNb25pdG9yPC9hPjwvaDE+Ci08dWw+Ci0gICAgPGxpIGlkPSJudW1iZXJPZkRheXNQ
aWNrZXIiPjxpbnB1dCBpZD0ibnVtYmVyT2ZEYXlzIiB0eXBlPSJyYW5nZSIgbWluPSIxIiBtYXg9
IjUuOSIgc3RlcD0iMC4wMDEiIHZhbHVlPSIyLjMiPjxzcGFuIGNsYXNzPSJvdXRwdXQiPjwvc3Bh
bj48L2xpPgotICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnNldE1vZGUoJ2Rhc2hib2FyZCcp
OyI+RGFzaGJvYXJkPC9hPjwvbGk+Ci0gICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9k
ZSgnY2hhcnRzJyk7Ij5DaGFydHM8L2E+PC9saT4KLTwvdWw+Ci08L2hlYWRlcj4KLQotPGRpdiBp
ZD0ibWFpbkNvbnRlbnRzIj48L2Rpdj4KLTwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2hlbHBlci1jbGFzc2VzLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTg5OWViZDE4NDNiYmIwN2JjMzEwN2JiOWZlZTg1YmEx
NWM5M2EyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvaGVscGVyLWNsYXNzZXMuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotCi0vLyBBIHBvaW50IGluIGEgcGxvdC4KLWZ1bmN0
aW9uIFBlcmZUZXN0UmVzdWx0KHJ1bnMsIHJlc3VsdCwgYXNzb2NpYXRlZEJ1aWxkKSB7Ci0gICAg
dGhpcy5tZXRyaWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBydW5zLm1ldHJpYygpOyB9Ci0gICAg
dGhpcy52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQudmFsdWVzID8gcmVzdWx0
LnZhbHVlcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBydW5zLnNjYWxpbmdGYWN0b3Io
KSAqIHZhbHVlOyB9KSA6IHVuZGVmaW5lZDsgfQotICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIHJ1bnMuc2NhbGluZ0ZhY3RvcigpICogcmVzdWx0Lm1lYW47IH0KLSAgICB0aGlz
LnVuc2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC5tZWFuOyB9Ci0gICAg
dGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0
dXJuIHJ1bnMuc2NhbGluZ0ZhY3RvcigpICogdGhpcy51bnNjYWxlZENvbmZpZGVuY2VJbnRlcnZh
bERlbHRhKCk7Ci0gICAgfQotICAgIHRoaXMudW5zY2FsZWRDb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSA9IGZ1bmN0aW9uIChkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgdmFyIGRlbHRhID0gU3RhdGlz
dGljcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwLjk1LCByZXN1bHQuaXRlcmF0aW9uQ291bnQs
IHJlc3VsdC5zdW0sIHJlc3VsdC5zcXVhcmVTdW0pOwotICAgICAgICBpZiAoaXNOYU4oZGVsdGEp
ICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1
bHRWYWx1ZTsKLSAgICAgICAgcmV0dXJuIGRlbHRhOwotICAgIH0KLSAgICB0aGlzLmlzSW5VbnNj
YWxlZEludGVydmFsID0gZnVuY3Rpb24gKG1pbiwgbWF4KSB7Ci0gICAgICAgIHZhciBtZWFuID0g
dGhpcy51bnNjYWxlZE1lYW4oKTsKLSAgICAgICAgdmFyIGRlbHRhID0gdGhpcy51bnNjYWxlZENv
bmZpZGVuY2VJbnRlcnZhbERlbHRhKDApOwotICAgICAgICByZXR1cm4gbWluIDw9IG1lYW4gLSBk
ZWx0YSAmJiBtZWFuICsgZGVsdGEgPD0gbWF4OwotICAgIH0KLSAgICB0aGlzLmlzQmV0dGVyVGhh
biA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiBydW5zLnNtYWxsZXJJc0JldHRlcigpID09ICh0
aGlzLm1lYW4oKSA8IG90aGVyLm1lYW4oKSk7IH0KLSAgICB0aGlzLnJlbGF0aXZlRGlmZmVyZW5j
ZSA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiAob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkp
IC8gdGhpcy5tZWFuKCk7IH0KLSAgICB0aGlzLmZvcm1hdHRlZFJlbGF0aXZlRGlmZmVyZW5jZSA9
IGZ1bmN0aW9uIChvdGhlcikgeyByZXR1cm4gTWF0aC5hYnModGhpcy5yZWxhdGl2ZURpZmZlcmVu
Y2Uob3RoZXIpICogMTAwKS50b0ZpeGVkKDIpICsgJyUnOyB9Ci0gICAgdGhpcy5mb3JtYXR0ZWRQ
cm9ncmVzc2lvbk9yUmVncmVzc2lvbiA9IGZ1bmN0aW9uIChwcmV2aW91c1Jlc3VsdCkgewotICAg
ICAgICByZXR1cm4gcHJldmlvdXNSZXN1bHQuZm9ybWF0dGVkUmVsYXRpdmVEaWZmZXJlbmNlKHRo
aXMpICsgJyAnICsgKHRoaXMuaXNCZXR0ZXJUaGFuKHByZXZpb3VzUmVzdWx0KSA/ICdiZXR0ZXIn
IDogJ3dvcnNlJyk7Ci0gICAgfQotICAgIHRoaXMuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQg
PSBmdW5jdGlvbiAob3RoZXIpIHsKLSAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhvdGhlci5t
ZWFuKCkgLSB0aGlzLm1lYW4oKSk7Ci0gICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5jb25maWRl
bmNlSW50ZXJ2YWxEZWx0YSgpICYmIGRpZmYgPiBvdGhlci5jb25maWRlbmNlSW50ZXJ2YWxEZWx0
YSgpOwotICAgIH0KLSAgICB0aGlzLmJ1aWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2Np
YXRlZEJ1aWxkOyB9Ci0gICAgdGhpcy5sYWJlbCA9IGZ1bmN0aW9uIChwcmV2aW91c1Jlc3VsdCkg
ewotICAgICAgICB2YXIgbWVhbiA9IHRoaXMubWVhbigpOwotICAgICAgICB2YXIgbGFiZWwgPSBt
ZWFuLnRvUHJlY2lzaW9uKDQpICsgJyAnICsgcnVucy51bml0KCk7Ci0KLSAgICAgICAgdmFyIGRl
bHRhID0gdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpOwotICAgICAgICBpZiAoZGVsdGEp
IHsKLSAgICAgICAgICAgIHZhciBwZXJjZW50YWdlU3RkZXYgPSBkZWx0YSAqIDEwMCAvIG1lYW47
Ci0gICAgICAgICAgICBsYWJlbCArPSAnICZwbHVzbW47ICcgKyBwZXJjZW50YWdlU3RkZXYudG9G
aXhlZCgyKSArICclJzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcmV2aW91c1Jlc3VsdCkK
LSAgICAgICAgICAgIGxhYmVsICs9ICcgKCcgKyB0aGlzLmZvcm1hdHRlZFByb2dyZXNzaW9uT3JS
ZWdyZXNzaW9uKHByZXZpb3VzUmVzdWx0KSArICcpJzsKLQotICAgICAgICByZXR1cm4gbGFiZWw7
Ci0gICAgfQotfQotCi1mdW5jdGlvbiBUZXN0QnVpbGQocmVwb3NpdG9yaWVzLCBidWlsZGVycywg
cGxhdGZvcm0sIHJhd1J1bikgewotICAgIGNvbnN0IHJldmlzaW9ucyA9IHJhd1J1bi5yZXZpc2lv
bnM7Ci0gICAgdmFyIG1heFRpbWUgPSAwOwotICAgIHZhciByZXZpc2lvbkNvdW50ID0gMDsKLSAg
ICBmb3IgKHZhciByZXBvc2l0b3J5SWQgaW4gcmV2aXNpb25zKSB7Ci0gICAgICAgIG1heFRpbWUg
PSBNYXRoLm1heChtYXhUaW1lLCByZXZpc2lvbnNbcmVwb3NpdG9yeUlkXVsxXSk7IC8vIFJldmlz
aW9uIGlzIGFuIHBhaXIgKHJldmlzaW9uLCB0aW1lKQotICAgICAgICByZXZpc2lvbkNvdW50Kys7
Ci0gICAgfQotICAgIGlmICghbWF4VGltZSkKLSAgICAgICAgbWF4VGltZSA9IHJhd1J1bi5idWls
ZFRpbWU7Ci0gICAgbWF4VGltZSA9IFRlc3RCdWlsZC5VVEN0b1BTVChtYXhUaW1lKTsKLSAgICB2
YXIgbWF4VGltZVN0cmluZzsKLSAgICB2YXIgYnVpbGRUaW1lID0gVGVzdEJ1aWxkLlVUQ3RvUFNU
KHJhd1J1bi5idWlsZFRpbWUpOwotICAgIHZhciBidWlsZFRpbWVTdHJpbmc7Ci0KLSAgICB0aGlz
LnRpbWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXhUaW1lOyB9Ci0gICAgdGhpcy5mb3JtYXR0
ZWRUaW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICBpZiAoIW1heFRpbWVTdHJpbmcpCi0gICAg
ICAgICAgICBtYXhUaW1lU3RyaW5nID0gbmV3IERhdGUobWF4VGltZSkudG9JU09TdHJpbmcoKS5y
ZXBsYWNlKCdUJywgJyAnKS5yZXBsYWNlKC9cLlxkK1okLywgJycpOwotICAgICAgICByZXR1cm4g
bWF4VGltZVN0cmluZzsKLSAgICB9Ci0gICAgdGhpcy5idWlsZFRpbWUgPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBidWlsZFRpbWU7IH0KLSAgICB0aGlzLmZvcm1hdHRlZEJ1aWxkVGltZSA9IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgaWYgKCFidWlsZFRpbWVTdHJpbmcpCi0gICAgICAgICAgICBidWls
ZFRpbWVTdHJpbmcgPSBuZXcgRGF0ZShidWlsZFRpbWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgn
VCcsICcgJykucmVwbGFjZSgvXC5cZCtaJC8sICcnKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkVGlt
ZVN0cmluZzsKLSAgICB9Ci0gICAgdGhpcy5idWlsZGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4g
YnVpbGRlcnNbcmF3UnVuLmJ1aWxkZXJdLm5hbWU7IH0KLSAgICB0aGlzLmJ1aWxkTnVtYmVyID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gcmF3UnVuLmJ1aWxkTnVtYmVyOyB9Ci0gICAgdGhpcy5idWls
ZFVybCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBidWlsZGVyc1tyYXdS
dW4uYnVpbGRlcl07Ci0gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGJ1aWxkZXIuYnVpbGRVcmw7Ci0g
ICAgICAgIGlmICghdGVtcGxhdGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
cmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1wkYnVpbGROdW1iZXIvZywgdGhpcy5idWlsZE51bWJl
cigpKS5yZXBsYWNlKC9cJGJ1aWxkZXJOYW1lL2csIGJ1aWxkZXIubmFtZSk7Ci0gICAgfQotICAg
IHRoaXMucGxhdGZvcm0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybTsgfQotICAgIHRo
aXMucmV2aXNpb24gPSBmdW5jdGlvbihyZXBvc2l0b3J5SWQpIHsgcmV0dXJuIHJldmlzaW9uc1ty
ZXBvc2l0b3J5SWRdWzBdOyB9Ci0gICAgdGhpcy5mb3JtYXR0ZWRSZXZpc2lvbnMgPSBmdW5jdGlv
biAocHJldmlvdXNCdWlsZCkgewotICAgICAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgICAgIGZv
ciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXBvc2l0b3JpZXMpIHsKLSAgICAgICAgICAgIGlmICgh
cmV2aXNpb25zW3JlcG9zaXRvcnlJZF0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB2YXIgcHJldmlvdXNSZXZpc2lvbiA9IHByZXZpb3VzQnVpbGQgPyBwcmV2aW91c0J1
aWxkLnJldmlzaW9uKHJlcG9zaXRvcnlJZCkgOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB2YXIg
Y3VycmVudFJldmlzaW9uID0gdGhpcy5yZXZpc2lvbihyZXBvc2l0b3J5SWQpOwotICAgICAgICAg
ICAgaWYgKHByZXZpb3VzUmV2aXNpb24gPT09IGN1cnJlbnRSZXZpc2lvbikKLSAgICAgICAgICAg
ICAgICBwcmV2aW91c1JldmlzaW9uID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICB2YXIgcmV2
aXNpb25QcmVmaXggPSAnJzsKLSAgICAgICAgICAgIHZhciByZXZpc2lvbkRlbGltaXRlciA9ICct
JzsKLSAgICAgICAgICAgIHZhciBpc0hhc2ggPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChwYXJz
ZUludChjdXJyZW50UmV2aXNpb24pID09IGN1cnJlbnRSZXZpc2lvbikgeyAvLyBlLmcuIHIxMjM0
NS4KLSAgICAgICAgICAgICAgICByZXZpc2lvblByZWZpeCA9ICdyJzsKLSAgICAgICAgICAgICAg
ICBpZiAocHJldmlvdXNSZXZpc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNSZXZp
c2lvbiA9IChwYXJzZUludChwcmV2aW91c1JldmlzaW9uKSArIDEpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChjdXJyZW50UmV2aXNpb24uaW5kZXhPZignICcpID49IDApIC8vIGUuZy4gMTAuOSAx
M0M2NC4KLSAgICAgICAgICAgICAgICByZXZpc2lvbkRlbGltaXRlciA9ICcgLSAnOwotICAgICAg
ICAgICAgZWxzZSBpZiAoY3VycmVudFJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQg
aGFzaAotICAgICAgICAgICAgICAgIGlzSGFzaCA9IHRydWU7Ci0KLSAgICAgICAgICAgIHZhciBs
YWJlbEZvclRoaXNSZXBvc2l0b3J5OwotICAgICAgICAgICAgaWYgKGlzSGFzaCkgewotICAgICAg
ICAgICAgICAgIGZvcm1hdHRlZEN1cnJlbnRIYXNoID0gY3VycmVudFJldmlzaW9uLnN1YnN0cmlu
ZygwLCA4KTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSZXZpc2lvbikKLSAgICAgICAg
ICAgICAgICAgICAgbGFiZWxGb3JUaGlzUmVwb3NpdG9yeSA9IHByZXZpb3VzUmV2aXNpb24uc3Vi
c3RyaW5nKDAsIDgpICsgJy4uJyArIGZvcm1hdHRlZEN1cnJlbnRIYXNoOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxGb3JUaGlzUmVwb3NpdG9yeSA9ICdA
ICcgKyBmb3JtYXR0ZWRDdXJyZW50SGFzaDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24pCi0gICAgICAgICAgICAgICAgICAgIGxhYmVs
Rm9yVGhpc1JlcG9zaXRvcnkgPSByZXZpc2lvblByZWZpeCArIHByZXZpb3VzUmV2aXNpb24gKyBy
ZXZpc2lvbkRlbGltaXRlciArIHJldmlzaW9uUHJlZml4ICsgY3VycmVudFJldmlzaW9uOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxGb3JUaGlzUmVwb3Np
dG9yeSA9ICdAICcgKyByZXZpc2lvblByZWZpeCArIGN1cnJlbnRSZXZpc2lvbjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIHVybDsKLSAgICAgICAgICAgIHZhciByZXBvc2l0b3J5
ID0gcmVwb3NpdG9yaWVzW3JlcG9zaXRvcnlJZF07Ci0gICAgICAgICAgICBpZiAocmVwb3NpdG9y
eSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQotICAgICAgICAgICAg
ICAgICAgICB1cmwgPSAocmVwb3NpdG9yeVsnYmxhbWVVcmwnXSB8fCAnJykucmVwbGFjZSgvXCQx
L2csIHByZXZpb3VzUmV2aXNpb24pLnJlcGxhY2UoL1wkMi9nLCBjdXJyZW50UmV2aXNpb24pOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gKHJlcG9zaXRv
cnlbJ3VybCddIHx8ICcnKS5yZXBsYWNlKC9cJDEvZywgY3VycmVudFJldmlzaW9uKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmVzdWx0W3JlcG9zaXRvcnkubmFtZV0gPSB7Ci0gICAg
ICAgICAgICAgICAgJ2xhYmVsJzogbGFiZWxGb3JUaGlzUmVwb3NpdG9yeSwKLSAgICAgICAgICAg
ICAgICAnY3VycmVudFJldmlzaW9uJzogY3VycmVudFJldmlzaW9uLAotICAgICAgICAgICAgICAg
ICdwcmV2aW91c1JldmlzaW9uJzogcHJldmlvdXNSZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAn
dXJsJzogdXJsLAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLX0KLQotVGVzdEJ1aWxkLlVUQ3RvUFNUID0gZnVuY3Rpb24gKGRhdGUpIHsK
LSAgICAvLyBQcmV0ZW5kIHRoYXQgUFNUIGlzIFVUQyBzaW5jZSB2YW5pbGxhIGZsb3QgZG9lc24n
dCBzdXBwb3J0IG11bHRpcGxlIHRpbWV6b25lcy4KLSAgICBjb25zdCBQU1RPZmZzZXRJbk1pbGxp
c2Vjb25kcyA9IDggKiAzNjAwICogMTAwMDsKLSAgICByZXR1cm4gZGF0ZSAtIFBTVE9mZnNldElu
TWlsbGlzZWNvbmRzOwotfQotVGVzdEJ1aWxkLm5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRo
aXMuVVRDdG9QU1QoRGF0ZS5ub3coKSk7IH0KLQotLy8gQSBzZXF1ZW5jZSBvZiB0ZXN0IHJlc3Vs
dHMgZm9yIGEgc3BlY2lmaWMgdGVzdCBvbiBhIHNwZWNpZmljIHBsYXRmb3JtCi1mdW5jdGlvbiBQ
ZXJmVGVzdFJ1bnMobWV0cmljLCBwbGF0Zm9ybSkgewotICAgIHZhciByZXN1bHRzID0gW107Ci0g
ICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwotICAgIHZhciBjYWNoZWRTY2FsaW5nRmFjdG9yID0g
bnVsbDsKLSAgICB2YXIgYmFzZWxpbmVzID0ge307Ci0gICAgdmFyIHN1ZmZpeCA9IG1ldHJpYy5u
YW1lLm1hdGNoKCcoW0Etel1bYS16XSt8RnJhbWVSYXRlKSQnKVswXTsKLSAgICB2YXIgdW5pdCA9
IHsnQ29tYmluZWQnOiAnJywgLy8gQXNzdW1lIHNtYWxsZXIgaXMgYmV0dGVyIGZvciBub3cuCi0g
ICAgICAgICdGcmFtZVJhdGUnOiAnZnBzJywKLSAgICAgICAgJ1J1bnMnOiAnL3MnLAotICAgICAg
ICAnVGltZSc6ICdtcycsCi0gICAgICAgICdEdXJhdGlvbic6ICdtcycsCi0gICAgICAgICdNYWxs
b2MnOiAnQicsCi0gICAgICAgICdIZWFwJzogJ0InLAotICAgICAgICAnQWxsb2NhdGlvbnMnOiAn
QicsCi0gICAgICAgICdTaXplJzogJ0InLAotICAgICAgICAnU2NvcmUnOiAncHQnLAotICAgICAg
ICAnUG93ZXInOiAnVycKLSAgICB9W3N1ZmZpeF07Ci0KLSAgICAvLyBXZSBjYW4ndCBkbyB0aGlz
IGluIFBlcmZUZXN0UmVzdWx0IGJlY2F1c2UgYWxsIHJlc3VsdHMgZm9yIGVhY2ggbWV0cmljIG5l
ZWQgdG8gc2hhcmUgdGhlIHNhbWUgdW5pdCBhbmQgdGhlIHNhbWUgc2NhbGluZyBmYWN0b3IuCi0g
ICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBhZGp1c3RpbmcgdW5pdHMgb24gZXZlcnkgdGVzdCByZXN1
bHQuCi0gICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb24gdGhlIGZpcnN0IHRlc3QuCi0g
ICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgY2FjaGVkVW5pdCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB2YXIgbWVhbiA9IHJlc3VsdHNbMF0udW5zY2FsZWRNZWFuKCk7IC8v
IEZJWE1FOiBXZSBzaG91bGQgbG9vayBhdCBhbGwgdmFsdWVzLgotICAgICAgICB2YXIga2lsbyA9
IHVuaXQgPT0gJ0InID8gMTAyNCA6IDEwMDA7Ci0gICAgICAgIGlmIChtZWFuID4gMiAqIGtpbG8g
KiBraWxvICYmIHVuaXQgIT0gJ21zJykgewotICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3Rv
ciA9IDEgLyBraWxvIC8ga2lsbzsKLSAgICAgICAgICAgIHZhciB1bml0Rmlyc3RDaGFyID0gdW5p
dC5jaGFyQXQoMCk7Ci0gICAgICAgICAgICBjYWNoZWRVbml0ID0gJ00nICsgKHVuaXRGaXJzdENo
YXIudG9VcHBlckNhc2UoKSA9PSB1bml0Rmlyc3RDaGFyID8gJycgOiAnICcpICsgdW5pdDsKLSAg
ICAgICAgfSBlbHNlIGlmIChtZWFuID4gMiAqIGtpbG8pIHsKLSAgICAgICAgICAgIGNhY2hlZFNj
YWxpbmdGYWN0b3IgPSAxIC8ga2lsbzsKLSAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09
ICdtcycgPyAncycgOiAoJ0sgJyArIHVuaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDE7Ci0gICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5p
dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXMubWV0cmljID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gbWV0cmljOyB9Ci0gICAgdGhpcy5wbGF0Zm9ybSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJu
IHBsYXRmb3JtOyB9Ci0gICAgdGhpcy5zZXRSZXN1bHRzID0gZnVuY3Rpb24gKG5ld1Jlc3VsdHMp
IHsKLSAgICAgICAgcmVzdWx0cyA9IG5ld1Jlc3VsdHM7Ci0gICAgICAgIGNhY2hlZFVuaXQgPSBu
dWxsOwotICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gbnVsbDsKLSAgICB9Ci0gICAgdGhp
cy5sYXN0UmVzdWx0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzdWx0c1tyZXN1bHRzLmxlbmd0
aCAtIDFdOyB9Ci0gICAgdGhpcy5yZXN1bHRBdCA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiByZXN1
bHRzW2ldOyB9Ci0KLSAgICB2YXIgcmVzdWx0c0ZpbHRlckNhY2hlOwotICAgIHZhciByZXN1bHRz
RmlsdGVyQ2FjaGVNaW5UaW1lOwotICAgIGZ1bmN0aW9uIGZpbHRlcmVkUmVzdWx0cyhtaW5UaW1l
KSB7Ci0gICAgICAgIGlmICghbWluVGltZSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwot
ICAgICAgICBpZiAocmVzdWx0c0ZpbHRlckNhY2hlTWluVGltZSAhPSBtaW5UaW1lKSB7Ci0gICAg
ICAgICAgICByZXN1bHRzRmlsdGVyQ2FjaGUgPSByZXN1bHRzLmZpbHRlcihmdW5jdGlvbiAocmVz
dWx0KSB7IHJldHVybiAhbWluVGltZSB8fCByZXN1bHQuYnVpbGQoKS50aW1lKCkgPj0gbWluVGlt
ZTsgfSk7Ci0gICAgICAgICAgICByZXN1bHRzRmlsdGVyQ2FjaGVNaW5UaW1lID0gbWluVGltZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0c0ZpbHRlckNhY2hlOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHVuc2NhbGVkTWVhbnNGb3JBbGxSZXN1bHRzKG1pblRpbWUpIHsKLSAgICAg
ICAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0cyhtaW5UaW1lKS5tYXAoZnVuY3Rpb24gKHJlc3VsdCkg
eyByZXR1cm4gcmVzdWx0LnVuc2NhbGVkTWVhbigpOyB9KTsKLSAgICB9Ci0KLSAgICB0aGlzLm1p
biA9IGZ1bmN0aW9uIChtaW5UaW1lKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNjYWxpbmdGYWN0
b3IoKSAqIGZpbHRlcmVkUmVzdWx0cyhtaW5UaW1lKQotICAgICAgICAgICAgLnJlZHVjZShmdW5j
dGlvbiAobWluU29GYXIsIHJlc3VsdCkgeyByZXR1cm4gTWF0aC5taW4obWluU29GYXIsIHJlc3Vs
dC51bnNjYWxlZE1lYW4oKSAtIHJlc3VsdC51bnNjYWxlZENvbmZpZGVuY2VJbnRlcnZhbERlbHRh
KDApKTsgfSwgTnVtYmVyLk1BWF9WQUxVRSk7Ci0gICAgfQotICAgIHRoaXMubWF4ID0gZnVuY3Rp
b24gKG1pblRpbWUsIGJhc2VsaW5lTmFtZSkgewotICAgICAgICByZXR1cm4gdGhpcy5zY2FsaW5n
RmFjdG9yKCkgKiBmaWx0ZXJlZFJlc3VsdHMobWluVGltZSkKLSAgICAgICAgICAgIC5yZWR1Y2Uo
ZnVuY3Rpb24gKG1heFNvRmFyLCByZXN1bHQpIHsgcmV0dXJuIE1hdGgubWF4KG1heFNvRmFyLCBy
ZXN1bHQudW5zY2FsZWRNZWFuKCkgKyByZXN1bHQudW5zY2FsZWRDb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSgwKSk7IH0sIE51bWJlci5NSU5fVkFMVUUpOwotICAgIH0KLSAgICB0aGlzLmNvdW50UmVz
dWx0cyA9IGZ1bmN0aW9uIChtaW5UaW1lKSB7Ci0gICAgICAgIHJldHVybiB1bnNjYWxlZE1lYW5z
Rm9yQWxsUmVzdWx0cyhtaW5UaW1lKS5sZW5ndGg7Ci0gICAgfQotICAgIHRoaXMuY291bnRSZXN1
bHRzSW5JbnRlcnZhbCA9IGZ1bmN0aW9uIChtaW5UaW1lLCBtaW4sIG1heCkgewotICAgICAgICB2
YXIgdW5zY2FsZWRNaW4gPSBtaW4gLyB0aGlzLnNjYWxpbmdGYWN0b3IoKTsKLSAgICAgICAgdmFy
IHVuc2NhbGVkTWF4ID0gbWF4IC8gdGhpcy5zY2FsaW5nRmFjdG9yKCk7Ci0gICAgICAgIHJldHVy
biBmaWx0ZXJlZFJlc3VsdHMobWluVGltZSkucmVkdWNlKGZ1bmN0aW9uIChjb3VudCwgY3VycmVu
dFJlc3VsdCkgewotICAgICAgICAgICAgcmV0dXJuIGNvdW50ICsgKGN1cnJlbnRSZXN1bHQuaXNJ
blVuc2NhbGVkSW50ZXJ2YWwodW5zY2FsZWRNaW4sIHVuc2NhbGVkTWF4KSA/IDEgOiAwKTsgfSwg
MCk7Ci0gICAgfQotICAgIHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24gPSBmdW5jdGlvbiAo
bWluVGltZSkgewotICAgICAgICB2YXIgdW5zY2FsZWRNZWFucyA9IHVuc2NhbGVkTWVhbnNGb3JB
bGxSZXN1bHRzKG1pblRpbWUpOwotICAgICAgICByZXR1cm4gdGhpcy5zY2FsaW5nRmFjdG9yKCkg
KiBTdGF0aXN0aWNzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKHVuc2NhbGVkTWVhbnMubGVuZ3Ro
LCBTdGF0aXN0aWNzLnN1bSh1bnNjYWxlZE1lYW5zKSwgU3RhdGlzdGljcy5zcXVhcmVTdW0odW5z
Y2FsZWRNZWFucykpOwotICAgIH0KLSAgICB0aGlzLmV4cG9uZW50aWFsTW92aW5nQXJpdGhtZXRp
Y01lYW4gPSBmdW5jdGlvbiAobWluVGltZSwgYWxwaGEpIHsKLSAgICAgICAgdmFyIHVuc2NhbGVk
TWVhbnMgPSB1bnNjYWxlZE1lYW5zRm9yQWxsUmVzdWx0cyhtaW5UaW1lKTsKLSAgICAgICAgaWYg
KCF1bnNjYWxlZE1lYW5zLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAg
IHJldHVybiB0aGlzLnNjYWxpbmdGYWN0b3IoKSAqIHVuc2NhbGVkTWVhbnMucmVkdWNlKGZ1bmN0
aW9uIChtb3ZpbmdBdmVyYWdlLCBjdXJyZW50TWVhbikgeyByZXR1cm4gYWxwaGEgKiBjdXJyZW50
TWVhbiArICgxIC0gYWxwaGEpICogbW92aW5nQXZlcmFnZTsgfSk7Ci0gICAgfQotICAgIHRoaXMu
aGFzQ29uZmlkZW5jZUludGVydmFsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gIWlzTmFOKHRoaXMu
bGFzdFJlc3VsdCgpLnVuc2NhbGVkQ29uZmlkZW5jZUludGVydmFsRGVsdGEoKSk7IH0KLSAgICB2
YXIgbWVhblBsb3RDYWNoZTsKLSAgICB0aGlzLm1lYW5QbG90RGF0YSA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgaWYgKCFtZWFuUGxvdENhY2hlKQotICAgICAgICAgICAgbWVhblBsb3RDYWNoZSA9
IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBbcmVzdWx0LmJ1
aWxkKCkudGltZSgpLCByZXN1bHQubWVhbigpXTsgfSk7Ci0gICAgICAgIHJldHVybiBtZWFuUGxv
dENhY2hlOwotICAgIH0KLSAgICB2YXIgdXBwZXJDb25maWRlbmNlQ2FjaGU7Ci0gICAgdGhpcy51
cHBlckNvbmZpZGVuY2VQbG90RGF0YSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKCF1cHBl
ckNvbmZpZGVuY2VDYWNoZSkgLy8gRklYTUU6IFVzZSB0aGUgYWN0dWFsIGNvbmZpZGVuY2UgaW50
ZXJ2YWwKLSAgICAgICAgICAgIHVwcGVyQ29uZmlkZW5jZUNhY2hlID0gcmVzdWx0cy5tYXAoZnVu
Y3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtyZXN1bHQuYnVpbGQoKS50aW1lKCksIHJl
c3VsdC5tZWFuKCkgKyByZXN1bHQuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKV07IH0pOwotICAg
ICAgICByZXR1cm4gdXBwZXJDb25maWRlbmNlQ2FjaGU7Ci0gICAgfQotICAgIHZhciBsb3dlckNv
bmZpZGVuY2VDYWNoZTsKLSAgICB0aGlzLmxvd2VyQ29uZmlkZW5jZVBsb3REYXRhID0gZnVuY3Rp
b24gKCkgewotICAgICAgICBpZiAoIWxvd2VyQ29uZmlkZW5jZUNhY2hlKSAvLyBGSVhNRTogVXNl
IHRoZSBhY3R1YWwgY29uZmlkZW5jZSBpbnRlcnZhbAotICAgICAgICAgICAgbG93ZXJDb25maWRl
bmNlQ2FjaGUgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4g
W3Jlc3VsdC5idWlsZCgpLnRpbWUoKSwgcmVzdWx0Lm1lYW4oKSAtIHJlc3VsdC5jb25maWRlbmNl
SW50ZXJ2YWxEZWx0YSgpXTsgfSk7Ci0gICAgICAgIHJldHVybiBsb3dlckNvbmZpZGVuY2VDYWNo
ZTsKLSAgICB9Ci0gICAgdGhpcy5zY2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIGNhY2hlZFNj
YWxpbmdGYWN0b3I7Ci0gICAgfQotICAgIHRoaXMudW5pdCA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4gY2FjaGVk
VW5pdDsKLSAgICB9Ci0gICAgdGhpcy5zbWFsbGVySXNCZXR0ZXIgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIHVuaXQgPT0gJ21zJyB8fCB1bml0ID09ICdCJyB8fCB1bml0ID09ICcnOyB9Ci19Ci0KLXZh
ciBVUkxTdGF0ZSA9IG5ldyAoZnVuY3Rpb24gKCkgewotICAgIHZhciBoYXNoOwotICAgIHZhciBw
YXJhbWV0ZXJzOwotICAgIHZhciB1cGRhdGVUaW1lcjsKLQotICAgIGZ1bmN0aW9uIHBhcnNlSWZO
ZWVkZWQoKSB7Ci0gICAgICAgIGlmICh1cGRhdGVUaW1lciB8fCAnIycgKyBoYXNoID09IGxvY2F0
aW9uLmhhc2gpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGhhc2ggPSBsb2NhdGlvbi5o
YXNoLnN1YnN0cigxKS5yZXBsYWNlKC9cLyskLywgJycpOwotICAgICAgICBwYXJhbWV0ZXJzID0g
e307Ci0gICAgICAgIGhhc2guc3BsaXQoL1smO10vKS5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikg
ewotICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gdG9rZW4uc3BsaXQoJz0nKTsKLSAgICAgICAg
ICAgIHZhciBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMF0pOwotICAgICAgICAg
ICAgaWYgKGtleS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1trZXldID0gZGVj
b2RlVVJJQ29tcG9uZW50KGtleVZhbHVlLnNsaWNlKDEpLmpvaW4oJz0nKSk7Ci0gICAgICAgIH0p
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHVwZGF0ZUhhc2goKSB7Ci0gICAgICAgIGlmIChsb2Nh
dGlvbi5oYXNoICE9IGhhc2gpCi0gICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gaGFzaDsKLSAg
ICB9Ci0KLSAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkgewotICAg
ICAgICBwYXJzZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChrZXkgaW4gcGFyYW1ldGVycykKLSAg
ICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW2tleV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NoZWR1bGVI
YXNoVXBkYXRlKCkgewotICAgICAgICB2YXIgbmV3SGFzaCA9ICcnOwotICAgICAgICBmb3IgKGtl
eSBpbiBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBpZiAobmV3SGFzaC5sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgbmV3SGFzaCArPSAnJic7Ci0gICAgICAgICAgICBuZXdIYXNoICs9IGVuY29k
ZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNb
a2V5XSk7Ci0gICAgICAgIH0KLSAgICAgICAgaGFzaCA9IG5ld0hhc2g7Ci0gICAgICAgIGlmICh1
cGRhdGVUaW1lcikKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh1cGRhdGVUaW1lcik7Ci0KLSAg
ICAgICAgdXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHVwZGF0ZVRpbWVyID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgdXBkYXRlSGFzaCgpOwotICAg
ICAgICB9LCA1MDApOwotICAgIH0KLQotICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFs
dWUpIHsKLSAgICAgICAgcGFyc2VJZk5lZWRlZCgpOwotICAgICAgICBwYXJhbWV0ZXJzW2tleV0g
PSB2YWx1ZTsKLSAgICAgICAgc2NoZWR1bGVIYXNoVXBkYXRlKCk7Ci0gICAgfQotCi0gICAgdGhp
cy5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgIHBhcnNlSWZOZWVkZWQoKTsKLSAg
ICAgICAgZGVsZXRlIHBhcmFtZXRlcnNba2V5XTsKLSAgICAgICAgc2NoZWR1bGVIYXNoVXBkYXRl
KCk7Ci0gICAgfQotCi0gICAgdmFyIHdhdGNoQ2FsbGJhY2tzID0ge307Ci0gICAgZnVuY3Rpb24g
b25oYXNoY2hhbmdlKCkgewotICAgICAgICBpZiAoJyMnICsgaGFzaCA9PSBsb2NhdGlvbi5oYXNo
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFJhY2UuIElmIHRoZSBoYXNoIGhh
ZCBjaGFuZ2VkIHdoaWxlIHdlJ3JlIHdhaXRpbmcgdG8gdXBkYXRlLCBpZ25vcmUgdGhlIGNoYW5n
ZS4KLSAgICAgICAgaWYgKHVwZGF0ZVRpbWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQo
dXBkYXRlVGltZXIpOwotICAgICAgICAgICAgdXBkYXRlVGltZXIgPSB1bmRlZmluZWQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgaWdub3JpbmcgVVJMU3RhdGUuc2V0
L3JlbW92ZSB3aGlsZSBub3RpZnlpbmcgY2FsbGJhY2tzLgotICAgICAgICB2YXIgb2xkUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcnNlSWZOZWVkZWQoKTsKLSAgICAgICAgdmFy
IGNhbGxiYWNrcyA9IFtdOwotICAgICAgICB2YXIgY2hhbmdlZFN0YXRlcyA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gd2F0Y2hDYWxsYmFja3MpIHsKLSAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXJzW2tleV0gPT0gb2xkUGFyYW1ldGVyc1trZXldKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY2hhbmdlZFN0YXRlcy5wdXNoKGtleSk7Ci0gICAgICAgICAgICBj
YWxsYmFja3MucHVzaCh3YXRjaENhbGxiYWNrc1trZXldKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAg
Y2FsbGJhY2tzW2ldKGNoYW5nZWRTdGF0ZXMpOwotICAgIH0KLSAgICAkKHdpbmRvdykuYmluZCgn
aGFzaGNoYW5nZScsIG9uaGFzaGNoYW5nZSk7Ci0KLSAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0
aXBsZSBjYWxsYmFja3Mgb24gYSBzaW5nbGUga2V5LgotICAgIHRoaXMud2F0Y2ggPSBmdW5jdGlv
biAoa2V5LCBjYWxsYmFjaykgewotICAgICAgICBwYXJzZUlmTmVlZGVkKCk7Ci0gICAgICAgIHdh
dGNoQ2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjazsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gVG9v
bHRpcChjb250YWluZXJQYXJlbnQsIGNsYXNzTmFtZSkgewotICAgIHZhciBjb250YWluZXI7Ci0g
ICAgdmFyIHNlbGYgPSB0aGlzOwotICAgIHZhciBoaWRlVGltZXI7IC8vIFVzZSBzZXRUaW1lb3V0
KH4sIDApIHRvIHdvcmthcm91bmQgdGhlIHJhY2UgY29uZGl0aW9uIHRoYXQgYXJpc2VzIHdoZW4g
bW92aW5nIG1vdXNlIGZhc3QuCi0gICAgdmFyIHByZXZpb3VzQ29udGVudDsKLQotICAgIGZ1bmN0
aW9uIGVuc3VyZUNvbnRhaW5lcigpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5lcikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Ci0gICAgICAgICQoY29udGFpbmVyUGFyZW50KS5hcHBlbmQoY29udGFpbmVyKTsKLSAg
ICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAgICAgY29udGFpbmVy
LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICAgICAgJChjb250YWluZXIpLmhpZGUo
KTsKLSAgICB9Ci0KLSAgICB0aGlzLnNob3cgPSBmdW5jdGlvbiAoeCwgeSwgY29udGVudCkgewot
ICAgICAgICBpZiAoaGlkZVRpbWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlkZVRp
bWVyKTsKLSAgICAgICAgICAgIGhpZGVUaW1lciA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChwcmV2aW91c0NvbnRlbnQgPT09IGNvbnRlbnQpIHsKLSAgICAgICAgICAgICQo
Y29udGFpbmVyKS5zaG93KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudDsKLQotICAgICAgICBlbnN1cmVDb250YWluZXIo
KTsKLSAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGNvbnRlbnQ7Ci0gICAgICAgICQoY29u
dGFpbmVyKS5zaG93KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBTdHlsZSBzcGVjaWZpYyBjb21wdXRh
dGlvbiBsaWtlIHRoaXMgb25lIHNob3VsZG4ndCBiZSBpbiBUb29sdGlwIGNsYXNzLgotICAgICAg
ICB2YXIgdG9wID0geSAtICQoY29udGFpbmVyKS5vdXRlckhlaWdodCgpIC0gMTU7Ci0gICAgICAg
IGlmICh0b3AgPCAwKSB7Ci0gICAgICAgICAgICAkKGNvbnRhaW5lcikuYWRkQ2xhc3MoJ2ludmVy
dGVkJyk7Ci0gICAgICAgICAgICB0b3AgPSB5ICsgMTU7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgJChjb250YWluZXIpLnJlbW92ZUNsYXNzKCdpbnZlcnRlZCcpOwotICAgICAgICAkKGNv
bnRhaW5lcikub2Zmc2V0KHtsZWZ0OiB4IC0gJChjb250YWluZXIpLm91dGVyV2lkdGgoKSAvIDIs
IHRvcDogdG9wfSk7Ci0gICAgfQotCi0gICAgdGhpcy5oaWRlID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAo
aGlkZVRpbWVyKQotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZGVUaW1lcik7Ci0gICAgICAg
IGhpZGVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgJChjb250
YWluZXIpLmZhZGVPdXQoMTAwKTsKLSAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gdW5kZWZp
bmVkOwotICAgICAgICB9LCAwKTsKLSAgICB9Ci0KLSAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9u
IChpbW1lZGlhdGVseSkgewotICAgICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoaGlkZVRpbWVyKQotICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KGhpZGVUaW1lcik7Ci0KLSAgICAgICAgJChjb250YWluZXIpLnJlbW92ZSgpOwotICAgICAgICBj
b250YWluZXIgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByZXZpb3VzUmVzdWx0ID0gdW5kZWZpbmVk
OwotICAgIH0KLQotICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAkKGNv
bnRhaW5lcikudG9nZ2xlKCk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29u
dGFpbmVyKTsgLy8gVG9nZ2xlZCB0b29sdGlwIHNob3VsZCBzaG93IHVwIGF0IHRoZSB0b3AuCi0g
ICAgfQotCi0gICAgdGhpcy5iaW5kQ2xpY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKLSAgICAg
ICAgZW5zdXJlQ29udGFpbmVyKCk7Ci0gICAgICAgICQoY29udGFpbmVyKS5iaW5kKCdjbGljaycs
IGNhbGxiYWNrKTsKLSAgICB9Ci0gICAgdGhpcy5iaW5kTW91c2VFbnRlciA9IGZ1bmN0aW9uIChj
YWxsYmFjaykgewotICAgICAgICBlbnN1cmVDb250YWluZXIoKTsKLSAgICAgICAgJChjb250YWlu
ZXIpLmJpbmQoJ21vdXNlZW50ZXInLCBjYWxsYmFjayk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuY29sb3JoZWxwZXJzLmpz
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuY29sb3JoZWxwZXJz
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzUyNGQ3ODZmMGEzYjBkMDQxZjQ3
OTBlNWVmM2RlNTIzNWM1YmNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmNvbG9y
aGVscGVycy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKiBQbHVnaW4gZm9y
IGpRdWVyeSBmb3Igd29ya2luZyB3aXRoIGNvbG9ycy4KLSAqIAotICogVmVyc2lvbiAxLjEuCi0g
KiAKLSAqIEluc3BpcmF0aW9uIGZyb20galF1ZXJ5IGNvbG9yIGFuaW1hdGlvbiBwbHVnaW4gYnkg
Sm9obiBSZXNpZy4KLSAqCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYnkgT2xl
IExhdXJzZW4sIE9jdG9iZXIgMjAwOS4KLSAqCi0gKiBFeGFtcGxlczoKLSAqCi0gKiAgICQuY29s
b3IucGFyc2UoIiNmZmYiKS5zY2FsZSgncmdiJywgMC4yNSkuYWRkKCdhJywgLTAuNSkudG9TdHJp
bmcoKQotICogICB2YXIgYyA9ICQuY29sb3IuZXh0cmFjdCgkKCIjbXlkaXYiKSwgJ2JhY2tncm91
bmQtY29sb3InKTsKLSAqICAgY29uc29sZS5sb2coYy5yLCBjLmcsIGMuYiwgYy5hKTsKLSAqICAg
JC5jb2xvci5tYWtlKDEwMCwgNTAsIDI1LCAwLjQpLnRvU3RyaW5nKCkgLy8gcmV0dXJucyAicmdi
YSgxMDAsNTAsMjUsMC40KSIKLSAqCi0gKiBOb3RlIHRoYXQgLnNjYWxlKCkgYW5kIC5hZGQoKSBy
ZXR1cm4gdGhlIHNhbWUgbW9kaWZpZWQgb2JqZWN0Ci0gKiBpbnN0ZWFkIG9mIG1ha2luZyBhIG5l
dyBvbmUuCi0gKgotICogVi4gMS4xOiBGaXggZXJyb3IgaGFuZGxpbmcgc28gZS5nLiBwYXJzaW5n
IGFuIGVtcHR5IHN0cmluZyBkb2VzCi0gKiBwcm9kdWNlIGEgY29sb3IgcmF0aGVyIHRoYW4ganVz
dCBjcmFzaGluZy4KLSAqLyAKLQotKGZ1bmN0aW9uKCQpIHsKLSAgICAkLmNvbG9yID0ge307Ci0K
LSAgICAvLyBjb25zdHJ1Y3QgY29sb3Igb2JqZWN0IHdpdGggc29tZSBjb252ZW5pZW50IGNoYWlu
YWJsZSBoZWxwZXJzCi0gICAgJC5jb2xvci5tYWtlID0gZnVuY3Rpb24gKHIsIGcsIGIsIGEpIHsK
LSAgICAgICAgdmFyIG8gPSB7fTsKLSAgICAgICAgby5yID0gciB8fCAwOwotICAgICAgICBvLmcg
PSBnIHx8IDA7Ci0gICAgICAgIG8uYiA9IGIgfHwgMDsKLSAgICAgICAgby5hID0gYSAhPSBudWxs
ID8gYSA6IDE7Ci0KLSAgICAgICAgby5hZGQgPSBmdW5jdGlvbiAoYywgZCkgewotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIG9b
Yy5jaGFyQXQoaSldICs9IGQ7Ci0gICAgICAgICAgICByZXR1cm4gby5ub3JtYWxpemUoKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIG8uc2NhbGUgPSBmdW5jdGlvbiAoYywgZikgewot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgICAgIG9bYy5jaGFyQXQoaSldICo9IGY7Ci0gICAgICAgICAgICByZXR1cm4gby5ub3JtYWxp
emUoKTsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIG8udG9TdHJpbmcgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICBpZiAoby5hID49IDEuMCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiAicmdiKCIrW28uciwgby5nLCBvLmJdLmpvaW4oIiwiKSsiKSI7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAicmdiYSgiK1tvLnIsIG8uZywgby5iLCBv
LmFdLmpvaW4oIiwiKSsiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
by5ub3JtYWxpemUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBjbGFtcCht
aW4sIHZhbHVlLCBtYXgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBtaW4gPyBt
aW46ICh2YWx1ZSA+IG1heCA/IG1heDogdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvLnIgPSBjbGFtcCgwLCBwYXJzZUludChvLnIpLCAyNTUpOwotICAg
ICAgICAgICAgby5nID0gY2xhbXAoMCwgcGFyc2VJbnQoby5nKSwgMjU1KTsKLSAgICAgICAgICAg
IG8uYiA9IGNsYW1wKDAsIHBhcnNlSW50KG8uYiksIDI1NSk7Ci0gICAgICAgICAgICBvLmEgPSBj
bGFtcCgwLCBvLmEsIDEpOwotICAgICAgICAgICAgcmV0dXJuIG87Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgby5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiAkLmNvbG9y
Lm1ha2Uoby5yLCBvLmIsIG8uZywgby5hKTsKLSAgICAgICAgfTsKLQotICAgICAgICByZXR1cm4g
by5ub3JtYWxpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBleHRyYWN0IENTUyBjb2xvciBwcm9wZXJ0
eSBmcm9tIGVsZW1lbnQsIGdvaW5nIHVwIGluIHRoZSBET00KLSAgICAvLyBpZiBpdCdzICJ0cmFu
c3BhcmVudCIKLSAgICAkLmNvbG9yLmV4dHJhY3QgPSBmdW5jdGlvbiAoZWxlbSwgY3NzKSB7Ci0g
ICAgICAgIHZhciBjOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjID0gZWxlbS5jc3MoY3Nz
KS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgLy8ga2VlcCBnb2luZyB1bnRpbCB3ZSBmaW5k
IGFuIGVsZW1lbnQgdGhhdCBoYXMgY29sb3IsIG9yCi0gICAgICAgICAgICAvLyB3ZSBoaXQgdGhl
IGJvZHkKLSAgICAgICAgICAgIGlmIChjICE9ICcnICYmIGMgIT0gJ3RyYW5zcGFyZW50JykKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudCgpOwot
ICAgICAgICB9IHdoaWxlICghJC5ub2RlTmFtZShlbGVtLmdldCgwKSwgImJvZHkiKSk7Ci0KLSAg
ICAgICAgLy8gY2F0Y2ggU2FmYXJpJ3Mgd2F5IG9mIHNpZ25hbGxpbmcgdHJhbnNwYXJlbnQKLSAg
ICAgICAgaWYgKGMgPT0gInJnYmEoMCwgMCwgMCwgMCkiKQotICAgICAgICAgICAgYyA9ICJ0cmFu
c3BhcmVudCI7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gJC5jb2xvci5wYXJzZShjKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gcGFyc2UgQ1NTIGNvbG9yIHN0cmluZyAobGlrZSAicmdiKDEwLCAz
MiwgNDMpIiBvciAiI2ZmZiIpLAotICAgIC8vIHJldHVybnMgY29sb3Igb2JqZWN0LCBpZiBwYXJz
aW5nIGZhaWxlZCwgeW91IGdldCBibGFjayAoMCwgMCwKLSAgICAvLyAwKSBvdXQKLSAgICAkLmNv
bG9yLnBhcnNlID0gZnVuY3Rpb24gKHN0cikgewotICAgICAgICB2YXIgcmVzLCBtID0gJC5jb2xv
ci5tYWtlOwotCi0gICAgICAgIC8vIExvb2sgZm9yIHJnYihudW0sbnVtLG51bSkKLSAgICAgICAg
aWYgKHJlcyA9IC9yZ2JcKFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMq
KFswLTldezEsM30pXHMqXCkvLmV4ZWMoc3RyKSkKLSAgICAgICAgICAgIHJldHVybiBtKHBhcnNl
SW50KHJlc1sxXSwgMTApLCBwYXJzZUludChyZXNbMl0sIDEwKSwgcGFyc2VJbnQocmVzWzNdLCAx
MCkpOwotICAgICAgICAKLSAgICAgICAgLy8gTG9vayBmb3IgcmdiYShudW0sbnVtLG51bSxudW0p
Ci0gICAgICAgIGlmIChyZXMgPSAvcmdiYVwoXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsx
LDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXHMqXCkv
LmV4ZWMoc3RyKSkKLSAgICAgICAgICAgIHJldHVybiBtKHBhcnNlSW50KHJlc1sxXSwgMTApLCBw
YXJzZUludChyZXNbMl0sIDEwKSwgcGFyc2VJbnQocmVzWzNdLCAxMCksIHBhcnNlRmxvYXQocmVz
WzRdKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gTG9vayBmb3IgcmdiKG51bSUsbnVtJSxu
dW0lKQotICAgICAgICBpZiAocmVzID0gL3JnYlwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVc
cyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8p
XCVccypcKS8uZXhlYyhzdHIpKQotICAgICAgICAgICAgcmV0dXJuIG0ocGFyc2VGbG9hdChyZXNb
MV0pKjIuNTUsIHBhcnNlRmxvYXQocmVzWzJdKSoyLjU1LCBwYXJzZUZsb2F0KHJlc1szXSkqMi41
NSk7Ci0KLSAgICAgICAgLy8gTG9vayBmb3IgcmdiYShudW0lLG51bSUsbnVtJSxudW0pCi0gICAg
ICAgIGlmIChyZXMgPSAvcmdiYVwoXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFsw
LTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMq
KFswLTldKyg/OlwuWzAtOV0rKT8pXHMqXCkvLmV4ZWMoc3RyKSkKLSAgICAgICAgICAgIHJldHVy
biBtKHBhcnNlRmxvYXQocmVzWzFdKSoyLjU1LCBwYXJzZUZsb2F0KHJlc1syXSkqMi41NSwgcGFy
c2VGbG9hdChyZXNbM10pKjIuNTUsIHBhcnNlRmxvYXQocmVzWzRdKSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBMb29rIGZvciAjYTBiMWMyCi0gICAgICAgIGlmIChyZXMgPSAvIyhbYS1mQS1GMC05
XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KS8uZXhlYyhzdHIpKQotICAgICAg
ICAgICAgcmV0dXJuIG0ocGFyc2VJbnQocmVzWzFdLCAxNiksIHBhcnNlSW50KHJlc1syXSwgMTYp
LCBwYXJzZUludChyZXNbM10sIDE2KSk7Ci0KLSAgICAgICAgLy8gTG9vayBmb3IgI2ZmZgotICAg
ICAgICBpZiAocmVzID0gLyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkv
LmV4ZWMoc3RyKSkKLSAgICAgICAgICAgIHJldHVybiBtKHBhcnNlSW50KHJlc1sxXStyZXNbMV0s
IDE2KSwgcGFyc2VJbnQocmVzWzJdK3Jlc1syXSwgMTYpLCBwYXJzZUludChyZXNbM10rcmVzWzNd
LCAxNikpOwotCi0gICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgbW9zdCBsaWtlbHkgZGVhbGlu
ZyB3aXRoIGEgbmFtZWQgY29sb3IKLSAgICAgICAgdmFyIG5hbWUgPSAkLnRyaW0oc3RyKS50b0xv
d2VyQ2FzZSgpOwotICAgICAgICBpZiAobmFtZSA9PSAidHJhbnNwYXJlbnQiKQotICAgICAgICAg
ICAgcmV0dXJuIG0oMjU1LCAyNTUsIDI1NSwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gZGVmYXVsdCB0byBibGFjawotICAgICAgICAgICAgcmVzID0gbG9va3VwQ29sb3JzW25h
bWVdIHx8IFswLCAwLCAwXTsKLSAgICAgICAgICAgIHJldHVybiBtKHJlc1swXSwgcmVzWzFdLCBy
ZXNbMl0pOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZhciBsb29rdXBDb2xvcnMgPSB7
Ci0gICAgICAgIGFxdWE6WzAsMjU1LDI1NV0sCi0gICAgICAgIGF6dXJlOlsyNDAsMjU1LDI1NV0s
Ci0gICAgICAgIGJlaWdlOlsyNDUsMjQ1LDIyMF0sCi0gICAgICAgIGJsYWNrOlswLDAsMF0sCi0g
ICAgICAgIGJsdWU6WzAsMCwyNTVdLAotICAgICAgICBicm93bjpbMTY1LDQyLDQyXSwKLSAgICAg
ICAgY3lhbjpbMCwyNTUsMjU1XSwKLSAgICAgICAgZGFya2JsdWU6WzAsMCwxMzldLAotICAgICAg
ICBkYXJrY3lhbjpbMCwxMzksMTM5XSwKLSAgICAgICAgZGFya2dyZXk6WzE2OSwxNjksMTY5XSwK
LSAgICAgICAgZGFya2dyZWVuOlswLDEwMCwwXSwKLSAgICAgICAgZGFya2toYWtpOlsxODksMTgz
LDEwN10sCi0gICAgICAgIGRhcmttYWdlbnRhOlsxMzksMCwxMzldLAotICAgICAgICBkYXJrb2xp
dmVncmVlbjpbODUsMTA3LDQ3XSwKLSAgICAgICAgZGFya29yYW5nZTpbMjU1LDE0MCwwXSwKLSAg
ICAgICAgZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sCi0gICAgICAgIGRhcmtyZWQ6WzEzOSwwLDBd
LAotICAgICAgICBkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0sCi0gICAgICAgIGRhcmt2aW9sZXQ6
WzE0OCwwLDIxMV0sCi0gICAgICAgIGZ1Y2hzaWE6WzI1NSwwLDI1NV0sCi0gICAgICAgIGdvbGQ6
WzI1NSwyMTUsMF0sCi0gICAgICAgIGdyZWVuOlswLDEyOCwwXSwKLSAgICAgICAgaW5kaWdvOls3
NSwwLDEzMF0sCi0gICAgICAgIGtoYWtpOlsyNDAsMjMwLDE0MF0sCi0gICAgICAgIGxpZ2h0Ymx1
ZTpbMTczLDIxNiwyMzBdLAotICAgICAgICBsaWdodGN5YW46WzIyNCwyNTUsMjU1XSwKLSAgICAg
ICAgbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLAotICAgICAgICBsaWdodGdyZXk6WzIxMSwyMTEs
MjExXSwKLSAgICAgICAgbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sCi0gICAgICAgIGxpZ2h0eWVs
bG93OlsyNTUsMjU1LDIyNF0sCi0gICAgICAgIGxpbWU6WzAsMjU1LDBdLAotICAgICAgICBtYWdl
bnRhOlsyNTUsMCwyNTVdLAotICAgICAgICBtYXJvb246WzEyOCwwLDBdLAotICAgICAgICBuYXZ5
OlswLDAsMTI4XSwKLSAgICAgICAgb2xpdmU6WzEyOCwxMjgsMF0sCi0gICAgICAgIG9yYW5nZTpb
MjU1LDE2NSwwXSwKLSAgICAgICAgcGluazpbMjU1LDE5MiwyMDNdLAotICAgICAgICBwdXJwbGU6
WzEyOCwwLDEyOF0sCi0gICAgICAgIHZpb2xldDpbMTI4LDAsMTI4XSwKLSAgICAgICAgcmVkOlsy
NTUsMCwwXSwKLSAgICAgICAgc2lsdmVyOlsxOTIsMTkyLDE5Ml0sCi0gICAgICAgIHdoaXRlOlsy
NTUsMjU1LDI1NV0sCi0gICAgICAgIHllbGxvdzpbMjU1LDI1NSwwXQotICAgIH07Ci19KShqUXVl
cnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVl
cnkuZmxvdC5jYXRlZ29yaWVzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9q
cy9qcXVlcnkuZmxvdC5jYXRlZ29yaWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkZDA3NzY4MTI2OWZiZTM3YzQyOWU5OTE5ZDA4NDViOTZiNjk1YTI3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5qcworKysgL2Rldi9udWxsCkBAIC0x
LDE5MCArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3IgcGxvdHRpbmcgdGV4dHVhbCBkYXRhIG9y
IGNhdGVnb3JpZXMuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVy
c2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi1Db25zaWRlciBhIGRhdGFz
ZXQgbGlrZSBbWyJGZWJydWFyeSIsIDM0XSwgWyJNYXJjaCIsIDIwXSwgLi4uXS4gVGhpcyBwbHVn
aW4KLWFsbG93cyB5b3UgdG8gcGxvdCBzdWNoIGEgZGF0YXNldCBkaXJlY3RseS4KLQotVG8gZW5h
YmxlIGl0LCB5b3UgbXVzdCBzcGVjaWZ5IG1vZGU6ICJjYXRlZ29yaWVzIiBvbiB0aGUgYXhpcyB3
aXRoIHRoZSB0ZXh0dWFsCi1sYWJlbHMsIGUuZy4KLQotICAgICQucGxvdCgiI3BsYWNlaG9sZGVy
IiwgZGF0YSwgeyB4YXhpczogeyBtb2RlOiAiY2F0ZWdvcmllcyIgfSB9KTsKLQotQnkgZGVmYXVs
dCwgdGhlIGxhYmVscyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFyZSBtZXQgaW4gdGhlIGRhdGEgc2Vy
aWVzLiBJZiB5b3UKLW5lZWQgYSBkaWZmZXJlbnQgb3JkZXJpbmcsIHlvdSBjYW4gc3BlY2lmeSAi
Y2F0ZWdvcmllcyIgb24gdGhlIGF4aXMgb3B0aW9ucwotYW5kIGxpc3QgdGhlIGNhdGVnb3JpZXMg
dGhlcmU6Ci0KLSAgICB4YXhpczogewotICAgICAgICBtb2RlOiAiY2F0ZWdvcmllcyIsCi0gICAg
ICAgIGNhdGVnb3JpZXM6IFsiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiXQotICAgIH0KLQot
SWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBkaXN0YW5jZXMgYmV0d2VlbiB0aGUgY2F0ZWdv
cmllcywgeW91IGNhbiBzcGVjaWZ5Ci0iY2F0ZWdvcmllcyIgYXMgYW4gb2JqZWN0IG1hcHBpbmcg
bGFiZWxzIHRvIHZhbHVlcwotCi0gICAgeGF4aXM6IHsKLSAgICAgICAgbW9kZTogImNhdGVnb3Jp
ZXMiLAotICAgICAgICBjYXRlZ29yaWVzOiB7ICJGZWJydWFyeSI6IDEsICJNYXJjaCI6IDMsICJB
cHJpbCI6IDQgfQotICAgIH0KLQotSWYgeW91IGRvbid0IHNwZWNpZnkgYWxsIGNhdGVnb3JpZXMs
IHRoZSByZW1haW5pbmcgY2F0ZWdvcmllcyB3aWxsIGJlIG51bWJlcmVkCi1mcm9tIHRoZSBtYXgg
dmFsdWUgcGx1cyAxICh3aXRoIGEgc3BhY2luZyBvZiAxIGJldHdlZW4gZWFjaCkuCi0KLUludGVy
bmFsbHksIHRoZSBwbHVnaW4gd29ya3MgYnkgdHJhbnNmb3JtaW5nIHRoZSBpbnB1dCBkYXRhIHRo
cm91Z2ggYW4gYXV0by0KLWdlbmVyYXRlZCBtYXBwaW5nIHdoZXJlIHRoZSBmaXJzdCBjYXRlZ29y
eSBiZWNvbWVzIDAsIHRoZSBzZWNvbmQgMSwgZXRjLgotSGVuY2UsIGEgcG9pbnQgbGlrZSBbIkZl
YnJ1YXJ5IiwgMzRdIGJlY29tZXMgWzAsIDM0XSBpbnRlcm5hbGx5IGluIEZsb3QgKHRoaXMKLWlz
IHZpc2libGUgaW4gaG92ZXIgYW5kIGNsaWNrIGV2ZW50cyB0aGF0IHJldHVybiBudW1iZXJzIHJh
dGhlciB0aGFuIHRoZQotY2F0ZWdvcnkgbGFiZWxzKS4gVGhlIHBsdWdpbiBhbHNvIG92ZXJyaWRl
cyB0aGUgdGljayBnZW5lcmF0b3IgdG8gc3BpdCBvdXQgdGhlCi1jYXRlZ29yaWVzIGFzIHRpY2tz
IGluc3RlYWQgb2YgdGhlIHZhbHVlcy4KLQotSWYgeW91IG5lZWQgdG8gbWFwIGEgdmFsdWUgYmFj
ayB0byBpdHMgbGFiZWwsIHRoZSBtYXBwaW5nIGlzIGFsd2F5cyBhY2Nlc3NpYmxlCi1hcyAiY2F0
ZWdvcmllcyIgb24gdGhlIGF4aXMgb2JqZWN0LCBlLmcuIHBsb3QuZ2V0QXhlcygpLnhheGlzLmNh
dGVnb3JpZXMuCi0KLSovCi0KLShmdW5jdGlvbiAoJCkgewotICAgIHZhciBvcHRpb25zID0gewot
ICAgICAgICB4YXhpczogewotICAgICAgICAgICAgY2F0ZWdvcmllczogbnVsbAotICAgICAgICB9
LAotICAgICAgICB5YXhpczogewotICAgICAgICAgICAgY2F0ZWdvcmllczogbnVsbAotICAgICAg
ICB9Ci0gICAgfTsKLSAgICAKLSAgICBmdW5jdGlvbiBwcm9jZXNzUmF3RGF0YShwbG90LCBzZXJp
ZXMsIGRhdGEsIGRhdGFwb2ludHMpIHsKLSAgICAgICAgLy8gaWYgY2F0ZWdvcmllcyBhcmUgZW5h
YmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlCi0gICAgICAgIC8vIGF1dG8tdHJhbnNmb3JtYXRpb24g
dG8gbnVtYmVycyBzbyB0aGUgc3RyaW5ncyBhcmUgaW50YWN0Ci0gICAgICAgIC8vIGZvciBsYXRl
ciBwcm9jZXNzaW5nCi0KLSAgICAgICAgdmFyIHhDYXRlZ29yaWVzID0gc2VyaWVzLnhheGlzLm9w
dGlvbnMubW9kZSA9PSAiY2F0ZWdvcmllcyIsCi0gICAgICAgICAgICB5Q2F0ZWdvcmllcyA9IHNl
cmllcy55YXhpcy5vcHRpb25zLm1vZGUgPT0gImNhdGVnb3JpZXMiOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCEoeENhdGVnb3JpZXMgfHwgeUNhdGVnb3JpZXMpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBmb3JtYXQgPSBkYXRhcG9pbnRzLmZvcm1hdDsKLQotICAgICAgICBp
ZiAoIWZvcm1hdCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGF1dG8tZGV0ZWN0aW9uIHNob3Vs
ZCByZWFsbHkgbm90IGJlIGRlZmluZWQgaGVyZQotICAgICAgICAgICAgdmFyIHMgPSBzZXJpZXM7
Ci0gICAgICAgICAgICBmb3JtYXQgPSBbXTsKLSAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeDog
dHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKLSAgICAgICAgICAgIGZvcm1h
dC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKLQotICAg
ICAgICAgICAgaWYgKHMuYmFycy5zaG93IHx8IChzLmxpbmVzLnNob3cgJiYgcy5saW5lcy5maWxs
KSkgewotICAgICAgICAgICAgICAgIHZhciBhdXRvc2NhbGUgPSAhISgocy5iYXJzLnNob3cgJiYg
cy5iYXJzLnplcm8pIHx8IChzLmxpbmVzLnNob3cgJiYgcy5saW5lcy56ZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgZm9ybWF0LnB1c2goeyB5OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiBm
YWxzZSwgZGVmYXVsdFZhbHVlOiAwLCBhdXRvc2NhbGU6IGF1dG9zY2FsZSB9KTsKLSAgICAgICAg
ICAgICAgICBpZiAocy5iYXJzLmhvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIGZvcm1hdFtmb3JtYXQubGVuZ3RoIC0gMV0ueTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
bWF0W2Zvcm1hdC5sZW5ndGggLSAxXS54ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRhdGFwb2ludHMuZm9ybWF0ID0g
Zm9ybWF0OwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBmb3JtYXQu
bGVuZ3RoOyArK20pIHsKLSAgICAgICAgICAgIGlmIChmb3JtYXRbbV0ueCAmJiB4Q2F0ZWdvcmll
cykKLSAgICAgICAgICAgICAgICBmb3JtYXRbbV0ubnVtYmVyID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChmb3JtYXRbbV0ueSAmJiB5Q2F0ZWdvcmllcykKLSAgICAgICAg
ICAgICAgICBmb3JtYXRbbV0ubnVtYmVyID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBnZXROZXh0SW5kZXgoY2F0ZWdvcmllcykgewotICAgICAgICB2YXIgaW5kZXgg
PSAtMTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodmFyIHYgaW4gY2F0ZWdvcmllcykKLSAgICAg
ICAgICAgIGlmIChjYXRlZ29yaWVzW3ZdID4gaW5kZXgpCi0gICAgICAgICAgICAgICAgaW5kZXgg
PSBjYXRlZ29yaWVzW3ZdOwotCi0gICAgICAgIHJldHVybiBpbmRleCArIDE7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gY2F0ZWdvcmllc1RpY2tHZW5lcmF0b3IoYXhpcykgewotICAgICAgICB2YXIg
cmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxhYmVsIGluIGF4aXMuY2F0ZWdvcmllcykgewot
ICAgICAgICAgICAgdmFyIHYgPSBheGlzLmNhdGVnb3JpZXNbbGFiZWxdOwotICAgICAgICAgICAg
aWYgKHYgPj0gYXhpcy5taW4gJiYgdiA8PSBheGlzLm1heCkKLSAgICAgICAgICAgICAgICByZXMu
cHVzaChbdiwgbGFiZWxdKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcy5zb3J0KGZ1bmN0aW9u
IChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXTsgfSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlczsK
LSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gc2V0dXBDYXRlZ29yaWVzRm9yQXhpcyhzZXJpZXMs
IGF4aXMsIGRhdGFwb2ludHMpIHsKLSAgICAgICAgaWYgKHNlcmllc1theGlzXS5vcHRpb25zLm1v
ZGUgIT0gImNhdGVnb3JpZXMiKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFzZXJpZXNbYXhpc10uY2F0ZWdvcmllcykgewotICAgICAgICAgICAgLy8gcGFyc2Ug
b3B0aW9ucwotICAgICAgICAgICAgdmFyIGMgPSB7fSwgbyA9IHNlcmllc1theGlzXS5vcHRpb25z
LmNhdGVnb3JpZXMgfHwge307Ci0gICAgICAgICAgICBpZiAoJC5pc0FycmF5KG8pKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgICAgICAgICBjW29baV1dID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGZvciAodmFyIHYgaW4gbykKLSAgICAgICAgICAgICAgICAgICAg
Y1t2XSA9IG9bdl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNl
cmllc1theGlzXS5jYXRlZ29yaWVzID0gYzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGZpeCB0
aWNrcwotICAgICAgICBpZiAoIXNlcmllc1theGlzXS5vcHRpb25zLnRpY2tzKQotICAgICAgICAg
ICAgc2VyaWVzW2F4aXNdLm9wdGlvbnMudGlja3MgPSBjYXRlZ29yaWVzVGlja0dlbmVyYXRvcjsK
LQotICAgICAgICB0cmFuc2Zvcm1Qb2ludHNPbkF4aXMoZGF0YXBvaW50cywgYXhpcywgc2VyaWVz
W2F4aXNdLmNhdGVnb3JpZXMpOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiB0cmFuc2Zvcm1Q
b2ludHNPbkF4aXMoZGF0YXBvaW50cywgYXhpcywgY2F0ZWdvcmllcykgewotICAgICAgICAvLyBn
byB0aHJvdWdoIHRoZSBwb2ludHMsIHRyYW5zZm9ybWluZyB0aGVtCi0gICAgICAgIHZhciBwb2lu
dHMgPSBkYXRhcG9pbnRzLnBvaW50cywKLSAgICAgICAgICAgIHBzID0gZGF0YXBvaW50cy5wb2lu
dHNpemUsCi0gICAgICAgICAgICBmb3JtYXQgPSBkYXRhcG9pbnRzLmZvcm1hdCwKLSAgICAgICAg
ICAgIGZvcm1hdENvbHVtbiA9IGF4aXMuY2hhckF0KDApLAotICAgICAgICAgICAgaW5kZXggPSBn
ZXROZXh0SW5kZXgoY2F0ZWdvcmllcyk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
b2ludHMubGVuZ3RoOyBpICs9IHBzKSB7Ci0gICAgICAgICAgICBpZiAocG9pbnRzW2ldID09IG51
bGwpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodmFyIG0gPSAwOyBtIDwgcHM7ICsrbSkgewotICAgICAgICAgICAgICAgIHZhciB2YWwg
PSBwb2ludHNbaSArIG1dOwotCi0gICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8ICFm
b3JtYXRbbV1bZm9ybWF0Q29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoISh2YWwgaW4gY2F0ZWdvcmllcykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2F0ZWdvcmllc1t2YWxdID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHBvaW50c1tpICsgbV0gPSBjYXRlZ29yaWVzW3ZhbF07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwcm9jZXNzRGF0YXBvaW50cyhwbG90LCBzZXJp
ZXMsIGRhdGFwb2ludHMpIHsKLSAgICAgICAgc2V0dXBDYXRlZ29yaWVzRm9yQXhpcyhzZXJpZXMs
ICJ4YXhpcyIsIGRhdGFwb2ludHMpOwotICAgICAgICBzZXR1cENhdGVnb3JpZXNGb3JBeGlzKHNl
cmllcywgInlheGlzIiwgZGF0YXBvaW50cyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaW5pdChw
bG90KSB7Ci0gICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc1Jhd0RhdGEucHVzaChwcm9jZXNzUmF3
RGF0YSk7Ci0gICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc0RhdGFwb2ludHMucHVzaChwcm9jZXNz
RGF0YXBvaW50cyk7Ci0gICAgfQotICAgIAotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAg
ICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBuYW1l
OiAnY2F0ZWdvcmllcycsCi0gICAgICAgIHZlcnNpb246ICcxLjAnCi0gICAgfSk7Ci19KShqUXVl
cnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVl
cnkuZmxvdC5jcm9zc2hhaXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pz
L2pxdWVyeS5mbG90LmNyb3NzaGFpci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDhjNTcxNjcxNzcxNjY5YjJmMjU4YjQ2MzE3ODAwZjI3MTY1ZTYxMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL2pzL2pxdWVyeS5mbG90LmNyb3NzaGFpci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3
NiArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3Igc2hvd2luZyBjcm9zc2hhaXJzIHdoZW4gdGhl
IG1vdXNlIGhvdmVycyBvdmVyIHRoZSBwbG90LgotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJ
T0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQot
VGhlIHBsdWdpbiBzdXBwb3J0cyB0aGVzZSBvcHRpb25zOgotCi0gICAgY3Jvc3NoYWlyOiB7Ci0g
ICAgICAgIG1vZGU6IG51bGwgb3IgIngiIG9yICJ5IiBvciAieHkiCi0gICAgICAgIGNvbG9yOiBj
b2xvcgotICAgICAgICBsaW5lV2lkdGg6IG51bWJlcgotICAgIH0KLQotU2V0IHRoZSBtb2RlIHRv
IG9uZSBvZiAieCIsICJ5IiBvciAieHkiLiBUaGUgIngiIG1vZGUgZW5hYmxlcyBhIHZlcnRpY2Fs
Ci1jcm9zc2hhaXIgdGhhdCBsZXRzIHlvdSB0cmFjZSB0aGUgdmFsdWVzIG9uIHRoZSB4IGF4aXMs
ICJ5IiBlbmFibGVzIGEKLWhvcml6b250YWwgY3Jvc3NoYWlyIGFuZCAieHkiIGVuYWJsZXMgdGhl
bSBib3RoLiAiY29sb3IiIGlzIHRoZSBjb2xvciBvZiB0aGUKLWNyb3NzaGFpciAoZGVmYXVsdCBp
cyAicmdiYSgxNzAsIDAsIDAsIDAuODApIiksICJsaW5lV2lkdGgiIGlzIHRoZSB3aWR0aCBvZgot
dGhlIGRyYXduIGxpbmVzIChkZWZhdWx0IGlzIDEpLgotCi1UaGUgcGx1Z2luIGFsc28gYWRkcyBm
b3VyIHB1YmxpYyBtZXRob2RzOgotCi0gIC0gc2V0Q3Jvc3NoYWlyKCBwb3MgKQotCi0gICAgU2V0
IHRoZSBwb3NpdGlvbiBvZiB0aGUgY3Jvc3NoYWlyLiBOb3RlIHRoYXQgdGhpcyBpcyBjbGVhcmVk
IGlmIHRoZSB1c2VyCi0gICAgbW92ZXMgdGhlIG1vdXNlLiAicG9zIiBpcyBpbiBjb29yZGluYXRl
cyBvZiB0aGUgcGxvdCBhbmQgc2hvdWxkIGJlIG9uIHRoZQotICAgIGZvcm0geyB4OiB4cG9zLCB5
OiB5cG9zIH0gKHlvdSBjYW4gdXNlIHgyL3gzLy4uLiBpZiB5b3UncmUgdXNpbmcgbXVsdGlwbGUK
LSAgICBheGVzKSwgd2hpY2ggaXMgY29pbmNpZGVudGFsbHkgdGhlIHNhbWUgZm9ybWF0IGFzIHdo
YXQgeW91IGdldCBmcm9tIGEKLSAgICAicGxvdGhvdmVyIiBldmVudC4gSWYgInBvcyIgaXMgbnVs
bCwgdGhlIGNyb3NzaGFpciBpcyBjbGVhcmVkLgotCi0gIC0gY2xlYXJDcm9zc2hhaXIoKQotCi0g
ICAgQ2xlYXIgdGhlIGNyb3NzaGFpci4KLQotICAtIGxvY2tDcm9zc2hhaXIocG9zKQotCi0gICAg
Q2F1c2UgdGhlIGNyb3NzaGFpciB0byBsb2NrIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLCBubyBs
b25nZXIgdXBkYXRpbmcgaWYKLSAgICB0aGUgdXNlciBtb3ZlcyB0aGUgbW91c2UuIE9wdGlvbmFs
bHkgc3VwcGx5IGEgcG9zaXRpb24gKHBhc3NlZCBvbiB0bwotICAgIHNldENyb3NzaGFpcigpKSB0
byBtb3ZlIGl0IHRvLgotCi0gICAgRXhhbXBsZSB1c2FnZToKLQotICAgIHZhciBteUZsb3QgPSAk
LnBsb3QoICQoIiNncmFwaCIpLCAuLi4sIHsgY3Jvc3NoYWlyOiB7IG1vZGU6ICJ4IiB9IH0gfTsK
LSAgICAkKCIjZ3JhcGgiKS5iaW5kKCAicGxvdGhvdmVyIiwgZnVuY3Rpb24gKCBldnQsIHBvc2l0
aW9uLCBpdGVtICkgewotICAgICAgICBpZiAoIGl0ZW0gKSB7Ci0gICAgICAgICAgICAvLyBMb2Nr
IHRoZSBjcm9zc2hhaXIgdG8gdGhlIGRhdGEgcG9pbnQgYmVpbmcgaG92ZXJlZAotICAgICAgICAg
ICAgbXlGbG90LmxvY2tDcm9zc2hhaXIoewotICAgICAgICAgICAgICAgIHg6IGl0ZW0uZGF0YXBv
aW50WyAwIF0sCi0gICAgICAgICAgICAgICAgeTogaXRlbS5kYXRhcG9pbnRbIDEgXQotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gbm9ybWFs
IGNyb3NzaGFpciBvcGVyYXRpb24KLSAgICAgICAgICAgIG15RmxvdC51bmxvY2tDcm9zc2hhaXIo
KTsKLSAgICAgICAgfQotICAgIH0pOwotCi0gIC0gdW5sb2NrQ3Jvc3NoYWlyKCkKLQotICAgIEZy
ZWUgdGhlIGNyb3NzaGFpciB0byBtb3ZlIGFnYWluIGFmdGVyIGxvY2tpbmcgaXQuCi0qLwotCi0o
ZnVuY3Rpb24gKCQpIHsKLSAgICB2YXIgb3B0aW9ucyA9IHsKLSAgICAgICAgY3Jvc3NoYWlyOiB7
Ci0gICAgICAgICAgICBtb2RlOiBudWxsLCAvLyBvbmUgb2YgbnVsbCwgIngiLCAieSIgb3IgInh5
IiwKLSAgICAgICAgICAgIGNvbG9yOiAicmdiYSgxNzAsIDAsIDAsIDAuODApIiwKLSAgICAgICAg
ICAgIGxpbmVXaWR0aDogMQotICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBmdW5jdGlvbiBp
bml0KHBsb3QpIHsKLSAgICAgICAgLy8gcG9zaXRpb24gb2YgY3Jvc3NoYWlyIGluIHBpeGVscwot
ICAgICAgICB2YXIgY3Jvc3NoYWlyID0geyB4OiAtMSwgeTogLTEsIGxvY2tlZDogZmFsc2UgfTsK
LQotICAgICAgICBwbG90LnNldENyb3NzaGFpciA9IGZ1bmN0aW9uIHNldENyb3NzaGFpcihwb3Mp
IHsKLSAgICAgICAgICAgIGlmICghcG9zKQotICAgICAgICAgICAgICAgIGNyb3NzaGFpci54ID0g
LTE7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgbyA9IHBsb3QucDJj
KHBvcyk7Ci0gICAgICAgICAgICAgICAgY3Jvc3NoYWlyLnggPSBNYXRoLm1heCgwLCBNYXRoLm1p
bihvLmxlZnQsIHBsb3Qud2lkdGgoKSkpOwotICAgICAgICAgICAgICAgIGNyb3NzaGFpci55ID0g
TWF0aC5tYXgoMCwgTWF0aC5taW4oby50b3AsIHBsb3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgp
OwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgcGxvdC5jbGVhckNyb3NzaGFpciA9IHBs
b3Quc2V0Q3Jvc3NoYWlyOyAvLyBwYXNzZXMgbnVsbCBmb3IgcG9zCi0gICAgICAgIAotICAgICAg
ICBwbG90LmxvY2tDcm9zc2hhaXIgPSBmdW5jdGlvbiBsb2NrQ3Jvc3NoYWlyKHBvcykgewotICAg
ICAgICAgICAgaWYgKHBvcykKLSAgICAgICAgICAgICAgICBwbG90LnNldENyb3NzaGFpcihwb3Mp
OwotICAgICAgICAgICAgY3Jvc3NoYWlyLmxvY2tlZCA9IHRydWU7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgcGxvdC51bmxvY2tDcm9zc2hhaXIgPSBmdW5jdGlvbiB1bmxvY2tDcm9zc2hhaXIoKSB7
Ci0gICAgICAgICAgICBjcm9zc2hhaXIubG9ja2VkID0gZmFsc2U7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgZnVuY3Rpb24gb25Nb3VzZU91dChlKSB7Ci0gICAgICAgICAgICBpZiAoY3Jvc3NoYWly
LmxvY2tlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChjcm9z
c2hhaXIueCAhPSAtMSkgewotICAgICAgICAgICAgICAgIGNyb3NzaGFpci54ID0gLTE7Ci0gICAg
ICAgICAgICAgICAgcGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkgewotICAgICAgICAg
ICAgaWYgKGNyb3NzaGFpci5sb2NrZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHBsb3QuZ2V0U2VsZWN0aW9uICYmIHBsb3QuZ2V0
U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBjcm9zc2hhaXIueCA9IC0xOyAvLyBoaWRl
IHRoZSBjcm9zc2hhaXIgd2hpbGUgc2VsZWN0aW5nCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIG9mZnNldCA9
IHBsb3Qub2Zmc2V0KCk7Ci0gICAgICAgICAgICBjcm9zc2hhaXIueCA9IE1hdGgubWF4KDAsIE1h
dGgubWluKGUucGFnZVggLSBvZmZzZXQubGVmdCwgcGxvdC53aWR0aCgpKSk7Ci0gICAgICAgICAg
ICBjcm9zc2hhaXIueSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGUucGFnZVkgLSBvZmZzZXQudG9w
LCBwbG90LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBwbG90LnRyaWdnZXJSZWRyYXdPdmVybGF5
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBsb3QuaG9va3MuYmluZEV2ZW50cy5w
dXNoKGZ1bmN0aW9uIChwbG90LCBldmVudEhvbGRlcikgewotICAgICAgICAgICAgaWYgKCFwbG90
LmdldE9wdGlvbnMoKS5jcm9zc2hhaXIubW9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlb3V0KG9uTW91c2VPdXQpOwotICAgICAgICAg
ICAgZXZlbnRIb2xkZXIubW91c2Vtb3ZlKG9uTW91c2VNb3ZlKTsKLSAgICAgICAgfSk7Ci0KLSAg
ICAgICAgcGxvdC5ob29rcy5kcmF3T3ZlcmxheS5wdXNoKGZ1bmN0aW9uIChwbG90LCBjdHgpIHsK
LSAgICAgICAgICAgIHZhciBjID0gcGxvdC5nZXRPcHRpb25zKCkuY3Jvc3NoYWlyOwotICAgICAg
ICAgICAgaWYgKCFjLm1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICB2YXIgcGxvdE9mZnNldCA9IHBsb3QuZ2V0UGxvdE9mZnNldCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShwbG90T2Zm
c2V0LmxlZnQsIHBsb3RPZmZzZXQudG9wKTsKLQotICAgICAgICAgICAgaWYgKGNyb3NzaGFpci54
ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFkaiA9IHBsb3QuZ2V0T3B0aW9ucygpLmNy
b3NzaGFpci5saW5lV2lkdGggJSAyID09PSAwID8gMCA6IDAuNTsKLQotICAgICAgICAgICAgICAg
IGN0eC5zdHJva2VTdHlsZSA9IGMuY29sb3I7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0
aCA9IGMubGluZVdpZHRoOwotICAgICAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9ICJyb3VuZCI7
Ci0KLSAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGMubW9kZS5pbmRleE9mKCJ4IikgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRy
YXdYID0gTWF0aC5yb3VuZChjcm9zc2hhaXIueCkgKyBhZGo7Ci0gICAgICAgICAgICAgICAgICAg
IGN0eC5tb3ZlVG8oZHJhd1gsIDApOwotICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKGRy
YXdYLCBwbG90LmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKGMubW9kZS5pbmRleE9mKCJ5IikgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGRyYXdZID0gTWF0aC5yb3VuZChjcm9zc2hhaXIueSkgKyBhZGo7Ci0gICAgICAgICAgICAgICAg
ICAgIGN0eC5tb3ZlVG8oMCwgZHJhd1kpOwotICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRv
KHBsb3Qud2lkdGgoKSwgZHJhd1kpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgucmVzdG9yZSgp
OwotICAgICAgICB9KTsKLQotICAgICAgICBwbG90Lmhvb2tzLnNodXRkb3duLnB1c2goZnVuY3Rp
b24gKHBsb3QsIGV2ZW50SG9sZGVyKSB7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQo
Im1vdXNlb3V0Iiwgb25Nb3VzZU91dCk7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQo
Im1vdXNlbW92ZSIsIG9uTW91c2VNb3ZlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotICAgIAotICAg
ICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRp
b25zOiBvcHRpb25zLAotICAgICAgICBuYW1lOiAnY3Jvc3NoYWlyJywKLSAgICAgICAgdmVyc2lv
bjogJzEuMCcKLSAgICB9KTsKLX0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmVycm9yYmFycy5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuZXJyb3JiYXJzLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjc0YTBkOTdkZTczNDhiM2U3Mzk4YTVlYjBkNGE1
MjNiYzExOWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuZXJyb3JiYXJz
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLS8qIEZsb3QgcGx1Z2luIGZvciBw
bG90dGluZyBlcnJvciBiYXJzLgotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBP
bGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQotRXJyb3IgYmFy
cyBhcmUgdXNlZCB0byBzaG93IHN0YW5kYXJkIGRldmlhdGlvbiBhbmQgb3RoZXIgc3RhdGlzdGlj
YWwKLXByb3BlcnRpZXMgaW4gYSBwbG90LgotCi0qIENyZWF0ZWQgYnkgUnVpIFBlcmVpcmEgIC0g
IHJ1aSAoZG90KSBwZXJlaXJhIChhdCkgZ21haWwgKGRvdCkgY29tCi0KLVRoaXMgcGx1Z2luIGFs
bG93cyB5b3UgdG8gcGxvdCBlcnJvci1iYXJzIG92ZXIgcG9pbnRzLiBTZXQgImVycm9yYmFycyIg
aW5zaWRlCi10aGUgcG9pbnRzIHNlcmllcyB0byB0aGUgYXhpcyBuYW1lIG92ZXIgd2hpY2ggdGhl
cmUgd2lsbCBiZSBlcnJvciB2YWx1ZXMgaW4KLXlvdXIgZGF0YSBhcnJheSAoKmV2ZW4qIGlmIHlv
dSBkbyBub3QgaW50ZW5kIHRvIHBsb3QgdGhlbSBsYXRlciwgYnkgc2V0dGluZwotInNob3c6IG51
bGwiIG9uIHhlcnIveWVycikuCi0KLVRoZSBwbHVnaW4gc3VwcG9ydHMgdGhlc2Ugb3B0aW9uczoK
LQotICAgIHNlcmllczogewotICAgICAgICBwb2ludHM6IHsKLSAgICAgICAgICAgIGVycm9yYmFy
czogIngiIG9yICJ5IiBvciAieHkiLAotICAgICAgICAgICAgeGVycjogewotICAgICAgICAgICAg
ICAgIHNob3c6IG51bGwvZmFsc2Ugb3IgdHJ1ZSwKLSAgICAgICAgICAgICAgICBhc3ltbWV0cmlj
OiBudWxsL2ZhbHNlIG9yIHRydWUsCi0gICAgICAgICAgICAgICAgdXBwZXJDYXA6IG51bGwgb3Ig
Ii0iIG9yIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgIGxvd2VyQ2FwOiBudWxsIG9yICItIiBv
ciBmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICBjb2xvcjogbnVsbCBvciBjb2xvciwKLSAgICAg
ICAgICAgICAgICByYWRpdXM6IG51bGwgb3IgbnVtYmVyCi0gICAgICAgICAgICB9LAotICAgICAg
ICAgICAgeWVycjogeyBzYW1lIG9wdGlvbnMgYXMgeGVyciB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LUVhY2ggZGF0YSBwb2ludCBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiB0aGUgdHlwZToKLQot
ICAgICJ4IiAgWyB4LCB5LCB4ZXJyIF0KLSAgICAieSIgIFsgeCwgeSwgeWVyciBdCi0gICAgInh5
IiBbIHgsIHksIHhlcnIsIHllcnIgXQotCi1XaGVyZSB4ZXJyIGJlY29tZXMgeGVycl9sb3dlcix4
ZXJyX3VwcGVyIGZvciB0aGUgYXN5bW1ldHJpYyBlcnJvciBjYXNlLCBhbmQKLWVxdWl2YWxlbnRs
eSBmb3IgeWVyci4gRWcuLCBhIGRhdGFwb2ludCBmb3IgdGhlICJ4eSIgY2FzZSB3aXRoIHN5bW1l
dHJpYwotZXJyb3ItYmFycyBvbiBYIGFuZCBhc3ltbWV0cmljIG9uIFkgd291bGQgYmU6Ci0KLSAg
ICBbIHgsIHksIHhlcnIsIHllcnJfbG93ZXIsIHllcnJfdXBwZXIgXQotCi1CeSBkZWZhdWx0IG5v
IGVuZCBjYXBzIGFyZSBkcmF3bi4gU2V0dGluZyB1cHBlckNhcCBhbmQvb3IgbG93ZXJDYXAgdG8g
Ii0iIHdpbGwKLWRyYXcgYSBzbWFsbCBjYXAgcGVycGVuZGljdWxhciB0byB0aGUgZXJyb3IgYmFy
LiBUaGV5IGNhbiBhbHNvIGJlIHNldCB0byBhCi11c2VyLWRlZmluZWQgZHJhd2luZyBmdW5jdGlv
biwgd2l0aCAoY3R4LCB4LCB5LCByYWRpdXMpIGFzIHBhcmFtZXRlcnMsIGFzIGVnLgotCi0gICAg
ZnVuY3Rpb24gZHJhd1NlbWlDaXJjbGUoIGN0eCwgeCwgeSwgcmFkaXVzICkgewotICAgICAgICBj
dHguYmVnaW5QYXRoKCk7Ci0gICAgICAgIGN0eC5hcmMoIHgsIHksIHJhZGl1cywgMCwgTWF0aC5Q
SSwgZmFsc2UgKTsKLSAgICAgICAgY3R4Lm1vdmVUbyggeCAtIHJhZGl1cywgeSApOwotICAgICAg
ICBjdHgubGluZVRvKCB4ICsgcmFkaXVzLCB5ICk7Ci0gICAgICAgIGN0eC5zdHJva2UoKTsKLSAg
ICB9Ci0KLUNvbG9yIGFuZCByYWRpdXMgYm90aCBkZWZhdWx0IHRvIHRoZSBzYW1lIG9uZXMgb2Yg
dGhlIHBvaW50cyBzZXJpZXMgaWYgbm90Ci1zZXQuIFRoZSBpbmRlcGVuZGVudCByYWRpdXMgcGFy
YW1ldGVyIG9uIHhlcnIveWVyciBpcyB1c2VmdWwgZm9yIHRoZSBjYXNlIHdoZW4KLXdlIG1heSB3
YW50IHRvIGFkZCBlcnJvci1iYXJzIHRvIGEgbGluZSwgd2l0aG91dCBzaG93aW5nIHRoZSBpbnRl
cmNvbm5lY3RpbmcKLXBvaW50cyAod2l0aCByYWRpdXM6IDApLCBhbmQgc3RpbGwgc2hvd2luZyBl
bmQgY2FwcyBvbiB0aGUgZXJyb3ItYmFycy4KLXNoYWRvd1NpemUgYW5kIGxpbmVXaWR0aCBhcmUg
ZGVyaXZlZCBhcyB3ZWxsIGZyb20gdGhlIHBvaW50cyBzZXJpZXMuCi0KLSovCi0KLShmdW5jdGlv
biAoJCkgewotICAgIHZhciBvcHRpb25zID0gewotICAgICAgICBzZXJpZXM6IHsKLSAgICAgICAg
ICAgIHBvaW50czogewotICAgICAgICAgICAgICAgIGVycm9yYmFyczogbnVsbCwgLy9zaG91bGQg
YmUgJ3gnLCAneScgb3IgJ3h5JwotICAgICAgICAgICAgICAgIHhlcnI6IHsgZXJyOiAneCcsIHNo
b3c6IG51bGwsIGFzeW1tZXRyaWM6IG51bGwsIHVwcGVyQ2FwOiBudWxsLCBsb3dlckNhcDogbnVs
bCwgY29sb3I6IG51bGwsIHJhZGl1czogbnVsbH0sCi0gICAgICAgICAgICAgICAgeWVycjogeyBl
cnI6ICd5Jywgc2hvdzogbnVsbCwgYXN5bW1ldHJpYzogbnVsbCwgdXBwZXJDYXA6IG51bGwsIGxv
d2VyQ2FwOiBudWxsLCBjb2xvcjogbnVsbCwgcmFkaXVzOiBudWxsfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIGZ1bmN0aW9uIHByb2Nlc3NSYXdEYXRhKHBsb3QsIHNl
cmllcywgZGF0YSwgZGF0YXBvaW50cyl7Ci0gICAgICAgIGlmICghc2VyaWVzLnBvaW50cy5lcnJv
cmJhcnMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8geCx5IHZhbHVlcwotICAg
ICAgICB2YXIgZm9ybWF0ID0gWwotICAgICAgICAgICAgeyB4OiB0cnVlLCBudW1iZXI6IHRydWUs
IHJlcXVpcmVkOiB0cnVlIH0sCi0gICAgICAgICAgICB7IHk6IHRydWUsIG51bWJlcjogdHJ1ZSwg
cmVxdWlyZWQ6IHRydWUgfQotICAgICAgICBdOwotCi0gICAgICAgIHZhciBlcnJvcnMgPSBzZXJp
ZXMucG9pbnRzLmVycm9yYmFyczsKLSAgICAgICAgLy8gZXJyb3IgYmFycyAtIGZpcnN0IFggdGhl
biBZCi0gICAgICAgIGlmIChlcnJvcnMgPT0gJ3gnIHx8IGVycm9ycyA9PSAneHknKSB7Ci0gICAg
ICAgICAgICAvLyBsb3dlciAvIHVwcGVyIGVycm9yCi0gICAgICAgICAgICBpZiAoc2VyaWVzLnBv
aW50cy54ZXJyLmFzeW1tZXRyaWMpIHsKLSAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHg6
IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7Ci0gICAgICAgICAgICAgICAg
Zm9ybWF0LnB1c2goeyB4OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0LnB1c2goeyB4OiB0cnVl
LCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChlcnJvcnMgPT0gJ3knIHx8IGVycm9ycyA9PSAneHknKSB7Ci0gICAgICAgICAgICAvLyBsb3dl
ciAvIHVwcGVyIGVycm9yCi0gICAgICAgICAgICBpZiAoc2VyaWVzLnBvaW50cy55ZXJyLmFzeW1t
ZXRyaWMpIHsKLSAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHk6IHRydWUsIG51bWJlcjog
dHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7Ci0gICAgICAgICAgICAgICAgZm9ybWF0LnB1c2goeyB5
OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0LnB1c2goeyB5OiB0cnVlLCBudW1iZXI6IHRydWUs
IHJlcXVpcmVkOiB0cnVlIH0pOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFwb2ludHMuZm9ybWF0
ID0gZm9ybWF0OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlRXJyb3JzKHNlcmllcywgaSl7
Ci0KLSAgICAgICAgdmFyIHBvaW50cyA9IHNlcmllcy5kYXRhcG9pbnRzLnBvaW50czsKLQotICAg
ICAgICAvLyByZWFkIGVycm9ycyBmcm9tIHBvaW50cyBhcnJheQotICAgICAgICB2YXIgZXhsID0g
bnVsbCwKLSAgICAgICAgICAgICAgICBleHUgPSBudWxsLAotICAgICAgICAgICAgICAgIGV5bCA9
IG51bGwsCi0gICAgICAgICAgICAgICAgZXl1ID0gbnVsbDsKLSAgICAgICAgdmFyIHhlcnIgPSBz
ZXJpZXMucG9pbnRzLnhlcnIsCi0gICAgICAgICAgICAgICAgeWVyciA9IHNlcmllcy5wb2ludHMu
eWVycjsKLQotICAgICAgICB2YXIgZWIgPSBzZXJpZXMucG9pbnRzLmVycm9yYmFyczsKLSAgICAg
ICAgLy8gZXJyb3IgYmFycyAtIGZpcnN0IFgKLSAgICAgICAgaWYgKGViID09ICd4JyB8fCBlYiA9
PSAneHknKSB7Ci0gICAgICAgICAgICBpZiAoeGVyci5hc3ltbWV0cmljKSB7Ci0gICAgICAgICAg
ICAgICAgZXhsID0gcG9pbnRzW2kgKyAyXTsKLSAgICAgICAgICAgICAgICBleHUgPSBwb2ludHNb
aSArIDNdOwotICAgICAgICAgICAgICAgIGlmIChlYiA9PSAneHknKQotICAgICAgICAgICAgICAg
ICAgICBpZiAoeWVyci5hc3ltbWV0cmljKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV5bCA9
IHBvaW50c1tpICsgNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBleXUgPSBwb2ludHNbaSAr
IDVdOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZXlsID0gcG9pbnRzW2kgKyA0XTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXhsID0gcG9pbnRzW2kgKyAyXTsK
LSAgICAgICAgICAgICAgICBpZiAoZWIgPT0gJ3h5JykKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHllcnIuYXN5bW1ldHJpYykgewotICAgICAgICAgICAgICAgICAgICAgICAgZXlsID0gcG9pbnRz
W2kgKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV5dSA9IHBvaW50c1tpICsgNF07Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBleWwgPSBwb2ludHNbaSArIDNdOwotICAgICAgICAg
ICAgfQotICAgICAgICAvLyBvbmx5IFkKLSAgICAgICAgfSBlbHNlIGlmIChlYiA9PSAneScpCi0g
ICAgICAgICAgICBpZiAoeWVyci5hc3ltbWV0cmljKSB7Ci0gICAgICAgICAgICAgICAgZXlsID0g
cG9pbnRzW2kgKyAyXTsKLSAgICAgICAgICAgICAgICBleXUgPSBwb2ludHNbaSArIDNdOwotICAg
ICAgICAgICAgfSBlbHNlIGV5bCA9IHBvaW50c1tpICsgMl07Ci0KLSAgICAgICAgLy8gc3ltbWV0
cmljIGVycm9ycz8KLSAgICAgICAgaWYgKGV4dSA9PSBudWxsKSBleHUgPSBleGw7Ci0gICAgICAg
IGlmIChleXUgPT0gbnVsbCkgZXl1ID0gZXlsOwotCi0gICAgICAgIHZhciBlcnJSYW5nZXMgPSBb
ZXhsLCBleHUsIGV5bCwgZXl1XTsKLSAgICAgICAgLy8gbnVsbGlmeSBpZiBub3Qgc2hvd2luZwot
ICAgICAgICBpZiAoIXhlcnIuc2hvdyl7Ci0gICAgICAgICAgICBlcnJSYW5nZXNbMF0gPSBudWxs
OwotICAgICAgICAgICAgZXJyUmFuZ2VzWzFdID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIXllcnIuc2hvdyl7Ci0gICAgICAgICAgICBlcnJSYW5nZXNbMl0gPSBudWxsOwotICAgICAg
ICAgICAgZXJyUmFuZ2VzWzNdID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXJy
UmFuZ2VzOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGRyYXdTZXJpZXNFcnJvcnMocGxvdCwgY3R4
LCBzKXsKLQotICAgICAgICB2YXIgcG9pbnRzID0gcy5kYXRhcG9pbnRzLnBvaW50cywKLSAgICAg
ICAgICAgICAgICBwcyA9IHMuZGF0YXBvaW50cy5wb2ludHNpemUsCi0gICAgICAgICAgICAgICAg
YXggPSBbcy54YXhpcywgcy55YXhpc10sCi0gICAgICAgICAgICAgICAgcmFkaXVzID0gcy5wb2lu
dHMucmFkaXVzLAotICAgICAgICAgICAgICAgIGVyciA9IFtzLnBvaW50cy54ZXJyLCBzLnBvaW50
cy55ZXJyXTsKLQotICAgICAgICAvL3Nhbml0eSBjaGVjaywgaW4gY2FzZSBzb21lIGludmVydGVk
IGF4aXMgaGFjayBpcyBhcHBsaWVkIHRvIGZsb3QKLSAgICAgICAgdmFyIGludmVydFggPSBmYWxz
ZTsKLSAgICAgICAgaWYgKGF4WzBdLnAyYyhheFswXS5tYXgpIDwgYXhbMF0ucDJjKGF4WzBdLm1p
bikpIHsKLSAgICAgICAgICAgIGludmVydFggPSB0cnVlOwotICAgICAgICAgICAgdmFyIHRtcCA9
IGVyclswXS5sb3dlckNhcDsKLSAgICAgICAgICAgIGVyclswXS5sb3dlckNhcCA9IGVyclswXS51
cHBlckNhcDsKLSAgICAgICAgICAgIGVyclswXS51cHBlckNhcCA9IHRtcDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBpbnZlcnRZID0gZmFsc2U7Ci0gICAgICAgIGlmIChheFsxXS5wMmMoYXhb
MV0ubWluKSA8IGF4WzFdLnAyYyhheFsxXS5tYXgpKSB7Ci0gICAgICAgICAgICBpbnZlcnRZID0g
dHJ1ZTsKLSAgICAgICAgICAgIHZhciB0bXAgPSBlcnJbMV0ubG93ZXJDYXA7Ci0gICAgICAgICAg
ICBlcnJbMV0ubG93ZXJDYXAgPSBlcnJbMV0udXBwZXJDYXA7Ci0gICAgICAgICAgICBlcnJbMV0u
dXBwZXJDYXAgPSB0bXA7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHMuZGF0YXBvaW50cy5wb2ludHMubGVuZ3RoOyBpICs9IHBzKSB7Ci0KLSAgICAgICAgICAgIC8v
cGFyc2UKLSAgICAgICAgICAgIHZhciBlcnJSYW5nZXMgPSBwYXJzZUVycm9ycyhzLCBpKTsKLQot
ICAgICAgICAgICAgLy9jeWNsZSB4ZXJyICYgeWVycgotICAgICAgICAgICAgZm9yICh2YXIgZSA9
IDA7IGUgPCBlcnIubGVuZ3RoOyBlKyspewotCi0gICAgICAgICAgICAgICAgdmFyIG1pbm1heCA9
IFtheFtlXS5taW4sIGF4W2VdLm1heF07Ci0KLSAgICAgICAgICAgICAgICAvL2RyYXcgdGhpcyBl
cnJvcj8KLSAgICAgICAgICAgICAgICBpZiAoZXJyUmFuZ2VzW2UgKiBlcnIubGVuZ3RoXSl7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy9kYXRhIGNvb3JkaW5hdGVzCi0gICAgICAgICAgICAgICAg
ICAgIHZhciB4ID0gcG9pbnRzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHBvaW50
c1tpICsgMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9lcnJvcmJhciByYW5nZXMKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHVwcGVyID0gW3gsIHldW2VdICsgZXJyUmFuZ2VzW2UgKiBlcnIu
bGVuZ3RoICsgMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBsb3dlciA9IFt4LCB5XVtlXSAt
IGVyclJhbmdlc1tlICogZXJyLmxlbmd0aF07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9wb2lu
dHMgb3V0c2lkZSBvZiB0aGUgY2FudmFzCi0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJbZV0u
ZXJyID09ICd4JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID4gYXhbMV0ubWF4IHx8
IHkgPCBheFsxXS5taW4gfHwgdXBwZXIgPCBheFswXS5taW4gfHwgbG93ZXIgPiBheFswXS5tYXgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChlcnJbZV0uZXJyID09ICd5JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4
ID4gYXhbMF0ubWF4IHx8IHggPCBheFswXS5taW4gfHwgdXBwZXIgPCBheFsxXS5taW4gfHwgbG93
ZXIgPiBheFsxXS5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBlcnJvcmJhcnMgZ2V0dGluZyBvdXQgb2Yg
dGhlIGNhbnZhcwotICAgICAgICAgICAgICAgICAgICB2YXIgZHJhd1VwcGVyID0gdHJ1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRyYXdMb3dlciA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHVwcGVyID4gbWlubWF4WzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
cmF3VXBwZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gbWlubWF4
WzFdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsb3dl
ciA8IG1pbm1heFswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xvd2VyID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb3dlciA9IG1pbm1heFswXTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vc2FuaXR5IGNoZWNrLCBpbiBj
YXNlIHNvbWUgaW52ZXJ0ZWQgYXhpcyBoYWNrIGlzIGFwcGxpZWQgdG8gZmxvdAotICAgICAgICAg
ICAgICAgICAgICBpZiAoKGVycltlXS5lcnIgPT0gJ3gnICYmIGludmVydFgpIHx8IChlcnJbZV0u
ZXJyID09ICd5JyAmJiBpbnZlcnRZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9zd2Fw
IGNvb3JkaW5hdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gbG93ZXI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsb3dlciA9IHVwcGVyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdXBwZXIgPSB0bXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBkcmF3TG93
ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3TG93ZXIgPSBkcmF3VXBwZXI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkcmF3VXBwZXIgPSB0bXA7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0bXAgPSBtaW5tYXhbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW5tYXhbMF0g
PSBtaW5tYXhbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW5tYXhbMV0gPSB0bXA7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRv
IHBpeGVscwotICAgICAgICAgICAgICAgICAgICB4ID0gYXhbMF0ucDJjKHgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgeSA9IGF4WzFdLnAyYyh5KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVwcGVyID0gYXhbZV0ucDJjKHVwcGVyKTsKLSAgICAgICAgICAgICAgICAgICAgbG93ZXIgPSBh
eFtlXS5wMmMobG93ZXIpOwotICAgICAgICAgICAgICAgICAgICBtaW5tYXhbMF0gPSBheFtlXS5w
MmMobWlubWF4WzBdKTsKLSAgICAgICAgICAgICAgICAgICAgbWlubWF4WzFdID0gYXhbZV0ucDJj
KG1pbm1heFsxXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9zYW1lIHN0eWxlIGFzIHBvaW50
cyBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsdyA9IGVycltlXS5saW5lV2lk
dGggPyBlcnJbZV0ubGluZVdpZHRoIDogcy5wb2ludHMubGluZVdpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3cgPSBzLnBvaW50cy5zaGFkb3dTaXplICE9IG51bGwgPyBzLnBvaW50cy5z
aGFkb3dTaXplIDogcy5zaGFkb3dTaXplOwotCi0gICAgICAgICAgICAgICAgICAgIC8vc2hhZG93
IGFzIGZvciBwb2ludHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKGx3ID4gMCAmJiBzdyA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gc3cgLyAyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dHguc3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjEpIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdFcnJvcihjdHgsIGVycltlXSwgeCwgeSwgdXBwZXIsIGxvd2VyLCBkcmF3VXBwZXIs
IGRyYXdMb3dlciwgcmFkaXVzLCB3ICsgdy8yLCBtaW5tYXgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjIpIjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRyYXdFcnJvcihjdHgsIGVycltlXSwgeCwgeSwgdXBwZXIsIGxvd2VyLCBk
cmF3VXBwZXIsIGRyYXdMb3dlciwgcmFkaXVzLCB3LzIsIG1pbm1heCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBlcnJbZV0u
Y29sb3I/IGVycltlXS5jb2xvcjogcy5jb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgY3R4Lmxp
bmVXaWR0aCA9IGx3OwotICAgICAgICAgICAgICAgICAgICAvL2RyYXcgaXQKLSAgICAgICAgICAg
ICAgICAgICAgZHJhd0Vycm9yKGN0eCwgZXJyW2VdLCB4LCB5LCB1cHBlciwgbG93ZXIsIGRyYXdV
cHBlciwgZHJhd0xvd2VyLCByYWRpdXMsIDAsIG1pbm1heCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZHJhd0Vycm9y
KGN0eCxlcnIseCx5LHVwcGVyLGxvd2VyLGRyYXdVcHBlcixkcmF3TG93ZXIscmFkaXVzLG9mZnNl
dCxtaW5tYXgpewotCi0gICAgICAgIC8vc2hhZG93IG9mZnNldAotICAgICAgICB5ICs9IG9mZnNl
dDsKLSAgICAgICAgdXBwZXIgKz0gb2Zmc2V0OwotICAgICAgICBsb3dlciArPSBvZmZzZXQ7Ci0K
LSAgICAgICAgLy8gZXJyb3IgYmFyIC0gYXZvaWQgcGxvdHRpbmcgb3ZlciBjaXJjbGVzCi0gICAg
ICAgIGlmIChlcnIuZXJyID09ICd4Jyl7Ci0gICAgICAgICAgICBpZiAodXBwZXIgPiB4ICsgcmFk
aXVzKSBkcmF3UGF0aChjdHgsIFtbdXBwZXIseV0sW01hdGgubWF4KHggKyByYWRpdXMsbWlubWF4
WzBdKSx5XV0pOwotICAgICAgICAgICAgZWxzZSBkcmF3VXBwZXIgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGlmIChsb3dlciA8IHggLSByYWRpdXMpIGRyYXdQYXRoKGN0eCwgW1tNYXRoLm1pbih4IC0g
cmFkaXVzLG1pbm1heFsxXSkseV0sW2xvd2VyLHldXSApOwotICAgICAgICAgICAgZWxzZSBkcmF3
TG93ZXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlm
ICh1cHBlciA8IHkgLSByYWRpdXMpIGRyYXdQYXRoKGN0eCwgW1t4LHVwcGVyXSxbeCxNYXRoLm1p
bih5IC0gcmFkaXVzLG1pbm1heFswXSldXSApOwotICAgICAgICAgICAgZWxzZSBkcmF3VXBwZXIg
PSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChsb3dlciA+IHkgKyByYWRpdXMpIGRyYXdQYXRoKGN0
eCwgW1t4LE1hdGgubWF4KHkgKyByYWRpdXMsbWlubWF4WzFdKV0sW3gsbG93ZXJdXSApOwotICAg
ICAgICAgICAgZWxzZSBkcmF3TG93ZXIgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
aW50ZXJuYWwgcmFkaXVzIHZhbHVlIGluIGVycm9yYmFyLCBhbGxvd3MgdG8gcGxvdCByYWRpdXMg
MCBwb2ludHMgYW5kIHN0aWxsIGtlZXAgcHJvcGVyIHNpemVkIGNhcHMKLSAgICAgICAgLy90aGlz
IGlzIGEgd2F5IHRvIGdldCBlcnJvcmJhcnMgb24gbGluZXMgd2l0aG91dCB2aXNpYmxlIGNvbm5l
Y3RpbmcgZG90cwotICAgICAgICByYWRpdXMgPSBlcnIucmFkaXVzICE9IG51bGw/IGVyci5yYWRp
dXM6IHJhZGl1czsKLQotICAgICAgICAvLyB1cHBlciBjYXAKLSAgICAgICAgaWYgKGRyYXdVcHBl
cikgewotICAgICAgICAgICAgaWYgKGVyci51cHBlckNhcCA9PSAnLScpewotICAgICAgICAgICAg
ICAgIGlmIChlcnIuZXJyPT0neCcpIGRyYXdQYXRoKGN0eCwgW1t1cHBlcix5IC0gcmFkaXVzXSxb
dXBwZXIseSArIHJhZGl1c11dICk7Ci0gICAgICAgICAgICAgICAgZWxzZSBkcmF3UGF0aChjdHgs
IFtbeCAtIHJhZGl1cyx1cHBlcl0sW3ggKyByYWRpdXMsdXBwZXJdXSApOwotICAgICAgICAgICAg
fSBlbHNlIGlmICgkLmlzRnVuY3Rpb24oZXJyLnVwcGVyQ2FwKSl7Ci0gICAgICAgICAgICAgICAg
aWYgKGVyci5lcnI9PSd4JykgZXJyLnVwcGVyQ2FwKGN0eCwgdXBwZXIsIHksIHJhZGl1cyk7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBlcnIudXBwZXJDYXAoY3R4LCB4LCB1cHBlciwgcmFkaXVzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBsb3dlciBjYXAKLSAgICAgICAg
aWYgKGRyYXdMb3dlcikgewotICAgICAgICAgICAgaWYgKGVyci5sb3dlckNhcCA9PSAnLScpewot
ICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyPT0neCcpIGRyYXdQYXRoKGN0eCwgW1tsb3dlcix5
IC0gcmFkaXVzXSxbbG93ZXIseSArIHJhZGl1c11dICk7Ci0gICAgICAgICAgICAgICAgZWxzZSBk
cmF3UGF0aChjdHgsIFtbeCAtIHJhZGl1cyxsb3dlcl0sW3ggKyByYWRpdXMsbG93ZXJdXSApOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICgkLmlzRnVuY3Rpb24oZXJyLmxvd2VyQ2FwKSl7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVyci5lcnI9PSd4JykgZXJyLmxvd2VyQ2FwKGN0eCwgbG93ZXIsIHks
IHJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgZWxzZSBlcnIubG93ZXJDYXAoY3R4LCB4LCBsb3dl
ciwgcmFkaXVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGRyYXdQYXRoKGN0eCwgcHRzKXsKLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAg
ICBjdHgubW92ZVRvKHB0c1swXVswXSwgcHRzWzBdWzFdKTsKLSAgICAgICAgZm9yICh2YXIgcD0x
OyBwIDwgcHRzLmxlbmd0aDsgcCsrKQotICAgICAgICAgICAgY3R4LmxpbmVUbyhwdHNbcF1bMF0s
IHB0c1twXVsxXSk7Ci0gICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBkcmF3KHBsb3QsIGN0eCl7Ci0gICAgICAgIHZhciBwbG90T2Zmc2V0ID0gcGxvdC5nZXRQbG90
T2Zmc2V0KCk7Ci0KLSAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgY3R4LnRyYW5zbGF0ZShw
bG90T2Zmc2V0LmxlZnQsIHBsb3RPZmZzZXQudG9wKTsKLSAgICAgICAgJC5lYWNoKHBsb3QuZ2V0
RGF0YSgpLCBmdW5jdGlvbiAoaSwgcykgewotICAgICAgICAgICAgaWYgKHMucG9pbnRzLmVycm9y
YmFycyAmJiAocy5wb2ludHMueGVyci5zaG93IHx8IHMucG9pbnRzLnllcnIuc2hvdykpCi0gICAg
ICAgICAgICAgICAgZHJhd1Nlcmllc0Vycm9ycyhwbG90LCBjdHgsIHMpOwotICAgICAgICB9KTsK
LSAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpbml0KHBsb3Qp
IHsKLSAgICAgICAgcGxvdC5ob29rcy5wcm9jZXNzUmF3RGF0YS5wdXNoKHByb2Nlc3NSYXdEYXRh
KTsKLSAgICAgICAgcGxvdC5ob29rcy5kcmF3LnB1c2goZHJhdyk7Ci0gICAgfQotCi0gICAgJC5w
bG90LnBsdWdpbnMucHVzaCh7Ci0gICAgICAgICAgICAgICAgaW5pdDogaW5pdCwKLSAgICAgICAg
ICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICAgICAgICAgIG5hbWU6ICdlcnJvcmJh
cnMnLAotICAgICAgICAgICAgICAgIHZlcnNpb246ICcxLjAnCi0gICAgICAgICAgICB9KTsKLX0p
KGpRdWVyeSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pz
L2pxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9qcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vlbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjdjZmI0ZjllYjg0M2E5MGRlZGJhZDA5ZTA0OTQzZmFjYmFhNTNjOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qIEZsb3QgcGx1Z2luIGZvciBjb21wdXRpbmcgYm90dG9t
cyBmb3IgZmlsbGVkIGxpbmUgYW5kIGJhciBjaGFydHMuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0y
MDEyIElPTEEgYW5kIE9sZSBMYXVyc2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNl
LgotCi1UaGUgY2FzZTogeW91J3ZlIGdvdCB0d28gc2VyaWVzIHRoYXQgeW91IHdhbnQgdG8gZmls
bCB0aGUgYXJlYSBiZXR3ZWVuLiBJbiBGbG90Ci10ZXJtcywgeW91IG5lZWQgdG8gdXNlIG9uZSBh
cyB0aGUgZmlsbCBib3R0b20gb2YgdGhlIG90aGVyLiBZb3UgY2FuIHNwZWNpZnkgdGhlCi1ib3R0
b20gb2YgZWFjaCBkYXRhIHBvaW50IGFzIHRoZSB0aGlyZCBjb29yZGluYXRlIG1hbnVhbGx5LCBv
ciB5b3UgY2FuIHVzZSB0aGlzCi1wbHVnaW4gdG8gY29tcHV0ZSBpdCBmb3IgeW91LgotCi1JbiBv
cmRlciB0byBuYW1lIHRoZSBvdGhlciBzZXJpZXMsIHlvdSBuZWVkIHRvIGdpdmUgaXQgYW4gaWQs
IGxpa2UgdGhpczoKLQotICAgIHZhciBkYXRhc2V0ID0gWwotICAgICAgICB7IGRhdGE6IFsgLi4u
IF0sIGlkOiAiZm9vIiB9ICwgICAgICAgICAvLyB1c2UgZGVmYXVsdCBib3R0b20KLSAgICAgICAg
eyBkYXRhOiBbIC4uLiBdLCBmaWxsQmV0d2VlbjogImZvbyIgfSwgLy8gdXNlIGZpcnN0IGRhdGFz
ZXQgYXMgYm90dG9tCi0gICAgXTsKLQotICAgICQucGxvdCgkKCIjcGxhY2Vob2xkZXIiKSwgZGF0
YXNldCwgeyBsaW5lczogeyBzaG93OiB0cnVlLCBmaWxsOiB0cnVlIH19KTsKLQotQXMgYSBjb252
ZW5pZW5jZSwgaWYgdGhlIGlkIGdpdmVuIGlzIGEgbnVtYmVyIHRoYXQgZG9lc24ndCBhcHBlYXIg
YXMgYW4gaWQgaW4KLXRoZSBzZXJpZXMsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZSBpbmRleCBp
biB0aGUgYXJyYXkgaW5zdGVhZCAoc28gZmlsbEJldHdlZW46Ci0wIGNhbiBhbHNvIG1lYW4gdGhl
IGZpcnN0IHNlcmllcykuCi0KLUludGVybmFsbHksIHRoZSBwbHVnaW4gbW9kaWZpZXMgdGhlIGRh
dGFwb2ludHMgaW4gZWFjaCBzZXJpZXMuIEZvciBsaW5lIHNlcmllcywKLWV4dHJhIGRhdGEgcG9p
bnRzIG1pZ2h0IGJlIGluc2VydGVkIHRocm91Z2ggaW50ZXJwb2xhdGlvbi4gTm90ZSB0aGF0IGF0
IHBvaW50cwotd2hlcmUgdGhlIGJvdHRvbSBsaW5lIGlzIG5vdCBkZWZpbmVkIChkdWUgdG8gYSBu
dWxsIHBvaW50IG9yIHN0YXJ0L2VuZCBvZiBsaW5lKSwKLXRoZSBjdXJyZW50IGxpbmUgd2lsbCBz
aG93IGEgZ2FwIHRvby4gVGhlIGFsZ29yaXRobSBjb21lcyBmcm9tIHRoZQotanF1ZXJ5LmZsb3Qu
c3RhY2suanMgcGx1Z2luLCBwb3NzaWJseSBzb21lIGNvZGUgY291bGQgYmUgc2hhcmVkLgotCi0q
LwotCi0oZnVuY3Rpb24gKCAkICkgewotCi0gICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgIHNl
cmllczogewotICAgICAgICAgICAgZmlsbEJldHdlZW46IG51bGwgICAgLy8gb3IgbnVtYmVyCi0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgZnVuY3Rpb24gaW5pdCggcGxvdCApIHsKLQotICAgICAg
ICBmdW5jdGlvbiBmaW5kQm90dG9tU2VyaWVzKCBzLCBhbGxzZXJpZXMgKSB7Ci0KLSAgICAgICAg
ICAgIHZhciBpOwotCi0gICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGFsbHNlcmllcy5sZW5n
dGg7ICsraSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGFsbHNlcmllc1sgaSBdLmlkID09PSBz
LmZpbGxCZXR3ZWVuICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsc2VyaWVzWyBp
IF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IHR5cGVvZiBzLmZpbGxCZXR3ZWVuID09PSAibnVtYmVyIiApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIHMuZmlsbEJldHdlZW4gPCAwIHx8IHMuZmlsbEJldHdlZW4gPj0gYWxsc2VyaWVzLmxlbmd0
aCApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiBhbGxzZXJpZXNbIHMuZmlsbEJldHdlZW4gXTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBjb21wdXRlRmlsbEJvdHRvbXMoIHBsb3QsIHMsIGRhdGFwb2ludHMgKSB7
Ci0KLSAgICAgICAgICAgIGlmICggcy5maWxsQmV0d2VlbiA9PSBudWxsICkgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG90aGVyID0g
ZmluZEJvdHRvbVNlcmllcyggcywgcGxvdC5nZXREYXRhKCkgKTsKLQotICAgICAgICAgICAgaWYg
KCAhb3RoZXIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgcHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZSwKLSAgICAgICAgICAgICAg
ICBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywKLSAgICAgICAgICAgICAgICBvdGhlcnBzID0g
b3RoZXIuZGF0YXBvaW50cy5wb2ludHNpemUsCi0gICAgICAgICAgICAgICAgb3RoZXJwb2ludHMg
PSBvdGhlci5kYXRhcG9pbnRzLnBvaW50cywKLSAgICAgICAgICAgICAgICBuZXdwb2ludHMgPSBb
XSwKLSAgICAgICAgICAgICAgICBweCwgcHksIGludGVyeSwgcXgsIHF5LCBib3R0b20sCi0gICAg
ICAgICAgICAgICAgd2l0aGxpbmVzID0gcy5saW5lcy5zaG93LAotICAgICAgICAgICAgICAgIHdp
dGhib3R0b20gPSBwcyA+IDIgJiYgZGF0YXBvaW50cy5mb3JtYXRbMl0ueSwKLSAgICAgICAgICAg
ICAgICB3aXRoc3RlcHMgPSB3aXRobGluZXMgJiYgcy5saW5lcy5zdGVwcywKLSAgICAgICAgICAg
ICAgICBmcm9tZ2FwID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAg
ICAgICBqID0gMCwKLSAgICAgICAgICAgICAgICBsLCBtOwotCi0gICAgICAgICAgICB3aGlsZSAo
IHRydWUgKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGkgPj0gcG9pbnRzLmxlbmd0aCApIHsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbCA9IG5ld3BvaW50cy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHBv
aW50c1sgaSBdID09IG51bGwgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY29weSBnYXBz
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggbSA9IDA7IG0gPCBwczsgKyttICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sgaSArIG0gXSApOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKLQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGogPj0gb3RoZXJwb2ludHMubGVuZ3RoICkgewot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZvciBsaW5lcywgd2UgY2FuJ3QgdXNlIHRoZSByZXN0
IG9mIHRoZSBwb2ludHMKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICF3aXRobGluZXMgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMDsgbSA8IHBzOyArK20gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sgaSArIG0g
XSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKLQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIG90aGVycG9pbnRzWyBqIF0gPT0gbnVsbCApIHsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBvb3BzLCBnb3QgYSBnYXAKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMDsgbSA8
IHBzOyArK20gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVzaCggbnVs
bCApOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZnJvbWdh
cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKLQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2Ug
YWN0dWFsbHkgZ290IHR3byBwb2ludHMKLQotICAgICAgICAgICAgICAgICAgICBweCA9IHBvaW50
c1sgaSBdOwotICAgICAgICAgICAgICAgICAgICBweSA9IHBvaW50c1sgaSArIDEgXTsKLSAgICAg
ICAgICAgICAgICAgICAgcXggPSBvdGhlcnBvaW50c1sgaiBdOwotICAgICAgICAgICAgICAgICAg
ICBxeSA9IG90aGVycG9pbnRzWyBqICsgMSBdOwotICAgICAgICAgICAgICAgICAgICBib3R0b20g
PSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggcHggPT09IHF4ICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMDsgbSA8IHBzOyArK20gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goIHBvaW50c1sgaSArIG0gXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL25ld3Bv
aW50c1sgbCArIDEgXSArPSBxeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSA9IHF5
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaiArPSBvdGhlcnBzOwotCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHB4
ID4gcXggKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGdvdCBwYXN0IHBvaW50
IGJlbG93LCBtaWdodCBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
aW50ZXJwb2xhdGVkIGV4dHJhIHBvaW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
d2l0aGxpbmVzICYmIGkgPiAwICYmIHBvaW50c1sgaSAtIHBzIF0gIT0gbnVsbCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnkgPSBweSArICggcG9pbnRzWyBpIC0gcHMgKyAx
IF0gLSBweSApICogKCBxeCAtIHB4ICkgLyAoIHBvaW50c1sgaSAtIHBzIF0gLSBweCApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBxeCApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBpbnRlcnkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBtID0gMjsgbSA8IHBzOyArK20gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBwb2ludHNbIGkgKyBtIF0gKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm90dG9tID0gcXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eyAvLyBweCA8IHF4Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGNvbWUgZnJv
bSBhIGdhcCwgd2UganVzdCBza2lwIHRoaXMgcG9pbnQKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBmcm9tZ2FwICYmIHdpdGhsaW5lcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpICs9IHBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBt
ID0gMDsgbSA8IHBzOyArK20gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9p
bnRzLnB1c2goIHBvaW50c1sgaSArIG0gXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtaWdodCBiZSBhYmxlIHRvIGludGVycG9s
YXRlIGEgcG9pbnQgYmVsb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBn
aXZlIHVzIGEgYmV0dGVyIHkKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aXRobGlu
ZXMgJiYgaiA+IDAgJiYgb3RoZXJwb2ludHNbIGogLSBvdGhlcnBzIF0gIT0gbnVsbCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBxeSArICggb3RoZXJwb2ludHNbIGog
LSBvdGhlcnBzICsgMSBdIC0gcXkgKSAqICggcHggLSBxeCApIC8gKCBvdGhlcnBvaW50c1sgaiAt
IG90aGVycHMgXSAtIHF4ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbmV3cG9pbnRzW2wgKyAxXSArPSBib3R0b207Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGkgKz0gcHM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBmcm9tZ2FwID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBsICE9PSBuZXdwb2ludHMubGVuZ3RoICYmIHdpdGhib3R0b20gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuZXdwb2ludHNbIGwgKyAyIF0gPSBib3R0b207Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBtYWludGFpbiB0
aGUgbGluZSBzdGVwcyBpbnZhcmlhbnQKLQotICAgICAgICAgICAgICAgIGlmICggd2l0aHN0ZXBz
ICYmIGwgIT09IG5ld3BvaW50cy5sZW5ndGggJiYgbCA+IDAgJiYKLSAgICAgICAgICAgICAgICAg
ICAgbmV3cG9pbnRzWyBsIF0gIT09IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgbmV3cG9p
bnRzWyBsIF0gIT09IG5ld3BvaW50c1sgbCAtIHBzIF0gJiYKLSAgICAgICAgICAgICAgICAgICAg
bmV3cG9pbnRzWyBsICsgMSBdICE9PSBuZXdwb2ludHNbIGwgLSBwcyArIDEgXSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld3BvaW50c1sgbCArIHBzICsgbSBdID0gbmV3cG9pbnRzWyBsICsgbSBdOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1sgbCAr
IDEgXSA9IG5ld3BvaW50c1sgbCAtIHBzICsgMSBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZGF0YXBvaW50cy5wb2ludHMgPSBuZXdwb2ludHM7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRhcG9pbnRzLnB1c2goIGNv
bXB1dGVGaWxsQm90dG9tcyApOwotICAgIH0KLQotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewot
ICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBu
YW1lOiAiZmlsbGJldHdlZW4iLAotICAgICAgICB2ZXJzaW9uOiAiMS4wIgotICAgIH0pOwotCi19
KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9q
cy9qcXVlcnkuZmxvdC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1
ZXJ5LmZsb3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZWI0MWZiMDQ0NDc4
ZTYyMzQ3ODJiOGMyOGEzZDJhMjUxYjA1YmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVl
cnkuZmxvdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2OTEgKzAsMCBAQAotLyogSmF2YXNjcmlw
dCBwbG90dGluZyBsaWJyYXJ5IGZvciBqUXVlcnksIHZlcnNpb24gMC44IGFscGhhLgotCi1Db3B5
cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVy
IHRoZSBNSVQgbGljZW5zZS4KLQotKi8KLQotLy8gZmlyc3QgYW4gaW5saW5lIGRlcGVuZGVuY3ks
IGpxdWVyeS5jb2xvcmhlbHBlcnMuanMsIHdlIGlubGluZSBpdCBoZXJlCi0vLyBmb3IgY29udmVu
aWVuY2UKLQotLyogUGx1Z2luIGZvciBqUXVlcnkgZm9yIHdvcmtpbmcgd2l0aCBjb2xvcnMuCi0g
KgotICogVmVyc2lvbiAxLjEuCi0gKgotICogSW5zcGlyYXRpb24gZnJvbSBqUXVlcnkgY29sb3Ig
YW5pbWF0aW9uIHBsdWdpbiBieSBKb2huIFJlc2lnLgotICoKLSAqIFJlbGVhc2VkIHVuZGVyIHRo
ZSBNSVQgbGljZW5zZSBieSBPbGUgTGF1cnNlbiwgT2N0b2JlciAyMDA5LgotICoKLSAqIEV4YW1w
bGVzOgotICoKLSAqICAgJC5jb2xvci5wYXJzZSgiI2ZmZiIpLnNjYWxlKCdyZ2InLCAwLjI1KS5h
ZGQoJ2EnLCAtMC41KS50b1N0cmluZygpCi0gKiAgIHZhciBjID0gJC5jb2xvci5leHRyYWN0KCQo
IiNteWRpdiIpLCAnYmFja2dyb3VuZC1jb2xvcicpOwotICogICBjb25zb2xlLmxvZyhjLnIsIGMu
ZywgYy5iLCBjLmEpOwotICogICAkLmNvbG9yLm1ha2UoMTAwLCA1MCwgMjUsIDAuNCkudG9TdHJp
bmcoKSAvLyByZXR1cm5zICJyZ2JhKDEwMCw1MCwyNSwwLjQpIgotICoKLSAqIE5vdGUgdGhhdCAu
c2NhbGUoKSBhbmQgLmFkZCgpIHJldHVybiB0aGUgc2FtZSBtb2RpZmllZCBvYmplY3QKLSAqIGlu
c3RlYWQgb2YgbWFraW5nIGEgbmV3IG9uZS4KLSAqCi0gKiBWLiAxLjE6IEZpeCBlcnJvciBoYW5k
bGluZyBzbyBlLmcuIHBhcnNpbmcgYW4gZW1wdHkgc3RyaW5nIGRvZXMKLSAqIHByb2R1Y2UgYSBj
b2xvciByYXRoZXIgdGhhbiBqdXN0IGNyYXNoaW5nLgotICovCi0oZnVuY3Rpb24oQil7Qi5jb2xv
cj17fTtCLmNvbG9yLm1ha2U9ZnVuY3Rpb24oRixFLEMsRCl7dmFyIEc9e307Ry5yPUZ8fDA7Ry5n
PUV8fDA7Ry5iPUN8fDA7Ry5hPUQhPW51bGw/RDoxO0cuYWRkPWZ1bmN0aW9uKEosSSl7Zm9yKHZh
ciBIPTA7SDxKLmxlbmd0aDsrK0gpe0dbSi5jaGFyQXQoSCldKz1JfXJldHVybiBHLm5vcm1hbGl6
ZSgpfTtHLnNjYWxlPWZ1bmN0aW9uKEosSSl7Zm9yKHZhciBIPTA7SDxKLmxlbmd0aDsrK0gpe0db
Si5jaGFyQXQoSCldKj1JfXJldHVybiBHLm5vcm1hbGl6ZSgpfTtHLnRvU3RyaW5nPWZ1bmN0aW9u
KCl7aWYoRy5hPj0xKXtyZXR1cm4icmdiKCIrW0cucixHLmcsRy5iXS5qb2luKCIsIikrIikifWVs
c2V7cmV0dXJuInJnYmEoIitbRy5yLEcuZyxHLmIsRy5hXS5qb2luKCIsIikrIikifX07Ry5ub3Jt
YWxpemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKEosSyxJKXtyZXR1cm4gSzxKP0o6KEs+ST9JOksp
fUcucj1IKDAscGFyc2VJbnQoRy5yKSwyNTUpO0cuZz1IKDAscGFyc2VJbnQoRy5nKSwyNTUpO0cu
Yj1IKDAscGFyc2VJbnQoRy5iKSwyNTUpO0cuYT1IKDAsRy5hLDEpO3JldHVybiBHfTtHLmNsb25l
PWZ1bmN0aW9uKCl7cmV0dXJuIEIuY29sb3IubWFrZShHLnIsRy5iLEcuZyxHLmEpfTtyZXR1cm4g
Ry5ub3JtYWxpemUoKX07Qi5jb2xvci5leHRyYWN0PWZ1bmN0aW9uKEQsQyl7dmFyIEU7ZG97RT1E
LmNzcyhDKS50b0xvd2VyQ2FzZSgpO2lmKEUhPSIiJiZFIT0idHJhbnNwYXJlbnQiKXticmVha31E
PUQucGFyZW50KCl9d2hpbGUoIUIubm9kZU5hbWUoRC5nZXQoMCksImJvZHkiKSk7aWYoRT09InJn
YmEoMCwgMCwgMCwgMCkiKXtFPSJ0cmFuc3BhcmVudCJ9cmV0dXJuIEIuY29sb3IucGFyc2UoRSl9
O0IuY29sb3IucGFyc2U9ZnVuY3Rpb24oRil7dmFyIEUsQz1CLmNvbG9yLm1ha2U7aWYoRT0vcmdi
XChccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxz
KlwpLy5leGVjKEYpKXtyZXR1cm4gQyhwYXJzZUludChFWzFdLDEwKSxwYXJzZUludChFWzJdLDEw
KSxwYXJzZUludChFWzNdLDEwKSl9aWYoRT0vcmdiYVwoXHMqKFswLTldezEsM30pXHMqLFxzKihb
MC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8p
XHMqXCkvLmV4ZWMoRikpe3JldHVybiBDKHBhcnNlSW50KEVbMV0sMTApLHBhcnNlSW50KEVbMl0s
MTApLHBhcnNlSW50KEVbM10sMTApLHBhcnNlRmxvYXQoRVs0XSkpfWlmKEU9L3JnYlwoXHMqKFsw
LTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMqKFswLTldKyg/OlwuWzAtOV0rKT8pXCVccyosXHMq
KFswLTldKyg/OlwuWzAtOV0rKT8pXCVccypcKS8uZXhlYyhGKSl7cmV0dXJuIEMocGFyc2VGbG9h
dChFWzFdKSoyLjU1LHBhcnNlRmxvYXQoRVsyXSkqMi41NSxwYXJzZUZsb2F0KEVbM10pKjIuNTUp
fWlmKEU9L3JnYmFcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpc
LlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSso
PzpcLlswLTldKyk/KVxzKlwpLy5leGVjKEYpKXtyZXR1cm4gQyhwYXJzZUZsb2F0KEVbMV0pKjIu
NTUscGFyc2VGbG9hdChFWzJdKSoyLjU1LHBhcnNlRmxvYXQoRVszXSkqMi41NSxwYXJzZUZsb2F0
KEVbNF0pKX1pZihFPS8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAt
OV17Mn0pLy5leGVjKEYpKXtyZXR1cm4gQyhwYXJzZUludChFWzFdLDE2KSxwYXJzZUludChFWzJd
LDE2KSxwYXJzZUludChFWzNdLDE2KSl9aWYoRT0vIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0p
KFthLWZBLUYwLTldKS8uZXhlYyhGKSl7cmV0dXJuIEMocGFyc2VJbnQoRVsxXStFWzFdLDE2KSxw
YXJzZUludChFWzJdK0VbMl0sMTYpLHBhcnNlSW50KEVbM10rRVszXSwxNikpfXZhciBEPUIudHJp
bShGKS50b0xvd2VyQ2FzZSgpO2lmKEQ9PSJ0cmFuc3BhcmVudCIpe3JldHVybiBDKDI1NSwyNTUs
MjU1LDApfWVsc2V7RT1BW0RdfHxbMCwwLDBdO3JldHVybiBDKEVbMF0sRVsxXSxFWzJdKX19O3Zh
ciBBPXthcXVhOlswLDI1NSwyNTVdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUs
MjIwXSxibGFjazpbMCwwLDBdLGJsdWU6WzAsMCwyNTVdLGJyb3duOlsxNjUsNDIsNDJdLGN5YW46
WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtn
cmV5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJra2hha2k6WzE4OSwxODMs
MTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxk
YXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEz
OSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGZ1
Y2hzaWE6WzI1NSwwLDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxncmVlbjpbMCwxMjgsMF0saW5kaWdv
Ols3NSwwLDEzMF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxs
aWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5
OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHR5ZWxsb3c6WzI1NSwy
NTUsMjI0XSxsaW1lOlswLDI1NSwwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAs
MF0sbmF2eTpbMCwwLDEyOF0sb2xpdmU6WzEyOCwxMjgsMF0sb3JhbmdlOlsyNTUsMTY1LDBdLHBp
bms6WzI1NSwxOTIsMjAzXSxwdXJwbGU6WzEyOCwwLDEyOF0sdmlvbGV0OlsxMjgsMCwxMjhdLHJl
ZDpbMjU1LDAsMF0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sd2hpdGU6WzI1NSwyNTUsMjU1XSx5ZWxs
b3c6WzI1NSwyNTUsMF19fSkoalF1ZXJ5KTsKLQotLy8gdGhlIGFjdHVhbCBGbG90IGNvZGUKLShm
dW5jdGlvbigkKSB7Ci0gICAgZnVuY3Rpb24gUGxvdChwbGFjZWhvbGRlciwgZGF0YV8sIG9wdGlv
bnNfLCBwbHVnaW5zKSB7Ci0gICAgICAgIC8vIGRhdGEgaXMgb24gdGhlIGZvcm06Ci0gICAgICAg
IC8vICAgWyBzZXJpZXMxLCBzZXJpZXMyIC4uLiBdCi0gICAgICAgIC8vIHdoZXJlIHNlcmllcyBp
cyBlaXRoZXIganVzdCB0aGUgZGF0YSBhcyBbIFt4MSwgeTFdLCBbeDIsIHkyXSwgLi4uIF0KLSAg
ICAgICAgLy8gb3IgeyBkYXRhOiBbIFt4MSwgeTFdLCBbeDIsIHkyXSwgLi4uIF0sIGxhYmVsOiAi
c29tZSBsYWJlbCIsIC4uLiB9Ci0KLSAgICAgICAgdmFyIHNlcmllcyA9IFtdLAotICAgICAgICAg
ICAgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICAvLyB0aGUgY29sb3IgdGhlbWUgdXNlZCBm
b3IgZ3JhcGhzCi0gICAgICAgICAgICAgICAgY29sb3JzOiBbIiNlZGMyNDAiLCAiI2FmZDhmOCIs
ICIjY2I0YjRiIiwgIiM0ZGE3NGQiLCAiIzk0NDBlZCJdLAotICAgICAgICAgICAgICAgIGxlZ2Vu
ZDogewotICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLAotICAgICAgICAgICAgICAgICAg
ICBub0NvbHVtbnM6IDEsIC8vIG51bWJlciBvZiBjb2x1bXMgaW4gbGVnZW5kIHRhYmxlCi0gICAg
ICAgICAgICAgICAgICAgIGxhYmVsRm9ybWF0dGVyOiBudWxsLCAvLyBmbjogc3RyaW5nIC0+IHN0
cmluZwotICAgICAgICAgICAgICAgICAgICBsYWJlbEJveEJvcmRlckNvbG9yOiAiI2NjYyIsIC8v
IGJvcmRlciBjb2xvciBmb3IgdGhlIGxpdHRsZSBsYWJlbCBib3hlcwotICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXI6IG51bGwsIC8vIGNvbnRhaW5lciAoYXMgalF1ZXJ5IG9iamVjdCkgdG8g
cHV0IGxlZ2VuZCBpbiwgbnVsbCBtZWFucyBkZWZhdWx0IG9uIHRvcCBvZiBncmFwaAotICAgICAg
ICAgICAgICAgICAgICBwb3NpdGlvbjogIm5lIiwgLy8gcG9zaXRpb24gb2YgZGVmYXVsdCBsZWdl
bmQgY29udGFpbmVyIHdpdGhpbiBwbG90Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNSwg
Ly8gZGlzdGFuY2UgZnJvbSBncmlkIGVkZ2UgdG8gZGVmYXVsdCBsZWdlbmQgY29udGFpbmVyIHdp
dGhpbiBwbG90Ci0gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogbnVsbCwgLy8g
bnVsbCBtZWFucyBhdXRvLWRldGVjdAotICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kT3Bh
Y2l0eTogMC44NSwgLy8gc2V0IHRvIDAgdG8gYXZvaWQgYmFja2dyb3VuZAotICAgICAgICAgICAg
ICAgICAgICBzb3J0ZWQ6IG51bGwgICAgLy8gZGVmYXVsdCB0byBubyBsZWdlbmQgc29ydGluZwot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgeGF4aXM6IHsKLSAgICAgICAgICAg
ICAgICAgICAgc2hvdzogbnVsbCwgLy8gbnVsbCA9IGF1dG8tZGV0ZWN0LCB0cnVlID0gYWx3YXlz
LCBmYWxzZSA9IG5ldmVyCi0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYm90dG9tIiwg
Ly8gb3IgInRvcCIKLSAgICAgICAgICAgICAgICAgICAgbW9kZTogbnVsbCwgLy8gbnVsbCBvciAi
dGltZSIKLSAgICAgICAgICAgICAgICAgICAgdGltZXpvbmU6IG51bGwsIC8vICJicm93c2VyIiBm
b3IgbG9jYWwgdG8gdGhlIGNsaWVudCBvciB0aW1lem9uZSBmb3IgdGltZXpvbmUtanMKLSAgICAg
ICAgICAgICAgICAgICAgZm9udDogbnVsbCwgLy8gbnVsbCAoZGVyaXZlZCBmcm9tIENTUyBpbiBw
bGFjZWhvbGRlcikgb3Igb2JqZWN0IGxpa2UgeyBzaXplOiAxMSwgc3R5bGU6ICJpdGFsaWMiLCB3
ZWlnaHQ6ICJib2xkIiwgZmFtaWx5OiAic2Fucy1zZXJpZiIsIHZhcmlhbnQ6ICJzbWFsbC1jYXBz
IiB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBudWxsLCAvLyBiYXNlIGNvbG9yLCBsYWJl
bHMsIHRpY2tzCi0gICAgICAgICAgICAgICAgICAgIHRpY2tDb2xvcjogbnVsbCwgLy8gcG9zc2li
bHkgZGlmZmVyZW50IGNvbG9yIG9mIHRpY2tzLCBlLmcuICJyZ2JhKDAsMCwwLDAuMTUpIgotICAg
ICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG51bGwsIC8vIG51bGwgb3IgZjogbnVtYmVyIC0+
IG51bWJlciB0byB0cmFuc2Zvcm0gYXhpcwotICAgICAgICAgICAgICAgICAgICBpbnZlcnNlVHJh
bnNmb3JtOiBudWxsLCAvLyBpZiB0cmFuc2Zvcm0gaXMgc2V0LCB0aGlzIHNob3VsZCBiZSB0aGUg
aW52ZXJzZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICBtaW46IG51bGwsIC8vIG1pbi4g
dmFsdWUgdG8gc2hvdywgbnVsbCBtZWFucyBzZXQgYXV0b21hdGljYWxseQotICAgICAgICAgICAg
ICAgICAgICBtYXg6IG51bGwsIC8vIG1heC4gdmFsdWUgdG8gc2hvdywgbnVsbCBtZWFucyBzZXQg
YXV0b21hdGljYWxseQotICAgICAgICAgICAgICAgICAgICBhdXRvc2NhbGVNYXJnaW46IG51bGws
IC8vIG1hcmdpbiBpbiAlIHRvIGFkZCBpZiBhdXRvLXNldHRpbmcgbWluL21heAotICAgICAgICAg
ICAgICAgICAgICB0aWNrczogbnVsbCwgLy8gZWl0aGVyIFsxLCAzXSBvciBbWzEsICJhIl0sIDNd
IG9yIChmbjogYXhpcyBpbmZvIC0+IHRpY2tzKSBvciBhcHAuIG51bWJlciBvZiB0aWNrcyBmb3Ig
YXV0by10aWNrcwotICAgICAgICAgICAgICAgICAgICB0aWNrRm9ybWF0dGVyOiBudWxsLCAvLyBm
bjogbnVtYmVyIC0+IHN0cmluZwotICAgICAgICAgICAgICAgICAgICBsYWJlbFdpZHRoOiBudWxs
LCAvLyBzaXplIG9mIHRpY2sgbGFiZWxzIGluIHBpeGVscwotICAgICAgICAgICAgICAgICAgICBs
YWJlbEhlaWdodDogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZVNwYWNlOiBudWxs
LCAvLyB3aGV0aGVyIHRvIHJlc2VydmUgc3BhY2UgZXZlbiBpZiBheGlzIGlzbid0IHNob3duCi0g
ICAgICAgICAgICAgICAgICAgIHRpY2tMZW5ndGg6IG51bGwsIC8vIHNpemUgaW4gcGl4ZWxzIG9m
IHRpY2tzLCBvciAiZnVsbCIgZm9yIHdob2xlIGxpbmUKLSAgICAgICAgICAgICAgICAgICAgYWxp
Z25UaWNrc1dpdGhBeGlzOiBudWxsLCAvLyBheGlzIG51bWJlciBvciBudWxsIGZvciBubyBzeW5j
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gbW9kZSBzcGVjaWZpYyBvcHRpb25zCi0gICAgICAg
ICAgICAgICAgICAgIHRpY2tEZWNpbWFsczogbnVsbCwgLy8gbm8uIG9mIGRlY2ltYWxzLCBudWxs
IG1lYW5zIGF1dG8KLSAgICAgICAgICAgICAgICAgICAgdGlja1NpemU6IG51bGwsIC8vIG51bWJl
ciBvciBbbnVtYmVyLCAidW5pdCJdCi0gICAgICAgICAgICAgICAgICAgIG1pblRpY2tTaXplOiBu
dWxsLCAvLyBudW1iZXIgb3IgW251bWJlciwgInVuaXQiXQotICAgICAgICAgICAgICAgICAgICBt
b250aE5hbWVzOiBudWxsLCAvLyBsaXN0IG9mIG5hbWVzIG9mIG1vbnRocwotICAgICAgICAgICAg
ICAgICAgICB0aW1lZm9ybWF0OiBudWxsLCAvLyBmb3JtYXQgc3RyaW5nIHRvIHVzZQotICAgICAg
ICAgICAgICAgICAgICB0d2VsdmVIb3VyQ2xvY2s6IGZhbHNlIC8vIDEyIG9yIDI0IHRpbWUgaW4g
dGltZSBtb2RlCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB5YXhpczogewot
ICAgICAgICAgICAgICAgICAgICBhdXRvc2NhbGVNYXJnaW46IDAuMDIsCi0gICAgICAgICAgICAg
ICAgICAgIHBvc2l0aW9uOiAibGVmdCIgLy8gb3IgInJpZ2h0IgotICAgICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgeGF4ZXM6IFtdLAotICAgICAgICAgICAgICAgIHlheGVzOiBbXSwK
LSAgICAgICAgICAgICAgICBzZXJpZXM6IHsKLSAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG93OiBmYWxzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJhZGl1czogMywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogMiwg
Ly8gaW4gcGl4ZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiAiI2ZmZmZmZiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzeW1ib2w6ICJjaXJjbGUiIC8vIG9yIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBkb24ndCBwdXQgaW4gc2hvdzogZmFsc2Ugc28gd2UgY2FuIHNlZQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2hldGhlciBsaW5lcyB3ZXJlIGFjdGl2ZWx5IGRpc2FibGVk
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IDIsIC8vIGluIHBpeGVscwotICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmaWxsQ29sb3I6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGVwczogZmFsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgJ3plcm8nLCBzbyB3ZSBjYW4gbGF0ZXIg
ZGVmYXVsdCBpdHMgdmFsdWUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIHRo
YXQgb2YgdGhlICdmaWxsJyBvcHRpb24uCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgICAgIGJhcnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3c6IGZhbHNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoOiAyLCAvLyBpbiBwaXhlbHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJhcldpZHRoOiAxLCAvLyBpbiB1bml0cyBvZiB0aGUgeCBh
eGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsbENvbG9yOiBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246
ICJsZWZ0IiwgLy8gImxlZnQiLCAicmlnaHQiLCBvciAiY2VudGVyIgotICAgICAgICAgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB6ZXJv
OiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIHNoYWRv
d1NpemU6IDMsCi0gICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yOiBudWxsCi0gICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBncmlkOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNob3c6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGFib3ZlRGF0YTogZmFsc2UsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yOiAiIzU0NTQ1NCIsIC8vIHByaW1hcnkgY29sb3IgdXNl
ZCBmb3Igb3V0bGluZSBhbmQgbGFiZWxzCi0gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRD
b2xvcjogbnVsbCwgLy8gbnVsbCBmb3IgdHJhbnNwYXJlbnQsIGVsc2UgY29sb3IKLSAgICAgICAg
ICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG51bGwsIC8vIHNldCBpZiBkaWZmZXJlbnQgZnJvbSB0
aGUgZ3JpZCBjb2xvcgotICAgICAgICAgICAgICAgICAgICB0aWNrQ29sb3I6IG51bGwsIC8vIGNv
bG9yIGZvciB0aGUgdGlja3MsIGUuZy4gInJnYmEoMCwwLDAsMC4xNSkiCi0gICAgICAgICAgICAg
ICAgICAgIG1hcmdpbjogMCwgLy8gZGlzdGFuY2UgZnJvbSB0aGUgY2FudmFzIGVkZ2UgdG8gdGhl
IGdyaWQKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxNYXJnaW46IDUsIC8vIGluIHBpeGVscwot
ICAgICAgICAgICAgICAgICAgICBheGlzTWFyZ2luOiA4LCAvLyBpbiBwaXhlbHMKLSAgICAgICAg
ICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDIsIC8vIGluIHBpeGVscwotICAgICAgICAgICAgICAg
ICAgICBtaW5Cb3JkZXJNYXJnaW46IG51bGwsIC8vIGluIHBpeGVscywgbnVsbCBtZWFucyB0YWtl
biBmcm9tIHBvaW50cyByYWRpdXMKLSAgICAgICAgICAgICAgICAgICAgbWFya2luZ3M6IG51bGws
IC8vIGFycmF5IG9mIHJhbmdlcyBvciBmbjogYXhlcyAtPiBhcnJheSBvZiByYW5nZXMKLSAgICAg
ICAgICAgICAgICAgICAgbWFya2luZ3NDb2xvcjogIiNmNGY0ZjQiLAotICAgICAgICAgICAgICAg
ICAgICBtYXJraW5nc0xpbmVXaWR0aDogMiwKLSAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJh
Y3RpdmUgc3R1ZmYKLSAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiBmYWxzZSwKLSAgICAg
ICAgICAgICAgICAgICAgaG92ZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgYXV0
b0hpZ2hsaWdodDogdHJ1ZSwgLy8gaGlnaGxpZ2h0IGluIGNhc2UgbW91c2UgaXMgbmVhcgotICAg
ICAgICAgICAgICAgICAgICBtb3VzZUFjdGl2ZVJhZGl1czogMTAgLy8gaG93IGZhciB0aGUgbW91
c2UgY2FuIGJlIGF3YXkgdG8gYWN0aXZhdGUgYW4gaXRlbQotICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IHsKLSAgICAgICAgICAgICAgICAgICAgcmVkcmF3
T3ZlcmxheUludGVydmFsOiAxMDAwLzYwIC8vIHRpbWUgYmV0d2VlbiB1cGRhdGVzLCAtMSBtZWFu
cyBpbiBzYW1lIGZsb3cKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGhvb2tz
OiB7fQotICAgICAgICAgICAgfSwKLSAgICAgICAgY2FudmFzID0gbnVsbCwgICAgICAvLyB0aGUg
Y2FudmFzIGZvciB0aGUgcGxvdCBpdHNlbGYKLSAgICAgICAgb3ZlcmxheSA9IG51bGwsICAgICAv
LyBjYW52YXMgZm9yIGludGVyYWN0aXZlIHN0dWZmIG9uIHRvcCBvZiBwbG90Ci0gICAgICAgIGV2
ZW50SG9sZGVyID0gbnVsbCwgLy8galF1ZXJ5IG9iamVjdCB0aGF0IGV2ZW50cyBzaG91bGQgYmUg
Ym91bmQgdG8KLSAgICAgICAgY3R4ID0gbnVsbCwgb2N0eCA9IG51bGwsCi0gICAgICAgIHhheGVz
ID0gW10sIHlheGVzID0gW10sCi0gICAgICAgIHBsb3RPZmZzZXQgPSB7IGxlZnQ6IDAsIHJpZ2h0
OiAwLCB0b3A6IDAsIGJvdHRvbTogMH0sCi0gICAgICAgIGNhbnZhc1dpZHRoID0gMCwgY2FudmFz
SGVpZ2h0ID0gMCwKLSAgICAgICAgcGxvdFdpZHRoID0gMCwgcGxvdEhlaWdodCA9IDAsCi0gICAg
ICAgIGhvb2tzID0gewotICAgICAgICAgICAgcHJvY2Vzc09wdGlvbnM6IFtdLAotICAgICAgICAg
ICAgcHJvY2Vzc1Jhd0RhdGE6IFtdLAotICAgICAgICAgICAgcHJvY2Vzc0RhdGFwb2ludHM6IFtd
LAotICAgICAgICAgICAgcHJvY2Vzc09mZnNldDogW10sCi0gICAgICAgICAgICBkcmF3QmFja2dy
b3VuZDogW10sCi0gICAgICAgICAgICBkcmF3U2VyaWVzOiBbXSwKLSAgICAgICAgICAgIGRyYXc6
IFtdLAotICAgICAgICAgICAgYmluZEV2ZW50czogW10sCi0gICAgICAgICAgICBkcmF3T3Zlcmxh
eTogW10sCi0gICAgICAgICAgICBzaHV0ZG93bjogW10KLSAgICAgICAgfSwKLSAgICAgICAgcGxv
dCA9IHRoaXM7Ci0KLSAgICAgICAgLy8gcHVibGljIGZ1bmN0aW9ucwotICAgICAgICBwbG90LnNl
dERhdGEgPSBzZXREYXRhOwotICAgICAgICBwbG90LnNldHVwR3JpZCA9IHNldHVwR3JpZDsKLSAg
ICAgICAgcGxvdC5kcmF3ID0gZHJhdzsKLSAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlciA9IGZ1
bmN0aW9uKCkgeyByZXR1cm4gcGxhY2Vob2xkZXI7IH07Ci0gICAgICAgIHBsb3QuZ2V0Q2FudmFz
ID0gZnVuY3Rpb24oKSB7IHJldHVybiBjYW52YXM7IH07Ci0gICAgICAgIHBsb3QuZ2V0UGxvdE9m
ZnNldCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGxvdE9mZnNldDsgfTsKLSAgICAgICAgcGxvdC53
aWR0aCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBsb3RXaWR0aDsgfTsKLSAgICAgICAgcGxvdC5o
ZWlnaHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbG90SGVpZ2h0OyB9OwotICAgICAgICBwbG90
Lm9mZnNldCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBvID0gZXZlbnRIb2xkZXIu
b2Zmc2V0KCk7Ci0gICAgICAgICAgICBvLmxlZnQgKz0gcGxvdE9mZnNldC5sZWZ0OwotICAgICAg
ICAgICAgby50b3AgKz0gcGxvdE9mZnNldC50b3A7Ci0gICAgICAgICAgICByZXR1cm4gbzsKLSAg
ICAgICAgfTsKLSAgICAgICAgcGxvdC5nZXREYXRhID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2Vy
aWVzOyB9OwotICAgICAgICBwbG90LmdldEF4ZXMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgcmVzID0ge30sIGk7Ci0gICAgICAgICAgICAkLmVhY2goeGF4ZXMuY29uY2F0KHlheGVz
KSwgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXhpcykKLSAgICAg
ICAgICAgICAgICAgICAgcmVzW2F4aXMuZGlyZWN0aW9uICsgKGF4aXMubiAhPSAxID8gYXhpcy5u
IDogIiIpICsgImF4aXMiXSA9IGF4aXM7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybiByZXM7Ci0gICAgICAgIH07Ci0gICAgICAgIHBsb3QuZ2V0WEF4ZXMgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiB4YXhlczsgfTsKLSAgICAgICAgcGxvdC5nZXRZQXhlcyA9IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIHlheGVzOyB9OwotICAgICAgICBwbG90LmMycCA9IGNhbnZhc1RvQXhpc0Nvb3Jk
czsKLSAgICAgICAgcGxvdC5wMmMgPSBheGlzVG9DYW52YXNDb29yZHM7Ci0gICAgICAgIHBsb3Qu
Z2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9wdGlvbnM7IH07Ci0gICAgICAgIHBs
b3QuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0OwotICAgICAgICBwbG90LnVuaGlnaGxpZ2h0ID0gdW5o
aWdobGlnaHQ7Ci0gICAgICAgIHBsb3QudHJpZ2dlclJlZHJhd092ZXJsYXkgPSB0cmlnZ2VyUmVk
cmF3T3ZlcmxheTsKLSAgICAgICAgcGxvdC5wb2ludE9mZnNldCA9IGZ1bmN0aW9uKHBvaW50KSB7
Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGxlZnQ6IHBhcnNlSW50KHhh
eGVzW2F4aXNOdW1iZXIocG9pbnQsICJ4IikgLSAxXS5wMmMoK3BvaW50LngpICsgcGxvdE9mZnNl
dC5sZWZ0LCAxMCksCi0gICAgICAgICAgICAgICAgdG9wOiBwYXJzZUludCh5YXhlc1theGlzTnVt
YmVyKHBvaW50LCAieSIpIC0gMV0ucDJjKCtwb2ludC55KSArIHBsb3RPZmZzZXQudG9wLCAxMCkK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIHBsb3Quc2h1dGRvd24gPSBzaHV0
ZG93bjsKLSAgICAgICAgcGxvdC5yZXNpemUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBn
ZXRDYW52YXNEaW1lbnNpb25zKCk7Ci0gICAgICAgICAgICByZXNpemVDYW52YXMoY2FudmFzKTsK
LSAgICAgICAgICAgIHJlc2l6ZUNhbnZhcyhvdmVybGF5KTsKLSAgICAgICAgfTsKLQotICAgICAg
ICAvLyBwdWJsaWMgYXR0cmlidXRlcwotICAgICAgICBwbG90Lmhvb2tzID0gaG9va3M7Ci0KLSAg
ICAgICAgLy8gaW5pdGlhbGl6ZQotICAgICAgICBpbml0UGx1Z2lucyhwbG90KTsKLSAgICAgICAg
cGFyc2VPcHRpb25zKG9wdGlvbnNfKTsKLSAgICAgICAgc2V0dXBDYW52YXNlcygpOwotICAgICAg
ICBzZXREYXRhKGRhdGFfKTsKLSAgICAgICAgc2V0dXBHcmlkKCk7Ci0gICAgICAgIGRyYXcoKTsK
LSAgICAgICAgYmluZEV2ZW50cygpOwotCi0KLSAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZUhvb2tz
KGhvb2ssIGFyZ3MpIHsKLSAgICAgICAgICAgIGFyZ3MgPSBbcGxvdF0uY29uY2F0KGFyZ3MpOwot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rLmxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgICAgIGhvb2tbaV0uYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBpbml0UGx1Z2lucygpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGx1Z2lucy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBwID0gcGx1Z2lu
c1tpXTsKLSAgICAgICAgICAgICAgICBwLmluaXQocGxvdCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHAub3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgb3B0aW9ucywg
cC5vcHRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IHBhcnNlT3B0aW9ucyhvcHRzKSB7Ci0gICAgICAgICAgICB2YXIgaTsKLQotICAgICAgICAgICAg
JC5leHRlbmQodHJ1ZSwgb3B0aW9ucywgb3B0cyk7Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25z
LnhheGlzLmNvbG9yID09IG51bGwpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy54YXhpcy5jb2xv
ciA9IG9wdGlvbnMuZ3JpZC5jb2xvcjsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLnlheGlzLmNv
bG9yID09IG51bGwpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy55YXhpcy5jb2xvciA9IG9wdGlv
bnMuZ3JpZC5jb2xvcjsKLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMueGF4aXMudGlja0NvbG9y
ID09IG51bGwpIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5Ci0gICAgICAgICAgICAgICAgb3B0
aW9ucy54YXhpcy50aWNrQ29sb3IgPSBvcHRpb25zLmdyaWQudGlja0NvbG9yOwotICAgICAgICAg
ICAgaWYgKG9wdGlvbnMueWF4aXMudGlja0NvbG9yID09IG51bGwpIC8vIGJhY2t3YXJkcy1jb21w
YXRpYmlsaXR5Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy55YXhpcy50aWNrQ29sb3IgPSBvcHRp
b25zLmdyaWQudGlja0NvbG9yOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5ncmlkLmJvcmRl
ckNvbG9yID09IG51bGwpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5ncmlkLmJvcmRlckNvbG9y
ID0gb3B0aW9ucy5ncmlkLmNvbG9yOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC50aWNr
Q29sb3IgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBvcHRpb25zLmdyaWQudGlja0NvbG9yID0g
JC5jb2xvci5wYXJzZShvcHRpb25zLmdyaWQuY29sb3IpLnNjYWxlKCdhJywgMC4yMikudG9TdHJp
bmcoKTsKLQotICAgICAgICAgICAgLy8gZmlsbCBpbiBkZWZhdWx0cyBpbiBheGVzLCBjb3B5IGF0
IGxlYXN0IGFsd2F5cyB0aGUKLSAgICAgICAgICAgIC8vIGZpcnN0IGFzIHRoZSByZXN0IG9mIHRo
ZSBjb2RlIGFzc3VtZXMgaXQnbGwgYmUgdGhlcmUKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBNYXRoLm1heCgxLCBvcHRpb25zLnhheGVzLmxlbmd0aCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBvcHRpb25zLnhheGVzW2ldID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMueGF4aXMsIG9w
dGlvbnMueGF4ZXNbaV0pOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE1hdGgubWF4KDEs
IG9wdGlvbnMueWF4ZXMubGVuZ3RoKTsgKytpKQotICAgICAgICAgICAgICAgIG9wdGlvbnMueWF4
ZXNbaV0gPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucy55YXhpcywgb3B0aW9ucy55YXhlc1tp
XSk7Ci0KLSAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0byBiZSByZW1v
dmVkIGluIGZ1dHVyZQotICAgICAgICAgICAgaWYgKG9wdGlvbnMueGF4aXMubm9UaWNrcyAmJiBv
cHRpb25zLnhheGlzLnRpY2tzID09IG51bGwpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy54YXhp
cy50aWNrcyA9IG9wdGlvbnMueGF4aXMubm9UaWNrczsKLSAgICAgICAgICAgIGlmIChvcHRpb25z
LnlheGlzLm5vVGlja3MgJiYgb3B0aW9ucy55YXhpcy50aWNrcyA9PSBudWxsKQotICAgICAgICAg
ICAgICAgIG9wdGlvbnMueWF4aXMudGlja3MgPSBvcHRpb25zLnlheGlzLm5vVGlja3M7Ci0gICAg
ICAgICAgICBpZiAob3B0aW9ucy54MmF4aXMpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zLnhh
eGVzWzFdID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMueGF4aXMsIG9wdGlvbnMueDJheGlz
KTsKLSAgICAgICAgICAgICAgICBvcHRpb25zLnhheGVzWzFdLnBvc2l0aW9uID0gInRvcCI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy55MmF4aXMpIHsKLSAgICAgICAg
ICAgICAgICBvcHRpb25zLnlheGVzWzFdID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMueWF4
aXMsIG9wdGlvbnMueTJheGlzKTsKLSAgICAgICAgICAgICAgICBvcHRpb25zLnlheGVzWzFdLnBv
c2l0aW9uID0gInJpZ2h0IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcHRpb25z
LmdyaWQuY29sb3JlZEFyZWFzKQotICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JpZC5tYXJraW5n
cyA9IG9wdGlvbnMuZ3JpZC5jb2xvcmVkQXJlYXM7Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5n
cmlkLmNvbG9yZWRBcmVhc0NvbG9yKQotICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JpZC5tYXJr
aW5nc0NvbG9yID0gb3B0aW9ucy5ncmlkLmNvbG9yZWRBcmVhc0NvbG9yOwotICAgICAgICAgICAg
aWYgKG9wdGlvbnMubGluZXMpCi0gICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgb3B0aW9u
cy5zZXJpZXMubGluZXMsIG9wdGlvbnMubGluZXMpOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMu
cG9pbnRzKQotICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMuc2VyaWVzLnBv
aW50cywgb3B0aW9ucy5wb2ludHMpOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmFycykKLSAg
ICAgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCBvcHRpb25zLnNlcmllcy5iYXJzLCBvcHRpb25z
LmJhcnMpOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hhZG93U2l6ZSAhPSBudWxsKQotICAg
ICAgICAgICAgICAgIG9wdGlvbnMuc2VyaWVzLnNoYWRvd1NpemUgPSBvcHRpb25zLnNoYWRvd1Np
emU7Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5oaWdobGlnaHRDb2xvciAhPSBudWxsKQotICAg
ICAgICAgICAgICAgIG9wdGlvbnMuc2VyaWVzLmhpZ2hsaWdodENvbG9yID0gb3B0aW9ucy5oaWdo
bGlnaHRDb2xvcjsKLQotICAgICAgICAgICAgLy8gc2F2ZSBvcHRpb25zIG9uIGF4ZXMgZm9yIGZ1
dHVyZSByZWZlcmVuY2UKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnhheGVz
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlQXhpcyh4YXhlcywgaSAr
IDEpLm9wdGlvbnMgPSBvcHRpb25zLnhheGVzW2ldOwotICAgICAgICAgICAgZm9yIChpID0gMDsg
aSA8IG9wdGlvbnMueWF4ZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZ2V0T3JDcmVh
dGVBeGlzKHlheGVzLCBpICsgMSkub3B0aW9ucyA9IG9wdGlvbnMueWF4ZXNbaV07Ci0KLSAgICAg
ICAgICAgIC8vIGFkZCBob29rcyBmcm9tIG9wdGlvbnMKLSAgICAgICAgICAgIGZvciAodmFyIG4g
aW4gaG9va3MpCi0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaG9va3Nbbl0gJiYgb3B0aW9u
cy5ob29rc1tuXS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIGhvb2tzW25dID0gaG9va3Nb
bl0uY29uY2F0KG9wdGlvbnMuaG9va3Nbbl0pOwotCi0gICAgICAgICAgICBleGVjdXRlSG9va3Mo
aG9va3MucHJvY2Vzc09wdGlvbnMsIFtvcHRpb25zXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBzZXREYXRhKGQpIHsKLSAgICAgICAgICAgIHNlcmllcyA9IHBhcnNlRGF0YShkKTsK
LSAgICAgICAgICAgIGZpbGxJblNlcmllc09wdGlvbnMoKTsKLSAgICAgICAgICAgIHByb2Nlc3NE
YXRhKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJzZURhdGEoZCkgewotICAg
ICAgICAgICAgdmFyIHJlcyA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHMgPSAkLmV4dGVuZCh0cnVlLCB7
fSwgb3B0aW9ucy5zZXJpZXMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGRbaV0uZGF0YSAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGRbaV0uZGF0YTsgLy8gbW92ZSB0
aGUgZGF0YSBpbnN0ZWFkIG9mIGRlZXAtY29weQotICAgICAgICAgICAgICAgICAgICBkZWxldGUg
ZFtpXS5kYXRhOwotCi0gICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHMsIGRbaV0p
OwotCi0gICAgICAgICAgICAgICAgICAgIGRbaV0uZGF0YSA9IHMuZGF0YTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzLmRhdGEg
PSBkW2ldOwotICAgICAgICAgICAgICAgIHJlcy5wdXNoKHMpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYXhp
c051bWJlcihvYmosIGNvb3JkKSB7Ci0gICAgICAgICAgICB2YXIgYSA9IG9ialtjb29yZCArICJh
eGlzIl07Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGEgPT0gIm9iamVjdCIpIC8vIGlmIHdlIGdv
dCBhIHJlYWwgYXhpcywgZXh0cmFjdCBudW1iZXIKLSAgICAgICAgICAgICAgICBhID0gYS5uOwot
ICAgICAgICAgICAgaWYgKHR5cGVvZiBhICE9ICJudW1iZXIiKQotICAgICAgICAgICAgICAgIGEg
PSAxOyAvLyBkZWZhdWx0IHRvIGZpcnN0IGF4aXMKLSAgICAgICAgICAgIHJldHVybiBhOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWxsQXhlcygpIHsKLSAgICAgICAgICAgIC8vIHJl
dHVybiBmbGF0IGFycmF5IHdpdGhvdXQgYW5ub3lpbmcgbnVsbCBlbnRyaWVzCi0gICAgICAgICAg
ICByZXR1cm4gJC5ncmVwKHhheGVzLmNvbmNhdCh5YXhlcyksIGZ1bmN0aW9uIChhKSB7IHJldHVy
biBhOyB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNhbnZhc1RvQXhpc0Nvb3Jk
cyhwb3MpIHsKLSAgICAgICAgICAgIC8vIHJldHVybiBhbiBvYmplY3Qgd2l0aCB4L3kgY29ycmVz
cG9uZGluZyB0byBhbGwgdXNlZCBheGVzCi0gICAgICAgICAgICB2YXIgcmVzID0ge30sIGksIGF4
aXM7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeGF4ZXMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBheGlzID0geGF4ZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMg
JiYgYXhpcy51c2VkKQotICAgICAgICAgICAgICAgICAgICByZXNbIngiICsgYXhpcy5uXSA9IGF4
aXMuYzJwKHBvcy5sZWZ0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHlheGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXhpcyA9IHlheGVz
W2ldOwotICAgICAgICAgICAgICAgIGlmIChheGlzICYmIGF4aXMudXNlZCkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzWyJ5IiArIGF4aXMubl0gPSBheGlzLmMycChwb3MudG9wKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlcy54MSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAg
ICAgICAgIHJlcy54ID0gcmVzLngxOwotICAgICAgICAgICAgaWYgKHJlcy55MSAhPT0gdW5kZWZp
bmVkKQotICAgICAgICAgICAgICAgIHJlcy55ID0gcmVzLnkxOwotCi0gICAgICAgICAgICByZXR1
cm4gcmVzOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYXhpc1RvQ2FudmFzQ29vcmRz
KHBvcykgewotICAgICAgICAgICAgLy8gZ2V0IGNhbnZhcyBjb29yZHMgZnJvbSB0aGUgZmlyc3Qg
cGFpciBvZiB4L3kgZm91bmQgaW4gcG9zCi0gICAgICAgICAgICB2YXIgcmVzID0ge30sIGksIGF4
aXMsIGtleTsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHhheGVzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgYXhpcyA9IHhheGVzW2ldOwotICAgICAgICAgICAgICAgIGlm
IChheGlzICYmIGF4aXMudXNlZCkgewotICAgICAgICAgICAgICAgICAgICBrZXkgPSAieCIgKyBh
eGlzLm47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb3Nba2V5XSA9PSBudWxsICYmIGF4aXMu
biA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gIngiOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChwb3Nba2V5XSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXMubGVmdCA9IGF4aXMucDJjKHBvc1trZXldKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeWF4ZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBheGlzID0geWF4ZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYg
KGF4aXMgJiYgYXhpcy51c2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9ICJ5IiArIGF4
aXMubjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvc1trZXldID09IG51bGwgJiYgYXhpcy5u
ID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAieSI7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHBvc1trZXldICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlcy50b3AgPSBheGlzLnAyYyhwb3Nba2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGdldE9yQ3JlYXRlQXhpcyhheGVzLCBudW1iZXIpIHsKLSAgICAgICAgICAgIGlmICgh
YXhlc1tudW1iZXIgLSAxXSkKLSAgICAgICAgICAgICAgICBheGVzW251bWJlciAtIDFdID0gewot
ICAgICAgICAgICAgICAgICAgICBuOiBudW1iZXIsIC8vIHNhdmUgdGhlIG51bWJlciBmb3IgZnV0
dXJlIHJlZmVyZW5jZQotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IGF4ZXMgPT0geGF4
ZXMgPyAieCIgOiAieSIsCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6ICQuZXh0ZW5kKHRy
dWUsIHt9LCBheGVzID09IHhheGVzID8gb3B0aW9ucy54YXhpcyA6IG9wdGlvbnMueWF4aXMpCi0g
ICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgcmV0dXJuIGF4ZXNbbnVtYmVyIC0gMV07
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmaWxsSW5TZXJpZXNPcHRpb25zKCkgewot
Ci0gICAgICAgICAgICB2YXIgbmVlZGVkQ29sb3JzID0gc2VyaWVzLmxlbmd0aCwgbWF4SW5kZXgg
PSAtMSwgaTsKLQotICAgICAgICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiBzZXJpZXMg
dGhhdCBhbHJlYWR5IGhhdmUgZml4ZWQgY29sb3JzIG9yCi0gICAgICAgICAgICAvLyBjb2xvciBp
bmRleGVzIGZyb20gdGhlIG51bWJlciB0aGF0IHdlIHN0aWxsIG5lZWQgdG8gZ2VuZXJhdGUuCi0K
LSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgc2MgPSBzZXJpZXNbaV0uY29sb3I7Ci0gICAgICAgICAgICAgICAgaWYg
KHNjICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbmVlZGVkQ29sb3JzLS07Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2MgPT0gIm51bWJlciIgJiYgc2MgPiBtYXhJbmRl
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzYzsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gSWYgYW55IG9mIHRoZSBzZXJpZXMgaGF2ZSBmaXhlZCBjb2xvciBpbmRleGVzLCB0aGVu
IHdlIG5lZWQgdG8KLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIGF0IGxlYXN0IGFzIG1hbnkgY29s
b3JzIGFzIHRoZSBoaWdoZXN0IGluZGV4LgotCi0gICAgICAgICAgICBpZiAobmVlZGVkQ29sb3Jz
IDw9IG1heEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgbmVlZGVkQ29sb3JzID0gbWF4SW5kZXgg
KyAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBHZW5lcmF0ZSBhbGwgdGhlIGNv
bG9ycywgdXNpbmcgZmlyc3QgdGhlIG9wdGlvbiBjb2xvcnMgYW5kIHRoZW4KLSAgICAgICAgICAg
IC8vIHZhcmlhdGlvbnMgb24gdGhvc2UgY29sb3JzIG9uY2UgdGhleSdyZSBleGhhdXN0ZWQuCi0K
LSAgICAgICAgICAgIHZhciBjLCBjb2xvcnMgPSBbXSwgY29sb3JQb29sID0gb3B0aW9ucy5jb2xv
cnMsCi0gICAgICAgICAgICAgICAgY29sb3JQb29sU2l6ZSA9IGNvbG9yUG9vbC5sZW5ndGgsIHZh
cmlhdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZWVkZWRDb2xvcnM7
IGkrKykgewotCi0gICAgICAgICAgICAgICAgYyA9ICQuY29sb3IucGFyc2UoY29sb3JQb29sW2kg
JSBjb2xvclBvb2xTaXplXSB8fCAiIzY2NiIpOwotCi0gICAgICAgICAgICAgICAgLy8gRWFjaCB0
aW1lIHdlIGV4aGF1c3QgdGhlIGNvbG9ycyBpbiB0aGUgcG9vbCB3ZSBhZGp1c3QKLSAgICAgICAg
ICAgICAgICAvLyBhIHNjYWxpbmcgZmFjdG9yIHVzZWQgdG8gcHJvZHVjZSBtb3JlIHZhcmlhdGlv
bnMgb24KLSAgICAgICAgICAgICAgICAvLyB0aG9zZSBjb2xvcnMuIFRoZSBmYWN0b3IgYWx0ZXJu
YXRlcyBuZWdhdGl2ZS9wb3NpdGl2ZQotICAgICAgICAgICAgICAgIC8vIHRvIHByb2R1Y2UgbGln
aHRlci9kYXJrZXIgY29sb3JzLgotCi0gICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHZhcmlh
dGlvbiBhZnRlciBldmVyeSBmZXcgY3ljbGVzLCBvciBlbHNlCi0gICAgICAgICAgICAgICAgLy8g
aXQgd2lsbCBlbmQgdXAgcHJvZHVjaW5nIG9ubHkgd2hpdGUgb3IgYmxhY2sgY29sb3JzLgotCi0g
ICAgICAgICAgICAgICAgaWYgKGkgJSBjb2xvclBvb2xTaXplID09IDAgJiYgaSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYXRpb24gPCAwLjUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYXRpb24gPSAtdmFyaWF0aW9uIC0gMC4yOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHZhcmlhdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB2YXJpYXRpb24g
PSAtdmFyaWF0aW9uOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbG9y
c1tpXSA9IGMuc2NhbGUoJ3JnYicsIDEgKyB2YXJpYXRpb24pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc2VyaWVzIG9wdGlvbnMsIGZpbGxpbmcgaW4gdGhl
aXIgY29sb3JzCi0KLSAgICAgICAgICAgIHZhciBjb2xvcmkgPSAwLCBzOwotICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHMg
PSBzZXJpZXNbaV07Ci0KLSAgICAgICAgICAgICAgICAvLyBhc3NpZ24gY29sb3JzCi0gICAgICAg
ICAgICAgICAgaWYgKHMuY29sb3IgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzLmNv
bG9yID0gY29sb3JzW2NvbG9yaV0udG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgKytj
b2xvcmk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVv
ZiBzLmNvbG9yID09ICJudW1iZXIiKQotICAgICAgICAgICAgICAgICAgICBzLmNvbG9yID0gY29s
b3JzW3MuY29sb3JdLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0dXJuIG9uIGxp
bmVzIGF1dG9tYXRpY2FsbHkgaW4gY2FzZSBub3RoaW5nIGlzIHNldAotICAgICAgICAgICAgICAg
IGlmIChzLmxpbmVzLnNob3cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdiwg
c2hvdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodiBpbiBzKQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNbdl0gJiYgc1t2XS5zaG93KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
c2hvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHMubGluZXMuc2hvdyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSWYgbm90aGluZyB3YXMgcHJvdmlk
ZWQgZm9yIGxpbmVzLnplcm8sIGRlZmF1bHQgaXQgdG8gbWF0Y2gKLSAgICAgICAgICAgICAgICAv
LyBsaW5lcy5maWxsLCBzaW5jZSBhcmVhcyBieSBkZWZhdWx0IHNob3VsZCBleHRlbmQgdG8gemVy
by4KLQotICAgICAgICAgICAgICAgIGlmIChzLmxpbmVzLnplcm8gPT0gbnVsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzLmxpbmVzLnplcm8gPSAhIXMubGluZXMuZmlsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBzZXR1cCBheGVzCi0gICAgICAgICAgICAgICAg
cy54YXhpcyA9IGdldE9yQ3JlYXRlQXhpcyh4YXhlcywgYXhpc051bWJlcihzLCAieCIpKTsKLSAg
ICAgICAgICAgICAgICBzLnlheGlzID0gZ2V0T3JDcmVhdGVBeGlzKHlheGVzLCBheGlzTnVtYmVy
KHMsICJ5IikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
cHJvY2Vzc0RhdGEoKSB7Ci0gICAgICAgICAgICB2YXIgdG9wU2VudHJ5ID0gTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZLAotICAgICAgICAgICAgICAgIGJvdHRvbVNlbnRyeSA9IE51bWJlci5ORUdB
VElWRV9JTkZJTklUWSwKLSAgICAgICAgICAgICAgICBmYWtlSW5maW5pdHkgPSBOdW1iZXIuTUFY
X1ZBTFVFLAotICAgICAgICAgICAgICAgIGksIGosIGssIG0sIGxlbmd0aCwKLSAgICAgICAgICAg
ICAgICBzLCBwb2ludHMsIHBzLCB4LCB5LCBheGlzLCB2YWwsIGYsIHAsCi0gICAgICAgICAgICAg
ICAgZGF0YSwgZm9ybWF0OwotCi0gICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVBeGlzKGF4aXMs
IG1pbiwgbWF4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1pbiA8IGF4aXMuZGF0YW1pbiAmJiBt
aW4gIT0gLWZha2VJbmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAgYXhpcy5kYXRhbWluID0g
bWluOwotICAgICAgICAgICAgICAgIGlmIChtYXggPiBheGlzLmRhdGFtYXggJiYgbWF4ICE9IGZh
a2VJbmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAgYXhpcy5kYXRhbWF4ID0gbWF4OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAkLmVhY2goYWxsQXhlcygpLCBmdW5jdGlvbiAoXywg
YXhpcykgewotICAgICAgICAgICAgICAgIC8vIGluaXQgYXhpcwotICAgICAgICAgICAgICAgIGF4
aXMuZGF0YW1pbiA9IHRvcFNlbnRyeTsKLSAgICAgICAgICAgICAgICBheGlzLmRhdGFtYXggPSBi
b3R0b21TZW50cnk7Ci0gICAgICAgICAgICAgICAgYXhpcy51c2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbaV07Ci0gICAgICAgICAgICAgICAgcy5k
YXRhcG9pbnRzID0geyBwb2ludHM6IFtdIH07Ci0KLSAgICAgICAgICAgICAgICBleGVjdXRlSG9v
a3MoaG9va3MucHJvY2Vzc1Jhd0RhdGEsIFsgcywgcy5kYXRhLCBzLmRhdGFwb2ludHMgXSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGZpcnN0IHBhc3M6IGNsZWFuIGFuZCBjb3B5
IGRhdGEKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwotCi0gICAgICAgICAgICAgICAgZGF0YSA9
IHMuZGF0YTsKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBzLmRhdGFwb2ludHMuZm9ybWF0Owot
Ci0gICAgICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
bWF0ID0gW107Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgb3V0IGhvdyB0byBjb3B5Ci0g
ICAgICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeDogdHJ1ZSwgbnVtYmVyOiB0cnVlLCBy
ZXF1aXJlZDogdHJ1ZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0LnB1c2goeyB5OiB0
cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChzLmJhcnMuc2hvdyB8fCAocy5saW5lcy5zaG93ICYmIHMubGluZXMuZmlsbCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdXRvc2NhbGUgPSAhISgocy5iYXJzLnNob3cg
JiYgcy5iYXJzLnplcm8pIHx8IChzLmxpbmVzLnNob3cgJiYgcy5saW5lcy56ZXJvKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7IHk6IHRydWUsIG51bWJlcjogdHJ1ZSwg
cmVxdWlyZWQ6IGZhbHNlLCBkZWZhdWx0VmFsdWU6IDAsIGF1dG9zY2FsZTogYXV0b3NjYWxlIH0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuYmFycy5ob3Jpem9udGFsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZvcm1hdFtmb3JtYXQubGVuZ3RoIC0gMV0u
eTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRbZm9ybWF0Lmxlbmd0aCAtIDFd
LnggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcy5kYXRhcG9pbnRzLmZvcm1hdCA9IGZvcm1hdDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocy5kYXRhcG9pbnRzLnBv
aW50c2l6ZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gYWxyZWFk
eSBmaWxsZWQgaW4KLQotICAgICAgICAgICAgICAgIHMuZGF0YXBvaW50cy5wb2ludHNpemUgPSBm
b3JtYXQubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgcHMgPSBzLmRhdGFwb2ludHMucG9pbnRz
aXplOwotICAgICAgICAgICAgICAgIHBvaW50cyA9IHMuZGF0YXBvaW50cy5wb2ludHM7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgaW5zZXJ0U3RlcHMgPSBzLmxpbmVzLnNob3cgJiYgcy5saW5lcy5z
dGVwczsKLSAgICAgICAgICAgICAgICBzLnhheGlzLnVzZWQgPSBzLnlheGlzLnVzZWQgPSB0cnVl
OwotCi0gICAgICAgICAgICAgICAgZm9yIChqID0gayA9IDA7IGogPCBkYXRhLmxlbmd0aDsgKytq
LCBrICs9IHBzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBkYXRhW2pdOwotCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBudWxsaWZ5ID0gcCA9PSBudWxsOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW51bGxpZnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0g
PCBwczsgKyttKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcFttXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZm9ybWF0W21dOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGYubnVtYmVyICYmIHZhbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgPSArdmFsOyAvLyBjb252ZXJ0IHRvIG51bWJlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSBJbmZpbml0eSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBmYWtlSW5maW5pdHk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gLUluZmluaXR5KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IC1mYWtlSW5maW5pdHk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmLnJlcXVpcmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bGxpZnkgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZi5kZWZhdWx0VmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBmLmRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1trICsgbV0gPSB2YWw7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBpZiAobnVsbGlmeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0g
MDsgbSA8IHBzOyArK20pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwb2lu
dHNbayArIG1dOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZm9ybWF0W21dOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IG1pbi9tYXggaW5mbwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi54KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlQXhpcyhzLnhheGlzLCB2YWwsIHZhbCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmLnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVBeGlzKHMueWF4aXMsIHZhbCwgdmFsKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2sgKyBt
XSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBhIGxpdHRsZSBiaXQgb2YgbGluZSBzcGVjaWZpYyBzdHVmZiB0aGF0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBwZXJoYXBzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgbGFja2luZwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYmV0dGVyIG1lYW5zLi4uCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5zZXJ0U3RlcHMgJiYgayA+IDAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBwb2ludHNbayAtIHBzXSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgcG9pbnRzW2sgLSBwc10gIT0gcG9pbnRzW2tdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgcG9pbnRzW2sgLSBwcyArIDFdICE9IHBvaW50c1trICsgMV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBwb2ludCB0byBtYWtlIHJvb20gZm9yIGEg
bWlkZGxlIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8
IHBzOyArK20pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1trICsgcHMg
KyBtXSA9IHBvaW50c1trICsgbV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBt
aWRkbGUgcG9pbnQgaGFzIHNhbWUgeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50
c1trICsgMV0gPSBwb2ludHNbayAtIHBzICsgMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSd2ZSBhZGRlZCBhIHBvaW50LCBiZXR0ZXIgcmVmbGVjdCB0aGF0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgayArPSBwczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gZ2l2ZSB0aGUgaG9va3MgYSBjaGFuY2UgdG8gcnVuCi0gICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgcyA9IHNlcmllc1tpXTsKLQotICAgICAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5w
cm9jZXNzRGF0YXBvaW50cywgWyBzLCBzLmRhdGFwb2ludHNdKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gc2Vjb25kIHBhc3M6IGZpbmQgZGF0YW1heC9kYXRhbWluIGZvciBhdXRv
LXNjYWxpbmcKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwotICAgICAgICAgICAgICAgIHBvaW50
cyA9IHMuZGF0YXBvaW50cy5wb2ludHMsCi0gICAgICAgICAgICAgICAgcHMgPSBzLmRhdGFwb2lu
dHMucG9pbnRzaXplOwotICAgICAgICAgICAgICAgIGZvcm1hdCA9IHMuZGF0YXBvaW50cy5mb3Jt
YXQ7Ci0KLSAgICAgICAgICAgICAgICB2YXIgeG1pbiA9IHRvcFNlbnRyeSwgeW1pbiA9IHRvcFNl
bnRyeSwKLSAgICAgICAgICAgICAgICAgICAgeG1heCA9IGJvdHRvbVNlbnRyeSwgeW1heCA9IGJv
dHRvbVNlbnRyeTsKLQotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwb2ludHMubGVu
Z3RoOyBqICs9IHBzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHNbal0gPT0gbnVs
bCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YWwgPSBwb2ludHNbaiArIG1dOwotICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGZvcm1hdFtt
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZiB8fCBmLmF1dG9zY2FsZSA9PT0gZmFs
c2UgfHwgdmFsID09IGZha2VJbmZpbml0eSB8fCB2YWwgPT0gLWZha2VJbmZpbml0eSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGYueCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPCB4bWlu
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWluID0gdmFsOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPiB4bWF4KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4bWF4ID0gdmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGYueSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2YWwgPCB5bWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5bWluID0g
dmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPiB5bWF4KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB5bWF4ID0gdmFsOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKHMuYmFycy5zaG93KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG1h
a2Ugc3VyZSB3ZSBnb3Qgcm9vbSBmb3IgdGhlIGJhciBvbiB0aGUgZGFuY2luZyBmbG9vcgotICAg
ICAgICAgICAgICAgICAgICB2YXIgZGVsdGE7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChzLmJhcnMuYWxpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImxlZnQiOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJpZ2h0IjoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IC1zLmJhcnMuYmFyV2lkdGg7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJjZW50ZXIiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gLXMu
YmFycy5iYXJXaWR0aCAvIDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXIgYWxpZ25tZW50OiAiICsgcy5iYXJzLmFs
aWduKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChz
LmJhcnMuaG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgeW1pbiArPSBkZWx0
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHltYXggKz0gZGVsdGEgKyBzLmJhcnMuYmFyV2lk
dGg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB4bWluICs9IGRlbHRhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgeG1heCArPSBkZWx0YSArIHMuYmFycy5iYXJXaWR0aDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVwZGF0ZUF4aXMocy54
YXhpcywgeG1pbiwgeG1heCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlQXhpcyhzLnlheGlzLCB5
bWluLCB5bWF4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJC5lYWNoKGFsbEF4ZXMo
KSwgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXhpcy5kYXRhbWlu
ID09IHRvcFNlbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgYXhpcy5kYXRhbWluID0gbnVsbDsK
LSAgICAgICAgICAgICAgICBpZiAoYXhpcy5kYXRhbWF4ID09IGJvdHRvbVNlbnRyeSkKLSAgICAg
ICAgICAgICAgICAgICAgYXhpcy5kYXRhbWF4ID0gbnVsbDsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBkaXNwbGF5J3MgcmF0aW8gYmV0d2VlbiBwaHlzaWNhbCBhbmQgZGV2aWNlLWlu
ZGVwZW5kZW50IHBpeGVscy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmF0
aW8gYmV0d2VlbiB0aGUgd2lkdGggdGhhdCB0aGUgYnJvd3NlciBhZHZlcnRpc2VzIGFuZCB0aGUg
bnVtYmVyCi0gICAgICAgIC8vIG9mIHBpeGVscyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhhdCBz
cGFjZS4gIFRoZSBpUGhvbmUgNCwgZm9yIGV4YW1wbGUsIGhhcyBhCi0gICAgICAgIC8vIGRldmlj
ZS1pbmRlcGVuZGVudCB3aWR0aCBvZiAzMjBweCwgYnV0IGl0cyBzY3JlZW4gaXMgYWN0dWFsbHkg
NjQwcHggd2lkZS4gIEl0Ci0gICAgICAgIC8vIHRoZXJlZm9yZSBoYXMgYSBwaXhlbCByYXRpbyBv
ZiAyLCB3aGlsZSBtb3N0IG5vcm1hbCBkZXZpY2VzIGhhdmUgYSByYXRpbyBvZiAxLgotCi0gICAg
ICAgIGZ1bmN0aW9uIGdldFBpeGVsUmF0aW8oY2N0eCkgewotICAgICAgICAgICAgdmFyIGRldmlj
ZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwotICAgICAgICAgICAg
dmFyIGJhY2tpbmdTdG9yZVJhdGlvID0KLSAgICAgICAgICAgICAgICBjY3R4LndlYmtpdEJhY2tp
bmdTdG9yZVBpeGVsUmF0aW8gfHwKLSAgICAgICAgICAgICAgICBjY3R4Lm1vekJhY2tpbmdTdG9y
ZVBpeGVsUmF0aW8gfHwKLSAgICAgICAgICAgICAgICBjY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxS
YXRpbyB8fAotICAgICAgICAgICAgICAgIGNjdHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwK
LSAgICAgICAgICAgICAgICBjY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwgMTsKLQotICAg
ICAgICAgICAgcmV0dXJuIGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbzsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1ha2VDYW52YXMoY2xzKSB7Ci0KLSAgICAgICAg
ICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Ci0gICAgICAgICAg
ICBjLmNsYXNzTmFtZSA9IGNsczsKLQotICAgICAgICAgICAgJChjKS5jc3MoeyBkaXJlY3Rpb246
ICJsdHIiLCBwb3NpdGlvbjogImFic29sdXRlIiwgbGVmdDogMCwgdG9wOiAwIH0pCi0gICAgICAg
ICAgICAgICAgLmFwcGVuZFRvKHBsYWNlaG9sZGVyKTsKLQotICAgICAgICAgICAgLy8gSWYgSFRN
TDUgQ2FudmFzIGlzbid0IGF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIEV4Y2FudmFzCi0KLSAgICAg
ICAgICAgIGlmICghYy5nZXRDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5H
X3ZtbENhbnZhc01hbmFnZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IHdpbmRvdy5HX3Zt
bENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoYyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IGF2YWls
YWJsZS4gSWYgeW91J3JlIHVzaW5nIElFIHdpdGggYSBmYWxsLWJhY2sgc3VjaCBhcyBFeGNhbnZh
cywgdGhlbiB0aGVyZSdzIGVpdGhlciBhIG1pc3Rha2UgaW4geW91ciBjb25kaXRpb25hbCBpbmNs
dWRlLCBvciB0aGUgcGFnZSBoYXMgbm8gRE9DVFlQRSBhbmQgaXMgcmVuZGVyaW5nIGluIFF1aXJr
cyBNb2RlLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIGNjdHggPSBjLmdldENvbnRleHQoIjJkIik7Ci0KLSAgICAgICAgICAgIC8vIEluY3Jl
YXNlIHRoZSBjYW52YXMgZGVuc2l0eSBiYXNlZCBvbiB0aGUgZGlzcGxheSdzIHBpeGVsIHJhdGlv
OyBiYXNpY2FsbHkKLSAgICAgICAgICAgIC8vIGdpdmluZyB0aGUgY2FudmFzIG1vcmUgcGl4ZWxz
IHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiBpdHMgZWxlbWVudCwKLSAgICAgICAgICAg
IC8vIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgcmV0aW5hIGRpc3BsYXlzIGhh
dmUgdGhhdCBtYW55IG1vcmUKLSAgICAgICAgICAgIC8vIHBpeGVscyB0aGFuIHRoZXkgYWN0dWFs
bHkgdXNlIGZvciBwYWdlICYgZWxlbWVudCB3aWR0aHMuCi0KLSAgICAgICAgICAgIHZhciBwaXhl
bFJhdGlvID0gZ2V0UGl4ZWxSYXRpbyhjY3R4KTsKLQotICAgICAgICAgICAgYy53aWR0aCA9IGNh
bnZhc1dpZHRoICogcGl4ZWxSYXRpbzsKLSAgICAgICAgICAgIGMuaGVpZ2h0ID0gY2FudmFzSGVp
Z2h0ICogcGl4ZWxSYXRpbzsKLSAgICAgICAgICAgIGMuc3R5bGUud2lkdGggPSBjYW52YXNXaWR0
aCArICJweCI7Ci0gICAgICAgICAgICBjLnN0eWxlLmhlaWdodCA9IGNhbnZhc0hlaWdodCArICJw
eCI7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIGNvbnRleHQgc28gd2UgY2FuIHJlc2V0IGlu
IGNhc2Ugd2UgZ2V0IHJlcGxvdHRlZAotCi0gICAgICAgICAgICBjY3R4LnNhdmUoKTsKLQotICAg
ICAgICAgICAgLy8gU2NhbGUgdGhlIGNvb3JkaW5hdGUgc3BhY2UgdG8gbWF0Y2ggdGhlIGRpc3Bs
YXkgZGVuc2l0eTsgc28gZXZlbiB0aG91Z2ggd2UKLSAgICAgICAgICAgIC8vIG1heSBoYXZlIHR3
aWNlIGFzIG1hbnkgcGl4ZWxzLCB3ZSBzdGlsbCB3YW50IGxpbmVzIGFuZCBvdGhlciBkcmF3aW5n
IHRvCi0gICAgICAgICAgICAvLyBhcHBlYXIgYXQgdGhlIHNhbWUgc2l6ZTsgdGhlIGV4dHJhIHBp
eGVscyB3aWxsIGp1c3QgbWFrZSB0aGVtIGNyaXNwZXIuCi0KLSAgICAgICAgICAgIGNjdHguc2Nh
bGUocGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2V0Q2FudmFzRGltZW5zaW9ucygpIHsKLSAgICAg
ICAgICAgIGNhbnZhc1dpZHRoID0gcGxhY2Vob2xkZXIud2lkdGgoKTsKLSAgICAgICAgICAgIGNh
bnZhc0hlaWdodCA9IHBsYWNlaG9sZGVyLmhlaWdodCgpOwotCi0gICAgICAgICAgICBpZiAoY2Fu
dmFzV2lkdGggPD0gMCB8fCBjYW52YXNIZWlnaHQgPD0gMCkKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkludmFsaWQgZGltZW5zaW9ucyBmb3IgcGxvdCwgd2lkdGggPSAiICsgY2Fu
dmFzV2lkdGggKyAiLCBoZWlnaHQgPSAiICsgY2FudmFzSGVpZ2h0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyhjKSB7Ci0KLSAgICAgICAgICAgIHZhciBjY3R4
ID0gYy5nZXRDb250ZXh0KCIyZCIpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUgcGl4ZWwgcmF0
aW9zID4gMSBmb3IgcmV0aW5hIGRpc3BsYXlzLCBhcyBleHBsYWluZWQgaW4gbWFrZUNhbnZhcwot
Ci0gICAgICAgICAgICB2YXIgcGl4ZWxSYXRpbyA9IGdldFBpeGVsUmF0aW8oY2N0eCk7Ci0KLSAg
ICAgICAgICAgIC8vIFJlc2l6aW5nIHNob3VsZCByZXNldCB0aGUgc3RhdGUgKGV4Y2FudmFzIHNl
ZW1zIHRvIGJlIGJ1Z2d5IHRob3VnaCkKLQotICAgICAgICAgICAgaWYgKGMuc3R5bGUud2lkdGgg
IT0gY2FudmFzV2lkdGgpIHsKLSAgICAgICAgICAgICAgICBjLndpZHRoID0gY2FudmFzV2lkdGgg
KiBwaXhlbFJhdGlvOwotICAgICAgICAgICAgICAgIGMuc3R5bGUud2lkdGggPSBjYW52YXNXaWR0
aCArICJweCI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjLnN0eWxlLmhlaWdo
dCAhPSBjYW52YXNIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBjLmhlaWdodCA9IGNhbnZhc0hl
aWdodCAqIHBpeGVsUmF0aW87Ci0gICAgICAgICAgICAgICAgYy5zdHlsZS5oZWlnaHQgPSBjYW52
YXNIZWlnaHQgKyAicHgiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzbyB0cnkg
dG8gZ2V0IGJhY2sgdG8gdGhlIGluaXRpYWwgc3RhdGUgKGV2ZW4gaWYgaXQncwotICAgICAgICAg
ICAgLy8gZ29uZSBub3csIHRoaXMgc2hvdWxkIGJlIHNhZmUgYWNjb3JkaW5nIHRvIHRoZSBzcGVj
KQotICAgICAgICAgICAgY2N0eC5yZXN0b3JlKCk7Ci0KLSAgICAgICAgICAgIC8vIGFuZCBzYXZl
IGFnYWluCi0gICAgICAgICAgICBjY3R4LnNhdmUoKTsKLQotICAgICAgICAgICAgLy8gQXBwbHkg
c2NhbGluZyBmb3IgcmV0aW5hIGRpc3BsYXlzLCBhcyBleHBsYWluZWQgaW4gbWFrZUNhbnZhcwot
Ci0gICAgICAgICAgICBjY3R4LnNjYWxlKHBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0dXBDYW52YXNlcygpIHsKLSAgICAgICAgICAgIHZh
ciByZXVzZWQsCi0gICAgICAgICAgICAgICAgZXhpc3RpbmdDYW52YXMgPSBwbGFjZWhvbGRlci5j
aGlsZHJlbigiY2FudmFzLmZsb3QtYmFzZSIpLAotICAgICAgICAgICAgICAgIGV4aXN0aW5nT3Zl
cmxheSA9IHBsYWNlaG9sZGVyLmNoaWxkcmVuKCJjYW52YXMuZmxvdC1vdmVybGF5Iik7Ci0KLSAg
ICAgICAgICAgIGlmIChleGlzdGluZ0NhbnZhcy5sZW5ndGggPT0gMCB8fCBleGlzdGluZ092ZXJs
YXkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIGluaXQgZXZlcnl0aGluZwotCi0gICAgICAg
ICAgICAgICAgcGxhY2Vob2xkZXIuaHRtbCgiIik7IC8vIG1ha2Ugc3VyZSBwbGFjZWhvbGRlciBp
cyBjbGVhcgotCi0gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuY3NzKHsgcGFkZGluZzogMCB9
KTsgLy8gcGFkZGluZyBtZXNzZXMgdXAgdGhlIHBvc2l0aW9uaW5nCi0KLSAgICAgICAgICAgICAg
ICBpZiAocGxhY2Vob2xkZXIuY3NzKCJwb3NpdGlvbiIpID09ICdzdGF0aWMnKQotICAgICAgICAg
ICAgICAgICAgICBwbGFjZWhvbGRlci5jc3MoInBvc2l0aW9uIiwgInJlbGF0aXZlIik7IC8vIGZv
ciBwb3NpdGlvbmluZyBsYWJlbHMgYW5kIG92ZXJsYXkKLQotICAgICAgICAgICAgICAgIGdldENh
bnZhc0RpbWVuc2lvbnMoKTsKLQotICAgICAgICAgICAgICAgIGNhbnZhcyA9IG1ha2VDYW52YXMo
ImZsb3QtYmFzZSIpOwotICAgICAgICAgICAgICAgIG92ZXJsYXkgPSBtYWtlQ2FudmFzKCJmbG90
LW92ZXJsYXkiKTsgLy8gb3ZlcmxheSBjYW52YXMgZm9yIGludGVyYWN0aXZlIGZlYXR1cmVzCi0K
LSAgICAgICAgICAgICAgICByZXVzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHJldXNlIGV4aXN0aW5nIGVsZW1lbnRzCi0K
LSAgICAgICAgICAgICAgICBjYW52YXMgPSBleGlzdGluZ0NhbnZhcy5nZXQoMCk7Ci0gICAgICAg
ICAgICAgICAgb3ZlcmxheSA9IGV4aXN0aW5nT3ZlcmxheS5nZXQoMCk7Ci0KLSAgICAgICAgICAg
ICAgICByZXVzZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjdHggPSBj
YW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgICAgIG9jdHggPSBvdmVybGF5LmdldENv
bnRleHQoIjJkIik7Ci0KLSAgICAgICAgICAgIC8vIGRlZmluZSB3aGljaCBlbGVtZW50IHdlJ3Jl
IGxpc3RlbmluZyBmb3IgZXZlbnRzIG9uCi0gICAgICAgICAgICBldmVudEhvbGRlciA9ICQob3Zl
cmxheSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXVzZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBy
dW4gc2h1dGRvd24gaW4gdGhlIG9sZCBwbG90IG9iamVjdAotICAgICAgICAgICAgICAgIHBsYWNl
aG9sZGVyLmRhdGEoInBsb3QiKS5zaHV0ZG93bigpOwotCi0gICAgICAgICAgICAgICAgLy8gcmVz
ZXQgcmV1c2VkIGNhbnZhc2VzCi0gICAgICAgICAgICAgICAgcGxvdC5yZXNpemUoKTsKLQotICAg
ICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBvdmVybGF5IHBpeGVscyBhcmUgY2xlYXJlZCAoY2Fu
dmFzIGlzIGNsZWFyZWQgd2hlbiB3ZSByZWRyYXcpCi0gICAgICAgICAgICAgICAgb2N0eC5jbGVh
clJlY3QoMCwgMCwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyB0aGVuIHdoYWNrIGFueSByZW1haW5pbmcgb2J2aW91cyBnYXJiYWdlIGxlZnQKLSAgICAg
ICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoKTsKLSAgICAgICAgICAgICAgICBwbGFjZWhv
bGRlci5jaGlsZHJlbigpLm5vdChbY2FudmFzLCBvdmVybGF5XSkucmVtb3ZlKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNhdmUgaW4gY2FzZSB3ZSBnZXQgcmVwbG90dGVkCi0g
ICAgICAgICAgICBwbGFjZWhvbGRlci5kYXRhKCJwbG90IiwgcGxvdCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkgewotICAgICAgICAgICAgLy8gYmluZCBldmVu
dHMKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuaG92ZXJhYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgZXZlbnRIb2xkZXIubW91c2Vtb3ZlKG9uTW91c2VNb3ZlKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFVzZSBiaW5kLCByYXRoZXIgdGhhbiAubW91c2VsZWF2ZSwgYmVjYXVzZSB3ZSBvZmZp
Y2lhbGx5Ci0gICAgICAgICAgICAgICAgLy8gc3RpbGwgc3VwcG9ydCBqUXVlcnkgMS4yLjYsIHdo
aWNoIGRvZXNuJ3QgZGVmaW5lIGEgc2hvcnRjdXQKLSAgICAgICAgICAgICAgICAvLyBmb3IgbW91
c2VlbnRlciBvciBtb3VzZWxlYXZlLiAgVGhpcyB3YXMgYSBidWcvb3ZlcnNpZ2h0IHRoYXQKLSAg
ICAgICAgICAgICAgICAvLyB3YXMgZml4ZWQgc29tZXdoZXJlIGFyb3VuZCAxLjMueC4gIFdlIGNh
biByZXR1cm4gdG8gdXNpbmcKLSAgICAgICAgICAgICAgICAvLyAubW91c2VsZWF2ZSB3aGVuIHdl
IGRyb3Agc3VwcG9ydCBmb3IgMS4yLjYuCi0KLSAgICAgICAgICAgICAgICBldmVudEhvbGRlci5i
aW5kKCJtb3VzZWxlYXZlIiwgb25Nb3VzZUxlYXZlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5jbGlja2FibGUpCi0gICAgICAgICAgICAgICAgZXZlbnRI
b2xkZXIuY2xpY2sob25DbGljayk7Ci0KLSAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5i
aW5kRXZlbnRzLCBbZXZlbnRIb2xkZXJdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IHNodXRkb3duKCkgewotICAgICAgICAgICAgaWYgKHJlZHJhd1RpbWVvdXQpCi0gICAgICAgICAg
ICAgICAgY2xlYXJUaW1lb3V0KHJlZHJhd1RpbWVvdXQpOwotCi0gICAgICAgICAgICBldmVudEhv
bGRlci51bmJpbmQoIm1vdXNlbW92ZSIsIG9uTW91c2VNb3ZlKTsKLSAgICAgICAgICAgIGV2ZW50
SG9sZGVyLnVuYmluZCgibW91c2VsZWF2ZSIsIG9uTW91c2VMZWF2ZSk7Ci0gICAgICAgICAgICBl
dmVudEhvbGRlci51bmJpbmQoImNsaWNrIiwgb25DbGljayk7Ci0KLSAgICAgICAgICAgIGV4ZWN1
dGVIb29rcyhob29rcy5zaHV0ZG93biwgW2V2ZW50SG9sZGVyXSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBzZXRUcmFuc2Zvcm1hdGlvbkhlbHBlcnMoYXhpcykgewotICAgICAgICAg
ICAgLy8gc2V0IGhlbHBlciBmdW5jdGlvbnMgb24gdGhlIGF4aXMsIGFzc3VtZXMgcGxvdCBhcmVh
Ci0gICAgICAgICAgICAvLyBoYXMgYmVlbiBjb21wdXRlZCBhbHJlYWR5Ci0KLSAgICAgICAgICAg
IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHsgcmV0dXJuIHg7IH0KLQotICAgICAgICAgICAgdmFyIHMs
IG0sIHQgPSBheGlzLm9wdGlvbnMudHJhbnNmb3JtIHx8IGlkZW50aXR5LAotICAgICAgICAgICAg
ICAgIGl0ID0gYXhpcy5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm07Ci0KLSAgICAgICAgICAgIC8v
IHByZWNvbXB1dGUgaG93IG11Y2ggdGhlIGF4aXMgaXMgc2NhbGluZyBhIHBvaW50Ci0gICAgICAg
ICAgICAvLyBpbiBjYW52YXMgc3BhY2UKLSAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9
PSAieCIpIHsKLSAgICAgICAgICAgICAgICBzID0gYXhpcy5zY2FsZSA9IHBsb3RXaWR0aCAvIE1h
dGguYWJzKHQoYXhpcy5tYXgpIC0gdChheGlzLm1pbikpOwotICAgICAgICAgICAgICAgIG0gPSBN
YXRoLm1pbih0KGF4aXMubWF4KSwgdChheGlzLm1pbikpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcyA9IGF4aXMuc2NhbGUgPSBwbG90SGVpZ2h0
IC8gTWF0aC5hYnModChheGlzLm1heCkgLSB0KGF4aXMubWluKSk7Ci0gICAgICAgICAgICAgICAg
cyA9IC1zOwotICAgICAgICAgICAgICAgIG0gPSBNYXRoLm1heCh0KGF4aXMubWF4KSwgdChheGlz
Lm1pbikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkYXRhIHBvaW50IHRvIGNh
bnZhcyBjb29yZGluYXRlCi0gICAgICAgICAgICBpZiAodCA9PSBpZGVudGl0eSkgLy8gc2xpZ2h0
IG9wdGltaXphdGlvbgotICAgICAgICAgICAgICAgIGF4aXMucDJjID0gZnVuY3Rpb24gKHApIHsg
cmV0dXJuIChwIC0gbSkgKiBzOyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGF4aXMucDJjID0gZnVuY3Rpb24gKHApIHsgcmV0dXJuICh0KHApIC0gbSkgKiBzOyB9OwotICAg
ICAgICAgICAgLy8gY2FudmFzIGNvb3JkaW5hdGUgdG8gZGF0YSBwb2ludAotICAgICAgICAgICAg
aWYgKCFpdCkKLSAgICAgICAgICAgICAgICBheGlzLmMycCA9IGZ1bmN0aW9uIChjKSB7IHJldHVy
biBtICsgYyAvIHM7IH07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXhpcy5j
MnAgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gaXQobSArIGMgLyBzKTsgfTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIG1lYXN1cmVUaWNrTGFiZWxzKGF4aXMpIHsKLSAgICAgICAgICAg
IHZhciBvcHRzID0gYXhpcy5vcHRpb25zLCB0aWNrcyA9IGF4aXMudGlja3MgfHwgW10sCi0gICAg
ICAgICAgICAgICAgYXhpc3cgPSBvcHRzLmxhYmVsV2lkdGggfHwgMCwgYXhpc2ggPSBvcHRzLmxh
YmVsSGVpZ2h0IHx8IDAsCi0gICAgICAgICAgICAgICAgZiA9IGF4aXMuZm9udDsKLQotICAgICAg
ICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC5mb250ID0gZi5zdHlsZSArICIgIiAr
IGYudmFyaWFudCArICIgIiArIGYud2VpZ2h0ICsgIiAiICsgZi5zaXplICsgInB4ICciICsgZi5m
YW1pbHkgKyAiJyI7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlja3MubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgdCA9IHRpY2tzW2ldOwotCi0gICAgICAg
ICAgICAgICAgdC5saW5lcyA9IFtdOwotICAgICAgICAgICAgICAgIHQud2lkdGggPSB0LmhlaWdo
dCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXQubGFiZWwpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLy8gYWNjZXB0IHZhcmlvdXMga2luZHMg
b2YgbmV3bGluZXMsIGluY2x1ZGluZyBIVE1MIG9uZXMKLSAgICAgICAgICAgICAgICAvLyAoeW91
IGNhbiBhY3R1YWxseSBzcGxpdCBkaXJlY3RseSBvbiByZWdleHBzIGluIEphdmFzY3JpcHQsCi0g
ICAgICAgICAgICAgICAgLy8gYnV0IElFIDwgOSBpcyB1bmZvcnR1bmF0ZWx5IGJyb2tlbikKLSAg
ICAgICAgICAgICAgICB2YXIgbGluZXMgPSAodC5sYWJlbCArICIiKS5yZXBsYWNlKC88YnIgP1wv
Pz58XHJcbnxcci9nLCAiXG4iKS5zcGxpdCgiXG4iKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IGxpbmVzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBsaW5lID0geyB0ZXh0OiBsaW5lc1tqXSB9LAotICAgICAgICAgICAgICAgICAgICAgICAgbSA9
IGN0eC5tZWFzdXJlVGV4dChsaW5lLnRleHQpOwotCi0gICAgICAgICAgICAgICAgICAgIGxpbmUu
d2lkdGggPSBtLndpZHRoOwotICAgICAgICAgICAgICAgICAgICAvLyBtLmhlaWdodCBtaWdodCBu
b3QgYmUgZGVmaW5lZCwgbm90IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBzdGFuZGFy
ZCB5ZXQKLSAgICAgICAgICAgICAgICAgICAgbGluZS5oZWlnaHQgPSBtLmhlaWdodCAhPSBudWxs
ID8gbS5oZWlnaHQgOiBmLnNpemU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgYml0
IG9mIG1hcmdpbiBzaW5jZSBmb250IHJlbmRlcmluZyBpcwotICAgICAgICAgICAgICAgICAgICAv
LyBub3QgcGl4ZWwgcGVyZmVjdCBhbmQgY3V0IG9mZiBsZXR0ZXJzIGxvb2sKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYmFkLCB0aGlzIGFsc28gZG91YmxlcyBhcyBzcGFjaW5nIGJldHdlZW4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gbGluZXMKLSAgICAgICAgICAgICAgICAgICAgbGluZS5oZWln
aHQgKz0gTWF0aC5yb3VuZChmLnNpemUgKiAwLjE1KTsKLQotICAgICAgICAgICAgICAgICAgICB0
LndpZHRoID0gTWF0aC5tYXgobGluZS53aWR0aCwgdC53aWR0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHQuaGVpZ2h0ICs9IGxpbmUuaGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgICAgIHQubGlu
ZXMucHVzaChsaW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
b3B0cy5sYWJlbFdpZHRoID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGF4aXN3ID0gTWF0
aC5tYXgoYXhpc3csIHQud2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChvcHRzLmxhYmVsSGVp
Z2h0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGF4aXNoID0gTWF0aC5tYXgoYXhpc2gs
IHQuaGVpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0K
LSAgICAgICAgICAgIGF4aXMubGFiZWxXaWR0aCA9IE1hdGguY2VpbChheGlzdyk7Ci0gICAgICAg
ICAgICBheGlzLmxhYmVsSGVpZ2h0ID0gTWF0aC5jZWlsKGF4aXNoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGFsbG9jYXRlQXhpc0JveEZpcnN0UGhhc2UoYXhpcykgewotICAgICAg
ICAgICAgLy8gZmluZCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBheGlzIGJ5IGxvb2tpbmcgYXQg
bGFiZWwKLSAgICAgICAgICAgIC8vIHdpZHRocy9oZWlnaHRzIGFuZCB0aWNrcywgbWFrZSByb29t
IGJ5IGRpbWluaXNoaW5nIHRoZQotICAgICAgICAgICAgLy8gcGxvdE9mZnNldDsgdGhpcyBmaXJz
dCBwaGFzZSBvbmx5IGxvb2tzIGF0IG9uZQotICAgICAgICAgICAgLy8gZGltZW5zaW9uIHBlciBh
eGlzLCB0aGUgb3RoZXIgZGltZW5zaW9uIGRlcGVuZHMgb24gdGhlCi0gICAgICAgICAgICAvLyBv
dGhlciBheGVzIHNvIHdpbGwgaGF2ZSB0byB3YWl0Ci0KLSAgICAgICAgICAgIHZhciBsdyA9IGF4
aXMubGFiZWxXaWR0aCwKLSAgICAgICAgICAgICAgICBsaCA9IGF4aXMubGFiZWxIZWlnaHQsCi0g
ICAgICAgICAgICAgICAgcG9zID0gYXhpcy5vcHRpb25zLnBvc2l0aW9uLAotICAgICAgICAgICAg
ICAgIHRpY2tMZW5ndGggPSBheGlzLm9wdGlvbnMudGlja0xlbmd0aCwKLSAgICAgICAgICAgICAg
ICBheGlzTWFyZ2luID0gb3B0aW9ucy5ncmlkLmF4aXNNYXJnaW4sCi0gICAgICAgICAgICAgICAg
cGFkZGluZyA9IG9wdGlvbnMuZ3JpZC5sYWJlbE1hcmdpbiwKLSAgICAgICAgICAgICAgICBhbGwg
PSBheGlzLmRpcmVjdGlvbiA9PSAieCIgPyB4YXhlcyA6IHlheGVzLAotICAgICAgICAgICAgICAg
IGluZGV4LCBpbm5lcm1vc3Q7Ci0KLSAgICAgICAgICAgIC8vIGRldGVybWluZSBheGlzIG1hcmdp
bgotICAgICAgICAgICAgdmFyIHNhbWVQb3NpdGlvbiA9ICQuZ3JlcChhbGwsIGZ1bmN0aW9uIChh
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgYS5vcHRpb25zLnBvc2l0aW9uID09IHBv
cyAmJiBhLnJlc2VydmVTcGFjZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKCQu
aW5BcnJheShheGlzLCBzYW1lUG9zaXRpb24pID09IHNhbWVQb3NpdGlvbi5sZW5ndGggLSAxKQot
ICAgICAgICAgICAgICAgIGF4aXNNYXJnaW4gPSAwOyAvLyBvdXRlcm1vc3QKLQotICAgICAgICAg
ICAgLy8gZGV0ZXJtaW5lIHRpY2sgbGVuZ3RoIC0gaWYgd2UncmUgaW5uZXJtb3N0LCB3ZSBjYW4g
dXNlICJmdWxsIgotICAgICAgICAgICAgaWYgKHRpY2tMZW5ndGggPT0gbnVsbCkgewotICAgICAg
ICAgICAgICAgIHZhciBzYW1lRGlyZWN0aW9uID0gJC5ncmVwKGFsbCwgZnVuY3Rpb24gKGEpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgYS5yZXNlcnZlU3BhY2U7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBpbm5lcm1vc3QgPSAkLmluQXJyYXkoYXhp
cywgc2FtZURpcmVjdGlvbikgPT0gMDsKLSAgICAgICAgICAgICAgICBpZiAoaW5uZXJtb3N0KQot
ICAgICAgICAgICAgICAgICAgICB0aWNrTGVuZ3RoID0gImZ1bGwiOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGlja0xlbmd0aCA9IDU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghaXNOYU4oK3RpY2tMZW5ndGgpKQotICAgICAgICAgICAgICAg
IHBhZGRpbmcgKz0gK3RpY2tMZW5ndGg7Ci0KLSAgICAgICAgICAgIC8vIGNvbXB1dGUgYm94Ci0g
ICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7Ci0gICAgICAgICAgICAgICAg
bGggKz0gcGFkZGluZzsKLQotICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gImJvdHRvbSIpIHsK
LSAgICAgICAgICAgICAgICAgICAgcGxvdE9mZnNldC5ib3R0b20gKz0gbGggKyBheGlzTWFyZ2lu
OwotICAgICAgICAgICAgICAgICAgICBheGlzLmJveCA9IHsgdG9wOiBjYW52YXNIZWlnaHQgLSBw
bG90T2Zmc2V0LmJvdHRvbSwgaGVpZ2h0OiBsaCB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXhpcy5ib3ggPSB7IHRvcDog
cGxvdE9mZnNldC50b3AgKyBheGlzTWFyZ2luLCBoZWlnaHQ6IGxoIH07Ci0gICAgICAgICAgICAg
ICAgICAgIHBsb3RPZmZzZXQudG9wICs9IGxoICsgYXhpc01hcmdpbjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBs
dyArPSBwYWRkaW5nOwotCi0gICAgICAgICAgICAgICAgaWYgKHBvcyA9PSAibGVmdCIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXhpcy5ib3ggPSB7IGxlZnQ6IHBsb3RPZmZzZXQubGVmdCArIGF4
aXNNYXJnaW4sIHdpZHRoOiBsdyB9OwotICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0Lmxl
ZnQgKz0gbHcgKyBheGlzTWFyZ2luOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGxvdE9mZnNldC5yaWdodCArPSBsdyArIGF4
aXNNYXJnaW47Ci0gICAgICAgICAgICAgICAgICAgIGF4aXMuYm94ID0geyBsZWZ0OiBjYW52YXNX
aWR0aCAtIHBsb3RPZmZzZXQucmlnaHQsIHdpZHRoOiBsdyB9OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgIC8vIHNhdmUgZm9yIGZ1dHVyZSByZWZlcmVu
Y2UKLSAgICAgICAgICAgIGF4aXMucG9zaXRpb24gPSBwb3M7Ci0gICAgICAgICAgICBheGlzLnRp
Y2tMZW5ndGggPSB0aWNrTGVuZ3RoOwotICAgICAgICAgICAgYXhpcy5ib3gucGFkZGluZyA9IHBh
ZGRpbmc7Ci0gICAgICAgICAgICBheGlzLmlubmVybW9zdCA9IGlubmVybW9zdDsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGFsbG9jYXRlQXhpc0JveFNlY29uZFBoYXNlKGF4aXMpIHsK
LSAgICAgICAgICAgIC8vIG5vdyB0aGF0IGFsbCBheGlzIGJveGVzIGhhdmUgYmVlbiBwbGFjZWQg
aW4gb25lCi0gICAgICAgICAgICAvLyBkaW1lbnNpb24sIHdlIGNhbiBzZXQgdGhlIHJlbWFpbmlu
ZyBkaW1lbnNpb24gY29vcmRpbmF0ZXMKLSAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9
PSAieCIpIHsKLSAgICAgICAgICAgICAgICBheGlzLmJveC5sZWZ0ID0gcGxvdE9mZnNldC5sZWZ0
IC0gYXhpcy5sYWJlbFdpZHRoIC8gMjsKLSAgICAgICAgICAgICAgICBheGlzLmJveC53aWR0aCA9
IGNhbnZhc1dpZHRoIC0gcGxvdE9mZnNldC5sZWZ0IC0gcGxvdE9mZnNldC5yaWdodCArIGF4aXMu
bGFiZWxXaWR0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIGF4aXMuYm94LnRvcCA9IHBsb3RPZmZzZXQudG9wIC0gYXhpcy5sYWJlbEhlaWdodCAv
IDI7Ci0gICAgICAgICAgICAgICAgYXhpcy5ib3guaGVpZ2h0ID0gY2FudmFzSGVpZ2h0IC0gcGxv
dE9mZnNldC5ib3R0b20gLSBwbG90T2Zmc2V0LnRvcCArIGF4aXMubGFiZWxIZWlnaHQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhZGp1c3RMYXlvdXRGb3JU
aGluZ3NTdGlja2luZ091dCgpIHsKLSAgICAgICAgICAgIC8vIHBvc3NpYmx5IGFkanVzdCBwbG90
IG9mZnNldCB0byBlbnN1cmUgZXZlcnl0aGluZyBzdGF5cwotICAgICAgICAgICAgLy8gaW5zaWRl
IHRoZSBjYW52YXMgYW5kIGlzbid0IGNsaXBwZWQgb2ZmCi0KLSAgICAgICAgICAgIHZhciBtaW5N
YXJnaW4gPSBvcHRpb25zLmdyaWQubWluQm9yZGVyTWFyZ2luLAotICAgICAgICAgICAgICAgIG1h
cmdpbnMgPSB7IHg6IDAsIHk6IDAgfSwgaSwgYXhpczsKLQotICAgICAgICAgICAgLy8gY2hlY2sg
c3R1ZmYgZnJvbSB0aGUgcGxvdCAoRklYTUU6IHRoaXMgc2hvdWxkIGp1c3QgcmVhZAotICAgICAg
ICAgICAgLy8gYSB2YWx1ZSBmcm9tIHRoZSBzZXJpZXMsIG90aGVyd2lzZSBpdCdzIGltcG9zc2li
bGUgdG8KLSAgICAgICAgICAgIC8vIGN1c3RvbWl6ZSkKLSAgICAgICAgICAgIGlmIChtaW5NYXJn
aW4gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1pbk1hcmdpbiA9IDA7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgbWluTWFyZ2luID0gTWF0aC5tYXgobWluTWFyZ2luLCAyICogKHNlcmllc1tpXS5wb2lu
dHMucmFkaXVzICsgc2VyaWVzW2ldLnBvaW50cy5saW5lV2lkdGgvMikpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBtYXJnaW5zLnggPSBtYXJnaW5zLnkgPSBNYXRoLmNlaWwobWluTWFy
Z2luKTsKLQotICAgICAgICAgICAgLy8gY2hlY2sgYXhpcyBsYWJlbHMsIG5vdGUgd2UgZG9uJ3Qg
Y2hlY2sgdGhlIGFjdHVhbAotICAgICAgICAgICAgLy8gbGFiZWxzIGJ1dCBpbnN0ZWFkIHVzZSB0
aGUgb3ZlcmFsbCB3aWR0aC9oZWlnaHQgdG8gbm90Ci0gICAgICAgICAgICAvLyBqdW1wIGFzIG11
Y2ggYXJvdW5kIHdpdGggcmVwbG90cwotICAgICAgICAgICAgJC5lYWNoKGFsbEF4ZXMoKSwgZnVu
Y3Rpb24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGlyID0gYXhpcy5kaXJlY3Rp
b247Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMucmVzZXJ2ZVNwYWNlKQotICAgICAgICAgICAg
ICAgICAgICBtYXJnaW5zW2Rpcl0gPSBNYXRoLmNlaWwoTWF0aC5tYXgobWFyZ2luc1tkaXJdLCAo
ZGlyID09ICJ4IiA/IGF4aXMubGFiZWxXaWR0aCA6IGF4aXMubGFiZWxIZWlnaHQpIC8gMikpOwot
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHBsb3RPZmZzZXQubGVmdCA9IE1hdGgubWF4
KG1hcmdpbnMueCwgcGxvdE9mZnNldC5sZWZ0KTsKLSAgICAgICAgICAgIHBsb3RPZmZzZXQucmln
aHQgPSBNYXRoLm1heChtYXJnaW5zLngsIHBsb3RPZmZzZXQucmlnaHQpOwotICAgICAgICAgICAg
cGxvdE9mZnNldC50b3AgPSBNYXRoLm1heChtYXJnaW5zLnksIHBsb3RPZmZzZXQudG9wKTsKLSAg
ICAgICAgICAgIHBsb3RPZmZzZXQuYm90dG9tID0gTWF0aC5tYXgobWFyZ2lucy55LCBwbG90T2Zm
c2V0LmJvdHRvbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzZXR1cEdyaWQoKSB7
Ci0gICAgICAgICAgICB2YXIgaSwgYXhlcyA9IGFsbEF4ZXMoKSwgc2hvd0dyaWQgPSBvcHRpb25z
LmdyaWQuc2hvdzsKLQotICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcGxvdCdzIG9mZnNl
dCBmcm9tIHRoZSBlZGdlIG9mIHRoZSBjYW52YXMKLQotICAgICAgICAgICAgZm9yICh2YXIgYSBp
biBwbG90T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcmdpbiA9IG9wdGlvbnMuZ3Jp
ZC5tYXJnaW4gfHwgMDsKLSAgICAgICAgICAgICAgICBwbG90T2Zmc2V0W2FdID0gdHlwZW9mIG1h
cmdpbiA9PSAibnVtYmVyIiA/IG1hcmdpbiA6IG1hcmdpblthXSB8fCAwOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBleGVjdXRlSG9va3MoaG9va3MucHJvY2Vzc09mZnNldCwgW3Bsb3RP
ZmZzZXRdKTsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIGdyaWQgaXMgdmlzaWJsZSwgYWRkIGl0
cyBib3JkZXIgd2lkdGggdG8gdGhlIG9mZnNldAotCi0gICAgICAgICAgICBmb3IgKHZhciBhIGlu
IHBsb3RPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBpZih0eXBlb2Yob3B0aW9ucy5ncmlkLmJv
cmRlcldpZHRoKSA9PSAib2JqZWN0IikgewotICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0
W2FdICs9IHNob3dHcmlkID8gb3B0aW9ucy5ncmlkLmJvcmRlcldpZHRoW2FdIDogMDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHBsb3RPZmZzZXRbYV0gKz0gc2hvd0dyaWQgPyBvcHRpb25zLmdyaWQuYm9yZGVyV2lkdGggOiAw
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaW5p
dCBheGVzCi0gICAgICAgICAgICAkLmVhY2goYXhlcywgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAg
ICAgICAgICAgICAgICBheGlzLnNob3cgPSBheGlzLm9wdGlvbnMuc2hvdzsKLSAgICAgICAgICAg
ICAgICBpZiAoYXhpcy5zaG93ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGF4aXMuc2hv
dyA9IGF4aXMudXNlZDsgLy8gYnkgZGVmYXVsdCBhbiBheGlzIGlzIHZpc2libGUgaWYgaXQncyBn
b3QgZGF0YQotCi0gICAgICAgICAgICAgICAgYXhpcy5yZXNlcnZlU3BhY2UgPSBheGlzLnNob3cg
fHwgYXhpcy5vcHRpb25zLnJlc2VydmVTcGFjZTsKLQotICAgICAgICAgICAgICAgIHNldFJhbmdl
KGF4aXMpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChzaG93R3JpZCkgewot
ICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSBmcm9tIHRoZSBwbGFjZWhvbGRlciB0aGUgZm9u
dCBzaXplIH4gaGVpZ2h0IG9mIGZvbnQgfiAxIGVtCi0gICAgICAgICAgICAgICAgdmFyIGZvbnRE
ZWZhdWx0cyA9IHsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHBsYWNlaG9sZGVyLmNzcygi
Zm9udC1zdHlsZSIpLAotICAgICAgICAgICAgICAgICAgICBzaXplOiBNYXRoLnJvdW5kKDAuOCAq
ICgrcGxhY2Vob2xkZXIuY3NzKCJmb250LXNpemUiKS5yZXBsYWNlKCJweCIsICIiKSB8fCAxMykp
LAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBwbGFjZWhvbGRlci5jc3MoImZvbnQtdmFy
aWFudCIpLAotICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IHBsYWNlaG9sZGVyLmNzcygiZm9u
dC13ZWlnaHQiKSwKLSAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiBwbGFjZWhvbGRlci5jc3Mo
ImZvbnQtZmFtaWx5IikKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgdmFy
IGFsbG9jYXRlZEF4ZXMgPSAkLmdyZXAoYXhlcywgZnVuY3Rpb24gKGF4aXMpIHsgcmV0dXJuIGF4
aXMucmVzZXJ2ZVNwYWNlOyB9KTsKLQotICAgICAgICAgICAgICAgICQuZWFjaChhbGxvY2F0ZWRB
eGVzLCBmdW5jdGlvbiAoXywgYXhpcykgewotICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHRo
ZSB0aWNrcwotICAgICAgICAgICAgICAgICAgICBzZXR1cFRpY2tHZW5lcmF0aW9uKGF4aXMpOwot
ICAgICAgICAgICAgICAgICAgICBzZXRUaWNrcyhheGlzKTsKLSAgICAgICAgICAgICAgICAgICAg
c25hcFJhbmdlVG9UaWNrcyhheGlzLCBheGlzLnRpY2tzKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBmaW5kIGxhYmVsV2lkdGgvSGVpZ2h0IGZvciBheGlzCi0gICAgICAgICAgICAgICAgICAg
IGF4aXMuZm9udCA9ICQuZXh0ZW5kKHt9LCBmb250RGVmYXVsdHMsIGF4aXMub3B0aW9ucy5mb250
KTsKLSAgICAgICAgICAgICAgICAgICAgbWVhc3VyZVRpY2tMYWJlbHMoYXhpcyk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB3aXRoIGFsbCBkaW1lbnNpb25zIGNh
bGN1bGF0ZWQsIHdlIGNhbiBjb21wdXRlIHRoZQotICAgICAgICAgICAgICAgIC8vIGF4aXMgYm91
bmRpbmcgYm94ZXMsIHN0YXJ0IGZyb20gdGhlIG91dHNpZGUKLSAgICAgICAgICAgICAgICAvLyAo
cmV2ZXJzZSBvcmRlcikKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBhbGxvY2F0ZWRBeGVzLmxl
bmd0aCAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZUF4aXNC
b3hGaXJzdFBoYXNlKGFsbG9jYXRlZEF4ZXNbaV0pOwotCi0gICAgICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHdlJ3ZlIGdvdCBlbm91Z2ggc3BhY2UgZm9yIHRoaW5ncyB0aGF0Ci0gICAgICAgICAg
ICAgICAgLy8gbWlnaHQgc3RpY2sgb3V0Ci0gICAgICAgICAgICAgICAgYWRqdXN0TGF5b3V0Rm9y
VGhpbmdzU3RpY2tpbmdPdXQoKTsKLQotICAgICAgICAgICAgICAgICQuZWFjaChhbGxvY2F0ZWRB
eGVzLCBmdW5jdGlvbiAoXywgYXhpcykgewotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZUF4
aXNCb3hTZWNvbmRQaGFzZShheGlzKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcGxvdFdpZHRoID0gY2FudmFzV2lkdGggLSBwbG90T2Zmc2V0Lmxl
ZnQgLSBwbG90T2Zmc2V0LnJpZ2h0OwotICAgICAgICAgICAgcGxvdEhlaWdodCA9IGNhbnZhc0hl
aWdodCAtIHBsb3RPZmZzZXQuYm90dG9tIC0gcGxvdE9mZnNldC50b3A7Ci0KLSAgICAgICAgICAg
IC8vIG5vdyB3ZSBnb3QgdGhlIHByb3BlciBwbG90IGRpbWVuc2lvbnMsIHdlIGNhbiBjb21wdXRl
IHRoZSBzY2FsaW5nCi0gICAgICAgICAgICAkLmVhY2goYXhlcywgZnVuY3Rpb24gKF8sIGF4aXMp
IHsKLSAgICAgICAgICAgICAgICBzZXRUcmFuc2Zvcm1hdGlvbkhlbHBlcnMoYXhpcyk7Ci0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgaW5zZXJ0TGVnZW5kKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBzZXRSYW5nZShheGlzKSB7Ci0gICAgICAgICAgICB2YXIgb3B0cyA9
IGF4aXMub3B0aW9ucywKLSAgICAgICAgICAgICAgICBtaW4gPSArKG9wdHMubWluICE9IG51bGwg
PyBvcHRzLm1pbiA6IGF4aXMuZGF0YW1pbiksCi0gICAgICAgICAgICAgICAgbWF4ID0gKyhvcHRz
Lm1heCAhPSBudWxsID8gb3B0cy5tYXggOiBheGlzLmRhdGFtYXgpLAotICAgICAgICAgICAgICAg
IGRlbHRhID0gbWF4IC0gbWluOwotCi0gICAgICAgICAgICBpZiAoZGVsdGEgPT0gMC4wKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gZGVnZW5lcmF0ZSBjYXNlCi0gICAgICAgICAgICAgICAgdmFyIHdp
ZGVuID0gbWF4ID09IDAgPyAxIDogMC4wMTsKLQotICAgICAgICAgICAgICAgIGlmIChvcHRzLm1p
biA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBtaW4gLT0gd2lkZW47Ci0gICAgICAgICAg
ICAgICAgLy8gYWx3YXlzIHdpZGVuIG1heCBpZiB3ZSBjb3VsZG4ndCB3aWRlbiBtaW4gdG8gZW5z
dXJlIHdlCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgZmFsbCBpbnRvIG1pbiA9PSBtYXggd2hp
Y2ggZG9lc24ndCB3b3JrCi0gICAgICAgICAgICAgICAgaWYgKG9wdHMubWF4ID09IG51bGwgfHwg
b3B0cy5taW4gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgbWF4ICs9IHdpZGVuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gY29uc2lk
ZXIgYXV0b3NjYWxpbmcKLSAgICAgICAgICAgICAgICB2YXIgbWFyZ2luID0gb3B0cy5hdXRvc2Nh
bGVNYXJnaW47Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbiAhPSBudWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChvcHRzLm1pbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtaW4gLT0gZGVsdGEgKiBtYXJnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBt
YWtlIHN1cmUgd2UgZG9uJ3QgZ28gYmVsb3cgemVybyBpZiBhbGwgdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcmUgcG9zaXRpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtaW4gPCAwICYmIGF4aXMuZGF0YW1pbiAhPSBudWxsICYmIGF4aXMuZGF0YW1pbiA+PSAwKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubWF4ID09IG51bGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1heCArPSBkZWx0YSAqIG1hcmdpbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtYXggPiAwICYmIGF4aXMuZGF0YW1heCAhPSBudWxsICYmIGF4aXMuZGF0YW1h
eCA8PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBheGlzLm1pbiA9IG1pbjsKLSAgICAgICAgICAgIGF4aXMubWF4ID0gbWF4OwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0dXBUaWNrR2VuZXJhdGlvbihheGlzKSB7Ci0gICAgICAg
ICAgICB2YXIgb3B0cyA9IGF4aXMub3B0aW9uczsKLQotICAgICAgICAgICAgLy8gZXN0aW1hdGUg
bnVtYmVyIG9mIHRpY2tzCi0gICAgICAgICAgICB2YXIgbm9UaWNrczsKLSAgICAgICAgICAgIGlm
ICh0eXBlb2Ygb3B0cy50aWNrcyA9PSAibnVtYmVyIiAmJiBvcHRzLnRpY2tzID4gMCkKLSAgICAg
ICAgICAgICAgICBub1RpY2tzID0gb3B0cy50aWNrczsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvLyBoZXVyaXN0aWMgYmFzZWQgb24gdGhlIG1vZGVsIGEqc3FydCh4KSBmaXR0
ZWQgdG8KLSAgICAgICAgICAgICAgICAvLyBzb21lIGRhdGEgcG9pbnRzIHRoYXQgc2VlbWVkIHJl
YXNvbmFibGUKLSAgICAgICAgICAgICAgICBub1RpY2tzID0gMC4zICogTWF0aC5zcXJ0KGF4aXMu
ZGlyZWN0aW9uID09ICJ4IiA/IGNhbnZhc1dpZHRoIDogY2FudmFzSGVpZ2h0KTsKLQotICAgICAg
ICAgICAgYXhpcy5kZWx0YSA9IChheGlzLm1heCAtIGF4aXMubWluKSAvIG5vVGlja3M7Ci0KLSAg
ICAgICAgICAgIC8vIFRpbWUgbW9kZSB3YXMgbW92ZWQgdG8gYSBwbHVnLWluIGluIDAuOCwgYnV0
IHNpbmNlIHNvIG1hbnkgcGVvcGxlIHVzZSB0aGlzCi0gICAgICAgICAgICAvLyB3ZSdsbCBhZGQg
YW4gZXNwZWNpYWxseSBmcmllbmRseSBtYWtlIHN1cmUgdGhleSByZW1lbWJlcmVkIHRvIGluY2x1
ZGUgaXQuCi0KLSAgICAgICAgICAgIGlmIChvcHRzLm1vZGUgPT0gInRpbWUiICYmICFheGlzLnRp
Y2tHZW5lcmF0b3IpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRpbWUgbW9k
ZSByZXF1aXJlcyB0aGUgZmxvdC50aW1lIHBsdWdpbi4iKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gRmxvdCBzdXBwb3J0cyBiYXNlLTEwIGF4ZXM7IGFueSBvdGhlciBtb2RlIGVs
c2UgaXMgaGFuZGxlZCBieSBhIHBsdWctaW4sCi0gICAgICAgICAgICAvLyBsaWtlIGZsb3QudGlt
ZS5qcy4KLQotICAgICAgICAgICAgaWYgKCFheGlzLnRpY2tHZW5lcmF0b3IpIHsKLQotICAgICAg
ICAgICAgICAgIGF4aXMudGlja0dlbmVyYXRvciA9IGZ1bmN0aW9uIChheGlzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBtYXhEZWMgPSBvcHRzLnRpY2tEZWNpbWFscywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYyA9IC1NYXRoLmZsb29yKE1hdGgubG9nKGF4aXMuZGVsdGEpIC8gTWF0
aC5MTjEwKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGVjICE9IG51bGwgJiYgZGVj
ID4gbWF4RGVjKQotICAgICAgICAgICAgICAgICAgICAgICAgZGVjID0gbWF4RGVjOwotCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBtYWduID0gTWF0aC5wb3coMTAsIC1kZWMpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybSA9IGF4aXMuZGVsdGEgLyBtYWduLCAvLyBub3JtIGlzIGJldHdl
ZW4gMS4wIGFuZCAxMC4wCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplLAotCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0aWNrcyA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHYgPSBOdW1iZXIuTmFOLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJldjsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9ybSA8IDEuNSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUgPSAxOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub3JtIDwgMykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBzcGVjaWFsIGNhc2UgZm9yIDIuNSwgcmVxdWlyZXMgYW4gZXh0cmEgZGVjaW1hbAotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vcm0gPiAyLjI1ICYmIChtYXhEZWMgPT0gbnVsbCB8fCBk
ZWMgKyAxIDw9IG1heERlYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0g
Mi41OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZGVjOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vcm0gPCA3LjUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gNTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBzaXplID0gMTA7Ci0KLSAgICAgICAgICAgICAgICAgICAg
c2l6ZSAqPSBtYWduOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLm1pblRpY2tTaXpl
ICE9IG51bGwgJiYgc2l6ZSA8IG9wdHMubWluVGlja1NpemUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzaXplID0gb3B0cy5taW5UaWNrU2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICBheGlz
LnRpY2tEZWNpbWFscyA9IE1hdGgubWF4KDAsIG1heERlYyAhPSBudWxsID8gbWF4RGVjIDogZGVj
KTsKLSAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrU2l6ZSA9IG9wdHMudGlja1NpemUgfHwg
c2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGZsb29ySW5CYXNlKGF4aXMubWlu
LCBheGlzLnRpY2tTaXplKQotCi0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXYgPSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0YXJ0
ICsgaSAqIGF4aXMudGlja1NpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aWNrcy5wdXNo
KHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgICAgICB9
IHdoaWxlICh2IDwgYXhpcy5tYXggJiYgdiAhPSBwcmV2KTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRpY2tzOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBheGlz
LnRpY2tGb3JtYXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUsIGF4aXMpIHsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgZmFjdG9yID0gYXhpcy50aWNrRGVjaW1hbHMgPyBNYXRoLnBvdygxMCwgYXhp
cy50aWNrRGVjaW1hbHMpIDogMTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdHRlZCA9
ICIiICsgTWF0aC5yb3VuZCh2YWx1ZSAqIGZhY3RvcikgLyBmYWN0b3I7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGlja0RlY2ltYWxzIHdhcyBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHdl
IGhhdmUgZXhhY3RseSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIG11Y2ggcHJlY2lzaW9u
OyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgdmFsdWUncyBvd24gcHJlY2lzaW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChheGlzLnRpY2tEZWNpbWFscyAhPSBudWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZGVjaW1hbCA9IGZvcm1hdHRlZC5pbmRleE9mKCIuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gZGVjaW1hbCA9PSAtMSA/IDAg
OiBmb3JtYXR0ZWQubGVuZ3RoIC0gZGVjaW1hbCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlY2lzaW9uIDwgYXhpcy50aWNrRGVjaW1hbHMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHByZWNpc2lvbiA/IGZvcm1hdHRlZCA6IGZvcm1hdHRlZCArICIu
IikgKyAoIiIgKyBmYWN0b3IpLnN1YnN0cigxLCBheGlzLnRpY2tEZWNpbWFscyAtIHByZWNpc2lv
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0cy50aWNr
Rm9ybWF0dGVyKSkKLSAgICAgICAgICAgICAgICBheGlzLnRpY2tGb3JtYXR0ZXIgPSBmdW5jdGlv
biAodiwgYXhpcykgeyByZXR1cm4gIiIgKyBvcHRzLnRpY2tGb3JtYXR0ZXIodiwgYXhpcyk7IH07
Ci0KLSAgICAgICAgICAgIGlmIChvcHRzLmFsaWduVGlja3NXaXRoQXhpcyAhPSBudWxsKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG90aGVyQXhpcyA9IChheGlzLmRpcmVjdGlvbiA9PSAieCIgPyB4
YXhlcyA6IHlheGVzKVtvcHRzLmFsaWduVGlja3NXaXRoQXhpcyAtIDFdOwotICAgICAgICAgICAg
ICAgIGlmIChvdGhlckF4aXMgJiYgb3RoZXJBeGlzLnVzZWQgJiYgb3RoZXJBeGlzICE9IGF4aXMp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29uc2lkZXIgc25hcHBpbmcgbWluL21heCB0byBv
dXRlcm1vc3QgbmljZSB0aWNrcwotICAgICAgICAgICAgICAgICAgICB2YXIgbmljZVRpY2tzID0g
YXhpcy50aWNrR2VuZXJhdG9yKGF4aXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAobmljZVRp
Y2tzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLm1pbiA9
PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMubWluID0gTWF0aC5taW4o
YXhpcy5taW4sIG5pY2VUaWNrc1swXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0
cy5tYXggPT0gbnVsbCAmJiBuaWNlVGlja3MubGVuZ3RoID4gMSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBheGlzLm1heCA9IE1hdGgubWF4KGF4aXMubWF4LCBuaWNlVGlja3NbbmljZVRp
Y2tzLmxlbmd0aCAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGF4aXMudGlja0dlbmVyYXRvciA9IGZ1bmN0aW9uIChheGlzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb3B5IHRpY2tzLCBzY2FsZWQgdG8gdGhpcyBheGlzCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBbXSwgdiwgaTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBvdGhlckF4aXMudGlja3MubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gKG90aGVyQXhpcy50aWNrc1tpXS52IC0gb3Ro
ZXJBeGlzLm1pbikgLyAob3RoZXJBeGlzLm1heCAtIG90aGVyQXhpcy5taW4pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPSBheGlzLm1pbiArIHYgKiAoYXhpcy5tYXggLSBheGlzLm1p
bik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja3MucHVzaCh2KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrczsK
LSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtaWdo
dCBuZWVkIGFuIGV4dHJhIGRlY2ltYWwgc2luY2UgZm9yY2VkCi0gICAgICAgICAgICAgICAgICAg
IC8vIHRpY2tzIGRvbid0IG5lY2Vzc2FyaWx5IGZpdCBuYXR1cmFsbHkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFheGlzLm1vZGUgJiYgb3B0cy50aWNrRGVjaW1hbHMgPT0gbnVsbCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhRGVjID0gTWF0aC5tYXgoMCwgLU1hdGguZmxv
b3IoTWF0aC5sb2coYXhpcy5kZWx0YSkgLyBNYXRoLkxOMTApICsgMSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHMgPSBheGlzLnRpY2tHZW5lcmF0b3IoYXhpcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9ubHkgcHJvY2VlZCBpZiB0aGUgdGljayBpbnRlcnZhbCByb3Vu
ZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFuIGV4dHJhIGRlY2ltYWwgZG9l
c24ndCBnaXZlIHVzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gYXQgZW5kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0cy5sZW5ndGggPiAxICYmIC9cLi4qMCQvLnRl
c3QoKHRzWzFdIC0gdHNbMF0pLnRvRml4ZWQoZXh0cmFEZWMpKSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXhpcy50aWNrRGVjaW1hbHMgPSBleHRyYURlYzsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHNldFRpY2tzKGF4aXMpIHsKLSAgICAgICAgICAgIHZhciBvdGlja3Mg
PSBheGlzLm9wdGlvbnMudGlja3MsIHRpY2tzID0gW107Ci0gICAgICAgICAgICBpZiAob3RpY2tz
ID09IG51bGwgfHwgKHR5cGVvZiBvdGlja3MgPT0gIm51bWJlciIgJiYgb3RpY2tzID4gMCkpCi0g
ICAgICAgICAgICAgICAgdGlja3MgPSBheGlzLnRpY2tHZW5lcmF0b3IoYXhpcyk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChvdGlja3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9u
KG90aWNrcykpCi0gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRoZSB0aWNrcwotICAg
ICAgICAgICAgICAgICAgICB0aWNrcyA9IG90aWNrcyhheGlzKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHRpY2tzID0gb3RpY2tzOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBjbGVhbiB1cC9sYWJlbGlmeSB0aGUgc3VwcGxpZWQgdGlja3MsIGNv
cHkgdGhlbSBvdmVyCi0gICAgICAgICAgICB2YXIgaSwgdjsKLSAgICAgICAgICAgIGF4aXMudGlj
a3MgPSBbXTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aWNrcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgdmFy
IHQgPSB0aWNrc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQgPT0gIm9iamVjdCIp
IHsKLSAgICAgICAgICAgICAgICAgICAgdiA9ICt0WzBdOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodC5sZW5ndGggPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSB0WzFdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHYgPSArdDsKLSAgICAgICAgICAgICAgICBpZiAobGFiZWwgPT0gbnVsbCkKLSAgICAgICAg
ICAgICAgICAgICAgbGFiZWwgPSBheGlzLnRpY2tGb3JtYXR0ZXIodiwgYXhpcyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFpc05hTih2KSkKLSAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrcy5w
dXNoKHsgdjogdiwgbGFiZWw6IGxhYmVsIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gc25hcFJhbmdlVG9UaWNrcyhheGlzLCB0aWNrcykgewotICAgICAg
ICAgICAgaWYgKGF4aXMub3B0aW9ucy5hdXRvc2NhbGVNYXJnaW4gJiYgdGlja3MubGVuZ3RoID4g
MCkgewotICAgICAgICAgICAgICAgIC8vIHNuYXAgdG8gdGlja3MKLSAgICAgICAgICAgICAgICBp
ZiAoYXhpcy5vcHRpb25zLm1pbiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBheGlzLm1p
biA9IE1hdGgubWluKGF4aXMubWluLCB0aWNrc1swXS52KTsKLSAgICAgICAgICAgICAgICBpZiAo
YXhpcy5vcHRpb25zLm1heCA9PSBudWxsICYmIHRpY2tzLmxlbmd0aCA+IDEpCi0gICAgICAgICAg
ICAgICAgICAgIGF4aXMubWF4ID0gTWF0aC5tYXgoYXhpcy5tYXgsIHRpY2tzW3RpY2tzLmxlbmd0
aCAtIDFdLnYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
ZHJhdygpIHsKLSAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzV2lkdGgsIGNh
bnZhc0hlaWdodCk7Ci0KLSAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3QmFja2dy
b3VuZCwgW2N0eF0pOwotCi0gICAgICAgICAgICB2YXIgZ3JpZCA9IG9wdGlvbnMuZ3JpZDsKLQot
ICAgICAgICAgICAgLy8gZHJhdyBiYWNrZ3JvdW5kLCBpZiBhbnkKLSAgICAgICAgICAgIGlmIChn
cmlkLnNob3cgJiYgZ3JpZC5iYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICAgICAgZHJhd0Jh
Y2tncm91bmQoKTsKLQotICAgICAgICAgICAgaWYgKGdyaWQuc2hvdyAmJiAhZ3JpZC5hYm92ZURh
dGEpIHsKLSAgICAgICAgICAgICAgICBkcmF3R3JpZCgpOwotICAgICAgICAgICAgICAgIGRyYXdB
eGlzTGFiZWxzKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0ZUhvb2tz
KGhvb2tzLmRyYXdTZXJpZXMsIFtjdHgsIHNlcmllc1tpXV0pOwotICAgICAgICAgICAgICAgIGRy
YXdTZXJpZXMoc2VyaWVzW2ldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXhlY3V0
ZUhvb2tzKGhvb2tzLmRyYXcsIFtjdHhdKTsKLQotICAgICAgICAgICAgaWYgKGdyaWQuc2hvdyAm
JiBncmlkLmFib3ZlRGF0YSkgewotICAgICAgICAgICAgICAgIGRyYXdHcmlkKCk7Ci0gICAgICAg
ICAgICAgICAgZHJhd0F4aXNMYWJlbHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGV4dHJhY3RSYW5nZShyYW5nZXMsIGNvb3JkKSB7Ci0gICAgICAgICAg
ICB2YXIgYXhpcywgZnJvbSwgdG8sIGtleSwgYXhlcyA9IGFsbEF4ZXMoKTsKLQotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgYXhpcyA9IGF4ZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMuZGlyZWN0aW9uID09
IGNvb3JkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGNvb3JkICsgYXhpcy5uICsgImF4
aXMiOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlc1trZXldICYmIGF4aXMubiA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gY29vcmQgKyAiYXhpcyI7IC8vIHN1cHBv
cnQgeDFheGlzIGFzIHhheGlzCi0gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNba2V5XSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHJhbmdlc1trZXldLmZyb207Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0byA9IHJhbmdlc1trZXldLnRvOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGJhY2t3YXJkcy1jb21wYXQgc3R1ZmYg
LSB0byBiZSByZW1vdmVkIGluIGZ1dHVyZQotICAgICAgICAgICAgaWYgKCFyYW5nZXNba2V5XSkg
ewotICAgICAgICAgICAgICAgIGF4aXMgPSBjb29yZCA9PSAieCIgPyB4YXhlc1swXSA6IHlheGVz
WzBdOwotICAgICAgICAgICAgICAgIGZyb20gPSByYW5nZXNbY29vcmQgKyAiMSJdOwotICAgICAg
ICAgICAgICAgIHRvID0gcmFuZ2VzW2Nvb3JkICsgIjIiXTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gYXV0by1yZXZlcnNlIGFzIGFuIGFkZGVkIGJvbnVzCi0gICAgICAgICAgICBp
ZiAoZnJvbSAhPSBudWxsICYmIHRvICE9IG51bGwgJiYgZnJvbSA+IHRvKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRtcCA9IGZyb207Ci0gICAgICAgICAgICAgICAgZnJvbSA9IHRvOwotICAgICAg
ICAgICAgICAgIHRvID0gdG1wOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
eyBmcm9tOiBmcm9tLCB0bzogdG8sIGF4aXM6IGF4aXMgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGRyYXdCYWNrZ3JvdW5kKCkgewotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAg
ICAgICAgICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7
Ci0KLSAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBnZXRDb2xvck9yR3JhZGllbnQob3B0aW9u
cy5ncmlkLmJhY2tncm91bmRDb2xvciwgcGxvdEhlaWdodCwgMCwgInJnYmEoMjU1LCAyNTUsIDI1
NSwgMCkiKTsKLSAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBwbG90V2lkdGgsIHBsb3RI
ZWlnaHQpOwotICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGRyYXdHcmlkKCkgewotICAgICAgICAgICAgdmFyIGksIGF4ZXMsIGJ3LCBiYzsK
LQotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC50cmFuc2xhdGUocGxv
dE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgbWFy
a2luZ3MKLSAgICAgICAgICAgIHZhciBtYXJraW5ncyA9IG9wdGlvbnMuZ3JpZC5tYXJraW5nczsK
LSAgICAgICAgICAgIGlmIChtYXJraW5ncykgewotICAgICAgICAgICAgICAgIGlmICgkLmlzRnVu
Y3Rpb24obWFya2luZ3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF4ZXMgPSBwbG90LmdldEF4
ZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8geG1pbiBldGMuIGlzIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5LCB0byBiZQotICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVkIGluIHRoZSBm
dXR1cmUKLSAgICAgICAgICAgICAgICAgICAgYXhlcy54bWluID0gYXhlcy54YXhpcy5taW47Ci0g
ICAgICAgICAgICAgICAgICAgIGF4ZXMueG1heCA9IGF4ZXMueGF4aXMubWF4OwotICAgICAgICAg
ICAgICAgICAgICBheGVzLnltaW4gPSBheGVzLnlheGlzLm1pbjsKLSAgICAgICAgICAgICAgICAg
ICAgYXhlcy55bWF4ID0gYXhlcy55YXhpcy5tYXg7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWFy
a2luZ3MgPSBtYXJraW5ncyhheGVzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbWFya2luZ3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIG0gPSBtYXJraW5nc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhy
YW5nZSA9IGV4dHJhY3RSYW5nZShtLCAieCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgeXJh
bmdlID0gZXh0cmFjdFJhbmdlKG0sICJ5Iik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZmls
bCBpbiBtaXNzaW5nCi0gICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UuZnJvbSA9PSBudWxs
KQotICAgICAgICAgICAgICAgICAgICAgICAgeHJhbmdlLmZyb20gPSB4cmFuZ2UuYXhpcy5taW47
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UudG8gPT0gbnVsbCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHhyYW5nZS50byA9IHhyYW5nZS5heGlzLm1heDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHlyYW5nZS5mcm9tID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB5
cmFuZ2UuZnJvbSA9IHlyYW5nZS5heGlzLm1pbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHly
YW5nZS50byA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgeXJhbmdlLnRvID0geXJh
bmdlLmF4aXMubWF4OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsaXAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHhyYW5nZS50byA8IHhyYW5nZS5heGlzLm1pbiB8fCB4cmFuZ2UuZnJvbSA+
IHhyYW5nZS5heGlzLm1heCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgeXJhbmdlLnRvIDwg
eXJhbmdlLmF4aXMubWluIHx8IHlyYW5nZS5mcm9tID4geXJhbmdlLmF4aXMubWF4KQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgeHJhbmdl
LmZyb20gPSBNYXRoLm1heCh4cmFuZ2UuZnJvbSwgeHJhbmdlLmF4aXMubWluKTsKLSAgICAgICAg
ICAgICAgICAgICAgeHJhbmdlLnRvID0gTWF0aC5taW4oeHJhbmdlLnRvLCB4cmFuZ2UuYXhpcy5t
YXgpOwotICAgICAgICAgICAgICAgICAgICB5cmFuZ2UuZnJvbSA9IE1hdGgubWF4KHlyYW5nZS5m
cm9tLCB5cmFuZ2UuYXhpcy5taW4pOwotICAgICAgICAgICAgICAgICAgICB5cmFuZ2UudG8gPSBN
YXRoLm1pbih5cmFuZ2UudG8sIHlyYW5nZS5heGlzLm1heCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHhyYW5nZS5mcm9tID09IHhyYW5nZS50byAmJiB5cmFuZ2UuZnJvbSA9PSB5cmFuZ2Uu
dG8pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyB0aGVuIGRyYXcKLSAgICAgICAgICAgICAgICAgICAgeHJhbmdlLmZyb20gPSB4cmFu
Z2UuYXhpcy5wMmMoeHJhbmdlLmZyb20pOwotICAgICAgICAgICAgICAgICAgICB4cmFuZ2UudG8g
PSB4cmFuZ2UuYXhpcy5wMmMoeHJhbmdlLnRvKTsKLSAgICAgICAgICAgICAgICAgICAgeXJhbmdl
LmZyb20gPSB5cmFuZ2UuYXhpcy5wMmMoeXJhbmdlLmZyb20pOwotICAgICAgICAgICAgICAgICAg
ICB5cmFuZ2UudG8gPSB5cmFuZ2UuYXhpcy5wMmMoeXJhbmdlLnRvKTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoeHJhbmdlLmZyb20gPT0geHJhbmdlLnRvIHx8IHlyYW5nZS5mcm9tID09IHly
YW5nZS50bykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyBsaW5lCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlU3R5bGUgPSBtLmNvbG9yIHx8IG9wdGlvbnMuZ3JpZC5tYXJraW5nc0NvbG9y
OwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IG0ubGluZVdpZHRoIHx8
IG9wdGlvbnMuZ3JpZC5tYXJraW5nc0xpbmVXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5tb3ZlVG8oeHJhbmdlLmZyb20sIHlyYW5nZS5mcm9tKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5saW5lVG8oeHJhbmdlLnRvLCB5cmFuZ2UudG8pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsbCBhcmVhCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gbS5jb2xvciB8fCBvcHRpb25z
LmdyaWQubWFya2luZ3NDb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVj
dCh4cmFuZ2UuZnJvbSwgeXJhbmdlLnRvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhyYW5nZS50byAtIHhyYW5nZS5mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHlyYW5nZS5mcm9tIC0geXJhbmdlLnRvKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
ZHJhdyB0aGUgdGlja3MKLSAgICAgICAgICAgIGF4ZXMgPSBhbGxBeGVzKCk7Ci0gICAgICAgICAg
ICBidyA9IG9wdGlvbnMuZ3JpZC5ib3JkZXJXaWR0aDsKLQotICAgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBheGVzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF4aXMg
PSBheGVzW2pdLCBib3ggPSBheGlzLmJveCwKLSAgICAgICAgICAgICAgICAgICAgdCA9IGF4aXMu
dGlja0xlbmd0aCwgeCwgeSwgeG9mZiwgeW9mZjsKLSAgICAgICAgICAgICAgICBpZiAoIWF4aXMu
c2hvdyB8fCBheGlzLnRpY2tzLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGF4aXMub3B0aW9ucy50
aWNrQ29sb3IgfHwgJC5jb2xvci5wYXJzZShheGlzLm9wdGlvbnMuY29sb3IpLnNjYWxlKCdhJywg
MC4yMikudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKLQot
ICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGVkZ2VzCi0gICAgICAgICAgICAgICAgaWYgKGF4
aXMuZGlyZWN0aW9uID09ICJ4IikgewotICAgICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHQgPT0gImZ1bGwiKQotICAgICAgICAgICAgICAgICAgICAgICAg
eSA9IChheGlzLnBvc2l0aW9uID09ICJ0b3AiID8gMCA6IHBsb3RIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB5ID0gYm94LnRvcCAtIHBs
b3RPZmZzZXQudG9wICsgKGF4aXMucG9zaXRpb24gPT0gInRvcCIgPyBib3guaGVpZ2h0IDogMCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICB5ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gImZ1bGwiKQotICAg
ICAgICAgICAgICAgICAgICAgICAgeCA9IChheGlzLnBvc2l0aW9uID09ICJsZWZ0IiA/IDAgOiBw
bG90V2lkdGgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICB4ID0gYm94LmxlZnQgLSBwbG90T2Zmc2V0LmxlZnQgKyAoYXhpcy5wb3NpdGlvbiA9PSAi
bGVmdCIgPyBib3gud2lkdGggOiAwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBkcmF3IHRpY2sgYmFyCi0gICAgICAgICAgICAgICAgaWYgKCFheGlzLmlubmVybW9z
dCkgewotICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHhvZmYgPSB5b2ZmID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMuZGly
ZWN0aW9uID09ICJ4IikKLSAgICAgICAgICAgICAgICAgICAgICAgIHhvZmYgPSBwbG90V2lkdGg7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHlvZmYg
PSBwbG90SGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgubGluZVdpZHRoID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKHgpICsgMC41Owot
ICAgICAgICAgICAgICAgICAgICAgICAgeSA9IE1hdGguZmxvb3IoeSkgKyAwLjU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpOwot
ICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyB4b2ZmLCB5ICsgeW9mZik7Ci0gICAg
ICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBkcmF3IHRpY2tzCi0gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgp
OwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBheGlzLnRpY2tzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gYXhpcy50aWNrc1tpXS52OwotCi0gICAg
ICAgICAgICAgICAgICAgIHhvZmYgPSB5b2ZmID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAodiA8IGF4aXMubWluIHx8IHYgPiBheGlzLm1heAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc2tpcCB0aG9zZSBseWluZyBvbiB0aGUgYXhlcyBpZiB3ZSBnb3QgYSBib3JkZXIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHx8ICh0ID09ICJmdWxsIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmICgodHlwZW9mIGJ3ID09ICJvYmplY3QiICYmIGJ3W2F4aXMucG9zaXRpb25dID4g
MCkgfHwgYncgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2ID09IGF4aXMu
bWluIHx8IHYgPT0gYXhpcy5tYXgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHggPSBheGlzLnAyYyh2KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHlvZmYgPSB0ID09ICJmdWxsIiA/IC1wbG90SGVpZ2h0IDogdDsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGF4aXMucG9zaXRpb24gPT0gInRvcCIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeW9mZiA9IC15b2ZmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGF4aXMu
cDJjKHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgeG9mZiA9IHQgPT0gImZ1bGwiID8gLXBs
b3RXaWR0aCA6IHQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzLnBvc2l0aW9u
ID09ICJsZWZ0IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2ZmID0gLXhvZmY7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LmxpbmVX
aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24g
PT0gIngiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBNYXRoLmZsb29yKHgpICsg
MC41OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHkgPSBNYXRoLmZsb29yKHkpICsgMC41OwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTsKLSAgICAgICAgICAgICAgICAg
ICAgY3R4LmxpbmVUbyh4ICsgeG9mZiwgeSArIHlvZmYpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAgICAgIH0KLQotCi0gICAgICAg
ICAgICAvLyBkcmF3IGJvcmRlcgotICAgICAgICAgICAgaWYgKGJ3KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgZWl0aGVyIGJvcmRlcldpZHRoIG9yIGJvcmRlckNvbG9yIGlzIGFuIG9iamVjdCwg
dGhlbiBkcmF3IHRoZSBib3JkZXIKLSAgICAgICAgICAgICAgICAvLyBsaW5lIGJ5IGxpbmUgaW5z
dGVhZCBvZiBhcyBvbmUgcmVjdGFuZ2xlCi0gICAgICAgICAgICAgICAgYmMgPSBvcHRpb25zLmdy
aWQuYm9yZGVyQ29sb3I7Ci0gICAgICAgICAgICAgICAgaWYodHlwZW9mIGJ3ID09ICJvYmplY3Qi
IHx8IHR5cGVvZiBiYyA9PSAib2JqZWN0IikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIGJ3ICE9PSAib2JqZWN0IikgewotICAgICAgICAgICAgICAgICAgICAgICAgYncgPSB7dG9w
OiBidywgcmlnaHQ6IGJ3LCBib3R0b206IGJ3LCBsZWZ0OiBid307Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYyAhPT0gIm9iamVjdCIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJjID0ge3RvcDogYmMsIHJpZ2h0OiBiYywgYm90dG9t
OiBiYywgbGVmdDogYmN9OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJ3LnRvcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJv
a2VTdHlsZSA9IGJjLnRvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGgg
PSBidy50b3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKDAgLSBidy5sZWZ0LCAwIC0gYncudG9wLzIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhwbG90V2lkdGgsIDAgLSBidy50
b3AvMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYncucmlnaHQgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBiYy5yaWdodDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBidy5yaWdodDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0
eC5tb3ZlVG8ocGxvdFdpZHRoICsgYncucmlnaHQgLyAyLCAwIC0gYncudG9wKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN0eC5saW5lVG8ocGxvdFdpZHRoICsgYncucmlnaHQgLyAyLCBwbG90
SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChidy5ib3R0b20gPiAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBiYy5ib3R0b207Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gYncuYm90dG9tOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY3R4Lm1vdmVUbyhwbG90V2lkdGggKyBidy5yaWdodCwgcGxvdEhlaWdodCArIGJ3LmJvdHRv
bSAvIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbygwLCBwbG90SGVpZ2h0
ICsgYncuYm90dG9tIC8gMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYncubGVm
dCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGJjLmxl
ZnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gYncubGVmdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5tb3ZlVG8oMCAtIGJ3LmxlZnQvMiwgcGxvdEhlaWdodCArIGJ3LmJvdHRvbSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKDAtIGJ3LmxlZnQvMiwgMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBidzsKLSAgICAgICAgICAgICAgICAgICAgY3R4LnN0
cm9rZVN0eWxlID0gb3B0aW9ucy5ncmlkLmJvcmRlckNvbG9yOwotICAgICAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlUmVjdCgtYncvMiwgLWJ3LzIsIHBsb3RXaWR0aCArIGJ3LCBwbG90SGVpZ2h0
ICsgYncpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdBeGlzTGFi
ZWxzKCkgewotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLQotICAgICAgICAgICAgJC5lYWNoKGFs
bEF4ZXMoKSwgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWF4aXMu
c2hvdyB8fCBheGlzLnRpY2tzLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICB2YXIgYm94ID0gYXhpcy5ib3gsIGYgPSBheGlzLmZvbnQ7
Ci0gICAgICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIuYXBwZW5kKCc8ZGl2IHN0eWxlPSJwb3Np
dGlvbjphYnNvbHV0ZTtvcGFjaXR5OjAuMTA7YmFja2dyb3VuZC1jb2xvcjpyZWQ7bGVmdDonICsg
Ym94LmxlZnQgKyAncHg7dG9wOicgKyBib3gudG9wICsgJ3B4O3dpZHRoOicgKyBib3gud2lkdGgg
KyAgJ3B4O2hlaWdodDonICsgYm94LmhlaWdodCArICdweCI+PC9kaXY+JykgLy8gZGVidWcKLQot
ICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBheGlzLm9wdGlvbnMuY29sb3I7Ci0gICAg
ICAgICAgICAgICAgLy8gSW1wb3J0YW50OiBEb24ndCB1c2UgcXVvdGVzIGFyb3VuZCBheGlzLmZv
bnQuZmFtaWx5ISBKdXN0IGFyb3VuZCBzaW5nbGUKLSAgICAgICAgICAgICAgICAvLyBmb250IG5h
bWVzIGxpa2UgJ1RpbWVzIE5ldyBSb21hbicgdGhhdCBoYXZlIGEgc3BhY2Ugb3Igc3BlY2lhbCBj
aGFyYWN0ZXIgaW4gaXQuCi0gICAgICAgICAgICAgICAgY3R4LmZvbnQgPSBmLnN0eWxlICsgIiAi
ICsgZi52YXJpYW50ICsgIiAiICsgZi53ZWlnaHQgKyAiICIgKyBmLnNpemUgKyAicHggIiArIGYu
ZmFtaWx5OwotICAgICAgICAgICAgICAgIGN0eC50ZXh0QWxpZ24gPSAic3RhcnQiOwotICAgICAg
ICAgICAgICAgIC8vIG1pZGRsZSBhbGlnbiB0aGUgbGFiZWxzIC0gdG9wIHdvdWxkIGJlIG1vcmUK
LSAgICAgICAgICAgICAgICAvLyBuYXR1cmFsLCBidXQgYnJvd3NlcnMgY2FuIGRpZmZlciBhIHBp
eGVsIG9yIHR3byBpbgotICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZXkgY29uc2lkZXIgdGhl
IHRvcCB0byBiZSwgc28gaW5zdGVhZCB3ZQotICAgICAgICAgICAgICAgIC8vIG1pZGRsZSBhbGln
biB0byBtaW5pbWl6ZSB2YXJpYXRpb24gYmV0d2VlbiBicm93c2VycwotICAgICAgICAgICAgICAg
IC8vIGFuZCBjb21wZW5zYXRlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvb3JkaW5hdGVzCi0gICAg
ICAgICAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9ICJtaWRkbGUiOwotCi0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBheGlzLnRpY2tzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciB0aWNrID0gYXhpcy50aWNrc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aWNrLmxhYmVsIHx8IHRpY2sudiA8IGF4aXMubWluIHx8IHRpY2sudiA+IGF4aXMu
bWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHgsIHksIG9mZnNldCA9IDAsIGxpbmU7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgdGljay5saW5lcy5sZW5ndGg7ICsraykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZSA9IHRpY2subGluZXNba107Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4ID0gcGxvdE9mZnNldC5sZWZ0ICsgYXhpcy5wMmModGljay52KSAtIGxpbmUud2lkdGgv
MjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5wb3NpdGlvbiA9PSAiYm90
dG9tIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGJveC50b3AgKyBib3gu
cGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHkgPSBib3gudG9wICsgYm94LmhlaWdodCAtIGJveC5wYWRkaW5n
IC0gdGljay5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcGxvdE9m
ZnNldC50b3AgKyBheGlzLnAyYyh0aWNrLnYpIC0gdGljay5oZWlnaHQvMjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXhpcy5wb3NpdGlvbiA9PSAibGVmdCIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHggPSBib3gubGVmdCArIGJveC53aWR0aCAtIGJveC5wYWRk
aW5nIC0gbGluZS53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBib3gubGVmdCArIGJveC5wYWRkaW5nOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBh
Y2NvdW50IGZvciBtaWRkbGUgYWxpZ25pbmcgYW5kIGxpbmUgbnVtYmVyCi0gICAgICAgICAgICAg
ICAgICAgICAgICB5ICs9IGxpbmUuaGVpZ2h0LzIgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgKz0gbGluZS5oZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghISh3aW5kb3cub3BlcmEgJiYgd2luZG93Lm9wZXJhLnZlcnNpb24oKS5zcGxpdCgnLicp
WzBdIDwgMTIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IExFR0FD
WSBCUk9XU0VSIEZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFGRkVDVFM6IE9w
ZXJhIDwgMTIuMDAKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kIHRoZSBj
b29yZGluYXRlcyBzaW5jZSBPcGVyYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90
aGVyd2lzZSBzd2l0Y2hlcyB0byBtb3JlIHVnbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZW5kZXJpbmcgKHByb2JhYmx5IG5vbi1oaW50ZWQpIGFuZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgeSBjb29yZGluYXRlcyBzaW5jZSBpdCBzZWVtcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIG9mZiBwcmV0dHkgY29uc2lzdGVu
dGx5IGNvbXBhcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG90aGVy
IGJyb3dzZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IE1hdGguZmxvb3IoeCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5IC0gMik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFRl
eHQobGluZS50ZXh0LCB4LCB5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBjdHgucmVzdG9yZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZHJhd1NlcmllcyhzZXJpZXMpIHsKLSAgICAgICAg
ICAgIGlmIChzZXJpZXMubGluZXMuc2hvdykKLSAgICAgICAgICAgICAgICBkcmF3U2VyaWVzTGlu
ZXMoc2VyaWVzKTsKLSAgICAgICAgICAgIGlmIChzZXJpZXMuYmFycy5zaG93KQotICAgICAgICAg
ICAgICAgIGRyYXdTZXJpZXNCYXJzKHNlcmllcyk7Ci0gICAgICAgICAgICBpZiAoc2VyaWVzLnBv
aW50cy5zaG93KQotICAgICAgICAgICAgICAgIGRyYXdTZXJpZXNQb2ludHMoc2VyaWVzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdTZXJpZXNMaW5lcyhzZXJpZXMpIHsKLSAg
ICAgICAgICAgIGZ1bmN0aW9uIHBsb3RMaW5lKGRhdGFwb2ludHMsIHhvZmZzZXQsIHlvZmZzZXQs
IGF4aXN4LCBheGlzeSkgewotICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBkYXRhcG9pbnRz
LnBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgcHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZSwK
LSAgICAgICAgICAgICAgICAgICAgcHJldnggPSBudWxsLCBwcmV2eSA9IG51bGw7Ci0KLSAgICAg
ICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHBzOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSBwcykgewotICAgICAgICAgICAgICAgICAgICB2
YXIgeDEgPSBwb2ludHNbaSAtIHBzXSwgeTEgPSBwb2ludHNbaSAtIHBzICsgMV0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB4MiA9IHBvaW50c1tpXSwgeTIgPSBwb2ludHNbaSArIDFdOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh4MSA9PSBudWxsIHx8IHgyID09IG51bGwpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlw
IHdpdGggeW1pbgotICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPD0geTIgJiYgeTEgPCBheGlz
eS5taW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5MiA8IGF4aXN5Lm1pbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvLyBsaW5lIHNlZ21lbnQgaXMg
b3V0c2lkZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBuZXcgaW50ZXJzZWN0
aW9uIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IChheGlzeS5taW4gLSB5MSkg
LyAoeTIgLSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkx
ID0gYXhpc3kubWluOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHkyIDw9IHkxICYmIHkyIDwgYXhpc3kubWluKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeTEgPCBheGlzeS5taW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MiA9IChheGlzeS5taW4gLSB5MSkg
LyAoeTIgLSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHky
ID0gYXhpc3kubWluOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gY2xpcCB3aXRoIHltYXgKLSAgICAgICAgICAgICAgICAgICAgaWYgKHkxID49IHkyICYm
IHkxID4gYXhpc3kubWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeTIgPiBheGlz
eS5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB4MSA9IChheGlzeS5tYXggLSB5MSkgLyAoeTIgLSB5MSkgKiAoeDIgLSB4
MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gYXhpc3kubWF4OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHkyID49IHkxICYm
IHkyID4gYXhpc3kubWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPiBheGlz
eS5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB4MiA9IChheGlzeS5tYXggLSB5MSkgLyAoeTIgLSB5MSkgKiAoeDIgLSB4
MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gYXhpc3kubWF4OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHhtaW4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHgxIDw9IHgyICYmIHgxIDwgYXhpc3gubWluKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIgPCBheGlzeC5taW4pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChh
eGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHgxID0gYXhpc3gubWluOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHgyIDw9IHgxICYmIHgyIDwgYXhpc3gubWluKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDEgPCBheGlzeC5taW4pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IChh
eGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHgyID0gYXhpc3gubWluOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHhtYXgKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHgxID49IHgyICYmIHgxID4gYXhpc3gubWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeDIgPiBheGlzeC5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChheGlzeC5tYXggLSB4MSkgLyAoeDIg
LSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gYXhp
c3gubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHgyID49IHgxICYmIHgyID4gYXhpc3gubWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeDEgPiBheGlzeC5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IChheGlzeC5tYXggLSB4MSkgLyAoeDIg
LSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gYXhp
c3gubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHgxICE9IHByZXZ4IHx8IHkxICE9IHByZXZ5KQotICAgICAgICAgICAgICAgICAgICAgICAgY3R4
Lm1vdmVUbyhheGlzeC5wMmMoeDEpICsgeG9mZnNldCwgYXhpc3kucDJjKHkxKSArIHlvZmZzZXQp
OwotCi0gICAgICAgICAgICAgICAgICAgIHByZXZ4ID0geDI7Ci0gICAgICAgICAgICAgICAgICAg
IHByZXZ5ID0geTI7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgy
KSArIHhvZmZzZXQsIGF4aXN5LnAyYyh5MikgKyB5b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmdW5jdGlvbiBwbG90TGluZUFyZWEoZGF0YXBvaW50cywgYXhpc3gsIGF4aXN5KSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IGRhdGFwb2ludHMucG9pbnRzLAotICAgICAgICAg
ICAgICAgICAgICBwcyA9IGRhdGFwb2ludHMucG9pbnRzaXplLAotICAgICAgICAgICAgICAgICAg
ICBib3R0b20gPSBNYXRoLm1pbihNYXRoLm1heCgwLCBheGlzeS5taW4pLCBheGlzeS5tYXgpLAot
ICAgICAgICAgICAgICAgICAgICBpID0gMCwgdG9wLCBhcmVhT3BlbiA9IGZhbHNlLAotICAgICAg
ICAgICAgICAgICAgICB5cG9zID0gMSwgc2VnbWVudFN0YXJ0ID0gMCwgc2VnbWVudEVuZCA9IDA7
Ci0KLSAgICAgICAgICAgICAgICAvLyB3ZSBwcm9jZXNzIGVhY2ggc2VnbWVudCBpbiB0d28gdHVy
bnMsIGZpcnN0IGZvcndhcmQKLSAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gdG8gc2tldGNo
IG91dCB0b3AsIHRoZW4gb25jZSB3ZSBoaXQgdGhlCi0gICAgICAgICAgICAgICAgLy8gZW5kIHdl
IGdvIGJhY2t3YXJkcyB0byBza2V0Y2ggdGhlIGJvdHRvbQotICAgICAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcyA+IDAgJiYgaSA+IHBvaW50cy5s
ZW5ndGggKyBwcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgICAgIGkgKz0gcHM7IC8vIHBzIGlzIG5lZ2F0aXZlIGlmIGdvaW5nIGJhY2t3YXJkcwot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHBvaW50c1tpIC0gcHNdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgeTEgPSBwb2ludHNbaSAtIHBzICsgeXBvc10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICB4MiA9IHBvaW50c1tpXSwgeTIgPSBwb2ludHNbaSArIHlwb3NdOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChhcmVhT3BlbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBzID4gMCAmJiB4MSAhPSBudWxsICYmIHgyID09IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhdCB0dXJuaW5nIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VnbWVudEVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMgPSAt
cHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXBvcyA9IDI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwcyA8IDAgJiYgaSA9PSBzZWdtZW50U3RhcnQgKyBw
cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbmUgd2l0aCB0aGUgcmV2ZXJz
ZSBzd2VlcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJlYU9wZW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcyA9IC1wczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cG9zID0g
MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VnbWVudFN0YXJ0ID0gc2VnbWVu
dEVuZCArIHBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHgxID09IG51bGwgfHwgeDIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgeCB2YWx1ZXMK
LQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIHdpdGggeG1pbgotICAgICAgICAgICAgICAg
ICAgICBpZiAoeDEgPD0geDIgJiYgeDEgPCBheGlzeC5taW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh4MiA8IGF4aXN4Lm1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gKGF4aXN4Lm1pbiAtIHgxKSAv
ICh4MiAtIHgxKSAqICh5MiAtIHkxKSArIHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgeDEg
PSBheGlzeC5taW47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoeDIgPD0geDEgJiYgeDIgPCBheGlzeC5taW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh4MSA8IGF4aXN4Lm1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gKGF4aXN4Lm1pbiAtIHgxKSAv
ICh4MiAtIHgxKSAqICh5MiAtIHkxKSArIHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgeDIg
PSBheGlzeC5taW47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAvLyBjbGlwIHdpdGggeG1heAotICAgICAgICAgICAgICAgICAgICBpZiAoeDEgPj0geDIgJiYg
eDEgPiBheGlzeC5tYXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MiA+IGF4aXN4
Lm1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHkxID0gKGF4aXN4Lm1heCAtIHgxKSAvICh4MiAtIHgxKSAqICh5MiAtIHkx
KSArIHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSBheGlzeC5tYXg7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeDIgPj0geDEgJiYg
eDIgPiBheGlzeC5tYXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4MSA+IGF4aXN4
Lm1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHkyID0gKGF4aXN4Lm1heCAtIHgxKSAvICh4MiAtIHgxKSAqICh5MiAtIHkx
KSArIHkxOwotICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBheGlzeC5tYXg7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZWFPcGVuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVuIGFyZWEKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8o
YXhpc3gucDJjKHgxKSwgYXhpc3kucDJjKGJvdHRvbSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYXJlYU9wZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gbm93IGZpcnN0IGNoZWNrIHRoZSBjYXNlIHdoZXJlIGJvdGggaXMgb3V0c2lk
ZQotICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPj0gYXhpc3kubWF4ICYmIHkyID49IGF4aXN5
Lm1heCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDEp
LCBheGlzeS5wMmMoYXhpc3kubWF4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGlu
ZVRvKGF4aXN4LnAyYyh4MiksIGF4aXN5LnAyYyhheGlzeS5tYXgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHkxIDw9IGF4aXN5Lm1pbiAmJiB5MiA8PSBheGlzeS5taW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgxKSwgYXhpc3kucDJj
KGF4aXN5Lm1pbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5w
MmMoeDIpLCBheGlzeS5wMmMoYXhpc3kubWluKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8v
IGVsc2UgaXQncyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLCB0aGVyZSBtaWdodAotICAgICAgICAg
ICAgICAgICAgICAvLyBiZSBhIGZsYXQgbWF4ZWQgb3V0IHJlY3RhbmdsZSBmaXJzdCwgdGhlbiBh
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRyaWFuZ3VsYXIgY3V0b3V0IG9yIHJldmVyc2U7IHRv
IGZpbmQgdGhlc2UKLSAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3Vy
cmVudCB4IHZhbHVlcwotICAgICAgICAgICAgICAgICAgICB2YXIgeDFvbGQgPSB4MSwgeDJvbGQg
PSB4MjsKLQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIHRoZSB5IHZhbHVlcywgd2l0aG91
dCBzaG9ydGN1dHRpbmcsIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGdvIHRocm91Z2ggYWxs
IGNhc2VzIGluIHR1cm4KLQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIHdpdGggeW1pbgot
ICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPD0geTIgJiYgeTEgPCBheGlzeS5taW4gJiYgeTIg
Pj0gYXhpc3kubWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IChheGlzeS5taW4g
LSB5MSkgLyAoeTIgLSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHkxID0gYXhpc3kubWluOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHkyIDw9IHkxICYmIHkyIDwgYXhpc3kubWluICYmIHkxID49IGF4aXN5
Lm1pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSAoYXhpc3kubWluIC0geTEpIC8g
KHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MiA9
IGF4aXN5Lm1pbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IC8vIGNsaXAgd2l0aCB5bWF4Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5MSA+PSB5MiAmJiB5
MSA+IGF4aXN5Lm1heCAmJiB5MiA8PSBheGlzeS5tYXgpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHgxID0gKGF4aXN5Lm1heCAtIHkxKSAvICh5MiAtIHkxKSAqICh4MiAtIHgxKSArIHgxOwot
ICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSBheGlzeS5tYXg7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeTIgPj0geTEgJiYgeTIgPiBheGlz
eS5tYXggJiYgeTEgPD0gYXhpc3kubWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MiA9
IChheGlzeS5tYXggLSB5MSkgLyAoeTIgLSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHkyID0gYXhpc3kubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHggdmFsdWUgd2FzIGNoYW5nZWQgd2UgZ290
IGEgcmVjdGFuZ2xlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGZpbGwKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHgxICE9IHgxb2xkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgu
bGluZVRvKGF4aXN4LnAyYyh4MW9sZCksIGF4aXN5LnAyYyh5MSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaXQgZ29lcyB0byAoeDEsIHkxKSwgYnV0IHdlIGZpbGwgdGhhdCBiZWxvdwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZmlsbCB0cmlh
bmd1bGFyIHNlY3Rpb24sIHRoaXMgc29tZXRpbWVzIHJlc3VsdAotICAgICAgICAgICAgICAgICAg
ICAvLyBpbiByZWR1bmRhbnQgcG9pbnRzIGlmICh4MSwgeTEpIGhhc24ndCBjaGFuZ2VkCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGZyb20gcHJldmlvdXMgbGluZSB0bywgYnV0IHdlIGp1c3QgaWdu
b3JlIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDEpLCBh
eGlzeS5wMmMoeTEpKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMo
eDIpLCBheGlzeS5wMmMoeTIpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBmaWxsIHRoZSBv
dGhlciByZWN0YW5nbGUgaWYgaXQncyB0aGVyZQotICAgICAgICAgICAgICAgICAgICBpZiAoeDIg
IT0geDJvbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJj
KHgyKSwgYXhpc3kucDJjKHkyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRv
KGF4aXN4LnAyYyh4Mm9sZCksIGF4aXN5LnAyYyh5MikpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjdHguc2F2
ZSgpOwotICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShwbG90T2Zmc2V0LmxlZnQsIHBsb3RPZmZz
ZXQudG9wKTsKLSAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9ICJyb3VuZCI7Ci0KLSAgICAgICAg
ICAgIHZhciBsdyA9IHNlcmllcy5saW5lcy5saW5lV2lkdGgsCi0gICAgICAgICAgICAgICAgc3cg
PSBzZXJpZXMuc2hhZG93U2l6ZTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBhbm90
aGVyIGZvcm0gb2Ygc2hhZG93IHdoZW4gZmlsbGluZyBpcyB0dXJuZWQgb24KLSAgICAgICAgICAg
IGlmIChsdyA+IDAgJiYgc3cgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gZHJhdyBzaGFkb3cg
YXMgYSB0aGljayBhbmQgdGhpbiBsaW5lIHdpdGggdHJhbnNwYXJlbmN5Ci0gICAgICAgICAgICAg
ICAgY3R4LmxpbmVXaWR0aCA9IHN3OwotICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9
ICJyZ2JhKDAsMCwwLDAuMSkiOwotICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIHNoYWRvdyBh
dCBhbmdsZSBmcm9tIHRoZSBtaWQgb2YgbGluZQotICAgICAgICAgICAgICAgIHZhciBhbmdsZSA9
IE1hdGguUEkvMTg7Ci0gICAgICAgICAgICAgICAgcGxvdExpbmUoc2VyaWVzLmRhdGFwb2ludHMs
IE1hdGguc2luKGFuZ2xlKSAqIChsdy8yICsgc3cvMiksIE1hdGguY29zKGFuZ2xlKSAqIChsdy8y
ICsgc3cvMiksIHNlcmllcy54YXhpcywgc2VyaWVzLnlheGlzKTsKLSAgICAgICAgICAgICAgICBj
dHgubGluZVdpZHRoID0gc3cvMjsKLSAgICAgICAgICAgICAgICBwbG90TGluZShzZXJpZXMuZGF0
YXBvaW50cywgTWF0aC5zaW4oYW5nbGUpICogKGx3LzIgKyBzdy80KSwgTWF0aC5jb3MoYW5nbGUp
ICogKGx3LzIgKyBzdy80KSwgc2VyaWVzLnhheGlzLCBzZXJpZXMueWF4aXMpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjdHgubGluZVdpZHRoID0gbHc7Ci0gICAgICAgICAgICBjdHgu
c3Ryb2tlU3R5bGUgPSBzZXJpZXMuY29sb3I7Ci0gICAgICAgICAgICB2YXIgZmlsbFN0eWxlID0g
Z2V0RmlsbFN0eWxlKHNlcmllcy5saW5lcywgc2VyaWVzLmNvbG9yLCAwLCBwbG90SGVpZ2h0KTsK
LSAgICAgICAgICAgIGlmIChmaWxsU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gZmlsbFN0eWxlOwotICAgICAgICAgICAgICAgIHBsb3RMaW5lQXJlYShzZXJpZXMuZGF0
YXBvaW50cywgc2VyaWVzLnhheGlzLCBzZXJpZXMueWF4aXMpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAobHcgPiAwKQotICAgICAgICAgICAgICAgIHBsb3RMaW5lKHNlcmllcy5k
YXRhcG9pbnRzLCAwLCAwLCBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcyk7Ci0gICAgICAgICAg
ICBjdHgucmVzdG9yZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZHJhd1Nlcmll
c1BvaW50cyhzZXJpZXMpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIHBsb3RQb2ludHMoZGF0YXBv
aW50cywgcmFkaXVzLCBmaWxsU3R5bGUsIG9mZnNldCwgc2hhZG93LCBheGlzeCwgYXhpc3ksIHN5
bWJvbCkgewotICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywg
cHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSBwcykgewotICAgICAgICAgICAgICAgICAgICB2
YXIgeCA9IHBvaW50c1tpXSwgeSA9IHBvaW50c1tpICsgMV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh4ID09IG51bGwgfHwgeCA8IGF4aXN4Lm1pbiB8fCB4ID4gYXhpc3gubWF4IHx8IHkgPCBh
eGlzeS5taW4gfHwgeSA+IGF4aXN5Lm1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgeCA9IGF4aXN4LnAyYyh4KTsKLSAgICAgICAgICAgICAgICAgICAgeSA9IGF4aXN5
LnAyYyh5KSArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PSAiY2ly
Y2xlIikKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCBz
aGFkb3cgPyBNYXRoLlBJIDogTWF0aC5QSSAqIDIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sKGN0eCwgeCwgeSwgcmFkaXVz
LCBzaGFkb3cpOwotICAgICAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZpbGxTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5m
aWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3R4LnN0
cm9rZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBw
bG90T2Zmc2V0LnRvcCk7Ci0KLSAgICAgICAgICAgIHZhciBsdyA9IHNlcmllcy5wb2ludHMubGlu
ZVdpZHRoLAotICAgICAgICAgICAgICAgIHN3ID0gc2VyaWVzLnNoYWRvd1NpemUsCi0gICAgICAg
ICAgICAgICAgcmFkaXVzID0gc2VyaWVzLnBvaW50cy5yYWRpdXMsCi0gICAgICAgICAgICAgICAg
c3ltYm9sID0gc2VyaWVzLnBvaW50cy5zeW1ib2w7Ci0gICAgICAgICAgICBpZiAobHcgPiAwICYm
IHN3ID4gMCkgewotICAgICAgICAgICAgICAgIC8vIGRyYXcgc2hhZG93IGluIHR3byBzdGVwcwot
ICAgICAgICAgICAgICAgIHZhciB3ID0gc3cgLyAyOwotICAgICAgICAgICAgICAgIGN0eC5saW5l
V2lkdGggPSB3OwotICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDAsMCww
LDAuMSkiOwotICAgICAgICAgICAgICAgIHBsb3RQb2ludHMoc2VyaWVzLmRhdGFwb2ludHMsIHJh
ZGl1cywgbnVsbCwgdyArIHcvMiwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
cmllcy54YXhpcywgc2VyaWVzLnlheGlzLCBzeW1ib2wpOwotCi0gICAgICAgICAgICAgICAgY3R4
LnN0cm9rZVN0eWxlID0gInJnYmEoMCwwLDAsMC4yKSI7Ci0gICAgICAgICAgICAgICAgcGxvdFBv
aW50cyhzZXJpZXMuZGF0YXBvaW50cywgcmFkaXVzLCBudWxsLCB3LzIsIHRydWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcywgc3ltYm9sKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGx3OwotICAgICAg
ICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc2VyaWVzLmNvbG9yOwotICAgICAgICAgICAgcGxvdFBv
aW50cyhzZXJpZXMuZGF0YXBvaW50cywgcmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAgICBn
ZXRGaWxsU3R5bGUoc2VyaWVzLnBvaW50cywgc2VyaWVzLmNvbG9yKSwgMCwgZmFsc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHNlcmllcy54YXhpcywgc2VyaWVzLnlheGlzLCBzeW1ib2wpOwot
ICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGRyYXdCYXIoeCwgeSwgYiwgYmFyTGVmdCwgYmFyUmlnaHQsIG9mZnNldCwgZmlsbFN0eWxlQ2Fs
bGJhY2ssIGF4aXN4LCBheGlzeSwgYywgaG9yaXpvbnRhbCwgbGluZVdpZHRoKSB7Ci0gICAgICAg
ICAgICB2YXIgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLAotICAgICAgICAgICAgICAgIGRyYXdM
ZWZ0LCBkcmF3UmlnaHQsIGRyYXdUb3AsIGRyYXdCb3R0b20sCi0gICAgICAgICAgICAgICAgdG1w
OwotCi0gICAgICAgICAgICAvLyBpbiBob3Jpem9udGFsIG1vZGUsIHdlIHN0YXJ0IHRoZSBiYXIg
ZnJvbSB0aGUgbGVmdAotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBmcm9tIHRoZSBib3R0b20g
c28gaXQgYXBwZWFycyB0byBiZQotICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCByYXRoZXIgdGhh
biB2ZXJ0aWNhbAotICAgICAgICAgICAgaWYgKGhvcml6b250YWwpIHsKLSAgICAgICAgICAgICAg
ICBkcmF3Qm90dG9tID0gZHJhd1JpZ2h0ID0gZHJhd1RvcCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgZHJhd0xlZnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gYjsKLSAgICAgICAg
ICAgICAgICByaWdodCA9IHg7Ci0gICAgICAgICAgICAgICAgdG9wID0geSArIGJhckxlZnQ7Ci0g
ICAgICAgICAgICAgICAgYm90dG9tID0geSArIGJhclJpZ2h0OwotCi0gICAgICAgICAgICAgICAg
Ly8gYWNjb3VudCBmb3IgbmVnYXRpdmUgYmFycwotICAgICAgICAgICAgICAgIGlmIChyaWdodCA8
IGxlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gcmlnaHQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbGVmdDsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHRtcDsKLSAg
ICAgICAgICAgICAgICAgICAgZHJhd0xlZnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBk
cmF3UmlnaHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBkcmF3TGVmdCA9IGRyYXdSaWdodCA9IGRy
YXdUb3AgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRyYXdCb3R0b20gPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBsZWZ0ID0geCArIGJhckxlZnQ7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSB4
ICsgYmFyUmlnaHQ7Ci0gICAgICAgICAgICAgICAgYm90dG9tID0gYjsKLSAgICAgICAgICAgICAg
ICB0b3AgPSB5OwotCi0gICAgICAgICAgICAgICAgLy8gYWNjb3VudCBmb3IgbmVnYXRpdmUgYmFy
cwotICAgICAgICAgICAgICAgIGlmICh0b3AgPCBib3R0b20pIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG1wID0gdG9wOwotICAgICAgICAgICAgICAgICAgICB0b3AgPSBib3R0b207Ci0gICAgICAg
ICAgICAgICAgICAgIGJvdHRvbSA9IHRtcDsKLSAgICAgICAgICAgICAgICAgICAgZHJhd0JvdHRv
bSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdUb3AgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNsaXAKLSAgICAgICAg
ICAgIGlmIChyaWdodCA8IGF4aXN4Lm1pbiB8fCBsZWZ0ID4gYXhpc3gubWF4IHx8Ci0gICAgICAg
ICAgICAgICAgdG9wIDwgYXhpc3kubWluIHx8IGJvdHRvbSA+IGF4aXN5Lm1heCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChsZWZ0IDwgYXhpc3gubWluKSB7Ci0g
ICAgICAgICAgICAgICAgbGVmdCA9IGF4aXN4Lm1pbjsKLSAgICAgICAgICAgICAgICBkcmF3TGVm
dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmlnaHQgPiBheGlz
eC5tYXgpIHsKLSAgICAgICAgICAgICAgICByaWdodCA9IGF4aXN4Lm1heDsKLSAgICAgICAgICAg
ICAgICBkcmF3UmlnaHQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGJvdHRvbSA8IGF4aXN5Lm1pbikgewotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGF4aXN5Lm1p
bjsKLSAgICAgICAgICAgICAgICBkcmF3Qm90dG9tID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0b3AgPiBheGlzeS5tYXgpIHsKLSAgICAgICAgICAgICAgICB0b3Ag
PSBheGlzeS5tYXg7Ci0gICAgICAgICAgICAgICAgZHJhd1RvcCA9IGZhbHNlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBsZWZ0ID0gYXhpc3gucDJjKGxlZnQpOwotICAgICAgICAgICAg
Ym90dG9tID0gYXhpc3kucDJjKGJvdHRvbSk7Ci0gICAgICAgICAgICByaWdodCA9IGF4aXN4LnAy
YyhyaWdodCk7Ci0gICAgICAgICAgICB0b3AgPSBheGlzeS5wMmModG9wKTsKLQotICAgICAgICAg
ICAgLy8gZmlsbCB0aGUgYmFyCi0gICAgICAgICAgICBpZiAoZmlsbFN0eWxlQ2FsbGJhY2spIHsK
LSAgICAgICAgICAgICAgICBjLmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAgIGMubW92ZVRv
KGxlZnQsIGJvdHRvbSk7Ci0gICAgICAgICAgICAgICAgYy5saW5lVG8obGVmdCwgdG9wKTsKLSAg
ICAgICAgICAgICAgICBjLmxpbmVUbyhyaWdodCwgdG9wKTsKLSAgICAgICAgICAgICAgICBjLmxp
bmVUbyhyaWdodCwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBjLmZpbGxTdHlsZSA9IGZpbGxT
dHlsZUNhbGxiYWNrKGJvdHRvbSwgdG9wKTsKLSAgICAgICAgICAgICAgICBjLmZpbGwoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZHJhdyBvdXRsaW5lCi0gICAgICAgICAgICBp
ZiAobGluZVdpZHRoID4gMCAmJiAoZHJhd0xlZnQgfHwgZHJhd1JpZ2h0IHx8IGRyYXdUb3AgfHwg
ZHJhd0JvdHRvbSkpIHsKLSAgICAgICAgICAgICAgICBjLmJlZ2luUGF0aCgpOwotCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGlubGluZSBtb3ZlVG8gaXMgYnVnZ3kgd2l0aCBleGNhbnZhcwot
ICAgICAgICAgICAgICAgIGMubW92ZVRvKGxlZnQsIGJvdHRvbSArIG9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGRyYXdMZWZ0KQotICAgICAgICAgICAgICAgICAgICBjLmxpbmVUbyhsZWZ0
LCB0b3AgKyBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYy5tb3ZlVG8obGVmdCwgdG9wICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoZHJh
d1RvcCkKLSAgICAgICAgICAgICAgICAgICAgYy5saW5lVG8ocmlnaHQsIHRvcCArIG9mZnNldCk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjLm1vdmVUbyhyaWdo
dCwgdG9wICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoZHJhd1JpZ2h0KQotICAgICAg
ICAgICAgICAgICAgICBjLmxpbmVUbyhyaWdodCwgYm90dG9tICsgb2Zmc2V0KTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGMubW92ZVRvKHJpZ2h0LCBib3R0b20g
KyBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAg
ICAgICAgICBjLmxpbmVUbyhsZWZ0LCBib3R0b20gKyBvZmZzZXQpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYy5tb3ZlVG8obGVmdCwgYm90dG9tICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICBjLnN0cm9rZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gZHJhd1Nlcmllc0JhcnMoc2VyaWVzKSB7Ci0gICAgICAgICAg
ICBmdW5jdGlvbiBwbG90QmFycyhkYXRhcG9pbnRzLCBiYXJMZWZ0LCBiYXJSaWdodCwgb2Zmc2V0
LCBmaWxsU3R5bGVDYWxsYmFjaywgYXhpc3gsIGF4aXN5KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHBvaW50cyA9IGRhdGFwb2ludHMucG9pbnRzLCBwcyA9IGRhdGFwb2ludHMucG9pbnRzaXplOwot
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9
IHBzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHNbaV0gPT0gbnVsbCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBkcmF3QmFy
KHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSwgcG9pbnRzW2kgKyAyXSwgYmFyTGVmdCwgYmFyUmln
aHQsIG9mZnNldCwgZmlsbFN0eWxlQ2FsbGJhY2ssIGF4aXN4LCBheGlzeSwgY3R4LCBzZXJpZXMu
YmFycy5ob3Jpem9udGFsLCBzZXJpZXMuYmFycy5saW5lV2lkdGgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAg
IGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7Ci0KLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGEgd2F5IHRvIGFkZCBzaGFkb3dzIChmb3IgaW5z
dGFuY2UgYWxvbmcgdGhlIHJpZ2h0IGVkZ2UpCi0gICAgICAgICAgICBjdHgubGluZVdpZHRoID0g
c2VyaWVzLmJhcnMubGluZVdpZHRoOwotICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc2Vy
aWVzLmNvbG9yOwotCi0gICAgICAgICAgICB2YXIgYmFyTGVmdDsKLQotICAgICAgICAgICAgc3dp
dGNoIChzZXJpZXMuYmFycy5hbGlnbikgewotICAgICAgICAgICAgICAgIGNhc2UgImxlZnQiOgot
ICAgICAgICAgICAgICAgICAgICBiYXJMZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAicmlnaHQiOgotICAgICAgICAgICAgICAgICAgICBi
YXJMZWZ0ID0gLXNlcmllcy5iYXJzLmJhcldpZHRoOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlICJjZW50ZXIiOgotICAgICAgICAgICAgICAgICAgICBi
YXJMZWZ0ID0gLXNlcmllcy5iYXJzLmJhcldpZHRoIC8gMjsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJJbnZhbGlkIGJhciBhbGlnbm1lbnQ6ICIgKyBzZXJpZXMuYmFycy5hbGln
bik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBmaWxsU3R5bGVDYWxsYmFjayA9
IHNlcmllcy5iYXJzLmZpbGwgPyBmdW5jdGlvbiAoYm90dG9tLCB0b3ApIHsgcmV0dXJuIGdldEZp
bGxTdHlsZShzZXJpZXMuYmFycywgc2VyaWVzLmNvbG9yLCBib3R0b20sIHRvcCk7IH0gOiBudWxs
OwotICAgICAgICAgICAgcGxvdEJhcnMoc2VyaWVzLmRhdGFwb2ludHMsIGJhckxlZnQsIGJhckxl
ZnQgKyBzZXJpZXMuYmFycy5iYXJXaWR0aCwgMCwgZmlsbFN0eWxlQ2FsbGJhY2ssIHNlcmllcy54
YXhpcywgc2VyaWVzLnlheGlzKTsKLSAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRGaWxsU3R5bGUoZmlsbG9wdGlvbnMsIHNlcmllc0Nv
bG9yLCBib3R0b20sIHRvcCkgewotICAgICAgICAgICAgdmFyIGZpbGwgPSBmaWxsb3B0aW9ucy5m
aWxsOwotICAgICAgICAgICAgaWYgKCFmaWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwotCi0gICAgICAgICAgICBpZiAoZmlsbG9wdGlvbnMuZmlsbENvbG9yKQotICAgICAgICAgICAg
ICAgIHJldHVybiBnZXRDb2xvck9yR3JhZGllbnQoZmlsbG9wdGlvbnMuZmlsbENvbG9yLCBib3R0
b20sIHRvcCwgc2VyaWVzQ29sb3IpOwotCi0gICAgICAgICAgICB2YXIgYyA9ICQuY29sb3IucGFy
c2Uoc2VyaWVzQ29sb3IpOwotICAgICAgICAgICAgYy5hID0gdHlwZW9mIGZpbGwgPT0gIm51bWJl
ciIgPyBmaWxsIDogMC40OwotICAgICAgICAgICAgYy5ub3JtYWxpemUoKTsKLSAgICAgICAgICAg
IHJldHVybiBjLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnNl
cnRMZWdlbmQoKSB7Ci0KLSAgICAgICAgICAgIHBsYWNlaG9sZGVyLmZpbmQoIi5sZWdlbmQiKS5y
ZW1vdmUoKTsKLQotICAgICAgICAgICAgaWYgKCFvcHRpb25zLmxlZ2VuZC5zaG93KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIGZyYWdtZW50cyA9IFtdLCBlbnRy
aWVzID0gW10sIHJvd1N0YXJ0ZWQgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICBsZiA9IG9wdGlv
bnMubGVnZW5kLmxhYmVsRm9ybWF0dGVyLCBzLCBsYWJlbDsKLQotICAgICAgICAgICAgLy8gQnVp
bGQgYSBsaXN0IG9mIGxlZ2VuZCBlbnRyaWVzLCB3aXRoIGVhY2ggaGF2aW5nIGEgbGFiZWwgYW5k
IGEgY29sb3IKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwotICAgICAgICAgICAgICAg
IGlmIChzLmxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gbGYgPyBsZihzLmxh
YmVsLCBzKSA6IHMubGFiZWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYWJlbDogbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6
IHMuY29sb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBT
b3J0IHRoZSBsZWdlbmQgdXNpbmcgZWl0aGVyIHRoZSBkZWZhdWx0IG9yIGEgY3VzdG9tIGNvbXBh
cmF0b3IKLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVnZW5kLnNvcnRlZCkgewotICAgICAg
ICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0aW9ucy5sZWdlbmQuc29ydGVkKSkgewotICAg
ICAgICAgICAgICAgICAgICBlbnRyaWVzLnNvcnQob3B0aW9ucy5sZWdlbmQuc29ydGVkKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXIgYXNjZW5kaW5n
ID0gb3B0aW9ucy5sZWdlbmQuc29ydGVkICE9ICJkZXNjZW5kaW5nIjsKLSAgICAgICAgICAgICAg
ICAgICAgZW50cmllcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhLmxhYmVsID09IGIubGFiZWwgPyAwIDogKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChhLmxhYmVsIDwgYi5sYWJlbCkgIT0gYXNjZW5kaW5nID8gMSA6IC0xICAgLy8g
TG9naWNhbCBYT1IKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gR2VuZXJhdGUgbWFya3VwIGZvciB0aGUgbGlzdCBvZiBlbnRyaWVzLCBpbiB0aGVpciBmaW5h
bCBvcmRlcgotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3Ro
OyArK2kpIHsKLQotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaSAlIG9wdGlvbnMubGVnZW5kLm5vQ29sdW1ucyA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dTdGFydGVkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZnJhZ21lbnRzLnB1c2goJzwvdHI+Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50
cy5wdXNoKCc8dHI+Jyk7Ci0gICAgICAgICAgICAgICAgICAgIHJvd1N0YXJ0ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYWdtZW50cy5wdXNoKAotICAg
ICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJsZWdlbmRDb2xvckJveCI+PGRpdiBzdHlsZT0i
Ym9yZGVyOjFweCBzb2xpZCAnICsgb3B0aW9ucy5sZWdlbmQubGFiZWxCb3hCb3JkZXJDb2xvciAr
ICc7cGFkZGluZzoxcHgiPjxkaXYgc3R5bGU9IndpZHRoOjRweDtoZWlnaHQ6MDtib3JkZXI6NXB4
IHNvbGlkICcgKyBlbnRyeS5jb2xvciArICc7b3ZlcmZsb3c6aGlkZGVuIj48L2Rpdj48L2Rpdj48
L3RkPicgKwotICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPSJsZWdlbmRMYWJlbCI+JyAr
IGVudHJ5LmxhYmVsICsgJzwvdGQ+JwotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChyb3dTdGFydGVkKQotICAgICAgICAgICAgICAgIGZyYWdtZW50
cy5wdXNoKCc8L3RyPicpOwotCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRzLmxlbmd0aCA9PSAw
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHRhYmxlID0gJzx0
YWJsZSBzdHlsZT0iZm9udC1zaXplOnNtYWxsZXI7Y29sb3I6JyArIG9wdGlvbnMuZ3JpZC5jb2xv
ciArICciPicgKyBmcmFnbWVudHMuam9pbigiIikgKyAnPC90YWJsZT4nOwotICAgICAgICAgICAg
aWYgKG9wdGlvbnMubGVnZW5kLmNvbnRhaW5lciAhPSBudWxsKQotICAgICAgICAgICAgICAgICQo
b3B0aW9ucy5sZWdlbmQuY29udGFpbmVyKS5odG1sKHRhYmxlKTsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIHZhciBwb3MgPSAiIiwKLSAgICAgICAgICAgICAgICAgICAgcCA9
IG9wdGlvbnMubGVnZW5kLnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICBtID0gb3B0aW9u
cy5sZWdlbmQubWFyZ2luOwotICAgICAgICAgICAgICAgIGlmIChtWzBdID09IG51bGwpCi0gICAg
ICAgICAgICAgICAgICAgIG0gPSBbbSwgbV07Ci0gICAgICAgICAgICAgICAgaWYgKHAuY2hhckF0
KDApID09ICJuIikKLSAgICAgICAgICAgICAgICAgICAgcG9zICs9ICd0b3A6JyArIChtWzFdICsg
cGxvdE9mZnNldC50b3ApICsgJ3B4Oyc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocC5jaGFy
QXQoMCkgPT0gInMiKQotICAgICAgICAgICAgICAgICAgICBwb3MgKz0gJ2JvdHRvbTonICsgKG1b
MV0gKyBwbG90T2Zmc2V0LmJvdHRvbSkgKyAncHg7JzsKLSAgICAgICAgICAgICAgICBpZiAocC5j
aGFyQXQoMSkgPT0gImUiKQotICAgICAgICAgICAgICAgICAgICBwb3MgKz0gJ3JpZ2h0OicgKyAo
bVswXSArIHBsb3RPZmZzZXQucmlnaHQpICsgJ3B4Oyc7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAocC5jaGFyQXQoMSkgPT0gInciKQotICAgICAgICAgICAgICAgICAgICBwb3MgKz0gJ2xlZnQ6
JyArIChtWzBdICsgcGxvdE9mZnNldC5sZWZ0KSArICdweDsnOwotICAgICAgICAgICAgICAgIHZh
ciBsZWdlbmQgPSAkKCc8ZGl2IGNsYXNzPSJsZWdlbmQiPicgKyB0YWJsZS5yZXBsYWNlKCdzdHls
ZT0iJywgJ3N0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsnICsgcG9zICsnOycpICsgJzwvZGl2Picp
LmFwcGVuZFRvKHBsYWNlaG9sZGVyKTsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5sZWdl
bmQuYmFja2dyb3VuZE9wYWNpdHkgIT0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHB1
dCBpbiB0aGUgdHJhbnNwYXJlbnQgYmFja2dyb3VuZAotICAgICAgICAgICAgICAgICAgICAvLyBz
ZXBhcmF0ZWx5IHRvIGF2b2lkIGJsZW5kZWQgbGFiZWxzIGFuZAotICAgICAgICAgICAgICAgICAg
ICAvLyBsYWJlbCBib3hlcwotICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG9wdGlvbnMubGVn
ZW5kLmJhY2tncm91bmRDb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG9wdGlvbnMuZ3JpZC5iYWNrZ3JvdW5kQ29s
b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAmJiB0eXBlb2YgYyA9PSAic3RyaW5n
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJC5jb2xvci5wYXJzZShjKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ID0gJC5jb2xvci5leHRyYWN0KGxlZ2VuZCwgJ2JhY2tncm91bmQtY29sb3InKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGMuYSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gYy50
b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBkaXYgPSBsZWdlbmQuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBz
dHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6JyArIGRpdi53aWR0aCgpICsgJ3B4O2hlaWdo
dDonICsgZGl2LmhlaWdodCgpICsgJ3B4OycgKyBwb3MgKydiYWNrZ3JvdW5kLWNvbG9yOicgKyBj
ICsgJzsiPiA8L2Rpdj4nKS5wcmVwZW5kVG8obGVnZW5kKS5jc3MoJ29wYWNpdHknLCBvcHRpb25z
LmxlZ2VuZC5iYWNrZ3JvdW5kT3BhY2l0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICAvLyBpbnRlcmFjdGl2ZSBmZWF0dXJlcwotCi0g
ICAgICAgIHZhciBoaWdobGlnaHRzID0gW10sCi0gICAgICAgICAgICByZWRyYXdUaW1lb3V0ID0g
bnVsbDsKLQotICAgICAgICAvLyByZXR1cm5zIHRoZSBkYXRhIGl0ZW0gdGhlIG1vdXNlIGlzIG92
ZXIsIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZAotICAgICAgICBmdW5jdGlvbiBmaW5kTmVhcmJ5
SXRlbShtb3VzZVgsIG1vdXNlWSwgc2VyaWVzRmlsdGVyKSB7Ci0gICAgICAgICAgICB2YXIgbWF4
RGlzdGFuY2UgPSBvcHRpb25zLmdyaWQubW91c2VBY3RpdmVSYWRpdXMsCi0gICAgICAgICAgICAg
ICAgc21hbGxlc3REaXN0YW5jZSA9IG1heERpc3RhbmNlICogbWF4RGlzdGFuY2UgKyAxLAotICAg
ICAgICAgICAgICAgIGl0ZW0gPSBudWxsLCBmb3VuZFBvaW50ID0gZmFsc2UsIGksIGosIHBzOwot
Ci0gICAgICAgICAgICBmb3IgKGkgPSBzZXJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXNlcmllc0ZpbHRlcihzZXJpZXNbaV0pKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIHZhciBzID0gc2VyaWVzW2ld
LAotICAgICAgICAgICAgICAgICAgICBheGlzeCA9IHMueGF4aXMsCi0gICAgICAgICAgICAgICAg
ICAgIGF4aXN5ID0gcy55YXhpcywKLSAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcy5kYXRh
cG9pbnRzLnBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgbXggPSBheGlzeC5jMnAobW91c2VY
KSwgLy8gcHJlY29tcHV0ZSBzb21lIHN0dWZmIHRvIG1ha2UgdGhlIGxvb3AgZmFzdGVyCi0gICAg
ICAgICAgICAgICAgICAgIG15ID0gYXhpc3kuYzJwKG1vdXNlWSksCi0gICAgICAgICAgICAgICAg
ICAgIG1heHggPSBtYXhEaXN0YW5jZSAvIGF4aXN4LnNjYWxlLAotICAgICAgICAgICAgICAgICAg
ICBtYXh5ID0gbWF4RGlzdGFuY2UgLyBheGlzeS5zY2FsZTsKLQotICAgICAgICAgICAgICAgIHBz
ID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZTsKLSAgICAgICAgICAgICAgICAvLyB3aXRoIGludmVy
c2UgdHJhbnNmb3Jtcywgd2UgY2FuJ3QgdXNlIHRoZSBtYXh4L21heHkKLSAgICAgICAgICAgICAg
ICAvLyBvcHRpbWl6YXRpb24sIHNhZGx5Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXN4Lm9wdGlv
bnMuaW52ZXJzZVRyYW5zZm9ybSkKLSAgICAgICAgICAgICAgICAgICAgbWF4eCA9IE51bWJlci5N
QVhfVkFMVUU7Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXN5Lm9wdGlvbnMuaW52ZXJzZVRyYW5z
Zm9ybSkKLSAgICAgICAgICAgICAgICAgICAgbWF4eSA9IE51bWJlci5NQVhfVkFMVUU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAocy5saW5lcy5zaG93IHx8IHMucG9pbnRzLnNob3cpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBvaW50cy5sZW5ndGg7IGogKz0gcHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gcG9pbnRzW2pdLCB5ID0gcG9pbnRzW2og
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IG51bGwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZvciBwb2ludHMgYW5kIGxpbmVzLCB0aGUgY3Vyc29yIG11c3QgYmUgd2l0aGluIGEKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gZGlzdGFuY2UgdG8gdGhlIGRhdGEgcG9pbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4IC0gbXggPiBtYXh4IHx8IHggLSBteCA8IC1t
YXh4IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIG15ID4gbWF4eSB8fCB5IC0g
bXkgPCAtbWF4eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjYWxjdWxhdGUgZGlzdGFuY2VzIGlu
IHBpeGVscywgbm90IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIHVuaXRzLCBi
ZWNhdXNlIHRoZSBzY2FsZXMgb2YgdGhlIGF4ZXMgbWF5IGJlIGRpZmZlcmVudAotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGR4ID0gTWF0aC5hYnMoYXhpc3gucDJjKHgpIC0gbW91c2VYKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeSA9IE1hdGguYWJzKGF4aXN5LnAyYyh5KSAt
IG1vdXNlWSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IGR4ICogZHggKyBk
eSAqIGR5OyAvLyB3ZSBzYXZlIHRoZSBzcXJ0Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZSA8PSB0byBlbnN1cmUgbGFzdCBwb2ludCB0YWtlcyBwcmVjZWRlbmNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyAobGFzdCBnZW5lcmFsbHkgbWVhbnMgb24gdG9wIG9mKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBzbWFsbGVzdERpc3RhbmNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc21hbGxlc3REaXN0YW5jZSA9IGRpc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRlbSA9IFtpLCBqIC8gcHNdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKHMuYmFycy5zaG93ICYmICFpdGVtKSB7IC8vIG5vIG90aGVyIHBvaW50
IGNhbiBiZSBuZWFyYnkKLSAgICAgICAgICAgICAgICAgICAgdmFyIGJhckxlZnQgPSBzLmJhcnMu
YWxpZ24gPT0gImxlZnQiID8gMCA6IC1zLmJhcnMuYmFyV2lkdGgvMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJhclJpZ2h0ID0gYmFyTGVmdCArIHMuYmFycy5iYXJXaWR0aDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSBwcykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBwb2ludHNbal0sIHkgPSBwb2ludHNbaiAr
IDFdLCBiID0gcG9pbnRzW2ogKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09
IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGZvciBhIGJhciBncmFwaCwgdGhlIGN1cnNvciBtdXN0IGJlIGlu
c2lkZSB0aGUgYmFyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VyaWVzW2ldLmJhcnMu
aG9yaXpvbnRhbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG14IDw9IE1hdGgubWF4
KGIsIHgpICYmIG14ID49IE1hdGgubWluKGIsIHgpICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ID49IHkgKyBiYXJMZWZ0ICYmIG15IDw9IHkgKyBiYXJSaWdodCkgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChteCA+PSB4ICsgYmFyTGVmdCAmJiBteCA8PSB4ICsgYmFy
UmlnaHQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgPj0gTWF0aC5taW4oYiwg
eSkgJiYgbXkgPD0gTWF0aC5tYXgoYiwgeSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtID0gW2ksIGogLyBwc107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAg
ICAgICAgICAgICAgaSA9IGl0ZW1bMF07Ci0gICAgICAgICAgICAgICAgaiA9IGl0ZW1bMV07Ci0g
ICAgICAgICAgICAgICAgcHMgPSBzZXJpZXNbaV0uZGF0YXBvaW50cy5wb2ludHNpemU7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4geyBkYXRhcG9pbnQ6IHNlcmllc1tpXS5kYXRhcG9pbnRzLnBv
aW50cy5zbGljZShqICogcHMsIChqICsgMSkgKiBwcyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUluZGV4OiBqLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllczogc2VyaWVz
W2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllc0luZGV4OiBpIH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5o
b3ZlcmFibGUpCi0gICAgICAgICAgICAgICAgdHJpZ2dlckNsaWNrSG92ZXJFdmVudCgicGxvdGhv
dmVyIiwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IChzKSB7IHJldHVybiBzWyJob3ZlcmFibGUiXSAhPSBmYWxzZTsgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoZSkgewotICAgICAgICAgICAgaWYgKG9wdGlv
bnMuZ3JpZC5ob3ZlcmFibGUpCi0gICAgICAgICAgICAgICAgdHJpZ2dlckNsaWNrSG92ZXJFdmVu
dCgicGxvdGhvdmVyIiwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIChzKSB7IHJldHVybiBmYWxzZTsgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBvbkNsaWNrKGUpIHsKLSAgICAgICAgICAgIHRyaWdnZXJDbGlja0hvdmVyRXZlbnQo
InBsb3RjbGljayIsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIChzKSB7IHJldHVybiBzWyJjbGlja2FibGUiXSAhPSBmYWxzZTsgfSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyB0cmlnZ2VyIGNsaWNrIG9yIGhvdmVyIGV2ZW50ICh0aGV5IHNlbmQgdGhl
IHNhbWUgcGFyYW1ldGVycwotICAgICAgICAvLyBzbyB3ZSBzaGFyZSB0aGVpciBjb2RlKQotICAg
ICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2xpY2tIb3ZlckV2ZW50KGV2ZW50bmFtZSwgZXZlbnQsIHNl
cmllc0ZpbHRlcikgewotICAgICAgICAgICAgdmFyIG9mZnNldCA9IGV2ZW50SG9sZGVyLm9mZnNl
dCgpLAotICAgICAgICAgICAgICAgIGNhbnZhc1ggPSBldmVudC5wYWdlWCAtIG9mZnNldC5sZWZ0
IC0gcGxvdE9mZnNldC5sZWZ0LAotICAgICAgICAgICAgICAgIGNhbnZhc1kgPSBldmVudC5wYWdl
WSAtIG9mZnNldC50b3AgLSBwbG90T2Zmc2V0LnRvcCwKLSAgICAgICAgICAgIHBvcyA9IGNhbnZh
c1RvQXhpc0Nvb3Jkcyh7IGxlZnQ6IGNhbnZhc1gsIHRvcDogY2FudmFzWSB9KTsKLQotICAgICAg
ICAgICAgcG9zLnBhZ2VYID0gZXZlbnQucGFnZVg7Ci0gICAgICAgICAgICBwb3MucGFnZVkgPSBl
dmVudC5wYWdlWTsKLQotICAgICAgICAgICAgdmFyIGl0ZW0gPSBmaW5kTmVhcmJ5SXRlbShjYW52
YXNYLCBjYW52YXNZLCBzZXJpZXNGaWx0ZXIpOwotCi0gICAgICAgICAgICBpZiAoaXRlbSkgewot
ICAgICAgICAgICAgICAgIC8vIGZpbGwgaW4gbW91c2UgcG9zIGZvciBhbnkgbGlzdGVuZXJzIG91
dCB0aGVyZQotICAgICAgICAgICAgICAgIGl0ZW0ucGFnZVggPSBwYXJzZUludChpdGVtLnNlcmll
cy54YXhpcy5wMmMoaXRlbS5kYXRhcG9pbnRbMF0pICsgb2Zmc2V0LmxlZnQgKyBwbG90T2Zmc2V0
LmxlZnQsIDEwKTsKLSAgICAgICAgICAgICAgICBpdGVtLnBhZ2VZID0gcGFyc2VJbnQoaXRlbS5z
ZXJpZXMueWF4aXMucDJjKGl0ZW0uZGF0YXBvaW50WzFdKSArIG9mZnNldC50b3AgKyBwbG90T2Zm
c2V0LnRvcCwgMTApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5n
cmlkLmF1dG9IaWdobGlnaHQpIHsKLSAgICAgICAgICAgICAgICAvLyBjbGVhciBhdXRvLWhpZ2hs
aWdodHMKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodHMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBoaWdobGlnaHRzW2ldOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaC5hdXRvID09IGV2ZW50bmFtZSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgIShpdGVtICYmIGguc2VyaWVzID09IGl0ZW0uc2VyaWVzICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGgucG9pbnRbMF0gPT0gaXRlbS5kYXRhcG9pbnRbMF0gJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaC5wb2ludFsxXSA9PSBpdGVtLmRhdGFwb2ludFsx
XSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB1bmhpZ2hsaWdodChoLnNlcmllcywgaC5wb2lu
dCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW0pCi0gICAg
ICAgICAgICAgICAgICAgIGhpZ2hsaWdodChpdGVtLnNlcmllcywgaXRlbS5kYXRhcG9pbnQsIGV2
ZW50bmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBsYWNlaG9sZGVyLnRyaWdn
ZXIoZXZlbnRuYW1lLCBbIHBvcywgaXRlbSBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIHRyaWdnZXJSZWRyYXdPdmVybGF5KCkgewotICAgICAgICAgICAgdmFyIHQgPSBvcHRpb25z
LmludGVyYWN0aW9uLnJlZHJhd092ZXJsYXlJbnRlcnZhbDsKLSAgICAgICAgICAgIGlmICh0ID09
IC0xKSB7ICAgICAgLy8gc2tpcCBldmVudCBxdWV1ZQotICAgICAgICAgICAgICAgIGRyYXdPdmVy
bGF5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIXJlZHJhd1RpbWVvdXQpCi0gICAgICAgICAgICAgICAgcmVkcmF3VGltZW91dCA9
IHNldFRpbWVvdXQoZHJhd092ZXJsYXksIHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZHJhd092ZXJsYXkoKSB7Ci0gICAgICAgICAgICByZWRyYXdUaW1lb3V0ID0gbnVsbDsKLQot
ICAgICAgICAgICAgLy8gZHJhdyBoaWdobGlnaHRzCi0gICAgICAgICAgICBvY3R4LnNhdmUoKTsK
LSAgICAgICAgICAgIG9jdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWln
aHQpOwotICAgICAgICAgICAgb2N0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zm
c2V0LnRvcCk7Ci0KLSAgICAgICAgICAgIHZhciBpLCBoaTsKLSAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBoaWdobGlnaHRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaGkgPSBo
aWdobGlnaHRzW2ldOwotCi0gICAgICAgICAgICAgICAgaWYgKGhpLnNlcmllcy5iYXJzLnNob3cp
Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdCYXJIaWdobGlnaHQoaGkuc2VyaWVzLCBoaS5wb2lu
dCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkcmF3UG9pbnRI
aWdobGlnaHQoaGkuc2VyaWVzLCBoaS5wb2ludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBvY3R4LnJlc3RvcmUoKTsKLQotICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhvb2tzLmRyYXdP
dmVybGF5LCBbb2N0eF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGlnaGxpZ2h0
KHMsIHBvaW50LCBhdXRvKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHMgPT0gIm51bWJlciIp
Ci0gICAgICAgICAgICAgICAgcyA9IHNlcmllc1tzXTsKLQotICAgICAgICAgICAgaWYgKHR5cGVv
ZiBwb2ludCA9PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgIHZhciBwcyA9IHMuZGF0YXBv
aW50cy5wb2ludHNpemU7Ci0gICAgICAgICAgICAgICAgcG9pbnQgPSBzLmRhdGFwb2ludHMucG9p
bnRzLnNsaWNlKHBzICogcG9pbnQsIHBzICogKHBvaW50ICsgMSkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgaSA9IGluZGV4T2ZIaWdobGlnaHQocywgcG9pbnQpOwotICAgICAg
ICAgICAgaWYgKGkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRzLnB1c2goeyBz
ZXJpZXM6IHMsIHBvaW50OiBwb2ludCwgYXV0bzogYXV0byB9KTsKLQotICAgICAgICAgICAgICAg
IHRyaWdnZXJSZWRyYXdPdmVybGF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmICghYXV0bykKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRzW2ldLmF1dG8gPSBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHVuaGlnaGxpZ2h0KHMsIHBvaW50KSB7Ci0g
ICAgICAgICAgICBpZiAocyA9PSBudWxsICYmIHBvaW50ID09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgICBoaWdobGlnaHRzID0gW107Ci0gICAgICAgICAgICAgICAgdHJpZ2dlclJlZHJhd092ZXJs
YXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBzID09ICJudW1i
ZXIiKQotICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbc107Ci0KLSAgICAgICAgICAgIGlmICh0
eXBlb2YgcG9pbnQgPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcG9pbnQgPSBzLmRhdGFb
cG9pbnRdOwotCi0gICAgICAgICAgICB2YXIgaSA9IGluZGV4T2ZIaWdobGlnaHQocywgcG9pbnQp
OwotICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRz
LnNwbGljZShpLCAxKTsKLQotICAgICAgICAgICAgICAgIHRyaWdnZXJSZWRyYXdPdmVybGF5KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbmRleE9mSGln
aGxpZ2h0KHMsIHApIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlnaGxpZ2h0
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBoID0gaGlnaGxpZ2h0c1tpXTsK
LSAgICAgICAgICAgICAgICBpZiAoaC5zZXJpZXMgPT0gcyAmJiBoLnBvaW50WzBdID09IHBbMF0K
LSAgICAgICAgICAgICAgICAgICAgJiYgaC5wb2ludFsxXSA9PSBwWzFdKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdQb2ludEhpZ2hsaWdodChzZXJpZXMs
IHBvaW50KSB7Ci0gICAgICAgICAgICB2YXIgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sCi0g
ICAgICAgICAgICAgICAgYXhpc3ggPSBzZXJpZXMueGF4aXMsIGF4aXN5ID0gc2VyaWVzLnlheGlz
LAotICAgICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yID0gKHR5cGVvZiBzZXJpZXMuaGlnaGxp
Z2h0Q29sb3IgPT09ICJzdHJpbmciKSA/IHNlcmllcy5oaWdobGlnaHRDb2xvciA6ICQuY29sb3Iu
cGFyc2Uoc2VyaWVzLmNvbG9yKS5zY2FsZSgnYScsIDAuNSkudG9TdHJpbmcoKTsKLQotICAgICAg
ICAgICAgaWYgKHggPCBheGlzeC5taW4gfHwgeCA+IGF4aXN4Lm1heCB8fCB5IDwgYXhpc3kubWlu
IHx8IHkgPiBheGlzeS5tYXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICB2YXIgcG9pbnRSYWRpdXMgPSBzZXJpZXMucG9pbnRzLnJhZGl1cyArIHNlcmllcy5wb2ludHMu
bGluZVdpZHRoIC8gMjsKLSAgICAgICAgICAgIG9jdHgubGluZVdpZHRoID0gcG9pbnRSYWRpdXM7
Ci0gICAgICAgICAgICBvY3R4LnN0cm9rZVN0eWxlID0gaGlnaGxpZ2h0Q29sb3I7Ci0gICAgICAg
ICAgICB2YXIgcmFkaXVzID0gMS41ICogcG9pbnRSYWRpdXM7Ci0gICAgICAgICAgICB4ID0gYXhp
c3gucDJjKHgpOwotICAgICAgICAgICAgeSA9IGF4aXN5LnAyYyh5KTsKLQotICAgICAgICAgICAg
b2N0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGlmIChzZXJpZXMucG9pbnRzLnN5bWJvbCA9
PSAiY2lyY2xlIikKLSAgICAgICAgICAgICAgICBvY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIDIg
KiBNYXRoLlBJLCBmYWxzZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2Vy
aWVzLnBvaW50cy5zeW1ib2wob2N0eCwgeCwgeSwgcmFkaXVzLCBmYWxzZSk7Ci0gICAgICAgICAg
ICBvY3R4LmNsb3NlUGF0aCgpOwotICAgICAgICAgICAgb2N0eC5zdHJva2UoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdCYXJIaWdobGlnaHQoc2VyaWVzLCBwb2ludCkgewot
ICAgICAgICAgICAgdmFyIGhpZ2hsaWdodENvbG9yID0gKHR5cGVvZiBzZXJpZXMuaGlnaGxpZ2h0
Q29sb3IgPT09ICJzdHJpbmciKSA/IHNlcmllcy5oaWdobGlnaHRDb2xvciA6ICQuY29sb3IucGFy
c2Uoc2VyaWVzLmNvbG9yKS5zY2FsZSgnYScsIDAuNSkudG9TdHJpbmcoKSwKLSAgICAgICAgICAg
ICAgICBmaWxsU3R5bGUgPSBoaWdobGlnaHRDb2xvciwKLSAgICAgICAgICAgICAgICBiYXJMZWZ0
ID0gc2VyaWVzLmJhcnMuYWxpZ24gPT0gImxlZnQiID8gMCA6IC1zZXJpZXMuYmFycy5iYXJXaWR0
aC8yOwotCi0gICAgICAgICAgICBvY3R4LmxpbmVXaWR0aCA9IHNlcmllcy5iYXJzLmxpbmVXaWR0
aDsKLSAgICAgICAgICAgIG9jdHguc3Ryb2tlU3R5bGUgPSBoaWdobGlnaHRDb2xvcjsKLQotICAg
ICAgICAgICAgZHJhd0Jhcihwb2ludFswXSwgcG9pbnRbMV0sIHBvaW50WzJdIHx8IDAsIGJhckxl
ZnQsIGJhckxlZnQgKyBzZXJpZXMuYmFycy5iYXJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAg
MCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsbFN0eWxlOyB9LCBzZXJpZXMueGF4aXMsIHNlcmll
cy55YXhpcywgb2N0eCwgc2VyaWVzLmJhcnMuaG9yaXpvbnRhbCwgc2VyaWVzLmJhcnMubGluZVdp
ZHRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldENvbG9yT3JHcmFkaWVudChz
cGVjLCBib3R0b20sIHRvcCwgZGVmYXVsdENvbG9yKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9m
IHNwZWMgPT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNwZWM7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhpcyBpcyBhIGdyYWRpZW50
IHNwZWM7IElFIGN1cnJlbnRseSBvbmx5Ci0gICAgICAgICAgICAgICAgLy8gc3VwcG9ydHMgYSBz
aW1wbGUgdmVydGljYWwgZ3JhZGllbnQgcHJvcGVybHksIHNvIHRoYXQncwotICAgICAgICAgICAg
ICAgIC8vIHdoYXQgd2Ugc3VwcG9ydCB0b28KLSAgICAgICAgICAgICAgICB2YXIgZ3JhZGllbnQg
PSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgdG9wLCAwLCBib3R0b20pOwotCi0gICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzcGVjLmNvbG9ycy5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBzcGVjLmNvbG9yc1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjICE9ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY28gPSAkLmNvbG9yLnBhcnNlKGRlZmF1bHRDb2xvcik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYy5icmlnaHRuZXNzICE9IG51bGwpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY28gPSBjby5zY2FsZSgncmdiJywgYy5icmlnaHRuZXNzKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjLm9wYWNpdHkgIT0gbnVsbCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjby5hICo9IGMub3BhY2l0eTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGMgPSBjby50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcChpIC8gKGwgLSAxKSwgYyk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgJC5wbG90ID0gZnVuY3Rpb24ocGxhY2Vob2xkZXIs
IGRhdGEsIG9wdGlvbnMpIHsKLSAgICAgICAgLy92YXIgdDAgPSBuZXcgRGF0ZSgpOwotICAgICAg
ICB2YXIgcGxvdCA9IG5ldyBQbG90KCQocGxhY2Vob2xkZXIpLCBkYXRhLCBvcHRpb25zLCAkLnBs
b3QucGx1Z2lucyk7Ci0gICAgICAgIC8vKHdpbmRvdy5jb25zb2xlID8gY29uc29sZS5sb2cgOiBh
bGVydCkoInRpbWUgdXNlZCAobXNlY3MpOiAiICsgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSB0
MC5nZXRUaW1lKCkpKTsKLSAgICAgICAgcmV0dXJuIHBsb3Q7Ci0gICAgfTsKLQotICAgICQucGxv
dC52ZXJzaW9uID0gIjAuOC1hbHBoYSI7Ci0KLSAgICAkLnBsb3QucGx1Z2lucyA9IFtdOwotCi0g
ICAgLy8gcm91bmQgdG8gbmVhcmJ5IGxvd2VyIG11bHRpcGxlIG9mIGJhc2UKLSAgICBmdW5jdGlv
biBmbG9vckluQmFzZShuLCBiYXNlKSB7Ci0gICAgICAgIHJldHVybiBiYXNlICogTWF0aC5mbG9v
cihuIC8gYmFzZSk7Ci0gICAgfQotCi19KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5uYXZpZ2F0ZS5qcyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QubmF2aWdhdGUuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNzJhYzQ2M2UxOTUxYjU3NmZiMWEzZTdjZjZm
ZWRjYmI4N2QxNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5uYXZpZ2F0
ZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3Ig
YWRkaW5nIHRoZSBhYmlsaXR5IHRvIHBhbiBhbmQgem9vbSB0aGUgcGxvdC4KLQotQ29weXJpZ2h0
IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUg
TUlUIGxpY2Vuc2UuCi0KLVRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBkb3VibGUgY2xpY2sgYW5k
IHNjcm9sbHdoZWVsIHVwL2Rvd24gdG8gem9vbSBpbiwgZHJhZwotdG8gcGFuLiBUaGUgcGx1Z2lu
IGRlZmluZXMgcGxvdC56b29tKHsgY2VudGVyIH0pLCBwbG90Lnpvb21PdXQoKSBhbmQKLXBsb3Qu
cGFuKCBvZmZzZXQgKSBzbyB5b3UgZWFzaWx5IGNhbiBhZGQgY3VzdG9tIGNvbnRyb2xzLiBJdCBh
bHNvIGZpcmVzCi0icGxvdHBhbiIgYW5kICJwbG90em9vbSIgZXZlbnRzLCB1c2VmdWwgZm9yIHN5
bmNocm9uaXppbmcgcGxvdHMuCi0KLVRoZSBwbHVnaW4gc3VwcG9ydHMgdGhlc2Ugb3B0aW9uczoK
LQotICAgIHpvb206IHsKLSAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlCi0gICAgICAgIHRyaWdn
ZXI6ICJkYmxjbGljayIgLy8gb3IgImNsaWNrIiBmb3Igc2luZ2xlIGNsaWNrCi0gICAgICAgIGFt
b3VudDogMS41ICAgICAgICAgLy8gMiA9IDIwMCUgKHpvb20gaW4pLCAwLjUgPSA1MCUgKHpvb20g
b3V0KQotICAgIH0KLQotICAgIHBhbjogewotICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UKLSAg
ICAgICAgY3Vyc29yOiAibW92ZSIgICAgICAvLyBDU1MgbW91c2UgY3Vyc29yIHZhbHVlIHVzZWQg
d2hlbiBkcmFnZ2luZywgZS5nLiAicG9pbnRlciIKLSAgICAgICAgZnJhbWVSYXRlOiAyMAotICAg
IH0KLQotICAgIHhheGlzLCB5YXhpcywgeDJheGlzLCB5MmF4aXM6IHsKLSAgICAgICAgem9vbVJh
bmdlOiBudWxsICAvLyBvciBbIG51bWJlciwgbnVtYmVyIF0gKG1pbiByYW5nZSwgbWF4IHJhbmdl
KSBvciBmYWxzZQotICAgICAgICBwYW5SYW5nZTogbnVsbCAgIC8vIG9yIFsgbnVtYmVyLCBudW1i
ZXIgXSAobWluLCBtYXgpIG9yIGZhbHNlCi0gICAgfQotCi0iaW50ZXJhY3RpdmUiIGVuYWJsZXMg
dGhlIGJ1aWx0LWluIGRyYWcvY2xpY2sgYmVoYXZpb3VyLiBJZiB5b3UgZW5hYmxlCi1pbnRlcmFj
dGl2ZSBmb3IgcGFuLCB0aGVuIHlvdSdsbCBoYXZlIGEgYmFzaWMgcGxvdCB0aGF0IHN1cHBvcnRz
IG1vdmluZwotYXJvdW5kOyB0aGUgc2FtZSBmb3Igem9vbS4KLQotImFtb3VudCIgc3BlY2lmaWVz
IHRoZSBkZWZhdWx0IGFtb3VudCB0byB6b29tIGluIChzbyAxLjUgPSAxNTAlKSByZWxhdGl2ZSB0
bwotdGhlIGN1cnJlbnQgdmlld3BvcnQuCi0KLSJjdXJzb3IiIGlzIGEgc3RhbmRhcmQgQ1NTIG1v
dXNlIGN1cnNvciBzdHJpbmcgdXNlZCBmb3IgdmlzdWFsIGZlZWRiYWNrIHRvIHRoZQotdXNlciB3
aGVuIGRyYWdnaW5nLgotCi0iZnJhbWVSYXRlIiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVy
IG9mIHRpbWVzIHBlciBzZWNvbmQgdGhlIHBsb3Qgd2lsbAotdXBkYXRlIGl0c2VsZiB3aGlsZSB0
aGUgdXNlciBpcyBwYW5uaW5nIGFyb3VuZCBvbiBpdCAoc2V0IHRvIG51bGwgdG8gZGlzYWJsZQot
aW50ZXJtZWRpYXRlIHBhbnMsIHRoZSBwbG90IHdpbGwgdGhlbiBub3QgdXBkYXRlIHVudGlsIHRo
ZSBtb3VzZSBidXR0b24gaXMKLXJlbGVhc2VkKS4KLQotInpvb21SYW5nZSIgaXMgdGhlIGludGVy
dmFsIGluIHdoaWNoIHpvb21pbmcgY2FuIGhhcHBlbiwgZS5nLiB3aXRoIHpvb21SYW5nZToKLVsx
LCAxMDBdIHRoZSB6b29tIHdpbGwgbmV2ZXIgc2NhbGUgdGhlIGF4aXMgc28gdGhhdCB0aGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIG1pbgotYW5kIG1heCBpcyBzbWFsbGVyIHRoYW4gMSBvciBsYXJnZXIg
dGhhbiAxMDAuIFlvdSBjYW4gc2V0IGVpdGhlciBlbmQgdG8gbnVsbAotdG8gaWdub3JlLCBlLmcu
IFsxLCBudWxsXS4gSWYgeW91IHNldCB6b29tUmFuZ2UgdG8gZmFsc2UsIHpvb21pbmcgb24gdGhh
dCBheGlzCi13aWxsIGJlIGRpc2FibGVkLgotCi0icGFuUmFuZ2UiIGNvbmZpbmVzIHRoZSBwYW5u
aW5nIHRvIHN0YXkgd2l0aGluIGEgcmFuZ2UsIGUuZy4gd2l0aCBwYW5SYW5nZToKLVstMTAsIDIw
XSBwYW5uaW5nIHN0b3BzIGF0IC0xMCBpbiBvbmUgZW5kIGFuZCBhdCAyMCBpbiB0aGUgb3RoZXIu
IEVpdGhlciBjYW4KLWJlIG51bGwsIGUuZy4gWy0xMCwgbnVsbF0uIElmIHlvdSBzZXQgcGFuUmFu
Z2UgdG8gZmFsc2UsIHBhbm5pbmcgb24gdGhhdCBheGlzCi13aWxsIGJlIGRpc2FibGVkLgotCi1F
eGFtcGxlIEFQSSB1c2FnZToKLQotICAgIHBsb3QgPSAkLnBsb3QoLi4uKTsKLQotICAgIC8vIHpv
b20gZGVmYXVsdCBhbW91bnQgaW4gb24gdGhlIHBpeGVsICggMTAsIDIwICkKLSAgICBwbG90Lnpv
b20oeyBjZW50ZXI6IHsgbGVmdDogMTAsIHRvcDogMjAgfSB9KTsKLQotICAgIC8vIHpvb20gb3V0
IGFnYWluCi0gICAgcGxvdC56b29tT3V0KHsgY2VudGVyOiB7IGxlZnQ6IDEwLCB0b3A6IDIwIH0g
fSk7Ci0KLSAgICAvLyB6b29tIDIwMCUgaW4gb24gdGhlIHBpeGVsICgxMCwgMjApCi0gICAgcGxv
dC56b29tKHsgYW1vdW50OiAyLCBjZW50ZXI6IHsgbGVmdDogMTAsIHRvcDogMjAgfSB9KTsKLQot
ICAgIC8vIHBhbiAxMDAgcGl4ZWxzIHRvIHRoZSBsZWZ0IGFuZCAyMCBkb3duCi0gICAgcGxvdC5w
YW4oeyBsZWZ0OiAtMTAwLCB0b3A6IDIwIH0pCi0KLUhlcmUsICJjZW50ZXIiIHNwZWNpZmllcyB3
aGVyZSB0aGUgY2VudGVyIG9mIHRoZSB6b29taW5nIHNob3VsZCBoYXBwZW4uIE5vdGUKLXRoYXQg
dGhpcyBpcyBkZWZpbmVkIGluIHBpeGVsIHNwYWNlLCBub3QgdGhlIHNwYWNlIG9mIHRoZSBkYXRh
IHBvaW50cyAoeW91IGNhbgotdXNlIHRoZSBwMmMgaGVscGVycyBvbiB0aGUgYXhlcyBpbiBGbG90
IHRvIGhlbHAgeW91IGNvbnZlcnQgYmV0d2VlbiB0aGVzZSkuCi0KLSJhbW91bnQiIGlzIHRoZSBh
bW91bnQgdG8gem9vbSB0aGUgdmlld3BvcnQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcmFuZ2Us
IHNvCi0xIGlzIDEwMCUgKGkuZS4gbm8gY2hhbmdlKSwgMS41IGlzIDE1MCUgKHpvb20gaW4pLCAw
LjcgaXMgNzAlICh6b29tIG91dCkuIFlvdQotY2FuIHNldCB0aGUgZGVmYXVsdCBpbiB0aGUgb3B0
aW9ucy4KLQotKi8KLQotLy8gRmlyc3QgdHdvIGRlcGVuZGVuY2llcywganF1ZXJ5LmV2ZW50LmRy
YWcuanMgYW5kCi0vLyBqcXVlcnkubW91c2V3aGVlbC5qcywgd2UgcHV0IHRoZW0gaW5saW5lIGhl
cmUgdG8gc2F2ZSBwZW9wbGUgdGhlCi0vLyBlZmZvcnQgb2YgZG93bmxvYWRpbmcgdGhlbS4KLQot
LyoKLWpxdWVyeS5ldmVudC5kcmFnLmpzIH4gdjEuNSB+IENvcHlyaWdodCAoYykgMjAwOCwgVGhy
ZWUgRHViIE1lZGlhIChodHRwOi8vdGhyZWVkdWJtZWRpYS5jb20pCi1MaWNlbnNlZCB1bmRlciB0
aGUgTUlUIExpY2Vuc2UgfiBodHRwOi8vdGhyZWVkdWJtZWRpYS5nb29nbGVjb2RlLmNvbS9maWxl
cy9NSVQtTElDRU5TRS50eHQKLSovCi0oZnVuY3Rpb24oRSl7RS5mbi5kcmFnPWZ1bmN0aW9uKEws
SyxKKXtpZihLKXt0aGlzLmJpbmQoImRyYWdzdGFydCIsTCl9aWYoSil7dGhpcy5iaW5kKCJkcmFn
ZW5kIixKKX1yZXR1cm4gIUw/dGhpcy50cmlnZ2VyKCJkcmFnIik6dGhpcy5iaW5kKCJkcmFnIixL
P0s6TCl9O3ZhciBBPUUuZXZlbnQsQj1BLnNwZWNpYWwsRj1CLmRyYWc9e25vdDoiOmlucHV0Iixk
aXN0YW5jZTowLHdoaWNoOjEsZHJhZ2dpbmc6ZmFsc2Usc2V0dXA6ZnVuY3Rpb24oSil7Sj1FLmV4
dGVuZCh7ZGlzdGFuY2U6Ri5kaXN0YW5jZSx3aGljaDpGLndoaWNoLG5vdDpGLm5vdH0sSnx8e30p
O0ouZGlzdGFuY2U9SShKLmRpc3RhbmNlKTtBLmFkZCh0aGlzLCJtb3VzZWRvd24iLEgsSik7aWYo
dGhpcy5hdHRhY2hFdmVudCl7dGhpcy5hdHRhY2hFdmVudCgib25kcmFnc3RhcnQiLEQpfX0sdGVh
cmRvd246ZnVuY3Rpb24oKXtBLnJlbW92ZSh0aGlzLCJtb3VzZWRvd24iLEgpO2lmKHRoaXM9PT1G
LmRyYWdnaW5nKXtGLmRyYWdnaW5nPUYucHJveHk9ZmFsc2V9Ryh0aGlzLHRydWUpO2lmKHRoaXMu
ZGV0YWNoRXZlbnQpe3RoaXMuZGV0YWNoRXZlbnQoIm9uZHJhZ3N0YXJ0IixEKX19fTtCLmRyYWdz
dGFydD1CLmRyYWdlbmQ9e3NldHVwOmZ1bmN0aW9uKCl7fSx0ZWFyZG93bjpmdW5jdGlvbigpe319
O2Z1bmN0aW9uIEgoTCl7dmFyIEs9dGhpcyxKLE09TC5kYXRhfHx7fTtpZihNLmVsZW0pe0s9TC5k
cmFnVGFyZ2V0PU0uZWxlbTtMLmRyYWdQcm94eT1GLnByb3h5fHxLO0wuY3Vyc29yT2Zmc2V0WD1N
LnBhZ2VYLU0ubGVmdDtMLmN1cnNvck9mZnNldFk9TS5wYWdlWS1NLnRvcDtMLm9mZnNldFg9TC5w
YWdlWC1MLmN1cnNvck9mZnNldFg7TC5vZmZzZXRZPUwucGFnZVktTC5jdXJzb3JPZmZzZXRZfWVs
c2V7aWYoRi5kcmFnZ2luZ3x8KE0ud2hpY2g+MCYmTC53aGljaCE9TS53aGljaCl8fEUoTC50YXJn
ZXQpLmlzKE0ubm90KSl7cmV0dXJuIH19c3dpdGNoKEwudHlwZSl7Y2FzZSJtb3VzZWRvd24iOkUu
ZXh0ZW5kKE0sRShLKS5vZmZzZXQoKSx7ZWxlbTpLLHRhcmdldDpMLnRhcmdldCxwYWdlWDpMLnBh
Z2VYLHBhZ2VZOkwucGFnZVl9KTtBLmFkZChkb2N1bWVudCwibW91c2Vtb3ZlIG1vdXNldXAiLEgs
TSk7RyhLLGZhbHNlKTtGLmRyYWdnaW5nPW51bGw7cmV0dXJuIGZhbHNlO2Nhc2UgIUYuZHJhZ2dp
bmcmJiJtb3VzZW1vdmUiOmlmKEkoTC5wYWdlWC1NLnBhZ2VYKStJKEwucGFnZVktTS5wYWdlWSk8
TS5kaXN0YW5jZSl7YnJlYWt9TC50YXJnZXQ9TS50YXJnZXQ7Sj1DKEwsImRyYWdzdGFydCIsSyk7
aWYoSiE9PWZhbHNlKXtGLmRyYWdnaW5nPUs7Ri5wcm94eT1MLmRyYWdQcm94eT1FKEp8fEspWzBd
fWNhc2UibW91c2Vtb3ZlIjppZihGLmRyYWdnaW5nKXtKPUMoTCwiZHJhZyIsSyk7aWYoQi5kcm9w
KXtCLmRyb3AuYWxsb3dlZD0oSiE9PWZhbHNlKTtCLmRyb3AuaGFuZGxlcihMKX1pZihKIT09ZmFs
c2Upe2JyZWFrfUwudHlwZT0ibW91c2V1cCJ9Y2FzZSJtb3VzZXVwIjpBLnJlbW92ZShkb2N1bWVu
dCwibW91c2Vtb3ZlIG1vdXNldXAiLEgpO2lmKEYuZHJhZ2dpbmcpe2lmKEIuZHJvcCl7Qi5kcm9w
LmhhbmRsZXIoTCl9QyhMLCJkcmFnZW5kIixLKX1HKEssdHJ1ZSk7Ri5kcmFnZ2luZz1GLnByb3h5
PU0uZWxlbT1mYWxzZTticmVha31yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBDKE0sSyxMKXtNLnR5cGU9
Szt2YXIgSj1FLmV2ZW50LmhhbmRsZS5jYWxsKEwsTSk7cmV0dXJuIEo9PT1mYWxzZT9mYWxzZTpK
fHxNLnJlc3VsdH1mdW5jdGlvbiBJKEope3JldHVybiBNYXRoLnBvdyhKLDIpfWZ1bmN0aW9uIEQo
KXtyZXR1cm4oRi5kcmFnZ2luZz09PWZhbHNlKX1mdW5jdGlvbiBHKEssSil7aWYoIUspe3JldHVy
biB9Sy51bnNlbGVjdGFibGU9Sj8ib2ZmIjoib24iO0sub25zZWxlY3RzdGFydD1mdW5jdGlvbigp
e3JldHVybiBKfTtpZihLLnN0eWxlKXtLLnN0eWxlLk1velVzZXJTZWxlY3Q9Sj8iIjoibm9uZSJ9
fX0pKGpRdWVyeSk7Ci0KLS8qIGpxdWVyeS5tb3VzZXdoZWVsLm1pbi5qcwotICogQ29weXJpZ2h0
IChjKSAyMDExIEJyYW5kb24gQWFyb24gKGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KQotICogTGlj
ZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChMSUNFTlNFLnR4dCkuCi0gKiBUaGFua3MgdG86
IGh0dHA6Ly9hZG9tYXMub3JnL2phdmFzY3JpcHQtbW91c2Utd2hlZWwvIGZvciBzb21lIHBvaW50
ZXJzLgotICogVGhhbmtzIHRvOiBNYXRoaWFzIEJhbmsoaHR0cDovL3d3dy5tYXRoaWFzLWJhbmsu
ZGUpIGZvciBhIHNjb3BlIGJ1ZyBmaXguCi0gKiBUaGFua3MgdG86IFNlYW11cyBMZWFoeSBmb3Ig
YWRkaW5nIGRlbHRhWCBhbmQgZGVsdGFZCi0gKgotICogVmVyc2lvbjogMy4wLjYKLSAqCi0gKiBS
ZXF1aXJlczogMS4yLjIrCi0gKi8KLShmdW5jdGlvbihkKXtmdW5jdGlvbiBlKGEpe3ZhciBiPWF8
fHdpbmRvdy5ldmVudCxjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGY9MCxlPTAsZz0wLGE9
ZC5ldmVudC5maXgoYik7YS50eXBlPSJtb3VzZXdoZWVsIjtiLndoZWVsRGVsdGEmJihmPWIud2hl
ZWxEZWx0YS8xMjApO2IuZGV0YWlsJiYoZj0tYi5kZXRhaWwvMyk7Zz1mO3ZvaWQgMCE9PWIuYXhp
cyYmYi5heGlzPT09Yi5IT1JJWk9OVEFMX0FYSVMmJihnPTAsZT0tMSpmKTt2b2lkIDAhPT1iLndo
ZWVsRGVsdGFZJiYoZz1iLndoZWVsRGVsdGFZLzEyMCk7dm9pZCAwIT09Yi53aGVlbERlbHRhWCYm
KGU9LTEqYi53aGVlbERlbHRhWC8xMjApO2MudW5zaGlmdChhLGYsZSxnKTtyZXR1cm4oZC5ldmVu
dC5kaXNwYXRjaHx8ZC5ldmVudC5oYW5kbGUpLmFwcGx5KHRoaXMsYyl9dmFyIGM9WyJET01Nb3Vz
ZVNjcm9sbCIsIm1vdXNld2hlZWwiXTtpZihkLmV2ZW50LmZpeEhvb2tzKWZvcih2YXIgaD1jLmxl
bmd0aDtoOylkLmV2ZW50LmZpeEhvb2tzW2NbLS1oXV09ZC5ldmVudC5tb3VzZUhvb2tzO2QuZXZl
bnQuc3BlY2lhbC5tb3VzZXdoZWVsPXtzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMuYWRkRXZlbnRM
aXN0ZW5lcilmb3IodmFyIGE9Yy5sZW5ndGg7YTspdGhpcy5hZGRFdmVudExpc3RlbmVyKGNbLS1h
XSxlLCExKTtlbHNlIHRoaXMub25tb3VzZXdoZWVsPWV9LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYo
dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKWZvcih2YXIgYT1jLmxlbmd0aDthOyl0aGlzLnJlbW92
ZUV2ZW50TGlzdGVuZXIoY1stLWFdLGUsITEpO2Vsc2UgdGhpcy5vbm1vdXNld2hlZWw9bnVsbH19
O2QuZm4uZXh0ZW5kKHttb3VzZXdoZWVsOmZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuYmluZCgi
bW91c2V3aGVlbCIsYSk6dGhpcy50cmlnZ2VyKCJtb3VzZXdoZWVsIil9LHVubW91c2V3aGVlbDpm
dW5jdGlvbihhKXtyZXR1cm4gdGhpcy51bmJpbmQoIm1vdXNld2hlZWwiLGEpfX0pfSkoalF1ZXJ5
KTsKLQotCi0KLQotKGZ1bmN0aW9uICgkKSB7Ci0gICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAg
IHhheGlzOiB7Ci0gICAgICAgICAgICB6b29tUmFuZ2U6IG51bGwsIC8vIG9yIFtudW1iZXIsIG51
bWJlcl0gKG1pbiByYW5nZSwgbWF4IHJhbmdlKQotICAgICAgICAgICAgcGFuUmFuZ2U6IG51bGwg
Ly8gb3IgW251bWJlciwgbnVtYmVyXSAobWluLCBtYXgpCi0gICAgICAgIH0sCi0gICAgICAgIHpv
b206IHsKLSAgICAgICAgICAgIGludGVyYWN0aXZlOiBmYWxzZSwKLSAgICAgICAgICAgIHRyaWdn
ZXI6ICJkYmxjbGljayIsIC8vIG9yICJjbGljayIgZm9yIHNpbmdsZSBjbGljawotICAgICAgICAg
ICAgYW1vdW50OiAxLjUgLy8gaG93IG11Y2ggdG8gem9vbSByZWxhdGl2ZSB0byBjdXJyZW50IHBv
c2l0aW9uLCAyID0gMjAwJSAoem9vbSBpbiksIDAuNSA9IDUwJSAoem9vbSBvdXQpCi0gICAgICAg
IH0sCi0gICAgICAgIHBhbjogewotICAgICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLAotICAg
ICAgICAgICAgY3Vyc29yOiAibW92ZSIsCi0gICAgICAgICAgICBmcmFtZVJhdGU6IDIwCi0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIGZ1bmN0
aW9uIG9uWm9vbUNsaWNrKGUsIHpvb21PdXQpIHsKLSAgICAgICAgICAgIHZhciBjID0gcGxvdC5v
ZmZzZXQoKTsKLSAgICAgICAgICAgIGMubGVmdCA9IGUucGFnZVggLSBjLmxlZnQ7Ci0gICAgICAg
ICAgICBjLnRvcCA9IGUucGFnZVkgLSBjLnRvcDsKLSAgICAgICAgICAgIGlmICh6b29tT3V0KQot
ICAgICAgICAgICAgICAgIHBsb3Quem9vbU91dCh7IGNlbnRlcjogYyB9KTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBwbG90Lnpvb20oeyBjZW50ZXI6IGMgfSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBvbk1vdXNlV2hlZWwoZSwgZGVsdGEpIHsKLSAgICAgICAg
ICAgIG9uWm9vbUNsaWNrKGUsIGRlbHRhIDwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZhciBwcmV2Q3Vyc29yID0gJ2RlZmF1bHQn
LCBwcmV2UGFnZVggPSAwLCBwcmV2UGFnZVkgPSAwLAotICAgICAgICAgICAgcGFuVGltZW91dCA9
IG51bGw7Ci0KLSAgICAgICAgZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkgewotICAgICAgICAgICAg
aWYgKGUud2hpY2ggIT0gMSkgIC8vIG9ubHkgYWNjZXB0IGxlZnQtY2xpY2sKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgYyA9IHBsb3QuZ2V0UGxhY2Vob2xk
ZXIoKS5jc3MoJ2N1cnNvcicpOwotICAgICAgICAgICAgaWYgKGMpCi0gICAgICAgICAgICAgICAg
cHJldkN1cnNvciA9IGM7Ci0gICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkuY3NzKCdj
dXJzb3InLCBwbG90LmdldE9wdGlvbnMoKS5wYW4uY3Vyc29yKTsKLSAgICAgICAgICAgIHByZXZQ
YWdlWCA9IGUucGFnZVg7Ci0gICAgICAgICAgICBwcmV2UGFnZVkgPSBlLnBhZ2VZOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmdW5jdGlvbiBvbkRyYWcoZSkgewotICAgICAgICAgICAg
dmFyIGZyYW1lUmF0ZSA9IHBsb3QuZ2V0T3B0aW9ucygpLnBhbi5mcmFtZVJhdGU7Ci0gICAgICAg
ICAgICBpZiAocGFuVGltZW91dCB8fCAhZnJhbWVSYXRlKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgcGFuVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgIHBsb3QucGFuKHsgbGVmdDogcHJldlBhZ2VYIC0gZS5wYWdlWCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcHJldlBhZ2VZIC0gZS5wYWdlWSB9KTsKLSAg
ICAgICAgICAgICAgICBwcmV2UGFnZVggPSBlLnBhZ2VYOwotICAgICAgICAgICAgICAgIHByZXZQ
YWdlWSA9IGUucGFnZVk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcGFuVGltZW91dCA9IG51bGw7Ci0gICAgICAg
ICAgICB9LCAxIC8gZnJhbWVSYXRlICogMTAwMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBvbkRyYWdFbmQoZSkgewotICAgICAgICAgICAgaWYgKHBhblRpbWVvdXQpIHsKLSAgICAg
ICAgICAgICAgICBjbGVhclRpbWVvdXQocGFuVGltZW91dCk7Ci0gICAgICAgICAgICAgICAgcGFu
VGltZW91dCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigpLmNzcygnY3Vyc29yJywgcHJldkN1cnNvcik7
Ci0gICAgICAgICAgICBwbG90LnBhbih7IGxlZnQ6IHByZXZQYWdlWCAtIGUucGFnZVgsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHRvcDogcHJldlBhZ2VZIC0gZS5wYWdlWSB9KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gYmluZEV2ZW50cyhwbG90LCBldmVudEhvbGRl
cikgewotICAgICAgICAgICAgdmFyIG8gPSBwbG90LmdldE9wdGlvbnMoKTsKLSAgICAgICAgICAg
IGlmIChvLnpvb20uaW50ZXJhY3RpdmUpIHsKLSAgICAgICAgICAgICAgICBldmVudEhvbGRlcltv
Lnpvb20udHJpZ2dlcl0ob25ab29tQ2xpY2spOwotICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVy
Lm1vdXNld2hlZWwob25Nb3VzZVdoZWVsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG8ucGFuLmludGVyYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIuYmlu
ZCgiZHJhZ3N0YXJ0IiwgeyBkaXN0YW5jZTogMTAgfSwgb25EcmFnU3RhcnQpOwotICAgICAgICAg
ICAgICAgIGV2ZW50SG9sZGVyLmJpbmQoImRyYWciLCBvbkRyYWcpOwotICAgICAgICAgICAgICAg
IGV2ZW50SG9sZGVyLmJpbmQoImRyYWdlbmQiLCBvbkRyYWdFbmQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcGxvdC56b29tT3V0ID0gZnVuY3Rpb24gKGFyZ3MpIHsKLSAg
ICAgICAgICAgIGlmICghYXJncykKLSAgICAgICAgICAgICAgICBhcmdzID0ge307Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghYXJncy5hbW91bnQpCi0gICAgICAgICAgICAgICAgYXJn
cy5hbW91bnQgPSBwbG90LmdldE9wdGlvbnMoKS56b29tLmFtb3VudDsKLQotICAgICAgICAgICAg
YXJncy5hbW91bnQgPSAxIC8gYXJncy5hbW91bnQ7Ci0gICAgICAgICAgICBwbG90Lnpvb20oYXJn
cyk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBwbG90Lnpvb20gPSBmdW5jdGlvbiAo
YXJncykgewotICAgICAgICAgICAgaWYgKCFhcmdzKQotICAgICAgICAgICAgICAgIGFyZ3MgPSB7
fTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIGMgPSBhcmdzLmNlbnRlciwKLSAgICAg
ICAgICAgICAgICBhbW91bnQgPSBhcmdzLmFtb3VudCB8fCBwbG90LmdldE9wdGlvbnMoKS56b29t
LmFtb3VudCwKLSAgICAgICAgICAgICAgICB3ID0gcGxvdC53aWR0aCgpLCBoID0gcGxvdC5oZWln
aHQoKTsKLQotICAgICAgICAgICAgaWYgKCFjKQotICAgICAgICAgICAgICAgIGMgPSB7IGxlZnQ6
IHcgLyAyLCB0b3A6IGggLyAyIH07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIg
eGYgPSBjLmxlZnQgLyB3LAotICAgICAgICAgICAgICAgIHlmID0gYy50b3AgLyBoLAotICAgICAg
ICAgICAgICAgIG1pbm1heCA9IHsKLSAgICAgICAgICAgICAgICAgICAgeDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgbWluOiBjLmxlZnQgLSB4ZiAqIHcgLyBhbW91bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXg6IGMubGVmdCArICgxIC0geGYpICogdyAvIGFtb3VudAotICAgICAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB5OiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtaW46IGMudG9wIC0geWYgKiBoIC8gYW1vdW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4OiBjLnRvcCArICgxIC0geWYpICogaCAvIGFtb3VudAotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgJC5lYWNoKHBsb3Qu
Z2V0QXhlcygpLCBmdW5jdGlvbihfLCBheGlzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdHMg
PSBheGlzLm9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1pbm1heFtheGlzLmRp
cmVjdGlvbl0ubWluLAotICAgICAgICAgICAgICAgICAgICBtYXggPSBtaW5tYXhbYXhpcy5kaXJl
Y3Rpb25dLm1heCwKLSAgICAgICAgICAgICAgICAgICAgenIgPSBvcHRzLnpvb21SYW5nZSwKLSAg
ICAgICAgICAgICAgICAgICAgcHIgPSBvcHRzLnBhblJhbmdlOwotCi0gICAgICAgICAgICAgICAg
aWYgKHpyID09PSBmYWxzZSkgLy8gbm8gem9vbWluZyBvbiB0aGlzIGF4aXMKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
aW4gPSBheGlzLmMycChtaW4pOwotICAgICAgICAgICAgICAgIG1heCA9IGF4aXMuYzJwKG1heCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1pbiA+IG1heCkgewotICAgICAgICAgICAgICAgICAgICAv
LyBtYWtlIHN1cmUgbWluIDwgbWF4Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBtaW47
Ci0gICAgICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKLSAgICAgICAgICAgICAgICAgICAgbWF4
ID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vQ2hlY2sgdGhh
dCB3ZSBhcmUgaW4gcGFuUmFuZ2UKLSAgICAgICAgICAgICAgICBpZiAocHIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHByWzBdICE9IG51bGwgJiYgbWluIDwgcHJbMF0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1pbiA9IHByWzBdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwclsxXSAhPSBudWxsICYmIG1heCA+IHByWzFdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXggPSBwclsxXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IG1heCAtIG1p
bjsKLSAgICAgICAgICAgICAgICBpZiAoenIgJiYKLSAgICAgICAgICAgICAgICAgICAgKCh6clsw
XSAhPSBudWxsICYmIHJhbmdlIDwgenJbMF0pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoenJb
MV0gIT0gbnVsbCAmJiByYW5nZSA+IHpyWzFdKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9wdHMubWluID0gbWluOwotICAgICAg
ICAgICAgICAgIG9wdHMubWF4ID0gbWF4OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHBsb3Quc2V0dXBHcmlkKCk7Ci0gICAgICAgICAgICBwbG90LmRyYXcoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhcmdzLnByZXZlbnRFdmVudCkKLSAgICAg
ICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHpvb20iLCBbIHBs
b3QsIGFyZ3MgXSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcGxvdC5wYW4gPSBmdW5jdGlvbiAo
YXJncykgewotICAgICAgICAgICAgdmFyIGRlbHRhID0gewotICAgICAgICAgICAgICAgIHg6ICth
cmdzLmxlZnQsCi0gICAgICAgICAgICAgICAgeTogK2FyZ3MudG9wCi0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICBpZiAoaXNOYU4oZGVsdGEueCkpCi0gICAgICAgICAgICAgICAgZGVsdGEu
eCA9IDA7Ci0gICAgICAgICAgICBpZiAoaXNOYU4oZGVsdGEueSkpCi0gICAgICAgICAgICAgICAg
ZGVsdGEueSA9IDA7Ci0KLSAgICAgICAgICAgICQuZWFjaChwbG90LmdldEF4ZXMoKSwgZnVuY3Rp
b24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IGF4aXMub3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgbWluLCBtYXgsIGQgPSBkZWx0YVtheGlzLmRpcmVjdGlvbl07
Ci0KLSAgICAgICAgICAgICAgICBtaW4gPSBheGlzLmMycChheGlzLnAyYyhheGlzLm1pbikgKyBk
KSwKLSAgICAgICAgICAgICAgICBtYXggPSBheGlzLmMycChheGlzLnAyYyhheGlzLm1heCkgKyBk
KTsKLQotICAgICAgICAgICAgICAgIHZhciBwciA9IG9wdHMucGFuUmFuZ2U7Ci0gICAgICAgICAg
ICAgICAgaWYgKHByID09PSBmYWxzZSkgLy8gbm8gcGFubmluZyBvbiB0aGlzIGF4aXMKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChwcikgewotICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHdlIGhpdCB0
aGUgd2FsbAotICAgICAgICAgICAgICAgICAgICBpZiAocHJbMF0gIT0gbnVsbCAmJiBwclswXSA+
IG1pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHByWzBdIC0gbWluOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbWluICs9IGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXgg
Kz0gZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHByWzFdICE9IG51bGwgJiYgcHJbMV0gPCBtYXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGQgPSBwclsxXSAtIG1heDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1pbiArPSBkOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICs9IGQ7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgb3B0cy5taW4gPSBtaW47Ci0gICAgICAgICAgICAgICAgb3B0cy5tYXggPSBt
YXg7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGxvdC5zZXR1
cEdyaWQoKTsKLSAgICAgICAgICAgIHBsb3QuZHJhdygpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWFyZ3MucHJldmVudEV2ZW50KQotICAgICAgICAgICAgICAgIHBsb3QuZ2V0UGxh
Y2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90cGFuIiwgWyBwbG90LCBhcmdzIF0pOwotICAgICAgICB9
OwotCi0gICAgICAgIGZ1bmN0aW9uIHNodXRkb3duKHBsb3QsIGV2ZW50SG9sZGVyKSB7Ci0gICAg
ICAgICAgICBldmVudEhvbGRlci51bmJpbmQocGxvdC5nZXRPcHRpb25zKCkuem9vbS50cmlnZ2Vy
LCBvblpvb21DbGljayk7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoIm1vdXNld2hl
ZWwiLCBvbk1vdXNlV2hlZWwpOwotICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJkcmFn
c3RhcnQiLCBvbkRyYWdTdGFydCk7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoImRy
YWciLCBvbkRyYWcpOwotICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJkcmFnZW5kIiwg
b25EcmFnRW5kKTsKLSAgICAgICAgICAgIGlmIChwYW5UaW1lb3V0KQotICAgICAgICAgICAgICAg
IGNsZWFyVGltZW91dChwYW5UaW1lb3V0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
cGxvdC5ob29rcy5iaW5kRXZlbnRzLnB1c2goYmluZEV2ZW50cyk7Ci0gICAgICAgIHBsb3QuaG9v
a3Muc2h1dGRvd24ucHVzaChzaHV0ZG93bik7Ci0gICAgfQotICAgIAotICAgICQucGxvdC5wbHVn
aW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRpb25zOiBvcHRpb25z
LAotICAgICAgICBuYW1lOiAnbmF2aWdhdGUnLAotICAgICAgICB2ZXJzaW9uOiAnMS4zJwotICAg
IH0pOwotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvanMvanF1ZXJ5LmZsb3QucGx1Z2lucy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucGx1Z2lucy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTMyODhlNmE0ZWVjMTEwMGNmNDk3OThmMDBhYzUxZDJjZGZjZTBlYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnBsdWdpbnMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwyMyArMCwwIEBACi0vLyBDcm9zc2hhaXIKLShmdW5jdGlvbihoKXtoLnBsb3QucGx1Z2lu
cy5wdXNoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGUoKXshYy5sb2NrZWQmJi0xIT1jLngm
JihjLng9LTEsYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpKX1mdW5jdGlvbiBnKGQpe2lmKCFjLmxv
Y2tlZClpZihhLmdldFNlbGVjdGlvbiYmYS5nZXRTZWxlY3Rpb24oKSljLng9LTE7ZWxzZXt2YXIg
Yj1hLm9mZnNldCgpO2MueD1NYXRoLm1heCgwLE1hdGgubWluKGQucGFnZVgtYi5sZWZ0LGEud2lk
dGgoKSkpO2MueT1NYXRoLm1heCgwLE1hdGgubWluKGQucGFnZVktYi50b3AsYS5oZWlnaHQoKSkp
O2EudHJpZ2dlclJlZHJhd092ZXJsYXkoKX19dmFyIGM9e3g6LTEseTotMSxsb2NrZWQ6ITF9O2Eu
c2V0Q3Jvc3NoYWlyPWZ1bmN0aW9uKGQpe2Q/KGQ9YS5wMmMoZCksYy54PU1hdGgubWF4KDAsTWF0
aC5taW4oZC5sZWZ0LGEud2lkdGgoKSkpLGMueT1NYXRoLm1heCgwLE1hdGgubWluKGQudG9wLGEu
aGVpZ2h0KCkpKSk6Yy54PS0xOwotYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpfTthLmNsZWFyQ3Jv
c3NoYWlyPWEuc2V0Q3Jvc3NoYWlyO2EubG9ja0Nyb3NzaGFpcj1mdW5jdGlvbihkKXtkJiZhLnNl
dENyb3NzaGFpcihkKTtjLmxvY2tlZD0hMH07YS51bmxvY2tDcm9zc2hhaXI9ZnVuY3Rpb24oKXtj
LmxvY2tlZD0hMX07YS5ob29rcy5iaW5kRXZlbnRzLnB1c2goZnVuY3Rpb24oYSxiKXthLmdldE9w
dGlvbnMoKS5jcm9zc2hhaXIubW9kZSYmKGIubW91c2VvdXQoZSksYi5tb3VzZW1vdmUoZykpfSk7
YS5ob29rcy5kcmF3T3ZlcmxheS5wdXNoKGZ1bmN0aW9uKGEsYil7dmFyIGY9YS5nZXRPcHRpb25z
KCkuY3Jvc3NoYWlyO2lmKGYubW9kZSl7dmFyIGU9YS5nZXRQbG90T2Zmc2V0KCk7Yi5zYXZlKCk7
Yi50cmFuc2xhdGUoZS5sZWZ0LGUudG9wKTstMSE9Yy54JiYoYi5zdHJva2VTdHlsZT1mLmNvbG9y
LGIubGluZVdpZHRoPWYubGluZVdpZHRoLGIubGluZUpvaW49InJvdW5kIixiLmJlZ2luUGF0aCgp
LC0xIT1mLm1vZGUuaW5kZXhPZigieCIpJiYKLShiLm1vdmVUbyhjLngsMCksYi5saW5lVG8oYy54
LGEuaGVpZ2h0KCkpKSwtMSE9Zi5tb2RlLmluZGV4T2YoInkiKSYmKGIubW92ZVRvKDAsYy55KSxi
LmxpbmVUbyhhLndpZHRoKCksYy55KSksYi5zdHJva2UoKSk7Yi5yZXN0b3JlKCl9fSk7YS5ob29r
cy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uKGEsYil7Yi51bmJpbmQoIm1vdXNlb3V0IixlKTtiLnVu
YmluZCgibW91c2Vtb3ZlIixnKX0pfSxvcHRpb25zOntjcm9zc2hhaXI6e21vZGU6bnVsbCxjb2xv
cjoicmdiYSgxNzAsIDAsIDAsIDAuODApIixsaW5lV2lkdGg6MX19LG5hbWU6ImNyb3NzaGFpciIs
dmVyc2lvbjoiMS4wIn0pfSkoalF1ZXJ5KTsKLQotLy8gUmVzaXplCi0oZnVuY3Rpb24oYSxmLGkp
e2Z1bmN0aW9uIGQoKXtrPWZbZ10oZnVuY3Rpb24oKXtiLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1h
KHRoaXMpLGQ9Yy53aWR0aCgpLGY9Yy5oZWlnaHQoKSxiPWEuZGF0YSh0aGlzLGopO2lmKGQhPT1i
Lnd8fGYhPT1iLmgpYy50cmlnZ2VyKGgsW2Iudz1kLGIuaD1mXSl9KTtkKCl9LGVbbF0pfXZhciBi
PWEoW10pLGU9YS5yZXNpemU9YS5leHRlbmQoYS5yZXNpemUse30pLGssZz0ic2V0VGltZW91dCIs
aD0icmVzaXplIixqPWgrIi1zcGVjaWFsLWV2ZW50IixsPSJkZWxheSI7ZVtsXT0yNTA7ZS50aHJv
dHRsZVdpbmRvdz0hMDthLmV2ZW50LnNwZWNpYWxbaF09e3NldHVwOmZ1bmN0aW9uKCl7aWYoIWUu
dGhyb3R0bGVXaW5kb3cmJnRoaXNbZ10pcmV0dXJuITE7dmFyIGM9YSh0aGlzKTtiPWIuYWRkKGMp
O2EuZGF0YSh0aGlzLGose3c6Yy53aWR0aCgpLGg6Yy5oZWlnaHQoKX0pOzE9PT1iLmxlbmd0aCYm
ZCgpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKCFlLnRocm90dGxlV2luZG93JiYKLXRoaXNbZ10p
cmV0dXJuITE7dmFyIGM9YSh0aGlzKTtiPWIubm90KGMpO2MucmVtb3ZlRGF0YShqKTtiLmxlbmd0
aHx8Y2xlYXJUaW1lb3V0KGspfSxhZGQ6ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZChjLGYsZSl7dmFy
IGc9YSh0aGlzKSxoPWEuZGF0YSh0aGlzLGopO2gudz1mIT09aT9mOmcud2lkdGgoKTtoLmg9ZSE9
PWk/ZTpnLmhlaWdodCgpO2IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKCFlLnRocm90dGxlV2lu
ZG93JiZ0aGlzW2ddKXJldHVybiExO3ZhciBiO2lmKGEuaXNGdW5jdGlvbihjKSlyZXR1cm4gYj1j
LGQ7Yj1jLmhhbmRsZXI7Yy5oYW5kbGVyPWR9fX0pKGpRdWVyeSx0aGlzKTsKLShmdW5jdGlvbihh
KXthLnBsb3QucGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGkoKXt2YXIg
ZD1hLmdldFBsYWNlaG9sZGVyKCk7MD09ZC53aWR0aCgpfHwwPT1kLmhlaWdodCgpfHwoYS5yZXNp
emUoKSxhLnNldHVwR3JpZCgpLGEuZHJhdygpKX1hLmhvb2tzLmJpbmRFdmVudHMucHVzaChmdW5j
dGlvbihhKXthLmdldFBsYWNlaG9sZGVyKCkucmVzaXplKGkpfSk7YS5ob29rcy5zaHV0ZG93bi5w
dXNoKGZ1bmN0aW9uKGEpe2EuZ2V0UGxhY2Vob2xkZXIoKS51bmJpbmQoInJlc2l6ZSIsaSl9KX0s
b3B0aW9uczp7fSxuYW1lOiJyZXNpemUiLHZlcnNpb246IjEuMCJ9KX0pKGpRdWVyeSk7Ci0KLS8v
IFNlbGVjdGlvbgotKGZ1bmN0aW9uKGspe2sucGxvdC5wbHVnaW5zLnB1c2goe2luaXQ6ZnVuY3Rp
b24oYSl7ZnVuY3Rpb24gcChjKXtiLmFjdGl2ZSYmKHEoYyksYS5nZXRQbGFjZWhvbGRlcigpLnRy
aWdnZXIoInBsb3RzZWxlY3RpbmciLFtuKCldKSl9ZnVuY3Rpb24gcihjKXsxPT1jLndoaWNoJiYo
ZG9jdW1lbnQuYm9keS5mb2N1cygpLHZvaWQgMCE9PWRvY3VtZW50Lm9uc2VsZWN0c3RhcnQmJm51
bGw9PWgub25zZWxlY3RzdGFydCYmKGgub25zZWxlY3RzdGFydD1kb2N1bWVudC5vbnNlbGVjdHN0
YXJ0LGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0pLHZvaWQgMCE9
PWRvY3VtZW50Lm9uZHJhZyYmbnVsbD09aC5vbmRyYWcmJihoLm9uZHJhZz1kb2N1bWVudC5vbmRy
YWcsZG9jdW1lbnQub25kcmFnPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxzKGIuZmlyc3QsYyksYi5h
Y3RpdmU9ITAsbD1mdW5jdGlvbihjKXtsPW51bGw7dm9pZCAwIT09ZG9jdW1lbnQub25zZWxlY3Rz
dGFydCYmCi0oZG9jdW1lbnQub25zZWxlY3RzdGFydD1oLm9uc2VsZWN0c3RhcnQpO3ZvaWQgMCE9
PWRvY3VtZW50Lm9uZHJhZyYmKGRvY3VtZW50Lm9uZHJhZz1oLm9uZHJhZyk7Yi5hY3RpdmU9ITE7
cShjKTttKCk/dCgpOihhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHVuc2VsZWN0ZWQi
LFtdKSxhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHNlbGVjdGluZyIsW251bGxdKSl9
LGsoZG9jdW1lbnQpLm9uZSgibW91c2V1cCIsbCkpfWZ1bmN0aW9uIG4oKXtpZighbSgpKXJldHVy
biBudWxsO3ZhciBjPXt9LGo9Yi5maXJzdCxkPWIuc2Vjb25kO2suZWFjaChhLmdldEF4ZXMoKSxm
dW5jdGlvbihiLGEpe2lmKGEudXNlZCl7dmFyIGY9YS5jMnAoalthLmRpcmVjdGlvbl0pLGk9YS5j
MnAoZFthLmRpcmVjdGlvbl0pO2NbYl09e2Zyb206TWF0aC5taW4oZixpKSx0bzpNYXRoLm1heChm
LGkpfX19KTtyZXR1cm4gY31mdW5jdGlvbiB0KCl7dmFyIGM9bigpO2EuZ2V0UGxhY2Vob2xkZXIo
KS50cmlnZ2VyKCJwbG90c2VsZWN0ZWQiLAotW2NdKTtjLnhheGlzJiZjLnlheGlzJiZhLmdldFBs
YWNlaG9sZGVyKCkudHJpZ2dlcigic2VsZWN0ZWQiLFt7eDE6Yy54YXhpcy5mcm9tLHkxOmMueWF4
aXMuZnJvbSx4MjpjLnhheGlzLnRvLHkyOmMueWF4aXMudG99XSl9ZnVuY3Rpb24gcyhjLGope3Zh
ciBkPWEuZ2V0T3B0aW9ucygpLGU9YS5nZXRQbGFjZWhvbGRlcigpLm9mZnNldCgpLGc9YS5nZXRQ
bG90T2Zmc2V0KCksZj1qLnBhZ2VYLWUubGVmdC1nLmxlZnQsaT1hLndpZHRoKCk7Yy54PTA+Zj8w
OmY+aT9pOmY7ZT1qLnBhZ2VZLWUudG9wLWcudG9wO2c9YS5oZWlnaHQoKTtjLnk9MD5lPzA6ZT5n
P2c6ZTsieSI9PWQuc2VsZWN0aW9uLm1vZGUmJihjLng9Yz09Yi5maXJzdD8wOmEud2lkdGgoKSk7
IngiPT1kLnNlbGVjdGlvbi5tb2RlJiYoYy55PWM9PWIuZmlyc3Q/MDphLmhlaWdodCgpKX1mdW5j
dGlvbiBxKGMpe251bGwhPWMucGFnZVgmJihzKGIuc2Vjb25kLGMpLG0oKT8oYi5zaG93PSEwLGEu
dHJpZ2dlclJlZHJhd092ZXJsYXkoKSk6Ci11KCEwKSl9ZnVuY3Rpb24gdShjKXtiLnNob3cmJihi
LnNob3c9ITEsYS50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpLGN8fGEuZ2V0UGxhY2Vob2xkZXIoKS50
cmlnZ2VyKCJwbG90dW5zZWxlY3RlZCIsW10pKX1mdW5jdGlvbiB2KGMsYil7dmFyIGQsZSxnLGYs
aT1hLmdldEF4ZXMoKSxoO2ZvcihoIGluIGkpaWYoZD1pW2hdLGQuZGlyZWN0aW9uPT1iJiYoZj1i
K2QubisiYXhpcyIsIWNbZl0mJjE9PWQubiYmKGY9YisiYXhpcyIpLGNbZl0pKXtlPWNbZl0uZnJv
bTtnPWNbZl0udG87YnJlYWt9Y1tmXXx8KGQ9IngiPT1iP2EuZ2V0WEF4ZXMoKVswXTphLmdldFlB
eGVzKClbMF0sZT1jW2IrIjEiXSxnPWNbYisiMiJdKTtudWxsIT1lJiYobnVsbCE9ZyYmZT5nKSYm
KGY9ZSxlPWcsZz1mKTtyZXR1cm57ZnJvbTplLHRvOmcsYXhpczpkfX1mdW5jdGlvbiBtKCl7cmV0
dXJuIDAuMTw9TWF0aC5hYnMoYi5zZWNvbmQueC1iLmZpcnN0LngpJiYwLjE8PU1hdGguYWJzKGIu
c2Vjb25kLnktYi5maXJzdC55KX0KLXZhciBiPXtmaXJzdDp7eDotMSx5Oi0xfSxzZWNvbmQ6e3g6
LTEseTotMX0sc2hvdzohMSxhY3RpdmU6ITF9LGg9e30sbD1udWxsO2EuY2xlYXJTZWxlY3Rpb249
dTthLnNldFNlbGVjdGlvbj1mdW5jdGlvbihjLGope3ZhciBkLGU9YS5nZXRPcHRpb25zKCk7Inki
PT1lLnNlbGVjdGlvbi5tb2RlPyhiLmZpcnN0Lng9MCxiLnNlY29uZC54PWEud2lkdGgoKSk6KGQ9
dihjLCJ4IiksYi5maXJzdC54PWQuYXhpcy5wMmMoZC5mcm9tKSxiLnNlY29uZC54PWQuYXhpcy5w
MmMoZC50bykpOyJ4Ij09ZS5zZWxlY3Rpb24ubW9kZT8oYi5maXJzdC55PTAsYi5zZWNvbmQueT1h
LmhlaWdodCgpKTooZD12KGMsInkiKSxiLmZpcnN0Lnk9ZC5heGlzLnAyYyhkLmZyb20pLGIuc2Vj
b25kLnk9ZC5heGlzLnAyYyhkLnRvKSk7Yi5zaG93PSEwO2EudHJpZ2dlclJlZHJhd092ZXJsYXko
KTshaiYmbSgpJiZ0KCl9O2EuZ2V0U2VsZWN0aW9uPW47YS5ob29rcy5iaW5kRXZlbnRzLnB1c2go
ZnVuY3Rpb24oYywKLWIpe251bGwhPWMuZ2V0T3B0aW9ucygpLnNlbGVjdGlvbi5tb2RlJiYoYi5t
b3VzZW1vdmUocCksYi5tb3VzZWRvd24ocikpfSk7YS5ob29rcy5kcmF3T3ZlcmxheS5wdXNoKGZ1
bmN0aW9uKGMsYSl7aWYoYi5zaG93JiZtKCkpe3ZhciBkPWMuZ2V0UGxvdE9mZnNldCgpLGU9Yy5n
ZXRPcHRpb25zKCk7YS5zYXZlKCk7YS50cmFuc2xhdGUoZC5sZWZ0LGQudG9wKTtkPWsuY29sb3Iu
cGFyc2UoZS5zZWxlY3Rpb24uY29sb3IpO2Euc3Ryb2tlU3R5bGU9ZC5zY2FsZSgiYSIsMC44KS50
b1N0cmluZygpO2EubGluZVdpZHRoPTE7YS5saW5lSm9pbj0icm91bmQiO2EuZmlsbFN0eWxlPWQu
c2NhbGUoImEiLDAuNCkudG9TdHJpbmcoKTt2YXIgZD1NYXRoLm1pbihiLmZpcnN0LngsYi5zZWNv
bmQueCksZT1NYXRoLm1pbihiLmZpcnN0LnksYi5zZWNvbmQueSksZz1NYXRoLmFicyhiLnNlY29u
ZC54LWIuZmlyc3QueCksZj1NYXRoLmFicyhiLnNlY29uZC55LWIuZmlyc3QueSk7YS5maWxsUmVj
dChkLAotZSxnLGYpO2Euc3Ryb2tlUmVjdChkLGUsZyxmKTthLnJlc3RvcmUoKX19KTthLmhvb2tz
LnNodXRkb3duLnB1c2goZnVuY3Rpb24oYixhKXthLnVuYmluZCgibW91c2Vtb3ZlIixwKTthLnVu
YmluZCgibW91c2Vkb3duIixyKTtsJiZrKGRvY3VtZW50KS51bmJpbmQoIm1vdXNldXAiLGwpfSl9
LG9wdGlvbnM6e3NlbGVjdGlvbjp7bW9kZTpudWxsLGNvbG9yOiIjZThjZmFjIn19LG5hbWU6InNl
bGVjdGlvbiIsdmVyc2lvbjoiMS4xIn0pfSkoalF1ZXJ5KTsKLQotLy8gRmlsbGJldHdlZW4KLShm
dW5jdGlvbihqKXtqLnBsb3QucGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9uKGope2ouaG9va3Mu
cHJvY2Vzc0RhdGFwb2ludHMucHVzaChmdW5jdGlvbihhLGgscSl7aWYobnVsbCE9aC5maWxsQmV0
d2Vlbil7dmFyIGU7YTp7dmFyIGE9YS5nZXREYXRhKCksYztmb3IoYz0wO2M8YS5sZW5ndGg7Kytj
KWlmKGFbY10uaWQ9PWguZmlsbEJldHdlZW4pe2U9YVtjXTticmVhayBhfSJudW1iZXIiPT10eXBl
b2YgaC5maWxsQmV0d2Vlbj8oYz1oLmZpbGxCZXR3ZWVuLGU9MD5jfHxjPj1hLmxlbmd0aD9udWxs
OmFbY10pOmU9bnVsbH1pZihlKXthPXEucG9pbnRzaXplO2M9cS5wb2ludHM7dmFyIGs9ZS5kYXRh
cG9pbnRzLnBvaW50c2l6ZTtlPWUuZGF0YXBvaW50cy5wb2ludHM7Zm9yKHZhciBkPVtdLGksaixs
LG4scD1oLmxpbmVzLnNob3cscz0yPGEmJnEuZm9ybWF0WzJdLnksdD1wJiZoLmxpbmVzLnN0ZXBz
LHI9ITAsYj0wLGY9MCxnOyEoYj49Yy5sZW5ndGgpOyl7Zz1kLmxlbmd0aDsKLWlmKG51bGw9PWNb
Yl0pe2ZvcihtPTA7bTxhOysrbSlkLnB1c2goY1tiK21dKTtiKz1hfWVsc2UgaWYoZj49ZS5sZW5n
dGgpe2lmKCFwKWZvcihtPTA7bTxhOysrbSlkLnB1c2goY1tiK21dKTtiKz1hfWVsc2UgaWYobnVs
bD09ZVtmXSl7Zm9yKG09MDttPGE7KyttKWQucHVzaChudWxsKTtyPSEwO2YrPWt9ZWxzZXtpPWNb
Yl07aj1jW2IrMV07aD1lW2ZdO2w9ZVtmKzFdO249MDtpZihpPT1oKXtmb3IobT0wO208YTsrK20p
ZC5wdXNoKGNbYittXSk7bj1sO2IrPWE7Zis9a31lbHNlIGlmKGk+aCl7aWYocCYmMDxiJiZudWxs
IT1jW2ItYV0pe2k9aisoY1tiLWErMV0taikqKGgtaSkvKGNbYi1hXS1pKTtkLnB1c2goaCk7ZC5w
dXNoKGkpO2ZvcihtPTI7bTxhOysrbSlkLnB1c2goY1tiK21dKTtuPWx9Zis9a31lbHNle2lmKHIm
JnApe2IrPWE7Y29udGludWV9Zm9yKG09MDttPGE7KyttKWQucHVzaChjW2IrbV0pO3AmJigwPGYm
Jm51bGwhPWVbZi1rXSkmJihuPWwrKGVbZi1rKzFdLWwpKgotKGktaCkvKGVbZi1rXS1oKSk7Yis9
YX1yPSExO2chPWQubGVuZ3RoJiZzJiYoZFtnKzJdPW4pfWlmKHQmJmchPWQubGVuZ3RoJiYwPGcm
Jm51bGwhPWRbZ10mJmRbZ10hPWRbZy1hXSYmZFtnKzFdIT1kW2ctYSsxXSl7Zm9yKG09MDttPGE7
KyttKWRbZythK21dPWRbZyttXTtkW2crMV09ZFtnLWErMV19fXEucG9pbnRzPWR9fX0pfSxvcHRp
b25zOntzZXJpZXM6e2ZpbGxCZXR3ZWVuOm51bGx9fSxuYW1lOiJmaWxsYmV0d2VlbiIsdmVyc2lv
bjoiMS4wIn0pfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucmVzaXplLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5yZXNpemUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGEyY2Y5M2VmOWE0ZDEzY2JiYjY4YWJmYTZmYjlhNDVkYTljYTM2NGUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5yZXNpemUuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw2MCArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3IgYXV0b21hdGljYWxseSByZWRyYXdp
bmcgcGxvdHMgYXMgdGhlIHBsYWNlaG9sZGVyIHJlc2l6ZXMuCi0KLUNvcHlyaWdodCAoYykgMjAw
Ny0yMDEyIElPTEEgYW5kIE9sZSBMYXVyc2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNl
bnNlLgotCi1JdCB3b3JrcyBieSBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMgb24gdGhlIHBsYWNlaG9s
ZGVyIGRpdiAodGhyb3VnaCB0aGUgalF1ZXJ5Ci1yZXNpemUgZXZlbnQgcGx1Z2luKSAtIGlmIHRo
ZSBzaXplIGNoYW5nZXMsIGl0IHdpbGwgcmVkcmF3IHRoZSBwbG90LgotCi1UaGVyZSBhcmUgbm8g
b3B0aW9ucy4gSWYgeW91IG5lZWQgdG8gZGlzYWJsZSB0aGUgcGx1Z2luIGZvciBzb21lIHBsb3Rz
LCB5b3UKLWNhbiBqdXN0IGZpeCB0aGUgc2l6ZSBvZiB0aGVpciBwbGFjZWhvbGRlcnMuCi0KLSov
Ci0KLS8qIElubGluZSBkZXBlbmRlbmN5OgotICogalF1ZXJ5IHJlc2l6ZSBldmVudCAtIHYxLjEg
LSAzLzE0LzIwMTAKLSAqIGh0dHA6Ly9iZW5hbG1hbi5jb20vcHJvamVjdHMvanF1ZXJ5LXJlc2l6
ZS1wbHVnaW4vCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwICJDb3dib3kiIEJlbiBBbG1hbgot
ICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCi0gKiBodHRw
Oi8vYmVuYWxtYW4uY29tL2Fib3V0L2xpY2Vuc2UvCi0gKi8KLQotKGZ1bmN0aW9uKCQsaCxjKXt2
YXIgYT0kKFtdKSxlPSQucmVzaXplPSQuZXh0ZW5kKCQucmVzaXplLHt9KSxpLGs9InNldFRpbWVv
dXQiLGo9InJlc2l6ZSIsZD1qKyItc3BlY2lhbC1ldmVudCIsYj0iZGVsYXkiLGY9InRocm90dGxl
V2luZG93IjtlW2JdPTI1MDtlW2ZdPXRydWU7JC5ldmVudC5zcGVjaWFsW2pdPXtzZXR1cDpmdW5j
dGlvbigpe2lmKCFlW2ZdJiZ0aGlzW2tdKXtyZXR1cm4gZmFsc2V9dmFyIGw9JCh0aGlzKTthPWEu
YWRkKGwpOyQuZGF0YSh0aGlzLGQse3c6bC53aWR0aCgpLGg6bC5oZWlnaHQoKX0pO2lmKGEubGVu
Z3RoPT09MSl7ZygpfX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZighZVtmXSYmdGhpc1trXSl7cmV0
dXJuIGZhbHNlfXZhciBsPSQodGhpcyk7YT1hLm5vdChsKTtsLnJlbW92ZURhdGEoZCk7aWYoIWEu
bGVuZ3RoKXtjbGVhclRpbWVvdXQoaSl9fSxhZGQ6ZnVuY3Rpb24obCl7aWYoIWVbZl0mJnRoaXNb
a10pe3JldHVybiBmYWxzZX12YXIgbjtmdW5jdGlvbiBtKHMsbyxwKXt2YXIgcT0kKHRoaXMpLHI9
JC5kYXRhKHRoaXMsZCk7ci53PW8hPT1jP286cS53aWR0aCgpO3IuaD1wIT09Yz9wOnEuaGVpZ2h0
KCk7bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoJC5pc0Z1bmN0aW9uKGwpKXtuPWw7cmV0dXJu
IG19ZWxzZXtuPWwuaGFuZGxlcjtsLmhhbmRsZXI9bX19fTtmdW5jdGlvbiBnKCl7aT1oW2tdKGZ1
bmN0aW9uKCl7YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49JCh0aGlzKSxtPW4ud2lkdGgoKSxsPW4u
aGVpZ2h0KCksbz0kLmRhdGEodGhpcyxkKTtpZihtIT09by53fHxsIT09by5oKXtuLnRyaWdnZXIo
aixbby53PW0sby5oPWxdKX19KTtnKCl9LGVbYl0pfX0pKGpRdWVyeSx0aGlzKTsKLQotKGZ1bmN0
aW9uICgkKSB7Ci0gICAgdmFyIG9wdGlvbnMgPSB7IH07IC8vIG5vIG9wdGlvbnMKLQotICAgIGZ1
bmN0aW9uIGluaXQocGxvdCkgewotICAgICAgICBmdW5jdGlvbiBvblJlc2l6ZSgpIHsKLSAgICAg
ICAgICAgIHZhciBwbGFjZWhvbGRlciA9IHBsb3QuZ2V0UGxhY2Vob2xkZXIoKTsKLQotICAgICAg
ICAgICAgLy8gc29tZWJvZHkgbWlnaHQgaGF2ZSBoaWRkZW4gdXMgYW5kIHdlIGNhbid0IHBsb3QK
LSAgICAgICAgICAgIC8vIHdoZW4gd2UgZG9uJ3QgaGF2ZSB0aGUgZGltZW5zaW9ucwotICAgICAg
ICAgICAgaWYgKHBsYWNlaG9sZGVyLndpZHRoKCkgPT0gMCB8fCBwbGFjZWhvbGRlci5oZWlnaHQo
KSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgcGxvdC5yZXNp
emUoKTsKLSAgICAgICAgICAgIHBsb3Quc2V0dXBHcmlkKCk7Ci0gICAgICAgICAgICBwbG90LmRy
YXcoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gYmluZEV2ZW50cyhw
bG90LCBldmVudEhvbGRlcikgewotICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigpLnJl
c2l6ZShvblJlc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzaHV0ZG93bihw
bG90LCBldmVudEhvbGRlcikgewotICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigpLnVu
YmluZCgicmVzaXplIiwgb25SZXNpemUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBw
bG90Lmhvb2tzLmJpbmRFdmVudHMucHVzaChiaW5kRXZlbnRzKTsKLSAgICAgICAgcGxvdC5ob29r
cy5zaHV0ZG93bi5wdXNoKHNodXRkb3duKTsKLSAgICB9Ci0gICAgCi0gICAgJC5wbG90LnBsdWdp
bnMucHVzaCh7Ci0gICAgICAgIGluaXQ6IGluaXQsCi0gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMs
Ci0gICAgICAgIG5hbWU6ICdyZXNpemUnLAotICAgICAgICB2ZXJzaW9uOiAnMS4wJwotICAgIH0p
OwotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvanMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zZWxlY3Rpb24uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIxOTliOTI5MmY1NDcwMDk1NTZkMzQyMjg1OTc5NTg2NWRmYmYwOGQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zZWxlY3Rpb24uanMKKysrIC9kZXYvbnVs
bApAQCAtMSwzNDQgKzAsMCBAQAotLyogRmxvdCBwbHVnaW4gZm9yIHNlbGVjdGluZyByZWdpb25z
IG9mIGEgcGxvdC4KLQotQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJz
ZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCi0KLVRoZSBwbHVnaW4gc3VwcG9y
dHMgdGhlc2Ugb3B0aW9uczoKLQotc2VsZWN0aW9uOiB7Ci0gICAgbW9kZTogbnVsbCBvciAieCIg
b3IgInkiIG9yICJ4eSIsCi0gICAgY29sb3I6IGNvbG9yCi19Ci0KLVNlbGVjdGlvbiBzdXBwb3J0
IGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0aGUgbW9kZSB0byBvbmUgb2YgIngiLCAieSIgb3IgInh5
Ii4KLUluICJ4IiBtb2RlLCB0aGUgdXNlciB3aWxsIG9ubHkgYmUgYWJsZSB0byBzcGVjaWZ5IHRo
ZSB4IHJhbmdlLCBzaW1pbGFybHkgZm9yCi0ieSIgbW9kZS4gRm9yICJ4eSIsIHRoZSBzZWxlY3Rp
b24gYmVjb21lcyBhIHJlY3RhbmdsZSB3aGVyZSBib3RoIHJhbmdlcyBjYW4gYmUKLXNwZWNpZmll
ZC4gImNvbG9yIiBpcyBjb2xvciBvZiB0aGUgc2VsZWN0aW9uIChpZiB5b3UgbmVlZCB0byBjaGFu
Z2UgdGhlIGNvbG9yCi1sYXRlciBvbiwgeW91IGNhbiBnZXQgdG8gaXQgd2l0aCBwbG90LmdldE9w
dGlvbnMoKS5zZWxlY3Rpb24uY29sb3IpLgotCi1XaGVuIHNlbGVjdGlvbiBzdXBwb3J0IGlzIGVu
YWJsZWQsIGEgInBsb3RzZWxlY3RlZCIgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIG9uCi10aGUgRE9N
IGVsZW1lbnQgeW91IHBhc3NlZCBpbnRvIHRoZSBwbG90IGZ1bmN0aW9uLiBUaGUgZXZlbnQgaGFu
ZGxlciBnZXRzIGEKLXBhcmFtZXRlciB3aXRoIHRoZSByYW5nZXMgc2VsZWN0ZWQgb24gdGhlIGF4
ZXMsIGxpa2UgdGhpczoKLQotICAgIHBsYWNlaG9sZGVyLmJpbmQoICJwbG90c2VsZWN0ZWQiLCBm
dW5jdGlvbiggZXZlbnQsIHJhbmdlcyApIHsKLSAgICAgICAgYWxlcnQoIllvdSBzZWxlY3RlZCAi
ICsgcmFuZ2VzLnhheGlzLmZyb20gKyAiIHRvICIgKyByYW5nZXMueGF4aXMudG8pCi0gICAgICAg
IC8vIHNpbWlsYXIgZm9yIHlheGlzIC0gd2l0aCBtdWx0aXBsZSBheGVzLCB0aGUgZXh0cmEgb25l
cyBhcmUgaW4KLSAgICAgICAgLy8geDJheGlzLCB4M2F4aXMsIC4uLgotICAgIH0pOwotCi1UaGUg
InBsb3RzZWxlY3RlZCIgZXZlbnQgaXMgb25seSBmaXJlZCB3aGVuIHRoZSB1c2VyIGhhcyBmaW5p
c2hlZCBtYWtpbmcgdGhlCi1zZWxlY3Rpb24uIEEgInBsb3RzZWxlY3RpbmciIGV2ZW50IGlzIGZp
cmVkIGR1cmluZyB0aGUgcHJvY2VzcyB3aXRoIHRoZSBzYW1lCi1wYXJhbWV0ZXJzIGFzIHRoZSAi
cGxvdHNlbGVjdGVkIiBldmVudCwgaW4gY2FzZSB5b3Ugd2FudCB0byBrbm93IHdoYXQncwotaGFw
cGVuaW5nIHdoaWxlIGl0J3MgaGFwcGVuaW5nLAotCi1BICJwbG90dW5zZWxlY3RlZCIgZXZlbnQg
d2l0aCBubyBhcmd1bWVudHMgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUKLW1v
dXNlIHRvIHJlbW92ZSB0aGUgc2VsZWN0aW9uLgotCi1UaGUgcGx1Z2luIGFsbHNvIGFkZHMgdGhl
IGZvbGxvd2luZyBtZXRob2RzIHRvIHRoZSBwbG90IG9iamVjdDoKLQotLSBzZXRTZWxlY3Rpb24o
IHJhbmdlcywgcHJldmVudEV2ZW50ICkKLQotICBTZXQgdGhlIHNlbGVjdGlvbiByZWN0YW5nbGUu
IFRoZSBwYXNzZWQgaW4gcmFuZ2VzIGlzIG9uIHRoZSBzYW1lIGZvcm0gYXMKLSAgcmV0dXJuZWQg
aW4gdGhlICJwbG90c2VsZWN0ZWQiIGV2ZW50LiBJZiB0aGUgc2VsZWN0aW9uIG1vZGUgaXMgIngi
LCB5b3UKLSAgc2hvdWxkIHB1dCBpbiBlaXRoZXIgYW4geGF4aXMgcmFuZ2UsIGlmIHRoZSBtb2Rl
IGlzICJ5IiB5b3UgbmVlZCB0byBwdXQgaW4KLSAgYW4geWF4aXMgcmFuZ2UgYW5kIGJvdGggeGF4
aXMgYW5kIHlheGlzIGlmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyAieHkiLCBsaWtlCi0gIHRoaXM6
Ci0KLSAgICBzZXRTZWxlY3Rpb24oeyB4YXhpczogeyBmcm9tOiAwLCB0bzogMTAgfSwgeWF4aXM6
IHsgZnJvbTogNDAsIHRvOiA2MCB9IH0pOwotCi0gIHNldFNlbGVjdGlvbiB3aWxsIHRyaWdnZXIg
dGhlICJwbG90c2VsZWN0ZWQiIGV2ZW50IHdoZW4gY2FsbGVkLiBJZiB5b3UgZG9uJ3QKLSAgd2Fu
dCB0aGF0IHRvIGhhcHBlbiwgZS5nLiBpZiB5b3UncmUgaW5zaWRlIGEgInBsb3RzZWxlY3RlZCIg
aGFuZGxlciwgcGFzcwotICB0cnVlIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBJZiB5b3UgYXJl
IHVzaW5nIG11bHRpcGxlIGF4ZXMsIHlvdSBjYW4KLSAgc3BlY2lmeSB0aGUgcmFuZ2VzIG9uIGFu
eSBvZiB0aG9zZSwgZS5nLiBhcyB4MmF4aXMveDNheGlzLy4uLiBpbnN0ZWFkIG9mCi0gIHhheGlz
LCB0aGUgcGx1Z2luIHBpY2tzIHRoZSBmaXJzdCBvbmUgaXQgc2Vlcy4KLQotLSBjbGVhclNlbGVj
dGlvbiggcHJldmVudEV2ZW50ICkKLQotICBDbGVhciB0aGUgc2VsZWN0aW9uIHJlY3RhbmdsZS4g
UGFzcyBpbiB0cnVlIHRvIGF2b2lkIGdldHRpbmcgYQotICAicGxvdHVuc2VsZWN0ZWQiIGV2ZW50
LgotCi0tIGdldFNlbGVjdGlvbigpCi0KLSAgUmV0dXJucyB0aGUgY3VycmVudCBzZWxlY3Rpb24g
aW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSAicGxvdHNlbGVjdGVkIgotICBldmVudC4gSWYgdGhl
cmUncyBjdXJyZW50bHkgbm8gc2VsZWN0aW9uLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsLgot
Ci0qLwotCi0oZnVuY3Rpb24gKCQpIHsKLSAgICBmdW5jdGlvbiBpbml0KHBsb3QpIHsKLSAgICAg
ICAgdmFyIHNlbGVjdGlvbiA9IHsKLSAgICAgICAgICAgICAgICBmaXJzdDogeyB4OiAtMSwgeTog
LTF9LCBzZWNvbmQ6IHsgeDogLTEsIHk6IC0xfSwKLSAgICAgICAgICAgICAgICBzaG93OiBmYWxz
ZSwKLSAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlCi0gICAgICAgICAgICB9OwotCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGUgZHJhZyBoYW5kbGluZyBpbXBsZW1lbnRlZCBoZXJlIHNob3VsZCBi
ZQotICAgICAgICAvLyBhYnN0cmFjdGVkIG91dCwgdGhlcmUncyBzb21lIHNpbWlsYXIgY29kZSBm
cm9tIGEgbGlicmFyeSBpbgotICAgICAgICAvLyB0aGUgbmF2aWdhdGlvbiBwbHVnaW4sIHRoaXMg
c2hvdWxkIGJlIG1hc3NhZ2VkIGEgYml0IHRvIGZpdAotICAgICAgICAvLyB0aGUgRmxvdCBjYXNl
cyBoZXJlIGJldHRlciBhbmQgcmV1c2VkLiBEb2luZyB0aGlzIHdvdWxkCi0gICAgICAgIC8vIG1h
a2UgdGhpcyBwbHVnaW4gbXVjaCBzbGltbWVyLgotICAgICAgICB2YXIgc2F2ZWRoYW5kbGVycyA9
IHt9OwotCi0gICAgICAgIHZhciBtb3VzZVVwSGFuZGxlciA9IG51bGw7Ci0gICAgICAgIAotICAg
ICAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9u
LmFjdGl2ZSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihlKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigi
cGxvdHNlbGVjdGluZyIsIFsgZ2V0U2VsZWN0aW9uKCkgXSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7Ci0gICAgICAgICAgICBp
ZiAoZS53aGljaCAhPSAxKSAgLy8gb25seSBhY2NlcHQgbGVmdC1jbGljawotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gY2FuY2VsIG91dCBhbnkg
dGV4dCBzZWxlY3Rpb25zCi0gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7Ci0KLSAg
ICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBzZWxlY3Rpb24gYW5kIGRyYWcgaW4gb2xkLXNjaG9v
bCBicm93c2VycwotICAgICAgICAgICAgaWYgKGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgIT09IHVu
ZGVmaW5lZCAmJiBzYXZlZGhhbmRsZXJzLm9uc2VsZWN0c3RhcnQgPT0gbnVsbCkgewotICAgICAg
ICAgICAgICAgIHNhdmVkaGFuZGxlcnMub25zZWxlY3RzdGFydCA9IGRvY3VtZW50Lm9uc2VsZWN0
c3RhcnQ7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIGZhbHNlOyB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRv
Y3VtZW50Lm9uZHJhZyAhPT0gdW5kZWZpbmVkICYmIHNhdmVkaGFuZGxlcnMub25kcmFnID09IG51
bGwpIHsKLSAgICAgICAgICAgICAgICBzYXZlZGhhbmRsZXJzLm9uZHJhZyA9IGRvY3VtZW50Lm9u
ZHJhZzsKLSAgICAgICAgICAgICAgICBkb2N1bWVudC5vbmRyYWcgPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiBmYWxzZTsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0U2VsZWN0aW9u
UG9zKHNlbGVjdGlvbi5maXJzdCwgZSk7Ci0KLSAgICAgICAgICAgIHNlbGVjdGlvbi5hY3RpdmUg
PSB0cnVlOwotCi0gICAgICAgICAgICAvLyB0aGlzIGlzIGEgYml0IHNpbGx5LCBidXQgd2UgaGF2
ZSB0byB1c2UgYSBjbG9zdXJlIHRvIGJlCi0gICAgICAgICAgICAvLyBhYmxlIHRvIHdoYWNrIHRo
ZSBzYW1lIGhhbmRsZXIgYWdhaW4KLSAgICAgICAgICAgIG1vdXNlVXBIYW5kbGVyID0gZnVuY3Rp
b24gKGUpIHsgb25Nb3VzZVVwKGUpOyB9OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAkKGRv
Y3VtZW50KS5vbmUoIm1vdXNldXAiLCBtb3VzZVVwSGFuZGxlcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBvbk1vdXNlVXAoZSkgewotICAgICAgICAgICAgbW91c2VVcEhhbmRsZXIg
PSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyByZXZlcnQgZHJhZyBzdHVmZiBm
b3Igb2xkLXNjaG9vbCBicm93c2VycwotICAgICAgICAgICAgaWYgKGRvY3VtZW50Lm9uc2VsZWN0
c3RhcnQgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0
YXJ0ID0gc2F2ZWRoYW5kbGVycy5vbnNlbGVjdHN0YXJ0OwotICAgICAgICAgICAgaWYgKGRvY3Vt
ZW50Lm9uZHJhZyAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIGRvY3VtZW50Lm9uZHJh
ZyA9IHNhdmVkaGFuZGxlcnMub25kcmFnOwotCi0gICAgICAgICAgICAvLyBubyBtb3JlIGRyYWdn
aW5nCi0gICAgICAgICAgICBzZWxlY3Rpb24uYWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3Rpb24oZSk7Ci0KLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Jc1NhbmUoKSkK
LSAgICAgICAgICAgICAgICB0cmlnZ2VyU2VsZWN0ZWRFdmVudCgpOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBjb3VudHMgYXMgYSBjbGVhcgotICAgICAgICAg
ICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90dW5zZWxlY3RlZCIsIFsg
XSk7Ci0gICAgICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigpLnRyaWdnZXIoInBsb3Rz
ZWxlY3RpbmciLCBbIG51bGwgXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigpIHsK
LSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uSXNTYW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uLnNob3cp
IHJldHVybiBudWxsOwotCi0gICAgICAgICAgICB2YXIgciA9IHt9LCBjMSA9IHNlbGVjdGlvbi5m
aXJzdCwgYzIgPSBzZWxlY3Rpb24uc2Vjb25kOwotICAgICAgICAgICAgJC5lYWNoKHBsb3QuZ2V0
QXhlcygpLCBmdW5jdGlvbiAobmFtZSwgYXhpcykgewotICAgICAgICAgICAgICAgIGlmIChheGlz
LnVzZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHAxID0gYXhpcy5jMnAoYzFbYXhpcy5k
aXJlY3Rpb25dKSwgcDIgPSBheGlzLmMycChjMltheGlzLmRpcmVjdGlvbl0pOyAKLSAgICAgICAg
ICAgICAgICAgICAgcltuYW1lXSA9IHsgZnJvbTogTWF0aC5taW4ocDEsIHAyKSwgdG86IE1hdGgu
bWF4KHAxLCBwMikgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybiByOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gdHJpZ2dlclNl
bGVjdGVkRXZlbnQoKSB7Ci0gICAgICAgICAgICB2YXIgciA9IGdldFNlbGVjdGlvbigpOwotCi0g
ICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHNlbGVjdGVkIiwg
WyByIF0pOwotCi0gICAgICAgICAgICAvLyBiYWNrd2FyZHMtY29tcGF0IHN0dWZmLCB0byBiZSBy
ZW1vdmVkIGluIGZ1dHVyZQotICAgICAgICAgICAgaWYgKHIueGF4aXMgJiYgci55YXhpcykKLSAg
ICAgICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigic2VsZWN0ZWQiLCBb
IHsgeDE6IHIueGF4aXMuZnJvbSwgeTE6IHIueWF4aXMuZnJvbSwgeDI6IHIueGF4aXMudG8sIHky
OiByLnlheGlzLnRvIH0gXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjbGFtcCht
aW4sIHZhbHVlLCBtYXgpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG1pbiA/IG1pbjog
KHZhbHVlID4gbWF4ID8gbWF4OiB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBzZXRTZWxlY3Rpb25Qb3MocG9zLCBlKSB7Ci0gICAgICAgICAgICB2YXIgbyA9IHBsb3QuZ2V0
T3B0aW9ucygpOwotICAgICAgICAgICAgdmFyIG9mZnNldCA9IHBsb3QuZ2V0UGxhY2Vob2xkZXIo
KS5vZmZzZXQoKTsKLSAgICAgICAgICAgIHZhciBwbG90T2Zmc2V0ID0gcGxvdC5nZXRQbG90T2Zm
c2V0KCk7Ci0gICAgICAgICAgICBwb3MueCA9IGNsYW1wKDAsIGUucGFnZVggLSBvZmZzZXQubGVm
dCAtIHBsb3RPZmZzZXQubGVmdCwgcGxvdC53aWR0aCgpKTsKLSAgICAgICAgICAgIHBvcy55ID0g
Y2xhbXAoMCwgZS5wYWdlWSAtIG9mZnNldC50b3AgLSBwbG90T2Zmc2V0LnRvcCwgcGxvdC5oZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChvLnNlbGVjdGlvbi5tb2RlID09ICJ5IikKLSAgICAg
ICAgICAgICAgICBwb3MueCA9IHBvcyA9PSBzZWxlY3Rpb24uZmlyc3QgPyAwIDogcGxvdC53aWR0
aCgpOwotCi0gICAgICAgICAgICBpZiAoby5zZWxlY3Rpb24ubW9kZSA9PSAieCIpCi0gICAgICAg
ICAgICAgICAgcG9zLnkgPSBwb3MgPT0gc2VsZWN0aW9uLmZpcnN0ID8gMCA6IHBsb3QuaGVpZ2h0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24ocG9zKSB7
Ci0gICAgICAgICAgICBpZiAocG9zLnBhZ2VYID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICBzZXRTZWxlY3Rpb25Qb3Moc2VsZWN0aW9uLnNlY29uZCwgcG9z
KTsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Jc1NhbmUoKSkgewotICAgICAgICAgICAgICAg
IHNlbGVjdGlvbi5zaG93ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwbG90LnRyaWdnZXJSZWRy
YXdPdmVybGF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY2xlYXJTZWxlY3Rpb24odHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBjbGVhclNlbGVjdGlvbihwcmV2ZW50RXZlbnQpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rp
b24uc2hvdykgewotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zaG93ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgcGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgICAg
IGlmICghcHJldmVudEV2ZW50KQotICAgICAgICAgICAgICAgICAgICBwbG90LmdldFBsYWNlaG9s
ZGVyKCkudHJpZ2dlcigicGxvdHVuc2VsZWN0ZWQiLCBbIF0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gZnVuY3Rpb24gdGFrZW4gZnJvbSBtYXJraW5ncyBzdXBwb3J0
IGluIEZsb3QKLSAgICAgICAgZnVuY3Rpb24gZXh0cmFjdFJhbmdlKHJhbmdlcywgY29vcmQpIHsK
LSAgICAgICAgICAgIHZhciBheGlzLCBmcm9tLCB0bywga2V5LCBheGVzID0gcGxvdC5nZXRBeGVz
KCk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXhlcykgewotICAgICAgICAgICAgICAg
IGF4aXMgPSBheGVzW2tdOwotICAgICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSBj
b29yZCkgewotICAgICAgICAgICAgICAgICAgICBrZXkgPSBjb29yZCArIGF4aXMubiArICJheGlz
IjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZXNba2V5XSAmJiBheGlzLm4gPT0gMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGNvb3JkICsgImF4aXMiOyAvLyBzdXBwb3J0
IHgxYXhpcyBhcyB4YXhpcwotICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VzW2tleV0pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSByYW5nZXNba2V5XS5mcm9tOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdG8gPSByYW5nZXNba2V5XS50bzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBiYWNrd2FyZHMtY29tcGF0IHN0dWZmIC0g
dG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUKLSAgICAgICAgICAgIGlmICghcmFuZ2VzW2tleV0pIHsK
LSAgICAgICAgICAgICAgICBheGlzID0gY29vcmQgPT0gIngiID8gcGxvdC5nZXRYQXhlcygpWzBd
IDogcGxvdC5nZXRZQXhlcygpWzBdOwotICAgICAgICAgICAgICAgIGZyb20gPSByYW5nZXNbY29v
cmQgKyAiMSJdOwotICAgICAgICAgICAgICAgIHRvID0gcmFuZ2VzW2Nvb3JkICsgIjIiXTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gYXV0by1yZXZlcnNlIGFzIGFuIGFkZGVkIGJv
bnVzCi0gICAgICAgICAgICBpZiAoZnJvbSAhPSBudWxsICYmIHRvICE9IG51bGwgJiYgZnJvbSA+
IHRvKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRtcCA9IGZyb207Ci0gICAgICAgICAgICAgICAg
ZnJvbSA9IHRvOwotICAgICAgICAgICAgICAgIHRvID0gdG1wOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4geyBmcm9tOiBmcm9tLCB0bzogdG8sIGF4aXM6
IGF4aXMgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gc2V0U2VsZWN0
aW9uKHJhbmdlcywgcHJldmVudEV2ZW50KSB7Ci0gICAgICAgICAgICB2YXIgYXhpcywgcmFuZ2Us
IG8gPSBwbG90LmdldE9wdGlvbnMoKTsKLQotICAgICAgICAgICAgaWYgKG8uc2VsZWN0aW9uLm1v
ZGUgPT0gInkiKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZpcnN0LnggPSAwOwotICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbi5zZWNvbmQueCA9IHBsb3Qud2lkdGgoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJhbmdlID0gZXh0cmFj
dFJhbmdlKHJhbmdlcywgIngiKTsKLQotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5maXJzdC54
ID0gcmFuZ2UuYXhpcy5wMmMocmFuZ2UuZnJvbSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
LnNlY29uZC54ID0gcmFuZ2UuYXhpcy5wMmMocmFuZ2UudG8pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoby5zZWxlY3Rpb24ubW9kZSA9PSAieCIpIHsKLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24uZmlyc3QueSA9IDA7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNlY29u
ZC55ID0gcGxvdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJhbmdlID0gZXh0cmFjdFJhbmdlKHJhbmdlcywgInkiKTsKLQotICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbi5maXJzdC55ID0gcmFuZ2UuYXhpcy5wMmMocmFuZ2UuZnJv
bSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNlY29uZC55ID0gcmFuZ2UuYXhpcy5wMmMo
cmFuZ2UudG8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZWxlY3Rpb24uc2hvdyA9
IHRydWU7Ci0gICAgICAgICAgICBwbG90LnRyaWdnZXJSZWRyYXdPdmVybGF5KCk7Ci0gICAgICAg
ICAgICBpZiAoIXByZXZlbnRFdmVudCAmJiBzZWxlY3Rpb25Jc1NhbmUoKSkKLSAgICAgICAgICAg
ICAgICB0cmlnZ2VyU2VsZWN0ZWRFdmVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gc2VsZWN0aW9uSXNTYW5lKCkgewotICAgICAgICAgICAgdmFyIG1pblNpemUgPSA1OwotICAg
ICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHNlbGVjdGlvbi5zZWNvbmQueCAtIHNlbGVjdGlvbi5m
aXJzdC54KSA+PSBtaW5TaXplICYmCi0gICAgICAgICAgICAgICAgTWF0aC5hYnMoc2VsZWN0aW9u
LnNlY29uZC55IC0gc2VsZWN0aW9uLmZpcnN0LnkpID49IG1pblNpemU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwbG90LmNsZWFyU2VsZWN0aW9uID0gY2xlYXJTZWxlY3Rpb247Ci0gICAgICAgIHBs
b3Quc2V0U2VsZWN0aW9uID0gc2V0U2VsZWN0aW9uOwotICAgICAgICBwbG90LmdldFNlbGVjdGlv
biA9IGdldFNlbGVjdGlvbjsKLQotICAgICAgICBwbG90Lmhvb2tzLmJpbmRFdmVudHMucHVzaChm
dW5jdGlvbihwbG90LCBldmVudEhvbGRlcikgewotICAgICAgICAgICAgdmFyIG8gPSBwbG90Lmdl
dE9wdGlvbnMoKTsKLSAgICAgICAgICAgIGlmIChvLnNlbGVjdGlvbi5tb2RlICE9IG51bGwpIHsK
LSAgICAgICAgICAgICAgICBldmVudEhvbGRlci5tb3VzZW1vdmUob25Nb3VzZU1vdmUpOwotICAg
ICAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlZG93bihvbk1vdXNlRG93bik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotCi0KLSAgICAgICAgcGxvdC5ob29rcy5kcmF3T3ZlcmxheS5w
dXNoKGZ1bmN0aW9uIChwbG90LCBjdHgpIHsKLSAgICAgICAgICAgIC8vIGRyYXcgc2VsZWN0aW9u
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnNob3cgJiYgc2VsZWN0aW9uSXNTYW5lKCkpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcGxvdE9mZnNldCA9IHBsb3QuZ2V0UGxvdE9mZnNldCgpOwot
ICAgICAgICAgICAgICAgIHZhciBvID0gcGxvdC5nZXRPcHRpb25zKCk7Ci0KLSAgICAgICAgICAg
ICAgICBjdHguc2F2ZSgpOwotICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNl
dC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgYyA9ICQuY29s
b3IucGFyc2Uoby5zZWxlY3Rpb24uY29sb3IpOwotCi0gICAgICAgICAgICAgICAgY3R4LnN0cm9r
ZVN0eWxlID0gYy5zY2FsZSgnYScsIDAuOCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBj
dHgubGluZVdpZHRoID0gMTsKLSAgICAgICAgICAgICAgICBjdHgubGluZUpvaW4gPSAicm91bmQi
OwotICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjLnNjYWxlKCdhJywgMC40KS50b1N0
cmluZygpOwotCi0gICAgICAgICAgICAgICAgdmFyIHggPSBNYXRoLm1pbihzZWxlY3Rpb24uZmly
c3QueCwgc2VsZWN0aW9uLnNlY29uZC54KSArIDAuNSwKLSAgICAgICAgICAgICAgICAgICAgeSA9
IE1hdGgubWluKHNlbGVjdGlvbi5maXJzdC55LCBzZWxlY3Rpb24uc2Vjb25kLnkpICsgMC41LAot
ICAgICAgICAgICAgICAgICAgICB3ID0gTWF0aC5hYnMoc2VsZWN0aW9uLnNlY29uZC54IC0gc2Vs
ZWN0aW9uLmZpcnN0LngpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgaCA9IE1hdGguYWJzKHNl
bGVjdGlvbi5zZWNvbmQueSAtIHNlbGVjdGlvbi5maXJzdC55KSAtIDE7Ci0KLSAgICAgICAgICAg
ICAgICBjdHguZmlsbFJlY3QoeCwgeSwgdywgaCk7Ci0gICAgICAgICAgICAgICAgY3R4LnN0cm9r
ZVJlY3QoeCwgeSwgdywgaCk7Ci0KLSAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIHBsb3QuaG9va3Muc2h1
dGRvd24ucHVzaChmdW5jdGlvbiAocGxvdCwgZXZlbnRIb2xkZXIpIHsKLSAgICAgICAgICAgIGV2
ZW50SG9sZGVyLnVuYmluZCgibW91c2Vtb3ZlIiwgb25Nb3VzZU1vdmUpOwotICAgICAgICAgICAg
ZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZWRvd24iLCBvbk1vdXNlRG93bik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChtb3VzZVVwSGFuZGxlcikKLSAgICAgICAgICAgICAgICAkKGRv
Y3VtZW50KS51bmJpbmQoIm1vdXNldXAiLCBtb3VzZVVwSGFuZGxlcik7Ci0gICAgICAgIH0pOwot
Ci0gICAgfQotCi0gICAgJC5wbG90LnBsdWdpbnMucHVzaCh7Ci0gICAgICAgIGluaXQ6IGluaXQs
Ci0gICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAgIHNlbGVjdGlvbjogewotICAgICAgICAg
ICAgICAgIG1vZGU6IG51bGwsIC8vIG9uZSBvZiBudWxsLCAieCIsICJ5IiBvciAieHkiCi0gICAg
ICAgICAgICAgICAgY29sb3I6ICIjZThjZmFjIgotICAgICAgICAgICAgfQotICAgICAgICB9LAot
ICAgICAgICBuYW1lOiAnc2VsZWN0aW9uJywKLSAgICAgICAgdmVyc2lvbjogJzEuMScKLSAgICB9
KTsKLX0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2pzL2pxdWVyeS5mbG90LnN0YWNrLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9qcy9qcXVlcnkuZmxvdC5zdGFjay5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWJjYjA1ZTM0ZWM5MjJjMTBmYTk5Mjc3MmVlNzQ2ZDM0NzNlMTAyNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnN0YWNrLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTg4
ICswLDAgQEAKLS8qIEZsb3QgcGx1Z2luIGZvciBzdGFja2luZyBkYXRhIHNldHMgcmF0aGVyIHRo
YW4gb3Zlcmx5YWluZyB0aGVtLgotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBP
bGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQotVGhlIHBsdWdp
biBhc3N1bWVzIHRoZSBkYXRhIGlzIHNvcnRlZCBvbiB4IChvciB5IGlmIHN0YWNraW5nIGhvcml6
b250YWxseSkuCi1Gb3IgbGluZSBjaGFydHMsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiBhIGxpbmUg
aGFzIGFuIHVuZGVmaW5lZCBnYXAgKGZyb20gYQotbnVsbCBwb2ludCksIHRoZW4gdGhlIGxpbmUg
YWJvdmUgaXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZ2FwIC0gaW5zZXJ0IHplcm9zCi1pbnN0ZWFk
IG9mICJudWxsIiBpZiB5b3Ugd2FudCBhbm90aGVyIGJlaGF2aW91ci4gVGhpcyBhbHNvIGhvbGRz
IGZvciB0aGUgc3RhcnQKLWFuZCBlbmQgb2YgdGhlIGNoYXJ0LiBOb3RlIHRoYXQgc3RhY2tpbmcg
YSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcwotaW4gbW9zdCBpbnN0YW5jZXMg
ZG9lc24ndCBtYWtlIHNlbnNlIChzbyBpdCBsb29rcyB3ZWlyZCkuCi0KLVR3byBvciBtb3JlIHNl
cmllcyBhcmUgc3RhY2tlZCB3aGVuIHRoZWlyICJzdGFjayIgYXR0cmlidXRlIGlzIHNldCB0byB0
aGUgc2FtZQota2V5ICh3aGljaCBjYW4gYmUgYW55IG51bWJlciBvciBzdHJpbmcgb3IganVzdCAi
dHJ1ZSIpLiBUbyBzcGVjaWZ5IHRoZSBkZWZhdWx0Ci1zdGFjaywgeW91IGNhbiBzZXQgdGhlIHN0
YWNrIG9wdGlvbiBsaWtlIHRoaXM6Ci0KLSAgICBzZXJpZXM6IHsKLSAgICAgICAgc3RhY2s6IG51
bGwgb3IgdHJ1ZSBvciBrZXkgKG51bWJlci9zdHJpbmcpCi0gICAgfQotCi1Zb3UgY2FuIGFsc28g
c3BlY2lmeSBpdCBmb3IgYSBzaW5nbGUgc2VyaWVzLCBsaWtlIHRoaXM6Ci0KLSAgICAkLnBsb3Qo
ICQoIiNwbGFjZWhvbGRlciIpLCBbewotICAgICAgICBkYXRhOiBbIC4uLiBdLAotICAgICAgICBz
dGFjazogdHJ1ZQotICAgIH1dKQotCi1UaGUgc3RhY2tpbmcgb3JkZXIgaXMgZGV0ZXJtaW5lZCBi
eSB0aGUgb3JkZXIgb2YgdGhlIGRhdGEgc2VyaWVzIGluIHRoZSBhcnJheQotKGxhdGVyIHNlcmll
cyBlbmQgdXAgb24gdG9wIG9mIHRoZSBwcmV2aW91cykuCi0KLUludGVybmFsbHksIHRoZSBwbHVn
aW4gbW9kaWZpZXMgdGhlIGRhdGFwb2ludHMgaW4gZWFjaCBzZXJpZXMsIGFkZGluZyBhbgotb2Zm
c2V0IHRvIHRoZSB5IHZhbHVlLiBGb3IgbGluZSBzZXJpZXMsIGV4dHJhIGRhdGEgcG9pbnRzIGFy
ZSBpbnNlcnRlZCB0aHJvdWdoCi1pbnRlcnBvbGF0aW9uLiBJZiB0aGVyZSdzIGEgc2Vjb25kIHkg
dmFsdWUsIGl0J3MgYWxzbyBhZGp1c3RlZCAoZS5nIGZvciBiYXIKLWNoYXJ0cyBvciBmaWxsZWQg
YXJlYXMpLgotCi0qLwotCi0oZnVuY3Rpb24gKCQpIHsKLSAgICB2YXIgb3B0aW9ucyA9IHsKLSAg
ICAgICAgc2VyaWVzOiB7IHN0YWNrOiBudWxsIH0gLy8gb3IgbnVtYmVyL3N0cmluZwotICAgIH07
Ci0gICAgCi0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIGZ1bmN0aW9uIGZpbmRN
YXRjaGluZ1NlcmllcyhzLCBhbGxzZXJpZXMpIHsKLSAgICAgICAgICAgIHZhciByZXMgPSBudWxs
OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxzZXJpZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAocyA9PSBhbGxzZXJpZXNbaV0pCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChhbGxz
ZXJpZXNbaV0uc3RhY2sgPT0gcy5zdGFjaykKLSAgICAgICAgICAgICAgICAgICAgcmVzID0gYWxs
c2VyaWVzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1
cm4gcmVzOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmdW5jdGlvbiBzdGFja0RhdGEo
cGxvdCwgcywgZGF0YXBvaW50cykgewotICAgICAgICAgICAgaWYgKHMuc3RhY2sgPT0gbnVsbCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciBvdGhlciA9IGZpbmRN
YXRjaGluZ1NlcmllcyhzLCBwbG90LmdldERhdGEoKSk7Ci0gICAgICAgICAgICBpZiAoIW90aGVy
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHBzID0gZGF0YXBv
aW50cy5wb2ludHNpemUsCi0gICAgICAgICAgICAgICAgcG9pbnRzID0gZGF0YXBvaW50cy5wb2lu
dHMsCi0gICAgICAgICAgICAgICAgb3RoZXJwcyA9IG90aGVyLmRhdGFwb2ludHMucG9pbnRzaXpl
LAotICAgICAgICAgICAgICAgIG90aGVycG9pbnRzID0gb3RoZXIuZGF0YXBvaW50cy5wb2ludHMs
Ci0gICAgICAgICAgICAgICAgbmV3cG9pbnRzID0gW10sCi0gICAgICAgICAgICAgICAgcHgsIHB5
LCBpbnRlcnksIHF4LCBxeSwgYm90dG9tLAotICAgICAgICAgICAgICAgIHdpdGhsaW5lcyA9IHMu
bGluZXMuc2hvdywKLSAgICAgICAgICAgICAgICBob3Jpem9udGFsID0gcy5iYXJzLmhvcml6b250
YWwsCi0gICAgICAgICAgICAgICAgd2l0aGJvdHRvbSA9IHBzID4gMiAmJiAoaG9yaXpvbnRhbCA/
IGRhdGFwb2ludHMuZm9ybWF0WzJdLnggOiBkYXRhcG9pbnRzLmZvcm1hdFsyXS55KSwKLSAgICAg
ICAgICAgICAgICB3aXRoc3RlcHMgPSB3aXRobGluZXMgJiYgcy5saW5lcy5zdGVwcywKLSAgICAg
ICAgICAgICAgICBmcm9tZ2FwID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICBrZXlPZmZzZXQgPSBo
b3Jpem9udGFsID8gMSA6IDAsCi0gICAgICAgICAgICAgICAgYWNjdW11bGF0ZU9mZnNldCA9IGhv
cml6b250YWwgPyAwIDogMSwKLSAgICAgICAgICAgICAgICBpID0gMCwgaiA9IDAsIGwsIG07Ci0K
LSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gcG9p
bnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
ICBsID0gbmV3cG9pbnRzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmIChwb2ludHNbaV0g
PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBjb3B5IGdhcHMKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXdwb2ludHMucHVzaChwb2ludHNbaSArIG1dKTsKLSAgICAgICAgICAgICAgICAgICAgaSAr
PSBwczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+PSBv
dGhlcnBvaW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGxpbmVzLCB3
ZSBjYW4ndCB1c2UgdGhlIHJlc3Qgb2YgdGhlIHBvaW50cwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXdpdGhsaW5lcykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8
IHBzOyArK20pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2gocG9p
bnRzW2kgKyBtXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aSArPSBwczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3Ro
ZXJwb2ludHNbal0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBvb3BzLCBnb3Qg
YSBnYXAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVzaChudWxsKTsKLSAgICAgICAgICAgICAg
ICAgICAgZnJvbWdhcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGdvdCB0d28gcG9pbnRzCi0gICAgICAg
ICAgICAgICAgICAgIHB4ID0gcG9pbnRzW2kgKyBrZXlPZmZzZXRdOwotICAgICAgICAgICAgICAg
ICAgICBweSA9IHBvaW50c1tpICsgYWNjdW11bGF0ZU9mZnNldF07Ci0gICAgICAgICAgICAgICAg
ICAgIHF4ID0gb3RoZXJwb2ludHNbaiArIGtleU9mZnNldF07Ci0gICAgICAgICAgICAgICAgICAg
IHF5ID0gb3RoZXJwb2ludHNbaiArIGFjY3VtdWxhdGVPZmZzZXRdOwotICAgICAgICAgICAgICAg
ICAgICBib3R0b20gPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChweCA9PSBxeCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMDsgbSA8IHBzOyArK20pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2gocG9pbnRzW2kgKyBtXSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1tsICsgYWNjdW11bGF0ZU9mZnNldF0gKz0g
cXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBxeTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChweCA+IHF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBnb3QgcGFzdCBwb2ludCBiZWxvdywgbWlnaHQgbmVlZCB0bwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaW5zZXJ0IGludGVycG9sYXRlZCBleHRyYSBwb2ludAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHdpdGhsaW5lcyAmJiBpID4gMCAmJiBwb2ludHNbaSAtIHBzXSAh
PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ5ID0gcHkgKyAocG9p
bnRzW2kgLSBwcyArIGFjY3VtdWxhdGVPZmZzZXRdIC0gcHkpICogKHF4IC0gcHgpIC8gKHBvaW50
c1tpIC0gcHMgKyBrZXlPZmZzZXRdIC0gcHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld3BvaW50cy5wdXNoKHF4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2lu
dHMucHVzaChpbnRlcnkgKyBxeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICht
ID0gMjsgbSA8IHBzOyArK20pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3Bv
aW50cy5wdXNoKHBvaW50c1tpICsgbV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
dHRvbSA9IHF5OyAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaiArPSBvdGhlcnBzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgeyAvLyBweCA8IHF4Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZnJvbWdhcCAmJiB3aXRobGluZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
ZiB3ZSBjb21lIGZyb20gYSBnYXAsIHdlIGp1c3Qgc2tpcCB0aGlzIHBvaW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaSArPSBwczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKytt
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKHBvaW50c1tpICsg
bV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyB3ZSBtaWdodCBiZSBhYmxlIHRvIGludGVycG9sYXRlIGEgcG9pbnQgYmVsb3csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbiBnaXZlIHVzIGEgYmV0dGVyIHkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh3aXRobGluZXMgJiYgaiA+IDAgJiYgb3RoZXJwb2ludHNbaiAt
IG90aGVycHNdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tID0g
cXkgKyAob3RoZXJwb2ludHNbaiAtIG90aGVycHMgKyBhY2N1bXVsYXRlT2Zmc2V0XSAtIHF5KSAq
IChweCAtIHF4KSAvIChvdGhlcnBvaW50c1tqIC0gb3RoZXJwcyArIGtleU9mZnNldF0gLSBxeCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1tsICsgYWNjdW11bGF0ZU9mZnNl
dF0gKz0gYm90dG9tOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpICs9IHBzOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZnJvbWdhcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGwgIT0gbmV3cG9pbnRzLmxlbmd0aCAmJiB3aXRoYm90dG9tKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyAyXSArPSBib3R0b207Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gbWFpbnRhaW4gdGhlIGxpbmUgc3RlcHMgaW52
YXJpYW50Ci0gICAgICAgICAgICAgICAgaWYgKHdpdGhzdGVwcyAmJiBsICE9IG5ld3BvaW50cy5s
ZW5ndGggJiYgbCA+IDAKLSAgICAgICAgICAgICAgICAgICAgJiYgbmV3cG9pbnRzW2xdICE9IG51
bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgbmV3cG9pbnRzW2xdICE9IG5ld3BvaW50c1tsIC0g
cHNdCi0gICAgICAgICAgICAgICAgICAgICYmIG5ld3BvaW50c1tsICsgMV0gIT0gbmV3cG9pbnRz
W2wgLSBwcyArIDFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsg
KyttKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyBwcyArIG1dID0gbmV3
cG9pbnRzW2wgKyBtXTsKLSAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzW2wgKyAxXSA9IG5l
d3BvaW50c1tsIC0gcHMgKyAxXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGRhdGFwb2ludHMucG9pbnRzID0gbmV3cG9pbnRzOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NEYXRhcG9pbnRzLnB1c2goc3RhY2tE
YXRhKTsKLSAgICB9Ci0gICAgCi0gICAgJC5wbG90LnBsdWdpbnMucHVzaCh7Ci0gICAgICAgIGlu
aXQ6IGluaXQsCi0gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCi0gICAgICAgIG5hbWU6ICdzdGFj
aycsCi0gICAgICAgIHZlcnNpb246ICcxLjInCi0gICAgfSk7Ci19KShqUXVlcnkpOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zeW1i
b2wuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnN5
bWJvbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYyOGJlYmNiODc1ZmFkMzY5
OTlhZjkzY2EyMTE0NmM0ZjIwOThhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5m
bG90LnN5bWJvbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEZsb3QgcGx1
Z2luIHRoYXQgYWRkcyBzb21lIGV4dHJhIHN5bWJvbHMgZm9yIHBsb3R0aW5nIHBvaW50cy4KLQot
Q29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1
bmRlciB0aGUgTUlUIGxpY2Vuc2UuCi0KLVRoZSBzeW1ib2xzIGFyZSBhY2Nlc3NlZCBhcyBzdHJp
bmdzIHRocm91Z2ggdGhlIHN0YW5kYXJkIHN5bWJvbCBvcHRpb25zOgotCi0gICAgc2VyaWVzOiB7
Ci0gICAgICAgIHBvaW50czogewotICAgICAgICAgICAgc3ltYm9sOiAic3F1YXJlIiAvLyBvciAi
ZGlhbW9uZCIsICJ0cmlhbmdsZSIsICJjcm9zcyIKLSAgICAgICAgfQotICAgIH0KLQotKi8KLQot
KGZ1bmN0aW9uICgkKSB7Ci0gICAgZnVuY3Rpb24gcHJvY2Vzc1Jhd0RhdGEocGxvdCwgc2VyaWVz
LCBkYXRhcG9pbnRzKSB7Ci0gICAgICAgIC8vIHdlIG5vcm1hbGl6ZSB0aGUgYXJlYSBvZiBlYWNo
IHN5bWJvbCBzbyBpdCBpcyBhcHByb3hpbWF0ZWx5IHRoZQotICAgICAgICAvLyBzYW1lIGFzIGEg
Y2lyY2xlIG9mIHRoZSBnaXZlbiByYWRpdXMKLQotICAgICAgICB2YXIgaGFuZGxlcnMgPSB7Ci0g
ICAgICAgICAgICBzcXVhcmU6IGZ1bmN0aW9uIChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KSB7
Ci0gICAgICAgICAgICAgICAgLy8gcGkgKiByXjIgPSAoMnMpXjIgID0+ICBzID0gciAqIHNxcnQo
cGkpLzIKLSAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHJhZGl1cyAqIE1hdGguc3FydChNYXRo
LlBJKSAvIDI7Ci0gICAgICAgICAgICAgICAgY3R4LnJlY3QoeCAtIHNpemUsIHkgLSBzaXplLCBz
aXplICsgc2l6ZSwgc2l6ZSArIHNpemUpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGRp
YW1vbmQ6IGZ1bmN0aW9uIChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KSB7Ci0gICAgICAgICAg
ICAgICAgLy8gcGkgKiByXjIgPSAyc14yICA9PiAgcyA9IHIgKiBzcXJ0KHBpLzIpCi0gICAgICAg
ICAgICAgICAgdmFyIHNpemUgPSByYWRpdXMgKiBNYXRoLnNxcnQoTWF0aC5QSSAvIDIpOwotICAg
ICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHNpemUsIHkpOwotICAgICAgICAgICAgICAgIGN0
eC5saW5lVG8oeCwgeSAtIHNpemUpOwotICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHNp
emUsIHkpOwotICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSArIHNpemUpOwotICAgICAg
ICAgICAgICAgIGN0eC5saW5lVG8oeCAtIHNpemUsIHkpOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIHRyaWFuZ2xlOiBmdW5jdGlvbiAoY3R4LCB4LCB5LCByYWRpdXMsIHNoYWRvdykgewot
ICAgICAgICAgICAgICAgIC8vIHBpICogcl4yID0gMS8yICogc14yICogc2luIChwaSAvIDMpICA9
PiAgcyA9IHIgKiBzcXJ0KDIgKiBwaSAvIHNpbihwaSAvIDMpKQotICAgICAgICAgICAgICAgIHZh
ciBzaXplID0gcmFkaXVzICogTWF0aC5zcXJ0KDIgKiBNYXRoLlBJIC8gTWF0aC5zaW4oTWF0aC5Q
SSAvIDMpKTsKLSAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gc2l6ZSAqIE1hdGguc2luKE1h
dGguUEkgLyAzKTsKLSAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHggLSBzaXplLzIsIHkgKyBo
ZWlnaHQvMik7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgc2l6ZS8yLCB5ICsgaGVp
Z2h0LzIpOwotICAgICAgICAgICAgICAgIGlmICghc2hhZG93KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGN0eC5saW5lVG8oeCwgeSAtIGhlaWdodC8yKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4
LmxpbmVUbyh4IC0gc2l6ZS8yLCB5ICsgaGVpZ2h0LzIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICBjcm9zczogZnVuY3Rpb24gKGN0eCwgeCwgeSwgcmFk
aXVzLCBzaGFkb3cpIHsKLSAgICAgICAgICAgICAgICAvLyBwaSAqIHJeMiA9ICgycyleMiAgPT4g
IHMgPSByICogc3FydChwaSkvMgotICAgICAgICAgICAgICAgIHZhciBzaXplID0gcmFkaXVzICog
TWF0aC5zcXJ0KE1hdGguUEkpIC8gMjsKLSAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHggLSBz
aXplLCB5IC0gc2l6ZSk7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsgc2l6ZSwgeSAr
IHNpemUpOwotICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCAtIHNpemUsIHkgKyBzaXplKTsK
LSAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyBzaXplLCB5IC0gc2l6ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIHMgPSBzZXJpZXMucG9pbnRzLnN5bWJv
bDsKLSAgICAgICAgaWYgKGhhbmRsZXJzW3NdKQotICAgICAgICAgICAgc2VyaWVzLnBvaW50cy5z
eW1ib2wgPSBoYW5kbGVyc1tzXTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gaW5pdChwbG90
KSB7Ci0gICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc0RhdGFwb2ludHMucHVzaChwcm9jZXNzUmF3
RGF0YSk7Ci0gICAgfQotICAgIAotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICBp
bml0OiBpbml0LAotICAgICAgICBuYW1lOiAnc3ltYm9scycsCi0gICAgICAgIHZlcnNpb246ICcx
LjAnCi0gICAgfSk7Ci19KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC50aHJlc2hvbGQuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnRocmVzaG9sZC5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODM2MGMyZTAzNDI1N2VmYzgxN2JlYTk4MjJmMzljZGU2Mzcx
MjlmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnRocmVzaG9sZC5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3IgdGhyZXNo
b2xkaW5nIGRhdGEuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVy
c2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi1UaGUgcGx1Z2luIHN1cHBv
cnRzIHRoZXNlIG9wdGlvbnM6Ci0KLSAgICBzZXJpZXM6IHsKLSAgICAgICAgdGhyZXNob2xkOiB7
Ci0gICAgICAgICAgICBiZWxvdzogbnVtYmVyCi0gICAgICAgICAgICBjb2xvcjogY29sb3JzcGVj
Ci0gICAgICAgIH0KLSAgICB9Ci0KLUl0IGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8gYSBzaW5nbGUg
c2VyaWVzLCBsaWtlIHRoaXM6Ci0KLSAgICAkLnBsb3QoICQoIiNwbGFjZWhvbGRlciIpLCBbewot
ICAgICAgICBkYXRhOiBbIC4uLiBdLAotICAgICAgICB0aHJlc2hvbGQ6IHsgLi4uIH0KLSAgICB9
XSkKLQotQW4gYXJyYXkgY2FuIGJlIHBhc3NlZCBmb3IgbXVsdGlwbGUgdGhyZXNob2xkaW5nLCBs
aWtlIHRoaXM6Ci0KLSAgICB0aHJlc2hvbGQ6IFt7Ci0gICAgICAgIGJlbG93OiBudW1iZXIxCi0g
ICAgICAgIGNvbG9yOiBjb2xvcjEKLSAgICB9LHsKLSAgICAgICAgYmVsb3c6IG51bWJlcjIKLSAg
ICAgICAgY29sb3I6IGNvbG9yMgotICAgIH1dCi0KLVRoZXNlIG11bHRpcGxlIHRocmVzaG9sZCBv
YmplY3RzIGNhbiBiZSBwYXNzZWQgaW4gYW55IG9yZGVyIHNpbmNlIHRoZXkgYXJlCi1zb3J0ZWQg
YnkgdGhlIHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0KLVRoZSBkYXRhIHBvaW50cyBiZWxvdyAiYmVs
b3ciIGFyZSBkcmF3biB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3IuIFRoaXMgbWFrZXMKLWl0IGVh
c3kgdG8gbWFyayBwb2ludHMgYmVsb3cgMCwgZS5nLiBmb3IgYnVkZ2V0IGRhdGEuCi0KLUludGVy
bmFsbHksIHRoZSBwbHVnaW4gd29ya3MgYnkgc3BsaXR0aW5nIHRoZSBkYXRhIGludG8gdHdvIHNl
cmllcywgYWJvdmUgYW5kCi1iZWxvdyB0aGUgdGhyZXNob2xkLiBUaGUgZXh0cmEgc2VyaWVzIGJl
bG93IHRoZSB0aHJlc2hvbGQgd2lsbCBoYXZlIGl0cyBsYWJlbAotY2xlYXJlZCBhbmQgdGhlIHNw
ZWNpYWwgIm9yaWdpblNlcmllcyIgYXR0cmlidXRlIHNldCB0byB0aGUgb3JpZ2luYWwgc2VyaWVz
LgotWW91IG1heSBuZWVkIHRvIGNoZWNrIGZvciB0aGlzIGluIGhvdmVyIGV2ZW50cy4KLQotKi8K
LQotKGZ1bmN0aW9uICgkKSB7Ci0gICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgIHNlcmllczog
eyB0aHJlc2hvbGQ6IG51bGwgfSAvLyBvciB7IGJlbG93OiBudW1iZXIsIGNvbG9yOiBjb2xvciBz
cGVjfQotICAgIH07Ci0gICAgCi0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIGZ1
bmN0aW9uIHRocmVzaG9sZERhdGEocGxvdCwgcywgZGF0YXBvaW50cywgYmVsb3csIGNvbG9yKSB7
Ci0gICAgICAgICAgICB2YXIgcHMgPSBkYXRhcG9pbnRzLnBvaW50c2l6ZSwgaSwgeCwgeSwgcCwg
cHJldnAsCi0gICAgICAgICAgICAgICAgdGhyZXNob2xkZWQgPSAkLmV4dGVuZCh7fSwgcyk7IC8v
IG5vdGU6IHNoYWxsb3cgY29weQotCi0gICAgICAgICAgICB0aHJlc2hvbGRlZC5kYXRhcG9pbnRz
ID0geyBwb2ludHM6IFtdLCBwb2ludHNpemU6IHBzLCBmb3JtYXQ6IGRhdGFwb2ludHMuZm9ybWF0
IH07Ci0gICAgICAgICAgICB0aHJlc2hvbGRlZC5sYWJlbCA9IG51bGw7Ci0gICAgICAgICAgICB0
aHJlc2hvbGRlZC5jb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgdGhyZXNob2xkZWQudGhyZXNo
b2xkID0gbnVsbDsKLSAgICAgICAgICAgIHRocmVzaG9sZGVkLm9yaWdpblNlcmllcyA9IHM7Ci0g
ICAgICAgICAgICB0aHJlc2hvbGRlZC5kYXRhID0gW107Ci0gCi0gICAgICAgICAgICB2YXIgb3Jp
Z3BvaW50cyA9IGRhdGFwb2ludHMucG9pbnRzLAotICAgICAgICAgICAgICAgIGFkZENyb3NzaW5n
UG9pbnRzID0gcy5saW5lcy5zaG93OwotCi0gICAgICAgICAgICB2YXIgdGhyZXNwb2ludHMgPSBb
XTsKLSAgICAgICAgICAgIHZhciBuZXdwb2ludHMgPSBbXTsKLSAgICAgICAgICAgIHZhciBtOwot
Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JpZ3BvaW50cy5sZW5ndGg7IGkgKz0gcHMp
IHsKLSAgICAgICAgICAgICAgICB4ID0gb3JpZ3BvaW50c1tpXTsKLSAgICAgICAgICAgICAgICB5
ID0gb3JpZ3BvaW50c1tpICsgMV07Ci0KLSAgICAgICAgICAgICAgICBwcmV2cCA9IHA7Ci0gICAg
ICAgICAgICAgICAgaWYgKHkgPCBiZWxvdykKLSAgICAgICAgICAgICAgICAgICAgcCA9IHRocmVz
cG9pbnRzOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcCA9IG5l
d3BvaW50czsKLQotICAgICAgICAgICAgICAgIGlmIChhZGRDcm9zc2luZ1BvaW50cyAmJiBwcmV2
cCAhPSBwICYmIHggIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAmJiBpID4gMCAmJiBvcmln
cG9pbnRzW2kgLSBwc10gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ4
ID0gKHggLSBvcmlncG9pbnRzW2kgLSBwc10pIC8gKHkgLSBvcmlncG9pbnRzW2kgLSBwcyArIDFd
KSAqIChiZWxvdyAtIHkpICsgeDsKLSAgICAgICAgICAgICAgICAgICAgcHJldnAucHVzaChpbnRl
cngpOwotICAgICAgICAgICAgICAgICAgICBwcmV2cC5wdXNoKGJlbG93KTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChtID0gMjsgbSA8IHBzOyArK20pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2cC5wdXNoKG9yaWdwb2ludHNbaSArIG1dKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIHAucHVzaChudWxsKTsgLy8gc3RhcnQgbmV3IHNlZ21lbnQKLSAg
ICAgICAgICAgICAgICAgICAgcC5wdXNoKG51bGwpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KG0gPSAyOyBtIDwgcHM7ICsrbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHAucHVzaChvcmln
cG9pbnRzW2kgKyBtXSk7Ci0gICAgICAgICAgICAgICAgICAgIHAucHVzaChpbnRlcngpOwotICAg
ICAgICAgICAgICAgICAgICBwLnB1c2goYmVsb3cpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KG0gPSAyOyBtIDwgcHM7ICsrbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHAucHVzaChvcmln
cG9pbnRzW2kgKyBtXSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcC5w
dXNoKHgpOwotICAgICAgICAgICAgICAgIHAucHVzaCh5KTsKLSAgICAgICAgICAgICAgICBmb3Ig
KG0gPSAyOyBtIDwgcHM7ICsrbSkKLSAgICAgICAgICAgICAgICAgICAgcC5wdXNoKG9yaWdwb2lu
dHNbaSArIG1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGF0YXBvaW50cy5wb2lu
dHMgPSBuZXdwb2ludHM7Ci0gICAgICAgICAgICB0aHJlc2hvbGRlZC5kYXRhcG9pbnRzLnBvaW50
cyA9IHRocmVzcG9pbnRzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodGhyZXNob2xk
ZWQuZGF0YXBvaW50cy5wb2ludHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHZhciBv
cmlnSW5kZXggPSAkLmluQXJyYXkocywgcGxvdC5nZXREYXRhKCkpOwotICAgICAgICAgICAgICAg
IC8vIEluc2VydCBuZXdseS1nZW5lcmF0ZWQgc2VyaWVzIHJpZ2h0IGFmdGVyIG9yaWdpbmFsIG9u
ZSAodG8gcHJldmVudCBpdCBmcm9tIGJlY29taW5nIHRvcC1tb3N0KQotICAgICAgICAgICAgICAg
IHBsb3QuZ2V0RGF0YSgpLnNwbGljZShvcmlnSW5kZXggKyAxLCAwLCB0aHJlc2hvbGRlZCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogdGhl
cmUgYXJlIHByb2JhYmx5IHNvbWUgZWRnZSBjYXNlcyBsZWZ0IGluIGJhcnMKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1RocmVzaG9sZHMocGxvdCwgcywgZGF0
YXBvaW50cykgewotICAgICAgICAgICAgaWYgKCFzLnRocmVzaG9sZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzLnRocmVzaG9sZCBpbnN0
YW5jZW9mIEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgcy50aHJlc2hvbGQuc29ydChmdW5jdGlv
bihhLCBiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmJlbG93IC0gYi5iZWxvdzsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAk
KHMudGhyZXNob2xkKS5lYWNoKGZ1bmN0aW9uKGksIHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRocmVzaG9sZERhdGEocGxvdCwgcywgZGF0YXBvaW50cywgdGguYmVsb3csIHRoLmNvbG9yKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHRocmVzaG9sZERhdGEocGxvdCwgcywgZGF0YXBvaW50cywgcy50aHJl
c2hvbGQuYmVsb3csIHMudGhyZXNob2xkLmNvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgcGxvdC5ob29rcy5wcm9jZXNzRGF0YXBvaW50cy5wdXNoKHBy
b2Nlc3NUaHJlc2hvbGRzKTsKLSAgICB9Ci0gICAgCi0gICAgJC5wbG90LnBsdWdpbnMucHVzaCh7
Ci0gICAgICAgIGluaXQ6IGluaXQsCi0gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCi0gICAgICAg
IG5hbWU6ICd0aHJlc2hvbGQnLAotICAgICAgICB2ZXJzaW9uOiAnMS4yJwotICAgIH0pOwotfSko
alF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMv
anF1ZXJ5LmZsb3QudGltZS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMv
anF1ZXJ5LmZsb3QudGltZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxYzM1
NzUxYWRiMDJjOWNkODMwMDMwODY3NmY4ZGY5ZDllZDFiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L2pzL2pxdWVyeS5mbG90LnRpbWUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAot
LyogUHJldHR5IGhhbmRsaW5nIG9mIHRpbWUgYXhlcy4KLQotQ29weXJpZ2h0IChjKSAyMDA3LTIw
MTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu
Ci0KLVNldCBheGlzLm1vZGUgdG8gInRpbWUiIHRvIGVuYWJsZS4gU2VlIHRoZSBzZWN0aW9uICJU
aW1lIHNlcmllcyBkYXRhIiBpbgotQVBJLnR4dCBmb3IgZGV0YWlscy4KLQotKi8KLQotKGZ1bmN0
aW9uKCQpIHsKLQotICAgIHZhciBvcHRpb25zID0ge307Ci0KLSAgICAvLyByb3VuZCB0byBuZWFy
YnkgbG93ZXIgbXVsdGlwbGUgb2YgYmFzZQotCi0gICAgZnVuY3Rpb24gZmxvb3JJbkJhc2Uobiwg
YmFzZSkgewotICAgICAgICByZXR1cm4gYmFzZSAqIE1hdGguZmxvb3IobiAvIGJhc2UpOwotICAg
IH0KLQotICAgIC8vIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgZGF0ZSBkIGZvcm1hdHRlZCBh
Y2NvcmRpbmcgdG8gZm10LgotICAgIC8vIEEgc3Vic2V0IG9mIHRoZSBPcGVuIEdyb3VwJ3Mgc3Ry
ZnRpbWUgZm9ybWF0IGlzIHN1cHBvcnRlZC4KLQotICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUoZCwg
Zm10LCBtb250aE5hbWVzLCBkYXlOYW1lcykgewotCi0gICAgICAgIGlmICh0eXBlb2YgZC5zdHJm
dGltZSA9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICByZXR1cm4gZC5zdHJmdGltZShmbXQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGxlZnRQYWQgPSBmdW5jdGlvbihuLCBwYWQpIHsK
LSAgICAgICAgICAgIG4gPSAiIiArIG47Ci0gICAgICAgICAgICBwYWQgPSAiIiArIChwYWQgPT0g
bnVsbCA/ICIwIiA6IHBhZCk7Ci0gICAgICAgICAgICByZXR1cm4gbi5sZW5ndGggPT0gMSA/IHBh
ZCArIG4gOiBuOwotICAgICAgICB9OwotCi0gICAgICAgIHZhciByID0gW107Ci0gICAgICAgIHZh
ciBlc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgdmFyIGhvdXJzID0gZC5nZXRIb3VycygpOwotICAg
ICAgICB2YXIgaXNBTSA9IGhvdXJzIDwgMTI7Ci0KLSAgICAgICAgaWYgKG1vbnRoTmFtZXMgPT0g
bnVsbCkgewotICAgICAgICAgICAgbW9udGhOYW1lcyA9IFsiSmFuIiwgIkZlYiIsICJNYXIiLCAi
QXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJE
ZWMiXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkYXlOYW1lcyA9PSBudWxsKSB7Ci0gICAg
ICAgICAgICBkYXlOYW1lcyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJG
cmkiLCAiU2F0Il07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaG91cnMxMjsKLQotICAgICAg
ICBpZiAoaG91cnMgPiAxMikgewotICAgICAgICAgICAgaG91cnMxMiA9IGhvdXJzIC0gMTI7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPT0gMCkgewotICAgICAgICAgICAgaG91cnMxMiA9IDEy
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaG91cnMxMiA9IGhvdXJzOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyArK2kpIHsKLQot
ICAgICAgICAgICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpOwotCi0gICAgICAgICAgICBpZiAoZXNj
YXBlKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2EnOiBjID0gIiIgKyBkYXlOYW1lc1tkLmdldERheSgpXTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2InOiBjID0gIiIgKyBtb250aE5hbWVzW2QuZ2V0TW9udGgoKV07
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzogYyA9IGxlZnRQYWQoZC5nZXRE
YXRlKCkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6IGMgPSBsZWZ0UGFk
KGQuZ2V0RGF0ZSgpLCAiICIpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnSCc6
IGMgPSBsZWZ0UGFkKGhvdXJzKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0kn
OiBjID0gbGVmdFBhZChob3VyczEyKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2wnOiBjID0gbGVmdFBhZChob3VyczEyLCAiICIpOyBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnbSc6IGMgPSBsZWZ0UGFkKGQuZ2V0TW9udGgoKSArIDEpOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnTSc6IGMgPSBsZWZ0UGFkKGQuZ2V0TWludXRlcygpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHF1YXJ0ZXJzIG5vdCBpbiBPcGVuIEdyb3VwJ3Mg
c3RyZnRpbWUgc3BlY2lmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICBjYXNlICdxJzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGMgPSAiIiArIChNYXRoLmZsb29yKGQuZ2V0TW9udGgoKSAv
IDMpICsgMSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzogYyA9IGxlZnRQ
YWQoZC5nZXRTZWNvbmRzKCkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6
IGMgPSBsZWZ0UGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCk7IGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlICdZJzogYyA9ICIiICsgZC5nZXRGdWxsWWVhcigpOyBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAncCc6IGMgPSAoaXNBTSkgPyAoIiIgKyAiYW0iKSA6ICgiIiAr
ICJwbSIpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnUCc6IGMgPSAoaXNBTSkg
PyAoIiIgKyAiQU0iKSA6ICgiIiArICJQTSIpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAndyc6IGMgPSAiIiArIGQuZ2V0RGF5KCk7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByLnB1c2goYyk7Ci0gICAgICAgICAgICAgICAgZXNjYXBlID0gZmFs
c2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjID09ICIlIikg
ewotICAgICAgICAgICAgICAgICAgICBlc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHIucHVzaChjKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gci5qb2luKCIiKTsK
LSAgICB9Ci0KLSAgICAvLyBUbyBoYXZlIGEgY29uc2lzdGVudCB2aWV3IG9mIHRpbWUtYmFzZWQg
ZGF0YSBpbmRlcGVuZGVudCBvZiB3aGljaCB0aW1lCi0gICAgLy8gem9uZSB0aGUgY2xpZW50IGhh
cHBlbnMgdG8gYmUgaW4gd2UgbmVlZCBhIGRhdGUtbGlrZSBvYmplY3QgaW5kZXBlbmRlbnQKLSAg
ICAvLyBvZiB0aW1lIHpvbmVzLiAgVGhpcyBpcyBkb25lIHRocm91Z2ggYSB3cmFwcGVyIHRoYXQg
b25seSBjYWxscyB0aGUgVVRDCi0gICAgLy8gdmVyc2lvbnMgb2YgdGhlIGFjY2Vzc29yIG1ldGhv
ZHMuCi0KLSAgICBmdW5jdGlvbiBtYWtlVXRjV3JhcHBlcihkKSB7Ci0KLSAgICAgICAgZnVuY3Rp
b24gYWRkUHJveHlNZXRob2Qoc291cmNlT2JqLCBzb3VyY2VNZXRob2QsIHRhcmdldE9iaiwgdGFy
Z2V0TWV0aG9kKSB7Ci0gICAgICAgICAgICBzb3VyY2VPYmpbc291cmNlTWV0aG9kXSA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRPYmpbdGFyZ2V0TWV0aG9kXS5h
cHBseSh0YXJnZXRPYmosIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Owot
Ci0gICAgICAgIHZhciB1dGMgPSB7Ci0gICAgICAgICAgICBkYXRlOiBkCi0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gc3VwcG9ydCBzdHJmdGltZSwgaWYgZm91bmQKLQotICAgICAgICBpZiAoZC5z
dHJmdGltZSAhPSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIGFkZFByb3h5TWV0aG9kKHV0Yywg
InN0cmZ0aW1lIiwgZCwgInN0cmZ0aW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGRQcm94
eU1ldGhvZCh1dGMsICJnZXRUaW1lIiwgZCwgImdldFRpbWUiKTsKLSAgICAgICAgYWRkUHJveHlN
ZXRob2QodXRjLCAic2V0VGltZSIsIGQsICJzZXRUaW1lIik7Ci0KLSAgICAgICAgdmFyIHByb3Bz
ID0gWyJEYXRlIiwgIkRheSIsICJGdWxsWWVhciIsICJIb3VycyIsICJNaWxsaXNlY29uZHMiLCAi
TWludXRlcyIsICJNb250aCIsICJTZWNvbmRzIl07Ci0KLSAgICAgICAgZm9yICh2YXIgcCA9IDA7
IHAgPCBwcm9wcy5sZW5ndGg7IHArKykgewotICAgICAgICAgICAgYWRkUHJveHlNZXRob2QodXRj
LCAiZ2V0IiArIHByb3BzW3BdLCBkLCAiZ2V0VVRDIiArIHByb3BzW3BdKTsKLSAgICAgICAgICAg
IGFkZFByb3h5TWV0aG9kKHV0YywgInNldCIgKyBwcm9wc1twXSwgZCwgInNldFVUQyIgKyBwcm9w
c1twXSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdXRjOwotICAgIH07Ci0KLSAgICAv
LyBzZWxlY3QgdGltZSB6b25lIHN0cmF0ZWd5LiAgVGhpcyByZXR1cm5zIGEgZGF0ZS1saWtlIG9i
amVjdCB0aWVkIHRvIHRoZQotICAgIC8vIGRlc2lyZWQgdGltZXpvbmUKLQotICAgIGZ1bmN0aW9u
IGRhdGVHZW5lcmF0b3IodHMsIG9wdHMpIHsKLSAgICAgICAgaWYgKG9wdHMudGltZXpvbmUgPT0g
ImJyb3dzZXIiKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodHMpOwotICAgICAgICB9
IGVsc2UgaWYgKCFvcHRzLnRpbWV6b25lIHx8IG9wdHMudGltZXpvbmUgPT0gInV0YyIpIHsKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVXRjV3JhcHBlcihuZXcgRGF0ZSh0cykpOwotICAgICAgICB9
IGVsc2UgaWYgKHR5cGVvZiB0aW1lem9uZUpTICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiB0aW1l
em9uZUpTLkRhdGUgIT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgIHZhciBkID0gbmV3IHRp
bWV6b25lSlMuRGF0ZSgpOwotICAgICAgICAgICAgLy8gdGltZXpvbmUtanMgaXMgZmlja2xlLCBz
byBiZSBzdXJlIHRvIHNldCB0aGUgdGltZSB6b25lIGJlZm9yZQotICAgICAgICAgICAgLy8gc2V0
dGluZyB0aGUgdGltZS4KLSAgICAgICAgICAgIGQuc2V0VGltZXpvbmUob3B0cy50aW1lem9uZSk7
Ci0gICAgICAgICAgICBkLnNldFRpbWUodHMpOwotICAgICAgICAgICAgcmV0dXJuIGQ7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVV0Y1dyYXBwZXIobmV3IERhdGUo
dHMpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBtYXAgb2YgYXBwLiBzaXplIG9m
IHRpbWUgdW5pdHMgaW4gbWlsbGlzZWNvbmRzCi0KLSAgICB2YXIgdGltZVVuaXRTaXplID0gewot
ICAgICAgICAic2Vjb25kIjogMTAwMCwKLSAgICAgICAgIm1pbnV0ZSI6IDYwICogMTAwMCwKLSAg
ICAgICAgImhvdXIiOiA2MCAqIDYwICogMTAwMCwKLSAgICAgICAgImRheSI6IDI0ICogNjAgKiA2
MCAqIDEwMDAsCi0gICAgICAgICJtb250aCI6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCwKLSAg
ICAgICAgInF1YXJ0ZXIiOiAzICogMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwLAotICAgICAgICAi
eWVhciI6IDM2NS4yNDI1ICogMjQgKiA2MCAqIDYwICogMTAwMAotICAgIH07Ci0KLSAgICAvLyB0
aGUgYWxsb3dlZCB0aWNrIHNpemVzLCBhZnRlciAxIHllYXIgd2UgdXNlCi0gICAgLy8gYW4gaW50
ZWdlciBhbGdvcml0aG0KLQotICAgIHZhciBiYXNlU3BlYyA9IFsKLSAgICAgICAgWzEsICJzZWNv
bmQiXSwgWzIsICJzZWNvbmQiXSwgWzUsICJzZWNvbmQiXSwgWzEwLCAic2Vjb25kIl0sCi0gICAg
ICAgIFszMCwgInNlY29uZCJdLCAKLSAgICAgICAgWzEsICJtaW51dGUiXSwgWzIsICJtaW51dGUi
XSwgWzUsICJtaW51dGUiXSwgWzEwLCAibWludXRlIl0sCi0gICAgICAgIFszMCwgIm1pbnV0ZSJd
LCAKLSAgICAgICAgWzEsICJob3VyIl0sIFsyLCAiaG91ciJdLCBbNCwgImhvdXIiXSwKLSAgICAg
ICAgWzgsICJob3VyIl0sIFsxMiwgImhvdXIiXSwKLSAgICAgICAgWzEsICJkYXkiXSwgWzIsICJk
YXkiXSwgWzMsICJkYXkiXSwKLSAgICAgICAgWzAuMjUsICJtb250aCJdLCBbMC41LCAibW9udGgi
XSwgWzEsICJtb250aCJdLAotICAgICAgICBbMiwgIm1vbnRoIl0KLSAgICBdOwotCi0gICAgLy8g
d2UgZG9uJ3Qga25vdyB3aGljaCB2YXJpYW50KHMpIHdlJ2xsIG5lZWQgeWV0LCBidXQgZ2VuZXJh
dGluZyBib3RoIGlzCi0gICAgLy8gY2hlYXAKLQotICAgIHZhciBzcGVjTW9udGhzID0gYmFzZVNw
ZWMuY29uY2F0KFtbMywgIm1vbnRoIl0sIFs2LCAibW9udGgiXSwKLSAgICAgICAgWzEsICJ5ZWFy
Il1dKTsKLSAgICB2YXIgc3BlY1F1YXJ0ZXJzID0gYmFzZVNwZWMuY29uY2F0KFtbMSwgInF1YXJ0
ZXIiXSwgWzIsICJxdWFydGVyIl0sCi0gICAgICAgIFsxLCAieWVhciJdXSk7Ci0KLSAgICBmdW5j
dGlvbiBpbml0KHBsb3QpIHsKLSAgICAgICAgcGxvdC5ob29rcy5wcm9jZXNzRGF0YXBvaW50cy5w
dXNoKGZ1bmN0aW9uIChwbG90LCBzZXJpZXMsIGRhdGFwb2ludHMpIHsKLSAgICAgICAgICAgICQu
ZWFjaChwbG90LmdldEF4ZXMoKSwgZnVuY3Rpb24oYXhpc05hbWUsIGF4aXMpIHsKLQotICAgICAg
ICAgICAgICAgIHZhciBvcHRzID0gYXhpcy5vcHRpb25zOwotCi0gICAgICAgICAgICAgICAgaWYg
KG9wdHMubW9kZSA9PSAidGltZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrR2Vu
ZXJhdG9yID0gZnVuY3Rpb24oYXhpcykgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dGlja3MgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZGF0ZUdlbmVyYXRv
cihheGlzLm1pbiwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluU2l6ZSA9
IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgcXVhcnRlciB1c2UgYSBwb3Nz
aWJpbGl0eSBpZiBxdWFydGVycyBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lbnRp
b25lZCBpbiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3BlYyA9IChvcHRzLnRpY2tTaXplICYmIG9wdHMudGlja1NpemVbMV0gPT09Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInF1YXJ0ZXIiKSB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChvcHRzLm1pblRpY2tTaXplICYmIG9wdHMubWluVGlja1NpemVbMV0gPT09Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInF1YXJ0ZXIiKSA/IHNwZWNRdWFydGVycyA6IHNw
ZWNNb250aHM7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLm1pblRpY2tTaXpl
ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMu
dGlja1NpemUgPT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWluU2l6ZSA9IG9wdHMudGlja1NpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluU2l6ZSA9IG9wdHMubWlu
VGlja1NpemVbMF0gKiB0aW1lVW5pdFNpemVbb3B0cy5taW5UaWNrU2l6ZVsxXV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWMubGVuZ3RoIC0gMTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMuZGVsdGEgPCAoc3Bl
Y1tpXVswXSAqIHRpbWVVbml0U2l6ZVtzcGVjW2ldWzFdXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsgc3BlY1tpICsgMV1bMF0gKiB0aW1lVW5pdFNpemVb
c3BlY1tpICsgMV1bMV1dKSAvIDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
c3BlY1tpXVswXSAqIHRpbWVVbml0U2l6ZVtzcGVjW2ldWzFdXSA+PSBtaW5TaXplKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHNpemUgPSBzcGVjW2ldWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHVuaXQgPSBzcGVjW2ldWzFdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFs
LWNhc2UgdGhlIHBvc3NpYmlsaXR5IG9mIHNldmVyYWwgeWVhcnMKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHVuaXQgPT0gInllYXIiKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBpZiBnaXZlbiBhIG1pblRpY2tTaXplIGluIHllYXJzLCBqdXN0IHVzZSBpdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGl0J3MgYW4gaW50ZWdl
cgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubWluVGlja1NpemUgIT0g
bnVsbCAmJiBvcHRzLm1pblRpY2tTaXplWzFdID09ICJ5ZWFyIikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplID0gTWF0aC5mbG9vcihvcHRzLm1pblRpY2tTaXplWzBdKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBtYWduID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5s
b2coYXhpcy5kZWx0YSAvIHRpbWVVbml0U2l6ZS55ZWFyKSAvIE1hdGguTE4xMCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybSA9IChheGlzLmRlbHRhIC8gdGltZVVu
aXRTaXplLnllYXIpIC8gbWFnbjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9ybSA8IDEuNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9ybSA8
IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAyOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vcm0gPCA3LjUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA1OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSA9IDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAqPSBtYWduOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1p
bmltdW0gc2l6ZSBmb3IgeWVhcnMgaXMgMQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNpemUgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAx
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrU2l6ZSA9IG9wdHMudGlja1Np
emUgfHwgW3NpemUsIHVuaXRdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpY2tTaXpl
ID0gYXhpcy50aWNrU2l6ZVswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBheGlz
LnRpY2tTaXplWzFdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IHRpY2tT
aXplICogdGltZVVuaXRTaXplW3VuaXRdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dW5pdCA9PSAic2Vjb25kIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0U2Vj
b25kcyhmbG9vckluQmFzZShkLmdldFNlY29uZHMoKSwgdGlja1NpemUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAibWludXRlIikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQuc2V0TWludXRlcyhmbG9vckluQmFzZShkLmdldE1pbnV0ZXMoKSwg
dGlja1NpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAi
aG91ciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldEhvdXJzKGZsb29ySW5C
YXNlKGQuZ2V0SG91cnMoKSwgdGlja1NpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodW5pdCA9PSAibW9udGgiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC5zZXRNb250aChmbG9vckluQmFzZShkLmdldE1vbnRoKCksIHRpY2tTaXplKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT0gInF1YXJ0ZXIiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZC5zZXRNb250aCgzICogZmxvb3JJbkJhc2UoZC5nZXRNb250
aCgpIC8gMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja1NpemUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAieWVhciIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkLnNldEZ1bGxZZWFyKGZsb29ySW5CYXNlKGQuZ2V0RnVs
bFllYXIoKSwgdGlja1NpemUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgc21hbGxlciBjb21wb25lbnRzCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGQuc2V0TWlsbGlzZWNvbmRzKDApOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUubWludXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZC5zZXRTZWNvbmRzKDApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5ob3VyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZC5zZXRNaW51dGVzKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5kYXkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkLnNldEhvdXJzKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChzdGVwID49IHRpbWVVbml0U2l6ZS5kYXkgKiA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZC5zZXREYXRlKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz
dGVwID49IHRpbWVVbml0U2l6ZS5tb250aCAqIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkLnNldE1vbnRoKGZsb29ySW5CYXNlKGQuZ2V0TW9udGgoKSwgMykpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS5xdWFydGVyICog
MikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoZmxvb3JJbkJhc2Uo
ZC5nZXRNb250aCgpLCA2KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0
ZXAgPj0gdGltZVVuaXRTaXplLnllYXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
LnNldE1vbnRoKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY2FycnkgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYg
PSBOdW1iZXIuTmFOOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXY7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXYgPSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBkLmdldFRpbWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrcy5wdXNoKHYpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHVuaXQgPT0gIm1vbnRoIiB8fCB1bml0ID09ICJxdWFydGVyIikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlja1NpemUgPCAxKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgYml0IGNvbXBsaWNhdGVk
IC0gd2UnbGwgZGl2aWRlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbW9udGgvcXVhcnRlciB1cCBidXQgd2UgbmVlZCB0byB0YWtlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYXJlIG9mIGZyYWN0aW9ucyBzbyB3ZSBkb24ndCBlbmQg
dXAgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUg
b2YgYSBkYXkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXREYXRl
KDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZC5n
ZXRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1vbnRo
KGQuZ2V0TW9udGgoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVuaXQgPT0gInF1YXJ0ZXIiID8gMyA6IDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBlbmQgPSBkLmdldFRpbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQuc2V0VGltZSh2ICsgY2FycnkgKiB0aW1lVW5pdFNpemUuaG91ciArIChl
bmQgLSBzdGFydCkgKiB0aWNrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXJyeSA9IGQuZ2V0SG91cnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQuc2V0SG91cnMoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1vbnRoKGQu
Z2V0TW9udGgoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlj
a1NpemUgKiAodW5pdCA9PSAicXVhcnRlciIgPyAzIDogMSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1
bml0ID09ICJ5ZWFyIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldEZ1
bGxZZWFyKGQuZ2V0RnVsbFllYXIoKSArIHRpY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFRp
bWUodiArIHN0ZXApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gd2hpbGUgKHYgPCBheGlzLm1heCAmJiB2ICE9IHByZXYpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGlja3M7Ci0gICAgICAgICAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24gKHYs
IGF4aXMpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkYXRlR2VuZXJhdG9y
KHYsIGF4aXMub3B0aW9ucyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNo
ZWNrIGdsb2JhbCBmb3JtYXQKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMudGlt
ZWZvcm1hdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZv
cm1hdERhdGUoZCwgb3B0cy50aW1lZm9ybWF0LCBvcHRzLm1vbnRoTmFtZXMsIG9wdHMuZGF5TmFt
ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwb3NzaWJseSB1c2UgcXVhcnRlcnMgaWYgcXVhcnRlcnMgYXJlIG1lbnRpb25lZCBpbgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IG9mIHRoZXNlIHBsYWNlcwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdXNlUXVhcnRlcnMgPSAoYXhpcy5vcHRpb25zLnRpY2tTaXpl
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMub3B0aW9ucy50aWNrU2l6
ZVsxXSA9PSAicXVhcnRlciIpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF4aXMu
b3B0aW9ucy5taW5UaWNrU2l6ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
eGlzLm9wdGlvbnMubWluVGlja1NpemVbMV0gPT0gInF1YXJ0ZXIiKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHQgPSBheGlzLnRpY2tTaXplWzBdICogdGltZVVuaXRTaXplW2F4aXMu
dGlja1NpemVbMV1dOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBheGlzLm1h
eCAtIGF4aXMubWluOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IChvcHRz
LnR3ZWx2ZUhvdXJDbG9jaykgPyAiICVwIiA6ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGhvdXJDb2RlID0gKG9wdHMudHdlbHZlSG91ckNsb2NrKSA/ICIlSSIgOiAiJUgiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGZtdDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHQgPCB0aW1lVW5pdFNpemUubWludXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm10ID0gaG91ckNvZGUgKyAiOiVNOiVTIiArIHN1ZmZpeDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAodCA8IHRpbWVVbml0U2l6ZS5kYXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3BhbiA8IDIgKiB0aW1lVW5pdFNpemUuZGF5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGhvdXJDb2RlICsgIjolTSIgKyBzdWZmaXg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm10ID0gIiViICVkICIgKyBob3VyQ29kZSArICI6JU0iICsgc3VmZml4
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodCA8IHRpbWVVbml0U2l6ZS5tb250aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZtdCA9ICIlYiAlZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCh1c2VRdWFydGVycyAmJiB0IDwgdGltZVVuaXRTaXplLnF1YXJ0ZXIpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCF1c2VRdWFydGVycyAmJiB0IDwgdGltZVVuaXRTaXplLnll
YXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW4gPCB0aW1lVW5pdFNp
emUueWVhcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiJWIiOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZtdCA9ICIlYiAlWSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2VRdWFydGVycyAmJiB0IDwg
dGltZVVuaXRTaXplLnllYXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Bh
biA8IHRpbWVVbml0U2l6ZS55ZWFyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZtdCA9ICJRJXEiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJRJXEgJVkiOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gIiVZIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ0ID0gZm9ybWF0RGF0ZShkLCBm
bXQsIG9wdHMubW9udGhOYW1lcywgb3B0cy5kYXlOYW1lcyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBydDsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgJC5wbG90LnBs
dWdpbnMucHVzaCh7Ci0gICAgICAgIGluaXQ6IGluaXQsCi0gICAgICAgIG9wdGlvbnM6IG9wdGlv
bnMsCi0gICAgICAgIG5hbWU6ICd0aW1lJywKLSAgICAgICAgdmVyc2lvbjogJzEuMCcKLSAgICB9
KTsKLQotICAgIC8vIFRpbWUtYXhpcyBzdXBwb3J0IHVzZWQgdG8gYmUgaW4gRmxvdCBjb3JlLCB3
aGljaCBleHBvc2VkIHRoZQotICAgIC8vIGZvcm1hdERhdGUgZnVuY3Rpb24gb24gdGhlIHBsb3Qg
b2JqZWN0LiAgVmFyaW91cyBwbHVnaW5zIGRlcGVuZAotICAgIC8vIG9uIHRoZSBmdW5jdGlvbiwg
c28gd2UgbmVlZCB0byByZS1leHBvc2UgaXQgaGVyZS4KLQotICAgICQucGxvdC5mb3JtYXREYXRl
ID0gZm9ybWF0RGF0ZTsKLQotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9qcy9qcXVlcnkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZGQ4
ZWJkNmMxMjk1ZWFhYTc2Nzg4MjFkMjRmNmFmMGIxZjE4ZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9qcy9qcXVlcnkuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDcyICswLDAgQEAKLS8qIQotICog
alF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS44LjMKLSAqIGh0dHA6Ly9qcXVlcnkuY29tLwot
ICoKLSAqIEluY2x1ZGVzIFNpenpsZS5qcwotICogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqCi0g
KiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3Jz
Ci0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKLSAqIGh0dHA6Ly9qcXVlcnkub3Jn
L2xpY2Vuc2UKLSAqCi0gKiBEYXRlOiBUdWUgTm92IDEzIDIwMTIgMDg6MjA6MzMgR01ULTA1MDAg
KEVhc3Rlcm4gU3RhbmRhcmQgVGltZSkKLSAqLwotKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5l
ZCApIHsKLXZhcgotICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5
KGRvY3VtZW50KQotICAgIHJvb3RqUXVlcnksCi0KLSAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBv
biBET00gcmVhZHkKLSAgICByZWFkeUxpc3QsCi0KLSAgICAvLyBVc2UgdGhlIGNvcnJlY3QgZG9j
dW1lbnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpCi0gICAgZG9j
dW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24s
Ci0gICAgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvciwKLQotICAgIC8vIE1hcCBvdmVyIGpR
dWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAot
Ci0gICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLSAgICBfJCA9IHdp
bmRvdy4kLAotCi0gICAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwot
ICAgIGNvcmVfcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoLAotICAgIGNvcmVfc2xpY2UgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UsCi0gICAgY29yZV9pbmRleE9mID0gQXJyYXkucHJvdG90eXBl
LmluZGV4T2YsCi0gICAgY29yZV90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcs
Ci0gICAgY29yZV9oYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAotICAg
IGNvcmVfdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKLQotICAgIC8vIERlZmluZSBhIGxv
Y2FsIGNvcHkgb2YgalF1ZXJ5Ci0gICAgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250
ZXh0ICkgewotICAgICAgICAvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRo
ZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKLSAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnku
Zm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKTsKLSAgICB9LAotCi0gICAg
Ly8gVXNlZCBmb3IgbWF0Y2hpbmcgbnVtYmVycwotICAgIGNvcmVfcG51bSA9IC9bXC0rXT8oPzpc
ZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsCi0KLSAgICAvLyBVc2VkIGZvciBk
ZXRlY3RpbmcgYW5kIHRyaW1taW5nIHdoaXRlc3BhY2UKLSAgICBjb3JlX3Jub3R3aGl0ZSA9IC9c
Uy8sCi0gICAgY29yZV9yc3BhY2UgPSAvXHMrLywKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmlt
IEJPTSBhbmQgTkJTUCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91LCBTYWZhcmkgNS4wIGFuZCBJRSkK
LSAgICBydHJpbSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKLQotICAg
IC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCi0gICAgLy8gUHJpb3Jp
dGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIx
KQotICAgIHJxdWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1d
KikkKS8sCi0KLSAgICAvLyBNYXRjaCBhIHN0YW5kYWxvbmUgdGFnCi0gICAgcnNpbmdsZVRhZyA9
IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sCi0KLSAgICAvLyBKU09OIFJlZ0V4cAotICAg
IHJ2YWxpZGNoYXJzID0gL15bXF0sOnt9XHNdKiQvLAotICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpe
fDp8LCkoPzpccypcWykrL2csCi0gICAgcnZhbGlkZXNjYXBlID0gL1xcKD86WyJcXFwvYmZucnRd
fHVbXGRhLWZBLUZdezR9KS9nLAotICAgIHJ2YWxpZHRva2VucyA9IC8iW14iXFxcclxuXSoifHRy
dWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLAotCi0g
ICAgLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nCi0gICAgcm1zUHJlZml4
ID0gL14tbXMtLywKLSAgICByZGFzaEFscGhhID0gLy0oW1xkYS16XSkvZ2ksCi0KLSAgICAvLyBV
c2VkIGJ5IGpRdWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpCi0gICAgZmNh
bWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHsKLSAgICAgICAgcmV0dXJuICggbGV0
dGVyICsgIiIgKS50b1VwcGVyQ2FzZSgpOwotICAgIH0sCi0KLSAgICAvLyBUaGUgcmVhZHkgZXZl
bnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZAotICAgIERPTUNvbnRlbnRMb2FkZWQg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkg
ewotICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRM
b2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwotICAgICAgICAgICAgalF1ZXJ5LnJl
YWR5KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21w
bGV0ZSIgKSB7Ci0gICAgICAgICAgICAvLyB3ZSdyZSBoZXJlIGJlY2F1c2UgcmVhZHlTdGF0ZSA9
PT0gImNvbXBsZXRlIiBpbiBvbGRJRQotICAgICAgICAgICAgLy8gd2hpY2ggaXMgZ29vZCBlbm91
Z2ggZm9yIHVzIHRvIGNhbGwgdGhlIGRvbSByZWFkeSEKLSAgICAgICAgICAgIGRvY3VtZW50LmRl
dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwotICAg
ICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW1tD
bGFzc11dIC0+IHR5cGUgcGFpcnMKLSAgICBjbGFzczJ0eXBlID0ge307Ci0KLWpRdWVyeS5mbiA9
IGpRdWVyeS5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IGpRdWVyeSwKLSAgICBpbml0
OiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKSB7Ci0gICAgICAgIHZh
ciBtYXRjaCwgZWxlbSwgcmV0LCBkb2M7Ci0KLSAgICAgICAgLy8gSGFuZGxlICQoIiIpLCAkKG51
bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpCi0gICAgICAgIGlmICggIXNlbGVjdG9yICkgewot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUg
JChET01FbGVtZW50KQotICAgICAgICBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewotICAgICAg
ICAgICAgdGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yOwotICAgICAgICAgICAgdGhp
cy5sZW5ndGggPSAxOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCi0gICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9y
ID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIGlmICggc2VsZWN0b3IuY2hhckF0KDApID09
PSAiPCIgJiYgc2VsZWN0b3IuY2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+IiAm
JiBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKLSAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhh
dCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRo
ZSByZWdleCBjaGVjawotICAgICAgICAgICAgICAgIG1hdGNoID0gWyBudWxsLCBzZWxlY3Rvciwg
bnVsbCBdOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1hdGNoID0g
cnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3Ig
I2lkCi0gICAgICAgICAgICBpZiAoIG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29udGV4dCkgKSB7
Ci0KLSAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKLSAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoWzFdICkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0OwotICAg
ICAgICAgICAgICAgICAgICBkb2MgPSAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNv
bnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0Ci0gICAgICAgICAg
ICAgICAgICAgIHNlbGVjdG9yID0galF1ZXJ5LnBhcnNlSFRNTCggbWF0Y2hbMV0sIGRvYywgdHJ1
ZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbMV0g
KSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5hdHRyLmNhbGwoIHNlbGVjdG9yLCBjb250ZXh0LCB0cnVlICk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1l
cmdlKCB0aGlzLCBzZWxlY3RvciApOwotCi0gICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCNp
ZCkKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbGVtID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVy
bnMKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRo
ZSBkb2N1bWVudCAjNjk2MwotICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5w
YXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLmlkICE9PSBtYXRjaFsyXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcm9vdGpRdWVyeS5maW5kKCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUg
ZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBd
ID0gZWxlbTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dCA9IGRvY3VtZW50OwotICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9y
ID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAoIGNvbnRleHQgfHwgcm9vdGpRdWVyeSApLmZpbmQoIHNlbGVjdG9y
ICk7Ci0KLSAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQotICAgICAgICAg
ICAgLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIp
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0
cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCi0gICAgICAgIC8vIFNob3J0Y3V0IGZvciBkb2N1
bWVudCByZWFkeQotICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0
b3IgKSApIHsKLSAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZp
bmVkICkgewotICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOwot
ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOwotICAg
IH0sCi0KLSAgICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCi0gICAgc2VsZWN0b3I6
ICIiLAotCi0gICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAot
ICAgIGpxdWVyeTogIjEuOC4zIiwKLQotICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpR
dWVyeSBvYmplY3QgaXMgMAotICAgIGxlbmd0aDogMCwKLQotICAgIC8vIFRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0gICAgc2l6ZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsKLSAgICB9LAotCi0gICAg
dG9BcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBjb3JlX3NsaWNlLmNhbGwoIHRo
aXMgKTsKLSAgICB9LAotCi0gICAgLy8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hl
ZCBlbGVtZW50IHNldCBPUgotICAgIC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNl
dCBhcyBhIGNsZWFuIGFycmF5Ci0gICAgZ2V0OiBmdW5jdGlvbiggbnVtICkgewotICAgICAgICBy
ZXR1cm4gbnVtID09IG51bGwgPwotCi0gICAgICAgICAgICAvLyBSZXR1cm4gYSAnY2xlYW4nIGFy
cmF5Ci0gICAgICAgICAgICB0aGlzLnRvQXJyYXkoKSA6Ci0KLSAgICAgICAgICAgIC8vIFJldHVy
biBqdXN0IHRoZSBvYmplY3QKLSAgICAgICAgICAgICggbnVtIDwgMCA/IHRoaXNbIHRoaXMubGVu
Z3RoICsgbnVtIF0gOiB0aGlzWyBudW0gXSApOwotICAgIH0sCi0KLSAgICAvLyBUYWtlIGFuIGFy
cmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCi0gICAgLy8gKHJldHVy
bmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCi0gICAgcHVzaFN0YWNrOiBmdW5jdGlv
biggZWxlbXMsIG5hbWUsIHNlbGVjdG9yICkgewotCi0gICAgICAgIC8vIEJ1aWxkIGEgbmV3IGpR
dWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0gICAgICAgIHZhciByZXQgPSBqUXVlcnkubWVyZ2Uo
IHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTsKLQotICAgICAgICAvLyBBZGQgdGhlIG9sZCBv
YmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQotICAgICAgICByZXQucHJldk9i
amVjdCA9IHRoaXM7Ci0KLSAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7Ci0KLSAg
ICAgICAgaWYgKCBuYW1lID09PSAiZmluZCIgKSB7Ci0gICAgICAgICAgICByZXQuc2VsZWN0b3Ig
PSB0aGlzLnNlbGVjdG9yICsgKCB0aGlzLnNlbGVjdG9yID8gIiAiIDogIiIgKSArIHNlbGVjdG9y
OwotICAgICAgICB9IGVsc2UgaWYgKCBuYW1lICkgewotICAgICAgICAgICAgcmV0LnNlbGVjdG9y
ID0gdGhpcy5zZWxlY3RvciArICIuIiArIG5hbWUgKyAiKCIgKyBzZWxlY3RvciArICIpIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0
Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8vIEV4ZWN1dGUgYSBjYWxsYmFj
ayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCi0gICAgLy8gKFlvdSBjYW4g
c2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKLSAg
ICAvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pCi0gICAgZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNr
LCBhcmdzICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBh
cmdzICk7Ci0gICAgfSwKLQotICAgIHJlYWR5OiBmdW5jdGlvbiggZm4gKSB7Ci0gICAgICAgIC8v
IEFkZCB0aGUgY2FsbGJhY2sKLSAgICAgICAgalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBm
biApOwotCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBlcTogZnVuY3Rpb24o
IGkgKSB7Ci0gICAgICAgIGkgPSAraTsKLSAgICAgICAgcmV0dXJuIGkgPT09IC0xID8KLSAgICAg
ICAgICAgIHRoaXMuc2xpY2UoIGkgKSA6Ci0gICAgICAgICAgICB0aGlzLnNsaWNlKCBpLCBpICsg
MSApOwotICAgIH0sCi0KLSAgICBmaXJzdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmVxKCAwICk7Ci0gICAgfSwKLQotICAgIGxhc3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5lcSggLTEgKTsKLSAgICB9LAotCi0gICAgc2xpY2U6IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGNvcmVfc2xpY2UuYXBwbHkoIHRoaXMsIGFy
Z3VtZW50cyApLAotICAgICAgICAgICAgInNsaWNlIiwgY29yZV9zbGljZS5jYWxsKGFyZ3VtZW50
cykuam9pbigiLCIpICk7Ci0gICAgfSwKLQotICAgIG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkg
ewotICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rp
b24oIGVsZW0sIGkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwg
aSwgZWxlbSApOwotICAgICAgICB9KSk7Ci0gICAgfSwKLQotICAgIGVuZDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxs
KTsKLSAgICB9LAotCi0gICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICAgIC8vIEJlaGF2
ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotICAg
IHB1c2g6IGNvcmVfcHVzaCwKLSAgICBzb3J0OiBbXS5zb3J0LAotICAgIHNwbGljZTogW10uc3Bs
aWNlCi19OwotCi0vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBl
IGZvciBsYXRlciBpbnN0YW50aWF0aW9uCi1qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVl
cnkuZm47Ci0KLWpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAot
ICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sCi0gICAgICAgIGkgPSAxLAotICAg
ICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAotICAgICAgICBkZWVwID0gZmFsc2U7Ci0K
LSAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCi0gICAgaWYgKCB0eXBlb2YgdGFy
Z2V0ID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgICAgIGRlZXAgPSB0YXJnZXQ7Ci0gICAgICAgIHRh
cmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKLSAgICAgICAgLy8gc2tpcCB0aGUgYm9vbGVhbiBh
bmQgdGhlIHRhcmdldAotICAgICAgICBpID0gMjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgY2Fz
ZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAg
Y29weSkKLSAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNG
dW5jdGlvbih0YXJnZXQpICkgewotICAgICAgICB0YXJnZXQgPSB7fTsKLSAgICB9Ci0KLSAgICAv
LyBleHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKLSAg
ICBpZiAoIGxlbmd0aCA9PT0gaSApIHsKLSAgICAgICAgdGFyZ2V0ID0gdGhpczsKLSAgICAgICAg
LS1pOwotICAgIH0KLQotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAv
LyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCi0gICAgICAgIGlmICgg
KG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIC8vIEV4
dGVuZCB0aGUgYmFzZSBvYmplY3QKLSAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyAp
IHsKLSAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbIG5hbWUgXTsKLSAgICAgICAgICAgICAg
ICBjb3B5ID0gb3B0aW9uc1sgbmFtZSBdOwotCi0gICAgICAgICAgICAgICAgLy8gUHJldmVudCBu
ZXZlci1lbmRpbmcgbG9vcAotICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkg
ewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBv
ciBhcnJheXMKLSAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5p
c1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkp
KSApICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGNvcHlJc0FycmF5ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTsKLQot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xv
bmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9OwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmln
aW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFt
ZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKLQotICAgICAgICAgICAg
ICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRh
cmdldFsgbmFtZSBdID0gY29weTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAotICAg
IHJldHVybiB0YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICBub0NvbmZsaWN0OiBm
dW5jdGlvbiggZGVlcCApIHsKLSAgICAgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgewot
ICAgICAgICAgICAgd2luZG93LiQgPSBfJDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZGVl
cCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7Ci0gICAgICAgICAgICB3aW5kb3cualF1
ZXJ5ID0gX2pRdWVyeTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBqUXVlcnk7Ci0gICAg
fSwKLQotICAgIC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25j
ZSBpdCBvY2N1cnMuCi0gICAgaXNSZWFkeTogZmFsc2UsCi0KLSAgICAvLyBBIGNvdW50ZXIgdG8g
dHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlCi0gICAgLy8gdGhlIHJlYWR5
IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEKLSAgICByZWFkeVdhaXQ6IDEsCi0KLSAgICAvLyBIb2xk
IChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKLSAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBo
b2xkICkgewotICAgICAgICBpZiAoIGhvbGQgKSB7Ci0gICAgICAgICAgICBqUXVlcnkucmVhZHlX
YWl0Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBqUXVlcnkucmVhZHkoIHRydWUg
KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJl
YWR5Ci0gICAgcmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkgewotCi0gICAgICAgIC8vIEFib3J0IGlm
IHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKLSAgICAgICAg
aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkg
KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIHN1
cmUgYm9keSBleGlzdHMsIGF0IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUgb3Zlcnpl
YWxvdXMgKHRpY2tldCAjNTQ0MykuCi0gICAgICAgIGlmICggIWRvY3VtZW50LmJvZHkgKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKLSAgICAgICAg
alF1ZXJ5LmlzUmVhZHkgPSB0cnVlOwotCi0gICAgICAgIC8vIElmIGEgbm9ybWFsIERPTSBSZWFk
eSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCi0gICAgICAgIGlm
ICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9u
cyBib3VuZCwgdG8gZXhlY3V0ZQotICAgICAgICByZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3Vt
ZW50LCBbIGpRdWVyeSBdICk7Ci0KLSAgICAgICAgLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkg
ZXZlbnRzCi0gICAgICAgIGlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7Ci0gICAgICAgICAgICBq
UXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iik7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNv
bmNlcm5pbmcgaXNGdW5jdGlvbi4KLSAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9NIG1ldGhv
ZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0Ci0gICAgLy8gYXJlbid0IHN1cHBvcnRlZC4gVGhl
eSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4KLSAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbigg
b2JqICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImZ1bmN0aW9uIjsK
LSAgICB9LAotCi0gICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkg
ewotICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5IjsKLSAgICB9LAot
Ci0gICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgIHJldHVybiBvYmogIT0g
bnVsbCAmJiBvYmogPT0gb2JqLndpbmRvdzsKLSAgICB9LAotCi0gICAgaXNOdW1lcmljOiBmdW5j
dGlvbiggb2JqICkgewotICAgICAgICByZXR1cm4gIWlzTmFOKCBwYXJzZUZsb2F0KG9iaikgKSAm
JiBpc0Zpbml0ZSggb2JqICk7Ci0gICAgfSwKLQotICAgIHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7
Ci0gICAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/Ci0gICAgICAgICAgICBTdHJpbmcoIG9iaiAp
IDoKLSAgICAgICAgICAgIGNsYXNzMnR5cGVbIGNvcmVfdG9TdHJpbmcuY2FsbChvYmopIF0gfHwg
Im9iamVjdCI7Ci0gICAgfSwKLQotICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7
Ci0gICAgICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgotICAgICAgICAvLyBCZWNhdXNlIG9mIElF
LCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBw
cm9wZXJ0eS4KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cg
b2JqZWN0cyBkb24ndCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKLSAgICAgICAgaWYgKCAhb2JqIHx8
IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnku
aXNXaW5kb3coIG9iaiApICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJv
cGVydHkgbXVzdCBiZSBPYmplY3QKLSAgICAgICAgICAgIGlmICggb2JqLmNvbnN0cnVjdG9yICYm
Ci0gICAgICAgICAgICAgICAgIWNvcmVfaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAm
JgotICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90
b3R5cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoICggZSApIHsKLSAgICAgICAgICAgIC8v
IElFOCw5IFdpbGwgdGhyb3cgZXhjZXB0aW9ucyBvbiBjZXJ0YWluIGhvc3Qgb2JqZWN0cyAjOTg5
NwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3du
IHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCi0gICAg
ICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLgot
Ci0gICAgICAgIHZhciBrZXk7Ci0gICAgICAgIGZvciAoIGtleSBpbiBvYmogKSB7fQotCi0gICAg
ICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5jYWxsKCBvYmosIGtl
eSApOwotICAgIH0sCi0KLSAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewotICAg
ICAgICB2YXIgbmFtZTsKLSAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
LQotICAgIGVycm9yOiBmdW5jdGlvbiggbXNnICkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IG1zZyApOwotICAgIH0sCi0KLSAgICAvLyBkYXRhOiBzdHJpbmcgb2YgaHRtbAotICAgIC8vIGNv
bnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVh
dGVkIGluIHRoaXMgY29udGV4dCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQKLSAgICAvLyBzY3JpcHRz
IChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUg
aHRtbCBzdHJpbmcKLSAgICBwYXJzZUhUTUw6IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBzY3Jp
cHRzICkgewotICAgICAgICB2YXIgcGFyc2VkOwotICAgICAgICBpZiAoICFkYXRhIHx8IHR5cGVv
ZiBkYXRhICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJib29sZWFuIiApIHsKLSAgICAg
ICAgICAgIHNjcmlwdHMgPSBjb250ZXh0OwotICAgICAgICAgICAgY29udGV4dCA9IDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0KLSAgICAgICAg
Ly8gU2luZ2xlIHRhZwotICAgICAgICBpZiAoIChwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRh
dGEgKSkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBh
cnNlZFsxXSApIF07Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJzZWQgPSBqUXVlcnkuYnVpbGRG
cmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgPyBudWxsIDogW10gKTsKLSAgICAg
ICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sCi0gICAgICAgICAgICAocGFyc2VkLmNhY2hlYWJs
ZSA/IGpRdWVyeS5jbG9uZSggcGFyc2VkLmZyYWdtZW50ICkgOiBwYXJzZWQuZnJhZ21lbnQpLmNo
aWxkTm9kZXMgKTsKLSAgICB9LAotCi0gICAgcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHsK
LSAgICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIpIHsKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIGxl
YWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZW1vdmVkIChJRSBjYW4ndCBoYW5kbGUgaXQp
Ci0gICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwotCi0gICAgICAgIC8vIEF0dGVt
cHQgdG8gcGFyc2UgdXNpbmcgdGhlIG5hdGl2ZSBKU09OIHBhcnNlciBmaXJzdAotICAgICAgICBp
ZiAoIHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgewotICAgICAgICAgICAgcmV0
dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlIGluY29taW5nIGRhdGEgaXMgYWN0dWFsIEpTT04KLSAgICAgICAgLy8gTG9n
aWMgYm9ycm93ZWQgZnJvbSBodHRwOi8vanNvbi5vcmcvanNvbjIuanMKLSAgICAgICAgaWYgKCBy
dmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKLSAgICAg
ICAgICAgIC5yZXBsYWNlKCBydmFsaWR0b2tlbnMsICJdIiApCi0gICAgICAgICAgICAucmVwbGFj
ZSggcnZhbGlkYnJhY2VzLCAiIikpICkgewotCi0gICAgICAgICAgICByZXR1cm4gKCBuZXcgRnVu
Y3Rpb24oICJyZXR1cm4gIiArIGRhdGEgKSApKCk7Ci0KLSAgICAgICAgfQotICAgICAgICBqUXVl
cnkuZXJyb3IoICJJbnZhbGlkIEpTT046ICIgKyBkYXRhICk7Ci0gICAgfSwKLQotICAgIC8vIENy
b3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKLSAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRhdGEgKSB7
Ci0gICAgICAgIHZhciB4bWwsIHRtcDsKLSAgICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0
YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBT
dGFuZGFyZAotICAgICAgICAgICAgICAgIHRtcCA9IG5ldyBET01QYXJzZXIoKTsKLSAgICAgICAg
ICAgICAgICB4bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOwot
ICAgICAgICAgICAgfSBlbHNlIHsgLy8gSUUKLSAgICAgICAgICAgICAgICB4bWwgPSBuZXcgQWN0
aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7Ci0gICAgICAgICAgICAgICAgeG1sLmFz
eW5jID0gImZhbHNlIjsKLSAgICAgICAgICAgICAgICB4bWwubG9hZFhNTCggZGF0YSApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgeG1sID0gdW5k
ZWZpbmVkOwotICAgICAgICB9Ci0gICAgICAgIGlmICggIXhtbCB8fCAheG1sLmRvY3VtZW50RWxl
bWVudCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGgg
KSB7Ci0gICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4geG1sOwotICAgIH0sCi0KLSAgICBub29wOiBmdW5j
dGlvbigpIHt9LAotCi0gICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRl
eHQKLSAgICAvLyBXb3JrYXJvdW5kcyBiYXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2NvbGwK
LSAgICAvLyBodHRwOi8vd2VibG9ncy5qYXZhLm5ldC9ibG9nL2RyaXNjb2xsL2FyY2hpdmUvMjAw
OS8wOS8wOC9ldmFsLWphdmFzY3JpcHQtZ2xvYmFsLWNvbnRleHQKLSAgICBnbG9iYWxFdmFsOiBm
dW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgaWYgKCBkYXRhICYmIGNvcmVfcm5vdHdoaXRlLnRl
c3QoIGRhdGEgKSApIHsKLSAgICAgICAgICAgIC8vIFdlIHVzZSBleGVjU2NyaXB0IG9uIEludGVy
bmV0IEV4cGxvcmVyCi0gICAgICAgICAgICAvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1bmN0aW9u
IHNvIHRoYXQgY29udGV4dCBpcyB3aW5kb3cKLSAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGpR
dWVyeSBpbiBGaXJlZm94Ci0gICAgICAgICAgICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0
aW9uKCBkYXRhICkgewotICAgICAgICAgICAgICAgIHdpbmRvd1sgImV2YWwiIF0uY2FsbCggd2lu
ZG93LCBkYXRhICk7Ci0gICAgICAgICAgICB9ICkoIGRhdGEgKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICAvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBh
bmQgZGF0YSBtb2R1bGVzCi0gICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZl
bmRvciBwcmVmaXggKCM5NTcyKQotICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsK
LSAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFj
ZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOwotICAgIH0sCi0KLSAgICBub2RlTmFtZTogZnVu
Y3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIH0s
Ci0KLSAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5Ci0gICAgZWFjaDogZnVu
Y3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgICAgIHZhciBuYW1lLAotICAgICAg
ICAgICAgaSA9IDAsCi0gICAgICAgICAgICBsZW5ndGggPSBvYmoubGVuZ3RoLAotICAgICAgICAg
ICAgaXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2Jq
ICk7Ci0KLSAgICAgICAgaWYgKCBhcmdzICkgewotICAgICAgICAgICAgaWYgKCBpc09iaiApIHsK
LSAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2JqWyBuYW1lIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICggOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFj
ay5hcHBseSggb2JqWyBpKysgXSwgYXJncyApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgIC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3Ig
dGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIGlzT2JqICkgewotICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgbmFtZSBdLCBuYW1l
LCBvYmpbIG5hbWUgXSApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkr
KyBdICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gb2JqOwotICAgIH0sCi0KLSAgICAvLyBVc2UgbmF0aXZl
IFN0cmluZy50cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCi0gICAgdHJpbTogY29yZV90
cmltICYmICFjb3JlX3RyaW0uY2FsbCgiXHVGRUZGXHhBMCIpID8KLSAgICAgICAgZnVuY3Rpb24o
IHRleHQgKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8KLSAgICAgICAgICAg
ICAgICAiIiA6Ci0gICAgICAgICAgICAgICAgY29yZV90cmltLmNhbGwoIHRleHQgKTsKLSAgICAg
ICAgfSA6Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBvdXIgb3duIHRyaW1taW5nIGZ1bmN0
aW9uYWxpdHkKLSAgICAgICAgZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAgICByZXR1cm4g
dGV4dCA9PSBudWxsID8KLSAgICAgICAgICAgICAgICAiIiA6Ci0gICAgICAgICAgICAgICAgKCB0
ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKLSAgICAgICAgfSwKLQotICAgIC8vIHJl
c3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAgICBtYWtlQXJyYXk6IGZ1bmN0aW9u
KCBhcnIsIHJlc3VsdHMgKSB7Ci0gICAgICAgIHZhciB0eXBlLAotICAgICAgICAgICAgcmV0ID0g
cmVzdWx0cyB8fCBbXTsKLQotICAgICAgICBpZiAoIGFyciAhPSBudWxsICkgewotICAgICAgICAg
ICAgLy8gVGhlIHdpbmRvdywgc3RyaW5ncyAoYW5kIGZ1bmN0aW9ucykgYWxzbyBoYXZlICdsZW5n
dGgnCi0gICAgICAgICAgICAvLyBUd2Vha2VkIGxvZ2ljIHNsaWdodGx5IHRvIGhhbmRsZSBCbGFj
a2JlcnJ5IDQuNyBSZWdFeHAgaXNzdWVzICM2OTMwCi0gICAgICAgICAgICB0eXBlID0galF1ZXJ5
LnR5cGUoIGFyciApOwotCi0gICAgICAgICAgICBpZiAoIGFyci5sZW5ndGggPT0gbnVsbCB8fCB0
eXBlID09PSAic3RyaW5nIiB8fCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IHR5cGUgPT09ICJyZWdl
eHAiIHx8IGpRdWVyeS5pc1dpbmRvdyggYXJyICkgKSB7Ci0gICAgICAgICAgICAgICAgY29yZV9w
dXNoLmNhbGwoIHJldCwgYXJyICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGpRdWVyeS5tZXJnZSggcmV0LCBhcnIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBl
bGVtLCBhcnIsIGkgKSB7Ci0gICAgICAgIHZhciBsZW47Ci0KLSAgICAgICAgaWYgKCBhcnIgKSB7
Ci0gICAgICAgICAgICBpZiAoIGNvcmVfaW5kZXhPZiApIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29yZV9pbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBsZW4gPSBhcnIubGVuZ3RoOwotICAgICAgICAgICAgaSA9IGkgPyBpIDwgMCA/
IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBpIDogMDsKLQotICAgICAgICAgICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2tpcCBhY2Nlc3NpbmcgaW4gc3Bh
cnNlIGFycmF5cwotICAgICAgICAgICAgICAgIGlmICggaSBpbiBhcnIgJiYgYXJyWyBpIF0gPT09
IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAtMTsKLSAgICB9
LAotCi0gICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewotICAgICAgICB2YXIg
bCA9IHNlY29uZC5sZW5ndGgsCi0gICAgICAgICAgICBpID0gZmlyc3QubGVuZ3RoLAotICAgICAg
ICAgICAgaiA9IDA7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgbCA9PT0gIm51bWJlciIgKSB7Ci0g
ICAgICAgICAgICBmb3IgKCA7IGogPCBsOyBqKysgKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3Rb
IGkrKyBdID0gc2Vjb25kWyBqIF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAg
ICAgICAgICAgZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7Ci0KLSAgICAgICAgcmV0dXJuIGZp
cnN0OwotICAgIH0sCi0KLSAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnYg
KSB7Ci0gICAgICAgIHZhciByZXRWYWwsCi0gICAgICAgICAgICByZXQgPSBbXSwKLSAgICAgICAg
ICAgIGkgPSAwLAotICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwotICAgICAgICBp
bnYgPSAhIWludjsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZp
bmcgdGhlIGl0ZW1zCi0gICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9u
Ci0gICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgcmV0VmFs
ID0gISFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOwotICAgICAgICAgICAgaWYgKCBpbnYgIT09
IHJldFZhbCApIHsKLSAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbXNbIGkgXSApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0g
ICAgLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5Ci0gICAgbWFwOiBmdW5jdGlvbigg
ZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7Ci0gICAgICAgIHZhciB2YWx1ZSwga2V5LAotICAgICAg
ICAgICAgcmV0ID0gW10sCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIGxlbmd0aCA9
IGVsZW1zLmxlbmd0aCwKLSAgICAgICAgICAgIC8vIGpxdWVyeSBvYmplY3RzIGFyZSB0cmVhdGVk
IGFzIGFycmF5cwotICAgICAgICAgICAgaXNBcnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5
IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYm
ICggKCBsZW5ndGggPiAwICYmIGVsZW1zWyAwIF0gJiYgZWxlbXNbIGxlbmd0aCAtMSBdICkgfHwg
bGVuZ3RoID09PSAwIHx8IGpRdWVyeS5pc0FycmF5KCBlbGVtcyApICkgOwotCi0gICAgICAgIC8v
IEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0
aGVpcgotICAgICAgICBpZiAoIGlzQXJyYXkgKSB7Ci0gICAgICAgICAgICBmb3IgKCA7IGkgPCBs
ZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sg
aSBdLCBpLCBhcmcgKTsKLQotICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLy8gR28gdGhyb3VnaCBldmVyeSBr
ZXkgb24gdGhlIG9iamVjdCwKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoIGtl
eSBpbiBlbGVtcyApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sg
a2V5IF0sIGtleSwgYXJnICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmxh
dHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICByZXR1cm4gcmV0LmNvbmNhdC5hcHBseSgg
W10sIHJldCApOwotICAgIH0sCi0KLSAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9i
amVjdHMKLSAgICBndWlkOiAxLAotCi0gICAgLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4
dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55Ci0gICAgLy8gYXJndW1lbnRzLgot
ICAgIHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7Ci0gICAgICAgIHZhciB0bXAsIGFy
Z3MsIHByb3h5OwotCi0gICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkg
ewotICAgICAgICAgICAgdG1wID0gZm5bIGNvbnRleHQgXTsKLSAgICAgICAgICAgIGNvbnRleHQg
PSBmbjsKLSAgICAgICAgICAgIGZuID0gdG1wOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUXVp
Y2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMK
LSAgICAgICAgLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0
dXJuIHVuZGVmaW5lZC4KLSAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
U2ltdWxhdGVkIGJpbmQKLSAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRz
LCAyICk7Ci0gICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4g
Zm4uYXBwbHkoIGNvbnRleHQsIGFyZ3MuY29uY2F0KCBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50
cyApICkgKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVl
IGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJl
bW92ZWQKLSAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5n
dWlkKys7Ci0KLSAgICAgICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICAvLyBNdWx0aWZ1
bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KLSAg
ICAvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVu
Y3Rpb24KLSAgICBhY2Nlc3M6IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWlu
YWJsZSwgZW1wdHlHZXQsIHBhc3MgKSB7Ci0gICAgICAgIHZhciBleGVjLAotICAgICAgICAgICAg
YnVsayA9IGtleSA9PSBudWxsLAotICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICBsZW5n
dGggPSBlbGVtcy5sZW5ndGg7Ci0KLSAgICAgICAgLy8gU2V0cyBtYW55IHZhbHVlcwotICAgICAg
ICBpZiAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgIGZv
ciAoIGkgaW4ga2V5ICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBm
biwgaSwga2V5W2ldLCAxLCBlbXB0eUdldCwgdmFsdWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNoYWluYWJsZSA9IDE7Ci0KLSAgICAgICAgLy8gU2V0cyBvbmUgdmFsdWUKLSAgICAg
ICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIC8vIE9w
dGlvbmFsbHksIGZ1bmN0aW9uIHZhbHVlcyBnZXQgZXhlY3V0ZWQgaWYgZXhlYyBpcyB0cnVlCi0g
ICAgICAgICAgICBleGVjID0gcGFzcyA9PT0gdW5kZWZpbmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9u
KCB2YWx1ZSApOwotCi0gICAgICAgICAgICBpZiAoIGJ1bGsgKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQnVsayBvcGVyYXRpb25zIG9ubHkgaXRlcmF0ZSB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2
YWx1ZXMKLSAgICAgICAgICAgICAgICBpZiAoIGV4ZWMgKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGV4ZWMgPSBmbjsKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZWxlbSwga2V5
LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjLmNhbGwoIGpR
dWVyeSggZWxlbSApLCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKCBlbGVt
cywgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBudWxsOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBmbiApIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICBm
biggZWxlbXNbaV0sIGtleSwgZXhlYyA/IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxl
bXNbaV0sIGtleSApICkgOiB2YWx1ZSwgcGFzcyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY2hhaW5hYmxlID0gMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBjaGFpbmFibGUgPwotICAgICAgICAgICAgZWxlbXMgOgotCi0gICAgICAgICAg
ICAvLyBHZXRzCi0gICAgICAgICAgICBidWxrID8KLSAgICAgICAgICAgICAgICBmbi5jYWxsKCBl
bGVtcyApIDoKLSAgICAgICAgICAgICAgICBsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDog
ZW1wdHlHZXQ7Ci0gICAgfSwKLQotICAgIG5vdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCk7Ci0gICAgfQotfSk7Ci0KLWpRdWVyeS5yZWFkeS5w
cm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHsKLSAgICBpZiAoICFyZWFkeUxpc3QgKSB7Ci0KLSAg
ICAgICAgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7Ci0KLSAgICAgICAgLy8gQ2F0Y2gg
Y2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGJyb3dz
ZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuCi0gICAgICAgIC8vIHdlIG9uY2UgdHJpZWQg
dG8gdXNlIHJlYWR5U3RhdGUgImludGVyYWN0aXZlIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlzc3Vl
cyBsaWtlIHRoZSBvbmUKLSAgICAgICAgLy8gZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0
cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIyODIjY29tbWVudDoxNQotICAgICAgICBpZiAo
IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7Ci0gICAgICAgICAgICAvLyBI
YW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkg
dG8gZGVsYXkgcmVhZHkKLSAgICAgICAgICAgIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSAp
OwotCi0gICAgICAgIC8vIFN0YW5kYXJkcy1iYXNlZCBicm93c2VycyBzdXBwb3J0IERPTUNvbnRl
bnRMb2FkZWQKLSAgICAgICAgfSBlbHNlIGlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAp
IHsKLSAgICAgICAgICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKLSAgICAgICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29u
dGVudExvYWRlZCwgZmFsc2UgKTsKLQotICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5k
b3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAgICAgICAgICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCAibG9hZCIsIGpRdWVyeS5yZWFkeSwgZmFsc2UgKTsKLQotICAgICAgICAv
LyBJZiBJRSBldmVudCBtb2RlbCBpcyB1c2VkCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxz
byBmb3IgaWZyYW1lcwotICAgICAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5
c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7Ci0KLSAgICAgICAgICAgIC8vIEEgZmFs
bGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCi0gICAgICAgICAg
ICB3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxvYWQiLCBqUXVlcnkucmVhZHkgKTsKLQotICAgICAg
ICAgICAgLy8gSWYgSUUgYW5kIG5vdCBhIGZyYW1lCi0gICAgICAgICAgICAvLyBjb250aW51YWxs
eSBjaGVjayB0byBzZWUgaWYgdGhlIGRvY3VtZW50IGlzIHJlYWR5Ci0gICAgICAgICAgICB2YXIg
dG9wID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdG9wID0g
d2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
LSAgICAgICAgICAgIH0gY2F0Y2goZSkge30KLQotICAgICAgICAgICAgaWYgKCB0b3AgJiYgdG9w
LmRvU2Nyb2xsICkgewotICAgICAgICAgICAgICAgIChmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuaXNSZWFkeSApIHsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9wLmRvU2Nyb2xsKCJsZWZ0Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2V0VGltZW91dCggZG9TY3JvbGxDaGVjaywgNTAgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRp
bmcgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsK
LX07Ci0KLS8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAotalF1ZXJ5LmVhY2goIkJvb2xl
YW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0
KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKLSAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAiICsg
bmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotfSk7Ci0KLS8vIEFsbCBqUXVlcnkg
b2JqZWN0cyBzaG91bGQgcG9pbnQgYmFjayB0byB0aGVzZQotcm9vdGpRdWVyeSA9IGpRdWVyeShk
b2N1bWVudCk7Ci0vLyBTdHJpbmcgdG8gT2JqZWN0IG9wdGlvbnMgZm9ybWF0IGNhY2hlCi12YXIg
b3B0aW9uc0NhY2hlID0ge307Ci0KLS8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25z
IGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzIGFuZCBzdG9yZSBpbiBjYWNoZQotZnVuY3Rpb24g
Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKLSAgICB2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hl
WyBvcHRpb25zIF0gPSB7fTsKLSAgICBqUXVlcnkuZWFjaCggb3B0aW9ucy5zcGxpdCggY29yZV9y
c3BhY2UgKSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7Ci0gICAgICAgIG9iamVjdFsgZmxhZyBdID0g
dHJ1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi0vKgotICogQ3JlYXRlIGEg
Y2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gKgotICogICAg
b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0
IHdpbGwgY2hhbmdlIGhvdwotICogICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVz
IG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0Ci0gKgotICogQnkgZGVmYXVsdCBh
IGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBj
YW4gYmUKLSAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCi0gKgotICogUG9zc2libGUgb3B0aW9u
czoKLSAqCi0gKiAgICBvbmNlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBs
aXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKLSAqCi0gKiAgICBt
ZW1vcnk6ICAgICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQg
d2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICAgIGFmdGVy
IHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1v
cml6ZWQiCi0gKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCi0g
KgotICogICAgdW5pcXVlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9u
bHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQotICoKLSAqICAgIHN0
b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMg
ZmFsc2UKLSAqCi0gKi8KLWpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsK
LQotICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0
LWZvcm1hdHRlZCBpZiBuZWVkZWQKLSAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCi0g
ICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/Ci0gICAgICAgICggb3B0
aW9uc0NhY2hlWyBvcHRpb25zIF0gfHwgY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApICkgOgotICAg
ICAgICBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApOwotCi0gICAgdmFyIC8vIExhc3QgZmly
ZSB2YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cykKLSAgICAgICAgbWVtb3J5LAotICAg
ICAgICAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAotICAgICAgICBm
aXJlZCwKLSAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmlu
ZwotICAgICAgICBmaXJpbmcsCi0gICAgICAgIC8vIEZpcnN0IGNhbGxiYWNrIHRvIGZpcmUgKHVz
ZWQgaW50ZXJuYWxseSBieSBhZGQgYW5kIGZpcmVXaXRoKQotICAgICAgICBmaXJpbmdTdGFydCwK
LSAgICAgICAgLy8gRW5kIG9mIHRoZSBsb29wIHdoZW4gZmlyaW5nCi0gICAgICAgIGZpcmluZ0xl
bmd0aCwKLSAgICAgICAgLy8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9k
aWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRlZCkKLSAgICAgICAgZmlyaW5nSW5kZXgsCi0gICAgICAg
IC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0Ci0gICAgICAgIGxpc3QgPSBbXSwKLSAgICAgICAgLy8g
U3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBsaXN0cwotICAgICAgICBzdGFjayA9
ICFvcHRpb25zLm9uY2UgJiYgW10sCi0gICAgICAgIC8vIEZpcmUgY2FsbGJhY2tzCi0gICAgICAg
IGZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgICAgIG1lbW9yeSA9IG9wdGlvbnMu
bWVtb3J5ICYmIGRhdGE7Ci0gICAgICAgICAgICBmaXJlZCA9IHRydWU7Ci0gICAgICAgICAgICBm
aXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7Ci0gICAgICAgICAgICBmaXJpbmdTdGFydCA9
IDA7Ci0gICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDsKLSAgICAgICAgICAg
IGZpcmluZyA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXgg
PCBmaXJpbmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBs
aXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRhWyAwIF0sIGRhdGFbIDEgXSApID09PSBmYWxz
ZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICBtZW1vcnkg
PSBmYWxzZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZAotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmaXJpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICggbGlzdCApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIHN0YWNrICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YWNr
Lmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoIHN0YWNrLnNoaWZ0KCkg
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1l
bW9yeSApIHsKLSAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtdOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgLy8gQWN0dWFsIENh
bGxiYWNrcyBvYmplY3QKLSAgICAgICAgc2VsZiA9IHsKLSAgICAgICAgICAgIC8vIEFkZCBhIGNh
bGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QKLSAgICAgICAg
ICAgIGFkZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGgKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbGlzdC5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgICAgIChmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJn
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goIGFy
ZyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdHlwZSAhPT0gInN0
cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc3BlY3QgcmVj
dXJzaXZlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCBhcmcgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgfSkoIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAg
ICAvLyBEbyB3ZSBuZWVkIHRvIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZQotICAgICAgICAgICAg
ICAgICAgICAvLyBjdXJyZW50IGZpcmluZyBiYXRjaD8KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0
Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2l0aCBtZW1vcnksIGlmIHdlJ3JlIG5v
dCBmaXJpbmcgdGhlbgotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgY2FsbCByaWdo
dCBhd2F5Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcmluZ1N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaXJlKCBtZW1vcnkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0Ci0gICAgICAgICAg
ICByZW1vdmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFy
ZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5k
ZXggKSApID4gLTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2Uo
IGluZGV4LCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGZpcmlu
ZyBpbmRleGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3Ro
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nTGVuZ3RoLS07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4LS07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAvLyBDb250cm9sIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QKLSAgICAg
ICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKLSAgICAgICAgICAgIGVtcHR5
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBsaXN0ID0gW107Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8gSGF2ZSB0aGUg
bGlzdCBkbyBub3RoaW5nIGFueW1vcmUKLSAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAv
LyBJcyBpdCBkaXNhYmxlZD8KLSAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIWxpc3Q7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
Ly8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZQotICAgICAgICAgICAgbG9jazog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2sgPSB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKCAhbWVtb3J5ICkgewotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2Fi
bGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8gSXMgaXQgbG9ja2VkPwotICAgICAgICAgICAg
bG9ja2VkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIXN0YWNrOwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBn
aXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMKLSAgICAgICAgICAgIGZpcmVXaXRoOiBmdW5jdGlv
biggY29udGV4dCwgYXJncyApIHsKLSAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsK
LSAgICAgICAgICAgICAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGlj
ZSgpIDogYXJncyBdOwotICAgICAgICAgICAgICAgIGlmICggbGlzdCAmJiAoICFmaXJlZCB8fCBz
dGFjayApICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmluZyApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goIGFyZ3MgKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoIGFyZ3MgKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBDYWxsIGFsbCB0aGUgY2FsbGJh
Y2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cwotICAgICAgICAgICAgZmlyZTogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgc2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBs
ZWFzdCBvbmNlCi0gICAgICAgICAgICBmaXJlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICEhZmlyZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX07Ci1qUXVlcnkuZXh0ZW5kKHsKLQotICAgIERlZmVycmVkOiBmdW5jdGlvbigg
ZnVuYyApIHsKLSAgICAgICAgdmFyIHR1cGxlcyA9IFsKLSAgICAgICAgICAgICAgICAvLyBhY3Rp
b24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKLSAgICAgICAgICAg
ICAgICBbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIp
LCAicmVzb2x2ZWQiIF0sCi0gICAgICAgICAgICAgICAgWyAicmVqZWN0IiwgImZhaWwiLCBqUXVl
cnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVqZWN0ZWQiIF0sCi0gICAgICAgICAgICAg
ICAgWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcygibWVtb3J5IikgXQot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmciLAotICAgICAgICAg
ICAgcHJvbWlzZSA9IHsKLSAgICAgICAgICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHRo
ZW46IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHR1cGxlWyAwIF0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5zWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBm
b3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWRbIHR1cGxlWzFdIF0oIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApID8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJn
dW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVy
bmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHJvbWlzZSgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kb25lKCBuZXdEZWZlci5y
ZXNvbHZlICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZh
aWwoIG5ld0RlZmVyLnJlamVjdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJy
ZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIGFjdGlvbiBdCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZm5zID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAg
fSkucHJvbWlzZSgpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgLy8gR2V0
IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAotICAgICAgICAgICAgICAgIC8vIElmIG9iaiBp
cyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKLSAg
ICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6
IHByb21pc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IGRlZmVycmVkID0ge307Ci0KLSAgICAgICAgLy8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAot
ICAgICAgICBwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47Ci0KLSAgICAgICAgLy8gQWRkIGxp
c3Qtc3BlY2lmaWMgbWV0aG9kcwotICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlv
biggaSwgdHVwbGUgKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCi0gICAg
ICAgICAgICAgICAgc3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdOwotCi0gICAgICAgICAgICAvLyBw
cm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZAotICAgICAgICAgICAg
cHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3QuYWRkOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUg
c3RhdGUKLSAgICAgICAgICAgIGlmICggc3RhdGVTdHJpbmcgKSB7Ci0gICAgICAgICAgICAgICAg
bGlzdC5hZGQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlID0gWyBy
ZXNvbHZlZCB8IHJlamVjdGVkIF0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVN0
cmluZzsKLQotICAgICAgICAgICAgICAgIC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3Qg
XS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2sKLSAgICAgICAgICAgICAgICB9LCB0dXBsZXNb
IGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3Rp
ZnkgXSA9IGxpc3QuZmlyZQotICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBsaXN0
LmZpcmU7Ci0gICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0aCIgXSA9IGxpc3Qu
ZmlyZVdpdGg7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIE1ha2UgdGhlIGRlZmVycmVkIGEg
cHJvbWlzZQotICAgICAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7Ci0KLSAgICAgICAg
Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQotICAgICAgICBpZiAoIGZ1bmMgKSB7Ci0gICAgICAg
ICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQWxsIGRvbmUhCi0gICAgICAgIHJldHVybiBkZWZlcnJlZDsKLSAgICB9LAotCi0gICAg
Ly8gRGVmZXJyZWQgaGVscGVyCi0gICAgd2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwg
Li4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7Ci0gICAgICAgIHZhciBpID0gMCwKLSAgICAgICAgICAg
IHJlc29sdmVWYWx1ZXMgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAotICAgICAgICAg
ICAgbGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCi0KLSAgICAgICAgICAgIC8vIHRoZSBj
b3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKLSAgICAgICAgICAgIHJlbWFpbmluZyA9
IGxlbmd0aCAhPT0gMSB8fCAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJv
cmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsCi0KLSAgICAgICAgICAgIC8vIHRoZSBt
YXN0ZXIgRGVmZXJyZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xl
IERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LgotICAgICAgICAgICAgZGVmZXJyZWQgPSByZW1haW5p
bmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLAotCi0gICAgICAgICAg
ICAvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVz
Ci0gICAgICAgICAgICB1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1ZXMg
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dHNbIGkgXSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgIHZh
bHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBjb3JlX3NsaWNlLmNhbGwoIGFyZ3Vt
ZW50cyApIDogdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCB2YWx1ZXMgPT09IHByb2dy
ZXNzVmFsdWVzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0
aCggY29udGV4dHMsIHZhbHVlcyApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAh
KCAtLXJlbWFpbmluZyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVz
b2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBwcm9ncmVzc1Zh
bHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOwotCi0gICAgICAgIC8vIGFk
ZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVz
b2x2ZWQKLSAgICAgICAgaWYgKCBsZW5ndGggPiAxICkgewotICAgICAgICAgICAgcHJvZ3Jlc3NW
YWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAgcHJvZ3Jlc3NDb250ZXh0
cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7Ci0gICAgICAgICAgICByZXNvbHZlQ29udGV4dHMgPSBu
ZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysg
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5Lmlz
RnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMg
KSApCi0gICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCggZGVmZXJyZWQucmVqZWN0ICkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3ND
b250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCB3YWl0aW5nIG9u
IGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKLSAgICAgICAgaWYgKCAhcmVtYWluaW5nICkg
ewotICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVz
b2x2ZVZhbHVlcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21p
c2UoKTsKLSAgICB9Ci19KTsKLWpRdWVyeS5zdXBwb3J0ID0gKGZ1bmN0aW9uKCkgewotCi0gICAg
dmFyIHN1cHBvcnQsCi0gICAgICAgIGFsbCwKLSAgICAgICAgYSwKLSAgICAgICAgc2VsZWN0LAot
ICAgICAgICBvcHQsCi0gICAgICAgIGlucHV0LAotICAgICAgICBmcmFnbWVudCwKLSAgICAgICAg
ZXZlbnROYW1lLAotICAgICAgICBpLAotICAgICAgICBpc1N1cHBvcnRlZCwKLSAgICAgICAgY2xp
Y2tGbiwKLSAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAg
ICAvLyBTZXR1cAotICAgIGRpdi5zZXRBdHRyaWJ1dGUoICJjbGFzc05hbWUiLCAidCIgKTsKLSAg
ICBkaXYuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5h
PC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7Ci0KLSAgICAvLyBTdXBwb3J0IHRlc3RzIHdv
bid0IHJ1biBpbiBzb21lIGxpbWl0ZWQgb3Igbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzCi0gICAg
YWxsID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgYSA9IGRpdi5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiYSIpWyAwIF07Ci0gICAgaWYgKCAhYWxsIHx8ICFhIHx8ICFhbGwubGVu
Z3RoICkgewotICAgICAgICByZXR1cm4ge307Ci0gICAgfQotCi0gICAgLy8gRmlyc3QgYmF0Y2gg
b2YgdGVzdHMKLSAgICBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsK
LSAgICBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9w
dGlvbiIpICk7Ci0gICAgaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iilb
IDAgXTsKLQotICAgIGEuc3R5bGUuY3NzVGV4dCA9ICJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0
eTouNSI7Ci0gICAgc3VwcG9ydCA9IHsKLSAgICAgICAgLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hp
dGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAotICAgICAgICBsZWFkaW5nV2hpdGVzcGFj
ZTogKCBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMyApLAotCi0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRib2R5IGVsZW1lbnRzIGFyZW4ndCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCi0g
ICAgICAgIC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKLSAgICAgICAg
dGJvZHk6ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLAotCi0gICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVj
dGx5IGJ5IGlubmVySFRNTAotICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVt
ZW50IGluIElFCi0gICAgICAgIGh0bWxTZXJpYWxpemU6ICEhZGl2LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJsaW5rIikubGVuZ3RoLAotCi0gICAgICAgIC8vIEdldCB0aGUgc3R5bGUgaW5mb3JtYXRp
b24gZnJvbSBnZXRBdHRyaWJ1dGUKLSAgICAgICAgLy8gKElFIHVzZXMgLmNzc1RleHQgaW5zdGVh
ZCkKLSAgICAgICAgc3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICks
Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKLSAg
ICAgICAgLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkgZGVmYXVsdCkKLSAgICAgICAgaHJlZk5vcm1h
bGl6ZWQ6ICggYS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIi9hIiApLAotCi0gICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKLSAgICAgICAgLy8gKElFIHVz
ZXMgZmlsdGVyIGluc3RlYWQpCi0gICAgICAgIC8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5k
IGEgV2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUKLSAgICAgICAgb3BhY2l0eTogL14wLjUvLnRlc3Qo
IGEuc3R5bGUub3BhY2l0eSApLAotCi0gICAgICAgIC8vIFZlcmlmeSBzdHlsZSBmbG9hdCBleGlz
dGVuY2UKLSAgICAgICAgLy8gKElFIHVzZXMgc3R5bGVGbG9hdCBpbnN0ZWFkIG9mIGNzc0Zsb2F0
KQotICAgICAgICBjc3NGbG9hdDogISFhLnN0eWxlLmNzc0Zsb2F0LAotCi0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCBmb3IgYSBjaGVja2JveAotICAg
ICAgICAvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCi0gICAgICAgIC8vIChXZWJLaXQgZGVm
YXVsdHMgdG8gIiIgaW5zdGVhZCkKLSAgICAgICAgY2hlY2tPbjogKCBpbnB1dC52YWx1ZSA9PT0g
Im9uIiApLAotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2VsZWN0ZWQtYnktZGVmYXVs
dCBvcHRpb24gaGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9wZXJ0eS4KLSAgICAgICAgLy8gKFdl
YktpdCBkZWZhdWx0cyB0byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBp
biBhbiBvcHRncm91cCkKLSAgICAgICAgb3B0U2VsZWN0ZWQ6IG9wdC5zZWxlY3RlZCwKLQotICAg
ICAgICAvLyBUZXN0IHNldEF0dHJpYnV0ZSBvbiBjYW1lbENhc2UgY2xhc3MuIElmIGl0IHdvcmtz
LCB3ZSBuZWVkIGF0dHJGaXhlcyB3aGVuIGRvaW5nIGdldC9zZXRBdHRyaWJ1dGUgKGllNi83KQot
ICAgICAgICBnZXRTZXRBdHRyaWJ1dGU6IGRpdi5jbGFzc05hbWUgIT09ICJ0IiwKLQotICAgICAg
ICAvLyBUZXN0cyBmb3IgZW5jdHlwZSBzdXBwb3J0IG9uIGEgZm9ybSAoIzY3NDMpCi0gICAgICAg
IGVuY3R5cGU6ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsCi0KLSAg
ICAgICAgLy8gTWFrZXMgc3VyZSBjbG9uaW5nIGFuIGh0bWw1IGVsZW1lbnQgZG9lcyBub3QgY2F1
c2UgcHJvYmxlbXMKLSAgICAgICAgLy8gV2hlcmUgb3V0ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhp
cyBzdGlsbCB3b3JrcwotICAgICAgICBodG1sNUNsb25lOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJuYXYiKS5jbG9uZU5vZGUoIHRydWUgKS5vdXRlckhUTUwgIT09ICI8Om5hdj48LzpuYXY+IiwK
LQotICAgICAgICAvLyBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCBERVBSRUNBVEVEIGluIDEuOCBz
aW5jZSB3ZSBkb24ndCBzdXBwb3J0IFF1aXJrcyBNb2RlCi0gICAgICAgIGJveE1vZGVsOiAoIGRv
Y3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29tcGF0IiApLAotCi0gICAgICAgIC8vIFdpbGwg
YmUgZGVmaW5lZCBsYXRlcgotICAgICAgICBzdWJtaXRCdWJibGVzOiB0cnVlLAotICAgICAgICBj
aGFuZ2VCdWJibGVzOiB0cnVlLAotICAgICAgICBmb2N1c2luQnViYmxlczogZmFsc2UsCi0gICAg
ICAgIGRlbGV0ZUV4cGFuZG86IHRydWUsCi0gICAgICAgIG5vQ2xvbmVFdmVudDogdHJ1ZSwKLSAg
ICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCi0gICAgICAgIHNocmlua1dyYXBC
bG9ja3M6IGZhbHNlLAotICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVlLAotICAgICAg
ICBib3hTaXppbmdSZWxpYWJsZTogdHJ1ZSwKLSAgICAgICAgcGl4ZWxQb3NpdGlvbjogZmFsc2UK
LSAgICB9OwotCi0gICAgLy8gTWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5IGNs
b25lZAotICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlOwotICAgIHN1cHBvcnQubm9DbG9uZUNoZWNr
ZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwotCi0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIG9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBh
cyBkaXNhYmxlZAotICAgIC8vIChXZWJLaXQgbWFya3MgdGhlbSBhcyBkaXNhYmxlZCkKLSAgICBz
ZWxlY3QuZGlzYWJsZWQgPSB0cnVlOwotICAgIHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRp
c2FibGVkOwotCi0gICAgLy8gVGVzdCB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUg
YW4gZXhwYW5kbyBmcm9tIGFuIGVsZW1lbnQKLSAgICAvLyBGYWlscyBpbiBJbnRlcm5ldCBFeHBs
b3JlcgotICAgIHRyeSB7Ci0gICAgICAgIGRlbGV0ZSBkaXYudGVzdDsKLSAgICB9IGNhdGNoKCBl
ICkgewotICAgICAgICBzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoICFkaXYuYWRkRXZlbnRMaXN0ZW5lciAmJiBkaXYuYXR0YWNoRXZlbnQgJiYgZGl2LmZp
cmVFdmVudCApIHsKLSAgICAgICAgZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4g
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8vIENsb25pbmcgYSBub2RlIHNob3VsZG4ndCBj
b3B5IG92ZXIgYW55Ci0gICAgICAgICAgICAvLyBib3VuZCBldmVudCBoYW5kbGVycyAoSUUgZG9l
cyB0aGlzKQotICAgICAgICAgICAgc3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5maXJlRXZlbnQoIm9uY2xpY2si
KTsKLSAgICAgICAgZGl2LmRldGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4gKTsKLSAgICB9
Ci0KLSAgICAvLyBDaGVjayBpZiBhIHJhZGlvIG1haW50YWlucyBpdHMgdmFsdWUKLSAgICAvLyBh
ZnRlciBiZWluZyBhcHBlbmRlZCB0byB0aGUgRE9NCi0gICAgaW5wdXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGlucHV0LnZhbHVlID0gInQiOwotICAgIGlucHV0LnNl
dEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7Ci0gICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0g
aW5wdXQudmFsdWUgPT09ICJ0IjsKLQotICAgIGlucHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQi
LCAiY2hlY2tlZCIgKTsKLQotICAgIC8vICMxMTIxNyAtIFdlYktpdCBsb3NlcyBjaGVjayB3aGVu
IHRoZSBuYW1lIGlzIGFmdGVyIHRoZSBjaGVja2VkIGF0dHJpYnV0ZQotICAgIGlucHV0LnNldEF0
dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKLQotICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsK
LSAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICBm
cmFnbWVudC5hcHBlbmRDaGlsZCggZGl2Lmxhc3RDaGlsZCApOwotCi0gICAgLy8gV2ViS2l0IGRv
ZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzCi0gICAgc3Vw
cG9ydC5jaGVja0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0
cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7Ci0KLSAgICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5lY3Rl
ZCBjaGVja2JveCB3aWxsIHJldGFpbiBpdHMgY2hlY2tlZAotICAgIC8vIHZhbHVlIG9mIHRydWUg
YWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCi0gICAgc3VwcG9ydC5hcHBlbmRDaGVj
a2VkID0gaW5wdXQuY2hlY2tlZDsKLQotICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKCBpbnB1dCAp
OwotICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgIC8vIFRlY2huaXF1ZSBm
cm9tIEp1cml5IFpheXRzZXYKLSAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS9kZXRl
Y3RpbmctZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25pZmZpbmcvCi0gICAgLy8gV2Ug
b25seSBjYXJlIGFib3V0IHRoZSBjYXNlIHdoZXJlIG5vbi1zdGFuZGFyZCBldmVudCBzeXN0ZW1z
Ci0gICAgLy8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQtY2lyY3VpdGluZyBoZXJlIGhl
bHBzIHVzIHRvCi0gICAgLy8gYXZvaWQgYW4gZXZhbCBjYWxsIChpbiBzZXRBdHRyaWJ1dGUpIHdo
aWNoIGNhbiBjYXVzZSBDU1AKLSAgICAvLyB0byBnbyBoYXl3aXJlLiBTZWU6IGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUAotICAgIGlmICggZGl2LmF0dGFjaEV2
ZW50ICkgewotICAgICAgICBmb3IgKCBpIGluIHsKLSAgICAgICAgICAgIHN1Ym1pdDogdHJ1ZSwK
LSAgICAgICAgICAgIGNoYW5nZTogdHJ1ZSwKLSAgICAgICAgICAgIGZvY3VzaW46IHRydWUKLSAg
ICAgICAgfSkgewotICAgICAgICAgICAgZXZlbnROYW1lID0gIm9uIiArIGk7Ci0gICAgICAgICAg
ICBpc1N1cHBvcnRlZCA9ICggZXZlbnROYW1lIGluIGRpdiApOwotICAgICAgICAgICAgaWYgKCAh
aXNTdXBwb3J0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnRO
YW1lLCAicmV0dXJuOyIgKTsKLSAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlwZW9m
IGRpdlsgZXZlbnROYW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHN1cHBvcnRbIGkgKyAiQnViYmxlcyIgXSA9IGlzU3VwcG9ydGVkOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gUnVuIHRlc3RzIHRoYXQgbmVlZCBhIGJvZHkgYXQgZG9jIHJlYWR5
Ci0gICAgalF1ZXJ5KGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgY29udGFpbmVyLCBkaXYsIHRk
cywgbWFyZ2luRGl2LAotICAgICAgICAgICAgZGl2UmVzZXQgPSAicGFkZGluZzowO21hcmdpbjow
O2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuOyIsCi0gICAgICAgICAgICBi
b2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKLQotICAgICAg
ICBpZiAoICFib2R5ICkgewotICAgICAgICAgICAgLy8gUmV0dXJuIGZvciBmcmFtZXNldCBkb2Nz
IHRoYXQgZG9uJ3QgaGF2ZSBhIGJvZHkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAg
ICAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6
MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCI7
Ci0gICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKCBjb250YWluZXIsIGJvZHkuZmlyc3RDaGlsZCAp
OwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgdGVzdCBlbGVtZW50Ci0gICAgICAgIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQoIGRpdiApOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhh
dmUgb2Zmc2V0V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUgc2V0Ci0gICAgICAgIC8vIHRvIGRp
c3BsYXk6bm9uZSBhbmQgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMg
aW4gYQotICAgICAgICAvLyB0YWJsZSByb3c7IGlmIHNvLCBvZmZzZXRXaWR0aC9IZWlnaHQgYXJl
IG5vdCByZWxpYWJsZSBmb3IgdXNlIHdoZW4KLSAgICAgICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4g
ZWxlbWVudCBoYXMgYmVlbiBoaWRkZW4gZGlyZWN0bHkgdXNpbmcKLSAgICAgICAgLy8gZGlzcGxh
eTpub25lIChpdCBpcyBzdGlsbCBzYWZlIHRvIHVzZSBvZmZzZXRzIGlmIGEgcGFyZW50IGVsZW1l
bnQgaXMKLSAgICAgICAgLy8gaGlkZGVuOyBkb24gc2FmZXR5IGdvZ2dsZXMgYW5kIHNlZSBidWcg
IzQ1MTIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgotICAgICAgICAvLyAob25seSBJRSA4IGZhaWxz
IHRoaXMgdGVzdCkKLSAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3Rk
Pjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKLSAgICAgICAgdGRzID0gZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJ0ZCIpOwotICAgICAgICB0ZHNbIDAgXS5zdHlsZS5jc3NUZXh0ID0gInBhZGRp
bmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUiOwotICAgICAgICBpc1N1cHBvcnRl
ZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAgICAgICAgdGRzWyAwIF0u
c3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgICB0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwotCi0gICAgICAgIC8vIENoZWNrIGlmIGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUg
b2Zmc2V0V2lkdGgvSGVpZ2h0Ci0gICAgICAgIC8vIChJRSA8PSA4IGZhaWwgdGhpcyB0ZXN0KQot
ICAgICAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICgg
dGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgYm94LXNp
emluZyBhbmQgbWFyZ2luIGJlaGF2aW9yCi0gICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAg
ICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSAiYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94
LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6
MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3Np
dGlvbjphYnNvbHV0ZTt0b3A6MSU7IjsKLSAgICAgICAgc3VwcG9ydC5ib3hTaXppbmcgPSAoIGRp
di5vZmZzZXRXaWR0aCA9PT0gNCApOwotICAgICAgICBzdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFy
Z2luSW5Cb2R5T2Zmc2V0ID0gKCBib2R5Lm9mZnNldFRvcCAhPT0gMSApOwotCi0gICAgICAgIC8v
IE5PVEU6IFRvIGFueSBmdXR1cmUgbWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVk
U3R5bGUKLSAgICAgICAgLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0
aG91dCBpdC4KLSAgICAgICAgaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKLSAgICAg
ICAgICAgIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiA9ICggd2luZG93LmdldENvbXB1dGVkU3R5bGUo
IGRpdiwgbnVsbCApIHx8IHt9ICkudG9wICE9PSAiMSUiOwotICAgICAgICAgICAgc3VwcG9ydC5i
b3hTaXppbmdSZWxpYWJsZSA9ICggd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCAp
IHx8IHsgd2lkdGg6ICI0cHgiIH0gKS53aWR0aCA9PT0gIjRweCI7Ci0KLSAgICAgICAgICAgIC8v
IENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5j
b3JyZWN0bHkKLSAgICAgICAgICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2Vk
IG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gRm9yIG1vcmUKLSAgICAgICAgICAgIC8vIGluZm8gc2Vl
IGJ1ZyAjMzMzMwotICAgICAgICAgICAgLy8gRmFpbHMgaW4gV2ViS2l0IGJlZm9yZSBGZWIgMjAx
MSBuaWdodGxpZXMKLSAgICAgICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRl
ZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAotICAgICAgICAgICAg
bWFyZ2luRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBt
YXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQ7Ci0g
ICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUu
d2lkdGggPSAiMCI7Ci0gICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKLSAgICAg
ICAgICAgIGRpdi5hcHBlbmRDaGlsZCggbWFyZ2luRGl2ICk7Ci0gICAgICAgICAgICBzdXBwb3J0
LnJlbGlhYmxlTWFyZ2luUmlnaHQgPQotICAgICAgICAgICAgICAgICFwYXJzZUZsb2F0KCAoIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYsIG51bGwgKSB8fCB7fSApLm1hcmdpblJp
Z2h0ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHR5cGVvZiBkaXYuc3R5bGUuem9vbSAh
PT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiBuYXRpdmVseSBibG9j
ay1sZXZlbCBlbGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKLSAgICAgICAgICAgIC8vIGVs
ZW1lbnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcK
LSAgICAgICAgICAgIC8vIHRoZW0gbGF5b3V0Ci0gICAgICAgICAgICAvLyAoSUUgPCA4IGRvZXMg
dGhpcykKLSAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAgICAgICAgICAgIGRpdi5z
dHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQgKyAid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6
aW5saW5lO3pvb206MSI7Ci0gICAgICAgICAgICBzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlv
dXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gMyApOwotCi0gICAgICAgICAgICAvLyBDaGVjayBp
ZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgotICAgICAg
ICAgICAgLy8gKElFIDYgZG9lcyB0aGlzKQotICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkg
PSAiYmxvY2siOwotICAgICAgICAgICAgZGl2LnN0eWxlLm92ZXJmbG93ID0gInZpc2libGUiOwot
ICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7Ci0gICAgICAgICAgICBk
aXYuZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9ICI1cHgiOwotICAgICAgICAgICAgc3VwcG9ydC5z
aHJpbmtXcmFwQmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDMgKTsKLQotICAgICAgICAg
ICAgY29udGFpbmVyLnN0eWxlLnpvb20gPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTnVs
bCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQotICAgICAgICBib2R5LnJlbW92ZUNoaWxk
KCBjb250YWluZXIgKTsKLSAgICAgICAgY29udGFpbmVyID0gZGl2ID0gdGRzID0gbWFyZ2luRGl2
ID0gbnVsbDsKLSAgICB9KTsKLQotICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3Mg
aW4gSUUKLSAgICBmcmFnbWVudC5yZW1vdmVDaGlsZCggZGl2ICk7Ci0gICAgYWxsID0gYSA9IHNl
bGVjdCA9IG9wdCA9IGlucHV0ID0gZnJhZ21lbnQgPSBkaXYgPSBudWxsOwotCi0gICAgcmV0dXJu
IHN1cHBvcnQ7Ci19KSgpOwotdmFyIHJicmFjZSA9IC8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpc
XSkkLywKLSAgICBybXVsdGlEYXNoID0gLyhbQS1aXSkvZzsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0g
ICAgY2FjaGU6IHt9LAotCi0gICAgZGVsZXRlZElkczogW10sCi0KLSAgICAvLyBSZW1vdmUgYXQg
bmV4dCBtYWpvciByZWxlYXNlICgxLjkvMi4wKQotICAgIHV1aWQ6IDAsCi0KLSAgICAvLyBVbmlx
dWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2UKLSAgICAvLyBOb24tZGlnaXRz
IHJlbW92ZWQgdG8gbWF0Y2ggcmlubGluZWpRdWVyeQotICAgIGV4cGFuZG86ICJqUXVlcnkiICsg
KCBqUXVlcnkuZm4uanF1ZXJ5ICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiAp
LAotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBleGNl
cHRpb25zIGlmIHlvdQotICAgIC8vIGF0dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0
byB0aGVtLgotICAgIG5vRGF0YTogewotICAgICAgICAiZW1iZWQiOiB0cnVlLAotICAgICAgICAv
LyBCYW4gYWxsIG9iamVjdHMgZXhjZXB0IGZvciBGbGFzaCAod2hpY2ggaGFuZGxlIGV4cGFuZG9z
KQotICAgICAgICAib2JqZWN0IjogImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1
MzU0MDAwMCIsCi0gICAgICAgICJhcHBsZXQiOiB0cnVlCi0gICAgfSwKLQotICAgIGhhc0RhdGE6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICBlbGVtID0gZWxlbS5ub2RlVHlwZSA/IGpRdWVy
eS5jYWNoZVsgZWxlbVtqUXVlcnkuZXhwYW5kb10gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07
Ci0gICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7Ci0g
ICAgfSwKLQotICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhLCBwdnQgLyogSW50
ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0gICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBl
bGVtICkgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
dGhpc0NhY2hlLCByZXQsCi0gICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRv
LAotICAgICAgICAgICAgZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUgPT09ICJzdHJpbmciLAotCi0g
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGhhbmRsZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMg
ZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYtNwotICAgICAgICAgICAgLy8gY2FuJ3QgR0Mgb2JqZWN0
IHJlZmVyZW5jZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKLSAgICAgICAg
ICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCi0KLSAgICAgICAgICAgIC8vIE9ubHkgRE9NIG5v
ZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCi0gICAg
ICAgICAgICAvLyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0IHNvIEdDIGNhbiBvY2N1
ciBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNo
ZSA6IGVsZW0sCi0KLSAgICAgICAgICAgIC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9i
amVjdHMgaWYgaXRzIGNhY2hlIGFscmVhZHkgZXhpc3RzIGFsbG93cwotICAgICAgICAgICAgLy8g
dGhlIGNvZGUgdG8gc2hvcnRjdXQgb24gdGhlIHNhbWUgcGF0aCBhcyBhIERPTSBub2RlIHdpdGgg
bm8gY2FjaGUKLSAgICAgICAgICAgIGlkID0gaXNOb2RlID8gZWxlbVsgaW50ZXJuYWxLZXkgXSA6
IGVsZW1bIGludGVybmFsS2V5IF0gJiYgaW50ZXJuYWxLZXk7Ci0KLSAgICAgICAgLy8gQXZvaWQg
ZG9pbmcgYW55IG1vcmUgd29yayB0aGFuIHdlIG5lZWQgdG8gd2hlbiB0cnlpbmcgdG8gZ2V0IGRh
dGEgb24gYW4KLSAgICAgICAgLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQgYWxsCi0gICAg
ICAgIGlmICggKCFpZCB8fCAhY2FjaGVbaWRdIHx8ICghcHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkp
ICYmIGdldEJ5TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFpZCApIHsKLSAgICAgICAgICAgIC8vIE9u
bHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2Ug
dGhlaXIgZGF0YQotICAgICAgICAgICAgLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0g
ICAgICAgICAgICBpZiAoIGlzTm9kZSApIHsKLSAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5h
bEtleSBdID0gaWQgPSBqUXVlcnkuZGVsZXRlZElkcy5wb3AoKSB8fCBqUXVlcnkuZ3VpZCsrOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZCA9IGludGVybmFsS2V5Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7
Ci0gICAgICAgICAgICBjYWNoZVsgaWQgXSA9IHt9OwotCi0gICAgICAgICAgICAvLyBBdm9pZHMg
ZXhwb3NpbmcgalF1ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2Jq
ZWN0Ci0gICAgICAgICAgICAvLyBpcyBzZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5Ci0g
ICAgICAgICAgICBpZiAoICFpc05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0u
dG9KU09OID0galF1ZXJ5Lm5vb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBpbnN0ZWFkIG9mIGEg
a2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cwotICAgICAgICAvLyBzaGFsbG93IGNvcGllZCBvdmVy
IG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCi0gICAgICAgIGlmICggdHlwZW9mIG5hbWUgPT09ICJv
YmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewotICAgICAgICAgICAgaWYg
KCBwdnQgKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBqUXVlcnkuZXh0ZW5kKCBj
YWNoZVsgaWQgXSwgbmFtZSApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBjYWNoZVsgaWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0uZGF0YSwgbmFt
ZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpc0NhY2hlID0gY2Fj
aGVbIGlkIF07Ci0KLSAgICAgICAgLy8galF1ZXJ5IGRhdGEoKSBpcyBzdG9yZWQgaW4gYSBzZXBh
cmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBpbnRlcm5hbCBkYXRhCi0gICAgICAgIC8v
IGNhY2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNpb25zIGJldHdlZW4gaW50ZXJuYWwg
ZGF0YSBhbmQgdXNlci1kZWZpbmVkCi0gICAgICAgIC8vIGRhdGEuCi0gICAgICAgIGlmICggIXB2
dCApIHsKLSAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZS5kYXRhICkgewotICAgICAgICAgICAg
ICAgIHRoaXNDYWNoZS5kYXRhID0ge307Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRo
aXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBkYXRh
ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENh
c2UoIG5hbWUgKSBdID0gZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGZvciBi
b3RoIGNvbnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5IG5h
bWVzCi0gICAgICAgIC8vIElmIGEgZGF0YSBwcm9wZXJ0eSB3YXMgc3BlY2lmaWVkCi0gICAgICAg
IGlmICggZ2V0QnlOYW1lICkgewotCi0gICAgICAgICAgICAvLyBGaXJzdCBUcnkgdG8gZmluZCBh
cy1pcyBwcm9wZXJ0eSBkYXRhCi0gICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsK
LQotICAgICAgICAgICAgLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQot
ICAgICAgICAgICAgaWYgKCByZXQgPT0gbnVsbCApIHsKLQotICAgICAgICAgICAgICAgIC8vIFRy
eSB0byBmaW5kIHRoZSBjYW1lbENhc2VkIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgcmV0ID0g
dGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0gICAgICAgIGlm
ICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgdGhpc0NhY2hlLCBpLCBsLAotCi0gICAgICAgICAgICBp
c05vZGUgPSBlbGVtLm5vZGVUeXBlLAotCi0gICAgICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEg
Zm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5
LmNhY2hlIDogZWxlbSwKLSAgICAgICAgICAgIGlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4
cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVh
ZHkgbm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubwotICAgICAgICAv
LyBwdXJwb3NlIGluIGNvbnRpbnVpbmcKLSAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIG5hbWUgKSB7Ci0K
LSAgICAgICAgICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVbIGlkIF0u
ZGF0YTsKLQotICAgICAgICAgICAgaWYgKCB0aGlzQ2FjaGUgKSB7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9yIGRh
dGEga2V5cwotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3Jl
IGFueSBtYW5pcHVsYXRpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lIGluIHRoaXND
YWNoZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBbIG5hbWUgXTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Bs
aXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRo
ZSBzcGFjZXMgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNh
bWVsQ2FzZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lIGluIHRo
aXNDYWNoZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gWyBuYW1lIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMCwgbCA9IG5hbWUubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpc0NhY2hlWyBuYW1lW2ldIF07Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRo
ZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51ZQotICAgICAgICAgICAgICAgIC8vIGFuZCBsZXQg
dGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAotICAgICAgICAgICAgICAgIGlm
ICggISggcHZ0ID8gaXNFbXB0eURhdGFPYmplY3QgOiBqUXVlcnkuaXNFbXB0eU9iamVjdCApKCB0
aGlzQ2FjaGUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNlZSBqUXVlcnku
ZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgICAgICBpZiAoICFwdnQgKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgY2FjaGVbIGlkIF0uZGF0YTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgZGVz
dHJveSB0aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QKLSAg
ICAgICAgICAgIC8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKLSAgICAgICAg
ICAgIGlmICggIWlzRW1wdHlEYXRhT2JqZWN0KCBjYWNoZVsgaWQgXSApICkgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIERl
c3Ryb3kgdGhlIGNhY2hlCi0gICAgICAgIGlmICggaXNOb2RlICkgewotICAgICAgICAgICAgalF1
ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0sIHRydWUgKTsKLQotICAgICAgICAvLyBVc2UgZGVsZXRl
IHdoZW4gc3VwcG9ydGVkIGZvciBleHBhbmRvcyBvciBgY2FjaGVgIGlzIG5vdCBhIHdpbmRvdyBw
ZXIgaXNXaW5kb3cgKCMxMDA4MCkKLSAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LnN1cHBvcnQu
ZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53aW5kb3cgKSB7Ci0gICAgICAgICAgICBk
ZWxldGUgY2FjaGVbIGlkIF07Ci0KLSAgICAgICAgLy8gV2hlbiBhbGwgZWxzZSBmYWlscywgbnVs
bAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBudWxsOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAgICBfZGF0
YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnku
ZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApOwotICAgIH0sCi0KLSAgICAvLyBBIG1ldGhv
ZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxlIHRoZSBkYXRhIGV4cGFu
ZG8KLSAgICBhY2NlcHREYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgdmFyIG5vRGF0
YSA9IGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpIF07Ci0KLSAgICAgICAgLy8gbm9kZXMgYWNjZXB0IGRhdGEgdW5sZXNzIG90aGVyd2lz
ZSBzcGVjaWZpZWQ7IHJlamVjdGlvbiBjYW4gYmUgY29uZGl0aW9uYWwKLSAgICAgICAgcmV0dXJu
ICFub0RhdGEgfHwgbm9EYXRhICE9PSB0cnVlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lk
IikgPT09IG5vRGF0YTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgZGF0
YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgIHZhciBwYXJ0cywgcGFydCwgYXR0
ciwgbmFtZSwgbCwKLSAgICAgICAgICAgIGVsZW0gPSB0aGlzWzBdLAotICAgICAgICAgICAgaSA9
IDAsCi0gICAgICAgICAgICBkYXRhID0gbnVsbDsKLQotICAgICAgICAvLyBHZXRzIGFsbCB2YWx1
ZXMKLSAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIGlmICgg
dGhpcy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVt
ICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWpRdWVy
eS5fZGF0YSggZWxlbSwgInBhcnNlZEF0dHJzIiApICkgewotICAgICAgICAgICAgICAgICAgICBh
dHRyID0gZWxlbS5hdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAgICBmb3IgKCBsID0gYXR0
ci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g
YXR0cltpXS5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFuYW1lLmluZGV4
T2YoICJkYXRhLSIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1
ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIsIHRydWUgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gU2V0cyBtdWx0aXBsZSB2YWx1ZXMKLSAgICAgICAgaWYgKCB0
eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSApOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJ0cyA9IGtleS5zcGxpdCgg
Ii4iLCAyICk7Ci0gICAgICAgIHBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6
ICIiOwotICAgICAgICBwYXJ0ID0gcGFydHNbMV0gKyAiISI7Ci0KLSAgICAgICAgcmV0dXJuIGpR
dWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgaWYg
KCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnRy
aWdnZXJIYW5kbGVyKCAiZ2V0RGF0YSIgKyBwYXJ0LCBbIHBhcnRzWzBdIF0gKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFRyeSB0byBmZXRjaCBhbnkgaW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJz
dAotICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSwga2V5ICk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5l
ZCAmJiBwYXJ0c1sxXSA/Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSggcGFydHNbMF0g
KSA6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHBhcnRzWzFdID0gdmFsdWU7Ci0gICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKLQotICAgICAgICAg
ICAgICAgIHNlbGYudHJpZ2dlckhhbmRsZXIoICJzZXREYXRhIiArIHBhcnQsIHBhcnRzICk7Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKLSAgICAgICAg
ICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0LCBwYXJ0cyAp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVu
Z3RoID4gMSwgbnVsbCwgZmFsc2UgKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlRGF0YTogZnVuY3Rp
b24oIGtleSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKLSAgICAgICAgfSk7Ci0gICAg
fQotfSk7Ci0KLWZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7Ci0gICAgLy8g
SWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQotICAgIC8v
IGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQotICAgIGlmICggZGF0YSA9PT0g
dW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0KLSAgICAgICAgdmFyIG5hbWUg
PSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJDEiICkudG9Mb3dlckNhc2Uo
KTsKLQotICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKLQotICAgICAg
ICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgotICAgICAgICAg
ICAgICAgIGRhdGEgPT09ICJmYWxzZSIgPyBmYWxzZSA6Ci0gICAgICAgICAgICAgICAgZGF0YSA9
PT0gIm51bGwiID8gbnVsbCA6Ci0gICAgICAgICAgICAgICAgLy8gT25seSBjb252ZXJ0IHRvIGEg
bnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICAr
ZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgotICAgICAgICAgICAgICAgIHJicmFjZS50ZXN0
KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOgotICAgICAgICAgICAgICAgICAg
ICBkYXRhOwotICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9Ci0KLSAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgotICAgICAg
ICAgICAgalF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgZGF0YSApOwotCi0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRhdGE7Ci19Ci0KLS8vIGNoZWNrcyBhIGNhY2hlIG9iamVjdCBmb3IgZW1wdGluZXNz
Ci1mdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewotICAgIHZhciBuYW1lOwotICAg
IGZvciAoIG5hbWUgaW4gb2JqICkgewotCi0gICAgICAgIC8vIGlmIHRoZSBwdWJsaWMgZGF0YSBv
YmplY3QgaXMgZW1wdHksIHRoZSBwcml2YXRlIGlzIHN0aWxsIGVtcHR5Ci0gICAgICAgIGlmICgg
bmFtZSA9PT0gImRhdGEiICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvYmpbbmFtZV0gKSApIHsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICggbmFtZSAhPT0g
InRvSlNPTiIgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLWpRdWVyeS5leHRlbmQoewotICAgIHF1ZXVlOiBmdW5j
dGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHsKLSAgICAgICAgdmFyIHF1ZXVlOwotCi0gICAgICAg
IGlmICggZWxlbSApIHsKLSAgICAgICAgICAgIHR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1
ZXVlIjsKLSAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICk7Ci0K
LSAgICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBp
ZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKLSAgICAgICAgICAgIGlmICggZGF0YSApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJheShkYXRhKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5t
YWtlQXJyYXkoZGF0YSkgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBxdWV1ZS5wdXNoKCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHF1ZXVlIHx8IFtdOwotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewotICAgICAgICB0eXBlID0g
dHlwZSB8fCAiZngiOwotCi0gICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwg
dHlwZSApLAotICAgICAgICAgICAgc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCi0gICAgICAg
ICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCi0gICAgICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVl
dWVIb29rcyggZWxlbSwgdHlwZSApLAotICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7Ci0gICAgICAgICAg
ICB9OwotCi0gICAgICAgIC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJl
bW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKLSAgICAgICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jl
c3MiICkgewotICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOwotICAgICAgICAgICAgc3Rh
cnRMZW5ndGgtLTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZm4gKSB7Ci0KLSAgICAgICAg
ICAgIC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZy
b20gYmVpbmcKLSAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKLSAgICAgICAg
ICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0
KCAiaW5wcm9ncmVzcyIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2xlYXIg
dXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgotICAgICAgICAgICAgZGVsZXRlIGhvb2tz
LnN0b3A7Ci0gICAgICAgICAgICBmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7Ci0gICAgICAgICAg
ICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gbm90IGlu
dGVuZGVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gLSBnZW5lcmF0ZXMgYSBxdWV1ZUhvb2tzIG9i
amVjdCwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBvbmUKLSAgICBfcXVldWVIb29rczogZnVuY3Rp
b24oIGVsZW0sIHR5cGUgKSB7Ci0gICAgICAgIHZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3Mi
OwotICAgICAgICByZXR1cm4galF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXkgKSB8fCBqUXVlcnkuX2Rh
dGEoIGVsZW0sIGtleSwgewotICAgICAgICAgICAgZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIm9u
Y2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgIGpR
dWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBrZXksIHRydWUgKTsKLSAgICAgICAgICAgIH0pCi0gICAg
ICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBxdWV1ZTogZnVu
Y3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgIHZhciBzZXR0ZXIgPSAyOwotCi0gICAgICAg
IGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgZGF0YSA9IHR5
cGU7Ci0gICAgICAgICAgICB0eXBlID0gImZ4IjsKLSAgICAgICAgICAgIHNldHRlci0tOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkgewotICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICB0aGlz
IDoKLSAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKLQotICAgICAgICAg
ICAgICAgIC8vIGVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlCi0gICAgICAgICAgICAgICAg
alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKLSAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9KTsKLSAgICB9LAotICAgIGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBl
ICkgewotICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICAv
LyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Np
b24uCi0gICAgLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1
ZXJ5LWRlbGF5LwotICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKLSAgICAgICAg
dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGlt
ZTsKLSAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgICAgICByZXR1cm4gdGhpcy5x
dWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgewotICAgICAgICAgICAgdmFyIHRp
bWVvdXQgPSBzZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7Ci0gICAgICAgICAgICBob29rcy5zdG9w
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIGNsZWFyUXVldWU6IGZ1
bmN0aW9uKCB0eXBlICkgewotICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngi
LCBbXSApOwotICAgIH0sCi0gICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVl
cyBvZiBhIGNlcnRhaW4gdHlwZQotICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBi
eSBkZWZhdWx0KQotICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7Ci0gICAgICAg
IHZhciB0bXAsCi0gICAgICAgICAgICBjb3VudCA9IDEsCi0gICAgICAgICAgICBkZWZlciA9IGpR
dWVyeS5EZWZlcnJlZCgpLAotICAgICAgICAgICAgZWxlbWVudHMgPSB0aGlzLAotICAgICAgICAg
ICAgaSA9IHRoaXMubGVuZ3RoLAotICAgICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgewotICAgICAgICAgICAgICAgICAg
ICBkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0g
InN0cmluZyIgKSB7Ci0gICAgICAgICAgICBvYmogPSB0eXBlOwotICAgICAgICAgICAgdHlwZSA9
IHVuZGVmaW5lZDsKLSAgICAgICAgfQotICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0g
ICAgICAgIHdoaWxlKCBpLS0gKSB7Ci0gICAgICAgICAgICB0bXAgPSBqUXVlcnkuX2RhdGEoIGVs
ZW1lbnRzWyBpIF0sIHR5cGUgKyAicXVldWVIb29rcyIgKTsKLSAgICAgICAgICAgIGlmICggdG1w
ICYmIHRtcC5lbXB0eSApIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAg
ICAgIHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXNvbHZlKCk7Ci0gICAgICAgIHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTsK
LSAgICB9Ci19KTsKLXZhciBub2RlSG9vaywgYm9vbEhvb2ssIGZpeFNwZWNpZmllZCwKLSAgICBy
Y2xhc3MgPSAvW1x0XHJcbl0vZywKLSAgICBycmV0dXJuID0gL1xyL2csCi0gICAgcnR5cGUgPSAv
Xig/OmJ1dHRvbnxpbnB1dCkkL2ksCi0gICAgcmZvY3VzYWJsZSA9IC9eKD86YnV0dG9ufGlucHV0
fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLAotICAgIHJjbGlja2FibGUgPSAvXmEoPzpyZWF8
KSQvaSwKLSAgICByYm9vbGVhbiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNr
ZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFk
b25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLAotICAgIGdldFNldEF0dHJpYnV0ZSA9
IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0g
ICAgYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgICAgICByZXR1cm4galF1ZXJ5
LmFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3Ro
ID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGpRdWVyeS5y
ZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICBwcm9w
OiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNz
KCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7
Ci0gICAgfSwKLQotICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgewotICAgICAgICBu
YW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2Fz
ZXMgd2hlcmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cp
Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRoaXNbIG5hbWUgXSA9IHVuZGVm
aW5lZDsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1sgbmFtZSBdOwotICAgICAgICAgICAg
fSBjYXRjaCggZSApIHt9Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICBhZGRDbGFzczogZnVu
Y3Rpb24oIHZhbHVlICkgewotICAgICAgICB2YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxlbSwKLSAg
ICAgICAgICAgIHNldENsYXNzLCBjLCBjbDsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCB2YWx1ZSApICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigg
aiApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2Fs
bCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICkgewot
ICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOwotCi0g
ICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewot
ICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0u
Y2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgPSAiICIgKyBlbGVtLmNs
YXNzTmFtZSArICIgIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggYyA9IDAsIGNs
ID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggc2V0Q2xhc3MuaW5kZXhPZiggIiAiICsgY2xhc3NOYW1lc1sgYyBdICsg
IiAiICkgPCAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcyAr
PSBjbGFzc05hbWVzWyBjIF0gKyAiICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5j
bGFzc05hbWUgPSBqUXVlcnkudHJpbSggc2V0Q2xhc3MgKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVl
ICkgewotICAgICAgICB2YXIgcmVtb3ZlcywgY2xhc3NOYW1lLCBlbGVtLCBjLCBjbCwgaSwgbDsK
LQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKLSAgICAgICAgICAgICAgICBqUXVl
cnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFt
ZSkgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGlmICggKHZhbHVlICYm
IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHx8IHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0g
ICAgICAgICAgICByZW1vdmVzID0gKCB2YWx1ZSB8fCAiIiApLnNwbGl0KCBjb3JlX3JzcGFjZSAp
OwotCi0gICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsr
ICkgewotICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07Ci0gICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgewotCi0gICAgICAg
ICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVw
bGFjZSggcmNsYXNzLCAiICIgKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBsb29wIG92ZXIg
ZWFjaCBpdGVtIGluIHRoZSByZW1vdmFsIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgZm9yICgg
YyA9IDAsIGNsID0gcmVtb3Zlcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUmVtb3ZlIHVudGlsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVtb3ZlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjbGFzc05hbWUuaW5kZXhPZigiICIgKyBy
ZW1vdmVzWyBjIF0gKyAiICIpID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoICIgIiArIHJlbW92ZXNbIGMgXSArICIgIiAs
ICIgIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWUgPyBqUXVlcnkudHJp
bSggY2xhc3NOYW1lICkgOiAiIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgdG9nZ2xlQ2xh
c3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7Ci0gICAgICAgIHZhciB0eXBlID0gdHlw
ZW9mIHZhbHVlLAotICAgICAgICAgICAgaXNCb29sID0gdHlwZW9mIHN0YXRlVmFsID09PSAiYm9v
bGVhbiI7Ci0KLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgICAgICAg
ICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5j
bGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gdG9nZ2xlIGlu
ZGl2aWR1YWwgY2xhc3MgbmFtZXMKLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lLAotICAg
ICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVy
eSggdGhpcyApLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlVmFsLAotICAgICAg
ICAgICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7Ci0K
LSAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBz
cGFjZSBzZXBhcmF0ZWQgbGlzdAotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGlzQm9vbCA/
IHN0YXRlIDogIXNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApOwotICAgICAgICAgICAgICAgICAg
ICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNzTmFtZSAp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0g
InVuZGVmaW5lZCIgfHwgdHlwZSA9PT0gImJvb2xlYW4iICkgewotICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5jbGFzc05hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGNsYXNz
TmFtZSBpZiBzZXQKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19j
bGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gdG9nZ2xlIHdob2xlIGNsYXNzTmFtZQotICAgICAgICAgICAgICAgIHRo
aXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBq
UXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiOwotICAgICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3Rv
ciApIHsKLSAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiLAotICAg
ICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgIGZv
ciAoIDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgIGlmICggdGhpc1tpXS5ub2RlVHlwZSA9
PT0gMSAmJiAoIiAiICsgdGhpc1tpXS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UocmNsYXNzLCAi
ICIpLmluZGV4T2YoIGNsYXNzTmFtZSApID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSwKLQotICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICB2YXIgaG9v
a3MsIHJldCwgaXNGdW5jdGlvbiwKLSAgICAgICAgICAgIGVsZW0gPSB0aGlzWzBdOwotCi0gICAg
ICAgIGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICBpZiAoIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8
IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5n
ZXQoIGVsZW0sICJ2YWx1ZSIgKSkgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXQg
PSBlbGVtLnZhbHVlOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXQgPT09ICJz
dHJpbmciID8KLSAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vc3QgY29tbW9uIHN0cmlu
ZyBjYXNlcwotICAgICAgICAgICAgICAgICAgICByZXQucmVwbGFjZShycmV0dXJuLCAiIikgOgot
ICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91
bmRlZiBvciBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJl
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgICAgICB2YXIgdmFsLAot
ICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkodGhpcyk7Ci0KLSAgICAgICAgICAgIGlmICgg
dGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKLSAgICAgICAgICAgICAg
ICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBzZWxmLnZhbCgpICk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJz
IHRvIHN0cmluZwotICAgICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKLSAgICAgICAgICAg
ICAgICB2YWwgPSAiIjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJu
dW1iZXIiICkgewotICAgICAgICAgICAgICAgIHZhbCArPSAiIjsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKLSAgICAgICAgICAgICAgICB2YWwgPSBq
UXVlcnkubWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tz
WyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSBdOwotCi0gICAgICAgICAgICAvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwg
YmFjayB0byBub3JtYWwgc2V0dGluZwotICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0
IiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZp
bmVkICkgewotICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICB2YWxIb29r
czogewotICAgICAgICBvcHRpb246IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4g
QmxhY2tiZXJyeSA0LjcgYnV0Ci0gICAgICAgICAgICAgICAgLy8gdXNlcyAudmFsdWUuIFNlZSAj
NjkzMgotICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICF2YWwgfHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUg
OiBlbGVtLnRleHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHNlbGVjdDog
ewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB2
YXIgdmFsdWUsIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0
aW9ucywKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiIHx8IGlu
ZGV4IDwgMCwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gb25lID8gbnVsbCA6IFtdLAot
ICAgICAgICAgICAgICAgICAgICBtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgaSA9IGluZGV4IDwgMCA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtYXggOgotICAgICAgICAgICAgICAgICAgICAgICAgb25lID8gaW5kZXggOiAwOwot
Ci0gICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9u
cwotICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IG1heDsgaSsrICkgewotICAgICAgICAgICAg
ICAgICAgICBvcHRpb24gPSBvcHRpb25zWyBpIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
b2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCi0g
ICAgICAgICAgICAgICAgICAgIGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXgg
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25z
IHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0Lm9wdERpc2FibGVkID8gIW9wdGlvbi5k
aXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgPT09IG51bGwgKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVk
IHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCAib3B0Z3JvdXAiICkgKSAp
IHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBm
b3IgdGhlIG9wdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIG9w
dGlvbiApLnZhbCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
bmUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1T
ZWxlY3RzIHJldHVybiBhbiBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1
c2goIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICBq
UXVlcnkoZWxlbSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkodGhpcykudmFs
KCksIHZhbHVlcyApID49IDA7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoICF2YWx1ZXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICBlbGVtLnNlbGVj
dGVkSW5kZXggPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBVbnVz
ZWQgaW4gMS44LCBsZWZ0IGluIHNvIGF0dHJGbi1zdGFiYmVycyB3b24ndCBkaWU7IHJlbW92ZSBp
biAxLjkKLSAgICBhdHRyRm46IHt9LAotCi0gICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUs
IHZhbHVlLCBwYXNzICkgewotICAgICAgICB2YXIgcmV0LCBob29rcywgbm90eG1sLAotICAgICAg
ICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgICAgIC8vIGRvbid0IGdldC9zZXQg
YXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKLSAgICAgICAg
aWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiAp
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggcGFzcyAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggalF1ZXJ5LmZuWyBuYW1lIF0gKSApIHsKLSAgICAgICAgICAg
IHJldHVybiBqUXVlcnkoIGVsZW0gKVsgbmFtZSBdKCB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0
ZWQKLSAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQi
ICkgewotICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApOwotCi0gICAgICAgIC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNh
c2UKLSAgICAgICAgLy8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAotICAg
ICAgICBpZiAoIG5vdHhtbCApIHsKLSAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNl
KCk7Ci0gICAgICAgICAgICBob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fCAoIHJi
b29sZWFuLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogbm9kZUhvb2sgKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgaWYg
KCB2YWx1ZSA9PT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0cigg
ZWxlbSwgbmFtZSApOwotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgfSBl
bHNlIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29r
cy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJldDsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOwotICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgaWYgKCBob29r
cyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwg
bmFtZSApKSAhPT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAg
fSBlbHNlIHsKLQotICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsK
LQotICAgICAgICAgICAgLy8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdl
IG5vcm1hbGl6ZSB0byB1bmRlZmluZWQKLSAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwg
PwotICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6Ci0gICAgICAgICAgICAgICAgcmV0OwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSAp
IHsKLSAgICAgICAgdmFyIHByb3BOYW1lLCBhdHRyTmFtZXMsIG5hbWUsIGlzQm9vbCwKLSAgICAg
ICAgICAgIGkgPSAwOwotCi0gICAgICAgIGlmICggdmFsdWUgJiYgZWxlbS5ub2RlVHlwZSA9PT0g
MSApIHsKLQotICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNl
ICk7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgaSA8IGF0dHJOYW1lcy5sZW5ndGg7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICBuYW1lID0gYXR0ck5hbWVzWyBpIF07Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnBy
b3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotICAgICAgICAgICAgICAgICAgICBpc0Jvb2wgPSByYm9v
bGVhbi50ZXN0KCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlICM5Njk5IGZv
ciBleHBsYW5hdGlvbiBvZiB0aGlzIGFwcHJvYWNoIChzZXR0aW5nIGZpcnN0LCB0aGVuIHJlbW92
YWwpCi0gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBkbyB0aGlzIGZvciBib29sZWFuIGF0
dHJpYnV0ZXMgKHNlZSAjMTA4NzApCi0gICAgICAgICAgICAgICAgICAgIGlmICggIWlzQm9vbCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRyKCBlbGVtLCBuYW1lLCAiIiAp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3Zl
QXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1lIDogcHJvcE5hbWUgKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3Ig
Ym9vbGVhbiBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgIGlmICggaXNCb29sICYmIHBy
b3BOYW1lIGluIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBwcm9wTmFt
ZSBdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgYXR0ckhvb2tzOiB7Ci0gICAg
ICAgIHR5cGU6IHsKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJl
IGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKLSAgICAgICAgICAgICAg
ICBpZiAoIHJ0eXBlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3Qg
YmUgY2hhbmdlZCIgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhalF1ZXJ5LnN1cHBv
cnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxl
bSwgImlucHV0IikgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIHR5cGUg
b24gYSByYWRpbyBidXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFsdWUgaW4gSUU2
LTkKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdmFsdWUgdG8gaXQncyBkZWZhdWx0IGlu
IGNhc2UgdHlwZSBpcyBzZXQgYWZ0ZXIgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBmb3IgZWxlbWVudCBjcmVhdGlvbgotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0g
ZWxlbS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJ0eXBl
IiwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIFVzZSB0aGUgdmFsdWUgcHJvcGVydHkg
Zm9yIGJhY2sgY29tcGF0Ci0gICAgICAgIC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBl
bGVtZW50cyBpbiBJRTYvNyAoIzE5NTQpCi0gICAgICAgIHZhbHVlOiB7Ci0gICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgICAgIGlmICggbm9kZUhv
b2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBuYW1lIGluIGVsZW0gPwotICAgICAgICAgICAg
ICAgICAgICBlbGVtLnZhbHVlIDoKLSAgICAgICAgICAgICAgICAgICAgbnVsbDsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsK
LSAgICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImJ1dHRvbiIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLnNldCgg
ZWxlbSwgdmFsdWUsIG5hbWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gRG9lcyBub3QgcmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNlZAotICAg
ICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0sCi0KLSAgICBwcm9wRml4OiB7Ci0gICAgICAgIHRhYmluZGV4OiAidGFiSW5kZXgi
LAotICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKLSAgICAgICAgImZvciI6ICJodG1sRm9y
IiwKLSAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIsCi0gICAgICAgIG1heGxlbmd0aDogIm1h
eExlbmd0aCIsCi0gICAgICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAotICAgICAgICBj
ZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwKLSAgICAgICAgcm93c3BhbjogInJvd1NwYW4iLAot
ICAgICAgICBjb2xzcGFuOiAiY29sU3BhbiIsCi0gICAgICAgIHVzZW1hcDogInVzZU1hcCIsCi0g
ICAgICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiLAotICAgICAgICBjb250ZW50ZWRpdGFi
bGU6ICJjb250ZW50RWRpdGFibGUiCi0gICAgfSwKLQotICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIHJldCwgaG9va3MsIG5vdHhtbCwKLSAgICAg
ICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgICAgICAvLyBkb24ndCBnZXQvc2V0
IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCi0gICAgICAg
IGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIg
KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBub3R4bWwgPSBu
VHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7Ci0KLSAgICAgICAgaWYgKCBu
b3R4bWwgKSB7Ci0gICAgICAgICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCi0gICAg
ICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotICAgICAgICAg
ICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICBpZiAoIGhvb2tzICYm
ICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkp
ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2
YWx1ZSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5h
bWUgKSkgIT09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHByb3BIb29rczogewotICAgICAg
ICB0YWJJbmRleDogewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29y
cmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0Ci0gICAgICAgICAg
ICAgICAgLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmct
c2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KLSAg
ICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgi
dGFiaW5kZXgiKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVOb2RlICYmIGF0
dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID8KLSAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoIGF0
dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgotICAgICAgICAgICAgICAgICAgICByZm9jdXNhYmxl
LnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUg
KSAmJiBlbGVtLmhyZWYgPwotICAgICAgICAgICAgICAgICAgICAgICAgMCA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19KTsKLQotLy8gSG9vayBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCi1ib29sSG9vayA9IHsKLSAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAvLyBBbGlnbiBib29sZWFu
IGF0dHJpYnV0ZXMgd2l0aCBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMKLSAgICAgICAgLy8gRmFs
bCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5jZSB3aGVyZSBzb21lIGJvb2xlYW5zIGFyZSBub3Qg
c3VwcG9ydGVkCi0gICAgICAgIHZhciBhdHRyTm9kZSwKLSAgICAgICAgICAgIHByb3BlcnR5ID0g
alF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5ID09PSB0
cnVlIHx8IHR5cGVvZiBwcm9wZXJ0eSAhPT0gImJvb2xlYW4iICYmICggYXR0ck5vZGUgPSBlbGVt
LmdldEF0dHJpYnV0ZU5vZGUobmFtZSkgKSAmJiBhdHRyTm9kZS5ub2RlVmFsdWUgIT09IGZhbHNl
ID8KLSAgICAgICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKSA6Ci0gICAgICAgICAgICB1bmRlZmlu
ZWQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAg
ICAgICAgdmFyIHByb3BOYW1lOwotICAgICAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKLSAg
ICAgICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UK
LSAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyB2YWx1ZSBpcyB0cnVlIHNpbmNlIHdlIGtub3cgYXQgdGhp
cyBwb2ludCBpdCdzIHR5cGUgYm9vbGVhbiBhbmQgbm90IGZhbHNlCi0gICAgICAgICAgICAvLyBT
ZXQgYm9vbGVhbiBhdHRyaWJ1dGVzIHRvIHRoZSBzYW1lIG5hbWUgYW5kIHNldCB0aGUgRE9NIHBy
b3BlcnR5Ci0gICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwg
bmFtZTsKLSAgICAgICAgICAgIGlmICggcHJvcE5hbWUgaW4gZWxlbSApIHsKLSAgICAgICAgICAg
ICAgICAvLyBPbmx5IHNldCB0aGUgSURMIHNwZWNpZmljYWxseSBpZiBpdCBhbHJlYWR5IGV4aXN0
cyBvbiB0aGUgZWxlbWVudAotICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwg
bmFtZS50b0xvd2VyQ2FzZSgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0g
ICAgfQotfTsKLQotLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5nIHNvbWUg
YXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKLWlmICggIWdldFNldEF0dHJpYnV0ZSAp
IHsKLQotICAgIGZpeFNwZWNpZmllZCA9IHsKLSAgICAgICAgbmFtZTogdHJ1ZSwKLSAgICAgICAg
aWQ6IHRydWUsCi0gICAgICAgIGNvb3JkczogdHJ1ZQotICAgIH07Ci0KLSAgICAvLyBVc2UgdGhp
cyBmb3IgYW55IGF0dHJpYnV0ZSBpbiBJRTYvNwotICAgIC8vIFRoaXMgZml4ZXMgYWxtb3N0IGV2
ZXJ5IElFNi83IGlzc3VlCi0gICAgbm9kZUhvb2sgPSBqUXVlcnkudmFsSG9va3MuYnV0dG9uID0g
ewotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgdmFy
IHJldDsKLSAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwot
ICAgICAgICAgICAgcmV0dXJuIHJldCAmJiAoIGZpeFNwZWNpZmllZFsgbmFtZSBdID8gcmV0LnZh
bHVlICE9PSAiIiA6IHJldC5zcGVjaWZpZWQgKSA/Ci0gICAgICAgICAgICAgICAgcmV0LnZhbHVl
IDoKLSAgICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0gICAgICAgIH0sCi0gICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgICAgICAgICAgLy8gU2V0IHRoZSBl
eGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIG5vZGUKLSAgICAgICAgICAgIHZhciBy
ZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICAgICAgICAgIGlmICggIXJl
dCApIHsKLSAgICAgICAgICAgICAgICByZXQgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIG5h
bWUgKTsKLSAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZU5vZGUoIHJldCApOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICggcmV0LnZhbHVlID0gdmFsdWUgKyAiIiAp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGF1
dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUwICkKLSAgICAvLyBUaGlz
IGlzIGZvciByZW1vdmFscwotICAgIGpRdWVyeS5lYWNoKFsgIndpZHRoIiwgImhlaWdodCIgXSwg
ZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgICAgIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9
IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewotICAgICAgICAgICAg
c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gIiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1l
LCAiYXV0byIgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAvLyBT
ZXQgY29udGVudGVkaXRhYmxlIHRvIGZhbHNlIG9uIHJlbW92YWxzKCMxMDQyOSkKLSAgICAvLyBT
ZXR0aW5nIHRvIGVtcHR5IHN0cmluZyB0aHJvd3MgYW4gZXJyb3IgYXMgYW4gaW52YWxpZCB2YWx1
ZQotICAgIGpRdWVyeS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlID0gewotICAgICAgICBnZXQ6
IG5vZGVIb29rLmdldCwKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUg
KSB7Ci0gICAgICAgICAgICBpZiAoIHZhbHVlID09PSAiIiApIHsKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9ICJmYWxzZSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBub2RlSG9vay5zZXQo
IGVsZW0sIHZhbHVlLCBuYW1lICk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi0KLS8vIFNvbWUg
YXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCi1pZiAoICFqUXVlcnkuc3Vw
cG9ydC5ocmVmTm9ybWFsaXplZCApIHsKLSAgICBqUXVlcnkuZWFjaChbICJocmVmIiwgInNyYyIs
ICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgICAgICBqUXVl
cnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBu
YW1lIF0sIHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCAyICk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLWlmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxl
ICkgewotICAgIGpRdWVyeS5hdHRySG9va3Muc3R5bGUgPSB7Ci0gICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRoZSBjYXNl
IG9mIGVtcHR5IHN0cmluZwotICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGxvd2VyY2FzZSBz
aW5jZSBJRSB1cHBlcmNhc2VzIGNzcyBwcm9wZXJ0eSBuYW1lcwotICAgICAgICAgICAgcmV0dXJu
IGVsZW0uc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDsKLSAgICAgICAg
fSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKCBlbGVtLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSArICIiICk7Ci0gICAgICAgIH0KLSAg
ICB9OwotfQotCi0vLyBTYWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgcHJv
cGVydHkgb2YgYW4gb3B0aW9uCi0vLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5k
ZXggcHJvcGVydHkgZml4ZXMgaXQKLWlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkg
ewotICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnku
cHJvcEhvb2tzLnNlbGVjdGVkLCB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICBp
ZiAoIHBhcmVudCApIHsKLSAgICAgICAgICAgICAgICBwYXJlbnQuc2VsZWN0ZWRJbmRleDsKLQot
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCBvcHRn
cm91cHMsIHNlZSAjNTcwMQotICAgICAgICAgICAgICAgIGlmICggcGFyZW50LnBhcmVudE5vZGUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29k
aW5nCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5lbmN0eXBlICkgewotICAgIGpRdWVyeS5wcm9wRml4
LmVuY3R5cGUgPSAiZW5jb2RpbmciOwotfQotCi0vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0
dGVyL3NldHRlcgotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tPbiApIHsKLSAgICBqUXVlcnku
ZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGpRdWVy
eS52YWxIb29rc1sgdGhpcyBdID0gewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgaW4gV2Via2l0ICIi
IGlzIHJldHVybmVkIGluc3RlYWQgb2YgIm9uIiBpZiBhIHZhbHVlIGlzbid0IHNwZWNpZmllZAot
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA9PT0gbnVs
bCA/ICJvbiIgOiBlbGVtLnZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0p
OwotfQotalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewot
ICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnZhbEhv
b2tzWyB0aGlzIF0sIHsKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0g
ICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoZWxlbSku
dmFsKCksIHZhbHVlICkgPj0gMCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7
Ci19KTsKLXZhciByZm9ybUVsZW1zID0gL14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLAot
ICAgIHJ0eXBlbmFtZXNwYWNlID0gL14oW15cLl0qfCkoPzpcLiguKyl8KSQvLAotICAgIHJob3Zl
ckhhY2sgPSAvKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLAotICAgIHJrZXlFdmVudCA9IC9ea2V5
LywKLSAgICBybW91c2VFdmVudCA9IC9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLywKLSAg
ICByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywKLSAgICBo
b3ZlckhhY2sgPSBmdW5jdGlvbiggZXZlbnRzICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmV2
ZW50LnNwZWNpYWwuaG92ZXIgPyBldmVudHMgOiBldmVudHMucmVwbGFjZSggcmhvdmVySGFjaywg
Im1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiICk7Ci0gICAgfTsKLQotLyoKLSAqIEhlbHBlciBm
dW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGlu
dGVyZmFjZS4KLSAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3Ig
bWFueSBvZiB0aGUgaWRlYXMuCi0gKi8KLWpRdWVyeS5ldmVudCA9IHsKLQotICAgIGFkZDogZnVu
Y3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKLQotICAgICAg
ICB2YXIgZWxlbURhdGEsIGV2ZW50SGFuZGxlLCBldmVudHMsCi0gICAgICAgICAgICB0LCB0bnMs
IHR5cGUsIG5hbWVzcGFjZXMsIGhhbmRsZU9iaiwKLSAgICAgICAgICAgIGhhbmRsZU9iakluLCBo
YW5kbGVycywgc3BlY2lhbDsKLQotICAgICAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5v
RGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGFsbG93IHBsYWluIG9iamVjdHMgdGhvKQotICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAh
dHlwZXMgfHwgIWhhbmRsZXIgfHwgIShlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSApKSAp
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbGxlciBj
YW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxl
cgotICAgICAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKLSAgICAgICAgICAgIGhhbmRsZU9i
akluID0gaGFuZGxlcjsKLSAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVy
OwotICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3RvcjsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJ
RCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlcgotICAgICAgICBpZiAoICFoYW5kbGVyLmd1
aWQgKSB7Ci0gICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQg
bWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAotICAgICAgICBldmVudHMgPSBlbGVt
RGF0YS5ldmVudHM7Ci0gICAgICAgIGlmICggIWV2ZW50cyApIHsKLSAgICAgICAgICAgIGVsZW1E
YXRhLmV2ZW50cyA9IGV2ZW50cyA9IHt9OwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50SGFuZGxl
ID0gZWxlbURhdGEuaGFuZGxlOwotICAgICAgICBpZiAoICFldmVudEhhbmRsZSApIHsKLSAgICAg
ICAgICAgIGVsZW1EYXRhLmhhbmRsZSA9IGV2ZW50SGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2
ZW50LnRyaWdnZXIoKSBhbmQKLSAgICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNh
bGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5
cGVvZiBqUXVlcnkgIT09ICJ1bmRlZmluZWQiICYmICghZSB8fCBqUXVlcnkuZXZlbnQudHJpZ2dl
cmVkICE9PSBlLnR5cGUpID8KLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3Bh
dGNoLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMgKSA6Ci0gICAgICAgICAgICAg
ICAgICAgIHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAvLyBBZGQgZWxl
bSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUgZm4gdG8gcHJldmVudCBhIG1lbW9yeSBsZWFr
IHdpdGggSUUgbm9uLW5hdGl2ZSBldmVudHMKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0g
PSBlbGVtOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBz
ZXBhcmF0ZWQgYnkgYSBzcGFjZQotICAgICAgICAvLyBqUXVlcnkoLi4uKS5iaW5kKCJtb3VzZW92
ZXIgbW91c2VvdXQiLCBmbik7Ci0gICAgICAgIHR5cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFj
ayh0eXBlcykgKS5zcGxpdCggIiAiICk7Ci0gICAgICAgIGZvciAoIHQgPSAwOyB0IDwgdHlwZXMu
bGVuZ3RoOyB0KysgKSB7Ci0KLSAgICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMo
IHR5cGVzW3RdICkgfHwgW107Ci0gICAgICAgICAgICB0eXBlID0gdG5zWzFdOwotICAgICAgICAg
ICAgbmFtZXNwYWNlcyA9ICggdG5zWzJdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQot
ICAgICAgICAgICAgLy8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFs
IGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCi0gICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLQotICAgICAgICAgICAgLy8g
SWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90
aGVyd2lzZSBnaXZlbiB0eXBlCi0gICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNp
YWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7Ci0KLSAgICAgICAg
ICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKLSAgICAgICAg
ICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCi0gICAg
ICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycwotICAg
ICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogdHlwZSwKLSAgICAgICAgICAgICAgICBvcmlnVHlwZTogdG5zWzFdLAotICAgICAgICAgICAg
ICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKLSAgICAg
ICAgICAgICAgICBndWlkOiBoYW5kbGVyLmd1aWQsCi0gICAgICAgICAgICAgICAgc2VsZWN0b3I6
IHNlbGVjdG9yLAotICAgICAgICAgICAgICAgIG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1
ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCi0gICAgICAgICAg
ICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIi4iKQotICAgICAgICAgICAgfSwgaGFu
ZGxlT2JqSW4gKTsKLQotICAgICAgICAgICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1
ZSBpZiB3ZSdyZSB0aGUgZmlyc3QKLSAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBl
IF07Ci0gICAgICAgICAgICBpZiAoICFoYW5kbGVycyApIHsKLSAgICAgICAgICAgICAgICBoYW5k
bGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVs
ZWdhdGVDb3VudCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBhZGRFdmVudExp
c3RlbmVyL2F0dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMg
ZmFsc2UKLSAgICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0
dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2Ug
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5kbGVy
IHRvIHRoZSBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExp
c3RlbmVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVy
KCB0eXBlLCBldmVudEhhbmRsZSwgZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICggc3BlY2lhbC5hZGQgKSB7Ci0gICAgICAgICAgICAgICAgc3BlY2lhbC5hZGQuY2FsbCgg
ZWxlbSwgaGFuZGxlT2JqICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVPYmouaGFu
ZGxlci5ndWlkICkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlk
ID0gaGFuZGxlci5ndWlkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMg
aW4gZnJvbnQKLSAgICAgICAgICAgIGlmICggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAg
aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiAp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBo
YW5kbGVPYmogKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBv
ZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlv
bgotICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBp
biBJRQotICAgICAgICBlbGVtID0gbnVsbDsKLSAgICB9LAotCi0gICAgZ2xvYmFsOiB7fSwKLQot
ICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAot
ICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFw
cGVkVHlwZXMgKSB7Ci0KLSAgICAgICAgdmFyIHQsIHRucywgdHlwZSwgb3JpZ1R5cGUsIG5hbWVz
cGFjZXMsIG9yaWdDb3VudCwKLSAgICAgICAgICAgIGosIGV2ZW50cywgc3BlY2lhbCwgZXZlbnRU
eXBlLCBoYW5kbGVPYmosCi0gICAgICAgICAgICBlbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBl
bGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICk7Ci0KLSAgICAgICAgaWYgKCAhZWxlbURhdGEg
fHwgIShldmVudHMgPSBlbGVtRGF0YS5ldmVudHMpICkgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0
eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZAotICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmltKCBo
b3ZlckhhY2soIHR5cGVzIHx8ICIiICkgKS5zcGxpdCgiICIpOwotICAgICAgICBmb3IgKCB0ID0g
MDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgewotICAgICAgICAgICAgdG5zID0gcnR5cGVuYW1l
c3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsKLSAgICAgICAgICAgIHR5cGUgPSBvcmlnVHlw
ZSA9IHRuc1sxXTsKLSAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0bnNbMl07Ci0KLSAgICAgICAg
ICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQp
IGZvciB0aGUgZWxlbWVudAotICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9y
LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKLSAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yPyBzcGVjaWFs
LmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOwotICAgICAgICAgICAg
ZXZlbnRUeXBlID0gZXZlbnRzWyB0eXBlIF0gfHwgW107Ci0gICAgICAgICAgICBvcmlnQ291bnQg
PSBldmVudFR5cGUubGVuZ3RoOwotICAgICAgICAgICAgbmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMg
PyBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIG5hbWVzcGFjZXMuc3BsaXQoIi4iKS5zb3J0KCkuam9p
bigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiKSA6IG51bGw7Ci0KLSAgICAgICAgICAgIC8v
IFJlbW92ZSBtYXRjaGluZyBldmVudHMKLSAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZXZl
bnRUeXBlLmxlbmd0aDsgaisrICkgewotICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50
VHlwZVsgaiBdOwotCi0gICAgICAgICAgICAgICAgaWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdU
eXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJgotICAgICAgICAgICAgICAgICAgICAgKCAh
aGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICggIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy50ZXN0KCBoYW5kbGVPYmou
bmFtZXNwYWNlICkgKSAmJgotICAgICAgICAgICAgICAgICAgICAgKCAhc2VsZWN0b3IgfHwgc2Vs
ZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5k
bGVPYmouc2VsZWN0b3IgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLnNwbGlj
ZSggai0tLCAxICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmouc2VsZWN0
b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuZGVsZWdhdGVDb3VudC0t
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lh
bC5yZW1vdmUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxs
KCBlbGVtLCBoYW5kbGVPYmogKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZl
bnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBl
eGlzdAotICAgICAgICAgICAgLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJz
aW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCi0gICAgICAgICAg
ICBpZiAoIGV2ZW50VHlwZS5sZW5ndGggPT09IDAgJiYgb3JpZ0NvdW50ICE9PSBldmVudFR5cGUu
bGVuZ3RoICkgewotICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3Bl
Y2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9
PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxl
bSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWQK
LSAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgZWxlbURhdGEuaGFuZGxlOwotCi0gICAgICAgICAgICAvLyByZW1vdmVEYXRh
IGFsc28gY2hlY2tzIGZvciBlbXB0aW5lc3MgYW5kIGNsZWFycyB0aGUgZXhwYW5kbyBpZiBlbXB0
eQotICAgICAgICAgICAgLy8gc28gdXNlIGl0IGluc3RlYWQgb2YgZGVsZXRlCi0gICAgICAgICAg
ICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImV2ZW50cyIsIHRydWUgKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICAvLyBFdmVudHMgdGhhdCBhcmUgc2FmZSB0byBzaG9ydC1jaXJjdWl0IGlm
IG5vIGhhbmRsZXJzIGFyZSBhdHRhY2hlZC4KLSAgICAvLyBOYXRpdmUgRE9NIGV2ZW50cyBzaG91
bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZlIGlubGluZSBoYW5kbGVycy4KLSAgICBjdXN0
b21FdmVudDogewotICAgICAgICAiZ2V0RGF0YSI6IHRydWUsCi0gICAgICAgICJzZXREYXRhIjog
dHJ1ZSwKLSAgICAgICAgImNoYW5nZURhdGEiOiB0cnVlCi0gICAgfSwKLQotICAgIHRyaWdnZXI6
IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewotICAgICAgICAv
LyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgICAgICBpZiAo
IGVsZW0gJiYgKGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCkgKSB7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFdmVudCBvYmpl
Y3Qgb3IgZXZlbnQgdHlwZQotICAgICAgICB2YXIgY2FjaGUsIGV4Y2x1c2l2ZSwgaSwgY3VyLCBv
bGQsIG9udHlwZSwgc3BlY2lhbCwgaGFuZGxlLCBldmVudFBhdGgsIGJ1YmJsZVR5cGUsCi0gICAg
ICAgICAgICB0eXBlID0gZXZlbnQudHlwZSB8fCBldmVudCwKLSAgICAgICAgICAgIG5hbWVzcGFj
ZXMgPSBbXTsKLQotICAgICAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsg
ZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKLSAgICAgICAgaWYgKCByZm9j
dXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoICIh
IiApID49IDAgKSB7Ci0gICAgICAgICAgICAvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIgb25s
eSBmb3IgdGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3BhY2VzKQotICAgICAgICAgICAgdHlwZSA9
IHR5cGUuc2xpY2UoMCwgLTEpOwotICAgICAgICAgICAgZXhjbHVzaXZlID0gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICggdHlwZS5pbmRleE9mKCAiLiIgKSA+PSAwICkgewotICAgICAg
ICAgICAgLy8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZl
bnQgdHlwZSBpbiBoYW5kbGUoKQotICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQo
Ii4iKTsKLSAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7Ci0gICAgICAgICAg
ICBuYW1lc3BhY2VzLnNvcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggKCFlbGVtIHx8
IGpRdWVyeS5ldmVudC5jdXN0b21FdmVudFsgdHlwZSBdKSAmJiAhalF1ZXJ5LmV2ZW50Lmdsb2Jh
bFsgdHlwZSBdICkgewotICAgICAgICAgICAgLy8gTm8galF1ZXJ5IGhhbmRsZXJzIGZvciB0aGlz
IGV2ZW50IHR5cGUsIGFuZCBpdCBjYW4ndCBoYXZlIGlubGluZSBoYW5kbGVycwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFu
IEV2ZW50LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKLSAgICAgICAgZXZl
bnQgPSB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiID8KLSAgICAgICAgICAgIC8vIGpRdWVyeS5F
dmVudCBvYmplY3QKLSAgICAgICAgICAgIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8gZXZlbnQg
OgotICAgICAgICAgICAgLy8gT2JqZWN0IGxpdGVyYWwKLSAgICAgICAgICAgIG5ldyBqUXVlcnku
RXZlbnQoIHR5cGUsIGV2ZW50ICkgOgotICAgICAgICAgICAgLy8gSnVzdCB0aGUgZXZlbnQgdHlw
ZSAoc3RyaW5nKQotICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSApOwotCi0gICAg
ICAgIGV2ZW50LnR5cGUgPSB0eXBlOwotICAgICAgICBldmVudC5pc1RyaWdnZXIgPSB0cnVlOwot
ICAgICAgICBldmVudC5leGNsdXNpdmUgPSBleGNsdXNpdmU7Ci0gICAgICAgIGV2ZW50Lm5hbWVz
cGFjZSA9IG5hbWVzcGFjZXMuam9pbiggIi4iICk7Ci0gICAgICAgIGV2ZW50Lm5hbWVzcGFjZV9y
ZSA9IGV2ZW50Lm5hbWVzcGFjZT8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpv
aW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsOwotICAgICAgICBvbnR5cGUg
PSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCA/ICJvbiIgKyB0eXBlIDogIiI7Ci0KLSAgICAgICAg
Ly8gSGFuZGxlIGEgZ2xvYmFsIHRyaWdnZXIKLSAgICAgICAgaWYgKCAhZWxlbSApIHsKLQotICAg
ICAgICAgICAgLy8gVE9ETzogU3RvcCB0YXVudGluZyB0aGUgZGF0YSBjYWNoZTsgcmVtb3ZlIGds
b2JhbCBldmVudHMgYW5kIGFsd2F5cyBhdHRhY2ggdG8gZG9jdW1lbnQKLSAgICAgICAgICAgIGNh
Y2hlID0galF1ZXJ5LmNhY2hlOwotICAgICAgICAgICAgZm9yICggaSBpbiBjYWNoZSApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIGNhY2hlWyBpIF0uZXZlbnRzICYmIGNhY2hlWyBpIF0uZXZlbnRz
WyB0eXBlIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBl
dmVudCwgZGF0YSwgY2FjaGVbIGkgXS5oYW5kbGUuZWxlbSwgdHJ1ZSApOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZAot
ICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7Ci0gICAgICAgIGlmICggIWV2ZW50LnRh
cmdldCApIHsKLSAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQs
IGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0Ci0gICAgICAgIGRhdGEgPSBkYXRhICE9IG51
bGwgPyBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgOiBbXTsKLSAgICAgICAgZGF0YS51bnNoaWZ0
KCBldmVudCApOwotCi0gICAgICAgIC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0
c2lkZSB0aGUgbGluZXMKLSAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0
eXBlIF0gfHwge307Ci0gICAgICAgIGlmICggc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJp
Z2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBw
YXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQotICAgICAgICAvLyBC
dWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwg
b3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQotICAgICAgICBldmVudFBhdGggPSBbWyBlbGVtLCBz
cGVjaWFsLmJpbmRUeXBlIHx8IHR5cGUgXV07Ci0gICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAm
JiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0KLSAg
ICAgICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOwotICAg
ICAgICAgICAgY3VyID0gcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSA/IGVs
ZW0gOiBlbGVtLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICBmb3IgKCBvbGQgPSBlbGVtOyBjdXI7
IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNo
KFsgY3VyLCBidWJibGVUeXBlIF0pOwotICAgICAgICAgICAgICAgIG9sZCA9IGN1cjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBk
b2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCi0gICAgICAgICAg
ICBpZiAoIG9sZCA9PT0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkgKSB7Ci0gICAg
ICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goWyBvbGQuZGVmYXVsdFZpZXcgfHwgb2xkLnBhcmVu
dFdpbmRvdyB8fCB3aW5kb3csIGJ1YmJsZVR5cGUgXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCi0gICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgZXZlbnRQYXRoLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlv
blN0b3BwZWQoKTsgaSsrICkgewotCi0gICAgICAgICAgICBjdXIgPSBldmVudFBhdGhbaV1bMF07
Ci0gICAgICAgICAgICBldmVudC50eXBlID0gZXZlbnRQYXRoW2ldWzFdOwotCi0gICAgICAgICAg
ICBoYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50
LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwgImhhbmRsZSIgKTsKLSAgICAgICAgICAgIGlm
ICggaGFuZGxlICkgewotICAgICAgICAgICAgICAgIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhcmUg
SlMgZnVuY3Rpb24gYW5kIG5vdCBhIGpRdWVyeSBoYW5kbGVyCi0gICAgICAgICAgICBoYW5kbGUg
PSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKLSAgICAgICAgICAgIGlmICggaGFuZGxlICYmIGpR
dWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5kbGUuYXBwbHkgJiYgaGFuZGxlLmFwcGx5KCBj
dXIsIGRhdGEgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBldmVudC50eXBlID0g
dHlwZTsKLQotICAgICAgICAvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlv
biwgZG8gaXQgbm93Ci0gICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZh
dWx0UHJldmVudGVkKCkgKSB7Ci0KLSAgICAgICAgICAgIGlmICggKCFzcGVjaWFsLl9kZWZhdWx0
IHx8IHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGVsZW0ub3duZXJEb2N1bWVudCwgZGF0YSApID09
PSBmYWxzZSkgJiYKLSAgICAgICAgICAgICAgICAhKHR5cGUgPT09ICJjbGljayIgJiYgalF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsK
LQotICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFy
Z2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4KLSAgICAgICAgICAgICAg
ICAvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24oKSBjaGVjayBoZXJlIGJlY2F1c2UgSUU2Lzcg
ZmFpbHMgdGhhdCB0ZXN0LgotICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIGRlZmF1bHQgYWN0
aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MCkK
LSAgICAgICAgICAgICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMvYmx1ciB0byBoaWRkZW4gZWxl
bWVudCAoIzE0ODYpCi0gICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgZWxlbVsgdHlwZSBd
ICYmICgodHlwZSAhPT0gImZvY3VzIiAmJiB0eXBlICE9PSAiYmx1ciIpIHx8IGV2ZW50LnRhcmdl
dC5vZmZzZXRXaWR0aCAhPT0gMCkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hl
biB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgb2xkID0gZWxl
bVsgb250eXBlIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG51bGw7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2Yg
dGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZQotICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgdHlwZSBdKCk7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG9sZDsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7Ci0gICAgfSwKLQotICAgIGRpc3Bh
dGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0KLSAgICAgICAgLy8gTWFrZSBhIHdyaXRhYmxlIGpR
dWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0Ci0gICAgICAgIGV2ZW50ID0g
alF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgfHwgd2luZG93LmV2ZW50ICk7Ci0KLSAgICAgICAgdmFy
IGksIGosIGN1ciwgcmV0LCBzZWxNYXRjaCwgbWF0Y2hlZCwgbWF0Y2hlcywgaGFuZGxlT2JqLCBz
ZWwsIHJlbGF0ZWQsCi0gICAgICAgICAgICBoYW5kbGVycyA9ICggKGpRdWVyeS5fZGF0YSggdGhp
cywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10pLAotICAgICAgICAgICAg
ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsCi0gICAgICAgICAgICBhcmdz
ID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKLSAgICAgICAgICAgIHJ1bl9hbGwgPSAh
ZXZlbnQuZXhjbHVzaXZlICYmICFldmVudC5uYW1lc3BhY2UsCi0gICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fSwKLSAgICAgICAgICAg
IGhhbmRsZXJRdWV1ZSA9IFtdOwotCi0gICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5F
dmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50Ci0gICAgICAgIGFy
Z3NbMF0gPSBldmVudDsKLSAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwotCi0g
ICAgICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwg
YW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKLSAgICAgICAgaWYgKCBzcGVjaWFsLnByZURpc3Bh
dGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2Ug
KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1p
bmUgaGFuZGxlcnMgdGhhdCBzaG91bGQgcnVuIGlmIHRoZXJlIGFyZSBkZWxlZ2F0ZWQgZXZlbnRz
Ci0gICAgICAgIC8vIEF2b2lkIG5vbi1sZWZ0LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3ggKCMz
ODYxKQotICAgICAgICBpZiAoIGRlbGVnYXRlQ291bnQgJiYgIShldmVudC5idXR0b24gJiYgZXZl
bnQudHlwZSA9PT0gImNsaWNrIikgKSB7Ci0KLSAgICAgICAgICAgIGZvciAoIGN1ciA9IGV2ZW50
LnRhcmdldDsgY3VyICE9IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7Ci0K
LSAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyAoT05MWSkgb24gZGlzYWJs
ZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCi0gICAgICAgICAgICAg
ICAgaWYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2VsTWF0Y2ggPSB7fTsKLSAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlcyA9IFtdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRl
bGVnYXRlQ291bnQ7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9
IGhhbmRsZXJzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWwgPSBoYW5kbGVPYmou
c2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBd
ID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsTWF0Y2hb
IHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBb
IGN1ciBdICkubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzZWxNYXRjaFsgc2VsIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIG1h
dGNoZXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1
c2goeyBlbGVtOiBjdXIsIG1hdGNoZXM6IG1hdGNoZXMgfSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCi0gICAgICAg
IGlmICggaGFuZGxlcnMubGVuZ3RoID4gZGVsZWdhdGVDb3VudCApIHsKLSAgICAgICAgICAgIGhh
bmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhpcywgbWF0Y2hlczogaGFuZGxlcnMuc2xpY2UoIGRl
bGVnYXRlQ291bnQgKSB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJ1biBkZWxlZ2F0ZXMg
Zmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCi0gICAg
ICAgIGZvciAoIGkgPSAwOyBpIDwgaGFuZGxlclF1ZXVlLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9w
YWdhdGlvblN0b3BwZWQoKTsgaSsrICkgewotICAgICAgICAgICAgbWF0Y2hlZCA9IGhhbmRsZXJR
dWV1ZVsgaSBdOwotICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxl
bTsKLQotICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBtYXRjaGVkLm1hdGNoZXMubGVuZ3Ro
ICYmICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOyBqKysgKSB7Ci0gICAg
ICAgICAgICAgICAgaGFuZGxlT2JqID0gbWF0Y2hlZC5tYXRjaGVzWyBqIF07Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgYmUgbm9uLWV4Y2x1c2l2
ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCi0gICAgICAgICAgICAgICAgLy8gMikgaGF2ZSBu
YW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50
IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCi0gICAgICAgICAgICAgICAgaWYgKCBydW5f
YWxsIHx8ICghZXZlbnQubmFtZXNwYWNlICYmICFoYW5kbGVPYmoubmFtZXNwYWNlKSB8fCBldmVu
dC5uYW1lc3BhY2VfcmUgJiYgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1l
c3BhY2UgKSApIHsKLQotICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxlT2Jq
LmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsK
LQotICAgICAgICAgICAgICAgICAgICByZXQgPSAoIChqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFu
ZGxlT2JqLm9yaWdUeXBlIF0gfHwge30pLmhhbmRsZSB8fCBoYW5kbGVPYmouaGFuZGxlciApCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gcmV0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZXQgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBl
ZCB0eXBlCi0gICAgICAgIGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7Ci0gICAgICAgICAg
ICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKLSAgICB9LAotCi0gICAgLy8gSW5jbHVkZXMg
c29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKLSAgICAv
LyAqKiogYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50ICBhcmUgbm90
IG5vcm1hbGl6ZWQsIG5vbi1XM0MsIGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiAxLjgg
KioqCi0gICAgcHJvcHM6ICJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1l
bnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQ
aGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3
IHdoaWNoIi5zcGxpdCgiICIpLAotCi0gICAgZml4SG9va3M6IHt9LAotCi0gICAga2V5SG9va3M6
IHsKLSAgICAgICAgcHJvcHM6ICJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIp
LAotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7Ci0KLSAgICAg
ICAgICAgIC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwotICAgICAgICAgICAgaWYgKCBldmVu
dC53aGljaCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gb3JpZ2lu
YWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29k
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50OwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIG1vdXNlSG9va3M6IHsKLSAgICAgICAgcHJvcHM6ICJidXR0b24gYnV0
dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBh
Z2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksCi0gICAgICAgIGZpbHRl
cjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLSAgICAgICAgICAgIHZhciBldmVudERv
YywgZG9jLCBib2R5LAotICAgICAgICAgICAgICAgIGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwK
LSAgICAgICAgICAgICAgICBmcm9tRWxlbWVudCA9IG9yaWdpbmFsLmZyb21FbGVtZW50OwotCi0g
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kg
YXZhaWxhYmxlCi0gICAgICAgICAgICBpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2lu
YWwuY2xpZW50WCAhPSBudWxsICkgewotICAgICAgICAgICAgICAgIGV2ZW50RG9jID0gZXZlbnQu
dGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgZG9jID0g
ZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAgICAgICAgIGJvZHkgPSBldmVudERv
Yy5ib2R5OwotCi0gICAgICAgICAgICAgICAgZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRY
ICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwg
MCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQg
fHwgMCApOwotICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSAr
ICggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAg
KSAtICggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8
IDAgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHJlbGF0ZWRUYXJnZXQs
IGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBm
cm9tRWxlbWVudCApIHsKLSAgICAgICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJv
bUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVt
ZW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGNsaWNr
OiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0Ci0gICAgICAgICAgICAvLyBO
b3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAotICAgICAgICAg
ICAgaWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAg
ICAgICAgICAgZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8g
MyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZml4OiBmdW5jdGlv
biggZXZlbnQgKSB7Ci0gICAgICAgIGlmICggZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUg
YSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6ZSBzb21lIHBy
b3BlcnRpZXMKLSAgICAgICAgdmFyIGksIHByb3AsCi0gICAgICAgICAgICBvcmlnaW5hbEV2ZW50
ID0gZXZlbnQsCi0gICAgICAgICAgICBmaXhIb29rID0galF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBl
dmVudC50eXBlIF0gfHwge30sCi0gICAgICAgICAgICBjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRo
aXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzOwotCi0gICAgICAg
IGV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7Ci0KLSAgICAgICAgZm9yICgg
aSA9IGNvcHkubGVuZ3RoOyBpOyApIHsKLSAgICAgICAgICAgIHByb3AgPSBjb3B5WyAtLWkgXTsK
LSAgICAgICAgICAgIGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGaXggdGFyZ2V0IHByb3BlcnR5LCBpZiBuZWNlc3NhcnkgKCMx
OTI1LCBJRSA2LzcvOCAmIFNhZmFyaTIpCi0gICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsK
LSAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3JjRWxlbWVudCB8fCBk
b2N1bWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEg
dGV4dCBub2RlICgjNTA0LCBTYWZhcmkpCi0gICAgICAgIGlmICggZXZlbnQudGFyZ2V0Lm5vZGVU
eXBlID09PSAzICkgewotICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBh
cmVudE5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3IgbW91c2Uva2V5IGV2ZW50cywg
bWV0YUtleT09ZmFsc2UgaWYgaXQncyB1bmRlZmluZWQgKCMzMzY4LCAjMTEzMjg7IElFNi83Lzgp
Ci0gICAgICAgIGV2ZW50Lm1ldGFLZXkgPSAhIWV2ZW50Lm1ldGFLZXk7Ci0KLSAgICAgICAgcmV0
dXJuIGZpeEhvb2suZmlsdGVyPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQg
KSA6IGV2ZW50OwotICAgIH0sCi0KLSAgICBzcGVjaWFsOiB7Ci0gICAgICAgIGxvYWQ6IHsKLSAg
ICAgICAgICAgIC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnVi
YmxpbmcgdG8gd2luZG93LmxvYWQKLSAgICAgICAgICAgIG5vQnViYmxlOiB0cnVlCi0gICAgICAg
IH0sCi0KLSAgICAgICAgZm9jdXM6IHsKLSAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3Vz
aW4iCi0gICAgICAgIH0sCi0gICAgICAgIGJsdXI6IHsKLSAgICAgICAgICAgIGRlbGVnYXRlVHlw
ZTogImZvY3Vzb3V0IgotICAgICAgICB9LAotCi0gICAgICAgIGJlZm9yZXVubG9hZDogewotICAg
ICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSAp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBzcGVjaWFsIGNh
c2Ugb24gd2luZG93cwotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlz
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBldmVudEhh
bmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0
ZWFyZG93bjogZnVuY3Rpb24oIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgewotICAgICAgICAg
ICAgICAgIGlmICggdGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBudWxsOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBzaW11bGF0ZTog
ZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50LCBidWJibGUgKSB7Ci0gICAgICAgIC8vIFBpZ2d5
YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KLSAgICAg
ICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9u
LCBidXQgaWYgdGhlCi0gICAgICAgIC8vIHNpbXVsYXRlZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0
IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9yLgotICAgICAgICB2YXIgZSA9IGpRdWVy
eS5leHRlbmQoCi0gICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCksCi0gICAgICAgICAgICBl
dmVudCwKLSAgICAgICAgICAgIHsgdHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICBpc1NpbXVs
YXRlZDogdHJ1ZSwKLSAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiB7fQotICAgICAgICAg
ICAgfQotICAgICAgICApOwotICAgICAgICBpZiAoIGJ1YmJsZSApIHsKLSAgICAgICAgICAgIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKLSAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi0vLyBTb21l
IHBsdWdpbnMgYXJlIHVzaW5nLCBidXQgaXQncyB1bmRvY3VtZW50ZWQvZGVwcmVjYXRlZCBhbmQg
d2lsbCBiZSByZW1vdmVkLgotLy8gVGhlIDEuNyBzcGVjaWFsIGV2ZW50IGludGVyZmFjZSBzaG91
bGQgcHJvdmlkZSBhbGwgdGhlIGhvb2tzIG5lZWRlZCBub3cuCi1qUXVlcnkuZXZlbnQuaGFuZGxl
ID0galF1ZXJ5LmV2ZW50LmRpc3BhdGNoOwotCi1qUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyID8KLSAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxl
ICkgewotICAgICAgICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAg
ICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlLCBmYWxzZSApOwotICAg
ICAgICB9Ci0gICAgfSA6Ci0gICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKLSAg
ICAgICAgdmFyIG5hbWUgPSAib24iICsgdHlwZTsKLQotICAgICAgICBpZiAoIGVsZW0uZGV0YWNo
RXZlbnQgKSB7Ci0KLSAgICAgICAgICAgIC8vICM4NTQ1LCAjNzA1NCwgcHJldmVudGluZyBtZW1v
cnkgbGVha3MgZm9yIGN1c3RvbSBldmVudHMgaW4gSUU2LTgKLSAgICAgICAgICAgIC8vIGRldGFj
aEV2ZW50IG5lZWRlZCBwcm9wZXJ0eSBvbiBlbGVtZW50LCBieSBuYW1lIG9mIHRoYXQgZXZlbnQs
IHRvIHByb3Blcmx5IGV4cG9zZSBpdCB0byBHQwotICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxl
bVsgbmFtZSBdID09PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICBlbGVtWyBuYW1l
IF0gPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbGVtLmRldGFjaEV2ZW50
KCBuYW1lLCBoYW5kbGUgKTsKLSAgICAgICAgfQotICAgIH07Ci0KLWpRdWVyeS5FdmVudCA9IGZ1
bmN0aW9uKCBzcmMsIHByb3BzICkgewotICAgIC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91
dCB0aGUgJ25ldycga2V5d29yZAotICAgIGlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2
ZW50KSApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsK
LSAgICB9Ci0KLSAgICAvLyBFdmVudCBvYmplY3QKLSAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSAp
IHsKLSAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOwotICAgICAgICB0aGlzLnR5cGUg
PSBzcmMudHlwZTsKLQotICAgICAgICAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50
IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAotICAgICAgICAvLyBieSBhIGhhbmRs
ZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KLSAgICAg
ICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNy
Yy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKLSAgICAgICAgICAgIHNyYy5nZXRQcmV2ZW50RGVm
YXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZh
bHNlOwotCi0gICAgLy8gRXZlbnQgdHlwZQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMudHlw
ZSA9IHNyYzsKLSAgICB9Ci0KLSAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0
aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAotICAgIGlmICggcHJvcHMgKSB7Ci0gICAgICAgIGpR
dWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgdGlt
ZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKLSAgICB0aGlzLnRpbWVT
dGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKLQotICAgIC8vIE1h
cmsgaXQgYXMgZml4ZWQKLSAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKLX07Ci0K
LWZ1bmN0aW9uIHJldHVybkZhbHNlKCkgewotICAgIHJldHVybiBmYWxzZTsKLX0KLWZ1bmN0aW9u
IHJldHVyblRydWUoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGpRdWVyeS5FdmVudCBp
cyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFu
Z3VhZ2UgQmluZGluZwotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwt
My1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCi1qUXVlcnkuRXZlbnQu
cHJvdG90eXBlID0gewotICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwotCi0gICAgICAgIHZhciBlID0g
dGhpcy5vcmlnaW5hbEV2ZW50OwotICAgICAgICBpZiAoICFlICkgewotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1
biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLSAgICAgICAgaWYgKCBlLnByZXZlbnREZWZhdWx0
ICkgewotICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgIC8vIG90aGVy
d2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0
byBmYWxzZSAoSUUpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlLnJldHVyblZhbHVl
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwot
Ci0gICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotICAgICAgICBpZiAoICFlICkg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHN0b3BQcm9w
YWdhdGlvbiBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAotICAgICAgICBpZiAo
IGUuc3RvcFByb3BhZ2F0aW9uICkgewotICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK
LSAgICAgICAgfQotICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSBjYW5jZWxCdWJibGUgcHJv
cGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUgKElFKQotICAgICAgICBlLmNhbmNl
bEJ1YmJsZSA9IHRydWU7Ci0gICAgfSwKLSAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1
bmN0aW9uKCkgewotICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0g
cmV0dXJuVHJ1ZTsKLSAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9LAotICAg
IGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCi0gICAgaXNQcm9wYWdhdGlvblN0b3Bw
ZWQ6IHJldHVybkZhbHNlLAotICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1
cm5GYWxzZQotfTsKLQotLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1v
dXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCi1qUXVlcnkuZWFjaCh7Ci0gICAgbW91
c2VlbnRlcjogIm1vdXNlb3ZlciIsCi0gICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IgotfSwgZnVu
Y3Rpb24oIG9yaWcsIGZpeCApIHsKLSAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0g
ewotICAgICAgICBkZWxlZ2F0ZVR5cGU6IGZpeCwKLSAgICAgICAgYmluZFR5cGU6IGZpeCwKLQot
ICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgIHZhciByZXQs
Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcywKLSAgICAgICAgICAgICAgICByZWxhdGVk
ID0gZXZlbnQucmVsYXRlZFRhcmdldCwKLSAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVu
dC5oYW5kbGVPYmosCi0gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmouc2VsZWN0
b3I7Ci0KLSAgICAgICAgICAgIC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxl
ciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KLSAgICAgICAgICAgIC8vIE5COiBO
byByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2lu
ZG93Ci0gICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0YXJnZXQgJiYg
IWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkpICkgewotICAgICAgICAgICAgICAg
IGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7Ci0gICAgICAgICAgICAgICAgcmV0ID0g
aGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAg
ICAgIGV2ZW50LnR5cGUgPSBmaXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmV0OwotICAgICAgICB9Ci0gICAgfTsKLX0pOwotCi0vLyBJRSBzdWJtaXQgZGVsZWdhdGlvbgot
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxlcyApIHsKLQotICAgIGpRdWVyeS5ldmVu
dC5zcGVjaWFsLnN1Ym1pdCA9IHsKLSAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMK
LSAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIExhenktYWRkIGEgc3VibWl0IGhhbmRsZXIgd2hlbiBhIGRlc2NlbmRhbnQgZm9ybSBtYXkg
cG90ZW50aWFsbHkgYmUgc3VibWl0dGVkCi0gICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0
aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm9kZSBuYW1lIGNoZWNrIGF2b2lkcyBhIFZNTC1yZWxhdGVkIGNy
YXNoIGluIElFICgjOTgwNykKLSAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICBmb3JtID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQi
ICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS5mb3JtIDogdW5k
ZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3Jt
LCAiX3N1Ym1pdF9hdHRhY2hlZCIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmFkZCggZm9ybSwgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3N1Ym1pdF9idWJibGUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBmb3Jt
LCAiX3N1Ym1pdF9hdHRhY2hlZCIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIC8vIHJldHVybiB1bmRlZmluZWQgc2luY2Ugd2UgZG9uJ3Qg
bmVlZCBhbiBldmVudCBsaXN0ZW5lcgotICAgICAgICB9LAotCi0gICAgICAgIHBvc3REaXNwYXRj
aDogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAgLy8gSWYgZm9ybSB3YXMgc3VibWl0
dGVkIGJ5IHRoZSB1c2VyLCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSB0cmVlCi0gICAgICAgICAg
ICBpZiAoIGV2ZW50Ll9zdWJtaXRfYnViYmxlICkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBl
dmVudC5fc3VibWl0X2J1YmJsZTsKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9k
ZSAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuc2ltdWxhdGUoICJzdWJtaXQiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHRl
YXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBk
ZWxlZ2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCi0gICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2Rl
TmFtZSggdGhpcywgImZvcm0iICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZW1vdmUgZGVsZWdhdGVkIGhhbmRsZXJz
OyBjbGVhbkRhdGEgZXZlbnR1YWxseSByZWFwcyBzdWJtaXQgaGFuZGxlcnMgYXR0YWNoZWQgYWJv
dmUKLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIuX3N1Ym1pdCIgKTsK
LSAgICAgICAgfQotICAgIH07Ci19Ci0KLS8vIElFIGNoYW5nZSBkZWxlZ2F0aW9uIGFuZCBjaGVj
a2JveC9yYWRpbyBmaXgKLWlmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMgKSB7Ci0K
LSAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7Ci0KLSAgICAgICAgc2V0dXA6IGZ1
bmN0aW9uKCkgewotCi0gICAgICAgICAgICBpZiAoIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2Rl
TmFtZSApICkgewotICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgZmlyZSBjaGFuZ2Ugb24g
YSBjaGVjay9yYWRpbyB1bnRpbCBibHVyOyB0cmlnZ2VyIGl0IG9uIGNsaWNrCi0gICAgICAgICAg
ICAgICAgLy8gYWZ0ZXIgYSBwcm9wZXJ0eWNoYW5nZS4gRWF0IHRoZSBibHVyLWNoYW5nZSBpbiBz
cGVjaWFsLmNoYW5nZS5oYW5kbGUuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBzdGlsbCBmaXJl
cyBvbmNoYW5nZSBhIHNlY29uZCB0aW1lIGZvciBjaGVjay9yYWRpbyBhZnRlciBibHVyLgotICAg
ICAgICAgICAgICAgIGlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giIHx8IHRoaXMudHlwZSA9
PT0gInJhZGlvIiApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhp
cywgInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lID09
PSAiY2hlY2tlZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVzdF9j
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJj
bGljay5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB0aGlzLl9qdXN0X2NoYW5nZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9qdXN0X2NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IHRy
aWdnZXJlZCwgc2ltdWxhdGVkIGNoYW5nZSBldmVudHMgKCMxMTUwMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMsIGV2ZW50LCB0
cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBE
ZWxlZ2F0ZWQgZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdlIGhhbmRsZXIgb24gZGVzY2VuZGFudCBp
bnB1dHMKLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJiZWZvcmVhY3RpdmF0
ZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBl
LnRhcmdldDsKLQotICAgICAgICAgICAgICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5v
ZGVOYW1lICkgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfYXR0YWNoZWQiICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGVsZW0sICJjaGFuZ2UuX2No
YW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZlbnQuaXNUcmlnZ2Vy
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSgg
ImNoYW5nZSIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfYXR0YWNoZWQiLCB0cnVlICk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaGFuZGxl
OiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbSA9IGV2ZW50LnRhcmdl
dDsKLQotICAgICAgICAgICAgLy8gU3dhbGxvdyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNo
ZWNrYm94L3JhZGlvLCB3ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGVtIGFib3ZlCi0gICAgICAgICAg
ICBpZiAoIHRoaXMgIT09IGVsZW0gfHwgZXZlbnQuaXNTaW11bGF0ZWQgfHwgZXZlbnQuaXNUcmln
Z2VyIHx8IChlbGVtLnR5cGUgIT09ICJyYWRpbyIgJiYgZWxlbS50eXBlICE9PSAiY2hlY2tib3gi
KSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuaGFuZGxlT2JqLmhhbmRsZXIuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAg
ICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1v
dmUoIHRoaXMsICIuX2NoYW5nZSIgKTsKLQotICAgICAgICAgICAgcmV0dXJuICFyZm9ybUVsZW1z
LnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLS8vIENyZWF0
ZSAiYnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cwotaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
Zm9jdXNpbkJ1YmJsZXMgKSB7Ci0gICAgalF1ZXJ5LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBi
bHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0KLSAgICAgICAgLy8g
QXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9j
dXNpbi9mb2N1c291dAotICAgICAgICB2YXIgYXR0YWNoZXMgPSAwLAotICAgICAgICAgICAgaGFu
ZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
c2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApLCB0
cnVlICk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBm
aXggXSA9IHsKLSAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9KTsK
LX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLSAgICBvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxl
Y3RvciwgZGF0YSwgZm4sIC8qSU5URVJOQUwqLyBvbmUgKSB7Ci0gICAgICAgIHZhciBvcmlnRm4s
IHR5cGU7Ci0KLSAgICAgICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJz
Ci0gICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAg
IC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCi0gICAgICAgICAgICBpZiAoIHR5
cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7IC8vICYmIHNlbGVjdG9yICE9IG51bGwKLSAg
ICAgICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApCi0gICAgICAgICAgICAgICAg
ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVzICkg
ewotICAgICAgICAgICAgICAgIHRoaXMub24oIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sg
dHlwZSBdLCBvbmUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsK
LSAgICAgICAgICAgIC8vICggdHlwZXMsIGZuICkKLSAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7
Ci0gICAgICAgICAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIGZuID09IG51bGwgKSB7Ci0gICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9
PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZu
ICkKLSAgICAgICAgICAgICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gKCB0eXBl
cywgZGF0YSwgZm4gKQotICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKLSAgICAgICAgICAgICAg
ICBkYXRhID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBmbiA9PT0gZmFsc2UgKSB7
Ci0gICAgICAgICAgICBmbiA9IHJldHVybkZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKCAhZm4g
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg
b25lID09PSAxICkgewotICAgICAgICAgICAgb3JpZ0ZuID0gZm47Ci0gICAgICAgICAgICBmbiA9
IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICAvLyBDYW4gdXNlIGFuIGVtcHR5
IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm8KLSAgICAgICAgICAgICAgICBqUXVl
cnkoKS5vZmYoIGV2ZW50ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSgg
dGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgLy8gVXNlIHNh
bWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KLSAgICAgICAgICAgIGZu
Lmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciAp
OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4gKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3Is
IGRhdGEsIGZuLCAxICk7Ci0gICAgfSwKLSAgICBvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0
b3IsIGZuICkgewotICAgICAgICB2YXIgaGFuZGxlT2JqLCB0eXBlOwotICAgICAgICBpZiAoIHR5
cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKLSAgICAg
ICAgICAgIC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnQKLSAgICAgICAgICAg
IGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajsKLSAgICAgICAgICAgIGpRdWVyeSggdHlwZXMu
ZGVsZWdhdGVUYXJnZXQgKS5vZmYoCi0gICAgICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFj
ZSA/IGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOiBoYW5k
bGVPYmoub3JpZ1R5cGUsCi0gICAgICAgICAgICAgICAgaGFuZGxlT2JqLnNlbGVjdG9yLAotICAg
ICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyCi0gICAgICAgICAgICApOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09
ICJvYmplY3QiICkgewotICAgICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3Jd
ICkKLSAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHNlbGVj
dG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7Ci0gICAg
ICAgICAgICAvLyAoIHR5cGVzIFssIGZuXSApCi0gICAgICAgICAgICBmbiA9IHNlbGVjdG9yOwot
ICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCBmbiA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICBmbiA9IHJldHVybkZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBq
UXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7Ci0gICAgICAg
IH0pOwotICAgIH0sCi0KLSAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewot
ICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7Ci0gICAgfSwK
LSAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
Lm9mZiggdHlwZXMsIG51bGwsIGZuICk7Ci0gICAgfSwKLQotICAgIGxpdmU6IGZ1bmN0aW9uKCB0
eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub24oIHR5
cGVzLCB0aGlzLnNlbGVjdG9yLCBkYXRhLCBmbiApOwotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICB9LAotICAgIGRpZTogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKLSAgICAgICAgalF1ZXJ5KCB0
aGlzLmNvbnRleHQgKS5vZmYoIHR5cGVzLCB0aGlzLnNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0g
ICAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNl
bGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBl
cywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0gICAgfSwKLSAgICB1bmRlbGVnYXRlOiBmdW5jdGlv
biggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKLSAgICAgICAgLy8gKCBuYW1lc3BhY2UgKSBvciAo
IHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQotICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aCA9PT0gMSA/IHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDogdGhpcy5vZmYoIHR5cGVzLCBz
ZWxlY3RvciB8fCAiKioiLCBmbiApOwotICAgIH0sCi0KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbigg
dHlwZSwgZGF0YSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7Ci0gICAg
ICAgIH0pOwotICAgIH0sCi0gICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRh
ICkgewotICAgICAgICBpZiAoIHRoaXNbMF0gKSB7Ci0gICAgICAgICAgICByZXR1cm4galF1ZXJ5
LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXNbMF0sIHRydWUgKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICB0b2dnbGU6IGZ1bmN0aW9uKCBmbiApIHsKLSAgICAgICAgLy8gU2F2ZSBy
ZWZlcmVuY2UgdG8gYXJndW1lbnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQotICAgICAgICB2YXIg
YXJncyA9IGFyZ3VtZW50cywKLSAgICAgICAgICAgIGd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5n
dWlkKyssCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlv
biggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlv
biB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5f
ZGF0YSggdGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCApIHx8IDAgKSAlIGk7Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkLCBsYXN0
VG9nZ2xlICsgMSApOwotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tz
IHN0b3AKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAg
ICAgICAgICAgLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGFyZ3NbIGxhc3RUb2dnbGUgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgfHwgZmFsc2U7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIC8vIGxpbmsgYWxsIHRoZSBmdW5jdGlvbnMsIHNv
IGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhpcyBjbGljayBoYW5kbGVyCi0gICAgICAgIHRvZ2ds
ZXIuZ3VpZCA9IGd1aWQ7Ci0gICAgICAgIHdoaWxlICggaSA8IGFyZ3MubGVuZ3RoICkgewotICAg
ICAgICAgICAgYXJnc1sgaSsrIF0uZ3VpZCA9IGd1aWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApOwotICAgIH0sCi0KLSAgICBob3ZlcjogZnVuY3Rp
b24oIGZuT3ZlciwgZm5PdXQgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZu
T3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOwotICAgIH0KLX0pOwotCi1qUXVl
cnkuZWFjaCggKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xs
IHVubG9hZCBjbGljayBkYmxjbGljayAiICsKLSAgICAibW91c2Vkb3duIG1vdXNldXAgbW91c2Vt
b3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgIiArCi0gICAgImNo
YW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1l
bnUiKS5zcGxpdCgiICIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQotICAgIC8vIEhhbmRsZSBl
dmVudCBiaW5kaW5nCi0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4g
KSB7Ci0gICAgICAgIGlmICggZm4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgIGZuID0gZGF0YTsK
LSAgICAgICAgICAgIGRhdGEgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGggPiAwID8KLSAgICAgICAgICAgIHRoaXMub24oIG5hbWUsIG51bGwsIGRh
dGEsIGZuICkgOgotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7Ci0gICAgfTsKLQot
ICAgIGlmICggcmtleUV2ZW50LnRlc3QoIG5hbWUgKSApIHsKLSAgICAgICAgalF1ZXJ5LmV2ZW50
LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXZlbnQua2V5SG9va3M7Ci0gICAgfQotCi0gICAg
aWYgKCBybW91c2VFdmVudC50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgIGpRdWVyeS5ldmVudC5m
aXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50Lm1vdXNlSG9va3M7Ci0gICAgfQotfSk7Ci0v
KiEKLSAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCi0gKiBDb3B5cmlnaHQgMjAxMiBqUXVl
cnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRlciB0
aGUgTUlUIGxpY2Vuc2UKLSAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCi0gKi8KLShmdW5jdGlvbigg
d2luZG93LCB1bmRlZmluZWQgKSB7Ci0KLXZhciBjYWNoZWRydW5zLAotICAgIGFzc2VydEdldElk
Tm90TmFtZSwKLSAgICBFeHByLAotICAgIGdldFRleHQsCi0gICAgaXNYTUwsCi0gICAgY29udGFp
bnMsCi0gICAgY29tcGlsZSwKLSAgICBzb3J0T3JkZXIsCi0gICAgaGFzRHVwbGljYXRlLAotICAg
IG91dGVybW9zdENvbnRleHQsCi0KLSAgICBiYXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwKLSAgICBz
dHJ1bmRlZmluZWQgPSAidW5kZWZpbmVkIiwKLQotICAgIGV4cGFuZG8gPSAoICJzaXpjYWNoZSIg
KyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggIi4iLCAiIiApLAotCi0gICAgVG9rZW4gPSBTdHJp
bmcsCi0gICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgZG9jRWxlbSA9IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCwKLSAgICBkaXJydW5zID0gMCwKLSAgICBkb25lID0gMCwKLSAg
ICBwb3AgPSBbXS5wb3AsCi0gICAgcHVzaCA9IFtdLnB1c2gsCi0gICAgc2xpY2UgPSBbXS5zbGlj
ZSwKLSAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgYSBuYXRpdmUgb25lIGlz
IHVuYXZhaWxhYmxlCi0gICAgaW5kZXhPZiA9IFtdLmluZGV4T2YgfHwgZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgIHZhciBpID0gMCwKLSAgICAgICAgICAgIGxlbiA9IHRoaXMubGVuZ3RoOwot
ICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgIGlmICggdGhpc1tp
XSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSwKLQotICAgIC8vIEF1Z21lbnQg
YSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlCi0gICAgbWFya0Z1bmN0aW9uID0g
ZnVuY3Rpb24oIGZuLCB2YWx1ZSApIHsKLSAgICAgICAgZm5bIGV4cGFuZG8gXSA9IHZhbHVlID09
IG51bGwgfHwgdmFsdWU7Ci0gICAgICAgIHJldHVybiBmbjsKLSAgICB9LAotCi0gICAgY3JlYXRl
Q2FjaGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNhY2hlID0ge30sCi0gICAgICAgICAg
ICBrZXlzID0gW107Ci0KLSAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbigga2V5
LCB2YWx1ZSApIHsKLSAgICAgICAgICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50
cmllcwotICAgICAgICAgICAgaWYgKCBrZXlzLnB1c2goIGtleSApID4gRXhwci5jYWNoZUxlbmd0
aCApIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZXRyaWV2ZSB3aXRoIChrZXkgKyAiICIpIHRv
IGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMg
KHNlZSBJc3N1ZSAjMTU3KQotICAgICAgICAgICAgcmV0dXJuIChjYWNoZVsga2V5ICsgIiAiIF0g
PSB2YWx1ZSk7Ci0gICAgICAgIH0sIGNhY2hlICk7Ci0gICAgfSwKLQotICAgIGNsYXNzQ2FjaGUg
PSBjcmVhdGVDYWNoZSgpLAotICAgIHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgIGNv
bXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotCi0gICAgLy8gUmVnZXgKLQotICAgIC8vIFdo
aXRlc3BhY2UgY2hhcmFjdGVycyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8j
d2hpdGVzcGFjZQotICAgIHdoaXRlc3BhY2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsCi0gICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnMKLSAgICBjaGFy
YWN0ZXJFbmNvZGluZyA9ICIoPzpcXFxcLnxbLVxcd118W15cXHgwMC1cXHhhMF0pKyIsCi0KLSAg
ICAvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NTIGlkZW50aWZpZXIgY2hhcmFjdGVycwotICAgIC8v
IEFuIHVucXVvdGVkIHZhbHVlIHNob3VsZCBiZSBhIENTUyBpZGVudGlmaWVyIChodHRwOi8vd3d3
LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycykKLSAgICAvLyBQ
cm9wZXIgc3ludGF4OiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFs
dWUtZGVmLWlkZW50aWZpZXIKLSAgICBpZGVudGlmaWVyID0gY2hhcmFjdGVyRW5jb2RpbmcucmVw
bGFjZSggInciLCAidyMiICksCi0KLSAgICAvLyBBY2NlcHRhYmxlIG9wZXJhdG9ycyBodHRwOi8v
d3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMKLSAgICBvcGVyYXRv
cnMgPSAiKFsqXiR8IX5dPz0pIiwKLSAgICBhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNl
ICsgIiooIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICsgd2hpdGVzcGFjZSArCi0gICAgICAg
ICIqKD86IiArIG9wZXJhdG9ycyArIHdoaXRlc3BhY2UgKyAiKig/OihbJ1wiXSkoKD86XFxcXC58
W15cXFxcXSkqPylcXDN8KCIgKyBpZGVudGlmaWVyICsgIil8KXwpIiArIHdoaXRlc3BhY2UgKyAi
KlxcXSIsCi0KLSAgICAvLyBQcmVmZXIgYXJndW1lbnRzIG5vdCBpbiBwYXJlbnMvYnJhY2tldHMs
Ci0gICAgLy8gICB0aGVuIGF0dHJpYnV0ZSBzZWxlY3RvcnMgYW5kIG5vbi1wc2V1ZG9zIChkZW5v
dGVkIGJ5IDopLAotICAgIC8vICAgdGhlbiBhbnl0aGluZyBlbHNlCi0gICAgLy8gVGhlc2UgcHJl
ZmVyZW5jZXMgYXJlIGhlcmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzCi0gICAg
Ly8gICBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyCi0gICAgcHNldWRv
cyA9ICI6KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxc
LnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiICsgYXR0cmlidXRlcyArICIpfFte
Ol18XFxcXC4pKnwuKikpXFwpfCkiLAotCi0gICAgLy8gRm9yIG1hdGNoRXhwci5QT1MgYW5kIG1h
dGNoRXhwci5uZWVkc0NvbnRleHQKLSAgICBwb3MgPSAiOihldmVufG9kZHxlcXxndHxsdHxudGh8
Zmlyc3R8bGFzdCkoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAgICAgICIqKCg/Oi1cXGQpP1xc
ZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpKD89W14tXXwkKSIsCi0KLSAgICAvLyBMZWFkaW5n
IGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24t
d2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCi0gICAgcnRyaW0gPSBu
ZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikq
KSIgKyB3aGl0ZXNwYWNlICsgIiskIiwgImciICksCi0KLSAgICByY29tbWEgPSBuZXcgUmVnRXhw
KCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKLSAgICByY29t
YmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooW1xceDIwXFx0XFxy
XFxuXFxmPit+XSkiICsgd2hpdGVzcGFjZSArICIqIiApLAotICAgIHJwc2V1ZG8gPSBuZXcgUmVn
RXhwKCBwc2V1ZG9zICksCi0KLSAgICAvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElE
IG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMKLSAgICBycXVpY2tFeHByID0gL14oPzojKFtcd1wt
XSspfChcdyspfFwuKFtcd1wtXSspKSQvLAotCi0gICAgcm5vdCA9IC9eOm5vdC8sCi0gICAgcnNp
YmxpbmcgPSAvW1x4MjBcdFxyXG5cZl0qWyt+XS8sCi0gICAgcmVuZHNXaXRoTm90ID0gLzpub3Rc
KCQvLAotCi0gICAgcmhlYWRlciA9IC9oXGQvaSwKLSAgICByaW5wdXRzID0gL2lucHV0fHNlbGVj
dHx0ZXh0YXJlYXxidXR0b24vaSwKLQotICAgIHJiYWNrc2xhc2ggPSAvXFwoPyFcXCkvZywKLQot
ICAgIG1hdGNoRXhwciA9IHsKLSAgICAgICAgIklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBjaGFy
YWN0ZXJFbmNvZGluZyArICIpIiApLAotICAgICAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxc
LigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAgICAgIk5BTUUiOiBuZXcgUmVn
RXhwKCAiXlxcW25hbWU9WydcIl0/KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpWydcIl0/XFxd
IiApLAotICAgICAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGNoYXJhY3RlckVuY29kaW5n
LnJlcGxhY2UoICJ3IiwgIncqIiApICsgIikiICksCi0gICAgICAgICJBVFRSIjogbmV3IFJlZ0V4
cCggIl4iICsgYXR0cmlidXRlcyApLAotICAgICAgICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4i
ICsgcHNldWRvcyApLAotICAgICAgICAiUE9TIjogbmV3IFJlZ0V4cCggcG9zLCAiaSIgKSwKLSAg
ICAgICAgIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8bnRofGZpcnN0fGxhc3QpLWNoaWxk
KD86XFwoIiArIHdoaXRlc3BhY2UgKwotICAgICAgICAgICAgIiooZXZlbnxvZGR8KChbKy1dfCko
XFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKLSAg
ICAgICAgICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksCi0g
ICAgICAgIC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQotICAgICAg
ICAibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18
IiArIHBvcywgImkiICkKLSAgICB9LAotCi0gICAgLy8gU3VwcG9ydAotCi0gICAgLy8gVXNlZCBm
b3IgdGVzdGluZyBzb21ldGhpbmcgb24gYW4gZWxlbWVudAotICAgIGFzc2VydCA9IGZ1bmN0aW9u
KCBmbiApIHsKLSAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gZm4oIGRpdiApOwotICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZmlu
YWxseSB7Ci0gICAgICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQotICAgICAgICAgICAg
ZGl2ID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBDaGVjayBpZiBnZXRFbGVt
ZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25seSBlbGVtZW50cwotICAgIGFzc2VydFRhZ05h
bWVOb0NvbW1lbnRzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgIGRpdi5hcHBl
bmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKLSAgICAgICAgcmV0dXJuICFk
aXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7Ci0gICAgfSksCi0KLSAgICAvLyBD
aGVjayBpZiBnZXRBdHRyaWJ1dGUgcmV0dXJucyBub3JtYWxpemVkIGhyZWYgYXR0cmlidXRlcwot
ICAgIGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0g
ICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7Ci0gICAgICAgIHJldHVy
biBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9
PSBzdHJ1bmRlZmluZWQgJiYKLSAgICAgICAgICAgIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0
ZSgiaHJlZiIpID09PSAiIyI7Ci0gICAgfSksCi0KLSAgICAvLyBDaGVjayBpZiBhdHRyaWJ1dGVz
IHNob3VsZCBiZSByZXRyaWV2ZWQgYnkgYXR0cmlidXRlIG5vZGVzCi0gICAgYXNzZXJ0QXR0cmli
dXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICBkaXYuaW5uZXJIVE1MID0g
IjxzZWxlY3Q+PC9zZWxlY3Q+IjsKLSAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgZGl2Lmxhc3RD
aGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7Ci0gICAgICAgIC8vIElFOCByZXR1cm5zIGEg
c3RyaW5nIGZvciBzb21lIGF0dHJpYnV0ZXMgZXZlbiB3aGVuIG5vdCBwcmVzZW50Ci0gICAgICAg
IHJldHVybiB0eXBlICE9PSAiYm9vbGVhbiIgJiYgdHlwZSAhPT0gInN0cmluZyI7Ci0gICAgfSks
Ci0KLSAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhbiBiZSB0cnVzdGVk
Ci0gICAgYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0g
ICAgICAgIC8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChpbiA5LjYpCi0g
ICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlkZGVuIGUnPjwvZGl2PjxkaXYg
Y2xhc3M9J2hpZGRlbic+PC9kaXY+IjsKLSAgICAgICAgaWYgKCAhZGl2LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgfHwgIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoICkgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2FmYXJp
IDMuMiBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcyBhbmQgZG9lc24ndCBjYXRjaCBjaGFuZ2VzCi0g
ICAgICAgIGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotICAgICAgICByZXR1cm4gZGl2
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDI7Ci0gICAgfSksCi0KLSAg
ICAvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKLSAg
ICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5TmFtZSBwcml2aWxlZ2VzIGZvcm0gY29udHJvbHMg
b3IgcmV0dXJucyBlbGVtZW50cyBieSBJRAotICAgIGFzc2VydFVzYWJsZU5hbWUgPSBhc3NlcnQo
ZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgLy8gSW5qZWN0IGNvbnRlbnQKLSAgICAgICAgZGl2
LmlkID0gZXhwYW5kbyArIDA7Ci0gICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiAr
IGV4cGFuZG8gKyAiJz48L2E+PGRpdiBuYW1lPSciICsgZXhwYW5kbyArICInPjwvZGl2PiI7Ci0g
ICAgICAgIGRvY0VsZW0uaW5zZXJ0QmVmb3JlKCBkaXYsIGRvY0VsZW0uZmlyc3RDaGlsZCApOwot
Ci0gICAgICAgIC8vIFRlc3QKLSAgICAgICAgdmFyIHBhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5TmFtZSAmJgotICAgICAgICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gZmV3
ZXIgdGhhbiB0aGUgY29ycmVjdCAyCi0gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5
TmFtZSggZXhwYW5kbyApLmxlbmd0aCA9PT0gMiArCi0gICAgICAgICAgICAvLyBidWdneSBicm93
c2VycyB3aWxsIHJldHVybiBtb3JlIHRoYW4gdGhlIGNvcnJlY3QgMAotICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKyAwICkubGVuZ3RoOwotICAgICAgICBh
c3NlcnRHZXRJZE5vdE5hbWUgPSAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGV4cGFuZG8gKTsK
LQotICAgICAgICAvLyBDbGVhbnVwCi0gICAgICAgIGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGRpdiAp
OwotCi0gICAgICAgIHJldHVybiBwYXNzOwotICAgIH0pOwotCi0vLyBJZiBzbGljZSBpcyBub3Qg
YXZhaWxhYmxlLCBwcm92aWRlIGEgYmFja3VwCi10cnkgewotICAgIHNsaWNlLmNhbGwoIGRvY0Vs
ZW0uY2hpbGROb2RlcywgMCApWzBdLm5vZGVUeXBlOwotfSBjYXRjaCAoIGUgKSB7Ci0gICAgc2xp
Y2UgPSBmdW5jdGlvbiggaSApIHsKLSAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICByZXN1
bHRzID0gW107Ci0gICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKTsgaSsrICkgewotICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4
dCwgcmVzdWx0cywgc2VlZCApIHsKLSAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKLSAgICBj
b250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKLSAgICB2YXIgbWF0Y2gsIGVsZW0sIHhtbCwg
bSwKLSAgICAgICAgbm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVUeXBlOwotCi0gICAgaWYgKCAhc2Vs
ZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgfQotCi0gICAgaWYgKCBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAh
PT0gOSApIHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0KLQotICAgIHhtbCA9IGlzWE1MKCBj
b250ZXh0ICk7Ci0KLSAgICBpZiAoICF4bWwgJiYgIXNlZWQgKSB7Ci0gICAgICAgIGlmICggKG1h
dGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKLSAgICAgICAgICAgIC8vIFNw
ZWVkLXVwOiBTaXp6bGUoIiNJRCIpCi0gICAgICAgICAgICBpZiAoIChtID0gbWF0Y2hbMV0pICkg
ewotICAgICAgICAgICAgICAgIGlmICggbm9kZVR5cGUgPT09IDkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICk7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiBy
ZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBp
biB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVs
ZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1zCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbS5pZCA9PT0gbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQ29udGV4dCBpcyBub3QgYSBkb2N1bWVudAotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAoZWxlbSA9IGNvbnRleHQub3duZXJEb2N1
bWVudC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09PSBtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJl
c3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3Ig
KSwgMCkgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLQotICAgICAgICAgICAg
Ly8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoICht
ID0gbWF0Y2hbM10pICYmIGFzc2VydFVzYWJsZUNsYXNzTmFtZSAmJiBjb250ZXh0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgKSB7Ci0gICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywg
c2xpY2UuY2FsbChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSwgMCkgKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEFsbCBvdGhlcnMKLSAgICByZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5y
ZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKTsKLX0K
LQotU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7Ci0gICAgcmV0
dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTsKLX07Ci0KLVNpenpsZS5t
YXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHsKLSAgICByZXR1cm4gU2l6
emxlKCBleHByLCBudWxsLCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7Ci19OwotCi0vLyBS
ZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCi1mdW5j
dGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwot
ICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0g
ICAgfTsKLX0KLQotLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBi
dXR0b25zCi1mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7Ci0gICAgcmV0dXJu
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKTsKLSAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09
ICJidXR0b24iKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0gICAgfTsKLX0KLQotLy8gUmV0dXJu
cyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscwotZnVuY3Rpb24g
Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihm
dW5jdGlvbiggYXJndW1lbnQgKSB7Ci0gICAgICAgIGFyZ3VtZW50ID0gK2FyZ3VtZW50OwotICAg
ICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewotICAg
ICAgICAgICAgdmFyIGosCi0gICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBz
ZWVkLmxlbmd0aCwgYXJndW1lbnQgKSwKLSAgICAgICAgICAgICAgICBpID0gbWF0Y2hJbmRleGVz
Lmxlbmd0aDsKLQotICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNw
ZWNpZmllZCBpbmRleGVzCi0gICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkgewotICAgICAgICAgICAg
ICAgICAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotLyoqCi0gKiBV
dGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5
IG9mIERPTSBub2RlcwotICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCi0gKi8KLWdldFRl
eHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBub2RlLAot
ICAgICAgICByZXQgPSAiIiwKLSAgICAgICAgaSA9IDAsCi0gICAgICAgIG5vZGVUeXBlID0gZWxl
bS5ub2RlVHlwZTsKLQotICAgIGlmICggbm9kZVR5cGUgKSB7Ci0gICAgICAgIGlmICggbm9kZVR5
cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkgewotICAgICAg
ICAgICAgLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cwotICAgICAgICAgICAgLy8gaW5u
ZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoc2VlICMx
MTE1MykKLSAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICJzdHJp
bmciICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4K
LSAgICAgICAgICAgICAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVt
ID0gZWxlbS5uZXh0U2libGluZyApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGdldFRl
eHQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewotICAgICAgICAg
ICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIERvIG5vdCBp
bmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcwotICAgIH0gZWxz
ZSB7Ci0KLSAgICAgICAgLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUg
YW4gYXJyYXkKLSAgICAgICAgZm9yICggOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7Ci0gICAg
ICAgICAgICAvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcwotICAgICAgICAgICAgcmV0
ICs9IGdldFRleHQoIG5vZGUgKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmV0Owot
fTsKLQotaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBk
b2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0
IGV4aXN0Ci0gICAgLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpCi0g
ICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBl
bGVtKS5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3Vt
ZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7Ci19OwotCi0vLyBFbGVtZW50
IGNvbnRhaW5zIGFub3RoZXIKLWNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zID0gZG9jRWxlbS5j
b250YWlucyA/Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgIHZhciBhZG93biA9IGEu
bm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCi0gICAgICAgICAgICBidXAg
PSBiICYmIGIucGFyZW50Tm9kZTsKLSAgICAgICAgcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVw
ICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiBhZG93bi5jb250YWlucyAmJiBhZG93bi5jb250YWlu
cyhidXApICk7Ci0gICAgfSA6Ci0gICAgZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/
Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgIHJldHVybiBiICYmICEhKCBhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKCBiICkgJiAxNiApOwotICAgIH0gOgotICAgIGZ1bmN0aW9uKCBh
LCBiICkgewotICAgICAgICB3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKLSAgICAgICAg
ICAgIGlmICggYiA9PT0gYSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotU2l6
emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2YXIgdmFsLAotICAgICAg
ICB4bWwgPSBpc1hNTCggZWxlbSApOwotCi0gICAgaWYgKCAheG1sICkgewotICAgICAgICBuYW1l
ID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIH0KLSAgICBpZiAoICh2YWwgPSBFeHByLmF0dHJI
YW5kbGVbIG5hbWUgXSkgKSB7Ci0gICAgICAgIHJldHVybiB2YWwoIGVsZW0gKTsKLSAgICB9Ci0g
ICAgaWYgKCB4bWwgfHwgYXNzZXJ0QXR0cmlidXRlcyApIHsKLSAgICAgICAgcmV0dXJuIGVsZW0u
Z2V0QXR0cmlidXRlKCBuYW1lICk7Ci0gICAgfQotICAgIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRl
Tm9kZSggbmFtZSApOwotICAgIHJldHVybiB2YWwgPwotICAgICAgICB0eXBlb2YgZWxlbVsgbmFt
ZSBdID09PSAiYm9vbGVhbiIgPwotICAgICAgICAgICAgZWxlbVsgbmFtZSBdID8gbmFtZSA6IG51
bGwgOgotICAgICAgICAgICAgdmFsLnNwZWNpZmllZCA/IHZhbC52YWx1ZSA6IG51bGwgOgotICAg
ICAgICBudWxsOwotfTsKLQotRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7Ci0KLSAgICAvLyBD
YW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKLSAgICBjYWNoZUxlbmd0aDogNTAsCi0KLSAgICBj
cmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKLQotICAgIG1hdGNoOiBtYXRjaEV4cHIsCi0KLSAg
ICAvLyBJRTYvNyByZXR1cm4gYSBtb2RpZmllZCBocmVmCi0gICAgYXR0ckhhbmRsZTogYXNzZXJ0
SHJlZk5vdE5vcm1hbGl6ZWQgPwotICAgICAgICB7fSA6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
ICJocmVmIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
Z2V0QXR0cmlidXRlKCAiaHJlZiIsIDIgKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAi
dHlwZSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdl
dEF0dHJpYnV0ZSgidHlwZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgZmlu
ZDogewotICAgICAgICAiSUQiOiBhc3NlcnRHZXRJZE5vdE5hbWUgPwotICAgICAgICAgICAgZnVu
Y3Rpb24oIGlkLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICF4bWwgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNr
YmVycnkgNC42IHJldHVybnMKLSAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUg
bm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0gOiBbXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IDoKLSAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgewot
ICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0
cnVuZGVmaW5lZCAmJiAheG1sICkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0g
PwotICAgICAgICAgICAgICAgICAgICAgICAgbS5pZCA9PT0gaWQgfHwgdHlwZW9mIG0uZ2V0QXR0
cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52
YWx1ZSA9PT0gaWQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttXSA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IFtdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgIlRBRyI6
IGFzc2VydFRhZ05hbWVOb0NvbW1lbnRzID8KLSAgICAgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNv
bnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkg
ewotICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFn
TmFtZSggdGFnICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNv
bW1lbnRzCi0gICAgICAgICAgICAgICAgaWYgKCB0YWcgPT09ICIqIiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBbXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
IDsgKGVsZW0gPSByZXN1bHRzW2ldKTsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRtcC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG1wOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgIk5BTUUiOiBhc3NlcnRVc2FibGVOYW1lICYmIGZ1bmN0aW9uKCB0YWcsIGNv
bnRleHQgKSB7Ci0gICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlO
YW1lICE9PSBzdHJ1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Z2V0RWxlbWVudHNCeU5hbWUoIG5hbWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQot
ICAgICAgICAiQ0xBU1MiOiBhc3NlcnRVc2FibGVDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNz
TmFtZSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05h
bWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZWxhdGl2ZTog
ewotICAgICAgICAiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0cnVlIH0sCi0gICAg
ICAgICIgIjogeyBkaXI6ICJwYXJlbnROb2RlIiB9LAotICAgICAgICAiKyI6IHsgZGlyOiAicHJl
dmlvdXNTaWJsaW5nIiwgZmlyc3Q6IHRydWUgfSwKLSAgICAgICAgIn4iOiB7IGRpcjogInByZXZp
b3VzU2libGluZyIgfQotICAgIH0sCi0KLSAgICBwcmVGaWx0ZXI6IHsKLSAgICAgICAgIkFUVFIi
OiBmdW5jdGlvbiggbWF0Y2ggKSB7Ci0gICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJl
cGxhY2UoIHJiYWNrc2xhc2gsICIiICk7Ci0KLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIGdpdmVu
IHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkCi0gICAgICAgICAg
ICBtYXRjaFszXSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCByYmFj
a3NsYXNoLCAiIiApOwotCi0gICAgICAgICAgICBpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewot
ICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gIiAiICsgbWF0Y2hbM10gKyAiICI7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApOwotICAgICAg
ICB9LAotCi0gICAgICAgICJDSElMRCI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAgICAgICAgICAg
IC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbIkNISUxEIl0KLSAgICAgICAgICAgICAgICAxIHR5
cGUgKG9ubHl8bnRofC4uLikKLSAgICAgICAgICAgICAgICAyIGFyZ3VtZW50IChldmVufG9kZHxc
ZCp8XGQqbihbKy1dXGQrKT98Li4uKQotICAgICAgICAgICAgICAgIDMgeG4tY29tcG9uZW50IG9m
IHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCi0gICAgICAgICAgICAgICAgNCBzaWduIG9mIHhu
LWNvbXBvbmVudAotICAgICAgICAgICAgICAgIDUgeCBvZiB4bi1jb21wb25lbnQKLSAgICAgICAg
ICAgICAgICA2IHNpZ24gb2YgeS1jb21wb25lbnQKLSAgICAgICAgICAgICAgICA3IHkgb2YgeS1j
b21wb25lbnQKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFd
LnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICJudGgiICkg
ewotICAgICAgICAgICAgICAgIC8vIG50aC1jaGlsZCByZXF1aXJlcyBhcmd1bWVudAotICAgICAg
ICAgICAgICAgIGlmICggIW1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgICAgICBTaXp6bGUu
ZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECi0gICAg
ICAgICAgICAgICAgLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5
IHRvIDAvMQotICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gKyggbWF0Y2hbM10gPyBtYXRjaFs0
XSArIChtYXRjaFs1XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzJdID09PSAiZXZlbiIgfHwgbWF0Y2hb
Ml0gPT09ICJvZGQiICkgKTsKLSAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoICggbWF0Y2hb
Nl0gKyBtYXRjaFs3XSApIHx8IG1hdGNoWzJdID09PSAib2RkIiApOwotCi0gICAgICAgICAgICAv
LyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
IG1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICB9LAot
Ci0gICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7Ci0gICAgICAgICAgICB2YXIg
dW5xdW90ZWQsIGV4Y2VzczsKLSAgICAgICAgICAgIGlmICggbWF0Y2hFeHByWyJDSElMRCJdLnRl
c3QoIG1hdGNoWzBdICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggbWF0Y2hbM10gKSB7Ci0gICAgICAgICAgICAgICAg
bWF0Y2hbMl0gPSBtYXRjaFszXTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoICh1bnF1b3RlZCA9
IG1hdGNoWzRdKSApIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGFyZ3VtZW50cyB0
aGF0IGNvbnRhaW4gYSBwc2V1ZG8KLSAgICAgICAgICAgICAgICBpZiAoIHJwc2V1ZG8udGVzdCh1
bnF1b3RlZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2Vu
aXplIChyZWN1cnNpdmVseSkKLSAgICAgICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHRva2VuaXpl
KCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgotICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlIHRv
IHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXMKLSAgICAgICAgICAgICAgICAgICAgKGV4Y2Vz
cyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1
bnF1b3RlZC5sZW5ndGgpICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VzcyBpcyBh
IG5lZ2F0aXZlIGluZGV4Ci0gICAgICAgICAgICAgICAgICAgIHVucXVvdGVkID0gdW5xdW90ZWQu
c2xpY2UoIDAsIGV4Y2VzcyApOwotICAgICAgICAgICAgICAgICAgICBtYXRjaFswXSA9IG1hdGNo
WzBdLnNsaWNlKCAwLCBleGNlc3MgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hbMl0gPSB1bnF1b3RlZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
UmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAo
dHlwZSBhbmQgYXJndW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMg
KTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBmaWx0ZXI6IHsKLSAgICAgICAgIklEIjogYXNz
ZXJ0R2V0SWROb3ROYW1lID8KLSAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCApIHsKLSAgICAgICAg
ICAgICAgICBpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IGlkOwotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB9IDoKLSAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCApIHsKLSAgICAgICAgICAgICAg
ICBpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5
cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0
dHJpYnV0ZU5vZGUoImlkIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5v
ZGUudmFsdWUgPT09IGlkOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWUgKSB7Ci0gICAgICAgICAgICBpZiAoIG5v
ZGVOYW1lID09PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdHJ1ZTsgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGVOYW1lID0gbm9k
ZU5hbWUucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTsK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkNMQVNTIjogZnVuY3Rpb24o
IGNsYXNzTmFtZSApIHsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgZXhw
YW5kbyBdWyBjbGFzc05hbWUgKyAiICIgXTsKLQotICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4g
fHwKLSAgICAgICAgICAgICAgICAocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVz
cGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgot
ICAgICAgICAgICAgICAgIGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIGVsZW0uY2xhc3NOYW1l
IHx8ICh0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdl
dEF0dHJpYnV0ZSgiY2xhc3MiKSkgfHwgIiIgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSwKLQotICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sg
KSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQgKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICggIW9wZXJhdG9yICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiI7Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hl
Y2sgOgotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0g
Y2hlY2sgOgotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYm
IHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoK
LSAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQu
c3Vic3RyKCByZXN1bHQubGVuZ3RoIC0gY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDoKLSAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ+PSIgPyAoICIgIiArIHJlc3VsdCArICIgIiAp
LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc3Vic3RyKCAwLCBjaGVjay5sZW5n
dGggKyAxICkgPT09IGNoZWNrICsgIi0iIDoKLSAgICAgICAgICAgICAgICAgICAgZmFsc2U7Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgICJDSElMRCI6IGZ1bmN0aW9uKCB0
eXBlLCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7Ci0KLSAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gIm50aCIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSwgZGlmZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmICggcGFyZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBub2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7IG5vZGU7
IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlmZisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0g
PT09IG5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQgKG9yIGNh
c3QgdG8gTmFOKSwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemUKLSAgICAgICAgICAgICAg
ICAgICAgZGlmZiAtPSBsYXN0OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZiA9PT0g
Zmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBlbGVtOwotCi0gICAg
ICAgICAgICAgICAgc3dpdGNoICggdHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAi
b25seSI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImZpcnN0IjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmaXJzdCIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvKiBmYWxscyB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgImxhc3Qi
OgotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGUubmV4dFNpYmxp
bmcpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9
PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICAiUFNFVURPIjogZnVuY3Rp
b24oIHBzZXVkbywgYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICAvLyBwc2V1ZG8tY2xhc3MgbmFt
ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUKLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMKLSAgICAgICAgICAgIC8vIFByaW9yaXRpemUg
YnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRo
IHVwcGVyY2FzZSBsZXR0ZXJzCi0gICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRl
cnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zCi0gICAgICAgICAgICB2YXIgYXJncywKLSAgICAgICAg
ICAgICAgICBmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBw
c2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8Ci0gICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJv
ciggInVuc3VwcG9ydGVkIHBzZXVkbzogIiArIHBzZXVkbyApOwotCi0gICAgICAgICAgICAvLyBU
aGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0Ci0gICAgICAgICAg
ICAvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvbgot
ICAgICAgICAgICAgLy8ganVzdCBhcyBTaXp6bGUgZG9lcwotICAgICAgICAgICAgaWYgKCBmblsg
ZXhwYW5kbyBdICkgewotICAgICAgICAgICAgICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9s
ZCBzaWduYXR1cmVzCi0gICAgICAgICAgICBpZiAoIGZuLmxlbmd0aCA+IDEgKSB7Ci0gICAgICAg
ICAgICAgICAgYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBdOwotICAgICAg
ICAgICAgICAgIHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50
b0xvd2VyQ2FzZSgpICkgPwotICAgICAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rp
b24oIHNlZWQsIG1hdGNoZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWR4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQg
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlZC5sZW5ndGg7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbaV0gKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0
Y2hlZFtpXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9KSA6Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7Ci0gICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmbjsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBwc2V1ZG9zOiB7Ci0gICAgICAgICJub3QiOiBtYXJrRnVuY3Rp
b24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICAgICAgLy8gVHJpbSB0aGUgc2VsZWN0
b3IgcGFzc2VkIHRvIGNvbXBpbGUKLSAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxl
YWRpbmcgYW5kIHRyYWlsaW5nCi0gICAgICAgICAgICAvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMK
LSAgICAgICAgICAgIHZhciBpbnB1dCA9IFtdLAotICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBb
XSwKLSAgICAgICAgICAgICAgICBtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSgg
cnRyaW0sICIkMSIgKSApOwotCi0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBd
ID8KLSAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMs
IGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtd
ICksCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VlZC5sZW5ndGg7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pIDoKLSAgICAg
ICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAg
ICAgICAgICBpbnB1dFswXSA9IGVsZW07Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoZXIoIGlu
cHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFy
ZXN1bHRzLnBvcCgpOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIH0pLAotCi0gICAgICAg
ICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUo
IHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0p
LAotCi0gICAgICAgICJjb250YWlucyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsK
LSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVs
ZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSks
Ci0KLSAgICAgICAgImVuYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJl
dHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTsKLSAgICAgICAgfSwKLQotICAgICAgICAiZGlz
YWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2Fi
bGVkID09PSB0cnVlOwotICAgICAgICB9LAotCi0gICAgICAgICJjaGVja2VkIjogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgICAgICAvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJu
IGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHMKLSAgICAgICAgICAgIC8vIGh0dHA6
Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2Vk
Ci0gICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQiICYmICEhZWxlbS5jaGVj
a2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5zZWxlY3RlZCk7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
ICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0
Ci0gICAgICAgICAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5Ci0gICAgICAg
ICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICBlbGVtLnBhcmVu
dE5vZGUuc2VsZWN0ZWRJbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgInBhcmVudCI6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVt
cHR5Il0oIGVsZW0gKTsKLSAgICAgICAgfSwKLQotICAgICAgICAiZW1wdHkiOiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8j
ZW1wdHktcHNldWRvCi0gICAgICAgICAgICAvLyA6ZW1wdHkgaXMgb25seSBhZmZlY3RlZCBieSBl
bGVtZW50IG5vZGVzIGFuZCBjb250ZW50IG5vZGVzKGluY2x1ZGluZyB0ZXh0KDMpLCBjZGF0YSg0
KSksCi0gICAgICAgICAgICAvLyAgIG5vdCBjb21tZW50LCBwcm9jZXNzaW5nIGluc3RydWN0aW9u
cywgb3Igb3RoZXJzCi0gICAgICAgICAgICAvLyBUaGFua3MgdG8gRGllZ28gUGVyaW5pIGZvciB0
aGUgbm9kZU5hbWUgc2hvcnRjdXQKLSAgICAgICAgICAgIC8vICAgR3JlYXRlciB0aGFuICJAIiBt
ZWFucyBhbHBoYSBjaGFyYWN0ZXJzIChzcGVjaWZpY2FsbHkgbm90IHN0YXJ0aW5nIHdpdGggIiMi
IG9yICI/IikKLSAgICAgICAgICAgIHZhciBub2RlVHlwZTsKLSAgICAgICAgICAgIGVsZW0gPSBl
bGVtLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICB3aGlsZSAoIGVsZW0gKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLm5vZGVOYW1lID4gIkAiIHx8IChub2RlVHlwZSA9IGVsZW0ubm9kZVR5
cGUpID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVt
Lm5leHRTaWJsaW5nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgImhlYWRlciI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICAgICAgcmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApOwotICAgICAgICB9LAot
Ci0gICAgICAgICJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICB2YXIgdHlw
ZSwgYXR0cjsKLSAgICAgICAgICAgIC8vIElFNiBhbmQgNyB3aWxsIG1hcCBlbGVtLnR5cGUgdG8g
J3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKQotICAgICAgICAgICAgLy8g
dXNlIGdldEF0dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCi0gICAgICAgICAgICBy
ZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmCi0gICAgICAg
ICAgICAgICAgKHR5cGUgPSBlbGVtLnR5cGUpID09PSAidGV4dCIgJiYKLSAgICAgICAgICAgICAg
ICAoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRv
TG93ZXJDYXNlKCkgPT09IHR5cGUgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBJbnB1dCB0
eXBlcwotICAgICAgICAicmFkaW8iOiBjcmVhdGVJbnB1dFBzZXVkbygicmFkaW8iKSwKLSAgICAg
ICAgImNoZWNrYm94IjogY3JlYXRlSW5wdXRQc2V1ZG8oImNoZWNrYm94IiksCi0gICAgICAgICJm
aWxlIjogY3JlYXRlSW5wdXRQc2V1ZG8oImZpbGUiKSwKLSAgICAgICAgInBhc3N3b3JkIjogY3Jl
YXRlSW5wdXRQc2V1ZG8oInBhc3N3b3JkIiksCi0gICAgICAgICJpbWFnZSI6IGNyZWF0ZUlucHV0
UHNldWRvKCJpbWFnZSIpLAotCi0gICAgICAgICJzdWJtaXQiOiBjcmVhdGVCdXR0b25Qc2V1ZG8o
InN1Ym1pdCIpLAotICAgICAgICAicmVzZXQiOiBjcmVhdGVCdXR0b25Qc2V1ZG8oInJlc2V0Iiks
Ci0KLSAgICAgICAgImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgdmFy
IG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJi
dXR0b24iOwotICAgICAgICB9LAotCi0gICAgICAgICJpbnB1dCI6IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgICAgICAgICAgcmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApOwotICAg
ICAgICB9LAotCi0gICAgICAgICJmb2N1cyI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDsKLSAgICAgICAgICAgIHJldHVybiBlbGVt
ID09PSBkb2MuYWN0aXZlRWxlbWVudCAmJiAoIWRvYy5oYXNGb2N1cyB8fCBkb2MuaGFzRm9jdXMo
KSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgImFjdGl2ZSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAg
ICAgICB9LAotCi0gICAgICAgIC8vIFBvc2l0aW9uYWwgdHlwZXMKLSAgICAgICAgImZpcnN0Ijog
Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBb
IDAgXTsKLSAgICAgICAgfSksCi0KLSAgICAgICAgImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAgICAgICAgICAgIHJldHVy
biBbIGxlbmd0aCAtIDEgXTsKLSAgICAgICAgfSksCi0KLSAgICAgICAgImVxIjogY3JlYXRlUG9z
aXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkg
ewotICAgICAgICAgICAgcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGgg
OiBhcmd1bWVudCBdOwotICAgICAgICB9KSwKLQotICAgICAgICAiZXZlbiI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgICAgICAg
ICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJvZGQiOiBjcmVhdGVQ
b3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSArPSAyICkgewotICAgICAgICAg
ICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAgICB9KSwKLQotICAgICAgICAibHQiOiBjcmVh
dGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1l
bnQgKSB7Ci0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50
ICsgbGVuZ3RoIDogYXJndW1lbnQ7IC0taSA+PSAwOyApIHsKLSAgICAgICAgICAgICAgICBtYXRj
aEluZGV4ZXMucHVzaCggaSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoSW5kZXhlczsKLSAgICAgICAgfSksCi0KLSAgICAgICAgImd0IjogY3JlYXRlUG9zaXRpb25h
bFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAg
ICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6
IGFyZ3VtZW50OyArK2kgPCBsZW5ndGg7ICkgewotICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhl
cy5wdXNoKCBpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRl
eGVzOwotICAgICAgICB9KQotICAgIH0KLX07Ci0KLWZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwg
YiwgcmV0ICkgewotICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAg
ICB9Ci0KLSAgICB2YXIgY3VyID0gYS5uZXh0U2libGluZzsKLQotICAgIHdoaWxlICggY3VyICkg
ewotICAgICAgICBpZiAoIGN1ciA9PT0gYiApIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGN1ciA9IGN1ci5uZXh0U2libGluZzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMTsKLX0KLQotc29ydE9yZGVyID0gZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biA/Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAg
ICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiAoICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8
ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8KLSAgICAgICAgICAgIGEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24gOgotICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAm
IDQKLSAgICAgICAgKSA/IC0xIDogMTsKLSAgICB9IDoKLSAgICBmdW5jdGlvbiggYSwgYiApIHsK
LSAgICAgICAgLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBleGl0IGVhcmx5Ci0g
ICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAvLyBGYWxsYmFjayB0byB1c2luZyBz
b3VyY2VJbmRleCAoaW4gSUUpIGlmIGl0J3MgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKLSAgICAg
ICAgfSBlbHNlIGlmICggYS5zb3VyY2VJbmRleCAmJiBiLnNvdXJjZUluZGV4ICkgewotICAgICAg
ICAgICAgcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIGFsLCBibCwKLSAgICAgICAgICAgIGFwID0gW10sCi0gICAgICAgICAgICBi
cCA9IFtdLAotICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAotICAgICAgICAgICAgYnVw
ID0gYi5wYXJlbnROb2RlLAotICAgICAgICAgICAgY3VyID0gYXVwOwotCi0gICAgICAgIC8vIElm
IHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2UgY2FuIGRvIGEgcXVpY2sg
Y2hlY2sKLSAgICAgICAgaWYgKCBhdXAgPT09IGJ1cCApIHsKLSAgICAgICAgICAgIHJldHVybiBz
aWJsaW5nQ2hlY2soIGEsIGIgKTsKLQotICAgICAgICAvLyBJZiBubyBwYXJlbnRzIHdlcmUgZm91
bmQgdGhlbiB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5lY3RlZAotICAgICAgICB9IGVsc2UgaWYgKCAh
YXVwICkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIH0gZWxzZSBpZiAoICFi
dXAgKSB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE90
aGVyd2lzZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQKLSAg
ICAgICAgLy8gdG8gYnVpbGQgdXAgYSBmdWxsIGxpc3Qgb2YgdGhlIHBhcmVudE5vZGVzIGZvciBj
b21wYXJpc29uCi0gICAgICAgIHdoaWxlICggY3VyICkgewotICAgICAgICAgICAgYXAudW5zaGlm
dCggY3VyICk7Ci0gICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGN1ciA9IGJ1cDsKLQotICAgICAgICB3aGlsZSAoIGN1ciApIHsKLSAgICAgICAg
ICAgIGJwLnVuc2hpZnQoIGN1ciApOwotICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7
Ci0gICAgICAgIH0KLQotICAgICAgICBhbCA9IGFwLmxlbmd0aDsKLSAgICAgICAgYmwgPSBicC5s
ZW5ndGg7Ci0KLSAgICAgICAgLy8gU3RhcnQgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGxvb2tpbmcg
Zm9yIGEgZGlzY3JlcGFuY3kKLSAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8
IGJsOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoIGFwW2ldICE9PSBicFtpXSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGVuZGVkIHNvbWVwbGFjZSB1cCB0aGUg
dHJlZSBzbyBkbyBhIHNpYmxpbmcgY2hlY2sKLSAgICAgICAgcmV0dXJuIGkgPT09IGFsID8KLSAg
ICAgICAgICAgIHNpYmxpbmdDaGVjayggYSwgYnBbaV0sIC0xICkgOgotICAgICAgICAgICAgc2li
bGluZ0NoZWNrKCBhcFtpXSwgYiwgMSApOwotICAgIH07Ci0KLS8vIEFsd2F5cyBhc3N1bWUgdGhl
IHByZXNlbmNlIG9mIGR1cGxpY2F0ZXMgaWYgc29ydCBkb2Vzbid0Ci0vLyBwYXNzIHRoZW0gdG8g
b3VyIGNvbXBhcmlzb24gZnVuY3Rpb24gKGFzIGluIEdvb2dsZSBDaHJvbWUpLgotWzAsIDBdLnNv
cnQoIHNvcnRPcmRlciApOwotYmFzZUhhc0R1cGxpY2F0ZSA9ICFoYXNEdXBsaWNhdGU7Ci0KLS8v
IERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMKLVNpenpsZS51bmlxdWVT
b3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgICAgIGR1cGxp
Y2F0ZXMgPSBbXSwKLSAgICAgICAgaSA9IDEsCi0gICAgICAgIGogPSAwOwotCi0gICAgaGFzRHVw
bGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTsKLSAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciAp
OwotCi0gICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7Ci0gICAgICAgIGZvciAoIDsgKGVsZW0gPSBy
ZXN1bHRzW2ldKTsgaSsrICkgewotICAgICAgICAgICAgaWYgKCBlbGVtID09PSByZXN1bHRzWyBp
IC0gMSBdICkgewotICAgICAgICAgICAgICAgIGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoIGotLSApIHsKLSAgICAgICAg
ICAgIHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfTsKLQotU2l6emxlLmVycm9yID0gZnVuY3Rpb24o
IG1zZyApIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXpl
ZCBleHByZXNzaW9uOiAiICsgbXNnICk7Ci19OwotCi1mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0
b3IsIHBhcnNlT25seSApIHsKLSAgICB2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwK
LSAgICAgICAgc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKLSAgICAgICAgY2FjaGVkID0gdG9r
ZW5DYWNoZVsgZXhwYW5kbyBdWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgaWYgKCBjYWNoZWQg
KSB7Ci0gICAgICAgIHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7Ci0g
ICAgfQotCi0gICAgc29GYXIgPSBzZWxlY3RvcjsKLSAgICBncm91cHMgPSBbXTsKLSAgICBwcmVG
aWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7Ci0KLSAgICB3aGlsZSAoIHNvRmFyICkgewotCi0gICAg
ICAgIC8vIENvbW1hIGFuZCBmaXJzdCBydW4KLSAgICAgICAgaWYgKCAhbWF0Y2hlZCB8fCAobWF0
Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7Ci0gICAgICAgICAgICBpZiAoIG1hdGNoICkg
ewotICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZh
bGlkCi0gICAgICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3Ro
ICkgfHwgc29GYXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBncm91cHMucHVzaCggdG9r
ZW5zID0gW10gKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKLQotICAg
ICAgICAvLyBDb21iaW5hdG9ycwotICAgICAgICBpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5l
eGVjKCBzb0ZhciApKSApIHsKLSAgICAgICAgICAgIHRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3
IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKLSAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xp
Y2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0KLSAgICAgICAgICAgIC8vIENhc3QgZGVzY2VuZGFudCBj
b21iaW5hdG9ycyB0byBzcGFjZQotICAgICAgICAgICAgbWF0Y2hlZC50eXBlID0gbWF0Y2hbMF0u
cmVwbGFjZSggcnRyaW0sICIgIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlsdGVycwot
ICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgewotICAgICAgICAgICAgaWYgKCAo
bWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNb
IHR5cGUgXSB8fAotICAgICAgICAgICAgICAgIChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSgg
bWF0Y2ggKSkpICkgewotCi0gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goIG1hdGNoZWQgPSBu
ZXcgVG9rZW4oIG1hdGNoLnNoaWZ0KCkgKSApOwotICAgICAgICAgICAgICAgIHNvRmFyID0gc29G
YXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hlZC50eXBl
ID0gdHlwZTsKLSAgICAgICAgICAgICAgICBtYXRjaGVkLm1hdGNoZXMgPSBtYXRjaDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIW1hdGNoZWQgKSB7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbGVuZ3Ro
IG9mIHRoZSBpbnZhbGlkIGV4Y2VzcwotICAgIC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZwotICAg
IC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2VucwotICAgIHJldHVy
biBwYXJzZU9ubHkgPwotICAgICAgICBzb0Zhci5sZW5ndGggOgotICAgICAgICBzb0ZhciA/Ci0g
ICAgICAgICAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgotICAgICAgICAgICAgLy8gQ2Fj
aGUgdGhlIHRva2VucwotICAgICAgICAgICAgdG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyAp
LnNsaWNlKCAwICk7Ci19Ci0KLWZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJp
bmF0b3IsIGJhc2UgKSB7Ci0gICAgdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAotICAgICAgICBj
aGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBjb21iaW5hdG9yLmRpciA9PT0gInBhcmVudE5vZGUi
LAotICAgICAgICBkb25lTmFtZSA9IGRvbmUrKzsKLQotICAgIHJldHVybiBjb21iaW5hdG9yLmZp
cnN0ID8KLSAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGlu
ZyBlbGVtZW50Ci0gICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAg
ICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAgICAgICAg
IGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSA6Ci0KLSAgICAgICAgLy8g
Q2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCi0gICAgICAgIGZ1
bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4ndCBz
ZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJv
bSBkaXIgY2FjaGluZwotICAgICAgICAgICAgaWYgKCAheG1sICkgewotICAgICAgICAgICAgICAg
IHZhciBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgZGlya2V5ID0gZGlycnVucyArICIgIiAr
IGRvbmVOYW1lICsgIiAiLAotICAgICAgICAgICAgICAgICAgICBjYWNoZWRrZXkgPSBkaXJrZXkg
KyBjYWNoZWRydW5zOwotICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIg
XSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVt
Lm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoY2FjaGUg
PSBlbGVtWyBleHBhbmRvIF0pID09PSBjYWNoZWRrZXkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uc2l6c2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggdHlwZW9mIGNhY2hlID09PSAic3RyaW5nIiAmJiBjYWNoZS5pbmRleE9mKGRpcmtl
eSkgPT09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNpenNl
dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBleHBhbmRvIF0gPSBjYWNoZWRr
ZXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250
ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpz
ZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5zaXpzZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjaGVja05vbkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRl
eHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotfQotCi1mdW5jdGlvbiBlbGVt
ZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7Ci0gICAgcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEg
PwotICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAg
dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7Ci0gICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSA6Ci0gICAg
ICAgIG1hdGNoZXJzWzBdOwotfQotCi1mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAs
IGZpbHRlciwgY29udGV4dCwgeG1sICkgewotICAgIHZhciBlbGVtLAotICAgICAgICBuZXdVbm1h
dGNoZWQgPSBbXSwKLSAgICAgICAgaSA9IDAsCi0gICAgICAgIGxlbiA9IHVubWF0Y2hlZC5sZW5n
dGgsCi0gICAgICAgIG1hcHBlZCA9IG1hcCAhPSBudWxsOwotCi0gICAgZm9yICggOyBpIDwgbGVu
OyBpKysgKSB7Ci0gICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgewotICAgICAg
ICAgICAgaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0g
ICAgICAgICAgICAgICAgbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIG1hcHBlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgbWFwLnB1c2goIGkgKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbmV3VW5tYXRjaGVkOwotfQotCi1mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIs
IHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3Ig
KSB7Ci0gICAgaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7Ci0g
ICAgICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Ci0gICAgfQotICAg
IGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgewotICAgICAgICBw
b3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7Ci0gICAg
fQotICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRl
eHQsIHhtbCApIHsKLSAgICAgICAgdmFyIHRlbXAsIGksIGVsZW0sCi0gICAgICAgICAgICBwcmVN
YXAgPSBbXSwKLSAgICAgICAgICAgIHBvc3RNYXAgPSBbXSwKLSAgICAgICAgICAgIHByZWV4aXN0
aW5nID0gcmVzdWx0cy5sZW5ndGgsCi0KLSAgICAgICAgICAgIC8vIEdldCBpbml0aWFsIGVsZW1l
bnRzIGZyb20gc2VlZCBvciBjb250ZXh0Ci0gICAgICAgICAgICBlbGVtcyA9IHNlZWQgfHwgbXVs
dGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250
ZXh0IF0gOiBjb250ZXh0LCBbXSApLAotCi0gICAgICAgICAgICAvLyBQcmVmaWx0ZXIgdG8gZ2V0
IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJv
bml6YXRpb24KLSAgICAgICAgICAgIG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwg
IXNlbGVjdG9yICkgPwotICAgICAgICAgICAgICAgIGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBw
cmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKLSAgICAgICAgICAgICAgICBlbGVtcywKLQotICAg
ICAgICAgICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPwotICAgICAgICAgICAgICAgIC8vIElmIHdl
IGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0Rmls
dGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCi0gICAgICAgICAgICAgICAgcG9zdEZpbmRlciB8
fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vz
c2FyeQotICAgICAgICAgICAgICAgICAgICBbXSA6Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Li4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMgOgotICAgICAgICAgICAgICAgIG1hdGNoZXJJbjsKLQotICAgICAgICAvLyBGaW5kIHBy
aW1hcnkgbWF0Y2hlcwotICAgICAgICBpZiAoIG1hdGNoZXIgKSB7Ci0gICAgICAgICAgICBtYXRj
aGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQXBwbHkgcG9zdEZpbHRlcgotICAgICAgICBpZiAoIHBvc3RGaWx0ZXIgKSB7
Ci0gICAgICAgICAgICB0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTsKLSAg
ICAgICAgICAgIHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKLQotICAgICAg
ICAgICAgLy8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRv
IG1hdGNoZXJJbgotICAgICAgICAgICAgaSA9IHRlbXAubGVuZ3RoOwotICAgICAgICAgICAgd2hp
bGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHRlbXBbaV0pICkgewot
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJ
blsgcG9zdE1hcFtpXSBdID0gZWxlbSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAgaWYgKCBw
b3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHBvc3RGaW5k
ZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBi
eSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cwot
ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gW107Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBt
YXRjaGVyT3V0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxl
bSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBvc3RGaW5k
ZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVk
IHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZAotICAgICAgICAgICAgICAgIGkg
PSBtYXRjaGVyT3V0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQs
IGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIC8vIEFkZCBl
bGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZAotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbWF0Y2hlck91dCA9IGNvbmRlbnNlKAotICAgICAgICAg
ICAgICAgIG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgPwotICAgICAgICAgICAgICAgICAgICBtYXRj
aGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOgotICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVyT3V0Ci0gICAgICAgICAgICApOwotICAgICAgICAgICAgaWYg
KCBwb3N0RmluZGVyICkgewotICAgICAgICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIHJlc3Vs
dHMsIG1hdGNoZXJPdXQsIHhtbCApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vu
cyApIHsKLSAgICB2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLAotICAgICAgICBsZW4gPSB0
b2tlbnMubGVuZ3RoLAotICAgICAgICBsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0
b2tlbnNbMF0udHlwZSBdLAotICAgICAgICBpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0
aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwKLSAgICAgICAgaSA9IGxlYWRpbmdSZWxhdGl2ZSA/
IDEgOiAwLAotCi0gICAgICAgIC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRo
YXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCi0gICAg
ICAgIG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDsKLSAgICAgICAgfSwgaW1wbGlj
aXRSZWxhdGl2ZSwgdHJ1ZSApLAotICAgICAgICBtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5h
dG9yKCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwo
IGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7Ci0gICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUs
IHRydWUgKSwKLSAgICAgICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4
bWwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8
IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKLSAgICAgICAgICAgICAgICAo
Y2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPwotICAgICAgICAgICAgICAgICAgICBt
YXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKLSAgICAgICAgICAgICAgICAgICAg
bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOwotICAgICAgICB9IF07Ci0K
LSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgaWYgKCAobWF0Y2hlciA9IEV4
cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewotICAgICAgICAgICAgbWF0Y2hlcnMg
PSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkg
XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1hdGNoZXIgPSBFeHByLmZpbHRlclsg
dG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTsKLQotICAg
ICAgICAgICAgLy8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNo
ZXIKLSAgICAgICAgICAgIGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkgewotICAgICAgICAgICAg
ICAgIC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3Bl
ciBoYW5kbGluZwotICAgICAgICAgICAgICAgIGogPSArK2k7Ci0gICAgICAgICAgICAgICAgZm9y
ICggOyBqIDwgbGVuOyBqKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxh
dGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiBzZXRNYXRjaGVyKAotICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiBlbGVt
ZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwKLSAgICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgdG9r
ZW5zLnNsaWNlKCAwLCBpIC0gMSApLmpvaW4oIiIpLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksCi0g
ICAgICAgICAgICAgICAgICAgIG1hdGNoZXIsCi0gICAgICAgICAgICAgICAgICAgIGkgPCBqICYm
IG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLAotICAgICAgICAgICAg
ICAgICAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNs
aWNlKCBqICkpICksCi0gICAgICAgICAgICAgICAgICAgIGogPCBsZW4gJiYgdG9rZW5zLmpvaW4o
IiIpCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hdGNo
ZXJzLnB1c2goIG1hdGNoZXIgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlbGVt
ZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKLX0KLQotZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1h
dGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgewotICAgIHZhciBieVNldCA9
IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsCi0gICAgICAgIGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRj
aGVycy5sZW5ndGggPiAwLAotICAgICAgICBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwg
Y29udGV4dCwgeG1sLCByZXN1bHRzLCBleHBhbmRDb250ZXh0ICkgewotICAgICAgICAgICAgdmFy
IGVsZW0sIGosIG1hdGNoZXIsCi0gICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IFtdLAotICAg
ICAgICAgICAgICAgIG1hdGNoZWRDb3VudCA9IDAsCi0gICAgICAgICAgICAgICAgaSA9ICIwIiwK
LSAgICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAotICAgICAgICAgICAgICAg
IG91dGVybW9zdCA9IGV4cGFuZENvbnRleHQgIT0gbnVsbCwKLSAgICAgICAgICAgICAgICBjb250
ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCwKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0
IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIGNvbnRleHQKLSAgICAgICAgICAg
ICAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwg
ZXhwYW5kQ29udGV4dCAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dCApLAotICAgICAg
ICAgICAgICAgIC8vIE5lc3RlZCBtYXRjaGVycyBzaG91bGQgdXNlIG5vbi1pbnRlZ2VyIGRpcnJ1
bnMKLSAgICAgICAgICAgICAgICBkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJh
Y2t1cCA9PSBudWxsID8gMSA6IE1hdGguRSk7Ci0KLSAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0
ICkgewotICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1
bWVudCAmJiBjb250ZXh0OwotICAgICAgICAgICAgICAgIGNhY2hlZHJ1bnMgPSBzdXBlck1hdGNo
ZXIuZWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCBlbGVtZW50cyBwYXNz
aW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzCi0gICAgICAgICAgICBmb3Ig
KCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0g
MDsgKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbal0pOyBqKysgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWNoZWRydW5zID0gKytzdXBlck1hdGNoZXIuZWw7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBU
cmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCi0gICAgICAgICAgICAgICAg
aWYgKCBieVNldCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhleSB3aWxsIGhhdmUgZ29u
ZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVycwotICAgICAgICAgICAgICAgICAgICBpZiAo
IChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaGVkQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBu
b3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQXBwbHkgc2V0
IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzCi0gICAgICAgICAgICBtYXRjaGVkQ291bnQg
Kz0gaTsKLSAgICAgICAgICAgIGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgewot
ICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2pdKTsg
aisrICkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNo
ZWQsIGNvbnRleHQsIHhtbCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICggc2VlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVpbnRlZ3JhdGUgZWxlbWVu
dCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEodW5t
YXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGluZGV4IHBsYWNl
aG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlcwotICAgICAgICAgICAgICAg
ICAgICBzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCi0gICAgICAg
ICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApOwotCi0gICAgICAgICAg
ICAgICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNz
ZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCi0gICAgICAgICAgICAgICAgaWYgKCBvdXRl
cm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmCi0gICAgICAgICAgICAg
ICAgICAgICggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkgewotCi0g
ICAgICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPdmVycmlkZSBtYW5p
cHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMKLSAgICAgICAgICAgIGlmICgg
b3V0ZXJtb3N0ICkgewotICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOwot
ICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdW5tYXRjaGVkOwotICAgICAgICB9OwotCi0g
ICAgc3VwZXJNYXRjaGVyLmVsID0gMDsKLSAgICByZXR1cm4gYnlTZXQgPwotICAgICAgICBtYXJr
RnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKLSAgICAgICAgc3VwZXJNYXRjaGVyOwotfQotCi1j
b21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGdyb3VwIC8qIElu
dGVybmFsIFVzZSBPbmx5ICovICkgewotICAgIHZhciBpLAotICAgICAgICBzZXRNYXRjaGVycyA9
IFtdLAotICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKLSAgICAgICAgY2FjaGVkID0gY29t
cGlsZXJDYWNoZVsgZXhwYW5kbyBdWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgaWYgKCAhY2Fj
aGVkICkgewotICAgICAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5j
dGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQKLSAgICAgICAgaWYg
KCAhZ3JvdXAgKSB7Ci0gICAgICAgICAgICBncm91cCA9IHRva2VuaXplKCBzZWxlY3RvciApOwot
ICAgICAgICB9Ci0gICAgICAgIGkgPSBncm91cC5sZW5ndGg7Ci0gICAgICAgIHdoaWxlICggaS0t
ICkgewotICAgICAgICAgICAgY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIGdyb3VwW2ldICk7
Ci0gICAgICAgICAgICBpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgewotICAgICAgICAgICAgICAg
IHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KLSAg
ICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBN
YXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7Ci0gICAgfQotICAgIHJl
dHVybiBjYWNoZWQ7Ci19OwotCi1mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3Rvciwg
Y29udGV4dHMsIHJlc3VsdHMgKSB7Ci0gICAgdmFyIGkgPSAwLAotICAgICAgICBsZW4gPSBjb250
ZXh0cy5sZW5ndGg7Ci0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgIFNpenps
ZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHRzOwotfQotCi1mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRz
LCBzZWVkLCB4bWwgKSB7Ci0gICAgdmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsCi0g
ICAgICAgIG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICksCi0gICAgICAgIGogPSBtYXRjaC5s
ZW5ndGg7Ci0KLSAgICBpZiAoICFzZWVkICkgewotICAgICAgICAvLyBUcnkgdG8gbWluaW1pemUg
b3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBncm91cAotICAgICAgICBpZiAoIG1hdGNo
Lmxlbmd0aCA9PT0gMSApIHsKLQotICAgICAgICAgICAgLy8gVGFrZSBhIHNob3J0Y3V0IGFuZCBz
ZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQKLSAgICAgICAgICAg
IHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTsKLSAgICAgICAgICAgIGlm
ICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQi
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIXhtbCAm
JgotICAgICAgICAgICAgICAgICAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkg
ewotCi0gICAgICAgICAgICAgICAgY29udGV4dCA9IEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0
Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLCBjb250ZXh0LCB4bWwgKVswXTsKLSAg
ICAgICAgICAgICAgICBpZiAoICFjb250ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzZWxlY3Rv
ciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS5sZW5ndGggKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBt
YXRjaGluZwotICAgICAgICAgICAgZm9yICggaSA9IG1hdGNoRXhwclsiUE9TIl0udGVzdCggc2Vs
ZWN0b3IgKSA/IC0xIDogdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkgewotICAgICAg
ICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgICAgICAgICAgICAgLy8gQWJvcnQg
aWYgd2UgaGl0IGEgY29tYmluYXRvcgotICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2
ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCAoZmluZCA9IEV4cHIuZmlu
ZFsgdHlwZSBdKSApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VhcmNoLCBleHBhbmRpbmcg
Y29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggKHNlZWQgPSBmaW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4ubWF0
Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgcnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUg
fHwgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbAotICAgICAgICAgICAgICAg
ICAgICApKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2VlZCBpcyBlbXB0
eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbnMuc3BsaWNlKCBpLCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRva2Vucy5qb2luKCIiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoIHNlZWQsIDAgKSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24KLSAg
ICAvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZp
ZWQgdGhlIHNlbGVjdG9yIGFib3ZlCi0gICAgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkoCi0g
ICAgICAgIHNlZWQsCi0gICAgICAgIGNvbnRleHQsCi0gICAgICAgIHhtbCwKLSAgICAgICAgcmVz
dWx0cywKLSAgICAgICAgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKQotICAgICk7Ci0gICAgcmV0
dXJuIHJlc3VsdHM7Ci19Ci0KLWlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApIHsKLSAg
ICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBkaXNjb25uZWN0ZWRNYXRjaCwKLSAgICAgICAg
ICAgIG9sZFNlbGVjdCA9IHNlbGVjdCwKLSAgICAgICAgICAgIHJlc2NhcGUgPSAvJ3xcXC9nLAot
ICAgICAgICAgICAgcmF0dHJpYnV0ZVF1b3RlcyA9IC9cPVtceDIwXHRcclxuXGZdKihbXiciXF1d
KilbXHgyMFx0XHJcblxmXSpcXS9nLAotCi0gICAgICAgICAgICAvLyBxU2EoOmZvY3VzKSByZXBv
cnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKSwgbm8gbmVlZCB0byBhbHNvIGFkZCB0byBi
dWdneU1hdGNoZXMgc2luY2UgbWF0Y2hlcyBjaGVja3MgYnVnZ3lRU0EKLSAgICAgICAgICAgIC8v
IEEgc3VwcG9ydCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAod291bGQgaW5jbHVk
ZSBkb2N1bWVudCByZWFkeSkKLSAgICAgICAgICAgIHJidWdneVFTQSA9IFsgIjpmb2N1cyIgXSwK
LQotICAgICAgICAgICAgLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ug
d2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKLSAgICAgICAgICAgIC8vIEEgc3VwcG9ydCB0ZXN0
IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAod291bGQgaW5jbHVkZSBkb2N1bWVudCByZWFk
eSkKLSAgICAgICAgICAgIC8vIGp1c3Qgc2tpcCBtYXRjaGVzU2VsZWN0b3IgZm9yIDphY3RpdmUK
LSAgICAgICAgICAgIHJidWdneU1hdGNoZXMgPSBbICI6YWN0aXZlIiBdLAotICAgICAgICAgICAg
bWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgICAgICAgICAgICAgZG9j
RWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAgICAgICBkb2NFbGVtLndlYmtp
dE1hdGNoZXNTZWxlY3RvciB8fAotICAgICAgICAgICAgICAgIGRvY0VsZW0ub01hdGNoZXNTZWxl
Y3RvciB8fAotICAgICAgICAgICAgICAgIGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3I7Ci0KLSAg
ICAgICAgLy8gQnVpbGQgUVNBIHJlZ2V4Ci0gICAgICAgIC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0
ZWQgZnJvbSBEaWVnbyBQZXJpbmkKLSAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0g
ICAgICAgICAgICAvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlCi0g
ICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxp
Y3RseQotICAgICAgICAgICAgLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUs
Ci0gICAgICAgICAgICAvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAotICAg
ICAgICAgICAgLy8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkKLSAgICAgICAg
ICAgIGRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9u
Pjwvc2VsZWN0PiI7Ci0KLSAgICAgICAgICAgIC8vIElFOCAtIFNvbWUgYm9vbGVhbiBhdHRyaWJ1
dGVzIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVy
eVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgewotICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OmNoZWNrZWR8ZGlzYWJsZWR8
aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiApOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJu
IHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50cwotICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICAgICAg
ICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlz
IG9uZSkKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIp
Lmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBk
aXYgKSB7Ci0KLSAgICAgICAgICAgIC8vIE9wZXJhIDEwLTEyL0lFOSAtIF49ICQ9ICo9IGFuZCBl
bXB0eSB2YWx1ZXMKLSAgICAgICAgICAgIC8vIFNob3VsZCBub3Qgc2VsZWN0IGFueXRoaW5nCi0g
ICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwIHRlc3Q9Jyc+PC9wPiI7Ci0gICAgICAgICAg
ICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoICkgewotICAg
ICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3BhY2UgKyAiKig/
OlwiXCJ8JycpIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGRiAzLjUgLSA6
ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFy
ZSBzdGlsbCBlbmFibGVkKQotICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIChk
byBub3QgcHV0IHRlc3RzIGFmdGVyIHRoaXMgb25lKQotICAgICAgICAgICAgZGl2LmlubmVySFRN
TCA9ICI8aW5wdXQgdHlwZT0naGlkZGVuJy8+IjsKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVy
eVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByYnVn
Z3lRU0EucHVzaCgiOmVuYWJsZWQiLCAiOmRpc2FibGVkIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIC8vIHJidWdneVFTQSBhbHdheXMgY29udGFpbnMgOmZvY3VzLCBz
byBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVjawotICAgICAgICByYnVnZ3lRU0EgPSAvKiByYnVn
Z3lRU0EubGVuZ3RoICYmICovIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKLQot
ICAgICAgICBzZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNl
ZWQsIHhtbCApIHsKLSAgICAgICAgICAgIC8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgd2hl
biBub3QgZmlsdGVyaW5nLAotICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGlzIG5vdCB4bWwsCi0g
ICAgICAgICAgICAvLyBhbmQgd2hlbiBubyBRU0EgYnVncyBhcHBseQotICAgICAgICAgICAgaWYg
KCAhc2VlZCAmJiAheG1sICYmICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZ3JvdXBzLCBpLAotICAgICAgICAgICAgICAgICAgICBvbGQgPSB0cnVl
LAotICAgICAgICAgICAgICAgICAgICBuaWQgPSBleHBhbmRvLAotICAgICAgICAgICAgICAgICAg
ICBuZXdDb250ZXh0ID0gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3Ig
PSBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIHNlbGVjdG9yOwotCi0gICAgICAgICAgICAgICAg
Ly8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzCi0gICAgICAg
ICAgICAgICAgLy8gV2UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRy
YSBJRCBvbiB0aGUgcm9vdAotICAgICAgICAgICAgICAgIC8vIGFuZCB3b3JraW5nIHVwIGZyb20g
dGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVlKQotICAgICAg
ICAgICAgICAgIC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50cwotICAgICAg
ICAgICAgICAgIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAgICAgICBncm91
cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIChv
bGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiaWQiKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuaWQgPSBvbGQucmVwbGFjZSggcmVzY2FwZSwgIlxcJCYiICk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldEF0dHJp
YnV0ZSggImlkIiwgbmlkICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgbmlkID0gIltpZD0nIiArIG5pZCArICInXSAiOwotCi0gICAgICAgICAgICAgICAgICAg
IGkgPSBncm91cHMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1tpXSA9IG5pZCArIGdyb3Vwc1tpXS5qb2lu
KCIiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBuZXdDb250
ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwg
Y29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbigi
LCIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggbmV3U2VsZWN0
b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0
b3JBbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IKLSAgICAgICAg
ICAgICAgICAgICAgICAgICksIDAgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gocXNhRXJyb3IpIHsKLSAgICAg
ICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IW9sZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUF0dHJp
YnV0ZSgiaWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIG9sZFNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApOwot
ICAgICAgICB9OwotCi0gICAgICAgIGlmICggbWF0Y2hlcyApIHsKLSAgICAgICAgICAgIGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBp
dCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvcgotICAgICAgICAgICAgICAgIC8vIG9u
IGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCi0gICAgICAgICAgICAgICAgZGlzY29ubmVjdGVk
TWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgImRpdiIgKTsKLQotICAgICAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAvLyBH
ZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0gICAgICAgICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5jYWxsKCBkaXYsICJbdGVzdCE9
JyddOnNpenpsZSIgKTsKLSAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAi
IT0iLCBwc2V1ZG9zICk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7fQotICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgIC8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5z
IDphY3RpdmUgYW5kIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKLSAgICAg
ICAgICAgIHJidWdneU1hdGNoZXMgPSAvKiByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiAqLyBuZXcg
UmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOwotCi0gICAgICAgICAgICBTaXp6bGUu
bWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCi0gICAg
ICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEn
XSIgKTsKLQotICAgICAgICAgICAgICAgIC8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5z
IDphY3RpdmUsIHNvIG5vIG5lZWQgZm9yIGFuIGV4aXN0ZW5jZSBjaGVjawotICAgICAgICAgICAg
ICAgIGlmICggIWlzWE1MKCBlbGVtICkgJiYgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICYm
ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhw
ciApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9y
IHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJldCB8fCBkaXNjb25uZWN0ZWRNYXRjaCB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8g
YmUgaW4gYSBkb2N1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcmFn
bWVudCBpbiBJRSA5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1l
bnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIFsgZWxlbSBdICkubGVu
Z3RoID4gMDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICB9KSgpOwotfQotCi0vLyBE
ZXByZWNhdGVkCi1FeHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJlcSJdOwotCi0v
LyBCYWNrLWNvbXBhdAotZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9Ci1FeHByLmZpbHRlcnMgPSBz
ZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIucHNldWRvczsKLUV4cHIuc2V0RmlsdGVycyA9IG5l
dyBzZXRGaWx0ZXJzKCk7Ci0KLS8vIE92ZXJyaWRlIHNpenpsZSBhdHRyaWJ1dGUgcmV0cmlldmFs
Ci1TaXp6bGUuYXR0ciA9IGpRdWVyeS5hdHRyOwotalF1ZXJ5LmZpbmQgPSBTaXp6bGU7Ci1qUXVl
cnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7Ci1qUXVlcnkuZXhwclsiOiJdID0galF1ZXJ5LmV4
cHIucHNldWRvczsKLWpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsKLWpRdWVyeS50
ZXh0ID0gU2l6emxlLmdldFRleHQ7Ci1qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7Ci1q
UXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7Ci0KLQotfSkoIHdpbmRvdyApOwotdmFy
IHJ1bnRpbCA9IC9VbnRpbCQvLAotICAgIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2
KD86VW50aWx8QWxsKSkvLAotICAgIGlzU2ltcGxlID0gL14uW146I1xbXC4sXSokLywKLSAgICBy
bmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LAotICAgIC8vIG1l
dGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZy
b20gYSB1bmlxdWUgc2V0Ci0gICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKLSAgICAgICAgY2hpbGRy
ZW46IHRydWUsCi0gICAgICAgIGNvbnRlbnRzOiB0cnVlLAotICAgICAgICBuZXh0OiB0cnVlLAot
ICAgICAgICBwcmV2OiB0cnVlCi0gICAgfTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgZmlu
ZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICB2YXIgaSwgbCwgbGVuZ3RoLCBuLCBy
LCByZXQsCi0gICAgICAgICAgICBzZWxmID0gdGhpczsKLQotICAgICAgICBpZiAoIHR5cGVvZiBz
ZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBzZWxl
Y3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwg
bCA9IHNlbGYubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0ID0gdGhpcy5w
dXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9yICk7Ci0KLSAgICAgICAgZm9yICggaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IHJl
dC5sZW5ndGg7Ci0gICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsZWN0b3IsIHRoaXNbaV0sIHJl
dCApOwotCi0gICAgICAgICAgICBpZiAoIGkgPiAwICkgewotICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRzIGFyZSB1bmlxdWUKLSAgICAgICAgICAgICAgICBmb3Ig
KCBuID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisrICkgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKCByID0gMDsgciA8IGxlbmd0aDsgcisrICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCByZXRbcl0gPT09IHJldFtuXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXQuc3BsaWNlKG4tLSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
cmV0OwotICAgIH0sCi0KLSAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7Ci0gICAgICAgIHZh
ciBpLAotICAgICAgICAgICAgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCi0gICAg
ICAgICAgICBsZW4gPSB0YXJnZXRzLmxlbmd0aDsKLQotICAgICAgICByZXR1cm4gdGhpcy5maWx0
ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkg
ewotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ld
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIG5vdDogZnVuY3Rp
b24oIHNlbGVjdG9yICkgewotICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0
aGlzLCBzZWxlY3RvciwgZmFsc2UpLCAibm90Iiwgc2VsZWN0b3IpOwotICAgIH0sCi0KLSAgICBm
aWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsK
LSAgICB9LAotCi0gICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0dXJu
ICEhc2VsZWN0b3IgJiYgKAotICAgICAgICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5n
IiA/Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUg
c2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldAotICAgICAgICAg
ICAgICAgIC8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUg
Zm9yIGEgZG9jIHdpdGggdHdvICJwIi4KLSAgICAgICAgICAgICAgICBybmVlZHNDb250ZXh0LnRl
c3QoIHNlbGVjdG9yICkgPwotICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCB0
aGlzLmNvbnRleHQgKS5pbmRleCggdGhpc1swXSApID49IDAgOgotICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApLmxlbmd0aCA+IDAgOgotICAgICAgICAg
ICAgICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTsKLSAgICB9LAotCi0g
ICAgY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKLSAgICAgICAgdmFy
IGN1ciwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoLAot
ICAgICAgICAgICAgcmV0ID0gW10sCi0gICAgICAgICAgICBwb3MgPSBybmVlZHNDb250ZXh0LnRl
c3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8KLSAgICAg
ICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6
Ci0gICAgICAgICAgICAgICAgMDsKLQotICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7Ci0g
ICAgICAgICAgICBjdXIgPSB0aGlzW2ldOwotCi0gICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBj
dXIub3duZXJEb2N1bWVudCAmJiBjdXIgIT09IGNvbnRleHQgJiYgY3VyLm5vZGVUeXBlICE9PSAx
MSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIpID4gLTEgOiBq
UXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkgewotICAgICAgICAg
ICAgICAgICAgICByZXQucHVzaCggY3VyICk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IHJldC5sZW5ndGggPiAx
ID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2VsZWN0b3JzICk7Ci0gICAgfSwKLQotICAgIC8vIERl
dGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KLSAgICAvLyB0aGUgbWF0
Y2hlZCBzZXQgb2YgZWxlbWVudHMKLSAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0KLSAg
ICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKLSAgICAgICAgaWYg
KCAhZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJl
bnROb2RlICkgPyB0aGlzLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIGluZGV4IGluIHNlbGVjdG9yCi0gICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJz
dHJpbmciICkgewotICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBq
UXVlcnkoIGVsZW0gKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTG9jYXRlIHRoZSBwb3Np
dGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50Ci0gICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJh
eSgKLSAgICAgICAgICAgIC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZp
cnN0IGVsZW1lbnQgaXMgdXNlZAotICAgICAgICAgICAgZWxlbS5qcXVlcnkgPyBlbGVtWzBdIDog
ZWxlbSwgdGhpcyApOwotICAgIH0sCi0KLSAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29u
dGV4dCApIHsKLSAgICAgICAgdmFyIHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIg
PwotICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSA6Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9kZVR5cGUg
PyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAotICAgICAgICAgICAgYWxsID0galF1ZXJ5Lm1l
cmdlKCB0aGlzLmdldCgpLCBzZXQgKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IGlzRGlzY29ubmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCggYWxsWzBdICkgPwot
ICAgICAgICAgICAgYWxsIDoKLSAgICAgICAgICAgIGpRdWVyeS51bmlxdWUoIGFsbCApICk7Ci0g
ICAgfSwKLQotICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KLSAgICAgICAgICAgIHRoaXMucHJldk9i
amVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoc2VsZWN0b3IpCi0gICAgICAgICk7Ci0gICAg
fQotfSk7Ci0KLWpRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7Ci0KLS8vIEEg
cGFpbmZ1bGx5IHNpbXBsZSBjaGVjayB0byBzZWUgaWYgYW4gZWxlbWVudCBpcyBkaXNjb25uZWN0
ZWQKLS8vIGZyb20gYSBkb2N1bWVudCAoc2hvdWxkIGJlIGltcHJvdmVkLCB3aGVyZSBmZWFzaWJs
ZSkuCi1mdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZCggbm9kZSApIHsKLSAgICByZXR1cm4gIW5vZGUg
fHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDExOwot
fQotCi1mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKLSAgICBkbyB7Ci0gICAgICAgIGN1
ciA9IGN1clsgZGlyIF07Ci0gICAgfSB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDEg
KTsKLQotICAgIHJldHVybiBjdXI7Ci19Ci0KLWpRdWVyeS5lYWNoKHsKLSAgICBwYXJlbnQ6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwot
ICAgICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQg
OiBudWxsOwotICAgIH0sCi0gICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
IHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKLSAgICB9LAotICAgIHBh
cmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewotICAgICAgICByZXR1cm4g
alF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwotICAgIH0sCi0gICAgbmV4
dDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4
dFNpYmxpbmciICk7Ci0gICAgfSwKLSAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Ci0gICAgfSwKLSAg
ICBuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIo
IGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICB9LAotICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBl
bGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGlu
ZyIgKTsKLSAgICB9LAotICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkg
ewotICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwg
KTsKLSAgICB9LAotICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewot
ICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGls
ICk7Ci0gICAgfSwKLSAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJl
dHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxk
LCBlbGVtICk7Ci0gICAgfSwKLSAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgIHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7Ci0gICAgfSwKLSAg
ICBjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwotICAgICAgICAgICAgZWxlbS5jb250ZW50RG9jdW1l
bnQgfHwgZWxlbS5jb250ZW50V2luZG93LmRvY3VtZW50IDoKLSAgICAgICAgICAgIGpRdWVyeS5t
ZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOwotICAgIH0KLX0sIGZ1bmN0aW9uKCBuYW1lLCBm
biApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3Ig
KSB7Ci0gICAgICAgIHZhciByZXQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKLQot
ICAgICAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSApICkgewotICAgICAgICAgICAgc2VsZWN0
b3IgPSB1bnRpbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9m
IHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHJldCA9IGpRdWVyeS5maWx0
ZXIoIHNlbGVjdG9yLCByZXQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IHRoaXMubGVu
Z3RoID4gMSAmJiAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdID8galF1ZXJ5LnVuaXF1ZSggcmV0
ICkgOiByZXQ7Ci0KLSAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgJiYgcnBhcmVudHNwcmV2
LnRlc3QoIG5hbWUgKSApIHsKLSAgICAgICAgICAgIHJldCA9IHJldC5yZXZlcnNlKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgY29yZV9z
bGljZS5jYWxsKCBhcmd1bWVudHMgKS5qb2luKCIsIikgKTsKLSAgICB9OwotfSk7Ci0KLWpRdWVy
eS5leHRlbmQoewotICAgIGZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7Ci0g
ICAgICAgIGlmICggbm90ICkgewotICAgICAgICAgICAgZXhwciA9ICI6bm90KCIgKyBleHByICsg
IikiOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSA/Ci0g
ICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxlbXNbMF0sIGV4cHIpID8g
WyBlbGVtc1swXSBdIDogW10gOgotICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlcyhleHBy
LCBlbGVtcyk7Ci0gICAgfSwKLQotICAgIGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwg
KSB7Ci0gICAgICAgIHZhciBtYXRjaGVkID0gW10sCi0gICAgICAgICAgICBjdXIgPSBlbGVtWyBk
aXIgXTsKLQotICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVu
dGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciAp
LmlzKCB1bnRpbCApKSApIHsKLSAgICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICkg
ewotICAgICAgICAgICAgICAgIG1hdGNoZWQucHVzaCggY3VyICk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjdXIgPSBjdXJbZGlyXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWF0
Y2hlZDsKLSAgICB9LAotCi0gICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7Ci0gICAg
ICAgIHZhciByID0gW107Ci0KLSAgICAgICAgZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyAp
IHsKLSAgICAgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewot
ICAgICAgICAgICAgICAgIHIucHVzaCggbiApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHI7Ci0gICAgfQotfSk7Ci0KLS8vIEltcGxlbWVudCB0aGUgaWRlbnRp
Y2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90Ci1mdW5jdGlvbiB3aW5ub3coIGVs
ZW1lbnRzLCBxdWFsaWZpZXIsIGtlZXAgKSB7Ci0KLSAgICAvLyBDYW4ndCBwYXNzIG51bGwgb3Ig
dW5kZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0Ci0gICAgLy8gU2V0IHRvIDAgdG8gc2tp
cCBzdHJpbmcgY2hlY2sKLSAgICBxdWFsaWZpZXIgPSBxdWFsaWZpZXIgfHwgMDsKLQotICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgewotICAgICAgICByZXR1cm4galF1
ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAgICAgICAgdmFy
IHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKLSAgICAgICAgICAg
IHJldHVybiByZXRWYWwgPT09IGtlZXA7Ci0gICAgICAgIH0pOwotCi0gICAgfSBlbHNlIGlmICgg
cXVhbGlmaWVyLm5vZGVUeXBlICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVu
dHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAgICAgICAgcmV0dXJuICggZWxlbSA9PT0g
cXVhbGlmaWVyICkgPT09IGtlZXA7Ci0gICAgICAgIH0pOwotCi0gICAgfSBlbHNlIGlmICggdHlw
ZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgIHZhciBmaWx0ZXJlZCA9IGpR
dWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVy
biBlbGVtLm5vZGVUeXBlID09PSAxOwotICAgICAgICB9KTsKLQotICAgICAgICBpZiAoIGlzU2lt
cGxlLnRlc3QoIHF1YWxpZmllciApICkgewotICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5maWx0
ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCApOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5j
dGlvbiggZWxlbSwgaSApIHsKLSAgICAgICAgcmV0dXJuICggalF1ZXJ5LmluQXJyYXkoIGVsZW0s
IHF1YWxpZmllciApID49IDAgKSA9PT0ga2VlcDsKLSAgICB9KTsKLX0KLWZ1bmN0aW9uIGNyZWF0
ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKSB7Ci0gICAgdmFyIGxpc3QgPSBub2RlTmFtZXMuc3Bs
aXQoICJ8IiApLAotICAgIHNhZmVGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOwotCi0gICAgaWYgKCBzYWZlRnJhZy5jcmVhdGVFbGVtZW50ICkgewotICAgICAgICB3aGls
ZSAoIGxpc3QubGVuZ3RoICkgewotICAgICAgICAgICAgc2FmZUZyYWcuY3JlYXRlRWxlbWVudCgK
LSAgICAgICAgICAgICAgICBsaXN0LnBvcCgpCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBzYWZlRnJhZzsKLX0KLQotdmFyIG5vZGVOYW1lcyA9ICJhYmJyfGFy
dGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2Fw
dGlvbnxmaWd1cmV8Zm9vdGVyfCIgKwotICAgICAgICAiaGVhZGVyfGhncm91cHxtYXJrfG1ldGVy
fG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLAotICAgIHJp
bmxpbmVqUXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLAotICAgIHJsZWFkaW5n
V2hpdGVzcGFjZSA9IC9eXHMrLywKLSAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVt
YmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLAot
ICAgIHJ0YWdOYW1lID0gLzwoW1x3Ol0rKS8sCi0gICAgcnRib2R5ID0gLzx0Ym9keS9pLAotICAg
IHJodG1sID0gLzx8JiM/XHcrOy8sCi0gICAgcm5vSW5uZXJodG1sID0gLzwoPzpzY3JpcHR8c3R5
bGV8bGluaykvaSwKLSAgICBybm9jYWNoZSA9IC88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRp
b258c3R5bGUpL2ksCi0gICAgcm5vc2hpbWNhY2hlID0gbmV3IFJlZ0V4cCgiPCg/OiIgKyBub2Rl
TmFtZXMgKyAiKVtcXHMvPl0iLCAiaSIpLAotICAgIHJjaGVja2FibGVUeXBlID0gL14oPzpjaGVj
a2JveHxyYWRpbykkLywKLSAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCi0gICAg
cmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKLSAgICByc2Ny
aXB0VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksCi0gICAgcmNsZWFuU2NyaXB0ID0gL15c
cyo8ISg/OlxbQ0RBVEFcW3xcLVwtKXxbXF1cLV17Mn0+XHMqJC9nLAotICAgIHdyYXBNYXAgPSB7
Ci0gICAgICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8
L3NlbGVjdD4iIF0sCi0gICAgICAgIGxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxk
c2V0PiIgXSwKLSAgICAgICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCi0g
ICAgICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAot
ICAgICAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3Rh
YmxlPiIgXSwKLSAgICAgICAgY29sOiBbIDIsICI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdy
b3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAotICAgICAgICBhcmVhOiBbIDEsICI8bWFw
PiIsICI8L21hcD4iIF0sCi0gICAgICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCi0gICAgfSwK
LSAgICBzYWZlRnJhZ21lbnQgPSBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICksCi0gICAg
ZnJhZ21lbnREaXYgPSBzYWZlRnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpICk7Ci0KLXdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKLXdy
YXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAu
Y2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Ci13cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKLQotLy8g
SUU2LTggY2FuJ3Qgc2VyaWFsaXplIGxpbmssIHNjcmlwdCwgc3R5bGUsIG9yIGFueSBodG1sNSAo
Tm9TY29wZSkgdGFncywKLS8vIHVubGVzcyB3cmFwcGVkIGluIGEgZGl2IHdpdGggbm9uLWJyZWFr
aW5nIGNoYXJhY3RlcnMgaW4gZnJvbnQgb2YgaXQuCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5odG1s
U2VyaWFsaXplICkgewotICAgIHdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJYPGRpdj4iLCAiPC9k
aXY+IiBdOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICB0ZXh0OiBmdW5jdGlvbiggdmFs
dWUgKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFs
dWUgKSB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5LnRleHQoIHRoaXMgKSA6Ci0gICAgICAgICAgICAgICAgdGhpcy5lbXB0
eSgpLmFwcGVuZCggKCB0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVu
dCApLmNyZWF0ZVRleHROb2RlKCB2YWx1ZSApICk7Ci0gICAgICAgIH0sIG51bGwsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoICk7Ci0gICAgfSwKLQotICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1s
ICkgewotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAgICBqUXVl
cnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICggdGhpc1swXSApIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCi0gICAgICAgICAgICB2YXIgd3Jh
cCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xvbmUodHJ1
ZSk7Ci0KLSAgICAgICAgICAgIGlmICggdGhpc1swXS5wYXJlbnROb2RlICkgewotICAgICAgICAg
ICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHdyYXAubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBlbGVt
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICYmIGVs
ZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IGVsZW0uZmlyc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbTsKLSAgICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHdyYXBJbm5lcjogZnVuY3Rp
b24oIGh0bWwgKSB7Ci0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICAgICAg
ICAgIGpRdWVyeSh0aGlzKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAgICAgICAgICAg
ICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKLQotICAgICAgICAgICAgaWYgKCBjb250
ZW50cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCAp
OwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBo
dG1sICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICB3cmFwOiBm
dW5jdGlvbiggaHRtbCApIHsKLSAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5j
dGlvbiggaHRtbCApOwotCi0gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewot
ICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2Fs
bCh0aGlzLCBpKSA6IGh0bWwgKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIHVud3JhcDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkg
ewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxk
Tm9kZXMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSkuZW5kKCk7Ci0gICAgfSwKLQotICAg
IGFwcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt
ZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubm9k
ZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICB9LAotCi0gICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmRv
bU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICBp
ZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMuZmlyc3RDaGlsZCApOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgYmVmb3JlOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBl
bGVtICkgewotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVs
ZW0sIHRoaXMgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBh
cmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVyeS5jbGVhbigg
YXJndW1lbnRzICk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5t
ZXJnZSggc2V0LCB0aGlzICksICJiZWZvcmUiLCB0aGlzLnNlbGVjdG9yICk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoICFpc0Rpc2Nv
bm5lY3RlZCggdGhpc1swXSApICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGgg
KSB7Ci0gICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1lcmdlKCB0aGlzLCBzZXQg
KSwgImFmdGVyIiwgdGhpcy5zZWxlY3RvciApOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8v
IGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS0tZG8gbm90IGRvY3VtZW50Ci0gICAg
cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewotICAgICAgICB2YXIgZWxl
bSwKLSAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ld
KSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoICFzZWxlY3RvciB8fCBqUXVlcnku
ZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCAha2VlcERhdGEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpICk7
Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHZhciBlbGVtLAotICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgZm9yICggOyAoZWxlbSA9
IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50
IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwotICAgICAgICAgICAgd2hpbGUgKCBlbGVt
LmZpcnN0Q2hpbGQgKSB7Ci0gICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5m
aXJzdENoaWxkICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
dGhpczsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVw
RGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMg
PT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKLSAgICAgICAgZGVlcERhdGFBbmRFdmVu
dHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRh
QW5kRXZlbnRzOwotCi0gICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERh
dGFBbmRFdmVudHMgKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIGh0bWw6IGZ1bmN0aW9u
KCB2YWx1ZSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9u
KCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSB8fCB7fSwKLSAgICAg
ICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7Ci0KLSAg
ICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSA/Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0uaW5u
ZXJIVE1MLnJlcGxhY2UoIHJpbmxpbmVqUXVlcnksICIiICkgOgotICAgICAgICAgICAgICAgICAg
ICB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBj
YW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKLSAgICAgICAgICAgIGlm
ICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVl
ICkgJiYKLSAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJpYWxpemUgfHwg
IXJub3NoaW1jYWNoZS50ZXN0KCB2YWx1ZSApICApICYmCi0gICAgICAgICAgICAgICAgKCBqUXVl
cnkuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3Qo
IHZhbHVlICkgKSAmJgotICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMo
IHZhbHVlICkgfHwgWyIiLCAiIl0gKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7Ci0KLSAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsK
LQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwg
bDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9k
ZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gdGhpc1tpXSB8fCB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5E
YXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBlbGVt
ID0gMDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4g
ZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAotICAgICAgICAgICAgICAgIH0gY2F0
Y2goZSkge30KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Ci0gICAgfSwKLQot
ICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgIGlmICggIWlzRGlz
Y29ubmVjdGVkKCB0aGlzWzBdICkgKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNl
cnRlZAotICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5nIGEgcGFyZW50
IHdpdGggY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCBvbGQgPSBz
ZWxmLmh0bWwoKTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlV2l0aCggdmFsdWUu
Y2FsbCggdGhpcywgaSwgb2xkICkgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciICkgewotICAg
ICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLmRldGFjaCgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0U2libGluZywKLSAgICAgICAgICAgICAgICAg
ICAgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5leHQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGpRdWVyeShuZXh0KS5iZWZvcmUoIHZhbHVlICk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHBhcmVudCkuYXBwZW5kKCB2
YWx1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID8KLSAgICAgICAgICAgIHRoaXMucHVzaFN0YWNr
KCBqUXVlcnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKSwgInJl
cGxhY2VXaXRoIiwgdmFsdWUgKSA6Ci0gICAgICAgICAgICB0aGlzOwotICAgIH0sCi0KLSAgICBk
ZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmVtb3Zl
KCBzZWxlY3RvciwgdHJ1ZSApOwotICAgIH0sCi0KLSAgICBkb21NYW5pcDogZnVuY3Rpb24oIGFy
Z3MsIHRhYmxlLCBjYWxsYmFjayApIHsKLQotICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQg
YXJyYXlzCi0gICAgICAgIGFyZ3MgPSBbXS5jb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7Ci0KLSAg
ICAgICAgdmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFnbWVudCwgaU5vQ2xvbmUsCi0gICAgICAgICAg
ICBpID0gMCwKLSAgICAgICAgICAgIHZhbHVlID0gYXJnc1swXSwKLSAgICAgICAgICAgIHNjcmlw
dHMgPSBbXSwKLSAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsKLQotICAgICAgICAvLyBXZSBj
YW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQK
LSAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSAmJiBsID4gMSAmJiB0eXBl
b2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpR
dWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrICk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUp
ICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyk7Ci0gICAgICAgICAgICAgICAgYXJnc1sw
XSA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIHRhYmxlID8gc2VsZi5odG1sKCkgOiB1bmRlZmluZWQg
KTsKLSAgICAgICAgICAgICAgICBzZWxmLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sg
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB0aGlzWzBdICkg
ewotICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlz
LCBzY3JpcHRzICk7Ci0gICAgICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7Ci0g
ICAgICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAgIGlm
ICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAg
ZnJhZ21lbnQgPSBmaXJzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBmaXJz
dCApIHsKLSAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSgg
Zmlyc3QsICJ0ciIgKTsKLQotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJh
Z21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBj
YW4gZW5kIHVwCi0gICAgICAgICAgICAgICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBp
biBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KLSAgICAgICAgICAgICAgICAvLyBGcmFnbWVu
dHMgZnJvbSB0aGUgZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFuZCBuZXZl
ciB1c2VkIGluIHBsYWNlLgotICAgICAgICAgICAgICAgIGZvciAoIGlOb0Nsb25lID0gcmVzdWx0
cy5jYWNoZWFibGUgfHwgbCAtIDE7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrLmNhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSAmJiBqUXVlcnku
bm9kZU5hbWUoIHRoaXNbaV0sICJ0YWJsZSIgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmluZE9yQXBwZW5kKCB0aGlzW2ldLCAidGJvZHkiICkgOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBpID09PSBpTm9DbG9u
ZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jbG9uZSggZnJhZ21lbnQsIHRydWUsIHRydWUgKQotICAg
ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gRml4ICMxMTgwOTogQXZvaWQgbGVha2luZyBtZW1vcnkKLSAgICAgICAg
ICAgIGZyYWdtZW50ID0gZmlyc3QgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAoIHNjcmlwdHMu
bGVuZ3RoICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBzY3JpcHRzLCBmdW5jdGlv
biggaSwgZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNyYyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmFqYXggKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmw6IGVsZW0uc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
OiAiR0VUIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICJzY3Jp
cHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbDogZmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0aHJvd3MiOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvcigibm8gYWpheCIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoICggZWxlbS50ZXh0IHx8IGVsZW0udGV4dENvbnRl
bnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIgKS5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIiICkg
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlz
OwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBmaW5kT3JBcHBlbmQoIGVsZW0sIHRhZyApIHsKLSAg
ICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIClbMF0gfHwgZWxlbS5hcHBl
bmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApICk7Ci19Ci0K
LWZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7Ci0KLSAgICBpZiAoIGRlc3Qu
bm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRhKCBzcmMgKSApIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHZhciB0eXBlLCBpLCBsLAotICAgICAgICBvbGREYXRhID0galF1
ZXJ5Ll9kYXRhKCBzcmMgKSwKLSAgICAgICAgY3VyRGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCwg
b2xkRGF0YSApLAotICAgICAgICBldmVudHMgPSBvbGREYXRhLmV2ZW50czsKLQotICAgIGlmICgg
ZXZlbnRzICkgewotICAgICAgICBkZWxldGUgY3VyRGF0YS5oYW5kbGU7Ci0gICAgICAgIGN1ckRh
dGEuZXZlbnRzID0ge307Ci0KLSAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAg
ICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkr
KyApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVu
dHNbIHR5cGUgXVsgaSBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBtYWtlIHRoZSBjbG9uZWQgcHVibGljIGRhdGEgb2JqZWN0IGEgY29weSBmcm9tIHRoZSBv
cmlnaW5hbAotICAgIGlmICggY3VyRGF0YS5kYXRhICkgewotICAgICAgICBjdXJEYXRhLmRhdGEg
PSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7Ci0gICAgfQotfQotCi1mdW5jdGlv
biBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsKLSAgICB2YXIgbm9kZU5hbWU7Ci0K
LSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCi0g
ICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gY2xlYXJBdHRyaWJ1dGVzIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZXMsIHdoaWNoIHdl
IGRvbid0IHdhbnQsCi0gICAgLy8gYnV0IGFsc28gcmVtb3ZlcyB0aGUgYXR0YWNoRXZlbnQgZXZl
bnRzLCB3aGljaCB3ZSAqZG8qIHdhbnQKLSAgICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkg
ewotICAgICAgICBkZXN0LmNsZWFyQXR0cmlidXRlcygpOwotICAgIH0KLQotICAgIC8vIG1lcmdl
QXR0cmlidXRlcywgaW4gY29udHJhc3QsIG9ubHkgbWVyZ2VzIGJhY2sgb24gdGhlCi0gICAgLy8g
b3JpZ2luYWwgYXR0cmlidXRlcywgbm90IHRoZSBldmVudHMKLSAgICBpZiAoIGRlc3QubWVyZ2VB
dHRyaWJ1dGVzICkgewotICAgICAgICBkZXN0Lm1lcmdlQXR0cmlidXRlcyggc3JjICk7Ci0gICAg
fQotCi0gICAgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICBp
ZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgLy8gSUU2LTEwIGltcHJvcGVy
bHkgY2xvbmVzIGNoaWxkcmVuIG9mIG9iamVjdCBlbGVtZW50cyB1c2luZyBjbGFzc2lkLgotICAg
ICAgICAvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciBpZiBwYXJlbnQg
aXMgbnVsbCwgIzEyMTMyLgotICAgICAgICBpZiAoIGRlc3QucGFyZW50Tm9kZSApIHsKLSAgICAg
ICAgICAgIGRlc3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRoaXMgcGF0aCBhcHBlYXJzIHVuYXZvaWRhYmxlIGZvciBJRTkuIFdoZW4gY2xvbmlu
ZyBhbiBvYmplY3QKLSAgICAgICAgLy8gZWxlbWVudCBpbiBJRTksIHRoZSBvdXRlckhUTUwgc3Ry
YXRlZ3kgYWJvdmUgaXMgbm90IHN1ZmZpY2llbnQuCi0gICAgICAgIC8vIElmIHRoZSBzcmMgaGFz
IGlubmVySFRNTCBhbmQgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90LAotICAgICAgICAvLyBjb3B5
IHRoZSBzcmMuaW5uZXJIVE1MIGludG8gdGhlIGRlc3QuaW5uZXJIVE1MLiAjMTAzMjQKLSAgICAg
ICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lICYmIChzcmMuaW5uZXJIVE1MICYmICFq
UXVlcnkudHJpbShkZXN0LmlubmVySFRNTCkpICkgewotICAgICAgICAgICAgZGVzdC5pbm5lckhU
TUwgPSBzcmMuaW5uZXJIVE1MOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKCBub2RlTmFt
ZSA9PT0gImlucHV0IiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkgewotICAg
ICAgICAvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xv
bmVkIGNoZWNrYm94Ci0gICAgICAgIC8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZh
aWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKLSAgICAgICAgLy8gYSBjaGVja2VkIGFwcGVh
cmFuY2UgaWYgdGhlIGRlZmF1bHRDaGVja2VkIHZhbHVlIGlzbid0IGFsc28gc2V0Ci0KLSAgICAg
ICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOwotCi0g
ICAgICAgIC8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVl
IG9mIGEgY2xvbmVkCi0gICAgICAgIC8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0
eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCi0gICAgICAgIGlmICggZGVzdC52YWx1ZSAhPT0gc3Jj
LnZhbHVlICkgewotICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKLSAgICAgICAg
fQotCi0gICAgLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8g
dGhlIGRlZmF1bHQgc2VsZWN0ZWQKLSAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwot
ICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKLSAgICAgICAgZGVzdC5z
ZWxlY3RlZCA9IHNyYy5kZWZhdWx0U2VsZWN0ZWQ7Ci0KLSAgICAvLyBJRTYtOCBmYWlscyB0byBz
ZXQgdGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuCi0gICAgLy8gY2xv
bmluZyBvdGhlciB0eXBlcyBvZiBpbnB1dCBmaWVsZHMKLSAgICB9IGVsc2UgaWYgKCBub2RlTmFt
ZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKLSAgICAgICAgZGVz
dC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwotCi0gICAgLy8gSUUgYmxhbmtzIGNv
bnRlbnRzIHdoZW4gY2xvbmluZyBzY3JpcHRzCi0gICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09
ICJzY3JpcHQiICYmIGRlc3QudGV4dCAhPT0gc3JjLnRleHQgKSB7Ci0gICAgICAgIGRlc3QudGV4
dCA9IHNyYy50ZXh0OwotICAgIH0KLQotICAgIC8vIEV2ZW50IGRhdGEgZ2V0cyByZWZlcmVuY2Vk
IGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvCi0gICAgLy8gZ2V0cyBjb3BpZWQgdG9v
Ci0gICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Ci19Ci0KLWpRdWVy
eS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFyZ3MsIGNvbnRleHQsIHNjcmlwdHMgKSB7Ci0g
ICAgdmFyIGZyYWdtZW50LCBjYWNoZWFibGUsIGNhY2hlaGl0LAotICAgICAgICBmaXJzdCA9IGFy
Z3NbIDAgXTsKLQotICAgIC8vIFNldCBjb250ZXh0IGZyb20gd2hhdCBtYXkgY29tZSBpbiBhcyB1
bmRlZmluZWQgb3IgYSBqUXVlcnkgY29sbGVjdGlvbiBvciBhIG5vZGUKLSAgICAvLyBVcGRhdGVk
IHRvIGZpeCAjMTIyNjYgd2hlcmUgYWNjZXNzaW5nIGNvbnRleHRbMF0gY291bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uIGluIElFOS8xMCAmCi0gICAgLy8gYWxzbyBkb3VibGVzIGFzIGZpeCBmb3IgIzg5
NTAgd2hlcmUgcGxhaW4gb2JqZWN0cyBjYXVzZWQgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCBleGNl
cHRpb24KLSAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKLSAgICBjb250ZXh0ID0g
IWNvbnRleHQubm9kZVR5cGUgJiYgY29udGV4dFswXSB8fCBjb250ZXh0OwotICAgIGNvbnRleHQg
PSBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dDsKLQotICAgIC8vIE9ubHkgY2FjaGUg
InNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBtYWluIGRvY3VtZW50Ci0gICAgLy8gQ2xvbmluZyBvcHRpb25zIGxvc2VzIHRoZSBzZWxlY3Rl
ZCBzdGF0ZSwgc28gZG9uJ3QgY2FjaGUgdGhlbQotICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0
IHdoZW4geW91IHB1dCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQK
LSAgICAvLyBBbHNvLCBXZWJLaXQgZG9lcyBub3QgY2xvbmUgJ2NoZWNrZWQnIGF0dHJpYnV0ZXMg
b24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNoZQotICAgIC8vIExhc3RseSwgSUU2LDcsOCB3aWxs
IG5vdCBjb3JyZWN0bHkgcmV1c2UgY2FjaGVkIGZyYWdtZW50cyB0aGF0IHdlcmUgY3JlYXRlZCBm
cm9tIHVua25vd24gZWxlbXMgIzEwNTAxCi0gICAgaWYgKCBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0
eXBlb2YgZmlyc3QgPT09ICJzdHJpbmciICYmIGZpcnN0Lmxlbmd0aCA8IDUxMiAmJiBjb250ZXh0
ID09PSBkb2N1bWVudCAmJgotICAgICAgICBmaXJzdC5jaGFyQXQoMCkgPT09ICI8IiAmJiAhcm5v
Y2FjaGUudGVzdCggZmlyc3QgKSAmJgotICAgICAgICAoalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9u
ZSB8fCAhcmNoZWNrZWQudGVzdCggZmlyc3QgKSkgJiYKLSAgICAgICAgKGpRdWVyeS5zdXBwb3J0
Lmh0bWw1Q2xvbmUgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCBmaXJzdCApKSApIHsKLQotICAgICAg
ICAvLyBNYXJrIGNhY2hlYWJsZSBhbmQgbG9vayBmb3IgYSBoaXQKLSAgICAgICAgY2FjaGVhYmxl
ID0gdHJ1ZTsKLSAgICAgICAgZnJhZ21lbnQgPSBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdOwot
ICAgICAgICBjYWNoZWhpdCA9IGZyYWdtZW50ICE9PSB1bmRlZmluZWQ7Ci0gICAgfQotCi0gICAg
aWYgKCAhZnJhZ21lbnQgKSB7Ci0gICAgICAgIGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIGpRdWVyeS5jbGVhbiggYXJncywgY29udGV4dCwgZnJh
Z21lbnQsIHNjcmlwdHMgKTsKLQotICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlLCBidXQgb25s
eSBzdG9yZSBmYWxzZQotICAgICAgICAvLyB1bmxlc3MgdGhpcyBpcyBhIHNlY29uZCBwYXJzaW5n
IG9mIHRoZSBzYW1lIGNvbnRlbnQKLSAgICAgICAgaWYgKCBjYWNoZWFibGUgKSB7Ci0gICAgICAg
ICAgICBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdID0gY2FjaGVoaXQgJiYgZnJhZ21lbnQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hl
YWJsZTogY2FjaGVhYmxlIH07Ci19OwotCi1qUXVlcnkuZnJhZ21lbnRzID0ge307Ci0KLWpRdWVy
eS5lYWNoKHsKLSAgICBhcHBlbmRUbzogImFwcGVuZCIsCi0gICAgcHJlcGVuZFRvOiAicHJlcGVu
ZCIsCi0gICAgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwKLSAgICBpbnNlcnRBZnRlcjogImFmdGVy
IiwKLSAgICByZXBsYWNlQWxsOiAicmVwbGFjZVdpdGgiCi19LCBmdW5jdGlvbiggbmFtZSwgb3Jp
Z2luYWwgKSB7Ci0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7
Ci0gICAgICAgIHZhciBlbGVtcywKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgcmV0
ID0gW10sCi0gICAgICAgICAgICBpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCi0gICAgICAg
ICAgICBsID0gaW5zZXJ0Lmxlbmd0aCwKLSAgICAgICAgICAgIHBhcmVudCA9IHRoaXMubGVuZ3Ro
ID09PSAxICYmIHRoaXNbMF0ucGFyZW50Tm9kZTsKLQotICAgICAgICBpZiAoIChwYXJlbnQgPT0g
bnVsbCB8fCBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGRO
b2Rlcy5sZW5ndGggPT09IDEpICYmIGwgPT09IDEgKSB7Ci0gICAgICAgICAgICBpbnNlcnRbIG9y
aWdpbmFsIF0oIHRoaXNbMF0gKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAg
ICAgIGVsZW1zID0gKCBpID4gMCA/IHRoaXMuY2xvbmUodHJ1ZSkgOiB0aGlzICkuZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5KCBpbnNlcnRbaV0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTsK
LSAgICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KCBlbGVtcyApOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgaW5zZXJ0
LnNlbGVjdG9yICk7Ci0gICAgICAgIH0KLSAgICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGdldEFsbCgg
ZWxlbSApIHsKLSAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAi
dW5kZWZpbmVkIiApIHsKLSAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ICIqIiApOwotCi0gICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0ucXVlcnlTZWxlY3RvckFsbCAh
PT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgIHJldHVybiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwo
ICIqIiApOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgIH0KLX0KLQot
Ly8gVXNlZCBpbiBjbGVhbiwgZml4ZXMgdGhlIGRlZmF1bHRDaGVja2VkIHByb3BlcnR5Ci1mdW5j
dGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHsKLSAgICBpZiAoIHJjaGVja2FibGVUeXBl
LnRlc3QoIGVsZW0udHlwZSApICkgewotICAgICAgICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxl
bS5jaGVja2VkOwotICAgIH0KLX0KLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgY2xvbmU6IGZ1bmN0
aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAg
dmFyIHNyY0VsZW1lbnRzLAotICAgICAgICAgICAgZGVzdEVsZW1lbnRzLAotICAgICAgICAgICAg
aSwKLSAgICAgICAgICAgIGNsb25lOwotCi0gICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRt
bDVDbG9uZSB8fCBqUXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCAi
PCIgKyBlbGVtLm5vZGVOYW1lICsgIj4iICkgKSB7Ci0gICAgICAgICAgICBjbG9uZSA9IGVsZW0u
Y2xvbmVOb2RlKCB0cnVlICk7Ci0KLSAgICAgICAgLy8gSUU8PTggZG9lcyBub3QgcHJvcGVybHkg
Y2xvbmUgZGV0YWNoZWQsIHVua25vd24gZWxlbWVudCBub2RlcwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZnJhZ21lbnREaXYuaW5uZXJIVE1MID0gZWxlbS5vdXRlckhUTUw7Ci0gICAg
ICAgICAgICBmcmFnbWVudERpdi5yZW1vdmVDaGlsZCggY2xvbmUgPSBmcmFnbWVudERpdi5maXJz
dENoaWxkICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICghalF1ZXJ5LnN1cHBvcnQubm9D
bG9uZUV2ZW50IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKLSAgICAgICAg
ICAgICAgICAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYg
IWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKLSAgICAgICAgICAgIC8vIElFIGNvcGllcyBldmVu
dHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNpbmcgY2xvbmVOb2RlLgotICAgICAgICAg
ICAgLy8gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0
aGUgZXZlbnRzCi0gICAgICAgICAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3JkZXIgdG8g
Z2V0IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQotICAgICAgICAgICAgLy8gcHJvcHJpZXRhcnkg
bWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMKLSAgICAgICAg
ICAgIC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KLQotICAgICAgICAgICAgY2xvbmVGaXhBdHRy
aWJ1dGVzKCBlbGVtLCBjbG9uZSApOwotCi0gICAgICAgICAgICAvLyBVc2luZyBTaXp6bGUgaGVy
ZSBpcyBjcmF6eSBzbG93LCBzbyB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUgaW5zdGVhZAot
ICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKLSAgICAgICAgICAgIGRl
c3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKLQotICAgICAgICAgICAgLy8gV2VpcmQgaXRl
cmF0aW9uIGJlY2F1c2UgSUUgd2lsbCByZXBsYWNlIHRoZSBsZW5ndGggcHJvcGVydHkKLSAgICAg
ICAgICAgIC8vIHdpdGggYW4gZWxlbWVudCBpZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5k
IG9uZSBvZiB0aGUKLSAgICAgICAgICAgIC8vIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGhhcyBhIG5h
bWUgb3IgaWQgb2YgImxlbmd0aCIKLSAgICAgICAgICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50
c1tpXTsgKytpICkgewotICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5h
dGlvbiBub2RlIGlzIG5vdCBudWxsOyBGaXhlcyAjOTU4NwotICAgICAgICAgICAgICAgIGlmICgg
ZGVzdEVsZW1lbnRzW2ldICkgewotICAgICAgICAgICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0
ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb3B5IHRoZSBldmVudHMg
ZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCi0gICAgICAgIGlmICggZGF0YUFuZEV2ZW50
cyApIHsKLSAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApOwotCi0gICAg
ICAgICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewotICAgICAgICAgICAgICAgIHNyY0Vs
ZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0g
Z2V0QWxsKCBjbG9uZSApOwotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1l
bnRzW2ldOyArK2kgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBzcmNF
bGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3JjRWxlbWVudHMgPSBkZXN0RWxlbWVudHMg
PSBudWxsOwotCi0gICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAotICAgICAgICByZXR1
cm4gY2xvbmU7Ci0gICAgfSwKLQotICAgIGNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQs
IGZyYWdtZW50LCBzY3JpcHRzICkgewotICAgICAgICB2YXIgaSwgaiwgZWxlbSwgdGFnLCB3cmFw
LCBkZXB0aCwgZGl2LCBoYXNCb2R5LCB0Ym9keSwgbGVuLCBoYW5kbGVTY3JpcHQsIGpzVGFncywK
LSAgICAgICAgICAgIHNhZmUgPSBjb250ZXh0ID09PSBkb2N1bWVudCAmJiBzYWZlRnJhZ21lbnQs
Ci0gICAgICAgICAgICByZXQgPSBbXTsKLQotICAgICAgICAvLyBFbnN1cmUgdGhhdCBjb250ZXh0
IGlzIGEgZG9jdW1lbnQKLSAgICAgICAgaWYgKCAhY29udGV4dCB8fCB0eXBlb2YgY29udGV4dC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50ID09PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgIGNv
bnRleHQgPSBkb2N1bWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSB0aGUgYWxyZWFk
eS1jcmVhdGVkIHNhZmUgZnJhZ21lbnQgaWYgY29udGV4dCBwZXJtaXRzCi0gICAgICAgIGZvciAo
IGkgPSAwOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICBp
ZiAoIHR5cGVvZiBlbGVtID09PSAibnVtYmVyIiApIHsKLSAgICAgICAgICAgICAgICBlbGVtICs9
ICIiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoICFlbGVtICkgewotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDb252
ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCi0gICAgICAgICAgICBpZiAoIHR5cGVvZiBl
bGVtID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICBpZiAoICFyaHRtbC50ZXN0KCBl
bGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHRO
b2RlKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRW5zdXJlIGEgc2FmZSBjb250YWluZXIgaW4gd2hpY2ggdG8gcmVuZGVyIHRoZSBodG1s
Ci0gICAgICAgICAgICAgICAgICAgIHNhZmUgPSBzYWZlIHx8IGNyZWF0ZVNhZmVGcmFnbWVudCgg
Y29udGV4dCApOwotICAgICAgICAgICAgICAgICAgICBkaXYgPSBjb250ZXh0LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgICAgICAgICBzYWZlLmFwcGVuZENoaWxkKCBkaXYgKTsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBGaXggIlhIVE1MIi1zdHlsZSB0YWdzIGluIGFsbCBi
cm93c2VycwotICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5yZXBsYWNlKHJ4aHRtbFRh
ZywgIjwkMT48LyQyPiIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGh0bWwgYW5k
IGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKLSAgICAgICAgICAgICAgICAgICAg
dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyIiLCAiIl0gKVsxXS50b0xvd2VyQ2Fz
ZSgpOwotICAgICAgICAgICAgICAgICAgICB3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1h
cC5fZGVmYXVsdDsKLSAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdOwotICAgICAg
ICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gd3JhcFsxXSArIGVsZW0gKyB3cmFwWzJdOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIHJpZ2h0IGRlcHRoCi0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggZGVwdGgtLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRpdiA9IGRpdi5sYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxl
IGZyYWdtZW50cwotICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9k
eSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIDx0YWJsZT4s
ICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgaGFz
Qm9keSA9IHJ0Ym9keS50ZXN0KGVsZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRi
b2R5ID0gdGFnID09PSAidGFibGUiICYmICFoYXNCb2R5ID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIGJhcmUg
PHRoZWFkPiBvciA8dGZvb3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBb
MV0gPT09ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXYuY2hpbGROb2RlcyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaiA9IHRib2R5Lmxl
bmd0aCAtIDE7IGogPj0gMCA7IC0taiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5ub2RlTmFtZSggdGJvZHlbIGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBd
LmNoaWxkTm9kZXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBJRSBjb21wbGV0ZWx5IGtp
bGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFk
aW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
aXYuaW5zZXJ0QmVmb3JlKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBybGVhZGluZ1doaXRlc3Bh
Y2UuZXhlYyhlbGVtKVswXSApLCBkaXYuZmlyc3RDaGlsZCApOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRpdi5jaGlsZE5vZGVzOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIFRha2Ugb3V0IG9mIGZyYWdtZW50IGNvbnRhaW5lciAod2UgbmVl
ZCBhIGZyZXNoIGRpdiBlYWNoIHRpbWUpCi0gICAgICAgICAgICAgICAgICAgIGRpdi5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKCBkaXYgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSApIHsKLSAgICAgICAgICAgICAgICBy
ZXQucHVzaCggZWxlbSApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBq
UXVlcnkubWVyZ2UoIHJldCwgZWxlbSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRml4ICMxMTM1NjogQ2xlYXIgZWxlbWVudHMgZnJvbSBzYWZlRnJhZ21lbnQKLSAg
ICAgICAgaWYgKCBkaXYgKSB7Ci0gICAgICAgICAgICBlbGVtID0gZGl2ID0gc2FmZSA9IG51bGw7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXNldCBkZWZhdWx0Q2hlY2tlZCBmb3IgYW55IHJh
ZGlvcyBhbmQgY2hlY2tib3hlcwotICAgICAgICAvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0
aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCi0gICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmFw
cGVuZENoZWNrZWQgKSB7Ci0gICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSByZXRbaV0p
ICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSgg
ZWxlbSwgImlucHV0IiApICkgewotICAgICAgICAgICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tl
ZCggZWxlbSApOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBlbGVtLmdldEVs
ZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksIGZpeERlZmF1
bHRDaGVja2VkICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQXBwZW5kIGVsZW1lbnRzIHRvIGEgcHJvdmlkZWQgZG9jdW1lbnQgZnJh
Z21lbnQKLSAgICAgICAgaWYgKCBmcmFnbWVudCApIHsKLSAgICAgICAgICAgIC8vIFNwZWNpYWwg
aGFuZGxpbmcgb2YgZWFjaCBzY3JpcHQgZWxlbWVudAotICAgICAgICAgICAgaGFuZGxlU2NyaXB0
ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY29u
c2lkZXIgaXQgZXhlY3V0YWJsZQotICAgICAgICAgICAgICAgIGlmICggIWVsZW0udHlwZSB8fCBy
c2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RGV0YWNoIHRoZSBzY3JpcHQgYW5kIHN0b3JlIGl0IGluIHRoZSBzY3JpcHRzIGFycmF5IChpZiBw
cm92aWRlZCkgb3IgdGhlIGZyYWdtZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0
cnV0aHkgdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgYmVlbiBoYW5kbGVkCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzY3JpcHRzID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMu
cHVzaCggZWxlbS5wYXJlbnROb2RlID8gZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVt
ICkgOiBlbGVtICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hp
bGQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSByZXRbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAg
ICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkb25lIGFmdGVyIGhhbmRsaW5nIGFuIGV4ZWN1
dGFibGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgaWYgKCAhKCBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJzY3JpcHQiICkgJiYgaGFuZGxlU2NyaXB0KCBlbGVtICkgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQXBwZW5kIHRvIGZyYWdtZW50IGFuZCBoYW5kbGUgZW1iZWRkZWQgc2NyaXB0
cwotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9
PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZVNjcmlw
dCBhbHRlcnMgdGhlIERPTSwgc28gdXNlIGpRdWVyeS5tZXJnZSB0byBlbnN1cmUgc25hcHNob3Qg
aXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBqc1RhZ3MgPSBqUXVlcnkuZ3JlcCgg
alF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikgKSwg
aGFuZGxlU2NyaXB0ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGljZSB0aGUg
c2NyaXB0cyBpbnRvIHJldCBhZnRlciB0aGVpciBmb3JtZXIgYW5jZXN0b3IgYW5kIGFkdmFuY2Ug
b3VyIGluZGV4IGJleW9uZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNl
LmFwcGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaSArPSBqc1RhZ3MubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHJldDsKLSAgICB9LAotCi0gICAgY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGlu
dGVybmFsICovIGFjY2VwdERhdGEgKSB7Ci0gICAgICAgIHZhciBkYXRhLCBpZCwgZWxlbSwgdHlw
ZSwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgaW50ZXJuYWxLZXkgPSBqUXVlcnku
ZXhwYW5kbywKLSAgICAgICAgICAgIGNhY2hlID0galF1ZXJ5LmNhY2hlLAotICAgICAgICAgICAg
ZGVsZXRlRXhwYW5kbyA9IGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sCi0gICAgICAgICAg
ICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWw7Ci0KLSAgICAgICAgZm9yICggOyAoZWxl
bSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0KLSAgICAgICAgICAgIGlmICggYWNjZXB0
RGF0YSB8fCBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotCi0gICAgICAgICAgICAgICAg
aWQgPSBlbGVtWyBpbnRlcm5hbEtleSBdOwotICAgICAgICAgICAgICAgIGRhdGEgPSBpZCAmJiBj
YWNoZVsgaWQgXTsKLQotICAgICAgICAgICAgICAgIGlmICggZGF0YSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkYXRhLmV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVt
b3ZlJ3Mgb3ZlcmhlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5
cGUsIGRhdGEuaGFuZGxlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gUmVtb3ZlIGNhY2hlIG9ubHkgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IHJlbW92
ZWQgYnkgalF1ZXJ5LmV2ZW50LnJlbW92ZQotICAgICAgICAgICAgICAgICAgICBpZiAoIGNhY2hl
WyBpZCBdICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF07
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXMgbm90IGFsbG93IHVzIHRvIGRl
bGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG5vciBkb2VzIGl0IGhhdmUgYSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9j
dW1lbnQgbm9kZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGhhbmRsZSBh
bGwgb2YgdGhlc2UgY2FzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVsZXRlRXhw
YW5kbyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbVsgaW50ZXJu
YWxLZXkgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1v
dmVBdHRyaWJ1dGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVB
dHRyaWJ1dGUoIGludGVybmFsS2V5ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5kZWxldGVkSWRzLnB1c2goIGlkICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19KTsKLS8v
IExpbWl0IHNjb3BlIHBvbGx1dGlvbiBmcm9tIGFueSBkZXByZWNhdGVkIEFQSQotKGZ1bmN0aW9u
KCkgewotCi12YXIgbWF0Y2hlZCwgYnJvd3NlcjsKLQotLy8gVXNlIG9mIGpRdWVyeS5icm93c2Vy
IGlzIGZyb3duZWQgdXBvbi4KLS8vIE1vcmUgZGV0YWlsczogaHR0cDovL2FwaS5qcXVlcnkuY29t
L2pRdWVyeS5icm93c2VyCi0vLyBqUXVlcnkudWFNYXRjaCBtYWludGFpbmVkIGZvciBiYWNrLWNv
bXBhdAotalF1ZXJ5LnVhTWF0Y2ggPSBmdW5jdGlvbiggdWEgKSB7Ci0gICAgdWEgPSB1YS50b0xv
d2VyQ2FzZSgpOwotCi0gICAgdmFyIG1hdGNoID0gLyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhl
YyggdWEgKSB8fAotICAgICAgICAvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKCB1YSApIHx8
Ci0gICAgICAgIC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKCB1YSAp
IHx8Ci0gICAgICAgIC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgdWEu
aW5kZXhPZigiY29tcGF0aWJsZSIpIDwgMCAmJiAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSsp
fCkvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgW107Ci0KLSAgICByZXR1cm4gewotICAgICAgICBi
cm93c2VyOiBtYXRjaFsgMSBdIHx8ICIiLAotICAgICAgICB2ZXJzaW9uOiBtYXRjaFsgMiBdIHx8
ICIwIgotICAgIH07Ci19OwotCi1tYXRjaGVkID0galF1ZXJ5LnVhTWF0Y2goIG5hdmlnYXRvci51
c2VyQWdlbnQgKTsKLWJyb3dzZXIgPSB7fTsKLQotaWYgKCBtYXRjaGVkLmJyb3dzZXIgKSB7Ci0g
ICAgYnJvd3NlclsgbWF0Y2hlZC5icm93c2VyIF0gPSB0cnVlOwotICAgIGJyb3dzZXIudmVyc2lv
biA9IG1hdGNoZWQudmVyc2lvbjsKLX0KLQotLy8gQ2hyb21lIGlzIFdlYmtpdCwgYnV0IFdlYmtp
dCBpcyBhbHNvIFNhZmFyaS4KLWlmICggYnJvd3Nlci5jaHJvbWUgKSB7Ci0gICAgYnJvd3Nlci53
ZWJraXQgPSB0cnVlOwotfSBlbHNlIGlmICggYnJvd3Nlci53ZWJraXQgKSB7Ci0gICAgYnJvd3Nl
ci5zYWZhcmkgPSB0cnVlOwotfQotCi1qUXVlcnkuYnJvd3NlciA9IGJyb3dzZXI7Ci0KLWpRdWVy
eS5zdWIgPSBmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBqUXVlcnlTdWIoIHNlbGVjdG9yLCBj
b250ZXh0ICkgewotICAgICAgICByZXR1cm4gbmV3IGpRdWVyeVN1Yi5mbi5pbml0KCBzZWxlY3Rv
ciwgY29udGV4dCApOwotICAgIH0KLSAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCBqUXVlcnlTdWIs
IHRoaXMgKTsKLSAgICBqUXVlcnlTdWIuc3VwZXJjbGFzcyA9IHRoaXM7Ci0gICAgalF1ZXJ5U3Vi
LmZuID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKLSAgICBqUXVlcnlTdWIuZm4uY29u
c3RydWN0b3IgPSBqUXVlcnlTdWI7Ci0gICAgalF1ZXJ5U3ViLnN1YiA9IHRoaXMuc3ViOwotICAg
IGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7
Ci0gICAgICAgIGlmICggY29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICYmICEo
Y29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeVN1YikgKSB7Ci0gICAgICAgICAgICBjb250ZXh0ID0g
alF1ZXJ5U3ViKCBjb250ZXh0ICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4galF1ZXJ5
LmZuLmluaXQuY2FsbCggdGhpcywgc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsK
LSAgICB9OwotICAgIGpRdWVyeVN1Yi5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeVN1Yi5mbjsK
LSAgICB2YXIgcm9vdGpRdWVyeVN1YiA9IGpRdWVyeVN1Yihkb2N1bWVudCk7Ci0gICAgcmV0dXJu
IGpRdWVyeVN1YjsKLX07Ci0KLX0pKCk7Ci12YXIgY3VyQ1NTLCBpZnJhbWUsIGlmcmFtZURvYywK
LSAgICByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKLSAgICByb3BhY2l0eSA9IC9vcGFjaXR5
PShbXildKikvLAotICAgIHJwb3NpdGlvbiA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLywK
LSAgICAvLyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxl
IGV4Y2VwdCAidGFibGUiLCAidGFibGUtY2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgotICAgIC8v
IHNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheQotICAgIHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFi
bGUoPyEtY1tlYV0pLispLywKLSAgICBybWFyZ2luID0gL15tYXJnaW4vLAotICAgIHJudW1zcGxp
dCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSguKikkIiwgImkiICksCi0gICAg
cm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIGNvcmVfcG51bSArICIpKD8hcHgpW2EteiVd
KyQiLCAiaSIgKSwKLSAgICBycmVsTnVtID0gbmV3IFJlZ0V4cCggIl4oWy0rXSk9KCIgKyBjb3Jl
X3BudW0gKyAiKSIsICJpIiApLAotICAgIGVsZW1kaXNwbGF5ID0geyBCT0RZOiAiYmxvY2siIH0s
Ci0KLSAgICBjc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhp
ZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKLSAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7Ci0g
ICAgICAgIGxldHRlclNwYWNpbmc6IDAsCi0gICAgICAgIGZvbnRXZWlnaHQ6IDQwMAotICAgIH0s
Ci0KLSAgICBjc3NFeHBhbmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF0s
Ci0gICAgY3NzUHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiIF0sCi0KLSAg
ICBldmVudHNUb2dnbGUgPSBqUXVlcnkuZm4udG9nZ2xlOwotCi0vLyByZXR1cm4gYSBjc3MgcHJv
cGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5Ci1m
dW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG5hbWUgKSB7Ci0KLSAgICAvLyBzaG9ydGN1
dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZAotICAgIGlmICggbmFtZSBp
biBzdHlsZSApIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sg
Zm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcwotICAgIHZhciBjYXBOYW1lID0gbmFtZS5jaGFyQXQo
MCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSksCi0gICAgICAgIG9yaWdOYW1lID0gbmFt
ZSwKLSAgICAgICAgaSA9IGNzc1ByZWZpeGVzLmxlbmd0aDsKLQotICAgIHdoaWxlICggaS0tICkg
ewotICAgICAgICBuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7Ci0gICAgICAgIGlm
ICggbmFtZSBpbiBzdHlsZSApIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yaWdOYW1lOwotfQotCi1mdW5jdGlvbiBpc0hpZGRlbigg
ZWxlbSwgZWwgKSB7Ci0gICAgZWxlbSA9IGVsIHx8IGVsZW07Ci0gICAgcmV0dXJuIGpRdWVyeS5j
c3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgfHwgIWpRdWVyeS5jb250YWlucyggZWxl
bS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci19Ci0KLWZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50
cywgc2hvdyApIHsKLSAgICB2YXIgZWxlbSwgZGlzcGxheSwKLSAgICAgICAgdmFsdWVzID0gW10s
Ci0gICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOwot
Ci0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKLSAgICAgICAgZWxlbSA9
IGVsZW1lbnRzWyBpbmRleCBdOwotICAgICAgICBpZiAoICFlbGVtLnN0eWxlICkgewotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWVzWyBpbmRleCBdID0galF1
ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIgKTsKLSAgICAgICAgaWYgKCBzaG93ICkgewot
ICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0
byBsZWFybiBpZiBpdCBpcwotICAgICAgICAgICAgLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVk
IHJ1bGVzIG9yIG5vdAotICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGVsZW0u
c3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiICkgewotICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUu
ZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTZXQgZWxlbWVu
dHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25lCi0gICAgICAg
ICAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBz
dHlsZSBpcwotICAgICAgICAgICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAotICAgICAgICAgICAg
aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xk
ZGlzcGxheSIsIGNzc19kZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSApOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGlzcGxheSA9IGN1ckNTUyggZWxl
bSwgImRpc3BsYXkiICk7Ci0KLSAgICAgICAgICAgIGlmICggIXZhbHVlc1sgaW5kZXggXSAmJiBk
aXNwbGF5ICE9PSAibm9uZSIgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVt
LCAib2xkZGlzcGxheSIsIGRpc3BsYXkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBh
IHNlY29uZCBsb29wCi0gICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdwotICAgIGZv
ciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0gICAgICAgIGVsZW0g
PSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICggIXNob3cgfHwgZWxlbS5z
dHlsZS5kaXNwbGF5ID09PSAibm9uZSIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiApIHsK
LSAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0g
fHwgIiIgOiAibm9uZSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudHM7
Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVl
ICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0s
IG5hbWUsIHZhbHVlICkgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQg
PwotICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOwotICAgICAgICB9LCBuYW1l
LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICB9LAotICAgIHNob3c6IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKLSAgICB9LAot
ICAgIGhpZGU6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTsK
LSAgICB9LAotICAgIHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlLCBmbjIgKSB7Ci0gICAgICAgIHZh
ciBib29sID0gdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiI7Ci0KLSAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggc3RhdGUgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZm4yICkgKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXZlbnRzVG9nZ2xlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBpZiAoIGJvb2wgPyBzdGF0ZSA6IGlzSGlkZGVuKCB0aGlzICkgKSB7Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5KCB0aGlzICkuc2hvdygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5oaWRlKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAvLyBBZGQgaW4gc3R5
bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLSAgICAvLyBiZWhh
dmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKLSAgICBjc3NIb29r
czogewotICAgICAgICBvcGFjaXR5OiB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
LCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20g
b3BhY2l0eQotICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3Bh
Y2l0eSIgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiBy
ZXQ7Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBw
eAotICAgIGNzc051bWJlcjogewotICAgICAgICAiZmlsbE9wYWNpdHkiOiB0cnVlLAotICAgICAg
ICAiZm9udFdlaWdodCI6IHRydWUsCi0gICAgICAgICJsaW5lSGVpZ2h0IjogdHJ1ZSwKLSAgICAg
ICAgIm9wYWNpdHkiOiB0cnVlLAotICAgICAgICAib3JwaGFucyI6IHRydWUsCi0gICAgICAgICJ3
aWRvd3MiOiB0cnVlLAotICAgICAgICAiekluZGV4IjogdHJ1ZSwKLSAgICAgICAgInpvb20iOiB0
cnVlCi0gICAgfSwKLQotICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3
aXNoIHRvIGZpeCBiZWZvcmUKLSAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCi0g
ICAgY3NzUHJvcHM6IHsKLSAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQot
ICAgICAgICAiZmxvYXQiOiBqUXVlcnkuc3VwcG9ydC5jc3NGbG9hdCA/ICJjc3NGbG9hdCIgOiAi
c3R5bGVGbG9hdCIKLSAgICB9LAotCi0gICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3Bl
cnR5IG9uIGEgRE9NIE5vZGUKLSAgICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
LCBleHRyYSApIHsKLSAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21t
ZW50IG5vZGVzCi0gICAgICAgIGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBl
bGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkgewotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3
aXRoIHRoZSByaWdodCBuYW1lCi0gICAgICAgIHZhciByZXQsIHR5cGUsIGhvb2tzLAotICAgICAg
ICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCi0gICAgICAgICAgICBz
dHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3Jp
Z05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1l
KCBzdHlsZSwgb3JpZ05hbWUgKSApOwotCi0gICAgICAgIC8vIGdldHMgaG9vayBmb3IgdGhlIHBy
ZWZpeGVkIHZlcnNpb24KLSAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVy
c2lvbgotICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5j
c3NIb29rc1sgb3JpZ05hbWUgXTsKLQotICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5n
IGEgdmFsdWUKLSAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAg
ICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKLQotICAgICAgICAgICAgLy8gY29udmVydCByZWxhdGl2
ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZlIG51bWJlcnMuICM3MzQ1Ci0g
ICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMo
IHZhbHVlICkpICkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gKCByZXRbMV0gKyAxICkgKiBy
ZXRbMl0gKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTsKLSAgICAgICAg
ICAgICAgICAvLyBGaXhlcyBidWcgIzkyMzcKLSAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJl
ciI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBh
bmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNldC4gU2VlOiAjNzExNgotICAgICAgICAgICAgaWYgKCB2
YWx1ZSA9PSBudWxsIHx8IHR5cGUgPT09ICJudW1iZXIiICYmIGlzTmFOKCB2YWx1ZSApICkgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
SWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNl
cnRhaW4gQ1NTIHByb3BlcnRpZXMpCi0gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudW1iZXIi
ICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewotICAgICAgICAgICAgICAgIHZh
bHVlICs9ICJweCI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGEgaG9vayB3
YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNp
ZmllZCB2YWx1ZQotICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykg
fHwgKHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5l
ZCApIHsKLSAgICAgICAgICAgICAgICAvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJv
d2luZyBlcnJvcnMgd2hlbiAnaW52YWxpZCcgdmFsdWVzIGFyZSBwcm92aWRlZAotICAgICAgICAg
ICAgICAgIC8vIEZpeGVzIGJ1ZyAjNTUwOQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGNh
dGNoKGUpIHt9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJv
bSB0aGVyZQotICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0
ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdAotICAg
ICAgICAgICAgcmV0dXJuIHN0eWxlWyBuYW1lIF07Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgbnVtZXJpYywgZXh0cmEgKSB7Ci0gICAgICAgIHZh
ciB2YWwsIG51bSwgaG9va3MsCi0gICAgICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENh
c2UoIG5hbWUgKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdp
dGggdGhlIHJpZ2h0IG5hbWUKLSAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05h
bWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBl
bGVtLnN0eWxlLCBvcmlnTmFtZSApICk7Ci0KLSAgICAgICAgLy8gZ2V0cyBob29rIGZvciB0aGUg
cHJlZml4ZWQgdmVyc2lvbgotICAgICAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2
ZXJzaW9uCi0gICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5
LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwotCi0gICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlk
ZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0gICAgICAgIGlmICggaG9va3Mg
JiYgImdldCIgaW4gaG9va3MgKSB7Ci0gICAgICAgICAgICB2YWwgPSBob29rcy5nZXQoIGVsZW0s
IHRydWUsIGV4dHJhICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEg
d2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAotICAgICAgICBp
ZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVt
LCBuYW1lICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29t
cHV0ZWQgdmFsdWUKLSAgICAgICAgaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3Nz
Tm9ybWFsVHJhbnNmb3JtICkgewotICAgICAgICAgICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3Jt
WyBuYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm4sIGNvbnZlcnRpbmcgdG8g
bnVtYmVyIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29r
cyBudW1lcmljCi0gICAgICAgIGlmICggbnVtZXJpYyB8fCBleHRyYSAhPT0gdW5kZWZpbmVkICkg
ewotICAgICAgICAgICAgbnVtID0gcGFyc2VGbG9hdCggdmFsICk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVtZXJpYyB8fCBqUXVlcnkuaXNOdW1lcmljKCBudW0gKSA/IG51bSB8fCAwIDogdmFsOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWw7Ci0gICAgfSwKLQotICAgIC8vIEEgbWV0aG9k
IGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29ycmVj
dCBjYWxjdWxhdGlvbnMKLSAgICBzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJh
Y2sgKSB7Ci0gICAgICAgIHZhciByZXQsIG5hbWUsCi0gICAgICAgICAgICBvbGQgPSB7fTsKLQot
ICAgICAgICAvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9u
ZXMKLSAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgewotICAgICAgICAgICAgb2xkWyBu
YW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07Ci0gICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1l
IF0gPSBvcHRpb25zWyBuYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAgICByZXQgPSBjYWxsYmFj
ay5jYWxsKCBlbGVtICk7Ci0KLSAgICAgICAgLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCi0gICAg
ICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5h
bWUgXSA9IG9sZFsgbmFtZSBdOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAg
ICB9Ci19KTsKLQotLy8gTk9URTogVG8gYW55IGZ1dHVyZSBtYWludGFpbmVyLCB3ZSd2ZSB3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZQotLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJl
YWsgd2l0aG91dCBpdC4KLWlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgY3Vy
Q1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgIHZhciByZXQsIHdpZHRoLCBt
aW5XaWR0aCwgbWF4V2lkdGgsCi0gICAgICAgICAgICBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKCBlbGVtLCBudWxsICksCi0gICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7
Ci0KLSAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKLQotICAgICAgICAgICAgLy8gZ2V0UHJvcGVy
dHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgaW4gSUU5LCBzZWUgIzEy
NTM3Ci0gICAgICAgICAgICByZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkg
fHwgY29tcHV0ZWRbIG5hbWUgXTsKLQotICAgICAgICAgICAgaWYgKCByZXQgPT09ICIiICYmICFq
UXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgewotICAgICAgICAg
ICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBF
ZHdhcmRzIgotICAgICAgICAgICAgLy8gQ2hyb21lIDwgMTcgYW5kIFNhZmFyaSA1LjAgdXNlcyAi
Y29tcHV0ZWQgdmFsdWUiIGluc3RlYWQgb2YgInVzZWQgdmFsdWUiIGZvciBtYXJnaW4tcmlnaHQK
LSAgICAgICAgICAgIC8vIFNhZmFyaSA1LjEuNyAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2VudGFn
ZSBmb3IgYSBsYXJnZXIgc2V0IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlh
Ymx5IHBpeGVscwotICAgICAgICAgICAgLy8gdGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFm
dCBzcGVjOiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCi0g
ICAgICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5h
bWUgKSApIHsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IHN0eWxlLndpZHRoOwotICAgICAgICAg
ICAgICAgIG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7Ci0gICAgICAgICAgICAgICAgbWF4V2lk
dGggPSBzdHlsZS5tYXhXaWR0aDsKLQotICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0g
c3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDsKLSAgICAgICAgICAgICAgICByZXQg
PSBjb21wdXRlZC53aWR0aDsKLQotICAgICAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7
Ci0gICAgICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDsKLSAgICAgICAgICAg
ICAgICBzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9OwotfSBlbHNlIGlmICggZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSApIHsKLSAgICBjdXJDU1MgPSBmdW5jdGlvbiggZWxl
bSwgbmFtZSApIHsKLSAgICAgICAgdmFyIGxlZnQsIHJzTGVmdCwKLSAgICAgICAgICAgIHJldCA9
IGVsZW0uY3VycmVudFN0eWxlICYmIGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0sCi0gICAgICAg
ICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAgICAgLy8gQXZvaWQgc2V0dGluZyByZXQg
dG8gZW1wdHkgc3RyaW5nIGhlcmUKLSAgICAgICAgLy8gc28gd2UgZG9uJ3QgZGVmYXVsdCB0byBh
dXRvCi0gICAgICAgIGlmICggcmV0ID09IG51bGwgJiYgc3R5bGUgJiYgc3R5bGVbIG5hbWUgXSAp
IHsKLSAgICAgICAgICAgIHJldCA9IHN0eWxlWyBuYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCi0gICAgICAgIC8vIGh0
dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0x
MDIyOTEKLQotICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBw
aXhlbCBudW1iZXIKLSAgICAgICAgLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQgZW5k
aW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCi0gICAgICAgIC8vIGJ1dCBub3Qg
cG9zaXRpb24gY3NzIGF0dHJpYnV0ZXMsIGFzIHRob3NlIGFyZSBwcm9wb3J0aW9uYWwgdG8gdGhl
IHBhcmVudCBlbGVtZW50IGluc3RlYWQKLSAgICAgICAgLy8gYW5kIHdlIGNhbid0IG1lYXN1cmUg
dGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2UgaXQgbWlnaHQgdHJpZ2dlciBhICJzdGFja2luZyBk
b2xscyIgcHJvYmxlbQotICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiAhcnBv
c2l0aW9uLnRlc3QoIG5hbWUgKSApIHsKLQotICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9y
aWdpbmFsIHZhbHVlcwotICAgICAgICAgICAgbGVmdCA9IHN0eWxlLmxlZnQ7Ci0gICAgICAgICAg
ICByc0xlZnQgPSBlbGVtLnJ1bnRpbWVTdHlsZSAmJiBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0Owot
Ci0gICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQg
dmFsdWUgb3V0Ci0gICAgICAgICAgICBpZiAoIHJzTGVmdCApIHsKLSAgICAgICAgICAgICAgICBl
bGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNpemUiID8gIjFl
bSIgOiByZXQ7Ci0gICAgICAgICAgICByZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwotCi0g
ICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCi0gICAgICAgICAgICBzdHls
ZS5sZWZ0ID0gbGVmdDsKLSAgICAgICAgICAgIGlmICggcnNMZWZ0ICkgewotICAgICAgICAgICAg
ICAgIGVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICJhdXRvIiA6IHJldDsKLSAgICB9
OwotfQotCi1mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0
ICkgewotICAgIHZhciBtYXRjaGVzID0gcm51bXNwbGl0LmV4ZWMoIHZhbHVlICk7Ci0gICAgcmV0
dXJuIG1hdGNoZXMgPwotICAgICAgICAgICAgTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDEgXSAtICgg
c3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDIgXSB8fCAicHgiICkgOgotICAgICAgICAg
ICAgdmFsdWU7Ci19Ci0KLWZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1l
LCBleHRyYSwgaXNCb3JkZXJCb3ggKSB7Ci0gICAgdmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRl
ckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgPwotICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5
IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KLSAgICAgICAg
NCA6Ci0gICAgICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZl
cnRpY2FsIHByb3BlcnRpZXMKLSAgICAgICAgbmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwLAotCi0g
ICAgICAgIHZhbCA9IDA7Ci0KLSAgICBmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7Ci0gICAgICAg
IC8vIGJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQg
aXQKLSAgICAgICAgaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7Ci0gICAgICAgICAgICAvLyB3
ZSB1c2UgalF1ZXJ5LmNzcyBpbnN0ZWFkIG9mIGN1ckNTUyBoZXJlCi0gICAgICAgICAgICAvLyBi
ZWNhdXNlIG9mIHRoZSByZWxpYWJsZU1hcmdpblJpZ2h0IENTUyBob29rIQotICAgICAgICAgICAg
dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUgKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiB3ZSB1c2UgY3VyQ1NT
IGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlIChyZWxldmFudCBpbiBhbmltYXRpb25zKQotICAgICAg
ICBpZiAoIGlzQm9yZGVyQm94ICkgewotICAgICAgICAgICAgLy8gYm9yZGVyLWJveCBpbmNsdWRl
cyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50Ci0gICAgICAgICAgICBp
ZiAoIGV4dHJhID09PSAiY29udGVudCIgKSB7Ci0gICAgICAgICAgICAgICAgdmFsIC09IHBhcnNl
RmxvYXQoIGN1ckNTUyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlz
bid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyCi0gICAgICAgICAgICBpZiAo
IGV4dHJhICE9PSAibWFyZ2luIiApIHsKLSAgICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9h
dCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiApICkg
fHwgMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGF0
IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nCi0gICAgICAg
ICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBh
bmRbIGkgXSApICkgfHwgMDsKLQotICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEg
aXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlcgotICAgICAgICAgICAgaWYg
KCBleHRyYSAhPT0gInBhZGRpbmciICkgewotICAgICAgICAgICAgICAgIHZhbCArPSBwYXJzZUZs
b2F0KCBjdXJDU1MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiICkg
KSB8fCAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZh
bDsKLX0KLQotZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7
Ci0KLSAgICAvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVu
dCB0byB0aGUgYm9yZGVyLWJveCB2YWx1ZQotICAgIHZhciB2YWwgPSBuYW1lID09PSAid2lkdGgi
ID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAotICAgICAgICB2YWx1ZUlz
Qm9yZGVyQm94ID0gdHJ1ZSwKLSAgICAgICAgaXNCb3JkZXJCb3ggPSBqUXVlcnkuc3VwcG9ydC5i
b3hTaXppbmcgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIgKSA9PT0gImJvcmRlci1i
b3giOwotCi0gICAgLy8gc29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZv
ciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkCi0gICAgLy8gc3ZnIC0g
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1Ci0gICAg
Ly8gTWF0aE1MIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDkxNjY4Ci0gICAgaWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHsKLSAgICAgICAgLy8g
RmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5Ci0g
ICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOwotICAgICAgICBpZiAoIHZhbCA8IDAg
fHwgdmFsID09IG51bGwgKSB7Ci0gICAgICAgICAgICB2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0
b3AgaGVyZSBhbmQgcmV0dXJuLgotICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KHZhbCkgKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdmFsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gd2UgbmVl
ZCB0aGUgY2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5y
ZWxpYWJsZSB2YWx1ZXMKLSAgICAgICAgLy8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkg
ZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZQotICAgICAgICB2YWx1ZUlzQm9y
ZGVyQm94ID0gaXNCb3JkZXJCb3ggJiYgKCBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJs
ZSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApOwotCi0gICAgICAgIC8vIE5vcm1hbGl6
ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhCi0gICAgICAgIHZhbCA9IHBhcnNlRmxv
YXQoIHZhbCApIHx8IDA7Ci0gICAgfQotCi0gICAgLy8gdXNlIHRoZSBhY3RpdmUgYm94LXNpemlu
ZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXMKLSAgICByZXR1cm4gKCB2
YWwgKwotICAgICAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICAgICAgICAgIGVsZW0sCi0g
ICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJi
b3JkZXIiIDogImNvbnRlbnQiICksCi0gICAgICAgICAgICB2YWx1ZUlzQm9yZGVyQm94Ci0gICAg
ICAgICkKLSAgICApICsgInB4IjsKLX0KLQotCi0vLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZh
dWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudAotZnVuY3Rpb24gY3NzX2RlZmF1bHREaXNw
bGF5KCBub2RlTmFtZSApIHsKLSAgICBpZiAoIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkgewot
ICAgICAgICByZXR1cm4gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07Ci0gICAgfQotCi0gICAgdmFy
IGVsZW0gPSBqUXVlcnkoICI8IiArIG5vZGVOYW1lICsgIj4iICkuYXBwZW5kVG8oIGRvY3VtZW50
LmJvZHkgKSwKLSAgICAgICAgZGlzcGxheSA9IGVsZW0uY3NzKCJkaXNwbGF5Iik7Ci0gICAgZWxl
bS5yZW1vdmUoKTsKLQotICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAotICAgIC8vIGdl
dCBlbGVtZW50J3MgcmVhbCBkZWZhdWx0IGRpc3BsYXkgYnkgYXR0YWNoaW5nIGl0IHRvIGEgdGVt
cCBpZnJhbWUKLSAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCBkaXNwbGF5ID09PSAiIiAp
IHsKLSAgICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxl
Ci0gICAgICAgIGlmcmFtZSA9IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoCi0gICAgICAgICAg
ICBpZnJhbWUgfHwgalF1ZXJ5LmV4dGVuZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
IiksIHsKLSAgICAgICAgICAgICAgICBmcmFtZUJvcmRlcjogMCwKLSAgICAgICAgICAgICAgICB3
aWR0aDogMCwKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDAKLSAgICAgICAgICAgIH0pCi0gICAg
ICAgICk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgY2FjaGVhYmxlIGNvcHkgb2YgdGhlIGlmcmFt
ZSBkb2N1bWVudCBvbiBmaXJzdCBjYWxsLgotICAgICAgICAvLyBJRSBhbmQgT3BlcmEgd2lsbCBh
bGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1lRG9jIHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFr
ZSBIVE1MCi0gICAgICAgIC8vIGRvY3VtZW50IHRvIGl0OyBXZWJLaXQgJiBGaXJlZm94IHdvbid0
IGFsbG93IHJldXNpbmcgdGhlIGlmcmFtZSBkb2N1bWVudC4KLSAgICAgICAgaWYgKCAhaWZyYW1l
RG9jIHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVudCApIHsKLSAgICAgICAgICAgIGlmcmFtZURvYyA9
ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudCApLmRvY3Vt
ZW50OwotICAgICAgICAgICAgaWZyYW1lRG9jLndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48
Ym9keT4iKTsKLSAgICAgICAgICAgIGlmcmFtZURvYy5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZWxlbSA9IGlmcmFtZURvYy5ib2R5LmFwcGVuZENoaWxkKCBpZnJhbWVEb2MuY3JlYXRl
RWxlbWVudChub2RlTmFtZSkgKTsKLQotICAgICAgICBkaXNwbGF5ID0gY3VyQ1NTKCBlbGVtLCAi
ZGlzcGxheSIgKTsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7
Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5Ci0gICAg
ZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OwotCi0gICAgcmV0dXJuIGRpc3BsYXk7
Ci19Ci0KLWpRdWVyeS5lYWNoKFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5h
bWUgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7Ci0gICAgICAgIGdldDogZnVu
Y3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKLSAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gY2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1l
bnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtCi0gICAgICAgICAgICAgICAgLy8g
aG93ZXZlciwgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQg
YmVuZWZpdCBmcm9tIHRoaXMKLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0ub2Zmc2V0V2lkdGgg
PT09IDAgJiYgcmRpc3BsYXlzd2FwLnRlc3QoIGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICkgKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9y
SGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lk
dGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFs
dWUsIGV4dHJhICkgewotICAgICAgICAgICAgcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVt
LCB2YWx1ZSwgZXh0cmEgPwotICAgICAgICAgICAgICAgIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAot
ICAgICAgICAgICAgICAgICAgICBlbGVtLAotICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICBleHRyYSwKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN1cHBv
cnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciICkgPT09ICJib3Jk
ZXItYm94IgotICAgICAgICAgICAgICAgICkgOiAwCi0gICAgICAgICAgICApOwotICAgICAgICB9
Ci0gICAgfTsKLX0pOwotCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5vcGFjaXR5ICkgewotICAgIGpR
dWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBj
b21wdXRlZCApIHsKLSAgICAgICAgICAgIC8vIElFIHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0eQot
ICAgICAgICAgICAgcmV0dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAmJiBlbGVtLmN1cnJl
bnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5bGUuZmlsdGVyKSB8
fCAiIiApID8KLSAgICAgICAgICAgICAgICAoIDAuMDEgKiBwYXJzZUZsb2F0KCBSZWdFeHAuJDEg
KSApICsgIiIgOgotICAgICAgICAgICAgICAgIGNvbXB1dGVkID8gIjEiIDogIiI7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAg
ICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAotICAgICAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9
IGVsZW0uY3VycmVudFN0eWxlLAotICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBqUXVlcnkuaXNO
dW1lcmljKCB2YWx1ZSApID8gImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICogMTAwICsgIikiIDog
IiIsCi0gICAgICAgICAgICAgICAgZmlsdGVyID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHls
ZS5maWx0ZXIgfHwgc3R5bGUuZmlsdGVyIHx8ICIiOwotCi0gICAgICAgICAgICAvLyBJRSBoYXMg
dHJvdWJsZSB3aXRoIG9wYWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKLSAgICAgICAg
ICAgIC8vIEZvcmNlIGl0IGJ5IHNldHRpbmcgdGhlIHpvb20gbGV2ZWwKLSAgICAgICAgICAgIHN0
eWxlLnpvb20gPSAxOwotCi0gICAgICAgICAgICAvLyBpZiBzZXR0aW5nIG9wYWNpdHkgdG8gMSwg
YW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRvIHJlbW92ZSBmaWx0ZXIgYXR0
cmlidXRlICM2NjUyCi0gICAgICAgICAgICBpZiAoIHZhbHVlID49IDEgJiYgalF1ZXJ5LnRyaW0o
IGZpbHRlci5yZXBsYWNlKCByYWxwaGEsICIiICkgKSA9PT0gIiIgJiYKLSAgICAgICAgICAgICAg
ICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5n
IHN0eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGlsbCBsZWF2ZSAiZmlsdGVyOiIgaW4g
dGhlIGNzc1RleHQKLSAgICAgICAgICAgICAgICAvLyBpZiAiZmlsdGVyOiIgaXMgcHJlc2VudCBh
dCBhbGwsIGNsZWFyVHlwZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBhdm9pZCB0aGlzCi0gICAg
ICAgICAgICAgICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBh
cHBhcmVudGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCi0gICAgICAgICAgICAgICAgc3R5bGUucmVt
b3ZlQXR0cmlidXRlKCAiZmlsdGVyIiApOwotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUg
dGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZSwgd2UgYXJlIGRv
bmUKLSAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmZp
bHRlciApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRl
ciB2YWx1ZXMKLSAgICAgICAgICAgIHN0eWxlLmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIg
KSA/Ci0gICAgICAgICAgICAgICAgZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoK
LSAgICAgICAgICAgICAgICBmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OwotICAgICAgICB9Ci0gICAg
fTsKLX0KLQotLy8gVGhlc2UgaG9va3MgY2Fubm90IGJlIGFkZGVkIHVudGlsIERPTSByZWFkeSBi
ZWNhdXNlIHRoZSBzdXBwb3J0IHRlc3QKLS8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVy
IERPTSByZWFkeQotalF1ZXJ5KGZ1bmN0aW9uKCkgewotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LnJlbGlhYmxlTWFyZ2luUmlnaHQgKSB7Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rcy5tYXJnaW5S
aWdodCA9IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewot
ICAgICAgICAgICAgICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJl
dHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAotICAgICAgICAgICAgICAgIC8vIFdv
cmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGlu
ZS1ibG9jawotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc3dhcCggZWxlbSwgeyAiZGlz
cGxheSI6ICJpbmxpbmUtYmxvY2siIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ckNT
UyggZWxlbSwgIm1hcmdpblJpZ2h0IiApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgLy8g
V2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0
Ci0gICAgLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQg
Zm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodAotICAgIC8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNz
cyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCB3ZSBqdXN0IGNoZWNrIGZvciBp
dCBoZXJlCi0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucGl4ZWxQb3NpdGlvbiAmJiBqUXVlcnku
Zm4ucG9zaXRpb24gKSB7Ci0gICAgICAgIGpRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwg
ZnVuY3Rpb24oIGksIHByb3AgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHByb3Ag
XSA9IHsKLSAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGlmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNl
dAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCByZXQgKSA/
IGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOiByZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAg
ICB9KTsKLSAgICB9Ci0KLX0pOwotCi1pZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZp
bHRlcnMgKSB7Ci0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICAgICAgcmV0dXJuICggZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCAmJiBlbGVtLm9m
ZnNldEhlaWdodCA9PT0gMCApIHx8ICghalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZz
ZXRzICYmICgoZWxlbS5zdHlsZSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkpIHx8IGN1ckNTUyggZWxl
bSwgImRpc3BsYXkiICkpID09PSAibm9uZSIpOwotICAgIH07Ci0KLSAgICBqUXVlcnkuZXhwci5m
aWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgcmV0dXJuICFqUXVl
cnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApOwotICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhv
b2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXMKLWpRdWVyeS5lYWNo
KHsKLSAgICBtYXJnaW46ICIiLAotICAgIHBhZGRpbmc6ICIiLAotICAgIGJvcmRlcjogIldpZHRo
IgotfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sg
cHJlZml4ICsgc3VmZml4IF0gPSB7Ci0gICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkg
ewotICAgICAgICAgICAgdmFyIGksCi0KLSAgICAgICAgICAgICAgICAvLyBhc3N1bWVzIGEgc2lu
Z2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICBwYXJ0cyA9IHR5cGVv
ZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCgiICIpIDogWyB2YWx1ZSBdLAotICAg
ICAgICAgICAgICAgIGV4cGFuZGVkID0ge307Ci0KLSAgICAgICAgICAgIGZvciAoIGkgPSAwOyBp
IDwgNDsgaSsrICkgewotICAgICAgICAgICAgICAgIGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBh
bmRbIGkgXSArIHN1ZmZpeCBdID0KLSAgICAgICAgICAgICAgICAgICAgcGFydHNbIGkgXSB8fCBw
YXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gZXhwYW5kZWQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCAhcm1hcmdp
bi50ZXN0KCBwcmVmaXggKSApIHsKLSAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBz
dWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKLSAgICB9Ci19KTsKLXZhciByMjAgPSAv
JTIwL2csCi0gICAgcmJyYWNrZXQgPSAvXFtcXSQvLAotICAgIHJDUkxGID0gL1xyP1xuL2csCi0g
ICAgcmlucHV0ID0gL14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWls
fGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8
dXJsfHdlZWspJC9pLAotICAgIHJzZWxlY3RUZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVh
KS9pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewot
ICAgICAgICByZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKLSAg
ICB9LAotICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMubWFwKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50cyA/IGpR
dWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVudHMgKSA6IHRoaXM7Ci0gICAgICAgIH0pCi0gICAg
ICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgJiYg
IXRoaXMuZGlzYWJsZWQgJiYKLSAgICAgICAgICAgICAgICAoIHRoaXMuY2hlY2tlZCB8fCByc2Vs
ZWN0VGV4dGFyZWEudGVzdCggdGhpcy5ub2RlTmFtZSApIHx8Ci0gICAgICAgICAgICAgICAgICAg
IHJpbnB1dC50ZXN0KCB0aGlzLnR5cGUgKSApOwotICAgICAgICB9KQotICAgICAgICAubWFwKGZ1
bmN0aW9uKCBpLCBlbGVtICl7Ci0gICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0aGlzICku
dmFsKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCA/Ci0gICAgICAgICAgICAg
ICAgbnVsbCA6Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KLSAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsLCBpICl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwu
cmVwbGFjZSggckNSTEYsICJcclxuIiApIH07Ci0gICAgICAgICAgICAgICAgICAgIH0pIDoKLSAg
ICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSgg
ckNSTEYsICJcclxuIiApIH07Ci0gICAgICAgIH0pLmdldCgpOwotICAgIH0KLX0pOwotCi0vL1Nl
cmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi0vL2tleS92YWx1
ZXMgaW50byBhIHF1ZXJ5IHN0cmluZwotalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRp
dGlvbmFsICkgewotICAgIHZhciBwcmVmaXgsCi0gICAgICAgIHMgPSBbXSwKLSAgICAgICAgYWRk
ID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAvLyBJZiB2YWx1ZSBpcyBh
IGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKLSAgICAgICAgICAgIHZh
bHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBu
dWxsID8gIiIgOiB2YWx1ZSApOwotICAgICAgICAgICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVS
SUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7Ci0g
ICAgICAgIH07Ci0KLSAgICAvLyBTZXQgdHJhZGl0aW9uYWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9
IDEuMy4yIGJlaGF2aW9yLgotICAgIGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHsK
LSAgICAgICAgdHJhZGl0aW9uYWwgPSBqUXVlcnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4
U2V0dGluZ3MudHJhZGl0aW9uYWw7Ci0gICAgfQotCi0gICAgLy8gSWYgYW4gYXJyYXkgd2FzIHBh
c3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy4KLSAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxh
aW5PYmplY3QoIGEgKSApICkgewotICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVu
dHMKLSAgICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgYWRk
KCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKLSAgICAgICAgfSk7Ci0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkg
MS4zLjIgb3Igb2xkZXIKLSAgICAgICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJh
bXMgcmVjdXJzaXZlbHkuCi0gICAgICAgIGZvciAoIHByZWZpeCBpbiBhICkgewotICAgICAgICAg
ICAgYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6
YXRpb24KLSAgICByZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOwotfTsK
LQotZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkg
ewotICAgIHZhciBuYW1lOwotCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7Ci0g
ICAgICAgIC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLgotICAgICAgICBqUXVlcnkuZWFjaCggb2Jq
LCBmdW5jdGlvbiggaSwgdiApIHsKLSAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJy
YWNrZXQudGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJlYXQgZWFjaCBh
cnJheSBpdGVtIGFzIGEgc2NhbGFyLgotICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCB2ICk7
Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgYXJyYXkgaXRl
bSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzCi0gICAgICAgICAg
ICAgICAgLy8gbnVtZXJpYyBpbmRleCB0byByZXNvbHZlIGRlc2VyaWFsaXphdGlvbiBhbWJpZ3Vp
dHkgaXNzdWVzLgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCByYWNrIChhcyBvZiAxLjAu
MCkgY2FuJ3QgY3VycmVudGx5IGRlc2VyaWFsaXplCi0gICAgICAgICAgICAgICAgLy8gbmVzdGVk
IGFycmF5cyBwcm9wZXJseSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gbWF5IGNhdXNlCi0gICAg
ICAgICAgICAgICAgLy8gYSBzZXJ2ZXIgZXJyb3IuIFBvc3NpYmxlIGZpeGVzIGFyZSB0byBtb2Rp
ZnkgcmFjaydzCi0gICAgICAgICAgICAgICAgLy8gZGVzZXJpYWxpemF0aW9uIGFsZ29yaXRobSBv
ciB0byBwcm92aWRlIGFuIG9wdGlvbiBvciBmbGFnCi0gICAgICAgICAgICAgICAgLy8gdG8gZm9y
Y2UgYXJyYXkgc2VyaWFsaXphdGlvbiB0byBiZSBzaGFsbG93LgotICAgICAgICAgICAgICAgIGJ1
aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0IiA/IGkgOiAi
IiApICsgIl0iLCB2LCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotCi0gICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmog
KSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KLSAg
ICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgICAgICAgICBidWlsZFBhcmFtcyggcHJl
Zml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsK
LSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBp
dGVtLgotICAgICAgICBhZGQoIHByZWZpeCwgb2JqICk7Ci0gICAgfQotfQotdmFyCi0gICAgLy8g
RG9jdW1lbnQgbG9jYXRpb24KLSAgICBhamF4TG9jUGFydHMsCi0gICAgYWpheExvY2F0aW9uLAot
Ci0gICAgcmhhc2ggPSAvIy4qJC8sCi0gICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxy
XG5dKilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAotICAgIC8v
ICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgotICAgIHJsb2Nh
bFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258Zmls
ZXxyZXN8d2lkZ2V0KTokLywKLSAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKLSAg
ICBycHJvdG9jb2wgPSAvXlwvXC8vLAotICAgIHJxdWVyeSA9IC9cPy8sCi0gICAgcnNjcmlwdCA9
IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLAot
ICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKLSAgICBydXJsID0gL14oW1x3XCtcLlwtXSs6KSg/
OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLAotCi0gICAgLy8gS2VlcCBhIGNvcHkgb2Yg
dGhlIG9sZCBsb2FkIG1ldGhvZAotICAgIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQsCi0KLSAgICAv
KiBQcmVmaWx0ZXJzCi0gICAgICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0
b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKLSAgICAgKiAy
KSBUaGVzZSBhcmUgY2FsbGVkOgotICAgICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFu
c3BvcnQKLSAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBh
IHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCi0gICAgICogMykga2V5IGlzIHRoZSBk
YXRhVHlwZQotICAgICAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0g
ICAgICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5k
IFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCi0gICAgICovCi0gICAgcHJlZmls
dGVycyA9IHt9LAotCi0gICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncwotICAgICAqIDEpIGtleSBp
cyB0aGUgZGF0YVR5cGUKLSAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUg
dXNlZAotICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFU
eXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKLSAgICAgKi8KLSAgICB0cmFuc3BvcnRz
ID0ge30sCi0KLSAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAw
OTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KLSAgICBhbGxUeXBl
cyA9IFsiKi8iXSArIFsiKiJdOwotCi0vLyAjODEzOCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlv
biB3aGVuIGFjY2Vzc2luZwotLy8gYSBmaWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlvbiBpZiBkb2N1
bWVudC5kb21haW4gaGFzIGJlZW4gc2V0Ci10cnkgewotICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0
aW9uLmhyZWY7Ci19IGNhdGNoKCBlICkgewotICAgIC8vIFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUg
b2YgYW4gQSBlbGVtZW50Ci0gICAgLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9j
dW1lbnQubG9jYXRpb24KLSAgICBhamF4TG9jYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCAiYSIgKTsKLSAgICBhamF4TG9jYXRpb24uaHJlZiA9ICIiOwotICAgIGFqYXhMb2NhdGlvbiA9
IGFqYXhMb2NhdGlvbi5ocmVmOwotfQotCi0vLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHMK
LWFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkgKSB8
fCBbXTsKLQotLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBh
bmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKLWZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNw
b3J0cyggc3RydWN0dXJlICkgewotCi0gICAgLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlv
bmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKLSAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhw
cmVzc2lvbiwgZnVuYyApIHsKLQotICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Np
b24gIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lv
bjsKLSAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBkYXRhVHlwZSwgbGlzdCwgcGxhY2VCZWZvcmUsCi0gICAgICAgICAgICBkYXRh
VHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3Bh
Y2UgKSwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVz
Lmxlbmd0aDsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7Ci0g
ICAgICAgICAgICAvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9u
Ci0gICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAg
ICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBdOwotICAgICAgICAgICAgICAgIC8vIFdlIGNvbnRy
b2wgaWYgd2UncmUgYXNrZWQgdG8gYWRkIGJlZm9yZQotICAgICAgICAgICAgICAgIC8vIGFueSBl
eGlzdGluZyBlbGVtZW50Ci0gICAgICAgICAgICAgICAgcGxhY2VCZWZvcmUgPSAvXlwrLy50ZXN0
KCBkYXRhVHlwZSApOwotICAgICAgICAgICAgICAgIGlmICggcGxhY2VCZWZvcmUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRh
VHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdOwotICAgICAgICAgICAgICAgIC8v
IHRoZW4gd2UgYWRkIHRvIHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKLSAgICAgICAgICAgICAg
ICBsaXN0WyBwbGFjZUJlZm9yZSA/ICJ1bnNoaWZ0IiA6ICJwdXNoIiBdKCBmdW5jICk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi0vLyBCYXNlIGluc3BlY3Rpb24gZnVu
Y3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHMKLWZ1bmN0aW9uIGluc3BlY3RQcmVm
aWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywg
anFYSFIsCi0gICAgICAgIGRhdGFUeXBlIC8qIGludGVybmFsICovLCBpbnNwZWN0ZWQgLyogaW50
ZXJuYWwgKi8gKSB7Ci0KLSAgICBkYXRhVHlwZSA9IGRhdGFUeXBlIHx8IG9wdGlvbnMuZGF0YVR5
cGVzWyAwIF07Ci0gICAgaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OwotCi0gICAgaW5zcGVj
dGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsKLQotICAgIHZhciBzZWxlY3Rpb24sCi0gICAgICAgIGxp
c3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCi0gICAgICAgIGkgPSAwLAotICAgICAgICBsZW5n
dGggPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLAotICAgICAgICBleGVjdXRlT25seSA9ICggc3Ry
dWN0dXJlID09PSBwcmVmaWx0ZXJzICk7Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW5ndGggJiYgKCBl
eGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7IGkrKyApIHsKLSAgICAgICAgc2VsZWN0aW9uID0g
bGlzdFsgaSBdKCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7Ci0gICAgICAgIC8v
IElmIHdlIGdvdCByZWRpcmVjdGVkIHRvIGFub3RoZXIgZGF0YVR5cGUKLSAgICAgICAgLy8gd2Ug
dHJ5IHRoZXJlIGlmIGV4ZWN1dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5Ci0gICAgICAg
IGlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICBpZiAo
ICFleGVjdXRlT25seSB8fCBpbnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewotICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbiA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggc2VsZWN0aW9uICk7Ci0gICAgICAg
ICAgICAgICAgc2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywg
anFYSFIsIHNlbGVjdGlvbiwgaW5zcGVjdGVkICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcgb3Igbm90aGluZyB3YXMgc2Vs
ZWN0ZWQKLSAgICAvLyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRhdGFUeXBlIGlmIG5vdCBkb25lIGFs
cmVhZHkKLSAgICBpZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApICYmICFpbnNwZWN0
ZWRbICIqIiBdICkgewotICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJh
bnNwb3J0cygKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0
aW9ucywganFYSFIsICIqIiwgaW5zcGVjdGVkICk7Ci0gICAgfQotICAgIC8vIHVubmVjZXNzYXJ5
IHdoZW4gb25seSBleGVjdXRpbmcgKHByZWZpbHRlcnMpCi0gICAgLy8gYnV0IGl0J2xsIGJlIGln
bm9yZWQgYnkgdGhlIGNhbGxlciBpbiB0aGF0IGNhc2UKLSAgICByZXR1cm4gc2VsZWN0aW9uOwot
fQotCi0vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKLS8vIHRoYXQgdGFrZXMg
ImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQotLy8gRml4ZXMgIzk4ODcK
LWZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgewotICAgIHZhciBrZXksIGRlZXAs
Ci0gICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8
fCB7fTsKLSAgICBmb3IgKCBrZXkgaW4gc3JjICkgewotICAgICAgICBpZiAoIHNyY1sga2V5IF0g
IT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFy
Z2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCBkZWVwICkgewotICAgICAgICBqUXVlcnkuZXh0ZW5k
KCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKLSAgICB9Ci19Ci0KLWpRdWVyeS5mbi5sb2FkID0gZnVu
Y3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKLSAgICBpZiAoIHR5cGVvZiB1cmwgIT09
ICJzdHJpbmciICYmIF9sb2FkICkgewotICAgICAgICByZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMs
IGFyZ3VtZW50cyApOwotICAgIH0KLQotICAgIC8vIERvbid0IGRvIGEgcmVxdWVzdCBpZiBubyBl
bGVtZW50cyBhcmUgYmVpbmcgcmVxdWVzdGVkCi0gICAgaWYgKCAhdGhpcy5sZW5ndGggKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIHZhciBzZWxlY3RvciwgdHlwZSwgcmVz
cG9uc2UsCi0gICAgICAgIHNlbGYgPSB0aGlzLAotICAgICAgICBvZmYgPSB1cmwuaW5kZXhPZigi
ICIpOwotCi0gICAgaWYgKCBvZmYgPj0gMCApIHsKLSAgICAgICAgc2VsZWN0b3IgPSB1cmwuc2xp
Y2UoIG9mZiwgdXJsLmxlbmd0aCApOwotICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiAp
OwotICAgIH0KLQotICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgotICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHBhcmFtcyApICkgewotCi0gICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3Mg
dGhlIGNhbGxiYWNrCi0gICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOwotICAgICAgICBwYXJhbXMg
PSB1bmRlZmluZWQ7Ci0KLSAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCi0g
ICAgfSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgewot
ICAgICAgICB0eXBlID0gIlBPU1QiOwotICAgIH0KLQotICAgIC8vIFJlcXVlc3QgdGhlIHJlbW90
ZSBkb2N1bWVudAotICAgIGpRdWVyeS5hamF4KHsKLSAgICAgICAgdXJsOiB1cmwsCi0KLSAgICAg
ICAgLy8gaWYgInR5cGUiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qg
d2lsbCBiZSB1c2VkCi0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgIGRhdGFUeXBlOiAiaHRt
bCIsCi0gICAgICAgIGRhdGE6IHBhcmFtcywKLSAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCBq
cVhIUiwgc3RhdHVzICkgewotICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKLSAgICAgICAg
ICAgICAgICBzZWxmLmVhY2goIGNhbGxiYWNrLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNl
VGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
KS5kb25lKGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7Ci0KLSAgICAgICAgLy8gU2F2ZSByZXNw
b25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrCi0gICAgICAgIHJlc3BvbnNlID0gYXJn
dW1lbnRzOwotCi0gICAgICAgIC8vIFNlZSBpZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQKLSAg
ICAgICAgc2VsZi5odG1sKCBzZWxlY3RvciA/Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIGR1
bW15IGRpdiB0byBob2xkIHRoZSByZXN1bHRzCi0gICAgICAgICAgICBqUXVlcnkoIjxkaXY+IikK
LQotICAgICAgICAgICAgICAgIC8vIGluamVjdCB0aGUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50
IGluLCByZW1vdmluZyB0aGUgc2NyaXB0cwotICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGFu
eSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycyBpbiBJRQotICAgICAgICAgICAgICAgIC5hcHBl
bmQoIHJlc3BvbnNlVGV4dC5yZXBsYWNlKCByc2NyaXB0LCAiIiApICkKLQotICAgICAgICAgICAg
ICAgIC8vIExvY2F0ZSB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgLmZp
bmQoIHNlbGVjdG9yICkgOgotCi0gICAgICAgICAgICAvLyBJZiBub3QsIGp1c3QgaW5qZWN0IHRo
ZSBmdWxsIHJlc3VsdAotICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7Ci0KLSAgICB9KTsKLQot
ICAgIHJldHVybiB0aGlzOwotfTsKLQotLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZv
ciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKLWpRdWVyeS5lYWNoKCAiYWpheFN0YXJ0IGFq
YXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0
KCAiICIgKSwgZnVuY3Rpb24oIGksIG8gKXsKLSAgICBqUXVlcnkuZm5bIG8gXSA9IGZ1bmN0aW9u
KCBmICl7Ci0gICAgICAgIHJldHVybiB0aGlzLm9uKCBvLCBmICk7Ci0gICAgfTsKLX0pOwotCi1q
UXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7Ci0g
ICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBl
ICkgewotICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21p
dHRlZAotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7Ci0gICAgICAg
ICAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKLSAgICAgICAgICAgIGNhbGxiYWNrID0gZGF0
YTsKLSAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4galF1ZXJ5LmFqYXgoewotICAgICAgICAgICAgdHlwZTogbWV0aG9kLAotICAgICAgICAg
ICAgdXJsOiB1cmwsCi0gICAgICAgICAgICBkYXRhOiBkYXRhLAotICAgICAgICAgICAgc3VjY2Vz
czogY2FsbGJhY2ssCi0gICAgICAgICAgICBkYXRhVHlwZTogdHlwZQotICAgICAgICB9KTsKLSAg
ICB9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotCi0gICAgZ2V0U2NyaXB0OiBmdW5jdGlvbigg
dXJsLCBjYWxsYmFjayApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZp
bmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKLSAgICB9LAotCi0gICAgZ2V0SlNPTjogZnVuY3Rp
b24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1
cmwsIGRhdGEsIGNhbGxiYWNrLCAianNvbiIgKTsKLSAgICB9LAotCi0gICAgLy8gQ3JlYXRlcyBh
IGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKLSAgICAvLyB3aXRoIGJv
dGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCi0gICAgLy8gSWYgdGFyZ2V0IGlz
IG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KLSAgICBhamF4U2V0dXA6IGZ1bmN0
aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgewotICAgICAgICBpZiAoIHNldHRpbmdzICkgewotICAg
ICAgICAgICAgLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKLSAgICAgICAgICAgIGFqYXhF
eHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncwotICAgICAgICAgICAgc2V0dGlu
Z3MgPSB0YXJnZXQ7Ci0gICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWpheFNldHRpbmdzOwot
ICAgICAgICB9Ci0gICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgc2V0dGluZ3MgKTsKLSAgICAg
ICAgcmV0dXJuIHRhcmdldDsKLSAgICB9LAotCi0gICAgYWpheFNldHRpbmdzOiB7Ci0gICAgICAg
IHVybDogYWpheExvY2F0aW9uLAotICAgICAgICBpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0
KCBhamF4TG9jUGFydHNbIDEgXSApLAotICAgICAgICBnbG9iYWw6IHRydWUsCi0gICAgICAgIHR5
cGU6ICJHRVQiLAotICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0t
dXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsCi0gICAgICAgIHByb2Nlc3NEYXRhOiB0cnVlLAot
ICAgICAgICBhc3luYzogdHJ1ZSwKLSAgICAgICAgLyoKLSAgICAgICAgdGltZW91dDogMCwKLSAg
ICAgICAgZGF0YTogbnVsbCwKLSAgICAgICAgZGF0YVR5cGU6IG51bGwsCi0gICAgICAgIHVzZXJu
YW1lOiBudWxsLAotICAgICAgICBwYXNzd29yZDogbnVsbCwKLSAgICAgICAgY2FjaGU6IG51bGws
Ci0gICAgICAgIHRocm93czogZmFsc2UsCi0gICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwKLSAg
ICAgICAgaGVhZGVyczoge30sCi0gICAgICAgICovCi0KLSAgICAgICAgYWNjZXB0czogewotICAg
ICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCi0gICAgICAgICAgICBo
dG1sOiAidGV4dC9odG1sIiwKLSAgICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKLSAgICAg
ICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLAotICAgICAg
ICAgICAgIioiOiBhbGxUeXBlcwotICAgICAgICB9LAotCi0gICAgICAgIGNvbnRlbnRzOiB7Ci0g
ICAgICAgICAgICB4bWw6IC94bWwvLAotICAgICAgICAgICAgaHRtbDogL2h0bWwvLAotICAgICAg
ICAgICAganNvbjogL2pzb24vCi0gICAgICAgIH0sCi0KLSAgICAgICAgcmVzcG9uc2VGaWVsZHM6
IHsKLSAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKLSAgICAgICAgICAgIHRleHQ6ICJy
ZXNwb25zZVRleHQiCi0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gTGlzdCBvZiBkYXRhIGNvbnZl
cnRlcnMKLSAgICAgICAgLy8gMSkga2V5IGZvcm1hdCBpcyAic291cmNlX3R5cGUgZGVzdGluYXRp
b25fdHlwZSIgKGEgc2luZ2xlIHNwYWNlIGluLWJldHdlZW4pCi0gICAgICAgIC8vIDIpIHRoZSBj
YXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkIGZvciBzb3VyY2VfdHlwZQotICAgICAgICBj
b252ZXJ0ZXJzOiB7Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAot
ICAgICAgICAgICAgIiogdGV4dCI6IHdpbmRvdy5TdHJpbmcsCi0KLSAgICAgICAgICAgIC8vIFRl
eHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQotICAgICAgICAgICAgInRleHQg
aHRtbCI6IHRydWUsCi0KLSAgICAgICAgICAgIC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4
cHJlc3Npb24KLSAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAotCi0g
ICAgICAgICAgICAvLyBQYXJzZSB0ZXh0IGFzIHhtbAotICAgICAgICAgICAgInRleHQgeG1sIjog
alF1ZXJ5LnBhcnNlWE1MCi0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhh
dCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKLSAgICAgICAgLy8geW91IGNhbiBhZGQgeW91
ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgotICAgICAgICAvLyBhbmQgd2hlbiB5b3UgY3Jl
YXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQotICAgICAgICAvLyBkZWVwIGV4dGVuZGVkIChzZWUg
YWpheEV4dGVuZCkKLSAgICAgICAgZmxhdE9wdGlvbnM6IHsKLSAgICAgICAgICAgIGNvbnRleHQ6
IHRydWUsCi0gICAgICAgICAgICB1cmw6IHRydWUKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBh
amF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwK
LSAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9y
dHMgKSwKLQotICAgIC8vIE1haW4gbWV0aG9kCi0gICAgYWpheDogZnVuY3Rpb24oIHVybCwgb3B0
aW9ucyApIHsKLQotICAgICAgICAvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUt
MS41IHNpZ25hdHVyZQotICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgewot
ICAgICAgICAgICAgb3B0aW9ucyA9IHVybDsKLSAgICAgICAgICAgIHVybCA9IHVuZGVmaW5lZDsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Ci0g
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICAgIHZhciAvLyBpZk1vZGlm
aWVkIGtleQotICAgICAgICAgICAgaWZNb2RpZmllZEtleSwKLSAgICAgICAgICAgIC8vIFJlc3Bv
bnNlIGhlYWRlcnMKLSAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKLSAgICAgICAg
ICAgIHJlc3BvbnNlSGVhZGVycywKLSAgICAgICAgICAgIC8vIHRyYW5zcG9ydAotICAgICAgICAg
ICAgdHJhbnNwb3J0LAotICAgICAgICAgICAgLy8gdGltZW91dCBoYW5kbGUKLSAgICAgICAgICAg
IHRpbWVvdXRUaW1lciwKLSAgICAgICAgICAgIC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFy
cwotICAgICAgICAgICAgcGFydHMsCi0gICAgICAgICAgICAvLyBUbyBrbm93IGlmIGdsb2JhbCBl
dmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWQKLSAgICAgICAgICAgIGZpcmVHbG9iYWxzLAotICAg
ICAgICAgICAgLy8gTG9vcCB2YXJpYWJsZQotICAgICAgICAgICAgaSwKLSAgICAgICAgICAgIC8v
IENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKLSAgICAgICAgICAgIHMgPSBqUXVlcnku
YWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAotICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNvbnRl
eHQKLSAgICAgICAgICAgIGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAotICAgICAg
ICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cwotICAgICAgICAgICAgLy8gSXQncyB0
aGUgY2FsbGJhY2tDb250ZXh0IGlmIG9uZSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMKLSAg
ICAgICAgICAgIC8vIGFuZCBpZiBpdCdzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnkgY29sbGVjdGlv
bgotICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gY2FsbGJhY2tDb250ZXh0ICE9PSBz
ICYmCi0gICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJh
Y2tDb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICkgPwotICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6IGpRdWVyeS5ldmVudCwKLSAgICAgICAgICAgIC8v
IERlZmVycmVkcwotICAgICAgICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKLSAg
ICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1v
cnkiICksCi0gICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAgICAg
ICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKLSAgICAgICAgICAgIC8vIEhl
YWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCi0gICAgICAgICAgICByZXF1ZXN0SGVh
ZGVycyA9IHt9LAotICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAotICAgICAg
ICAgICAgLy8gVGhlIGpxWEhSIHN0YXRlCi0gICAgICAgICAgICBzdGF0ZSA9IDAsCi0gICAgICAg
ICAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKLSAgICAgICAgICAgIHN0ckFib3J0ID0gImNh
bmNlbGVkIiwKLSAgICAgICAgICAgIC8vIEZha2UgeGhyCi0gICAgICAgICAgICBqcVhIUiA9IHsK
LQotICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCi0KLSAgICAgICAgICAgICAgICAvLyBD
YWNoZXMgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0
aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5h
bWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAgICAgLy8gUmF3IHN0cmluZwotICAgICAgICAgICAgICAg
IGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7Ci0gICAg
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0
YWJsZSBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rp
b24oIGtleSApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhcmVzcG9uc2VIZWFkZXJzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVycyA9IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIG1h
dGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xv
d2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PT0gdW5kZWZpbmVkID8g
bnVsbCA6IG1hdGNoOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBP
dmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgotICAgICAgICAgICAgICAgIG92
ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoICFzdGF0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0eXBl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHJl
cXVlc3QKLSAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0Owot
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRyYW5zcG9ydC5hYm9ydCggc3RhdHVzVGV4dCApOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUoIDAsIHN0YXR1c1RleHQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fTsKLQotICAgICAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmUKLSAg
ICAgICAgLy8gSXQgaXMgZGVmaW5lZCBoZXJlIGJlY2F1c2UganNsaW50IGNvbXBsYWlucyBpZiBp
dCBpcyBkZWNsYXJlZAotICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hp
Y2ggd291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKLSAgICAgICAgZnVuY3Rpb24g
ZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7Ci0g
ICAgICAgICAgICB2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlm
aWVkLAotICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0OwotCi0g
ICAgICAgICAgICAvLyBDYWxsZWQgb25jZQotICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFN0YXRlIGlzICJkb25lIiBub3cKLSAgICAgICAgICAgIHN0YXRlID0gMjsKLQotICAgICAg
ICAgICAgLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHMKLSAgICAgICAgICAgIGlmICggdGlt
ZW91dFRpbWVyICkgewotICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dFRpbWVy
ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRyYW5zcG9y
dCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgICAgICAvLyAobm8gbWF0dGVy
IGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQotICAgICAgICAgICAgdHJh
bnNwb3J0ID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFk
ZXJzCi0gICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOwot
Ci0gICAgICAgICAgICAvLyBTZXQgcmVhZHlTdGF0ZQotICAgICAgICAgICAganFYSFIucmVhZHlT
dGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKLQotICAgICAgICAgICAgLy8gR2V0IHJlc3BvbnNl
IGRhdGEKLSAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkgewotICAgICAgICAgICAgICAgIHJl
c3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBj
aGFpbmluZwotICAgICAgICAgICAgaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8
fCBzdGF0dXMgPT09IDMwNCApIHsKLQotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9k
aWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVk
IG1vZGUuCi0gICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2Rp
ZmllZCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbW9k
aWZpZWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV0YWdb
IGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSWYgbm90IG1vZGlmaWVkCi0gICAg
ICAgICAgICAgICAgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKLQotICAgICAgICAgICAgICAgICAg
ICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVkIjsKLSAgICAgICAgICAgICAgICAgICAgaXNTdWNj
ZXNzID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0YQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gYWph
eENvbnZlcnQoIHMsIHJlc3BvbnNlICk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQg
PSBpc1N1Y2Nlc3Muc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBpc1N1Y2Nl
c3MuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBpc1N1Y2Nlc3MuZXJyb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9ICFlcnJvcjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGV4dHJhY3QgZXJy
b3IgZnJvbSBzdGF0dXNUZXh0Ci0gICAgICAgICAgICAgICAgLy8gdGhlbiBub3JtYWxpemUgc3Rh
dHVzVGV4dCBhbmQgc3RhdHVzIGZvciBub24tYWJvcnRzCi0gICAgICAgICAgICAgICAgZXJyb3Ig
PSBzdGF0dXNUZXh0OwotICAgICAgICAgICAgICAgIGlmICggIXN0YXR1c1RleHQgfHwgc3RhdHVz
ICkgewotICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gImVycm9yIjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBv
YmplY3QKLSAgICAgICAgICAgIGpxWEhSLnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgIGpx
WEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgIiI7
Ci0KLSAgICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKLSAgICAgICAgICAgIGlmICggaXNTdWNj
ZXNzICkgewotICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0Nv
bnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRl
eHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICAgICAgICAgIGpxWEhS
LnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTsKLSAgICAgICAgICAgIHN0YXR1c0NvZGUgPSB1bmRl
ZmluZWQ7Ci0KLSAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4IiArICggaXNTdWNjZXNzID8gIlN1
Y2Nlc3MiIDogIkVycm9yIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwgcywg
aXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gQ29tcGxldGUKLSAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgo
IGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7Ci0KLSAgICAgICAgICAg
IGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0
LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKLSAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKLSAgICAgICAgICAgICAgICBpZiAo
ICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQudHJpZ2dlciggImFqYXhTdG9wIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF0dGFjaCBkZWZlcnJlZHMKLSAgICAgICAgZGVm
ZXJyZWQucHJvbWlzZSgganFYSFIgKTsKLSAgICAgICAganFYSFIuc3VjY2VzcyA9IGpxWEhSLmRv
bmU7Ci0gICAgICAgIGpxWEhSLmVycm9yID0ganFYSFIuZmFpbDsKLSAgICAgICAganFYSFIuY29t
cGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDsKLQotICAgICAgICAvLyBTdGF0dXMtZGVwZW5k
ZW50IGNhbGxiYWNrcwotICAgICAgICBqcVhIUi5zdGF0dXNDb2RlID0gZnVuY3Rpb24oIG1hcCAp
IHsKLSAgICAgICAgICAgIGlmICggbWFwICkgewotICAgICAgICAgICAgICAgIHZhciB0bXA7Ci0g
ICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoIHRtcCBpbiBtYXAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlWyB0
bXAgXSA9IFsgc3RhdHVzQ29kZVt0bXBdLCBtYXBbdG1wXSBdOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0g
bWFwWyBqcVhIUi5zdGF0dXMgXTsKLSAgICAgICAgICAgICAgICAgICAganFYSFIuYWx3YXlzKCB0
bXAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIg
KCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKLSAgICAgICAgLy8gQWRkIHByb3RvY29sIGlm
IG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29sLWxlc3MgdXJscykK
LSAgICAgICAgLy8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCi0g
ICAgICAgIHMudXJsID0gKCAoIHVybCB8fCBzLnVybCApICsgIiIgKS5yZXBsYWNlKCByaGFzaCwg
IiIgKS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgIi8vIiApOwotCi0g
ICAgICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKLSAgICAgICAgcy5kYXRhVHlwZXMgPSBq
UXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCBjb3Jl
X3JzcGFjZSApOwotCi0gICAgICAgIC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3Jk
ZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21hdGNoCi0gICAgICAgIGlm
ICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgewotICAgICAgICAgICAgcGFydHMgPSBydXJsLmV4
ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKLSAgICAgICAgICAgIHMuY3Jvc3NEb21haW4gPSAh
ISggcGFydHMgJiYKLSAgICAgICAgICAgICAgICAoIHBhcnRzWyAxIF0gIT09IGFqYXhMb2NQYXJ0
c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT09IGFqYXhMb2NQYXJ0c1sgMiBdIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6
IDQ0MyApICkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICggYWpheExvY1BhcnRzWyAzIF0g
fHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCi0gICAg
ICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29udmVydCBkYXRhIGlmIG5vdCBh
bHJlYWR5IGEgc3RyaW5nCi0gICAgICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYg
dHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICBzLmRhdGEgPSBqUXVl
cnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQXBwbHkgcHJlZmlsdGVycwotICAgICAgICBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0
cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKLQotICAgICAgICAvLyBJZiByZXF1
ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQotICAgICAgICBp
ZiAoIHN0YXRlID09PSAyICkgewotICAgICAgICAgICAgcmV0dXJuIGpxWEhSOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNr
ZWQgdG8KLSAgICAgICAgZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKLQotICAgICAgICAvLyBVcHBl
cmNhc2UgdGhlIHR5cGUKLSAgICAgICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7Ci0K
LSAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKLSAgICAgICAgcy5o
YXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7Ci0KLSAgICAgICAgLy8gV2F0
Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0cwotICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYm
IGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmln
Z2VyKCAiYWpheFN0YXJ0IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTW9yZSBvcHRpb25z
IGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKLSAgICAgICAgaWYgKCAhcy5o
YXNDb250ZW50ICkgewotCi0gICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBw
ZW5kIGRhdGEgdG8gdXJsCi0gICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKLSAgICAgICAgICAg
ICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmRh
dGE7Ci0gICAgICAgICAgICAgICAgLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBu
b3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQotICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRh
dGE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEdldCBpZk1vZGlmaWVkS2V5IGJl
Zm9yZSBhZGRpbmcgdGhlIGFudGktY2FjaGUgcGFyYW1ldGVyCi0gICAgICAgICAgICBpZk1vZGlm
aWVkS2V5ID0gcy51cmw7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBp
ZiBuZWVkZWQKLSAgICAgICAgICAgIGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgdHMgPSBqUXVlcnkubm93KCksCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhlcmUKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gcy51cmwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyB0cyApOwotCi0gICAgICAgICAgICAgICAg
Ly8gaWYgbm90aGluZyB3YXMgcmVwbGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAotICAg
ICAgICAgICAgICAgIHMudXJsID0gcmV0ICsgKCAoIHJldCA9PT0gcy51cmwgKSA/ICggcnF1ZXJ5
LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyB0cyA6ICIiICk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBp
ZiBkYXRhIGlzIGJlaW5nIHNlbnQKLSAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50
ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Ci0g
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250
ZW50VHlwZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1T
aW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4K
LSAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7Ci0gICAgICAgICAgICBpZk1vZGlmaWVkS2V5
ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKLSAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxhc3RN
b2RpZmllZFsgaWZNb2RpZmllZEtleSBdICkgewotICAgICAgICAgICAgICAgIGpxWEhSLnNldFJl
cXVlc3RIZWFkZXIoICJJZi1Nb2RpZmllZC1TaW5jZSIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlm
TW9kaWZpZWRLZXkgXSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCBqUXVlcnku
ZXRhZ1sgaWZNb2RpZmllZEtleSBdICkgewotICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVl
c3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSAp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRz
IGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQotICAgICAg
ICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAotICAgICAgICAgICAgIkFjY2VwdCIsCi0gICAgICAg
ICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/Ci0g
ICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBl
c1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6Ci0g
ICAgICAgICAgICAgICAgcy5hY2NlcHRzWyAiKiIgXQotICAgICAgICApOwotCi0gICAgICAgIC8v
IENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgotICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyAp
IHsKLSAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBd
ICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlw
ZXMgYW5kIGVhcmx5IGFib3J0Ci0gICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYmICggcy5iZWZv
cmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3Rh
dGUgPT09IDIgKSApIHsKLSAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJl
YWR5IGFuZCByZXR1cm4KLSAgICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTsKLQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0
aW9uCi0gICAgICAgIHN0ckFib3J0ID0gImFib3J0IjsKLQotICAgICAgICAvLyBJbnN0YWxsIGNh
bGxiYWNrcyBvbiBkZWZlcnJlZHMKLSAgICAgICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVy
cm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewotICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBd
ICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgdHJhbnNwb3J0Ci0gICAgICAgIHRyYW5z
cG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRp
b25zLCBqcVhIUiApOwotCi0gICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9y
dAotICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7Ci0gICAgICAgICAgICBkb25lKCAtMSwgIk5v
IFRyYW5zcG9ydCIgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGpxWEhSLnJlYWR5
U3RhdGUgPSAxOwotICAgICAgICAgICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKLSAgICAgICAgICAg
IGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0
LnRyaWdnZXIoICJhamF4U2VuZCIsIFsganFYSFIsIHMgXSApOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gVGltZW91dAotICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91
dCA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAganFYSFIuYWJvcnQoICJ0aW1lb3V0IiApOwot
ICAgICAgICAgICAgICAgIH0sIHMudGltZW91dCApOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN0YXRlID0gMTsKLSAgICAgICAgICAgICAgICB0
cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKLSAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9y
IGlmIG5vdCBkb25lCi0gICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRvbmUoIC0xLCBlICk7Ci0gICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJl
dGhyb3cgb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4ganFYSFI7Ci0gICAgfSwKLQotICAgIC8vIENvdW50ZXIgZm9y
IGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwotICAgIGFjdGl2ZTogMCwKLQot
ICAgIC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKLSAgICBs
YXN0TW9kaWZpZWQ6IHt9LAotICAgIGV0YWc6IHt9Ci0KLX0pOwotCi0vKiBIYW5kbGVzIHJlc3Bv
bnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6Ci0gKiAtIHNldHMgYWxsIHJlc3BvbnNlWFhYIGZpZWxk
cyBhY2NvcmRpbmdseQotICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJl
dHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKLSAqIC0gcmV0dXJucyB0
aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICovCi1mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9u
c2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgewotCi0gICAgdmFyIGN0LCB0eXBlLCBmaW5hbERh
dGFUeXBlLCBmaXJzdERhdGFUeXBlLAotICAgICAgICBjb250ZW50cyA9IHMuY29udGVudHMsCi0g
ICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLAotICAgICAgICByZXNwb25zZUZpZWxkcyA9
IHMucmVzcG9uc2VGaWVsZHM7Ci0KLSAgICAvLyBGaWxsIHJlc3BvbnNlWFhYIGZpZWxkcwotICAg
IGZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7Ci0gICAgICAgIGlmICggdHlwZSBpbiBy
ZXNwb25zZXMgKSB7Ci0gICAgICAgICAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9
IHJlc3BvbnNlc1sgdHlwZSBdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGF1
dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3MKLSAgICB3aGls
ZSggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKLSAgICAgICAgZGF0YVR5cGVzLnNoaWZ0KCk7
Ci0gICAgICAgIGlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIGN0ID0gcy5t
aW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlwZSIgKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtu
b3duIGNvbnRlbnQtdHlwZQotICAgIGlmICggY3QgKSB7Ci0gICAgICAgIGZvciAoIHR5cGUgaW4g
Y29udGVudHMgKSB7Ci0gICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVu
dHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewotICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNo
aWZ0KCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNl
IGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKLSAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJl
c3BvbnNlcyApIHsKLSAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKLSAgICAgICAg
Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7Ci0gICAgICAgICAgICBpZiAoICFkYXRhVHlwZXNb
IDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsKLSAg
ICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7Ci0g
ICAgICAgICAgICAgICAgZmlyc3REYXRhVHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgICAgIGZpbmFsRGF0
YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7Ci0gICAgfQotCi0gICAgLy8g
SWYgd2UgZm91bmQgYSBkYXRhVHlwZQotICAgIC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhl
IGxpc3QgaWYgbmVlZGVkCi0gICAgLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNw
b25zZQotICAgIGlmICggZmluYWxEYXRhVHlwZSApIHsKLSAgICAgICAgaWYgKCBmaW5hbERhdGFU
eXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKLSAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0
KCBmaW5hbERhdGFUeXBlICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlc1sg
ZmluYWxEYXRhVHlwZSBdOwotICAgIH0KLX0KLQotLy8gQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4g
dGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQotZnVuY3Rpb24gYWpheENvbnZl
cnQoIHMsIHJlc3BvbnNlICkgewotCi0gICAgdmFyIGNvbnYsIGNvbnYyLCBjdXJyZW50LCB0bXAs
Ci0gICAgICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVl
ZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KLSAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRh
VHlwZXMuc2xpY2UoKSwKLSAgICAgICAgcHJldiA9IGRhdGFUeXBlc1sgMCBdLAotICAgICAgICBj
b252ZXJ0ZXJzID0ge30sCi0gICAgICAgIGkgPSAwOwotCi0gICAgLy8gQXBwbHkgdGhlIGRhdGFG
aWx0ZXIgaWYgcHJvdmlkZWQKLSAgICBpZiAoIHMuZGF0YUZpbHRlciApIHsKLSAgICAgICAgcmVz
cG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7Ci0gICAgfQotCi0g
ICAgLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCi0gICAgaWYg
KCBkYXRhVHlwZXNbIDEgXSApIHsKLSAgICAgICAgZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMg
KSB7Ci0gICAgICAgICAgICBjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29u
dmVydGVyc1sgY29udiBdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBl
YWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUsIHRvbGVyYXRpbmcgbGlzdCBtb2RpZmljYXRpb24KLSAg
ICBmb3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyApIHsKLQotICAgICAgICAvLyBU
aGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvCi0g
ICAgICAgIGlmICggY3VycmVudCAhPT0gIioiICkgewotCi0gICAgICAgICAgICAvLyBDb252ZXJ0
IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBj
dXJyZW50Ci0gICAgICAgICAgICBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50
ICkgewotCi0gICAgICAgICAgICAgICAgLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKLSAgICAg
ICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBj
b252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgbm9u
ZSBmb3VuZCwgc2VlayBhIHBhaXIKLSAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgewotICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IGNvbnYyLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAiICIg
KyB0bXBbIDAgXSBdIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRl
cnNbICIqICIgKyB0bXBbIDAgXSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y29udiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uZGVuc2UgZXF1
aXZhbGVuY2UgY29udmVydGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvbnYgPT09IHRydWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b252ID0gY29udmVydGVyc1sgY29udjIgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYy
IF0gIT09IHRydWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50ID0gdG1wWyAwIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
VHlwZXMuc3BsaWNlKCBpLS0sIDAsIGN1cnJlbnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKQotICAgICAgICAgICAg
ICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBVbmxl
c3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtCi0g
ICAgICAgICAgICAgICAgICAgIGlmICggY29udiAmJiBzWyJ0aHJvd3MiXSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgc3RhdGU6ICJwYXJzZXJlcnJvciIsIGVycm9yOiBjb252ID8gZSA6ICJO
byBjb252ZXJzaW9uIGZyb20gIiArIHByZXYgKyAiIHRvICIgKyBjdXJyZW50IH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2IGZvciBuZXh0
IGl0ZXJhdGlvbgotICAgICAgICAgICAgcHJldiA9IGN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiByZXNwb25zZSB9OwotfQot
dmFyIG9sZENhbGxiYWNrcyA9IFtdLAotICAgIHJxdWVzdGlvbiA9IC9cPy8sCi0gICAgcmpzb25w
ID0gLyg9KVw/KD89JnwkKXxcP1w/LywKLSAgICBub25jZSA9IGpRdWVyeS5ub3coKTsKLQotLy8g
RGVmYXVsdCBqc29ucCBzZXR0aW5ncwotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAganNvbnA6ICJj
YWxsYmFjayIsCi0gICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBj
YWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgIl8iICsg
KCBub25jZSsrICkgKTsKLSAgICAgICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7Ci0gICAgICAg
IHJldHVybiBjYWxsYmFjazsKLSAgICB9Ci19KTsKLQotLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0
aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCi1qUXVlcnkuYWph
eFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywg
anFYSFIgKSB7Ci0KLSAgICB2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VD
b250YWluZXIsCi0gICAgICAgIGRhdGEgPSBzLmRhdGEsCi0gICAgICAgIHVybCA9IHMudXJsLAot
ICAgICAgICBoYXNDYWxsYmFjayA9IHMuanNvbnAgIT09IGZhbHNlLAotICAgICAgICByZXBsYWNl
SW5VcmwgPSBoYXNDYWxsYmFjayAmJiByanNvbnAudGVzdCggdXJsICksCi0gICAgICAgIHJlcGxh
Y2VJbkRhdGEgPSBoYXNDYWxsYmFjayAmJiAhcmVwbGFjZUluVXJsICYmIHR5cGVvZiBkYXRhID09
PSAic3RyaW5nIiAmJgotICAgICAgICAgICAgISggcy5jb250ZW50VHlwZSB8fCAiIiApLmluZGV4
T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpICYmCi0gICAgICAgICAgICBy
anNvbnAudGVzdCggZGF0YSApOwotCi0gICAgLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0
YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKLSAgICBpZiAo
IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgfHwgcmVwbGFjZUluVXJsIHx8IHJlcGxhY2VJ
bkRhdGEgKSB7Ci0KLSAgICAgICAgLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHBy
ZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAotICAgICAgICBjYWxsYmFja05hbWUg
PSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkg
PwotICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrKCkgOgotICAgICAgICAgICAgcy5qc29ucENh
bGxiYWNrOwotICAgICAgICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07Ci0K
LSAgICAgICAgLy8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YQotICAgICAg
ICBpZiAoIHJlcGxhY2VJblVybCApIHsKLSAgICAgICAgICAgIHMudXJsID0gdXJsLnJlcGxhY2Uo
IHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOwotICAgICAgICB9IGVsc2UgaWYgKCByZXBs
YWNlSW5EYXRhICkgewotICAgICAgICAgICAgcy5kYXRhID0gZGF0YS5yZXBsYWNlKCByanNvbnAs
ICIkMSIgKyBjYWxsYmFja05hbWUgKTsKLSAgICAgICAgfSBlbHNlIGlmICggaGFzQ2FsbGJhY2sg
KSB7Ci0gICAgICAgICAgICBzLnVybCArPSAoIHJxdWVzdGlvbi50ZXN0KCB1cmwgKSA/ICImIiA6
ICI/IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBl
eGVjdXRpb24KLSAgICAgICAgcy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKLSAgICAgICAgICAg
ICAgICBqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsK
LSAgICAgICAgfTsKLQotICAgICAgICAvLyBmb3JjZSBqc29uIGRhdGFUeXBlCi0gICAgICAgIHMu
ZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7Ci0KLSAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFjawot
ICAgICAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICByZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLQotICAgICAgICAv
LyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKLSAgICAgICAganFY
SFIuYWx3YXlzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgLy8gUmVzdG9yZSBwcmVleGlzdGlu
ZyB2YWx1ZQotICAgICAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVu
OwotCi0gICAgICAgICAgICAvLyBTYXZlIGJhY2sgYXMgZnJlZQotICAgICAgICAgICAgaWYgKCBz
WyBjYWxsYmFja05hbWUgXSApIHsKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBy
ZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmQKLSAgICAgICAg
ICAgICAgICBzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7
Ci0KLSAgICAgICAgICAgICAgICAvLyBzYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUg
dXNlCi0gICAgICAgICAgICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9u
IGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKLSAgICAgICAgICAgIGlmICggcmVzcG9uc2VDb250YWlu
ZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7Ci0gICAgICAgICAgICAg
ICAgb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5l
ZDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gRGVsZWdhdGUgdG8gc2NyaXB0Ci0gICAgICAg
IHJldHVybiAic2NyaXB0IjsKLSAgICB9Ci19KTsKLS8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBl
Ci1qUXVlcnkuYWpheFNldHVwKHsKLSAgICBhY2NlcHRzOiB7Ci0gICAgICAgIHNjcmlwdDogInRl
eHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNj
cmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgotICAgIH0sCi0gICAgY29udGVudHM6IHsK
LSAgICAgICAgc2NyaXB0OiAvamF2YXNjcmlwdHxlY21hc2NyaXB0LwotICAgIH0sCi0gICAgY29u
dmVydGVyczogewotICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKLSAg
ICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7Ci0gICAgICAgICAgICByZXR1cm4g
dGV4dDsKLSAgICAgICAgfQotICAgIH0KLX0pOwotCi0vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFs
IGNhc2UgYW5kIGdsb2JhbAotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlv
biggcyApIHsKLSAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgcy5j
YWNoZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0gICAgICAg
IHMudHlwZSA9ICJHRVQiOwotICAgICAgICBzLmdsb2JhbCA9IGZhbHNlOwotICAgIH0KLX0pOwot
Ci0vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKLWpRdWVyeS5hamF4VHJhbnNwb3J0
KCAic2NyaXB0IiwgZnVuY3Rpb24ocykgewotCi0gICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBk
ZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cwotICAgIGlmICggcy5jcm9zc0RvbWFpbiAp
IHsKLQotICAgICAgICB2YXIgc2NyaXB0LAotICAgICAgICAgICAgaGVhZCA9IGRvY3VtZW50Lmhl
YWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJoZWFkIiApWzBdIHx8IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudDsKLQotICAgICAgICByZXR1cm4gewotCi0gICAgICAgICAgICBz
ZW5kOiBmdW5jdGlvbiggXywgY2FsbGJhY2sgKSB7Ci0KLSAgICAgICAgICAgICAgICBzY3JpcHQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwotCi0gICAgICAgICAgICAgICAg
c2NyaXB0LmFzeW5jID0gImFzeW5jIjsKLQotICAgICAgICAgICAgICAgIGlmICggcy5zY3JpcHRD
aGFyc2V0ICkgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuY2hhcnNldCA9IHMuc2NyaXB0
Q2hhcnNldDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzY3JpcHQuc3Jj
ID0gcy51cmw7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggaGFuZGxlcnMgZm9yIGFsbCBi
cm93c2VycwotICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0
YXRlY2hhbmdlID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRl
Ly50ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaGVhZCAmJiBzY3JpcHQucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdGhl
IHNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdW5kZWZpbmVkOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsYmFjayBpZiBub3QgYWJvcnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soIDIwMCwgInN1Y2Nlc3MiICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgIC8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCAgdG8gY2ly
Y3VtdmVudCBhbiBJRTYgYnVnLgotICAgICAgICAgICAgICAgIC8vIFRoaXMgYXJpc2VzIHdoZW4g
YSBiYXNlIG5vZGUgaXMgdXNlZCAoIzI3MDkgYW5kICM0Mzc4KS4KLSAgICAgICAgICAgICAgICBo
ZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIHNjcmlwdCApIHsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCggMCwgMSAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci19
KTsKLXZhciB4aHJDYWxsYmFja3MsCi0gICAgLy8gIzUyODA6IEludGVybmV0IEV4cGxvcmVyIHdp
bGwga2VlcCBjb25uZWN0aW9ucyBhbGl2ZSBpZiB3ZSBkb24ndCBhYm9ydCBvbiB1bmxvYWQKLSAg
ICB4aHJPblVubG9hZEFib3J0ID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPyBmdW5jdGlvbigpIHsK
LSAgICAgICAgLy8gQWJvcnQgYWxsIHBlbmRpbmcgcmVxdWVzdHMKLSAgICAgICAgZm9yICggdmFy
IGtleSBpbiB4aHJDYWxsYmFja3MgKSB7Ci0gICAgICAgICAgICB4aHJDYWxsYmFja3NbIGtleSBd
KCAwLCAxICk7Ci0gICAgICAgIH0KLSAgICB9IDogZmFsc2UsCi0gICAgeGhySWQgPSAwOwotCi0v
LyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKLWZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhSKCkg
ewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7
Ci0gICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsK
LSAgICB0cnkgewotICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWlj
cm9zb2Z0LlhNTEhUVFAiICk7Ci0gICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLS8vIENyZWF0ZSB0
aGUgcmVxdWVzdCBvYmplY3QKLS8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0
aW5ncyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKLWpRdWVyeS5hamF4U2V0dGluZ3MueGhy
ID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPwotICAgIC8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJv
cGVybHkKLSAgICAgKiBpbXBsZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3Qg
cmVxdWVzdCBsb2NhbCBmaWxlcyksCi0gICAgICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0
IHdoZW4gaXQgaXMgYXZhaWxhYmxlCi0gICAgICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0
IGNhbiBiZSBkaXNhYmxlZCBpbiBJRTcvSUU4IHNvCi0gICAgICogd2UgbmVlZCBhIGZhbGxiYWNr
LgotICAgICAqLwotICAgIGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2Nh
bCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwotICAgIH0gOgot
ICAgIC8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRhcmQgWE1MSHR0cFJl
cXVlc3Qgb2JqZWN0Ci0gICAgY3JlYXRlU3RhbmRhcmRYSFI7Ci0KLS8vIERldGVybWluZSBzdXBw
b3J0IHByb3BlcnRpZXMKLShmdW5jdGlvbiggeGhyICkgewotICAgIGpRdWVyeS5leHRlbmQoIGpR
dWVyeS5zdXBwb3J0LCB7Ci0gICAgICAgIGFqYXg6ICEheGhyLAotICAgICAgICBjb3JzOiAhIXho
ciAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhociApCi0gICAgfSk7Ci19KSggalF1ZXJ5LmFq
YXhTZXR0aW5ncy54aHIoKSApOwotCi0vLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRoZSBicm93c2Vy
IGNhbiBwcm92aWRlIGFuIHhocgotaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4ICkgewotCi0gICAg
alF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7Ci0gICAgICAgIC8vIENyb3NzIGRv
bWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKLSAg
ICAgICAgaWYgKCAhcy5jcm9zc0RvbWFpbiB8fCBqUXVlcnkuc3VwcG9ydC5jb3JzICkgewotCi0g
ICAgICAgICAgICB2YXIgY2FsbGJhY2s7Ci0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEdldCBhIG5ldyB4aHIKLSAgICAgICAgICAgICAgICAgICAgdmFyIGhh
bmRsZSwgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhociA9IHMueGhyKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgc29ja2V0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFBhc3NpbmcgbnVsbCB1c2VybmFtZSwgZ2VuZXJhdGVzIGEgbG9naW4gcG9wdXAgb24gT3BlcmEg
KCMyODY1KQotICAgICAgICAgICAgICAgICAgICBpZiAoIHMudXNlcm5hbWUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYywgcy51c2Vy
bmFtZSwgcy5wYXNzd29yZCApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMgKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3Rv
bSBmaWVsZHMgaWYgcHJvdmlkZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnhockZpZWxk
cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy54aHJGaWVsZHMgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBzLnhockZpZWxkc1sgaSBd
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5taW1lVHlw
ZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gWC1S
ZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRv
bWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQot
ICAgICAgICAgICAgICAgICAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5
IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgotICAgICAgICAgICAgICAgICAgICAvLyAoaXQgY2Fu
IGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhT
ZXR1cCkKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3
b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBd
ID0gIlhNTEh0dHBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIE5lZWQgYW4gZXh0cmEgdHJ5L2NhdGNoIGZvciBjcm9zcyBkb21haW4gcmVx
dWVzdHMgaW4gRmlyZWZveCAzCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBfICkge30K
LQotICAgICAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGljaCBpcyBhY3R1YWxs
eQotICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChzbyBubyB0
cnkvY2F0Y2ggaGVyZSkKLSAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoICggcy5oYXNDb250
ZW50ICYmIHMuZGF0YSApIHx8IG51bGwgKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBMaXN0
ZW5lcgotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0
ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VIZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWw7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcmVmb3ggdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiBhY2Nlc3NpbmcgcHJvcGVydGll
cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYW4geGhyIHdoZW4gYSBuZXR3b3JrIGVy
cm9yIG9jY3VycmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vaGVscGZ1bC5r
bm9icy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6
XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIG5ldmVyIGNh
bGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkg
KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjYWxsZWQgb25j
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3Qga2VlcCBhcyBhY3Rp
dmUgYW55bW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBqUXVlcnkubm9vcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWJvcnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Fib3J0ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJvcnQgaXQgbWFudWFsbHkgaWYgbmVl
ZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0
YXRlICE9PSA0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
ci5hYm9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHt9
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0geGhyLnJlc3BvbnNl
WE1MOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3Qg
cmVzcG9uc2UgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4
bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMueG1sID0geG1sOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXaGVuIHJlcXVlc3RpbmcgYmluYXJ5IGRhdGEsIElFNi05IHdpbGwgdGhy
b3cgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBv
biBhbnkgYXR0ZW1wdCB0byBhY2Nlc3MgcmVzcG9uc2VUZXh0ICgjMTE0MjYpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpcmVmb3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdHVzVGV4dCBmb3IgZmF1
bHR5IGNyb3NzLWRvbWFpbiByZXF1ZXN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIG5vcm1hbGl6ZSB3aXRoIFdlYmtpdCBnaXZpbmcgYW4gZW1wdHkgc3RhdHVzVGV4
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAi
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVyIHN0YXR1cyBmb3Igbm9uIHN0YW5kYXJk
IGJlaGF2aW9ycwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgcmVxdWVzdCBpcyBsb2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoc3VjY2VzcyB3aXRoIG5vIGRh
dGEgd29uJ3QgZ2V0IG5vdGlmaWVkLCB0aGF0J3MgdGhlIGJlc3Qgd2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0
aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXR1cyAm
JiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAgOiA0MDQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSAtICMxNDUwOiBzb21ldGlt
ZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzID09PSAxMjIzICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDIwNDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzLCByZXNwb25zZUhl
YWRlcnMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmFzeW5jICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gc3luYyBtb2RlIHdlIGZpcmUgdGhlIGNhbGxiYWNr
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIChJRTYgJiBJRTcpIGlmIGl0J3MgaW4gY2FjaGUgYW5kIGhhcyBiZWVuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWV2ZWQgZGlyZWN0bHkgd2UgbmVlZCB0byBmaXJl
IHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggY2FsbGJh
Y2ssIDAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZSA9ICsreGhySWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHho
ck9uVW5sb2FkQWJvcnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRl
IHRoZSBhY3RpdmUgeGhycyBjYWxsYmFja3MgbGlzdCBpZiBuZWVkZWQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbmQgYXR0YWNoIHRoZSB1bmxvYWQgaGFuZGxlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXhockNhbGxiYWNrcyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyQ2FsbGJhY2tzID0ge307Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkudW5sb2FkKCB4aHJPblVubG9hZEFib3J0ICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFkZCB0byBsaXN0IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBjYWxsYmFjazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjaygwLDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgIH0pOwotfQotdmFyIGZ4Tm93LCB0aW1lcklk
LAotICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAotICAgIHJmeG51bSA9
IG5ldyBSZWdFeHAoICJeKD86KFstK10pPXwpKCIgKyBjb3JlX3BudW0gKyAiKShbYS16JV0qKSQi
LCAiaSIgKSwKLSAgICBycnVuID0gL3F1ZXVlSG9va3MkLywKLSAgICBhbmltYXRpb25QcmVmaWx0
ZXJzID0gWyBkZWZhdWx0UHJlZmlsdGVyIF0sCi0gICAgdHdlZW5lcnMgPSB7Ci0gICAgICAgICIq
IjogW2Z1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHZhciBlbmQsIHVuaXQs
Ci0gICAgICAgICAgICAgICAgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSAp
LAotICAgICAgICAgICAgICAgIHBhcnRzID0gcmZ4bnVtLmV4ZWMoIHZhbHVlICksCi0gICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gdHdlZW4uY3VyKCksCi0gICAgICAgICAgICAgICAgc3RhcnQgPSAr
dGFyZ2V0IHx8IDAsCi0gICAgICAgICAgICAgICAgc2NhbGUgPSAxLAotICAgICAgICAgICAgICAg
IG1heEl0ZXJhdGlvbnMgPSAyMDsKLQotICAgICAgICAgICAgaWYgKCBwYXJ0cyApIHsKLSAgICAg
ICAgICAgICAgICBlbmQgPSArcGFydHNbMl07Ci0gICAgICAgICAgICAgICAgdW5pdCA9IHBhcnRz
WzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXB1dGUgc3RhcnRpbmcgdmFsdWUKLSAgICAgICAg
ICAgICAgICBpZiAoIHVuaXQgIT09ICJweCIgJiYgc3RhcnQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBv
aW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIFByZWZlciB0aGUgY3VycmVudCBwcm9wZXJ0eSwg
YmVjYXVzZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0cml2aWFsIGlmIGl0IHVzZXMgdGhlIHNhbWUg
dW5pdHMKLSAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZW5kIG9yIGEgc2ltcGxl
IGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0galF1ZXJ5LmNzcyggdHdlZW4u
ZWxlbSwgcHJvcCwgdHJ1ZSApIHx8IGVuZCB8fCAxOwotCi0gICAgICAgICAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJv
ZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgYSBzdHJpbmcgZm9yIGRvdWJsaW5nIGZhY3RvciBzbyB3ZSBkb24ndCBh
Y2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdwotICAgICAgICAgICAgICAg
ICAgICAgICAgc2NhbGUgPSBzY2FsZSB8fCAiLjUiOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBZGp1c3QgYW5kIGFwcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0
YXJ0IC8gc2NhbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHR3ZWVu
LmVsZW0sIHByb3AsIHN0YXJ0ICsgdW5pdCApOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVw
ZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEFuZCBicmVha2luZyB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNo
YW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoCi0gICAgICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdlZW4uY3VyKCkgLyB0YXJn
ZXQpICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHR3ZWVuLnVuaXQgPSB1bml0OwotICAgICAgICAgICAgICAg
IHR3ZWVuLnN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgLy8gSWYgYSArPS8tPSB0b2tl
biB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCi0gICAgICAg
ICAgICAgICAgdHdlZW4uZW5kID0gcGFydHNbMV0gPyBzdGFydCArICggcGFydHNbMV0gKyAxICkg
KiBlbmQgOiBlbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHdlZW47Ci0g
ICAgICAgIH1dCi0gICAgfTsKLQotLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkg
d2lsbCBydW4gc3luY2hyb25vdXNseQotZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7Ci0gICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci0gICAgfSwg
MCApOwotICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Ci19Ci0KLWZ1bmN0aW9u
IGNyZWF0ZVR3ZWVucyggYW5pbWF0aW9uLCBwcm9wcyApIHsKLSAgICBqUXVlcnkuZWFjaCggcHJv
cHMsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSAo
IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIHR3ZWVuZXJzWyAiKiIgXSApLAotICAg
ICAgICAgICAgaW5kZXggPSAwLAotICAgICAgICAgICAgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5n
dGg7Ci0gICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0gICAgICAg
ICAgICBpZiAoIGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1
ZSApICkgewotCi0gICAgICAgICAgICAgICAgLy8gd2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVy
dHkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9KTsKLX0KLQotZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25z
ICkgewotICAgIHZhciByZXN1bHQsCi0gICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgdHdlZW5l
ckluZGV4ID0gMCwKLSAgICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVycy5sZW5ndGgs
Ci0gICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIC8vIGRvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxl
Y3RvcgotICAgICAgICAgICAgZGVsZXRlIHRpY2suZWxlbTsKLSAgICAgICAgfSksCi0gICAgICAg
IHRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGZ4Tm93
IHx8IGNyZWF0ZUZ4Tm93KCksCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nID0gTWF0aC5tYXgo
IDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGlt
ZSApLAotICAgICAgICAgICAgICAgIC8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVz
IHRvIHVzZSAxIC0gKCAwLjUgfHwgMCApICgjMTI0OTcpCi0gICAgICAgICAgICAgICAgdGVtcCA9
IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAotICAgICAgICAgICAgICAgIHBl
cmNlbnQgPSAxIC0gdGVtcCwKLSAgICAgICAgICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgICAg
ICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGZv
ciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50
LCByZW1haW5pbmcgXSk7Ci0KLSAgICAgICAgICAgIGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3Ro
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5pbmc7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1h
dGlvbiBdICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICBhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKHsKLSAgICAg
ICAgICAgIGVsZW06IGVsZW0sCi0gICAgICAgICAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30s
IHByb3BlcnRpZXMgKSwKLSAgICAgICAgICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsg
c3BlY2lhbEVhc2luZzoge30gfSwgb3B0aW9ucyApLAotICAgICAgICAgICAgb3JpZ2luYWxQcm9w
ZXJ0aWVzOiBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25z
LAotICAgICAgICAgICAgc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgICAg
ICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCi0gICAgICAgICAgICB0d2VlbnM6IFtd
LAotICAgICAgICAgICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQsIGVhc2luZyAp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1h
dGlvbi5vcHRzLCBwcm9wLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24u
b3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7Ci0g
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0d2VlbjsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzdG9wOiBm
dW5jdGlvbiggZ290b0VuZCApIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwLAotICAg
ICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0
byBydW4gYWxsIHRoZSB0d2VlbnMKLSAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdl
IHNraXAgdGhpcyBwYXJ0Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGdvdG9FbmQgPyBh
bmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCA7IGlu
ZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9u
LnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyByZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lCi0gICAgICAg
ICAgICAgICAgLy8gb3RoZXJ3aXNlLCByZWplY3QKLSAgICAgICAgICAgICAgICBpZiAoIGdvdG9F
bmQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBb
IGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdv
dG9FbmQgXSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSksCi0gICAgICAgIHByb3BzID0gYW5pbWF0aW9u
LnByb3BzOwotCi0gICAgcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxF
YXNpbmcgKTsKLQotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAg
ICAgICByZXN1bHQgPSBhbmltYXRpb25QcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlv
biwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7Ci0gICAgICAgIGlmICggcmVzdWx0ICkg
ewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNy
ZWF0ZVR3ZWVucyggYW5pbWF0aW9uLCBwcm9wcyApOwotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKLSAgICAgICAgYW5pbWF0aW9uLm9wdHMu
c3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7Ci0gICAgfQotCi0gICAgalF1ZXJ5LmZ4LnRp
bWVyKAotICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7Ci0gICAgICAgICAgICBhbmltOiBh
bmltYXRpb24sCi0gICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUsCi0gICAg
ICAgICAgICBlbGVtOiBlbGVtCi0gICAgICAgIH0pCi0gICAgKTsKLQotICAgIC8vIGF0dGFjaCBj
YWxsYmFja3MgZnJvbSBvcHRpb25zCi0gICAgcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5p
bWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQotICAgICAgICAuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9u
ZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQotICAgICAgICAuZmFpbCggYW5pbWF0aW9uLm9w
dHMuZmFpbCApCi0gICAgICAgIC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOwotfQot
Ci1mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsKLSAgICB2YXIg
aW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOwotCi0gICAgLy8gY2FtZWxDYXNlLCBz
cGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzCi0gICAgZm9yICggaW5kZXggaW4g
cHJvcHMgKSB7Ci0gICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOwotICAg
ICAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07Ci0gICAgICAgIHZhbHVlID0gcHJv
cHNbIGluZGV4IF07Ci0gICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0g
ICAgICAgICAgICBlYXNpbmcgPSB2YWx1ZVsgMSBdOwotICAgICAgICAgICAgdmFsdWUgPSBwcm9w
c1sgaW5kZXggXSA9IHZhbHVlWyAwIF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGluZGV4
ICE9PSBuYW1lICkgewotICAgICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOwotICAgICAg
ICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOwotICAgICAgICB9Ci0KLSAgICAgICAgaG9va3Mg
PSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKLSAgICAgICAgaWYgKCBob29rcyAmJiAiZXhwYW5k
IiBpbiBob29rcyApIHsKLSAgICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSAp
OwotICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBuYW1lIF07Ci0KLSAgICAgICAgICAgIC8vIG5v
dCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b250IG92ZXJ3cml0ZSBrZXlzIGFscmVhZHkgcHJlc2Vu
dC4KLSAgICAgICAgICAgIC8vIGFsc28gLSByZXVzaW5nICdpbmRleCcgZnJvbSBhYm92ZSBiZWNh
dXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCi0gICAgICAgICAgICBmb3IgKCBpbmRleCBp
biB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07Ci0g
ICAgICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7Ci0KLSAgICB0
d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkgewotICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCBwcm9wcyApICkgewotICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9wczsK
LSAgICAgICAgICAgIHByb3BzID0gWyAiKiIgXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHByb3BzID0gcHJvcHMuc3BsaXQoIiAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBw
cm9wLAotICAgICAgICAgICAgaW5kZXggPSAwLAotICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMu
bGVuZ3RoOwotCi0gICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewot
ICAgICAgICAgICAgcHJvcCA9IHByb3BzWyBpbmRleCBdOwotICAgICAgICAgICAgdHdlZW5lcnNb
IHByb3AgXSA9IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW107Ci0gICAgICAgICAgICB0d2VlbmVyc1sg
cHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcHJl
ZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7Ci0gICAgICAgIGlmICggcHJl
cGVuZCApIHsKLSAgICAgICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJh
Y2sgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMu
cHVzaCggY2FsbGJhY2sgKTsKLSAgICAgICAgfQotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBkZWZh
dWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHsKLSAgICB2YXIgaW5kZXgsIHByb3As
IHZhbHVlLCBsZW5ndGgsIGRhdGFTaG93LCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwK
LSAgICAgICAgYW5pbSA9IHRoaXMsCi0gICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAgICAg
ICAgb3JpZyA9IHt9LAotICAgICAgICBoYW5kbGVkID0gW10sCi0gICAgICAgIGhpZGRlbiA9IGVs
ZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKTsKLQotICAgIC8vIGhhbmRsZSBxdWV1ZTog
ZmFsc2UgcHJvbWlzZXMKLSAgICBpZiAoICFvcHRzLnF1ZXVlICkgewotICAgICAgICBob29rcyA9
IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiApOwotICAgICAgICBpZiAoIGhvb2tzLnVu
cXVldWVkID09IG51bGwgKSB7Ci0gICAgICAgICAgICBob29rcy51bnF1ZXVlZCA9IDA7Ci0gICAg
ICAgICAgICBvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKLSAgICAgICAgICAgIGhvb2tzLmVt
cHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoICFob29rcy51bnF1
ZXVlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgb2xkZmlyZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgICAgaG9va3MudW5xdWV1ZWQrKzsK
LQotICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8vIGRvaW5n
IHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBjb21wbGV0ZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVk
Ci0gICAgICAgICAgICAvLyBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKLSAgICAgICAgICAgIGFuaW0u
YWx3YXlzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGhvb2tzLnVucXVldWVkLS07Ci0g
ICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCAiZngiICkubGVuZ3RoICkg
ewotICAgICAgICAgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8vIGhlaWdo
dC93aWR0aCBvdmVyZmxvdyBwYXNzCi0gICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICgg
ImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgewotICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFrcyBvdXQKLSAgICAgICAgLy8gUmVjb3JkIGFsbCAz
IG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdAotICAgICAgICAvLyBjaGFu
Z2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKLSAgICAgICAgLy8g
b3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUKLSAgICAgICAgb3B0cy5vdmVyZmxv
dyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07
Ci0KLSAgICAgICAgLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBo
ZWlnaHQvd2lkdGgKLSAgICAgICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhh
dCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZAotICAgICAgICBpZiAoIGpRdWVyeS5j
c3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAiaW5saW5lIiAmJgotICAgICAgICAgICAgICAgIGpR
dWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgewotCi0gICAgICAgICAgICAv
LyBpbmxpbmUtbGV2ZWwgZWxlbWVudHMgYWNjZXB0IGlubGluZS1ibG9jazsKLSAgICAgICAgICAg
IC8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5lIHdpdGggbGF5b3V0Ci0g
ICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0IHx8
IGNzc19kZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApID09PSAiaW5saW5lIiApIHsKLSAg
ICAgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7Ci0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIG9wdHMub3ZlcmZsb3cgKSB7Ci0gICAg
ICAgIHN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7Ci0gICAgICAgIGlmICggIWpRdWVyeS5zdXBw
b3J0LnNocmlua1dyYXBCbG9ja3MgKSB7Ci0gICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07
Ci0gICAgICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOwot
ICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvLyBzaG93L2hpZGUgcGFz
cwotICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgewotICAgICAgICB2YWx1ZSA9IHByb3BzWyBp
bmRleCBdOwotICAgICAgICBpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07Ci0gICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUg
fHwgdmFsdWUgPT09ICJ0b2dnbGUiOwotICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRk
ZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhbmRsZWQucHVzaCggaW5kZXggKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGxlbmd0aCA9IGhhbmRsZWQubGVuZ3RoOwotICAgIGlmICggbGVuZ3Ro
ICkgewotICAgICAgICBkYXRhU2hvdyA9IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIgKSB8
fCBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSApOwotICAgICAgICBpZiAoICJoaWRk
ZW4iIGluIGRhdGFTaG93ICkgewotICAgICAgICAgICAgaGlkZGVuID0gZGF0YVNob3cuaGlkZGVu
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gc3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVu
YWJsZXMgLnN0b3AoKS50b2dnbGUoKSB0byAicmV2ZXJzZSIKLSAgICAgICAgaWYgKCB0b2dnbGUg
KSB7Ci0gICAgICAgICAgICBkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICggaGlkZGVuICkgewotICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkuc2hvdygp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0gICAgICAgIGFuaW0uZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZh
ciBwcm9wOwotICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJmeHNob3ciLCB0
cnVlICk7Ci0gICAgICAgICAgICBmb3IgKCBwcm9wIGluIG9yaWcgKSB7Ci0gICAgICAgICAgICAg
ICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGZvciAoIGluZGV4ID0gMCA7IGluZGV4IDwgbGVuZ3Ro
IDsgaW5kZXgrKyApIHsKLSAgICAgICAgICAgIHByb3AgPSBoYW5kbGVkWyBpbmRleCBdOwotICAg
ICAgICAgICAgdHdlZW4gPSBhbmltLmNyZWF0ZVR3ZWVuKCBwcm9wLCBoaWRkZW4gPyBkYXRhU2hv
d1sgcHJvcCBdIDogMCApOwotICAgICAgICAgICAgb3JpZ1sgcHJvcCBdID0gZGF0YVNob3dbIHBy
b3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKLQotICAgICAgICAgICAgaWYgKCAh
KCBwcm9wIGluIGRhdGFTaG93ICkgKSB7Ci0gICAgICAgICAgICAgICAgZGF0YVNob3dbIHByb3Ag
XSA9IHR3ZWVuLnN0YXJ0OwotICAgICAgICAgICAgICAgIGlmICggaGlkZGVuICkgewotICAgICAg
ICAgICAgICAgICAgICB0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKLSAgICAgICAgICAgICAgICAg
ICAgdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lkdGgiIHx8IHByb3AgPT09ICJoZWlnaHQiID8g
MSA6IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi1mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcg
KSB7Ci0gICAgcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywg
cHJvcCwgZW5kLCBlYXNpbmcgKTsKLX0KLWpRdWVyeS5Ud2VlbiA9IFR3ZWVuOwotCi1Ud2Vlbi5w
cm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFR3ZWVuLAotICAgIGluaXQ6IGZ1bmN0aW9u
KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKLSAgICAgICAgdGhp
cy5lbGVtID0gZWxlbTsKLSAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsKLSAgICAgICAgdGhpcy5l
YXNpbmcgPSBlYXNpbmcgfHwgInN3aW5nIjsKLSAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9u
czsKLSAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKLSAgICAgICAg
dGhpcy5lbmQgPSBlbmQ7Ci0gICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3Nz
TnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKLSAgICB9LAotICAgIGN1cjogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0K
LSAgICAgICAgcmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/Ci0gICAgICAgICAgICBob29rcy5n
ZXQoIHRoaXMgKSA6Ci0gICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0
aGlzICk7Ci0gICAgfSwKLSAgICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgewotICAgICAgICB2
YXIgZWFzZWQsCi0gICAgICAgICAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9w
IF07Ci0KLSAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7Ci0gICAgICAgICAg
ICB0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKLSAgICAg
ICAgICAgICAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAx
LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMu
c3RhcnQ7Ci0KLSAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKLSAgICAgICAgICAg
IHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgewotICAgICAgICAg
ICAgaG9va3Muc2V0KCB0aGlzICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUd2Vl
bi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfQotfTsKLQotVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0g
VHdlZW4ucHJvdG90eXBlOwotCi1Ud2Vlbi5wcm9wSG9va3MgPSB7Ci0gICAgX2RlZmF1bHQ6IHsK
LSAgICAgICAgZ2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0
OwotCi0gICAgICAgICAgICBpZiAoIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYm
Ci0gICAgICAgICAgICAgICAgKCF0d2Vlbi5lbGVtLnN0eWxlIHx8IHR3ZWVuLmVsZW0uc3R5bGVb
IHR3ZWVuLnByb3AgXSA9PSBudWxsKSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4u
ZWxlbVsgdHdlZW4ucHJvcCBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBwYXNz
aW5nIGFueSB2YWx1ZSBhcyBhIDR0aCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2Fs
bHkKLSAgICAgICAgICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBh
IHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMKLSAgICAgICAgICAgIC8vIHNvLCBzaW1wbGUgdmFs
dWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCi0gICAgICAgICAgICAvLyBj
b21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcy4K
LSAgICAgICAgICAgIHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3As
IGZhbHNlLCAiIiApOwotICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZp
bmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgotICAgICAgICAgICAgcmV0dXJuICFy
ZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0OwotICAgICAgICB9LAotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKLSAgICAgICAgICAgIC8vIHVzZSBzdGVwIGhv
b2sgZm9yIGJhY2sgY29tcGF0IC0gdXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlIC0gdXNlIC5zdHls
ZSBpZiBpdHMKLSAgICAgICAgICAgIC8vIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRp
ZXMgd2hlcmUgYXZhaWxhYmxlCi0gICAgICAgICAgICBpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vl
bi5wcm9wIF0gKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3Ag
XSggdHdlZW4gKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0uc3R5bGUgJiYg
KCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51
bGwgfHwgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKLSAgICAgICAgICAgICAg
ICBqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVu
LnVuaXQgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHdlZW4uZWxl
bVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotfTsKLQotLy8gUmVtb3ZlIGluIDIuMCAtIHRoaXMgc3VwcG9ydHMgSUU4J3MgcGFuaWMg
YmFzZWQgYXBwcm9hY2gKLS8vIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rl
cwotCi1Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExl
ZnQgPSB7Ci0gICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgICAgIGlmICggdHdlZW4u
ZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICB0
d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7Ci0gICAgICAgIH0KLSAgICB9Ci19
OwotCi1qUXVlcnkuZWFjaChbICJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKLSAgICB2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKLSAgICBqUXVl
cnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAg
ICAgICAgcmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSAiYm9vbGVhbiIg
fHwKLSAgICAgICAgICAgIC8vIHNwZWNpYWwgY2hlY2sgZm9yIC50b2dnbGUoIGhhbmRsZXIsIGhh
bmRsZXIsIC4uLiApCi0gICAgICAgICAgICAoICFpICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVl
ZCApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSApID8KLSAgICAgICAgICAgIGNzc0Zu
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6Ci0gICAgICAgICAgICB0aGlzLmFuaW1hdGUoIGdl
bkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0gICAgfTsKLX0p
OwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8s
IGVhc2luZywgY2FsbGJhY2sgKSB7Ci0KLSAgICAgICAgLy8gc2hvdyBhbnkgaGlkZGVuIGVsZW1l
bnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCi0gICAgICAgIHJldHVybiB0aGlzLmZpbHRl
ciggaXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5IiwgMCApLnNob3coKQotCi0gICAgICAgICAgICAv
LyBhbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKLSAgICAgICAgICAgIC5lbmQoKS5hbmlt
YXRlKHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9LAot
ICAgIGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsK
LSAgICAgICAgdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKLSAgICAg
ICAgICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSwK
LSAgICAgICAgICAgIGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0
IGJlIGxvc3QKLSAgICAgICAgICAgICAgICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1
ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBF
bXB0eSBhbmltYXRpb25zIHJlc29sdmUgaW1tZWRpYXRlbHkKLSAgICAgICAgICAgICAgICBpZiAo
IGVtcHR5ICkgewotICAgICAgICAgICAgICAgICAgICBhbmltLnN0b3AoIHRydWUgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBlbXB0eSB8fCBv
cHRhbGwucXVldWUgPT09IGZhbHNlID8KLSAgICAgICAgICAgIHRoaXMuZWFjaCggZG9BbmltYXRp
b24gKSA6Ci0gICAgICAgICAgICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9u
ICk7Ci0gICAgfSwKLSAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0Vu
ZCApIHsKLSAgICAgICAgdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKLSAgICAg
ICAgICAgIHZhciBzdG9wID0gaG9va3Muc3RvcDsKLSAgICAgICAgICAgIGRlbGV0ZSBob29rcy5z
dG9wOwotICAgICAgICAgICAgc3RvcCggZ290b0VuZCApOwotICAgICAgICB9OwotCi0gICAgICAg
IGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgZ290b0VuZCA9
IGNsZWFyUXVldWU7Ci0gICAgICAgICAgICBjbGVhclF1ZXVlID0gdHlwZTsKLSAgICAgICAgICAg
IHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBjbGVhclF1ZXVlICYm
IHR5cGUgIT09IGZhbHNlICkgewotICAgICAgICAgICAgdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngi
LCBbXSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHZhciBkZXF1ZXVlID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICBpbmRl
eCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgInF1ZXVlSG9va3MiLAotICAgICAgICAgICAgICAg
IHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0gICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5f
ZGF0YSggdGhpcyApOwotCi0gICAgICAgICAgICBpZiAoIGluZGV4ICkgewotICAgICAgICAgICAg
ICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yICggaW5kZXggaW4g
ZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFb
IGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICgg
aW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKLSAgICAgICAgICAgICAgICBpZiAo
IHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51bGwgfHwgdGltZXJz
WyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHsKLSAgICAgICAgICAgICAgICAgICAgdGltZXJz
WyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApOwotICAgICAgICAgICAgICAgICAgICBkZXF1
ZXVlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAx
ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBz
dGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2Vk
Ci0gICAgICAgICAgICAvLyB0aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0
ZSBjYWxsYmFja3MsIHdoaWNoIHdpbGwgZGVxdWV1ZQotICAgICAgICAgICAgLy8gYnV0IG9ubHkg
aWYgdGhleSB3ZXJlIGdvdG9FbmQKLSAgICAgICAgICAgIGlmICggZGVxdWV1ZSB8fCAhZ290b0Vu
ZCApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci19KTsKLQotLy8gR2VuZXJhdGUgcGFyYW1l
dGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KLWZ1bmN0aW9uIGdlbkZ4KCB0eXBl
LCBpbmNsdWRlV2lkdGggKSB7Ci0gICAgdmFyIHdoaWNoLAotICAgICAgICBhdHRycyA9IHsgaGVp
Z2h0OiB0eXBlIH0sCi0gICAgICAgIGkgPSAwOwotCi0gICAgLy8gaWYgd2UgaW5jbHVkZSB3aWR0
aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAotICAgIC8vIGlm
IHdlIGRvbid0IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVm
dCBhbmQgUmlnaHQKLSAgICBpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGg/IDEgOiAwOwotICAg
IGZvciggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKLSAgICAgICAgd2hpY2gg
PSBjc3NFeHBhbmRbIGkgXTsKLSAgICAgICAgYXR0cnNbICJtYXJnaW4iICsgd2hpY2ggXSA9IGF0
dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsKLSAgICB9Ci0KLSAgICBpZiAoIGluY2x1
ZGVXaWR0aCApIHsKLSAgICAgICAgYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gYXR0cnM7Ci19Ci0KLS8vIEdlbmVyYXRlIHNob3J0Y3V0cyBm
b3IgY3VzdG9tIGFuaW1hdGlvbnMKLWpRdWVyeS5lYWNoKHsKLSAgICBzbGlkZURvd246IGdlbkZ4
KCJzaG93IiksCi0gICAgc2xpZGVVcDogZ2VuRngoImhpZGUiKSwKLSAgICBzbGlkZVRvZ2dsZTog
Z2VuRngoInRvZ2dsZSIpLAotICAgIGZhZGVJbjogeyBvcGFjaXR5OiAic2hvdyIgfSwKLSAgICBm
YWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAotICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTog
InRvZ2dsZSIgfQotfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgewotICAgIGpRdWVyeS5mblsg
bmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAg
ICB9OwotfSk7Ci0KLWpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiAp
IHsKLSAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpR
dWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogewotICAgICAgICBjb21wbGV0ZTogZm4gfHwgIWZu
ICYmIGVhc2luZyB8fAotICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYg
c3BlZWQsCi0gICAgICAgIGR1cmF0aW9uOiBzcGVlZCwKLSAgICAgICAgZWFzaW5nOiBmbiAmJiBl
YXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5n
Ci0gICAgfTsKLQotICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9m
IG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgotICAgICAgICBvcHQu
ZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJh
dGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKLQotICAgIC8vIG5vcm1hbGl6ZSBv
cHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKLSAgICBpZiAoIG9wdC5xdWV1
ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKLSAgICAgICAgb3B0LnF1ZXVlID0g
ImZ4IjsKLSAgICB9Ci0KLSAgICAvLyBRdWV1ZWluZwotICAgIG9wdC5vbGQgPSBvcHQuY29tcGxl
dGU7Ci0KLSAgICBvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkgewotICAgICAgICAgICAgb3B0Lm9sZC5jYWxsKCB0
aGlzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIG9wdC5xdWV1ZSApIHsKLSAgICAgICAg
ICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICByZXR1cm4gb3B0OwotfTsKLQotalF1ZXJ5LmVhc2luZyA9IHsKLSAgICBsaW5lYXI6
IGZ1bmN0aW9uKCBwICkgewotICAgICAgICByZXR1cm4gcDsKLSAgICB9LAotICAgIHN3aW5nOiBm
dW5jdGlvbiggcCApIHsKLSAgICAgICAgcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwKk1hdGguUEkg
KSAvIDI7Ci0gICAgfQotfTsKLQotalF1ZXJ5LnRpbWVycyA9IFtdOwotalF1ZXJ5LmZ4ID0gVHdl
ZW4ucHJvdG90eXBlLmluaXQ7Ci1qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciB0aW1lciwKLSAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICAgICAgaSA9IDA7
Ci0KLSAgICBmeE5vdyA9IGpRdWVyeS5ub3coKTsKLQotICAgIGZvciAoIDsgaSA8IHRpbWVycy5s
ZW5ndGg7IGkrKyApIHsKLSAgICAgICAgdGltZXIgPSB0aW1lcnNbIGkgXTsKLSAgICAgICAgLy8g
Q2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCi0gICAgICAgIGlm
ICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgewotICAgICAgICAgICAgdGlt
ZXJzLnNwbGljZSggaS0tLCAxICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoICF0aW1l
cnMubGVuZ3RoICkgewotICAgICAgICBqUXVlcnkuZnguc3RvcCgpOwotICAgIH0KLSAgICBmeE5v
dyA9IHVuZGVmaW5lZDsKLX07Ci0KLWpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciAp
IHsKLSAgICBpZiAoIHRpbWVyKCkgJiYgalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApICYmICF0
aW1lcklkICkgewotICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNr
LCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsKLSAgICB9Ci19OwotCi1qUXVlcnkuZnguaW50ZXJ2YWwg
PSAxMzsKLQotalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKLSAgICBjbGVhckludGVydmFs
KCB0aW1lcklkICk7Ci0gICAgdGltZXJJZCA9IG51bGw7Ci19OwotCi1qUXVlcnkuZnguc3BlZWRz
ID0gewotICAgIHNsb3c6IDYwMCwKLSAgICBmYXN0OiAyMDAsCi0gICAgLy8gRGVmYXVsdCBzcGVl
ZAotICAgIF9kZWZhdWx0OiA0MDAKLX07Ci0KLS8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9u
IHBvaW50Ci1qUXVlcnkuZnguc3RlcCA9IHt9OwotCi1pZiAoIGpRdWVyeS5leHByICYmIGpRdWVy
eS5leHByLmZpbHRlcnMgKSB7Ci0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVy
cywgZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07
Ci0gICAgICAgIH0pLmxlbmd0aDsKLSAgICB9OwotfQotdmFyIHJyb290ID0gL14oPzpib2R5fGh0
bWwpJC9pOwotCi1qUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0gICAg
aWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5k
ZWZpbmVkID8KLSAgICAgICAgICAgIHRoaXMgOgotICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0
aW9uKCBpICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlz
LCBvcHRpb25zLCBpICk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2YXIgZG9jRWxl
bSwgYm9keSwgd2luLCBjbGllbnRUb3AsIGNsaWVudExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsTGVm
dCwKLSAgICAgICAgYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKLSAgICAgICAgZWxlbSA9IHRo
aXNbIDAgXSwKLSAgICAgICAgZG9jID0gZWxlbSAmJiBlbGVtLm93bmVyRG9jdW1lbnQ7Ci0KLSAg
ICBpZiAoICFkb2MgKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIChib2R5
ID0gZG9jLmJvZHkpID09PSBlbGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5Lm9mZnNldC5i
b2R5T2Zmc2V0KCBlbGVtICk7Ci0gICAgfQotCi0gICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVs
ZW1lbnQ7Ci0KLSAgICAvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5v
ZGUKLSAgICBpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKLSAgICAg
ICAgcmV0dXJuIGJveDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGdCQ1IsIGp1
c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJvcgotICAgIC8vIEJsYWNrQmVycnkgNSwgaU9TIDMg
KG9yaWdpbmFsIGlQaG9uZSkKLSAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7Ci0gICAgfQotICAgIHdpbiA9IGdldFdpbmRvdyggZG9jICk7Ci0gICAgY2xp
ZW50VG9wICA9IGRvY0VsZW0uY2xpZW50VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMDsKLSAg
ICBjbGllbnRMZWZ0ID0gZG9jRWxlbS5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAw
OwotICAgIHNjcm9sbFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3A7
Ci0gICAgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExlZnQ7
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgdG9wOiBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGll
bnRUb3AsCi0gICAgICAgIGxlZnQ6IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQK
LSAgICB9OwotfTsKLQotalF1ZXJ5Lm9mZnNldCA9IHsKLQotICAgIGJvZHlPZmZzZXQ6IGZ1bmN0
aW9uKCBib2R5ICkgewotICAgICAgICB2YXIgdG9wID0gYm9keS5vZmZzZXRUb3AsCi0gICAgICAg
ICAgICBsZWZ0ID0gYm9keS5vZmZzZXRMZWZ0OwotCi0gICAgICAgIGlmICggalF1ZXJ5LnN1cHBv
cnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgKSB7Ci0gICAgICAgICAgICB0b3Ag
ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMDsKLSAg
ICAgICAgICAgIGxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luTGVm
dCIpICkgfHwgMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0
OiBsZWZ0IH07Ci0gICAgfSwKLQotICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlv
bnMsIGkgKSB7Ci0gICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3Np
dGlvbiIgKTsKLQotICAgICAgICAvLyBzZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xl
ZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtCi0gICAgICAgIGlmICggcG9zaXRpb24gPT09
ICJzdGF0aWMiICkgewotICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2
ZSI7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAot
ICAgICAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKSwKLSAgICAgICAgICAgIGN1
ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICksCi0gICAgICAgICAgICBjdXJDU1NM
ZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICksCi0gICAgICAgICAgICBjYWxjdWxhdGVQ
b3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhl
ZCIgKSAmJiBqUXVlcnkuaW5BcnJheSgiYXV0byIsIFtjdXJDU1NUb3AsIGN1ckNTU0xlZnRdKSA+
IC0xLAotICAgICAgICAgICAgcHJvcHMgPSB7fSwgY3VyUG9zaXRpb24gPSB7fSwgY3VyVG9wLCBj
dXJMZWZ0OwotCi0gICAgICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRp
b24gaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBh
YnNvbHV0ZSBvciBmaXhlZAotICAgICAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgewotICAg
ICAgICAgICAgY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBj
dXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7Ci0gICAgICAgICAgICBjdXJMZWZ0ID0gY3VyUG9zaXRp
b24ubGVmdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxv
YXQoIGN1ckNTU1RvcCApIHx8IDA7Ci0gICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCgg
Y3VyQ1NTTGVmdCApIHx8IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBvcHRpb25zICkgKSB7Ci0gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxs
KCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggb3B0aW9u
cy50b3AgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3Ag
LSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBvcHRp
b25zLmxlZnQgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHByb3BzLmxlZnQgPSAoIG9wdGlvbnMu
bGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgICBvcHRpb25zLnVzaW5nLmNh
bGwoIGVsZW0sIHByb3BzICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjdXJFbGVt
LmNzcyggcHJvcHMgKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLQotalF1ZXJ5LmZuLmV4dGVu
ZCh7Ci0KLSAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICggIXRoaXNbMF0g
KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZWxlbSA9
IHRoaXNbMF0sCi0KLSAgICAgICAgLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKLSAgICAgICAg
b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwKLQotICAgICAgICAvLyBHZXQgY29y
cmVjdCBvZmZzZXRzCi0gICAgICAgIG9mZnNldCAgICAgICA9IHRoaXMub2Zmc2V0KCksCi0gICAg
ICAgIHBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/
IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7Ci0KLSAgICAgICAg
Ly8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCi0gICAgICAgIC8vIG5vdGU6IHdoZW4gYW4gZWxl
bWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0Ci0gICAg
ICAgIC8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNv
cnJlY3RseSBiZSAwCi0gICAgICAgIG9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5j
c3MoZWxlbSwgIm1hcmdpblRvcCIpICkgfHwgMDsKLSAgICAgICAgb2Zmc2V0LmxlZnQgLT0gcGFy
c2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVmdCIpICkgfHwgMDsKLQotICAgICAg
ICAvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKLSAgICAgICAgcGFyZW50T2Zmc2V0LnRvcCAg
Kz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJUb3BXaWR0
aCIpICkgfHwgMDsKLSAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1
ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7Ci0KLSAg
ICAgICAgLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCi0gICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCi0gICAgICAgICAg
ICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0Ci0gICAgICAgIH07Ci0gICAg
fSwKLQotICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
Lm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9m
ZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwotICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQ
YXJlbnQgJiYgKCFycm9vdC50ZXN0KG9mZnNldFBhcmVudC5ub2RlTmFtZSkgJiYgalF1ZXJ5LmNz
cyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09PSAic3RhdGljIikgKSB7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsK
LSAgICAgICAgfSk7Ci0gICAgfQotfSk7Ci0KLQotLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNj
cm9sbFRvcCBtZXRob2RzCi1qUXVlcnkuZWFjaCgge3Njcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIs
IHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0In0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7Ci0g
ICAgdmFyIHRvcCA9IC9ZLy50ZXN0KCBwcm9wICk7Ci0KLSAgICBqUXVlcnkuZm5bIG1ldGhvZCBd
ID0gZnVuY3Rpb24oIHZhbCApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMs
IGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHsKLSAgICAgICAgICAgIHZhciB3aW4gPSBn
ZXRXaW5kb3coIGVsZW0gKTsKLQotICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2luID8gKHByb3AgaW4gd2luKSA/IHdpblsgcHJv
cCBdIDoKLSAgICAgICAgICAgICAgICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsg
bWV0aG9kIF0gOgotICAgICAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCB3aW4gKSB7Ci0gICAgICAgICAgICAgICAgd2luLnNj
cm9sbFRvKAotICAgICAgICAgICAgICAgICAgICAhdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5z
Y3JvbGxMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICB0b3AgPyB2YWwgOiBqUXVlcnkoIHdp
biApLnNjcm9sbFRvcCgpCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTsKLSAgICB9
OwotfSk7Ci0KLWZ1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5
LmlzV2luZG93KCBlbGVtICkgPwotICAgICAgICBlbGVtIDoKLSAgICAgICAgZWxlbS5ub2RlVHlw
ZSA9PT0gOSA/Ci0gICAgICAgICAgICBlbGVtLmRlZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2lu
ZG93IDoKLSAgICAgICAgICAgIGZhbHNlOwotfQotLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5l
cldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2Rz
Ci1qUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5j
dGlvbiggbmFtZSwgdHlwZSApIHsKLSAgICBqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiAiaW5uZXIi
ICsgbmFtZSwgY29udGVudDogdHlwZSwgIiI6ICJvdXRlciIgKyBuYW1lIH0sIGZ1bmN0aW9uKCBk
ZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkgewotICAgICAgICAvLyBtYXJnaW4gaXMgb25seSBmb3Ig
b3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKLSAgICAgICAgalF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0g
ZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7Ci0gICAgICAgICAgICB2YXIgY2hhaW5hYmxlID0g
YXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSAi
Ym9vbGVhbiIgKSwKLSAgICAgICAgICAgICAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1h
cmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsK
LQotICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVt
LCB0eXBlLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgZG9jOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGluY29ycmVjdCByZXN1bHRzIGZv
ciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gaXNuJ3Qg
YSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBk
aXNjdXNzaW9uOgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1
ZXJ5L2pxdWVyeS9wdWxsLzc2NAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFtZSBdOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLSAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBv
ciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXN0Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHVuZm9ydHVuYXRlbHksIHRoaXMgY2F1c2VzIGJ1ZyAjMzgzOCBpbiBJRTYv
OCBvbmx5LCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGdvb2QsIHNtYWxsIHdheSB0byBmaXgg
aXQuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1lIF0sIGRvY1sgInNjcm9sbCIgKyBu
YW1lIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJvZmZzZXQiICsgbmFt
ZSBdLCBkb2NbICJvZmZzZXQiICsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9j
WyAiY2xpZW50IiArIG5hbWUgXQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KLSAg
ICAgICAgICAgICAgICAgICAgLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwg
cmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdAotICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKSA6Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOwotICAg
ICAgICAgICAgfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFi
bGUsIG51bGwgKTsKLSAgICAgICAgfTsKLSAgICB9KTsKLX0pOwotLy8gRXhwb3NlIGpRdWVyeSB0
byB0aGUgZ2xvYmFsIG9iamVjdAotd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5Owot
Ci0vLyBFeHBvc2UgalF1ZXJ5IGFzIGFuIEFNRCBtb2R1bGUsIGJ1dCBvbmx5IGZvciBBTUQgbG9h
ZGVycyB0aGF0Ci0vLyB1bmRlcnN0YW5kIHRoZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIG11bHRpcGxl
IHZlcnNpb25zIG9mIGpRdWVyeQotLy8gaW4gYSBwYWdlIHRoYXQgYWxsIG1pZ2h0IGNhbGwgZGVm
aW5lKCkuIFRoZSBsb2FkZXIgd2lsbCBpbmRpY2F0ZQotLy8gdGhleSBoYXZlIHNwZWNpYWwgYWxs
b3dhbmNlcyBmb3IgbXVsdGlwbGUgalF1ZXJ5IHZlcnNpb25zIGJ5Ci0vLyBzcGVjaWZ5aW5nIGRl
ZmluZS5hbWQualF1ZXJ5ID0gdHJ1ZS4gUmVnaXN0ZXIgYXMgYSBuYW1lZCBtb2R1bGUsCi0vLyBz
aW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyIGZpbGVzIHRoYXQgbWF5
IHVzZSBkZWZpbmUsCi0vLyBidXQgbm90IHVzZSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlw
dCB0aGF0IHVuZGVyc3RhbmRzIGFub255bW91cwotLy8gQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1E
IGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Qgd2F5IHRvIHJlZ2lzdGVyLgotLy8gTG93ZXJjYXNl
IGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9t
Ci0vLyBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxv
d2VyY2FzZSBmaWxlIG5hbWUuCi0vLyBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwg
c28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzIHRvIGNhbGwKLS8vIG5vQ29uZmxpY3QgdG8g
aGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuCi1pZiAoIHR5cGVvZiBk
ZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUuYW1kLmpRdWVyeSAp
IHsKLSAgICBkZWZpbmUoICJqcXVlcnkiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4galF1ZXJ5
OyB9ICk7Ci19Ci0KLX0pKCB3aW5kb3cgKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjIvYW5hbHlzaXMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YyL2FuYWx5c2lzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmI4
ODAzYjUwYmIyZDcyMDQ3YzRhYTY3YmYxZmMwNjJhNTEyNzQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjIvYW5hbHlzaXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotQXBwLkFu
YWx5c2lzVGFzayA9IEFwcC5OYW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAgIGF1dGhvcjogRFMu
YXR0cignc3RyaW5nJyksCi0gICAgY3JlYXRlZEF0OiBEUy5hdHRyKCdkYXRlJyksCi0gICAgZm9y
bWF0dGVkQ3JlYXRlZEF0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBmb3JtYXQgPSBkMy50
aW1lLmZvcm1hdCgiJVktJW0tJWQiKTsKLSAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmdldCgn
Y3JlYXRlZEF0JykpOwotICAgIH0ucHJvcGVydHkoJ2NyZWF0ZWRBdCcpLAotICAgIHBsYXRmb3Jt
OiBEUy5iZWxvbmdzVG8oJ3BsYXRmb3JtJyksCi0gICAgbWV0cmljOiBEUy5iZWxvbmdzVG8oJ21l
dHJpYycpLAotICAgIHN0YXJ0UnVuOiBEUy5hdHRyKCdudW1iZXInKSwKLSAgICBlbmRSdW46IERT
LmF0dHIoJ251bWJlcicpLAotICAgIGJ1Z3M6IERTLmhhc01hbnkoJ2J1Z3MnKSwKLSAgICBidWls
ZFJlcXVlc3RDb3VudDogRFMuYXR0cignbnVtYmVyJyksCi0gICAgZmluaXNoZWRCdWlsZFJlcXVl
c3RDb3VudDogRFMuYXR0cignbnVtYmVyJyksCi0gICAgcmVzdWx0OiBEUy5hdHRyKCdzdHJpbmcn
KSwKLSAgICBuZWVkZWQ6IERTLmF0dHIoJ251bWJlcicpLCAvLyBEUy5hdHRyKCdib29sZWFuJykg
dHJlYXRzIG51bGwgYXMgZmFsc2UuCi0gICAgc2F2ZVN0YXR1czogZnVuY3Rpb24gKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBQcml2aWxlZ2VkQVBJLnNlbmRSZXF1ZXN0KCd1cGRhdGUtYW5hbHlz
aXMtdGFzaycsIHsKLSAgICAgICAgICAgIHRhc2s6IHRoaXMuZ2V0KCdpZCcpLAotICAgICAgICAg
ICAgcmVzdWx0OiB0aGlzLmdldCgncmVzdWx0JyksCi0gICAgICAgICAgICBuZWVkZWQ6IHRoaXMu
Z2V0KCduZWVkZWQnKSwKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICBzdGF0dXNMYWJlbDogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuZ2V0KCdidWlsZFJlcXVl
c3RDb3VudCcpOwotICAgICAgICB2YXIgZmluaXNoZWQgPSB0aGlzLmdldCgnZmluaXNoZWRCdWls
ZFJlcXVlc3RDb3VudCcpOwotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5nZXQoJ3Jlc3VsdCcp
OwotICAgICAgICBpZiAocmVzdWx0ICYmIHRvdGFsID09IGZpbmlzaGVkKQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdC5jYXBpdGFsaXplKCk7Ci0gICAgICAgIGlmICghdG90YWwpCi0gICAgICAg
ICAgICByZXR1cm4gJ0VtcHR5JzsKLSAgICAgICAgaWYgKHRvdGFsICE9IGZpbmlzaGVkKQotICAg
ICAgICAgICAgcmV0dXJuIGZpbmlzaGVkICsgJyBvdXQgb2YgJyArIHRvdGFsOwotICAgICAgICBy
ZXR1cm4gJ0RvbmUnOwotICAgIH0ucHJvcGVydHkoJ2J1aWxkUmVxdWVzdENvdW50JywgJ2Zpbmlz
aGVkQnVpbGRSZXF1ZXN0Q291bnQnKSwKLSAgICB0ZXN0R3JvdXBzOiBmdW5jdGlvbiAoa2V5LCB2
YWx1ZSwgb2xkVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5maW5kKCd0
ZXN0R3JvdXAnLCB7dGFzazogdGhpcy5nZXQoJ2lkJyl9KTsKLSAgICB9LnByb3BlcnR5KCksCi0g
ICAgdHJpZ2dlcmFibGU6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5z
dG9yZS5maW5kKCd0cmlnZ2VyYWJsZScsIHt0YXNrOiB0aGlzLmdldCgnaWQnKX0pLnRoZW4oZnVu
Y3Rpb24gKHRyaWdnZXJhYmxlcykgewotICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXJhYmxlcy5v
YmplY3RBdCgwKTsKLSAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAgICAgICAgICBj
b25zb2xlLmxvZygnRmFpbGVkIHRvIGZldGNoIHRyaWdnZXJhYmxlcycsIGVycm9yKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLSAgICB9LnByb3BlcnR5KCksCi0gICAg
bGFiZWw6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLmdldCgn
bmFtZScpOwotICAgICAgICB2YXIgYnVncyA9IHRoaXMuZ2V0KCdidWdzJykubWFwKGZ1bmN0aW9u
IChidWcpIHsgcmV0dXJuIGJ1Zy5nZXQoJ2xhYmVsJyk7IH0pLmpvaW4oJyAvICcpOwotICAgICAg
ICByZXR1cm4gYnVncyA/IGxhYmVsICsgJyAoJyArIGJ1Z3MgKyAnKScgOiBsYWJlbDsKLSAgICB9
LnByb3BlcnR5KCduYW1lJywgJ2J1Z3MnKSwKLX0pOwotCi1BcHAuQnVnID0gQXBwLk1vZGVsLmV4
dGVuZCh7Ci0gICAgdGFzazogRFMuYmVsb25nc1RvKCdBbmFseXNpc1Rhc2snKSwKLSAgICBidWdU
cmFja2VyOiBEUy5iZWxvbmdzVG8oJ0J1Z1RyYWNrZXInKSwKLSAgICBjcmVhdGVkQXQ6IERTLmF0
dHIoJ2RhdGUnKSwKLSAgICBudW1iZXI6IERTLmF0dHIoJ251bWJlcicpLAotICAgIHVybDogZnVu
Y3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2J1Z1RyYWNrZXInKS51cmxGcm9t
QnVnTnVtYmVyKHRoaXMuZ2V0KCdudW1iZXInKSk7Ci0gICAgfS5wcm9wZXJ0eSgnYnVnVHJhY2tl
ci5idWdVcmwnLCAnbnVtYmVyJyksCi0gICAgbGFiZWw6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuZ2V0KCdidWdUcmFja2VyJykuZ2V0KCdsYWJlbCcpICsgJzogJyArIHRoaXMu
Z2V0KCdudW1iZXInKTsKLSAgICB9LnByb3BlcnR5KCduYW1lJywgJ2J1Z1RyYWNrZXInKSwKLX0p
OwotCi0vLyBGSVhNRTogVXNlIERTLlJFU1RBZGFwdGVyIGluc3RlYWQuCi1BcHAuQW5hbHlzaXNU
YXNrLmNyZWF0ZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydE1lYXN1cmVtZW50LCBlbmRNZWFzdXJl
bWVudCkKLXsKLSAgICByZXR1cm4gUHJpdmlsZWdlZEFQSS5zZW5kUmVxdWVzdCgnY3JlYXRlLWFu
YWx5c2lzLXRhc2snLCB7Ci0gICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgIHN0YXJ0UnVuOiBz
dGFydE1lYXN1cmVtZW50LmlkKCksCi0gICAgICAgIGVuZFJ1bjogZW5kTWVhc3VyZW1lbnQuaWQo
KSwKLSAgICB9KTsKLX0KLQotQXBwLkFuYWx5c2lzVGFza0FkYXB0ZXIgPSBEUy5SRVNUQWRhcHRl
ci5leHRlbmQoewotICAgIGJ1aWxkVVJMOiBmdW5jdGlvbiAodHlwZSwgaWQpCi0gICAgewotICAg
ICAgICByZXR1cm4gJy4uL2FwaS9hbmFseXNpcy10YXNrcy8nICsgKGlkID8gaWQgOiAnJyk7Ci0g
ICAgfSwKLX0pOwotCi1BcHAuQnVnQWRhcHRlciA9IERTLlJFU1RBZGFwdGVyLmV4dGVuZCh7Ci0g
ICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbiAoc3RvcmUsIHR5cGUsIHJlY29yZCkKLSAgICB7Ci0g
ICAgICAgIHZhciBwYXJhbSA9IHsKLSAgICAgICAgICAgIHRhc2s6IHJlY29yZC5nZXQoJ3Rhc2sn
KS5nZXQoJ2lkJyksCi0gICAgICAgICAgICBidWdUcmFja2VyOiByZWNvcmQuZ2V0KCdidWdUcmFj
a2VyJykuZ2V0KCdpZCcpLAotICAgICAgICAgICAgbnVtYmVyOiByZWNvcmQuZ2V0KCdudW1iZXIn
KSwKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFByaXZpbGVnZWRBUEkuc2VuZFJlcXVlc3Qo
J2Fzc29jaWF0ZS1idWcnLCBwYXJhbSkudGhlbihmdW5jdGlvbiAoZGF0YSkgewotICAgICAgICAg
ICAgcGFyYW1bJ2lkJ10gPSBkYXRhWydidWdJZCddOwotICAgICAgICAgICAgcmV0dXJuIHsnYnVn
JzogcGFyYW19OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIGRlbGV0ZVJlY29yZDogZnVuY3Rp
b24gKHN0b3JlLCB0eXBlLCByZWNvcmQpCi0gICAgewotICAgICAgICByZXR1cm4gUHJpdmlsZWdl
ZEFQSS5zZW5kUmVxdWVzdCgnYXNzb2NpYXRlLWJ1ZycsIHtidWdUb0RlbGV0ZTogcmVjb3JkLmdl
dCgnaWQnKX0pLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHt9OwotICAg
ICAgICB9KTsKLSAgICB9Ci19KTsKLQotQXBwLlJvb3QgPSBBcHAuTW9kZWwuZXh0ZW5kKHsKLSAg
ICByZXBvc2l0b3J5OiBEUy5iZWxvbmdzVG8oJ3JlcG9zaXRvcnknKSwKLSAgICByZXZpc2lvbjog
RFMuYXR0cignc3RyaW5nJyksCi19KTsKLQotQXBwLlJvb3RTZXQgPSBBcHAuTW9kZWwuZXh0ZW5k
KHsKLSAgICByb290czogRFMuaGFzTWFueSgncm9vdHMnKSwKLSAgICByZXZpc2lvbkZvclJlcG9z
aXRvcnk6IGZ1bmN0aW9uIChyZXBvc2l0b3J5KQotICAgIHsKLSAgICAgICAgdmFyIHJvb3QgPSB0
aGlzLmdldCgncm9vdHMnKS5maW5kQnkoJ3JlcG9zaXRvcnknLCByZXBvc2l0b3J5KTsKLSAgICAg
ICAgaWYgKCFyb290KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBy
b290LmdldCgncmV2aXNpb24nKTsKLSAgICB9Ci19KTsKLQotQXBwLlRlc3RHcm91cCA9IEFwcC5O
YW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAgIHRhc2s6IERTLmJlbG9uZ3NUbygnYW5hbHlzaXNU
YXNrJyksCi0gICAgYXV0aG9yOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICBjcmVhdGVkQXQ6IERT
LmF0dHIoJ2RhdGUnKSwKLSAgICBidWlsZFJlcXVlc3RzOiBEUy5oYXNNYW55KCdidWlsZFJlcXVl
c3RzJyksCi0gICAgcm9vdFNldHM6IERTLmhhc01hbnkoJ3Jvb3RTZXRzJyksCi0gICAgcGxhdGZv
cm06IERTLmJlbG9uZ3NUbygncGxhdGZvcm0nKSwKLSAgICBfZmV0Y2hUZXN0UmVzdWx0czogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciB0YXNrID0gdGhpcy5nZXQoJ3Rhc2snKTsKLSAg
ICAgICAgdmFyIHBsYXRmb3JtID0gdGhpcy5nZXQoJ3BsYXRmb3JtJykgfHwgKHRhc2sgPyB0YXNr
LmdldCgncGxhdGZvcm0nKSA6IG51bGwpCi0gICAgICAgIGlmICghdGFzayB8fCAhcGxhdGZvcm0p
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAg
ICAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmZldGNoUnVuc1dpdGhQbGF0Zm9ybUFuZE1ldHJpYyh0
aGlzLnN0b3JlLAotICAgICAgICAgICAgcGxhdGZvcm0uZ2V0KCdpZCcpLCB0YXNrLmdldCgnbWV0
cmljJykuZ2V0KCdpZCcpLCB0aGlzLmdldCgnaWQnKSkudGhlbigKLSAgICAgICAgICAgIGZ1bmN0
aW9uIChyZXN1bHQpIHsgc2VsZi5zZXQoJ3Rlc3RSZXN1bHRzJywgcmVzdWx0LmRhdGEpOyB9LAot
ICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFNvbWVob3cgdGhpcyBuZXZlciBnZXRzIGNhbGxlZC4KLSAgICAgICAgICAgICAgICBhbGVydCgn
RmFpbGVkIHRvIGZldGNoIHRoZSByZXN1bHRzOicgKyBlcnJvcik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Lm9ic2VydmVzKCd0YXNrJywgJ3Rh
c2sucGxhdGZvcm0nLCAndGFzay5tZXRyaWMnLCAncGxhdGZvcm0nKS5vbignaW5pdCcpLAotfSk7
Ci0KLUFwcC5UZXN0R3JvdXAuY3JlYXRlID0gZnVuY3Rpb24gKGFuYWx5c2lzVGFzaywgbmFtZSwg
cm9vdFNldHMsIHJlcGV0aXRpb25Db3VudCkKLXsKLSAgICB2YXIgcGFyYW0gPSB7Ci0gICAgICAg
IHRhc2s6IGFuYWx5c2lzVGFzay5nZXQoJ2lkJyksCi0gICAgICAgIG5hbWU6IG5hbWUsCi0gICAg
ICAgIHJvb3RTZXRzOiByb290U2V0cywKLSAgICAgICAgcmVwZXRpdGlvbkNvdW50OiByZXBldGl0
aW9uQ291bnQsCi0gICAgfTsKLSAgICByZXR1cm4gUHJpdmlsZWdlZEFQSS5zZW5kUmVxdWVzdCgn
Y3JlYXRlLXRlc3QtZ3JvdXAnLCBwYXJhbSkudGhlbihmdW5jdGlvbiAoZGF0YSkgewotICAgICAg
ICBhbmFseXNpc1Rhc2suc2V0KCd0ZXN0R3JvdXBzJyk7IC8vIFJlZmV0Y2ggdGVzdCBncm91cHMu
Ci0gICAgICAgIHJldHVybiBhbmFseXNpc1Rhc2suc3RvcmUuZmluZCgndGVzdEdyb3VwJywgZGF0
YVsndGVzdEdyb3VwSWQnXSk7Ci0gICAgfSk7Ci19Ci0KLUFwcC5UZXN0R3JvdXBBZGFwdGVyID0g
RFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICBidWlsZFVSTDogZnVuY3Rpb24gKHR5cGUsIGlk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICcuLi9hcGkvdGVzdC1ncm91cHMvJyArIChpZCA/IGlk
IDogJycpOwotICAgIH0sCi19KTsKLQotQXBwLlRyaWdnZXJhYmxlID0gQXBwLk5hbWVMYWJlbE1v
ZGVsLmV4dGVuZCh7Ci0gICAgYWNjZXB0ZWRSZXBvc2l0b3JpZXM6IERTLmhhc01hbnkoJ3JlcG9z
aXRvcmllcycpLAotfSk7Ci0KLUFwcC5UcmlnZ2VyYWJsZUFkYXB0ZXIgPSBEUy5SRVNUQWRhcHRl
ci5leHRlbmQoewotICAgIGJ1aWxkVVJMOiBmdW5jdGlvbiAodHlwZSwgaWQpCi0gICAgewotICAg
ICAgICByZXR1cm4gJy4uL2FwaS90cmlnZ2VyYWJsZXMvJyArIChpZCA/IGlkIDogJycpOwotICAg
IH0sCi19KTsKLQotQXBwLkFuYWx5c2lzVGFza1NlcmlhbGl6ZXIgPSBBcHAuVGVzdEdyb3VwU2Vy
aWFsaXplciA9IEFwcC5UcmlnZ2VyYWJsZVNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5l
eHRlbmQoewotICAgIG5vcm1hbGl6ZVBheWxvYWQ6IGZ1bmN0aW9uIChwYXlsb2FkKQotICAgIHsK
LSAgICAgICAgZGVsZXRlIHBheWxvYWRbJ3N0YXR1cyddOwotICAgICAgICByZXR1cm4gcGF5bG9h
ZDsKLSAgICB9Ci19KTsKLQotQXBwLkJ1aWxkUmVxdWVzdCA9IEFwcC5Nb2RlbC5leHRlbmQoewot
ICAgIHRlc3RHcm91cDogRFMuYmVsb25nc1RvKCd0ZXN0R3JvdXAnKSwKLSAgICBvcmRlcjogRFMu
YXR0cignbnVtYmVyJyksCi0gICAgb3JkZXJMYWJlbDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmdldCgnb3JkZXInKSArIDE7Ci0gICAgfS5wcm9wZXJ0eSgnb3JkZXIn
KSwKLSAgICByb290U2V0OiBEUy5iZWxvbmdzVG8oJ3Jvb3RTZXQnKSwKLSAgICBzdGF0dXM6IERT
LmF0dHIoJ3N0cmluZycpLAotICAgIHN0YXR1c0xhYmVsOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0aGlzLmdldCgnc3RhdHVzJykpIHsKLSAgICAgICAgY2FzZSAncGVuZGlu
Zyc6Ci0gICAgICAgICAgICByZXR1cm4gJ1dhaXRpbmcgdG8gYmUgc2NoZWR1bGVkJzsKLSAgICAg
ICAgY2FzZSAnc2NoZWR1bGVkJzoKLSAgICAgICAgICAgIHJldHVybiAnU2NoZWR1bGVkJzsKLSAg
ICAgICAgY2FzZSAncnVubmluZyc6Ci0gICAgICAgICAgICByZXR1cm4gJ1J1bm5pbmcnOwotICAg
ICAgICBjYXNlICdmYWlsZWQnOgotICAgICAgICAgICAgcmV0dXJuICdGYWlsZWQnOwotICAgICAg
ICBjYXNlICdjb21wbGV0ZWQnOgotICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnOwotICAg
ICAgICB9Ci0gICAgfS5wcm9wZXJ0eSgnc3RhdHVzJyksCi0gICAgdXJsOiBEUy5hdHRyKCdzdHJp
bmcnKSwKLSAgICBidWlsZDogRFMuYXR0cignbnVtYmVyJyksCi19KTsKLQotQXBwLkJ1aWxkUmVx
dWVzdC5hZ2dyZWdhdGVTdGF0dXNlcyA9IGZ1bmN0aW9uIChyZXF1ZXN0cykKLXsKLSAgICB2YXIg
Y29tcGxldGVDb3VudCA9IDA7Ci0gICAgdmFyIGZhaWx1cmVDb3VudCA9IDA7Ci0gICAgcmVxdWVz
dHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdCkgewotICAgICAgICBzd2l0Y2ggKHJlcXVlc3Qu
Z2V0KCdzdGF0dXMnKSkgewotICAgICAgICBjYXNlICdmYWlsZWQnOgotICAgICAgICAgICAgZmFp
bHVyZUNvdW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnY29tcGxldGVk
JzoKLSAgICAgICAgICAgIGNvbXBsZXRlQ291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgaWYgKGNvbXBsZXRlQ291bnQgPT0gcmVxdWVzdHMubGVuZ3Ro
KQotICAgICAgICByZXR1cm4gJ0RvbmUnOwotICAgIGlmIChmYWlsdXJlQ291bnQgPT0gcmVxdWVz
dHMubGVuZ3RoKQotICAgICAgICByZXR1cm4gJ0FsbCBmYWlsZWQnOwotICAgIHZhciBzdGF0dXMg
PSBjb21wbGV0ZUNvdW50ICsgJyBvdXQgb2YgJyArIHJlcXVlc3RzLmxlbmd0aCArICcgY29tcGxl
dGVkJzsKLSAgICBpZiAoZmFpbHVyZUNvdW50KQotICAgICAgICBzdGF0dXMgKz0gJywgJyArIGZh
aWx1cmVDb3VudCArICcgZmFpbGVkJzsKLSAgICByZXR1cm4gc3RhdHVzOwotfQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuY3NzIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMDdiMjdhYzVkMGFhM2VjYzY0NTVjZjkwYjhmMGYxYWQxOWM4YTBjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjIvYXBwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDYwMiArMCwwIEBA
Ci1odG1sIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLWJvZHkgewotICAg
IGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNl
cmlmOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luOiAwIDFyZW07Ci0gICAgbWluLXdpZHRo
OiA2MHJlbTsKLX0KLQotCi0ucG9wdXAgewotICAgIG1hcmdpbjogMDsKLSAgICBwb3NpdGlvbjog
cmVsYXRpdmU7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0ucG9wdXAgaDEgewot
ICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzog
MDsKLX0KLQotLnBvcHVwIC5wb3B1cC1idXR0b24sCi0uY29udHJvbC1idXR0b24sCi0uc3RhcnQt
dGltZS1zbGlkZXIgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBtYXJnaW46IDA7
Ci0gICAgcGFkZGluZzogMDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIGNvbG9yOiAj
NjY2OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0K
LSAgICBib3JkZXI6IHNvbGlkIDFweCAjOTk5OwotICAgIGJvcmRlci1yYWRpdXM6IDAuM3JlbTsK
LSAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtOwotfQotCi0jaGVhZGVyIHVsLmNvbnRyb2xzIGxp
Om5vdCg6Zmlyc3QtY2hpbGQpIC5jb250cm9sLWJ1dHRvbiB7Ci0gICAgYm9yZGVyLWxlZnQ6IG5v
bmU7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKLSAgICBib3JkZXItYm90dG9tLWxl
ZnQtcmFkaXVzOiAwOwotfQotI2hlYWRlciB1bC5jb250cm9scyBsaTpub3QoOmxhc3QtY2hpbGQp
IC5jb250cm9sLWJ1dHRvbiB7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Ci0gICAg
Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7Ci19Ci0KLS5wb3B1cCAucG9wdXAtYnV0dG9u
OmFmdGVyIHsKLSAgICBjb250ZW50OiAiIFwyNUJFIjsKLX0KLQotLnBvcHVwIC5wb3B1cCB7Ci0g
ICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbWFyZ2luOiAwOwotfQotCi0ucG9wdXAgLnBvcHVwIC5w
b3B1cC1idXR0b246YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICIgXDI1QjgiOwotfQotCi0ucG9wdXAg
dWwgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBs
ZWZ0OiAwcmVtOwotICAgIHRvcDogMHJlbTsKLSAgICB6LWluZGV4OiA5OTk7Ci0gICAgYmFja2dy
b3VuZDogI2ZmZjsKLSAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMDMpIDFweCAxcHgg
MTBweCAzcHg7Ci0vKiAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMDMpIDFweCAxcHgg
MHB4IDBweDsqLwotICAgIG1hcmdpbjogMC4ycmVtIDA7Ci0gICAgcGFkZGluZzogMC41cmVtIDA7
Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjOTk5OwotICAg
IGJvcmRlci1yYWRpdXM6IDAuM3JlbTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIHRl
eHQtYWxpZ246IGxlZnQ7Ci19Ci0KLS5wb3B1cCAucG9wdXAgdWwgewotICAgIHRvcDogMHJlbTsK
LSAgICBtYXJnaW46IDA7Ci0gICAgbWFyZ2luLXRvcDogLTAuNXJlbTsKLSAgICBtYXJnaW4tbGVm
dDogLTAuN3JlbTsKLX0KLQotLnBvcHVwIGxpIC5sYWJlbCB7Ci0gICAgZGlzcGxheTogYmxvY2s7
Ci0gICAgZm9udC1zaXplOiAwLjhyZW07Ci0gICAgbWF4LXdpZHRoOiAxNXJlbTsKLSAgICB0ZXh0
LW92ZXJmbG93OiBlbGxpcHNpczsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0ucG9wdXAg
LnBvcHVwIGEgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiBhdXRvOwotICAgIHBh
ZGRpbmc6IDAuMnJlbSAwLjVyZW07Ci0gICAgYm9yZGVyOiBub25lOwotfQotCi0ucG9wdXAgYSB7
Ci0gICAgY29sb3I6ICMzMzM7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotCi0ucG9w
dXAgYTphY3RpdmUsCi0ucG9wdXAgYTpmb2N1cyB7Ci0gICAgYmFja2dyb3VuZDogI2VlZjsKLX0K
LQotLnBvcHVwIGxpOmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kOiAjZWVlOwotfQotCi0KLS5pY29u
LWJ1dHRvbiB7Ci0gICAgd2lkdGg6IDFyZW07Ci0gICAgaGVpZ2h0OiAxcmVtOwotfQotLmljb24t
YnV0dG9uIGcgewotICAgIHN0cm9rZTogI2NjYzsKLSAgICBmaWxsOiAjY2NjOwotfQotLmljb24t
YnV0dG9uOmhvdmVyIGcgewotICAgIHN0cm9rZTogIzY2NjsKLSAgICBmaWxsOiAjNjY2OwotfQot
LmRpc2FibGVkIC5pY29uLWJ1dHRvbjpob3ZlciBnIHsKLSAgICBzdHJva2U6ICNjY2M7Ci0gICAg
ZmlsbDogI2NjYzsKLX0KLQotCi0jaGVhZGVyIHsKLSAgICBtYXJnaW46IDAgMCAxcmVtIDA7Ci0g
ICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKLSAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07Ci0g
ICAgYmFja2dyb3VuZDogI2ZmZjsKLSAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMDUp
IDBweCAxcHggM3B4IDBweDsKLSAgICBib3JkZXItdG9wOiBub25lOwotICAgIGJvcmRlci10b3At
bGVmdC1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Ci0gICAgY29s
b3I6ICM4ODg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0jbmF2aWdhdGlvbiB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0jbmF2aWdhdGlvbiBoMSwKLSNuYXZpZ2F0
aW9uIHVsLAotI25hdmlnYXRpb24gbGksCi0jaGVhZGVyIHVsLmNvbnRyb2xzIHsKLSAgICBtYXJn
aW46IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIGxp
bmUtaGVpZ2h0OiAzcmVtOwotfQotI25hdmlnYXRpb24gYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOwotICAgIGNvbG9yOiBpbmhlcml0OwotfQotI25hdmlnYXRpb24gaDEgewotICAgIGZv
bnQtc2l6ZTogMS4zcmVtOwotICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07Ci0gICAgZGlzcGxheTog
aW5saW5lOwotICAgIGNvbG9yOiAjYzkzOwotfQotI25hdmlnYXRpb24gdWwsCi0jaGVhZGVyIHVs
LmNvbnRyb2xzIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgbGlzdC1zdHlsZTog
bm9uZTsKLX0KLSNuYXZpZ2F0aW9uIHVsIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwot
ICAgIG1hcmdpbi1sZWZ0OiA0cmVtOwotICAgIG1hcmdpbi1yaWdodDogMi41cmVtOwotfQotI2hl
YWRlciB1bC5jb250cm9scyB7Ci0gICAgbWFyZ2luOiAwIDEuNXJlbTsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogdG9wOwotICAgIHBhZGRpbmctdG9wOiAwLjk1cmVtOwotICAgIGZvbnQtc2l6ZTogMC44
cmVtOwotICAgIGxpbmUtaGVpZ2h0OiAxcmVtOwotfQotI25hdmlnYXRpb24gbGksCi0jaGVhZGVy
IHVsLmNvbnRyb2xzID4gbGkgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGZsb2F0OiBsZWZ0
OwotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotfQotI25hdmlnYXRpb24gbGkgYSB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTsKLSAgICBi
b3JkZXItYm90dG9tOiAwcHg7Ci0gICAgYm9yZGVyLXJhZGl1czogMC4zcmVtOwotICAgIGJvcmRl
ci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6
IDA7Ci0gICAgcGFkZGluZzogMC41cmVtOwotICAgIG1hcmdpbjogMDsKLSAgICBsaW5lLWhlaWdo
dDogMXJlbTsKLX0KLSNuYXZpZ2F0aW9uIGxpOm5vdCg6bGFzdC1vZi10eXBlKSBhIHsKLSAgICBi
b3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKLSAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1
czogMDsKLSAgICBib3JkZXItcmlnaHQ6IDA7Ci19Ci0jbmF2aWdhdGlvbiBsaTpub3QoOmZpcnN0
LW9mLXR5cGUpIGEgewotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7Ci0gICAgYm9yZGVy
LWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKLX0KLSNuYXZpZ2F0aW9uIGxpLmFjdGl2ZSBhLAotI2hl
YWRlciB1bC5jb250cm9scyBsaS5hY3RpdmUgLmNvbnRyb2wtYnV0dG9uIHsKLSAgICBib3JkZXIt
Y29sb3I6IGluaGVyaXQ7Ci0gICAgY29sb3I6ICMwMDA7Ci19Ci0KLSNuYXZpZ2F0aW9uIGxpOm5v
dCguYWN0aXZlKSBhOmhvdmVyLAotI25hdmlnYXRpb24gbGk6bm90KC5hY3RpdmUpIGE6YWN0aXZl
LAotI2hlYWRlciB1bC5jb250cm9scyA+IGxpOm5vdCguYWN0aXZlKSA+IGE6aG92ZXIsCi0jaGVh
ZGVyIHVsLmNvbnRyb2xzID4gbGk6bm90KC5hY3RpdmUpID4gYTphY3RpdmUgewotICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOwotfQotCi0KLQotLnN0YXJ0LXRp
bWUtc2xpZGVyIHsKLSAgICBsaW5lLWhlaWdodDogMWVtOwotfQotCi0uc3RhcnQtdGltZS1zbGlk
ZXIgbGFiZWwgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0uc3RhcnQtdGltZS1zbGlkZXIg
aW5wdXQgewotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0gICAgaGVpZ2h0OiAwLjhyZW07
Ci19Ci0KLS5zdGFydC10aW1lLXNsaWRlciAubnVtYmVyT2ZEYXlzIHsKLSAgICBkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgd2lkdGg6IDEuNXJlbTsK
LX0KLQotCi0KLQotLnNwaW5uZXIgewotICAgIHdpZHRoOiAycmVtOwotICAgIGhlaWdodDogMnJl
bTsKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKLX0KLS5zcGlubmVyIGxp
bmUgewotICAgIGFuaW1hdGlvbjogc3Bpbm5lci1hbmltYXRpb24gMS42cyBsaW5lYXIgaW5maW5p
dGU7Ci0gICAgLXdlYmtpdC1hbmltYXRpb246IHNwaW5uZXItYW5pbWF0aW9uIDEuNnMgbGluZWFy
IGluZmluaXRlOwotICAgIG9wYWNpdHk6IDAuMTsKLX0KLS5zcGlubmVyIGxpbmU6bnRoLWNoaWxk
KDApIHsKLSAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC4wczsKLSAgICBhbmltYXRpb24t
ZGVsYXk6IDAuMHM7Ci19Ci0uc3Bpbm5lciBsaW5lOm50aC1jaGlsZCgxKSB7Ci0gICAgLXdlYmtp
dC1hbmltYXRpb24tZGVsYXk6IDAuMnM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjJzOwotfQot
LnNwaW5uZXIgbGluZTpudGgtY2hpbGQoMikgewotICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5
OiAwLjRzOwotICAgIGFuaW1hdGlvbi1kZWxheTogMC40czsKLX0KLS5zcGlubmVyIGxpbmU6bnRo
LWNoaWxkKDMpIHsKLSAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC42czsKLSAgICBhbmlt
YXRpb24tZGVsYXk6IDAuNnM7Ci19Ci0uc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg0KSB7Ci0gICAg
LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuOHM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjhz
OwotfQotLnNwaW5uZXIgbGluZTpudGgtY2hpbGQoNSkgewotICAgIC13ZWJraXQtYW5pbWF0aW9u
LWRlbGF5OiAxczsKLSAgICBhbmltYXRpb24tZGVsYXk6IDFzOwotfQotLnNwaW5uZXIgbGluZTpu
dGgtY2hpbGQoNikgewotICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAxLjJzOwotICAgIGFu
aW1hdGlvbi1kZWxheTogMS4yczsKLX0KLS5zcGlubmVyIGxpbmU6bnRoLWNoaWxkKDcpIHsKLSAg
ICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMS40czsKLSAgICBhbmltYXRpb24tZGVsYXk6IDEu
NHM7Ci19Ci0uc3Bpbm5lciBsaW5lOm50aC1jaGlsZCg4KSB7Ci0gICAgLXdlYmtpdC1hbmltYXRp
b24tZGVsYXk6IDEuNnM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAxLjZzOwotfQotQC13ZWJraXQt
a2V5ZnJhbWVzIHNwaW5uZXItYW5pbWF0aW9uIHsKLSAgICAwJSB7IG9wYWNpdHk6IDAuOTsgfQot
ICAgIDUwJSB7IG9wYWNpdHk6IDAuMTsgfQotICAgIDEwMCUgeyBvcGFjaXR5OiAwLjE7IH0KLX0K
LQotCi10YWJsZS5kYXNoYm9hcmQgewotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0g
ICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKLSAgICBjb2xvcjogIzk5OTsKLSAgICB3aWR0aDogMTAw
JTsKLX0KLQotdGFibGUuZGFzaGJvYXJkIHRoLAotdGFibGUuZGFzaGJvYXJkIHRkIHsKLSAgICBi
b3JkZXI6IHNvbGlkIDBweCAjZDlkOWQ5OwotICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07Ci0g
ICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotdGFi
bGUuZGFzaGJvYXJkIHRoZWFkIHRoLAotdGFibGUuZGFzaGJvYXJkIHRoZWFkIHRkIHsKLSAgICBw
YWRkaW5nOiAwLjVyZW07Ci19Ci0vKgotdGFibGUuZGFzaGJvYXJkIHRoZWFkIHRoOm50aC1jaGls
ZChvZGQpLAotdGFibGUuZGFzaGJvYXJkIHRib2R5IHRkOm50aC1jaGlsZChldmVuKSB7Ci19Ci0q
LwotdGFibGUuZGFzaGJvYXJkIGlucHV0IHsKLSAgICBmb250LXNpemU6IDFyZW07Ci0gICAgd2lk
dGg6IDEycmVtOwotICAgIGhlaWdodDogMXJlbTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0g
ICAgbWFyZ2luOiAwLjVyZW0gMC4zcmVtOwotfQotCi10YWJsZS5kYXNoYm9hcmQgdGggewotICAg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgZm9udC1zaXplOiAxcmVtOwotICAgIHdoaXRlLXNw
YWNlOiBub3dyYXA7Ci0gICAgY29sb3I6ICNmOTY7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZCB0aGVh
ZCB0aCB7Ci0gICAgaGVpZ2h0OiAxcmVtOwotfQotCi10YWJsZS5kYXNoYm9hcmQucmVhZG9ubHkg
dGhlYWQgdGQsCi10YWJsZS5kYXNoYm9hcmQucmVhZG9ubHkgdGJvZHkgdGggewotICAgIHdpZHRo
OiAxcmVtOwotICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07Ci19Ci0KLXRhYmxlLmRhc2hib2Fy
ZCB0Ym9keSB0aCB7Ci0gICAgaGVpZ2h0OiAxMnJlbTsKLX0KLQotdGFibGUuZGFzaGJvYXJkLnJl
YWRvbmx5IHRib2R5IHRoIC5sYWJlbCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxl
ZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgd2lkdGg6IDEy
LjRyZW07Ci0gICAgaGVpZ2h0OiAycmVtOwotICAgIGxpbmUtaGVpZ2h0OiAycmVtOwotICAgIHZl
cnRpY2FsLWFsaWduOiBtaWRkbGU7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtOTBk
ZWcpIHRyYW5zbGF0ZSgtNTAlLCAwKTsKLSAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAg
MDsKLSAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHRyYW5zbGF0ZSgtNTAlLCAwKTsKLSAg
ICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZC5lZGl0TW9kZSBh
IHsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRs
ZTsKLX0KLQotdGFibGUuZGFzaGJvYXJkLmVkaXRNb2RlIHRib2R5IHRoIGEgewotICAgIG1hcmdp
bi1sZWZ0OiAwLjNyZW07Ci19Ci0KLXRhYmxlLmRhc2hib2FyZC5lZGl0TW9kZSBpbnB1dCB7Ci0g
ICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKLSAg
ICBib3JkZXI6IHNvbGlkIDFweCAjOTk5OwotICAgIHBhZGRpbmc6IDAuMnJlbTsKLSAgICBib3Jk
ZXItcmFkaXVzOiAwLjJyZW07Ci19Ci0KLXRhYmxlLmRhc2hib2FyZCB0Ym9keSB0ZCBhLnJlc2V0
IHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwLjVyZW07Ci0gICAgbGVmdDog
MC41cmVtOwotfQotdGFibGUuZGFzaGJvYXJkLmVkaXRNb2RlIHRib2R5IHRkIHsKLSAgICBwYWRk
aW5nLWxlZnQ6IDJyZW07Ci19Ci10YWJsZS5kYXNoYm9hcmQgdGJvZHkgdGQgYS5yZXNldCBzdmcg
ewotICAgIGJhY2tncm91bmQ6IHdoaXRlOwotfQotCi10YWJsZS5kYXNoYm9hcmQgdGJvZHkgdGQg
LmNoYXJ0IHsKLSAgICBib3JkZXI6IHNvbGlkIDBweCAjZGRkOwotICAgIGJvcmRlci1yYWRpdXM6
IDAuNXJlbTsKLSAgICBtYXJnaW46IDAuNXJlbSAwLjVyZW07Ci19Ci0KLXRhYmxlLmRhc2hib2Fy
ZCB0Ym9keSB0ZCAuY2hhcnQsCi10YWJsZS5kYXNoYm9hcmQgdGJvZHkgdGQgLnByb2dyZXNzIHsK
LSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVpZ2h0
OiAxMnJlbTsKLSAgICBsaW5lLWhlaWdodDogMTJyZW07Ci0gICAgdmVydGljYWwtYWxpZ246IG1p
ZGRsZTsKLX0KLQotdGFibGUuZGFzaGJvYXJkIHRib2R5IHRkIC5mYWlsdXJlIHsKLSAgICBkaXNw
bGF5OiB0YWJsZS1jZWxsOwotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTJyZW07Ci0g
ICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQotLmNoYXJ0LXBhbmUsCi0uYW5hbHlzaXMt
Z3JvdXAgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7Ci0gICAgYm9yZGVyLXJhZGl1czog
MC41cmVtOwotICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4wMykgMXB4IDFweCAwcHgg
MHB4OwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKLSAgICBvdXRs
aW5lOiBub25lOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotZm9ybSAuYW5hbHlzaXMt
Z3JvdXAgPiAqIHsKLSAgICBtYXJnaW46IDAuNXJlbTsKLX0KLQotZm9ybSAuYW5hbHlzaXMtZ3Jv
dXAgW25hbWU9Y3VzdG9tVmFsdWVdIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotI2FuYWx5
c2lzLXRhc2tzLAotLmFuYWx5c2lzLWdyb3VwIHRhYmxlIHsKLSAgICBib3JkZXI6IHNvbGlkIDBw
eCAjOTk5OwotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci0KLSNhbmFseXNpcy10
YXNrcyB0aGVhZCwKLS5hbmFseXNpcy1ncm91cCB0YWJsZSB0aGVhZCB7Ci0gICAgY29sb3I6ICNj
OTM7Ci19Ci0KLSNhbmFseXNpcy10YXNrcyB0aCwKLS5hbmFseXNpcy1ncm91cCB0YWJsZSB0aCB7
Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotI2FuYWx5c2lzLXRhc2tzIHRkLAotI2Fu
YWx5c2lzLXRhc2tzIHRoLAotLmFuYWx5c2lzLWdyb3VwIHRhYmxlIHRkLAotLmFuYWx5c2lzLWdy
b3VwIHRhYmxlIHRoIHsKLSAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtOwotfQotCi0jYW5hbHlz
aXMtdGFza3MgLnN0YXR1cywKLSNhbmFseXNpcy10YXNrcyAuYXV0aG9yLAotI2FuYWx5c2lzLXRh
c2tzIC5jcmVhdGVkLWF0LAotI2FuYWx5c2lzLXRhc2tzIC5wbGF0Zm9ybS1uYW1lIHsKLSAgICB3
aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi0jYW5hbHlzaXMtdGFza3MgLnRlc3QtbmFtZSB7Ci19
Ci0KLSNhbmFseXNpcy10YXNrcyB0Ym9keSB0ZCwKLSNhbmFseXNpcy10YXNrcyB0Ym9keSB0aCwK
LS5hbmFseXNpcy1ncm91cCB0YWJsZSB0Ym9keSB0ZCwKLS5hbmFseXNpcy1ncm91cCB0YWJsZSB0
Ym9keSB0aCB7Ci0gICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNkZGQ7Ci19Ci0KLS5hbmFseXNp
cy1ncm91cCB0YWJsZSAuc3VtbWFyeSB0ZCB7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0K
LQotLmFuYWx5c2lzLWdyb3VwIHRhYmxlIHRoZWFkIHRkIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Ci19Ci0KLS5hbmFseXNpcy1ncm91cCB0YWJsZSAuY29uZmlnLWxldHRlciwKLS5hbmFseXNp
cy1ncm91cCB0YWJsZSAuc3VtbWFyeSB7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQotCi0uYW5h
bHlzaXMtZ3JvdXAgLnJlc3VsdHMgLnJlcXVlc3QgLmNvbmZpZy1sZXR0ZXIgewotICAgIGJvcmRl
ci1jb2xvcjogdHJhbnNwYXJlbnQ7Ci19Ci0KLS5hbmFseXNpcy1ncm91cCAucmVzdWx0cyAuaGlk
ZVJlcXVlc3RzIC5yZXF1ZXN0IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0uYW5hbHlzaXMt
Z3JvdXAgLnRhYmxlLWNvbnRhaW5lciB7Ci0gICAgbWFyZ2luOiAwLjVyZW07Ci0gICAgbWFyZ2lu
LXJpZ2h0OiAxOXJlbTsKLSAgICBvdmVyZmxvdzogc2Nyb2xsOwotfQotCi0uYW5hbHlzaXMtZ3Jv
dXAgLnJlZmVyZW5jZS1jaGFydCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDog
MS44cmVtOwotICAgIHJpZ2h0OiAwcmVtOwotICAgIHdpZHRoOiAxOXJlbTsKLSAgICBoZWlnaHQ6
IDVyZW07Ci19Ci0KLS5hbmFseXNpcy1ncm91cCAucmVmZXJlbmNlLWNoYXJ0IC5jaGFydCB7Ci0g
ICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0uYm94LXBsb3QgewotICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogMTAwcHg7Ci0gICAgaGVpZ2h0OiAw
LjZyZW07Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI2RkZDsKLSAgICBwYWRkaW5nOiAxcHg7Ci0g
ICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQotLmJveC1wbG90IC5wZXJjZW50YWdlIHsK
LSAgICBmaWxsOiAjY2NjOwotfQotCi0uYm94LXBsb3QgLmRlbHRhIHsKLSAgICBmaWxsOiAjMzMz
OwotICAgIG9wYWNpdHk6IDAuNTsKLX0KLQotLmJveC1wbG90IHN2ZyB7Ci0gICAgZGlzcGxheTog
YmxvY2s7Ci19Ci0KLSNhbmFseXNpcy10YXNrLXRpdGxlIHsKLSAgICBmb250LXdlaWdodDogbm9y
bWFsOwotICAgIGZvbnQtc2l6ZTogMS4ycmVtOwotICAgIG1hcmdpbjogMCAwIDAgMC41cmVtOwot
ICAgIHBhZGRpbmc6IDA7Ci19Ci0KLSNhbmFseXNpcy10YXNrLXRlc3RuYW1lIHsKLSAgICBmb250
LXdlaWdodDogbm9ybWFsOwotICAgIGZvbnQtc2l6ZTogMXJlbTsKLSAgICBtYXJnaW46IDAgMCAx
cmVtIDAuNXJlbTsKLSAgICBwYWRkaW5nOiAwOwotICAgIGNvbG9yOiAjMzMzOwotfQotCi0uYW5h
bHlzaXMtZ3JvdXAgPiBoMSB7Ci0gICAgZm9udC1zaXplOiAxLjFyZW07Ci0gICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIG1hcmdpbi1ib3R0b206IDAu
NXJlbTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JiYjsKLSAgICBtYXJnaW46IDA7
Ci0gICAgcGFkZGluZzogMC4ycmVtIDAuNXJlbTsKLX0KLQotLmFuYWx5c2lzLWdyb3VwIGgxID4g
aW5wdXQgewotICAgIGZvbnQtc2l6ZTogMXJlbTsKLSAgICBtaW4td2lkdGg6IDIwcmVtOwotICAg
IG1hcmdpbjogMC4ycmVtIDA7Ci19Ci0KLS5hbmFseXNpcy1idWdzIHsKLSAgICBtYXJnaW46IDA7
Ci0gICAgcGFkZGluZzogMDsKLX0KLQotLmFuYWx5c2lzLWJ1Z3MgdGggewotICAgIGZvbnQtd2Vp
Z2h0OiBub3JtYWw7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgd2lkdGg6IDhyZW07Ci19
Ci0KLS5hbmFseXNpcy1idWdzIHRkIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHRl
eHQtYWxpZ246IGxlZnQ7Ci0gICAgZm9udC1zaXplOiAwLjlyZW07Ci19Ci0KLS5hbmFseXNpcy1i
dWdzIC5pY29uLWJ1dHRvbiB7Ci0gICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTsKLSAgICB3aWR0aDog
MC44cmVtOwotICAgIGhlaWdodDogMC44cmVtOwotfQotCi0uYW5hbHlzaXMtYnVncyAuaGlkZGVu
IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92Mi9hcHAuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YyL2FwcC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3ZTZiNmE2NTQ4NjMy
NzBiY2M0ZmExM2Q0YWVmYTEyNDgzMGU2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FwcC5q
cworKysgL2Rldi9udWxsCkBAIC0xLDE4NDggKzAsMCBAQAotd2luZG93LkFwcCA9IEVtYmVyLkFw
cGxpY2F0aW9uLmNyZWF0ZSgpOwotCi1BcHAuUm91dGVyLm1hcChmdW5jdGlvbiAoKSB7Ci0gICAg
dGhpcy5yZXNvdXJjZSgnY3VzdG9tRGFzaGJvYXJkJywge3BhdGg6ICdkYXNoYm9hcmQvY3VzdG9t
J30pOwotICAgIHRoaXMucmVzb3VyY2UoJ2Rhc2hib2FyZCcsIHtwYXRoOiAnZGFzaGJvYXJkLzpu
YW1lJ30pOwotICAgIHRoaXMucmVzb3VyY2UoJ2NoYXJ0cycsIHtwYXRoOiAnY2hhcnRzJ30pOwot
ICAgIHRoaXMucmVzb3VyY2UoJ2FuYWx5c2lzJywge3BhdGg6ICdhbmFseXNpcyd9KTsKLSAgICB0
aGlzLnJlc291cmNlKCdhbmFseXNpc1Rhc2snLCB7cGF0aDogJ2FuYWx5c2lzL3Rhc2svOnRhc2tJ
ZCd9KTsKLX0pOwotCi1BcHAuRGFzaGJvYXJkUm93ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0g
ICAgaGVhZGVyOiBudWxsLAotICAgIGNlbGxzOiBbXSwKLQotICAgIGluaXQ6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB0aGlzLl9zdXBlcigpOwotCi0gICAgICAgIHZhciBjZWxsc0luZm8g
PSB0aGlzLmdldCgnY2VsbHNJbmZvJykgfHwgW107Ci0gICAgICAgIHZhciBjb2x1bW5Db3VudCA9
IHRoaXMuZ2V0KCdjb2x1bW5Db3VudCcpOwotICAgICAgICB3aGlsZSAoY2VsbHNJbmZvLmxlbmd0
aCA8IGNvbHVtbkNvdW50KQotICAgICAgICAgICAgY2VsbHNJbmZvLnB1c2goW10pOwotCi0gICAg
ICAgIHRoaXMuc2V0KCdjZWxscycsIGNlbGxzSW5mby5tYXAodGhpcy5fY3JlYXRlUGFuZS5iaW5k
KHRoaXMpKSk7Ci0gICAgfSwKLSAgICBhZGRQYW5lOiBmdW5jdGlvbiAocGFuZUluZm8pCi0gICAg
ewotICAgICAgICB2YXIgcGFuZSA9IHRoaXMuX2NyZWF0ZVBhbmUocGFuZUluZm8pOwotICAgICAg
ICB0aGlzLmdldCgnY2VsbHMnKS5wdXNoT2JqZWN0KHBhbmUpOwotICAgICAgICB0aGlzLnNldCgn
Y29sdW1uQ291bnQnLCB0aGlzLmdldCgnY29sdW1uQ291bnQnKSArIDEpOwotICAgIH0sCi0gICAg
X2NyZWF0ZVBhbmU6IGZ1bmN0aW9uIChwYW5lSW5mbykKLSAgICB7Ci0gICAgICAgIGlmICghcGFu
ZUluZm8gfHwgIXBhbmVJbmZvLmxlbmd0aCB8fCAoIXBhbmVJbmZvWzBdICYmICFwYW5lSW5mb1sx
XSkpCi0gICAgICAgICAgICBwYW5lSW5mbyA9IG51bGw7Ci0KLSAgICAgICAgdmFyIHBhbmUgPSBB
cHAuUGFuZS5jcmVhdGUoewotICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0KCdzdG9yZScpLAot
ICAgICAgICAgICAgcGxhdGZvcm1JZDogcGFuZUluZm8gPyBwYW5lSW5mb1swXSA6IG51bGwsCi0g
ICAgICAgICAgICBtZXRyaWNJZDogcGFuZUluZm8gPyBwYW5lSW5mb1sxXSA6IG51bGwsCi0gICAg
ICAgICAgICBpbkRhc2hib2FyZDogdHJ1ZQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4g
QXBwLkRhc2hib2FyZFBhbmVQcm94eUZvclBpY2tlci5jcmVhdGUoe2NvbnRlbnQ6IHBhbmV9KTsK
LSAgICB9LAotfSk7Ci0KLUFwcC5EYXNoYm9hcmRQYW5lUHJveHlGb3JQaWNrZXIgPSBFbWJlci5P
YmplY3RQcm94eS5leHRlbmQoewotICAgIF9wbGF0Zm9ybU9yTWV0cmljSWRDaGFuZ2VkOiBmdW5j
dGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBBcHAuYnVp
bGRQb3B1cCh0aGlzLmdldCgnc3RvcmUnKSwgJ2Nob29zZVBhbmUnLCB0aGlzKQotICAgICAgICAg
ICAgLnRoZW4oZnVuY3Rpb24gKHBsYXRmb3JtcykgeyBzZWxmLnNldCgncGlja2VyRGF0YScsIHBs
YXRmb3Jtcyk7IH0pOwotICAgIH0ub2JzZXJ2ZXMoJ3BsYXRmb3JtSWQnLCAnbWV0cmljSWQnKS5v
bignaW5pdCcpLAotICAgIHBhbmVMaXN0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiBB
cHAuZW5jb2RlUHJldHRpZmllZEpTT04oW1t0aGlzLmdldCgncGxhdGZvcm1JZCcpLCB0aGlzLmdl
dCgnbWV0cmljSWQnKSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF1dKTsKLSAgICB9LnBy
b3BlcnR5KCdwbGF0Zm9ybUlkJywgJ21ldHJpY0lkJyksCi19KTsKLQotQXBwLkluZGV4Um91dGUg
PSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgIGJlZm9yZU1vZGVsOiBmdW5jdGlvbiAoKQotICAg
IHsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBBcHAuTWFuaWZlc3QuZmV0Y2go
dGhpcy5zdG9yZSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzZWxmLnRyYW5zaXRp
b25UbygnZGFzaGJvYXJkJywgQXBwLk1hbmlmZXN0LmRlZmF1bHREYXNoYm9hcmROYW1lKCkgfHwg
JycpOwotICAgICAgICB9KTsKLSAgICB9LAotfSk7Ci0KLUFwcC5EYXNoYm9hcmRSb3V0ZSA9IEVt
YmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgbW9kZWw6IGZ1bmN0aW9uIChwYXJhbSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBBcHAuTWFuaWZlc3QuZmV0Y2godGhpcy5zdG9yZSkudGhlbihmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmRhc2hib2FyZEJ5TmFtZShw
YXJhbS5uYW1lKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLX0pOwotCi1BcHAuQ3VzdG9tRGFzaGJv
YXJkUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgIGNvbnRyb2xsZXJOYW1lOiAnZGFz
aGJvYXJkJywKLSAgICBtb2RlbDogZnVuY3Rpb24gKHBhcmFtKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuc3RvcmUuY3JlYXRlUmVjb3JkKCdkYXNoYm9hcmQnLCB7c2VyaWFsaXplZDogcGFy
YW0uZ3JpZH0pOwotICAgIH0sCi0gICAgcmVuZGVyVGVtcGxhdGU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHRoaXMucmVuZGVyKCdkYXNoYm9hcmQnKTsKLSAgICB9Ci19KTsKLQotQXBwLkRh
c2hib2FyZENvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgcXVlcnlQ
YXJhbXM6IFsnZ3JpZCcsICdudW1iZXJPZkRheXMnXSwKLSAgICBoZWFkZXJDb2x1bW5zOiBbXSwK
LSAgICByb3dzOiBbXSwKLSAgICBudW1iZXJPZkRheXM6IDcsCi0gICAgZWRpdE1vZGU6IGZhbHNl
LAotCi0gICAgbW9kZWxDaGFuZ2VkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIGRh
c2hib2FyZCA9IHRoaXMuZ2V0KCdtb2RlbCcpOwotICAgICAgICBpZiAoIWRhc2hib2FyZCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgaGVhZGVyQ29sdW1ucyA9IGRhc2hib2Fy
ZC5nZXQoJ2hlYWRlckNvbHVtbnMnKTsKLSAgICAgICAgdGhpcy5zZXQoJ2hlYWRlckNvbHVtbnMn
LCBoZWFkZXJDb2x1bW5zKTsKLSAgICAgICAgdmFyIGNvbHVtbkNvdW50ID0gaGVhZGVyQ29sdW1u
cy5sZW5ndGg7Ci0gICAgICAgIHRoaXMuc2V0KCdjb2x1bW5Db3VudCcsIGNvbHVtbkNvdW50KTsK
LQotICAgICAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlOwotICAgICAgICB0aGlzLnNldCgncm93
cycsIGRhc2hib2FyZC5nZXQoJ3Jvd3MnKS5tYXAoZnVuY3Rpb24gKHJvd1BhcmFtKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gQXBwLkRhc2hib2FyZFJvdy5jcmVhdGUoewotICAgICAgICAgICAgICAg
IHN0b3JlOiBzdG9yZSwKLSAgICAgICAgICAgICAgICBoZWFkZXI6IHJvd1BhcmFtWzBdLAotICAg
ICAgICAgICAgICAgIGNlbGxzSW5mbzogcm93UGFyYW0uc2xpY2UoMSksCi0gICAgICAgICAgICAg
ICAgY29sdW1uQ291bnQ6IGNvbHVtbkNvdW50LAotICAgICAgICAgICAgfSkKLSAgICAgICAgfSkp
OwotCi0gICAgICAgIHRoaXMuc2V0KCdlbXB0eVJvdycsIG5ldyBBcnJheShjb2x1bW5Db3VudCkp
OwotICAgIH0ub2JzZXJ2ZXMoJ21vZGVsJykub24oJ2luaXQnKSwKLQotICAgIGNvbXB1dGVHcmlk
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgaGVhZGVycyA9IHRoaXMuZ2V0KCdoZWFk
ZXJDb2x1bW5zJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpIHsgcmV0dXJuIGhlYWRlci5sYWJlbDsg
fSk7Ci0gICAgICAgIHZhciB0YWJsZSA9IFtoZWFkZXJzXS5jb25jYXQodGhpcy5nZXQoJ3Jvd3Mn
KS5tYXAoZnVuY3Rpb24gKHJvdykgewotICAgICAgICAgICAgcmV0dXJuIFtyb3cuZ2V0KCdoZWFk
ZXInKV0uY29uY2F0KHJvdy5nZXQoJ2NlbGxzJykubWFwKGZ1bmN0aW9uIChwYW5lKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHBsYXRmb3JtQW5kTWV0cmljID0gW3BhbmUuZ2V0KCdwbGF0Zm9ybUlk
JyksIHBhbmUuZ2V0KCdtZXRyaWNJZCcpXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhdGZv
cm1BbmRNZXRyaWNbMF0gfHwgcGxhdGZvcm1BbmRNZXRyaWNbMV0gPyBwbGF0Zm9ybUFuZE1ldHJp
YyA6IFtdOwotICAgICAgICAgICAgfSkpOwotICAgICAgICB9KSk7Ci0gICAgICAgIHJldHVybiBK
U09OLnN0cmluZ2lmeSh0YWJsZSk7Ci0gICAgfSwKLQotICAgIF9zaGFyZWREb21haW5DaGFuZ2Vk
OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIG51bWJlck9mRGF5cyA9IHRoaXMuZ2V0
KCdudW1iZXJPZkRheXMnKTsKLSAgICAgICAgaWYgKCFudW1iZXJPZkRheXMpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgbnVtYmVyT2ZEYXlzID0gcGFyc2VJbnQobnVtYmVyT2ZEYXlz
KTsKLSAgICAgICAgdmFyIHByZXNlbnQgPSBEYXRlLm5vdygpOwotICAgICAgICB2YXIgcGFzdCA9
IHByZXNlbnQgLSBudW1iZXJPZkRheXMgKiAyNCAqIDM2MDAgKiAxMDAwOwotICAgICAgICB0aGlz
LnNldCgnc2luY2UnLCBwYXN0KTsKLSAgICAgICAgdGhpcy5zZXQoJ3NoYXJlZERvbWFpbicsIFtw
YXN0LCBwcmVzZW50XSk7Ci0gICAgfS5vYnNlcnZlcygnbnVtYmVyT2ZEYXlzJykub24oJ2luaXQn
KSwKLQotICAgIGFjdGlvbnM6IHsKLSAgICAgICAgc2V0TnVtYmVyT2ZEYXlzOiBmdW5jdGlvbiAo
bnVtYmVyT2ZEYXlzKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnNldCgnbnVtYmVyT2ZE
YXlzJywgbnVtYmVyT2ZEYXlzKTsKLSAgICAgICAgfSwKLSAgICAgICAgY2hvb3NlUGFuZTogZnVu
Y3Rpb24gKHBhcmFtKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcGFuZSA9IHBhcmFtLnBv
c2l0aW9uOwotICAgICAgICAgICAgcGFuZS5zZXQoJ3BsYXRmb3JtSWQnLCBwYXJhbS5wbGF0Zm9y
bS5nZXQoJ2lkJykpOwotICAgICAgICAgICAgcGFuZS5zZXQoJ21ldHJpY0lkJywgcGFyYW0ubWV0
cmljLmdldCgnaWQnKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIGFkZENvbHVtbjogZnVuY3Rpb24g
KCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5nZXQoJ2hlYWRlckNvbHVtbnMnKS5wdXNo
T2JqZWN0KHsKLSAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXQoJ25ld0NvbHVtbkhlYWRl
cicpLAotICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmdldCgnaGVhZGVyQ29sdW1ucycpLmxl
bmd0aCwKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhpcy5nZXQoJ3Jvd3MnKS5mb3JF
YWNoKGZ1bmN0aW9uIChyb3cpIHsKLSAgICAgICAgICAgICAgICByb3cuYWRkUGFuZSgpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aGlzLnNldCgnbmV3Q29sdW1uSGVhZGVyJywgbnVs
bCk7Ci0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZUNvbHVtbjogZnVuY3Rpb24gKGluZGV4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmdldCgnaGVhZGVyQ29sdW1ucycpLnJlbW92ZUF0
KGluZGV4KTsKLSAgICAgICAgICAgIHRoaXMuZ2V0KCdyb3dzJykuZm9yRWFjaChmdW5jdGlvbiAo
cm93KSB7Ci0gICAgICAgICAgICAgICAgcm93LmdldCgnY2VsbHMnKS5yZW1vdmVBdChpbmRleCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgYWRkUm93OiBmdW5jdGlvbiAo
KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmdldCgncm93cycpLnB1c2hPYmplY3QoQXBw
LkRhc2hib2FyZFJvdy5jcmVhdGUoewotICAgICAgICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3Jl
LAotICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy5nZXQoJ25ld1Jvd0hlYWRlcicpLAotICAg
ICAgICAgICAgICAgIGNvbHVtbkNvdW50OiB0aGlzLmdldCgnY29sdW1uQ291bnQnKSwKLSAgICAg
ICAgICAgIH0pKTsKLSAgICAgICAgICAgIHRoaXMuc2V0KCduZXdSb3dIZWFkZXInLCBudWxsKTsK
LSAgICAgICAgfSwKLSAgICAgICAgcmVtb3ZlUm93OiBmdW5jdGlvbiAocm93KQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLmdldCgncm93cycpLnJlbW92ZU9iamVjdChyb3cpOwotICAgICAg
ICB9LAotICAgICAgICByZXNldFBhbmU6IGZ1bmN0aW9uIChwYW5lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwYW5lLnNldCgncGxhdGZvcm1JZCcsIG51bGwpOwotICAgICAgICAgICAgcGFuZS5z
ZXQoJ21ldHJpY0lkJywgbnVsbCk7Ci0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZUVkaXRNb2Rl
OiBmdW5jdGlvbiAoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnRvZ2dsZVByb3BlcnR5
KCdlZGl0TW9kZScpOwotICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdlZGl0TW9kZScpKQotICAg
ICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvUm91dGUoJ2Rhc2hib2FyZCcsICdjdXN0b20n
LCB7bmFtZTogbnVsbCwgcXVlcnlQYXJhbXM6IHtncmlkOiB0aGlzLmNvbXB1dGVHcmlkKCl9fSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2dyaWQnLCB0aGlz
LmNvbXB1dGVHcmlkKCkpOwotICAgICAgICB9LAotICAgIH0sCi0KLSAgICBpbml0OiBmdW5jdGlv
biAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgQXBwLk1hbmlmZXN0
LmZldGNoKHRoaXMuZ2V0KCdzdG9yZScpKTsKLSAgICB9Ci19KTsKLQotQXBwLk51bWJlck9mRGF5
c0NvbnRyb2xWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgIGNsYXNzTmFtZXM6IFsnY29u
dHJvbHMnXSwKLSAgICB0ZW1wbGF0ZU5hbWU6ICdudW1iZXItb2YtZGF5cy1jb250cm9scycsCi0g
ICAgZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21h
dGNoaW5nRWxlbWVudHModGhpcy5fcHJldmlvdXNOdW1iZXJPZkRheXNDbGFzcykuYWRkQ2xhc3Mo
J2FjdGl2ZScpOwotICAgIH0sCi0gICAgX251bWJlck9mRGF5c0NoYW5nZWQ6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB0aGlzLl9tYXRjaGluZ0VsZW1lbnRzKHRoaXMuX3ByZXZpb3VzTnVt
YmVyT2ZEYXlzQ2xhc3MpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKLQotICAgICAgICB2YXIgbmV3
TnVtYmVyT2ZEYXlzQ2xhc3MgPSAnbnVtYmVyT2ZEYXlzSXMnICsgdGhpcy5nZXQoJ251bWJlck9m
RGF5cycpOwotICAgICAgICB0aGlzLl9tYXRjaGluZ0VsZW1lbnRzKHRoaXMuX3ByZXZpb3VzTnVt
YmVyT2ZEYXlzQ2xhc3MpLmFkZENsYXNzKCdhY3RpdmUnKTsKLSAgICAgICAgdGhpcy5fcHJldmlv
dXNOdW1iZXJPZkRheXNDbGFzcyA9IG5ld051bWJlck9mRGF5c0NsYXNzOwotICAgIH0ub2JzZXJ2
ZXMoJ251bWJlck9mRGF5cycpLm9uKCdpbml0JyksCi0gICAgX21hdGNoaW5nRWxlbWVudHM6IGZ1
bmN0aW9uIChjbGFzc05hbWUpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0
KCdlbGVtZW50Jyk7Ci0gICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiAk
KFtdKTsKLSAgICAgICAgcmV0dXJuICQoZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNs
YXNzTmFtZSkpOwotICAgIH0KLX0pOwotCi1BcHAuU3RhcnRUaW1lU2xpZGVyVmlldyA9IEVtYmVy
LlZpZXcuZXh0ZW5kKHsKLSAgICB0ZW1wbGF0ZU5hbWU6ICdzdGFydC10aW1lLXNsaWRlcicsCi0g
ICAgY2xhc3NOYW1lczogWydzdGFydC10aW1lLXNsaWRlciddLAotICAgIHN0YXJ0VGltZTogRGF0
ZS5ub3coKSAtIDcgKiAyNCAqIDM2MDAgKiAxMDAwLAotICAgIG9sZGVzdFN0YXJ0VGltZTogbnVs
bCwKLSAgICBfbnVtYmVyT2ZEYXlzVmlldzogbnVsbCwKLSAgICBfc2xpZGVyOiBudWxsLAotICAg
IF9zdGFydFRpbWVJblNsaWRlcjogbnVsbCwKLSAgICBfY3VycmVudE51bWJlck9mRGF5czogbnVs
bCwKLSAgICBfTUlMTElTRUNPTkRTX1BFUl9EQVk6IDI0ICogMzYwMCAqIDEwMDAsCi0KLSAgICBk
aWRJbnNlcnRFbGVtZW50OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5vbGRlc3RT
dGFydFRpbWUgPSBEYXRlLm5vdygpIC0gMzY1ICogMjQgKiAzNjAwICogMTAwMDsKLSAgICAgICAg
dGhpcy5fc2xpZGVyID0gJCh0aGlzLmdldCgnZWxlbWVudCcpKS5maW5kKCdpbnB1dCcpOwotICAg
ICAgICB0aGlzLl9udW1iZXJPZkRheXNWaWV3ID0gJCh0aGlzLmdldCgnZWxlbWVudCcpKS5maW5k
KCcubnVtYmVyT2ZEYXlzJyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlclJhbmdlQ2hhbmdlZCgpOwot
ICAgICAgICB0aGlzLl9zbGlkZXIuY2hhbmdlKHRoaXMuX3NsaWRlck1vdmVkLmJpbmQodGhpcykp
OwotICAgIH0sCi0gICAgX3NsaWRlclJhbmdlQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBtaW5pbXVtTnVtYmVyT2ZEYXlzID0gMTsKLSAgICAgICAgdmFyIG1heGltdW1O
dW1iZXJPZkRheXMgPSB0aGlzLl90aW1lSW5QYXN0VG9OdW1iZXJPZkRheXModGhpcy5nZXQoJ29s
ZGVzdFN0YXJ0VGltZScpKTsKLSAgICAgICAgdmFyIHByZWNpc2lvbiA9IDEwMDA7IC8vIEZJWE1F
OiBDb21wdXRlIHRoaXMgZnJvbSBtYXhpbXVtTnVtYmVyT2ZEYXlzLgotICAgICAgICB2YXIgc2xp
ZGVyID0gdGhpcy5fc2xpZGVyOwotICAgICAgICBzbGlkZXIuYXR0cignbWluJywgTWF0aC5mbG9v
cihNYXRoLmxvZyhNYXRoLm1heCgxLCBtaW5pbXVtTnVtYmVyT2ZEYXlzKSkgKiBwcmVjaXNpb24p
IC8gcHJlY2lzaW9uKTsKLSAgICAgICAgc2xpZGVyLmF0dHIoJ21heCcsIE1hdGguY2VpbChNYXRo
LmxvZyhtYXhpbXVtTnVtYmVyT2ZEYXlzKSAqIHByZWNpc2lvbikgLyBwcmVjaXNpb24pOwotICAg
ICAgICBzbGlkZXIuYXR0cignc3RlcCcsIDEgLyBwcmVjaXNpb24pOwotICAgICAgICB0aGlzLl9z
dGFydFRpbWVDaGFuZ2VkKCk7Ci0gICAgfS5vYnNlcnZlcygnb2xkZXN0U3RhcnRUaW1lJyksCi0g
ICAgX3NsaWRlck1vdmVkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fY3VycmVu
dE51bWJlck9mRGF5cyA9IE1hdGgucm91bmQoTWF0aC5leHAodGhpcy5fc2xpZGVyLnZhbCgpKSk7
Ci0gICAgICAgIHRoaXMuX251bWJlck9mRGF5c1ZpZXcudGV4dCh0aGlzLl9jdXJyZW50TnVtYmVy
T2ZEYXlzKTsKLSAgICAgICAgdGhpcy5fc3RhcnRUaW1lSW5TbGlkZXIgPSB0aGlzLl9udW1iZXJP
ZkRheXNUb1RpbWVJblBhc3QodGhpcy5fY3VycmVudE51bWJlck9mRGF5cyk7Ci0gICAgICAgIHRo
aXMuc2V0KCdzdGFydFRpbWUnLCB0aGlzLl9zdGFydFRpbWVJblNsaWRlcik7Ci0gICAgfSwKLSAg
ICBfc3RhcnRUaW1lQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzdGFy
dFRpbWUgPSB0aGlzLmdldCgnc3RhcnRUaW1lJyk7Ci0gICAgICAgIGlmIChzdGFydFRpbWUgPT0g
dGhpcy5fc3RhcnRUaW1lU2V0QnlTbGlkZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHRoaXMuX2N1cnJlbnROdW1iZXJPZkRheXMgPSB0aGlzLl90aW1lSW5QYXN0VG9OdW1iZXJPZkRh
eXMoc3RhcnRUaW1lKTsKLQotICAgICAgICBpZiAodGhpcy5fc2xpZGVyKSB7Ci0gICAgICAgICAg
ICB0aGlzLl9udW1iZXJPZkRheXNWaWV3LnRleHQodGhpcy5fY3VycmVudE51bWJlck9mRGF5cyk7
Ci0gICAgICAgICAgICB0aGlzLl9zbGlkZXIudmFsKE1hdGgubG9nKHRoaXMuX2N1cnJlbnROdW1i
ZXJPZkRheXMpKTsKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZUluU2xpZGVyID0gc3RhcnRU
aW1lOwotICAgICAgICB9Ci0gICAgfS5vYnNlcnZlcygnc3RhcnRUaW1lJykub24oJ2luaXQnKSwK
LSAgICBfdGltZUluUGFzdFRvTnVtYmVyT2ZEYXlzOiBmdW5jdGlvbiAodGltZUluUGFzdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0g
dGltZUluUGFzdCkgLyB0aGlzLl9NSUxMSVNFQ09ORFNfUEVSX0RBWSkpOwotICAgIH0sCi0gICAg
X251bWJlck9mRGF5c1RvVGltZUluUGFzdDogZnVuY3Rpb24gKG51bWJlck9mRGF5cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbnVtYmVyT2ZEYXlzICogdGhpcy5fTUlMTElT
RUNPTkRTX1BFUl9EQVk7Ci0gICAgfSwKLX0pOwotCi1BcHAuUGFuZSA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoewotICAgIHBsYXRmb3JtSWQ6IG51bGwsCi0gICAgcGxhdGZvcm06IG51bGwsCi0gICAg
bWV0cmljSWQ6IG51bGwsCi0gICAgbWV0cmljOiBudWxsLAotICAgIHNlbGVjdGVkSXRlbTogbnVs
bCwKLSAgICBzZWxlY3RlZFBvaW50czogbnVsbCwKLSAgICBob3ZlcmVkT3JTZWxlY3RlZEl0ZW06
IG51bGwsCi0gICAgc2hvd0Z1bGxZQXhpczogZmFsc2UsCi0gICAgaW5EYXNoYm9hcmQ6IGZhbHNl
LAotICAgIHNlYXJjaENvbW1pdDogZnVuY3Rpb24gKHJlcG9zaXRvcnksIGtleXdvcmQpIHsKLSAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB2YXIgcmVwb3NpdG9yeUlkID0gcmVwb3Np
dG9yeS5nZXQoJ2lkJyk7Ci0gICAgICAgIENvbW1pdExvZ3MuZmV0Y2hDb21taXRzKHJlcG9zaXRv
cnlJZCwgbnVsbCwgbnVsbCwga2V5d29yZCkudGhlbihmdW5jdGlvbiAoY29tbWl0cykgewotICAg
ICAgICAgICAgaWYgKHNlbGYuaXNEZXN0cm95ZWQgfHwgIXNlbGYuZ2V0KCdjaGFydERhdGEnKSB8
fCAhY29tbWl0cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
dmFyIGN1cnJlbnRSdW5zID0gc2VsZi5nZXQoJ2NoYXJ0RGF0YScpLmN1cnJlbnQuc2VyaWVzKCk7
Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRSdW5zLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciBoaWdobGlnaHRlZEl0ZW1zID0ge307Ci0gICAgICAg
ICAgICB2YXIgY29tbWl0SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yICh2YXIgcnVuSW5kZXgg
PSAwOyBydW5JbmRleCA8IGN1cnJlbnRSdW5zLmxlbmd0aCAmJiBjb21taXRJbmRleCA8IGNvbW1p
dHMubGVuZ3RoOyBydW5JbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1lYXN1cmVtZW50
ID0gY3VycmVudFJ1bnNbcnVuSW5kZXhdLm1lYXN1cmVtZW50OwotICAgICAgICAgICAgICAgIHZh
ciBjb21taXRUaW1lID0gbWVhc3VyZW1lbnQuY29tbWl0VGltZUZvclJlcG9zaXRvcnkocmVwb3Np
dG9yeUlkKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbW1pdFRpbWUpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChjb21taXRzW2NvbW1pdEluZGV4
XS50aW1lIDw9IGNvbW1pdFRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJ
dGVtc1ttZWFzdXJlbWVudC5pZCgpXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEluZGV4Kys7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKGNvbW1pdEluZGV4IDwgY29tbWl0cy5sZW5ndGggJiYgY29tbWl0c1tjb21t
aXRJbmRleF0udGltZSA8PSBjb21taXRUaW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNlbGYuc2V0KCdoaWdobGlnaHRlZEl0ZW1zJywgaGlnaGxp
Z2h0ZWRJdGVtcyk7Ci0gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZXBvcnQgZXJyb3JzCi0gICAgICAgICAgICB0aGlzLnNldCgnaGlnaGxpZ2h0ZWRJdGVt
cycsIHt9KTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICBfZmV0Y2g6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSB0aGlzLmdldCgncGxhdGZvcm1JZCcpOwotICAgICAg
ICB2YXIgbWV0cmljSWQgPSB0aGlzLmdldCgnbWV0cmljSWQnKTsKLSAgICAgICAgaWYgKCFwbGF0
Zm9ybUlkICYmICFtZXRyaWNJZCkgewotICAgICAgICAgICAgdGhpcy5zZXQoJ2VtcHR5JywgdHJ1
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5zZXQoJ2Vt
cHR5JywgZmFsc2UpOwotICAgICAgICB0aGlzLnNldCgncGxhdGZvcm0nLCBudWxsKTsKLSAgICAg
ICAgdGhpcy5zZXQoJ2NoYXJ0RGF0YScsIG51bGwpOwotICAgICAgICB0aGlzLnNldCgnbWV0cmlj
JywgbnVsbCk7Ci0gICAgICAgIHRoaXMuc2V0KCdmYWlsdXJlJywgbnVsbCk7Ci0KLSAgICAgICAg
aWYgKCF0aGlzLl9pc1ZhbGlkSWQocGxhdGZvcm1JZCkpCi0gICAgICAgICAgICB0aGlzLnNldCgn
ZmFpbHVyZScsIHBsYXRmb3JtSWQgPyAnSW52YWxpZCBwbGF0Zm9ybSBpZDonICsgcGxhdGZvcm1J
ZCA6ICdQbGF0Zm9ybSBpZCB3YXMgbm90IHNwZWNpZmllZCcpOwotICAgICAgICBlbHNlIGlmICgh
dGhpcy5faXNWYWxpZElkKG1ldHJpY0lkKSkKLSAgICAgICAgICAgIHRoaXMuc2V0KCdmYWlsdXJl
JywgbWV0cmljSWQgPyAnSW52YWxpZCBtZXRyaWMgaWQ6JyArIG1ldHJpY0lkIDogJ01ldHJpYyBp
ZCB3YXMgbm90IHNwZWNpZmllZCcpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBz
ZWxmID0gdGhpczsKLSAgICAgICAgICAgIHZhciB1c2VDYWNoZSA9IHRydWU7Ci0gICAgICAgICAg
ICBBcHAuTWFuaWZlc3QuZmV0Y2hSdW5zV2l0aFBsYXRmb3JtQW5kTWV0cmljKHRoaXMuZ2V0KCdz
dG9yZScpLCBwbGF0Zm9ybUlkLCBtZXRyaWNJZCwgbnVsbCwgdXNlQ2FjaGUpCi0gICAgICAgICAg
ICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdCB8fCAhcmVzdWx0LmRhdGEgfHwgcmVzdWx0LnNob3VsZFJlZmV0Y2gpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnJlZmV0Y2hSdW5zKHBsYXRmb3JtSWQsIG1ldHJpY0lkKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
ZGlkRmV0Y2hSdW5zKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmV0Y2hSdW5zKHBsYXRmb3JtSWQsIG1ldHJpY0lk
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICghdGhpcy5nZXQoJ2luRGFz
aGJvYXJkJykpCi0gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFuYWx5dGljUmFuZ2VzKCk7Ci0g
ICAgICAgIH0KLSAgICB9Lm9ic2VydmVzKCdwbGF0Zm9ybUlkJywgJ21ldHJpY0lkJykub24oJ2lu
aXQnKSwKLSAgICByZWZldGNoUnVuczogZnVuY3Rpb24gKHBsYXRmb3JtSWQsIG1ldHJpY0lkKSB7
Ci0gICAgICAgIGlmICghcGxhdGZvcm1JZCkKLSAgICAgICAgICAgIHBsYXRmb3JtSWQgPSB0aGlz
LmdldCgncGxhdGZvcm0nKS5nZXQoJ2lkJyk7Ci0gICAgICAgIGlmICghbWV0cmljSWQpCi0gICAg
ICAgICAgICBtZXRyaWNJZCA9IHRoaXMuZ2V0KCdtZXRyaWMnKS5nZXQoJ2lkJyk7Ci0gICAgICAg
IEVtYmVyLmFzc2VydCgncmVmZXRjaFJ1bnMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHBs
YXRmb3JtIGFuZCBtZXRyaWMgYXJlIHJlc29sdmVkJywgcGxhdGZvcm1JZCAmJiBtZXRyaWNJZCk7
Ci0KLSAgICAgICAgdmFyIHVzZUNhY2hlID0gZmFsc2U7Ci0gICAgICAgIEFwcC5NYW5pZmVzdC5m
ZXRjaFJ1bnNXaXRoUGxhdGZvcm1BbmRNZXRyaWModGhpcy5nZXQoJ3N0b3JlJyksIHBsYXRmb3Jt
SWQsIG1ldHJpY0lkLCBudWxsLCB1c2VDYWNoZSkKLSAgICAgICAgICAgIC50aGVuKHRoaXMuX2Rp
ZEZldGNoUnVucy5iaW5kKHRoaXMpLCB0aGlzLl9oYW5kbGVGZXRjaEVycm9ycy5iaW5kKHRoaXMs
IHBsYXRmb3JtSWQsIG1ldHJpY0lkKSk7Ci0gICAgfSwKLSAgICBfZGlkRmV0Y2hSdW5zOiBmdW5j
dGlvbiAocmVzdWx0KQotICAgIHsKLSAgICAgICAgdGhpcy5zZXQoJ3BsYXRmb3JtJywgcmVzdWx0
LnBsYXRmb3JtKTsKLSAgICAgICAgdGhpcy5zZXQoJ21ldHJpYycsIHJlc3VsdC5tZXRyaWMpOwot
ICAgICAgICB0aGlzLl9zZXROZXdDaGFydERhdGEocmVzdWx0LmRhdGEpOwotICAgIH0sCi0gICAg
X3Nob3dPdXRsaWVyQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGFy
dERhdGEgPSB0aGlzLmdldCgnY2hhcnREYXRhJyk7Ci0gICAgICAgIGlmIChjaGFydERhdGEpCi0g
ICAgICAgICAgICB0aGlzLl9zZXROZXdDaGFydERhdGEoY2hhcnREYXRhKTsKLSAgICB9Lm9ic2Vy
dmVzKCdzaG93T3V0bGllcicpLAotICAgIF9zZXROZXdDaGFydERhdGE6IGZ1bmN0aW9uIChjaGFy
dERhdGEpCi0gICAgewotICAgICAgICB2YXIgbmV3Q2hhcnREYXRhID0ge307Ci0gICAgICAgIGZv
ciAodmFyIHByb3BlcnR5IGluIGNoYXJ0RGF0YSkKLSAgICAgICAgICAgIG5ld0NoYXJ0RGF0YVtw
cm9wZXJ0eV0gPSBjaGFydERhdGFbcHJvcGVydHldOwotCi0gICAgICAgIHZhciBzaG93T3V0bGll
ciA9IHRoaXMuZ2V0KCdzaG93T3V0bGllcicpOwotICAgICAgICBuZXdDaGFydERhdGEuc2hvd091
dGxpZXIoc2hvd091dGxpZXIpOwotICAgICAgICB0aGlzLnNldCgnY2hhcnREYXRhJywgbmV3Q2hh
cnREYXRhKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTW92aW5nQXZlcmFnZUFuZEVudmVsb3BlKCk7
Ci0KLSAgICAgICAgaWYgKCF0aGlzLmdldCgnYW5vbWFseURldGVjdGlvblN0cmF0ZWdpZXMnKS5m
aWx0ZXJCeSgnZW5hYmxlZCcpLmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodFBv
aW50c01hcmtlZEFzT3V0bGllcihuZXdDaGFydERhdGEpOwotICAgIH0sCi0gICAgX2hpZ2hsaWdo
dFBvaW50c01hcmtlZEFzT3V0bGllcjogZnVuY3Rpb24gKG5ld0NoYXJ0RGF0YSkKLSAgICB7Ci0g
ICAgICAgIHZhciBkYXRhID0gbmV3Q2hhcnREYXRhLmN1cnJlbnQuc2VyaWVzKCk7Ci0gICAgICAg
IHZhciBpdGVtcyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChkYXRhW2ldLm1lYXN1cmVtZW50Lm1hcmtlZE91dGxp
ZXIoKSkKLSAgICAgICAgICAgICAgICBpdGVtc1tkYXRhW2ldLm1lYXN1cmVtZW50LmlkKCldID0g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuc2V0KCdoaWdobGlnaHRlZEl0ZW1zJywg
aXRlbXMpOwotICAgIH0sCi0gICAgX2hhbmRsZUZldGNoRXJyb3JzOiBmdW5jdGlvbiAocGxhdGZv
cm1JZCwgbWV0cmljSWQsIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmICghcmVzdWx0IHx8IHR5
cGVvZihyZXN1bHQpID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuc2V0KCdmYWlsdXJl
JywgJ0ZhaWxlZCB0byBmZXRjaCB0aGUgSlNPTiB3aXRoIGFuIGVycm9yOiAnICsgcmVzdWx0KTsK
LSAgICAgICAgZWxzZSBpZiAoIXJlc3VsdC5wbGF0Zm9ybSkKLSAgICAgICAgICAgIHRoaXMuc2V0
KCdmYWlsdXJlJywgJ0NvdWxkIG5vdCBmaW5kIHRoZSBwbGF0Zm9ybSAiJyArIHBsYXRmb3JtSWQg
KyAnIicpOwotICAgICAgICBlbHNlIGlmICghcmVzdWx0Lm1ldHJpYykKLSAgICAgICAgICAgIHRo
aXMuc2V0KCdmYWlsdXJlJywgJ0NvdWxkIG5vdCBmaW5kIHRoZSBtZXRyaWMgIicgKyBtZXRyaWNJ
ZCArICciJyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuc2V0KCdmYWlsdXJlJywg
J0FuIGludGVybmFsIGVycm9yJyk7Ci0gICAgfSwKLSAgICBmZXRjaEFuYWx5dGljUmFuZ2VzOiBm
dW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSB0aGlzLmdldCgncGxh
dGZvcm1JZCcpOwotICAgICAgICB2YXIgbWV0cmljSWQgPSB0aGlzLmdldCgnbWV0cmljSWQnKTsK
LSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB0aGlzLmdldCgnc3RvcmUnKQotICAg
ICAgICAgICAgLmZpbmRBbGwoJ2FuYWx5c2lzVGFzaycpIC8vIEZJWE1FOiBGZXRjaCBvbmx5IGFu
YWx5c2lzIHRhc2tzIHJlbGV2YW50IGZvciB0aGlzIHBhbmUuCi0gICAgICAgICAgICAudGhlbihm
dW5jdGlvbiAodGFza3MpIHsKLSAgICAgICAgICAgICAgICBzZWxmLnNldCgnYW5hbHl0aWNSYW5n
ZXMnLCB0YXNrcy5maWx0ZXIoZnVuY3Rpb24gKHRhc2spIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRhc2suZ2V0KCdwbGF0Zm9ybScpLmdldCgnaWQnKSA9PSBwbGF0Zm9ybUlkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAmJiB0YXNrLmdldCgnbWV0cmljJykuZ2V0KCdpZCcpID09IG1l
dHJpY0lkCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiB0YXNrLmdldCgnc3RhcnRSdW4nKSAm
JiB0YXNrLmdldCgnZW5kUnVuJyk7Ci0gICAgICAgICAgICAgICAgfSkpOwotICAgICAgICAgICAg
fSk7Ci0gICAgfSwKLSAgICByYW5nZXM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIg
Y2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoIWNoYXJ0RGF0
YSB8fCAhY2hhcnREYXRhLnVuZmlsdGVyZWRDdXJyZW50VGltZVNlcmllcykKLSAgICAgICAgICAg
IHJldHVybiBbXTsKLQotICAgICAgICBmdW5jdGlvbiBtaWRQb2ludChmaXJzdFBvaW50LCBzZWNv
bmRQb2ludCkgewotICAgICAgICAgICAgaWYgKGZpcnN0UG9pbnQgJiYgc2Vjb25kUG9pbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuICgrZmlyc3RQb2ludC50aW1lICsgK3NlY29uZFBvaW50LnRp
bWUpIC8gMjsKLSAgICAgICAgICAgIGlmIChmaXJzdFBvaW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmaXJzdFBvaW50LnRpbWU7Ci0gICAgICAgICAgICByZXR1cm4gc2Vjb25kUG9pbnQudGlt
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0aW1lU2VyaWVzID0gY2hhcnREYXRhLnVuZmls
dGVyZWRDdXJyZW50VGltZVNlcmllczsKLSAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZ2V0V2l0
aERlZmF1bHQoJ2FuYWx5dGljUmFuZ2VzJywgW10pOwotICAgICAgICB2YXIgdGVzdHJhbmdlcyA9
IHRoaXMuZ2V0V2l0aERlZmF1bHQoJ3Rlc3RSYW5nZUNhbmRpZGF0ZXMnLCBbXSk7Ci0gICAgICAg
IHJldHVybiB0aGlzLmdldFdpdGhEZWZhdWx0KCdhbmFseXRpY1JhbmdlcycsIFtdKS5jb25jYXQo
dGhpcy5nZXRXaXRoRGVmYXVsdCgndGVzdFJhbmdlQ2FuZGlkYXRlcycsIFtdKSkubWFwKGZ1bmN0
aW9uIChyYW5nZSkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGltZVNlcmllcy5maW5kUG9p
bnRCeU1lYXN1cmVtZW50SWQocmFuZ2UuZ2V0KCdzdGFydFJ1bicpKTsKLSAgICAgICAgICAgIHZh
ciBlbmQgPSB0aW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZChyYW5nZS5nZXQoJ2Vu
ZFJ1bicpKTsKLQotICAgICAgICAgICAgcmV0dXJuIEVtYmVyLk9iamVjdFByb3h5LmNyZWF0ZSh7
Ci0gICAgICAgICAgICAgICAgY29udGVudDogcmFuZ2UsCi0gICAgICAgICAgICAgICAgc3RhcnRU
aW1lOiBzdGFydCA/IG1pZFBvaW50KHRpbWVTZXJpZXMucHJldmlvdXNQb2ludChzdGFydCksIHN0
YXJ0KSA6IG51bGwsCi0gICAgICAgICAgICAgICAgZW5kVGltZTogZW5kID8gbWlkUG9pbnQoZW5k
LCB0aW1lU2VyaWVzLm5leHRQb2ludChlbmQpKSA6IG51bGwsCi0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSk7Ci0gICAgfS5wcm9wZXJ0eSgnY2hhcnREYXRhJywgJ2FuYWx5dGljUmFuZ2VzJywg
J3Rlc3RSYW5nZUNhbmRpZGF0ZXMnKSwKLSAgICBfaXNWYWxpZElkOiBmdW5jdGlvbiAoaWQpCi0g
ICAgewotICAgICAgICBpZiAodHlwZW9mKGlkKSA9PSAibnVtYmVyIikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAodHlwZW9mKGlkKSA9PSAic3RyaW5nIikKLSAgICAgICAg
ICAgIHJldHVybiAhIWlkLm1hdGNoKC9eW0EtWmEtejAtOV9dKyQvKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0sCi0gICAgY29tcHV0ZVN0YXR1czogZnVuY3Rpb24gKGN1cnJlbnRQb2lu
dCwgcHJldmlvdXNQb2ludCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlzLmdl
dCgnY2hhcnREYXRhJyk7Ci0gICAgICAgIHZhciBkaWZmRnJvbUJhc2VsaW5lID0gdGhpcy5fcmVs
YXRpdmVEaWZmZXJlbnRUb0xhdGVyUG9pbnRJblRpbWVTZXJpZXMoY3VycmVudFBvaW50LCBjaGFy
dERhdGEuYmFzZWxpbmUpOwotICAgICAgICB2YXIgZGlmZkZyb21UYXJnZXQgPSB0aGlzLl9yZWxh
dGl2ZURpZmZlcmVudFRvTGF0ZXJQb2ludEluVGltZVNlcmllcyhjdXJyZW50UG9pbnQsIGNoYXJ0
RGF0YS50YXJnZXQpOwotCi0gICAgICAgIHZhciBsYWJlbCA9ICcnOwotICAgICAgICB2YXIgY2xh
c3NOYW1lID0gJyc7Ci0gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBkMy5mb3JtYXQoJy4zcCcpOwot
Ci0gICAgICAgIGZ1bmN0aW9uIGxhYmVsRm9yRGlmZihkaWZmLCBuYW1lKSB7IHJldHVybiBmb3Jt
YXR0ZXIoTWF0aC5hYnMoZGlmZikpICsgJyAnICsgKGRpZmYgPiAwID8gJ2Fib3ZlJyA6ICdiZWxv
dycpICsgJyAnICsgbmFtZTsgfQotCi0gICAgICAgIHZhciBzbWFsbGVySXNCZXR0ZXIgPSBjaGFy
dERhdGEuc21hbGxlcklzQmV0dGVyOwotICAgICAgICBpZiAoZGlmZkZyb21CYXNlbGluZSAhPT0g
dW5kZWZpbmVkICYmIGRpZmZGcm9tVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAg
IGlmIChkaWZmRnJvbUJhc2VsaW5lID4gMCA9PSBzbWFsbGVySXNCZXR0ZXIpIHsKLSAgICAgICAg
ICAgICAgICBsYWJlbCA9IGxhYmVsRm9yRGlmZihkaWZmRnJvbUJhc2VsaW5lLCAnYmFzZWxpbmUn
KTsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnd29yc2UnOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChkaWZmRnJvbVRhcmdldCA8IDAgPT0gc21hbGxlcklzQmV0dGVyKSB7Ci0gICAgICAg
ICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlmZkZyb21CYXNlbGluZSwgJ3RhcmdldCcp
OwotICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdiZXR0ZXInOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgbGFiZWwgPSBmb3JtYXR0ZXIoTWF0aC5hYnMoZGlmZkZyb21U
YXJnZXQpKSArICcgdW50aWwgdGFyZ2V0JzsKLSAgICAgICAgfSBlbHNlIGlmIChkaWZmRnJvbUJh
c2VsaW5lICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIGxhYmVsID0gbGFiZWxGb3JEaWZm
KGRpZmZGcm9tQmFzZWxpbmUsICdiYXNlbGluZScpOwotICAgICAgICAgICAgaWYgKGRpZmZGcm9t
QmFzZWxpbmUgPiAwID09IHNtYWxsZXJJc0JldHRlcikKLSAgICAgICAgICAgICAgICBjbGFzc05h
bWUgPSAnd29yc2UnOwotICAgICAgICB9IGVsc2UgaWYgKGRpZmZGcm9tVGFyZ2V0ICE9PSB1bmRl
ZmluZWQpIHsKLSAgICAgICAgICAgIGxhYmVsID0gbGFiZWxGb3JEaWZmKGRpZmZGcm9tVGFyZ2V0
LCAndGFyZ2V0Jyk7Ci0gICAgICAgICAgICBpZiAoZGlmZkZyb21UYXJnZXQgPCAwID09IHNtYWxs
ZXJJc0JldHRlcikKLSAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnYmV0dGVyJzsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB2YWx1ZURlbHRhID0gbnVsbDsKLSAgICAgICAgdmFyIHJlbGF0
aXZlRGVsdGEgPSBudWxsOwotICAgICAgICBpZiAocHJldmlvdXNQb2ludCkgewotICAgICAgICAg
ICAgdmFsdWVEZWx0YSA9IGNoYXJ0RGF0YS5kZWx0YUZvcm1hdHRlcihjdXJyZW50UG9pbnQudmFs
dWUgLSBwcmV2aW91c1BvaW50LnZhbHVlKTsKLSAgICAgICAgICAgIHJlbGF0aXZlRGVsdGEgPSBk
My5mb3JtYXQoJysuMnAnKSgoY3VycmVudFBvaW50LnZhbHVlIC0gcHJldmlvdXNQb2ludC52YWx1
ZSkgLyBwcmV2aW91c1BvaW50LnZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsCi0gICAgICAgICAgICBsYWJlbDogbGFi
ZWwsCi0gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNoYXJ0RGF0YS5mb3JtYXR0ZXIoY3VycmVu
dFBvaW50LnZhbHVlKSwKLSAgICAgICAgICAgIHZhbHVlRGVsdGE6IHZhbHVlRGVsdGEsCi0gICAg
ICAgICAgICByZWxhdGl2ZURlbHRhOiByZWxhdGl2ZURlbHRhLAotICAgICAgICB9OwotICAgIH0s
Ci0gICAgX3JlbGF0aXZlRGlmZmVyZW50VG9MYXRlclBvaW50SW5UaW1lU2VyaWVzOiBmdW5jdGlv
biAoY3VycmVudFBvaW50LCB0aW1lU2VyaWVzKQotICAgIHsKLSAgICAgICAgaWYgKCFjdXJyZW50
UG9pbnQgfHwgIXRpbWVTZXJpZXMpCi0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0g
ICAgICAgIHZhciByZWZlcmVuY2VQb2ludCA9IHRpbWVTZXJpZXMuZmluZFBvaW50QWZ0ZXJUaW1l
KGN1cnJlbnRQb2ludC50aW1lKTsKLSAgICAgICAgaWYgKCFyZWZlcmVuY2VQb2ludCkKLSAgICAg
ICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0KLSAgICAgICAgcmV0dXJuIChjdXJyZW50UG9pbnQu
dmFsdWUgLSByZWZlcmVuY2VQb2ludC52YWx1ZSkgLyByZWZlcmVuY2VQb2ludC52YWx1ZTsKLSAg
ICB9LAotICAgIGxhdGVzdFN0YXR1czogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBj
aGFydERhdGEgPSB0aGlzLmdldCgnY2hhcnREYXRhJyk7Ci0gICAgICAgIGlmICghY2hhcnREYXRh
IHx8ICFjaGFydERhdGEuY3VycmVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAg
ICAgIHZhciBsYXN0UG9pbnQgPSBjaGFydERhdGEuY3VycmVudC5sYXN0UG9pbnQoKTsKLSAgICAg
ICAgaWYgKCFsYXN0UG9pbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBy
ZXR1cm4gdGhpcy5jb21wdXRlU3RhdHVzKGxhc3RQb2ludCwgY2hhcnREYXRhLmN1cnJlbnQucHJl
dmlvdXNQb2ludChsYXN0UG9pbnQpKTsKLSAgICB9LnByb3BlcnR5KCdjaGFydERhdGEnKSwKLSAg
ICB1cGRhdGVTdGF0aXN0aWNzVG9vbHM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIg
bW92aW5nQXZlcmFnZVN0cmF0ZWdpZXMgPSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5Nb3ZpbmdBdmVy
YWdlU3RyYXRlZ2llcy5tYXAodGhpcy5fY2xvbmVTdHJhdGVneS5iaW5kKHRoaXMpKTsKLSAgICAg
ICAgdGhpcy5zZXQoJ21vdmluZ0F2ZXJhZ2VTdHJhdGVnaWVzJywgW3tsYWJlbDogJ05vbmUnfV0u
Y29uY2F0KG1vdmluZ0F2ZXJhZ2VTdHJhdGVnaWVzKSk7Ci0gICAgICAgIHRoaXMuc2V0KCdjaG9z
ZW5Nb3ZpbmdBdmVyYWdlU3RyYXRlZ3knLCB0aGlzLl9jb25maWd1cmVTdHJhdGVneShtb3ZpbmdB
dmVyYWdlU3RyYXRlZ2llcywgdGhpcy5nZXQoJ21vdmluZ0F2ZXJhZ2VDb25maWcnKSkpOwotCi0g
ICAgICAgIHZhciBlbnZlbG9waW5nU3RyYXRlZ2llcyA9IFN0YXRpc3RpY3NTdHJhdGVnaWVzLkVu
dmVsb3BpbmdTdHJhdGVnaWVzLm1hcCh0aGlzLl9jbG9uZVN0cmF0ZWd5LmJpbmQodGhpcykpOwot
ICAgICAgICB0aGlzLnNldCgnZW52ZWxvcGluZ1N0cmF0ZWdpZXMnLCBbe2xhYmVsOiAnTm9uZSd9
XS5jb25jYXQoZW52ZWxvcGluZ1N0cmF0ZWdpZXMpKTsKLSAgICAgICAgdGhpcy5zZXQoJ2Nob3Nl
bkVudmVsb3BpbmdTdHJhdGVneScsIHRoaXMuX2NvbmZpZ3VyZVN0cmF0ZWd5KGVudmVsb3BpbmdT
dHJhdGVnaWVzLCB0aGlzLmdldCgnZW52ZWxvcGluZ0NvbmZpZycpKSk7Ci0KLSAgICAgICAgdmFy
IHRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWdpZXMgPSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5UZXN0
UmFuZ2VTZWxlY3Rpb25TdHJhdGVnaWVzLm1hcCh0aGlzLl9jbG9uZVN0cmF0ZWd5LmJpbmQodGhp
cykpOwotICAgICAgICB0aGlzLnNldCgndGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ2llcycsIFt7
bGFiZWw6ICdOb25lJ31dLmNvbmNhdCh0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVnaWVzKSk7Ci0g
ICAgICAgIHRoaXMuc2V0KCdjaG9zZW5UZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneScsIHRoaXMu
X2NvbmZpZ3VyZVN0cmF0ZWd5KHRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWdpZXMsIHRoaXMuZ2V0
KCd0ZXN0UmFuZ2VTZWxlY3Rpb25Db25maWcnKSkpOwotCi0gICAgICAgIHZhciBhbm9tYWx5RGV0
ZWN0aW9uU3RyYXRlZ2llcyA9IFN0YXRpc3RpY3NTdHJhdGVnaWVzLkFub21hbHlEZXRlY3Rpb25T
dHJhdGVneS5tYXAodGhpcy5fY2xvbmVTdHJhdGVneS5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhp
cy5zZXQoJ2Fub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzJywgYW5vbWFseURldGVjdGlvblN0cmF0
ZWdpZXMpOwotICAgIH0ub24oJ2luaXQnKSwKLSAgICBfY2xvbmVTdHJhdGVneTogZnVuY3Rpb24g
KHN0cmF0ZWd5KQotICAgIHsKLSAgICAgICAgdmFyIHBhcmFtZXRlckxpc3QgPSAoc3RyYXRlZ3ku
cGFyYW1ldGVyTGlzdCB8fCBbXSkubWFwKGZ1bmN0aW9uIChwYXJhbSkgeyByZXR1cm4gRW1iZXIu
T2JqZWN0LmNyZWF0ZShwYXJhbSk7IH0pOwotICAgICAgICByZXR1cm4gRW1iZXIuT2JqZWN0LmNy
ZWF0ZSh7Ci0gICAgICAgICAgICBpZDogc3RyYXRlZ3kuaWQsCi0gICAgICAgICAgICBsYWJlbDog
c3RyYXRlZ3kubGFiZWwsCi0gICAgICAgICAgICBpc1NlZ21lbnRhdGlvbjogc3RyYXRlZ3kuaXNT
ZWdtZW50YXRpb24sCi0gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyYXRlZ3kuZGVzY3JpcHRp
b24sCi0gICAgICAgICAgICBwYXJhbWV0ZXJMaXN0OiBwYXJhbWV0ZXJMaXN0LAotICAgICAgICAg
ICAgZXhlY3V0ZTogc3RyYXRlZ3kuZXhlY3V0ZSwKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICBf
Y29uZmlndXJlU3RyYXRlZ3k6IGZ1bmN0aW9uIChzdHJhdGVnaWVzLCBjb25maWcpCi0gICAgewot
ICAgICAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnWzBdKQotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0KLSAgICAgICAgdmFyIGlkID0gY29uZmlnWzBdOwotICAgICAgICB2YXIgY2hvc2VuU3Ry
YXRlZ3kgPSBzdHJhdGVnaWVzLmZpbmQoZnVuY3Rpb24gKHN0cmF0ZWd5KSB7IHJldHVybiBzdHJh
dGVneS5pZCA9PSBpZCB9KTsKLSAgICAgICAgaWYgKCFjaG9zZW5TdHJhdGVneSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGlmIChjaG9zZW5TdHJhdGVneS5wYXJhbWV0ZXJM
aXN0KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob3NlblN0cmF0ZWd5LnBh
cmFtZXRlckxpc3QubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgY2hvc2VuU3RyYXRlZ3ku
cGFyYW1ldGVyTGlzdFtpXS52YWx1ZSA9IHBhcnNlRmxvYXQoY29uZmlnW2kgKyAxXSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gY2hvc2VuU3RyYXRlZ3k7Ci0gICAgfSwKLSAgICBfdXBk
YXRlTW92aW5nQXZlcmFnZUFuZEVudmVsb3BlOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAg
dmFyIGNoYXJ0RGF0YSA9IHRoaXMuZ2V0KCdjaGFydERhdGEnKTsKLSAgICAgICAgaWYgKCFjaGFy
dERhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG1vdmluZ0F2ZXJhZ2VT
dHJhdGVneSA9IHRoaXMuZ2V0KCdjaG9zZW5Nb3ZpbmdBdmVyYWdlU3RyYXRlZ3knKTsKLSAgICAg
ICAgdGhpcy5fdXBkYXRlU3RyYXRlZ3lDb25maWdJZk5lZWRlZChtb3ZpbmdBdmVyYWdlU3RyYXRl
Z3ksICdtb3ZpbmdBdmVyYWdlQ29uZmlnJyk7Ci0KLSAgICAgICAgdmFyIGVudmVsb3BpbmdTdHJh
dGVneSA9IHRoaXMuZ2V0KCdjaG9zZW5FbnZlbG9waW5nU3RyYXRlZ3knKTsKLSAgICAgICAgdGhp
cy5fdXBkYXRlU3RyYXRlZ3lDb25maWdJZk5lZWRlZChlbnZlbG9waW5nU3RyYXRlZ3ksICdlbnZl
bG9waW5nQ29uZmlnJyk7Ci0KLSAgICAgICAgdmFyIHRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWd5
ID0gdGhpcy5nZXQoJ2Nob3NlblRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWd5Jyk7Ci0gICAgICAg
IHRoaXMuX3VwZGF0ZVN0cmF0ZWd5Q29uZmlnSWZOZWVkZWQodGVzdFJhbmdlU2VsZWN0aW9uU3Ry
YXRlZ3ksICd0ZXN0UmFuZ2VTZWxlY3Rpb25Db25maWcnKTsKLQotICAgICAgICB2YXIgYW5vbWFs
eURldGVjdGlvblN0cmF0ZWdpZXMgPSB0aGlzLmdldCgnYW5vbWFseURldGVjdGlvblN0cmF0ZWdp
ZXMnKS5maWx0ZXJCeSgnZW5hYmxlZCcpOwotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY29t
cHV0ZU1vdmluZ0F2ZXJhZ2VBbmRPdXRsaWVycyhjaGFydERhdGEsIG1vdmluZ0F2ZXJhZ2VTdHJh
dGVneSwgZW52ZWxvcGluZ1N0cmF0ZWd5LCB0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgYW5v
bWFseURldGVjdGlvblN0cmF0ZWdpZXMpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBjaGFydERhdGEubW92aW5nQXZlcmFnZSA9IHJlc3VsdC5t
b3ZpbmdBdmVyYWdlOwotICAgICAgICB0aGlzLnNldCgnaGlnaGxpZ2h0ZWRJdGVtcycsIHJlc3Vs
dC5hbm9tYWxpZXMpOwotICAgICAgICB2YXIgY3VycmVudFRpbWVTZXJpZXNEYXRhID0gY2hhcnRE
YXRhLmN1cnJlbnQuc2VyaWVzKCk7Ci0gICAgICAgIHRoaXMuc2V0KCd0ZXN0UmFuZ2VDYW5kaWRh
dGVzJywgcmVzdWx0LnRlc3RSYW5nZUNhbmRpZGF0ZXMubWFwKGZ1bmN0aW9uIChyYW5nZSkgewot
ICAgICAgICAgICAgcmV0dXJuIEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgICAg
IHN0YXJ0UnVuOiBjdXJyZW50VGltZVNlcmllc0RhdGFbcmFuZ2VbMF1dLm1lYXN1cmVtZW50Lmlk
KCksCi0gICAgICAgICAgICAgICAgZW5kUnVuOiBjdXJyZW50VGltZVNlcmllc0RhdGFbcmFuZ2Vb
MV1dLm1lYXN1cmVtZW50LmlkKCksCi0gICAgICAgICAgICAgICAgc3RhdHVzOiAndGVzdGluZ1Jh
bmdlJywKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KSk7Ci0gICAgfSwKLSAgICBfbW92aW5n
QXZlcmFnZU9yRW52ZWxvcGVTdHJhdGVneURpZENoYW5nZTogZnVuY3Rpb24gKCkgewotICAgICAg
ICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoIWNo
YXJ0RGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fc2V0TmV3Q2hhcnRE
YXRhKGNoYXJ0RGF0YSk7Ci0gICAgfS5vYnNlcnZlcygnY2hvc2VuTW92aW5nQXZlcmFnZVN0cmF0
ZWd5JywgJ2Nob3Nlbk1vdmluZ0F2ZXJhZ2VTdHJhdGVneS5wYXJhbWV0ZXJMaXN0LkBlYWNoLnZh
bHVlJywKLSAgICAgICAgJ2Nob3NlbkVudmVsb3BpbmdTdHJhdGVneScsICdjaG9zZW5FbnZlbG9w
aW5nU3RyYXRlZ3kucGFyYW1ldGVyTGlzdC5AZWFjaC52YWx1ZScsCi0gICAgICAgICdjaG9zZW5U
ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneScsICdjaG9zZW5UZXN0UmFuZ2VTZWxlY3Rpb25TdHJh
dGVneS5wYXJhbWV0ZXJMaXN0LkBlYWNoLnZhbHVlJywKLSAgICAgICAgJ2Fub21hbHlEZXRlY3Rp
b25TdHJhdGVnaWVzLkBlYWNoLmVuYWJsZWQnKSwKLSAgICBfY29tcHV0ZU1vdmluZ0F2ZXJhZ2VB
bmRPdXRsaWVyczogZnVuY3Rpb24gKGNoYXJ0RGF0YSwgbW92aW5nQXZlcmFnZVN0cmF0ZWd5LCBl
bnZlbG9waW5nU3RyYXRlZ3ksIHRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LCBhbm9tYWx5RGV0
ZWN0aW9uU3RyYXRlZ2llcykKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50VGltZVNlcmllc0Rh
dGEgPSBjaGFydERhdGEuY3VycmVudC5zZXJpZXMoKTsKLQotICAgICAgICB2YXIgcmF3VmFsdWVz
ID0gY2hhcnREYXRhLmN1cnJlbnQucmF3VmFsdWVzKCk7Ci0gICAgICAgIHZhciBtb3ZpbmdBdmVy
YWdlSXNTZXRCeVVzZXIgPSBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3kgJiYgbW92aW5nQXZlcmFnZVN0
cmF0ZWd5LmV4ZWN1dGU7Ci0gICAgICAgIGlmICghbW92aW5nQXZlcmFnZUlzU2V0QnlVc2VyKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIG1vdmluZ0F2ZXJhZ2VWYWx1
ZXMgPSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5leGVjdXRlU3RyYXRlZ3kobW92aW5nQXZlcmFnZVN0
cmF0ZWd5LCByYXdWYWx1ZXMpOwotICAgICAgICBpZiAoIW1vdmluZ0F2ZXJhZ2VWYWx1ZXMpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgdGVzdFJhbmdlQ2FuZGlkYXRl
cyA9IFtdOwotICAgICAgICBpZiAobW92aW5nQXZlcmFnZVN0cmF0ZWd5ICYmIG1vdmluZ0F2ZXJh
Z2VTdHJhdGVneS5pc1NlZ21lbnRhdGlvbiAmJiB0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneSAm
JiB0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneS5leGVjdXRlKQotICAgICAgICAgICAgdGVzdFJh
bmdlQ2FuZGlkYXRlcyA9IFN0YXRpc3RpY3NTdHJhdGVnaWVzLmV4ZWN1dGVTdHJhdGVneSh0ZXN0
UmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgcmF3VmFsdWVzLCBbbW92aW5nQXZlcmFnZVZhbHVlc10p
OwotCi0gICAgICAgIGlmIChlbnZlbG9waW5nU3RyYXRlZ3kgJiYgZW52ZWxvcGluZ1N0cmF0ZWd5
LmV4ZWN1dGUpIHsKLSAgICAgICAgICAgIHZhciBlbnZlbG9wZURlbHRhID0gU3RhdGlzdGljc1N0
cmF0ZWdpZXMuZXhlY3V0ZVN0cmF0ZWd5KGVudmVsb3BpbmdTdHJhdGVneSwgcmF3VmFsdWVzLCBb
bW92aW5nQXZlcmFnZVZhbHVlc10pOwotICAgICAgICAgICAgdmFyIGFub21hbGllcyA9IHt9Owot
ICAgICAgICAgICAgaWYgKGFub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzLmxlbmd0aCkgewotICAg
ICAgICAgICAgICAgIHZhciBpc0Fub21hbHlBcnJheSA9IG5ldyBBcnJheShjdXJyZW50VGltZVNl
cmllc0RhdGEubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBzdHJhdGVneSBvZiBh
bm9tYWx5RGV0ZWN0aW9uU3RyYXRlZ2llcykgewotICAgICAgICAgICAgICAgICAgICB2YXIgYW5v
bWFseUxlbmd0aHMgPSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5leGVjdXRlU3RyYXRlZ3koc3RyYXRl
Z3ksIHJhd1ZhbHVlcywgW21vdmluZ0F2ZXJhZ2VWYWx1ZXMsIGVudmVsb3BlRGVsdGFdKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50VGltZVNlcmllc0Rh
dGEubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBpc0Fub21hbHlBcnJheVtp
XSA9IGlzQW5vbWFseUFycmF5W2ldIHx8IGFub21hbHlMZW5ndGhzW2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlzQW5vbWFseUFycmF5
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNBbm9tYWx5QXJyYXlb
aV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYW5vbWFsaWVzW2N1cnJlbnRUaW1lU2VyaWVzRGF0YVtpXS5tZWFzdXJlbWVudC5pZCgpXSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc0Fub21hbHlBcnJheVtpXSAmJiBp
IDwgaXNBbm9tYWx5QXJyYXkubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgKytpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZh
ciBtb3ZpbmdBdmVyYWdlVGltZVNlcmllcyA9IG51bGw7Ci0gICAgICAgIGlmIChtb3ZpbmdBdmVy
YWdlSXNTZXRCeVVzZXIpIHsKLSAgICAgICAgICAgIG1vdmluZ0F2ZXJhZ2VUaW1lU2VyaWVzID0g
bmV3IFRpbWVTZXJpZXMoY3VycmVudFRpbWVTZXJpZXNEYXRhLm1hcChmdW5jdGlvbiAocG9pbnQs
IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbW92aW5nQXZlcmFnZVZhbHVl
c1tpbmRleF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAg
bWVhc3VyZW1lbnQ6IHBvaW50Lm1lYXN1cmVtZW50LAotICAgICAgICAgICAgICAgICAgICB0aW1l
OiBwb2ludC50aW1lLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgIGludGVydmFsOiBlbnZlbG9wZURlbHRhICE9PSBudWxsID8gW3ZhbHVlIC0g
ZW52ZWxvcGVEZWx0YSwgdmFsdWUgKyBlbnZlbG9wZURlbHRhXSA6IG51bGwsCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgIG1vdmluZ0F2ZXJhZ2U6IG1vdmluZ0F2ZXJhZ2VUaW1lU2VyaWVzLAotICAg
ICAgICAgICAgYW5vbWFsaWVzOiBhbm9tYWxpZXMsCi0gICAgICAgICAgICB0ZXN0UmFuZ2VDYW5k
aWRhdGVzOiB0ZXN0UmFuZ2VDYW5kaWRhdGVzLAotICAgICAgICB9OwotICAgIH0sCi0gICAgX3Vw
ZGF0ZVN0cmF0ZWd5Q29uZmlnSWZOZWVkZWQ6IGZ1bmN0aW9uIChzdHJhdGVneSwgY29uZmlnTmFt
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBjb25maWcgPSBudWxsOwotICAgICAgICBpZiAoc3RyYXRl
Z3kgJiYgc3RyYXRlZ3kuZXhlY3V0ZSkKLSAgICAgICAgICAgIGNvbmZpZyA9IFtzdHJhdGVneS5p
ZF0uY29uY2F0KChzdHJhdGVneS5wYXJhbWV0ZXJMaXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKHBh
cmFtKSB7IHJldHVybiBwYXJhbS52YWx1ZTsgfSkpOwotCi0gICAgICAgIGlmIChKU09OLnN0cmlu
Z2lmeShjb25maWcpICE9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0KGNvbmZpZ05hbWUpKSkKLSAg
ICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZ05hbWUsIGNvbmZpZyk7Ci0gICAgfSwKLSAgICBfdXBk
YXRlRGV0YWlsczogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZFBvaW50
cyA9IHRoaXMuZ2V0KCdzZWxlY3RlZFBvaW50cycpOwotICAgICAgICB2YXIgY3VycmVudFBvaW50
ID0gdGhpcy5nZXQoJ2hvdmVyZWRPclNlbGVjdGVkSXRlbScpOwotICAgICAgICBpZiAoIXNlbGVj
dGVkUG9pbnRzICYmICFjdXJyZW50UG9pbnQpIHsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdkZXRh
aWxzJywgbnVsbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgY3VycmVudE1lYXN1cmVtZW50OwotICAgICAgICB2YXIgcHJldmlvdXNQb2ludDsKLSAgICAg
ICAgaWYgKCFzZWxlY3RlZFBvaW50cykKLSAgICAgICAgICAgIHByZXZpb3VzUG9pbnQgPSBjdXJy
ZW50UG9pbnQuc2VyaWVzLnByZXZpb3VzUG9pbnQoY3VycmVudFBvaW50KTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBzZWxlY3RlZFBvaW50c1tzZWxlY3RlZFBv
aW50cy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIHByZXZpb3VzUG9pbnQgPSBzZWxlY3RlZFBv
aW50c1swXTsKLSAgICAgICAgfQotICAgICAgICB2YXIgY3VycmVudE1lYXN1cmVtZW50ID0gY3Vy
cmVudFBvaW50Lm1lYXN1cmVtZW50OwotICAgICAgICB2YXIgb2xkTWVhc3VyZW1lbnQgPSBwcmV2
aW91c1BvaW50ID8gcHJldmlvdXNQb2ludC5tZWFzdXJlbWVudCA6IG51bGw7Ci0KLSAgICAgICAg
dmFyIGZvcm1hdHRlZFJldmlzaW9ucyA9IGN1cnJlbnRNZWFzdXJlbWVudC5mb3JtYXR0ZWRSZXZp
c2lvbnMob2xkTWVhc3VyZW1lbnQpOwotICAgICAgICB2YXIgcmV2aXNpb25zID0gQXBwLk1hbmlm
ZXN0LmdldCgncmVwb3NpdG9yaWVzJykKLSAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJl
cG9zaXRvcnkpIHsgcmV0dXJuIGZvcm1hdHRlZFJldmlzaW9uc1tyZXBvc2l0b3J5LmdldCgnaWQn
KV07IH0pCi0gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChyZXBvc2l0b3J5KSB7Ci0gICAgICAg
ICAgICB2YXIgcmV2aXNpb24gPSBFbWJlci5PYmplY3QuY3JlYXRlKGZvcm1hdHRlZFJldmlzaW9u
c1tyZXBvc2l0b3J5LmdldCgnaWQnKV0pOwotICAgICAgICAgICAgcmV2aXNpb25bJ3VybCddID0g
cmV2aXNpb24ucHJldmlvdXNSZXZpc2lvbgotICAgICAgICAgICAgICAgID8gcmVwb3NpdG9yeS51
cmxGb3JSZXZpc2lvblJhbmdlKHJldmlzaW9uLnByZXZpb3VzUmV2aXNpb24sIHJldmlzaW9uLmN1
cnJlbnRSZXZpc2lvbikKLSAgICAgICAgICAgICAgICA6IHJlcG9zaXRvcnkudXJsRm9yUmV2aXNp
b24ocmV2aXNpb24uY3VycmVudFJldmlzaW9uKTsKLSAgICAgICAgICAgIHJldmlzaW9uWyduYW1l
J10gPSByZXBvc2l0b3J5LmdldCgnbmFtZScpOwotICAgICAgICAgICAgcmV2aXNpb25bJ3JlcG9z
aXRvcnknXSA9IHJlcG9zaXRvcnk7Ci0gICAgICAgICAgICByZXR1cm4gcmV2aXNpb247IAotICAg
ICAgICB9KTsKLQotICAgICAgICB2YXIgYnVpbGROdW1iZXIgPSBudWxsOwotICAgICAgICB2YXIg
YnVpbGRVUkwgPSBudWxsOwotICAgICAgICBpZiAoIXNlbGVjdGVkUG9pbnRzKSB7Ci0gICAgICAg
ICAgICBidWlsZE51bWJlciA9IGN1cnJlbnRNZWFzdXJlbWVudC5idWlsZE51bWJlcigpOwotICAg
ICAgICAgICAgdmFyIGJ1aWxkZXIgPSBBcHAuTWFuaWZlc3QuYnVpbGRlcihjdXJyZW50TWVhc3Vy
ZW1lbnQuYnVpbGRlcklkKCkpOwotICAgICAgICAgICAgaWYgKGJ1aWxkZXIpCi0gICAgICAgICAg
ICAgICAgYnVpbGRVUkwgPSBidWlsZGVyLnVybEZyb21CdWlsZE51bWJlcihidWlsZE51bWJlcik7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnNldCgnZGV0YWlscycsIEVtYmVyLk9iamVjdC5j
cmVhdGUoewotICAgICAgICAgICAgc3RhdHVzOiB0aGlzLmNvbXB1dGVTdGF0dXMoY3VycmVudFBv
aW50LCBwcmV2aW91c1BvaW50KSwKLSAgICAgICAgICAgIGJ1aWxkTnVtYmVyOiBidWlsZE51bWJl
ciwKLSAgICAgICAgICAgIGJ1aWxkVVJMOiBidWlsZFVSTCwKLSAgICAgICAgICAgIGJ1aWxkVGlt
ZTogY3VycmVudE1lYXN1cmVtZW50LmZvcm1hdHRlZEJ1aWxkVGltZSgpLAotICAgICAgICAgICAg
cmV2aXNpb25zOiByZXZpc2lvbnMsCi0gICAgICAgIH0pKTsKLSAgICB9Lm9ic2VydmVzKCdob3Zl
cmVkT3JTZWxlY3RlZEl0ZW0nLCAnc2VsZWN0ZWRQb2ludHMnKSwKLX0pOwotCi1BcHAuZW5jb2Rl
UHJldHRpZmllZEpTT04gPSBmdW5jdGlvbiAocGxhaW4pCi17Ci0gICAgZnVuY3Rpb24gbnVtYmVy
SWZQb3NzaWJsZShzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZyA9PSBwYXJzZUludChz
dHJpbmcpID8gcGFyc2VJbnQoc3RyaW5nKSA6IHN0cmluZzsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biByZWN1cnNpdmVseUNvbnZlcnROdW1iZXJJZlBvc3NpYmxlKGlucHV0KSB7Ci0gICAgICAgIGlm
IChpbnB1dCBpbnN0YW5jZW9mIEFycmF5KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW5wdXQubWFw
KHJlY3Vyc2l2ZWx5Q29udmVydE51bWJlcklmUG9zc2libGUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBudW1iZXJJZlBvc3NpYmxlKGlucHV0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNP
Ti5zdHJpbmdpZnkocmVjdXJzaXZlbHlDb252ZXJ0TnVtYmVySWZQb3NzaWJsZShwbGFpbikpCi0g
ICAgICAgIC5yZXBsYWNlKC9cWy9nLCAnKCcpLnJlcGxhY2UoL1xdL2csICcpJykucmVwbGFjZSgv
XCwvZywgJy0nKTsKLX0KLQotQXBwLmRlY29kZVByZXR0aWZpZWRKU09OID0gZnVuY3Rpb24gKGVu
Y29kZWQpCi17Ci0gICAgdmFyIHBhcnNlZCA9IGVuY29kZWQucmVwbGFjZSgvXCgvZywgJ1snKS5y
ZXBsYWNlKC9cKS9nLCAnXScpLnJlcGxhY2UoL1wtL2csICcsJyk7Ci0gICAgdHJ5IHsKLSAgICAg
ICAgcmV0dXJuIEpTT04ucGFyc2UocGFyc2VkKTsKLSAgICB9IGNhdGNoIChleGNlcHRpb24pIHsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQotCi1BcHAuQ2hhcnRzQ29udHJvbGxlciA9
IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICBxdWVyeVBhcmFtczogWydwYW5lTGlzdCcs
ICd6b29tJywgJ3NpbmNlJ10sCi0gICAgbmVlZHM6IFsncGFuZSddLAotICAgIF9jdXJyZW50RW5j
b2RlZFBhbmVMaXN0OiBudWxsLAotICAgIHBhbmVzOiBbXSwKLSAgICBwbGF0Zm9ybXM6IG51bGws
Ci0gICAgc2hhcmVkWm9vbTogbnVsbCwKLSAgICBzdGFydFRpbWU6IG51bGwsCi0gICAgcHJlc2Vu
dDogRGF0ZS5ub3coKSwKLSAgICBkZWZhdWx0U2luY2U6IERhdGUubm93KCkgLSA3ICogMjQgKiAz
NjAwICogMTAwMCwKLQotICAgIGFkZFBhbmU6IGZ1bmN0aW9uIChwYW5lKQotICAgIHsKLSAgICAg
ICAgdGhpcy5wYW5lcy51bnNoaWZ0T2JqZWN0KHBhbmUpOwotICAgIH0sCi0KLSAgICByZW1vdmVQ
YW5lOiBmdW5jdGlvbiAocGFuZSkKLSAgICB7Ci0gICAgICAgIHRoaXMucGFuZXMucmVtb3ZlT2Jq
ZWN0KHBhbmUpOwotICAgIH0sCi0KLSAgICByZWZyZXNoUGFuZXM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciBwYW5lTGlzdCA9IHRoaXMuZ2V0KCdwYW5lTGlzdCcpOwotICAgICAgICBp
ZiAocGFuZUxpc3QgPT09IHRoaXMuX2N1cnJlbnRFbmNvZGVkUGFuZUxpc3QpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHBhbmVzID0gdGhpcy5fcGFyc2VQYW5lTGlzdChwYW5l
TGlzdCB8fCAnW10nKTsKLSAgICAgICAgaWYgKCFwYW5lcykgewotICAgICAgICAgICAgY29uc29s
ZS5sb2coJ0ZhaWxlZCB0byBwYXJzZScsIGpzb25QYW5lTGlzdCwgZXhjZXB0aW9uKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnNldCgncGFuZXMnLCBwYW5l
cyk7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRFbmNvZGVkUGFuZUxpc3QgPSBwYW5lTGlzdDsKLSAg
ICB9Lm9ic2VydmVzKCdwYW5lTGlzdCcpLm9uKCdpbml0JyksCi0KLSAgICByZWZyZXNoWm9vbTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHpvb20gPSB0aGlzLmdldCgnem9vbScpOwot
ICAgICAgICBpZiAoIXpvb20pIHsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdzaGFyZWRab29tJywg
bnVsbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB6b29tID0g
em9vbS5zcGxpdCgnLScpOwotICAgICAgICB2YXIgc2VsZWN0aW9uID0gbmV3IEFycmF5KDIpOwot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgc2VsZWN0aW9uWzBdID0gbmV3IERhdGUocGFyc2VG
bG9hdCh6b29tWzBdKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25bMV0gPSBuZXcgRGF0ZShwYXJz
ZUZsb2F0KHpvb21bMV0pKTsKLSAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gcGFyc2UgdGhlIHpvb20nLCB6b29tKTsKLSAgICAgICAg
fQotICAgICAgICB0aGlzLnNldCgnc2hhcmVkWm9vbScsIHNlbGVjdGlvbik7Ci0KLSAgICAgICAg
dmFyIHN0YXJ0VGltZSA9IHRoaXMuZ2V0KCdzdGFydFRpbWUnKTsKLSAgICAgICAgaWYgKHN0YXJ0
VGltZSAmJiBzdGFydFRpbWUgPiBzZWxlY3Rpb25bMF0pCi0gICAgICAgICAgICB0aGlzLnNldCgn
c3RhcnRUaW1lJywgc2VsZWN0aW9uWzBdKTsKLQotICAgIH0ub2JzZXJ2ZXMoJ3pvb20nKS5vbign
aW5pdCcpLAotCi0gICAgX3N0YXJ0VGltZUNoYW5nZWQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
dGhpcy5zZXQoJ3NoYXJlZERvbWFpbicsIFt0aGlzLmdldCgnc3RhcnRUaW1lJyksIHRoaXMuZ2V0
KCdwcmVzZW50JyldKTsKLSAgICAgICAgdGhpcy5fc2NoZWR1bGVRdWVyeVN0cmluZ1VwZGF0ZSgp
OwotICAgIH0ub2JzZXJ2ZXMoJ3N0YXJ0VGltZScpLAotCi0gICAgX3NpbmNlQ2hhbmdlZDogZnVu
Y3Rpb24gKCkgewotICAgICAgICB2YXIgc2luY2UgPSBwYXJzZUludCh0aGlzLmdldCgnc2luY2Un
KSk7Ci0gICAgICAgIGlmIChpc05hTihzaW5jZSkpCi0gICAgICAgICAgICBzaW5jZSA9IHRoaXMu
ZGVmYXVsdFNpbmNlOwotICAgICAgICB0aGlzLnNldCgnc3RhcnRUaW1lJywgbmV3IERhdGUoc2lu
Y2UpKTsKLSAgICB9Lm9ic2VydmVzKCdzaW5jZScpLm9uKCdpbml0JyksCi0KLSAgICBfcGFyc2VQ
YW5lTGlzdDogZnVuY3Rpb24gKGVuY29kZWRQYW5lTGlzdCkKLSAgICB7Ci0gICAgICAgIHZhciBw
YXJzZWRQYW5lTGlzdCA9IEFwcC5kZWNvZGVQcmV0dGlmaWVkSlNPTihlbmNvZGVkUGFuZUxpc3Qp
OwotICAgICAgICBpZiAoIXBhcnNlZFBhbmVMaXN0KQotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICAgICAgLy8gRklYTUU6IERvbid0IHJlLWNyZWF0ZSBhbGwgcGFuZXMuCi0gICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgcmV0dXJuIHBhcnNlZFBhbmVMaXN0Lm1hcChmdW5j
dGlvbiAocGFuZUluZm8pIHsKLSAgICAgICAgICAgIHZhciB0aW1lUmFuZ2UgPSBudWxsOwotICAg
ICAgICAgICAgdmFyIHNlbGVjdGVkSXRlbSA9IG51bGw7Ci0gICAgICAgICAgICBpZiAocGFuZUlu
Zm9bMl0gaW5zdGFuY2VvZiBBcnJheSkgewotICAgICAgICAgICAgICAgIHZhciB0aW1lUmFuZ2Ug
PSBwYW5lSW5mb1syXTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAg
ICB0aW1lUmFuZ2UgPSBbbmV3IERhdGUodGltZVJhbmdlWzBdKSwgbmV3IERhdGUodGltZVJhbmdl
WzFdKV07Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coIkZhaWxlZCB0byBwYXJzZSB0aGUgdGltZSByYW5nZToiLCB0aW1l
UmFuZ2UsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSBwYW5lSW5mb1syXTsKLQotICAgICAgICAgICAg
cmV0dXJuIEFwcC5QYW5lLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgc3RvcmU6IHNlbGYuc3Rv
cmUsCi0gICAgICAgICAgICAgICAgaW5mbzogcGFuZUluZm8sCi0gICAgICAgICAgICAgICAgcGxh
dGZvcm1JZDogcGFuZUluZm9bMF0sCi0gICAgICAgICAgICAgICAgbWV0cmljSWQ6IHBhbmVJbmZv
WzFdLAotICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogc2VsZWN0ZWRJdGVtLAotICAgICAg
ICAgICAgICAgIHRpbWVSYW5nZTogdGltZVJhbmdlLAotICAgICAgICAgICAgICAgIHNob3dGdWxs
WUF4aXM6IHBhbmVJbmZvWzNdLAotICAgICAgICAgICAgICAgIG1vdmluZ0F2ZXJhZ2VDb25maWc6
IHBhbmVJbmZvWzRdLAotICAgICAgICAgICAgICAgIGVudmVsb3BpbmdDb25maWc6IHBhbmVJbmZv
WzVdLAotICAgICAgICAgICAgICAgIHRlc3RSYW5nZVNlbGVjdGlvbkNvbmZpZzogcGFuZUluZm9b
Nl0sCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIF9zZXJpYWxp
emVQYW5lTGlzdDogZnVuY3Rpb24gKHBhbmVzKQotICAgIHsKLSAgICAgICAgaWYgKCFwYW5lcy5s
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7Ci0gICAgICAgIHJldHVybiBBcHAuZW5jb2RlUHJldHRpZmllZEpTT04ocGFuZXMubWFw
KGZ1bmN0aW9uIChwYW5lKSB7Ci0gICAgICAgICAgICByZXR1cm4gWwotICAgICAgICAgICAgICAg
IHBhbmUuZ2V0KCdwbGF0Zm9ybUlkJyksCi0gICAgICAgICAgICAgICAgcGFuZS5nZXQoJ21ldHJp
Y0lkJyksCi0gICAgICAgICAgICAgICAgcGFuZS5nZXQoJ3RpbWVSYW5nZScpID8gcGFuZS5nZXQo
J3RpbWVSYW5nZScpLm1hcChmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRUaW1lKCkg
fSkgOiBwYW5lLmdldCgnc2VsZWN0ZWRJdGVtJyksCi0gICAgICAgICAgICAgICAgcGFuZS5nZXQo
J3Nob3dGdWxsWUF4aXMnKSwKLSAgICAgICAgICAgICAgICBwYW5lLmdldCgnbW92aW5nQXZlcmFn
ZUNvbmZpZycpLAotICAgICAgICAgICAgICAgIHBhbmUuZ2V0KCdlbnZlbG9waW5nQ29uZmlnJyks
Ci0gICAgICAgICAgICAgICAgcGFuZS5nZXQoJ3Rlc3RSYW5nZVNlbGVjdGlvbkNvbmZpZycpLAot
ICAgICAgICAgICAgXTsKLSAgICAgICAgfSkpOwotICAgIH0sCi0KLSAgICBfc2NoZWR1bGVRdWVy
eVN0cmluZ1VwZGF0ZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIEVtYmVyLnJ1bi5kZWJv
dW5jZSh0aGlzLCAnX3VwZGF0ZVF1ZXJ5U3RyaW5nJywgMTAwMCk7Ci0gICAgfS5vYnNlcnZlcygn
c2hhcmVkWm9vbScsICdwYW5lcy5AZWFjaC5wbGF0Zm9ybScsICdwYW5lcy5AZWFjaC5tZXRyaWMn
LCAncGFuZXMuQGVhY2guc2VsZWN0ZWRJdGVtJywgJ3BhbmVzLkBlYWNoLnRpbWVSYW5nZScsCi0g
ICAgICAgICdwYW5lcy5AZWFjaC5zaG93RnVsbFlBeGlzJywgJ3BhbmVzLkBlYWNoLm1vdmluZ0F2
ZXJhZ2VDb25maWcnLCAncGFuZXMuQGVhY2guZW52ZWxvcGluZ0NvbmZpZycsICdwYW5lcy5AZWFj
aC50ZXN0UmFuZ2VTZWxlY3Rpb25Db25maWcnKSwKLQotICAgIF91cGRhdGVRdWVyeVN0cmluZzog
ZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRFbmNvZGVkUGFuZUxpc3Qg
PSB0aGlzLl9zZXJpYWxpemVQYW5lTGlzdCh0aGlzLmdldCgncGFuZXMnKSk7Ci0gICAgICAgIHRo
aXMuc2V0KCdwYW5lTGlzdCcsIHRoaXMuX2N1cnJlbnRFbmNvZGVkUGFuZUxpc3QpOwotCi0gICAg
ICAgIHZhciB6b29tID0gdW5kZWZpbmVkOwotICAgICAgICB2YXIgc2hhcmVkWm9vbSA9IHRoaXMu
Z2V0KCdzaGFyZWRab29tJyk7Ci0gICAgICAgIGlmIChzaGFyZWRab29tICYmICFBcHAuZG9tYWlu
c0FyZUVxdWFsKHNoYXJlZFpvb20sIHRoaXMuZ2V0KCdzaGFyZWREb21haW4nKSkpCi0gICAgICAg
ICAgICB6b29tID0gK3NoYXJlZFpvb21bMF0gKyAnLScgKyArc2hhcmVkWm9vbVsxXTsKLSAgICAg
ICAgdGhpcy5zZXQoJ3pvb20nLCB6b29tKTsKLQotICAgICAgICBpZiAodGhpcy5nZXQoJ3N0YXJ0
VGltZScpIC0gdGhpcy5kZWZhdWx0U2luY2UpCi0gICAgICAgICAgICB0aGlzLnNldCgnc2luY2Un
LCB0aGlzLmdldCgnc3RhcnRUaW1lJykgLSAwKTsKLSAgICB9LAotCi0gICAgYWN0aW9uczogewot
ICAgICAgICBhZGRQYW5lQnlNZXRyaWNBbmRQbGF0Zm9ybTogZnVuY3Rpb24gKHBhcmFtKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0aGlzLmFkZFBhbmUoQXBwLlBhbmUuY3JlYXRlKHsKLSAgICAg
ICAgICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSwKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybUlk
OiBwYXJhbS5wbGF0Zm9ybS5nZXQoJ2lkJyksCi0gICAgICAgICAgICAgICAgbWV0cmljSWQ6IHBh
cmFtLm1ldHJpYy5nZXQoJ2lkJyksCi0gICAgICAgICAgICAgICAgc2hvd2luZ0RldGFpbHM6IGZh
bHNlCi0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0sCi0gICAgICAgIGFkZEFsdGVybmF0aXZl
UGFuZXM6IGZ1bmN0aW9uIChwYW5lLCBwbGF0Zm9ybSwgbWV0cmljcykKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIHBhbmVzID0gdGhpcy5wYW5lczsKLSAgICAgICAgICAgIHZhciBzdG9yZSA9
IHRoaXMuc3RvcmU7Ci0gICAgICAgICAgICB2YXIgc3RhcnRpbmdJbmRleCA9IHBhbmVzLmluZGV4
T2YocGFuZSkgKyAxOwotICAgICAgICAgICAgbWV0cmljcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRy
aWMsIGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgcGFuZXMuaW5zZXJ0QXQoc3RhcnRpbmdJbmRl
eCArIGluZGV4LCBBcHAuUGFuZS5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgICBzdG9yZTog
c3RvcmUsCi0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtSWQ6IHBsYXRmb3JtLmdldCgnaWQn
KSwKLSAgICAgICAgICAgICAgICAgICAgbWV0cmljSWQ6IG1ldHJpYy5nZXQoJ2lkJyksCi0gICAg
ICAgICAgICAgICAgICAgIHNob3dpbmdEZXRhaWxzOiBmYWxzZQotICAgICAgICAgICAgICAgIH0p
KTsKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9LAotCi0gICAgaW5pdDogZnVuY3Rp
b24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgIHZhciBzZWxmID0g
dGhpczsKLSAgICAgICAgQXBwLmJ1aWxkUG9wdXAodGhpcy5zdG9yZSwgJ2FkZFBhbmVCeU1ldHJp
Y0FuZFBsYXRmb3JtJykudGhlbihmdW5jdGlvbiAocGxhdGZvcm1zKSB7Ci0gICAgICAgICAgICBz
ZWxmLnNldCgncGxhdGZvcm1zJywgcGxhdGZvcm1zKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLX0p
OwotCi1BcHAuYnVpbGRQb3B1cCA9IGZ1bmN0aW9uKHN0b3JlLCBhY3Rpb24sIHBvc2l0aW9uKQot
ewotICAgIHJldHVybiBBcHAuTWFuaWZlc3QuZmV0Y2goc3RvcmUpLnRoZW4oZnVuY3Rpb24gKCkg
ewotICAgICAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmdldCgncGxhdGZvcm1zJykuc29ydEJ5KCds
YWJlbCcpLm1hcChmdW5jdGlvbiAocGxhdGZvcm0pIHsKLSAgICAgICAgICAgIHJldHVybiBBcHAu
UGxhdGZvcm1Qcm94eUZvclBvcHVwLmNyZWF0ZSh7Y29udGVudDogcGxhdGZvcm0sCi0gICAgICAg
ICAgICAgICAgYWN0aW9uOiBhY3Rpb24sIHBvc2l0aW9uOiBwb3NpdGlvbn0pOwotICAgICAgICB9
KTsKLSAgICB9KTsKLX0KLQotQXBwLlBsYXRmb3JtUHJveHlGb3JQb3B1cCA9IEVtYmVyLk9iamVj
dFByb3h5LmV4dGVuZCh7Ci0gICAgY2hpbGRyZW46IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAg
ICB2YXIgcGxhdGZvcm0gPSB0aGlzLmNvbnRlbnQ7Ci0gICAgICAgIHZhciBjb250YWluc1Rlc3Qg
PSB0aGlzLmNvbnRlbnQuY29udGFpbnNUZXN0LmJpbmQodGhpcy5jb250ZW50KTsKLSAgICAgICAg
dmFyIGFjdGlvbiA9IHRoaXMuZ2V0KCdhY3Rpb24nKTsKLSAgICAgICAgdmFyIHBvc2l0aW9uID0g
dGhpcy5nZXQoJ3Bvc2l0aW9uJyk7Ci0gICAgICAgIHJldHVybiBBcHAuTWFuaWZlc3QuZ2V0KCd0
b3BMZXZlbFRlc3RzJykKLSAgICAgICAgICAgIC5maWx0ZXIoY29udGFpbnNUZXN0KQotICAgICAg
ICAgICAgLm1hcChmdW5jdGlvbiAodGVzdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBBcHAu
VGVzdFByb3h5Rm9yUG9wdXAuY3JlYXRlKHtjb250ZW50OiB0ZXN0LCBwbGF0Zm9ybTogcGxhdGZv
cm0sIGFjdGlvbjogYWN0aW9uLCBwb3NpdGlvbjogcG9zaXRpb259KTsKLSAgICAgICAgICAgIH0p
OwotICAgIH0ucHJvcGVydHkoJ0FwcC5NYW5pZmVzdC50b3BMZXZlbFRlc3RzJyksCi19KTsKLQot
QXBwLlRlc3RQcm94eUZvclBvcHVwID0gRW1iZXIuT2JqZWN0UHJveHkuZXh0ZW5kKHsKLSAgICBw
bGF0Zm9ybTogbnVsbCwKLSAgICBjaGlsZHJlbjogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3VwZGF0ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjsK
LSAgICB9LnByb3BlcnR5KCdjaGlsZFRlc3RzJywgJ21ldHJpY3MnKSwKLSAgICBhY3Rpb25OYW1l
OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4oKTsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbk5hbWU7Ci0gICAgfS5wcm9wZXJ0eSgnY2hpbGRUZXN0
cycsICdtZXRyaWNzJyksCi0gICAgYWN0aW9uQXJndW1lbnQ6IGZ1bmN0aW9uICgpCi0gICAgewot
ICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbigpOwotICAgICAgICByZXR1cm4gdGhpcy5fYWN0
aW9uQXJndW1lbnQ7Ci0gICAgfS5wcm9wZXJ0eSgnY2hpbGRUZXN0cycsICdtZXRyaWNzJyksCi0g
ICAgX3VwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHBsYXRm
b3JtID0gdGhpcy5nZXQoJ3BsYXRmb3JtJyk7Ci0gICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLmdl
dCgnYWN0aW9uJyk7Ci0gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0KCdwb3NpdGlvbicp
OwotCi0gICAgICAgIHZhciBjaGlsZFRlc3RzID0gdGhpcy5nZXQoJ2NoaWxkVGVzdHMnKQotICAg
ICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodGVzdCkgeyByZXR1cm4gcGxhdGZvcm0uY29udGFp
bnNUZXN0KHRlc3QpOyB9KQotICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodGVzdCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBBcHAuVGVzdFByb3h5Rm9yUG9wdXAuY3JlYXRlKHtjb250ZW50
OiB0ZXN0LCBwbGF0Zm9ybTogcGxhdGZvcm0sIGFjdGlvbjogYWN0aW9uLCBwb3NpdGlvbjogcG9z
aXRpb259KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHZhciBtZXRyaWNzID0gdGhpcy5n
ZXQoJ21ldHJpY3MnKQotICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobWV0cmljKSB7IHJl
dHVybiBwbGF0Zm9ybS5jb250YWluc01ldHJpYyhtZXRyaWMpOyB9KQotICAgICAgICAgICAgLm1h
cChmdW5jdGlvbiAobWV0cmljKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFnZ3JlZ2F0b3IgPSBt
ZXRyaWMuZ2V0KCdhZ2dyZWdhdG9yJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uTmFtZTogYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25Bcmd1bWVudDoge3BsYXRmb3JtOiBwbGF0Zm9ybSwgbWV0cmljOiBtZXRyaWMsIHBvc2l0
aW9uOnBvc2l0aW9ufSwKLSAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG1ldHJpYy5nZXQoJ2xh
YmVsJykKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYg
KGNoaWxkVGVzdHMubGVuZ3RoICYmIG1ldHJpY3MubGVuZ3RoKQotICAgICAgICAgICAgbWV0cmlj
cy5wdXNoKHtpc1NlcGFyYXRvcjogdHJ1ZX0pOwotICAgICAgICBlbHNlIGlmIChtZXRyaWNzLmxl
bmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICB0aGlzLl9hY3Rpb25OYW1lID0gYWN0aW9uOwotICAg
ICAgICAgICAgdGhpcy5fYWN0aW9uQXJndW1lbnQgPSBtZXRyaWNzWzBdLmFjdGlvbkFyZ3VtZW50
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fYWN0aW9u
TmFtZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2FjdGlvbkFyZ3VtZW50ID0gbnVsbDsKLSAgICAg
ICAgdGhpcy5fY2hpbGRyZW4gPSBtZXRyaWNzLmNvbmNhdChjaGlsZFRlc3RzKTsKLSAgICB9LAot
fSk7Ci0KLUFwcC5kb21haW5zQXJlRXF1YWwgPSBmdW5jdGlvbiAoZG9tYWluMSwgZG9tYWluMikg
ewotICAgIHJldHVybiAoIWRvbWFpbjEgJiYgIWRvbWFpbjIpIHx8IChkb21haW4xICYmIGRvbWFp
bjIgJiYgIShkb21haW4xWzBdIC0gZG9tYWluMlswXSkgJiYgIShkb21haW4xWzFdIC0gZG9tYWlu
MlsxXSkpOwotfQotCi1BcHAuUGFuZUNvbnRyb2xsZXIgPSBFbWJlci5PYmplY3RDb250cm9sbGVy
LmV4dGVuZCh7Ci0gICAgbmVlZHM6IFsnY2hhcnRzJ10sCi0gICAgc2hhcmVkVGltZTogRW1iZXIu
Y29tcHV0ZWQuYWxpYXMoJ3BhcmVudENvbnRyb2xsZXIuc2hhcmVkVGltZScpLAotICAgIHNoYXJl
ZFNlbGVjdGlvbjogRW1iZXIuY29tcHV0ZWQuYWxpYXMoJ3BhcmVudENvbnRyb2xsZXIuc2hhcmVk
U2VsZWN0aW9uJyksCi0gICAgc2VsZWN0aW9uOiBudWxsLAotICAgIGFjdGlvbnM6IHsKLSAgICAg
ICAgdG9nZ2xlRGV0YWlsczogZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlz
LnRvZ2dsZVByb3BlcnR5KCdzaG93aW5nRGV0YWlscycpOwotICAgICAgICB9LAotICAgICAgICBj
bG9zZTogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250
cm9sbGVyLnJlbW92ZVBhbmUodGhpcy5nZXQoJ21vZGVsJykpOwotICAgICAgICB9LAotICAgICAg
ICB0b2dnbGVCdWdzUGFuZTogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KHRoaXMudG9nZ2xlUHJvcGVydHkoJ3Nob3dpbmdBbmFseXNpc1BhbmUnKSkgewotICAgICAgICAg
ICAgICAgIHRoaXMuc2V0KCdzaG93aW5nU2VhcmNoUGFuZScsIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLnNldCgnc2hvd2luZ1N0YXRQYW5lJywgZmFsc2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICB0b2dnbGVTaG93T3V0bGllcjogZnVuY3Rpb24gKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdGhpcy5nZXQoJ21vZGVsJykudG9nZ2xlUHJvcGVydHkoJ3Nob3dP
dXRsaWVyJyk7Ci0gICAgICAgIH0sCi0gICAgICAgIGNyZWF0ZUFuYWx5c2lzVGFzazogZnVuY3Rp
b24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldCgnbmV3QW5h
bHlzaXNUYXNrTmFtZScpOwotICAgICAgICAgICAgdmFyIHBvaW50cyA9IHRoaXMuZ2V0KCdzZWxl
Y3RlZFBvaW50cycpOwotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdUaGUgYW5hbHlzaXMgbmFt
ZSBzaG91bGQgbm90IGJlIGVtcHR5JywgbmFtZSk7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQo
J1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCB0d28gcG9pbnRzIGluIHRoZSByYW5nZScsIHBvaW50
cyAmJiBwb2ludHMubGVuZ3RoID49IDIpOwotCi0gICAgICAgICAgICB2YXIgbmV3V2luZG93ID0g
d2luZG93Lm9wZW4oKTsKLSAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAg
IEFwcC5BbmFseXNpc1Rhc2suY3JlYXRlKG5hbWUsIHBvaW50c1swXS5tZWFzdXJlbWVudCwgcG9p
bnRzW3BvaW50cy5sZW5ndGggLSAxXS5tZWFzdXJlbWVudCkudGhlbihmdW5jdGlvbiAoZGF0YSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVcGRhdGUgdGhlIFVJIHRvIHNob3cgdGhlIG5l
dyBhbmFseXNpcyB0YXNrLgotICAgICAgICAgICAgICAgIHZhciB1cmwgPSBBcHAuUm91dGVyLnJv
dXRlci5nZW5lcmF0ZSgnYW5hbHlzaXNUYXNrJywgZGF0YVsndGFza0lkJ10pOwotICAgICAgICAg
ICAgICAgIG5ld1dpbmRvdy5sb2NhdGlvbi5ocmVmID0gJyMnICsgdXJsOwotICAgICAgICAgICAg
ICAgIHNlbGYuZ2V0KCdtb2RlbCcpLmZldGNoQW5hbHl0aWNSYW5nZXMoKTsKLSAgICAgICAgICAg
IH0sIGZ1bmN0aW9uIChlcnJvcikgewotICAgICAgICAgICAgICAgIG5ld1dpbmRvdy5jbG9zZSgp
OwotICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PT0gJ0R1cGxpY2F0ZUFuYWx5c2lzVGFzaycp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IER1cGxpY2F0ZSB0aGlzIGVycm9yIG1v
cmUgZ3JhY2VmdWxseS4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWxlcnQo
ZXJyb3IpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZVNlYXJj
aFBhbmU6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghQXBwLk1hbmlm
ZXN0LnJlcG9zaXRvcmllc1dpdGhSZXBvcnRlZENvbW1pdHMpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAg
ICAgICBpZiAoIW1vZGVsLmdldCgnY29tbWl0U2VhcmNoUmVwb3NpdG9yeScpKQotICAgICAgICAg
ICAgICAgIG1vZGVsLnNldCgnY29tbWl0U2VhcmNoUmVwb3NpdG9yeScsIEFwcC5NYW5pZmVzdC5y
ZXBvc2l0b3JpZXNXaXRoUmVwb3J0ZWRDb21taXRzWzBdKTsKLSAgICAgICAgICAgIGlmICh0aGlz
LnRvZ2dsZVByb3BlcnR5KCdzaG93aW5nU2VhcmNoUGFuZScpKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5zZXQoJ3Nob3dpbmdBbmFseXNpc1BhbmUnLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5zZXQoJ3Nob3dpbmdTdGF0UGFuZScsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgc2VhcmNoQ29tbWl0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgbW9kZWwgPSB0aGlzLmdldCgnbW9kZWwnKTsKLSAgICAgICAgICAgIG1vZGVsLnNlYXJjaENv
bW1pdChtb2RlbC5nZXQoJ2NvbW1pdFNlYXJjaFJlcG9zaXRvcnknKSwgbW9kZWwuZ2V0KCdjb21t
aXRTZWFyY2hLZXl3b3JkJykpOyAgICAgICAgICAgICAgICAKLSAgICAgICAgfSwKLSAgICAgICAg
dG9nZ2xlU3RhdFBhbmU6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLnRvZ2dsZVByb3BlcnR5KCdzaG93aW5nU3RhdFBhbmUnKSkgewotICAgICAgICAgICAgICAg
IHRoaXMuc2V0KCdzaG93aW5nU2VhcmNoUGFuZScsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0
aGlzLnNldCgnc2hvd2luZ0FuYWx5c2lzUGFuZScsIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSwKLSAgICAgICAgem9vbWVkOiBmdW5jdGlvbiAoc2VsZWN0aW9uKQotICAgICAgICB7
Ci0gICAgICAgICAgICB0aGlzLnNldCgnbWFpblBsb3REb21haW4nLCBzZWxlY3Rpb24gPyBzZWxl
Y3Rpb24gOiB0aGlzLmdldCgnb3ZlcnZpZXdEb21haW4nKSk7Ci0gICAgICAgICAgICBpZiAoc2Vs
ZWN0aW9uKQotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdvdmVydmlld1NlbGVjdGlvbicsIHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBFbWJlci5ydW4uZGVib3VuY2UodGhpcywgJ3Byb3BhZ2F0
ZVpvb20nLCAxMDApOwotICAgICAgICB9LAotICAgIH0sCi0gICAgX292ZXJ2aWV3U2VsZWN0aW9u
Q2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBvdmVydmlld1NlbGVjdGlv
biA9IHRoaXMuZ2V0KCdvdmVydmlld1NlbGVjdGlvbicpOwotICAgICAgICBpZiAoQXBwLmRvbWFp
bnNBcmVFcXVhbChvdmVydmlld1NlbGVjdGlvbiwgdGhpcy5nZXQoJ21haW5QbG90RG9tYWluJykp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLnNldCgnbWFpblBsb3REb21haW4n
LCBvdmVydmlld1NlbGVjdGlvbiB8fCB0aGlzLmdldCgnb3ZlcnZpZXdEb21haW4nKSk7Ci0gICAg
ICAgIEVtYmVyLnJ1bi5kZWJvdW5jZSh0aGlzLCAncHJvcGFnYXRlWm9vbScsIDEwMCk7Ci0gICAg
fS5vYnNlcnZlcygnb3ZlcnZpZXdTZWxlY3Rpb24nKSwKLSAgICBfc2hhcmVkRG9tYWluQ2hhbmdl
ZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBuZXdEb21haW4gPSB0aGlzLmdldCgn
cGFyZW50Q29udHJvbGxlcicpLmdldCgnc2hhcmVkRG9tYWluJyk7Ci0gICAgICAgIGlmIChBcHAu
ZG9tYWluc0FyZUVxdWFsKG5ld0RvbWFpbiwgdGhpcy5nZXQoJ292ZXJ2aWV3RG9tYWluJykpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLnNldCgnb3ZlcnZpZXdEb21haW4nLCBu
ZXdEb21haW4pOwotICAgICAgICBpZiAoIXRoaXMuZ2V0KCdvdmVydmlld1NlbGVjdGlvbicpKQot
ICAgICAgICAgICAgdGhpcy5zZXQoJ21haW5QbG90RG9tYWluJywgbmV3RG9tYWluKTsKLSAgICB9
Lm9ic2VydmVzKCdwYXJlbnRDb250cm9sbGVyLnNoYXJlZERvbWFpbicpLm9uKCdpbml0JyksCi0g
ICAgcHJvcGFnYXRlWm9vbTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZ2V0KCdw
YXJlbnRDb250cm9sbGVyJykuc2V0KCdzaGFyZWRab29tJywgdGhpcy5nZXQoJ21haW5QbG90RG9t
YWluJykpOwotICAgIH0sCi0gICAgX3NoYXJlZFpvb21DaGFuZ2VkOiBmdW5jdGlvbiAoKQotICAg
IHsKLSAgICAgICAgdmFyIG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0KCdwYXJlbnRDb250cm9sbGVy
JykuZ2V0KCdzaGFyZWRab29tJyk7Ci0gICAgICAgIGlmIChBcHAuZG9tYWluc0FyZUVxdWFsKG5l
d1NlbGVjdGlvbiwgdGhpcy5nZXQoJ21haW5QbG90RG9tYWluJykpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0aGlzLnNldCgnbWFpblBsb3REb21haW4nLCBuZXdTZWxlY3Rpb24gfHwg
dGhpcy5nZXQoJ292ZXJ2aWV3RG9tYWluJykpOwotICAgICAgICB0aGlzLnNldCgnb3ZlcnZpZXdT
ZWxlY3Rpb24nLCBuZXdTZWxlY3Rpb24pOwotICAgIH0ub2JzZXJ2ZXMoJ3BhcmVudENvbnRyb2xs
ZXIuc2hhcmVkWm9vbScpLm9uKCdpbml0JyksCi0gICAgX3VwZGF0ZUNhbkFuYWx5emU6IGZ1bmN0
aW9uICgpCi0gICAgewotICAgICAgICB2YXIgcGFuZSA9IHRoaXMuZ2V0KCdtb2RlbCcpOwotICAg
ICAgICB2YXIgcG9pbnRzID0gcGFuZS5nZXQoJ3NlbGVjdGVkUG9pbnRzJyk7Ci0gICAgICAgIHRo
aXMuc2V0KCdjYW5ub3RBbmFseXplJywgIXRoaXMuZ2V0KCduZXdBbmFseXNpc1Rhc2tOYW1lJykg
fHwgIXBvaW50cyB8fCBwb2ludHMubGVuZ3RoIDwgMik7Ci0gICAgICAgIHRoaXMuc2V0KCdjYW5u
b3RNYXJrT3V0bGllcicsICEhcG9pbnRzIHx8ICF0aGlzLmdldCgnc2VsZWN0ZWRJdGVtJykpOwot
Ci0gICAgICAgIHZhciBzZWxlY3RlZE1lYXN1cmVtZW50ID0gdGhpcy5zZWxlY3RlZE1lYXN1cmVt
ZW50KCk7Ci0gICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0ZW1Jc01hcmtlZE91dGxpZXInLCBz
ZWxlY3RlZE1lYXN1cmVtZW50ICYmIHNlbGVjdGVkTWVhc3VyZW1lbnQubWFya2VkT3V0bGllcigp
KTsKLQotICAgIH0ub2JzZXJ2ZXMoJ25ld0FuYWx5c2lzVGFza05hbWUnLCAnbW9kZWwuc2VsZWN0
ZWRQb2ludHMnLCAnbW9kZWwuc2VsZWN0ZWRJdGVtJykub24oJ2luaXQnKSwKLSAgICBzZWxlY3Rl
ZE1lYXN1cmVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlz
LmdldCgnbW9kZWwnKS5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICB2YXIgc2VsZWN0ZWRJdGVt
ID0gdGhpcy5nZXQoJ3NlbGVjdGVkSXRlbScpOwotICAgICAgICBpZiAoIWNoYXJ0RGF0YSB8fCAh
c2VsZWN0ZWRJdGVtKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBwb2lu
dCA9IGNoYXJ0RGF0YS5jdXJyZW50LmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZChzZWxlY3RlZEl0
ZW0pOwotICAgICAgICBFbWJlci5hc3NlcnQoJ3NlbGVjdGVkSXRlbSBzaG91bGQgYWx3YXlzIGJl
IGluIHRoZSBjdXJyZW50IGNoYXJ0IGRhdGEnLCBwb2ludCk7Ci0gICAgICAgIHJldHVybiBwb2lu
dC5tZWFzdXJlbWVudDsKLSAgICB9LAotICAgIHNob3dPdXRsaWVyVGl0bGU6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dPdXRsaWVyJykgPyAnSGlkZSBv
dXRsaWVycycgOiAnU2hvdyBvdXRsaWVycyc7Ci0gICAgfS5wcm9wZXJ0eSgnc2hvd091dGxpZXIn
KSwKLSAgICBfc2VsZWN0ZWRJdGVtSXNNYXJrZWRPdXRsaWVyRGlkQ2hhbmdlOiBmdW5jdGlvbiAo
KQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkTWVhc3VyZW1lbnQgPSB0aGlzLnNlbGVjdGVk
TWVhc3VyZW1lbnQoKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZE1lYXN1cmVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtSXNNYXJrZWRPdXRsaWVyID0g
dGhpcy5nZXQoJ3NlbGVjdGVkSXRlbUlzTWFya2VkT3V0bGllcicpOwotICAgICAgICBpZiAoc2Vs
ZWN0ZWRNZWFzdXJlbWVudC5tYXJrZWRPdXRsaWVyKCkgPT0gc2VsZWN0ZWRJdGVtSXNNYXJrZWRP
dXRsaWVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgcGFuZSA9IHRoaXMuZ2V0
KCdtb2RlbCcpOwotICAgICAgICBzZWxlY3RlZE1lYXN1cmVtZW50LnNldE1hcmtlZE91dGxpZXIo
ISFzZWxlY3RlZEl0ZW1Jc01hcmtlZE91dGxpZXIpLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgYWxlcnQoc2VsZWN0ZWRJdGVtSXNNYXJrZWRPdXRsaWVyID8gJ01hcmtlZCB0aGUgcG9p
bnQgYXMgYW4gb3V0bGllcicgOiAnVGhlIHBvaW50IGlzIG5vIGxvbmdlciBtYXJrZWQgYXMgYW4g
b3V0bGllcicpOwotICAgICAgICAgICAgcGFuZS5yZWZldGNoUnVucygpOwotICAgICAgICB9LCBm
dW5jdGlvbiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gdXBkYXRlIHRo
ZSBzdGF0dXM6JyArIGVycm9yKTsKLSAgICAgICAgfSk7Ci0gICAgfS5vYnNlcnZlcygnc2VsZWN0
ZWRJdGVtSXNNYXJrZWRPdXRsaWVyJyksCi0gICAgYWx0ZXJuYXRpdmVQYW5lczogZnVuY3Rpb24g
KCkKLSAgICB7Ci0gICAgICAgIHZhciBwYW5lID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAg
IHZhciBtZXRyaWMgPSBwYW5lLmdldCgnbWV0cmljJyk7Ci0gICAgICAgIHZhciBjdXJyZW50UGxh
dGZvcm0gPSBwYW5lLmdldCgncGxhdGZvcm0nKTsKLSAgICAgICAgdmFyIHBsYXRmb3JtcyA9IEFw
cC5NYW5pZmVzdC5nZXQoJ3BsYXRmb3JtcycpOwotICAgICAgICBpZiAoIXBsYXRmb3JtcyB8fCAh
bWV0cmljKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBleGl0aW5nUGxhdGZv
cm1zID0ge307Ci0gICAgICAgIHRoaXMuZ2V0KCdwYXJlbnRDb250cm9sbGVyJykuZ2V0KCdwYW5l
cycpLmZvckVhY2goZnVuY3Rpb24gKHBhbmUpIHsKLSAgICAgICAgICAgIGlmIChwYW5lLmdldCgn
bWV0cmljSWQnKSA9PSBtZXRyaWMuZ2V0KCdpZCcpKQotICAgICAgICAgICAgICAgIGV4aXRpbmdQ
bGF0Zm9ybXNbcGFuZS5nZXQoJ3BsYXRmb3JtSWQnKV0gPSB0cnVlOwotICAgICAgICB9KTsKLQot
ICAgICAgICB2YXIgYWx0ZXJuYXRpdmVQYW5lcyA9IHBsYXRmb3Jtcy5maWx0ZXIoZnVuY3Rpb24g
KHBsYXRmb3JtKSB7Ci0gICAgICAgICAgICByZXR1cm4gIWV4aXRpbmdQbGF0Zm9ybXNbcGxhdGZv
cm0uZ2V0KCdpZCcpXSAmJiBwbGF0Zm9ybS5jb250YWluc01ldHJpYyhtZXRyaWMpOwotICAgICAg
ICB9KS5tYXAoZnVuY3Rpb24gKHBsYXRmb3JtKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHBhbmU6IHBhbmUsCi0gICAgICAgICAgICAgICAgcGxhdGZvcm06IHBsYXRm
b3JtLAotICAgICAgICAgICAgICAgIG1ldHJpY3M6IFttZXRyaWNdLAotICAgICAgICAgICAgICAg
IGxhYmVsOiBwbGF0Zm9ybS5nZXQoJ2xhYmVsJykKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIHZhciBjaGlsZE1ldHJpY3MgPSBtZXRyaWMuZ2V0KCdjaGlsZE1ldHJpY3Mn
KTsKLSAgICAgICAgaWYgKGNoaWxkTWV0cmljcyAmJiBjaGlsZE1ldHJpY3MubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBhbHRlcm5hdGl2ZVBhbmVzLnB1c2goewotICAgICAgICAgICAgICAgIHBhbmU6
IHBhbmUsCi0gICAgICAgICAgICAgICAgcGxhdGZvcm06IGN1cnJlbnRQbGF0Zm9ybSwKLSAgICAg
ICAgICAgICAgICBtZXRyaWNzOiBjaGlsZE1ldHJpY3MsCi0gICAgICAgICAgICAgICAgbGFiZWw6
ICdCcmVha2Rvd24nLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gYWx0ZXJuYXRpdmVQYW5lczsKLSAgICB9LnByb3BlcnR5KCdtb2RlbC5tZXRyaWMnLCAnbW9k
ZWwucGxhdGZvcm0nLCAnQXBwLk1hbmlmZXN0LnBsYXRmb3JtcycsCi0gICAgICAgICdwYXJlbnRD
b250cm9sbGVyLnBhbmVzLkBlYWNoLnBsYXRmb3JtSWQnLCAncGFyZW50Q29udHJvbGxlci5wYW5l
cy5AZWFjaC5tZXRyaWNJZCcpLAotfSk7Ci0KLUFwcC5BbmFseXNpc1JvdXRlID0gRW1iZXIuUm91
dGUuZXh0ZW5kKHsKLSAgICBtb2RlbDogZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgc3RvcmUg
PSB0aGlzLnN0b3JlOwotICAgICAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmZldGNoKHN0b3JlKS50
aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiBzdG9yZS5maW5kQWxsKCdhbmFs
eXNpc1Rhc2snKS50aGVuKGZ1bmN0aW9uICh0YXNrcykgewotICAgICAgICAgICAgICAgIHJldHVy
biBFbWJlci5PYmplY3QuY3JlYXRlKHsndGFza3MnOiB0YXNrcy5zb3J0QnkoJ2NyZWF0ZWRBdCcp
LnRvQXJyYXkoKS5yZXZlcnNlKCl9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAg
ICB9LAotfSk7Ci0KLUFwcC5BbmFseXNpc1Rhc2tSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgbW9kZWw6IGZ1bmN0aW9uIChwYXJhbSkKLSAgICB7Ci0gICAgICAgIHZhciBzdG9yZSA9
IHRoaXMuc3RvcmU7Ci0gICAgICAgIHJldHVybiBBcHAuTWFuaWZlc3QuZmV0Y2goc3RvcmUpLnRo
ZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmZpbmQoJ2FuYWx5c2lz
VGFzaycsIHBhcmFtLnRhc2tJZCk7Ci0gICAgICAgIH0pOwotICAgIH0sCi19KTsKLQotQXBwLkFu
YWx5c2lzVGFza0NvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgbGFi
ZWw6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdtb2RlbC5uYW1lJyksCi0gICAgcGxhdGZvcm06IEVt
YmVyLmNvbXB1dGVkLmFsaWFzKCdtb2RlbC5wbGF0Zm9ybScpLAotICAgIG1ldHJpYzogRW1iZXIu
Y29tcHV0ZWQuYWxpYXMoJ21vZGVsLm1ldHJpYycpLAotICAgIGRldGFpbHM6IEVtYmVyLmNvbXB1
dGVkLmFsaWFzKCdwYW5lLmRldGFpbHMnKSwKLSAgICByb290czogW10sCi0gICAgYnVnVHJhY2tl
cnM6IFtdLAotICAgIHBvc3NpYmxlUmVwZXRpdGlvbkNvdW50czogWzEsIDIsIDMsIDQsIDUsIDZd
LAotICAgIGFuYWx5c2lzUmVzdWx0T3B0aW9uczogWwotICAgICAgICB7bGFiZWw6ICdTdGlsbCBp
biBpbnZlc3RpZ2F0aW9uJywgcmVzdWx0OiBudWxsfSwKLSAgICAgICAge2xhYmVsOiAnSW5jb25j
bHVzaXZlJywgcmVzdWx0OiAnaW5jb25jbHVzaXZlJywgbmVlZGVkOiB0cnVlfSwKLSAgICAgICAg
e2xhYmVsOiAnRGVmaW5pdGUgcHJvZ3Jlc3Npb24nLCByZXN1bHQ6ICdwcm9ncmVzc2lvbicsIG5l
ZWRlZDogdHJ1ZX0sCi0gICAgICAgIHtsYWJlbDogJ0RlZmluaXRlIHJlZ3Jlc3Npb24nLCByZXN1
bHQ6ICdyZWdyZXNzaW9uJywgbmVlZGVkOiB0cnVlfSwKLSAgICAgICAge2xhYmVsOiAnTm8gY2hh
bmdlJywgcmVzdWx0OiAndW5jaGFuZ2VkJywgbmVlZHNGZWVkYmFjazogdHJ1ZX0sCi0gICAgXSwK
LSAgICBzaG91bGROb3RIYXZlQmVlbkNyZWF0ZWQ6IGZhbHNlLAotICAgIG5lZWRzRmVlZGJhY2s6
IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgY2hvc2VuID0gdGhpcy5nZXQoJ2Nob3Nl
bkFuYWx5c2lzUmVzdWx0Jyk7Ci0gICAgICAgIHJldHVybiBjaG9zZW4gJiYgY2hvc2VuLm5lZWRz
RmVlZGJhY2s7Ci0gICAgfS5wcm9wZXJ0eSgnY2hvc2VuQW5hbHlzaXNSZXN1bHQnKSwKLSAgICBf
dXBkYXRlQ2hvc2VuQW5hbHlzaXNSZXN1bHQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2
YXIgYW5hbHlzaXNUYXNrID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAgIGlmICghYW5hbHlz
aXNUYXNrKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgY3VycmVudFJlc3VsdCA9
IGFuYWx5c2lzVGFzay5nZXQoJ3Jlc3VsdCcpOwotICAgICAgICBmb3IgKHZhciBvcHRpb24gb2Yg
dGhpcy5hbmFseXNpc1Jlc3VsdE9wdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChvcHRpb24ucmVz
dWx0ID09IGN1cnJlbnRSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldCgnY2hvc2Vu
QW5hbHlzaXNSZXN1bHQnLCBvcHRpb24pOwotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0ub2JzZXJ2ZXMoJ21vZGVs
JyksCi0gICAgX3Rhc2tVcGRhdGVkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIG1v
ZGVsID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAgIGlmICghbW9kZWwpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgQXBwLk1hbmlmZXN0LmZldGNoKHRoaXMuc3RvcmUpLnRoZW4o
dGhpcy5fZmV0Y2hlZE1hbmlmZXN0LmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLnNldCgncGFu
ZScsIEFwcC5QYW5lLmNyZWF0ZSh7Ci0gICAgICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSwKLSAg
ICAgICAgICAgIHBsYXRmb3JtSWQ6IG1vZGVsLmdldCgncGxhdGZvcm0nKS5nZXQoJ2lkJyksCi0g
ICAgICAgICAgICBtZXRyaWNJZDogbW9kZWwuZ2V0KCdtZXRyaWMnKS5nZXQoJ2lkJyksCi0gICAg
ICAgIH0pKTsKLQotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIG1vZGVsLmdldCgn
dGVzdEdyb3VwcycpLnRoZW4oZnVuY3Rpb24gKGdyb3VwcykgewotICAgICAgICAgICAgc2VsZi5z
ZXQoJ3Rlc3RHcm91cFBhbmVzJywgZ3JvdXBzLm1hcChmdW5jdGlvbiAoZ3JvdXApIHsgcmV0dXJu
IEFwcC5UZXN0R3JvdXBQYW5lLmNyZWF0ZSh7Y29udGVudDogZ3JvdXB9KTsgfSkpOwotICAgICAg
ICB9KTsKLSAgICB9Lm9ic2VydmVzKCdtb2RlbCcsICdtb2RlbC50ZXN0R3JvdXBzJykub24oJ2lu
aXQnKSwKLSAgICBfZmV0Y2hlZE1hbmlmZXN0OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAg
dmFyIHRyYWNrZXJJZFRvQnVnTnVtYmVyID0ge307Ci0gICAgICAgIHRoaXMuZ2V0KCdtb2RlbCcp
LmdldCgnYnVncycpLmZvckVhY2goZnVuY3Rpb24gKGJ1ZykgewotICAgICAgICAgICAgdHJhY2tl
cklkVG9CdWdOdW1iZXJbYnVnLmdldCgnYnVnVHJhY2tlcicpLmdldCgnaWQnKV0gPSBidWcuZ2V0
KCdudW1iZXInKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5zZXQoJ2J1Z1RyYWNrZXJz
JywgQXBwLk1hbmlmZXN0LmdldCgnYnVnVHJhY2tlcnMnKS5tYXAoZnVuY3Rpb24gKGJ1Z1RyYWNr
ZXIpIHsKLSAgICAgICAgICAgIHZhciBidWdOdW1iZXIgPSB0cmFja2VySWRUb0J1Z051bWJlclti
dWdUcmFja2VyLmdldCgnaWQnKV07Ci0gICAgICAgICAgICByZXR1cm4gRW1iZXIuT2JqZWN0UHJv
eHkuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBlbGVtZW50SWQ6ICdidWctJyArIGJ1Z1RyYWNr
ZXIuZ2V0KCdpZCcpLAotICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGJ1Z1RyYWNrZXIsCi0gICAg
ICAgICAgICAgICAgYnVnTnVtYmVyOiBidWdOdW1iZXIsCi0gICAgICAgICAgICAgICAgYnVnVXJs
OiBidWdUcmFja2VyLnVybEZyb21CdWdOdW1iZXIoYnVnTnVtYmVyKSwKLSAgICAgICAgICAgICAg
ICBlZGl0ZWRCdWdOdW1iZXI6IGJ1Z051bWJlciwKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KSk7Ci0gICAgfSwKLSAgICBfY2hhcnREYXRhQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBwYW5lID0gdGhpcy5nZXQoJ3BhbmUnKTsKLSAgICAgICAgaWYgKCFwYW5lKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjaGFydERhdGEgPSBwYW5lLmdldCgn
Y2hhcnREYXRhJyk7Ci0gICAgICAgIGlmICghY2hhcnREYXRhKQotICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRUaW1lU2VyaWVzID0gY2hhcnREYXRhLmN1cnJl
bnQ7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgnY2hhcnREYXRhLmN1cnJlbnQgc2hvdWxkIGFsd2F5
cyBiZSBkZWZpbmVkJywgY3VycmVudFRpbWVTZXJpZXMpOwotCi0gICAgICAgIHZhciBzdGFydCA9
IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZCh0aGlzLmdldCgnbW9k
ZWwnKS5nZXQoJ3N0YXJ0UnVuJykpOwotICAgICAgICB2YXIgZW5kID0gY3VycmVudFRpbWVTZXJp
ZXMuZmluZFBvaW50QnlNZWFzdXJlbWVudElkKHRoaXMuZ2V0KCdtb2RlbCcpLmdldCgnZW5kUnVu
JykpOwotICAgICAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHsKLSAgICAgICAgICAgIGlmICghcGFu
ZS5nZXQoJ3Nob3dPdXRsaWVyJykpCi0gICAgICAgICAgICAgICAgcGFuZS5zZXQoJ3Nob3dPdXRs
aWVyJywgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgaGlnaGxpZ2h0ZWRJdGVtcyA9IHt9OwotICAgICAgICBoaWdobGlnaHRlZEl0ZW1zW3N0YXJ0
Lm1lYXN1cmVtZW50LmlkKCldID0gdHJ1ZTsKLSAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtc1tlbmQu
bWVhc3VyZW1lbnQuaWQoKV0gPSB0cnVlOwotCi0gICAgICAgIHZhciBmb3JtYXRlZFBvaW50cyA9
IGN1cnJlbnRUaW1lU2VyaWVzLnNlcmllc0JldHdlZW5Qb2ludHMoc3RhcnQsIGVuZCkubWFwKGZ1
bmN0aW9uIChwb2ludCwgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgaWQ6IHBvaW50Lm1lYXN1cmVtZW50LmlkKCksCi0gICAgICAgICAgICAgICAgbWVhc3Vy
ZW1lbnQ6IHBvaW50Lm1lYXN1cmVtZW50LAotICAgICAgICAgICAgICAgIGxhYmVsOiAnUG9pbnQg
JyArIChpbmRleCArIDEpLAotICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFydERhdGEuZm9ybWF0
dGVyKHBvaW50LnZhbHVlKSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IHZhciBtYXJnaW4gPSAoZW5kLnRpbWUgLSBzdGFydC50aW1lKSAqIDAuMTsKLSAgICAgICAgdGhp
cy5zZXQoJ2hpZ2hsaWdodGVkSXRlbXMnLCBoaWdobGlnaHRlZEl0ZW1zKTsKLSAgICAgICAgdGhp
cy5zZXQoJ292ZXJ2aWV3RW5kUG9pbnRzJywgW3N0YXJ0LCBlbmRdKTsKLSAgICAgICAgdGhpcy5z
ZXQoJ2FuYWx5c2lzUG9pbnRzJywgZm9ybWF0ZWRQb2ludHMpOwotCi0gICAgICAgIHZhciBvdmVy
dmlld0RvbWFpbiA9IFtzdGFydC50aW1lIC0gbWFyZ2luLCArZW5kLnRpbWUgKyBtYXJnaW5dOwot
Ci0gICAgICAgIHZhciB0ZXN0R3JvdXBQYW5lcyA9IHRoaXMuZ2V0KCd0ZXN0R3JvdXBQYW5lcycp
OwotICAgICAgICBpZiAodGVzdEdyb3VwUGFuZXMpIHsKLSAgICAgICAgICAgIHRlc3RHcm91cFBh
bmVzLnNldEVhY2goJ292ZXJ2aWV3UGFuZScsIHBhbmUpOwotICAgICAgICAgICAgdGVzdEdyb3Vw
UGFuZXMuc2V0RWFjaCgnb3ZlcnZpZXdEb21haW4nLCBvdmVydmlld0RvbWFpbik7Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLnNldCgnb3ZlcnZpZXdEb21haW4nLCBvdmVydmlld0RvbWFpbik7
Ci0gICAgfS5vYnNlcnZlcygncGFuZS5jaGFydERhdGEnKSwKLSAgICB1cGRhdGVSb290Q29uZmln
dXJhdGlvbnM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgYW5hbHlzaXNQb2ludHMg
PSB0aGlzLmdldCgnYW5hbHlzaXNQb2ludHMnKTsKLSAgICAgICAgaWYgKCFhbmFseXNpc1BvaW50
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHJlcG9zaXRvcnlUb1JldmlzaW9u
cyA9IHt9OwotICAgICAgICBhbmFseXNpc1BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludCwg
cG9pbnRJbmRleCkgewotICAgICAgICAgICAgdmFyIHJldmlzaW9ucyA9IHBvaW50Lm1lYXN1cmVt
ZW50LmZvcm1hdHRlZFJldmlzaW9ucygpOwotICAgICAgICAgICAgZm9yICh2YXIgcmVwb3NpdG9y
eUlkIGluIHJldmlzaW9ucykgewotICAgICAgICAgICAgICAgIGlmICghcmVwb3NpdG9yeVRvUmV2
aXNpb25zW3JlcG9zaXRvcnlJZF0pCi0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlUb1Jl
dmlzaW9uc1tyZXBvc2l0b3J5SWRdID0gbmV3IEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgdmFy
IHJldmlzaW9uID0gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF07Ci0gICAgICAgICAgICAgICAgcmVw
b3NpdG9yeVRvUmV2aXNpb25zW3JlcG9zaXRvcnlJZF0ucHVzaCh7dGltZTogcG9pbnQubWVhc3Vy
ZW1lbnQubGF0ZXN0Q29tbWl0VGltZSgpLCB2YWx1ZTogcmV2aXNpb24uY3VycmVudFJldmlzaW9u
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciBjb21taXRzUHJv
bWlzZXMgPSBbXTsKLSAgICAgICAgdmFyIHJlcG9zaXRvcnlUb0luZGV4ID0ge307Ci0gICAgICAg
IGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXBvc2l0b3J5VG9SZXZpc2lvbnMpIHsKLSAgICAg
ICAgICAgIHZhciByZXZpc2lvbnMgPSByZXBvc2l0b3J5VG9SZXZpc2lvbnNbcmVwb3NpdG9yeUlk
XS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnRpbWUgLSBiLnRpbWU7IH0pOwotICAg
ICAgICAgICAgcmVwb3NpdG9yeVRvSW5kZXhbcmVwb3NpdG9yeUlkXSA9IGNvbW1pdHNQcm9taXNl
cy5sZW5ndGg7Ci0gICAgICAgICAgICBjb21taXRzUHJvbWlzZXMucHVzaChDb21taXRMb2dzLmZl
dGNoQ29tbWl0cyhyZXBvc2l0b3J5SWQsIHJldmlzaW9uc1swXS52YWx1ZSwgcmV2aXNpb25zW3Jl
dmlzaW9ucy5sZW5ndGggLSAxXS52YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOwotICAgICAgICB0aGlzLmdldCgnbW9kZWwnKS5nZXQoJ3RyaWdnZXJhYmxlJyku
dGhlbihmdW5jdGlvbiAodHJpZ2dlcmFibGUpIHsKLSAgICAgICAgICAgIGlmICghdHJpZ2dlcmFi
bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgRW1iZXIuUlNWUC5Qcm9t
aXNlLmFsbChjb21taXRzUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKGNvbW1pdHNMaXN0KSB7Ci0g
ICAgICAgICAgICAgICAgc2VsZi5zZXQoJ2NvbmZpZ3VyYXRpb25zJywgWydBJywgJ0InXSk7Ci0g
ICAgICAgICAgICAgICAgc2VsZi5zZXQoJ3Jvb3RDb25maWd1cmF0aW9ucycsIHRyaWdnZXJhYmxl
LmdldCgnYWNjZXB0ZWRSZXBvc2l0b3JpZXMnKS5tYXAoZnVuY3Rpb24gKHJlcG9zaXRvcnkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZUNvbmZpZ3VyYXRpb24ocmVw
b3NpdG9yeSwgY29tbWl0c0xpc3RbcmVwb3NpdG9yeVRvSW5kZXhbcmVwb3NpdG9yeS5nZXQoJ2lk
JyldXSwgYW5hbHlzaXNQb2ludHMpOwotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9KTsKLSAgICB9Lm9ic2VydmVzKCdhbmFseXNpc1BvaW50cycpLAotICAg
IF9jcmVhdGVDb25maWd1cmF0aW9uOiBmdW5jdGlvbihyZXBvc2l0b3J5LCBjb21taXRzLCBhbmFs
eXNpc1BvaW50cykgewotICAgICAgICB2YXIgcmVwb3NpdG9yeUlkID0gcmVwb3NpdG9yeS5nZXQo
J2lkJyk7Ci0KLSAgICAgICAgdmFyIHJldmlzaW9uVG9Qb2ludHMgPSB7fTsKLSAgICAgICAgdmFy
IG1pc3NpbmdQb2ludHMgPSBbXTsKLSAgICAgICAgYW5hbHlzaXNQb2ludHMuZm9yRWFjaChmdW5j
dGlvbiAocG9pbnQsIHBvaW50SW5kZXgpIHsKLSAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IHBv
aW50Lm1lYXN1cmVtZW50LnJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5SWQpOwotICAg
ICAgICAgICAgaWYgKCFyZXZpc2lvbikgewotICAgICAgICAgICAgICAgIG1pc3NpbmdQb2ludHMu
cHVzaChwb2ludEluZGV4KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIXJldmlzaW9uVG9Qb2ludHNbcmV2aXNpb25dKQotICAgICAgICAg
ICAgICAgIHJldmlzaW9uVG9Qb2ludHNbcmV2aXNpb25dID0gW107Ci0gICAgICAgICAgICByZXZp
c2lvblRvUG9pbnRzW3JldmlzaW9uXS5wdXNoKHBvaW50SW5kZXgpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBpZiAoIWNvbW1pdHMgfHwgIWNvbW1pdHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBj
b21taXRzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciByZXZpc2lvbiBpbiByZXZpc2lvblRv
UG9pbnRzKQotICAgICAgICAgICAgICAgIGNvbW1pdHMucHVzaCh7cmV2aXNpb246IHJldmlzaW9u
fSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgb3B0aW9ucyA9IFt7bGFiZWw6ICdOb25lJ30s
IHtsYWJlbDogJ0N1c3RvbScsIGlzQ3VzdG9tOiB0cnVlfV07Ci0gICAgICAgIGlmIChtaXNzaW5n
UG9pbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgb3B0aW9uc1swXS5sYWJlbCArPSAnICcgKyB0
aGlzLl9sYWJlbEZvclBvaW50cyhtaXNzaW5nUG9pbnRzKTsKLSAgICAgICAgICAgIG9wdGlvbnNb
MF0ucG9pbnRzID0gbWlzc2luZ1BvaW50czsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFy
IGNvbW1pdCBvZiBjb21taXRzKSB7Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBjb21taXQu
cmV2aXNpb247Ci0gICAgICAgICAgICB2YXIgcG9pbnRzID0gcmV2aXNpb25Ub1BvaW50c1tyZXZp
c2lvbl07Ci0gICAgICAgICAgICB2YXIgbGFiZWwgPSBNZWFzdXJlbWVudC5mb3JtYXRSZXZpc2lv
blJhbmdlKHJldmlzaW9uKS5sYWJlbDsKLSAgICAgICAgICAgIGlmIChwb2ludHMpCi0gICAgICAg
ICAgICAgICAgbGFiZWwgKz0gJyAnICsgdGhpcy5fbGFiZWxGb3JQb2ludHMocG9pbnRzKTsKLSAg
ICAgICAgICAgIG9wdGlvbnMucHVzaCh7dmFsdWU6IHJldmlzaW9uLCBsYWJlbDogbGFiZWwsIHBv
aW50czogcG9pbnRzfSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZmlyc3RPcHRpb24gPSBu
dWxsOwotICAgICAgICB2YXIgbGFzdE9wdGlvbiA9IG51bGw7Ci0gICAgICAgIGZvciAodmFyIG9w
dGlvbiBvZiBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgcG9pbnRzID0gb3B0aW9uLnBvaW50
czsKLSAgICAgICAgICAgIGlmICghcG9pbnRzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKHBvaW50cy5pbmRleE9mKDApID49IDApCi0gICAgICAgICAgICAgICAg
Zmlyc3RPcHRpb24gPSBvcHRpb247Ci0gICAgICAgICAgICBpZiAocG9pbnRzLmluZGV4T2YoYW5h
bHlzaXNQb2ludHMubGVuZ3RoIC0gMSkgPj0gMCkKLSAgICAgICAgICAgICAgICBsYXN0T3B0aW9u
ID0gb3B0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEVtYmVyLk9iamVjdC5jcmVh
dGUoewotICAgICAgICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9yeSwKLSAgICAgICAgICAgIG5h
bWU6IHJlcG9zaXRvcnkuZ2V0KCduYW1lJyksCi0gICAgICAgICAgICBzZXRzOiBbCi0gICAgICAg
ICAgICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7bmFtZTogJ0FbJyArIHJlcG9zaXRvcnlJZCAr
ICddJywKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uOiBmaXJzdE9wdGlvbn0pLAotICAgICAgICAgICAgICAgIEVtYmVy
Lk9iamVjdC5jcmVhdGUoe25hbWU6ICdCWycgKyByZXBvc2l0b3J5SWQgKyAnXScsCi0gICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVj
dGlvbjogbGFzdE9wdGlvbn0pLAotICAgICAgICAgICAgXX0pOwotICAgIH0sCi0gICAgX2xhYmVs
Rm9yUG9pbnRzOiBmdW5jdGlvbiAocG9pbnRzKQotICAgIHsKLSAgICAgICAgdmFyIHNlcmlhbGl6
ZWRQb2ludHMgPSB0aGlzLl9zZXJpYWxpemVOdW1iZXJzU2tpcHBpbmdDb25zZWN1dGl2ZUVudHJp
ZXMocG9pbnRzKTsKLSAgICAgICAgcmV0dXJuIFsnKCcsIHBvaW50cy5sZW5ndGggPiAxID8gJ3Bv
aW50cycgOiAncG9pbnQnLCBzZXJpYWxpemVkUG9pbnRzLCAnKSddLmpvaW4oJyAnKTsKLSAgICB9
LAotICAgIF9zZXJpYWxpemVOdW1iZXJzU2tpcHBpbmdDb25zZWN1dGl2ZUVudHJpZXM6IGZ1bmN0
aW9uIChudW1iZXJzKSB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXJzWzBdOwotICAgICAg
ICBmb3IgKHZhciBpID0gMTsgaSA8IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChudW1iZXJzW2kgLSAxXSArIDEgPT0gbnVtYmVyc1tpXSkgewotICAgICAgICAgICAgICAg
IHdoaWxlIChudW1iZXJzW2ldICsgMSA9PSBudW1iZXJzW2kgKyAxXSkKLSAgICAgICAgICAgICAg
ICAgICAgaSsrOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnLScgKyBudW1iZXJzW2ldOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVz
dWx0ICs9ICcsICcgKyBudW1iZXJzW2ldCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9LAotICAgIGFjdGlvbnM6IHsKLSAgICAgICAgYWRkQnVnOiBmdW5jdGlvbiAoYnVn
VHJhY2tlciwgYnVnTnVtYmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbW9kZWwgPSB0
aGlzLmdldCgnbW9kZWwnKTsKLSAgICAgICAgICAgIGlmICghYnVnVHJhY2tlcikKLSAgICAgICAg
ICAgICAgICBidWdUcmFja2VyID0gdGhpcy5nZXQoJ2J1Z1RyYWNrZXJzJykub2JqZWN0QXQoMCk7
Ci0gICAgICAgICAgICB2YXIgYnVnID0ge3Rhc2s6IHRoaXMuZ2V0KCdtb2RlbCcpLCBidWdUcmFj
a2VyOiBidWdUcmFja2VyLmdldCgnY29udGVudCcpLCBudW1iZXI6IGJ1Z051bWJlcn07Ci0gICAg
ICAgICAgICB0aGlzLnN0b3JlLmNyZWF0ZVJlY29yZCgnYnVnJywgYnVnKS5zYXZlKCkudGhlbihm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgYWxlcnQoJ0Fzc29jaWF0ZWQgdGhlICcgKyBi
dWdUcmFja2VyLmdldCgnbmFtZScpICsgJyAnICsgYnVnTnVtYmVyICsgJyB3aXRoIHRoaXMgYW5h
bHlzaXMuJyk7Ci0gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBhbGVydCgnRmFpbGVkIHRvIGFzc29jaWF0ZSB0aGUgYnVnOiAnICsgZXJyb3IpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgIGRlbGV0ZUJ1ZzogZnVuY3Rpb24gKGJ1
ZykKLSAgICAgICAgewotICAgICAgICAgICAgYnVnLmRlc3Ryb3lSZWNvcmQoKS50aGVuKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgICAgICAgICBhbGVydCgnU3VjY2Vzc2Z1bGx5IGRlYXNzb2NpYXRl
ZCB0aGUgYnVnLicpOwotICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBkaXNhc3NvY2lhdGUgdGhlIGJ1ZzogJyArIGVycm9y
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAgICBzYXZlU3RhdHVzOiBmdW5j
dGlvbiAoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY2hvc2VuUmVzdWx0ID0gdGhpcy5n
ZXQoJ2Nob3NlbkFuYWx5c2lzUmVzdWx0Jyk7Ci0gICAgICAgICAgICB2YXIgYW5hbHlzaXNUYXNr
ID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAgICAgICBhbmFseXNpc1Rhc2suc2V0KCdyZXN1
bHQnLCBjaG9zZW5SZXN1bHQucmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChjaG9zZW5SZXN1bHQu
bmVlZGVkKQotICAgICAgICAgICAgICAgIGFuYWx5c2lzVGFzay5zZXQoJ25lZWRlZCcsIHRydWUp
OwotICAgICAgICAgICAgZWxzZSBpZiAoY2hvc2VuUmVzdWx0Lm5lZWRzRmVlZGJhY2sgJiYgdGhp
cy5nZXQoJ25vdE5lZWRlZCcpKQotICAgICAgICAgICAgICAgIGFuYWx5c2lzVGFzay5zZXQoJ25l
ZWRlZCcsIGZhbHNlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbmFseXNp
c1Rhc2suc2V0KCduZWVkZWQnLCBudWxsKTsKLQotICAgICAgICAgICAgYW5hbHlzaXNUYXNrLnNh
dmVTdGF0dXMoKS50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICBhbGVydCgnU2F2
ZWQgdGhlIHN0YXR1cycpOwotICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAg
ICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBzYXZlIHRoZSBzdGF0dXM6ICcgKyBlcnJvcik7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgY3JlYXRlVGVzdEdyb3VwOiBm
dW5jdGlvbiAobmFtZSwgcmVwZXRpdGlvbkNvdW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgYW5hbHlzaXNUYXNrID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAgICAgICBpZiAoYW5h
bHlzaXNUYXNrLmdldCgndGVzdEdyb3VwcycpLmlzQW55KCduYW1lJywgbmFtZSkpIHsKLSAgICAg
ICAgICAgICAgICBhbGVydCgnQ2Fubm90IGNyZWF0ZSB0d28gdGVzdCBncm91cHMgb2YgdGhlIHNh
bWUgbmFtZS4nKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciByb290cyA9IHt9OwotICAgICAgICAgICAgdmFyIHJvb3RDb25maWd1cmF0
aW9ucyA9IHRoaXMuZ2V0KCdyb290Q29uZmlndXJhdGlvbnMnKS50b0FycmF5KCk7Ci0gICAgICAg
ICAgICBmb3IgKHZhciByb290IG9mIHJvb3RDb25maWd1cmF0aW9ucykgewotICAgICAgICAgICAg
ICAgIHZhciBzZXRzID0gcm9vdC5nZXQoJ3NldHMnKTsKLSAgICAgICAgICAgICAgICB2YXIgaGFz
U2VsZWN0aW9uID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IGl0ZW0uZ2V0KCdzZWxlY3Rpb24nKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGVjdGlvbi52YWx1ZSB8fCAoc2VsZWN0aW9uLmlzQ3VzdG9tICYmIGl0ZW0uZ2V0KCdj
dXN0b21WYWx1ZScpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFz
ZXRzLmFueShoYXNTZWxlY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXNldHMuZXZlcnkoaGFzU2VsZWN0aW9uKSkgewotICAgICAgICAg
ICAgICAgICAgICBhbGVydCgnT25seSBzb21lIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzICcgKyBy
b290LmdldCgnbmFtZScpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByb290c1tyb290LmdldCgnbmFtZScpXSA9IHNldHMu
bWFwKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24g
PSBpdGVtLmdldCgnc2VsZWN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxl
Y3Rpb24uaXNDdXN0b20gPyBpdGVtLmdldCgnY3VzdG9tVmFsdWUnKSA6IHNlbGVjdGlvbi52YWx1
ZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQXBw
LlRlc3RHcm91cC5jcmVhdGUoYW5hbHlzaXNUYXNrLCBuYW1lLCByb290cywgcmVwZXRpdGlvbkNv
dW50KS50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikg
ewotICAgICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IHRlc3QgZ3Jv
dXA6JyArIGVycm9yKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAgICB0b2dn
bGVTaG93UmVxdWVzdExpc3Q6IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25maWd1cmF0aW9uLnRvZ2dsZVByb3BlcnR5KCdzaG93UmVxdWVzdExpc3Qn
KTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgX3VwZGF0ZVJvb3RzQnlTZWxlY3RlZFBvaW50czog
ZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciByb290Q29uZmlndXJhdGlvbnMgPSB0aGlz
LmdldCgncm9vdENvbmZpZ3VyYXRpb25zJyk7Ci0gICAgICAgIHZhciBwYW5lID0gdGhpcy5nZXQo
J3BhbmUnKTsKLSAgICAgICAgaWYgKCFyb290Q29uZmlndXJhdGlvbnMgfHwgIXBhbmUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJvb3RTZXRQb2ludHM7Ci0gICAgICAgIHZh
ciBzZWxlY3RlZFBvaW50cyA9IHBhbmUuZ2V0KCdzZWxlY3RlZFBvaW50cycpOwotICAgICAgICBp
ZiAoc2VsZWN0ZWRQb2ludHMgJiYgc2VsZWN0ZWRQb2ludHMubGVuZ3RoID49IDIpCi0gICAgICAg
ICAgICByb290U2V0UG9pbnRzID0gW3NlbGVjdGVkUG9pbnRzWzBdLCBzZWxlY3RlZFBvaW50c1tz
ZWxlY3RlZFBvaW50cy5sZW5ndGggLSAxXV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJv
b3RTZXRQb2ludHMgPSB0aGlzLmdldCgnb3ZlcnZpZXdFbmRQb2ludHMnKTsKLSAgICAgICAgaWYg
KCFyb290U2V0UG9pbnRzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJvb3RDb25m
aWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7Ci0gICAgICAgICAgICByb290Lmdl
dCgnc2V0cycpLmZvckVhY2goZnVuY3Rpb24gKHNldCwgc2V0SW5kZXgpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoc2V0SW5kZXggPj0gcm9vdFNldFBvaW50cy5sZW5ndGgpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0UmV2aXNpb24gPSByb290
U2V0UG9pbnRzW3NldEluZGV4XS5tZWFzdXJlbWVudC5yZXZpc2lvbkZvclJlcG9zaXRvcnkocm9v
dC5nZXQoJ3JlcG9zaXRvcnknKS5nZXQoJ2lkJykpOwotICAgICAgICAgICAgICAgIHZhciBzZWxl
Y3RlZE9wdGlvbjsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UmV2aXNpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uID0gc2V0LmdldCgnb3B0aW9ucycpLmZpbmQoZnVu
Y3Rpb24gKG9wdGlvbikgeyByZXR1cm4gb3B0aW9uLnZhbHVlID09IHRhcmdldFJldmlzaW9uOyB9
KTsKLSAgICAgICAgICAgICAgICBzZXQuc2V0KCdzZWxlY3Rpb24nLCBzZWxlY3RlZE9wdGlvbiB8
fCBzZXQuZ2V0KCdvcHRpb25zJylbMF0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwot
Ci0gICAgfS5vYnNlcnZlcygncGFuZS5zZWxlY3RlZFBvaW50cycpLAotfSk7Ci0KLUFwcC5UZXN0
R3JvdXBQYW5lID0gRW1iZXIuT2JqZWN0UHJveHkuZXh0ZW5kKHsKLSAgICBfcG9wdWxhdGU6IGZ1
bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgYnVpbGRSZXF1ZXN0cyA9IHRoaXMuZ2V0KCdi
dWlsZFJlcXVlc3RzJyk7Ci0gICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IHRoaXMuZ2V0KCd0ZXN0
UmVzdWx0cycpOwotICAgICAgICBpZiAoIWJ1aWxkUmVxdWVzdHMgfHwgIXRlc3RSZXN1bHRzKQot
ICAgICAgICAgICAgcmV0dXJuIFtdOwotCi0gICAgICAgIHZhciByZXBvc2l0b3JpZXMgPSB0aGlz
Ll9jb21wdXRlUmVwb3NpdG9yeUxpc3QoKTsKLSAgICAgICAgdGhpcy5zZXQoJ3JlcG9zaXRvcmll
cycsIHJlcG9zaXRvcmllcyk7Ci0KLSAgICAgICAgdmFyIHJlcXVlc3RzQnlSb29TZXQgPSB0aGlz
Ll9ncm91cFJlcXVlc3RzQnlDb25maWd1cmF0aW9ucyhidWlsZFJlcXVlc3RzKTsKLQotICAgICAg
ICB2YXIgY29uZmlndXJhdGlvbnMgPSBbXTsKLSAgICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAg
ICAgdmFyIHJhbmdlID0ge21pbjogSW5maW5pdHksIG1heDogLUluZmluaXR5fTsKLSAgICAgICAg
Zm9yICh2YXIgcm9vdFNldElkIGluIHJlcXVlc3RzQnlSb29TZXQpIHsKLSAgICAgICAgICAgIHZh
ciBjb25maWdMZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCdBJy5jaGFyQ29kZUF0KDApICsg
aW5kZXgrKyk7Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9ucy5wdXNoKHRoaXMuX2NyZWF0ZUNv
bmZpZ3VyYXRpb25TdW1tYXJ5KHJlcXVlc3RzQnlSb29TZXRbcm9vdFNldElkXSwgY29uZmlnTGV0
dGVyLCByYW5nZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG1hcmdpbiA9IDAuMSAqIChy
YW5nZS5tYXggLSByYW5nZS5taW4pOwotICAgICAgICByYW5nZS5tYXggKz0gbWFyZ2luOwotICAg
ICAgICByYW5nZS5taW4gLT0gbWFyZ2luOwotCi0gICAgICAgIHRoaXMuc2V0KCdjb25maWd1cmF0
aW9ucycsIGNvbmZpZ3VyYXRpb25zKTsKLQotICAgICAgICB2YXIgcHJvYmFiaWxpdHlGb3JtYXR0
ZXIgPSBkMy5mb3JtYXQoJy4ycCcpOwotICAgICAgICB2YXIgY29tcGFyaXNvbnMgPSBbXTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9ucy5sZW5ndGggLSAxOyBpKysp
IHsKLSAgICAgICAgICAgIHZhciBzdW1tYXJ5MSA9IGNvbmZpZ3VyYXRpb25zW2ldLnN1bW1hcnk7
Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBjb25maWd1cmF0aW9ucy5sZW5n
dGg7IGorKykgewotICAgICAgICAgICAgICAgIHZhciBzdW1tYXJ5MiA9IGNvbmZpZ3VyYXRpb25z
W2pdLnN1bW1hcnk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWVEZWx0YSA9IHRlc3RSZXN1
bHRzLmRlbHRhRm9ybWF0dGVyKHN1bW1hcnkyLnZhbHVlIC0gc3VtbWFyeTEudmFsdWUpOwotICAg
ICAgICAgICAgICAgIHZhciByZWxhdGl2ZURlbHRhID0gZDMuZm9ybWF0KCcrLjJwJykoKHN1bW1h
cnkyLnZhbHVlIC0gc3VtbWFyeTEudmFsdWUpIC8gc3VtbWFyeTEudmFsdWUpOwotCi0gICAgICAg
ICAgICAgICAgdmFyIHN0YXQgPSB0aGlzLl9jb21wdXRlU3RhdGlzdGljYWxTaWduaWZpY2FuY2Uo
c3VtbWFyeTEubWVhc3VyZWRWYWx1ZXMsIHN1bW1hcnkyLm1lYXN1cmVkVmFsdWVzKTsKLSAgICAg
ICAgICAgICAgICBjb21wYXJpc29ucy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgbGFiZWw6
IHN1bW1hcnkxLmNvbmZpZ0xldHRlciArICcgLyAnICsgc3VtbWFyeTIuY29uZmlnTGV0dGVyLAot
ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlOiBpc05hTihzdW1tYXJ5MS52YWx1ZSkgfHwg
aXNOYU4oc3VtbWFyeTIudmFsdWUpID8gJ04vQScgOiB2YWx1ZURlbHRhICsgJyAoJyArIHJlbGF0
aXZlRGVsdGEgKyAnKSAnLAotICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHN0YXQsCi0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5z
ZXQoJ2NvbXBhcmlzb25zJywgY29tcGFyaXNvbnMpOwotICAgIH0ub2JzZXJ2ZXMoJ3Rlc3RSZXN1
bHRzJywgJ2J1aWxkUmVxdWVzdHMnKSwKLSAgICBfY29tcHV0ZVN0YXRpc3RpY2FsU2lnbmlmaWNh
bmNlOiBmdW5jdGlvbiAodmFsdWVzMSwgdmFsdWVzMikKLSAgICB7Ci0gICAgICAgIHZhciB0Rm9y
bWF0dGVyID0gZDMuZm9ybWF0KCcuM2cnKTsKLSAgICAgICAgdmFyIHByb2JhYmlsaXR5Rm9ybWF0
dGVyID0gZDMuZm9ybWF0KCcuMnAnKTsKLSAgICAgICAgdmFyIHN0YXRpc3RpY3MgPSBTdGF0aXN0
aWNzLnByb2JhYmlsaXR5UmFuZ2VGb3JXZWxjaHNUKHZhbHVlczEsIHZhbHVlczIpOwotICAgICAg
ICBpZiAoaXNOYU4oc3RhdGlzdGljcy50KSB8fCBpc05hTihzdGF0aXN0aWNzLmRlZ3JlZXNPZkZy
ZWVkb20pKQotICAgICAgICAgICAgcmV0dXJuICdOL0EnOwotCi0gICAgICAgIHZhciBkZXRhaWxz
ID0gJyAodD0nICsgdEZvcm1hdHRlcihzdGF0aXN0aWNzLnQpICsgJyBkZj0nICsgdEZvcm1hdHRl
cihzdGF0aXN0aWNzLmRlZ3JlZXNPZkZyZWVkb20pICsgJyknOwotCi0gICAgICAgIGlmICghc3Rh
dGlzdGljcy5yYW5nZVswXSkKLSAgICAgICAgICAgIHJldHVybiAnTm90IHNpZ25pZmljYW50JyAr
IGRldGFpbHM7Ci0KLSAgICAgICAgdmFyIGxvd2VyTGltaXQgPSBwcm9iYWJpbGl0eUZvcm1hdHRl
cihzdGF0aXN0aWNzLnJhbmdlWzBdKTsKLSAgICAgICAgaWYgKCFzdGF0aXN0aWNzLnJhbmdlWzFd
KQotICAgICAgICAgICAgcmV0dXJuICdTaWduaWZpY2FuY2UgPiAnICsgbG93ZXJMaW1pdCArIGRl
dGFpbHM7Ci0KLSAgICAgICAgcmV0dXJuIGxvd2VyTGltaXQgKyAnIDwgU2lnbmlmaWNhbmNlIDwg
JyArIHByb2JhYmlsaXR5Rm9ybWF0dGVyKHN0YXRpc3RpY3MucmFuZ2VbMV0pICsgZGV0YWlsczsK
LSAgICB9LAotICAgIF91cGRhdGVSZWZlcmVuY2VDaGFydDogZnVuY3Rpb24gKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBjb25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0KCdjb25maWd1cmF0aW9ucycpOwot
ICAgICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ292ZXJ2aWV3UGFuZScpID8gdGhpcy5n
ZXQoJ292ZXJ2aWV3UGFuZScpLmdldCgnY2hhcnREYXRhJykgOiBudWxsOwotICAgICAgICBpZiAo
IWNvbmZpZ3VyYXRpb25zIHx8ICFjaGFydERhdGEgfHwgdGhpcy5nZXQoJ3JlZmVyZW5jZUNoYXJ0
JykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRUaW1lU2VyaWVz
ID0gY2hhcnREYXRhLmN1cnJlbnQ7Ci0gICAgICAgIGlmICghY3VycmVudFRpbWVTZXJpZXMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJlcG9zaXRvcmllcyA9IHRoaXMuZ2V0
KCdyZXBvc2l0b3JpZXMnKTsKLSAgICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbXMgPSB7fTsKLSAg
ICAgICAgdmFyIGZhaWxlZFRvRmluZFBvaW50ID0gZmFsc2U7Ci0gICAgICAgIGNvbmZpZ3VyYXRp
b25zLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZykgewotICAgICAgICAgICAgdmFyIHJldmlzaW9u
cyA9IHt9OwotICAgICAgICAgICAgY29uZmlnLmdldCgncm9vdFNldCcpLmdldCgncm9vdHMnKS5m
b3JFYWNoKGZ1bmN0aW9uIChyb290KSB7Ci0gICAgICAgICAgICAgICAgcmV2aXNpb25zW3Jvb3Qu
Z2V0KCdyZXBvc2l0b3J5JykuZ2V0KCdpZCcpXSA9IHJvb3QuZ2V0KCdyZXZpc2lvbicpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB2YXIgcG9pbnQgPSBjdXJyZW50VGltZVNlcmllcy5m
aW5kUG9pbnRCeVJldmlzaW9ucyhyZXZpc2lvbnMpOwotICAgICAgICAgICAgaWYgKCFwb2ludCkg
ewotICAgICAgICAgICAgICAgIGZhaWxlZFRvRmluZFBvaW50ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1z
W3BvaW50Lm1lYXN1cmVtZW50LmlkKCldID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlm
IChmYWlsZWRUb0ZpbmRQb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlz
LnNldCgncmVmZXJlbmNlQ2hhcnQnLCB7Ci0gICAgICAgICAgICBkYXRhOiBjaGFydERhdGEsCi0g
ICAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1zOiBoaWdobGlnaHRlZEl0ZW1zLAotICAgICAgICB9
KTsKLSAgICB9Lm9ic2VydmVzKCdjb25maWd1cmF0aW9ucycsICdvdmVydmlld1BhbmUuY2hhcnRE
YXRhJyksCi0gICAgX2NvbXB1dGVSZXBvc2l0b3J5TGlzdDogZnVuY3Rpb24gKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBzcGVjaWZpZWRSZXBvc2l0b3JpZXMgPSBuZXcgRW1iZXIuU2V0KCk7Ci0gICAg
ICAgICh0aGlzLmdldCgncm9vdFNldHMnKSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAocm9vdFNl
dCkgewotICAgICAgICAgICAgKHJvb3RTZXQuZ2V0KCdyb290cycpIHx8IFtdKS5mb3JFYWNoKGZ1
bmN0aW9uIChyb290KSB7Ci0gICAgICAgICAgICAgICAgc3BlY2lmaWVkUmVwb3NpdG9yaWVzLmFk
ZChyb290LmdldCgncmVwb3NpdG9yeScpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
LSAgICAgICAgdmFyIHJlcG9ydGVkUmVwb3NpdG9yaWVzID0gbmV3IEVtYmVyLlNldCgpOwotICAg
ICAgICB2YXIgdGVzdFJlc3VsdHMgPSB0aGlzLmdldCgndGVzdFJlc3VsdHMnKTsKLSAgICAgICAg
KHRoaXMuZ2V0KCdidWlsZFJlcXVlc3RzJykgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHJlcXVl
c3QpIHsKLSAgICAgICAgICAgIHZhciBwb2ludCA9IHRlc3RSZXN1bHRzLmN1cnJlbnQuZmluZFBv
aW50QnlCdWlsZChyZXF1ZXN0LmdldCgnYnVpbGQnKSk7Ci0gICAgICAgICAgICBpZiAoIXBvaW50
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHJldmlzaW9uQnlS
ZXBvc2l0b3J5SWQgPSBwb2ludC5tZWFzdXJlbWVudC5mb3JtYXR0ZWRSZXZpc2lvbnMoKTsKLSAg
ICAgICAgICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbkJ5UmVwb3NpdG9yeUlk
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnkgPSBBcHAuTWFuaWZlc3QucmVwb3Np
dG9yeShyZXBvc2l0b3J5SWQpOwotICAgICAgICAgICAgICAgIGlmICghc3BlY2lmaWVkUmVwb3Np
dG9yaWVzLmNvbnRhaW5zKHJlcG9zaXRvcnkpKQotICAgICAgICAgICAgICAgICAgICByZXBvcnRl
ZFJlcG9zaXRvcmllcy5hZGQocmVwb3NpdG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gc3BlY2lmaWVkUmVwb3NpdG9yaWVzLnNvcnRCeSgnbmFtZScpLmNv
bmNhdChyZXBvcnRlZFJlcG9zaXRvcmllcy5zb3J0QnkoJ25hbWUnKSk7Ci0gICAgfSwKLSAgICBf
Z3JvdXBSZXF1ZXN0c0J5Q29uZmlndXJhdGlvbnM6IGZ1bmN0aW9uIChyZXF1ZXN0cywgcmVwb3Np
dG9yeUxpc3QpCi0gICAgewotICAgICAgICB2YXIgcm9vdFNldElkVG9SZXF1ZXN0cyA9IHt9Owot
ICAgICAgICB2YXIgdGVzdEdyb3VwID0gdGhpczsKLSAgICAgICAgcmVxdWVzdHMuZm9yRWFjaChm
dW5jdGlvbiAocmVxdWVzdCkgewotICAgICAgICAgICAgdmFyIHJvb3RTZXRJZCA9IHJlcXVlc3Qu
Z2V0KCdyb290U2V0JykuZ2V0KCdpZCcpOwotICAgICAgICAgICAgaWYgKCFyb290U2V0SWRUb1Jl
cXVlc3RzW3Jvb3RTZXRJZF0pCi0gICAgICAgICAgICAgICAgcm9vdFNldElkVG9SZXF1ZXN0c1ty
b290U2V0SWRdID0gW107Ci0gICAgICAgICAgICByb290U2V0SWRUb1JlcXVlc3RzW3Jvb3RTZXRJ
ZF0ucHVzaChyZXF1ZXN0KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByb290U2V0SWRU
b1JlcXVlc3RzOwotICAgIH0sCi0gICAgX2NyZWF0ZUNvbmZpZ3VyYXRpb25TdW1tYXJ5OiBmdW5j
dGlvbiAoYnVpbGRSZXF1ZXN0cywgY29uZmlnTGV0dGVyLCByYW5nZSkKLSAgICB7Ci0gICAgICAg
IHZhciByZXBvc2l0b3JpZXMgPSB0aGlzLmdldCgncmVwb3NpdG9yaWVzJyk7Ci0gICAgICAgIHZh
ciB0ZXN0UmVzdWx0cyA9IHRoaXMuZ2V0KCd0ZXN0UmVzdWx0cycpOwotICAgICAgICB2YXIgcmVx
dWVzdHMgPSBidWlsZFJlcXVlc3RzLm1hcChmdW5jdGlvbiAob3JpZ2luYWxSZXF1ZXN0KSB7Ci0g
ICAgICAgICAgICB2YXIgcG9pbnQgPSB0ZXN0UmVzdWx0cy5jdXJyZW50LmZpbmRQb2ludEJ5QnVp
bGQob3JpZ2luYWxSZXF1ZXN0LmdldCgnYnVpbGQnKSk7Ci0gICAgICAgICAgICB2YXIgcmV2aXNp
b25CeVJlcG9zaXRvcnlJZCA9IHBvaW50ID8gcG9pbnQubWVhc3VyZW1lbnQuZm9ybWF0dGVkUmV2
aXNpb25zKCkgOiB7fTsKLSAgICAgICAgICAgIHJldHVybiBFbWJlci5PYmplY3RQcm94eS5jcmVh
dGUoewotICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG9yaWdpbmFsUmVxdWVzdCwKLSAgICAgICAg
ICAgICAgICByZXZpc2lvbkxpc3Q6IHJlcG9zaXRvcmllcy5tYXAoZnVuY3Rpb24gKHJlcG9zaXRv
cnksIGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV2aXNpb25CeVJlcG9z
aXRvcnlJZFtyZXBvc2l0b3J5LmdldCgnaWQnKV0gfHwge2xhYmVsOm51bGx9KS5sYWJlbDsKLSAg
ICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogcG9pbnQgPyBwb2ludC52
YWx1ZSA6IG51bGwsCi0gICAgICAgICAgICAgICAgdmFsdWVSYW5nZTogcmFuZ2UsCi0gICAgICAg
ICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHBvaW50ID8gdGVzdFJlc3VsdHMuZm9ybWF0dGVyKHBv
aW50LnZhbHVlKSA6IG51bGwsCi0gICAgICAgICAgICAgICAgYnVpbGRMYWJlbDogcG9pbnQgPyAn
QnVpbGQgJyArIHBvaW50Lm1lYXN1cmVtZW50LmJ1aWxkTnVtYmVyKCkgOiBudWxsLAotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciByb290U2V0ID0gcmVxdWVzdHMg
PyByZXF1ZXN0c1swXS5nZXQoJ3Jvb3RTZXQnKSA6IG51bGw7Ci0gICAgICAgIHZhciBzdW1tYXJ5
UmV2aXNpb25zID0gcmVwb3NpdG9yaWVzLm1hcChmdW5jdGlvbiAocmVwb3NpdG9yeSwgaW5kZXgp
IHsKLSAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IHJvb3RTZXQgPyByb290U2V0LnJldmlzaW9u
Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSA6IG51bGw7Ci0gICAgICAgICAgICBpZiAoIXJldmlz
aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0c1swXS5nZXQoJ3JldmlzaW9uTGlz
dCcpW2luZGV4XTsKLSAgICAgICAgICAgIHJldHVybiBNZWFzdXJlbWVudC5mb3JtYXRSZXZpc2lv
blJhbmdlKHJldmlzaW9uKS5sYWJlbDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmVxdWVzdHMu
Zm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdCkgewotICAgICAgICAgICAgdmFyIHJldmlzaW9uTGlz
dCA9IHJlcXVlc3QuZ2V0KCdyZXZpc2lvbkxpc3QnKTsKLSAgICAgICAgICAgIHJlcG9zaXRvcmll
cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXBvc2l0b3J5LCBpbmRleCkgewotICAgICAgICAgICAgICAg
IGlmIChyZXZpc2lvbkxpc3RbaW5kZXhdID09IHN1bW1hcnlSZXZpc2lvbnNbaW5kZXhdKQotICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbkxpc3RbaW5kZXhdID0gbnVsbDsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgdmFsdWVzSW5Db25maWcgPSByZXF1ZXN0
cy5tYXBCeSgndmFsdWUnKS5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2Yo
dmFsdWUpID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpOyB9KTsKLSAgICAgICAgdmFyIHN1
bSA9IFN0YXRpc3RpY3Muc3VtKHZhbHVlc0luQ29uZmlnKTsKLSAgICAgICAgdmFyIGNpRGVsdGEg
PSBTdGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIHZhbHVlc0luQ29uZmln
Lmxlbmd0aCwgc3VtLCBTdGF0aXN0aWNzLnNxdWFyZVN1bSh2YWx1ZXNJbkNvbmZpZykpOwotICAg
ICAgICB2YXIgbWVhbiA9IHN1bSAvIHZhbHVlc0luQ29uZmlnLmxlbmd0aDsKLQotICAgICAgICBy
YW5nZS5taW4gPSBNYXRoLm1pbihyYW5nZS5taW4sIFN0YXRpc3RpY3MubWluKHZhbHVlc0luQ29u
ZmlnKSk7Ci0gICAgICAgIHJhbmdlLm1heCA9IE1hdGgubWF4KHJhbmdlLm1heCwgU3RhdGlzdGlj
cy5tYXgodmFsdWVzSW5Db25maWcpKTsKLSAgICAgICAgaWYgKGNpRGVsdGEgJiYgIWlzTmFOKGNp
RGVsdGEpKSB7Ci0gICAgICAgICAgICByYW5nZS5taW4gPSBNYXRoLm1pbihyYW5nZS5taW4sIG1l
YW4gLSBjaURlbHRhKTsKLSAgICAgICAgICAgIHJhbmdlLm1heCA9IE1hdGgubWF4KHJhbmdlLm1h
eCwgbWVhbiArIGNpRGVsdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHN1bW1hcnkgPSBF
bWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgIGlzQXZlcmFnZTogdHJ1ZSwKLSAgICAg
ICAgICAgIGNvbmZpZ0xldHRlcjogY29uZmlnTGV0dGVyLAotICAgICAgICAgICAgcmV2aXNpb25M
aXN0OiBzdW1tYXJ5UmV2aXNpb25zLAotICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGlzTmFO
KG1lYW4pID8gbnVsbCA6IHRlc3RSZXN1bHRzLmZvcm1hdFdpdGhEZWx0YUFuZFVuaXQobWVhbiwg
Y2lEZWx0YSksCi0gICAgICAgICAgICB2YWx1ZTogbWVhbiwKLSAgICAgICAgICAgIG1lYXN1cmVk
VmFsdWVzOiB2YWx1ZXNJbkNvbmZpZywKLSAgICAgICAgICAgIGNvbmZpZGVuY2VJbnRlcnZhbERl
bHRhOiBjaURlbHRhLAotICAgICAgICAgICAgdmFsdWVSYW5nZTogcmFuZ2UsCi0gICAgICAgICAg
ICBzdGF0dXNMYWJlbDogQXBwLkJ1aWxkUmVxdWVzdC5hZ2dyZWdhdGVTdGF0dXNlcyhyZXF1ZXN0
cyksCi0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBFbWJlci5PYmplY3QuY3JlYXRlKHtz
dW1tYXJ5OiBzdW1tYXJ5LCByZXF1ZXN0czogcmVxdWVzdHMsIHJvb3RTZXQ6IHJvb3RTZXR9KTsK
LSAgICB9LAotfSk7Ci0KLUFwcC5Cb3hQbG90Q29tcG9uZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4
dGVuZCh7Ci0gICAgY2xhc3NOYW1lczogWydib3gtcGxvdCddLAotICAgIHJhbmdlOiBudWxsLAot
ICAgIHZhbHVlOiBudWxsLAotICAgIGRlbHRhOiBudWxsLAotICAgIGRpZEluc2VydEVsZW1lbnQ6
IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0KCdlbGVt
ZW50Jyk7Ci0gICAgICAgIHZhciBzdmcgPSBkMy5zZWxlY3QoZWxlbWVudCkuYXBwZW5kKCdzdmcn
KQotICAgICAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnMCAwIDEwMCAyMCcpCi0gICAgICAgICAg
ICAuYXR0cigncHJlc2VydmVBc3BlY3RSYXRpbycsICdub25lJykKLSAgICAgICAgICAgIC5zdHls
ZSh7d2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJSd9KTsKLQotICAgICAgICB0aGlzLl9wZXJj
ZW50YWdlUmVjdCA9IHN2ZwotICAgICAgICAgICAgLmFwcGVuZCgncmVjdCcpCi0gICAgICAgICAg
ICAuYXR0cigneCcsIDApCi0gICAgICAgICAgICAuYXR0cigneScsIDApCi0gICAgICAgICAgICAu
YXR0cignd2lkdGgnLCAwKQotICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDIwKQotICAgICAg
ICAgICAgLmF0dHIoJ2NsYXNzJywgJ3BlcmNlbnRhZ2UnKTsKLQotICAgICAgICB0aGlzLl9kZWx0
YVJlY3QgPSBzdmcKLSAgICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKQotICAgICAgICAgICAgLmF0
dHIoJ3gnLCAwKQotICAgICAgICAgICAgLmF0dHIoJ3knLCA1KQotICAgICAgICAgICAgLmF0dHIo
J3dpZHRoJywgMCkKLSAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAxMCkKLSAgICAgICAgICAg
IC5hdHRyKCdjbGFzcycsICdkZWx0YScpCi0gICAgICAgICAgICAuYXR0cignb3BhY2l0eScsIDAu
NSkKLSAgICAgICAgdGhpcy5fdXBkYXRlQmFycygpOwotICAgIH0sCi0gICAgX3VwZGF0ZUJhcnM6
IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BlcmNlbnRhZ2VSZWN0IHx8
IHR5cGVvZih0aGlzLl9wZXJjZW50YWdlKSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGhpcy5fcGVy
Y2VudGFnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcGVyY2VudGFn
ZVJlY3QuYXR0cignd2lkdGgnLCB0aGlzLl9wZXJjZW50YWdlKTsKLSAgICAgICAgaWYgKHR5cGVv
Zih0aGlzLl9kZWx0YSkgPT09ICdudW1iZXInICYmICFpc05hTih0aGlzLl9kZWx0YSkpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2RlbHRhUmVjdC5hdHRyKCd4JywgdGhpcy5fcGVyY2VudGFnZSAtIHRo
aXMuX2RlbHRhKTsKLSAgICAgICAgICAgIHRoaXMuX2RlbHRhUmVjdC5hdHRyKCd3aWR0aCcsIHRo
aXMuX2RlbHRhICogMik7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHZhbHVlQ2hhbmdlZDogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0KCdyYW5nZScpOwot
ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldCgndmFsdWUnKTsKLSAgICAgICAgaWYgKCFyYW5n
ZSB8fCAhdmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBzY2FsaW5nRmFj
dG9yID0gMTAwIC8gKHJhbmdlLm1heCAtIHJhbmdlLm1pbik7Ci0gICAgICAgIHZhciBwZXJjZW50
YWdlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAqIHNjYWxpbmdGYWN0b3I7Ci0gICAgICAgIHRoaXMu
X3BlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOwotICAgICAgICB0aGlzLl9kZWx0YSA9IHRoaXMuZ2V0
KCdkZWx0YScpICogc2NhbGluZ0ZhY3RvcjsKLSAgICAgICAgdGhpcy5fdXBkYXRlQmFycygpOwot
ICAgIH0ub2JzZXJ2ZXMoJ3ZhbHVlJywgJ3JhbmdlJykub24oJ2luaXQnKSwKLX0pOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9jaGFydC1wYW5lLmNzcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvY2hhcnQtcGFuZS5jc3MKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiM2FlYjNiZTM5NjFjZWFjYTIxNjdiMWI1ZGQ0Yzll
MWQ4MTA0ODUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9jaGFydC1wYW5lLmNzcworKysgL2Rl
di9udWxsCkBAIC0xLDUwNiArMCwwIEBACi0uY2hhcnQtcGFuZSBoZWFkZXIgewotICAgIGJhY2tn
cm91bmQ6ICNmZmY7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDAuNXJlbTsKLSAgICBj
b2xvcjogIzAwMDsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JiYjsKLSAgICBib3Jk
ZXItdG9wLWxlZnQtcmFkaXVzOiAwLjVyZW07Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6
IDAuNXJlbTsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0uY2hhcnQtcGFuZSBoMSB7Ci0g
ICAgY29sb3I6ICMzMzM7Ci0gICAgZm9udC1zaXplOiAxcmVtOwotICAgIGZvbnQtd2VpZ2h0OiBu
b3JtYWw7Ci0gICAgbGluZS1oZWlnaHQ6IDFyZW07Ci0gICAgbWFyZ2luOiAwIDAgMCAxLjVyZW07
Ci0gICAgcGFkZGluZzogMDsKLX0KLS5jaGFydC1wYW5lOmZvY3VzIGhlYWRlciB7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgyMDQsIDE1MywgNTEsIDAuMSk7Ci0gICAgY29sb3I6ICMzMzM7
Ci19Ci0KLS5jaGFydC1wYW5lIC5wcm9ncmVzcyB7Ci0gICAgaGVpZ2h0OiAxMDAlOwotICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotLmNoYXJ0LXBhbmUgLnByb2dyZXNzIC5zcGlubmVyIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVmdDogNTAlOwotICAgIHRvcDogNTAlOwot
ICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTsKLSAgICBtYXJnaW4tdG9wOiAtMXJlbTsKLX0KLQotLmNo
YXJ0LXBhbmUgYS5jbG9zZS1idXR0b24gewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVmdDogMC41NXJlbTsKLSAgICB0b3A6IDAuNTVy
ZW07Ci19Ci0KLS5jaGFydC1wYW5lIGEuc3RhdC1idXR0b24gewotICAgIGRpc3BsYXk6IGlubGlu
ZS1ibG9jazsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDQuNDVyZW07Ci0g
ICAgdG9wOiAwLjU1cmVtOwotfQotCi0uY2hhcnQtcGFuZSBhLm91dGxpZXItYnV0dG9uIHsKLSAg
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJp
Z2h0OiAzLjI1cmVtOyAvKiBTaGlmdGVkIHRvIGxlZnQgYnkgMC4xcmVtIGZvciBiZXR0ZXIgYWVz
dGhldGljcyAqLwotICAgIHRvcDogMC41NXJlbTsKLX0KLQotYS5vdXRsaWVyLWJ1dHRvbi5oaWRl
IGcuc2hvdy1vdXRsaWVyLWljb24gewotICAgIGZpbGw6IHRyYW5zcGFyZW50OwotICAgIHN0cm9r
ZTogdHJhbnNwYXJlbnQ7Ci19Ci0KLWEub3V0bGllci1idXR0b24uc2hvdyBnLmhpZGUtb3V0bGll
ci1pY29uIHsKLSAgICBmaWxsOiB0cmFuc3BhcmVudDsKLSAgICBzdHJva2U6IHRyYW5zcGFyZW50
OwotfQotCi0uY2hhcnQtcGFuZSBhLmFuYWx5c2lzLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogaW5s
aW5lLWJsb2NrOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMS44NXJlbTsK
LSAgICB0b3A6IDAuNTVyZW07Ci19Ci0KLS5jaGFydC1wYW5lIGEuc2VhcmNoLWJ1dHRvbiB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBy
aWdodDogMC41NXJlbTsKLSAgICB0b3A6IDAuNTVyZW07Ci19Ci0KLS5wb3B1cC1wYW5lIHsKLSAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgei1pbmRleDogMTA7Ci0gICAgdG9wOiAxLjdyZW07
Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2JiYjsKLSAgICBmb250LXNpemU6IDAuOHJlbTsKLSAg
ICBwYWRkaW5nOiAwLjJyZW07Ci0gICAgYm9yZGVyLXJhZGl1czogMC41cmVtOwotICAgIGRpc3Bs
YXk6IHRhYmxlOwotICAgIGJhY2tncm91bmQ6IHdoaXRlOwotfQotCi0ucG9wdXAtcGFuZS5oaWRk
ZW4gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5zdGF0LXBhbmUsCi0uYW5hbHlzaXMtcGFu
ZSB7Ci0gICAgcmlnaHQ6IDIuNnJlbTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0ucG9wdXAtcGFu
ZSA+IC5jYXV0aW9uIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMC4zcmVtIDAuNXJl
bTsKLX0KLQotLnBvcHVwLXBhbmUgPiBzZWN0aW9uIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFk
ZGluZzogMDsKLSAgICBmb250LXNpemU6IDAuOHJlbTsKLSAgICBtYXgtd2lkdGg6IDE3cmVtOwot
fQotCi0ucG9wdXAtcGFuZSA+IHNlY3Rpb24gPiBoMSB7Ci0gICAgZm9udC1zaXplOiBpbmhlcml0
OwotICAgIGxpbmUtaGVpZ2h0OiAwLjhyZW07Ci0gICAgcGFkZGluZzogMC4zcmVtIDAuNXJlbTsK
LSAgICBtYXJnaW46IDA7Ci0gICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNjY2M7Ci0gICAgYm9y
ZGVyLWJvdHRvbTogc29saWQgMXB4ICNjY2M7Ci19Ci0KLS5wb3B1cC1wYW5lID4gc2VjdGlvbjpm
aXJzdC1jaGlsZCBoMSB7Ci0gICAgYm9yZGVyLXRvcDogbm9uZTsKLX0KLQotLnBvcHVwLXBhbmUg
PiBzZWN0aW9uID4gKiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbWFyZ2luOiAwLjFyZW0g
MC41cmVtIDAuMXJlbSAxcmVtOwotfQotCi0uc3RhdC1vcHRpb24gaW5wdXRbdHlwZT1udW1iZXJd
IHsKLSAgICB3aWR0aDogNHJlbTsKLX0KLQotLmFuYWx5c2lzLXBhbmUgewotICAgIHJpZ2h0OiAx
LjNyZW07Ci19Ci0KLS5zZWFyY2gtcGFuZSB7Ci0gICAgcmlnaHQ6IDByZW07Ci19Ci0KLS5zZWFy
Y2gtcGFuZSBpbnB1dCB7Ci0gICAgZGlzcGxheTogdGFibGUtY2VsbDsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogbWlkZGxlOwotICAgIG91dGxpbmU6IG5vbmU7Ci0gICAgYm9yZGVyOiBub25lOwotICAg
IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjVyZW07Ci0gICAgYm9yZGVyLWJvdHRvbS1yaWdo
dC1yYWRpdXM6IDAuNXJlbTsKLSAgICBwYWRkaW5nOiAwLjJyZW07Ci0gICAgZm9udC1zaXplOiAw
LjhyZW07Ci0gICAgbWFyZ2luOiAwOwotfQotCi0uc2VhcmNoLXBhbmUgLnJlcG9zaXRvcmllcyB7
Ci0gICAgZGlzcGxheTogdGFibGUtY2VsbDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwot
ICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5zZWFyY2gtcGFuZSBpbnB1dDpmb2N1cyB7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDI0OSwgMjQyLCAyMjgpOwotfQotCi0uY2hhcnQtcGFuZSAuYm9k
eSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdo
dDogMThyZW07Ci19Ci0uY2hhcnQtcGFuZSAuc3ZnLWNvbnRhaW5lciB7Ci0gICAgd2lkdGg6IGF1
dG87Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotLmNoYXJ0LXBhbmUgLnN2Zy1jb250YWluZXIgewot
ICAgIG1hcmdpbi1yaWdodDogMjVyZW07Ci19Ci0KLS5zZWxlY3Rpb24tdG9vbGJhciB7Ci0gICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIGJhY2tncm91bmQ6IHdoaXRlOwotICAgIGJvcmRl
cjogc29saWQgMXB4ICNkOWQ5ZDk7Ci0gICAgYm9yZGVyLXJhZGl1czogMC4zcmVtOwotICAgIHot
aW5kZXg6IDEwOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBtYXJnaW4tdG9wOiAtMnJl
bTsKLSAgICBtYXJnaW4tbGVmdDogMC41cmVtOwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19
Ci0KLS5zZWxlY3Rpb24tdG9vbGJhciAuYnV0dG9uIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAg
ICBmbG9hdDogbGVmdDsKLSAgICB3aWR0aDogMXJlbTsKLSAgICBoZWlnaHQ6IDFyZW07Ci0gICAg
cGFkZGluZzogMC4ycmVtOwotICAgIG1hcmdpbjogMDsKLSAgICBib3JkZXItbGVmdDogc29saWQg
MXB4ICNiYmI7Ci19Ci0KLS5zZWxlY3Rpb24tdG9vbGJhciAuYnV0dG9uOmZpcnN0LWNoaWxkIHsK
LSAgICBib3JkZXItbGVmdDogbm9uZTsKLX0KLQotLnNlbGVjdGlvbi10b29sYmFyIC5idXR0b24g
c3ZnIHsKLSAgICBzdHJva2U6ICM2NjY7Ci0gICAgZmlsbDogIzY2NjsKLX0KLQotLmNoYXJ0LXBh
bmUgLmRldGFpbHMgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMDsKLSAg
ICB0b3A6IDA7Ci0gICAgd2lkdGg6IDI1cmVtOwotICAgIGhlaWdodDogMTAwJTsKLSAgICBib3Jk
ZXItbGVmdDogc29saWQgMXB4ICNiYmI7Ci19Ci0KLS5hbmFseXNpcy1jaGFydC1wYW5lIHsKLSAg
ICBoZWlnaHQ6IDE1cmVtOwotfQotCi0uYW5hbHlzaXMtY2hhcnQtcGFuZSB0YWJsZSB7Ci0gICAg
bWFyZ2luOiAwLjVyZW07Ci19Ci0KLS5jaGFydC1wYW5lIC5vdmVydmlldyB7Ci0gICAgaGVpZ2h0
OiA1cmVtOwotICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDBweCAjZWVlOwotfQotCi0uY2hhcnQt
cGFuZSAuZGV0YWlscy10YWJsZS1jb250YWluZXIgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IDVyZW07Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVpZ2h0OiAxM3JlbTsKLSAg
ICBvdmVyZmxvdzogc2Nyb2xsOwotfQotLmFuYWx5c2lzLWNoYXJ0LXBhbmUgLmRldGFpbHMtdGFi
bGUtY29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogc3RhdGljOwotICAgIGhlaWdodDogMTVyZW07
Ci19Ci0KLS5jaGFydC1wYW5lIC5kZXRhaWxzLXRhYmxlLAotLmNoYXJ0LXBhbmUgLmNvbW1pdHMt
dmlld2VyIHsKLSAgICBmb250LXNpemU6IDAuOHJlbTsKLSAgICB3aWR0aDogYXV0bzsKLSAgICB0
YWJsZS1sYXlvdXQ6IGZpeGVkOwotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci0K
LS5jaGFydC1wYW5lIC5jb21taXRzLXZpZXdlciB7Ci0gICAgd2lkdGg6IDEwMCU7Ci19Ci0KLS5j
aGFydC1wYW5lIC5kZXRhaWxzLXRhYmxlIHRkOmxhc3QtY2hpbGQgewotICAgIHBhZGRpbmctcmln
aHQ6IDFweDsKLX0KLQotLmNoYXJ0LXBhbmUgLmRldGFpbHMtdGFibGUgdGggewotICAgIHdpZHRo
OiAzMCU7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsK
LSAgICBwYWRkaW5nOiAwOwotfQotCi0uY2hhcnQtcGFuZSAuZGV0YWlscy10YWJsZSB0ZCB7Ci0g
ICAgd2lkdGg6IDcwJTsKLX0KLQotLmNoYXJ0LXBhbmUgLmRldGFpbHMtdGFibGUgLmJ1Z3MgdGgg
ewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0uY2hhcnQtcGFuZSAuZGV0YWlscy10YWJs
ZSB0aDphZnRlciB7Ci0gICAgY29udGVudDogIiA6ICI7Ci19Ci0KLS5jaGFydC1wYW5lIC5kZXRh
aWxzLXRhYmxlIC5zdGF0dXMgdGggewotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLX0KLQotLmNo
YXJ0LXBhbmUgLmRldGFpbHMtdGFibGUgLnN0YXR1cyB0ZCB7Ci0gICAgZm9udC1zaXplOiAxcmVt
OwotfQotCi0uY2hhcnQtcGFuZSAuY29tbWl0cy12aWV3ZXIgY2FwdGlvbiB7Ci0gICAgYm9yZGVy
LXRvcDogc29saWQgMXB4ICNjY2M7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0
LWFsaWduOiBsZWZ0OwotICAgIHBhZGRpbmc6IDAuMnJlbTsKLSAgICBwYWRkaW5nLWxlZnQ6IDAu
NXJlbTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci19Ci0KLS5jaGFydC1wYW5lIC5jb21taXRzLXZp
ZXdlciBjYXB0aW9uOmJlZm9yZSwKLS5hbmFseXNpcy1ncm91cCAucmVzdWx0cyAuc3VtbWFyeSAu
Y29uZmlnLWxldHRlcjpiZWZvcmUgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3
aWR0aDogMC44cmVtOwotICAgIGNvbnRlbnQ6ICJcMjVCRSI7IC8qIERvd24gYXJyb3cgKi8KLX0K
LQotLmNoYXJ0LXBhbmUgLmNvbW1pdHMtdmlld2VyLmhpZGRlbiBjYXB0aW9uOmJlZm9yZSwKLS5h
bmFseXNpcy1ncm91cCAucmVzdWx0cyAuaGlkZVJlcXVlc3RzIC5zdW1tYXJ5IC5jb25maWctbGV0
dGVyOmJlZm9yZSB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHdpZHRoOiAwLjhy
ZW07Ci0gICAgY29udGVudDogIlwyNUI4IjsgLyogUmlnaHQgYXJyb3cgKi8KLX0KLQotLmNoYXJ0
LXBhbmUgLmNvbW1pdHMgewotICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOwotICAg
IG1hcmdpbi1ib3R0b206IDAuMnJlbTsKLX0KLQotLmNoYXJ0LXBhbmUgLmNvbW1pdHMtdmlld2Vy
IHsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotfQotCi0uY2hhcnQtcGFuZSAuY29t
bWl0cy12aWV3ZXIgdGQsCi0uY2hhcnQtcGFuZSAuY29tbWl0cy12aWV3ZXIgdGggewotICAgIHdv
cmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNjY2M7Ci0g
ICAgcGFkZGluZzogMC4ycmVtOwotfQotCi0uY2hhcnQtcGFuZSAuY29tbWl0cy12aWV3ZXIgdGgg
ewotICAgIHdpZHRoOiAyMCU7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLmNoYXJ0
LXBhbmUgLmNvbW1pdHMtdmlld2VyIHRkIHsKLSAgICB3aWR0aDogNjAlOwotfQotCi0uY2hhcnQt
cGFuZSAuY2hhcnQgewotICAgIGhlaWdodDogMTAwJTsKLX0KLQotLmNoYXJ0LXBhbmUgLmNoYXJ0
IHN2ZyB7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0uY2hhcnQgewotICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKLX0KLQotLmNoYXJ0IHN2ZyB7Ci0gICAgc3Ryb2tlOiAjNjY2OwotICAgIGZpbGw6
ICMwMDA7Ci0gICAgY29sb3I6ICMwMDA7Ci0gICAgZm9udC1zaXplOiAwLjdyZW07Ci19Ci0KLS5j
aGFydCBwYXRoIHsKLSAgICBmaWxsOiBub25lOwotICAgIHN0cm9rZS13aWR0aDogMS41cHg7Ci19
Ci0KLS5jaGFydCAuZG90IHsKLSAgICBmaWxsOiAjY2NjOwotICAgIHN0cm9rZTogbm9uZTsKLSAg
ICByOiAycHg7Ci19Ci0KLS5jaGFydCAuZG90LmZvcmVncm91bmQgewotICAgIGZpbGw6ICM2NjY7
Ci19Ci0KLS5jaGFydCBwYXRoLmFyZWEgewotICAgIHN0cm9rZTogbm9uZTsKLSAgICBmaWxsOiAj
Y2NjOwotICAgIG9wYWNpdHk6IDAuODsKLX0KLS5jaGFydCBwYXRoLmFyZWEuZm9yZWdyb3VuZCB7
Ci19Ci0KLS5jaGFydCBwYXRoLmN1cnJlbnQgewotICAgIHN0cm9rZTogI2NjYzsKLX0KLQotLmNo
YXJ0IHBhdGguY3VycmVudC5mb3JlZ3JvdW5kIHsKLSAgICBzdHJva2U6ICM5OTk7Ci19Ci0KLS5j
aGFydCBwYXRoLm1vdmluZ0F2ZXJhZ2UgewotICAgIHN0cm9rZTogIzM2MzsKLSAgICBmaWxsOiBu
b25lOwotICAgIG9wYWNpdHk6IDAuODsKLX0KLQotLmNoYXJ0IHBhdGguZW52ZWxvcGUgewotICAg
IHN0cm9rZTogbm9uZTsKLSAgICBmaWxsOiAjNmM2OwotICAgIG9wYWNpdHk6IDAuNDsKLX0KLQot
LmNoYXJ0IHBhdGguYmFzZWxpbmUgewotICAgIHN0cm9rZTogI2Y2NjsKLX0KLS5jaGFydC1wYW5l
IC5zdGF0dXMgLndvcnNlLAotLmRhc2hib2FyZC1zdGF0dXMgLndvcnNlIHsKLSAgICBjb2xvcjog
I2MzMzsKLX0KLQotLmNoYXJ0IHBhdGgudGFyZ2V0IHsKLSAgICBzdHJva2U6ICM2NmY7Ci19Ci0u
Y2hhcnQtcGFuZSAuc3RhdHVzIC5iZXR0ZXIsCi0uZGFzaGJvYXJkLXN0YXR1cyAuYmV0dGVyIHsK
LSAgICBjb2xvcjogIzMzYzsKLX0KLQotLmRhc2hib2FyZC1zdGF0dXMgLnN0YXR1cy1sYWJlbCB7
Ci0gICAgbWFyZ2luLWxlZnQ6IDFyZW07Ci19Ci0KLS5jaGFydCAuYXhpcywKLS5jaGFydCAuZG9t
YWluIHsKLSAgZmlsbDogbm9uZTsKLSAgc3Ryb2tlLXdpZHRoOiAxcHg7Ci0gIHN0cm9rZTogI2Rk
ZDsKLSAgY29sb3I6ICMwMDA7Ci0gIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKLX0KLQot
LmNoYXJ0IC5kb21haW4gewotICAgIHN0cm9rZTogbm9uZTsKLX0KLQotLmNoYXJ0IC5jdXJyZW50
LWl0ZW0gewotICAgIHN0cm9rZTogI2Y5MzsKLSAgICBzdHJva2Utd2lkdGg6IDJweDsKLSAgICBm
aWxsOiAjZjkzOwotfQotCi0uY2hhcnQgLmhpZ2hsaWdodCB7Ci0gICAgc3Ryb2tlOiAjZjkzOwot
ICAgIHN0cm9rZS13aWR0aDogMnB4OwotICAgIGZpbGw6IG5vbmU7Ci0gICAgcjogMy42cHg7Ci19
Ci0KLS5jaGFydCAuZXh0ZW50IHsKLSAgICBzdHJva2U6ICNmOTM7Ci0gICAgc3Ryb2tlLXdpZHRo
OiAxcHg7Ci0gICAgZmlsbDogIzljNjsKLSAgICBmaWxsLW9wYWNpdHk6IC4xMjU7Ci0gICAgc2hh
cGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwotfQotCi0uY2hhcnQgLmF4aXMgdGV4dCB7Ci0gICAg
ZmlsbDogIzMzMzsKLSAgICBzdHJva2U6IG5vbmU7Ci19Ci0KLS5jaGFydCAuYXhpcy5pbnRlcmFj
dGl2ZSB0ZXh0IHsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci19Ci0KLS5jaGFydCAucmFuZ2VCYXIg
ewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmYzY7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotfQotCi0uY2hhcnQgLnJhbmdlQmFyLnRlc3RpbmdSYW5nZSB7
Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKLX0KLQotLmNoYXJ0LXBhbmUuaW4tY2hhcnRz
IHsKLSAgICBtYXJnaW4tYm90dG9tOiAyLjVyZW07Ci19Ci0KLS5hbHRlcm5hdGl2ZS1wYW5lLWFj
dGlvbnMgdWwgewotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBh
ZGRpbmc6IDA7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6IDAuNXJlbTsKLX0K
LQotLmFsdGVybmF0aXZlLXBhbmUtYWN0aW9ucyBsaSB7Ci0gICAgY29sb3I6ICM2NjY7Ci0gICAg
Zm9udC1zaXplOiAwLjhyZW07Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI2JiYjsKLSAgICBib3Jk
ZXItdG9wOiBub25lOwotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuM3JlbTsKLSAg
ICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4zcmVtOwotICAgIGZsb2F0OiBsZWZ0Owot
ICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgbWFyZ2luOiAwOwotICAgIG1hcmdpbi1yaWdodDog
MC4ycmVtOwotICAgIHBhZGRpbmc6IDAuMnJlbSAwLjRyZW07Ci19Ci0KLS5hbHRlcm5hdGl2ZS1w
YW5lLWFjdGlvbnMgbGk6aG92ZXIgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjA0LCAx
NTMsIDUxLCAwLjEpOwotICAgIHBhZGRpbmctdG9wOiAwLjVyZW07Ci19Ci0KLS5hbHRlcm5hdGl2
ZS1wYW5lLWFjdGlvbnMgbGkgYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGNv
bG9yOiBpbmhlcml0OwotfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92Mi9jb21taXRzLXZpZXdlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjIvY29tbWl0cy12aWV3ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0
MDcwNzBjNjViMDFlNjJhOGRhZGU2YTA1ZGNiZTlkNzdlNzQ0ZTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92Mi9jb21taXRzLXZpZXdlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAK
LUFwcC5Db21taXRzVmlld2VyQ29tcG9uZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7Ci0g
ICAgcmVwb3NpdG9yeTogbnVsbCwKLSAgICByZXZpc2lvbkluZm86IG51bGwsCi0gICAgY29tbWl0
czogbnVsbCwKLSAgICB2aXNpYmxlOiB0cnVlLAotICAgIGNvbW1pdHNDaGFuZ2VkOiBmdW5jdGlv
biAoKQotICAgIHsKLSAgICAgICAgdmFyIHJldmlzaW9uSW5mbyA9IHRoaXMuZ2V0KCdyZXZpc2lv
bkluZm8nKTsKLQotICAgICAgICB2YXIgdG8gPSByZXZpc2lvbkluZm8uZ2V0KCdjdXJyZW50UmV2
aXNpb24nKTsKLSAgICAgICAgdmFyIGZyb20gPSByZXZpc2lvbkluZm8uZ2V0KCdwcmV2aW91c1Jl
dmlzaW9uJyk7Ci0gICAgICAgIHZhciByZXBvc2l0b3J5ID0gdGhpcy5nZXQoJ3JlcG9zaXRvcnkn
KTsKLSAgICAgICAgaWYgKCFmcm9tIHx8ICFyZXBvc2l0b3J5IHx8ICFyZXBvc2l0b3J5LmdldCgn
aGFzUmVwb3J0ZWRDb21taXRzJykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOwotICAgICAgICBDb21taXRMb2dzLmZldGNoQ29tbWl0cyhyZXBvc2l0b3J5
LmdldCgnaWQnKSwgZnJvbSwgdG8pLnRoZW4oZnVuY3Rpb24gKGNvbW1pdHMpIHsKLSAgICAgICAg
ICAgIGlmIChzZWxmLmlzRGVzdHJveWVkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIHNlbGYuc2V0KCdjb21taXRzJywgY29tbWl0cy5tYXAoZnVuY3Rpb24gKGNvbW1pdCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb246IGNvbW1pdC5yZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgdXJsOiByZXBv
c2l0b3J5LnVybEZvclJldmlzaW9uKGNvbW1pdC5yZXZpc2lvbiksCi0gICAgICAgICAgICAgICAg
ICAgIGF1dGhvcjogY29tbWl0LmF1dGhvck5hbWUgfHwgY29tbWl0LmF1dGhvckVtYWlsLAotICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjb21taXQubWVzc2FnZSA/IGNvbW1pdC5tZXNzYWdl
LnN1YnN0cigwLCA3NSkgOiBudWxsLAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fSkpOwotICAgICAgICB9LCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXNlbGYuaXNE
ZXN0cm95ZWQpCi0gICAgICAgICAgICAgICAgc2VsZi5zZXQoJ2NvbW1pdHMnLCBbXSk7Ci0gICAg
ICAgIH0pCi0gICAgfS5vYnNlcnZlcygncmVwb3NpdG9yeScpLm9ic2VydmVzKCdyZXZpc2lvbklu
Zm8nKS5vbignaW5pdCcpLAotICAgIGFjdGlvbnM6IHsKLSAgICAgICAgdG9nZ2xlVmlzaWJpbGl0
eTogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy50b2dnbGVQcm9wZXJ0
eSgndmlzaWJsZScpOwotICAgICAgICB9Ci0gICAgfQotfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2RhdGEuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YyL2RhdGEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJk
YzlhYjg2MmQ2MmQyNzkyODFmMWRiMjhlMzdmYjRmZTM3Y2Y2ZTcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92Mi9kYXRhLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTY2ICswLDAgQEAKLS8vIFdlIGRv
bid0IHVzZSBEUy5Nb2RlbCBmb3IgdGhlc2Ugb2JqZWN0IHR5cGVzIGJlY2F1c2Ugd2UgY2FuJ3Qg
YWZmb3JkIHRvIHByb2Nlc3MgbWlsbGlvbnMgb2YgdGhlbS4KLQotaWYgKCFBcnJheS5wcm90b3R5
cGUuZmluZCkgewotICAgIEFycmF5LnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKGNhbGxiYWNr
KSB7Ci0gICAgICAgIGZvciAodmFyIGl0ZW0gb2YgdGhpcykgewotICAgICAgICAgICAgaWYgKGNh
bGxiYWNrKGl0ZW0pKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfQotfQotCi12YXIgUHJpdmlsZWdlZEFQSSA9
IHsKLSAgICBfdG9rZW46IG51bGwsCi0gICAgX2V4cGlyYXRpb246IG51bGwsCi0gICAgX21heE5l
dHdvcmtMYXRlbmN5OiAzICogNjAgKiAxMDAwIC8qIDMgbWludXRlcyAqLywKLX07Ci0KLVByaXZp
bGVnZWRBUEkuc2VuZFJlcXVlc3QgPSBmdW5jdGlvbiAodXJsLCBwYXJhbWV0ZXJzKQotewotICAg
IHJldHVybiB0aGlzLl9nZW5lcmF0ZVRva2VuSW5TZXJ2ZXJJZk5lZWRlZCgpLnRoZW4oZnVuY3Rp
b24gKHRva2VuKSB7Ci0gICAgICAgIHJldHVybiBQcml2aWxlZ2VkQVBJLl9wb3N0KHVybCwgJC5l
eHRlbmQoe3Rva2VuOiB0b2tlbn0sIHBhcmFtZXRlcnMpKTsKLSAgICB9KTsKLX0KLQotUHJpdmls
ZWdlZEFQSS5fZ2VuZXJhdGVUb2tlbkluU2VydmVySWZOZWVkZWQgPSBmdW5jdGlvbiAoKQotewot
ICAgIHZhciBzZWxmID0gdGhpczsKLSAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShm
dW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgIGlmIChzZWxmLl90b2tlbiAmJiBz
ZWxmLl9leHBpcmF0aW9uID4gRGF0ZS5ub3coKSArIHNlbGYuX21heE5ldHdvcmtMYXRlbmN5KQot
ICAgICAgICAgICAgcmVzb2x2ZShzZWxmLl90b2tlbik7Ci0KLSAgICAgICAgUHJpdmlsZWdlZEFQ
SS5fcG9zdCgnZ2VuZXJhdGUtY3NyZi10b2tlbicpCi0gICAgICAgICAgICAudGhlbihmdW5jdGlv
biAocmVzdWx0LCByZWplY3QpIHsKLSAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9IHJlc3Vs
dFsndG9rZW4nXTsKLSAgICAgICAgICAgICAgICBzZWxmLl9leHBpcmF0aW9uID0gbmV3IERhdGUo
cmVzdWx0WydleHBpcmF0aW9uJ10pOwotICAgICAgICAgICAgICAgIHJlc29sdmUoc2VsZi5fdG9r
ZW4pOwotICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKLSAgICB9KTsKLX0KLQotUHJpdmls
ZWdlZEFQSS5fcG9zdCA9IGZ1bmN0aW9uICh1cmwsIHBhcmFtZXRlcnMpCi17Ci0gICAgcmV0dXJu
IG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgICAkLmFqYXgoewotICAgICAgICAgICAgdXJsOiAnLi4vcHJpdmlsZWdlZC1hcGkvJyArIHVy
bCwKLSAgICAgICAgICAgIHR5cGU6ICdQT1NUJywKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAn
YXBwbGljYXRpb24vanNvbicsCi0gICAgICAgICAgICBkYXRhOiBwYXJhbWV0ZXJzID8gSlNPTi5z
dHJpbmdpZnkocGFyYW1ldGVycykgOiAne30nLAotICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29u
JywKLSAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGF0YSkgewotICAgICAgICAgICAgaWYgKGRh
dGEuc3RhdHVzICE9ICdPSycpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUHJpdmls
ZWdlZEFQSSBmYWlsZWQnLCBkYXRhKTsKLSAgICAgICAgICAgICAgICByZWplY3QoZGF0YS5zdGF0
dXMpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTsK
LSAgICAgICAgfSkuZmFpbChmdW5jdGlvbiAoeGhyLCBzdGF0dXMsIGVycm9yKSB7Ci0gICAgICAg
ICAgICByZWplY3QoeGhyLnN0YXR1cyArIChlcnJvciA/ICcsICcgKyBlcnJvciA6ICcnKSArICdc
blxuV2l0aCByZXNwb25zZTpcbicgKyB4aHIucmVzcG9uc2VUZXh0KTsKLSAgICAgICAgfSk7Ci0g
ICAgfSk7Ci19Ci0KLXZhciBDb21taXRMb2dzID0gewotICAgIF9jYWNoZWRDb21taXRzQnlSZXBv
c2l0b3J5OiB7fQotfTsKLQotQ29tbWl0TG9ncy5mZXRjaENvbW1pdHMgPSBmdW5jdGlvbiAocmVw
b3NpdG9yeSwgZnJvbSwgdG8sIGtleXdvcmQpCi17Ci0gICAgdmFyIHBhcmFtcyA9IFtdOwotICAg
IGlmIChmcm9tICYmIHRvKSB7Ci0gICAgICAgIHBhcmFtcy5wdXNoKFsnZnJvbScsIGZyb21dKTsK
LSAgICAgICAgcGFyYW1zLnB1c2goWyd0bycsIHRvXSk7Ci0gICAgfQotICAgIGlmIChrZXl3b3Jk
KQotICAgICAgICBwYXJhbXMucHVzaChbJ2tleXdvcmQnLCBrZXl3b3JkXSk7Ci0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBjYWNoZSBpZiBhbGwgY29tbWl0cyBp
biB0aGUgcmFuZ2UgaGF2ZSBiZWVuIGNhY2hlZC4KLSAgICB2YXIgdXNlQ2FjaGUgPSBmcm9tICYm
IHRvICYmICFrZXl3b3JkOwotCi0gICAgdmFyIHVybCA9ICcuLi9hcGkvY29tbWl0cy8nICsgcmVw
b3NpdG9yeSArICcvPycgKyBwYXJhbXMubWFwKGZ1bmN0aW9uIChrZXlWYWx1ZSkgewotICAgICAg
ICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlWzBdKSArICc9JyArIGVuY29kZVVS
SUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7Ci0gICAgfSkuam9pbignJicpOwotCi0gICAgaWYgKHVz
ZUNhY2hlKSB7Ci0gICAgICAgIHZhciBjYWNoZWRDb21taXRzRm9yUmFuZ2UgPSBDb21taXRMb2dz
Ll9jYWNoZWRDb21taXRzQmV0d2VlbihyZXBvc2l0b3J5LCBmcm9tLCB0byk7Ci0gICAgICAgIGlm
IChjYWNoZWRDb21taXRzRm9yUmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEVtYmVyLlJT
VlAuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKGNhY2hlZENvbW1pdHNGb3JS
YW5nZSk7IH0pOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1
bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgJC5nZXRKU09OKHVybCwgZnVuY3Rp
b24gKGRhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLnN0YXR1cyAhPSAnT0snKSB7Ci0gICAg
ICAgICAgICAgICAgcmVqZWN0KGRhdGEuc3RhdHVzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBmZXRjaGVkQ29tbWl0cyA9IGRhdGEu
Y29tbWl0czsKLSAgICAgICAgICAgIGZldGNoZWRDb21taXRzLmZvckVhY2goZnVuY3Rpb24gKGNv
bW1pdCkgeyBjb21taXQudGltZSA9IG5ldyBEYXRlKGNvbW1pdC50aW1lKTsgfSk7Ci0KLSAgICAg
ICAgICAgIGlmICh1c2VDYWNoZSkKLSAgICAgICAgICAgICAgICBDb21taXRMb2dzLl9jYWNoZUNv
bnNlY3V0aXZlQ29tbWl0cyhyZXBvc2l0b3J5LCBmcm9tLCB0bywgZmV0Y2hlZENvbW1pdHMpOwot
Ci0gICAgICAgICAgICByZXNvbHZlKGZldGNoZWRDb21taXRzKTsKLSAgICAgICAgfSkuZmFpbChm
dW5jdGlvbiAoeGhyLCBzdGF0dXMsIGVycm9yKSB7Ci0gICAgICAgICAgICByZWplY3QoeGhyLnN0
YXR1cyArIChlcnJvciA/ICcsICcgKyBlcnJvciA6ICcnKSk7Ci0gICAgICAgIH0pCi0gICAgfSk7
Ci19Ci0KLUNvbW1pdExvZ3MuX2NhY2hlZENvbW1pdHNCZXR3ZWVuID0gZnVuY3Rpb24gKHJlcG9z
aXRvcnksIGZyb20sIHRvKQotewotICAgIHZhciBjYWNoZWRDb21taXRzID0gdGhpcy5fY2FjaGVk
Q29tbWl0c0J5UmVwb3NpdG9yeVtyZXBvc2l0b3J5XTsKLSAgICBpZiAoIWNhY2hlZENvbW1pdHMp
Ci0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgdmFyIHN0YXJ0Q29tbWl0ID0gY2FjaGVkQ29t
bWl0cy5jb21taXRzQnlSZXZpc2lvbltmcm9tXTsKLSAgICB2YXIgZW5kQ29tbWl0ID0gY2FjaGVk
Q29tbWl0cy5jb21taXRzQnlSZXZpc2lvblt0b107Ci0gICAgaWYgKCFzdGFydENvbW1pdCB8fCAh
ZW5kQ29tbWl0KQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHJldHVybiBjYWNoZWRDb21t
aXRzLmNvbW1pdHNCeVRpbWUuc2xpY2Uoc3RhcnRDb21taXQuY2FjaGVJbmRleCwgZW5kQ29tbWl0
LmNhY2hlSW5kZXggKyAxKTsKLX0KLQotQ29tbWl0TG9ncy5fY2FjaGVDb25zZWN1dGl2ZUNvbW1p
dHMgPSBmdW5jdGlvbiAocmVwb3NpdG9yeSwgZnJvbSwgdG8sIGNvbnNlY3V0aXZlQ29tbWl0cykK
LXsKLSAgICB2YXIgY2FjaGVkQ29tbWl0cyA9IHRoaXMuX2NhY2hlZENvbW1pdHNCeVJlcG9zaXRv
cnlbcmVwb3NpdG9yeV07Ci0gICAgaWYgKCFjYWNoZWRDb21taXRzKSB7Ci0gICAgICAgIGNhY2hl
ZENvbW1pdHMgPSB7Y29tbWl0c0J5UmV2aXNpb246IHt9LCBjb21taXRzQnlUaW1lOiBbXX07Ci0g
ICAgICAgIHRoaXMuX2NhY2hlZENvbW1pdHNCeVJlcG9zaXRvcnlbcmVwb3NpdG9yeV0gPSBjYWNo
ZWRDb21taXRzOwotICAgIH0KLQotICAgIGNvbnNlY3V0aXZlQ29tbWl0cy5mb3JFYWNoKGZ1bmN0
aW9uIChjb21taXQpIHsKLSAgICAgICAgaWYgKGNhY2hlZENvbW1pdHMuY29tbWl0c0J5UmV2aXNp
b25bY29tbWl0LnJldmlzaW9uXSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FjaGVk
Q29tbWl0cy5jb21taXRzQnlSZXZpc2lvbltjb21taXQucmV2aXNpb25dID0gY29tbWl0OwotICAg
ICAgICBjYWNoZWRDb21taXRzLmNvbW1pdHNCeVRpbWUucHVzaChjb21taXQpOwotICAgIH0pOwot
Ci0gICAgY2FjaGVkQ29tbWl0cy5jb21taXRzQnlUaW1lLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEudGltZSAmJiBiLnRpbWUgPyAoYS50aW1lIC0gYi50aW1lKSA6IChhLm9yZGVyIC0g
Yi5vcmRlcik7IH0pOwotICAgIGNhY2hlZENvbW1pdHMuY29tbWl0c0J5VGltZS5mb3JFYWNoKGZ1
bmN0aW9uIChjb21taXQsIGluZGV4KSB7IGNvbW1pdC5jYWNoZUluZGV4ID0gaW5kZXg7IH0pOwot
fQotCi0KLWZ1bmN0aW9uIE1lYXN1cmVtZW50KHJhd0RhdGEpCi17Ci0gICAgdGhpcy5fcmF3ID0g
cmF3RGF0YTsKLQotICAgIHZhciBsYXRlc3RUaW1lID0gLTE7Ci0gICAgdmFyIHJldmlzaW9ucyA9
IHRoaXMuX3Jhd1sncmV2aXNpb25zJ107Ci0gICAgLy8gRklYTUU6IEZpeCB0aGlzIGluIHRoZSBz
ZXJ2ZXIgc2lkZS4KLSAgICBpZiAoQXJyYXkuaXNBcnJheShyZXZpc2lvbnMpKQotICAgICAgICBy
ZXZpc2lvbnMgPSB7fTsKLSAgICB0aGlzLl9yYXdbJ3JldmlzaW9ucyddID0gcmV2aXNpb25zOwot
Ci0gICAgZm9yICh2YXIgcmVwb3NpdG9yeUlkIGluIHJldmlzaW9ucykgewotICAgICAgICB2YXIg
Y29tbWl0VGltZU9yVW5kZWZpbmVkID0gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF1bMV07IC8vIGUu
Zy4gWyIxNjIxOTAiLCAxMzg5OTQ1MDQ2MDAwXQotICAgICAgICBpZiAoY29tbWl0VGltZU9yVW5k
ZWZpbmVkICYmIGxhdGVzdFRpbWUgPCBjb21taXRUaW1lT3JVbmRlZmluZWQpCi0gICAgICAgICAg
ICBsYXRlc3RUaW1lID0gY29tbWl0VGltZU9yVW5kZWZpbmVkOwotICAgIH0KLSAgICB0aGlzLl9s
YXRlc3RDb21taXRUaW1lID0gbGF0ZXN0VGltZSAhPT0gLTEgPyBuZXcgRGF0ZShsYXRlc3RUaW1l
KSA6IG51bGw7Ci0gICAgdGhpcy5fYnVpbGRUaW1lID0gbmV3IERhdGUodGhpcy5fcmF3WydidWls
ZFRpbWUnXSk7Ci0gICAgdGhpcy5fY29uZmlkZW5jZUludGVydmFsID0gdW5kZWZpbmVkOwotICAg
IHRoaXMuX2Zvcm1hdHRlZFJldmlzaW9ucyA9IHVuZGVmaW5lZDsKLX0KLQotTWVhc3VyZW1lbnQu
cHJvdG90eXBlLnJldmlzaW9uRm9yUmVwb3NpdG9yeSA9IGZ1bmN0aW9uIChyZXBvc2l0b3J5SWQp
Ci17Ci0gICAgdmFyIHJldmlzaW9ucyA9IHRoaXMuX3Jhd1sncmV2aXNpb25zJ107Ci0gICAgdmFy
IHJhd0RhdGEgPSByZXZpc2lvbnNbcmVwb3NpdG9yeUlkXTsKLSAgICByZXR1cm4gcmF3RGF0YSA/
IHJhd0RhdGFbMF0gOiBudWxsOwotfQotCi1NZWFzdXJlbWVudC5wcm90b3R5cGUuY29tbWl0VGlt
ZUZvclJlcG9zaXRvcnkgPSBmdW5jdGlvbiAocmVwb3NpdG9yeUlkKQotewotICAgIHZhciByZXZp
c2lvbnMgPSB0aGlzLl9yYXdbJ3JldmlzaW9ucyddOwotICAgIHZhciByYXdEYXRhID0gcmV2aXNp
b25zW3JlcG9zaXRvcnlJZF07Ci0gICAgcmV0dXJuIHJhd0RhdGEgPyBuZXcgRGF0ZShyYXdEYXRh
WzFdKSA6IG51bGw7Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5mb3JtYXR0ZWRSZXZpc2lv
bnMgPSBmdW5jdGlvbiAocHJldmlvdXNNZWFzdXJlbWVudCkKLXsKLSAgICB2YXIgcmV2aXNpb25z
ID0gdGhpcy5fcmF3WydyZXZpc2lvbnMnXTsKLSAgICB2YXIgcHJldmlvdXNSZXZpc2lvbnMgPSBw
cmV2aW91c01lYXN1cmVtZW50ID8gcHJldmlvdXNNZWFzdXJlbWVudC5fcmF3WydyZXZpc2lvbnMn
XSA6IG51bGw7Ci0gICAgdmFyIGZvcm1hdHRlZFJldmlzaW9ucyA9IHt9OwotICAgIGZvciAodmFy
IHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbnMpIHsKLSAgICAgICAgdmFyIGN1cnJlbnRSZXZpc2lv
biA9IHJldmlzaW9uc1tyZXBvc2l0b3J5SWRdWzBdOwotICAgICAgICB2YXIgcHJldmlvdXNSZXZp
c2lvbiA9IHByZXZpb3VzUmV2aXNpb25zICYmIHByZXZpb3VzUmV2aXNpb25zW3JlcG9zaXRvcnlJ
ZF0gPyBwcmV2aW91c1JldmlzaW9uc1tyZXBvc2l0b3J5SWRdWzBdIDogbnVsbDsKLSAgICAgICAg
dmFyIGZvcm1hdHR0ZWRSZXZpc2lvbiA9IE1lYXN1cmVtZW50LmZvcm1hdFJldmlzaW9uUmFuZ2Uo
Y3VycmVudFJldmlzaW9uLCBwcmV2aW91c1JldmlzaW9uKTsKLSAgICAgICAgZm9ybWF0dGVkUmV2
aXNpb25zW3JlcG9zaXRvcnlJZF0gPSBmb3JtYXR0dGVkUmV2aXNpb247Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZvcm1hdHRlZFJldmlzaW9uczsKLX0KLQotTWVhc3VyZW1lbnQuZm9ybWF0UmV2aXNp
b25SYW5nZSA9IGZ1bmN0aW9uIChjdXJyZW50UmV2aXNpb24sIHByZXZpb3VzUmV2aXNpb24pCi17
Ci0gICAgdmFyIHJldmlzaW9uQ2hhbmdlZCA9IGZhbHNlOwotICAgIGlmIChwcmV2aW91c1Jldmlz
aW9uID09IGN1cnJlbnRSZXZpc2lvbikKLSAgICAgICAgcHJldmlvdXNSZXZpc2lvbiA9IG51bGw7
Ci0gICAgZWxzZQotICAgICAgICByZXZpc2lvbkNoYW5nZWQgPSB0cnVlOwotCi0gICAgdmFyIHJl
dmlzaW9uUHJlZml4ID0gJyc7Ci0gICAgdmFyIHJldmlzaW9uRGVsaW1pdGVyID0gJy0nOwotICAg
IHZhciBsYWJlbCA9ICcnOwotICAgIGlmIChwYXJzZUludChjdXJyZW50UmV2aXNpb24pID09IGN1
cnJlbnRSZXZpc2lvbikgeyAvLyBlLmcuIHIxMjM0NS4KLSAgICAgICAgY3VycmVudFJldmlzaW9u
ID0gcGFyc2VJbnQoY3VycmVudFJldmlzaW9uKTsKLSAgICAgICAgcmV2aXNpb25QcmVmaXggPSAn
cic7Ci0gICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQotICAgICAgICAgICAgcHJldmlvdXNS
ZXZpc2lvbiA9IChwYXJzZUludChwcmV2aW91c1JldmlzaW9uKSArIDEpOwotICAgIH0gZWxzZSBp
ZiAoY3VycmVudFJldmlzaW9uLmluZGV4T2YoJyAnKSA+PSAwKSAvLyBlLmcuIDEwLjkgMTNDNjQu
Ci0gICAgICAgIHJldmlzaW9uRGVsaW1pdGVyID0gJyAtICc7Ci0gICAgZWxzZSBpZiAoY3VycmVu
dFJldmlzaW9uLmxlbmd0aCA9PSA0MCkgeyAvLyBlLmcuIGdpdCBoYXNoCi0gICAgICAgIHZhciBm
b3JtYXR0ZWRDdXJyZW50SGFzaCA9IGN1cnJlbnRSZXZpc2lvbi5zdWJzdHJpbmcoMCwgOCk7Ci0g
ICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQotICAgICAgICAgICAgbGFiZWwgPSBwcmV2aW91
c1JldmlzaW9uLnN1YnN0cmluZygwLCA4KSArICcuLicgKyBmb3JtYXR0ZWRDdXJyZW50SGFzaDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGFiZWwgPSBmb3JtYXR0ZWRDdXJyZW50SGFzaDsK
LSAgICB9Ci0KLSAgICBpZiAoIWxhYmVsKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9u
KQotICAgICAgICAgICAgbGFiZWwgPSByZXZpc2lvblByZWZpeCArIHByZXZpb3VzUmV2aXNpb24g
KyByZXZpc2lvbkRlbGltaXRlciArIHJldmlzaW9uUHJlZml4ICsgY3VycmVudFJldmlzaW9uOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBsYWJlbCA9IHJldmlzaW9uUHJlZml4ICsgY3VycmVu
dFJldmlzaW9uOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgIGxhYmVsOiBsYWJlbCwK
LSAgICAgICAgcHJldmlvdXNSZXZpc2lvbjogcHJldmlvdXNSZXZpc2lvbiwKLSAgICAgICAgY3Vy
cmVudFJldmlzaW9uOiBjdXJyZW50UmV2aXNpb24sCi0gICAgICAgIHJldmlzaW9uQ2hhbmdlZDog
cmV2aXNpb25DaGFuZ2VkCi0gICAgfTsKLX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLmlkID0g
ZnVuY3Rpb24gKCkKLXsKLSAgICByZXR1cm4gdGhpcy5fcmF3WydpZCddOwotfQotCi1NZWFzdXJl
bWVudC5wcm90b3R5cGUubWVhbiA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy5fcmF3
WydtZWFuJ107Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5jb25maWRlbmNlSW50ZXJ2YWwg
PSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHRoaXMuX2NvbmZpZGVuY2VJbnRlcnZhbCA9PT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgIHZhciBkZWx0YSA9IFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVy
dmFsRGVsdGEoMC45NSwgdGhpcy5fcmF3WyJpdGVyYXRpb25Db3VudCJdLCB0aGlzLl9yYXdbInN1
bSJdLCB0aGlzLl9yYXdbInNxdWFyZVN1bSJdKTsKLSAgICAgICAgdmFyIG1lYW4gPSB0aGlzLm1l
YW4oKTsKLSAgICAgICAgdGhpcy5fY29uZmlkZW5jZUludGVydmFsID0gaXNOYU4oZGVsdGEpID8g
bnVsbCA6IFttZWFuIC0gZGVsdGEsIG1lYW4gKyBkZWx0YV07Ci0gICAgfQotICAgIHJldHVybiB0
aGlzLl9jb25maWRlbmNlSW50ZXJ2YWw7Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5sYXRl
c3RDb21taXRUaW1lID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLl9sYXRlc3RDb21t
aXRUaW1lIHx8IHRoaXMuX2J1aWxkVGltZTsKLX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLmJ1
aWxkSWQgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIHRoaXMuX3Jhd1snYnVpbGQnXTsKLX0K
LQotTWVhc3VyZW1lbnQucHJvdG90eXBlLmJ1aWxkTnVtYmVyID0gZnVuY3Rpb24gKCkKLXsKLSAg
ICByZXR1cm4gdGhpcy5fcmF3WydidWlsZE51bWJlciddOwotfQotCi1NZWFzdXJlbWVudC5wcm90
b3R5cGUuYnVpbGRlcklkID0gZnVuY3Rpb24gKCkKLXsKLSAgICByZXR1cm4gdGhpcy5fcmF3Wydi
dWlsZGVyJ107Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5idWlsZFRpbWUgPSBmdW5jdGlv
bigpCi17Ci0gICAgcmV0dXJuIHRoaXMuX2J1aWxkVGltZTsKLX0KLQotTWVhc3VyZW1lbnQucHJv
dG90eXBlLmZvcm1hdHRlZEJ1aWxkVGltZSA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuIE1l
YXN1cmVtZW50Ll9mb3JtYXREYXRlKHRoaXMuYnVpbGRUaW1lKCkpOwotfQotCi1NZWFzdXJlbWVu
dC5fZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChkYXRlKQotewotICAgIHJldHVybiBkYXRlLnRvSVNP
U3RyaW5nKCkucmVwbGFjZSgnVCcsICcgJykucmVwbGFjZSgvXC5cZCtaJC8sICcnKTsKLX0KLQot
TWVhc3VyZW1lbnQucHJvdG90eXBlLmJ1Z3MgPSBmdW5jdGlvbiAoKQotewotICAgIHJldHVybiB0
aGlzLl9yYXdbJ2J1Z3MnXTsKLX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLmhhc0J1Z3MgPSBm
dW5jdGlvbiAoKQotewotICAgIHZhciBidWdzID0gdGhpcy5idWdzKCk7Ci0gICAgcmV0dXJuIGJ1
Z3MgJiYgT2JqZWN0LmtleXMoYnVncykubGVuZ3RoOwotfQotCi1NZWFzdXJlbWVudC5wcm90b3R5
cGUubWFya2VkT3V0bGllciA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuIHRoaXMuX3Jhd1sn
bWFya2VkT3V0bGllciddOwotfQotCi1NZWFzdXJlbWVudC5wcm90b3R5cGUuc2V0TWFya2VkT3V0
bGllciA9IGZ1bmN0aW9uIChtYXJrZWRPdXRsaWVyKQotewotICAgIHZhciBwYXJhbXMgPSB7J3J1
bic6IHRoaXMuaWQoKSwgJ21hcmtlZE91dGxpZXInOiBtYXJrZWRPdXRsaWVyfTsKLSAgICByZXR1
cm4gUHJpdmlsZWdlZEFQSS5zZW5kUmVxdWVzdCgndXBkYXRlLXJ1bi1zdGF0dXMnLCBwYXJhbXMp
LnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKLSAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKLSAgICAg
ICAgYWxlcnQoJ0ZhaWxlZCB0byB1cGRhdGUgdGhlIG91dGxpZXIgc3RhdHVzOiAnICsgZXJyb3Ip
OwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBSdW5zRGF0YShyYXdEYXRhKQotewotICAgIHRoaXMu
X21lYXN1cmVtZW50cyA9IHJhd0RhdGEubWFwKGZ1bmN0aW9uIChydW4pIHsgcmV0dXJuIG5ldyBN
ZWFzdXJlbWVudChydW4pOyB9KTsKLX0KLQotUnVuc0RhdGEucHJvdG90eXBlLmNvdW50ID0gZnVu
Y3Rpb24gKCkKLXsKLSAgICByZXR1cm4gdGhpcy5fbWVhc3VyZW1lbnRzLmxlbmd0aDsKLX0KLQot
UnVuc0RhdGEucHJvdG90eXBlLnRpbWVTZXJpZXNCeUNvbW1pdFRpbWUgPSBmdW5jdGlvbiAoaW5j
bHVkZU91dGxpZXJzLCBleHRlbmRUb0Z1dHVyZSkKLXsKLSAgICByZXR1cm4gdGhpcy5fdGltZVNl
cmllc0J5VGltZUludGVybmFsKHRydWUsIGluY2x1ZGVPdXRsaWVycywgZXh0ZW5kVG9GdXR1cmUp
OwotfQotCi1SdW5zRGF0YS5wcm90b3R5cGUudGltZVNlcmllc0J5QnVpbGRUaW1lID0gZnVuY3Rp
b24gKGluY2x1ZGVPdXRsaWVycywgZXh0ZW5kVG9GdXR1cmUpCi17Ci0gICAgcmV0dXJuIHRoaXMu
X3RpbWVTZXJpZXNCeVRpbWVJbnRlcm5hbChmYWxzZSwgaW5jbHVkZU91dGxpZXJzLCBleHRlbmRU
b0Z1dHVyZSk7Ci19Ci0KLVJ1bnNEYXRhLnByb3RvdHlwZS5fdGltZVNlcmllc0J5VGltZUludGVy
bmFsID0gZnVuY3Rpb24gKHVzZUNvbW1pdFR5cGUsIGluY2x1ZGVPdXRsaWVycywgZXh0ZW5kVG9G
dXR1cmUpCi17Ci0gICAgdmFyIHNlcmllcyA9IG5ldyBBcnJheSgpOwotICAgIHZhciBzZXJpZXNJ
bmRleCA9IDA7Ci0gICAgZm9yICh2YXIgbWVhc3VyZW1lbnQgb2YgdGhpcy5fbWVhc3VyZW1lbnRz
KSB7Ci0gICAgICAgIGlmIChtZWFzdXJlbWVudC5tYXJrZWRPdXRsaWVyKCkgJiYgIWluY2x1ZGVP
dXRsaWVycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzZXJpZXMucHVzaCh7Ci0g
ICAgICAgICAgICBtZWFzdXJlbWVudDogbWVhc3VyZW1lbnQsCi0gICAgICAgICAgICB0aW1lOiB1
c2VDb21taXRUeXBlID8gbWVhc3VyZW1lbnQubGF0ZXN0Q29tbWl0VGltZSgpIDogbWVhc3VyZW1l
bnQuYnVpbGRUaW1lKCksCi0gICAgICAgICAgICBzZWNvbmRhcnlUaW1lOiBtZWFzdXJlbWVudC5i
dWlsZFRpbWUoKSwKLSAgICAgICAgICAgIHZhbHVlOiBtZWFzdXJlbWVudC5tZWFuKCksCi0gICAg
ICAgICAgICBpbnRlcnZhbDogbWVhc3VyZW1lbnQuY29uZmlkZW5jZUludGVydmFsKCksCi0gICAg
ICAgICAgICBtYXJrZWRPdXRsaWVyOiBtZWFzdXJlbWVudC5tYXJrZWRPdXRsaWVyKCksCi0gICAg
ICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFRpbWVTZXJpZXMoc2VyaWVzLCBleHRlbmRU
b0Z1dHVyZSk7Ci19Ci0KLS8vIEZJWE1FOiBXZSBuZWVkIHRvIGRldmlzZSBhIHdheSB0byBmZXRj
aCBydW5zIGluIG11bHRpcGxlIGNodW5rcyBzbyB0aGF0Ci0vLyB3ZSBkb24ndCBoYXZlIHRvIGZl
dGNoIHRoZSBlbnRpcmUgdGltZSBzZXJpZXMgdG8ganVzdCBzaG93IHRoZSBsYXN0IDMgZGF5cy4K
LVJ1bnNEYXRhLmZldGNoUnVucyA9IGZ1bmN0aW9uIChwbGF0Zm9ybUlkLCBtZXRyaWNJZCwgdGVz
dEdyb3VwSWQsIHVzZUNhY2hlKQotewotICAgIHZhciB1cmwgPSB0aGlzLnBhdGhGb3JGZXRjaGlu
Z1J1bnMocGxhdGZvcm1JZCwgbWV0cmljSWQsIHRlc3RHcm91cElkLCB1c2VDYWNoZSk7Ci0gICAg
cmV0dXJuIG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkg
ewotICAgICAgICAkLmdldEpTT04odXJsLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAgICAgICAg
ICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gJ09LJykgewotICAgICAgICAgICAgICAgIHJlamVj
dChyZXNwb25zZS5zdGF0dXMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJlc29sdmUoUnVuc0RhdGEuY3JlYXRlUnVuc0RhdGFJblJlc3BvbnNl
KHJlc3BvbnNlKSk7Ci0gICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKHhociwgc3RhdHVzLCBlcnJv
cikgewotICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gNDA0ICYmIHVzZUNhY2hlKQotICAg
ICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmVqZWN0KHhoci5zdGF0dXMgKyAoZXJyb3IgPyAnLCAnICsgZXJyb3IgOiAnJykpOwot
ICAgICAgICB9KQotICAgIH0pOwotfQotCi1SdW5zRGF0YS5wYXRoRm9yRmV0Y2hpbmdSdW5zID0g
ZnVuY3Rpb24gKHBsYXRmb3JtSWQsIG1ldHJpY0lkLCB0ZXN0R3JvdXBJZCwgdXNlQ2FjaGUpCi17
Ci0gICAgdmFyIHBhdGggPSB1c2VDYWNoZSA/ICcvZGF0YS8nIDogJy9hcGkvcnVucy8nOwotCi0g
ICAgcGF0aCArPSBwbGF0Zm9ybUlkICsgJy0nICsgbWV0cmljSWQgKyAnLmpzb24nOwotICAgIGlm
ICh0ZXN0R3JvdXBJZCkKLSAgICAgICAgcGF0aCArPSAnP3Rlc3RHcm91cD0nICsgdGVzdEdyb3Vw
SWQ7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLQotUnVuc0RhdGEuY3JlYXRlUnVuc0RhdGFJblJl
c3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKQotewotICAgIGRlbGV0ZSByZXNwb25zZS5zdGF0
dXM7Ci0KLSAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmNvbmZpZ3VyYXRpb25zOwotICAgIGZvciAo
dmFyIGNvbmZpZyBpbiBkYXRhKQotICAgICAgICBkYXRhW2NvbmZpZ10gPSBuZXcgUnVuc0RhdGEo
ZGF0YVtjb25maWddKTsKLQotICAgIGlmIChyZXNwb25zZS5sYXN0TW9kaWZpZWQpCi0gICAgICAg
IHJlc3BvbnNlLmxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKHJlc3BvbnNlLmxhc3RNb2RpZmllZCk7
Ci0KLSAgICByZXR1cm4gcmVzcG9uc2U7Ci19Ci0KLS8vIEZJWE1FOiBJdCB3YXMgYSBtaXN0YWtl
IHRvIHB1dCB0aGlzIGluIHRoZSBjbGllbnQgc2lkZS4gV2Ugc2hvdWxkIHB1dCB0aGlzIGJhY2sg
aW4gdGhlIEpTT04uCi1SdW5zRGF0YS51bml0RnJvbU1ldHJpY05hbWUgPSBmdW5jdGlvbiAobWV0
cmljTmFtZSkKLXsKLSAgICB2YXIgc3VmZml4ID0gbWV0cmljTmFtZS5tYXRjaCgnKFtBLXpdW2Et
el0rfEZyYW1lUmF0ZSkkJylbMF07Ci0gICAgdmFyIHVuaXQgPSB7Ci0gICAgICAgICdGcmFtZVJh
dGUnOiAnZnBzJywKLSAgICAgICAgJ1J1bnMnOiAnL3MnLAotICAgICAgICAnVGltZSc6ICdtcycs
Ci0gICAgICAgICdEdXJhdGlvbic6ICdtcycsCi0gICAgICAgICdNYWxsb2MnOiAnQicsCi0gICAg
ICAgICdIZWFwJzogJ0InLAotICAgICAgICAnQWxsb2NhdGlvbnMnOiAnQicsCi0gICAgICAgICdT
aXplJzogJ0InLAotICAgICAgICAnU2NvcmUnOiAncHQnLAotICAgICAgICAnUG93ZXInOiAnVycK
LSAgICB9W3N1ZmZpeF07Ci0gICAgcmV0dXJuIHVuaXQ7Ci19Ci0KLVJ1bnNEYXRhLmlzU21hbGxl
ckJldHRlciA9IGZ1bmN0aW9uICh1bml0KQotewotICAgIHJldHVybiB1bml0ICE9ICdmcHMnICYm
IHVuaXQgIT0gJy9zJyAmJiB1bml0ICE9ICdwdCc7Ci19Ci0KLS8vIEZJWE1FOiBFeHRlbmRpbmcg
dGhlIGJhc2VsaW5lL3RhcmdldCB0byB0aGUgZnV0dXJlIHNob3VsZCBiZSBhIHNlcnZlci1zaWRl
IGNvbmZpZ3VyYXRpb24uCi1mdW5jdGlvbiBUaW1lU2VyaWVzKHNlcmllcywgZXh0ZW5kVG9GdXR1
cmUpCi17Ci0gICAgdGhpcy5fc2VyaWVzID0gc2VyaWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsK
LSAgICAgICAgdmFyIGRpZmYgPSBhLnRpbWUgLSBiLnRpbWU7Ci0gICAgICAgIHJldHVybiBkaWZm
ID8gZGlmZiA6IGEuc2Vjb25kYXJ5VGltZSAtIGIuc2Vjb25kYXJ5VGltZTsKLSAgICB9KTsKLQot
ICAgIGlmIChleHRlbmRUb0Z1dHVyZSAmJiB0aGlzLl9zZXJpZXMubGVuZ3RoKSB7Ci0gICAgICAg
IHZhciBsYXN0UG9pbnQgPSB0aGlzLl9zZXJpZXNbdGhpcy5fc2VyaWVzLmxlbmd0aCAtIDFdOwot
ICAgICAgICB0aGlzLl9zZXJpZXMucHVzaCh7Ci0gICAgICAgICAgICBtZWFzdXJlbWVudDogbGFz
dFBvaW50Lm1lYXN1cmVtZW50LAotICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSArIDI0ICog
MzYwMCAqIDEwMDAsCi0gICAgICAgICAgICBzZWNvbmRhcnlUaW1lOiBEYXRlLm5vdygpICsgMjQg
KiAzNjAwICogMTAwMCwKLSAgICAgICAgICAgIHZhbHVlOiBsYXN0UG9pbnQudmFsdWUsCi0gICAg
ICAgICAgICBpbnRlcnZhbDogbGFzdFBvaW50LmludGVydmFsLAotICAgICAgICAgICAgbWFya2Vk
T3V0bGllcjogbGFzdFBvaW50Lm1hcmtlZE91dGxpZXIsCi0gICAgICAgIH0pOwotICAgIH0KLQot
ICAgIHZhciBzZWxmID0gdGhpczsKLSAgICB2YXIgbWluID0gdW5kZWZpbmVkOwotICAgIHZhciBt
YXggPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5fc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKHBvaW50
LCBpbmRleCkgewotICAgICAgICBwb2ludC5zZXJpZXMgPSBzZWxmOwotICAgICAgICBwb2ludC5z
ZXJpZXNJbmRleCA9IGluZGV4OwotICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQgfHwgbWlu
ID4gcG9pbnQudmFsdWUpCi0gICAgICAgICAgICBtaW4gPSBwb2ludC52YWx1ZTsKLSAgICAgICAg
aWYgKG1heCA9PT0gdW5kZWZpbmVkIHx8IG1heCA8IHBvaW50LnZhbHVlKQotICAgICAgICAgICAg
bWF4ID0gcG9pbnQudmFsdWU7Ci0gICAgfSk7Ci0gICAgdGhpcy5fbWluID0gbWluOwotICAgIHRo
aXMuX21heCA9IG1heDsKLX0KLQotVGltZVNlcmllcy5wcm90b3R5cGUuZmluZFBvaW50QnlJbmRl
eCA9IGZ1bmN0aW9uIChpbmRleCkKLXsKLSAgICBpZiAoIXRoaXMuX3NlcmllcyB8fCBpbmRleCA8
IDAgfHwgaW5kZXggPj0gdGhpcy5fc2VyaWVzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllc1tpbmRleF07Ci19Ci0KLVRpbWVTZXJpZXMucHJvdG90
eXBlLmZpbmRQb2ludEJ5QnVpbGQgPSBmdW5jdGlvbiAoYnVpbGRJZCkKLXsKLSAgICByZXR1cm4g
dGhpcy5fc2VyaWVzLmZpbmQoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBwb2ludC5tZWFzdXJl
bWVudC5idWlsZElkKCkgPT0gYnVpbGRJZDsgfSkKLX0KLQotVGltZVNlcmllcy5wcm90b3R5cGUu
ZmluZFBvaW50QnlSZXZpc2lvbnMgPSBmdW5jdGlvbiAocmV2aXNpb25zKQotewotICAgIHJldHVy
biB0aGlzLl9zZXJpZXMuZmluZChmdW5jdGlvbiAocG9pbnQsIGluZGV4KSB7Ci0gICAgICAgIGZv
ciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbnMpIHsKLSAgICAgICAgICAgIGlmIChwb2lu
dC5tZWFzdXJlbWVudC5yZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeUlkKSAhPSByZXZp
c2lvbnNbcmVwb3NpdG9yeUlkXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSk7Ci19Ci0KLVRpbWVTZXJpZXMucHJv
dG90eXBlLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZCA9IGZ1bmN0aW9uIChtZWFzdXJlbWVudElk
KQotewotICAgIHJldHVybiB0aGlzLl9zZXJpZXMuZmluZChmdW5jdGlvbiAocG9pbnQpIHsgcmV0
dXJuIHBvaW50Lm1lYXN1cmVtZW50LmlkKCkgPT0gbWVhc3VyZW1lbnRJZDsgfSk7Ci19Ci0KLVRp
bWVTZXJpZXMucHJvdG90eXBlLmZpbmRQb2ludEFmdGVyVGltZSA9IGZ1bmN0aW9uICh0aW1lKQot
ewotICAgIHJldHVybiB0aGlzLl9zZXJpZXMuZmluZChmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJu
IHBvaW50LnRpbWUgPj0gdGltZTsgfSk7Ci19Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLnNlcmll
c0JldHdlZW5Qb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb2ludCwgZW5kUG9pbnQpCi17Ci0gICAg
aWYgKHR5cGVvZihzdGFydFBvaW50LnNlcmllc0luZGV4KSAhPSAibnVtYmVyIiB8fCB0eXBlb2Yo
ZW5kUG9pbnQuc2VyaWVzSW5kZXgpICE9ICJudW1iZXIiKQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICByZXR1cm4gdGhpcy5fc2VyaWVzLnNsaWNlKHN0YXJ0UG9pbnQuc2VyaWVzSW5kZXgsIGVu
ZFBvaW50LnNlcmllc0luZGV4ICsgMSk7Ci19Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLm1pbk1h
eEZvclRpbWVSYW5nZSA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlnbm9yZU91dGxp
ZXIpCi17Ci0gICAgdmFyIGRhdGEgPSB0aGlzLl9zZXJpZXM7Ci0gICAgdmFyIGkgPSAwOwotICAg
IGlmIChzdGFydFRpbWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZGF0YS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHBvaW50ID0gZGF0YVtpXTsKLSAg
ICAgICAgICAgIGlmIChwb2ludC50aW1lID49IHN0YXJ0VGltZSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgIGktLTsKLSAgICB9
Ci0gICAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7Ci0gICAgdmFyIG1heCA9IE51bWJlci5N
SU5fVkFMVUU7Ci0gICAgZm9yICg7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZh
ciBwb2ludCA9IGRhdGFbaV07Ci0gICAgICAgIGlmIChwb2ludC5pc091dGxpZXIgJiYgaWdub3Jl
T3V0bGllcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YXIgY3VycmVudE1pbiA9
IHBvaW50LmludGVydmFsID8gcG9pbnQuaW50ZXJ2YWxbMF0gOiBwb2ludC52YWx1ZTsKLSAgICAg
ICAgdmFyIGN1cnJlbnRNYXggPSBwb2ludC5pbnRlcnZhbCA/IHBvaW50LmludGVydmFsWzFdIDog
cG9pbnQudmFsdWU7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRNaW4gPCBtaW4pCi0gICAgICAgICAg
ICBtaW4gPSBjdXJyZW50TWluOwotICAgICAgICBpZiAoY3VycmVudE1heCA+IG1heCkKLSAgICAg
ICAgICAgIG1heCA9IGN1cnJlbnRNYXg7Ci0KLSAgICAgICAgaWYgKHBvaW50LnRpbWUgPj0gZW5k
VGltZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gW21pbiwgbWF4XTsK
LX0KLQotVGltZVNlcmllcy5wcm90b3R5cGUuc2VyaWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4g
dGhpcy5fc2VyaWVzOyB9Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLnJhd1ZhbHVlcyA9IGZ1bmN0
aW9uICgpCi17Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllcy5tYXAoZnVuY3Rpb24gKHBvaW50KSB7
IHJldHVybiBwb2ludC52YWx1ZSB9KTsKLX0KLQotVGltZVNlcmllcy5wcm90b3R5cGUubGFzdFBv
aW50ID0gZnVuY3Rpb24gKCkKLXsKLSAgICBpZiAoIXRoaXMuX3NlcmllcyB8fCAhdGhpcy5fc2Vy
aWVzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmll
c1t0aGlzLl9zZXJpZXMubGVuZ3RoIC0gMV07Ci19Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLnBy
ZXZpb3VzUG9pbnQgPSBmdW5jdGlvbiAocG9pbnQpCi17Ci0gICAgaWYgKCFwb2ludC5zZXJpZXNJ
bmRleCkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllc1twb2lu
dC5zZXJpZXNJbmRleCAtIDFdOwotfQotCi1UaW1lU2VyaWVzLnByb3RvdHlwZS5uZXh0UG9pbnQg
PSBmdW5jdGlvbiAocG9pbnQpCi17Ci0gICAgaWYgKCFwb2ludC5zZXJpZXNJbmRleCkKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllc1twb2ludC5zZXJpZXNJbmRl
eCArIDFdOwotfQotCi1pZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgewotICAgIFN0
YXRpc3RpY3MgPSByZXF1aXJlKCcuLi9zaGFyZWQvc3RhdGlzdGljcy5qcycpOwotICAgIG1vZHVs
ZS5leHBvcnRzLk1lYXN1cmVtZW50ID0gTWVhc3VyZW1lbnQ7Ci0gICAgbW9kdWxlLmV4cG9ydHMu
UnVuc0RhdGEgPSBSdW5zRGF0YTsKLSAgICBtb2R1bGUuZXhwb3J0cy5UaW1lU2VyaWVzID0gVGlt
ZVNlcmllczsKLX0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djIvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvaW5kZXgu
aHRtbAppbmRleCAxYzhmYzI2MTY2NzhkYjM1ZmFmNGIyNmFmODM4NGVkNDNhYTA2M2ViLi41MGM1
NTZiOTVjZDM0YmU0NzQ1ZWUxZWU4M2RlZGEyM2MxNzg1YWJkIDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92Mi9pbmRleC5odG1sCkBAIC0xLDgwMyArMSwxMjgzIEBACiA8
IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+Ci0gICAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgotICAgIDx0aXRsZT5QZXJmb3JtYW5jZSBEYXNoYm9hcmQgaXMgTG9hZGluZy4uLjwvdGl0bGU+
Ci0KLSAgICA8bGluayByZWw9InByZWZldGNoIiBocmVmPSIuLi9kYXRhL21hbmlmZXN0Lmpzb24i
PgotICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vanNvbiIgc3JjPSIuLi9kYXRhL21hbmlm
ZXN0Lmpzb24iPjwvc2NyaXB0PgotICAgIDxzY3JpcHQ+Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVk
aXJlY3RUb1YzSWZOZWVkZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaGFzaCA9IHdp
bmRvdy5sb2NhdGlvbi5oYXNoOwotICAgICAgICAgICAgaWYgKGhhc2guc3RhcnRzV2l0aCgnIy9h
bmFseXNpcycpIHx8IGhhc2guc3RhcnRzV2l0aCgnIy9kYXNoYm9hcmQnKSkKLSAgICAgICAgICAg
ICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPSAnL3YzLyc7Ci0gICAgICAgIH0KLQotICAg
ICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gcmVkaXJlY3RUb1YzSWZOZWVkZWQ7Ci0gICAgICAg
IHJlZGlyZWN0VG9WM0lmTmVlZGVkKCk7Ci0KLSAgICA8L3NjcmlwdD4KLQotICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iYXBwLmNzcyI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJjaGFydC1wYW5lLmNzcyI+Ci0KLSAgICA8c2NyaXB0IHNyYz0ianMvanF1ZXJ5Lm1p
bi5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5taW4uanMi
IGRlZmVyPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9oYW5kbGViYXJzLmpzIiBkZWZl
cj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvZW1iZXIuanMiIGRlZmVyPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJqcy9lbWJlci1kYXRhLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAg
ICA8c2NyaXB0IHNyYz0ianMvZDMvZDMubWluLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHNyYz0iLi4vc2hhcmVkL3N0YXRpc3RpY3MuanMiIGRlZmVyPjwvc2NyaXB0PgotICAgIDxz
Y3JpcHQgc3JjPSJzdGF0aXN0aWNzLXN0cmF0ZWdpZXMuanMiIGRlZmVyPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgc3JjPSJkYXRhLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0i
YXBwLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ibWFuaWZlc3QuanMiIGRl
ZmVyPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJhbmFseXNpcy5qcyIgZGVmZXI+PC9zY3Jp
cHQ+Ci0gICAgPHNjcmlwdCBzcmM9InBvcHVwLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHNyYz0iaW50ZXJhY3RpdmUtY2hhcnQuanMiIGRlZmVyPjwvc2NyaXB0PgotICAgIDxzY3Jp
cHQgc3JjPSJjb21taXRzLXZpZXdlci5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0
IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9ImRhc2hib2FyZCI+
Ci0gICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+Ci0gICAgICAgICAgICB7e3BhcnRpYWwgIm5h
dmJhciJ9fQotICAgICAgICAgICAge3t2aWV3IEFwcC5OdW1iZXJPZkRheXNDb250cm9sVmlldyB0
YWdOYW1lPSJ1bCIgbnVtYmVyT2ZEYXlzPW51bWJlck9mRGF5c319Ci0gICAgICAgICAgICA8dWwg
Y2xhc3M9ImNvbnRyb2xzIj4KLSAgICAgICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAg
ICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIGNsYXNzPSJjb250cm9sLWJ1dHRvbiIge3th
Y3Rpb24gdG9nZ2xlRWRpdE1vZGV9fT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7I2lmIGNv
bnRyb2xsZXIuZWRpdE1vZGV9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaCBl
ZGl0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAg
ICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgICA8
L3VsPgotICAgICAgICA8L2hlYWRlcj4KLQotICAgICAgICA8dGFibGUge3tiaW5kLWF0dHIgY2xh
c3M9IjpkYXNoYm9hcmQgZWRpdE1vZGU6ZWRpdE1vZGU6cmVhZG9ubHkifX0+Ci0gICAgICAgIDx0
aGVhZD4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KLSAgICAg
ICAgICAgICAgICB7eyNlYWNoIGhlYWRlckNvbHVtbnN9fQotICAgICAgICAgICAgICAgICAgICB7
eyNpZiBjb250cm9sbGVyLmVkaXRNb2RlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiB0
aXRsZT0iUmVtb3ZlIGNvbHVtbiIge3thY3Rpb24gInJlbW92ZUNvbHVtbiIgaW5kZXh9fT4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twYXJ0aWFsICJjbG9zZS1idXR0b24ifX0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAge3tpbnB1dCB2YWx1ZT1sYWJlbH19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Ro
PgotICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAg
PHRoPnt7bGFiZWx9fTwvdGg+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAg
ICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICB7eyNpZiBjb250cm9sbGVyLmVkaXRN
b2RlfX0KLSAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQgdmFsdWU9bmV3Q29sdW1uSGVh
ZGVyIGFjdGlvbj0iYWRkQ29sdW1uIiBwbGFjZWhvbGRlcj0iQWRkIGEgY29sdW1uIn19PC90ZD4K
LSAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3Ro
ZWFkPgotICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICB7eyNlYWNoIHJvd3N9fQotICAgICAg
ICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAge3sjaWYgY29udHJvbGxlci5lZGl0
TW9kZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGg+Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgdGl0bGU9IlJlbW92ZSByb3ciIHt7
YWN0aW9uICJyZW1vdmVSb3ciIHRoaXN9fT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3twYXJ0aWFsICJjbG9zZS1idXR0b24ifX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpbnB1dCB2YWx1ZT1oZWFkZXJ9
fQotICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgICAgICAgICAge3tl
bHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz0ibGFiZWwiPnt7
aGVhZGVyfX08L3NwYW4+PC90aD4KLSAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAg
ICAgICAgICAgICAgICB7eyNlYWNoIGNlbGxzfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0
ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBlbXB0eX19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHt7I2lmIGNvbnRyb2xsZXIuZWRpdE1vZGV9fQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t2aWV3IEFwcC5Qb3B1cFZpZXcgbGlzdD1w
aWNrZXJEYXRhIGxhYmVsPSdDaG9vc2UnfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZWxzZX19Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHt7I2lmIGNoYXJ0RGF0YX19Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtc3RhdHVzIj4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBsYXRlc3RTdGF0dXN9
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhdGVzdFN0
YXR1cy5jdXJyZW50VmFsdWV9fXt7Y2hhcnREYXRhLnVuaXR9fQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBsYXRlc3RTdGF0dXMubGFiZWx9fQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ge3tiaW5k
LWF0dHIgY2xhc3M9IjpzdGF0dXMtbGFiZWwgbGF0ZXN0U3RhdHVzLmNsYXNzTmFtZSJ9fT57e2xh
dGVzdFN0YXR1cy5sYWJlbH19PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNsaW5rLXRvICdjaGFydHMn
IChxdWVyeS1wYXJhbXMgcGFuZUxpc3Q9cGFuZUxpc3Qgc2luY2U9Y29udHJvbGxlci5zaW5jZSl9
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aW50ZXJhY3RpdmUt
Y2hhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRE
YXRhPWNoYXJ0RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb21haW49Y29udHJvbGxlci5zaGFyZWREb21haW4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2VsZWN0aW9uPWZhbHNlfX0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3sjaWYgZmFpbHVyZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0iZmFpbHVyZSI+e3tmYWlsdXJlfX08L2Rpdj4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MiPnt7cGFydGlhbCAic3Bpbm5lciJ9
fTwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHt7I2lmIGNvbnRyb2xsZXIuZWRpdE1vZGV9fQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgdGl0bGU9IlJl
c2V0IHBhbmUiIGNsYXNzPSJyZXNldCIge3thY3Rpb24gInJlc2V0UGFuZSIgdGhpc319PgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFydGlhbCAiY2xvc2UtYnV0
dG9uIn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAg
ICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICAgICAge3sjaWYgY29udHJvbGxlci5l
ZGl0TW9kZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KLSAgICAgICAgICAg
ICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICB7ey9l
YWNofX0KLSAgICAgICAgICAgIHt7I2lmIGNvbnRyb2xsZXIuZWRpdE1vZGV9fQotICAgICAgICAg
ICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQgdmFsdWU9bmV3Um93
SGVhZGVyIGFjdGlvbj0iYWRkUm93IiBwbGFjZWhvbGRlcj0iQWRkIGEgcm93In19PC90ZD4KLSAg
ICAgICAgICAgICAgICAgICAge3sjZWFjaCBlbXB0eVJvd319Ci0gICAgICAgICAgICAgICAgICAg
ICAgICA8dGQ+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAg
ICAgICAgICAgIDx0ZD48L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICB7
ey9pZn19Ci0gICAgICAgIDwvdGJvZHk+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgPC9zY3JpcHQ+
Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5h
bWU9ImNoYXJ0cyI+Ci0gICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+Ci0gICAgICAgICAgICB7
e3BhcnRpYWwgIm5hdmJhciJ9fQotICAgICAgICAgICAgPHVsIGNsYXNzPSJjb250cm9scyI+Ci0g
ICAgICAgICAgICAgICAgPGxpPnt7dmlldyBBcHAuUG9wdXBWaWV3IGxpc3Q9cGxhdGZvcm1zIGxh
YmVsPSdBZGQgcGFuZSd9fTwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgPHVs
IGNsYXNzPSJjb250cm9scyI+Ci0gICAgICAgICAgICAgICAgPGxpPnt7dmlldyBBcHAuU3RhcnRU
aW1lU2xpZGVyVmlldyBzdGFydFRpbWU9c3RhcnRUaW1lIG9sZGVzdFN0YXJ0VGltZT1vbGRlc3RT
dGFydFRpbWV9fTwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICA8L2hlYWRlcj4KLQot
ICAgICAgICB7eyNlYWNoIHBhbmVzIGl0ZW1Db250cm9sbGVyPSJwYW5lIn19Ci0gICAgICAgICAg
ICA8c2VjdGlvbiBjbGFzcz0iY2hhcnQtcGFuZSBpbi1jaGFydHMiIHRhYmluZGV4PSIwIj4KLSAg
ICAgICAgICAgICAgICA8aGVhZGVyPgotICAgICAgICAgICAgICAgICAgICA8aDEge3thY3Rpb24g
InRvZ2dsZURldGFpbHMifX0+e3ttZXRyaWMuZnVsbE5hbWV9fSAtIHt7cGxhdGZvcm0ubmFtZX19
PC9oMT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgdGl0
bGU9IkNsb3NlIiBjbGFzcz0iY2xvc2UtYnV0dG9uIiB7e2FjdGlvbiAiY2xvc2UifX0+e3twYXJ0
aWFsICJjbG9zZS1idXR0b24ifX08L2E+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIG1vdmlu
Z0F2ZXJhZ2VTdHJhdGVnaWVzfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imph
dmFzY3JpcHQ6ZmFsc2UiIHRpdGxlPSJTdGF0aXN0aWNhbCBUb29scyIgY2xhc3M9InN0YXQtYnV0
dG9uIiB7e2FjdGlvbiAidG9nZ2xlU3RhdFBhbmUifX0+e3twYXJ0aWFsICJzdGF0LWJ1dHRvbiJ9
fTwvYT4KLSAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICA8
YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiB7e2JpbmQtYXR0ciB0aXRsZT1zaG93T3V0bGllclRp
dGxlIGNsYXNzPSI6b3V0bGllci1idXR0b24gc2hvd091dGxpZXI6c2hvdzpoaWRlIn19Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7e2FjdGlvbiAidG9nZ2xlU2hvd091dGxpZXIifX0+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7e3BhcnRpYWwgIm91dGxpZXItYnV0dG9uIn19Ci0gICAgICAg
ICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlw
dDpmYWxzZSIgdGl0bGU9IkFuYWx5emUgdGhlIHNlbGVjdGVkIHJhbmdlIiBjbGFzcz0iYW5hbHlz
aXMtYnV0dG9uIiB7e2FjdGlvbiAidG9nZ2xlQnVnc1BhbmUifX0+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB7e3BhcnRpYWwgImFuYWx5c2lzLWJ1dHRvbiJ9fQotICAgICAgICAgICAgICAgICAg
ICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIEFwcC5NYW5pZmVzdC5yZXBvc2l0b3Jp
ZXNXaXRoUmVwb3J0ZWRDb21taXRzfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9
ImphdmFzY3JpcHQ6ZmFsc2UiIHRpdGxlPSJTZWFyY2ggY29tbWl0cyBieSBhIGtleXdvcmQiIGNs
YXNzPSJzZWFyY2gtYnV0dG9uIiB7e2FjdGlvbiAidG9nZ2xlU2VhcmNoUGFuZSJ9fT57e3BhcnRp
YWwgInNlYXJjaC1idXR0b24ifX08L2E+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAg
ICAgICAgICAgICAgICA8L2hlYWRlcj4KLQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJv
ZHkiPgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdmctY29udGFpbmVyIj4KLSAg
ICAgICAgICAgICAgICAgICAge3sjaWYgY2hhcnREYXRhfX0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHt7aW50ZXJhY3RpdmUtY2hhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
dERhdGE9Y2hhcnREYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzPXJhbmdl
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbj1tYWluUGxvdERvbWFpbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPXRydWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50SXRlbT1ob3ZlcmVkT3JTZWxlY3RlZEl0ZW0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZT1zaGFyZWRUaW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtPXNlbGVjdGVkSXRlbQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbXM9aGlnaGxpZ2h0ZWRJdGVtcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlUm91dGU9ImFuYWx5c2lzVGFzayIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb249dGltZVJhbmdlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRQb2ludHM9c2VsZWN0ZWRQb2ludHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaG93RnVsbFlBeGlzPXNob3dGdWxsWUF4aXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB6b29tYWJsZT10cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9v
bT0iem9vbWVkIn19Ci0gICAgICAgICAgICAgICAgICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB7eyNpZiBmYWlsdXJlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJmYWlsdXJlIj57e2ZhaWx1cmV9fTwvZGl2PgotICAgICAgICAgICAgICAgICAg
ICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJw
cm9ncmVzcyI+e3twYXJ0aWFsICJzcGlubmVyIn19PC9kaXY+Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAg
ICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgot
ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcnZpZXciPgotICAgICAgICAg
ICAgICAgICAgICAgICAge3sjaWYgY2hhcnREYXRhfX0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7e2ludGVyYWN0aXZlLWNoYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXJ0RGF0YT1jaGFydERhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
d1lBeGlzPWZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbj1vdmVy
dmlld0RvbWFpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249b3Zl
cnZpZXdTZWxlY3Rpb259fQotICAgICAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJkZXRhaWxzLXRhYmxlLWNvbnRhaW5lciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3twYXJ0aWFsICJjaGFydC1kZXRhaWxzIn19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8
L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+
Ci0KLSAgICAgICAgICAgICAgICA8ZGl2IHt7YmluZC1hdHRyIGNsYXNzPSI6cG9wdXAtcGFuZSA6
YW5hbHlzaXMtcGFuZSBzaG93aW5nQW5hbHlzaXNQYW5lOjpoaWRkZW4ifX0+Ci0gICAgICAgICAg
ICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhbmFseXNpcy1vcHRpb24tb3B0aW9uIj4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDxoMT5TdGFydCBBL0IgdGVzdGluZyBvciBhc3NvY2lhdGUgYnVn
czwvaDE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+TmFtZToge3tpbnB1dCB0eXBl
PXRleHQgdmFsdWU9bmV3QW5hbHlzaXNUYXNrTmFtZX19IDxidXR0b24ge3thY3Rpb24gImNyZWF0
ZUFuYWx5c2lzVGFzayJ9fSB7e2JpbmQtYXR0ciBkaXNhYmxlZD1jYW5ub3RBbmFseXplfX0+QW5h
bHl6ZTwvYnV0dG9uPjwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAg
ICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFuYWx5c2lzLW9wdGlvbi1vcHRpb24i
PgotICAgICAgICAgICAgICAgICAgICAgICAgPGgxPk1hcmtpbmcgb3V0bGllcnM8L2gxPgotICAg
ICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7aW5wdXQgdHlwZT1jaGVja2JveCBjaGVja2Vk
PXNlbGVjdGVkSXRlbUlzTWFya2VkT3V0bGllciBkaXNhYmxlZD1jYW5ub3RNYXJrT3V0bGllcn19
IE1hcmsgYXMgYW4gb3V0bGllciBhbmQgaGlkZSBpdC48L2xhYmVsPgotICAgICAgICAgICAgICAg
ICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0KLSAgICAgICAgICAgICAg
ICA8Zm9ybSB7e2JpbmQtYXR0ciBjbGFzcz0iOnBvcHVwLXBhbmUgOnNlYXJjaC1wYW5lIHNob3dp
bmdTZWFyY2hQYW5lOjpoaWRkZW4ifX0+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNz
PSJyZXBvc2l0b3JpZXMiPgotICAgICAgICAgICAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNl
bGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9QXBwLk1hbmlmZXN0LnJl
cG9zaXRvcmllc1dpdGhSZXBvcnRlZENvbW1pdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25WYWx1ZVBhdGg9J2NvbnRlbnQuaWQnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9uTGFiZWxQYXRoPSdjb250ZW50Lm5hbWUnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uPWNvbW1pdFNlYXJjaFJlcG9zaXRvcnl9fQotICAgICAgICAgICAgICAg
ICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIHt7aW5wdXQgYWN0aW9uPSJzZWFyY2hD
b21taXQiIHBsYWNlaG9sZGVyPSJOYW1lIG9yIGVtYWlsIiB2YWx1ZT1jb21taXRTZWFyY2hLZXl3
b3JkfX0KLSAgICAgICAgICAgICAgICA8L2Zvcm0+Ci0KLSAgICAgICAgICAgICAgICB7e3BhcnRp
YWwgInN0YXQtcGFuZSJ9fQotCi0gICAgICAgICAgICAgICAgPG5hdiBjbGFzcz0iYWx0ZXJuYXRp
dmUtcGFuZS1hY3Rpb25zIj4KLSAgICAgICAgICAgICAgICAgICAgPHVsPgotICAgICAgICAgICAg
ICAgICAgICAgICAge3sjZWFjaCBhbHRlcm5hdGl2ZVBhbmVzfX0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIge3thY3Rpb24gImFkZEFs
dGVybmF0aXZlUGFuZXMiIHBhbmUgcGxhdGZvcm0gbWV0cmljc319Pnt7bGFiZWx9fTwvYT48L2xp
PgotICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgICAg
IDwvdWw+Ci0gICAgICAgICAgICAgICAgPC9uYXY+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0g
ICAgICAgIHt7L2VhY2h9fQotICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJjb21wb25lbnRzL2ludGVyYWN0aXZl
LWNoYXJ0Ij4KLSAgICAgICAge3sjaWYgaW50ZXJhY3RpdmV9fQotICAgICAgICAgICAgPGRpdiBj
bGFzcz0ic2VsZWN0aW9uLXRvb2xiYXIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+Ci0gICAgICAg
ICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImJ1dHRvbiIge3thY3Rp
b24gInpvb20ifX0+Ci0gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Inpvb20iIHZpZXdC
b3g9IjAgMCAxMDAgMTAwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0
aD0iMCIgc3Ryb2tlPSJub25lIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9seWdv
biBwb2ludHM9IjI1LDI1IDUsNTAgMjUsNzUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8cG9seWdvbiBwb2ludHM9Ijc1LDI1IDk1LDUwIDc1LDc1Ii8+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICA8L2c+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iMjAiIHkxPSI1
MCIgeDI9IjgwIiB5Mj0iNTAiIHN0cm9rZS13aWR0aD0iMTAiPjwvbGluZT4KLSAgICAgICAgICAg
ICAgICAgICAgPC9zdmc+Ci0gICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgIHt7L2lmfX0KLSAgICAgICAgPGRpdiBjbGFzcz0icmFuZ2VCYXJzQ29udGFpbmVy
SW5saW5lU3R5bGUiPgotICAgICAgICAgICAge3sjZWFjaCByYW5nZUJhcnN9fQotICAgICAgICAg
ICAgICAgIHt7I2xpbmstdG8gbGlua1JvdXRlIGxpbmtJZCB0aXRsZT1sYWJlbH19Ci0gICAgICAg
ICAgICAgICAgICAgIDxzcGFuIHt7YmluZC1hdHRyIGNsYXNzPSI6cmFuZ2VCYXIgc3RhdHVzIiBz
dHlsZT1pbmxpbmVTdHlsZX19Pjwvc3Bhbj4KLSAgICAgICAgICAgICAgICB7ey9saW5rLXRvfX0K
LSAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICA8L2Rpdj4KLSAgICA8L3NjcmlwdD4KLQot
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0i
Y2hhcnQtZGV0YWlscyI+Ci0gICAge3sjaWYgZGV0YWlsc319Ci0gICAgICAgIDx0YWJsZSBjbGFz
cz0iZGV0YWlscy10YWJsZSI+Ci0gICAgICAgICAgICA8dGJvZHkgY2xhc3M9ImJ1Z3MiPgotICAg
ICAgICAgICAge3sjZWFjaCBkZXRhaWxzLmJ1Z1RyYWNrZXJzfX0KLSAgICAgICAgICAgICAgICB7
eyNpZiBidWdzfX0KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAg
ICAgICAgPHRoPnt7bGFiZWx9fTwvdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBbe3tidWdVcmx9fV0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDxhIHt7YmluZC1hdHRyIGhyZWY9YnVnVXJsfX0gdGFyZ2V0PSJfYmxhbmsiPnt7YnVnTnVt
YmVyfX08L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAg
ICAgICA8L3RyPgotICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgIHt7L2VhY2h9
fQotICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIDx0Ym9keSBjbGFzcz0ic3RhdHVz
Ij4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0aD5DdXJyZW50
PC90aD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAg
e3tkZXRhaWxzLnN0YXR1cy5jdXJyZW50VmFsdWV9fSB7e2NoYXJ0RGF0YS51bml0fX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHt7I2lmIGRldGFpbHMuc3RhdHVzLnZhbHVlRGVsdGF9fQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh7e2RldGFpbHMuc3RhdHVzLnZhbHVlRGVsdGF9fSB7
e2NoYXJ0RGF0YS51bml0fX0gLyB7e2RldGFpbHMuc3RhdHVzLnJlbGF0aXZlRGVsdGF9fSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7
I2lmIGRldGFpbHMuc3RhdHVzLmxhYmVsfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ge3tiaW5kLWF0dHIgY2xhc3M9
ZGV0YWlscy5zdGF0dXMuY2xhc3NOYW1lfX0+e3tkZXRhaWxzLnN0YXR1cy5sYWJlbH19PC9zcGFu
PgotICAgICAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICA8
L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3Rib2R5PgotICAgICAg
ICAgICAgPHRib2R5PgotICAgICAgICAgICAge3sjaWYgZGV0YWlscy5idWlsZE51bWJlcn19Ci0g
ICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGg+QnVpbGQ8L3RoPgot
ICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBk
ZXRhaWxzLmJ1aWxkVVJMfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB7e2JpbmQt
YXR0ciBocmVmPWRldGFpbHMuYnVpbGRVUkx9fSB0YXJnZXQ9Il9ibGFuayI+e3tkZXRhaWxzLmJ1
aWxkTnVtYmVyfX08L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0YWlscy5idWlsZE51bWJlcn19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAoe3tkZXRhaWxz
LmJ1aWxkVGltZX19KQotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAg
IDwvdHI+Ci0gICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICB7eyNlYWNoIGRldGFpbHMu
cmV2aXNpb25zfX0KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0
aD57e25hbWV9fTwvdGg+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHt7I2lmIHVybH19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEge3ti
aW5kLWF0dHIgaHJlZj11cmx9fSB0YXJnZXQ9Il9ibGFuayI+e3tsYWJlbH19PC9hPgotICAgICAg
ICAgICAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
e2xhYmVsfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAg
ICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAge3svZWFjaH19
Ci0gICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICA8L3RhYmxlPgotICAgICAgICA8ZGl2IGNs
YXNzPSJjb21taXRzIj4KLSAgICAgICAgICAgIHt7I2VhY2ggZGV0YWlscy5yZXZpc2lvbnN9fQot
ICAgICAgICAgICAgICAgIHt7Y29tbWl0cy12aWV3ZXIgcmVwb3NpdG9yeT1yZXBvc2l0b3J5IHJl
dmlzaW9uSW5mbz10aGlzIGNhcHRpb249bmFtZX19Ci0gICAgICAgICAgICB7ey9lYWNofX0KLSAg
ICAgICAgPC9kaXY+Ci0gICAge3svaWZ9fQotICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJjb21wb25lbnRzL2Nv
bW1pdHMtdmlld2VyIj4KLSAgICB7eyNpZiBjb21taXRzfX0KLSAgICAgICAgPHRhYmxlIHt7Ymlu
ZC1hdHRyIGNsYXNzPSI6Y29tbWl0cy12aWV3ZXIgdmlzaWJsZTo6aGlkZGVuIn19PgotICAgICAg
ICAgICAge3sjaWYgY2FwdGlvbn19Ci0gICAgICAgICAgICAgICAgPGNhcHRpb24ge3thY3Rpb24g
dG9nZ2xlVmlzaWJpbGl0eX19Pnt7Y2FwdGlvbn19IGNvbW1pdHM8L2NhcHRpb24+Ci0gICAgICAg
ICAgICB7ey9pZn19Ci0gICAgICAgICAgICB7eyNpZiB2aXNpYmxlfX0KLSAgICAgICAgICAgICAg
ICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2VhY2ggY29tbWl0c319Ci0gICAgICAg
ICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiB1cmx9fQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGEge3tiaW5kLWF0dHIgaHJlZj11cmx9fSB0YXJnZXQ9
Il9ibGFuayI+e3tyZXZpc2lvbn19PC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXZpc2lv
bn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L3RoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57
e2F1dGhvcn19PC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3ttZXNzYWdl
fX08L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAg
ICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgIHt7L2lm
fX0KLSAgICAgICAgPC90YWJsZT4KLSAgICB7ey9pZn19Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8
c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9ImNsb3Nl
LWJ1dHRvbiI+Ci0gICAgICAgIDxzdmcgY2xhc3M9ImNsb3NlLWJ1dHRvbiBpY29uLWJ1dHRvbiIg
dmlld0JveD0iMCAwIDEwMCAxMDAiPgotICAgICAgICAgICAgPGcgc3Ryb2tlPSJibGFjayIgc3Ry
b2tlLXdpZHRoPSIxMCI+Ci0gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIg
cj0iNDUiIGZpbGw9InRyYW5zcGFyZW50Ii8+Ci0gICAgICAgICAgICAgICAgPHBvbHlnb24gcG9p
bnRzPSIzMCwzMCA3MCw3MCIgLz4KLSAgICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMw
LDcwIDcwLDMwIiAvPgotICAgICAgICAgICAgPC9nPgotICAgICAgICA8L3N2Zz4KLSAgICA8L3Nj
cmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxh
dGUtbmFtZT0ic3RhdC1idXR0b24iPgotICAgICAgICA8c3ZnIGNsYXNzPSJzdGF0LWJ1dHRvbiBp
Y29uLWJ1dHRvbiIgdmlld0JveD0iMTAgMCAxMTAgMTAwIj4KLSAgICAgICAgICAgIDxnIHN0cm9r
ZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIwIiBmaWxsPSJibGFjayI+Ci0gICAgICAgICAgICAgICAg
PHBhdGggaWQ9InVwcGVyLXNpZ21hIiBkPSJNIDUgNSBIIDk1IFYgNDAgaCAtMTAgYyAtNSAtMjAg
LTUgLTIwIC0yNSAtMjAgSCAzNSBMIDYwIDUwIGwgLTIwIDAiIC8+Ci0gICAgICAgICAgICAgICAg
PHVzZSB4bGluazpocmVmPSIjdXBwZXItc2lnbWEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsIDEw
MCkgc2NhbGUoMSwgLTEpIiAvPgotICAgICAgICAgICAgPC9nPgotICAgICAgICA8L3N2Zz4KLSAg
ICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEt
dGVtcGxhdGUtbmFtZT0ic3RhdC1wYW5lIj4KLSAgICAgICAgPHNlY3Rpb24ge3tiaW5kLWF0dHIg
Y2xhc3M9Ijpwb3B1cC1wYW5lIDpzdGF0LXBhbmUgc2hvd2luZ1N0YXRQYW5lOjpoaWRkZW4ifX0+
Ci0gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0ic3RhdC1vcHRpb24iPgotICAgICAgICAgICAg
ICAgIDxoMT5Nb3ZpbmcgYXZlcmFnZTwvaDE+Ci0gICAgICAgICAgICAgICAgPGxhYmVsPlR5cGU6
IHt7dmlldyBFbWJlci5TZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgY29udGVudD1tb3ZpbmdB
dmVyYWdlU3RyYXRlZ2llcwotICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZVBhdGg9J2Nv
bnRlbnQnCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsUGF0aD0nY29udGVudC5sYWJl
bCcKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPWNob3Nlbk1vdmluZ0F2ZXJhZ2VTdHJh
dGVneX19PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAge3sjaWYgY2hvc2VuTW92aW5nQXZl
cmFnZVN0cmF0ZWd5LmRlc2NyaXB0aW9ufX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNs
YXNzPSJkZXNjcmlwdGlvbiI+e3tjaG9zZW5Nb3ZpbmdBdmVyYWdlU3RyYXRlZ3kuZGVzY3JpcHRp
b259fTwvcD4KLSAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgIHt7
I2VhY2ggY2hvc2VuTW92aW5nQXZlcmFnZVN0cmF0ZWd5LnBhcmFtZXRlckxpc3R9fQotICAgICAg
ICAgICAgICAgICAgICA8bGFiZWw+e3tsYWJlbH19OiB7e2lucHV0IHR5cGU9Im51bWJlciIgdmFs
dWU9dmFsdWUgbWluPW1pbiBtYXg9bWF4IHN0ZXA9c3RlcH19PC9sYWJlbD4KLSAgICAgICAgICAg
ICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgIHt7I2lm
IGNob3Nlbk1vdmluZ0F2ZXJhZ2VTdHJhdGVneS5leGVjdXRlfX0KLSAgICAgICAgICAgICAgICA8
c2VjdGlvbiBjbGFzcz0ic3RhdC1vcHRpb24iPgotICAgICAgICAgICAgICAgICAgICA8aDE+RW52
ZWxvcGU8L2gxPgotICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VHlwZToge3t2aWV3IEVtYmVy
LlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD1lbnZlbG9waW5nU3RyYXRl
Z2llcwotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSdjb250ZW50Jwot
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRoPSdjb250ZW50LmxhYmVsJwot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPWNob3NlbkVudmVsb3BpbmdTdHJhdGVn
eX19PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAge3sjaWYgY2hvc2VuRW52ZWxvcGluZ1N0
cmF0ZWd5LmRlc2NyaXB0aW9ufX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJk
ZXNjcmlwdGlvbiI+e3tjaG9zZW5FbnZlbG9waW5nU3RyYXRlZ3kuZGVzY3JpcHRpb259fTwvcD4K
LSAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICB7eyNlYWNo
IGNob3NlbkVudmVsb3BpbmdTdHJhdGVneS5wYXJhbWV0ZXJMaXN0fX0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIDxsYWJlbD57e2xhYmVsfX06IDxpbnB1dCB0eXBlPSJudW1iZXIiIHt7YmluZC1h
dHRyIHZhbHVlPXZhbHVlIG1pbj1taW4gbWF4PW1heCBzdGVwPXN0ZXB9fT48L2xhYmVsPgotICAg
ICAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0g
ICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICB7eyNpZiBjaG9zZW5Nb3ZpbmdBdmVyYWdl
U3RyYXRlZ3kuaXNTZWdtZW50YXRpb259fQotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNz
PSJzdGF0LW9wdGlvbiI+Ci0gICAgICAgICAgICAgICAgICAgIDxoMT5BL0IgVGVzdCBSYW5nZSBT
ZWxlY3Rpb248L2gxPgotICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VHlwZToge3t2aWV3IEVt
YmVyLlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD10ZXN0UmFuZ2VTZWxl
Y3Rpb25TdHJhdGVnaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZVBhdGg9
J2NvbnRlbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbFBhdGg9J2NvbnRl
bnQubGFiZWwnCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249Y2hvc2VuVGVzdFJh
bmdlU2VsZWN0aW9uU3RyYXRlZ3l9fTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lm
IGNob3NlblRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LmRlc2NyaXB0aW9ufX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+e3tjaG9zZW5UZXN0UmFuZ2VT
ZWxlY3Rpb25TdHJhdGVneS5kZXNjcmlwdGlvbn19PC9wPgotICAgICAgICAgICAgICAgICAgICB7
ey9pZn19Ci0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICAgICAge3svaWZ9fQot
ICAgICAgICAgICAge3sjaWYgY2hvc2VuRW52ZWxvcGluZ1N0cmF0ZWd5LmV4ZWN1dGV9fQotICAg
ICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJzdGF0LW9wdGlvbiI+Ci0gICAgICAgICAgICAg
ICAgICAgIDxoMT5Bbm9tYWx5IERldGVjdGlvbjwvaDE+Ci0gICAgICAgICAgICAgICAgICAgIHt7
I2VhY2ggYW5vbWFseURldGVjdGlvblN0cmF0ZWdpZXN9fQotICAgICAgICAgICAgICAgICAgICAg
ICAgPGxhYmVsIHt7YmluZC1hdHRyIHRpdGxlPWRlc2NyaXB0aW9ufX0+e3tpbnB1dCB0eXBlPSJj
aGVja2JveCIgbmFtZT1pZCBjaGVja2VkPWVuYWJsZWR9fXt7bGFiZWx9fTwvbGFiZWw+Ci0gICAg
ICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAg
ICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2NyaXB0PgotCi0g
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJv
dXRsaWVyLWJ1dHRvbiI+Ci0gICAgICAgIDxzdmcgY2xhc3M9Im91dGxpZXItYnV0dG9uIGljb24t
YnV0dG9uIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+Ci0gICAgICAgICAgICA8ZyBzdHJva2U9ImJs
YWNrIiBmaWxsPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxNSI+Ci0gICAgICAgICAgICAgICAgPGxp
bmUgeDE9IjAiIHkxPSI3MCIgeDI9IjQwIiB5Mj0iNzAiLz4KLSAgICAgICAgICAgICAgICA8Y2ly
Y2xlIGN4PSIxNSIgY3k9IjcwIiByPSI4Ii8+Ci0gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0i
NDUiIGN5PSI3MCIgcj0iOCIvPgotICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9Ijg1IiBjeT0i
NzAiIHI9IjgiLz4KLSAgICAgICAgICAgICAgICA8bGluZSB4MT0iODUiIHkxPSI3MCIgeDI9IjEw
MCIgeTI9IjcwIi8+Ci0gICAgICAgICAgICAgICAgPGcgY2xhc3M9InNob3ctb3V0bGllci1pY29u
Ij4KLSAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9IjQ1IiB5MT0iNzAiIHgyPSI2NSIgeTI9
IjIwIi8+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI2NSIgeTE9IjIwIiB4Mj0iODUi
IHkyPSI3MCIvPgotICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI2NSIgY3k9IjIwIiBy
PSI4Ii8+Ci0gICAgICAgICAgICAgICAgPC9nPgotICAgICAgICAgICAgICAgIDxnIGNsYXNzPSJo
aWRlLW91dGxpZXItaWNvbiI+Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI0NSIgeTE9
IjcwIiB4Mj0iODUiIHkyPSI3MCIvPgotICAgICAgICAgICAgICAgIDwvZz4KLSAgICAgICAgICAg
IDwvZz4KLSAgICAgICAgPC9zdmc+Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9
InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9ImFuYWx5c2lzLWJ1dHRvbiI+
Ci0gICAgICAgIDxzdmcgY2xhc3M9ImFuYWx5c2lzLWJ1dHRvbiBpY29uLWJ1dHRvbiIgdmlld0Jv
eD0iMCAwIDEwMCAxMDAiPgotICAgICAgICAgICAgPGcgc3Ryb2tlPSJibGFjayIgZmlsbD0iYmxh
Y2siIHN0cm9rZS13aWR0aD0iMTUiPgotICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjUwIiBj
eT0iNTAiIHI9IjQwIiBmaWxsPSJ0cmFuc3BhcmVudCIvPgotICAgICAgICAgICAgICAgIDxsaW5l
IHgxPSI1MCIgeTE9IjI1IiB4Mj0iNTAiIHkyPSI1NSIvPgotICAgICAgICAgICAgICAgIDxjaXJj
bGUgY3g9IjUwIiBjeT0iNjcuNSIgcj0iMTAiIHN0cm9rZT0ibm9uZSIvPgotICAgICAgICAgICAg
PC9nPgotICAgICAgICA8L3N2Zz4KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0ic2VhcmNoLWJ1dHRvbiI+Ci0g
ICAgICAgIDxzdmcgY2xhc3M9InNlYXJjaC1idXR0b24gaWNvbi1idXR0b24iIHZpZXdCb3g9IjAg
MCAxMDAgMTAwIj4KLSAgICAgICAgICAgIDxnIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0i
MTUiPgotICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYwIiBjeT0iNDAiIHI9IjMwIiBmaWxs
PSJ0cmFuc3BhcmVudCIvPgotICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIxMCIgeTE9IjkwIiB4
Mj0iNDAiIHkyPSI2MCIvPgotICAgICAgICAgICAgPC9nPgotICAgICAgICA8L3N2Zz4KLSAgICA8
L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVt
cGxhdGUtbmFtZT0ic3Bpbm5lciI+Ci0gICAgICAgIDxzdmcgY2xhc3M9InNwaW5uZXIiIHZpZXdC
b3g9IjAgMCAxMDAgMTAwIj4KLSAgICAgICAgICAgIDxsaW5lIHgxPSIxMCIgeTE9IjUwIiB4Mj0i
MzAiIHkyPSI1MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVj
YXA9InJvdW5kIi8+Ci0gICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSIyMS43MiIgeDI9
IjM1Ljg2IiB5Mj0iMzUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9r
ZS1saW5lY2FwPSJyb3VuZCIvPgotICAgICAgICAgICAgPGxpbmUgeDE9IjUwIiB5MT0iMTAiIHgy
PSI1MCIgeTI9IjMwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGlu
ZWNhcD0icm91bmQiLz4KLSAgICAgICAgICAgIDxsaW5lIHgxPSI3OC4yOCIgeTE9IjIxLjcyIiB4
Mj0iNjQuMTQiIHkyPSIzNS44NiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ry
b2tlLWxpbmVjYXA9InJvdW5kIi8+Ci0gICAgICAgICAgICA8bGluZSB4MT0iNzAiIHkxPSI1MCIg
eDI9IjkwIiB5Mj0iNTAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1s
aW5lY2FwPSJyb3VuZCIvPgotICAgICAgICAgICAgPGxpbmUgeDE9IjY1Ljg2IiB5MT0iNjUuODYi
IHgyPSI3OC4yOCIgeTI9Ijc4LjI4IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBz
dHJva2UtbGluZWNhcD0icm91bmQiLz4KLSAgICAgICAgICAgIDxsaW5lIHgxPSI1MCIgeTE9Ijcw
IiB4Mj0iNTAiIHkyPSI5MCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tl
LWxpbmVjYXA9InJvdW5kIi8+Ci0gICAgICAgICAgICA8bGluZSB4MT0iMjEuNzIiIHkxPSI3OC4y
OCIgeDI9IjM1Ljg2IiB5Mj0iNjUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAi
IHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgotICAgICAgICA8L3N2Zz4KLSAgICA8L3NjcmlwdD4K
LQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFt
ZT0ibmF2YmFyIj4KLSAgICAgICAgPG5hdiBpZD0ibmF2aWdhdGlvbiIgcm9sZT0ibmF2aWdhdGlv
biI+Ci0gICAgICAgICAgICA8aDE+PGEgaHJlZj0iIyI+e3tBcHAuTWFuaWZlc3Quc2l0ZVRpdGxl
fX08L2E+PC9oMT4KLSAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgICB7eyNlYWNoIEFw
cC5NYW5pZmVzdC5kYXNoYm9hcmRzfX0KLSAgICAgICAgICAgICAgICAgICAge3sjaWYgbmFtZX19
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7eyNsaW5rLXRvICdkYXNoYm9hcmQnIG5hbWUgdGFn
TmFtZT0nbGknfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNsaW5rLXRvICdkYXNo
Ym9hcmQnIG5hbWV9fXt7bGFiZWx9fXt7L2xpbmstdG99fQotICAgICAgICAgICAgICAgICAgICAg
ICAge3svbGluay10b319Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAg
ICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICB7eyNsaW5rLXRvICdjaGFydHMnIHRhZ05h
bWU9J2xpJ319Ci0gICAgICAgICAgICAgICAgICAgIHt7I2xpbmstdG8gJ2NoYXJ0cyd9fUNoYXJ0
c3t7L2xpbmstdG99fQotICAgICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAg
ICAgIHt7I2xpbmstdG8gJ2FuYWx5c2lzJyB0YWdOYW1lPSdsaSd9fQotICAgICAgICAgICAgICAg
ICAgICB7eyNsaW5rLXRvICdhbmFseXNpcyd9fUFuYWx5c2lze3svbGluay10b319Ci0gICAgICAg
ICAgICAgICAge3svbGluay10b319Ci0gICAgICAgICAgICA8L3VsPgotICAgICAgICA8L25hdj4K
LSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRh
dGEtdGVtcGxhdGUtbmFtZT0ibnVtYmVyLW9mLWRheXMtY29udHJvbHMiPgotICAgICAgICA8bGkg
Y2xhc3M9Im51bWJlck9mRGF5c0lzMSI+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0
OmZhbHNlIiBjbGFzcz0iY29udHJvbC1idXR0b24iIHt7YWN0aW9uICJzZXROdW1iZXJPZkRheXMi
IDF9fT4xRDwvYT4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpIGNsYXNzPSJudW1iZXJPZkRh
eXNJczciPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImNv
bnRyb2wtYnV0dG9uIiB7e2FjdGlvbiAic2V0TnVtYmVyT2ZEYXlzIiA3fX0+MVc8L2E+Ci0gICAg
ICAgIDwvbGk+Ci0gICAgICAgIDxsaSBjbGFzcz0ibnVtYmVyT2ZEYXlzSXMzMCI+Ci0gICAgICAg
ICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiBjbGFzcz0iY29udHJvbC1idXR0b24iIHt7
YWN0aW9uICJzZXROdW1iZXJPZkRheXMiIDMwfX0+MU08L2E+Ci0gICAgICAgIDwvbGk+Ci0gICAg
ICAgIDxsaSBjbGFzcz0ibnVtYmVyT2ZEYXlzSXM5MCI+Ci0gICAgICAgICAgICA8YSBocmVmPSJq
YXZhc2NyaXB0OmZhbHNlIiBjbGFzcz0iY29udHJvbC1idXR0b24iIHt7YWN0aW9uICJzZXROdW1i
ZXJPZkRheXMiIDkwfX0+M008L2E+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaSBjbGFzcz0i
bnVtYmVyT2ZEYXlzSXMxODMiPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxz
ZSIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiB7e2FjdGlvbiAic2V0TnVtYmVyT2ZEYXlzIiAxODN9
fT42TTwvYT4KLSAgICAgICAgPC9saT4KLSAgICAgICAgPGxpIGNsYXNzPSJudW1iZXJPZkRheXNJ
czM2NSI+Ci0gICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiBjbGFzcz0iY29u
dHJvbC1idXR0b24iIHt7YWN0aW9uICJzZXROdW1iZXJPZkRheXMiIDM2NX19PjFZPC9hPgotICAg
ICAgICA8L2xpPgotICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFu
ZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJzdGFydC10aW1lLXNsaWRlciI+Ci0gICAgICAg
IDxsYWJlbD48aW5wdXQgdHlwZT0icmFuZ2UiPiA8c3BhbiBjbGFzcz0ibnVtYmVyT2ZEYXlzIj5Y
PC9zcGFuPiBkYXlzPC9sYWJlbD4KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0icG9wdXAiPgotICAgICAgICA8
c3BhbiBjbGFzcz0ibGFiZWwiPnt7dmlldyBBcHAuUG9wdXBCdXR0b25WaWV3IHRhZ05hbWU9ImEi
IGxhYmVsPXZpZXcubGFiZWwgfX08L3NwYW4+Ci0gICAgICAgIHt7dmlldyB2aWV3LnBvcHVwTGlz
dENvbnRhaW5lclZpZXcgdmlld05hbWU9InBvcHVwTGlzdENvbnRhaW5lclZpZXdJbnN0YW5jZSJ9
fQotICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIg
ZGF0YS10ZW1wbGF0ZS1uYW1lPSJwb3B1cC1saXN0Ij4KLSAgICAgICAge3sjZWFjaCB2aWV3Lmxp
c3R9fQotICAgICAgICAgICAge3sjaWYgaXNTZXBhcmF0b3J9fQotICAgICAgICAgICAgICAgIDxs
aT48aHI+PC9saT4KLSAgICAgICAgICAgIHt7ZWxzZSB9fSB7eyNpZiBjaGlsZHJlbn19Ci0gICAg
ICAgICAgICAgICAgPGxpPnt7dmlldyBBcHAuUG9wdXBWaWV3IGxpc3Q9Y2hpbGRyZW4gbGFiZWw9
bGFiZWx9fTwvbGk+Ci0gICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgIDxsaT4K
LSAgICAgICAgICAgICAgICAgICAge3sjaWYgYWN0aW9uTmFtZX19Ci0gICAgICAgICAgICAgICAg
ICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiBjbGFzcz0ibGFiZWwiIHt7YWN0aW9u
IGFjdGlvbk5hbWUgYWN0aW9uQXJndW1lbnR9fT57e2xhYmVsfX08L2E+Ci0gICAgICAgICAgICAg
ICAgICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGFiZWwi
Pnt7bGFiZWx9fTwvYT4KLSAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAg
ICAgIDwvbGk+Ci0gICAgICAgICAgICB7ey9pZn19IHt7L2lmfX0KLSAgICAgICAge3svZWFjaH19
Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBk
YXRhLXRlbXBsYXRlLW5hbWU9ImFuYWx5c2lzIj4KLSAgICAgICAgPGhlYWRlciBpZD0iaGVhZGVy
Ij4KLSAgICAgICAgICAgIHt7cGFydGlhbCAibmF2YmFyIn19Ci0gICAgICAgIDwvaGVhZGVyPgot
Ci0gICAgICAgIDx0YWJsZSBpZD0iYW5hbHlzaXMtdGFza3MiPgotICAgICAgICAgICAgPHRoZWFk
PgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPk5hbWU8L3Rk
PgotICAgICAgICAgICAgICAgICAgICA8dGQ+U3RhdHVzPC90ZD4KLSAgICAgICAgICAgICAgICAg
ICAgPHRkPkF1dGhvcjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5DcmVhdGVkIGF0PC90
ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPlBsYXRmb3JtPC90ZD4KLSAgICAgICAgICAgICAg
ICAgICAgPHRkPlRlc3Q8L3RkPgotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8
L3RoZWFkPgotICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgIHt7I2VhY2ggbW9k
ZWwudGFza3N9fQotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAg
ICAgICA8dGQgY2xhc3M9InRhc2stbmFtZSI+e3sjbGluay10byAnYW5hbHlzaXNUYXNrJyBpZH19
e3tuYW1lfX17ey9saW5rLXRvfX08L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNs
YXNzPSJzdGF0dXMiPnt7c3RhdHVzTGFiZWx9fTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAg
ICA8dGQgY2xhc3M9ImF1dGhvciI+e3thdXRob3J9fTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAg
ICAgICA8dGQgY2xhc3M9ImNyZWF0ZWQtYXQiPnt7Zm9ybWF0dGVkQ3JlYXRlZEF0fX08L3RkPgot
ICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJwbGF0Zm9ybS1uYW1lIj57e3BsYXRm
b3JtLmxhYmVsfX08L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0ZXN0
LW5hbWUiPnt7bWV0cmljLmZ1bGxOYW1lfX08L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3Ry
PgotICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgPC90Ym9keT4KLSAgICAg
ICAgPC90YWJsZT4KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhh
bmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0iYW5hbHlzaXNUYXNrIj4KLSAgICAgICAgPGhl
YWRlciBpZD0iaGVhZGVyIj4KLSAgICAgICAgICAgIHt7cGFydGlhbCAibmF2YmFyIn19Ci0gICAg
ICAgIDwvaGVhZGVyPgotCi0gICAgICAgIDxoMiBpZD0iYW5hbHlzaXMtdGFzay10aXRsZSI+e3ts
YWJlbH19PC9oMj4KLSAgICAgICAge3sjaWYgcGxhdGZvcm0ubGFiZWx9fQotICAgICAgICAgICAg
PGgzIGlkPSJhbmFseXNpcy10YXNrLXRlc3RuYW1lIj57e21ldHJpYy5mdWxsTmFtZX19IC0ge3tw
bGF0Zm9ybS5sYWJlbH19PC9oMz4KLSAgICAgICAge3svaWZ9fQotCi0gICAgICAgIHt7I2lmIHBh
bmV9fQotICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImFuYWx5c2lzLWNoYXJ0LXBhbmUgY2hh
cnQtcGFuZSIgdGFiaW5kZXg9IjAiPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN2Zy1j
b250YWluZXIiPgotICAgICAgICAgICAgICAgICAgICB7e2ludGVyYWN0aXZlLWNoYXJ0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGFydERhdGE9cGFuZS5jaGFydERhdGEKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlcz1wYW5lLnJhbmdlcwotICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tYWluPW92ZXJ2aWV3RG9tYWluCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2
ZT10cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SXRlbT1wYW5lLmhvdmVyZWRP
clNlbGVjdGVkSXRlbQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQb2ludHM9cGFu
ZS5zZWxlY3RlZFBvaW50cwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPXRpbWVS
YW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtcz1oaWdobGlnaHRl
ZEl0ZW1zCi0gICAgICAgICAgICAgICAgICAgICAgICByYW5nZVJvdXRlPSJhbmFseXNpc1Rhc2si
fX0KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJk
ZXRhaWxzIj4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlscy10YWJsZS1j
b250YWluZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgZGV0YWlsc319Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAge3twYXJ0aWFsICJjaGFydC1kZXRhaWxzIn19Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7cGFydGlhbCAiYW5hbHlzaXNTdGF0dXNGb3JtIn19Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwv
ZGl2PgotICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICB7ey9pZn19Ci0KLSAgICAgICAg
e3twYXJ0aWFsICJ0ZXN0R3JvdXBGb3JtIn19Ci0KLSAgICAgICAge3sjZWFjaCB0ZXN0R3JvdXBQ
YW5lc319Ci0gICAgICAgICAgICB7e3BhcnRpYWwgInRlc3RHcm91cCJ9fQotICAgICAgICB7ey9l
YWNofX0KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJh
cnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0idGVzdEdyb3VwIj4KLSAgICAgICAgPHNlY3Rpb24gY2xh
c3M9ImFuYWx5c2lzLWdyb3VwIj4KLSAgICAgICAgICAgIDxoMT57e25hbWV9fTwvaDE+Ci0gICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPgotICAgICAgICAgICAgICAgIDx0
YWJsZSBjbGFzcz0icmVzdWx0cyI+Ci0gICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQg
Y29sc3Bhbj0iMiI+Q29uZmlndXJhdGlvbjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPHRkPlJlc3VsdHM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5TdGF0
dXM8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7I2VhY2ggcmVwb3NpdG9yaWVz
fX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7bmFtZX19PC90ZD4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+Ci0gICAgICAgICAgICAgICAg
ICAgIHt7I2VhY2ggY29uZmlndXJhdGlvbnN9fQotICAgICAgICAgICAgICAgICAgICAgICAgPHRi
b2R5IHt7YmluZC1hdHRyIGNsYXNzPSJzaG93UmVxdWVzdExpc3Q6OmhpZGVSZXF1ZXN0cyJ9fT4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InN1bW1hcnkiIHt7YWN0aW9u
IHRvZ2dsZVNob3dSZXF1ZXN0TGlzdCB0aGlzfX0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDx0ZCBjbGFzcz0iY29uZmlnLWxldHRlciIgY29sc3Bhbj0iMiI+e3tzdW1tYXJ5LmNv
bmZpZ0xldHRlcn19PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjd2l0
aCBzdW1tYXJ5fX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFydGlh
bCAidGVzdEdyb3VwUm93In19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7L3dp
dGh9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAge3sjZWFjaCByZXF1ZXN0c319Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDx0ciBjbGFzcz0icmVxdWVzdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7eyN3aXRoIC4uL3RoaXN9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDx0ZCBjbGFzcz0iY29uZmlnLWxldHRlciIge3thY3Rpb24gdG9nZ2xlU2hvd1Jl
cXVlc3RMaXN0IHRoaXN9fT48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3svd2l0aH19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+UnVu
IHt7b3JkZXJMYWJlbH19PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7cGFydGlhbCAidGVzdEdyb3VwUm93In19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAg
ICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgICAgICB7ey9lYWNofX0K
LSAgICAgICAgICAgICAgICAgICAge3sjZWFjaCBjb21wYXJpc29uc319Ci0gICAgICAgICAgICAg
ICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+e3tsYWJlbH19PC90
ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ZGlmZmVyZW5jZX19PC90
ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVzdWx0fX08L3RkPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyN3aXRoIC4uL3RoaXN9fQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjZWFjaCByZXBvc2l0b3JpZXN9fQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHt7L3dpdGh9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+
Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgICAgICB7
ey9lYWNofX0KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC9kaXY+Ci0g
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtY2hhcnQiPgotICAgICAgICAgICAgICAg
IHt7I2lmIHJlZmVyZW5jZUNoYXJ0fX0KLSAgICAgICAgICAgICAgICAgICAge3tpbnRlcmFjdGl2
ZS1jaGFydAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnREYXRhPXJlZmVyZW5jZUNoYXJ0
LmRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbj1vdmVydmlld0RvbWFpbgotICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvd1lBeGlzPWZhbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBlbmFibGVTZWxlY3Rpb249ZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hs
aWdodGVkSXRlbXM9cmVmZXJlbmNlQ2hhcnQuaGlnaGxpZ2h0ZWRJdGVtc319Ci0gICAgICAgICAg
ICAgICAge3svaWZ9fQotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAg
ICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEt
dGVtcGxhdGUtbmFtZT0idGVzdEdyb3VwUm93Ij4KLSAgICAgICAgPHRkPgotICAgICAgICAgICAg
e3sjaWYgdmFsdWV9fQotICAgICAgICAgICAgICAgIHt7Ym94LXBsb3QgcmFuZ2U9dmFsdWVSYW5n
ZSB2YWx1ZT12YWx1ZSBkZWx0YT1kZWx0YX19Ci0gICAgICAgICAgICB7ey9pZn19Ci0gICAgICAg
ICAgICB7e2Zvcm1hdHRlZFZhbHVlfX0KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkPgotICAg
ICAgICAgICAgPGEge3tiaW5kLWF0dHIgaHJlZj11cmwgdGl0bGU9YnVpbGRMYWJlbH19Pnt7c3Rh
dHVzTGFiZWx9fTwvYT4KLSAgICAgICAgPC90ZD4KLSAgICAgICAge3sjZWFjaCByZXZpc2lvbkxp
c3R9fQotICAgICAgICAgICAgPHRkPnt7dGhpc319PC90ZD4KLSAgICAgICAge3svZWFjaH19Ci0g
ICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRh
LXRlbXBsYXRlLW5hbWU9InRlc3RHcm91cEZvcm0iPgotICAgIHt7I2lmIHJvb3RDb25maWd1cmF0
aW9uc319Ci0gICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIge3thY3Rpb24gImNyZWF0ZVRlc3RH
cm91cCIgbmV3VGVzdEdyb3VwTmFtZSByZXBldGl0aW9uQ291bnQgb249InN1Ym1pdCJ9fT4KLSAg
ICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhbmFseXNpcy1ncm91cCI+Ci0gICAgICAgICAgICAg
ICAgPGgxPnt7aW5wdXQgbmFtZT0ibmFtZSIgdmFsdWU9bmV3VGVzdEdyb3VwTmFtZSBwbGFjZWhv
bGRlcj0iVGVzdCBncm91cCBuYW1lIiByZXF1aXJlZD10cnVlIHR5cGU9InRleHQifX08L2gxPgot
ICAgICAgICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgotICAg
ICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0
aD5Db25maWd1cmF0aW9uPC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNlYWNo
IGNvbmZpZ3VyYXRpb25zfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7
dGhpc319PC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+Ci0g
ICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7I2Vh
Y2ggcm9vdENvbmZpZ3VyYXRpb25zfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57e25hbWV9fTwvdGg+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7I2VhY2ggc2V0c319Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdCBuYW1lPW5hbWUgY29udGVudD1vcHRpb25z
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVl
UGF0aD0iY29udGVudC52YWx1ZSIgb3B0aW9uTGFiZWxQYXRoPSJjb250ZW50LmxhYmVsIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249c2VsZWN0
aW9ufX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBzZWxl
Y3Rpb24uaXNDdXN0b219fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7e2lucHV0IG5hbWU9ImN1c3RvbVZhbHVlIiB0eXBlPXRleHQgdmFsdWU9Y3VzdG9tVmFs
dWV9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAg
ICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAg
ICA8bGFiZWw+TnVtYmVyIG9mIHJ1bnMge3t2aWV3IEVtYmVyLlNlbGVjdCBjb250ZW50PXBvc3Np
YmxlUmVwZXRpdGlvbkNvdW50cyB2YWx1ZT1yZXBldGl0aW9uQ291bnR9fTwvbGFiZWw+Ci0gICAg
ICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlN0YXJ0IEEvQiB0ZXN0aW5nPC9idXR0
b24+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgIDwvZm9ybT4KLSAgICB7ey9pZn19
Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBk
YXRhLXRlbXBsYXRlLW5hbWU9ImFuYWx5c2lzU3RhdHVzRm9ybSI+Ci0gICAgICAgIDx0YWJsZSBj
bGFzcz0iYW5hbHlzaXMtYnVncyI+Ci0gICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAg
ICAge3sjZWFjaCBtb2RlbC5idWdzfX0KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAg
ICAgICAgICAgICAgICAgICAgPHRoPnt7YnVnVHJhY2tlci5uYW1lfX08L3RoPgotICAgICAgICAg
ICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7Ymlu
ZC1hdHRyIGhyZWY9dXJsfX0gdGFyZ2V0PSJfYmxhbmsiPnt7bnVtYmVyfX08L2E+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIge3thY3Rpb24g
ImRlbGV0ZUJ1ZyIgdGhpc319Pnt7cGFydGlhbCAiY2xvc2UtYnV0dG9uIn19PC9hPgotICAgICAg
ICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAg
ICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICB7eyNpZiBidWdUcmFja2Vyc319
Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZpZXcgRW1iZXIuU2VsZWN0IGNvbnRlbnQ9
YnVnVHJhY2tlcnMgb3B0aW9uVmFsdWVQYXRoPSJjb250ZW50IiBvcHRpb25MYWJlbFBhdGg9ImNv
bnRlbnQubmFtZSIgdmFsdWU9Y2hvc2VuQnVnVHJhY2tlcn19Ci0gICAgICAgICAgICAgICAgICAg
ICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHt7aW5wdXQgaWQ9ZWxlbWVudElkIHR5cGU9dGV4dCB2YWx1ZT1lZGl0ZWRC
dWdOdW1iZXJ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24ge3thY3Rpb24g
ImFkZEJ1ZyIgY2hvc2VuQnVnVHJhY2tlciBlZGl0ZWRCdWdOdW1iZXJ9fT5BZGQ8L2J1dHRvbj4K
LSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+
Ci0gICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAg
ICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0
aD48bGFiZWwgZm9yPSJhbmFseXNpcy1zdGF0dXMiPlN0YXR1czxsYWJlbD48L3RoPgotICAgICAg
ICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0i
YW5hbHlzaXMtYnVncyIge3thY3Rpb24gInNhdmVTdGF0dXMiIG9uPSJzdWJtaXQifX0+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdCBpZD0iYW5hbHlzaXMt
c3RhdHVzIiBjb250ZW50PWFuYWx5c2lzUmVzdWx0T3B0aW9ucyBvcHRpb25WYWx1ZVBhdGg9ImNv
bnRlbnQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsUGF0aD0i
Y29udGVudC5sYWJlbCIgc2VsZWN0aW9uPWNob3NlbkFuYWx5c2lzUmVzdWx0fX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2F2ZSI+PGJy
PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB7e2JpbmQtYXR0ciBjbGFzcz0i
bmVlZHNGZWVkYmFjazo6aGlkZGVuIn19Pnt7aW5wdXQgdHlwZT1jaGVja2JveCBjaGVja2VkPW5v
dE5lZWRlZH19IFRoaXMgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZDwvbGFiZWw+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0g
ICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgIDwvdGFi
bGU+Ci0gICAgPC9zY3JpcHQ+Cis8dGl0bGU+UGVyZiBNb25pdG9yIGlzIExvYWRpbmcuLi48L3Rp
dGxlPgorPHNjcmlwdD4KIAoraWYgKGxvY2F0aW9uLmhhc2guaW5kZXhPZignI21vZGU9ZGFzaGJv
YXJkJykgPj0gMCB8fCAhbG9jYXRpb24uaGFzaCB8fCBsb2NhdGlvbi5oYXNoID09ICcjJykKKyAg
ICBsb2NhdGlvbi5ocmVmID0gJy92My8nOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9q
cXVlcnkuanMiIGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90Lmpz
IiBkZWZlcj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5jcm9zc2hhaXIu
anMiIGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90LmZpbGxiZXR3
ZWVuLmpzIiBkZWZlcj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5yZXNp
emUuanMiIGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90LnNlbGVj
dGlvbi5qcyIgZGVmZXI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QudGlt
ZS5qcyIgZGVmZXI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvaGVscGVyLWNsYXNzZXMuanMi
IGRlZmVyPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNoYXJlZC9zdGF0aXN0aWNzLmpzIiBkZWZl
cj48L3NjcmlwdD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY29tbW9uLmNzcyI+Cis8
c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCisjbnVtYmVyT2ZEYXlzUGlja2VyIHsKKyAgICBjb2xv
cjogIzY2NjsKK30KKworI251bWJlck9mRGF5c1BpY2tlciBpbnB1dCB7CisgICAgaGVpZ2h0OiAw
LjllbTsKKyAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKK30KKwordGQsIHRoIHsKKyAgICBib3JkZXI6
IG5vbmU7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICBwYWRkaW5nLXRvcDog
MC41ZW07Cit9CisKKyNkYXNoYm9hcmQgPiB0Ym9keSA+IHRyID4gdGQgeworICAgIHZlcnRpY2Fs
LWFsaWduOiB0b3A7Cit9CisKKyNkYXNoYm9hcmQgPiB0aGVhZCB0aCB7CisgICAgdGV4dC1zaGFk
b3c6ICNiYmIgMXB4IDFweCAycHg7CisgICAgZm9udC1zaXplOiBsYXJnZTsKKyAgICBmb250LXdl
aWdodDogbm9ybWFsOworfQorCisuY2hhcnQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBt
YXJnaW46IDBweCAwcHggMTBweCAwcHg7Cit9CisKKy5jaGFydC53b3JzZSB7CisgICAgYmFja2dy
b3VuZDogI2ZjYzsKK30KKworLmNoYXJ0LmJldHRlciB7CisgICAgYmFja2dyb3VuZDogI2NmYzsK
K30KKworI2NoYXJ0cyAucGFuZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxlZnQ6
IDEwcHg7CisgICAgdG9wOiAxMHB4OworICAgIHdpZHRoOiAyMzBweDsKK30KKworLmNoYXJ0IGhl
YWRlciB7CisgICAgaGVpZ2h0OiAzZW07CisgICAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisjZGFzaGJvYXJkIGhlYWRlciB7CisgICAgcGFk
ZGluZzogMHB4IDEwcHg7Cit9CisKKy5jaGFydCBoMiwgLmNoYXJ0IGgzIHsKKyAgICBtYXJnaW46
IDAgMCAwLjNlbSAwOworICAgIHBhZGRpbmc6IDA7CisgICAgZm9udC1zaXplOiAxZW07CisgICAg
Zm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cit9CisKKy5j
aGFydCBoMiB7CisgICAgZm9udC1zaXplOiBub3JtYWw7Cit9CisKKy5jaGFydCBoMyB7CisgICAg
Zm9udC1zaXplOiBub3JtYWw7Cit9CisKKyNkYXNoYm9hcmQgLmNoYXJ0IGgzIHsKKyAgICBkaXNw
bGF5OiBub25lOworfQorCisjZGFzaGJvYXJkIC5jaGFydCAuc3RhdHVzIHsKKyAgICBtYXJnaW46
IDBweCAxMHB4OworfQorCisuY2hhcnQgLnN0YXR1cyB7CisgICAgZm9udC1zaXplOiBzbWFsbDsK
KyAgICBjb2xvcjogIzY2NjsKK30KKworLnBsb3QgeworICAgIG1hcmdpbjogNXB4IDVweCAxMHB4
IDVweDsKK30KKworLmNsb3NlQnV0dG9uIHN2ZyB7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIGxlZnQ6IDhweDsKKyAgICBib3R0b206IDhweDsKKyAgICB3aWR0aDogMTVweDsKKyAgICBo
ZWlnaHQ6IDE1cHg7Cit9CisKKyNkYXNoYm9hcmQgLmNoYXJ0IHsKKyAgICB3aWR0aDogNDEwcHg7
Cit9CisKKyNkYXNoYm9hcmQgLnBsb3QgeworICAgIHdpZHRoOiA0MDBweDsKKyAgICBoZWlnaHQ6
IDEwMHB4OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBjdXJzb3I6IGhhbmQ7Cit9CisKKyNj
aGFydHMgLnBsb3QgeworICAgIGhlaWdodDogMzIwcHg7CisgICAgbWFyZ2luLWxlZnQ6IDI1MHB4
OworfQorCisjZGFzaGJvYXJkIC5vdmVydmlld1Bsb3QgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKKyNjaGFydHMgLm92ZXJ2aWV3UGxvdCB7CisgICAgbWFyZ2luOiAxMHB4IDBweCAwcHggMHB4
OworICAgIHBhZGRpbmc6IDA7CisgICAgaGVpZ2h0OiA3MHB4OworfQorCisuY2hhcnQgLnN1bW1h
cnlUYWJsZSB7CisgICAgZm9udC1zaXplOiBzbWFsbDsKKyAgICBjb2xvcjogIzY2NjsKKyAgICBi
b3JkZXI6IDA7Cit9CisKKy5jaGFydCAubWV0YSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOwor
fQorCisuY2hhcnQgLm1ldGEgdGFibGUsCisuY2hhcnQgLm1ldGEgdGQsCisudG9vbHRpcCB0YWJs
ZSwKKy50b29sdGlwIHRkIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKwor
LmNoYXJ0IC5tZXRhIHRoLAorLnRvb2x0aXAgdGggeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRk
aW5nOiAwIDAuMmVtIDAgMDsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICBmb250LXdlaWdo
dDogbm9ybWFsOworfQorCisuY2hhcnQgLm1ldGEgdGQ6bm90KDpmaXJzdC1jaGlsZCk6YmVmb3Jl
LAorLnRvb2x0aXAgdGQ6bm90KDpmaXJzdC1jaGlsZCk6YmVmb3JlIHsKKyAgICBjb250ZW50OiAi
OiAiOworfQorCisjZGFzaGJvYXJkIC5jaGFydCAuc3VtbWFyeVRhYmxlIHsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgdG9wOiAwcHg7Cit9CisKKyNjaGFy
dHMgLnN1bW1hcnlUYWJsZSB7CisgICAgbWFyZ2luLXRvcDogMC4zZW07Cit9CisKKyNkYXNoYm9h
cmQgLmFycm93IHsKKyAgICB3aWR0aDogMjBweDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogNTBweDsKKyAgICBsZWZ0OiA1cHg7Cit9CisK
KyNjaGFydHMgLmFycm93IHsKKyAgICB3aWR0aDogMjBweDsKKyAgICBoZWlnaHQ6IDQwcHg7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMTBweDsKKyAgICBsZWZ0OiAyNDBweDsK
K30KKworLmNoYXJ0IHN2ZyB7CisgICAgc3Ryb2tlOiAjY2NjOworICAgIGZpbGw6ICNjY2M7Cisg
ICAgY29sb3I6ICNjY2M7Cit9CisKKy5jaGFydC53b3JzZSBzdmcgeworICAgIHN0cm9rZTogI2M5
OTsKKyAgICBmaWxsOiAjYzk5OworICAgIGNvbG9yOiAjYzk5OworfQorCisuY2hhcnQuYmV0dGVy
IHN2ZyB7CisgICAgc3Ryb2tlOiAjOWM5OworICAgIGZpbGw6ICM5Yzk7CisgICAgY29sb3I6ICM5
Yzk7Cit9CisKKy5jaGFydCAueWF4aXN0b2dnbGVyIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgYm90dG9tOiAxMHB4OworICAgIGxlZnQ6IDIyNXB4OworICAgIHdpZHRoOiAxMHB4Owor
ICAgIGhlaWdodDogMjVweDsKK30KKworI2Rhc2hib2FyZCAgLnlheGlzdG9nZ2xlciB7CisgICAg
ZGlzcGxheTogbm9uZTsKK30KKworLnRvb2x0aXAgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgcGFkZGluZzogNXB4OworICAgIG9wYWNpdHk6
IDAuODsKKyAgICBiYWNrZ3JvdW5kOiAjMzMzOworICAgIGNvbG9yOiAjZWVlOworICAgIGZvbnQt
c2l6ZTogc21hbGw7CisgICAgbGluZS1oZWlnaHQ6IDEzMCU7CisgICAgd2hpdGUtc3BhY2U6IG5v
d3JhcDsKK30KKworLnRvb2x0aXA6YmVmb3JlIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgd2lkdGg6IDA7CisgICAgaGVpZ2h0OiAwOworICAgIGxlZnQ6IDUwJTsKKyAgICBtYXJnaW4t
bGVmdDogLTlweDsKKyAgICB0b3A6IC0xOXB4OworICAgIGNvbnRlbnQ6ICIiOworICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgICBib3JkZXItd2lkdGg6IDEw
cHg7CisgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMzMzIHRyYW5z
cGFyZW50OworfQorCisudG9vbHRpcC5pbnZlcnRlZDpiZWZvcmUgeworICAgIGRpc3BsYXk6IGJs
b2NrOworfQorCisudG9vbHRpcC5pbnZlcnRlZDphZnRlciB7CisgICAgZGlzcGxheTogbm9uZTsK
K30KKworLnRvb2x0aXA6YWZ0ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0
aDogMDsKKyAgICBoZWlnaHQ6IDA7CisgICAgbGVmdDogNTAlOworICAgIG1hcmdpbi1sZWZ0OiAt
OXB4OworICAgIGJvdHRvbTogLTE5cHg7CisgICAgY29udGVudDogIiI7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgICBib3JkZXItd2lkdGg6IDEwcHg7
CisgICAgYm9yZGVyLWNvbG9yOiAjMzMzIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFy
ZW50OworfQorCisudG9vbHRpcCBhIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsK
KyAgICBjb2xvcjogI2ZmZjsKKyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKK30KKworLmNsaWNrVG9v
bHRpcCB7CisgICAgb3BhY2l0eTogMC42OworfQorCisuaG92ZXJUb29sdGlwIHsKKyAgICB6LWlu
ZGV4OiA5OTk5OTsKK30KKworI3Rlc3RQaWNrZXIgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9j
azsKKyAgICBtYXJnaW46IDEwcHggMHB4OworICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7Cisg
ICAgY29sb3I6ICM2NjY7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIHBhZGRpbmc6IDVw
eCA4cHg7Cit9CisKKzwvc3R5bGU+Cis8c2NyaXB0PgorCisoZnVuY3Rpb24gKCkgeworICAgIHZh
ciBjaGFydHMgPSBbXTsKKyAgICB2YXIgbWluVGltZTsKKyAgICB2YXIgY3VycmVudFpvb207Cisg
ICAgdmFyIHNoYXJlZFBsb3RPcHRpb25zID0geworICAgICAgICBsaW5lczogeyBzaG93OiB0cnVl
LCBsaW5lV2lkdGg6IDEgfSwKKyAgICAgICAgeGF4aXM6IHsKKyAgICAgICAgICAgIG1vZGU6ICJ0
aW1lIiwKKyAgICAgICAgICAgIHRpbWVmb3JtYXQ6ICIlbS8lZCIsCisgICAgICAgICAgICBtaW5U
aWNrU2l6ZTogWzEsICdkYXknXSwKKyAgICAgICAgICAgIG1heDogRGF0ZS5ub3coKSwgLy8gRklY
TUU6IFRoaXMgaXMgbGlrZWx5IGJyb2tlbiBmb3Igbm9uLVBTVAorICAgICAgICB9LAorICAgICAg
ICB5YXhpczogeyB0aWNrTGVuZ3RoOiAwIH0sCisgICAgICAgIHNlcmllczogeyBzaGFkb3dTaXpl
OiAwIH0sCisgICAgICAgIHBvaW50czogeyBzaG93OiBmYWxzZSB9LAorICAgICAgICBncmlkOiB7
CisgICAgICAgICAgICBob3ZlcmFibGU6IHRydWUsCisgICAgICAgICAgICBib3JkZXJXaWR0aDog
MSwKKyAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnIzk5OScsCisgICAgICAgICAgICBiYWNrZ3Jv
dW5kQ29sb3I6ICcjZmZmJywKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBhZGp1
c3RlZEludGVydmFsRm9yUnVuKHJlc3VsdHMsIG1pblRpbWUsIG1pblJhdGlvVG9GaXRJbkFkanVz
dGVkSW50ZXJ2YWwpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRzKQorICAgICAgICAgICAgcmV0dXJu
IHttaW46IE51bWJlci5NQVhfVkFMVUUsIG1heDogTnVtYmVyLk1JTl9WQUxVRX07CisgICAgICAg
IHZhciBkZWdyZWVPZldlaWdodGluZ0RlY3JlYXNlID0gMC4yOworICAgICAgICB2YXIgbW92aW5n
QXZlcmFnZSA9IHJlc3VsdHMuZXhwb25lbnRpYWxNb3ZpbmdBcml0aG1ldGljTWVhbihtaW5UaW1l
LCBkZWdyZWVPZldlaWdodGluZ0RlY3JlYXNlKTsKKyAgICAgICAgdmFyIHJlc3VsdHNDb3VudCA9
IHJlc3VsdHMuY291bnRSZXN1bHRzKG1pblRpbWUpOworICAgICAgICB2YXIgYWRqdXN0bWVudERl
bHRhID0gcmVzdWx0cy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbihtaW5UaW1lKSAvIDQ7CisgICAg
ICAgIHZhciBhZGp1c3RlZE1pbiA9IG1vdmluZ0F2ZXJhZ2U7CisgICAgICAgIHZhciBhZGp1c3Rl
ZE1heCA9IG1vdmluZ0F2ZXJhZ2U7CisgICAgICAgIHZhciBhZGp1c3RtZW50Q291bnQ7CisgICAg
ICAgIGZvciAoYWRqdXN0bWVudENvdW50ID0gMDsgYWRqdXN0bWVudENvdW50IDwgNCAqIDQ7IGFk
anVzdG1lbnRDb3VudCsrKSB7IC8vIERvbid0IGV4cGFuZCBiZXlvbmQgNCBzdGFuZGFyZCBkZXZp
YXRpb25zLgorICAgICAgICAgICAgYWRqdXN0ZWRNaW4gLT0gYWRqdXN0bWVudERlbHRhOworICAg
ICAgICAgICAgYWRqdXN0ZWRNYXggKz0gYWRqdXN0bWVudERlbHRhOworICAgICAgICAgICAgaWYg
KHJlc3VsdHMuY291bnRSZXN1bHRzSW5JbnRlcnZhbChtaW5UaW1lLCBhZGp1c3RlZE1pbiwgYWRq
dXN0ZWRNYXgpIC8gcmVzdWx0c0NvdW50ID49IG1pblJhdGlvVG9GaXRJbkFkanVzdGVkSW50ZXJ2
YWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhZGp1c3RtZW50Q291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHJlc3Vs
dHMuY291bnRSZXN1bHRzSW5JbnRlcnZhbChtaW5UaW1lLCBhZGp1c3RlZE1pbiArIGFkanVzdG1l
bnREZWx0YSwgYWRqdXN0ZWRNYXgpIC8gcmVzdWx0c0NvdW50IDwgbWluUmF0aW9Ub0ZpdEluQWRq
dXN0ZWRJbnRlcnZhbCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFkanVz
dGVkTWluICs9IGFkanVzdG1lbnREZWx0YTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFkanVzdG1lbnRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0
cy5jb3VudFJlc3VsdHNJbkludGVydmFsKG1pblRpbWUsIGFkanVzdGVkTWluLCBhZGp1c3RlZE1h
eCAtIGFkanVzdG1lbnREZWx0YSkgLyByZXN1bHRzQ291bnQgPCBtaW5SYXRpb1RvRml0SW5BZGp1
c3RlZEludGVydmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYWRqdXN0
ZWRNYXggLT0gYWRqdXN0bWVudERlbHRhOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7bWlu
OiBhZGp1c3RlZE1pbiwgbWF4OiBhZGp1c3RlZE1heH07CisgICAgfQorCisgICAgZnVuY3Rpb24g
Y29tcHV0ZVlBeGlzQm91bmRzVG9GaXRMaW5lcyhtaW5UaW1lLCByZXN1bHRzLCBiYXNlbGluZSwg
dGFyZ2V0KSB7CisgICAgICAgIHZhciBtaW5PZkFsbFJ1bnMgPSByZXN1bHRzLm1pbihtaW5UaW1l
KTsKKyAgICAgICAgdmFyIG1heE9mQWxsUnVucyA9IHJlc3VsdHMubWF4KG1pblRpbWUpOworICAg
ICAgICBpZiAoYmFzZWxpbmUpIHsKKyAgICAgICAgICAgIG1pbk9mQWxsUnVucyA9IE1hdGgubWlu
KG1pbk9mQWxsUnVucywgYmFzZWxpbmUubWluKG1pblRpbWUpKTsKKyAgICAgICAgICAgIG1heE9m
QWxsUnVucyA9IE1hdGgubWF4KG1heE9mQWxsUnVucywgYmFzZWxpbmUubWF4KG1pblRpbWUpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodGFyZ2V0KSB7CisgICAgICAgICAgICBtaW5PZkFsbFJ1
bnMgPSBNYXRoLm1pbihtaW5PZkFsbFJ1bnMsIHRhcmdldC5taW4obWluVGltZSkpOworICAgICAg
ICAgICAgbWF4T2ZBbGxSdW5zID0gTWF0aC5tYXgobWF4T2ZBbGxSdW5zLCB0YXJnZXQubWF4KG1p
blRpbWUpKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgbWFyZ2luU2l6ZSA9IChtYXhPZkFsbFJ1
bnMgLSBtaW5PZkFsbFJ1bnMpICogMC4xOworCisgICAgICAgIHZhciBtaW5SYXRpb1RvRml0SW5B
ZGp1c3RlZEludGVydmFsID0gMC45OworICAgICAgICB2YXIgaW50ZXJ2YWxGb3JSZXN1bHRzID0g
YWRqdXN0ZWRJbnRlcnZhbEZvclJ1bihyZXN1bHRzLCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5B
ZGp1c3RlZEludGVydmFsKTsKKyAgICAgICAgdmFyIGludGVydmFsRm9yQmFzZWxpbmUgPSBhZGp1
c3RlZEludGVydmFsRm9yUnVuKGJhc2VsaW5lLCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5BZGp1
c3RlZEludGVydmFsKTsKKyAgICAgICAgdmFyIGludGVydmFsRm9yVGFyZ2V0ID0gYWRqdXN0ZWRJ
bnRlcnZhbEZvclJ1bih0YXJnZXQsIG1pblRpbWUsIG1pblJhdGlvVG9GaXRJbkFkanVzdGVkSW50
ZXJ2YWwpOworICAgICAgICB2YXIgYWRqdXN0ZWRNaW4gPSBNYXRoLm1pbihpbnRlcnZhbEZvclJl
c3VsdHMubWluLCBpbnRlcnZhbEZvckJhc2VsaW5lLm1pbiwgaW50ZXJ2YWxGb3JUYXJnZXQubWlu
KTsKKyAgICAgICAgdmFyIGFkanVzdGVkTWF4ID0gTWF0aC5tYXgoaW50ZXJ2YWxGb3JSZXN1bHRz
Lm1heCwgaW50ZXJ2YWxGb3JCYXNlbGluZS5tYXgsIGludGVydmFsRm9yVGFyZ2V0Lm1heCk7Cisg
ICAgICAgIHZhciBhZGpzdXRlZE1hcmdpblNpemUgPSAoYWRqdXN0ZWRNYXggLSBhZGp1c3RlZE1p
bikgKiAwLjE7CisgICAgICAgIHJldHVybiB7bWluOiBtaW5PZkFsbFJ1bnMgLSBtYXJnaW5TaXpl
LCBtYXg6IG1heE9mQWxsUnVucyArIG1hcmdpblNpemUsCisgICAgICAgICAgICBhZGp1c3RlZE1p
bjogTWF0aC5tYXgobWluT2ZBbGxSdW5zIC0gbWFyZ2luU2l6ZSwgYWRqdXN0ZWRNaW4gLSBhZGpz
dXRlZE1hcmdpblNpemUpLAorICAgICAgICAgICAgYWRqdXN0ZWRNYXg6IE1hdGgubWluKG1heE9m
QWxsUnVucyArIG1hcmdpblNpemUsIGFkanVzdGVkTWF4ICsgYWRqc3V0ZWRNYXJnaW5TaXplKX07
CisgICAgfQorCisgICAgZnVuY3Rpb24gY29tcHV0ZVN0YXR1cyhzbWFsbGVySXNCZXR0ZXIsIGxh
c3RSZXN1bHQsIGJhc2VsaW5lLCB0YXJnZXQpIHsKKyAgICAgICAgdmFyIHJlbGF0aXZlRGlmZmVy
ZW5jZVdpdGhCYXNlbGluZSA9IGJhc2VsaW5lID8gbGFzdFJlc3VsdC5yZWxhdGl2ZURpZmZlcmVu
Y2UoYmFzZWxpbmUubGFzdFJlc3VsdCgpKSA6IDA7CisgICAgICAgIHZhciByZWxhdGl2ZURpZmZl
cmVuY2VXaXRoVGFyZ2V0ID0gdGFyZ2V0ID8gbGFzdFJlc3VsdC5yZWxhdGl2ZURpZmZlcmVuY2Uo
dGFyZ2V0Lmxhc3RSZXN1bHQoKSkgOiAwOworICAgICAgICB2YXIgc3RhdHVzVGV4dCA9ICcnOwor
ICAgICAgICB2YXIgc3RhdHVzID0gJyc7CisKKyAgICAgICAgaWYgKHJlbGF0aXZlRGlmZmVyZW5j
ZVdpdGhCYXNlbGluZSAmJiByZWxhdGl2ZURpZmZlcmVuY2VXaXRoQmFzZWxpbmUgPiAwICE9IHNt
YWxsZXJJc0JldHRlcikgeworICAgICAgICAgICAgc3RhdHVzVGV4dCA9IE1hdGguYWJzKHJlbGF0
aXZlRGlmZmVyZW5jZVdpdGhCYXNlbGluZSAqIDEwMCkudG9GaXhlZCgyKSArICclICcgKyAoc21h
bGxlcklzQmV0dGVyID8gJ2Fib3ZlJyA6ICdiZWxvdycpICsgJyBiYXNlbGluZSc7CisgICAgICAg
ICAgICBzdGF0dXMgPSAnd29yc2UnOworICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aXZlRGlmZmVy
ZW5jZVdpdGhUYXJnZXQgJiYgcmVsYXRpdmVEaWZmZXJlbmNlV2l0aFRhcmdldCA+IDAgPT0gc21h
bGxlcklzQmV0dGVyKSB7CisgICAgICAgICAgICBzdGF0dXNUZXh0ID0gTWF0aC5hYnMocmVsYXRp
dmVEaWZmZXJlbmNlV2l0aFRhcmdldCAqIDEwMCkudG9GaXhlZCgyKSArICclICcgKyAoc21hbGxl
cklzQmV0dGVyID8gJ2JlbG93JyA6ICdhYm92ZScpICsgJyB0YXJnZXQnOworICAgICAgICAgICAg
c3RhdHVzID0gJ2JldHRlcic7CisgICAgICAgIH0gZWxzZSBpZiAocmVsYXRpdmVEaWZmZXJlbmNl
V2l0aFRhcmdldCkKKyAgICAgICAgICAgIHN0YXR1c1RleHQgPSBNYXRoLmFicyhyZWxhdGl2ZURp
ZmZlcmVuY2VXaXRoVGFyZ2V0ICogMTAwKS50b0ZpeGVkKDIpICsgJyUgdW50aWwgdGFyZ2V0JzsK
KworICAgICAgICByZXR1cm4ge2NsYXNzOiBzdGF0dXMsIHRleHQ6IHN0YXR1c1RleHR9OworICAg
IH0KKworICAgIGZ1bmN0aW9uIGFkZFBsb3REYXRhRm9yUnVuKHBsb3REYXRhLCBuYW1lLCBydW5z
LCBjb2xvciwgaW50ZXJhY3RpdmUpIHsKKyAgICAgICAgdmFyIGVudHJ5ID0ge2NvbG9yOiBjb2xv
ciwgZGF0YTogcnVucy5tZWFuUGxvdERhdGEoKX07CisgICAgICAgIGlmICghaW50ZXJhY3RpdmUp
IHsKKyAgICAgICAgICAgIGVudHJ5LmNsaWNrYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZW50
cnkuaG92ZXJhYmxlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ1bnMuaGFzQ29u
ZmlkZW5jZUludGVydmFsKCkpIHsKKyAgICAgICAgICAgIHZhciBsb3dlck5hbWUgPSBuYW1lLnRv
TG93ZXJDYXNlKCk7CisgICAgICAgICAgICB2YXIgY29uZmllbmNlRW50cnkgPSAkLmV4dGVuZCh0
cnVlLCB7fSwgZW50cnksIHtsaW5lczoge2xpbmVXaWR0aDogMH0sIGNsaWNrYWJsZTogZmFsc2Us
IGhvdmVyYWJsZTogZmFsc2V9KTsKKyAgICAgICAgICAgIHBsb3REYXRhLnB1c2goJC5leHRlbmQo
dHJ1ZSwge30sIGNvbmZpZW5jZUVudHJ5LCB7aWQ6IGxvd2VyTmFtZSwgZGF0YTogcnVucy51cHBl
ckNvbmZpZGVuY2VQbG90RGF0YSgpfSkpOworICAgICAgICAgICAgcGxvdERhdGEucHVzaCgkLmV4
dGVuZCh0cnVlLCB7fSwgY29uZmllbmNlRW50cnksCisgICAgICAgICAgICAgICAge2ZpbGxCZXR3
ZWVuOiBsb3dlck5hbWUsIGxpbmVzOiB7ZmlsbDogMC4zfSwgZGF0YTogcnVucy5sb3dlckNvbmZp
ZGVuY2VQbG90RGF0YSgpfSkpOworICAgICAgICB9CisgICAgICAgIHBsb3REYXRhLnB1c2goZW50
cnkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVN1bW1hcnlSb3dNYXJrdXAobmFtZSwg
cnVucykgeworICAgICAgICByZXR1cm4gJzx0cj48dGg+JyArIG5hbWUgKyAnPC90aD48dGQ+JyAr
IHJ1bnMubGFzdFJlc3VsdCgpLmxhYmVsKCkgKyAnPC90ZD48L3RyPic7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gYnVpbGRMYWJlbFdpdGhMaW5rcyhidWlsZCwgcHJldmlvdXNCdWlsZCkgeworICAg
ICAgICBmdW5jdGlvbiBsaW5raWZ5SWZOb3ROdWxsKGxhYmVsLCB1cmwpIHsKKyAgICAgICAgICAg
IHJldHVybiB1cmwgPyAnPGEgaHJlZj0iJyArIHVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsg
bGFiZWwgKyAnPC9hPicgOiBsYWJlbDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBmb3JtYXR0
ZWRSZXZpc2lvbnMgPSBidWlsZC5mb3JtYXR0ZWRSZXZpc2lvbnMocHJldmlvdXNCdWlsZCk7Cisg
ICAgICAgIHZhciBidWlsZEluZm8gPSB7CisgICAgICAgICAgICAnQ29tbWl0JzogYnVpbGQuZm9y
bWF0dGVkVGltZSgpLAorICAgICAgICAgICAgJ0J1aWxkJzogbGlua2lmeUlmTm90TnVsbChidWls
ZC5idWlsZE51bWJlcigpLCBidWlsZC5idWlsZFVybCgpKSArICcoJyArIGJ1aWxkLmZvcm1hdHRl
ZEJ1aWxkVGltZSgpICsgJyknCisgICAgICAgIH07CisgICAgICAgIGZvciAodmFyIHJlcG9zaXRv
cnlOYW1lIGluIGZvcm1hdHRlZFJldmlzaW9ucykKKyAgICAgICAgICAgIGJ1aWxkSW5mb1tyZXBv
c2l0b3J5TmFtZV0gPSBsaW5raWZ5SWZOb3ROdWxsKGZvcm1hdHRlZFJldmlzaW9uc1tyZXBvc2l0
b3J5TmFtZV0ubGFiZWwsIGZvcm1hdHRlZFJldmlzaW9uc1tyZXBvc2l0b3J5TmFtZV0udXJsKTsK
KyAgICAgICAgdmFyIG1hcmt1cCA9ICcnOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gYnVpbGRJ
bmZvKQorICAgICAgICAgICAgbWFya3VwICs9ICc8dHI+PHRoPicgKyBrZXkgKyAnPC90aD48dGQ+
JyArIGJ1aWxkSW5mb1trZXldICsgJzwvdGQ+JzsKKyAgICAgICAgcmV0dXJuICc8dHI+JyArIG1h
cmt1cCArICc8L3RyPic7CisgICAgfQorCisgICAgZnVuY3Rpb24gQ2hhcnQoY29udGFpbmVyLCBp
c0Rhc2hib2FyZCwgcGxhdGZvcm0sIG1ldHJpYywgYnVnVHJhY2tlcnMsIG9uQ2xvc2UpIHsKKyAg
ICAgICAgdmFyIGxpbmtpZmllZEZ1bGxOYW1lID0gbWV0cmljLmZ1bGxOYW1lOworICAgICAgICBp
ZiAobWV0cmljLnRlc3QudXJsKQorICAgICAgICAgICAgbGlua2lmaWVkRnVsbE5hbWUgPSAnPGEg
aHJlZj0iJyArIG1ldHJpYy50ZXN0LnVybCArICciPicgKyBsaW5raWZpZWRGdWxsTmFtZSArICc8
L2E+JzsKKyAgICAgICAgdmFyIHNlY3Rpb24gPSAkKCc8c2VjdGlvbiBjbGFzcz0iY2hhcnQiPjxk
aXYgY2xhc3M9InBhbmUiPjxoZWFkZXI+PGgyPicgKyBsaW5raWZpZWRGdWxsTmFtZSArICc8L2gy
PicKKyAgICAgICAgICAgICsgJzxoMyBjbGFzcz0icGxhdGZvcm0iPicgKyBwbGF0Zm9ybS5uYW1l
ICsgJzwvaDM+PC9oZWFkZXI+JworICAgICAgICAgICAgKyAnPGRpdiBjbGFzcz0ibWV0YSI+PHRh
YmxlIGNsYXNzPSJzdGF0dXMiPjx0Ym9keT48L3Rib2R5PjwvdGFibGU+PHRhYmxlIGNsYXNzPSJz
dW1tYXJ5VGFibGUiPjx0Ym9keT48L3Rib2R5PjwvdGFibGU+PC9kaXY+JworICAgICAgICAgICAg
KyAnPGRpdiBjbGFzcz0ib3ZlcnZpZXdQbG90Ij48L2Rpdj48L2Rpdj4nCisgICAgICAgICAgICAr
ICc8ZGl2IGNsYXNzPSJwbG90Ij48L2Rpdj4nCisgICAgICAgICAgICArICc8ZGl2IGNsYXNzPSJ1
bml0Ij48L2Rpdj4nCisgICAgICAgICAgICArICc8c3ZnIHZpZXdCb3g9IjAgMCAyMCAxMDAiIGNs
YXNzPSJhcnJvdyI+JworICAgICAgICAgICAgKyAnPGcgc3Ryb2tlLXdpZHRoPSIxMCI+PGxpbmUg
eDE9IjEwIiB5MT0iOCIgeDI9IjEwIiB5Mj0iOTIiIC8+JworICAgICAgICAgICAgKyAnPHBvbHln
b24gcG9pbnRzPSI1LDg1IDE1LDg1IDEwLDkwIiBjbGFzcz0iZG93bndhcmRBcnJvd0hlYWQiIC8+
JworICAgICAgICAgICAgKyAnPHBvbHlnb24gcG9pbnRzPSI1LDE1IDE1LDE1IDEwLDEwIiBjbGFz
cz0idXB3YXJkQXJyb3dIZWFkIiAvPicKKyAgICAgICAgICAgICsgJzwvZz48L3N2Zz4nCisgICAg
ICAgICAgICArICc8YSBocmVmPSIjIiBjbGFzcz0idG9nZ2xlWUF4aXMiPjxzdmcgdmlld0JveD0i
MCAwIDQwIDEwMCIgY2xhc3M9InlheGlzdG9nZ2xlciI+PGcgc3Ryb2tlLXdpZHRoPSIxMCI+Jwor
ICAgICAgICAgICAgKyAnPGxpbmUgeDE9IjIwIiB5MT0iOCIgeDI9IjIwIiB5Mj0iODIiIC8+Jwor
ICAgICAgICAgICAgKyAnPHBvbHlnb24gcG9pbnRzPSIxNSwxNSAyNSwxNSAyMCwxMCIgLz4nCisg
ICAgICAgICAgICArICc8cG9seWdvbiBwb2ludHM9IjE1LDc1IDI1LDc1IDIwLDgwIiAvPicKKyAg
ICAgICAgICAgICsgJzxsaW5lIHgxPSIwIiB5MT0iOTIiIHgyPSI0MCIgeTI9IjkyIiAvPicKKyAg
ICAgICAgICAgICsgJzwvZz48L3N2Zz48L2E+JworICAgICAgICAgICAgKyAnPGEgaHJlZj0iIyIg
Y2xhc3M9ImNsb3NlQnV0dG9uIj48c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4nCisgICAgICAg
ICAgICArICc8ZyBzdHJva2Utd2lkdGg9IjEwIj48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0
NSIgZmlsbD0idHJhbnNwYXJlbnQiLz48cG9seWdvbiBwb2ludHM9IjMwLDMwIDcwLDcwIiAvPicK
KyAgICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0iMzAsNzAgNzAsMzAiIC8+PC9nPjwvc3Zn
PjwvYT48L3NlY3Rpb24+Jyk7CisKKyAgICAgICAgJChjb250YWluZXIpLmFwcGVuZChzZWN0aW9u
KTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGlmIChvbkNsb3NlKSB7Cisg
ICAgICAgICAgICBzZWN0aW9uLmZpbmQoJy5jbG9zZUJ1dHRvbicpLmJpbmQoJ2NsaWNrJywgZnVu
Y3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
KyAgICAgICAgICAgICAgICBzZWN0aW9uLnJlbW92ZSgpOworICAgICAgICAgICAgICAgIGNoYXJ0
cy5zcGxpY2UoY2hhcnRzLmluZGV4T2Yoc2VsZiksIDEpOworICAgICAgICAgICAgICAgIG9uQ2xv
c2Uoc2VsZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24n
KS5oaWRlKCk7CisKKyAgICAgICAgc2VjdGlvbi5maW5kKCcueWF4aXN0b2dnbGVyJykuYmluZCgn
Y2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIHNlbGYudG9nZ2xlWUF4aXMo
KTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAgIHZhciBwbG90RGF0YSA9IFtdOworICAg
ICAgICB2YXIgcmVzdWx0czsKKyAgICAgICAgdmFyIGJhc2VsaW5lOworICAgICAgICB2YXIgdGFy
Z2V0OworCisgICAgICAgIHZhciB0b29sdGlwID0gbmV3IFRvb2x0aXAoY29udGFpbmVyLCAndG9v
bHRpcCBob3ZlclRvb2x0aXAnKTsKKyAgICAgICAgdmFyIGJvdW5kczsKKyAgICAgICAgdmFyIHBs
b3RDb250YWluZXIgPSBzZWN0aW9uLmZpbmQoJy5wbG90Jyk7CisgICAgICAgIHZhciBtYWluUGxv
dDsKKyAgICAgICAgdmFyIG92ZXJ2aWV3UGxvdDsKKyAgICAgICAgdmFyIGNsaWNrVG9vbHRpcHMg
PSBbXTsKKyAgICAgICAgdmFyIHNob3VsZFNob3dFbnRpcmVZQXhpcyA9IGZhbHNlOworCisgICAg
ICAgIHRoaXMucGxhdGZvcm0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybTsgfQorICAg
ICAgICB0aGlzLm1ldHJpYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYzsgfQorCisgICAg
ICAgIHRoaXMucG9wdWxhdGUgPSBmdW5jdGlvbiAocGFzc2VkUmVzdWx0cywgcGFzc2VkQmFzZWxp
bmUsIHBhc3NlZFRhcmdldCkgeworICAgICAgICAgICAgcmVzdWx0cyA9IHBhc3NlZFJlc3VsdHM7
CisgICAgICAgICAgICBiYXNlbGluZSA9IHBhc3NlZEJhc2VsaW5lOworICAgICAgICAgICAgdGFy
Z2V0ID0gcGFzc2VkVGFyZ2V0OworCisgICAgICAgICAgICB2YXIgc3VtbWFyeVJvd3MgPSAnJzsK
KyAgICAgICAgICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBhZGRQbG90RGF0YUZv
clJ1bihwbG90RGF0YSwgJ1RhcmdldCcsIHRhcmdldCwgJyMwMzknKTsKKyAgICAgICAgICAgICAg
ICBzdW1tYXJ5Um93cyA9IGNyZWF0ZVN1bW1hcnlSb3dNYXJrdXAoJ1RhcmdldCcsIHRhcmdldCkg
KyBzdW1tYXJ5Um93czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiYXNlbGluZSkg
eworICAgICAgICAgICAgICAgIGFkZFBsb3REYXRhRm9yUnVuKHBsb3REYXRhLCAnQmFzZWxpbmUn
LCBiYXNlbGluZSwgJyM5MzAnKTsKKyAgICAgICAgICAgICAgICBzdW1tYXJ5Um93cyA9IGNyZWF0
ZVN1bW1hcnlSb3dNYXJrdXAoJ0Jhc2VsaW5lJywgYmFzZWxpbmUpICsgc3VtbWFyeVJvd3M7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgJ0N1
cnJlbnQnLCByZXN1bHRzLCAnIzY2NicsIHRydWUpOworICAgICAgICAgICAgc3VtbWFyeVJvd3Mg
PSBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKCdDdXJyZW50JywgcmVzdWx0cykgKyBzdW1tYXJ5Um93
czsKKworICAgICAgICAgICAgdmFyIHN0YXR1cyA9IGNvbXB1dGVTdGF0dXMocmVzdWx0cy5zbWFs
bGVySXNCZXR0ZXIoKSwgcmVzdWx0cy5sYXN0UmVzdWx0KCksIGJhc2VsaW5lLCB0YXJnZXQpOwor
ICAgICAgICAgICAgaWYgKHN0YXR1cy50ZXh0KQorICAgICAgICAgICAgICAgIHN1bW1hcnlSb3dz
ID0gJzx0cj48dGQgY29sc3Bhbj0iMiI+JyArIHN0YXR1cy50ZXh0ICsgJzwvdGQ+PC90cj4nICsg
c3VtbWFyeVJvd3M7CisgICAgICAgICAgICBzZWN0aW9uLmFkZENsYXNzKHN0YXR1cy5jbGFzcyk7
CisgICAgICAgICAgICBzZWN0aW9uLmZpbmQoJy5zdGF0dXMgdGJvZHknKS5odG1sKGJ1aWxkTGFi
ZWxXaXRoTGlua3MocmVzdWx0cy5sYXN0UmVzdWx0KCkuYnVpbGQoKSkpOworICAgICAgICAgICAg
c2VjdGlvbi5maW5kKCcuc3VtbWFyeVRhYmxlIHRib2R5JykuaHRtbChzdW1tYXJ5Um93cyk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0cy5zbWFsbGVySXNCZXR0ZXIoKSkgeworICAgICAgICAgICAg
ICAgIHNlY3Rpb24uZmluZCgnLmFycm93IC5kb3dud2FyZEFycm93SGVhZCcpLnNob3coKTsKKyAg
ICAgICAgICAgICAgICBzZWN0aW9uLmZpbmQoJy5hcnJvdyAudXB3YXJkQXJyb3dIZWFkJykuaGlk
ZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmZpbmQo
Jy5hcnJvdyAuZG93bndhcmRBcnJvd0hlYWQnKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgc2Vj
dGlvbi5maW5kKCcuYXJyb3cgLnVwd2FyZEFycm93SGVhZCcpLnNob3coKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYXR0YWNoTWFpblBsb3QgPSBmdW5jdGlvbiAo
eE1pbiwgeE1heCkgeworICAgICAgICAgICAgaWYgKCFib3VuZHMpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICB2YXIgbWFpblBsb3RPcHRpb25zID0gJC5leHRlbmQodHJ1
ZSwge30sIHNoYXJlZFBsb3RPcHRpb25zLCB7CisgICAgICAgICAgICAgICAgeGF4aXM6IHsKKyAg
ICAgICAgICAgICAgICAgICAgbWluOiB4TWluLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgeWF4aXM6IHsKKyAgICAgICAgICAgICAgICAgICAgdGlja0xlbmd0aDogbnVsbCwK
KyAgICAgICAgICAgICAgICAgICAgbWluOiBzaG91bGRTaG93RW50aXJlWUF4aXMgPyAwIDogYm91
bmRzLmFkanVzdGVkTWluLAorICAgICAgICAgICAgICAgICAgICBtYXg6IHNob3VsZFNob3dFbnRp
cmVZQXhpcyA/IGJvdW5kcy5tYXggOiBib3VuZHMuYWRqdXN0ZWRNYXgsCisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICBjcm9zc2hhaXI6IHsnbW9kZSc6ICd4JywgY29sb3I6ICcj
YzkwJywgbGluZVdpZHRoOiAxfSwKKyAgICAgICAgICAgICAgICBncmlkOiB7Y2xpY2thYmxlOiB0
cnVlfSwKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHhNYXgpCisgICAgICAgICAg
ICAgICAgbWFpblBsb3RPcHRpb25zLnhheGlzLm1heCA9IHhNYXg7CisgICAgICAgICAgICBpZiAo
aXNEYXNoYm9hcmQpIHsKKyAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlvbnMueWF4aXMubGFi
ZWxXaWR0aCA9IDIwOworICAgICAgICAgICAgICAgIG1haW5QbG90T3B0aW9ucy55YXhpcy50aWNr
cyA9IFttYWluUGxvdE9wdGlvbnMueWF4aXMubWluLCBtYWluUGxvdE9wdGlvbnMueWF4aXMubWF4
XTsKKyAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlvbnMuZ3JpZC5hdXRvSGlnaGxpZ2h0ID0g
ZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1haW5QbG90T3B0
aW9ucy55YXhpcy5sYWJlbFdpZHRoID0gMzA7CisgICAgICAgICAgICAgICAgbWFpblBsb3RPcHRp
b25zLnNlbGVjdGlvbiA9IHttb2RlOiAieCJ9OworICAgICAgICAgICAgICAgIHBsb3REYXRhW3Bs
b3REYXRhLmxlbmd0aCAtIDFdLnBvaW50cyA9IHtzaG93OiB0cnVlLCByYWRpdXM6IDF9OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWFpblBsb3QgPSAkLnBsb3QocGxvdENvbnRhaW5lciwg
cGxvdERhdGEsIG1haW5QbG90T3B0aW9ucyk7CisgICAgICAgICAgICBwbG90RGF0YVtwbG90RGF0
YS5sZW5ndGggLSAxXS5wb2ludHMgPSB7fTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjbGlja1Rvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNs
aWNrVG9vbHRpcHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGNsaWNrVG9vbHRpcHNbaV0ucmVt
b3ZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGlja1Rvb2x0aXBzID0gW107Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLnRvZ2dsZVlBeGlzID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgc2hvdWxkU2hvd0VudGlyZVlBeGlzID0gIXNob3VsZFNob3dFbnRpcmVZQXhpczsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50Wm9vbSkKKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFj
aE1haW5QbG90KGN1cnJlbnRab29tLmZyb20sIGN1cnJlbnRab29tLnRvKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90KG1pblRpbWUpOworICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy56b29tID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7CisgICAg
ICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90KGZyb20sIHRvKTsKKyAgICAgICAgICAgIGlmIChv
dmVydmlld1Bsb3QpCisgICAgICAgICAgICAgICAgb3ZlcnZpZXdQbG90LnNldFNlbGVjdGlvbih7
eGF4aXM6IHtmcm9tOiBmcm9tLCB0bzogdG99fSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLmNsZWFyWm9vbSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuYXR0YWNo
TWFpblBsb3QobWluVGltZSk7CisgICAgICAgICAgICBpZiAob3ZlcnZpZXdQbG90KQorICAgICAg
ICAgICAgICAgIG92ZXJ2aWV3UGxvdC5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB0aGlzLnNldENyb3NzaGFpciA9IGZ1bmN0aW9uIChwb3MpIHsKKyAgICAg
ICAgICAgIGlmIChtYWluUGxvdCkKKyAgICAgICAgICAgICAgICBtYWluUGxvdC5zZXRDcm9zc2hh
aXIocG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuY2xlYXJDcm9zc2hhaXIgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAobWFpblBsb3QpCisgICAgICAgICAgICAgICAgbWFp
blBsb3QuY2xlYXJDcm9zc2hhaXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuaGlkZVRv
b2x0aXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0b29sdGlwKQorICAgICAgICAg
ICAgICAgIHRvb2x0aXAuaGlkZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdG9n
Z2xlQ2xpY2tUb29sdGlwKGluZGV4LCBwYWdlWCwgcGFnZVkpIHsKKyAgICAgICAgICAgIGlmIChj
bGlja1Rvb2x0aXBzW2luZGV4XSkKKyAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2luZGV4
XS50b2dnbGUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBQdXQgdGhpcyBvbiBVUkxTdGF0ZS4KKyAgICAgICAgICAgICAgICB2YXIgbmV3VG9vbHRpcCA9
IG5ldyBUb29sdGlwKGNvbnRhaW5lciwgJ3Rvb2x0aXAgY2xpY2tUb29sdGlwJyk7CisgICAgICAg
ICAgICAgICAgc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyhuZXdUb29sdGlwLCBwYWdlWCwgcGFnZVks
IHJlc3VsdHMucmVzdWx0QXQoaW5kZXgpLCByZXN1bHRzLnJlc3VsdEF0KGluZGV4IC0gMSkpOwor
ICAgICAgICAgICAgICAgIG5ld1Rvb2x0aXAuYmluZENsaWNrKGZ1bmN0aW9uICgpIHsgdG9nZ2xl
Q2xpY2tUb29sdGlwKGluZGV4LCBwYWdlWCwgcGFnZVkpOyB9KTsKKyAgICAgICAgICAgICAgICBu
ZXdUb29sdGlwLmJpbmRNb3VzZUVudGVyKGZ1bmN0aW9uICgpIHsgdG9vbHRpcC5oaWRlKCk7IH0p
OworICAgICAgICAgICAgICAgIGNsaWNrVG9vbHRpcHNbaW5kZXhdID0gbmV3VG9vbHRpcDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyh0b29sdGlwLCB4LCB5LCByZXN1
bHQsIHJlc3VsdFRvQ29tcGFyZSkgeworICAgICAgICAgICAgdmFyIG5ld0J1Z1VybHMgPSAnJzsK
KyAgICAgICAgICAgIGlmIChyZXN1bHRUb0NvbXBhcmUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
dGl0bGUgPSAocmVzdWx0VG9Db21wYXJlLmlzQmV0dGVyVGhhbihyZXN1bHQpID8gJ1JFR1JFU1NJ
T046ICcgOiAnJykgKyByZXN1bHQubWV0cmljKCkuZnVsbE5hbWUKKyAgICAgICAgICAgICAgICAg
ICAgKyAnIGdvdCAnICsgcmVzdWx0LmZvcm1hdHRlZFByb2dyZXNzaW9uT3JSZWdyZXNzaW9uKHJl
c3VsdFRvQ29tcGFyZSkKKyAgICAgICAgICAgICAgICAgICAgKyAnIGFyb3VuZCAnICsgcmVzdWx0
LmJ1aWxkKCkuZm9ybWF0dGVkVGltZSgpOworICAgICAgICAgICAgICAgIHZhciByZXZpc2lvbnMg
PSByZXN1bHQuYnVpbGQoKS5mb3JtYXR0ZWRSZXZpc2lvbnMocmVzdWx0VG9Db21wYXJlLmJ1aWxk
KCkpOworCisgICAgICAgICAgICAgICAgZm9yICh2YXIgdHJhY2tlcklkIGluIGJ1Z1RyYWNrZXJz
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0cmFja2VyID0gYnVnVHJhY2tlcnNbdHJhY2tl
cklkXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJlcG9zaXRvcmllcyA9IHRyYWNrZXIucmVw
b3NpdG9yaWVzOworICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAnUGxhdGZv
cm06ICcgKyByZXN1bHQuYnVpbGQoKS5wbGF0Zm9ybSgpLm5hbWUgKyAnXG5cbic7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwb3NpdG9yaWVzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwb3NpdG9yeU5hbWUgPSByZXBvc2l0
b3JpZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV2aXNpb24gPSByZXZpc2lv
bnNbcmVwb3NpdG9yeU5hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXZpc2lv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXZpc2lvbi51cmwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gKz0gcmVwb3NpdG9yeU5hbWUgKyAnOiAnICsgcmV2aXNpb24udXJsOworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uICs9IHJldmlzaW9uLmxhYmVsOworICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB2YXIgdXJsID0gdHJhY2tlci5uZXdCdWdVcmwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKC9cJHRpdGxlL2csIGVuY29kZVVSSUNvbXBvbmVudCh0aXRsZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXCRkZXNjcmlwdGlvbi9nLCBlbmNvZGVVUklDb21w
b25lbnQoZGVzY3JpcHRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wk
bGluay9nLCBlbmNvZGVVUklDb21wb25lbnQobG9jYXRpb24uaHJlZikpOworICAgICAgICAgICAg
ICAgICAgICBpZiAobmV3QnVnVXJscykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0J1Z1Vy
bHMgKz0gJywnOworICAgICAgICAgICAgICAgICAgICBuZXdCdWdVcmxzICs9ICcgPGEgaHJlZj0i
JyArIHVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgdHJhY2tlci5uYW1lICsgJzwvYT4nOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCdWdVcmxzID0gJ0ZpbGU6JyAr
IG5ld0J1Z1VybHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b29sdGlwLnNob3coeCwg
eSwgcmVzdWx0LmxhYmVsKHJlc3VsdFRvQ29tcGFyZSkgKyAnPHRhYmxlPicKKyAgICAgICAgICAg
ICAgICArIGJ1aWxkTGFiZWxXaXRoTGlua3MocmVzdWx0LmJ1aWxkKCksIHJlc3VsdFRvQ29tcGFy
ZSA/IHJlc3VsdFRvQ29tcGFyZS5idWlsZCgpIDogbnVsbCkgKyAnPC90YWJsZT4nCisgICAgICAg
ICAgICAgICAgKyBuZXdCdWdVcmxzKTsKKyAgICAgICAgfQorCisgICAgICAgIHRvb2x0aXAuYmlu
ZENsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0b29sdGlwLmN1cnJlbnRJdGVt
KQorICAgICAgICAgICAgICAgIHRvZ2dsZUNsaWNrVG9vbHRpcCh0b29sdGlwLmN1cnJlbnRJdGVt
LmRhdGFJbmRleCwgdG9vbHRpcC5jdXJyZW50SXRlbS5wYWdlWCwgdG9vbHRpcC5jdXJyZW50SXRl
bS5wYWdlWSk7CisgICAgICAgIH0pOworCisgICAgICAgIGZ1bmN0aW9uIGNsb3Nlc3RJdGVtRm9y
UGFnZVhSZXNwZWN0aW5nUGxvdE9mZnNldChpdGVtLCBwbG90LCBzZXJpZXMsIHBhZ2VYKSB7Cisg
ICAgICAgICAgICBpZiAoIXNlcmllcyB8fCAhc2VyaWVzLmRhdGEubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJChwbG90Q29u
dGFpbmVyKS5vZmZzZXQoKTsKKyAgICAgICAgICAgIHZhciBwb2ludHMgPSBzZXJpZXMuZGF0YXBv
aW50cy5wb2ludHM7CisgICAgICAgICAgICB2YXIgc2l6ZSA9IHNlcmllcy5kYXRhcG9pbnRzLnBv
aW50c2l6ZTsKKyAgICAgICAgICAgIHZhciB4SW5QbG90ID0gcGFnZVggLSBvZmZzZXQubGVmdDsK
KworICAgICAgICAgICAgaWYgKHhJblBsb3QgPCBwbG90LmdldFBsb3RPZmZzZXQoKS5sZWZ0KQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgaWYgKGl0ZW0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisKKyAgICAgICAgICAgIHZhciBwcmV2aW91c1BvaW50
OworICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRQb2ludCA9IHBsb3QucG9pbnRPZmZzZXQoe3g6IHBv
aW50c1tpbmRleCAqIHNpemVdLCB5OiBwb2ludHNbaW5kZXggKiBzaXplICsgMV19KTsKKyAgICAg
ICAgICAgICAgICBpZiAoeEluUGxvdCA8IGN1cnJlbnRQb2ludC5sZWZ0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2aW91c1BvaW50ICYmIHhJblBsb3QgPCAocHJldmlvdXNQb2ludC5s
ZWZ0ICsgY3VycmVudFBvaW50LmxlZnQpIC8gMikgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXggLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHByZXZp
b3VzUG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPj0g
c2VyaWVzLmRhdGEubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBwcmV2aW91c1BvaW50ID0gY3VycmVudFBvaW50OworICAgICAgICAgICAgICAgIGlu
ZGV4Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd2FudCB0
byByZXR1cm4gYSByZWFsIGl0ZW0gb2JqZWN0IGJ1dCBmbG90IGRvZXNuJ3QgcHJvdmlkZSBhbiBB
UEkgdG8gb2J0YWluIG9uZQorICAgICAgICAgICAgLy8gc28gY3JlYXRlIGFuIG9iamVjdCB0aGF0
IGNvbnRhaW4gcHJvcGVydGllcyB3ZSB1c2UuCisgICAgICAgICAgICByZXR1cm4ge2RhdGFJbmRl
eDogaW5kZXgsIHBhZ2VYOiBvZmZzZXQubGVmdCArIGN1cnJlbnRQb2ludC5sZWZ0LCBwYWdlWTog
b2Zmc2V0LnRvcCArIGN1cnJlbnRQb2ludC50b3B9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
UmV0dXJuIGEgcGxvdCBnZW5lcmF0b3IuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gd2Ug
Y2hhbmdlIHRoZSBudW1iZXIgb2YgZGF5cyB0byBzaG93LgorICAgICAgICB0aGlzLmF0dGFjaCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghcmVzdWx0cykKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIGJvdW5kcyA9IGNvbXB1dGVZQXhpc0JvdW5kc1RvRml0
TGluZXMobWluVGltZSwgcmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCk7CisKKyAgICAgICAgICAg
IHZhciBvdmVydmlld0NvbnRhaW5lciA9IHNlY3Rpb24uZmluZCgnLm92ZXJ2aWV3UGxvdCcpOwor
ICAgICAgICAgICAgaWYgKCFpc0Rhc2hib2FyZCkgeworICAgICAgICAgICAgICAgIG92ZXJ2aWV3
UGxvdCA9ICQucGxvdChvdmVydmlld0NvbnRhaW5lciwgcGxvdERhdGEsCisgICAgICAgICAgICAg
ICAgICAgICQuZXh0ZW5kKHRydWUsIHt9LCBzaGFyZWRQbG90T3B0aW9ucywgeworICAgICAgICAg
ICAgICAgICAgICAgICAgeGF4aXM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW46
IG1pblRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG1heGltdW0gbnVt
YmVyIG9mIHRpY2tzIHdlIGNhbiBmaXQgb24gdGhlIG92ZXJmbG93IHBsb3QgaXMgNC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aWNrU2l6ZTogWyhUZXN0QnVpbGQubm93KCkgLSBtaW5U
aW1lKSAvIDQgLyAxMDAwLCAnc2Vjb25kJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICBncmlkOiB7IGhvdmVyYWJsZTogZmFsc2UsIGNsaWNrYWJs
ZTogZmFsc2UgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogeyBtb2RlOiAi
eCIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlheGlzOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hvdzogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlu
OiBib3VuZHMubWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heDogYm91bmRzLm1h
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisKKyAg
ICAgICAgICAgICAgICAkKHBsb3RDb250YWluZXIpLmJpbmQoInBsb3RzZWxlY3RlZCIsIGZ1bmN0
aW9uIChldmVudCwgcmFuZ2VzKSB7IENoYXJ0Lnpvb20ocmFuZ2VzLnhheGlzLmZyb20sIHJhbmdl
cy54YXhpcy50byk7IH0pOworICAgICAgICAgICAgICAgICQob3ZlcnZpZXdDb250YWluZXIpLmJp
bmQoInBsb3RzZWxlY3RlZCIsIGZ1bmN0aW9uIChldmVudCwgcmFuZ2VzKSB7IENoYXJ0Lnpvb20o
cmFuZ2VzLnhheGlzLmZyb20sIHJhbmdlcy54YXhpcy50byk7IH0pOworICAgICAgICAgICAgICAg
ICQob3ZlcnZpZXdDb250YWluZXIpLmJpbmQoInBsb3R1bnNlbGVjdGVkIiwgZnVuY3Rpb24gKCkg
eyBDaGFydC5jbGVhclpvb20obWluVGltZSkgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50Wm9vbSkKKyAgICAgICAgICAgICAgICB0aGlzLnpvb20oY3VycmVudFpv
b20uZnJvbSwgY3VycmVudFpvb20udG8pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHRoaXMuYXR0YWNoTWFpblBsb3QobWluVGltZSk7CisKKyAgICAgICAgICAgIGlmIChiaW5k
UGxvdEV2ZW50SGFuZGxlcnMpCisgICAgICAgICAgICAgICAgYmluZFBsb3RFdmVudEhhbmRsZXJz
KHRoaXMpOworICAgICAgICAgICAgYmluZFBsb3RFdmVudEhhbmRsZXJzID0gbnVsbDsKKyAgICAg
ICAgfTsKKworICAgICAgICBmdW5jdGlvbiBiaW5kUGxvdEV2ZW50SGFuZGxlcnMoY2hhcnQpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBDcm9zc2hhaXIgc2hvdWxkIHN0YXkgd2hlcmUgaXQgd2Fz
IGJldHdlZW4gY2hhcnRzLgorICAgICAgICAgICAgJChwbG90Q29udGFpbmVyKS5iaW5kKCJwbG90
aG92ZXIiLCBmdW5jdGlvbiAoZXZlbnQsIHBvcywgaXRlbSkgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hhcnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaGFydHNbaV0gIT09IGNoYXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
aGFydHNbaV0uc2V0Q3Jvc3NoYWlyKHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
dHNbaV0uaGlkZVRvb2x0aXAoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNEYXNoYm9hcmQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG1haW5QbG90LmdldERhdGEo
KTsKKyAgICAgICAgICAgICAgICBpdGVtID0gY2xvc2VzdEl0ZW1Gb3JQYWdlWFJlc3BlY3RpbmdQ
bG90T2Zmc2V0KGl0ZW0sIG1haW5QbG90LCBkYXRhW2RhdGEubGVuZ3RoIC0gMV0sIHBvcy5wYWdl
WCk7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBzaG93VG9vbHRpcFdpdGhSZXN1bHRzKHRvb2x0aXAsIGl0
ZW0ucGFnZVgsIGl0ZW0ucGFnZVksIHJlc3VsdHMucmVzdWx0QXQoaXRlbS5kYXRhSW5kZXgpLCBy
ZXN1bHRzLnJlc3VsdEF0KGl0ZW0uZGF0YUluZGV4IC0gMSkpOworICAgICAgICAgICAgICAgIHRv
b2x0aXAuY3VycmVudEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICQocGxvdENvbnRhaW5lcikuYmluZCgibW91c2VsZWF2ZSIsIGZ1bmN0aW9uIChldmVudCkgewor
ICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAkKHBsb3RDb250YWluZXIpLm9mZnNldCgpOwor
ICAgICAgICAgICAgICAgIGlmIChvZmZzZXQubGVmdCA8PSBldmVudC5wYWdlWCAmJiBvZmZzZXQu
dG9wIDw9IGV2ZW50LnBhZ2VZICYmIGV2ZW50LnBhZ2VYIDw9IG9mZnNldC5sZWZ0ICsgJChwbG90
Q29udGFpbmVyKS5vdXRlcldpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgZXZlbnQucGFn
ZVkgPD0gb2Zmc2V0LnRvcCArICQocGxvdENvbnRhaW5lcikub3V0ZXJIZWlnaHQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhcnRzW2ld
LmNsZWFyQ3Jvc3NoYWlyKCk7CisgICAgICAgICAgICAgICAgICAgIGNoYXJ0c1tpXS5oaWRlVG9v
bHRpcCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGlmIChpc0Rhc2hib2FyZCkgeyAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYmVsb25n
IGhlcmUuCisgICAgICAgICAgICAgICAgJChwbG90Q29udGFpbmVyKS5iaW5kKCdjbGljaycsIGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgICAgICBvcGVuQ2hhcnQocmVzdWx0cy5w
bGF0Zm9ybSgpLCByZXN1bHRzLm1ldHJpYygpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJChwbG90Q29udGFpbmVyKS5iaW5kKCJw
bG90Y2xpY2siLCBmdW5jdGlvbiAoZXZlbnQsIHBvcywgaXRlbSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodG9vbHRpcC5jdXJyZW50SXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRv
Z2dsZUNsaWNrVG9vbHRpcCh0b29sdGlwLmN1cnJlbnRJdGVtLmRhdGFJbmRleCwgdG9vbHRpcC5j
dXJyZW50SXRlbS5wYWdlWCwgdG9vbHRpcC5jdXJyZW50SXRlbS5wYWdlWSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjaGFydHMucHVz
aCh0aGlzKTsKKyAgICB9CisKKyAgICBDaGFydC5jbGVhciA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgY2hhcnRzID0gW107CisgICAgfQorCisgICAgQ2hhcnQuc2V0TWluVGltZSA9IGZ1bmN0aW9u
IChuZXdNaW5UaW1lKSB7CisgICAgICAgIG1pblRpbWUgPSBuZXdNaW5UaW1lOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoYXJ0cy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGNoYXJ0
c1tpXS5hdHRhY2goKTsKKyAgICB9CisKKyAgICBDaGFydC5vbnpvb21jaGFuZ2UgPSBmdW5jdGlv
biAoZnJvbSwgdG8pIHsgfTsKKworICAgIENoYXJ0Lnpvb20gPSBmdW5jdGlvbiAoZnJvbSwgdG8p
IHsKKyAgICAgICAgY3VycmVudFpvb20gPSB7ZnJvbTogZnJvbSwgdG86IHRvfTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBjaGFy
dHNbaV0uem9vbShmcm9tLCB0byk7CisgICAgICAgIHRoaXMub256b29tY2hhbmdlKGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBDaGFydC5jbGVhclpvb20gPSBmdW5jdGlvbiAobWluVGltZSkgewor
ICAgICAgICBjdXJyZW50Wm9vbSA9IHVuZGVmaW5lZDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBjaGFydHNbaV0uY2xlYXJab29t
KCk7CisgICAgICAgIHRoaXMub256b29tY2hhbmdlKCk7CisgICAgfQorCisgICAgd2luZG93LkNo
YXJ0ID0gQ2hhcnQ7Cit9KSgpOworCisvLyBGSVhNRTogV2UgbmVlZCB0byBkZXZpc2UgYSB3YXkg
dG8gZmV0Y2ggcnVucyBpbiBtdWx0aXBsZSBjaHVua3Mgc28gdGhhdAorLy8gd2UgZG9uJ3QgaGF2
ZSB0byBmZXRjaCB0aGUgZW50aXJlIHRpbWUgc2VyaWVzIHRvIGp1c3Qgc2hvdyB0aGUgbGFzdCAz
IGRheXMuCisvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGEgbWFzcy1mZXRjaCB3aGVyZSB3ZSBmZXRj
aCBKU09OcyBmb3IgbXVsdGlwbGUgcnVucyBhdCBvbmNlLgorZnVuY3Rpb24gZmV0Y2hUZXN0KHJl
cG9zaXRvcmllcywgYnVpbGRlcnMsIGZpbGVuYW1lLCBwbGF0Zm9ybSwgbWV0cmljLCBjYWxsYmFj
aykgeworCisgICAgZnVuY3Rpb24gY3JlYXRlUnVuQW5kUmVzdWx0cyhyYXdSdW5zKSB7CisgICAg
ICAgIGlmICghcmF3UnVucykKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZh
ciBydW5zID0gbmV3IFBlcmZUZXN0UnVucyhtZXRyaWMsIHBsYXRmb3JtKTsKKyAgICAgICAgdmFy
IHJlc3VsdHMgPSByYXdSdW5zLm1hcChmdW5jdGlvbiAocmF3UnVuKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogQ3JlYXRpbmcgUGVyZlRlc3RSZXN1bHQgYW5kIGtlZXBpbmcgdGhlbSBhbGl2ZSBp
biBtZW1vcnkgYWxsIHRoZSB0aW1lIHNlZW1zIGxpa2UgYSB0ZXJyaWJsZSBpZGVhLgorICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGNyZWF0ZSBQZXJmVGVzdFJlc3VsdCBvbiBkZW1hbmQuCisgICAg
ICAgICAgICByZXR1cm4gbmV3IFBlcmZUZXN0UmVzdWx0KHJ1bnMsIHJhd1J1biwgbmV3IFRlc3RC
dWlsZChyZXBvc2l0b3JpZXMsIGJ1aWxkZXJzLCBwbGF0Zm9ybSwgcmF3UnVuKSk7CisgICAgICAg
IH0pOworICAgICAgICBydW5zLnNldFJlc3VsdHMocmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBi
KSB7IHJldHVybiBhLmJ1aWxkKCkudGltZSgpIC0gYi5idWlsZCgpLnRpbWUoKTsgfSkpOworICAg
ICAgICByZXR1cm4gcnVuczsKKyAgICB9CisKKyAgICAkLmdldEpTT04oJ2FwaS9ydW5zLycgKyBm
aWxlbmFtZSArICc/Y2FjaGU9dHJ1ZScsIGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICB2
YXIgZGF0YSA9IHJlc3BvbnNlLmNvbmZpZ3VyYXRpb25zOworICAgICAgICBjYWxsYmFjayhjcmVh
dGVSdW5BbmRSZXN1bHRzKGRhdGEuY3VycmVudCksIGNyZWF0ZVJ1bkFuZFJlc3VsdHMoZGF0YS5i
YXNlbGluZSksIGNyZWF0ZVJ1bkFuZFJlc3VsdHMoZGF0YS50YXJnZXQpKTsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gZmlsZU5hbWVGcm9tUGxhdGZvcm1BbmRUZXN0KHBsYXRmb3JtSWQsIHRlc3RJ
ZCkgeworICAgIHJldHVybiBwbGF0Zm9ybUlkICsgJy0nICsgdGVzdElkICsgJy5qc29uJzsKK30K
KworZnVuY3Rpb24gaW5pdCgpIHsKKyAgICB2YXIgYWxsUGxhdGZvcm1zOworICAgIHZhciB0ZXN0
cyA9IFtdOworICAgIHZhciBmdWxsTmFtZVRvTWV0cmljOworICAgIHZhciBkYXNoYm9hcmRQbGF0
Zm9ybXM7CisgICAgdmFyIHJ1bnNDYWNoZSA9IHt9OyAvLyBGSVhNRTogV2UgbmVlZCB0byBjbGVh
ciB0aGlzIGNhY2hlIGF0IHNvbWUgcG9pbnQuCisgICAgdmFyIHJlcG9zaXRvcmllczsKKyAgICB2
YXIgYnVpbGRlcnM7CisgICAgdmFyIGJ1Z1RyYWNrZXJzOworCisgICAgLy8gRklYTUU6IFNob3cg
c29tZSBlcnJvciBtZXNzYWdlIHdoZW4gd2UgZ2V0IDQwNC4KKyAgICBmdW5jdGlvbiBnZXRPckZl
dGNoVGVzdChwbGF0Zm9ybSwgbWV0cmljLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgZmlsZW5h
bWUgPSBmaWxlTmFtZUZyb21QbGF0Zm9ybUFuZFRlc3QocGxhdGZvcm0uaWQsIG1ldHJpYy5pZCk7
CisgICAgICAgIHZhciBjYWNoZXMgPSBydW5zQ2FjaGVbZmlsZW5hbWVdOworCisgICAgICAgIGlm
IChjYWNoZXMpCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgY2FsbGJhY2so
Y2FjaGVzLmN1cnJlbnQsIGNhY2hlcy5iYXNlbGluZSwgY2FjaGVzLnRhcmdldCk7IH0sIDApOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZldGNoVGVzdChyZXBvc2l0b3JpZXMsIGJ1aWxk
ZXJzLCBmaWxlbmFtZSwgcGxhdGZvcm0sIG1ldHJpYywgZnVuY3Rpb24gKGN1cnJlbnQsIGJhc2Vs
aW5lLCB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBydW5zQ2FjaGVbZmlsZW5hbWVdID0ge2N1
cnJlbnQ6Y3VycmVudCwgYmFzZWxpbmU6YmFzZWxpbmUsIHRhcmdldDp0YXJnZXR9OworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnQsIGJhc2VsaW5lLCB0YXJnZXQpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzaG93RGFzaGJvYXJkKCkg
eworICAgICAgICB2YXIgZGFzaGJvYXJkVGFibGUgPSAkKCc8dGFibGUgaWQ9ImRhc2hib2FyZCI+
PC90YWJsZT4nKTsKKyAgICAgICAgJCgnI21haW5Db250ZW50cycpLmh0bWwoZGFzaGJvYXJkVGFi
bGUpOworCisgICAgICAgIC8vIFNwbGl0IGRhc2hib2FyZCBwbGF0Zm9ybXMgaW50byBncm91cHMg
b2YgdGhyZWUgc28gdGhhdCBpdCBkb2Vzbid0IGdyb3cgaG9yaXpvbnRhbGx5IHRvbyBtdWNoLgor
ICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGFkYXB0aXZlLgorICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IE1hdGguY2VpbChkYXNoYm9hcmRQbGF0Zm9ybXMubGVuZ3RoIC8gMyk7IGkrKykK
KyAgICAgICAgICAgIGFkZFBsYXRmb3Jtc1RvRGFzaGJvYXJkKGRhc2hib2FyZFRhYmxlLCBkYXNo
Ym9hcmRQbGF0Zm9ybXMuc2xpY2UoaSAqIDMsIChpICsgMSkgKiAzKSk7CisKKyAgICAgICAgVVJM
U3RhdGUucmVtb3ZlKCdjaGFydExpc3QnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRQbGF0
Zm9ybXNUb0Rhc2hib2FyZChkYXNoYm9hcmRUYWJsZSwgc2VsZWN0ZWRQbGF0Zm9ybXMpIHsKKyAg
ICAgICAgdmFyIGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoZWFkJyk7CisgICAg
ICAgIHNlbGVjdGVkUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24gKHBsYXRmb3JtKSB7CisgICAg
ICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7CisgICAgICAg
ICAgICAkKGNlbGwpLnRleHQocGxhdGZvcm0ubmFtZSk7CisgICAgICAgICAgICBoZWFkZXIuYXBw
ZW5kQ2hpbGQoY2VsbCk7CisgICAgICAgIH0pOworICAgICAgICBkYXNoYm9hcmRUYWJsZS5hcHBl
bmQoaGVhZGVyKTsKKworICAgICAgICB2YXIgdGJvZHkgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3Rib2R5JykpOworICAgICAgICBkYXNoYm9hcmRUYWJsZS5hcHBlbmQodGJvZHkpOworICAg
ICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICAgICAgdGJv
ZHkuYXBwZW5kKHJvdyk7CisKKyAgICAgICAgc2VsZWN0ZWRQbGF0Zm9ybXMuZm9yRWFjaChmdW5j
dGlvbiAocGxhdGZvcm0pIHsKKyAgICAgICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgndGQnKTsKKyAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChjZWxsKTsKKworICAg
ICAgICAgICAgcGxhdGZvcm0ubWV0cmljcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRyaWMpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgY2hhcnQgPSBuZXcgQ2hhcnQoY2VsbCwgdHJ1ZSwgcGxhdGZvcm0s
IG1ldHJpYywgYnVnVHJhY2tlcnMpOworICAgICAgICAgICAgICAgIGdldE9yRmV0Y2hUZXN0KHBs
YXRmb3JtLCBtZXRyaWMsIGZ1bmN0aW9uIChyZXN1bHRzLCBiYXNlbGluZSwgdGFyZ2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVseSBvbiB0aGUgb3Jk
ZXIgaW4gd2hpY2ggWEhSIGZpbmlzaGVzIHRvIG9yZGVyIHBsb3RzLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoZGFzaGJvYXJkVGFibGUucGFyZW50KCkubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFydC5wb3B1bGF0ZShyZXN1bHRzLCBiYXNlbGluZSwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0LmF0dGFjaCgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2hvd0NoYXJ0cyhsaXN0cykgeworICAgICAgICB2YXIgY2hh
cnRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VjdGlvbicpOworICAgICAg
ICBjaGFydHNDb250YWluZXIuaWQgPSAnY2hhcnRzJzsKKyAgICAgICAgJCgnI21haW5Db250ZW50
cycpLmh0bWwoY2hhcnRzQ29udGFpbmVyKTsKKworICAgICAgICB2YXIgdGVzdFBpY2tlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKKyAgICAgICAgdGVzdFBpY2tlci5pZCA9
ICd0ZXN0UGlja2VyJzsKKworICAgICAgICBmdW5jdGlvbiBhZGRPcHRpb24oc2VsZWN0LCBsYWJl
bCwgdmFsdWUpIHsKKyAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdvcHRpb24nKTsKKyAgICAgICAgICAgIG9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShsYWJlbCkpOworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAg
ICAgICAgIG9wdGlvbi52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgc2VsZWN0LmFwcGVuZENo
aWxkKG9wdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVzdExpc3QgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTsKKyAgICAgICAgdGVzdExpc3QuaWQgPSAndGVzdExp
c3QnOworICAgICAgICB0ZXN0UGlja2VyLmFwcGVuZENoaWxkKHRlc3RMaXN0KTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KHRlc3RzW2ldLnBhcmVudFRlc3QpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBhZGRPcHRpb24odGVzdExpc3QsIHRlc3RzW2ldLmZ1bGxOYW1lLCB0ZXN0c1tpXS5pZCk7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgbWV0cmljTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3NlbGVjdCcpOworICAgICAgICBtZXRyaWNMaXN0LmlkID0gJ21ldHJpY0xpc3QnOwor
ICAgICAgICB0ZXN0UGlja2VyLmFwcGVuZENoaWxkKG1ldHJpY0xpc3QpOworCisgICAgICAgIHZh
ciBwbGF0Zm9ybUxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTsKKyAgICAg
ICAgcGxhdGZvcm1MaXN0LmlkID0gJ3BsYXRmb3JtTGlzdCc7CisgICAgICAgIHRlc3RQaWNrZXIu
YXBwZW5kQ2hpbGQocGxhdGZvcm1MaXN0KTsKKyAgICAgICAgY29uc3QgT1BUSU9OX1ZBTFVFX0ZP
Ul9BTEwgPSAnLSc7CisgICAgICAgIGFkZE9wdGlvbihwbGF0Zm9ybUxpc3QsICdBbGwgcGxhdGZv
cm1zJywgT1BUSU9OX1ZBTFVFX0ZPUl9BTEwpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFsbFBsYXRmb3Jtcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGFkZE9wdGlvbihwbGF0Zm9y
bUxpc3QsIGFsbFBsYXRmb3Jtc1tpXS5uYW1lKTsKKworICAgICAgICB0ZXN0TGlzdC5vbmNoYW5n
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHdoaWxlIChtZXRyaWNMaXN0LmZpcnN0Q2hp
bGQpCisgICAgICAgICAgICAgICAgbWV0cmljTGlzdC5yZW1vdmVDaGlsZChtZXRyaWNMaXN0LmZp
cnN0Q2hpbGQpOworCisgICAgICAgICAgICB2YXIgbWV0cmljc0dyb3VwID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnb3B0Z3JvdXAnKTsKKyAgICAgICAgICAgIG1ldHJpY3NHcm91cC5sYWJlbCA9
ICdNZXRyaWNzJzsKKyAgICAgICAgICAgIG1ldHJpY0xpc3QuYXBwZW5kQ2hpbGQobWV0cmljc0dy
b3VwKTsKKyAgICAgICAgICAgIGFkZE9wdGlvbihtZXRyaWNzR3JvdXAsICdBbGwgbWV0cmljcycs
IE9QVElPTl9WQUxVRV9GT1JfQUxMKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodGVzdHNbaV0uaWQgPT0g
dGVzdExpc3QudmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkVGVzdCA9
IHRlc3RzW2ldOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlbGVj
dGVkVGVzdC5tZXRyaWNzLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZnVsbE5hbWUgPSBzZWxlY3RlZFRlc3QubWV0cmljc1tqXS5mdWxsTmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU5hbWUgPSBmdWxsTmFtZS5yZXBsYWNlKHNlbGVj
dGVkVGVzdC5mdWxsTmFtZSwgJycpLnJlcGxhY2UoL15bOi9dLywgJycpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkT3B0aW9uKG1ldHJpY3NHcm91cCwgcmVsYXRpdmVOYW1lLCBmdWxsTmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgc3VidGVzdHNHcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ29wdGdyb3VwJyk7CisgICAgICAgICAgICBzdWJ0ZXN0c0dyb3VwLmxhYmVsID0gJ1Rlc3Rz
JzsKKyAgICAgICAgICAgIG1ldHJpY0xpc3QuYXBwZW5kQ2hpbGQoc3VidGVzdHNHcm91cCk7Cisg
ICAgICAgICAgICBhZGRPcHRpb24oc3VidGVzdHNHcm91cCwgJ0FsbCBzdWJ0ZXN0cycsIE9QVElP
Tl9WQUxVRV9GT1JfQUxMKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRlc3RzW2ldLnBhcmVudFRlc3Qg
fHwgdGVzdHNbaV0ucGFyZW50VGVzdC5pZCAhPSB0ZXN0TGlzdC52YWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFyIHN1YnRlc3QgPSB0ZXN0c1tp
XTsKKyAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRUZXN0ID0gc3VidGVzdC5wYXJlbnRUZXN0
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3VidGVzdC5tZXRyaWNzLmxl
bmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmdWxsTmFtZSA9IHN1YnRlc3Qu
bWV0cmljc1tqXS5mdWxsTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlTmFt
ZSA9IGZ1bGxOYW1lLnJlcGxhY2Uoc2VsZWN0ZWRUZXN0LmZ1bGxOYW1lLCAnJykucmVwbGFjZSgv
Xls6L10vLCAnJyk7CisgICAgICAgICAgICAgICAgICAgIGFkZE9wdGlvbihzdWJ0ZXN0c0dyb3Vw
LCByZWxhdGl2ZU5hbWUsIGZ1bGxOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgbWV0cmljTGlzdC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHZhciBtZXRyaWMgPSBmdWxsTmFtZVRvTWV0cmljW21ldHJpY0xpc3Qu
dmFsdWVdOworICAgICAgICAgICAgdmFyIHNob3VsZEFkZEFsbE1ldHJpY3MgPSBtZXRyaWNMaXN0
LnZhbHVlID09PSBPUFRJT05fVkFMVUVfRk9SX0FMTDsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGxhdGZvcm1MaXN0Lm9wdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgb3B0aW9uID0gcGxhdGZvcm1MaXN0Lm9wdGlvbnNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gT1BUSU9OX1ZBTFVFX0ZPUl9BTEwpIC8vIEFkZGluZyBh
bGwgbWV0cmljcyBmb3IgYWxsIHBsYXRmb3JtcyB3aWxsIGJlIHRvbyBzbG93LgorICAgICAgICAg
ICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSBzaG91bGRBZGRBbGxNZXRyaWNzOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGxhdGZvcm0gPSBuYW1l
VG9QbGF0Zm9ybVtvcHRpb24udmFsdWVdOworICAgICAgICAgICAgICAgICAgICB2YXIgcGxhdGZv
cm1IYXNNZXRyaWMgPSBwbGF0Zm9ybS5tZXRyaWNzLmluZGV4T2YobWV0cmljKSA+PSAwOworICAg
ICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSAhc2hvdWxkQWRkQWxsTWV0cmljcyAm
JiAhcGxhdGZvcm1IYXNNZXRyaWM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHRlc3RMaXN0Lm9uY2hhbmdlKCk7CisgICAgICAgIG1ldHJpY0xp
c3Qub25jaGFuZ2UoKTsKKworICAgICAgICAkKHRlc3RQaWNrZXIpLmFwcGVuZCgnIDxhIGhyZWY9
IiI+QWRkIENoYXJ0PC9hPicpOworCisgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUNoYXJ0KGNoYXJ0
KSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJ0TGlzdC5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGlmIChjaGFydExpc3RbaV1bMF0gPT0gY2hhcnQucGxhdGZv
cm0oKS5uYW1lICYmIGNoYXJ0TGlzdFtpXVsxXSA9PSBjaGFydC5tZXRyaWMoKS5mdWxsTmFtZSkg
eworICAgICAgICAgICAgICAgICAgICBjaGFydExpc3Quc3BsaWNlKGksIDEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBVUkxTdGF0ZS5zZXQoJ2NoYXJ0TGlzdCcsIEpTT04uc3RyaW5naWZ5KGNoYXJ0TGlz
dCkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlQ2hhcnRGcm9tTGlzdFBh
aXIocGxhdGZvcm1OYW1lLCBtZXRyaWNGdWxsTmFtZSkgeworICAgICAgICAgICAgdmFyIHBsYXRm
b3JtID0gbmFtZVRvUGxhdGZvcm1bcGxhdGZvcm1OYW1lXTsKKyAgICAgICAgICAgIHZhciBtZXRy
aWMgPSBmdWxsTmFtZVRvTWV0cmljW21ldHJpY0Z1bGxOYW1lXQorICAgICAgICAgICAgdmFyIGNo
YXJ0ID0gbmV3IENoYXJ0KGNoYXJ0c0NvbnRhaW5lciwgZmFsc2UsIHBsYXRmb3JtLCBtZXRyaWMs
IGJ1Z1RyYWNrZXJzLCByZW1vdmVDaGFydCk7CisKKyAgICAgICAgICAgIGdldE9yRmV0Y2hUZXN0
KHBsYXRmb3JtLCBtZXRyaWMsIGZ1bmN0aW9uIChyZXN1bHRzLCBiYXNlbGluZSwgdGFyZ2V0KSB7
CisgICAgICAgICAgICAgICAgaWYgKCFjaGFydHNDb250YWluZXIucGFyZW50Tm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNoYXJ0LnBvcHVsYXRlKHJl
c3VsdHMsIGJhc2VsaW5lLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGNoYXJ0LmF0dGFjaCgp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAkKHRlc3RQaWNrZXIpLmNo
aWxkcmVuKCdhJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAgICAgICAgIHZhciBuZXdDaGFydExpc3Qg
PSBbXTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybUxpc3QudmFsdWUgPT09IE9QVElPTl9WQUxV
RV9GT1JfQUxMKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQbGF0
Zm9ybXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hhcnRGcm9t
TGlzdFBhaXIoYWxsUGxhdGZvcm1zW2ldLm5hbWUsIG1ldHJpY0xpc3QudmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBuZXdDaGFydExpc3QucHVzaChbYWxsUGxhdGZvcm1zW2ldLm5hbWUsIG1l
dHJpY0xpc3QudmFsdWVdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1ldHJpY0xpc3QudmFsdWUgPT09IE9QVElPTl9WQUxVRV9GT1JfQUxMKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGdyb3VwID0gbWV0cmljTGlzdC5zZWxlY3RlZE9wdGlvbnNbMF0ucGFyZW50
Tm9kZTsKKyAgICAgICAgICAgICAgICB2YXIgbWV0cmljc1RvQWRkID0gW107CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5jaGlsZHJlbi5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljID0gZ3JvdXAuY2hpbGRyZW5baV0udmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtZXRyaWMgPT0gT1BUSU9OX1ZBTFVFX0ZPUl9BTEwp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlQ2hhcnRGcm9tTGlzdFBhaXIocGxhdGZvcm1MaXN0LnZhbHVlLCBtZXRyaWMpOworICAg
ICAgICAgICAgICAgICAgICBuZXdDaGFydExpc3QucHVzaChbcGxhdGZvcm1MaXN0LnZhbHVlLCBt
ZXRyaWNdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRmb3JtTGlzdC52YWx1ZSwgbWV0
cmljTGlzdC52YWx1ZSk7CisgICAgICAgICAgICAgICAgbmV3Q2hhcnRMaXN0LnB1c2goW3BsYXRm
b3JtTGlzdC52YWx1ZSwgbWV0cmljTGlzdC52YWx1ZV0pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjaGFydExpc3QgPSBjaGFydExpc3QuY29uY2F0KG5ld0NoYXJ0TGlzdCk7CisgICAg
ICAgICAgICBVUkxTdGF0ZS5zZXQoJ2NoYXJ0TGlzdCcsIEpTT04uc3RyaW5naWZ5KGNoYXJ0TGlz
dCkpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworCisgICAgICAg
ICQoJyNtYWluQ29udGVudHMnKS5hcHBlbmQodGVzdFBpY2tlcik7CisKKyAgICAgICAgdmFyIGNo
YXJ0TGlzdCA9IFtdOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2hhcnRMaXN0ID0gSlNP
Ti5wYXJzZShVUkxTdGF0ZS5nZXQoJ2NoYXJ0TGlzdCcsICcnKSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHZlcmlmeSB0aGF0IHBsYXRmb3JtIGFuZCB0ZXN0IG5hbWVzIGFyZSB2
YWxpZCBoZXJlPworICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgICAgIC8v
IElnbm9yZSBhbnkgZXhjZXB0aW9uIHRocm93biBieSBwYXJzZS4KKyAgICAgICAgfQorCisgICAg
ICAgIHJlZGlyZWN0Q2hhcnRzVG9WMyhjaGFydExpc3QpOworCisgICAgICAgIGNoYXJ0TGlzdC5m
b3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKGl0ZW1bMF0s
IGl0ZW1bMV0pOyB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZWRpcmVjdENoYXJ0c1RvVjMo
Y2hhcnRMaXN0KQorICAgIHsKKyAgICAgICAgdmFyIHYzVVJMUGFyYW1zID0gW107CisgICAgICAg
IHZhciBudW1iZXJPZkRheXMgPSBVUkxTdGF0ZS5nZXQoJ2RheXMnKTsKKyAgICAgICAgaWYgKHBh
cnNlSW50KG51bWJlck9mRGF5cykgPT0gbnVtYmVyT2ZEYXlzKQorICAgICAgICAgICAgdjNVUkxQ
YXJhbXMucHVzaCgnc2luY2U9JyArICgrRGF0ZS5ub3coKSAtIG51bWJlck9mRGF5cyAqIDI0ICog
MzYwMCAqIDEwMDApKTsKKworICAgICAgICB2YXIgdjNQYW5lTGlzdCA9IFtdOworICAgICAgICBm
b3IgKHZhciBpdGVtIG9mIGNoYXJ0TGlzdCkgeworICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0g
bmFtZVRvUGxhdGZvcm1baXRlbVswXV07CisgICAgICAgICAgICB2YXIgbWV0cmljID0gZnVsbE5h
bWVUb01ldHJpY1tpdGVtWzFdXTsKKyAgICAgICAgICAgIGlmIChwbGF0Zm9ybSAmJiBtZXRyaWMp
CisgICAgICAgICAgICAgICAgdjNQYW5lTGlzdC5wdXNoKGAoJHtwbGF0Zm9ybS5pZH0tJHttZXRy
aWMuaWR9KWApOworICAgICAgICB9CisgICAgICAgIHYzVVJMUGFyYW1zLnB1c2goYHBhbmVMaXN0
PSgke3YzUGFuZUxpc3Quam9pbignLScpfSlgKTsKKworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgdmFyIHpvb21WYWx1ZXMgPSBKU09OLnBhcnNlKFVSTFN0YXRlLmdldCgnem9vbScsICdbXScp
KTsKKyAgICAgICAgICAgIGlmICh6b29tVmFsdWVzLmxlbmd0aCA9PSAyKQorICAgICAgICAgICAg
ICAgIHYzVVJMUGFyYW1zLnB1c2goYHpvb209KCR7em9vbVZhbHVlc1swXX0tJHt6b29tVmFsdWVz
WzFdfSlgKTsKKyAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfQorCisgICAgICAgIGxvY2F0aW9u
LmhyZWYgPSAnL3YzLyMvY2hhcnRzPycgKyB2M1VSTFBhcmFtcy5qb2luKCcmJyk7CisgICAgfQor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgZXhwb25lbnRpYWwgc2xpZGVyIGZvciBjaGFy
dHMgcGFnZSB3aGVyZSB3ZSBleHBlY3QgdG8gaGF2ZQorICAgIC8vIHRoZSBmdWxsIEpTT04gYXMg
b3Bwb3NlZCB0byB0aGUgZGFzaGJvYXJkIHdoZXJlIHdlIGNhbid0IGFmZm9yZCBsb2FkaW5nIHJl
YWxseSBiaWcgSlNPTiBmaWxlcy4KKyAgICB2YXIgZXhwb25lbnRpYWwgPSB0cnVlOworICAgIChm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpbnB1dCA9ICQoJyNudW1iZXJPZkRheXMnKVswXTsK
KyAgICAgICAgdmFyIHVwZGF0aW5nID0gMDsKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRlU3BhbkFu
ZENhbGwobmV3TnVtYmVyT2ZEYXlzKSB7CisgICAgICAgICAgICAkKCcjbnVtYmVyT2ZEYXlzJyku
bmV4dCgpLnRleHQobmV3TnVtYmVyT2ZEYXlzICsgJyBkYXlzJyk7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBsaWtlbHkgYnJva2VuIGZvciBub24tUFNULgorICAgICAgICAgICAgQ2hh
cnQuc2V0TWluVGltZShEYXRlLm5vdygpIC0gbmV3TnVtYmVyT2ZEYXlzICogMjQgKiAzNjAwICog
MTAwMCk7CisgICAgICAgIH0KKyAgICAgICAgJCgnI251bWJlck9mRGF5cycpLmJpbmQoJ2NoYW5n
ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBuZXdOdW1iZXJPZkRheXMgPSBNYXRo
LnJvdW5kKGV4cG9uZW50aWFsID8gTWF0aC5leHAoaW5wdXQudmFsdWUpIDogaW5wdXQudmFsdWUp
OworICAgICAgICAgICAgVVJMU3RhdGUucmVtb3ZlKCd6b29tJyk7CisgICAgICAgICAgICBDaGFy
dC5jbGVhclpvb20oKTsKKyAgICAgICAgICAgIFVSTFN0YXRlLnNldCgnZGF5cycsIG5ld051bWJl
ck9mRGF5cyk7CisgICAgICAgICAgICB1cGRhdGVTcGFuQW5kQ2FsbChuZXdOdW1iZXJPZkRheXMp
OworICAgICAgICB9KTsKKyAgICAgICAgZnVuY3Rpb24gb25jaGFuZ2UoKSB7CisgICAgICAgICAg
ICB2YXIgbmV3TnVtYmVyT2ZEYXlzID0gVVJMU3RhdGUuZ2V0KCdkYXlzJywgTWF0aC5yb3VuZChl
eHBvbmVudGlhbCA/IE1hdGguZXhwKGlucHV0LmRlZmF1bHRWYWx1ZSkgOiBpbnB1dC5kZWZhdWx0
VmFsdWUpKTsKKyAgICAgICAgICAgICQoJyNudW1iZXJPZkRheXMnKS52YWwoZXhwb25lbnRpYWwg
PyBNYXRoLmxvZyhuZXdOdW1iZXJPZkRheXMpIDogbmV3TnVtYmVyT2ZEYXlzKTsKKyAgICAgICAg
ICAgIHVwZGF0ZVNwYW5BbmRDYWxsKG5ld051bWJlck9mRGF5cyk7CisgICAgICAgIH0KKyAgICAg
ICAgVVJMU3RhdGUud2F0Y2goJ2RheXMnLCBvbmNoYW5nZSk7CisgICAgICAgIG9uY2hhbmdlKCk7
CisgICAgfSkoKTsKKworICAgIFVSTFN0YXRlLndhdGNoKCdtb2RlJywgZnVuY3Rpb24gKCkgeyBz
ZXRNb2RlKFVSTFN0YXRlLmdldCgnbW9kZScpKTsgfSk7CisgICAgVVJMU3RhdGUud2F0Y2goJ2No
YXJ0TGlzdCcsIGZ1bmN0aW9uIChjaGFuZ2VkU3RhdGVzKSB7CisgICAgICAgIHZhciBtb2RlQ2hh
bmdlZCA9IGNoYW5nZWRTdGF0ZXMuaW5kZXhPZignbW9kZScpID49IDA7CisgICAgICAgIGlmIChV
UkxTdGF0ZS5nZXQoJ21vZGUnKSA9PSAnY2hhcnRzJyAmJiAhbW9kZUNoYW5nZWQpCisgICAgICAg
ICAgICBzZXRNb2RlKCdjaGFydHMnKTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIHpvb21DaGFy
dHNJZlBhcnNlZENvcnJlY3RseSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHpvb21W
YWx1ZXMgPSBKU09OLnBhcnNlKFVSTFN0YXRlLmdldCgnem9vbScsICdbXScpKTsKKyAgICAgICAg
ICAgIGlmICh6b29tVmFsdWVzLmxlbmd0aCAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIENoYXJ0Lnpvb20ocGFyc2VGbG9hdCh6b29tVmFsdWVzWzBdKSwg
cGFyc2VGbG9hdCh6b29tVmFsdWVzWzFdKSk7CisgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikg
eworICAgICAgICAgICAgLy8gSWdub3JlIGFsbCBleGNlcHRpb25zIHRocm93biBieSBKU09OLnBh
cnNlLgorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFVSTFN0
YXRlLndhdGNoKCd6b29tJywgZnVuY3Rpb24gKGNoYW5nZWRTdGF0ZXMpIHsKKyAgICAgICAgdmFy
IG1vZGVDaGFuZ2VkID0gY2hhbmdlZFN0YXRlcy5pbmRleE9mKCdtb2RlJykgPj0gMDsKKyAgICAg
ICAgaWYgKFVSTFN0YXRlLmdldCgnbW9kZScpID09ICdjaGFydHMnICYmICFtb2RlQ2hhbmdlZCkg
eworICAgICAgICAgICAgaWYgKCF6b29tQ2hhcnRzSWZQYXJzZWRDb3JyZWN0bHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQ2hhcnQuY2xlYXJab29tKCk7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIENoYXJ0Lm9uem9vbWNoYW5nZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykgeworICAgICAg
ICBpZiAoZnJvbSAmJiB0bykKKyAgICAgICAgICAgIFVSTFN0YXRlLnNldCgnem9vbScsIEpTT04u
c3RyaW5naWZ5KFtmcm9tLCB0b10pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVVJMU3Rh
dGUucmVtb3ZlKCd6b29tJyk7CisgICAgfQorCisgICAgd2luZG93Lm9wZW5DaGFydCA9IGZ1bmN0
aW9uIChwbGF0Zm9ybSwgbWV0cmljKSB7CisgICAgICAgIFVSTFN0YXRlLnNldCgnY2hhcnRMaXN0
JywgSlNPTi5zdHJpbmdpZnkoW1twbGF0Zm9ybS5uYW1lLCBtZXRyaWMuZnVsbE5hbWVdXSkpOwor
ICAgICAgICBzZXRNb2RlKCdjaGFydHMnKTsKKyAgICB9CisKKyAgICB3aW5kb3cuc2V0TW9kZSA9
IGZ1bmN0aW9uIChuZXdNb2RlKSB7CisgICAgICAgIFVSTFN0YXRlLnNldCgnbW9kZScsIG5ld01v
ZGUpOworCisgICAgICAgIENoYXJ0LmNsZWFyKCk7CisgICAgICAgIGlmIChuZXdNb2RlID09ICdk
YXNoYm9hcmQnKSB7CisgICAgICAgICAgICBVUkxTdGF0ZS5yZW1vdmUoJ3pvb20nKTsKKyAgICAg
ICAgICAgIENoYXJ0LmNsZWFyWm9vbSgpOworICAgICAgICAgICAgc2hvd0Rhc2hib2FyZCgpOwor
ICAgICAgICB9IGVsc2UgeyAvLyBGSVhNRTogRHluYW1pY2FsbHkgb2J0YWluIHRoZSBsaXN0IG9m
IHRlc3RzIHRvIHNob3cuCisgICAgICAgICAgICBzaG93Q2hhcnRzKCk7CisgICAgICAgICAgICB6
b29tQ2hhcnRzSWZQYXJzZWRDb3JyZWN0bHkoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIGZ1bGxOYW1lKHRlc3QpIHsKKyAgICAgICAgdmFyIG5hbWVzID0gW107CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIG5hbWVzLnB1c2godGVzdC5uYW1lKTsKKyAgICAgICAgICAgIHRl
c3QgPSB0ZXN0LnBhcmVudFRlc3Q7CisgICAgICAgIH0gd2hpbGUgKHRlc3QpOworICAgICAgICBu
YW1lcy5yZXZlcnNlKCk7CisgICAgICAgIHJldHVybiBuYW1lcy5qb2luKCcvJyk7CisgICAgfQor
CisgICAgLy8gUGVyaGFwcyB3ZSB3YW50IGFuIG9yZGVyZWQgbGlzdCBvZiBwbGF0Zm9ybXMuCisg
ICAgJC5nZXRKU09OKCdkYXRhL21hbmlmZXN0Lmpzb24nLCBmdW5jdGlvbiAoZGF0YSkgeworICAg
ICAgICB2YXIgbWFuaWZlc3QgPSBkYXRhOworCisgICAgICAgIG5hbWVUb1Rlc3QgPSB7fTsKKyAg
ICAgICAgZm9yICh2YXIgdGVzdElkIGluIG1hbmlmZXN0LnRlc3RzKSB7CisgICAgICAgICAgICB2
YXIgdGVzdCA9IG1hbmlmZXN0LnRlc3RzW3Rlc3RJZF07CisgICAgICAgICAgICB0ZXN0LnBhcmVu
dFRlc3QgPSBtYW5pZmVzdC50ZXN0c1ttYW5pZmVzdC50ZXN0c1t0ZXN0SWRdLnBhcmVudElkXTsK
KyAgICAgICAgICAgIHRlc3QuaWQgPSB0ZXN0SWQ7CisgICAgICAgICAgICB0ZXN0Lm1ldHJpY3Mg
PSBbXTsKKyAgICAgICAgICAgIHRlc3RzLnB1c2godGVzdCk7CisgICAgICAgIH0KKyAgICAgICAg
dGVzdHMuZm9yRWFjaChmdW5jdGlvbiAodGVzdCkgeworICAgICAgICAgICAgdGVzdC5mdWxsTmFt
ZSA9IGZ1bGxOYW1lKHRlc3QpOworICAgICAgICAgICAgbmFtZVRvVGVzdFt0ZXN0LmZ1bGxOYW1l
XSA9IHRlc3Q7CisgICAgICAgIH0pOworICAgICAgICB0ZXN0cy5zb3J0KGZ1bmN0aW9uIChhLCBi
KSB7CisgICAgICAgICAgICBpZiAoYS5mdWxsTmFtZSA8IGIuZnVsbE5hbWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGEuZnVsbE5hbWUgPiBiLmZ1bGxOYW1l
KQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0pOworCisgICAgICAgIGZ1bGxOYW1lVG9NZXRyaWMgPSB7fTsKKyAgICAgICAgZm9yICh2
YXIgbWV0cmljSWQgaW4gbWFuaWZlc3QubWV0cmljcykgeworICAgICAgICAgICAgdmFyIGVudHJ5
ID0gbWFuaWZlc3QubWV0cmljc1ttZXRyaWNJZF07CisgICAgICAgICAgICBlbnRyeS5pZCA9IG1l
dHJpY0lkOworICAgICAgICAgICAgZW50cnkudGVzdCA9IG1hbmlmZXN0LnRlc3RzW2VudHJ5LnRl
c3RdOworICAgICAgICAgICAgZW50cnkuZnVsbE5hbWUgPSBlbnRyeS50ZXN0LmZ1bGxOYW1lICsg
JzonICsgZW50cnkubmFtZTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5hZ2dyZWdhdG9yKQorICAg
ICAgICAgICAgICAgIGVudHJ5LmZ1bGxOYW1lICs9ICc6JyArIGVudHJ5LmFnZ3JlZ2F0b3I7Cisg
ICAgICAgICAgICBlbnRyeS50ZXN0Lm1ldHJpY3MucHVzaChlbnRyeSk7CisgICAgICAgICAgICBm
dWxsTmFtZVRvTWV0cmljW2VudHJ5LmZ1bGxOYW1lXSA9IGVudHJ5OworICAgICAgICB9CisKKyAg
ICAgICAgdGVzdHMuZm9yRWFjaChmdW5jdGlvbiAodGVzdCkgeworICAgICAgICAgICAgdGVzdC5t
ZXRyaWNzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYS5uYW1l
IDwgYi5uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAg
ICAgaWYgKGEubmFtZSA+IGIubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgYWxsUGxhdGZvcm1zID0gW107CisgICAgICAgIG5hbWVUb1BsYXRmb3JtID0ge307
CisgICAgICAgIGZvciAodmFyIHBsYXRmb3JtSWQgaW4gbWFuaWZlc3QuYWxsKSB7CisgICAgICAg
ICAgICB2YXIgcGxhdGZvcm0gPSBtYW5pZmVzdC5hbGxbcGxhdGZvcm1JZF07CisgICAgICAgICAg
ICBwbGF0Zm9ybS5pZCA9IHBsYXRmb3JtSWQ7CisgICAgICAgICAgICBhbGxQbGF0Zm9ybXMucHVz
aChwbGF0Zm9ybSk7CisgICAgICAgICAgICBuYW1lVG9QbGF0Zm9ybVtwbGF0Zm9ybS5uYW1lXSA9
IHBsYXRmb3JtOworICAgICAgICAgICAgLy8gRklYTUU6IFNvcnQgdGVzdHMKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGxhdGZvcm0ubWV0cmljcy5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgICAgICBwbGF0Zm9ybS5tZXRyaWNzW2ldID0gbWFuaWZlc3QubWV0cmljc1twbGF0Zm9y
bS5tZXRyaWNzW2ldXTsKKyAgICAgICAgfQorICAgICAgICBhbGxQbGF0Zm9ybXMuc29ydChmdW5j
dGlvbiAoYSwgYikgeyByZXR1cm4gYS5uYW1lIDwgYi5uYW1lID8gLTEgOiAoYS5uYW1lID4gYi5u
YW1lID8gMSA6IDApOyB9KTsKKworICAgICAgICBkYXNoYm9hcmRQbGF0Zm9ybXMgPSBbXTsKKyAg
ICAgICAgZm9yICh2YXIgcGxhdGZvcm1JZCBpbiBtYW5pZmVzdC5kYXNoYm9hcmQpIHsKKyAgICAg
ICAgICAgIHZhciBwbGF0Zm9ybSA9IG1hbmlmZXN0LmRhc2hib2FyZFtwbGF0Zm9ybUlkXTsKKyAg
ICAgICAgICAgIHBsYXRmb3JtLmlkID0gcGxhdGZvcm1JZDsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcGxhdGZvcm0ubWV0cmljcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICBwbGF0Zm9ybS5tZXRyaWNzW2ldID0gbWFuaWZlc3QubWV0cmljc1twbGF0Zm9ybS5tZXRyaWNz
W2ldXTsKKyAgICAgICAgICAgIHBsYXRmb3JtLm1ldHJpY3Muc29ydChmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYS5mdWxsTmFtZSA8IGIuZnVsbE5hbWUgPyAtMSA6IChhLmZ1bGxOYW1lID4gYi5m
dWxsTmFtZSA/IDEgOiAwKTsgfSk7CisgICAgICAgICAgICBkYXNoYm9hcmRQbGF0Zm9ybXMucHVz
aChtYW5pZmVzdC5kYXNoYm9hcmRbcGxhdGZvcm1JZF0pOworICAgICAgICB9CisgICAgICAgIGRh
c2hib2FyZFBsYXRmb3Jtcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLm5hbWUgPCBi
Lm5hbWUgPyAtMSA6IChhLm5hbWUgPiBiLm5hbWUgPyAxIDogMCk7IH0pOworCisgICAgICAgIHJl
cG9zaXRvcmllcyA9IG1hbmlmZXN0LnJlcG9zaXRvcmllczsKKyAgICAgICAgYnVpbGRlcnMgPSBt
YW5pZmVzdC5idWlsZGVyczsKKyAgICAgICAgYnVnVHJhY2tlcnMgPSBtYW5pZmVzdC5idWdUcmFj
a2VyczsKKworICAgICAgICBkb2N1bWVudC50aXRsZSA9IG1hbmlmZXN0LnNpdGVUaXRsZTsKKyAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpdGVUaXRsZScpLnRleHRDb250ZW50ID0g
bWFuaWZlc3Quc2l0ZVRpdGxlOworCisgICAgICAgIHNldE1vZGUoVVJMU3RhdGUuZ2V0KCdtb2Rl
JywgJ2Rhc2hib2FyZCcpKTsKKyAgICB9KTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0LCBmYWxzZSk7CisKKzwvc2NyaXB0PgogPC9oZWFkPgog
PGJvZHk+CisKKzxoZWFkZXIgaWQ9InRpdGxlIj4KKzxoMT48YSBpZD0ic2l0ZVRpdGxlIiBocmVm
PSIvIj5QZXJmIE1vbml0b3I8L2E+PC9oMT4KKzx1bD4KKyAgICA8bGkgaWQ9Im51bWJlck9mRGF5
c1BpY2tlciI+PGlucHV0IGlkPSJudW1iZXJPZkRheXMiIHR5cGU9InJhbmdlIiBtaW49IjEiIG1h
eD0iNS45IiBzdGVwPSIwLjAwMSIgdmFsdWU9IjIuMyI+PHNwYW4gY2xhc3M9Im91dHB1dCI+PC9z
cGFuPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9kZSgnZGFzaGJvYXJk
Jyk7Ij5EYXNoYm9hcmQ8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpzZXRN
b2RlKCdjaGFydHMnKTsiPkNoYXJ0czwvYT48L2xpPgorPC91bD4KKzwvaGVhZGVyPgorCis8ZGl2
IGlkPSJtYWluQ29udGVudHMiPjwvZGl2PgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9pbnRlcmFjdGl2ZS1jaGFydC5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvaW50ZXJhY3RpdmUtY2hhcnQuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2RiMzE3MjY4MmQ4YTRlZTA0ODkyOWRj
YTkxNDYyOTc4Njc1MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9pbnRlcmFjdGl2ZS1jaGFy
dC5qcworKysgL2Rldi9udWxsCkBAIC0xLDc3MiArMCwwIEBACi1BcHAuSW50ZXJhY3RpdmVDaGFy
dENvbXBvbmVudCA9IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgIGNoYXJ0RGF0YTogbnVs
bCwKLSAgICBzaG93WEF4aXM6IHRydWUsCi0gICAgc2hvd1lBeGlzOiB0cnVlLAotICAgIGludGVy
YWN0aXZlOiBmYWxzZSwKLSAgICBlbmFibGVTZWxlY3Rpb246IHRydWUsCi0gICAgY2xhc3NOYW1l
czogWydjaGFydCddLAotICAgIGluaXQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlz
Ll9zdXBlcigpOwotICAgICAgICB0aGlzLl9uZWVkc0NvbnN0cnVjdGlvbiA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMgPSBbXTsKLSAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZSh0
aGlzLl91cGRhdGVEaW1lbnNpb25zSWZOZWVkZWQuYmluZCh0aGlzKSk7Ci0gICAgfSwKLSAgICBj
aGFydERhdGFEaWRDaGFuZ2U6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgY2hhcnRE
YXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoIWNoYXJ0RGF0YSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fbmVlZHNDb25zdHJ1Y3Rpb24gPSB0cnVl
OwotICAgICAgICB0aGlzLl90b3RhbFdpZHRoID0gdW5kZWZpbmVkOwotICAgICAgICB0aGlzLl90
b3RhbEhlaWdodCA9IHVuZGVmaW5lZDsKLSAgICAgICAgdGhpcy5fY29uc3RydWN0R3JhcGhJZlBv
c3NpYmxlKGNoYXJ0RGF0YSk7Ci0gICAgfS5vYnNlcnZlcygnY2hhcnREYXRhJykub24oJ2luaXQn
KSwKLSAgICBkaWRJbnNlcnRFbGVtZW50OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFy
IGNoYXJ0RGF0YSA9IHRoaXMuZ2V0KCdjaGFydERhdGEnKTsKLSAgICAgICAgaWYgKGNoYXJ0RGF0
YSkKLSAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdEdyYXBoSWZQb3NzaWJsZShjaGFydERhdGEp
OwotCi0gICAgICAgIGlmICh0aGlzLmdldCgnaW50ZXJhY3RpdmUnKSkgewotICAgICAgICAgICAg
dmFyIGVsZW1lbnQgPSB0aGlzLmdldCgnZWxlbWVudCcpOwotICAgICAgICAgICAgdGhpcy5fYXR0
YWNoRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2VNb3ZlZC5i
aW5kKHRoaXMpKTsKLSAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50TGlzdGVuZXIoZWxlbWVu
dCwgIm1vdXNlbGVhdmUiLCB0aGlzLl9tb3VzZUxlZnQuYmluZCh0aGlzKSk7Ci0gICAgICAgICAg
ICB0aGlzLl9hdHRhY2hFdmVudExpc3RlbmVyKGVsZW1lbnQsICJtb3VzZWRvd24iLCB0aGlzLl9t
b3VzZURvd24uYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICB0aGlzLl9hdHRhY2hFdmVudExpc3Rl
bmVyKCQoZWxlbWVudCkucGFyZW50cygiW3RhYmluZGV4XSIpLCAia2V5ZG93biIsIHRoaXMuX2tl
eVByZXNzZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHdpbGxDbGVhclJl
bmRlcjogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMuZm9y
RWFjaChmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAgICAgJChpdGVtWzBdKS5vZmYoaXRlbVsx
XSwgaXRlbVsyXSk7Ci0gICAgICAgIH0pCi0gICAgfSwKLSAgICBfYXR0YWNoRXZlbnRMaXN0ZW5l
cjogZnVuY3Rpb24odGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyKQotICAgIHsKLSAgICAgICAg
dGhpcy5fZXZlbnRIYW5kbGVycy5wdXNoKFt0YXJnZXQsIGV2ZW50TmFtZSwgbGlzdGVuZXJdKTsK
LSAgICAgICAgJCh0YXJnZXQpLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpOwotICAgIH0sCi0gICAg
X2NvbnN0cnVjdEdyYXBoSWZQb3NzaWJsZTogZnVuY3Rpb24gKGNoYXJ0RGF0YSkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fbmVlZHNDb25zdHJ1Y3Rpb24gfHwgIXRoaXMuZ2V0KCdlbGVtZW50
JykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdl
dCgnZWxlbWVudCcpOwotCi0gICAgICAgIHRoaXMuX3ggPSBkMy50aW1lLnNjYWxlKCk7Ci0gICAg
ICAgIHRoaXMuX3kgPSBkMy5zY2FsZS5saW5lYXIoKTsKLQotICAgICAgICBpZiAodGhpcy5fc3Zn
RWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX3N2Z0VsZW1lbnQucmVtb3ZlKCk7Ci0gICAgICAg
IHRoaXMuX3N2Z0VsZW1lbnQgPSBkMy5zZWxlY3QoZWxlbWVudCkuYXBwZW5kKCJzdmciKQotICAg
ICAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsICIxMDAlIikKLSAgICAgICAgICAgICAgICAuYXR0
cigiaGVpZ2h0IiwgIjEwMCUiKTsKLQotICAgICAgICB2YXIgc3ZnID0gdGhpcy5fc3ZnID0gdGhp
cy5fc3ZnRWxlbWVudC5hcHBlbmQoImciKTsKLQotICAgICAgICB2YXIgY2xpcElkID0gZWxlbWVu
dC5pZCArICItY2xpcCI7Ci0gICAgICAgIHRoaXMuX2NsaXBQYXRoID0gc3ZnLmFwcGVuZCgiZGVm
cyIpLmFwcGVuZCgiY2xpcFBhdGgiKQotICAgICAgICAgICAgLmF0dHIoImlkIiwgY2xpcElkKQot
ICAgICAgICAgICAgLmFwcGVuZCgicmVjdCIpOwotCi0gICAgICAgIGlmICh0aGlzLmdldCgnc2hv
d1hBeGlzJykpIHsKLSAgICAgICAgICAgIHRoaXMuX3hBeGlzID0gZDMuc3ZnLmF4aXMoKS5zY2Fs
ZSh0aGlzLl94KS5vcmllbnQoImJvdHRvbSIpLnRpY2tzKDYpOwotICAgICAgICAgICAgdGhpcy5f
eEF4aXNMYWJlbHMgPSBzdmcuYXBwZW5kKCJnIikKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xh
c3MiLCAieCBheGlzIik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaXNJbnRlcmFjdGl2ZSA9
IHRoaXMuZ2V0KCdpbnRlcmFjdGl2ZScpOwotICAgICAgICBpZiAodGhpcy5nZXQoJ3Nob3dZQXhp
cycpKSB7Ci0gICAgICAgICAgICB0aGlzLl95QXhpcyA9IGQzLnN2Zy5heGlzKCkuc2NhbGUodGhp
cy5feSkub3JpZW50KCJsZWZ0IikudGlja3MoNikudGlja0Zvcm1hdChjaGFydERhdGEuZm9ybWF0
dGVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdGhpcy5feUF4aXNMYWJlbHMgPSBzdmcu
YXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAneSBheGlzJyArIChpc0ludGVyYWN0aXZlID8gJyBp
bnRlcmFjdGl2ZScgOiAnJykpOwotICAgICAgICAgICAgaWYgKGlzSW50ZXJhY3RpdmUpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5feUF4
aXNMYWJlbHMub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgeyBzZWxmLnRvZ2dsZVByb3BlcnR5KCdz
aG93RnVsbFlBeGlzJyk7IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5fY2xpcHBlZENvbnRhaW5lciA9IHN2Zy5hcHBlbmQoImciKQotICAgICAgICAgICAgLmF0
dHIoImNsaXAtcGF0aCIsICJ1cmwoIyIgKyBjbGlwSWQgKyAiKSIpOwotCi0gICAgICAgIHZhciB4
U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKLSAgICAgICAg
dGhpcy5fdGltZUxpbmUgPSBkMy5zdmcubGluZSgpCi0gICAgICAgICAgICAueChmdW5jdGlvbihw
b2ludCkgeyByZXR1cm4geFNjYWxlKHBvaW50LnRpbWUpOyB9KQotICAgICAgICAgICAgLnkoZnVu
Y3Rpb24ocG9pbnQpIHsgcmV0dXJuIHlTY2FsZShwb2ludC52YWx1ZSk7IH0pOwotCi0gICAgICAg
IHRoaXMuX2NvbmZpZGVuY2VBcmVhID0gZDMuc3ZnLmFyZWEoKQotLy8gICAgICAgICAgICAuaW50
ZXJwb2xhdGUoImNhcmRpbmFsIikKLSAgICAgICAgICAgIC54KGZ1bmN0aW9uKHBvaW50KSB7IHJl
dHVybiB4U2NhbGUocG9pbnQudGltZSk7IH0pCi0gICAgICAgICAgICAueTAoZnVuY3Rpb24ocG9p
bnQpIHsgcmV0dXJuIHBvaW50LmludGVydmFsID8geVNjYWxlKHBvaW50LmludGVydmFsWzBdKSA6
IG51bGw7IH0pCi0gICAgICAgICAgICAueTEoZnVuY3Rpb24ocG9pbnQpIHsgcmV0dXJuIHBvaW50
LmludGVydmFsID8geVNjYWxlKHBvaW50LmludGVydmFsWzFdKSA6IG51bGw7IH0pOwotCi0gICAg
ICAgIHRoaXMuX3BhdGhzID0gW107Ci0gICAgICAgIHRoaXMuX2FyZWFzID0gW107Ci0gICAgICAg
IHRoaXMuX2RvdHMgPSBbXTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0cyA9IG51bGw7Ci0KLSAg
ICAgICAgdGhpcy5fY3VycmVudFRpbWVTZXJpZXMgPSBjaGFydERhdGEuY3VycmVudDsKLSAgICAg
ICAgdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXMu
c2VyaWVzKCk7Ci0gICAgICAgIHRoaXMuX2Jhc2VsaW5lVGltZVNlcmllcyA9IGNoYXJ0RGF0YS5i
YXNlbGluZTsKLSAgICAgICAgdGhpcy5fdGFyZ2V0VGltZVNlcmllcyA9IGNoYXJ0RGF0YS50YXJn
ZXQ7Ci0gICAgICAgIHRoaXMuX21vdmluZ0F2ZXJhZ2VUaW1lU2VyaWVzID0gY2hhcnREYXRhLm1v
dmluZ0F2ZXJhZ2U7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2Jhc2VsaW5lVGltZVNlcmllcykgewot
ICAgICAgICAgICAgdGhpcy5fcGF0aHMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAg
ICAgICAgICAgICAgLmFwcGVuZCgicGF0aCIpCi0gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMu
X2Jhc2VsaW5lVGltZVNlcmllcy5zZXJpZXMoKSkKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xh
c3MiLCAiYmFzZWxpbmUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX3RhcmdldFRp
bWVTZXJpZXMpIHsKLSAgICAgICAgICAgIHRoaXMuX3BhdGhzLnB1c2godGhpcy5fY2xpcHBlZENv
bnRhaW5lcgotICAgICAgICAgICAgICAgIC5hcHBlbmQoInBhdGgiKQotICAgICAgICAgICAgICAg
IC5kYXR1bSh0aGlzLl90YXJnZXRUaW1lU2VyaWVzLnNlcmllcygpKQotICAgICAgICAgICAgICAg
IC5hdHRyKCJjbGFzcyIsICJ0YXJnZXQiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbW92
aW5nQXZlcmFnZUlzVmlzaWJsZSA9IHRoaXMuX21vdmluZ0F2ZXJhZ2VUaW1lU2VyaWVzOwotICAg
ICAgICB2YXIgZm9yZWdyb3VuZENsYXNzID0gbW92aW5nQXZlcmFnZUlzVmlzaWJsZSA/ICcnIDog
JyBmb3JlZ3JvdW5kJzsKLSAgICAgICAgdGhpcy5fYXJlYXMucHVzaCh0aGlzLl9jbGlwcGVkQ29u
dGFpbmVyCi0gICAgICAgICAgICAuYXBwZW5kKCJwYXRoIikKLSAgICAgICAgICAgIC5kYXR1bSh0
aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEpCi0gICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAi
YXJlYSIgKyBmb3JlZ3JvdW5kQ2xhc3MpKTsKLQotICAgICAgICB0aGlzLl9wYXRocy5wdXNoKHRo
aXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAgICAgIC5hcHBlbmQoInBhdGgiKQotICAgICAg
ICAgICAgLmRhdHVtKHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzRGF0YSkKLSAgICAgICAgICAgIC5h
dHRyKCJjbGFzcyIsICJjdXJyZW50IiArIGZvcmVncm91bmRDbGFzcykpOwotCi0gICAgICAgIHRo
aXMuX2RvdHMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAgICAgICAuc2VsZWN0
QWxsKCIuZG90IikKLSAgICAgICAgICAgICAgICAuZGF0YSh0aGlzLl9jdXJyZW50VGltZVNlcmll
c0RhdGEpCi0gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpCi0gICAgICAgICAg
ICAgICAgLmF0dHIoImNsYXNzIiwgImRvdCIgKyBmb3JlZ3JvdW5kQ2xhc3MpKTsKLQotICAgICAg
ICBpZiAobW92aW5nQXZlcmFnZUlzVmlzaWJsZSkgewotICAgICAgICAgICAgdGhpcy5fcGF0aHMu
cHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgicGF0
aCIpCi0gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMuX21vdmluZ0F2ZXJhZ2VUaW1lU2VyaWVz
LnNlcmllcygpKQotICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJtb3ZpbmdBdmVyYWdl
IikpOwotCi0gICAgICAgICAgICB0aGlzLl9hcmVhcy5wdXNoKHRoaXMuX2NsaXBwZWRDb250YWlu
ZXIKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCJwYXRoIikKLSAgICAgICAgICAgICAgICAuZGF0
dW0odGhpcy5fbW92aW5nQXZlcmFnZVRpbWVTZXJpZXMuc2VyaWVzKCkpCi0gICAgICAgICAgICAg
ICAgLmF0dHIoImNsYXNzIiwgImVudmVsb3BlIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGlzSW50ZXJhY3RpdmUpIHsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtTGluZSA9IHRo
aXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCJsaW5lIikKLSAg
ICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAiY3VycmVudC1pdGVtIik7Ci0KLSAgICAgICAg
ICAgIHRoaXMuX2N1cnJlbnRJdGVtQ2lyY2xlID0gdGhpcy5fY2xpcHBlZENvbnRhaW5lcgotICAg
ICAgICAgICAgICAgIC5hcHBlbmQoImNpcmNsZSIpCi0gICAgICAgICAgICAgICAgLmF0dHIoImNs
YXNzIiwgImRvdCBjdXJyZW50LWl0ZW0iKQotICAgICAgICAgICAgICAgIC5hdHRyKCJyIiwgMyk7
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9icnVzaCA9IG51bGw7Ci0gICAgICAgIGlmICh0
aGlzLmdldCgnZW5hYmxlU2VsZWN0aW9uJykpIHsKLSAgICAgICAgICAgIHRoaXMuX2JydXNoID0g
ZDMuc3ZnLmJydXNoKCkKLSAgICAgICAgICAgICAgICAueCh0aGlzLl94KQotICAgICAgICAgICAg
ICAgIC5vbigiYnJ1c2giLCB0aGlzLl9icnVzaENoYW5nZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAg
ICAgICAgIHRoaXMuX2JydXNoUmVjdCA9IHRoaXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAg
ICAgICAgICAuYXBwZW5kKCJnIikKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAieCBi
cnVzaCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlRG9tYWluKCk7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZURpbWVuc2lvbnNJZk5lZWRlZCgpOwotCi0gICAgICAgIC8vIFdvcmsg
YXJvdW5kIHRoZSBmYWN0IHRoZSBicnVzaCBpc24ndCBzZXQgaWYgd2UgdXBkYXRlZCBpdCBzeW5j
aHJvbm91c2x5IGhlcmUuCi0gICAgICAgIHNldFRpbWVvdXQodGhpcy5fc2VsZWN0aW9uQ2hhbmdl
ZC5iaW5kKHRoaXMpLCAwKTsKLQotICAgICAgICBzZXRUaW1lb3V0KHRoaXMuX3NlbGVjdGVkSXRl
bUNoYW5nZWQuYmluZCh0aGlzKSwgMCk7Ci0KLSAgICAgICAgdGhpcy5fbmVlZHNDb25zdHJ1Y3Rp
b24gPSBmYWxzZTsKLQotICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zQ2hhbmdlZCgpOwot
ICAgICAgICB0aGlzLl9yYW5nZXNDaGFuZ2VkKCk7Ci0gICAgfSwKLSAgICBfdXBkYXRlRG9tYWlu
OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHhEb21haW4gPSB0aGlzLmdldCgnZG9t
YWluJyk7Ci0gICAgICAgIGlmICgheERvbWFpbiB8fCAhdGhpcy5fY3VycmVudFRpbWVTZXJpZXNE
YXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBpbnRyaW5zaWNYRG9t
YWluID0gdGhpcy5fY29tcHV0ZVhBeGlzRG9tYWluKHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzRGF0
YSk7Ci0gICAgICAgIGlmICgheERvbWFpbikKLSAgICAgICAgICAgIHhEb21haW4gPSBpbnRyaW5z
aWNYRG9tYWluOwotICAgICAgICB2YXIgeURvbWFpbiA9IHRoaXMuX2NvbXB1dGVZQXhpc0RvbWFp
bih4RG9tYWluWzBdLCB4RG9tYWluWzFdKTsKLQotICAgICAgICB2YXIgY3VycmVudFhEb21haW4g
PSB0aGlzLl94LmRvbWFpbigpOwotICAgICAgICB2YXIgY3VycmVudFlEb21haW4gPSB0aGlzLl95
LmRvbWFpbigpOwotICAgICAgICBpZiAoY3VycmVudFhEb21haW4gJiYgQXBwLmRvbWFpbnNBcmVF
cXVhbChjdXJyZW50WERvbWFpbiwgeERvbWFpbikKLSAgICAgICAgICAgICYmIGN1cnJlbnRZRG9t
YWluICYmIEFwcC5kb21haW5zQXJlRXF1YWwoY3VycmVudFlEb21haW4sIHlEb21haW4pKQotICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRYRG9tYWluOwotCi0gICAgICAgIHRoaXMuX3guZG9tYWlu
KHhEb21haW4pOwotICAgICAgICB0aGlzLl95LmRvbWFpbih5RG9tYWluKTsKLSAgICAgICAgcmV0
dXJuIHhEb21haW47Ci0gICAgfSwKLSAgICBfdXBkYXRlRGltZW5zaW9uc0lmTmVlZGVkOiBmdW5j
dGlvbiAobmV3U2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMu
Z2V0KCdlbGVtZW50JykpOwotCi0gICAgICAgIHZhciBuZXdUb3RhbFdpZHRoID0gZWxlbWVudC53
aWR0aCgpOwotICAgICAgICB2YXIgbmV3VG90YWxIZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpOwot
ICAgICAgICBpZiAodGhpcy5fdG90YWxXaWR0aCA9PSBuZXdUb3RhbFdpZHRoICYmIHRoaXMuX3Rv
dGFsSGVpZ2h0ID09IG5ld1RvdGFsSGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX3RvdGFsV2lkdGggPSBuZXdUb3RhbFdpZHRoOwotICAgICAgICB0aGlzLl90b3Rh
bEhlaWdodCA9IG5ld1RvdGFsSGVpZ2h0OwotCi0gICAgICAgIGlmICghdGhpcy5fcmVtKQotICAg
ICAgICAgICAgdGhpcy5fcmVtID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCkuZm9udFNpemUpOwotICAgICAgICB2YXIgcmVtID0gdGhpcy5fcmVt
OwotCi0gICAgICAgIHZhciBwYWRkaW5nID0gMC41ICogcmVtOwotICAgICAgICB2YXIgbWFyZ2lu
ID0ge3RvcDogcGFkZGluZywgcmlnaHQ6IHBhZGRpbmcsIGJvdHRvbTogcGFkZGluZywgbGVmdDog
cGFkZGluZ307Ci0gICAgICAgIGlmICh0aGlzLl94QXhpcykKLSAgICAgICAgICAgIG1hcmdpbi5i
b3R0b20gKz0gcmVtOwotICAgICAgICBpZiAodGhpcy5feUF4aXMpCi0gICAgICAgICAgICBtYXJn
aW4ubGVmdCArPSAzICogcmVtOwotCi0gICAgICAgIHRoaXMuX21hcmdpbiA9IG1hcmdpbjsKLSAg
ICAgICAgdGhpcy5fY29udGVudFdpZHRoID0gTWF0aC5tYXgoMCwgdGhpcy5fdG90YWxXaWR0aCAt
IG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0KTsKLSAgICAgICAgdGhpcy5fY29udGVudEhlaWdo
dCA9IE1hdGgubWF4KDAsIHRoaXMuX3RvdGFsSGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5i
b3R0b20pOwotCi0gICAgICAgIHRoaXMuX3N2Zy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRl
KCIgKyBtYXJnaW4ubGVmdCArICIsIiArIG1hcmdpbi50b3AgKyAiKSIpOwotCi0gICAgICAgIHRo
aXMuX2NsaXBQYXRoCi0gICAgICAgICAgICAuYXR0cigid2lkdGgiLCB0aGlzLl9jb250ZW50V2lk
dGgpCi0gICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgdGhpcy5fY29udGVudEhlaWdodCk7Ci0K
LSAgICAgICAgdGhpcy5feC5yYW5nZShbMCwgdGhpcy5fY29udGVudFdpZHRoXSk7Ci0gICAgICAg
IHRoaXMuX3kucmFuZ2UoW3RoaXMuX2NvbnRlbnRIZWlnaHQsIDBdKTsKLQotICAgICAgICBpZiAo
dGhpcy5feEF4aXMpIHsKLSAgICAgICAgICAgIHRoaXMuX3hBeGlzLnRpY2tzKE1hdGgucm91bmQo
dGhpcy5fY29udGVudFdpZHRoIC8gNCAvIHJlbSkpOwotICAgICAgICAgICAgdGhpcy5feEF4aXMu
dGlja1NpemUoLXRoaXMuX2NvbnRlbnRIZWlnaHQpOwotICAgICAgICAgICAgdGhpcy5feEF4aXNM
YWJlbHMuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCIgKyB0aGlzLl9jb250ZW50SGVp
Z2h0ICsgIikiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl95QXhpcykgewotICAg
ICAgICAgICAgdGhpcy5feUF4aXMudGlja3MoTWF0aC5yb3VuZCh0aGlzLl9jb250ZW50SGVpZ2h0
IC8gMiAvIHJlbSkpOwotICAgICAgICAgICAgdGhpcy5feUF4aXMudGlja1NpemUoLXRoaXMuX2Nv
bnRlbnRXaWR0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fY3VycmVudEl0ZW1M
aW5lKSB7Ci0gICAgICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUxpbmUKLSAgICAgICAgICAgICAg
ICAuYXR0cigieTEiLCAwKQotICAgICAgICAgICAgICAgIC5hdHRyKCJ5MiIsIG1hcmdpbi50b3Ag
KyB0aGlzLl9jb250ZW50SGVpZ2h0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3JlbGF5
b3V0RGF0YUFuZEF4ZXModGhpcy5fY3VycmVudFNlbGVjdGlvbigpKTsKLSAgICB9LAotICAgIF91
cGRhdGVCcnVzaDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2JydXNoUmVjdAot
ICAgICAgICAgICAgLmNhbGwodGhpcy5fYnJ1c2gpCi0gICAgICAgIC5zZWxlY3RBbGwoInJlY3Qi
KQotICAgICAgICAgICAgLmF0dHIoInkiLCAxKQotICAgICAgICAgICAgLmF0dHIoImhlaWdodCIs
IE1hdGgubWF4KDAsIHRoaXMuX2NvbnRlbnRIZWlnaHQgLSAyKSk7Ci0gICAgICAgIHRoaXMuX3Vw
ZGF0ZVNlbGVjdGlvblRvb2xiYXIoKTsKLSAgICB9LAotICAgIF9yZWxheW91dERhdGFBbmRBeGVz
OiBmdW5jdGlvbiAoc2VsZWN0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIHRpbWVsaW5lID0gdGhp
cy5fdGltZUxpbmU7Ci0gICAgICAgIHRoaXMuX3BhdGhzLmZvckVhY2goZnVuY3Rpb24gKHBhdGgp
IHsgcGF0aC5hdHRyKCJkIiwgdGltZWxpbmUpOyB9KTsKLQotICAgICAgICB2YXIgY29uZmlkZW5j
ZUFyZWEgPSB0aGlzLl9jb25maWRlbmNlQXJlYTsKLSAgICAgICAgdGhpcy5fYXJlYXMuZm9yRWFj
aChmdW5jdGlvbiAocGF0aCkgeyBwYXRoLmF0dHIoImQiLCBjb25maWRlbmNlQXJlYSk7IH0pOwot
Ci0gICAgICAgIHZhciB4U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhp
cy5feTsKLSAgICAgICAgdGhpcy5fZG90cy5mb3JFYWNoKGZ1bmN0aW9uIChkb3QpIHsKLSAgICAg
ICAgICAgIGRvdAotICAgICAgICAgICAgICAgIC5hdHRyKCJjeCIsIGZ1bmN0aW9uKG1lYXN1cmVt
ZW50KSB7IHJldHVybiB4U2NhbGUobWVhc3VyZW1lbnQudGltZSk7IH0pCi0gICAgICAgICAgICAg
ICAgLmF0dHIoImN5IiwgZnVuY3Rpb24obWVhc3VyZW1lbnQpIHsgcmV0dXJuIHlTY2FsZShtZWFz
dXJlbWVudC52YWx1ZSk7IH0pOwotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5fdXBkYXRlSGln
aGxpZ2h0UG9zaXRpb25zKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVJhbmdlQmFyUmVjdHMoKTsK
LQotICAgICAgICBpZiAodGhpcy5fYnJ1c2gpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb24p
Ci0gICAgICAgICAgICAgICAgdGhpcy5fYnJ1c2guZXh0ZW50KHNlbGVjdGlvbik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJ1c2guY2xlYXIoKTsKLSAgICAgICAg
ICAgIHRoaXMuX3VwZGF0ZUJydXNoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl91cGRh
dGVDdXJyZW50SXRlbUluZGljYXRvcnMoKTsKLQotICAgICAgICBpZiAodGhpcy5feEF4aXMpCi0g
ICAgICAgICAgICB0aGlzLl94QXhpc0xhYmVscy5jYWxsKHRoaXMuX3hBeGlzKTsKLSAgICAgICAg
aWYgKCF0aGlzLl95QXhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl95
QXhpc0xhYmVscy5jYWxsKHRoaXMuX3lBeGlzKTsKLSAgICAgICAgdmFyIHggPSAtIDMuMiAqIHRo
aXMuX3JlbTsKLSAgICAgICAgdmFyIHkgPSB0aGlzLl9jb250ZW50SGVpZ2h0IC8gMjsKLSAgICB9
LAotICAgIF91cGRhdGVIaWdobGlnaHRQb3NpdGlvbnM6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9oaWdobGlnaHRzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciB4U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKLSAgICAg
ICAgdGhpcy5faGlnaGxpZ2h0cwotICAgICAgICAgICAgLmF0dHIoImN5IiwgZnVuY3Rpb24ocG9p
bnQpIHsgcmV0dXJuIHlTY2FsZShwb2ludC52YWx1ZSk7IH0pCi0gICAgICAgICAgICAuYXR0cigi
Y3giLCBmdW5jdGlvbihwb2ludCkgeyByZXR1cm4geFNjYWxlKHBvaW50LnRpbWUpOyB9KTsKLSAg
ICB9LAotICAgIF9jb21wdXRlWEF4aXNEb21haW46IGZ1bmN0aW9uICh0aW1lU2VyaWVzKQotICAg
IHsKLSAgICAgICAgdmFyIGV4dGVudCA9IGQzLmV4dGVudCh0aW1lU2VyaWVzLCBmdW5jdGlvbihw
b2ludCkgeyByZXR1cm4gcG9pbnQudGltZTsgfSk7Ci0gICAgICAgIHZhciBtYXJnaW4gPSAzNjAw
ICogMTAwMDsgLy8gVXNlIHguaW52ZXJzZSB0byBjb21wdXRlIHRoZSByaWdodCBhbW91bnQgZnJv
bSBhIG1hcmdpbi4KLSAgICAgICAgcmV0dXJuIFsrZXh0ZW50WzBdIC0gbWFyZ2luLCArZXh0ZW50
WzFdICsgbWFyZ2luXTsKLSAgICB9LAotICAgIF9jb21wdXRlWUF4aXNEb21haW46IGZ1bmN0aW9u
IChzdGFydFRpbWUsIGVuZFRpbWUpCi0gICAgewotICAgICAgICB2YXIgc2hvdWxkU2hvd0Z1bGxZ
QXhpcyA9IHRoaXMuZ2V0KCdzaG93RnVsbFlBeGlzJyk7Ci0gICAgICAgIHZhciByYW5nZSA9IHRo
aXMuX21pbk1heEZvckFsbFRpbWVTZXJpZXMoc3RhcnRUaW1lLCBlbmRUaW1lLCAhc2hvdWxkU2hv
d0Z1bGxZQXhpcyk7Ci0gICAgICAgIHZhciBtaW4gPSByYW5nZVswXTsKLSAgICAgICAgdmFyIG1h
eCA9IHJhbmdlWzFdOwotCi0gICAgICAgIHZhciBoaWdobGlnaHRlZEl0ZW1zID0gdGhpcy5nZXQo
J2hpZ2hsaWdodGVkSXRlbXMnKTsKLSAgICAgICAgaWYgKGhpZ2hsaWdodGVkSXRlbXMpIHsKLSAg
ICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhCi0gICAgICAg
ICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHN0YXJ0VGltZSA8PSBw
b2ludC50aW1lICYmIHBvaW50LnRpbWUgPD0gZW5kVGltZSAmJiBoaWdobGlnaHRlZEl0ZW1zW3Bv
aW50Lm1lYXN1cmVtZW50LmlkKCldOyB9KQotICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24g
KHBvaW50KSB7IHJldHVybiBwb2ludC52YWx1ZSB9KTsKLSAgICAgICAgICAgIG1pbiA9IE1hdGgu
bWluKG1pbiwgU3RhdGlzdGljcy5taW4oZGF0YSkpOwotICAgICAgICAgICAgbWF4ID0gTWF0aC5t
YXgobWF4LCBTdGF0aXN0aWNzLm1heChkYXRhKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bWF4IDwgbWluKQotICAgICAgICAgICAgbWluID0gbWF4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAo
c2hvdWxkU2hvd0Z1bGxZQXhpcykKLSAgICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgMCk7
Ci0gICAgICAgIHZhciBkaWZmID0gbWF4IC0gbWluOwotICAgICAgICB2YXIgbWFyZ2luID0gZGlm
ZiAqIDAuMDU7Ci0KLSAgICAgICAgeUV4dGVudCA9IFttaW4gLSBtYXJnaW4sIG1heCArIG1hcmdp
bl07Ci0gICAgICAgIHJldHVybiB5RXh0ZW50OwotICAgIH0sCi0gICAgX21pbk1heEZvckFsbFRp
bWVTZXJpZXM6IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlnbm9yZU91dGxpbmVycykK
LSAgICB7Ci0gICAgICAgIHZhciBzZXJpZXNMaXN0ID0gW3RoaXMuX2N1cnJlbnRUaW1lU2VyaWVz
LCB0aGlzLl9tb3ZpbmdBdmVyYWdlVGltZVNlcmllcywgdGhpcy5fYmFzZWxpbmVUaW1lU2VyaWVz
LCB0aGlzLl90YXJnZXRUaW1lU2VyaWVzXTsKLSAgICAgICAgdmFyIG1pbiA9IEluZmluaXR5Owot
ICAgICAgICB2YXIgbWF4ID0gLUluZmluaXR5OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNlcmllc0xpc3QubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzZXJpZXNMaXN0W2ld
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1pbk1heCA9IHNlcmllc0xpc3RbaV0ubWluTWF4Rm9y
VGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgaWdub3JlT3V0bGluZXJzKTsKLSAgICAgICAg
ICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIG1pbk1heFswXSk7Ci0gICAgICAgICAgICAgICAg
bWF4ID0gTWF0aC5tYXgobWF4LCBtaW5NYXhbMV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBbbWluLCBtYXhdOwotICAgIH0sCi0gICAgX2N1cnJlbnRTZWxlY3Rp
b246IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYnJ1c2ggJiYgIXRo
aXMuX2JydXNoLmVtcHR5KCkgPyB0aGlzLl9icnVzaC5leHRlbnQoKSA6IG51bGw7Ci0gICAgfSwK
LSAgICBfZG9tYWluQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxl
Y3Rpb24gPSB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkgfHwgdGhpcy5nZXQoJ3NoYXJlZFNlbGVj
dGlvbicpOwotICAgICAgICB2YXIgbmV3WERvbWFpbiA9IHRoaXMuX3VwZGF0ZURvbWFpbigpOwot
ICAgICAgICBpZiAoIW5ld1hEb21haW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKHNlbGVjdGlvbiAmJiBuZXdYRG9tYWluICYmIHNlbGVjdGlvblswXSA8PSBuZXdYRG9tYWlu
WzBdICYmIG5ld1hEb21haW5bMV0gPD0gc2VsZWN0aW9uWzFdKQotICAgICAgICAgICAgc2VsZWN0
aW9uID0gbnVsbDsgLy8gT3RoZXJ3aXNlIHRoZSB1c2VyIGhhcyBubyB3YXkgb2YgY2xlYXJpbmcg
dGhlIHNlbGVjdGlvbi4KLQotICAgICAgICB0aGlzLl9yZWxheW91dERhdGFBbmRBeGVzKHNlbGVj
dGlvbik7Ci0gICAgfS5vYnNlcnZlcygnZG9tYWluJywgJ3Nob3dGdWxsWUF4aXMnKSwKLSAgICBf
c2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0
ZVNlbGVjdGlvbih0aGlzLmdldCgnc2VsZWN0aW9uJykpOwotICAgIH0ub2JzZXJ2ZXMoJ3NlbGVj
dGlvbicpLAotICAgIF91cGRhdGVTZWxlY3Rpb246IGZ1bmN0aW9uIChuZXdTZWxlY3Rpb24pCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2JydXNoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5fY3VycmVudFNlbGVjdGlvbigpOwot
ICAgICAgICBpZiAobmV3U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24gJiYgQXBwLmRvbWFp
bnNBcmVFcXVhbChuZXdTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHZhciBkb21haW4gPSB0aGlzLl94LmRvbWFpbigpOwotICAgICAg
ICBpZiAoIW5ld1NlbGVjdGlvbiB8fCBBcHAuZG9tYWluc0FyZUVxdWFsKGRvbWFpbiwgbmV3U2Vs
ZWN0aW9uKSkKLSAgICAgICAgICAgIHRoaXMuX2JydXNoLmNsZWFyKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRoaXMuX2JydXNoLmV4dGVudChuZXdTZWxlY3Rpb24pOwotICAgICAgICB0
aGlzLl91cGRhdGVCcnVzaCgpOwotCi0gICAgICAgIHRoaXMuX3NldEN1cnJlbnRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKTsKLSAgICB9LAotICAgIF9icnVzaENoYW5nZWQ6IGZ1bmN0aW9uICgpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fYnJ1c2guZW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KCF0aGlzLl9icnVzaEV4dGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIHRoaXMuX3NldEN1cnJlbnRTZWxlY3Rpb24odW5kZWZpbmVkKTsKLQotICAgICAgICAgICAg
Ly8gQXZvaWQgbG9ja2luZyB0aGUgaW5kaWNhdG9yIGluIF9tb3VzZURvd24gd2hlbiB0aGUgYnJ1
c2ggd2FzIGNsZWFyZWQgaW4gdGhlIHNhbWUgbW91c2Vkb3duIGV2ZW50LgotICAgICAgICAgICAg
dGhpcy5fYnJ1c2hKdXN0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAg
ICBzZWxmLl9icnVzaEp1c3RDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB9LCAwKTsKLQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2V0Q3VycmVu
dFNlbGVjdGlvbih0aGlzLl9icnVzaC5leHRlbnQoKSk7Ci0gICAgfSwKLSAgICBfa2V5UHJlc3Nl
ZDogZnVuY3Rpb24gKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50SXRl
bUluZGV4IHx8IHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICB2YXIgbmV3SW5kZXg7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkg
ewotICAgICAgICBjYXNlIDM3OiAvLyBMZWZ0Ci0gICAgICAgICAgICBuZXdJbmRleCA9IHRoaXMu
X2N1cnJlbnRJdGVtSW5kZXggLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Mzk6IC8vIFJpZ2h0Ci0gICAgICAgICAgICBuZXdJbmRleCA9IHRoaXMuX2N1cnJlbnRJdGVtSW5k
ZXggKyAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzg6IC8vIFVwCi0gICAg
ICAgIGNhc2UgNDA6IC8vIERvd24KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVubGlrZSBtb3VzZW1vdmUsIGtleWRvd24gc2hv
dWxkbid0IG1vdmUgb2ZmIHRoZSBlZGdlLgotICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWVT
ZXJpZXNEYXRhW25ld0luZGV4XSkKLSAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRJdGVtKG5l
d0luZGV4KTsKLSAgICB9LAotICAgIF9tb3VzZU1vdmVkOiBmdW5jdGlvbiAoZXZlbnQpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX21hcmdpbiB8fCB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkg
fHwgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdmFyIHBvaW50ID0gdGhpcy5fbW91c2VQb2ludEluR3JhcGgoZXZlbnQpOwotCi0gICAgICAg
IHRoaXMuX3NlbGVjdENsb3Nlc3RQb2ludFRvTW91c2VBc0N1cnJlbnRJdGVtKHBvaW50KTsKLSAg
ICB9LAotICAgIF9tb3VzZUxlZnQ6IGZ1bmN0aW9uIChldmVudCkKLSAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5fbWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3NlbGVjdENsb3Nlc3RQb2ludFRvTW91c2VBc0N1cnJl
bnRJdGVtKG51bGwpOwotICAgIH0sCi0gICAgX21vdXNlRG93bjogZnVuY3Rpb24gKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4gfHwgdGhpcy5fY3VycmVudFNlbGVjdGlv
bigpIHx8IHRoaXMuX2JydXNoSnVzdENoYW5nZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdmFyIHBvaW50ID0gdGhpcy5fbW91c2VQb2ludEluR3JhcGgoZXZlbnQpOwotICAgICAg
ICBpZiAoIXBvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLl9j
dXJyZW50SXRlbUxvY2tlZCkgewotICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0ZW0nLCBudWxsKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2N1cnJlbnRJdGVt
TG9ja2VkID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fc2VsZWN0Q2xvc2VzdFBvaW50VG9Nb3VzZUFz
Q3VycmVudEl0ZW0ocG9pbnQpOwotICAgIH0sCi0gICAgX21vdXNlUG9pbnRJbkdyYXBoOiBmdW5j
dGlvbiAoZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgb2Zmc2V0ID0gJCh0aGlzLmdldCgnZWxl
bWVudCcpKS5vZmZzZXQoKTsKLSAgICAgICAgaWYgKCFvZmZzZXQgfHwgISQoZXZlbnQudGFyZ2V0
KS5jbG9zZXN0KCdzdmcnKS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICB2YXIgcG9pbnQgPSB7Ci0gICAgICAgICAgICB4OiBldmVudC5wYWdlWCAtIG9mZnNldC5s
ZWZ0IC0gdGhpcy5fbWFyZ2luLmxlZnQsCi0gICAgICAgICAgICB5OiBldmVudC5wYWdlWSAtIG9m
ZnNldC50b3AgLSB0aGlzLl9tYXJnaW4udG9wCi0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIHhT
Y2FsZSA9IHRoaXMuX3g7Ci0gICAgICAgIHZhciB5U2NhbGUgPSB0aGlzLl95OwotICAgICAgICB2
YXIgeERvbWFpbiA9IHhTY2FsZS5kb21haW4oKTsKLSAgICAgICAgdmFyIHlEb21haW4gPSB5U2Nh
bGUuZG9tYWluKCk7Ci0gICAgICAgIGlmIChwb2ludC54ID49IHhTY2FsZSh4RG9tYWluWzBdKSAm
JiBwb2ludC54IDw9IHhTY2FsZSh4RG9tYWluWzFdKQotICAgICAgICAgICAgJiYgcG9pbnQueSA8
PSB5U2NhbGUoeURvbWFpblswXSkgJiYgcG9pbnQueSA+PSB5U2NhbGUoeURvbWFpblsxXSkpCi0g
ICAgICAgICAgICByZXR1cm4gcG9pbnQ7Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwK
LSAgICBfc2VsZWN0Q2xvc2VzdFBvaW50VG9Nb3VzZUFzQ3VycmVudEl0ZW06IGZ1bmN0aW9uIChw
b2ludCkKLSAgICB7Ci0gICAgICAgIHZhciB4U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIg
eVNjYWxlID0gdGhpcy5feTsKLSAgICAgICAgdmFyIGRpc3RhbmNlSGV1cmlzdGljcyA9IGZ1bmN0
aW9uIChtKSB7Ci0gICAgICAgICAgICB2YXIgbVggPSB4U2NhbGUobS50aW1lKTsKLSAgICAgICAg
ICAgIHZhciBtWSA9IHlTY2FsZShtLnZhbHVlKTsKLSAgICAgICAgICAgIHZhciB4RGlmZiA9IG1Y
IC0gcG9pbnQueDsKLSAgICAgICAgICAgIHZhciB5RGlmZiA9IG1ZIC0gcG9pbnQueTsKLSAgICAg
ICAgICAgIHJldHVybiB4RGlmZiAqIHhEaWZmICsgeURpZmYgKiB5RGlmZiAvIDE2OyAvLyBGYXZv
ciBob3Jpem9udGFsIGFmZmluaXR5LgotICAgICAgICB9OwotCi0gICAgICAgIHZhciBuZXdJdGVt
SW5kZXg7Ci0gICAgICAgIGlmIChwb2ludCAmJiAhdGhpcy5fY3VycmVudFNlbGVjdGlvbigpKSB7
Ci0gICAgICAgICAgICB2YXIgZGlzdGFuY2VzID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRh
Lm1hcChkaXN0YW5jZUhldXJpc3RpY3MpOwotICAgICAgICAgICAgdmFyIG1pbkRpc3RhbmNlID0g
TnVtYmVyLk1BWF9WQUxVRTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdGFu
Y2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlc1tpXSA8IG1p
bkRpc3RhbmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0l0ZW1JbmRleCA9IGk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2VzW2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NldEN1cnJl
bnRJdGVtKG5ld0l0ZW1JbmRleCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvblRvb2xi
YXIoKTsKLSAgICB9LAotICAgIF9jdXJyZW50VGltZUNoYW5nZWQ6IGZ1bmN0aW9uICgpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX21hcmdpbiB8fCB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkg
fHwgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLmdldCgnY3VycmVudFRpbWUnKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRUaW1lKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2N1
cnJlbnRUaW1lU2VyaWVzRGF0YS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBw
b2ludCA9IHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzRGF0YVtpXTsKLSAgICAgICAgICAgICAgICBp
ZiAocG9pbnQudGltZSA+PSBjdXJyZW50VGltZSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9zZXRDdXJyZW50SXRlbShpLCAvKiBkb05vdE5vdGlmeSAqLyB0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9zZXRDdXJyZW50SXRlbSh1bmRlZmluZWQsIC8qIGRvTm90Tm90
aWZ5ICovIHRydWUpOwotICAgIH0ub2JzZXJ2ZXMoJ2N1cnJlbnRUaW1lJyksCi0gICAgX3NldEN1
cnJlbnRJdGVtOiBmdW5jdGlvbiAobmV3SXRlbUluZGV4LCBkb05vdE5vdGlmeSkKLSAgICB7Ci0g
ICAgICAgIGlmIChuZXdJdGVtSW5kZXggPT09IHRoaXMuX2N1cnJlbnRJdGVtSW5kZXgpIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCkKLSAgICAgICAgICAgICAgICB0
aGlzLnNldCgnc2VsZWN0ZWRJdGVtJywgdGhpcy5nZXQoJ2N1cnJlbnRJdGVtJykgPyB0aGlzLmdl
dCgnY3VycmVudEl0ZW0nKS5tZWFzdXJlbWVudC5pZCgpIDogbnVsbCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbmV3SXRlbSA9IHRoaXMuX2N1cnJlbnRU
aW1lU2VyaWVzRGF0YVtuZXdJdGVtSW5kZXhdOwotICAgICAgICB0aGlzLl9icnVzaEV4dGVudCA9
IHVuZGVmaW5lZDsKLSAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1JbmRleCA9IG5ld0l0ZW1JbmRl
eDsKLQotICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJ
dGVtTG9ja2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLnNldCgnc2VsZWN0ZWRJdGVtJywg
bnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50SXRlbUluZGlj
YXRvcnMoKTsKLQotICAgICAgICBpZiAoIWRvTm90Tm90aWZ5KQotICAgICAgICAgICAgdGhpcy5z
ZXQoJ2N1cnJlbnRUaW1lJywgbmV3SXRlbSA/IG5ld0l0ZW0udGltZSA6IHVuZGVmaW5lZCk7Ci0K
LSAgICAgICAgdGhpcy5zZXQoJ2N1cnJlbnRJdGVtJywgbmV3SXRlbSk7Ci0gICAgICAgIGlmICh0
aGlzLl9jdXJyZW50SXRlbUxvY2tlZCkKLSAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0
ZW0nLCBuZXdJdGVtID8gbmV3SXRlbS5tZWFzdXJlbWVudC5pZCgpIDogbnVsbCk7Ci0gICAgfSwK
LSAgICBfc2VsZWN0ZWRJdGVtQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5fbWFyZ2luKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZWxl
Y3RlZElkID0gdGhpcy5nZXQoJ3NlbGVjdGVkSXRlbScpOwotICAgICAgICB2YXIgY3VycmVudEl0
ZW0gPSB0aGlzLmdldCgnY3VycmVudEl0ZW0nKTsKLSAgICAgICAgaWYgKGN1cnJlbnRJdGVtICYm
IGN1cnJlbnRJdGVtLm1lYXN1cmVtZW50LmlkKCkgPT0gc2VsZWN0ZWRJZCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgc2VyaWVzID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNE
YXRhOwotICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtSW5kZXggPSB1bmRlZmluZWQ7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBp
ZiAoc2VyaWVzW2ldLm1lYXN1cmVtZW50LmlkKCkgPT0gc2VsZWN0ZWRJZCkgewotICAgICAgICAg
ICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9jdXJyZW50SXRlbUxvY2tlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q3Vy
cmVudEl0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uVG9vbGJh
cigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0ub2JzZXJ2ZXMoJ3NlbGVjdGVkSXRlbScpLm9uKCdpbml0JyksCi0gICAgX2hpZ2hsaWdo
dGVkSXRlbXNDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBoaWdobGlnaHRlZEl0
ZW1zID0gdGhpcy5nZXQoJ2hpZ2hsaWdodGVkSXRlbXMnKTsKLQotICAgICAgICBpZiAoIXRoaXMu
X2NsaXBwZWRDb250YWluZXIgfHwgIWhpZ2hsaWdodGVkSXRlbXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEuZmls
dGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBoaWdobGlnaHRlZEl0ZW1zW2l0ZW0ubWVhc3Vy
ZW1lbnQuaWQoKV07IH0pOwotCi0gICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRzKQotICAgICAg
ICAgICAgdGhpcy5faGlnaGxpZ2h0cy5yZW1vdmUoKTsKLSAgICAgICAgdGhpcy5faGlnaGxpZ2h0
cyA9IHRoaXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAgICAgIC5zZWxlY3RBbGwoIi5oaWdo
bGlnaHQiKQotICAgICAgICAgICAgICAgIC5kYXRhKGRhdGEpCi0gICAgICAgICAgICAuZW50ZXIo
KS5hcHBlbmQoImNpcmNsZSIpCi0gICAgICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImhpZ2hs
aWdodCIpOwotCi0gICAgICAgIHRoaXMuX2RvbWFpbkNoYW5nZWQoKTsKLSAgICB9Lm9ic2VydmVz
KCdoaWdobGlnaHRlZEl0ZW1zJyksCi0gICAgX3Jhbmdlc0NoYW5nZWQ6IGZ1bmN0aW9uICgpCi0g
ICAgewotICAgICAgICB2YXIgbGlua1JvdXRlID0gdGhpcy5nZXQoJ3JhbmdlUm91dGUnKTsKLSAg
ICAgICAgdGhpcy5zZXQoJ3JhbmdlQmFycycsICh0aGlzLmdldCgncmFuZ2VzJykgfHwgW10pLm1h
cChmdW5jdGlvbiAocmFuZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiBFbWJlci5PYmplY3QuY3Jl
YXRlKHsKLSAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHJhbmdlLmdldCgnc3RhcnRUaW1lJyks
Ci0gICAgICAgICAgICAgICAgZW5kVGltZTogcmFuZ2UuZ2V0KCdlbmRUaW1lJyksCi0gICAgICAg
ICAgICAgICAgcmFuZ2U6IHJhbmdlLAotICAgICAgICAgICAgICAgIGxlZnQ6IG51bGwsCi0gICAg
ICAgICAgICAgICAgcmlnaHQ6IG51bGwsCi0gICAgICAgICAgICAgICAgcm93SW5kZXg6IG51bGws
Ci0gICAgICAgICAgICAgICAgdG9wOiBudWxsLAotICAgICAgICAgICAgICAgIGJvdHRvbTogbnVs
bCwKLSAgICAgICAgICAgICAgICBsaW5rUm91dGU6IGxpbmtSb3V0ZSwKLSAgICAgICAgICAgICAg
ICBsaW5rSWQ6IHJhbmdlLmdldCgnaWQnKSwKLSAgICAgICAgICAgICAgICBsYWJlbDogcmFuZ2Uu
Z2V0KCdsYWJlbCcpLAotICAgICAgICAgICAgICAgIHN0YXR1czogcmFuZ2UuZ2V0KCdzdGF0dXMn
KSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KSk7Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRl
UmFuZ2VCYXJSZWN0cygpOwotICAgIH0ub2JzZXJ2ZXMoJ3JhbmdlcycpLAotICAgIF91cGRhdGVS
YW5nZUJhclJlY3RzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciByYW5nZUJhcnMgPSB0aGlz
LmdldCgncmFuZ2VCYXJzJyk7Ci0gICAgICAgIGlmICghcmFuZ2VCYXJzIHx8ICFyYW5nZUJhcnMu
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciB4U2NhbGUgPSB0aGlz
Ll94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKLSAgICAgICAgaWYgKCF4U2NhbGUg
fHwgIXlTY2FsZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBFeHBhbmQgdGhl
IHdpZHRoIG9mIGVhY2ggcmFuZ2UgYXMgbmVlZGVkIGFuZCBzb3J0IHJhbmdlcyBieSB0aGUgbGVm
dC1lZGdlIG9mIHJhbmdlcy4KLSAgICAgICAgdmFyIG1pbldpZHRoID0gMzsKLSAgICAgICAgdmFy
IHNvcnRlZEJhcnMgPSByYW5nZUJhcnMubWFwKGZ1bmN0aW9uIChiYXIpIHsKLSAgICAgICAgICAg
IHZhciBsZWZ0ID0geFNjYWxlKGJhci5nZXQoJ3N0YXJ0VGltZScpKTsKLSAgICAgICAgICAgIHZh
ciByaWdodCA9IHhTY2FsZShiYXIuZ2V0KCdlbmRUaW1lJykpOwotICAgICAgICAgICAgaWYgKHJp
Z2h0IC0gbGVmdCA8IG1pbldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgbGVmdCAtPSBtaW5XaWR0
aCAvIDI7Ci0gICAgICAgICAgICAgICAgcmlnaHQgKz0gbWluV2lkdGggLyAyOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYmFyLnNldCgnbGVmdCcsIGxlZnQpOwotICAgICAgICAgICAgYmFy
LnNldCgncmlnaHQnLCByaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFyOwotICAgICAgICB9
KS5zb3J0KGZ1bmN0aW9uIChmaXJzdCwgc2Vjb25kKSB7IHJldHVybiBmaXJzdC5nZXQoJ2xlZnQn
KSAtIHNlY29uZC5nZXQoJ2xlZnQnKTsgfSk7Ci0KLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwg
bGVmdCBlZGdlcyBvZiBhbGwgcmFuZ2VzIHByaW9yIHRvIGEgcmFuZ2UgUjEgaXMgb24gdGhlIGxl
ZnQgb2YgUjEuCi0gICAgICAgIC8vIFBsYWNlIFIxIGludG8gYSByb3cgaW4gd2hpY2ggcmlnaHQg
ZWRnZXMgb2YgYWxsIHJhbmdlcyBwcmlvciB0byBSMSBpcyBvbiB0aGUgbGVmdCBvZiBSMSB0byBh
dm9pZCBvdmVybGFwcGluZyByYW5nZXMuCi0gICAgICAgIHZhciByb3dzID0gW107Ci0gICAgICAg
IHNvcnRlZEJhcnMuZm9yRWFjaChmdW5jdGlvbiAoYmFyKSB7Ci0gICAgICAgICAgICB2YXIgcm93
SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yICg7IHJvd0luZGV4IDwgcm93cy5sZW5ndGg7IHJv
d0luZGV4KyspIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvd3Nbcm93SW5k
ZXhdOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Um93W2N1cnJlbnRSb3cubGVuZ3RoIC0g
MV0uZ2V0KCdyaWdodCcpIDwgYmFyLmdldCgnbGVmdCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRSb3cucHVzaChiYXIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocm93SW5kZXggPj0g
cm93cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcm93cy5wdXNoKFtiYXJdKTsKLSAgICAgICAg
ICAgIGJhci5zZXQoJ3Jvd0luZGV4Jywgcm93SW5kZXgpOwotICAgICAgICB9KTsKLSAgICAgICAg
dmFyIHJvd0hlaWdodCA9IDAuNiAqIHRoaXMuX3JlbTsKLSAgICAgICAgdmFyIGZpcnN0Um93VG9w
ID0gdGhpcy5fY29udGVudEhlaWdodCAtIHJvd3MubGVuZ3RoICogcm93SGVpZ2h0OwotICAgICAg
ICB2YXIgYmFySGVpZ2h0ID0gMC41ICogdGhpcy5fcmVtOwotCi0gICAgICAgICQodGhpcy5nZXQo
J2VsZW1lbnQnKSkuZmluZCgnLnJhbmdlQmFyc0NvbnRhaW5lcklubGluZVN0eWxlJykuY3NzKHsK
LSAgICAgICAgICAgIGxlZnQ6IHRoaXMuX21hcmdpbi5sZWZ0ICsgJ3B4JywKLSAgICAgICAgICAg
IHRvcDogdGhpcy5fbWFyZ2luLnRvcCArIGZpcnN0Um93VG9wICsgJ3B4JywKLSAgICAgICAgICAg
IHdpZHRoOiB0aGlzLl9jb250ZW50V2lkdGggKyAncHgnLAotICAgICAgICAgICAgaGVpZ2h0OiBy
b3dzLmxlbmd0aCAqIGJhckhlaWdodCArICdweCcsCi0gICAgICAgICAgICBvdmVyZmxvdzogJ2hp
ZGRlbicsCi0gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgdmFyIG1hcmdpbiA9IHRoaXMuX21hcmdpbjsKLSAgICAgICAgc29ydGVkQmFycy5m
b3JFYWNoKGZ1bmN0aW9uIChiYXIpIHsKLSAgICAgICAgICAgIHZhciB0b3AgPSBiYXIuZ2V0KCdy
b3dJbmRleCcpICogcm93SGVpZ2h0OwotICAgICAgICAgICAgdmFyIGhlaWdodCA9IGJhckhlaWdo
dDsKLSAgICAgICAgICAgIHZhciBsZWZ0ID0gYmFyLmdldCgnbGVmdCcpOwotICAgICAgICAgICAg
dmFyIHdpZHRoID0gYmFyLmdldCgncmlnaHQnKSAtIGxlZnQ7Ci0gICAgICAgICAgICBiYXIuc2V0
KCdpbmxpbmVTdHlsZScsICdsZWZ0OiAnICsgbGVmdCArICdweDsgdG9wOiAnICsgdG9wICsgJ3B4
OyB3aWR0aDogJyArIHdpZHRoICsgJ3B4OyBoZWlnaHQ6ICcgKyBoZWlnaHQgKyAncHg7Jyk7Ci0g
ICAgICAgIH0pOwotICAgIH0sCi0gICAgX3VwZGF0ZUN1cnJlbnRJdGVtSW5kaWNhdG9yczogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY3VycmVudEl0ZW1MaW5lKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBpdGVtID0gdGhpcy5fY3VycmVudFRpbWVT
ZXJpZXNEYXRhW3RoaXMuX2N1cnJlbnRJdGVtSW5kZXhdOwotICAgICAgICBpZiAoIWl0ZW0pIHsK
LSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtTGluZS5hdHRyKCJ4MSIsIC0xMDAwKS5hdHRy
KCJ4MiIsIC0xMDAwKTsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtQ2lyY2xlLmF0dHIo
ImN4IiwgLTEwMDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHggPSB0aGlzLl94KGl0ZW0udGltZSk7Ci0gICAgICAgIHZhciB5ID0gdGhpcy5feShpdGVt
LnZhbHVlKTsKLQotICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUxpbmUKLSAgICAgICAgICAgIC5h
dHRyKCJ4MSIsIHgpCi0gICAgICAgICAgICAuYXR0cigieDIiLCB4KTsKLQotICAgICAgICB0aGlz
Ll9jdXJyZW50SXRlbUNpcmNsZQotICAgICAgICAgICAgLmF0dHIoImN4IiwgeCkKLSAgICAgICAg
ICAgIC5hdHRyKCJjeSIsIHkpOwotICAgIH0sCi0gICAgX3NldEN1cnJlbnRTZWxlY3Rpb246IGZ1
bmN0aW9uIChuZXdTZWxlY3Rpb24pCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYnJ1c2hFeHRl
bnQgPT09IG5ld1NlbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIg
cG9pbnRzID0gbnVsbDsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlvbikgewotICAgICAgICAgICAg
cG9pbnRzID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhCi0gICAgICAgICAgICAgICAgLmZp
bHRlcihmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50LnRpbWUgPj0gbmV3U2VsZWN0aW9u
WzBdICYmIHBvaW50LnRpbWUgPD0gbmV3U2VsZWN0aW9uWzFdOyB9KTsKLSAgICAgICAgICAgIGlm
ICghcG9pbnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBwb2ludHMgPSBudWxsOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5fYnJ1c2hFeHRlbnQgPSBuZXdTZWxlY3Rpb247Ci0gICAgICAg
IHRoaXMuX3NldEN1cnJlbnRJdGVtKHVuZGVmaW5lZCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNl
bGVjdGlvblRvb2xiYXIoKTsKLQotICAgICAgICBpZiAoIUFwcC5kb21haW5zQXJlRXF1YWwodGhp
cy5nZXQoJ3NlbGVjdGlvbicpLCBuZXdTZWxlY3Rpb24pKQotICAgICAgICAgICAgdGhpcy5zZXQo
J3NlbGVjdGlvbicsIG5ld1NlbGVjdGlvbik7Ci0gICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZFBv
aW50cycsIHBvaW50cyk7Ci0gICAgfSwKLSAgICBfdXBkYXRlU2VsZWN0aW9uVG9vbGJhcjogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5nZXQoJ3pvb21hYmxlJykpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2N1cnJlbnRT
ZWxlY3Rpb24oKTsKLSAgICAgICAgdmFyIHNlbGVjdGlvblRvb2xiYXIgPSAkKHRoaXMuZ2V0KCdl
bGVtZW50JykpLmNoaWxkcmVuKCcuc2VsZWN0aW9uLXRvb2xiYXInKTsKLSAgICAgICAgaWYgKHNl
bGVjdGlvbikgewotICAgICAgICAgICAgdmFyIGxlZnQgPSB0aGlzLl94KHNlbGVjdGlvblswXSk7
Ci0gICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLl94KHNlbGVjdGlvblsxXSk7Ci0gICAgICAg
ICAgICBzZWxlY3Rpb25Ub29sYmFyCi0gICAgICAgICAgICAgICAgLmNzcyh7bGVmdDogdGhpcy5f
bWFyZ2luLmxlZnQgKyByaWdodCwgdG9wOiB0aGlzLl9tYXJnaW4udG9wICsgdGhpcy5fY29udGVu
dEhlaWdodH0pCi0gICAgICAgICAgICAgICAgLnNob3coKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBzZWxlY3Rpb25Ub29sYmFyLmhpZGUoKTsKLSAgICB9LAotICAgIGFjdGlvbnM6IHsK
LSAgICAgICAgem9vbTogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5z
ZW5kQWN0aW9uKCd6b29tJywgdGhpcy5fY3VycmVudFNlbGVjdGlvbigpKTsKLSAgICAgICAgICAg
IHRoaXMuc2V0KCdzZWxlY3Rpb24nLCBudWxsKTsKLSAgICAgICAgfSwKLSAgICAgICAgb3BlblJh
bmdlOiBmdW5jdGlvbiAocmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuc2VuZEFj
dGlvbignb3BlblJhbmdlJywgcmFuZ2UpOwotICAgICAgICB9LAotICAgIH0sCi19KTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvZDMvTElDRU5TRSBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvZDMvTElDRU5TRQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMTM0NjliOTg2OGYyZmMyZDIzMTM0YzU3NWI2ZDQz
Njg5NTFlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2QzL0xJQ0VOU0UKKysrIC9kZXYv
bnVsbApAQCAtMSwyNiArMCwwIEBACi1Db3B5cmlnaHQgKGMpIDIwMTAtMjAxNCwgTWljaGFlbCBC
b3N0b2NrCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotCi0qIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24KLSAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0KLSogVGhlIG5hbWUgTWljaGFlbCBCb3N0b2NrIG1heSBub3QgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNSUNIQUVMIEJPU1RPQ0sgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULAotSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi1CVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwK
LUVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2QzL2QzLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9kMy5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1MmI4YzNkYzNiNjljODk3Zjg4ZTkyM2M4YjY3ZjVjNmQ5
YTg4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2QzL2QzLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsOTIzMyArMCwwIEBACi0hZnVuY3Rpb24oKSB7Ci0gIHZhciBkMyA9IHsKLSAgICB2ZXJz
aW9uOiAiMy40LjExIgotICB9OwotICBpZiAoIURhdGUubm93KSBEYXRlLm5vdyA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiArbmV3IERhdGUoKTsKLSAgfTsKLSAgdmFyIGQzX2FycmF5U2xpY2Ug
PSBbXS5zbGljZSwgZDNfYXJyYXkgPSBmdW5jdGlvbihsaXN0KSB7Ci0gICAgcmV0dXJuIGQzX2Fy
cmF5U2xpY2UuY2FsbChsaXN0KTsKLSAgfTsKLSAgdmFyIGQzX2RvY3VtZW50ID0gZG9jdW1lbnQs
IGQzX2RvY3VtZW50RWxlbWVudCA9IGQzX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZDNfd2lu
ZG93ID0gd2luZG93OwotICB0cnkgewotICAgIGQzX2FycmF5KGQzX2RvY3VtZW50RWxlbWVudC5j
aGlsZE5vZGVzKVswXS5ub2RlVHlwZTsKLSAgfSBjYXRjaCAoZSkgewotICAgIGQzX2FycmF5ID0g
ZnVuY3Rpb24obGlzdCkgewotICAgICAgdmFyIGkgPSBsaXN0Lmxlbmd0aCwgYXJyYXkgPSBuZXcg
QXJyYXkoaSk7Ci0gICAgICB3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGxpc3RbaV07Ci0gICAgICBy
ZXR1cm4gYXJyYXk7Ci0gICAgfTsKLSAgfQotICB0cnkgewotICAgIGQzX2RvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwgMCwgIiIpOwotICB9
IGNhdGNoIChlcnJvcikgewotICAgIHZhciBkM19lbGVtZW50X3Byb3RvdHlwZSA9IGQzX3dpbmRv
dy5FbGVtZW50LnByb3RvdHlwZSwgZDNfZWxlbWVudF9zZXRBdHRyaWJ1dGUgPSBkM19lbGVtZW50
X3Byb3RvdHlwZS5zZXRBdHRyaWJ1dGUsIGQzX2VsZW1lbnRfc2V0QXR0cmlidXRlTlMgPSBkM19l
bGVtZW50X3Byb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUywgZDNfc3R5bGVfcHJvdG90eXBlID0gZDNf
d2luZG93LkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLCBkM19zdHlsZV9zZXRQcm9wZXJ0
eSA9IGQzX3N0eWxlX3Byb3RvdHlwZS5zZXRQcm9wZXJ0eTsKLSAgICBkM19lbGVtZW50X3Byb3Rv
dHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewotICAgICAgZDNfZWxl
bWVudF9zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLCBuYW1lLCB2YWx1ZSArICIiKTsKLSAgICB9Owot
ICAgIGQzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24oc3BhY2Us
IGxvY2FsLCB2YWx1ZSkgewotICAgICAgZDNfZWxlbWVudF9zZXRBdHRyaWJ1dGVOUy5jYWxsKHRo
aXMsIHNwYWNlLCBsb2NhbCwgdmFsdWUgKyAiIik7Ci0gICAgfTsKLSAgICBkM19zdHlsZV9wcm90
b3R5cGUuc2V0UHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHsKLSAg
ICAgIGQzX3N0eWxlX3NldFByb3BlcnR5LmNhbGwodGhpcywgbmFtZSwgdmFsdWUgKyAiIiwgcHJp
b3JpdHkpOwotICAgIH07Ci0gIH0KLSAgZDMuYXNjZW5kaW5nID0gZDNfYXNjZW5kaW5nOwotICBm
dW5jdGlvbiBkM19hc2NlbmRpbmcoYSwgYikgewotICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+
IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjsKLSAgfQotICBkMy5kZXNjZW5kaW5nID0gZnVuY3Rp
b24oYSwgYikgewotICAgIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8g
MCA6IE5hTjsKLSAgfTsKLSAgZDMubWluID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKLSAgICB2YXIg
aSA9IC0xLCBuID0gYXJyYXkubGVuZ3RoLCBhLCBiOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09PSAxKSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbiAmJiAhKChhID0gYXJyYXlbaV0pICE9IG51
bGwgJiYgYSA8PSBhKSkgYSA9IHVuZGVmaW5lZDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAo
KGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhID4gYikgYSA9IGI7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHdoaWxlICgrK2kgPCBuICYmICEoKGEgPSBmLmNhbGwoYXJyYXksIGFycmF5W2ldLCBpKSkg
IT0gbnVsbCAmJiBhIDw9IGEpKSBhID0gdW5kZWZpbmVkOwotICAgICAgd2hpbGUgKCsraSA8IG4p
IGlmICgoYiA9IGYuY2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSAhPSBudWxsICYmIGEgPiBiKSBh
ID0gYjsKLSAgICB9Ci0gICAgcmV0dXJuIGE7Ci0gIH07Ci0gIGQzLm1heCA9IGZ1bmN0aW9uKGFy
cmF5LCBmKSB7Ci0gICAgdmFyIGkgPSAtMSwgbiA9IGFycmF5Lmxlbmd0aCwgYSwgYjsKLSAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgd2hpbGUgKCsraSA8IG4gJiYgISgo
YSA9IGFycmF5W2ldKSAhPSBudWxsICYmIGEgPD0gYSkpIGEgPSB1bmRlZmluZWQ7Ci0gICAgICB3
aGlsZSAoKytpIDwgbikgaWYgKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+IGEpIGEgPSBi
OwotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbiAmJiAhKChhID0gZi5jYWxsKGFy
cmF5LCBhcnJheVtpXSwgaSkpICE9IG51bGwgJiYgYSA8PSBhKSkgYSA9IHVuZGVmaW5lZDsKLSAg
ICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmLmNhbGwoYXJyYXksIGFycmF5W2ldLCBpKSkg
IT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7Ci0gICAgfQotICAgIHJldHVybiBhOwotICB9OwotICBk
My5leHRlbnQgPSBmdW5jdGlvbihhcnJheSwgZikgewotICAgIHZhciBpID0gLTEsIG4gPSBhcnJh
eS5sZW5ndGgsIGEsIGIsIGM7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAg
ICAgIHdoaWxlICgrK2kgPCBuICYmICEoKGEgPSBjID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYSA8
PSBhKSkgYSA9IGMgPSB1bmRlZmluZWQ7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0g
YXJyYXlbaV0pICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGEgPiBiKSBhID0gYjsKLSAgICAgICAg
aWYgKGMgPCBiKSBjID0gYjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgd2hpbGUgKCsr
aSA8IG4gJiYgISgoYSA9IGMgPSBmLmNhbGwoYXJyYXksIGFycmF5W2ldLCBpKSkgIT0gbnVsbCAm
JiBhIDw9IGEpKSBhID0gdW5kZWZpbmVkOwotICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9
IGYuY2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSAhPSBudWxsKSB7Ci0gICAgICAgIGlmIChhID4g
YikgYSA9IGI7Ci0gICAgICAgIGlmIChjIDwgYikgYyA9IGI7Ci0gICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBbIGEsIGMgXTsKLSAgfTsKLSAgZDMuc3VtID0gZnVuY3Rpb24oYXJyYXksIGYpIHsK
LSAgICB2YXIgcyA9IDAsIG4gPSBhcnJheS5sZW5ndGgsIGEsIGkgPSAtMTsKLSAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4o
YSA9ICthcnJheVtpXSkpIHMgKz0gYTsKLSAgICB9IGVsc2UgewotICAgICAgd2hpbGUgKCsraSA8
IG4pIGlmICghaXNOYU4oYSA9ICtmLmNhbGwoYXJyYXksIGFycmF5W2ldLCBpKSkpIHMgKz0gYTsK
LSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX251bWJlcih4KSB7Ci0g
ICAgcmV0dXJuIHggIT0gbnVsbCAmJiAhaXNOYU4oeCk7Ci0gIH0KLSAgZDMubWVhbiA9IGZ1bmN0
aW9uKGFycmF5LCBmKSB7Ci0gICAgdmFyIHMgPSAwLCBuID0gYXJyYXkubGVuZ3RoLCBhLCBpID0g
LTEsIGogPSBuOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0gICAgICB3aGls
ZSAoKytpIDwgbikgaWYgKGQzX251bWJlcihhID0gYXJyYXlbaV0pKSBzICs9IGE7IGVsc2UgLS1q
OwotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKGQzX251bWJlcihhID0g
Zi5jYWxsKGFycmF5LCBhcnJheVtpXSwgaSkpKSBzICs9IGE7IGVsc2UgLS1qOwotICAgIH0KLSAg
ICByZXR1cm4gaiA/IHMgLyBqIDogdW5kZWZpbmVkOwotICB9OwotICBkMy5xdWFudGlsZSA9IGZ1
bmN0aW9uKHZhbHVlcywgcCkgewotICAgIHZhciBIID0gKHZhbHVlcy5sZW5ndGggLSAxKSAqIHAg
KyAxLCBoID0gTWF0aC5mbG9vcihIKSwgdiA9ICt2YWx1ZXNbaCAtIDFdLCBlID0gSCAtIGg7Ci0g
ICAgcmV0dXJuIGUgPyB2ICsgZSAqICh2YWx1ZXNbaF0gLSB2KSA6IHY7Ci0gIH07Ci0gIGQzLm1l
ZGlhbiA9IGZ1bmN0aW9uKGFycmF5LCBmKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAx
KSBhcnJheSA9IGFycmF5Lm1hcChmKTsKLSAgICBhcnJheSA9IGFycmF5LmZpbHRlcihkM19udW1i
ZXIpOwotICAgIHJldHVybiBhcnJheS5sZW5ndGggPyBkMy5xdWFudGlsZShhcnJheS5zb3J0KGQz
X2FzY2VuZGluZyksIC41KSA6IHVuZGVmaW5lZDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfYmlzZWN0
b3IoY29tcGFyZSkgewotICAgIHJldHVybiB7Ci0gICAgICBsZWZ0OiBmdW5jdGlvbihhLCB4LCBs
bywgaGkpIHsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBsbyA9IDA7Ci0gICAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNCkgaGkgPSBhLmxlbmd0aDsKLSAgICAgICAgd2hp
bGUgKGxvIDwgaGkpIHsKLSAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTsKLSAgICAg
ICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxOyBlbHNlIGhpID0g
bWlkOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsbzsKLSAgICAgIH0sCi0gICAgICByaWdo
dDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
IDwgMykgbG8gPSAwOwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDQpIGhpID0gYS5s
ZW5ndGg7Ci0gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7Ci0gICAgICAgICAgdmFyIG1pZCA9IGxv
ICsgaGkgPj4+IDE7Ci0gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0g
bWlkOyBlbHNlIGxvID0gbWlkICsgMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbG87Ci0g
ICAgICB9Ci0gICAgfTsKLSAgfQotICB2YXIgZDNfYmlzZWN0ID0gZDNfYmlzZWN0b3IoZDNfYXNj
ZW5kaW5nKTsKLSAgZDMuYmlzZWN0TGVmdCA9IGQzX2Jpc2VjdC5sZWZ0OwotICBkMy5iaXNlY3Qg
PSBkMy5iaXNlY3RSaWdodCA9IGQzX2Jpc2VjdC5yaWdodDsKLSAgZDMuYmlzZWN0b3IgPSBmdW5j
dGlvbihmKSB7Ci0gICAgcmV0dXJuIGQzX2Jpc2VjdG9yKGYubGVuZ3RoID09PSAxID8gZnVuY3Rp
b24oZCwgeCkgewotICAgICAgcmV0dXJuIGQzX2FzY2VuZGluZyhmKGQpLCB4KTsKLSAgICB9IDog
Zik7Ci0gIH07Ci0gIGQzLnNodWZmbGUgPSBmdW5jdGlvbihhcnJheSkgewotICAgIHZhciBtID0g
YXJyYXkubGVuZ3RoLCB0LCBpOwotICAgIHdoaWxlIChtKSB7Ci0gICAgICBpID0gTWF0aC5yYW5k
b20oKSAqIG0tLSB8IDA7Ci0gICAgICB0ID0gYXJyYXlbbV0sIGFycmF5W21dID0gYXJyYXlbaV0s
IGFycmF5W2ldID0gdDsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OwotICB9OwotICBkMy5wZXJt
dXRlID0gZnVuY3Rpb24oYXJyYXksIGluZGV4ZXMpIHsKLSAgICB2YXIgaSA9IGluZGV4ZXMubGVu
Z3RoLCBwZXJtdXRlcyA9IG5ldyBBcnJheShpKTsKLSAgICB3aGlsZSAoaS0tKSBwZXJtdXRlc1tp
XSA9IGFycmF5W2luZGV4ZXNbaV1dOwotICAgIHJldHVybiBwZXJtdXRlczsKLSAgfTsKLSAgZDMu
cGFpcnMgPSBmdW5jdGlvbihhcnJheSkgewotICAgIHZhciBpID0gMCwgbiA9IGFycmF5Lmxlbmd0
aCAtIDEsIHAwLCBwMSA9IGFycmF5WzBdLCBwYWlycyA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBu
KTsKLSAgICB3aGlsZSAoaSA8IG4pIHBhaXJzW2ldID0gWyBwMCA9IHAxLCBwMSA9IGFycmF5Wysr
aV0gXTsKLSAgICByZXR1cm4gcGFpcnM7Ci0gIH07Ci0gIGQzLnppcCA9IGZ1bmN0aW9uKCkgewot
ICAgIGlmICghKG4gPSBhcmd1bWVudHMubGVuZ3RoKSkgcmV0dXJuIFtdOwotICAgIGZvciAodmFy
IGkgPSAtMSwgbSA9IGQzLm1pbihhcmd1bWVudHMsIGQzX3ppcExlbmd0aCksIHppcHMgPSBuZXcg
QXJyYXkobSk7ICsraSA8IG07ICkgewotICAgICAgZm9yICh2YXIgaiA9IC0xLCBuLCB6aXAgPSB6
aXBzW2ldID0gbmV3IEFycmF5KG4pOyArK2ogPCBuOyApIHsKLSAgICAgICAgemlwW2pdID0gYXJn
dW1lbnRzW2pdW2ldOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gemlwczsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfemlwTGVuZ3RoKGQpIHsKLSAgICByZXR1cm4gZC5sZW5ndGg7Ci0gIH0KLSAg
ZDMudHJhbnNwb3NlID0gZnVuY3Rpb24obWF0cml4KSB7Ci0gICAgcmV0dXJuIGQzLnppcC5hcHBs
eShkMywgbWF0cml4KTsKLSAgfTsKLSAgZDMua2V5cyA9IGZ1bmN0aW9uKG1hcCkgewotICAgIHZh
ciBrZXlzID0gW107Ci0gICAgZm9yICh2YXIga2V5IGluIG1hcCkga2V5cy5wdXNoKGtleSk7Ci0g
ICAgcmV0dXJuIGtleXM7Ci0gIH07Ci0gIGQzLnZhbHVlcyA9IGZ1bmN0aW9uKG1hcCkgewotICAg
IHZhciB2YWx1ZXMgPSBbXTsKLSAgICBmb3IgKHZhciBrZXkgaW4gbWFwKSB2YWx1ZXMucHVzaCht
YXBba2V5XSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLSAgfTsKLSAgZDMuZW50cmllcyA9IGZ1bmN0
aW9uKG1hcCkgewotICAgIHZhciBlbnRyaWVzID0gW107Ci0gICAgZm9yICh2YXIga2V5IGluIG1h
cCkgZW50cmllcy5wdXNoKHsKLSAgICAgIGtleToga2V5LAotICAgICAgdmFsdWU6IG1hcFtrZXld
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGVudHJpZXM7Ci0gIH07Ci0gIGQzLm1lcmdlID0gZnVuY3Rp
b24oYXJyYXlzKSB7Ci0gICAgdmFyIG4gPSBhcnJheXMubGVuZ3RoLCBtLCBpID0gLTEsIGogPSAw
LCBtZXJnZWQsIGFycmF5OwotICAgIHdoaWxlICgrK2kgPCBuKSBqICs9IGFycmF5c1tpXS5sZW5n
dGg7Ci0gICAgbWVyZ2VkID0gbmV3IEFycmF5KGopOwotICAgIHdoaWxlICgtLW4gPj0gMCkgewot
ICAgICAgYXJyYXkgPSBhcnJheXNbbl07Ci0gICAgICBtID0gYXJyYXkubGVuZ3RoOwotICAgICAg
d2hpbGUgKC0tbSA+PSAwKSB7Ci0gICAgICAgIG1lcmdlZFstLWpdID0gYXJyYXlbbV07Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBtZXJnZWQ7Ci0gIH07Ci0gIHZhciBhYnMgPSBNYXRoLmFi
czsKLSAgZDMucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkgewotICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoIDwgMykgewotICAgICAgc3RlcCA9IDE7Ci0gICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA8IDIpIHsKLSAgICAgICAgc3RvcCA9IHN0YXJ0OwotICAgICAgICBzdGFydCA9
IDA7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXAgPT09IElu
ZmluaXR5KSB0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7Ci0gICAgdmFyIHJhbmdl
ID0gW10sIGsgPSBkM19yYW5nZV9pbnRlZ2VyU2NhbGUoYWJzKHN0ZXApKSwgaSA9IC0xLCBqOwot
ICAgIHN0YXJ0ICo9IGssIHN0b3AgKj0gaywgc3RlcCAqPSBrOwotICAgIGlmIChzdGVwIDwgMCkg
d2hpbGUgKChqID0gc3RhcnQgKyBzdGVwICogKytpKSA+IHN0b3ApIHJhbmdlLnB1c2goaiAvIGsp
OyBlbHNlIHdoaWxlICgoaiA9IHN0YXJ0ICsgc3RlcCAqICsraSkgPCBzdG9wKSByYW5nZS5wdXNo
KGogLyBrKTsKLSAgICByZXR1cm4gcmFuZ2U7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3JhbmdlX2lu
dGVnZXJTY2FsZSh4KSB7Ci0gICAgdmFyIGsgPSAxOwotICAgIHdoaWxlICh4ICogayAlIDEpIGsg
Kj0gMTA7Ci0gICAgcmV0dXJuIGs7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfY2xhc3MoY3RvciwgcHJv
cGVydGllcykgewotICAgIHRyeSB7Ci0gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykg
ewotICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3Rvci5wcm90b3R5cGUsIGtleSwgewot
ICAgICAgICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2tleV0sCi0gICAgICAgICAgZW51bWVyYWJsZTog
ZmFsc2UKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgY3Rv
ci5wcm90b3R5cGUgPSBwcm9wZXJ0aWVzOwotICAgIH0KLSAgfQotICBkMy5tYXAgPSBmdW5jdGlv
bihvYmplY3QpIHsKLSAgICB2YXIgbWFwID0gbmV3IGQzX01hcCgpOwotICAgIGlmIChvYmplY3Qg
aW5zdGFuY2VvZiBkM19NYXApIG9iamVjdC5mb3JFYWNoKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsK
LSAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7Ci0gICAgfSk7IGVsc2UgZm9yICh2YXIga2V5IGlu
IG9iamVjdCkgbWFwLnNldChrZXksIG9iamVjdFtrZXldKTsKLSAgICByZXR1cm4gbWFwOwotICB9
OwotICBmdW5jdGlvbiBkM19NYXAoKSB7fQotICBkM19jbGFzcyhkM19NYXAsIHsKLSAgICBoYXM6
IGQzX21hcF9oYXMsCi0gICAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKLSAgICAgIHJldHVybiB0aGlz
W2QzX21hcF9wcmVmaXggKyBrZXldOwotICAgIH0sCi0gICAgc2V0OiBmdW5jdGlvbihrZXksIHZh
bHVlKSB7Ci0gICAgICByZXR1cm4gdGhpc1tkM19tYXBfcHJlZml4ICsga2V5XSA9IHZhbHVlOwot
ICAgIH0sCi0gICAgcmVtb3ZlOiBkM19tYXBfcmVtb3ZlLAotICAgIGtleXM6IGQzX21hcF9rZXlz
LAotICAgIHZhbHVlczogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgdmFsdWVzID0gW107Ci0gICAg
ICB0aGlzLmZvckVhY2goZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICB2YWx1ZXMucHVz
aCh2YWx1ZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfSwKLSAgICBl
bnRyaWVzOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBlbnRyaWVzID0gW107Ci0gICAgICB0aGlz
LmZvckVhY2goZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICBlbnRyaWVzLnB1c2goewot
ICAgICAgICAgIGtleToga2V5LAotICAgICAgICAgIHZhbHVlOiB2YWx1ZQotICAgICAgICB9KTsK
LSAgICAgIH0pOwotICAgICAgcmV0dXJuIGVudHJpZXM7Ci0gICAgfSwKLSAgICBzaXplOiBkM19t
YXBfc2l6ZSwKLSAgICBlbXB0eTogZDNfbWFwX2VtcHR5LAotICAgIGZvckVhY2g6IGZ1bmN0aW9u
KGYpIHsKLSAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzKSBpZiAoa2V5LmNoYXJDb2RlQXQoMCkg
PT09IGQzX21hcF9wcmVmaXhDb2RlKSBmLmNhbGwodGhpcywga2V5LnN1YnN0cmluZygxKSwgdGhp
c1trZXldKTsKLSAgICB9Ci0gIH0pOwotICB2YXIgZDNfbWFwX3ByZWZpeCA9ICJceDAwIiwgZDNf
bWFwX3ByZWZpeENvZGUgPSBkM19tYXBfcHJlZml4LmNoYXJDb2RlQXQoMCk7Ci0gIGZ1bmN0aW9u
IGQzX21hcF9oYXMoa2V5KSB7Ci0gICAgcmV0dXJuIGQzX21hcF9wcmVmaXggKyBrZXkgaW4gdGhp
czsKLSAgfQotICBmdW5jdGlvbiBkM19tYXBfcmVtb3ZlKGtleSkgewotICAgIGtleSA9IGQzX21h
cF9wcmVmaXggKyBrZXk7Ci0gICAgcmV0dXJuIGtleSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW2tl
eV07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbWFwX2tleXMoKSB7Ci0gICAgdmFyIGtleXMgPSBbXTsK
LSAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICBrZXlzLnB1c2goa2V5KTsK
LSAgICB9KTsKLSAgICByZXR1cm4ga2V5czsKLSAgfQotICBmdW5jdGlvbiBkM19tYXBfc2l6ZSgp
IHsKLSAgICB2YXIgc2l6ZSA9IDA7Ci0gICAgZm9yICh2YXIga2V5IGluIHRoaXMpIGlmIChrZXku
Y2hhckNvZGVBdCgwKSA9PT0gZDNfbWFwX3ByZWZpeENvZGUpICsrc2l6ZTsKLSAgICByZXR1cm4g
c2l6ZTsKLSAgfQotICBmdW5jdGlvbiBkM19tYXBfZW1wdHkoKSB7Ci0gICAgZm9yICh2YXIga2V5
IGluIHRoaXMpIGlmIChrZXkuY2hhckNvZGVBdCgwKSA9PT0gZDNfbWFwX3ByZWZpeENvZGUpIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBkMy5uZXN0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIG5lc3QgPSB7fSwga2V5cyA9IFtdLCBzb3J0S2V5cyA9IFtdLCBzb3J0VmFs
dWVzLCByb2xsdXA7Ci0gICAgZnVuY3Rpb24gbWFwKG1hcFR5cGUsIGFycmF5LCBkZXB0aCkgewot
ICAgICAgaWYgKGRlcHRoID49IGtleXMubGVuZ3RoKSByZXR1cm4gcm9sbHVwID8gcm9sbHVwLmNh
bGwobmVzdCwgYXJyYXkpIDogc29ydFZhbHVlcyA/IGFycmF5LnNvcnQoc29ydFZhbHVlcykgOiBh
cnJheTsKLSAgICAgIHZhciBpID0gLTEsIG4gPSBhcnJheS5sZW5ndGgsIGtleSA9IGtleXNbZGVw
dGgrK10sIGtleVZhbHVlLCBvYmplY3QsIHNldHRlciwgdmFsdWVzQnlLZXkgPSBuZXcgZDNfTWFw
KCksIHZhbHVlczsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgIGlmICh2YWx1ZXMg
PSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkob2JqZWN0ID0gYXJyYXlbaV0pKSkgewot
ICAgICAgICAgIHZhbHVlcy5wdXNoKG9iamVjdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgdmFsdWVzQnlLZXkuc2V0KGtleVZhbHVlLCBbIG9iamVjdCBdKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgICAgaWYgKG1hcFR5cGUpIHsKLSAgICAgICAgb2JqZWN0ID0gbWFwVHlwZSgpOwot
ICAgICAgICBzZXR0ZXIgPSBmdW5jdGlvbihrZXlWYWx1ZSwgdmFsdWVzKSB7Ci0gICAgICAgICAg
b2JqZWN0LnNldChrZXlWYWx1ZSwgbWFwKG1hcFR5cGUsIHZhbHVlcywgZGVwdGgpKTsKLSAgICAg
ICAgfTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9iamVjdCA9IHt9OwotICAgICAgICBzZXR0
ZXIgPSBmdW5jdGlvbihrZXlWYWx1ZSwgdmFsdWVzKSB7Ci0gICAgICAgICAgb2JqZWN0W2tleVZh
bHVlXSA9IG1hcChtYXBUeXBlLCB2YWx1ZXMsIGRlcHRoKTsKLSAgICAgICAgfTsKLSAgICAgIH0K
LSAgICAgIHZhbHVlc0J5S2V5LmZvckVhY2goc2V0dGVyKTsKLSAgICAgIHJldHVybiBvYmplY3Q7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGVudHJpZXMobWFwLCBkZXB0aCkgewotICAgICAgaWYgKGRl
cHRoID49IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwOwotICAgICAgdmFyIGFycmF5ID0gW10sIHNv
cnRLZXkgPSBzb3J0S2V5c1tkZXB0aCsrXTsKLSAgICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKGtl
eSwga2V5TWFwKSB7Ci0gICAgICAgIGFycmF5LnB1c2goewotICAgICAgICAgIGtleToga2V5LAot
ICAgICAgICAgIHZhbHVlczogZW50cmllcyhrZXlNYXAsIGRlcHRoKQotICAgICAgICB9KTsKLSAg
ICAgIH0pOwotICAgICAgcmV0dXJuIHNvcnRLZXkgPyBhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIp
IHsKLSAgICAgICAgcmV0dXJuIHNvcnRLZXkoYS5rZXksIGIua2V5KTsKLSAgICAgIH0pIDogYXJy
YXk7Ci0gICAgfQotICAgIG5lc3QubWFwID0gZnVuY3Rpb24oYXJyYXksIG1hcFR5cGUpIHsKLSAg
ICAgIHJldHVybiBtYXAobWFwVHlwZSwgYXJyYXksIDApOwotICAgIH07Ci0gICAgbmVzdC5lbnRy
aWVzID0gZnVuY3Rpb24oYXJyYXkpIHsKLSAgICAgIHJldHVybiBlbnRyaWVzKG1hcChkMy5tYXAs
IGFycmF5LCAwKSwgMCk7Ci0gICAgfTsKLSAgICBuZXN0LmtleSA9IGZ1bmN0aW9uKGQpIHsKLSAg
ICAgIGtleXMucHVzaChkKTsKLSAgICAgIHJldHVybiBuZXN0OwotICAgIH07Ci0gICAgbmVzdC5z
b3J0S2V5cyA9IGZ1bmN0aW9uKG9yZGVyKSB7Ci0gICAgICBzb3J0S2V5c1trZXlzLmxlbmd0aCAt
IDFdID0gb3JkZXI7Ci0gICAgICByZXR1cm4gbmVzdDsKLSAgICB9OwotICAgIG5lc3Quc29ydFZh
bHVlcyA9IGZ1bmN0aW9uKG9yZGVyKSB7Ci0gICAgICBzb3J0VmFsdWVzID0gb3JkZXI7Ci0gICAg
ICByZXR1cm4gbmVzdDsKLSAgICB9OwotICAgIG5lc3Qucm9sbHVwID0gZnVuY3Rpb24oZikgewot
ICAgICAgcm9sbHVwID0gZjsKLSAgICAgIHJldHVybiBuZXN0OwotICAgIH07Ci0gICAgcmV0dXJu
IG5lc3Q7Ci0gIH07Ci0gIGQzLnNldCA9IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgdmFyIHNldCA9
IG5ldyBkM19TZXQoKTsKLSAgICBpZiAoYXJyYXkpIGZvciAodmFyIGkgPSAwLCBuID0gYXJyYXku
bGVuZ3RoOyBpIDwgbjsgKytpKSBzZXQuYWRkKGFycmF5W2ldKTsKLSAgICByZXR1cm4gc2V0Owot
ICB9OwotICBmdW5jdGlvbiBkM19TZXQoKSB7fQotICBkM19jbGFzcyhkM19TZXQsIHsKLSAgICBo
YXM6IGQzX21hcF9oYXMsCi0gICAgYWRkOiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpc1tk
M19tYXBfcHJlZml4ICsgdmFsdWVdID0gdHJ1ZTsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
LAotICAgIHJlbW92ZTogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHZhbHVlID0gZDNfbWFwX3By
ZWZpeCArIHZhbHVlOwotICAgICAgcmV0dXJuIHZhbHVlIGluIHRoaXMgJiYgZGVsZXRlIHRoaXNb
dmFsdWVdOwotICAgIH0sCi0gICAgdmFsdWVzOiBkM19tYXBfa2V5cywKLSAgICBzaXplOiBkM19t
YXBfc2l6ZSwKLSAgICBlbXB0eTogZDNfbWFwX2VtcHR5LAotICAgIGZvckVhY2g6IGZ1bmN0aW9u
KGYpIHsKLSAgICAgIGZvciAodmFyIHZhbHVlIGluIHRoaXMpIGlmICh2YWx1ZS5jaGFyQ29kZUF0
KDApID09PSBkM19tYXBfcHJlZml4Q29kZSkgZi5jYWxsKHRoaXMsIHZhbHVlLnN1YnN0cmluZygx
KSk7Ci0gICAgfQotICB9KTsKLSAgZDMuYmVoYXZpb3IgPSB7fTsKLSAgZDMucmViaW5kID0gZnVu
Y3Rpb24odGFyZ2V0LCBzb3VyY2UpIHsKLSAgICB2YXIgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVu
Z3RoLCBtZXRob2Q7Ci0gICAgd2hpbGUgKCsraSA8IG4pIHRhcmdldFttZXRob2QgPSBhcmd1bWVu
dHNbaV1dID0gZDNfcmViaW5kKHRhcmdldCwgc291cmNlLCBzb3VyY2VbbWV0aG9kXSk7Ci0gICAg
cmV0dXJuIHRhcmdldDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfcmViaW5kKHRhcmdldCwgc291cmNl
LCBtZXRob2QpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgdmFsdWUgPSBt
ZXRob2QuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpOwotICAgICAgcmV0dXJuIHZhbHVlID09PSBz
b3VyY2UgPyB0YXJnZXQgOiB2YWx1ZTsKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3ZlbmRv
clN5bWJvbChvYmplY3QsIG5hbWUpIHsKLSAgICBpZiAobmFtZSBpbiBvYmplY3QpIHJldHVybiBu
YW1lOwotICAgIG5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJz
dHJpbmcoMSk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBkM192ZW5kb3JQcmVmaXhlcy5sZW5n
dGg7IGkgPCBuOyArK2kpIHsKLSAgICAgIHZhciBwcmVmaXhOYW1lID0gZDNfdmVuZG9yUHJlZml4
ZXNbaV0gKyBuYW1lOwotICAgICAgaWYgKHByZWZpeE5hbWUgaW4gb2JqZWN0KSByZXR1cm4gcHJl
Zml4TmFtZTsKLSAgICB9Ci0gIH0KLSAgdmFyIGQzX3ZlbmRvclByZWZpeGVzID0gWyAid2Via2l0
IiwgIm1zIiwgIm1veiIsICJNb3oiLCAibyIsICJPIiBdOwotICBmdW5jdGlvbiBkM19ub29wKCkg
e30KLSAgZDMuZGlzcGF0Y2ggPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgZGlzcGF0Y2ggPSBuZXcg
ZDNfZGlzcGF0Y2goKSwgaSA9IC0xLCBuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICB3aGlsZSAo
KytpIDwgbikgZGlzcGF0Y2hbYXJndW1lbnRzW2ldXSA9IGQzX2Rpc3BhdGNoX2V2ZW50KGRpc3Bh
dGNoKTsKLSAgICByZXR1cm4gZGlzcGF0Y2g7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2Rpc3BhdGNo
KCkge30KLSAgZDNfZGlzcGF0Y2gucHJvdG90eXBlLm9uID0gZnVuY3Rpb24odHlwZSwgbGlzdGVu
ZXIpIHsKLSAgICB2YXIgaSA9IHR5cGUuaW5kZXhPZigiLiIpLCBuYW1lID0gIiI7Ci0gICAgaWYg
KGkgPj0gMCkgewotICAgICAgbmFtZSA9IHR5cGUuc3Vic3RyaW5nKGkgKyAxKTsKLSAgICAgIHR5
cGUgPSB0eXBlLnN1YnN0cmluZygwLCBpKTsKLSAgICB9Ci0gICAgaWYgKHR5cGUpIHJldHVybiBh
cmd1bWVudHMubGVuZ3RoIDwgMiA/IHRoaXNbdHlwZV0ub24obmFtZSkgOiB0aGlzW3R5cGVdLm9u
KG5hbWUsIGxpc3RlbmVyKTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAg
ICAgaWYgKGxpc3RlbmVyID09IG51bGwpIGZvciAodHlwZSBpbiB0aGlzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KHR5cGUpKSB0aGlzW3R5cGVdLm9uKG5hbWUsIG51bGwpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICB9OwotICBmdW5jdGlvbiBkM19k
aXNwYXRjaF9ldmVudChkaXNwYXRjaCkgewotICAgIHZhciBsaXN0ZW5lcnMgPSBbXSwgbGlzdGVu
ZXJCeU5hbWUgPSBuZXcgZDNfTWFwKCk7Ci0gICAgZnVuY3Rpb24gZXZlbnQoKSB7Ci0gICAgICB2
YXIgeiA9IGxpc3RlbmVycywgaSA9IC0xLCBuID0gei5sZW5ndGgsIGw7Ci0gICAgICB3aGlsZSAo
KytpIDwgbikgaWYgKGwgPSB6W2ldLm9uKSBsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
ICByZXR1cm4gZGlzcGF0Y2g7Ci0gICAgfQotICAgIGV2ZW50Lm9uID0gZnVuY3Rpb24obmFtZSwg
bGlzdGVuZXIpIHsKLSAgICAgIHZhciBsID0gbGlzdGVuZXJCeU5hbWUuZ2V0KG5hbWUpLCBpOwot
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gbCAmJiBsLm9uOwotICAgICAg
aWYgKGwpIHsKLSAgICAgICAgbC5vbiA9IG51bGw7Ci0gICAgICAgIGxpc3RlbmVycyA9IGxpc3Rl
bmVycy5zbGljZSgwLCBpID0gbGlzdGVuZXJzLmluZGV4T2YobCkpLmNvbmNhdChsaXN0ZW5lcnMu
c2xpY2UoaSArIDEpKTsKLSAgICAgICAgbGlzdGVuZXJCeU5hbWUucmVtb3ZlKG5hbWUpOwotICAg
ICAgfQotICAgICAgaWYgKGxpc3RlbmVyKSBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lckJ5TmFtZS5z
ZXQobmFtZSwgewotICAgICAgICBvbjogbGlzdGVuZXIKLSAgICAgIH0pKTsKLSAgICAgIHJldHVy
biBkaXNwYXRjaDsKLSAgICB9OwotICAgIHJldHVybiBldmVudDsKLSAgfQotICBkMy5ldmVudCA9
IG51bGw7Ci0gIGZ1bmN0aW9uIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKSB7Ci0gICAgZDMuZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgfQotICBmdW5jdGlvbiBkM19ldmVudFNvdXJjZSgpIHsK
LSAgICB2YXIgZSA9IGQzLmV2ZW50LCBzOwotICAgIHdoaWxlIChzID0gZS5zb3VyY2VFdmVudCkg
ZSA9IHM7Ci0gICAgcmV0dXJuIGU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZXZlbnREaXNwYXRjaCh0
YXJnZXQpIHsKLSAgICB2YXIgZGlzcGF0Y2ggPSBuZXcgZDNfZGlzcGF0Y2goKSwgaSA9IDAsIG4g
PSBhcmd1bWVudHMubGVuZ3RoOwotICAgIHdoaWxlICgrK2kgPCBuKSBkaXNwYXRjaFthcmd1bWVu
dHNbaV1dID0gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpOwotICAgIGRpc3BhdGNoLm9mID0g
ZnVuY3Rpb24odGhpeiwgYXJndW1lbnR6KSB7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24oZTEpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2YXIgZTAgPSBlMS5zb3VyY2VFdmVudCA9IGQzLmV2
ZW50OwotICAgICAgICAgIGUxLnRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICBkMy5ldmVudCA9
IGUxOwotICAgICAgICAgIGRpc3BhdGNoW2UxLnR5cGVdLmFwcGx5KHRoaXosIGFyZ3VtZW50eik7
Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgZDMuZXZlbnQgPSBlMDsKLSAgICAgICAg
fQotICAgICAgfTsKLSAgICB9OwotICAgIHJldHVybiBkaXNwYXRjaDsKLSAgfQotICBkMy5yZXF1
b3RlID0gZnVuY3Rpb24ocykgewotICAgIHJldHVybiBzLnJlcGxhY2UoZDNfcmVxdW90ZV9yZSwg
IlxcJCYiKTsKLSAgfTsKLSAgdmFyIGQzX3JlcXVvdGVfcmUgPSAvW1xcXF5cJFwqXCtcP1x8XFtc
XVwoXClcLlx7XH1dL2c7Ci0gIHZhciBkM19zdWJjbGFzcyA9IHt9Ll9fcHJvdG9fXyA/IGZ1bmN0
aW9uKG9iamVjdCwgcHJvdG90eXBlKSB7Ci0gICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlw
ZTsKLSAgfSA6IGZ1bmN0aW9uKG9iamVjdCwgcHJvdG90eXBlKSB7Ci0gICAgZm9yICh2YXIgcHJv
cGVydHkgaW4gcHJvdG90eXBlKSBvYmplY3RbcHJvcGVydHldID0gcHJvdG90eXBlW3Byb3BlcnR5
XTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uKGdyb3VwcykgewotICAgIGQzX3N1YmNs
YXNzKGdyb3VwcywgZDNfc2VsZWN0aW9uUHJvdG90eXBlKTsKLSAgICByZXR1cm4gZ3JvdXBzOwot
ICB9Ci0gIHZhciBkM19zZWxlY3QgPSBmdW5jdGlvbihzLCBuKSB7Ci0gICAgcmV0dXJuIG4ucXVl
cnlTZWxlY3RvcihzKTsKLSAgfSwgZDNfc2VsZWN0QWxsID0gZnVuY3Rpb24ocywgbikgewotICAg
IHJldHVybiBuLnF1ZXJ5U2VsZWN0b3JBbGwocyk7Ci0gIH0sIGQzX3NlbGVjdE1hdGNoZXIgPSBk
M19kb2N1bWVudEVsZW1lbnQubWF0Y2hlcyB8fCBkM19kb2N1bWVudEVsZW1lbnRbZDNfdmVuZG9y
U3ltYm9sKGQzX2RvY3VtZW50RWxlbWVudCwgIm1hdGNoZXNTZWxlY3RvciIpXSwgZDNfc2VsZWN0
TWF0Y2hlcyA9IGZ1bmN0aW9uKG4sIHMpIHsKLSAgICByZXR1cm4gZDNfc2VsZWN0TWF0Y2hlci5j
YWxsKG4sIHMpOwotICB9OwotICBpZiAodHlwZW9mIFNpenpsZSA9PT0gImZ1bmN0aW9uIikgewot
ICAgIGQzX3NlbGVjdCA9IGZ1bmN0aW9uKHMsIG4pIHsKLSAgICAgIHJldHVybiBTaXp6bGUocywg
bilbMF0gfHwgbnVsbDsKLSAgICB9OwotICAgIGQzX3NlbGVjdEFsbCA9IFNpenpsZTsKLSAgICBk
M19zZWxlY3RNYXRjaGVzID0gU2l6emxlLm1hdGNoZXNTZWxlY3RvcjsKLSAgfQotICBkMy5zZWxl
Y3Rpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uUm9vdDsKLSAgfTsK
LSAgdmFyIGQzX3NlbGVjdGlvblByb3RvdHlwZSA9IGQzLnNlbGVjdGlvbi5wcm90b3R5cGUgPSBb
XTsKLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7
Ci0gICAgdmFyIHN1Ymdyb3VwcyA9IFtdLCBzdWJncm91cCwgc3Vibm9kZSwgZ3JvdXAsIG5vZGU7
Ci0gICAgc2VsZWN0b3IgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3IpOwotICAgIGZv
ciAodmFyIGogPSAtMSwgbSA9IHRoaXMubGVuZ3RoOyArK2ogPCBtOyApIHsKLSAgICAgIHN1Ymdy
b3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pOwotICAgICAgc3ViZ3JvdXAucGFyZW50Tm9kZSA9IChn
cm91cCA9IHRoaXNbal0pLnBhcmVudE5vZGU7Ci0gICAgICBmb3IgKHZhciBpID0gLTEsIG4gPSBn
cm91cC5sZW5ndGg7ICsraSA8IG47ICkgewotICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7
Ci0gICAgICAgICAgc3ViZ3JvdXAucHVzaChzdWJub2RlID0gc2VsZWN0b3IuY2FsbChub2RlLCBu
b2RlLl9fZGF0YV9fLCBpLCBqKSk7Ci0gICAgICAgICAgaWYgKHN1Ym5vZGUgJiYgIl9fZGF0YV9f
IiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXzsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBzdWJncm91cC5wdXNoKG51bGwpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gZDNfc2VsZWN0aW9uX3NlbGVjdG9yKHNlbGVjdG9yKSB7Ci0gICAgcmV0dXJuIHR5cGVv
ZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiA/IHNlbGVjdG9yIDogZnVuY3Rpb24oKSB7Ci0gICAg
ICByZXR1cm4gZDNfc2VsZWN0KHNlbGVjdG9yLCB0aGlzKTsKLSAgICB9OwotICB9Ci0gIGQzX3Nl
bGVjdGlvblByb3RvdHlwZS5zZWxlY3RBbGwgPSBmdW5jdGlvbihzZWxlY3RvcikgewotICAgIHZh
ciBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIG5vZGU7Ci0gICAgc2VsZWN0b3IgPSBkM19zZWxl
Y3Rpb25fc2VsZWN0b3JBbGwoc2VsZWN0b3IpOwotICAgIGZvciAodmFyIGogPSAtMSwgbSA9IHRo
aXMubGVuZ3RoOyArK2ogPCBtOyApIHsKLSAgICAgIGZvciAodmFyIGdyb3VwID0gdGhpc1tqXSwg
aSA9IC0xLCBuID0gZ3JvdXAubGVuZ3RoOyArK2kgPCBuOyApIHsKLSAgICAgICAgaWYgKG5vZGUg
PSBncm91cFtpXSkgewotICAgICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gZDNfYXJy
YXkoc2VsZWN0b3IuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKSkpOwotICAgICAgICAg
IHN1Ymdyb3VwLnBhcmVudE5vZGUgPSBub2RlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNf
c2VsZWN0aW9uX3NlbGVjdG9yQWxsKHNlbGVjdG9yKSB7Ci0gICAgcmV0dXJuIHR5cGVvZiBzZWxl
Y3RvciA9PT0gImZ1bmN0aW9uIiA/IHNlbGVjdG9yIDogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1
cm4gZDNfc2VsZWN0QWxsKHNlbGVjdG9yLCB0aGlzKTsKLSAgICB9OwotICB9Ci0gIHZhciBkM19u
c1ByZWZpeCA9IHsKLSAgICBzdmc6ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsCi0gICAg
eGh0bWw6ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwKLSAgICB4bGluazogImh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLAotICAgIHhtbDogImh0dHA6Ly93d3cudzMub3JnL1hN
TC8xOTk4L25hbWVzcGFjZSIsCi0gICAgeG1sbnM6ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3ht
bG5zLyIKLSAgfTsKLSAgZDMubnMgPSB7Ci0gICAgcHJlZml4OiBkM19uc1ByZWZpeCwKLSAgICBx
dWFsaWZ5OiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB2YXIgaSA9IG5hbWUuaW5kZXhPZigiOiIp
LCBwcmVmaXggPSBuYW1lOwotICAgICAgaWYgKGkgPj0gMCkgewotICAgICAgICBwcmVmaXggPSBu
YW1lLnN1YnN0cmluZygwLCBpKTsKLSAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGkgKyAx
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkM19uc1ByZWZpeC5oYXNPd25Qcm9wZXJ0eShwcmVm
aXgpID8gewotICAgICAgICBzcGFjZTogZDNfbnNQcmVmaXhbcHJlZml4XSwKLSAgICAgICAgbG9j
YWw6IG5hbWUKLSAgICAgIH0gOiBuYW1lOwotICAgIH0KLSAgfTsKLSAgZDNfc2VsZWN0aW9uUHJv
dG90eXBlLmF0dHIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewotICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoIDwgMikgewotICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikgewotICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpOwotICAgICAgICBuYW1lID0gZDMubnMucXVhbGlm
eShuYW1lKTsKLSAgICAgICAgcmV0dXJuIG5hbWUubG9jYWwgPyBub2RlLmdldEF0dHJpYnV0ZU5T
KG5hbWUuc3BhY2UsIG5hbWUubG9jYWwpIDogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7Ci0gICAg
ICB9Ci0gICAgICBmb3IgKHZhbHVlIGluIG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fYXR0
cih2YWx1ZSwgbmFtZVt2YWx1ZV0pKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICBy
ZXR1cm4gdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsIHZhbHVlKSk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9hdHRyKG5hbWUsIHZhbHVlKSB7Ci0gICAgbmFtZSA9IGQz
Lm5zLnF1YWxpZnkobmFtZSk7Ci0gICAgZnVuY3Rpb24gYXR0ck51bGwoKSB7Ci0gICAgICB0aGlz
LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gYXR0ck51bGxOUygp
IHsKLSAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobmFtZS5zcGFjZSwgbmFtZS5sb2NhbCk7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGF0dHJDb25zdGFudCgpIHsKLSAgICAgIHRoaXMuc2V0QXR0
cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMo
KSB7Ci0gICAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwsIHZh
bHVlKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKCkgewotICAgICAgdmFyIHgg
PSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgaWYgKHggPT0gbnVsbCkgdGhp
cy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7IGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgeCk7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKCkgewotICAgICAgdmFyIHggPSB2
YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgaWYgKHggPT0gbnVsbCkgdGhpcy5y
ZW1vdmVBdHRyaWJ1dGVOUyhuYW1lLnNwYWNlLCBuYW1lLmxvY2FsKTsgZWxzZSB0aGlzLnNldEF0
dHJpYnV0ZU5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwsIHgpOwotICAgIH0KLSAgICByZXR1cm4g
dmFsdWUgPT0gbnVsbCA/IG5hbWUubG9jYWwgPyBhdHRyTnVsbE5TIDogYXR0ck51bGwgOiB0eXBl
b2YgdmFsdWUgPT09ICJmdW5jdGlvbiIgPyBuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBh
dHRyRnVuY3Rpb24gOiBuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQ7
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfY29sbGFwc2UocykgewotICAgIHJldHVybiBzLnRyaW0oKS5y
ZXBsYWNlKC9ccysvZywgIiAiKTsKLSAgfQotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUuY2xhc3Nl
ZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAy
KSB7Ci0gICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgIHZhciBu
b2RlID0gdGhpcy5ub2RlKCksIG4gPSAobmFtZSA9IGQzX3NlbGVjdGlvbl9jbGFzc2VzKG5hbWUp
KS5sZW5ndGgsIGkgPSAtMTsKLSAgICAgICAgaWYgKHZhbHVlID0gbm9kZS5jbGFzc0xpc3QpIHsK
LSAgICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCF2YWx1ZS5jb250YWlucyhuYW1lW2ldKSkg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhbHVlID0gbm9kZS5n
ZXRBdHRyaWJ1dGUoImNsYXNzIik7Ci0gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghZDNf
c2VsZWN0aW9uX2NsYXNzZWRSZShuYW1lW2ldKS50ZXN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgZm9yICh2YWx1
ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX2NsYXNzZWQodmFsdWUsIG5hbWVbdmFs
dWVdKSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChk
M19zZWxlY3Rpb25fY2xhc3NlZChuYW1lLCB2YWx1ZSkpOwotICB9OwotICBmdW5jdGlvbiBkM19z
ZWxlY3Rpb25fY2xhc3NlZFJlKG5hbWUpIHsKLSAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD86Xnxc
XHMrKSIgKyBkMy5yZXF1b3RlKG5hbWUpICsgIig/Olxccyt8JCkiLCAiZyIpOwotICB9Ci0gIGZ1
bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VzKG5hbWUpIHsKLSAgICByZXR1cm4gKG5hbWUgKyAi
IikudHJpbSgpLnNwbGl0KC9efFxzKy8pOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9j
bGFzc2VkKG5hbWUsIHZhbHVlKSB7Ci0gICAgbmFtZSA9IGQzX3NlbGVjdGlvbl9jbGFzc2VzKG5h
bWUpLm1hcChkM19zZWxlY3Rpb25fY2xhc3NlZE5hbWUpOwotICAgIHZhciBuID0gbmFtZS5sZW5n
dGg7Ci0gICAgZnVuY3Rpb24gY2xhc3NlZENvbnN0YW50KCkgewotICAgICAgdmFyIGkgPSAtMTsK
LSAgICAgIHdoaWxlICgrK2kgPCBuKSBuYW1lW2ldKHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKCkgewotICAgICAgdmFyIGkgPSAtMSwgeCA9IHZhbHVl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgbmFtZVtpXSh0
aGlzLCB4KTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIiA/
IGNsYXNzZWRGdW5jdGlvbiA6IGNsYXNzZWRDb25zdGFudDsKLSAgfQotICBmdW5jdGlvbiBkM19z
ZWxlY3Rpb25fY2xhc3NlZE5hbWUobmFtZSkgewotICAgIHZhciByZSA9IGQzX3NlbGVjdGlvbl9j
bGFzc2VkUmUobmFtZSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUsIHZhbHVlKSB7Ci0gICAg
ICBpZiAoYyA9IG5vZGUuY2xhc3NMaXN0KSByZXR1cm4gdmFsdWUgPyBjLmFkZChuYW1lKSA6IGMu
cmVtb3ZlKG5hbWUpOwotICAgICAgdmFyIGMgPSBub2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8
fCAiIjsKLSAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICByZS5sYXN0SW5kZXggPSAwOwotICAg
ICAgICBpZiAoIXJlLnRlc3QoYykpIG5vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGQzX2NvbGxh
cHNlKGMgKyAiICIgKyBuYW1lKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBub2RlLnNldEF0
dHJpYnV0ZSgiY2xhc3MiLCBkM19jb2xsYXBzZShjLnJlcGxhY2UocmUsICIgIikpKTsKLSAgICAg
IH0KLSAgICB9OwotICB9Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9u
KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkgewotICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDsK
LSAgICBpZiAobiA8IDMpIHsKLSAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gInN0cmluZyIpIHsK
LSAgICAgICAgaWYgKG4gPCAyKSB2YWx1ZSA9ICIiOwotICAgICAgICBmb3IgKHByaW9yaXR5IGlu
IG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUocHJpb3JpdHksIG5hbWVbcHJpb3Jp
dHldLCB2YWx1ZSkpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLSAgICAgIGlmIChu
IDwgMikgcmV0dXJuIGQzX3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSgpLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOwotICAgICAgcHJpb3JpdHkgPSAiIjsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fc3R5bGUobmFtZSwgdmFsdWUsIHByaW9y
aXR5KSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9zdHlsZShuYW1lLCB2YWx1ZSwg
cHJpb3JpdHkpIHsKLSAgICBmdW5jdGlvbiBzdHlsZU51bGwoKSB7Ci0gICAgICB0aGlzLnN0eWxl
LnJlbW92ZVByb3BlcnR5KG5hbWUpOwotICAgIH0KLSAgICBmdW5jdGlvbiBzdHlsZUNvbnN0YW50
KCkgewotICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkp
OwotICAgIH0KLSAgICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKCkgewotICAgICAgdmFyIHggPSB2
YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgaWYgKHggPT0gbnVsbCkgdGhpcy5z
dHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTsgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5h
bWUsIHgsIHByaW9yaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBzdHls
ZU51bGwgOiB0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIgPyBzdHlsZUZ1bmN0aW9uIDogc3R5
bGVDb25zdGFudDsKLSAgfQotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUucHJvcGVydHkgPSBmdW5j
dGlvbihuYW1lLCB2YWx1ZSkgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgewotICAg
ICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikgcmV0dXJuIHRoaXMubm9kZSgpW25hbWVd
OwotICAgICAgZm9yICh2YWx1ZSBpbiBuYW1lKSB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3Bl
cnR5KHZhbHVlLCBuYW1lW3ZhbHVlXSkpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAg
IHJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsIHZhbHVlKSk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9wcm9wZXJ0eShuYW1lLCB2YWx1ZSkgewotICAg
IGZ1bmN0aW9uIHByb3BlcnR5TnVsbCgpIHsKLSAgICAgIGRlbGV0ZSB0aGlzW25hbWVdOwotICAg
IH0KLSAgICBmdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KCkgewotICAgICAgdGhpc1tuYW1lXSA9
IHZhbHVlOwotICAgIH0KLSAgICBmdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKCkgewotICAgICAg
dmFyIHggPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgaWYgKHggPT0gbnVs
bCkgZGVsZXRlIHRoaXNbbmFtZV07IGVsc2UgdGhpc1tuYW1lXSA9IHg7Ci0gICAgfQotICAgIHJl
dHVybiB2YWx1ZSA9PSBudWxsID8gcHJvcGVydHlOdWxsIDogdHlwZW9mIHZhbHVlID09PSAiZnVu
Y3Rpb24iID8gcHJvcGVydHlGdW5jdGlvbiA6IHByb3BlcnR5Q29uc3RhbnQ7Ci0gIH0KLSAgZDNf
c2VsZWN0aW9uUHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHJldHVybiBh
cmd1bWVudHMubGVuZ3RoID8gdGhpcy5lYWNoKHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIiA/
IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/ICIiIDogdjsKLSAgICB9IDog
dmFsdWUgPT0gbnVsbCA/IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICIi
OwotICAgIH0gOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTsK
LSAgICB9KSA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50OwotICB9OwotICBkM19zZWxlY3Rpb25Q
cm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGggPyB0aGlzLmVhY2godHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iID8gZnVuY3Rpb24o
KSB7Ci0gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB0
aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/ICIiIDogdjsKLSAgICB9IDogdmFsdWUgPT0gbnVs
bCA/IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5pbm5lckhUTUwgPSAiIjsKLSAgICB9IDogZnVu
Y3Rpb24oKSB7Ci0gICAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlOwotICAgIH0pIDogdGhpcy5u
b2RlKCkuaW5uZXJIVE1MOwotICB9OwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kID0g
ZnVuY3Rpb24obmFtZSkgewotICAgIG5hbWUgPSBkM19zZWxlY3Rpb25fY3JlYXRvcihuYW1lKTsK
LSAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5h
cHBlbmRDaGlsZChuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwotICAgIH0pOwotICB9Owot
ICBmdW5jdGlvbiBkM19zZWxlY3Rpb25fY3JlYXRvcihuYW1lKSB7Ci0gICAgcmV0dXJuIHR5cGVv
ZiBuYW1lID09PSAiZnVuY3Rpb24iID8gbmFtZSA6IChuYW1lID0gZDMubnMucXVhbGlmeShuYW1l
KSkubG9jYWwgPyBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQu
Y3JlYXRlRWxlbWVudE5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwpOwotICAgIH0gOiBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRo
aXMubmFtZXNwYWNlVVJJLCBuYW1lKTsKLSAgICB9OwotICB9Ci0gIGQzX3NlbGVjdGlvblByb3Rv
dHlwZS5pbnNlcnQgPSBmdW5jdGlvbihuYW1lLCBiZWZvcmUpIHsKLSAgICBuYW1lID0gZDNfc2Vs
ZWN0aW9uX2NyZWF0b3IobmFtZSk7Ci0gICAgYmVmb3JlID0gZDNfc2VsZWN0aW9uX3NlbGVjdG9y
KGJlZm9yZSk7Ci0gICAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkgewotICAgICAgcmV0
dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5hbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgYmVmb3Jl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7Ci0gICAgfSk7Ci0gIH07Ci0gIGQzX3Nl
bGVjdGlvblByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKLSAg
ICAgIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTsKLSAgICB9KTsKLSAgfTsK
LSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0g
ICAgdmFyIGkgPSAtMSwgbiA9IHRoaXMubGVuZ3RoLCBncm91cCwgbm9kZTsKLSAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHsKLSAgICAgIHZhbHVlID0gbmV3IEFycmF5KG4gPSAoZ3JvdXAgPSB0
aGlzWzBdKS5sZW5ndGgpOwotICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgaWYgKG5v
ZGUgPSBncm91cFtpXSkgewotICAgICAgICAgIHZhbHVlW2ldID0gbm9kZS5fX2RhdGFfXzsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICBmdW5jdGlv
biBiaW5kKGdyb3VwLCBncm91cERhdGEpIHsKLSAgICAgIHZhciBpLCBuID0gZ3JvdXAubGVuZ3Ro
LCBtID0gZ3JvdXBEYXRhLmxlbmd0aCwgbjAgPSBNYXRoLm1pbihuLCBtKSwgdXBkYXRlTm9kZXMg
PSBuZXcgQXJyYXkobSksIGVudGVyTm9kZXMgPSBuZXcgQXJyYXkobSksIGV4aXROb2RlcyA9IG5l
dyBBcnJheShuKSwgbm9kZSwgbm9kZURhdGE7Ci0gICAgICBpZiAoa2V5KSB7Ci0gICAgICAgIHZh
ciBub2RlQnlLZXlWYWx1ZSA9IG5ldyBkM19NYXAoKSwgZGF0YUJ5S2V5VmFsdWUgPSBuZXcgZDNf
TWFwKCksIGtleVZhbHVlcyA9IFtdLCBrZXlWYWx1ZTsKLSAgICAgICAgZm9yIChpID0gLTE7ICsr
aSA8IG47ICkgewotICAgICAgICAgIGtleVZhbHVlID0ga2V5LmNhbGwobm9kZSA9IGdyb3VwW2ld
LCBub2RlLl9fZGF0YV9fLCBpKTsKLSAgICAgICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtl
eVZhbHVlKSkgewotICAgICAgICAgICAgZXhpdE5vZGVzW2ldID0gbm9kZTsKLSAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbm9kZUJ5S2V5VmFsdWUuc2V0KGtleVZhbHVlLCBub2RlKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAga2V5VmFsdWVzLnB1c2goa2V5VmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIGZvciAoaSA9IC0xOyArK2kgPCBtOyApIHsKLSAgICAgICAgICBrZXlWYWx1
ZSA9IGtleS5jYWxsKGdyb3VwRGF0YSwgbm9kZURhdGEgPSBncm91cERhdGFbaV0sIGkpOwotICAg
ICAgICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkgewotICAgICAg
ICAgICAgdXBkYXRlTm9kZXNbaV0gPSBub2RlOwotICAgICAgICAgICAgbm9kZS5fX2RhdGFfXyA9
IG5vZGVEYXRhOwotICAgICAgICAgIH0gZWxzZSBpZiAoIWRhdGFCeUtleVZhbHVlLmhhcyhrZXlW
YWx1ZSkpIHsKLSAgICAgICAgICAgIGVudGVyTm9kZXNbaV0gPSBkM19zZWxlY3Rpb25fZGF0YU5v
ZGUobm9kZURhdGEpOwotICAgICAgICAgIH0KLSAgICAgICAgICBkYXRhQnlLZXlWYWx1ZS5zZXQo
a2V5VmFsdWUsIG5vZGVEYXRhKTsKLSAgICAgICAgICBub2RlQnlLZXlWYWx1ZS5yZW1vdmUoa2V5
VmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IC0xOyArK2kgPCBuOyApIHsKLSAg
ICAgICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlc1tpXSkpIHsKLSAgICAgICAg
ICAgIGV4aXROb2Rlc1tpXSA9IGdyb3VwW2ldOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gLTE7ICsraSA8IG4wOyApIHsKLSAgICAgICAg
ICBub2RlID0gZ3JvdXBbaV07Ci0gICAgICAgICAgbm9kZURhdGEgPSBncm91cERhdGFbaV07Ci0g
ICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIG5vZGUuX19kYXRhX18gPSBub2RlRGF0
YTsKLSAgICAgICAgICAgIHVwZGF0ZU5vZGVzW2ldID0gbm9kZTsKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZW50ZXJOb2Rlc1tpXSA9IGQzX3NlbGVjdGlvbl9kYXRhTm9kZShub2Rl
RGF0YSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoO2kgPCBtOyArK2kp
IHsKLSAgICAgICAgICBlbnRlck5vZGVzW2ldID0gZDNfc2VsZWN0aW9uX2RhdGFOb2RlKGdyb3Vw
RGF0YVtpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7aSA8IG47ICsraSkgewotICAgICAg
ICAgIGV4aXROb2Rlc1tpXSA9IGdyb3VwW2ldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBl
bnRlck5vZGVzLnVwZGF0ZSA9IHVwZGF0ZU5vZGVzOwotICAgICAgZW50ZXJOb2Rlcy5wYXJlbnRO
b2RlID0gdXBkYXRlTm9kZXMucGFyZW50Tm9kZSA9IGV4aXROb2Rlcy5wYXJlbnROb2RlID0gZ3Jv
dXAucGFyZW50Tm9kZTsKLSAgICAgIGVudGVyLnB1c2goZW50ZXJOb2Rlcyk7Ci0gICAgICB1cGRh
dGUucHVzaCh1cGRhdGVOb2Rlcyk7Ci0gICAgICBleGl0LnB1c2goZXhpdE5vZGVzKTsKLSAgICB9
Ci0gICAgdmFyIGVudGVyID0gZDNfc2VsZWN0aW9uX2VudGVyKFtdKSwgdXBkYXRlID0gZDNfc2Vs
ZWN0aW9uKFtdKSwgZXhpdCA9IGQzX3NlbGVjdGlvbihbXSk7Ci0gICAgaWYgKHR5cGVvZiB2YWx1
ZSA9PT0gImZ1bmN0aW9uIikgewotICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgYmlu
ZChncm91cCA9IHRoaXNbaV0sIHZhbHVlLmNhbGwoZ3JvdXAsIGdyb3VwLnBhcmVudE5vZGUuX19k
YXRhX18sIGkpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgd2hpbGUgKCsraSA8IG4p
IHsKLSAgICAgICAgYmluZChncm91cCA9IHRoaXNbaV0sIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgdXBkYXRlLmVudGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZW50ZXI7Ci0g
ICAgfTsKLSAgICB1cGRhdGUuZXhpdCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGV4aXQ7
Ci0gICAgfTsKLSAgICByZXR1cm4gdXBkYXRlOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxlY3Rp
b25fZGF0YU5vZGUoZGF0YSkgewotICAgIHJldHVybiB7Ci0gICAgICBfX2RhdGFfXzogZGF0YQot
ICAgIH07Ci0gIH0KLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLmRhdHVtID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMucHJvcGVydHkoIl9fZGF0
YV9fIiwgdmFsdWUpIDogdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKTsKLSAgfTsKLSAgZDNfc2Vs
ZWN0aW9uUHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlcikgewotICAgIHZhciBzdWJn
cm91cHMgPSBbXSwgc3ViZ3JvdXAsIGdyb3VwLCBub2RlOwotICAgIGlmICh0eXBlb2YgZmlsdGVy
ICE9PSAiZnVuY3Rpb24iKSBmaWx0ZXIgPSBkM19zZWxlY3Rpb25fZmlsdGVyKGZpbHRlcik7Ci0g
ICAgZm9yICh2YXIgaiA9IDAsIG0gPSB0aGlzLmxlbmd0aDsgaiA8IG07IGorKykgewotICAgICAg
c3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBbXSk7Ci0gICAgICBzdWJncm91cC5wYXJlbnROb2Rl
ID0gKGdyb3VwID0gdGhpc1tqXSkucGFyZW50Tm9kZTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBu
ID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmICgobm9kZSA9IGdyb3Vw
W2ldKSAmJiBmaWx0ZXIuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKSkgewotICAgICAg
ICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGQzX3NlbGVjdGlvbihzdWJncm91cHMpOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxl
Y3Rpb25fZmlsdGVyKHNlbGVjdG9yKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIGQzX3NlbGVjdE1hdGNoZXModGhpcywgc2VsZWN0b3IpOwotICAgIH07Ci0gIH0KLSAg
ZDNfc2VsZWN0aW9uUHJvdG90eXBlLm9yZGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgZm9yICh2YXIg
aiA9IC0xLCBtID0gdGhpcy5sZW5ndGg7ICsraiA8IG07ICkgewotICAgICAgZm9yICh2YXIgZ3Jv
dXAgPSB0aGlzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2Rl
OyAtLWkgPj0gMDsgKSB7Ci0gICAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHsKLSAgICAgICAg
ICBpZiAobmV4dCAmJiBuZXh0ICE9PSBub2RlLm5leHRTaWJsaW5nKSBuZXh0LnBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpOwotICAgICAgICAgIG5leHQgPSBub2RlOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICB9OwotICBkM19zZWxlY3Rp
b25Qcm90b3R5cGUuc29ydCA9IGZ1bmN0aW9uKGNvbXBhcmF0b3IpIHsKLSAgICBjb21wYXJhdG9y
ID0gZDNfc2VsZWN0aW9uX3NvcnRDb21wYXJhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0g
ICAgZm9yICh2YXIgaiA9IC0xLCBtID0gdGhpcy5sZW5ndGg7ICsraiA8IG07ICkgdGhpc1tqXS5z
b3J0KGNvbXBhcmF0b3IpOwotICAgIHJldHVybiB0aGlzLm9yZGVyKCk7Ci0gIH07Ci0gIGZ1bmN0
aW9uIGQzX3NlbGVjdGlvbl9zb3J0Q29tcGFyYXRvcihjb21wYXJhdG9yKSB7Ci0gICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSBjb21wYXJhdG9yID0gZDNfYXNjZW5kaW5nOwotICAgIHJldHVybiBm
dW5jdGlvbihhLCBiKSB7Ci0gICAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyYXRvcihhLl9fZGF0
YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7Ci0gICAgfTsKLSAgfQotICBkM19zZWxlY3Rpb25Q
cm90b3R5cGUuZWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJuIGQzX3NlbGVj
dGlvbl9lYWNoKHRoaXMsIGZ1bmN0aW9uKG5vZGUsIGksIGopIHsKLSAgICAgIGNhbGxiYWNrLmNh
bGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgaik7Ci0gICAgfSk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IGQzX3NlbGVjdGlvbl9lYWNoKGdyb3VwcywgY2FsbGJhY2spIHsKLSAgICBmb3IgKHZhciBqID0g
MCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyBqKyspIHsKLSAgICAgIGZvciAodmFyIGdyb3Vw
ID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47IGkrKykg
ewotICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjayhub2RlLCBpLCBqKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGdyb3VwczsKLSAgfQotICBkM19zZWxlY3Rpb25Qcm90
b3R5cGUuY2FsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgdmFyIGFyZ3MgPSBkM19hcnJh
eShhcmd1bWVudHMpOwotICAgIGNhbGxiYWNrLmFwcGx5KGFyZ3NbMF0gPSB0aGlzLCBhcmdzKTsK
LSAgICByZXR1cm4gdGhpczsKLSAgfTsKLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLmVtcHR5ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICF0aGlzLm5vZGUoKTsKLSAgfTsKLSAgZDNfc2VsZWN0
aW9uUHJvdG90eXBlLm5vZGUgPSBmdW5jdGlvbigpIHsKLSAgICBmb3IgKHZhciBqID0gMCwgbSA9
IHRoaXMubGVuZ3RoOyBqIDwgbTsgaisrKSB7Ci0gICAgICBmb3IgKHZhciBncm91cCA9IHRoaXNb
al0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHZhciBu
b2RlID0gZ3JvdXBbaV07Ci0gICAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH07Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5z
aXplID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG4gPSAwOwotICAgIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKLSAgICAgICsrbjsKLSAgICB9KTsKLSAgICByZXR1cm4gbjsKLSAgfTsKLSAgZnVuY3Rp
b24gZDNfc2VsZWN0aW9uX2VudGVyKHNlbGVjdGlvbikgewotICAgIGQzX3N1YmNsYXNzKHNlbGVj
dGlvbiwgZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlKTsKLSAgICByZXR1cm4gc2VsZWN0aW9u
OwotICB9Ci0gIHZhciBkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUgPSBbXTsKLSAgZDMuc2Vs
ZWN0aW9uLmVudGVyID0gZDNfc2VsZWN0aW9uX2VudGVyOwotICBkMy5zZWxlY3Rpb24uZW50ZXIu
cHJvdG90eXBlID0gZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlOwotICBkM19zZWxlY3Rpb25f
ZW50ZXJQcm90b3R5cGUuYXBwZW5kID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmFwcGVuZDsKLSAg
ZDNfc2VsZWN0aW9uX2VudGVyUHJvdG90eXBlLmVtcHR5ID0gZDNfc2VsZWN0aW9uUHJvdG90eXBl
LmVtcHR5OwotICBkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUubm9kZSA9IGQzX3NlbGVjdGlv
blByb3RvdHlwZS5ub2RlOwotICBkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUuY2FsbCA9IGQz
X3NlbGVjdGlvblByb3RvdHlwZS5jYWxsOwotICBkM19zZWxlY3Rpb25fZW50ZXJQcm90b3R5cGUu
c2l6ZSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5zaXplOwotICBkM19zZWxlY3Rpb25fZW50ZXJQ
cm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKLSAgICB2YXIgc3ViZ3JvdXBz
ID0gW10sIHN1Ymdyb3VwLCBzdWJub2RlLCB1cGdyb3VwLCBncm91cCwgbm9kZTsKLSAgICBmb3Ig
KHZhciBqID0gLTEsIG0gPSB0aGlzLmxlbmd0aDsgKytqIDwgbTsgKSB7Ci0gICAgICB1cGdyb3Vw
ID0gKGdyb3VwID0gdGhpc1tqXSkudXBkYXRlOwotICAgICAgc3ViZ3JvdXBzLnB1c2goc3ViZ3Jv
dXAgPSBbXSk7Ci0gICAgICBzdWJncm91cC5wYXJlbnROb2RlID0gZ3JvdXAucGFyZW50Tm9kZTsK
LSAgICAgIGZvciAodmFyIGkgPSAtMSwgbiA9IGdyb3VwLmxlbmd0aDsgKytpIDwgbjsgKSB7Ci0g
ICAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHsKLSAgICAgICAgICBzdWJncm91cC5wdXNoKHVw
Z3JvdXBbaV0gPSBzdWJub2RlID0gc2VsZWN0b3IuY2FsbChncm91cC5wYXJlbnROb2RlLCBub2Rl
Ll9fZGF0YV9fLCBpLCBqKSk7Ci0gICAgICAgICAgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19k
YXRhX187Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3ViZ3JvdXAucHVzaChudWxsKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uKHN1Ymdy
b3Vwcyk7Ci0gIH07Ci0gIGQzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5pbnNlcnQgPSBmdW5j
dGlvbihuYW1lLCBiZWZvcmUpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIGJlZm9y
ZSA9IGQzX3NlbGVjdGlvbl9lbnRlckluc2VydEJlZm9yZSh0aGlzKTsKLSAgICByZXR1cm4gZDNf
c2VsZWN0aW9uUHJvdG90eXBlLmluc2VydC5jYWxsKHRoaXMsIG5hbWUsIGJlZm9yZSk7Ci0gIH07
Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9lbnRlckluc2VydEJlZm9yZShlbnRlcikgewotICAg
IHZhciBpMCwgajA7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIGksIGopIHsKLSAgICAgIHZhciBn
cm91cCA9IGVudGVyW2pdLnVwZGF0ZSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsKLSAgICAgIGlm
IChqICE9IGowKSBqMCA9IGosIGkwID0gMDsKLSAgICAgIGlmIChpID49IGkwKSBpMCA9IGkgKyAx
OwotICAgICAgd2hpbGUgKCEobm9kZSA9IGdyb3VwW2kwXSkgJiYgKytpMCA8IG4pIDsKLSAgICAg
IHJldHVybiBub2RlOwotICAgIH07Ci0gIH0KLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLnRyYW5z
aXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgaWQgPSBkM190cmFuc2l0aW9uSW5oZXJpdElk
IHx8ICsrZDNfdHJhbnNpdGlvbklkLCBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIG5vZGUsIHRy
YW5zaXRpb24gPSBkM190cmFuc2l0aW9uSW5oZXJpdCB8fCB7Ci0gICAgICB0aW1lOiBEYXRlLm5v
dygpLAotICAgICAgZWFzZTogZDNfZWFzZV9jdWJpY0luT3V0LAotICAgICAgZGVsYXk6IDAsCi0g
ICAgICBkdXJhdGlvbjogMjUwCi0gICAgfTsKLSAgICBmb3IgKHZhciBqID0gLTEsIG0gPSB0aGlz
Lmxlbmd0aDsgKytqIDwgbTsgKSB7Ci0gICAgICBzdWJncm91cHMucHVzaChzdWJncm91cCA9IFtd
KTsKLSAgICAgIGZvciAodmFyIGdyb3VwID0gdGhpc1tqXSwgaSA9IC0xLCBuID0gZ3JvdXAubGVu
Z3RoOyArK2kgPCBuOyApIHsKLSAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgZDNfdHJhbnNp
dGlvbk5vZGUobm9kZSwgaSwgaWQsIHRyYW5zaXRpb24pOwotICAgICAgICBzdWJncm91cC5wdXNo
KG5vZGUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZDNfdHJhbnNpdGlvbihzdWJncm91
cHMsIGlkKTsKLSAgfTsKLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLmludGVycnVwdCA9IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiB0aGlzLmVhY2goZDNfc2VsZWN0aW9uX2ludGVycnVwdCk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9pbnRlcnJ1cHQoKSB7Ci0gICAgdmFyIGxvY2sg
PSB0aGlzLl9fdHJhbnNpdGlvbl9fOwotICAgIGlmIChsb2NrKSArK2xvY2suYWN0aXZlOwotICB9
Ci0gIGQzLnNlbGVjdCA9IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICB2YXIgZ3JvdXAgPSBbIHR5cGVv
ZiBub2RlID09PSAic3RyaW5nIiA/IGQzX3NlbGVjdChub2RlLCBkM19kb2N1bWVudCkgOiBub2Rl
IF07Ci0gICAgZ3JvdXAucGFyZW50Tm9kZSA9IGQzX2RvY3VtZW50RWxlbWVudDsKLSAgICByZXR1
cm4gZDNfc2VsZWN0aW9uKFsgZ3JvdXAgXSk7Ci0gIH07Ci0gIGQzLnNlbGVjdEFsbCA9IGZ1bmN0
aW9uKG5vZGVzKSB7Ci0gICAgdmFyIGdyb3VwID0gZDNfYXJyYXkodHlwZW9mIG5vZGVzID09PSAi
c3RyaW5nIiA/IGQzX3NlbGVjdEFsbChub2RlcywgZDNfZG9jdW1lbnQpIDogbm9kZXMpOwotICAg
IGdyb3VwLnBhcmVudE5vZGUgPSBkM19kb2N1bWVudEVsZW1lbnQ7Ci0gICAgcmV0dXJuIGQzX3Nl
bGVjdGlvbihbIGdyb3VwIF0pOwotICB9OwotICB2YXIgZDNfc2VsZWN0aW9uUm9vdCA9IGQzLnNl
bGVjdChkM19kb2N1bWVudEVsZW1lbnQpOwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUub24gPSBm
dW5jdGlvbih0eXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkgewotICAgIHZhciBuID0gYXJndW1lbnRz
Lmxlbmd0aDsKLSAgICBpZiAobiA8IDMpIHsKLSAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gInN0
cmluZyIpIHsKLSAgICAgICAgaWYgKG4gPCAyKSBsaXN0ZW5lciA9IGZhbHNlOwotICAgICAgICBm
b3IgKGNhcHR1cmUgaW4gdHlwZSkgdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9vbihjYXB0dXJlLCB0
eXBlW2NhcHR1cmVdLCBsaXN0ZW5lcikpOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0K
LSAgICAgIGlmIChuIDwgMikgcmV0dXJuIChuID0gdGhpcy5ub2RlKClbIl9fb24iICsgdHlwZV0p
ICYmIG4uXzsKLSAgICAgIGNhcHR1cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMu
ZWFjaChkM19zZWxlY3Rpb25fb24odHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpKTsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfc2VsZWN0aW9uX29uKHR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKSB7Ci0gICAg
dmFyIG5hbWUgPSAiX19vbiIgKyB0eXBlLCBpID0gdHlwZS5pbmRleE9mKCIuIiksIHdyYXAgPSBk
M19zZWxlY3Rpb25fb25MaXN0ZW5lcjsKLSAgICBpZiAoaSA+IDApIHR5cGUgPSB0eXBlLnN1YnN0
cmluZygwLCBpKTsKLSAgICB2YXIgZmlsdGVyID0gZDNfc2VsZWN0aW9uX29uRmlsdGVycy5nZXQo
dHlwZSk7Ci0gICAgaWYgKGZpbHRlcikgdHlwZSA9IGZpbHRlciwgd3JhcCA9IGQzX3NlbGVjdGlv
bl9vbkZpbHRlcjsKLSAgICBmdW5jdGlvbiBvblJlbW92ZSgpIHsKLSAgICAgIHZhciBsID0gdGhp
c1tuYW1lXTsKLSAgICAgIGlmIChsKSB7Ci0gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5l
cih0eXBlLCBsLCBsLiQpOwotICAgICAgICBkZWxldGUgdGhpc1tuYW1lXTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgZnVuY3Rpb24gb25BZGQoKSB7Ci0gICAgICB2YXIgbCA9IHdyYXAobGlzdGVuZXIs
IGQzX2FycmF5KGFyZ3VtZW50cykpOwotICAgICAgb25SZW1vdmUuY2FsbCh0aGlzKTsKLSAgICAg
IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW25hbWVdID0gbCwgbC4kID0gY2FwdHVy
ZSk7Ci0gICAgICBsLl8gPSBsaXN0ZW5lcjsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVtb3ZlQWxs
KCkgewotICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIiArIGQzLnJlcXVv
dGUodHlwZSkgKyAiJCIpLCBtYXRjaDsKLSAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykgewot
ICAgICAgICBpZiAobWF0Y2ggPSBuYW1lLm1hdGNoKHJlKSkgewotICAgICAgICAgIHZhciBsID0g
dGhpc1tuYW1lXTsKLSAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobWF0Y2hbMV0s
IGwsIGwuJCk7Ci0gICAgICAgICAgZGVsZXRlIHRoaXNbbmFtZV07Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGkgPyBsaXN0ZW5lciA/IG9uQWRkIDogb25SZW1vdmUgOiBs
aXN0ZW5lciA/IGQzX25vb3AgOiByZW1vdmVBbGw7Ci0gIH0KLSAgdmFyIGQzX3NlbGVjdGlvbl9v
bkZpbHRlcnMgPSBkMy5tYXAoewotICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAotICAgIG1v
dXNlbGVhdmU6ICJtb3VzZW91dCIKLSAgfSk7Ci0gIGQzX3NlbGVjdGlvbl9vbkZpbHRlcnMuZm9y
RWFjaChmdW5jdGlvbihrKSB7Ci0gICAgaWYgKCJvbiIgKyBrIGluIGQzX2RvY3VtZW50KSBkM19z
ZWxlY3Rpb25fb25GaWx0ZXJzLnJlbW92ZShrKTsKLSAgfSk7Ci0gIGZ1bmN0aW9uIGQzX3NlbGVj
dGlvbl9vbkxpc3RlbmVyKGxpc3RlbmVyLCBhcmd1bWVudHopIHsKLSAgICByZXR1cm4gZnVuY3Rp
b24oZSkgewotICAgICAgdmFyIG8gPSBkMy5ldmVudDsKLSAgICAgIGQzLmV2ZW50ID0gZTsKLSAg
ICAgIGFyZ3VtZW50elswXSA9IHRoaXMuX19kYXRhX187Ci0gICAgICB0cnkgewotICAgICAgICBs
aXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHopOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAg
ICAgZDMuZXZlbnQgPSBvOwotICAgICAgfQotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2Vs
ZWN0aW9uX29uRmlsdGVyKGxpc3RlbmVyLCBhcmd1bWVudHopIHsKLSAgICB2YXIgbCA9IGQzX3Nl
bGVjdGlvbl9vbkxpc3RlbmVyKGxpc3RlbmVyLCBhcmd1bWVudHopOwotICAgIHJldHVybiBmdW5j
dGlvbihlKSB7Ci0gICAgICB2YXIgdGFyZ2V0ID0gdGhpcywgcmVsYXRlZCA9IGUucmVsYXRlZFRh
cmdldDsKLSAgICAgIGlmICghcmVsYXRlZCB8fCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIShyZWxh
dGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRhcmdldCkgJiA4KSkgewotICAgICAgICBsLmNh
bGwodGFyZ2V0LCBlKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0gIHZhciBkM19ldmVudF9kcmFn
U2VsZWN0ID0gIm9uc2VsZWN0c3RhcnQiIGluIGQzX2RvY3VtZW50ID8gbnVsbCA6IGQzX3ZlbmRv
clN5bWJvbChkM19kb2N1bWVudEVsZW1lbnQuc3R5bGUsICJ1c2VyU2VsZWN0IiksIGQzX2V2ZW50
X2RyYWdJZCA9IDA7Ci0gIGZ1bmN0aW9uIGQzX2V2ZW50X2RyYWdTdXBwcmVzcygpIHsKLSAgICB2
YXIgbmFtZSA9ICIuZHJhZ3N1cHByZXNzLSIgKyArK2QzX2V2ZW50X2RyYWdJZCwgY2xpY2sgPSAi
Y2xpY2siICsgbmFtZSwgdyA9IGQzLnNlbGVjdChkM193aW5kb3cpLm9uKCJ0b3VjaG1vdmUiICsg
bmFtZSwgZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCkub24oImRyYWdzdGFydCIgKyBuYW1lLCBkM19l
dmVudFByZXZlbnREZWZhdWx0KS5vbigic2VsZWN0c3RhcnQiICsgbmFtZSwgZDNfZXZlbnRQcmV2
ZW50RGVmYXVsdCk7Ci0gICAgaWYgKGQzX2V2ZW50X2RyYWdTZWxlY3QpIHsKLSAgICAgIHZhciBz
dHlsZSA9IGQzX2RvY3VtZW50RWxlbWVudC5zdHlsZSwgc2VsZWN0ID0gc3R5bGVbZDNfZXZlbnRf
ZHJhZ1NlbGVjdF07Ci0gICAgICBzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XSA9ICJub25lIjsK
LSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHN1cHByZXNzQ2xpY2spIHsKLSAgICAgIHcub24o
bmFtZSwgbnVsbCk7Ci0gICAgICBpZiAoZDNfZXZlbnRfZHJhZ1NlbGVjdCkgc3R5bGVbZDNfZXZl
bnRfZHJhZ1NlbGVjdF0gPSBzZWxlY3Q7Ci0gICAgICBpZiAoc3VwcHJlc3NDbGljaykgewotICAg
ICAgICBmdW5jdGlvbiBvZmYoKSB7Ci0gICAgICAgICAgdy5vbihjbGljaywgbnVsbCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdy5vbihjbGljaywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgZDNfZXZl
bnRQcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgIG9mZigpOwotICAgICAgICB9LCB0cnVlKTsK
LSAgICAgICAgc2V0VGltZW91dChvZmYsIDApOwotICAgICAgfQotICAgIH07Ci0gIH0KLSAgZDMu
bW91c2UgPSBmdW5jdGlvbihjb250YWluZXIpIHsKLSAgICByZXR1cm4gZDNfbW91c2VQb2ludChj
b250YWluZXIsIGQzX2V2ZW50U291cmNlKCkpOwotICB9OwotICB2YXIgZDNfbW91c2VfYnVnNDQw
ODMgPSAvV2ViS2l0Ly50ZXN0KGQzX3dpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSA/IC0xIDog
MDsKLSAgZnVuY3Rpb24gZDNfbW91c2VQb2ludChjb250YWluZXIsIGUpIHsKLSAgICBpZiAoZS5j
aGFuZ2VkVG91Y2hlcykgZSA9IGUuY2hhbmdlZFRvdWNoZXNbMF07Ci0gICAgdmFyIHN2ZyA9IGNv
bnRhaW5lci5vd25lclNWR0VsZW1lbnQgfHwgY29udGFpbmVyOwotICAgIGlmIChzdmcuY3JlYXRl
U1ZHUG9pbnQpIHsKLSAgICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpOwotICAg
ICAgaWYgKGQzX21vdXNlX2J1ZzQ0MDgzIDwgMCAmJiAoZDNfd2luZG93LnNjcm9sbFggfHwgZDNf
d2luZG93LnNjcm9sbFkpKSB7Ci0gICAgICAgIHN2ZyA9IGQzLnNlbGVjdCgiYm9keSIpLmFwcGVu
ZCgic3ZnIikuc3R5bGUoewotICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAotICAgICAg
ICAgIHRvcDogMCwKLSAgICAgICAgICBsZWZ0OiAwLAotICAgICAgICAgIG1hcmdpbjogMCwKLSAg
ICAgICAgICBwYWRkaW5nOiAwLAotICAgICAgICAgIGJvcmRlcjogIm5vbmUiCi0gICAgICAgIH0s
ICJpbXBvcnRhbnQiKTsKLSAgICAgICAgdmFyIGN0bSA9IHN2Z1swXVswXS5nZXRTY3JlZW5DVE0o
KTsKLSAgICAgICAgZDNfbW91c2VfYnVnNDQwODMgPSAhKGN0bS5mIHx8IGN0bS5lKTsKLSAgICAg
ICAgc3ZnLnJlbW92ZSgpOwotICAgICAgfQotICAgICAgaWYgKGQzX21vdXNlX2J1ZzQ0MDgzKSBw
b2ludC54ID0gZS5wYWdlWCwgcG9pbnQueSA9IGUucGFnZVk7IGVsc2UgcG9pbnQueCA9IGUuY2xp
ZW50WCwgCi0gICAgICBwb2ludC55ID0gZS5jbGllbnRZOwotICAgICAgcG9pbnQgPSBwb2ludC5t
YXRyaXhUcmFuc2Zvcm0oY29udGFpbmVyLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7Ci0gICAg
ICByZXR1cm4gWyBwb2ludC54LCBwb2ludC55IF07Ci0gICAgfQotICAgIHZhciByZWN0ID0gY29u
dGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIHJldHVybiBbIGUuY2xpZW50WCAt
IHJlY3QubGVmdCAtIGNvbnRhaW5lci5jbGllbnRMZWZ0LCBlLmNsaWVudFkgLSByZWN0LnRvcCAt
IGNvbnRhaW5lci5jbGllbnRUb3AgXTsKLSAgfQotICBkMy50b3VjaGVzID0gZnVuY3Rpb24oY29u
dGFpbmVyLCB0b3VjaGVzKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB0b3VjaGVz
ID0gZDNfZXZlbnRTb3VyY2UoKS50b3VjaGVzOwotICAgIHJldHVybiB0b3VjaGVzID8gZDNfYXJy
YXkodG91Y2hlcykubWFwKGZ1bmN0aW9uKHRvdWNoKSB7Ci0gICAgICB2YXIgcG9pbnQgPSBkM19t
b3VzZVBvaW50KGNvbnRhaW5lciwgdG91Y2gpOwotICAgICAgcG9pbnQuaWRlbnRpZmllciA9IHRv
dWNoLmlkZW50aWZpZXI7Ci0gICAgICByZXR1cm4gcG9pbnQ7Ci0gICAgfSkgOiBbXTsKLSAgfTsK
LSAgZDMuYmVoYXZpb3IuZHJhZyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBldmVudCA9IGQzX2V2
ZW50RGlzcGF0Y2goZHJhZywgImRyYWciLCAiZHJhZ3N0YXJ0IiwgImRyYWdlbmQiKSwgb3JpZ2lu
ID0gbnVsbCwgbW91c2Vkb3duID0gZHJhZ3N0YXJ0KGQzX25vb3AsIGQzLm1vdXNlLCBkM19iZWhh
dmlvcl9kcmFnTW91c2VTdWJqZWN0LCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiKSwgdG91Y2hzdGFy
dCA9IGRyYWdzdGFydChkM19iZWhhdmlvcl9kcmFnVG91Y2hJZCwgZDMudG91Y2gsIGQzX2JlaGF2
aW9yX2RyYWdUb3VjaFN1YmplY3QsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiKTsKLSAgICBmdW5j
dGlvbiBkcmFnKCkgewotICAgICAgdGhpcy5vbigibW91c2Vkb3duLmRyYWciLCBtb3VzZWRvd24p
Lm9uKCJ0b3VjaHN0YXJ0LmRyYWciLCB0b3VjaHN0YXJ0KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
ZHJhZ3N0YXJ0KGlkLCBwb3NpdGlvbiwgc3ViamVjdCwgbW92ZSwgZW5kKSB7Ci0gICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciB0aGF0ID0gdGhpcywgdGFyZ2V0ID0gZDMuZXZl
bnQudGFyZ2V0LCBwYXJlbnQgPSB0aGF0LnBhcmVudE5vZGUsIGRpc3BhdGNoID0gZXZlbnQub2Yo
dGhhdCwgYXJndW1lbnRzKSwgZHJhZ2dlZCA9IDAsIGRyYWdJZCA9IGlkKCksIGRyYWdOYW1lID0g
Ii5kcmFnIiArIChkcmFnSWQgPT0gbnVsbCA/ICIiIDogIi0iICsgZHJhZ0lkKSwgZHJhZ09mZnNl
dCwgZHJhZ1N1YmplY3QgPSBkMy5zZWxlY3Qoc3ViamVjdCgpKS5vbihtb3ZlICsgZHJhZ05hbWUs
IG1vdmVkKS5vbihlbmQgKyBkcmFnTmFtZSwgZW5kZWQpLCBkcmFnUmVzdG9yZSA9IGQzX2V2ZW50
X2RyYWdTdXBwcmVzcygpLCBwb3NpdGlvbjAgPSBwb3NpdGlvbihwYXJlbnQsIGRyYWdJZCk7Ci0g
ICAgICAgIGlmIChvcmlnaW4pIHsKLSAgICAgICAgICBkcmFnT2Zmc2V0ID0gb3JpZ2luLmFwcGx5
KHRoYXQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgZHJhZ09mZnNldCA9IFsgZHJhZ09mZnNldC54
IC0gcG9zaXRpb24wWzBdLCBkcmFnT2Zmc2V0LnkgLSBwb3NpdGlvbjBbMV0gXTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBkcmFnT2Zmc2V0ID0gWyAwLCAwIF07Ci0gICAgICAgIH0KLSAg
ICAgICAgZGlzcGF0Y2goewotICAgICAgICAgIHR5cGU6ICJkcmFnc3RhcnQiCi0gICAgICAgIH0p
OwotICAgICAgICBmdW5jdGlvbiBtb3ZlZCgpIHsKLSAgICAgICAgICB2YXIgcG9zaXRpb24xID0g
cG9zaXRpb24ocGFyZW50LCBkcmFnSWQpLCBkeCwgZHk7Ci0gICAgICAgICAgaWYgKCFwb3NpdGlv
bjEpIHJldHVybjsKLSAgICAgICAgICBkeCA9IHBvc2l0aW9uMVswXSAtIHBvc2l0aW9uMFswXTsK
LSAgICAgICAgICBkeSA9IHBvc2l0aW9uMVsxXSAtIHBvc2l0aW9uMFsxXTsKLSAgICAgICAgICBk
cmFnZ2VkIHw9IGR4IHwgZHk7Ci0gICAgICAgICAgcG9zaXRpb24wID0gcG9zaXRpb24xOwotICAg
ICAgICAgIGRpc3BhdGNoKHsKLSAgICAgICAgICAgIHR5cGU6ICJkcmFnIiwKLSAgICAgICAgICAg
IHg6IHBvc2l0aW9uMVswXSArIGRyYWdPZmZzZXRbMF0sCi0gICAgICAgICAgICB5OiBwb3NpdGlv
bjFbMV0gKyBkcmFnT2Zmc2V0WzFdLAotICAgICAgICAgICAgZHg6IGR4LAotICAgICAgICAgICAg
ZHk6IGR5Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gZW5kZWQo
KSB7Ci0gICAgICAgICAgaWYgKCFwb3NpdGlvbihwYXJlbnQsIGRyYWdJZCkpIHJldHVybjsKLSAg
ICAgICAgICBkcmFnU3ViamVjdC5vbihtb3ZlICsgZHJhZ05hbWUsIG51bGwpLm9uKGVuZCArIGRy
YWdOYW1lLCBudWxsKTsKLSAgICAgICAgICBkcmFnUmVzdG9yZShkcmFnZ2VkICYmIGQzLmV2ZW50
LnRhcmdldCA9PT0gdGFyZ2V0KTsKLSAgICAgICAgICBkaXNwYXRjaCh7Ci0gICAgICAgICAgICB0
eXBlOiAiZHJhZ2VuZCIKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9
Ci0gICAgZHJhZy5vcmlnaW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBvcmlnaW47Ci0gICAgICBvcmlnaW4gPSB4OwotICAgICAgcmV0dXJuIGRy
YWc7Ci0gICAgfTsKLSAgICByZXR1cm4gZDMucmViaW5kKGRyYWcsIGV2ZW50LCAib24iKTsKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfYmVoYXZpb3JfZHJhZ1RvdWNoSWQoKSB7Ci0gICAgcmV0dXJuIGQz
LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXI7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
YmVoYXZpb3JfZHJhZ1RvdWNoU3ViamVjdCgpIHsKLSAgICByZXR1cm4gZDMuZXZlbnQudGFyZ2V0
OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2JlaGF2aW9yX2RyYWdNb3VzZVN1YmplY3QoKSB7Ci0gICAg
cmV0dXJuIGQzX3dpbmRvdzsKLSAgfQotICB2YXIgz4AgPSBNYXRoLlBJLCDPhCA9IDIgKiDPgCwg
aGFsZs+AID0gz4AgLyAyLCDOtSA9IDFlLTYsIM61MiA9IM61ICogzrUsIGQzX3JhZGlhbnMgPSDP
gCAvIDE4MCwgZDNfZGVncmVlcyA9IDE4MCAvIM+AOwotICBmdW5jdGlvbiBkM19zZ24oeCkgewot
ICAgIHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsKLSAgfQotICBmdW5jdGlvbiBk
M19jcm9zczJkKGEsIGIsIGMpIHsKLSAgICByZXR1cm4gKGJbMF0gLSBhWzBdKSAqIChjWzFdIC0g
YVsxXSkgLSAoYlsxXSAtIGFbMV0pICogKGNbMF0gLSBhWzBdKTsKLSAgfQotICBmdW5jdGlvbiBk
M19hY29zKHgpIHsKLSAgICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gz4AgOiBNYXRoLmFj
b3MoeCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfYXNpbih4KSB7Ci0gICAgcmV0dXJuIHggPiAxID8g
aGFsZs+AIDogeCA8IC0xID8gLWhhbGbPgCA6IE1hdGguYXNpbih4KTsKLSAgfQotICBmdW5jdGlv
biBkM19zaW5oKHgpIHsKLSAgICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpIC0gMSAvIHgpIC8g
MjsKLSAgfQotICBmdW5jdGlvbiBkM19jb3NoKHgpIHsKLSAgICByZXR1cm4gKCh4ID0gTWF0aC5l
eHAoeCkpICsgMSAvIHgpIC8gMjsKLSAgfQotICBmdW5jdGlvbiBkM190YW5oKHgpIHsKLSAgICBy
ZXR1cm4gKCh4ID0gTWF0aC5leHAoMiAqIHgpKSAtIDEpIC8gKHggKyAxKTsKLSAgfQotICBmdW5j
dGlvbiBkM19oYXZlcnNpbih4KSB7Ci0gICAgcmV0dXJuICh4ID0gTWF0aC5zaW4oeCAvIDIpKSAq
IHg7Ci0gIH0KLSAgdmFyIM+BID0gTWF0aC5TUVJUMiwgz4EyID0gMiwgz4E0ID0gNDsKLSAgZDMu
aW50ZXJwb2xhdGVab29tID0gZnVuY3Rpb24ocDAsIHAxKSB7Ci0gICAgdmFyIHV4MCA9IHAwWzBd
LCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSwgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9
IHAxWzJdOwotICAgIHZhciBkeCA9IHV4MSAtIHV4MCwgZHkgPSB1eTEgLSB1eTAsIGQyID0gZHgg
KiBkeCArIGR5ICogZHksIGQxID0gTWF0aC5zcXJ0KGQyKSwgYjAgPSAodzEgKiB3MSAtIHcwICog
dzAgKyDPgTQgKiBkMikgLyAoMiAqIHcwICogz4EyICogZDEpLCBiMSA9ICh3MSAqIHcxIC0gdzAg
KiB3MCAtIM+BNCAqIGQyKSAvICgyICogdzEgKiDPgTIgKiBkMSksIHIwID0gTWF0aC5sb2coTWF0
aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSwgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBi
MSArIDEpIC0gYjEpLCBkciA9IHIxIC0gcjAsIFMgPSAoZHIgfHwgTWF0aC5sb2codzEgLyB3MCkp
IC8gz4E7Ci0gICAgZnVuY3Rpb24gaW50ZXJwb2xhdGUodCkgewotICAgICAgdmFyIHMgPSB0ICog
UzsKLSAgICAgIGlmIChkcikgewotICAgICAgICB2YXIgY29zaHIwID0gZDNfY29zaChyMCksIHUg
PSB3MCAvICjPgTIgKiBkMSkgKiAoY29zaHIwICogZDNfdGFuaCjPgSAqIHMgKyByMCkgLSBkM19z
aW5oKHIwKSk7Ci0gICAgICAgIHJldHVybiBbIHV4MCArIHUgKiBkeCwgdXkwICsgdSAqIGR5LCB3
MCAqIGNvc2hyMCAvIGQzX2Nvc2goz4EgKiBzICsgcjApIF07Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gWyB1eDAgKyB0ICogZHgsIHV5MCArIHQgKiBkeSwgdzAgKiBNYXRoLmV4cCjPgSAqIHMpIF07
Ci0gICAgfQotICAgIGludGVycG9sYXRlLmR1cmF0aW9uID0gUyAqIDFlMzsKLSAgICByZXR1cm4g
aW50ZXJwb2xhdGU7Ci0gIH07Ci0gIGQzLmJlaGF2aW9yLnpvb20gPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgdmlldyA9IHsKLSAgICAgIHg6IDAsCi0gICAgICB5OiAwLAotICAgICAgazogMQotICAg
IH0sIHRyYW5zbGF0ZTAsIGNlbnRlcjAsIGNlbnRlciwgc2l6ZSA9IFsgOTYwLCA1MDAgXSwgc2Nh
bGVFeHRlbnQgPSBkM19iZWhhdmlvcl96b29tSW5maW5pdHksIG1vdXNlZG93biA9ICJtb3VzZWRv
d24uem9vbSIsIG1vdXNlbW92ZSA9ICJtb3VzZW1vdmUuem9vbSIsIG1vdXNldXAgPSAibW91c2V1
cC56b29tIiwgbW91c2V3aGVlbFRpbWVyLCB0b3VjaHN0YXJ0ID0gInRvdWNoc3RhcnQuem9vbSIs
IHRvdWNodGltZSwgZXZlbnQgPSBkM19ldmVudERpc3BhdGNoKHpvb20sICJ6b29tc3RhcnQiLCAi
em9vbSIsICJ6b29tZW5kIiksIHgwLCB4MSwgeTAsIHkxOwotICAgIGZ1bmN0aW9uIHpvb20oZykg
ewotICAgICAgZy5vbihtb3VzZWRvd24sIG1vdXNlZG93bmVkKS5vbihkM19iZWhhdmlvcl96b29t
V2hlZWwgKyAiLnpvb20iLCBtb3VzZXdoZWVsZWQpLm9uKCJkYmxjbGljay56b29tIiwgZGJsY2xp
Y2tlZCkub24odG91Y2hzdGFydCwgdG91Y2hzdGFydGVkKTsKLSAgICB9Ci0gICAgem9vbS5ldmVu
dCA9IGZ1bmN0aW9uKGcpIHsKLSAgICAgIGcuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IGRpc3BhdGNoID0gZXZlbnQub2YodGhpcywgYXJndW1lbnRzKSwgdmlldzEgPSB2aWV3OwotICAg
ICAgICBpZiAoZDNfdHJhbnNpdGlvbkluaGVyaXRJZCkgewotICAgICAgICAgIGQzLnNlbGVjdCh0
aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgdmlldyA9IHRoaXMuX19jaGFydF9fIHx8IHsKLSAgICAgICAgICAgICAgeDogMCwKLSAg
ICAgICAgICAgICAgeTogMCwKLSAgICAgICAgICAgICAgazogMQotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIHpvb21zdGFydGVkKGRpc3BhdGNoKTsKLSAgICAgICAgICB9KS50d2Vlbigiem9v
bTp6b29tIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZHggPSBzaXplWzBdLCBkeSA9
IHNpemVbMV0sIGN4ID0gZHggLyAyLCBjeSA9IGR5IC8gMiwgaSA9IGQzLmludGVycG9sYXRlWm9v
bShbIChjeCAtIHZpZXcueCkgLyB2aWV3LmssIChjeSAtIHZpZXcueSkgLyB2aWV3LmssIGR4IC8g
dmlldy5rIF0sIFsgKGN4IC0gdmlldzEueCkgLyB2aWV3MS5rLCAoY3kgLSB2aWV3MS55KSAvIHZp
ZXcxLmssIGR4IC8gdmlldzEuayBdKTsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7
Ci0gICAgICAgICAgICAgIHZhciBsID0gaSh0KSwgayA9IGR4IC8gbFsyXTsKLSAgICAgICAgICAg
ICAgdGhpcy5fX2NoYXJ0X18gPSB2aWV3ID0gewotICAgICAgICAgICAgICAgIHg6IGN4IC0gbFsw
XSAqIGssCi0gICAgICAgICAgICAgICAgeTogY3kgLSBsWzFdICogaywKLSAgICAgICAgICAgICAg
ICBrOiBrCi0gICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgIHpvb21lZChkaXNwYXRjaCk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICAgIH0pLmVhY2goImVuZC56b29tIiwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICB6b29tZW5kZWQoZGlzcGF0Y2gpOwotICAgICAgICAgIH0pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXMuX19jaGFydF9fID0gdmlldzsKLSAgICAgICAg
ICB6b29tc3RhcnRlZChkaXNwYXRjaCk7Ci0gICAgICAgICAgem9vbWVkKGRpc3BhdGNoKTsKLSAg
ICAgICAgICB6b29tZW5kZWQoZGlzcGF0Y2gpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9
OwotICAgIHpvb20udHJhbnNsYXRlID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKSByZXR1cm4gWyB2aWV3LngsIHZpZXcueSBdOwotICAgICAgdmlldyA9IHsKLSAg
ICAgICAgeDogK19bMF0sCi0gICAgICAgIHk6ICtfWzFdLAotICAgICAgICBrOiB2aWV3LmsKLSAg
ICAgIH07Ci0gICAgICByZXNjYWxlKCk7Ci0gICAgICByZXR1cm4gem9vbTsKLSAgICB9OwotICAg
IHpvb20uc2NhbGUgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgp
IHJldHVybiB2aWV3Lms7Ci0gICAgICB2aWV3ID0gewotICAgICAgICB4OiB2aWV3LngsCi0gICAg
ICAgIHk6IHZpZXcueSwKLSAgICAgICAgazogK18KLSAgICAgIH07Ci0gICAgICByZXNjYWxlKCk7
Ci0gICAgICByZXR1cm4gem9vbTsKLSAgICB9OwotICAgIHpvb20uc2NhbGVFeHRlbnQgPSBmdW5j
dGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZUV4dGVu
dDsKLSAgICAgIHNjYWxlRXh0ZW50ID0gXyA9PSBudWxsID8gZDNfYmVoYXZpb3Jfem9vbUluZmlu
aXR5IDogWyArX1swXSwgK19bMV0gXTsKLSAgICAgIHJldHVybiB6b29tOwotICAgIH07Ci0gICAg
em9vbS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgp
IHJldHVybiBjZW50ZXI7Ci0gICAgICBjZW50ZXIgPSBfICYmIFsgK19bMF0sICtfWzFdIF07Ci0g
ICAgICByZXR1cm4gem9vbTsKLSAgICB9OwotICAgIHpvb20uc2l6ZSA9IGZ1bmN0aW9uKF8pIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNpemU7Ci0gICAgICBzaXplID0g
XyAmJiBbICtfWzBdLCArX1sxXSBdOwotICAgICAgcmV0dXJuIHpvb207Ci0gICAgfTsKLSAgICB6
b29tLnggPSBmdW5jdGlvbih6KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biB4MTsKLSAgICAgIHgxID0gejsKLSAgICAgIHgwID0gei5jb3B5KCk7Ci0gICAgICB2aWV3ID0g
ewotICAgICAgICB4OiAwLAotICAgICAgICB5OiAwLAotICAgICAgICBrOiAxCi0gICAgICB9Owot
ICAgICAgcmV0dXJuIHpvb207Ci0gICAgfTsKLSAgICB6b29tLnkgPSBmdW5jdGlvbih6KSB7Ci0g
ICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB5MTsKLSAgICAgIHkxID0gejsKLSAg
ICAgIHkwID0gei5jb3B5KCk7Ci0gICAgICB2aWV3ID0gewotICAgICAgICB4OiAwLAotICAgICAg
ICB5OiAwLAotICAgICAgICBrOiAxCi0gICAgICB9OwotICAgICAgcmV0dXJuIHpvb207Ci0gICAg
fTsKLSAgICBmdW5jdGlvbiBsb2NhdGlvbihwKSB7Ci0gICAgICByZXR1cm4gWyAocFswXSAtIHZp
ZXcueCkgLyB2aWV3LmssIChwWzFdIC0gdmlldy55KSAvIHZpZXcuayBdOwotICAgIH0KLSAgICBm
dW5jdGlvbiBwb2ludChsKSB7Ci0gICAgICByZXR1cm4gWyBsWzBdICogdmlldy5rICsgdmlldy54
LCBsWzFdICogdmlldy5rICsgdmlldy55IF07Ci0gICAgfQotICAgIGZ1bmN0aW9uIHNjYWxlVG8o
cykgewotICAgICAgdmlldy5rID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sIE1hdGgubWluKHNj
YWxlRXh0ZW50WzFdLCBzKSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVRvKHAsIGwp
IHsKLSAgICAgIGwgPSBwb2ludChsKTsKLSAgICAgIHZpZXcueCArPSBwWzBdIC0gbFswXTsKLSAg
ICAgIHZpZXcueSArPSBwWzFdIC0gbFsxXTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVzY2FsZSgp
IHsKLSAgICAgIGlmICh4MSkgeDEuZG9tYWluKHgwLnJhbmdlKCkubWFwKGZ1bmN0aW9uKHgpIHsK
LSAgICAgICAgcmV0dXJuICh4IC0gdmlldy54KSAvIHZpZXcuazsKLSAgICAgIH0pLm1hcCh4MC5p
bnZlcnQpKTsKLSAgICAgIGlmICh5MSkgeTEuZG9tYWluKHkwLnJhbmdlKCkubWFwKGZ1bmN0aW9u
KHkpIHsKLSAgICAgICAgcmV0dXJuICh5IC0gdmlldy55KSAvIHZpZXcuazsKLSAgICAgIH0pLm1h
cCh5MC5pbnZlcnQpKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gem9vbXN0YXJ0ZWQoZGlzcGF0Y2gp
IHsKLSAgICAgIGRpc3BhdGNoKHsKLSAgICAgICAgdHlwZTogInpvb21zdGFydCIKLSAgICAgIH0p
OwotICAgIH0KLSAgICBmdW5jdGlvbiB6b29tZWQoZGlzcGF0Y2gpIHsKLSAgICAgIHJlc2NhbGUo
KTsKLSAgICAgIGRpc3BhdGNoKHsKLSAgICAgICAgdHlwZTogInpvb20iLAotICAgICAgICBzY2Fs
ZTogdmlldy5rLAotICAgICAgICB0cmFuc2xhdGU6IFsgdmlldy54LCB2aWV3LnkgXQotICAgICAg
fSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHpvb21lbmRlZChkaXNwYXRjaCkgewotICAgICAgZGlz
cGF0Y2goewotICAgICAgICB0eXBlOiAiem9vbWVuZCIKLSAgICAgIH0pOwotICAgIH0KLSAgICBm
dW5jdGlvbiBtb3VzZWRvd25lZCgpIHsKLSAgICAgIHZhciB0aGF0ID0gdGhpcywgdGFyZ2V0ID0g
ZDMuZXZlbnQudGFyZ2V0LCBkaXNwYXRjaCA9IGV2ZW50Lm9mKHRoYXQsIGFyZ3VtZW50cyksIGRy
YWdnZWQgPSAwLCBzdWJqZWN0ID0gZDMuc2VsZWN0KGQzX3dpbmRvdykub24obW91c2Vtb3ZlLCBt
b3ZlZCkub24obW91c2V1cCwgZW5kZWQpLCBsb2NhdGlvbjAgPSBsb2NhdGlvbihkMy5tb3VzZSh0
aGF0KSksIGRyYWdSZXN0b3JlID0gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKCk7Ci0gICAgICBkM19z
ZWxlY3Rpb25faW50ZXJydXB0LmNhbGwodGhhdCk7Ci0gICAgICB6b29tc3RhcnRlZChkaXNwYXRj
aCk7Ci0gICAgICBmdW5jdGlvbiBtb3ZlZCgpIHsKLSAgICAgICAgZHJhZ2dlZCA9IDE7Ci0gICAg
ICAgIHRyYW5zbGF0ZVRvKGQzLm1vdXNlKHRoYXQpLCBsb2NhdGlvbjApOwotICAgICAgICB6b29t
ZWQoZGlzcGF0Y2gpOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gZW5kZWQoKSB7Ci0gICAgICAg
IHN1YmplY3Qub24obW91c2Vtb3ZlLCBudWxsKS5vbihtb3VzZXVwLCBudWxsKTsKLSAgICAgICAg
ZHJhZ1Jlc3RvcmUoZHJhZ2dlZCAmJiBkMy5ldmVudC50YXJnZXQgPT09IHRhcmdldCk7Ci0gICAg
ICAgIHpvb21lbmRlZChkaXNwYXRjaCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHRv
dWNoc3RhcnRlZCgpIHsKLSAgICAgIHZhciB0aGF0ID0gdGhpcywgZGlzcGF0Y2ggPSBldmVudC5v
Zih0aGF0LCBhcmd1bWVudHMpLCBsb2NhdGlvbnMwID0ge30sIGRpc3RhbmNlMCA9IDAsIHNjYWxl
MCwgem9vbU5hbWUgPSAiLnpvb20tIiArIGQzLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50
aWZpZXIsIHRvdWNobW92ZSA9ICJ0b3VjaG1vdmUiICsgem9vbU5hbWUsIHRvdWNoZW5kID0gInRv
dWNoZW5kIiArIHpvb21OYW1lLCB0YXJnZXRzID0gW10sIHN1YmplY3QgPSBkMy5zZWxlY3QodGhh
dCkub24obW91c2Vkb3duLCBudWxsKS5vbih0b3VjaHN0YXJ0LCBzdGFydGVkKSwgZHJhZ1Jlc3Rv
cmUgPSBkM19ldmVudF9kcmFnU3VwcHJlc3MoKTsKLSAgICAgIGQzX3NlbGVjdGlvbl9pbnRlcnJ1
cHQuY2FsbCh0aGF0KTsKLSAgICAgIHN0YXJ0ZWQoKTsKLSAgICAgIHpvb21zdGFydGVkKGRpc3Bh
dGNoKTsKLSAgICAgIGZ1bmN0aW9uIHJlbG9jYXRlKCkgewotICAgICAgICB2YXIgdG91Y2hlcyA9
IGQzLnRvdWNoZXModGhhdCk7Ci0gICAgICAgIHNjYWxlMCA9IHZpZXcuazsKLSAgICAgICAgdG91
Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICBpZiAodC5pZGVudGlmaWVyIGlu
IGxvY2F0aW9uczApIGxvY2F0aW9uczBbdC5pZGVudGlmaWVyXSA9IGxvY2F0aW9uKHQpOwotICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHRvdWNoZXM7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlv
biBzdGFydGVkKCkgewotICAgICAgICB2YXIgdGFyZ2V0ID0gZDMuZXZlbnQudGFyZ2V0OwotICAg
ICAgICBkMy5zZWxlY3QodGFyZ2V0KS5vbih0b3VjaG1vdmUsIG1vdmVkKS5vbih0b3VjaGVuZCwg
ZW5kZWQpOwotICAgICAgICB0YXJnZXRzLnB1c2godGFyZ2V0KTsKLSAgICAgICAgdmFyIGNoYW5n
ZWQgPSBkMy5ldmVudC5jaGFuZ2VkVG91Y2hlczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSBjaGFuZ2VkLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgIGxvY2F0aW9uczBbY2hh
bmdlZFtpXS5pZGVudGlmaWVyXSA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHRvdWNo
ZXMgPSByZWxvY2F0ZSgpLCBub3cgPSBEYXRlLm5vdygpOwotICAgICAgICBpZiAodG91Y2hlcy5s
ZW5ndGggPT09IDEpIHsKLSAgICAgICAgICBpZiAobm93IC0gdG91Y2h0aW1lIDwgNTAwKSB7Ci0g
ICAgICAgICAgICB2YXIgcCA9IHRvdWNoZXNbMF0sIGwgPSBsb2NhdGlvbnMwW3AuaWRlbnRpZmll
cl07Ci0gICAgICAgICAgICBzY2FsZVRvKHZpZXcuayAqIDIpOwotICAgICAgICAgICAgdHJhbnNs
YXRlVG8ocCwgbCk7Ci0gICAgICAgICAgICBkM19ldmVudFByZXZlbnREZWZhdWx0KCk7Ci0gICAg
ICAgICAgICB6b29tZWQoZGlzcGF0Y2gpOwotICAgICAgICAgIH0KLSAgICAgICAgICB0b3VjaHRp
bWUgPSBub3c7Ci0gICAgICAgIH0gZWxzZSBpZiAodG91Y2hlcy5sZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgdmFyIHAgPSB0b3VjaGVzWzBdLCBxID0gdG91Y2hlc1sxXSwgZHggPSBwWzBdIC0gcVsw
XSwgZHkgPSBwWzFdIC0gcVsxXTsKLSAgICAgICAgICBkaXN0YW5jZTAgPSBkeCAqIGR4ICsgZHkg
KiBkeTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZnVuY3Rpb24gbW92ZWQoKSB7Ci0gICAg
ICAgIHZhciB0b3VjaGVzID0gZDMudG91Y2hlcyh0aGF0KSwgcDAsIGwwLCBwMSwgbDE7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gdG91Y2hlcy5sZW5ndGg7IGkgPCBuOyArK2ksIGwxID0g
bnVsbCkgewotICAgICAgICAgIHAxID0gdG91Y2hlc1tpXTsKLSAgICAgICAgICBpZiAobDEgPSBs
b2NhdGlvbnMwW3AxLmlkZW50aWZpZXJdKSB7Ci0gICAgICAgICAgICBpZiAobDApIGJyZWFrOwot
ICAgICAgICAgICAgcDAgPSBwMSwgbDAgPSBsMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGwxKSB7Ci0gICAgICAgICAgdmFyIGRpc3RhbmNlMSA9IChkaXN0YW5jZTEgPSBw
MVswXSAtIHAwWzBdKSAqIGRpc3RhbmNlMSArIChkaXN0YW5jZTEgPSBwMVsxXSAtIHAwWzFdKSAq
IGRpc3RhbmNlMSwgc2NhbGUxID0gZGlzdGFuY2UwICYmIE1hdGguc3FydChkaXN0YW5jZTEgLyBk
aXN0YW5jZTApOwotICAgICAgICAgIHAwID0gWyAocDBbMF0gKyBwMVswXSkgLyAyLCAocDBbMV0g
KyBwMVsxXSkgLyAyIF07Ci0gICAgICAgICAgbDAgPSBbIChsMFswXSArIGwxWzBdKSAvIDIsIChs
MFsxXSArIGwxWzFdKSAvIDIgXTsKLSAgICAgICAgICBzY2FsZVRvKHNjYWxlMSAqIHNjYWxlMCk7
Ci0gICAgICAgIH0KLSAgICAgICAgdG91Y2h0aW1lID0gbnVsbDsKLSAgICAgICAgdHJhbnNsYXRl
VG8ocDAsIGwwKTsKLSAgICAgICAgem9vbWVkKGRpc3BhdGNoKTsKLSAgICAgIH0KLSAgICAgIGZ1
bmN0aW9uIGVuZGVkKCkgewotICAgICAgICBpZiAoZDMuZXZlbnQudG91Y2hlcy5sZW5ndGgpIHsK
LSAgICAgICAgICB2YXIgY2hhbmdlZCA9IGQzLmV2ZW50LmNoYW5nZWRUb3VjaGVzOwotICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gY2hhbmdlZC5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZSBsb2NhdGlvbnMwW2NoYW5nZWRbaV0uaWRlbnRpZmllcl07Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgaW4gbG9jYXRpb25zMCkgewot
ICAgICAgICAgICAgcmV0dXJuIHZvaWQgcmVsb2NhdGUoKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZDMuc2VsZWN0QWxsKHRhcmdldHMpLm9uKHpvb21OYW1lLCBudWxsKTsKLSAg
ICAgICAgc3ViamVjdC5vbihtb3VzZWRvd24sIG1vdXNlZG93bmVkKS5vbih0b3VjaHN0YXJ0LCB0
b3VjaHN0YXJ0ZWQpOwotICAgICAgICBkcmFnUmVzdG9yZSgpOwotICAgICAgICB6b29tZW5kZWQo
ZGlzcGF0Y2gpOwotICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiBtb3VzZXdoZWVsZWQoKSB7
Ci0gICAgICB2YXIgZGlzcGF0Y2ggPSBldmVudC5vZih0aGlzLCBhcmd1bWVudHMpOwotICAgICAg
aWYgKG1vdXNld2hlZWxUaW1lcikgY2xlYXJUaW1lb3V0KG1vdXNld2hlZWxUaW1lcik7IGVsc2Ug
dHJhbnNsYXRlMCA9IGxvY2F0aW9uKGNlbnRlcjAgPSBjZW50ZXIgfHwgZDMubW91c2UodGhpcykp
LCAKLSAgICAgIGQzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2FsbCh0aGlzKSwgem9vbXN0YXJ0ZWQo
ZGlzcGF0Y2gpOwotICAgICAgbW91c2V3aGVlbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigp
IHsKLSAgICAgICAgbW91c2V3aGVlbFRpbWVyID0gbnVsbDsKLSAgICAgICAgem9vbWVuZGVkKGRp
c3BhdGNoKTsKLSAgICAgIH0sIDUwKTsKLSAgICAgIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKTsK
LSAgICAgIHNjYWxlVG8oTWF0aC5wb3coMiwgZDNfYmVoYXZpb3Jfem9vbURlbHRhKCkgKiAuMDAy
KSAqIHZpZXcuayk7Ci0gICAgICB0cmFuc2xhdGVUbyhjZW50ZXIwLCB0cmFuc2xhdGUwKTsKLSAg
ICAgIHpvb21lZChkaXNwYXRjaCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGRibGNsaWNrZWQoKSB7
Ci0gICAgICB2YXIgZGlzcGF0Y2ggPSBldmVudC5vZih0aGlzLCBhcmd1bWVudHMpLCBwID0gZDMu
bW91c2UodGhpcyksIGwgPSBsb2NhdGlvbihwKSwgayA9IE1hdGgubG9nKHZpZXcuaykgLyBNYXRo
LkxOMjsKLSAgICAgIHpvb21zdGFydGVkKGRpc3BhdGNoKTsKLSAgICAgIHNjYWxlVG8oTWF0aC5w
b3coMiwgZDMuZXZlbnQuc2hpZnRLZXkgPyBNYXRoLmNlaWwoaykgLSAxIDogTWF0aC5mbG9vcihr
KSArIDEpKTsKLSAgICAgIHRyYW5zbGF0ZVRvKHAsIGwpOwotICAgICAgem9vbWVkKGRpc3BhdGNo
KTsKLSAgICAgIHpvb21lbmRlZChkaXNwYXRjaCk7Ci0gICAgfQotICAgIHJldHVybiBkMy5yZWJp
bmQoem9vbSwgZXZlbnQsICJvbiIpOwotICB9OwotICB2YXIgZDNfYmVoYXZpb3Jfem9vbUluZmlu
aXR5ID0gWyAwLCBJbmZpbml0eSBdOwotICB2YXIgZDNfYmVoYXZpb3Jfem9vbURlbHRhLCBkM19i
ZWhhdmlvcl96b29tV2hlZWwgPSAib253aGVlbCIgaW4gZDNfZG9jdW1lbnQgPyAoZDNfYmVoYXZp
b3Jfem9vbURlbHRhID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIC1kMy5ldmVudC5kZWx0YVkg
KiAoZDMuZXZlbnQuZGVsdGFNb2RlID8gMTIwIDogMSk7Ci0gIH0sICJ3aGVlbCIpIDogIm9ubW91
c2V3aGVlbCIgaW4gZDNfZG9jdW1lbnQgPyAoZDNfYmVoYXZpb3Jfem9vbURlbHRhID0gZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIGQzLmV2ZW50LndoZWVsRGVsdGE7Ci0gIH0sICJtb3VzZXdoZWVs
IikgOiAoZDNfYmVoYXZpb3Jfem9vbURlbHRhID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIC1k
My5ldmVudC5kZXRhaWw7Ci0gIH0sICJNb3pNb3VzZVBpeGVsU2Nyb2xsIik7Ci0gIGQzLmNvbG9y
ID0gZDNfY29sb3I7Ci0gIGZ1bmN0aW9uIGQzX2NvbG9yKCkge30KLSAgZDNfY29sb3IucHJvdG90
eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucmdiKCkgKyAiIjsK
LSAgfTsKLSAgZDMuaHNsID0gZDNfaHNsOwotICBmdW5jdGlvbiBkM19oc2woaCwgcywgbCkgewot
ICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgZDNfaHNsID8gdm9pZCAodGhpcy5oID0gK2gsIHRo
aXMucyA9ICtzLCB0aGlzLmwgPSArbCkgOiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGggaW5zdGFu
Y2VvZiBkM19oc2wgPyBuZXcgZDNfaHNsKGguaCwgaC5zLCBoLmwpIDogZDNfcmdiX3BhcnNlKCIi
ICsgaCwgZDNfcmdiX2hzbCwgZDNfaHNsKSA6IG5ldyBkM19oc2woaCwgcywgbCk7Ci0gIH0KLSAg
dmFyIGQzX2hzbFByb3RvdHlwZSA9IGQzX2hzbC5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTsK
LSAgZDNfaHNsUHJvdG90eXBlLmJyaWdodGVyID0gZnVuY3Rpb24oaykgewotICAgIGsgPSBNYXRo
LnBvdyguNywgYXJndW1lbnRzLmxlbmd0aCA/IGsgOiAxKTsKLSAgICByZXR1cm4gbmV3IGQzX2hz
bCh0aGlzLmgsIHRoaXMucywgdGhpcy5sIC8gayk7Ci0gIH07Ci0gIGQzX2hzbFByb3RvdHlwZS5k
YXJrZXIgPSBmdW5jdGlvbihrKSB7Ci0gICAgayA9IE1hdGgucG93KC43LCBhcmd1bWVudHMubGVu
Z3RoID8gayA6IDEpOwotICAgIHJldHVybiBuZXcgZDNfaHNsKHRoaXMuaCwgdGhpcy5zLCBrICog
dGhpcy5sKTsKLSAgfTsKLSAgZDNfaHNsUHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBkM19oc2xfcmdiKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwpOwotICB9OwotICBmdW5j
dGlvbiBkM19oc2xfcmdiKGgsIHMsIGwpIHsKLSAgICB2YXIgbTEsIG0yOwotICAgIGggPSBpc05h
TihoKSA/IDAgOiAoaCAlPSAzNjApIDwgMCA/IGggKyAzNjAgOiBoOwotICAgIHMgPSBpc05hTihz
KSA/IDAgOiBzIDwgMCA/IDAgOiBzID4gMSA/IDEgOiBzOwotICAgIGwgPSBsIDwgMCA/IDAgOiBs
ID4gMSA/IDEgOiBsOwotICAgIG0yID0gbCA8PSAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBs
ICogczsKLSAgICBtMSA9IDIgKiBsIC0gbTI7Ci0gICAgZnVuY3Rpb24gdihoKSB7Ci0gICAgICBp
ZiAoaCA+IDM2MCkgaCAtPSAzNjA7IGVsc2UgaWYgKGggPCAwKSBoICs9IDM2MDsKLSAgICAgIGlm
IChoIDwgNjApIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggLyA2MDsKLSAgICAgIGlmIChoIDwg
MTgwKSByZXR1cm4gbTI7Ci0gICAgICBpZiAoaCA8IDI0MCkgcmV0dXJuIG0xICsgKG0yIC0gbTEp
ICogKDI0MCAtIGgpIC8gNjA7Ci0gICAgICByZXR1cm4gbTE7Ci0gICAgfQotICAgIGZ1bmN0aW9u
IHZ2KGgpIHsKLSAgICAgIHJldHVybiBNYXRoLnJvdW5kKHYoaCkgKiAyNTUpOwotICAgIH0KLSAg
ICByZXR1cm4gbmV3IGQzX3JnYih2dihoICsgMTIwKSwgdnYoaCksIHZ2KGggLSAxMjApKTsKLSAg
fQotICBkMy5oY2wgPSBkM19oY2w7Ci0gIGZ1bmN0aW9uIGQzX2hjbChoLCBjLCBsKSB7Ci0gICAg
cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkM19oY2wgPyB2b2lkICh0aGlzLmggPSAraCwgdGhpcy5j
ID0gK2MsIHRoaXMubCA9ICtsKSA6IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gaCBpbnN0YW5jZW9m
IGQzX2hjbCA/IG5ldyBkM19oY2woaC5oLCBoLmMsIGgubCkgOiBoIGluc3RhbmNlb2YgZDNfbGFi
ID8gZDNfbGFiX2hjbChoLmwsIGguYSwgaC5iKSA6IGQzX2xhYl9oY2woKGggPSBkM19yZ2JfbGFi
KChoID0gZDMucmdiKGgpKS5yLCBoLmcsIGguYikpLmwsIGguYSwgaC5iKSA6IG5ldyBkM19oY2wo
aCwgYywgbCk7Ci0gIH0KLSAgdmFyIGQzX2hjbFByb3RvdHlwZSA9IGQzX2hjbC5wcm90b3R5cGUg
PSBuZXcgZDNfY29sb3IoKTsKLSAgZDNfaGNsUHJvdG90eXBlLmJyaWdodGVyID0gZnVuY3Rpb24o
aykgewotICAgIHJldHVybiBuZXcgZDNfaGNsKHRoaXMuaCwgdGhpcy5jLCBNYXRoLm1pbigxMDAs
IHRoaXMubCArIGQzX2xhYl9LICogKGFyZ3VtZW50cy5sZW5ndGggPyBrIDogMSkpKTsKLSAgfTsK
LSAgZDNfaGNsUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspIHsKLSAgICByZXR1cm4gbmV3
IGQzX2hjbCh0aGlzLmgsIHRoaXMuYywgTWF0aC5tYXgoMCwgdGhpcy5sIC0gZDNfbGFiX0sgKiAo
YXJndW1lbnRzLmxlbmd0aCA/IGsgOiAxKSkpOwotICB9OwotICBkM19oY2xQcm90b3R5cGUucmdi
ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzX2hjbF9sYWIodGhpcy5oLCB0aGlzLmMsIHRo
aXMubCkucmdiKCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2hjbF9sYWIoaCwgYywgbCkgewotICAg
IGlmIChpc05hTihoKSkgaCA9IDA7Ci0gICAgaWYgKGlzTmFOKGMpKSBjID0gMDsKLSAgICByZXR1
cm4gbmV3IGQzX2xhYihsLCBNYXRoLmNvcyhoICo9IGQzX3JhZGlhbnMpICogYywgTWF0aC5zaW4o
aCkgKiBjKTsKLSAgfQotICBkMy5sYWIgPSBkM19sYWI7Ci0gIGZ1bmN0aW9uIGQzX2xhYihsLCBh
LCBiKSB7Ci0gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkM19sYWIgPyB2b2lkICh0aGlzLmwg
PSArbCwgdGhpcy5hID0gK2EsIHRoaXMuYiA9ICtiKSA6IGFyZ3VtZW50cy5sZW5ndGggPCAyID8g
bCBpbnN0YW5jZW9mIGQzX2xhYiA/IG5ldyBkM19sYWIobC5sLCBsLmEsIGwuYikgOiBsIGluc3Rh
bmNlb2YgZDNfaGNsID8gZDNfaGNsX2xhYihsLmwsIGwuYywgbC5oKSA6IGQzX3JnYl9sYWIoKGwg
PSBkM19yZ2IobCkpLnIsIGwuZywgbC5iKSA6IG5ldyBkM19sYWIobCwgYSwgYik7Ci0gIH0KLSAg
dmFyIGQzX2xhYl9LID0gMTg7Ci0gIHZhciBkM19sYWJfWCA9IC45NTA0NywgZDNfbGFiX1kgPSAx
LCBkM19sYWJfWiA9IDEuMDg4ODM7Ci0gIHZhciBkM19sYWJQcm90b3R5cGUgPSBkM19sYWIucHJv
dG90eXBlID0gbmV3IGQzX2NvbG9yKCk7Ci0gIGQzX2xhYlByb3RvdHlwZS5icmlnaHRlciA9IGZ1
bmN0aW9uKGspIHsKLSAgICByZXR1cm4gbmV3IGQzX2xhYihNYXRoLm1pbigxMDAsIHRoaXMubCAr
IGQzX2xhYl9LICogKGFyZ3VtZW50cy5sZW5ndGggPyBrIDogMSkpLCB0aGlzLmEsIHRoaXMuYik7
Ci0gIH07Ci0gIGQzX2xhYlByb3RvdHlwZS5kYXJrZXIgPSBmdW5jdGlvbihrKSB7Ci0gICAgcmV0
dXJuIG5ldyBkM19sYWIoTWF0aC5tYXgoMCwgdGhpcy5sIC0gZDNfbGFiX0sgKiAoYXJndW1lbnRz
Lmxlbmd0aCA/IGsgOiAxKSksIHRoaXMuYSwgdGhpcy5iKTsKLSAgfTsKLSAgZDNfbGFiUHJvdG90
eXBlLnJnYiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19sYWJfcmdiKHRoaXMubCwgdGhp
cy5hLCB0aGlzLmIpOwotICB9OwotICBmdW5jdGlvbiBkM19sYWJfcmdiKGwsIGEsIGIpIHsKLSAg
ICB2YXIgeSA9IChsICsgMTYpIC8gMTE2LCB4ID0geSArIGEgLyA1MDAsIHogPSB5IC0gYiAvIDIw
MDsKLSAgICB4ID0gZDNfbGFiX3h5eih4KSAqIGQzX2xhYl9YOwotICAgIHkgPSBkM19sYWJfeHl6
KHkpICogZDNfbGFiX1k7Ci0gICAgeiA9IGQzX2xhYl94eXooeikgKiBkM19sYWJfWjsKLSAgICBy
ZXR1cm4gbmV3IGQzX3JnYihkM194eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5
IC0gLjQ5ODUzMTQgKiB6KSwgZDNfeHl6X3JnYigtLjk2OTI2NiAqIHggKyAxLjg3NjAxMDggKiB5
ICsgLjA0MTU1NiAqIHopLCBkM194eXpfcmdiKC4wNTU2NDM0ICogeCAtIC4yMDQwMjU5ICogeSAr
IDEuMDU3MjI1MiAqIHopKTsKLSAgfQotICBmdW5jdGlvbiBkM19sYWJfaGNsKGwsIGEsIGIpIHsK
LSAgICByZXR1cm4gbCA+IDAgPyBuZXcgZDNfaGNsKE1hdGguYXRhbjIoYiwgYSkgKiBkM19kZWdy
ZWVzLCBNYXRoLnNxcnQoYSAqIGEgKyBiICogYiksIGwpIDogbmV3IGQzX2hjbChOYU4sIE5hTiwg
bCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGFiX3h5eih4KSB7Ci0gICAgcmV0dXJuIHggPiAuMjA2
ODkzMDM0ID8geCAqIHggKiB4IDogKHggLSA0IC8gMjkpIC8gNy43ODcwMzc7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfeHl6X2xhYih4KSB7Ci0gICAgcmV0dXJuIHggPiAuMDA4ODU2ID8gTWF0aC5wb3co
eCwgMSAvIDMpIDogNy43ODcwMzcgKiB4ICsgNCAvIDI5OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3h5
el9yZ2IocikgewotICAgIHJldHVybiBNYXRoLnJvdW5kKDI1NSAqIChyIDw9IC4wMDMwNCA/IDEy
LjkyICogciA6IDEuMDU1ICogTWF0aC5wb3cociwgMSAvIDIuNCkgLSAuMDU1KSk7Ci0gIH0KLSAg
ZDMucmdiID0gZDNfcmdiOwotICBmdW5jdGlvbiBkM19yZ2IociwgZywgYikgewotICAgIHJldHVy
biB0aGlzIGluc3RhbmNlb2YgZDNfcmdiID8gdm9pZCAodGhpcy5yID0gfn5yLCB0aGlzLmcgPSB+
fmcsIHRoaXMuYiA9IH5+YikgOiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHIgaW5zdGFuY2VvZiBk
M19yZ2IgPyBuZXcgZDNfcmdiKHIuciwgci5nLCByLmIpIDogZDNfcmdiX3BhcnNlKCIiICsgciwg
ZDNfcmdiLCBkM19oc2xfcmdiKSA6IG5ldyBkM19yZ2IociwgZywgYik7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfcmdiTnVtYmVyKHZhbHVlKSB7Ci0gICAgcmV0dXJuIG5ldyBkM19yZ2IodmFsdWUgPj4g
MTYsIHZhbHVlID4+IDggJiAyNTUsIHZhbHVlICYgMjU1KTsKLSAgfQotICBmdW5jdGlvbiBkM19y
Z2JTdHJpbmcodmFsdWUpIHsKLSAgICByZXR1cm4gZDNfcmdiTnVtYmVyKHZhbHVlKSArICIiOwot
ICB9Ci0gIHZhciBkM19yZ2JQcm90b3R5cGUgPSBkM19yZ2IucHJvdG90eXBlID0gbmV3IGQzX2Nv
bG9yKCk7Ci0gIGQzX3JnYlByb3RvdHlwZS5icmlnaHRlciA9IGZ1bmN0aW9uKGspIHsKLSAgICBr
ID0gTWF0aC5wb3coLjcsIGFyZ3VtZW50cy5sZW5ndGggPyBrIDogMSk7Ci0gICAgdmFyIHIgPSB0
aGlzLnIsIGcgPSB0aGlzLmcsIGIgPSB0aGlzLmIsIGkgPSAzMDsKLSAgICBpZiAoIXIgJiYgIWcg
JiYgIWIpIHJldHVybiBuZXcgZDNfcmdiKGksIGksIGkpOwotICAgIGlmIChyICYmIHIgPCBpKSBy
ID0gaTsKLSAgICBpZiAoZyAmJiBnIDwgaSkgZyA9IGk7Ci0gICAgaWYgKGIgJiYgYiA8IGkpIGIg
PSBpOwotICAgIHJldHVybiBuZXcgZDNfcmdiKE1hdGgubWluKDI1NSwgciAvIGspLCBNYXRoLm1p
bigyNTUsIGcgLyBrKSwgTWF0aC5taW4oMjU1LCBiIC8gaykpOwotICB9OwotICBkM19yZ2JQcm90
b3R5cGUuZGFya2VyID0gZnVuY3Rpb24oaykgewotICAgIGsgPSBNYXRoLnBvdyguNywgYXJndW1l
bnRzLmxlbmd0aCA/IGsgOiAxKTsKLSAgICByZXR1cm4gbmV3IGQzX3JnYihrICogdGhpcy5yLCBr
ICogdGhpcy5nLCBrICogdGhpcy5iKTsKLSAgfTsKLSAgZDNfcmdiUHJvdG90eXBlLmhzbCA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBkM19yZ2JfaHNsKHRoaXMuciwgdGhpcy5nLCB0aGlzLmIp
OwotICB9OwotICBkM19yZ2JQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gIiMiICsgZDNfcmdiX2hleCh0aGlzLnIpICsgZDNfcmdiX2hleCh0aGlzLmcpICsgZDNf
cmdiX2hleCh0aGlzLmIpOwotICB9OwotICBmdW5jdGlvbiBkM19yZ2JfaGV4KHYpIHsKLSAgICBy
ZXR1cm4gdiA8IDE2ID8gIjAiICsgTWF0aC5tYXgoMCwgdikudG9TdHJpbmcoMTYpIDogTWF0aC5t
aW4oMjU1LCB2KS50b1N0cmluZygxNik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfcmdiX3BhcnNlKGZv
cm1hdCwgcmdiLCBoc2wpIHsKLSAgICB2YXIgciA9IDAsIGcgPSAwLCBiID0gMCwgbTEsIG0yLCBj
b2xvcjsKLSAgICBtMSA9IC8oW2Etel0rKVwoKC4qKVwpL2kuZXhlYyhmb3JtYXQpOwotICAgIGlm
IChtMSkgewotICAgICAgbTIgPSBtMVsyXS5zcGxpdCgiLCIpOwotICAgICAgc3dpdGNoIChtMVsx
XSkgewotICAgICAgIGNhc2UgImhzbCI6Ci0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gaHNs
KHBhcnNlRmxvYXQobTJbMF0pLCBwYXJzZUZsb2F0KG0yWzFdKSAvIDEwMCwgcGFyc2VGbG9hdCht
MlsyXSkgLyAxMDApOwotICAgICAgICB9Ci0KLSAgICAgICBjYXNlICJyZ2IiOgotICAgICAgICB7
Ci0gICAgICAgICAgcmV0dXJuIHJnYihkM19yZ2JfcGFyc2VOdW1iZXIobTJbMF0pLCBkM19yZ2Jf
cGFyc2VOdW1iZXIobTJbMV0pLCBkM19yZ2JfcGFyc2VOdW1iZXIobTJbMl0pKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgICBpZiAoY29sb3IgPSBkM19yZ2JfbmFtZXMuZ2V0KGZvcm1h
dCkpIHJldHVybiByZ2IoY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7Ci0gICAgaWYgKGZvcm1h
dCAhPSBudWxsICYmIGZvcm1hdC5jaGFyQXQoMCkgPT09ICIjIiAmJiAhaXNOYU4oY29sb3IgPSBw
YXJzZUludChmb3JtYXQuc3Vic3RyaW5nKDEpLCAxNikpKSB7Ci0gICAgICBpZiAoZm9ybWF0Lmxl
bmd0aCA9PT0gNCkgewotICAgICAgICByID0gKGNvbG9yICYgMzg0MCkgPj4gNDsKLSAgICAgICAg
ciA9IHIgPj4gNCB8IHI7Ci0gICAgICAgIGcgPSBjb2xvciAmIDI0MDsKLSAgICAgICAgZyA9IGcg
Pj4gNCB8IGc7Ci0gICAgICAgIGIgPSBjb2xvciAmIDE1OwotICAgICAgICBiID0gYiA8PCA0IHwg
YjsKLSAgICAgIH0gZWxzZSBpZiAoZm9ybWF0Lmxlbmd0aCA9PT0gNykgewotICAgICAgICByID0g
KGNvbG9yICYgMTY3MTE2ODApID4+IDE2OwotICAgICAgICBnID0gKGNvbG9yICYgNjUyODApID4+
IDg7Ci0gICAgICAgIGIgPSBjb2xvciAmIDI1NTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJnYihyLCBnLCBiKTsKLSAgfQotICBmdW5jdGlvbiBkM19yZ2JfaHNsKHIsIGcsIGIpIHsKLSAg
ICB2YXIgbWluID0gTWF0aC5taW4ociAvPSAyNTUsIGcgLz0gMjU1LCBiIC89IDI1NSksIG1heCA9
IE1hdGgubWF4KHIsIGcsIGIpLCBkID0gbWF4IC0gbWluLCBoLCBzLCBsID0gKG1heCArIG1pbikg
LyAyOwotICAgIGlmIChkKSB7Ci0gICAgICBzID0gbCA8IC41ID8gZCAvIChtYXggKyBtaW4pIDog
ZCAvICgyIC0gbWF4IC0gbWluKTsKLSAgICAgIGlmIChyID09IG1heCkgaCA9IChnIC0gYikgLyBk
ICsgKGcgPCBiID8gNiA6IDApOyBlbHNlIGlmIChnID09IG1heCkgaCA9IChiIC0gcikgLyBkICsg
MjsgZWxzZSBoID0gKHIgLSBnKSAvIGQgKyA0OwotICAgICAgaCAqPSA2MDsKLSAgICB9IGVsc2Ug
ewotICAgICAgaCA9IE5hTjsKLSAgICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoOwotICAg
IH0KLSAgICByZXR1cm4gbmV3IGQzX2hzbChoLCBzLCBsKTsKLSAgfQotICBmdW5jdGlvbiBkM19y
Z2JfbGFiKHIsIGcsIGIpIHsKLSAgICByID0gZDNfcmdiX3h5eihyKTsKLSAgICBnID0gZDNfcmdi
X3h5eihnKTsKLSAgICBiID0gZDNfcmdiX3h5eihiKTsKLSAgICB2YXIgeCA9IGQzX3h5el9sYWIo
KC40MTI0NTY0ICogciArIC4zNTc1NzYxICogZyArIC4xODA0Mzc1ICogYikgLyBkM19sYWJfWCks
IHkgPSBkM194eXpfbGFiKCguMjEyNjcyOSAqIHIgKyAuNzE1MTUyMiAqIGcgKyAuMDcyMTc1ICog
YikgLyBkM19sYWJfWSksIHogPSBkM194eXpfbGFiKCguMDE5MzMzOSAqIHIgKyAuMTE5MTkyICog
ZyArIC45NTAzMDQxICogYikgLyBkM19sYWJfWik7Ci0gICAgcmV0dXJuIGQzX2xhYigxMTYgKiB5
IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geikpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X3JnYl94eXoocikgewotICAgIHJldHVybiAociAvPSAyNTUpIDw9IC4wNDA0NSA/IHIgLyAxMi45
MiA6IE1hdGgucG93KChyICsgLjA1NSkgLyAxLjA1NSwgMi40KTsKLSAgfQotICBmdW5jdGlvbiBk
M19yZ2JfcGFyc2VOdW1iZXIoYykgewotICAgIHZhciBmID0gcGFyc2VGbG9hdChjKTsKLSAgICBy
ZXR1cm4gYy5jaGFyQXQoYy5sZW5ndGggLSAxKSA9PT0gIiUiID8gTWF0aC5yb3VuZChmICogMi41
NSkgOiBmOwotICB9Ci0gIHZhciBkM19yZ2JfbmFtZXMgPSBkMy5tYXAoewotICAgIGFsaWNlYmx1
ZTogMTU3OTIzODMsCi0gICAgYW50aXF1ZXdoaXRlOiAxNjQ0NDM3NSwKLSAgICBhcXVhOiA2NTUz
NSwKLSAgICBhcXVhbWFyaW5lOiA4Mzg4NTY0LAotICAgIGF6dXJlOiAxNTc5NDE3NSwKLSAgICBi
ZWlnZTogMTYxMTkyNjAsCi0gICAgYmlzcXVlOiAxNjc3MDI0NCwKLSAgICBibGFjazogMCwKLSAg
ICBibGFuY2hlZGFsbW9uZDogMTY3NzIwNDUsCi0gICAgYmx1ZTogMjU1LAotICAgIGJsdWV2aW9s
ZXQ6IDkwNTUyMDIsCi0gICAgYnJvd246IDEwODI0MjM0LAotICAgIGJ1cmx5d29vZDogMTQ1OTYy
MzEsCi0gICAgY2FkZXRibHVlOiA2MjY2NTI4LAotICAgIGNoYXJ0cmV1c2U6IDgzODgzNTIsCi0g
ICAgY2hvY29sYXRlOiAxMzc4OTQ3MCwKLSAgICBjb3JhbDogMTY3NDQyNzIsCi0gICAgY29ybmZs
b3dlcmJsdWU6IDY1OTE5ODEsCi0gICAgY29ybnNpbGs6IDE2Nzc1Mzg4LAotICAgIGNyaW1zb246
IDE0NDIzMTAwLAotICAgIGN5YW46IDY1NTM1LAotICAgIGRhcmtibHVlOiAxMzksCi0gICAgZGFy
a2N5YW46IDM1NzIzLAotICAgIGRhcmtnb2xkZW5yb2Q6IDEyMDkyOTM5LAotICAgIGRhcmtncmF5
OiAxMTExOTAxNywKLSAgICBkYXJrZ3JlZW46IDI1NjAwLAotICAgIGRhcmtncmV5OiAxMTExOTAx
NywKLSAgICBkYXJra2hha2k6IDEyNDMzMjU5LAotICAgIGRhcmttYWdlbnRhOiA5MTA5NjQzLAot
ICAgIGRhcmtvbGl2ZWdyZWVuOiA1NTk3OTk5LAotICAgIGRhcmtvcmFuZ2U6IDE2NzQ3NTIwLAot
ICAgIGRhcmtvcmNoaWQ6IDEwMDQwMDEyLAotICAgIGRhcmtyZWQ6IDkxMDk1MDQsCi0gICAgZGFy
a3NhbG1vbjogMTUzMDg0MTAsCi0gICAgZGFya3NlYWdyZWVuOiA5NDE5OTE5LAotICAgIGRhcmtz
bGF0ZWJsdWU6IDQ3MzQzNDcsCi0gICAgZGFya3NsYXRlZ3JheTogMzEwMDQ5NSwKLSAgICBkYXJr
c2xhdGVncmV5OiAzMTAwNDk1LAotICAgIGRhcmt0dXJxdW9pc2U6IDUyOTQ1LAotICAgIGRhcmt2
aW9sZXQ6IDk2OTk1MzksCi0gICAgZGVlcHBpbms6IDE2NzE2OTQ3LAotICAgIGRlZXBza3libHVl
OiA0OTE1MSwKLSAgICBkaW1ncmF5OiA2OTA4MjY1LAotICAgIGRpbWdyZXk6IDY5MDgyNjUsCi0g
ICAgZG9kZ2VyYmx1ZTogMjAwMzE5OSwKLSAgICBmaXJlYnJpY2s6IDExNjc0MTQ2LAotICAgIGZs
b3JhbHdoaXRlOiAxNjc3NTkyMCwKLSAgICBmb3Jlc3RncmVlbjogMjI2Mzg0MiwKLSAgICBmdWNo
c2lhOiAxNjcxMTkzNSwKLSAgICBnYWluc2Jvcm86IDE0NDc0NDYwLAotICAgIGdob3N0d2hpdGU6
IDE2MzE2NjcxLAotICAgIGdvbGQ6IDE2NzY2NzIwLAotICAgIGdvbGRlbnJvZDogMTQzMjkxMjAs
Ci0gICAgZ3JheTogODQyMTUwNCwKLSAgICBncmVlbjogMzI3NjgsCi0gICAgZ3JlZW55ZWxsb3c6
IDExNDAzMDU1LAotICAgIGdyZXk6IDg0MjE1MDQsCi0gICAgaG9uZXlkZXc6IDE1Nzk0MTYwLAot
ICAgIGhvdHBpbms6IDE2NzM4NzQwLAotICAgIGluZGlhbnJlZDogMTM0NTg1MjQsCi0gICAgaW5k
aWdvOiA0OTE1MzMwLAotICAgIGl2b3J5OiAxNjc3NzIwMCwKLSAgICBraGFraTogMTU3ODc2NjAs
Ci0gICAgbGF2ZW5kZXI6IDE1MTMyNDEwLAotICAgIGxhdmVuZGVyYmx1c2g6IDE2NzczMzY1LAot
ICAgIGxhd25ncmVlbjogODE5MDk3NiwKLSAgICBsZW1vbmNoaWZmb246IDE2Nzc1ODg1LAotICAg
IGxpZ2h0Ymx1ZTogMTEzOTMyNTQsCi0gICAgbGlnaHRjb3JhbDogMTU3NjE1MzYsCi0gICAgbGln
aHRjeWFuOiAxNDc0NTU5OSwKLSAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogMTY0NDgyMTAsCi0g
ICAgbGlnaHRncmF5OiAxMzg4MjMyMywKLSAgICBsaWdodGdyZWVuOiA5NDk4MjU2LAotICAgIGxp
Z2h0Z3JleTogMTM4ODIzMjMsCi0gICAgbGlnaHRwaW5rOiAxNjc1ODQ2NSwKLSAgICBsaWdodHNh
bG1vbjogMTY3NTI3NjIsCi0gICAgbGlnaHRzZWFncmVlbjogMjE0Mjg5MCwKLSAgICBsaWdodHNr
eWJsdWU6IDg5MDAzNDYsCi0gICAgbGlnaHRzbGF0ZWdyYXk6IDc4MzM3NTMsCi0gICAgbGlnaHRz
bGF0ZWdyZXk6IDc4MzM3NTMsCi0gICAgbGlnaHRzdGVlbGJsdWU6IDExNTg0NzM0LAotICAgIGxp
Z2h0eWVsbG93OiAxNjc3NzE4NCwKLSAgICBsaW1lOiA2NTI4MCwKLSAgICBsaW1lZ3JlZW46IDMz
MjkzMzAsCi0gICAgbGluZW46IDE2NDQ1NjcwLAotICAgIG1hZ2VudGE6IDE2NzExOTM1LAotICAg
IG1hcm9vbjogODM4ODYwOCwKLSAgICBtZWRpdW1hcXVhbWFyaW5lOiA2NzM3MzIyLAotICAgIG1l
ZGl1bWJsdWU6IDIwNSwKLSAgICBtZWRpdW1vcmNoaWQ6IDEyMjExNjY3LAotICAgIG1lZGl1bXB1
cnBsZTogOTY2MjY4MywKLSAgICBtZWRpdW1zZWFncmVlbjogMzk3ODA5NywKLSAgICBtZWRpdW1z
bGF0ZWJsdWU6IDgwODc3OTAsCi0gICAgbWVkaXVtc3ByaW5nZ3JlZW46IDY0MTU0LAotICAgIG1l
ZGl1bXR1cnF1b2lzZTogNDc3MjMwMCwKLSAgICBtZWRpdW12aW9sZXRyZWQ6IDEzMDQ3MTczLAot
ICAgIG1pZG5pZ2h0Ymx1ZTogMTY0NDkxMiwKLSAgICBtaW50Y3JlYW06IDE2MTIxODUwLAotICAg
IG1pc3R5cm9zZTogMTY3NzAyNzMsCi0gICAgbW9jY2FzaW46IDE2NzcwMjI5LAotICAgIG5hdmFq
b3doaXRlOiAxNjc2ODY4NSwKLSAgICBuYXZ5OiAxMjgsCi0gICAgb2xkbGFjZTogMTY2NDM1NTgs
Ci0gICAgb2xpdmU6IDg0MjEzNzYsCi0gICAgb2xpdmVkcmFiOiA3MDQ4NzM5LAotICAgIG9yYW5n
ZTogMTY3NTM5MjAsCi0gICAgb3JhbmdlcmVkOiAxNjcyOTM0NCwKLSAgICBvcmNoaWQ6IDE0MzE1
NzM0LAotICAgIHBhbGVnb2xkZW5yb2Q6IDE1NjU3MTMwLAotICAgIHBhbGVncmVlbjogMTAwMjU4
ODAsCi0gICAgcGFsZXR1cnF1b2lzZTogMTE1Mjk5NjYsCi0gICAgcGFsZXZpb2xldHJlZDogMTQz
ODEyMDMsCi0gICAgcGFwYXlhd2hpcDogMTY3NzMwNzcsCi0gICAgcGVhY2hwdWZmOiAxNjc2NzY3
MywKLSAgICBwZXJ1OiAxMzQ2ODk5MSwKLSAgICBwaW5rOiAxNjc2MTAzNSwKLSAgICBwbHVtOiAx
NDUyNDYzNywKLSAgICBwb3dkZXJibHVlOiAxMTU5MTkxMCwKLSAgICBwdXJwbGU6IDgzODg3MzYs
Ci0gICAgcmVkOiAxNjcxMTY4MCwKLSAgICByb3N5YnJvd246IDEyMzU3NTE5LAotICAgIHJveWFs
Ymx1ZTogNDI4Njk0NSwKLSAgICBzYWRkbGVicm93bjogOTEyNzE4NywKLSAgICBzYWxtb246IDE2
NDE2ODgyLAotICAgIHNhbmR5YnJvd246IDE2MDMyODY0LAotICAgIHNlYWdyZWVuOiAzMDUwMzI3
LAotICAgIHNlYXNoZWxsOiAxNjc3NDYzOCwKLSAgICBzaWVubmE6IDEwNTA2Nzk3LAotICAgIHNp
bHZlcjogMTI2MzIyNTYsCi0gICAgc2t5Ymx1ZTogODkwMDMzMSwKLSAgICBzbGF0ZWJsdWU6IDY5
NzAwNjEsCi0gICAgc2xhdGVncmF5OiA3MzcyOTQ0LAotICAgIHNsYXRlZ3JleTogNzM3Mjk0NCwK
LSAgICBzbm93OiAxNjc3NTkzMCwKLSAgICBzcHJpbmdncmVlbjogNjU0MDcsCi0gICAgc3RlZWxi
bHVlOiA0NjIwOTgwLAotICAgIHRhbjogMTM4MDg3ODAsCi0gICAgdGVhbDogMzI4OTYsCi0gICAg
dGhpc3RsZTogMTQyMDQ4ODgsCi0gICAgdG9tYXRvOiAxNjczNzA5NSwKLSAgICB0dXJxdW9pc2U6
IDQyNTE4NTYsCi0gICAgdmlvbGV0OiAxNTYzMTA4NiwKLSAgICB3aGVhdDogMTYxMTMzMzEsCi0g
ICAgd2hpdGU6IDE2Nzc3MjE1LAotICAgIHdoaXRlc21va2U6IDE2MTE5Mjg1LAotICAgIHllbGxv
dzogMTY3NzY5NjAsCi0gICAgeWVsbG93Z3JlZW46IDEwMTQ1MDc0Ci0gIH0pOwotICBkM19yZ2Jf
bmFtZXMuZm9yRWFjaChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgZDNfcmdiX25hbWVzLnNl
dChrZXksIGQzX3JnYk51bWJlcih2YWx1ZSkpOwotICB9KTsKLSAgZnVuY3Rpb24gZDNfZnVuY3Rv
cih2KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAiZnVuY3Rpb24iID8gdiA6IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHY7Ci0gICAgfTsKLSAgfQotICBkMy5mdW5jdG9yID0gZDNfZnVu
Y3RvcjsKLSAgZnVuY3Rpb24gZDNfaWRlbnRpdHkoZCkgewotICAgIHJldHVybiBkOwotICB9Ci0g
IGQzLnhociA9IGQzX3hoclR5cGUoZDNfaWRlbnRpdHkpOwotICBmdW5jdGlvbiBkM194aHJUeXBl
KHJlc3BvbnNlKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHVybCwgbWltZVR5cGUsIGNhbGxiYWNr
KSB7Ci0gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgbWltZVR5cGUg
PT09ICJmdW5jdGlvbiIpIGNhbGxiYWNrID0gbWltZVR5cGUsIAotICAgICAgbWltZVR5cGUgPSBu
dWxsOwotICAgICAgcmV0dXJuIGQzX3hocih1cmwsIG1pbWVUeXBlLCByZXNwb25zZSwgY2FsbGJh
Y2spOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfeGhyKHVybCwgbWltZVR5cGUsIHJlc3Bv
bnNlLCBjYWxsYmFjaykgewotICAgIHZhciB4aHIgPSB7fSwgZGlzcGF0Y2ggPSBkMy5kaXNwYXRj
aCgiYmVmb3Jlc2VuZCIsICJwcm9ncmVzcyIsICJsb2FkIiwgImVycm9yIiksIGhlYWRlcnMgPSB7
fSwgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpLCByZXNwb25zZVR5cGUgPSBudWxsOwot
ICAgIGlmIChkM193aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgid2l0aENyZWRlbnRpYWxzIiBp
biByZXF1ZXN0KSAmJiAvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodXJsKSkgcmVxdWVzdCA9IG5l
dyBYRG9tYWluUmVxdWVzdCgpOwotICAgICJvbmxvYWQiIGluIHJlcXVlc3QgPyByZXF1ZXN0Lm9u
bG9hZCA9IHJlcXVlc3Qub25lcnJvciA9IHJlc3BvbmQgOiByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmVxdWVzdC5yZWFkeVN0YXRlID4gMyAmJiByZXNw
b25kKCk7Ci0gICAgfTsKLSAgICBmdW5jdGlvbiByZXNwb25kKCkgewotICAgICAgdmFyIHN0YXR1
cyA9IHJlcXVlc3Quc3RhdHVzLCByZXN1bHQ7Ci0gICAgICBpZiAoIXN0YXR1cyAmJiByZXF1ZXN0
LnJlc3BvbnNlVGV4dCB8fCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMg
PT09IDMwNCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlLmNh
bGwoeGhyLCByZXF1ZXN0KTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgIGRpc3Bh
dGNoLmVycm9yLmNhbGwoeGhyLCBlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgZGlzcGF0Y2gubG9hZC5jYWxsKHhociwgcmVzdWx0KTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGRpc3BhdGNoLmVycm9yLmNhbGwoeGhyLCByZXF1ZXN0KTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgcmVxdWVzdC5vbnByb2dyZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIHZhciBv
ID0gZDMuZXZlbnQ7Ci0gICAgICBkMy5ldmVudCA9IGV2ZW50OwotICAgICAgdHJ5IHsKLSAgICAg
ICAgZGlzcGF0Y2gucHJvZ3Jlc3MuY2FsbCh4aHIsIHJlcXVlc3QpOwotICAgICAgfSBmaW5hbGx5
IHsKLSAgICAgICAgZDMuZXZlbnQgPSBvOwotICAgICAgfQotICAgIH07Ci0gICAgeGhyLmhlYWRl
ciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICBuYW1lID0gKG5hbWUgKyAiIikudG9M
b3dlckNhc2UoKTsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIGhlYWRl
cnNbbmFtZV07Ci0gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgZGVsZXRlIGhlYWRlcnNbbmFtZV07
IGVsc2UgaGVhZGVyc1tuYW1lXSA9IHZhbHVlICsgIiI7Ci0gICAgICByZXR1cm4geGhyOwotICAg
IH07Ci0gICAgeGhyLm1pbWVUeXBlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1pbWVUeXBlOwotICAgICAgbWltZVR5cGUgPSB2YWx1ZSA9
PSBudWxsID8gbnVsbCA6IHZhbHVlICsgIiI7Ci0gICAgICByZXR1cm4geGhyOwotICAgIH07Ci0g
ICAgeGhyLnJlc3BvbnNlVHlwZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiByZXNwb25zZVR5cGU7Ci0gICAgICByZXNwb25zZVR5cGUgPSB2
YWx1ZTsKLSAgICAgIHJldHVybiB4aHI7Ci0gICAgfTsKLSAgICB4aHIucmVzcG9uc2UgPSBmdW5j
dGlvbih2YWx1ZSkgewotICAgICAgcmVzcG9uc2UgPSB2YWx1ZTsKLSAgICAgIHJldHVybiB4aHI7
Ci0gICAgfTsKLSAgICBbICJnZXQiLCAicG9zdCIgXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkg
ewotICAgICAgeGhyW21ldGhvZF0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHhoci5z
ZW5kLmFwcGx5KHhociwgWyBtZXRob2QgXS5jb25jYXQoZDNfYXJyYXkoYXJndW1lbnRzKSkpOwot
ICAgICAgfTsKLSAgICB9KTsKLSAgICB4aHIuc2VuZCA9IGZ1bmN0aW9uKG1ldGhvZCwgZGF0YSwg
Y2FsbGJhY2spIHsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBk
YXRhID09PSAiZnVuY3Rpb24iKSBjYWxsYmFjayA9IGRhdGEsIGRhdGEgPSBudWxsOwotICAgICAg
cmVxdWVzdC5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKLSAgICAgIGlmIChtaW1lVHlwZSAhPSBu
dWxsICYmICEoImFjY2VwdCIgaW4gaGVhZGVycykpIGhlYWRlcnNbImFjY2VwdCJdID0gbWltZVR5
cGUgKyAiLCovKiI7Ci0gICAgICBpZiAocmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKSBmb3IgKHZh
ciBuYW1lIGluIGhlYWRlcnMpIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBoZWFkZXJz
W25hbWVdKTsKLSAgICAgIGlmIChtaW1lVHlwZSAhPSBudWxsICYmIHJlcXVlc3Qub3ZlcnJpZGVN
aW1lVHlwZSkgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlKG1pbWVUeXBlKTsKLSAgICAgIGlmIChy
ZXNwb25zZVR5cGUgIT0gbnVsbCkgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7
Ci0gICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgeGhyLm9uKCJlcnJvciIsIGNhbGxiYWNrKS5v
bigibG9hZCIsIGZ1bmN0aW9uKHJlcXVlc3QpIHsKLSAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVx
dWVzdCk7Ci0gICAgICB9KTsKLSAgICAgIGRpc3BhdGNoLmJlZm9yZXNlbmQuY2FsbCh4aHIsIHJl
cXVlc3QpOwotICAgICAgcmVxdWVzdC5zZW5kKGRhdGEgPT0gbnVsbCA/IG51bGwgOiBkYXRhKTsK
LSAgICAgIHJldHVybiB4aHI7Ci0gICAgfTsKLSAgICB4aHIuYWJvcnQgPSBmdW5jdGlvbigpIHsK
LSAgICAgIHJlcXVlc3QuYWJvcnQoKTsKLSAgICAgIHJldHVybiB4aHI7Ci0gICAgfTsKLSAgICBk
My5yZWJpbmQoeGhyLCBkaXNwYXRjaCwgIm9uIik7Ci0gICAgcmV0dXJuIGNhbGxiYWNrID09IG51
bGwgPyB4aHIgOiB4aHIuZ2V0KGQzX3hocl9maXhDYWxsYmFjayhjYWxsYmFjaykpOwotICB9Ci0g
IGZ1bmN0aW9uIGQzX3hocl9maXhDYWxsYmFjayhjYWxsYmFjaykgewotICAgIHJldHVybiBjYWxs
YmFjay5sZW5ndGggPT09IDEgPyBmdW5jdGlvbihlcnJvciwgcmVxdWVzdCkgewotICAgICAgY2Fs
bGJhY2soZXJyb3IgPT0gbnVsbCA/IHJlcXVlc3QgOiBudWxsKTsKLSAgICB9IDogY2FsbGJhY2s7
Ci0gIH0KLSAgZDMuZHN2ID0gZnVuY3Rpb24oZGVsaW1pdGVyLCBtaW1lVHlwZSkgewotICAgIHZh
ciByZUZvcm1hdCA9IG5ldyBSZWdFeHAoJ1siJyArIGRlbGltaXRlciArICJcbl0iKSwgZGVsaW1p
dGVyQ29kZSA9IGRlbGltaXRlci5jaGFyQ29kZUF0KDApOwotICAgIGZ1bmN0aW9uIGRzdih1cmws
IHJvdywgY2FsbGJhY2spIHsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgY2FsbGJh
Y2sgPSByb3csIHJvdyA9IG51bGw7Ci0gICAgICB2YXIgeGhyID0gZDNfeGhyKHVybCwgbWltZVR5
cGUsIHJvdyA9PSBudWxsID8gcmVzcG9uc2UgOiB0eXBlZFJlc3BvbnNlKHJvdyksIGNhbGxiYWNr
KTsKLSAgICAgIHhoci5yb3cgPSBmdW5jdGlvbihfKSB7Ci0gICAgICAgIHJldHVybiBhcmd1bWVu
dHMubGVuZ3RoID8geGhyLnJlc3BvbnNlKChyb3cgPSBfKSA9PSBudWxsID8gcmVzcG9uc2UgOiB0
eXBlZFJlc3BvbnNlKF8pKSA6IHJvdzsKLSAgICAgIH07Ci0gICAgICByZXR1cm4geGhyOwotICAg
IH0KLSAgICBmdW5jdGlvbiByZXNwb25zZShyZXF1ZXN0KSB7Ci0gICAgICByZXR1cm4gZHN2LnBh
cnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gdHlwZWRSZXNw
b25zZShmKSB7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24ocmVxdWVzdCkgewotICAgICAgICByZXR1
cm4gZHN2LnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0LCBmKTsKLSAgICAgIH07Ci0gICAgfQot
ICAgIGRzdi5wYXJzZSA9IGZ1bmN0aW9uKHRleHQsIGYpIHsKLSAgICAgIHZhciBvOwotICAgICAg
cmV0dXJuIGRzdi5wYXJzZVJvd3ModGV4dCwgZnVuY3Rpb24ocm93LCBpKSB7Ci0gICAgICAgIGlm
IChvKSByZXR1cm4gbyhyb3csIGkgLSAxKTsKLSAgICAgICAgdmFyIGEgPSBuZXcgRnVuY3Rpb24o
ImQiLCAicmV0dXJuIHsiICsgcm93Lm1hcChmdW5jdGlvbihuYW1lLCBpKSB7Ci0gICAgICAgICAg
cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5hbWUpICsgIjogZFsiICsgaSArICJdIjsKLSAgICAgICAg
fSkuam9pbigiLCIpICsgIn0iKTsKLSAgICAgICAgbyA9IGYgPyBmdW5jdGlvbihyb3csIGkpIHsK
LSAgICAgICAgICByZXR1cm4gZihhKHJvdyksIGkpOwotICAgICAgICB9IDogYTsKLSAgICAgIH0p
OwotICAgIH07Ci0gICAgZHN2LnBhcnNlUm93cyA9IGZ1bmN0aW9uKHRleHQsIGYpIHsKLSAgICAg
IHZhciBFT0wgPSB7fSwgRU9GID0ge30sIHJvd3MgPSBbXSwgTiA9IHRleHQubGVuZ3RoLCBJID0g
MCwgbiA9IDAsIHQsIGVvbDsKLSAgICAgIGZ1bmN0aW9uIHRva2VuKCkgewotICAgICAgICBpZiAo
SSA+PSBOKSByZXR1cm4gRU9GOwotICAgICAgICBpZiAoZW9sKSByZXR1cm4gZW9sID0gZmFsc2Us
IEVPTDsKLSAgICAgICAgdmFyIGogPSBJOwotICAgICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGop
ID09PSAzNCkgewotICAgICAgICAgIHZhciBpID0gajsKLSAgICAgICAgICB3aGlsZSAoaSsrIDwg
TikgewotICAgICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpKSA9PT0gMzQpIHsKLSAgICAg
ICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpICsgMSkgIT09IDM0KSBicmVhazsKLSAgICAg
ICAgICAgICAgKytpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBJID0g
aSArIDI7Ci0gICAgICAgICAgdmFyIGMgPSB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpOwotICAgICAg
ICAgIGlmIChjID09PSAxMykgewotICAgICAgICAgICAgZW9sID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmICh0ZXh0LmNoYXJDb2RlQXQoaSArIDIpID09PSAxMCkgKytJOwotICAgICAgICAgIH0gZWxz
ZSBpZiAoYyA9PT0gMTApIHsKLSAgICAgICAgICAgIGVvbCA9IHRydWU7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZyhqICsgMSwgaSkucmVwbGFjZSgvIiIvZywg
JyInKTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoSSA8IE4pIHsKLSAgICAgICAgICB2YXIg
YyA9IHRleHQuY2hhckNvZGVBdChJKyspLCBrID0gMTsKLSAgICAgICAgICBpZiAoYyA9PT0gMTAp
IGVvbCA9IHRydWU7IGVsc2UgaWYgKGMgPT09IDEzKSB7Ci0gICAgICAgICAgICBlb2wgPSB0cnVl
OwotICAgICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChJKSA9PT0gMTApICsrSSwgKytrOwot
ICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gZGVsaW1pdGVyQ29kZSkgY29udGludWU7Ci0gICAg
ICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKGosIEkgLSBrKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoaik7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoKHQgPSB0
b2tlbigpKSAhPT0gRU9GKSB7Ci0gICAgICAgIHZhciBhID0gW107Ci0gICAgICAgIHdoaWxlICh0
ICE9PSBFT0wgJiYgdCAhPT0gRU9GKSB7Ci0gICAgICAgICAgYS5wdXNoKHQpOwotICAgICAgICAg
IHQgPSB0b2tlbigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmICYmICEoYSA9IGYoYSwgbisr
KSkpIGNvbnRpbnVlOwotICAgICAgICByb3dzLnB1c2goYSk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gcm93czsKLSAgICB9OwotICAgIGRzdi5mb3JtYXQgPSBmdW5jdGlvbihyb3dzKSB7Ci0gICAg
ICBpZiAoQXJyYXkuaXNBcnJheShyb3dzWzBdKSkgcmV0dXJuIGRzdi5mb3JtYXRSb3dzKHJvd3Mp
OwotICAgICAgdmFyIGZpZWxkU2V0ID0gbmV3IGQzX1NldCgpLCBmaWVsZHMgPSBbXTsKLSAgICAg
IHJvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpIHsKLSAgICAgICAgZm9yICh2YXIgZmllbGQgaW4g
cm93KSB7Ci0gICAgICAgICAgaWYgKCFmaWVsZFNldC5oYXMoZmllbGQpKSB7Ci0gICAgICAgICAg
ICBmaWVsZHMucHVzaChmaWVsZFNldC5hZGQoZmllbGQpKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotICAgICAgcmV0dXJuIFsgZmllbGRzLm1hcChmb3JtYXRWYWx1ZSkuam9p
bihkZWxpbWl0ZXIpIF0uY29uY2F0KHJvd3MubWFwKGZ1bmN0aW9uKHJvdykgewotICAgICAgICBy
ZXR1cm4gZmllbGRzLm1hcChmdW5jdGlvbihmaWVsZCkgewotICAgICAgICAgIHJldHVybiBmb3Jt
YXRWYWx1ZShyb3dbZmllbGRdKTsKLSAgICAgICAgfSkuam9pbihkZWxpbWl0ZXIpOwotICAgICAg
fSkpLmpvaW4oIlxuIik7Ci0gICAgfTsKLSAgICBkc3YuZm9ybWF0Um93cyA9IGZ1bmN0aW9uKHJv
d3MpIHsKLSAgICAgIHJldHVybiByb3dzLm1hcChmb3JtYXRSb3cpLmpvaW4oIlxuIik7Ci0gICAg
fTsKLSAgICBmdW5jdGlvbiBmb3JtYXRSb3cocm93KSB7Ci0gICAgICByZXR1cm4gcm93Lm1hcChm
b3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpOwotICAgIH0KLSAgICBmdW5jdGlvbiBmb3JtYXRW
YWx1ZSh0ZXh0KSB7Ci0gICAgICByZXR1cm4gcmVGb3JtYXQudGVzdCh0ZXh0KSA/ICciJyArIHRl
eHQucmVwbGFjZSgvXCIvZywgJyIiJykgKyAnIicgOiB0ZXh0OwotICAgIH0KLSAgICByZXR1cm4g
ZHN2OwotICB9OwotICBkMy5jc3YgPSBkMy5kc3YoIiwiLCAidGV4dC9jc3YiKTsKLSAgZDMudHN2
ID0gZDMuZHN2KCIgICAgIiwgInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTsKLSAgZDMudG91
Y2ggPSBmdW5jdGlvbihjb250YWluZXIsIHRvdWNoZXMsIGlkZW50aWZpZXIpIHsKLSAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA8IDMpIGlkZW50aWZpZXIgPSB0b3VjaGVzLCB0b3VjaGVzID0gZDNf
ZXZlbnRTb3VyY2UoKS5jaGFuZ2VkVG91Y2hlczsKLSAgICBpZiAodG91Y2hlcykgZm9yICh2YXIg
aSA9IDAsIG4gPSB0b3VjaGVzLmxlbmd0aCwgdG91Y2g7IGkgPCBuOyArK2kpIHsKLSAgICAgIGlm
ICgodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7Ci0gICAg
ICAgIHJldHVybiBkM19tb3VzZVBvaW50KGNvbnRhaW5lciwgdG91Y2gpOwotICAgICAgfQotICAg
IH0KLSAgfTsKLSAgdmFyIGQzX3RpbWVyX3F1ZXVlSGVhZCwgZDNfdGltZXJfcXVldWVUYWlsLCBk
M190aW1lcl9pbnRlcnZhbCwgZDNfdGltZXJfdGltZW91dCwgZDNfdGltZXJfYWN0aXZlLCBkM190
aW1lcl9mcmFtZSA9IGQzX3dpbmRvd1tkM192ZW5kb3JTeW1ib2woZDNfd2luZG93LCAicmVxdWVz
dEFuaW1hdGlvbkZyYW1lIildIHx8IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgc2V0VGltZW91
dChjYWxsYmFjaywgMTcpOwotICB9OwotICBkMy50aW1lciA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBk
ZWxheSwgdGhlbikgewotICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICBpZiAobiA8
IDIpIGRlbGF5ID0gMDsKLSAgICBpZiAobiA8IDMpIHRoZW4gPSBEYXRlLm5vdygpOwotICAgIHZh
ciB0aW1lID0gdGhlbiArIGRlbGF5LCB0aW1lciA9IHsKLSAgICAgIGM6IGNhbGxiYWNrLAotICAg
ICAgdDogdGltZSwKLSAgICAgIGY6IGZhbHNlLAotICAgICAgbjogbnVsbAotICAgIH07Ci0gICAg
aWYgKGQzX3RpbWVyX3F1ZXVlVGFpbCkgZDNfdGltZXJfcXVldWVUYWlsLm4gPSB0aW1lcjsgZWxz
ZSBkM190aW1lcl9xdWV1ZUhlYWQgPSB0aW1lcjsKLSAgICBkM190aW1lcl9xdWV1ZVRhaWwgPSB0
aW1lcjsKLSAgICBpZiAoIWQzX3RpbWVyX2ludGVydmFsKSB7Ci0gICAgICBkM190aW1lcl90aW1l
b3V0ID0gY2xlYXJUaW1lb3V0KGQzX3RpbWVyX3RpbWVvdXQpOwotICAgICAgZDNfdGltZXJfaW50
ZXJ2YWwgPSAxOwotICAgICAgZDNfdGltZXJfZnJhbWUoZDNfdGltZXJfc3RlcCk7Ci0gICAgfQot
ICB9OwotICBmdW5jdGlvbiBkM190aW1lcl9zdGVwKCkgewotICAgIHZhciBub3cgPSBkM190aW1l
cl9tYXJrKCksIGRlbGF5ID0gZDNfdGltZXJfc3dlZXAoKSAtIG5vdzsKLSAgICBpZiAoZGVsYXkg
PiAyNCkgewotICAgICAgaWYgKGlzRmluaXRlKGRlbGF5KSkgewotICAgICAgICBjbGVhclRpbWVv
dXQoZDNfdGltZXJfdGltZW91dCk7Ci0gICAgICAgIGQzX3RpbWVyX3RpbWVvdXQgPSBzZXRUaW1l
b3V0KGQzX3RpbWVyX3N0ZXAsIGRlbGF5KTsKLSAgICAgIH0KLSAgICAgIGQzX3RpbWVyX2ludGVy
dmFsID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgZDNfdGltZXJfaW50ZXJ2YWwgPSAxOwotICAg
ICAgZDNfdGltZXJfZnJhbWUoZDNfdGltZXJfc3RlcCk7Ci0gICAgfQotICB9Ci0gIGQzLnRpbWVy
LmZsdXNoID0gZnVuY3Rpb24oKSB7Ci0gICAgZDNfdGltZXJfbWFyaygpOwotICAgIGQzX3RpbWVy
X3N3ZWVwKCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3RpbWVyX21hcmsoKSB7Ci0gICAgdmFyIG5v
dyA9IERhdGUubm93KCk7Ci0gICAgZDNfdGltZXJfYWN0aXZlID0gZDNfdGltZXJfcXVldWVIZWFk
OwotICAgIHdoaWxlIChkM190aW1lcl9hY3RpdmUpIHsKLSAgICAgIGlmIChub3cgPj0gZDNfdGlt
ZXJfYWN0aXZlLnQpIGQzX3RpbWVyX2FjdGl2ZS5mID0gZDNfdGltZXJfYWN0aXZlLmMobm93IC0g
ZDNfdGltZXJfYWN0aXZlLnQpOwotICAgICAgZDNfdGltZXJfYWN0aXZlID0gZDNfdGltZXJfYWN0
aXZlLm47Ci0gICAgfQotICAgIHJldHVybiBub3c7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZXJf
c3dlZXAoKSB7Ci0gICAgdmFyIHQwLCB0MSA9IGQzX3RpbWVyX3F1ZXVlSGVhZCwgdGltZSA9IElu
ZmluaXR5OwotICAgIHdoaWxlICh0MSkgewotICAgICAgaWYgKHQxLmYpIHsKLSAgICAgICAgdDEg
PSB0MCA/IHQwLm4gPSB0MS5uIDogZDNfdGltZXJfcXVldWVIZWFkID0gdDEubjsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmICh0MS50IDwgdGltZSkgdGltZSA9IHQxLnQ7Ci0gICAgICAgIHQx
ID0gKHQwID0gdDEpLm47Ci0gICAgICB9Ci0gICAgfQotICAgIGQzX3RpbWVyX3F1ZXVlVGFpbCA9
IHQwOwotICAgIHJldHVybiB0aW1lOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Zvcm1hdF9wcmVjaXNp
b24oeCwgcCkgewotICAgIHJldHVybiBwIC0gKHggPyBNYXRoLmNlaWwoTWF0aC5sb2coeCkgLyBN
YXRoLkxOMTApIDogMSk7Ci0gIH0KLSAgZDMucm91bmQgPSBmdW5jdGlvbih4LCBuKSB7Ci0gICAg
cmV0dXJuIG4gPyBNYXRoLnJvdW5kKHggKiAobiA9IE1hdGgucG93KDEwLCBuKSkpIC8gbiA6IE1h
dGgucm91bmQoeCk7Ci0gIH07Ci0gIHZhciBkM19mb3JtYXRQcmVmaXhlcyA9IFsgInkiLCAieiIs
ICJhIiwgImYiLCAicCIsICJuIiwgIsK1IiwgIm0iLCAiIiwgImsiLCAiTSIsICJHIiwgIlQiLCAi
UCIsICJFIiwgIloiLCAiWSIgXS5tYXAoZDNfZm9ybWF0UHJlZml4KTsKLSAgZDMuZm9ybWF0UHJl
Zml4ID0gZnVuY3Rpb24odmFsdWUsIHByZWNpc2lvbikgewotICAgIHZhciBpID0gMDsKLSAgICBp
ZiAodmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSA8IDApIHZhbHVlICo9IC0xOwotICAgICAgaWYg
KHByZWNpc2lvbikgdmFsdWUgPSBkMy5yb3VuZCh2YWx1ZSwgZDNfZm9ybWF0X3ByZWNpc2lvbih2
YWx1ZSwgcHJlY2lzaW9uKSk7Ci0gICAgICBpID0gMSArIE1hdGguZmxvb3IoMWUtMTIgKyBNYXRo
LmxvZyh2YWx1ZSkgLyBNYXRoLkxOMTApOwotICAgICAgaSA9IE1hdGgubWF4KC0yNCwgTWF0aC5t
aW4oMjQsIE1hdGguZmxvb3IoKGkgLSAxKSAvIDMpICogMykpOwotICAgIH0KLSAgICByZXR1cm4g
ZDNfZm9ybWF0UHJlZml4ZXNbOCArIGkgLyAzXTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfZm9ybWF0
UHJlZml4KGQsIGkpIHsKLSAgICB2YXIgayA9IE1hdGgucG93KDEwLCBhYnMoOCAtIGkpICogMyk7
Ci0gICAgcmV0dXJuIHsKLSAgICAgIHNjYWxlOiBpID4gOCA/IGZ1bmN0aW9uKGQpIHsKLSAgICAg
ICAgcmV0dXJuIGQgLyBrOwotICAgICAgfSA6IGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0dXJu
IGQgKiBrOwotICAgICAgfSwKLSAgICAgIHN5bWJvbDogZAotICAgIH07Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfbG9jYWxlX251bWJlckZvcm1hdChsb2NhbGUpIHsKLSAgICB2YXIgbG9jYWxlX2RlY2lt
YWwgPSBsb2NhbGUuZGVjaW1hbCwgbG9jYWxlX3Rob3VzYW5kcyA9IGxvY2FsZS50aG91c2FuZHMs
IGxvY2FsZV9ncm91cGluZyA9IGxvY2FsZS5ncm91cGluZywgbG9jYWxlX2N1cnJlbmN5ID0gbG9j
YWxlLmN1cnJlbmN5LCBmb3JtYXRHcm91cCA9IGxvY2FsZV9ncm91cGluZyA/IGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCwgdCA9IFtdLCBqID0gMCwgZyA9IGxv
Y2FsZV9ncm91cGluZ1swXTsKLSAgICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkgewotICAgICAg
ICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTsKLSAgICAgICAgZyA9IGxv
Y2FsZV9ncm91cGluZ1tqID0gKGogKyAxKSAlIGxvY2FsZV9ncm91cGluZy5sZW5ndGhdOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4obG9jYWxlX3Rob3VzYW5kcyk7Ci0g
ICAgfSA6IGQzX2lkZW50aXR5OwotICAgIHJldHVybiBmdW5jdGlvbihzcGVjaWZpZXIpIHsKLSAg
ICAgIHZhciBtYXRjaCA9IGQzX2Zvcm1hdF9yZS5leGVjKHNwZWNpZmllciksIGZpbGwgPSBtYXRj
aFsxXSB8fCAiICIsIGFsaWduID0gbWF0Y2hbMl0gfHwgIj4iLCBzaWduID0gbWF0Y2hbM10gfHwg
IiIsIHN5bWJvbCA9IG1hdGNoWzRdIHx8ICIiLCB6ZmlsbCA9IG1hdGNoWzVdLCB3aWR0aCA9ICtt
YXRjaFs2XSwgY29tbWEgPSBtYXRjaFs3XSwgcHJlY2lzaW9uID0gbWF0Y2hbOF0sIHR5cGUgPSBt
YXRjaFs5XSwgc2NhbGUgPSAxLCBwcmVmaXggPSAiIiwgc3VmZml4ID0gIiIsIGludGVnZXIgPSBm
YWxzZTsKLSAgICAgIGlmIChwcmVjaXNpb24pIHByZWNpc2lvbiA9ICtwcmVjaXNpb24uc3Vic3Ry
aW5nKDEpOwotICAgICAgaWYgKHpmaWxsIHx8IGZpbGwgPT09ICIwIiAmJiBhbGlnbiA9PT0gIj0i
KSB7Ci0gICAgICAgIHpmaWxsID0gZmlsbCA9ICIwIjsKLSAgICAgICAgYWxpZ24gPSAiPSI7Ci0g
ICAgICAgIGlmIChjb21tYSkgd2lkdGggLT0gTWF0aC5mbG9vcigod2lkdGggLSAxKSAvIDQpOwot
ICAgICAgfQotICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgY2FzZSAibiI6Ci0gICAgICAg
IGNvbW1hID0gdHJ1ZTsKLSAgICAgICAgdHlwZSA9ICJnIjsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICBjYXNlICIlIjoKLSAgICAgICAgc2NhbGUgPSAxMDA7Ci0gICAgICAgIHN1ZmZpeCA9ICIl
IjsKLSAgICAgICAgdHlwZSA9ICJmIjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICBjYXNlICJw
IjoKLSAgICAgICAgc2NhbGUgPSAxMDA7Ci0gICAgICAgIHN1ZmZpeCA9ICIlIjsKLSAgICAgICAg
dHlwZSA9ICJyIjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICBjYXNlICJiIjoKLSAgICAgICBj
YXNlICJvIjoKLSAgICAgICBjYXNlICJ4IjoKLSAgICAgICBjYXNlICJYIjoKLSAgICAgICAgaWYg
KHN5bWJvbCA9PT0gIiMiKSBwcmVmaXggPSAiMCIgKyB0eXBlLnRvTG93ZXJDYXNlKCk7Ci0KLSAg
ICAgICBjYXNlICJjIjoKLSAgICAgICBjYXNlICJkIjoKLSAgICAgICAgaW50ZWdlciA9IHRydWU7
Ci0gICAgICAgIHByZWNpc2lvbiA9IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgY2FzZSAi
cyI6Ci0gICAgICAgIHNjYWxlID0gLTE7Ci0gICAgICAgIHR5cGUgPSAiciI7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgICAgaWYgKHN5bWJvbCA9PT0gIiQiKSBwcmVmaXggPSBsb2NhbGVf
Y3VycmVuY3lbMF0sIHN1ZmZpeCA9IGxvY2FsZV9jdXJyZW5jeVsxXTsKLSAgICAgIGlmICh0eXBl
ID09ICJyIiAmJiAhcHJlY2lzaW9uKSB0eXBlID0gImciOwotICAgICAgaWYgKHByZWNpc2lvbiAh
PSBudWxsKSB7Ci0gICAgICAgIGlmICh0eXBlID09ICJnIikgcHJlY2lzaW9uID0gTWF0aC5tYXgo
MSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpOyBlbHNlIGlmICh0eXBlID09ICJlIiB8fCB0eXBl
ID09ICJmIikgcHJlY2lzaW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikp
OwotICAgICAgfQotICAgICAgdHlwZSA9IGQzX2Zvcm1hdF90eXBlcy5nZXQodHlwZSkgfHwgZDNf
Zm9ybWF0X3R5cGVEZWZhdWx0OwotICAgICAgdmFyIHpjb21tYSA9IHpmaWxsICYmIGNvbW1hOwot
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIHZhciBmdWxsU3VmZml4ID0g
c3VmZml4OwotICAgICAgICBpZiAoaW50ZWdlciAmJiB2YWx1ZSAlIDEpIHJldHVybiAiIjsKLSAg
ICAgICAgdmFyIG5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1
ZSA8IDAgPyAodmFsdWUgPSAtdmFsdWUsICItIikgOiBzaWduOwotICAgICAgICBpZiAoc2NhbGUg
PCAwKSB7Ci0gICAgICAgICAgdmFyIHVuaXQgPSBkMy5mb3JtYXRQcmVmaXgodmFsdWUsIHByZWNp
c2lvbik7Ci0gICAgICAgICAgdmFsdWUgPSB1bml0LnNjYWxlKHZhbHVlKTsKLSAgICAgICAgICBm
dWxsU3VmZml4ID0gdW5pdC5zeW1ib2wgKyBzdWZmaXg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgdmFsdWUgKj0gc2NhbGU7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUgPSB0eXBlKHZh
bHVlLCBwcmVjaXNpb24pOwotICAgICAgICB2YXIgaSA9IHZhbHVlLmxhc3RJbmRleE9mKCIuIiks
IGJlZm9yZSA9IGkgPCAwID8gdmFsdWUgOiB2YWx1ZS5zdWJzdHJpbmcoMCwgaSksIGFmdGVyID0g
aSA8IDAgPyAiIiA6IGxvY2FsZV9kZWNpbWFsICsgdmFsdWUuc3Vic3RyaW5nKGkgKyAxKTsKLSAg
ICAgICAgaWYgKCF6ZmlsbCAmJiBjb21tYSkgYmVmb3JlID0gZm9ybWF0R3JvdXAoYmVmb3JlKTsK
LSAgICAgICAgdmFyIGxlbmd0aCA9IHByZWZpeC5sZW5ndGggKyBiZWZvcmUubGVuZ3RoICsgYWZ0
ZXIubGVuZ3RoICsgKHpjb21tYSA/IDAgOiBuZWdhdGl2ZS5sZW5ndGgpLCBwYWRkaW5nID0gbGVu
Z3RoIDwgd2lkdGggPyBuZXcgQXJyYXkobGVuZ3RoID0gd2lkdGggLSBsZW5ndGggKyAxKS5qb2lu
KGZpbGwpIDogIiI7Ci0gICAgICAgIGlmICh6Y29tbWEpIGJlZm9yZSA9IGZvcm1hdEdyb3VwKHBh
ZGRpbmcgKyBiZWZvcmUpOwotICAgICAgICBuZWdhdGl2ZSArPSBwcmVmaXg7Ci0gICAgICAgIHZh
bHVlID0gYmVmb3JlICsgYWZ0ZXI7Ci0gICAgICAgIHJldHVybiAoYWxpZ24gPT09ICI8IiA/IG5l
Z2F0aXZlICsgdmFsdWUgKyBwYWRkaW5nIDogYWxpZ24gPT09ICI+IiA/IHBhZGRpbmcgKyBuZWdh
dGl2ZSArIHZhbHVlIDogYWxpZ24gPT09ICJeIiA/IHBhZGRpbmcuc3Vic3RyaW5nKDAsIGxlbmd0
aCA+Pj0gMSkgKyBuZWdhdGl2ZSArIHZhbHVlICsgcGFkZGluZy5zdWJzdHJpbmcobGVuZ3RoKSA6
IG5lZ2F0aXZlICsgKHpjb21tYSA/IHZhbHVlIDogcGFkZGluZyArIHZhbHVlKSkgKyBmdWxsU3Vm
Zml4OwotICAgICAgfTsKLSAgICB9OwotICB9Ci0gIHZhciBkM19mb3JtYXRfcmUgPSAvKD86KFte
e10pPyhbPD49Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFth
LXolXSk/L2k7Ci0gIHZhciBkM19mb3JtYXRfdHlwZXMgPSBkMy5tYXAoewotICAgIGI6IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIHJldHVybiB4LnRvU3RyaW5nKDIpOwotICAgIH0sCi0gICAgYzogZnVu
Y3Rpb24oeCkgewotICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoeCk7Ci0gICAgfSwK
LSAgICBvOiBmdW5jdGlvbih4KSB7Ci0gICAgICByZXR1cm4geC50b1N0cmluZyg4KTsKLSAgICB9
LAotICAgIHg6IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiB4LnRvU3RyaW5nKDE2KTsKLSAg
ICB9LAotICAgIFg6IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiB4LnRvU3RyaW5nKDE2KS50
b1VwcGVyQ2FzZSgpOwotICAgIH0sCi0gICAgZzogZnVuY3Rpb24oeCwgcCkgewotICAgICAgcmV0
dXJuIHgudG9QcmVjaXNpb24ocCk7Ci0gICAgfSwKLSAgICBlOiBmdW5jdGlvbih4LCBwKSB7Ci0g
ICAgICByZXR1cm4geC50b0V4cG9uZW50aWFsKHApOwotICAgIH0sCi0gICAgZjogZnVuY3Rpb24o
eCwgcCkgewotICAgICAgcmV0dXJuIHgudG9GaXhlZChwKTsKLSAgICB9LAotICAgIHI6IGZ1bmN0
aW9uKHgsIHApIHsKLSAgICAgIHJldHVybiAoeCA9IGQzLnJvdW5kKHgsIGQzX2Zvcm1hdF9wcmVj
aXNpb24oeCwgcCkpKS50b0ZpeGVkKE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBkM19mb3JtYXRf
cHJlY2lzaW9uKHggKiAoMSArIDFlLTE1KSwgcCkpKSk7Ci0gICAgfQotICB9KTsKLSAgZnVuY3Rp
b24gZDNfZm9ybWF0X3R5cGVEZWZhdWx0KHgpIHsKLSAgICByZXR1cm4geCArICIiOwotICB9Ci0g
IHZhciBkM190aW1lID0gZDMudGltZSA9IHt9LCBkM19kYXRlID0gRGF0ZTsKLSAgZnVuY3Rpb24g
ZDNfZGF0ZV91dGMoKSB7Ci0gICAgdGhpcy5fID0gbmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aCA+
IDEgPyBEYXRlLlVUQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogYXJndW1lbnRzWzBdKTsKLSAg
fQotICBkM19kYXRlX3V0Yy5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0RGF0ZTogZnVuY3Rpb24oKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKTsKLSAgICB9LAotICAgIGdldERheTog
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpOwotICAgIH0sCi0g
ICAgZ2V0RnVsbFllYXI6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuXy5nZXRVVENG
dWxsWWVhcigpOwotICAgIH0sCi0gICAgZ2V0SG91cnM6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0
dXJuIHRoaXMuXy5nZXRVVENIb3VycygpOwotICAgIH0sCi0gICAgZ2V0TWlsbGlzZWNvbmRzOiBm
dW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLl8uZ2V0VVRDTWlsbGlzZWNvbmRzKCk7Ci0g
ICAgfSwKLSAgICBnZXRNaW51dGVzOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLl8u
Z2V0VVRDTWludXRlcygpOwotICAgIH0sCi0gICAgZ2V0TW9udGg6IGZ1bmN0aW9uKCkgewotICAg
ICAgcmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpOwotICAgIH0sCi0gICAgZ2V0U2Vjb25kczog
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVUQ1NlY29uZHMoKTsKLSAgICB9
LAotICAgIGdldFRpbWU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuXy5nZXRUaW1l
KCk7Ci0gICAgfSwKLSAgICBnZXRUaW1lem9uZU9mZnNldDogZnVuY3Rpb24oKSB7Ci0gICAgICBy
ZXR1cm4gMDsKLSAgICB9LAotICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IHRoaXMuXy52YWx1ZU9mKCk7Ci0gICAgfSwKLSAgICBzZXREYXRlOiBmdW5jdGlvbigpIHsKLSAg
ICAgIGQzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLCBhcmd1bWVudHMp
OwotICAgIH0sCi0gICAgc2V0RGF5OiBmdW5jdGlvbigpIHsKLSAgICAgIGQzX3RpbWVfcHJvdG90
eXBlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAgICBzZXRG
dWxsWWVhcjogZnVuY3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3Byb3RvdHlwZS5zZXRVVENGdWxs
WWVhci5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAgICBzZXRIb3VyczogZnVu
Y3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3Byb3RvdHlwZS5zZXRVVENIb3Vycy5hcHBseSh0aGlz
Ll8sIGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAgICBzZXRNaWxsaXNlY29uZHM6IGZ1bmN0aW9uKCkg
ewotICAgICAgZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMu
XywgYXJndW1lbnRzKTsKLSAgICB9LAotICAgIHNldE1pbnV0ZXM6IGZ1bmN0aW9uKCkgewotICAg
ICAgZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sIGFyZ3VtZW50
cyk7Ci0gICAgfSwKLSAgICBzZXRNb250aDogZnVuY3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3By
b3RvdHlwZS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAg
ICBzZXRTZWNvbmRzOiBmdW5jdGlvbigpIHsKLSAgICAgIGQzX3RpbWVfcHJvdG90eXBlLnNldFVU
Q1NlY29uZHMuYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpOwotICAgIH0sCi0gICAgc2V0VGltZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3Byb3RvdHlwZS5zZXRUaW1lLmFwcGx5KHRoaXMu
XywgYXJndW1lbnRzKTsKLSAgICB9Ci0gIH07Ci0gIHZhciBkM190aW1lX3Byb3RvdHlwZSA9IERh
dGUucHJvdG90eXBlOwotICBmdW5jdGlvbiBkM190aW1lX2ludGVydmFsKGxvY2FsLCBzdGVwLCBu
dW1iZXIpIHsKLSAgICBmdW5jdGlvbiByb3VuZChkYXRlKSB7Ci0gICAgICB2YXIgZDAgPSBsb2Nh
bChkYXRlKSwgZDEgPSBvZmZzZXQoZDAsIDEpOwotICAgICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQx
IC0gZGF0ZSA/IGQwIDogZDE7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGNlaWwoZGF0ZSkgewotICAg
ICAgc3RlcChkYXRlID0gbG9jYWwobmV3IGQzX2RhdGUoZGF0ZSAtIDEpKSwgMSk7Ci0gICAgICBy
ZXR1cm4gZGF0ZTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gb2Zmc2V0KGRhdGUsIGspIHsKLSAgICAg
IHN0ZXAoZGF0ZSA9IG5ldyBkM19kYXRlKCtkYXRlKSwgayk7Ci0gICAgICByZXR1cm4gZGF0ZTsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gcmFuZ2UodDAsIHQxLCBkdCkgewotICAgICAgdmFyIHRpbWUg
PSBjZWlsKHQwKSwgdGltZXMgPSBbXTsKLSAgICAgIGlmIChkdCA+IDEpIHsKLSAgICAgICAgd2hp
bGUgKHRpbWUgPCB0MSkgewotICAgICAgICAgIGlmICghKG51bWJlcih0aW1lKSAlIGR0KSkgdGlt
ZXMucHVzaChuZXcgRGF0ZSgrdGltZSkpOwotICAgICAgICAgIHN0ZXAodGltZSwgMSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0aW1lIDwgdDEpIHRpbWVzLnB1
c2gobmV3IERhdGUoK3RpbWUpKSwgc3RlcCh0aW1lLCAxKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biB0aW1lczsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmFuZ2VfdXRjKHQwLCB0MSwgZHQpIHsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGQzX2RhdGUgPSBkM19kYXRlX3V0YzsKLSAgICAgICAgdmFyIHV0
YyA9IG5ldyBkM19kYXRlX3V0YygpOwotICAgICAgICB1dGMuXyA9IHQwOwotICAgICAgICByZXR1
cm4gcmFuZ2UodXRjLCB0MSwgZHQpOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgZDNfZGF0
ZSA9IERhdGU7Ci0gICAgICB9Ci0gICAgfQotICAgIGxvY2FsLmZsb29yID0gbG9jYWw7Ci0gICAg
bG9jYWwucm91bmQgPSByb3VuZDsKLSAgICBsb2NhbC5jZWlsID0gY2VpbDsKLSAgICBsb2NhbC5v
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbG9jYWwucmFuZ2UgPSByYW5nZTsKLSAgICB2YXIgdXRjID0g
bG9jYWwudXRjID0gZDNfdGltZV9pbnRlcnZhbF91dGMobG9jYWwpOwotICAgIHV0Yy5mbG9vciA9
IHV0YzsKLSAgICB1dGMucm91bmQgPSBkM190aW1lX2ludGVydmFsX3V0Yyhyb3VuZCk7Ci0gICAg
dXRjLmNlaWwgPSBkM190aW1lX2ludGVydmFsX3V0YyhjZWlsKTsKLSAgICB1dGMub2Zmc2V0ID0g
ZDNfdGltZV9pbnRlcnZhbF91dGMob2Zmc2V0KTsKLSAgICB1dGMucmFuZ2UgPSByYW5nZV91dGM7
Ci0gICAgcmV0dXJuIGxvY2FsOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfaW50ZXJ2YWxfdXRj
KG1ldGhvZCkgewotICAgIHJldHVybiBmdW5jdGlvbihkYXRlLCBrKSB7Ci0gICAgICB0cnkgewot
ICAgICAgICBkM19kYXRlID0gZDNfZGF0ZV91dGM7Ci0gICAgICAgIHZhciB1dGMgPSBuZXcgZDNf
ZGF0ZV91dGMoKTsKLSAgICAgICAgdXRjLl8gPSBkYXRlOwotICAgICAgICByZXR1cm4gbWV0aG9k
KHV0YywgaykuXzsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGQzX2RhdGUgPSBEYXRlOwot
ICAgICAgfQotICAgIH07Ci0gIH0KLSAgZDNfdGltZS55ZWFyID0gZDNfdGltZV9pbnRlcnZhbChm
dW5jdGlvbihkYXRlKSB7Ci0gICAgZGF0ZSA9IGQzX3RpbWUuZGF5KGRhdGUpOwotICAgIGRhdGUu
c2V0TW9udGgoMCwgMSk7Ci0gICAgcmV0dXJuIGRhdGU7Ci0gIH0sIGZ1bmN0aW9uKGRhdGUsIG9m
ZnNldCkgewotICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgb2Zmc2V0
KTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSkgewotICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7
Ci0gIH0pOwotICBkM190aW1lLnllYXJzID0gZDNfdGltZS55ZWFyLnJhbmdlOwotICBkM190aW1l
LnllYXJzLnV0YyA9IGQzX3RpbWUueWVhci51dGMucmFuZ2U7Ci0gIGQzX3RpbWUuZGF5ID0gZDNf
dGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7Ci0gICAgdmFyIGRheSA9IG5ldyBkM19kYXRl
KDJlMywgMCk7Ci0gICAgZGF5LnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5n
ZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7Ci0gICAgcmV0dXJuIGRheTsKLSAgfSwgZnVuY3Rp
b24oZGF0ZSwgb2Zmc2V0KSB7Ci0gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgb2Zm
c2V0KTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSkgewotICAgIHJldHVybiBkYXRlLmdldERhdGUoKSAt
IDE7Ci0gIH0pOwotICBkM190aW1lLmRheXMgPSBkM190aW1lLmRheS5yYW5nZTsKLSAgZDNfdGlt
ZS5kYXlzLnV0YyA9IGQzX3RpbWUuZGF5LnV0Yy5yYW5nZTsKLSAgZDNfdGltZS5kYXlPZlllYXIg
PSBmdW5jdGlvbihkYXRlKSB7Ci0gICAgdmFyIHllYXIgPSBkM190aW1lLnllYXIoZGF0ZSk7Ci0g
ICAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGUgLSB5ZWFyIC0gKGRhdGUuZ2V0VGltZXpvbmVPZmZz
ZXQoKSAtIHllYXIuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2ZTQpIC8gODY0ZTUpOwotICB9Owot
ICBbICJzdW5kYXkiLCAibW9uZGF5IiwgInR1ZXNkYXkiLCAid2VkbmVzZGF5IiwgInRodXJzZGF5
IiwgImZyaWRheSIsICJzYXR1cmRheSIgXS5mb3JFYWNoKGZ1bmN0aW9uKGRheSwgaSkgewotICAg
IGkgPSA3IC0gaTsKLSAgICB2YXIgaW50ZXJ2YWwgPSBkM190aW1lW2RheV0gPSBkM190aW1lX2lu
dGVydmFsKGZ1bmN0aW9uKGRhdGUpIHsKLSAgICAgIChkYXRlID0gZDNfdGltZS5kYXkoZGF0ZSkp
LnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIGkpICUgNyk7Ci0gICAg
ICByZXR1cm4gZGF0ZTsKLSAgICB9LCBmdW5jdGlvbihkYXRlLCBvZmZzZXQpIHsKLSAgICAgIGRh
dGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIE1hdGguZmxvb3Iob2Zmc2V0KSAqIDcpOwotICAg
IH0sIGZ1bmN0aW9uKGRhdGUpIHsKLSAgICAgIHZhciBkYXkgPSBkM190aW1lLnllYXIoZGF0ZSku
Z2V0RGF5KCk7Ci0gICAgICByZXR1cm4gTWF0aC5mbG9vcigoZDNfdGltZS5kYXlPZlllYXIoZGF0
ZSkgKyAoZGF5ICsgaSkgJSA3KSAvIDcpIC0gKGRheSAhPT0gaSk7Ci0gICAgfSk7Ci0gICAgZDNf
dGltZVtkYXkgKyAicyJdID0gaW50ZXJ2YWwucmFuZ2U7Ci0gICAgZDNfdGltZVtkYXkgKyAicyJd
LnV0YyA9IGludGVydmFsLnV0Yy5yYW5nZTsKLSAgICBkM190aW1lW2RheSArICJPZlllYXIiXSA9
IGZ1bmN0aW9uKGRhdGUpIHsKLSAgICAgIHZhciBkYXkgPSBkM190aW1lLnllYXIoZGF0ZSkuZ2V0
RGF5KCk7Ci0gICAgICByZXR1cm4gTWF0aC5mbG9vcigoZDNfdGltZS5kYXlPZlllYXIoZGF0ZSkg
KyAoZGF5ICsgaSkgJSA3KSAvIDcpOwotICAgIH07Ci0gIH0pOwotICBkM190aW1lLndlZWsgPSBk
M190aW1lLnN1bmRheTsKLSAgZDNfdGltZS53ZWVrcyA9IGQzX3RpbWUuc3VuZGF5LnJhbmdlOwot
ICBkM190aW1lLndlZWtzLnV0YyA9IGQzX3RpbWUuc3VuZGF5LnV0Yy5yYW5nZTsKLSAgZDNfdGlt
ZS53ZWVrT2ZZZWFyID0gZDNfdGltZS5zdW5kYXlPZlllYXI7Ci0gIGZ1bmN0aW9uIGQzX2xvY2Fs
ZV90aW1lRm9ybWF0KGxvY2FsZSkgewotICAgIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUu
ZGF0ZVRpbWUsIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsIGxvY2FsZV90aW1lID0gbG9jYWxl
LnRpbWUsIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsIGxvY2FsZV9kYXlzID0gbG9j
YWxlLmRheXMsIGxvY2FsZV9zaG9ydERheXMgPSBsb2NhbGUuc2hvcnREYXlzLCBsb2NhbGVfbW9u
dGhzID0gbG9jYWxlLm1vbnRocywgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9u
dGhzOwotICAgIGZ1bmN0aW9uIGQzX3RpbWVfZm9ybWF0KHRlbXBsYXRlKSB7Ci0gICAgICB2YXIg
biA9IHRlbXBsYXRlLmxlbmd0aDsKLSAgICAgIGZ1bmN0aW9uIGZvcm1hdChkYXRlKSB7Ci0gICAg
ICAgIHZhciBzdHJpbmcgPSBbXSwgaSA9IC0xLCBqID0gMCwgYywgcCwgZjsKLSAgICAgICAgd2hp
bGUgKCsraSA8IG4pIHsKLSAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckNvZGVBdChpKSA9PT0g
MzcpIHsKLSAgICAgICAgICAgIHN0cmluZy5wdXNoKHRlbXBsYXRlLnN1YnN0cmluZyhqLCBpKSk7
Ci0gICAgICAgICAgICBpZiAoKHAgPSBkM190aW1lX2Zvcm1hdFBhZHNbYyA9IHRlbXBsYXRlLmNo
YXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHRlbXBsYXRlLmNoYXJBdCgrK2kpOwotICAgICAgICAg
ICAgaWYgKGYgPSBkM190aW1lX2Zvcm1hdHNbY10pIGMgPSBmKGRhdGUsIHAgPT0gbnVsbCA/IGMg
PT09ICJlIiA/ICIgIiA6ICIwIiA6IHApOwotICAgICAgICAgICAgc3RyaW5nLnB1c2goYyk7Ci0g
ICAgICAgICAgICBqID0gaSArIDE7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0
cmluZy5wdXNoKHRlbXBsYXRlLnN1YnN0cmluZyhqLCBpKSk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmcuam9pbigiIik7Ci0gICAgICB9Ci0gICAgICBmb3JtYXQucGFyc2UgPSBmdW5jdGlvbihzdHJp
bmcpIHsKLSAgICAgICAgdmFyIGQgPSB7Ci0gICAgICAgICAgeTogMTkwMCwKLSAgICAgICAgICBt
OiAwLAotICAgICAgICAgIGQ6IDEsCi0gICAgICAgICAgSDogMCwKLSAgICAgICAgICBNOiAwLAot
ICAgICAgICAgIFM6IDAsCi0gICAgICAgICAgTDogMCwKLSAgICAgICAgICBaOiBudWxsCi0gICAg
ICAgIH0sIGkgPSBkM190aW1lX3BhcnNlKGQsIHRlbXBsYXRlLCBzdHJpbmcsIDApOwotICAgICAg
ICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKCJwIiBp
biBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyOwotICAgICAgICB2YXIgbG9jYWxaID0gZC5a
ICE9IG51bGwgJiYgZDNfZGF0ZSAhPT0gZDNfZGF0ZV91dGMsIGRhdGUgPSBuZXcgKGxvY2FsWiA/
IGQzX2RhdGVfdXRjIDogZDNfZGF0ZSkoKTsKLSAgICAgICAgaWYgKCJqIiBpbiBkKSBkYXRlLnNl
dEZ1bGxZZWFyKGQueSwgMCwgZC5qKTsgZWxzZSBpZiAoInciIGluIGQgJiYgKCJXIiBpbiBkIHx8
ICJVIiBpbiBkKSkgewotICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZC55LCAwLCAxKTsKLSAg
ICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSwgMCwgIlciIGluIGQgPyAoZC53ICsgNikgJSA3
ICsgZC5XICogNyAtIChkYXRlLmdldERheSgpICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChk
YXRlLmdldERheSgpICsgNikgJSA3KTsKLSAgICAgICAgfSBlbHNlIGRhdGUuc2V0RnVsbFllYXIo
ZC55LCBkLm0sIGQuZCk7Ci0gICAgICAgIGRhdGUuc2V0SG91cnMoZC5IICsgTWF0aC5mbG9vcihk
LlogLyAxMDApLCBkLk0gKyBkLlogJSAxMDAsIGQuUywgZC5MKTsKLSAgICAgICAgcmV0dXJuIGxv
Y2FsWiA/IGRhdGUuXyA6IGRhdGU7Ci0gICAgICB9OwotICAgICAgZm9ybWF0LnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKLSAgICAgIH07Ci0gICAgICBy
ZXR1cm4gZm9ybWF0OwotICAgIH0KLSAgICBmdW5jdGlvbiBkM190aW1lX3BhcnNlKGRhdGUsIHRl
bXBsYXRlLCBzdHJpbmcsIGopIHsKLSAgICAgIHZhciBjLCBwLCB0LCBpID0gMCwgbiA9IHRlbXBs
YXRlLmxlbmd0aCwgbSA9IHN0cmluZy5sZW5ndGg7Ci0gICAgICB3aGlsZSAoaSA8IG4pIHsKLSAg
ICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xOwotICAgICAgICBjID0gdGVtcGxhdGUuY2hhckNv
ZGVBdChpKyspOwotICAgICAgICBpZiAoYyA9PT0gMzcpIHsKLSAgICAgICAgICB0ID0gdGVtcGxh
dGUuY2hhckF0KGkrKyk7Ci0gICAgICAgICAgcCA9IGQzX3RpbWVfcGFyc2Vyc1t0IGluIGQzX3Rp
bWVfZm9ybWF0UGFkcyA/IHRlbXBsYXRlLmNoYXJBdChpKyspIDogdF07Ci0gICAgICAgICAgaWYg
KCFwIHx8IChqID0gcChkYXRlLCBzdHJpbmcsIGopKSA8IDApIHJldHVybiAtMTsKLSAgICAgICAg
fSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHsKLSAgICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBqOwotICAgIH0KLSAgICBk
M190aW1lX2Zvcm1hdC51dGMgPSBmdW5jdGlvbih0ZW1wbGF0ZSkgewotICAgICAgdmFyIGxvY2Fs
ID0gZDNfdGltZV9mb3JtYXQodGVtcGxhdGUpOwotICAgICAgZnVuY3Rpb24gZm9ybWF0KGRhdGUp
IHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBkM19kYXRlID0gZDNfZGF0ZV91dGM7Ci0gICAg
ICAgICAgdmFyIHV0YyA9IG5ldyBkM19kYXRlKCk7Ci0gICAgICAgICAgdXRjLl8gPSBkYXRlOwot
ICAgICAgICAgIHJldHVybiBsb2NhbCh1dGMpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAg
ICAgIGQzX2RhdGUgPSBEYXRlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmb3JtYXQucGFy
c2UgPSBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBkM19kYXRl
ID0gZDNfZGF0ZV91dGM7Ci0gICAgICAgICAgdmFyIGRhdGUgPSBsb2NhbC5wYXJzZShzdHJpbmcp
OwotICAgICAgICAgIHJldHVybiBkYXRlICYmIGRhdGUuXzsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICBkM19kYXRlID0gRGF0ZTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIGZv
cm1hdC50b1N0cmluZyA9IGxvY2FsLnRvU3RyaW5nOwotICAgICAgcmV0dXJuIGZvcm1hdDsKLSAg
ICB9OwotICAgIGQzX3RpbWVfZm9ybWF0Lm11bHRpID0gZDNfdGltZV9mb3JtYXQudXRjLm11bHRp
ID0gZDNfdGltZV9mb3JtYXRNdWx0aTsKLSAgICB2YXIgZDNfdGltZV9wZXJpb2RMb29rdXAgPSBk
My5tYXAoKSwgZDNfdGltZV9kYXlSZSA9IGQzX3RpbWVfZm9ybWF0UmUobG9jYWxlX2RheXMpLCBk
M190aW1lX2RheUxvb2t1cCA9IGQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9kYXlzKSwgZDNf
dGltZV9kYXlBYmJyZXZSZSA9IGQzX3RpbWVfZm9ybWF0UmUobG9jYWxlX3Nob3J0RGF5cyksIGQz
X3RpbWVfZGF5QWJicmV2TG9va3VwID0gZDNfdGltZV9mb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0
RGF5cyksIGQzX3RpbWVfbW9udGhSZSA9IGQzX3RpbWVfZm9ybWF0UmUobG9jYWxlX21vbnRocyks
IGQzX3RpbWVfbW9udGhMb29rdXAgPSBkM190aW1lX2Zvcm1hdExvb2t1cChsb2NhbGVfbW9udGhz
KSwgZDNfdGltZV9tb250aEFiYnJldlJlID0gZDNfdGltZV9mb3JtYXRSZShsb2NhbGVfc2hvcnRN
b250aHMpLCBkM190aW1lX21vbnRoQWJicmV2TG9va3VwID0gZDNfdGltZV9mb3JtYXRMb29rdXAo
bG9jYWxlX3Nob3J0TW9udGhzKTsKLSAgICBsb2NhbGVfcGVyaW9kcy5mb3JFYWNoKGZ1bmN0aW9u
KHAsIGkpIHsKLSAgICAgIGQzX3RpbWVfcGVyaW9kTG9va3VwLnNldChwLnRvTG93ZXJDYXNlKCks
IGkpOwotICAgIH0pOwotICAgIHZhciBkM190aW1lX2Zvcm1hdHMgPSB7Ci0gICAgICBhOiBmdW5j
dGlvbihkKSB7Ci0gICAgICAgIHJldHVybiBsb2NhbGVfc2hvcnREYXlzW2QuZ2V0RGF5KCldOwot
ICAgICAgfSwKLSAgICAgIEE6IGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsZV9k
YXlzW2QuZ2V0RGF5KCldOwotICAgICAgfSwKLSAgICAgIGI6IGZ1bmN0aW9uKGQpIHsKLSAgICAg
ICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldOwotICAgICAgfSwKLSAg
ICAgIEI6IGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRN
b250aCgpXTsKLSAgICAgIH0sCi0gICAgICBjOiBkM190aW1lX2Zvcm1hdChsb2NhbGVfZGF0ZVRp
bWUpLAotICAgICAgZDogZnVuY3Rpb24oZCwgcCkgewotICAgICAgICByZXR1cm4gZDNfdGltZV9m
b3JtYXRQYWQoZC5nZXREYXRlKCksIHAsIDIpOwotICAgICAgfSwKLSAgICAgIGU6IGZ1bmN0aW9u
KGQsIHApIHsKLSAgICAgICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0RGF0ZSgpLCBw
LCAyKTsKLSAgICAgIH0sCi0gICAgICBIOiBmdW5jdGlvbihkLCBwKSB7Ci0gICAgICAgIHJldHVy
biBkM190aW1lX2Zvcm1hdFBhZChkLmdldEhvdXJzKCksIHAsIDIpOwotICAgICAgfSwKLSAgICAg
IEk6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQu
Z2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTsKLSAgICAgIH0sCi0gICAgICBqOiBmdW5jdGlv
bihkLCBwKSB7Ci0gICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZCgxICsgZDNfdGltZS5k
YXlPZlllYXIoZCksIHAsIDMpOwotICAgICAgfSwKLSAgICAgIEw6IGZ1bmN0aW9uKGQsIHApIHsK
LSAgICAgICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAs
IDMpOwotICAgICAgfSwKLSAgICAgIG06IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJu
IGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpOwotICAgICAgfSwKLSAg
ICAgIE06IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFk
KGQuZ2V0TWludXRlcygpLCBwLCAyKTsKLSAgICAgIH0sCi0gICAgICBwOiBmdW5jdGlvbihkKSB7
Ci0gICAgICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildOwot
ICAgICAgfSwKLSAgICAgIFM6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJuIGQzX3Rp
bWVfZm9ybWF0UGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTsKLSAgICAgIH0sCi0gICAgICBVOiBm
dW5jdGlvbihkLCBwKSB7Ci0gICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZChkM190aW1l
LnN1bmRheU9mWWVhcihkKSwgcCwgMik7Ci0gICAgICB9LAotICAgICAgdzogZnVuY3Rpb24oZCkg
ewotICAgICAgICByZXR1cm4gZC5nZXREYXkoKTsKLSAgICAgIH0sCi0gICAgICBXOiBmdW5jdGlv
bihkLCBwKSB7Ci0gICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZChkM190aW1lLm1vbmRh
eU9mWWVhcihkKSwgcCwgMik7Ci0gICAgICB9LAotICAgICAgeDogZDNfdGltZV9mb3JtYXQobG9j
YWxlX2RhdGUpLAotICAgICAgWDogZDNfdGltZV9mb3JtYXQobG9jYWxlX3RpbWUpLAotICAgICAg
eTogZnVuY3Rpb24oZCwgcCkgewotICAgICAgICByZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5n
ZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTsKLSAgICAgIH0sCi0gICAgICBZOiBmdW5jdGlvbihk
LCBwKSB7Ci0gICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZChkLmdldEZ1bGxZZWFyKCkg
JSAxZTQsIHAsIDQpOwotICAgICAgfSwKLSAgICAgIFo6IGQzX3RpbWVfem9uZSwKLSAgICAgICIl
IjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiAiJSI7Ci0gICAgICB9Ci0gICAgfTsKLSAg
ICB2YXIgZDNfdGltZV9wYXJzZXJzID0gewotICAgICAgYTogZDNfdGltZV9wYXJzZVdlZWtkYXlB
YmJyZXYsCi0gICAgICBBOiBkM190aW1lX3BhcnNlV2Vla2RheSwKLSAgICAgIGI6IGQzX3RpbWVf
cGFyc2VNb250aEFiYnJldiwKLSAgICAgIEI6IGQzX3RpbWVfcGFyc2VNb250aCwKLSAgICAgIGM6
IGQzX3RpbWVfcGFyc2VMb2NhbGVGdWxsLAotICAgICAgZDogZDNfdGltZV9wYXJzZURheSwKLSAg
ICAgIGU6IGQzX3RpbWVfcGFyc2VEYXksCi0gICAgICBIOiBkM190aW1lX3BhcnNlSG91cjI0LAot
ICAgICAgSTogZDNfdGltZV9wYXJzZUhvdXIyNCwKLSAgICAgIGo6IGQzX3RpbWVfcGFyc2VEYXlP
ZlllYXIsCi0gICAgICBMOiBkM190aW1lX3BhcnNlTWlsbGlzZWNvbmRzLAotICAgICAgbTogZDNf
dGltZV9wYXJzZU1vbnRoTnVtYmVyLAotICAgICAgTTogZDNfdGltZV9wYXJzZU1pbnV0ZXMsCi0g
ICAgICBwOiBkM190aW1lX3BhcnNlQW1QbSwKLSAgICAgIFM6IGQzX3RpbWVfcGFyc2VTZWNvbmRz
LAotICAgICAgVTogZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXksCi0gICAgICB3OiBkM190
aW1lX3BhcnNlV2Vla2RheU51bWJlciwKLSAgICAgIFc6IGQzX3RpbWVfcGFyc2VXZWVrTnVtYmVy
TW9uZGF5LAotICAgICAgeDogZDNfdGltZV9wYXJzZUxvY2FsZURhdGUsCi0gICAgICBYOiBkM190
aW1lX3BhcnNlTG9jYWxlVGltZSwKLSAgICAgIHk6IGQzX3RpbWVfcGFyc2VZZWFyLAotICAgICAg
WTogZDNfdGltZV9wYXJzZUZ1bGxZZWFyLAotICAgICAgWjogZDNfdGltZV9wYXJzZVpvbmUsCi0g
ICAgICAiJSI6IGQzX3RpbWVfcGFyc2VMaXRlcmFsUGVyY2VudAotICAgIH07Ci0gICAgZnVuY3Rp
b24gZDNfdGltZV9wYXJzZVdlZWtkYXlBYmJyZXYoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgICBk
M190aW1lX2RheUFiYnJldlJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICB2YXIgbiA9IGQzX3RpbWVf
ZGF5QWJicmV2UmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGkpKTsKLSAgICAgIHJldHVybiBuID8g
KGRhdGUudyA9IGQzX3RpbWVfZGF5QWJicmV2TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkp
LCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGQzX3RpbWVfcGFy
c2VXZWVrZGF5KGRhdGUsIHN0cmluZywgaSkgewotICAgICAgZDNfdGltZV9kYXlSZS5sYXN0SW5k
ZXggPSAwOwotICAgICAgdmFyIG4gPSBkM190aW1lX2RheVJlLmV4ZWMoc3RyaW5nLnN1YnN0cmlu
ZyhpKSk7Ci0gICAgICByZXR1cm4gbiA/IChkYXRlLncgPSBkM190aW1lX2RheUxvb2t1cC5nZXQo
blswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICAgIH0KLSAgICBm
dW5jdGlvbiBkM190aW1lX3BhcnNlTW9udGhBYmJyZXYoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAg
ICBkM190aW1lX21vbnRoQWJicmV2UmUubGFzdEluZGV4ID0gMDsKLSAgICAgIHZhciBuID0gZDNf
dGltZV9tb250aEFiYnJldlJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpKSk7Ci0gICAgICByZXR1
cm4gbiA/IChkYXRlLm0gPSBkM190aW1lX21vbnRoQWJicmV2TG9va3VwLmdldChuWzBdLnRvTG93
ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGQz
X3RpbWVfcGFyc2VNb250aChkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICAgIGQzX3RpbWVfbW9udGhS
ZS5sYXN0SW5kZXggPSAwOwotICAgICAgdmFyIG4gPSBkM190aW1lX21vbnRoUmUuZXhlYyhzdHJp
bmcuc3Vic3RyaW5nKGkpKTsKLSAgICAgIHJldHVybiBuID8gKGRhdGUubSA9IGQzX3RpbWVfbW9u
dGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZUxvY2FsZUZ1bGwoZGF0ZSwgc3RyaW5n
LCBpKSB7Ci0gICAgICByZXR1cm4gZDNfdGltZV9wYXJzZShkYXRlLCBkM190aW1lX2Zvcm1hdHMu
Yy50b1N0cmluZygpLCBzdHJpbmcsIGkpOwotICAgIH0KLSAgICBmdW5jdGlvbiBkM190aW1lX3Bh
cnNlTG9jYWxlRGF0ZShkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICAgIHJldHVybiBkM190aW1lX3Bh
cnNlKGRhdGUsIGQzX3RpbWVfZm9ybWF0cy54LnRvU3RyaW5nKCksIHN0cmluZywgaSk7Ci0gICAg
fQotICAgIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VMb2NhbGVUaW1lKGRhdGUsIHN0cmluZywgaSkg
ewotICAgICAgcmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSwgZDNfdGltZV9mb3JtYXRzLlgudG9T
dHJpbmcoKSwgc3RyaW5nLCBpKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZUFt
UG0oZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgICB2YXIgbiA9IGQzX3RpbWVfcGVyaW9kTG9va3Vw
LmdldChzdHJpbmcuc3Vic3RyaW5nKGksIGkgKz0gMikudG9Mb3dlckNhc2UoKSk7Ci0gICAgICBy
ZXR1cm4gbiA9PSBudWxsID8gLTEgOiAoZGF0ZS5wID0gbiwgaSk7Ci0gICAgfQotICAgIHJldHVy
biBkM190aW1lX2Zvcm1hdDsKLSAgfQotICB2YXIgZDNfdGltZV9mb3JtYXRQYWRzID0gewotICAg
ICItIjogIiIsCi0gICAgXzogIiAiLAotICAgICIwIjogIjAiCi0gIH0sIGQzX3RpbWVfbnVtYmVy
UmUgPSAvXlxzKlxkKy8sIGQzX3RpbWVfcGVyY2VudFJlID0gL14lLzsKLSAgZnVuY3Rpb24gZDNf
dGltZV9mb3JtYXRQYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7Ci0gICAgdmFyIHNpZ24gPSB2YWx1
ZSA8IDAgPyAiLSIgOiAiIiwgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyAiIiwg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0
aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBz
dHJpbmcpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfZm9ybWF0UmUobmFtZXMpIHsKLSAgICBy
ZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIgKyBuYW1lcy5tYXAoZDMucmVxdW90ZSkuam9pbigifCIp
ICsgIikiLCAiaSIpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfZm9ybWF0TG9va3VwKG5hbWVz
KSB7Ci0gICAgdmFyIG1hcCA9IG5ldyBkM19NYXAoKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3Ro
OwotICAgIHdoaWxlICgrK2kgPCBuKSBtYXAuc2V0KG5hbWVzW2ldLnRvTG93ZXJDYXNlKCksIGkp
OwotICAgIHJldHVybiBtYXA7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZVdlZWtkYXlO
dW1iZXIoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXgg
PSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zdWJzdHJpbmco
aSwgaSArIDEpKTsKLSAgICByZXR1cm4gbiA/IChkYXRlLncgPSArblswXSwgaSArIG5bMF0ubGVu
Z3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrTnVtYmVyU3VuZGF5
KGRhdGUsIHN0cmluZywgaSkgewotICAgIGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDsK
LSAgICB2YXIgbiA9IGQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGkpKTsK
LSAgICByZXR1cm4gbiA/IChkYXRlLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGRhdGUsIHN0cmlu
ZywgaSkgewotICAgIGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDsKLSAgICB2YXIgbiA9
IGQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGkpKTsKLSAgICByZXR1cm4g
biA/IChkYXRlLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX3RpbWVfcGFyc2VGdWxsWWVhcihkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1l
X251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4
ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgNCkpOwotICAgIHJldHVybiBuID8gKGRhdGUueSA9
ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9w
YXJzZVllYXIoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJSZS5sYXN0SW5k
ZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zdWJzdHJp
bmcoaSwgaSArIDIpKTsKLSAgICByZXR1cm4gbiA/IChkYXRlLnkgPSBkM190aW1lX2V4cGFuZFll
YXIoK25bMF0pLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGlt
ZV9wYXJzZVpvbmUoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgcmV0dXJuIC9eWystXVxkezR9JC8u
dGVzdChzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKGksIGkgKyA1KSkgPyAoZGF0ZS5aID0gLXN0
cmluZywgCi0gICAgaSArIDUpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9leHBhbmRZ
ZWFyKGQpIHsKLSAgICByZXR1cm4gZCArIChkID4gNjggPyAxOTAwIDogMmUzKTsKLSAgfQotICBm
dW5jdGlvbiBkM190aW1lX3BhcnNlTW9udGhOdW1iZXIoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAg
ZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1i
ZXJSZS5leGVjKHN0cmluZy5zdWJzdHJpbmcoaSwgaSArIDIpKTsKLSAgICByZXR1cm4gbiA/IChk
YXRlLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0aW9u
IGQzX3RpbWVfcGFyc2VEYXkoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJS
ZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmlu
Zy5zdWJzdHJpbmcoaSwgaSArIDIpKTsKLSAgICByZXR1cm4gbiA/IChkYXRlLmQgPSArblswXSwg
aSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VEYXlP
ZlllYXIoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXgg
PSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zdWJzdHJpbmco
aSwgaSArIDMpKTsKLSAgICByZXR1cm4gbiA/IChkYXRlLmogPSArblswXSwgaSArIG5bMF0ubGVu
Z3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VIb3VyMjQoZGF0ZSwgc3Ry
aW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBu
ID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zdWJzdHJpbmcoaSwgaSArIDIpKTsKLSAg
ICByZXR1cm4gbiA/IChkYXRlLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VNaW51dGVzKGRhdGUsIHN0cmluZywgaSkgewotICAg
IGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDsKLSAgICB2YXIgbiA9IGQzX3RpbWVfbnVt
YmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGksIGkgKyAyKSk7Ci0gICAgcmV0dXJuIG4gPyAo
ZGF0ZS5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTsKLSAgfQotICBmdW5jdGlvbiBk
M190aW1lX3BhcnNlU2Vjb25kcyhkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1lX251bWJl
clJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4ZWMoc3Ry
aW5nLnN1YnN0cmluZyhpLCBpICsgMikpOwotICAgIHJldHVybiBuID8gKGRhdGUuUyA9ICtuWzBd
LCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1p
bGxpc2Vjb25kcyhkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJ
bmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0
cmluZyhpLCBpICsgMykpOwotICAgIHJldHVybiBuID8gKGRhdGUuTCA9ICtuWzBdLCBpICsgblsw
XS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV96b25lKGQpIHsKLSAgICB2
YXIgeiA9IGQuZ2V0VGltZXpvbmVPZmZzZXQoKSwgenMgPSB6ID4gMCA/ICItIiA6ICIrIiwgemgg
PSB+fihhYnMoeikgLyA2MCksIHptID0gYWJzKHopICUgNjA7Ci0gICAgcmV0dXJuIHpzICsgZDNf
dGltZV9mb3JtYXRQYWQoemgsICIwIiwgMikgKyBkM190aW1lX2Zvcm1hdFBhZCh6bSwgIjAiLCAy
KTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX3BhcnNlTGl0ZXJhbFBlcmNlbnQoZGF0ZSwgc3Ry
aW5nLCBpKSB7Ci0gICAgZDNfdGltZV9wZXJjZW50UmUubGFzdEluZGV4ID0gMDsKLSAgICB2YXIg
biA9IGQzX3RpbWVfcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMSkpOwot
ICAgIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
dGltZV9mb3JtYXRNdWx0aShmb3JtYXRzKSB7Ci0gICAgdmFyIG4gPSBmb3JtYXRzLmxlbmd0aCwg
aSA9IC0xOwotICAgIHdoaWxlICgrK2kgPCBuKSBmb3JtYXRzW2ldWzBdID0gdGhpcyhmb3JtYXRz
W2ldWzBdKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkgewotICAgICAgdmFyIGkgPSAwLCBm
ID0gZm9ybWF0c1tpXTsKLSAgICAgIHdoaWxlICghZlsxXShkYXRlKSkgZiA9IGZvcm1hdHNbKytp
XTsKLSAgICAgIHJldHVybiBmWzBdKGRhdGUpOwotICAgIH07Ci0gIH0KLSAgZDMubG9jYWxlID0g
ZnVuY3Rpb24obG9jYWxlKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIG51bWJlckZvcm1hdDogZDNf
bG9jYWxlX251bWJlckZvcm1hdChsb2NhbGUpLAotICAgICAgdGltZUZvcm1hdDogZDNfbG9jYWxl
X3RpbWVGb3JtYXQobG9jYWxlKQotICAgIH07Ci0gIH07Ci0gIHZhciBkM19sb2NhbGVfZW5VUyA9
IGQzLmxvY2FsZSh7Ci0gICAgZGVjaW1hbDogIi4iLAotICAgIHRob3VzYW5kczogIiwiLAotICAg
IGdyb3VwaW5nOiBbIDMgXSwKLSAgICBjdXJyZW5jeTogWyAiJCIsICIiIF0sCi0gICAgZGF0ZVRp
bWU6ICIlYSAlYiAlZSAlWCAlWSIsCi0gICAgZGF0ZTogIiVtLyVkLyVZIiwKLSAgICB0aW1lOiAi
JUg6JU06JVMiLAotICAgIHBlcmlvZHM6IFsgIkFNIiwgIlBNIiBdLAotICAgIGRheXM6IFsgIlN1
bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJp
ZGF5IiwgIlNhdHVyZGF5IiBdLAotICAgIHNob3J0RGF5czogWyAiU3VuIiwgIk1vbiIsICJUdWUi
LCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiBdLAotICAgIG1vbnRoczogWyAiSmFudWFyeSIs
ICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsICJKdWx5IiwgIkF1
Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciIgXSwK
LSAgICBzaG9ydE1vbnRoczogWyAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJK
dW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiIF0KLSAgfSk7Ci0g
IGQzLmZvcm1hdCA9IGQzX2xvY2FsZV9lblVTLm51bWJlckZvcm1hdDsKLSAgZDMuZ2VvID0ge307
Ci0gIGZ1bmN0aW9uIGQzX2FkZGVyKCkge30KLSAgZDNfYWRkZXIucHJvdG90eXBlID0gewotICAg
IHM6IDAsCi0gICAgdDogMCwKLSAgICBhZGQ6IGZ1bmN0aW9uKHkpIHsKLSAgICAgIGQzX2FkZGVy
U3VtKHksIHRoaXMudCwgZDNfYWRkZXJUZW1wKTsKLSAgICAgIGQzX2FkZGVyU3VtKGQzX2FkZGVy
VGVtcC5zLCB0aGlzLnMsIHRoaXMpOwotICAgICAgaWYgKHRoaXMucykgdGhpcy50ICs9IGQzX2Fk
ZGVyVGVtcC50OyBlbHNlIHRoaXMucyA9IGQzX2FkZGVyVGVtcC50OwotICAgIH0sCi0gICAgcmVz
ZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5zID0gdGhpcy50ID0gMDsKLSAgICB9LAotICAg
IHZhbHVlT2Y6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuczsKLSAgICB9Ci0gIH07
Ci0gIHZhciBkM19hZGRlclRlbXAgPSBuZXcgZDNfYWRkZXIoKTsKLSAgZnVuY3Rpb24gZDNfYWRk
ZXJTdW0oYSwgYiwgbykgewotICAgIHZhciB4ID0gby5zID0gYSArIGIsIGJ2ID0geCAtIGEsIGF2
ID0geCAtIGJ2OwotICAgIG8udCA9IGEgLSBhdiArIChiIC0gYnYpOwotICB9Ci0gIGQzLmdlby5z
dHJlYW0gPSBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgaWYgKG9iamVjdCAmJiBk
M19nZW9fc3RyZWFtT2JqZWN0VHlwZS5oYXNPd25Qcm9wZXJ0eShvYmplY3QudHlwZSkpIHsKLSAg
ICAgIGQzX2dlb19zdHJlYW1PYmplY3RUeXBlW29iamVjdC50eXBlXShvYmplY3QsIGxpc3RlbmVy
KTsKLSAgICB9IGVsc2UgewotICAgICAgZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KG9iamVjdCwgbGlz
dGVuZXIpOwotICAgIH0KLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvX3N0cmVhbUdlb21ldHJ5KGdl
b21ldHJ5LCBsaXN0ZW5lcikgewotICAgIGlmIChnZW9tZXRyeSAmJiBkM19nZW9fc3RyZWFtR2Vv
bWV0cnlUeXBlLmhhc093blByb3BlcnR5KGdlb21ldHJ5LnR5cGUpKSB7Ci0gICAgICBkM19nZW9f
c3RyZWFtR2VvbWV0cnlUeXBlW2dlb21ldHJ5LnR5cGVdKGdlb21ldHJ5LCBsaXN0ZW5lcik7Ci0g
ICAgfQotICB9Ci0gIHZhciBkM19nZW9fc3RyZWFtT2JqZWN0VHlwZSA9IHsKLSAgICBGZWF0dXJl
OiBmdW5jdGlvbihmZWF0dXJlLCBsaXN0ZW5lcikgewotICAgICAgZDNfZ2VvX3N0cmVhbUdlb21l
dHJ5KGZlYXR1cmUuZ2VvbWV0cnksIGxpc3RlbmVyKTsKLSAgICB9LAotICAgIEZlYXR1cmVDb2xs
ZWN0aW9uOiBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICB2YXIgZmVhdHVyZXMg
PSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDsKLSAgICAgIHdo
aWxlICgrK2kgPCBuKSBkM19nZW9fc3RyZWFtR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnks
IGxpc3RlbmVyKTsKLSAgICB9Ci0gIH07Ci0gIHZhciBkM19nZW9fc3RyZWFtR2VvbWV0cnlUeXBl
ID0gewotICAgIFNwaGVyZTogZnVuY3Rpb24ob2JqZWN0LCBsaXN0ZW5lcikgewotICAgICAgbGlz
dGVuZXIuc3BoZXJlKCk7Ci0gICAgfSwKLSAgICBQb2ludDogZnVuY3Rpb24ob2JqZWN0LCBsaXN0
ZW5lcikgewotICAgICAgb2JqZWN0ID0gb2JqZWN0LmNvb3JkaW5hdGVzOwotICAgICAgbGlzdGVu
ZXIucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7Ci0gICAgfSwKLSAgICBN
dWx0aVBvaW50OiBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICB2YXIgY29vcmRp
bmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0
aDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBvYmplY3QgPSBjb29yZGluYXRlc1tpXSwgbGlzdGVu
ZXIucG9pbnQob2JqZWN0WzBdLCBvYmplY3RbMV0sIG9iamVjdFsyXSk7Ci0gICAgfSwKLSAgICBM
aW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICBkM19nZW9fc3Ry
ZWFtTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIGxpc3RlbmVyLCAwKTsKLSAgICB9LAotICAgIE11
bHRpTGluZVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBsaXN0ZW5lcikgewotICAgICAgdmFyIGNv
b3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5s
ZW5ndGg7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgZDNfZ2VvX3N0cmVhbUxpbmUoY29vcmRpbmF0
ZXNbaV0sIGxpc3RlbmVyLCAwKTsKLSAgICB9LAotICAgIFBvbHlnb246IGZ1bmN0aW9uKG9iamVj
dCwgbGlzdGVuZXIpIHsKLSAgICAgIGQzX2dlb19zdHJlYW1Qb2x5Z29uKG9iamVjdC5jb29yZGlu
YXRlcywgbGlzdGVuZXIpOwotICAgIH0sCi0gICAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmpl
Y3QsIGxpc3RlbmVyKSB7Ci0gICAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0
ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDsKLSAgICAgIHdoaWxlICgrK2kgPCBu
KSBkM19nZW9fc3RyZWFtUG9seWdvbihjb29yZGluYXRlc1tpXSwgbGlzdGVuZXIpOwotICAgIH0s
Ci0gICAgR2VvbWV0cnlDb2xsZWN0aW9uOiBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0g
ICAgICB2YXIgZ2VvbWV0cmllcyA9IG9iamVjdC5nZW9tZXRyaWVzLCBpID0gLTEsIG4gPSBnZW9t
ZXRyaWVzLmxlbmd0aDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBkM19nZW9fc3RyZWFtR2VvbWV0
cnkoZ2VvbWV0cmllc1tpXSwgbGlzdGVuZXIpOwotICAgIH0KLSAgfTsKLSAgZnVuY3Rpb24gZDNf
Z2VvX3N0cmVhbUxpbmUoY29vcmRpbmF0ZXMsIGxpc3RlbmVyLCBjbG9zZWQpIHsKLSAgICB2YXIg
aSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoIC0gY2xvc2VkLCBjb29yZGluYXRlOwotICAg
IGxpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgIHdoaWxlICgrK2kgPCBuKSBjb29yZGluYXRlID0g
Y29vcmRpbmF0ZXNbaV0sIGxpc3RlbmVyLnBvaW50KGNvb3JkaW5hdGVbMF0sIGNvb3JkaW5hdGVb
MV0sIGNvb3JkaW5hdGVbMl0pOwotICAgIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgfQotICBmdW5j
dGlvbiBkM19nZW9fc3RyZWFtUG9seWdvbihjb29yZGluYXRlcywgbGlzdGVuZXIpIHsKLSAgICB2
YXIgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoOwotICAgIGxpc3RlbmVyLnBvbHlnb25T
dGFydCgpOwotICAgIHdoaWxlICgrK2kgPCBuKSBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRl
c1tpXSwgbGlzdGVuZXIsIDEpOwotICAgIGxpc3RlbmVyLnBvbHlnb25FbmQoKTsKLSAgfQotICBk
My5nZW8uYXJlYSA9IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIGQzX2dlb19hcmVhU3VtID0gMDsK
LSAgICBkMy5nZW8uc3RyZWFtKG9iamVjdCwgZDNfZ2VvX2FyZWEpOwotICAgIHJldHVybiBkM19n
ZW9fYXJlYVN1bTsKLSAgfTsKLSAgdmFyIGQzX2dlb19hcmVhU3VtLCBkM19nZW9fYXJlYVJpbmdT
dW0gPSBuZXcgZDNfYWRkZXIoKTsKLSAgdmFyIGQzX2dlb19hcmVhID0gewotICAgIHNwaGVyZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICBkM19nZW9fYXJlYVN1bSArPSA0ICogz4A7Ci0gICAgfSwKLSAg
ICBwb2ludDogZDNfbm9vcCwKLSAgICBsaW5lU3RhcnQ6IGQzX25vb3AsCi0gICAgbGluZUVuZDog
ZDNfbm9vcCwKLSAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgZDNfZ2VvX2Fy
ZWFSaW5nU3VtLnJlc2V0KCk7Ci0gICAgICBkM19nZW9fYXJlYS5saW5lU3RhcnQgPSBkM19nZW9f
YXJlYVJpbmdTdGFydDsKLSAgICB9LAotICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgdmFyIGFyZWEgPSAyICogZDNfZ2VvX2FyZWFSaW5nU3VtOwotICAgICAgZDNfZ2VvX2FyZWFT
dW0gKz0gYXJlYSA8IDAgPyA0ICogz4AgKyBhcmVhIDogYXJlYTsKLSAgICAgIGQzX2dlb19hcmVh
LmxpbmVTdGFydCA9IGQzX2dlb19hcmVhLmxpbmVFbmQgPSBkM19nZW9fYXJlYS5wb2ludCA9IGQz
X25vb3A7Ci0gICAgfQotICB9OwotICBmdW5jdGlvbiBkM19nZW9fYXJlYVJpbmdTdGFydCgpIHsK
LSAgICB2YXIgzrswMCwgz4YwMCwgzrswLCBjb3PPhjAsIHNpbs+GMDsKLSAgICBkM19nZW9fYXJl
YS5wb2ludCA9IGZ1bmN0aW9uKM67LCDPhikgewotICAgICAgZDNfZ2VvX2FyZWEucG9pbnQgPSBu
ZXh0UG9pbnQ7Ci0gICAgICDOuzAgPSAozrswMCA9IM67KSAqIGQzX3JhZGlhbnMsIGNvc8+GMCA9
IE1hdGguY29zKM+GID0gKM+GMDAgPSDPhikgKiBkM19yYWRpYW5zIC8gMiArIM+AIC8gNCksIAot
ICAgICAgc2luz4YwID0gTWF0aC5zaW4oz4YpOwotICAgIH07Ci0gICAgZnVuY3Rpb24gbmV4dFBv
aW50KM67LCDPhikgewotICAgICAgzrsgKj0gZDNfcmFkaWFuczsKLSAgICAgIM+GID0gz4YgKiBk
M19yYWRpYW5zIC8gMiArIM+AIC8gNDsKLSAgICAgIHZhciBkzrsgPSDOuyAtIM67MCwgc2TOuyA9
IGTOuyA+PSAwID8gMSA6IC0xLCBhZM67ID0gc2TOuyAqIGTOuywgY29zz4YgPSBNYXRoLmNvcyjP
hiksIHNpbs+GID0gTWF0aC5zaW4oz4YpLCBrID0gc2luz4YwICogc2luz4YsIHUgPSBjb3PPhjAg
KiBjb3PPhiArIGsgKiBNYXRoLmNvcyhhZM67KSwgdiA9IGsgKiBzZM67ICogTWF0aC5zaW4oYWTO
uyk7Ci0gICAgICBkM19nZW9fYXJlYVJpbmdTdW0uYWRkKE1hdGguYXRhbjIodiwgdSkpOwotICAg
ICAgzrswID0gzrssIGNvc8+GMCA9IGNvc8+GLCBzaW7PhjAgPSBzaW7PhjsKLSAgICB9Ci0gICAg
ZDNfZ2VvX2FyZWEubGluZUVuZCA9IGZ1bmN0aW9uKCkgewotICAgICAgbmV4dFBvaW50KM67MDAs
IM+GMDApOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbihzcGhlcmlj
YWwpIHsKLSAgICB2YXIgzrsgPSBzcGhlcmljYWxbMF0sIM+GID0gc3BoZXJpY2FsWzFdLCBjb3PP
hiA9IE1hdGguY29zKM+GKTsKLSAgICByZXR1cm4gWyBjb3PPhiAqIE1hdGguY29zKM67KSwgY29z
z4YgKiBNYXRoLnNpbijOuyksIE1hdGguc2luKM+GKSBdOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dl
b19jYXJ0ZXNpYW5Eb3QoYSwgYikgewotICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBi
WzFdICsgYVsyXSAqIGJbMl07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbkNyb3Nz
KGEsIGIpIHsKLSAgICByZXR1cm4gWyBhWzFdICogYlsyXSAtIGFbMl0gKiBiWzFdLCBhWzJdICog
YlswXSAtIGFbMF0gKiBiWzJdLCBhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdIF07Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbkFkZChhLCBiKSB7Ci0gICAgYVswXSArPSBiWzBdOwot
ICAgIGFbMV0gKz0gYlsxXTsKLSAgICBhWzJdICs9IGJbMl07Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
Z2VvX2NhcnRlc2lhblNjYWxlKHZlY3RvciwgaykgewotICAgIHJldHVybiBbIHZlY3RvclswXSAq
IGssIHZlY3RvclsxXSAqIGssIHZlY3RvclsyXSAqIGsgXTsKLSAgfQotICBmdW5jdGlvbiBkM19n
ZW9fY2FydGVzaWFuTm9ybWFsaXplKGQpIHsKLSAgICB2YXIgbCA9IE1hdGguc3FydChkWzBdICog
ZFswXSArIGRbMV0gKiBkWzFdICsgZFsyXSAqIGRbMl0pOwotICAgIGRbMF0gLz0gbDsKLSAgICBk
WzFdIC89IGw7Ci0gICAgZFsyXSAvPSBsOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19zcGhlcmlj
YWwoY2FydGVzaWFuKSB7Ci0gICAgcmV0dXJuIFsgTWF0aC5hdGFuMihjYXJ0ZXNpYW5bMV0sIGNh
cnRlc2lhblswXSksIGQzX2FzaW4oY2FydGVzaWFuWzJdKSBdOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2dlb19zcGhlcmljYWxFcXVhbChhLCBiKSB7Ci0gICAgcmV0dXJuIGFicyhhWzBdIC0gYlswXSkg
PCDOtSAmJiBhYnMoYVsxXSAtIGJbMV0pIDwgzrU7Ci0gIH0KLSAgZDMuZ2VvLmJvdW5kcyA9IGZ1
bmN0aW9uKCkgewotICAgIHZhciDOuzAsIM+GMCwgzrsxLCDPhjEsIM67XywgzrtfXywgz4ZfXywg
cDAsIGTOu1N1bSwgcmFuZ2VzLCByYW5nZTsKLSAgICB2YXIgYm91bmQgPSB7Ci0gICAgICBwb2lu
dDogcG9pbnQsCi0gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgIGxpbmVFbmQ6IGxp
bmVFbmQsCi0gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBib3VuZC5w
b2ludCA9IHJpbmdQb2ludDsKLSAgICAgICAgYm91bmQubGluZVN0YXJ0ID0gcmluZ1N0YXJ0Owot
ICAgICAgICBib3VuZC5saW5lRW5kID0gcmluZ0VuZDsKLSAgICAgICAgZM67U3VtID0gMDsKLSAg
ICAgICAgZDNfZ2VvX2FyZWEucG9seWdvblN0YXJ0KCk7Ci0gICAgICB9LAotICAgICAgcG9seWdv
bkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGQzX2dlb19hcmVhLnBvbHlnb25FbmQoKTsKLSAg
ICAgICAgYm91bmQucG9pbnQgPSBwb2ludDsKLSAgICAgICAgYm91bmQubGluZVN0YXJ0ID0gbGlu
ZVN0YXJ0OwotICAgICAgICBib3VuZC5saW5lRW5kID0gbGluZUVuZDsKLSAgICAgICAgaWYgKGQz
X2dlb19hcmVhUmluZ1N1bSA8IDApIM67MCA9IC0ozrsxID0gMTgwKSwgz4YwID0gLSjPhjEgPSA5
MCk7IGVsc2UgaWYgKGTOu1N1bSA+IM61KSDPhjEgPSA5MDsgZWxzZSBpZiAoZM67U3VtIDwgLc61
KSDPhjAgPSAtOTA7Ci0gICAgICAgIHJhbmdlWzBdID0gzrswLCByYW5nZVsxXSA9IM67MTsKLSAg
ICAgIH0KLSAgICB9OwotICAgIGZ1bmN0aW9uIHBvaW50KM67LCDPhikgewotICAgICAgcmFuZ2Vz
LnB1c2gocmFuZ2UgPSBbIM67MCA9IM67LCDOuzEgPSDOuyBdKTsKLSAgICAgIGlmICjPhiA8IM+G
MCkgz4YwID0gz4Y7Ci0gICAgICBpZiAoz4YgPiDPhjEpIM+GMSA9IM+GOwotICAgIH0KLSAgICBm
dW5jdGlvbiBsaW5lUG9pbnQozrssIM+GKSB7Ci0gICAgICB2YXIgcCA9IGQzX2dlb19jYXJ0ZXNp
YW4oWyDOuyAqIGQzX3JhZGlhbnMsIM+GICogZDNfcmFkaWFucyBdKTsKLSAgICAgIGlmIChwMCkg
ewotICAgICAgICB2YXIgbm9ybWFsID0gZDNfZ2VvX2NhcnRlc2lhbkNyb3NzKHAwLCBwKSwgZXF1
YXRvcmlhbCA9IFsgbm9ybWFsWzFdLCAtbm9ybWFsWzBdLCAwIF0sIGluZmxlY3Rpb24gPSBkM19n
ZW9fY2FydGVzaWFuQ3Jvc3MoZXF1YXRvcmlhbCwgbm9ybWFsKTsKLSAgICAgICAgZDNfZ2VvX2Nh
cnRlc2lhbk5vcm1hbGl6ZShpbmZsZWN0aW9uKTsKLSAgICAgICAgaW5mbGVjdGlvbiA9IGQzX2dl
b19zcGhlcmljYWwoaW5mbGVjdGlvbik7Ci0gICAgICAgIHZhciBkzrsgPSDOuyAtIM67XywgcyA9
IGTOuyA+IDAgPyAxIDogLTEsIM67aSA9IGluZmxlY3Rpb25bMF0gKiBkM19kZWdyZWVzICogcywg
YW50aW1lcmlkaWFuID0gYWJzKGTOuykgPiAxODA7Ci0gICAgICAgIGlmIChhbnRpbWVyaWRpYW4g
XiAocyAqIM67XyA8IM67aSAmJiDOu2kgPCBzICogzrspKSB7Ci0gICAgICAgICAgdmFyIM+GaSA9
IGluZmxlY3Rpb25bMV0gKiBkM19kZWdyZWVzOwotICAgICAgICAgIGlmICjPhmkgPiDPhjEpIM+G
MSA9IM+GaTsKLSAgICAgICAgfSBlbHNlIGlmICjOu2kgPSAozrtpICsgMzYwKSAlIDM2MCAtIDE4
MCwgYW50aW1lcmlkaWFuIF4gKHMgKiDOu18gPCDOu2kgJiYgzrtpIDwgcyAqIM67KSkgewotICAg
ICAgICAgIHZhciDPhmkgPSAtaW5mbGVjdGlvblsxXSAqIGQzX2RlZ3JlZXM7Ci0gICAgICAgICAg
aWYgKM+GaSA8IM+GMCkgz4YwID0gz4ZpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlm
ICjPhiA8IM+GMCkgz4YwID0gz4Y7Ci0gICAgICAgICAgaWYgKM+GID4gz4YxKSDPhjEgPSDPhjsK
LSAgICAgICAgfQotICAgICAgICBpZiAoYW50aW1lcmlkaWFuKSB7Ci0gICAgICAgICAgaWYgKM67
IDwgzrtfKSB7Ci0gICAgICAgICAgICBpZiAoYW5nbGUozrswLCDOuykgPiBhbmdsZSjOuzAsIM67
MSkpIM67MSA9IM67OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYW5nbGUo
zrssIM67MSkgPiBhbmdsZSjOuzAsIM67MSkpIM67MCA9IM67OwotICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAozrsxID49IM67MCkgewotICAgICAgICAgICAgaWYg
KM67IDwgzrswKSDOuzAgPSDOuzsKLSAgICAgICAgICAgIGlmICjOuyA+IM67MSkgzrsxID0gzrs7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICjOuyA+IM67XykgewotICAgICAg
ICAgICAgICBpZiAoYW5nbGUozrswLCDOuykgPiBhbmdsZSjOuzAsIM67MSkpIM67MSA9IM67Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYgKGFuZ2xlKM67LCDOuzEpID4g
YW5nbGUozrswLCDOuzEpKSDOuzAgPSDOuzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvaW50KM67LCDPhik7Ci0gICAgICB9
Ci0gICAgICBwMCA9IHAsIM67XyA9IM67OwotICAgIH0KLSAgICBmdW5jdGlvbiBsaW5lU3RhcnQo
KSB7Ci0gICAgICBib3VuZC5wb2ludCA9IGxpbmVQb2ludDsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
bGluZUVuZCgpIHsKLSAgICAgIHJhbmdlWzBdID0gzrswLCByYW5nZVsxXSA9IM67MTsKLSAgICAg
IGJvdW5kLnBvaW50ID0gcG9pbnQ7Ci0gICAgICBwMCA9IG51bGw7Ci0gICAgfQotICAgIGZ1bmN0
aW9uIHJpbmdQb2ludCjOuywgz4YpIHsKLSAgICAgIGlmIChwMCkgewotICAgICAgICB2YXIgZM67
ID0gzrsgLSDOu187Ci0gICAgICAgIGTOu1N1bSArPSBhYnMoZM67KSA+IDE4MCA/IGTOuyArIChk
zrsgPiAwID8gMzYwIDogLTM2MCkgOiBkzrs7Ci0gICAgICB9IGVsc2UgzrtfXyA9IM67LCDPhl9f
ID0gz4Y7Ci0gICAgICBkM19nZW9fYXJlYS5wb2ludCjOuywgz4YpOwotICAgICAgbGluZVBvaW50
KM67LCDPhik7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHsKLSAgICAgIGQzX2dl
b19hcmVhLmxpbmVTdGFydCgpOwotICAgIH0KLSAgICBmdW5jdGlvbiByaW5nRW5kKCkgewotICAg
ICAgcmluZ1BvaW50KM67X18sIM+GX18pOwotICAgICAgZDNfZ2VvX2FyZWEubGluZUVuZCgpOwot
ICAgICAgaWYgKGFicyhkzrtTdW0pID4gzrUpIM67MCA9IC0ozrsxID0gMTgwKTsKLSAgICAgIHJh
bmdlWzBdID0gzrswLCByYW5nZVsxXSA9IM67MTsKLSAgICAgIHAwID0gbnVsbDsKLSAgICB9Ci0g
ICAgZnVuY3Rpb24gYW5nbGUozrswLCDOuzEpIHsKLSAgICAgIHJldHVybiAozrsxIC09IM67MCkg
PCAwID8gzrsxICsgMzYwIDogzrsxOwotICAgIH0KLSAgICBmdW5jdGlvbiBjb21wYXJlUmFuZ2Vz
KGEsIGIpIHsKLSAgICAgIHJldHVybiBhWzBdIC0gYlswXTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
d2l0aGluUmFuZ2UoeCwgcmFuZ2UpIHsKLSAgICAgIHJldHVybiByYW5nZVswXSA8PSByYW5nZVsx
XSA/IHJhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXSA6IHggPCByYW5nZVswXSB8fCByYW5n
ZVsxXSA8IHg7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbihmZWF0dXJlKSB7Ci0gICAgICDP
hjEgPSDOuzEgPSAtKM67MCA9IM+GMCA9IEluZmluaXR5KTsKLSAgICAgIHJhbmdlcyA9IFtdOwot
ICAgICAgZDMuZ2VvLnN0cmVhbShmZWF0dXJlLCBib3VuZCk7Ci0gICAgICB2YXIgbiA9IHJhbmdl
cy5sZW5ndGg7Ci0gICAgICBpZiAobikgewotICAgICAgICByYW5nZXMuc29ydChjb21wYXJlUmFu
Z2VzKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDEsIGEgPSByYW5nZXNbMF0sIGIsIG1lcmdlZCA9
IFsgYSBdOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgYiA9IHJhbmdlc1tpXTsKLSAgICAgICAg
ICBpZiAod2l0aGluUmFuZ2UoYlswXSwgYSkgfHwgd2l0aGluUmFuZ2UoYlsxXSwgYSkpIHsKLSAg
ICAgICAgICAgIGlmIChhbmdsZShhWzBdLCBiWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzFd
ID0gYlsxXTsKLSAgICAgICAgICAgIGlmIChhbmdsZShiWzBdLCBhWzFdKSA+IGFuZ2xlKGFbMF0s
IGFbMV0pKSBhWzBdID0gYlswXTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVy
Z2VkLnB1c2goYSA9IGIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgYmVz
dCA9IC1JbmZpbml0eSwgZM67OwotICAgICAgICBmb3IgKHZhciBuID0gbWVyZ2VkLmxlbmd0aCAt
IDEsIGkgPSAwLCBhID0gbWVyZ2VkW25dLCBiOyBpIDw9IG47IGEgPSBiLCArK2kpIHsKLSAgICAg
ICAgICBiID0gbWVyZ2VkW2ldOwotICAgICAgICAgIGlmICgoZM67ID0gYW5nbGUoYVsxXSwgYlsw
XSkpID4gYmVzdCkgYmVzdCA9IGTOuywgzrswID0gYlswXSwgzrsxID0gYVsxXTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgcmFuZ2VzID0gcmFuZ2UgPSBudWxsOwotICAgICAgcmV0dXJuIM67
MCA9PT0gSW5maW5pdHkgfHwgz4YwID09PSBJbmZpbml0eSA/IFsgWyBOYU4sIE5hTiBdLCBbIE5h
TiwgTmFOIF0gXSA6IFsgWyDOuzAsIM+GMCBdLCBbIM67MSwgz4YxIF0gXTsKLSAgICB9OwotICB9
KCk7Ci0gIGQzLmdlby5jZW50cm9pZCA9IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIGQzX2dlb19j
ZW50cm9pZFcwID0gZDNfZ2VvX2NlbnRyb2lkVzEgPSBkM19nZW9fY2VudHJvaWRYMCA9IGQzX2dl
b19jZW50cm9pZFkwID0gZDNfZ2VvX2NlbnRyb2lkWjAgPSBkM19nZW9fY2VudHJvaWRYMSA9IGQz
X2dlb19jZW50cm9pZFkxID0gZDNfZ2VvX2NlbnRyb2lkWjEgPSBkM19nZW9fY2VudHJvaWRYMiA9
IGQzX2dlb19jZW50cm9pZFkyID0gZDNfZ2VvX2NlbnRyb2lkWjIgPSAwOwotICAgIGQzLmdlby5z
dHJlYW0ob2JqZWN0LCBkM19nZW9fY2VudHJvaWQpOwotICAgIHZhciB4ID0gZDNfZ2VvX2NlbnRy
b2lkWDIsIHkgPSBkM19nZW9fY2VudHJvaWRZMiwgeiA9IGQzX2dlb19jZW50cm9pZFoyLCBtID0g
eCAqIHggKyB5ICogeSArIHogKiB6OwotICAgIGlmIChtIDwgzrUyKSB7Ci0gICAgICB4ID0gZDNf
Z2VvX2NlbnRyb2lkWDEsIHkgPSBkM19nZW9fY2VudHJvaWRZMSwgeiA9IGQzX2dlb19jZW50cm9p
ZFoxOwotICAgICAgaWYgKGQzX2dlb19jZW50cm9pZFcxIDwgzrUpIHggPSBkM19nZW9fY2VudHJv
aWRYMCwgeSA9IGQzX2dlb19jZW50cm9pZFkwLCB6ID0gZDNfZ2VvX2NlbnRyb2lkWjA7Ci0gICAg
ICBtID0geCAqIHggKyB5ICogeSArIHogKiB6OwotICAgICAgaWYgKG0gPCDOtTIpIHJldHVybiBb
IE5hTiwgTmFOIF07Ci0gICAgfQotICAgIHJldHVybiBbIE1hdGguYXRhbjIoeSwgeCkgKiBkM19k
ZWdyZWVzLCBkM19hc2luKHogLyBNYXRoLnNxcnQobSkpICogZDNfZGVncmVlcyBdOwotICB9Owot
ICB2YXIgZDNfZ2VvX2NlbnRyb2lkVzAsIGQzX2dlb19jZW50cm9pZFcxLCBkM19nZW9fY2VudHJv
aWRYMCwgZDNfZ2VvX2NlbnRyb2lkWTAsIGQzX2dlb19jZW50cm9pZFowLCBkM19nZW9fY2VudHJv
aWRYMSwgZDNfZ2VvX2NlbnRyb2lkWTEsIGQzX2dlb19jZW50cm9pZFoxLCBkM19nZW9fY2VudHJv
aWRYMiwgZDNfZ2VvX2NlbnRyb2lkWTIsIGQzX2dlb19jZW50cm9pZFoyOwotICB2YXIgZDNfZ2Vv
X2NlbnRyb2lkID0gewotICAgIHNwaGVyZTogZDNfbm9vcCwKLSAgICBwb2ludDogZDNfZ2VvX2Nl
bnRyb2lkUG9pbnQsCi0gICAgbGluZVN0YXJ0OiBkM19nZW9fY2VudHJvaWRMaW5lU3RhcnQsCi0g
ICAgbGluZUVuZDogZDNfZ2VvX2NlbnRyb2lkTGluZUVuZCwKLSAgICBwb2x5Z29uU3RhcnQ6IGZ1
bmN0aW9uKCkgewotICAgICAgZDNfZ2VvX2NlbnRyb2lkLmxpbmVTdGFydCA9IGQzX2dlb19jZW50
cm9pZFJpbmdTdGFydDsKLSAgICB9LAotICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgZDNfZ2VvX2NlbnRyb2lkLmxpbmVTdGFydCA9IGQzX2dlb19jZW50cm9pZExpbmVTdGFydDsK
LSAgICB9Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19jZW50cm9pZFBvaW50KM67LCDPhikgewot
ICAgIM67ICo9IGQzX3JhZGlhbnM7Ci0gICAgdmFyIGNvc8+GID0gTWF0aC5jb3Moz4YgKj0gZDNf
cmFkaWFucyk7Ci0gICAgZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooY29zz4YgKiBNYXRoLmNvcyjO
uyksIGNvc8+GICogTWF0aC5zaW4ozrspLCBNYXRoLnNpbijPhikpOwotICB9Ci0gIGZ1bmN0aW9u
IGQzX2dlb19jZW50cm9pZFBvaW50WFlaKHgsIHksIHopIHsKLSAgICArK2QzX2dlb19jZW50cm9p
ZFcwOwotICAgIGQzX2dlb19jZW50cm9pZFgwICs9ICh4IC0gZDNfZ2VvX2NlbnRyb2lkWDApIC8g
ZDNfZ2VvX2NlbnRyb2lkVzA7Ci0gICAgZDNfZ2VvX2NlbnRyb2lkWTAgKz0gKHkgLSBkM19nZW9f
Y2VudHJvaWRZMCkgLyBkM19nZW9fY2VudHJvaWRXMDsKLSAgICBkM19nZW9fY2VudHJvaWRaMCAr
PSAoeiAtIGQzX2dlb19jZW50cm9pZFowKSAvIGQzX2dlb19jZW50cm9pZFcwOwotICB9Ci0gIGZ1
bmN0aW9uIGQzX2dlb19jZW50cm9pZExpbmVTdGFydCgpIHsKLSAgICB2YXIgeDAsIHkwLCB6MDsK
LSAgICBkM19nZW9fY2VudHJvaWQucG9pbnQgPSBmdW5jdGlvbijOuywgz4YpIHsKLSAgICAgIM67
ICo9IGQzX3JhZGlhbnM7Ci0gICAgICB2YXIgY29zz4YgPSBNYXRoLmNvcyjPhiAqPSBkM19yYWRp
YW5zKTsKLSAgICAgIHgwID0gY29zz4YgKiBNYXRoLmNvcyjOuyk7Ci0gICAgICB5MCA9IGNvc8+G
ICogTWF0aC5zaW4ozrspOwotICAgICAgejAgPSBNYXRoLnNpbijPhik7Ci0gICAgICBkM19nZW9f
Y2VudHJvaWQucG9pbnQgPSBuZXh0UG9pbnQ7Ci0gICAgICBkM19nZW9fY2VudHJvaWRQb2ludFhZ
Wih4MCwgeTAsIHowKTsKLSAgICB9OwotICAgIGZ1bmN0aW9uIG5leHRQb2ludCjOuywgz4YpIHsK
LSAgICAgIM67ICo9IGQzX3JhZGlhbnM7Ci0gICAgICB2YXIgY29zz4YgPSBNYXRoLmNvcyjPhiAq
PSBkM19yYWRpYW5zKSwgeCA9IGNvc8+GICogTWF0aC5jb3MozrspLCB5ID0gY29zz4YgKiBNYXRo
LnNpbijOuyksIHogPSBNYXRoLnNpbijPhiksIHcgPSBNYXRoLmF0YW4yKE1hdGguc3FydCgodyA9
IHkwICogeiAtIHowICogeSkgKiB3ICsgKHcgPSB6MCAqIHggLSB4MCAqIHopICogdyArICh3ID0g
eDAgKiB5IC0geTAgKiB4KSAqIHcpLCB4MCAqIHggKyB5MCAqIHkgKyB6MCAqIHopOwotICAgICAg
ZDNfZ2VvX2NlbnRyb2lkVzEgKz0gdzsKLSAgICAgIGQzX2dlb19jZW50cm9pZFgxICs9IHcgKiAo
eDAgKyAoeDAgPSB4KSk7Ci0gICAgICBkM19nZW9fY2VudHJvaWRZMSArPSB3ICogKHkwICsgKHkw
ID0geSkpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWjEgKz0gdyAqICh6MCArICh6MCA9IHopKTsK
LSAgICAgIGQzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLCB5MCwgejApOwotICAgIH0KLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9fY2VudHJvaWRMaW5lRW5kKCkgewotICAgIGQzX2dlb19jZW50cm9p
ZC5wb2ludCA9IGQzX2dlb19jZW50cm9pZFBvaW50OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19j
ZW50cm9pZFJpbmdTdGFydCgpIHsKLSAgICB2YXIgzrswMCwgz4YwMCwgeDAsIHkwLCB6MDsKLSAg
ICBkM19nZW9fY2VudHJvaWQucG9pbnQgPSBmdW5jdGlvbijOuywgz4YpIHsKLSAgICAgIM67MDAg
PSDOuywgz4YwMCA9IM+GOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50
OwotICAgICAgzrsgKj0gZDNfcmFkaWFuczsKLSAgICAgIHZhciBjb3PPhiA9IE1hdGguY29zKM+G
ICo9IGQzX3JhZGlhbnMpOwotICAgICAgeDAgPSBjb3PPhiAqIE1hdGguY29zKM67KTsKLSAgICAg
IHkwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7Ci0gICAgICB6MCA9IE1hdGguc2luKM+GKTsKLSAg
ICAgIGQzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLCB5MCwgejApOwotICAgIH07Ci0gICAgZDNf
Z2VvX2NlbnRyb2lkLmxpbmVFbmQgPSBmdW5jdGlvbigpIHsKLSAgICAgIG5leHRQb2ludCjOuzAw
LCDPhjAwKTsKLSAgICAgIGQzX2dlb19jZW50cm9pZC5saW5lRW5kID0gZDNfZ2VvX2NlbnRyb2lk
TGluZUVuZDsKLSAgICAgIGQzX2dlb19jZW50cm9pZC5wb2ludCA9IGQzX2dlb19jZW50cm9pZFBv
aW50OwotICAgIH07Ci0gICAgZnVuY3Rpb24gbmV4dFBvaW50KM67LCDPhikgewotICAgICAgzrsg
Kj0gZDNfcmFkaWFuczsKLSAgICAgIHZhciBjb3PPhiA9IE1hdGguY29zKM+GICo9IGQzX3JhZGlh
bnMpLCB4ID0gY29zz4YgKiBNYXRoLmNvcyjOuyksIHkgPSBjb3PPhiAqIE1hdGguc2luKM67KSwg
eiA9IE1hdGguc2luKM+GKSwgY3ggPSB5MCAqIHogLSB6MCAqIHksIGN5ID0gejAgKiB4IC0geDAg
KiB6LCBjeiA9IHgwICogeSAtIHkwICogeCwgbSA9IE1hdGguc3FydChjeCAqIGN4ICsgY3kgKiBj
eSArIGN6ICogY3opLCB1ID0geDAgKiB4ICsgeTAgKiB5ICsgejAgKiB6LCB2ID0gbSAmJiAtZDNf
YWNvcyh1KSAvIG0sIHcgPSBNYXRoLmF0YW4yKG0sIHUpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lk
WDIgKz0gdiAqIGN4OwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWTIgKz0gdiAqIGN5OwotICAgICAg
ZDNfZ2VvX2NlbnRyb2lkWjIgKz0gdiAqIGN6OwotICAgICAgZDNfZ2VvX2NlbnRyb2lkVzEgKz0g
dzsKLSAgICAgIGQzX2dlb19jZW50cm9pZFgxICs9IHcgKiAoeDAgKyAoeDAgPSB4KSk7Ci0gICAg
ICBkM19nZW9fY2VudHJvaWRZMSArPSB3ICogKHkwICsgKHkwID0geSkpOwotICAgICAgZDNfZ2Vv
X2NlbnRyb2lkWjEgKz0gdyAqICh6MCArICh6MCA9IHopKTsKLSAgICAgIGQzX2dlb19jZW50cm9p
ZFBvaW50WFlaKHgwLCB5MCwgejApOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM190cnVlKCkg
ewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jbGlwUG9seWdvbihz
ZWdtZW50cywgY29tcGFyZSwgY2xpcFN0YXJ0SW5zaWRlLCBpbnRlcnBvbGF0ZSwgbGlzdGVuZXIp
IHsKLSAgICB2YXIgc3ViamVjdCA9IFtdLCBjbGlwID0gW107Ci0gICAgc2VnbWVudHMuZm9yRWFj
aChmdW5jdGlvbihzZWdtZW50KSB7Ci0gICAgICBpZiAoKG4gPSBzZWdtZW50Lmxlbmd0aCAtIDEp
IDw9IDApIHJldHVybjsKLSAgICAgIHZhciBuLCBwMCA9IHNlZ21lbnRbMF0sIHAxID0gc2VnbWVu
dFtuXTsKLSAgICAgIGlmIChkM19nZW9fc3BoZXJpY2FsRXF1YWwocDAsIHAxKSkgewotICAgICAg
ICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyAr
K2kpIGxpc3RlbmVyLnBvaW50KChwMCA9IHNlZ21lbnRbaV0pWzBdLCBwMFsxXSk7Ci0gICAgICAg
IGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgdmFy
IGEgPSBuZXcgZDNfZ2VvX2NsaXBQb2x5Z29uSW50ZXJzZWN0aW9uKHAwLCBzZWdtZW50LCBudWxs
LCB0cnVlKSwgYiA9IG5ldyBkM19nZW9fY2xpcFBvbHlnb25JbnRlcnNlY3Rpb24ocDAsIG51bGws
IGEsIGZhbHNlKTsKLSAgICAgIGEubyA9IGI7Ci0gICAgICBzdWJqZWN0LnB1c2goYSk7Ci0gICAg
ICBjbGlwLnB1c2goYik7Ci0gICAgICBhID0gbmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2Vj
dGlvbihwMSwgc2VnbWVudCwgbnVsbCwgZmFsc2UpOwotICAgICAgYiA9IG5ldyBkM19nZW9fY2xp
cFBvbHlnb25JbnRlcnNlY3Rpb24ocDEsIG51bGwsIGEsIHRydWUpOwotICAgICAgYS5vID0gYjsK
LSAgICAgIHN1YmplY3QucHVzaChhKTsKLSAgICAgIGNsaXAucHVzaChiKTsKLSAgICB9KTsKLSAg
ICBjbGlwLnNvcnQoY29tcGFyZSk7Ci0gICAgZDNfZ2VvX2NsaXBQb2x5Z29uTGlua0NpcmN1bGFy
KHN1YmplY3QpOwotICAgIGQzX2dlb19jbGlwUG9seWdvbkxpbmtDaXJjdWxhcihjbGlwKTsKLSAg
ICBpZiAoIXN1YmplY3QubGVuZ3RoKSByZXR1cm47Ci0gICAgZm9yICh2YXIgaSA9IDAsIGVudHJ5
ID0gY2xpcFN0YXJ0SW5zaWRlLCBuID0gY2xpcC5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAg
IGNsaXBbaV0uZSA9IGVudHJ5ID0gIWVudHJ5OwotICAgIH0KLSAgICB2YXIgc3RhcnQgPSBzdWJq
ZWN0WzBdLCBwb2ludHMsIHBvaW50OwotICAgIHdoaWxlICgxKSB7Ci0gICAgICB2YXIgY3VycmVu
dCA9IHN0YXJ0LCBpc1N1YmplY3QgPSB0cnVlOwotICAgICAgd2hpbGUgKGN1cnJlbnQudikgaWYg
KChjdXJyZW50ID0gY3VycmVudC5uKSA9PT0gc3RhcnQpIHJldHVybjsKLSAgICAgIHBvaW50cyA9
IGN1cnJlbnQuejsKLSAgICAgIGxpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgICAgZG8gewotICAg
ICAgICBjdXJyZW50LnYgPSBjdXJyZW50Lm8udiA9IHRydWU7Ci0gICAgICAgIGlmIChjdXJyZW50
LmUpIHsKLSAgICAgICAgICBpZiAoaXNTdWJqZWN0KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBuOyArK2kpIGxpc3RlbmVyLnBvaW50KChwb2lu
dCA9IHBvaW50c1tpXSlbMF0sIHBvaW50WzFdKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaW50ZXJwb2xhdGUoY3VycmVudC54LCBjdXJyZW50Lm4ueCwgMSwgbGlzdGVuZXIpOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGlmIChpc1N1YmplY3QpIHsKLSAgICAgICAgICAgIHBvaW50cyA9IGN1
cnJlbnQucC56OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHBvaW50cy5sZW5ndGggLSAxOyBp
ID49IDA7IC0taSkgbGlzdGVuZXIucG9pbnQoKHBvaW50ID0gcG9pbnRzW2ldKVswXSwgcG9pbnRb
MV0pOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJyZW50
LngsIGN1cnJlbnQucC54LCAtMSwgbGlzdGVuZXIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC5wOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
Lm87Ci0gICAgICAgIHBvaW50cyA9IGN1cnJlbnQuejsKLSAgICAgICAgaXNTdWJqZWN0ID0gIWlz
U3ViamVjdDsKLSAgICAgIH0gd2hpbGUgKCFjdXJyZW50LnYpOwotICAgICAgbGlzdGVuZXIubGlu
ZUVuZCgpOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2xpcFBvbHlnb25MaW5rQ2ly
Y3VsYXIoYXJyYXkpIHsKLSAgICBpZiAoIShuID0gYXJyYXkubGVuZ3RoKSkgcmV0dXJuOwotICAg
IHZhciBuLCBpID0gMCwgYSA9IGFycmF5WzBdLCBiOwotICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0g
ICAgICBhLm4gPSBiID0gYXJyYXlbaV07Ci0gICAgICBiLnAgPSBhOwotICAgICAgYSA9IGI7Ci0g
ICAgfQotICAgIGEubiA9IGIgPSBhcnJheVswXTsKLSAgICBiLnAgPSBhOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwb2ludCwgcG9pbnRzLCBvdGhlciwg
ZW50cnkpIHsKLSAgICB0aGlzLnggPSBwb2ludDsKLSAgICB0aGlzLnogPSBwb2ludHM7Ci0gICAg
dGhpcy5vID0gb3RoZXI7Ci0gICAgdGhpcy5lID0gZW50cnk7Ci0gICAgdGhpcy52ID0gZmFsc2U7
Ci0gICAgdGhpcy5uID0gdGhpcy5wID0gbnVsbDsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2xp
cChwb2ludFZpc2libGUsIGNsaXBMaW5lLCBpbnRlcnBvbGF0ZSwgY2xpcFN0YXJ0KSB7Ci0gICAg
cmV0dXJuIGZ1bmN0aW9uKHJvdGF0ZSwgbGlzdGVuZXIpIHsKLSAgICAgIHZhciBsaW5lID0gY2xp
cExpbmUobGlzdGVuZXIpLCByb3RhdGVkQ2xpcFN0YXJ0ID0gcm90YXRlLmludmVydChjbGlwU3Rh
cnRbMF0sIGNsaXBTdGFydFsxXSk7Ci0gICAgICB2YXIgY2xpcCA9IHsKLSAgICAgICAgcG9pbnQ6
IHBvaW50LAotICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgbGluZUVuZDog
bGluZUVuZCwKLSAgICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBj
bGlwLnBvaW50ID0gcG9pbnRSaW5nOwotICAgICAgICAgIGNsaXAubGluZVN0YXJ0ID0gcmluZ1N0
YXJ0OwotICAgICAgICAgIGNsaXAubGluZUVuZCA9IHJpbmdFbmQ7Ci0gICAgICAgICAgc2VnbWVu
dHMgPSBbXTsKLSAgICAgICAgICBwb2x5Z29uID0gW107Ci0gICAgICAgIH0sCi0gICAgICAgIHBv
bHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGNsaXAucG9pbnQgPSBwb2ludDsKLSAg
ICAgICAgICBjbGlwLmxpbmVTdGFydCA9IGxpbmVTdGFydDsKLSAgICAgICAgICBjbGlwLmxpbmVF
bmQgPSBsaW5lRW5kOwotICAgICAgICAgIHNlZ21lbnRzID0gZDMubWVyZ2Uoc2VnbWVudHMpOwot
ICAgICAgICAgIHZhciBjbGlwU3RhcnRJbnNpZGUgPSBkM19nZW9fcG9pbnRJblBvbHlnb24ocm90
YXRlZENsaXBTdGFydCwgcG9seWdvbik7Ci0gICAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCkg
ewotICAgICAgICAgICAgaWYgKCFwb2x5Z29uU3RhcnRlZCkgbGlzdGVuZXIucG9seWdvblN0YXJ0
KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGQzX2dlb19jbGlwUG9seWdv
bihzZWdtZW50cywgZDNfZ2VvX2NsaXBTb3J0LCBjbGlwU3RhcnRJbnNpZGUsIGludGVycG9sYXRl
LCBsaXN0ZW5lcik7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjbGlwU3RhcnRJbnNpZGUpIHsKLSAg
ICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIGxpc3RlbmVyLnBvbHlnb25TdGFydCgpLCBw
b2x5Z29uU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsK
LSAgICAgICAgICAgIGludGVycG9sYXRlKG51bGwsIG51bGwsIDEsIGxpc3RlbmVyKTsKLSAgICAg
ICAgICAgIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHBv
bHlnb25TdGFydGVkKSBsaXN0ZW5lci5wb2x5Z29uRW5kKCksIHBvbHlnb25TdGFydGVkID0gZmFs
c2U7Ci0gICAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gbnVsbDsKLSAgICAgICAgfSwKLSAg
ICAgICAgc3BoZXJlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBsaXN0ZW5lci5wb2x5Z29uU3Rh
cnQoKTsKLSAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgICBpbnRlcnBv
bGF0ZShudWxsLCBudWxsLCAxLCBsaXN0ZW5lcik7Ci0gICAgICAgICAgbGlzdGVuZXIubGluZUVu
ZCgpOwotICAgICAgICAgIGxpc3RlbmVyLnBvbHlnb25FbmQoKTsKLSAgICAgICAgfQotICAgICAg
fTsKLSAgICAgIGZ1bmN0aW9uIHBvaW50KM67LCDPhikgewotICAgICAgICB2YXIgcG9pbnQgPSBy
b3RhdGUozrssIM+GKTsKLSAgICAgICAgaWYgKHBvaW50VmlzaWJsZSjOuyA9IHBvaW50WzBdLCDP
hiA9IHBvaW50WzFdKSkgbGlzdGVuZXIucG9pbnQozrssIM+GKTsKLSAgICAgIH0KLSAgICAgIGZ1
bmN0aW9uIHBvaW50TGluZSjOuywgz4YpIHsKLSAgICAgICAgdmFyIHBvaW50ID0gcm90YXRlKM67
LCDPhik7Ci0gICAgICAgIGxpbmUucG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKTsKLSAgICAgIH0K
LSAgICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHsKLSAgICAgICAgY2xpcC5wb2ludCA9IHBvaW50
TGluZTsKLSAgICAgICAgbGluZS5saW5lU3RhcnQoKTsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9u
IGxpbmVFbmQoKSB7Ci0gICAgICAgIGNsaXAucG9pbnQgPSBwb2ludDsKLSAgICAgICAgbGluZS5s
aW5lRW5kKCk7Ci0gICAgICB9Ci0gICAgICB2YXIgc2VnbWVudHM7Ci0gICAgICB2YXIgYnVmZmVy
ID0gZDNfZ2VvX2NsaXBCdWZmZXJMaXN0ZW5lcigpLCByaW5nTGlzdGVuZXIgPSBjbGlwTGluZShi
dWZmZXIpLCBwb2x5Z29uU3RhcnRlZCA9IGZhbHNlLCBwb2x5Z29uLCByaW5nOwotICAgICAgZnVu
Y3Rpb24gcG9pbnRSaW5nKM67LCDPhikgewotICAgICAgICByaW5nLnB1c2goWyDOuywgz4YgXSk7
Ci0gICAgICAgIHZhciBwb2ludCA9IHJvdGF0ZSjOuywgz4YpOwotICAgICAgICByaW5nTGlzdGVu
ZXIucG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKTsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIHJp
bmdTdGFydCgpIHsKLSAgICAgICAgcmluZ0xpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgICAgICBy
aW5nID0gW107Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiByaW5nRW5kKCkgewotICAgICAgICBw
b2ludFJpbmcocmluZ1swXVswXSwgcmluZ1swXVsxXSk7Ci0gICAgICAgIHJpbmdMaXN0ZW5lci5s
aW5lRW5kKCk7Ci0gICAgICAgIHZhciBjbGVhbiA9IHJpbmdMaXN0ZW5lci5jbGVhbigpLCByaW5n
U2VnbWVudHMgPSBidWZmZXIuYnVmZmVyKCksIHNlZ21lbnQsIG4gPSByaW5nU2VnbWVudHMubGVu
Z3RoOwotICAgICAgICByaW5nLnBvcCgpOwotICAgICAgICBwb2x5Z29uLnB1c2gocmluZyk7Ci0g
ICAgICAgIHJpbmcgPSBudWxsOwotICAgICAgICBpZiAoIW4pIHJldHVybjsKLSAgICAgICAgaWYg
KGNsZWFuICYgMSkgewotICAgICAgICAgIHNlZ21lbnQgPSByaW5nU2VnbWVudHNbMF07Ci0gICAg
ICAgICAgdmFyIG4gPSBzZWdtZW50Lmxlbmd0aCAtIDEsIGkgPSAtMSwgcG9pbnQ7Ci0gICAgICAg
ICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoIXBvbHlnb25TdGFydGVkKSBsaXN0ZW5l
ci5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbGlz
dGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgICAgICB3aGlsZSAoKytpIDwgbikgbGlzdGVuZXIu
cG9pbnQoKHBvaW50ID0gc2VnbWVudFtpXSlbMF0sIHBvaW50WzFdKTsKLSAgICAgICAgICAgIGxp
c3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChuID4gMSAmJiBjbGVhbiAmIDIpIHJpbmdTZWdtZW50cy5wdXNoKHJp
bmdTZWdtZW50cy5wb3AoKS5jb25jYXQocmluZ1NlZ21lbnRzLnNoaWZ0KCkpKTsKLSAgICAgICAg
c2VnbWVudHMucHVzaChyaW5nU2VnbWVudHMuZmlsdGVyKGQzX2dlb19jbGlwU2VnbWVudExlbmd0
aDEpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjbGlwOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfZ2VvX2NsaXBTZWdtZW50TGVuZ3RoMShzZWdtZW50KSB7Ci0gICAgcmV0dXJuIHNlZ21l
bnQubGVuZ3RoID4gMTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2xpcEJ1ZmZlckxpc3RlbmVy
KCkgewotICAgIHZhciBsaW5lcyA9IFtdLCBsaW5lOwotICAgIHJldHVybiB7Ci0gICAgICBsaW5l
U3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBsaW5lcy5wdXNoKGxpbmUgPSBbXSk7Ci0gICAg
ICB9LAotICAgICAgcG9pbnQ6IGZ1bmN0aW9uKM67LCDPhikgewotICAgICAgICBsaW5lLnB1c2go
WyDOuywgz4YgXSk7Ci0gICAgICB9LAotICAgICAgbGluZUVuZDogZDNfbm9vcCwKLSAgICAgIGJ1
ZmZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBidWZmZXIgPSBsaW5lczsKLSAgICAgICAg
bGluZXMgPSBbXTsKLSAgICAgICAgbGluZSA9IG51bGw7Ci0gICAgICAgIHJldHVybiBidWZmZXI7
Ci0gICAgICB9LAotICAgICAgcmVqb2luOiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKGxpbmVz
Lmxlbmd0aCA+IDEpIGxpbmVzLnB1c2gobGluZXMucG9wKCkuY29uY2F0KGxpbmVzLnNoaWZ0KCkp
KTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jbGlwU29ydChhLCBi
KSB7Ci0gICAgcmV0dXJuICgoYSA9IGEueClbMF0gPCAwID8gYVsxXSAtIGhhbGbPgCAtIM61IDog
aGFsZs+AIC0gYVsxXSkgLSAoKGIgPSBiLngpWzBdIDwgMCA/IGJbMV0gLSBoYWxmz4AgLSDOtSA6
IGhhbGbPgCAtIGJbMV0pOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19wb2ludEluUG9seWdvbihw
b2ludCwgcG9seWdvbikgewotICAgIHZhciBtZXJpZGlhbiA9IHBvaW50WzBdLCBwYXJhbGxlbCA9
IHBvaW50WzFdLCBtZXJpZGlhbk5vcm1hbCA9IFsgTWF0aC5zaW4obWVyaWRpYW4pLCAtTWF0aC5j
b3MobWVyaWRpYW4pLCAwIF0sIHBvbGFyQW5nbGUgPSAwLCB3aW5kaW5nID0gMDsKLSAgICBkM19n
ZW9fYXJlYVJpbmdTdW0ucmVzZXQoKTsKLSAgICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24u
bGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICB2YXIgcmluZyA9IHBvbHlnb25baV0sIG0gPSBy
aW5nLmxlbmd0aDsKLSAgICAgIGlmICghbSkgY29udGludWU7Ci0gICAgICB2YXIgcG9pbnQwID0g
cmluZ1swXSwgzrswID0gcG9pbnQwWzBdLCDPhjAgPSBwb2ludDBbMV0gLyAyICsgz4AgLyA0LCBz
aW7PhjAgPSBNYXRoLnNpbijPhjApLCBjb3PPhjAgPSBNYXRoLmNvcyjPhjApLCBqID0gMTsKLSAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChqID09PSBtKSBqID0gMDsKLSAgICAgICAg
cG9pbnQgPSByaW5nW2pdOwotICAgICAgICB2YXIgzrsgPSBwb2ludFswXSwgz4YgPSBwb2ludFsx
XSAvIDIgKyDPgCAvIDQsIHNpbs+GID0gTWF0aC5zaW4oz4YpLCBjb3PPhiA9IE1hdGguY29zKM+G
KSwgZM67ID0gzrsgLSDOuzAsIHNkzrsgPSBkzrsgPj0gMCA/IDEgOiAtMSwgYWTOuyA9IHNkzrsg
KiBkzrssIGFudGltZXJpZGlhbiA9IGFkzrsgPiDPgCwgayA9IHNpbs+GMCAqIHNpbs+GOwotICAg
ICAgICBkM19nZW9fYXJlYVJpbmdTdW0uYWRkKE1hdGguYXRhbjIoayAqIHNkzrsgKiBNYXRoLnNp
bihhZM67KSwgY29zz4YwICogY29zz4YgKyBrICogTWF0aC5jb3MoYWTOuykpKTsKLSAgICAgICAg
cG9sYXJBbmdsZSArPSBhbnRpbWVyaWRpYW4gPyBkzrsgKyBzZM67ICogz4QgOiBkzrs7Ci0gICAg
ICAgIGlmIChhbnRpbWVyaWRpYW4gXiDOuzAgPj0gbWVyaWRpYW4gXiDOuyA+PSBtZXJpZGlhbikg
ewotICAgICAgICAgIHZhciBhcmMgPSBkM19nZW9fY2FydGVzaWFuQ3Jvc3MoZDNfZ2VvX2NhcnRl
c2lhbihwb2ludDApLCBkM19nZW9fY2FydGVzaWFuKHBvaW50KSk7Ci0gICAgICAgICAgZDNfZ2Vv
X2NhcnRlc2lhbk5vcm1hbGl6ZShhcmMpOwotICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBk
M19nZW9fY2FydGVzaWFuQ3Jvc3MobWVyaWRpYW5Ob3JtYWwsIGFyYyk7Ci0gICAgICAgICAgZDNf
Z2VvX2NhcnRlc2lhbk5vcm1hbGl6ZShpbnRlcnNlY3Rpb24pOwotICAgICAgICAgIHZhciDPhmFy
YyA9IChhbnRpbWVyaWRpYW4gXiBkzrsgPj0gMCA/IC0xIDogMSkgKiBkM19hc2luKGludGVyc2Vj
dGlvblsyXSk7Ci0gICAgICAgICAgaWYgKHBhcmFsbGVsID4gz4ZhcmMgfHwgcGFyYWxsZWwgPT09
IM+GYXJjICYmIChhcmNbMF0gfHwgYXJjWzFdKSkgewotICAgICAgICAgICAgd2luZGluZyArPSBh
bnRpbWVyaWRpYW4gXiBkzrsgPj0gMCA/IDEgOiAtMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFqKyspIGJyZWFrOwotICAgICAgICDOuzAgPSDOuywgc2luz4YwID0gc2lu
z4YsIGNvc8+GMCA9IGNvc8+GLCBwb2ludDAgPSBwb2ludDsKLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIChwb2xhckFuZ2xlIDwgLc61IHx8IHBvbGFyQW5nbGUgPCDOtSAmJiBkM19nZW9fYXJl
YVJpbmdTdW0gPCAwKSBeIHdpbmRpbmcgJiAxOwotICB9Ci0gIHZhciBkM19nZW9fY2xpcEFudGlt
ZXJpZGlhbiA9IGQzX2dlb19jbGlwKGQzX3RydWUsIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuTGlu
ZSwgZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZSwgWyAtz4AsIC3PgCAvIDIgXSk7
Ci0gIGZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuTGluZShsaXN0ZW5lcikgewotICAg
IHZhciDOuzAgPSBOYU4sIM+GMCA9IE5hTiwgc867MCA9IE5hTiwgY2xlYW47Ci0gICAgcmV0dXJu
IHsKLSAgICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxpc3RlbmVyLmxpbmVT
dGFydCgpOwotICAgICAgICBjbGVhbiA9IDE7Ci0gICAgICB9LAotICAgICAgcG9pbnQ6IGZ1bmN0
aW9uKM67MSwgz4YxKSB7Ci0gICAgICAgIHZhciBzzrsxID0gzrsxID4gMCA/IM+AIDogLc+ALCBk
zrsgPSBhYnMozrsxIC0gzrswKTsKLSAgICAgICAgaWYgKGFicyhkzrsgLSDPgCkgPCDOtSkgewot
ICAgICAgICAgIGxpc3RlbmVyLnBvaW50KM67MCwgz4YwID0gKM+GMCArIM+GMSkgLyAyID4gMCA/
IGhhbGbPgCA6IC1oYWxmz4ApOwotICAgICAgICAgIGxpc3RlbmVyLnBvaW50KHPOuzAsIM+GMCk7
Ci0gICAgICAgICAgbGlzdGVuZXIubGluZUVuZCgpOwotICAgICAgICAgIGxpc3RlbmVyLmxpbmVT
dGFydCgpOwotICAgICAgICAgIGxpc3RlbmVyLnBvaW50KHPOuzEsIM+GMCk7Ci0gICAgICAgICAg
bGlzdGVuZXIucG9pbnQozrsxLCDPhjApOwotICAgICAgICAgIGNsZWFuID0gMDsKLSAgICAgICAg
fSBlbHNlIGlmIChzzrswICE9PSBzzrsxICYmIGTOuyA+PSDPgCkgewotICAgICAgICAgIGlmIChh
YnMozrswIC0gc867MCkgPCDOtSkgzrswIC09IHPOuzAgKiDOtTsKLSAgICAgICAgICBpZiAoYWJz
KM67MSAtIHPOuzEpIDwgzrUpIM67MSAtPSBzzrsxICogzrU7Ci0gICAgICAgICAgz4YwID0gZDNf
Z2VvX2NsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QozrswLCDPhjAsIM67MSwgz4YxKTsKLSAgICAg
ICAgICBsaXN0ZW5lci5wb2ludChzzrswLCDPhjApOwotICAgICAgICAgIGxpc3RlbmVyLmxpbmVF
bmQoKTsKLSAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgICBsaXN0ZW5l
ci5wb2ludChzzrsxLCDPhjApOwotICAgICAgICAgIGNsZWFuID0gMDsKLSAgICAgICAgfQotICAg
ICAgICBsaXN0ZW5lci5wb2ludCjOuzAgPSDOuzEsIM+GMCA9IM+GMSk7Ci0gICAgICAgIHPOuzAg
PSBzzrsxOwotICAgICAgfSwKLSAgICAgIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBs
aXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgICAgIM67MCA9IM+GMCA9IE5hTjsKLSAgICAgIH0sCi0g
ICAgICBjbGVhbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiAyIC0gY2xlYW47Ci0gICAg
ICB9Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2xpcEFudGltZXJpZGlhbkludGVy
c2VjdCjOuzAsIM+GMCwgzrsxLCDPhjEpIHsKLSAgICB2YXIgY29zz4YwLCBjb3PPhjEsIHNpbs67
MF/OuzEgPSBNYXRoLnNpbijOuzAgLSDOuzEpOwotICAgIHJldHVybiBhYnMoc2luzrswX867MSkg
PiDOtSA/IE1hdGguYXRhbigoTWF0aC5zaW4oz4YwKSAqIChjb3PPhjEgPSBNYXRoLmNvcyjPhjEp
KSAqIE1hdGguc2luKM67MSkgLSBNYXRoLnNpbijPhjEpICogKGNvc8+GMCA9IE1hdGguY29zKM+G
MCkpICogTWF0aC5zaW4ozrswKSkgLyAoY29zz4YwICogY29zz4YxICogc2luzrswX867MSkpIDog
KM+GMCArIM+GMSkgLyAyOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFu
SW50ZXJwb2xhdGUoZnJvbSwgdG8sIGRpcmVjdGlvbiwgbGlzdGVuZXIpIHsKLSAgICB2YXIgz4Y7
Ci0gICAgaWYgKGZyb20gPT0gbnVsbCkgewotICAgICAgz4YgPSBkaXJlY3Rpb24gKiBoYWxmz4A7
Ci0gICAgICBsaXN0ZW5lci5wb2ludCgtz4AsIM+GKTsKLSAgICAgIGxpc3RlbmVyLnBvaW50KDAs
IM+GKTsKLSAgICAgIGxpc3RlbmVyLnBvaW50KM+ALCDPhik7Ci0gICAgICBsaXN0ZW5lci5wb2lu
dCjPgCwgMCk7Ci0gICAgICBsaXN0ZW5lci5wb2ludCjPgCwgLc+GKTsKLSAgICAgIGxpc3RlbmVy
LnBvaW50KDAsIC3Phik7Ci0gICAgICBsaXN0ZW5lci5wb2ludCgtz4AsIC3Phik7Ci0gICAgICBs
aXN0ZW5lci5wb2ludCgtz4AsIDApOwotICAgICAgbGlzdGVuZXIucG9pbnQoLc+ALCDPhik7Ci0g
ICAgfSBlbHNlIGlmIChhYnMoZnJvbVswXSAtIHRvWzBdKSA+IM61KSB7Ci0gICAgICB2YXIgcyA9
IGZyb21bMF0gPCB0b1swXSA/IM+AIDogLc+AOwotICAgICAgz4YgPSBkaXJlY3Rpb24gKiBzIC8g
MjsKLSAgICAgIGxpc3RlbmVyLnBvaW50KC1zLCDPhik7Ci0gICAgICBsaXN0ZW5lci5wb2ludCgw
LCDPhik7Ci0gICAgICBsaXN0ZW5lci5wb2ludChzLCDPhik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGxpc3RlbmVyLnBvaW50KHRvWzBdLCB0b1sxXSk7Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGQz
X2dlb19jbGlwQ2lyY2xlKHJhZGl1cykgewotICAgIHZhciBjciA9IE1hdGguY29zKHJhZGl1cyks
IHNtYWxsUmFkaXVzID0gY3IgPiAwLCBub3RIZW1pc3BoZXJlID0gYWJzKGNyKSA+IM61LCBpbnRl
cnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShyYWRpdXMsIDYgKiBkM19yYWRpYW5z
KTsKLSAgICByZXR1cm4gZDNfZ2VvX2NsaXAodmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRl
LCBzbWFsbFJhZGl1cyA/IFsgMCwgLXJhZGl1cyBdIDogWyAtz4AsIHJhZGl1cyAtIM+AIF0pOwot
ICAgIGZ1bmN0aW9uIHZpc2libGUozrssIM+GKSB7Ci0gICAgICByZXR1cm4gTWF0aC5jb3Mozrsp
ICogTWF0aC5jb3Moz4YpID4gY3I7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGNsaXBMaW5lKGxpc3Rl
bmVyKSB7Ci0gICAgICB2YXIgcG9pbnQwLCBjMCwgdjAsIHYwMCwgY2xlYW47Ci0gICAgICByZXR1
cm4gewotICAgICAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHYwMCA9IHYw
ID0gZmFsc2U7Ci0gICAgICAgICAgY2xlYW4gPSAxOwotICAgICAgICB9LAotICAgICAgICBwb2lu
dDogZnVuY3Rpb24ozrssIM+GKSB7Ci0gICAgICAgICAgdmFyIHBvaW50MSA9IFsgzrssIM+GIF0s
IHBvaW50MiwgdiA9IHZpc2libGUozrssIM+GKSwgYyA9IHNtYWxsUmFkaXVzID8gdiA/IDAgOiBj
b2RlKM67LCDPhikgOiB2ID8gY29kZSjOuyArICjOuyA8IDAgPyDPgCA6IC3PgCksIM+GKSA6IDA7
Ci0gICAgICAgICAgaWYgKCFwb2ludDAgJiYgKHYwMCA9IHYwID0gdikpIGxpc3RlbmVyLmxpbmVT
dGFydCgpOwotICAgICAgICAgIGlmICh2ICE9PSB2MCkgewotICAgICAgICAgICAgcG9pbnQyID0g
aW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTsKLSAgICAgICAgICAgIGlmIChkM19nZW9fc3BoZXJp
Y2FsRXF1YWwocG9pbnQwLCBwb2ludDIpIHx8IGQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDEs
IHBvaW50MikpIHsKLSAgICAgICAgICAgICAgcG9pbnQxWzBdICs9IM61OwotICAgICAgICAgICAg
ICBwb2ludDFbMV0gKz0gzrU7Ci0gICAgICAgICAgICAgIHYgPSB2aXNpYmxlKHBvaW50MVswXSwg
cG9pbnQxWzFdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHYg
IT09IHYwKSB7Ci0gICAgICAgICAgICBjbGVhbiA9IDA7Ci0gICAgICAgICAgICBpZiAodikgewot
ICAgICAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgICAgICAgcG9pbnQy
ID0gaW50ZXJzZWN0KHBvaW50MSwgcG9pbnQwKTsKLSAgICAgICAgICAgICAgbGlzdGVuZXIucG9p
bnQocG9pbnQyWzBdLCBwb2ludDJbMV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MCwgcG9pbnQxKTsKLSAgICAgICAgICAgICAg
bGlzdGVuZXIucG9pbnQocG9pbnQyWzBdLCBwb2ludDJbMV0pOwotICAgICAgICAgICAgICBsaXN0
ZW5lci5saW5lRW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb2ludDAgPSBwb2lu
dDI7Ci0gICAgICAgICAgfSBlbHNlIGlmIChub3RIZW1pc3BoZXJlICYmIHBvaW50MCAmJiBzbWFs
bFJhZGl1cyBeIHYpIHsKLSAgICAgICAgICAgIHZhciB0OwotICAgICAgICAgICAgaWYgKCEoYyAm
IGMwKSAmJiAodCA9IGludGVyc2VjdChwb2ludDEsIHBvaW50MCwgdHJ1ZSkpKSB7Ci0gICAgICAg
ICAgICAgIGNsZWFuID0gMDsKLSAgICAgICAgICAgICAgaWYgKHNtYWxsUmFkaXVzKSB7Ci0gICAg
ICAgICAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgbGlzdGVu
ZXIucG9pbnQodFswXVswXSwgdFswXVsxXSk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXIucG9p
bnQodFsxXVswXSwgdFsxXVsxXSk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXIubGluZUVuZCgp
OwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxpc3RlbmVyLnBvaW50
KHRbMV1bMF0sIHRbMV1bMV0pOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpbmVFbmQoKTsK
LSAgICAgICAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgICAgICAgICBs
aXN0ZW5lci5wb2ludCh0WzBdWzBdLCB0WzBdWzFdKTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodiAmJiAoIXBvaW50MCB8fCAhZDNf
Z2VvX3NwaGVyaWNhbEVxdWFsKHBvaW50MCwgcG9pbnQxKSkpIHsKLSAgICAgICAgICAgIGxpc3Rl
bmVyLnBvaW50KHBvaW50MVswXSwgcG9pbnQxWzFdKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
cG9pbnQwID0gcG9pbnQxLCB2MCA9IHYsIGMwID0gYzsKLSAgICAgICAgfSwKLSAgICAgICAgbGlu
ZUVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKHYwKSBsaXN0ZW5lci5saW5lRW5kKCk7
Ci0gICAgICAgICAgcG9pbnQwID0gbnVsbDsKLSAgICAgICAgfSwKLSAgICAgICAgY2xlYW46IGZ1
bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiBjbGVhbiB8ICh2MDAgJiYgdjApIDw8IDE7Ci0g
ICAgICAgIH0KLSAgICAgIH07Ci0gICAgfQotICAgIGZ1bmN0aW9uIGludGVyc2VjdChhLCBiLCB0
d28pIHsKLSAgICAgIHZhciBwYSA9IGQzX2dlb19jYXJ0ZXNpYW4oYSksIHBiID0gZDNfZ2VvX2Nh
cnRlc2lhbihiKTsKLSAgICAgIHZhciBuMSA9IFsgMSwgMCwgMCBdLCBuMiA9IGQzX2dlb19jYXJ0
ZXNpYW5Dcm9zcyhwYSwgcGIpLCBuMm4yID0gZDNfZ2VvX2NhcnRlc2lhbkRvdChuMiwgbjIpLCBu
MW4yID0gbjJbMF0sIGRldGVybWluYW50ID0gbjJuMiAtIG4xbjIgKiBuMW4yOwotICAgICAgaWYg
KCFkZXRlcm1pbmFudCkgcmV0dXJuICF0d28gJiYgYTsKLSAgICAgIHZhciBjMSA9IGNyICogbjJu
MiAvIGRldGVybWluYW50LCBjMiA9IC1jciAqIG4xbjIgLyBkZXRlcm1pbmFudCwgbjF4bjIgPSBk
M19nZW9fY2FydGVzaWFuQ3Jvc3MobjEsIG4yKSwgQSA9IGQzX2dlb19jYXJ0ZXNpYW5TY2FsZShu
MSwgYzEpLCBCID0gZDNfZ2VvX2NhcnRlc2lhblNjYWxlKG4yLCBjMik7Ci0gICAgICBkM19nZW9f
Y2FydGVzaWFuQWRkKEEsIEIpOwotICAgICAgdmFyIHUgPSBuMXhuMiwgdyA9IGQzX2dlb19jYXJ0
ZXNpYW5Eb3QoQSwgdSksIHV1ID0gZDNfZ2VvX2NhcnRlc2lhbkRvdCh1LCB1KSwgdDIgPSB3ICog
dyAtIHV1ICogKGQzX2dlb19jYXJ0ZXNpYW5Eb3QoQSwgQSkgLSAxKTsKLSAgICAgIGlmICh0MiA8
IDApIHJldHVybjsKLSAgICAgIHZhciB0ID0gTWF0aC5zcXJ0KHQyKSwgcSA9IGQzX2dlb19jYXJ0
ZXNpYW5TY2FsZSh1LCAoLXcgLSB0KSAvIHV1KTsKLSAgICAgIGQzX2dlb19jYXJ0ZXNpYW5BZGQo
cSwgQSk7Ci0gICAgICBxID0gZDNfZ2VvX3NwaGVyaWNhbChxKTsKLSAgICAgIGlmICghdHdvKSBy
ZXR1cm4gcTsKLSAgICAgIHZhciDOuzAgPSBhWzBdLCDOuzEgPSBiWzBdLCDPhjAgPSBhWzFdLCDP
hjEgPSBiWzFdLCB6OwotICAgICAgaWYgKM67MSA8IM67MCkgeiA9IM67MCwgzrswID0gzrsxLCDO
uzEgPSB6OwotICAgICAgdmFyIM60zrsgPSDOuzEgLSDOuzAsIHBvbGFyID0gYWJzKM60zrsgLSDP
gCkgPCDOtSwgbWVyaWRpYW4gPSBwb2xhciB8fCDOtM67IDwgzrU7Ci0gICAgICBpZiAoIXBvbGFy
ICYmIM+GMSA8IM+GMCkgeiA9IM+GMCwgz4YwID0gz4YxLCDPhjEgPSB6OwotICAgICAgaWYgKG1l
cmlkaWFuID8gcG9sYXIgPyDPhjAgKyDPhjEgPiAwIF4gcVsxXSA8IChhYnMocVswXSAtIM67MCkg
PCDOtSA/IM+GMCA6IM+GMSkgOiDPhjAgPD0gcVsxXSAmJiBxWzFdIDw9IM+GMSA6IM60zrsgPiDP
gCBeICjOuzAgPD0gcVswXSAmJiBxWzBdIDw9IM67MSkpIHsKLSAgICAgICAgdmFyIHExID0gZDNf
Z2VvX2NhcnRlc2lhblNjYWxlKHUsICgtdyArIHQpIC8gdXUpOwotICAgICAgICBkM19nZW9fY2Fy
dGVzaWFuQWRkKHExLCBBKTsKLSAgICAgICAgcmV0dXJuIFsgcSwgZDNfZ2VvX3NwaGVyaWNhbChx
MSkgXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gY29kZSjOuywgz4YpIHsKLSAgICAg
IHZhciByID0gc21hbGxSYWRpdXMgPyByYWRpdXMgOiDPgCAtIHJhZGl1cywgY29kZSA9IDA7Ci0g
ICAgICBpZiAozrsgPCAtcikgY29kZSB8PSAxOyBlbHNlIGlmICjOuyA+IHIpIGNvZGUgfD0gMjsK
LSAgICAgIGlmICjPhiA8IC1yKSBjb2RlIHw9IDQ7IGVsc2UgaWYgKM+GID4gcikgY29kZSB8PSA4
OwotICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fY2xp
cExpbmUoeDAsIHkwLCB4MSwgeTEpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24obGluZSkgewotICAg
ICAgdmFyIGEgPSBsaW5lLmEsIGIgPSBsaW5lLmIsIGF4ID0gYS54LCBheSA9IGEueSwgYnggPSBi
LngsIGJ5ID0gYi55LCB0MCA9IDAsIHQxID0gMSwgZHggPSBieCAtIGF4LCBkeSA9IGJ5IC0gYXks
IHI7Ci0gICAgICByID0geDAgLSBheDsKLSAgICAgIGlmICghZHggJiYgciA+IDApIHJldHVybjsK
LSAgICAgIHIgLz0gZHg7Ci0gICAgICBpZiAoZHggPCAwKSB7Ci0gICAgICAgIGlmIChyIDwgdDAp
IHJldHVybjsKLSAgICAgICAgaWYgKHIgPCB0MSkgdDEgPSByOwotICAgICAgfSBlbHNlIGlmIChk
eCA+IDApIHsKLSAgICAgICAgaWYgKHIgPiB0MSkgcmV0dXJuOwotICAgICAgICBpZiAociA+IHQw
KSB0MCA9IHI7Ci0gICAgICB9Ci0gICAgICByID0geDEgLSBheDsKLSAgICAgIGlmICghZHggJiYg
ciA8IDApIHJldHVybjsKLSAgICAgIHIgLz0gZHg7Ci0gICAgICBpZiAoZHggPCAwKSB7Ci0gICAg
ICAgIGlmIChyID4gdDEpIHJldHVybjsKLSAgICAgICAgaWYgKHIgPiB0MCkgdDAgPSByOwotICAg
ICAgfSBlbHNlIGlmIChkeCA+IDApIHsKLSAgICAgICAgaWYgKHIgPCB0MCkgcmV0dXJuOwotICAg
ICAgICBpZiAociA8IHQxKSB0MSA9IHI7Ci0gICAgICB9Ci0gICAgICByID0geTAgLSBheTsKLSAg
ICAgIGlmICghZHkgJiYgciA+IDApIHJldHVybjsKLSAgICAgIHIgLz0gZHk7Ci0gICAgICBpZiAo
ZHkgPCAwKSB7Ci0gICAgICAgIGlmIChyIDwgdDApIHJldHVybjsKLSAgICAgICAgaWYgKHIgPCB0
MSkgdDEgPSByOwotICAgICAgfSBlbHNlIGlmIChkeSA+IDApIHsKLSAgICAgICAgaWYgKHIgPiB0
MSkgcmV0dXJuOwotICAgICAgICBpZiAociA+IHQwKSB0MCA9IHI7Ci0gICAgICB9Ci0gICAgICBy
ID0geTEgLSBheTsKLSAgICAgIGlmICghZHkgJiYgciA8IDApIHJldHVybjsKLSAgICAgIHIgLz0g
ZHk7Ci0gICAgICBpZiAoZHkgPCAwKSB7Ci0gICAgICAgIGlmIChyID4gdDEpIHJldHVybjsKLSAg
ICAgICAgaWYgKHIgPiB0MCkgdDAgPSByOwotICAgICAgfSBlbHNlIGlmIChkeSA+IDApIHsKLSAg
ICAgICAgaWYgKHIgPCB0MCkgcmV0dXJuOwotICAgICAgICBpZiAociA8IHQxKSB0MSA9IHI7Ci0g
ICAgICB9Ci0gICAgICBpZiAodDAgPiAwKSBsaW5lLmEgPSB7Ci0gICAgICAgIHg6IGF4ICsgdDAg
KiBkeCwKLSAgICAgICAgeTogYXkgKyB0MCAqIGR5Ci0gICAgICB9OwotICAgICAgaWYgKHQxIDwg
MSkgbGluZS5iID0gewotICAgICAgICB4OiBheCArIHQxICogZHgsCi0gICAgICAgIHk6IGF5ICsg
dDEgKiBkeQotICAgICAgfTsKLSAgICAgIHJldHVybiBsaW5lOwotICAgIH07Ci0gIH0KLSAgdmFy
IGQzX2dlb19jbGlwRXh0ZW50TUFYID0gMWU5OwotICBkMy5nZW8uY2xpcEV4dGVudCA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciB4MCwgeTAsIHgxLCB5MSwgc3RyZWFtLCBjbGlwLCBjbGlwRXh0ZW50
ID0gewotICAgICAgc3RyZWFtOiBmdW5jdGlvbihvdXRwdXQpIHsKLSAgICAgICAgaWYgKHN0cmVh
bSkgc3RyZWFtLnZhbGlkID0gZmFsc2U7Ci0gICAgICAgIHN0cmVhbSA9IGNsaXAob3V0cHV0KTsK
LSAgICAgICAgc3RyZWFtLnZhbGlkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHN0cmVhbTsKLSAg
ICAgIH0sCi0gICAgICBleHRlbnQ6IGZ1bmN0aW9uKF8pIHsKLSAgICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKSByZXR1cm4gWyBbIHgwLCB5MCBdLCBbIHgxLCB5MSBdIF07Ci0gICAgICAgIGNs
aXAgPSBkM19nZW9fY2xpcEV4dGVudCh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9
ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKTsKLSAgICAgICAgaWYgKHN0cmVhbSkgc3RyZWFtLnZh
bGlkID0gZmFsc2UsIHN0cmVhbSA9IG51bGw7Ci0gICAgICAgIHJldHVybiBjbGlwRXh0ZW50Owot
ICAgICAgfQotICAgIH07Ci0gICAgcmV0dXJuIGNsaXBFeHRlbnQuZXh0ZW50KFsgWyAwLCAwIF0s
IFsgOTYwLCA1MDAgXSBdKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBFeHRlbnQoeDAs
IHkwLCB4MSwgeTEpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24obGlzdGVuZXIpIHsKLSAgICAgIHZh
ciBsaXN0ZW5lcl8gPSBsaXN0ZW5lciwgYnVmZmVyTGlzdGVuZXIgPSBkM19nZW9fY2xpcEJ1ZmZl
ckxpc3RlbmVyKCksIGNsaXBMaW5lID0gZDNfZ2VvbV9jbGlwTGluZSh4MCwgeTAsIHgxLCB5MSks
IHNlZ21lbnRzLCBwb2x5Z29uLCByaW5nOwotICAgICAgdmFyIGNsaXAgPSB7Ci0gICAgICAgIHBv
aW50OiBwb2ludCwKLSAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgIGxpbmVF
bmQ6IGxpbmVFbmQsCi0gICAgICAgIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgbGlzdGVuZXIgPSBidWZmZXJMaXN0ZW5lcjsKLSAgICAgICAgICBzZWdtZW50cyA9IFtdOwot
ICAgICAgICAgIHBvbHlnb24gPSBbXTsKLSAgICAgICAgICBjbGVhbiA9IHRydWU7Ci0gICAgICAg
IH0sCi0gICAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGxpc3RlbmVy
ID0gbGlzdGVuZXJfOwotICAgICAgICAgIHNlZ21lbnRzID0gZDMubWVyZ2Uoc2VnbWVudHMpOwot
ICAgICAgICAgIHZhciBjbGlwU3RhcnRJbnNpZGUgPSBpbnNpZGVQb2x5Z29uKFsgeDAsIHkxIF0p
LCBpbnNpZGUgPSBjbGVhbiAmJiBjbGlwU3RhcnRJbnNpZGUsIHZpc2libGUgPSBzZWdtZW50cy5s
ZW5ndGg7Ci0gICAgICAgICAgaWYgKGluc2lkZSB8fCB2aXNpYmxlKSB7Ci0gICAgICAgICAgICBs
aXN0ZW5lci5wb2x5Z29uU3RhcnQoKTsKLSAgICAgICAgICAgIGlmIChpbnNpZGUpIHsKLSAgICAg
ICAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgICAgICAgIGludGVycG9sYXRl
KG51bGwsIG51bGwsIDEsIGxpc3RlbmVyKTsKLSAgICAgICAgICAgICAgbGlzdGVuZXIubGluZUVu
ZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAg
ICAgICAgZDNfZ2VvX2NsaXBQb2x5Z29uKHNlZ21lbnRzLCBjb21wYXJlLCBjbGlwU3RhcnRJbnNp
ZGUsIGludGVycG9sYXRlLCBsaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
aXN0ZW5lci5wb2x5Z29uRW5kKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHNlZ21lbnRzID0g
cG9seWdvbiA9IHJpbmcgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZnVuY3Rp
b24gaW5zaWRlUG9seWdvbihwKSB7Ci0gICAgICAgIHZhciB3biA9IDAsIG4gPSBwb2x5Z29uLmxl
bmd0aCwgeSA9IHBbMV07Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0g
ICAgICAgICAgZm9yICh2YXIgaiA9IDEsIHYgPSBwb2x5Z29uW2ldLCBtID0gdi5sZW5ndGgsIGEg
PSB2WzBdLCBiOyBqIDwgbTsgKytqKSB7Ci0gICAgICAgICAgICBiID0gdltqXTsKLSAgICAgICAg
ICAgIGlmIChhWzFdIDw9IHkpIHsKLSAgICAgICAgICAgICAgaWYgKGJbMV0gPiB5ICYmIGQzX2Ny
b3NzMmQoYSwgYiwgcCkgPiAwKSArK3duOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgaWYgKGJbMV0gPD0geSAmJiBkM19jcm9zczJkKGEsIGIsIHApIDwgMCkgLS13bjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGEgPSBiOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gd24gIT09IDA7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiBpbnRlcnBv
bGF0ZShmcm9tLCB0bywgZGlyZWN0aW9uLCBsaXN0ZW5lcikgewotICAgICAgICB2YXIgYSA9IDAs
IGExID0gMDsKLSAgICAgICAgaWYgKGZyb20gPT0gbnVsbCB8fCAoYSA9IGNvcm5lcihmcm9tLCBk
aXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLCBkaXJlY3Rpb24pKSB8fCBjb21wYXJlUG9p
bnRzKGZyb20sIHRvKSA8IDAgXiBkaXJlY3Rpb24gPiAwKSB7Ci0gICAgICAgICAgZG8gewotICAg
ICAgICAgICAgbGlzdGVuZXIucG9pbnQoYSA9PT0gMCB8fCBhID09PSAzID8geDAgOiB4MSwgYSA+
IDEgPyB5MSA6IHkwKTsKLSAgICAgICAgICB9IHdoaWxlICgoYSA9IChhICsgZGlyZWN0aW9uICsg
NCkgJSA0KSAhPT0gYTEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGxpc3RlbmVyLnBv
aW50KHRvWzBdLCB0b1sxXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIHBv
aW50VmlzaWJsZSh4LCB5KSB7Ci0gICAgICAgIHJldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYg
eTAgPD0geSAmJiB5IDw9IHkxOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkg
ewotICAgICAgICBpZiAocG9pbnRWaXNpYmxlKHgsIHkpKSBsaXN0ZW5lci5wb2ludCh4LCB5KTsK
LSAgICAgIH0KLSAgICAgIHZhciB4X18sIHlfXywgdl9fLCB4XywgeV8sIHZfLCBmaXJzdCwgY2xl
YW47Ci0gICAgICBmdW5jdGlvbiBsaW5lU3RhcnQoKSB7Ci0gICAgICAgIGNsaXAucG9pbnQgPSBs
aW5lUG9pbnQ7Ci0gICAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29uLnB1c2gocmluZyA9IFtdKTsK
LSAgICAgICAgZmlyc3QgPSB0cnVlOwotICAgICAgICB2XyA9IGZhbHNlOwotICAgICAgICB4XyA9
IHlfID0gTmFOOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbGluZUVuZCgpIHsKLSAgICAgICAg
aWYgKHNlZ21lbnRzKSB7Ci0gICAgICAgICAgbGluZVBvaW50KHhfXywgeV9fKTsKLSAgICAgICAg
ICBpZiAodl9fICYmIHZfKSBidWZmZXJMaXN0ZW5lci5yZWpvaW4oKTsKLSAgICAgICAgICBzZWdt
ZW50cy5wdXNoKGJ1ZmZlckxpc3RlbmVyLmJ1ZmZlcigpKTsKLSAgICAgICAgfQotICAgICAgICBj
bGlwLnBvaW50ID0gcG9pbnQ7Ci0gICAgICAgIGlmICh2XykgbGlzdGVuZXIubGluZUVuZCgpOwot
ICAgICAgfQotICAgICAgZnVuY3Rpb24gbGluZVBvaW50KHgsIHkpIHsKLSAgICAgICAgeCA9IE1h
dGgubWF4KC1kM19nZW9fY2xpcEV4dGVudE1BWCwgTWF0aC5taW4oZDNfZ2VvX2NsaXBFeHRlbnRN
QVgsIHgpKTsKLSAgICAgICAgeSA9IE1hdGgubWF4KC1kM19nZW9fY2xpcEV4dGVudE1BWCwgTWF0
aC5taW4oZDNfZ2VvX2NsaXBFeHRlbnRNQVgsIHkpKTsKLSAgICAgICAgdmFyIHYgPSBwb2ludFZp
c2libGUoeCwgeSk7Ci0gICAgICAgIGlmIChwb2x5Z29uKSByaW5nLnB1c2goWyB4LCB5IF0pOwot
ICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICB4X18gPSB4LCB5X18gPSB5LCB2X18gPSB2
OwotICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAg
ICAgIGxpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgICAgICAgICAgbGlzdGVuZXIucG9pbnQoeCwg
eSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmICh2ICYmIHZf
KSBsaXN0ZW5lci5wb2ludCh4LCB5KTsgZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbCA9IHsKLSAg
ICAgICAgICAgICAgYTogewotICAgICAgICAgICAgICAgIHg6IHhfLAotICAgICAgICAgICAgICAg
IHk6IHlfCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIGI6IHsKLSAgICAgICAgICAg
ICAgICB4OiB4LAotICAgICAgICAgICAgICAgIHk6IHkKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgIGlmIChjbGlwTGluZShsKSkgewotICAgICAgICAgICAgICBp
ZiAoIXZfKSB7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAg
ICAgICAgICAgbGlzdGVuZXIucG9pbnQobC5hLngsIGwuYS55KTsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICBsaXN0ZW5lci5wb2ludChsLmIueCwgbC5iLnkpOwotICAgICAgICAgICAg
ICBpZiAoIXYpIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgICAgICAgY2xlYW4gPSBmYWxz
ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodikgewotICAgICAgICAgICAgICBsaXN0ZW5lci5s
aW5lU3RhcnQoKTsKLSAgICAgICAgICAgICAgbGlzdGVuZXIucG9pbnQoeCwgeSk7Ci0gICAgICAg
ICAgICAgIGNsZWFuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHhfID0geCwgeV8gPSB5LCB2XyA9IHY7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gY2xpcDsKLSAgICB9OwotICAgIGZ1bmN0aW9uIGNvcm5lcihwLCBkaXJlY3Rpb24pIHsKLSAg
ICAgIHJldHVybiBhYnMocFswXSAtIHgwKSA8IM61ID8gZGlyZWN0aW9uID4gMCA/IDAgOiAzIDog
YWJzKHBbMF0gLSB4MSkgPCDOtSA/IGRpcmVjdGlvbiA+IDAgPyAyIDogMSA6IGFicyhwWzFdIC0g
eTApIDwgzrUgPyBkaXJlY3Rpb24gPiAwID8gMSA6IDAgOiBkaXJlY3Rpb24gPiAwID8gMyA6IDI7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikgewotICAgICAgcmV0dXJuIGNvbXBh
cmVQb2ludHMoYS54LCBiLngpOwotICAgIH0KLSAgICBmdW5jdGlvbiBjb21wYXJlUG9pbnRzKGEs
IGIpIHsKLSAgICAgIHZhciBjYSA9IGNvcm5lcihhLCAxKSwgY2IgPSBjb3JuZXIoYiwgMSk7Ci0g
ICAgICByZXR1cm4gY2EgIT09IGNiID8gY2EgLSBjYiA6IGNhID09PSAwID8gYlsxXSAtIGFbMV0g
OiBjYSA9PT0gMSA/IGFbMF0gLSBiWzBdIDogY2EgPT09IDIgPyBhWzFdIC0gYlsxXSA6IGJbMF0g
LSBhWzBdOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY29tcG9zZShhLCBiKSB7Ci0g
ICAgZnVuY3Rpb24gY29tcG9zZSh4LCB5KSB7Ci0gICAgICByZXR1cm4geCA9IGEoeCwgeSksIGIo
eFswXSwgeFsxXSk7Ci0gICAgfQotICAgIGlmIChhLmludmVydCAmJiBiLmludmVydCkgY29tcG9z
ZS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICByZXR1cm4geCA9IGIuaW52ZXJ0KHgs
IHkpLCB4ICYmIGEuaW52ZXJ0KHhbMF0sIHhbMV0pOwotICAgIH07Ci0gICAgcmV0dXJuIGNvbXBv
c2U7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NvbmljKHByb2plY3RBdCkgewotICAgIHZhciDP
hjAgPSAwLCDPhjEgPSDPgCAvIDMsIG0gPSBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IocHJvamVj
dEF0KSwgcCA9IG0oz4YwLCDPhjEpOwotICAgIHAucGFyYWxsZWxzID0gZnVuY3Rpb24oXykgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gWyDPhjAgLyDPgCAqIDE4MCwgz4Yx
IC8gz4AgKiAxODAgXTsKLSAgICAgIHJldHVybiBtKM+GMCA9IF9bMF0gKiDPgCAvIDE4MCwgz4Yx
ID0gX1sxXSAqIM+AIC8gMTgwKTsKLSAgICB9OwotICAgIHJldHVybiBwOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2dlb19jb25pY0VxdWFsQXJlYSjPhjAsIM+GMSkgewotICAgIHZhciBzaW7PhjAgPSBN
YXRoLnNpbijPhjApLCBuID0gKHNpbs+GMCArIE1hdGguc2luKM+GMSkpIC8gMiwgQyA9IDEgKyBz
aW7PhjAgKiAoMiAqIG4gLSBzaW7PhjApLCDPgTAgPSBNYXRoLnNxcnQoQykgLyBuOwotICAgIGZ1
bmN0aW9uIGZvcndhcmQozrssIM+GKSB7Ci0gICAgICB2YXIgz4EgPSBNYXRoLnNxcnQoQyAtIDIg
KiBuICogTWF0aC5zaW4oz4YpKSAvIG47Ci0gICAgICByZXR1cm4gWyDPgSAqIE1hdGguc2luKM67
ICo9IG4pLCDPgTAgLSDPgSAqIE1hdGguY29zKM67KSBdOwotICAgIH0KLSAgICBmb3J3YXJkLmlu
dmVydCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIHZhciDPgTBfeSA9IM+BMCAtIHk7Ci0gICAg
ICByZXR1cm4gWyBNYXRoLmF0YW4yKHgsIM+BMF95KSAvIG4sIGQzX2FzaW4oKEMgLSAoeCAqIHgg
KyDPgTBfeSAqIM+BMF95KSAqIG4gKiBuKSAvICgyICogbikpIF07Ci0gICAgfTsKLSAgICByZXR1
cm4gZm9yd2FyZDsKLSAgfQotICAoZDMuZ2VvLmNvbmljRXF1YWxBcmVhID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIGQzX2dlb19jb25pYyhkM19nZW9fY29uaWNFcXVhbEFyZWEpOwotICB9KS5y
YXcgPSBkM19nZW9fY29uaWNFcXVhbEFyZWE7Ci0gIGQzLmdlby5hbGJlcnMgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gZDMuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsgOTYsIDAgXSku
Y2VudGVyKFsgLS42LCAzOC43IF0pLnBhcmFsbGVscyhbIDI5LjUsIDQ1LjUgXSkuc2NhbGUoMTA3
MCk7Ci0gIH07Ci0gIGQzLmdlby5hbGJlcnNVc2EgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgbG93
ZXI0OCA9IGQzLmdlby5hbGJlcnMoKTsKLSAgICB2YXIgYWxhc2thID0gZDMuZ2VvLmNvbmljRXF1
YWxBcmVhKCkucm90YXRlKFsgMTU0LCAwIF0pLmNlbnRlcihbIC0yLCA1OC41IF0pLnBhcmFsbGVs
cyhbIDU1LCA2NSBdKTsKLSAgICB2YXIgaGF3YWlpID0gZDMuZ2VvLmNvbmljRXF1YWxBcmVhKCku
cm90YXRlKFsgMTU3LCAwIF0pLmNlbnRlcihbIC0zLCAxOS45IF0pLnBhcmFsbGVscyhbIDgsIDE4
IF0pOwotICAgIHZhciBwb2ludCwgcG9pbnRTdHJlYW0gPSB7Ci0gICAgICBwb2ludDogZnVuY3Rp
b24oeCwgeSkgewotICAgICAgICBwb2ludCA9IFsgeCwgeSBdOwotICAgICAgfQotICAgIH0sIGxv
d2VyNDhQb2ludCwgYWxhc2thUG9pbnQsIGhhd2FpaVBvaW50OwotICAgIGZ1bmN0aW9uIGFsYmVy
c1VzYShjb29yZGluYXRlcykgewotICAgICAgdmFyIHggPSBjb29yZGluYXRlc1swXSwgeSA9IGNv
b3JkaW5hdGVzWzFdOwotICAgICAgcG9pbnQgPSBudWxsOwotICAgICAgKGxvd2VyNDhQb2ludCh4
LCB5KSwgcG9pbnQpIHx8IChhbGFza2FQb2ludCh4LCB5KSwgcG9pbnQpIHx8IGhhd2FpaVBvaW50
KHgsIHkpOwotICAgICAgcmV0dXJuIHBvaW50OwotICAgIH0KLSAgICBhbGJlcnNVc2EuaW52ZXJ0
ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHsKLSAgICAgIHZhciBrID0gbG93ZXI0OC5zY2FsZSgp
LCB0ID0gbG93ZXI0OC50cmFuc2xhdGUoKSwgeCA9IChjb29yZGluYXRlc1swXSAtIHRbMF0pIC8g
aywgeSA9IChjb29yZGluYXRlc1sxXSAtIHRbMV0pIC8gazsKLSAgICAgIHJldHVybiAoeSA+PSAu
MTIgJiYgeSA8IC4yMzQgJiYgeCA+PSAtLjQyNSAmJiB4IDwgLS4yMTQgPyBhbGFza2EgOiB5ID49
IC4xNjYgJiYgeSA8IC4yMzQgJiYgeCA+PSAtLjIxNCAmJiB4IDwgLS4xMTUgPyBoYXdhaWkgOiBs
b3dlcjQ4KS5pbnZlcnQoY29vcmRpbmF0ZXMpOwotICAgIH07Ci0gICAgYWxiZXJzVXNhLnN0cmVh
bSA9IGZ1bmN0aW9uKHN0cmVhbSkgewotICAgICAgdmFyIGxvd2VyNDhTdHJlYW0gPSBsb3dlcjQ4
LnN0cmVhbShzdHJlYW0pLCBhbGFza2FTdHJlYW0gPSBhbGFza2Euc3RyZWFtKHN0cmVhbSksIGhh
d2FpaVN0cmVhbSA9IGhhd2FpaS5zdHJlYW0oc3RyZWFtKTsKLSAgICAgIHJldHVybiB7Ci0gICAg
ICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICAgICAgbG93ZXI0OFN0cmVhbS5wb2lu
dCh4LCB5KTsKLSAgICAgICAgICBhbGFza2FTdHJlYW0ucG9pbnQoeCwgeSk7Ci0gICAgICAgICAg
aGF3YWlpU3RyZWFtLnBvaW50KHgsIHkpOwotICAgICAgICB9LAotICAgICAgICBzcGhlcmU6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgIGxvd2VyNDhTdHJlYW0uc3BoZXJlKCk7Ci0gICAgICAgICAg
YWxhc2thU3RyZWFtLnNwaGVyZSgpOwotICAgICAgICAgIGhhd2FpaVN0cmVhbS5zcGhlcmUoKTsK
LSAgICAgICAgfSwKLSAgICAgICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBs
b3dlcjQ4U3RyZWFtLmxpbmVTdGFydCgpOwotICAgICAgICAgIGFsYXNrYVN0cmVhbS5saW5lU3Rh
cnQoKTsKLSAgICAgICAgICBoYXdhaWlTdHJlYW0ubGluZVN0YXJ0KCk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGxvd2VyNDhTdHJlYW0ubGlu
ZUVuZCgpOwotICAgICAgICAgIGFsYXNrYVN0cmVhbS5saW5lRW5kKCk7Ci0gICAgICAgICAgaGF3
YWlpU3RyZWFtLmxpbmVFbmQoKTsKLSAgICAgICAgfSwKLSAgICAgICAgcG9seWdvblN0YXJ0OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICBsb3dlcjQ4U3RyZWFtLnBvbHlnb25TdGFydCgpOwotICAg
ICAgICAgIGFsYXNrYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTsKLSAgICAgICAgICBoYXdhaWlTdHJl
YW0ucG9seWdvblN0YXJ0KCk7Ci0gICAgICAgIH0sCi0gICAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgIGxvd2VyNDhTdHJlYW0ucG9seWdvbkVuZCgpOwotICAgICAgICAg
IGFsYXNrYVN0cmVhbS5wb2x5Z29uRW5kKCk7Ci0gICAgICAgICAgaGF3YWlpU3RyZWFtLnBvbHln
b25FbmQoKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9OwotICAgIGFsYmVyc1VzYS5wcmVj
aXNpb24gPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biBsb3dlcjQ4LnByZWNpc2lvbigpOwotICAgICAgbG93ZXI0OC5wcmVjaXNpb24oXyk7Ci0gICAg
ICBhbGFza2EucHJlY2lzaW9uKF8pOwotICAgICAgaGF3YWlpLnByZWNpc2lvbihfKTsKLSAgICAg
IHJldHVybiBhbGJlcnNVc2E7Ci0gICAgfTsKLSAgICBhbGJlcnNVc2Euc2NhbGUgPSBmdW5jdGlv
bihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnNjYWxl
KCk7Ci0gICAgICBsb3dlcjQ4LnNjYWxlKF8pOwotICAgICAgYWxhc2thLnNjYWxlKF8gKiAuMzUp
OwotICAgICAgaGF3YWlpLnNjYWxlKF8pOwotICAgICAgcmV0dXJuIGFsYmVyc1VzYS50cmFuc2xh
dGUobG93ZXI0OC50cmFuc2xhdGUoKSk7Ci0gICAgfTsKLSAgICBhbGJlcnNVc2EudHJhbnNsYXRl
ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG93
ZXI0OC50cmFuc2xhdGUoKTsKLSAgICAgIHZhciBrID0gbG93ZXI0OC5zY2FsZSgpLCB4ID0gK19b
MF0sIHkgPSArX1sxXTsKLSAgICAgIGxvd2VyNDhQb2ludCA9IGxvd2VyNDgudHJhbnNsYXRlKF8p
LmNsaXBFeHRlbnQoWyBbIHggLSAuNDU1ICogaywgeSAtIC4yMzggKiBrIF0sIFsgeCArIC40NTUg
KiBrLCB5ICsgLjIzOCAqIGsgXSBdKS5zdHJlYW0ocG9pbnRTdHJlYW0pLnBvaW50OwotICAgICAg
YWxhc2thUG9pbnQgPSBhbGFza2EudHJhbnNsYXRlKFsgeCAtIC4zMDcgKiBrLCB5ICsgLjIwMSAq
IGsgXSkuY2xpcEV4dGVudChbIFsgeCAtIC40MjUgKiBrICsgzrUsIHkgKyAuMTIgKiBrICsgzrUg
XSwgWyB4IC0gLjIxNCAqIGsgLSDOtSwgeSArIC4yMzQgKiBrIC0gzrUgXSBdKS5zdHJlYW0ocG9p
bnRTdHJlYW0pLnBvaW50OwotICAgICAgaGF3YWlpUG9pbnQgPSBoYXdhaWkudHJhbnNsYXRlKFsg
eCAtIC4yMDUgKiBrLCB5ICsgLjIxMiAqIGsgXSkuY2xpcEV4dGVudChbIFsgeCAtIC4yMTQgKiBr
ICsgzrUsIHkgKyAuMTY2ICogayArIM61IF0sIFsgeCAtIC4xMTUgKiBrIC0gzrUsIHkgKyAuMjM0
ICogayAtIM61IF0gXSkuc3RyZWFtKHBvaW50U3RyZWFtKS5wb2ludDsKLSAgICAgIHJldHVybiBh
bGJlcnNVc2E7Ci0gICAgfTsKLSAgICByZXR1cm4gYWxiZXJzVXNhLnNjYWxlKDEwNzApOwotICB9
OwotICB2YXIgZDNfZ2VvX3BhdGhBcmVhU3VtLCBkM19nZW9fcGF0aEFyZWFQb2x5Z29uLCBkM19n
ZW9fcGF0aEFyZWEgPSB7Ci0gICAgcG9pbnQ6IGQzX25vb3AsCi0gICAgbGluZVN0YXJ0OiBkM19u
b29wLAotICAgIGxpbmVFbmQ6IGQzX25vb3AsCi0gICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigp
IHsKLSAgICAgIGQzX2dlb19wYXRoQXJlYVBvbHlnb24gPSAwOwotICAgICAgZDNfZ2VvX3BhdGhB
cmVhLmxpbmVTdGFydCA9IGQzX2dlb19wYXRoQXJlYVJpbmdTdGFydDsKLSAgICB9LAotICAgIHBv
bHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgZDNfZ2VvX3BhdGhBcmVhLmxpbmVTdGFydCA9
IGQzX2dlb19wYXRoQXJlYS5saW5lRW5kID0gZDNfZ2VvX3BhdGhBcmVhLnBvaW50ID0gZDNfbm9v
cDsKLSAgICAgIGQzX2dlb19wYXRoQXJlYVN1bSArPSBhYnMoZDNfZ2VvX3BhdGhBcmVhUG9seWdv
biAvIDIpOwotICAgIH0KLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvX3BhdGhBcmVhUmluZ1N0YXJ0
KCkgewotICAgIHZhciB4MDAsIHkwMCwgeDAsIHkwOwotICAgIGQzX2dlb19wYXRoQXJlYS5wb2lu
dCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIGQzX2dlb19wYXRoQXJlYS5wb2ludCA9IG5leHRQ
b2ludDsKLSAgICAgIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5OwotICAgIH07Ci0gICAgZnVu
Y3Rpb24gbmV4dFBvaW50KHgsIHkpIHsKLSAgICAgIGQzX2dlb19wYXRoQXJlYVBvbHlnb24gKz0g
eTAgKiB4IC0geDAgKiB5OwotICAgICAgeDAgPSB4LCB5MCA9IHk7Ci0gICAgfQotICAgIGQzX2dl
b19wYXRoQXJlYS5saW5lRW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICBuZXh0UG9pbnQoeDAwLCB5
MDApOwotICAgIH07Ci0gIH0KLSAgdmFyIGQzX2dlb19wYXRoQm91bmRzWDAsIGQzX2dlb19wYXRo
Qm91bmRzWTAsIGQzX2dlb19wYXRoQm91bmRzWDEsIGQzX2dlb19wYXRoQm91bmRzWTE7Ci0gIHZh
ciBkM19nZW9fcGF0aEJvdW5kcyA9IHsKLSAgICBwb2ludDogZDNfZ2VvX3BhdGhCb3VuZHNQb2lu
dCwKLSAgICBsaW5lU3RhcnQ6IGQzX25vb3AsCi0gICAgbGluZUVuZDogZDNfbm9vcCwKLSAgICBw
b2x5Z29uU3RhcnQ6IGQzX25vb3AsCi0gICAgcG9seWdvbkVuZDogZDNfbm9vcAotICB9OwotICBm
dW5jdGlvbiBkM19nZW9fcGF0aEJvdW5kc1BvaW50KHgsIHkpIHsKLSAgICBpZiAoeCA8IGQzX2dl
b19wYXRoQm91bmRzWDApIGQzX2dlb19wYXRoQm91bmRzWDAgPSB4OwotICAgIGlmICh4ID4gZDNf
Z2VvX3BhdGhCb3VuZHNYMSkgZDNfZ2VvX3BhdGhCb3VuZHNYMSA9IHg7Ci0gICAgaWYgKHkgPCBk
M19nZW9fcGF0aEJvdW5kc1kwKSBkM19nZW9fcGF0aEJvdW5kc1kwID0geTsKLSAgICBpZiAoeSA+
IGQzX2dlb19wYXRoQm91bmRzWTEpIGQzX2dlb19wYXRoQm91bmRzWTEgPSB5OwotICB9Ci0gIGZ1
bmN0aW9uIGQzX2dlb19wYXRoQnVmZmVyKCkgewotICAgIHZhciBwb2ludENpcmNsZSA9IGQzX2dl
b19wYXRoQnVmZmVyQ2lyY2xlKDQuNSksIGJ1ZmZlciA9IFtdOwotICAgIHZhciBzdHJlYW0gPSB7
Ci0gICAgICBwb2ludDogcG9pbnQsCi0gICAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludExpbmVTdGFydDsKLSAgICAgIH0sCi0gICAgICBsaW5l
RW5kOiBsaW5lRW5kLAotICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
c3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kUG9seWdvbjsKLSAgICAgIH0sCi0gICAgICBwb2x5Z29u
RW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgc3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kOwotICAg
ICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludDsKLSAgICAgIH0sCi0gICAgICBwb2ludFJhZGl1czog
ZnVuY3Rpb24oXykgewotICAgICAgICBwb2ludENpcmNsZSA9IGQzX2dlb19wYXRoQnVmZmVyQ2ly
Y2xlKF8pOwotICAgICAgICByZXR1cm4gc3RyZWFtOwotICAgICAgfSwKLSAgICAgIHJlc3VsdDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7Ci0gICAgICAgICAgdmFy
IHJlc3VsdCA9IGJ1ZmZlci5qb2luKCIiKTsKLSAgICAgICAgICBidWZmZXIgPSBbXTsKLSAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLSAgICBmdW5j
dGlvbiBwb2ludCh4LCB5KSB7Ci0gICAgICBidWZmZXIucHVzaCgiTSIsIHgsICIsIiwgeSwgcG9p
bnRDaXJjbGUpOwotICAgIH0KLSAgICBmdW5jdGlvbiBwb2ludExpbmVTdGFydCh4LCB5KSB7Ci0g
ICAgICBidWZmZXIucHVzaCgiTSIsIHgsICIsIiwgeSk7Ci0gICAgICBzdHJlYW0ucG9pbnQgPSBw
b2ludExpbmU7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBvaW50TGluZSh4LCB5KSB7Ci0gICAgICBi
dWZmZXIucHVzaCgiTCIsIHgsICIsIiwgeSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxpbmVFbmQo
KSB7Ci0gICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludDsKLSAgICB9Ci0gICAgZnVuY3Rpb24gbGlu
ZUVuZFBvbHlnb24oKSB7Ci0gICAgICBidWZmZXIucHVzaCgiWiIpOwotICAgIH0KLSAgICByZXR1
cm4gc3RyZWFtOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19wYXRoQnVmZmVyQ2lyY2xlKHJhZGl1
cykgewotICAgIHJldHVybiAibTAsIiArIHJhZGl1cyArICJhIiArIHJhZGl1cyArICIsIiArIHJh
ZGl1cyArICIgMCAxLDEgMCwiICsgLTIgKiByYWRpdXMgKyAiYSIgKyByYWRpdXMgKyAiLCIgKyBy
YWRpdXMgKyAiIDAgMSwxIDAsIiArIDIgKiByYWRpdXMgKyAieiI7Ci0gIH0KLSAgdmFyIGQzX2dl
b19wYXRoQ2VudHJvaWQgPSB7Ci0gICAgcG9pbnQ6IGQzX2dlb19wYXRoQ2VudHJvaWRQb2ludCwK
LSAgICBsaW5lU3RhcnQ6IGQzX2dlb19wYXRoQ2VudHJvaWRMaW5lU3RhcnQsCi0gICAgbGluZUVu
ZDogZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVFbmQsCi0gICAgcG9seWdvblN0YXJ0OiBmdW5jdGlv
bigpIHsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhD
ZW50cm9pZFJpbmdTdGFydDsKLSAgICB9LAotICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgZDNfZ2VvX3BhdGhDZW50cm9pZC5wb2ludCA9IGQzX2dlb19wYXRoQ2VudHJvaWRQb2lu
dDsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhDZW50
cm9pZExpbmVTdGFydDsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWQubGluZUVuZCA9IGQzX2dl
b19wYXRoQ2VudHJvaWRMaW5lRW5kOwotICAgIH0KLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvX3Bh
dGhDZW50cm9pZFBvaW50KHgsIHkpIHsKLSAgICBkM19nZW9fY2VudHJvaWRYMCArPSB4OwotICAg
IGQzX2dlb19jZW50cm9pZFkwICs9IHk7Ci0gICAgKytkM19nZW9fY2VudHJvaWRaMDsKLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkTGluZVN0YXJ0KCkgewotICAgIHZhciB4MCwg
eTA7Ci0gICAgZDNfZ2VvX3BhdGhDZW50cm9pZC5wb2ludCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAg
ICAgIGQzX2dlb19wYXRoQ2VudHJvaWQucG9pbnQgPSBuZXh0UG9pbnQ7Ci0gICAgICBkM19nZW9f
cGF0aENlbnRyb2lkUG9pbnQoeDAgPSB4LCB5MCA9IHkpOwotICAgIH07Ci0gICAgZnVuY3Rpb24g
bmV4dFBvaW50KHgsIHkpIHsKLSAgICAgIHZhciBkeCA9IHggLSB4MCwgZHkgPSB5IC0geTAsIHog
PSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWDEg
Kz0geiAqICh4MCArIHgpIC8gMjsKLSAgICAgIGQzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAg
KyB5KSAvIDI7Ci0gICAgICBkM19nZW9fY2VudHJvaWRaMSArPSB6OwotICAgICAgZDNfZ2VvX3Bh
dGhDZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24g
ZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVFbmQoKSB7Ci0gICAgZDNfZ2VvX3BhdGhDZW50cm9pZC5w
b2ludCA9IGQzX2dlb19wYXRoQ2VudHJvaWRQb2ludDsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9f
cGF0aENlbnRyb2lkUmluZ1N0YXJ0KCkgewotICAgIHZhciB4MDAsIHkwMCwgeDAsIHkwOwotICAg
IGQzX2dlb19wYXRoQ2VudHJvaWQucG9pbnQgPSBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICBkM19n
ZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gbmV4dFBvaW50OwotICAgICAgZDNfZ2VvX3BhdGhDZW50
cm9pZFBvaW50KHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5KTsKLSAgICB9OwotICAgIGZ1bmN0
aW9uIG5leHRQb2ludCh4LCB5KSB7Ci0gICAgICB2YXIgZHggPSB4IC0geDAsIGR5ID0geSAtIHkw
LCB6ID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsKLSAgICAgIGQzX2dlb19jZW50cm9p
ZFgxICs9IHogKiAoeDAgKyB4KSAvIDI7Ci0gICAgICBkM19nZW9fY2VudHJvaWRZMSArPSB6ICog
KHkwICsgeSkgLyAyOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWjEgKz0gejsKLSAgICAgIHogPSB5
MCAqIHggLSB4MCAqIHk7Ci0gICAgICBkM19nZW9fY2VudHJvaWRYMiArPSB6ICogKHgwICsgeCk7
Ci0gICAgICBkM19nZW9fY2VudHJvaWRZMiArPSB6ICogKHkwICsgeSk7Ci0gICAgICBkM19nZW9f
Y2VudHJvaWRaMiArPSB6ICogMzsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MCA9
IHgsIHkwID0geSk7Ci0gICAgfQotICAgIGQzX2dlb19wYXRoQ2VudHJvaWQubGluZUVuZCA9IGZ1
bmN0aW9uKCkgewotICAgICAgbmV4dFBvaW50KHgwMCwgeTAwKTsKLSAgICB9OwotICB9Ci0gIGZ1
bmN0aW9uIGQzX2dlb19wYXRoQ29udGV4dChjb250ZXh0KSB7Ci0gICAgdmFyIHBvaW50UmFkaXVz
ID0gNC41OwotICAgIHZhciBzdHJlYW0gPSB7Ci0gICAgICBwb2ludDogcG9pbnQsCi0gICAgICBs
aW5lU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludExpbmVT
dGFydDsKLSAgICAgIH0sCi0gICAgICBsaW5lRW5kOiBsaW5lRW5kLAotICAgICAgcG9seWdvblN0
YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgc3RyZWFtLmxpbmVFbmQgPSBsaW5lRW5kUG9seWdv
bjsKLSAgICAgIH0sCi0gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgc3Ry
ZWFtLmxpbmVFbmQgPSBsaW5lRW5kOwotICAgICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludDsKLSAg
ICAgIH0sCi0gICAgICBwb2ludFJhZGl1czogZnVuY3Rpb24oXykgewotICAgICAgICBwb2ludFJh
ZGl1cyA9IF87Ci0gICAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgICB9LAotICAgICAgcmVzdWx0
OiBkM19ub29wCi0gICAgfTsKLSAgICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7Ci0gICAgICBjb250
ZXh0Lm1vdmVUbyh4LCB5KTsKLSAgICAgIGNvbnRleHQuYXJjKHgsIHksIHBvaW50UmFkaXVzLCAw
LCDPhCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBvaW50TGluZVN0YXJ0KHgsIHkpIHsKLSAgICAg
IGNvbnRleHQubW92ZVRvKHgsIHkpOwotICAgICAgc3RyZWFtLnBvaW50ID0gcG9pbnRMaW5lOwot
ICAgIH0KLSAgICBmdW5jdGlvbiBwb2ludExpbmUoeCwgeSkgewotICAgICAgY29udGV4dC5saW5l
VG8oeCwgeSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7Ci0gICAgICBzdHJlYW0u
cG9pbnQgPSBwb2ludDsKLSAgICB9Ci0gICAgZnVuY3Rpb24gbGluZUVuZFBvbHlnb24oKSB7Ci0g
ICAgICBjb250ZXh0LmNsb3NlUGF0aCgpOwotICAgIH0KLSAgICByZXR1cm4gc3RyZWFtOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX2dlb19yZXNhbXBsZShwcm9qZWN0KSB7Ci0gICAgdmFyIM60MiA9IC41
LCBjb3NNaW5EaXN0YW5jZSA9IE1hdGguY29zKDMwICogZDNfcmFkaWFucyksIG1heERlcHRoID0g
MTY7Ci0gICAgZnVuY3Rpb24gcmVzYW1wbGUoc3RyZWFtKSB7Ci0gICAgICByZXR1cm4gKG1heERl
cHRoID8gcmVzYW1wbGVSZWN1cnNpdmUgOiByZXNhbXBsZU5vbmUpKHN0cmVhbSk7Ci0gICAgfQot
ICAgIGZ1bmN0aW9uIHJlc2FtcGxlTm9uZShzdHJlYW0pIHsKLSAgICAgIHJldHVybiBkM19nZW9f
dHJhbnNmb3JtUG9pbnQoc3RyZWFtLCBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICAgIHggPSBwcm9q
ZWN0KHgsIHkpOwotICAgICAgICBzdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7Ci0gICAgICB9KTsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gcmVzYW1wbGVSZWN1cnNpdmUoc3RyZWFtKSB7Ci0gICAgICB2
YXIgzrswMCwgz4YwMCwgeDAwLCB5MDAsIGEwMCwgYjAwLCBjMDAsIM67MCwgeDAsIHkwLCBhMCwg
YjAsIGMwOwotICAgICAgdmFyIHJlc2FtcGxlID0gewotICAgICAgICBwb2ludDogcG9pbnQsCi0g
ICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICBsaW5lRW5kOiBsaW5lRW5kLAot
ICAgICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHN0cmVhbS5wb2x5
Z29uU3RhcnQoKTsKLSAgICAgICAgICByZXNhbXBsZS5saW5lU3RhcnQgPSByaW5nU3RhcnQ7Ci0g
ICAgICAgIH0sCi0gICAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHN0
cmVhbS5wb2x5Z29uRW5kKCk7Ci0gICAgICAgICAgcmVzYW1wbGUubGluZVN0YXJ0ID0gbGluZVN0
YXJ0OwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkgewot
ICAgICAgICB4ID0gcHJvamVjdCh4LCB5KTsKLSAgICAgICAgc3RyZWFtLnBvaW50KHhbMF0sIHhb
MV0pOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkgewotICAgICAgICB4MCA9
IE5hTjsKLSAgICAgICAgcmVzYW1wbGUucG9pbnQgPSBsaW5lUG9pbnQ7Ci0gICAgICAgIHN0cmVh
bS5saW5lU3RhcnQoKTsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIGxpbmVQb2ludCjOuywgz4Yp
IHsKLSAgICAgICAgdmFyIGMgPSBkM19nZW9fY2FydGVzaWFuKFsgzrssIM+GIF0pLCBwID0gcHJv
amVjdCjOuywgz4YpOwotICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIM67MCwgYTAsIGIw
LCBjMCwgeDAgPSBwWzBdLCB5MCA9IHBbMV0sIM67MCA9IM67LCBhMCA9IGNbMF0sIGIwID0gY1sx
XSwgYzAgPSBjWzJdLCBtYXhEZXB0aCwgc3RyZWFtKTsKLSAgICAgICAgc3RyZWFtLnBvaW50KHgw
LCB5MCk7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiBsaW5lRW5kKCkgewotICAgICAgICByZXNh
bXBsZS5wb2ludCA9IHBvaW50OwotICAgICAgICBzdHJlYW0ubGluZUVuZCgpOwotICAgICAgfQot
ICAgICAgZnVuY3Rpb24gcmluZ1N0YXJ0KCkgewotICAgICAgICBsaW5lU3RhcnQoKTsKLSAgICAg
ICAgcmVzYW1wbGUucG9pbnQgPSByaW5nUG9pbnQ7Ci0gICAgICAgIHJlc2FtcGxlLmxpbmVFbmQg
PSByaW5nRW5kOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gcmluZ1BvaW50KM67LCDPhikgewot
ICAgICAgICBsaW5lUG9pbnQozrswMCA9IM67LCDPhjAwID0gz4YpLCB4MDAgPSB4MCwgeTAwID0g
eTAsIGEwMCA9IGEwLCBiMDAgPSBiMCwgYzAwID0gYzA7Ci0gICAgICAgIHJlc2FtcGxlLnBvaW50
ID0gbGluZVBvaW50OwotICAgICAgfQotICAgICAgZnVuY3Rpb24gcmluZ0VuZCgpIHsKLSAgICAg
ICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCDOuzAsIGEwLCBiMCwgYzAsIHgwMCwgeTAwLCDOuzAw
LCBhMDAsIGIwMCwgYzAwLCBtYXhEZXB0aCwgc3RyZWFtKTsKLSAgICAgICAgcmVzYW1wbGUubGlu
ZUVuZCA9IGxpbmVFbmQ7Ci0gICAgICAgIGxpbmVFbmQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biByZXNhbXBsZTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCDO
uzAsIGEwLCBiMCwgYzAsIHgxLCB5MSwgzrsxLCBhMSwgYjEsIGMxLCBkZXB0aCwgc3RyZWFtKSB7
Ci0gICAgICB2YXIgZHggPSB4MSAtIHgwLCBkeSA9IHkxIC0geTAsIGQyID0gZHggKiBkeCArIGR5
ICogZHk7Ci0gICAgICBpZiAoZDIgPiA0ICogzrQyICYmIGRlcHRoLS0pIHsKLSAgICAgICAgdmFy
IGEgPSBhMCArIGExLCBiID0gYjAgKyBiMSwgYyA9IGMwICsgYzEsIG0gPSBNYXRoLnNxcnQoYSAq
IGEgKyBiICogYiArIGMgKiBjKSwgz4YyID0gTWF0aC5hc2luKGMgLz0gbSksIM67MiA9IGFicyhh
YnMoYykgLSAxKSA8IM61IHx8IGFicyjOuzAgLSDOuzEpIDwgzrUgPyAozrswICsgzrsxKSAvIDIg
OiBNYXRoLmF0YW4yKGIsIGEpLCBwID0gcHJvamVjdCjOuzIsIM+GMiksIHgyID0gcFswXSwgeTIg
PSBwWzFdLCBkeDIgPSB4MiAtIHgwLCBkeTIgPSB5MiAtIHkwLCBkeiA9IGR5ICogZHgyIC0gZHgg
KiBkeTI7Ci0gICAgICAgIGlmIChkeiAqIGR6IC8gZDIgPiDOtDIgfHwgYWJzKChkeCAqIGR4MiAr
IGR5ICogZHkyKSAvIGQyIC0gLjUpID4gLjMgfHwgYTAgKiBhMSArIGIwICogYjEgKyBjMCAqIGMx
IDwgY29zTWluRGlzdGFuY2UpIHsKLSAgICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIM67
MCwgYTAsIGIwLCBjMCwgeDIsIHkyLCDOuzIsIGEgLz0gbSwgYiAvPSBtLCBjLCBkZXB0aCwgc3Ry
ZWFtKTsKLSAgICAgICAgICBzdHJlYW0ucG9pbnQoeDIsIHkyKTsKLSAgICAgICAgICByZXNhbXBs
ZUxpbmVUbyh4MiwgeTIsIM67MiwgYSwgYiwgYywgeDEsIHkxLCDOuzEsIGExLCBiMSwgYzEsIGRl
cHRoLCBzdHJlYW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJlc2FtcGxlLnBy
ZWNpc2lvbiA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0
dXJuIE1hdGguc3FydCjOtDIpOwotICAgICAgbWF4RGVwdGggPSAozrQyID0gXyAqIF8pID4gMCAm
JiAxNjsKLSAgICAgIHJldHVybiByZXNhbXBsZTsKLSAgICB9OwotICAgIHJldHVybiByZXNhbXBs
ZTsKLSAgfQotICBkMy5nZW8ucGF0aCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwb2ludFJhZGl1
cyA9IDQuNSwgcHJvamVjdGlvbiwgY29udGV4dCwgcHJvamVjdFN0cmVhbSwgY29udGV4dFN0cmVh
bSwgY2FjaGVTdHJlYW07Ci0gICAgZnVuY3Rpb24gcGF0aChvYmplY3QpIHsKLSAgICAgIGlmIChv
YmplY3QpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBwb2ludFJhZGl1cyA9PT0gImZ1bmN0aW9uIikg
Y29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygrcG9pbnRSYWRpdXMuYXBwbHkodGhpcywgYXJndW1l
bnRzKSk7Ci0gICAgICAgIGlmICghY2FjaGVTdHJlYW0gfHwgIWNhY2hlU3RyZWFtLnZhbGlkKSBj
YWNoZVN0cmVhbSA9IHByb2plY3RTdHJlYW0oY29udGV4dFN0cmVhbSk7Ci0gICAgICAgIGQzLmdl
by5zdHJlYW0ob2JqZWN0LCBjYWNoZVN0cmVhbSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY29u
dGV4dFN0cmVhbS5yZXN1bHQoKTsKLSAgICB9Ci0gICAgcGF0aC5hcmVhID0gZnVuY3Rpb24ob2Jq
ZWN0KSB7Ci0gICAgICBkM19nZW9fcGF0aEFyZWFTdW0gPSAwOwotICAgICAgZDMuZ2VvLnN0cmVh
bShvYmplY3QsIHByb2plY3RTdHJlYW0oZDNfZ2VvX3BhdGhBcmVhKSk7Ci0gICAgICByZXR1cm4g
ZDNfZ2VvX3BhdGhBcmVhU3VtOwotICAgIH07Ci0gICAgcGF0aC5jZW50cm9pZCA9IGZ1bmN0aW9u
KG9iamVjdCkgewotICAgICAgZDNfZ2VvX2NlbnRyb2lkWDAgPSBkM19nZW9fY2VudHJvaWRZMCA9
IGQzX2dlb19jZW50cm9pZFowID0gZDNfZ2VvX2NlbnRyb2lkWDEgPSBkM19nZW9fY2VudHJvaWRZ
MSA9IGQzX2dlb19jZW50cm9pZFoxID0gZDNfZ2VvX2NlbnRyb2lkWDIgPSBkM19nZW9fY2VudHJv
aWRZMiA9IGQzX2dlb19jZW50cm9pZFoyID0gMDsKLSAgICAgIGQzLmdlby5zdHJlYW0ob2JqZWN0
LCBwcm9qZWN0U3RyZWFtKGQzX2dlb19wYXRoQ2VudHJvaWQpKTsKLSAgICAgIHJldHVybiBkM19n
ZW9fY2VudHJvaWRaMiA/IFsgZDNfZ2VvX2NlbnRyb2lkWDIgLyBkM19nZW9fY2VudHJvaWRaMiwg
ZDNfZ2VvX2NlbnRyb2lkWTIgLyBkM19nZW9fY2VudHJvaWRaMiBdIDogZDNfZ2VvX2NlbnRyb2lk
WjEgPyBbIGQzX2dlb19jZW50cm9pZFgxIC8gZDNfZ2VvX2NlbnRyb2lkWjEsIGQzX2dlb19jZW50
cm9pZFkxIC8gZDNfZ2VvX2NlbnRyb2lkWjEgXSA6IGQzX2dlb19jZW50cm9pZFowID8gWyBkM19n
ZW9fY2VudHJvaWRYMCAvIGQzX2dlb19jZW50cm9pZFowLCBkM19nZW9fY2VudHJvaWRZMCAvIGQz
X2dlb19jZW50cm9pZFowIF0gOiBbIE5hTiwgTmFOIF07Ci0gICAgfTsKLSAgICBwYXRoLmJvdW5k
cyA9IGZ1bmN0aW9uKG9iamVjdCkgewotICAgICAgZDNfZ2VvX3BhdGhCb3VuZHNYMSA9IGQzX2dl
b19wYXRoQm91bmRzWTEgPSAtKGQzX2dlb19wYXRoQm91bmRzWDAgPSBkM19nZW9fcGF0aEJvdW5k
c1kwID0gSW5maW5pdHkpOwotICAgICAgZDMuZ2VvLnN0cmVhbShvYmplY3QsIHByb2plY3RTdHJl
YW0oZDNfZ2VvX3BhdGhCb3VuZHMpKTsKLSAgICAgIHJldHVybiBbIFsgZDNfZ2VvX3BhdGhCb3Vu
ZHNYMCwgZDNfZ2VvX3BhdGhCb3VuZHNZMCBdLCBbIGQzX2dlb19wYXRoQm91bmRzWDEsIGQzX2dl
b19wYXRoQm91bmRzWTEgXSBdOwotICAgIH07Ci0gICAgcGF0aC5wcm9qZWN0aW9uID0gZnVuY3Rp
b24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcHJvamVjdGlvbjsK
LSAgICAgIHByb2plY3RTdHJlYW0gPSAocHJvamVjdGlvbiA9IF8pID8gXy5zdHJlYW0gfHwgZDNf
Z2VvX3BhdGhQcm9qZWN0U3RyZWFtKF8pIDogZDNfaWRlbnRpdHk7Ci0gICAgICByZXR1cm4gcmVz
ZXQoKTsKLSAgICB9OwotICAgIHBhdGguY29udGV4dCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNvbnRleHQ7Ci0gICAgICBjb250ZXh0U3RyZWFt
ID0gKGNvbnRleHQgPSBfKSA9PSBudWxsID8gbmV3IGQzX2dlb19wYXRoQnVmZmVyKCkgOiBuZXcg
ZDNfZ2VvX3BhdGhDb250ZXh0KF8pOwotICAgICAgaWYgKHR5cGVvZiBwb2ludFJhZGl1cyAhPT0g
ImZ1bmN0aW9uIikgY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cyhwb2ludFJhZGl1cyk7Ci0gICAg
ICByZXR1cm4gcmVzZXQoKTsKLSAgICB9OwotICAgIHBhdGgucG9pbnRSYWRpdXMgPSBmdW5jdGlv
bihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwb2ludFJhZGl1czsK
LSAgICAgIHBvaW50UmFkaXVzID0gdHlwZW9mIF8gPT09ICJmdW5jdGlvbiIgPyBfIDogKGNvbnRl
eHRTdHJlYW0ucG9pbnRSYWRpdXMoK18pLCArXyk7Ci0gICAgICByZXR1cm4gcGF0aDsKLSAgICB9
OwotICAgIGZ1bmN0aW9uIHJlc2V0KCkgewotICAgICAgY2FjaGVTdHJlYW0gPSBudWxsOwotICAg
ICAgcmV0dXJuIHBhdGg7Ci0gICAgfQotICAgIHJldHVybiBwYXRoLnByb2plY3Rpb24oZDMuZ2Vv
LmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpOwotICB9OwotICBmdW5jdGlvbiBkM19nZW9fcGF0
aFByb2plY3RTdHJlYW0ocHJvamVjdCkgewotICAgIHZhciByZXNhbXBsZSA9IGQzX2dlb19yZXNh
bXBsZShmdW5jdGlvbih4LCB5KSB7Ci0gICAgICByZXR1cm4gcHJvamVjdChbIHggKiBkM19kZWdy
ZWVzLCB5ICogZDNfZGVncmVlcyBdKTsKLSAgICB9KTsKLSAgICByZXR1cm4gZnVuY3Rpb24oc3Ry
ZWFtKSB7Ci0gICAgICByZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb25SYWRpYW5zKHJlc2FtcGxlKHN0
cmVhbSkpOwotICAgIH07Ci0gIH0KLSAgZDMuZ2VvLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKG1ldGhv
ZHMpIHsKLSAgICByZXR1cm4gewotICAgICAgc3RyZWFtOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAg
ICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBkM19nZW9fdHJhbnNmb3JtKHN0cmVhbSk7Ci0gICAg
ICAgIGZvciAodmFyIGsgaW4gbWV0aG9kcykgdHJhbnNmb3JtW2tdID0gbWV0aG9kc1trXTsKLSAg
ICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKLSAgICAgIH0KLSAgICB9OwotICB9OwotICBmdW5jdGlv
biBkM19nZW9fdHJhbnNmb3JtKHN0cmVhbSkgewotICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtOwot
ICB9Ci0gIGQzX2dlb190cmFuc2Zvcm0ucHJvdG90eXBlID0gewotICAgIHBvaW50OiBmdW5jdGlv
bih4LCB5KSB7Ci0gICAgICB0aGlzLnN0cmVhbS5wb2ludCh4LCB5KTsKLSAgICB9LAotICAgIHNw
aGVyZTogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0cmVhbS5zcGhlcmUoKTsKLSAgICB9LAot
ICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0cmVhbS5saW5lU3RhcnQo
KTsKLSAgICB9LAotICAgIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5zdHJlYW0u
bGluZUVuZCgpOwotICAgIH0sCi0gICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAg
IHRoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpOwotICAgIH0sCi0gICAgcG9seWdvbkVuZDogZnVu
Y3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCk7Ci0gICAgfQotICB9Owot
ICBmdW5jdGlvbiBkM19nZW9fdHJhbnNmb3JtUG9pbnQoc3RyZWFtLCBwb2ludCkgewotICAgIHJl
dHVybiB7Ci0gICAgICBwb2ludDogcG9pbnQsCi0gICAgICBzcGhlcmU6IGZ1bmN0aW9uKCkgewot
ICAgICAgICBzdHJlYW0uc3BoZXJlKCk7Ci0gICAgICB9LAotICAgICAgbGluZVN0YXJ0OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpOwotICAgICAgfSwKLSAgICAgIGxp
bmVFbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJlYW0ubGluZUVuZCgpOwotICAgICAgfSwK
LSAgICAgIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHN0cmVhbS5wb2x5Z29u
U3RhcnQoKTsKLSAgICAgIH0sCi0gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgc3RyZWFtLnBvbHlnb25FbmQoKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0gIGQzLmdlby5w
cm9qZWN0aW9uID0gZDNfZ2VvX3Byb2plY3Rpb247Ci0gIGQzLmdlby5wcm9qZWN0aW9uTXV0YXRv
ciA9IGQzX2dlb19wcm9qZWN0aW9uTXV0YXRvcjsKLSAgZnVuY3Rpb24gZDNfZ2VvX3Byb2plY3Rp
b24ocHJvamVjdCkgewotICAgIHJldHVybiBkM19nZW9fcHJvamVjdGlvbk11dGF0b3IoZnVuY3Rp
b24oKSB7Ci0gICAgICByZXR1cm4gcHJvamVjdDsKLSAgICB9KSgpOwotICB9Ci0gIGZ1bmN0aW9u
IGQzX2dlb19wcm9qZWN0aW9uTXV0YXRvcihwcm9qZWN0QXQpIHsKLSAgICB2YXIgcHJvamVjdCwg
cm90YXRlLCBwcm9qZWN0Um90YXRlLCBwcm9qZWN0UmVzYW1wbGUgPSBkM19nZW9fcmVzYW1wbGUo
ZnVuY3Rpb24oeCwgeSkgewotICAgICAgeCA9IHByb2plY3QoeCwgeSk7Ci0gICAgICByZXR1cm4g
WyB4WzBdICogayArIM60eCwgzrR5IC0geFsxXSAqIGsgXTsKLSAgICB9KSwgayA9IDE1MCwgeCA9
IDQ4MCwgeSA9IDI1MCwgzrsgPSAwLCDPhiA9IDAsIM60zrsgPSAwLCDOtM+GID0gMCwgzrTOsyA9
IDAsIM60eCwgzrR5LCBwcmVjbGlwID0gZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW4sIHBvc3RjbGlw
ID0gZDNfaWRlbnRpdHksIGNsaXBBbmdsZSA9IG51bGwsIGNsaXBFeHRlbnQgPSBudWxsLCBzdHJl
YW07Ci0gICAgZnVuY3Rpb24gcHJvamVjdGlvbihwb2ludCkgewotICAgICAgcG9pbnQgPSBwcm9q
ZWN0Um90YXRlKHBvaW50WzBdICogZDNfcmFkaWFucywgcG9pbnRbMV0gKiBkM19yYWRpYW5zKTsK
LSAgICAgIHJldHVybiBbIHBvaW50WzBdICogayArIM60eCwgzrR5IC0gcG9pbnRbMV0gKiBrIF07
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGludmVydChwb2ludCkgewotICAgICAgcG9pbnQgPSBwcm9q
ZWN0Um90YXRlLmludmVydCgocG9pbnRbMF0gLSDOtHgpIC8gaywgKM60eSAtIHBvaW50WzFdKSAv
IGspOwotICAgICAgcmV0dXJuIHBvaW50ICYmIFsgcG9pbnRbMF0gKiBkM19kZWdyZWVzLCBwb2lu
dFsxXSAqIGQzX2RlZ3JlZXMgXTsKLSAgICB9Ci0gICAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5j
dGlvbihvdXRwdXQpIHsKLSAgICAgIGlmIChzdHJlYW0pIHN0cmVhbS52YWxpZCA9IGZhbHNlOwot
ICAgICAgc3RyZWFtID0gZDNfZ2VvX3Byb2plY3Rpb25SYWRpYW5zKHByZWNsaXAocm90YXRlLCBw
cm9qZWN0UmVzYW1wbGUocG9zdGNsaXAob3V0cHV0KSkpKTsKLSAgICAgIHN0cmVhbS52YWxpZCA9
IHRydWU7Ci0gICAgICByZXR1cm4gc3RyZWFtOwotICAgIH07Ci0gICAgcHJvamVjdGlvbi5jbGlw
QW5nbGUgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biBjbGlwQW5nbGU7Ci0gICAgICBwcmVjbGlwID0gXyA9PSBudWxsID8gKGNsaXBBbmdsZSA9IF8s
IGQzX2dlb19jbGlwQW50aW1lcmlkaWFuKSA6IGQzX2dlb19jbGlwQ2lyY2xlKChjbGlwQW5nbGUg
PSArXykgKiBkM19yYWRpYW5zKTsKLSAgICAgIHJldHVybiBpbnZhbGlkYXRlKCk7Ci0gICAgfTsK
LSAgICBwcm9qZWN0aW9uLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHJldHVybiBjbGlwRXh0ZW50OwotICAgICAgY2xpcEV4dGVudCA9IF87
Ci0gICAgICBwb3N0Y2xpcCA9IF8gPyBkM19nZW9fY2xpcEV4dGVudChfWzBdWzBdLCBfWzBdWzFd
LCBfWzFdWzBdLCBfWzFdWzFdKSA6IGQzX2lkZW50aXR5OwotICAgICAgcmV0dXJuIGludmFsaWRh
dGUoKTsKLSAgICB9OwotICAgIHByb2plY3Rpb24uc2NhbGUgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBrOwotICAgICAgayA9ICtfOwotICAgICAg
cmV0dXJuIHJlc2V0KCk7Ci0gICAgfTsKLSAgICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0
aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFsgeCwgeSBdOwot
ICAgICAgeCA9ICtfWzBdOwotICAgICAgeSA9ICtfWzFdOwotICAgICAgcmV0dXJuIHJlc2V0KCk7
Ci0gICAgfTsKLSAgICBwcm9qZWN0aW9uLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFsgzrsgKiBkM19kZWdyZWVzLCDPhiAqIGQzX2Rl
Z3JlZXMgXTsKLSAgICAgIM67ID0gX1swXSAlIDM2MCAqIGQzX3JhZGlhbnM7Ci0gICAgICDPhiA9
IF9bMV0gJSAzNjAgKiBkM19yYWRpYW5zOwotICAgICAgcmV0dXJuIHJlc2V0KCk7Ci0gICAgfTsK
LSAgICBwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIFsgzrTOuyAqIGQzX2RlZ3JlZXMsIM60z4YgKiBkM19kZWdyZWVz
LCDOtM6zICogZDNfZGVncmVlcyBdOwotICAgICAgzrTOuyA9IF9bMF0gJSAzNjAgKiBkM19yYWRp
YW5zOwotICAgICAgzrTPhiA9IF9bMV0gJSAzNjAgKiBkM19yYWRpYW5zOwotICAgICAgzrTOsyA9
IF8ubGVuZ3RoID4gMiA/IF9bMl0gJSAzNjAgKiBkM19yYWRpYW5zIDogMDsKLSAgICAgIHJldHVy
biByZXNldCgpOwotICAgIH07Ci0gICAgZDMucmViaW5kKHByb2plY3Rpb24sIHByb2plY3RSZXNh
bXBsZSwgInByZWNpc2lvbiIpOwotICAgIGZ1bmN0aW9uIHJlc2V0KCkgewotICAgICAgcHJvamVj
dFJvdGF0ZSA9IGQzX2dlb19jb21wb3NlKHJvdGF0ZSA9IGQzX2dlb19yb3RhdGlvbijOtM67LCDO
tM+GLCDOtM6zKSwgcHJvamVjdCk7Ci0gICAgICB2YXIgY2VudGVyID0gcHJvamVjdCjOuywgz4Yp
OwotICAgICAgzrR4ID0geCAtIGNlbnRlclswXSAqIGs7Ci0gICAgICDOtHkgPSB5ICsgY2VudGVy
WzFdICogazsKLSAgICAgIHJldHVybiBpbnZhbGlkYXRlKCk7Ci0gICAgfQotICAgIGZ1bmN0aW9u
IGludmFsaWRhdGUoKSB7Ci0gICAgICBpZiAoc3RyZWFtKSBzdHJlYW0udmFsaWQgPSBmYWxzZSwg
c3RyZWFtID0gbnVsbDsKLSAgICAgIHJldHVybiBwcm9qZWN0aW9uOwotICAgIH0KLSAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICBwcm9qZWN0ID0gcHJvamVjdEF0LmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7Ci0gICAgICBwcm9qZWN0aW9uLmludmVydCA9IHByb2plY3QuaW52ZXJ0ICYmIGlu
dmVydDsKLSAgICAgIHJldHVybiByZXNldCgpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
Z2VvX3Byb2plY3Rpb25SYWRpYW5zKHN0cmVhbSkgewotICAgIHJldHVybiBkM19nZW9fdHJhbnNm
b3JtUG9pbnQoc3RyZWFtLCBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICBzdHJlYW0ucG9pbnQoeCAq
IGQzX3JhZGlhbnMsIHkgKiBkM19yYWRpYW5zKTsKLSAgICB9KTsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9fZXF1aXJlY3Rhbmd1bGFyKM67LCDPhikgewotICAgIHJldHVybiBbIM67LCDPhiBdOwot
ICB9Ci0gIChkMy5nZW8uZXF1aXJlY3Rhbmd1bGFyID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19lcXVpcmVjdGFuZ3VsYXIpOwotICB9KS5yYXcgPSBk
M19nZW9fZXF1aXJlY3Rhbmd1bGFyLmludmVydCA9IGQzX2dlb19lcXVpcmVjdGFuZ3VsYXI7Ci0g
IGQzLmdlby5yb3RhdGlvbiA9IGZ1bmN0aW9uKHJvdGF0ZSkgewotICAgIHJvdGF0ZSA9IGQzX2dl
b19yb3RhdGlvbihyb3RhdGVbMF0gJSAzNjAgKiBkM19yYWRpYW5zLCByb3RhdGVbMV0gKiBkM19y
YWRpYW5zLCByb3RhdGUubGVuZ3RoID4gMiA/IHJvdGF0ZVsyXSAqIGQzX3JhZGlhbnMgOiAwKTsK
LSAgICBmdW5jdGlvbiBmb3J3YXJkKGNvb3JkaW5hdGVzKSB7Ci0gICAgICBjb29yZGluYXRlcyA9
IHJvdGF0ZShjb29yZGluYXRlc1swXSAqIGQzX3JhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogZDNf
cmFkaWFucyk7Ci0gICAgICByZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZDNfZGVncmVlcywgY29v
cmRpbmF0ZXNbMV0gKj0gZDNfZGVncmVlcywgY29vcmRpbmF0ZXM7Ci0gICAgfQotICAgIGZvcndh
cmQuaW52ZXJ0ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHsKLSAgICAgIGNvb3JkaW5hdGVzID0g
cm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIGQzX3JhZGlhbnMsIGNvb3JkaW5hdGVzWzFd
ICogZDNfcmFkaWFucyk7Ci0gICAgICByZXR1cm4gY29vcmRpbmF0ZXNbMF0gKj0gZDNfZGVncmVl
cywgY29vcmRpbmF0ZXNbMV0gKj0gZDNfZGVncmVlcywgY29vcmRpbmF0ZXM7Ci0gICAgfTsKLSAg
ICByZXR1cm4gZm9yd2FyZDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvX2lkZW50aXR5Um90YXRp
b24ozrssIM+GKSB7Ci0gICAgcmV0dXJuIFsgzrsgPiDPgCA/IM67IC0gz4QgOiDOuyA8IC3PgCA/
IM67ICsgz4QgOiDOuywgz4YgXTsKLSAgfQotICBkM19nZW9faWRlbnRpdHlSb3RhdGlvbi5pbnZl
cnQgPSBkM19nZW9fZXF1aXJlY3Rhbmd1bGFyOwotICBmdW5jdGlvbiBkM19nZW9fcm90YXRpb24o
zrTOuywgzrTPhiwgzrTOsykgewotICAgIHJldHVybiDOtM67ID8gzrTPhiB8fCDOtM6zID8gZDNf
Z2VvX2NvbXBvc2UoZDNfZ2VvX3JvdGF0aW9uzrsozrTOuyksIGQzX2dlb19yb3RhdGlvbs+GzrMo
zrTPhiwgzrTOsykpIDogZDNfZ2VvX3JvdGF0aW9uzrsozrTOuykgOiDOtM+GIHx8IM60zrMgPyBk
M19nZW9fcm90YXRpb27Phs6zKM60z4YsIM60zrMpIDogZDNfZ2VvX2lkZW50aXR5Um90YXRpb247
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2ZvcndhcmRSb3RhdGlvbs67KM60zrspIHsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24ozrssIM+GKSB7Ci0gICAgICByZXR1cm4gzrsgKz0gzrTOuywgWyDOuyA+
IM+AID8gzrsgLSDPhCA6IM67IDwgLc+AID8gzrsgKyDPhCA6IM67LCDPhiBdOwotICAgIH07Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3JvdGF0aW9uzrsozrTOuykgewotICAgIHZhciByb3RhdGlv
biA9IGQzX2dlb19mb3J3YXJkUm90YXRpb27OuyjOtM67KTsKLSAgICByb3RhdGlvbi5pbnZlcnQg
PSBkM19nZW9fZm9yd2FyZFJvdGF0aW9uzrsoLc60zrspOwotICAgIHJldHVybiByb3RhdGlvbjsK
LSAgfQotICBmdW5jdGlvbiBkM19nZW9fcm90YXRpb27Phs6zKM60z4YsIM60zrMpIHsKLSAgICB2
YXIgY29zzrTPhiA9IE1hdGguY29zKM60z4YpLCBzaW7OtM+GID0gTWF0aC5zaW4ozrTPhiksIGNv
c860zrMgPSBNYXRoLmNvcyjOtM6zKSwgc2luzrTOsyA9IE1hdGguc2luKM60zrMpOwotICAgIGZ1
bmN0aW9uIHJvdGF0aW9uKM67LCDPhikgewotICAgICAgdmFyIGNvc8+GID0gTWF0aC5jb3Moz4Yp
LCB4ID0gTWF0aC5jb3MozrspICogY29zz4YsIHkgPSBNYXRoLnNpbijOuykgKiBjb3PPhiwgeiA9
IE1hdGguc2luKM+GKSwgayA9IHogKiBjb3POtM+GICsgeCAqIHNpbs60z4Y7Ci0gICAgICByZXR1
cm4gWyBNYXRoLmF0YW4yKHkgKiBjb3POtM6zIC0gayAqIHNpbs60zrMsIHggKiBjb3POtM+GIC0g
eiAqIHNpbs60z4YpLCBkM19hc2luKGsgKiBjb3POtM6zICsgeSAqIHNpbs60zrMpIF07Ci0gICAg
fQotICAgIHJvdGF0aW9uLmludmVydCA9IGZ1bmN0aW9uKM67LCDPhikgewotICAgICAgdmFyIGNv
c8+GID0gTWF0aC5jb3Moz4YpLCB4ID0gTWF0aC5jb3MozrspICogY29zz4YsIHkgPSBNYXRoLnNp
bijOuykgKiBjb3PPhiwgeiA9IE1hdGguc2luKM+GKSwgayA9IHogKiBjb3POtM6zIC0geSAqIHNp
bs60zrM7Ci0gICAgICByZXR1cm4gWyBNYXRoLmF0YW4yKHkgKiBjb3POtM6zICsgeiAqIHNpbs60
zrMsIHggKiBjb3POtM+GICsgayAqIHNpbs60z4YpLCBkM19hc2luKGsgKiBjb3POtM+GIC0geCAq
IHNpbs60z4YpIF07Ci0gICAgfTsKLSAgICByZXR1cm4gcm90YXRpb247Ci0gIH0KLSAgZDMuZ2Vv
LmNpcmNsZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBvcmlnaW4gPSBbIDAsIDAgXSwgYW5nbGUs
IHByZWNpc2lvbiA9IDYsIGludGVycG9sYXRlOwotICAgIGZ1bmN0aW9uIGNpcmNsZSgpIHsKLSAg
ICAgIHZhciBjZW50ZXIgPSB0eXBlb2Ygb3JpZ2luID09PSAiZnVuY3Rpb24iID8gb3JpZ2luLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cykgOiBvcmlnaW4sIHJvdGF0ZSA9IGQzX2dlb19yb3RhdGlvbigt
Y2VudGVyWzBdICogZDNfcmFkaWFucywgLWNlbnRlclsxXSAqIGQzX3JhZGlhbnMsIDApLmludmVy
dCwgcmluZyA9IFtdOwotICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgewotICAgICAg
ICBwb2ludDogZnVuY3Rpb24oeCwgeSkgewotICAgICAgICAgIHJpbmcucHVzaCh4ID0gcm90YXRl
KHgsIHkpKTsKLSAgICAgICAgICB4WzBdICo9IGQzX2RlZ3JlZXMsIHhbMV0gKj0gZDNfZGVncmVl
czsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICByZXR1cm4gewotICAgICAgICB0eXBlOiAi
UG9seWdvbiIsCi0gICAgICAgIGNvb3JkaW5hdGVzOiBbIHJpbmcgXQotICAgICAgfTsKLSAgICB9
Ci0gICAgY2lyY2xlLm9yaWdpbiA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIG9yaWdpbjsKLSAgICAgIG9yaWdpbiA9IHg7Ci0gICAgICByZXR1cm4g
Y2lyY2xlOwotICAgIH07Ci0gICAgY2lyY2xlLmFuZ2xlID0gZnVuY3Rpb24oeCkgewotICAgICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYW5nbGU7Ci0gICAgICBpbnRlcnBvbGF0ZSA9
IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZSgoYW5nbGUgPSAreCkgKiBkM19yYWRpYW5zLCBwcmVj
aXNpb24gKiBkM19yYWRpYW5zKTsKLSAgICAgIHJldHVybiBjaXJjbGU7Ci0gICAgfTsKLSAgICBj
aXJjbGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gcHJlY2lzaW9uOwotICAgICAgaW50ZXJwb2xhdGUgPSBkM19nZW9fY2lyY2xl
SW50ZXJwb2xhdGUoYW5nbGUgKiBkM19yYWRpYW5zLCAocHJlY2lzaW9uID0gK18pICogZDNfcmFk
aWFucyk7Ci0gICAgICByZXR1cm4gY2lyY2xlOwotICAgIH07Ci0gICAgcmV0dXJuIGNpcmNsZS5h
bmdsZSg5MCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShyYWRp
dXMsIHByZWNpc2lvbikgewotICAgIHZhciBjciA9IE1hdGguY29zKHJhZGl1cyksIHNyID0gTWF0
aC5zaW4ocmFkaXVzKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oZnJvbSwgdG8sIGRpcmVjdGlvbiwg
bGlzdGVuZXIpIHsKLSAgICAgIHZhciBzdGVwID0gZGlyZWN0aW9uICogcHJlY2lzaW9uOwotICAg
ICAgaWYgKGZyb20gIT0gbnVsbCkgewotICAgICAgICBmcm9tID0gZDNfZ2VvX2NpcmNsZUFuZ2xl
KGNyLCBmcm9tKTsKLSAgICAgICAgdG8gPSBkM19nZW9fY2lyY2xlQW5nbGUoY3IsIHRvKTsKLSAg
ICAgICAgaWYgKGRpcmVjdGlvbiA+IDAgPyBmcm9tIDwgdG8gOiBmcm9tID4gdG8pIGZyb20gKz0g
ZGlyZWN0aW9uICogz4Q7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmcm9tID0gcmFkaXVzICsg
ZGlyZWN0aW9uICogz4Q7Ci0gICAgICAgIHRvID0gcmFkaXVzIC0gLjUgKiBzdGVwOwotICAgICAg
fQotICAgICAgZm9yICh2YXIgcG9pbnQsIHQgPSBmcm9tOyBkaXJlY3Rpb24gPiAwID8gdCA+IHRv
IDogdCA8IHRvOyB0IC09IHN0ZXApIHsKLSAgICAgICAgbGlzdGVuZXIucG9pbnQoKHBvaW50ID0g
ZDNfZ2VvX3NwaGVyaWNhbChbIGNyLCAtc3IgKiBNYXRoLmNvcyh0KSwgLXNyICogTWF0aC5zaW4o
dCkgXSkpWzBdLCBwb2ludFsxXSk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9fY2lyY2xlQW5nbGUoY3IsIHBvaW50KSB7Ci0gICAgdmFyIGEgPSBkM19nZW9fY2FydGVz
aWFuKHBvaW50KTsKLSAgICBhWzBdIC09IGNyOwotICAgIGQzX2dlb19jYXJ0ZXNpYW5Ob3JtYWxp
emUoYSk7Ci0gICAgdmFyIGFuZ2xlID0gZDNfYWNvcygtYVsxXSk7Ci0gICAgcmV0dXJuICgoLWFb
Ml0gPCAwID8gLWFuZ2xlIDogYW5nbGUpICsgMiAqIE1hdGguUEkgLSDOtSkgJSAoMiAqIE1hdGgu
UEkpOwotICB9Ci0gIGQzLmdlby5kaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHsKLSAgICB2YXIg
zpTOuyA9IChiWzBdIC0gYVswXSkgKiBkM19yYWRpYW5zLCDPhjAgPSBhWzFdICogZDNfcmFkaWFu
cywgz4YxID0gYlsxXSAqIGQzX3JhZGlhbnMsIHNpbs6UzrsgPSBNYXRoLnNpbijOlM67KSwgY29z
zpTOuyA9IE1hdGguY29zKM6UzrspLCBzaW7PhjAgPSBNYXRoLnNpbijPhjApLCBjb3PPhjAgPSBN
YXRoLmNvcyjPhjApLCBzaW7PhjEgPSBNYXRoLnNpbijPhjEpLCBjb3PPhjEgPSBNYXRoLmNvcyjP
hjEpLCB0OwotICAgIHJldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgodCA9IGNvc8+GMSAqIHNp
bs6UzrspICogdCArICh0ID0gY29zz4YwICogc2luz4YxIC0gc2luz4YwICogY29zz4YxICogY29z
zpTOuykgKiB0KSwgc2luz4YwICogc2luz4YxICsgY29zz4YwICogY29zz4YxICogY29zzpTOuyk7
Ci0gIH07Ci0gIGQzLmdlby5ncmF0aWN1bGUgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgeDEsIHgw
LCBYMSwgWDAsIHkxLCB5MCwgWTEsIFkwLCBkeCA9IDEwLCBkeSA9IGR4LCBEWCA9IDkwLCBEWSA9
IDM2MCwgeCwgeSwgWCwgWSwgcHJlY2lzaW9uID0gMi41OwotICAgIGZ1bmN0aW9uIGdyYXRpY3Vs
ZSgpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHR5cGU6ICJNdWx0aUxpbmVTdHJpbmciLAot
ICAgICAgICBjb29yZGluYXRlczogbGluZXMoKQotICAgICAgfTsKLSAgICB9Ci0gICAgZnVuY3Rp
b24gbGluZXMoKSB7Ci0gICAgICByZXR1cm4gZDMucmFuZ2UoTWF0aC5jZWlsKFgwIC8gRFgpICog
RFgsIFgxLCBEWCkubWFwKFgpLmNvbmNhdChkMy5yYW5nZShNYXRoLmNlaWwoWTAgLyBEWSkgKiBE
WSwgWTEsIERZKS5tYXAoWSkpLmNvbmNhdChkMy5yYW5nZShNYXRoLmNlaWwoeDAgLyBkeCkgKiBk
eCwgeDEsIGR4KS5maWx0ZXIoZnVuY3Rpb24oeCkgewotICAgICAgICByZXR1cm4gYWJzKHggJSBE
WCkgPiDOtTsKLSAgICAgIH0pLm1hcCh4KSkuY29uY2F0KGQzLnJhbmdlKE1hdGguY2VpbCh5MCAv
IGR5KSAqIGR5LCB5MSwgZHkpLmZpbHRlcihmdW5jdGlvbih5KSB7Ci0gICAgICAgIHJldHVybiBh
YnMoeSAlIERZKSA+IM61OwotICAgICAgfSkubWFwKHkpKTsKLSAgICB9Ci0gICAgZ3JhdGljdWxl
LmxpbmVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gbGluZXMoKS5tYXAoZnVuY3Rpb24o
Y29vcmRpbmF0ZXMpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICB0eXBlOiAiTGluZVN0
cmluZyIsCi0gICAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzCi0gICAgICAgIH07Ci0g
ICAgICB9KTsKLSAgICB9OwotICAgIGdyYXRpY3VsZS5vdXRsaW5lID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICByZXR1cm4gewotICAgICAgICB0eXBlOiAiUG9seWdvbiIsCi0gICAgICAgIGNvb3JkaW5h
dGVzOiBbIFgoWDApLmNvbmNhdChZKFkxKS5zbGljZSgxKSwgWChYMSkucmV2ZXJzZSgpLnNsaWNl
KDEpLCBZKFkwKS5yZXZlcnNlKCkuc2xpY2UoMSkpIF0KLSAgICAgIH07Ci0gICAgfTsKLSAgICBn
cmF0aWN1bGUuZXh0ZW50ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gZ3JhdGljdWxlLm1pbm9yRXh0ZW50KCk7Ci0gICAgICByZXR1cm4gZ3JhdGlj
dWxlLm1ham9yRXh0ZW50KF8pLm1pbm9yRXh0ZW50KF8pOwotICAgIH07Ci0gICAgZ3JhdGljdWxl
Lm1ham9yRXh0ZW50ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4gWyBbIFgwLCBZMCBdLCBbIFgxLCBZMSBdIF07Ci0gICAgICBYMCA9ICtfWzBdWzBd
LCBYMSA9ICtfWzFdWzBdOwotICAgICAgWTAgPSArX1swXVsxXSwgWTEgPSArX1sxXVsxXTsKLSAg
ICAgIGlmIChYMCA+IFgxKSBfID0gWDAsIFgwID0gWDEsIFgxID0gXzsKLSAgICAgIGlmIChZMCA+
IFkxKSBfID0gWTAsIFkwID0gWTEsIFkxID0gXzsKLSAgICAgIHJldHVybiBncmF0aWN1bGUucHJl
Y2lzaW9uKHByZWNpc2lvbik7Ci0gICAgfTsKLSAgICBncmF0aWN1bGUubWlub3JFeHRlbnQgPSBm
dW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbIFsgeDAs
IHkwIF0sIFsgeDEsIHkxIF0gXTsKLSAgICAgIHgwID0gK19bMF1bMF0sIHgxID0gK19bMV1bMF07
Ci0gICAgICB5MCA9ICtfWzBdWzFdLCB5MSA9ICtfWzFdWzFdOwotICAgICAgaWYgKHgwID4geDEp
IF8gPSB4MCwgeDAgPSB4MSwgeDEgPSBfOwotICAgICAgaWYgKHkwID4geTEpIF8gPSB5MCwgeTAg
PSB5MSwgeTEgPSBfOwotICAgICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9u
KTsKLSAgICB9OwotICAgIGdyYXRpY3VsZS5zdGVwID0gZnVuY3Rpb24oXykgewotICAgICAgaWYg
KCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3JhdGljdWxlLm1pbm9yU3RlcCgpOwotICAgICAg
cmV0dXJuIGdyYXRpY3VsZS5tYWpvclN0ZXAoXykubWlub3JTdGVwKF8pOwotICAgIH07Ci0gICAg
Z3JhdGljdWxlLm1ham9yU3RlcCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIFsgRFgsIERZIF07Ci0gICAgICBEWCA9ICtfWzBdLCBEWSA9ICtfWzFd
OwotICAgICAgcmV0dXJuIGdyYXRpY3VsZTsKLSAgICB9OwotICAgIGdyYXRpY3VsZS5taW5vclN0
ZXAgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBb
IGR4LCBkeSBdOwotICAgICAgZHggPSArX1swXSwgZHkgPSArX1sxXTsKLSAgICAgIHJldHVybiBn
cmF0aWN1bGU7Ci0gICAgfTsKLSAgICBncmF0aWN1bGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykg
ewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcHJlY2lzaW9uOwotICAgICAg
cHJlY2lzaW9uID0gK187Ci0gICAgICB4ID0gZDNfZ2VvX2dyYXRpY3VsZVgoeTAsIHkxLCA5MCk7
Ci0gICAgICB5ID0gZDNfZ2VvX2dyYXRpY3VsZVkoeDAsIHgxLCBwcmVjaXNpb24pOwotICAgICAg
WCA9IGQzX2dlb19ncmF0aWN1bGVYKFkwLCBZMSwgOTApOwotICAgICAgWSA9IGQzX2dlb19ncmF0
aWN1bGVZKFgwLCBYMSwgcHJlY2lzaW9uKTsKLSAgICAgIHJldHVybiBncmF0aWN1bGU7Ci0gICAg
fTsKLSAgICByZXR1cm4gZ3JhdGljdWxlLm1ham9yRXh0ZW50KFsgWyAtMTgwLCAtOTAgKyDOtSBd
LCBbIDE4MCwgOTAgLSDOtSBdIF0pLm1pbm9yRXh0ZW50KFsgWyAtMTgwLCAtODAgLSDOtSBdLCBb
IDE4MCwgODAgKyDOtSBdIF0pOwotICB9OwotICBmdW5jdGlvbiBkM19nZW9fZ3JhdGljdWxlWCh5
MCwgeTEsIGR5KSB7Ci0gICAgdmFyIHkgPSBkMy5yYW5nZSh5MCwgeTEgLSDOtSwgZHkpLmNvbmNh
dCh5MSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiB5Lm1hcChmdW5j
dGlvbih5KSB7Ci0gICAgICAgIHJldHVybiBbIHgsIHkgXTsKLSAgICAgIH0pOwotICAgIH07Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2dyYXRpY3VsZVkoeDAsIHgxLCBkeCkgewotICAgIHZhciB4
ID0gZDMucmFuZ2UoeDAsIHgxIC0gzrUsIGR4KS5jb25jYXQoeDEpOwotICAgIHJldHVybiBmdW5j
dGlvbih5KSB7Ci0gICAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24oeCkgewotICAgICAgICByZXR1
cm4gWyB4LCB5IF07Ci0gICAgICB9KTsKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NvdXJj
ZShkKSB7Ci0gICAgcmV0dXJuIGQuc291cmNlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RhcmdldChk
KSB7Ci0gICAgcmV0dXJuIGQudGFyZ2V0OwotICB9Ci0gIGQzLmdlby5ncmVhdEFyYyA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciBzb3VyY2UgPSBkM19zb3VyY2UsIHNvdXJjZV8sIHRhcmdldCA9IGQz
X3RhcmdldCwgdGFyZ2V0XzsKLSAgICBmdW5jdGlvbiBncmVhdEFyYygpIHsKLSAgICAgIHJldHVy
biB7Ci0gICAgICAgIHR5cGU6ICJMaW5lU3RyaW5nIiwKLSAgICAgICAgY29vcmRpbmF0ZXM6IFsg
c291cmNlXyB8fCBzb3VyY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGFyZ2V0XyB8fCB0YXJn
ZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSBdCi0gICAgICB9OwotICAgIH0KLSAgICBncmVhdEFy
Yy5kaXN0YW5jZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQzLmdlby5kaXN0YW5jZShz
b3VyY2VfIHx8IHNvdXJjZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0YXJnZXRfIHx8IHRhcmdl
dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKLSAgICB9OwotICAgIGdyZWF0QXJjLnNvdXJjZSA9
IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNvdXJj
ZTsKLSAgICAgIHNvdXJjZSA9IF8sIHNvdXJjZV8gPSB0eXBlb2YgXyA9PT0gImZ1bmN0aW9uIiA/
IG51bGwgOiBfOwotICAgICAgcmV0dXJuIGdyZWF0QXJjOwotICAgIH07Ci0gICAgZ3JlYXRBcmMu
dGFyZ2V0ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1
cm4gdGFyZ2V0OwotICAgICAgdGFyZ2V0ID0gXywgdGFyZ2V0XyA9IHR5cGVvZiBfID09PSAiZnVu
Y3Rpb24iID8gbnVsbCA6IF87Ci0gICAgICByZXR1cm4gZ3JlYXRBcmM7Ci0gICAgfTsKLSAgICBn
cmVhdEFyYy5wcmVjaXNpb24gPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBhcmd1bWVudHMu
bGVuZ3RoID8gZ3JlYXRBcmMgOiAwOwotICAgIH07Ci0gICAgcmV0dXJuIGdyZWF0QXJjOwotICB9
OwotICBkMy5nZW8uaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkgewotICAg
IHJldHVybiBkM19nZW9faW50ZXJwb2xhdGUoc291cmNlWzBdICogZDNfcmFkaWFucywgc291cmNl
WzFdICogZDNfcmFkaWFucywgdGFyZ2V0WzBdICogZDNfcmFkaWFucywgdGFyZ2V0WzFdICogZDNf
cmFkaWFucyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19pbnRlcnBvbGF0ZSh4MCwgeTAsIHgx
LCB5MSkgewotICAgIHZhciBjeTAgPSBNYXRoLmNvcyh5MCksIHN5MCA9IE1hdGguc2luKHkwKSwg
Y3kxID0gTWF0aC5jb3MoeTEpLCBzeTEgPSBNYXRoLnNpbih5MSksIGt4MCA9IGN5MCAqIE1hdGgu
Y29zKHgwKSwga3kwID0gY3kwICogTWF0aC5zaW4oeDApLCBreDEgPSBjeTEgKiBNYXRoLmNvcyh4
MSksIGt5MSA9IGN5MSAqIE1hdGguc2luKHgxKSwgZCA9IDIgKiBNYXRoLmFzaW4oTWF0aC5zcXJ0
KGQzX2hhdmVyc2luKHkxIC0geTApICsgY3kwICogY3kxICogZDNfaGF2ZXJzaW4oeDEgLSB4MCkp
KSwgayA9IDEgLyBNYXRoLnNpbihkKTsKLSAgICB2YXIgaW50ZXJwb2xhdGUgPSBkID8gZnVuY3Rp
b24odCkgewotICAgICAgdmFyIEIgPSBNYXRoLnNpbih0ICo9IGQpICogaywgQSA9IE1hdGguc2lu
KGQgLSB0KSAqIGssIHggPSBBICoga3gwICsgQiAqIGt4MSwgeSA9IEEgKiBreTAgKyBCICoga3kx
LCB6ID0gQSAqIHN5MCArIEIgKiBzeTE7Ci0gICAgICByZXR1cm4gWyBNYXRoLmF0YW4yKHksIHgp
ICogZDNfZGVncmVlcywgTWF0aC5hdGFuMih6LCBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSkpICog
ZDNfZGVncmVlcyBdOwotICAgIH0gOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBbIHgwICog
ZDNfZGVncmVlcywgeTAgKiBkM19kZWdyZWVzIF07Ci0gICAgfTsKLSAgICBpbnRlcnBvbGF0ZS5k
aXN0YW5jZSA9IGQ7Ci0gICAgcmV0dXJuIGludGVycG9sYXRlOwotICB9Ci0gIGQzLmdlby5sZW5n
dGggPSBmdW5jdGlvbihvYmplY3QpIHsKLSAgICBkM19nZW9fbGVuZ3RoU3VtID0gMDsKLSAgICBk
My5nZW8uc3RyZWFtKG9iamVjdCwgZDNfZ2VvX2xlbmd0aCk7Ci0gICAgcmV0dXJuIGQzX2dlb19s
ZW5ndGhTdW07Ci0gIH07Ci0gIHZhciBkM19nZW9fbGVuZ3RoU3VtOwotICB2YXIgZDNfZ2VvX2xl
bmd0aCA9IHsKLSAgICBzcGhlcmU6IGQzX25vb3AsCi0gICAgcG9pbnQ6IGQzX25vb3AsCi0gICAg
bGluZVN0YXJ0OiBkM19nZW9fbGVuZ3RoTGluZVN0YXJ0LAotICAgIGxpbmVFbmQ6IGQzX25vb3As
Ci0gICAgcG9seWdvblN0YXJ0OiBkM19ub29wLAotICAgIHBvbHlnb25FbmQ6IGQzX25vb3AKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfZ2VvX2xlbmd0aExpbmVTdGFydCgpIHsKLSAgICB2YXIgzrswLCBz
aW7PhjAsIGNvc8+GMDsKLSAgICBkM19nZW9fbGVuZ3RoLnBvaW50ID0gZnVuY3Rpb24ozrssIM+G
KSB7Ci0gICAgICDOuzAgPSDOuyAqIGQzX3JhZGlhbnMsIHNpbs+GMCA9IE1hdGguc2luKM+GICo9
IGQzX3JhZGlhbnMpLCBjb3PPhjAgPSBNYXRoLmNvcyjPhik7Ci0gICAgICBkM19nZW9fbGVuZ3Ro
LnBvaW50ID0gbmV4dFBvaW50OwotICAgIH07Ci0gICAgZDNfZ2VvX2xlbmd0aC5saW5lRW5kID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICBkM19nZW9fbGVuZ3RoLnBvaW50ID0gZDNfZ2VvX2xlbmd0aC5s
aW5lRW5kID0gZDNfbm9vcDsKLSAgICB9OwotICAgIGZ1bmN0aW9uIG5leHRQb2ludCjOuywgz4Yp
IHsKLSAgICAgIHZhciBzaW7PhiA9IE1hdGguc2luKM+GICo9IGQzX3JhZGlhbnMpLCBjb3PPhiA9
IE1hdGguY29zKM+GKSwgdCA9IGFicygozrsgKj0gZDNfcmFkaWFucykgLSDOuzApLCBjb3POlM67
ID0gTWF0aC5jb3ModCk7Ci0gICAgICBkM19nZW9fbGVuZ3RoU3VtICs9IE1hdGguYXRhbjIoTWF0
aC5zcXJ0KCh0ID0gY29zz4YgKiBNYXRoLnNpbih0KSkgKiB0ICsgKHQgPSBjb3PPhjAgKiBzaW7P
hiAtIHNpbs+GMCAqIGNvc8+GICogY29zzpTOuykgKiB0KSwgc2luz4YwICogc2luz4YgKyBjb3PP
hjAgKiBjb3PPhiAqIGNvc86UzrspOwotICAgICAgzrswID0gzrssIHNpbs+GMCA9IHNpbs+GLCBj
b3PPhjAgPSBjb3PPhjsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2F6aW11dGhhbChz
Y2FsZSwgYW5nbGUpIHsKLSAgICBmdW5jdGlvbiBhemltdXRoYWwozrssIM+GKSB7Ci0gICAgICB2
YXIgY29zzrsgPSBNYXRoLmNvcyjOuyksIGNvc8+GID0gTWF0aC5jb3Moz4YpLCBrID0gc2NhbGUo
Y29zzrsgKiBjb3PPhik7Ci0gICAgICByZXR1cm4gWyBrICogY29zz4YgKiBNYXRoLnNpbijOuyks
IGsgKiBNYXRoLnNpbijPhikgXTsKLSAgICB9Ci0gICAgYXppbXV0aGFsLmludmVydCA9IGZ1bmN0
aW9uKHgsIHkpIHsKLSAgICAgIHZhciDPgSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KSwgYyA9
IGFuZ2xlKM+BKSwgc2luYyA9IE1hdGguc2luKGMpLCBjb3NjID0gTWF0aC5jb3MoYyk7Ci0gICAg
ICByZXR1cm4gWyBNYXRoLmF0YW4yKHggKiBzaW5jLCDPgSAqIGNvc2MpLCBNYXRoLmFzaW4oz4Eg
JiYgeSAqIHNpbmMgLyDPgSkgXTsKLSAgICB9OwotICAgIHJldHVybiBhemltdXRoYWw7Ci0gIH0K
LSAgdmFyIGQzX2dlb19hemltdXRoYWxFcXVhbEFyZWEgPSBkM19nZW9fYXppbXV0aGFsKGZ1bmN0
aW9uKGNvc867Y29zz4YpIHsKLSAgICByZXR1cm4gTWF0aC5zcXJ0KDIgLyAoMSArIGNvc867Y29z
z4YpKTsKLSAgfSwgZnVuY3Rpb24oz4EpIHsKLSAgICByZXR1cm4gMiAqIE1hdGguYXNpbijPgSAv
IDIpOwotICB9KTsKLSAgKGQzLmdlby5hemltdXRoYWxFcXVhbEFyZWEgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNfZ2VvX2F6aW11dGhhbEVxdWFsQXJlYSk7
Ci0gIH0pLnJhdyA9IGQzX2dlb19hemltdXRoYWxFcXVhbEFyZWE7Ci0gIHZhciBkM19nZW9fYXpp
bXV0aGFsRXF1aWRpc3RhbnQgPSBkM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKGNvc867Y29zz4Yp
IHsKLSAgICB2YXIgYyA9IE1hdGguYWNvcyhjb3POu2Nvc8+GKTsKLSAgICByZXR1cm4gYyAmJiBj
IC8gTWF0aC5zaW4oYyk7Ci0gIH0sIGQzX2lkZW50aXR5KTsKLSAgKGQzLmdlby5hemltdXRoYWxF
cXVpZGlzdGFudCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19nZW9fcHJvamVjdGlvbihk
M19nZW9fYXppbXV0aGFsRXF1aWRpc3RhbnQpOwotICB9KS5yYXcgPSBkM19nZW9fYXppbXV0aGFs
RXF1aWRpc3RhbnQ7Ci0gIGZ1bmN0aW9uIGQzX2dlb19jb25pY0NvbmZvcm1hbCjPhjAsIM+GMSkg
ewotICAgIHZhciBjb3PPhjAgPSBNYXRoLmNvcyjPhjApLCB0ID0gZnVuY3Rpb24oz4YpIHsKLSAg
ICAgIHJldHVybiBNYXRoLnRhbijPgCAvIDQgKyDPhiAvIDIpOwotICAgIH0sIG4gPSDPhjAgPT09
IM+GMSA/IE1hdGguc2luKM+GMCkgOiBNYXRoLmxvZyhjb3PPhjAgLyBNYXRoLmNvcyjPhjEpKSAv
IE1hdGgubG9nKHQoz4YxKSAvIHQoz4YwKSksIEYgPSBjb3PPhjAgKiBNYXRoLnBvdyh0KM+GMCks
IG4pIC8gbjsKLSAgICBpZiAoIW4pIHJldHVybiBkM19nZW9fbWVyY2F0b3I7Ci0gICAgZnVuY3Rp
b24gZm9yd2FyZCjOuywgz4YpIHsKLSAgICAgIGlmIChGID4gMCkgewotICAgICAgICBpZiAoz4Yg
PCAtaGFsZs+AICsgzrUpIM+GID0gLWhhbGbPgCArIM61OwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKM+GID4gaGFsZs+AIC0gzrUpIM+GID0gaGFsZs+AIC0gzrU7Ci0gICAgICB9Ci0gICAg
ICB2YXIgz4EgPSBGIC8gTWF0aC5wb3codCjPhiksIG4pOwotICAgICAgcmV0dXJuIFsgz4EgKiBN
YXRoLnNpbihuICogzrspLCBGIC0gz4EgKiBNYXRoLmNvcyhuICogzrspIF07Ci0gICAgfQotICAg
IGZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkgewotICAgICAgdmFyIM+BMF95ID0gRiAt
IHksIM+BID0gZDNfc2duKG4pICogTWF0aC5zcXJ0KHggKiB4ICsgz4EwX3kgKiDPgTBfeSk7Ci0g
ICAgICByZXR1cm4gWyBNYXRoLmF0YW4yKHgsIM+BMF95KSAvIG4sIDIgKiBNYXRoLmF0YW4oTWF0
aC5wb3coRiAvIM+BLCAxIC8gbikpIC0gaGFsZs+AIF07Ci0gICAgfTsKLSAgICByZXR1cm4gZm9y
d2FyZDsKLSAgfQotICAoZDMuZ2VvLmNvbmljQ29uZm9ybWFsID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIGQzX2dlb19jb25pYyhkM19nZW9fY29uaWNDb25mb3JtYWwpOwotICB9KS5yYXcgPSBk
M19nZW9fY29uaWNDb25mb3JtYWw7Ci0gIGZ1bmN0aW9uIGQzX2dlb19jb25pY0VxdWlkaXN0YW50
KM+GMCwgz4YxKSB7Ci0gICAgdmFyIGNvc8+GMCA9IE1hdGguY29zKM+GMCksIG4gPSDPhjAgPT09
IM+GMSA/IE1hdGguc2luKM+GMCkgOiAoY29zz4YwIC0gTWF0aC5jb3Moz4YxKSkgLyAoz4YxIC0g
z4YwKSwgRyA9IGNvc8+GMCAvIG4gKyDPhjA7Ci0gICAgaWYgKGFicyhuKSA8IM61KSByZXR1cm4g
ZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcjsKLSAgICBmdW5jdGlvbiBmb3J3YXJkKM67LCDPhikgewot
ICAgICAgdmFyIM+BID0gRyAtIM+GOwotICAgICAgcmV0dXJuIFsgz4EgKiBNYXRoLnNpbihuICog
zrspLCBHIC0gz4EgKiBNYXRoLmNvcyhuICogzrspIF07Ci0gICAgfQotICAgIGZvcndhcmQuaW52
ZXJ0ID0gZnVuY3Rpb24oeCwgeSkgewotICAgICAgdmFyIM+BMF95ID0gRyAtIHk7Ci0gICAgICBy
ZXR1cm4gWyBNYXRoLmF0YW4yKHgsIM+BMF95KSAvIG4sIEcgLSBkM19zZ24obikgKiBNYXRoLnNx
cnQoeCAqIHggKyDPgTBfeSAqIM+BMF95KSBdOwotICAgIH07Ci0gICAgcmV0dXJuIGZvcndhcmQ7
Ci0gIH0KLSAgKGQzLmdlby5jb25pY0VxdWlkaXN0YW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIGQzX2dlb19jb25pYyhkM19nZW9fY29uaWNFcXVpZGlzdGFudCk7Ci0gIH0pLnJhdyA9IGQz
X2dlb19jb25pY0VxdWlkaXN0YW50OwotICB2YXIgZDNfZ2VvX2dub21vbmljID0gZDNfZ2VvX2F6
aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+GKSB7Ci0gICAgcmV0dXJuIDEgLyBjb3POu2Nvc8+G
OwotICB9LCBNYXRoLmF0YW4pOwotICAoZDMuZ2VvLmdub21vbmljID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19nbm9tb25pYyk7Ci0gIH0pLnJhdyA9
IGQzX2dlb19nbm9tb25pYzsKLSAgZnVuY3Rpb24gZDNfZ2VvX21lcmNhdG9yKM67LCDPhikgewot
ICAgIHJldHVybiBbIM67LCBNYXRoLmxvZyhNYXRoLnRhbijPgCAvIDQgKyDPhiAvIDIpKSBdOwot
ICB9Ci0gIGQzX2dlb19tZXJjYXRvci5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7Ci0gICAgcmV0
dXJuIFsgeCwgMiAqIE1hdGguYXRhbihNYXRoLmV4cCh5KSkgLSBoYWxmz4AgXTsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfZ2VvX21lcmNhdG9yUHJvamVjdGlvbihwcm9qZWN0KSB7Ci0gICAgdmFyIG0g
PSBkM19nZW9fcHJvamVjdGlvbihwcm9qZWN0KSwgc2NhbGUgPSBtLnNjYWxlLCB0cmFuc2xhdGUg
PSBtLnRyYW5zbGF0ZSwgY2xpcEV4dGVudCA9IG0uY2xpcEV4dGVudCwgY2xpcEF1dG87Ci0gICAg
bS5zY2FsZSA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHYgPSBzY2FsZS5hcHBseShtLCBhcmd1
bWVudHMpOwotICAgICAgcmV0dXJuIHYgPT09IG0gPyBjbGlwQXV0byA/IG0uY2xpcEV4dGVudChu
dWxsKSA6IG0gOiB2OwotICAgIH07Ci0gICAgbS50cmFuc2xhdGUgPSBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciB2ID0gdHJhbnNsYXRlLmFwcGx5KG0sIGFyZ3VtZW50cyk7Ci0gICAgICByZXR1cm4g
diA9PT0gbSA/IGNsaXBBdXRvID8gbS5jbGlwRXh0ZW50KG51bGwpIDogbSA6IHY7Ci0gICAgfTsK
LSAgICBtLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7Ci0gICAgICB2YXIgdiA9IGNsaXBFeHRl
bnQuYXBwbHkobSwgYXJndW1lbnRzKTsKLSAgICAgIGlmICh2ID09PSBtKSB7Ci0gICAgICAgIGlm
IChjbGlwQXV0byA9IF8gPT0gbnVsbCkgewotICAgICAgICAgIHZhciBrID0gz4AgKiBzY2FsZSgp
LCB0ID0gdHJhbnNsYXRlKCk7Ci0gICAgICAgICAgY2xpcEV4dGVudChbIFsgdFswXSAtIGssIHRb
MV0gLSBrIF0sIFsgdFswXSArIGssIHRbMV0gKyBrIF0gXSk7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSBpZiAoY2xpcEF1dG8pIHsKLSAgICAgICAgdiA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gdjsKLSAgICB9OwotICAgIHJldHVybiBtLmNsaXBFeHRlbnQobnVsbCk7Ci0gIH0KLSAg
KGQzLmdlby5tZXJjYXRvciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19nZW9fbWVyY2F0
b3JQcm9qZWN0aW9uKGQzX2dlb19tZXJjYXRvcik7Ci0gIH0pLnJhdyA9IGQzX2dlb19tZXJjYXRv
cjsKLSAgdmFyIGQzX2dlb19vcnRob2dyYXBoaWMgPSBkM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiAxOwotICB9LCBNYXRoLmFzaW4pOwotICAoZDMuZ2VvLm9ydGhvZ3Jh
cGhpYyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19nZW9f
b3J0aG9ncmFwaGljKTsKLSAgfSkucmF3ID0gZDNfZ2VvX29ydGhvZ3JhcGhpYzsKLSAgdmFyIGQz
X2dlb19zdGVyZW9ncmFwaGljID0gZDNfZ2VvX2F6aW11dGhhbChmdW5jdGlvbihjb3POu2Nvc8+G
KSB7Ci0gICAgcmV0dXJuIDEgLyAoMSArIGNvc867Y29zz4YpOwotICB9LCBmdW5jdGlvbijPgSkg
ewotICAgIHJldHVybiAyICogTWF0aC5hdGFuKM+BKTsKLSAgfSk7Ci0gIChkMy5nZW8uc3RlcmVv
Z3JhcGhpYyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19nZW9fcHJvamVjdGlvbihkM19n
ZW9fc3RlcmVvZ3JhcGhpYyk7Ci0gIH0pLnJhdyA9IGQzX2dlb19zdGVyZW9ncmFwaGljOwotICBm
dW5jdGlvbiBkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yKM67LCDPhikgewotICAgIHJldHVybiBb
IE1hdGgubG9nKE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMikpLCAtzrsgXTsKLSAgfQotICBkM19n
ZW9fdHJhbnN2ZXJzZU1lcmNhdG9yLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICByZXR1
cm4gWyAteSwgMiAqIE1hdGguYXRhbihNYXRoLmV4cCh4KSkgLSBoYWxmz4AgXTsKLSAgfTsKLSAg
KGQzLmdlby50cmFuc3ZlcnNlTWVyY2F0b3IgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcHJvamVj
dGlvbiA9IGQzX2dlb19tZXJjYXRvclByb2plY3Rpb24oZDNfZ2VvX3RyYW5zdmVyc2VNZXJjYXRv
ciksIGNlbnRlciA9IHByb2plY3Rpb24uY2VudGVyLCByb3RhdGUgPSBwcm9qZWN0aW9uLnJvdGF0
ZTsKLSAgICBwcm9qZWN0aW9uLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVybiBf
ID8gY2VudGVyKFsgLV9bMV0sIF9bMF0gXSkgOiAoXyA9IGNlbnRlcigpLCBbIF9bMV0sIC1fWzBd
IF0pOwotICAgIH07Ci0gICAgcHJvamVjdGlvbi5yb3RhdGUgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICByZXR1cm4gXyA/IHJvdGF0ZShbIF9bMF0sIF9bMV0sIF8ubGVuZ3RoID4gMiA/IF9bMl0gKyA5
MCA6IDkwIF0pIDogKF8gPSByb3RhdGUoKSwgCi0gICAgICBbIF9bMF0sIF9bMV0sIF9bMl0gLSA5
MCBdKTsKLSAgICB9OwotICAgIHJldHVybiByb3RhdGUoWyAwLCAwLCA5MCBdKTsKLSAgfSkucmF3
ID0gZDNfZ2VvX3RyYW5zdmVyc2VNZXJjYXRvcjsKLSAgZDMuZ2VvbSA9IHt9OwotICBmdW5jdGlv
biBkM19nZW9tX3BvaW50WChkKSB7Ci0gICAgcmV0dXJuIGRbMF07Ci0gIH0KLSAgZnVuY3Rpb24g
ZDNfZ2VvbV9wb2ludFkoZCkgewotICAgIHJldHVybiBkWzFdOwotICB9Ci0gIGQzLmdlb20uaHVs
bCA9IGZ1bmN0aW9uKHZlcnRpY2VzKSB7Ci0gICAgdmFyIHggPSBkM19nZW9tX3BvaW50WCwgeSA9
IGQzX2dlb21fcG9pbnRZOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaHVsbCh2
ZXJ0aWNlcyk7Ci0gICAgZnVuY3Rpb24gaHVsbChkYXRhKSB7Ci0gICAgICBpZiAoZGF0YS5sZW5n
dGggPCAzKSByZXR1cm4gW107Ci0gICAgICB2YXIgZnggPSBkM19mdW5jdG9yKHgpLCBmeSA9IGQz
X2Z1bmN0b3IoeSksIGksIG4gPSBkYXRhLmxlbmd0aCwgcG9pbnRzID0gW10sIGZsaXBwZWRQb2lu
dHMgPSBbXTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcG9pbnRz
LnB1c2goWyArZnguY2FsbCh0aGlzLCBkYXRhW2ldLCBpKSwgK2Z5LmNhbGwodGhpcywgZGF0YVtp
XSwgaSksIGkgXSk7Ci0gICAgICB9Ci0gICAgICBwb2ludHMuc29ydChkM19nZW9tX2h1bGxPcmRl
cik7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBmbGlwcGVkUG9pbnRzLnB1c2goWyBw
b2ludHNbaV1bMF0sIC1wb2ludHNbaV1bMV0gXSk7Ci0gICAgICB2YXIgdXBwZXIgPSBkM19nZW9t
X2h1bGxVcHBlcihwb2ludHMpLCBsb3dlciA9IGQzX2dlb21faHVsbFVwcGVyKGZsaXBwZWRQb2lu
dHMpOwotICAgICAgdmFyIHNraXBMZWZ0ID0gbG93ZXJbMF0gPT09IHVwcGVyWzBdLCBza2lwUmln
aHQgPSBsb3dlcltsb3dlci5sZW5ndGggLSAxXSA9PT0gdXBwZXJbdXBwZXIubGVuZ3RoIC0gMV0s
IHBvbHlnb24gPSBbXTsKLSAgICAgIGZvciAoaSA9IHVwcGVyLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSBwb2x5Z29uLnB1c2goZGF0YVtwb2ludHNbdXBwZXJbaV1dWzJdXSk7Ci0gICAgICBmb3Ig
KGkgPSArc2tpcExlZnQ7IGkgPCBsb3dlci5sZW5ndGggLSBza2lwUmlnaHQ7ICsraSkgcG9seWdv
bi5wdXNoKGRhdGFbcG9pbnRzW2xvd2VyW2ldXVsyXV0pOwotICAgICAgcmV0dXJuIHBvbHlnb247
Ci0gICAgfQotICAgIGh1bGwueCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVybiBhcmd1bWVu
dHMubGVuZ3RoID8gKHggPSBfLCBodWxsKSA6IHg7Ci0gICAgfTsKLSAgICBodWxsLnkgPSBmdW5j
dGlvbihfKSB7Ci0gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gXywgaHVsbCkg
OiB5OwotICAgIH07Ci0gICAgcmV0dXJuIGh1bGw7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb21f
aHVsbFVwcGVyKHBvaW50cykgewotICAgIHZhciBuID0gcG9pbnRzLmxlbmd0aCwgaHVsbCA9IFsg
MCwgMSBdLCBocyA9IDI7Ci0gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBuOyBpKyspIHsKLSAgICAg
IHdoaWxlIChocyA+IDEgJiYgZDNfY3Jvc3MyZChwb2ludHNbaHVsbFtocyAtIDJdXSwgcG9pbnRz
W2h1bGxbaHMgLSAxXV0sIHBvaW50c1tpXSkgPD0gMCkgLS1oczsKLSAgICAgIGh1bGxbaHMrK10g
PSBpOwotICAgIH0KLSAgICByZXR1cm4gaHVsbC5zbGljZSgwLCBocyk7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfZ2VvbV9odWxsT3JkZXIoYSwgYikgewotICAgIHJldHVybiBhWzBdIC0gYlswXSB8fCBh
WzFdIC0gYlsxXTsKLSAgfQotICBkMy5nZW9tLnBvbHlnb24gPSBmdW5jdGlvbihjb29yZGluYXRl
cykgewotICAgIGQzX3N1YmNsYXNzKGNvb3JkaW5hdGVzLCBkM19nZW9tX3BvbHlnb25Qcm90b3R5
cGUpOwotICAgIHJldHVybiBjb29yZGluYXRlczsKLSAgfTsKLSAgdmFyIGQzX2dlb21fcG9seWdv
blByb3RvdHlwZSA9IGQzLmdlb20ucG9seWdvbi5wcm90b3R5cGUgPSBbXTsKLSAgZDNfZ2VvbV9w
b2x5Z29uUHJvdG90eXBlLmFyZWEgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgaSA9IC0xLCBuID0g
dGhpcy5sZW5ndGgsIGEsIGIgPSB0aGlzW24gLSAxXSwgYXJlYSA9IDA7Ci0gICAgd2hpbGUgKCsr
aSA8IG4pIHsKLSAgICAgIGEgPSBiOwotICAgICAgYiA9IHRoaXNbaV07Ci0gICAgICBhcmVhICs9
IGFbMV0gKiBiWzBdIC0gYVswXSAqIGJbMV07Ci0gICAgfQotICAgIHJldHVybiBhcmVhICogLjU7
Ci0gIH07Ci0gIGQzX2dlb21fcG9seWdvblByb3RvdHlwZS5jZW50cm9pZCA9IGZ1bmN0aW9uKGsp
IHsKLSAgICB2YXIgaSA9IC0xLCBuID0gdGhpcy5sZW5ndGgsIHggPSAwLCB5ID0gMCwgYSwgYiA9
IHRoaXNbbiAtIDFdLCBjOwotICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgayA9IC0xIC8gKDYg
KiB0aGlzLmFyZWEoKSk7Ci0gICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgIGEgPSBiOwotICAg
ICAgYiA9IHRoaXNbaV07Ci0gICAgICBjID0gYVswXSAqIGJbMV0gLSBiWzBdICogYVsxXTsKLSAg
ICAgIHggKz0gKGFbMF0gKyBiWzBdKSAqIGM7Ci0gICAgICB5ICs9IChhWzFdICsgYlsxXSkgKiBj
OwotICAgIH0KLSAgICByZXR1cm4gWyB4ICogaywgeSAqIGsgXTsKLSAgfTsKLSAgZDNfZ2VvbV9w
b2x5Z29uUHJvdG90eXBlLmNsaXAgPSBmdW5jdGlvbihzdWJqZWN0KSB7Ci0gICAgdmFyIGlucHV0
LCBjbG9zZWQgPSBkM19nZW9tX3BvbHlnb25DbG9zZWQoc3ViamVjdCksIGkgPSAtMSwgbiA9IHRo
aXMubGVuZ3RoIC0gZDNfZ2VvbV9wb2x5Z29uQ2xvc2VkKHRoaXMpLCBqLCBtLCBhID0gdGhpc1tu
IC0gMV0sIGIsIGMsIGQ7Ci0gICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgIGlucHV0ID0gc3Vi
amVjdC5zbGljZSgpOwotICAgICAgc3ViamVjdC5sZW5ndGggPSAwOwotICAgICAgYiA9IHRoaXNb
aV07Ci0gICAgICBjID0gaW5wdXRbKG0gPSBpbnB1dC5sZW5ndGggLSBjbG9zZWQpIC0gMV07Ci0g
ICAgICBqID0gLTE7Ci0gICAgICB3aGlsZSAoKytqIDwgbSkgewotICAgICAgICBkID0gaW5wdXRb
al07Ci0gICAgICAgIGlmIChkM19nZW9tX3BvbHlnb25JbnNpZGUoZCwgYSwgYikpIHsKLSAgICAg
ICAgICBpZiAoIWQzX2dlb21fcG9seWdvbkluc2lkZShjLCBhLCBiKSkgewotICAgICAgICAgICAg
c3ViamVjdC5wdXNoKGQzX2dlb21fcG9seWdvbkludGVyc2VjdChjLCBkLCBhLCBiKSk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIHN1YmplY3QucHVzaChkKTsKLSAgICAgICAgfSBlbHNlIGlmIChk
M19nZW9tX3BvbHlnb25JbnNpZGUoYywgYSwgYikpIHsKLSAgICAgICAgICBzdWJqZWN0LnB1c2go
ZDNfZ2VvbV9wb2x5Z29uSW50ZXJzZWN0KGMsIGQsIGEsIGIpKTsKLSAgICAgICAgfQotICAgICAg
ICBjID0gZDsKLSAgICAgIH0KLSAgICAgIGlmIChjbG9zZWQpIHN1YmplY3QucHVzaChzdWJqZWN0
WzBdKTsKLSAgICAgIGEgPSBiOwotICAgIH0KLSAgICByZXR1cm4gc3ViamVjdDsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfZ2VvbV9wb2x5Z29uSW5zaWRlKHAsIGEsIGIpIHsKLSAgICByZXR1cm4gKGJb
MF0gLSBhWzBdKSAqIChwWzFdIC0gYVsxXSkgPCAoYlsxXSAtIGFbMV0pICogKHBbMF0gLSBhWzBd
KTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3BvbHlnb25JbnRlcnNlY3QoYywgZCwgYSwgYikg
ewotICAgIHZhciB4MSA9IGNbMF0sIHgzID0gYVswXSwgeDIxID0gZFswXSAtIHgxLCB4NDMgPSBi
WzBdIC0geDMsIHkxID0gY1sxXSwgeTMgPSBhWzFdLCB5MjEgPSBkWzFdIC0geTEsIHk0MyA9IGJb
MV0gLSB5MywgdWEgPSAoeDQzICogKHkxIC0geTMpIC0geTQzICogKHgxIC0geDMpKSAvICh5NDMg
KiB4MjEgLSB4NDMgKiB5MjEpOwotICAgIHJldHVybiBbIHgxICsgdWEgKiB4MjEsIHkxICsgdWEg
KiB5MjEgXTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3BvbHlnb25DbG9zZWQoY29vcmRpbmF0
ZXMpIHsKLSAgICB2YXIgYSA9IGNvb3JkaW5hdGVzWzBdLCBiID0gY29vcmRpbmF0ZXNbY29vcmRp
bmF0ZXMubGVuZ3RoIC0gMV07Ci0gICAgcmV0dXJuICEoYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJb
MV0pOwotICB9Ci0gIHZhciBkM19nZW9tX3Zvcm9ub2lFZGdlcywgZDNfZ2VvbV92b3Jvbm9pQ2Vs
bHMsIGQzX2dlb21fdm9yb25vaUJlYWNoZXMsIGQzX2dlb21fdm9yb25vaUJlYWNoUG9vbCA9IFtd
LCBkM19nZW9tX3Zvcm9ub2lGaXJzdENpcmNsZSwgZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcywgZDNf
Z2VvbV92b3Jvbm9pQ2lyY2xlUG9vbCA9IFtdOwotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lC
ZWFjaCgpIHsKLSAgICBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja05vZGUodGhpcyk7Ci0gICAgdGhp
cy5lZGdlID0gdGhpcy5zaXRlID0gdGhpcy5jaXJjbGUgPSBudWxsOwotICB9Ci0gIGZ1bmN0aW9u
IGQzX2dlb21fdm9yb25vaUNyZWF0ZUJlYWNoKHNpdGUpIHsKLSAgICB2YXIgYmVhY2ggPSBkM19n
ZW9tX3Zvcm9ub2lCZWFjaFBvb2wucG9wKCkgfHwgbmV3IGQzX2dlb21fdm9yb25vaUJlYWNoKCk7
Ci0gICAgYmVhY2guc2l0ZSA9IHNpdGU7Ci0gICAgcmV0dXJuIGJlYWNoOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2dlb21fdm9yb25vaURldGFjaEJlYWNoKGJlYWNoKSB7Ci0gICAgZDNfZ2VvbV92b3Jv
bm9pRGV0YWNoQ2lyY2xlKGJlYWNoKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lCZWFjaGVzLnJlbW92
ZShiZWFjaCk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQmVhY2hQb29sLnB1c2goYmVhY2gpOwotICAg
IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrTm9kZShiZWFjaCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
Z2VvbV92b3Jvbm9pUmVtb3ZlQmVhY2goYmVhY2gpIHsKLSAgICB2YXIgY2lyY2xlID0gYmVhY2gu
Y2lyY2xlLCB4ID0gY2lyY2xlLngsIHkgPSBjaXJjbGUuY3ksIHZlcnRleCA9IHsKLSAgICAgIHg6
IHgsCi0gICAgICB5OiB5Ci0gICAgfSwgcHJldmlvdXMgPSBiZWFjaC5QLCBuZXh0ID0gYmVhY2gu
TiwgZGlzYXBwZWFyaW5nID0gWyBiZWFjaCBdOwotICAgIGQzX2dlb21fdm9yb25vaURldGFjaEJl
YWNoKGJlYWNoKTsKLSAgICB2YXIgbEFyYyA9IHByZXZpb3VzOwotICAgIHdoaWxlIChsQXJjLmNp
cmNsZSAmJiBhYnMoeCAtIGxBcmMuY2lyY2xlLngpIDwgzrUgJiYgYWJzKHkgLSBsQXJjLmNpcmNs
ZS5jeSkgPCDOtSkgewotICAgICAgcHJldmlvdXMgPSBsQXJjLlA7Ci0gICAgICBkaXNhcHBlYXJp
bmcudW5zaGlmdChsQXJjKTsKLSAgICAgIGQzX2dlb21fdm9yb25vaURldGFjaEJlYWNoKGxBcmMp
OwotICAgICAgbEFyYyA9IHByZXZpb3VzOwotICAgIH0KLSAgICBkaXNhcHBlYXJpbmcudW5zaGlm
dChsQXJjKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUobEFyYyk7Ci0gICAgdmFy
IHJBcmMgPSBuZXh0OwotICAgIHdoaWxlIChyQXJjLmNpcmNsZSAmJiBhYnMoeCAtIHJBcmMuY2ly
Y2xlLngpIDwgzrUgJiYgYWJzKHkgLSByQXJjLmNpcmNsZS5jeSkgPCDOtSkgewotICAgICAgbmV4
dCA9IHJBcmMuTjsKLSAgICAgIGRpc2FwcGVhcmluZy5wdXNoKHJBcmMpOwotICAgICAgZDNfZ2Vv
bV92b3Jvbm9pRGV0YWNoQmVhY2gockFyYyk7Ci0gICAgICByQXJjID0gbmV4dDsKLSAgICB9Ci0g
ICAgZGlzYXBwZWFyaW5nLnB1c2gockFyYyk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2ly
Y2xlKHJBcmMpOwotICAgIHZhciBuQXJjcyA9IGRpc2FwcGVhcmluZy5sZW5ndGgsIGlBcmM7Ci0g
ICAgZm9yIChpQXJjID0gMTsgaUFyYyA8IG5BcmNzOyArK2lBcmMpIHsKLSAgICAgIHJBcmMgPSBk
aXNhcHBlYXJpbmdbaUFyY107Ci0gICAgICBsQXJjID0gZGlzYXBwZWFyaW5nW2lBcmMgLSAxXTsK
LSAgICAgIGQzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQockFyYy5lZGdlLCBsQXJjLnNpdGUsIHJB
cmMuc2l0ZSwgdmVydGV4KTsKLSAgICB9Ci0gICAgbEFyYyA9IGRpc2FwcGVhcmluZ1swXTsKLSAg
ICByQXJjID0gZGlzYXBwZWFyaW5nW25BcmNzIC0gMV07Ci0gICAgckFyYy5lZGdlID0gZDNfZ2Vv
bV92b3Jvbm9pQ3JlYXRlRWRnZShsQXJjLnNpdGUsIHJBcmMuc2l0ZSwgbnVsbCwgdmVydGV4KTsK
LSAgICBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7Ci0gICAgZDNfZ2VvbV92b3Jv
bm9pQXR0YWNoQ2lyY2xlKHJBcmMpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUFk
ZEJlYWNoKHNpdGUpIHsKLSAgICB2YXIgeCA9IHNpdGUueCwgZGlyZWN0cml4ID0gc2l0ZS55LCBs
QXJjLCByQXJjLCBkeGwsIGR4ciwgbm9kZSA9IGQzX2dlb21fdm9yb25vaUJlYWNoZXMuXzsKLSAg
ICB3aGlsZSAobm9kZSkgewotICAgICAgZHhsID0gZDNfZ2VvbV92b3Jvbm9pTGVmdEJyZWFrUG9p
bnQobm9kZSwgZGlyZWN0cml4KSAtIHg7Ci0gICAgICBpZiAoZHhsID4gzrUpIG5vZGUgPSBub2Rl
Lkw7IGVsc2UgewotICAgICAgICBkeHIgPSB4IC0gZDNfZ2VvbV92b3Jvbm9pUmlnaHRCcmVha1Bv
aW50KG5vZGUsIGRpcmVjdHJpeCk7Ci0gICAgICAgIGlmIChkeHIgPiDOtSkgewotICAgICAgICAg
IGlmICghbm9kZS5SKSB7Ci0gICAgICAgICAgICBsQXJjID0gbm9kZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBub2RlID0gbm9kZS5SOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGlmIChkeGwgPiAtzrUpIHsKLSAgICAgICAgICAgIGxBcmMgPSBub2Rl
LlA7Ci0gICAgICAgICAgICByQXJjID0gbm9kZTsKLSAgICAgICAgICB9IGVsc2UgaWYgKGR4ciA+
IC3OtSkgewotICAgICAgICAgICAgbEFyYyA9IG5vZGU7Ci0gICAgICAgICAgICByQXJjID0gbm9k
ZS5OOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsQXJjID0gckFyYyA9IG5vZGU7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICAgIHZhciBuZXdBcmMgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVCZWFjaChzaXRlKTsKLSAg
ICBkM19nZW9tX3Zvcm9ub2lCZWFjaGVzLmluc2VydChsQXJjLCBuZXdBcmMpOwotICAgIGlmICgh
bEFyYyAmJiAhckFyYykgcmV0dXJuOwotICAgIGlmIChsQXJjID09PSByQXJjKSB7Ci0gICAgICBk
M19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUobEFyYyk7Ci0gICAgICByQXJjID0gZDNfZ2VvbV92
b3Jvbm9pQ3JlYXRlQmVhY2gobEFyYy5zaXRlKTsKLSAgICAgIGQzX2dlb21fdm9yb25vaUJlYWNo
ZXMuaW5zZXJ0KG5ld0FyYywgckFyYyk7Ci0gICAgICBuZXdBcmMuZWRnZSA9IHJBcmMuZWRnZSA9
IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobEFyYy5zaXRlLCBuZXdBcmMuc2l0ZSk7Ci0gICAg
ICBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7Ci0gICAgICBkM19nZW9tX3Zvcm9u
b2lBdHRhY2hDaXJjbGUockFyYyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghckFy
YykgewotICAgICAgbmV3QXJjLmVkZ2UgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVFZGdlKGxBcmMu
c2l0ZSwgbmV3QXJjLnNpdGUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkM19nZW9tX3Zv
cm9ub2lEZXRhY2hDaXJjbGUobEFyYyk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQ2lyY2xl
KHJBcmMpOwotICAgIHZhciBsU2l0ZSA9IGxBcmMuc2l0ZSwgYXggPSBsU2l0ZS54LCBheSA9IGxT
aXRlLnksIGJ4ID0gc2l0ZS54IC0gYXgsIGJ5ID0gc2l0ZS55IC0gYXksIHJTaXRlID0gckFyYy5z
aXRlLCBjeCA9IHJTaXRlLnggLSBheCwgY3kgPSByU2l0ZS55IC0gYXksIGQgPSAyICogKGJ4ICog
Y3kgLSBieSAqIGN4KSwgaGIgPSBieCAqIGJ4ICsgYnkgKiBieSwgaGMgPSBjeCAqIGN4ICsgY3kg
KiBjeSwgdmVydGV4ID0gewotICAgICAgeDogKGN5ICogaGIgLSBieSAqIGhjKSAvIGQgKyBheCwK
LSAgICAgIHk6IChieCAqIGhjIC0gY3ggKiBoYikgLyBkICsgYXkKLSAgICB9OwotICAgIGQzX2dl
b21fdm9yb25vaVNldEVkZ2VFbmQockFyYy5lZGdlLCBsU2l0ZSwgclNpdGUsIHZlcnRleCk7Ci0g
ICAgbmV3QXJjLmVkZ2UgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVFZGdlKGxTaXRlLCBzaXRlLCBu
dWxsLCB2ZXJ0ZXgpOwotICAgIHJBcmMuZWRnZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2Uo
c2l0ZSwgclNpdGUsIG51bGwsIHZlcnRleCk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2ly
Y2xlKGxBcmMpOwotICAgIGQzX2dlb21fdm9yb25vaUF0dGFjaENpcmNsZShyQXJjKTsKLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChhcmMsIGRpcmVjdHJpeCkg
ewotICAgIHZhciBzaXRlID0gYXJjLnNpdGUsIHJmb2N4ID0gc2l0ZS54LCByZm9jeSA9IHNpdGUu
eSwgcGJ5MiA9IHJmb2N5IC0gZGlyZWN0cml4OwotICAgIGlmICghcGJ5MikgcmV0dXJuIHJmb2N4
OwotICAgIHZhciBsQXJjID0gYXJjLlA7Ci0gICAgaWYgKCFsQXJjKSByZXR1cm4gLUluZmluaXR5
OwotICAgIHNpdGUgPSBsQXJjLnNpdGU7Ci0gICAgdmFyIGxmb2N4ID0gc2l0ZS54LCBsZm9jeSA9
IHNpdGUueSwgcGxieTIgPSBsZm9jeSAtIGRpcmVjdHJpeDsKLSAgICBpZiAoIXBsYnkyKSByZXR1
cm4gbGZvY3g7Ci0gICAgdmFyIGhsID0gbGZvY3ggLSByZm9jeCwgYWJ5MiA9IDEgLyBwYnkyIC0g
MSAvIHBsYnkyLCBiID0gaGwgLyBwbGJ5MjsKLSAgICBpZiAoYWJ5MikgcmV0dXJuICgtYiArIE1h
dGguc3FydChiICogYiAtIDIgKiBhYnkyICogKGhsICogaGwgLyAoLTIgKiBwbGJ5MikgLSBsZm9j
eSArIHBsYnkyIC8gMiArIHJmb2N5IC0gcGJ5MiAvIDIpKSkgLyBhYnkyICsgcmZvY3g7Ci0gICAg
cmV0dXJuIChyZm9jeCArIGxmb2N4KSAvIDI7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jv
bm9pUmlnaHRCcmVha1BvaW50KGFyYywgZGlyZWN0cml4KSB7Ci0gICAgdmFyIHJBcmMgPSBhcmMu
TjsKLSAgICBpZiAockFyYykgcmV0dXJuIGQzX2dlb21fdm9yb25vaUxlZnRCcmVha1BvaW50KHJB
cmMsIGRpcmVjdHJpeCk7Ci0gICAgdmFyIHNpdGUgPSBhcmMuc2l0ZTsKLSAgICByZXR1cm4gc2l0
ZS55ID09PSBkaXJlY3RyaXggPyBzaXRlLnggOiBJbmZpbml0eTsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9tX3Zvcm9ub2lDZWxsKHNpdGUpIHsKLSAgICB0aGlzLnNpdGUgPSBzaXRlOwotICAgIHRo
aXMuZWRnZXMgPSBbXTsKLSAgfQotICBkM19nZW9tX3Zvcm9ub2lDZWxsLnByb3RvdHlwZS5wcmVw
YXJlID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhhbGZFZGdlcyA9IHRoaXMuZWRnZXMsIGlIYWxm
RWRnZSA9IGhhbGZFZGdlcy5sZW5ndGgsIGVkZ2U7Ci0gICAgd2hpbGUgKGlIYWxmRWRnZS0tKSB7
Ci0gICAgICBlZGdlID0gaGFsZkVkZ2VzW2lIYWxmRWRnZV0uZWRnZTsKLSAgICAgIGlmICghZWRn
ZS5iIHx8ICFlZGdlLmEpIGhhbGZFZGdlcy5zcGxpY2UoaUhhbGZFZGdlLCAxKTsKLSAgICB9Ci0g
ICAgaGFsZkVkZ2VzLnNvcnQoZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2VPcmRlcik7Ci0gICAgcmV0
dXJuIGhhbGZFZGdlcy5sZW5ndGg7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNs
b3NlQ2VsbHMoZXh0ZW50KSB7Ci0gICAgdmFyIHgwID0gZXh0ZW50WzBdWzBdLCB4MSA9IGV4dGVu
dFsxXVswXSwgeTAgPSBleHRlbnRbMF1bMV0sIHkxID0gZXh0ZW50WzFdWzFdLCB4MiwgeTIsIHgz
LCB5MywgY2VsbHMgPSBkM19nZW9tX3Zvcm9ub2lDZWxscywgaUNlbGwgPSBjZWxscy5sZW5ndGgs
IGNlbGwsIGlIYWxmRWRnZSwgaGFsZkVkZ2VzLCBuSGFsZkVkZ2VzLCBzdGFydCwgZW5kOwotICAg
IHdoaWxlIChpQ2VsbC0tKSB7Ci0gICAgICBjZWxsID0gY2VsbHNbaUNlbGxdOwotICAgICAgaWYg
KCFjZWxsIHx8ICFjZWxsLnByZXBhcmUoKSkgY29udGludWU7Ci0gICAgICBoYWxmRWRnZXMgPSBj
ZWxsLmVkZ2VzOwotICAgICAgbkhhbGZFZGdlcyA9IGhhbGZFZGdlcy5sZW5ndGg7Ci0gICAgICBp
SGFsZkVkZ2UgPSAwOwotICAgICAgd2hpbGUgKGlIYWxmRWRnZSA8IG5IYWxmRWRnZXMpIHsKLSAg
ICAgICAgZW5kID0gaGFsZkVkZ2VzW2lIYWxmRWRnZV0uZW5kKCksIHgzID0gZW5kLngsIHkzID0g
ZW5kLnk7Ci0gICAgICAgIHN0YXJ0ID0gaGFsZkVkZ2VzWysraUhhbGZFZGdlICUgbkhhbGZFZGdl
c10uc3RhcnQoKSwgeDIgPSBzdGFydC54LCB5MiA9IHN0YXJ0Lnk7Ci0gICAgICAgIGlmIChhYnMo
eDMgLSB4MikgPiDOtSB8fCBhYnMoeTMgLSB5MikgPiDOtSkgewotICAgICAgICAgIGhhbGZFZGdl
cy5zcGxpY2UoaUhhbGZFZGdlLCAwLCBuZXcgZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UoZDNfZ2Vv
bV92b3Jvbm9pQ3JlYXRlQm9yZGVyRWRnZShjZWxsLnNpdGUsIGVuZCwgYWJzKHgzIC0geDApIDwg
zrUgJiYgeTEgLSB5MyA+IM61ID8gewotICAgICAgICAgICAgeDogeDAsCi0gICAgICAgICAgICB5
OiBhYnMoeDIgLSB4MCkgPCDOtSA/IHkyIDogeTEKLSAgICAgICAgICB9IDogYWJzKHkzIC0geTEp
IDwgzrUgJiYgeDEgLSB4MyA+IM61ID8gewotICAgICAgICAgICAgeDogYWJzKHkyIC0geTEpIDwg
zrUgPyB4MiA6IHgxLAotICAgICAgICAgICAgeTogeTEKLSAgICAgICAgICB9IDogYWJzKHgzIC0g
eDEpIDwgzrUgJiYgeTMgLSB5MCA+IM61ID8gewotICAgICAgICAgICAgeDogeDEsCi0gICAgICAg
ICAgICB5OiBhYnMoeDIgLSB4MSkgPCDOtSA/IHkyIDogeTAKLSAgICAgICAgICB9IDogYWJzKHkz
IC0geTApIDwgzrUgJiYgeDMgLSB4MCA+IM61ID8gewotICAgICAgICAgICAgeDogYWJzKHkyIC0g
eTApIDwgzrUgPyB4MiA6IHgwLAotICAgICAgICAgICAgeTogeTAKLSAgICAgICAgICB9IDogbnVs
bCksIGNlbGwuc2l0ZSwgbnVsbCkpOwotICAgICAgICAgICsrbkhhbGZFZGdlczsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lIYWxmRWRn
ZU9yZGVyKGEsIGIpIHsKLSAgICByZXR1cm4gYi5hbmdsZSAtIGEuYW5nbGU7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlKCkgewotICAgIGQzX2dlb21fdm9yb25vaVJlZEJs
YWNrTm9kZSh0aGlzKTsKLSAgICB0aGlzLnggPSB0aGlzLnkgPSB0aGlzLmFyYyA9IHRoaXMuc2l0
ZSA9IHRoaXMuY3kgPSBudWxsOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUF0dGFj
aENpcmNsZShhcmMpIHsKLSAgICB2YXIgbEFyYyA9IGFyYy5QLCByQXJjID0gYXJjLk47Ci0gICAg
aWYgKCFsQXJjIHx8ICFyQXJjKSByZXR1cm47Ci0gICAgdmFyIGxTaXRlID0gbEFyYy5zaXRlLCBj
U2l0ZSA9IGFyYy5zaXRlLCByU2l0ZSA9IHJBcmMuc2l0ZTsKLSAgICBpZiAobFNpdGUgPT09IHJT
aXRlKSByZXR1cm47Ci0gICAgdmFyIGJ4ID0gY1NpdGUueCwgYnkgPSBjU2l0ZS55LCBheCA9IGxT
aXRlLnggLSBieCwgYXkgPSBsU2l0ZS55IC0gYnksIGN4ID0gclNpdGUueCAtIGJ4LCBjeSA9IHJT
aXRlLnkgLSBieTsKLSAgICB2YXIgZCA9IDIgKiAoYXggKiBjeSAtIGF5ICogY3gpOwotICAgIGlm
IChkID49IC3OtTIpIHJldHVybjsKLSAgICB2YXIgaGEgPSBheCAqIGF4ICsgYXkgKiBheSwgaGMg
PSBjeCAqIGN4ICsgY3kgKiBjeSwgeCA9IChjeSAqIGhhIC0gYXkgKiBoYykgLyBkLCB5ID0gKGF4
ICogaGMgLSBjeCAqIGhhKSAvIGQsIGN5ID0geSArIGJ5OwotICAgIHZhciBjaXJjbGUgPSBkM19n
ZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnBvcCgpIHx8IG5ldyBkM19nZW9tX3Zvcm9ub2lDaXJjbGUo
KTsKLSAgICBjaXJjbGUuYXJjID0gYXJjOwotICAgIGNpcmNsZS5zaXRlID0gY1NpdGU7Ci0gICAg
Y2lyY2xlLnggPSB4ICsgYng7Ci0gICAgY2lyY2xlLnkgPSBjeSArIE1hdGguc3FydCh4ICogeCAr
IHkgKiB5KTsKLSAgICBjaXJjbGUuY3kgPSBjeTsKLSAgICBhcmMuY2lyY2xlID0gY2lyY2xlOwot
ICAgIHZhciBiZWZvcmUgPSBudWxsLCBub2RlID0gZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5fOwot
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICBpZiAoY2lyY2xlLnkgPCBub2RlLnkgfHwgY2lyY2xl
LnkgPT09IG5vZGUueSAmJiBjaXJjbGUueCA8PSBub2RlLngpIHsKLSAgICAgICAgaWYgKG5vZGUu
TCkgbm9kZSA9IG5vZGUuTDsgZWxzZSB7Ci0gICAgICAgICAgYmVmb3JlID0gbm9kZS5QOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobm9k
ZS5SKSBub2RlID0gbm9kZS5SOyBlbHNlIHsKLSAgICAgICAgICBiZWZvcmUgPSBub2RlOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGQzX2dlb21fdm9y
b25vaUNpcmNsZXMuaW5zZXJ0KGJlZm9yZSwgY2lyY2xlKTsKLSAgICBpZiAoIWJlZm9yZSkgZDNf
Z2VvbV92b3Jvbm9pRmlyc3RDaXJjbGUgPSBjaXJjbGU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2Vv
bV92b3Jvbm9pRGV0YWNoQ2lyY2xlKGFyYykgewotICAgIHZhciBjaXJjbGUgPSBhcmMuY2lyY2xl
OwotICAgIGlmIChjaXJjbGUpIHsKLSAgICAgIGlmICghY2lyY2xlLlApIGQzX2dlb21fdm9yb25v
aUZpcnN0Q2lyY2xlID0gY2lyY2xlLk47Ci0gICAgICBkM19nZW9tX3Zvcm9ub2lDaXJjbGVzLnJl
bW92ZShjaXJjbGUpOwotICAgICAgZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlUG9vbC5wdXNoKGNpcmNs
ZSk7Ci0gICAgICBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja05vZGUoY2lyY2xlKTsKLSAgICAgIGFy
Yy5jaXJjbGUgPSBudWxsOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lD
bGlwRWRnZXMoZXh0ZW50KSB7Ci0gICAgdmFyIGVkZ2VzID0gZDNfZ2VvbV92b3Jvbm9pRWRnZXMs
IGNsaXAgPSBkM19nZW9tX2NsaXBMaW5lKGV4dGVudFswXVswXSwgZXh0ZW50WzBdWzFdLCBleHRl
bnRbMV1bMF0sIGV4dGVudFsxXVsxXSksIGkgPSBlZGdlcy5sZW5ndGgsIGU7Ci0gICAgd2hpbGUg
KGktLSkgewotICAgICAgZSA9IGVkZ2VzW2ldOwotICAgICAgaWYgKCFkM19nZW9tX3Zvcm9ub2lD
b25uZWN0RWRnZShlLCBleHRlbnQpIHx8ICFjbGlwKGUpIHx8IGFicyhlLmEueCAtIGUuYi54KSA8
IM61ICYmIGFicyhlLmEueSAtIGUuYi55KSA8IM61KSB7Ci0gICAgICAgIGUuYSA9IGUuYiA9IG51
bGw7Ci0gICAgICAgIGVkZ2VzLnNwbGljZShpLCAxKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ29ubmVjdEVkZ2UoZWRnZSwgZXh0ZW50KSB7Ci0gICAg
dmFyIHZiID0gZWRnZS5iOwotICAgIGlmICh2YikgcmV0dXJuIHRydWU7Ci0gICAgdmFyIHZhID0g
ZWRnZS5hLCB4MCA9IGV4dGVudFswXVswXSwgeDEgPSBleHRlbnRbMV1bMF0sIHkwID0gZXh0ZW50
WzBdWzFdLCB5MSA9IGV4dGVudFsxXVsxXSwgbFNpdGUgPSBlZGdlLmwsIHJTaXRlID0gZWRnZS5y
LCBseCA9IGxTaXRlLngsIGx5ID0gbFNpdGUueSwgcnggPSByU2l0ZS54LCByeSA9IHJTaXRlLnks
IGZ4ID0gKGx4ICsgcngpIC8gMiwgZnkgPSAobHkgKyByeSkgLyAyLCBmbSwgZmI7Ci0gICAgaWYg
KHJ5ID09PSBseSkgewotICAgICAgaWYgKGZ4IDwgeDAgfHwgZnggPj0geDEpIHJldHVybjsKLSAg
ICAgIGlmIChseCA+IHJ4KSB7Ci0gICAgICAgIGlmICghdmEpIHZhID0gewotICAgICAgICAgIHg6
IGZ4LAotICAgICAgICAgIHk6IHkwCi0gICAgICAgIH07IGVsc2UgaWYgKHZhLnkgPj0geTEpIHJl
dHVybjsKLSAgICAgICAgdmIgPSB7Ci0gICAgICAgICAgeDogZngsCi0gICAgICAgICAgeTogeTEK
LSAgICAgICAgfTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmEpIHZhID0gewotICAg
ICAgICAgIHg6IGZ4LAotICAgICAgICAgIHk6IHkxCi0gICAgICAgIH07IGVsc2UgaWYgKHZhLnkg
PCB5MCkgcmV0dXJuOwotICAgICAgICB2YiA9IHsKLSAgICAgICAgICB4OiBmeCwKLSAgICAgICAg
ICB5OiB5MAotICAgICAgICB9OwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmbSA9IChs
eCAtIHJ4KSAvIChyeSAtIGx5KTsKLSAgICAgIGZiID0gZnkgLSBmbSAqIGZ4OwotICAgICAgaWYg
KGZtIDwgLTEgfHwgZm0gPiAxKSB7Ci0gICAgICAgIGlmIChseCA+IHJ4KSB7Ci0gICAgICAgICAg
aWYgKCF2YSkgdmEgPSB7Ci0gICAgICAgICAgICB4OiAoeTAgLSBmYikgLyBmbSwKLSAgICAgICAg
ICAgIHk6IHkwCi0gICAgICAgICAgfTsgZWxzZSBpZiAodmEueSA+PSB5MSkgcmV0dXJuOwotICAg
ICAgICAgIHZiID0gewotICAgICAgICAgICAgeDogKHkxIC0gZmIpIC8gZm0sCi0gICAgICAgICAg
ICB5OiB5MQotICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKCF2
YSkgdmEgPSB7Ci0gICAgICAgICAgICB4OiAoeTEgLSBmYikgLyBmbSwKLSAgICAgICAgICAgIHk6
IHkxCi0gICAgICAgICAgfTsgZWxzZSBpZiAodmEueSA8IHkwKSByZXR1cm47Ci0gICAgICAgICAg
dmIgPSB7Ci0gICAgICAgICAgICB4OiAoeTAgLSBmYikgLyBmbSwKLSAgICAgICAgICAgIHk6IHkw
Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx5
IDwgcnkpIHsKLSAgICAgICAgICBpZiAoIXZhKSB2YSA9IHsKLSAgICAgICAgICAgIHg6IHgwLAot
ICAgICAgICAgICAgeTogZm0gKiB4MCArIGZiCi0gICAgICAgICAgfTsgZWxzZSBpZiAodmEueCA+
PSB4MSkgcmV0dXJuOwotICAgICAgICAgIHZiID0gewotICAgICAgICAgICAgeDogeDEsCi0gICAg
ICAgICAgICB5OiBmbSAqIHgxICsgZmIKLSAgICAgICAgICB9OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGlmICghdmEpIHZhID0gewotICAgICAgICAgICAgeDogeDEsCi0gICAgICAgICAg
ICB5OiBmbSAqIHgxICsgZmIKLSAgICAgICAgICB9OyBlbHNlIGlmICh2YS54IDwgeDApIHJldHVy
bjsKLSAgICAgICAgICB2YiA9IHsKLSAgICAgICAgICAgIHg6IHgwLAotICAgICAgICAgICAgeTog
Zm0gKiB4MCArIGZiCi0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
ICBlZGdlLmEgPSB2YTsKLSAgICBlZGdlLmIgPSB2YjsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lFZGdlKGxTaXRlLCByU2l0ZSkgewotICAgIHRoaXMu
bCA9IGxTaXRlOwotICAgIHRoaXMuciA9IHJTaXRlOwotICAgIHRoaXMuYSA9IHRoaXMuYiA9IG51
bGw7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShsU2l0ZSwgclNp
dGUsIHZhLCB2YikgewotICAgIHZhciBlZGdlID0gbmV3IGQzX2dlb21fdm9yb25vaUVkZ2UobFNp
dGUsIHJTaXRlKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lFZGdlcy5wdXNoKGVkZ2UpOwotICAgIGlm
ICh2YSkgZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChlZGdlLCBsU2l0ZSwgclNpdGUsIHZhKTsK
LSAgICBpZiAodmIpIGQzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQoZWRnZSwgclNpdGUsIGxTaXRl
LCB2Yik7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQ2VsbHNbbFNpdGUuaV0uZWRnZXMucHVzaChuZXcg
ZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2UoZWRnZSwgbFNpdGUsIHJTaXRlKSk7Ci0gICAgZDNfZ2Vv
bV92b3Jvbm9pQ2VsbHNbclNpdGUuaV0uZWRnZXMucHVzaChuZXcgZDNfZ2VvbV92b3Jvbm9pSGFs
ZkVkZ2UoZWRnZSwgclNpdGUsIGxTaXRlKSk7Ci0gICAgcmV0dXJuIGVkZ2U7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlQm9yZGVyRWRnZShsU2l0ZSwgdmEsIHZiKSB7Ci0g
ICAgdmFyIGVkZ2UgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pRWRnZShsU2l0ZSwgbnVsbCk7Ci0gICAg
ZWRnZS5hID0gdmE7Ci0gICAgZWRnZS5iID0gdmI7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pRWRnZXMu
cHVzaChlZGdlKTsKLSAgICByZXR1cm4gZWRnZTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zv
cm9ub2lTZXRFZGdlRW5kKGVkZ2UsIGxTaXRlLCByU2l0ZSwgdmVydGV4KSB7Ci0gICAgaWYgKCFl
ZGdlLmEgJiYgIWVkZ2UuYikgewotICAgICAgZWRnZS5hID0gdmVydGV4OwotICAgICAgZWRnZS5s
ID0gbFNpdGU7Ci0gICAgICBlZGdlLnIgPSByU2l0ZTsKLSAgICB9IGVsc2UgaWYgKGVkZ2UubCA9
PT0gclNpdGUpIHsKLSAgICAgIGVkZ2UuYiA9IHZlcnRleDsKLSAgICB9IGVsc2UgewotICAgICAg
ZWRnZS5hID0gdmVydGV4OwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lI
YWxmRWRnZShlZGdlLCBsU2l0ZSwgclNpdGUpIHsKLSAgICB2YXIgdmEgPSBlZGdlLmEsIHZiID0g
ZWRnZS5iOwotICAgIHRoaXMuZWRnZSA9IGVkZ2U7Ci0gICAgdGhpcy5zaXRlID0gbFNpdGU7Ci0g
ICAgdGhpcy5hbmdsZSA9IHJTaXRlID8gTWF0aC5hdGFuMihyU2l0ZS55IC0gbFNpdGUueSwgclNp
dGUueCAtIGxTaXRlLngpIDogZWRnZS5sID09PSBsU2l0ZSA/IE1hdGguYXRhbjIodmIueCAtIHZh
LngsIHZhLnkgLSB2Yi55KSA6IE1hdGguYXRhbjIodmEueCAtIHZiLngsIHZiLnkgLSB2YS55KTsK
LSAgfQotICBkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZS5wcm90b3R5cGUgPSB7Ci0gICAgc3RhcnQ6
IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuZWRnZS5sID09PSB0aGlzLnNpdGUgPyB0
aGlzLmVkZ2UuYSA6IHRoaXMuZWRnZS5iOwotICAgIH0sCi0gICAgZW5kOiBmdW5jdGlvbigpIHsK
LSAgICAgIHJldHVybiB0aGlzLmVkZ2UubCA9PT0gdGhpcy5zaXRlID8gdGhpcy5lZGdlLmIgOiB0
aGlzLmVkZ2UuYTsKLSAgICB9Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJs
YWNrVHJlZSgpIHsKLSAgICB0aGlzLl8gPSBudWxsOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21f
dm9yb25vaVJlZEJsYWNrTm9kZShub2RlKSB7Ci0gICAgbm9kZS5VID0gbm9kZS5DID0gbm9kZS5M
ID0gbm9kZS5SID0gbm9kZS5QID0gbm9kZS5OID0gbnVsbDsKLSAgfQotICBkM19nZW9tX3Zvcm9u
b2lSZWRCbGFja1RyZWUucHJvdG90eXBlID0gewotICAgIGluc2VydDogZnVuY3Rpb24oYWZ0ZXIs
IG5vZGUpIHsKLSAgICAgIHZhciBwYXJlbnQsIGdyYW5kcGEsIHVuY2xlOwotICAgICAgaWYgKGFm
dGVyKSB7Ci0gICAgICAgIG5vZGUuUCA9IGFmdGVyOwotICAgICAgICBub2RlLk4gPSBhZnRlci5O
OwotICAgICAgICBpZiAoYWZ0ZXIuTikgYWZ0ZXIuTi5QID0gbm9kZTsKLSAgICAgICAgYWZ0ZXIu
TiA9IG5vZGU7Ci0gICAgICAgIGlmIChhZnRlci5SKSB7Ci0gICAgICAgICAgYWZ0ZXIgPSBhZnRl
ci5SOwotICAgICAgICAgIHdoaWxlIChhZnRlci5MKSBhZnRlciA9IGFmdGVyLkw7Ci0gICAgICAg
ICAgYWZ0ZXIuTCA9IG5vZGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYWZ0ZXIuUiA9
IG5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyZW50ID0gYWZ0ZXI7Ci0gICAgICB9IGVsc2Ug
aWYgKHRoaXMuXykgewotICAgICAgICBhZnRlciA9IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmly
c3QodGhpcy5fKTsKLSAgICAgICAgbm9kZS5QID0gbnVsbDsKLSAgICAgICAgbm9kZS5OID0gYWZ0
ZXI7Ci0gICAgICAgIGFmdGVyLlAgPSBhZnRlci5MID0gbm9kZTsKLSAgICAgICAgcGFyZW50ID0g
YWZ0ZXI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBub2RlLlAgPSBub2RlLk4gPSBudWxsOwot
ICAgICAgICB0aGlzLl8gPSBub2RlOwotICAgICAgICBwYXJlbnQgPSBudWxsOwotICAgICAgfQot
ICAgICAgbm9kZS5MID0gbm9kZS5SID0gbnVsbDsKLSAgICAgIG5vZGUuVSA9IHBhcmVudDsKLSAg
ICAgIG5vZGUuQyA9IHRydWU7Ci0gICAgICBhZnRlciA9IG5vZGU7Ci0gICAgICB3aGlsZSAocGFy
ZW50ICYmIHBhcmVudC5DKSB7Ci0gICAgICAgIGdyYW5kcGEgPSBwYXJlbnQuVTsKLSAgICAgICAg
aWYgKHBhcmVudCA9PT0gZ3JhbmRwYS5MKSB7Ci0gICAgICAgICAgdW5jbGUgPSBncmFuZHBhLlI7
Ci0gICAgICAgICAgaWYgKHVuY2xlICYmIHVuY2xlLkMpIHsKLSAgICAgICAgICAgIHBhcmVudC5D
ID0gdW5jbGUuQyA9IGZhbHNlOwotICAgICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGFmdGVyID0gZ3JhbmRwYTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGFmdGVyID09PSBwYXJlbnQuUikgewotICAgICAgICAgICAgICBkM19nZW9tX3Zvcm9ub2lS
ZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgcGFyZW50KTsKLSAgICAgICAgICAgICAgYWZ0ZXIgPSBw
YXJlbnQ7Ci0gICAgICAgICAgICAgIHBhcmVudCA9IGFmdGVyLlU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwYXJlbnQuQyA9IGZhbHNlOwotICAgICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1
ZTsKLSAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywg
Z3JhbmRwYSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHVuY2xl
ID0gZ3JhbmRwYS5MOwotICAgICAgICAgIGlmICh1bmNsZSAmJiB1bmNsZS5DKSB7Ci0gICAgICAg
ICAgICBwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTsKLSAgICAgICAgICAgIGdyYW5kcGEuQyA9
IHRydWU7Ci0gICAgICAgICAgICBhZnRlciA9IGdyYW5kcGE7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChhZnRlciA9PT0gcGFyZW50LkwpIHsKLSAgICAgICAgICAgICAgZDNf
Z2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpOwotICAgICAgICAg
ICAgICBhZnRlciA9IHBhcmVudDsKLSAgICAgICAgICAgICAgcGFyZW50ID0gYWZ0ZXIuVTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmVudC5DID0gZmFsc2U7Ci0gICAgICAgICAgICBn
cmFuZHBhLkMgPSB0cnVlOwotICAgICAgICAgICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3Rh
dGVMZWZ0KHRoaXMsIGdyYW5kcGEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBw
YXJlbnQgPSBhZnRlci5VOwotICAgICAgfQotICAgICAgdGhpcy5fLkMgPSBmYWxzZTsKLSAgICB9
LAotICAgIHJlbW92ZTogZnVuY3Rpb24obm9kZSkgewotICAgICAgaWYgKG5vZGUuTikgbm9kZS5O
LlAgPSBub2RlLlA7Ci0gICAgICBpZiAobm9kZS5QKSBub2RlLlAuTiA9IG5vZGUuTjsKLSAgICAg
IG5vZGUuTiA9IG5vZGUuUCA9IG51bGw7Ci0gICAgICB2YXIgcGFyZW50ID0gbm9kZS5VLCBzaWJs
aW5nLCBsZWZ0ID0gbm9kZS5MLCByaWdodCA9IG5vZGUuUiwgbmV4dCwgcmVkOwotICAgICAgaWYg
KCFsZWZ0KSBuZXh0ID0gcmlnaHQ7IGVsc2UgaWYgKCFyaWdodCkgbmV4dCA9IGxlZnQ7IGVsc2Ug
bmV4dCA9IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrRmlyc3QocmlnaHQpOwotICAgICAgaWYgKHBh
cmVudCkgewotICAgICAgICBpZiAocGFyZW50LkwgPT09IG5vZGUpIHBhcmVudC5MID0gbmV4dDsg
ZWxzZSBwYXJlbnQuUiA9IG5leHQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLl8gPSBu
ZXh0OwotICAgICAgfQotICAgICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgcmVkID0g
bmV4dC5DOwotICAgICAgICBuZXh0LkMgPSBub2RlLkM7Ci0gICAgICAgIG5leHQuTCA9IGxlZnQ7
Ci0gICAgICAgIGxlZnQuVSA9IG5leHQ7Ci0gICAgICAgIGlmIChuZXh0ICE9PSByaWdodCkgewot
ICAgICAgICAgIHBhcmVudCA9IG5leHQuVTsKLSAgICAgICAgICBuZXh0LlUgPSBub2RlLlU7Ci0g
ICAgICAgICAgbm9kZSA9IG5leHQuUjsKLSAgICAgICAgICBwYXJlbnQuTCA9IG5vZGU7Ci0gICAg
ICAgICAgbmV4dC5SID0gcmlnaHQ7Ci0gICAgICAgICAgcmlnaHQuVSA9IG5leHQ7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgbmV4dC5VID0gcGFyZW50OwotICAgICAgICAgIHBhcmVudCA9
IG5leHQ7Ci0gICAgICAgICAgbm9kZSA9IG5leHQuUjsKLSAgICAgICAgfQotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmVkID0gbm9kZS5DOwotICAgICAgICBub2RlID0gbmV4dDsKLSAgICAgIH0K
LSAgICAgIGlmIChub2RlKSBub2RlLlUgPSBwYXJlbnQ7Ci0gICAgICBpZiAocmVkKSByZXR1cm47
Ci0gICAgICBpZiAobm9kZSAmJiBub2RlLkMpIHsKLSAgICAgICAgbm9kZS5DID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGRvIHsKLSAgICAgICAgaWYgKG5vZGUgPT09
IHRoaXMuXykgYnJlYWs7Ci0gICAgICAgIGlmIChub2RlID09PSBwYXJlbnQuTCkgewotICAgICAg
ICAgIHNpYmxpbmcgPSBwYXJlbnQuUjsKLSAgICAgICAgICBpZiAoc2libGluZy5DKSB7Ci0gICAg
ICAgICAgICBzaWJsaW5nLkMgPSBmYWxzZTsKLSAgICAgICAgICAgIHBhcmVudC5DID0gdHJ1ZTsK
LSAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBwYXJl
bnQpOwotICAgICAgICAgICAgc2libGluZyA9IHBhcmVudC5SOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBpZiAoc2libGluZy5MICYmIHNpYmxpbmcuTC5DIHx8IHNpYmxpbmcuUiAmJiBzaWJsaW5n
LlIuQykgewotICAgICAgICAgICAgaWYgKCFzaWJsaW5nLlIgfHwgIXNpYmxpbmcuUi5DKSB7Ci0g
ICAgICAgICAgICAgIHNpYmxpbmcuTC5DID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHNpYmxpbmcu
QyA9IHRydWU7Ci0gICAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmln
aHQodGhpcywgc2libGluZyk7Ci0gICAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuUjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5DOwotICAgICAgICAg
ICAgcGFyZW50LkMgPSBzaWJsaW5nLlIuQyA9IGZhbHNlOwotICAgICAgICAgICAgZDNfZ2VvbV92
b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7Ci0gICAgICAgICAgICBub2Rl
ID0gdGhpcy5fOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDsKLSAgICAgICAgICBpZiAoc2libGlu
Zy5DKSB7Ci0gICAgICAgICAgICBzaWJsaW5nLkMgPSBmYWxzZTsKLSAgICAgICAgICAgIHBhcmVu
dC5DID0gdHJ1ZTsKLSAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmln
aHQodGhpcywgcGFyZW50KTsKLSAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgaWYgKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQyB8fCBzaWJsaW5n
LlIgJiYgc2libGluZy5SLkMpIHsKLSAgICAgICAgICAgIGlmICghc2libGluZy5MIHx8ICFzaWJs
aW5nLkwuQykgewotICAgICAgICAgICAgICBzaWJsaW5nLlIuQyA9IGZhbHNlOwotICAgICAgICAg
ICAgICBzaWJsaW5nLkMgPSB0cnVlOwotICAgICAgICAgICAgICBkM19nZW9tX3Zvcm9ub2lSZWRC
bGFja1JvdGF0ZUxlZnQodGhpcywgc2libGluZyk7Ci0gICAgICAgICAgICAgIHNpYmxpbmcgPSBw
YXJlbnQuTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5D
OwotICAgICAgICAgICAgcGFyZW50LkMgPSBzaWJsaW5nLkwuQyA9IGZhbHNlOwotICAgICAgICAg
ICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpOwotICAg
ICAgICAgICAgbm9kZSA9IHRoaXMuXzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBzaWJsaW5nLkMgPSB0cnVlOwotICAgICAgICBub2RlID0gcGFy
ZW50OwotICAgICAgICBwYXJlbnQgPSBwYXJlbnQuVTsKLSAgICAgIH0gd2hpbGUgKCFub2RlLkMp
OwotICAgICAgaWYgKG5vZGUpIG5vZGUuQyA9IGZhbHNlOwotICAgIH0KLSAgfTsKLSAgZnVuY3Rp
b24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRyZWUsIG5vZGUpIHsKLSAgICB2
YXIgcCA9IG5vZGUsIHEgPSBub2RlLlIsIHBhcmVudCA9IHAuVTsKLSAgICBpZiAocGFyZW50KSB7
Ci0gICAgICBpZiAocGFyZW50LkwgPT09IHApIHBhcmVudC5MID0gcTsgZWxzZSBwYXJlbnQuUiA9
IHE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRyZWUuXyA9IHE7Ci0gICAgfQotICAgIHEuVSA9IHBh
cmVudDsKLSAgICBwLlUgPSBxOwotICAgIHAuUiA9IHEuTDsKLSAgICBpZiAocC5SKSBwLlIuVSA9
IHA7Ci0gICAgcS5MID0gcDsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZWRCbGFj
a1JvdGF0ZVJpZ2h0KHRyZWUsIG5vZGUpIHsKLSAgICB2YXIgcCA9IG5vZGUsIHEgPSBub2RlLkws
IHBhcmVudCA9IHAuVTsKLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICBpZiAocGFyZW50LkwgPT09
IHApIHBhcmVudC5MID0gcTsgZWxzZSBwYXJlbnQuUiA9IHE7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHRyZWUuXyA9IHE7Ci0gICAgfQotICAgIHEuVSA9IHBhcmVudDsKLSAgICBwLlUgPSBxOwotICAg
IHAuTCA9IHEuUjsKLSAgICBpZiAocC5MKSBwLkwuVSA9IHA7Ci0gICAgcS5SID0gcDsKLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja0ZpcnN0KG5vZGUpIHsKLSAgICB3aGls
ZSAobm9kZS5MKSBub2RlID0gbm9kZS5MOwotICAgIHJldHVybiBub2RlOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2dlb21fdm9yb25vaShzaXRlcywgYmJveCkgewotICAgIHZhciBzaXRlID0gc2l0ZXMu
c29ydChkM19nZW9tX3Zvcm9ub2lWZXJ0ZXhPcmRlcikucG9wKCksIHgwLCB5MCwgY2lyY2xlOwot
ICAgIGQzX2dlb21fdm9yb25vaUVkZ2VzID0gW107Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQ2VsbHMg
PSBuZXcgQXJyYXkoc2l0ZXMubGVuZ3RoKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lCZWFjaGVzID0g
bmV3IGQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZSgpOwotICAgIGQzX2dlb21fdm9yb25vaUNp
cmNsZXMgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCk7Ci0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgIGNpcmNsZSA9IGQzX2dlb21fdm9yb25vaUZpcnN0Q2lyY2xlOwotICAgICAg
aWYgKHNpdGUgJiYgKCFjaXJjbGUgfHwgc2l0ZS55IDwgY2lyY2xlLnkgfHwgc2l0ZS55ID09PSBj
aXJjbGUueSAmJiBzaXRlLnggPCBjaXJjbGUueCkpIHsKLSAgICAgICAgaWYgKHNpdGUueCAhPT0g
eDAgfHwgc2l0ZS55ICE9PSB5MCkgewotICAgICAgICAgIGQzX2dlb21fdm9yb25vaUNlbGxzW3Np
dGUuaV0gPSBuZXcgZDNfZ2VvbV92b3Jvbm9pQ2VsbChzaXRlKTsKLSAgICAgICAgICBkM19nZW9t
X3Zvcm9ub2lBZGRCZWFjaChzaXRlKTsKLSAgICAgICAgICB4MCA9IHNpdGUueCwgeTAgPSBzaXRl
Lnk7Ci0gICAgICAgIH0KLSAgICAgICAgc2l0ZSA9IHNpdGVzLnBvcCgpOwotICAgICAgfSBlbHNl
IGlmIChjaXJjbGUpIHsKLSAgICAgICAgZDNfZ2VvbV92b3Jvbm9pUmVtb3ZlQmVhY2goY2lyY2xl
LmFyYyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKGJib3gpIGQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhiYm94KSwgZDNfZ2VvbV92b3Jv
bm9pQ2xvc2VDZWxscyhiYm94KTsKLSAgICB2YXIgZGlhZ3JhbSA9IHsKLSAgICAgIGNlbGxzOiBk
M19nZW9tX3Zvcm9ub2lDZWxscywKLSAgICAgIGVkZ2VzOiBkM19nZW9tX3Zvcm9ub2lFZGdlcwot
ICAgIH07Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcyA9IGQzX2dlb21fdm9yb25vaUNpcmNs
ZXMgPSBkM19nZW9tX3Zvcm9ub2lFZGdlcyA9IGQzX2dlb21fdm9yb25vaUNlbGxzID0gbnVsbDsK
LSAgICByZXR1cm4gZGlhZ3JhbTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lWZXJ0
ZXhPcmRlcihhLCBiKSB7Ci0gICAgcmV0dXJuIGIueSAtIGEueSB8fCBiLnggLSBhLng7Ci0gIH0K
LSAgZDMuZ2VvbS52b3Jvbm9pID0gZnVuY3Rpb24ocG9pbnRzKSB7Ci0gICAgdmFyIHggPSBkM19n
ZW9tX3BvaW50WCwgeSA9IGQzX2dlb21fcG9pbnRZLCBmeCA9IHgsIGZ5ID0geSwgY2xpcEV4dGVu
dCA9IGQzX2dlb21fdm9yb25vaUNsaXBFeHRlbnQ7Ci0gICAgaWYgKHBvaW50cykgcmV0dXJuIHZv
cm9ub2kocG9pbnRzKTsKLSAgICBmdW5jdGlvbiB2b3Jvbm9pKGRhdGEpIHsKLSAgICAgIHZhciBw
b2x5Z29ucyA9IG5ldyBBcnJheShkYXRhLmxlbmd0aCksIHgwID0gY2xpcEV4dGVudFswXVswXSwg
eTAgPSBjbGlwRXh0ZW50WzBdWzFdLCB4MSA9IGNsaXBFeHRlbnRbMV1bMF0sIHkxID0gY2xpcEV4
dGVudFsxXVsxXTsKLSAgICAgIGQzX2dlb21fdm9yb25vaShzaXRlcyhkYXRhKSwgY2xpcEV4dGVu
dCkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihjZWxsLCBpKSB7Ci0gICAgICAgIHZhciBlZGdlcyA9
IGNlbGwuZWRnZXMsIHNpdGUgPSBjZWxsLnNpdGUsIHBvbHlnb24gPSBwb2x5Z29uc1tpXSA9IGVk
Z2VzLmxlbmd0aCA/IGVkZ2VzLm1hcChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgdmFyIHMgPSBl
LnN0YXJ0KCk7Ci0gICAgICAgICAgcmV0dXJuIFsgcy54LCBzLnkgXTsKLSAgICAgICAgfSkgOiBz
aXRlLnggPj0geDAgJiYgc2l0ZS54IDw9IHgxICYmIHNpdGUueSA+PSB5MCAmJiBzaXRlLnkgPD0g
eTEgPyBbIFsgeDAsIHkxIF0sIFsgeDEsIHkxIF0sIFsgeDEsIHkwIF0sIFsgeDAsIHkwIF0gXSA6
IFtdOwotICAgICAgICBwb2x5Z29uLnBvaW50ID0gZGF0YVtpXTsKLSAgICAgIH0pOwotICAgICAg
cmV0dXJuIHBvbHlnb25zOwotICAgIH0KLSAgICBmdW5jdGlvbiBzaXRlcyhkYXRhKSB7Ci0gICAg
ICByZXR1cm4gZGF0YS5tYXAoZnVuY3Rpb24oZCwgaSkgewotICAgICAgICByZXR1cm4gewotICAg
ICAgICAgIHg6IE1hdGgucm91bmQoZngoZCwgaSkgLyDOtSkgKiDOtSwKLSAgICAgICAgICB5OiBN
YXRoLnJvdW5kKGZ5KGQsIGkpIC8gzrUpICogzrUsCi0gICAgICAgICAgaTogaQotICAgICAgICB9
OwotICAgICAgfSk7Ci0gICAgfQotICAgIHZvcm9ub2kubGlua3MgPSBmdW5jdGlvbihkYXRhKSB7
Ci0gICAgICByZXR1cm4gZDNfZ2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpKS5lZGdlcy5maWx0ZXIo
ZnVuY3Rpb24oZWRnZSkgewotICAgICAgICByZXR1cm4gZWRnZS5sICYmIGVkZ2UucjsKLSAgICAg
IH0pLm1hcChmdW5jdGlvbihlZGdlKSB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgc291
cmNlOiBkYXRhW2VkZ2UubC5pXSwKLSAgICAgICAgICB0YXJnZXQ6IGRhdGFbZWRnZS5yLmldCi0g
ICAgICAgIH07Ci0gICAgICB9KTsKLSAgICB9OwotICAgIHZvcm9ub2kudHJpYW5nbGVzID0gZnVu
Y3Rpb24oZGF0YSkgewotICAgICAgdmFyIHRyaWFuZ2xlcyA9IFtdOwotICAgICAgZDNfZ2VvbV92
b3Jvbm9pKHNpdGVzKGRhdGEpKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsIGkpIHsKLSAg
ICAgICAgdmFyIHNpdGUgPSBjZWxsLnNpdGUsIGVkZ2VzID0gY2VsbC5lZGdlcy5zb3J0KGQzX2dl
b21fdm9yb25vaUhhbGZFZGdlT3JkZXIpLCBqID0gLTEsIG0gPSBlZGdlcy5sZW5ndGgsIGUwLCBz
MCwgZTEgPSBlZGdlc1ttIC0gMV0uZWRnZSwgczEgPSBlMS5sID09PSBzaXRlID8gZTEuciA6IGUx
Lmw7Ci0gICAgICAgIHdoaWxlICgrK2ogPCBtKSB7Ci0gICAgICAgICAgZTAgPSBlMTsKLSAgICAg
ICAgICBzMCA9IHMxOwotICAgICAgICAgIGUxID0gZWRnZXNbal0uZWRnZTsKLSAgICAgICAgICBz
MSA9IGUxLmwgPT09IHNpdGUgPyBlMS5yIDogZTEubDsKLSAgICAgICAgICBpZiAoaSA8IHMwLmkg
JiYgaSA8IHMxLmkgJiYgZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKHNpdGUsIHMwLCBzMSkg
PCAwKSB7Ci0gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChbIGRhdGFbaV0sIGRhdGFbczAuaV0s
IGRhdGFbczEuaV0gXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiB0cmlhbmdsZXM7Ci0gICAgfTsKLSAgICB2b3Jvbm9pLnggPSBmdW5jdGlvbihfKSB7
Ci0gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmeCA9IGQzX2Z1bmN0b3IoeCA9IF8p
LCB2b3Jvbm9pKSA6IHg7Ci0gICAgfTsKLSAgICB2b3Jvbm9pLnkgPSBmdW5jdGlvbihfKSB7Ci0g
ICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmeSA9IGQzX2Z1bmN0b3IoeSA9IF8pLCB2
b3Jvbm9pKSA6IHk7Ci0gICAgfTsKLSAgICB2b3Jvbm9pLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihf
KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjbGlwRXh0ZW50ID09PSBk
M19nZW9tX3Zvcm9ub2lDbGlwRXh0ZW50ID8gbnVsbCA6IGNsaXBFeHRlbnQ7Ci0gICAgICBjbGlw
RXh0ZW50ID0gXyA9PSBudWxsID8gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudCA6IF87Ci0gICAg
ICByZXR1cm4gdm9yb25vaTsKLSAgICB9OwotICAgIHZvcm9ub2kuc2l6ZSA9IGZ1bmN0aW9uKF8p
IHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsaXBFeHRlbnQgPT09IGQz
X2dlb21fdm9yb25vaUNsaXBFeHRlbnQgPyBudWxsIDogY2xpcEV4dGVudCAmJiBjbGlwRXh0ZW50
WzFdOwotICAgICAgcmV0dXJuIHZvcm9ub2kuY2xpcEV4dGVudChfICYmIFsgWyAwLCAwIF0sIF8g
XSk7Ci0gICAgfTsKLSAgICByZXR1cm4gdm9yb25vaTsKLSAgfTsKLSAgdmFyIGQzX2dlb21fdm9y
b25vaUNsaXBFeHRlbnQgPSBbIFsgLTFlNiwgLTFlNiBdLCBbIDFlNiwgMWU2IF0gXTsKLSAgZnVu
Y3Rpb24gZDNfZ2VvbV92b3Jvbm9pVHJpYW5nbGVBcmVhKGEsIGIsIGMpIHsKLSAgICByZXR1cm4g
KGEueCAtIGMueCkgKiAoYi55IC0gYS55KSAtIChhLnggLSBiLngpICogKGMueSAtIGEueSk7Ci0g
IH0KLSAgZDMuZ2VvbS5kZWxhdW5heSA9IGZ1bmN0aW9uKHZlcnRpY2VzKSB7Ci0gICAgcmV0dXJu
IGQzLmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyh2ZXJ0aWNlcyk7Ci0gIH07Ci0gIGQzLmdlb20u
cXVhZHRyZWUgPSBmdW5jdGlvbihwb2ludHMsIHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgdmFyIHgg
PSBkM19nZW9tX3BvaW50WCwgeSA9IGQzX2dlb21fcG9pbnRZLCBjb21wYXQ7Ci0gICAgaWYgKGNv
bXBhdCA9IGFyZ3VtZW50cy5sZW5ndGgpIHsKLSAgICAgIHggPSBkM19nZW9tX3F1YWR0cmVlQ29t
cGF0WDsKLSAgICAgIHkgPSBkM19nZW9tX3F1YWR0cmVlQ29tcGF0WTsKLSAgICAgIGlmIChjb21w
YXQgPT09IDMpIHsKLSAgICAgICAgeTIgPSB5MTsKLSAgICAgICAgeDIgPSB4MTsKLSAgICAgICAg
eTEgPSB4MSA9IDA7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcXVhZHRyZWUocG9pbnRzKTsKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gcXVhZHRyZWUoZGF0YSkgewotICAgICAgdmFyIGQsIGZ4ID0gZDNf
ZnVuY3Rvcih4KSwgZnkgPSBkM19mdW5jdG9yKHkpLCB4cywgeXMsIGksIG4sIHgxXywgeTFfLCB4
Ml8sIHkyXzsKLSAgICAgIGlmICh4MSAhPSBudWxsKSB7Ci0gICAgICAgIHgxXyA9IHgxLCB5MV8g
PSB5MSwgeDJfID0geDIsIHkyXyA9IHkyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgeDJfID0g
eTJfID0gLSh4MV8gPSB5MV8gPSBJbmZpbml0eSk7Ci0gICAgICAgIHhzID0gW10sIHlzID0gW107
Ci0gICAgICAgIG4gPSBkYXRhLmxlbmd0aDsKLSAgICAgICAgaWYgKGNvbXBhdCkgZm9yIChpID0g
MDsgaSA8IG47ICsraSkgewotICAgICAgICAgIGQgPSBkYXRhW2ldOwotICAgICAgICAgIGlmIChk
LnggPCB4MV8pIHgxXyA9IGQueDsKLSAgICAgICAgICBpZiAoZC55IDwgeTFfKSB5MV8gPSBkLnk7
Ci0gICAgICAgICAgaWYgKGQueCA+IHgyXykgeDJfID0gZC54OwotICAgICAgICAgIGlmIChkLnkg
PiB5Ml8pIHkyXyA9IGQueTsKLSAgICAgICAgICB4cy5wdXNoKGQueCk7Ci0gICAgICAgICAgeXMu
cHVzaChkLnkpOwotICAgICAgICB9IGVsc2UgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotICAg
ICAgICAgIHZhciB4XyA9ICtmeChkID0gZGF0YVtpXSwgaSksIHlfID0gK2Z5KGQsIGkpOwotICAg
ICAgICAgIGlmICh4XyA8IHgxXykgeDFfID0geF87Ci0gICAgICAgICAgaWYgKHlfIDwgeTFfKSB5
MV8gPSB5XzsKLSAgICAgICAgICBpZiAoeF8gPiB4Ml8pIHgyXyA9IHhfOwotICAgICAgICAgIGlm
ICh5XyA+IHkyXykgeTJfID0geV87Ci0gICAgICAgICAgeHMucHVzaCh4Xyk7Ci0gICAgICAgICAg
eXMucHVzaCh5Xyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHZhciBkeCA9IHgyXyAtIHgx
XywgZHkgPSB5Ml8gLSB5MV87Ci0gICAgICBpZiAoZHggPiBkeSkgeTJfID0geTFfICsgZHg7IGVs
c2UgeDJfID0geDFfICsgZHk7Ci0gICAgICBmdW5jdGlvbiBpbnNlcnQobiwgZCwgeCwgeSwgeDEs
IHkxLCB4MiwgeTIpIHsKLSAgICAgICAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm47
Ci0gICAgICAgIGlmIChuLmxlYWYpIHsKLSAgICAgICAgICB2YXIgbnggPSBuLngsIG55ID0gbi55
OwotICAgICAgICAgIGlmIChueCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoYWJzKG54IC0g
eCkgKyBhYnMobnkgLSB5KSA8IC4wMSkgewotICAgICAgICAgICAgICBpbnNlcnRDaGlsZChuLCBk
LCB4LCB5LCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICB2YXIgblBvaW50ID0gbi5wb2ludDsKLSAgICAgICAgICAgICAgbi54ID0gbi55ID0gbi5w
b2ludCA9IG51bGw7Ci0gICAgICAgICAgICAgIGluc2VydENoaWxkKG4sIG5Qb2ludCwgbngsIG55
LCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgICAgICAgICAgIGluc2VydENoaWxkKG4sIGQsIHgsIHks
IHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbi54ID0geCwgbi55ID0geSwgbi5wb2ludCA9IGQ7Ci0gICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGluc2VydENoaWxkKG4sIGQsIHgsIHksIHgxLCB5MSwg
eDIsIHkyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZnVuY3Rpb24gaW5zZXJ0Q2hpbGQo
biwgZCwgeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICAgICAgdmFyIHN4ID0gKHgxICsgeDIp
ICogLjUsIHN5ID0gKHkxICsgeTIpICogLjUsIHJpZ2h0ID0geCA+PSBzeCwgYm90dG9tID0geSA+
PSBzeSwgaSA9IChib3R0b20gPDwgMSkgKyByaWdodDsKLSAgICAgICAgbi5sZWFmID0gZmFsc2U7
Ci0gICAgICAgIG4gPSBuLm5vZGVzW2ldIHx8IChuLm5vZGVzW2ldID0gZDNfZ2VvbV9xdWFkdHJl
ZU5vZGUoKSk7Ci0gICAgICAgIGlmIChyaWdodCkgeDEgPSBzeDsgZWxzZSB4MiA9IHN4OwotICAg
ICAgICBpZiAoYm90dG9tKSB5MSA9IHN5OyBlbHNlIHkyID0gc3k7Ci0gICAgICAgIGluc2VydChu
LCBkLCB4LCB5LCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgICB9Ci0gICAgICB2YXIgcm9vdCA9IGQz
X2dlb21fcXVhZHRyZWVOb2RlKCk7Ci0gICAgICByb290LmFkZCA9IGZ1bmN0aW9uKGQpIHsKLSAg
ICAgICAgaW5zZXJ0KHJvb3QsIGQsICtmeChkLCArK2kpLCArZnkoZCwgaSksIHgxXywgeTFfLCB4
Ml8sIHkyXyk7Ci0gICAgICB9OwotICAgICAgcm9vdC52aXNpdCA9IGZ1bmN0aW9uKGYpIHsKLSAg
ICAgICAgZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsIHJvb3QsIHgxXywgeTFfLCB4Ml8sIHkyXyk7
Ci0gICAgICB9OwotICAgICAgaSA9IC0xOwotICAgICAgaWYgKHgxID09IG51bGwpIHsKLSAgICAg
ICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgICBpbnNlcnQocm9vdCwgZGF0YVtpXSwgeHNb
aV0sIHlzW2ldLCB4MV8sIHkxXywgeDJfLCB5Ml8pOwotICAgICAgICB9Ci0gICAgICAgIC0taTsK
LSAgICAgIH0gZWxzZSBkYXRhLmZvckVhY2gocm9vdC5hZGQpOwotICAgICAgeHMgPSB5cyA9IGRh
dGEgPSBkID0gbnVsbDsKLSAgICAgIHJldHVybiByb290OwotICAgIH0KLSAgICBxdWFkdHJlZS54
ID0gZnVuY3Rpb24oXykgewotICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IF8s
IHF1YWR0cmVlKSA6IHg7Ci0gICAgfTsKLSAgICBxdWFkdHJlZS55ID0gZnVuY3Rpb24oXykgewot
ICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IF8sIHF1YWR0cmVlKSA6IHk7Ci0g
ICAgfTsKLSAgICBxdWFkdHJlZS5leHRlbnQgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHJldHVybiB4MSA9PSBudWxsID8gbnVsbCA6IFsgWyB4MSwgeTEgXSwg
WyB4MiwgeTIgXSBdOwotICAgICAgaWYgKF8gPT0gbnVsbCkgeDEgPSB5MSA9IHgyID0geTIgPSBu
dWxsOyBlbHNlIHgxID0gK19bMF1bMF0sIHkxID0gK19bMF1bMV0sIHgyID0gK19bMV1bMF0sIAot
ICAgICAgeTIgPSArX1sxXVsxXTsKLSAgICAgIHJldHVybiBxdWFkdHJlZTsKLSAgICB9OwotICAg
IHF1YWR0cmVlLnNpemUgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiB4MSA9PSBudWxsID8gbnVsbCA6IFsgeDIgLSB4MSwgeTIgLSB5MSBdOwotICAg
ICAgaWYgKF8gPT0gbnVsbCkgeDEgPSB5MSA9IHgyID0geTIgPSBudWxsOyBlbHNlIHgxID0geTEg
PSAwLCB4MiA9ICtfWzBdLCB5MiA9ICtfWzFdOwotICAgICAgcmV0dXJuIHF1YWR0cmVlOwotICAg
IH07Ci0gICAgcmV0dXJuIHF1YWR0cmVlOwotICB9OwotICBmdW5jdGlvbiBkM19nZW9tX3F1YWR0
cmVlQ29tcGF0WChkKSB7Ci0gICAgcmV0dXJuIGQueDsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9t
X3F1YWR0cmVlQ29tcGF0WShkKSB7Ci0gICAgcmV0dXJuIGQueTsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9tX3F1YWR0cmVlTm9kZSgpIHsKLSAgICByZXR1cm4gewotICAgICAgbGVhZjogdHJ1ZSwK
LSAgICAgIG5vZGVzOiBbXSwKLSAgICAgIHBvaW50OiBudWxsLAotICAgICAgeDogbnVsbCwKLSAg
ICAgIHk6IG51bGwKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fcXVhZHRyZWVWaXNp
dChmLCBub2RlLCB4MSwgeTEsIHgyLCB5MikgewotICAgIGlmICghZihub2RlLCB4MSwgeTEsIHgy
LCB5MikpIHsKLSAgICAgIHZhciBzeCA9ICh4MSArIHgyKSAqIC41LCBzeSA9ICh5MSArIHkyKSAq
IC41LCBjaGlsZHJlbiA9IG5vZGUubm9kZXM7Ci0gICAgICBpZiAoY2hpbGRyZW5bMF0pIGQzX2dl
b21fcXVhZHRyZWVWaXNpdChmLCBjaGlsZHJlblswXSwgeDEsIHkxLCBzeCwgc3kpOwotICAgICAg
aWYgKGNoaWxkcmVuWzFdKSBkM19nZW9tX3F1YWR0cmVlVmlzaXQoZiwgY2hpbGRyZW5bMV0sIHN4
LCB5MSwgeDIsIHN5KTsKLSAgICAgIGlmIChjaGlsZHJlblsyXSkgZDNfZ2VvbV9xdWFkdHJlZVZp
c2l0KGYsIGNoaWxkcmVuWzJdLCB4MSwgc3ksIHN4LCB5Mik7Ci0gICAgICBpZiAoY2hpbGRyZW5b
M10pIGQzX2dlb21fcXVhZHRyZWVWaXNpdChmLCBjaGlsZHJlblszXSwgc3gsIHN5LCB4MiwgeTIp
OwotICAgIH0KLSAgfQotICBkMy5pbnRlcnBvbGF0ZVJnYiA9IGQzX2ludGVycG9sYXRlUmdiOwot
ICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVJnYihhLCBiKSB7Ci0gICAgYSA9IGQzLnJnYihhKTsK
LSAgICBiID0gZDMucmdiKGIpOwotICAgIHZhciBhciA9IGEuciwgYWcgPSBhLmcsIGFiID0gYS5i
LCBiciA9IGIuciAtIGFyLCBiZyA9IGIuZyAtIGFnLCBiYiA9IGIuYiAtIGFiOwotICAgIHJldHVy
biBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gIiMiICsgZDNfcmdiX2hleChNYXRoLnJvdW5k
KGFyICsgYnIgKiB0KSkgKyBkM19yZ2JfaGV4KE1hdGgucm91bmQoYWcgKyBiZyAqIHQpKSArIGQz
X3JnYl9oZXgoTWF0aC5yb3VuZChhYiArIGJiICogdCkpOwotICAgIH07Ci0gIH0KLSAgZDMuaW50
ZXJwb2xhdGVPYmplY3QgPSBkM19pbnRlcnBvbGF0ZU9iamVjdDsKLSAgZnVuY3Rpb24gZDNfaW50
ZXJwb2xhdGVPYmplY3QoYSwgYikgewotICAgIHZhciBpID0ge30sIGMgPSB7fSwgazsKLSAgICBm
b3IgKGsgaW4gYSkgewotICAgICAgaWYgKGsgaW4gYikgewotICAgICAgICBpW2tdID0gZDNfaW50
ZXJwb2xhdGUoYVtrXSwgYltrXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjW2tdID0gYVtr
XTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChrIGluIGIpIHsKLSAgICAgIGlmICghKGsgaW4g
YSkpIHsKLSAgICAgICAgY1trXSA9IGJba107Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBm
dW5jdGlvbih0KSB7Ci0gICAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7Ci0gICAgICBy
ZXR1cm4gYzsKLSAgICB9OwotICB9Ci0gIGQzLmludGVycG9sYXRlTnVtYmVyID0gZDNfaW50ZXJw
b2xhdGVOdW1iZXI7Ci0gIGZ1bmN0aW9uIGQzX2ludGVycG9sYXRlTnVtYmVyKGEsIGIpIHsKLSAg
ICBiIC09IGEgPSArYTsKLSAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIGEg
KyBiICogdDsKLSAgICB9OwotICB9Ci0gIGQzLmludGVycG9sYXRlU3RyaW5nID0gZDNfaW50ZXJw
b2xhdGVTdHJpbmc7Ci0gIGZ1bmN0aW9uIGQzX2ludGVycG9sYXRlU3RyaW5nKGEsIGIpIHsKLSAg
ICB2YXIgYmkgPSBkM19pbnRlcnBvbGF0ZV9udW1iZXJBLmxhc3RJbmRleCA9IGQzX2ludGVycG9s
YXRlX251bWJlckIubGFzdEluZGV4ID0gMCwgYW0sIGJtLCBicywgaSA9IC0xLCBzID0gW10sIHEg
PSBbXTsKLSAgICBhID0gYSArICIiLCBiID0gYiArICIiOwotICAgIHdoaWxlICgoYW0gPSBkM19p
bnRlcnBvbGF0ZV9udW1iZXJBLmV4ZWMoYSkpICYmIChibSA9IGQzX2ludGVycG9sYXRlX251bWJl
ckIuZXhlYyhiKSkpIHsKLSAgICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgewotICAgICAg
ICBicyA9IGIuc3Vic3RyaW5nKGJpLCBicyk7Ci0gICAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJz
OyBlbHNlIHNbKytpXSA9IGJzOwotICAgICAgfQotICAgICAgaWYgKChhbSA9IGFtWzBdKSA9PT0g
KGJtID0gYm1bMF0pKSB7Ci0gICAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyBlbHNlIHNbKytp
XSA9IGJtOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc1srK2ldID0gbnVsbDsKLSAgICAgICAg
cS5wdXNoKHsKLSAgICAgICAgICBpOiBpLAotICAgICAgICAgIHg6IGQzX2ludGVycG9sYXRlTnVt
YmVyKGFtLCBibSkKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBiaSA9IGQzX2ludGVycG9s
YXRlX251bWJlckIubGFzdEluZGV4OwotICAgIH0KLSAgICBpZiAoYmkgPCBiLmxlbmd0aCkgewot
ICAgICAgYnMgPSBiLnN1YnN0cmluZyhiaSk7Ci0gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsg
ZWxzZSBzWysraV0gPSBiczsKLSAgICB9Ci0gICAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IHFbMF0g
PyAoYiA9IHFbMF0ueCwgZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIGIodCkgKyAiIjsKLSAg
ICB9KSA6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGI7Ci0gICAgfSA6IChiID0gcS5sZW5n
dGgsIGZ1bmN0aW9uKHQpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBz
WyhvID0gcVtpXSkuaV0gPSBvLngodCk7Ci0gICAgICByZXR1cm4gcy5qb2luKCIiKTsKLSAgICB9
KTsKLSAgfQotICB2YXIgZDNfaW50ZXJwb2xhdGVfbnVtYmVyQSA9IC9bLStdPyg/OlxkK1wuP1xk
KnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZywgZDNfaW50ZXJwb2xhdGVfbnVtYmVyQiA9IG5l
dyBSZWdFeHAoZDNfaW50ZXJwb2xhdGVfbnVtYmVyQS5zb3VyY2UsICJnIik7Ci0gIGQzLmludGVy
cG9sYXRlID0gZDNfaW50ZXJwb2xhdGU7Ci0gIGZ1bmN0aW9uIGQzX2ludGVycG9sYXRlKGEsIGIp
IHsKLSAgICB2YXIgaSA9IGQzLmludGVycG9sYXRvcnMubGVuZ3RoLCBmOwotICAgIHdoaWxlICgt
LWkgPj0gMCAmJiAhKGYgPSBkMy5pbnRlcnBvbGF0b3JzW2ldKGEsIGIpKSkgOwotICAgIHJldHVy
biBmOwotICB9Ci0gIGQzLmludGVycG9sYXRvcnMgPSBbIGZ1bmN0aW9uKGEsIGIpIHsKLSAgICB2
YXIgdCA9IHR5cGVvZiBiOwotICAgIHJldHVybiAodCA9PT0gInN0cmluZyIgPyBkM19yZ2JfbmFt
ZXMuaGFzKGIpIHx8IC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KGIpID8gZDNfaW50ZXJwb2xhdGVS
Z2IgOiBkM19pbnRlcnBvbGF0ZVN0cmluZyA6IGIgaW5zdGFuY2VvZiBkM19jb2xvciA/IGQzX2lu
dGVycG9sYXRlUmdiIDogQXJyYXkuaXNBcnJheShiKSA/IGQzX2ludGVycG9sYXRlQXJyYXkgOiB0
ID09PSAib2JqZWN0IiAmJiBpc05hTihiKSA/IGQzX2ludGVycG9sYXRlT2JqZWN0IDogZDNfaW50
ZXJwb2xhdGVOdW1iZXIpKGEsIGIpOwotICB9IF07Ci0gIGQzLmludGVycG9sYXRlQXJyYXkgPSBk
M19pbnRlcnBvbGF0ZUFycmF5OwotICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZUFycmF5KGEsIGIp
IHsKLSAgICB2YXIgeCA9IFtdLCBjID0gW10sIG5hID0gYS5sZW5ndGgsIG5iID0gYi5sZW5ndGgs
IG4wID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKSwgaTsKLSAgICBmb3IgKGkgPSAwOyBp
IDwgbjA7ICsraSkgeC5wdXNoKGQzX2ludGVycG9sYXRlKGFbaV0sIGJbaV0pKTsKLSAgICBmb3Ig
KDtpIDwgbmE7ICsraSkgY1tpXSA9IGFbaV07Ci0gICAgZm9yICg7aSA8IG5iOyArK2kpIGNbaV0g
PSBiW2ldOwotICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwg
bjA7ICsraSkgY1tpXSA9IHhbaV0odCk7Ci0gICAgICByZXR1cm4gYzsKLSAgICB9OwotICB9Ci0g
IHZhciBkM19lYXNlX2RlZmF1bHQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfaWRlbnRp
dHk7Ci0gIH07Ci0gIHZhciBkM19lYXNlID0gZDMubWFwKHsKLSAgICBsaW5lYXI6IGQzX2Vhc2Vf
ZGVmYXVsdCwKLSAgICBwb2x5OiBkM19lYXNlX3BvbHksCi0gICAgcXVhZDogZnVuY3Rpb24oKSB7
Ci0gICAgICByZXR1cm4gZDNfZWFzZV9xdWFkOwotICAgIH0sCi0gICAgY3ViaWM6IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIGQzX2Vhc2VfY3ViaWM7Ci0gICAgfSwKLSAgICBzaW46IGZ1bmN0
aW9uKCkgewotICAgICAgcmV0dXJuIGQzX2Vhc2Vfc2luOwotICAgIH0sCi0gICAgZXhwOiBmdW5j
dGlvbigpIHsKLSAgICAgIHJldHVybiBkM19lYXNlX2V4cDsKLSAgICB9LAotICAgIGNpcmNsZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfZWFzZV9jaXJjbGU7Ci0gICAgfSwKLSAgICBl
bGFzdGljOiBkM19lYXNlX2VsYXN0aWMsCi0gICAgYmFjazogZDNfZWFzZV9iYWNrLAotICAgIGJv
dW5jZTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfZWFzZV9ib3VuY2U7Ci0gICAgfQot
ICB9KTsKLSAgdmFyIGQzX2Vhc2VfbW9kZSA9IGQzLm1hcCh7Ci0gICAgImluIjogZDNfaWRlbnRp
dHksCi0gICAgb3V0OiBkM19lYXNlX3JldmVyc2UsCi0gICAgImluLW91dCI6IGQzX2Vhc2VfcmVm
bGVjdCwKLSAgICAib3V0LWluIjogZnVuY3Rpb24oZikgewotICAgICAgcmV0dXJuIGQzX2Vhc2Vf
cmVmbGVjdChkM19lYXNlX3JldmVyc2UoZikpOwotICAgIH0KLSAgfSk7Ci0gIGQzLmVhc2UgPSBm
dW5jdGlvbihuYW1lKSB7Ci0gICAgdmFyIGkgPSBuYW1lLmluZGV4T2YoIi0iKSwgdCA9IGkgPj0g
MCA/IG5hbWUuc3Vic3RyaW5nKDAsIGkpIDogbmFtZSwgbSA9IGkgPj0gMCA/IG5hbWUuc3Vic3Ry
aW5nKGkgKyAxKSA6ICJpbiI7Ci0gICAgdCA9IGQzX2Vhc2UuZ2V0KHQpIHx8IGQzX2Vhc2VfZGVm
YXVsdDsKLSAgICBtID0gZDNfZWFzZV9tb2RlLmdldChtKSB8fCBkM19pZGVudGl0eTsKLSAgICBy
ZXR1cm4gZDNfZWFzZV9jbGFtcChtKHQuYXBwbHkobnVsbCwgZDNfYXJyYXlTbGljZS5jYWxsKGFy
Z3VtZW50cywgMSkpKSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2Vhc2VfY2xhbXAoZikgewotICAg
IHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gdCA8PSAwID8gMCA6IHQgPj0gMSA/
IDEgOiBmKHQpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZWFzZV9yZXZlcnNlKGYpIHsK
LSAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIDEgLSBmKDEgLSB0KTsKLSAg
ICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Vhc2VfcmVmbGVjdChmKSB7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKHQpIHsKLSAgICAgIHJldHVybiAuNSAqICh0IDwgLjUgPyBmKDIgKiB0KSA6IDIgLSBm
KDIgLSAyICogdCkpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZWFzZV9xdWFkKHQpIHsK
LSAgICByZXR1cm4gdCAqIHQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZWFzZV9jdWJpYyh0KSB7Ci0g
ICAgcmV0dXJuIHQgKiB0ICogdDsKLSAgfQotICBmdW5jdGlvbiBkM19lYXNlX2N1YmljSW5PdXQo
dCkgewotICAgIGlmICh0IDw9IDApIHJldHVybiAwOwotICAgIGlmICh0ID49IDEpIHJldHVybiAx
OwotICAgIHZhciB0MiA9IHQgKiB0LCB0MyA9IHQyICogdDsKLSAgICByZXR1cm4gNCAqICh0IDwg
LjUgPyB0MyA6IDMgKiAodCAtIHQyKSArIHQzIC0gLjc1KTsKLSAgfQotICBmdW5jdGlvbiBkM19l
YXNlX3BvbHkoZSkgewotICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gTWF0
aC5wb3codCwgZSk7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19lYXNlX3Npbih0KSB7Ci0g
ICAgcmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogaGFsZs+AKTsKLSAgfQotICBmdW5jdGlvbiBkM19l
YXNlX2V4cCh0KSB7Ci0gICAgcmV0dXJuIE1hdGgucG93KDIsIDEwICogKHQgLSAxKSk7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfZWFzZV9jaXJjbGUodCkgewotICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0
KDEgLSB0ICogdCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZWFzZV9lbGFzdGljKGEsIHApIHsKLSAg
ICB2YXIgczsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHAgPSAuNDU7Ci0gICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGgpIHMgPSBwIC8gz4QgKiBNYXRoLmFzaW4oMSAvIGEpOyBlbHNlIGEg
PSAxLCBzID0gcCAvIDQ7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHJldHVybiAx
ICsgYSAqIE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHQgLSBzKSAqIM+EIC8gcCk7
Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19lYXNlX2JhY2socykgewotICAgIGlmICghcykg
cyA9IDEuNzAxNTg7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHJldHVybiB0ICog
dCAqICgocyArIDEpICogdCAtIHMpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZWFzZV9i
b3VuY2UodCkgewotICAgIHJldHVybiB0IDwgMSAvIDIuNzUgPyA3LjU2MjUgKiB0ICogdCA6IHQg
PCAyIC8gMi43NSA/IDcuNTYyNSAqICh0IC09IDEuNSAvIDIuNzUpICogdCArIC43NSA6IHQgPCAy
LjUgLyAyLjc1ID8gNy41NjI1ICogKHQgLT0gMi4yNSAvIDIuNzUpICogdCArIC45Mzc1IDogNy41
NjI1ICogKHQgLT0gMi42MjUgLyAyLjc1KSAqIHQgKyAuOTg0Mzc1OwotICB9Ci0gIGQzLmludGVy
cG9sYXRlSGNsID0gZDNfaW50ZXJwb2xhdGVIY2w7Ci0gIGZ1bmN0aW9uIGQzX2ludGVycG9sYXRl
SGNsKGEsIGIpIHsKLSAgICBhID0gZDMuaGNsKGEpOwotICAgIGIgPSBkMy5oY2woYik7Ci0gICAg
dmFyIGFoID0gYS5oLCBhYyA9IGEuYywgYWwgPSBhLmwsIGJoID0gYi5oIC0gYWgsIGJjID0gYi5j
IC0gYWMsIGJsID0gYi5sIC0gYWw7Ci0gICAgaWYgKGlzTmFOKGJjKSkgYmMgPSAwLCBhYyA9IGlz
TmFOKGFjKSA/IGIuYyA6IGFjOwotICAgIGlmIChpc05hTihiaCkpIGJoID0gMCwgYWggPSBpc05h
TihhaCkgPyBiLmggOiBhaDsgZWxzZSBpZiAoYmggPiAxODApIGJoIC09IDM2MDsgZWxzZSBpZiAo
YmggPCAtMTgwKSBiaCArPSAzNjA7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHJl
dHVybiBkM19oY2xfbGFiKGFoICsgYmggKiB0LCBhYyArIGJjICogdCwgYWwgKyBibCAqIHQpICsg
IiI7Ci0gICAgfTsKLSAgfQotICBkMy5pbnRlcnBvbGF0ZUhzbCA9IGQzX2ludGVycG9sYXRlSHNs
OwotICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZUhzbChhLCBiKSB7Ci0gICAgYSA9IGQzLmhzbChh
KTsKLSAgICBiID0gZDMuaHNsKGIpOwotICAgIHZhciBhaCA9IGEuaCwgYXMgPSBhLnMsIGFsID0g
YS5sLCBiaCA9IGIuaCAtIGFoLCBicyA9IGIucyAtIGFzLCBibCA9IGIubCAtIGFsOwotICAgIGlm
IChpc05hTihicykpIGJzID0gMCwgYXMgPSBpc05hTihhcykgPyBiLnMgOiBhczsKLSAgICBpZiAo
aXNOYU4oYmgpKSBiaCA9IDAsIGFoID0gaXNOYU4oYWgpID8gYi5oIDogYWg7IGVsc2UgaWYgKGJo
ID4gMTgwKSBiaCAtPSAzNjA7IGVsc2UgaWYgKGJoIDwgLTE4MCkgYmggKz0gMzYwOwotICAgIHJl
dHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gZDNfaHNsX3JnYihhaCArIGJoICogdCwg
YXMgKyBicyAqIHQsIGFsICsgYmwgKiB0KSArICIiOwotICAgIH07Ci0gIH0KLSAgZDMuaW50ZXJw
b2xhdGVMYWIgPSBkM19pbnRlcnBvbGF0ZUxhYjsKLSAgZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVM
YWIoYSwgYikgewotICAgIGEgPSBkMy5sYWIoYSk7Ci0gICAgYiA9IGQzLmxhYihiKTsKLSAgICB2
YXIgYWwgPSBhLmwsIGFhID0gYS5hLCBhYiA9IGEuYiwgYmwgPSBiLmwgLSBhbCwgYmEgPSBiLmEg
LSBhYSwgYmIgPSBiLmIgLSBhYjsKLSAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0
dXJuIGQzX2xhYl9yZ2IoYWwgKyBibCAqIHQsIGFhICsgYmEgKiB0LCBhYiArIGJiICogdCkgKyAi
IjsKLSAgICB9OwotICB9Ci0gIGQzLmludGVycG9sYXRlUm91bmQgPSBkM19pbnRlcnBvbGF0ZVJv
dW5kOwotICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZVJvdW5kKGEsIGIpIHsKLSAgICBiIC09IGE7
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKyBi
ICogdCk7Ci0gICAgfTsKLSAgfQotICBkMy50cmFuc2Zvcm0gPSBmdW5jdGlvbihzdHJpbmcpIHsK
LSAgICB2YXIgZyA9IGQzX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkMy5ucy5wcmVmaXguc3Zn
LCAiZyIpOwotICAgIHJldHVybiAoZDMudHJhbnNmb3JtID0gZnVuY3Rpb24oc3RyaW5nKSB7Ci0g
ICAgICBpZiAoc3RyaW5nICE9IG51bGwpIHsKLSAgICAgICAgZy5zZXRBdHRyaWJ1dGUoInRyYW5z
Zm9ybSIsIHN0cmluZyk7Ci0gICAgICAgIHZhciB0ID0gZy50cmFuc2Zvcm0uYmFzZVZhbC5jb25z
b2xpZGF0ZSgpOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBkM190cmFuc2Zvcm0odCA/IHQu
bWF0cml4IDogZDNfdHJhbnNmb3JtSWRlbnRpdHkpOwotICAgIH0pKHN0cmluZyk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIGQzX3RyYW5zZm9ybShtKSB7Ci0gICAgdmFyIHIwID0gWyBtLmEsIG0uYiBdLCBy
MSA9IFsgbS5jLCBtLmQgXSwga3ggPSBkM190cmFuc2Zvcm1Ob3JtYWxpemUocjApLCBreiA9IGQz
X3RyYW5zZm9ybURvdChyMCwgcjEpLCBreSA9IGQzX3RyYW5zZm9ybU5vcm1hbGl6ZShkM190cmFu
c2Zvcm1Db21iaW5lKHIxLCByMCwgLWt6KSkgfHwgMDsKLSAgICBpZiAocjBbMF0gKiByMVsxXSA8
IHIxWzBdICogcjBbMV0pIHsKLSAgICAgIHIwWzBdICo9IC0xOwotICAgICAgcjBbMV0gKj0gLTE7
Ci0gICAgICBreCAqPSAtMTsKLSAgICAgIGt6ICo9IC0xOwotICAgIH0KLSAgICB0aGlzLnJvdGF0
ZSA9IChreCA/IE1hdGguYXRhbjIocjBbMV0sIHIwWzBdKSA6IE1hdGguYXRhbjIoLXIxWzBdLCBy
MVsxXSkpICogZDNfZGVncmVlczsKLSAgICB0aGlzLnRyYW5zbGF0ZSA9IFsgbS5lLCBtLmYgXTsK
LSAgICB0aGlzLnNjYWxlID0gWyBreCwga3kgXTsKLSAgICB0aGlzLnNrZXcgPSBreSA/IE1hdGgu
YXRhbjIoa3osIGt5KSAqIGQzX2RlZ3JlZXMgOiAwOwotICB9Ci0gIGQzX3RyYW5zZm9ybS5wcm90
b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gInRyYW5zbGF0ZSgiICsg
dGhpcy50cmFuc2xhdGUgKyAiKXJvdGF0ZSgiICsgdGhpcy5yb3RhdGUgKyAiKXNrZXdYKCIgKyB0
aGlzLnNrZXcgKyAiKXNjYWxlKCIgKyB0aGlzLnNjYWxlICsgIikiOwotICB9OwotICBmdW5jdGlv
biBkM190cmFuc2Zvcm1Eb3QoYSwgYikgewotICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0g
KiBiWzFdOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RyYW5zZm9ybU5vcm1hbGl6ZShhKSB7Ci0gICAg
dmFyIGsgPSBNYXRoLnNxcnQoZDNfdHJhbnNmb3JtRG90KGEsIGEpKTsKLSAgICBpZiAoaykgewot
ICAgICAgYVswXSAvPSBrOwotICAgICAgYVsxXSAvPSBrOwotICAgIH0KLSAgICByZXR1cm4gazsK
LSAgfQotICBmdW5jdGlvbiBkM190cmFuc2Zvcm1Db21iaW5lKGEsIGIsIGspIHsKLSAgICBhWzBd
ICs9IGsgKiBiWzBdOwotICAgIGFbMV0gKz0gayAqIGJbMV07Ci0gICAgcmV0dXJuIGE7Ci0gIH0K
LSAgdmFyIGQzX3RyYW5zZm9ybUlkZW50aXR5ID0gewotICAgIGE6IDEsCi0gICAgYjogMCwKLSAg
ICBjOiAwLAotICAgIGQ6IDEsCi0gICAgZTogMCwKLSAgICBmOiAwCi0gIH07Ci0gIGQzLmludGVy
cG9sYXRlVHJhbnNmb3JtID0gZDNfaW50ZXJwb2xhdGVUcmFuc2Zvcm07Ci0gIGZ1bmN0aW9uIGQz
X2ludGVycG9sYXRlVHJhbnNmb3JtKGEsIGIpIHsKLSAgICB2YXIgcyA9IFtdLCBxID0gW10sIG4s
IEEgPSBkMy50cmFuc2Zvcm0oYSksIEIgPSBkMy50cmFuc2Zvcm0oYiksIHRhID0gQS50cmFuc2xh
dGUsIHRiID0gQi50cmFuc2xhdGUsIHJhID0gQS5yb3RhdGUsIHJiID0gQi5yb3RhdGUsIHdhID0g
QS5za2V3LCB3YiA9IEIuc2tldywga2EgPSBBLnNjYWxlLCBrYiA9IEIuc2NhbGU7Ci0gICAgaWYg
KHRhWzBdICE9IHRiWzBdIHx8IHRhWzFdICE9IHRiWzFdKSB7Ci0gICAgICBzLnB1c2goInRyYW5z
bGF0ZSgiLCBudWxsLCAiLCIsIG51bGwsICIpIik7Ci0gICAgICBxLnB1c2goewotICAgICAgICBp
OiAxLAotICAgICAgICB4OiBkM19pbnRlcnBvbGF0ZU51bWJlcih0YVswXSwgdGJbMF0pCi0gICAg
ICB9LCB7Ci0gICAgICAgIGk6IDMsCi0gICAgICAgIHg6IGQzX2ludGVycG9sYXRlTnVtYmVyKHRh
WzFdLCB0YlsxXSkKLSAgICAgIH0pOwotICAgIH0gZWxzZSBpZiAodGJbMF0gfHwgdGJbMV0pIHsK
LSAgICAgIHMucHVzaCgidHJhbnNsYXRlKCIgKyB0YiArICIpIik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHMucHVzaCgiIik7Ci0gICAgfQotICAgIGlmIChyYSAhPSByYikgewotICAgICAgaWYgKHJh
IC0gcmIgPiAxODApIHJiICs9IDM2MDsgZWxzZSBpZiAocmIgLSByYSA+IDE4MCkgcmEgKz0gMzYw
OwotICAgICAgcS5wdXNoKHsKLSAgICAgICAgaTogcy5wdXNoKHMucG9wKCkgKyAicm90YXRlKCIs
IG51bGwsICIpIikgLSAyLAotICAgICAgICB4OiBkM19pbnRlcnBvbGF0ZU51bWJlcihyYSwgcmIp
Ci0gICAgICB9KTsKLSAgICB9IGVsc2UgaWYgKHJiKSB7Ci0gICAgICBzLnB1c2gocy5wb3AoKSAr
ICJyb3RhdGUoIiArIHJiICsgIikiKTsKLSAgICB9Ci0gICAgaWYgKHdhICE9IHdiKSB7Ci0gICAg
ICBxLnB1c2goewotICAgICAgICBpOiBzLnB1c2gocy5wb3AoKSArICJza2V3WCgiLCBudWxsLCAi
KSIpIC0gMiwKLSAgICAgICAgeDogZDNfaW50ZXJwb2xhdGVOdW1iZXIod2EsIHdiKQotICAgICAg
fSk7Ci0gICAgfSBlbHNlIGlmICh3YikgewotICAgICAgcy5wdXNoKHMucG9wKCkgKyAic2tld1go
IiArIHdiICsgIikiKTsKLSAgICB9Ci0gICAgaWYgKGthWzBdICE9IGtiWzBdIHx8IGthWzFdICE9
IGtiWzFdKSB7Ci0gICAgICBuID0gcy5wdXNoKHMucG9wKCkgKyAic2NhbGUoIiwgbnVsbCwgIiwi
LCBudWxsLCAiKSIpOwotICAgICAgcS5wdXNoKHsKLSAgICAgICAgaTogbiAtIDQsCi0gICAgICAg
IHg6IGQzX2ludGVycG9sYXRlTnVtYmVyKGthWzBdLCBrYlswXSkKLSAgICAgIH0sIHsKLSAgICAg
ICAgaTogbiAtIDIsCi0gICAgICAgIHg6IGQzX2ludGVycG9sYXRlTnVtYmVyKGthWzFdLCBrYlsx
XSkKLSAgICAgIH0pOwotICAgIH0gZWxzZSBpZiAoa2JbMF0gIT0gMSB8fCBrYlsxXSAhPSAxKSB7
Ci0gICAgICBzLnB1c2gocy5wb3AoKSArICJzY2FsZSgiICsga2IgKyAiKSIpOwotICAgIH0KLSAg
ICBuID0gcS5sZW5ndGg7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHZhciBpID0g
LTEsIG87Ci0gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpOwot
ICAgICAgcmV0dXJuIHMuam9pbigiIik7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM191bmlu
dGVycG9sYXRlTnVtYmVyKGEsIGIpIHsKLSAgICBiID0gYiAtIChhID0gK2EpID8gMSAvIChiIC0g
YSkgOiAwOwotICAgIHJldHVybiBmdW5jdGlvbih4KSB7Ci0gICAgICByZXR1cm4gKHggLSBhKSAq
IGI7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM191bmludGVycG9sYXRlQ2xhbXAoYSwgYikg
ewotICAgIGIgPSBiIC0gKGEgPSArYSkgPyAxIC8gKGIgLSBhKSA6IDA7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAoeCAtIGEp
ICogYikpOwotICAgIH07Ci0gIH0KLSAgZDMubGF5b3V0ID0ge307Ci0gIGQzLmxheW91dC5idW5k
bGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24obGlua3MpIHsKLSAgICAgIHZh
ciBwYXRocyA9IFtdLCBpID0gLTEsIG4gPSBsaW5rcy5sZW5ndGg7Ci0gICAgICB3aGlsZSAoKytp
IDwgbikgcGF0aHMucHVzaChkM19sYXlvdXRfYnVuZGxlUGF0aChsaW5rc1tpXSkpOwotICAgICAg
cmV0dXJuIHBhdGhzOwotICAgIH07Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9idW5kbGVQ
YXRoKGxpbmspIHsKLSAgICB2YXIgc3RhcnQgPSBsaW5rLnNvdXJjZSwgZW5kID0gbGluay50YXJn
ZXQsIGxjYSA9IGQzX2xheW91dF9idW5kbGVMZWFzdENvbW1vbkFuY2VzdG9yKHN0YXJ0LCBlbmQp
LCBwb2ludHMgPSBbIHN0YXJ0IF07Ci0gICAgd2hpbGUgKHN0YXJ0ICE9PSBsY2EpIHsKLSAgICAg
IHN0YXJ0ID0gc3RhcnQucGFyZW50OwotICAgICAgcG9pbnRzLnB1c2goc3RhcnQpOwotICAgIH0K
LSAgICB2YXIgayA9IHBvaW50cy5sZW5ndGg7Ci0gICAgd2hpbGUgKGVuZCAhPT0gbGNhKSB7Ci0g
ICAgICBwb2ludHMuc3BsaWNlKGssIDAsIGVuZCk7Ci0gICAgICBlbmQgPSBlbmQucGFyZW50Owot
ICAgIH0KLSAgICByZXR1cm4gcG9pbnRzOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9idW5k
bGVBbmNlc3RvcnMobm9kZSkgewotICAgIHZhciBhbmNlc3RvcnMgPSBbXSwgcGFyZW50ID0gbm9k
ZS5wYXJlbnQ7Ci0gICAgd2hpbGUgKHBhcmVudCAhPSBudWxsKSB7Ci0gICAgICBhbmNlc3RvcnMu
cHVzaChub2RlKTsKLSAgICAgIG5vZGUgPSBwYXJlbnQ7Ci0gICAgICBwYXJlbnQgPSBwYXJlbnQu
cGFyZW50OwotICAgIH0KLSAgICBhbmNlc3RvcnMucHVzaChub2RlKTsKLSAgICByZXR1cm4gYW5j
ZXN0b3JzOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9idW5kbGVMZWFzdENvbW1vbkFuY2Vz
dG9yKGEsIGIpIHsKLSAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGE7Ci0gICAgdmFyIGFOb2RlcyA9
IGQzX2xheW91dF9idW5kbGVBbmNlc3RvcnMoYSksIGJOb2RlcyA9IGQzX2xheW91dF9idW5kbGVB
bmNlc3RvcnMoYiksIGFOb2RlID0gYU5vZGVzLnBvcCgpLCBiTm9kZSA9IGJOb2Rlcy5wb3AoKSwg
c2hhcmVkTm9kZSA9IG51bGw7Ci0gICAgd2hpbGUgKGFOb2RlID09PSBiTm9kZSkgewotICAgICAg
c2hhcmVkTm9kZSA9IGFOb2RlOwotICAgICAgYU5vZGUgPSBhTm9kZXMucG9wKCk7Ci0gICAgICBi
Tm9kZSA9IGJOb2Rlcy5wb3AoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNoYXJlZE5vZGU7Ci0gIH0K
LSAgZDMubGF5b3V0LmNob3JkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNob3JkID0ge30sIGNo
b3JkcywgZ3JvdXBzLCBtYXRyaXgsIG4sIHBhZGRpbmcgPSAwLCBzb3J0R3JvdXBzLCBzb3J0U3Vi
Z3JvdXBzLCBzb3J0Q2hvcmRzOwotICAgIGZ1bmN0aW9uIHJlbGF5b3V0KCkgewotICAgICAgdmFy
IHN1Ymdyb3VwcyA9IHt9LCBncm91cFN1bXMgPSBbXSwgZ3JvdXBJbmRleCA9IGQzLnJhbmdlKG4p
LCBzdWJncm91cEluZGV4ID0gW10sIGssIHgsIHgwLCBpLCBqOwotICAgICAgY2hvcmRzID0gW107
Ci0gICAgICBncm91cHMgPSBbXTsKLSAgICAgIGsgPSAwLCBpID0gLTE7Ci0gICAgICB3aGlsZSAo
KytpIDwgbikgewotICAgICAgICB4ID0gMCwgaiA9IC0xOwotICAgICAgICB3aGlsZSAoKytqIDwg
bikgewotICAgICAgICAgIHggKz0gbWF0cml4W2ldW2pdOwotICAgICAgICB9Ci0gICAgICAgIGdy
b3VwU3Vtcy5wdXNoKHgpOwotICAgICAgICBzdWJncm91cEluZGV4LnB1c2goZDMucmFuZ2Uobikp
OwotICAgICAgICBrICs9IHg7Ci0gICAgICB9Ci0gICAgICBpZiAoc29ydEdyb3VwcykgewotICAg
ICAgICBncm91cEluZGV4LnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICAgIHJldHVybiBz
b3J0R3JvdXBzKGdyb3VwU3Vtc1thXSwgZ3JvdXBTdW1zW2JdKTsKLSAgICAgICAgfSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoc29ydFN1Ymdyb3VwcykgewotICAgICAgICBzdWJncm91cEluZGV4LmZv
ckVhY2goZnVuY3Rpb24oZCwgaSkgewotICAgICAgICAgIGQuc29ydChmdW5jdGlvbihhLCBiKSB7
Ci0gICAgICAgICAgICByZXR1cm4gc29ydFN1Ymdyb3VwcyhtYXRyaXhbaV1bYV0sIG1hdHJpeFtp
XVtiXSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgayA9ICjP
hCAtIHBhZGRpbmcgKiBuKSAvIGs7Ci0gICAgICB4ID0gMCwgaSA9IC0xOwotICAgICAgd2hpbGUg
KCsraSA8IG4pIHsKLSAgICAgICAgeDAgPSB4LCBqID0gLTE7Ci0gICAgICAgIHdoaWxlICgrK2og
PCBuKSB7Ci0gICAgICAgICAgdmFyIGRpID0gZ3JvdXBJbmRleFtpXSwgZGogPSBzdWJncm91cElu
ZGV4W2RpXVtqXSwgdiA9IG1hdHJpeFtkaV1bZGpdLCBhMCA9IHgsIGExID0geCArPSB2ICogazsK
LSAgICAgICAgICBzdWJncm91cHNbZGkgKyAiLSIgKyBkal0gPSB7Ci0gICAgICAgICAgICBpbmRl
eDogZGksCi0gICAgICAgICAgICBzdWJpbmRleDogZGosCi0gICAgICAgICAgICBzdGFydEFuZ2xl
OiBhMCwKLSAgICAgICAgICAgIGVuZEFuZ2xlOiBhMSwKLSAgICAgICAgICAgIHZhbHVlOiB2Ci0g
ICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICBncm91cHNbZGldID0gewotICAgICAgICAg
IGluZGV4OiBkaSwKLSAgICAgICAgICBzdGFydEFuZ2xlOiB4MCwKLSAgICAgICAgICBlbmRBbmds
ZTogeCwKLSAgICAgICAgICB2YWx1ZTogKHggLSB4MCkgLyBrCi0gICAgICAgIH07Ci0gICAgICAg
IHggKz0gcGFkZGluZzsKLSAgICAgIH0KLSAgICAgIGkgPSAtMTsKLSAgICAgIHdoaWxlICgrK2kg
PCBuKSB7Ci0gICAgICAgIGogPSBpIC0gMTsKLSAgICAgICAgd2hpbGUgKCsraiA8IG4pIHsKLSAg
ICAgICAgICB2YXIgc291cmNlID0gc3ViZ3JvdXBzW2kgKyAiLSIgKyBqXSwgdGFyZ2V0ID0gc3Vi
Z3JvdXBzW2ogKyAiLSIgKyBpXTsKLSAgICAgICAgICBpZiAoc291cmNlLnZhbHVlIHx8IHRhcmdl
dC52YWx1ZSkgewotICAgICAgICAgICAgY2hvcmRzLnB1c2goc291cmNlLnZhbHVlIDwgdGFyZ2V0
LnZhbHVlID8gewotICAgICAgICAgICAgICBzb3VyY2U6IHRhcmdldCwKLSAgICAgICAgICAgICAg
dGFyZ2V0OiBzb3VyY2UKLSAgICAgICAgICAgIH0gOiB7Ci0gICAgICAgICAgICAgIHNvdXJjZTog
c291cmNlLAotICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldAotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoc29ydENob3JkcykgcmVz
b3J0KCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJlc29ydCgpIHsKLSAgICAgIGNob3Jkcy5zb3J0
KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgcmV0dXJuIHNvcnRDaG9yZHMoKGEuc291cmNlLnZh
bHVlICsgYS50YXJnZXQudmFsdWUpIC8gMiwgKGIuc291cmNlLnZhbHVlICsgYi50YXJnZXQudmFs
dWUpIC8gMik7Ci0gICAgICB9KTsKLSAgICB9Ci0gICAgY2hvcmQubWF0cml4ID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbWF0cml4OwotICAgICAg
biA9IChtYXRyaXggPSB4KSAmJiBtYXRyaXgubGVuZ3RoOwotICAgICAgY2hvcmRzID0gZ3JvdXBz
ID0gbnVsbDsKLSAgICAgIHJldHVybiBjaG9yZDsKLSAgICB9OwotICAgIGNob3JkLnBhZGRpbmcg
PSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwYWRk
aW5nOwotICAgICAgcGFkZGluZyA9IHg7Ci0gICAgICBjaG9yZHMgPSBncm91cHMgPSBudWxsOwot
ICAgICAgcmV0dXJuIGNob3JkOwotICAgIH07Ci0gICAgY2hvcmQuc29ydEdyb3VwcyA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNvcnRHcm91cHM7
Ci0gICAgICBzb3J0R3JvdXBzID0geDsKLSAgICAgIGNob3JkcyA9IGdyb3VwcyA9IG51bGw7Ci0g
ICAgICByZXR1cm4gY2hvcmQ7Ci0gICAgfTsKLSAgICBjaG9yZC5zb3J0U3ViZ3JvdXBzID0gZnVu
Y3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc29ydFN1Ymdy
b3VwczsKLSAgICAgIHNvcnRTdWJncm91cHMgPSB4OwotICAgICAgY2hvcmRzID0gbnVsbDsKLSAg
ICAgIHJldHVybiBjaG9yZDsKLSAgICB9OwotICAgIGNob3JkLnNvcnRDaG9yZHMgPSBmdW5jdGlv
bih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzb3J0Q2hvcmRzOwot
ICAgICAgc29ydENob3JkcyA9IHg7Ci0gICAgICBpZiAoY2hvcmRzKSByZXNvcnQoKTsKLSAgICAg
IHJldHVybiBjaG9yZDsKLSAgICB9OwotICAgIGNob3JkLmNob3JkcyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgaWYgKCFjaG9yZHMpIHJlbGF5b3V0KCk7Ci0gICAgICByZXR1cm4gY2hvcmRzOwotICAg
IH07Ci0gICAgY2hvcmQuZ3JvdXBzID0gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoIWdyb3Vwcykg
cmVsYXlvdXQoKTsKLSAgICAgIHJldHVybiBncm91cHM7Ci0gICAgfTsKLSAgICByZXR1cm4gY2hv
cmQ7Ci0gIH07Ci0gIGQzLmxheW91dC5mb3JjZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBmb3Jj
ZSA9IHt9LCBldmVudCA9IGQzLmRpc3BhdGNoKCJzdGFydCIsICJ0aWNrIiwgImVuZCIpLCBzaXpl
ID0gWyAxLCAxIF0sIGRyYWcsIGFscGhhLCBmcmljdGlvbiA9IC45LCBsaW5rRGlzdGFuY2UgPSBk
M19sYXlvdXRfZm9yY2VMaW5rRGlzdGFuY2UsIGxpbmtTdHJlbmd0aCA9IGQzX2xheW91dF9mb3Jj
ZUxpbmtTdHJlbmd0aCwgY2hhcmdlID0gLTMwLCBjaGFyZ2VEaXN0YW5jZTIgPSBkM19sYXlvdXRf
Zm9yY2VDaGFyZ2VEaXN0YW5jZTIsIGdyYXZpdHkgPSAuMSwgdGhldGEyID0gLjY0LCBub2RlcyA9
IFtdLCBsaW5rcyA9IFtdLCBkaXN0YW5jZXMsIHN0cmVuZ3RocywgY2hhcmdlczsKLSAgICBmdW5j
dGlvbiByZXB1bHNlKG5vZGUpIHsKLSAgICAgIHJldHVybiBmdW5jdGlvbihxdWFkLCB4MSwgXywg
eDIpIHsKLSAgICAgICAgaWYgKHF1YWQucG9pbnQgIT09IG5vZGUpIHsKLSAgICAgICAgICB2YXIg
ZHggPSBxdWFkLmN4IC0gbm9kZS54LCBkeSA9IHF1YWQuY3kgLSBub2RlLnksIGR3ID0geDIgLSB4
MSwgZG4gPSBkeCAqIGR4ICsgZHkgKiBkeTsKLSAgICAgICAgICBpZiAoZHcgKiBkdyAvIHRoZXRh
MiA8IGRuKSB7Ci0gICAgICAgICAgICBpZiAoZG4gPCBjaGFyZ2VEaXN0YW5jZTIpIHsKLSAgICAg
ICAgICAgICAgdmFyIGsgPSBxdWFkLmNoYXJnZSAvIGRuOwotICAgICAgICAgICAgICBub2RlLnB4
IC09IGR4ICogazsKLSAgICAgICAgICAgICAgbm9kZS5weSAtPSBkeSAqIGs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYg
KHF1YWQucG9pbnQgJiYgZG4gJiYgZG4gPCBjaGFyZ2VEaXN0YW5jZTIpIHsKLSAgICAgICAgICAg
IHZhciBrID0gcXVhZC5wb2ludENoYXJnZSAvIGRuOwotICAgICAgICAgICAgbm9kZS5weCAtPSBk
eCAqIGs7Ci0gICAgICAgICAgICBub2RlLnB5IC09IGR5ICogazsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuICFxdWFkLmNoYXJnZTsKLSAgICAgIH07Ci0gICAgfQotICAg
IGZvcmNlLnRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICgoYWxwaGEgKj0gLjk5KSA8IC4w
MDUpIHsKLSAgICAgICAgZXZlbnQuZW5kKHsKLSAgICAgICAgICB0eXBlOiAiZW5kIiwKLSAgICAg
ICAgICBhbHBoYTogYWxwaGEgPSAwCi0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIHZhciBuID0gbm9kZXMubGVuZ3RoLCBtID0gbGlua3MubGVuZ3RoLCBx
LCBpLCBvLCBzLCB0LCBsLCBrLCB4LCB5OwotICAgICAgZm9yIChpID0gMDsgaSA8IG07ICsraSkg
ewotICAgICAgICBvID0gbGlua3NbaV07Ci0gICAgICAgIHMgPSBvLnNvdXJjZTsKLSAgICAgICAg
dCA9IG8udGFyZ2V0OwotICAgICAgICB4ID0gdC54IC0gcy54OwotICAgICAgICB5ID0gdC55IC0g
cy55OwotICAgICAgICBpZiAobCA9IHggKiB4ICsgeSAqIHkpIHsKLSAgICAgICAgICBsID0gYWxw
aGEgKiBzdHJlbmd0aHNbaV0gKiAoKGwgPSBNYXRoLnNxcnQobCkpIC0gZGlzdGFuY2VzW2ldKSAv
IGw7Ci0gICAgICAgICAgeCAqPSBsOwotICAgICAgICAgIHkgKj0gbDsKLSAgICAgICAgICB0Lngg
LT0geCAqIChrID0gcy53ZWlnaHQgLyAodC53ZWlnaHQgKyBzLndlaWdodCkpOwotICAgICAgICAg
IHQueSAtPSB5ICogazsKLSAgICAgICAgICBzLnggKz0geCAqIChrID0gMSAtIGspOwotICAgICAg
ICAgIHMueSArPSB5ICogazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGsgPSBhbHBo
YSAqIGdyYXZpdHkpIHsKLSAgICAgICAgeCA9IHNpemVbMF0gLyAyOwotICAgICAgICB5ID0gc2l6
ZVsxXSAvIDI7Ci0gICAgICAgIGkgPSAtMTsKLSAgICAgICAgaWYgKGspIHdoaWxlICgrK2kgPCBu
KSB7Ci0gICAgICAgICAgbyA9IG5vZGVzW2ldOwotICAgICAgICAgIG8ueCArPSAoeCAtIG8ueCkg
KiBrOwotICAgICAgICAgIG8ueSArPSAoeSAtIG8ueSkgKiBrOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBpZiAoY2hhcmdlKSB7Ci0gICAgICAgIGQzX2xheW91dF9mb3JjZUFjY3VtdWxhdGUo
cSA9IGQzLmdlb20ucXVhZHRyZWUobm9kZXMpLCBhbHBoYSwgY2hhcmdlcyk7Ci0gICAgICAgIGkg
PSAtMTsKLSAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgICBpZiAoIShvID0gbm9k
ZXNbaV0pLmZpeGVkKSB7Ci0gICAgICAgICAgICBxLnZpc2l0KHJlcHVsc2UobykpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaSA9IC0xOwotICAgICAgd2hpbGUgKCsr
aSA8IG4pIHsKLSAgICAgICAgbyA9IG5vZGVzW2ldOwotICAgICAgICBpZiAoby5maXhlZCkgewot
ICAgICAgICAgIG8ueCA9IG8ucHg7Ci0gICAgICAgICAgby55ID0gby5weTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBvLnggLT0gKG8ucHggLSAoby5weCA9IG8ueCkpICogZnJpY3Rpb247
Ci0gICAgICAgICAgby55IC09IChvLnB5IC0gKG8ucHkgPSBvLnkpKSAqIGZyaWN0aW9uOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBldmVudC50aWNrKHsKLSAgICAgICAgdHlwZTogInRpY2si
LAotICAgICAgICBhbHBoYTogYWxwaGEKLSAgICAgIH0pOwotICAgIH07Ci0gICAgZm9yY2Uubm9k
ZXMgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBu
b2RlczsKLSAgICAgIG5vZGVzID0geDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAg
IGZvcmNlLmxpbmtzID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4gbGlua3M7Ci0gICAgICBsaW5rcyA9IHg7Ci0gICAgICByZXR1cm4gZm9yY2U7Ci0g
ICAgfTsKLSAgICBmb3JjZS5zaXplID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAgICAgIHNpemUgPSB4OwotICAgICAgcmV0dXJuIGZv
cmNlOwotICAgIH07Ci0gICAgZm9yY2UubGlua0Rpc3RhbmNlID0gZnVuY3Rpb24oeCkgewotICAg
ICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGlua0Rpc3RhbmNlOwotICAgICAgbGlu
a0Rpc3RhbmNlID0gdHlwZW9mIHggPT09ICJmdW5jdGlvbiIgPyB4IDogK3g7Ci0gICAgICByZXR1
cm4gZm9yY2U7Ci0gICAgfTsKLSAgICBmb3JjZS5kaXN0YW5jZSA9IGZvcmNlLmxpbmtEaXN0YW5j
ZTsKLSAgICBmb3JjZS5saW5rU3RyZW5ndGggPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHJldHVybiBsaW5rU3RyZW5ndGg7Ci0gICAgICBsaW5rU3RyZW5ndGgg
PSB0eXBlb2YgeCA9PT0gImZ1bmN0aW9uIiA/IHggOiAreDsKLSAgICAgIHJldHVybiBmb3JjZTsK
LSAgICB9OwotICAgIGZvcmNlLmZyaWN0aW9uID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZnJpY3Rpb247Ci0gICAgICBmcmljdGlvbiA9ICt4Owot
ICAgICAgcmV0dXJuIGZvcmNlOwotICAgIH07Ci0gICAgZm9yY2UuY2hhcmdlID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2hhcmdlOwotICAgICAg
Y2hhcmdlID0gdHlwZW9mIHggPT09ICJmdW5jdGlvbiIgPyB4IDogK3g7Ci0gICAgICByZXR1cm4g
Zm9yY2U7Ci0gICAgfTsKLSAgICBmb3JjZS5jaGFyZ2VEaXN0YW5jZSA9IGZ1bmN0aW9uKHgpIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIE1hdGguc3FydChjaGFyZ2VEaXN0
YW5jZTIpOwotICAgICAgY2hhcmdlRGlzdGFuY2UyID0geCAqIHg7Ci0gICAgICByZXR1cm4gZm9y
Y2U7Ci0gICAgfTsKLSAgICBmb3JjZS5ncmF2aXR5ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYg
KCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3Jhdml0eTsKLSAgICAgIGdyYXZpdHkgPSAreDsK
LSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAgIGZvcmNlLnRoZXRhID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHRoZXRh
Mik7Ci0gICAgICB0aGV0YTIgPSB4ICogeDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9Owot
ICAgIGZvcmNlLmFscGhhID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gYWxwaGE7Ci0gICAgICB4ID0gK3g7Ci0gICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgaWYgKHggPiAwKSBhbHBoYSA9IHg7IGVsc2UgYWxwaGEgPSAwOwotICAgICAgfSBlbHNl
IGlmICh4ID4gMCkgewotICAgICAgICBldmVudC5zdGFydCh7Ci0gICAgICAgICAgdHlwZTogInN0
YXJ0IiwKLSAgICAgICAgICBhbHBoYTogYWxwaGEgPSB4Ci0gICAgICAgIH0pOwotICAgICAgICBk
My50aW1lcihmb3JjZS50aWNrKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9
OwotICAgIGZvcmNlLnN0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgaSwgbiA9IG5vZGVz
Lmxlbmd0aCwgbSA9IGxpbmtzLmxlbmd0aCwgdyA9IHNpemVbMF0sIGggPSBzaXplWzFdLCBuZWln
aGJvcnMsIG87Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIChvID0g
bm9kZXNbaV0pLmluZGV4ID0gaTsKLSAgICAgICAgby53ZWlnaHQgPSAwOwotICAgICAgfQotICAg
ICAgZm9yIChpID0gMDsgaSA8IG07ICsraSkgewotICAgICAgICBvID0gbGlua3NbaV07Ci0gICAg
ICAgIGlmICh0eXBlb2Ygby5zb3VyY2UgPT0gIm51bWJlciIpIG8uc291cmNlID0gbm9kZXNbby5z
b3VyY2VdOwotICAgICAgICBpZiAodHlwZW9mIG8udGFyZ2V0ID09ICJudW1iZXIiKSBvLnRhcmdl
dCA9IG5vZGVzW28udGFyZ2V0XTsKLSAgICAgICAgKytvLnNvdXJjZS53ZWlnaHQ7Ci0gICAgICAg
ICsrby50YXJnZXQud2VpZ2h0OwotICAgICAgfQotICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsr
aSkgewotICAgICAgICBvID0gbm9kZXNbaV07Ci0gICAgICAgIGlmIChpc05hTihvLngpKSBvLngg
PSBwb3NpdGlvbigieCIsIHcpOwotICAgICAgICBpZiAoaXNOYU4oby55KSkgby55ID0gcG9zaXRp
b24oInkiLCBoKTsKLSAgICAgICAgaWYgKGlzTmFOKG8ucHgpKSBvLnB4ID0gby54OwotICAgICAg
ICBpZiAoaXNOYU4oby5weSkpIG8ucHkgPSBvLnk7Ci0gICAgICB9Ci0gICAgICBkaXN0YW5jZXMg
PSBbXTsKLSAgICAgIGlmICh0eXBlb2YgbGlua0Rpc3RhbmNlID09PSAiZnVuY3Rpb24iKSBmb3Ig
KGkgPSAwOyBpIDwgbTsgKytpKSBkaXN0YW5jZXNbaV0gPSArbGlua0Rpc3RhbmNlLmNhbGwodGhp
cywgbGlua3NbaV0sIGkpOyBlbHNlIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIGRpc3RhbmNlc1tp
XSA9IGxpbmtEaXN0YW5jZTsKLSAgICAgIHN0cmVuZ3RocyA9IFtdOwotICAgICAgaWYgKHR5cGVv
ZiBsaW5rU3RyZW5ndGggPT09ICJmdW5jdGlvbiIpIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHN0
cmVuZ3Roc1tpXSA9ICtsaW5rU3RyZW5ndGguY2FsbCh0aGlzLCBsaW5rc1tpXSwgaSk7IGVsc2Ug
Zm9yIChpID0gMDsgaSA8IG07ICsraSkgc3RyZW5ndGhzW2ldID0gbGlua1N0cmVuZ3RoOwotICAg
ICAgY2hhcmdlcyA9IFtdOwotICAgICAgaWYgKHR5cGVvZiBjaGFyZ2UgPT09ICJmdW5jdGlvbiIp
IGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNoYXJnZXNbaV0gPSArY2hhcmdlLmNhbGwodGhpcywg
bm9kZXNbaV0sIGkpOyBlbHNlIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNoYXJnZXNbaV0gPSBj
aGFyZ2U7Ci0gICAgICBmdW5jdGlvbiBwb3NpdGlvbihkaW1lbnNpb24sIHNpemUpIHsKLSAgICAg
ICAgaWYgKCFuZWlnaGJvcnMpIHsKLSAgICAgICAgICBuZWlnaGJvcnMgPSBuZXcgQXJyYXkobik7
Ci0gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47ICsraikgewotICAgICAgICAgICAgbmVpZ2hi
b3JzW2pdID0gW107Ci0gICAgICAgICAgfQotICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtOyAr
K2opIHsKLSAgICAgICAgICAgIHZhciBvID0gbGlua3Nbal07Ci0gICAgICAgICAgICBuZWlnaGJv
cnNbby5zb3VyY2UuaW5kZXhdLnB1c2goby50YXJnZXQpOwotICAgICAgICAgICAgbmVpZ2hib3Jz
W28udGFyZ2V0LmluZGV4XS5wdXNoKG8uc291cmNlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgdmFyIGNhbmRpZGF0ZXMgPSBuZWlnaGJvcnNbaV0sIGogPSAtMSwgbSA9IGNhbmRp
ZGF0ZXMubGVuZ3RoLCB4OwotICAgICAgICB3aGlsZSAoKytqIDwgbSkgaWYgKCFpc05hTih4ID0g
Y2FuZGlkYXRlc1tqXVtkaW1lbnNpb25dKSkgcmV0dXJuIHg7Ci0gICAgICAgIHJldHVybiBNYXRo
LnJhbmRvbSgpICogc2l6ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmb3JjZS5yZXN1bWUoKTsK
LSAgICB9OwotICAgIGZvcmNlLnJlc3VtZSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGZv
cmNlLmFscGhhKC4xKTsKLSAgICB9OwotICAgIGZvcmNlLnN0b3AgPSBmdW5jdGlvbigpIHsKLSAg
ICAgIHJldHVybiBmb3JjZS5hbHBoYSgwKTsKLSAgICB9OwotICAgIGZvcmNlLmRyYWcgPSBmdW5j
dGlvbigpIHsKLSAgICAgIGlmICghZHJhZykgZHJhZyA9IGQzLmJlaGF2aW9yLmRyYWcoKS5vcmln
aW4oZDNfaWRlbnRpdHkpLm9uKCJkcmFnc3RhcnQuZm9yY2UiLCBkM19sYXlvdXRfZm9yY2VEcmFn
c3RhcnQpLm9uKCJkcmFnLmZvcmNlIiwgZHJhZ21vdmUpLm9uKCJkcmFnZW5kLmZvcmNlIiwgZDNf
bGF5b3V0X2ZvcmNlRHJhZ2VuZCk7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biBkcmFnOwotICAgICAgdGhpcy5vbigibW91c2VvdmVyLmZvcmNlIiwgZDNfbGF5b3V0X2ZvcmNl
TW91c2VvdmVyKS5vbigibW91c2VvdXQuZm9yY2UiLCBkM19sYXlvdXRfZm9yY2VNb3VzZW91dCku
Y2FsbChkcmFnKTsKLSAgICB9OwotICAgIGZ1bmN0aW9uIGRyYWdtb3ZlKGQpIHsKLSAgICAgIGQu
cHggPSBkMy5ldmVudC54LCBkLnB5ID0gZDMuZXZlbnQueTsKLSAgICAgIGZvcmNlLnJlc3VtZSgp
OwotICAgIH0KLSAgICByZXR1cm4gZDMucmViaW5kKGZvcmNlLCBldmVudCwgIm9uIik7Ci0gIH07
Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9mb3JjZURyYWdzdGFydChkKSB7Ci0gICAgZC5maXhlZCB8
PSAyOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9mb3JjZURyYWdlbmQoZCkgewotICAgIGQu
Zml4ZWQgJj0gfjY7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2ZvcmNlTW91c2VvdmVyKGQp
IHsKLSAgICBkLmZpeGVkIHw9IDQ7Ci0gICAgZC5weCA9IGQueCwgZC5weSA9IGQueTsKLSAgfQot
ICBmdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VNb3VzZW91dChkKSB7Ci0gICAgZC5maXhlZCAmPSB+
NDsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfZm9yY2VBY2N1bXVsYXRlKHF1YWQsIGFscGhh
LCBjaGFyZ2VzKSB7Ci0gICAgdmFyIGN4ID0gMCwgY3kgPSAwOwotICAgIHF1YWQuY2hhcmdlID0g
MDsKLSAgICBpZiAoIXF1YWQubGVhZikgewotICAgICAgdmFyIG5vZGVzID0gcXVhZC5ub2Rlcywg
biA9IG5vZGVzLmxlbmd0aCwgaSA9IC0xLCBjOwotICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAg
ICAgICAgYyA9IG5vZGVzW2ldOwotICAgICAgICBpZiAoYyA9PSBudWxsKSBjb250aW51ZTsKLSAg
ICAgICAgZDNfbGF5b3V0X2ZvcmNlQWNjdW11bGF0ZShjLCBhbHBoYSwgY2hhcmdlcyk7Ci0gICAg
ICAgIHF1YWQuY2hhcmdlICs9IGMuY2hhcmdlOwotICAgICAgICBjeCArPSBjLmNoYXJnZSAqIGMu
Y3g7Ci0gICAgICAgIGN5ICs9IGMuY2hhcmdlICogYy5jeTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKHF1YWQucG9pbnQpIHsKLSAgICAgIGlmICghcXVhZC5sZWFmKSB7Ci0gICAgICAgIHF1YWQu
cG9pbnQueCArPSBNYXRoLnJhbmRvbSgpIC0gLjU7Ci0gICAgICAgIHF1YWQucG9pbnQueSArPSBN
YXRoLnJhbmRvbSgpIC0gLjU7Ci0gICAgICB9Ci0gICAgICB2YXIgayA9IGFscGhhICogY2hhcmdl
c1txdWFkLnBvaW50LmluZGV4XTsKLSAgICAgIHF1YWQuY2hhcmdlICs9IHF1YWQucG9pbnRDaGFy
Z2UgPSBrOwotICAgICAgY3ggKz0gayAqIHF1YWQucG9pbnQueDsKLSAgICAgIGN5ICs9IGsgKiBx
dWFkLnBvaW50Lnk7Ci0gICAgfQotICAgIHF1YWQuY3ggPSBjeCAvIHF1YWQuY2hhcmdlOwotICAg
IHF1YWQuY3kgPSBjeSAvIHF1YWQuY2hhcmdlOwotICB9Ci0gIHZhciBkM19sYXlvdXRfZm9yY2VM
aW5rRGlzdGFuY2UgPSAyMCwgZDNfbGF5b3V0X2ZvcmNlTGlua1N0cmVuZ3RoID0gMSwgZDNfbGF5
b3V0X2ZvcmNlQ2hhcmdlRGlzdGFuY2UyID0gSW5maW5pdHk7Ci0gIGQzLmxheW91dC5oaWVyYXJj
aHkgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgc29ydCA9IGQzX2xheW91dF9oaWVyYXJjaHlTb3J0
LCBjaGlsZHJlbiA9IGQzX2xheW91dF9oaWVyYXJjaHlDaGlsZHJlbiwgdmFsdWUgPSBkM19sYXlv
dXRfaGllcmFyY2h5VmFsdWU7Ci0gICAgZnVuY3Rpb24gaGllcmFyY2h5KHJvb3QpIHsKLSAgICAg
IHZhciBzdGFjayA9IFsgcm9vdCBdLCBub2RlcyA9IFtdLCBub2RlOwotICAgICAgcm9vdC5kZXB0
aCA9IDA7Ci0gICAgICB3aGlsZSAoKG5vZGUgPSBzdGFjay5wb3AoKSkgIT0gbnVsbCkgewotICAg
ICAgICBub2Rlcy5wdXNoKG5vZGUpOwotICAgICAgICBpZiAoKGNoaWxkcyA9IGNoaWxkcmVuLmNh
bGwoaGllcmFyY2h5LCBub2RlLCBub2RlLmRlcHRoKSkgJiYgKG4gPSBjaGlsZHMubGVuZ3RoKSkg
ewotICAgICAgICAgIHZhciBuLCBjaGlsZHMsIGNoaWxkOwotICAgICAgICAgIHdoaWxlICgtLW4g
Pj0gMCkgewotICAgICAgICAgICAgc3RhY2sucHVzaChjaGlsZCA9IGNoaWxkc1tuXSk7Ci0gICAg
ICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlOwotICAgICAgICAgICAgY2hpbGQuZGVwdGggPSBu
b2RlLmRlcHRoICsgMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHZhbHVlKSBub2RlLnZh
bHVlID0gMDsKLSAgICAgICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRzOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIGlmICh2YWx1ZSkgbm9kZS52YWx1ZSA9ICt2YWx1ZS5jYWxsKGhpZXJh
cmNoeSwgbm9kZSwgbm9kZS5kZXB0aCkgfHwgMDsKLSAgICAgICAgICBkZWxldGUgbm9kZS5jaGls
ZHJlbjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0
QWZ0ZXIocm9vdCwgZnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgY2hpbGRzLCBwYXJlbnQ7
Ci0gICAgICAgIGlmIChzb3J0ICYmIChjaGlsZHMgPSBub2RlLmNoaWxkcmVuKSkgY2hpbGRzLnNv
cnQoc29ydCk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiAocGFyZW50ID0gbm9kZS5wYXJlbnQpKSBw
YXJlbnQudmFsdWUgKz0gbm9kZS52YWx1ZTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIG5vZGVz
OwotICAgIH0KLSAgICBoaWVyYXJjaHkuc29ydCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICgh
YXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNvcnQ7Ci0gICAgICBzb3J0ID0geDsKLSAgICAgIHJl
dHVybiBoaWVyYXJjaHk7Ci0gICAgfTsKLSAgICBoaWVyYXJjaHkuY2hpbGRyZW4gPSBmdW5jdGlv
bih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjaGlsZHJlbjsKLSAg
ICAgIGNoaWxkcmVuID0geDsKLSAgICAgIHJldHVybiBoaWVyYXJjaHk7Ci0gICAgfTsKLSAgICBo
aWVyYXJjaHkudmFsdWUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiB2YWx1ZTsKLSAgICAgIHZhbHVlID0geDsKLSAgICAgIHJldHVybiBoaWVyYXJj
aHk7Ci0gICAgfTsKLSAgICBoaWVyYXJjaHkucmV2YWx1ZSA9IGZ1bmN0aW9uKHJvb3QpIHsKLSAg
ICAgIGlmICh2YWx1ZSkgewotICAgICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUo
cm9vdCwgZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSBub2Rl
LnZhbHVlID0gMDsKLSAgICAgICAgfSk7Ci0gICAgICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNp
dEFmdGVyKHJvb3QsIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICB2YXIgcGFyZW50OwotICAg
ICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikgbm9kZS52YWx1ZSA9ICt2YWx1ZS5jYWxsKGhpZXJh
cmNoeSwgbm9kZSwgbm9kZS5kZXB0aCkgfHwgMDsKLSAgICAgICAgICBpZiAocGFyZW50ID0gbm9k
ZS5wYXJlbnQpIHBhcmVudC52YWx1ZSArPSBub2RlLnZhbHVlOwotICAgICAgICB9KTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiByb290OwotICAgIH07Ci0gICAgcmV0dXJuIGhpZXJhcmNoeTsKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVJlYmluZChvYmplY3QsIGhpZXJhcmNo
eSkgewotICAgIGQzLnJlYmluZChvYmplY3QsIGhpZXJhcmNoeSwgInNvcnQiLCAiY2hpbGRyZW4i
LCAidmFsdWUiKTsKLSAgICBvYmplY3Qubm9kZXMgPSBvYmplY3Q7Ci0gICAgb2JqZWN0Lmxpbmtz
ID0gZDNfbGF5b3V0X2hpZXJhcmNoeUxpbmtzOwotICAgIHJldHVybiBvYmplY3Q7Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKG5vZGUsIGNhbGxiYWNrKSB7
Ci0gICAgdmFyIG5vZGVzID0gWyBub2RlIF07Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZXMucG9w
KCkpICE9IG51bGwpIHsKLSAgICAgIGNhbGxiYWNrKG5vZGUpOwotICAgICAgaWYgKChjaGlsZHJl
biA9IG5vZGUuY2hpbGRyZW4pICYmIChuID0gY2hpbGRyZW4ubGVuZ3RoKSkgewotICAgICAgICB2
YXIgbiwgY2hpbGRyZW47Ci0gICAgICAgIHdoaWxlICgtLW4gPj0gMCkgbm9kZXMucHVzaChjaGls
ZHJlbltuXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9oaWVy
YXJjaHlWaXNpdEFmdGVyKG5vZGUsIGNhbGxiYWNrKSB7Ci0gICAgdmFyIG5vZGVzID0gWyBub2Rl
IF0sIG5vZGVzMiA9IFtdOwotICAgIHdoaWxlICgobm9kZSA9IG5vZGVzLnBvcCgpKSAhPSBudWxs
KSB7Ci0gICAgICBub2RlczIucHVzaChub2RlKTsKLSAgICAgIGlmICgoY2hpbGRyZW4gPSBub2Rl
LmNoaWxkcmVuKSAmJiAobiA9IGNoaWxkcmVuLmxlbmd0aCkpIHsKLSAgICAgICAgdmFyIGkgPSAt
MSwgbiwgY2hpbGRyZW47Ci0gICAgICAgIHdoaWxlICgrK2kgPCBuKSBub2Rlcy5wdXNoKGNoaWxk
cmVuW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZXMyLnBvcCgp
KSAhPSBudWxsKSB7Ci0gICAgICBjYWxsYmFjayhub2RlKTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfbGF5b3V0X2hpZXJhcmNoeUNoaWxkcmVuKGQpIHsKLSAgICByZXR1cm4gZC5jaGlsZHJl
bjsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5VmFsdWUoZCkgewotICAgIHJl
dHVybiBkLnZhbHVlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9oaWVyYXJjaHlTb3J0KGEs
IGIpIHsKLSAgICByZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
bGF5b3V0X2hpZXJhcmNoeUxpbmtzKG5vZGVzKSB7Ci0gICAgcmV0dXJuIGQzLm1lcmdlKG5vZGVz
Lm1hcChmdW5jdGlvbihwYXJlbnQpIHsKLSAgICAgIHJldHVybiAocGFyZW50LmNoaWxkcmVuIHx8
IFtdKS5tYXAoZnVuY3Rpb24oY2hpbGQpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBz
b3VyY2U6IHBhcmVudCwKLSAgICAgICAgICB0YXJnZXQ6IGNoaWxkCi0gICAgICAgIH07Ci0gICAg
ICB9KTsKLSAgICB9KSk7Ci0gIH0KLSAgZDMubGF5b3V0LnBhcnRpdGlvbiA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciBoaWVyYXJjaHkgPSBkMy5sYXlvdXQuaGllcmFyY2h5KCksIHNpemUgPSBbIDEs
IDEgXTsKLSAgICBmdW5jdGlvbiBwb3NpdGlvbihub2RlLCB4LCBkeCwgZHkpIHsKLSAgICAgIHZh
ciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47Ci0gICAgICBub2RlLnggPSB4OwotICAgICAgbm9k
ZS55ID0gbm9kZS5kZXB0aCAqIGR5OwotICAgICAgbm9kZS5keCA9IGR4OwotICAgICAgbm9kZS5k
eSA9IGR5OwotICAgICAgaWYgKGNoaWxkcmVuICYmIChuID0gY2hpbGRyZW4ubGVuZ3RoKSkgewot
ICAgICAgICB2YXIgaSA9IC0xLCBuLCBjLCBkOwotICAgICAgICBkeCA9IG5vZGUudmFsdWUgPyBk
eCAvIG5vZGUudmFsdWUgOiAwOwotICAgICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICAg
IHBvc2l0aW9uKGMgPSBjaGlsZHJlbltpXSwgeCwgZCA9IGMudmFsdWUgKiBkeCwgZHkpOwotICAg
ICAgICAgIHggKz0gZDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiBk
ZXB0aChub2RlKSB7Ci0gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLCBkID0gMDsK
LSAgICAgIGlmIChjaGlsZHJlbiAmJiAobiA9IGNoaWxkcmVuLmxlbmd0aCkpIHsKLSAgICAgICAg
dmFyIGkgPSAtMSwgbjsKLSAgICAgICAgd2hpbGUgKCsraSA8IG4pIGQgPSBNYXRoLm1heChkLCBk
ZXB0aChjaGlsZHJlbltpXSkpOwotICAgICAgfQotICAgICAgcmV0dXJuIDEgKyBkOwotICAgIH0K
LSAgICBmdW5jdGlvbiBwYXJ0aXRpb24oZCwgaSkgewotICAgICAgdmFyIG5vZGVzID0gaGllcmFy
Y2h5LmNhbGwodGhpcywgZCwgaSk7Ci0gICAgICBwb3NpdGlvbihub2Rlc1swXSwgMCwgc2l6ZVsw
XSwgc2l6ZVsxXSAvIGRlcHRoKG5vZGVzWzBdKSk7Ci0gICAgICByZXR1cm4gbm9kZXM7Ci0gICAg
fQotICAgIHBhcnRpdGlvbi5zaXplID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAgICAgIHNpemUgPSB4OwotICAgICAgcmV0dXJuIHBh
cnRpdGlvbjsKLSAgICB9OwotICAgIHJldHVybiBkM19sYXlvdXRfaGllcmFyY2h5UmViaW5kKHBh
cnRpdGlvbiwgaGllcmFyY2h5KTsKLSAgfTsKLSAgZDMubGF5b3V0LnBpZSA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciB2YWx1ZSA9IE51bWJlciwgc29ydCA9IGQzX2xheW91dF9waWVTb3J0QnlWYWx1
ZSwgc3RhcnRBbmdsZSA9IDAsIGVuZEFuZ2xlID0gz4Q7Ci0gICAgZnVuY3Rpb24gcGllKGRhdGEp
IHsKLSAgICAgIHZhciB2YWx1ZXMgPSBkYXRhLm1hcChmdW5jdGlvbihkLCBpKSB7Ci0gICAgICAg
IHJldHVybiArdmFsdWUuY2FsbChwaWUsIGQsIGkpOwotICAgICAgfSk7Ci0gICAgICB2YXIgYSA9
ICsodHlwZW9mIHN0YXJ0QW5nbGUgPT09ICJmdW5jdGlvbiIgPyBzdGFydEFuZ2xlLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykgOiBzdGFydEFuZ2xlKTsKLSAgICAgIHZhciBrID0gKCh0eXBlb2YgZW5k
QW5nbGUgPT09ICJmdW5jdGlvbiIgPyBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDog
ZW5kQW5nbGUpIC0gYSkgLyBkMy5zdW0odmFsdWVzKTsKLSAgICAgIHZhciBpbmRleCA9IGQzLnJh
bmdlKGRhdGEubGVuZ3RoKTsKLSAgICAgIGlmIChzb3J0ICE9IG51bGwpIGluZGV4LnNvcnQoc29y
dCA9PT0gZDNfbGF5b3V0X3BpZVNvcnRCeVZhbHVlID8gZnVuY3Rpb24oaSwgaikgewotICAgICAg
ICByZXR1cm4gdmFsdWVzW2pdIC0gdmFsdWVzW2ldOwotICAgICAgfSA6IGZ1bmN0aW9uKGksIGop
IHsKLSAgICAgICAgcmV0dXJuIHNvcnQoZGF0YVtpXSwgZGF0YVtqXSk7Ci0gICAgICB9KTsKLSAg
ICAgIHZhciBhcmNzID0gW107Ci0gICAgICBpbmRleC5mb3JFYWNoKGZ1bmN0aW9uKGkpIHsKLSAg
ICAgICAgdmFyIGQ7Ci0gICAgICAgIGFyY3NbaV0gPSB7Ci0gICAgICAgICAgZGF0YTogZGF0YVtp
XSwKLSAgICAgICAgICB2YWx1ZTogZCA9IHZhbHVlc1tpXSwKLSAgICAgICAgICBzdGFydEFuZ2xl
OiBhLAotICAgICAgICAgIGVuZEFuZ2xlOiBhICs9IGQgKiBrCi0gICAgICAgIH07Ci0gICAgICB9
KTsKLSAgICAgIHJldHVybiBhcmNzOwotICAgIH0KLSAgICBwaWUudmFsdWUgPSBmdW5jdGlvbih4
KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2YWx1ZTsKLSAgICAgIHZh
bHVlID0geDsKLSAgICAgIHJldHVybiBwaWU7Ci0gICAgfTsKLSAgICBwaWUuc29ydCA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNvcnQ7Ci0gICAg
ICBzb3J0ID0geDsKLSAgICAgIHJldHVybiBwaWU7Ci0gICAgfTsKLSAgICBwaWUuc3RhcnRBbmds
ZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHN0
YXJ0QW5nbGU7Ci0gICAgICBzdGFydEFuZ2xlID0geDsKLSAgICAgIHJldHVybiBwaWU7Ci0gICAg
fTsKLSAgICBwaWUuZW5kQW5nbGUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50
cy5sZW5ndGgpIHJldHVybiBlbmRBbmdsZTsKLSAgICAgIGVuZEFuZ2xlID0geDsKLSAgICAgIHJl
dHVybiBwaWU7Ci0gICAgfTsKLSAgICByZXR1cm4gcGllOwotICB9OwotICB2YXIgZDNfbGF5b3V0
X3BpZVNvcnRCeVZhbHVlID0ge307Ci0gIGQzLmxheW91dC5zdGFjayA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciB2YWx1ZXMgPSBkM19pZGVudGl0eSwgb3JkZXIgPSBkM19sYXlvdXRfc3RhY2tPcmRl
ckRlZmF1bHQsIG9mZnNldCA9IGQzX2xheW91dF9zdGFja09mZnNldFplcm8sIG91dCA9IGQzX2xh
eW91dF9zdGFja091dCwgeCA9IGQzX2xheW91dF9zdGFja1gsIHkgPSBkM19sYXlvdXRfc3RhY2tZ
OwotICAgIGZ1bmN0aW9uIHN0YWNrKGRhdGEsIGluZGV4KSB7Ci0gICAgICB2YXIgc2VyaWVzID0g
ZGF0YS5tYXAoZnVuY3Rpb24oZCwgaSkgewotICAgICAgICByZXR1cm4gdmFsdWVzLmNhbGwoc3Rh
Y2ssIGQsIGkpOwotICAgICAgfSk7Ci0gICAgICB2YXIgcG9pbnRzID0gc2VyaWVzLm1hcChmdW5j
dGlvbihkKSB7Ci0gICAgICAgIHJldHVybiBkLm1hcChmdW5jdGlvbih2LCBpKSB7Ci0gICAgICAg
ICAgcmV0dXJuIFsgeC5jYWxsKHN0YWNrLCB2LCBpKSwgeS5jYWxsKHN0YWNrLCB2LCBpKSBdOwot
ICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgICAgdmFyIG9yZGVycyA9IG9yZGVyLmNhbGwoc3Rh
Y2ssIHBvaW50cywgaW5kZXgpOwotICAgICAgc2VyaWVzID0gZDMucGVybXV0ZShzZXJpZXMsIG9y
ZGVycyk7Ci0gICAgICBwb2ludHMgPSBkMy5wZXJtdXRlKHBvaW50cywgb3JkZXJzKTsKLSAgICAg
IHZhciBvZmZzZXRzID0gb2Zmc2V0LmNhbGwoc3RhY2ssIHBvaW50cywgaW5kZXgpOwotICAgICAg
dmFyIG4gPSBzZXJpZXMubGVuZ3RoLCBtID0gc2VyaWVzWzBdLmxlbmd0aCwgaSwgaiwgbzsKLSAg
ICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIHsKLSAgICAgICAgb3V0LmNhbGwoc3RhY2ssIHNl
cmllc1swXVtqXSwgbyA9IG9mZnNldHNbal0sIHBvaW50c1swXVtqXVsxXSk7Ci0gICAgICAgIGZv
ciAoaSA9IDE7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICBvdXQuY2FsbChzdGFjaywgc2VyaWVz
W2ldW2pdLCBvICs9IHBvaW50c1tpIC0gMV1bal1bMV0sIHBvaW50c1tpXVtqXVsxXSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLSAgICBzdGFjay52YWx1
ZXMgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2
YWx1ZXM7Ci0gICAgICB2YWx1ZXMgPSB4OwotICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH07Ci0g
ICAgc3RhY2sub3JkZXIgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiBvcmRlcjsKLSAgICAgIG9yZGVyID0gdHlwZW9mIHggPT09ICJmdW5jdGlvbiIg
PyB4IDogZDNfbGF5b3V0X3N0YWNrT3JkZXJzLmdldCh4KSB8fCBkM19sYXlvdXRfc3RhY2tPcmRl
ckRlZmF1bHQ7Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAgfTsKLSAgICBzdGFjay5vZmZzZXQg
PSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvZmZz
ZXQ7Ci0gICAgICBvZmZzZXQgPSB0eXBlb2YgeCA9PT0gImZ1bmN0aW9uIiA/IHggOiBkM19sYXlv
dXRfc3RhY2tPZmZzZXRzLmdldCh4KSB8fCBkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvOwotICAg
ICAgcmV0dXJuIHN0YWNrOwotICAgIH07Ci0gICAgc3RhY2sueCA9IGZ1bmN0aW9uKHopIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHg7Ci0gICAgICB4ID0gejsKLSAgICAg
IHJldHVybiBzdGFjazsKLSAgICB9OwotICAgIHN0YWNrLnkgPSBmdW5jdGlvbih6KSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB5OwotICAgICAgeSA9IHo7Ci0gICAgICBy
ZXR1cm4gc3RhY2s7Ci0gICAgfTsKLSAgICBzdGFjay5vdXQgPSBmdW5jdGlvbih6KSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvdXQ7Ci0gICAgICBvdXQgPSB6OwotICAg
ICAgcmV0dXJuIHN0YWNrOwotICAgIH07Ci0gICAgcmV0dXJuIHN0YWNrOwotICB9OwotICBmdW5j
dGlvbiBkM19sYXlvdXRfc3RhY2tYKGQpIHsKLSAgICByZXR1cm4gZC54OwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2xheW91dF9zdGFja1koZCkgewotICAgIHJldHVybiBkLnk7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfbGF5b3V0X3N0YWNrT3V0KGQsIHkwLCB5KSB7Ci0gICAgZC55MCA9IHkwOwotICAgIGQu
eSA9IHk7Ci0gIH0KLSAgdmFyIGQzX2xheW91dF9zdGFja09yZGVycyA9IGQzLm1hcCh7Ci0gICAg
Imluc2lkZS1vdXQiOiBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICB2YXIgbiA9IGRhdGEubGVuZ3Ro
LCBpLCBqLCBtYXggPSBkYXRhLm1hcChkM19sYXlvdXRfc3RhY2tNYXhJbmRleCksIHN1bXMgPSBk
YXRhLm1hcChkM19sYXlvdXRfc3RhY2tSZWR1Y2VTdW0pLCBpbmRleCA9IGQzLnJhbmdlKG4pLnNv
cnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICByZXR1cm4gbWF4W2FdIC0gbWF4W2JdOwotICAg
ICAgfSksIHRvcCA9IDAsIGJvdHRvbSA9IDAsIHRvcHMgPSBbXSwgYm90dG9tcyA9IFtdOwotICAg
ICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICBqID0gaW5kZXhbaV07Ci0gICAg
ICAgIGlmICh0b3AgPCBib3R0b20pIHsKLSAgICAgICAgICB0b3AgKz0gc3Vtc1tqXTsKLSAgICAg
ICAgICB0b3BzLnB1c2goaik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYm90dG9tICs9
IHN1bXNbal07Ci0gICAgICAgICAgYm90dG9tcy5wdXNoKGopOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gYm90dG9tcy5yZXZlcnNlKCkuY29uY2F0KHRvcHMpOwotICAgIH0sCi0g
ICAgcmV2ZXJzZTogZnVuY3Rpb24oZGF0YSkgewotICAgICAgcmV0dXJuIGQzLnJhbmdlKGRhdGEu
bGVuZ3RoKS5yZXZlcnNlKCk7Ci0gICAgfSwKLSAgICAiZGVmYXVsdCI6IGQzX2xheW91dF9zdGFj
a09yZGVyRGVmYXVsdAotICB9KTsKLSAgdmFyIGQzX2xheW91dF9zdGFja09mZnNldHMgPSBkMy5t
YXAoewotICAgIHNpbGhvdWV0dGU6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHZhciBuID0gZGF0
YS5sZW5ndGgsIG0gPSBkYXRhWzBdLmxlbmd0aCwgc3VtcyA9IFtdLCBtYXggPSAwLCBpLCBqLCBv
LCB5MCA9IFtdOwotICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgewotICAgICAgICBmb3Ig
KGkgPSAwLCBvID0gMDsgaSA8IG47IGkrKykgbyArPSBkYXRhW2ldW2pdWzFdOwotICAgICAgICBp
ZiAobyA+IG1heCkgbWF4ID0gbzsKLSAgICAgICAgc3Vtcy5wdXNoKG8pOwotICAgICAgfQotICAg
ICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgewotICAgICAgICB5MFtqXSA9IChtYXggLSBzdW1z
W2pdKSAvIDI7Ci0gICAgICB9Ci0gICAgICByZXR1cm4geTA7Ci0gICAgfSwKLSAgICB3aWdnbGU6
IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHZhciBuID0gZGF0YS5sZW5ndGgsIHggPSBkYXRhWzBd
LCBtID0geC5sZW5ndGgsIGksIGosIGssIHMxLCBzMiwgczMsIGR4LCBvLCBvMCwgeTAgPSBbXTsK
LSAgICAgIHkwWzBdID0gbyA9IG8wID0gMDsKLSAgICAgIGZvciAoaiA9IDE7IGogPCBtOyArK2op
IHsKLSAgICAgICAgZm9yIChpID0gMCwgczEgPSAwOyBpIDwgbjsgKytpKSBzMSArPSBkYXRhW2ld
W2pdWzFdOwotICAgICAgICBmb3IgKGkgPSAwLCBzMiA9IDAsIGR4ID0geFtqXVswXSAtIHhbaiAt
IDFdWzBdOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgZm9yIChrID0gMCwgczMgPSAoZGF0YVtp
XVtqXVsxXSAtIGRhdGFbaV1baiAtIDFdWzFdKSAvICgyICogZHgpOyBrIDwgaTsgKytrKSB7Ci0g
ICAgICAgICAgICBzMyArPSAoZGF0YVtrXVtqXVsxXSAtIGRhdGFba11baiAtIDFdWzFdKSAvIGR4
OwotICAgICAgICAgIH0KLSAgICAgICAgICBzMiArPSBzMyAqIGRhdGFbaV1bal1bMV07Ci0gICAg
ICAgIH0KLSAgICAgICAgeTBbal0gPSBvIC09IHMxID8gczIgLyBzMSAqIGR4IDogMDsKLSAgICAg
ICAgaWYgKG8gPCBvMCkgbzAgPSBvOwotICAgICAgfQotICAgICAgZm9yIChqID0gMDsgaiA8IG07
ICsraikgeTBbal0gLT0gbzA7Ci0gICAgICByZXR1cm4geTA7Ci0gICAgfSwKLSAgICBleHBhbmQ6
IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHZhciBuID0gZGF0YS5sZW5ndGgsIG0gPSBkYXRhWzBd
Lmxlbmd0aCwgayA9IDEgLyBuLCBpLCBqLCBvLCB5MCA9IFtdOwotICAgICAgZm9yIChqID0gMDsg
aiA8IG07ICsraikgewotICAgICAgICBmb3IgKGkgPSAwLCBvID0gMDsgaSA8IG47IGkrKykgbyAr
PSBkYXRhW2ldW2pdWzFdOwotICAgICAgICBpZiAobykgZm9yIChpID0gMDsgaSA8IG47IGkrKykg
ZGF0YVtpXVtqXVsxXSAvPSBvOyBlbHNlIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIGRhdGFbaV1b
al1bMV0gPSBrOwotICAgICAgfQotICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgeTBbal0g
PSAwOwotICAgICAgcmV0dXJuIHkwOwotICAgIH0sCi0gICAgemVybzogZDNfbGF5b3V0X3N0YWNr
T2Zmc2V0WmVybwotICB9KTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrT3JkZXJEZWZhdWx0
KGRhdGEpIHsKLSAgICByZXR1cm4gZDMucmFuZ2UoZGF0YS5sZW5ndGgpOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2xheW91dF9zdGFja09mZnNldFplcm8oZGF0YSkgewotICAgIHZhciBqID0gLTEsIG0g
PSBkYXRhWzBdLmxlbmd0aCwgeTAgPSBbXTsKLSAgICB3aGlsZSAoKytqIDwgbSkgeTBbal0gPSAw
OwotICAgIHJldHVybiB5MDsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tNYXhJbmRl
eChhcnJheSkgewotICAgIHZhciBpID0gMSwgaiA9IDAsIHYgPSBhcnJheVswXVsxXSwgaywgbiA9
IGFycmF5Lmxlbmd0aDsKLSAgICBmb3IgKDtpIDwgbjsgKytpKSB7Ci0gICAgICBpZiAoKGsgPSBh
cnJheVtpXVsxXSkgPiB2KSB7Ci0gICAgICAgIGogPSBpOwotICAgICAgICB2ID0gazsKLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGo7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNr
UmVkdWNlU3VtKGQpIHsKLSAgICByZXR1cm4gZC5yZWR1Y2UoZDNfbGF5b3V0X3N0YWNrU3VtLCAw
KTsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tTdW0ocCwgZCkgewotICAgIHJldHVy
biBwICsgZFsxXTsKLSAgfQotICBkMy5sYXlvdXQuaGlzdG9ncmFtID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIGZyZXF1ZW5jeSA9IHRydWUsIHZhbHVlciA9IE51bWJlciwgcmFuZ2VyID0gZDNfbGF5
b3V0X2hpc3RvZ3JhbVJhbmdlLCBiaW5uZXIgPSBkM19sYXlvdXRfaGlzdG9ncmFtQmluU3R1cmdl
czsKLSAgICBmdW5jdGlvbiBoaXN0b2dyYW0oZGF0YSwgaSkgewotICAgICAgdmFyIGJpbnMgPSBb
XSwgdmFsdWVzID0gZGF0YS5tYXAodmFsdWVyLCB0aGlzKSwgcmFuZ2UgPSByYW5nZXIuY2FsbCh0
aGlzLCB2YWx1ZXMsIGkpLCB0aHJlc2hvbGRzID0gYmlubmVyLmNhbGwodGhpcywgcmFuZ2UsIHZh
bHVlcywgaSksIGJpbiwgaSA9IC0xLCBuID0gdmFsdWVzLmxlbmd0aCwgbSA9IHRocmVzaG9sZHMu
bGVuZ3RoIC0gMSwgayA9IGZyZXF1ZW5jeSA/IDEgOiAxIC8gbiwgeDsKLSAgICAgIHdoaWxlICgr
K2kgPCBtKSB7Ci0gICAgICAgIGJpbiA9IGJpbnNbaV0gPSBbXTsKLSAgICAgICAgYmluLmR4ID0g
dGhyZXNob2xkc1tpICsgMV0gLSAoYmluLnggPSB0aHJlc2hvbGRzW2ldKTsKLSAgICAgICAgYmlu
LnkgPSAwOwotICAgICAgfQotICAgICAgaWYgKG0gPiAwKSB7Ci0gICAgICAgIGkgPSAtMTsKLSAg
ICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgICB4ID0gdmFsdWVzW2ldOwotICAgICAg
ICAgIGlmICh4ID49IHJhbmdlWzBdICYmIHggPD0gcmFuZ2VbMV0pIHsKLSAgICAgICAgICAgIGJp
biA9IGJpbnNbZDMuYmlzZWN0KHRocmVzaG9sZHMsIHgsIDEsIG0pIC0gMV07Ci0gICAgICAgICAg
ICBiaW4ueSArPSBrOwotICAgICAgICAgICAgYmluLnB1c2goZGF0YVtpXSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gYmluczsKLSAgICB9Ci0gICAgaGlz
dG9ncmFtLnZhbHVlID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4gdmFsdWVyOwotICAgICAgdmFsdWVyID0geDsKLSAgICAgIHJldHVybiBoaXN0b2dy
YW07Ci0gICAgfTsKLSAgICBoaXN0b2dyYW0ucmFuZ2UgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByYW5nZXI7Ci0gICAgICByYW5nZXIgPSBkM19m
dW5jdG9yKHgpOwotICAgICAgcmV0dXJuIGhpc3RvZ3JhbTsKLSAgICB9OwotICAgIGhpc3RvZ3Jh
bS5iaW5zID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1
cm4gYmlubmVyOwotICAgICAgYmlubmVyID0gdHlwZW9mIHggPT09ICJudW1iZXIiID8gZnVuY3Rp
b24ocmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIGQzX2xheW91dF9oaXN0b2dyYW1CaW5GaXhlZChy
YW5nZSwgeCk7Ci0gICAgICB9IDogZDNfZnVuY3Rvcih4KTsKLSAgICAgIHJldHVybiBoaXN0b2dy
YW07Ci0gICAgfTsKLSAgICBoaXN0b2dyYW0uZnJlcXVlbmN5ID0gZnVuY3Rpb24oeCkgewotICAg
ICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZnJlcXVlbmN5OwotICAgICAgZnJlcXVl
bmN5ID0gISF4OwotICAgICAgcmV0dXJuIGhpc3RvZ3JhbTsKLSAgICB9OwotICAgIHJldHVybiBo
aXN0b2dyYW07Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9oaXN0b2dyYW1CaW5TdHVyZ2Vz
KHJhbmdlLCB2YWx1ZXMpIHsKLSAgICByZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVk
KHJhbmdlLCBNYXRoLmNlaWwoTWF0aC5sb2codmFsdWVzLmxlbmd0aCkgLyBNYXRoLkxOMiArIDEp
KTsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfaGlzdG9ncmFtQmluRml4ZWQocmFuZ2UsIG4p
IHsKLSAgICB2YXIgeCA9IC0xLCBiID0gK3JhbmdlWzBdLCBtID0gKHJhbmdlWzFdIC0gYikgLyBu
LCBmID0gW107Ci0gICAgd2hpbGUgKCsreCA8PSBuKSBmW3hdID0gbSAqIHggKyBiOwotICAgIHJl
dHVybiBmOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9oaXN0b2dyYW1SYW5nZSh2YWx1ZXMp
IHsKLSAgICByZXR1cm4gWyBkMy5taW4odmFsdWVzKSwgZDMubWF4KHZhbHVlcykgXTsKLSAgfQot
ICBkMy5sYXlvdXQucGFjayA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBoaWVyYXJjaHkgPSBkMy5s
YXlvdXQuaGllcmFyY2h5KCkuc29ydChkM19sYXlvdXRfcGFja1NvcnQpLCBwYWRkaW5nID0gMCwg
c2l6ZSA9IFsgMSwgMSBdLCByYWRpdXM7Ci0gICAgZnVuY3Rpb24gcGFjayhkLCBpKSB7Ci0gICAg
ICB2YXIgbm9kZXMgPSBoaWVyYXJjaHkuY2FsbCh0aGlzLCBkLCBpKSwgcm9vdCA9IG5vZGVzWzBd
LCB3ID0gc2l6ZVswXSwgaCA9IHNpemVbMV0sIHIgPSByYWRpdXMgPT0gbnVsbCA/IE1hdGguc3Fy
dCA6IHR5cGVvZiByYWRpdXMgPT09ICJmdW5jdGlvbiIgPyByYWRpdXMgOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHJhZGl1czsKLSAgICAgIH07Ci0gICAgICByb290LnggPSByb290Lnkg
PSAwOwotICAgICAgZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgZnVuY3Rpb24o
ZCkgewotICAgICAgICBkLnIgPSArcihkLnZhbHVlKTsKLSAgICAgIH0pOwotICAgICAgZDNfbGF5
b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgZDNfbGF5b3V0X3BhY2tTaWJsaW5ncyk7Ci0g
ICAgICBpZiAocGFkZGluZykgewotICAgICAgICB2YXIgZHIgPSBwYWRkaW5nICogKHJhZGl1cyA/
IDEgOiBNYXRoLm1heCgyICogcm9vdC5yIC8gdywgMiAqIHJvb3QuciAvIGgpKSAvIDI7Ci0gICAg
ICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsIGZ1bmN0aW9uKGQpIHsKLSAg
ICAgICAgICBkLnIgKz0gZHI7Ci0gICAgICAgIH0pOwotICAgICAgICBkM19sYXlvdXRfaGllcmFy
Y2h5VmlzaXRBZnRlcihyb290LCBkM19sYXlvdXRfcGFja1NpYmxpbmdzKTsKLSAgICAgICAgZDNf
bGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgZnVuY3Rpb24oZCkgewotICAgICAgICAg
IGQuciAtPSBkcjsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBkM19sYXlvdXRfcGFja1Ry
YW5zZm9ybShyb290LCB3IC8gMiwgaCAvIDIsIHJhZGl1cyA/IDEgOiAxIC8gTWF0aC5tYXgoMiAq
IHJvb3QuciAvIHcsIDIgKiByb290LnIgLyBoKSk7Ci0gICAgICByZXR1cm4gbm9kZXM7Ci0gICAg
fQotICAgIHBhY2suc2l6ZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxl
bmd0aCkgcmV0dXJuIHNpemU7Ci0gICAgICBzaXplID0gXzsKLSAgICAgIHJldHVybiBwYWNrOwot
ICAgIH07Ci0gICAgcGFjay5yYWRpdXMgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiByYWRpdXM7Ci0gICAgICByYWRpdXMgPSBfID09IG51bGwgfHwg
dHlwZW9mIF8gPT09ICJmdW5jdGlvbiIgPyBfIDogK187Ci0gICAgICByZXR1cm4gcGFjazsKLSAg
ICB9OwotICAgIHBhY2sucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIHBhZGRpbmc7Ci0gICAgICBwYWRkaW5nID0gK187Ci0gICAgICBy
ZXR1cm4gcGFjazsKLSAgICB9OwotICAgIHJldHVybiBkM19sYXlvdXRfaGllcmFyY2h5UmViaW5k
KHBhY2ssIGhpZXJhcmNoeSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9wYWNrU29ydChh
LCBiKSB7Ci0gICAgcmV0dXJuIGEudmFsdWUgLSBiLnZhbHVlOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2xheW91dF9wYWNrSW5zZXJ0KGEsIGIpIHsKLSAgICB2YXIgYyA9IGEuX3BhY2tfbmV4dDsKLSAg
ICBhLl9wYWNrX25leHQgPSBiOwotICAgIGIuX3BhY2tfcHJldiA9IGE7Ci0gICAgYi5fcGFja19u
ZXh0ID0gYzsKLSAgICBjLl9wYWNrX3ByZXYgPSBiOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91
dF9wYWNrU3BsaWNlKGEsIGIpIHsKLSAgICBhLl9wYWNrX25leHQgPSBiOwotICAgIGIuX3BhY2tf
cHJldiA9IGE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGEsIGIp
IHsKLSAgICB2YXIgZHggPSBiLnggLSBhLngsIGR5ID0gYi55IC0gYS55LCBkciA9IGEuciArIGIu
cjsKLSAgICByZXR1cm4gLjk5OSAqIGRyICogZHIgPiBkeCAqIGR4ICsgZHkgKiBkeTsKLSAgfQot
ICBmdW5jdGlvbiBkM19sYXlvdXRfcGFja1NpYmxpbmdzKG5vZGUpIHsKLSAgICBpZiAoIShub2Rl
cyA9IG5vZGUuY2hpbGRyZW4pIHx8ICEobiA9IG5vZGVzLmxlbmd0aCkpIHJldHVybjsKLSAgICB2
YXIgbm9kZXMsIHhNaW4gPSBJbmZpbml0eSwgeE1heCA9IC1JbmZpbml0eSwgeU1pbiA9IEluZmlu
aXR5LCB5TWF4ID0gLUluZmluaXR5LCBhLCBiLCBjLCBpLCBqLCBrLCBuOwotICAgIGZ1bmN0aW9u
IGJvdW5kKG5vZGUpIHsKLSAgICAgIHhNaW4gPSBNYXRoLm1pbihub2RlLnggLSBub2RlLnIsIHhN
aW4pOwotICAgICAgeE1heCA9IE1hdGgubWF4KG5vZGUueCArIG5vZGUuciwgeE1heCk7Ci0gICAg
ICB5TWluID0gTWF0aC5taW4obm9kZS55IC0gbm9kZS5yLCB5TWluKTsKLSAgICAgIHlNYXggPSBN
YXRoLm1heChub2RlLnkgKyBub2RlLnIsIHlNYXgpOwotICAgIH0KLSAgICBub2Rlcy5mb3JFYWNo
KGQzX2xheW91dF9wYWNrTGluayk7Ci0gICAgYSA9IG5vZGVzWzBdOwotICAgIGEueCA9IC1hLnI7
Ci0gICAgYS55ID0gMDsKLSAgICBib3VuZChhKTsKLSAgICBpZiAobiA+IDEpIHsKLSAgICAgIGIg
PSBub2Rlc1sxXTsKLSAgICAgIGIueCA9IGIucjsKLSAgICAgIGIueSA9IDA7Ci0gICAgICBib3Vu
ZChiKTsKLSAgICAgIGlmIChuID4gMikgewotICAgICAgICBjID0gbm9kZXNbMl07Ci0gICAgICAg
IGQzX2xheW91dF9wYWNrUGxhY2UoYSwgYiwgYyk7Ci0gICAgICAgIGJvdW5kKGMpOwotICAgICAg
ICBkM19sYXlvdXRfcGFja0luc2VydChhLCBjKTsKLSAgICAgICAgYS5fcGFja19wcmV2ID0gYzsK
LSAgICAgICAgZDNfbGF5b3V0X3BhY2tJbnNlcnQoYywgYik7Ci0gICAgICAgIGIgPSBhLl9wYWNr
X25leHQ7Ci0gICAgICAgIGZvciAoaSA9IDM7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICBkM19s
YXlvdXRfcGFja1BsYWNlKGEsIGIsIGMgPSBub2Rlc1tpXSk7Ci0gICAgICAgICAgdmFyIGlzZWN0
ID0gMCwgczEgPSAxLCBzMiA9IDE7Ci0gICAgICAgICAgZm9yIChqID0gYi5fcGFja19uZXh0OyBq
ICE9PSBiOyBqID0gai5fcGFja19uZXh0LCBzMSsrKSB7Ci0gICAgICAgICAgICBpZiAoZDNfbGF5
b3V0X3BhY2tJbnRlcnNlY3RzKGosIGMpKSB7Ci0gICAgICAgICAgICAgIGlzZWN0ID0gMTsKLSAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAg
IGlmIChpc2VjdCA9PSAxKSB7Ci0gICAgICAgICAgICBmb3IgKGsgPSBhLl9wYWNrX3ByZXY7IGsg
IT09IGouX3BhY2tfcHJldjsgayA9IGsuX3BhY2tfcHJldiwgczIrKykgewotICAgICAgICAgICAg
ICBpZiAoZDNfbGF5b3V0X3BhY2tJbnRlcnNlY3RzKGssIGMpKSB7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgICAgaWYgKGlzZWN0KSB7Ci0gICAgICAgICAgICBpZiAoczEgPCBzMiB8fCBzMSA9PSBzMiAm
JiBiLnIgPCBhLnIpIGQzX2xheW91dF9wYWNrU3BsaWNlKGEsIGIgPSBqKTsgZWxzZSBkM19sYXlv
dXRfcGFja1NwbGljZShhID0gaywgYik7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGQzX2xheW91dF9wYWNrSW5zZXJ0KGEsIGMpOwotICAgICAgICAg
ICAgYiA9IGM7Ci0gICAgICAgICAgICBib3VuZChjKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIGN4ID0gKHhNaW4gKyB4TWF4KSAvIDIsIGN5ID0gKHlN
aW4gKyB5TWF4KSAvIDIsIGNyID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0g
ICAgICBjID0gbm9kZXNbaV07Ci0gICAgICBjLnggLT0gY3g7Ci0gICAgICBjLnkgLT0gY3k7Ci0g
ICAgICBjciA9IE1hdGgubWF4KGNyLCBjLnIgKyBNYXRoLnNxcnQoYy54ICogYy54ICsgYy55ICog
Yy55KSk7Ci0gICAgfQotICAgIG5vZGUuciA9IGNyOwotICAgIG5vZGVzLmZvckVhY2goZDNfbGF5
b3V0X3BhY2tVbmxpbmspOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9wYWNrTGluayhub2Rl
KSB7Ci0gICAgbm9kZS5fcGFja19uZXh0ID0gbm9kZS5fcGFja19wcmV2ID0gbm9kZTsKLSAgfQot
ICBmdW5jdGlvbiBkM19sYXlvdXRfcGFja1VubGluayhub2RlKSB7Ci0gICAgZGVsZXRlIG5vZGUu
X3BhY2tfbmV4dDsKLSAgICBkZWxldGUgbm9kZS5fcGFja19wcmV2OwotICB9Ci0gIGZ1bmN0aW9u
IGQzX2xheW91dF9wYWNrVHJhbnNmb3JtKG5vZGUsIHgsIHksIGspIHsKLSAgICB2YXIgY2hpbGRy
ZW4gPSBub2RlLmNoaWxkcmVuOwotICAgIG5vZGUueCA9IHggKz0gayAqIG5vZGUueDsKLSAgICBu
b2RlLnkgPSB5ICs9IGsgKiBub2RlLnk7Ci0gICAgbm9kZS5yICo9IGs7Ci0gICAgaWYgKGNoaWxk
cmVuKSB7Ci0gICAgICB2YXIgaSA9IC0xLCBuID0gY2hpbGRyZW4ubGVuZ3RoOwotICAgICAgd2hp
bGUgKCsraSA8IG4pIGQzX2xheW91dF9wYWNrVHJhbnNmb3JtKGNoaWxkcmVuW2ldLCB4LCB5LCBr
KTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tQbGFjZShhLCBiLCBjKSB7
Ci0gICAgdmFyIGRiID0gYS5yICsgYy5yLCBkeCA9IGIueCAtIGEueCwgZHkgPSBiLnkgLSBhLnk7
Ci0gICAgaWYgKGRiICYmIChkeCB8fCBkeSkpIHsKLSAgICAgIHZhciBkYSA9IGIuciArIGMuciwg
ZGMgPSBkeCAqIGR4ICsgZHkgKiBkeTsKLSAgICAgIGRhICo9IGRhOwotICAgICAgZGIgKj0gZGI7
Ci0gICAgICB2YXIgeCA9IC41ICsgKGRiIC0gZGEpIC8gKDIgKiBkYyksIHkgPSBNYXRoLnNxcnQo
TWF0aC5tYXgoMCwgMiAqIGRhICogKGRiICsgZGMpIC0gKGRiIC09IGRjKSAqIGRiIC0gZGEgKiBk
YSkpIC8gKDIgKiBkYyk7Ci0gICAgICBjLnggPSBhLnggKyB4ICogZHggKyB5ICogZHk7Ci0gICAg
ICBjLnkgPSBhLnkgKyB4ICogZHkgLSB5ICogZHg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGMueCA9
IGEueCArIGRiOwotICAgICAgYy55ID0gYS55OwotICAgIH0KLSAgfQotICBkMy5sYXlvdXQudHJl
ZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBoaWVyYXJjaHkgPSBkMy5sYXlvdXQuaGllcmFyY2h5
KCkuc29ydChudWxsKS52YWx1ZShudWxsKSwgc2VwYXJhdGlvbiA9IGQzX2xheW91dF90cmVlU2Vw
YXJhdGlvbiwgc2l6ZSA9IFsgMSwgMSBdLCBub2RlU2l6ZSA9IG51bGw7Ci0gICAgZnVuY3Rpb24g
dHJlZShkLCBpKSB7Ci0gICAgICB2YXIgbm9kZXMgPSBoaWVyYXJjaHkuY2FsbCh0aGlzLCBkLCBp
KSwgcm9vdDAgPSBub2Rlc1swXSwgcm9vdDEgPSB3cmFwVHJlZShyb290MCk7Ci0gICAgICBkM19s
YXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290MSwgZmlyc3RXYWxrKSwgcm9vdDEucGFyZW50
Lm0gPSAtcm9vdDEuejsKLSAgICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290
MSwgc2Vjb25kV2Fsayk7Ci0gICAgICBpZiAobm9kZVNpemUpIGQzX2xheW91dF9oaWVyYXJjaHlW
aXNpdEJlZm9yZShyb290MCwgc2l6ZU5vZGUpOyBlbHNlIHsKLSAgICAgICAgdmFyIGxlZnQgPSBy
b290MCwgcmlnaHQgPSByb290MCwgYm90dG9tID0gcm9vdDA7Ci0gICAgICAgIGQzX2xheW91dF9o
aWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCwgZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgIGlm
IChub2RlLnggPCBsZWZ0LngpIGxlZnQgPSBub2RlOwotICAgICAgICAgIGlmIChub2RlLnggPiBy
aWdodC54KSByaWdodCA9IG5vZGU7Ci0gICAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20u
ZGVwdGgpIGJvdHRvbSA9IG5vZGU7Ci0gICAgICAgIH0pOwotICAgICAgICB2YXIgdHggPSBzZXBh
cmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIgLSBsZWZ0LngsIGt4ID0gc2l6ZVswXSAvIChyaWdodC54
ICsgc2VwYXJhdGlvbihyaWdodCwgbGVmdCkgLyAyICsgdHgpLCBreSA9IHNpemVbMV0gLyAoYm90
dG9tLmRlcHRoIHx8IDEpOwotICAgICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRCZWZvcmUo
cm9vdDAsIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICBub2RlLnggPSAobm9kZS54ICsgdHgp
ICoga3g7Ci0gICAgICAgICAgbm9kZS55ID0gbm9kZS5kZXB0aCAqIGt5OwotICAgICAgICB9KTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBub2RlczsKLSAgICB9Ci0gICAgZnVuY3Rpb24gd3JhcFRy
ZWUocm9vdDApIHsKLSAgICAgIHZhciByb290MSA9IHsKLSAgICAgICAgQTogbnVsbCwKLSAgICAg
ICAgY2hpbGRyZW46IFsgcm9vdDAgXQotICAgICAgfSwgcXVldWUgPSBbIHJvb3QxIF0sIG5vZGUx
OwotICAgICAgd2hpbGUgKChub2RlMSA9IHF1ZXVlLnBvcCgpKSAhPSBudWxsKSB7Ci0gICAgICAg
IGZvciAodmFyIGNoaWxkcmVuID0gbm9kZTEuY2hpbGRyZW4sIGNoaWxkLCBpID0gMCwgbiA9IGNo
aWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgIHF1ZXVlLnB1c2goKGNoaWxk
cmVuW2ldID0gY2hpbGQgPSB7Ci0gICAgICAgICAgICBfOiBjaGlsZHJlbltpXSwKLSAgICAgICAg
ICAgIHBhcmVudDogbm9kZTEsCi0gICAgICAgICAgICBjaGlsZHJlbjogKGNoaWxkID0gY2hpbGRy
ZW5baV0uY2hpbGRyZW4pICYmIGNoaWxkLnNsaWNlKCkgfHwgW10sCi0gICAgICAgICAgICBBOiBu
dWxsLAotICAgICAgICAgICAgYTogbnVsbCwKLSAgICAgICAgICAgIHo6IDAsCi0gICAgICAgICAg
ICBtOiAwLAotICAgICAgICAgICAgYzogMCwKLSAgICAgICAgICAgIHM6IDAsCi0gICAgICAgICAg
ICB0OiBudWxsLAotICAgICAgICAgICAgaTogaQotICAgICAgICAgIH0pLmEgPSBjaGlsZCk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiByb290MS5jaGlsZHJlblswXTsKLSAgICB9
Ci0gICAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHsKLSAgICAgIHZhciBjaGlsZHJlbiA9IHYuY2hp
bGRyZW4sIHNpYmxpbmdzID0gdi5wYXJlbnQuY2hpbGRyZW4sIHcgPSB2LmkgPyBzaWJsaW5nc1t2
LmkgLSAxXSA6IG51bGw7Ci0gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAgICAgIGQz
X2xheW91dF90cmVlU2hpZnQodik7Ci0gICAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblsw
XS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyOwotICAgICAgICBpZiAo
dykgewotICAgICAgICAgIHYueiA9IHcueiArIHNlcGFyYXRpb24odi5fLCB3Ll8pOwotICAgICAg
ICAgIHYubSA9IHYueiAtIG1pZHBvaW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHYu
eiA9IG1pZHBvaW50OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHcpIHsKLSAgICAgICAg
di56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7Ci0gICAgICB9Ci0gICAgICB2LnBhcmVu
dC5BID0gYXBwb3J0aW9uKHYsIHcsIHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pOwotICAgIH0K
LSAgICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHsKLSAgICAgIHYuXy54ID0gdi56ICsgdi5wYXJl
bnQubTsKLSAgICAgIHYubSArPSB2LnBhcmVudC5tOwotICAgIH0KLSAgICBmdW5jdGlvbiBhcHBv
cnRpb24odiwgdywgYW5jZXN0b3IpIHsKLSAgICAgIGlmICh3KSB7Ci0gICAgICAgIHZhciB2aXAg
PSB2LCB2b3AgPSB2LCB2aW0gPSB3LCB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLCBzaXAg
PSB2aXAubSwgc29wID0gdm9wLm0sIHNpbSA9IHZpbS5tLCBzb20gPSB2b20ubSwgc2hpZnQ7Ci0g
ICAgICAgIHdoaWxlICh2aW0gPSBkM19sYXlvdXRfdHJlZVJpZ2h0KHZpbSksIHZpcCA9IGQzX2xh
eW91dF90cmVlTGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7Ci0gICAgICAgICAgdm9tID0gZDNfbGF5
b3V0X3RyZWVMZWZ0KHZvbSk7Ci0gICAgICAgICAgdm9wID0gZDNfbGF5b3V0X3RyZWVSaWdodCh2
b3ApOwotICAgICAgICAgIHZvcC5hID0gdjsKLSAgICAgICAgICBzaGlmdCA9IHZpbS56ICsgc2lt
IC0gdmlwLnogLSBzaXAgKyBzZXBhcmF0aW9uKHZpbS5fLCB2aXAuXyk7Ci0gICAgICAgICAgaWYg
KHNoaWZ0ID4gMCkgewotICAgICAgICAgICAgZDNfbGF5b3V0X3RyZWVNb3ZlKGQzX2xheW91dF90
cmVlQW5jZXN0b3IodmltLCB2LCBhbmNlc3RvciksIHYsIHNoaWZ0KTsKLSAgICAgICAgICAgIHNp
cCArPSBzaGlmdDsKLSAgICAgICAgICAgIHNvcCArPSBzaGlmdDsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgc2ltICs9IHZpbS5tOwotICAgICAgICAgIHNpcCArPSB2aXAubTsKLSAgICAgICAgICBz
b20gKz0gdm9tLm07Ci0gICAgICAgICAgc29wICs9IHZvcC5tOwotICAgICAgICB9Ci0gICAgICAg
IGlmICh2aW0gJiYgIWQzX2xheW91dF90cmVlUmlnaHQodm9wKSkgewotICAgICAgICAgIHZvcC50
ID0gdmltOwotICAgICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAodmlwICYmICFkM19sYXlvdXRfdHJlZUxlZnQodm9tKSkgewotICAgICAgICAgIHZvbS50
ID0gdmlwOwotICAgICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTsKLSAgICAgICAgICBhbmNlc3Rv
ciA9IHY7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBhbmNlc3RvcjsKLSAgICB9
Ci0gICAgZnVuY3Rpb24gc2l6ZU5vZGUobm9kZSkgewotICAgICAgbm9kZS54ICo9IHNpemVbMF07
Ci0gICAgICBub2RlLnkgPSBub2RlLmRlcHRoICogc2l6ZVsxXTsKLSAgICB9Ci0gICAgdHJlZS5z
ZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSBy
ZXR1cm4gc2VwYXJhdGlvbjsKLSAgICAgIHNlcGFyYXRpb24gPSB4OwotICAgICAgcmV0dXJuIHRy
ZWU7Ci0gICAgfTsKLSAgICB0cmVlLnNpemUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlU2l6ZSA/IG51bGwgOiBzaXplOwotICAgICAgbm9k
ZVNpemUgPSAoc2l6ZSA9IHgpID09IG51bGwgPyBzaXplTm9kZSA6IG51bGw7Ci0gICAgICByZXR1
cm4gdHJlZTsKLSAgICB9OwotICAgIHRyZWUubm9kZVNpemUgPSBmdW5jdGlvbih4KSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlU2l6ZSA/IHNpemUgOiBudWxsOwot
ICAgICAgbm9kZVNpemUgPSAoc2l6ZSA9IHgpID09IG51bGwgPyBudWxsIDogc2l6ZU5vZGU7Ci0g
ICAgICByZXR1cm4gdHJlZTsKLSAgICB9OwotICAgIHJldHVybiBkM19sYXlvdXRfaGllcmFyY2h5
UmViaW5kKHRyZWUsIGhpZXJhcmNoeSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF90cmVl
U2VwYXJhdGlvbihhLCBiKSB7Ci0gICAgcmV0dXJuIGEucGFyZW50ID09IGIucGFyZW50ID8gMSA6
IDI7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3RyZWVMZWZ0KHYpIHsKLSAgICB2YXIgY2hp
bGRyZW4gPSB2LmNoaWxkcmVuOwotICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPyBjaGlsZHJl
blswXSA6IHYudDsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfdHJlZVJpZ2h0KHYpIHsKLSAg
ICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLCBuOwotICAgIHJldHVybiAobiA9IGNoaWxkcmVu
Lmxlbmd0aCkgPyBjaGlsZHJlbltuIC0gMV0gOiB2LnQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5
b3V0X3RyZWVNb3ZlKHdtLCB3cCwgc2hpZnQpIHsKLSAgICB2YXIgY2hhbmdlID0gc2hpZnQgLyAo
d3AuaSAtIHdtLmkpOwotICAgIHdwLmMgLT0gY2hhbmdlOwotICAgIHdwLnMgKz0gc2hpZnQ7Ci0g
ICAgd20uYyArPSBjaGFuZ2U7Ci0gICAgd3AueiArPSBzaGlmdDsKLSAgICB3cC5tICs9IHNoaWZ0
OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF90cmVlU2hpZnQodikgewotICAgIHZhciBzaGlm
dCA9IDAsIGNoYW5nZSA9IDAsIGNoaWxkcmVuID0gdi5jaGlsZHJlbiwgaSA9IGNoaWxkcmVuLmxl
bmd0aCwgdzsKLSAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgIHcgPSBjaGlsZHJlbltpXTsK
LSAgICAgIHcueiArPSBzaGlmdDsKLSAgICAgIHcubSArPSBzaGlmdDsKLSAgICAgIHNoaWZ0ICs9
IHcucyArIChjaGFuZ2UgKz0gdy5jKTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0
X3RyZWVBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSB7Ci0gICAgcmV0dXJuIHZpbS5hLnBhcmVu
dCA9PT0gdi5wYXJlbnQgPyB2aW0uYSA6IGFuY2VzdG9yOwotICB9Ci0gIGQzLmxheW91dC5jbHVz
dGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhpZXJhcmNoeSA9IGQzLmxheW91dC5oaWVyYXJj
aHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLCBzZXBhcmF0aW9uID0gZDNfbGF5b3V0X3RyZWVT
ZXBhcmF0aW9uLCBzaXplID0gWyAxLCAxIF0sIG5vZGVTaXplID0gZmFsc2U7Ci0gICAgZnVuY3Rp
b24gY2x1c3RlcihkLCBpKSB7Ci0gICAgICB2YXIgbm9kZXMgPSBoaWVyYXJjaHkuY2FsbCh0aGlz
LCBkLCBpKSwgcm9vdCA9IG5vZGVzWzBdLCBwcmV2aW91c05vZGUsIHggPSAwOwotICAgICAgZDNf
bGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOwotICAgICAgICBpZiAoY2hpbGRyZW4gJiYg
Y2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAgICAgICAgbm9kZS54ID0gZDNfbGF5b3V0X2NsdXN0ZXJY
KGNoaWxkcmVuKTsKLSAgICAgICAgICBub2RlLnkgPSBkM19sYXlvdXRfY2x1c3RlclkoY2hpbGRy
ZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG5vZGUueCA9IHByZXZpb3VzTm9kZSA/
IHggKz0gc2VwYXJhdGlvbihub2RlLCBwcmV2aW91c05vZGUpIDogMDsKLSAgICAgICAgICBub2Rl
LnkgPSAwOwotICAgICAgICAgIHByZXZpb3VzTm9kZSA9IG5vZGU7Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgICAgdmFyIGxlZnQgPSBkM19sYXlvdXRfY2x1c3RlckxlZnQocm9vdCksIHJpZ2h0
ID0gZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChyb290KSwgeDAgPSBsZWZ0LnggLSBzZXBhcmF0aW9u
KGxlZnQsIHJpZ2h0KSAvIDIsIHgxID0gcmlnaHQueCArIHNlcGFyYXRpb24ocmlnaHQsIGxlZnQp
IC8gMjsKLSAgICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsIG5vZGVTaXpl
ID8gZnVuY3Rpb24obm9kZSkgewotICAgICAgICBub2RlLnggPSAobm9kZS54IC0gcm9vdC54KSAq
IHNpemVbMF07Ci0gICAgICAgIG5vZGUueSA9IChyb290LnkgLSBub2RlLnkpICogc2l6ZVsxXTsK
LSAgICAgIH0gOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgIG5vZGUueCA9IChub2RlLnggLSB4
MCkgLyAoeDEgLSB4MCkgKiBzaXplWzBdOwotICAgICAgICBub2RlLnkgPSAoMSAtIChyb290Lnkg
PyBub2RlLnkgLyByb290LnkgOiAxKSkgKiBzaXplWzFdOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gbm9kZXM7Ci0gICAgfQotICAgIGNsdXN0ZXIuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNlcGFyYXRpb247Ci0gICAgICBz
ZXBhcmF0aW9uID0geDsKLSAgICAgIHJldHVybiBjbHVzdGVyOwotICAgIH07Ci0gICAgY2x1c3Rl
ci5zaXplID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1
cm4gbm9kZVNpemUgPyBudWxsIDogc2l6ZTsKLSAgICAgIG5vZGVTaXplID0gKHNpemUgPSB4KSA9
PSBudWxsOwotICAgICAgcmV0dXJuIGNsdXN0ZXI7Ci0gICAgfTsKLSAgICBjbHVzdGVyLm5vZGVT
aXplID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4g
bm9kZVNpemUgPyBzaXplIDogbnVsbDsKLSAgICAgIG5vZGVTaXplID0gKHNpemUgPSB4KSAhPSBu
dWxsOwotICAgICAgcmV0dXJuIGNsdXN0ZXI7Ci0gICAgfTsKLSAgICByZXR1cm4gZDNfbGF5b3V0
X2hpZXJhcmNoeVJlYmluZChjbHVzdGVyLCBoaWVyYXJjaHkpOwotICB9OwotICBmdW5jdGlvbiBk
M19sYXlvdXRfY2x1c3RlclkoY2hpbGRyZW4pIHsKLSAgICByZXR1cm4gMSArIGQzLm1heChjaGls
ZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHsKLSAgICAgIHJldHVybiBjaGlsZC55OwotICAgIH0pOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9jbHVzdGVyWChjaGlsZHJlbikgewotICAgIHJldHVy
biBjaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24oeCwgY2hpbGQpIHsKLSAgICAgIHJldHVybiB4ICsg
Y2hpbGQueDsKLSAgICB9LCAwKSAvIGNoaWxkcmVuLmxlbmd0aDsKLSAgfQotICBmdW5jdGlvbiBk
M19sYXlvdXRfY2x1c3RlckxlZnQobm9kZSkgewotICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hp
bGRyZW47Ci0gICAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA/IGQzX2xheW91
dF9jbHVzdGVyTGVmdChjaGlsZHJlblswXSkgOiBub2RlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xh
eW91dF9jbHVzdGVyUmlnaHQobm9kZSkgewotICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRy
ZW4sIG47Ci0gICAgcmV0dXJuIGNoaWxkcmVuICYmIChuID0gY2hpbGRyZW4ubGVuZ3RoKSA/IGQz
X2xheW91dF9jbHVzdGVyUmlnaHQoY2hpbGRyZW5bbiAtIDFdKSA6IG5vZGU7Ci0gIH0KLSAgZDMu
bGF5b3V0LnRyZWVtYXAgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGllcmFyY2h5ID0gZDMubGF5
b3V0LmhpZXJhcmNoeSgpLCByb3VuZCA9IE1hdGgucm91bmQsIHNpemUgPSBbIDEsIDEgXSwgcGFk
ZGluZyA9IG51bGwsIHBhZCA9IGQzX2xheW91dF90cmVlbWFwUGFkTnVsbCwgc3RpY2t5ID0gZmFs
c2UsIHN0aWNraWVzLCBtb2RlID0gInNxdWFyaWZ5IiwgcmF0aW8gPSAuNSAqICgxICsgTWF0aC5z
cXJ0KDUpKTsKLSAgICBmdW5jdGlvbiBzY2FsZShjaGlsZHJlbiwgaykgewotICAgICAgdmFyIGkg
PSAtMSwgbiA9IGNoaWxkcmVuLmxlbmd0aCwgY2hpbGQsIGFyZWE7Ci0gICAgICB3aGlsZSAoKytp
IDwgbikgewotICAgICAgICBhcmVhID0gKGNoaWxkID0gY2hpbGRyZW5baV0pLnZhbHVlICogKGsg
PCAwID8gMCA6IGspOwotICAgICAgICBjaGlsZC5hcmVhID0gaXNOYU4oYXJlYSkgfHwgYXJlYSA8
PSAwID8gMCA6IGFyZWE7Ci0gICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHNxdWFyaWZ5KG5v
ZGUpIHsKLSAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47Ci0gICAgICBpZiAoY2hp
bGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoKSB7Ci0gICAgICAgIHZhciByZWN0ID0gcGFkKG5vZGUp
LCByb3cgPSBbXSwgcmVtYWluaW5nID0gY2hpbGRyZW4uc2xpY2UoKSwgY2hpbGQsIGJlc3QgPSBJ
bmZpbml0eSwgc2NvcmUsIHUgPSBtb2RlID09PSAic2xpY2UiID8gcmVjdC5keCA6IG1vZGUgPT09
ICJkaWNlIiA/IHJlY3QuZHkgOiBtb2RlID09PSAic2xpY2UtZGljZSIgPyBub2RlLmRlcHRoICYg
MSA/IHJlY3QuZHkgOiByZWN0LmR4IDogTWF0aC5taW4ocmVjdC5keCwgcmVjdC5keSksIG47Ci0g
ICAgICAgIHNjYWxlKHJlbWFpbmluZywgcmVjdC5keCAqIHJlY3QuZHkgLyBub2RlLnZhbHVlKTsK
LSAgICAgICAgcm93LmFyZWEgPSAwOwotICAgICAgICB3aGlsZSAoKG4gPSByZW1haW5pbmcubGVu
Z3RoKSA+IDApIHsKLSAgICAgICAgICByb3cucHVzaChjaGlsZCA9IHJlbWFpbmluZ1tuIC0gMV0p
OwotICAgICAgICAgIHJvdy5hcmVhICs9IGNoaWxkLmFyZWE7Ci0gICAgICAgICAgaWYgKG1vZGUg
IT09ICJzcXVhcmlmeSIgfHwgKHNjb3JlID0gd29yc3Qocm93LCB1KSkgPD0gYmVzdCkgewotICAg
ICAgICAgICAgcmVtYWluaW5nLnBvcCgpOwotICAgICAgICAgICAgYmVzdCA9IHNjb3JlOwotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByb3cuYXJlYSAtPSByb3cucG9wKCkuYXJlYTsK
LSAgICAgICAgICAgIHBvc2l0aW9uKHJvdywgdSwgcmVjdCwgZmFsc2UpOwotICAgICAgICAgICAg
dSA9IE1hdGgubWluKHJlY3QuZHgsIHJlY3QuZHkpOwotICAgICAgICAgICAgcm93Lmxlbmd0aCA9
IHJvdy5hcmVhID0gMDsKLSAgICAgICAgICAgIGJlc3QgPSBJbmZpbml0eTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJvdy5sZW5ndGgpIHsKLSAgICAgICAgICBwb3NpdGlv
bihyb3csIHUsIHJlY3QsIHRydWUpOwotICAgICAgICAgIHJvdy5sZW5ndGggPSByb3cuYXJlYSA9
IDA7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChzcXVhcmlmeSk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHN0aWNraWZ5KG5vZGUpIHsKLSAgICAgIHZhciBjaGls
ZHJlbiA9IG5vZGUuY2hpbGRyZW47Ci0gICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVu
Z3RoKSB7Ci0gICAgICAgIHZhciByZWN0ID0gcGFkKG5vZGUpLCByZW1haW5pbmcgPSBjaGlsZHJl
bi5zbGljZSgpLCBjaGlsZCwgcm93ID0gW107Ci0gICAgICAgIHNjYWxlKHJlbWFpbmluZywgcmVj
dC5keCAqIHJlY3QuZHkgLyBub2RlLnZhbHVlKTsKLSAgICAgICAgcm93LmFyZWEgPSAwOwotICAg
ICAgICB3aGlsZSAoY2hpbGQgPSByZW1haW5pbmcucG9wKCkpIHsKLSAgICAgICAgICByb3cucHVz
aChjaGlsZCk7Ci0gICAgICAgICAgcm93LmFyZWEgKz0gY2hpbGQuYXJlYTsKLSAgICAgICAgICBp
ZiAoY2hpbGQueiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwb3NpdGlvbihyb3csIGNoaWxkLnog
PyByZWN0LmR4IDogcmVjdC5keSwgcmVjdCwgIXJlbWFpbmluZy5sZW5ndGgpOwotICAgICAgICAg
ICAgcm93Lmxlbmd0aCA9IHJvdy5hcmVhID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgY2hpbGRyZW4uZm9yRWFjaChzdGlja2lmeSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZ1
bmN0aW9uIHdvcnN0KHJvdywgdSkgewotICAgICAgdmFyIHMgPSByb3cuYXJlYSwgciwgcm1heCA9
IDAsIHJtaW4gPSBJbmZpbml0eSwgaSA9IC0xLCBuID0gcm93Lmxlbmd0aDsKLSAgICAgIHdoaWxl
ICgrK2kgPCBuKSB7Ci0gICAgICAgIGlmICghKHIgPSByb3dbaV0uYXJlYSkpIGNvbnRpbnVlOwot
ICAgICAgICBpZiAociA8IHJtaW4pIHJtaW4gPSByOwotICAgICAgICBpZiAociA+IHJtYXgpIHJt
YXggPSByOwotICAgICAgfQotICAgICAgcyAqPSBzOwotICAgICAgdSAqPSB1OwotICAgICAgcmV0
dXJuIHMgPyBNYXRoLm1heCh1ICogcm1heCAqIHJhdGlvIC8gcywgcyAvICh1ICogcm1pbiAqIHJh
dGlvKSkgOiBJbmZpbml0eTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcG9zaXRpb24ocm93LCB1LCBy
ZWN0LCBmbHVzaCkgewotICAgICAgdmFyIGkgPSAtMSwgbiA9IHJvdy5sZW5ndGgsIHggPSByZWN0
LngsIHkgPSByZWN0LnksIHYgPSB1ID8gcm91bmQocm93LmFyZWEgLyB1KSA6IDAsIG87Ci0gICAg
ICBpZiAodSA9PSByZWN0LmR4KSB7Ci0gICAgICAgIGlmIChmbHVzaCB8fCB2ID4gcmVjdC5keSkg
diA9IHJlY3QuZHk7Ci0gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgICAgbyA9IHJv
d1tpXTsKLSAgICAgICAgICBvLnggPSB4OwotICAgICAgICAgIG8ueSA9IHk7Ci0gICAgICAgICAg
by5keSA9IHY7Ci0gICAgICAgICAgeCArPSBvLmR4ID0gTWF0aC5taW4ocmVjdC54ICsgcmVjdC5k
eCAtIHgsIHYgPyByb3VuZChvLmFyZWEgLyB2KSA6IDApOwotICAgICAgICB9Ci0gICAgICAgIG8u
eiA9IHRydWU7Ci0gICAgICAgIG8uZHggKz0gcmVjdC54ICsgcmVjdC5keCAtIHg7Ci0gICAgICAg
IHJlY3QueSArPSB2OwotICAgICAgICByZWN0LmR5IC09IHY7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoZmx1c2ggfHwgdiA+IHJlY3QuZHgpIHYgPSByZWN0LmR4OwotICAgICAgICB3aGls
ZSAoKytpIDwgbikgewotICAgICAgICAgIG8gPSByb3dbaV07Ci0gICAgICAgICAgby54ID0geDsK
LSAgICAgICAgICBvLnkgPSB5OwotICAgICAgICAgIG8uZHggPSB2OwotICAgICAgICAgIHkgKz0g
by5keSA9IE1hdGgubWluKHJlY3QueSArIHJlY3QuZHkgLSB5LCB2ID8gcm91bmQoby5hcmVhIC8g
dikgOiAwKTsKLSAgICAgICAgfQotICAgICAgICBvLnogPSBmYWxzZTsKLSAgICAgICAgby5keSAr
PSByZWN0LnkgKyByZWN0LmR5IC0geTsKLSAgICAgICAgcmVjdC54ICs9IHY7Ci0gICAgICAgIHJl
Y3QuZHggLT0gdjsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gdHJlZW1hcChkKSB7Ci0g
ICAgICB2YXIgbm9kZXMgPSBzdGlja2llcyB8fCBoaWVyYXJjaHkoZCksIHJvb3QgPSBub2Rlc1sw
XTsKLSAgICAgIHJvb3QueCA9IDA7Ci0gICAgICByb290LnkgPSAwOwotICAgICAgcm9vdC5keCA9
IHNpemVbMF07Ci0gICAgICByb290LmR5ID0gc2l6ZVsxXTsKLSAgICAgIGlmIChzdGlja2llcykg
aGllcmFyY2h5LnJldmFsdWUocm9vdCk7Ci0gICAgICBzY2FsZShbIHJvb3QgXSwgcm9vdC5keCAq
IHJvb3QuZHkgLyByb290LnZhbHVlKTsKLSAgICAgIChzdGlja2llcyA/IHN0aWNraWZ5IDogc3F1
YXJpZnkpKHJvb3QpOwotICAgICAgaWYgKHN0aWNreSkgc3RpY2tpZXMgPSBub2RlczsKLSAgICAg
IHJldHVybiBub2RlczsKLSAgICB9Ci0gICAgdHJlZW1hcC5zaXplID0gZnVuY3Rpb24oeCkgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAgICAgIHNpemUgPSB4
OwotICAgICAgcmV0dXJuIHRyZWVtYXA7Ci0gICAgfTsKLSAgICB0cmVlbWFwLnBhZGRpbmcgPSBm
dW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwYWRkaW5n
OwotICAgICAgZnVuY3Rpb24gcGFkRnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgcCA9IHgu
Y2FsbCh0cmVlbWFwLCBub2RlLCBub2RlLmRlcHRoKTsKLSAgICAgICAgcmV0dXJuIHAgPT0gbnVs
bCA/IGQzX2xheW91dF90cmVlbWFwUGFkTnVsbChub2RlKSA6IGQzX2xheW91dF90cmVlbWFwUGFk
KG5vZGUsIHR5cGVvZiBwID09PSAibnVtYmVyIiA/IFsgcCwgcCwgcCwgcCBdIDogcCk7Ci0gICAg
ICB9Ci0gICAgICBmdW5jdGlvbiBwYWRDb25zdGFudChub2RlKSB7Ci0gICAgICAgIHJldHVybiBk
M19sYXlvdXRfdHJlZW1hcFBhZChub2RlLCB4KTsKLSAgICAgIH0KLSAgICAgIHZhciB0eXBlOwot
ICAgICAgcGFkID0gKHBhZGRpbmcgPSB4KSA9PSBudWxsID8gZDNfbGF5b3V0X3RyZWVtYXBQYWRO
dWxsIDogKHR5cGUgPSB0eXBlb2YgeCkgPT09ICJmdW5jdGlvbiIgPyBwYWRGdW5jdGlvbiA6IHR5
cGUgPT09ICJudW1iZXIiID8gKHggPSBbIHgsIHgsIHgsIHggXSwgCi0gICAgICBwYWRDb25zdGFu
dCkgOiBwYWRDb25zdGFudDsKLSAgICAgIHJldHVybiB0cmVlbWFwOwotICAgIH07Ci0gICAgdHJl
ZW1hcC5yb3VuZCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHJvdW5kICE9IE51bWJlcjsKLSAgICAgIHJvdW5kID0geCA/IE1hdGgucm91bmQgOiBO
dW1iZXI7Ci0gICAgICByZXR1cm4gdHJlZW1hcDsKLSAgICB9OwotICAgIHRyZWVtYXAuc3RpY2t5
ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc3Rp
Y2t5OwotICAgICAgc3RpY2t5ID0geDsKLSAgICAgIHN0aWNraWVzID0gbnVsbDsKLSAgICAgIHJl
dHVybiB0cmVlbWFwOwotICAgIH07Ci0gICAgdHJlZW1hcC5yYXRpbyA9IGZ1bmN0aW9uKHgpIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJhdGlvOwotICAgICAgcmF0aW8g
PSB4OwotICAgICAgcmV0dXJuIHRyZWVtYXA7Ci0gICAgfTsKLSAgICB0cmVlbWFwLm1vZGUgPSBm
dW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBtb2RlOwot
ICAgICAgbW9kZSA9IHggKyAiIjsKLSAgICAgIHJldHVybiB0cmVlbWFwOwotICAgIH07Ci0gICAg
cmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQodHJlZW1hcCwgaGllcmFyY2h5KTsKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3RyZWVtYXBQYWROdWxsKG5vZGUpIHsKLSAgICByZXR1
cm4gewotICAgICAgeDogbm9kZS54LAotICAgICAgeTogbm9kZS55LAotICAgICAgZHg6IG5vZGUu
ZHgsCi0gICAgICBkeTogbm9kZS5keQotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0
X3RyZWVtYXBQYWQobm9kZSwgcGFkZGluZykgewotICAgIHZhciB4ID0gbm9kZS54ICsgcGFkZGlu
Z1szXSwgeSA9IG5vZGUueSArIHBhZGRpbmdbMF0sIGR4ID0gbm9kZS5keCAtIHBhZGRpbmdbMV0g
LSBwYWRkaW5nWzNdLCBkeSA9IG5vZGUuZHkgLSBwYWRkaW5nWzBdIC0gcGFkZGluZ1syXTsKLSAg
ICBpZiAoZHggPCAwKSB7Ci0gICAgICB4ICs9IGR4IC8gMjsKLSAgICAgIGR4ID0gMDsKLSAgICB9
Ci0gICAgaWYgKGR5IDwgMCkgewotICAgICAgeSArPSBkeSAvIDI7Ci0gICAgICBkeSA9IDA7Ci0g
ICAgfQotICAgIHJldHVybiB7Ci0gICAgICB4OiB4LAotICAgICAgeTogeSwKLSAgICAgIGR4OiBk
eCwKLSAgICAgIGR5OiBkeQotICAgIH07Ci0gIH0KLSAgZDMucmFuZG9tID0gewotICAgIG5vcm1h
bDogZnVuY3Rpb24owrUsIM+DKSB7Ci0gICAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0g
ICAgICBpZiAobiA8IDIpIM+DID0gMTsKLSAgICAgIGlmIChuIDwgMSkgwrUgPSAwOwotICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgeCwgeSwgcjsKLSAgICAgICAgZG8gewot
ICAgICAgICAgIHggPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7Ci0gICAgICAgICAgeSA9IE1hdGgu
cmFuZG9tKCkgKiAyIC0gMTsKLSAgICAgICAgICByID0geCAqIHggKyB5ICogeTsKLSAgICAgICAg
fSB3aGlsZSAoIXIgfHwgciA+IDEpOwotICAgICAgICByZXR1cm4gwrUgKyDPgyAqIHggKiBNYXRo
LnNxcnQoLTIgKiBNYXRoLmxvZyhyKSAvIHIpOwotICAgICAgfTsKLSAgICB9LAotICAgIGxvZ05v
cm1hbDogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgcmFuZG9tID0gZDMucmFuZG9tLm5vcm1hbC5h
cHBseShkMywgYXJndW1lbnRzKTsKLSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIE1hdGguZXhwKHJhbmRvbSgpKTsKLSAgICAgIH07Ci0gICAgfSwKLSAgICBiYXRlczog
ZnVuY3Rpb24obSkgewotICAgICAgdmFyIHJhbmRvbSA9IGQzLnJhbmRvbS5pcndpbkhhbGwobSk7
Ci0gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiByYW5kb20oKSAvIG07
Ci0gICAgICB9OwotICAgIH0sCi0gICAgaXJ3aW5IYWxsOiBmdW5jdGlvbihtKSB7Ci0gICAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZvciAodmFyIHMgPSAwLCBqID0gMDsgaiA8IG07
IGorKykgcyArPSBNYXRoLnJhbmRvbSgpOwotICAgICAgICByZXR1cm4gczsKLSAgICAgIH07Ci0g
ICAgfQotICB9OwotICBkMy5zY2FsZSA9IHt9OwotICBmdW5jdGlvbiBkM19zY2FsZUV4dGVudChk
b21haW4pIHsKLSAgICB2YXIgc3RhcnQgPSBkb21haW5bMF0sIHN0b3AgPSBkb21haW5bZG9tYWlu
Lmxlbmd0aCAtIDFdOwotICAgIHJldHVybiBzdGFydCA8IHN0b3AgPyBbIHN0YXJ0LCBzdG9wIF0g
OiBbIHN0b3AsIHN0YXJ0IF07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2NhbGVSYW5nZShzY2FsZSkg
ewotICAgIHJldHVybiBzY2FsZS5yYW5nZUV4dGVudCA/IHNjYWxlLnJhbmdlRXh0ZW50KCkgOiBk
M19zY2FsZUV4dGVudChzY2FsZS5yYW5nZSgpKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9i
aWxpbmVhcihkb21haW4sIHJhbmdlLCB1bmludGVycG9sYXRlLCBpbnRlcnBvbGF0ZSkgewotICAg
IHZhciB1ID0gdW5pbnRlcnBvbGF0ZShkb21haW5bMF0sIGRvbWFpblsxXSksIGkgPSBpbnRlcnBv
bGF0ZShyYW5nZVswXSwgcmFuZ2VbMV0pOwotICAgIHJldHVybiBmdW5jdGlvbih4KSB7Ci0gICAg
ICByZXR1cm4gaSh1KHgpKTsKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX25pY2Uo
ZG9tYWluLCBuaWNlKSB7Ci0gICAgdmFyIGkwID0gMCwgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSwg
eDAgPSBkb21haW5baTBdLCB4MSA9IGRvbWFpbltpMV0sIGR4OwotICAgIGlmICh4MSA8IHgwKSB7
Ci0gICAgICBkeCA9IGkwLCBpMCA9IGkxLCBpMSA9IGR4OwotICAgICAgZHggPSB4MCwgeDAgPSB4
MSwgeDEgPSBkeDsKLSAgICB9Ci0gICAgZG9tYWluW2kwXSA9IG5pY2UuZmxvb3IoeDApOwotICAg
IGRvbWFpbltpMV0gPSBuaWNlLmNlaWwoeDEpOwotICAgIHJldHVybiBkb21haW47Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfc2NhbGVfbmljZVN0ZXAoc3RlcCkgewotICAgIHJldHVybiBzdGVwID8gewot
ICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsKLSAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCAv
IHN0ZXApICogc3RlcDsKLSAgICAgIH0sCi0gICAgICBjZWlsOiBmdW5jdGlvbih4KSB7Ci0gICAg
ICAgIHJldHVybiBNYXRoLmNlaWwoeCAvIHN0ZXApICogc3RlcDsKLSAgICAgIH0KLSAgICB9IDog
ZDNfc2NhbGVfbmljZUlkZW50aXR5OwotICB9Ci0gIHZhciBkM19zY2FsZV9uaWNlSWRlbnRpdHkg
PSB7Ci0gICAgZmxvb3I6IGQzX2lkZW50aXR5LAotICAgIGNlaWw6IGQzX2lkZW50aXR5Ci0gIH07
Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX3BvbHlsaW5lYXIoZG9tYWluLCByYW5nZSwgdW5pbnRlcnBv
bGF0ZSwgaW50ZXJwb2xhdGUpIHsKLSAgICB2YXIgdSA9IFtdLCBpID0gW10sIGogPSAwLCBrID0g
TWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDE7Ci0gICAgaWYgKGRvbWFp
bltrXSA8IGRvbWFpblswXSkgewotICAgICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJz
ZSgpOwotICAgICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTsKLSAgICB9Ci0gICAg
d2hpbGUgKCsraiA8PSBrKSB7Ci0gICAgICB1LnB1c2godW5pbnRlcnBvbGF0ZShkb21haW5baiAt
IDFdLCBkb21haW5bal0pKTsKLSAgICAgIGkucHVzaChpbnRlcnBvbGF0ZShyYW5nZVtqIC0gMV0s
IHJhbmdlW2pdKSk7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbih4KSB7Ci0gICAgICB2YXIg
aiA9IGQzLmJpc2VjdChkb21haW4sIHgsIDEsIGspIC0gMTsKLSAgICAgIHJldHVybiBpW2pdKHVb
al0oeCkpOwotICAgIH07Ci0gIH0KLSAgZDMuc2NhbGUubGluZWFyID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIGQzX3NjYWxlX2xpbmVhcihbIDAsIDEgXSwgWyAwLCAxIF0sIGQzX2ludGVycG9s
YXRlLCBmYWxzZSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhcihkb21haW4sIHJh
bmdlLCBpbnRlcnBvbGF0ZSwgY2xhbXApIHsKLSAgICB2YXIgb3V0cHV0LCBpbnB1dDsKLSAgICBm
dW5jdGlvbiByZXNjYWxlKCkgewotICAgICAgdmFyIGxpbmVhciA9IE1hdGgubWluKGRvbWFpbi5s
ZW5ndGgsIHJhbmdlLmxlbmd0aCkgPiAyID8gZDNfc2NhbGVfcG9seWxpbmVhciA6IGQzX3NjYWxl
X2JpbGluZWFyLCB1bmludGVycG9sYXRlID0gY2xhbXAgPyBkM191bmludGVycG9sYXRlQ2xhbXAg
OiBkM191bmludGVycG9sYXRlTnVtYmVyOwotICAgICAgb3V0cHV0ID0gbGluZWFyKGRvbWFpbiwg
cmFuZ2UsIHVuaW50ZXJwb2xhdGUsIGludGVycG9sYXRlKTsKLSAgICAgIGlucHV0ID0gbGluZWFy
KHJhbmdlLCBkb21haW4sIHVuaW50ZXJwb2xhdGUsIGQzX2ludGVycG9sYXRlKTsKLSAgICAgIHJl
dHVybiBzY2FsZTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc2NhbGUoeCkgewotICAgICAgcmV0dXJu
IG91dHB1dCh4KTsKLSAgICB9Ci0gICAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkgewotICAg
ICAgcmV0dXJuIGlucHV0KHkpOwotICAgIH07Ci0gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluOwotICAgICAg
ZG9tYWluID0geC5tYXAoTnVtYmVyKTsKLSAgICAgIHJldHVybiByZXNjYWxlKCk7Ci0gICAgfTsK
LSAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxl
bmd0aCkgcmV0dXJuIHJhbmdlOwotICAgICAgcmFuZ2UgPSB4OwotICAgICAgcmV0dXJuIHJlc2Nh
bGUoKTsKLSAgICB9OwotICAgIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbih4KSB7Ci0gICAg
ICByZXR1cm4gc2NhbGUucmFuZ2UoeCkuaW50ZXJwb2xhdGUoZDNfaW50ZXJwb2xhdGVSb3VuZCk7
Ci0gICAgfTsKLSAgICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsYW1wOwotICAgICAgY2xhbXAgPSB4OwotICAgICAgcmV0
dXJuIHJlc2NhbGUoKTsKLSAgICB9OwotICAgIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaW50ZXJwb2xhdGU7Ci0g
ICAgICBpbnRlcnBvbGF0ZSA9IHg7Ci0gICAgICByZXR1cm4gcmVzY2FsZSgpOwotICAgIH07Ci0g
ICAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihtKSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfbGlu
ZWFyVGlja3MoZG9tYWluLCBtKTsKLSAgICB9OwotICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5j
dGlvbihtLCBmb3JtYXQpIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0
KGRvbWFpbiwgbSwgZm9ybWF0KTsKLSAgICB9OwotICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbiht
KSB7Ci0gICAgICBkM19zY2FsZV9saW5lYXJOaWNlKGRvbWFpbiwgbSk7Ci0gICAgICByZXR1cm4g
cmVzY2FsZSgpOwotICAgIH07Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIGQzX3NjYWxlX2xpbmVhcihkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSwgY2xhbXAp
OwotICAgIH07Ci0gICAgcmV0dXJuIHJlc2NhbGUoKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2Fs
ZV9saW5lYXJSZWJpbmQoc2NhbGUsIGxpbmVhcikgewotICAgIHJldHVybiBkMy5yZWJpbmQoc2Nh
bGUsIGxpbmVhciwgInJhbmdlIiwgInJhbmdlUm91bmQiLCAiaW50ZXJwb2xhdGUiLCAiY2xhbXAi
KTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9saW5lYXJOaWNlKGRvbWFpbiwgbSkgewotICAg
IHJldHVybiBkM19zY2FsZV9uaWNlKGRvbWFpbiwgZDNfc2NhbGVfbmljZVN0ZXAoZDNfc2NhbGVf
bGluZWFyVGlja1JhbmdlKGRvbWFpbiwgbSlbMl0pKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2Fs
ZV9saW5lYXJUaWNrUmFuZ2UoZG9tYWluLCBtKSB7Ci0gICAgaWYgKG0gPT0gbnVsbCkgbSA9IDEw
OwotICAgIHZhciBleHRlbnQgPSBkM19zY2FsZUV4dGVudChkb21haW4pLCBzcGFuID0gZXh0ZW50
WzFdIC0gZXh0ZW50WzBdLCBzdGVwID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2co
c3BhbiAvIG0pIC8gTWF0aC5MTjEwKSksIGVyciA9IG0gLyBzcGFuICogc3RlcDsKLSAgICBpZiAo
ZXJyIDw9IC4xNSkgc3RlcCAqPSAxMDsgZWxzZSBpZiAoZXJyIDw9IC4zNSkgc3RlcCAqPSA1OyBl
bHNlIGlmIChlcnIgPD0gLjc1KSBzdGVwICo9IDI7Ci0gICAgZXh0ZW50WzBdID0gTWF0aC5jZWls
KGV4dGVudFswXSAvIHN0ZXApICogc3RlcDsKLSAgICBleHRlbnRbMV0gPSBNYXRoLmZsb29yKGV4
dGVudFsxXSAvIHN0ZXApICogc3RlcCArIHN0ZXAgKiAuNTsKLSAgICBleHRlbnRbMl0gPSBzdGVw
OwotICAgIHJldHVybiBleHRlbnQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyVGlj
a3MoZG9tYWluLCBtKSB7Ci0gICAgcmV0dXJuIGQzLnJhbmdlLmFwcGx5KGQzLCBkM19zY2FsZV9s
aW5lYXJUaWNrUmFuZ2UoZG9tYWluLCBtKSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2NhbGVfbGlu
ZWFyVGlja0Zvcm1hdChkb21haW4sIG0sIGZvcm1hdCkgewotICAgIHZhciByYW5nZSA9IGQzX3Nj
YWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4sIG0pOwotICAgIGlmIChmb3JtYXQpIHsKLSAgICAg
IHZhciBtYXRjaCA9IGQzX2Zvcm1hdF9yZS5leGVjKGZvcm1hdCk7Ci0gICAgICBtYXRjaC5zaGlm
dCgpOwotICAgICAgaWYgKG1hdGNoWzhdID09PSAicyIpIHsKLSAgICAgICAgdmFyIHByZWZpeCA9
IGQzLmZvcm1hdFByZWZpeChNYXRoLm1heChhYnMocmFuZ2VbMF0pLCBhYnMocmFuZ2VbMV0pKSk7
Ci0gICAgICAgIGlmICghbWF0Y2hbN10pIG1hdGNoWzddID0gIi4iICsgZDNfc2NhbGVfbGluZWFy
UHJlY2lzaW9uKHByZWZpeC5zY2FsZShyYW5nZVsyXSkpOwotICAgICAgICBtYXRjaFs4XSA9ICJm
IjsKLSAgICAgICAgZm9ybWF0ID0gZDMuZm9ybWF0KG1hdGNoLmpvaW4oIiIpKTsKLSAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgICByZXR1cm4gZm9ybWF0KHByZWZpeC5zY2Fs
ZShkKSkgKyBwcmVmaXguc3ltYm9sOwotICAgICAgICB9OwotICAgICAgfQotICAgICAgaWYgKCFt
YXRjaFs3XSkgbWF0Y2hbN10gPSAiLiIgKyBkM19zY2FsZV9saW5lYXJGb3JtYXRQcmVjaXNpb24o
bWF0Y2hbOF0sIHJhbmdlKTsKLSAgICAgIGZvcm1hdCA9IG1hdGNoLmpvaW4oIiIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBmb3JtYXQgPSAiLC4iICsgZDNfc2NhbGVfbGluZWFyUHJlY2lzaW9uKHJh
bmdlWzJdKSArICJmIjsKLSAgICB9Ci0gICAgcmV0dXJuIGQzLmZvcm1hdChmb3JtYXQpOwotICB9
Ci0gIHZhciBkM19zY2FsZV9saW5lYXJGb3JtYXRTaWduaWZpY2FudCA9IHsKLSAgICBzOiAxLAot
ICAgIGc6IDEsCi0gICAgcDogMSwKLSAgICByOiAxLAotICAgIGU6IDEKLSAgfTsKLSAgZnVuY3Rp
b24gZDNfc2NhbGVfbGluZWFyUHJlY2lzaW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIC1NYXRoLmZs
b29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4xMCArIC4wMSk7Ci0gIH0KLSAgZnVuY3Rpb24g
ZDNfc2NhbGVfbGluZWFyRm9ybWF0UHJlY2lzaW9uKHR5cGUsIHJhbmdlKSB7Ci0gICAgdmFyIHAg
PSBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocmFuZ2VbMl0pOwotICAgIHJldHVybiB0eXBlIGlu
IGQzX3NjYWxlX2xpbmVhckZvcm1hdFNpZ25pZmljYW50ID8gTWF0aC5hYnMocCAtIGQzX3NjYWxl
X2xpbmVhclByZWNpc2lvbihNYXRoLm1heChhYnMocmFuZ2VbMF0pLCBhYnMocmFuZ2VbMV0pKSkp
ICsgKyh0eXBlICE9PSAiZSIpIDogcCAtICh0eXBlID09PSAiJSIpICogMjsKLSAgfQotICBkMy5z
Y2FsZS5sb2cgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2NhbGVfbG9nKGQzLnNjYWxl
LmxpbmVhcigpLmRvbWFpbihbIDAsIDEgXSksIDEwLCB0cnVlLCBbIDEsIDEwIF0pOwotICB9Owot
ICBmdW5jdGlvbiBkM19zY2FsZV9sb2cobGluZWFyLCBiYXNlLCBwb3NpdGl2ZSwgZG9tYWluKSB7
Ci0gICAgZnVuY3Rpb24gbG9nKHgpIHsKLSAgICAgIHJldHVybiAocG9zaXRpdmUgPyBNYXRoLmxv
Zyh4IDwgMCA/IDAgOiB4KSA6IC1NYXRoLmxvZyh4ID4gMCA/IDAgOiAteCkpIC8gTWF0aC5sb2co
YmFzZSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBvdyh4KSB7Ci0gICAgICByZXR1cm4gcG9zaXRp
dmUgPyBNYXRoLnBvdyhiYXNlLCB4KSA6IC1NYXRoLnBvdyhiYXNlLCAteCk7Ci0gICAgfQotICAg
IGZ1bmN0aW9uIHNjYWxlKHgpIHsKLSAgICAgIHJldHVybiBsaW5lYXIobG9nKHgpKTsKLSAgICB9
Ci0gICAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeCkgewotICAgICAgcmV0dXJuIHBvdyhsaW5l
YXIuaW52ZXJ0KHgpKTsKLSAgICB9OwotICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbjsKLSAgICAgIHBvc2l0
aXZlID0geFswXSA+PSAwOwotICAgICAgbGluZWFyLmRvbWFpbigoZG9tYWluID0geC5tYXAoTnVt
YmVyKSkubWFwKGxvZykpOwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0gICAgc2NhbGUu
YmFzZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJu
IGJhc2U7Ci0gICAgICBiYXNlID0gK187Ci0gICAgICBsaW5lYXIuZG9tYWluKGRvbWFpbi5tYXAo
bG9nKSk7Ci0gICAgICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5uaWNlID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICB2YXIgbmljZWQgPSBkM19zY2FsZV9uaWNlKGRvbWFpbi5tYXAobG9n
KSwgcG9zaXRpdmUgPyBNYXRoIDogZDNfc2NhbGVfbG9nTmljZU5lZ2F0aXZlKTsKLSAgICAgIGxp
bmVhci5kb21haW4obmljZWQpOwotICAgICAgZG9tYWluID0gbmljZWQubWFwKHBvdyk7Ci0gICAg
ICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIGV4dGVudCA9IGQzX3NjYWxlRXh0ZW50KGRvbWFpbiksIHRpY2tzID0gW10sIHUg
PSBleHRlbnRbMF0sIHYgPSBleHRlbnRbMV0sIGkgPSBNYXRoLmZsb29yKGxvZyh1KSksIGogPSBN
YXRoLmNlaWwobG9nKHYpKSwgbiA9IGJhc2UgJSAxID8gMiA6IGJhc2U7Ci0gICAgICBpZiAoaXNG
aW5pdGUoaiAtIGkpKSB7Ci0gICAgICAgIGlmIChwb3NpdGl2ZSkgewotICAgICAgICAgIGZvciAo
O2kgPCBqOyBpKyspIGZvciAodmFyIGsgPSAxOyBrIDwgbjsgaysrKSB0aWNrcy5wdXNoKHBvdyhp
KSAqIGspOwotICAgICAgICAgIHRpY2tzLnB1c2gocG93KGkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICB0aWNrcy5wdXNoKHBvdyhpKSk7Ci0gICAgICAgICAgZm9yICg7aSsrIDwgajsg
KSBmb3IgKHZhciBrID0gbiAtIDE7IGsgPiAwOyBrLS0pIHRpY2tzLnB1c2gocG93KGkpICogayk7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgdGlja3NbaV0gPCB1OyBpKyspIHt9Ci0g
ICAgICAgIGZvciAoaiA9IHRpY2tzLmxlbmd0aDsgdGlja3NbaiAtIDFdID4gdjsgai0tKSB7fQot
ICAgICAgICB0aWNrcyA9IHRpY2tzLnNsaWNlKGksIGopOwotICAgICAgfQotICAgICAgcmV0dXJu
IHRpY2tzOwotICAgIH07Ci0gICAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKG4sIGZvcm1h
dCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZDNfc2NhbGVfbG9nRm9y
bWF0OwotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSBmb3JtYXQgPSBkM19zY2FsZV9s
b2dGb3JtYXQ7IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICJmdW5jdGlvbiIpIGZvcm1hdCA9
IGQzLmZvcm1hdChmb3JtYXQpOwotICAgICAgdmFyIGsgPSBNYXRoLm1heCguMSwgbiAvIHNjYWxl
LnRpY2tzKCkubGVuZ3RoKSwgZiA9IHBvc2l0aXZlID8gKGUgPSAxZS0xMiwgTWF0aC5jZWlsKSA6
IChlID0gLTFlLTEyLCAKLSAgICAgIE1hdGguZmxvb3IpLCBlOwotICAgICAgcmV0dXJuIGZ1bmN0
aW9uKGQpIHsKLSAgICAgICAgcmV0dXJuIGQgLyBwb3coZihsb2coZCkgKyBlKSkgPD0gayA/IGZv
cm1hdChkKSA6ICIiOwotICAgICAgfTsKLSAgICB9OwotICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlv
bigpIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9sb2cobGluZWFyLmNvcHkoKSwgYmFzZSwgcG9z
aXRpdmUsIGRvbWFpbik7Ci0gICAgfTsKLSAgICByZXR1cm4gZDNfc2NhbGVfbGluZWFyUmViaW5k
KHNjYWxlLCBsaW5lYXIpOwotICB9Ci0gIHZhciBkM19zY2FsZV9sb2dGb3JtYXQgPSBkMy5mb3Jt
YXQoIi4wZSIpLCBkM19zY2FsZV9sb2dOaWNlTmVnYXRpdmUgPSB7Ci0gICAgZmxvb3I6IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIHJldHVybiAtTWF0aC5jZWlsKC14KTsKLSAgICB9LAotICAgIGNlaWw6
IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiAtTWF0aC5mbG9vcigteCk7Ci0gICAgfQotICB9
OwotICBkMy5zY2FsZS5wb3cgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2NhbGVfcG93
KGQzLnNjYWxlLmxpbmVhcigpLCAxLCBbIDAsIDEgXSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3Nj
YWxlX3BvdyhsaW5lYXIsIGV4cG9uZW50LCBkb21haW4pIHsKLSAgICB2YXIgcG93cCA9IGQzX3Nj
YWxlX3Bvd1BvdyhleHBvbmVudCksIHBvd2IgPSBkM19zY2FsZV9wb3dQb3coMSAvIGV4cG9uZW50
KTsKLSAgICBmdW5jdGlvbiBzY2FsZSh4KSB7Ci0gICAgICByZXR1cm4gbGluZWFyKHBvd3AoeCkp
OwotICAgIH0KLSAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih4KSB7Ci0gICAgICByZXR1cm4g
cG93YihsaW5lYXIuaW52ZXJ0KHgpKTsKLSAgICB9OwotICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbjsKLSAg
ICAgIGxpbmVhci5kb21haW4oKGRvbWFpbiA9IHgubWFwKE51bWJlcikpLm1hcChwb3dwKSk7Ci0g
ICAgICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKG0p
IHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sIG0pOwotICAgIH07
Ci0gICAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKG0sIGZvcm1hdCkgewotICAgICAgcmV0
dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQoZG9tYWluLCBtLCBmb3JtYXQpOwotICAgIH07
Ci0gICAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHJldHVybiBzY2FsZS5kb21h
aW4oZDNfc2NhbGVfbGluZWFyTmljZShkb21haW4sIG0pKTsKLSAgICB9OwotICAgIHNjYWxlLmV4
cG9uZW50ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1
cm4gZXhwb25lbnQ7Ci0gICAgICBwb3dwID0gZDNfc2NhbGVfcG93UG93KGV4cG9uZW50ID0geCk7
Ci0gICAgICBwb3diID0gZDNfc2NhbGVfcG93UG93KDEgLyBleHBvbmVudCk7Ci0gICAgICBsaW5l
YXIuZG9tYWluKGRvbWFpbi5tYXAocG93cCkpOwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07
Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQzX3NjYWxlX3Bv
dyhsaW5lYXIuY29weSgpLCBleHBvbmVudCwgZG9tYWluKTsKLSAgICB9OwotICAgIHJldHVybiBk
M19zY2FsZV9saW5lYXJSZWJpbmQoc2NhbGUsIGxpbmVhcik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
c2NhbGVfcG93UG93KGUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oeCkgewotICAgICAgcmV0dXJu
IHggPCAwID8gLU1hdGgucG93KC14LCBlKSA6IE1hdGgucG93KHgsIGUpOwotICAgIH07Ci0gIH0K
LSAgZDMuc2NhbGUuc3FydCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkMy5zY2FsZS5wb3co
KS5leHBvbmVudCguNSk7Ci0gIH07Ci0gIGQzLnNjYWxlLm9yZGluYWwgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gZDNfc2NhbGVfb3JkaW5hbChbXSwgewotICAgICAgdDogInJhbmdlIiwKLSAg
ICAgIGE6IFsgW10gXQotICAgIH0pOwotICB9OwotICBmdW5jdGlvbiBkM19zY2FsZV9vcmRpbmFs
KGRvbWFpbiwgcmFuZ2VyKSB7Ci0gICAgdmFyIGluZGV4LCByYW5nZSwgcmFuZ2VCYW5kOwotICAg
IGZ1bmN0aW9uIHNjYWxlKHgpIHsKLSAgICAgIHJldHVybiByYW5nZVsoKGluZGV4LmdldCh4KSB8
fCAocmFuZ2VyLnQgPT09ICJyYW5nZSIgPyBpbmRleC5zZXQoeCwgZG9tYWluLnB1c2goeCkpIDog
TmFOKSkgLSAxKSAlIHJhbmdlLmxlbmd0aF07Ci0gICAgfQotICAgIGZ1bmN0aW9uIHN0ZXBzKHN0
YXJ0LCBzdGVwKSB7Ci0gICAgICByZXR1cm4gZDMucmFuZ2UoZG9tYWluLmxlbmd0aCkubWFwKGZ1
bmN0aW9uKGkpIHsKLSAgICAgICAgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7Ci0gICAgICB9KTsK
LSAgICB9Ci0gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1
bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluOwotICAgICAgZG9tYWluID0gW107Ci0gICAgICBp
bmRleCA9IG5ldyBkM19NYXAoKTsKLSAgICAgIHZhciBpID0gLTEsIG4gPSB4Lmxlbmd0aCwgeGk7
Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoeGkgPSB4W2ldKSkgaW5kZXgu
c2V0KHhpLCBkb21haW4ucHVzaCh4aSkpOwotICAgICAgcmV0dXJuIHNjYWxlW3Jhbmdlci50XS5h
cHBseShzY2FsZSwgcmFuZ2VyLmEpOwotICAgIH07Ci0gICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlv
bih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByYW5nZTsKLSAgICAg
IHJhbmdlID0geDsKLSAgICAgIHJhbmdlQmFuZCA9IDA7Ci0gICAgICByYW5nZXIgPSB7Ci0gICAg
ICAgIHQ6ICJyYW5nZSIsCi0gICAgICAgIGE6IGFyZ3VtZW50cwotICAgICAgfTsKLSAgICAgIHJl
dHVybiBzY2FsZTsKLSAgICB9OwotICAgIHNjYWxlLnJhbmdlUG9pbnRzID0gZnVuY3Rpb24oeCwg
cGFkZGluZykgewotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSBwYWRkaW5nID0gMDsK
LSAgICAgIHZhciBzdGFydCA9IHhbMF0sIHN0b3AgPSB4WzFdLCBzdGVwID0gKHN0b3AgLSBzdGFy
dCkgLyAoTWF0aC5tYXgoMSwgZG9tYWluLmxlbmd0aCAtIDEpICsgcGFkZGluZyk7Ci0gICAgICBy
YW5nZSA9IHN0ZXBzKGRvbWFpbi5sZW5ndGggPCAyID8gKHN0YXJ0ICsgc3RvcCkgLyAyIDogc3Rh
cnQgKyBzdGVwICogcGFkZGluZyAvIDIsIHN0ZXApOwotICAgICAgcmFuZ2VCYW5kID0gMDsKLSAg
ICAgIHJhbmdlciA9IHsKLSAgICAgICAgdDogInJhbmdlUG9pbnRzIiwKLSAgICAgICAgYTogYXJn
dW1lbnRzCi0gICAgICB9OwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0gICAgc2NhbGUu
cmFuZ2VCYW5kcyA9IGZ1bmN0aW9uKHgsIHBhZGRpbmcsIG91dGVyUGFkZGluZykgewotICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSBwYWRkaW5nID0gMDsKLSAgICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoIDwgMykgb3V0ZXJQYWRkaW5nID0gcGFkZGluZzsKLSAgICAgIHZhciByZXZlcnNl
ID0geFsxXSA8IHhbMF0sIHN0YXJ0ID0geFtyZXZlcnNlIC0gMF0sIHN0b3AgPSB4WzEgLSByZXZl
cnNlXSwgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSBwYWRkaW5nICsg
MiAqIG91dGVyUGFkZGluZyk7Ci0gICAgICByYW5nZSA9IHN0ZXBzKHN0YXJ0ICsgc3RlcCAqIG91
dGVyUGFkZGluZywgc3RlcCk7Ci0gICAgICBpZiAocmV2ZXJzZSkgcmFuZ2UucmV2ZXJzZSgpOwot
ICAgICAgcmFuZ2VCYW5kID0gc3RlcCAqICgxIC0gcGFkZGluZyk7Ci0gICAgICByYW5nZXIgPSB7
Ci0gICAgICAgIHQ6ICJyYW5nZUJhbmRzIiwKLSAgICAgICAgYTogYXJndW1lbnRzCi0gICAgICB9
OwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0gICAgc2NhbGUucmFuZ2VSb3VuZEJhbmRz
ID0gZnVuY3Rpb24oeCwgcGFkZGluZywgb3V0ZXJQYWRkaW5nKSB7Ci0gICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA8IDIpIHBhZGRpbmcgPSAwOwotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PCAzKSBvdXRlclBhZGRpbmcgPSBwYWRkaW5nOwotICAgICAgdmFyIHJldmVyc2UgPSB4WzFdIDwg
eFswXSwgc3RhcnQgPSB4W3JldmVyc2UgLSAwXSwgc3RvcCA9IHhbMSAtIHJldmVyc2VdLCBzdGVw
ID0gTWF0aC5mbG9vcigoc3RvcCAtIHN0YXJ0KSAvIChkb21haW4ubGVuZ3RoIC0gcGFkZGluZyAr
IDIgKiBvdXRlclBhZGRpbmcpKSwgZXJyb3IgPSBzdG9wIC0gc3RhcnQgLSAoZG9tYWluLmxlbmd0
aCAtIHBhZGRpbmcpICogc3RlcDsKLSAgICAgIHJhbmdlID0gc3RlcHMoc3RhcnQgKyBNYXRoLnJv
dW5kKGVycm9yIC8gMiksIHN0ZXApOwotICAgICAgaWYgKHJldmVyc2UpIHJhbmdlLnJldmVyc2Uo
KTsKLSAgICAgIHJhbmdlQmFuZCA9IE1hdGgucm91bmQoc3RlcCAqICgxIC0gcGFkZGluZykpOwot
ICAgICAgcmFuZ2VyID0gewotICAgICAgICB0OiAicmFuZ2VSb3VuZEJhbmRzIiwKLSAgICAgICAg
YTogYXJndW1lbnRzCi0gICAgICB9OwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0gICAg
c2NhbGUucmFuZ2VCYW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gcmFuZ2VCYW5kOwot
ICAgIH07Ci0gICAgc2NhbGUucmFuZ2VFeHRlbnQgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVy
biBkM19zY2FsZUV4dGVudChyYW5nZXIuYVswXSk7Ci0gICAgfTsKLSAgICBzY2FsZS5jb3B5ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfb3JkaW5hbChkb21haW4sIHJhbmdl
cik7Ci0gICAgfTsKLSAgICByZXR1cm4gc2NhbGUuZG9tYWluKGRvbWFpbik7Ci0gIH0KLSAgZDMu
c2NhbGUuY2F0ZWdvcnkxMCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkMy5zY2FsZS5vcmRp
bmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkxMCk7Ci0gIH07Ci0gIGQzLnNjYWxlLmNhdGVnb3J5MjAg
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDMuc2NhbGUub3JkaW5hbCgpLnJhbmdlKGQzX2Nh
dGVnb3J5MjApOwotICB9OwotICBkMy5zY2FsZS5jYXRlZ29yeTIwYiA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGIpOwotICB9
OwotICBkMy5zY2FsZS5jYXRlZ29yeTIwYyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkMy5z
Y2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMGMpOwotICB9OwotICB2YXIgZDNfY2F0
ZWdvcnkxMCA9IFsgMjA2MjI2MCwgMTY3NDQyMDYsIDI5MjQ1ODgsIDE0MDM0NzI4LCA5NzI1ODg1
LCA5MTk3MTMxLCAxNDkwNzMzMCwgODM1NTcxMSwgMTIzNjkxODYsIDE1NTYxNzUgXS5tYXAoZDNf
cmdiU3RyaW5nKTsKLSAgdmFyIGQzX2NhdGVnb3J5MjAgPSBbIDIwNjIyNjAsIDExNDU0NDQwLCAx
Njc0NDIwNiwgMTY3NTk2NzIsIDI5MjQ1ODgsIDEwMDE4Njk4LCAxNDAzNDcyOCwgMTY3NTA3NDIs
IDk3MjU4ODUsIDEyOTU1ODYxLCA5MTk3MTMxLCAxMjg4NTE0MCwgMTQ5MDczMzAsIDE2MjM0MTk0
LCA4MzU1NzExLCAxMzA5MjgwNywgMTIzNjkxODYsIDE0NDA4NTg5LCAxNTU2MTc1LCAxMDQxMDcy
NSBdLm1hcChkM19yZ2JTdHJpbmcpOwotICB2YXIgZDNfY2F0ZWdvcnkyMGIgPSBbIDM3NTA3Nzcs
IDUzOTU2MTksIDcwNDA3MTksIDEwMjY0Mjg2LCA2NTE5MDk3LCA5MjE2NTk0LCAxMTkxNTExNSwg
MTM1NTY2MzYsIDkyMDI5OTMsIDEyNDI2ODA5LCAxNTE4NjUxNCwgMTUxOTA5MzIsIDg2NjYxNjks
IDExMzU2NDkwLCAxNDA0OTY0MywgMTUxNzczNzIsIDgwNzc2ODMsIDEwODM0MzI0LCAxMzUyODUw
OSwgMTQ1ODk2NTQgXS5tYXAoZDNfcmdiU3RyaW5nKTsKLSAgdmFyIGQzX2NhdGVnb3J5MjBjID0g
WyAzMjQ0NzMzLCA3MDU3MTEwLCAxMDQwNjYyNSwgMTMwMzI0MzEsIDE1MDk1MDUzLCAxNjYxNjc2
NCwgMTY2MjUyNTksIDE2NjM0MDE4LCAzMjUzMDc2LCA3NjUyNDcwLCAxMDYwNzAwMywgMTMxMDE1
MDQsIDc2OTUyODEsIDEwMzk0MzEyLCAxMjM2OTM3MiwgMTQzNDI4OTEsIDY1MTM1MDcsIDk4Njg5
NTAsIDEyNDM0ODc3LCAxNDI3NzA4MSBdLm1hcChkM19yZ2JTdHJpbmcpOwotICBkMy5zY2FsZS5x
dWFudGlsZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19zY2FsZV9xdWFudGlsZShbXSwg
W10pOwotICB9OwotICBmdW5jdGlvbiBkM19zY2FsZV9xdWFudGlsZShkb21haW4sIHJhbmdlKSB7
Ci0gICAgdmFyIHRocmVzaG9sZHM7Ci0gICAgZnVuY3Rpb24gcmVzY2FsZSgpIHsKLSAgICAgIHZh
ciBrID0gMCwgcSA9IHJhbmdlLmxlbmd0aDsKLSAgICAgIHRocmVzaG9sZHMgPSBbXTsKLSAgICAg
IHdoaWxlICgrK2sgPCBxKSB0aHJlc2hvbGRzW2sgLSAxXSA9IGQzLnF1YW50aWxlKGRvbWFpbiwg
ayAvIHEpOwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH0KLSAgICBmdW5jdGlvbiBzY2FsZSh4
KSB7Ci0gICAgICBpZiAoIWlzTmFOKHggPSAreCkpIHJldHVybiByYW5nZVtkMy5iaXNlY3QodGhy
ZXNob2xkcywgeCldOwotICAgIH0KLSAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KSB7Ci0g
ICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW47Ci0gICAgICBkb21haW4g
PSB4LmZpbHRlcihkM19udW1iZXIpLnNvcnQoZDNfYXNjZW5kaW5nKTsKLSAgICAgIHJldHVybiBy
ZXNjYWxlKCk7Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJhbmdlOwotICAgICAgcmFuZ2UgPSB4Owot
ICAgICAgcmV0dXJuIHJlc2NhbGUoKTsKLSAgICB9OwotICAgIHNjYWxlLnF1YW50aWxlcyA9IGZ1
bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRocmVzaG9sZHM7Ci0gICAgfTsKLSAgICBzY2FsZS5p
bnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7Ci0gICAgICB5ID0gcmFuZ2UuaW5kZXhPZih5KTsK
LSAgICAgIHJldHVybiB5IDwgMCA/IFsgTmFOLCBOYU4gXSA6IFsgeSA+IDAgPyB0aHJlc2hvbGRz
W3kgLSAxXSA6IGRvbWFpblswXSwgeSA8IHRocmVzaG9sZHMubGVuZ3RoID8gdGhyZXNob2xkc1t5
XSA6IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0gXTsKLSAgICB9OwotICAgIHNjYWxlLmNvcHkg
PSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9xdWFudGlsZShkb21haW4sIHJh
bmdlKTsKLSAgICB9OwotICAgIHJldHVybiByZXNjYWxlKCk7Ci0gIH0KLSAgZDMuc2NhbGUucXVh
bnRpemUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2NhbGVfcXVhbnRpemUoMCwgMSwg
WyAwLCAxIF0pOwotICB9OwotICBmdW5jdGlvbiBkM19zY2FsZV9xdWFudGl6ZSh4MCwgeDEsIHJh
bmdlKSB7Ci0gICAgdmFyIGt4LCBpOwotICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHsKLSAgICAgIHJl
dHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihpLCBNYXRoLmZsb29yKGt4ICogKHggLSB4
MCkpKSldOwotICAgIH0KLSAgICBmdW5jdGlvbiByZXNjYWxlKCkgewotICAgICAga3ggPSByYW5n
ZS5sZW5ndGggLyAoeDEgLSB4MCk7Ci0gICAgICBpID0gcmFuZ2UubGVuZ3RoIC0gMTsKLSAgICAg
IHJldHVybiBzY2FsZTsKLSAgICB9Ci0gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCkgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gWyB4MCwgeDEgXTsKLSAgICAgIHgw
ID0gK3hbMF07Ci0gICAgICB4MSA9ICt4W3gubGVuZ3RoIC0gMV07Ci0gICAgICByZXR1cm4gcmVz
Y2FsZSgpOwotICAgIH07Ci0gICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByYW5nZTsKLSAgICAgIHJhbmdlID0geDsKLSAg
ICAgIHJldHVybiByZXNjYWxlKCk7Ci0gICAgfTsKLSAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBm
dW5jdGlvbih5KSB7Ci0gICAgICB5ID0gcmFuZ2UuaW5kZXhPZih5KTsKLSAgICAgIHkgPSB5IDwg
MCA/IE5hTiA6IHkgLyBreCArIHgwOwotICAgICAgcmV0dXJuIFsgeSwgeSArIDEgLyBreCBdOwot
ICAgIH07Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQzX3Nj
YWxlX3F1YW50aXplKHgwLCB4MSwgcmFuZ2UpOwotICAgIH07Ci0gICAgcmV0dXJuIHJlc2NhbGUo
KTsKLSAgfQotICBkMy5zY2FsZS50aHJlc2hvbGQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
ZDNfc2NhbGVfdGhyZXNob2xkKFsgLjUgXSwgWyAwLCAxIF0pOwotICB9OwotICBmdW5jdGlvbiBk
M19zY2FsZV90aHJlc2hvbGQoZG9tYWluLCByYW5nZSkgewotICAgIGZ1bmN0aW9uIHNjYWxlKHgp
IHsKLSAgICAgIGlmICh4IDw9IHgpIHJldHVybiByYW5nZVtkMy5iaXNlY3QoZG9tYWluLCB4KV07
Ci0gICAgfQotICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbjsKLSAgICAgIGRvbWFpbiA9IF87Ci0gICAgICBy
ZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJhbmdlOwotICAgICAgcmFuZ2UgPSBf
OwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0gICAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0g
ZnVuY3Rpb24oeSkgewotICAgICAgeSA9IHJhbmdlLmluZGV4T2YoeSk7Ci0gICAgICByZXR1cm4g
WyBkb21haW5beSAtIDFdLCBkb21haW5beV0gXTsKLSAgICB9OwotICAgIHNjYWxlLmNvcHkgPSBm
dW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV90aHJlc2hvbGQoZG9tYWluLCByYW5n
ZSk7Ci0gICAgfTsKLSAgICByZXR1cm4gc2NhbGU7Ci0gIH0KLSAgZDMuc2NhbGUuaWRlbnRpdHkg
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2NhbGVfaWRlbnRpdHkoWyAwLCAxIF0pOwot
ICB9OwotICBmdW5jdGlvbiBkM19zY2FsZV9pZGVudGl0eShkb21haW4pIHsKLSAgICBmdW5jdGlv
biBpZGVudGl0eSh4KSB7Ci0gICAgICByZXR1cm4gK3g7Ci0gICAgfQotICAgIGlkZW50aXR5Lmlu
dmVydCA9IGlkZW50aXR5OwotICAgIGlkZW50aXR5LmRvbWFpbiA9IGlkZW50aXR5LnJhbmdlID0g
ZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWlu
OwotICAgICAgZG9tYWluID0geC5tYXAoaWRlbnRpdHkpOwotICAgICAgcmV0dXJuIGlkZW50aXR5
OwotICAgIH07Ci0gICAgaWRlbnRpdHkudGlja3MgPSBmdW5jdGlvbihtKSB7Ci0gICAgICByZXR1
cm4gZDNfc2NhbGVfbGluZWFyVGlja3MoZG9tYWluLCBtKTsKLSAgICB9OwotICAgIGlkZW50aXR5
LnRpY2tGb3JtYXQgPSBmdW5jdGlvbihtLCBmb3JtYXQpIHsKLSAgICAgIHJldHVybiBkM19zY2Fs
ZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbiwgbSwgZm9ybWF0KTsKLSAgICB9OwotICAgIGlkZW50
aXR5LmNvcHkgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9pZGVudGl0eShk
b21haW4pOwotICAgIH07Ci0gICAgcmV0dXJuIGlkZW50aXR5OwotICB9Ci0gIGQzLnN2ZyA9IHt9
OwotICBkMy5zdmcuYXJjID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGlubmVyUmFkaXVzID0gZDNf
c3ZnX2FyY0lubmVyUmFkaXVzLCBvdXRlclJhZGl1cyA9IGQzX3N2Z19hcmNPdXRlclJhZGl1cywg
c3RhcnRBbmdsZSA9IGQzX3N2Z19hcmNTdGFydEFuZ2xlLCBlbmRBbmdsZSA9IGQzX3N2Z19hcmNF
bmRBbmdsZTsKLSAgICBmdW5jdGlvbiBhcmMoKSB7Ci0gICAgICB2YXIgcjAgPSBpbm5lclJhZGl1
cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCByMSA9IG91dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyksIGEwID0gc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgZDNfc3Zn
X2FyY09mZnNldCwgYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgZDNfc3Zn
X2FyY09mZnNldCwgZGEgPSAoYTEgPCBhMCAmJiAoZGEgPSBhMCwgCi0gICAgICBhMCA9IGExLCBh
MSA9IGRhKSwgYTEgLSBhMCksIGRmID0gZGEgPCDPgCA/ICIwIiA6ICIxIiwgYzAgPSBNYXRoLmNv
cyhhMCksIHMwID0gTWF0aC5zaW4oYTApLCBjMSA9IE1hdGguY29zKGExKSwgczEgPSBNYXRoLnNp
bihhMSk7Ci0gICAgICByZXR1cm4gZGEgPj0gZDNfc3ZnX2FyY01heCA/IHIwID8gIk0wLCIgKyBy
MSArICJBIiArIHIxICsgIiwiICsgcjEgKyAiIDAgMSwxIDAsIiArIC1yMSArICJBIiArIHIxICsg
IiwiICsgcjEgKyAiIDAgMSwxIDAsIiArIHIxICsgIk0wLCIgKyByMCArICJBIiArIHIwICsgIiwi
ICsgcjAgKyAiIDAgMSwwIDAsIiArIC1yMCArICJBIiArIHIwICsgIiwiICsgcjAgKyAiIDAgMSww
IDAsIiArIHIwICsgIloiIDogIk0wLCIgKyByMSArICJBIiArIHIxICsgIiwiICsgcjEgKyAiIDAg
MSwxIDAsIiArIC1yMSArICJBIiArIHIxICsgIiwiICsgcjEgKyAiIDAgMSwxIDAsIiArIHIxICsg
IloiIDogcjAgPyAiTSIgKyByMSAqIGMwICsgIiwiICsgcjEgKiBzMCArICJBIiArIHIxICsgIiwi
ICsgcjEgKyAiIDAgIiArIGRmICsgIiwxICIgKyByMSAqIGMxICsgIiwiICsgcjEgKiBzMSArICJM
IiArIHIwICogYzEgKyAiLCIgKyByMCAqIHMxICsgIkEiICsgcjAgKyAiLCIgKyByMCArICIgMCAi
ICsgZGYgKyAiLDAgIiArIHIwICogYzAgKyAiLCIgKyByMCAqIHMwICsgIloiIDogIk0iICsgcjEg
KiBjMCArICIsIiArIHIxICogczAgKyAiQSIgKyByMSArICIsIiArIHIxICsgIiAwICIgKyBkZiAr
ICIsMSAiICsgcjEgKiBjMSArICIsIiArIHIxICogczEgKyAiTDAsMCIgKyAiWiI7Ci0gICAgfQot
ICAgIGFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIGlubmVyUmFkaXVzOwotICAgICAgaW5uZXJSYWRpdXMgPSBkM19mdW5j
dG9yKHYpOwotICAgICAgcmV0dXJuIGFyYzsKLSAgICB9OwotICAgIGFyYy5vdXRlclJhZGl1cyA9
IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG91dGVy
UmFkaXVzOwotICAgICAgb3V0ZXJSYWRpdXMgPSBkM19mdW5jdG9yKHYpOwotICAgICAgcmV0dXJu
IGFyYzsKLSAgICB9OwotICAgIGFyYy5zdGFydEFuZ2xlID0gZnVuY3Rpb24odikgewotICAgICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc3RhcnRBbmdsZTsKLSAgICAgIHN0YXJ0QW5n
bGUgPSBkM19mdW5jdG9yKHYpOwotICAgICAgcmV0dXJuIGFyYzsKLSAgICB9OwotICAgIGFyYy5l
bmRBbmdsZSA9IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0
dXJuIGVuZEFuZ2xlOwotICAgICAgZW5kQW5nbGUgPSBkM19mdW5jdG9yKHYpOwotICAgICAgcmV0
dXJuIGFyYzsKLSAgICB9OwotICAgIGFyYy5jZW50cm9pZCA9IGZ1bmN0aW9uKCkgewotICAgICAg
dmFyIHIgPSAoaW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSArIG91dGVyUmFkaXVz
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiwgYSA9IChzdGFydEFuZ2xlLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cykgKyBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSAvIDIgKyBkM19z
dmdfYXJjT2Zmc2V0OwotICAgICAgcmV0dXJuIFsgTWF0aC5jb3MoYSkgKiByLCBNYXRoLnNpbihh
KSAqIHIgXTsKLSAgICB9OwotICAgIHJldHVybiBhcmM7Ci0gIH07Ci0gIHZhciBkM19zdmdfYXJj
T2Zmc2V0ID0gLWhhbGbPgCwgZDNfc3ZnX2FyY01heCA9IM+EIC0gzrU7Ci0gIGZ1bmN0aW9uIGQz
X3N2Z19hcmNJbm5lclJhZGl1cyhkKSB7Ci0gICAgcmV0dXJuIGQuaW5uZXJSYWRpdXM7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfc3ZnX2FyY091dGVyUmFkaXVzKGQpIHsKLSAgICByZXR1cm4gZC5vdXRl
clJhZGl1czsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfYXJjU3RhcnRBbmdsZShkKSB7Ci0gICAg
cmV0dXJuIGQuc3RhcnRBbmdsZTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfYXJjRW5kQW5nbGUo
ZCkgewotICAgIHJldHVybiBkLmVuZEFuZ2xlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5l
KHByb2plY3Rpb24pIHsKLSAgICB2YXIgeCA9IGQzX2dlb21fcG9pbnRYLCB5ID0gZDNfZ2VvbV9w
b2ludFksIGRlZmluZWQgPSBkM190cnVlLCBpbnRlcnBvbGF0ZSA9IGQzX3N2Z19saW5lTGluZWFy
LCBpbnRlcnBvbGF0ZUtleSA9IGludGVycG9sYXRlLmtleSwgdGVuc2lvbiA9IC43OwotICAgIGZ1
bmN0aW9uIGxpbmUoZGF0YSkgewotICAgICAgdmFyIHNlZ21lbnRzID0gW10sIHBvaW50cyA9IFtd
LCBpID0gLTEsIG4gPSBkYXRhLmxlbmd0aCwgZCwgZnggPSBkM19mdW5jdG9yKHgpLCBmeSA9IGQz
X2Z1bmN0b3IoeSk7Ci0gICAgICBmdW5jdGlvbiBzZWdtZW50KCkgewotICAgICAgICBzZWdtZW50
cy5wdXNoKCJNIiwgaW50ZXJwb2xhdGUocHJvamVjdGlvbihwb2ludHMpLCB0ZW5zaW9uKSk7Ci0g
ICAgICB9Ci0gICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBpZiAoZGVmaW5lZC5jYWxs
KHRoaXMsIGQgPSBkYXRhW2ldLCBpKSkgewotICAgICAgICAgIHBvaW50cy5wdXNoKFsgK2Z4LmNh
bGwodGhpcywgZCwgaSksICtmeS5jYWxsKHRoaXMsIGQsIGkpIF0pOwotICAgICAgICB9IGVsc2Ug
aWYgKHBvaW50cy5sZW5ndGgpIHsKLSAgICAgICAgICBzZWdtZW50KCk7Ci0gICAgICAgICAgcG9p
bnRzID0gW107Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChwb2ludHMubGVuZ3RoKSBz
ZWdtZW50KCk7Ci0gICAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID8gc2VnbWVudHMuam9pbigi
IikgOiBudWxsOwotICAgIH0KLSAgICBsaW5lLnggPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAo
IWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB4OwotICAgICAgeCA9IF87Ci0gICAgICByZXR1cm4g
bGluZTsKLSAgICB9OwotICAgIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIHk7Ci0gICAgICB5ID0gXzsKLSAgICAgIHJldHVybiBsaW5l
OwotICAgIH07Ci0gICAgbGluZS5kZWZpbmVkID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZGVmaW5lZDsKLSAgICAgIGRlZmluZWQgPSBfOwotICAg
ICAgcmV0dXJuIGxpbmU7Ci0gICAgfTsKLSAgICBsaW5lLmludGVycG9sYXRlID0gZnVuY3Rpb24o
XykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaW50ZXJwb2xhdGVLZXk7
Ci0gICAgICBpZiAodHlwZW9mIF8gPT09ICJmdW5jdGlvbiIpIGludGVycG9sYXRlS2V5ID0gaW50
ZXJwb2xhdGUgPSBfOyBlbHNlIGludGVycG9sYXRlS2V5ID0gKGludGVycG9sYXRlID0gZDNfc3Zn
X2xpbmVJbnRlcnBvbGF0b3JzLmdldChfKSB8fCBkM19zdmdfbGluZUxpbmVhcikua2V5OwotICAg
ICAgcmV0dXJuIGxpbmU7Ci0gICAgfTsKLSAgICBsaW5lLnRlbnNpb24gPSBmdW5jdGlvbihfKSB7
Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0ZW5zaW9uOwotICAgICAgdGVu
c2lvbiA9IF87Ci0gICAgICByZXR1cm4gbGluZTsKLSAgICB9OwotICAgIHJldHVybiBsaW5lOwot
ICB9Ci0gIGQzLnN2Zy5saW5lID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzX3N2Z19saW5l
KGQzX2lkZW50aXR5KTsKLSAgfTsKLSAgdmFyIGQzX3N2Z19saW5lSW50ZXJwb2xhdG9ycyA9IGQz
Lm1hcCh7Ci0gICAgbGluZWFyOiBkM19zdmdfbGluZUxpbmVhciwKLSAgICAibGluZWFyLWNsb3Nl
ZCI6IGQzX3N2Z19saW5lTGluZWFyQ2xvc2VkLAotICAgIHN0ZXA6IGQzX3N2Z19saW5lU3RlcCwK
LSAgICAic3RlcC1iZWZvcmUiOiBkM19zdmdfbGluZVN0ZXBCZWZvcmUsCi0gICAgInN0ZXAtYWZ0
ZXIiOiBkM19zdmdfbGluZVN0ZXBBZnRlciwKLSAgICBiYXNpczogZDNfc3ZnX2xpbmVCYXNpcywK
LSAgICAiYmFzaXMtb3BlbiI6IGQzX3N2Z19saW5lQmFzaXNPcGVuLAotICAgICJiYXNpcy1jbG9z
ZWQiOiBkM19zdmdfbGluZUJhc2lzQ2xvc2VkLAotICAgIGJ1bmRsZTogZDNfc3ZnX2xpbmVCdW5k
bGUsCi0gICAgY2FyZGluYWw6IGQzX3N2Z19saW5lQ2FyZGluYWwsCi0gICAgImNhcmRpbmFsLW9w
ZW4iOiBkM19zdmdfbGluZUNhcmRpbmFsT3BlbiwKLSAgICAiY2FyZGluYWwtY2xvc2VkIjogZDNf
c3ZnX2xpbmVDYXJkaW5hbENsb3NlZCwKLSAgICBtb25vdG9uZTogZDNfc3ZnX2xpbmVNb25vdG9u
ZQotICB9KTsKLSAgZDNfc3ZnX2xpbmVJbnRlcnBvbGF0b3JzLmZvckVhY2goZnVuY3Rpb24oa2V5
LCB2YWx1ZSkgewotICAgIHZhbHVlLmtleSA9IGtleTsKLSAgICB2YWx1ZS5jbG9zZWQgPSAvLWNs
b3NlZCQvLnRlc3Qoa2V5KTsKLSAgfSk7Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lTGluZWFyKHBv
aW50cykgewotICAgIHJldHVybiBwb2ludHMuam9pbigiTCIpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X3N2Z19saW5lTGluZWFyQ2xvc2VkKHBvaW50cykgewotICAgIHJldHVybiBkM19zdmdfbGluZUxp
bmVhcihwb2ludHMpICsgIloiOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcChwb2lu
dHMpIHsKLSAgICB2YXIgaSA9IDAsIG4gPSBwb2ludHMubGVuZ3RoLCBwID0gcG9pbnRzWzBdLCBw
YXRoID0gWyBwWzBdLCAiLCIsIHBbMV0gXTsKLSAgICB3aGlsZSAoKytpIDwgbikgcGF0aC5wdXNo
KCJIIiwgKHBbMF0gKyAocCA9IHBvaW50c1tpXSlbMF0pIC8gMiwgIlYiLCBwWzFdKTsKLSAgICBp
ZiAobiA+IDEpIHBhdGgucHVzaCgiSCIsIHBbMF0pOwotICAgIHJldHVybiBwYXRoLmpvaW4oIiIp
OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcEJlZm9yZShwb2ludHMpIHsKLSAgICB2
YXIgaSA9IDAsIG4gPSBwb2ludHMubGVuZ3RoLCBwID0gcG9pbnRzWzBdLCBwYXRoID0gWyBwWzBd
LCAiLCIsIHBbMV0gXTsKLSAgICB3aGlsZSAoKytpIDwgbikgcGF0aC5wdXNoKCJWIiwgKHAgPSBw
b2ludHNbaV0pWzFdLCAiSCIsIHBbMF0pOwotICAgIHJldHVybiBwYXRoLmpvaW4oIiIpOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lU3RlcEFmdGVyKHBvaW50cykgewotICAgIHZhciBpID0g
MCwgbiA9IHBvaW50cy5sZW5ndGgsIHAgPSBwb2ludHNbMF0sIHBhdGggPSBbIHBbMF0sICIsIiwg
cFsxXSBdOwotICAgIHdoaWxlICgrK2kgPCBuKSBwYXRoLnB1c2goIkgiLCAocCA9IHBvaW50c1tp
XSlbMF0sICJWIiwgcFsxXSk7Ci0gICAgcmV0dXJuIHBhdGguam9pbigiIik7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbE9wZW4ocG9pbnRzLCB0ZW5zaW9uKSB7Ci0gICAgcmV0
dXJuIHBvaW50cy5sZW5ndGggPCA0ID8gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKSA6IHBvaW50
c1sxXSArIGQzX3N2Z19saW5lSGVybWl0ZShwb2ludHMuc2xpY2UoMSwgcG9pbnRzLmxlbmd0aCAt
IDEpLCBkM19zdmdfbGluZUNhcmRpbmFsVGFuZ2VudHMocG9pbnRzLCB0ZW5zaW9uKSk7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVDYXJkaW5hbENsb3NlZChwb2ludHMsIHRlbnNpb24pIHsK
LSAgICByZXR1cm4gcG9pbnRzLmxlbmd0aCA8IDMgPyBkM19zdmdfbGluZUxpbmVhcihwb2ludHMp
IDogcG9pbnRzWzBdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKChwb2ludHMucHVzaChwb2ludHNbMF0p
LCAKLSAgICBwb2ludHMpLCBkM19zdmdfbGluZUNhcmRpbmFsVGFuZ2VudHMoWyBwb2ludHNbcG9p
bnRzLmxlbmd0aCAtIDJdIF0uY29uY2F0KHBvaW50cywgWyBwb2ludHNbMV0gXSksIHRlbnNpb24p
KTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGluZUNhcmRpbmFsKHBvaW50cywgdGVuc2lvbikg
ewotICAgIHJldHVybiBwb2ludHMubGVuZ3RoIDwgMyA/IGQzX3N2Z19saW5lTGluZWFyKHBvaW50
cykgOiBwb2ludHNbMF0gKyBkM19zdmdfbGluZUhlcm1pdGUocG9pbnRzLCBkM19zdmdfbGluZUNh
cmRpbmFsVGFuZ2VudHMocG9pbnRzLCB0ZW5zaW9uKSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3Zn
X2xpbmVIZXJtaXRlKHBvaW50cywgdGFuZ2VudHMpIHsKLSAgICBpZiAodGFuZ2VudHMubGVuZ3Ro
IDwgMSB8fCBwb2ludHMubGVuZ3RoICE9IHRhbmdlbnRzLmxlbmd0aCAmJiBwb2ludHMubGVuZ3Ro
ICE9IHRhbmdlbnRzLmxlbmd0aCArIDIpIHsKLSAgICAgIHJldHVybiBkM19zdmdfbGluZUxpbmVh
cihwb2ludHMpOwotICAgIH0KLSAgICB2YXIgcXVhZCA9IHBvaW50cy5sZW5ndGggIT0gdGFuZ2Vu
dHMubGVuZ3RoLCBwYXRoID0gIiIsIHAwID0gcG9pbnRzWzBdLCBwID0gcG9pbnRzWzFdLCB0MCA9
IHRhbmdlbnRzWzBdLCB0ID0gdDAsIHBpID0gMTsKLSAgICBpZiAocXVhZCkgewotICAgICAgcGF0
aCArPSAiUSIgKyAocFswXSAtIHQwWzBdICogMiAvIDMpICsgIiwiICsgKHBbMV0gLSB0MFsxXSAq
IDIgLyAzKSArICIsIiArIHBbMF0gKyAiLCIgKyBwWzFdOwotICAgICAgcDAgPSBwb2ludHNbMV07
Ci0gICAgICBwaSA9IDI7Ci0gICAgfQotICAgIGlmICh0YW5nZW50cy5sZW5ndGggPiAxKSB7Ci0g
ICAgICB0ID0gdGFuZ2VudHNbMV07Ci0gICAgICBwID0gcG9pbnRzW3BpXTsKLSAgICAgIHBpKys7
Ci0gICAgICBwYXRoICs9ICJDIiArIChwMFswXSArIHQwWzBdKSArICIsIiArIChwMFsxXSArIHQw
WzFdKSArICIsIiArIChwWzBdIC0gdFswXSkgKyAiLCIgKyAocFsxXSAtIHRbMV0pICsgIiwiICsg
cFswXSArICIsIiArIHBbMV07Ci0gICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHRhbmdlbnRzLmxl
bmd0aDsgaSsrLCBwaSsrKSB7Ci0gICAgICAgIHAgPSBwb2ludHNbcGldOwotICAgICAgICB0ID0g
dGFuZ2VudHNbaV07Ci0gICAgICAgIHBhdGggKz0gIlMiICsgKHBbMF0gLSB0WzBdKSArICIsIiAr
IChwWzFdIC0gdFsxXSkgKyAiLCIgKyBwWzBdICsgIiwiICsgcFsxXTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKHF1YWQpIHsKLSAgICAgIHZhciBscCA9IHBvaW50c1twaV07Ci0gICAgICBwYXRo
ICs9ICJRIiArIChwWzBdICsgdFswXSAqIDIgLyAzKSArICIsIiArIChwWzFdICsgdFsxXSAqIDIg
LyAzKSArICIsIiArIGxwWzBdICsgIiwiICsgbHBbMV07Ci0gICAgfQotICAgIHJldHVybiBwYXRo
OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQ2FyZGluYWxUYW5nZW50cyhwb2ludHMsIHRl
bnNpb24pIHsKLSAgICB2YXIgdGFuZ2VudHMgPSBbXSwgYSA9ICgxIC0gdGVuc2lvbikgLyAyLCBw
MCwgcDEgPSBwb2ludHNbMF0sIHAyID0gcG9pbnRzWzFdLCBpID0gMSwgbiA9IHBvaW50cy5sZW5n
dGg7Ci0gICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgIHAwID0gcDE7Ci0gICAgICBwMSA9IHAy
OwotICAgICAgcDIgPSBwb2ludHNbaV07Ci0gICAgICB0YW5nZW50cy5wdXNoKFsgYSAqIChwMlsw
XSAtIHAwWzBdKSwgYSAqIChwMlsxXSAtIHAwWzFdKSBdKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRh
bmdlbnRzOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXMocG9pbnRzKSB7Ci0gICAg
aWYgKHBvaW50cy5sZW5ndGggPCAzKSByZXR1cm4gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKTsK
LSAgICB2YXIgaSA9IDEsIG4gPSBwb2ludHMubGVuZ3RoLCBwaSA9IHBvaW50c1swXSwgeDAgPSBw
aVswXSwgeTAgPSBwaVsxXSwgcHggPSBbIHgwLCB4MCwgeDAsIChwaSA9IHBvaW50c1sxXSlbMF0g
XSwgcHkgPSBbIHkwLCB5MCwgeTAsIHBpWzFdIF0sIHBhdGggPSBbIHgwLCAiLCIsIHkwLCAiTCIs
IGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMywgcHgpLCAiLCIsIGQzX3N2
Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMywgcHkpIF07Ci0gICAgcG9pbnRzLnB1
c2gocG9pbnRzW24gLSAxXSk7Ci0gICAgd2hpbGUgKCsraSA8PSBuKSB7Ci0gICAgICBwaSA9IHBv
aW50c1tpXTsKLSAgICAgIHB4LnNoaWZ0KCk7Ci0gICAgICBweC5wdXNoKHBpWzBdKTsKLSAgICAg
IHB5LnNoaWZ0KCk7Ci0gICAgICBweS5wdXNoKHBpWzFdKTsKLSAgICAgIGQzX3N2Z19saW5lQmFz
aXNCZXppZXIocGF0aCwgcHgsIHB5KTsKLSAgICB9Ci0gICAgcG9pbnRzLnBvcCgpOwotICAgIHBh
dGgucHVzaCgiTCIsIHBpKTsKLSAgICByZXR1cm4gcGF0aC5qb2luKCIiKTsKLSAgfQotICBmdW5j
dGlvbiBkM19zdmdfbGluZUJhc2lzT3Blbihwb2ludHMpIHsKLSAgICBpZiAocG9pbnRzLmxlbmd0
aCA8IDQpIHJldHVybiBkM19zdmdfbGluZUxpbmVhcihwb2ludHMpOwotICAgIHZhciBwYXRoID0g
W10sIGkgPSAtMSwgbiA9IHBvaW50cy5sZW5ndGgsIHBpLCBweCA9IFsgMCBdLCBweSA9IFsgMCBd
OwotICAgIHdoaWxlICgrK2kgPCAzKSB7Ci0gICAgICBwaSA9IHBvaW50c1tpXTsKLSAgICAgIHB4
LnB1c2gocGlbMF0pOwotICAgICAgcHkucHVzaChwaVsxXSk7Ci0gICAgfQotICAgIHBhdGgucHVz
aChkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMsIHB4KSArICIsIiArIGQz
X3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMywgcHkpKTsKLSAgICAtLWk7Ci0g
ICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgIHBpID0gcG9pbnRzW2ldOwotICAgICAgcHguc2hp
ZnQoKTsKLSAgICAgIHB4LnB1c2gocGlbMF0pOwotICAgICAgcHkuc2hpZnQoKTsKLSAgICAgIHB5
LnB1c2gocGlbMV0pOwotICAgICAgZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLCBweCwgcHkp
OwotICAgIH0KLSAgICByZXR1cm4gcGF0aC5qb2luKCIiKTsKLSAgfQotICBmdW5jdGlvbiBkM19z
dmdfbGluZUJhc2lzQ2xvc2VkKHBvaW50cykgewotICAgIHZhciBwYXRoLCBpID0gLTEsIG4gPSBw
b2ludHMubGVuZ3RoLCBtID0gbiArIDQsIHBpLCBweCA9IFtdLCBweSA9IFtdOwotICAgIHdoaWxl
ICgrK2kgPCA0KSB7Ci0gICAgICBwaSA9IHBvaW50c1tpICUgbl07Ci0gICAgICBweC5wdXNoKHBp
WzBdKTsKLSAgICAgIHB5LnB1c2gocGlbMV0pOwotICAgIH0KLSAgICBwYXRoID0gWyBkM19zdmdf
bGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMsIHB4KSwgIiwiLCBkM19zdmdfbGluZURv
dDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjMsIHB5KSBdOwotICAgIC0taTsKLSAgICB3aGlsZSAo
KytpIDwgbSkgewotICAgICAgcGkgPSBwb2ludHNbaSAlIG5dOwotICAgICAgcHguc2hpZnQoKTsK
LSAgICAgIHB4LnB1c2gocGlbMF0pOwotICAgICAgcHkuc2hpZnQoKTsKLSAgICAgIHB5LnB1c2go
cGlbMV0pOwotICAgICAgZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLCBweCwgcHkpOwotICAg
IH0KLSAgICByZXR1cm4gcGF0aC5qb2luKCIiKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGlu
ZUJ1bmRsZShwb2ludHMsIHRlbnNpb24pIHsKLSAgICB2YXIgbiA9IHBvaW50cy5sZW5ndGggLSAx
OwotICAgIGlmIChuKSB7Ci0gICAgICB2YXIgeDAgPSBwb2ludHNbMF1bMF0sIHkwID0gcG9pbnRz
WzBdWzFdLCBkeCA9IHBvaW50c1tuXVswXSAtIHgwLCBkeSA9IHBvaW50c1tuXVsxXSAtIHkwLCBp
ID0gLTEsIHAsIHQ7Ci0gICAgICB3aGlsZSAoKytpIDw9IG4pIHsKLSAgICAgICAgcCA9IHBvaW50
c1tpXTsKLSAgICAgICAgdCA9IGkgLyBuOwotICAgICAgICBwWzBdID0gdGVuc2lvbiAqIHBbMF0g
KyAoMSAtIHRlbnNpb24pICogKHgwICsgdCAqIGR4KTsKLSAgICAgICAgcFsxXSA9IHRlbnNpb24g
KiBwWzFdICsgKDEgLSB0ZW5zaW9uKSAqICh5MCArIHQgKiBkeSk7Ci0gICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBkM19zdmdfbGluZUJhc2lzKHBvaW50cyk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
c3ZnX2xpbmVEb3Q0KGEsIGIpIHsKLSAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsx
XSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107Ci0gIH0KLSAgdmFyIGQzX3N2Z19saW5lQmFz
aXNCZXppZXIxID0gWyAwLCAyIC8gMywgMSAvIDMsIDAgXSwgZDNfc3ZnX2xpbmVCYXNpc0Jlemll
cjIgPSBbIDAsIDEgLyAzLCAyIC8gMywgMCBdLCBkM19zdmdfbGluZUJhc2lzQmV6aWVyMyA9IFsg
MCwgMSAvIDYsIDIgLyAzLCAxIC8gNiBdOwotICBmdW5jdGlvbiBkM19zdmdfbGluZUJhc2lzQmV6
aWVyKHBhdGgsIHgsIHkpIHsKLSAgICBwYXRoLnB1c2goIkMiLCBkM19zdmdfbGluZURvdDQoZDNf
c3ZnX2xpbmVCYXNpc0JlemllcjEsIHgpLCAiLCIsIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGlu
ZUJhc2lzQmV6aWVyMSwgeSksICIsIiwgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNC
ZXppZXIyLCB4KSwgIiwiLCBkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjIs
IHkpLCAiLCIsIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMywgeCksICIs
IiwgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLCB5KSk7Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfc3ZnX2xpbmVTbG9wZShwMCwgcDEpIHsKLSAgICByZXR1cm4gKHAxWzFdIC0g
cDBbMV0pIC8gKHAxWzBdIC0gcDBbMF0pOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lRmlu
aXRlRGlmZmVyZW5jZXMocG9pbnRzKSB7Ci0gICAgdmFyIGkgPSAwLCBqID0gcG9pbnRzLmxlbmd0
aCAtIDEsIG0gPSBbXSwgcDAgPSBwb2ludHNbMF0sIHAxID0gcG9pbnRzWzFdLCBkID0gbVswXSA9
IGQzX3N2Z19saW5lU2xvcGUocDAsIHAxKTsKLSAgICB3aGlsZSAoKytpIDwgaikgewotICAgICAg
bVtpXSA9IChkICsgKGQgPSBkM19zdmdfbGluZVNsb3BlKHAwID0gcDEsIHAxID0gcG9pbnRzW2kg
KyAxXSkpKSAvIDI7Ci0gICAgfQotICAgIG1baV0gPSBkOwotICAgIHJldHVybiBtOwotICB9Ci0g
IGZ1bmN0aW9uIGQzX3N2Z19saW5lTW9ub3RvbmVUYW5nZW50cyhwb2ludHMpIHsKLSAgICB2YXIg
dGFuZ2VudHMgPSBbXSwgZCwgYSwgYiwgcywgbSA9IGQzX3N2Z19saW5lRmluaXRlRGlmZmVyZW5j
ZXMocG9pbnRzKSwgaSA9IC0xLCBqID0gcG9pbnRzLmxlbmd0aCAtIDE7Ci0gICAgd2hpbGUgKCsr
aSA8IGopIHsKLSAgICAgIGQgPSBkM19zdmdfbGluZVNsb3BlKHBvaW50c1tpXSwgcG9pbnRzW2kg
KyAxXSk7Ci0gICAgICBpZiAoYWJzKGQpIDwgzrUpIHsKLSAgICAgICAgbVtpXSA9IG1baSArIDFd
ID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGEgPSBtW2ldIC8gZDsKLSAgICAgICAgYiA9
IG1baSArIDFdIC8gZDsKLSAgICAgICAgcyA9IGEgKiBhICsgYiAqIGI7Ci0gICAgICAgIGlmIChz
ID4gOSkgewotICAgICAgICAgIHMgPSBkICogMyAvIE1hdGguc3FydChzKTsKLSAgICAgICAgICBt
W2ldID0gcyAqIGE7Ci0gICAgICAgICAgbVtpICsgMV0gPSBzICogYjsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLSAgICBpID0gLTE7Ci0gICAgd2hpbGUgKCsraSA8PSBqKSB7Ci0gICAgICBz
ID0gKHBvaW50c1tNYXRoLm1pbihqLCBpICsgMSldWzBdIC0gcG9pbnRzW01hdGgubWF4KDAsIGkg
LSAxKV1bMF0pIC8gKDYgKiAoMSArIG1baV0gKiBtW2ldKSk7Ci0gICAgICB0YW5nZW50cy5wdXNo
KFsgcyB8fCAwLCBtW2ldICogcyB8fCAwIF0pOwotICAgIH0KLSAgICByZXR1cm4gdGFuZ2VudHM7
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVNb25vdG9uZShwb2ludHMpIHsKLSAgICByZXR1
cm4gcG9pbnRzLmxlbmd0aCA8IDMgPyBkM19zdmdfbGluZUxpbmVhcihwb2ludHMpIDogcG9pbnRz
WzBdICsgZDNfc3ZnX2xpbmVIZXJtaXRlKHBvaW50cywgZDNfc3ZnX2xpbmVNb25vdG9uZVRhbmdl
bnRzKHBvaW50cykpOwotICB9Ci0gIGQzLnN2Zy5saW5lLnJhZGlhbCA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciBsaW5lID0gZDNfc3ZnX2xpbmUoZDNfc3ZnX2xpbmVSYWRpYWwpOwotICAgIGxpbmUu
cmFkaXVzID0gbGluZS54LCBkZWxldGUgbGluZS54OwotICAgIGxpbmUuYW5nbGUgPSBsaW5lLnks
IGRlbGV0ZSBsaW5lLnk7Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3N2
Z19saW5lUmFkaWFsKHBvaW50cykgewotICAgIHZhciBwb2ludCwgaSA9IC0xLCBuID0gcG9pbnRz
Lmxlbmd0aCwgciwgYTsKLSAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgcG9pbnQgPSBwb2lu
dHNbaV07Ci0gICAgICByID0gcG9pbnRbMF07Ci0gICAgICBhID0gcG9pbnRbMV0gKyBkM19zdmdf
YXJjT2Zmc2V0OwotICAgICAgcG9pbnRbMF0gPSByICogTWF0aC5jb3MoYSk7Ci0gICAgICBwb2lu
dFsxXSA9IHIgKiBNYXRoLnNpbihhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBvaW50czsKLSAgfQot
ICBmdW5jdGlvbiBkM19zdmdfYXJlYShwcm9qZWN0aW9uKSB7Ci0gICAgdmFyIHgwID0gZDNfZ2Vv
bV9wb2ludFgsIHgxID0gZDNfZ2VvbV9wb2ludFgsIHkwID0gMCwgeTEgPSBkM19nZW9tX3BvaW50
WSwgZGVmaW5lZCA9IGQzX3RydWUsIGludGVycG9sYXRlID0gZDNfc3ZnX2xpbmVMaW5lYXIsIGlu
dGVycG9sYXRlS2V5ID0gaW50ZXJwb2xhdGUua2V5LCBpbnRlcnBvbGF0ZVJldmVyc2UgPSBpbnRl
cnBvbGF0ZSwgTCA9ICJMIiwgdGVuc2lvbiA9IC43OwotICAgIGZ1bmN0aW9uIGFyZWEoZGF0YSkg
ewotICAgICAgdmFyIHNlZ21lbnRzID0gW10sIHBvaW50czAgPSBbXSwgcG9pbnRzMSA9IFtdLCBp
ID0gLTEsIG4gPSBkYXRhLmxlbmd0aCwgZCwgZngwID0gZDNfZnVuY3Rvcih4MCksIGZ5MCA9IGQz
X2Z1bmN0b3IoeTApLCBmeDEgPSB4MCA9PT0geDEgPyBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0
dXJuIHg7Ci0gICAgICB9IDogZDNfZnVuY3Rvcih4MSksIGZ5MSA9IHkwID09PSB5MSA/IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4geTsKLSAgICAgIH0gOiBkM19mdW5jdG9yKHkxKSwgeCwg
eTsKLSAgICAgIGZ1bmN0aW9uIHNlZ21lbnQoKSB7Ci0gICAgICAgIHNlZ21lbnRzLnB1c2goIk0i
LCBpbnRlcnBvbGF0ZShwcm9qZWN0aW9uKHBvaW50czEpLCB0ZW5zaW9uKSwgTCwgaW50ZXJwb2xh
dGVSZXZlcnNlKHByb2plY3Rpb24ocG9pbnRzMC5yZXZlcnNlKCkpLCB0ZW5zaW9uKSwgIloiKTsK
LSAgICAgIH0KLSAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgIGlmIChkZWZpbmVkLmNh
bGwodGhpcywgZCA9IGRhdGFbaV0sIGkpKSB7Ci0gICAgICAgICAgcG9pbnRzMC5wdXNoKFsgeCA9
ICtmeDAuY2FsbCh0aGlzLCBkLCBpKSwgeSA9ICtmeTAuY2FsbCh0aGlzLCBkLCBpKSBdKTsKLSAg
ICAgICAgICBwb2ludHMxLnB1c2goWyArZngxLmNhbGwodGhpcywgZCwgaSksICtmeTEuY2FsbCh0
aGlzLCBkLCBpKSBdKTsKLSAgICAgICAgfSBlbHNlIGlmIChwb2ludHMwLmxlbmd0aCkgewotICAg
ICAgICAgIHNlZ21lbnQoKTsKLSAgICAgICAgICBwb2ludHMwID0gW107Ci0gICAgICAgICAgcG9p
bnRzMSA9IFtdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAocG9pbnRzMC5sZW5ndGgp
IHNlZ21lbnQoKTsKLSAgICAgIHJldHVybiBzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2lu
KCIiKSA6IG51bGw7Ci0gICAgfQotICAgIGFyZWEueCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHgxOwotICAgICAgeDAgPSB4MSA9IF87Ci0gICAg
ICByZXR1cm4gYXJlYTsKLSAgICB9OwotICAgIGFyZWEueDAgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB4MDsKLSAgICAgIHgwID0gXzsKLSAgICAg
IHJldHVybiBhcmVhOwotICAgIH07Ci0gICAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHgxOwotICAgICAgeDEgPSBfOwotICAgICAg
cmV0dXJuIGFyZWE7Ci0gICAgfTsKLSAgICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB5MTsKLSAgICAgIHkwID0geTEgPSBfOwotICAg
ICAgcmV0dXJuIGFyZWE7Ci0gICAgfTsKLSAgICBhcmVhLnkwID0gZnVuY3Rpb24oXykgewotICAg
ICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4geTA7Ci0gICAgICB5MCA9IF87Ci0gICAg
ICByZXR1cm4gYXJlYTsKLSAgICB9OwotICAgIGFyZWEueTEgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB5MTsKLSAgICAgIHkxID0gXzsKLSAgICAg
IHJldHVybiBhcmVhOwotICAgIH07Ci0gICAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZGVmaW5lZDsKLSAgICAgIGRlZmlu
ZWQgPSBfOwotICAgICAgcmV0dXJuIGFyZWE7Ci0gICAgfTsKLSAgICBhcmVhLmludGVycG9sYXRl
ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaW50
ZXJwb2xhdGVLZXk7Ci0gICAgICBpZiAodHlwZW9mIF8gPT09ICJmdW5jdGlvbiIpIGludGVycG9s
YXRlS2V5ID0gaW50ZXJwb2xhdGUgPSBfOyBlbHNlIGludGVycG9sYXRlS2V5ID0gKGludGVycG9s
YXRlID0gZDNfc3ZnX2xpbmVJbnRlcnBvbGF0b3JzLmdldChfKSB8fCBkM19zdmdfbGluZUxpbmVh
cikua2V5OwotICAgICAgaW50ZXJwb2xhdGVSZXZlcnNlID0gaW50ZXJwb2xhdGUucmV2ZXJzZSB8
fCBpbnRlcnBvbGF0ZTsKLSAgICAgIEwgPSBpbnRlcnBvbGF0ZS5jbG9zZWQgPyAiTSIgOiAiTCI7
Ci0gICAgICByZXR1cm4gYXJlYTsKLSAgICB9OwotICAgIGFyZWEudGVuc2lvbiA9IGZ1bmN0aW9u
KF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRlbnNpb247Ci0gICAg
ICB0ZW5zaW9uID0gXzsKLSAgICAgIHJldHVybiBhcmVhOwotICAgIH07Ci0gICAgcmV0dXJuIGFy
ZWE7Ci0gIH0KLSAgZDNfc3ZnX2xpbmVTdGVwQmVmb3JlLnJldmVyc2UgPSBkM19zdmdfbGluZVN0
ZXBBZnRlcjsKLSAgZDNfc3ZnX2xpbmVTdGVwQWZ0ZXIucmV2ZXJzZSA9IGQzX3N2Z19saW5lU3Rl
cEJlZm9yZTsKLSAgZDMuc3ZnLmFyZWEgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc3Zn
X2FyZWEoZDNfaWRlbnRpdHkpOwotICB9OwotICBkMy5zdmcuYXJlYS5yYWRpYWwgPSBmdW5jdGlv
bigpIHsKLSAgICB2YXIgYXJlYSA9IGQzX3N2Z19hcmVhKGQzX3N2Z19saW5lUmFkaWFsKTsKLSAg
ICBhcmVhLnJhZGl1cyA9IGFyZWEueCwgZGVsZXRlIGFyZWEueDsKLSAgICBhcmVhLmlubmVyUmFk
aXVzID0gYXJlYS54MCwgZGVsZXRlIGFyZWEueDA7Ci0gICAgYXJlYS5vdXRlclJhZGl1cyA9IGFy
ZWEueDEsIGRlbGV0ZSBhcmVhLngxOwotICAgIGFyZWEuYW5nbGUgPSBhcmVhLnksIGRlbGV0ZSBh
cmVhLnk7Ci0gICAgYXJlYS5zdGFydEFuZ2xlID0gYXJlYS55MCwgZGVsZXRlIGFyZWEueTA7Ci0g
ICAgYXJlYS5lbmRBbmdsZSA9IGFyZWEueTEsIGRlbGV0ZSBhcmVhLnkxOwotICAgIHJldHVybiBh
cmVhOwotICB9OwotICBkMy5zdmcuY2hvcmQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgc291cmNl
ID0gZDNfc291cmNlLCB0YXJnZXQgPSBkM190YXJnZXQsIHJhZGl1cyA9IGQzX3N2Z19jaG9yZFJh
ZGl1cywgc3RhcnRBbmdsZSA9IGQzX3N2Z19hcmNTdGFydEFuZ2xlLCBlbmRBbmdsZSA9IGQzX3N2
Z19hcmNFbmRBbmdsZTsKLSAgICBmdW5jdGlvbiBjaG9yZChkLCBpKSB7Ci0gICAgICB2YXIgcyA9
IHN1Ymdyb3VwKHRoaXMsIHNvdXJjZSwgZCwgaSksIHQgPSBzdWJncm91cCh0aGlzLCB0YXJnZXQs
IGQsIGkpOwotICAgICAgcmV0dXJuICJNIiArIHMucDAgKyBhcmMocy5yLCBzLnAxLCBzLmExIC0g
cy5hMCkgKyAoZXF1YWxzKHMsIHQpID8gY3VydmUocy5yLCBzLnAxLCBzLnIsIHMucDApIDogY3Vy
dmUocy5yLCBzLnAxLCB0LnIsIHQucDApICsgYXJjKHQuciwgdC5wMSwgdC5hMSAtIHQuYTApICsg
Y3VydmUodC5yLCB0LnAxLCBzLnIsIHMucDApKSArICJaIjsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
c3ViZ3JvdXAoc2VsZiwgZiwgZCwgaSkgewotICAgICAgdmFyIHN1Ymdyb3VwID0gZi5jYWxsKHNl
bGYsIGQsIGkpLCByID0gcmFkaXVzLmNhbGwoc2VsZiwgc3ViZ3JvdXAsIGkpLCBhMCA9IHN0YXJ0
QW5nbGUuY2FsbChzZWxmLCBzdWJncm91cCwgaSkgKyBkM19zdmdfYXJjT2Zmc2V0LCBhMSA9IGVu
ZEFuZ2xlLmNhbGwoc2VsZiwgc3ViZ3JvdXAsIGkpICsgZDNfc3ZnX2FyY09mZnNldDsKLSAgICAg
IHJldHVybiB7Ci0gICAgICAgIHI6IHIsCi0gICAgICAgIGEwOiBhMCwKLSAgICAgICAgYTE6IGEx
LAotICAgICAgICBwMDogWyByICogTWF0aC5jb3MoYTApLCByICogTWF0aC5zaW4oYTApIF0sCi0g
ICAgICAgIHAxOiBbIHIgKiBNYXRoLmNvcyhhMSksIHIgKiBNYXRoLnNpbihhMSkgXQotICAgICAg
fTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHsKLSAgICAgIHJldHVybiBhLmEw
ID09IGIuYTAgJiYgYS5hMSA9PSBiLmExOwotICAgIH0KLSAgICBmdW5jdGlvbiBhcmMociwgcCwg
YSkgewotICAgICAgcmV0dXJuICJBIiArIHIgKyAiLCIgKyByICsgIiAwICIgKyArKGEgPiDPgCkg
KyAiLDEgIiArIHA7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGN1cnZlKHIwLCBwMCwgcjEsIHAxKSB7
Ci0gICAgICByZXR1cm4gIlEgMCwwICIgKyBwMTsKLSAgICB9Ci0gICAgY2hvcmQucmFkaXVzID0g
ZnVuY3Rpb24odikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcmFkaXVz
OwotICAgICAgcmFkaXVzID0gZDNfZnVuY3Rvcih2KTsKLSAgICAgIHJldHVybiBjaG9yZDsKLSAg
ICB9OwotICAgIGNob3JkLnNvdXJjZSA9IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIHNvdXJjZTsKLSAgICAgIHNvdXJjZSA9IGQzX2Z1bmN0b3Iodik7
Ci0gICAgICByZXR1cm4gY2hvcmQ7Ci0gICAgfTsKLSAgICBjaG9yZC50YXJnZXQgPSBmdW5jdGlv
bih2KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0YXJnZXQ7Ci0gICAg
ICB0YXJnZXQgPSBkM19mdW5jdG9yKHYpOwotICAgICAgcmV0dXJuIGNob3JkOwotICAgIH07Ci0g
ICAgY2hvcmQuc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIHN0YXJ0QW5nbGU7Ci0gICAgICBzdGFydEFuZ2xlID0gZDNfZnVuY3Rv
cih2KTsKLSAgICAgIHJldHVybiBjaG9yZDsKLSAgICB9OwotICAgIGNob3JkLmVuZEFuZ2xlID0g
ZnVuY3Rpb24odikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZW5kQW5n
bGU7Ci0gICAgICBlbmRBbmdsZSA9IGQzX2Z1bmN0b3Iodik7Ci0gICAgICByZXR1cm4gY2hvcmQ7
Ci0gICAgfTsKLSAgICByZXR1cm4gY2hvcmQ7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3N2Z19jaG9y
ZFJhZGl1cyhkKSB7Ci0gICAgcmV0dXJuIGQucmFkaXVzOwotICB9Ci0gIGQzLnN2Zy5kaWFnb25h
bCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBzb3VyY2UgPSBkM19zb3VyY2UsIHRhcmdldCA9IGQz
X3RhcmdldCwgcHJvamVjdGlvbiA9IGQzX3N2Z19kaWFnb25hbFByb2plY3Rpb247Ci0gICAgZnVu
Y3Rpb24gZGlhZ29uYWwoZCwgaSkgewotICAgICAgdmFyIHAwID0gc291cmNlLmNhbGwodGhpcywg
ZCwgaSksIHAzID0gdGFyZ2V0LmNhbGwodGhpcywgZCwgaSksIG0gPSAocDAueSArIHAzLnkpIC8g
MiwgcCA9IFsgcDAsIHsKLSAgICAgICAgeDogcDAueCwKLSAgICAgICAgeTogbQotICAgICAgfSwg
ewotICAgICAgICB4OiBwMy54LAotICAgICAgICB5OiBtCi0gICAgICB9LCBwMyBdOwotICAgICAg
cCA9IHAubWFwKHByb2plY3Rpb24pOwotICAgICAgcmV0dXJuICJNIiArIHBbMF0gKyAiQyIgKyBw
WzFdICsgIiAiICsgcFsyXSArICIgIiArIHBbM107Ci0gICAgfQotICAgIGRpYWdvbmFsLnNvdXJj
ZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNv
dXJjZTsKLSAgICAgIHNvdXJjZSA9IGQzX2Z1bmN0b3IoeCk7Ci0gICAgICByZXR1cm4gZGlhZ29u
YWw7Ci0gICAgfTsKLSAgICBkaWFnb25hbC50YXJnZXQgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0YXJnZXQ7Ci0gICAgICB0YXJnZXQgPSBkM19m
dW5jdG9yKHgpOwotICAgICAgcmV0dXJuIGRpYWdvbmFsOwotICAgIH07Ci0gICAgZGlhZ29uYWwu
cHJvamVjdGlvbiA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHByb2plY3Rpb247Ci0gICAgICBwcm9qZWN0aW9uID0geDsKLSAgICAgIHJldHVybiBk
aWFnb25hbDsKLSAgICB9OwotICAgIHJldHVybiBkaWFnb25hbDsKLSAgfTsKLSAgZnVuY3Rpb24g
ZDNfc3ZnX2RpYWdvbmFsUHJvamVjdGlvbihkKSB7Ci0gICAgcmV0dXJuIFsgZC54LCBkLnkgXTsK
LSAgfQotICBkMy5zdmcuZGlhZ29uYWwucmFkaWFsID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRp
YWdvbmFsID0gZDMuc3ZnLmRpYWdvbmFsKCksIHByb2plY3Rpb24gPSBkM19zdmdfZGlhZ29uYWxQ
cm9qZWN0aW9uLCBwcm9qZWN0aW9uXyA9IGRpYWdvbmFsLnByb2plY3Rpb247Ci0gICAgZGlhZ29u
YWwucHJvamVjdGlvbiA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBhcmd1bWVudHMubGVu
Z3RoID8gcHJvamVjdGlvbl8oZDNfc3ZnX2RpYWdvbmFsUmFkaWFsUHJvamVjdGlvbihwcm9qZWN0
aW9uID0geCkpIDogcHJvamVjdGlvbjsKLSAgICB9OwotICAgIHJldHVybiBkaWFnb25hbDsKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfc3ZnX2RpYWdvbmFsUmFkaWFsUHJvamVjdGlvbihwcm9qZWN0aW9u
KSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGQgPSBwcm9qZWN0aW9uLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyksIHIgPSBkWzBdLCBhID0gZFsxXSArIGQzX3N2Z19hcmNPZmZz
ZXQ7Ci0gICAgICByZXR1cm4gWyByICogTWF0aC5jb3MoYSksIHIgKiBNYXRoLnNpbihhKSBdOwot
ICAgIH07Ci0gIH0KLSAgZDMuc3ZnLnN5bWJvbCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB0eXBl
ID0gZDNfc3ZnX3N5bWJvbFR5cGUsIHNpemUgPSBkM19zdmdfc3ltYm9sU2l6ZTsKLSAgICBmdW5j
dGlvbiBzeW1ib2woZCwgaSkgewotICAgICAgcmV0dXJuIChkM19zdmdfc3ltYm9scy5nZXQodHlw
ZS5jYWxsKHRoaXMsIGQsIGkpKSB8fCBkM19zdmdfc3ltYm9sQ2lyY2xlKShzaXplLmNhbGwodGhp
cywgZCwgaSkpOwotICAgIH0KLSAgICBzeW1ib2wudHlwZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHR5cGU7Ci0gICAgICB0eXBlID0gZDNfZnVu
Y3Rvcih4KTsKLSAgICAgIHJldHVybiBzeW1ib2w7Ci0gICAgfTsKLSAgICBzeW1ib2wuc2l6ZSA9
IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNpemU7
Ci0gICAgICBzaXplID0gZDNfZnVuY3Rvcih4KTsKLSAgICAgIHJldHVybiBzeW1ib2w7Ci0gICAg
fTsKLSAgICByZXR1cm4gc3ltYm9sOwotICB9OwotICBmdW5jdGlvbiBkM19zdmdfc3ltYm9sU2l6
ZSgpIHsKLSAgICByZXR1cm4gNjQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX3N5bWJvbFR5cGUo
KSB7Ci0gICAgcmV0dXJuICJjaXJjbGUiOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xD
aXJjbGUoc2l6ZSkgewotICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgLyDPgCk7Ci0gICAgcmV0
dXJuICJNMCwiICsgciArICJBIiArIHIgKyAiLCIgKyByICsgIiAwIDEsMSAwLCIgKyAtciArICJB
IiArIHIgKyAiLCIgKyByICsgIiAwIDEsMSAwLCIgKyByICsgIloiOwotICB9Ci0gIHZhciBkM19z
dmdfc3ltYm9scyA9IGQzLm1hcCh7Ci0gICAgY2lyY2xlOiBkM19zdmdfc3ltYm9sQ2lyY2xlLAot
ICAgIGNyb3NzOiBmdW5jdGlvbihzaXplKSB7Ci0gICAgICB2YXIgciA9IE1hdGguc3FydChzaXpl
IC8gNSkgLyAyOwotICAgICAgcmV0dXJuICJNIiArIC0zICogciArICIsIiArIC1yICsgIkgiICsg
LXIgKyAiViIgKyAtMyAqIHIgKyAiSCIgKyByICsgIlYiICsgLXIgKyAiSCIgKyAzICogciArICJW
IiArIHIgKyAiSCIgKyByICsgIlYiICsgMyAqIHIgKyAiSCIgKyAtciArICJWIiArIHIgKyAiSCIg
KyAtMyAqIHIgKyAiWiI7Ci0gICAgfSwKLSAgICBkaWFtb25kOiBmdW5jdGlvbihzaXplKSB7Ci0g
ICAgICB2YXIgcnkgPSBNYXRoLnNxcnQoc2l6ZSAvICgyICogZDNfc3ZnX3N5bWJvbFRhbjMwKSks
IHJ4ID0gcnkgKiBkM19zdmdfc3ltYm9sVGFuMzA7Ci0gICAgICByZXR1cm4gIk0wLCIgKyAtcnkg
KyAiTCIgKyByeCArICIsMCIgKyAiIDAsIiArIHJ5ICsgIiAiICsgLXJ4ICsgIiwwIiArICJaIjsK
LSAgICB9LAotICAgIHNxdWFyZTogZnVuY3Rpb24oc2l6ZSkgewotICAgICAgdmFyIHIgPSBNYXRo
LnNxcnQoc2l6ZSkgLyAyOwotICAgICAgcmV0dXJuICJNIiArIC1yICsgIiwiICsgLXIgKyAiTCIg
KyByICsgIiwiICsgLXIgKyAiICIgKyByICsgIiwiICsgciArICIgIiArIC1yICsgIiwiICsgciAr
ICJaIjsKLSAgICB9LAotICAgICJ0cmlhbmdsZS1kb3duIjogZnVuY3Rpb24oc2l6ZSkgewotICAg
ICAgdmFyIHJ4ID0gTWF0aC5zcXJ0KHNpemUgLyBkM19zdmdfc3ltYm9sU3FydDMpLCByeSA9IHJ4
ICogZDNfc3ZnX3N5bWJvbFNxcnQzIC8gMjsKLSAgICAgIHJldHVybiAiTTAsIiArIHJ5ICsgIkwi
ICsgcnggKyAiLCIgKyAtcnkgKyAiICIgKyAtcnggKyAiLCIgKyAtcnkgKyAiWiI7Ci0gICAgfSwK
LSAgICAidHJpYW5nbGUtdXAiOiBmdW5jdGlvbihzaXplKSB7Ci0gICAgICB2YXIgcnggPSBNYXRo
LnNxcnQoc2l6ZSAvIGQzX3N2Z19zeW1ib2xTcXJ0MyksIHJ5ID0gcnggKiBkM19zdmdfc3ltYm9s
U3FydDMgLyAyOwotICAgICAgcmV0dXJuICJNMCwiICsgLXJ5ICsgIkwiICsgcnggKyAiLCIgKyBy
eSArICIgIiArIC1yeCArICIsIiArIHJ5ICsgIloiOwotICAgIH0KLSAgfSk7Ci0gIGQzLnN2Zy5z
eW1ib2xUeXBlcyA9IGQzX3N2Z19zeW1ib2xzLmtleXMoKTsKLSAgdmFyIGQzX3N2Z19zeW1ib2xT
cXJ0MyA9IE1hdGguc3FydCgzKSwgZDNfc3ZnX3N5bWJvbFRhbjMwID0gTWF0aC50YW4oMzAgKiBk
M19yYWRpYW5zKTsKLSAgZnVuY3Rpb24gZDNfdHJhbnNpdGlvbihncm91cHMsIGlkKSB7Ci0gICAg
ZDNfc3ViY2xhc3MoZ3JvdXBzLCBkM190cmFuc2l0aW9uUHJvdG90eXBlKTsKLSAgICBncm91cHMu
aWQgPSBpZDsKLSAgICByZXR1cm4gZ3JvdXBzOwotICB9Ci0gIHZhciBkM190cmFuc2l0aW9uUHJv
dG90eXBlID0gW10sIGQzX3RyYW5zaXRpb25JZCA9IDAsIGQzX3RyYW5zaXRpb25Jbmhlcml0SWQs
IGQzX3RyYW5zaXRpb25Jbmhlcml0OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLmNhbGwgPSBk
M19zZWxlY3Rpb25Qcm90b3R5cGUuY2FsbDsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lbXB0
eSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5lbXB0eTsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlw
ZS5ub2RlID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLm5vZGU7Ci0gIGQzX3RyYW5zaXRpb25Qcm90
b3R5cGUuc2l6ZSA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5zaXplOwotICBkMy50cmFuc2l0aW9u
ID0gZnVuY3Rpb24oc2VsZWN0aW9uKSB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBk
M190cmFuc2l0aW9uSW5oZXJpdElkID8gc2VsZWN0aW9uLnRyYW5zaXRpb24oKSA6IHNlbGVjdGlv
biA6IGQzX3NlbGVjdGlvblJvb3QudHJhbnNpdGlvbigpOwotICB9OwotICBkMy50cmFuc2l0aW9u
LnByb3RvdHlwZSA9IGQzX3RyYW5zaXRpb25Qcm90b3R5cGU7Ci0gIGQzX3RyYW5zaXRpb25Qcm90
b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKLSAgICB2YXIgaWQgPSB0aGlzLmlk
LCBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIHN1Ym5vZGUsIG5vZGU7Ci0gICAgc2VsZWN0b3Ig
PSBkM19zZWxlY3Rpb25fc2VsZWN0b3Ioc2VsZWN0b3IpOwotICAgIGZvciAodmFyIGogPSAtMSwg
bSA9IHRoaXMubGVuZ3RoOyArK2ogPCBtOyApIHsKLSAgICAgIHN1Ymdyb3Vwcy5wdXNoKHN1Ymdy
b3VwID0gW10pOwotICAgICAgZm9yICh2YXIgZ3JvdXAgPSB0aGlzW2pdLCBpID0gLTEsIG4gPSBn
cm91cC5sZW5ndGg7ICsraSA8IG47ICkgewotICAgICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkg
JiYgKHN1Ym5vZGUgPSBzZWxlY3Rvci5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGopKSkg
ewotICAgICAgICAgIGlmICgiX19kYXRhX18iIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBu
b2RlLl9fZGF0YV9fOwotICAgICAgICAgIGQzX3RyYW5zaXRpb25Ob2RlKHN1Ym5vZGUsIGksIGlk
LCBub2RlLl9fdHJhbnNpdGlvbl9fW2lkXSk7Ci0gICAgICAgICAgc3ViZ3JvdXAucHVzaChzdWJu
b2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdWJncm91cC5wdXNoKG51bGwpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBkM190cmFuc2l0aW9uKHN1Ymdy
b3VwcywgaWQpOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLnNlbGVjdEFsbCA9IGZ1
bmN0aW9uKHNlbGVjdG9yKSB7Ci0gICAgdmFyIGlkID0gdGhpcy5pZCwgc3ViZ3JvdXBzID0gW10s
IHN1Ymdyb3VwLCBzdWJub2Rlcywgbm9kZSwgc3Vibm9kZSwgdHJhbnNpdGlvbjsKLSAgICBzZWxl
Y3RvciA9IGQzX3NlbGVjdGlvbl9zZWxlY3RvckFsbChzZWxlY3Rvcik7Ci0gICAgZm9yICh2YXIg
aiA9IC0xLCBtID0gdGhpcy5sZW5ndGg7ICsraiA8IG07ICkgewotICAgICAgZm9yICh2YXIgZ3Jv
dXAgPSB0aGlzW2pdLCBpID0gLTEsIG4gPSBncm91cC5sZW5ndGg7ICsraSA8IG47ICkgewotICAg
ICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7Ci0gICAgICAgICAgdHJhbnNpdGlvbiA9IG5vZGUu
X190cmFuc2l0aW9uX19baWRdOwotICAgICAgICAgIHN1Ym5vZGVzID0gc2VsZWN0b3IuY2FsbChu
b2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKTsKLSAgICAgICAgICBzdWJncm91cHMucHVzaChzdWJn
cm91cCA9IFtdKTsKLSAgICAgICAgICBmb3IgKHZhciBrID0gLTEsIG8gPSBzdWJub2Rlcy5sZW5n
dGg7ICsrayA8IG87ICkgewotICAgICAgICAgICAgaWYgKHN1Ym5vZGUgPSBzdWJub2Rlc1trXSkg
ZDNfdHJhbnNpdGlvbk5vZGUoc3Vibm9kZSwgaywgaWQsIHRyYW5zaXRpb24pOwotICAgICAgICAg
ICAgc3ViZ3JvdXAucHVzaChzdWJub2RlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLCBpZCk7Ci0gIH07
Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKSB7Ci0g
ICAgdmFyIHN1Ymdyb3VwcyA9IFtdLCBzdWJncm91cCwgZ3JvdXAsIG5vZGU7Ci0gICAgaWYgKHR5
cGVvZiBmaWx0ZXIgIT09ICJmdW5jdGlvbiIpIGZpbHRlciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIo
ZmlsdGVyKTsKLSAgICBmb3IgKHZhciBqID0gMCwgbSA9IHRoaXMubGVuZ3RoOyBqIDwgbTsgaisr
KSB7Ci0gICAgICBzdWJncm91cHMucHVzaChzdWJncm91cCA9IFtdKTsKLSAgICAgIGZvciAodmFy
IGdyb3VwID0gdGhpc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyBpKyspIHsK
LSAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIGZpbHRlci5jYWxsKG5vZGUsIG5vZGUu
X19kYXRhX18sIGksIGopKSB7Ci0gICAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZDNfdHJhbnNpdGlvbihzdWJncm91cHMs
IHRoaXMuaWQpOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLnR3ZWVuID0gZnVuY3Rp
b24obmFtZSwgdHdlZW4pIHsKLSAgICB2YXIgaWQgPSB0aGlzLmlkOwotICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoIDwgMikgcmV0dXJuIHRoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW2lkXS50d2Vl
bi5nZXQobmFtZSk7Ci0gICAgcmV0dXJuIGQzX3NlbGVjdGlvbl9lYWNoKHRoaXMsIHR3ZWVuID09
IG51bGwgPyBmdW5jdGlvbihub2RlKSB7Ci0gICAgICBub2RlLl9fdHJhbnNpdGlvbl9fW2lkXS50
d2Vlbi5yZW1vdmUobmFtZSk7Ci0gICAgfSA6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgIG5vZGUu
X190cmFuc2l0aW9uX19baWRdLnR3ZWVuLnNldChuYW1lLCB0d2Vlbik7Ci0gICAgfSk7Ci0gIH07
Ci0gIGZ1bmN0aW9uIGQzX3RyYW5zaXRpb25fdHdlZW4oZ3JvdXBzLCBuYW1lLCB2YWx1ZSwgdHdl
ZW4pIHsKLSAgICB2YXIgaWQgPSBncm91cHMuaWQ7Ci0gICAgcmV0dXJuIGQzX3NlbGVjdGlvbl9l
YWNoKGdyb3VwcywgdHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iID8gZnVuY3Rpb24obm9kZSwg
aSwgaikgewotICAgICAgbm9kZS5fX3RyYW5zaXRpb25fX1tpZF0udHdlZW4uc2V0KG5hbWUsIHR3
ZWVuKHZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgaikpKTsKLSAgICB9IDogKHZh
bHVlID0gdHdlZW4odmFsdWUpLCBmdW5jdGlvbihub2RlKSB7Ci0gICAgICBub2RlLl9fdHJhbnNp
dGlvbl9fW2lkXS50d2Vlbi5zZXQobmFtZSwgdmFsdWUpOwotICAgIH0pKTsKLSAgfQotICBkM190
cmFuc2l0aW9uUHJvdG90eXBlLmF0dHIgPSBmdW5jdGlvbihuYW1lTlMsIHZhbHVlKSB7Ci0gICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7Ci0gICAgICBmb3IgKHZhbHVlIGluIG5hbWVOUykg
dGhpcy5hdHRyKHZhbHVlLCBuYW1lTlNbdmFsdWVdKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAg
IH0KLSAgICB2YXIgaW50ZXJwb2xhdGUgPSBuYW1lTlMgPT0gInRyYW5zZm9ybSIgPyBkM19pbnRl
cnBvbGF0ZVRyYW5zZm9ybSA6IGQzX2ludGVycG9sYXRlLCBuYW1lID0gZDMubnMucXVhbGlmeShu
YW1lTlMpOwotICAgIGZ1bmN0aW9uIGF0dHJOdWxsKCkgewotICAgICAgdGhpcy5yZW1vdmVBdHRy
aWJ1dGUobmFtZSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGF0dHJOdWxsTlMoKSB7Ci0gICAgICB0
aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwpOwotICAgIH0KLSAg
ICBmdW5jdGlvbiBhdHRyVHdlZW4oYikgewotICAgICAgcmV0dXJuIGIgPT0gbnVsbCA/IGF0dHJO
dWxsIDogKGIgKz0gIiIsIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgYSA9IHRoaXMuZ2V0QXR0
cmlidXRlKG5hbWUpLCBpOwotICAgICAgICByZXR1cm4gYSAhPT0gYiAmJiAoaSA9IGludGVycG9s
YXRlKGEsIGIpLCBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFt
ZSwgaSh0KSk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGF0
dHJUd2Vlbk5TKGIpIHsKLSAgICAgIHJldHVybiBiID09IG51bGwgPyBhdHRyTnVsbE5TIDogKGIg
Kz0gIiIsIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgYSA9IHRoaXMuZ2V0QXR0cmlidXRlTlMo
bmFtZS5zcGFjZSwgbmFtZS5sb2NhbCksIGk7Ci0gICAgICAgIHJldHVybiBhICE9PSBiICYmIChp
ID0gaW50ZXJwb2xhdGUoYSwgYiksIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICB0aGlzLnNldEF0
dHJpYnV0ZU5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwsIGkodCkpOwotICAgICAgICB9KTsKLSAg
ICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gZDNfdHJhbnNpdGlvbl90d2Vlbih0aGlzLCAiYXR0
ci4iICsgbmFtZU5TLCB2YWx1ZSwgbmFtZS5sb2NhbCA/IGF0dHJUd2Vlbk5TIDogYXR0clR3ZWVu
KTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5hdHRyVHdlZW4gPSBmdW5jdGlvbihu
YW1lTlMsIHR3ZWVuKSB7Ci0gICAgdmFyIG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWVOUyk7Ci0g
ICAgZnVuY3Rpb24gYXR0clR3ZWVuKGQsIGkpIHsKLSAgICAgIHZhciBmID0gdHdlZW4uY2FsbCh0
aGlzLCBkLCBpLCB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKSk7Ci0gICAgICByZXR1cm4gZiAmJiBm
dW5jdGlvbih0KSB7Ci0gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGYodCkpOwotICAg
ICAgfTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gYXR0clR3ZWVuTlMoZCwgaSkgewotICAgICAgdmFy
IGYgPSB0d2Vlbi5jYWxsKHRoaXMsIGQsIGksIHRoaXMuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFj
ZSwgbmFtZS5sb2NhbCkpOwotICAgICAgcmV0dXJuIGYgJiYgZnVuY3Rpb24odCkgewotICAgICAg
ICB0aGlzLnNldEF0dHJpYnV0ZU5TKG5hbWUuc3BhY2UsIG5hbWUubG9jYWwsIGYodCkpOwotICAg
ICAgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIiArIG5hbWVOUywgbmFt
ZS5sb2NhbCA/IGF0dHJUd2Vlbk5TIDogYXR0clR3ZWVuKTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlv
blByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkgewotICAg
IHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICBpZiAobiA8IDMpIHsKLSAgICAgIGlmICh0
eXBlb2YgbmFtZSAhPT0gInN0cmluZyIpIHsKLSAgICAgICAgaWYgKG4gPCAyKSB2YWx1ZSA9ICIi
OwotICAgICAgICBmb3IgKHByaW9yaXR5IGluIG5hbWUpIHRoaXMuc3R5bGUocHJpb3JpdHksIG5h
bWVbcHJpb3JpdHldLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAg
ICAgcHJpb3JpdHkgPSAiIjsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc3R5bGVOdWxsKCkgewotICAg
ICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
c3R5bGVTdHJpbmcoYikgewotICAgICAgcmV0dXJuIGIgPT0gbnVsbCA/IHN0eWxlTnVsbCA6IChi
ICs9ICIiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGEgPSBkM193aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZSh0aGlzLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLCBpOwotICAgICAgICBy
ZXR1cm4gYSAhPT0gYiAmJiAoaSA9IGQzX2ludGVycG9sYXRlKGEsIGIpLCBmdW5jdGlvbih0KSB7
Ci0gICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpKHQpLCBwcmlvcml0eSk7
Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgfQotICAgIHJldHVybiBkM190cmFuc2l0aW9u
X3R3ZWVuKHRoaXMsICJzdHlsZS4iICsgbmFtZSwgdmFsdWUsIHN0eWxlU3RyaW5nKTsKLSAgfTsK
LSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5zdHlsZVR3ZWVuID0gZnVuY3Rpb24obmFtZSwgdHdl
ZW4sIHByaW9yaXR5KSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBwcmlvcml0eSA9
ICIiOwotICAgIGZ1bmN0aW9uIHN0eWxlVHdlZW4oZCwgaSkgewotICAgICAgdmFyIGYgPSB0d2Vl
bi5jYWxsKHRoaXMsIGQsIGksIGQzX3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwp
LmdldFByb3BlcnR5VmFsdWUobmFtZSkpOwotICAgICAgcmV0dXJuIGYgJiYgZnVuY3Rpb24odCkg
ewotICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGYodCksIHByaW9yaXR5KTsK
LSAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiB0aGlzLnR3ZWVuKCJzdHlsZS4iICsgbmFtZSwg
c3R5bGVUd2Vlbik7Ci0gIH07Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUudGV4dCA9IGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIGQzX3RyYW5zaXRpb25fdHdlZW4odGhpcywgInRleHQi
LCB2YWx1ZSwgZDNfdHJhbnNpdGlvbl90ZXh0KTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfdHJhbnNp
dGlvbl90ZXh0KGIpIHsKLSAgICBpZiAoYiA9PSBudWxsKSBiID0gIiI7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKCkgewotICAgICAgdGhpcy50ZXh0Q29udGVudCA9IGI7Ci0gICAgfTsKLSAgfQotICBk
M190cmFuc2l0aW9uUHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0
aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIiwgZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgcDsKLSAg
ICAgIGlmICh0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50IDwgMiAmJiAocCA9IHRoaXMucGFyZW50
Tm9kZSkpIHAucmVtb3ZlQ2hpbGQodGhpcyk7Ci0gICAgfSk7Ci0gIH07Ci0gIGQzX3RyYW5zaXRp
b25Qcm90b3R5cGUuZWFzZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdmFyIGlkID0gdGhpcy5p
ZDsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiB0aGlzLm5vZGUoKS5fX3Ry
YW5zaXRpb25fX1tpZF0uZWFzZTsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24i
KSB2YWx1ZSA9IGQzLmVhc2UuYXBwbHkoZDMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGQzX3Nl
bGVjdGlvbl9lYWNoKHRoaXMsIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgIG5vZGUuX190cmFuc2l0
aW9uX19baWRdLmVhc2UgPSB2YWx1ZTsKLSAgICB9KTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlvblBy
b3RvdHlwZS5kZWxheSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdmFyIGlkID0gdGhpcy5pZDsK
LSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiB0aGlzLm5vZGUoKS5fX3RyYW5z
aXRpb25fX1tpZF0uZGVsYXk7Ci0gICAgcmV0dXJuIGQzX3NlbGVjdGlvbl9lYWNoKHRoaXMsIHR5
cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIiA/IGZ1bmN0aW9uKG5vZGUsIGksIGopIHsKLSAgICAg
IG5vZGUuX190cmFuc2l0aW9uX19baWRdLmRlbGF5ID0gK3ZhbHVlLmNhbGwobm9kZSwgbm9kZS5f
X2RhdGFfXywgaSwgaik7Ci0gICAgfSA6ICh2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24obm9kZSkg
ewotICAgICAgbm9kZS5fX3RyYW5zaXRpb25fX1tpZF0uZGVsYXkgPSB2YWx1ZTsKLSAgICB9KSk7
Ci0gIH07Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUuZHVyYXRpb24gPSBmdW5jdGlvbih2YWx1
ZSkgewotICAgIHZhciBpZCA9IHRoaXMuaWQ7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAx
KSByZXR1cm4gdGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19baWRdLmR1cmF0aW9uOwotICAgIHJl
dHVybiBkM19zZWxlY3Rpb25fZWFjaCh0aGlzLCB0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIg
PyBmdW5jdGlvbihub2RlLCBpLCBqKSB7Ci0gICAgICBub2RlLl9fdHJhbnNpdGlvbl9fW2lkXS5k
dXJhdGlvbiA9IE1hdGgubWF4KDEsIHZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwg
aikpOwotICAgIH0gOiAodmFsdWUgPSBNYXRoLm1heCgxLCB2YWx1ZSksIGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgIG5vZGUuX190cmFuc2l0aW9uX19baWRdLmR1cmF0aW9uID0gdmFsdWU7Ci0gICAg
fSkpOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLmVhY2ggPSBmdW5jdGlvbih0eXBl
LCBsaXN0ZW5lcikgewotICAgIHZhciBpZCA9IHRoaXMuaWQ7Ci0gICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPCAyKSB7Ci0gICAgICB2YXIgaW5oZXJpdCA9IGQzX3RyYW5zaXRpb25Jbmhlcml0LCBp
bmhlcml0SWQgPSBkM190cmFuc2l0aW9uSW5oZXJpdElkOwotICAgICAgZDNfdHJhbnNpdGlvbklu
aGVyaXRJZCA9IGlkOwotICAgICAgZDNfc2VsZWN0aW9uX2VhY2godGhpcywgZnVuY3Rpb24obm9k
ZSwgaSwgaikgewotICAgICAgICBkM190cmFuc2l0aW9uSW5oZXJpdCA9IG5vZGUuX190cmFuc2l0
aW9uX19baWRdOwotICAgICAgICB0eXBlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgaik7
Ci0gICAgICB9KTsKLSAgICAgIGQzX3RyYW5zaXRpb25Jbmhlcml0ID0gaW5oZXJpdDsKLSAgICAg
IGQzX3RyYW5zaXRpb25Jbmhlcml0SWQgPSBpbmhlcml0SWQ7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGQzX3NlbGVjdGlvbl9lYWNoKHRoaXMsIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIHRy
YW5zaXRpb24gPSBub2RlLl9fdHJhbnNpdGlvbl9fW2lkXTsKLSAgICAgICAgKHRyYW5zaXRpb24u
ZXZlbnQgfHwgKHRyYW5zaXRpb24uZXZlbnQgPSBkMy5kaXNwYXRjaCgic3RhcnQiLCAiZW5kIikp
KS5vbih0eXBlLCBsaXN0ZW5lcik7Ci0gICAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7
Ci0gIH07Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUudHJhbnNpdGlvbiA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciBpZDAgPSB0aGlzLmlkLCBpZDEgPSArK2QzX3RyYW5zaXRpb25JZCwgc3ViZ3Jv
dXBzID0gW10sIHN1Ymdyb3VwLCBncm91cCwgbm9kZSwgdHJhbnNpdGlvbjsKLSAgICBmb3IgKHZh
ciBqID0gMCwgbSA9IHRoaXMubGVuZ3RoOyBqIDwgbTsgaisrKSB7Ci0gICAgICBzdWJncm91cHMu
cHVzaChzdWJncm91cCA9IFtdKTsKLSAgICAgIGZvciAodmFyIGdyb3VwID0gdGhpc1tqXSwgaSA9
IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgaWYgKG5vZGUgPSBn
cm91cFtpXSkgewotICAgICAgICAgIHRyYW5zaXRpb24gPSBPYmplY3QuY3JlYXRlKG5vZGUuX190
cmFuc2l0aW9uX19baWQwXSk7Ci0gICAgICAgICAgdHJhbnNpdGlvbi5kZWxheSArPSB0cmFuc2l0
aW9uLmR1cmF0aW9uOwotICAgICAgICAgIGQzX3RyYW5zaXRpb25Ob2RlKG5vZGUsIGksIGlkMSwg
dHJhbnNpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLCBpZDEpOwot
ICB9OwotICBmdW5jdGlvbiBkM190cmFuc2l0aW9uTm9kZShub2RlLCBpLCBpZCwgaW5oZXJpdCkg
ewotICAgIHZhciBsb2NrID0gbm9kZS5fX3RyYW5zaXRpb25fXyB8fCAobm9kZS5fX3RyYW5zaXRp
b25fXyA9IHsKLSAgICAgIGFjdGl2ZTogMCwKLSAgICAgIGNvdW50OiAwCi0gICAgfSksIHRyYW5z
aXRpb24gPSBsb2NrW2lkXTsKLSAgICBpZiAoIXRyYW5zaXRpb24pIHsKLSAgICAgIHZhciB0aW1l
ID0gaW5oZXJpdC50aW1lOwotICAgICAgdHJhbnNpdGlvbiA9IGxvY2tbaWRdID0gewotICAgICAg
ICB0d2VlbjogbmV3IGQzX01hcCgpLAotICAgICAgICB0aW1lOiB0aW1lLAotICAgICAgICBlYXNl
OiBpbmhlcml0LmVhc2UsCi0gICAgICAgIGRlbGF5OiBpbmhlcml0LmRlbGF5LAotICAgICAgICBk
dXJhdGlvbjogaW5oZXJpdC5kdXJhdGlvbgotICAgICAgfTsKLSAgICAgICsrbG9jay5jb3VudDsK
LSAgICAgIGQzLnRpbWVyKGZ1bmN0aW9uKGVsYXBzZWQpIHsKLSAgICAgICAgdmFyIGQgPSBub2Rl
Ll9fZGF0YV9fLCBlYXNlID0gdHJhbnNpdGlvbi5lYXNlLCBkZWxheSA9IHRyYW5zaXRpb24uZGVs
YXksIGR1cmF0aW9uID0gdHJhbnNpdGlvbi5kdXJhdGlvbiwgdGltZXIgPSBkM190aW1lcl9hY3Rp
dmUsIHR3ZWVuZWQgPSBbXTsKLSAgICAgICAgdGltZXIudCA9IGRlbGF5ICsgdGltZTsKLSAgICAg
ICAgaWYgKGRlbGF5IDw9IGVsYXBzZWQpIHJldHVybiBzdGFydChlbGFwc2VkIC0gZGVsYXkpOwot
ICAgICAgICB0aW1lci5jID0gc3RhcnQ7Ci0gICAgICAgIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQp
IHsKLSAgICAgICAgICBpZiAobG9jay5hY3RpdmUgPiBpZCkgcmV0dXJuIHN0b3AoKTsKLSAgICAg
ICAgICBsb2NrLmFjdGl2ZSA9IGlkOwotICAgICAgICAgIHRyYW5zaXRpb24uZXZlbnQgJiYgdHJh
bnNpdGlvbi5ldmVudC5zdGFydC5jYWxsKG5vZGUsIGQsIGkpOwotICAgICAgICAgIHRyYW5zaXRp
b24udHdlZW4uZm9yRWFjaChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgPSB2YWx1ZS5jYWxsKG5vZGUsIGQsIGkpKSB7Ci0gICAgICAgICAgICAgIHR3ZWVuZWQu
cHVzaCh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgZDMu
dGltZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aW1lci5jID0gdGljayhlbGFwc2VkIHx8
IDEpID8gZDNfdHJ1ZSA6IHRpY2s7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICB9
LCAwLCB0aW1lKTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHsK
LSAgICAgICAgICBpZiAobG9jay5hY3RpdmUgIT09IGlkKSByZXR1cm4gc3RvcCgpOwotICAgICAg
ICAgIHZhciB0ID0gZWxhcHNlZCAvIGR1cmF0aW9uLCBlID0gZWFzZSh0KSwgbiA9IHR3ZWVuZWQu
bGVuZ3RoOwotICAgICAgICAgIHdoaWxlIChuID4gMCkgewotICAgICAgICAgICAgdHdlZW5lZFst
LW5dLmNhbGwobm9kZSwgZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0ID49IDEpIHsK
LSAgICAgICAgICAgIHRyYW5zaXRpb24uZXZlbnQgJiYgdHJhbnNpdGlvbi5ldmVudC5lbmQuY2Fs
bChub2RlLCBkLCBpKTsKLSAgICAgICAgICAgIHJldHVybiBzdG9wKCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHN0b3AoKSB7Ci0gICAgICAgICAgaWYgKC0tbG9j
ay5jb3VudCkgZGVsZXRlIGxvY2tbaWRdOyBlbHNlIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbl9f
OwotICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICB9LCAwLCB0aW1lKTsKLSAg
ICB9Ci0gIH0KLSAgZDMuc3ZnLmF4aXMgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgc2NhbGUgPSBk
My5zY2FsZS5saW5lYXIoKSwgb3JpZW50ID0gZDNfc3ZnX2F4aXNEZWZhdWx0T3JpZW50LCBpbm5l
clRpY2tTaXplID0gNiwgb3V0ZXJUaWNrU2l6ZSA9IDYsIHRpY2tQYWRkaW5nID0gMywgdGlja0Fy
Z3VtZW50c18gPSBbIDEwIF0sIHRpY2tWYWx1ZXMgPSBudWxsLCB0aWNrRm9ybWF0XzsKLSAgICBm
dW5jdGlvbiBheGlzKGcpIHsKLSAgICAgIGcuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IGcgPSBkMy5zZWxlY3QodGhpcyk7Ci0gICAgICAgIHZhciBzY2FsZTAgPSB0aGlzLl9fY2hhcnRf
XyB8fCBzY2FsZSwgc2NhbGUxID0gdGhpcy5fX2NoYXJ0X18gPSBzY2FsZS5jb3B5KCk7Ci0gICAg
ICAgIHZhciB0aWNrcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IHNjYWxlMS50aWNrcyA/IHNjYWxl
MS50aWNrcy5hcHBseShzY2FsZTEsIHRpY2tBcmd1bWVudHNfKSA6IHNjYWxlMS5kb21haW4oKSA6
IHRpY2tWYWx1ZXMsIHRpY2tGb3JtYXQgPSB0aWNrRm9ybWF0XyA9PSBudWxsID8gc2NhbGUxLnRp
Y2tGb3JtYXQgPyBzY2FsZTEudGlja0Zvcm1hdC5hcHBseShzY2FsZTEsIHRpY2tBcmd1bWVudHNf
KSA6IGQzX2lkZW50aXR5IDogdGlja0Zvcm1hdF8sIHRpY2sgPSBnLnNlbGVjdEFsbCgiLnRpY2si
KS5kYXRhKHRpY2tzLCBzY2FsZTEpLCB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuaW5zZXJ0KCJn
IiwgIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsICJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLCDOtSks
IHRpY2tFeGl0ID0gZDMudHJhbnNpdGlvbih0aWNrLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLCDO
tSkucmVtb3ZlKCksIHRpY2tVcGRhdGUgPSBkMy50cmFuc2l0aW9uKHRpY2sub3JkZXIoKSkuc3R5
bGUoIm9wYWNpdHkiLCAxKSwgdGlja1RyYW5zZm9ybTsKLSAgICAgICAgdmFyIHJhbmdlID0gZDNf
c2NhbGVSYW5nZShzY2FsZTEpLCBwYXRoID0gZy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFsg
MCBdKSwgcGF0aFVwZGF0ZSA9IChwYXRoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xh
c3MiLCAiZG9tYWluIiksIAotICAgICAgICBkMy50cmFuc2l0aW9uKHBhdGgpKTsKLSAgICAgICAg
dGlja0VudGVyLmFwcGVuZCgibGluZSIpOwotICAgICAgICB0aWNrRW50ZXIuYXBwZW5kKCJ0ZXh0
Iik7Ci0gICAgICAgIHZhciBsaW5lRW50ZXIgPSB0aWNrRW50ZXIuc2VsZWN0KCJsaW5lIiksIGxp
bmVVcGRhdGUgPSB0aWNrVXBkYXRlLnNlbGVjdCgibGluZSIpLCB0ZXh0ID0gdGljay5zZWxlY3Qo
InRleHQiKS50ZXh0KHRpY2tGb3JtYXQpLCB0ZXh0RW50ZXIgPSB0aWNrRW50ZXIuc2VsZWN0KCJ0
ZXh0IiksIHRleHRVcGRhdGUgPSB0aWNrVXBkYXRlLnNlbGVjdCgidGV4dCIpOwotICAgICAgICBz
d2l0Y2ggKG9yaWVudCkgewotICAgICAgICAgY2FzZSAiYm90dG9tIjoKLSAgICAgICAgICB7Ci0g
ICAgICAgICAgICB0aWNrVHJhbnNmb3JtID0gZDNfc3ZnX2F4aXNYOwotICAgICAgICAgICAgbGlu
ZUVudGVyLmF0dHIoInkyIiwgaW5uZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICB0ZXh0RW50ZXIu
YXR0cigieSIsIE1hdGgubWF4KGlubmVyVGlja1NpemUsIDApICsgdGlja1BhZGRpbmcpOwotICAg
ICAgICAgICAgbGluZVVwZGF0ZS5hdHRyKCJ4MiIsIDApLmF0dHIoInkyIiwgaW5uZXJUaWNrU2l6
ZSk7Ci0gICAgICAgICAgICB0ZXh0VXBkYXRlLmF0dHIoIngiLCAwKS5hdHRyKCJ5IiwgTWF0aC5t
YXgoaW5uZXJUaWNrU2l6ZSwgMCkgKyB0aWNrUGFkZGluZyk7Ci0gICAgICAgICAgICB0ZXh0LmF0
dHIoImR5IiwgIi43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwgIm1pZGRsZSIpOwotICAgICAg
ICAgICAgcGF0aFVwZGF0ZS5hdHRyKCJkIiwgIk0iICsgcmFuZ2VbMF0gKyAiLCIgKyBvdXRlclRp
Y2tTaXplICsgIlYwSCIgKyByYW5nZVsxXSArICJWIiArIG91dGVyVGlja1NpemUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICBjYXNlICJ0b3AiOgotICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHRpY2tUcmFuc2Zvcm0gPSBkM19zdmdfYXhpc1g7Ci0gICAgICAg
ICAgICBsaW5lRW50ZXIuYXR0cigieTIiLCAtaW5uZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICB0
ZXh0RW50ZXIuYXR0cigieSIsIC0oTWF0aC5tYXgoaW5uZXJUaWNrU2l6ZSwgMCkgKyB0aWNrUGFk
ZGluZykpOwotICAgICAgICAgICAgbGluZVVwZGF0ZS5hdHRyKCJ4MiIsIDApLmF0dHIoInkyIiwg
LWlubmVyVGlja1NpemUpOwotICAgICAgICAgICAgdGV4dFVwZGF0ZS5hdHRyKCJ4IiwgMCkuYXR0
cigieSIsIC0oTWF0aC5tYXgoaW5uZXJUaWNrU2l6ZSwgMCkgKyB0aWNrUGFkZGluZykpOwotICAg
ICAgICAgICAgdGV4dC5hdHRyKCJkeSIsICIwZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCAibWlk
ZGxlIik7Ci0gICAgICAgICAgICBwYXRoVXBkYXRlLmF0dHIoImQiLCAiTSIgKyByYW5nZVswXSAr
ICIsIiArIC1vdXRlclRpY2tTaXplICsgIlYwSCIgKyByYW5nZVsxXSArICJWIiArIC1vdXRlclRp
Y2tTaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgY2Fz
ZSAibGVmdCI6Ci0gICAgICAgICAgewotICAgICAgICAgICAgdGlja1RyYW5zZm9ybSA9IGQzX3N2
Z19heGlzWTsKLSAgICAgICAgICAgIGxpbmVFbnRlci5hdHRyKCJ4MiIsIC1pbm5lclRpY2tTaXpl
KTsKLSAgICAgICAgICAgIHRleHRFbnRlci5hdHRyKCJ4IiwgLShNYXRoLm1heChpbm5lclRpY2tT
aXplLCAwKSArIHRpY2tQYWRkaW5nKSk7Ci0gICAgICAgICAgICBsaW5lVXBkYXRlLmF0dHIoIngy
IiwgLWlubmVyVGlja1NpemUpLmF0dHIoInkyIiwgMCk7Ci0gICAgICAgICAgICB0ZXh0VXBkYXRl
LmF0dHIoIngiLCAtKE1hdGgubWF4KGlubmVyVGlja1NpemUsIDApICsgdGlja1BhZGRpbmcpKS5h
dHRyKCJ5IiwgMCk7Ci0gICAgICAgICAgICB0ZXh0LmF0dHIoImR5IiwgIi4zMmVtIikuc3R5bGUo
InRleHQtYW5jaG9yIiwgImVuZCIpOwotICAgICAgICAgICAgcGF0aFVwZGF0ZS5hdHRyKCJkIiwg
Ik0iICsgLW91dGVyVGlja1NpemUgKyAiLCIgKyByYW5nZVswXSArICJIMFYiICsgcmFuZ2VbMV0g
KyAiSCIgKyAtb3V0ZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
Ci0KLSAgICAgICAgIGNhc2UgInJpZ2h0IjoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB0aWNr
VHJhbnNmb3JtID0gZDNfc3ZnX2F4aXNZOwotICAgICAgICAgICAgbGluZUVudGVyLmF0dHIoIngy
IiwgaW5uZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICB0ZXh0RW50ZXIuYXR0cigieCIsIE1hdGgu
bWF4KGlubmVyVGlja1NpemUsIDApICsgdGlja1BhZGRpbmcpOwotICAgICAgICAgICAgbGluZVVw
ZGF0ZS5hdHRyKCJ4MiIsIGlubmVyVGlja1NpemUpLmF0dHIoInkyIiwgMCk7Ci0gICAgICAgICAg
ICB0ZXh0VXBkYXRlLmF0dHIoIngiLCBNYXRoLm1heChpbm5lclRpY2tTaXplLCAwKSArIHRpY2tQ
YWRkaW5nKS5hdHRyKCJ5IiwgMCk7Ci0gICAgICAgICAgICB0ZXh0LmF0dHIoImR5IiwgIi4zMmVt
Iikuc3R5bGUoInRleHQtYW5jaG9yIiwgInN0YXJ0Iik7Ci0gICAgICAgICAgICBwYXRoVXBkYXRl
LmF0dHIoImQiLCAiTSIgKyBvdXRlclRpY2tTaXplICsgIiwiICsgcmFuZ2VbMF0gKyAiSDBWIiAr
IHJhbmdlWzFdICsgIkgiICsgb3V0ZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNjYWxlMS5yYW5nZUJhbmQpIHsKLSAg
ICAgICAgICB2YXIgeCA9IHNjYWxlMSwgZHggPSB4LnJhbmdlQmFuZCgpIC8gMjsKLSAgICAgICAg
ICBzY2FsZTAgPSBzY2FsZTEgPSBmdW5jdGlvbihkKSB7Ci0gICAgICAgICAgICByZXR1cm4geChk
KSArIGR4OwotICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSBpZiAoc2NhbGUwLnJhbmdlQmFu
ZCkgewotICAgICAgICAgIHNjYWxlMCA9IHNjYWxlMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICB0aWNrRXhpdC5jYWxsKHRpY2tUcmFuc2Zvcm0sIHNjYWxlMSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgdGlja0VudGVyLmNhbGwodGlja1RyYW5zZm9ybSwgc2NhbGUwKTsKLSAgICAgICAgdGlj
a1VwZGF0ZS5jYWxsKHRpY2tUcmFuc2Zvcm0sIHNjYWxlMSk7Ci0gICAgICB9KTsKLSAgICB9Ci0g
ICAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHNjYWxlOwotICAgICAgc2NhbGUgPSB4OwotICAgICAgcmV0dXJuIGF4aXM7Ci0g
ICAgfTsKLSAgICBheGlzLm9yaWVudCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudDsKLSAgICAgIG9yaWVudCA9IHggaW4gZDNfc3ZnX2F4
aXNPcmllbnRzID8geCArICIiIDogZDNfc3ZnX2F4aXNEZWZhdWx0T3JpZW50OwotICAgICAgcmV0
dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aWNrQXJndW1lbnRzXzsKLSAgICAgIHRpY2tB
cmd1bWVudHNfID0gYXJndW1lbnRzOwotICAgICAgcmV0dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBh
eGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiB0aWNrVmFsdWVzOwotICAgICAgdGlja1ZhbHVlcyA9IHg7Ci0gICAgICByZXR1
cm4gYXhpczsKLSAgICB9OwotICAgIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKHgpIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpY2tGb3JtYXRfOwotICAgICAgdGlj
a0Zvcm1hdF8gPSB4OwotICAgICAgcmV0dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBheGlzLnRpY2tT
aXplID0gZnVuY3Rpb24oeCkgewotICAgICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAg
ICAgaWYgKCFuKSByZXR1cm4gaW5uZXJUaWNrU2l6ZTsKLSAgICAgIGlubmVyVGlja1NpemUgPSAr
eDsKLSAgICAgIG91dGVyVGlja1NpemUgPSArYXJndW1lbnRzW24gLSAxXTsKLSAgICAgIHJldHVy
biBheGlzOwotICAgIH07Ci0gICAgYXhpcy5pbm5lclRpY2tTaXplID0gZnVuY3Rpb24oeCkgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaW5uZXJUaWNrU2l6ZTsKLSAgICAg
IGlubmVyVGlja1NpemUgPSAreDsKLSAgICAgIHJldHVybiBheGlzOwotICAgIH07Ci0gICAgYXhp
cy5vdXRlclRpY2tTaXplID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gb3V0ZXJUaWNrU2l6ZTsKLSAgICAgIG91dGVyVGlja1NpemUgPSAreDsKLSAg
ICAgIHJldHVybiBheGlzOwotICAgIH07Ci0gICAgYXhpcy50aWNrUGFkZGluZyA9IGZ1bmN0aW9u
KHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpY2tQYWRkaW5nOwot
ICAgICAgdGlja1BhZGRpbmcgPSAreDsKLSAgICAgIHJldHVybiBheGlzOwotICAgIH07Ci0gICAg
YXhpcy50aWNrU3ViZGl2aWRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aCAmJiBheGlzOwotICAgIH07Ci0gICAgcmV0dXJuIGF4aXM7Ci0gIH07Ci0gIHZhciBk
M19zdmdfYXhpc0RlZmF1bHRPcmllbnQgPSAiYm90dG9tIiwgZDNfc3ZnX2F4aXNPcmllbnRzID0g
ewotICAgIHRvcDogMSwKLSAgICByaWdodDogMSwKLSAgICBib3R0b206IDEsCi0gICAgbGVmdDog
MQotICB9OwotICBmdW5jdGlvbiBkM19zdmdfYXhpc1goc2VsZWN0aW9uLCB4KSB7Ci0gICAgc2Vs
ZWN0aW9uLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsKLSAgICAgIHJldHVybiAidHJh
bnNsYXRlKCIgKyB4KGQpICsgIiwwKSI7Ci0gICAgfSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3Zn
X2F4aXNZKHNlbGVjdGlvbiwgeSkgewotICAgIHNlbGVjdGlvbi5hdHRyKCJ0cmFuc2Zvcm0iLCBm
dW5jdGlvbihkKSB7Ci0gICAgICByZXR1cm4gInRyYW5zbGF0ZSgwLCIgKyB5KGQpICsgIikiOwot
ICAgIH0pOwotICB9Ci0gIGQzLnN2Zy5icnVzaCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBldmVu
dCA9IGQzX2V2ZW50RGlzcGF0Y2goYnJ1c2gsICJicnVzaHN0YXJ0IiwgImJydXNoIiwgImJydXNo
ZW5kIiksIHggPSBudWxsLCB5ID0gbnVsbCwgeEV4dGVudCA9IFsgMCwgMCBdLCB5RXh0ZW50ID0g
WyAwLCAwIF0sIHhFeHRlbnREb21haW4sIHlFeHRlbnREb21haW4sIHhDbGFtcCA9IHRydWUsIHlD
bGFtcCA9IHRydWUsIHJlc2l6ZXMgPSBkM19zdmdfYnJ1c2hSZXNpemVzWzBdOwotICAgIGZ1bmN0
aW9uIGJydXNoKGcpIHsKLSAgICAgIGcuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGcg
PSBkMy5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwgImFsbCIpLnN0eWxlKCIt
d2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCAicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRv
d24uYnJ1c2giLCBicnVzaHN0YXJ0KS5vbigidG91Y2hzdGFydC5icnVzaCIsIGJydXNoc3RhcnQp
OwotICAgICAgICB2YXIgYmFja2dyb3VuZCA9IGcuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRh
dGEoWyAwIF0pOwotICAgICAgICBiYWNrZ3JvdW5kLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0
cigiY2xhc3MiLCAiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpLnN0
eWxlKCJjdXJzb3IiLCAiY3Jvc3NoYWlyIik7Ci0gICAgICAgIGcuc2VsZWN0QWxsKCIuZXh0ZW50
IikuZGF0YShbIDAgXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsICJleHRl
bnQiKS5zdHlsZSgiY3Vyc29yIiwgIm1vdmUiKTsKLSAgICAgICAgdmFyIHJlc2l6ZSA9IGcuc2Vs
ZWN0QWxsKCIucmVzaXplIikuZGF0YShyZXNpemVzLCBkM19pZGVudGl0eSk7Ci0gICAgICAgIHJl
c2l6ZS5leGl0KCkucmVtb3ZlKCk7Ci0gICAgICAgIHJlc2l6ZS5lbnRlcigpLmFwcGVuZCgiZyIp
LmF0dHIoImNsYXNzIiwgZnVuY3Rpb24oZCkgewotICAgICAgICAgIHJldHVybiAicmVzaXplICIg
KyBkOwotICAgICAgICB9KS5zdHlsZSgiY3Vyc29yIiwgZnVuY3Rpb24oZCkgewotICAgICAgICAg
IHJldHVybiBkM19zdmdfYnJ1c2hDdXJzb3JbZF07Ci0gICAgICAgIH0pLmFwcGVuZCgicmVjdCIp
LmF0dHIoIngiLCBmdW5jdGlvbihkKSB7Ci0gICAgICAgICAgcmV0dXJuIC9bZXddJC8udGVzdChk
KSA/IC0zIDogbnVsbDsKLSAgICAgICAgfSkuYXR0cigieSIsIGZ1bmN0aW9uKGQpIHsKLSAgICAg
ICAgICByZXR1cm4gL15bbnNdLy50ZXN0KGQpID8gLTMgOiBudWxsOwotICAgICAgICB9KS5hdHRy
KCJ3aWR0aCIsIDYpLmF0dHIoImhlaWdodCIsIDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwgImhpZGRl
biIpOwotICAgICAgICByZXNpemUuc3R5bGUoImRpc3BsYXkiLCBicnVzaC5lbXB0eSgpID8gIm5v
bmUiIDogbnVsbCk7Ci0gICAgICAgIHZhciBnVXBkYXRlID0gZDMudHJhbnNpdGlvbihnKSwgYmFj
a2dyb3VuZFVwZGF0ZSA9IGQzLnRyYW5zaXRpb24oYmFja2dyb3VuZCksIHJhbmdlOwotICAgICAg
ICBpZiAoeCkgewotICAgICAgICAgIHJhbmdlID0gZDNfc2NhbGVSYW5nZSh4KTsKLSAgICAgICAg
ICBiYWNrZ3JvdW5kVXBkYXRlLmF0dHIoIngiLCByYW5nZVswXSkuYXR0cigid2lkdGgiLCByYW5n
ZVsxXSAtIHJhbmdlWzBdKTsKLSAgICAgICAgICByZWRyYXdYKGdVcGRhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIGlmICh5KSB7Ci0gICAgICAgICAgcmFuZ2UgPSBkM19zY2FsZVJhbmdlKHkpOwot
ICAgICAgICAgIGJhY2tncm91bmRVcGRhdGUuYXR0cigieSIsIHJhbmdlWzBdKS5hdHRyKCJoZWln
aHQiLCByYW5nZVsxXSAtIHJhbmdlWzBdKTsKLSAgICAgICAgICByZWRyYXdZKGdVcGRhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJlZHJhdyhnVXBkYXRlKTsKLSAgICAgIH0pOwotICAgIH0KLSAg
ICBicnVzaC5ldmVudCA9IGZ1bmN0aW9uKGcpIHsKLSAgICAgIGcuZWFjaChmdW5jdGlvbigpIHsK
LSAgICAgICAgdmFyIGV2ZW50XyA9IGV2ZW50Lm9mKHRoaXMsIGFyZ3VtZW50cyksIGV4dGVudDEg
PSB7Ci0gICAgICAgICAgeDogeEV4dGVudCwKLSAgICAgICAgICB5OiB5RXh0ZW50LAotICAgICAg
ICAgIGk6IHhFeHRlbnREb21haW4sCi0gICAgICAgICAgajogeUV4dGVudERvbWFpbgotICAgICAg
ICB9LCBleHRlbnQwID0gdGhpcy5fX2NoYXJ0X18gfHwgZXh0ZW50MTsKLSAgICAgICAgdGhpcy5f
X2NoYXJ0X18gPSBleHRlbnQxOwotICAgICAgICBpZiAoZDNfdHJhbnNpdGlvbkluaGVyaXRJZCkg
ewotICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1
c2giLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHhFeHRlbnREb21haW4gPSBleHRlbnQwLmk7
Ci0gICAgICAgICAgICB5RXh0ZW50RG9tYWluID0gZXh0ZW50MC5qOwotICAgICAgICAgICAgeEV4
dGVudCA9IGV4dGVudDAueDsKLSAgICAgICAgICAgIHlFeHRlbnQgPSBleHRlbnQwLnk7Ci0gICAg
ICAgICAgICBldmVudF8oewotICAgICAgICAgICAgICB0eXBlOiAiYnJ1c2hzdGFydCIKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgIH0pLnR3ZWVuKCJicnVzaDpicnVzaCIsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgdmFyIHhpID0gZDNfaW50ZXJwb2xhdGVBcnJheSh4RXh0ZW50LCBleHRl
bnQxLngpLCB5aSA9IGQzX2ludGVycG9sYXRlQXJyYXkoeUV4dGVudCwgZXh0ZW50MS55KTsKLSAg
ICAgICAgICAgIHhFeHRlbnREb21haW4gPSB5RXh0ZW50RG9tYWluID0gbnVsbDsKLSAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgIHhFeHRlbnQgPSBleHRlbnQx
LnggPSB4aSh0KTsKLSAgICAgICAgICAgICAgeUV4dGVudCA9IGV4dGVudDEueSA9IHlpKHQpOwot
ICAgICAgICAgICAgICBldmVudF8oewotICAgICAgICAgICAgICAgIHR5cGU6ICJicnVzaCIsCi0g
ICAgICAgICAgICAgICAgbW9kZTogInJlc2l6ZSIKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9OwotICAgICAgICAgIH0pLmVhY2goImVuZC5icnVzaCIsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgeEV4dGVudERvbWFpbiA9IGV4dGVudDEuaTsKLSAgICAgICAgICAgIHlFeHRlbnRE
b21haW4gPSBleHRlbnQxLmo7Ci0gICAgICAgICAgICBldmVudF8oewotICAgICAgICAgICAgICB0
eXBlOiAiYnJ1c2giLAotICAgICAgICAgICAgICBtb2RlOiAicmVzaXplIgotICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICBldmVudF8oewotICAgICAgICAgICAgICB0eXBlOiAiYnJ1c2hlbmQi
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBldmVudF8oewotICAgICAgICAgICAgdHlwZTogImJydXNoc3RhcnQiCi0gICAgICAgICAg
fSk7Ci0gICAgICAgICAgZXZlbnRfKHsKLSAgICAgICAgICAgIHR5cGU6ICJicnVzaCIsCi0gICAg
ICAgICAgICBtb2RlOiAicmVzaXplIgotICAgICAgICAgIH0pOwotICAgICAgICAgIGV2ZW50Xyh7
Ci0gICAgICAgICAgICB0eXBlOiAiYnJ1c2hlbmQiCi0gICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgIH0pOwotICAgIH07Ci0gICAgZnVuY3Rpb24gcmVkcmF3KGcpIHsKLSAgICAgIGcuc2Vs
ZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIiwgZnVuY3Rpb24oZCkgewotICAgICAg
ICByZXR1cm4gInRyYW5zbGF0ZSgiICsgeEV4dGVudFsrL2UkLy50ZXN0KGQpXSArICIsIiArIHlF
eHRlbnRbKy9ecy8udGVzdChkKV0gKyAiKSI7Ci0gICAgICB9KTsKLSAgICB9Ci0gICAgZnVuY3Rp
b24gcmVkcmF3WChnKSB7Ci0gICAgICBnLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLCB4RXh0
ZW50WzBdKTsKLSAgICAgIGcuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0
dHIoIndpZHRoIiwgeEV4dGVudFsxXSAtIHhFeHRlbnRbMF0pOwotICAgIH0KLSAgICBmdW5jdGlv
biByZWRyYXdZKGcpIHsKLSAgICAgIGcuc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsIHlFeHRl
bnRbMF0pOwotICAgICAgZy5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0
cigiaGVpZ2h0IiwgeUV4dGVudFsxXSAtIHlFeHRlbnRbMF0pOwotICAgIH0KLSAgICBmdW5jdGlv
biBicnVzaHN0YXJ0KCkgewotICAgICAgdmFyIHRhcmdldCA9IHRoaXMsIGV2ZW50VGFyZ2V0ID0g
ZDMuc2VsZWN0KGQzLmV2ZW50LnRhcmdldCksIGV2ZW50XyA9IGV2ZW50Lm9mKHRhcmdldCwgYXJn
dW1lbnRzKSwgZyA9IGQzLnNlbGVjdCh0YXJnZXQpLCByZXNpemluZyA9IGV2ZW50VGFyZ2V0LmRh
dHVtKCksIHJlc2l6aW5nWCA9ICEvXihufHMpJC8udGVzdChyZXNpemluZykgJiYgeCwgcmVzaXpp
bmdZID0gIS9eKGV8dykkLy50ZXN0KHJlc2l6aW5nKSAmJiB5LCBkcmFnZ2luZyA9IGV2ZW50VGFy
Z2V0LmNsYXNzZWQoImV4dGVudCIpLCBkcmFnUmVzdG9yZSA9IGQzX2V2ZW50X2RyYWdTdXBwcmVz
cygpLCBjZW50ZXIsIG9yaWdpbiA9IGQzLm1vdXNlKHRhcmdldCksIG9mZnNldDsKLSAgICAgIHZh
ciB3ID0gZDMuc2VsZWN0KGQzX3dpbmRvdykub24oImtleWRvd24uYnJ1c2giLCBrZXlkb3duKS5v
bigia2V5dXAuYnJ1c2giLCBrZXl1cCk7Ci0gICAgICBpZiAoZDMuZXZlbnQuY2hhbmdlZFRvdWNo
ZXMpIHsKLSAgICAgICAgdy5vbigidG91Y2htb3ZlLmJydXNoIiwgYnJ1c2htb3ZlKS5vbigidG91
Y2hlbmQuYnJ1c2giLCBicnVzaGVuZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB3Lm9uKCJt
b3VzZW1vdmUuYnJ1c2giLCBicnVzaG1vdmUpLm9uKCJtb3VzZXVwLmJydXNoIiwgYnJ1c2hlbmQp
OwotICAgICAgfQotICAgICAgZy5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQo
KTsKLSAgICAgIGlmIChkcmFnZ2luZykgewotICAgICAgICBvcmlnaW5bMF0gPSB4RXh0ZW50WzBd
IC0gb3JpZ2luWzBdOwotICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50WzBdIC0gb3JpZ2luWzFd
OwotICAgICAgfSBlbHNlIGlmIChyZXNpemluZykgewotICAgICAgICB2YXIgZXggPSArL3ckLy50
ZXN0KHJlc2l6aW5nKSwgZXkgPSArL15uLy50ZXN0KHJlc2l6aW5nKTsKLSAgICAgICAgb2Zmc2V0
ID0gWyB4RXh0ZW50WzEgLSBleF0gLSBvcmlnaW5bMF0sIHlFeHRlbnRbMSAtIGV5XSAtIG9yaWdp
blsxXSBdOwotICAgICAgICBvcmlnaW5bMF0gPSB4RXh0ZW50W2V4XTsKLSAgICAgICAgb3JpZ2lu
WzFdID0geUV4dGVudFtleV07Ci0gICAgICB9IGVsc2UgaWYgKGQzLmV2ZW50LmFsdEtleSkgY2Vu
dGVyID0gb3JpZ2luLnNsaWNlKCk7Ci0gICAgICBnLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsICJu
b25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLCBudWxsKTsKLSAgICAg
IGQzLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLCBldmVudFRhcmdldC5zdHlsZSgiY3Vy
c29yIikpOwotICAgICAgZXZlbnRfKHsKLSAgICAgICAgdHlwZTogImJydXNoc3RhcnQiCi0gICAg
ICB9KTsKLSAgICAgIGJydXNobW92ZSgpOwotICAgICAgZnVuY3Rpb24ga2V5ZG93bigpIHsKLSAg
ICAgICAgaWYgKGQzLmV2ZW50LmtleUNvZGUgPT0gMzIpIHsKLSAgICAgICAgICBpZiAoIWRyYWdn
aW5nKSB7Ci0gICAgICAgICAgICBjZW50ZXIgPSBudWxsOwotICAgICAgICAgICAgb3JpZ2luWzBd
IC09IHhFeHRlbnRbMV07Ci0gICAgICAgICAgICBvcmlnaW5bMV0gLT0geUV4dGVudFsxXTsKLSAg
ICAgICAgICAgIGRyYWdnaW5nID0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZDNfZXZlbnRQ
cmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiBrZXl1
cCgpIHsKLSAgICAgICAgaWYgKGQzLmV2ZW50LmtleUNvZGUgPT0gMzIgJiYgZHJhZ2dpbmcgPT0g
MikgewotICAgICAgICAgIG9yaWdpblswXSArPSB4RXh0ZW50WzFdOwotICAgICAgICAgIG9yaWdp
blsxXSArPSB5RXh0ZW50WzFdOwotICAgICAgICAgIGRyYWdnaW5nID0gMDsKLSAgICAgICAgICBk
M19ldmVudFByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZ1bmN0
aW9uIGJydXNobW92ZSgpIHsKLSAgICAgICAgdmFyIHBvaW50ID0gZDMubW91c2UodGFyZ2V0KSwg
bW92ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG9mZnNldCkgewotICAgICAgICAgIHBvaW50WzBd
ICs9IG9mZnNldFswXTsKLSAgICAgICAgICBwb2ludFsxXSArPSBvZmZzZXRbMV07Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFkcmFnZ2luZykgewotICAgICAgICAgIGlmIChkMy5ldmVudC5hbHRL
ZXkpIHsKLSAgICAgICAgICAgIGlmICghY2VudGVyKSBjZW50ZXIgPSBbICh4RXh0ZW50WzBdICsg
eEV4dGVudFsxXSkgLyAyLCAoeUV4dGVudFswXSArIHlFeHRlbnRbMV0pIC8gMiBdOwotICAgICAg
ICAgICAgb3JpZ2luWzBdID0geEV4dGVudFsrKHBvaW50WzBdIDwgY2VudGVyWzBdKV07Ci0gICAg
ICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50WysocG9pbnRbMV0gPCBjZW50ZXJbMV0pXTsKLSAg
ICAgICAgICB9IGVsc2UgY2VudGVyID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVz
aXppbmdYICYmIG1vdmUxKHBvaW50LCB4LCAwKSkgewotICAgICAgICAgIHJlZHJhd1goZyk7Ci0g
ICAgICAgICAgbW92ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNpemluZ1kg
JiYgbW92ZTEocG9pbnQsIHksIDEpKSB7Ci0gICAgICAgICAgcmVkcmF3WShnKTsKLSAgICAgICAg
ICBtb3ZlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1vdmVkKSB7Ci0gICAgICAg
ICAgcmVkcmF3KGcpOwotICAgICAgICAgIGV2ZW50Xyh7Ci0gICAgICAgICAgICB0eXBlOiAiYnJ1
c2giLAotICAgICAgICAgICAgbW9kZTogZHJhZ2dpbmcgPyAibW92ZSIgOiAicmVzaXplIgotICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiBtb3ZlMShwb2lu
dCwgc2NhbGUsIGkpIHsKLSAgICAgICAgdmFyIHJhbmdlID0gZDNfc2NhbGVSYW5nZShzY2FsZSks
IHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV0sIHBvc2l0aW9uID0gb3JpZ2luW2ldLCBleHRl
bnQgPSBpID8geUV4dGVudCA6IHhFeHRlbnQsIHNpemUgPSBleHRlbnRbMV0gLSBleHRlbnRbMF0s
IG1pbiwgbWF4OwotICAgICAgICBpZiAoZHJhZ2dpbmcpIHsKLSAgICAgICAgICByMCAtPSBwb3Np
dGlvbjsKLSAgICAgICAgICByMSAtPSBzaXplICsgcG9zaXRpb247Ci0gICAgICAgIH0KLSAgICAg
ICAgbWluID0gKGkgPyB5Q2xhbXAgOiB4Q2xhbXApID8gTWF0aC5tYXgocjAsIE1hdGgubWluKHIx
LCBwb2ludFtpXSkpIDogcG9pbnRbaV07Ci0gICAgICAgIGlmIChkcmFnZ2luZykgewotICAgICAg
ICAgIG1heCA9IChtaW4gKz0gcG9zaXRpb24pICsgc2l6ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICBpZiAoY2VudGVyKSBwb3NpdGlvbiA9IE1hdGgubWF4KHIwLCBNYXRoLm1pbihyMSwg
MiAqIGNlbnRlcltpXSAtIG1pbikpOwotICAgICAgICAgIGlmIChwb3NpdGlvbiA8IG1pbikgewot
ICAgICAgICAgICAgbWF4ID0gbWluOwotICAgICAgICAgICAgbWluID0gcG9zaXRpb247Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1heCA9IHBvc2l0aW9uOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0ZW50WzBdICE9IG1pbiB8fCBleHRlbnRbMV0gIT0g
bWF4KSB7Ci0gICAgICAgICAgaWYgKGkpIHlFeHRlbnREb21haW4gPSBudWxsOyBlbHNlIHhFeHRl
bnREb21haW4gPSBudWxsOwotICAgICAgICAgIGV4dGVudFswXSA9IG1pbjsKLSAgICAgICAgICBl
eHRlbnRbMV0gPSBtYXg7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIGZ1bmN0aW9uIGJydXNoZW5kKCkgewotICAgICAgICBicnVzaG1vdmUoKTsKLSAg
ICAgICAgZy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCAiYWxsIikuc2VsZWN0QWxsKCIucmVzaXpl
Iikuc3R5bGUoImRpc3BsYXkiLCBicnVzaC5lbXB0eSgpID8gIm5vbmUiIDogbnVsbCk7Ci0gICAg
ICAgIGQzLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLCBudWxsKTsKLSAgICAgICAgdy5v
bigibW91c2Vtb3ZlLmJydXNoIiwgbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLCBudWxsKS5vbigi
dG91Y2htb3ZlLmJydXNoIiwgbnVsbCkub24oInRvdWNoZW5kLmJydXNoIiwgbnVsbCkub24oImtl
eWRvd24uYnJ1c2giLCBudWxsKS5vbigia2V5dXAuYnJ1c2giLCBudWxsKTsKLSAgICAgICAgZHJh
Z1Jlc3RvcmUoKTsKLSAgICAgICAgZXZlbnRfKHsKLSAgICAgICAgICB0eXBlOiAiYnJ1c2hlbmQi
Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgICBicnVzaC54ID0gZnVuY3Rpb24oeikg
ewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4geDsKLSAgICAgIHggPSB6Owot
ICAgICAgcmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTsKLSAgICAg
IHJldHVybiBicnVzaDsKLSAgICB9OwotICAgIGJydXNoLnkgPSBmdW5jdGlvbih6KSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB5OwotICAgICAgeSA9IHo7Ci0gICAgICBy
ZXNpemVzID0gZDNfc3ZnX2JydXNoUmVzaXplc1sheCA8PCAxIHwgIXldOwotICAgICAgcmV0dXJu
IGJydXNoOwotICAgIH07Ci0gICAgYnJ1c2guY2xhbXAgPSBmdW5jdGlvbih6KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB4ICYmIHkgPyBbIHhDbGFtcCwgeUNsYW1wIF0g
OiB4ID8geENsYW1wIDogeSA/IHlDbGFtcCA6IG51bGw7Ci0gICAgICBpZiAoeCAmJiB5KSB4Q2xh
bXAgPSAhIXpbMF0sIHlDbGFtcCA9ICEhelsxXTsgZWxzZSBpZiAoeCkgeENsYW1wID0gISF6OyBl
bHNlIGlmICh5KSB5Q2xhbXAgPSAhIXo7Ci0gICAgICByZXR1cm4gYnJ1c2g7Ci0gICAgfTsKLSAg
ICBicnVzaC5leHRlbnQgPSBmdW5jdGlvbih6KSB7Ci0gICAgICB2YXIgeDAsIHgxLCB5MCwgeTEs
IHQ7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKLSAgICAgICAgaWYgKHgpIHsKLSAg
ICAgICAgICBpZiAoeEV4dGVudERvbWFpbikgewotICAgICAgICAgICAgeDAgPSB4RXh0ZW50RG9t
YWluWzBdLCB4MSA9IHhFeHRlbnREb21haW5bMV07Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHgwID0geEV4dGVudFswXSwgeDEgPSB4RXh0ZW50WzFdOwotICAgICAgICAgICAgaWYg
KHguaW52ZXJ0KSB4MCA9IHguaW52ZXJ0KHgwKSwgeDEgPSB4LmludmVydCh4MSk7Ci0gICAgICAg
ICAgICBpZiAoeDEgPCB4MCkgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmICh5KSB7Ci0gICAgICAgICAgaWYgKHlFeHRlbnREb21haW4p
IHsKLSAgICAgICAgICAgIHkwID0geUV4dGVudERvbWFpblswXSwgeTEgPSB5RXh0ZW50RG9tYWlu
WzFdOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB5MCA9IHlFeHRlbnRbMF0sIHkx
ID0geUV4dGVudFsxXTsKLSAgICAgICAgICAgIGlmICh5LmludmVydCkgeTAgPSB5LmludmVydCh5
MCksIHkxID0geS5pbnZlcnQoeTEpOwotICAgICAgICAgICAgaWYgKHkxIDwgeTApIHQgPSB5MCwg
eTAgPSB5MSwgeTEgPSB0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
eCAmJiB5ID8gWyBbIHgwLCB5MCBdLCBbIHgxLCB5MSBdIF0gOiB4ID8gWyB4MCwgeDEgXSA6IHkg
JiYgWyB5MCwgeTEgXTsKLSAgICAgIH0KLSAgICAgIGlmICh4KSB7Ci0gICAgICAgIHgwID0gelsw
XSwgeDEgPSB6WzFdOwotICAgICAgICBpZiAoeSkgeDAgPSB4MFswXSwgeDEgPSB4MVswXTsKLSAg
ICAgICAgeEV4dGVudERvbWFpbiA9IFsgeDAsIHgxIF07Ci0gICAgICAgIGlmICh4LmludmVydCkg
eDAgPSB4KHgwKSwgeDEgPSB4KHgxKTsKLSAgICAgICAgaWYgKHgxIDwgeDApIHQgPSB4MCwgeDAg
PSB4MSwgeDEgPSB0OwotICAgICAgICBpZiAoeDAgIT0geEV4dGVudFswXSB8fCB4MSAhPSB4RXh0
ZW50WzFdKSB4RXh0ZW50ID0gWyB4MCwgeDEgXTsKLSAgICAgIH0KLSAgICAgIGlmICh5KSB7Ci0g
ICAgICAgIHkwID0gelswXSwgeTEgPSB6WzFdOwotICAgICAgICBpZiAoeCkgeTAgPSB5MFsxXSwg
eTEgPSB5MVsxXTsKLSAgICAgICAgeUV4dGVudERvbWFpbiA9IFsgeTAsIHkxIF07Ci0gICAgICAg
IGlmICh5LmludmVydCkgeTAgPSB5KHkwKSwgeTEgPSB5KHkxKTsKLSAgICAgICAgaWYgKHkxIDwg
eTApIHQgPSB5MCwgeTAgPSB5MSwgeTEgPSB0OwotICAgICAgICBpZiAoeTAgIT0geUV4dGVudFsw
XSB8fCB5MSAhPSB5RXh0ZW50WzFdKSB5RXh0ZW50ID0gWyB5MCwgeTEgXTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBicnVzaDsKLSAgICB9OwotICAgIGJydXNoLmNsZWFyID0gZnVuY3Rpb24oKSB7
Ci0gICAgICBpZiAoIWJydXNoLmVtcHR5KCkpIHsKLSAgICAgICAgeEV4dGVudCA9IFsgMCwgMCBd
LCB5RXh0ZW50ID0gWyAwLCAwIF07Ci0gICAgICAgIHhFeHRlbnREb21haW4gPSB5RXh0ZW50RG9t
YWluID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBicnVzaDsKLSAgICB9OwotICAgIGJy
dXNoLmVtcHR5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gISF4ICYmIHhFeHRlbnRbMF0g
PT0geEV4dGVudFsxXSB8fCAhIXkgJiYgeUV4dGVudFswXSA9PSB5RXh0ZW50WzFdOwotICAgIH07
Ci0gICAgcmV0dXJuIGQzLnJlYmluZChicnVzaCwgZXZlbnQsICJvbiIpOwotICB9OwotICB2YXIg
ZDNfc3ZnX2JydXNoQ3Vyc29yID0gewotICAgIG46ICJucy1yZXNpemUiLAotICAgIGU6ICJldy1y
ZXNpemUiLAotICAgIHM6ICJucy1yZXNpemUiLAotICAgIHc6ICJldy1yZXNpemUiLAotICAgIG53
OiAibndzZS1yZXNpemUiLAotICAgIG5lOiAibmVzdy1yZXNpemUiLAotICAgIHNlOiAibndzZS1y
ZXNpemUiLAotICAgIHN3OiAibmVzdy1yZXNpemUiCi0gIH07Ci0gIHZhciBkM19zdmdfYnJ1c2hS
ZXNpemVzID0gWyBbICJuIiwgImUiLCAicyIsICJ3IiwgIm53IiwgIm5lIiwgInNlIiwgInN3IiBd
LCBbICJlIiwgInciIF0sIFsgIm4iLCAicyIgXSwgW10gXTsKLSAgdmFyIGQzX3RpbWVfZm9ybWF0
ID0gZDNfdGltZS5mb3JtYXQgPSBkM19sb2NhbGVfZW5VUy50aW1lRm9ybWF0OwotICB2YXIgZDNf
dGltZV9mb3JtYXRVdGMgPSBkM190aW1lX2Zvcm1hdC51dGM7Ci0gIHZhciBkM190aW1lX2Zvcm1h
dElzbyA9IGQzX3RpbWVfZm9ybWF0VXRjKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTsKLSAgZDNf
dGltZV9mb3JtYXQuaXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgJiYgK25ldyBEYXRl
KCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKSA/IGQzX3RpbWVfZm9ybWF0SXNvTmF0aXZlIDog
ZDNfdGltZV9mb3JtYXRJc287Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfZm9ybWF0SXNvTmF0aXZlKGRh
dGUpIHsKLSAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOwotICB9Ci0gIGQzX3RpbWVfZm9y
bWF0SXNvTmF0aXZlLnBhcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgdmFyIGRhdGUgPSBu
ZXcgRGF0ZShzdHJpbmcpOwotICAgIHJldHVybiBpc05hTihkYXRlKSA/IG51bGwgOiBkYXRlOwot
ICB9OwotICBkM190aW1lX2Zvcm1hdElzb05hdGl2ZS50b1N0cmluZyA9IGQzX3RpbWVfZm9ybWF0
SXNvLnRvU3RyaW5nOwotICBkM190aW1lLnNlY29uZCA9IGQzX3RpbWVfaW50ZXJ2YWwoZnVuY3Rp
b24oZGF0ZSkgewotICAgIHJldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZsb29yKGRhdGUgLyAxZTMp
ICogMWUzKTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0KSB7Ci0gICAgZGF0ZS5zZXRUaW1l
KGRhdGUuZ2V0VGltZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogMWUzKTsKLSAgfSwgZnVuY3Rp
b24oZGF0ZSkgewotICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsKLSAgfSk7Ci0gIGQzX3Rp
bWUuc2Vjb25kcyA9IGQzX3RpbWUuc2Vjb25kLnJhbmdlOwotICBkM190aW1lLnNlY29uZHMudXRj
ID0gZDNfdGltZS5zZWNvbmQudXRjLnJhbmdlOwotICBkM190aW1lLm1pbnV0ZSA9IGQzX3RpbWVf
aW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkgewotICAgIHJldHVybiBuZXcgZDNfZGF0ZShNYXRoLmZs
b29yKGRhdGUgLyA2ZTQpICogNmU0KTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0KSB7Ci0g
ICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogNmU0
KTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSkgewotICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTsK
LSAgfSk7Ci0gIGQzX3RpbWUubWludXRlcyA9IGQzX3RpbWUubWludXRlLnJhbmdlOwotICBkM190
aW1lLm1pbnV0ZXMudXRjID0gZDNfdGltZS5taW51dGUudXRjLnJhbmdlOwotICBkM190aW1lLmhv
dXIgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHsKLSAgICB2YXIgdGltZXpvbmUg
PSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDsKLSAgICByZXR1cm4gbmV3IGQzX2RhdGUo
KE1hdGguZmxvb3IoZGF0ZSAvIDM2ZTUgLSB0aW1lem9uZSkgKyB0aW1lem9uZSkgKiAzNmU1KTsK
LSAgfSwgZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0KSB7Ci0gICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0
VGltZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogMzZlNSk7Ci0gIH0sIGZ1bmN0aW9uKGRhdGUp
IHsKLSAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpOwotICB9KTsKLSAgZDNfdGltZS5ob3VycyA9
IGQzX3RpbWUuaG91ci5yYW5nZTsKLSAgZDNfdGltZS5ob3Vycy51dGMgPSBkM190aW1lLmhvdXIu
dXRjLnJhbmdlOwotICBkM190aW1lLm1vbnRoID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihk
YXRlKSB7Ci0gICAgZGF0ZSA9IGQzX3RpbWUuZGF5KGRhdGUpOwotICAgIGRhdGUuc2V0RGF0ZSgx
KTsKLSAgICByZXR1cm4gZGF0ZTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0KSB7Ci0gICAg
ZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBvZmZzZXQpOwotICB9LCBmdW5jdGlvbihk
YXRlKSB7Ci0gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTsKLSAgfSk7Ci0gIGQzX3RpbWUubW9u
dGhzID0gZDNfdGltZS5tb250aC5yYW5nZTsKLSAgZDNfdGltZS5tb250aHMudXRjID0gZDNfdGlt
ZS5tb250aC51dGMucmFuZ2U7Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfc2NhbGUobGluZWFyLCBtZXRo
b2RzLCBmb3JtYXQpIHsKLSAgICBmdW5jdGlvbiBzY2FsZSh4KSB7Ci0gICAgICByZXR1cm4gbGlu
ZWFyKHgpOwotICAgIH0KLSAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBy
ZXR1cm4gZDNfdGltZV9zY2FsZURhdGUobGluZWFyLmludmVydCh4KSk7Ci0gICAgfTsKLSAgICBz
Y2FsZS5kb21haW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgp
IHJldHVybiBsaW5lYXIuZG9tYWluKCkubWFwKGQzX3RpbWVfc2NhbGVEYXRlKTsKLSAgICAgIGxp
bmVhci5kb21haW4oeCk7Ci0gICAgICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBmdW5jdGlv
biB0aWNrTWV0aG9kKGV4dGVudCwgY291bnQpIHsKLSAgICAgIHZhciBzcGFuID0gZXh0ZW50WzFd
IC0gZXh0ZW50WzBdLCB0YXJnZXQgPSBzcGFuIC8gY291bnQsIGkgPSBkMy5iaXNlY3QoZDNfdGlt
ZV9zY2FsZVN0ZXBzLCB0YXJnZXQpOwotICAgICAgcmV0dXJuIGkgPT0gZDNfdGltZV9zY2FsZVN0
ZXBzLmxlbmd0aCA/IFsgbWV0aG9kcy55ZWFyLCBkM19zY2FsZV9saW5lYXJUaWNrUmFuZ2UoZXh0
ZW50Lm1hcChmdW5jdGlvbihkKSB7Ci0gICAgICAgIHJldHVybiBkIC8gMzE1MzZlNjsKLSAgICAg
IH0pLCBjb3VudClbMl0gXSA6ICFpID8gWyBkM190aW1lX3NjYWxlTWlsbGlzZWNvbmRzLCBkM19z
Y2FsZV9saW5lYXJUaWNrUmFuZ2UoZXh0ZW50LCBjb3VudClbMl0gXSA6IG1ldGhvZHNbdGFyZ2V0
IC8gZDNfdGltZV9zY2FsZVN0ZXBzW2kgLSAxXSA8IGQzX3RpbWVfc2NhbGVTdGVwc1tpXSAvIHRh
cmdldCA/IGkgLSAxIDogaV07Ci0gICAgfQotICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRl
cnZhbCwgc2tpcCkgewotICAgICAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpLCBleHRlbnQg
PSBkM19zY2FsZUV4dGVudChkb21haW4pLCBtZXRob2QgPSBpbnRlcnZhbCA9PSBudWxsID8gdGlj
a01ldGhvZChleHRlbnQsIDEwKSA6IHR5cGVvZiBpbnRlcnZhbCA9PT0gIm51bWJlciIgJiYgdGlj
a01ldGhvZChleHRlbnQsIGludGVydmFsKTsKLSAgICAgIGlmIChtZXRob2QpIGludGVydmFsID0g
bWV0aG9kWzBdLCBza2lwID0gbWV0aG9kWzFdOwotICAgICAgZnVuY3Rpb24gc2tpcHBlZChkYXRl
KSB7Ci0gICAgICAgIHJldHVybiAhaXNOYU4oZGF0ZSkgJiYgIWludGVydmFsLnJhbmdlKGRhdGUs
IGQzX3RpbWVfc2NhbGVEYXRlKCtkYXRlICsgMSksIHNraXApLmxlbmd0aDsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBzY2FsZS5kb21haW4oZDNfc2NhbGVfbmljZShkb21haW4sIHNraXAgPiAxID8g
ewotICAgICAgICBmbG9vcjogZnVuY3Rpb24oZGF0ZSkgewotICAgICAgICAgIHdoaWxlIChza2lw
cGVkKGRhdGUgPSBpbnRlcnZhbC5mbG9vcihkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0
ZShkYXRlIC0gMSk7Ci0gICAgICAgICAgcmV0dXJuIGRhdGU7Ci0gICAgICAgIH0sCi0gICAgICAg
IGNlaWw6IGZ1bmN0aW9uKGRhdGUpIHsKLSAgICAgICAgICB3aGlsZSAoc2tpcHBlZChkYXRlID0g
aW50ZXJ2YWwuY2VpbChkYXRlKSkpIGRhdGUgPSBkM190aW1lX3NjYWxlRGF0ZSgrZGF0ZSArIDEp
OwotICAgICAgICAgIHJldHVybiBkYXRlOwotICAgICAgICB9Ci0gICAgICB9IDogaW50ZXJ2YWwp
KTsKLSAgICB9OwotICAgIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oaW50ZXJ2YWwsIHNraXApIHsK
LSAgICAgIHZhciBleHRlbnQgPSBkM19zY2FsZUV4dGVudChzY2FsZS5kb21haW4oKSksIG1ldGhv
ZCA9IGludGVydmFsID09IG51bGwgPyB0aWNrTWV0aG9kKGV4dGVudCwgMTApIDogdHlwZW9mIGlu
dGVydmFsID09PSAibnVtYmVyIiA/IHRpY2tNZXRob2QoZXh0ZW50LCBpbnRlcnZhbCkgOiAhaW50
ZXJ2YWwucmFuZ2UgJiYgWyB7Ci0gICAgICAgIHJhbmdlOiBpbnRlcnZhbAotICAgICAgfSwgc2tp
cCBdOwotICAgICAgaWYgKG1ldGhvZCkgaW50ZXJ2YWwgPSBtZXRob2RbMF0sIHNraXAgPSBtZXRo
b2RbMV07Ci0gICAgICByZXR1cm4gaW50ZXJ2YWwucmFuZ2UoZXh0ZW50WzBdLCBkM190aW1lX3Nj
YWxlRGF0ZSgrZXh0ZW50WzFdICsgMSksIHNraXAgPCAxID8gMSA6IHNraXApOwotICAgIH07Ci0g
ICAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGZvcm1hdDsK
LSAgICB9OwotICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM190
aW1lX3NjYWxlKGxpbmVhci5jb3B5KCksIG1ldGhvZHMsIGZvcm1hdCk7Ci0gICAgfTsKLSAgICBy
ZXR1cm4gZDNfc2NhbGVfbGluZWFyUmViaW5kKHNjYWxlLCBsaW5lYXIpOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX3RpbWVfc2NhbGVEYXRlKHQpIHsKLSAgICByZXR1cm4gbmV3IERhdGUodCk7Ci0gIH0K
LSAgdmFyIGQzX3RpbWVfc2NhbGVTdGVwcyA9IFsgMWUzLCA1ZTMsIDE1ZTMsIDNlNCwgNmU0LCAz
ZTUsIDllNSwgMThlNSwgMzZlNSwgMTA4ZTUsIDIxNmU1LCA0MzJlNSwgODY0ZTUsIDE3MjhlNSwg
NjA0OGU1LCAyNTkyZTYsIDc3NzZlNiwgMzE1MzZlNiBdOwotICB2YXIgZDNfdGltZV9zY2FsZUxv
Y2FsTWV0aG9kcyA9IFsgWyBkM190aW1lLnNlY29uZCwgMSBdLCBbIGQzX3RpbWUuc2Vjb25kLCA1
IF0sIFsgZDNfdGltZS5zZWNvbmQsIDE1IF0sIFsgZDNfdGltZS5zZWNvbmQsIDMwIF0sIFsgZDNf
dGltZS5taW51dGUsIDEgXSwgWyBkM190aW1lLm1pbnV0ZSwgNSBdLCBbIGQzX3RpbWUubWludXRl
LCAxNSBdLCBbIGQzX3RpbWUubWludXRlLCAzMCBdLCBbIGQzX3RpbWUuaG91ciwgMSBdLCBbIGQz
X3RpbWUuaG91ciwgMyBdLCBbIGQzX3RpbWUuaG91ciwgNiBdLCBbIGQzX3RpbWUuaG91ciwgMTIg
XSwgWyBkM190aW1lLmRheSwgMSBdLCBbIGQzX3RpbWUuZGF5LCAyIF0sIFsgZDNfdGltZS53ZWVr
LCAxIF0sIFsgZDNfdGltZS5tb250aCwgMSBdLCBbIGQzX3RpbWUubW9udGgsIDMgXSwgWyBkM190
aW1lLnllYXIsIDEgXSBdOwotICB2YXIgZDNfdGltZV9zY2FsZUxvY2FsRm9ybWF0ID0gZDNfdGlt
ZV9mb3JtYXQubXVsdGkoWyBbICIuJUwiLCBmdW5jdGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0
TWlsbGlzZWNvbmRzKCk7Ci0gIH0gXSwgWyAiOiVTIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVy
biBkLmdldFNlY29uZHMoKTsKLSAgfSBdLCBbICIlSTolTSIsIGZ1bmN0aW9uKGQpIHsKLSAgICBy
ZXR1cm4gZC5nZXRNaW51dGVzKCk7Ci0gIH0gXSwgWyAiJUkgJXAiLCBmdW5jdGlvbihkKSB7Ci0g
ICAgcmV0dXJuIGQuZ2V0SG91cnMoKTsKLSAgfSBdLCBbICIlYSAlZCIsIGZ1bmN0aW9uKGQpIHsK
LSAgICByZXR1cm4gZC5nZXREYXkoKSAmJiBkLmdldERhdGUoKSAhPSAxOwotICB9IF0sIFsgIiVi
ICVkIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldERhdGUoKSAhPSAxOwotICB9IF0s
IFsgIiVCIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldE1vbnRoKCk7Ci0gIH0gXSwg
WyAiJVkiLCBkM190cnVlIF0gXSk7Ci0gIHZhciBkM190aW1lX3NjYWxlTWlsbGlzZWNvbmRzID0g
ewotICAgIHJhbmdlOiBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkgewotICAgICAgcmV0dXJu
IGQzLnJhbmdlKE1hdGguY2VpbChzdGFydCAvIHN0ZXApICogc3RlcCwgK3N0b3AsIHN0ZXApLm1h
cChkM190aW1lX3NjYWxlRGF0ZSk7Ci0gICAgfSwKLSAgICBmbG9vcjogZDNfaWRlbnRpdHksCi0g
ICAgY2VpbDogZDNfaWRlbnRpdHkKLSAgfTsKLSAgZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcy55
ZWFyID0gZDNfdGltZS55ZWFyOwotICBkM190aW1lLnNjYWxlID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksIGQzX3RpbWVfc2NhbGVMb2Nh
bE1ldGhvZHMsIGQzX3RpbWVfc2NhbGVMb2NhbEZvcm1hdCk7Ci0gIH07Ci0gIHZhciBkM190aW1l
X3NjYWxlVXRjTWV0aG9kcyA9IGQzX3RpbWVfc2NhbGVMb2NhbE1ldGhvZHMubWFwKGZ1bmN0aW9u
KG0pIHsKLSAgICByZXR1cm4gWyBtWzBdLnV0YywgbVsxXSBdOwotICB9KTsKLSAgdmFyIGQzX3Rp
bWVfc2NhbGVVdGNGb3JtYXQgPSBkM190aW1lX2Zvcm1hdFV0Yy5tdWx0aShbIFsgIi4lTCIsIGZ1
bmN0aW9uKGQpIHsKLSAgICByZXR1cm4gZC5nZXRVVENNaWxsaXNlY29uZHMoKTsKLSAgfSBdLCBb
ICI6JVMiLCBmdW5jdGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0VVRDU2Vjb25kcygpOwotICB9
IF0sIFsgIiVJOiVNIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldFVUQ01pbnV0ZXMo
KTsKLSAgfSBdLCBbICIlSSAlcCIsIGZ1bmN0aW9uKGQpIHsKLSAgICByZXR1cm4gZC5nZXRVVENI
b3VycygpOwotICB9IF0sIFsgIiVhICVkIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdl
dFVUQ0RheSgpICYmIGQuZ2V0VVRDRGF0ZSgpICE9IDE7Ci0gIH0gXSwgWyAiJWIgJWQiLCBmdW5j
dGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0VVRDRGF0ZSgpICE9IDE7Ci0gIH0gXSwgWyAiJUIi
LCBmdW5jdGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0VVRDTW9udGgoKTsKLSAgfSBdLCBbICIl
WSIsIGQzX3RydWUgXSBdKTsKLSAgZDNfdGltZV9zY2FsZVV0Y01ldGhvZHMueWVhciA9IGQzX3Rp
bWUueWVhci51dGM7Ci0gIGQzX3RpbWUuc2NhbGUudXRjID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIGQzX3RpbWVfc2NhbGUoZDMuc2NhbGUubGluZWFyKCksIGQzX3RpbWVfc2NhbGVVdGNNZXRo
b2RzLCBkM190aW1lX3NjYWxlVXRjRm9ybWF0KTsKLSAgfTsKLSAgZDMudGV4dCA9IGQzX3hoclR5
cGUoZnVuY3Rpb24ocmVxdWVzdCkgewotICAgIHJldHVybiByZXF1ZXN0LnJlc3BvbnNlVGV4dDsK
LSAgfSk7Ci0gIGQzLmpzb24gPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJu
IGQzX3hocih1cmwsICJhcHBsaWNhdGlvbi9qc29uIiwgZDNfanNvbiwgY2FsbGJhY2spOwotICB9
OwotICBmdW5jdGlvbiBkM19qc29uKHJlcXVlc3QpIHsKLSAgICByZXR1cm4gSlNPTi5wYXJzZShy
ZXF1ZXN0LnJlc3BvbnNlVGV4dCk7Ci0gIH0KLSAgZDMuaHRtbCA9IGZ1bmN0aW9uKHVybCwgY2Fs
bGJhY2spIHsKLSAgICByZXR1cm4gZDNfeGhyKHVybCwgInRleHQvaHRtbCIsIGQzX2h0bWwsIGNh
bGxiYWNrKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfaHRtbChyZXF1ZXN0KSB7Ci0gICAgdmFyIHJh
bmdlID0gZDNfZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZS5zZWxlY3ROb2RlKGQz
X2RvY3VtZW50LmJvZHkpOwotICAgIHJldHVybiByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQocmVxdWVzdC5yZXNwb25zZVRleHQpOwotICB9Ci0gIGQzLnhtbCA9IGQzX3hoclR5cGUoZnVu
Y3Rpb24ocmVxdWVzdCkgewotICAgIHJldHVybiByZXF1ZXN0LnJlc3BvbnNlWE1MOwotICB9KTsK
LSAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgZGVmaW5l
KGQzKTsgZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gIm9iamVjdCIgJiYgbW9kdWxlLmV4cG9y
dHMpIG1vZHVsZS5leHBvcnRzID0gZDM7Ci0gIHRoaXMuZDMgPSBkMzsKLX0oKTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YyL2pzL2QzL2QzLm1pbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjIvanMvZDMvZDMubWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTdh
ZTkwMzQyMzBlNzM2YmI2MzZjMmI4MWEyNTdiNzZmYTcyOWRiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjIvanMvZDMvZDMubWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0hZnVu
Y3Rpb24oKXtmdW5jdGlvbiBuKG4sdCl7cmV0dXJuIHQ+bj8tMTpuPnQ/MTpuPj10PzA6MC8wfWZ1
bmN0aW9uIHQobil7cmV0dXJuIG51bGwhPW4mJiFpc05hTihuKX1mdW5jdGlvbiBlKG4pe3JldHVy
bntsZWZ0OmZ1bmN0aW9uKHQsZSxyLHUpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTApLGFy
Z3VtZW50cy5sZW5ndGg8NCYmKHU9dC5sZW5ndGgpO3U+cjspe3ZhciBpPXIrdT4+PjE7bih0W2ld
LGUpPDA/cj1pKzE6dT1pfXJldHVybiByfSxyaWdodDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJn
dW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1
PnI7KXt2YXIgaT1yK3U+Pj4xO24odFtpXSxlKT4wP3U9aTpyPWkrMX1yZXR1cm4gcn19fWZ1bmN0
aW9uIHIobil7cmV0dXJuIG4ubGVuZ3RofWZ1bmN0aW9uIHUobil7Zm9yKHZhciB0PTE7bip0JTE7
KXQqPTEwO3JldHVybiB0fWZ1bmN0aW9uIGkobix0KXt0cnl7Zm9yKHZhciBlIGluIHQpT2JqZWN0
LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse3ZhbHVlOnRbZV0sZW51bWVyYWJsZTohMX0p
fWNhdGNoKHIpe24ucHJvdG90eXBlPXR9fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYShuKXtyZXR1
cm4gaWErbiBpbiB0aGlzfWZ1bmN0aW9uIGMobil7cmV0dXJuIG49aWErbixuIGluIHRoaXMmJmRl
bGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHMoKXt2YXIgbj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1
bmN0aW9uKHQpe24ucHVzaCh0KX0pLG59ZnVuY3Rpb24gbCgpe3ZhciBuPTA7Zm9yKHZhciB0IGlu
IHRoaXMpdC5jaGFyQ29kZUF0KDApPT09b2EmJisrbjtyZXR1cm4gbn1mdW5jdGlvbiBmKCl7Zm9y
KHZhciBuIGluIHRoaXMpaWYobi5jaGFyQ29kZUF0KDApPT09b2EpcmV0dXJuITE7cmV0dXJuITB9
ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBnKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1l
LmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gcj09PXQ/bjpyfX1mdW5jdGlvbiBwKG4sdCl7aWYo
dCBpbiBuKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cmluZygx
KTtmb3IodmFyIGU9MCxyPWFhLmxlbmd0aDtyPmU7KytlKXt2YXIgdT1hYVtlXSt0O2lmKHUgaW4g
bilyZXR1cm4gdX19ZnVuY3Rpb24gdigpe31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIG0obil7ZnVu
Y3Rpb24gdCgpe2Zvcih2YXIgdCxyPWUsdT0tMSxpPXIubGVuZ3RoOysrdTxpOykodD1yW3VdLm9u
KSYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG59dmFyIGU9W10scj1uZXcgbztyZXR1
cm4gdC5vbj1mdW5jdGlvbih0LHUpe3ZhciBpLG89ci5nZXQodCk7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGk9ZS5pbmRleE9mKG8p
KS5jb25jYXQoZS5zbGljZShpKzEpKSxyLnJlbW92ZSh0KSksdSYmZS5wdXNoKHIuc2V0KHQse29u
OnV9KSksbil9LHR9ZnVuY3Rpb24geSgpe1pvLmV2ZW50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rp
b24geCgpe2Zvcih2YXIgbix0PVpvLmV2ZW50O249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0
fWZ1bmN0aW9uIE0obil7Zm9yKHZhciB0PW5ldyBkLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7Kytl
PHI7KXRbYXJndW1lbnRzW2VdXT1tKHQpO3JldHVybiB0Lm9mPWZ1bmN0aW9uKGUscil7cmV0dXJu
IGZ1bmN0aW9uKHUpe3RyeXt2YXIgaT11LnNvdXJjZUV2ZW50PVpvLmV2ZW50O3UudGFyZ2V0PW4s
Wm8uZXZlbnQ9dSx0W3UudHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e1pvLmV2ZW50PWl9fX0sdH1m
dW5jdGlvbiBfKG4pe3JldHVybiBzYShuLHBhKSxufWZ1bmN0aW9uIGIobil7cmV0dXJuImZ1bmN0
aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiBsYShuLHRoaXMpfX1mdW5jdGlvbiB3
KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gZmEobix0
aGlzKX19ZnVuY3Rpb24gUyhuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShu
KX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfWZ1
bmN0aW9uIHUoKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnNldEF0
dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX1mdW5jdGlvbiBvKCl7dmFyIGU9dC5hcHBseSh0
aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0
dHJpYnV0ZShuLGUpfWZ1bmN0aW9uIGEoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtu
dWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0
dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX1yZXR1cm4gbj1aby5ucy5xdWFsaWZ5KG4pLG51
bGw9PXQ/bi5sb2NhbD9yOmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bi5sb2NhbD9hOm86bi5sb2Nh
bD9pOnV9ZnVuY3Rpb24gayhuKXtyZXR1cm4gbi50cmltKCkucmVwbGFjZSgvXHMrL2csIiAiKX1m
dW5jdGlvbiBFKG4pe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIitaby5yZXF1b3RlKG4p
KyIoPzpcXHMrfCQpIiwiZyIpfWZ1bmN0aW9uIEEobil7cmV0dXJuKG4rIiIpLnRyaW0oKS5zcGxp
dCgvXnxccysvKX1mdW5jdGlvbiBDKG4sdCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8
dTspbltlXSh0aGlzLHQpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMs
YXJndW1lbnRzKTsrK2U8dTspbltlXSh0aGlzLHIpfW49QShuKS5tYXAoTik7dmFyIHU9bi5sZW5n
dGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIE4obil7dmFyIHQ9RShu
KTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJldHVybiByP3UuYWRkKG4p
OnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJ
bmRleD0wLHQudGVzdCh1KXx8ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIixrKHUrIiAiK24pKSk6ZS5z
ZXRBdHRyaWJ1dGUoImNsYXNzIixrKHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24geihuLHQs
ZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gdSgp
e3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2YXIgcj10LmFwcGx5
KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dGhp
cy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9cmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10
eXBlb2YgdD9pOnV9ZnVuY3Rpb24gTChuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1m
dW5jdGlvbiByKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJn
dW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4gbnVsbD09dD9l
OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBUKG4pe3JldHVybiJmdW5jdGlvbiI9
PXR5cGVvZiBuP246KG49Wm8ubnMucXVhbGlmeShuKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5j
dGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFt
ZXNwYWNlVVJJLG4pfX1mdW5jdGlvbiBxKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBS
KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnYSh0aGlzLG4pfX1mdW5jdGlvbiBEKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RofHwodD1uKSxmdW5jdGlvbihuLGUpe3JldHVybiBuJiZlP3Qo
bi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX19ZnVuY3Rpb24gUChuLHQpe2Zvcih2YXIgZT0w
LHI9bi5sZW5ndGg7cj5lO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztv
KyspKHU9aVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFUobil7cmV0dXJuIHNhKG4s
ZGEpLG59ZnVuY3Rpb24gaihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihyLHUsaSl7dmFyIG8s
YT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYoZT1pLHQ9MCksdT49dCYmKHQ9dSsx
KTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJuIG99fWZ1bmN0aW9uIEgoKXt2YXIgbj10aGlzLl9f
dHJhbnNpdGlvbl9fO24mJisrbi5hY3RpdmV9ZnVuY3Rpb24gRihuLHQsZSl7ZnVuY3Rpb24gcigp
e3ZhciB0PXRoaXNbb107dCYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHQsdC4kKSxkZWxl
dGUgdGhpc1tvXSl9ZnVuY3Rpb24gdSgpe3ZhciB1PWModCxYbyhhcmd1bWVudHMpKTtyLmNhbGwo
dGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKG4sdGhpc1tvXT11LHUuJD1lKSx1Ll89dH1mdW5j
dGlvbiBpKCl7dmFyIHQsZT1uZXcgUmVnRXhwKCJeX19vbihbXi5dKykiK1pvLnJlcXVvdGUobikr
IiQiKTtmb3IodmFyIHIgaW4gdGhpcylpZih0PXIubWF0Y2goZSkpe3ZhciB1PXRoaXNbcl07dGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKHRbMV0sdSx1LiQpLGRlbGV0ZSB0aGlzW3JdfX12YXIgbz0i
X19vbiIrbixhPW4uaW5kZXhPZigiLiIpLGM9TzthPjAmJihuPW4uc3Vic3RyaW5nKDAsYSkpO3Zh
ciBzPXlhLmdldChuKTtyZXR1cm4gcyYmKG49cyxjPVkpLGE/dD91OnI6dD92Oml9ZnVuY3Rpb24g
TyhuLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1aby5ldmVudDtaby5ldmVudD1lLHRbMF09
dGhpcy5fX2RhdGFfXzt0cnl7bi5hcHBseSh0aGlzLHQpfWZpbmFsbHl7Wm8uZXZlbnQ9cn19fWZ1
bmN0aW9uIFkobix0KXt2YXIgZT1PKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMs
cj1uLnJlbGF0ZWRUYXJnZXQ7ciYmKHI9PT10fHw4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24o
dCkpfHxlLmNhbGwodCxuKX19ZnVuY3Rpb24gSSgpe3ZhciBuPSIuZHJhZ3N1cHByZXNzLSIrICsr
TWEsdD0iY2xpY2siK24sZT1aby5zZWxlY3QoV28pLm9uKCJ0b3VjaG1vdmUiK24seSkub24oImRy
YWdzdGFydCIrbix5KS5vbigic2VsZWN0c3RhcnQiK24seSk7aWYoeGEpe3ZhciByPUJvLnN0eWxl
LHU9clt4YV07clt4YV09Im5vbmUifXJldHVybiBmdW5jdGlvbihpKXtmdW5jdGlvbiBvKCl7ZS5v
bih0LG51bGwpfWUub24obixudWxsKSx4YSYmKHJbeGFdPXUpLGkmJihlLm9uKHQsZnVuY3Rpb24o
KXt5KCksbygpfSwhMCksc2V0VGltZW91dChvLDApKX19ZnVuY3Rpb24gWihuLHQpe3QuY2hhbmdl
ZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pO3ZhciBlPW4ub3duZXJTVkdFbGVtZW50
fHxuO2lmKGUuY3JlYXRlU1ZHUG9pbnQpe3ZhciByPWUuY3JlYXRlU1ZHUG9pbnQoKTtpZigwPl9h
JiYoV28uc2Nyb2xsWHx8V28uc2Nyb2xsWSkpe2U9Wm8uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJz
dmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFk
ZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgdT1lWzBdWzBdLmdldFNjcmVl
bkNUTSgpO19hPSEodS5mfHx1LmUpLGUucmVtb3ZlKCl9cmV0dXJuIF9hPyhyLng9dC5wYWdlWCxy
Lnk9dC5wYWdlWSk6KHIueD10LmNsaWVudFgsci55PXQuY2xpZW50WSkscj1yLm1hdHJpeFRyYW5z
Zm9ybShuLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW3IueCxyLnldfXZhciBpPW4uZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtbi5jbGllbnRMZWZ0LHQu
Y2xpZW50WS1pLnRvcC1uLmNsaWVudFRvcF19ZnVuY3Rpb24gVigpe3JldHVybiBaby5ldmVudC5j
aGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfWZ1bmN0aW9uIFgoKXtyZXR1cm4gWm8uZXZlbnQu
dGFyZ2V0fWZ1bmN0aW9uICQoKXtyZXR1cm4gV299ZnVuY3Rpb24gQihuKXtyZXR1cm4gbj4wPzE6
MD5uPy0xOjB9ZnVuY3Rpb24gVyhuLHQsZSl7cmV0dXJuKHRbMF0tblswXSkqKGVbMV0tblsxXSkt
KHRbMV0tblsxXSkqKGVbMF0tblswXSl9ZnVuY3Rpb24gSihuKXtyZXR1cm4gbj4xPzA6LTE+bj9i
YTpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gbj4xP1NhOi0xPm4/LVNhOk1hdGgu
YXNpbihuKX1mdW5jdGlvbiBLKG4pe3JldHVybigobj1NYXRoLmV4cChuKSktMS9uKS8yfWZ1bmN0
aW9uIFEobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9ZnVuY3Rpb24gbnQobil7cmV0
dXJuKChuPU1hdGguZXhwKDIqbikpLTEpLyhuKzEpfWZ1bmN0aW9uIHR0KG4pe3JldHVybihuPU1h
dGguc2luKG4vMikpKm59ZnVuY3Rpb24gZXQoKXt9ZnVuY3Rpb24gcnQobix0LGUpe3JldHVybiB0
aGlzIGluc3RhbmNlb2YgcnQ/KHRoaXMuaD0rbix0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K2UpKTph
cmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIHJ0P25ldyBydChuLmgsbi5zLG4ubCk6bXQo
IiIrbix5dCxydCk6bmV3IHJ0KG4sdCxlKX1mdW5jdGlvbiB1dChuLHQsZSl7ZnVuY3Rpb24gcihu
KXtyZXR1cm4gbj4zNjA/bi09MzYwOjA+biYmKG4rPTM2MCksNjA+bj9pKyhvLWkpKm4vNjA6MTgw
Pm4/bzoyNDA+bj9pKyhvLWkpKigyNDAtbikvNjA6aX1mdW5jdGlvbiB1KG4pe3JldHVybiBNYXRo
LnJvdW5kKDI1NSpyKG4pKX12YXIgaSxvO3JldHVybiBuPWlzTmFOKG4pPzA6KG4lPTM2MCk8MD9u
KzM2MDpuLHQ9aXNOYU4odCk/MDowPnQ/MDp0PjE/MTp0LGU9MD5lPzA6ZT4xPzE6ZSxvPS41Pj1l
P2UqKDErdCk6ZSt0LWUqdCxpPTIqZS1vLG5ldyBndCh1KG4rMTIwKSx1KG4pLHUobi0xMjApKX1m
dW5jdGlvbiBpdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpdD8odGhpcy5oPStuLHRo
aXMuYz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2Yg
aXQ/bmV3IGl0KG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgYXQ/c3Qobi5sLG4uYSxuLmIpOnN0
KChuPXh0KChuPVpvLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpuZXcgaXQobix0LGUp
fWZ1bmN0aW9uIG90KG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0w
KSxuZXcgYXQoZSxNYXRoLmNvcyhuKj1BYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiBhdChu
LHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhdD8odGhpcy5sPStuLHRoaXMuYT0rdCx2b2lk
KHRoaXMuYj0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgYXQ/bmV3IGF0KG4u
bCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgaXQ/b3Qobi5sLG4uYyxuLmgpOnh0KChuPWd0KG4pKS5y
LG4uZyxuLmIpOm5ldyBhdChuLHQsZSl9ZnVuY3Rpb24gY3Qobix0LGUpe3ZhciByPShuKzE2KS8x
MTYsdT1yK3QvNTAwLGk9ci1lLzIwMDtyZXR1cm4gdT1sdCh1KSpqYSxyPWx0KHIpKkhhLGk9bHQo
aSkqRmEsbmV3IGd0KGh0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGh0KC0u
OTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxodCguMDU1NjQzNCp1LS4yMDQwMjU5KnIr
MS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBzdChuLHQsZSl7cmV0dXJuIG4+MD9uZXcgaXQoTWF0aC5h
dGFuMihlLHQpKkNhLE1hdGguc3FydCh0KnQrZSplKSxuKTpuZXcgaXQoMC8wLDAvMCxuKX1mdW5j
dGlvbiBsdChuKXtyZXR1cm4gbj4uMjA2ODkzMDM0P24qbipuOihuLTQvMjkpLzcuNzg3MDM3fWZ1
bmN0aW9uIGZ0KG4pe3JldHVybiBuPi4wMDg4NTY/TWF0aC5wb3cobiwxLzMpOjcuNzg3MDM3Km4r
NC8yOX1mdW5jdGlvbiBodChuKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49bj8xMi45
MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBndChuLHQsZSl7cmV0
dXJuIHRoaXMgaW5zdGFuY2VvZiBndD8odGhpcy5yPX5+bix0aGlzLmc9fn50LHZvaWQodGhpcy5i
PX5+ZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgZ3Q/bmV3IGd0KG4ucixuLmcs
bi5iKTptdCgiIituLGd0LHV0KTpuZXcgZ3Qobix0LGUpfWZ1bmN0aW9uIHB0KG4pe3JldHVybiBu
ZXcgZ3Qobj4+MTYsMjU1Jm4+PjgsMjU1Jm4pfWZ1bmN0aW9uIHZ0KG4pe3JldHVybiBwdChuKSsi
In1mdW5jdGlvbiBkdChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygx
Nik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBtdChuLHQsZSl7dmFyIHIs
dSxpLG89MCxhPTAsYz0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvaS5leGVjKG4pKXN3aXRjaCh1
PXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdCh1WzBd
KSxwYXJzZUZsb2F0KHVbMV0pLzEwMCxwYXJzZUZsb2F0KHVbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJl
dHVybiB0KF90KHVbMF0pLF90KHVbMV0pLF90KHVbMl0pKX1yZXR1cm4oaT1JYS5nZXQobikpP3Qo
aS5yLGkuZyxpLmIpOihudWxsPT1ufHwiIyIhPT1uLmNoYXJBdCgwKXx8aXNOYU4oaT1wYXJzZUlu
dChuLnN1YnN0cmluZygxKSwxNikpfHwoND09PW4ubGVuZ3RoPyhvPSgzODQwJmkpPj40LG89bz4+
NHxvLGE9MjQwJmksYT1hPj40fGEsYz0xNSZpLGM9Yzw8NHxjKTo3PT09bi5sZW5ndGgmJihvPSgx
NjcxMTY4MCZpKT4+MTYsYT0oNjUyODAmaSk+PjgsYz0yNTUmaSkpLHQobyxhLGMpKX1mdW5jdGlv
biB5dChuLHQsZSl7dmFyIHIsdSxpPU1hdGgubWluKG4vPTI1NSx0Lz0yNTUsZS89MjU1KSxvPU1h
dGgubWF4KG4sdCxlKSxhPW8taSxjPShvK2kpLzI7cmV0dXJuIGE/KHU9LjU+Yz9hLyhvK2kpOmEv
KDItby1pKSxyPW49PW8/KHQtZSkvYSsoZT50PzY6MCk6dD09bz8oZS1uKS9hKzI6KG4tdCkvYSs0
LHIqPTYwKToocj0wLzAsdT1jPjAmJjE+Yz8wOnIpLG5ldyBydChyLHUsYyl9ZnVuY3Rpb24geHQo
bix0LGUpe249TXQobiksdD1NdCh0KSxlPU10KGUpO3ZhciByPWZ0KCguNDEyNDU2NCpuKy4zNTc1
NzYxKnQrLjE4MDQzNzUqZSkvamEpLHU9ZnQoKC4yMTI2NzI5Km4rLjcxNTE1MjIqdCsuMDcyMTc1
KmUpL0hhKSxpPWZ0KCguMDE5MzMzOSpuKy4xMTkxOTIqdCsuOTUwMzA0MSplKS9GYSk7cmV0dXJu
IGF0KDExNip1LTE2LDUwMCooci11KSwyMDAqKHUtaSkpfWZ1bmN0aW9uIE10KG4pe3JldHVybihu
Lz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0
aW9uIF90KG4pe3ZhciB0PXBhcnNlRmxvYXQobik7cmV0dXJuIiUiPT09bi5jaGFyQXQobi5sZW5n
dGgtMSk/TWF0aC5yb3VuZCgyLjU1KnQpOnR9ZnVuY3Rpb24gYnQobil7cmV0dXJuImZ1bmN0aW9u
Ij09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiB3dChuKXtyZXR1cm4g
bn1mdW5jdGlvbiBTdChuKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiAyPT09YXJndW1l
bnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxrdCh0LGUsbixy
KX19ZnVuY3Rpb24ga3Qobix0LGUscil7ZnVuY3Rpb24gdSgpe3ZhciBuLHQ9Yy5zdGF0dXM7aWYo
IXQmJmMucmVzcG9uc2VUZXh0fHx0Pj0yMDAmJjMwMD50fHwzMDQ9PT10KXt0cnl7bj1lLmNhbGwo
aSxjKX1jYXRjaChyKXtyZXR1cm4gby5lcnJvci5jYWxsKGksciksdm9pZCAwfW8ubG9hZC5jYWxs
KGksbil9ZWxzZSBvLmVycm9yLmNhbGwoaSxjKX12YXIgaT17fSxvPVpvLmRpc3BhdGNoKCJiZWZv
cmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxhPXt9LGM9bmV3IFhNTEh0dHBSZXF1
ZXN0LHM9bnVsbDtyZXR1cm4hV28uWERvbWFpblJlcXVlc3R8fCJ3aXRoQ3JlZGVudGlhbHMiaW4g
Y3x8IS9eKGh0dHAocyk/Oik/XC9cLy8udGVzdChuKXx8KGM9bmV3IFhEb21haW5SZXF1ZXN0KSwi
b25sb2FkImluIGM/Yy5vbmxvYWQ9Yy5vbmVycm9yPXU6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVu
Y3Rpb24oKXtjLnJlYWR5U3RhdGU+MyYmdSgpfSxjLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24obil7dmFy
IHQ9Wm8uZXZlbnQ7Wm8uZXZlbnQ9bjt0cnl7by5wcm9ncmVzcy5jYWxsKGksYyl9ZmluYWxseXta
by5ldmVudD10fX0saS5oZWFkZXI9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj0obisiIikudG9Mb3dl
ckNhc2UoKSxhcmd1bWVudHMubGVuZ3RoPDI/YVtuXToobnVsbD09dD9kZWxldGUgYVtuXTphW25d
PXQrIiIsaSl9LGkubWltZVR5cGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
KHQ9bnVsbD09bj9udWxsOm4rIiIsaSk6dH0saS5yZXNwb25zZVR5cGU9ZnVuY3Rpb24obil7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bixpKTpzfSxpLnJlc3BvbnNlPWZ1bmN0aW9uKG4pe3Jl
dHVybiBlPW4saX0sWyJnZXQiLCJwb3N0Il0uZm9yRWFjaChmdW5jdGlvbihuKXtpW25dPWZ1bmN0
aW9uKCl7cmV0dXJuIGkuc2VuZC5hcHBseShpLFtuXS5jb25jYXQoWG8oYXJndW1lbnRzKSkpfX0p
LGkuc2VuZD1mdW5jdGlvbihlLHIsdSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlv
biI9PXR5cGVvZiByJiYodT1yLHI9bnVsbCksYy5vcGVuKGUsbiwhMCksbnVsbD09dHx8ImFjY2Vw
dCJpbiBhfHwoYS5hY2NlcHQ9dCsiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGwg
aW4gYSljLnNldFJlcXVlc3RIZWFkZXIobCxhW2xdKTtyZXR1cm4gbnVsbCE9dCYmYy5vdmVycmlk
ZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUodCksbnVsbCE9cyYmKGMucmVzcG9uc2VUeXBl
PXMpLG51bGwhPXUmJmkub24oImVycm9yIix1KS5vbigibG9hZCIsZnVuY3Rpb24obil7dShudWxs
LG4pfSksby5iZWZvcmVzZW5kLmNhbGwoaSxjKSxjLnNlbmQobnVsbD09cj9udWxsOnIpLGl9LGku
YWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLGl9LFpvLnJlYmluZChpLG8sIm9uIiks
bnVsbD09cj9pOmkuZ2V0KEV0KHIpKX1mdW5jdGlvbiBFdChuKXtyZXR1cm4gMT09PW4ubGVuZ3Ro
P2Z1bmN0aW9uKHQsZSl7bihudWxsPT10P2U6bnVsbCl9Om59ZnVuY3Rpb24gQXQoKXt2YXIgbj1D
dCgpLHQ9TnQoKS1uO3Q+MjQ/KGlzRmluaXRlKHQpJiYoY2xlYXJUaW1lb3V0KCRhKSwkYT1zZXRU
aW1lb3V0KEF0LHQpKSxYYT0wKTooWGE9MSxXYShBdCkpfWZ1bmN0aW9uIEN0KCl7dmFyIG49RGF0
ZS5ub3coKTtmb3IoQmE9WmE7QmE7KW4+PUJhLnQmJihCYS5mPUJhLmMobi1CYS50KSksQmE9QmEu
bjtyZXR1cm4gbn1mdW5jdGlvbiBOdCgpe2Zvcih2YXIgbix0PVphLGU9MS8wO3Q7KXQuZj90PW4/
bi5uPXQubjpaYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49dCkubik7cmV0dXJuIFZhPW4sZX1m
dW5jdGlvbiB6dChuLHQpe3JldHVybiB0LShuP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxO
MTApOjEpfWZ1bmN0aW9uIEx0KG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyp1YSg4LXQpKTtyZXR1
cm57c2NhbGU6dD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBu
KmV9LHN5bWJvbDpufX1mdW5jdGlvbiBUdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1uLnRob3VzYW5k
cyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9cj9mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5s
ZW5ndGgsdT1bXSxpPTAsbz1yWzBdO3Q+MCYmbz4wOyl1LnB1c2gobi5zdWJzdHJpbmcodC09byx0
K28pKSxvPXJbaT0oaSsxKSVyLmxlbmd0aF07cmV0dXJuIHUucmV2ZXJzZSgpLmpvaW4oZSl9Ond0
O3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1HYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8
Ij4iLGE9ZVszXXx8IiIsYz1lWzRdfHwiIixzPWVbNV0sbD0rZVs2XSxmPWVbN10saD1lWzhdLGc9
ZVs5XSxwPTEsdj0iIixkPSIiLG09ITE7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKHN8
fCIwIj09PXImJiI9Ij09PW8pJiYocz1yPSIwIixvPSI9IixmJiYobC09TWF0aC5mbG9vcigobC0x
KS80KSkpLGcpe2Nhc2UibiI6Zj0hMCxnPSJnIjticmVhaztjYXNlIiUiOnA9MTAwLGQ9IiUiLGc9
ImYiO2JyZWFrO2Nhc2UicCI6cD0xMDAsZD0iJSIsZz0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8i
OmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZy50b0xvd2VyQ2FzZSgpKTtjYXNlImMi
OmNhc2UiZCI6bT0hMCxoPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGc9InIifSIkIj09PWMmJih2PXVb
MF0sZD11WzFdKSwiciIhPWd8fGh8fChnPSJnIiksbnVsbCE9aCYmKCJnIj09Zz9oPU1hdGgubWF4
KDEsTWF0aC5taW4oMjEsaCkpOigiZSI9PWd8fCJmIj09ZykmJihoPU1hdGgubWF4KDAsTWF0aC5t
aW4oMjAsaCkpKSksZz1LYS5nZXQoZyl8fHF0O3ZhciB5PXMmJmY7cmV0dXJuIGZ1bmN0aW9uKG4p
e3ZhciBlPWQ7aWYobSYmbiUxKXJldHVybiIiO3ZhciB1PTA+bnx8MD09PW4mJjA+MS9uPyhuPS1u
LCItIik6YTtpZigwPnApe3ZhciBjPVpvLmZvcm1hdFByZWZpeChuLGgpO249Yy5zY2FsZShuKSxl
PWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4PW4ubGFzdEluZGV4T2YoIi4iKSxN
PTA+eD9uOm4uc3Vic3RyaW5nKDAseCksXz0wPng/IiI6dCtuLnN1YnN0cmluZyh4KzEpOyFzJiZm
JiYoTT1pKE0pKTt2YXIgYj12Lmxlbmd0aCtNLmxlbmd0aCtfLmxlbmd0aCsoeT8wOnUubGVuZ3Ro
KSx3PWw+Yj9uZXcgQXJyYXkoYj1sLWIrMSkuam9pbihyKToiIjtyZXR1cm4geSYmKE09aSh3K00p
KSx1Kz12LG49TStfLCgiPCI9PT1vP3Urbit3OiI+Ij09PW8/dyt1K246Il4iPT09bz93LnN1YnN0
cmluZygwLGI+Pj0xKSt1K24rdy5zdWJzdHJpbmcoYik6dSsoeT9uOncrbikpK2V9fX1mdW5jdGlv
biBxdChuKXtyZXR1cm4gbisiIn1mdW5jdGlvbiBSdCgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVu
dHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9
ZnVuY3Rpb24gRHQobix0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9bih0KSxyPWkoZSwxKTtyZXR1
cm4gci10PnQtZT9lOnJ9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdChlPW4obmV3IG5jKGUtMSkpLDEp
LGV9ZnVuY3Rpb24gaShuLGUpe3JldHVybiB0KG49bmV3IG5jKCtuKSxlKSxufWZ1bmN0aW9uIG8o
bixyLGkpe3ZhciBvPXUobiksYT1bXTtpZihpPjEpZm9yKDtyPm87KWUobyklaXx8YS5wdXNoKG5l
dyBEYXRlKCtvKSksdChvLDEpO2Vsc2UgZm9yKDtyPm87KWEucHVzaChuZXcgRGF0ZSgrbykpLHQo
bywxKTtyZXR1cm4gYX1mdW5jdGlvbiBhKG4sdCxlKXt0cnl7bmM9UnQ7dmFyIHI9bmV3IFJ0O3Jl
dHVybiByLl89bixvKHIsdCxlKX1maW5hbGx5e25jPURhdGV9fW4uZmxvb3I9bixuLnJvdW5kPXIs
bi5jZWlsPXUsbi5vZmZzZXQ9aSxuLnJhbmdlPW87dmFyIGM9bi51dGM9UHQobik7cmV0dXJuIGMu
Zmxvb3I9YyxjLnJvdW5kPVB0KHIpLGMuY2VpbD1QdCh1KSxjLm9mZnNldD1QdChpKSxjLnJhbmdl
PWEsbn1mdW5jdGlvbiBQdChuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt0cnl7bmM9UnQ7dmFyIHI9
bmV3IFJ0O3JldHVybiByLl89dCxuKHIsZSkuX31maW5hbGx5e25jPURhdGV9fX1mdW5jdGlvbiBV
dChuKXtmdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlLHUsaSxvPVtdLGE9LTEs
Yz0wOysrYTxyOykzNz09PW4uY2hhckNvZGVBdChhKSYmKG8ucHVzaChuLnN1YnN0cmluZyhjLGEp
KSxudWxsIT0odT1lY1tlPW4uY2hhckF0KCsrYSldKSYmKGU9bi5jaGFyQXQoKythKSksKGk9Q1tl
XSkmJihlPWkodCxudWxsPT11PyJlIj09PWU/IiAiOiIwIjp1KSksby5wdXNoKGUpLGM9YSsxKTty
ZXR1cm4gby5wdXNoKG4uc3Vic3RyaW5nKGMsYSkpLG8uam9pbigiIil9dmFyIHI9bi5sZW5ndGg7
cmV0dXJuIHQucGFyc2U9ZnVuY3Rpb24odCl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAs
UzowLEw6MCxaOm51bGx9LHU9ZShyLG4sdCwwKTtpZih1IT10Lmxlbmd0aClyZXR1cm4gbnVsbDsi
cCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciBpPW51bGwhPXIuWiYmbmMhPT1SdCxvPW5l
dyhpP1J0Om5jKTtyZXR1cm4iaiJpbiByP28uc2V0RnVsbFllYXIoci55LDAsci5qKToidyJpbiBy
JiYoIlciaW4gcnx8IlUiaW4gcik/KG8uc2V0RnVsbFllYXIoci55LDAsMSksby5zZXRGdWxsWWVh
cihyLnksMCwiVyJpbiByPyhyLncrNiklNys3KnIuVy0oby5nZXREYXkoKSs1KSU3OnIudys3KnIu
VS0oby5nZXREYXkoKSs2KSU3KSk6by5zZXRGdWxsWWVhcihyLnksci5tLHIuZCksby5zZXRIb3Vy
cyhyLkgrTWF0aC5mbG9vcihyLlovMTAwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxpP28uXzpvfSx0
LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHR9ZnVuY3Rpb24gZShuLHQsZSxyKXtmb3Io
dmFyIHUsaSxvLGE9MCxjPXQubGVuZ3RoLHM9ZS5sZW5ndGg7Yz5hOyl7aWYocj49cylyZXR1cm4t
MTtpZih1PXQuY2hhckNvZGVBdChhKyspLDM3PT09dSl7aWYobz10LmNoYXJBdChhKyspLGk9Tltv
IGluIGVjP3QuY2hhckF0KGErKyk6b10sIWl8fChyPWkobixlLHIpKTwwKXJldHVybi0xfWVsc2Ug
aWYodSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gcihuLHQs
ZSl7Yi5sYXN0SW5kZXg9MDt2YXIgcj1iLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhu
Lnc9dy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1
KG4sdCxlKXtNLmxhc3RJbmRleD0wO3ZhciByPU0uZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJu
IHI/KG4udz1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0
aW9uIGkobix0LGUpe0UubGFzdEluZGV4PTA7dmFyIHI9RS5leGVjKHQuc3Vic3RyaW5nKGUpKTty
ZXR1cm4gcj8obi5tPUEuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9
ZnVuY3Rpb24gbyhuLHQsZSl7Uy5sYXN0SW5kZXg9MDt2YXIgcj1TLmV4ZWModC5zdWJzdHJpbmco
ZSkpO3JldHVybiByPyhuLm09ay5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3Ro
KTotMX1mdW5jdGlvbiBhKG4sdCxyKXtyZXR1cm4gZShuLEMuYy50b1N0cmluZygpLHQscil9ZnVu
Y3Rpb24gYyhuLHQscil7cmV0dXJuIGUobixDLngudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIHMo
bix0LHIpe3JldHVybiBlKG4sQy5YLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBsKG4sdCxlKXt2
YXIgcj14LmdldCh0LnN1YnN0cmluZyhlLGUrPTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxs
PT1yPy0xOihuLnA9cixlKX12YXIgZj1uLmRhdGVUaW1lLGg9bi5kYXRlLGc9bi50aW1lLHA9bi5w
ZXJpb2RzLHY9bi5kYXlzLGQ9bi5zaG9ydERheXMsbT1uLm1vbnRocyx5PW4uc2hvcnRNb250aHM7
dC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7bmM9UnQ7dmFyIHQ9bmV3IG5jO3Jl
dHVybiB0Ll89bixyKHQpfWZpbmFsbHl7bmM9RGF0ZX19dmFyIHI9dChuKTtyZXR1cm4gZS5wYXJz
ZT1mdW5jdGlvbihuKXt0cnl7bmM9UnQ7dmFyIHQ9ci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZp
bmFsbHl7bmM9RGF0ZX19LGUudG9TdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11
bHRpPXJlO3ZhciB4PVpvLm1hcCgpLE09SHQodiksXz1GdCh2KSxiPUh0KGQpLHc9RnQoZCksUz1I
dChtKSxrPUZ0KG0pLEU9SHQoeSksQT1GdCh5KTtwLmZvckVhY2goZnVuY3Rpb24obix0KXt4LnNl
dChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQz17YTpmdW5jdGlvbihuKXtyZXR1cm4gZFtuLmdl
dERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltuLmdldERheSgpXX0sYjpmdW5jdGlvbihu
KXtyZXR1cm4geVtuLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKG4pe3JldHVybiBtW24uZ2V0TW9u
dGgoKV19LGM6dChmKSxkOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0RGF0ZSgpLHQsMil9
LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlvbihu
LHQpe3JldHVybiBqdChuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihuLHQpe3JldHVybiBq
dChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQoMStR
YS5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5jdGlvbihuLHQpe3JldHVybiBqdChuLmdldE1pbGxp
c2Vjb25kcygpLHQsMyl9LG06ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRNb250aCgpKzEs
dCwyKX0sTTpmdW5jdGlvbihuLHQpe3JldHVybiBqdChuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1
bmN0aW9uKG4pe3JldHVybiBwWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0aW9uKG4sdCl7
cmV0dXJuIGp0KG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQo
UWEuc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9
LFc6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQoUWEubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dCho
KSxYOnQoZykseTpmdW5jdGlvbihuLHQpe3JldHVybiBqdChuLmdldEZ1bGxZZWFyKCklMTAwLHQs
Mil9LFk6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfSxa
OnRlLCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LE49e2E6cixBOnUsYjppLEI6byxjOmEsZDpX
dCxlOld0LEg6R3QsSTpHdCxqOkp0LEw6bmUsbTpCdCxNOkt0LHA6bCxTOlF0LFU6WXQsdzpPdCxX
Okl0LHg6YyxYOnMseTpWdCxZOlp0LFo6WHQsIiUiOmVlfTtyZXR1cm4gdH1mdW5jdGlvbiBqdChu
LHQsZSl7dmFyIHI9MD5uPyItIjoiIix1PShyPy1uOm4pKyIiLGk9dS5sZW5ndGg7cmV0dXJuIHIr
KGU+aT9uZXcgQXJyYXkoZS1pKzEpLmpvaW4odCkrdTp1KX1mdW5jdGlvbiBIdChuKXtyZXR1cm4g
bmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoWm8ucmVxdW90ZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1
bmN0aW9uIEZ0KG4pe2Zvcih2YXIgdD1uZXcgbyxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQuc2V0
KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1cm4gdH1mdW5jdGlvbiBPdChuLHQsZSl7cmMubGFz
dEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMSkpO3JldHVybiByPyhuLnc9
K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWXQobix0LGUpe3JjLmxhc3RJbmRleD0w
O3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLlU9K3JbMF0sZStyWzBd
Lmxlbmd0aCk6LTF9ZnVuY3Rpb24gSXQobix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4
ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9
ZnVuY3Rpb24gWnQobix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJp
bmcoZSxlKzQpKTtyZXR1cm4gcj8obi55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9u
IFZ0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsy
KSk7cmV0dXJuIHI/KG4ueT0kdCgrclswXSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQo
bix0LGUpe3JldHVybi9eWystXVxkezR9JC8udGVzdCh0PXQuc3Vic3RyaW5nKGUsZSs1KSk/KG4u
Wj0tdCxlKzUpOi0xfWZ1bmN0aW9uICR0KG4pe3JldHVybiBuKyhuPjY4PzE5MDA6MmUzKX1mdW5j
dGlvbiBCdChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhl
LGUrMikpO3JldHVybiByPyhuLm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFd0
KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7
cmV0dXJuIHI/KG4uZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdChuLHQsZSl7
cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMykpO3JldHVybiBy
PyhuLmo9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR3Qobix0LGUpe3JjLmxhc3RJ
bmRleD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5IPSty
WzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEt0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2
YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uTT0rclswXSxlK3Jb
MF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRdChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMu
ZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0
aCk6LTF9ZnVuY3Rpb24gbmUobix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4ZWModC5z
dWJzdHJpbmcoZSxlKzMpKTtyZXR1cm4gcj8obi5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1
bmN0aW9uIHRlKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKSxlPXQ+MD8iLSI6IisiLHI9
fn4odWEodCkvNjApLHU9dWEodCklNjA7cmV0dXJuIGUranQociwiMCIsMikranQodSwiMCIsMil9
ZnVuY3Rpb24gZWUobix0LGUpe3VjLmxhc3RJbmRleD0wO3ZhciByPXVjLmV4ZWModC5zdWJzdHJp
bmcoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHJlKG4pe2Zvcih2
YXIgdD1uLmxlbmd0aCxlPS0xOysrZTx0OyluW2VdWzBdPXRoaXMobltlXVswXSk7cmV0dXJuIGZ1
bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9bltlXTshclsxXSh0KTspcj1uWysrZV07cmV0dXJuIHJb
MF0odCl9fWZ1bmN0aW9uIHVlKCl7fWZ1bmN0aW9uIGllKG4sdCxlKXt2YXIgcj1lLnM9bit0LHU9
ci1uLGk9ci11O2UudD1uLWkrKHQtdSl9ZnVuY3Rpb24gb2Uobix0KXtuJiZjYy5oYXNPd25Qcm9w
ZXJ0eShuLnR5cGUpJiZjY1tuLnR5cGVdKG4sdCl9ZnVuY3Rpb24gYWUobix0LGUpe3ZhciByLHU9
LTEsaT1uLmxlbmd0aC1lO2Zvcih0LmxpbmVTdGFydCgpOysrdTxpOylyPW5bdV0sdC5wb2ludChy
WzBdLHJbMV0sclsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gY2Uobix0KXt2YXIgZT0tMSxyPW4u
bGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrZTxyOylhZShuW2VdLHQsMSk7dC5wb2x5Z29u
RW5kKCl9ZnVuY3Rpb24gc2UoKXtmdW5jdGlvbiBuKG4sdCl7bio9QWEsdD10KkFhLzIrYmEvNDt2
YXIgZT1uLXIsbz1lPj0wPzE6LTEsYT1vKmUsYz1NYXRoLmNvcyh0KSxzPU1hdGguc2luKHQpLGw9
aSpzLGY9dSpjK2wqTWF0aC5jb3MoYSksaD1sKm8qTWF0aC5zaW4oYSk7bGMuYWRkKE1hdGguYXRh
bjIoaCxmKSkscj1uLHU9YyxpPXN9dmFyIHQsZSxyLHUsaTtmYy5wb2ludD1mdW5jdGlvbihvLGEp
e2ZjLnBvaW50PW4scj0odD1vKSpBYSx1PU1hdGguY29zKGE9KGU9YSkqQWEvMitiYS80KSxpPU1h
dGguc2luKGEpfSxmYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBsZShuKXt2
YXIgdD1uWzBdLGU9blsxXSxyPU1hdGguY29zKGUpO3JldHVybltyKk1hdGguY29zKHQpLHIqTWF0
aC5zaW4odCksTWF0aC5zaW4oZSldfWZ1bmN0aW9uIGZlKG4sdCl7cmV0dXJuIG5bMF0qdFswXStu
WzFdKnRbMV0rblsyXSp0WzJdfWZ1bmN0aW9uIGhlKG4sdCl7cmV0dXJuW25bMV0qdFsyXS1uWzJd
KnRbMV0sblsyXSp0WzBdLW5bMF0qdFsyXSxuWzBdKnRbMV0tblsxXSp0WzBdXX1mdW5jdGlvbiBn
ZShuLHQpe25bMF0rPXRbMF0sblsxXSs9dFsxXSxuWzJdKz10WzJdfWZ1bmN0aW9uIHBlKG4sdCl7
cmV0dXJuW25bMF0qdCxuWzFdKnQsblsyXSp0XX1mdW5jdGlvbiB2ZShuKXt2YXIgdD1NYXRoLnNx
cnQoblswXSpuWzBdK25bMV0qblsxXStuWzJdKm5bMl0pO25bMF0vPXQsblsxXS89dCxuWzJdLz10
fWZ1bmN0aW9uIGRlKG4pe3JldHVybltNYXRoLmF0YW4yKG5bMV0sblswXSksRyhuWzJdKV19ZnVu
Y3Rpb24gbWUobix0KXtyZXR1cm4gdWEoblswXS10WzBdKTxrYSYmdWEoblsxXS10WzFdKTxrYX1m
dW5jdGlvbiB5ZShuLHQpe24qPUFhO3ZhciBlPU1hdGguY29zKHQqPUFhKTt4ZShlKk1hdGguY29z
KG4pLGUqTWF0aC5zaW4obiksTWF0aC5zaW4odCkpfWZ1bmN0aW9uIHhlKG4sdCxlKXsrK2hjLHBj
Kz0obi1wYykvaGMsdmMrPSh0LXZjKS9oYyxkYys9KGUtZGMpL2hjfWZ1bmN0aW9uIE1lKCl7ZnVu
Y3Rpb24gbihuLHUpe24qPUFhO3ZhciBpPU1hdGguY29zKHUqPUFhKSxvPWkqTWF0aC5jb3Mobiks
YT1pKk1hdGguc2luKG4pLGM9TWF0aC5zaW4odSkscz1NYXRoLmF0YW4yKE1hdGguc3FydCgocz1l
KmMtciphKSpzKyhzPXIqby10KmMpKnMrKHM9dCphLWUqbykqcyksdCpvK2UqYStyKmMpO2djKz1z
LG1jKz1zKih0Kyh0PW8pKSx5Yys9cyooZSsoZT1hKSkseGMrPXMqKHIrKHI9YykpLHhlKHQsZSxy
KX12YXIgdCxlLHI7d2MucG9pbnQ9ZnVuY3Rpb24odSxpKXt1Kj1BYTt2YXIgbz1NYXRoLmNvcyhp
Kj1BYSk7dD1vKk1hdGguY29zKHUpLGU9bypNYXRoLnNpbih1KSxyPU1hdGguc2luKGkpLHdjLnBv
aW50PW4seGUodCxlLHIpfX1mdW5jdGlvbiBfZSgpe3djLnBvaW50PXllfWZ1bmN0aW9uIGJlKCl7
ZnVuY3Rpb24gbihuLHQpe24qPUFhO3ZhciBlPU1hdGguY29zKHQqPUFhKSxvPWUqTWF0aC5jb3Mo
biksYT1lKk1hdGguc2luKG4pLGM9TWF0aC5zaW4odCkscz11KmMtaSphLGw9aSpvLXIqYyxmPXIq
YS11Km8saD1NYXRoLnNxcnQocypzK2wqbCtmKmYpLGc9cipvK3UqYStpKmMscD1oJiYtSihnKS9o
LHY9TWF0aC5hdGFuMihoLGcpO01jKz1wKnMsX2MrPXAqbCxiYys9cCpmLGdjKz12LG1jKz12Kihy
KyhyPW8pKSx5Yys9dioodSsodT1hKSkseGMrPXYqKGkrKGk9YykpLHhlKHIsdSxpKX12YXIgdCxl
LHIsdSxpO3djLnBvaW50PWZ1bmN0aW9uKG8sYSl7dD1vLGU9YSx3Yy5wb2ludD1uLG8qPUFhO3Zh
ciBjPU1hdGguY29zKGEqPUFhKTtyPWMqTWF0aC5jb3MobyksdT1jKk1hdGguc2luKG8pLGk9TWF0
aC5zaW4oYSkseGUocix1LGkpfSx3Yy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpLHdjLmxpbmVF
bmQ9X2Usd2MucG9pbnQ9eWV9fWZ1bmN0aW9uIHdlKCl7cmV0dXJuITB9ZnVuY3Rpb24gU2Uobix0
LGUscix1KXt2YXIgaT1bXSxvPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKCh0PW4u
bGVuZ3RoLTEpPD0wKSl7dmFyIHQsZT1uWzBdLHI9blt0XTtpZihtZShlLHIpKXt1LmxpbmVTdGFy
dCgpO2Zvcih2YXIgYT0wO3Q+YTsrK2EpdS5wb2ludCgoZT1uW2FdKVswXSxlWzFdKTtyZXR1cm4g
dS5saW5lRW5kKCksdm9pZCAwfXZhciBjPW5ldyBFZShlLG4sbnVsbCwhMCkscz1uZXcgRWUoZSxu
dWxsLGMsITEpO2Mubz1zLGkucHVzaChjKSxvLnB1c2gocyksYz1uZXcgRWUocixuLG51bGwsITEp
LHM9bmV3IEVlKHIsbnVsbCxjLCEwKSxjLm89cyxpLnB1c2goYyksby5wdXNoKHMpfX0pLG8uc29y
dCh0KSxrZShpKSxrZShvKSxpLmxlbmd0aCl7Zm9yKHZhciBhPTAsYz1lLHM9by5sZW5ndGg7cz5h
OysrYSlvW2FdLmU9Yz0hYztmb3IodmFyIGwsZixoPWlbMF07Oyl7Zm9yKHZhciBnPWgscD0hMDtn
LnY7KWlmKChnPWcubik9PT1oKXJldHVybjtsPWcueix1LmxpbmVTdGFydCgpO2Rve2lmKGcudj1n
Lm8udj0hMCxnLmUpe2lmKHApZm9yKHZhciBhPTAscz1sLmxlbmd0aDtzPmE7KythKXUucG9pbnQo
KGY9bFthXSlbMF0sZlsxXSk7ZWxzZSByKGcueCxnLm4ueCwxLHUpO2c9Zy5ufWVsc2V7aWYocCl7
bD1nLnAuejtmb3IodmFyIGE9bC5sZW5ndGgtMTthPj0wOy0tYSl1LnBvaW50KChmPWxbYV0pWzBd
LGZbMV0pfWVsc2UgcihnLngsZy5wLngsLTEsdSk7Zz1nLnB9Zz1nLm8sbD1nLnoscD0hcH13aGls
ZSghZy52KTt1LmxpbmVFbmQoKX19fWZ1bmN0aW9uIGtlKG4pe2lmKHQ9bi5sZW5ndGgpe2Zvcih2
YXIgdCxlLHI9MCx1PW5bMF07KytyPHQ7KXUubj1lPW5bcl0sZS5wPXUsdT1lO3Uubj1lPW5bMF0s
ZS5wPXV9fWZ1bmN0aW9uIEVlKG4sdCxlLHIpe3RoaXMueD1uLHRoaXMuej10LHRoaXMubz1lLHRo
aXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gQWUobix0LGUscil7
cmV0dXJuIGZ1bmN0aW9uKHUsaSl7ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXUodCxlKTtuKHQ9clsw
XSxlPXJbMV0pJiZpLnBvaW50KHQsZSl9ZnVuY3Rpb24gYShuLHQpe3ZhciBlPXUobix0KTtkLnBv
aW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gYygpe3kucG9pbnQ9YSxkLmxpbmVTdGFydCgpfWZ1bmN0
aW9uIHMoKXt5LnBvaW50PW8sZC5saW5lRW5kKCl9ZnVuY3Rpb24gbChuLHQpe3YucHVzaChbbix0
XSk7dmFyIGU9dShuLHQpO00ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBmKCl7TS5saW5lU3Rh
cnQoKSx2PVtdfWZ1bmN0aW9uIGgoKXtsKHZbMF1bMF0sdlswXVsxXSksTS5saW5lRW5kKCk7dmFy
IG4sdD1NLmNsZWFuKCksZT14LmJ1ZmZlcigpLHI9ZS5sZW5ndGg7aWYodi5wb3AoKSxwLnB1c2go
diksdj1udWxsLHIpaWYoMSZ0KXtuPWVbMF07dmFyIHUscj1uLmxlbmd0aC0xLG89LTE7aWYocj4w
KXtmb3IoX3x8KGkucG9seWdvblN0YXJ0KCksXz0hMCksaS5saW5lU3RhcnQoKTsrK288cjspaS5w
b2ludCgodT1uW29dKVswXSx1WzFdKTtpLmxpbmVFbmQoKX19ZWxzZSByPjEmJjImdCYmZS5wdXNo
KGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpLGcucHVzaChlLmZpbHRlcihDZSkpfXZhciBnLHAs
dixkPXQoaSksbT11LmludmVydChyWzBdLHJbMV0pLHk9e3BvaW50Om8sbGluZVN0YXJ0OmMsbGlu
ZUVuZDpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3kucG9pbnQ9bCx5LmxpbmVTdGFydD1mLHku
bGluZUVuZD1oLGc9W10scD1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3kucG9pbnQ9byx5Lmxp
bmVTdGFydD1jLHkubGluZUVuZD1zLGc9Wm8ubWVyZ2UoZyk7dmFyIG49TGUobSxwKTtnLmxlbmd0
aD8oX3x8KGkucG9seWdvblN0YXJ0KCksXz0hMCksU2UoZyx6ZSxuLGUsaSkpOm4mJihffHwoaS5w
b2x5Z29uU3RhcnQoKSxfPSEwKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5l
RW5kKCkpLF8mJihpLnBvbHlnb25FbmQoKSxfPSExKSxnPXA9bnVsbH0sc3BoZXJlOmZ1bmN0aW9u
KCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5l
RW5kKCksaS5wb2x5Z29uRW5kKCl9fSx4PU5lKCksTT10KHgpLF89ITE7cmV0dXJuIHl9fWZ1bmN0
aW9uIENlKG4pe3JldHVybiBuLmxlbmd0aD4xfWZ1bmN0aW9uIE5lKCl7dmFyIG4sdD1bXTtyZXR1
cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5wdXNoKG49W10pfSxwb2ludDpmdW5jdGlvbih0LGUp
e24ucHVzaChbdCxlXSl9LGxpbmVFbmQ6dixidWZmZXI6ZnVuY3Rpb24oKXt2YXIgZT10O3JldHVy
biB0PVtdLG49bnVsbCxlfSxyZWpvaW46ZnVuY3Rpb24oKXt0Lmxlbmd0aD4xJiZ0LnB1c2godC5w
b3AoKS5jb25jYXQodC5zaGlmdCgpKSl9fX1mdW5jdGlvbiB6ZShuLHQpe3JldHVybigobj1uLngp
WzBdPDA/blsxXS1TYS1rYTpTYS1uWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tU2Eta2E6U2EtdFsx
XSl9ZnVuY3Rpb24gTGUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0
aC5jb3MoZSksMF0saT0wLG89MDtsYy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5h
OysrYSl7dmFyIHM9dFthXSxsPXMubGVuZ3RoO2lmKGwpZm9yKHZhciBmPXNbMF0saD1mWzBdLGc9
ZlsxXS8yK2JhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09bCYmKGQ9
MCksbj1zW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrYmEvNCx4PU1hdGguc2luKHkpLE09TWF0aC5j
b3MoeSksXz1tLWgsYj1fPj0wPzE6LTEsdz1iKl8sUz13PmJhLGs9cCp4O2lmKGxjLmFkZChNYXRo
LmF0YW4yKGsqYipNYXRoLnNpbih3KSx2Kk0raypNYXRoLmNvcyh3KSkpLGkrPVM/XytiKndhOl8s
U15oPj1lXm0+PWUpe3ZhciBFPWhlKGxlKGYpLGxlKG4pKTt2ZShFKTt2YXIgQT1oZSh1LEUpO3Zl
KEEpO3ZhciBDPShTXl8+PTA/LTE6MSkqRyhBWzJdKTsocj5DfHxyPT09QyYmKEVbMF18fEVbMV0p
KSYmKG8rPVNeXz49MD8xOi0xKX1pZighZCsrKWJyZWFrO2g9bSxwPXgsdj1NLGY9bn19cmV0dXJu
KC1rYT5pfHxrYT5pJiYwPmxjKV4xJm99ZnVuY3Rpb24gVGUobil7dmFyIHQsZT0wLzAscj0wLzAs
dT0wLzA7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCksdD0xfSxwb2lu
dDpmdW5jdGlvbihpLG8pe3ZhciBhPWk+MD9iYTotYmEsYz11YShpLWUpO3VhKGMtYmEpPGthPyhu
LnBvaW50KGUscj0ocitvKS8yPjA/U2E6LVNhKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5s
aW5lU3RhcnQoKSxuLnBvaW50KGEsciksbi5wb2ludChpLHIpLHQ9MCk6dSE9PWEmJmM+PWJhJiYo
dWEoZS11KTxrYSYmKGUtPXUqa2EpLHVhKGktYSk8a2EmJihpLT1hKmthKSxyPXFlKGUscixpLG8p
LG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoYSxyKSx0PTAp
LG4ucG9pbnQoZT1pLHI9byksdT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCksZT1y
PTAvMH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi10fX19ZnVuY3Rpb24gcWUobix0LGUscil7
dmFyIHUsaSxvPU1hdGguc2luKG4tZSk7cmV0dXJuIHVhKG8pPmthP01hdGguYXRhbigoTWF0aC5z
aW4odCkqKGk9TWF0aC5jb3MocikpKk1hdGguc2luKGUpLU1hdGguc2luKHIpKih1PU1hdGguY29z
KHQpKSpNYXRoLnNpbihuKSkvKHUqaSpvKSk6KHQrcikvMn1mdW5jdGlvbiBSZShuLHQsZSxyKXt2
YXIgdTtpZihudWxsPT1uKXU9ZSpTYSxyLnBvaW50KC1iYSx1KSxyLnBvaW50KDAsdSksci5wb2lu
dChiYSx1KSxyLnBvaW50KGJhLDApLHIucG9pbnQoYmEsLXUpLHIucG9pbnQoMCwtdSksci5wb2lu
dCgtYmEsLXUpLHIucG9pbnQoLWJhLDApLHIucG9pbnQoLWJhLHUpO2Vsc2UgaWYodWEoblswXS10
WzBdKT5rYSl7dmFyIGk9blswXTx0WzBdP2JhOi1iYTt1PWUqaS8yLHIucG9pbnQoLWksdSksci5w
b2ludCgwLHUpLHIucG9pbnQoaSx1KX1lbHNlIHIucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBE
ZShuKXtmdW5jdGlvbiB0KG4sdCl7cmV0dXJuIE1hdGguY29zKG4pKk1hdGguY29zKHQpPml9ZnVu
Y3Rpb24gZShuKXt2YXIgZSxpLGMscyxsO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtzPWM9
ITEsbD0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBnLHA9W2YsaF0sdj10KGYsaCksZD1vP3Y/
MDp1KGYsaCk6dj91KGYrKDA+Zj9iYTotYmEpLGgpOjA7aWYoIWUmJihzPWM9dikmJm4ubGluZVN0
YXJ0KCksdiE9PWMmJihnPXIoZSxwKSwobWUoZSxnKXx8bWUocCxnKSkmJihwWzBdKz1rYSxwWzFd
Kz1rYSx2PXQocFswXSxwWzFdKSkpLHYhPT1jKWw9MCx2PyhuLmxpbmVTdGFydCgpLGc9cihwLGUp
LG4ucG9pbnQoZ1swXSxnWzFdKSk6KGc9cihlLHApLG4ucG9pbnQoZ1swXSxnWzFdKSxuLmxpbmVF
bmQoKSksZT1nO2Vsc2UgaWYoYSYmZSYmb152KXt2YXIgbTtkJml8fCEobT1yKHAsZSwhMCkpfHwo
bD0wLG8/KG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pLG4ucG9pbnQobVsx
XVswXSxtWzFdWzFdKSxuLmxpbmVFbmQoKSk6KG4ucG9pbnQobVsxXVswXSxtWzFdWzFdKSxuLmxp
bmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSF2fHxlJiZt
ZShlLHApfHxuLnBvaW50KHBbMF0scFsxXSksZT1wLGM9dixpPWR9LGxpbmVFbmQ6ZnVuY3Rpb24o
KXtjJiZuLmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHMmJmMp
PDwxfX19ZnVuY3Rpb24gcihuLHQsZSl7dmFyIHI9bGUobiksdT1sZSh0KSxvPVsxLDAsMF0sYT1o
ZShyLHUpLGM9ZmUoYSxhKSxzPWFbMF0sbD1jLXMqcztpZighbClyZXR1cm4hZSYmbjt2YXIgZj1p
KmMvbCxoPS1pKnMvbCxnPWhlKG8sYSkscD1wZShvLGYpLHY9cGUoYSxoKTtnZShwLHYpO3ZhciBk
PWcsbT1mZShwLGQpLHk9ZmUoZCxkKSx4PW0qbS15KihmZShwLHApLTEpO2lmKCEoMD54KSl7dmFy
IE09TWF0aC5zcXJ0KHgpLF89cGUoZCwoLW0tTSkveSk7aWYoZ2UoXyxwKSxfPWRlKF8pLCFlKXJl
dHVybiBfO3ZhciBiLHc9blswXSxTPXRbMF0saz1uWzFdLEU9dFsxXTt3PlMmJihiPXcsdz1TLFM9
Yik7dmFyIEE9Uy13LEM9dWEoQS1iYSk8a2EsTj1DfHxrYT5BO2lmKCFDJiZrPkUmJihiPWssaz1F
LEU9YiksTj9DP2srRT4wXl9bMV08KHVhKF9bMF0tdyk8a2E/azpFKTprPD1fWzFdJiZfWzFdPD1F
OkE+YmFeKHc8PV9bMF0mJl9bMF08PVMpKXt2YXIgej1wZShkLCgtbStNKS95KTtyZXR1cm4gZ2Uo
eixwKSxbXyxkZSh6KV19fX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bz9uOmJhLW4sdT0wO3JldHVy
bi1yPnQ/dXw9MTp0PnImJih1fD0yKSwtcj5lP3V8PTQ6ZT5yJiYodXw9OCksdX12YXIgaT1NYXRo
LmNvcyhuKSxvPWk+MCxhPXVhKGkpPmthLGM9c3Iobiw2KkFhKTtyZXR1cm4gQWUodCxlLGMsbz9b
MCwtbl06Wy1iYSxuLWJhXSl9ZnVuY3Rpb24gUGUobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHUp
e3ZhciBpLG89dS5hLGE9dS5iLGM9by54LHM9by55LGw9YS54LGY9YS55LGg9MCxnPTEscD1sLWMs
dj1mLXM7aWYoaT1uLWMscHx8IShpPjApKXtpZihpLz1wLDA+cCl7aWYoaD5pKXJldHVybjtnPmkm
JihnPWkpfWVsc2UgaWYocD4wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9aWYoaT1lLWMscHx8
ISgwPmkpKXtpZihpLz1wLDA+cCl7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWVsc2UgaWYocD4w
KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9aWYoaT10LXMsdnx8IShpPjApKXtpZihpLz12LDA+
dil7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfWVsc2UgaWYodj4wKXtpZihpPmcpcmV0dXJuO2k+
aCYmKGg9aSl9aWYoaT1yLXMsdnx8ISgwPmkpKXtpZihpLz12LDA+dil7aWYoaT5nKXJldHVybjtp
PmgmJihoPWkpfWVsc2UgaWYodj4wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9cmV0dXJuIGg+
MCYmKHUuYT17eDpjK2gqcCx5OnMraCp2fSksMT5nJiYodS5iPXt4OmMrZypwLHk6cytnKnZ9KSx1
fX19fX19ZnVuY3Rpb24gVWUobix0LGUscil7ZnVuY3Rpb24gdShyLHUpe3JldHVybiB1YShyWzBd
LW4pPGthP3U+MD8wOjM6dWEoclswXS1lKTxrYT91PjA/MjoxOnVhKHJbMV0tdCk8a2E/dT4wPzE6
MDp1PjA/MzoyfWZ1bmN0aW9uIGkobix0KXtyZXR1cm4gbyhuLngsdC54KX1mdW5jdGlvbiBvKG4s
dCl7dmFyIGU9dShuLDEpLHI9dSh0LDEpO3JldHVybiBlIT09cj9lLXI6MD09PWU/dFsxXS1uWzFd
OjE9PT1lP25bMF0tdFswXToyPT09ZT9uWzFdLXRbMV06dFswXS1uWzBdfXJldHVybiBmdW5jdGlv
bihhKXtmdW5jdGlvbiBjKG4pe2Zvcih2YXIgdD0wLGU9ZC5sZW5ndGgscj1uWzFdLHU9MDtlPnU7
Kyt1KWZvcih2YXIgaSxvPTEsYT1kW3VdLGM9YS5sZW5ndGgscz1hWzBdO2M+bzsrK28paT1hW29d
LHNbMV08PXI/aVsxXT5yJiZXKHMsaSxuKT4wJiYrK3Q6aVsxXTw9ciYmVyhzLGksbik8MCYmLS10
LHM9aTtyZXR1cm4gMCE9PXR9ZnVuY3Rpb24gcyhpLGEsYyxzKXt2YXIgbD0wLGY9MDtpZihudWxs
PT1pfHwobD11KGksYykpIT09KGY9dShhLGMpKXx8byhpLGEpPDBeYz4wKXtkbyBzLnBvaW50KDA9
PT1sfHwzPT09bD9uOmUsbD4xP3I6dCk7d2hpbGUoKGw9KGwrYys0KSU0KSE9PWYpfWVsc2Ugcy5w
b2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIGwodSxpKXtyZXR1cm4gdT49biYmZT49dSYmaT49dCYm
cj49aX1mdW5jdGlvbiBmKG4sdCl7bChuLHQpJiZhLnBvaW50KG4sdCl9ZnVuY3Rpb24gaCgpe04u
cG9pbnQ9cCxkJiZkLnB1c2gobT1bXSksUz0hMCx3PSExLF89Yj0wLzB9ZnVuY3Rpb24gZygpe3Ym
JihwKHkseCksTSYmdyYmQS5yZWpvaW4oKSx2LnB1c2goQS5idWZmZXIoKSkpLE4ucG9pbnQ9Zix3
JiZhLmxpbmVFbmQoKX1mdW5jdGlvbiBwKG4sdCl7bj1NYXRoLm1heCgta2MsTWF0aC5taW4oa2Ms
bikpLHQ9TWF0aC5tYXgoLWtjLE1hdGgubWluKGtjLHQpKTt2YXIgZT1sKG4sdCk7aWYoZCYmbS5w
dXNoKFtuLHRdKSxTKXk9bix4PXQsTT1lLFM9ITEsZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChu
LHQpKTtlbHNlIGlmKGUmJncpYS5wb2ludChuLHQpO2Vsc2V7dmFyIHI9e2E6e3g6Xyx5OmJ9LGI6
e3g6bix5OnR9fTtDKHIpPyh3fHwoYS5saW5lU3RhcnQoKSxhLnBvaW50KHIuYS54LHIuYS55KSks
YS5wb2ludChyLmIueCxyLmIueSksZXx8YS5saW5lRW5kKCksaz0hMSk6ZSYmKGEubGluZVN0YXJ0
KCksYS5wb2ludChuLHQpLGs9ITEpfV89bixiPXQsdz1lfXZhciB2LGQsbSx5LHgsTSxfLGIsdyxT
LGssRT1hLEE9TmUoKSxDPVBlKG4sdCxlLHIpLE49e3BvaW50OmYsbGluZVN0YXJ0OmgsbGluZUVu
ZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2E9QSx2PVtdLGQ9W10saz0hMH0scG9seWdvbkVu
ZDpmdW5jdGlvbigpe2E9RSx2PVpvLm1lcmdlKHYpO3ZhciB0PWMoW24scl0pLGU9ayYmdCx1PXYu
bGVuZ3RoOyhlfHx1KSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCkscyhudWxs
LG51bGwsMSxhKSxhLmxpbmVFbmQoKSksdSYmU2UodixpLHQscyxhKSxhLnBvbHlnb25FbmQoKSks
dj1kPW09bnVsbH19O3JldHVybiBOfX1mdW5jdGlvbiBqZShuLHQpe2Z1bmN0aW9uIGUoZSxyKXty
ZXR1cm4gZT1uKGUsciksdChlWzBdLGVbMV0pfXJldHVybiBuLmludmVydCYmdC5pbnZlcnQmJihl
LmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuaW52ZXJ0KGUsciksZSYmbi5pbnZlcnQo
ZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gSGUobil7dmFyIHQ9MCxlPWJhLzMscj10cihuKSx1PXIo
dCxlKTtyZXR1cm4gdS5wYXJhbGxlbHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/cih0PW5bMF0qYmEvMTgwLGU9blsxXSpiYS8xODApOlsxODAqKHQvYmEpLDE4MCooZS9iYSld
fSx1fWZ1bmN0aW9uIEZlKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIq
dSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3Mobild
fXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1h
dGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1
cm5bTWF0aC5hdGFuMihuLGUpL3UsRygoaS0obipuK2UqZSkqdSp1KS8oMip1KSldfSxlfWZ1bmN0
aW9uIE9lKCl7ZnVuY3Rpb24gbihuLHQpe0FjKz11Km4tcip0LHI9bix1PXR9dmFyIHQsZSxyLHU7
VGMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtUYy5wb2ludD1uLHQ9cj1pLGU9dT1vfSxUYy5saW5lRW5k
PWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBZZShuLHQpe0NjPm4mJihDYz1uKSxuPnpjJiYo
emM9biksTmM+dCYmKE5jPXQpLHQ+TGMmJihMYz10KX1mdW5jdGlvbiBJZSgpe2Z1bmN0aW9uIG4o
bix0KXtvLnB1c2goIk0iLG4sIiwiLHQsaSl9ZnVuY3Rpb24gdChuLHQpe28ucHVzaCgiTSIsbiwi
LCIsdCksYS5wb2ludD1lfWZ1bmN0aW9uIGUobix0KXtvLnB1c2goIkwiLG4sIiwiLHQpfWZ1bmN0
aW9uIHIoKXthLnBvaW50PW59ZnVuY3Rpb24gdSgpe28ucHVzaCgiWiIpfXZhciBpPVplKDQuNSks
bz1bXSxhPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe2EucG9pbnQ9dH0sbGluZUVuZDpy
LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2EubGluZUVuZD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9u
KCl7YS5saW5lRW5kPXIsYS5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4g
aT1aZShuKSxhfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihvLmxlbmd0aCl7dmFyIG49by5qb2luKCIi
KTtyZXR1cm4gbz1bXSxufX19O3JldHVybiBhfWZ1bmN0aW9uIFplKG4pe3JldHVybiJtMCwiK24r
ImEiK24rIiwiK24rIiAwIDEsMSAwLCIrLTIqbisiYSIrbisiLCIrbisiIDAgMSwxIDAsIisyKm4r
InoifWZ1bmN0aW9uIFZlKG4sdCl7cGMrPW4sdmMrPXQsKytkY31mdW5jdGlvbiBYZSgpe2Z1bmN0
aW9uIG4obixyKXt2YXIgdT1uLXQsaT1yLWUsbz1NYXRoLnNxcnQodSp1K2kqaSk7bWMrPW8qKHQr
bikvMix5Yys9byooZStyKS8yLHhjKz1vLFZlKHQ9bixlPXIpfXZhciB0LGU7UmMucG9pbnQ9ZnVu
Y3Rpb24ocix1KXtSYy5wb2ludD1uLFZlKHQ9cixlPXUpfX1mdW5jdGlvbiAkZSgpe1JjLnBvaW50
PVZlfWZ1bmN0aW9uIEJlKCl7ZnVuY3Rpb24gbihuLHQpe3ZhciBlPW4tcixpPXQtdSxvPU1hdGgu
c3FydChlKmUraSppKTttYys9byoocituKS8yLHljKz1vKih1K3QpLzIseGMrPW8sbz11Km4tcip0
LE1jKz1vKihyK24pLF9jKz1vKih1K3QpLGJjKz0zKm8sVmUocj1uLHU9dCl9dmFyIHQsZSxyLHU7
UmMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtSYy5wb2ludD1uLFZlKHQ9cj1pLGU9dT1vKX0sUmMubGlu
ZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gV2Uobil7ZnVuY3Rpb24gdCh0LGUpe24u
bW92ZVRvKHQsZSksbi5hcmModCxlLG8sMCx3YSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQs
ZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXth
LnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQs
bGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1
bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxh
LnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0OnZ9
O3JldHVybiBhfWZ1bmN0aW9uIEplKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1m
dW5jdGlvbiBlKHQpe3JldHVybiBRZSh0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChl
WzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2lu
dChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXt4PTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1m
dW5jdGlvbiBpKGUscil7dmFyIGk9bGUoW2Uscl0pLG89bihlLHIpO3UoeCxNLHksXyxiLHcseD1v
WzBdLE09b1sxXSx5PWUsXz1pWzBdLGI9aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KHgsTSl9ZnVu
Y3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9
cyxTLmxpbmVFbmQ9bH1mdW5jdGlvbiBzKG4sdCl7aShmPW4saD10KSxnPXgscD1NLHY9XyxkPWIs
bT13LFMucG9pbnQ9aX1mdW5jdGlvbiBsKCl7dSh4LE0seSxfLGIsdyxnLHAsZix2LGQsbSxhLHQp
LFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LHgsTSxfLGIsdyxTPXtwb2ludDpl
LGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25T
dGFydCgpLFMubGluZVN0YXJ0PWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQo
KSxTLmxpbmVTdGFydD1yfX07cmV0dXJuIFN9ZnVuY3Rpb24gdSh0LGUscixhLGMscyxsLGYsaCxn
LHAsdixkLG0pe3ZhciB5PWwtdCx4PWYtZSxNPXkqeSt4Kng7aWYoTT40KmkmJmQtLSl7dmFyIF89
YStnLGI9YytwLHc9cyt2LFM9TWF0aC5zcXJ0KF8qXytiKmIrdyp3KSxrPU1hdGguYXNpbih3Lz1T
KSxFPXVhKHVhKHcpLTEpPGthfHx1YShyLWgpPGthPyhyK2gpLzI6TWF0aC5hdGFuMihiLF8pLEE9
bihFLGspLEM9QVswXSxOPUFbMV0sej1DLXQsTD1OLWUsVD14KnoteSpMOyhUKlQvTT5pfHx1YSgo
eSp6K3gqTCkvTS0uNSk+LjN8fG8+YSpnK2MqcCtzKnYpJiYodSh0LGUscixhLGMscyxDLE4sRSxf
Lz1TLGIvPVMsdyxkLG0pLG0ucG9pbnQoQyxOKSx1KEMsTixFLF8sYix3LGwsZixoLGcscCx2LGQs
bSkpfX12YXIgaT0uNSxvPU1hdGguY29zKDMwKkFhKSxhPTE2OwotcmV0dXJuIHQucHJlY2lzaW9u
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6
TWF0aC5zcXJ0KGkpfSx0fWZ1bmN0aW9uIEdlKG4pe3ZhciB0PUplKGZ1bmN0aW9uKHQsZSl7cmV0
dXJuIG4oW3QqQ2EsZSpDYV0pfSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlcih0KG4pKX19
ZnVuY3Rpb24gS2Uobil7dGhpcy5zdHJlYW09bn1mdW5jdGlvbiBRZShuLHQpe3JldHVybntwb2lu
dDp0LHNwaGVyZTpmdW5jdGlvbigpe24uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24u
bGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0
OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9s
eWdvbkVuZCgpfX19ZnVuY3Rpb24gbnIobil7cmV0dXJuIHRyKGZ1bmN0aW9uKCl7cmV0dXJuIG59
KSgpfWZ1bmN0aW9uIHRyKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49YShuWzBdKkFhLG5bMV0q
QWEpLFtuWzBdKmgrYyxzLW5bMV0qaF19ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1hLmludmVydCgo
blswXS1jKS9oLChzLW5bMV0pL2gpLG4mJltuWzBdKkNhLG5bMV0qQ2FdfWZ1bmN0aW9uIHIoKXth
PWplKG89aXIobSx5LHgpLGkpO3ZhciBuPWkodixkKTtyZXR1cm4gYz1nLW5bMF0qaCxzPXArblsx
XSpoLHUoKX1mdW5jdGlvbiB1KCl7cmV0dXJuIGwmJihsLnZhbGlkPSExLGw9bnVsbCksdH12YXIg
aSxvLGEsYyxzLGwsZj1KZShmdW5jdGlvbihuLHQpe3JldHVybiBuPWkobix0KSxbblswXSpoK2Ms
cy1uWzFdKmhdfSksaD0xNTAsZz00ODAscD0yNTAsdj0wLGQ9MCxtPTAseT0wLHg9MCxNPVNjLF89
d3QsYj1udWxsLHc9bnVsbDtyZXR1cm4gdC5zdHJlYW09ZnVuY3Rpb24obil7cmV0dXJuIGwmJihs
LnZhbGlkPSExKSxsPWVyKE0obyxmKF8obikpKSksbC52YWxpZD0hMCxsfSx0LmNsaXBBbmdsZT1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT1udWxsPT1uPyhiPW4sU2MpOkRl
KChiPStuKSpBYSksdSgpKTpifSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KHc9bixfPW4/VWUoblswXVswXSxuWzBdWzFdLG5bMV1bMF0sblsxXVsxXSk6
d3QsdSgpKTp3fSx0LnNjYWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyho
PStuLHIoKSk6aH0sdC50cmFuc2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/KGc9K25bMF0scD0rblsxXSxyKCkpOltnLHBdfSx0LmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8odj1uWzBdJTM2MCpBYSxkPW5bMV0lMzYwKkFhLHIoKSk6W3Yq
Q2EsZCpDYV19LHQucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyht
PW5bMF0lMzYwKkFhLHk9blsxXSUzNjAqQWEseD1uLmxlbmd0aD4yP25bMl0lMzYwKkFhOjAscigp
KTpbbSpDYSx5KkNhLHgqQ2FdfSxaby5yZWJpbmQodCxmLCJwcmVjaXNpb24iKSxmdW5jdGlvbigp
e3JldHVybiBpPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuaW52ZXJ0PWkuaW52ZXJ0JiZlLHIo
KX19ZnVuY3Rpb24gZXIobil7cmV0dXJuIFFlKG4sZnVuY3Rpb24odCxlKXtuLnBvaW50KHQqQWEs
ZSpBYSl9KX1mdW5jdGlvbiBycihuLHQpe3JldHVybltuLHRdfWZ1bmN0aW9uIHVyKG4sdCl7cmV0
dXJuW24+YmE/bi13YTotYmE+bj9uK3dhOm4sdF19ZnVuY3Rpb24gaXIobix0LGUpe3JldHVybiBu
P3R8fGU/amUoYXIobiksY3IodCxlKSk6YXIobik6dHx8ZT9jcih0LGUpOnVyfWZ1bmN0aW9uIG9y
KG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB0Kz1uLFt0PmJhP3Qtd2E6LWJhPnQ/dCt3
YTp0LGVdfX1mdW5jdGlvbiBhcihuKXt2YXIgdD1vcihuKTtyZXR1cm4gdC5pbnZlcnQ9b3IoLW4p
LHR9ZnVuY3Rpb24gY3Iobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9TWF0aC5jb3ModCksYT1N
YXRoLmNvcyhuKSplLGM9TWF0aC5zaW4obikqZSxzPU1hdGguc2luKHQpLGw9cypyK2EqdTtyZXR1
cm5bTWF0aC5hdGFuMihjKmktbCpvLGEqci1zKnUpLEcobCppK2MqbyldfXZhciByPU1hdGguY29z
KG4pLHU9TWF0aC5zaW4obiksaT1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBlLmlu
dmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxjPU1h
dGguc2luKG4pKmUscz1NYXRoLnNpbih0KSxsPXMqaS1jKm87cmV0dXJuW01hdGguYXRhbjIoYypp
K3MqbyxhKnIrbCp1KSxHKGwqci1hKnUpXX0sZX1mdW5jdGlvbiBzcihuLHQpe3ZhciBlPU1hdGgu
Y29zKG4pLHI9TWF0aC5zaW4obik7cmV0dXJuIGZ1bmN0aW9uKHUsaSxvLGEpe3ZhciBjPW8qdDtu
dWxsIT11Pyh1PWxyKGUsdSksaT1scihlLGkpLChvPjA/aT51OnU+aSkmJih1Kz1vKndhKSk6KHU9
bitvKndhLGk9bi0uNSpjKTtmb3IodmFyIHMsbD11O28+MD9sPmk6aT5sO2wtPWMpYS5wb2ludCgo
cz1kZShbZSwtcipNYXRoLmNvcyhsKSwtcipNYXRoLnNpbihsKV0pKVswXSxzWzFdKX19ZnVuY3Rp
b24gbHIobix0KXt2YXIgZT1sZSh0KTtlWzBdLT1uLHZlKGUpO3ZhciByPUooLWVbMV0pO3JldHVy
bigoLWVbMl08MD8tcjpyKSsyKk1hdGguUEkta2EpJSgyKk1hdGguUEkpfWZ1bmN0aW9uIGZyKG4s
dCxlKXt2YXIgcj1aby5yYW5nZShuLHQta2EsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihu
KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW24sdF19KX19ZnVuY3Rpb24gaHIobix0
LGUpe3ZhciByPVpvLnJhbmdlKG4sdC1rYSxlKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKG4p
e3JldHVybiByLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdCxuXX0pfX1mdW5jdGlvbiBncihuKXty
ZXR1cm4gbi5zb3VyY2V9ZnVuY3Rpb24gcHIobil7cmV0dXJuIG4udGFyZ2V0fWZ1bmN0aW9uIHZy
KG4sdCxlLHIpe3ZhciB1PU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCksbz1NYXRoLmNvcyhyKSxh
PU1hdGguc2luKHIpLGM9dSpNYXRoLmNvcyhuKSxzPXUqTWF0aC5zaW4obiksbD1vKk1hdGguY29z
KGUpLGY9bypNYXRoLnNpbihlKSxoPTIqTWF0aC5hc2luKE1hdGguc3FydCh0dChyLXQpK3Uqbyp0
dChlLW4pKSksZz0xL01hdGguc2luKGgpLHA9aD9mdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNpbihu
Kj1oKSpnLGU9TWF0aC5zaW4oaC1uKSpnLHI9ZSpjK3QqbCx1PWUqcyt0KmYsbz1lKmkrdCphO3Jl
dHVybltNYXRoLmF0YW4yKHUscikqQ2EsTWF0aC5hdGFuMihvLE1hdGguc3FydChyKnIrdSp1KSkq
Q2FdfTpmdW5jdGlvbigpe3JldHVybltuKkNhLHQqQ2FdfTtyZXR1cm4gcC5kaXN0YW5jZT1oLHB9
ZnVuY3Rpb24gZHIoKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9TWF0aC5zaW4odSo9QWEpLG89TWF0
aC5jb3ModSksYT11YSgobio9QWEpLXQpLGM9TWF0aC5jb3MoYSk7RGMrPU1hdGguYXRhbjIoTWF0
aC5zcXJ0KChhPW8qTWF0aC5zaW4oYSkpKmErKGE9cippLWUqbypjKSphKSxlKmkrcipvKmMpLHQ9
bixlPWkscj1vfXZhciB0LGUscjtQYy5wb2ludD1mdW5jdGlvbih1LGkpe3Q9dSpBYSxlPU1hdGgu
c2luKGkqPUFhKSxyPU1hdGguY29zKGkpLFBjLnBvaW50PW59LFBjLmxpbmVFbmQ9ZnVuY3Rpb24o
KXtQYy5wb2ludD1QYy5saW5lRW5kPXZ9fWZ1bmN0aW9uIG1yKG4sdCl7ZnVuY3Rpb24gZSh0LGUp
e3ZhciByPU1hdGguY29zKHQpLHU9TWF0aC5jb3MoZSksaT1uKHIqdSk7cmV0dXJuW2kqdSpNYXRo
LnNpbih0KSxpKk1hdGguc2luKGUpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obixlKXt2YXIg
cj1NYXRoLnNxcnQobipuK2UqZSksdT10KHIpLGk9TWF0aC5zaW4odSksbz1NYXRoLmNvcyh1KTty
ZXR1cm5bTWF0aC5hdGFuMihuKmkscipvKSxNYXRoLmFzaW4ociYmZSppL3IpXX0sZX1mdW5jdGlv
biB5cihuLHQpe2Z1bmN0aW9uIGUobix0KXtvPjA/LVNhK2thPnQmJih0PS1TYStrYSk6dD5TYS1r
YSYmKHQ9U2Eta2EpO3ZhciBlPW8vTWF0aC5wb3codSh0KSxpKTtyZXR1cm5bZSpNYXRoLnNpbihp
Km4pLG8tZSpNYXRoLmNvcyhpKm4pXX12YXIgcj1NYXRoLmNvcyhuKSx1PWZ1bmN0aW9uKG4pe3Jl
dHVybiBNYXRoLnRhbihiYS80K24vMil9LGk9bj09PXQ/TWF0aC5zaW4obik6TWF0aC5sb2coci9N
YXRoLmNvcyh0KSkvTWF0aC5sb2codSh0KS91KG4pKSxvPXIqTWF0aC5wb3codShuKSxpKS9pO3Jl
dHVybiBpPyhlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdCxyPUIoaSkqTWF0aC5zcXJ0
KG4qbitlKmUpO3JldHVybltNYXRoLmF0YW4yKG4sZSkvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhv
L3IsMS9pKSktU2FdfSxlKTpNcn1mdW5jdGlvbiB4cihuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIg
ZT1pLXQ7cmV0dXJuW2UqTWF0aC5zaW4odSpuKSxpLWUqTWF0aC5jb3ModSpuKV19dmFyIHI9TWF0
aC5jb3MobiksdT1uPT09dD9NYXRoLnNpbihuKTooci1NYXRoLmNvcyh0KSkvKHQtbiksaT1yL3Ur
bjtyZXR1cm4gdWEodSk8a2E/cnI6KGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9aS10O3Jl
dHVybltNYXRoLmF0YW4yKG4sZSkvdSxpLUIodSkqTWF0aC5zcXJ0KG4qbitlKmUpXX0sZSl9ZnVu
Y3Rpb24gTXIobix0KXtyZXR1cm5bbixNYXRoLmxvZyhNYXRoLnRhbihiYS80K3QvMikpXX1mdW5j
dGlvbiBfcihuKXt2YXIgdCxlPW5yKG4pLHI9ZS5zY2FsZSx1PWUudHJhbnNsYXRlLGk9ZS5jbGlw
RXh0ZW50O3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50
cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS50cmFuc2xhdGU9ZnVu
Y3Rpb24oKXt2YXIgbj11LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNsaXBF
eHRlbnQobnVsbCk6ZTpufSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7dmFyIG89aS5hcHBseShl
LGFyZ3VtZW50cyk7aWYobz09PWUpe2lmKHQ9bnVsbD09bil7dmFyIGE9YmEqcigpLGM9dSgpO2ko
W1tjWzBdLWEsY1sxXS1hXSxbY1swXSthLGNbMV0rYV1dKX19ZWxzZSB0JiYobz1udWxsKTtyZXR1
cm4gb30sZS5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIGJyKG4sdCl7cmV0dXJuW01hdGgubG9n
KE1hdGgudGFuKGJhLzQrdC8yKSksLW5dfWZ1bmN0aW9uIHdyKG4pe3JldHVybiBuWzBdfWZ1bmN0
aW9uIFNyKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIGtyKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxl
PVswLDFdLHI9Mix1PTI7dD51O3UrKyl7Zm9yKDtyPjEmJlcobltlW3ItMl1dLG5bZVtyLTFdXSxu
W3VdKTw9MDspLS1yO2VbcisrXT11fXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24gRXIobix0
KXtyZXR1cm4gblswXS10WzBdfHxuWzFdLXRbMV19ZnVuY3Rpb24gQXIobix0LGUpe3JldHVybihl
WzBdLXRbMF0pKihuWzFdLXRbMV0pPChlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIENy
KG4sdCxlLHIpe3ZhciB1PW5bMF0saT1lWzBdLG89dFswXS11LGE9clswXS1pLGM9blsxXSxzPWVb
MV0sbD10WzFdLWMsZj1yWzFdLXMsaD0oYSooYy1zKS1mKih1LWkpKS8oZipvLWEqbCk7cmV0dXJu
W3UraCpvLGMraCpsXX1mdW5jdGlvbiBOcihuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTty
ZXR1cm4hKHRbMF0tZVswXXx8dFsxXS1lWzFdKX1mdW5jdGlvbiB6cigpe0dyKHRoaXMpLHRoaXMu
ZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBMcihuKXt2YXIgdD1CYy5w
b3AoKXx8bmV3IHpyO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIFRyKG4pe1lyKG4pLFZjLnJl
bW92ZShuKSxCYy5wdXNoKG4pLEdyKG4pfWZ1bmN0aW9uIHFyKG4pe3ZhciB0PW4uY2lyY2xlLGU9
dC54LHI9dC5jeSx1PXt4OmUseTpyfSxpPW4uUCxvPW4uTixhPVtuXTtUcihuKTtmb3IodmFyIGM9
aTtjLmNpcmNsZSYmdWEoZS1jLmNpcmNsZS54KTxrYSYmdWEoci1jLmNpcmNsZS5jeSk8a2E7KWk9
Yy5QLGEudW5zaGlmdChjKSxUcihjKSxjPWk7YS51bnNoaWZ0KGMpLFlyKGMpO2Zvcih2YXIgcz1v
O3MuY2lyY2xlJiZ1YShlLXMuY2lyY2xlLngpPGthJiZ1YShyLXMuY2lyY2xlLmN5KTxrYTspbz1z
Lk4sYS5wdXNoKHMpLFRyKHMpLHM9bzthLnB1c2gocyksWXIocyk7dmFyIGwsZj1hLmxlbmd0aDtm
b3IobD0xO2Y+bDsrK2wpcz1hW2xdLGM9YVtsLTFdLEJyKHMuZWRnZSxjLnNpdGUscy5zaXRlLHUp
O2M9YVswXSxzPWFbZi0xXSxzLmVkZ2U9WHIoYy5zaXRlLHMuc2l0ZSxudWxsLHUpLE9yKGMpLE9y
KHMpfWZ1bmN0aW9uIFJyKG4pe2Zvcih2YXIgdCxlLHIsdSxpPW4ueCxvPW4ueSxhPVZjLl87YTsp
aWYocj1EcihhLG8pLWkscj5rYSlhPWEuTDtlbHNle2lmKHU9aS1QcihhLG8pLCEodT5rYSkpe3I+
LWthPyh0PWEuUCxlPWEpOnU+LWthPyh0PWEsZT1hLk4pOnQ9ZT1hO2JyZWFrfWlmKCFhLlIpe3Q9
YTticmVha31hPWEuUn12YXIgYz1McihuKTtpZihWYy5pbnNlcnQodCxjKSx0fHxlKXtpZih0PT09
ZSlyZXR1cm4gWXIodCksZT1Mcih0LnNpdGUpLFZjLmluc2VydChjLGUpLGMuZWRnZT1lLmVkZ2U9
WHIodC5zaXRlLGMuc2l0ZSksT3IodCksT3IoZSksdm9pZCAwO2lmKCFlKXJldHVybiBjLmVkZ2U9
WHIodC5zaXRlLGMuc2l0ZSksdm9pZCAwO1lyKHQpLFlyKGUpO3ZhciBzPXQuc2l0ZSxsPXMueCxm
PXMueSxoPW4ueC1sLGc9bi55LWYscD1lLnNpdGUsdj1wLngtbCxkPXAueS1mLG09MiooaCpkLWcq
dikseT1oKmgrZypnLHg9dip2K2QqZCxNPXt4OihkKnktZyp4KS9tK2wseTooaCp4LXYqeSkvbStm
fTtCcihlLmVkZ2UscyxwLE0pLGMuZWRnZT1YcihzLG4sbnVsbCxNKSxlLmVkZ2U9WHIobixwLG51
bGwsTSksT3IodCksT3IoZSl9fWZ1bmN0aW9uIERyKG4sdCl7dmFyIGU9bi5zaXRlLHI9ZS54LHU9
ZS55LGk9dS10O2lmKCFpKXJldHVybiByO3ZhciBvPW4uUDtpZighbylyZXR1cm4tMS8wO2U9by5z
aXRlO3ZhciBhPWUueCxjPWUueSxzPWMtdDtpZighcylyZXR1cm4gYTt2YXIgbD1hLXIsZj0xL2kt
MS9zLGg9bC9zO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioobCpsLygtMipzKS1jK3Mv
Mit1LWkvMikpKS9mK3I6KHIrYSkvMn1mdW5jdGlvbiBQcihuLHQpe3ZhciBlPW4uTjtpZihlKXJl
dHVybiBEcihlLHQpO3ZhciByPW4uc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9u
IFVyKG4pe3RoaXMuc2l0ZT1uLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24ganIobil7Zm9yKHZhciB0
LGUscix1LGksbyxhLGMscyxsLGY9blswXVswXSxoPW5bMV1bMF0sZz1uWzBdWzFdLHA9blsxXVsx
XSx2PVpjLGQ9di5sZW5ndGg7ZC0tOylpZihpPXZbZF0saSYmaS5wcmVwYXJlKCkpZm9yKGE9aS5l
ZGdlcyxjPWEubGVuZ3RoLG89MDtjPm87KWw9YVtvXS5lbmQoKSxyPWwueCx1PWwueSxzPWFbKytv
JWNdLnN0YXJ0KCksdD1zLngsZT1zLnksKHVhKHItdCk+a2F8fHVhKHUtZSk+a2EpJiYoYS5zcGxp
Y2UobywwLG5ldyBXcigkcihpLnNpdGUsbCx1YShyLWYpPGthJiZwLXU+a2E/e3g6Zix5OnVhKHQt
Zik8a2E/ZTpwfTp1YSh1LXApPGthJiZoLXI+a2E/e3g6dWEoZS1wKTxrYT90OmgseTpwfTp1YShy
LWgpPGthJiZ1LWc+a2E/e3g6aCx5OnVhKHQtaCk8a2E/ZTpnfTp1YSh1LWcpPGthJiZyLWY+a2E/
e3g6dWEoZS1nKTxrYT90OmYseTpnfTpudWxsKSxpLnNpdGUsbnVsbCkpLCsrYyl9ZnVuY3Rpb24g
SHIobix0KXtyZXR1cm4gdC5hbmdsZS1uLmFuZ2xlfWZ1bmN0aW9uIEZyKCl7R3IodGhpcyksdGhp
cy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE9yKG4p
e3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgcj10LnNpdGUsdT1uLnNpdGUsaT1lLnNpdGU7
aWYociE9PWkpe3ZhciBvPXUueCxhPXUueSxjPXIueC1vLHM9ci55LWEsbD1pLngtbyxmPWkueS1h
LGg9MiooYypmLXMqbCk7aWYoIShoPj0tRWEpKXt2YXIgZz1jKmMrcypzLHA9bCpsK2YqZix2PShm
KmctcypwKS9oLGQ9KGMqcC1sKmcpL2gsZj1kK2EsbT1XYy5wb3AoKXx8bmV3IEZyO20uYXJjPW4s
bS5zaXRlPXUsbS54PXYrbyxtLnk9ZitNYXRoLnNxcnQodip2K2QqZCksbS5jeT1mLG4uY2lyY2xl
PW07Zm9yKHZhciB5PW51bGwseD0kYy5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14
Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9
eC5SfSRjLmluc2VydCh5LG0pLHl8fChYYz1tKX19fX1mdW5jdGlvbiBZcihuKXt2YXIgdD1uLmNp
cmNsZTt0JiYodC5QfHwoWGM9dC5OKSwkYy5yZW1vdmUodCksV2MucHVzaCh0KSxHcih0KSxuLmNp
cmNsZT1udWxsKX1mdW5jdGlvbiBJcihuKXtmb3IodmFyIHQsZT1JYyxyPVBlKG5bMF1bMF0sblsw
XVsxXSxuWzFdWzBdLG5bMV1bMV0pLHU9ZS5sZW5ndGg7dS0tOyl0PWVbdV0sKCFacih0LG4pfHwh
cih0KXx8dWEodC5hLngtdC5iLngpPGthJiZ1YSh0LmEueS10LmIueSk8a2EpJiYodC5hPXQuYj1u
dWxsLGUuc3BsaWNlKHUsMSkpfWZ1bmN0aW9uIFpyKG4sdCl7dmFyIGU9bi5iO2lmKGUpcmV0dXJu
ITA7dmFyIHIsdSxpPW4uYSxvPXRbMF1bMF0sYT10WzFdWzBdLGM9dFswXVsxXSxzPXRbMV1bMV0s
bD1uLmwsZj1uLnIsaD1sLngsZz1sLnkscD1mLngsdj1mLnksZD0oaCtwKS8yLG09KGcrdikvMjtp
Zih2PT09Zyl7aWYobz5kfHxkPj1hKXJldHVybjtpZihoPnApe2lmKGkpe2lmKGkueT49cylyZXR1
cm59ZWxzZSBpPXt4OmQseTpjfTtlPXt4OmQseTpzfX1lbHNle2lmKGkpe2lmKGkueTxjKXJldHVy
bn1lbHNlIGk9e3g6ZCx5OnN9O2U9e3g6ZCx5OmN9fX1lbHNlIGlmKHI9KGgtcCkvKHYtZyksdT1t
LXIqZCwtMT5yfHxyPjEpaWYoaD5wKXtpZihpKXtpZihpLnk+PXMpcmV0dXJufWVsc2UgaT17eDoo
Yy11KS9yLHk6Y307ZT17eDoocy11KS9yLHk6c319ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59
ZWxzZSBpPXt4OihzLXUpL3IseTpzfTtlPXt4OihjLXUpL3IseTpjfX1lbHNlIGlmKHY+Zyl7aWYo
aSl7aWYoaS54Pj1hKXJldHVybn1lbHNlIGk9e3g6byx5OnIqbyt1fTtlPXt4OmEseTpyKmErdX19
ZWxzZXtpZihpKXtpZihpLng8bylyZXR1cm59ZWxzZSBpPXt4OmEseTpyKmErdX07ZT17eDpvLHk6
cipvK3V9fXJldHVybiBuLmE9aSxuLmI9ZSwhMH1mdW5jdGlvbiBWcihuLHQpe3RoaXMubD1uLHRo
aXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBYcihuLHQsZSxyKXt2YXIgdT1uZXcg
VnIobix0KTtyZXR1cm4gSWMucHVzaCh1KSxlJiZCcih1LG4sdCxlKSxyJiZCcih1LHQsbixyKSxa
Y1tuLmldLmVkZ2VzLnB1c2gobmV3IFdyKHUsbix0KSksWmNbdC5pXS5lZGdlcy5wdXNoKG5ldyBX
cih1LHQsbikpLHV9ZnVuY3Rpb24gJHIobix0LGUpe3ZhciByPW5ldyBWcihuLG51bGwpO3JldHVy
biByLmE9dCxyLmI9ZSxJYy5wdXNoKHIpLHJ9ZnVuY3Rpb24gQnIobix0LGUscil7bi5hfHxuLmI/
bi5sPT09ZT9uLmI9cjpuLmE9cjoobi5hPXIsbi5sPXQsbi5yPWUpfWZ1bmN0aW9uIFdyKG4sdCxl
KXt2YXIgcj1uLmEsdT1uLmI7dGhpcy5lZGdlPW4sdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1lP01h
dGguYXRhbjIoZS55LXQueSxlLngtdC54KTpuLmw9PT10P01hdGguYXRhbjIodS54LXIueCxyLnkt
dS55KTpNYXRoLmF0YW4yKHIueC11LngsdS55LXIueSl9ZnVuY3Rpb24gSnIoKXt0aGlzLl89bnVs
bH1mdW5jdGlvbiBHcihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIEty
KG4sdCl7dmFyIGU9dCxyPXQuUix1PWUuVTt1P3UuTD09PWU/dS5MPXI6dS5SPXI6bi5fPXIsci5V
PXUsZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBRcihuLHQpe3Zh
ciBlPXQscj10LkwsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1y
LGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gbnUobil7Zm9yKDtuLkw7KW49
bi5MO3JldHVybiBufWZ1bmN0aW9uIHR1KG4sdCl7dmFyIGUscix1LGk9bi5zb3J0KGV1KS5wb3Ao
KTtmb3IoSWM9W10sWmM9bmV3IEFycmF5KG4ubGVuZ3RoKSxWYz1uZXcgSnIsJGM9bmV3IEpyOzsp
aWYodT1YYyxpJiYoIXV8fGkueTx1Lnl8fGkueT09PXUueSYmaS54PHUueCkpKGkueCE9PWV8fGku
eSE9PXIpJiYoWmNbaS5pXT1uZXcgVXIoaSksUnIoaSksZT1pLngscj1pLnkpLGk9bi5wb3AoKTtl
bHNle2lmKCF1KWJyZWFrO3FyKHUuYXJjKX10JiYoSXIodCksanIodCkpO3ZhciBvPXtjZWxsczpa
YyxlZGdlczpJY307cmV0dXJuIFZjPSRjPUljPVpjPW51bGwsb31mdW5jdGlvbiBldShuLHQpe3Jl
dHVybiB0Lnktbi55fHx0Lngtbi54fWZ1bmN0aW9uIHJ1KG4sdCxlKXtyZXR1cm4obi54LWUueCkq
KHQueS1uLnkpLShuLngtdC54KSooZS55LW4ueSl9ZnVuY3Rpb24gdXUobil7cmV0dXJuIG4ueH1m
dW5jdGlvbiBpdShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIG91KCl7cmV0dXJue2xlYWY6ITAsbm9k
ZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfX1mdW5jdGlvbiBhdShuLHQsZSxyLHUsaSl7
aWYoIW4odCxlLHIsdSxpKSl7dmFyIG89LjUqKGUrdSksYT0uNSoocitpKSxjPXQubm9kZXM7Y1sw
XSYmYXUobixjWzBdLGUscixvLGEpLGNbMV0mJmF1KG4sY1sxXSxvLHIsdSxhKSxjWzJdJiZhdShu
LGNbMl0sZSxhLG8saSksY1szXSYmYXUobixjWzNdLG8sYSx1LGkpfX1mdW5jdGlvbiBjdShuLHQp
e249Wm8ucmdiKG4pLHQ9Wm8ucmdiKHQpO3ZhciBlPW4ucixyPW4uZyx1PW4uYixpPXQuci1lLG89
dC5nLXIsYT10LmItdTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK2R0KE1hdGgucm91bmQo
ZStpKm4pKStkdChNYXRoLnJvdW5kKHIrbypuKSkrZHQoTWF0aC5yb3VuZCh1K2EqbikpfX1mdW5j
dGlvbiBzdShuLHQpe3ZhciBlLHI9e30sdT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPWh1KG5b
ZV0sdFtlXSk6dVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwodVtlXT10W2VdKTtyZXR1cm4g
ZnVuY3Rpb24obil7Zm9yKGUgaW4gcil1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIGx1
KG4sdCl7cmV0dXJuIHQtPW49K24sZnVuY3Rpb24oZSl7cmV0dXJuIG4rdCplfX1mdW5jdGlvbiBm
dShuLHQpe3ZhciBlLHIsdSxpPUdjLmxhc3RJbmRleD1LYy5sYXN0SW5kZXg9MCxvPS0xLGE9W10s
Yz1bXTtmb3Iobis9IiIsdCs9IiI7KGU9R2MuZXhlYyhuKSkmJihyPUtjLmV4ZWModCkpOykodT1y
LmluZGV4KT5pJiYodT10LnN1YnN0cmluZyhpLHUpLGFbb10/YVtvXSs9dTphWysrb109dSksKGU9
ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6YVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVz
aCh7aTpvLHg6bHUoZSxyKX0pKSxpPUtjLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9
dC5zdWJzdHJpbmcoaSksYVtvXT9hW29dKz11OmFbKytvXT11KSxhLmxlbmd0aDwyP2NbMF0/KHQ9
Y1swXS54LGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06
KHQ9Yy5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciBlLHI9MDt0PnI7KytyKWFbKGU9Y1tyXSku
aV09ZS54KG4pO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gaHUobix0KXtmb3IodmFyIGUs
cj1aby5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLXI+PTAmJiEoZT1aby5pbnRlcnBvbGF0b3JzW3Jd
KG4sdCkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gZ3Uobix0KXt2YXIgZSxyPVtdLHU9W10saT1uLmxl
bmd0aCxvPXQubGVuZ3RoLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpO2ZvcihlPTA7YT5l
OysrZSlyLnB1c2goaHUobltlXSx0W2VdKSk7Zm9yKDtpPmU7KytlKXVbZV09bltlXTtmb3IoO28+
ZTsrK2UpdVtlXT10W2VdO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZT0wO2E+ZTsrK2UpdVtlXT1y
W2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBwdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJu
IDA+PXQ/MDp0Pj0xPzE6bih0KX19ZnVuY3Rpb24gdnUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3Jl
dHVybiAxLW4oMS10KX19ZnVuY3Rpb24gZHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi41
KiguNT50P24oMip0KToyLW4oMi0yKnQpKX19ZnVuY3Rpb24gbXUobil7cmV0dXJuIG4qbn1mdW5j
dGlvbiB5dShuKXtyZXR1cm4gbipuKm59ZnVuY3Rpb24geHUobil7aWYoMD49bilyZXR1cm4gMDtp
ZihuPj0xKXJldHVybiAxO3ZhciB0PW4qbixlPXQqbjtyZXR1cm4gNCooLjU+bj9lOjMqKG4tdCkr
ZS0uNzUpfWZ1bmN0aW9uIE11KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3co
dCxuKX19ZnVuY3Rpb24gX3Uobil7cmV0dXJuIDEtTWF0aC5jb3MobipTYSl9ZnVuY3Rpb24gYnUo
bil7cmV0dXJuIE1hdGgucG93KDIsMTAqKG4tMSkpfWZ1bmN0aW9uIHd1KG4pe3JldHVybiAxLU1h
dGguc3FydCgxLW4qbil9ZnVuY3Rpb24gU3Uobix0KXt2YXIgZTtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aDwyJiYodD0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/ZT10L3dhKk1hdGguYXNpbigxL24pOihu
PTEsZT10LzQpLGZ1bmN0aW9uKHIpe3JldHVybiAxK24qTWF0aC5wb3coMiwtMTAqcikqTWF0aC5z
aW4oKHItZSkqd2EvdCl9fWZ1bmN0aW9uIGt1KG4pe3JldHVybiBufHwobj0xLjcwMTU4KSxmdW5j
dGlvbih0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfX1mdW5jdGlvbiBFdShuKXtyZXR1cm4gMS8y
Ljc1Pm4/Ny41NjI1Km4qbjoyLzIuNzU+bj83LjU2MjUqKG4tPTEuNS8yLjc1KSpuKy43NToyLjUv
Mi43NT5uPzcuNTYyNSoobi09Mi4yNS8yLjc1KSpuKy45Mzc1OjcuNTYyNSoobi09Mi42MjUvMi43
NSkqbisuOTg0Mzc1fWZ1bmN0aW9uIEF1KG4sdCl7bj1aby5oY2wobiksdD1aby5oY2wodCk7dmFy
IGU9bi5oLHI9bi5jLHU9bi5sLGk9dC5oLWUsbz10LmMtcixhPXQubC11O3JldHVybiBpc05hTihv
KSYmKG89MCxyPWlzTmFOKHIpP3QuYzpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/dC5oOmUp
Omk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBvdChlK2kq
bixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIEN1KG4sdCl7bj1aby5oc2wobiksdD1aby5oc2wo
dCk7dmFyIGU9bi5oLHI9bi5zLHU9bi5sLGk9dC5oLWUsbz10LnMtcixhPXQubC11O3JldHVybiBp
c05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/
dC5oOmUpOmk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiB1
dChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIE51KG4sdCl7bj1aby5sYWIobiksdD1a
by5sYWIodCk7dmFyIGU9bi5sLHI9bi5hLHU9bi5iLGk9dC5sLWUsbz10LmEtcixhPXQuYi11O3Jl
dHVybiBmdW5jdGlvbihuKXtyZXR1cm4gY3QoZStpKm4scitvKm4sdSthKm4pKyIifX1mdW5jdGlv
biB6dShuLHQpe3JldHVybiB0LT1uLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4rdCpl
KX19ZnVuY3Rpb24gTHUobil7dmFyIHQ9W24uYSxuLmJdLGU9W24uYyxuLmRdLHI9cXUodCksdT1U
dSh0LGUpLGk9cXUoUnUoZSx0LC11KSl8fDA7dFswXSplWzFdPGVbMF0qdFsxXSYmKHRbMF0qPS0x
LHRbMV0qPS0xLHIqPS0xLHUqPS0xKSx0aGlzLnJvdGF0ZT0ocj9NYXRoLmF0YW4yKHRbMV0sdFsw
XSk6TWF0aC5hdGFuMigtZVswXSxlWzFdKSkqQ2EsdGhpcy50cmFuc2xhdGU9W24uZSxuLmZdLHRo
aXMuc2NhbGU9W3IsaV0sdGhpcy5za2V3PWk/TWF0aC5hdGFuMih1LGkpKkNhOjB9ZnVuY3Rpb24g
VHUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXX1mdW5jdGlvbiBxdShuKXt2YXIgdD1N
YXRoLnNxcnQoVHUobixuKSk7cmV0dXJuIHQmJihuWzBdLz10LG5bMV0vPXQpLHR9ZnVuY3Rpb24g
UnUobix0LGUpe3JldHVybiBuWzBdKz1lKnRbMF0sblsxXSs9ZSp0WzFdLG59ZnVuY3Rpb24gRHUo
bix0KXt2YXIgZSxyPVtdLHU9W10saT1aby50cmFuc2Zvcm0obiksbz1aby50cmFuc2Zvcm0odCks
YT1pLnRyYW5zbGF0ZSxjPW8udHJhbnNsYXRlLHM9aS5yb3RhdGUsbD1vLnJvdGF0ZSxmPWkuc2tl
dyxoPW8uc2tldyxnPWkuc2NhbGUscD1vLnNjYWxlO3JldHVybiBhWzBdIT1jWzBdfHxhWzFdIT1j
WzFdPyhyLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKSx1LnB1c2goe2k6MSx4
Omx1KGFbMF0sY1swXSl9LHtpOjMseDpsdShhWzFdLGNbMV0pfSkpOmNbMF18fGNbMV0/ci5wdXNo
KCJ0cmFuc2xhdGUoIitjKyIpIik6ci5wdXNoKCIiKSxzIT1sPyhzLWw+MTgwP2wrPTM2MDpsLXM+
MTgwJiYocys9MzYwKSx1LnB1c2goe2k6ci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiLG51bGwsIiki
KS0yLHg6bHUocyxsKX0pKTpsJiZyLnB1c2goci5wb3AoKSsicm90YXRlKCIrbCsiKSIpLGYhPWg/
dS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6bHUoZixoKX0p
OmgmJnIucHVzaChyLnBvcCgpKyJza2V3WCgiK2grIikiKSxnWzBdIT1wWzBdfHxnWzFdIT1wWzFd
PyhlPXIucHVzaChyLnBvcCgpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKSx1LnB1c2goe2k6
ZS00LHg6bHUoZ1swXSxwWzBdKX0se2k6ZS0yLHg6bHUoZ1sxXSxwWzFdKX0pKTooMSE9cFswXXx8
MSE9cFsxXSkmJnIucHVzaChyLnBvcCgpKyJzY2FsZSgiK3ArIikiKSxlPXUubGVuZ3RoLGZ1bmN0
aW9uKG4pe2Zvcih2YXIgdCxpPS0xOysraTxlOylyWyh0PXVbaV0pLmldPXQueChuKTtyZXR1cm4g
ci5qb2luKCIiKX19ZnVuY3Rpb24gUHUobix0KXtyZXR1cm4gdD10LShuPStuKT8xLyh0LW4pOjAs
ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikqdH19ZnVuY3Rpb24gVXUobix0KXtyZXR1cm4gdD10LShu
PStuKT8xLyh0LW4pOjAsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSwo
ZS1uKSp0KSl9fWZ1bmN0aW9uIGp1KG4pe2Zvcih2YXIgdD1uLnNvdXJjZSxlPW4udGFyZ2V0LHI9
RnUodCxlKSx1PVt0XTt0IT09cjspdD10LnBhcmVudCx1LnB1c2godCk7Zm9yKHZhciBpPXUubGVu
Z3RoO2UhPT1yOyl1LnNwbGljZShpLDAsZSksZT1lLnBhcmVudDtyZXR1cm4gdX1mdW5jdGlvbiBI
dShuKXtmb3IodmFyIHQ9W10sZT1uLnBhcmVudDtudWxsIT1lOyl0LnB1c2gobiksbj1lLGU9ZS5w
YXJlbnQ7cmV0dXJuIHQucHVzaChuKSx0fWZ1bmN0aW9uIEZ1KG4sdCl7aWYobj09PXQpcmV0dXJu
IG47Zm9yKHZhciBlPUh1KG4pLHI9SHUodCksdT1lLnBvcCgpLGk9ci5wb3AoKSxvPW51bGw7dT09
PWk7KW89dSx1PWUucG9wKCksaT1yLnBvcCgpO3JldHVybiBvfWZ1bmN0aW9uIE91KG4pe24uZml4
ZWR8PTJ9ZnVuY3Rpb24gWXUobil7bi5maXhlZCY9LTd9ZnVuY3Rpb24gSXUobil7bi5maXhlZHw9
NCxuLnB4PW4ueCxuLnB5PW4ueX1mdW5jdGlvbiBadShuKXtuLmZpeGVkJj0tNX1mdW5jdGlvbiBW
dShuLHQsZSl7dmFyIHI9MCx1PTA7aWYobi5jaGFyZ2U9MCwhbi5sZWFmKWZvcih2YXIgaSxvPW4u
bm9kZXMsYT1vLmxlbmd0aCxjPS0xOysrYzxhOylpPW9bY10sbnVsbCE9aSYmKFZ1KGksdCxlKSxu
LmNoYXJnZSs9aS5jaGFyZ2Uscis9aS5jaGFyZ2UqaS5jeCx1Kz1pLmNoYXJnZSppLmN5KTtpZihu
LnBvaW50KXtuLmxlYWZ8fChuLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsbi5wb2ludC55Kz1N
YXRoLnJhbmRvbSgpLS41KTt2YXIgcz10KmVbbi5wb2ludC5pbmRleF07bi5jaGFyZ2UrPW4ucG9p
bnRDaGFyZ2U9cyxyKz1zKm4ucG9pbnQueCx1Kz1zKm4ucG9pbnQueX1uLmN4PXIvbi5jaGFyZ2Us
bi5jeT11L24uY2hhcmdlfWZ1bmN0aW9uIFh1KG4sdCl7cmV0dXJuIFpvLnJlYmluZChuLHQsInNv
cnQiLCJjaGlsZHJlbiIsInZhbHVlIiksbi5ub2Rlcz1uLG4ubGlua3M9S3Usbn1mdW5jdGlvbiAk
dShuLHQpe2Zvcih2YXIgZT1bbl07bnVsbCE9KG49ZS5wb3AoKSk7KWlmKHQobiksKHU9bi5jaGls
ZHJlbikmJihyPXUubGVuZ3RoKSlmb3IodmFyIHIsdTstLXI+PTA7KWUucHVzaCh1W3JdKX1mdW5j
dGlvbiBCdShuLHQpe2Zvcih2YXIgZT1bbl0scj1bXTtudWxsIT0obj1lLnBvcCgpKTspaWYoci5w
dXNoKG4pLChpPW4uY2hpbGRyZW4pJiYodT1pLmxlbmd0aCkpZm9yKHZhciB1LGksbz0tMTsrK288
dTspZS5wdXNoKGlbb10pO2Zvcig7bnVsbCE9KG49ci5wb3AoKSk7KXQobil9ZnVuY3Rpb24gV3Uo
bil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gSnUobil7cmV0dXJuIG4udmFsdWV9ZnVuY3Rp
b24gR3Uobix0KXtyZXR1cm4gdC52YWx1ZS1uLnZhbHVlfWZ1bmN0aW9uIEt1KG4pe3JldHVybiBa
by5tZXJnZShuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi5jaGlsZHJlbnx8W10pLm1hcChmdW5j
dGlvbih0KXtyZXR1cm57c291cmNlOm4sdGFyZ2V0OnR9fSl9KSl9ZnVuY3Rpb24gUXUobil7cmV0
dXJuIG4ueH1mdW5jdGlvbiBuaShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIHRpKG4sdCxlKXtuLnkw
PXQsbi55PWV9ZnVuY3Rpb24gZWkobil7cmV0dXJuIFpvLnJhbmdlKG4ubGVuZ3RoKX1mdW5jdGlv
biByaShuKXtmb3IodmFyIHQ9LTEsZT1uWzBdLmxlbmd0aCxyPVtdOysrdDxlOylyW3RdPTA7cmV0
dXJuIHJ9ZnVuY3Rpb24gdWkobil7Zm9yKHZhciB0LGU9MSxyPTAsdT1uWzBdWzFdLGk9bi5sZW5n
dGg7aT5lOysrZSkodD1uW2VdWzFdKT51JiYocj1lLHU9dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaWko
bil7cmV0dXJuIG4ucmVkdWNlKG9pLDApfWZ1bmN0aW9uIG9pKG4sdCl7cmV0dXJuIG4rdFsxXX1m
dW5jdGlvbiBhaShuLHQpe3JldHVybiBjaShuLE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkv
TWF0aC5MTjIrMSkpfWZ1bmN0aW9uIGNpKG4sdCl7Zm9yKHZhciBlPS0xLHI9K25bMF0sdT0oblsx
XS1yKS90LGk9W107KytlPD10OylpW2VdPXUqZStyO3JldHVybiBpfWZ1bmN0aW9uIHNpKG4pe3Jl
dHVybltaby5taW4obiksWm8ubWF4KG4pXX1mdW5jdGlvbiBsaShuLHQpe3JldHVybiBuLnZhbHVl
LXQudmFsdWV9ZnVuY3Rpb24gZmkobix0KXt2YXIgZT1uLl9wYWNrX25leHQ7bi5fcGFja19uZXh0
PXQsdC5fcGFja19wcmV2PW4sdC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24g
aGkobix0KXtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bn1mdW5jdGlvbiBnaShuLHQpe3Zh
ciBlPXQueC1uLngscj10Lnktbi55LHU9bi5yK3QucjtyZXR1cm4uOTk5KnUqdT5lKmUrcipyfWZ1
bmN0aW9uIHBpKG4pe2Z1bmN0aW9uIHQobil7bD1NYXRoLm1pbihuLngtbi5yLGwpLGY9TWF0aC5t
YXgobi54K24ucixmKSxoPU1hdGgubWluKG4ueS1uLnIsaCksZz1NYXRoLm1heChuLnkrbi5yLGcp
fWlmKChlPW4uY2hpbGRyZW4pJiYocz1lLmxlbmd0aCkpe3ZhciBlLHIsdSxpLG8sYSxjLHMsbD0x
LzAsZj0tMS8wLGg9MS8wLGc9LTEvMDtpZihlLmZvckVhY2godmkpLHI9ZVswXSxyLng9LXIucixy
Lnk9MCx0KHIpLHM+MSYmKHU9ZVsxXSx1Lng9dS5yLHUueT0wLHQodSkscz4yKSlmb3IoaT1lWzJd
LHlpKHIsdSxpKSx0KGkpLGZpKHIsaSksci5fcGFja19wcmV2PWksZmkoaSx1KSx1PXIuX3BhY2tf
bmV4dCxvPTM7cz5vO28rKyl7eWkocix1LGk9ZVtvXSk7dmFyIHA9MCx2PTEsZD0xO2ZvcihhPXUu
X3BhY2tfbmV4dDthIT09dTthPWEuX3BhY2tfbmV4dCx2KyspaWYoZ2koYSxpKSl7cD0xO2JyZWFr
fWlmKDE9PXApZm9yKGM9ci5fcGFja19wcmV2O2MhPT1hLl9wYWNrX3ByZXYmJiFnaShjLGkpO2M9
Yy5fcGFja19wcmV2LGQrKyk7cD8oZD52fHx2PT1kJiZ1LnI8ci5yP2hpKHIsdT1hKTpoaShyPWMs
dSksby0tKTooZmkocixpKSx1PWksdChpKSl9dmFyIG09KGwrZikvMix5PShoK2cpLzIseD0wO2Zv
cihvPTA7cz5vO28rKylpPWVbb10saS54LT1tLGkueS09eSx4PU1hdGgubWF4KHgsaS5yK01hdGgu
c3FydChpLngqaS54K2kueSppLnkpKTtuLnI9eCxlLmZvckVhY2goZGkpfX1mdW5jdGlvbiB2aShu
KXtuLl9wYWNrX25leHQ9bi5fcGFja19wcmV2PW59ZnVuY3Rpb24gZGkobil7ZGVsZXRlIG4uX3Bh
Y2tfbmV4dCxkZWxldGUgbi5fcGFja19wcmV2fWZ1bmN0aW9uIG1pKG4sdCxlLHIpe3ZhciB1PW4u
Y2hpbGRyZW47aWYobi54PXQrPXIqbi54LG4ueT1lKz1yKm4ueSxuLnIqPXIsdSlmb3IodmFyIGk9
LTEsbz11Lmxlbmd0aDsrK2k8bzspbWkodVtpXSx0LGUscil9ZnVuY3Rpb24geWkobix0LGUpe3Zh
ciByPW4ucitlLnIsdT10Lngtbi54LGk9dC55LW4ueTtpZihyJiYodXx8aSkpe3ZhciBvPXQucitl
LnIsYT11KnUraSppO28qPW8scio9cjt2YXIgYz0uNSsoci1vKS8oMiphKSxzPU1hdGguc3FydChN
YXRoLm1heCgwLDIqbyoocithKS0oci09YSkqci1vKm8pKS8oMiphKTtlLng9bi54K2MqdStzKmks
ZS55PW4ueStjKmktcyp1fWVsc2UgZS54PW4ueCtyLGUueT1uLnl9ZnVuY3Rpb24geGkobix0KXty
ZXR1cm4gbi5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBNaShuKXt2YXIgdD1uLmNoaWxk
cmVuO3JldHVybiB0Lmxlbmd0aD90WzBdOm4udH1mdW5jdGlvbiBfaShuKXt2YXIgdCxlPW4uY2hp
bGRyZW47cmV0dXJuKHQ9ZS5sZW5ndGgpP2VbdC0xXTpuLnR9ZnVuY3Rpb24gYmkobix0LGUpe3Zh
ciByPWUvKHQuaS1uLmkpO3QuYy09cix0LnMrPWUsbi5jKz1yLHQueis9ZSx0Lm0rPWV9ZnVuY3Rp
b24gd2kobil7Zm9yKHZhciB0LGU9MCxyPTAsdT1uLmNoaWxkcmVuLGk9dS5sZW5ndGg7LS1pPj0w
Oyl0PXVbaV0sdC56Kz1lLHQubSs9ZSxlKz10LnMrKHIrPXQuYyl9ZnVuY3Rpb24gU2kobix0LGUp
e3JldHVybiBuLmEucGFyZW50PT09dC5wYXJlbnQ/bi5hOmV9ZnVuY3Rpb24ga2kobil7cmV0dXJu
IDErWm8ubWF4KG4sZnVuY3Rpb24obil7cmV0dXJuIG4ueX0pfWZ1bmN0aW9uIEVpKG4pe3JldHVy
biBuLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiBuK3QueH0sMCkvbi5sZW5ndGh9ZnVuY3Rp
b24gQWkobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1cm4gdCYmdC5sZW5ndGg/QWkodFswXSk6bn1m
dW5jdGlvbiBDaShuKXt2YXIgdCxlPW4uY2hpbGRyZW47cmV0dXJuIGUmJih0PWUubGVuZ3RoKT9D
aShlW3QtMV0pOm59ZnVuY3Rpb24gTmkobil7cmV0dXJue3g6bi54LHk6bi55LGR4Om4uZHgsZHk6
bi5keX19ZnVuY3Rpb24gemkobix0KXt2YXIgZT1uLngrdFszXSxyPW4ueSt0WzBdLHU9bi5keC10
WzFdLXRbM10saT1uLmR5LXRbMF0tdFsyXTtyZXR1cm4gMD51JiYoZSs9dS8yLHU9MCksMD5pJiYo
cis9aS8yLGk9MCkse3g6ZSx5OnIsZHg6dSxkeTppfX1mdW5jdGlvbiBMaShuKXt2YXIgdD1uWzBd
LGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT50P1t0LGVdOltlLHRdfWZ1bmN0aW9uIFRpKG4pe3Jl
dHVybiBuLnJhbmdlRXh0ZW50P24ucmFuZ2VFeHRlbnQoKTpMaShuLnJhbmdlKCkpfWZ1bmN0aW9u
IHFpKG4sdCxlLHIpe3ZhciB1PWUoblswXSxuWzFdKSxpPXIodFswXSx0WzFdKTtyZXR1cm4gZnVu
Y3Rpb24obil7cmV0dXJuIGkodShuKSl9fWZ1bmN0aW9uIFJpKG4sdCl7dmFyIGUscj0wLHU9bi5s
ZW5ndGgtMSxpPW5bcl0sbz1uW3VdO3JldHVybiBpPm8mJihlPXIscj11LHU9ZSxlPWksaT1vLG89
ZSksbltyXT10LmZsb29yKGkpLG5bdV09dC5jZWlsKG8pLG59ZnVuY3Rpb24gRGkobil7cmV0dXJu
IG4/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvbikqbn0sY2VpbDpmdW5j
dGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvbikqbn19OnNzfWZ1bmN0aW9uIFBpKG4sdCxlLHIp
e3ZhciB1PVtdLGk9W10sbz0wLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTE7Zm9yKG5b
YV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysr
bzw9YTspdS5wdXNoKGUobltvLTFdLG5bb10pKSxpLnB1c2gocih0W28tMV0sdFtvXSkpO3JldHVy
biBmdW5jdGlvbih0KXt2YXIgZT1aby5iaXNlY3Qobix0LDEsYSktMTtyZXR1cm4gaVtlXSh1W2Vd
KHQpKX19ZnVuY3Rpb24gVWkobix0LGUscil7ZnVuY3Rpb24gdSgpe3ZhciB1PU1hdGgubWluKG4u
bGVuZ3RoLHQubGVuZ3RoKT4yP1BpOnFpLGM9cj9VdTpQdTtyZXR1cm4gbz11KG4sdCxjLGUpLGE9
dSh0LG4sYyxodSksaX1mdW5jdGlvbiBpKG4pe3JldHVybiBvKG4pfXZhciBvLGE7cmV0dXJuIGku
aW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBhKG4pfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChOdW1iZXIpLHUoKSk6bn0saS5yYW5nZT1mdW5j
dGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHUoKSk6dH0saS5yYW5nZVJvdW5k
PWZ1bmN0aW9uKG4pe3JldHVybiBpLnJhbmdlKG4pLmludGVycG9sYXRlKHp1KX0saS5jbGFtcD1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHUoKSk6cn0saS5pbnRlcnBv
bGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHUoKSk6ZX0saS50
aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gT2kobix0KX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQs
ZSl7cmV0dXJuIFlpKG4sdCxlKX0saS5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBIaShuLHQpLHUo
KX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFVpKG4sdCxlLHIpfSx1KCl9ZnVuY3Rpb24gamko
bix0KXtyZXR1cm4gWm8ucmViaW5kKG4sdCwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xh
dGUiLCJjbGFtcCIpfWZ1bmN0aW9uIEhpKG4sdCl7cmV0dXJuIFJpKG4sRGkoRmkobix0KVsyXSkp
fWZ1bmN0aW9uIEZpKG4sdCl7bnVsbD09dCYmKHQ9MTApO3ZhciBlPUxpKG4pLHI9ZVsxXS1lWzBd
LHU9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyL3QpL01hdGguTE4xMCkpLGk9dC9y
KnU7cmV0dXJuLjE1Pj1pP3UqPTEwOi4zNT49aT91Kj01Oi43NT49aSYmKHUqPTIpLGVbMF09TWF0
aC5jZWlsKGVbMF0vdSkqdSxlWzFdPU1hdGguZmxvb3IoZVsxXS91KSp1Ky41KnUsZVsyXT11LGV9
ZnVuY3Rpb24gT2kobix0KXtyZXR1cm4gWm8ucmFuZ2UuYXBwbHkoWm8sRmkobix0KSl9ZnVuY3Rp
b24gWWkobix0LGUpe3ZhciByPUZpKG4sdCk7aWYoZSl7dmFyIHU9R2EuZXhlYyhlKTtpZih1LnNo
aWZ0KCksInMiPT09dVs4XSl7dmFyIGk9Wm8uZm9ybWF0UHJlZml4KE1hdGgubWF4KHVhKHJbMF0p
LHVhKHJbMV0pKSk7cmV0dXJuIHVbN118fCh1WzddPSIuIitJaShpLnNjYWxlKHJbMl0pKSksdVs4
XT0iZiIsZT1aby5mb3JtYXQodS5qb2luKCIiKSksZnVuY3Rpb24obil7cmV0dXJuIGUoaS5zY2Fs
ZShuKSkraS5zeW1ib2x9fXVbN118fCh1WzddPSIuIitaaSh1WzhdLHIpKSxlPXUuam9pbigiIil9
ZWxzZSBlPSIsLiIrSWkoclsyXSkrImYiO3JldHVybiBaby5mb3JtYXQoZSl9ZnVuY3Rpb24gSWko
bil7cmV0dXJuLU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKy4wMSl9ZnVuY3Rpb24g
Wmkobix0KXt2YXIgZT1JaSh0WzJdKTtyZXR1cm4gbiBpbiBscz9NYXRoLmFicyhlLUlpKE1hdGgu
bWF4KHVhKHRbMF0pLHVhKHRbMV0pKSkpKyArKCJlIiE9PW4pOmUtMiooIiUiPT09bil9ZnVuY3Rp
b24gVmkobix0LGUscil7ZnVuY3Rpb24gdShuKXtyZXR1cm4oZT9NYXRoLmxvZygwPm4/MDpuKTot
TWF0aC5sb2cobj4wPzA6LW4pKS9NYXRoLmxvZyh0KX1mdW5jdGlvbiBpKG4pe3JldHVybiBlP01h
dGgucG93KHQsbik6LU1hdGgucG93KHQsLW4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4odSh0KSl9
cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBpKG4uaW52ZXJ0KHQpKX0sby5kb21h
aW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dFswXT49MCxuLmRvbWFp
bigocj10Lm1hcChOdW1iZXIpKS5tYXAodSkpLG8pOnJ9LG8uYmFzZT1mdW5jdGlvbihlKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuLmRvbWFpbihyLm1hcCh1KSksbyk6dH0sby5uaWNl
PWZ1bmN0aW9uKCl7dmFyIHQ9Umkoci5tYXAodSksZT9NYXRoOmhzKTtyZXR1cm4gbi5kb21haW4o
dCkscj10Lm1hcChpKSxvfSxvLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIG49TGkociksbz1bXSxhPW5b
MF0sYz1uWzFdLHM9TWF0aC5mbG9vcih1KGEpKSxsPU1hdGguY2VpbCh1KGMpKSxmPXQlMT8yOnQ7
aWYoaXNGaW5pdGUobC1zKSl7aWYoZSl7Zm9yKDtsPnM7cysrKWZvcih2YXIgaD0xO2Y+aDtoKysp
by5wdXNoKGkocykqaCk7by5wdXNoKGkocykpfWVsc2UgZm9yKG8ucHVzaChpKHMpKTtzKys8bDsp
Zm9yKHZhciBoPWYtMTtoPjA7aC0tKW8ucHVzaChpKHMpKmgpO2ZvcihzPTA7b1tzXTxhO3MrKyk7
Zm9yKGw9by5sZW5ndGg7b1tsLTFdPmM7bC0tKTtvPW8uc2xpY2UocyxsKX1yZXR1cm4gb30sby50
aWNrRm9ybWF0PWZ1bmN0aW9uKG4sdCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGZzO2Fy
Z3VtZW50cy5sZW5ndGg8Mj90PWZzOiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1aby5mb3JtYXQo
dCkpO3ZhciByLGE9TWF0aC5tYXgoLjEsbi9vLnRpY2tzKCkubGVuZ3RoKSxjPWU/KHI9MWUtMTIs
TWF0aC5jZWlsKToocj0tMWUtMTIsTWF0aC5mbG9vcik7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVy
biBuL2koYyh1KG4pK3IpKTw9YT90KG4pOiIifX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZp
KG4uY29weSgpLHQsZSxyKX0samkobyxuKX1mdW5jdGlvbiBYaShuLHQsZSl7ZnVuY3Rpb24gcih0
KXtyZXR1cm4gbih1KHQpKX12YXIgdT0kaSh0KSxpPSRpKDEvdCk7cmV0dXJuIHIuaW52ZXJ0PWZ1
bmN0aW9uKHQpe3JldHVybiBpKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKChlPXQubWFwKE51bWJlcikpLm1hcCh1KSks
cik6ZX0sci50aWNrcz1mdW5jdGlvbihuKXtyZXR1cm4gT2koZSxuKX0sci50aWNrRm9ybWF0PWZ1
bmN0aW9uKG4sdCl7cmV0dXJuIFlpKGUsbix0KX0sci5uaWNlPWZ1bmN0aW9uKG4pe3JldHVybiBy
LmRvbWFpbihIaShlLG4pKX0sci5leHBvbmVudD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8odT0kaSh0PW8pLGk9JGkoMS90KSxuLmRvbWFpbihlLm1hcCh1KSkscik6dH0sci5j
b3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFhpKG4uY29weSgpLHQsZSl9LGppKHIsbil9ZnVuY3Rpb24g
JGkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAwPnQ/LU1hdGgucG93KC10LG4pOk1hdGgu
cG93KHQsbil9fWZ1bmN0aW9uIEJpKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gaVsoKHUuZ2V0
KGUpfHwoInJhbmdlIj09PXQudD91LnNldChlLG4ucHVzaChlKSk6MC8wKSktMSklaS5sZW5ndGhd
fWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gWm8ucmFuZ2Uobi5sZW5ndGgpLm1hcChmdW5jdGlvbihu
KXtyZXR1cm4gdCtlKm59KX12YXIgdSxpLGE7cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHIpe2lm
KCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO249W10sdT1uZXcgbztmb3IodmFyIGksYT0tMSxj
PXIubGVuZ3RoOysrYTxjOyl1LmhhcyhpPXJbYV0pfHx1LnNldChpLG4ucHVzaChpKSk7cmV0dXJu
IGVbdC50XS5hcHBseShlLHQuYSl9LGUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KGk9bixhPTAsdD17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxlKTppfSxlLnJhbmdl
UG9pbnRzPWZ1bmN0aW9uKHUsbyl7YXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKTt2YXIgYz11WzBd
LHM9dVsxXSxsPShzLWMpLyhNYXRoLm1heCgxLG4ubGVuZ3RoLTEpK28pO3JldHVybiBpPXIobi5s
ZW5ndGg8Mj8oYytzKS8yOmMrbCpvLzIsbCksYT0wLHQ9e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3Vt
ZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKHUsbyxjKXthcmd1bWVudHMubGVuZ3RoPDIm
JihvPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGM9byk7dmFyIHM9dVsxXTx1WzBdLGw9dVtzLTBd
LGY9dVsxLXNdLGg9KGYtbCkvKG4ubGVuZ3RoLW8rMipjKTtyZXR1cm4gaT1yKGwraCpjLGgpLHMm
JmkucmV2ZXJzZSgpLGE9aCooMS1vKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0s
ZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89
MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1vKTt2YXIgcz11WzFdPHVbMF0sbD11W3MtMF0sZj11
WzEtc10saD1NYXRoLmZsb29yKChmLWwpLyhuLmxlbmd0aC1vKzIqYykpLGc9Zi1sLShuLmxlbmd0
aC1vKSpoO3JldHVybiBpPXIobCtNYXRoLnJvdW5kKGcvMiksaCkscyYmaS5yZXZlcnNlKCksYT1N
YXRoLnJvdW5kKGgqKDEtbykpLHQ9e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LGV9
LGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24o
KXtyZXR1cm4gTGkodC5hWzBdKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJpKG4sdCl9LGUu
ZG9tYWluKG4pfWZ1bmN0aW9uIFdpKGUscil7ZnVuY3Rpb24gdSgpe3ZhciBuPTAsdD1yLmxlbmd0
aDtmb3Iobz1bXTsrK248dDspb1tuLTFdPVpvLnF1YW50aWxlKGUsbi90KTtyZXR1cm4gaX1mdW5j
dGlvbiBpKG4pe3JldHVybiBpc05hTihuPStuKT92b2lkIDA6cltaby5iaXNlY3QobyxuKV19dmFy
IG87cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhl
PXIuZmlsdGVyKHQpLnNvcnQobiksdSgpKTplfSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPyhyPW4sdSgpKTpyfSxpLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVy
biBvfSxpLmludmVydEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gbj1yLmluZGV4T2YobiksMD5u
P1swLzAsMC8wXTpbbj4wP29bbi0xXTplWzBdLG48by5sZW5ndGg/b1tuXTplW2UubGVuZ3RoLTFd
XX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdpKGUscil9LHUoKX1mdW5jdGlvbiBKaShuLHQs
ZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKG8sTWF0aC5mbG9v
cihpKih0LW4pKSkpXX1mdW5jdGlvbiB1KCl7cmV0dXJuIGk9ZS5sZW5ndGgvKHQtbiksbz1lLmxl
bmd0aC0xLHJ9dmFyIGksbztyZXR1cm4gci5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KG49K2VbMF0sdD0rZVtlLmxlbmd0aC0xXSx1KCkpOltuLHRdfSxyLnJhbmdl
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdSgpKTplfSxyLmludmVy
dEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1lLmluZGV4T2YodCksdD0wPnQ/MC8wOnQvaStu
LFt0LHQrMS9pXX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEppKG4sdCxlKX0sdSgpfWZ1bmN0
aW9uIEdpKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT49ZT90W1pvLmJpc2VjdChuLGUpXTp2
b2lkIDB9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhuPXQsZSk6bn0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
dD1uLGUpOnR9LGUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihl
KSxbbltlLTFdLG5bZV1dfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kobix0KX0sZX1mdW5j
dGlvbiBLaShuKXtmdW5jdGlvbiB0KG4pe3JldHVybitufXJldHVybiB0LmludmVydD10LHQuZG9t
YWluPXQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZS5tYXAo
dCksdCk6bn0sdC50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gT2kobix0KX0sdC50aWNrRm9ybWF0
PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlpKG4sdCxlKX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJu
IEtpKG4pfSx0fWZ1bmN0aW9uIFFpKG4pe3JldHVybiBuLmlubmVyUmFkaXVzfWZ1bmN0aW9uIG5v
KG4pe3JldHVybiBuLm91dGVyUmFkaXVzfWZ1bmN0aW9uIHRvKG4pe3JldHVybiBuLnN0YXJ0QW5n
bGV9ZnVuY3Rpb24gZW8obil7cmV0dXJuIG4uZW5kQW5nbGV9ZnVuY3Rpb24gcm8obil7ZnVuY3Rp
b24gdCh0KXtmdW5jdGlvbiBvKCl7cy5wdXNoKCJNIixpKG4obCksYSkpfWZvcih2YXIgYyxzPVtd
LGw9W10sZj0tMSxoPXQubGVuZ3RoLGc9YnQoZSkscD1idChyKTsrK2Y8aDspdS5jYWxsKHRoaXMs
Yz10W2ZdLGYpP2wucHVzaChbK2cuY2FsbCh0aGlzLGMsZiksK3AuY2FsbCh0aGlzLGMsZildKTps
Lmxlbmd0aCYmKG8oKSxsPVtdKTtyZXR1cm4gbC5sZW5ndGgmJm8oKSxzLmxlbmd0aD9zLmpvaW4o
IiIpOm51bGx9dmFyIGU9d3Iscj1Tcix1PXdlLGk9dW8sbz1pLmtleSxhPS43O3JldHVybiB0Lng9
ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rp
b24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0LmRlZmluZWQ9ZnVuY3Rp
b24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LmludGVycG9sYXRlPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBu
P2k9bjooaT14cy5nZXQobil8fHVvKS5rZXksdCk6b30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sdCk6YX0sdH1mdW5jdGlvbiB1byhuKXtyZXR1cm4g
bi5qb2luKCJMIil9ZnVuY3Rpb24gaW8obil7cmV0dXJuIHVvKG4pKyJaIn1mdW5jdGlvbiBvbyhu
KXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTsp
dS5wdXNoKCJIIiwoclswXSsocj1uW3RdKVswXSkvMiwiViIsclsxXSk7cmV0dXJuIGU+MSYmdS5w
dXNoKCJIIixyWzBdKSx1LmpvaW4oIiIpfWZ1bmN0aW9uIGFvKG4pe2Zvcih2YXIgdD0wLGU9bi5s
ZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIlYiLChyPW5bdF0p
WzFdLCJIIixyWzBdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiBjbyhuKXtmb3IodmFyIHQ9
MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJIIiwo
cj1uW3RdKVswXSwiViIsclsxXSk7cmV0dXJuIHUuam9pbigiIil9ZnVuY3Rpb24gc28obix0KXty
ZXR1cm4gbi5sZW5ndGg8ND91byhuKTpuWzFdK2hvKG4uc2xpY2UoMSxuLmxlbmd0aC0xKSxnbyhu
LHQpKX1mdW5jdGlvbiBsbyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP3VvKG4pOm5bMF0raG8oKG4u
cHVzaChuWzBdKSxuKSxnbyhbbltuLmxlbmd0aC0yXV0uY29uY2F0KG4sW25bMV1dKSx0KSl9ZnVu
Y3Rpb24gZm8obix0KXtyZXR1cm4gbi5sZW5ndGg8Mz91byhuKTpuWzBdK2hvKG4sZ28obix0KSl9
ZnVuY3Rpb24gaG8obix0KXtpZih0Lmxlbmd0aDwxfHxuLmxlbmd0aCE9dC5sZW5ndGgmJm4ubGVu
Z3RoIT10Lmxlbmd0aCsyKXJldHVybiB1byhuKTt2YXIgZT1uLmxlbmd0aCE9dC5sZW5ndGgscj0i
Iix1PW5bMF0saT1uWzFdLG89dFswXSxhPW8sYz0xO2lmKGUmJihyKz0iUSIrKGlbMF0tMipvWzBd
LzMpKyIsIisoaVsxXS0yKm9bMV0vMykrIiwiK2lbMF0rIiwiK2lbMV0sdT1uWzFdLGM9MiksdC5s
ZW5ndGg+MSl7YT10WzFdLGk9bltjXSxjKysscis9IkMiKyh1WzBdK29bMF0pKyIsIisodVsxXStv
WzFdKSsiLCIrKGlbMF0tYVswXSkrIiwiKyhpWzFdLWFbMV0pKyIsIitpWzBdKyIsIitpWzFdO2Zv
cih2YXIgcz0yO3M8dC5sZW5ndGg7cysrLGMrKylpPW5bY10sYT10W3NdLHIrPSJTIisoaVswXS1h
WzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lbMF0rIiwiK2lbMV19aWYoZSl7dmFyIGw9bltjXTty
Kz0iUSIrKGlbMF0rMiphWzBdLzMpKyIsIisoaVsxXSsyKmFbMV0vMykrIiwiK2xbMF0rIiwiK2xb
MV19cmV0dXJuIHJ9ZnVuY3Rpb24gZ28obix0KXtmb3IodmFyIGUscj1bXSx1PSgxLXQpLzIsaT1u
WzBdLG89blsxXSxhPTEsYz1uLmxlbmd0aDsrK2E8YzspZT1pLGk9byxvPW5bYV0sci5wdXNoKFt1
KihvWzBdLWVbMF0pLHUqKG9bMV0tZVsxXSldKTtyZXR1cm4gcn1mdW5jdGlvbiBwbyhuKXtpZihu
Lmxlbmd0aDwzKXJldHVybiB1byhuKTt2YXIgdD0xLGU9bi5sZW5ndGgscj1uWzBdLHU9clswXSxp
PXJbMV0sbz1bdSx1LHUsKHI9blsxXSlbMF1dLGE9W2ksaSxpLHJbMV1dLGM9W3UsIiwiLGksIkwi
LHhvKGJzLG8pLCIsIix4byhicyxhKV07Zm9yKG4ucHVzaChuW2UtMV0pOysrdDw9ZTspcj1uW3Rd
LG8uc2hpZnQoKSxvLnB1c2goclswXSksYS5zaGlmdCgpLGEucHVzaChyWzFdKSxNbyhjLG8sYSk7
cmV0dXJuIG4ucG9wKCksYy5wdXNoKCJMIixyKSxjLmpvaW4oIiIpfWZ1bmN0aW9uIHZvKG4pe2lm
KG4ubGVuZ3RoPDQpcmV0dXJuIHVvKG4pO2Zvcih2YXIgdCxlPVtdLHI9LTEsdT1uLmxlbmd0aCxp
PVswXSxvPVswXTsrK3I8MzspdD1uW3JdLGkucHVzaCh0WzBdKSxvLnB1c2godFsxXSk7Zm9yKGUu
cHVzaCh4byhicyxpKSsiLCIreG8oYnMsbykpLC0tcjsrK3I8dTspdD1uW3JdLGkuc2hpZnQoKSxp
LnB1c2godFswXSksby5zaGlmdCgpLG8ucHVzaCh0WzFdKSxNbyhlLGksbyk7cmV0dXJuIGUuam9p
bigiIil9ZnVuY3Rpb24gbW8obil7Zm9yKHZhciB0LGUscj0tMSx1PW4ubGVuZ3RoLGk9dSs0LG89
W10sYT1bXTsrK3I8NDspZT1uW3IldV0sby5wdXNoKGVbMF0pLGEucHVzaChlWzFdKTtmb3IodD1b
eG8oYnMsbyksIiwiLHhvKGJzLGEpXSwtLXI7KytyPGk7KWU9bltyJXVdLG8uc2hpZnQoKSxvLnB1
c2goZVswXSksYS5zaGlmdCgpLGEucHVzaChlWzFdKSxNbyh0LG8sYSk7cmV0dXJuIHQuam9pbigi
Iil9ZnVuY3Rpb24geW8obix0KXt2YXIgZT1uLmxlbmd0aC0xO2lmKGUpZm9yKHZhciByLHUsaT1u
WzBdWzBdLG89blswXVsxXSxhPW5bZV1bMF0taSxjPW5bZV1bMV0tbyxzPS0xOysrczw9ZTspcj1u
W3NdLHU9cy9lLHJbMF09dCpyWzBdKygxLXQpKihpK3UqYSksclsxXT10KnJbMV0rKDEtdCkqKG8r
dSpjKTtyZXR1cm4gcG8obil9ZnVuY3Rpb24geG8obix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0q
dFsxXStuWzJdKnRbMl0rblszXSp0WzNdfWZ1bmN0aW9uIE1vKG4sdCxlKXtuLnB1c2goIkMiLHhv
KE1zLHQpLCIsIix4byhNcyxlKSwiLCIseG8oX3MsdCksIiwiLHhvKF9zLGUpLCIsIix4byhicyx0
KSwiLCIseG8oYnMsZSkpfWZ1bmN0aW9uIF9vKG4sdCl7cmV0dXJuKHRbMV0tblsxXSkvKHRbMF0t
blswXSl9ZnVuY3Rpb24gYm8obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aC0xLHI9W10sdT1uWzBd
LGk9blsxXSxvPXJbMF09X28odSxpKTsrK3Q8ZTspclt0XT0obysobz1fbyh1PWksaT1uW3QrMV0p
KSkvMjtyZXR1cm4gclt0XT1vLHJ9ZnVuY3Rpb24gd28obil7Zm9yKHZhciB0LGUscix1LGk9W10s
bz1ibyhuKSxhPS0xLGM9bi5sZW5ndGgtMTsrK2E8YzspdD1fbyhuW2FdLG5bYSsxXSksdWEodCk8
a2E/b1thXT1vW2ErMV09MDooZT1vW2FdL3Qscj1vW2ErMV0vdCx1PWUqZStyKnIsdT45JiYodT0z
KnQvTWF0aC5zcXJ0KHUpLG9bYV09dSplLG9bYSsxXT11KnIpKTtmb3IoYT0tMTsrK2E8PWM7KXU9
KG5bTWF0aC5taW4oYyxhKzEpXVswXS1uW01hdGgubWF4KDAsYS0xKV1bMF0pLyg2KigxK29bYV0q
b1thXSkpLGkucHVzaChbdXx8MCxvW2FdKnV8fDBdKTtyZXR1cm4gaX1mdW5jdGlvbiBTbyhuKXty
ZXR1cm4gbi5sZW5ndGg8Mz91byhuKTpuWzBdK2hvKG4sd28obikpfWZ1bmN0aW9uIGtvKG4pe2Zv
cih2YXIgdCxlLHIsdT0tMSxpPW4ubGVuZ3RoOysrdTxpOyl0PW5bdV0sZT10WzBdLHI9dFsxXStt
cyx0WzBdPWUqTWF0aC5jb3MociksdFsxXT1lKk1hdGguc2luKHIpO3JldHVybiBufWZ1bmN0aW9u
IEVvKG4pe2Z1bmN0aW9uIHQodCl7ZnVuY3Rpb24gYygpe3YucHVzaCgiTSIsYShuKG0pLGYpLGws
cyhuKGQucmV2ZXJzZSgpKSxmKSwiWiIpfWZvcih2YXIgaCxnLHAsdj1bXSxkPVtdLG09W10seT0t
MSx4PXQubGVuZ3RoLE09YnQoZSksXz1idCh1KSxiPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGd9
OmJ0KHIpLHc9dT09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06YnQoaSk7Kyt5PHg7KW8uY2FsbCh0
aGlzLGg9dFt5XSx5KT8oZC5wdXNoKFtnPStNLmNhbGwodGhpcyxoLHkpLHA9K18uY2FsbCh0aGlz
LGgseSldKSxtLnB1c2goWytiLmNhbGwodGhpcyxoLHkpLCt3LmNhbGwodGhpcyxoLHkpXSkpOmQu
bGVuZ3RoJiYoYygpLGQ9W10sbT1bXSk7cmV0dXJuIGQubGVuZ3RoJiZjKCksdi5sZW5ndGg/di5q
b2luKCIiKTpudWxsfXZhciBlPXdyLHI9d3IsdT0wLGk9U3Isbz13ZSxhPXVvLGM9YS5rZXkscz1h
LGw9IkwiLGY9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD8oZT1yPW4sdCk6cn0sdC54MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
ZT1uLHQpOmV9LHQueDE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0
KTpyfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9aT1uLHQpOml9
LHQueTA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0Lnkx
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sdCk6aX0sdC5kZWZpbmVk
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5pbnRlcnBv
bGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10
eXBlb2Ygbj9hPW46KGE9eHMuZ2V0KG4pfHx1bykua2V5LHM9YS5yZXZlcnNlfHxhLGw9YS5jbG9z
ZWQ/Ik0iOiJMIix0KTpjfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGY9bix0KTpmfSx0fWZ1bmN0aW9uIEFvKG4pe3JldHVybiBuLnJhZGl1c31mdW5jdGlv
biBDbyhuKXtyZXR1cm5bbi54LG4ueV19ZnVuY3Rpb24gTm8obil7cmV0dXJuIGZ1bmN0aW9uKCl7
dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10WzBdLHI9dFsxXSttcztyZXR1cm5bZSpN
YXRoLmNvcyhyKSxlKk1hdGguc2luKHIpXX19ZnVuY3Rpb24gem8oKXtyZXR1cm4gNjR9ZnVuY3Rp
b24gTG8oKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBUbyhuKXt2YXIgdD1NYXRoLnNxcnQobi9i
YSk7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwxIDAsIistdCsiQSIrdCsiLCIrdCsi
IDAgMSwxIDAsIit0KyJaIn1mdW5jdGlvbiBxbyhuLHQpe3JldHVybiBzYShuLENzKSxuLmlkPXQs
bn1mdW5jdGlvbiBSbyhuLHQsZSxyKXt2YXIgdT1uLmlkO3JldHVybiBQKG4sImZ1bmN0aW9uIj09
dHlwZW9mIGU/ZnVuY3Rpb24obixpLG8pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQs
cihlLmNhbGwobixuLl9fZGF0YV9fLGksbykpKX06KGU9cihlKSxmdW5jdGlvbihuKXtuLl9fdHJh
bnNpdGlvbl9fW3VdLnR3ZWVuLnNldCh0LGUpfSkpfWZ1bmN0aW9uIERvKG4pe3JldHVybiBudWxs
PT1uJiYobj0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIFBvKG4s
dCxlLHIpe3ZhciB1PW4uX190cmFuc2l0aW9uX198fChuLl9fdHJhbnNpdGlvbl9fPXthY3RpdmU6
MCxjb3VudDowfSksaT11W2VdO2lmKCFpKXt2YXIgYT1yLnRpbWU7aT11W2VdPXt0d2VlbjpuZXcg
byx0aW1lOmEsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheSxkdXJhdGlvbjpyLmR1cmF0aW9ufSwr
K3UuY291bnQsWm8udGltZXIoZnVuY3Rpb24ocil7ZnVuY3Rpb24gbyhyKXtyZXR1cm4gdS5hY3Rp
dmU+ZT9zKCk6KHUuYWN0aXZlPWUsaS5ldmVudCYmaS5ldmVudC5zdGFydC5jYWxsKG4sbCx0KSxp
LnR3ZWVuLmZvckVhY2goZnVuY3Rpb24oZSxyKXsocj1yLmNhbGwobixsLHQpKSYmdi5wdXNoKHIp
fSksWm8udGltZXIoZnVuY3Rpb24oKXtyZXR1cm4gcC5jPWMocnx8MSk/d2U6YywxfSwwLGEpLHZv
aWQgMCl9ZnVuY3Rpb24gYyhyKXtpZih1LmFjdGl2ZSE9PWUpcmV0dXJuIHMoKTtmb3IodmFyIG89
ci9nLGE9ZihvKSxjPXYubGVuZ3RoO2M+MDspdlstLWNdLmNhbGwobixhKTsKLXJldHVybiBvPj0x
PyhpLmV2ZW50JiZpLmV2ZW50LmVuZC5jYWxsKG4sbCx0KSxzKCkpOnZvaWQgMH1mdW5jdGlvbiBz
KCl7cmV0dXJuLS11LmNvdW50P2RlbGV0ZSB1W2VdOmRlbGV0ZSBuLl9fdHJhbnNpdGlvbl9fLDF9
dmFyIGw9bi5fX2RhdGFfXyxmPWkuZWFzZSxoPWkuZGVsYXksZz1pLmR1cmF0aW9uLHA9QmEsdj1b
XTtyZXR1cm4gcC50PWgrYSxyPj1oP28oci1oKToocC5jPW8sdm9pZCAwKX0sMCxhKX19ZnVuY3Rp
b24gVW8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0
ZSgiK3QobikrIiwwKSJ9KX1mdW5jdGlvbiBqbyhuLHQpe24uYXR0cigidHJhbnNmb3JtIixmdW5j
dGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KG4pKyIpIn0pfWZ1bmN0aW9uIEhvKG4pe3Jl
dHVybiBuLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gRm8obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0
dXJuIG4odCl9ZnVuY3Rpb24gdShuLGUpe3ZhciByPW5bMV0tblswXSx1PXIvZSxpPVpvLmJpc2Vj
dChVcyx1KTtyZXR1cm4gaT09VXMubGVuZ3RoP1t0LnllYXIsRmkobi5tYXAoZnVuY3Rpb24obil7
cmV0dXJuIG4vMzE1MzZlNn0pLGUpWzJdXTppP3RbdS9Vc1tpLTFdPFVzW2ldL3U/aS0xOmldOltG
cyxGaShuLGUpWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIE9vKG4uaW52
ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4u
ZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKE9vKX0sci5uaWNlPWZ1bmN0aW9uKG4sdCl7ZnVu
Y3Rpb24gZShlKXtyZXR1cm4haXNOYU4oZSkmJiFuLnJhbmdlKGUsT28oK2UrMSksdCkubGVuZ3Ro
fXZhciBpPXIuZG9tYWluKCksbz1MaShpKSxhPW51bGw9PW4/dShvLDEwKToibnVtYmVyIj09dHlw
ZW9mIG4mJnUobyxuKTtyZXR1cm4gYSYmKG49YVswXSx0PWFbMV0pLHIuZG9tYWluKFJpKGksdD4x
P3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmZsb29yKHQpKTspdD1Pbyh0LTEpO3JldHVy
biB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uY2VpbCh0KSk7KXQ9T28oK3QrMSk7cmV0
dXJuIHR9fTpuKSl9LHIudGlja3M9ZnVuY3Rpb24obix0KXt2YXIgZT1MaShyLmRvbWFpbigpKSxp
PW51bGw9PW4/dShlLDEwKToibnVtYmVyIj09dHlwZW9mIG4/dShlLG4pOiFuLnJhbmdlJiZbe3Jh
bmdlOm59LHRdO3JldHVybiBpJiYobj1pWzBdLHQ9aVsxXSksbi5yYW5nZShlWzBdLE9vKCtlWzFd
KzEpLDE+dD8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1
bmN0aW9uKCl7cmV0dXJuIEZvKG4uY29weSgpLHQsZSl9LGppKHIsbil9ZnVuY3Rpb24gT28obil7
cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIFlvKG4pe3JldHVybiBKU09OLnBhcnNlKG4ucmVz
cG9uc2VUZXh0KX1mdW5jdGlvbiBJbyhuKXt2YXIgdD0kby5jcmVhdGVSYW5nZSgpO3JldHVybiB0
LnNlbGVjdE5vZGUoJG8uYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobi5yZXNwb25z
ZVRleHQpfXZhciBabz17dmVyc2lvbjoiMy40LjExIn07RGF0ZS5ub3d8fChEYXRlLm5vdz1mdW5j
dGlvbigpe3JldHVybituZXcgRGF0ZX0pO3ZhciBWbz1bXS5zbGljZSxYbz1mdW5jdGlvbihuKXty
ZXR1cm4gVm8uY2FsbChuKX0sJG89ZG9jdW1lbnQsQm89JG8uZG9jdW1lbnRFbGVtZW50LFdvPXdp
bmRvdzt0cnl7WG8oQm8uY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2goSm8pe1hvPWZ1bmN0
aW9uKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPW5ldyBBcnJheSh0KTt0LS07KWVbdF09blt0XTty
ZXR1cm4gZX19dHJ5eyRvLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLnNldFByb3BlcnR5KCJv
cGFjaXR5IiwwLCIiKX1jYXRjaChHbyl7dmFyIEtvPVdvLkVsZW1lbnQucHJvdG90eXBlLFFvPUtv
LnNldEF0dHJpYnV0ZSxuYT1Lby5zZXRBdHRyaWJ1dGVOUyx0YT1Xby5DU1NTdHlsZURlY2xhcmF0
aW9uLnByb3RvdHlwZSxlYT10YS5zZXRQcm9wZXJ0eTtLby5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24o
bix0KXtRby5jYWxsKHRoaXMsbix0KyIiKX0sS28uc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obix0
LGUpe25hLmNhbGwodGhpcyxuLHQsZSsiIil9LHRhLnNldFByb3BlcnR5PWZ1bmN0aW9uKG4sdCxl
KXtlYS5jYWxsKHRoaXMsbix0KyIiLGUpfX1aby5hc2NlbmRpbmc9bixaby5kZXNjZW5kaW5nPWZ1
bmN0aW9uKG4sdCl7cmV0dXJuIG4+dD8tMTp0Pm4/MTp0Pj1uPzA6MC8wfSxaby5taW49ZnVuY3Rp
b24obix0KXt2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7
Zm9yKDsrK3U8aSYmIShudWxsIT0oZT1uW3VdKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7Kyt1PGk7
KW51bGwhPShyPW5bdV0pJiZlPnImJihlPXIpfWVsc2V7Zm9yKDsrK3U8aSYmIShudWxsIT0oZT10
LmNhbGwobixuW3VdLHUpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7Kyt1PGk7KW51bGwhPShyPXQu
Y2FsbChuLG5bdV0sdSkpJiZlPnImJihlPXIpfXJldHVybiBlfSxaby5tYXg9ZnVuY3Rpb24obix0
KXt2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsr
K3U8aSYmIShudWxsIT0oZT1uW3VdKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7Kyt1PGk7KW51bGwh
PShyPW5bdV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK3U8aSYmIShudWxsIT0oZT10LmNhbGwo
bixuW3VdLHUpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7Kyt1PGk7KW51bGwhPShyPXQuY2FsbChu
LG5bdV0sdSkpJiZyPmUmJihlPXIpfXJldHVybiBlfSxaby5leHRlbnQ9ZnVuY3Rpb24obix0KXt2
YXIgZSxyLHUsaT0tMSxvPW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysr
aTxvJiYhKG51bGwhPShlPXU9bltpXSkmJmU+PWUpOyllPXU9dm9pZCAwO2Zvcig7KytpPG87KW51
bGwhPShyPW5baV0pJiYoZT5yJiYoZT1yKSxyPnUmJih1PXIpKX1lbHNle2Zvcig7KytpPG8mJiEo
bnVsbCE9KGU9dT10LmNhbGwobixuW2ldLGkpKSYmZT49ZSk7KWU9dm9pZCAwO2Zvcig7KytpPG87
KW51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiYoZT5yJiYoZT1yKSxyPnUmJih1PXIpKX1yZXR1
cm5bZSx1XX0sWm8uc3VtPWZ1bmN0aW9uKG4sdCl7dmFyIGUscj0wLHU9bi5sZW5ndGgsaT0tMTtp
ZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTx1Oylpc05hTihlPStuW2ldKXx8KHIrPWUp
O2Vsc2UgZm9yKDsrK2k8dTspaXNOYU4oZT0rdC5jYWxsKG4sbltpXSxpKSl8fChyKz1lKTtyZXR1
cm4gcn0sWm8ubWVhbj1mdW5jdGlvbihuLGUpe3ZhciByLHU9MCxpPW4ubGVuZ3RoLG89LTEsYT1p
O2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGk7KXQocj1uW29dKT91Kz1yOi0tYTtl
bHNlIGZvcig7KytvPGk7KXQocj1lLmNhbGwobixuW29dLG8pKT91Kz1yOi0tYTtyZXR1cm4gYT91
L2E6dm9pZCAwfSxaby5xdWFudGlsZT1mdW5jdGlvbihuLHQpe3ZhciBlPShuLmxlbmd0aC0xKSp0
KzEscj1NYXRoLmZsb29yKGUpLHU9K25bci0xXSxpPWUtcjtyZXR1cm4gaT91K2kqKG5bcl0tdSk6
dX0sWm8ubWVkaWFuPWZ1bmN0aW9uKGUscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKGU9
ZS5tYXAocikpLGU9ZS5maWx0ZXIodCksZS5sZW5ndGg/Wm8ucXVhbnRpbGUoZS5zb3J0KG4pLC41
KTp2b2lkIDB9O3ZhciByYT1lKG4pO1pvLmJpc2VjdExlZnQ9cmEubGVmdCxaby5iaXNlY3Q9Wm8u
YmlzZWN0UmlnaHQ9cmEucmlnaHQsWm8uYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGUoMT09
PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIG4odChlKSxyKX06dCl9LFpvLnNodWZmbGU9
ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscj1uLmxlbmd0aDtyOyllPTB8TWF0aC5yYW5kb20oKSpy
LS0sdD1uW3JdLG5bcl09bltlXSxuW2VdPXQ7cmV0dXJuIG59LFpvLnBlcm11dGU9ZnVuY3Rpb24o
bix0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPW5bdFtlXV07
cmV0dXJuIHJ9LFpvLnBhaXJzPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlPTAscj1uLmxlbmd0aC0x
LHU9blswXSxpPW5ldyBBcnJheSgwPnI/MDpyKTtyPmU7KWlbZV09W3Q9dSx1PW5bKytlXV07cmV0
dXJuIGl9LFpvLnppcD1mdW5jdGlvbigpe2lmKCEodT1hcmd1bWVudHMubGVuZ3RoKSlyZXR1cm5b
XTtmb3IodmFyIG49LTEsdD1aby5taW4oYXJndW1lbnRzLHIpLGU9bmV3IEFycmF5KHQpOysrbjx0
Oylmb3IodmFyIHUsaT0tMSxvPWVbbl09bmV3IEFycmF5KHUpOysraTx1OylvW2ldPWFyZ3VtZW50
c1tpXVtuXTtyZXR1cm4gZX0sWm8udHJhbnNwb3NlPWZ1bmN0aW9uKG4pe3JldHVybiBaby56aXAu
YXBwbHkoWm8sbil9LFpvLmtleXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4p
dC5wdXNoKGUpO3JldHVybiB0fSxaby52YWx1ZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZh
ciBlIGluIG4pdC5wdXNoKG5bZV0pO3JldHVybiB0fSxaby5lbnRyaWVzPWZ1bmN0aW9uKG4pe3Zh
ciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaCh7a2V5OmUsdmFsdWU6bltlXX0pO3JldHVybiB0
fSxaby5tZXJnZT1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHU9bi5sZW5ndGgsaT0tMSxvPTA7
KytpPHU7KW8rPW5baV0ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKTstLXU+PTA7KWZvcihyPW5b
dV0sdD1yLmxlbmd0aDstLXQ+PTA7KWVbLS1vXT1yW3RdO3JldHVybiBlfTt2YXIgdWE9TWF0aC5h
YnM7Wm8ucmFuZ2U9ZnVuY3Rpb24obix0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKGU9MSxh
cmd1bWVudHMubGVuZ3RoPDImJih0PW4sbj0wKSksMS8wPT09KHQtbikvZSl0aHJvdyBuZXcgRXJy
b3IoImluZmluaXRlIHJhbmdlIik7dmFyIHIsaT1bXSxvPXUodWEoZSkpLGE9LTE7aWYobio9byx0
Kj1vLGUqPW8sMD5lKWZvcig7KHI9bitlKisrYSk+dDspaS5wdXNoKHIvbyk7ZWxzZSBmb3IoOyhy
PW4rZSorK2EpPHQ7KWkucHVzaChyL28pO3JldHVybiBpfSxaby5tYXA9ZnVuY3Rpb24obil7dmFy
IHQ9bmV3IG87aWYobiBpbnN0YW5jZW9mIG8pbi5mb3JFYWNoKGZ1bmN0aW9uKG4sZSl7dC5zZXQo
bixlKX0pO2Vsc2UgZm9yKHZhciBlIGluIG4pdC5zZXQoZSxuW2VdKTtyZXR1cm4gdH0saShvLHto
YXM6YSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbaWErbl19LHNldDpmdW5jdGlvbihuLHQp
e3JldHVybiB0aGlzW2lhK25dPXR9LHJlbW92ZTpjLGtleXM6cyx2YWx1ZXM6ZnVuY3Rpb24oKXt2
YXIgbj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKGUpfSksbn0s
ZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24o
dCxlKXtuLnB1c2goe2tleTp0LHZhbHVlOmV9KX0pLG59LHNpemU6bCxlbXB0eTpmLGZvckVhY2g6
ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdC5jaGFyQ29kZUF0KDApPT09b2EmJm4uY2Fs
bCh0aGlzLHQuc3Vic3RyaW5nKDEpLHRoaXNbdF0pfX0pO3ZhciBpYT0iXHgwMCIsb2E9aWEuY2hh
ckNvZGVBdCgwKTtaby5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGEsYyl7aWYoYz49aS5s
ZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsYSk6ZT9hLnNvcnQoZSk6YTtmb3IodmFyIHMsbCxmLGgs
Zz0tMSxwPWEubGVuZ3RoLHY9aVtjKytdLGQ9bmV3IG87KytnPHA7KShoPWQuZ2V0KHM9dihsPWFb
Z10pKSk/aC5wdXNoKGwpOmQuc2V0KHMsW2xdKTtyZXR1cm4gdD8obD10KCksZj1mdW5jdGlvbihl
LHIpe2wuc2V0KGUsbih0LHIsYykpfSk6KGw9e30sZj1mdW5jdGlvbihlLHIpe2xbZV09bih0LHIs
Yyl9KSxkLmZvckVhY2goZiksbH1mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJu
IG47dmFyIHI9W10sdT1hW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUpe3IucHVz
aCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4g
dShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxpPVtdLGE9W107cmV0dXJuIHUubWFwPWZ1
bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0LDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJu
IHQobihaby5tYXAsZSwwKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1
fSx1LnNvcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBhW2kubGVuZ3RoLTFdPW4sdX0sdS5zb3J0
VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVuY3Rpb24obil7cmV0
dXJuIHI9bix1fSx1fSxaby5zZXQ9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IGg7aWYobilmb3IodmFy
IGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5hZGQobltlXSk7cmV0dXJuIHR9LGkoaCx7aGFzOmEs
YWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW2lhK25dPSEwLG59LHJlbW92ZTpmdW5jdGlvbihu
KXtyZXR1cm4gbj1pYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LHZhbHVlczpzLHNpemU6
bCxlbXB0eTpmLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdC5jaGFyQ29k
ZUF0KDApPT09b2EmJm4uY2FsbCh0aGlzLHQuc3Vic3RyaW5nKDEpKX19KSxaby5iZWhhdmlvcj17
fSxaby5yZWJpbmQ9ZnVuY3Rpb24obix0KXtmb3IodmFyIGUscj0xLHU9YXJndW1lbnRzLmxlbmd0
aDsrK3I8dTspbltlPWFyZ3VtZW50c1tyXV09ZyhuLHQsdFtlXSk7cmV0dXJuIG59O3ZhciBhYT1b
IndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtaby5kaXNwYXRjaD1mdW5jdGlvbigp
e2Zvcih2YXIgbj1uZXcgZCx0PS0xLGU9YXJndW1lbnRzLmxlbmd0aDsrK3Q8ZTspblthcmd1bWVu
dHNbdF1dPW0obik7cmV0dXJuIG59LGQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKG4sdCl7dmFyIGU9
bi5pbmRleE9mKCIuIikscj0iIjtpZihlPj0wJiYocj1uLnN1YnN0cmluZyhlKzEpLG49bi5zdWJz
dHJpbmcoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbbl0ub24ocik6dGhp
c1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGlu
IHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0
aGlzfX0sWm8uZXZlbnQ9bnVsbCxaby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxh
Y2UoY2EsIlxcJCYiKX07dmFyIGNhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxz
YT17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9fXz10fTpmdW5jdGlvbihuLHQp
e2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sbGE9ZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVy
eVNlbGVjdG9yKG4pfSxmYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwo
bil9LGhhPUJvLm1hdGNoZXN8fEJvW3AoQm8sIm1hdGNoZXNTZWxlY3RvciIpXSxnYT1mdW5jdGlv
bihuLHQpe3JldHVybiBoYS5jYWxsKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihs
YT1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVsbH0sZmE9U2l6emxlLGdh
PVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLFpvLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBt
YX07dmFyIHBhPVpvLnNlbGVjdGlvbi5wcm90b3R5cGU9W107cGEuc2VsZWN0PWZ1bmN0aW9uKG4p
e3ZhciB0LGUscix1LGk9W107bj1iKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxh
Oyl7aS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2
YXIgYz0tMSxzPXIubGVuZ3RoOysrYzxzOykodT1yW2NdKT8odC5wdXNoKGU9bi5jYWxsKHUsdS5f
X2RhdGFfXyxjLG8pKSxlJiYiX19kYXRhX18iaW4gdSYmKGUuX19kYXRhX189dS5fX2RhdGFfXykp
OnQucHVzaChudWxsKX1yZXR1cm4gXyhpKX0scGEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0
LGUscj1bXTtuPXcobik7Zm9yKHZhciB1PS0xLGk9dGhpcy5sZW5ndGg7Kyt1PGk7KWZvcih2YXIg
bz10aGlzW3VdLGE9LTEsYz1vLmxlbmd0aDsrK2E8YzspKGU9b1thXSkmJihyLnB1c2godD1Ybyhu
LmNhbGwoZSxlLl9fZGF0YV9fLGEsdSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJuIF8ocil9O3Zh
ciB2YT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4
bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93
d3cudzMub3JnLzIwMDAveG1sbnMvIn07Wm8ubnM9e3ByZWZpeDp2YSxxdWFsaWZ5OmZ1bmN0aW9u
KG4pe3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmKGU9bi5zdWJzdHJpbmco
MCx0KSxuPW4uc3Vic3RyaW5nKHQrMSkpLHZhLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTp2YVtl
XSxsb2NhbDpufTpufX0scGEuYXR0cj1mdW5jdGlvbihuLHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8
Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2YXIgZT10aGlzLm5vZGUoKTtyZXR1cm4gbj1aby5u
cy5xdWFsaWZ5KG4pLG4ubG9jYWw/ZS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmUu
Z2V0QXR0cmlidXRlKG4pfWZvcih0IGluIG4pdGhpcy5lYWNoKFModCxuW3RdKSk7cmV0dXJuIHRo
aXN9cmV0dXJuIHRoaXMuZWFjaChTKG4sdCkpfSxwYS5jbGFzc2VkPWZ1bmN0aW9uKG4sdCl7aWYo
YXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9k
ZSgpLHI9KG49QShuKSkubGVuZ3RoLHU9LTE7aWYodD1lLmNsYXNzTGlzdCl7Zm9yKDsrK3U8cjsp
aWYoIXQuY29udGFpbnMoblt1XSkpcmV0dXJuITF9ZWxzZSBmb3IodD1lLmdldEF0dHJpYnV0ZSgi
Y2xhc3MiKTsrK3U8cjspaWYoIUUoblt1XSkudGVzdCh0KSlyZXR1cm4hMTtyZXR1cm4hMH1mb3Io
dCBpbiBuKXRoaXMuZWFjaChDKHQsblt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2go
QyhuLHQpKX0scGEuc3R5bGU9ZnVuY3Rpb24obix0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7
aWYoMz5yKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+ciYmKHQ9IiIpO2ZvcihlIGluIG4pdGhp
cy5lYWNoKHooZSxuW2VdLHQpKTtyZXR1cm4gdGhpc31pZigyPnIpcmV0dXJuIFdvLmdldENvbXB1
dGVkU3R5bGUodGhpcy5ub2RlKCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKTtlPSIifXJldHVy
biB0aGlzLmVhY2goeihuLHQsZSkpfSxwYS5wcm9wZXJ0eT1mdW5jdGlvbihuLHQpe2lmKGFyZ3Vt
ZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiB0aGlzLm5vZGUoKVtu
XTtmb3IodCBpbiBuKXRoaXMuZWFjaChMKHQsblt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlz
LmVhY2goTChuLHQpKX0scGEudGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5
KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PXQ/IiI6dH06bnVsbD09bj9m
dW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVu
dD1ufSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LHBhLmh0bWw9ZnVuY3Rpb24obil7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9u
KCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09dD8i
Ijp0fTpudWxsPT1uP2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhp
cy5pbm5lckhUTUw9bn0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0scGEuYXBwZW5kPWZ1bmN0aW9u
KG4pe3JldHVybiBuPVQobiksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBl
bmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0scGEuaW5zZXJ0PWZ1bmN0aW9uKG4s
dCl7cmV0dXJuIG49VChuKSx0PWIodCksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyl8fG51bGwpfSl9LHBhLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pfSxw
YS5kYXRhPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByLHUsaSxhPW4ubGVuZ3Ro
LGY9ZS5sZW5ndGgsaD1NYXRoLm1pbihhLGYpLGc9bmV3IEFycmF5KGYpLHA9bmV3IEFycmF5KGYp
LHY9bmV3IEFycmF5KGEpO2lmKHQpe3ZhciBkLG09bmV3IG8seT1uZXcgbyx4PVtdO2ZvcihyPS0x
OysrcjxhOylkPXQuY2FsbCh1PW5bcl0sdS5fX2RhdGFfXyxyKSxtLmhhcyhkKT92W3JdPXU6bS5z
ZXQoZCx1KSx4LnB1c2goZCk7Zm9yKHI9LTE7KytyPGY7KWQ9dC5jYWxsKGUsaT1lW3JdLHIpLCh1
PW0uZ2V0KGQpKT8oZ1tyXT11LHUuX19kYXRhX189aSk6eS5oYXMoZCl8fChwW3JdPXEoaSkpLHku
c2V0KGQsaSksbS5yZW1vdmUoZCk7Zm9yKHI9LTE7KytyPGE7KW0uaGFzKHhbcl0pJiYodltyXT1u
W3JdKX1lbHNle2ZvcihyPS0xOysrcjxoOyl1PW5bcl0saT1lW3JdLHU/KHUuX19kYXRhX189aSxn
W3JdPXUpOnBbcl09cShpKTtmb3IoO2Y+cjsrK3IpcFtyXT1xKGVbcl0pO2Zvcig7YT5yOysrcil2
W3JdPW5bcl19cC51cGRhdGU9ZyxwLnBhcmVudE5vZGU9Zy5wYXJlbnROb2RlPXYucGFyZW50Tm9k
ZT1uLnBhcmVudE5vZGUsYy5wdXNoKHApLHMucHVzaChnKSxsLnB1c2godil9dmFyIHIsdSxpPS0x
LGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihuPW5ldyBBcnJheShhPShy
PXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KSh1PXJbaV0pJiYobltpXT11Ll9fZGF0YV9fKTtyZXR1
cm4gbn12YXIgYz1VKFtdKSxzPV8oW10pLGw9XyhbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4p
Zm9yKDsrK2k8YTspZShyPXRoaXNbaV0sbi5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkp
KTtlbHNlIGZvcig7KytpPGE7KWUocj10aGlzW2ldLG4pO3JldHVybiBzLmVudGVyPWZ1bmN0aW9u
KCl7cmV0dXJuIGN9LHMuZXhpdD1mdW5jdGlvbigpe3JldHVybiBsfSxzfSxwYS5kYXR1bT1mdW5j
dGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIs
bik6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0scGEuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0
LGUscix1PVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRo
aXMubGVuZ3RoO28+aTtpKyspe3UucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KGU9dGhpc1tpXSku
cGFyZW50Tm9kZTtmb3IodmFyIGE9MCxjPWUubGVuZ3RoO2M+YTthKyspKHI9ZVthXSkmJm4uY2Fs
bChyLHIuX19kYXRhX18sYSxpKSYmdC5wdXNoKHIpfXJldHVybiBfKHUpfSxwYS5vcmRlcj1mdW5j
dGlvbigpe2Zvcih2YXIgbj0tMSx0PXRoaXMubGVuZ3RoOysrbjx0Oylmb3IodmFyIGUscj10aGlz
W25dLHU9ci5sZW5ndGgtMSxpPXJbdV07LS11Pj0wOykoZT1yW3VdKSYmKGkmJmkhPT1lLm5leHRT
aWJsaW5nJiZpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsaSksaT1lKTtyZXR1cm4gdGhpc30s
cGEuc29ydD1mdW5jdGlvbihuKXtuPUQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgdD0t
MSxlPXRoaXMubGVuZ3RoOysrdDxlOyl0aGlzW3RdLnNvcnQobik7cmV0dXJuIHRoaXMub3JkZXIo
KX0scGEuZWFjaD1mdW5jdGlvbihuKXtyZXR1cm4gUCh0aGlzLGZ1bmN0aW9uKHQsZSxyKXtuLmNh
bGwodCx0Ll9fZGF0YV9fLGUscil9KX0scGEuY2FsbD1mdW5jdGlvbihuKXt2YXIgdD1Ybyhhcmd1
bWVudHMpO3JldHVybiBuLmFwcGx5KHRbMF09dGhpcyx0KSx0aGlzfSxwYS5lbXB0eT1mdW5jdGlv
bigpe3JldHVybiF0aGlzLm5vZGUoKX0scGEubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLHQ9
dGhpcy5sZW5ndGg7dD5uO24rKylmb3IodmFyIGU9dGhpc1tuXSxyPTAsdT1lLmxlbmd0aDt1PnI7
cisrKXt2YXIgaT1lW3JdO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LHBhLnNpemU9ZnVuY3Rp
b24oKXt2YXIgbj0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK259KSxufTt2YXIgZGE9
W107Wm8uc2VsZWN0aW9uLmVudGVyPVUsWm8uc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1kYSxk
YS5hcHBlbmQ9cGEuYXBwZW5kLGRhLmVtcHR5PXBhLmVtcHR5LGRhLm5vZGU9cGEubm9kZSxkYS5j
YWxsPXBhLmNhbGwsZGEuc2l6ZT1wYS5zaXplLGRhLnNlbGVjdD1mdW5jdGlvbihuKXtmb3IodmFy
IHQsZSxyLHUsaSxvPVtdLGE9LTEsYz10aGlzLmxlbmd0aDsrK2E8Yzspe3I9KHU9dGhpc1thXSku
dXBkYXRlLG8ucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9dS5wYXJlbnROb2RlO2Zvcih2YXIgcz0t
MSxsPXUubGVuZ3RoOysrczxsOykoaT11W3NdKT8odC5wdXNoKHJbc109ZT1uLmNhbGwodS5wYXJl
bnROb2RlLGkuX19kYXRhX18scyxhKSksZS5fX2RhdGFfXz1pLl9fZGF0YV9fKTp0LnB1c2gobnVs
bCl9cmV0dXJuIF8obyl9LGRhLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPDImJih0PWoodGhpcykpLHBhLmluc2VydC5jYWxsKHRoaXMsbix0KX0scGEudHJhbnNp
dGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgbix0LGU9U3N8fCsrTnMscj1bXSx1PWtzfHx7dGltZTpE
YXRlLm5vdygpLGVhc2U6eHUsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LGk9LTEsbz10aGlzLmxlbmd0
aDsrK2k8bzspe3IucHVzaChuPVtdKTtmb3IodmFyIGE9dGhpc1tpXSxjPS0xLHM9YS5sZW5ndGg7
KytjPHM7KSh0PWFbY10pJiZQbyh0LGMsZSx1KSxuLnB1c2godCl9cmV0dXJuIHFvKHIsZSl9LHBh
LmludGVycnVwdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSCl9LFpvLnNlbGVjdD1mdW5j
dGlvbihuKXt2YXIgdD1bInN0cmluZyI9PXR5cGVvZiBuP2xhKG4sJG8pOm5dO3JldHVybiB0LnBh
cmVudE5vZGU9Qm8sXyhbdF0pfSxaby5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQ9WG8oInN0
cmluZyI9PXR5cGVvZiBuP2ZhKG4sJG8pOm4pO3JldHVybiB0LnBhcmVudE5vZGU9Qm8sXyhbdF0p
fTt2YXIgbWE9Wm8uc2VsZWN0KEJvKTtwYS5vbj1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1l
bnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5yJiYodD0hMSk7Zm9y
KGUgaW4gbil0aGlzLmVhY2goRihlLG5bZV0sdCkpO3JldHVybiB0aGlzfWlmKDI+cilyZXR1cm4o
cj10aGlzLm5vZGUoKVsiX19vbiIrbl0pJiZyLl87ZT0hMX1yZXR1cm4gdGhpcy5lYWNoKEYobix0
LGUpKX07dmFyIHlhPVpvLm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJt
b3VzZW91dCJ9KTt5YS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvbiIrbiBpbiAkbyYmeWEucmVtb3Zl
KG4pfSk7dmFyIHhhPSJvbnNlbGVjdHN0YXJ0ImluICRvP251bGw6cChCby5zdHlsZSwidXNlclNl
bGVjdCIpLE1hPTA7Wm8ubW91c2U9ZnVuY3Rpb24obil7cmV0dXJuIFoobix4KCkpfTt2YXIgX2E9
L1dlYktpdC8udGVzdChXby5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO1pvLnRvdWNoZXM9ZnVu
Y3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD14KCkudG91Y2hlcyksdD9Y
byh0KS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9WihuLHQpO3JldHVybiBlLmlkZW50aWZpZXI9dC5p
ZGVudGlmaWVyLGV9KTpbXX0sWm8uYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o
KXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsdSkub24oInRvdWNoc3RhcnQuZHJhZyIsaSl9ZnVu
Y3Rpb24gdChuLHQsdSxpLG8pe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt2YXIgbixl
LHI9dChoLHYpO3ImJihuPXJbMF0teFswXSxlPXJbMV0teFsxXSxwfD1ufGUseD1yLGcoe3R5cGU6
ImRyYWciLHg6clswXStzWzBdLHk6clsxXStzWzFdLGR4Om4sZHk6ZX0pKX1mdW5jdGlvbiBjKCl7
dChoLHYpJiYobS5vbihpK2QsbnVsbCkub24obytkLG51bGwpLHkocCYmWm8uZXZlbnQudGFyZ2V0
PT09ZiksZyh7dHlwZToiZHJhZ2VuZCJ9KSl9dmFyIHMsbD10aGlzLGY9Wm8uZXZlbnQudGFyZ2V0
LGg9bC5wYXJlbnROb2RlLGc9ZS5vZihsLGFyZ3VtZW50cykscD0wLHY9bigpLGQ9Ii5kcmFnIiso
bnVsbD09dj8iIjoiLSIrdiksbT1aby5zZWxlY3QodSgpKS5vbihpK2QsYSkub24obytkLGMpLHk9
SSgpLHg9dChoLHYpO3I/KHM9ci5hcHBseShsLGFyZ3VtZW50cykscz1bcy54LXhbMF0scy55LXhb
MV1dKTpzPVswLDBdLGcoe3R5cGU6ImRyYWdzdGFydCJ9KX19dmFyIGU9TShuLCJkcmFnIiwiZHJh
Z3N0YXJ0IiwiZHJhZ2VuZCIpLHI9bnVsbCx1PXQodixaby5tb3VzZSwkLCJtb3VzZW1vdmUiLCJt
b3VzZXVwIiksaT10KFYsWm8udG91Y2gsWCwidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtyZXR1cm4g
bi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxa
by5yZWJpbmQobixlLCJvbiIpfTt2YXIgYmE9TWF0aC5QSSx3YT0yKmJhLFNhPWJhLzIsa2E9MWUt
NixFYT1rYSprYSxBYT1iYS8xODAsQ2E9MTgwL2JhLE5hPU1hdGguU1FSVDIsemE9MixMYT00O1pv
LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7dmFyIHQ9bip5O2lm
KG0pe3ZhciBlPVEodiksbz1pLyh6YSpoKSooZSpudChOYSp0K3YpLUsodikpO3JldHVybltyK28q
cyx1K28qbCxpKmUvUShOYSp0K3YpXX1yZXR1cm5bcituKnMsdStuKmwsaSpNYXRoLmV4cChOYSp0
KV19dmFyIHI9blswXSx1PW5bMV0saT1uWzJdLG89dFswXSxhPXRbMV0sYz10WzJdLHM9by1yLGw9
YS11LGY9cypzK2wqbCxoPU1hdGguc3FydChmKSxnPShjKmMtaSppK0xhKmYpLygyKmkqemEqaCks
cD0oYypjLWkqaS1MYSpmKS8oMipjKnphKmgpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1n
KSxkPU1hdGgubG9nKE1hdGguc3FydChwKnArMSktcCksbT1kLXYseT0obXx8TWF0aC5sb2coYy9p
KSkvTmE7cmV0dXJuIGUuZHVyYXRpb249MWUzKnksZX0sWm8uYmVoYXZpb3Iuem9vbT1mdW5jdGlv
bigpe2Z1bmN0aW9uIG4obil7bi5vbihBLHMpLm9uKFJhKyIuem9vbSIsZikub24oImRibGNsaWNr
Lnpvb20iLGgpLm9uKHosbCl9ZnVuY3Rpb24gdChuKXtyZXR1cm5bKG5bMF0tUy54KS9TLmssKG5b
MV0tUy55KS9TLmtdfWZ1bmN0aW9uIGUobil7cmV0dXJuW25bMF0qUy5rK1MueCxuWzFdKlMuaytT
LnldfWZ1bmN0aW9uIHIobil7Uy5rPU1hdGgubWF4KEVbMF0sTWF0aC5taW4oRVsxXSxuKSl9ZnVu
Y3Rpb24gdShuLHQpe3Q9ZSh0KSxTLngrPW5bMF0tdFswXSxTLnkrPW5bMV0tdFsxXX1mdW5jdGlv
biBpKCl7XyYmXy5kb21haW4oeC5yYW5nZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLngp
L1Mua30pLm1hcCh4LmludmVydCkpLHcmJncuZG9tYWluKGIucmFuZ2UoKS5tYXAoZnVuY3Rpb24o
bil7cmV0dXJuKG4tUy55KS9TLmt9KS5tYXAoYi5pbnZlcnQpKX1mdW5jdGlvbiBvKG4pe24oe3R5
cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBhKG4pe2koKSxuKHt0eXBlOiJ6b29tIixzY2FsZTpT
LmssdHJhbnNsYXRlOltTLngsUy55XX0pfWZ1bmN0aW9uIGMobil7bih7dHlwZToiem9vbWVuZCJ9
KX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24gbigpe2w9MSx1KFpvLm1vdXNlKHIpLGgpLGEocyl9ZnVu
Y3Rpb24gZSgpe2Yub24oQyxudWxsKS5vbihOLG51bGwpLGcobCYmWm8uZXZlbnQudGFyZ2V0PT09
aSksYyhzKX12YXIgcj10aGlzLGk9Wm8uZXZlbnQudGFyZ2V0LHM9TC5vZihyLGFyZ3VtZW50cyks
bD0wLGY9Wm8uc2VsZWN0KFdvKS5vbihDLG4pLm9uKE4sZSksaD10KFpvLm1vdXNlKHIpKSxnPUko
KTtILmNhbGwociksbyhzKX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigpe3ZhciBuPVpvLnRvdWNo
ZXMoZyk7cmV0dXJuIGg9Uy5rLG4uZm9yRWFjaChmdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4g
diYmKHZbbi5pZGVudGlmaWVyXT10KG4pKX0pLG59ZnVuY3Rpb24gZSgpe3ZhciB0PVpvLmV2ZW50
LnRhcmdldDtaby5zZWxlY3QodCkub24oTSxpKS5vbihfLGYpLGIucHVzaCh0KTtmb3IodmFyIGU9
Wm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz0wLGM9ZS5sZW5ndGg7Yz5vOysrbyl2W2Vbb10uaWRl
bnRpZmllcl09bnVsbDt2YXIgcz1uKCksbD1EYXRlLm5vdygpO2lmKDE9PT1zLmxlbmd0aCl7aWYo
NTAwPmwtbSl7dmFyIGg9c1swXSxnPXZbaC5pZGVudGlmaWVyXTtyKDIqUy5rKSx1KGgsZykseSgp
LGEocCl9bT1sfWVsc2UgaWYocy5sZW5ndGg+MSl7dmFyIGg9c1swXSx4PXNbMV0sdz1oWzBdLXhb
MF0saz1oWzFdLXhbMV07ZD13KncrayprfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89
Wm8udG91Y2hlcyhnKSxjPTAscz1vLmxlbmd0aDtzPmM7KytjLGk9bnVsbClpZihlPW9bY10saT12
W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIgbD0obD1lWzBdLW5b
MF0pKmwrKGw9ZVsxXS1uWzFdKSpsLGY9ZCYmTWF0aC5zcXJ0KGwvZCk7bj1bKG5bMF0rZVswXSkv
MiwoblsxXStlWzFdKS8yXSx0PVsodFswXStpWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX1t
PW51bGwsdShuLHQpLGEocCl9ZnVuY3Rpb24gZigpe2lmKFpvLmV2ZW50LnRvdWNoZXMubGVuZ3Ro
KXtmb3IodmFyIHQ9Wm8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysr
ZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVybiB2b2lkIG4o
KX1aby5zZWxlY3RBbGwoYikub24oeCxudWxsKSx3Lm9uKEEscykub24oeixsKSxrKCksYyhwKX12
YXIgaCxnPXRoaXMscD1MLm9mKGcsYXJndW1lbnRzKSx2PXt9LGQ9MCx4PSIuem9vbS0iK1pvLmV2
ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsTT0idG91Y2htb3ZlIit4LF89InRvdWNo
ZW5kIit4LGI9W10sdz1aby5zZWxlY3QoZykub24oQSxudWxsKS5vbih6LGUpLGs9SSgpO0guY2Fs
bChnKSxlKCksbyhwKX1mdW5jdGlvbiBmKCl7dmFyIG49TC5vZih0aGlzLGFyZ3VtZW50cyk7ZD9j
bGVhclRpbWVvdXQoZCk6KGc9dChwPXZ8fFpvLm1vdXNlKHRoaXMpKSxILmNhbGwodGhpcyksbyhu
KSksZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZD1udWxsLGMobil9LDUwKSx5KCkscihNYXRoLnBv
dygyLC4wMDIqVGEoKSkqUy5rKSx1KHAsZyksYShuKX1mdW5jdGlvbiBoKCl7dmFyIG49TC5vZih0
aGlzLGFyZ3VtZW50cyksZT1aby5tb3VzZSh0aGlzKSxpPXQoZSkscz1NYXRoLmxvZyhTLmspL01h
dGguTE4yO28obikscihNYXRoLnBvdygyLFpvLmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChzKS0x
Ok1hdGguZmxvb3IocykrMSkpLHUoZSxpKSxhKG4pLGMobil9dmFyIGcscCx2LGQsbSx4LF8sYix3
LFM9e3g6MCx5OjAsazoxfSxrPVs5NjAsNTAwXSxFPXFhLEE9Im1vdXNlZG93bi56b29tIixDPSJt
b3VzZW1vdmUuem9vbSIsTj0ibW91c2V1cC56b29tIix6PSJ0b3VjaHN0YXJ0Lnpvb20iLEw9TShu
LCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO3JldHVybiBuLmV2ZW50PWZ1bmN0aW9uKG4p
e24uZWFjaChmdW5jdGlvbigpe3ZhciBuPUwub2YodGhpcyxhcmd1bWVudHMpLHQ9UztTcz9aby5z
ZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Uz10
aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxvKG4pfSkudHdlZW4oInpvb206em9vbSIsZnVu
Y3Rpb24oKXt2YXIgZT1rWzBdLHI9a1sxXSx1PWUvMixpPXIvMixvPVpvLmludGVycG9sYXRlWm9v
bShbKHUtUy54KS9TLmssKGktUy55KS9TLmssZS9TLmtdLFsodS10LngpL3QuaywoaS10LnkpL3Qu
ayxlL3Qua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1vKHQpLGM9ZS9yWzJdO3RoaXMuX19j
aGFydF9fPVM9e3g6dS1yWzBdKmMseTppLXJbMV0qYyxrOmN9LGEobil9fSkuZWFjaCgiZW5kLnpv
b20iLGZ1bmN0aW9uKCl7YyhuKX0pOih0aGlzLl9fY2hhcnRfXz1TLG8obiksYShuKSxjKG4pKX0p
fSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz17eDor
dFswXSx5Oit0WzFdLGs6Uy5rfSxpKCksbik6W1MueCxTLnldfSxuLnNjYWxlPWZ1bmN0aW9uKHQp
e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4OlMueCx5OlMueSxrOit0fSxpKCksbik6Uy5r
fSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51
bGw9PXQ/cWE6Wyt0WzBdLCt0WzFdXSxuKTpFfSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8odj10JiZbK3RbMF0sK3RbMV1dLG4pOnZ9LG4uc2l6ZT1mdW5jdGlv
bih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz10JiZbK3RbMF0sK3RbMV1dLG4pOmt9LG4u
eD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz10LHg9dC5jb3B5KCksUz17
eDowLHk6MCxrOjF9LG4pOl99LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD8odz10LGI9dC5jb3B5KCksUz17eDowLHk6MCxrOjF9LG4pOnd9LFpvLnJlYmluZChuLEwsIm9u
Iil9O3ZhciBUYSxxYT1bMCwxLzBdLFJhPSJvbndoZWVsImluICRvPyhUYT1mdW5jdGlvbigpe3Jl
dHVybi1aby5ldmVudC5kZWx0YVkqKFpvLmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIp
OiJvbm1vdXNld2hlZWwiaW4gJG8/KFRhPWZ1bmN0aW9uKCl7cmV0dXJuIFpvLmV2ZW50LndoZWVs
RGVsdGF9LCJtb3VzZXdoZWVsIik6KFRhPWZ1bmN0aW9uKCl7cmV0dXJuLVpvLmV2ZW50LmRldGFp
bH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKTtaby5jb2xvcj1ldCxldC5wcm90b3R5cGUudG9TdHJp
bmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0sWm8uaHNsPXJ0O3ZhciBEYT1ydC5w
cm90b3R5cGU9bmV3IGV0O0RhLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93
KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwvbil9
LERhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVu
Z3RoP246MSksbmV3IHJ0KHRoaXMuaCx0aGlzLnMsbip0aGlzLmwpfSxEYS5yZ2I9ZnVuY3Rpb24o
KXtyZXR1cm4gdXQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSxaby5oY2w9aXQ7dmFyIFBhPWl0LnBy
b3RvdHlwZT1uZXcgZXQ7UGEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBpdCh0aGlz
LmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrVWEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkp
fSxQYS5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBpdCh0aGlzLmgsdGhpcy5jLE1hdGgu
bWF4KDAsdGhpcy5sLVVhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0sUGEucmdiPWZ1bmN0aW9u
KCl7cmV0dXJuIG90KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sWm8ubGFiPWF0O3ZhciBV
YT0xOCxqYT0uOTUwNDcsSGE9MSxGYT0xLjA4ODgzLE9hPWF0LnByb3RvdHlwZT1uZXcgZXQ7T2Eu
YnJpZ2h0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBhdChNYXRoLm1pbigxMDAsdGhpcy5sK1Vh
Kihhcmd1bWVudHMubGVuZ3RoP246MSkpLHRoaXMuYSx0aGlzLmIpfSxPYS5kYXJrZXI9ZnVuY3Rp
b24obil7cmV0dXJuIG5ldyBhdChNYXRoLm1heCgwLHRoaXMubC1VYSooYXJndW1lbnRzLmxlbmd0
aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sT2EucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGN0KHRoaXMu
bCx0aGlzLmEsdGhpcy5iKX0sWm8ucmdiPWd0O3ZhciBZYT1ndC5wcm90b3R5cGU9bmV3IGV0O1lh
LmJyaWdodGVyPWZ1bmN0aW9uKG4pe249TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEp
O3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYix1PTMwO3JldHVybiB0fHxlfHxyPyh0JiZ1
PnQmJih0PXUpLGUmJnU+ZSYmKGU9dSksciYmdT5yJiYocj11KSxuZXcgZ3QoTWF0aC5taW4oMjU1
LHQvbiksTWF0aC5taW4oMjU1LGUvbiksTWF0aC5taW4oMjU1LHIvbikpKTpuZXcgZ3QodSx1LHUp
fSxZYS5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxl
bmd0aD9uOjEpLG5ldyBndChuKnRoaXMucixuKnRoaXMuZyxuKnRoaXMuYil9LFlhLmhzbD1mdW5j
dGlvbigpe3JldHVybiB5dCh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LFlhLnRvU3RyaW5nPWZ1bmN0
aW9uKCl7cmV0dXJuIiMiK2R0KHRoaXMucikrZHQodGhpcy5nKStkdCh0aGlzLmIpfTt2YXIgSWE9
Wm8ubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1
MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1
ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2
aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVl
OjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0
NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0
MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJv
ZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTEx
MTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3Jl
ZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3Jl
ZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3Ns
YXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0
OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5
NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2Rn
ZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZv
cmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hv
c3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0
MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5
ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0
OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxh
dmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1
ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0
NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGln
aHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGln
aHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAw
MzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0
ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVl
bjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgs
bWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIx
MTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNs
YXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0
NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50
Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFq
b3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3Nixv
bGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hp
ZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxl
dHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3
MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06
MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWQ6MTY3MTE2ODAs
cm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcs
c2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFz
aGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkw
MDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0
NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjox
MzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1
b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIx
NSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3
NH0pO0lhLmZvckVhY2goZnVuY3Rpb24obix0KXtJYS5zZXQobixwdCh0KSl9KSxaby5mdW5jdG9y
PWJ0LFpvLnhocj1TdCh3dCksWm8uZHN2PWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUsaSl7
YXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lLGU9bnVsbCk7dmFyIG89a3Qobix0LG51bGw9PWU/cjp1
KGUpLGkpO3JldHVybiBvLnJvdz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9v
LnJlc3BvbnNlKG51bGw9PShlPW4pP3I6dShuKSk6ZX0sb31mdW5jdGlvbiByKG4pe3JldHVybiBl
LnBhcnNlKG4ucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiB1KG4pe3JldHVybiBmdW5jdGlvbih0KXty
ZXR1cm4gZS5wYXJzZSh0LnJlc3BvbnNlVGV4dCxuKX19ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5t
YXAobykuam9pbihuKX1mdW5jdGlvbiBvKG4pe3JldHVybiBhLnRlc3Qobik/JyInK24ucmVwbGFj
ZSgvXCIvZywnIiInKSsnIic6bn12YXIgYT1uZXcgUmVnRXhwKCdbIicrbisiXG5dIiksYz1uLmNo
YXJDb2RlQXQoMCk7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obix0KXt2YXIgcjtyZXR1cm4gZS5w
YXJzZVJvd3MobixmdW5jdGlvbihuLGUpe2lmKHIpcmV0dXJuIHIobixlLTEpO3ZhciB1PW5ldyBG
dW5jdGlvbigiZCIsInJldHVybiB7IituLm1hcChmdW5jdGlvbihuLHQpe3JldHVybiBKU09OLnN0
cmluZ2lmeShuKSsiOiBkWyIrdCsiXSJ9KS5qb2luKCIsIikrIn0iKTtyPXQ/ZnVuY3Rpb24obixl
KXtyZXR1cm4gdCh1KG4pLGUpfTp1fSl9LGUucGFyc2VSb3dzPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rp
b24gZSgpe2lmKGw+PXMpcmV0dXJuIG87aWYodSlyZXR1cm4gdT0hMSxpO3ZhciB0PWw7aWYoMzQ9
PT1uLmNoYXJDb2RlQXQodCkpe2Zvcih2YXIgZT10O2UrKzxzOylpZigzND09PW4uY2hhckNvZGVB
dChlKSl7aWYoMzQhPT1uLmNoYXJDb2RlQXQoZSsxKSlicmVhazsrK2V9bD1lKzI7dmFyIHI9bi5j
aGFyQ29kZUF0KGUrMSk7cmV0dXJuIDEzPT09cj8odT0hMCwxMD09PW4uY2hhckNvZGVBdChlKzIp
JiYrK2wpOjEwPT09ciYmKHU9ITApLG4uc3Vic3RyaW5nKHQrMSxlKS5yZXBsYWNlKC8iIi9nLCci
Jyl9Zm9yKDtzPmw7KXt2YXIgcj1uLmNoYXJDb2RlQXQobCsrKSxhPTE7aWYoMTA9PT1yKXU9ITA7
ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PW4uY2hhckNvZGVBdChsKSYmKCsrbCwrK2EpO2Vsc2Ug
aWYociE9PWMpY29udGludWU7cmV0dXJuIG4uc3Vic3RyaW5nKHQsbC1hKX1yZXR1cm4gbi5zdWJz
dHJpbmcodCl9Zm9yKHZhciByLHUsaT17fSxvPXt9LGE9W10scz1uLmxlbmd0aCxsPTAsZj0wOyhy
PWUoKSkhPT1vOyl7Zm9yKHZhciBoPVtdO3IhPT1pJiZyIT09bzspaC5wdXNoKHIpLHI9ZSgpOygh
dHx8KGg9dChoLGYrKykpKSYmYS5wdXNoKGgpfXJldHVybiBhfSxlLmZvcm1hdD1mdW5jdGlvbih0
KXtpZihBcnJheS5pc0FycmF5KHRbMF0pKXJldHVybiBlLmZvcm1hdFJvd3ModCk7dmFyIHI9bmV3
IGgsdT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiBuKXIuaGFz
KHQpfHx1LnB1c2goci5hZGQodCkpfSksW3UubWFwKG8pLmpvaW4obildLmNvbmNhdCh0Lm1hcChm
dW5jdGlvbih0KXtyZXR1cm4gdS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG8odFtuXSl9KS5qb2lu
KG4pfSkpLmpvaW4oIlxuIil9LGUuZm9ybWF0Um93cz1mdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAo
aSkuam9pbigiXG4iKX0sZX0sWm8uY3N2PVpvLmRzdigiLCIsInRleHQvY3N2IiksWm8udHN2PVpv
LmRzdigiICAgICIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKSxaby50b3VjaD1mdW5jdGlv
bihuLHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYoZT10LHQ9eCgpLmNoYW5nZWRUb3VjaGVz
KSx0KWZvcih2YXIgcix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZp
ZXI9PT1lKXJldHVybiBaKG4scil9O3ZhciBaYSxWYSxYYSwkYSxCYSxXYT1Xb1twKFdvLCJyZXF1
ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1pvLnRp
bWVyPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9MCksMz5y
JiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiExLG46bnVsbH07VmE/VmEu
bj1pOlphPWksVmE9aSxYYXx8KCRhPWNsZWFyVGltZW91dCgkYSksWGE9MSxXYShBdCkpfSxaby50
aW1lci5mbHVzaD1mdW5jdGlvbigpe0N0KCksTnQoKX0sWm8ucm91bmQ9ZnVuY3Rpb24obix0KXty
ZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9
O3ZhciBKYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJH
IiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoTHQpO1pvLmZvcm1hdFByZWZpeD1mdW5jdGlvbihu
LHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSksdCYmKG49Wm8ucm91bmQobix6dChu
LHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgu
bWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksSmFbOCtlLzNdfTt2
YXIgR2E9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/
KFwuLT9cZCspPyhbYS16JV0pPy9pLEthPVpvLm1hcCh7YjpmdW5jdGlvbihuKXtyZXR1cm4gbi50
b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0s
bzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4g
bi50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBw
ZXJDYXNlKCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5j
dGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1
cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49Wm8ucm91bmQobix6dChu
LHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLHp0KG4qKDErMWUtMTUpLHQpKSkp
fX0pLFFhPVpvLnRpbWU9e30sbmM9RGF0ZTtSdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdl
dFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENI
b3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01p
bGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENN
aW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgp
fSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdl
dFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZz
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8u
dmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7dGMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8s
YXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7dGMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxh
cmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe3RjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5
KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe3RjLnNldFVUQ0hvdXJzLmFw
cGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXt0Yy5zZXRV
VENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rp
b24oKXt0Yy5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpm
dW5jdGlvbigpe3RjLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNv
bmRzOmZ1bmN0aW9uKCl7dGMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0s
c2V0VGltZTpmdW5jdGlvbigpe3RjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2
YXIgdGM9RGF0ZS5wcm90b3R5cGU7UWEueWVhcj1EdChmdW5jdGlvbihuKXtyZXR1cm4gbj1RYS5k
YXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdl
dEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxRYS55
ZWFycz1RYS55ZWFyLnJhbmdlLFFhLnllYXJzLnV0Yz1RYS55ZWFyLnV0Yy5yYW5nZSxRYS5kYXk9
RHQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IG5jKDJlMywwKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihu
LmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0fSxmdW5jdGlvbihuLHQp
e24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgp
LTF9KSxRYS5kYXlzPVFhLmRheS5yYW5nZSxRYS5kYXlzLnV0Yz1RYS5kYXkudXRjLnJhbmdlLFFh
LmRheU9mWWVhcj1mdW5jdGlvbihuKXt2YXIgdD1RYS55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29y
KChuLXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkv
ODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2Rh
eSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChmdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBl
PVFhW25dPUR0KGZ1bmN0aW9uKG4pe3JldHVybihuPVFhLmRheShuKSkuc2V0RGF0ZShuLmdldERh
dGUoKS0obi5nZXREYXkoKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERh
dGUoKSs3Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1RYS55ZWFyKG4pLmdldERh
eSgpO3JldHVybiBNYXRoLmZsb29yKChRYS5kYXlPZlllYXIobikrKGUrdCklNykvNyktKGUhPT10
KX0pO1FhW24rInMiXT1lLnJhbmdlLFFhW24rInMiXS51dGM9ZS51dGMucmFuZ2UsUWFbbisiT2ZZ
ZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9UWEueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5m
bG9vcigoUWEuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpfX0pLFFhLndlZWs9UWEuc3VuZGF5LFFh
LndlZWtzPVFhLnN1bmRheS5yYW5nZSxRYS53ZWVrcy51dGM9UWEuc3VuZGF5LnV0Yy5yYW5nZSxR
YS53ZWVrT2ZZZWFyPVFhLnN1bmRheU9mWWVhcjt2YXIgZWM9eyItIjoiIixfOiIgIiwwOiIwIn0s
cmM9L15ccypcZCsvLHVjPS9eJS87Wm8ubG9jYWxlPWZ1bmN0aW9uKG4pe3JldHVybntudW1iZXJG
b3JtYXQ6VHQobiksdGltZUZvcm1hdDpVdChuKX19O3ZhciBpYz1aby5sb2NhbGUoe2RlY2ltYWw6
Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1l
OiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2Rz
OlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5
IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIs
IlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFy
eSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJl
ciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJG
ZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3Yi
LCJEZWMiXX0pO1pvLmZvcm1hdD1pYy5udW1iZXJGb3JtYXQsWm8uZ2VvPXt9LHVlLnByb3RvdHlw
ZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7aWUobix0aGlzLnQsb2MpLGllKG9jLnMsdGhpcy5z
LHRoaXMpLHRoaXMucz90aGlzLnQrPW9jLnQ6dGhpcy5zPW9jLnR9LHJlc2V0OmZ1bmN0aW9uKCl7
dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBv
Yz1uZXcgdWU7Wm8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJmFjLmhhc093blByb3BlcnR5
KG4udHlwZSk/YWNbbi50eXBlXShuLHQpOm9lKG4sdCl9O3ZhciBhYz17RmVhdHVyZTpmdW5jdGlv
bihuLHQpe29lKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKG4sdCl7
Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylvZShlW3JdLmdlb21l
dHJ5LHQpfX0sY2M9e1NwaGVyZTpmdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0
aW9uKG4sdCl7bj1uLmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBv
aW50OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3Ro
Oysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rp
b24obix0KXthZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihu
LHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5hdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspYWUoZVty
XSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKG4sdCl7Y2Uobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQ
b2x5Z29uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVu
Z3RoOysrcjx1OyljZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtm
b3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspb2UoZVtyXSx0KX19
O1pvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3JldHVybiBzYz0wLFpvLmdlby5zdHJlYW0obixmYyks
c2N9O3ZhciBzYyxsYz1uZXcgdWUsZmM9e3NwaGVyZTpmdW5jdGlvbigpe3NjKz00KmJhfSxwb2lu
dDp2LGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtsYy5yZXNl
dCgpLGZjLmxpbmVTdGFydD1zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPTIqbGM7c2Mr
PTA+bj80KmJhK246bixmYy5saW5lU3RhcnQ9ZmMubGluZUVuZD1mYy5wb2ludD12fX07Wm8uZ2Vv
LmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXt4LnB1c2goTT1bbD1uLGg9bl0pLGY+
dCYmKGY9dCksdD5nJiYoZz10KX1mdW5jdGlvbiB0KHQsZSl7dmFyIHI9bGUoW3QqQWEsZSpBYV0p
O2lmKG0pe3ZhciB1PWhlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWhlKGksdSk7dmUobyksbz1k
ZShvKTt2YXIgYz10LXAscz1jPjA/MTotMSx2PW9bMF0qQ2EqcyxkPXVhKGMpPjE4MDtpZihkXih2
PnMqcCYmcyp0PnYpKXt2YXIgeT1vWzFdKkNhO3k+ZyYmKGc9eSl9ZWxzZSBpZih2PSh2KzM2MCkl
MzYwLTE4MCxkXih2PnMqcCYmcyp0PnYpKXt2YXIgeT0tb1sxXSpDYTtmPnkmJihmPXkpfWVsc2Ug
Zj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/cD50P2EobCx0KT5hKGwsaCkmJihoPXQpOmEodCxoKT5h
KGwsaCkmJihsPXQpOmg+PWw/KGw+dCYmKGw9dCksdD5oJiYoaD10KSk6dD5wP2EobCx0KT5hKGws
aCkmJihoPXQpOmEodCxoKT5hKGwsaCkmJihsPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVuY3Rp
b24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1sLE1bMV09aCxfLnBvaW50PW4sbT1u
dWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7eSs9dWEocik+MTgwP3IrKHI+MD8z
NjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7ZmMucG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgp
e2ZjLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8oKXt1KHYsZCksZmMubGluZUVuZCgpLHVhKHkpPmth
JiYobD0tKGg9MTgwKSksTVswXT1sLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVy
bih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rp
b24gcyhuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48PXRbMV06bjx0WzBdfHx0WzFd
PG59dmFyIGwsZixoLGcscCx2LGQsbSx5LHgsTSxfPXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVF
bmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxp
bmVFbmQ9byx5PTAsZmMucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmYy5w
b2x5Z29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5sYz8obD0t
KGg9MTgwKSxmPS0oZz05MCkpOnk+a2E/Zz05MDota2E+eSYmKGY9LTkwKSxNWzBdPWwsTVsxXT1o
fX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKGw9Zj0xLzApLHg9W10sWm8uZ2VvLnN0cmVhbShu
LF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQpe3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxp
PVt1XTt0PnI7KytyKWU9eFtyXSxzKGVbMF0sdSl8fHMoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEo
dVswXSx1WzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVbMF09
ZVswXSkpOmkucHVzaCh1PWUpOwotZm9yKHZhciBvLGUscD0tMS8wLHQ9aS5sZW5ndGgtMSxyPTAs
dT1pW3RdO3Q+PXI7dT1lLCsrcillPWlbcl0sKG89YSh1WzFdLGVbMF0pKT5wJiYocD1vLGw9ZVsw
XSxoPXVbMV0pfXJldHVybiB4PU09bnVsbCwxLzA9PT1sfHwxLzA9PT1mP1tbMC8wLDAvMF0sWzAv
MCwwLzBdXTpbW2wsZl0sW2gsZ11dfX0oKSxaby5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24obil7aGM9
Z2M9cGM9dmM9ZGM9bWM9eWM9eGM9TWM9X2M9YmM9MCxaby5nZW8uc3RyZWFtKG4sd2MpO3ZhciB0
PU1jLGU9X2Mscj1iYyx1PXQqdCtlKmUrcipyO3JldHVybiBFYT51JiYodD1tYyxlPXljLHI9eGMs
a2E+Z2MmJih0PXBjLGU9dmMscj1kYyksdT10KnQrZSplK3IqcixFYT51KT9bMC8wLDAvMF06W01h
dGguYXRhbjIoZSx0KSpDYSxHKHIvTWF0aC5zcXJ0KHUpKSpDYV19O3ZhciBoYyxnYyxwYyx2Yyxk
YyxtYyx5Yyx4YyxNYyxfYyxiYyx3Yz17c3BoZXJlOnYscG9pbnQ6eWUsbGluZVN0YXJ0Ok1lLGxp
bmVFbmQ6X2UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7d2MubGluZVN0YXJ0PWJlfSxwb2x5Z29u
RW5kOmZ1bmN0aW9uKCl7d2MubGluZVN0YXJ0PU1lfX0sU2M9QWUod2UsVGUsUmUsWy1iYSwtYmEv
Ml0pLGtjPTFlOTtaby5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciBuLHQsZSxyLHUsaSxv
PXtzdHJlYW06ZnVuY3Rpb24obil7cmV0dXJuIHUmJih1LnZhbGlkPSExKSx1PWkobiksdS52YWxp
ZD0hMCx1fSxleHRlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9VWUo
bj0rYVswXVswXSx0PSthWzBdWzFdLGU9K2FbMV1bMF0scj0rYVsxXVsxXSksdSYmKHUudmFsaWQ9
ITEsdT1udWxsKSxvKTpbW24sdF0sW2Uscl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYw
LDUwMF1dKX0sKFpvLmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBIZShGZSl9
KS5yYXc9RmUsWm8uZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiBaby5nZW8uY29uaWNFcXVh
bEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41
LDQ1LjVdKS5zY2FsZSgxMDcwKX0sWm8uZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe2Z1bmN0aW9u
IG4obil7dmFyIGk9blswXSxvPW5bMV07cmV0dXJuIHQ9bnVsbCxlKGksbyksdHx8KHIoaSxvKSx0
KXx8dShpLG8pLHR9dmFyIHQsZSxyLHUsaT1aby5nZW8uYWxiZXJzKCksbz1aby5nZW8uY29uaWNF
cXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1
NSw2NV0pLGE9Wm8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihb
LTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGM9e3BvaW50OmZ1bmN0aW9uKG4sZSl7dD1bbixl
XX19O3JldHVybiBuLmludmVydD1mdW5jdGlvbihuKXt2YXIgdD1pLnNjYWxlKCksZT1pLnRyYW5z
bGF0ZSgpLHI9KG5bMF0tZVswXSkvdCx1PShuWzFdLWVbMV0pL3Q7cmV0dXJuKHU+PS4xMiYmLjIz
ND51JiZyPj0tLjQyNSYmLS4yMTQ+cj9vOnU+PS4xNjYmJi4yMzQ+dSYmcj49LS4yMTQmJi0uMTE1
PnI/YTppKS5pbnZlcnQobil9LG4uc3RyZWFtPWZ1bmN0aW9uKG4pe3ZhciB0PWkuc3RyZWFtKG4p
LGU9by5zdHJlYW0obikscj1hLnN0cmVhbShuKTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obix1KXt0
LnBvaW50KG4sdSksZS5wb2ludChuLHUpLHIucG9pbnQobix1KX0sc3BoZXJlOmZ1bmN0aW9uKCl7
dC5zcGhlcmUoKSxlLnNwaGVyZSgpLHIuc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3Qu
bGluZVN0YXJ0KCksZS5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9u
KCl7dC5saW5lRW5kKCksZS5saW5lRW5kKCksci5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5j
dGlvbigpe3QucG9seWdvblN0YXJ0KCksZS5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgp
fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCksZS5wb2x5Z29uRW5kKCksci5w
b2x5Z29uRW5kKCl9fX0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGkucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLGEucHJlY2lzaW9uKHQpLG4pOmku
cHJlY2lzaW9uKCl9LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
KGkuc2NhbGUodCksby5zY2FsZSguMzUqdCksYS5zY2FsZSh0KSxuLnRyYW5zbGF0ZShpLnRyYW5z
bGF0ZSgpKSk6aS5zY2FsZSgpfSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRz
Lmxlbmd0aClyZXR1cm4gaS50cmFuc2xhdGUoKTt2YXIgcz1pLnNjYWxlKCksbD0rdFswXSxmPSt0
WzFdO3JldHVybiBlPWkudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tsLS40NTUqcyxmLS4yMzgq
c10sW2wrLjQ1NSpzLGYrLjIzOCpzXV0pLnN0cmVhbShjKS5wb2ludCxyPW8udHJhbnNsYXRlKFts
LS4zMDcqcyxmKy4yMDEqc10pLmNsaXBFeHRlbnQoW1tsLS40MjUqcytrYSxmKy4xMipzK2thXSxb
bC0uMjE0KnMta2EsZisuMjM0KnMta2FdXSkuc3RyZWFtKGMpLnBvaW50LHU9YS50cmFuc2xhdGUo
W2wtLjIwNSpzLGYrLjIxMipzXSkuY2xpcEV4dGVudChbW2wtLjIxNCpzK2thLGYrLjE2NipzK2th
XSxbbC0uMTE1KnMta2EsZisuMjM0KnMta2FdXSkuc3RyZWFtKGMpLnBvaW50LG59LG4uc2NhbGUo
MTA3MCl9O3ZhciBFYyxBYyxDYyxOYyx6YyxMYyxUYz17cG9pbnQ6dixsaW5lU3RhcnQ6dixsaW5l
RW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7QWM9MCxUYy5saW5lU3RhcnQ9T2V9LHBvbHln
b25FbmQ6ZnVuY3Rpb24oKXtUYy5saW5lU3RhcnQ9VGMubGluZUVuZD1UYy5wb2ludD12LEVjKz11
YShBYy8yKX19LHFjPXtwb2ludDpZZSxsaW5lU3RhcnQ6dixsaW5lRW5kOnYscG9seWdvblN0YXJ0
OnYscG9seWdvbkVuZDp2fSxSYz17cG9pbnQ6VmUsbGluZVN0YXJ0OlhlLGxpbmVFbmQ6JGUscG9s
eWdvblN0YXJ0OmZ1bmN0aW9uKCl7UmMubGluZVN0YXJ0PUJlfSxwb2x5Z29uRW5kOmZ1bmN0aW9u
KCl7UmMucG9pbnQ9VmUsUmMubGluZVN0YXJ0PVhlLFJjLmxpbmVFbmQ9JGV9fTtaby5nZW8ucGF0
aD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG4mJigiZnVuY3Rpb24iPT10eXBlb2Yg
YSYmaS5wb2ludFJhZGl1cygrYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG8mJm8udmFsaWR8fChv
PXUoaSkpLFpvLmdlby5zdHJlYW0obixvKSksaS5yZXN1bHQoKX1mdW5jdGlvbiB0KCl7cmV0dXJu
IG89bnVsbCxufXZhciBlLHIsdSxpLG8sYT00LjU7cmV0dXJuIG4uYXJlYT1mdW5jdGlvbihuKXty
ZXR1cm4gRWM9MCxaby5nZW8uc3RyZWFtKG4sdShUYykpLEVjfSxuLmNlbnRyb2lkPWZ1bmN0aW9u
KG4pe3JldHVybiBwYz12Yz1kYz1tYz15Yz14Yz1NYz1fYz1iYz0wLFpvLmdlby5zdHJlYW0obix1
KFJjKSksYmM/W01jL2JjLF9jL2JjXTp4Yz9bbWMveGMseWMveGNdOmRjP1twYy9kYyx2Yy9kY106
WzAvMCwwLzBdfSxuLmJvdW5kcz1mdW5jdGlvbihuKXtyZXR1cm4gemM9TGM9LShDYz1OYz0xLzAp
LFpvLmdlby5zdHJlYW0obix1KHFjKSksW1tDYyxOY10sW3pjLExjXV19LG4ucHJvamVjdGlvbj1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0oZT1uKT9uLnN0cmVhbXx8R2Uo
bik6d3QsdCgpKTplfSxuLmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/KGk9bnVsbD09KHI9bik/bmV3IEllOm5ldyBXZShuKSwiZnVuY3Rpb24iIT10eXBlb2YgYSYm
aS5wb2ludFJhZGl1cyhhKSx0KCkpOnJ9LG4ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1
cygrdCksK3QpLG4pOmF9LG4ucHJvamVjdGlvbihaby5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQo
bnVsbCl9LFpvLmdlby50cmFuc2Zvcm09ZnVuY3Rpb24obil7cmV0dXJue3N0cmVhbTpmdW5jdGlv
bih0KXt2YXIgZT1uZXcgS2UodCk7Zm9yKHZhciByIGluIG4pZVtyXT1uW3JdO3JldHVybiBlfX19
LEtlLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24obix0KXt0aGlzLnN0cmVhbS5wb2ludChuLHQp
fSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0
aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0
cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHln
b25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgp
fX0sWm8uZ2VvLnByb2plY3Rpb249bnIsWm8uZ2VvLnByb2plY3Rpb25NdXRhdG9yPXRyLChaby5n
ZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIG5yKHJyKX0pLnJhdz1yci5pbnZl
cnQ9cnIsWm8uZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQ9
bih0WzBdKkFhLHRbMV0qQWEpLHRbMF0qPUNhLHRbMV0qPUNhLHR9cmV0dXJuIG49aXIoblswXSUz
NjAqQWEsblsxXSpBYSxuLmxlbmd0aD4yP25bMl0qQWE6MCksdC5pbnZlcnQ9ZnVuY3Rpb24odCl7
cmV0dXJuIHQ9bi5pbnZlcnQodFswXSpBYSx0WzFdKkFhKSx0WzBdKj1DYSx0WzFdKj1DYSx0fSx0
fSx1ci5pbnZlcnQ9cnIsWm8uZ2VvLmNpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIg
bj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLHQ9aXIoLW5b
MF0qQWEsLW5bMV0qQWEsMCkuaW52ZXJ0LHU9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50
OmZ1bmN0aW9uKG4sZSl7dS5wdXNoKG49dChuLGUpKSxuWzBdKj1DYSxuWzFdKj1DYX19KSx7dHlw
ZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3VdfX12YXIgdCxlLHI9WzAsMF0sdT02O3JldHVybiBu
Lm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4u
YW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9c3IoKHQ9K3IpKkFh
LHUqQWEpLG4pOnR9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyhlPXNyKHQqQWEsKHU9K3IpKkFhKSxuKTp1fSxuLmFuZ2xlKDkwKX0sWm8uZ2VvLmRpc3Rh
bmNlPWZ1bmN0aW9uKG4sdCl7dmFyIGUscj0odFswXS1uWzBdKSpBYSx1PW5bMV0qQWEsaT10WzFd
KkFhLG89TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHUpLHM9TWF0aC5jb3Mo
dSksbD1NYXRoLnNpbihpKSxmPU1hdGguY29zKGkpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3Fy
dCgoZT1mKm8pKmUrKGU9cypsLWMqZiphKSplKSxjKmwrcypmKmEpfSxaby5nZW8uZ3JhdGljdWxl
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNv
b3JkaW5hdGVzOnQoKX19ZnVuY3Rpb24gdCgpe3JldHVybiBaby5yYW5nZShNYXRoLmNlaWwoaS9k
KSpkLHUsZCkubWFwKGgpLmNvbmNhdChaby5yYW5nZShNYXRoLmNlaWwocy9tKSptLGMsbSkubWFw
KGcpKS5jb25jYXQoWm8ucmFuZ2UoTWF0aC5jZWlsKHIvcCkqcCxlLHApLmZpbHRlcihmdW5jdGlv
bihuKXtyZXR1cm4gdWEobiVkKT5rYX0pLm1hcChsKSkuY29uY2F0KFpvLnJhbmdlKE1hdGguY2Vp
bChhL3YpKnYsbyx2KS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIHVhKG4lbSk+a2F9KS5tYXAo
ZikpfXZhciBlLHIsdSxpLG8sYSxjLHMsbCxmLGgsZyxwPTEwLHY9cCxkPTkwLG09MzYwLHk9Mi41
O3JldHVybiBuLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5tYXAoZnVuY3Rpb24obil7cmV0
dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm59fSl9LG4ub3V0bGluZT1mdW5jdGlv
bigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChpKS5jb25jYXQoZyhjKS5z
bGljZSgxKSxoKHUpLnJldmVyc2UoKS5zbGljZSgxKSxnKHMpLnJldmVyc2UoKS5zbGljZSgxKSld
fX0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bi5tYWpvckV4
dGVudCh0KS5taW5vckV4dGVudCh0KTpuLm1pbm9yRXh0ZW50KCl9LG4ubWFqb3JFeHRlbnQ9ZnVu
Y3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sdT0rdFsxXVswXSxz
PSt0WzBdWzFdLGM9K3RbMV1bMV0saT51JiYodD1pLGk9dSx1PXQpLHM+YyYmKHQ9cyxzPWMsYz10
KSxuLnByZWNpc2lvbih5KSk6W1tpLHNdLFt1LGNdXX0sbi5taW5vckV4dGVudD1mdW5jdGlvbih0
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLGE9K3RbMF1b
MV0sbz0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksYT5vJiYodD1hLGE9byxvPXQpLG4ucHJl
Y2lzaW9uKHkpKTpbW3IsYV0sW2Usb11dfSxuLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/bi5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOm4ubWlub3JTdGVwKCl9LG4u
bWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09
K3RbMV0sbik6W2QsbV19LG4ubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhwPSt0WzBdLHY9K3RbMV0sbik6W3Asdl19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQp
e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSt0LGw9ZnIoYSxvLDkwKSxmPWhyKHIsZSx5KSxo
PWZyKHMsYyw5MCksZz1ocihpLHUseSksbik6eX0sbi5tYWpvckV4dGVudChbWy0xODAsLTkwK2th
XSxbMTgwLDkwLWthXV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAta2FdLFsxODAsODAra2FdXSl9
LFpvLmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTGlu
ZVN0cmluZyIsY29vcmRpbmF0ZXM6W3R8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGV8fHUuYXBw
bHkodGhpcyxhcmd1bWVudHMpXX19dmFyIHQsZSxyPWdyLHU9cHI7cmV0dXJuIG4uZGlzdGFuY2U9
ZnVuY3Rpb24oKXtyZXR1cm4gWm8uZ2VvLmRpc3RhbmNlKHR8fHIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpLGV8fHUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP251bGw6ZSxu
KTpyfSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGU9
ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LG4pOnV9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKCl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bjowfSxufSxaby5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rp
b24obix0KXtyZXR1cm4gdnIoblswXSpBYSxuWzFdKkFhLHRbMF0qQWEsdFsxXSpBYSl9LFpvLmdl
by5sZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIERjPTAsWm8uZ2VvLnN0cmVhbShuLFBjKSxEY307
dmFyIERjLFBjPXtzcGhlcmU6dixwb2ludDp2LGxpbmVTdGFydDpkcixsaW5lRW5kOnYscG9seWdv
blN0YXJ0OnYscG9seWdvbkVuZDp2fSxVYz1tcihmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zcXJ0
KDIvKDErbikpfSxmdW5jdGlvbihuKXtyZXR1cm4gMipNYXRoLmFzaW4obi8yKX0pOyhaby5nZW8u
YXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIG5yKFVjKX0pLnJhdz1VYzt2YXIg
amM9bXIoZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5hY29zKG4pO3JldHVybiB0JiZ0L01hdGguc2lu
KHQpfSx3dCk7KFpvLmdlby5hemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBu
cihqYyl9KS5yYXc9amMsKFpvLmdlby5jb25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBI
ZSh5cil9KS5yYXc9eXIsKFpvLmdlby5jb25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJu
IEhlKHhyKX0pLnJhdz14cjt2YXIgSGM9bXIoZnVuY3Rpb24obil7cmV0dXJuIDEvbn0sTWF0aC5h
dGFuKTsoWm8uZ2VvLmdub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIG5yKEhjKX0pLnJhdz1IYyxN
ci5pbnZlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm5bbiwyKk1hdGguYXRhbihNYXRoLmV4cCh0KSkt
U2FdfSwoWm8uZ2VvLm1lcmNhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIF9yKE1yKX0pLnJhdz1Ncjt2
YXIgRmM9bXIoZnVuY3Rpb24oKXtyZXR1cm4gMX0sTWF0aC5hc2luKTsoWm8uZ2VvLm9ydGhvZ3Jh
cGhpYz1mdW5jdGlvbigpe3JldHVybiBucihGYyl9KS5yYXc9RmM7dmFyIE9jPW1yKGZ1bmN0aW9u
KG4pe3JldHVybiAxLygxK24pfSxmdW5jdGlvbihuKXtyZXR1cm4gMipNYXRoLmF0YW4obil9KTso
Wm8uZ2VvLnN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gbnIoT2MpfSkucmF3PU9jLGJy
LmludmVydD1mdW5jdGlvbihuLHQpe3JldHVyblstdCwyKk1hdGguYXRhbihNYXRoLmV4cChuKSkt
U2FdfSwoWm8uZ2VvLnRyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciBuPV9yKGJyKSx0
PW4uY2VudGVyLGU9bi5yb3RhdGU7cmV0dXJuIG4uY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBu
P3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sbi5yb3RhdGU9ZnVuY3Rpb24o
bil7cmV0dXJuIG4/ZShbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPWUoKSxb
blswXSxuWzFdLG5bMl0tOTBdKX0sZShbMCwwLDkwXSl9KS5yYXc9YnIsWm8uZ2VvbT17fSxaby5n
ZW9tLmh1bGw9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdChuKXtpZihuLmxlbmd0aDwzKXJldHVybltd
O3ZhciB0LHU9YnQoZSksaT1idChyKSxvPW4ubGVuZ3RoLGE9W10sYz1bXTtmb3IodD0wO28+dDt0
KyspYS5wdXNoKFsrdS5jYWxsKHRoaXMsblt0XSx0KSwraS5jYWxsKHRoaXMsblt0XSx0KSx0XSk7
Zm9yKGEuc29ydChFciksdD0wO28+dDt0KyspYy5wdXNoKFthW3RdWzBdLC1hW3RdWzFdXSk7dmFy
IHM9a3IoYSksbD1rcihjKSxmPWxbMF09PT1zWzBdLGg9bFtsLmxlbmd0aC0xXT09PXNbcy5sZW5n
dGgtMV0sZz1bXTtmb3IodD1zLmxlbmd0aC0xO3Q+PTA7LS10KWcucHVzaChuW2Fbc1t0XV1bMl1d
KTtmb3IodD0rZjt0PGwubGVuZ3RoLWg7Kyt0KWcucHVzaChuW2FbbFt0XV1bMl1dKTtyZXR1cm4g
Z312YXIgZT13cixyPVNyO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Qobik6KHQueD1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQpfSxaby5nZW9tLnBvbHlnb249ZnVu
Y3Rpb24obil7cmV0dXJuIHNhKG4sWWMpLG59O3ZhciBZYz1aby5nZW9tLnBvbHlnb24ucHJvdG90
eXBlPVtdO1ljLmFyZWE9ZnVuY3Rpb24oKXtmb3IodmFyIG4sdD0tMSxlPXRoaXMubGVuZ3RoLHI9
dGhpc1tlLTFdLHU9MDsrK3Q8ZTspbj1yLHI9dGhpc1t0XSx1Kz1uWzFdKnJbMF0tblswXSpyWzFd
O3JldHVybi41KnV9LFljLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj0tMSx1PXRoaXMu
bGVuZ3RoLGk9MCxvPTAsYT10aGlzW3UtMV07Zm9yKGFyZ3VtZW50cy5sZW5ndGh8fChuPS0xLyg2
KnRoaXMuYXJlYSgpKSk7KytyPHU7KXQ9YSxhPXRoaXNbcl0sZT10WzBdKmFbMV0tYVswXSp0WzFd
LGkrPSh0WzBdK2FbMF0pKmUsbys9KHRbMV0rYVsxXSkqZTtyZXR1cm5baSpuLG8qbl19LFljLmNs
aXA9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscix1LGksbyxhPU5yKG4pLGM9LTEscz10aGlzLmxl
bmd0aC1Ocih0aGlzKSxsPXRoaXNbcy0xXTsrK2M8czspe2Zvcih0PW4uc2xpY2UoKSxuLmxlbmd0
aD0wLHU9dGhpc1tjXSxpPXRbKHI9dC5sZW5ndGgtYSktMV0sZT0tMTsrK2U8cjspbz10W2VdLEFy
KG8sbCx1KT8oQXIoaSxsLHUpfHxuLnB1c2goQ3IoaSxvLGwsdSkpLG4ucHVzaChvKSk6QXIoaSxs
LHUpJiZuLnB1c2goQ3IoaSxvLGwsdSkpLGk9bzthJiZuLnB1c2goblswXSksbD11fXJldHVybiBu
fTt2YXIgSWMsWmMsVmMsWGMsJGMsQmM9W10sV2M9W107VXIucHJvdG90eXBlLnByZXBhcmU9ZnVu
Y3Rpb24oKXtmb3IodmFyIG4sdD10aGlzLmVkZ2VzLGU9dC5sZW5ndGg7ZS0tOyluPXRbZV0uZWRn
ZSxuLmImJm4uYXx8dC5zcGxpY2UoZSwxKTtyZXR1cm4gdC5zb3J0KEhyKSx0Lmxlbmd0aH0sV3Iu
cHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0
ZT90aGlzLmVkZ2UuYTp0aGlzLmVkZ2UuYn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRn
ZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5iOnRoaXMuZWRnZS5hfX0sSnIucHJvdG90eXBlPXtp
bnNlcnQ6ZnVuY3Rpb24obix0KXt2YXIgZSxyLHU7aWYobil7aWYodC5QPW4sdC5OPW4uTixuLk4m
JihuLk4uUD10KSxuLk49dCxuLlIpe2ZvcihuPW4uUjtuLkw7KW49bi5MO24uTD10fWVsc2Ugbi5S
PXQ7ZT1ufWVsc2UgdGhpcy5fPyhuPW51KHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10
LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5V
PWUsdC5DPSEwLG49dDtlJiZlLkM7KXI9ZS5VLGU9PT1yLkw/KHU9ci5SLHUmJnUuQz8oZS5DPXUu
Qz0hMSxyLkM9ITAsbj1yKToobj09PWUuUiYmKEtyKHRoaXMsZSksbj1lLGU9bi5VKSxlLkM9ITEs
ci5DPSEwLFFyKHRoaXMscikpKToodT1yLkwsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIp
OihuPT09ZS5MJiYoUXIodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsS3IodGhpcyxy
KSkpLGU9bi5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24obil7bi5OJiYobi5OLlA9bi5Q
KSxuLlAmJihuLlAuTj1uLk4pLG4uTj1uLlA9bnVsbDt2YXIgdCxlLHIsdT1uLlUsaT1uLkwsbz1u
LlI7aWYoZT1pP28/bnUobyk6aTpvLHU/dS5MPT09bj91Lkw9ZTp1LlI9ZTp0aGlzLl89ZSxpJiZv
PyhyPWUuQyxlLkM9bi5DLGUuTD1pLGkuVT1lLGUhPT1vPyh1PWUuVSxlLlU9bi5VLG49ZS5SLHUu
TD1uLGUuUj1vLG8uVT1lKTooZS5VPXUsdT1lLG49ZS5SKSk6KHI9bi5DLG49ZSksbiYmKG4uVT11
KSwhcil7aWYobiYmbi5DKXJldHVybiBuLkM9ITEsdm9pZCAwO2Rve2lmKG49PT10aGlzLl8pYnJl
YWs7aWYobj09PXUuTCl7aWYodD11LlIsdC5DJiYodC5DPSExLHUuQz0hMCxLcih0aGlzLHUpLHQ9
dS5SKSx0LkwmJnQuTC5DfHx0LlImJnQuUi5DKXt0LlImJnQuUi5DfHwodC5MLkM9ITEsdC5DPSEw
LFFyKHRoaXMsdCksdD11LlIpLHQuQz11LkMsdS5DPXQuUi5DPSExLEtyKHRoaXMsdSksbj10aGlz
Ll87YnJlYWt9fWVsc2UgaWYodD11LkwsdC5DJiYodC5DPSExLHUuQz0hMCxRcih0aGlzLHUpLHQ9
dS5MKSx0LkwmJnQuTC5DfHx0LlImJnQuUi5DKXt0LkwmJnQuTC5DfHwodC5SLkM9ITEsdC5DPSEw
LEtyKHRoaXMsdCksdD11LkwpLHQuQz11LkMsdS5DPXQuTC5DPSExLFFyKHRoaXMsdSksbj10aGlz
Ll87YnJlYWt9dC5DPSEwLG49dSx1PXUuVX13aGlsZSghbi5DKTtuJiYobi5DPSExKX19fSxaby5n
ZW9tLnZvcm9ub2k9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdChuKXt2YXIgdD1uZXcgQXJyYXkobi5s
ZW5ndGgpLHI9YVswXVswXSx1PWFbMF1bMV0saT1hWzFdWzBdLG89YVsxXVsxXTtyZXR1cm4gdHUo
ZShuKSxhKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsYSl7dmFyIGM9ZS5lZGdlcyxzPWUuc2l0
ZSxsPXRbYV09Yy5sZW5ndGg/Yy5tYXAoZnVuY3Rpb24obil7dmFyIHQ9bi5zdGFydCgpO3JldHVy
blt0LngsdC55XX0pOnMueD49ciYmcy54PD1pJiZzLnk+PXUmJnMueTw9bz9bW3Isb10sW2ksb10s
W2ksdV0sW3IsdV1dOltdO2wucG9pbnQ9blthXX0pLHR9ZnVuY3Rpb24gZShuKXtyZXR1cm4gbi5t
YXAoZnVuY3Rpb24obix0KXtyZXR1cm57eDpNYXRoLnJvdW5kKGkobix0KS9rYSkqa2EseTpNYXRo
LnJvdW5kKG8obix0KS9rYSkqa2EsaTp0fX0pfXZhciByPXdyLHU9U3IsaT1yLG89dSxhPUpjO3Jl
dHVybiBuP3Qobik6KHQubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIHR1KGUobikpLmVkZ2VzLmZp
bHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5sJiZuLnJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJu
e3NvdXJjZTpuW3QubC5pXSx0YXJnZXQ6blt0LnIuaV19fSl9LHQudHJpYW5nbGVzPWZ1bmN0aW9u
KG4pe3ZhciB0PVtdO3JldHVybiB0dShlKG4pKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7
Zm9yKHZhciB1LGksbz1lLnNpdGUsYT1lLmVkZ2VzLnNvcnQoSHIpLGM9LTEscz1hLmxlbmd0aCxs
PWFbcy0xXS5lZGdlLGY9bC5sPT09bz9sLnI6bC5sOysrYzxzOyl1PWwsaT1mLGw9YVtjXS5lZGdl
LGY9bC5sPT09bz9sLnI6bC5sLHI8aS5pJiZyPGYuaSYmcnUobyxpLGYpPDAmJnQucHVzaChbblty
XSxuW2kuaV0sbltmLmldXSl9KSx0fSx0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGk9YnQocj1uKSx0KTpyfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KG89YnQodT1uKSx0KTp1fSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KGE9bnVsbD09bj9KYzpuLHQpOmE9PT1KYz9udWxsOmF9LHQuc2l6ZT1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmNsaXBFeHRlbnQobiYmW1swLDBd
LG5dKTphPT09SmM/bnVsbDphJiZhWzFdfSx0KX07dmFyIEpjPVtbLTFlNiwtMWU2XSxbMWU2LDFl
Nl1dO1pvLmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24obil7cmV0dXJuIFpvLmdlb20udm9yb25vaSgp
LnRyaWFuZ2xlcyhuKX0sWm8uZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbihuLHQsZSxyLHUpe2Z1bmN0
aW9uIGkobil7ZnVuY3Rpb24gaShuLHQsZSxyLHUsaSxvLGEpe2lmKCFpc05hTihlKSYmIWlzTmFO
KHIpKWlmKG4ubGVhZil7dmFyIGM9bi54LGw9bi55O2lmKG51bGwhPWMpaWYodWEoYy1lKSt1YShs
LXIpPC4wMSlzKG4sdCxlLHIsdSxpLG8sYSk7ZWxzZXt2YXIgZj1uLnBvaW50O24ueD1uLnk9bi5w
b2ludD1udWxsLHMobixmLGMsbCx1LGksbyxhKSxzKG4sdCxlLHIsdSxpLG8sYSl9ZWxzZSBuLng9
ZSxuLnk9cixuLnBvaW50PXR9ZWxzZSBzKG4sdCxlLHIsdSxpLG8sYSl9ZnVuY3Rpb24gcyhuLHQs
ZSxyLHUsbyxhLGMpe3ZhciBzPS41Kih1K2EpLGw9LjUqKG8rYyksZj1lPj1zLGg9cj49bCxnPSho
PDwxKStmO24ubGVhZj0hMSxuPW4ubm9kZXNbZ118fChuLm5vZGVzW2ddPW91KCkpLGY/dT1zOmE9
cyxoP289bDpjPWwsaShuLHQsZSxyLHUsbyxhLGMpfXZhciBsLGYsaCxnLHAsdixkLG0seSx4PWJ0
KGEpLE09YnQoYyk7aWYobnVsbCE9dCl2PXQsZD1lLG09cix5PXU7ZWxzZSBpZihtPXk9LSh2PWQ9
MS8wKSxmPVtdLGg9W10scD1uLmxlbmd0aCxvKWZvcihnPTA7cD5nOysrZylsPW5bZ10sbC54PHYm
Jih2PWwueCksbC55PGQmJihkPWwueSksbC54Pm0mJihtPWwueCksbC55PnkmJih5PWwueSksZi5w
dXNoKGwueCksaC5wdXNoKGwueSk7ZWxzZSBmb3IoZz0wO3A+ZzsrK2cpe3ZhciBfPSt4KGw9bltn
XSxnKSxiPStNKGwsZyk7dj5fJiYodj1fKSxkPmImJihkPWIpLF8+bSYmKG09XyksYj55JiYoeT1i
KSxmLnB1c2goXyksaC5wdXNoKGIpfXZhciB3PW0tdixTPXktZDt3PlM/eT1kK3c6bT12K1M7dmFy
IGs9b3UoKTtpZihrLmFkZD1mdW5jdGlvbihuKXtpKGssbiwreChuLCsrZyksK00obixnKSx2LGQs
bSx5KX0say52aXNpdD1mdW5jdGlvbihuKXthdShuLGssdixkLG0seSl9LGc9LTEsbnVsbD09dCl7
Zm9yKDsrK2c8cDspaShrLG5bZ10sZltnXSxoW2ddLHYsZCxtLHkpOy0tZ31lbHNlIG4uZm9yRWFj
aChrLmFkZCk7cmV0dXJuIGY9aD1uPWw9bnVsbCxrfXZhciBvLGE9d3IsYz1TcjtyZXR1cm4obz1h
cmd1bWVudHMubGVuZ3RoKT8oYT11dSxjPWl1LDM9PT1vJiYodT1lLHI9dCxlPXQ9MCksaShuKSk6
KGkueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1uLGkpOmF9LGkueT1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGkpOmN9LGkuZXh0ZW50PWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoo
dD0rblswXVswXSxlPStuWzBdWzFdLHI9K25bMV1bMF0sdT0rblsxXVsxXSksaSk6bnVsbD09dD9u
dWxsOltbdCxlXSxbcix1XV19LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8obnVsbD09bj90PWU9cj11PW51bGw6KHQ9ZT0wLHI9K25bMF0sdT0rblsxXSksaSk6bnVs
bD09dD9udWxsOltyLXQsdS1lXX0saSl9LFpvLmludGVycG9sYXRlUmdiPWN1LFpvLmludGVycG9s
YXRlT2JqZWN0PXN1LFpvLmludGVycG9sYXRlTnVtYmVyPWx1LFpvLmludGVycG9sYXRlU3RyaW5n
PWZ1O3ZhciBHYz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cs
S2M9bmV3IFJlZ0V4cChHYy5zb3VyY2UsImciKTtaby5pbnRlcnBvbGF0ZT1odSxaby5pbnRlcnBv
bGF0b3JzPVtmdW5jdGlvbihuLHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09PWU/
SWEuaGFzKHQpfHwvXigjfHJnYlwofGhzbFwoKS8udGVzdCh0KT9jdTpmdTp0IGluc3RhbmNlb2Yg
ZXQ/Y3U6QXJyYXkuaXNBcnJheSh0KT9ndToib2JqZWN0Ij09PWUmJmlzTmFOKHQpP3N1Omx1KShu
LHQpfV0sWm8uaW50ZXJwb2xhdGVBcnJheT1ndTt2YXIgUWM9ZnVuY3Rpb24oKXtyZXR1cm4gd3R9
LG5zPVpvLm1hcCh7bGluZWFyOlFjLHBvbHk6TXUscXVhZDpmdW5jdGlvbigpe3JldHVybiBtdX0s
Y3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4geXV9LHNpbjpmdW5jdGlvbigpe3JldHVybiBfdX0sZXhw
OmZ1bmN0aW9uKCl7cmV0dXJuIGJ1fSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4gd3V9LGVsYXN0
aWM6U3UsYmFjazprdSxib3VuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gRXV9fSksdHM9Wm8ubWFwKHsi
aW4iOnd0LG91dDp2dSwiaW4tb3V0IjpkdSwib3V0LWluIjpmdW5jdGlvbihuKXtyZXR1cm4gZHUo
dnUobikpfX0pO1pvLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCItIiksZT10Pj0w
P24uc3Vic3RyaW5nKDAsdCk6bixyPXQ+PTA/bi5zdWJzdHJpbmcodCsxKToiaW4iO3JldHVybiBl
PW5zLmdldChlKXx8UWMscj10cy5nZXQocil8fHd0LHB1KHIoZS5hcHBseShudWxsLFZvLmNhbGwo
YXJndW1lbnRzLDEpKSkpfSxaby5pbnRlcnBvbGF0ZUhjbD1BdSxaby5pbnRlcnBvbGF0ZUhzbD1D
dSxaby5pbnRlcnBvbGF0ZUxhYj1OdSxaby5pbnRlcnBvbGF0ZVJvdW5kPXp1LFpvLnRyYW5zZm9y
bT1mdW5jdGlvbihuKXt2YXIgdD0kby5jcmVhdGVFbGVtZW50TlMoWm8ubnMucHJlZml4LnN2Zywi
ZyIpO3JldHVybihaby50cmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRy
aWJ1dGUoInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0
ZSgpfXJldHVybiBuZXcgTHUoZT9lLm1hdHJpeDplcyl9KShuKX0sTHUucHJvdG90eXBlLnRvU3Ry
aW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRl
KCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsi
KSJ9O3ZhciBlcz17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O1pvLmludGVycG9sYXRlVHJhbnNm
b3JtPUR1LFpvLmxheW91dD17fSxaby5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1
bmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQucHVzaChqdShu
W2VdKSk7cmV0dXJuIHR9fSxaby5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7
dmFyIG4scyxmLGgsZyxwPXt9LHY9W10sZD1aby5yYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10s
bj0wLGg9LTE7KytoPGk7KXtmb3Iocz0wLGc9LTE7KytnPGk7KXMrPXVbaF1bZ107di5wdXNoKHMp
LG0ucHVzaChaby5yYW5nZShpKSksbis9c31mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0
dXJuIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29ydChmdW5j
dGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49KHdhLWwqaSkvbixzPTAs
aD0tMTsrK2g8aTspe2ZvcihmPXMsZz0tMTsrK2c8aTspe3ZhciB5PWRbaF0seD1tW3ldW2ddLE09
dVt5XVt4XSxfPXMsYj1zKz1NKm47cFt5KyItIit4XT17aW5kZXg6eSxzdWJpbmRleDp4LHN0YXJ0
QW5nbGU6XyxlbmRBbmdsZTpiLHZhbHVlOk19fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVu
ZEFuZ2xlOnMsdmFsdWU6KHMtZikvbn0scys9bH1mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0xOysr
ZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8fFMudmFsdWUpJiZl
LnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJnZXQ6d306e3NvdXJjZTp3LHRhcmdl
dDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtlLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygo
bi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0
LnZhbHVlKS8yKX0pfXZhciBlLHIsdSxpLG8sYSxjLHM9e30sbD0wO3JldHVybiBzLm1hdHJpeD1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5sZW5ndGgsZT1y
PW51bGwscyk6dX0scy5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhsPW4sZT1yPW51bGwscyk6bH0scy5zb3J0R3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhvPW4sZT1yPW51bGwscyk6b30scy5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9u
KG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLHMpOmF9LHMuc29ydENob3Jk
cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxzKTpjfSxz
LmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0scy5ncm91cHM9ZnVuY3Rpb24oKXty
ZXR1cm4gcnx8bigpLHJ9LHN9LFpvLmxheW91dC5mb3JjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4o
bil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4u
eCxvPXQuY3ktbi55LGE9dS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBzPXQu
Y2hhcmdlL2M7bi5weC09aSpzLG4ucHktPW8qc31yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZwPmMp
e3ZhciBzPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKnMsbi5weS09bypzfX1yZXR1cm4hdC5jaGFy
Z2V9fWZ1bmN0aW9uIHQobil7bi5weD1aby5ldmVudC54LG4ucHk9Wm8uZXZlbnQueSxhLnJlc3Vt
ZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPVpvLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQi
KSxzPVsxLDFdLGw9LjksZj1ycyxoPXVzLGc9LTMwLHA9aXMsdj0uMSxkPS42NCxtPVtdLHk9W107
cmV0dXJuIGEudGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0
eXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHgsTSxfPW0ubGVuZ3Ro
LGI9eS5sZW5ndGg7Zm9yKGU9MDtiPmU7KytlKWE9eVtlXSxmPWEuc291cmNlLGg9YS50YXJnZXQs
eD1oLngtZi54LE09aC55LWYueSwocD14KngrTSpNKSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQo
cCkpLXVbZV0pL3AseCo9cCxNKj1wLGgueC09eCooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWln
aHQpKSxoLnktPU0qZCxmLngrPXgqKGQ9MS1kKSxmLnkrPU0qZCk7aWYoKGQ9cip2KSYmKHg9c1sw
XS8yLE09c1sxXS8yLGU9LTEsZCkpZm9yKDsrK2U8XzspYT1tW2VdLGEueCs9KHgtYS54KSpkLGEu
eSs9KE0tYS55KSpkO2lmKGcpZm9yKFZ1KHQ9Wm8uZ2VvbS5xdWFkdHJlZShtKSxyLG8pLGU9LTE7
KytlPF87KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4oYSkpO2ZvcihlPS0xOysrZTxfOylhPW1b
ZV0sYS5maXhlZD8oYS54PWEucHgsYS55PWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKmws
YS55LT0oYS5weS0oYS5weT1hLnkpKSpsKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0s
YS5ub2Rlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19LGEu
bGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9bixhKTp5fSxhLnNp
emU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bixhKTpzfSxhLmxpbmtE
aXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24i
PT10eXBlb2Ygbj9uOituLGEpOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3Ry
ZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09
dHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyhsPStuLGEpOmx9LGEuY2hhcmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0
YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5z
cXJ0KHApfSxhLmdyYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9
K24sYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1u
Km4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBo
YTpyPW59KSxaby50aW1lcihhLnRpY2spKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gbihuLHIpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtm
b3IoYT0wO3M+YTsrK2Epe3ZhciB1PXlbYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRhcmdl
dCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIgaSxvPWVbdF0sYT0t
MSxzPW8ubGVuZ3RoOysrYTxzOylpZighaXNOYU4oaT1vW2FdW25dKSlyZXR1cm4gaTtyZXR1cm4g
TWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixjPW0ubGVuZ3RoLGw9eS5sZW5ndGgscD1zWzBdLHY9
c1sxXTtmb3IodD0wO2M+dDsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7
bD50OysrdClyPXlbdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5z
b3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVtyLnRhcmdldF0p
LCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7Yz50OysrdClyPW1b
dF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSksaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSks
aXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwi
ZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO2w+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMseVt0
XSx0KTtlbHNlIGZvcih0PTA7bD50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBl
b2YgaClmb3IodD0wO2w+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0
PTA7bD50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZylmb3IodD0wO2M+
dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMsbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3Rd
PWc7cmV0dXJuIGEucmVzdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEo
LjEpfSxhLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0aW9u
KCl7cmV0dXJuIGV8fChlPVpvLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4od3QpLm9uKCJkcmFnc3Rh
cnQuZm9yY2UiLE91KS5vbigiZHJhZy5mb3JjZSIsdCkub24oImRyYWdlbmQuZm9yY2UiLFl1KSks
YXJndW1lbnRzLmxlbmd0aD8odGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixJdSkub24oIm1vdXNl
b3V0LmZvcmNlIixadSkuY2FsbChlKSx2b2lkIDApOmV9LFpvLnJlYmluZChhLGMsIm9uIil9O3Zh
ciBycz0yMCx1cz0xLGlzPTEvMDtaby5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gbih1KXt2YXIgaSxvPVt1XSxhPVtdO2Zvcih1LmRlcHRoPTA7bnVsbCE9KGk9by5wb3AoKSk7
KWlmKGEucHVzaChpKSwocz1lLmNhbGwobixpLGkuZGVwdGgpKSYmKGM9cy5sZW5ndGgpKXtmb3Io
dmFyIGMscyxsOy0tYz49MDspby5wdXNoKGw9c1tjXSksbC5wYXJlbnQ9aSxsLmRlcHRoPWkuZGVw
dGgrMTtyJiYoaS52YWx1ZT0wKSxpLmNoaWxkcmVuPXN9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxs
KG4saSxpLmRlcHRoKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIEJ1KHUsZnVuY3Rpb24o
bil7dmFyIGUsdTt0JiYoZT1uLmNoaWxkcmVuKSYmZS5zb3J0KHQpLHImJih1PW4ucGFyZW50KSYm
KHUudmFsdWUrPW4udmFsdWUpfSksYX12YXIgdD1HdSxlPVd1LHI9SnU7cmV0dXJuIG4uc29ydD1m
dW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY2hpbGRyZW49
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnZhbHVlPWZ1
bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5yZXZhbHVlPWZ1
bmN0aW9uKHQpe3JldHVybiByJiYoJHUodCxmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiYobi52YWx1
ZT0wKX0pLEJ1KHQsZnVuY3Rpb24odCl7dmFyIGU7dC5jaGlsZHJlbnx8KHQudmFsdWU9K3IuY2Fs
bChuLHQsdC5kZXB0aCl8fDApLChlPXQucGFyZW50KSYmKGUudmFsdWUrPXQudmFsdWUpfSkpLHR9
LG59LFpvLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsZSxyLHUpe3Zh
ciBpPXQuY2hpbGRyZW47aWYodC54PWUsdC55PXQuZGVwdGgqdSx0LmR4PXIsdC5keT11LGkmJihv
PWkubGVuZ3RoKSl7dmFyIG8sYSxjLHM9LTE7Zm9yKHI9dC52YWx1ZT9yL3QudmFsdWU6MDsrK3M8
bzspbihhPWlbc10sZSxjPWEudmFsdWUqcix1KSxlKz1jfX1mdW5jdGlvbiB0KG4pe3ZhciBlPW4u
Y2hpbGRyZW4scj0wO2lmKGUmJih1PWUubGVuZ3RoKSlmb3IodmFyIHUsaT0tMTsrK2k8dTspcj1N
YXRoLm1heChyLHQoZVtpXSkpO3JldHVybiAxK3J9ZnVuY3Rpb24gZShlLGkpe3ZhciBvPXIuY2Fs
bCh0aGlzLGUsaSk7cmV0dXJuIG4ob1swXSwwLHVbMF0sdVsxXS90KG9bMF0pKSxvfXZhciByPVpv
LmxheW91dC5oaWVyYXJjaHkoKSx1PVsxLDFdO3JldHVybiBlLnNpemU9ZnVuY3Rpb24obil7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bixlKTp1fSxYdShlLHIpfSxaby5sYXlvdXQucGllPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt2YXIgbz1pLm1hcChmdW5jdGlvbihlLHIpe3JldHVybit0
LmNhbGwobixlLHIpfSksYT0rKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1
bWVudHMpOnIpLGM9KCgiZnVuY3Rpb24iPT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRz
KTp1KS1hKS9aby5zdW0obykscz1aby5yYW5nZShpLmxlbmd0aCk7bnVsbCE9ZSYmcy5zb3J0KGU9
PT1vcz9mdW5jdGlvbihuLHQpe3JldHVybiBvW3RdLW9bbl19OmZ1bmN0aW9uKG4sdCl7cmV0dXJu
IGUoaVtuXSxpW3RdKX0pO3ZhciBsPVtdO3JldHVybiBzLmZvckVhY2goZnVuY3Rpb24obil7dmFy
IHQ7bFtuXT17ZGF0YTppW25dLHZhbHVlOnQ9b1tuXSxzdGFydEFuZ2xlOmEsZW5kQW5nbGU6YSs9
dCpjfX0pLGx9dmFyIHQ9TnVtYmVyLGU9b3Mscj0wLHU9d2E7cmV0dXJuIG4udmFsdWU9ZnVuY3Rp
b24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnNvcnQ9ZnVuY3Rpb24o
dCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6dX0sbn07dmFyIG9zPXt9O1pv
LmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oYSxjKXt2YXIgcz1hLm1hcChmdW5j
dGlvbihlLHIpe3JldHVybiB0LmNhbGwobixlLHIpfSksbD1zLm1hcChmdW5jdGlvbih0KXtyZXR1
cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKG4sdCxlKSxvLmNhbGwobix0LGUp
XX0pfSksZj1lLmNhbGwobixsLGMpO3M9Wm8ucGVybXV0ZShzLGYpLGw9Wm8ucGVybXV0ZShsLGYp
O3ZhciBoLGcscCx2PXIuY2FsbChuLGwsYyksZD1zLmxlbmd0aCxtPXNbMF0ubGVuZ3RoO2Zvcihn
PTA7bT5nOysrZylmb3IodS5jYWxsKG4sc1swXVtnXSxwPXZbZ10sbFswXVtnXVsxXSksaD0xO2Q+
aDsrK2gpdS5jYWxsKG4sc1toXVtnXSxwKz1sW2gtMV1bZ11bMV0sbFtoXVtnXVsxXSk7cmV0dXJu
IGF9dmFyIHQ9d3QsZT1laSxyPXJpLHU9dGksaT1RdSxvPW5pO3JldHVybiBuLnZhbHVlcz1mdW5j
dGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4ub3JkZXI9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDph
cy5nZXQodCl8fGVpLG4pOmV9LG4ub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y3MuZ2V0KHQpfHxyaSxuKTpyfSxuLng9
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnk9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxuKTpvfSxuLm91dD1mdW5jdGlvbih0
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBhcz1aby5tYXAoeyJp
bnNpZGUtb3V0IjpmdW5jdGlvbihuKXt2YXIgdCxlLHI9bi5sZW5ndGgsdT1uLm1hcCh1aSksaT1u
Lm1hcChpaSksbz1aby5yYW5nZShyKS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVbbl0tdVt0
XX0pLGE9MCxjPTAscz1bXSxsPVtdO2Zvcih0PTA7cj50OysrdCllPW9bdF0sYz5hPyhhKz1pW2Vd
LHMucHVzaChlKSk6KGMrPWlbZV0sbC5wdXNoKGUpKTtyZXR1cm4gbC5yZXZlcnNlKCkuY29uY2F0
KHMpfSxyZXZlcnNlOmZ1bmN0aW9uKG4pe3JldHVybiBaby5yYW5nZShuLmxlbmd0aCkucmV2ZXJz
ZSgpfSwiZGVmYXVsdCI6ZWl9KSxjcz1aby5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24obil7dmFy
IHQsZSxyLHU9bi5sZW5ndGgsaT1uWzBdLmxlbmd0aCxvPVtdLGE9MCxjPVtdO2ZvcihlPTA7aT5l
OysrZSl7Zm9yKHQ9MCxyPTA7dT50O3QrKylyKz1uW3RdW2VdWzFdO3I+YSYmKGE9ciksby5wdXNo
KHIpfWZvcihlPTA7aT5lOysrZSljW2VdPShhLW9bZV0pLzI7cmV0dXJuIGN9LHdpZ2dsZTpmdW5j
dGlvbihuKXt2YXIgdCxlLHIsdSxpLG8sYSxjLHMsbD1uLmxlbmd0aCxmPW5bMF0saD1mLmxlbmd0
aCxnPVtdO2ZvcihnWzBdPWM9cz0wLGU9MTtoPmU7KytlKXtmb3IodD0wLHU9MDtsPnQ7Kyt0KXUr
PW5bdF1bZV1bMV07Zm9yKHQ9MCxpPTAsYT1mW2VdWzBdLWZbZS0xXVswXTtsPnQ7Kyt0KXtmb3Io
cj0wLG89KG5bdF1bZV1bMV0tblt0XVtlLTFdWzFdKS8oMiphKTt0PnI7KytyKW8rPShuW3JdW2Vd
WzFdLW5bcl1bZS0xXVsxXSkvYTtpKz1vKm5bdF1bZV1bMV19Z1tlXT1jLT11P2kvdSphOjAscz5j
JiYocz1jKX1mb3IoZT0wO2g+ZTsrK2UpZ1tlXS09cztyZXR1cm4gZ30sZXhwYW5kOmZ1bmN0aW9u
KG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz0xL3UsYT1bXTtmb3IoZT0w
O2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtpZihyKWZvcih0PTA7
dT50O3QrKyluW3RdW2VdWzFdLz1yO2Vsc2UgZm9yKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV09b31m
b3IoZT0wO2k+ZTsrK2UpYVtlXT0wO3JldHVybiBhfSx6ZXJvOnJpfSk7Wm8ubGF5b3V0Lmhpc3Rv
Z3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXtmb3IodmFyIG8sYSxjPVtdLHM9bi5tYXAo
ZSx0aGlzKSxsPXIuY2FsbCh0aGlzLHMsaSksZj11LmNhbGwodGhpcyxsLHMsaSksaT0tMSxoPXMu
bGVuZ3RoLGc9Zi5sZW5ndGgtMSxwPXQ/MToxL2g7KytpPGc7KW89Y1tpXT1bXSxvLmR4PWZbaSsx
XS0oby54PWZbaV0pLG8ueT0wO2lmKGc+MClmb3IoaT0tMTsrK2k8aDspYT1zW2ldLGE+PWxbMF0m
JmE8PWxbMV0mJihvPWNbWm8uYmlzZWN0KGYsYSwxLGcpLTFdLG8ueSs9cCxvLnB1c2gobltpXSkp
O3JldHVybiBjfXZhciB0PSEwLGU9TnVtYmVyLHI9c2ksdT1haTtyZXR1cm4gbi52YWx1ZT1mdW5j
dGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ucmFuZ2U9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0sbi5iaW5zPWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJudW1iZXIiPT10eXBlb2YgdD9mdW5j
dGlvbihuKXtyZXR1cm4gY2kobix0KX06YnQodCksbik6dX0sbi5mcmVxdWVuY3k9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFlLG4pOnR9LG59LFpvLmxheW91dC5wYWNr
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvPWUuY2FsbCh0aGlzLG4saSksYT1vWzBd
LGM9dVswXSxzPXVbMV0sbD1udWxsPT10P01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgdD90
OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O2lmKGEueD1hLnk9MCxCdShhLGZ1bmN0aW9uKG4pe24ucj0r
bChuLnZhbHVlKX0pLEJ1KGEscGkpLHIpe3ZhciBmPXIqKHQ/MTpNYXRoLm1heCgyKmEuci9jLDIq
YS5yL3MpKS8yO0J1KGEsZnVuY3Rpb24obil7bi5yKz1mfSksQnUoYSxwaSksQnUoYSxmdW5jdGlv
bihuKXtuLnItPWZ9KX1yZXR1cm4gbWkoYSxjLzIscy8yLHQ/MToxL01hdGgubWF4KDIqYS5yL2Ms
MiphLnIvcykpLG99dmFyIHQsZT1aby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChsaSkscj0wLHU9
WzEsMV07cmV0dXJuIG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
dT10LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0
PW51bGw9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6K2Usbik6dH0sbi5wYWRkaW5nPWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG4pOnJ9LFh1KG4sZSl9LFpvLmxh
eW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBsPW8uY2FsbCh0aGlzLG4s
dSksZj1sWzBdLGg9dChmKTtpZihCdShoLGUpLGgucGFyZW50Lm09LWgueiwkdShoLHIpLHMpJHUo
ZixpKTtlbHNle3ZhciBnPWYscD1mLHY9ZjskdShmLGZ1bmN0aW9uKG4pe24ueDxnLngmJihnPW4p
LG4ueD5wLngmJihwPW4pLG4uZGVwdGg+di5kZXB0aCYmKHY9bil9KTt2YXIgZD1hKGcscCkvMi1n
LngsbT1jWzBdLyhwLngrYShwLGcpLzIrZCkseT1jWzFdLyh2LmRlcHRofHwxKTskdShmLGZ1bmN0
aW9uKG4pe24ueD0obi54K2QpKm0sbi55PW4uZGVwdGgqeX0pfXJldHVybiBsfWZ1bmN0aW9uIHQo
bil7Zm9yKHZhciB0LGU9e0E6bnVsbCxjaGlsZHJlbjpbbl19LHI9W2VdO251bGwhPSh0PXIucG9w
KCkpOylmb3IodmFyIHUsaT10LmNoaWxkcmVuLG89MCxhPWkubGVuZ3RoO2E+bzsrK28pci5wdXNo
KChpW29dPXU9e186aVtvXSxwYXJlbnQ6dCxjaGlsZHJlbjoodT1pW29dLmNoaWxkcmVuKSYmdS5z
bGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT11
KTtyZXR1cm4gZS5jaGlsZHJlblswXX1mdW5jdGlvbiBlKG4pe3ZhciB0PW4uY2hpbGRyZW4sZT1u
LnBhcmVudC5jaGlsZHJlbixyPW4uaT9lW24uaS0xXTpudWxsO2lmKHQubGVuZ3RoKXt3aShuKTt2
YXIgaT0odFswXS56K3RbdC5sZW5ndGgtMV0ueikvMjtyPyhuLno9ci56K2Eobi5fLHIuXyksbi5t
PW4uei1pKTpuLno9aX1lbHNlIHImJihuLno9ci56K2Eobi5fLHIuXykpO24ucGFyZW50LkE9dShu
LHIsbi5wYXJlbnQuQXx8ZVswXSl9ZnVuY3Rpb24gcihuKXtuLl8ueD1uLnorbi5wYXJlbnQubSxu
Lm0rPW4ucGFyZW50Lm19ZnVuY3Rpb24gdShuLHQsZSl7aWYodCl7Zm9yKHZhciByLHU9bixpPW4s
bz10LGM9dS5wYXJlbnQuY2hpbGRyZW5bMF0scz11Lm0sbD1pLm0sZj1vLm0saD1jLm07bz1faShv
KSx1PU1pKHUpLG8mJnU7KWM9TWkoYyksaT1faShpKSxpLmE9bixyPW8ueitmLXUuei1zK2Eoby5f
LHUuXykscj4wJiYoYmkoU2kobyxuLGUpLG4scikscys9cixsKz1yKSxmKz1vLm0scys9dS5tLGgr
PWMubSxsKz1pLm07byYmIV9pKGkpJiYoaS50PW8saS5tKz1mLWwpLHUmJiFNaShjKSYmKGMudD11
LGMubSs9cy1oLGU9bil9cmV0dXJuIGV9ZnVuY3Rpb24gaShuKXtuLngqPWNbMF0sbi55PW4uZGVw
dGgqY1sxXX12YXIgbz1aby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxs
KSxhPXhpLGM9WzEsMV0scz1udWxsO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxuKTphfSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09KGM9dCk/aTpudWxsLG4pOnM/bnVsbDpjfSxuLm5v
ZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PShjPXQp
P251bGw6aSxuKTpzP2M6bnVsbH0sWHUobixvKX0sWm8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24o
KXtmdW5jdGlvbiBuKG4saSl7dmFyIG8sYT10LmNhbGwodGhpcyxuLGkpLGM9YVswXSxzPTA7QnUo
YyxmdW5jdGlvbihuKXt2YXIgdD1uLmNoaWxkcmVuO3QmJnQubGVuZ3RoPyhuLng9RWkodCksbi55
PWtpKHQpKToobi54PW8/cys9ZShuLG8pOjAsbi55PTAsbz1uKX0pO3ZhciBsPUFpKGMpLGY9Q2ko
YyksaD1sLngtZShsLGYpLzIsZz1mLngrZShmLGwpLzI7cmV0dXJuIEJ1KGMsdT9mdW5jdGlvbihu
KXtuLng9KG4ueC1jLngpKnJbMF0sbi55PShjLnktbi55KSpyWzFdfTpmdW5jdGlvbihuKXtuLng9
KG4ueC1oKS8oZy1oKSpyWzBdLG4ueT0oMS0oYy55P24ueS9jLnk6MSkpKnJbMV19KSxhfXZhciB0
PVpvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLGU9eGkscj1bMSwx
XSx1PSExO3JldHVybiBuLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGU9dCxuKTplfSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/KHU9bnVsbD09KHI9dCksbik6dT9udWxsOnJ9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbCE9KHI9dCksbik6dT9yOm51bGx9LFh1KG4sdCl9
LFpvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe2Zvcih2YXIgZSxy
LHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspcj0oZT1uW3VdKS52YWx1ZSooMD50PzA6dCksZS5hcmVh
PWlzTmFOKHIpfHwwPj1yPzA6cn1mdW5jdGlvbiB0KGUpe3ZhciBpPWUuY2hpbGRyZW47aWYoaSYm
aS5sZW5ndGgpe3ZhciBvLGEsYyxzPWYoZSksbD1bXSxoPWkuc2xpY2UoKSxwPTEvMCx2PSJzbGlj
ZSI9PT1nP3MuZHg6ImRpY2UiPT09Zz9zLmR5OiJzbGljZS1kaWNlIj09PWc/MSZlLmRlcHRoP3Mu
ZHk6cy5keDpNYXRoLm1pbihzLmR4LHMuZHkpO2ZvcihuKGgscy5keCpzLmR5L2UudmFsdWUpLGwu
YXJlYT0wOyhjPWgubGVuZ3RoKT4wOylsLnB1c2gobz1oW2MtMV0pLGwuYXJlYSs9by5hcmVhLCJz
cXVhcmlmeSIhPT1nfHwoYT1yKGwsdikpPD1wPyhoLnBvcCgpLHA9YSk6KGwuYXJlYS09bC5wb3Ao
KS5hcmVhLHUobCx2LHMsITEpLHY9TWF0aC5taW4ocy5keCxzLmR5KSxsLmxlbmd0aD1sLmFyZWE9
MCxwPTEvMCk7bC5sZW5ndGgmJih1KGwsdixzLCEwKSxsLmxlbmd0aD1sLmFyZWE9MCksaS5mb3JF
YWNoKHQpfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW47aWYociYmci5sZW5ndGgpe3Zh
ciBpLG89Zih0KSxhPXIuc2xpY2UoKSxjPVtdO2ZvcihuKGEsby5keCpvLmR5L3QudmFsdWUpLGMu
YXJlYT0wO2k9YS5wb3AoKTspYy5wdXNoKGkpLGMuYXJlYSs9aS5hcmVhLG51bGwhPWkueiYmKHUo
YyxpLno/by5keDpvLmR5LG8sIWEubGVuZ3RoKSxjLmxlbmd0aD1jLmFyZWE9MCk7ci5mb3JFYWNo
KGUpfX1mdW5jdGlvbiByKG4sdCl7Zm9yKHZhciBlLHI9bi5hcmVhLHU9MCxpPTEvMCxvPS0xLGE9
bi5sZW5ndGg7KytvPGE7KShlPW5bb10uYXJlYSkmJihpPmUmJihpPWUpLGU+dSYmKHU9ZSkpO3Jl
dHVybiByKj1yLHQqPXQscj9NYXRoLm1heCh0KnUqcC9yLHIvKHQqaSpwKSk6MS8wfWZ1bmN0aW9u
IHUobix0LGUscil7dmFyIHUsaT0tMSxvPW4ubGVuZ3RoLGE9ZS54LHM9ZS55LGw9dD9jKG4uYXJl
YS90KTowO2lmKHQ9PWUuZHgpe2Zvcigocnx8bD5lLmR5KSYmKGw9ZS5keSk7KytpPG87KXU9bltp
XSx1Lng9YSx1Lnk9cyx1LmR5PWwsYSs9dS5keD1NYXRoLm1pbihlLngrZS5keC1hLGw/Yyh1LmFy
ZWEvbCk6MCk7dS56PSEwLHUuZHgrPWUueCtlLmR4LWEsZS55Kz1sLGUuZHktPWx9ZWxzZXtmb3Io
KHJ8fGw+ZS5keCkmJihsPWUuZHgpOysraTxvOyl1PW5baV0sdS54PWEsdS55PXMsdS5keD1sLHMr
PXUuZHk9TWF0aC5taW4oZS55K2UuZHktcyxsP2ModS5hcmVhL2wpOjApO3Uuej0hMSx1LmR5Kz1l
LnkrZS5keS1zLGUueCs9bCxlLmR4LT1sfX1mdW5jdGlvbiBpKHIpe3ZhciB1PW98fGEociksaT11
WzBdO3JldHVybiBpLng9MCxpLnk9MCxpLmR4PXNbMF0saS5keT1zWzFdLG8mJmEucmV2YWx1ZShp
KSxuKFtpXSxpLmR4KmkuZHkvaS52YWx1ZSksKG8/ZTp0KShpKSxoJiYobz11KSx1fXZhciBvLGE9
Wm8ubGF5b3V0LmhpZXJhcmNoeSgpLGM9TWF0aC5yb3VuZCxzPVsxLDFdLGw9bnVsbCxmPU5pLGg9
ITEsZz0ic3F1YXJpZnkiLHA9LjUqKDErTWF0aC5zcXJ0KDUpKTtyZXR1cm4gaS5zaXplPWZ1bmN0
aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4saSk6c30saS5wYWRkaW5nPWZ1bmN0
aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9bi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVs
bD09ZT9OaSh0KTp6aSh0LCJudW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24g
ZSh0KXtyZXR1cm4gemkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbDt2YXIgcjty
ZXR1cm4gZj1udWxsPT0obD1uKT9OaToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/dDoibnVtYmVy
Ij09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6TnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlj
a3k9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0s
aS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGku
bW9kZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkpOmd9LFh1
KGksYSl9LFpvLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFyIGU9YXJndW1lbnRzLmxl
bmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTApLGZ1bmN0aW9uKCl7dmFyIGUscix1O2Rv
IGU9MipNYXRoLnJhbmRvbSgpLTEscj0yKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUo
IXV8fHU+MSk7cmV0dXJuIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05v
cm1hbDpmdW5jdGlvbigpe3ZhciBuPVpvLnJhbmRvbS5ub3JtYWwuYXBwbHkoWm8sYXJndW1lbnRz
KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJhdGVzOmZ1bmN0aW9u
KG4pe3ZhciB0PVpvLnJhbmRvbS5pcndpbkhhbGwobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu
IHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIg
dD0wLGU9MDtuPmU7ZSsrKXQrPU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sWm8uc2NhbGU9e307
dmFyIHNzPXtmbG9vcjp3dCxjZWlsOnd0fTtaby5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1
cm4gVWkoWzAsMV0sWzAsMV0saHUsITEpfTt2YXIgbHM9e3M6MSxnOjEscDoxLHI6MSxlOjF9O1pv
LnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBWaShaby5zY2FsZS5saW5lYXIoKS5kb21haW4o
WzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBmcz1aby5mb3JtYXQoIi4wZSIpLGhzPXtmbG9vcjpm
dW5jdGlvbihuKXtyZXR1cm4tTWF0aC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4t
TWF0aC5mbG9vcigtbil9fTtaby5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gWGkoWm8uc2Nh
bGUubGluZWFyKCksMSxbMCwxXSl9LFpvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWm8u
c2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSxaby5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0
dXJuIEJpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LFpvLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rp
b24oKXtyZXR1cm4gWm8uc2NhbGUub3JkaW5hbCgpLnJhbmdlKGdzKX0sWm8uc2NhbGUuY2F0ZWdv
cnkyMD1mdW5jdGlvbigpe3JldHVybiBaby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UocHMpfSxaby5z
Y2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiBaby5zY2FsZS5vcmRpbmFsKCkucmFu
Z2UodnMpfSxaby5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiBaby5zY2FsZS5v
cmRpbmFsKCkucmFuZ2UoZHMpfTt2YXIgZ3M9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAz
NDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5t
YXAodnQpLHBzPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAw
MTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQw
LDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1
NjE3NSwxMDQxMDcyNV0ubWFwKHZ0KSx2cz1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQy
ODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUx
ODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3Njgz
LDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAodnQpLGRzPVszMjQ0NzMzLDcwNTcxMTAs
MTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1
MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIs
MTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAodnQpO1pvLnNj
YWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIFdpKFtdLFtdKX0sWm8uc2NhbGUucXVhbnRp
emU9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoMCwxLFswLDFdKX0sWm8uc2NhbGUudGhyZXNob2xkPWZ1
bmN0aW9uKCl7cmV0dXJuIEdpKFsuNV0sWzAsMV0pfSxaby5zY2FsZS5pZGVudGl0eT1mdW5jdGlv
bigpe3JldHVybiBLaShbMCwxXSl9LFpvLnN2Zz17fSxaby5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGk9ZS5hcHBseSh0aGlzLGFy
Z3VtZW50cyksbz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSttcyxhPXUuYXBwbHkodGhpcyxhcmd1
bWVudHMpK21zLGM9KG8+YSYmKGM9byxvPWEsYT1jKSxhLW8pLHM9YmE+Yz8iMCI6IjEiLGw9TWF0
aC5jb3MobyksZj1NYXRoLnNpbihvKSxoPU1hdGguY29zKGEpLGc9TWF0aC5zaW4oYSk7Ci1yZXR1
cm4gYz49eXM/bj8iTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1pKyJBIitpKyIsIitp
KyIgMCAxLDEgMCwiK2krIk0wLCIrbisiQSIrbisiLCIrbisiIDAgMSwwIDAsIistbisiQSIrbisi
LCIrbisiIDAgMSwwIDAsIituKyJaIjoiTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1p
KyJBIitpKyIsIitpKyIgMCAxLDEgMCwiK2krIloiOm4/Ik0iK2kqbCsiLCIraSpmKyJBIitpKyIs
IitpKyIgMCAiK3MrIiwxICIraSpoKyIsIitpKmcrIkwiK24qaCsiLCIrbipnKyJBIituKyIsIitu
KyIgMCAiK3MrIiwwICIrbipsKyIsIituKmYrIloiOiJNIitpKmwrIiwiK2kqZisiQSIraSsiLCIr
aSsiIDAgIitzKyIsMSAiK2kqaCsiLCIraSpnKyJMMCwwIisiWiJ9dmFyIHQ9UWksZT1ubyxyPXRv
LHU9ZW87cmV0dXJuIG4uaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KHQ9YnQoZSksbik6dH0sbi5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oZT1idCh0KSxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YnQodCksbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1idCh0KSxuKTp1fSxuLmNlbnRyb2lkPWZ1bmN0
aW9uKCl7dmFyIG49KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpK2UuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKS8yLGk9KHIuYXBwbHkodGhpcyxhcmd1bWVudHMpK3UuYXBwbHkodGhpcyxhcmd1bWVudHMp
KS8yK21zO3JldHVybltNYXRoLmNvcyhpKSpuLE1hdGguc2luKGkpKm5dfSxufTt2YXIgbXM9LVNh
LHlzPXdhLWthO1pvLnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHJvKHd0KX07dmFyIHhzPVpv
Lm1hcCh7bGluZWFyOnVvLCJsaW5lYXItY2xvc2VkIjppbyxzdGVwOm9vLCJzdGVwLWJlZm9yZSI6
YW8sInN0ZXAtYWZ0ZXIiOmNvLGJhc2lzOnBvLCJiYXNpcy1vcGVuIjp2bywiYmFzaXMtY2xvc2Vk
IjptbyxidW5kbGU6eW8sY2FyZGluYWw6Zm8sImNhcmRpbmFsLW9wZW4iOnNvLCJjYXJkaW5hbC1j
bG9zZWQiOmxvLG1vbm90b25lOlNvfSk7eHMuZm9yRWFjaChmdW5jdGlvbihuLHQpe3Qua2V5PW4s
dC5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KG4pfSk7dmFyIE1zPVswLDIvMywxLzMsMF0sX3M9WzAs
MS8zLDIvMywwXSxicz1bMCwxLzYsMi8zLDEvNl07Wm8uc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9u
KCl7dmFyIG49cm8oa28pO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmFuZ2xlPW4u
eSxkZWxldGUgbi55LG59LGFvLnJldmVyc2U9Y28sY28ucmV2ZXJzZT1hbyxaby5zdmcuYXJlYT1m
dW5jdGlvbigpe3JldHVybiBFbyh3dCl9LFpvLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3Zh
ciBuPUVvKGtvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5pbm5lclJhZGl1cz1u
LngwLGRlbGV0ZSBuLngwLG4ub3V0ZXJSYWRpdXM9bi54MSxkZWxldGUgbi54MSxuLmFuZ2xlPW4u
eSxkZWxldGUgbi55LG4uc3RhcnRBbmdsZT1uLnkwLGRlbGV0ZSBuLnkwLG4uZW5kQW5nbGU9bi55
MSxkZWxldGUgbi55MSxufSxaby5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sYSl7
dmFyIGM9dCh0aGlzLGksbixhKSxzPXQodGhpcyxvLG4sYSk7cmV0dXJuIk0iK2MucDArcihjLnIs
Yy5wMSxjLmExLWMuYTApKyhlKGMscyk/dShjLnIsYy5wMSxjLnIsYy5wMCk6dShjLnIsYy5wMSxz
LnIscy5wMCkrcihzLnIscy5wMSxzLmExLXMuYTApK3Uocy5yLHMucDEsYy5yLGMucDApKSsiWiJ9
ZnVuY3Rpb24gdChuLHQsZSxyKXt2YXIgdT10LmNhbGwobixlLHIpLGk9YS5jYWxsKG4sdSxyKSxv
PWMuY2FsbChuLHUscikrbXMsbD1zLmNhbGwobix1LHIpK21zO3JldHVybntyOmksYTA6byxhMTps
LHAwOltpKk1hdGguY29zKG8pLGkqTWF0aC5zaW4obyldLHAxOltpKk1hdGguY29zKGwpLGkqTWF0
aC5zaW4obCldfX1mdW5jdGlvbiBlKG4sdCl7cmV0dXJuIG4uYTA9PXQuYTAmJm4uYTE9PXQuYTF9
ZnVuY3Rpb24gcihuLHQsZSl7cmV0dXJuIkEiK24rIiwiK24rIiAwICIrICsoZT5iYSkrIiwxICIr
dH1mdW5jdGlvbiB1KG4sdCxlLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIGk9Z3Isbz1wcixhPUFv
LGM9dG8scz1lbztyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGE9YnQodCksbik6YX0sbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KGk9YnQodCksbik6aX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KG89YnQodCksbik6b30sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhjPWJ0KHQpLG4pOmN9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9YnQodCksbik6c30sbn0sWm8uc3ZnLmRpYWdvbmFs
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPXQuY2FsbCh0aGlzLG4sdSksbz1lLmNh
bGwodGhpcyxuLHUpLGE9KGkueStvLnkpLzIsYz1baSx7eDppLngseTphfSx7eDpvLngseTphfSxv
XTtyZXR1cm4gYz1jLm1hcChyKSwiTSIrY1swXSsiQyIrY1sxXSsiICIrY1syXSsiICIrY1szXX12
YXIgdD1ncixlPXByLHI9Q287cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyh0PWJ0KGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPyhlPWJ0KHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LFpvLnN2Zy5kaWFnb25hbC5yYWRp
YWw9ZnVuY3Rpb24oKXt2YXIgbj1aby5zdmcuZGlhZ29uYWwoKSx0PUNvLGU9bi5wcm9qZWN0aW9u
O3JldHVybiBuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
ZShObyh0PW4pKTp0fSxufSxaby5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIp
e3JldHVybih3cy5nZXQodC5jYWxsKHRoaXMsbixyKSl8fFRvKShlLmNhbGwodGhpcyxuLHIpKX12
YXIgdD1MbyxlPXpvO3JldHVybiBuLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KHQ9YnQoZSksbik6dH0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhlPWJ0KHQpLG4pOmV9LG59O3ZhciB3cz1aby5tYXAoe2NpcmNsZTpUbyxjcm9zczpm
dW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsi
SCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsi
SCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGgu
c3FydChuLygyKkFzKSksZT10KkFzO3JldHVybiJNMCwiKy10KyJMIitlKyIsMCIrIiAwLCIrdCsi
ICIrLWUrIiwwIisiWiJ9LHNxdWFyZTpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobikvMjty
ZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3Qr
IloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vRXMpLGU9
dCpFcy8yO3JldHVybiJNMCwiK2UrIkwiK3QrIiwiKy1lKyIgIistdCsiLCIrLWUrIloifSwidHJp
YW5nbGUtdXAiOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL0VzKSxlPXQqRXMvMjtyZXR1
cm4iTTAsIistZSsiTCIrdCsiLCIrZSsiICIrLXQrIiwiK2UrIloifX0pO1pvLnN2Zy5zeW1ib2xU
eXBlcz13cy5rZXlzKCk7dmFyIFNzLGtzLEVzPU1hdGguc3FydCgzKSxBcz1NYXRoLnRhbigzMCpB
YSksQ3M9W10sTnM9MDtDcy5jYWxsPXBhLmNhbGwsQ3MuZW1wdHk9cGEuZW1wdHksQ3Mubm9kZT1w
YS5ub2RlLENzLnNpemU9cGEuc2l6ZSxaby50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoP1NzP24udHJhbnNpdGlvbigpOm46bWEudHJhbnNpdGlvbigpfSxaby50
cmFuc2l0aW9uLnByb3RvdHlwZT1DcyxDcy5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9
dGhpcy5pZCxpPVtdO249YihuKTtmb3IodmFyIG89LTEsYT10aGlzLmxlbmd0aDsrK288YTspe2ku
cHVzaCh0PVtdKTtmb3IodmFyIGM9dGhpc1tvXSxzPS0xLGw9Yy5sZW5ndGg7KytzPGw7KShyPWNb
c10pJiYoZT1uLmNhbGwocixyLl9fZGF0YV9fLHMsbykpPygiX19kYXRhX18iaW4gciYmKGUuX19k
YXRhX189ci5fX2RhdGFfXyksUG8oZSxzLHUsci5fX3RyYW5zaXRpb25fX1t1XSksdC5wdXNoKGUp
KTp0LnB1c2gobnVsbCl9cmV0dXJuIHFvKGksdSl9LENzLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2
YXIgdCxlLHIsdSxpLG89dGhpcy5pZCxhPVtdO249dyhuKTtmb3IodmFyIGM9LTEscz10aGlzLmxl
bmd0aDsrK2M8czspZm9yKHZhciBsPXRoaXNbY10sZj0tMSxoPWwubGVuZ3RoOysrZjxoOylpZihy
PWxbZl0pe2k9ci5fX3RyYW5zaXRpb25fX1tvXSxlPW4uY2FsbChyLHIuX19kYXRhX18sZixjKSxh
LnB1c2godD1bXSk7Zm9yKHZhciBnPS0xLHA9ZS5sZW5ndGg7KytnPHA7KSh1PWVbZ10pJiZQbyh1
LGcsbyxpKSx0LnB1c2godSl9cmV0dXJuIHFvKGEsbyl9LENzLmZpbHRlcj1mdW5jdGlvbihuKXt2
YXIgdCxlLHIsdT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49UihuKSk7Zm9yKHZhciBpPTAs
bz10aGlzLmxlbmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbaV0sYT0w
LGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0
LnB1c2gocil9cmV0dXJuIHFvKHUsdGhpcy5pZCl9LENzLnR3ZWVuPWZ1bmN0aW9uKG4sdCl7dmFy
IGU9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpLl9fdHJhbnNp
dGlvbl9fW2VdLnR3ZWVuLmdldChuKTpQKHRoaXMsbnVsbD09dD9mdW5jdGlvbih0KXt0Ll9fdHJh
bnNpdGlvbl9fW2VdLnR3ZWVuLnJlbW92ZShuKX06ZnVuY3Rpb24ocil7ci5fX3RyYW5zaXRpb25f
X1tlXS50d2Vlbi5zZXQobix0KX0pfSxDcy5hdHRyPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZSgp
e3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0
ZU5TKGEuc3BhY2UsYS5sb2NhbCl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gbnVsbD09bj9lOihuKz0i
IixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIGUhPT1uJiYo
dD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUoYSx0KG4pKX0pfSl9ZnVuY3Rp
b24gaShuKXtyZXR1cm4gbnVsbD09bj9yOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5n
ZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpO3JldHVybiBlIT09biYmKHQ9byhlLG4pLGZ1
bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsLHQobikpfSl9KX1p
Zihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih0IGluIG4pdGhpcy5hdHRyKHQsblt0XSk7cmV0dXJu
IHRoaXN9dmFyIG89InRyYW5zZm9ybSI9PW4/RHU6aHUsYT1aby5ucy5xdWFsaWZ5KG4pO3JldHVy
biBSbyh0aGlzLCJhdHRyLiIrbix0LGEubG9jYWw/aTp1KX0sQ3MuYXR0clR3ZWVuPWZ1bmN0aW9u
KG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJp
YnV0ZSh1KSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHUscihuKSl9
fWZ1bmN0aW9uIHIobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGVO
Uyh1LnNwYWNlLHUubG9jYWwpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1
dGVOUyh1LnNwYWNlLHUubG9jYWwscihuKSl9fXZhciB1PVpvLm5zLnF1YWxpZnkobik7cmV0dXJu
IHRoaXMudHdlZW4oImF0dHIuIituLHUubG9jYWw/cjplKX0sQ3Muc3R5bGU9ZnVuY3Rpb24obix0
LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfWZ1bmN0aW9uIHUo
dCl7cmV0dXJuIG51bGw9PXQ/cjoodCs9IiIsZnVuY3Rpb24oKXt2YXIgcix1PVdvLmdldENvbXB1
dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO3JldHVybiB1IT09dCYmKHI9
aHUodSx0KSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scih0KSxlKX0pfSl9
dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigzPmkpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5p
JiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLnN0eWxlKGUsbltlXSx0KTtyZXR1cm4gdGhpc31lPSIi
fXJldHVybiBSbyh0aGlzLCJzdHlsZS4iK24sdCx1KX0sQ3Muc3R5bGVUd2Vlbj1mdW5jdGlvbihu
LHQsZSl7ZnVuY3Rpb24gcihyLHUpe3ZhciBpPXQuY2FsbCh0aGlzLHIsdSxXby5nZXRDb21wdXRl
ZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9u
KHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpKHQpLGUpfX1yZXR1cm4gYXJndW1lbnRzLmxl
bmd0aDwzJiYoZT0iIiksdGhpcy50d2Vlbigic3R5bGUuIituLHIpfSxDcy50ZXh0PWZ1bmN0aW9u
KG4pe3JldHVybiBSbyh0aGlzLCJ0ZXh0IixuLERvKX0sQ3MucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIG47dGhpcy5fX3Ry
YW5zaXRpb25fXy5jb3VudDwyJiYobj10aGlzLnBhcmVudE5vZGUpJiZuLnJlbW92ZUNoaWxkKHRo
aXMpfSl9LENzLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U6KCJmdW5jdGlvbiIh
PXR5cGVvZiBuJiYobj1aby5lYXNlLmFwcGx5KFpvLGFyZ3VtZW50cykpLFAodGhpcyxmdW5jdGlv
bihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U9bn0pKX0sQ3MuZGVsYXk9ZnVuY3Rpb24obil7
dmFyIHQ9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJh
bnNpdGlvbl9fW3RdLmRlbGF5OlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl
LHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kZWxheT0rbi5jYWxsKGUsZS5fX2RhdGFfXyxyLHUp
fToobj0rbixmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmRlbGF5PW59KSl9LENzLmR1
cmF0aW9uPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8
MT90aGlzLm5vZGUoKS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbjpQKHRoaXMsImZ1bmN0aW9u
Ij09dHlwZW9mIG4/ZnVuY3Rpb24oZSxyLHUpe2UuX190cmFuc2l0aW9uX19bdF0uZHVyYXRpb249
TWF0aC5tYXgoMSxuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSkpfToobj1NYXRoLm1heCgxLG4pLGZ1
bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZHVyYXRpb249bn0pKX0sQ3MuZWFjaD1mdW5j
dGlvbihuLHQpe3ZhciBlPXRoaXMuaWQ7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj1rcyx1
PVNzO1NzPWUsUCh0aGlzLGZ1bmN0aW9uKHQscix1KXtrcz10Ll9fdHJhbnNpdGlvbl9fW2VdLG4u
Y2FsbCh0LHQuX19kYXRhX18scix1KX0pLGtzPXIsU3M9dX1lbHNlIFAodGhpcyxmdW5jdGlvbihy
KXt2YXIgdT1yLl9fdHJhbnNpdGlvbl9fW2VdOyh1LmV2ZW50fHwodS5ldmVudD1aby5kaXNwYXRj
aCgic3RhcnQiLCJlbmQiKSkpLm9uKG4sdCl9KTtyZXR1cm4gdGhpc30sQ3MudHJhbnNpdGlvbj1m
dW5jdGlvbigpe2Zvcih2YXIgbix0LGUscix1PXRoaXMuaWQsaT0rK05zLG89W10sYT0wLGM9dGhp
cy5sZW5ndGg7Yz5hO2ErKyl7by5wdXNoKG49W10pO2Zvcih2YXIgdD10aGlzW2FdLHM9MCxsPXQu
bGVuZ3RoO2w+cztzKyspKGU9dFtzXSkmJihyPU9iamVjdC5jcmVhdGUoZS5fX3RyYW5zaXRpb25f
X1t1XSksci5kZWxheSs9ci5kdXJhdGlvbixQbyhlLHMsaSxyKSksbi5wdXNoKGUpfXJldHVybiBx
byhvLGkpfSxaby5zdmcuYXhpcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5lYWNoKGZ1bmN0
aW9uKCl7dmFyIG4scz1aby5zZWxlY3QodGhpcyksbD10aGlzLl9fY2hhcnRfX3x8ZSxmPXRoaXMu
X19jaGFydF9fPWUuY29weSgpLGg9bnVsbD09Yz9mLnRpY2tzP2YudGlja3MuYXBwbHkoZixhKTpm
LmRvbWFpbigpOmMsZz1udWxsPT10P2YudGlja0Zvcm1hdD9mLnRpY2tGb3JtYXQuYXBwbHkoZixh
KTp3dDp0LHA9cy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLGYpLHY9cC5lbnRlcigpLmluc2Vy
dCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsa2Ep
LGQ9Wm8udHJhbnNpdGlvbihwLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGthKS5yZW1vdmUoKSxt
PVpvLnRyYW5zaXRpb24ocC5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseT1UaShmKSx4PXMu
c2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLE09KHguZW50ZXIoKS5hcHBlbmQoInBhdGgi
KS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLFpvLnRyYW5zaXRpb24oeCkpO3YuYXBwZW5kKCJsaW5l
Iiksdi5hcHBlbmQoInRleHQiKTt2YXIgXz12LnNlbGVjdCgibGluZSIpLGI9bS5zZWxlY3QoImxp
bmUiKSx3PXAuc2VsZWN0KCJ0ZXh0IikudGV4dChnKSxTPXYuc2VsZWN0KCJ0ZXh0Iiksaz1tLnNl
bGVjdCgidGV4dCIpO3N3aXRjaChyKXtjYXNlImJvdHRvbSI6bj1VbyxfLmF0dHIoInkyIix1KSxT
LmF0dHIoInkiLE1hdGgubWF4KHUsMCkrbyksYi5hdHRyKCJ4MiIsMCkuYXR0cigieTIiLHUpLGsu
YXR0cigieCIsMCkuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSx3LmF0dHIoImR5IiwiLjcxZW0i
KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxNLmF0dHIoImQiLCJNIit5WzBdKyIsIitp
KyJWMEgiK3lbMV0rIlYiK2kpO2JyZWFrO2Nhc2UidG9wIjpuPVVvLF8uYXR0cigieTIiLC11KSxT
LmF0dHIoInkiLC0oTWF0aC5tYXgodSwwKStvKSksYi5hdHRyKCJ4MiIsMCkuYXR0cigieTIiLC11
KSxrLmF0dHIoIngiLDApLmF0dHIoInkiLC0oTWF0aC5tYXgodSwwKStvKSksdy5hdHRyKCJkeSIs
IjBlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0r
IiwiKy1pKyJWMEgiK3lbMV0rIlYiKy1pKTticmVhaztjYXNlImxlZnQiOm49am8sXy5hdHRyKCJ4
MiIsLXUpLFMuYXR0cigieCIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwtdSkuYXR0
cigieTIiLDApLGsuYXR0cigieCIsLShNYXRoLm1heCh1LDApK28pKS5hdHRyKCJ5IiwwKSx3LmF0
dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJlbmQiKSxNLmF0dHIoImQiLCJN
IistaSsiLCIreVswXSsiSDBWIit5WzFdKyJIIistaSk7YnJlYWs7Y2FzZSJyaWdodCI6bj1qbyxf
LmF0dHIoIngyIix1KSxTLmF0dHIoIngiLE1hdGgubWF4KHUsMCkrbyksYi5hdHRyKCJ4MiIsdSku
YXR0cigieTIiLDApLGsuYXR0cigieCIsTWF0aC5tYXgodSwwKStvKS5hdHRyKCJ5IiwwKSx3LmF0
dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLE0uYXR0cigiZCIs
Ik0iK2krIiwiK3lbMF0rIkgwViIreVsxXSsiSCIraSl9aWYoZi5yYW5nZUJhbmQpe3ZhciBFPWYs
QT1FLnJhbmdlQmFuZCgpLzI7bD1mPWZ1bmN0aW9uKG4pe3JldHVybiBFKG4pK0F9fWVsc2UgbC5y
YW5nZUJhbmQ/bD1mOmQuY2FsbChuLGYpO3YuY2FsbChuLGwpLG0uY2FsbChuLGYpfSl9dmFyIHQs
ZT1aby5zY2FsZS5saW5lYXIoKSxyPXpzLHU9NixpPTYsbz0zLGE9WzEwXSxjPW51bGw7cmV0dXJu
IG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxu
Lm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10IGluIExzP3Qr
IiI6enMsbik6cn0sbi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhh
PWFyZ3VtZW50cyxuKTphfSxuLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KGM9dCxuKTpjfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3Vt
ZW50cy5sZW5ndGg7cmV0dXJuIGU/KHU9K3QsaT0rYXJndW1lbnRzW2UtMV0sbik6dX0sbi5pbm5l
clRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LG4pOnV9
LG4ub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0r
dCxuKTppfSxuLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhvPSt0LG4pOm99LG4udGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoJiZufSxufTt2YXIgenM9ImJvdHRvbSIsTHM9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEs
bGVmdDoxfTtaby5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGkpe2kuZWFjaChmdW5j
dGlvbigpe3ZhciBpPVpvLnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwi
KS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9u
KCJtb3VzZWRvd24uYnJ1c2giLHUpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIix1KSxvPWkuc2VsZWN0
QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtvLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0
cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHls
ZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksaS5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSku
ZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJz
b3IiLCJtb3ZlIik7dmFyIGE9aS5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKHAsd3QpO2EuZXhp
dCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24o
bil7cmV0dXJuInJlc2l6ZSAiK259KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihuKXtyZXR1cm4g
VHNbbl19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbihuKXtyZXR1cm4vW2V3XSQv
LnRlc3Qobik/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKG4pe3JldHVybi9eW25zXS8udGVz
dChuKT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZp
c2liaWxpdHkiLCJoaWRkZW4iKSxhLnN0eWxlKCJkaXNwbGF5IixuLmVtcHR5KCk/Im5vbmUiOm51
bGwpO3ZhciBsLGY9Wm8udHJhbnNpdGlvbihpKSxoPVpvLnRyYW5zaXRpb24obyk7YyYmKGw9VGko
YyksaC5hdHRyKCJ4IixsWzBdKS5hdHRyKCJ3aWR0aCIsbFsxXS1sWzBdKSxlKGYpKSxzJiYobD1U
aShzKSxoLmF0dHIoInkiLGxbMF0pLmF0dHIoImhlaWdodCIsbFsxXS1sWzBdKSxyKGYpKSx0KGYp
fSl9ZnVuY3Rpb24gdChuKXtuLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIs
ZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0ZSgiK2xbKy9lJC8udGVzdChuKV0rIiwiK2ZbKy9e
cy8udGVzdChuKV0rIikifSl9ZnVuY3Rpb24gZShuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIo
IngiLGxbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndp
ZHRoIixsWzFdLWxbMF0pfWZ1bmN0aW9uIHIobil7bi5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5
IixmWzBdKSxuLnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWln
aHQiLGZbMV0tZlswXSl9ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIHUoKXszMj09Wm8uZXZlbnQua2V5
Q29kZSYmKEN8fCh4PW51bGwselswXS09bFsxXSx6WzFdLT1mWzFdLEM9MikseSgpKX1mdW5jdGlv
biBwKCl7MzI9PVpvLmV2ZW50LmtleUNvZGUmJjI9PUMmJih6WzBdKz1sWzFdLHpbMV0rPWZbMV0s
Qz0wLHkoKSl9ZnVuY3Rpb24gdigpe3ZhciBuPVpvLm1vdXNlKF8pLHU9ITE7TSYmKG5bMF0rPU1b
MF0sblsxXSs9TVsxXSksQ3x8KFpvLmV2ZW50LmFsdEtleT8oeHx8KHg9WyhsWzBdK2xbMV0pLzIs
KGZbMF0rZlsxXSkvMl0pLHpbMF09bFsrKG5bMF08eFswXSldLHpbMV09ZlsrKG5bMV08eFsxXSld
KTp4PW51bGwpLEUmJmQobixjLDApJiYoZShTKSx1PSEwKSxBJiZkKG4scywxKSYmKHIoUyksdT0h
MCksdSYmKHQoUyksdyh7dHlwZToiYnJ1c2giLG1vZGU6Qz8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVu
Y3Rpb24gZChuLHQsZSl7dmFyIHIsdSxhPVRpKHQpLGM9YVswXSxzPWFbMV0scD16W2VdLHY9ZT9m
OmwsZD12WzFdLXZbMF07cmV0dXJuIEMmJihjLT1wLHMtPWQrcCkscj0oZT9nOmgpP01hdGgubWF4
KGMsTWF0aC5taW4ocyxuW2VdKSk6bltlXSxDP3U9KHIrPXApK2Q6KHgmJihwPU1hdGgubWF4KGMs
TWF0aC5taW4ocywyKnhbZV0tcikpKSxyPnA/KHU9cixyPXApOnU9cCksdlswXSE9cnx8dlsxXSE9
dT8oZT9vPW51bGw6aT1udWxsLHZbMF09cix2WzFdPXUsITApOnZvaWQgMH1mdW5jdGlvbiBtKCl7
digpLFMuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIiku
c3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCksWm8uc2VsZWN0KCJib2R5Iiku
c3R5bGUoImN1cnNvciIsbnVsbCksTC5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91
c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5k
LmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixu
dWxsKSxOKCksdyh7dHlwZToiYnJ1c2hlbmQifSl9dmFyIHgsTSxfPXRoaXMsYj1aby5zZWxlY3Qo
Wm8uZXZlbnQudGFyZ2V0KSx3PWEub2YoXyxhcmd1bWVudHMpLFM9Wm8uc2VsZWN0KF8pLGs9Yi5k
YXR1bSgpLEU9IS9eKG58cykkLy50ZXN0KGspJiZjLEE9IS9eKGV8dykkLy50ZXN0KGspJiZzLEM9
Yi5jbGFzc2VkKCJleHRlbnQiKSxOPUkoKSx6PVpvLm1vdXNlKF8pLEw9Wm8uc2VsZWN0KFdvKS5v
bigia2V5ZG93bi5icnVzaCIsdSkub24oImtleXVwLmJydXNoIixwKTtpZihaby5ldmVudC5jaGFu
Z2VkVG91Y2hlcz9MLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLHYpLm9uKCJ0b3VjaGVuZC5icnVzaCIs
bSk6TC5vbigibW91c2Vtb3ZlLmJydXNoIix2KS5vbigibW91c2V1cC5icnVzaCIsbSksUy5pbnRl
cnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxDKXpbMF09bFswXS16WzBdLHpbMV09
ZlswXS16WzFdO2Vsc2UgaWYoayl7dmFyIFQ9Ky93JC8udGVzdChrKSxxPSsvXm4vLnRlc3Qoayk7
TT1bbFsxLVRdLXpbMF0sZlsxLXFdLXpbMV1dLHpbMF09bFtUXSx6WzFdPWZbcV19ZWxzZSBaby5l
dmVudC5hbHRLZXkmJih4PXouc2xpY2UoKSk7Uy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25l
Iikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLFpvLnNlbGVjdCgi
Ym9keSIpLnN0eWxlKCJjdXJzb3IiLGIuc3R5bGUoImN1cnNvciIpKSx3KHt0eXBlOiJicnVzaHN0
YXJ0In0pLHYoKX12YXIgaSxvLGE9TShuLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIp
LGM9bnVsbCxzPW51bGwsbD1bMCwwXSxmPVswLDBdLGg9ITAsZz0hMCxwPXFzWzBdO3JldHVybiBu
LmV2ZW50PWZ1bmN0aW9uKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuPWEub2YodGhpcyxhcmd1
bWVudHMpLHQ9e3g6bCx5OmYsaTppLGo6b30sZT10aGlzLl9fY2hhcnRfX3x8dDt0aGlzLl9fY2hh
cnRfXz10LFNzP1pvLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2gi
LGZ1bmN0aW9uKCl7aT1lLmksbz1lLmosbD1lLngsZj1lLnksbih7dHlwZToiYnJ1c2hzdGFydCJ9
KX0pLnR3ZWVuKCJicnVzaDpicnVzaCIsZnVuY3Rpb24oKXt2YXIgZT1ndShsLHQueCkscj1ndShm
LHQueSk7cmV0dXJuIGk9bz1udWxsLGZ1bmN0aW9uKHUpe2w9dC54PWUodSksZj10Lnk9cih1KSxu
KHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pLmVhY2goImVuZC5icnVzaCIsZnVuY3Rp
b24oKXtpPXQuaSxvPXQuaixuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6
ImJydXNoZW5kIn0pfSk6KG4oe3R5cGU6ImJydXNoc3RhcnQifSksbih7dHlwZToiYnJ1c2giLG1v
ZGU6InJlc2l6ZSJ9KSxuKHt0eXBlOiJicnVzaGVuZCJ9KSl9KX0sbi54PWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscD1xc1shYzw8MXwhc10sbik6Y30sbi55PWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQscD1xc1shYzw8MXwhc10sbik6c30s
bi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYyYmcz8oaD0hIXRb
MF0sZz0hIXRbMV0pOmM/aD0hIXQ6cyYmKGc9ISF0KSxuKTpjJiZzP1toLGddOmM/aDpzP2c6bnVs
bH0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGUscix1LGEsaDtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8oYyYmKGU9dFswXSxyPXRbMV0scyYmKGU9ZVswXSxyPXJbMF0pLGk9W2Uscl0sYy5pbnZl
cnQmJihlPWMoZSkscj1jKHIpKSxlPnImJihoPWUsZT1yLHI9aCksKGUhPWxbMF18fHIhPWxbMV0p
JiYobD1bZSxyXSkpLHMmJih1PXRbMF0sYT10WzFdLGMmJih1PXVbMV0sYT1hWzFdKSxvPVt1LGFd
LHMuaW52ZXJ0JiYodT1zKHUpLGE9cyhhKSksdT5hJiYoaD11LHU9YSxhPWgpLCh1IT1mWzBdfHxh
IT1mWzFdKSYmKGY9W3UsYV0pKSxuKTooYyYmKGk/KGU9aVswXSxyPWlbMV0pOihlPWxbMF0scj1s
WzFdLGMuaW52ZXJ0JiYoZT1jLmludmVydChlKSxyPWMuaW52ZXJ0KHIpKSxlPnImJihoPWUsZT1y
LHI9aCkpKSxzJiYobz8odT1vWzBdLGE9b1sxXSk6KHU9ZlswXSxhPWZbMV0scy5pbnZlcnQmJih1
PXMuaW52ZXJ0KHUpLGE9cy5pbnZlcnQoYSkpLHU+YSYmKGg9dSx1PWEsYT1oKSkpLGMmJnM/W1tl
LHVdLFtyLGFdXTpjP1tlLHJdOnMmJlt1LGFdKX0sbi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBu
LmVtcHR5KCl8fChsPVswLDBdLGY9WzAsMF0saT1vPW51bGwpLG59LG4uZW1wdHk9ZnVuY3Rpb24o
KXtyZXR1cm4hIWMmJmxbMF09PWxbMV18fCEhcyYmZlswXT09ZlsxXX0sWm8ucmViaW5kKG4sYSwi
b24iKX07dmFyIFRzPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3
OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1y
ZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LHFzPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwi
c2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLFJzPVFhLmZvcm1hdD1pYy50aW1lRm9y
bWF0LERzPVJzLnV0YyxQcz1EcygiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7UnMuaXNvPURhdGUu
cHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAw
WiIpP0hvOlBzLEhvLnBhcnNlPWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBEYXRlKG4pO3JldHVybiBp
c05hTih0KT9udWxsOnR9LEhvLnRvU3RyaW5nPVBzLnRvU3RyaW5nLFFhLnNlY29uZD1EdChmdW5j
dGlvbihuKXtyZXR1cm4gbmV3IG5jKDFlMypNYXRoLmZsb29yKG4vMWUzKSl9LGZ1bmN0aW9uKG4s
dCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7
cmV0dXJuIG4uZ2V0U2Vjb25kcygpfSksUWEuc2Vjb25kcz1RYS5zZWNvbmQucmFuZ2UsUWEuc2Vj
b25kcy51dGM9UWEuc2Vjb25kLnV0Yy5yYW5nZSxRYS5taW51dGU9RHQoZnVuY3Rpb24obil7cmV0
dXJuIG5ldyBuYyg2ZTQqTWF0aC5mbG9vcihuLzZlNCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGlt
ZShuLmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdl
dE1pbnV0ZXMoKX0pLFFhLm1pbnV0ZXM9UWEubWludXRlLnJhbmdlLFFhLm1pbnV0ZXMudXRjPVFh
Lm1pbnV0ZS51dGMucmFuZ2UsUWEuaG91cj1EdChmdW5jdGlvbihuKXt2YXIgdD1uLmdldFRpbWV6
b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBuYygzNmU1KihNYXRoLmZsb29yKG4vMzZlNS10KSt0
KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcih0
KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEhvdXJzKCl9KSxRYS5ob3Vycz1RYS5ob3VyLnJh
bmdlLFFhLmhvdXJzLnV0Yz1RYS5ob3VyLnV0Yy5yYW5nZSxRYS5tb250aD1EdChmdW5jdGlvbihu
KXtyZXR1cm4gbj1RYS5kYXkobiksbi5zZXREYXRlKDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRN
b250aChuLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxR
YS5tb250aHM9UWEubW9udGgucmFuZ2UsUWEubW9udGhzLnV0Yz1RYS5tb250aC51dGMucmFuZ2U7
dmFyIFVzPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZl
NSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sanM9W1tR
YS5zZWNvbmQsMV0sW1FhLnNlY29uZCw1XSxbUWEuc2Vjb25kLDE1XSxbUWEuc2Vjb25kLDMwXSxb
UWEubWludXRlLDFdLFtRYS5taW51dGUsNV0sW1FhLm1pbnV0ZSwxNV0sW1FhLm1pbnV0ZSwzMF0s
W1FhLmhvdXIsMV0sW1FhLmhvdXIsM10sW1FhLmhvdXIsNl0sW1FhLmhvdXIsMTJdLFtRYS5kYXks
MV0sW1FhLmRheSwyXSxbUWEud2VlaywxXSxbUWEubW9udGgsMV0sW1FhLm1vbnRoLDNdLFtRYS55
ZWFyLDFdXSxIcz1Scy5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbGxp
c2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFNlY29uZHMoKX1dLFsi
JUk6JU0iLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0
aW9uKG4pe3JldHVybiBuLmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihuKXtyZXR1cm4g
bi5nZXREYXkoKSYmMSE9bi5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihuKXtyZXR1cm4g
MSE9bi5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfV0s
WyIlWSIsd2VdXSksRnM9e3JhbmdlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gWm8ucmFuZ2UoTWF0
aC5jZWlsKG4vZSkqZSwrdCxlKS5tYXAoT28pfSxmbG9vcjp3dCxjZWlsOnd0fTtqcy55ZWFyPVFh
LnllYXIsUWEuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRm8oWm8uc2NhbGUubGluZWFyKCksanMs
SHMpfTt2YXIgT3M9anMubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuWzBdLnV0YyxuWzFdXX0pLFlz
PURzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTWlsbGlzZWNvbmRz
KCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTol
TSIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rp
b24obil7cmV0dXJuIG4uZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVy
biBuLmdldFVUQ0RheSgpJiYxIT1uLmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4p
e3JldHVybiAxIT1uLmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdl
dFVUQ01vbnRoKCl9XSxbIiVZIix3ZV1dKTtPcy55ZWFyPVFhLnllYXIudXRjLFFhLnNjYWxlLnV0
Yz1mdW5jdGlvbigpe3JldHVybiBGbyhaby5zY2FsZS5saW5lYXIoKSxPcyxZcyl9LFpvLnRleHQ9
U3QoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVzcG9uc2VUZXh0fSksWm8uanNvbj1mdW5jdGlvbihu
LHQpe3JldHVybiBrdChuLCJhcHBsaWNhdGlvbi9qc29uIixZbyx0KX0sWm8uaHRtbD1mdW5jdGlv
bihuLHQpe3JldHVybiBrdChuLCJ0ZXh0L2h0bWwiLElvLHQpfSxaby54bWw9U3QoZnVuY3Rpb24o
bil7cmV0dXJuIG4ucmVzcG9uc2VYTUx9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZp
bmUuYW1kP2RlZmluZShabyk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRz
JiYobW9kdWxlLmV4cG9ydHM9Wm8pLHRoaXMuZDM9Wm99KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9q
cy9lbWJlci1kYXRhLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9l
bWJlci1kYXRhLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmI4ZjQ1ZmZmMzcz
ZmNhZDE5MjYzMTU3OTNmNTFlZGRkNzc0YTBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMv
ZW1iZXItZGF0YS5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyMDUzICswLDAgQEAKLS8qIQotICog
QG92ZXJ2aWV3ICBFbWJlciBEYXRhCi0gKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDExLTIwMTQg
VGlsZGUgSW5jLiBhbmQgY29udHJpYnV0b3JzLgotICogICAgICAgICAgICBQb3J0aW9ucyBDb3B5
cmlnaHQgMjAxMSBMaXZpbmdTb2NpYWwgSW5jLgotICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRl
ciBNSVQgbGljZW5zZSAoc2VlIGxpY2Vuc2UuanMpCi0gKiBAdmVyc2lvbiAgIDEuMC4wLWJldGEu
OC4yYTY4YzYzYQotICovCi0oZnVuY3Rpb24oZ2xvYmFsKSB7Ci12YXIgZGVmaW5lLCByZXF1aXJl
TW9kdWxlLCByZXF1aXJlLCByZXF1aXJlanM7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIHJlZ2lz
dHJ5ID0ge30sIHNlZW4gPSB7fTsKLQotICBkZWZpbmUgPSBmdW5jdGlvbihuYW1lLCBkZXBzLCBj
YWxsYmFjaykgewotICAgIHJlZ2lzdHJ5W25hbWVdID0geyBkZXBzOiBkZXBzLCBjYWxsYmFjazog
Y2FsbGJhY2sgfTsKLSAgfTsKLQotICByZXF1aXJlanMgPSByZXF1aXJlID0gcmVxdWlyZU1vZHVs
ZSA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgcmVxdWlyZWpzLl9lYWtfc2VlbiA9IHJlZ2lzdHJ5Owot
Ci0gICAgaWYgKHNlZW5bbmFtZV0pIHsgcmV0dXJuIHNlZW5bbmFtZV07IH0KLSAgICBzZWVuW25h
bWVdID0ge307Ci0KLSAgICBpZiAoIXJlZ2lzdHJ5W25hbWVdKSB7Ci0gICAgICB0aHJvdyBuZXcg
RXJyb3IoIkNvdWxkIG5vdCBmaW5kIG1vZHVsZSAiICsgbmFtZSk7Ci0gICAgfQotCi0gICAgdmFy
IG1vZCA9IHJlZ2lzdHJ5W25hbWVdLAotICAgICAgICBkZXBzID0gbW9kLmRlcHMsCi0gICAgICAg
IGNhbGxiYWNrID0gbW9kLmNhbGxiYWNrLAotICAgICAgICByZWlmaWVkID0gW10sCi0gICAgICAg
IGV4cG9ydHM7Ci0KLSAgICBmb3IgKHZhciBpPTAsIGw9ZGVwcy5sZW5ndGg7IGk8bDsgaSsrKSB7
Ci0gICAgICBpZiAoZGVwc1tpXSA9PT0gJ2V4cG9ydHMnKSB7Ci0gICAgICAgIHJlaWZpZWQucHVz
aChleHBvcnRzID0ge30pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVpZmllZC5wdXNoKHJl
cXVpcmVNb2R1bGUocmVzb2x2ZShkZXBzW2ldKSkpOwotICAgICAgfQotICAgIH0KLQotICAgIHZh
ciB2YWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIHJlaWZpZWQpOwotICAgIHJldHVybiBzZWVu
W25hbWVdID0gZXhwb3J0cyB8fCB2YWx1ZTsKLQotICAgIGZ1bmN0aW9uIHJlc29sdmUoY2hpbGQp
IHsKLSAgICAgIGlmIChjaGlsZC5jaGFyQXQoMCkgIT09ICcuJykgeyByZXR1cm4gY2hpbGQ7IH0K
LSAgICAgIHZhciBwYXJ0cyA9IGNoaWxkLnNwbGl0KCIvIik7Ci0gICAgICB2YXIgcGFyZW50QmFz
ZSA9IG5hbWUuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSk7Ci0KLSAgICAgIGZvciAodmFyIGk9MCwg
bD1wYXJ0cy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07
Ci0KLSAgICAgICAgaWYgKHBhcnQgPT09ICcuLicpIHsgcGFyZW50QmFzZS5wb3AoKTsgfQotICAg
ICAgICBlbHNlIGlmIChwYXJ0ID09PSAnLicpIHsgY29udGludWU7IH0KLSAgICAgICAgZWxzZSB7
IHBhcmVudEJhc2UucHVzaChwYXJ0KTsgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gcGFyZW50
QmFzZS5qb2luKCIvIik7Ci0gICAgfQotICB9OwotfSkoKTsKLQotZGVmaW5lKCJhY3RpdmVtb2Rl
bC1hZGFwdGVyL2xpYi9tYWluIiwgCi0gIFsiLi9zeXN0ZW0iLCJleHBvcnRzIl0sCi0gIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0g
ICAgdmFyIEFjdGl2ZU1vZGVsQWRhcHRlciA9IF9fZGVwZW5kZW5jeTFfXy5BY3RpdmVNb2RlbEFk
YXB0ZXI7Ci0gICAgdmFyIEFjdGl2ZU1vZGVsU2VyaWFsaXplciA9IF9fZGVwZW5kZW5jeTFfXy5B
Y3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0gICAgdmFyIEVtYmVkZGVkUmVjb3Jkc01peGluID0gX19k
ZXBlbmRlbmN5MV9fLkVtYmVkZGVkUmVjb3Jkc01peGluOwotCi0gICAgX19leHBvcnRzX18uQWN0
aXZlTW9kZWxBZGFwdGVyID0gQWN0aXZlTW9kZWxBZGFwdGVyOwotICAgIF9fZXhwb3J0c19fLkFj
dGl2ZU1vZGVsU2VyaWFsaXplciA9IEFjdGl2ZU1vZGVsU2VyaWFsaXplcjsKLSAgICBfX2V4cG9y
dHNfXy5FbWJlZGRlZFJlY29yZHNNaXhpbiA9IEVtYmVkZGVkUmVjb3Jkc01peGluOwotICB9KTsK
LWRlZmluZSgiYWN0aXZlbW9kZWwtYWRhcHRlci9saWIvc2V0dXAtY29udGFpbmVyIiwgCi0gIFsi
Li4vLi4vZW1iZXItZGF0YS9saWIvc3lzdGVtL2NvbnRhaW5lcl9wcm94eSIsIi4vc3lzdGVtL2Fj
dGl2ZV9tb2RlbF9zZXJpYWxpemVyIiwiLi9zeXN0ZW0vYWN0aXZlX21vZGVsX2FkYXB0ZXIiLCJl
eHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZh
ciBDb250YWluZXJQcm94eSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBB
Y3RpdmVNb2RlbFNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2
YXIgQWN0aXZlTW9kZWxBZGFwdGVyID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gc2V0dXBBY3RpdmVNb2RlbEFkYXB0
ZXIoY29udGFpbmVyLCBhcHBsaWNhdGlvbil7Ci0gICAgICB2YXIgcHJveHkgPSBuZXcgQ29udGFp
bmVyUHJveHkoY29udGFpbmVyKTsKLSAgICAgIHByb3h5LnJlZ2lzdGVyRGVwcmVjYXRpb25zKFsK
LSAgICAgICAge2RlcHJlY2F0ZWQ6ICdzZXJpYWxpemVyOl9hbXMnLCAgdmFsaWQ6ICdzZXJpYWxp
emVyOi1hY3RpdmUtbW9kZWwnfSwKLSAgICAgICAge2RlcHJlY2F0ZWQ6ICdhZGFwdGVyOl9hbXMn
LCAgICAgdmFsaWQ6ICdhZGFwdGVyOi1hY3RpdmUtbW9kZWwnfQotICAgICAgXSk7Ci0KLSAgICAg
IGNvbnRhaW5lci5yZWdpc3Rlcignc2VyaWFsaXplcjotYWN0aXZlLW1vZGVsJywgQWN0aXZlTW9k
ZWxTZXJpYWxpemVyKTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignYWRhcHRlcjotYWN0aXZl
LW1vZGVsJywgQWN0aXZlTW9kZWxBZGFwdGVyKTsKLSAgICB9OwotICB9KTsKLWRlZmluZSgiYWN0
aXZlbW9kZWwtYWRhcHRlci9saWIvc3lzdGVtIiwgCi0gIFsiLi9zeXN0ZW0vZW1iZWRkZWRfcmVj
b3Jkc19taXhpbiIsIi4vc3lzdGVtL2FjdGl2ZV9tb2RlbF9hZGFwdGVyIiwiLi9zeXN0ZW0vYWN0
aXZlX21vZGVsX3NlcmlhbGl6ZXIiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5j
eTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBFbWJlZGRlZFJlY29yZHNNaXhpbiA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBBY3RpdmVNb2RlbEFkYXB0ZXIgPSBfX2RlcGVu
ZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2YXIgQWN0aXZlTW9kZWxTZXJpYWxpemVyID0gX19k
ZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICBfX2V4cG9ydHNfXy5FbWJlZGRlZFJlY29y
ZHNNaXhpbiA9IEVtYmVkZGVkUmVjb3Jkc01peGluOwotICAgIF9fZXhwb3J0c19fLkFjdGl2ZU1v
ZGVsQWRhcHRlciA9IEFjdGl2ZU1vZGVsQWRhcHRlcjsKLSAgICBfX2V4cG9ydHNfXy5BY3RpdmVN
b2RlbFNlcmlhbGl6ZXIgPSBBY3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0gIH0pOwotZGVmaW5lKCJh
Y3RpdmVtb2RlbC1hZGFwdGVyL2xpYi9zeXN0ZW0vYWN0aXZlX21vZGVsX2FkYXB0ZXIiLCAKLSAg
WyIuLi8uLi8uLi9lbWJlci1kYXRhL2xpYi9hZGFwdGVycyIsIi4uLy4uLy4uL2VtYmVyLWRhdGEv
bGliL3N5c3RlbS9hZGFwdGVyIiwiLi4vLi4vLi4vZW1iZXItaW5mbGVjdG9yL2xpYi9tYWluIiwi
Li9hY3RpdmVfbW9kZWxfc2VyaWFsaXplciIsIi4vZW1iZWRkZWRfcmVjb3Jkc19taXhpbiIsImV4
cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBSRVNUQWRhcHRlciA9IF9fZGVwZW5k
ZW5jeTFfXy5SRVNUQWRhcHRlcjsKLSAgICB2YXIgSW52YWxpZEVycm9yID0gX19kZXBlbmRlbmN5
Ml9fLkludmFsaWRFcnJvcjsKLSAgICB2YXIgcGx1cmFsaXplID0gX19kZXBlbmRlbmN5M19fLnBs
dXJhbGl6ZTsKLSAgICB2YXIgQWN0aXZlTW9kZWxTZXJpYWxpemVyID0gX19kZXBlbmRlbmN5NF9f
WyJkZWZhdWx0Il07Ci0gICAgdmFyIEVtYmVkZGVkUmVjb3Jkc01peGluID0gX19kZXBlbmRlbmN5
NV9fWyJkZWZhdWx0Il07Ci0KLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAg
ICovCi0KLSAgICB2YXIgZm9yRWFjaCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5mb3JFYWNoOwot
ICAgIHZhciBkZWNhbWVsaXplID0gRW1iZXIuU3RyaW5nLmRlY2FtZWxpemUsCi0gICAgICAgIHVu
ZGVyc2NvcmUgPSBFbWJlci5TdHJpbmcudW5kZXJzY29yZTsKLQotICAgIC8qKgotICAgICAgVGhl
IEFjdGl2ZU1vZGVsQWRhcHRlciBpcyBhIHN1YmNsYXNzIG9mIHRoZSBSRVNUQWRhcHRlciBkZXNp
Z25lZCB0byBpbnRlZ3JhdGUKLSAgICAgIHdpdGggYSBKU09OIEFQSSB0aGF0IHVzZXMgYW4gdW5k
ZXJzY29yZWQgbmFtaW5nIGNvbnZlbnRpb24gaW5zdGVhZCBvZiBjYW1lbENhc2luZy4KLSAgICAg
IEl0IGhhcyBiZWVuIGRlc2lnbmVkIHRvIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUKLSAg
ICAgIFthY3RpdmVfbW9kZWxfc2VyaWFsaXplcnNdKGh0dHA6Ly9naXRodWIuY29tL3JhaWxzLWFw
aS9hY3RpdmVfbW9kZWxfc2VyaWFsaXplcnMpCi0gICAgICBSdWJ5IGdlbS4gVGhpcyBBZGFwdGVy
IGV4cGVjdHMgc3BlY2lmaWMgc2V0dGluZ3MgdXNpbmcgQWN0aXZlTW9kZWw6OlNlcmlhbGl6ZXJz
LAotICAgICAgYGVtYmVkIDppZHMsIGluY2x1ZGU6IHRydWVgIHdoaWNoIHNpZGVsb2FkcyB0aGUg
cmVjb3Jkcy4KLQotICAgICAgVGhpcyBhZGFwdGVyIGV4dGVuZHMgdGhlIERTLlJFU1RBZGFwdGVy
IGJ5IG1ha2luZyBjb25zaXN0ZW50IHVzZSBvZiB0aGUgY2FtZWxpemF0aW9uLAotICAgICAgZGVj
YW1lbGl6YXRpb24gYW5kIHBsdXJhbGl6YXRpb24gbWV0aG9kcyB0byBub3JtYWxpemUgdGhlIHNl
cmlhbGl6ZWQgSlNPTiBpbnRvIGEKLSAgICAgIGZvcm1hdCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0
aCBhIGNvbnZlbnRpb25hbCBSYWlscyBiYWNrZW5kIGFuZCBFbWJlciBEYXRhLgotCi0gICAgICAj
IyBKU09OIFN0cnVjdHVyZQotCi0gICAgICBUaGUgQWN0aXZlTW9kZWxBZGFwdGVyIGV4cGVjdHMg
dGhlIEpTT04gcmV0dXJuZWQgZnJvbSB5b3VyIHNlcnZlciB0byBmb2xsb3cKLSAgICAgIHRoZSBS
RVNUIGFkYXB0ZXIgY29udmVudGlvbnMgc3Vic3RpdHV0aW5nIHVuZGVyc2NvcmVkIGtleXMgZm9y
IGNhbWVsY2FzZWQgb25lcy4KLQotICAgICAgIyMjIENvbnZlbnRpb25hbCBOYW1lcwotCi0gICAg
ICBBdHRyaWJ1dGUgbmFtZXMgaW4geW91ciBKU09OIHBheWxvYWQgc2hvdWxkIGJlIHRoZSB1bmRl
cnNjb3JlZCB2ZXJzaW9ucyBvZgotICAgICAgdGhlIGF0dHJpYnV0ZXMgaW4geW91ciBFbWJlci5q
cyBtb2RlbHMuCi0KLSAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGBQZXJzb25gIG1v
ZGVsOgotCi0gICAgICBgYGBqcwotICAgICAgQXBwLkZhbW91c1BlcnNvbiA9IERTLk1vZGVsLmV4
dGVuZCh7Ci0gICAgICAgIGZpcnN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgIGxh
c3ROYW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgb2NjdXBhdGlvbjogRFMuYXR0cign
c3RyaW5nJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIFRoZSBKU09OIHJldHVybmVk
IHNob3VsZCBsb29rIGxpa2UgdGhpczoKLQotICAgICAgYGBganMKLSAgICAgIHsKLSAgICAgICAg
ImZhbW91c19wZXJzb24iOiB7Ci0gICAgICAgICAgImZpcnN0X25hbWUiOiAiQmFyYWNrIiwKLSAg
ICAgICAgICAibGFzdF9uYW1lIjogIk9iYW1hIiwKLSAgICAgICAgICAib2NjdXBhdGlvbiI6ICJQ
cmVzaWRlbnQiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGBgYAotCi0gICAgICBAY2xhc3Mg
QWN0aXZlTW9kZWxBZGFwdGVyCi0gICAgICBAY29uc3RydWN0b3IKLSAgICAgIEBuYW1lc3BhY2Ug
RFMKLSAgICAgIEBleHRlbmRzIERTLlJFU1RBZGFwdGVyCi0gICAgKiovCi0KLSAgICB2YXIgQWN0
aXZlTW9kZWxBZGFwdGVyID0gUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgIGRlZmF1bHRTZXJp
YWxpemVyOiAnLWFjdGl2ZS1tb2RlbCcsCi0gICAgICAvKioKLSAgICAgICAgVGhlIEFjdGl2ZU1v
ZGVsQWRhcHRlciBvdmVycmlkZXMgdGhlIGBwYXRoRm9yVHlwZWAgbWV0aG9kIHRvIGJ1aWxkCi0g
ICAgICAgIHVuZGVyc2NvcmVkIFVSTHMgYnkgZGVjYW1lbGl6aW5nIGFuZCBwbHVyYWxpemluZyB0
aGUgb2JqZWN0IHR5cGUgbmFtZS4KLQotICAgICAgICBgYGBqcwotICAgICAgICAgIHRoaXMucGF0
aEZvclR5cGUoImZhbW91c1BlcnNvbiIpOwotICAgICAgICAgIC8vPT4gImZhbW91c19wZW9wbGUi
Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgcGF0aEZvclR5cGUKLSAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgICAgQHJldHVybiBTdHJpbmcKLSAgICAgICovCi0gICAg
ICBwYXRoRm9yVHlwZTogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgZGVjYW1lbGl6ZWQg
PSBkZWNhbWVsaXplKHR5cGUpOwotICAgICAgICB2YXIgdW5kZXJzY29yZWQgPSB1bmRlcnNjb3Jl
KGRlY2FtZWxpemVkKTsKLSAgICAgICAgcmV0dXJuIHBsdXJhbGl6ZSh1bmRlcnNjb3JlZCk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhlIEFjdGl2ZU1vZGVsQWRhcHRlciBvdmVy
cmlkZXMgdGhlIGBhamF4RXJyb3JgIG1ldGhvZAotICAgICAgICB0byByZXR1cm4gYSBEUy5JbnZh
bGlkRXJyb3IgZm9yIGFsbCA0MjIgVW5wcm9jZXNzYWJsZSBFbnRpdHkKLSAgICAgICAgcmVzcG9u
c2VzLgotCi0gICAgICAgIEEgNDIyIEhUVFAgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGdlbmVy
YWxseSBpbXBsaWVzIHRoYXQgdGhlIHJlcXVlc3QKLSAgICAgICAgd2FzIHdlbGwgZm9ybWVkIGJ1
dCB0aGUgQVBJIHdhcyB1bmFibGUgdG8gcHJvY2VzcyBpdCBiZWNhdXNlIHRoZQotICAgICAgICBj
b250ZW50IHdhcyBub3Qgc2VtYW50aWNhbGx5IGNvcnJlY3Qgb3IgbWVhbmluZ2Z1bCBwZXIgdGhl
IEFQSS4KLQotICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA0MjIgSFRUUCBFcnJvciBj
b2RlIHNlZSAxMS4yIFdlYkRBViBSRkMgNDkxOAotICAgICAgICBodHRwczovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjNDkxOCNzZWN0aW9uLTExLjIKLQotICAgICAgICBAbWV0aG9kIGFqYXhFcnJv
cgotICAgICAgICBAcGFyYW0ganFYSFIKLSAgICAgICAgQHJldHVybiBlcnJvcgotICAgICAgKi8K
LSAgICAgIGFqYXhFcnJvcjogZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAgdmFyIGVycm9yID0g
dGhpcy5fc3VwZXIoanFYSFIpOwotCi0gICAgICAgIGlmIChqcVhIUiAmJiBqcVhIUi5zdGF0dXMg
PT09IDQyMikgewotICAgICAgICAgIHZhciByZXNwb25zZSA9IEVtYmVyLiQucGFyc2VKU09OKGpx
WEhSLnJlc3BvbnNlVGV4dCksCi0gICAgICAgICAgICAgIGVycm9ycyA9IHt9OwotCi0gICAgICAg
ICAgaWYgKHJlc3BvbnNlLmVycm9ycyAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICB2YXIg
anNvbkVycm9ycyA9IHJlc3BvbnNlLmVycm9yczsKLQotICAgICAgICAgICAgZm9yRWFjaChFbWJl
ci5rZXlzKGpzb25FcnJvcnMpLCBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgZXJyb3Jz
W0VtYmVyLlN0cmluZy5jYW1lbGl6ZShrZXkpXSA9IGpzb25FcnJvcnNba2V5XTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJldHVybiBuZXcgSW52YWxpZEVycm9y
KGVycm9ycyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGVycm9yOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0g
QWN0aXZlTW9kZWxBZGFwdGVyOwotICB9KTsKLWRlZmluZSgiYWN0aXZlbW9kZWwtYWRhcHRlci9s
aWIvc3lzdGVtL2FjdGl2ZV9tb2RlbF9zZXJpYWxpemVyIiwgCi0gIFsiLi4vLi4vLi4vZW1iZXIt
aW5mbGVjdG9yL2xpYi9tYWluIiwiLi4vLi4vLi4vZW1iZXItZGF0YS9saWIvc2VyaWFsaXplcnMv
cmVzdF9zZXJpYWxpemVyIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
dmFyIHNpbmd1bGFyaXplID0gX19kZXBlbmRlbmN5MV9fLnNpbmd1bGFyaXplOwotICAgIHZhciBS
RVNUU2VyaWFsaXplciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgIC8qKgotICAg
ICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQs
Ci0gICAgICAgIGZvckVhY2ggPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMuZm9yRWFjaCwKLSAgICAg
ICAgY2FtZWxpemUgPSAgIEVtYmVyLlN0cmluZy5jYW1lbGl6ZSwKLSAgICAgICAgY2FwaXRhbGl6
ZSA9IEVtYmVyLlN0cmluZy5jYXBpdGFsaXplLAotICAgICAgICBkZWNhbWVsaXplID0gRW1iZXIu
U3RyaW5nLmRlY2FtZWxpemUsCi0gICAgICAgIHVuZGVyc2NvcmUgPSBFbWJlci5TdHJpbmcudW5k
ZXJzY29yZTsKLSAgICAvKioKLSAgICAgIFRoZSBBY3RpdmVNb2RlbFNlcmlhbGl6ZXIgaXMgYSBz
dWJjbGFzcyBvZiB0aGUgUkVTVFNlcmlhbGl6ZXIgZGVzaWduZWQgdG8gaW50ZWdyYXRlCi0gICAg
ICB3aXRoIGEgSlNPTiBBUEkgdGhhdCB1c2VzIGFuIHVuZGVyc2NvcmVkIG5hbWluZyBjb252ZW50
aW9uIGluc3RlYWQgb2YgY2FtZWxDYXNpbmcuCi0gICAgICBJdCBoYXMgYmVlbiBkZXNpZ25lZCB0
byB3b3JrIG91dCBvZiB0aGUgYm94IHdpdGggdGhlCi0gICAgICBbYWN0aXZlX21vZGVsX3Nlcmlh
bGl6ZXJzXShodHRwOi8vZ2l0aHViLmNvbS9yYWlscy1hcGkvYWN0aXZlX21vZGVsX3NlcmlhbGl6
ZXJzKQotICAgICAgUnVieSBnZW0uIFRoaXMgU2VyaWFsaXplciBleHBlY3RzIHNwZWNpZmljIHNl
dHRpbmdzIHVzaW5nIEFjdGl2ZU1vZGVsOjpTZXJpYWxpemVycywKLSAgICAgIGBlbWJlZCA6aWRz
LCBpbmNsdWRlOiB0cnVlYCB3aGljaCBzaWRlbG9hZHMgdGhlIHJlY29yZHMuCi0KLSAgICAgIFRo
aXMgc2VyaWFsaXplciBleHRlbmRzIHRoZSBEUy5SRVNUU2VyaWFsaXplciBieSBtYWtpbmcgY29u
c2lzdGVudAotICAgICAgdXNlIG9mIHRoZSBjYW1lbGl6YXRpb24sIGRlY2FtZWxpemF0aW9uIGFu
ZCBwbHVyYWxpemF0aW9uIG1ldGhvZHMgdG8KLSAgICAgIG5vcm1hbGl6ZSB0aGUgc2VyaWFsaXpl
ZCBKU09OIGludG8gYSBmb3JtYXQgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKLSAgICAgIGEgY29u
dmVudGlvbmFsIFJhaWxzIGJhY2tlbmQgYW5kIEVtYmVyIERhdGEuCi0KLSAgICAgICMjIEpTT04g
U3RydWN0dXJlCi0KLSAgICAgIFRoZSBBY3RpdmVNb2RlbFNlcmlhbGl6ZXIgZXhwZWN0cyB0aGUg
SlNPTiByZXR1cm5lZCBmcm9tIHlvdXIgc2VydmVyCi0gICAgICB0byBmb2xsb3cgdGhlIFJFU1Qg
YWRhcHRlciBjb252ZW50aW9ucyBzdWJzdGl0dXRpbmcgdW5kZXJzY29yZWQga2V5cwotICAgICAg
Zm9yIGNhbWVsY2FzZWQgb25lcy4KLQotICAgICAgIyMjIENvbnZlbnRpb25hbCBOYW1lcwotCi0g
ICAgICBBdHRyaWJ1dGUgbmFtZXMgaW4geW91ciBKU09OIHBheWxvYWQgc2hvdWxkIGJlIHRoZSB1
bmRlcnNjb3JlZCB2ZXJzaW9ucyBvZgotICAgICAgdGhlIGF0dHJpYnV0ZXMgaW4geW91ciBFbWJl
ci5qcyBtb2RlbHMuCi0KLSAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGBQZXJzb25g
IG1vZGVsOgotCi0gICAgICBgYGBqcwotICAgICAgQXBwLkZhbW91c1BlcnNvbiA9IERTLk1vZGVs
LmV4dGVuZCh7Ci0gICAgICAgIGZpcnN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAg
IGxhc3ROYW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgb2NjdXBhdGlvbjogRFMuYXR0
cignc3RyaW5nJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIFRoZSBKU09OIHJldHVy
bmVkIHNob3VsZCBsb29rIGxpa2UgdGhpczoKLQotICAgICAgYGBganMKLSAgICAgIHsKLSAgICAg
ICAgImZhbW91c19wZXJzb24iOiB7Ci0gICAgICAgICAgImZpcnN0X25hbWUiOiAiQmFyYWNrIiwK
LSAgICAgICAgICAibGFzdF9uYW1lIjogIk9iYW1hIiwKLSAgICAgICAgICAib2NjdXBhdGlvbiI6
ICJQcmVzaWRlbnQiCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGBgYAotCi0gICAgICBAY2xh
c3MgQWN0aXZlTW9kZWxTZXJpYWxpemVyCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBAZXh0
ZW5kcyBEUy5SRVNUU2VyaWFsaXplcgotICAgICovCi0gICAgdmFyIEFjdGl2ZU1vZGVsU2VyaWFs
aXplciA9IFJFU1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAvLyBTRVJJQUxJWkUKLQotICAg
ICAgLyoqCi0gICAgICAgIENvbnZlcnRzIGNhbWVsQ2FzZWQgYXR0cmlidXRlcyB0byB1bmRlcnNj
b3JlZCB3aGVuIHNlcmlhbGl6aW5nLgotCi0gICAgICAgIEBtZXRob2Qga2V5Rm9yQXR0cmlidXRl
Ci0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBhdHRyaWJ1dGUKLSAgICAgICAgQHJldHVybiBTdHJp
bmcKLSAgICAgICovCi0gICAgICBrZXlGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uKGF0dHIpIHsKLSAg
ICAgICAgcmV0dXJuIGRlY2FtZWxpemUoYXR0cik7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgVW5kZXJzY29yZXMgcmVsYXRpb25zaGlwIG5hbWVzIGFuZCBhcHBlbmRzICJfaWQiIG9y
ICJfaWRzIiB3aGVuIHNlcmlhbGl6aW5nCi0gICAgICAgIHJlbGF0aW9uc2hpcCBrZXlzLgotCi0g
ICAgICAgIEBtZXRob2Qga2V5Rm9yUmVsYXRpb25zaGlwCi0gICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBrZXkKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtpbmQKLSAgICAgICAgQHJldHVybiBTdHJp
bmcKLSAgICAgICovCi0gICAgICBrZXlGb3JSZWxhdGlvbnNoaXA6IGZ1bmN0aW9uKGtleSwga2lu
ZCkgewotICAgICAgICBrZXkgPSBkZWNhbWVsaXplKGtleSk7Ci0gICAgICAgIGlmIChraW5kID09
PSAiYmVsb25nc1RvIikgewotICAgICAgICAgIHJldHVybiBrZXkgKyAiX2lkIjsKLSAgICAgICAg
fSBlbHNlIGlmIChraW5kID09PSAiaGFzTWFueSIpIHsKLSAgICAgICAgICByZXR1cm4gc2luZ3Vs
YXJpemUoa2V5KSArICJfaWRzIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4g
a2V5OwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKgotICAgICAgICBEb2VzIG5vdCBz
ZXJpYWxpemUgaGFzTWFueSByZWxhdGlvbnNoaXBzIGJ5IGRlZmF1bHQuCi0gICAgICAqLwotICAg
ICAgc2VyaWFsaXplSGFzTWFueTogRW1iZXIuSywKLQotICAgICAgLyoqCi0gICAgICAgIFVuZGVy
c2NvcmVzIHRoZSBKU09OIHJvb3Qga2V5cyB3aGVuIHNlcmlhbGl6aW5nLgotCi0gICAgICAgIEBt
ZXRob2Qgc2VyaWFsaXplSW50b0hhc2gKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGhhc2gKLSAg
ICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0g
e0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAg
ICovCi0gICAgICBzZXJpYWxpemVJbnRvSGFzaDogZnVuY3Rpb24oZGF0YSwgdHlwZSwgcmVjb3Jk
LCBvcHRpb25zKSB7Ci0gICAgICAgIHZhciByb290ID0gdW5kZXJzY29yZShkZWNhbWVsaXplKHR5
cGUudHlwZUtleSkpOwotICAgICAgICBkYXRhW3Jvb3RdID0gdGhpcy5zZXJpYWxpemUocmVjb3Jk
LCBvcHRpb25zKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBTZXJpYWxpemVzIGEg
cG9seW1vcnBoaWMgdHlwZSBhcyBhIGZ1bGx5IGNhcGl0YWxpemVkIG1vZGVsIG5hbWUuCi0KLSAg
ICAgICAgQG1ldGhvZCBzZXJpYWxpemVQb2x5bW9ycGhpY1R5cGUKLSAgICAgICAgQHBhcmFtIHtE
Uy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29uCi0gICAgICAgIEBw
YXJhbSByZWxhdGlvbnNoaXAKLSAgICAgICovCi0gICAgICBzZXJpYWxpemVQb2x5bW9ycGhpY1R5
cGU6IGZ1bmN0aW9uKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIHZhciBr
ZXkgPSByZWxhdGlvbnNoaXAua2V5LAotICAgICAgICAgICAgYmVsb25nc1RvID0gZ2V0KHJlY29y
ZCwga2V5KTsKLQotICAgICAgICBpZiAoYmVsb25nc1RvKSB7Ci0gICAgICAgICAga2V5ID0gdGhp
cy5rZXlGb3JBdHRyaWJ1dGUoa2V5KTsKLSAgICAgICAgICBqc29uW2tleSArICJfdHlwZSJdID0g
Y2FwaXRhbGl6ZShiZWxvbmdzVG8uY29uc3RydWN0b3IudHlwZUtleSk7Ci0gICAgICAgIH0KLSAg
ICAgIH0sCi0KLSAgICAgIC8vIEVYVFJBQ1QKLQotICAgICAgLyoqCi0gICAgICAgIEFkZCBleHRy
YSBzdGVwIHRvIGBEUy5SRVNUU2VyaWFsaXplci5ub3JtYWxpemVgIHNvIGxpbmtzIGFyZSBub3Jt
YWxpemVkLgotCi0gICAgICAgIElmIHlvdXIgcGF5bG9hZCBsb29rcyBsaWtlOgotCi0gICAgICAg
IGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6
IDEsCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAgICAg
ICAibGlua3MiOiB7ICJmbGFnZ2VkX2NvbW1lbnRzIjogImFwaS9jb21tZW50cy9mbGFnZ2VkIiB9
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBub3Jt
YWxpemVkIHZlcnNpb24gd291bGQgbG9vayBsaWtlIHRoaXMKLQotICAgICAgICBgYGBqcwotICAg
ICAgICB7Ci0gICAgICAgICAgInBvc3QiOiB7Ci0gICAgICAgICAgICAiaWQiOiAxLAotICAgICAg
ICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImxpbmtzIjog
eyAiZmxhZ2dlZENvbW1lbnRzIjogImFwaS9jb21tZW50cy9mbGFnZ2VkIiB9Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qgbm9ybWFsaXplCi0g
ICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFt
IHtPYmplY3R9IGhhc2gKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3AKLSAgICAgICAgQHJl
dHVybiBPYmplY3QKLSAgICAgICovCi0KLSAgICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24odHlwZSwg
aGFzaCwgcHJvcCkgewotICAgICAgICB0aGlzLm5vcm1hbGl6ZUxpbmtzKGhhc2gpOwotCi0gICAg
ICAgIHJldHVybiB0aGlzLl9zdXBlcih0eXBlLCBoYXNoLCBwcm9wKTsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBDb252ZXJ0IGBzbmFrZV9jYXNlZGAgbGlua3MgIHRvIGBjYW1lbENh
c2VgCi0KLSAgICAgICAgQG1ldGhvZCBub3JtYWxpemVMaW5rcwotICAgICAgICBAcGFyYW0ge09i
amVjdH0gZGF0YQotICAgICAgKi8KLQotICAgICAgbm9ybWFsaXplTGlua3M6IGZ1bmN0aW9uKGRh
dGEpewotICAgICAgICBpZiAoZGF0YS5saW5rcykgewotICAgICAgICAgIHZhciBsaW5rcyA9IGRh
dGEubGlua3M7Ci0KLSAgICAgICAgICBmb3IgKHZhciBsaW5rIGluIGxpbmtzKSB7Ci0gICAgICAg
ICAgICB2YXIgY2FtZWxpemVkTGluayA9IGNhbWVsaXplKGxpbmspOwotCi0gICAgICAgICAgICBp
ZiAoY2FtZWxpemVkTGluayAhPT0gbGluaykgewotICAgICAgICAgICAgICBsaW5rc1tjYW1lbGl6
ZWRMaW5rXSA9IGxpbmtzW2xpbmtdOwotICAgICAgICAgICAgICBkZWxldGUgbGlua3NbbGlua107
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAg
ICAvKioKLSAgICAgICAgTm9ybWFsaXplIHRoZSBwb2x5bW9ycGhpYyB0eXBlIGZyb20gdGhlIEpT
T04uCi0KLSAgICAgICAgTm9ybWFsaXplOgotICAgICAgICBgYGBqcwotICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlkOiAiMSIKLSAgICAgICAgICAgIG1pbmlvbjogeyB0eXBlOiAiZXZpbF9taW5p
b24iLCBpZDogIjEyIn0KLSAgICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRvOgot
ICAgICAgICBgYGBqcwotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlkOiAiMSIKLSAgICAgICAg
ICAgIG1pbmlvbjogeyB0eXBlOiAiZXZpbE1pbmlvbiIsIGlkOiAiMTIifQotICAgICAgICAgIH0K
LSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBub3JtYWxpemVSZWxhdGlvbnNoaXBzCi0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgbm9ybWFsaXplUmVsYXRpb25zaGlwczog
ZnVuY3Rpb24odHlwZSwgaGFzaCkgewotICAgICAgICB2YXIgcGF5bG9hZEtleSwgcGF5bG9hZDsK
LQotICAgICAgICBpZiAodGhpcy5rZXlGb3JSZWxhdGlvbnNoaXApIHsKLSAgICAgICAgICB0eXBl
LmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24oa2V5LCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAg
ICAgIGlmIChyZWxhdGlvbnNoaXAub3B0aW9ucy5wb2x5bW9ycGhpYykgewotICAgICAgICAgICAg
ICBwYXlsb2FkS2V5ID0gdGhpcy5rZXlGb3JBdHRyaWJ1dGUoa2V5KTsKLSAgICAgICAgICAgICAg
cGF5bG9hZCA9IGhhc2hbcGF5bG9hZEtleV07Ci0gICAgICAgICAgICAgIGlmIChwYXlsb2FkICYm
IHBheWxvYWQudHlwZSkgewotICAgICAgICAgICAgICAgIHBheWxvYWQudHlwZSA9IHRoaXMudHlw
ZUZvclJvb3QocGF5bG9hZC50eXBlKTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXlsb2Fk
ICYmIHJlbGF0aW9uc2hpcC5raW5kID09PSAiaGFzTWFueSIpIHsKLSAgICAgICAgICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgZm9yRWFjaChwYXlsb2FkLCBmdW5jdGlv
bihzaW5nbGUpIHsKLSAgICAgICAgICAgICAgICAgIHNpbmdsZS50eXBlID0gc2VsZi50eXBlRm9y
Um9vdChzaW5nbGUudHlwZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHBheWxvYWRLZXkgPSB0aGlzLmtl
eUZvclJlbGF0aW9uc2hpcChrZXksIHJlbGF0aW9uc2hpcC5raW5kKTsKLSAgICAgICAgICAgICAg
cGF5bG9hZCA9IGhhc2hbcGF5bG9hZEtleV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGhhc2hba2V5XSA9IHBheWxvYWQ7Ci0KLSAgICAgICAgICAgIGlmIChrZXkgIT09IHBheWxvYWRL
ZXkpIHsKLSAgICAgICAgICAgICAgZGVsZXRlIGhhc2hbcGF5bG9hZEtleV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBBY3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0gIH0p
OwotZGVmaW5lKCJhY3RpdmVtb2RlbC1hZGFwdGVyL2xpYi9zeXN0ZW0vZW1iZWRkZWRfcmVjb3Jk
c19taXhpbiIsIAotICBbIi4uLy4uLy4uL2VtYmVyLWluZmxlY3Rvci9saWIvbWFpbiIsImV4cG9y
dHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0OwotICAgIHZhciBmb3JFYWNoID0g
RW1iZXIuRW51bWVyYWJsZVV0aWxzLmZvckVhY2g7Ci0gICAgdmFyIGNhbWVsaXplID0gRW1iZXIu
U3RyaW5nLmNhbWVsaXplOwotCi0gICAgdmFyIHBsdXJhbGl6ZSA9IF9fZGVwZW5kZW5jeTFfXy5w
bHVyYWxpemU7Ci0KLSAgICAvKioKLSAgICAgICMjIFVzaW5nIEVtYmVkZGVkIFJlY29yZHMKLQot
ICAgICAgYERTLkVtYmVkZGVkUmVjb3Jkc01peGluYCBzdXBwb3J0cyBzZXJpYWxpemluZyBlbWJl
ZGRlZCByZWNvcmRzLgotCi0gICAgICBUbyBzZXQgdXAgZW1iZWRkZWQgcmVjb3JkcywgaW5jbHVk
ZSB0aGUgbWl4aW4gd2hlbiBleHRlbmRpbmcgYSBzZXJpYWxpemVyCi0gICAgICB0aGVuIGRlZmlu
ZSBhbmQgY29uZmlndXJlIGVtYmVkZGVkIChtb2RlbCkgcmVsYXRpb25zaGlwcy4KLQotICAgICAg
QmVsb3cgaXMgYW4gZXhhbXBsZSBvZiBhIHBlci10eXBlIHNlcmlhbGl6ZXIgKCdwb3N0JyB0eXBl
KS4KLQotICAgICAgYGBganMKLSAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkFjdGl2ZU1v
ZGVsU2VyaWFsaXplci5leHRlbmQoRFMuRW1iZWRkZWRSZWNvcmRzTWl4aW4sIHsKLSAgICAgICAg
YXR0cnM6IHsKLSAgICAgICAgICBhdXRob3I6IHtlbWJlZGRlZDogJ2Fsd2F5cyd9LAotICAgICAg
ICAgIGNvbW1lbnRzOiB7c2VyaWFsaXplOiAnaWRzJ30KLSAgICAgICAgfQotICAgICAgfSkKLSAg
ICAgIGBgYAotCi0gICAgICBUaGUgYGF0dHJzYCBvcHRpb24gZm9yIGEgcmVzb3VyY2UgYHtlbWJl
ZGRlZDogJ2Fsd2F5cyd9YCBpcyBzaG9ydGhhbmQgZm9yOgotCi0gICAgICBgYGBqcwotICAgICAg
e3NlcmlhbGl6ZTogJ3JlY29yZHMnLCBkZXNlcmlhbGl6ZTogJ3JlY29yZHMnfQotICAgICAgYGBg
Ci0KLSAgICAgICMjIyBDb25maWd1cmluZyBBdHRycwotCi0gICAgICBBIHJlc291cmNlJ3MgYGF0
dHJzYCBvcHRpb24gbWF5IGJlIHNldCB0byB1c2UgYGlkc2AsIGByZWNvcmRzYCBvciBgbm9gIGZv
ciB0aGUKLSAgICAgIGBzZXJpYWxpemVgICBhbmQgYGRlc2VyaWFsaXplYCBzZXR0aW5ncy4KLQot
ICAgICAgVGhlIGBhdHRyc2AgcHJvcGVydHkgY2FuIGJlIHNldCBvbiB0aGUgQXBwbGljYXRpb25T
ZXJpYWxpemVyIG9yIGEgcGVyLXR5cGUKLSAgICAgIHNlcmlhbGl6ZXIuCi0KLSAgICAgIEluIHRo
ZSBjYXNlIHdoZXJlIGVtYmVkZGVkIEpTT04gaXMgZXhwZWN0ZWQgd2hpbGUgZXh0cmFjdGluZyBh
IHBheW9hZCAocmVhZGluZykKLSAgICAgIHRoZSBzZXR0aW5nIGlzIGBkZXNlcmlhbGl6ZTogJ3Jl
Y29yZHMnYCwgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgYGlkc2Agd2hlbgotICAgICAgZXh0cmFj
dGluZyBhcyB0aGF0IGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpdGhvdXQgdGhpcyBtaXhpbiBp
ZiB5b3UgYXJlIHVzaW5nCi0gICAgICB0aGUgdmFuaWxsYSBBY3RpdmVNb2RlbEFkYXB0ZXIuIExp
a2V3aXNlLCB0byBlbWJlZCBKU09OIGluIHRoZSBwYXlsb2FkIHdoaWxlCi0gICAgICBzZXJpYWxp
emluZyBgc2VyaWFsaXplOiAncmVjb3JkcydgIGlzIHRoZSBzZXR0aW5nIHRvIHVzZS4gVGhlcmUg
aXMgYW4gb3B0aW9uIG9mCi0gICAgICBub3QgZW1iZWRkaW5nIEpTT04gaW4gdGhlIHNlcmlhbGl6
ZWQgcGF5bG9hZCBieSB1c2luZyBgc2VyaWFsaXplOiAnaWRzJ2AuIElmIHlvdQotICAgICAgZG8g
bm90IHdhbnQgdGhlIHJlbGF0aW9uc2hpcCBzZW50IGF0IGFsbCwgeW91IGNhbiB1c2UgYHNlcmlh
bGl6ZTogJ25vJ2AuCi0KLQotICAgICAgIyMjIEFjdGl2ZU1vZGVsU2VyaWFsaXplciBkZWZhdWx0
cwotICAgICAgSWYgeW91IGRvIG5vdCBvdmVyd3JpdGUgYGF0dHJzYCBmb3IgYSBzcGVjaWZpYyBy
ZWxhdGlvbnNoaXAsIHRoZSBgQWN0aXZlTW9kZWxTZXJpYWxpemVyYAotICAgICAgd2lsbCBiZWhh
dmUgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgIEJlbG9uZ3NUbzogYHtzZXJpYWxpemU6
J2lkJywgZGVzZXJpYWxpemU6J2lkJ31gCi0gICAgICBIYXNNYW55OiAgIGB7c2VyaWFsaXplOm5v
LCAgZGVzZXJpYWxpemU6J2lkcyd9YAotCi0gICAgICAjIyMgTW9kZWwgUmVsYXRpb25zaGlwcwot
Ci0gICAgICBFbWJlZGRlZCByZWNvcmRzIG11c3QgaGF2ZSBhIG1vZGVsIGRlZmluZWQgdG8gYmUg
ZXh0cmFjdGVkIGFuZCBzZXJpYWxpemVkLgotCi0gICAgICBUbyBzdWNjZXNzZnVsbHkgZXh0cmFj
dCBhbmQgc2VyaWFsaXplIGVtYmVkZGVkIHJlY29yZHMgdGhlIG1vZGVsIHJlbGF0aW9uc2hpcHMK
LSAgICAgIG11c3QgYmUgc2V0dXAgY29ycmVjdHkgU2VlIHRoZQotICAgICAgW2RlZmluaW5nIHJl
bGF0aW9uc2hpcHNdKC9ndWlkZXMvbW9kZWxzL2RlZmluaW5nLW1vZGVscy8jdG9jX2RlZmluaW5n
LXJlbGF0aW9uc2hpcHMpCi0gICAgICBzZWN0aW9uIG9mIHRoZSAqKkRlZmluaW5nIE1vZGVscyoq
IGd1aWRlIHBhZ2UuCi0KLSAgICAgIFJlY29yZHMgd2l0aG91dCBhbiBgaWRgIHByb3BlcnR5IGFy
ZSBub3QgY29uc2lkZXJlZCBlbWJlZGRlZCByZWNvcmRzLCBtb2RlbAotICAgICAgaW5zdGFuY2Vz
IG11c3QgaGF2ZSBhbiBgaWRgIHByb3BlcnR5IHRvIGJlIHVzZWQgd2l0aCBFbWJlciBEYXRhLgot
Ci0gICAgICAjIyMgRXhhbXBsZSBKU09OIHBheWxvYWRzLCBNb2RlbHMgYW5kIFNlcmlhbGl6ZXJz
Ci0KLSAgICAgICoqV2hlbiBjdXN0b21pemluZyBhIHNlcmlhbGl6ZXIgaXQgaXMgaW1wb3JhbnQg
dG8gZ3JvayB3aGF0IHRoZSBjdXNvbWl6YXRpb25zCi0gICAgICBhcmUsIHBsZWFzZSByZWFkIHRo
ZSBkb2NzIGZvciB0aGUgbWV0aG9kcyB0aGlzIG1peGluIHByb3ZpZGVzLCBpbiBjYXNlIHlvdSBu
ZWVkCi0gICAgICB0byBtb2RpZnkgdG8gZml0IHlvdXIgc3BlY2lmaWMgbmVlZHMuKioKLQotICAg
ICAgRm9yIGV4YW1wbGUgcmV2aWV3IHRoZSBkb2NzIGZvciBlYWNoIG1ldGhvZCBvZiB0aGlzIG1p
eGluOgotCi0gICAgICAqIFtleHRyYWN0QXJyYXldKC9hcGkvZGF0YS9jbGFzc2VzL0RTLkVtYmVk
ZGVkUmVjb3Jkc01peGluLmh0bWwjbWV0aG9kX2V4dHJhY3RBcnJheSkKLSAgICAgICogW2V4dHJh
Y3RTaW5nbGVdKC9hcGkvZGF0YS9jbGFzc2VzL0RTLkVtYmVkZGVkUmVjb3Jkc01peGluLmh0bWwj
bWV0aG9kX2V4dHJhY3RTaW5nbGUpCi0gICAgICAqIFtzZXJpYWxpemVCZWxvbmdzVG9dKC9hcGkv
ZGF0YS9jbGFzc2VzL0RTLkVtYmVkZGVkUmVjb3Jkc01peGluLmh0bWwjbWV0aG9kX3NlcmlhbGl6
ZUJlbG9uZ3NUbykKLSAgICAgICogW3NlcmlhbGl6ZUhhc01hbnldKC9hcGkvZGF0YS9jbGFzc2Vz
L0RTLkVtYmVkZGVkUmVjb3Jkc01peGluLmh0bWwjbWV0aG9kX3NlcmlhbGl6ZUhhc01hbnkpCi0K
LSAgICAgIEBjbGFzcyBFbWJlZGRlZFJlY29yZHNNaXhpbgotICAgICAgQG5hbWVzcGFjZSBEUwot
ICAgICovCi0gICAgdmFyIEVtYmVkZGVkUmVjb3Jkc01peGluID0gRW1iZXIuTWl4aW4uY3JlYXRl
KHsKLQotICAgICAgLyoqCi0gICAgICAgIFNlcmlhbGl6ZSBgYmVsb25nc1RvYCByZWxhdGlvbnNo
aXAgd2hlbiBpdCBpcyBjb25maWd1cmVkIGFzIGFuIGVtYmVkZGVkIG9iamVjdC4KLQotICAgICAg
ICBUaGlzIGV4YW1wbGUgb2YgYW4gYXV0aG9yIG1vZGVsIGJlbG9uZ3MgdG8gYSBwb3N0IG1vZGVs
OgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIFBvc3QgPSBEUy5Nb2RlbC5leHRlbmQoewotICAg
ICAgICAgIHRpdGxlOiAgICBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBib2R5OiAgICAg
RFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgYXV0aG9yOiAgIERTLmJlbG9uZ3NUbygnYXV0
aG9yJykKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQXV0aG9yID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICAgICAgICBuYW1lOiAgICAgRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgcG9zdDog
ICAgIERTLmJlbG9uZ3NUbygncG9zdCcpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAg
ICAgICBVc2UgYSBjdXN0b20gKHR5cGUpIHNlcmlhbGl6ZXIgZm9yIHRoZSBwb3N0IG1vZGVsIHRv
IGNvbmZpZ3VyZSBlbWJlZGRlZCBhdXRob3IKLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAu
UG9zdFNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQoRFMuRW1iZWRkZWRSZWNv
cmRzTWl4aW4sIHsKLSAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAgYXV0aG9yOiB7ZW1i
ZWRkZWQ6ICdhbHdheXMnfQotICAgICAgICAgIH0KLSAgICAgICAgfSkKLSAgICAgICAgYGBgCi0K
LSAgICAgICAgQSBwYXlsb2FkIHdpdGggYW4gYXR0cmlidXRlIGNvbmZpZ3VyZWQgZm9yIGVtYmVk
ZGVkIHJlY29yZHMgY2FuIHNlcmlhbGl6ZQotICAgICAgICB0aGUgcmVjb3JkcyB0b2dldGhlciB1
bmRlciB0aGUgcm9vdCBhdHRyaWJ1dGUncyBwYXlsb2FkOgotCi0gICAgICAgIGBgYGpzCi0gICAg
ICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6ICIxIgotICAgICAg
ICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImF1dGhvciI6
IHsKLSAgICAgICAgICAgICAgImlkIjogIjIiCi0gICAgICAgICAgICAgICJuYW1lIjogImRoaCIK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgQG1ldGhvZCBzZXJpYWxpemVCZWxvbmdzVG8KLSAgICAgICAgQHBhcmFtIHtEUy5Nb2Rl
bH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29uCi0gICAgICAgIEBwYXJhbSB7
T2JqZWN0fSByZWxhdGlvbnNoaXAKLSAgICAgICovCi0gICAgICBzZXJpYWxpemVCZWxvbmdzVG86
IGZ1bmN0aW9uKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIHZhciBhdHRy
ID0gcmVsYXRpb25zaGlwLmtleTsKLSAgICAgICAgdmFyIGF0dHJzID0gdGhpcy5nZXQoJ2F0dHJz
Jyk7Ci0gICAgICAgIGlmIChub1NlcmlhbGl6ZU9wdGlvblNwZWNpZmllZChhdHRycywgYXR0cikp
IHsKLSAgICAgICAgICB0aGlzLl9zdXBlcihyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCk7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhciBpbmNsdWRlSWRzID0gaGFz
U2VyaWFsaXplSWRzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgICAgdmFyIGluY2x1ZGVSZWNv
cmRzID0gaGFzU2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywgYXR0cik7Ci0gICAgICAgIHZh
ciBlbWJlZGRlZFJlY29yZCA9IHJlY29yZC5nZXQoYXR0cik7Ci0gICAgICAgIGlmIChpbmNsdWRl
SWRzKSB7Ci0gICAgICAgICAga2V5ID0gdGhpcy5rZXlGb3JSZWxhdGlvbnNoaXAoYXR0ciwgcmVs
YXRpb25zaGlwLmtpbmQpOwotICAgICAgICAgIGlmICghZW1iZWRkZWRSZWNvcmQpIHsKLSAgICAg
ICAgICAgIGpzb25ba2V5XSA9IG51bGw7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGpzb25ba2V5XSA9IGdldChlbWJlZGRlZFJlY29yZCwgJ2lkJyk7Ci0gICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKGluY2x1ZGVSZWNvcmRzKSB7Ci0gICAgICAgICAgdmFyIGtleSA9IHRo
aXMua2V5Rm9yUmVsYXRpb25zaGlwKGF0dHIpOwotICAgICAgICAgIGlmICghZW1iZWRkZWRSZWNv
cmQpIHsKLSAgICAgICAgICAgIGpzb25ba2V5XSA9IG51bGw7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGpzb25ba2V5XSA9IGVtYmVkZGVkUmVjb3JkLnNlcmlhbGl6ZSh7aW5jbHVk
ZUlkOiB0cnVlfSk7Ci0gICAgICAgICAgICB0aGlzLnJlbW92ZUVtYmVkZGVkRm9yZWlnbktleShy
ZWNvcmQsIGVtYmVkZGVkUmVjb3JkLCByZWxhdGlvbnNoaXAsIGpzb25ba2V5XSk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgU2VyaWFsaXpl
IGBoYXNNYW55YCByZWxhdGlvbnNoaXAgd2hlbiBpdCBpcyBjb25maWd1cmVkIGFzIGVtYmVkZGVk
IG9iamVjdHMuCi0KLSAgICAgICAgVGhpcyBleGFtcGxlIG9mIGEgcG9zdCBtb2RlbCBoYXMgbWFu
eSBjb21tZW50czoKLQotICAgICAgICBgYGBqcwotICAgICAgICBQb3N0ID0gRFMuTW9kZWwuZXh0
ZW5kKHsKLSAgICAgICAgICB0aXRsZTogICAgRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAg
Ym9keTogICAgIERTLmF0dHIoJ3N0cmluZycpLAotICAgICAgICAgIGNvbW1lbnRzOiBEUy5oYXNN
YW55KCdjb21tZW50JykKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQ29tbWVudCA9IERTLk1vZGVs
LmV4dGVuZCh7Ci0gICAgICAgICAgYm9keTogICAgIERTLmF0dHIoJ3N0cmluZycpLAotICAgICAg
ICAgIHBvc3Q6ICAgICBEUy5iZWxvbmdzVG8oJ3Bvc3QnKQotICAgICAgICB9KTsKLSAgICAgICAg
YGBgCi0KLSAgICAgICAgVXNlIGEgY3VzdG9tICh0eXBlKSBzZXJpYWxpemVyIGZvciB0aGUgcG9z
dCBtb2RlbCB0byBjb25maWd1cmUgZW1iZWRkZWQgY29tbWVudHMKLQotICAgICAgICBgYGBqcwot
ICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQoRFMu
RW1iZWRkZWRSZWNvcmRzTWl4aW4sIHsKLSAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAg
Y29tbWVudHM6IHtlbWJlZGRlZDogJ2Fsd2F5cyd9Ci0gICAgICAgICAgfQotICAgICAgICB9KQot
ICAgICAgICBgYGAKLQotICAgICAgICBBIHBheWxvYWQgd2l0aCBhbiBhdHRyaWJ1dGUgY29uZmln
dXJlZCBmb3IgZW1iZWRkZWQgcmVjb3JkcyBjYW4gc2VyaWFsaXplCi0gICAgICAgIHRoZSByZWNv
cmRzIHRvZ2V0aGVyIHVuZGVyIHRoZSByb290IGF0dHJpYnV0ZSdzIHBheWxvYWQ6Ci0KLSAgICAg
ICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJwb3N0IjogewotICAgICAgICAgICAgImlk
IjogIjEiCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAg
ICAgICAiYm9keSI6ICJJIHdhbnQgdGhpcyBmb3IgbXkgT1JNLCBJIHdhbnQgdGhhdCBmb3IgbXkg
dGVtcGxhdGUgbGFuZ3VhZ2UuLi4iCi0gICAgICAgICAgICAiY29tbWVudHMiOiBbewotICAgICAg
ICAgICAgICAiaWQiOiAiMSIsCi0gICAgICAgICAgICAgICJib2R5IjogIlJhaWxzIGlzIHVuYWdp
IgotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAiaWQiOiAiMiIsCi0gICAgICAgICAg
ICAgICJib2R5IjogIk9tYWthc2UgT19vIgotICAgICAgICAgICAgfV0KLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgVGhlIGF0dHJzIG9wdGlvbnMgb2JqZWN0
IGNhbiB1c2UgbW9yZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBmb3IgZXh0cmFjdGluZyBhbmQKLSAg
ICAgICAgc2VyaWFsaXppbmcuIFdoZW4gc2VyaWFsaXppbmcsIGFuIG9wdGlvbiB0byBlbWJlZCBg
aWRzYCBvciBgcmVjb3Jkc2AgY2FuIGJlIHNldC4KLSAgICAgICAgV2hlbiBleHRyYWN0aW5nIHRo
ZSBvbmx5IG9wdGlvbiBpcyBgcmVjb3Jkc2AuCi0KLSAgICAgICAgU28gYHtlbWJlZGRlZDogJ2Fs
d2F5cyd9YCBpcyBzaG9ydGhhbmQgZm9yOgotICAgICAgICBge3NlcmlhbGl6ZTogJ3JlY29yZHMn
LCBkZXNlcmlhbGl6ZTogJ3JlY29yZHMnfWAKLQotICAgICAgICBUbyBlbWJlZCB0aGUgYGlkc2Ag
Zm9yIGEgcmVsYXRlZCBvYmplY3QgKHVzaW5nIGEgaGFzTWFueSByZWxhdGlvbnNoaXApOgotCi0g
ICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxp
emVyLmV4dGVuZChEUy5FbWJlZGRlZFJlY29yZHNNaXhpbiwgewotICAgICAgICAgIGF0dHJzOiB7
Ci0gICAgICAgICAgICBjb21tZW50czoge3NlcmlhbGl6ZTogJ2lkcycsIGRlc2VyaWFsaXplOiAn
cmVjb3Jkcyd9Ci0gICAgICAgICAgfQotICAgICAgICB9KQotICAgICAgICBgYGAKLQotICAgICAg
ICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInBvc3QiOiB7Ci0gICAgICAgICAgICAiaWQi
OiAiMSIKLSAgICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAg
ICAgICJib2R5IjogIkkgd2FudCB0aGlzIGZvciBteSBPUk0sIEkgd2FudCB0aGF0IGZvciBteSB0
ZW1wbGF0ZSBsYW5ndWFnZS4uLiIKLSAgICAgICAgICAgICJjb21tZW50cyI6IFsiMSIsICIyIl0K
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBz
ZXJpYWxpemVIYXNNYW55Ci0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAg
ICBAcGFyYW0ge09iamVjdH0ganNvbgotICAgICAgICBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25z
aGlwCi0gICAgICAqLwotICAgICAgc2VyaWFsaXplSGFzTWFueTogZnVuY3Rpb24ocmVjb3JkLCBq
c29uLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgdmFyIGF0dHIgPSByZWxhdGlvbnNoaXAua2V5
OwotICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLmdldCgnYXR0cnMnKTsKLSAgICAgICAgaWYgKG5v
U2VyaWFsaXplT3B0aW9uU3BlY2lmaWVkKGF0dHJzLCBhdHRyKSkgewotICAgICAgICAgIHRoaXMu
X3N1cGVyKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgdmFyIGluY2x1ZGVJZHMgPSBoYXNTZXJpYWxpemVJZHNPcHRpb24o
YXR0cnMsIGF0dHIpOwotICAgICAgICB2YXIgaW5jbHVkZVJlY29yZHMgPSBoYXNTZXJpYWxpemVS
ZWNvcmRzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgICAgdmFyIGtleTsKLSAgICAgICAgaWYg
KGluY2x1ZGVJZHMpIHsKLSAgICAgICAgICBrZXkgPSB0aGlzLmtleUZvclJlbGF0aW9uc2hpcChh
dHRyLCByZWxhdGlvbnNoaXAua2luZCk7Ci0gICAgICAgICAganNvbltrZXldID0gZ2V0KHJlY29y
ZCwgYXR0cikubWFwQnkoJ2lkJyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVJlY29yZHMp
IHsKLSAgICAgICAgICBrZXkgPSB0aGlzLmtleUZvckF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAg
ICBqc29uW2tleV0gPSBnZXQocmVjb3JkLCBhdHRyKS5tYXAoZnVuY3Rpb24oZW1iZWRkZWRSZWNv
cmQpIHsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkRW1iZWRkZWRSZWNvcmQgPSBlbWJlZGRl
ZFJlY29yZC5zZXJpYWxpemUoe2luY2x1ZGVJZDogdHJ1ZX0pOwotICAgICAgICAgICAgdGhpcy5y
ZW1vdmVFbWJlZGRlZEZvcmVpZ25LZXkocmVjb3JkLCBlbWJlZGRlZFJlY29yZCwgcmVsYXRpb25z
aGlwLCBzZXJpYWxpemVkRW1iZWRkZWRSZWNvcmQpOwotICAgICAgICAgICAgcmV0dXJuIHNlcmlh
bGl6ZWRFbWJlZGRlZFJlY29yZDsKLSAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgfQotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFdoZW4gc2VyaWFsaXppbmcgYW4gZW1iZWRkZWQg
cmVjb3JkLCBtb2RpZnkgdGhlIHByb3BlcnR5IChpbiB0aGUganNvbiBwYXlsb2FkKQotICAgICAg
ICB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50IHJlY29yZCAoZm9yZWlnbiBrZXkgZm9yIHJlbGF0
aW9uc2hpcCkuCi0KLSAgICAgICAgU2VyaWFsaXppbmcgYSBgYmVsb25nc1RvYCByZWxhdGlvbnNo
aXAgcmVtb3ZlcyB0aGUgcHJvcGVydHkgdGhhdCByZWZlcnMgdG8gdGhlCi0gICAgICAgIHBhcmVu
dCByZWNvcmQKLQotICAgICAgICBTZXJpYWxpemluZyBhIGBoYXNNYW55YCByZWxhdGlvbnNoaXAg
ZG9lcyBub3QgcmVtb3ZlIHRoZSBwcm9wZXJ0eSB0aGF0IHJlZmVycyB0bwotICAgICAgICB0aGUg
cGFyZW50IHJlY29yZC4KLQotICAgICAgICBAbWV0aG9kIHJlbW92ZUVtYmVkZGVkRm9yZWlnbktl
eQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5N
b2RlbH0gZW1iZWRkZWRSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9uc2hp
cAotICAgICAgICBAcGFyYW0ge09iamVjdH0ganNvbgotICAgICAgKi8KLSAgICAgIHJlbW92ZUVt
YmVkZGVkRm9yZWlnbktleTogZnVuY3Rpb24gKHJlY29yZCwgZW1iZWRkZWRSZWNvcmQsIHJlbGF0
aW9uc2hpcCwganNvbikgewotICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQgPT09ICdoYXNN
YW55JykgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbnNo
aXAua2luZCA9PT0gJ2JlbG9uZ3NUbycpIHsKLSAgICAgICAgICB2YXIgcGFyZW50UmVjb3JkID0g
cmVjb3JkLmNvbnN0cnVjdG9yLmludmVyc2VGb3IocmVsYXRpb25zaGlwLmtleSk7Ci0gICAgICAg
ICAgaWYgKHBhcmVudFJlY29yZCkgewotICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXJlbnRSZWNv
cmQubmFtZTsKLSAgICAgICAgICAgIHZhciBlbWJlZGRlZFNlcmlhbGl6ZXIgPSB0aGlzLnN0b3Jl
LnNlcmlhbGl6ZXJGb3IoZW1iZWRkZWRSZWNvcmQuY29uc3RydWN0b3IpOwotICAgICAgICAgICAg
dmFyIHBhcmVudEtleSA9IGVtYmVkZGVkU2VyaWFsaXplci5rZXlGb3JSZWxhdGlvbnNoaXAobmFt
ZSwgcGFyZW50UmVjb3JkLmtpbmQpOwotICAgICAgICAgICAgaWYgKHBhcmVudEtleSkgewotICAg
ICAgICAgICAgICBkZWxldGUganNvbltwYXJlbnRLZXldOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEV4dHJhY3Qg
YW4gZW1iZWRkZWQgb2JqZWN0IGZyb20gdGhlIHBheWxvYWQgZm9yIGEgc2luZ2xlIG9iamVjdAot
ICAgICAgICBhbmQgYWRkIHRoZSBvYmplY3QgaW4gdGhlIGNvbXBvdW5kIGRvY3VtZW50IChzaWRl
LWxvYWRlZCkgZm9ybWF0IGluc3RlYWQuCi0KLSAgICAgICAgQSBwYXlsb2FkIHdpdGggYW4gYXR0
cmlidXRlIGNvbmZpZ3VyZWQgZm9yIGVtYmVkZGVkIHJlY29yZHMgbmVlZHMgdG8gYmUgZXh0cmFj
dGVkOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAg
ICAgICAgICAgICJpZCI6IDEKLSAgICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNl
IiwKLSAgICAgICAgICAgICJhdXRob3IiOiB7Ci0gICAgICAgICAgICAgICJpZCI6IDIKLSAgICAg
ICAgICAgICAgIm5hbWUiOiAiZGhoIgotICAgICAgICAgICAgfQotICAgICAgICAgICAgImNvbW1l
bnRzIjogW10KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAg
RW1iZXIgRGF0YSBpcyBleHBlY3RpbmcgYSBwYXlsb2FkIHdpdGggYSBjb21wb3VuZCBkb2N1bWVu
dCAoc2lkZS1sb2FkZWQpIGxpa2U6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAg
ICAgICJwb3N0IjogewotICAgICAgICAgICAgImlkIjogIjEiCi0gICAgICAgICAgICAidGl0bGUi
OiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAgICAgICAiYXV0aG9yIjogIjIiCi0gICAgICAg
ICAgICAiY29tbWVudHMiOiBbXQotICAgICAgICAgIH0sCi0gICAgICAgICAgImF1dGhvcnMiOiBb
ewotICAgICAgICAgICAgImlkIjogIjIiCi0gICAgICAgICAgICAicG9zdCI6ICIxIgotICAgICAg
ICAgICAgIm5hbWUiOiAiZGhoIgotICAgICAgICAgIH1dCi0gICAgICAgICAgImNvbW1lbnRzIjog
W10KLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBUaGUgcGF5bG9hZCdzIGBhdXRo
b3JgIGF0dHJpYnV0ZSByZXByZXNlbnRzIGFuIG9iamVjdCB3aXRoIGEgYGJlbG9uZ3NUb2AgcmVs
YXRpb25zaGlwLgotICAgICAgICBUaGUgYHBvc3RgIGF0dHJpYnV0ZSB1bmRlciBgYXV0aG9yYCBp
cyB0aGUgZm9yZWlnbiBrZXkgd2l0aCB0aGUgaWQgZm9yIHRoZSBwb3N0Ci0KLSAgICAgICAgQG1l
dGhvZCBleHRyYWN0U2luZ2xlCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAg
ICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHByaW1hcnlUeXBlCi0gICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSByZWNvcmRJZAot
ICAgICAgICBAcmV0dXJuIE9iamVjdCB0aGUgcHJpbWFyeSByZXNwb25zZSB0byB0aGUgb3JpZ2lu
YWwgcmVxdWVzdAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RTaW5nbGU6IGZ1bmN0aW9uKHN0b3Jl
LCBwcmltYXJ5VHlwZSwgcGF5bG9hZCwgcmVjb3JkSWQpIHsKLSAgICAgICAgdmFyIHJvb3QgPSB0
aGlzLmtleUZvckF0dHJpYnV0ZShwcmltYXJ5VHlwZS50eXBlS2V5KSwKLSAgICAgICAgICAgIHBh
cnRpYWwgPSBwYXlsb2FkW3Jvb3RdOwotCi0gICAgICAgIHVwZGF0ZVBheWxvYWRXaXRoRW1iZWRk
ZWQodGhpcywgc3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2FkLCBwYXJ0aWFsKTsKLQotICAgICAg
ICByZXR1cm4gdGhpcy5fc3VwZXIoc3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2FkLCByZWNvcmRJ
ZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgRXh0cmFjdCBlbWJlZGRlZCBvYmpl
Y3RzIGluIGFuIGFycmF5IHdoZW4gYW4gYXR0ciBpcyBjb25maWd1cmVkIGZvciBlbWJlZGRlZCwK
LSAgICAgICAgYW5kIGFkZCB0aGVtIGFzIHNpZGUtbG9hZGVkIG9iamVjdHMgaW5zdGVhZC4KLQot
ICAgICAgICBBIHBheWxvYWQgd2l0aCBhbiBhdHRyIGNvbmZpZ3VyZWQgZm9yIGVtYmVkZGVkIHJl
Y29yZHMgbmVlZHMgdG8gYmUgZXh0cmFjdGVkOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsK
LSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6ICIxIgotICAgICAgICAgICAg
InRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImNvbW1lbnRzIjogW3sK
LSAgICAgICAgICAgICAgImlkIjogIjEiLAotICAgICAgICAgICAgICAiYm9keSI6ICJSYWlscyBp
cyB1bmFnaSIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgImlkIjogIjIiLAotICAg
ICAgICAgICAgICAiYm9keSI6ICJPbWFrYXNlIE9fbyIKLSAgICAgICAgICAgIH1dCi0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEVtYmVyIERhdGEgaXMgZXhw
ZWN0aW5nIGEgcGF5bG9hZCB3aXRoIGNvbXBvdW5kIGRvY3VtZW50IChzaWRlLWxvYWRlZCkgbGlr
ZToKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInBvc3QiOiB7Ci0gICAg
ICAgICAgICAiaWQiOiAiMSIKLSAgICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNl
IiwKLSAgICAgICAgICAgICJjb21tZW50cyI6IFsiMSIsICIyIl0KLSAgICAgICAgICB9LAotICAg
ICAgICAgICJjb21tZW50cyI6IFt7Ci0gICAgICAgICAgICAiaWQiOiAiMSIsCi0gICAgICAgICAg
ICAiYm9keSI6ICJSYWlscyBpcyB1bmFnaSIKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAi
aWQiOiAiMiIsCi0gICAgICAgICAgICAiYm9keSI6ICJPbWFrYXNlIE9fbyIKLSAgICAgICAgICB9
XQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBwYXlsb2FkJ3MgYGNvbW1l
bnRzYCBhdHRyaWJ1dGUgcmVwcmVzZW50cyByZWNvcmRzIGluIGEgYGhhc01hbnlgIHJlbGF0aW9u
c2hpcAotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdEFycmF5Ci0gICAgICAgIEBwYXJhbSB7RFMu
U3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHByaW1h
cnlUeXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4g
e0FycmF5PE9iamVjdD59IFRoZSBwcmltYXJ5IGFycmF5IHRoYXQgd2FzIHJldHVybmVkIGluIHJl
c3BvbnNlCi0gICAgICAgICAgdG8gdGhlIG9yaWdpbmFsIHF1ZXJ5LgotICAgICAgKi8KLSAgICAg
IGV4dHJhY3RBcnJheTogZnVuY3Rpb24oc3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2FkKSB7Ci0g
ICAgICAgIHZhciByb290ID0gdGhpcy5rZXlGb3JBdHRyaWJ1dGUocHJpbWFyeVR5cGUudHlwZUtl
eSksCi0gICAgICAgICAgICBwYXJ0aWFscyA9IHBheWxvYWRbcGx1cmFsaXplKHJvb3QpXTsKLQot
ICAgICAgICBmb3JFYWNoKHBhcnRpYWxzLCBmdW5jdGlvbihwYXJ0aWFsKSB7Ci0gICAgICAgICAg
dXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRlZCh0aGlzLCBzdG9yZSwgcHJpbWFyeVR5cGUsIHBheWxv
YWQsIHBhcnRpYWwpOwotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5f
c3VwZXIoc3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2FkKTsKLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIC8vIGNoZWNrcyBjb25maWcgZm9yIGF0dHJzIG9wdGlvbiB0byBlbWJlZGRlZCAoYWx3YXlz
KSAtIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUKLSAgICBmdW5jdGlvbiBoYXNFbWJlZGRlZEFs
d2F5c09wdGlvbihhdHRycywgYXR0cikgewotICAgICAgdmFyIG9wdGlvbiA9IGF0dHJzT3B0aW9u
KGF0dHJzLCBhdHRyKTsKLSAgICAgIHJldHVybiBvcHRpb24gJiYgb3B0aW9uLmVtYmVkZGVkID09
PSAnYWx3YXlzJzsKLSAgICB9Ci0KLSAgICAvLyBjaGVja3MgY29uZmlnIGZvciBhdHRycyBvcHRp
b24gdG8gc2VyaWFsaXplIGlkcwotICAgIGZ1bmN0aW9uIGhhc1NlcmlhbGl6ZVJlY29yZHNPcHRp
b24oYXR0cnMsIGF0dHIpIHsKLSAgICAgIHZhciBhbHdheXNFbWJlZCA9IGhhc0VtYmVkZGVkQWx3
YXlzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgIHZhciBvcHRpb24gPSBhdHRyc09wdGlvbihh
dHRycywgYXR0cik7Ci0gICAgICByZXR1cm4gYWx3YXlzRW1iZWQgfHwgKG9wdGlvbiAmJiAob3B0
aW9uLnNlcmlhbGl6ZSA9PT0gJ3JlY29yZHMnKSk7Ci0gICAgfQotCi0gICAgLy8gY2hlY2tzIGNv
bmZpZyBmb3IgYXR0cnMgb3B0aW9uIHRvIHNlcmlhbGl6ZSByZWNvcmRzCi0gICAgZnVuY3Rpb24g
aGFzU2VyaWFsaXplSWRzT3B0aW9uKGF0dHJzLCBhdHRyKSB7Ci0gICAgICB2YXIgb3B0aW9uID0g
YXR0cnNPcHRpb24oYXR0cnMsIGF0dHIpOwotICAgICAgcmV0dXJuIG9wdGlvbiAmJiAob3B0aW9u
LnNlcmlhbGl6ZSA9PT0gJ2lkcycgfHwgb3B0aW9uLnNlcmlhbGl6ZSA9PT0gJ2lkJyk7Ci0gICAg
fQotCi0gICAgLy8gY2hlY2tzIGNvbmZpZyBmb3IgYXR0cnMgb3B0aW9uIHRvIHNlcmlhbGl6ZSBy
ZWNvcmRzCi0gICAgZnVuY3Rpb24gbm9TZXJpYWxpemVPcHRpb25TcGVjaWZpZWQoYXR0cnMsIGF0
dHIpIHsKLSAgICAgIHZhciBvcHRpb24gPSBhdHRyc09wdGlvbihhdHRycywgYXR0cik7Ci0gICAg
ICB2YXIgc2VyaWFsaXplUmVjb3JkcyA9IGhhc1NlcmlhbGl6ZVJlY29yZHNPcHRpb24oYXR0cnMs
IGF0dHIpOwotICAgICAgdmFyIHNlcmlhbGl6ZUlkcyA9IGhhc1NlcmlhbGl6ZUlkc09wdGlvbihh
dHRycywgYXR0cik7Ci0gICAgICByZXR1cm4gIShvcHRpb24gJiYgKG9wdGlvbi5zZXJpYWxpemUg
fHwgb3B0aW9uLmVtYmVkZGVkKSk7Ci0gICAgfQotCi0gICAgLy8gY2hlY2tzIGNvbmZpZyBmb3Ig
YXR0cnMgb3B0aW9uIHRvIGRlc2VyaWFsaXplIHJlY29yZHMKLSAgICAvLyBhIGRlZmluZWQgb3B0
aW9uIG9iamVjdCBmb3IgYSByZXNvdXJjZSBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzCi0gICAgLy8g
YGRlc2VyaWFsaXplOiAncmVjb3JkcydgCi0gICAgZnVuY3Rpb24gaGFzRGVzZXJpYWxpemVSZWNv
cmRzT3B0aW9uKGF0dHJzLCBhdHRyKSB7Ci0gICAgICB2YXIgYWx3YXlzRW1iZWQgPSBoYXNFbWJl
ZGRlZEFsd2F5c09wdGlvbihhdHRycywgYXR0cik7Ci0gICAgICB2YXIgb3B0aW9uID0gYXR0cnNP
cHRpb24oYXR0cnMsIGF0dHIpOwotICAgICAgdmFyIGhhc1NlcmlhbGl6aW5nT3B0aW9uID0gb3B0
aW9uICYmIChvcHRpb24uZGVzZXJpYWxpemUgfHwgb3B0aW9uLnNlcmlhbGl6ZSk7Ci0gICAgICBy
ZXR1cm4gYWx3YXlzRW1iZWQgfHwgaGFzU2VyaWFsaXppbmdPcHRpb24gLyogb3B0aW9uLmRlc2Vy
aWFsaXplID09PSAncmVjb3JkcycgKi87Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYXR0cnNPcHRp
b24oYXR0cnMsIGF0dHIpIHsKLSAgICAgIHJldHVybiBhdHRycyAmJiAoYXR0cnNbRW1iZXIuU3Ry
aW5nLmNhbWVsaXplKGF0dHIpXSB8fCBhdHRyc1thdHRyXSk7Ci0gICAgfQotCi0gICAgLy8gY2hv
b3NlcyBhIHJlbGF0aW9uc2hpcCBraW5kIHRvIGJyYW5jaCB3aGljaCBmdW5jdGlvbiBpcyB1c2Vk
IHRvIHVwZGF0ZSBwYXlsb2FkCi0gICAgLy8gZG9lcyBub3QgY2hhbmdlIHBheWxvYWQgaWYgYXR0
ciBpcyBub3QgZW1iZWRkZWQKLSAgICBmdW5jdGlvbiB1cGRhdGVQYXlsb2FkV2l0aEVtYmVkZGVk
KHNlcmlhbGl6ZXIsIHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBwYXJ0aWFsKSB7Ci0gICAgICB2YXIg
YXR0cnMgPSBnZXQoc2VyaWFsaXplciwgJ2F0dHJzJyk7Ci0KLSAgICAgIGlmICghYXR0cnMpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgdHlwZS5lYWNoUmVsYXRpb25zaGlwKGZ1
bmN0aW9uKGtleSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIGlmIChoYXNEZXNlcmlhbGl6ZVJl
Y29yZHNPcHRpb24oYXR0cnMsIGtleSkpIHsKLSAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtp
bmQgPT09ICJoYXNNYW55IikgewotICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRl
ZEhhc01hbnkoc2VyaWFsaXplciwgc3RvcmUsIGtleSwgcmVsYXRpb25zaGlwLCBwYXlsb2FkLCBw
YXJ0aWFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5raW5kID09
PSAiYmVsb25nc1RvIikgewotICAgICAgICAgICAgdXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRlZEJl
bG9uZ3NUbyhzZXJpYWxpemVyLCBzdG9yZSwga2V5LCByZWxhdGlvbnNoaXAsIHBheWxvYWQsIHBh
cnRpYWwpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAg
Ly8gaGFuZGxlcyBlbWJlZGRpbmcgZm9yIGBoYXNNYW55YCByZWxhdGlvbnNoaXAKLSAgICBmdW5j
dGlvbiB1cGRhdGVQYXlsb2FkV2l0aEVtYmVkZGVkSGFzTWFueShzZXJpYWxpemVyLCBzdG9yZSwg
cHJpbWFyeVR5cGUsIHJlbGF0aW9uc2hpcCwgcGF5bG9hZCwgcGFydGlhbCkgewotICAgICAgdmFy
IGVtYmVkZGVkU2VyaWFsaXplciA9IHN0b3JlLnNlcmlhbGl6ZXJGb3IocmVsYXRpb25zaGlwLnR5
cGUudHlwZUtleSk7Ci0gICAgICB2YXIgcHJpbWFyeUtleSA9IGdldChzZXJpYWxpemVyLCAncHJp
bWFyeUtleScpOwotICAgICAgdmFyIGF0dHIgPSByZWxhdGlvbnNoaXAudHlwZS50eXBlS2V5Owot
ICAgICAgLy8gdW5kZXJzY29yZSBmb3JjZXMgdGhlIGVtYmVkZGVkIHJlY29yZHMgdG8gYmUgc2lk
ZSBsb2FkZWQuCi0gICAgICAvLyBpdCBpcyBuZWVkZWQgd2hlbiBtYWluIHR5cGUgPT09IHJlbGF0
aW9uc2hpcC50eXBlCi0gICAgICB2YXIgZW1iZWRkZWRUeXBlS2V5ID0gJ18nICsgc2VyaWFsaXpl
ci50eXBlRm9yUm9vdChyZWxhdGlvbnNoaXAudHlwZS50eXBlS2V5KTsKLSAgICAgIHZhciBleHBh
bmRlZEtleSA9IHNlcmlhbGl6ZXIua2V5Rm9yUmVsYXRpb25zaGlwKHByaW1hcnlUeXBlLCByZWxh
dGlvbnNoaXAua2luZCk7Ci0gICAgICB2YXIgYXR0cmlidXRlICA9IHNlcmlhbGl6ZXIua2V5Rm9y
QXR0cmlidXRlKHByaW1hcnlUeXBlKTsKLSAgICAgIHZhciBpZHMgPSBbXTsKLQotICAgICAgaWYg
KCFwYXJ0aWFsW2F0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg
ICBwYXlsb2FkW2VtYmVkZGVkVHlwZUtleV0gPSBwYXlsb2FkW2VtYmVkZGVkVHlwZUtleV0gfHwg
W107Ci0KLSAgICAgIGZvckVhY2gocGFydGlhbFthdHRyaWJ1dGVdLCBmdW5jdGlvbihkYXRhKSB7
Ci0gICAgICAgIHZhciBlbWJlZGRlZFR5cGUgPSBzdG9yZS5tb2RlbEZvcihhdHRyKTsKLSAgICAg
ICAgdXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRlZChlbWJlZGRlZFNlcmlhbGl6ZXIsIHN0b3JlLCBl
bWJlZGRlZFR5cGUsIHBheWxvYWQsIGRhdGEpOwotICAgICAgICBpZHMucHVzaChkYXRhW3ByaW1h
cnlLZXldKTsKLSAgICAgICAgcGF5bG9hZFtlbWJlZGRlZFR5cGVLZXldLnB1c2goZGF0YSk7Ci0g
ICAgICB9KTsKLQotICAgICAgcGFydGlhbFtleHBhbmRlZEtleV0gPSBpZHM7Ci0gICAgICBkZWxl
dGUgcGFydGlhbFthdHRyaWJ1dGVdOwotICAgIH0KLQotICAgIC8vIGhhbmRsZXMgZW1iZWRkaW5n
IGZvciBgYmVsb25nc1RvYCByZWxhdGlvbnNoaXAKLSAgICBmdW5jdGlvbiB1cGRhdGVQYXlsb2Fk
V2l0aEVtYmVkZGVkQmVsb25nc1RvKHNlcmlhbGl6ZXIsIHN0b3JlLCBwcmltYXJ5VHlwZSwgcmVs
YXRpb25zaGlwLCBwYXlsb2FkLCBwYXJ0aWFsKSB7Ci0gICAgICB2YXIgYXR0cnMgPSBzZXJpYWxp
emVyLmdldCgnYXR0cnMnKTsKLQotICAgICAgaWYgKCFhdHRycyB8fAotICAgICAgICAhKGhhc0Rl
c2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywgRW1iZXIuU3RyaW5nLmNhbWVsaXplKHByaW1h
cnlUeXBlKSkgfHwKLSAgICAgICAgICBoYXNEZXNlcmlhbGl6ZVJlY29yZHNPcHRpb24oYXR0cnMs
IHByaW1hcnlUeXBlKSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgdmFyIGF0
dHIgPSByZWxhdGlvbnNoaXAudHlwZS50eXBlS2V5OwotICAgICAgdmFyIF9zZXJpYWxpemVyID0g
c3RvcmUuc2VyaWFsaXplckZvcihyZWxhdGlvbnNoaXAudHlwZS50eXBlS2V5KTsKLSAgICAgIHZh
ciBwcmltYXJ5S2V5ID0gZ2V0KF9zZXJpYWxpemVyLCAncHJpbWFyeUtleScpOwotICAgICAgdmFy
IGVtYmVkZGVkVHlwZUtleSA9IEVtYmVyLlN0cmluZy5wbHVyYWxpemUoYXR0cik7IC8vIFRPRE8g
ZG9uJ3QgdXNlIHBsdXJhbGl6ZQotICAgICAgdmFyIGV4cGFuZGVkS2V5ID0gX3NlcmlhbGl6ZXIu
a2V5Rm9yUmVsYXRpb25zaGlwKHByaW1hcnlUeXBlLCByZWxhdGlvbnNoaXAua2luZCk7Ci0gICAg
ICB2YXIgYXR0cmlidXRlID0gX3NlcmlhbGl6ZXIua2V5Rm9yQXR0cmlidXRlKHByaW1hcnlUeXBl
KTsKLQotICAgICAgaWYgKCFwYXJ0aWFsW2F0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgfQotICAgICAgcGF5bG9hZFtlbWJlZGRlZFR5cGVLZXldID0gcGF5bG9hZFtlbWJlZGRl
ZFR5cGVLZXldIHx8IFtdOwotICAgICAgdmFyIGVtYmVkZGVkVHlwZSA9IHN0b3JlLm1vZGVsRm9y
KHJlbGF0aW9uc2hpcC50eXBlLnR5cGVLZXkpOwotICAgICAgLy8gUmVjdXJzaXZlIGNhbGwgZm9y
IG5lc3RlZCByZWNvcmQKLSAgICAgIHVwZGF0ZVBheWxvYWRXaXRoRW1iZWRkZWQoX3NlcmlhbGl6
ZXIsIHN0b3JlLCBlbWJlZGRlZFR5cGUsIHBheWxvYWQsIHBhcnRpYWxbYXR0cmlidXRlXSk7Ci0g
ICAgICBwYXJ0aWFsW2V4cGFuZGVkS2V5XSA9IHBhcnRpYWxbYXR0cmlidXRlXS5pZDsKLSAgICAg
IC8vIE5lZWQgdG8gbW92ZSBhbiBlbWJlZGRlZCBgYmVsb25nc1RvYCBvYmplY3QgaW50byBhIHBs
dXJhbGl6ZWQgY29sbGVjdGlvbgotICAgICAgcGF5bG9hZFtlbWJlZGRlZFR5cGVLZXldLnB1c2go
cGFydGlhbFthdHRyaWJ1dGVdKTsKLSAgICAgIC8vIE5lZWQgYSByZWZlcmVuY2UgdG8gdGhlIHBh
cmVudCBzbyByZWxhdGlvbnNoaXAgd29ya3MgYmV0d2VlbiBib3RoIGBiZWxvbmdzVG9gIHJlY29y
ZHMKLSAgICAgIHBhcnRpYWxbYXR0cmlidXRlXVtyZWxhdGlvbnNoaXAucGFyZW50VHlwZS50eXBl
S2V5ICsgJ19pZCddID0gcGFydGlhbC5pZDsKLSAgICAgIGRlbGV0ZSBwYXJ0aWFsW2F0dHJpYnV0
ZV07Ci0gICAgfQotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVkZGVkUmVjb3Jk
c01peGluOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvYWRhcHRlcnMiLCAKLSAgWyIu
L2FkYXB0ZXJzL2ZpeHR1cmVfYWRhcHRlciIsIi4vYWRhcHRlcnMvcmVzdF9hZGFwdGVyIiwiZXhw
b3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVt
YmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIEZpeHR1cmVBZGFwdGVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIFJFU1RBZGFwdGVyID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0KLSAgICBfX2V4cG9ydHNfXy5SRVNUQWRhcHRlciA9IFJFU1RBZGFwdGVyOwot
ICAgIF9fZXhwb3J0c19fLkZpeHR1cmVBZGFwdGVyID0gRml4dHVyZUFkYXB0ZXI7Ci0gIH0pOwot
ZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9hZGFwdGVycy9maXh0dXJlX2FkYXB0ZXIiLCAKLSAgWyIu
Li9zeXN0ZW0vYWRhcHRlciIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1
bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBmbXQgPSBF
bWJlci5TdHJpbmcuZm10LAotICAgICAgICBpbmRleE9mID0gRW1iZXIuRW51bWVyYWJsZVV0aWxz
LmluZGV4T2Y7Ci0KLSAgICB2YXIgY291bnRlciA9IDA7Ci0KLSAgICB2YXIgQWRhcHRlciA9IF9f
ZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBgRFMuRml4dHVyZUFk
YXB0ZXJgIGlzIGFuIGFkYXB0ZXIgdGhhdCBsb2FkcyByZWNvcmRzIGZyb20gbWVtb3J5LgotICAg
ICAgSXQncyBwcmltYXJpbHkgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcuIFlvdSBj
YW4gYWxzbyB1c2UKLSAgICAgIGBEUy5GaXh0dXJlQWRhcHRlcmAgd2hpbGUgd29ya2luZyBvbiB0
aGUgQVBJIGJ1dCBhcmUgbm90IHJlYWR5IHRvCi0gICAgICBpbnRlZ3JhdGUgeWV0LiBJdCBpcyBh
IGZ1bGx5IGZ1bmN0aW9uaW5nIGFkYXB0ZXIuIEFsbCBDUlVEIG1ldGhvZHMKLSAgICAgIGFyZSBp
bXBsZW1lbnRlZC4gWW91IGNhbiBhbHNvIGltcGxlbWVudCBxdWVyeSBsb2dpYyB0aGF0IGEgcmVt
b3RlCi0gICAgICBzeXN0ZW0gd291bGQgZG8uIEl0J3MgcG9zc2libGUgdG8gZGV2ZWxvcCB5b3Vy
IGVudGlyZSBhcHBsaWNhdGlvbgotICAgICAgd2l0aCBgRFMuRml4dHVyZUFkYXB0ZXJgLgotCi0g
ICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgYEZpeHR1cmVBZGFwdGVyYCBp
biB5b3VyCi0gICAgICBhcHBsaWNhdGlvbiBwbGVhc2Ugc2VlIHRoZSBbRml4dHVyZUFkYXB0ZXIK
LSAgICAgIGd1aWRlXSgvZ3VpZGVzL21vZGVscy90aGUtZml4dHVyZS1hZGFwdGVyLykuCi0KLSAg
ICAgIEBjbGFzcyBGaXh0dXJlQWRhcHRlcgotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4
dGVuZHMgRFMuQWRhcHRlcgotICAgICovCi0gICAgdmFyIEZpeHR1cmVBZGFwdGVyID0gQWRhcHRl
ci5leHRlbmQoewotICAgICAgLy8gYnkgZGVmYXVsdCwgZml4dHVyZXMgYXJlIGFscmVhZHkgaW4g
bm9ybWFsaXplZCBmb3JtCi0gICAgICBzZXJpYWxpemVyOiBudWxsLAotCi0gICAgICAvKioKLSAg
ICAgICAgSWYgYHNpbXVsYXRlUmVtb3RlUmVzcG9uc2VgIGlzIGB0cnVlYCB0aGUgYEZpeHR1cmVB
ZGFwdGVyYCB3aWxsCi0gICAgICAgIHdhaXQgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9y
ZSByZXNvbHZpbmcgcHJvbWlzZXMgd2l0aCB0aGUKLSAgICAgICAgZml4dHVyZSB2YWx1ZXMuIFRo
ZSB3YWl0IHRpbWUgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBgbGF0ZW5jeWAKLSAgICAgICAg
cHJvcGVydHkuCi0KLSAgICAgICAgQHByb3BlcnR5IHNpbXVsYXRlUmVtb3RlUmVzcG9uc2UKLSAg
ICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEBkZWZhdWx0IHRydWUKLSAgICAgICovCi0g
ICAgICBzaW11bGF0ZVJlbW90ZVJlc3BvbnNlOiB0cnVlLAotCi0gICAgICAvKioKLSAgICAgICAg
QnkgZGVmYXVsdCB0aGUgYEZpeHR1cmVBZGFwdGVyYCB3aWxsIHNpbXVsYXRlIGEgd2FpdCBvZiB0
aGUKLSAgICAgICAgYGxhdGVuY3lgIG1pbGxpc2Vjb25kcyBiZWZvcmUgcmVzb2x2aW5nIHByb21p
c2VzIHdpdGggdGhlIGZpeHR1cmUKLSAgICAgICAgdmFsdWVzLiBUaGlzIGJlaGF2aW9yIGNhbiBi
ZSB0dXJuZWQgb2ZmIHZpYSB0aGUKLSAgICAgICAgYHNpbXVsYXRlUmVtb3RlUmVzcG9uc2VgIHBy
b3BlcnR5LgotCi0gICAgICAgIEBwcm9wZXJ0eSBsYXRlbmN5Ci0gICAgICAgIEB0eXBlIHtOdW1i
ZXJ9Ci0gICAgICAgIEBkZWZhdWx0IDUwCi0gICAgICAqLwotICAgICAgbGF0ZW5jeTogNTAsCi0K
LSAgICAgIC8qKgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8gcHJv
dmlkZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUKLQotICAgICAgICBAbWV0aG9kIGZpeHR1
cmVzRm9yVHlwZQotICAgICAgICBAcGFyYW0ge1N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEByZXR1cm4ge0FycmF5fQotICAgICAgKi8KLSAgICAgIGZpeHR1cmVzRm9yVHlwZTog
ZnVuY3Rpb24odHlwZSkgewotICAgICAgICBpZiAodHlwZS5GSVhUVVJFUykgewotICAgICAgICAg
IHZhciBmaXh0dXJlcyA9IEVtYmVyLkEodHlwZS5GSVhUVVJFUyk7Ci0gICAgICAgICAgcmV0dXJu
IGZpeHR1cmVzLm1hcChmdW5jdGlvbihmaXh0dXJlKXsKLSAgICAgICAgICAgIHZhciBmaXh0dXJl
SWRUeXBlID0gdHlwZW9mIGZpeHR1cmUuaWQ7Ci0gICAgICAgICAgICBpZihmaXh0dXJlSWRUeXBl
ICE9PSAibnVtYmVyIiAmJiBmaXh0dXJlSWRUeXBlICE9PSAic3RyaW5nIil7Ci0gICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihmbXQoJ3RoZSBpZCBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQg
YXMgYSBudW1iZXIgb3Igc3RyaW5nIGZvciBmaXh0dXJlICVAJywgW2ZpeHR1cmVdKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmaXh0dXJlLmlkID0gZml4dHVyZS5pZCArICcnOwotICAg
ICAgICAgICAgcmV0dXJuIGZpeHR1cmU7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgSW1wbGVtZW50
IHRoaXMgbWV0aG9kIGluIG9yZGVyIHRvIHF1ZXJ5IGZpeHR1cmVzIGRhdGEKLQotICAgICAgICBA
bWV0aG9kIHF1ZXJ5Rml4dHVyZXMKLSAgICAgICAgQHBhcmFtIHtBcnJheX0gZml4dHVyZQotICAg
ICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnkKLSAgICAgICAgQHBhcmFtIHtTdWJjbGFzcyBvZiBE
Uy5Nb2RlbH0gdHlwZQotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfEFycmF5fQotICAgICAgKi8K
LSAgICAgIHF1ZXJ5Rml4dHVyZXM6IGZ1bmN0aW9uKGZpeHR1cmVzLCBxdWVyeSwgdHlwZSkgewot
ICAgICAgICBFbWJlci5hc3NlcnQoJ05vdCBpbXBsZW1lbnRlZDogWW91IG11c3Qgb3ZlcnJpZGUg
dGhlIERTLkZpeHR1cmVBZGFwdGVyOjpxdWVyeUZpeHR1cmVzIG1ldGhvZCB0byBzdXBwb3J0IHF1
ZXJ5aW5nIHRoZSBmaXh0dXJlIHN0b3JlLicpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIEBtZXRob2QgdXBkYXRlRml4dHVyZXMKLSAgICAgICAgQHBhcmFtIHtTdWJjbGFzcyBvZiBE
Uy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge0FycmF5fSBmaXh0dXJlCi0gICAgICAqLwot
ICAgICAgdXBkYXRlRml4dHVyZXM6IGZ1bmN0aW9uKHR5cGUsIGZpeHR1cmUpIHsKLSAgICAgICAg
aWYoIXR5cGUuRklYVFVSRVMpIHsKLSAgICAgICAgICB0eXBlLkZJWFRVUkVTID0gW107Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgZml4dHVyZXMgPSB0eXBlLkZJWFRVUkVTOwotCi0gICAgICAg
IHRoaXMuZGVsZXRlTG9hZGVkRml4dHVyZSh0eXBlLCBmaXh0dXJlKTsKLQotICAgICAgICBmaXh0
dXJlcy5wdXNoKGZpeHR1cmUpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEltcGxl
bWVudCB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBwcm92aWRlIGpzb24gZm9yIENSVUQgbWV0aG9k
cwotCi0gICAgICAgIEBtZXRob2QgbW9ja0pTT04KLSAgICAgICAgQHBhcmFtIHtTdWJjbGFzcyBv
ZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAg
ICovCi0gICAgICBtb2NrSlNPTjogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHJlY29yZCkgewotICAg
ICAgICByZXR1cm4gc3RvcmUuc2VyaWFsaXplckZvcih0eXBlKS5zZXJpYWxpemUocmVjb3JkLCB7
IGluY2x1ZGVJZDogdHJ1ZSB9KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0
aG9kIGdlbmVyYXRlSWRGb3JSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUK
LSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEByZXR1cm4ge1N0cmlu
Z30gaWQKLSAgICAgICovCi0gICAgICBnZW5lcmF0ZUlkRm9yUmVjb3JkOiBmdW5jdGlvbihzdG9y
ZSkgewotICAgICAgICByZXR1cm4gImZpeHR1cmUtIiArIGNvdW50ZXIrKzsKLSAgICAgIH0sCi0K
LSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGZpbmQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9y
ZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gaWQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlz
ZQotICAgICAgKi8KLSAgICAgIGZpbmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZCkgewotICAg
ICAgICB2YXIgZml4dHVyZXMgPSB0aGlzLmZpeHR1cmVzRm9yVHlwZSh0eXBlKSwKLSAgICAgICAg
ICAgIGZpeHR1cmU7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCBmaXh0
dXJlcyBmb3IgbW9kZWwgdHlwZSAiK3R5cGUudG9TdHJpbmcoKSwgZml4dHVyZXMpOwotCi0gICAg
ICAgIGlmIChmaXh0dXJlcykgewotICAgICAgICAgIGZpeHR1cmUgPSBFbWJlci5BKGZpeHR1cmVz
KS5maW5kUHJvcGVydHkoJ2lkJywgaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpeHR1
cmUpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5zaW11bGF0ZVJlbW90ZUNhbGwoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICByZXR1cm4gZml4dHVyZTsKLSAgICAgICAgICB9LCB0aGlzKTsKLSAg
ICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgZmluZE1hbnkK
LSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge0FycmF5fSBpZHMKLSAgICAgICAg
QHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRNYW55OiBmdW5j
dGlvbihzdG9yZSwgdHlwZSwgaWRzKSB7Ci0gICAgICAgIHZhciBmaXh0dXJlcyA9IHRoaXMuZml4
dHVyZXNGb3JUeXBlKHR5cGUpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiVW5hYmxlIHRvIGZp
bmQgZml4dHVyZXMgZm9yIG1vZGVsIHR5cGUgIit0eXBlLnRvU3RyaW5nKCksIGZpeHR1cmVzKTsK
LQotICAgICAgICBpZiAoZml4dHVyZXMpIHsKLSAgICAgICAgICBmaXh0dXJlcyA9IGZpeHR1cmVz
LmZpbHRlcihmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXhPZihpZHMs
IGl0ZW0uaWQpICE9PSAtMTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChmaXh0dXJlcykgewotICAgICAgICAgIHJldHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBmaXh0dXJlczsKLSAgICAgICAgICB9LCB0
aGlzKTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBwcml2YXRl
Ci0gICAgICAgIEBtZXRob2QgZmluZEFsbAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9y
ZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBzaW5jZVRva2VuCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21p
c2UKLSAgICAgICovCi0gICAgICBmaW5kQWxsOiBmdW5jdGlvbihzdG9yZSwgdHlwZSkgewotICAg
ICAgICB2YXIgZml4dHVyZXMgPSB0aGlzLmZpeHR1cmVzRm9yVHlwZSh0eXBlKTsKLQotICAgICAg
ICBFbWJlci5hc3NlcnQoIlVuYWJsZSB0byBmaW5kIGZpeHR1cmVzIGZvciBtb2RlbCB0eXBlICIr
dHlwZS50b1N0cmluZygpLCBmaXh0dXJlcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuc2ltdWxh
dGVSZW1vdGVDYWxsKGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiBmaXh0dXJlczsKLSAg
ICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgQG1ldGhvZCBmaW5kUXVlcnkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3Rv
cmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBA
cGFyYW0ge09iamVjdH0gcXVlcnkKLSAgICAgICAgQHBhcmFtIHtEUy5BZGFwdGVyUG9wdWxhdGVk
UmVjb3JkQXJyYXl9IHJlY29yZEFycmF5Ci0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21p
c2UKLSAgICAgICovCi0gICAgICBmaW5kUXVlcnk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBxdWVy
eSwgYXJyYXkpIHsKLSAgICAgICAgdmFyIGZpeHR1cmVzID0gdGhpcy5maXh0dXJlc0ZvclR5cGUo
dHlwZSk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCBmaXh0dXJlcyBm
b3IgbW9kZWwgdHlwZSAiICsgdHlwZS50b1N0cmluZygpLCBmaXh0dXJlcyk7Ci0KLSAgICAgICAg
Zml4dHVyZXMgPSB0aGlzLnF1ZXJ5Rml4dHVyZXMoZml4dHVyZXMsIHF1ZXJ5LCB0eXBlKTsKLQot
ICAgICAgICBpZiAoZml4dHVyZXMpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5zaW11bGF0ZVJl
bW90ZUNhbGwoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZml4dHVyZXM7Ci0gICAg
ICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBAbWV0aG9kIGNyZWF0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQot
ICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJh
bSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0g
ICAgICAqLwotICAgICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3Jk
KSB7Ci0gICAgICAgIHZhciBmaXh0dXJlID0gdGhpcy5tb2NrSlNPTihzdG9yZSwgdHlwZSwgcmVj
b3JkKTsKLQotICAgICAgICB0aGlzLnVwZGF0ZUZpeHR1cmVzKHR5cGUsIGZpeHR1cmUpOwotCi0g
ICAgICAgIHJldHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICByZXR1cm4gZml4dHVyZTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAg
ICAvKioKLSAgICAgICAgQG1ldGhvZCB1cGRhdGVSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5T
dG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQot
ICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVybiB7UHJvbWlz
ZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIHVwZGF0ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUs
IHR5cGUsIHJlY29yZCkgewotICAgICAgICB2YXIgZml4dHVyZSA9IHRoaXMubW9ja0pTT04oc3Rv
cmUsIHR5cGUsIHJlY29yZCk7Ci0KLSAgICAgICAgdGhpcy51cGRhdGVGaXh0dXJlcyh0eXBlLCBm
aXh0dXJlKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5zaW11bGF0ZVJlbW90ZUNhbGwoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgcmV0dXJuIGZpeHR1cmU7Ci0gICAgICAgIH0sIHRoaXMpOwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgZGVsZXRlUmVjb3JkCi0gICAgICAg
IEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMu
TW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBy
ZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBkZWxldGVSZWNvcmQ6IGZ1
bmN0aW9uKHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKLSAgICAgICAgdmFyIGZpeHR1cmUgPSB0aGlz
Lm1vY2tKU09OKHN0b3JlLCB0eXBlLCByZWNvcmQpOwotCi0gICAgICAgIHRoaXMuZGVsZXRlTG9h
ZGVkRml4dHVyZSh0eXBlLCBmaXh0dXJlKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5zaW11bGF0
ZVJlbW90ZUNhbGwoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgLy8gbm8gcGF5bG9hZCBpbiBhIGRl
bGV0aW9uCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0pOwotICAgICAgfSwKLQot
ICAgICAgLyoKLSAgICAgICAgQG1ldGhvZCBkZWxldGVMb2FkZWRGaXh0dXJlCi0gICAgICAgIEBw
cml2YXRlCi0gICAgICAgIEBwYXJhbSB0eXBlCi0gICAgICAgIEBwYXJhbSByZWNvcmQKLSAgICAg
ICovCi0gICAgICBkZWxldGVMb2FkZWRGaXh0dXJlOiBmdW5jdGlvbih0eXBlLCByZWNvcmQpIHsK
LSAgICAgICAgdmFyIGV4aXN0aW5nRml4dHVyZSA9IHRoaXMuZmluZEV4aXN0aW5nRml4dHVyZSh0
eXBlLCByZWNvcmQpOwotCi0gICAgICAgIGlmKGV4aXN0aW5nRml4dHVyZSkgewotICAgICAgICAg
IHZhciBpbmRleCA9IGluZGV4T2YodHlwZS5GSVhUVVJFUywgZXhpc3RpbmdGaXh0dXJlKTsKLSAg
ICAgICAgICB0eXBlLkZJWFRVUkVTLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qCi0gICAgICAgIEBtZXRob2Qg
ZmluZEV4aXN0aW5nRml4dHVyZQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0gdHlw
ZQotICAgICAgICBAcGFyYW0gcmVjb3JkCi0gICAgICAqLwotICAgICAgZmluZEV4aXN0aW5nRml4
dHVyZTogZnVuY3Rpb24odHlwZSwgcmVjb3JkKSB7Ci0gICAgICAgIHZhciBmaXh0dXJlcyA9IHRo
aXMuZml4dHVyZXNGb3JUeXBlKHR5cGUpOwotICAgICAgICB2YXIgaWQgPSBnZXQocmVjb3JkLCAn
aWQnKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5maW5kRml4dHVyZUJ5SWQoZml4dHVyZXMsIGlk
KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qCi0gICAgICAgIEBtZXRob2QgZmluZEZpeHR1cmVCeUlk
Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSBmaXh0dXJlcwotICAgICAgICBAcGFy
YW0gaWQKLSAgICAgICovCi0gICAgICBmaW5kRml4dHVyZUJ5SWQ6IGZ1bmN0aW9uKGZpeHR1cmVz
LCBpZCkgewotICAgICAgICByZXR1cm4gRW1iZXIuQShmaXh0dXJlcykuZmluZChmdW5jdGlvbihy
KSB7Ci0gICAgICAgICAgaWYoJycrZ2V0KHIsICdpZCcpID09PSAnJytpZCkgewotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfSwKLQotICAgICAgLyoKLSAg
ICAgICAgQG1ldGhvZCBzaW11bGF0ZVJlbW90ZUNhbGwKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgQHBhcmFtIGNhbGxiYWNrCi0gICAgICAgIEBwYXJhbSBjb250ZXh0Ci0gICAgICAqLwotICAg
ICAgc2ltdWxhdGVSZW1vdGVDYWxsOiBmdW5jdGlvbihjYWxsYmFjaywgY29udGV4dCkgewotICAg
ICAgICB2YXIgYWRhcHRlciA9IHRoaXM7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBFbWJlci5SU1ZQ
LlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewotICAgICAgICAgIGlmIChnZXQoYWRhcHRlciwg
J3NpbXVsYXRlUmVtb3RlUmVzcG9uc2UnKSkgewotICAgICAgICAgICAgLy8gU2NoZWR1bGUgd2l0
aCBzZXRUaW1lb3V0Ci0gICAgICAgICAgICBFbWJlci5ydW4ubGF0ZXIoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2suY2FsbChjb250ZXh0KSk7Ci0gICAgICAgICAg
ICB9LCBnZXQoYWRhcHRlciwgJ2xhdGVuY3knKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIEFzeW5jaHJvbm91cywgYnV0IGF0IHRoZSBvZiB0aGUgcnVubG9vcCB3aXRoIHpl
cm8gbGF0ZW5jeQotICAgICAgICAgICAgRW1iZXIucnVuLnNjaGVkdWxlKCdhY3Rpb25zJywgbnVs
bCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHJlc29sdmUoY2FsbGJhY2suY2FsbChjb250
ZXh0KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sICJEUzogRml4
dHVyZUFkYXB0ZXIjc2ltdWxhdGVSZW1vdGVDYWxsIik7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRml4dHVyZUFkYXB0ZXI7Ci0gIH0pOwotZGVmaW5l
KCJlbWJlci1kYXRhL2xpYi9hZGFwdGVycy9yZXN0X2FkYXB0ZXIiLCAKLSAgWyIuLi9zeXN0ZW0v
YWRhcHRlciIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9y
dHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXIt
ZGF0YQotICAgICovCi0KLSAgICB2YXIgQWRhcHRlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVs
dCJdOwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLSAgICB2YXIg
Zm9yRWFjaCA9IEVtYmVyLkFycmF5UG9seWZpbGxzLmZvckVhY2g7Ci0KLSAgICAvKioKLSAgICAg
IFRoZSBSRVNUIGFkYXB0ZXIgYWxsb3dzIHlvdXIgc3RvcmUgdG8gY29tbXVuaWNhdGUgd2l0aCBh
biBIVFRQIHNlcnZlciBieQotICAgICAgdHJhbnNtaXR0aW5nIEpTT04gdmlhIFhIUi4gTW9zdCBF
bWJlci5qcyBhcHBzIHRoYXQgY29uc3VtZSBhIEpTT04gQVBJCi0gICAgICBzaG91bGQgdXNlIHRo
ZSBSRVNUIGFkYXB0ZXIuCi0KLSAgICAgIFRoaXMgYWRhcHRlciBpcyBkZXNpZ25lZCBhcm91bmQg
dGhlIGlkZWEgdGhhdCB0aGUgSlNPTiBleGNoYW5nZWQgd2l0aAotICAgICAgdGhlIHNlcnZlciBz
aG91bGQgYmUgY29udmVudGlvbmFsLgotCi0gICAgICAjIyBKU09OIFN0cnVjdHVyZQotCi0gICAg
ICBUaGUgUkVTVCBhZGFwdGVyIGV4cGVjdHMgdGhlIEpTT04gcmV0dXJuZWQgZnJvbSB5b3VyIHNl
cnZlciB0byBmb2xsb3cKLSAgICAgIHRoZXNlIGNvbnZlbnRpb25zLgotCi0gICAgICAjIyMgT2Jq
ZWN0IFJvb3QKLQotICAgICAgVGhlIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgYW4gb2JqZWN0IHRo
YXQgY29udGFpbnMgdGhlIHJlY29yZCBpbnNpZGUgYQotICAgICAgcm9vdCBwcm9wZXJ0eS4gRm9y
IGV4YW1wbGUsIGluIHJlc3BvbnNlIHRvIGEgYEdFVGAgcmVxdWVzdCBmb3IKLSAgICAgIGAvcG9z
dHMvMWAsIHRoZSBKU09OIHNob3VsZCBsb29rIGxpa2UgdGhpczoKLQotICAgICAgYGBganMKLSAg
ICAgIHsKLSAgICAgICAgInBvc3QiOiB7Ci0gICAgICAgICAgInRpdGxlIjogIkknbSBSdW5uaW5n
IHRvIFJlZm9ybSB0aGUgVzNDJ3MgVGFnIiwKLSAgICAgICAgICAiYXV0aG9yIjogIlllaHVkYSBL
YXR6IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBgYGAKLQotICAgICAgIyMjIENvbnZlbnRp
b25hbCBOYW1lcwotCi0gICAgICBBdHRyaWJ1dGUgbmFtZXMgaW4geW91ciBKU09OIHBheWxvYWQg
c2hvdWxkIGJlIHRoZSBjYW1lbENhc2VkIHZlcnNpb25zIG9mCi0gICAgICB0aGUgYXR0cmlidXRl
cyBpbiB5b3VyIEVtYmVyLmpzIG1vZGVscy4KLQotICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBo
YXZlIGEgYFBlcnNvbmAgbW9kZWw6Ci0KLSAgICAgIGBgYGpzCi0gICAgICBBcHAuUGVyc29uID0g
RFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgZmlyc3ROYW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwK
LSAgICAgICAgbGFzdE5hbWU6IERTLmF0dHIoJ3N0cmluZycpLAotICAgICAgICBvY2N1cGF0aW9u
OiBEUy5hdHRyKCdzdHJpbmcnKQotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgVGhlIEpT
T04gcmV0dXJuZWQgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgotCi0gICAgICBgYGBqcwotICAgICAg
ewotICAgICAgICAicGVyc29uIjogewotICAgICAgICAgICJmaXJzdE5hbWUiOiAiQmFyYWNrIiwK
LSAgICAgICAgICAibGFzdE5hbWUiOiAiT2JhbWEiLAotICAgICAgICAgICJvY2N1cGF0aW9uIjog
IlByZXNpZGVudCIKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYGBgCi0KLSAgICAgICMjIEN1
c3RvbWl6YXRpb24KLQotICAgICAgIyMjIEVuZHBvaW50IHBhdGggY3VzdG9taXphdGlvbgotCi0g
ICAgICBFbmRwb2ludCBwYXRocyBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIGBuYW1lc3BhY2VgIGJ5
IHNldHRpbmcgdGhlIG5hbWVzcGFjZQotICAgICAgcHJvcGVydHkgb24gdGhlIGFkYXB0ZXI6Ci0K
LSAgICAgIGBgYGpzCi0gICAgICBEUy5SRVNUQWRhcHRlci5yZW9wZW4oewotICAgICAgICBuYW1l
c3BhY2U6ICdhcGkvMScKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICBSZXF1ZXN0cyBmb3Ig
YEFwcC5QZXJzb25gIHdvdWxkIG5vdyB0YXJnZXQgYC9hcGkvMS9wZW9wbGUvMWAuCi0KLSAgICAg
ICMjIyBIb3N0IGN1c3RvbWl6YXRpb24KLQotICAgICAgQW4gYWRhcHRlciBjYW4gdGFyZ2V0IG90
aGVyIGhvc3RzIGJ5IHNldHRpbmcgdGhlIGBob3N0YCBwcm9wZXJ0eS4KLQotICAgICAgYGBganMK
LSAgICAgIERTLlJFU1RBZGFwdGVyLnJlb3Blbih7Ci0gICAgICAgIGhvc3Q6ICdodHRwczovL2Fw
aS5leGFtcGxlLmNvbScKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgICMjIyBIZWFkZXJz
IGN1c3RvbWl6YXRpb24KLQotICAgICAgU29tZSBBUElzIHJlcXVpcmUgSFRUUCBoZWFkZXJzLCBl
LmcuIHRvIHByb3ZpZGUgYW4gQVBJIGtleS4gQXJiaXRyYXJ5Ci0gICAgICBoZWFkZXJzIGNhbiBi
ZSBzZXQgYXMga2V5L3ZhbHVlIHBhaXJzIG9uIHRoZSBgUkVTVEFkYXB0ZXJgJ3MgYGhlYWRlcnNg
Ci0gICAgICBvYmplY3QgYW5kIEVtYmVyIERhdGEgd2lsbCBzZW5kIHRoZW0gYWxvbmcgd2l0aCBl
YWNoIGFqYXggcmVxdWVzdC4KLQotCi0gICAgICBgYGBqcwotICAgICAgQXBwLkFwcGxpY2F0aW9u
QWRhcHRlciA9IERTLlJFU1RBZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgIGhlYWRlcnM6IHsKLSAg
ICAgICAgICAiQVBJX0tFWSI6ICJzZWNyZXQga2V5IiwKLSAgICAgICAgICAiQU5PVEhFUl9IRUFE
RVIiOiAiU29tZSBoZWFkZXIgdmFsdWUiCi0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBg
Ci0KLSAgICAgIGBoZWFkZXJzYCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29tcHV0ZWQgcHJvcGVy
dHkgdG8gc3VwcG9ydCBkeW5hbWljCi0gICAgICBoZWFkZXJzLiBJbiB0aGUgZXhhbXBsZSBiZWxv
dywgdGhlIGBzZXNzaW9uYCBvYmplY3QgaGFzIGJlZW4KLSAgICAgIGluamVjdGVkIGludG8gYW4g
YWRhcHRlciBieSBFbWJlcidzIGNvbnRhaW5lci4KLQotICAgICAgYGBganMKLSAgICAgIEFwcC5B
cHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgICAgICBoZWFk
ZXJzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgIkFQSV9L
RVkiOiB0aGlzLmdldCgic2Vzc2lvbi5hdXRoVG9rZW4iKSwKLSAgICAgICAgICAgICJBTk9USEVS
X0hFQURFUiI6ICJTb21lIGhlYWRlciB2YWx1ZSIKLSAgICAgICAgICB9OwotICAgICAgICB9LnBy
b3BlcnR5KCJzZXNzaW9uLmF1dGhUb2tlbiIpCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAg
ICBJbiBzb21lIGNhc2VzLCB5b3VyIGR5bmFtaWMgaGVhZGVycyBtYXkgcmVxdWlyZSBkYXRhIGZy
b20gc29tZQotICAgICAgb2JqZWN0IG91dHNpZGUgb2YgRW1iZXIncyBvYnNlcnZlciBzeXN0ZW0g
KGZvciBleGFtcGxlCi0gICAgICBgZG9jdW1lbnQuY29va2llYCkuIFlvdSBjYW4gdXNlIHRoZQot
ICAgICAgW3ZvbGF0aWxlXSgvYXBpL2NsYXNzZXMvRW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eS5odG1s
I21ldGhvZF92b2xhdGlsZSkKLSAgICAgIGZ1bmN0aW9uIHRvIHNldCB0aGUgcHJvcGVydHkgaW50
byBhIG5vbi1jaGFjaGVkIG1vZGUgY2F1c2luZyB0aGUgaGVhZGVycyB0bwotICAgICAgYmUgcmVj
b21wdXRlZCB3aXRoIGV2ZXJ5IHJlcXVlc3QuCi0KLSAgICAgIGBgYGpzCi0gICAgICBBcHAuQXBw
bGljYXRpb25BZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgaGVhZGVy
czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICJBUElfS0VZ
IjogRW1iZXIuZ2V0KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvYXBpS2V5XD0oW147XSopLyksICIx
IiksCi0gICAgICAgICAgICAiQU5PVEhFUl9IRUFERVIiOiAiU29tZSBoZWFkZXIgdmFsdWUiCi0g
ICAgICAgICAgfTsKLSAgICAgICAgfS5wcm9wZXJ0eSgpLnZvbGF0aWxlKCk7Ci0gICAgICB9KTsK
LSAgICAgIGBgYAotCi0gICAgICBAY2xhc3MgUkVTVEFkYXB0ZXIKLSAgICAgIEBjb25zdHJ1Y3Rv
cgotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRFMuQWRhcHRlcgotICAgICov
Ci0gICAgdmFyIFJFU1RBZGFwdGVyID0gQWRhcHRlci5leHRlbmQoewotICAgICAgZGVmYXVsdFNl
cmlhbGl6ZXI6ICctcmVzdCcsCi0gICAgICAvKioKLSAgICAgICAgRW5kcG9pbnQgcGF0aHMgY2Fu
IGJlIHByZWZpeGVkIHdpdGggYSBgbmFtZXNwYWNlYCBieSBzZXR0aW5nIHRoZSBuYW1lc3BhY2UK
LSAgICAgICAgcHJvcGVydHkgb24gdGhlIGFkYXB0ZXI6Ci0KLSAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICBEUy5SRVNUQWRhcHRlci5yZW9wZW4oewotICAgICAgICAgIG5hbWVzcGFjZTog
J2FwaS8xJwotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgUmVxdWVzdHMgZm9y
IGBBcHAuUG9zdGAgd291bGQgbm93IHRhcmdldCBgL2FwaS8xL3Bvc3QvYC4KLQotICAgICAgICBA
cHJvcGVydHkgbmFtZXNwYWNlCi0gICAgICAgIEB0eXBlIHtTdHJpbmd9Ci0gICAgICAqLwotCi0g
ICAgICAvKioKLSAgICAgICAgQW4gYWRhcHRlciBjYW4gdGFyZ2V0IG90aGVyIGhvc3RzIGJ5IHNl
dHRpbmcgdGhlIGBob3N0YCBwcm9wZXJ0eS4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgIERTLlJFU1RBZGFwdGVyLnJlb3Blbih7Ci0gICAgICAgICAgaG9zdDogJ2h0dHBzOi8vYXBp
LmV4YW1wbGUuY29tJwotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgUmVxdWVz
dHMgZm9yIGBBcHAuUG9zdGAgd291bGQgbm93IHRhcmdldCBgaHR0cHM6Ly9hcGkuZXhhbXBsZS5j
b20vcG9zdC9gLgotCi0gICAgICAgIEBwcm9wZXJ0eSBob3N0Ci0gICAgICAgIEB0eXBlIHtTdHJp
bmd9Ci0gICAgICAqLwotCi0gICAgICAvKioKLSAgICAgICAgU29tZSBBUElzIHJlcXVpcmUgSFRU
UCBoZWFkZXJzLCBlLmcuIHRvIHByb3ZpZGUgYW4gQVBJCi0gICAgICAgIGtleS4gQXJiaXRyYXJ5
IGhlYWRlcnMgY2FuIGJlIHNldCBhcyBrZXkvdmFsdWUgcGFpcnMgb24gdGhlCi0gICAgICAgIGBS
RVNUQWRhcHRlcmAncyBgaGVhZGVyc2Agb2JqZWN0IGFuZCBFbWJlciBEYXRhIHdpbGwgc2VuZCB0
aGVtCi0gICAgICAgIGFsb25nIHdpdGggZWFjaCBhamF4IHJlcXVlc3QuIEZvciBkeW5hbWljIGhl
YWRlcnMgc2VlIFtoZWFkZXJzCi0gICAgICAgIGN1c3RvbWl6YXRpb25dKC9hcGkvZGF0YS9jbGFz
c2VzL0RTLlJFU1RBZGFwdGVyLmh0bWwjdG9jX2hlYWRlcnMtY3VzdG9taXphdGlvbikuCi0KLSAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMu
UkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBoZWFkZXJzOiB7Ci0gICAgICAgICAgICAi
QVBJX0tFWSI6ICJzZWNyZXQga2V5IiwKLSAgICAgICAgICAgICJBTk9USEVSX0hFQURFUiI6ICJT
b21lIGhlYWRlciB2YWx1ZSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAK
LQotICAgICAgICBAcHJvcGVydHkgaGVhZGVycwotICAgICAgICBAdHlwZSB7T2JqZWN0fQotICAg
ICAgKi8KLQotICAgICAgLyoqCi0gICAgICAgIENhbGxlZCBieSB0aGUgc3RvcmUgaW4gb3JkZXIg
dG8gZmV0Y2ggdGhlIEpTT04gZm9yIGEgZ2l2ZW4KLSAgICAgICAgdHlwZSBhbmQgSUQuCi0KLSAg
ICAgICAgVGhlIGBmaW5kYCBtZXRob2QgbWFrZXMgYW4gQWpheCByZXF1ZXN0IHRvIGEgVVJMIGNv
bXB1dGVkIGJ5IGBidWlsZFVSTGAsIGFuZCByZXR1cm5zIGEKLSAgICAgICAgcHJvbWlzZSBmb3Ig
dGhlIHJlc3VsdGluZyBwYXlsb2FkLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHBlcmZvcm1zIGFu
IEhUVFAgYEdFVGAgcmVxdWVzdCB3aXRoIHRoZSBpZCBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSBx
dWVyeSBzdHJpbmcuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kCi0gICAgICAgIEBwYXJhbSB7RFMu
U3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUK
LSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGlkCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHBy
b21pc2UKLSAgICAgICovCi0gICAgICBmaW5kOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgaWQpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUudHlwZUtleSwgaWQp
LCAnR0VUJyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQ2FsbGVkIGJ5IHRoZSBz
dG9yZSBpbiBvcmRlciB0byBmZXRjaCBhIEpTT04gYXJyYXkgZm9yIGFsbAotICAgICAgICBvZiB0
aGUgcmVjb3JkcyBmb3IgYSBnaXZlbiB0eXBlLgotCi0gICAgICAgIFRoZSBgZmluZEFsbGAgbWV0
aG9kIG1ha2VzIGFuIEFqYXggKEhUVFAgR0VUKSByZXF1ZXN0IHRvIGEgVVJMIGNvbXB1dGVkIGJ5
IGBidWlsZFVSTGAsIGFuZCByZXR1cm5zIGEKLSAgICAgICAgcHJvbWlzZSBmb3IgdGhlIHJlc3Vs
dGluZyBwYXlsb2FkLgotCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBtZXRob2QgZmluZEFs
bAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNs
YXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzaW5jZVRva2Vu
Ci0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5k
QWxsOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgc2luY2VUb2tlbikgewotICAgICAgICB2YXIgcXVl
cnk7Ci0KLSAgICAgICAgaWYgKHNpbmNlVG9rZW4pIHsKLSAgICAgICAgICBxdWVyeSA9IHsgc2lu
Y2U6IHNpbmNlVG9rZW4gfTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmFqYXgo
dGhpcy5idWlsZFVSTCh0eXBlLnR5cGVLZXkpLCAnR0VUJywgeyBkYXRhOiBxdWVyeSB9KTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIGluIG9yZGVy
IHRvIGZldGNoIGEgSlNPTiBhcnJheSBmb3IKLSAgICAgICAgdGhlIHJlY29yZHMgdGhhdCBtYXRj
aCBhIHBhcnRpY3VsYXIgcXVlcnkuCi0KLSAgICAgICAgVGhlIGBmaW5kUXVlcnlgIG1ldGhvZCBt
YWtlcyBhbiBBamF4IChIVFRQIEdFVCkgcmVxdWVzdCB0byBhIFVSTCBjb21wdXRlZCBieSBgYnVp
bGRVUkxgLCBhbmQgcmV0dXJucyBhCi0gICAgICAgIHByb21pc2UgZm9yIHRoZSByZXN1bHRpbmcg
cGF5bG9hZC4KLQotICAgICAgICBUaGUgYHF1ZXJ5YCBhcmd1bWVudCBpcyBhIHNpbXBsZSBKYXZh
U2NyaXB0IG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGRpcmVjdGx5Ci0gICAgICAgIHRvIHRo
ZSBzZXJ2ZXIgYXMgcGFyYW1ldGVycy4KLQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAbWV0
aG9kIGZpbmRRdWVyeQotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBA
cGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBxdWVyeQotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgZmluZFF1ZXJ5OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcXVlcnkpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUudHlwZUtleSksICdHRVQnLCB7IGRhdGE6
IHF1ZXJ5IH0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIENhbGxlZCBieSB0aGUg
c3RvcmUgaW4gb3JkZXIgdG8gZmV0Y2ggYSBKU09OIGFycmF5IGZvcgotICAgICAgICB0aGUgdW5s
b2FkZWQgcmVjb3JkcyBpbiBhIGhhcy1tYW55IHJlbGF0aW9uc2hpcCB0aGF0IHdlcmUgb3JpZ2lu
YWxseQotICAgICAgICBzcGVjaWZpZWQgYXMgSURzLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBp
ZiB0aGUgb3JpZ2luYWwgcGF5bG9hZCBsb29rcyBsaWtlOgotCi0gICAgICAgIGBgYGpzCi0gICAg
ICAgIHsKLSAgICAgICAgICAiaWQiOiAxLAotICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBv
bWFrYXNlIiwKLSAgICAgICAgICAiY29tbWVudHMiOiBbIDEsIDIsIDMgXQotICAgICAgICB9Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBJRHMgd2lsbCBiZSBwYXNzZWQgYXMgYSBVUkwtZW5j
b2RlZCBBcnJheSBvZiBJRHMsIGluIHRoaXMgZm9ybToKLQotICAgICAgICBgYGAKLSAgICAgICAg
aWRzW109MSZpZHNbXT0yJmlkc1tdPTMKLSAgICAgICAgYGBgCi0KLSAgICAgICAgTWFueSBzZXJ2
ZXJzLCBzdWNoIGFzIFJhaWxzIGFuZCBQSFAsIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRo
aXMgVVJMLWVuY29kZWQgYXJyYXkKLSAgICAgICAgaW50byBhbiBBcnJheSBmb3IgeW91IG9uIHRo
ZSBzZXJ2ZXItc2lkZS4gSWYgeW91IHdhbnQgdG8gZW5jb2RlIHRoZQotICAgICAgICBJRHMsIGRp
ZmZlcmVudGx5LCBqdXN0IG92ZXJyaWRlIHRoaXMgKG9uZS1saW5lKSBtZXRob2QuCi0KLSAgICAg
ICAgVGhlIGBmaW5kTWFueWAgbWV0aG9kIG1ha2VzIGFuIEFqYXggKEhUVFAgR0VUKSByZXF1ZXN0
IHRvIGEgVVJMIGNvbXB1dGVkIGJ5IGBidWlsZFVSTGAsIGFuZCByZXR1cm5zIGEKLSAgICAgICAg
cHJvbWlzZSBmb3IgdGhlIHJlc3VsdGluZyBwYXlsb2FkLgotCi0gICAgICAgIEBtZXRob2QgZmlu
ZE1hbnkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtz
dWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge0FycmF5fSBpZHMKLSAg
ICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRNYW55
OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgaWRzKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmFqYXgo
dGhpcy5idWlsZFVSTCh0eXBlLnR5cGVLZXkpLCAnR0VUJywgeyBkYXRhOiB7IGlkczogaWRzIH0g
fSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSBp
biBvcmRlciB0byBmZXRjaCBhIEpTT04gYXJyYXkgZm9yCi0gICAgICAgIHRoZSB1bmxvYWRlZCBy
ZWNvcmRzIGluIGEgaGFzLW1hbnkgcmVsYXRpb25zaGlwIHRoYXQgd2VyZSBvcmlnaW5hbGx5Ci0g
ICAgICAgIHNwZWNpZmllZCBhcyBhIFVSTCAoaW5zaWRlIG9mIGBsaW5rc2ApLgotCi0gICAgICAg
IEZvciBleGFtcGxlLCBpZiB5b3VyIG9yaWdpbmFsIHBheWxvYWQgbG9va3MgbGlrZSB0aGlzOgot
Ci0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAg
ICAgICJpZCI6IDEsCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0g
ICAgICAgICAgICAibGlua3MiOiB7ICJjb21tZW50cyI6ICIvcG9zdHMvMS9jb21tZW50cyIgfQot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBUaGlzIG1ldGhv
ZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBwYXJlbnQgcmVjb3JkIGFuZCBgL3Bvc3RzLzEvY29t
bWVudHNgLgotCi0gICAgICAgIFRoZSBgZmluZEhhc01hbnlgIG1ldGhvZCB3aWxsIG1ha2UgYW4g
QWpheCAoSFRUUCBHRVQpIHJlcXVlc3QgdG8gdGhlIG9yaWdpbmFsbHkgc3BlY2lmaWVkIFVSTC4K
LSAgICAgICAgSWYgdGhlIFVSTCBpcyBob3N0LXJlbGF0aXZlIChzdGFydGluZyB3aXRoIGEgc2lu
Z2xlIHNsYXNoKSwgdGhlCi0gICAgICAgIHJlcXVlc3Qgd2lsbCB1c2UgdGhlIGhvc3Qgc3BlY2lm
aWVkIG9uIHRoZSBhZGFwdGVyIChpZiBhbnkpLgotCi0gICAgICAgIEBtZXRob2QgZmluZEhhc01h
bnkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtEUy5N
b2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwKLSAgICAgICAgQHJldHVy
biB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRIYXNNYW55OiBmdW5jdGlv
bihzdG9yZSwgcmVjb3JkLCB1cmwpIHsKLSAgICAgICAgdmFyIGhvc3QgPSBnZXQodGhpcywgJ2hv
c3QnKSwKLSAgICAgICAgICAgIGlkICAgPSBnZXQocmVjb3JkLCAnaWQnKSwKLSAgICAgICAgICAg
IHR5cGUgPSByZWNvcmQuY29uc3RydWN0b3IudHlwZUtleTsKLQotICAgICAgICBpZiAoaG9zdCAm
JiB1cmwuY2hhckF0KDApID09PSAnLycgJiYgdXJsLmNoYXJBdCgxKSAhPT0gJy8nKSB7Ci0gICAg
ICAgICAgdXJsID0gaG9zdCArIHVybDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlz
LmFqYXgodGhpcy51cmxQcmVmaXgodXJsLCB0aGlzLmJ1aWxkVVJMKHR5cGUsIGlkKSksICdHRVQn
KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIGlu
IG9yZGVyIHRvIGZldGNoIGEgSlNPTiBhcnJheSBmb3IKLSAgICAgICAgdGhlIHVubG9hZGVkIHJl
Y29yZHMgaW4gYSBiZWxvbmdzLXRvIHJlbGF0aW9uc2hpcCB0aGF0IHdlcmUgb3JpZ2luYWxseQot
ICAgICAgICBzcGVjaWZpZWQgYXMgYSBVUkwgKGluc2lkZSBvZiBgbGlua3NgKS4KLQotICAgICAg
ICBGb3IgZXhhbXBsZSwgaWYgeW91ciBvcmlnaW5hbCBwYXlsb2FkIGxvb2tzIGxpa2UgdGhpczoK
LQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInBlcnNvbiI6IHsKLSAgICAg
ICAgICAgICJpZCI6IDEsCi0gICAgICAgICAgICAibmFtZSI6ICJUb20gRGFsZSIsCi0gICAgICAg
ICAgICAibGlua3MiOiB7ICJncm91cCI6ICIvcGVvcGxlLzEvZ3JvdXAiIH0KLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBj
YWxsZWQgd2l0aCB0aGUgcGFyZW50IHJlY29yZCBhbmQgYC9wZW9wbGUvMS9ncm91cGAuCi0KLSAg
ICAgICAgVGhlIGBmaW5kQmVsb25nc1RvYCBtZXRob2Qgd2lsbCBtYWtlIGFuIEFqYXggKEhUVFAg
R0VUKSByZXF1ZXN0IHRvIHRoZSBvcmlnaW5hbGx5IHNwZWNpZmllZCBVUkwuCi0KLSAgICAgICAg
QG1ldGhvZCBmaW5kQmVsb25nc1RvCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0g
ICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge1N0cmluZ30g
dXJsCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBm
aW5kQmVsb25nc1RvOiBmdW5jdGlvbihzdG9yZSwgcmVjb3JkLCB1cmwpIHsKLSAgICAgICAgdmFy
IGlkICAgPSBnZXQocmVjb3JkLCAnaWQnKSwKLSAgICAgICAgICAgIHR5cGUgPSByZWNvcmQuY29u
c3RydWN0b3IudHlwZUtleTsKLQotICAgICAgICByZXR1cm4gdGhpcy5hamF4KHRoaXMudXJsUHJl
Zml4KHVybCwgdGhpcy5idWlsZFVSTCh0eXBlLCBpZCkpLCAnR0VUJyk7Ci0gICAgICB9LAotCi0g
ICAgICAvKioKLSAgICAgICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSB3aGVuIGEgbmV3bHkgY3JlYXRl
ZCByZWNvcmQgaXMKLSAgICAgICAgc2F2ZWQgdmlhIHRoZSBgc2F2ZWAgbWV0aG9kIG9uIGEgbW9k
ZWwgcmVjb3JkIGluc3RhbmNlLgotCi0gICAgICAgIFRoZSBgY3JlYXRlUmVjb3JkYCBtZXRob2Qg
c2VyaWFsaXplcyB0aGUgcmVjb3JkIGFuZCBtYWtlcyBhbiBBamF4IChIVFRQIFBPU1QpIHJlcXVl
c3QKLSAgICAgICAgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYC4KLQotICAgICAgICBT
ZWUgYHNlcmlhbGl6ZWAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjdXN0b21pemUgdGhlIHNl
cmlhbGl6ZWQgZm9ybQotICAgICAgICBvZiBhIHJlY29yZC4KLQotICAgICAgICBAbWV0aG9kIGNy
ZWF0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9
IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0gICAgICAg
IHZhciBkYXRhID0ge307Ci0gICAgICAgIHZhciBzZXJpYWxpemVyID0gc3RvcmUuc2VyaWFsaXpl
ckZvcih0eXBlLnR5cGVLZXkpOwotCi0gICAgICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplSW50b0hh
c2goZGF0YSwgdHlwZSwgcmVjb3JkLCB7IGluY2x1ZGVJZDogdHJ1ZSB9KTsKLQotICAgICAgICBy
ZXR1cm4gdGhpcy5hamF4KHRoaXMuYnVpbGRVUkwodHlwZS50eXBlS2V5KSwgIlBPU1QiLCB7IGRh
dGE6IGRhdGEgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQ2FsbGVkIGJ5IHRo
ZSBzdG9yZSB3aGVuIGFuIGV4aXN0aW5nIHJlY29yZCBpcyBzYXZlZAotICAgICAgICB2aWEgdGhl
IGBzYXZlYCBtZXRob2Qgb24gYSBtb2RlbCByZWNvcmQgaW5zdGFuY2UuCi0KLSAgICAgICAgVGhl
IGB1cGRhdGVSZWNvcmRgIG1ldGhvZCBzZXJpYWxpemVzIHRoZSByZWNvcmQgYW5kIG1ha2VzIGFu
IEFqYXggKEhUVFAgUFVUKSByZXF1ZXN0Ci0gICAgICAgIHRvIGEgVVJMIGNvbXB1dGVkIGJ5IGBi
dWlsZFVSTGAuCi0KLSAgICAgICAgU2VlIGBzZXJpYWxpemVgIGZvciBpbmZvcm1hdGlvbiBvbiBo
b3cgdG8gY3VzdG9taXplIHRoZSBzZXJpYWxpemVkIGZvcm0KLSAgICAgICAgb2YgYSByZWNvcmQu
Ci0KLSAgICAgICAgQG1ldGhvZCB1cGRhdGVSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9y
ZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAg
ICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0g
cHJvbWlzZQotICAgICAgKi8KLSAgICAgIHVwZGF0ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHR5
cGUsIHJlY29yZCkgewotICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgICB2YXIgc2VyaWFs
aXplciA9IHN0b3JlLnNlcmlhbGl6ZXJGb3IodHlwZS50eXBlS2V5KTsKLQotICAgICAgICBzZXJp
YWxpemVyLnNlcmlhbGl6ZUludG9IYXNoKGRhdGEsIHR5cGUsIHJlY29yZCk7Ci0KLSAgICAgICAg
dmFyIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuYWpheCh0
aGlzLmJ1aWxkVVJMKHR5cGUudHlwZUtleSwgaWQpLCAiUFVUIiwgeyBkYXRhOiBkYXRhIH0pOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIENhbGxlZCBieSB0aGUgc3RvcmUgd2hlbiBh
IHJlY29yZCBpcyBkZWxldGVkLgotCi0gICAgICAgIFRoZSBgZGVsZXRlUmVjb3JkYCBtZXRob2Qg
IG1ha2VzIGFuIEFqYXggKEhUVFAgREVMRVRFKSByZXF1ZXN0IHRvIGEgVVJMIGNvbXB1dGVkIGJ5
IGBidWlsZFVSTGAuCi0KLSAgICAgICAgQG1ldGhvZCBkZWxldGVSZWNvcmQKLSAgICAgICAgQHBh
cmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2Rl
bH0gdHlwZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVy
biB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGRlbGV0ZVJlY29yZDogZnVuY3Rp
b24oc3RvcmUsIHR5cGUsIHJlY29yZCkgewotICAgICAgICB2YXIgaWQgPSBnZXQocmVjb3JkLCAn
aWQnKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5hamF4KHRoaXMuYnVpbGRVUkwodHlwZS50eXBl
S2V5LCBpZCksICJERUxFVEUiKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBCdWls
ZHMgYSBVUkwgZm9yIGEgZ2l2ZW4gdHlwZSBhbmQgb3B0aW9uYWwgSUQuCi0KLSAgICAgICAgQnkg
ZGVmYXVsdCwgaXQgcGx1cmFsaXplcyB0aGUgdHlwZSdzIG5hbWUgKGZvciBleGFtcGxlLCAncG9z
dCcKLSAgICAgICAgYmVjb21lcyAncG9zdHMnIGFuZCAncGVyc29uJyBiZWNvbWVzICdwZW9wbGUn
KS4gVG8gb3ZlcnJpZGUgdGhlCi0gICAgICAgIHBsdXJhbGl6YXRpb24gc2VlIFtwYXRoRm9yVHlw
ZV0oI21ldGhvZF9wYXRoRm9yVHlwZSkuCi0KLSAgICAgICAgSWYgYW4gSUQgaXMgc3BlY2lmaWVk
LCBpdCBhZGRzIHRoZSBJRCB0byB0aGUgcGF0aCBnZW5lcmF0ZWQKLSAgICAgICAgZm9yIHRoZSB0
eXBlLCBzZXBhcmF0ZWQgYnkgYSBgL2AuCi0KLSAgICAgICAgQG1ldGhvZCBidWlsZFVSTAotICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gaWQKLSAg
ICAgICAgQHJldHVybiB7U3RyaW5nfSB1cmwKLSAgICAgICovCi0gICAgICBidWlsZFVSTDogZnVu
Y3Rpb24odHlwZSwgaWQpIHsKLSAgICAgICAgdmFyIHVybCA9IFtdLAotICAgICAgICAgICAgaG9z
dCA9IGdldCh0aGlzLCAnaG9zdCcpLAotICAgICAgICAgICAgcHJlZml4ID0gdGhpcy51cmxQcmVm
aXgoKTsKLQotICAgICAgICBpZiAodHlwZSkgeyB1cmwucHVzaCh0aGlzLnBhdGhGb3JUeXBlKHR5
cGUpKTsgfQotICAgICAgICBpZiAoaWQpIHsgdXJsLnB1c2goaWQpOyB9Ci0KLSAgICAgICAgaWYg
KHByZWZpeCkgeyB1cmwudW5zaGlmdChwcmVmaXgpOyB9Ci0KLSAgICAgICAgdXJsID0gdXJsLmpv
aW4oJy8nKTsKLSAgICAgICAgaWYgKCFob3N0ICYmIHVybCkgeyB1cmwgPSAnLycgKyB1cmw7IH0K
LQotICAgICAgICByZXR1cm4gdXJsOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBt
ZXRob2QgdXJsUHJlZml4Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBwYXRoCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnRVcmwKLSAgICAgICAgQHJldHVy
biB7U3RyaW5nfSB1cmxQcmVmaXgKLSAgICAgICovCi0gICAgICB1cmxQcmVmaXg6IGZ1bmN0aW9u
KHBhdGgsIHBhcmVudFVSTCkgewotICAgICAgICB2YXIgaG9zdCA9IGdldCh0aGlzLCAnaG9zdCcp
LAotICAgICAgICAgICAgbmFtZXNwYWNlID0gZ2V0KHRoaXMsICduYW1lc3BhY2UnKSwKLSAgICAg
ICAgICAgIHVybCA9IFtdOwotCi0gICAgICAgIGlmIChwYXRoKSB7Ci0gICAgICAgICAgLy8gQWJz
b2x1dGUgcGF0aAotICAgICAgICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSB7Ci0gICAg
ICAgICAgICBpZiAoaG9zdCkgewotICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZSgxKTsK
LSAgICAgICAgICAgICAgdXJsLnB1c2goaG9zdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
Ly8gUmVsYXRpdmUgcGF0aAotICAgICAgICAgIH0gZWxzZSBpZiAoIS9eaHR0cChzKT86XC9cLy8u
dGVzdChwYXRoKSkgewotICAgICAgICAgICAgdXJsLnB1c2gocGFyZW50VVJMKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGhvc3QpIHsgdXJsLnB1c2goaG9z
dCk7IH0KLSAgICAgICAgICBpZiAobmFtZXNwYWNlKSB7IHVybC5wdXNoKG5hbWVzcGFjZSk7IH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXRoKSB7Ci0gICAgICAgICAgdXJsLnB1c2gocGF0
aCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdXJsLmpvaW4oJy8nKTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgICBEZXRlcm1pbmVzIHRoZSBwYXRobmFtZSBmb3IgYSBnaXZl
biB0eXBlLgotCi0gICAgICAgIEJ5IGRlZmF1bHQsIGl0IHBsdXJhbGl6ZXMgdGhlIHR5cGUncyBu
YW1lIChmb3IgZXhhbXBsZSwKLSAgICAgICAgJ3Bvc3QnIGJlY29tZXMgJ3Bvc3RzJyBhbmQgJ3Bl
cnNvbicgYmVjb21lcyAncGVvcGxlJykuCi0KLSAgICAgICAgIyMjIFBhdGhuYW1lIGN1c3RvbWl6
YXRpb24KLQotICAgICAgICBGb3IgZXhhbXBsZSBpZiB5b3UgaGF2ZSBhbiBvYmplY3QgTGluZUl0
ZW0gd2l0aCBhbgotICAgICAgICBlbmRwb2ludCBvZiAiL2xpbmVfaXRlbXMvIi4KLQotICAgICAg
ICBgYGBqcwotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIu
ZXh0ZW5kKHsKLSAgICAgICAgICBwYXRoRm9yVHlwZTogZnVuY3Rpb24odHlwZSkgewotICAgICAg
ICAgICAgdmFyIGRlY2FtZWxpemVkID0gRW1iZXIuU3RyaW5nLmRlY2FtZWxpemUodHlwZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gRW1iZXIuU3RyaW5nLnBsdXJhbGl6ZShkZWNhbWVsaXplZCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBw
YXRoRm9yVHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICAgICBAcmV0dXJu
IHtTdHJpbmd9IHBhdGgKLSAgICAgICoqLwotICAgICAgcGF0aEZvclR5cGU6IGZ1bmN0aW9uKHR5
cGUpIHsKLSAgICAgICAgdmFyIGNhbWVsaXplZCA9IEVtYmVyLlN0cmluZy5jYW1lbGl6ZSh0eXBl
KTsKLSAgICAgICAgcmV0dXJuIEVtYmVyLlN0cmluZy5wbHVyYWxpemUoY2FtZWxpemVkKTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUYWtlcyBhbiBhamF4IHJlc3BvbnNlLCBhbmQg
cmV0dXJucyBhIHJlbGV2YW50IGVycm9yLgotCi0gICAgICAgIFJldHVybmluZyBhIGBEUy5JbnZh
bGlkRXJyb3JgIGZyb20gdGhpcyBtZXRob2Qgd2lsbCBjYXVzZSB0aGUKLSAgICAgICAgcmVjb3Jk
IHRvIHRyYW5zaXRpb24gaW50byB0aGUgYGludmFsaWRgIHN0YXRlIGFuZCBtYWtlIHRoZQotICAg
ICAgICBgZXJyb3JzYCBvYmplY3QgYXZhaWxhYmxlIG9uIHRoZSByZWNvcmQuCi0KLSAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMuUkVTVEFk
YXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBhamF4RXJyb3I6IGZ1bmN0aW9uKGpxWEhSKSB7Ci0g
ICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9zdXBlcihqcVhIUik7Ci0KLSAgICAgICAgICAg
IGlmIChqcVhIUiAmJiBqcVhIUi5zdGF0dXMgPT09IDQyMikgewotICAgICAgICAgICAgICB2YXIg
anNvbkVycm9ycyA9IEVtYmVyLiQucGFyc2VKU09OKGpxWEhSLnJlc3BvbnNlVGV4dClbImVycm9y
cyJdOwotCi0gICAgICAgICAgICAgIHJldHVybiBuZXcgRFMuSW52YWxpZEVycm9yKGpzb25FcnJv
cnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0g
ICAgICAgIE5vdGU6IEFzIGEgY29ycmVjdG5lc3Mgb3B0aW1pemF0aW9uLCB0aGUgZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbiBvZgotICAgICAgICB0aGUgYGFqYXhFcnJvcmAgbWV0aG9kIHN0cmlwcyBv
dXQgdGhlIGB0aGVuYCBtZXRob2QgZnJvbSBqcXVlcnkncwotICAgICAgICBhamF4IHJlc3BvbnNl
IChqcVhIUikuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGpxWEhSJ3MKLSAgICAgICAg
YHRoZW5gIG1ldGhvZCBmdWxmaWxscyB0aGUgcHJvbWlzZSB3aXRoIGl0c2VsZiByZXN1bHRpbmcg
aW4gYQotICAgICAgICBjaXJjdWxhciAidGhlbmFibGUiIGNoYWluIHdoaWNoIG1heSBjYXVzZSBw
cm9ibGVtcyBmb3Igc29tZQotICAgICAgICBwcm9taXNlIGxpYnJhcmllcy4KLQotICAgICAgICBA
bWV0aG9kIGFqYXhFcnJvcgotICAgICAgICBAcGFyYW0gIHtPYmplY3R9IGpxWEhSCi0gICAgICAg
IEByZXR1cm4ge09iamVjdH0ganFYSFIKLSAgICAgICovCi0gICAgICBhamF4RXJyb3I6IGZ1bmN0
aW9uKGpxWEhSKSB7Ci0gICAgICAgIGlmIChqcVhIUiAmJiB0eXBlb2YganFYSFIgPT09ICdvYmpl
Y3QnKSB7Ci0gICAgICAgICAganFYSFIudGhlbiA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4ganFYSFI7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGFrZXMgYSBV
UkwsIGFuIEhUVFAgbWV0aG9kIGFuZCBhIGhhc2ggb2YgZGF0YSwgYW5kIG1ha2VzIGFuCi0gICAg
ICAgIEhUVFAgcmVxdWVzdC4KLQotICAgICAgICBXaGVuIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0
aCBhIHBheWxvYWQsIEVtYmVyIERhdGEgd2lsbCBjYWxsIGludG8gYGV4dHJhY3RTaW5nbGVgCi0g
ICAgICAgIG9yIGBleHRyYWN0QXJyYXlgIChkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgb3JpZ2lu
YWwgcXVlcnkgd2FzIGZvciBvbmUgcmVjb3JkIG9yCi0gICAgICAgIG1hbnkgcmVjb3JkcykuCi0K
LSAgICAgICAgQnkgZGVmYXVsdCwgYGFqYXhgIG1ldGhvZCBoYXMgdGhlIGZvbGxvd2luZyBiZWhh
dmlvcjoKLQotICAgICAgICAqIEl0IHNldHMgdGhlIHJlc3BvbnNlIGBkYXRhVHlwZWAgdG8gYCJq
c29uImAKLSAgICAgICAgKiBJZiB0aGUgSFRUUCBtZXRob2QgaXMgbm90IGAiR0VUImAsIGl0IHNl
dHMgdGhlIGBDb250ZW50LVR5cGVgIHRvIGJlCi0gICAgICAgICAgYGFwcGxpY2F0aW9uL2pzb247
IGNoYXJzZXQ9dXRmLThgCi0gICAgICAgICogSWYgdGhlIEhUVFAgbWV0aG9kIGlzIG5vdCBgIkdF
VCJgLCBpdCBzdHJpbmdpZmllcyB0aGUgZGF0YSBwYXNzZWQgaW4uIFRoZQotICAgICAgICAgIGRh
dGEgaXMgdGhlIHNlcmlhbGl6ZWQgcmVjb3JkIGluIHRoZSBjYXNlIG9mIGEgc2F2ZS4KLSAgICAg
ICAgKiBSZWdpc3RlcnMgc3VjY2VzcyBhbmQgZmFpbHVyZSBoYW5kbGVycy4KLQotICAgICAgICBA
bWV0aG9kIGFqYXgKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHVy
bAotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgcmVxdWVzdCB0eXBlIEdFVCwgUE9T
VCwgUFVULCBERUxFVEUgZXRjLgotICAgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaAotICAgICAg
ICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgYWpheDogZnVuY3Rp
b24odXJsLCB0eXBlLCBoYXNoKSB7Ci0gICAgICAgIHZhciBhZGFwdGVyID0gdGhpczsKLQotICAg
ICAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKLSAgICAgICAgICBoYXNoID0gYWRhcHRlci5hamF4T3B0aW9ucyh1cmwsIHR5cGUsIGhh
c2gpOwotCi0gICAgICAgICAgaGFzaC5zdWNjZXNzID0gZnVuY3Rpb24oanNvbikgewotICAgICAg
ICAgICAgRW1iZXIucnVuKG51bGwsIHJlc29sdmUsIGpzb24pOwotICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICBoYXNoLmVycm9yID0gZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhy
b3duKSB7Ci0gICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0LCBhZGFwdGVyLmFqYXhF
cnJvcihqcVhIUikpOwotICAgICAgICAgIH07Ci0KLSAgICAgICAgICBFbWJlci4kLmFqYXgoaGFz
aCk7Ci0gICAgICAgIH0sICJEUzogUmVzdEFkYXB0ZXIjYWpheCAiICsgdHlwZSArICIgdG8gIiAr
IHVybCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBhamF4T3B0aW9u
cwotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsCi0gICAgICAg
IEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSByZXF1ZXN0IHR5cGUgR0VULCBQT1NULCBQVVQsIERF
TEVURSBldGMuCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoCi0gICAgICAgIEByZXR1cm4g
e09iamVjdH0gaGFzaAotICAgICAgKi8KLSAgICAgIGFqYXhPcHRpb25zOiBmdW5jdGlvbih1cmws
IHR5cGUsIGhhc2gpIHsKLSAgICAgICAgaGFzaCA9IGhhc2ggfHwge307Ci0gICAgICAgIGhhc2gu
dXJsID0gdXJsOwotICAgICAgICBoYXNoLnR5cGUgPSB0eXBlOwotICAgICAgICBoYXNoLmRhdGFU
eXBlID0gJ2pzb24nOwotICAgICAgICBoYXNoLmNvbnRleHQgPSB0aGlzOwotCi0gICAgICAgIGlm
IChoYXNoLmRhdGEgJiYgdHlwZSAhPT0gJ0dFVCcpIHsKLSAgICAgICAgICBoYXNoLmNvbnRlbnRU
eXBlID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnOwotICAgICAgICAgIGhhc2gu
ZGF0YSA9IEpTT04uc3RyaW5naWZ5KGhhc2guZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgaGVhZGVycyA9IGdldCh0aGlzLCAnaGVhZGVycycpOwotICAgICAgICBpZiAoaGVhZGVycyAh
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgaGFzaC5iZWZvcmVTZW5kID0gZnVuY3Rpb24gKHho
cikgewotICAgICAgICAgICAgZm9yRWFjaC5jYWxsKEVtYmVyLmtleXMoaGVhZGVycyksIGZ1bmN0
aW9uKGtleSkgewotICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIGhlYWRl
cnNba2V5XSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9OwotICAgICAgICB9Ci0KLQot
ICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgIH0KLQotICAgIH0pOwotCi0gICAgX19leHBvcnRz
X19bImRlZmF1bHQiXSA9IFJFU1RBZGFwdGVyOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9s
aWIvY29yZSIsIAotICBbImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAg
ICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAq
LwotCi0gICAgLyoqCi0gICAgICBBbGwgRW1iZXIgRGF0YSBtZXRob2RzIGFuZCBmdW5jdGlvbnMg
YXJlIGRlZmluZWQgaW5zaWRlIG9mIHRoaXMgbmFtZXNwYWNlLgotCi0gICAgICBAY2xhc3MgRFMK
LSAgICAgIEBzdGF0aWMKLSAgICAqLwotICAgIHZhciBEUzsKLSAgICBpZiAoJ3VuZGVmaW5lZCcg
PT09IHR5cGVvZiBEUykgewotICAgICAgLyoqCi0gICAgICAgIEBwcm9wZXJ0eSBWRVJTSU9OCi0g
ICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICBAZGVmYXVsdCAnMS4wLjAtYmV0YS44LjJhNjhj
NjNhJwotICAgICAgICBAc3RhdGljCi0gICAgICAqLwotICAgICAgRFMgPSBFbWJlci5OYW1lc3Bh
Y2UuY3JlYXRlKHsKLSAgICAgICAgVkVSU0lPTjogJzEuMC4wLWJldGEuOC4yYTY4YzYzYScKLSAg
ICAgIH0pOwotCi0gICAgICBpZiAoRW1iZXIubGlicmFyaWVzKSB7Ci0gICAgICAgIEVtYmVyLmxp
YnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCdFbWJlciBEYXRhJywgRFMuVkVSU0lPTik7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IERTOwotICB9KTsK
LWRlZmluZSgiZW1iZXItZGF0YS9saWIvZW1iZXItaW5pdGlhbGl6ZXIiLCAKLSAgWyIuL3NldHVw
LWNvbnRhaW5lciJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18pIHsKLSAgICAidXNlIHN0
cmljdCI7Ci0gICAgdmFyIHNldHVwQ29udGFpbmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0
Il07Ci0KLSAgICB2YXIgSyA9IEVtYmVyLks7Ci0KLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1i
ZXItZGF0YQotICAgICovCi0KLSAgICAvKioKLQotICAgICAgVGhpcyBjb2RlIGluaXRpYWxpemVz
IEVtYmVyLURhdGEgb250byBhbiBFbWJlciBhcHBsaWNhdGlvbi4KLQotICAgICAgSWYgYW4gRW1i
ZXIuanMgZGV2ZWxvcGVyIGRlZmluZXMgYSBzdWJjbGFzcyBvZiBEUy5TdG9yZSBvbiB0aGVpciBh
cHBsaWNhdGlvbiwKLSAgICAgIGFzIGBBcHAuQXBwbGljYXRpb25TdG9yZWAgKG9yIHZpYSBhIG1v
ZHVsZSBzeXN0ZW0gdGhhdCByZXNvbHZlcyB0byBgc3RvcmU6YXBwbGljYXRpb25gKQotICAgICAg
dGhpcyBjb2RlIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YW50aWF0ZSBpdCBhbmQgbWFrZSBpdCBh
dmFpbGFibGUgb24gdGhlCi0gICAgICByb3V0ZXIuCi0KLSAgICAgIEFkZGl0aW9uYWxseSwgYWZ0
ZXIgYW4gYXBwbGljYXRpb24ncyBjb250cm9sbGVycyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHRoZXkg
d2lsbAotICAgICAgZWFjaCBoYXZlIHRoZSBzdG9yZSBtYWRlIGF2YWlsYWJsZSB0byB0aGVtLgot
Ci0gICAgICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhbiBFbWJlci5qcyBhcHBsaWNhdGlvbiB3aXRo
IHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKLQotICAgICAgQXBwLkFwcGxpY2F0aW9uU3RvcmUgPSBE
Uy5TdG9yZS5leHRlbmQoewotICAgICAgICBhZGFwdGVyOiAnY3VzdG9tJwotICAgICAgfSk7Ci0K
LSAgICAgIEFwcC5Qb3N0c0NvbnRyb2xsZXIgPSBFbWJlci5BcnJheUNvbnRyb2xsZXIuZXh0ZW5k
KHsKLSAgICAgICAgLy8gLi4uCi0gICAgICB9KTsKLQotICAgICAgV2hlbiB0aGUgYXBwbGljYXRp
b24gaXMgaW5pdGlhbGl6ZWQsIGBBcHAuQXBwbGljYXRpb25TdG9yZWAgd2lsbCBhdXRvbWF0aWNh
bGx5IGJlCi0gICAgICBpbnN0YW50aWF0ZWQsIGFuZCB0aGUgaW5zdGFuY2Ugb2YgYEFwcC5Qb3N0
c0NvbnRyb2xsZXJgIHdpbGwgaGF2ZSBpdHMgYHN0b3JlYAotICAgICAgcHJvcGVydHkgc2V0IHRv
IHRoYXQgaW5zdGFuY2UuCi0KLSAgICAgIE5vdGUgdGhhdCB0aGlzIGNvZGUgd2lsbCBvbmx5IGJl
IHJ1biBpZiB0aGUgYGVtYmVyLWFwcGxpY2F0aW9uYCBwYWNrYWdlIGlzCi0gICAgICBsb2FkZWQu
IElmIEVtYmVyIERhdGEgaXMgYmVpbmcgdXNlZCBpbiBhbiBlbnZpcm9ubWVudCBvdGhlciB0aGFu
IGEKLSAgICAgIHR5cGljYWwgYXBwbGljYXRpb24gKGUuZy4sIG5vZGUuanMgd2hlcmUgb25seSBg
ZW1iZXItcnVudGltZWAgaXMgYXZhaWxhYmxlKSwKLSAgICAgIHRoaXMgY29kZSB3aWxsIGJlIGln
bm9yZWQuCi0gICAgKi8KLQotICAgIEVtYmVyLm9uTG9hZCgnRW1iZXIuQXBwbGljYXRpb24nLCBm
dW5jdGlvbihBcHBsaWNhdGlvbikgewotCi0gICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7
Ci0gICAgICAgIG5hbWU6ICAgICAgICJlbWJlci1kYXRhIiwKLSAgICAgICAgaW5pdGlhbGl6ZTog
c2V0dXBDb250YWluZXIKLSAgICAgIH0pOwotCi0gICAgICAvLyBEZXByZWNhdGVkIGluaXRpYWxp
emVycyB0byBzYXRpc2Z5IG9sZCBjb2RlIHRoYXQgZGVwZW5kZWQgb24gdGhlbQotCi0gICAgICBB
cHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgIG5hbWU6ICAgICAgICJzdG9yZSIsCi0g
ICAgICAgIGFmdGVyOiAgICAgICJlbWJlci1kYXRhIiwKLSAgICAgICAgaW5pdGlhbGl6ZTogSwot
ICAgICAgfSk7Ci0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgbmFt
ZTogICAgICAgImFjdGl2ZU1vZGVsQWRhcHRlciIsCi0gICAgICAgIGJlZm9yZTogICAgICJzdG9y
ZSIsCi0gICAgICAgIGluaXRpYWxpemU6IEsKLSAgICAgIH0pOwotCi0gICAgICBBcHBsaWNhdGlv
bi5pbml0aWFsaXplcih7Ci0gICAgICAgIG5hbWU6ICAgICAgICJ0cmFuc2Zvcm1zIiwKLSAgICAg
ICAgYmVmb3JlOiAgICAgInN0b3JlIiwKLSAgICAgICAgaW5pdGlhbGl6ZTogSwotICAgICAgfSk7
Ci0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgbmFtZTogICAgICAg
ImRhdGEtYWRhcHRlciIsCi0gICAgICAgIGJlZm9yZTogICAgICJzdG9yZSIsCi0gICAgICAgIGlu
aXRpYWxpemU6IEsKLSAgICAgIH0pOwotCi0gICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7
Ci0gICAgICAgIG5hbWU6ICAgICAgICJpbmplY3RTdG9yZSIsCi0gICAgICAgIGJlZm9yZTogICAg
ICJzdG9yZSIsCi0gICAgICAgIGluaXRpYWxpemU6IEsKLSAgICAgIH0pOwotICAgIH0pOwotICB9
KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvZXh0L2RhdGUiLCAKLSAgW10sCi0gIGZ1bmN0aW9u
KCkgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0
YQotICAgICovCi0KLSAgICAvKioKLSAgICAgIERhdGUucGFyc2Ugd2l0aCBwcm9ncmVzc2l2ZSBl
bmhhbmNlbWVudCBmb3IgSVNPIDg2MDEgPGh0dHBzOi8vZ2l0aHViLmNvbS9jc25vdmVyL2pzLWlz
bzg2MDE+Ci0KLSAgICAgIMKpIDIwMTEgQ29saW4gU25vdmVyIDxodHRwOi8vemV0YWZsZWV0LmNv
bT4KLQotICAgICAgUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0KLSAgICAgIEBjbGFzcyBE
YXRlCi0gICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICBAc3RhdGljCi0gICAgKi8KLSAgICBF
bWJlci5EYXRlID0gRW1iZXIuRGF0ZSB8fCB7fTsKLQotICAgIHZhciBvcmlnUGFyc2UgPSBEYXRl
LnBhcnNlLCBudW1lcmljS2V5cyA9IFsgMSwgNCwgNSwgNiwgNywgMTAsIDExIF07Ci0KLSAgICAv
KioKLSAgICAgIEBtZXRob2QgcGFyc2UKLSAgICAgIEBwYXJhbSBkYXRlCi0gICAgKi8KLSAgICBF
bWJlci5EYXRlLnBhcnNlID0gZnVuY3Rpb24gKGRhdGUpIHsKLSAgICAgICAgdmFyIHRpbWVzdGFt
cCwgc3RydWN0LCBtaW51dGVzT2Zmc2V0ID0gMDsKLQotICAgICAgICAvLyBFUzUgwqcxNS45LjQu
MiBzdGF0ZXMgdGhhdCB0aGUgc3RyaW5nIHNob3VsZCBhdHRlbXB0IHRvIGJlIHBhcnNlZCBhcyBh
IERhdGUgVGltZSBTdHJpbmcgRm9ybWF0IHN0cmluZwotICAgICAgICAvLyBiZWZvcmUgZmFsbGlu
ZyBiYWNrIHRvIGFueSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBkYXRlIHBhcnNpbmcsIHNvIHRo
YXTigJlzIHdoYXQgd2UgZG8sIGV2ZW4gaWYgbmF0aXZlCi0gICAgICAgIC8vIGltcGxlbWVudGF0
aW9ucyBjb3VsZCBiZSBmYXN0ZXIKLSAgICAgICAgLy8gICAgICAgICAgICAgIDEgWVlZWSAgICAg
ICAgICAgICAgICAyIE1NICAgICAgIDMgREQgICAgICAgICAgIDQgSEggICAgNSBtbSAgICAgICA2
IHNzICAgICAgICA3IG1zZWMgICAgICAgIDggWiA5IMKxICAgIDEwIHR6SEggICAgMTEgdHptbQot
ICAgICAgICBpZiAoKHN0cnVjdCA9IC9eKFxkezR9fFsrXC1dXGR7Nn0pKD86LShcZHsyfSkoPzot
KFxkezJ9KSk/KT8oPzpUKFxkezJ9KTooXGR7Mn0pKD86OihcZHsyfSkoPzpcLihcZHszfSkpPyk/
KD86KFopfChbK1wtXSkoXGR7Mn0pKD86OihcZHsyfSkpPyk/KT8kLy5leGVjKGRhdGUpKSkgewot
ICAgICAgICAgICAgLy8gYXZvaWQgTmFOIHRpbWVzdGFtcHMgY2F1c2VkIGJ5IOKAnHVuZGVmaW5l
ZOKAnSB2YWx1ZXMgYmVpbmcgcGFzc2VkIHRvIERhdGUuVVRDCi0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMCwgazsgKGsgPSBudW1lcmljS2V5c1tpXSk7ICsraSkgewotICAgICAgICAgICAgICAg
IHN0cnVjdFtrXSA9ICtzdHJ1Y3Rba10gfHwgMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gYWxsb3cgdW5kZWZpbmVkIGRheXMgYW5kIG1vbnRocwotICAgICAgICAgICAgc3RydWN0
WzJdID0gKCtzdHJ1Y3RbMl0gfHwgMSkgLSAxOwotICAgICAgICAgICAgc3RydWN0WzNdID0gK3N0
cnVjdFszXSB8fCAxOwotCi0gICAgICAgICAgICBpZiAoc3RydWN0WzhdICE9PSAnWicgJiYgc3Ry
dWN0WzldICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBtaW51dGVzT2Zmc2V0ID0g
c3RydWN0WzEwXSAqIDYwICsgc3RydWN0WzExXTsKLQotICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3RbOV0gPT09ICcrJykgewotICAgICAgICAgICAgICAgICAgICBtaW51dGVzT2Zmc2V0ID0gMCAt
IG1pbnV0ZXNPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB0aW1lc3RhbXAgPSBEYXRlLlVUQyhzdHJ1Y3RbMV0sIHN0cnVjdFsyXSwgc3RydWN0
WzNdLCBzdHJ1Y3RbNF0sIHN0cnVjdFs1XSArIG1pbnV0ZXNPZmZzZXQsIHN0cnVjdFs2XSwgc3Ry
dWN0WzddKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRpbWVzdGFt
cCA9IG9yaWdQYXJzZSA/IG9yaWdQYXJzZShkYXRlKSA6IE5hTjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiB0aW1lc3RhbXA7Ci0gICAgfTsKLQotICAgIGlmIChFbWJlci5FWFRFTkRfUFJP
VE9UWVBFUyA9PT0gdHJ1ZSB8fCBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5EYXRlKSB7Ci0gICAg
ICBEYXRlLnBhcnNlID0gRW1iZXIuRGF0ZS5wYXJzZTsKLSAgICB9Ci0gIH0pOwotZGVmaW5lKCJl
bWJlci1kYXRhL2xpYi9pbml0aWFsaXplcnMvZGF0YV9hZGFwdGVyIiwgCi0gIFsiLi4vc3lzdGVt
L2RlYnVnL2RlYnVnX2FkYXB0ZXIiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5j
eTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIERlYnVnQWRh
cHRlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBDb25m
aWd1cmVzIGEgY29udGFpbmVyIHdpdGggaW5qZWN0aW9ucyBvbiBFbWJlciBhcHBsaWNhdGlvbnMK
LSAgICAgIGZvciB0aGUgRW1iZXItRGF0YSBzdG9yZS4gQWNjZXB0cyBhbiBvcHRpb25hbCBuYW1l
c3BhY2UgYXJndW1lbnQuCi0KLSAgICAgIEBtZXRob2QgaW5pdGlhbGl6ZVN0b3JlSW5qZWN0aW9u
cwotICAgICAgQHBhcmFtIHtFbWJlci5Db250YWluZXJ9IGNvbnRhaW5lcgotICAgICovCi0gICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGluaXRpYWxpemVEZWJ1Z0FkYXB0ZXIo
Y29udGFpbmVyKXsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignZGF0YS1hZGFwdGVyOm1haW4n
LCBEZWJ1Z0FkYXB0ZXIpOwotICAgIH07Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9p
bml0aWFsaXplcnMvc3RvcmUiLCAKLSAgWyIuLi9zZXJpYWxpemVycyIsIi4uL2FkYXB0ZXJzIiwi
Li4vc3lzdGVtL2NvbnRhaW5lcl9wcm94eSIsIi4uL3N5c3RlbS9zdG9yZSIsImV4cG9ydHMiXSwK
LSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICB2YXIgSlNPTlNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3kxX18uSlNPTlNlcmlhbGl6ZXI7
Ci0gICAgdmFyIFJFU1RTZXJpYWxpemVyID0gX19kZXBlbmRlbmN5MV9fLlJFU1RTZXJpYWxpemVy
OwotICAgIHZhciBSRVNUQWRhcHRlciA9IF9fZGVwZW5kZW5jeTJfXy5SRVNUQWRhcHRlcjsKLSAg
ICB2YXIgQ29udGFpbmVyUHJveHkgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICB2
YXIgU3RvcmUgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgIC8qKgotICAgICAg
Q29uZmlndXJlcyBhIGNvbnRhaW5lciBmb3IgdXNlIHdpdGggYW4gRW1iZXItRGF0YQotICAgICAg
c3RvcmUuIEFjY2VwdHMgYW4gb3B0aW9uYWwgbmFtZXNwYWNlIGFyZ3VtZW50LgotCi0gICAgICBA
bWV0aG9kIGluaXRpYWxpemVTdG9yZQotICAgICAgQHBhcmFtIHtFbWJlci5Db250YWluZXJ9IGNv
bnRhaW5lcgotICAgICAgQHBhcmFtIHtPYmplY3R9IFthcHBsaWNhdGlvbl0gYW4gYXBwbGljYXRp
b24gbmFtZXNwYWNlCi0gICAgKi8KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rp
b24gaW5pdGlhbGl6ZVN0b3JlKGNvbnRhaW5lciwgYXBwbGljYXRpb24pewotICAgICAgRW1iZXIu
ZGVwcmVjYXRlKCdTcGVjaWZ5aW5nIGEgY3VzdG9tIFN0b3JlIGZvciBFbWJlciBEYXRhIG9uIHlv
dXIgZ2xvYmFsIG5hbWVzcGFjZSBhcyBgQXBwLlN0b3JlYCAnICsKLSAgICAgICAgICAgICAgICAg
ICAgICAnaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBgQXBwLkFwcGxpY2F0aW9uU3Rv
cmVgIGluc3RlYWQuJywgIShhcHBsaWNhdGlvbiAmJiBhcHBsaWNhdGlvbi5TdG9yZSkpOwotCi0g
ICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3N0b3JlOm1haW4nLCBjb250YWluZXIubG9va3VwRmFj
dG9yeSgnc3RvcmU6YXBwbGljYXRpb24nKSB8fCAoYXBwbGljYXRpb24gJiYgYXBwbGljYXRpb24u
U3RvcmUpIHx8IFN0b3JlKTsKLQotICAgICAgLy8gYWxsb3cgb2xkZXIgbmFtZXMgdG8gYmUgbG9v
a2VkIHVwCi0KLSAgICAgIHZhciBwcm94eSA9IG5ldyBDb250YWluZXJQcm94eShjb250YWluZXIp
OwotICAgICAgcHJveHkucmVnaXN0ZXJEZXByZWNhdGlvbnMoWwotICAgICAgICB7ZGVwcmVjYXRl
ZDogJ3NlcmlhbGl6ZXI6X2RlZmF1bHQnLCAgdmFsaWQ6ICdzZXJpYWxpemVyOi1kZWZhdWx0J30s
Ci0gICAgICAgIHtkZXByZWNhdGVkOiAnc2VyaWFsaXplcjpfcmVzdCcsICAgICB2YWxpZDogJ3Nl
cmlhbGl6ZXI6LXJlc3QnfSwKLSAgICAgICAge2RlcHJlY2F0ZWQ6ICdhZGFwdGVyOl9yZXN0Jywg
ICAgICAgIHZhbGlkOiAnYWRhcHRlcjotcmVzdCd9Ci0gICAgICBdKTsKLQotICAgICAgLy8gbmV3
IGdvIGZvcndhcmQgcGF0aHMKLSAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcignc2VyaWFsaXplcjot
ZGVmYXVsdCcsIEpTT05TZXJpYWxpemVyKTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcignc2Vy
aWFsaXplcjotcmVzdCcsIFJFU1RTZXJpYWxpemVyKTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3Rl
cignYWRhcHRlcjotcmVzdCcsIFJFU1RBZGFwdGVyKTsKLQotICAgICAgLy8gRWFnZXJseSBnZW5l
cmF0ZSB0aGUgc3RvcmUgc28gZGVmYXVsdFN0b3JlIGlzIHBvcHVsYXRlZC4KLSAgICAgIC8vIFRP
RE86IERvIHRoaXMgaW4gYSBmaW5pc2hlciBob29rCi0gICAgICBjb250YWluZXIubG9va3VwKCdz
dG9yZTptYWluJyk7Ci0gICAgfTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL2luaXRp
YWxpemVycy9zdG9yZV9pbmplY3Rpb25zIiwgCi0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihf
X2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIENvbmZpZ3Vy
ZXMgYSBjb250YWluZXIgd2l0aCBpbmplY3Rpb25zIG9uIEVtYmVyIGFwcGxpY2F0aW9ucwotICAg
ICAgZm9yIHRoZSBFbWJlci1EYXRhIHN0b3JlLiBBY2NlcHRzIGFuIG9wdGlvbmFsIG5hbWVzcGFj
ZSBhcmd1bWVudC4KLQotICAgICAgQG1ldGhvZCBpbml0aWFsaXplU3RvcmVJbmplY3Rpb25zCi0g
ICAgICBAcGFyYW0ge0VtYmVyLkNvbnRhaW5lcn0gY29udGFpbmVyCi0gICAgKi8KLSAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gaW5pdGlhbGl6ZVN0b3JlSW5qZWN0aW9ucyhj
b250YWluZXIpewotICAgICAgY29udGFpbmVyLmluamVjdGlvbignY29udHJvbGxlcicsICAgJ3N0
b3JlJywgJ3N0b3JlOm1haW4nKTsKLSAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3JvdXRlJywg
ICAgICAgICdzdG9yZScsICdzdG9yZTptYWluJyk7Ci0gICAgICBjb250YWluZXIuaW5qZWN0aW9u
KCdzZXJpYWxpemVyJywgICAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOwotICAgICAgY29udGFpbmVy
LmluamVjdGlvbignZGF0YS1hZGFwdGVyJywgJ3N0b3JlJywgJ3N0b3JlOm1haW4nKTsKLSAgICB9
OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvaW5pdGlhbGl6ZXJzL3RyYW5zZm9ybXMi
LCAKLSAgWyIuLi90cmFuc2Zvcm1zIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBCb29sZWFu
VHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MV9fLkJvb2xlYW5UcmFuc2Zvcm07Ci0gICAgdmFyIERh
dGVUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kxX18uRGF0ZVRyYW5zZm9ybTsKLSAgICB2YXIgU3Ry
aW5nVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MV9fLlN0cmluZ1RyYW5zZm9ybTsKLSAgICB2YXIg
TnVtYmVyVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MV9fLk51bWJlclRyYW5zZm9ybTsKLQotICAg
IC8qKgotICAgICAgQ29uZmlndXJlcyBhIGNvbnRhaW5lciBmb3IgdXNlIHdpdGggRW1iZXItRGF0
YQotICAgICAgdHJhbnNmb3Jtcy4KLQotICAgICAgQG1ldGhvZCBpbml0aWFsaXplVHJhbnNmb3Jt
cwotICAgICAgQHBhcmFtIHtFbWJlci5Db250YWluZXJ9IGNvbnRhaW5lcgotICAgICovCi0gICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGluaXRpYWxpemVUcmFuc2Zvcm1zKGNv
bnRhaW5lcil7Ci0gICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3RyYW5zZm9ybTpib29sZWFuJywg
Qm9vbGVhblRyYW5zZm9ybSk7Ci0gICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3RyYW5zZm9ybTpk
YXRlJywgICAgRGF0ZVRyYW5zZm9ybSk7Ci0gICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3RyYW5z
Zm9ybTpudW1iZXInLCAgTnVtYmVyVHJhbnNmb3JtKTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3Rl
cigndHJhbnNmb3JtOnN0cmluZycsICBTdHJpbmdUcmFuc2Zvcm0pOwotICAgIH07Ci0gIH0pOwot
ZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9tYWluIiwgCi0gIFsiLi9jb3JlIiwiLi9leHQvZGF0ZSIs
Ii4vc3lzdGVtL3N0b3JlIiwiLi9zeXN0ZW0vbW9kZWwiLCIuL3N5c3RlbS9jaGFuZ2VzIiwiLi9z
eXN0ZW0vYWRhcHRlciIsIi4vc3lzdGVtL2RlYnVnIiwiLi9zeXN0ZW0vcmVjb3JkX2FycmF5cyIs
Ii4vc3lzdGVtL3JlY29yZF9hcnJheV9tYW5hZ2VyIiwiLi9hZGFwdGVycyIsIi4vc2VyaWFsaXpl
cnMvanNvbl9zZXJpYWxpemVyIiwiLi9zZXJpYWxpemVycy9yZXN0X3NlcmlhbGl6ZXIiLCIuLi8u
Li9lbWJlci1pbmZsZWN0b3IvbGliL21haW4iLCIuLi8uLi9hY3RpdmVtb2RlbC1hZGFwdGVyL2xp
Yi9tYWluIiwiLi90cmFuc2Zvcm1zIiwiLi9zeXN0ZW0vcmVsYXRpb25zaGlwcyIsIi4vZW1iZXIt
aW5pdGlhbGl6ZXIiLCIuL3NldHVwLWNvbnRhaW5lciIsIi4vc3lzdGVtL2NvbnRhaW5lcl9wcm94
eSIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9f
ZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5k
ZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5
MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVf
XywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywg
X19kZXBlbmRlbmN5MTlfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
LyoqCi0gICAgICBFbWJlciBEYXRhCi0KLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICAg
QG1haW4gZW1iZXItZGF0YQotICAgICovCi0KLSAgICAvLyBzdXBwb3J0IFJTVlAgMi54IHZpYSBy
ZXNvbHZlLCAgYnV0IHByZWZlciBSU1ZQIDMueCdzIFByb21pc2UuY2FzdAotICAgIEVtYmVyLlJT
VlAuUHJvbWlzZS5jYXN0ID0gRW1iZXIuUlNWUC5Qcm9taXNlLmNhc3QgfHwgRW1iZXIuUlNWUC5y
ZXNvbHZlOwotCi0gICAgdmFyIERTID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAg
ICB2YXIgU3RvcmUgPSBfX2RlcGVuZGVuY3kzX18uU3RvcmU7Ci0gICAgdmFyIFByb21pc2VBcnJh
eSA9IF9fZGVwZW5kZW5jeTNfXy5Qcm9taXNlQXJyYXk7Ci0gICAgdmFyIFByb21pc2VPYmplY3Qg
PSBfX2RlcGVuZGVuY3kzX18uUHJvbWlzZU9iamVjdDsKLSAgICB2YXIgTW9kZWwgPSBfX2RlcGVu
ZGVuY3k0X18uTW9kZWw7Ci0gICAgdmFyIEVycm9ycyA9IF9fZGVwZW5kZW5jeTRfXy5FcnJvcnM7
Ci0gICAgdmFyIFJvb3RTdGF0ZSA9IF9fZGVwZW5kZW5jeTRfXy5Sb290U3RhdGU7Ci0gICAgdmFy
IGF0dHIgPSBfX2RlcGVuZGVuY3k0X18uYXR0cjsKLSAgICB2YXIgQXR0cmlidXRlQ2hhbmdlID0g
X19kZXBlbmRlbmN5NV9fLkF0dHJpYnV0ZUNoYW5nZTsKLSAgICB2YXIgUmVsYXRpb25zaGlwQ2hh
bmdlID0gX19kZXBlbmRlbmN5NV9fLlJlbGF0aW9uc2hpcENoYW5nZTsKLSAgICB2YXIgUmVsYXRp
b25zaGlwQ2hhbmdlQWRkID0gX19kZXBlbmRlbmN5NV9fLlJlbGF0aW9uc2hpcENoYW5nZUFkZDsK
LSAgICB2YXIgUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlID0gX19kZXBlbmRlbmN5NV9fLlJlbGF0
aW9uc2hpcENoYW5nZVJlbW92ZTsKLSAgICB2YXIgT25lVG9NYW55Q2hhbmdlID0gX19kZXBlbmRl
bmN5NV9fLk9uZVRvTWFueUNoYW5nZTsKLSAgICB2YXIgTWFueVRvTm9uZUNoYW5nZSA9IF9fZGVw
ZW5kZW5jeTVfXy5NYW55VG9Ob25lQ2hhbmdlOwotICAgIHZhciBPbmVUb09uZUNoYW5nZSA9IF9f
ZGVwZW5kZW5jeTVfXy5PbmVUb09uZUNoYW5nZTsKLSAgICB2YXIgTWFueVRvTWFueUNoYW5nZSA9
IF9fZGVwZW5kZW5jeTVfXy5NYW55VG9NYW55Q2hhbmdlOwotICAgIHZhciBJbnZhbGlkRXJyb3Ig
PSBfX2RlcGVuZGVuY3k2X18uSW52YWxpZEVycm9yOwotICAgIHZhciBBZGFwdGVyID0gX19kZXBl
bmRlbmN5Nl9fLkFkYXB0ZXI7Ci0gICAgdmFyIERlYnVnQWRhcHRlciA9IF9fZGVwZW5kZW5jeTdf
X1siZGVmYXVsdCJdOwotICAgIHZhciBSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5jeThfXy5SZWNv
cmRBcnJheTsKLSAgICB2YXIgRmlsdGVyZWRSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5jeThfXy5G
aWx0ZXJlZFJlY29yZEFycmF5OwotICAgIHZhciBBZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkg
PSBfX2RlcGVuZGVuY3k4X18uQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5OwotICAgIHZhciBN
YW55QXJyYXkgPSBfX2RlcGVuZGVuY3k4X18uTWFueUFycmF5OwotICAgIHZhciBSZWNvcmRBcnJh
eU1hbmFnZXIgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLSAgICB2YXIgUkVTVEFkYXB0
ZXIgPSBfX2RlcGVuZGVuY3kxMF9fLlJFU1RBZGFwdGVyOwotICAgIHZhciBGaXh0dXJlQWRhcHRl
ciA9IF9fZGVwZW5kZW5jeTEwX18uRml4dHVyZUFkYXB0ZXI7Ci0gICAgdmFyIEpTT05TZXJpYWxp
emVyID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBSRVNUU2VyaWFsaXpl
ciA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICB2YXIgQWN0aXZlTW9kZWxBZGFw
dGVyID0gX19kZXBlbmRlbmN5MTRfXy5BY3RpdmVNb2RlbEFkYXB0ZXI7Ci0gICAgdmFyIEFjdGl2
ZU1vZGVsU2VyaWFsaXplciA9IF9fZGVwZW5kZW5jeTE0X18uQWN0aXZlTW9kZWxTZXJpYWxpemVy
OwotICAgIHZhciBFbWJlZGRlZFJlY29yZHNNaXhpbiA9IF9fZGVwZW5kZW5jeTE0X18uRW1iZWRk
ZWRSZWNvcmRzTWl4aW47Ci0KLSAgICB2YXIgVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MTVfXy5U
cmFuc2Zvcm07Ci0gICAgdmFyIERhdGVUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kxNV9fLkRhdGVU
cmFuc2Zvcm07Ci0gICAgdmFyIE51bWJlclRyYW5zZm9ybSA9IF9fZGVwZW5kZW5jeTE1X18uTnVt
YmVyVHJhbnNmb3JtOwotICAgIHZhciBTdHJpbmdUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kxNV9f
LlN0cmluZ1RyYW5zZm9ybTsKLSAgICB2YXIgQm9vbGVhblRyYW5zZm9ybSA9IF9fZGVwZW5kZW5j
eTE1X18uQm9vbGVhblRyYW5zZm9ybTsKLQotICAgIHZhciBoYXNNYW55ID0gX19kZXBlbmRlbmN5
MTZfXy5oYXNNYW55OwotICAgIHZhciBiZWxvbmdzVG8gPSBfX2RlcGVuZGVuY3kxNl9fLmJlbG9u
Z3NUbzsKLSAgICB2YXIgc2V0dXBDb250YWluZXIgPSBfX2RlcGVuZGVuY3kxOF9fWyJkZWZhdWx0
Il07Ci0KLSAgICB2YXIgQ29udGFpbmVyUHJveHkgPSBfX2RlcGVuZGVuY3kxOV9fWyJkZWZhdWx0
Il07Ci0KLSAgICBEUy5TdG9yZSAgICAgICAgID0gU3RvcmU7Ci0gICAgRFMuUHJvbWlzZUFycmF5
ICA9IFByb21pc2VBcnJheTsKLSAgICBEUy5Qcm9taXNlT2JqZWN0ID0gUHJvbWlzZU9iamVjdDsK
LQotICAgIERTLk1vZGVsICAgICA9IE1vZGVsOwotICAgIERTLlJvb3RTdGF0ZSA9IFJvb3RTdGF0
ZTsKLSAgICBEUy5hdHRyICAgICAgPSBhdHRyOwotICAgIERTLkVycm9ycyAgICA9IEVycm9yczsK
LQotICAgIERTLkF0dHJpYnV0ZUNoYW5nZSAgICAgICA9IEF0dHJpYnV0ZUNoYW5nZTsKLSAgICBE
Uy5SZWxhdGlvbnNoaXBDaGFuZ2UgICAgPSBSZWxhdGlvbnNoaXBDaGFuZ2U7Ci0gICAgRFMuUmVs
YXRpb25zaGlwQ2hhbmdlQWRkID0gUmVsYXRpb25zaGlwQ2hhbmdlQWRkOwotICAgIERTLk9uZVRv
TWFueUNoYW5nZSAgICAgICA9IE9uZVRvTWFueUNoYW5nZTsKLSAgICBEUy5NYW55VG9Ob25lQ2hh
bmdlICAgICAgPSBPbmVUb01hbnlDaGFuZ2U7Ci0gICAgRFMuT25lVG9PbmVDaGFuZ2UgICAgICAg
ID0gT25lVG9PbmVDaGFuZ2U7Ci0gICAgRFMuTWFueVRvTWFueUNoYW5nZSAgICAgID0gTWFueVRv
TWFueUNoYW5nZTsKLQotICAgIERTLkFkYXB0ZXIgICAgICA9IEFkYXB0ZXI7Ci0gICAgRFMuSW52
YWxpZEVycm9yID0gSW52YWxpZEVycm9yOwotCi0gICAgRFMuRGVidWdBZGFwdGVyID0gRGVidWdB
ZGFwdGVyOwotCi0gICAgRFMuUmVjb3JkQXJyYXkgICAgICAgICAgICAgICAgID0gUmVjb3JkQXJy
YXk7Ci0gICAgRFMuRmlsdGVyZWRSZWNvcmRBcnJheSAgICAgICAgID0gRmlsdGVyZWRSZWNvcmRB
cnJheTsKLSAgICBEUy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkgPSBBZGFwdGVyUG9wdWxh
dGVkUmVjb3JkQXJyYXk7Ci0gICAgRFMuTWFueUFycmF5ICAgICAgICAgICAgICAgICAgID0gTWFu
eUFycmF5OwotCi0gICAgRFMuUmVjb3JkQXJyYXlNYW5hZ2VyID0gUmVjb3JkQXJyYXlNYW5hZ2Vy
OwotCi0gICAgRFMuUkVTVEFkYXB0ZXIgICAgPSBSRVNUQWRhcHRlcjsKLSAgICBEUy5GaXh0dXJl
QWRhcHRlciA9IEZpeHR1cmVBZGFwdGVyOwotCi0gICAgRFMuUkVTVFNlcmlhbGl6ZXIgPSBSRVNU
U2VyaWFsaXplcjsKLSAgICBEUy5KU09OU2VyaWFsaXplciA9IEpTT05TZXJpYWxpemVyOwotCi0g
ICAgRFMuVHJhbnNmb3JtICAgICAgID0gVHJhbnNmb3JtOwotICAgIERTLkRhdGVUcmFuc2Zvcm0g
ICA9IERhdGVUcmFuc2Zvcm07Ci0gICAgRFMuU3RyaW5nVHJhbnNmb3JtID0gU3RyaW5nVHJhbnNm
b3JtOwotICAgIERTLk51bWJlclRyYW5zZm9ybSA9IE51bWJlclRyYW5zZm9ybTsKLSAgICBEUy5C
b29sZWFuVHJhbnNmb3JtID0gQm9vbGVhblRyYW5zZm9ybTsKLQotICAgIERTLkFjdGl2ZU1vZGVs
QWRhcHRlciAgICA9IEFjdGl2ZU1vZGVsQWRhcHRlcjsKLSAgICBEUy5BY3RpdmVNb2RlbFNlcmlh
bGl6ZXIgPSBBY3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0gICAgRFMuRW1iZWRkZWRSZWNvcmRzTWl4
aW4gID0gRW1iZWRkZWRSZWNvcmRzTWl4aW47Ci0KLSAgICBEUy5iZWxvbmdzVG8gPSBiZWxvbmdz
VG87Ci0gICAgRFMuaGFzTWFueSAgID0gaGFzTWFueTsKLQotICAgIERTLkNvbnRhaW5lclByb3h5
ID0gQ29udGFpbmVyUHJveHk7Ci0KLSAgICBEUy5fc2V0dXBDb250YWluZXIgPSBzZXR1cENvbnRh
aW5lcjsKLQotICAgIEVtYmVyLmxvb2t1cC5EUyA9IERTOwotCi0gICAgX19leHBvcnRzX19bImRl
ZmF1bHQiXSA9IERTOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc2VyaWFsaXplcnMi
LCAKLSAgWyIuL3NlcmlhbGl6ZXJzL2pzb25fc2VyaWFsaXplciIsIi4vc2VyaWFsaXplcnMvcmVz
dF9zZXJpYWxpemVyIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFy
IEpTT05TZXJpYWxpemVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIFJF
U1RTZXJpYWxpemVyID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0KLSAgICBfX2V4cG9y
dHNfXy5KU09OU2VyaWFsaXplciA9IEpTT05TZXJpYWxpemVyOwotICAgIF9fZXhwb3J0c19fLlJF
U1RTZXJpYWxpemVyID0gUkVTVFNlcmlhbGl6ZXI7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRh
L2xpYi9zZXJpYWxpemVycy9qc29uX3NlcmlhbGl6ZXIiLCAKLSAgWyIuLi9zeXN0ZW0vY2hhbmdl
cyIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykg
ewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgUmVsYXRpb25zaGlwQ2hhbmdlID0gX19kZXBl
bmRlbmN5MV9fLlJlbGF0aW9uc2hpcENoYW5nZTsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBz
ZXQgPSBFbWJlci5zZXQsIGlzTm9uZSA9IEVtYmVyLmlzTm9uZSwKLSAgICAgICAgbWFwID0gRW1i
ZXIuQXJyYXlQb2x5ZmlsbHMubWFwOwotCi0gICAgLyoqCi0gICAgICBJbiBFbWJlciBEYXRhIGEg
U2VyaWFsaXplciBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUKLSAgICAgIHJl
Y29yZHMgd2hlbiB0aGV5IGFyZSB0cmFuc2ZlcnJlZCBpbiBhbmQgb3V0IG9mIGFuIGV4dGVybmFs
IHNvdXJjZS4KLSAgICAgIFRoaXMgcHJvY2VzcyBpbnZvbHZlcyBub3JtYWxpemluZyBwcm9wZXJ0
eSBuYW1lcywgdHJhbnNmb3JtaW5nCi0gICAgICBhdHRyaWJ1dGUgdmFsdWVzIGFuZCBzZXJpYWxp
emluZyByZWxhdGlvbnNoaXBzLgotCi0gICAgICBGb3IgbWF4aW11bSBwZXJmb3JtYW5jZSBFbWJl
ciBEYXRhIHJlY29tbWVuZHMgeW91IHVzZSB0aGUKLSAgICAgIFtSRVNUU2VyaWFsaXplcl0oRFMu
UkVTVFNlcmlhbGl6ZXIuaHRtbCkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotCi0gICAgICBg
SlNPTlNlcmlhbGl6ZXJgIGlzIHVzZWZ1bCBmb3Igc2ltcGxlciBvciBsZWdhY3kgYmFja2VuZHMg
dGhhdCBtYXkKLSAgICAgIG5vdCBzdXBwb3J0IHRoZSBodHRwOi8vanNvbmFwaS5vcmcvIHNwZWMu
Ci0KLSAgICAgIEBjbGFzcyBKU09OU2VyaWFsaXplcgotICAgICAgQG5hbWVzcGFjZSBEUwotICAg
ICovCi0gICAgdmFyIEpTT05TZXJpYWxpemVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAg
ICAvKioKLSAgICAgICAgVGhlIHByaW1hcnlLZXkgaXMgdXNlZCB3aGVuIHNlcmlhbGl6aW5nIGFu
ZCBkZXNlcmlhbGl6aW5nCi0gICAgICAgIGRhdGEuIEVtYmVyIERhdGEgYWx3YXlzIHVzZXMgdGhl
IGBpZGAgcHJvcGVydHkgdG8gc3RvcmUgdGhlIGlkIG9mCi0gICAgICAgIHRoZSByZWNvcmQuIFRo
ZSBleHRlcm5hbCBzb3VyY2UgbWF5IG5vdCBhbHdheXMgZm9sbG93IHRoaXMKLSAgICAgICAgY29u
dmVudGlvbi4gSW4gdGhlc2UgY2FzZXMgaXQgaXMgdXNlZnVsIHRvIG92ZXJyaWRlIHRoZQotICAg
ICAgICBwcmltYXJ5S2V5IHByb3BlcnR5IHRvIG1hdGNoIHRoZSBwcmltYXJ5S2V5IG9mIHlvdXIg
ZXh0ZXJuYWwKLSAgICAgICAgc3RvcmUuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9IERTLkpTT05T
ZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgcHJpbWFyeUtleTogJ19pZCcKLSAgICAgICAg
fSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBwcmltYXJ5S2V5Ci0gICAgICAg
IEB0eXBlIHtTdHJpbmd9Ci0gICAgICAgIEBkZWZhdWx0ICdpZCcKLSAgICAgICovCi0gICAgICBw
cmltYXJ5S2V5OiAnaWQnLAotCi0gICAgICAvKioKLSAgICAgICAgVGhlIGBhdHRyc2Agb2JqZWN0
IGNhbiBiZSB1c2VkIHRvIGRlY2xhcmUgYSBzaW1wbGUgbWFwcGluZyBiZXR3ZWVuCi0gICAgICAg
IHByb3BlcnR5IG5hbWVzIG9uIGBEUy5Nb2RlbGAgcmVjb3JkcyBhbmQgcGF5bG9hZCBrZXlzIGlu
IHRoZQotICAgICAgICBzZXJpYWxpemVkIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVj
b3JkLiBBbiBvYmplY3Qgd2l0aCB0aGUKLSAgICAgICAgcHJvcGVyeSBga2V5YCBjYW4gYWxzbyBi
ZSB1c2VkIHRvIGRlc2lnbmF0ZSB0aGUgYXR0cmlidXRlJ3Mga2V5IG9uCi0gICAgICAgIHRoZSBy
ZXNwb25zZSBwYXlsb2FkLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgIEFwcC5QZXJzb24gPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIGZp
cnN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgbGFzdE5hbWU6IERTLmF0dHIo
J3N0cmluZycpLAotICAgICAgICAgIG9jY3VwYXRpb246IERTLmF0dHIoJ3N0cmluZycpLAotICAg
ICAgICAgIGFkbWluOiBEUy5hdHRyKCdib29sZWFuJykKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
QXBwLlBlcnNvblNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAg
ICAgIGF0dHJzOiB7Ci0gICAgICAgICAgICBhZG1pbjogJ2lzX2FkbWluJywKLSAgICAgICAgICAg
IG9jY3VwYXRpb246IHtrZXk6ICdjYXJlZXInfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBhdHRycwotICAgICAgICBAdHlwZSB7T2Jq
ZWN0fQotICAgICAgKi8KLQotICAgICAgLyoqCi0gICAgICAgR2l2ZW4gYSBzdWJjbGFzcyBvZiBg
RFMuTW9kZWxgIGFuZCBhIEpTT04gb2JqZWN0IHRoaXMgbWV0aG9kIHdpbGwKLSAgICAgICBpdGVy
YXRlIHRocm91Z2ggZWFjaCBhdHRyaWJ1dGUgb2YgdGhlIGBEUy5Nb2RlbGAgYW5kIGludm9rZSB0
aGUKLSAgICAgICBgRFMuVHJhbnNmb3JtI2Rlc2VyaWFsaXplYCBtZXRob2Qgb24gdGhlIG1hdGNo
aW5nIHByb3BlcnR5IG9mIHRoZQotICAgICAgIEpTT04gb2JqZWN0LiAgVGhpcyBtZXRob2QgaXMg
dHlwaWNhbGx5IGNhbGxlZCBhZnRlciB0aGUKLSAgICAgICBzZXJpYWxpemVyJ3MgYG5vcm1hbGl6
ZWAgbWV0aG9kLgotCi0gICAgICAgQG1ldGhvZCBhcHBseVRyYW5zZm9ybXMKLSAgICAgICBAcHJp
dmF0ZQotICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICBA
cGFyYW0ge09iamVjdH0gZGF0YSBUaGUgZGF0YSB0byB0cmFuc2Zvcm0KLSAgICAgICBAcmV0dXJu
IHtPYmplY3R9IGRhdGEgVGhlIHRyYW5zZm9ybWVkIGRhdGEgb2JqZWN0Ci0gICAgICAqLwotICAg
ICAgYXBwbHlUcmFuc2Zvcm1zOiBmdW5jdGlvbih0eXBlLCBkYXRhKSB7Ci0gICAgICAgIHR5cGUu
ZWFjaFRyYW5zZm9ybWVkQXR0cmlidXRlKGZ1bmN0aW9uKGtleSwgdHlwZSkgewotICAgICAgICAg
IHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybUZvcih0eXBlKTsKLSAgICAgICAgICBkYXRh
W2tleV0gPSB0cmFuc2Zvcm0uZGVzZXJpYWxpemUoZGF0YVtrZXldKTsKLSAgICAgICAgfSwgdGhp
cyk7Ci0KLSAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAgTm9ybWFsaXplcyBhIHBhcnQgb2YgdGhlIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieQotICAg
ICAgICB0aGUgc2VydmVyLiBZb3Ugc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBtdW5nZSB0
aGUgaGFzaAotICAgICAgICBhbmQgY2FsbCBzdXBlciBpZiB5b3UgaGF2ZSBnZW5lcmljIG5vcm1h
bGl6YXRpb24gdG8gZG8uCi0KLSAgICAgICAgSXQgdGFrZXMgdGhlIHR5cGUgb2YgdGhlIHJlY29y
ZCB0aGF0IGlzIGJlaW5nIG5vcm1hbGl6ZWQKLSAgICAgICAgKGFzIGEgRFMuTW9kZWwgY2xhc3Mp
LCB0aGUgcHJvcGVydHkgd2hlcmUgdGhlIGhhc2ggd2FzCi0gICAgICAgIG9yaWdpbmFsbHkgZm91
bmQsIGFuZCB0aGUgaGFzaCB0byBub3JtYWxpemUuCi0KLSAgICAgICAgWW91IGNhbiB1c2UgdGhp
cyBtZXRob2QsIGZvciBleGFtcGxlLCB0byBub3JtYWxpemUgdW5kZXJzY29yZWQga2V5cyB0byBj
YW1lbGl6ZWQKLSAgICAgICAgb3Igb3RoZXIgZ2VuZXJhbC1wdXJwb3NlIG5vcm1hbGl6YXRpb25z
LgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFw
cC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAg
ICAgICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24odHlwZSwgaGFzaCkgewotICAgICAgICAgICAgdmFy
IGZpZWxkcyA9IEVtYmVyLmdldCh0eXBlLCAnZmllbGRzJyk7Ci0gICAgICAgICAgICBmaWVsZHMu
Zm9yRWFjaChmdW5jdGlvbihmaWVsZCkgewotICAgICAgICAgICAgICB2YXIgcGF5bG9hZEZpZWxk
ID0gRW1iZXIuU3RyaW5nLnVuZGVyc2NvcmUoZmllbGQpOwotICAgICAgICAgICAgICBpZiAoZmll
bGQgPT09IHBheWxvYWRGaWVsZCkgeyByZXR1cm47IH0KLQotICAgICAgICAgICAgICBoYXNoW2Zp
ZWxkXSA9IGhhc2hbcGF5bG9hZEZpZWxkXTsKLSAgICAgICAgICAgICAgZGVsZXRlIGhhc2hbcGF5
bG9hZEZpZWxkXTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1
cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBub3JtYWxpemUKLSAgICAgICAgQHBhcmFtIHtz
dWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaAot
ICAgICAgICBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICAqLwotICAgICAgbm9ybWFsaXplOiBmdW5j
dGlvbih0eXBlLCBoYXNoKSB7Ci0gICAgICAgIGlmICghaGFzaCkgeyByZXR1cm4gaGFzaDsgfQot
Ci0gICAgICAgIHRoaXMubm9ybWFsaXplSWQoaGFzaCk7Ci0gICAgICAgIHRoaXMubm9ybWFsaXpl
VXNpbmdEZWNsYXJlZE1hcHBpbmcodHlwZSwgaGFzaCk7Ci0gICAgICAgIHRoaXMuYXBwbHlUcmFu
c2Zvcm1zKHR5cGUsIGhhc2gpOwotICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBAbWV0aG9kIG5vcm1hbGl6ZVVzaW5nRGVjbGFyZWRNYXBwaW5nCi0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgbm9ybWFsaXplVXNpbmdEZWNsYXJlZE1h
cHBpbmc6IGZ1bmN0aW9uKHR5cGUsIGhhc2gpIHsKLSAgICAgICAgdmFyIGF0dHJzID0gZ2V0KHRo
aXMsICdhdHRycycpLCBwYXlsb2FkS2V5LCBrZXk7Ci0KLSAgICAgICAgaWYgKGF0dHJzKSB7Ci0g
ICAgICAgICAgZm9yIChrZXkgaW4gYXR0cnMpIHsKLSAgICAgICAgICAgIHBheWxvYWRLZXkgPSBh
dHRyc1trZXldOwotICAgICAgICAgICAgaWYgKHBheWxvYWRLZXkgJiYgcGF5bG9hZEtleS5rZXkp
IHsKLSAgICAgICAgICAgICAgcGF5bG9hZEtleSA9IHBheWxvYWRLZXkua2V5OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkS2V5ID09PSAnc3RyaW5nJykgewot
ICAgICAgICAgICAgICBoYXNoW2tleV0gPSBoYXNoW3BheWxvYWRLZXldOwotICAgICAgICAgICAg
ICBkZWxldGUgaGFzaFtwYXlsb2FkS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0sCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBub3JtYWxpemVJ
ZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIG5vcm1hbGl6ZUlkOiBmdW5jdGlv
bihoYXNoKSB7Ci0gICAgICAgIHZhciBwcmltYXJ5S2V5ID0gZ2V0KHRoaXMsICdwcmltYXJ5S2V5
Jyk7Ci0KLSAgICAgICAgaWYgKHByaW1hcnlLZXkgPT09ICdpZCcpIHsgcmV0dXJuOyB9Ci0KLSAg
ICAgICAgaGFzaC5pZCA9IGhhc2hbcHJpbWFyeUtleV07Ci0gICAgICAgIGRlbGV0ZSBoYXNoW3By
aW1hcnlLZXldOwotICAgICAgfSwKLQotICAgICAgLy8gU0VSSUFMSVpFCi0gICAgICAvKioKLSAg
ICAgICAgQ2FsbGVkIHdoZW4gYSByZWNvcmQgaXMgc2F2ZWQgaW4gb3JkZXIgdG8gY29udmVydCB0
aGUKLSAgICAgICAgcmVjb3JkIGludG8gSlNPTi4KLQotICAgICAgICBCeSBkZWZhdWx0LCBpdCBj
cmVhdGVzIGEgSlNPTiBvYmplY3Qgd2l0aCBhIGtleSBmb3IKLSAgICAgICAgZWFjaCBhdHRyaWJ1
dGUgYW5kIGJlbG9uZ3NUbyByZWxhdGlvbnNoaXAuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGNv
bnNpZGVyIHRoaXMgbW9kZWw6Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAu
Q29tbWVudCA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdGl0bGU6IERTLmF0dHIoKSwK
LSAgICAgICAgICBib2R5OiBEUy5hdHRyKCksCi0KLSAgICAgICAgICBhdXRob3I6IERTLmJlbG9u
Z3NUbygndXNlcicpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGUgZGVm
YXVsdCBzZXJpYWxpemF0aW9uIHdvdWxkIGNyZWF0ZSBhIEpTT04gb2JqZWN0IGxpa2U6Ci0KLSAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB7Ci0gICAgICAgICAgInRpdGxlIjogIlJhaWxz
IGlzIHVuYWdpIiwKLSAgICAgICAgICAiYm9keSI6ICJSYWlscz8gT21ha2FzZT8gT19PIiwKLSAg
ICAgICAgICAiYXV0aG9yIjogMTIKLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBC
eSBkZWZhdWx0LCBhdHRyaWJ1dGVzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcy1pcywgdW5sZXNzCi0g
ICAgICAgIHlvdSBzcGVjaWZpZWQgYW4gYXR0cmlidXRlIHR5cGUgKGBEUy5hdHRyKCdkYXRlJylg
KS4gSWYKLSAgICAgICAgeW91IHNwZWNpZnkgYSB0cmFuc2Zvcm0sIHRoZSBKYXZhU2NyaXB0IHZh
bHVlIHdpbGwgYmUKLSAgICAgICAgc2VyaWFsaXplZCB3aGVuIGluc2VydGVkIGludG8gdGhlIEpT
T04gaGFzaC4KLQotICAgICAgICBCeSBkZWZhdWx0LCBiZWxvbmdzLXRvIHJlbGF0aW9uc2hpcHMg
YXJlIGNvbnZlcnRlZCBpbnRvCi0gICAgICAgIElEcyB3aGVuIGluc2VydGVkIGludG8gdGhlIEpT
T04gaGFzaC4KLQotICAgICAgICAjIyBJRHMKLQotICAgICAgICBgc2VyaWFsaXplYCB0YWtlcyBh
biBvcHRpb25zIGhhc2ggd2l0aCBhIHNpbmdsZSBvcHRpb246Ci0gICAgICAgIGBpbmNsdWRlSWRg
LiBJZiB0aGlzIG9wdGlvbiBpcyBgdHJ1ZWAsIGBzZXJpYWxpemVgIHdpbGwsCi0gICAgICAgIGJ5
IGRlZmF1bHQgaW5jbHVkZSB0aGUgSUQgaW4gdGhlIEpTT04gb2JqZWN0IGl0IGJ1aWxkcy4KLQot
ICAgICAgICBUaGUgYWRhcHRlciBwYXNzZXMgaW4gYGluY2x1ZGVJZDogdHJ1ZWAgd2hlbiBzZXJp
YWxpemluZwotICAgICAgICBhIHJlY29yZCBmb3IgYGNyZWF0ZVJlY29yZGAsIGJ1dCBub3QgZm9y
IGB1cGRhdGVSZWNvcmRgLgotCi0gICAgICAgICMjIEN1c3RvbWl6YXRpb24KLQotICAgICAgICBZ
b3VyIHNlcnZlciBtYXkgZXhwZWN0IGEgZGlmZmVyZW50IEpTT04gZm9ybWF0IHRoYW4gdGhlCi0g
ICAgICAgIGJ1aWx0LWluIHNlcmlhbGl6YXRpb24gZm9ybWF0LgotCi0gICAgICAgIEluIHRoYXQg
Y2FzZSwgeW91IGNhbiBpbXBsZW1lbnQgYHNlcmlhbGl6ZWAgeW91cnNlbGYgYW5kCi0gICAgICAg
IHJldHVybiBhIEpTT04gaGFzaCBvZiB5b3VyIGNob29zaW5nLgotCi0gICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgQXBwLlBvc3RTZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0
ZW5kKHsKLSAgICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHBvc3QsIG9wdGlvbnMpIHsKLSAg
ICAgICAgICAgIHZhciBqc29uID0gewotICAgICAgICAgICAgICBQT1NUX1RUTDogcG9zdC5nZXQo
J3RpdGxlJyksCi0gICAgICAgICAgICAgIFBPU1RfQkRZOiBwb3N0LmdldCgnYm9keScpLAotICAg
ICAgICAgICAgICBQT1NUX0NNUzogcG9zdC5nZXQoJ2NvbW1lbnRzJykubWFwUHJvcGVydHkoJ2lk
JykKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUlkKSB7
Ci0gICAgICAgICAgICAgIGpzb24uUE9TVF9JRF8gPSBwb3N0LmdldCgnaWQnKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGpzb247Ci0gICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgIyMgQ3VzdG9taXppbmcgYW4gQXBwLVdpZGUgU2Vy
aWFsaXplcgotCi0gICAgICAgIElmIHlvdSB3YW50IHRvIGRlZmluZSBhIHNlcmlhbGl6ZXIgZm9y
IHlvdXIgZW50aXJlCi0gICAgICAgIGFwcGxpY2F0aW9uLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0
byB1c2UgYGVhY2hBdHRyaWJ1dGVgCi0gICAgICAgIGFuZCBgZWFjaFJlbGF0aW9uc2hpcGAgb24g
dGhlIHJlY29yZC4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5BcHBsaWNh
dGlvblNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIHNl
cmlhbGl6ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIganNv
biA9IHt9OwotCi0gICAgICAgICAgICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihuYW1l
KSB7Ci0gICAgICAgICAgICAgIGpzb25bc2VydmVyQXR0cmlidXRlTmFtZShuYW1lKV0gPSByZWNv
cmQuZ2V0KG5hbWUpOwotICAgICAgICAgICAgfSkKLQotICAgICAgICAgICAgcmVjb3JkLmVhY2hS
ZWxhdGlvbnNoaXAoZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgICAg
IGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2hhc01hbnknKSB7Ci0gICAgICAgICAgICAgICAg
anNvbltzZXJ2ZXJIYXNNYW55TmFtZShuYW1lKV0gPSByZWNvcmQuZ2V0KG5hbWUpLm1hcEJ5KCdp
ZCcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYg
KG9wdGlvbnMuaW5jbHVkZUlkKSB7Ci0gICAgICAgICAgICAgIGpzb24uSURfID0gcmVjb3JkLmdl
dCgnaWQnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGpzb247Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBzZXJ2ZXJBdHRyaWJ1dGVO
YW1lKGF0dHJpYnV0ZSkgewotICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUudW5kZXJzY29yZSgp
LnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzZXJ2ZXJIYXNN
YW55TmFtZShuYW1lKSB7Ci0gICAgICAgICAgcmV0dXJuIHNlcnZlckF0dHJpYnV0ZU5hbWUobmFt
ZS5zaW5ndWxhcml6ZSgpKSArICJfSURTIjsKLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAg
ICAgICBUaGlzIHNlcmlhbGl6ZXIgd2lsbCBnZW5lcmF0ZSBKU09OIHRoYXQgbG9va3MgbGlrZSB0
aGlzOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgewotICAgICAgICAgICJUSVRM
RSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAiQk9EWSI6ICJZZXAuIE9tYWthc2Uu
IiwKLSAgICAgICAgICAiQ09NTUVOVF9JRFMiOiBbIDEsIDIsIDMgXQotICAgICAgICB9Ci0gICAg
ICAgIGBgYAotCi0gICAgICAgICMjIFR3ZWFraW5nIHRoZSBEZWZhdWx0IEpTT04KLQotICAgICAg
ICBJZiB5b3UganVzdCB3YW50IHRvIGRvIHNvbWUgc21hbGwgdHdlYWtzIG9uIHRoZSBkZWZhdWx0
IEpTT04sCi0gICAgICAgIHlvdSBjYW4gY2FsbCBzdXBlciBmaXJzdCBhbmQgbWFrZSB0aGUgdHdl
YWtzIG9uIHRoZSByZXR1cm5lZAotICAgICAgICBKU09OLgotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgQXBwLlBvc3RTZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5k
KHsKLSAgICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9ucykgewotICAg
ICAgICAgICAgdmFyIGpzb24gPSB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
Ci0gICAgICAgICAgICBqc29uLnN1YmplY3QgPSBqc29uLnRpdGxlOwotICAgICAgICAgICAgZGVs
ZXRlIGpzb24udGl0bGU7Ci0KLSAgICAgICAgICAgIHJldHVybiBqc29uOwotICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qgc2VyaWFsaXplCi0g
ICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFy
YW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGpzb24KLSAgICAg
ICovCi0gICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9ucykgewotICAgICAg
ICB2YXIganNvbiA9IHt9OwotCi0gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaW5jbHVk
ZUlkKSB7Ci0gICAgICAgICAgdmFyIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7Ci0KLSAgICAgICAg
ICBpZiAoaWQpIHsKLSAgICAgICAgICAgIGpzb25bZ2V0KHRoaXMsICdwcmltYXJ5S2V5JyldID0g
aWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmVjb3JkLmVhY2hBdHRyaWJ1
dGUoZnVuY3Rpb24oa2V5LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICB0aGlzLnNlcmlhbGl6ZUF0
dHJpYnV0ZShyZWNvcmQsIGpzb24sIGtleSwgYXR0cmlidXRlKTsKLSAgICAgICAgfSwgdGhpcyk7
Ci0KLSAgICAgICAgcmVjb3JkLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24oa2V5LCByZWxhdGlv
bnNoaXApIHsKLSAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQgPT09ICdiZWxvbmdzVG8n
KSB7Ci0gICAgICAgICAgICB0aGlzLnNlcmlhbGl6ZUJlbG9uZ3NUbyhyZWNvcmQsIGpzb24sIHJl
bGF0aW9uc2hpcCk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0g
J2hhc01hbnknKSB7Ci0gICAgICAgICAgICB0aGlzLnNlcmlhbGl6ZUhhc01hbnkocmVjb3JkLCBq
c29uLCByZWxhdGlvbnNoaXApOwotICAgICAgICAgIH0KLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAg
ICAgICAgcmV0dXJuIGpzb247Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICBgc2VyaWFs
aXplQXR0cmlidXRlYCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IGBEUy5hdHRyYAotICAg
ICAgIHByb3BlcnRpZXMgYXJlIHNlcmlhbGl6ZWQKLQotICAgICAgIEZvciBleGFtcGxlIGlmIHlv
dSB3YW50ZWQgdG8gZW5zdXJlIGFsbCB5b3VyIGF0dHJpYnV0ZXMgd2VyZSBhbHdheXMKLSAgICAg
ICBzZXJpYWxpemVkIGFzIHByb3BlcnRpZXMgb24gYW4gYGF0dHJpYnV0ZXNgIG9iamVjdCB5b3Ug
Y291bGQKLSAgICAgICB3cml0ZToKLQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICBBcHAu
QXBwbGljYXRpb25TZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAg
ICAgIHNlcmlhbGl6ZUF0dHJpYnV0ZTogZnVuY3Rpb24ocmVjb3JkLCBqc29uLCBrZXksIGF0dHJp
YnV0ZXMpIHsKLSAgICAgICAgICAganNvbi5hdHRyaWJ1dGVzID0ganNvbi5hdHRyaWJ1dGVzIHx8
IHt9OwotICAgICAgICAgICB0aGlzLl9zdXBlcihyZWNvcmQsIGpzb24uYXR0cmlidXRlcywga2V5
LCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgIH0KLSAgICAgICB9KTsKLSAgICAgICBgYGAKLQotICAg
ICAgIEBtZXRob2Qgc2VyaWFsaXplQXR0cmlidXRlCi0gICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0g
cmVjb3JkCi0gICAgICAgQHBhcmFtIHtPYmplY3R9IGpzb24KLSAgICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5Ci0gICAgICAgQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZQotICAgICAgKi8KLSAgICAg
IHNlcmlhbGl6ZUF0dHJpYnV0ZTogZnVuY3Rpb24ocmVjb3JkLCBqc29uLCBrZXksIGF0dHJpYnV0
ZSkgewotICAgICAgICB2YXIgYXR0cnMgPSBnZXQodGhpcywgJ2F0dHJzJyk7Ci0gICAgICAgIHZh
ciB2YWx1ZSA9IGdldChyZWNvcmQsIGtleSksIHR5cGUgPSBhdHRyaWJ1dGUudHlwZTsKLQotICAg
ICAgICBpZiAodHlwZSkgewotICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9y
bUZvcih0eXBlKTsKLSAgICAgICAgICB2YWx1ZSA9IHRyYW5zZm9ybS5zZXJpYWxpemUodmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgcHJvdmlkZWQsIHVzZSB0aGUgbWFwcGluZyBw
cm92aWRlZCBieSBgYXR0cnNgIGluCi0gICAgICAgIC8vIHRoZSBzZXJpYWxpemVyCi0gICAgICAg
IGtleSA9IGF0dHJzICYmIGF0dHJzW2tleV0gfHwgKHRoaXMua2V5Rm9yQXR0cmlidXRlID8gdGhp
cy5rZXlGb3JBdHRyaWJ1dGUoa2V5KSA6IGtleSk7Ci0KLSAgICAgICAganNvbltrZXldID0gdmFs
dWU7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICBgc2VyaWFsaXplQmVsb25nc1RvYCBj
YW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IGBEUy5iZWxvbmdzVG9gCi0gICAgICAgcHJvcGVy
dGllcyBhcmUgc2VyaWFsaXplZC4KLQotICAgICAgIEV4YW1wbGUKLQotICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRl
bmQoewotICAgICAgICAgc2VyaWFsaXplQmVsb25nc1RvOiBmdW5jdGlvbihyZWNvcmQsIGpzb24s
IHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgICB2YXIga2V5ID0gcmVsYXRpb25zaGlwLmtleTsK
LQotICAgICAgICAgICB2YXIgYmVsb25nc1RvID0gZ2V0KHJlY29yZCwga2V5KTsKLQotICAgICAg
ICAgICBrZXkgPSB0aGlzLmtleUZvclJlbGF0aW9uc2hpcCA/IHRoaXMua2V5Rm9yUmVsYXRpb25z
aGlwKGtleSwgImJlbG9uZ3NUbyIpIDoga2V5OwotCi0gICAgICAgICAgIGpzb25ba2V5XSA9IEVt
YmVyLmlzTm9uZShiZWxvbmdzVG8pID8gYmVsb25nc1RvIDogYmVsb25nc1RvLnRvSlNPTigpOwot
ICAgICAgICAgfQotICAgICAgIH0pOwotICAgICAgIGBgYAotCi0gICAgICAgQG1ldGhvZCBzZXJp
YWxpemVCZWxvbmdzVG8KLSAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICBA
cGFyYW0ge09iamVjdH0ganNvbgotICAgICAgIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvbnNoaXAK
LSAgICAgICovCi0gICAgICBzZXJpYWxpemVCZWxvbmdzVG86IGZ1bmN0aW9uKHJlY29yZCwganNv
biwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIHZhciBrZXkgPSByZWxhdGlvbnNoaXAua2V5Owot
Ci0gICAgICAgIHZhciBiZWxvbmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwotCi0gICAgICAgIGtl
eSA9IHRoaXMua2V5Rm9yUmVsYXRpb25zaGlwID8gdGhpcy5rZXlGb3JSZWxhdGlvbnNoaXAoa2V5
LCAiYmVsb25nc1RvIikgOiBrZXk7Ci0KLSAgICAgICAgaWYgKGlzTm9uZShiZWxvbmdzVG8pKSB7
Ci0gICAgICAgICAganNvbltrZXldID0gYmVsb25nc1RvOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGpzb25ba2V5XSA9IGdldChiZWxvbmdzVG8sICdpZCcpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHJlbGF0aW9uc2hpcC5vcHRpb25zLnBvbHltb3JwaGljKSB7Ci0gICAgICAgICAg
dGhpcy5zZXJpYWxpemVQb2x5bW9ycGhpY1R5cGUocmVjb3JkLCBqc29uLCByZWxhdGlvbnNoaXAp
OwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICBgc2VyaWFsaXplSGFz
TWFueWAgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGhvdyBgRFMuaGFzTWFueWAKLSAgICAgICBw
cm9wZXJ0aWVzIGFyZSBzZXJpYWxpemVkLgotCi0gICAgICAgRXhhbXBsZQotCi0gICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVy
LmV4dGVuZCh7Ci0gICAgICAgICBzZXJpYWxpemVIYXNNYW55OiBmdW5jdGlvbihyZWNvcmQsIGpz
b24sIHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgICB2YXIga2V5ID0gcmVsYXRpb25zaGlwLmtl
eTsKLSAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NvbW1lbnRzJykgewotICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICB0aGlzLl9zdXBlci5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICAgfSk7
Ci0gICAgICAgYGBgCi0KLSAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZUhhc01hbnkKLSAgICAgICBA
cGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICBAcGFyYW0ge09iamVjdH0ganNvbgotICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvbnNoaXAKLSAgICAgICovCi0gICAgICBzZXJpYWxp
emVIYXNNYW55OiBmdW5jdGlvbihyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCkgewotICAgICAg
ICB2YXIga2V5ID0gcmVsYXRpb25zaGlwLmtleTsKLSAgICAgICAgdmFyIHBheWxvYWRLZXkgPSB0
aGlzLmtleUZvclJlbGF0aW9uc2hpcCA/IHRoaXMua2V5Rm9yUmVsYXRpb25zaGlwKGtleSwgImhh
c01hbnkiKSA6IGtleTsKLSAgICAgICAgdmFyIHJlbGF0aW9uc2hpcFR5cGUgPSBSZWxhdGlvbnNo
aXBDaGFuZ2UuZGV0ZXJtaW5lUmVsYXRpb25zaGlwVHlwZShyZWNvcmQuY29uc3RydWN0b3IsIHJl
bGF0aW9uc2hpcCk7Ci0KLSAgICAgICAgaWYgKHJlbGF0aW9uc2hpcFR5cGUgPT09ICdtYW55VG9O
b25lJyB8fCByZWxhdGlvbnNoaXBUeXBlID09PSAnbWFueVRvTWFueScpIHsKLSAgICAgICAgICBq
c29uW3BheWxvYWRLZXldID0gZ2V0KHJlY29yZCwga2V5KS5tYXBCeSgnaWQnKTsKLSAgICAgICAg
ICAvLyBUT0RPIHN1cHBvcnQgZm9yIHBvbHltb3JwaGljIG1hbnlUb05vbmUgYW5kIG1hbnlUb01h
bnkgcmVsYXRpb25zaGlwcwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAgWW91IGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gY3VzdG9taXplIGhvdyBwb2x5bW9ycGhpYyBv
YmplY3RzIGFyZQotICAgICAgICBzZXJpYWxpemVkLiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIHRv
IGJlIHBvbHltb3JwaGljIGlmCi0gICAgICAgIGB7cG9seW1vcnBoaWM6IHRydWV9YCBpcyBwYXNz
IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlCi0gICAgICAgIGBEUy5iZWxvbmdzVG9gIGZ1
bmN0aW9uLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgIEFwcC5Db21tZW50U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVyLmV4dGVuZCh7Ci0g
ICAgICAgICAgc2VyaWFsaXplUG9seW1vcnBoaWNUeXBlOiBmdW5jdGlvbihyZWNvcmQsIGpzb24s
IHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAgdmFyIGtleSA9IHJlbGF0aW9uc2hpcC5rZXks
Ci0gICAgICAgICAgICAgICAgYmVsb25nc1RvID0gZ2V0KHJlY29yZCwga2V5KTsKLSAgICAgICAg
ICAgIGtleSA9IHRoaXMua2V5Rm9yQXR0cmlidXRlID8gdGhpcy5rZXlGb3JBdHRyaWJ1dGUoa2V5
KSA6IGtleTsKLSAgICAgICAgICAgIGpzb25ba2V5ICsgIl90eXBlIl0gPSBiZWxvbmdzVG8uY29u
c3RydWN0b3IudHlwZUtleTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgIGBgYAot
Ci0gICAgICAgIEBtZXRob2Qgc2VyaWFsaXplUG9seW1vcnBoaWNUeXBlCi0gICAgICAgIEBwYXJh
bSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge09iamVjdH0ganNvbgotICAgICAg
ICBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25zaGlwCi0gICAgICAqLwotICAgICAgc2VyaWFsaXpl
UG9seW1vcnBoaWNUeXBlOiBFbWJlci5LLAotCi0gICAgICAvLyBFWFRSQUNUCi0KLSAgICAgIC8q
KgotICAgICAgICBUaGUgYGV4dHJhY3RgIG1ldGhvZCBpcyB1c2VkIHRvIGRlc2VyaWFsaXplIHBh
eWxvYWQgZGF0YSBmcm9tIHRoZQotICAgICAgICBzZXJ2ZXIuIEJ5IGRlZmF1bHQgdGhlIGBKU09O
U2VyaWFsaXplcmAgZG9lcyBub3QgcHVzaCB0aGUgcmVjb3JkcwotICAgICAgICBpbnRvIHRoZSBz
dG9yZS4gSG93ZXZlciByZWNvcmRzIHRoYXQgc3ViY2xhc3MgYEpTT05TZXJpYWxpemVyYAotICAg
ICAgICBzdWNoIGFzIHRoZSBgUkVTVFNlcmlhbGl6ZXJgIG1heSBwdXNoIHJlY29yZHMgaW50byB0
aGUgc3RvcmUgYXMKLSAgICAgICAgcGFydCBvZiB0aGUgZXh0cmFjdCBjYWxsLgotCi0gICAgICAg
IFRoaXMgbWV0aG9kIGRlbGVnYXRlcyB0byBhIG1vcmUgc3BlY2lmaWMgZXh0cmFjdCBtZXRob2Qg
YmFzZWQgb24KLSAgICAgICAgdGhlIGByZXF1ZXN0VHlwZWAuCi0KLSAgICAgICAgRXhhbXBsZQot
Ci0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFyIGdldCA9IEVtYmVyLmdldDsKLSAg
ICAgICAgc29ja2V0Lm9uKCdtZXNzYWdlJywgZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICAg
IHZhciBtb2RlbE5hbWUgPSBtZXNzYWdlLm1vZGVsOwotICAgICAgICAgIHZhciBkYXRhID0gbWVz
c2FnZS5kYXRhOwotICAgICAgICAgIHZhciB0eXBlID0gc3RvcmUubW9kZWxGb3IobW9kZWxOYW1l
KTsKLSAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IHN0b3JlLnNlcmlhbGl6ZXJGb3IodHlwZS50
eXBlS2V5KTsKLSAgICAgICAgICB2YXIgcmVjb3JkID0gc2VyaWFsaXplci5leHRyYWN0KHN0b3Jl
LCB0eXBlLCBkYXRhLCBnZXQoZGF0YSwgJ2lkJyksICdzaW5nbGUnKTsKLSAgICAgICAgICBzdG9y
ZS5wdXNoKG1vZGVsTmFtZSwgcmVjb3JkKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0g
ICAgICAgIEBtZXRob2QgZXh0cmFjdAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQot
ICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIE51bWJlcn0gaWQK
LSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RUeXBlCi0gICAgICAgIEByZXR1cm4ge09i
amVjdH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBheWxvYWQKLSAgICAgICovCi0gICAgICBleHRy
YWN0OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCwgaWQsIHJlcXVlc3RUeXBlKSB7Ci0g
ICAgICAgIHRoaXMuZXh0cmFjdE1ldGEoc3RvcmUsIHR5cGUsIHBheWxvYWQpOwotCi0gICAgICAg
IHZhciBzcGVjaWZpY0V4dHJhY3QgPSAiZXh0cmFjdCIgKyByZXF1ZXN0VHlwZS5jaGFyQXQoMCku
dG9VcHBlckNhc2UoKSArIHJlcXVlc3RUeXBlLnN1YnN0cigxKTsKLSAgICAgICAgcmV0dXJuIHRo
aXNbc3BlY2lmaWNFeHRyYWN0XShzdG9yZSwgdHlwZSwgcGF5bG9hZCwgaWQsIHJlcXVlc3RUeXBl
KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBgZXh0cmFjdEZpbmRBbGxgIGlzIGEg
aG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4gYQotICAgICAgICBjYWxsIGlz
IG1hZGUgdG8gYERTLlN0b3JlI2ZpbmRBbGxgLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIGlzIGFu
Ci0gICAgICAgIGFsaWFzIGZvciBbZXh0cmFjdEFycmF5XSgjbWV0aG9kX2V4dHJhY3RBcnJheSku
Ci0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0RmluZEFsbAotICAgICAgICBAcGFyYW0ge0RTLlN0
b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4ge0FycmF5fSBh
cnJheSBBbiBhcnJheSBvZiBkZXNlcmlhbGl6ZWQgb2JqZWN0cwotICAgICAgKi8KLSAgICAgIGV4
dHJhY3RGaW5kQWxsOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCl7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmV4dHJhY3RBcnJheShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0gICAgICB9LAot
ICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0RmluZFF1ZXJ5YCBpcyBhIGhvb2sgaW50byB0aGUg
ZXh0cmFjdCBtZXRob2QgdXNlZCB3aGVuIGEKLSAgICAgICAgY2FsbCBpcyBtYWRlIHRvIGBEUy5T
dG9yZSNmaW5kUXVlcnlgLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIGlzIGFuCi0gICAgICAgIGFs
aWFzIGZvciBbZXh0cmFjdEFycmF5XSgjbWV0aG9kX2V4dHJhY3RBcnJheSkuCi0KLSAgICAgICAg
QG1ldGhvZCBleHRyYWN0RmluZFF1ZXJ5Ci0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3Jl
Ci0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBh
cmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7QXJyYXl9IGFycmF5IEFuIGFy
cmF5IG9mIGRlc2VyaWFsaXplZCBvYmplY3RzCi0gICAgICAqLwotICAgICAgZXh0cmFjdEZpbmRR
dWVyeTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHBheWxvYWQpewotICAgICAgICByZXR1cm4gdGhp
cy5leHRyYWN0QXJyYXkoc3RvcmUsIHR5cGUsIHBheWxvYWQpOwotICAgICAgfSwKLSAgICAgIC8q
KgotICAgICAgICBgZXh0cmFjdEZpbmRNYW55YCBpcyBhIGhvb2sgaW50byB0aGUgZXh0cmFjdCBt
ZXRob2QgdXNlZCB3aGVuIGEKLSAgICAgICAgY2FsbCBpcyBtYWRlIHRvIGBEUy5TdG9yZSNmaW5k
TWFueWAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMKLSAgICAgICAgYWxpYXMgZm9yIFtleHRy
YWN0QXJyYXldKCNtZXRob2RfZXh0cmFjdEFycmF5KS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJh
Y3RGaW5kTWFueQotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBw
YXlsb2FkCi0gICAgICAgIEByZXR1cm4ge0FycmF5fSBhcnJheSBBbiBhcnJheSBvZiBkZXNlcmlh
bGl6ZWQgb2JqZWN0cwotICAgICAgKi8KLSAgICAgIGV4dHJhY3RGaW5kTWFueTogZnVuY3Rpb24o
c3RvcmUsIHR5cGUsIHBheWxvYWQpewotICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0QXJyYXko
c3RvcmUsIHR5cGUsIHBheWxvYWQpOwotICAgICAgfSwKLSAgICAgIC8qKgotICAgICAgICBgZXh0
cmFjdEZpbmRIYXNNYW55YCBpcyBhIGhvb2sgaW50byB0aGUgZXh0cmFjdCBtZXRob2QgdXNlZCB3
aGVuIGEKLSAgICAgICAgY2FsbCBpcyBtYWRlIHRvIGBEUy5TdG9yZSNmaW5kSGFzTWFueWAuIEJ5
IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMKLSAgICAgICAgYWxpYXMgZm9yIFtleHRyYWN0QXJyYXld
KCNtZXRob2RfZXh0cmFjdEFycmF5KS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RGaW5kSGFz
TWFueQotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1
YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2Fk
Ci0gICAgICAgIEByZXR1cm4ge0FycmF5fSBhcnJheSBBbiBhcnJheSBvZiBkZXNlcmlhbGl6ZWQg
b2JqZWN0cwotICAgICAgKi8KLSAgICAgIGV4dHJhY3RGaW5kSGFzTWFueTogZnVuY3Rpb24oc3Rv
cmUsIHR5cGUsIHBheWxvYWQpewotICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0QXJyYXkoc3Rv
cmUsIHR5cGUsIHBheWxvYWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIGBleHRy
YWN0Q3JlYXRlUmVjb3JkYCBpcyBhIGhvb2sgaW50byB0aGUgZXh0cmFjdCBtZXRob2QgdXNlZCB3
aGVuIGEKLSAgICAgICAgY2FsbCBpcyBtYWRlIHRvIGBEUy5TdG9yZSNjcmVhdGVSZWNvcmRgLiBC
eSBkZWZhdWx0IHRoaXMgbWV0aG9kIGlzCi0gICAgICAgIGFsaWFzIGZvciBbZXh0cmFjdFNhdmVd
KCNtZXRob2RfZXh0cmFjdFNhdmUpLgotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdENyZWF0ZVJl
Y29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1
YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2Fk
Ci0gICAgICAgIEByZXR1cm4ge09iamVjdH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBheWxvYWQK
LSAgICAgICovCi0gICAgICBleHRyYWN0Q3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlw
ZSwgcGF5bG9hZCkgewotICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0U2F2ZShzdG9yZSwgdHlw
ZSwgcGF5bG9hZCk7Ci0gICAgICB9LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0VXBkYXRl
UmVjb3JkYCBpcyBhIGhvb2sgaW50byB0aGUgZXh0cmFjdCBtZXRob2QgdXNlZCB3aGVuCi0gICAg
ICAgIGEgY2FsbCBpcyBtYWRlIHRvIGBEUy5TdG9yZSN1cGRhdGVgLiBCeSBkZWZhdWx0IHRoaXMg
bWV0aG9kIGlzIGFsaWFzCi0gICAgICAgIGZvciBbZXh0cmFjdFNhdmVdKCNtZXRob2RfZXh0cmFj
dFNhdmUpLgotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdFVwZGF0ZVJlY29yZAotICAgICAgICBA
cGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1v
ZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1
cm4ge09iamVjdH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBheWxvYWQKLSAgICAgICovCi0gICAg
ICBleHRyYWN0VXBkYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkgewot
ICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0U2F2ZShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0g
ICAgICB9LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0RGVsZXRlUmVjb3JkYCBpcyBhIGhv
b2sgaW50byB0aGUgZXh0cmFjdCBtZXRob2QgdXNlZCB3aGVuCi0gICAgICAgIGEgY2FsbCBpcyBt
YWRlIHRvIGBEUy5TdG9yZSNkZWxldGVSZWNvcmRgLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIGlz
Ci0gICAgICAgIGFsaWFzIGZvciBbZXh0cmFjdFNhdmVdKCNtZXRob2RfZXh0cmFjdFNhdmUpLgot
Ci0gICAgICAgIEBtZXRob2QgZXh0cmFjdERlbGV0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RT
LlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4ge09iamVj
dH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBheWxvYWQKLSAgICAgICovCi0gICAgICBleHRyYWN0
RGVsZXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5leHRyYWN0U2F2ZShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0gICAgICB9LAot
Ci0gICAgICAvKioKLSAgICAgICAgYGV4dHJhY3RGaW5kYCBpcyBhIGhvb2sgaW50byB0aGUgZXh0
cmFjdCBtZXRob2QgdXNlZCB3aGVuCi0gICAgICAgIGEgY2FsbCBpcyBtYWRlIHRvIGBEUy5TdG9y
ZSNmaW5kYC4gQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCBpcwotICAgICAgICBhbGlhcyBmb3IgW2V4
dHJhY3RTaW5nbGVdKCNtZXRob2RfZXh0cmFjdFNpbmdsZSkuCi0KLSAgICAgICAgQG1ldGhvZCBl
eHRyYWN0RmluZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBw
YXlsb2FkCi0gICAgICAgIEByZXR1cm4ge09iamVjdH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBh
eWxvYWQKLSAgICAgICovCi0gICAgICBleHRyYWN0RmluZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUs
IHBheWxvYWQpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNpbmdsZShzdG9yZSwgdHlw
ZSwgcGF5bG9hZCk7Ci0gICAgICB9LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0RmluZEJl
bG9uZ3NUb2AgaXMgYSBob29rIGludG8gdGhlIGV4dHJhY3QgbWV0aG9kIHVzZWQgd2hlbgotICAg
ICAgICBhIGNhbGwgaXMgbWFkZSB0byBgRFMuU3RvcmUjZmluZEJlbG9uZ3NUb2AuIEJ5IGRlZmF1
bHQgdGhpcyBtZXRob2QgaXMKLSAgICAgICAgYWxpYXMgZm9yIFtleHRyYWN0U2luZ2xlXSgjbWV0
aG9kX2V4dHJhY3RTaW5nbGUpLgotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdEZpbmRCZWxvbmdz
VG8KLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJj
bGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAot
ICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGpzb24gVGhlIGRlc2VyaWFsaXplZCBwYXlsb2FkCi0g
ICAgICAqLwotICAgICAgZXh0cmFjdEZpbmRCZWxvbmdzVG86IGZ1bmN0aW9uKHN0b3JlLCB0eXBl
LCBwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RTaW5nbGUoc3RvcmUsIHR5
cGUsIHBheWxvYWQpOwotICAgICAgfSwKLSAgICAgIC8qKgotICAgICAgICBgZXh0cmFjdFNhdmVg
IGlzIGEgaG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4gYSBjYWxsCi0gICAg
ICAgIGlzIG1hZGUgdG8gYERTLk1vZGVsI3NhdmVgLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIGlz
IGFsaWFzCi0gICAgICAgIGZvciBbZXh0cmFjdFNpbmdsZV0oI21ldGhvZF9leHRyYWN0U2luZ2xl
KS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RTYXZlCi0gICAgICAgIEBwYXJhbSB7RFMuU3Rv
cmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBq
c29uIFRoZSBkZXNlcmlhbGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RTYXZl
OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkgewotICAgICAgICByZXR1cm4gdGhpcy5l
eHRyYWN0U2luZ2xlKHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0KLSAgICAgIC8q
KgotICAgICAgICBgZXh0cmFjdFNpbmdsZWAgaXMgdXNlZCB0byBkZXNlcmlhbGl6ZSBhIHNpbmds
ZSByZWNvcmQgcmV0dXJuZWQKLSAgICAgICAgZnJvbSB0aGUgYWRhcHRlci4KLQotICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6
ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIGV4dHJhY3RTaW5nbGU6
IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgICAgICBwYXlsb2FkLmNv
bW1lbnRzID0gcGF5bG9hZC5fZW1iZWRkZWQuY29tbWVudDsKLSAgICAgICAgICAgIGRlbGV0ZSBw
YXlsb2FkLl9lbWJlZGRlZDsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKHN0b3Jl
LCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgICAgICB9LAotICAgICAgICB9KTsKLSAgICAgICAgYGBg
Ci0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0U2luZ2xlCi0gICAgICAgIEBwYXJhbSB7RFMuU3Rv
cmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBq
c29uIFRoZSBkZXNlcmlhbGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RTaW5n
bGU6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
Lm5vcm1hbGl6ZSh0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBgZXh0cmFjdEFycmF5YCBpcyB1c2VkIHRvIGRlc2VyaWFsaXplIGFuIGFycmF5IG9mIHJlY29y
ZHMKLSAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgYWRhcHRlci4KLQotICAgICAgICBFeGFtcGxl
Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBE
Uy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIGV4dHJhY3RBcnJheTogZnVuY3Rp
b24oc3RvcmUsIHR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLm1h
cChmdW5jdGlvbihqc29uKSB7Ci0gICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RTaW5n
bGUoc3RvcmUsIHR5cGUsIGpzb24pOwotICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0QXJy
YXkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJj
bGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAot
ICAgICAgICBAcmV0dXJuIHtBcnJheX0gYXJyYXkgQW4gYXJyYXkgb2YgZGVzZXJpYWxpemVkIG9i
amVjdHMKLSAgICAgICovCi0gICAgICBleHRyYWN0QXJyYXk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBl
LCBhcnJheVBheWxvYWQpIHsKLSAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSB0aGlzOwotICAgICAg
ICByZXR1cm4gbWFwLmNhbGwoYXJyYXlQYXlsb2FkLCBmdW5jdGlvbihzaW5nbGVQYXlsb2FkKSB7
Ci0gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIubm9ybWFsaXplKHR5cGUsIHNpbmdsZVBheWxv
YWQpOwotICAgICAgICB9KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBgZXh0cmFj
dE1ldGFgIGlzIHVzZWQgdG8gZGVzZXJpYWxpemUgYW55IG1ldGEgaW5mb3JtYXRpb24gaW4gdGhl
Ci0gICAgICAgIGFkYXB0ZXIgcGF5bG9hZC4gQnkgZGVmYXVsdCBFbWJlciBEYXRhIGV4cGVjdHMg
bWV0YSBpbmZvcm1hdGlvbiB0bwotICAgICAgICBiZSBsb2NhdGVkIG9uIHRoZSBgbWV0YWAgcHJv
cGVydHkgb2YgdGhlIHBheWxvYWQgb2JqZWN0LgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkpTT05TZXJp
YWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgZXh0cmFjdE1ldGE6IGZ1bmN0aW9uKHN0b3JlLCB0
eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLl9wYWdp
bmF0aW9uKSB7Ci0gICAgICAgICAgICAgIHN0b3JlLm1ldGFGb3JUeXBlKHR5cGUsIHBheWxvYWQu
X3BhZ2luYXRpb24pOwotICAgICAgICAgICAgICBkZWxldGUgcGF5bG9hZC5fcGFnaW5hdGlvbjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQot
ICAgICAgICBAbWV0aG9kIGV4dHJhY3RNZXRhCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0
b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAg
QHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICovCi0gICAgICBleHRyYWN0TWV0YTogZnVu
Y3Rpb24oc3RvcmUsIHR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5
bG9hZC5tZXRhKSB7Ci0gICAgICAgICAgc3RvcmUubWV0YUZvclR5cGUodHlwZSwgcGF5bG9hZC5t
ZXRhKTsKLSAgICAgICAgICBkZWxldGUgcGF5bG9hZC5tZXRhOwotICAgICAgICB9Ci0gICAgICB9
LAotCi0gICAgICAvKioKLSAgICAgICBga2V5Rm9yQXR0cmlidXRlYCBjYW4gYmUgdXNlZCB0byBk
ZWZpbmUgcnVsZXMgZm9yIGhvdyB0byBjb252ZXJ0IGFuCi0gICAgICAgYXR0cmlidXRlIG5hbWUg
aW4geW91ciBtb2RlbCB0byBhIGtleSBpbiB5b3VyIEpTT04uCi0KLSAgICAgICBFeGFtcGxlCi0K
LSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9
IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICBrZXlGb3JBdHRyaWJ1dGU6IGZ1
bmN0aW9uKGF0dHIpIHsKLSAgICAgICAgICAgcmV0dXJuIEVtYmVyLlN0cmluZy51bmRlcnNjb3Jl
KGF0dHIpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICB9Ci0gICAgICAgfSk7Ci0gICAgICAgYGBg
Ci0KLSAgICAgICBAbWV0aG9kIGtleUZvckF0dHJpYnV0ZQotICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBrZXkKLSAgICAgICBAcmV0dXJuIHtTdHJpbmd9IG5vcm1hbGl6ZWQga2V5Ci0gICAgICAqLwot
Ci0KLSAgICAgIC8qKgotICAgICAgIGBrZXlGb3JSZWxhdGlvbnNoaXBgIGNhbiBiZSB1c2VkIHRv
IGRlZmluZSBhIGN1c3RvbSBrZXkgd2hlbgotICAgICAgIHNlcmlhbGl6aW5nIHJlbGF0aW9uc2hp
cCBwcm9wZXJ0aWVzLiBCeSBkZWZhdWx0IGBKU09OU2VyaWFsaXplcmAKLSAgICAgICBkb2VzIG5v
dCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgotCi0gICAgICAgRXhh
bXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLlBvc3RTZXJpYWxpemVy
ID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBrZXlGb3JSZWxhdGlvbnNo
aXA6IGZ1bmN0aW9uKGtleSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgICAgcmV0dXJuICdy
ZWxfJyArIEVtYmVyLlN0cmluZy51bmRlcnNjb3JlKGtleSk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICBAbWV0aG9kIGtleUZvclJlbGF0aW9uc2hpcAot
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICBAcGFyYW0ge1N0cmluZ30gcmVsYXRp
b25zaGlwIHR5cGUKLSAgICAgICBAcmV0dXJuIHtTdHJpbmd9IG5vcm1hbGl6ZWQga2V5Ci0gICAg
ICAqLwotCi0gICAgICAvLyBIRUxQRVJTCi0KLSAgICAgIC8qKgotICAgICAgIEBtZXRob2QgdHJh
bnNmb3JtRm9yCi0gICAgICAgQHByaXZhdGUKLSAgICAgICBAcGFyYW0ge1N0cmluZ30gYXR0cmli
dXRlVHlwZQotICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcEFzc2VydGlvbgotICAgICAgIEBy
ZXR1cm4ge0RTLlRyYW5zZm9ybX0gdHJhbnNmb3JtCi0gICAgICAqLwotICAgICAgdHJhbnNmb3Jt
Rm9yOiBmdW5jdGlvbihhdHRyaWJ1dGVUeXBlLCBza2lwQXNzZXJ0aW9uKSB7Ci0gICAgICAgIHZh
ciB0cmFuc2Zvcm0gPSB0aGlzLmNvbnRhaW5lci5sb29rdXAoJ3RyYW5zZm9ybTonICsgYXR0cmli
dXRlVHlwZSk7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiVW5hYmxlIHRvIGZpbmQgdHJhbnNmb3Jt
IGZvciAnIiArIGF0dHJpYnV0ZVR5cGUgKyAiJyIsIHNraXBBc3NlcnRpb24gfHwgISF0cmFuc2Zv
cm0pOwotICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwotICAgICAgfQotICAgIH0pOwotCi0gICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IEpTT05TZXJpYWxpemVyOwotICB9KTsKLWRlZmluZSgi
ZW1iZXItZGF0YS9saWIvc2VyaWFsaXplcnMvcmVzdF9zZXJpYWxpemVyIiwgCi0gIFsiLi9qc29u
X3NlcmlhbGl6ZXIiLCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9zdHJpbmciLCJleHBvcnRz
Il0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9y
dHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXIt
ZGF0YQotICAgICovCi0KLSAgICB2YXIgSlNPTlNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7Ci0g
ICAgdmFyIGZvckVhY2ggPSBFbWJlci5BcnJheVBvbHlmaWxscy5mb3JFYWNoOwotICAgIHZhciBt
YXAgPSBFbWJlci5BcnJheVBvbHlmaWxscy5tYXA7Ci0KLSAgICB2YXIgc2luZ3VsYXJpemUgPSBf
X2RlcGVuZGVuY3kyX18uc2luZ3VsYXJpemU7Ci0gICAgdmFyIGNhbWVsaXplID0gRW1iZXIuU3Ry
aW5nLmNhbWVsaXplOwotCi0gICAgZnVuY3Rpb24gY29lcmNlSWQoaWQpIHsKLSAgICAgIHJldHVy
biBpZCA9PSBudWxsID8gbnVsbCA6IGlkKycnOwotICAgIH0KLQotICAgIC8qKgotICAgICAgTm9y
bWFsbHksIGFwcGxpY2F0aW9ucyB3aWxsIHVzZSB0aGUgYFJFU1RTZXJpYWxpemVyYCBieSBpbXBs
ZW1lbnRpbmcKLSAgICAgIHRoZSBgbm9ybWFsaXplYCBtZXRob2QgYW5kIGluZGl2aWR1YWwgbm9y
bWFsaXphdGlvbnMgdW5kZXIKLSAgICAgIGBub3JtYWxpemVIYXNoYC4KLQotICAgICAgVGhpcyBh
bGxvd3MgeW91IHRvIGRvIHdoYXRldmVyIGtpbmQgb2YgbXVuZ2luZyB5b3UgbmVlZCwgYW5kIGlz
Ci0gICAgICBlc3BlY2lhbGx5IHVzZWZ1bCBpZiB5b3VyIHNlcnZlciBpcyBpbmNvbnNpc3RlbnQg
YW5kIHlvdSBuZWVkIHRvCi0gICAgICBkbyBtdW5naW5nIGRpZmZlcmVudGx5IGZvciBtYW55IGRp
ZmZlcmVudCBraW5kcyBvZiByZXNwb25zZXMuCi0KLSAgICAgIFNlZSB0aGUgYG5vcm1hbGl6ZWAg
ZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgIyMgQWNyb3NzIHRo
ZSBCb2FyZCBOb3JtYWxpemF0aW9uCi0KLSAgICAgIFRoZXJlIGFyZSBhbHNvIGEgbnVtYmVyIG9m
IGhvb2tzIHRoYXQgeW91IG1pZ2h0IGZpbmQgdXNlZnVsIHRvIGRlZmluZWQKLSAgICAgIGFjcm9z
cy10aGUtYm9hcmQgcnVsZXMgZm9yIHlvdXIgcGF5bG9hZC4gVGhlc2UgcnVsZXMgd2lsbCBiZSB1
c2VmdWwKLSAgICAgIGlmIHlvdXIgc2VydmVyIGlzIGNvbnNpc3RlbnQsIG9yIGlmIHlvdSdyZSBi
dWlsZGluZyBhbiBhZGFwdGVyIGZvcgotICAgICAgYW4gaW5mcmFzdHJ1Y3R1cmUgc2VydmljZSwg
bGlrZSBQYXJzZSwgYW5kIHdhbnQgdG8gZW5jb2RlIHNlcnZpY2UKLSAgICAgIGNvbnZlbnRpb25z
LgotCi0gICAgICBGb3IgZXhhbXBsZSwgaWYgYWxsIG9mIHlvdXIga2V5cyBhcmUgdW5kZXJzY29y
ZWQgYW5kIGFsbC1jYXBzLCBidXQKLSAgICAgIG90aGVyd2lzZSBjb25zaXN0ZW50IHdpdGggdGhl
IG5hbWVzIHlvdSB1c2UgaW4geW91ciBtb2RlbHMsIHlvdQotICAgICAgY2FuIGltcGxlbWVudCBh
Y3Jvc3MtdGhlLWJvYXJkIHJ1bGVzIGZvciBob3cgdG8gY29udmVydCBhbiBhdHRyaWJ1dGUKLSAg
ICAgIG5hbWUgaW4geW91ciBtb2RlbCB0byBhIGtleSBpbiB5b3VyIEpTT04uCi0KLSAgICAgIGBg
YGpzCi0gICAgICBBcHAuQXBwbGljYXRpb25TZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIu
ZXh0ZW5kKHsKLSAgICAgICAga2V5Rm9yQXR0cmlidXRlOiBmdW5jdGlvbihhdHRyKSB7Ci0gICAg
ICAgICAgcmV0dXJuIEVtYmVyLlN0cmluZy51bmRlcnNjb3JlKGF0dHIpLnRvVXBwZXJDYXNlKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIFlvdSBjYW4gYWxzbyBp
bXBsZW1lbnQgYGtleUZvclJlbGF0aW9uc2hpcGAsIHdoaWNoIHRha2VzIHRoZSBuYW1lCi0gICAg
ICBvZiB0aGUgcmVsYXRpb25zaGlwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIsIGFuZCB0aGUga2lu
ZCBvZgotICAgICAgcmVsYXRpb25zaGlwIChgaGFzTWFueWAgb3IgYGJlbG9uZ3NUb2ApIGFzIHRo
ZSBzZWNvbmQgcGFyYW1ldGVyLgotCi0gICAgICBAY2xhc3MgUkVTVFNlcmlhbGl6ZXIKLSAgICAg
IEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIERTLkpTT05TZXJpYWxpemVyCi0gICAgKi8K
LSAgICB2YXIgUkVTVFNlcmlhbGl6ZXIgPSBKU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAg
LyoqCi0gICAgICAgIElmIHlvdSB3YW50IHRvIGRvIG5vcm1hbGl6YXRpb25zIHNwZWNpZmljIHRv
IHNvbWUgcGFydCBvZiB0aGUgcGF5bG9hZCwgeW91Ci0gICAgICAgIGNhbiBzcGVjaWZ5IHRob3Nl
IHVuZGVyIGBub3JtYWxpemVIYXNoYC4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhl
IGZvbGxvd2luZyBqc29uIHdoZXJlIHRoZSB0aGUgYElEc2AgdW5kZXIKLSAgICAgICAgYCJjb21t
ZW50cyJgIGFyZSBwcm92aWRlZCBhcyBgX2lkYCBpbnN0ZWFkIG9mIGBpZGAuCi0KLSAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICB7Ci0gICAgICAgICAgInBvc3QiOiB7Ci0gICAgICAgICAg
ICAiaWQiOiAxLAotICAgICAgICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAg
ICAgICAgICAgImNvbW1lbnRzIjogWyAxLCAyIF0KLSAgICAgICAgICB9LAotICAgICAgICAgICJj
b21tZW50cyI6IFt7Ci0gICAgICAgICAgICAiX2lkIjogMSwKLSAgICAgICAgICAgICJib2R5Ijog
IkZJUlNUIgotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJfaWQiOiAyLAotICAgICAgICAg
ICAgImJvZHkiOiAiUmFpbHMgaXMgdW5hZ2kiCi0gICAgICAgICAgfV0KLSAgICAgICAgfQotICAg
ICAgICBgYGAKLQotICAgICAgICBZb3UgdXNlIGBub3JtYWxpemVIYXNoYCB0byBub3JtYWxpemUg
anVzdCB0aGUgY29tbWVudHM6Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAu
UG9zdFNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIG5v
cm1hbGl6ZUhhc2g6IHsKLSAgICAgICAgICAgIGNvbW1lbnRzOiBmdW5jdGlvbihoYXNoKSB7Ci0g
ICAgICAgICAgICAgIGhhc2guaWQgPSBoYXNoLl9pZDsKLSAgICAgICAgICAgICAgZGVsZXRlIGhh
c2guX2lkOwotICAgICAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGUga2V5IHVuZGVy
IGBub3JtYWxpemVIYXNoYCBpcyB1c3VhbGx5IGp1c3QgdGhlIG9yaWdpbmFsIGtleQotICAgICAg
ICB0aGF0IHdhcyBpbiB0aGUgb3JpZ2luYWwgcGF5bG9hZC4gSG93ZXZlciwga2V5IG5hbWVzIHdp
bGwgYmUKLSAgICAgICAgaW1wYWN0ZWQgYnkgYW55IG1vZGlmaWNhdGlvbnMgZG9uZSBpbiB0aGUg
YG5vcm1hbGl6ZVBheWxvYWRgCi0gICAgICAgIG1ldGhvZC4gVGhlIGBEUy5SRVNUU2VyaWFsaXpl
cmAncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG1ha2VzIG5vCi0gICAgICAgIGNoYW5nZXMgdG8g
dGhlIHBheWxvYWQga2V5cy4KLQotICAgICAgICBAcHJvcGVydHkgbm9ybWFsaXplSGFzaAotICAg
ICAgICBAdHlwZSB7T2JqZWN0fQotICAgICAgICBAZGVmYXVsdCB1bmRlZmluZWQKLSAgICAgICov
Ci0KLSAgICAgIC8qKgotICAgICAgICBOb3JtYWxpemVzIGEgcGFydCBvZiB0aGUgSlNPTiBwYXls
b2FkIHJldHVybmVkIGJ5Ci0gICAgICAgIHRoZSBzZXJ2ZXIuIFlvdSBzaG91bGQgb3ZlcnJpZGUg
dGhpcyBtZXRob2QsIG11bmdlIHRoZSBoYXNoCi0gICAgICAgIGFuZCBjYWxsIHN1cGVyIGlmIHlv
dSBoYXZlIGdlbmVyaWMgbm9ybWFsaXphdGlvbiB0byBkby4KLQotICAgICAgICBJdCB0YWtlcyB0
aGUgdHlwZSBvZiB0aGUgcmVjb3JkIHRoYXQgaXMgYmVpbmcgbm9ybWFsaXplZAotICAgICAgICAo
YXMgYSBEUy5Nb2RlbCBjbGFzcyksIHRoZSBwcm9wZXJ0eSB3aGVyZSB0aGUgaGFzaCB3YXMKLSAg
ICAgICAgb3JpZ2luYWxseSBmb3VuZCwgYW5kIHRoZSBoYXNoIHRvIG5vcm1hbGl6ZS4KLQotICAg
ICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBwYXlsb2FkIHRoYXQgbG9va3MgbGlrZSB0
aGlzOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAg
ICAgICAgICAgICJpZCI6IDEsCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2Fz
ZSIsCi0gICAgICAgICAgICAiY29tbWVudHMiOiBbIDEsIDIgXQotICAgICAgICAgIH0sCi0gICAg
ICAgICAgImNvbW1lbnRzIjogW3sKLSAgICAgICAgICAgICJpZCI6IDEsCi0gICAgICAgICAgICAi
Ym9keSI6ICJGSVJTVCIKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiaWQiOiAyLAotICAg
ICAgICAgICAgImJvZHkiOiAiUmFpbHMgaXMgdW5hZ2kiCi0gICAgICAgICAgfV0KLSAgICAgICAg
fQotICAgICAgICBgYGAKLQotICAgICAgICBUaGUgYG5vcm1hbGl6ZWAgbWV0aG9kIHdpbGwgYmUg
Y2FsbGVkIHRocmVlIHRpbWVzOgotCi0gICAgICAgICogV2l0aCBgQXBwLlBvc3RgLCBgInBvc3Rz
ImAgYW5kIGB7IGlkOiAxLCB0aXRsZTogIlJhaWxzIGlzIG9tYWthc2UiLCAuLi4gfWAKLSAgICAg
ICAgKiBXaXRoIGBBcHAuQ29tbWVudGAsIGAiY29tbWVudHMiYCBhbmQgYHsgaWQ6IDEsIGJvZHk6
ICJGSVJTVCIgfWAKLSAgICAgICAgKiBXaXRoIGBBcHAuQ29tbWVudGAsIGAiY29tbWVudHMiYCBh
bmQgYHsgaWQ6IDIsIGJvZHk6ICJSYWlscyBpcyB1bmFnaSIgfWAKLQotICAgICAgICBZb3UgY2Fu
IHVzZSB0aGlzIG1ldGhvZCwgZm9yIGV4YW1wbGUsIHRvIG5vcm1hbGl6ZSB1bmRlcnNjb3JlZCBr
ZXlzIHRvIGNhbWVsaXplZAotICAgICAgICBvciBvdGhlciBnZW5lcmFsLXB1cnBvc2Ugbm9ybWFs
aXphdGlvbnMuCi0KLSAgICAgICAgSWYgeW91IHdhbnQgdG8gZG8gbm9ybWFsaXphdGlvbnMgc3Bl
Y2lmaWMgdG8gc29tZSBwYXJ0IG9mIHRoZSBwYXlsb2FkLCB5b3UKLSAgICAgICAgY2FuIHNwZWNp
ZnkgdGhvc2UgdW5kZXIgYG5vcm1hbGl6ZUhhc2hgLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBp
ZiB0aGUgYElEc2AgdW5kZXIgYCJjb21tZW50cyJgIGFyZSBwcm92aWRlZCBhcyBgX2lkYCBpbnN0
ZWFkIG9mCi0gICAgICAgIGBpZGAsIHlvdSBjYW4gc3BlY2lmeSBob3cgdG8gbm9ybWFsaXplIGp1
c3QgdGhlIGNvbW1lbnRzOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFs
aXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgbm9ybWFsaXplSGFz
aDogewotICAgICAgICAgICAgY29tbWVudHM6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgICAg
ICAgaGFzaC5pZCA9IGhhc2guX2lkOwotICAgICAgICAgICAgICBkZWxldGUgaGFzaC5faWQ7Ci0g
ICAgICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBrZXkgdW5kZXIgYG5vcm1hbGl6
ZUhhc2hgIGlzIGp1c3QgdGhlIG9yaWdpbmFsIGtleSB0aGF0IHdhcyBpbiB0aGUgb3JpZ2luYWwK
LSAgICAgICAgcGF5bG9hZC4KLQotICAgICAgICBAbWV0aG9kIG5vcm1hbGl6ZQotICAgICAgICBA
cGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBoYXNoCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wCi0gICAgICAgIEByZXR1cm4ge09i
amVjdH0KLSAgICAgICovCi0gICAgICBub3JtYWxpemU6IGZ1bmN0aW9uKHR5cGUsIGhhc2gsIHBy
b3ApIHsKLSAgICAgICAgdGhpcy5ub3JtYWxpemVJZChoYXNoKTsKLSAgICAgICAgdGhpcy5ub3Jt
YWxpemVBdHRyaWJ1dGVzKHR5cGUsIGhhc2gpOwotICAgICAgICB0aGlzLm5vcm1hbGl6ZVJlbGF0
aW9uc2hpcHModHlwZSwgaGFzaCk7Ci0KLSAgICAgICAgdGhpcy5ub3JtYWxpemVVc2luZ0RlY2xh
cmVkTWFwcGluZyh0eXBlLCBoYXNoKTsKLQotICAgICAgICBpZiAodGhpcy5ub3JtYWxpemVIYXNo
ICYmIHRoaXMubm9ybWFsaXplSGFzaFtwcm9wXSkgewotICAgICAgICAgIHRoaXMubm9ybWFsaXpl
SGFzaFtwcm9wXShoYXNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuYXBwbHlUcmFuc2Zv
cm1zKHR5cGUsIGhhc2gpOwotICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBub3JtYWxpemUgYWxsIHBh
eWxvYWRzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleQotICAgICAgICByZXByZXNlbnQgc2lu
Z2xlIHJlY29yZHMgb3IgYW4gYXJyYXkuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBtaWdo
dCB3YW50IHRvIHJlbW92ZSBzb21lIGV4dHJhbmVvdXMgZGF0YSBmcm9tIHRoZSBwYXlsb2FkOgot
Ci0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIgPSBEUy5S
RVNUU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIG5vcm1hbGl6ZVBheWxvYWQ6IGZ1bmN0
aW9uKHBheWxvYWQpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBwYXlsb2FkLnZlcnNpb247Ci0gICAg
ICAgICAgICBkZWxldGUgcGF5bG9hZC5zdGF0dXM7Ci0gICAgICAgICAgICByZXR1cm4gcGF5bG9h
ZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0
aG9kIG5vcm1hbGl6ZVBheWxvYWQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAg
ICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgbm9ybWFsaXplZCBwYXlsb2FkCi0gICAgICAqLwot
ICAgICAgbm9ybWFsaXplUGF5bG9hZDogZnVuY3Rpb24ocGF5bG9hZCkgewotICAgICAgICByZXR1
cm4gcGF5bG9hZDsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIG5vcm1h
bGl6ZUF0dHJpYnV0ZXMKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBub3JtYWxp
emVBdHRyaWJ1dGVzOiBmdW5jdGlvbih0eXBlLCBoYXNoKSB7Ci0gICAgICAgIHZhciBwYXlsb2Fk
S2V5LCBrZXk7Ci0KLSAgICAgICAgaWYgKHRoaXMua2V5Rm9yQXR0cmlidXRlKSB7Ci0gICAgICAg
ICAgdHlwZS5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgcGF5bG9h
ZEtleSA9IHRoaXMua2V5Rm9yQXR0cmlidXRlKGtleSk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09
PSBwYXlsb2FkS2V5KSB7IHJldHVybjsgfQotCi0gICAgICAgICAgICBoYXNoW2tleV0gPSBoYXNo
W3BheWxvYWRLZXldOwotICAgICAgICAgICAgZGVsZXRlIGhhc2hbcGF5bG9hZEtleV07Ci0gICAg
ICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBAbWV0aG9kIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcHMKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICovCi0gICAgICBub3JtYWxpemVSZWxhdGlvbnNoaXBzOiBmdW5jdGlvbih0eXBlLCBoYXNoKSB7
Ci0gICAgICAgIHZhciBwYXlsb2FkS2V5LCBrZXk7Ci0KLSAgICAgICAgaWYgKHRoaXMua2V5Rm9y
UmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgdHlwZS5lYWNoUmVsYXRpb25zaGlwKGZ1bmN0aW9u
KGtleSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgICBwYXlsb2FkS2V5ID0gdGhpcy5rZXlG
b3JSZWxhdGlvbnNoaXAoa2V5LCByZWxhdGlvbnNoaXAua2luZCk7Ci0gICAgICAgICAgICBpZiAo
a2V5ID09PSBwYXlsb2FkS2V5KSB7IHJldHVybjsgfQotCi0gICAgICAgICAgICBoYXNoW2tleV0g
PSBoYXNoW3BheWxvYWRLZXldOwotICAgICAgICAgICAgZGVsZXRlIGhhc2hbcGF5bG9hZEtleV07
Ci0gICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBDYWxsZWQgd2hlbiB0aGUgc2VydmVyIGhhcyByZXR1cm5lZCBhIHBheWxvYWQgcmVw
cmVzZW50aW5nCi0gICAgICAgIGEgc2luZ2xlIHJlY29yZCwgc3VjaCBhcyBpbiByZXNwb25zZSB0
byBhIGBmaW5kYCBvciBgc2F2ZWAuCi0KLSAgICAgICAgSXQgaXMgeW91ciBvcHBvcnR1bml0eSB0
byBjbGVhbiB1cCB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaW50byB0aGUgbm9ybWFsaXplZAotICAg
ICAgICBmb3JtIGV4cGVjdGVkIGJ5IEVtYmVyIERhdGEuCi0KLSAgICAgICAgSWYgeW91IHdhbnQs
IHlvdSBjYW4ganVzdCByZXN0cnVjdHVyZSB0aGUgdG9wLWxldmVsIG9mIHlvdXIgcGF5bG9hZCwg
YW5kCi0gICAgICAgIGRvIG1vcmUgZmluZS1ncmFpbmVkIG5vcm1hbGl6YXRpb24gaW4gdGhlIGBu
b3JtYWxpemVgIG1ldGhvZC4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBw
YXlsb2FkIGxpa2UgdGhpcyBpbiByZXNwb25zZSB0byBhIHJlcXVlc3QgZm9yCi0gICAgICAgIHBv
c3QgMToKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgImlkIjogMSwKLSAg
ICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0KLSAgICAgICAgICAiX2VtYmVk
ZGVkIjogewotICAgICAgICAgICAgImNvbW1lbnQiOiBbewotICAgICAgICAgICAgICAiX2lkIjog
MSwKLSAgICAgICAgICAgICAgImNvbW1lbnRfdGl0bGUiOiAiRklSU1QiCi0gICAgICAgICAgICB9
LCB7Ci0gICAgICAgICAgICAgICJfaWQiOiAyLAotICAgICAgICAgICAgICAiY29tbWVudF90aXRs
ZSI6ICJSYWlscyBpcyB1bmFnaSIKLSAgICAgICAgICAgIH1dCi0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFlvdSBjb3VsZCBpbXBsZW1lbnQgYSBzZXJpYWxp
emVyIHRoYXQgbG9va3MgbGlrZSB0aGlzIHRvIGdldCB5b3VyIHBheWxvYWQKLSAgICAgICAgaW50
byBzaGFwZToKLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBE
Uy5SRVNUU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIC8vIEZpcnN0LCByZXN0cnVjdHVy
ZSB0aGUgdG9wLWxldmVsIHNvIGl0J3Mgb3JnYW5pemVkIGJ5IHR5cGUKLSAgICAgICAgICBleHRy
YWN0U2luZ2xlOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCwgaWQpIHsKLSAgICAgICAg
ICAgIHZhciBjb21tZW50cyA9IHBheWxvYWQuX2VtYmVkZGVkLmNvbW1lbnQ7Ci0gICAgICAgICAg
ICBkZWxldGUgcGF5bG9hZC5fZW1iZWRkZWQ7Ci0KLSAgICAgICAgICAgIHBheWxvYWQgPSB7IGNv
bW1lbnRzOiBjb21tZW50cywgcG9zdDogcGF5bG9hZCB9OwotICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N1cGVyKHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBpZCk7Ci0gICAgICAgICAgfSwKLQotICAg
ICAgICAgIG5vcm1hbGl6ZUhhc2g6IHsKLSAgICAgICAgICAgIC8vIE5leHQsIG5vcm1hbGl6ZSBp
bmRpdmlkdWFsIGNvbW1lbnRzLCB3aGljaCAoYWZ0ZXIgYGV4dHJhY3RgKQotICAgICAgICAgICAg
Ly8gYXJlIG5vdyBsb2NhdGVkIHVuZGVyIGBjb21tZW50c2AKLSAgICAgICAgICAgIGNvbW1lbnRz
OiBmdW5jdGlvbihoYXNoKSB7Ci0gICAgICAgICAgICAgIGhhc2guaWQgPSBoYXNoLl9pZDsKLSAg
ICAgICAgICAgICAgaGFzaC50aXRsZSA9IGhhc2guY29tbWVudF90aXRsZTsKLSAgICAgICAgICAg
ICAgZGVsZXRlIGhhc2guX2lkOwotICAgICAgICAgICAgICBkZWxldGUgaGFzaC5jb21tZW50X3Rp
dGxlOwotICAgICAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICB9Ci0gICAgICAgIH0pCi0gICAgICAgIGBgYAotCi0gICAgICAgIFdoZW4geW91IGNhbGwgc3Vw
ZXIgZnJvbSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBgZXh0cmFjdFNpbmdsZWAsIHRoZQot
ICAgICAgICBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbiB3aWxsIGZpbmQgdGhlIHByaW1hcnkgcmVj
b3JkIGluIHlvdXIgbm9ybWFsaXplZAotICAgICAgICBwYXlsb2FkIGFuZCBwdXNoIHRoZSByZW1h
aW5pbmcgcmVjb3JkcyBpbnRvIHRoZSBzdG9yZS4KLQotICAgICAgICBUaGUgcHJpbWFyeSByZWNv
cmQgaXMgdGhlIHNpbmdsZSBoYXNoIGZvdW5kIHVuZGVyIGBwb3N0YCBvciB0aGUgZmlyc3QKLSAg
ICAgICAgZWxlbWVudCBvZiB0aGUgYHBvc3RzYCBhcnJheS4KLQotICAgICAgICBUaGUgcHJpbWFy
eSByZWNvcmQgaGFzIHNwZWNpYWwgbWVhbmluZyB3aGVuIHRoZSByZWNvcmQgaXMgYmVpbmcgY3Jl
YXRlZAotICAgICAgICBmb3IgdGhlIGZpcnN0IHRpbWUgb3IgdXBkYXRlZCAoYGNyZWF0ZVJlY29y
ZGAgb3IgYHVwZGF0ZVJlY29yZGApLiBJbgotICAgICAgICBwYXJ0aWN1bGFyLCBpdCB3aWxsIHVw
ZGF0ZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgcmVjb3JkIHRoYXQgd2FzIHNhdmVkLgotCi0gICAg
ICAgIEBtZXRob2QgZXh0cmFjdFNpbmdsZQotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9y
ZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSBwcmltYXJ5VHlwZQotICAg
ICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAotICAgICAgICBAcGFyYW0ge1N0cmluZ30gcmVj
b3JkSWQKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgcHJpbWFyeSByZXNwb25zZSB0byB0
aGUgb3JpZ2luYWwgcmVxdWVzdAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RTaW5nbGU6IGZ1bmN0
aW9uKHN0b3JlLCBwcmltYXJ5VHlwZSwgcGF5bG9hZCwgcmVjb3JkSWQpIHsKLSAgICAgICAgcGF5
bG9hZCA9IHRoaXMubm9ybWFsaXplUGF5bG9hZChwYXlsb2FkKTsKLSAgICAgICAgdmFyIHByaW1h
cnlUeXBlTmFtZSA9IHByaW1hcnlUeXBlLnR5cGVLZXksCi0gICAgICAgICAgICBwcmltYXJ5UmVj
b3JkOwotCi0gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGF5bG9hZCkgewotICAgICAgICAgIHZh
ciB0eXBlTmFtZSAgPSB0aGlzLnR5cGVGb3JSb290KHByb3ApLAotICAgICAgICAgICAgICB0eXBl
ID0gc3RvcmUubW9kZWxGb3IodHlwZU5hbWUpLAotICAgICAgICAgICAgICBpc1ByaW1hcnkgPSB0
eXBlLnR5cGVLZXkgPT09IHByaW1hcnlUeXBlTmFtZTsKLQotICAgICAgICAgIC8vIGxlZ2FjeSBz
dXBwb3J0IGZvciBzaW5ndWxhciByZXNvdXJjZXMKLSAgICAgICAgICBpZiAoaXNQcmltYXJ5ICYm
IEVtYmVyLnR5cGVPZihwYXlsb2FkW3Byb3BdKSAhPT0gImFycmF5IiApIHsKLSAgICAgICAgICAg
IHByaW1hcnlSZWNvcmQgPSB0aGlzLm5vcm1hbGl6ZShwcmltYXJ5VHlwZSwgcGF5bG9hZFtwcm9w
XSwgcHJvcCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAvKmpzaGludCBsb29wZnVuYzp0cnVlKi8KLSAgICAgICAgICBmb3JFYWNoLmNhbGwocGF5bG9h
ZFtwcm9wXSwgZnVuY3Rpb24oaGFzaCkgewotICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gdGhp
cy50eXBlRm9yUm9vdChwcm9wKSwKLSAgICAgICAgICAgICAgICB0eXBlID0gc3RvcmUubW9kZWxG
b3IodHlwZU5hbWUpLAotICAgICAgICAgICAgICAgIHR5cGVTZXJpYWxpemVyID0gc3RvcmUuc2Vy
aWFsaXplckZvcih0eXBlKTsKLQotICAgICAgICAgICAgaGFzaCA9IHR5cGVTZXJpYWxpemVyLm5v
cm1hbGl6ZSh0eXBlLCBoYXNoLCBwcm9wKTsKLQotICAgICAgICAgICAgdmFyIGlzRmlyc3RDcmVh
dGVkUmVjb3JkID0gaXNQcmltYXJ5ICYmICFyZWNvcmRJZCAmJiAhcHJpbWFyeVJlY29yZCwKLSAg
ICAgICAgICAgICAgICBpc1VwZGF0ZWRSZWNvcmQgPSBpc1ByaW1hcnkgJiYgY29lcmNlSWQoaGFz
aC5pZCkgPT09IHJlY29yZElkOwotCi0gICAgICAgICAgICAvLyBmaW5kIHRoZSBwcmltYXJ5IHJl
Y29yZC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJdCdzIGVpdGhlcjoKLSAgICAg
ICAgICAgIC8vICogdGhlIHJlY29yZCB3aXRoIHRoZSBzYW1lIElEIGFzIHRoZSBvcmlnaW5hbCBy
ZXF1ZXN0Ci0gICAgICAgICAgICAvLyAqIGluIHRoZSBjYXNlIG9mIGEgbmV3bHkgY3JlYXRlZCBy
ZWNvcmQgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBJRCwgdGhlIGZpcnN0Ci0gICAgICAgICAgICAvLyAg
IHJlY29yZCBpbiB0aGUgQXJyYXkKLSAgICAgICAgICAgIGlmIChpc0ZpcnN0Q3JlYXRlZFJlY29y
ZCB8fCBpc1VwZGF0ZWRSZWNvcmQpIHsKLSAgICAgICAgICAgICAgcHJpbWFyeVJlY29yZCA9IGhh
c2g7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBzdG9yZS5wdXNoKHR5cGVO
YW1lLCBoYXNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBwcmltYXJ5UmVjb3JkOwotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIENhbGxlZCB3aGVuIHRoZSBzZXJ2ZXIgaGFzIHJldHVybmVkIGEgcGF5bG9hZCBy
ZXByZXNlbnRpbmcKLSAgICAgICAgbXVsdGlwbGUgcmVjb3Jkcywgc3VjaCBhcyBpbiByZXNwb25z
ZSB0byBhIGBmaW5kQWxsYCBvciBgZmluZFF1ZXJ5YC4KLQotICAgICAgICBJdCBpcyB5b3VyIG9w
cG9ydHVuaXR5IHRvIGNsZWFuIHVwIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpbnRvIHRoZSBub3Jt
YWxpemVkCi0gICAgICAgIGZvcm0gZXhwZWN0ZWQgYnkgRW1iZXIgRGF0YS4KLQotICAgICAgICBJ
ZiB5b3Ugd2FudCwgeW91IGNhbiBqdXN0IHJlc3RydWN0dXJlIHRoZSB0b3AtbGV2ZWwgb2YgeW91
ciBwYXlsb2FkLCBhbmQKLSAgICAgICAgZG8gbW9yZSBmaW5lLWdyYWluZWQgbm9ybWFsaXphdGlv
biBpbiB0aGUgYG5vcm1hbGl6ZWAgbWV0aG9kLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBpZiB5
b3UgaGF2ZSBhIHBheWxvYWQgbGlrZSB0aGlzIGluIHJlc3BvbnNlIHRvIGEgcmVxdWVzdCBmb3IK
LSAgICAgICAgYWxsIHBvc3RzOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAg
ICAiX2VtYmVkZGVkIjogewotICAgICAgICAgICAgInBvc3QiOiBbewotICAgICAgICAgICAgICAi
aWQiOiAxLAotICAgICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIKLSAgICAg
ICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgImlkIjogMiwKLSAgICAgICAgICAgICAgInRpdGxl
IjogIlRoZSBQYXJsZXkgTGV0dGVyIgotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAiY29t
bWVudCI6IFt7Ci0gICAgICAgICAgICAgICJfaWQiOiAxLAotICAgICAgICAgICAgICAiY29tbWVu
dF90aXRsZSI6ICJSYWlscyBpcyB1bmFnaSIKLSAgICAgICAgICAgICAgInBvc3RfaWQiOiAxCi0g
ICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICJfaWQiOiAyLAotICAgICAgICAgICAgICAi
Y29tbWVudF90aXRsZSI6ICJEb24ndCB0cmVhZCBvbiBtZSIsCi0gICAgICAgICAgICAgICJwb3N0
X2lkIjogMgotICAgICAgICAgICAgfV0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
YGBgCi0KLSAgICAgICAgWW91IGNvdWxkIGltcGxlbWVudCBhIHNlcmlhbGl6ZXIgdGhhdCBsb29r
cyBsaWtlIHRoaXMgdG8gZ2V0IHlvdXIgcGF5bG9hZAotICAgICAgICBpbnRvIHNoYXBlOgotCi0g
ICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxp
emVyLmV4dGVuZCh7Ci0gICAgICAgICAgLy8gRmlyc3QsIHJlc3RydWN0dXJlIHRoZSB0b3AtbGV2
ZWwgc28gaXQncyBvcmdhbml6ZWQgYnkgdHlwZQotICAgICAgICAgIC8vIGFuZCB0aGUgY29tbWVu
dHMgYXJlIGxpc3RlZCB1bmRlciBhIHBvc3QncyBgY29tbWVudHNgIGtleS4KLSAgICAgICAgICBl
eHRyYWN0QXJyYXk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgICAg
ICB2YXIgcG9zdHMgPSBwYXlsb2FkLl9lbWJlZGRlZC5wb3N0OwotICAgICAgICAgICAgdmFyIGNv
bW1lbnRzID0gW107Ci0gICAgICAgICAgICB2YXIgcG9zdENhY2hlID0ge307Ci0KLSAgICAgICAg
ICAgIHBvc3RzLmZvckVhY2goZnVuY3Rpb24ocG9zdCkgewotICAgICAgICAgICAgICBwb3N0LmNv
bW1lbnRzID0gW107Ci0gICAgICAgICAgICAgIHBvc3RDYWNoZVtwb3N0LmlkXSA9IHBvc3Q7Ci0g
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcGF5bG9hZC5fZW1iZWRkZWQuY29tbWVudC5m
b3JFYWNoKGZ1bmN0aW9uKGNvbW1lbnQpIHsKLSAgICAgICAgICAgICAgY29tbWVudHMucHVzaChj
b21tZW50KTsKLSAgICAgICAgICAgICAgcG9zdENhY2hlW2NvbW1lbnQucG9zdF9pZF0uY29tbWVu
dHMucHVzaChjb21tZW50KTsKLSAgICAgICAgICAgICAgZGVsZXRlIGNvbW1lbnQucG9zdF9pZDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGF5bG9hZCA9IHsgY29tbWVudHM6IGNvbW1l
bnRzLCBwb3N0czogcGF5bG9hZCB9OwotCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIo
c3RvcmUsIHR5cGUsIHBheWxvYWQpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBub3JtYWxp
emVIYXNoOiB7Ci0gICAgICAgICAgICAvLyBOZXh0LCBub3JtYWxpemUgaW5kaXZpZHVhbCBjb21t
ZW50cywgd2hpY2ggKGFmdGVyIGBleHRyYWN0YCkKLSAgICAgICAgICAgIC8vIGFyZSBub3cgbG9j
YXRlZCB1bmRlciBgY29tbWVudHNgCi0gICAgICAgICAgICBjb21tZW50czogZnVuY3Rpb24oaGFz
aCkgewotICAgICAgICAgICAgICBoYXNoLmlkID0gaGFzaC5faWQ7Ci0gICAgICAgICAgICAgIGhh
c2gudGl0bGUgPSBoYXNoLmNvbW1lbnRfdGl0bGU7Ci0gICAgICAgICAgICAgIGRlbGV0ZSBoYXNo
Ll9pZDsKLSAgICAgICAgICAgICAgZGVsZXRlIGhhc2guY29tbWVudF90aXRsZTsKLSAgICAgICAg
ICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9
KQotICAgICAgICBgYGAKLQotICAgICAgICBXaGVuIHlvdSBjYWxsIHN1cGVyIGZyb20geW91ciBv
d24gaW1wbGVtZW50YXRpb24gb2YgYGV4dHJhY3RBcnJheWAsIHRoZQotICAgICAgICBidWlsdC1p
biBpbXBsZW1lbnRhdGlvbiB3aWxsIGZpbmQgdGhlIHByaW1hcnkgYXJyYXkgaW4geW91ciBub3Jt
YWxpemVkCi0gICAgICAgIHBheWxvYWQgYW5kIHB1c2ggdGhlIHJlbWFpbmluZyByZWNvcmRzIGlu
dG8gdGhlIHN0b3JlLgotCi0gICAgICAgIFRoZSBwcmltYXJ5IGFycmF5IGlzIHRoZSBhcnJheSBm
b3VuZCB1bmRlciBgcG9zdHNgLgotCi0gICAgICAgIFRoZSBwcmltYXJ5IHJlY29yZCBoYXMgc3Bl
Y2lhbCBtZWFuaW5nIHdoZW4gcmVzcG9uZGluZyB0byBgZmluZFF1ZXJ5YAotICAgICAgICBvciBg
ZmluZEhhc01hbnlgLiBJbiBwYXJ0aWN1bGFyLCB0aGUgcHJpbWFyeSBhcnJheSB3aWxsIGJlY29t
ZSB0aGUKLSAgICAgICAgbGlzdCBvZiByZWNvcmRzIGluIHRoZSByZWNvcmQgYXJyYXkgdGhhdCBr
aWNrZWQgb2ZmIHRoZSByZXF1ZXN0LgotCi0gICAgICAgIElmIHlvdXIgcHJpbWFyeSBhcnJheSBj
b250YWlucyBzZWNvbmRhcnkgKGVtYmVkZGVkKSByZWNvcmRzIG9mIHRoZSBzYW1lIHR5cGUsCi0g
ICAgICAgIHlvdSBjYW5ub3QgcGxhY2UgdGhlc2UgaW50byB0aGUgcHJpbWFyeSBhcnJheSBgcG9z
dHNgLiBJbnN0ZWFkLCBwbGFjZSB0aGUKLSAgICAgICAgc2Vjb25kYXJ5IGl0ZW1zIGludG8gYW4g
dW5kZXJzY29yZSBwcmVmaXhlZCBwcm9wZXJ0eSBgX3Bvc3RzYCwgd2hpY2ggd2lsbAotICAgICAg
ICBwdXNoIHRoZXNlIGl0ZW1zIGludG8gdGhlIHN0b3JlIGFuZCB3aWxsIG5vdCBhZmZlY3QgdGhl
IHJlc3VsdGluZyBxdWVyeS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RBcnJheQotICAgICAg
ICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERT
Lk1vZGVsfSBwcmltYXJ5VHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAotICAg
ICAgICBAcmV0dXJuIHtBcnJheX0gVGhlIHByaW1hcnkgYXJyYXkgdGhhdCB3YXMgcmV0dXJuZWQg
aW4gcmVzcG9uc2UKLSAgICAgICAgICB0byB0aGUgb3JpZ2luYWwgcXVlcnkuCi0gICAgICAqLwot
ICAgICAgZXh0cmFjdEFycmF5OiBmdW5jdGlvbihzdG9yZSwgcHJpbWFyeVR5cGUsIHBheWxvYWQp
IHsKLSAgICAgICAgcGF5bG9hZCA9IHRoaXMubm9ybWFsaXplUGF5bG9hZChwYXlsb2FkKTsKLQot
ICAgICAgICB2YXIgcHJpbWFyeVR5cGVOYW1lID0gcHJpbWFyeVR5cGUudHlwZUtleSwKLSAgICAg
ICAgICAgIHByaW1hcnlBcnJheTsKLQotICAgICAgICBmb3IgKHZhciBwcm9wIGluIHBheWxvYWQp
IHsKLSAgICAgICAgICB2YXIgdHlwZUtleSA9IHByb3AsCi0gICAgICAgICAgICAgIGZvcmNlZFNl
Y29uZGFyeSA9IGZhbHNlOwotCi0gICAgICAgICAgaWYgKHByb3AuY2hhckF0KDApID09PSAnXycp
IHsKLSAgICAgICAgICAgIGZvcmNlZFNlY29uZGFyeSA9IHRydWU7Ci0gICAgICAgICAgICB0eXBl
S2V5ID0gcHJvcC5zdWJzdHIoMSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgdmFyIHR5cGVO
YW1lID0gdGhpcy50eXBlRm9yUm9vdCh0eXBlS2V5KSwKLSAgICAgICAgICAgICAgdHlwZSA9IHN0
b3JlLm1vZGVsRm9yKHR5cGVOYW1lKSwKLSAgICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIgPSBz
dG9yZS5zZXJpYWxpemVyRm9yKHR5cGUpLAotICAgICAgICAgICAgICBpc1ByaW1hcnkgPSAoIWZv
cmNlZFNlY29uZGFyeSAmJiAodHlwZS50eXBlS2V5ID09PSBwcmltYXJ5VHlwZU5hbWUpKTsKLQot
ICAgICAgICAgIC8qanNoaW50IGxvb3BmdW5jOnRydWUqLwotICAgICAgICAgIHZhciBub3JtYWxp
emVkQXJyYXkgPSBtYXAuY2FsbChwYXlsb2FkW3Byb3BdLCBmdW5jdGlvbihoYXNoKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdHlwZVNlcmlhbGl6ZXIubm9ybWFsaXplKHR5cGUsIGhhc2gsIHByb3Ap
OwotICAgICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgICAgaWYgKGlzUHJpbWFyeSkgewotICAg
ICAgICAgICAgcHJpbWFyeUFycmF5ID0gbm9ybWFsaXplZEFycmF5OwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdG9yZS5wdXNoTWFueSh0eXBlTmFtZSwgbm9ybWFsaXplZEFycmF5
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHJpbWFyeUFycmF5
OwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGFsbG93cyB5b3Ug
dG8gcHVzaCBhIHBheWxvYWQgY29udGFpbmluZyB0b3AtbGV2ZWwKLSAgICAgICAgY29sbGVjdGlv
bnMgb2YgcmVjb3JkcyBvcmdhbml6ZWQgcGVyIHR5cGUuCi0KLSAgICAgICAgYGBganMKLSAgICAg
ICAgewotICAgICAgICAgICJwb3N0cyI6IFt7Ci0gICAgICAgICAgICAiaWQiOiAiMSIsCi0gICAg
ICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAgICAgICAiYXV0aG9y
IiwgIjEiLAotICAgICAgICAgICAgImNvbW1lbnRzIjogWyAiMSIgXQotICAgICAgICAgIH1dLAot
ICAgICAgICAgICJjb21tZW50cyI6IFt7Ci0gICAgICAgICAgICAiaWQiOiAiMSIsCi0gICAgICAg
ICAgICAiYm9keSI6ICJGSVJTVCIKLSAgICAgICAgICB9XSwKLSAgICAgICAgICAidXNlcnMiOiBb
ewotICAgICAgICAgICAgImlkIjogIjEiLAotICAgICAgICAgICAgIm5hbWUiOiAiQGQyaCIKLSAg
ICAgICAgICB9XQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEl0IHdpbGwgZmly
c3Qgbm9ybWFsaXplIHRoZSBwYXlsb2FkLCBzbyB5b3UgY2FuIHVzZSB0aGlzIHRvIHB1c2gKLSAg
ICAgICAgaW4gZGF0YSBzdHJlYW1pbmcgaW4gZnJvbSB5b3VyIHNlcnZlciBzdHJ1Y3R1cmVkIHRo
ZSBzYW1lIHdheQotICAgICAgICB0aGF0IGZldGNoZXMgYW5kIHNhdmVzIGFyZSBzdHJ1Y3R1cmVk
LgotCi0gICAgICAgIEBtZXRob2QgcHVzaFBheWxvYWQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9y
ZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICovCi0gICAg
ICBwdXNoUGF5bG9hZDogZnVuY3Rpb24oc3RvcmUsIHBheWxvYWQpIHsKLSAgICAgICAgcGF5bG9h
ZCA9IHRoaXMubm9ybWFsaXplUGF5bG9hZChwYXlsb2FkKTsKLQotICAgICAgICBmb3IgKHZhciBw
cm9wIGluIHBheWxvYWQpIHsKLSAgICAgICAgICB2YXIgdHlwZU5hbWUgPSB0aGlzLnR5cGVGb3JS
b290KHByb3ApLAotICAgICAgICAgICAgICB0eXBlID0gc3RvcmUubW9kZWxGb3IodHlwZU5hbWUp
LAotICAgICAgICAgICAgICB0eXBlU2VyaWFsaXplciA9IHN0b3JlLnNlcmlhbGl6ZXJGb3IodHlw
ZSk7Ci0KLSAgICAgICAgICAvKmpzaGludCBsb29wZnVuYzp0cnVlKi8KLSAgICAgICAgICB2YXIg
bm9ybWFsaXplZEFycmF5ID0gbWFwLmNhbGwoRW1iZXIubWFrZUFycmF5KHBheWxvYWRbcHJvcF0p
LCBmdW5jdGlvbihoYXNoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZVNlcmlhbGl6ZXIubm9y
bWFsaXplKHR5cGUsIGhhc2gsIHByb3ApOwotICAgICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAg
ICAgc3RvcmUucHVzaE1hbnkodHlwZU5hbWUsIG5vcm1hbGl6ZWRBcnJheSk7Ci0gICAgICAgIH0K
LSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNv
bnZlcnQgZWFjaCBKU09OIHJvb3Qga2V5IGluIHRoZSBwYXlsb2FkCi0gICAgICAgIGludG8gYSB0
eXBlS2V5IHRoYXQgaXQgY2FuIHVzZSB0byBsb29rIHVwIHRoZSBhcHByb3ByaWF0ZSBtb2RlbCBm
b3IKLSAgICAgICAgdGhhdCBwYXJ0IG9mIHRoZSBwYXlsb2FkLiBCeSBkZWZhdWx0IHRoZSB0eXBl
S2V5IGZvciBhIG1vZGVsIGlzIGl0cwotICAgICAgICBuYW1lIGluIGNhbWVsQ2FzZSwgc28gaWYg
eW91ciBKU09OIHJvb3Qga2V5IGlzICdmYXN0LWNhcicgeW91IHdvdWxkCi0gICAgICAgIHVzZSB0
eXBlRm9yUm9vdCB0byBjb252ZXJ0IGl0IHRvICdmYXN0Q2FyJyBzbyB0aGF0IEVtYmVyIERhdGEg
ZmluZHMKLSAgICAgICAgdGhlIGBGYXN0Q2FyYCBtb2RlbC4KLQotICAgICAgICBJZiB5b3UgZGl2
ZXJnZSBmcm9tIHRoaXMgbm9ybSB5b3Ugc2hvdWxkIGFsc28gY29uc2lkZXIgY2hhbmdlcyB0bwot
ICAgICAgICBzdG9yZS5fbm9ybWFsaXplVHlwZUtleSBhcyB3ZWxsLgotCi0gICAgICAgIEZvciBl
eGFtcGxlLCB5b3VyIHNlcnZlciBtYXkgcmV0dXJuIHByZWZpeGVkIHJvb3Qga2V5cyBsaWtlIHNv
OgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicmVzcG9uc2UtZmFzdC1j
YXIiOiB7Ci0gICAgICAgICAgICAiaWQiOiAiMSIsCi0gICAgICAgICAgICAibmFtZSI6ICJjb3J2
ZXR0ZSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgSW4g
b3JkZXIgZm9yIEVtYmVyIERhdGEgdG8ga25vdyB0aGF0IHRoZSBtb2RlbCBjb3JyZXNwb25kaW5n
IHRvCi0gICAgICAgIHRoZSAncmVzcG9uc2UtZmFzdC1jYXInIGhhc2ggaXMgYEZhc3RDYXJgICh0
eXBlS2V5OiAnZmFzdENhcicpLAotICAgICAgICB5b3UgY2FuIG92ZXJyaWRlIHR5cGVGb3JSb290
IHRvIGNvbnZlcnQgJ3Jlc3BvbnNlLWZhc3QtY2FyJyB0bwotICAgICAgICAnZmFzdENhcicgbGlr
ZSBzbzoKLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuQXBwbGljYXRpb25TZXJpYWxpemVy
ID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAgICAgICB0eXBlRm9yUm9vdDogZnVu
Y3Rpb24ocm9vdCkgewotICAgICAgICAgICAgLy8gJ3Jlc3BvbnNlLWZhc3QtY2FyJyBzaG91bGQg
YmVjb21lICdmYXN0LWNhcicKLSAgICAgICAgICAgIHZhciBzdWJSb290ID0gcm9vdC5zdWJzdHJp
bmcoOSk7Ci0KLSAgICAgICAgICAgIC8vIF9zdXBlciBub3JtYWxpemVzICdmYXN0LWNhcicgdG8g
J2Zhc3RDYXInCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIoc3ViUm9vdCk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCB0eXBl
Rm9yUm9vdAotICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5Ci0gICAgICAgIEByZXR1cm4ge1N0
cmluZ30gdGhlIG1vZGVsJ3MgdHlwZUtleQotICAgICAgKi8KLSAgICAgIHR5cGVGb3JSb290OiBm
dW5jdGlvbihrZXkpIHsKLSAgICAgICAgcmV0dXJuIGNhbWVsaXplKHNpbmd1bGFyaXplKGtleSkp
OwotICAgICAgfSwKLQotICAgICAgLy8gU0VSSUFMSVpFCi0KLSAgICAgIC8qKgotICAgICAgICBD
YWxsZWQgd2hlbiBhIHJlY29yZCBpcyBzYXZlZCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZQotICAg
ICAgICByZWNvcmQgaW50byBKU09OLgotCi0gICAgICAgIEJ5IGRlZmF1bHQsIGl0IGNyZWF0ZXMg
YSBKU09OIG9iamVjdCB3aXRoIGEga2V5IGZvcgotICAgICAgICBlYWNoIGF0dHJpYnV0ZSBhbmQg
YmVsb25nc1RvIHJlbGF0aW9uc2hpcC4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIg
dGhpcyBtb2RlbDoKLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuQ29tbWVudCA9IERTLk1v
ZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdGl0bGU6IERTLmF0dHIoKSwKLSAgICAgICAgICBib2R5
OiBEUy5hdHRyKCksCi0KLSAgICAgICAgICBhdXRob3I6IERTLmJlbG9uZ3NUbygndXNlcicpCi0g
ICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGUgZGVmYXVsdCBzZXJpYWxpemF0
aW9uIHdvdWxkIGNyZWF0ZSBhIEpTT04gb2JqZWN0IGxpa2U6Ci0KLSAgICAgICAgYGBganMKLSAg
ICAgICAgewotICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyB1bmFnaSIsCi0gICAgICAgICAg
ImJvZHkiOiAiUmFpbHM/IE9tYWthc2U/IE9fTyIsCi0gICAgICAgICAgImF1dGhvciI6IDEyCi0g
ICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgQnkgZGVmYXVsdCwgYXR0cmlidXRlcyBh
cmUgcGFzc2VkIHRocm91Z2ggYXMtaXMsIHVubGVzcwotICAgICAgICB5b3Ugc3BlY2lmaWVkIGFu
IGF0dHJpYnV0ZSB0eXBlIChgRFMuYXR0cignZGF0ZScpYCkuIElmCi0gICAgICAgIHlvdSBzcGVj
aWZ5IGEgdHJhbnNmb3JtLCB0aGUgSmF2YVNjcmlwdCB2YWx1ZSB3aWxsIGJlCi0gICAgICAgIHNl
cmlhbGl6ZWQgd2hlbiBpbnNlcnRlZCBpbnRvIHRoZSBKU09OIGhhc2guCi0KLSAgICAgICAgQnkg
ZGVmYXVsdCwgYmVsb25ncy10byByZWxhdGlvbnNoaXBzIGFyZSBjb252ZXJ0ZWQgaW50bwotICAg
ICAgICBJRHMgd2hlbiBpbnNlcnRlZCBpbnRvIHRoZSBKU09OIGhhc2guCi0KLSAgICAgICAgIyMg
SURzCi0KLSAgICAgICAgYHNlcmlhbGl6ZWAgdGFrZXMgYW4gb3B0aW9ucyBoYXNoIHdpdGggYSBz
aW5nbGUgb3B0aW9uOgotICAgICAgICBgaW5jbHVkZUlkYC4gSWYgdGhpcyBvcHRpb24gaXMgYHRy
dWVgLCBgc2VyaWFsaXplYCB3aWxsLAotICAgICAgICBieSBkZWZhdWx0IGluY2x1ZGUgdGhlIElE
IGluIHRoZSBKU09OIG9iamVjdCBpdCBidWlsZHMuCi0KLSAgICAgICAgVGhlIGFkYXB0ZXIgcGFz
c2VzIGluIGBpbmNsdWRlSWQ6IHRydWVgIHdoZW4gc2VyaWFsaXppbmcKLSAgICAgICAgYSByZWNv
cmQgZm9yIGBjcmVhdGVSZWNvcmRgLCBidXQgbm90IGZvciBgdXBkYXRlUmVjb3JkYC4KLQotICAg
ICAgICAjIyBDdXN0b21pemF0aW9uCi0KLSAgICAgICAgWW91ciBzZXJ2ZXIgbWF5IGV4cGVjdCBh
IGRpZmZlcmVudCBKU09OIGZvcm1hdCB0aGFuIHRoZQotICAgICAgICBidWlsdC1pbiBzZXJpYWxp
emF0aW9uIGZvcm1hdC4KLQotICAgICAgICBJbiB0aGF0IGNhc2UsIHlvdSBjYW4gaW1wbGVtZW50
IGBzZXJpYWxpemVgIHlvdXJzZWxmIGFuZAotICAgICAgICByZXR1cm4gYSBKU09OIGhhc2ggb2Yg
eW91ciBjaG9vc2luZy4KLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6
ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIHNlcmlhbGl6ZTogZnVu
Y3Rpb24ocG9zdCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGpzb24gPSB7Ci0gICAgICAg
ICAgICAgIFBPU1RfVFRMOiBwb3N0LmdldCgndGl0bGUnKSwKLSAgICAgICAgICAgICAgUE9TVF9C
RFk6IHBvc3QuZ2V0KCdib2R5JyksCi0gICAgICAgICAgICAgIFBPU1RfQ01TOiBwb3N0LmdldCgn
Y29tbWVudHMnKS5tYXBQcm9wZXJ0eSgnaWQnKQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAob3B0aW9ucy5pbmNsdWRlSWQpIHsKLSAgICAgICAgICAgICAganNvbi5QT1NUX0lEXyA9
IHBvc3QuZ2V0KCdpZCcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4ganNv
bjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICAjIyBD
dXN0b21pemluZyBhbiBBcHAtV2lkZSBTZXJpYWxpemVyCi0KLSAgICAgICAgSWYgeW91IHdhbnQg
dG8gZGVmaW5lIGEgc2VyaWFsaXplciBmb3IgeW91ciBlbnRpcmUKLSAgICAgICAgYXBwbGljYXRp
b24sIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZSBgZWFjaEF0dHJpYnV0ZWAKLSAgICAgICAg
YW5kIGBlYWNoUmVsYXRpb25zaGlwYCBvbiB0aGUgcmVjb3JkLgotCi0gICAgICAgIGBgYGpzCi0g
ICAgICAgIEFwcC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRl
bmQoewotICAgICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0g
ICAgICAgICAgICB2YXIganNvbiA9IHt9OwotCi0gICAgICAgICAgICByZWNvcmQuZWFjaEF0dHJp
YnV0ZShmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgIGpzb25bc2VydmVyQXR0cmlidXRl
TmFtZShuYW1lKV0gPSByZWNvcmQuZ2V0KG5hbWUpOwotICAgICAgICAgICAgfSkKLQotICAgICAg
ICAgICAgcmVjb3JkLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlw
KSB7Ci0gICAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2hhc01hbnknKSB7
Ci0gICAgICAgICAgICAgICAganNvbltzZXJ2ZXJIYXNNYW55TmFtZShuYW1lKV0gPSByZWNvcmQu
Z2V0KG5hbWUpLm1hcEJ5KCdpZCcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZUlkKSB7Ci0gICAgICAgICAgICAgIGpz
b24uSURfID0gcmVjb3JkLmdldCgnaWQnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIGpzb247Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlv
biBzZXJ2ZXJBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZSkgewotICAgICAgICAgIHJldHVybiBhdHRy
aWJ1dGUudW5kZXJzY29yZSgpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBzZXJ2ZXJIYXNNYW55TmFtZShuYW1lKSB7Ci0gICAgICAgICAgcmV0dXJuIHNlcnZl
ckF0dHJpYnV0ZU5hbWUobmFtZS5zaW5ndWxhcml6ZSgpKSArICJfSURTIjsKLSAgICAgICAgfQot
ICAgICAgICBgYGAKLQotICAgICAgICBUaGlzIHNlcmlhbGl6ZXIgd2lsbCBnZW5lcmF0ZSBKU09O
IHRoYXQgbG9va3MgbGlrZSB0aGlzOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAg
ICAgICAiVElUTEUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAgICAgIkJPRFkiOiAiWWVw
LiBPbWFrYXNlLiIsCi0gICAgICAgICAgIkNPTU1FTlRfSURTIjogWyAxLCAyLCAzIF0KLSAgICAg
ICAgfQotICAgICAgICBgYGAKLQotICAgICAgICAjIyBUd2Vha2luZyB0aGUgRGVmYXVsdCBKU09O
Ci0KLSAgICAgICAgSWYgeW91IGp1c3Qgd2FudCB0byBkbyBzb21lIHNtYWxsIHR3ZWFrcyBvbiB0
aGUgZGVmYXVsdCBKU09OLAotICAgICAgICB5b3UgY2FuIGNhbGwgc3VwZXIgZmlyc3QgYW5kIG1h
a2UgdGhlIHR3ZWFrcyBvbiB0aGUgcmV0dXJuZWQKLSAgICAgICAgSlNPTi4KLQotICAgICAgICBg
YGBqcwotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRl
bmQoewotICAgICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0g
ICAgICAgICAgICB2YXIganNvbiA9IHRoaXMuX3N1cGVyKHJlY29yZCwgb3B0aW9ucyk7Ci0KLSAg
ICAgICAgICAgIGpzb24uc3ViamVjdCA9IGpzb24udGl0bGU7Ci0gICAgICAgICAgICBkZWxldGUg
anNvbi50aXRsZTsKLQotICAgICAgICAgICAgcmV0dXJuIGpzb247Ci0gICAgICAgICAgfQotICAg
ICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemUKLSAgICAg
ICAgQHBhcmFtIHJlY29yZAotICAgICAgICBAcGFyYW0gb3B0aW9ucwotICAgICAgKi8KLSAgICAg
IHNlcmlhbGl6ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGN1c3RvbWl6ZSB0aGUgcm9vdCBr
ZXlzIHNlcmlhbGl6ZWQgaW50byB0aGUgSlNPTi4KLSAgICAgICAgQnkgZGVmYXVsdCB0aGUgUkVT
VCBTZXJpYWxpemVyIHNlbmRzIHRoZSB0eXBlS2V5IG9mIGEgbW9kZWwsIHdoaWggaXMgYSBjYW1l
bGl6ZWQKLSAgICAgICAgdmVyc2lvbiBvZiB0aGUgbmFtZS4KLQotICAgICAgICBGb3IgZXhhbXBs
ZSwgeW91ciBzZXJ2ZXIgbWF5IGV4cGVjdCB1bmRlcnNjb3JlZCByb290IG9iamVjdHMuCi0KLSAg
ICAgICAgYGBganMKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9IERTLlJFU1RT
ZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgc2VyaWFsaXplSW50b0hhc2g6IGZ1bmN0aW9u
KGRhdGEsIHR5cGUsIHJlY29yZCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIHJvb3QgPSBF
bWJlci5TdHJpbmcuZGVjYW1lbGl6ZSh0eXBlLnR5cGVLZXkpOwotICAgICAgICAgICAgZGF0YVty
b290XSA9IHRoaXMuc2VyaWFsaXplKHJlY29yZCwgb3B0aW9ucyk7Ci0gICAgICAgICAgfQotICAg
ICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemVJbnRvSGFz
aAotICAgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaAotICAgICAgICBAcGFyYW0ge3N1YmNsYXNz
IG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAg
ICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZUlu
dG9IYXNoOiBmdW5jdGlvbihoYXNoLCB0eXBlLCByZWNvcmQsIG9wdGlvbnMpIHsKLSAgICAgICAg
aGFzaFt0eXBlLnR5cGVLZXldID0gdGhpcy5zZXJpYWxpemUocmVjb3JkLCBvcHRpb25zKTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBj
dXN0b21pemUgaG93IHBvbHltb3JwaGljIG9iamVjdHMgYXJlIHNlcmlhbGl6ZWQuCi0gICAgICAg
IEJ5IGRlZmF1bHQgdGhlIEpTT04gU2VyaWFsaXplciBjcmVhdGVzIHRoZSBrZXkgYnkgYXBwZW5k
aW5nIGBUeXBlYCB0bwotICAgICAgICB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZSBmcm9tIHRoZSBt
b2RlbCdzIGNhbWVsY2FzZWQgbW9kZWwgbmFtZS4KLQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6
ZVBvbHltb3JwaGljVHlwZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IGpzb24KLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9u
c2hpcAotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZVBvbHltb3JwaGljVHlwZTogZnVuY3Rpb24o
cmVjb3JkLCBqc29uLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgdmFyIGtleSA9IHJlbGF0aW9u
c2hpcC5rZXksCi0gICAgICAgICAgICBiZWxvbmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwotICAg
ICAgICBrZXkgPSB0aGlzLmtleUZvckF0dHJpYnV0ZSA/IHRoaXMua2V5Rm9yQXR0cmlidXRlKGtl
eSkgOiBrZXk7Ci0gICAgICAgIGpzb25ba2V5ICsgIlR5cGUiXSA9IGJlbG9uZ3NUby5jb25zdHJ1
Y3Rvci50eXBlS2V5OwotICAgICAgfQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IFJFU1RTZXJpYWxpemVyOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc2V0
dXAtY29udGFpbmVyIiwgCi0gIFsiLi9pbml0aWFsaXplcnMvc3RvcmUiLCIuL2luaXRpYWxpemVy
cy90cmFuc2Zvcm1zIiwiLi9pbml0aWFsaXplcnMvc3RvcmVfaW5qZWN0aW9ucyIsIi4vaW5pdGlh
bGl6ZXJzL2RhdGFfYWRhcHRlciIsIi4uLy4uLy4uL2FjdGl2ZW1vZGVsLWFkYXB0ZXIvbGliL3Nl
dHVwLWNvbnRhaW5lciIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVu
ZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBpbml0
aWFsaXplU3RvcmUgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICB2YXIgaW5pdGlh
bGl6ZVRyYW5zZm9ybXMgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2YXIgaW5p
dGlhbGl6ZVN0b3JlSW5qZWN0aW9ucyA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAg
IHZhciBpbml0aWFsaXplRGF0YUFkYXB0ZXIgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsK
LSAgICB2YXIgc2V0dXBBY3RpdmVNb2RlbENvbnRhaW5lciA9IF9fZGVwZW5kZW5jeTVfX1siZGVm
YXVsdCJdOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIHNldHVwQ29u
dGFpbmVyKGNvbnRhaW5lciwgYXBwbGljYXRpb24pewotICAgICAgLy8gYXBwbGljYXRpb24gaXMg
bm90IGEgcmVxdWlyZWQgYXJndW1lbnQuIFRoaXMgZW5zdXJlcwotICAgICAgLy8gdGVzdGluZyBz
ZXR1cHMgY2FuIHNldHVwIGEgY29udGFpbmVyIHdpdGhvdXQgYm9vdGluZyBhbgotICAgICAgLy8g
ZW50aXJlIGVtYmVyIGFwcGxpY2F0aW9uLgotCi0gICAgICBpbml0aWFsaXplRGF0YUFkYXB0ZXIo
Y29udGFpbmVyLCBhcHBsaWNhdGlvbik7Ci0gICAgICBpbml0aWFsaXplVHJhbnNmb3Jtcyhjb250
YWluZXIsIGFwcGxpY2F0aW9uKTsKLSAgICAgIGluaXRpYWxpemVTdG9yZUluamVjdGlvbnMoY29u
dGFpbmVyLCBhcHBsaWNhdGlvbik7Ci0gICAgICBpbml0aWFsaXplU3RvcmUoY29udGFpbmVyLCBh
cHBsaWNhdGlvbik7Ci0gICAgICBzZXR1cEFjdGl2ZU1vZGVsQ29udGFpbmVyKGNvbnRhaW5lciwg
YXBwbGljYXRpb24pOwotICAgIH07Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0
ZW0vYWRhcHRlciIsIAotICBbImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsK
LSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAg
ICAqLwotCi0gICAgdmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0OwotICAgIHZh
ciBtYXAgPSBFbWJlci5BcnJheVBvbHlmaWxscy5tYXA7Ci0KLSAgICB2YXIgZXJyb3JQcm9wcyA9
IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25h
bWUnLCAnbnVtYmVyJywgJ3N0YWNrJ107Ci0KLSAgICAvKioKLSAgICAgIEEgYERTLkludmFsaWRF
cnJvcmAgaXMgdXNlZCBieSBhbiBhZGFwdGVyIHRvIHNpZ25hbCB0aGUgZXh0ZXJuYWwgQVBJCi0g
ICAgICB3YXMgdW5hYmxlIHRvIHByb2Nlc3MgYSByZXF1ZXN0IGJlY2F1c2UgdGhlIGNvbnRlbnQg
d2FzIG5vdAotICAgICAgc2VtYW50aWNhbGx5IGNvcnJlY3Qgb3IgbWVhbmluZ2Z1bCBwZXIgdGhl
IEFQSS4gVXN1YWxseSB0aGlzIG1lYW5zIGEKLSAgICAgIHJlY29yZCBmYWlsZWQgc29tZSBmb3Jt
IG9mIHNlcnZlciBzaWRlIHZhbGlkYXRpb24uIFdoZW4gYSBwcm9taXNlCi0gICAgICBmcm9tIGFu
IGFkYXB0ZXIgaXMgcmVqZWN0ZWQgd2l0aCBhIGBEUy5JbnZhbGlkRXJyb3JgIHRoZSByZWNvcmQg
d2lsbAotICAgICAgdHJhbnNpdGlvbiB0byB0aGUgYGludmFsaWRgIHN0YXRlIGFuZCB0aGUgZXJy
b3JzIHdpbGwgYmUgc2V0IHRvIHRoZQotICAgICAgYGVycm9yc2AgcHJvcGVydHkgb24gdGhlIHJl
Y29yZC4KLQotICAgICAgRXhhbXBsZQotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAu
QXBwbGljYXRpb25BZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgYWph
eEVycm9yOiBmdW5jdGlvbihqcVhIUikgewotICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuX3N1
cGVyKGpxWEhSKTsKLQotICAgICAgICAgIGlmIChqcVhIUiAmJiBqcVhIUi5zdGF0dXMgPT09IDQy
MikgewotICAgICAgICAgICAgdmFyIGpzb25FcnJvcnMgPSBFbWJlci4kLnBhcnNlSlNPTihqcVhI
Ui5yZXNwb25zZVRleHQpWyJlcnJvcnMiXTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRFMuSW52
YWxpZEVycm9yKGpzb25FcnJvcnMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBg
YAotCi0gICAgICBUaGUgYERTLkludmFsaWRFcnJvcmAgbXVzdCBiZSBjb25zdHJ1Y3RlZCB3aXRo
IGEgc2luZ2xlIG9iamVjdCB3aG9zZQotICAgICAga2V5cyBhcmUgdGhlIGludmFsaWQgbW9kZWwg
cHJvcGVydGllcywgYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlCi0gICAgICBjb3JyZXNwb25kaW5n
IGVycm9yIG1lc3NhZ2VzLiBGb3IgZXhhbXBsZToKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgcmV0dXJuIG5ldyBEUy5JbnZhbGlkRXJyb3IoewotICAgICAgICBsZW5ndGg6ICdNdXN0IGJl
IGxlc3MgdGhhbiAxNScsCi0gICAgICAgIG5hbWU6ICdNdXN0IG5vdCBiZSBibGFuawotICAgICAg
fSk7Ci0gICAgICBgYGAKLQotICAgICAgQGNsYXNzIEludmFsaWRFcnJvcgotICAgICAgQG5hbWVz
cGFjZSBEUwotICAgICovCi0gICAgdmFyIEludmFsaWRFcnJvciA9IGZ1bmN0aW9uKGVycm9ycykg
ewotICAgICAgdmFyIHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMs
ICJUaGUgYmFja2VuZCByZWplY3RlZCB0aGUgY29tbWl0IGJlY2F1c2UgaXQgd2FzIGludmFsaWQ6
ICIgKyBFbWJlci5pbnNwZWN0KGVycm9ycykpOwotICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7
Ci0KLSAgICAgIGZvciAodmFyIGk9MCwgbD1lcnJvclByb3BzLmxlbmd0aDsgaTxsOyBpKyspIHsK
LSAgICAgICAgdGhpc1tlcnJvclByb3BzW2ldXSA9IHRtcFtlcnJvclByb3BzW2ldXTsKLSAgICAg
IH0KLSAgICB9OwotICAgIEludmFsaWRFcnJvci5wcm90b3R5cGUgPSBFbWJlci5jcmVhdGUoRXJy
b3IucHJvdG90eXBlKTsKLQotICAgIC8qKgotICAgICAgQW4gYWRhcHRlciBpcyBhbiBvYmplY3Qg
dGhhdCByZWNlaXZlcyByZXF1ZXN0cyBmcm9tIGEgc3RvcmUgYW5kCi0gICAgICB0cmFuc2xhdGVz
IHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIHRvIHRha2UgYWdhaW5zdCB5b3VyCi0g
ICAgICBwZXJzaXN0ZW5jZSBsYXllci4gVGhlIHBlcnNpc3RlbmNlIGxheWVyIGlzIHVzdWFsbHkg
YW4gSFRUUCBBUEksIGJ1dAotICAgICAgbWF5IGJlIGFueXRoaW5nLCBzdWNoIGFzIHRoZSBicm93
c2VyJ3MgbG9jYWwgc3RvcmFnZS4gVHlwaWNhbGx5IHRoZQotICAgICAgYWRhcHRlciBpcyBub3Qg
aW52b2tlZCBkaXJlY3RseSBpbnN0ZWFkIGl0cyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2VkCi0g
ICAgICB0aHJvdWdoIHRoZSBgc3RvcmVgLgotCi0gICAgICAjIyMgQ3JlYXRpbmcgYW4gQWRhcHRl
cgotCi0gICAgICBDcmVhdGUgYSBuZXcgc3ViY2xhc3Mgb2YgYERTLkFkYXB0ZXJgLCB0aGVuIGFz
c2lnbgotICAgICAgaXQgdG8gdGhlIGBBcHBsaWNhdGlvbkFkYXB0ZXJgIHByb3BlcnR5IG9mIHRo
ZSBhcHBsaWNhdGlvbi4KLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIE15QWRhcHRl
ciA9IERTLkFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgLy8gLi4ueW91ciBjb2RlIGhlcmUKLSAg
ICAgIH0pOwotCi0gICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gTXlBZGFwdGVyOwotICAg
ICAgYGBgCi0KLSAgICAgIE1vZGVsLXNwZWNpZmljIGFkYXB0ZXJzIGNhbiBiZSBjcmVhdGVkIGJ5
IGFzc2lnbmluZyB5b3VyIGFkYXB0ZXIKLSAgICAgIGNsYXNzIHRvIHRoZSBgTW9kZWxOYW1lYCAr
IGBBZGFwdGVyYCBwcm9wZXJ0eSBvZiB0aGUgYXBwbGljYXRpb24uCi0KLSAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIHZhciBNeVBvc3RBZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQoewotICAg
ICAgICAvLyAuLi5Qb3N0LXNwZWNpZmljIGFkYXB0ZXIgY29kZSBnb2VzIGhlcmUKLSAgICAgIH0p
OwotCi0gICAgICBBcHAuUG9zdEFkYXB0ZXIgPSBNeVBvc3RBZGFwdGVyOwotICAgICAgYGBgCi0K
LSAgICAgIGBEUy5BZGFwdGVyYCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgeW91IHNo
b3VsZCBvdmVycmlkZSBpbiB5b3VyCi0gICAgICBhcHBsaWNhdGlvbiB0byBjdXN0b21pemUgaXQg
Zm9yIHlvdXIgYmFja2VuZC4gVGhlIG1pbmltdW0gc2V0IG9mIG1ldGhvZHMKLSAgICAgIHRoYXQg
eW91IHNob3VsZCBpbXBsZW1lbnQgaXM6Ci0KLSAgICAgICAgKiBgZmluZCgpYAotICAgICAgICAq
IGBjcmVhdGVSZWNvcmQoKWAKLSAgICAgICAgKiBgdXBkYXRlUmVjb3JkKClgCi0gICAgICAgICog
YGRlbGV0ZVJlY29yZCgpYAotICAgICAgICAqIGBmaW5kQWxsKClgCi0gICAgICAgICogYGZpbmRR
dWVyeSgpYAotCi0gICAgICBUbyBpbXByb3ZlIHRoZSBuZXR3b3JrIHBlcmZvcm1hbmNlIG9mIHlv
dXIgYXBwbGljYXRpb24sIHlvdSBjYW4gb3B0aW1pemUKLSAgICAgIHlvdXIgYWRhcHRlciBieSBv
dmVycmlkaW5nIHRoZXNlIGxvd2VyLWxldmVsIG1ldGhvZHM6Ci0KLSAgICAgICAgKiBgZmluZE1h
bnkoKWAKLQotCi0gICAgICBGb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiwgc2VlIGBEUy5S
RVNUQWRhcHRlcmAsIHRoZQotICAgICAgaW5jbHVkZWQgUkVTVCBhZGFwdGVyLgotCi0gICAgICBA
Y2xhc3MgQWRhcHRlcgotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRW1iZXIu
T2JqZWN0Ci0gICAgKi8KLQotICAgIHZhciBBZGFwdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0KLSAgICAgIC8qKgotICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSB5b3VyIGFkYXB0ZXIgdG8g
dXNlIGEgY3VzdG9tIHNlcmlhbGl6ZXIgeW91IGNhbgotICAgICAgICBzZXQgdGhlIGBkZWZhdWx0
U2VyaWFsaXplcmAgcHJvcGVydHkgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIGN1c3RvbQotICAgICAg
ICBzZXJpYWxpemVyLgotCi0gICAgICAgIE5vdGUgdGhlIGBkZWZhdWx0U2VyaWFsaXplcmAgc2Vy
aWFsaXplciBoYXMgYSBsb3dlciBwcmlvcml0eSB0aGVuCi0gICAgICAgIGEgbW9kZWwgc3BlY2lm
aWMgc2VyaWFsaXplciAoaS5lLiBgUG9zdFNlcmlhbGl6ZXJgKSBvciB0aGUKLSAgICAgICAgYGFw
cGxpY2F0aW9uYCBzZXJpYWxpemVyLgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
dmFyIERqYW5nb0FkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgICAgZGVmYXVs
dFNlcmlhbGl6ZXI6ICdkamFuZ28nCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAg
ICBAcHJvcGVydHkgZGVmYXVsdFNlcmlhbGl6ZXIKLSAgICAgICAgQHR5cGUge1N0cmluZ30KLSAg
ICAgICovCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgYGZpbmQoKWAgbWV0aG9kIGlzIGludm9r
ZWQgd2hlbiB0aGUgc3RvcmUgaXMgYXNrZWQgZm9yIGEgcmVjb3JkIHRoYXQKLSAgICAgICAgaGFz
IG5vdCBwcmV2aW91c2x5IGJlZW4gbG9hZGVkLiBJbiByZXNwb25zZSB0byBgZmluZCgpYCBiZWlu
ZyBjYWxsZWQsIHlvdQotICAgICAgICBzaG91bGQgcXVlcnkgeW91ciBwZXJzaXN0ZW5jZSBsYXll
ciBmb3IgYSByZWNvcmQgd2l0aCB0aGUgZ2l2ZW4gSUQuIE9uY2UKLSAgICAgICAgZm91bmQsIHlv
dSBjYW4gYXN5bmNocm9ub3VzbHkgY2FsbCB0aGUgc3RvcmUncyBgcHVzaCgpYCBtZXRob2QgdG8g
cHVzaAotICAgICAgICB0aGUgcmVjb3JkIGludG8gdGhlIHN0b3JlLgotCi0gICAgICAgIEhlcmUg
aXMgYW4gZXhhbXBsZSBgZmluZGAgaW1wbGVtZW50YXRpb246Ci0KLSAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQo
ewotICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZCkgewotICAgICAgICAg
ICAgdmFyIHVybCA9IFt0eXBlLCBpZF0uam9pbignLycpOwotCi0gICAgICAgICAgICByZXR1cm4g
bmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAg
ICAgICAgICAgalF1ZXJ5LmdldEpTT04odXJsKS50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAg
ICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVzb2x2ZSwgZGF0YSk7Ci0gICAgICAgICAgICAg
IH0sIGZ1bmN0aW9uKGpxWEhSKSB7Ci0gICAgICAgICAgICAgICAganFYSFIudGhlbiA9IG51bGw7
IC8vIHRhbWUgalF1ZXJ5J3MgaWxsIG1hbm5lcmVkIHByb21pc2VzCi0gICAgICAgICAgICAgICAg
RW1iZXIucnVuKG51bGwsIHJlamVjdCwganFYSFIpOwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAg
ICAgIEBtZXRob2QgZmluZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAg
ICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBpZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgZmluZDogRW1iZXIucmVxdWlyZWQoRnVuY3Rpb24pLAotCi0gICAgICAvKioKLSAgICAgICAg
VGhlIGBmaW5kQWxsKClgIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB5b3UgY2FsbCBgZmluZGAgb24g
dGhlIHN0b3JlCi0gICAgICAgIHdpdGhvdXQgYW4gSUQgKGkuZS4gYHN0b3JlLmZpbmQoJ3Bvc3Qn
KWApLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
IEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgICAg
ZmluZEFsbDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHNpbmNlVG9rZW4pIHsKLSAgICAgICAgICAg
IHZhciB1cmwgPSB0eXBlOwotICAgICAgICAgICAgdmFyIHF1ZXJ5ID0geyBzaW5jZTogc2luY2VU
b2tlbiB9OwotICAgICAgICAgICAgcmV0dXJuIG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICAgIGpRdWVyeS5nZXRKU09OKHVybCwg
cXVlcnkpLnRoZW4oZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihu
dWxsLCByZXNvbHZlLCBkYXRhKTsKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsK
LSAgICAgICAgICAgICAgICBqcVhIUi50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwg
bWFubmVyZWQgcHJvbWlzZXMKLSAgICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0
LCBqcVhIUik7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
QG1ldGhvZCBmaW5kQWxsCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAg
IEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IHNpbmNlVG9rZW4KLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAg
Ki8KLSAgICAgIGZpbmRBbGw6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgd2hlbiB5b3UgY2FsbCBgZmluZGAgb24gdGhlIHN0b3JlIHdpdGggYQotICAg
ICAgICBxdWVyeSBvYmplY3QgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKGkuZS4gYHN0b3JlLmZp
bmQoJ3BlcnNvbicsIHsKLSAgICAgICAgcGFnZTogMSB9KWApLgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIg
PSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgICAgZmluZFF1ZXJ5OiBmdW5jdGlvbihzdG9y
ZSwgdHlwZSwgcXVlcnkpIHsKLSAgICAgICAgICAgIHZhciB1cmwgPSB0eXBlOwotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICAgICAgICAgIGpRdWVyeS5nZXRKU09OKHVybCwgcXVlcnkpLnRoZW4oZnVuY3Rp
b24oZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCByZXNvbHZlLCBkYXRh
KTsKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAgICAgICAgICBq
cVhIUi50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwgbWFubmVyZWQgcHJvbWlzZXMK
LSAgICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0LCBqcVhIUik7Ci0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQG1ldGhvZCBmaW5kUXVlcnkK
LSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnkKLSAgICAg
ICAgQHBhcmFtIHtEUy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXl9IHJlY29yZEFycmF5Ci0g
ICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kUXVl
cnk6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBJZiB0aGUgZ2xvYmFsbHkgdW5pcXVlIElE
cyBmb3IgeW91ciByZWNvcmRzIHNob3VsZCBiZSBnZW5lcmF0ZWQgb24gdGhlIGNsaWVudCwKLSAg
ICAgICAgaW1wbGVtZW50IHRoZSBgZ2VuZXJhdGVJZEZvclJlY29yZCgpYCBtZXRob2QuIFRoaXMg
bWV0aG9kIHdpbGwgYmUgaW52b2tlZAotICAgICAgICBlYWNoIHRpbWUgeW91IGNyZWF0ZSBhIG5l
dyByZWNvcmQsIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBpdCB3aWxsIGJlCi0gICAgICAg
IGFzc2lnbmVkIHRvIHRoZSByZWNvcmQncyBgcHJpbWFyeUtleWAuCi0KLSAgICAgICAgTW9zdCB0
cmFkaXRpb25hbCBSRVNULWxpa2UgSFRUUCBBUElzIHdpbGwgbm90IHVzZSB0aGlzIG1ldGhvZC4g
SW5zdGVhZCwgdGhlIElECi0gICAgICAgIG9mIHRoZSByZWNvcmQgd2lsbCBiZSBzZXQgYnkgdGhl
IHNlcnZlciwgYW5kIHlvdXIgYWRhcHRlciB3aWxsIHVwZGF0ZSB0aGUgc3RvcmUKLSAgICAgICAg
d2l0aCB0aGUgbmV3IElEIHdoZW4gaXQgY2FsbHMgYGRpZENyZWF0ZVJlY29yZCgpYC4gT25seSBp
bXBsZW1lbnQgdGhpcyBtZXRob2QgaWYKLSAgICAgICAgeW91IGludGVuZCB0byBnZW5lcmF0ZSBy
ZWNvcmQgSURzIG9uIHRoZSBjbGllbnQtc2lkZS4KLQotICAgICAgICBUaGUgYGdlbmVyYXRlSWRG
b3JSZWNvcmQoKWAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSByZXF1ZXN0aW5nIHN0
b3JlIGFzCi0gICAgICAgIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIHRoZSBuZXdseSBjcmVhdGVk
IHJlY29yZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlcjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgIGdlbmVyYXRlSWRGb3JSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlLCByZWNvcmQpIHsK
LSAgICAgICAgICB2YXIgdXVpZCA9IEFwcC5nZW5lcmF0ZVVVSURXaXRoU3RhdGlzdGljYWxseUxv
d09kZHNPZkNvbGxpc2lvbigpOwotICAgICAgICAgIHJldHVybiB1dWlkOwotICAgICAgICB9Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZ2VuZXJhdGVJZEZvclJlY29yZAotICAgICAg
ICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNv
cmQKLSAgICAgICAgQHJldHVybiB7U3RyaW5nfE51bWJlcn0gaWQKLSAgICAgICovCi0gICAgICBn
ZW5lcmF0ZUlkRm9yUmVjb3JkOiBudWxsLAotCi0gICAgICAvKioKLSAgICAgICAgUHJveGllcyB0
byB0aGUgc2VyaWFsaXplcidzIGBzZXJpYWxpemVgIG1ldGhvZC4KLQotICAgICAgICBFeGFtcGxl
Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVy
ID0gRFMuQWRhcHRlci5leHRlbmQoewotICAgICAgICAgIGNyZWF0ZVJlY29yZDogZnVuY3Rpb24o
c3RvcmUsIHR5cGUsIHJlY29yZCkgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnNlcmlh
bGl6ZShyZWNvcmQsIHsgaW5jbHVkZUlkOiB0cnVlIH0pOwotICAgICAgICAgICAgdmFyIHVybCA9
IHR5cGU7Ci0KLSAgICAgICAgICAgIC8vIC4uLgotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qgc2VyaWFsaXplCi0gICAgICAgIEBwYXJhbSB7
RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge09iamVjdH0gICBvcHRpb25zCi0gICAg
ICAgIEByZXR1cm4ge09iamVjdH0gc2VyaWFsaXplZCByZWNvcmQKLSAgICAgICovCi0gICAgICBz
ZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29yZCwgb3B0aW9ucykgewotICAgICAgICByZXR1cm4gZ2V0
KHJlY29yZCwgJ3N0b3JlJykuc2VyaWFsaXplckZvcihyZWNvcmQuY29uc3RydWN0b3IudHlwZUtl
eSkuc2VyaWFsaXplKHJlY29yZCwgb3B0aW9ucyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIGEgc3ViY2xhc3MgdG8gaGFuZGxlIHRoZSBj
cmVhdGlvbiBvZgotICAgICAgICBuZXcgcmVjb3Jkcy4KLQotICAgICAgICBTZXJpYWxpemVzIHRo
ZSByZWNvcmQgYW5kIHNlbmQgaXQgdG8gdGhlIHNlcnZlci4KLQotICAgICAgICBFeGFtcGxlCi0K
LSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0g
RFMuQWRhcHRlci5leHRlbmQoewotICAgICAgICAgIGNyZWF0ZVJlY29yZDogZnVuY3Rpb24oc3Rv
cmUsIHR5cGUsIHJlY29yZCkgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnNlcmlhbGl6
ZShyZWNvcmQsIHsgaW5jbHVkZUlkOiB0cnVlIH0pOwotICAgICAgICAgICAgdmFyIHVybCA9IHR5
cGU7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAgICBqUXVlcnkuYWpheCh7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogJ1BPU1QnLAotICAgICAgICAgICAgICAgIHVybDogdXJsLAotICAgICAg
ICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCi0gICAgICAgICAgICAgICAgZGF0YTogZGF0YQot
ICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBF
bWJlci5ydW4obnVsbCwgcmVzb2x2ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9u
KGpxWEhSKSB7Ci0gICAgICAgICAgICAgICAganFYSFIudGhlbiA9IG51bGw7IC8vIHRhbWUgalF1
ZXJ5J3MgaWxsIG1hbm5lcmVkIHByb21pc2VzCi0gICAgICAgICAgICAgICAgRW1iZXIucnVuKG51
bGwsIHJlamVjdCwganFYSFIpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qg
Y3JlYXRlUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBw
YXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUgICB0aGUgRFMuTW9kZWwgY2xhc3Mgb2Yg
dGhlIHJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJl
dHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGNyZWF0ZVJlY29yZDogRW1i
ZXIucmVxdWlyZWQoRnVuY3Rpb24pLAotCi0gICAgICAvKioKLSAgICAgICAgSW1wbGVtZW50IHRo
aXMgbWV0aG9kIGluIGEgc3ViY2xhc3MgdG8gaGFuZGxlIHRoZSB1cGRhdGluZyBvZgotICAgICAg
ICBhIHJlY29yZC4KLQotICAgICAgICBTZXJpYWxpemVzIHRoZSByZWNvcmQgdXBkYXRlIGFuZCBz
ZW5kIGl0IHRvIHRoZSBzZXJ2ZXIuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uQWRhcHRlciA9IERTLkFkYXB0ZXIuZXh0
ZW5kKHsKLSAgICAgICAgICB1cGRhdGVSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCByZWNv
cmQpIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5zZXJpYWxpemUocmVjb3JkLCB7IGlu
Y2x1ZGVJZDogdHJ1ZSB9KTsKLSAgICAgICAgICAgIHZhciBpZCA9IHJlY29yZC5nZXQoJ2lkJyk7
Ci0gICAgICAgICAgICB2YXIgdXJsID0gW3R5cGUsIGlkXS5qb2luKCcvJyk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgewotICAgICAgICAgICAgICBqUXVlcnkuYWpheCh7Ci0gICAgICAgICAgICAgICAgdHlwZTog
J1BVVCcsCi0gICAgICAgICAgICAgICAgdXJsOiB1cmwsCi0gICAgICAgICAgICAgICAgZGF0YVR5
cGU6ICdqc29uJywKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCi0gICAgICAgICAgICAgIH0p
LnRoZW4oZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCBy
ZXNvbHZlLCBkYXRhKTsKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsKLSAgICAg
ICAgICAgICAgICBqcVhIUi50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwgbWFubmVy
ZWQgcHJvbWlzZXMKLSAgICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0LCBqcVhI
Uik7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAg
ICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCB1cGRhdGVSZWNvcmQKLSAg
ICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBv
ZiBEUy5Nb2RlbH0gdHlwZSAgIHRoZSBEUy5Nb2RlbCBjbGFzcyBvZiB0aGUgcmVjb3JkCi0gICAg
ICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBw
cm9taXNlCi0gICAgICAqLwotICAgICAgdXBkYXRlUmVjb3JkOiBFbWJlci5yZXF1aXJlZChGdW5j
dGlvbiksCi0KLSAgICAgIC8qKgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gYSBz
dWJjbGFzcyB0byBoYW5kbGUgdGhlIGRlbGV0aW9uIG9mCi0gICAgICAgIGEgcmVjb3JkLgotCi0g
ICAgICAgIFNlbmRzIGEgZGVsZXRlIHJlcXVlc3QgZm9yIHRoZSByZWNvcmQgdG8gdGhlIHNlcnZl
ci4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBB
cHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQoewotICAgICAgICAgIGRl
bGV0ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHJlY29yZCkgewotICAgICAgICAgICAg
dmFyIGRhdGEgPSB0aGlzLnNlcmlhbGl6ZShyZWNvcmQsIHsgaW5jbHVkZUlkOiB0cnVlIH0pOwot
ICAgICAgICAgICAgdmFyIGlkID0gcmVjb3JkLmdldCgnaWQnKTsKLSAgICAgICAgICAgIHZhciB1
cmwgPSBbdHlwZSwgaWRdLmpvaW4oJy8nKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBFbWJl
ci5SU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICAg
IGpRdWVyeS5hamF4KHsKLSAgICAgICAgICAgICAgICB0eXBlOiAnREVMRVRFJywKLSAgICAgICAg
ICAgICAgICB1cmw6IHVybCwKLSAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAotICAg
ICAgICAgICAgICAgIGRhdGE6IGRhdGEKLSAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihk
YXRhKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIucnVuKG51bGwsIHJlc29sdmUsIGRhdGEpOwot
ICAgICAgICAgICAgICB9LCBmdW5jdGlvbihqcVhIUikgewotICAgICAgICAgICAgICAgIGpxWEhS
LnRoZW4gPSBudWxsOyAvLyB0YW1lIGpRdWVyeSdzIGlsbCBtYW5uZXJlZCBwcm9taXNlcwotICAg
ICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCByZWplY3QsIGpxWEhSKTsKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
ICBgYGAKLQotICAgICAgICBAbWV0aG9kIGRlbGV0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RT
LlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
ICAgdGhlIERTLk1vZGVsIGNsYXNzIG9mIHRoZSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5N
b2RlbH0gcmVjb3JkCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICov
Ci0gICAgICBkZWxldGVSZWNvcmQ6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKSwKLQotICAgICAg
LyoqCi0gICAgICAgIEZpbmQgbXVsdGlwbGUgcmVjb3JkcyBhdCBvbmNlLgotCi0gICAgICAgIEJ5
IGRlZmF1bHQsIGl0IGxvb3BzIG92ZXIgdGhlIHByb3ZpZGVkIGlkcyBhbmQgY2FsbHMgYGZpbmRg
IG9uIGVhY2guCi0gICAgICAgIE1heSBiZSBvdmVyd3JpdHRlbiB0byBpbXByb3ZlIHBlcmZvcm1h
bmNlIGFuZCByZWR1Y2UgdGhlIG51bWJlciBvZgotICAgICAgICBzZXJ2ZXIgcmVxdWVzdHMuCi0K
LSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkFw
cGxpY2F0aW9uQWRhcHRlciA9IERTLkFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBmaW5kTWFu
eTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIGlkcykgewotICAgICAgICAgICAgdmFyIHVybCA9IHR5
cGU7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgalF1ZXJ5LmdldEpTT04odXJsLCB7aWRz
OiBpZHN9KS50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5ydW4o
bnVsbCwgcmVzb2x2ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGpxWEhSKSB7
Ci0gICAgICAgICAgICAgICAganFYSFIudGhlbiA9IG51bGw7IC8vIHRhbWUgalF1ZXJ5J3MgaWxs
IG1hbm5lcmVkIHByb21pc2VzCi0gICAgICAgICAgICAgICAgRW1iZXIucnVuKG51bGwsIHJlamVj
dCwganFYSFIpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZmluZE1hbnkK
LSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gdHlwZSAgIHRoZSBEUy5Nb2RlbCBjbGFzcyBvZiB0aGUgcmVjb3Jkcwot
ICAgICAgICBAcGFyYW0ge0FycmF5fSAgICBpZHMKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0g
cHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRNYW55OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwg
aWRzKSB7Ci0gICAgICAgIHZhciBwcm9taXNlcyA9IG1hcC5jYWxsKGlkcywgZnVuY3Rpb24oaWQp
IHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5maW5kKHN0b3JlLCB0eXBlLCBpZCk7Ci0gICAgICAg
IH0sIHRoaXMpOwotCi0gICAgICAgIHJldHVybiBFbWJlci5SU1ZQLmFsbChwcm9taXNlcyk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfXy5JbnZhbGlkRXJyb3IgPSBJbnZhbGlk
RXJyb3I7Ci0gICAgX19leHBvcnRzX18uQWRhcHRlciA9IEFkYXB0ZXI7Ci0gICAgX19leHBvcnRz
X19bImRlZmF1bHQiXSA9IEFkYXB0ZXI7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9z
eXN0ZW0vY2hhbmdlcyIsIAotICBbIi4vY2hhbmdlcy9yZWxhdGlvbnNoaXBfY2hhbmdlIiwiZXhw
b3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
InVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8K
LQotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2UgPSBfX2RlcGVuZGVuY3kxX18uUmVsYXRpb25z
aGlwQ2hhbmdlOwotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBfX2RlcGVuZGVuY3kx
X18uUmVsYXRpb25zaGlwQ2hhbmdlQWRkOwotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1v
dmUgPSBfX2RlcGVuZGVuY3kxX18uUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlOwotICAgIHZhciBP
bmVUb01hbnlDaGFuZ2UgPSBfX2RlcGVuZGVuY3kxX18uT25lVG9NYW55Q2hhbmdlOwotICAgIHZh
ciBNYW55VG9Ob25lQ2hhbmdlID0gX19kZXBlbmRlbmN5MV9fLk1hbnlUb05vbmVDaGFuZ2U7Ci0g
ICAgdmFyIE9uZVRvT25lQ2hhbmdlID0gX19kZXBlbmRlbmN5MV9fLk9uZVRvT25lQ2hhbmdlOwot
ICAgIHZhciBNYW55VG9NYW55Q2hhbmdlID0gX19kZXBlbmRlbmN5MV9fLk1hbnlUb01hbnlDaGFu
Z2U7Ci0KLSAgICBfX2V4cG9ydHNfXy5SZWxhdGlvbnNoaXBDaGFuZ2UgPSBSZWxhdGlvbnNoaXBD
aGFuZ2U7Ci0gICAgX19leHBvcnRzX18uUmVsYXRpb25zaGlwQ2hhbmdlQWRkID0gUmVsYXRpb25z
aGlwQ2hhbmdlQWRkOwotICAgIF9fZXhwb3J0c19fLlJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZSA9
IFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZTsKLSAgICBfX2V4cG9ydHNfXy5PbmVUb01hbnlDaGFu
Z2UgPSBPbmVUb01hbnlDaGFuZ2U7Ci0gICAgX19leHBvcnRzX18uTWFueVRvTm9uZUNoYW5nZSA9
IE1hbnlUb05vbmVDaGFuZ2U7Ci0gICAgX19leHBvcnRzX18uT25lVG9PbmVDaGFuZ2UgPSBPbmVU
b09uZUNoYW5nZTsKLSAgICBfX2V4cG9ydHNfXy5NYW55VG9NYW55Q2hhbmdlID0gTWFueVRvTWFu
eUNoYW5nZTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9jaGFuZ2VzL3Jl
bGF0aW9uc2hpcF9jaGFuZ2UiLCAKLSAgWyIuLi9tb2RlbCIsImV4cG9ydHMiXSwKLSAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgTW9kZWwg
PSBfX2RlcGVuZGVuY3kxX18uTW9kZWw7Ci0KLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQg
PSBFbWJlci5zZXQ7Ci0gICAgdmFyIGZvckVhY2ggPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMuZm9y
RWFjaDsKLQotICAgIC8qKgotICAgICAgQGNsYXNzIFJlbGF0aW9uc2hpcENoYW5nZQotICAgICAg
QG5hbWVzcGFjZSBEUwotICAgICAgQHByaXZhdGUKLSAgICAgIEBjb25zdHJ1Y3RvcgotICAgICov
Ci0gICAgdmFyIFJlbGF0aW9uc2hpcENoYW5nZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAg
IHRoaXMucGFyZW50UmVjb3JkID0gb3B0aW9ucy5wYXJlbnRSZWNvcmQ7Ci0gICAgICB0aGlzLmNo
aWxkUmVjb3JkID0gb3B0aW9ucy5jaGlsZFJlY29yZDsKLSAgICAgIHRoaXMuZmlyc3RSZWNvcmQg
PSBvcHRpb25zLmZpcnN0UmVjb3JkOwotICAgICAgdGhpcy5maXJzdFJlY29yZEtpbmQgPSBvcHRp
b25zLmZpcnN0UmVjb3JkS2luZDsKLSAgICAgIHRoaXMuZmlyc3RSZWNvcmROYW1lID0gb3B0aW9u
cy5maXJzdFJlY29yZE5hbWU7Ci0gICAgICB0aGlzLnNlY29uZFJlY29yZCA9IG9wdGlvbnMuc2Vj
b25kUmVjb3JkOwotICAgICAgdGhpcy5zZWNvbmRSZWNvcmRLaW5kID0gb3B0aW9ucy5zZWNvbmRS
ZWNvcmRLaW5kOwotICAgICAgdGhpcy5zZWNvbmRSZWNvcmROYW1lID0gb3B0aW9ucy5zZWNvbmRS
ZWNvcmROYW1lOwotICAgICAgdGhpcy5jaGFuZ2VUeXBlID0gb3B0aW9ucy5jaGFuZ2VUeXBlOwot
ICAgICAgdGhpcy5zdG9yZSA9IG9wdGlvbnMuc3RvcmU7Ci0KLSAgICAgIHRoaXMuY29tbWl0dGVk
ID0ge307Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAgQGNsYXNzIFJlbGF0aW9uc2hpcENoYW5n
ZUFkZAotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQHByaXZhdGUKLSAgICAgIEBjb25zdHJ1
Y3RvcgotICAgICovCi0gICAgdmFyIFJlbGF0aW9uc2hpcENoYW5nZUFkZCA9IGZ1bmN0aW9uKG9w
dGlvbnMpewotICAgICAgUmVsYXRpb25zaGlwQ2hhbmdlLmNhbGwodGhpcywgb3B0aW9ucyk7Ci0g
ICAgfTsKLQotICAgIC8qKgotICAgICAgQGNsYXNzIFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZQot
ICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQHByaXZhdGUKLSAgICAgIEBjb25zdHJ1Y3Rvcgot
ICAgICovCi0gICAgdmFyIFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZSA9IGZ1bmN0aW9uKG9wdGlv
bnMpewotICAgICAgUmVsYXRpb25zaGlwQ2hhbmdlLmNhbGwodGhpcywgb3B0aW9ucyk7Ci0gICAg
fTsKLQotICAgIFJlbGF0aW9uc2hpcENoYW5nZS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7
Ci0gICAgICByZXR1cm4gbmV3IFJlbGF0aW9uc2hpcENoYW5nZShvcHRpb25zKTsKLSAgICB9Owot
Ci0gICAgUmVsYXRpb25zaGlwQ2hhbmdlQWRkLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsK
LSAgICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwQ2hhbmdlQWRkKG9wdGlvbnMpOwotICAgIH07
Ci0KLSAgICBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9u
cykgewotICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUob3B0aW9ucyk7
Ci0gICAgfTsKLQotICAgIHZhciBPbmVUb01hbnlDaGFuZ2UgPSB7fTsKLSAgICB2YXIgT25lVG9O
b25lQ2hhbmdlID0ge307Ci0gICAgdmFyIE1hbnlUb05vbmVDaGFuZ2UgPSB7fTsKLSAgICB2YXIg
T25lVG9PbmVDaGFuZ2UgPSB7fTsKLSAgICB2YXIgTWFueVRvTWFueUNoYW5nZSA9IHt9OwotCi0g
ICAgUmVsYXRpb25zaGlwQ2hhbmdlLl9jcmVhdGVDaGFuZ2UgPSBmdW5jdGlvbihvcHRpb25zKXsK
LSAgICAgIGlmKG9wdGlvbnMuY2hhbmdlVHlwZSA9PT0gImFkZCIpewotICAgICAgICByZXR1cm4g
UmVsYXRpb25zaGlwQ2hhbmdlQWRkLmNyZWF0ZShvcHRpb25zKTsKLSAgICAgIH0KLSAgICAgIGlm
KG9wdGlvbnMuY2hhbmdlVHlwZSA9PT0gInJlbW92ZSIpewotICAgICAgICByZXR1cm4gUmVsYXRp
b25zaGlwQ2hhbmdlUmVtb3ZlLmNyZWF0ZShvcHRpb25zKTsKLSAgICAgIH0KLSAgICB9OwotCi0K
LSAgICBSZWxhdGlvbnNoaXBDaGFuZ2UuZGV0ZXJtaW5lUmVsYXRpb25zaGlwVHlwZSA9IGZ1bmN0
aW9uKHJlY29yZFR5cGUsIGtub3duU2lkZSl7Ci0gICAgICB2YXIga25vd25LZXkgPSBrbm93blNp
ZGUua2V5LCBrZXksIG90aGVyS2luZDsKLSAgICAgIHZhciBrbm93bktpbmQgPSBrbm93blNpZGUu
a2luZDsKLQotICAgICAgdmFyIGludmVyc2UgPSByZWNvcmRUeXBlLmludmVyc2VGb3Ioa25vd25L
ZXkpOwotCi0gICAgICBpZiAoaW52ZXJzZSl7Ci0gICAgICAgIGtleSA9IGludmVyc2UubmFtZTsK
LSAgICAgICAgb3RoZXJLaW5kID0gaW52ZXJzZS5raW5kOwotICAgICAgfQotCi0gICAgICBpZiAo
IWludmVyc2UpewotICAgICAgICByZXR1cm4ga25vd25LaW5kID09PSAiYmVsb25nc1RvIiA/ICJv
bmVUb05vbmUiIDogIm1hbnlUb05vbmUiOwotICAgICAgfQotICAgICAgZWxzZXsKLSAgICAgICAg
aWYob3RoZXJLaW5kID09PSAiYmVsb25nc1RvIil7Ci0gICAgICAgICAgcmV0dXJuIGtub3duS2lu
ZCA9PT0gImJlbG9uZ3NUbyIgPyAib25lVG9PbmUiIDogIm1hbnlUb09uZSI7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZXsKLSAgICAgICAgICByZXR1cm4ga25vd25LaW5kID09PSAiYmVsb25nc1Rv
IiA/ICJvbmVUb01hbnkiIDogIm1hbnlUb01hbnkiOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICB9OwotCi0gICAgUmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1bmN0aW9uKGZp
cnN0UmVjb3JkLCBzZWNvbmRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKXsKLSAgICAgIC8vIEdldCB0
aGUgdHlwZSBvZiB0aGUgY2hpbGQgYmFzZWQgb24gdGhlIGNoaWxkJ3MgY2xpZW50IElECi0gICAg
ICB2YXIgZmlyc3RSZWNvcmRUeXBlID0gZmlyc3RSZWNvcmQuY29uc3RydWN0b3IsIGNoYW5nZVR5
cGU7Ci0gICAgICBjaGFuZ2VUeXBlID0gUmVsYXRpb25zaGlwQ2hhbmdlLmRldGVybWluZVJlbGF0
aW9uc2hpcFR5cGUoZmlyc3RSZWNvcmRUeXBlLCBvcHRpb25zKTsKLSAgICAgIGlmIChjaGFuZ2VU
eXBlID09PSAib25lVG9NYW55Iil7Ci0gICAgICAgIHJldHVybiBPbmVUb01hbnlDaGFuZ2UuY3Jl
YXRlQ2hhbmdlKGZpcnN0UmVjb3JkLCBzZWNvbmRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKTsKLSAg
ICAgIH0KLSAgICAgIGVsc2UgaWYgKGNoYW5nZVR5cGUgPT09ICJtYW55VG9PbmUiKXsKLSAgICAg
ICAgcmV0dXJuIE9uZVRvTWFueUNoYW5nZS5jcmVhdGVDaGFuZ2Uoc2Vjb25kUmVjb3JkLCBmaXJz
dFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hhbmdl
VHlwZSA9PT0gIm9uZVRvTm9uZSIpewotICAgICAgICByZXR1cm4gT25lVG9Ob25lQ2hhbmdlLmNy
ZWF0ZUNoYW5nZShmaXJzdFJlY29yZCwgc2Vjb25kUmVjb3JkLCBzdG9yZSwgb3B0aW9ucyk7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGFuZ2VUeXBlID09PSAibWFueVRvTm9uZSIpewotICAg
ICAgICByZXR1cm4gTWFueVRvTm9uZUNoYW5nZS5jcmVhdGVDaGFuZ2UoZmlyc3RSZWNvcmQsIHNl
Y29uZFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hh
bmdlVHlwZSA9PT0gIm9uZVRvT25lIil7Ci0gICAgICAgIHJldHVybiBPbmVUb09uZUNoYW5nZS5j
cmVhdGVDaGFuZ2UoZmlyc3RSZWNvcmQsIHNlY29uZFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpOwot
ICAgICAgfQotICAgICAgZWxzZSBpZiAoY2hhbmdlVHlwZSA9PT0gIm1hbnlUb01hbnkiKXsKLSAg
ICAgICAgcmV0dXJuIE1hbnlUb01hbnlDaGFuZ2UuY3JlYXRlQ2hhbmdlKGZpcnN0UmVjb3JkLCBz
ZWNvbmRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgT25l
VG9Ob25lQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRS
ZWNvcmQsIHN0b3JlLCBvcHRpb25zKSB7Ci0gICAgICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7Ci0g
ICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlwQ2hhbmdlLl9jcmVhdGVDaGFuZ2UoewotICAg
ICAgICAgIHBhcmVudFJlY29yZDogcGFyZW50UmVjb3JkLAotICAgICAgICAgIGNoaWxkUmVjb3Jk
OiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJlY29yZDogY2hpbGRSZWNvcmQsCi0gICAg
ICAgICAgc3RvcmU6IHN0b3JlLAotICAgICAgICAgIGNoYW5nZVR5cGU6IG9wdGlvbnMuY2hhbmdl
VHlwZSwKLSAgICAgICAgICBmaXJzdFJlY29yZE5hbWU6IGtleSwKLSAgICAgICAgICBmaXJzdFJl
Y29yZEtpbmQ6ICJiZWxvbmdzVG8iCi0gICAgICB9KTsKLQotICAgICAgc3RvcmUuYWRkUmVsYXRp
b25zaGlwQ2hhbmdlRm9yKGNoaWxkUmVjb3JkLCBrZXksIHBhcmVudFJlY29yZCwgbnVsbCwgY2hh
bmdlKTsKLQotICAgICAgcmV0dXJuIGNoYW5nZTsKLSAgICB9OwotCi0gICAgTWFueVRvTm9uZUNo
YW5nZS5jcmVhdGVDaGFuZ2UgPSBmdW5jdGlvbihjaGlsZFJlY29yZCwgcGFyZW50UmVjb3JkLCBz
dG9yZSwgb3B0aW9ucykgewotICAgICAgdmFyIGtleSA9IG9wdGlvbnMua2V5OwotICAgICAgdmFy
IGNoYW5nZSA9IFJlbGF0aW9uc2hpcENoYW5nZS5fY3JlYXRlQ2hhbmdlKHsKLSAgICAgICAgICBw
YXJlbnRSZWNvcmQ6IGNoaWxkUmVjb3JkLAotICAgICAgICAgIGNoaWxkUmVjb3JkOiBwYXJlbnRS
ZWNvcmQsCi0gICAgICAgICAgc2Vjb25kUmVjb3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBz
dG9yZTogc3RvcmUsCi0gICAgICAgICAgY2hhbmdlVHlwZTogb3B0aW9ucy5jaGFuZ2VUeXBlLAot
ICAgICAgICAgIHNlY29uZFJlY29yZE5hbWU6IG9wdGlvbnMua2V5LAotICAgICAgICAgIHNlY29u
ZFJlY29yZEtpbmQ6ICJoYXNNYW55IgotICAgICAgfSk7Ci0KLSAgICAgIHN0b3JlLmFkZFJlbGF0
aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwga2V5LCBwYXJlbnRSZWNvcmQsIG51bGwsIGNo
YW5nZSk7Ci0gICAgICByZXR1cm4gY2hhbmdlOwotICAgIH07Ci0KLQotICAgIE1hbnlUb01hbnlD
aGFuZ2UuY3JlYXRlQ2hhbmdlID0gZnVuY3Rpb24oY2hpbGRSZWNvcmQsIHBhcmVudFJlY29yZCwg
c3RvcmUsIG9wdGlvbnMpIHsKLSAgICAgIC8vIElmIHRoZSBuYW1lIG9mIHRoZSBiZWxvbmdzVG8g
c2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwIGlzIHNwZWNpZmllZCwKLSAgICAgIC8vIHVzZSB0aGF0
Ci0gICAgICAvLyBJZiB0aGUgdHlwZSBvZiB0aGUgcGFyZW50IGlzIHNwZWNpZmllZCwgbG9vayBp
dCB1cCBvbiB0aGUgY2hpbGQncyB0eXBlCi0gICAgICAvLyBkZWZpbml0aW9uLgotICAgICAgdmFy
IGtleSA9IG9wdGlvbnMua2V5OwotCi0gICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlwQ2hh
bmdlLl9jcmVhdGVDaGFuZ2UoewotICAgICAgICAgIHBhcmVudFJlY29yZDogcGFyZW50UmVjb3Jk
LAotICAgICAgICAgIGNoaWxkUmVjb3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJl
Y29yZDogY2hpbGRSZWNvcmQsCi0gICAgICAgICAgc2Vjb25kUmVjb3JkOiBwYXJlbnRSZWNvcmQs
Ci0gICAgICAgICAgZmlyc3RSZWNvcmRLaW5kOiAiaGFzTWFueSIsCi0gICAgICAgICAgc2Vjb25k
UmVjb3JkS2luZDogImhhc01hbnkiLAotICAgICAgICAgIHN0b3JlOiBzdG9yZSwKLSAgICAgICAg
ICBjaGFuZ2VUeXBlOiBvcHRpb25zLmNoYW5nZVR5cGUsCi0gICAgICAgICAgZmlyc3RSZWNvcmRO
YW1lOiAga2V5Ci0gICAgICB9KTsKLQotICAgICAgc3RvcmUuYWRkUmVsYXRpb25zaGlwQ2hhbmdl
Rm9yKGNoaWxkUmVjb3JkLCBrZXksIHBhcmVudFJlY29yZCwgbnVsbCwgY2hhbmdlKTsKLQotCi0g
ICAgICByZXR1cm4gY2hhbmdlOwotICAgIH07Ci0KLSAgICBPbmVUb09uZUNoYW5nZS5jcmVhdGVD
aGFuZ2UgPSBmdW5jdGlvbihjaGlsZFJlY29yZCwgcGFyZW50UmVjb3JkLCBzdG9yZSwgb3B0aW9u
cykgewotICAgICAgdmFyIGtleTsKLQotICAgICAgLy8gSWYgdGhlIG5hbWUgb2YgdGhlIGJlbG9u
Z3NUbyBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAgaXMgc3BlY2lmaWVkLAotICAgICAgLy8gdXNl
IHRoYXQKLSAgICAgIC8vIElmIHRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgaXMgc3BlY2lmaWVkLCBs
b29rIGl0IHVwIG9uIHRoZSBjaGlsZCdzIHR5cGUKLSAgICAgIC8vIGRlZmluaXRpb24uCi0gICAg
ICBpZiAob3B0aW9ucy5wYXJlbnRUeXBlKSB7Ci0gICAgICAgIGtleSA9IG9wdGlvbnMucGFyZW50
VHlwZS5pbnZlcnNlRm9yKG9wdGlvbnMua2V5KS5uYW1lOwotICAgICAgfSBlbHNlIGlmIChvcHRp
b25zLmtleSkgewotICAgICAgICBrZXkgPSBvcHRpb25zLmtleTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3QgcGFzcyBlaXRoZXIgYSBwYXJlbnRUeXBlIG9y
IGJlbG9uZ3NUb05hbWUgb3B0aW9uIHRvIE9uZVRvTWFueUNoYW5nZS5mb3JDaGlsZEFuZFBhcmVu
dCIsIGZhbHNlKTsKLSAgICAgIH0KLQotICAgICAgdmFyIGNoYW5nZSA9IFJlbGF0aW9uc2hpcENo
YW5nZS5fY3JlYXRlQ2hhbmdlKHsKLSAgICAgICAgICBwYXJlbnRSZWNvcmQ6IHBhcmVudFJlY29y
ZCwKLSAgICAgICAgICBjaGlsZFJlY29yZDogY2hpbGRSZWNvcmQsCi0gICAgICAgICAgZmlyc3RS
ZWNvcmQ6IGNoaWxkUmVjb3JkLAotICAgICAgICAgIHNlY29uZFJlY29yZDogcGFyZW50UmVjb3Jk
LAotICAgICAgICAgIGZpcnN0UmVjb3JkS2luZDogImJlbG9uZ3NUbyIsCi0gICAgICAgICAgc2Vj
b25kUmVjb3JkS2luZDogImJlbG9uZ3NUbyIsCi0gICAgICAgICAgc3RvcmU6IHN0b3JlLAotICAg
ICAgICAgIGNoYW5nZVR5cGU6IG9wdGlvbnMuY2hhbmdlVHlwZSwKLSAgICAgICAgICBmaXJzdFJl
Y29yZE5hbWU6ICBrZXkKLSAgICAgIH0pOwotCi0gICAgICBzdG9yZS5hZGRSZWxhdGlvbnNoaXBD
aGFuZ2VGb3IoY2hpbGRSZWNvcmQsIGtleSwgcGFyZW50UmVjb3JkLCBudWxsLCBjaGFuZ2UpOwot
Ci0KLSAgICAgIHJldHVybiBjaGFuZ2U7Ci0gICAgfTsKLQotICAgIE9uZVRvT25lQ2hhbmdlLm1h
aW50YWluSW52YXJpYW50ID0gZnVuY3Rpb24ob3B0aW9ucywgc3RvcmUsIGNoaWxkUmVjb3JkLCBr
ZXkpewotICAgICAgaWYgKG9wdGlvbnMuY2hhbmdlVHlwZSA9PT0gImFkZCIgJiYgc3RvcmUucmVj
b3JkSXNNYXRlcmlhbGl6ZWQoY2hpbGRSZWNvcmQpKSB7Ci0gICAgICAgIHZhciBvbGRQYXJlbnQg
PSBnZXQoY2hpbGRSZWNvcmQsIGtleSk7Ci0gICAgICAgIGlmIChvbGRQYXJlbnQpewotICAgICAg
ICAgIHZhciBjb3JyZXNwb25kaW5nQ2hhbmdlID0gT25lVG9PbmVDaGFuZ2UuY3JlYXRlQ2hhbmdl
KGNoaWxkUmVjb3JkLCBvbGRQYXJlbnQsIHN0b3JlLCB7Ci0gICAgICAgICAgICAgIHBhcmVudFR5
cGU6IG9wdGlvbnMucGFyZW50VHlwZSwKLSAgICAgICAgICAgICAgaGFzTWFueU5hbWU6IG9wdGlv
bnMuaGFzTWFueU5hbWUsCi0gICAgICAgICAgICAgIGNoYW5nZVR5cGU6ICJyZW1vdmUiLAotICAg
ICAgICAgICAgICBrZXk6IG9wdGlvbnMua2V5Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICBz
dG9yZS5hZGRSZWxhdGlvbnNoaXBDaGFuZ2VGb3IoY2hpbGRSZWNvcmQsIGtleSwgb3B0aW9ucy5w
YXJlbnRSZWNvcmQgLCBudWxsLCBjb3JyZXNwb25kaW5nQ2hhbmdlKTsKLSAgICAgICAgIGNvcnJl
c3BvbmRpbmdDaGFuZ2Uuc3luYygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAg
IE9uZVRvTWFueUNoYW5nZS5jcmVhdGVDaGFuZ2UgPSBmdW5jdGlvbihjaGlsZFJlY29yZCwgcGFy
ZW50UmVjb3JkLCBzdG9yZSwgb3B0aW9ucykgewotICAgICAgdmFyIGtleTsKLQotICAgICAgLy8g
SWYgdGhlIG5hbWUgb2YgdGhlIGJlbG9uZ3NUbyBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAgaXMg
c3BlY2lmaWVkLAotICAgICAgLy8gdXNlIHRoYXQKLSAgICAgIC8vIElmIHRoZSB0eXBlIG9mIHRo
ZSBwYXJlbnQgaXMgc3BlY2lmaWVkLCBsb29rIGl0IHVwIG9uIHRoZSBjaGlsZCdzIHR5cGUKLSAg
ICAgIC8vIGRlZmluaXRpb24uCi0gICAgICBpZiAob3B0aW9ucy5wYXJlbnRUeXBlKSB7Ci0gICAg
ICAgIGtleSA9IG9wdGlvbnMucGFyZW50VHlwZS5pbnZlcnNlRm9yKG9wdGlvbnMua2V5KS5uYW1l
OwotICAgICAgICBPbmVUb01hbnlDaGFuZ2UubWFpbnRhaW5JbnZhcmlhbnQoIG9wdGlvbnMsIHN0
b3JlLCBjaGlsZFJlY29yZCwga2V5ICk7Ci0gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua2V5KSB7
Ci0gICAgICAgIGtleSA9IG9wdGlvbnMua2V5OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGVpdGhlciBhIHBhcmVudFR5cGUgb3IgYmVsb25nc1Rv
TmFtZSBvcHRpb24gdG8gT25lVG9NYW55Q2hhbmdlLmZvckNoaWxkQW5kUGFyZW50IiwgZmFsc2Up
OwotICAgICAgfQotCi0gICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlwQ2hhbmdlLl9jcmVh
dGVDaGFuZ2UoewotICAgICAgICAgIHBhcmVudFJlY29yZDogcGFyZW50UmVjb3JkLAotICAgICAg
ICAgIGNoaWxkUmVjb3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJlY29yZDogY2hp
bGRSZWNvcmQsCi0gICAgICAgICAgc2Vjb25kUmVjb3JkOiBwYXJlbnRSZWNvcmQsCi0gICAgICAg
ICAgZmlyc3RSZWNvcmRLaW5kOiAiYmVsb25nc1RvIiwKLSAgICAgICAgICBzZWNvbmRSZWNvcmRL
aW5kOiAiaGFzTWFueSIsCi0gICAgICAgICAgc3RvcmU6IHN0b3JlLAotICAgICAgICAgIGNoYW5n
ZVR5cGU6IG9wdGlvbnMuY2hhbmdlVHlwZSwKLSAgICAgICAgICBmaXJzdFJlY29yZE5hbWU6ICBr
ZXkKLSAgICAgIH0pOwotCi0gICAgICBzdG9yZS5hZGRSZWxhdGlvbnNoaXBDaGFuZ2VGb3IoY2hp
bGRSZWNvcmQsIGtleSwgcGFyZW50UmVjb3JkLCBjaGFuZ2UuZ2V0U2Vjb25kUmVjb3JkTmFtZSgp
LCBjaGFuZ2UpOwotCi0KLSAgICAgIHJldHVybiBjaGFuZ2U7Ci0gICAgfTsKLQotCi0gICAgT25l
VG9NYW55Q2hhbmdlLm1haW50YWluSW52YXJpYW50ID0gZnVuY3Rpb24ob3B0aW9ucywgc3RvcmUs
IGNoaWxkUmVjb3JkLCBrZXkpewotICAgICAgaWYgKG9wdGlvbnMuY2hhbmdlVHlwZSA9PT0gImFk
ZCIgJiYgY2hpbGRSZWNvcmQpIHsKLSAgICAgICAgdmFyIG9sZFBhcmVudCA9IGdldChjaGlsZFJl
Y29yZCwga2V5KTsKLSAgICAgICAgaWYgKG9sZFBhcmVudCl7Ci0gICAgICAgICAgdmFyIGNvcnJl
c3BvbmRpbmdDaGFuZ2UgPSBPbmVUb01hbnlDaGFuZ2UuY3JlYXRlQ2hhbmdlKGNoaWxkUmVjb3Jk
LCBvbGRQYXJlbnQsIHN0b3JlLCB7Ci0gICAgICAgICAgICAgIHBhcmVudFR5cGU6IG9wdGlvbnMu
cGFyZW50VHlwZSwKLSAgICAgICAgICAgICAgaGFzTWFueU5hbWU6IG9wdGlvbnMuaGFzTWFueU5h
bWUsCi0gICAgICAgICAgICAgIGNoYW5nZVR5cGU6ICJyZW1vdmUiLAotICAgICAgICAgICAgICBr
ZXk6IG9wdGlvbnMua2V5Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICBzdG9yZS5hZGRSZWxh
dGlvbnNoaXBDaGFuZ2VGb3IoY2hpbGRSZWNvcmQsIGtleSwgb3B0aW9ucy5wYXJlbnRSZWNvcmQs
IGNvcnJlc3BvbmRpbmdDaGFuZ2UuZ2V0U2Vjb25kUmVjb3JkTmFtZSgpLCBjb3JyZXNwb25kaW5n
Q2hhbmdlKTsKLSAgICAgICAgICBjb3JyZXNwb25kaW5nQ2hhbmdlLnN5bmMoKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgIEBjbGFzcyBSZWxhdGlvbnNoaXBD
aGFuZ2UKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAqLwotICAgIFJlbGF0aW9uc2hpcENoYW5n
ZS5wcm90b3R5cGUgPSB7Ci0KLSAgICAgIGdldFNlY29uZFJlY29yZE5hbWU6IGZ1bmN0aW9uKCkg
ewotICAgICAgICB2YXIgbmFtZSA9IHRoaXMuc2Vjb25kUmVjb3JkTmFtZSwgcGFyZW50OwotCi0g
ICAgICAgIGlmICghbmFtZSkgewotICAgICAgICAgIHBhcmVudCA9IHRoaXMuc2Vjb25kUmVjb3Jk
OwotICAgICAgICAgIGlmICghcGFyZW50KSB7IHJldHVybjsgfQotCi0gICAgICAgICAgdmFyIGNo
aWxkVHlwZSA9IHRoaXMuZmlyc3RSZWNvcmQuY29uc3RydWN0b3I7Ci0gICAgICAgICAgdmFyIGlu
dmVyc2UgPSBjaGlsZFR5cGUuaW52ZXJzZUZvcih0aGlzLmZpcnN0UmVjb3JkTmFtZSk7Ci0gICAg
ICAgICAgdGhpcy5zZWNvbmRSZWNvcmROYW1lID0gaW52ZXJzZS5uYW1lOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kUmVjb3JkTmFtZTsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgICBHZXQgdGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBvbiB0aGUgYmVs
b25nc1RvIHNpZGUuCi0KLSAgICAgICAgQG1ldGhvZCBnZXRGaXJzdFJlY29yZE5hbWUKLSAgICAg
ICAgQHJldHVybiB7U3RyaW5nfQotICAgICAgKi8KLSAgICAgIGdldEZpcnN0UmVjb3JkTmFtZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBuYW1lID0gdGhpcy5maXJzdFJlY29yZE5hbWU7Ci0g
ICAgICAgIHJldHVybiBuYW1lOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRo
b2QgZGVzdHJveQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGRlc3Ryb3k6IGZ1
bmN0aW9uKCkgewotICAgICAgICB2YXIgY2hpbGRSZWNvcmQgPSB0aGlzLmNoaWxkUmVjb3JkLAot
ICAgICAgICAgICAgYmVsb25nc1RvTmFtZSA9IHRoaXMuZ2V0Rmlyc3RSZWNvcmROYW1lKCksCi0g
ICAgICAgICAgICBoYXNNYW55TmFtZSA9IHRoaXMuZ2V0U2Vjb25kUmVjb3JkTmFtZSgpLAotICAg
ICAgICAgICAgc3RvcmUgPSB0aGlzLnN0b3JlOwotCi0gICAgICAgIHN0b3JlLnJlbW92ZVJlbGF0
aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwgYmVsb25nc1RvTmFtZSwgdGhpcy5wYXJlbnRS
ZWNvcmQsIGhhc01hbnlOYW1lLCB0aGlzLmNoYW5nZVR5cGUpOwotICAgICAgfSwKLQotICAgICAg
Z2V0U2Vjb25kUmVjb3JkOiBmdW5jdGlvbigpewotICAgICAgICByZXR1cm4gdGhpcy5zZWNvbmRS
ZWNvcmQ7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBnZXRGaXJzdFJl
Y29yZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGdldEZpcnN0UmVjb3JkOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RSZWNvcmQ7Ci0gICAgICB9LAot
Ci0gICAgICBjb2FsZXNjZTogZnVuY3Rpb24oKXsKLSAgICAgICAgdmFyIHJlbGF0aW9uc2hpcFBh
aXJzID0gdGhpcy5zdG9yZS5yZWxhdGlvbnNoaXBDaGFuZ2VQYWlyc0Zvcih0aGlzLmZpcnN0UmVj
b3JkKTsKLSAgICAgICAgZm9yRWFjaChyZWxhdGlvbnNoaXBQYWlycywgZnVuY3Rpb24ocGFpcil7
Ci0gICAgICAgICAgdmFyIGFkZGVkQ2hhbmdlID0gcGFpclsiYWRkIl07Ci0gICAgICAgICAgdmFy
IHJlbW92ZWRDaGFuZ2UgPSBwYWlyWyJyZW1vdmUiXTsKLSAgICAgICAgICBpZihhZGRlZENoYW5n
ZSAmJiByZW1vdmVkQ2hhbmdlKSB7Ci0gICAgICAgICAgICBhZGRlZENoYW5nZS5kZXN0cm95KCk7
Ci0gICAgICAgICAgICByZW1vdmVkQ2hhbmdlLmRlc3Ryb3koKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICAgICAgfQotICAgIH07Ci0KLSAgICBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQucHJv
dG90eXBlID0gRW1iZXIuY3JlYXRlKFJlbGF0aW9uc2hpcENoYW5nZS5jcmVhdGUoe30pKTsKLSAg
ICBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUucHJvdG90eXBlID0gRW1iZXIuY3JlYXRlKFJlbGF0
aW9uc2hpcENoYW5nZS5jcmVhdGUoe30pKTsKLQotICAgIC8vIHRoZSBvYmplY3QgaXMgYSB2YWx1
ZSwgYW5kIG5vdCBhIHByb21pc2UKLSAgICBmdW5jdGlvbiBpc1ZhbHVlKG9iamVjdCkgewotICAg
ICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmICghb2JqZWN0LnRoZW4gfHwg
dHlwZW9mIG9iamVjdC50aGVuICE9PSAnZnVuY3Rpb24nKTsKLSAgICB9Ci0KLSAgICBSZWxhdGlv
bnNoaXBDaGFuZ2VBZGQucHJvdG90eXBlLmNoYW5nZVR5cGUgPSAiYWRkIjsKLSAgICBSZWxhdGlv
bnNoaXBDaGFuZ2VBZGQucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBz
ZWNvbmRSZWNvcmROYW1lID0gdGhpcy5nZXRTZWNvbmRSZWNvcmROYW1lKCksCi0gICAgICAgICAg
Zmlyc3RSZWNvcmROYW1lID0gdGhpcy5nZXRGaXJzdFJlY29yZE5hbWUoKSwKLSAgICAgICAgICBm
aXJzdFJlY29yZCA9IHRoaXMuZ2V0Rmlyc3RSZWNvcmQoKSwKLSAgICAgICAgICBzZWNvbmRSZWNv
cmQgPSB0aGlzLmdldFNlY29uZFJlY29yZCgpOwotCi0gICAgICAvL0VtYmVyLmFzc2VydCgiWW91
IHNwZWNpZmllZCBhIGhhc01hbnkgKCIgKyBoYXNNYW55TmFtZSArICIpIG9uICIgKyAoIWJlbG9u
Z3NUb05hbWUgJiYgKG5ld1BhcmVudCB8fCBvbGRQYXJlbnQgfHwgdGhpcy5sYXN0UGFyZW50KS5j
b25zdHJ1Y3RvcikgKyAiIGJ1dCBkaWQgbm90IHNwZWNpZnkgYW4gaW52ZXJzZSBiZWxvbmdzVG8g
b24gIiArIGNoaWxkLmNvbnN0cnVjdG9yLCBiZWxvbmdzVG9OYW1lKTsKLSAgICAgIC8vRW1iZXIu
YXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEgYmVsb25nc1RvICgiICsgYmVsb25nc1RvTmFtZSArICIp
IG9uICIgKyBjaGlsZC5jb25zdHJ1Y3RvciArICIgYnV0IGRpZCBub3Qgc3BlY2lmeSBhbiBpbnZl
cnNlIGhhc01hbnkgb24gIiArICghaGFzTWFueU5hbWUgJiYgKG5ld1BhcmVudCB8fCBvbGRQYXJl
bnQgfHwgdGhpcy5sYXN0UGFyZW50UmVjb3JkKS5jb25zdHJ1Y3RvciksIGhhc01hbnlOYW1lKTsK
LQotICAgICAgaWYgKHNlY29uZFJlY29yZCBpbnN0YW5jZW9mIE1vZGVsICYmIGZpcnN0UmVjb3Jk
IGluc3RhbmNlb2YgTW9kZWwpIHsKLSAgICAgICAgaWYodGhpcy5zZWNvbmRSZWNvcmRLaW5kID09
PSAiYmVsb25nc1RvIil7Ci0gICAgICAgICAgc2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNo
aXBPYnNlcnZlcnMoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIHNldChzZWNvbmRSZWNvcmQsIHNl
Y29uZFJlY29yZE5hbWUsIGZpcnN0UmVjb3JkKTsKLSAgICAgICAgICB9KTsKLQotICAgICAgICAg
fQotICAgICAgICAgZWxzZSBpZih0aGlzLnNlY29uZFJlY29yZEtpbmQgPT09ICJoYXNNYW55Iil7
Ci0gICAgICAgICAgc2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgIHZhciByZWxhdGlvbnNoaXAgPSBnZXQoc2Vjb25kUmVjb3Jk
LCBzZWNvbmRSZWNvcmROYW1lKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbHVlKHJlbGF0aW9uc2hp
cCkpIHsgcmVsYXRpb25zaGlwLmFkZE9iamVjdChmaXJzdFJlY29yZCk7IH0KLSAgICAgICAgICB9
KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZmlyc3RSZWNvcmQgaW5zdGFuY2Vv
ZiBNb2RlbCAmJiBzZWNvbmRSZWNvcmQgaW5zdGFuY2VvZiBNb2RlbCAmJiBnZXQoZmlyc3RSZWNv
cmQsIGZpcnN0UmVjb3JkTmFtZSkgIT09IHNlY29uZFJlY29yZCkgewotICAgICAgICBpZih0aGlz
LmZpcnN0UmVjb3JkS2luZCA9PT0gImJlbG9uZ3NUbyIpewotICAgICAgICAgIGZpcnN0UmVjb3Jk
LnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIHNl
dChmaXJzdFJlY29yZCwgZmlyc3RSZWNvcmROYW1lLCBzZWNvbmRSZWNvcmQpOwotICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYodGhpcy5maXJzdFJlY29yZEtpbmQgPT09
ICJoYXNNYW55Iil7Ci0gICAgICAgICAgZmlyc3RSZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9i
c2VydmVycyhmdW5jdGlvbigpewotICAgICAgICAgICAgdmFyIHJlbGF0aW9uc2hpcCA9IGdldChm
aXJzdFJlY29yZCwgZmlyc3RSZWNvcmROYW1lKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbHVlKHJl
bGF0aW9uc2hpcCkpIHsgcmVsYXRpb25zaGlwLmFkZE9iamVjdChzZWNvbmRSZWNvcmQpOyB9Ci0g
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdGhpcy5jb2FsZXNjZSgp
OwotICAgIH07Ci0KLSAgICBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUucHJvdG90eXBlLmNoYW5n
ZVR5cGUgPSAicmVtb3ZlIjsKLSAgICBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUucHJvdG90eXBl
LnN5bmMgPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzZWNvbmRSZWNvcmROYW1lID0gdGhpcy5n
ZXRTZWNvbmRSZWNvcmROYW1lKCksCi0gICAgICAgICAgZmlyc3RSZWNvcmROYW1lID0gdGhpcy5n
ZXRGaXJzdFJlY29yZE5hbWUoKSwKLSAgICAgICAgICBmaXJzdFJlY29yZCA9IHRoaXMuZ2V0Rmly
c3RSZWNvcmQoKSwKLSAgICAgICAgICBzZWNvbmRSZWNvcmQgPSB0aGlzLmdldFNlY29uZFJlY29y
ZCgpOwotCi0gICAgICAvL0VtYmVyLmFzc2VydCgiWW91IHNwZWNpZmllZCBhIGhhc01hbnkgKCIg
KyBoYXNNYW55TmFtZSArICIpIG9uICIgKyAoIWJlbG9uZ3NUb05hbWUgJiYgKG5ld1BhcmVudCB8
fCBvbGRQYXJlbnQgfHwgdGhpcy5sYXN0UGFyZW50KS5jb25zdHJ1Y3RvcikgKyAiIGJ1dCBkaWQg
bm90IHNwZWNpZnkgYW4gaW52ZXJzZSBiZWxvbmdzVG8gb24gIiArIGNoaWxkLmNvbnN0cnVjdG9y
LCBiZWxvbmdzVG9OYW1lKTsKLSAgICAgIC8vRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEg
YmVsb25nc1RvICgiICsgYmVsb25nc1RvTmFtZSArICIpIG9uICIgKyBjaGlsZC5jb25zdHJ1Y3Rv
ciArICIgYnV0IGRpZCBub3Qgc3BlY2lmeSBhbiBpbnZlcnNlIGhhc01hbnkgb24gIiArICghaGFz
TWFueU5hbWUgJiYgKG5ld1BhcmVudCB8fCBvbGRQYXJlbnQgfHwgdGhpcy5sYXN0UGFyZW50UmVj
b3JkKS5jb25zdHJ1Y3RvciksIGhhc01hbnlOYW1lKTsKLQotICAgICAgaWYgKHNlY29uZFJlY29y
ZCBpbnN0YW5jZW9mIE1vZGVsICYmIGZpcnN0UmVjb3JkIGluc3RhbmNlb2YgTW9kZWwpIHsKLSAg
ICAgICAgaWYodGhpcy5zZWNvbmRSZWNvcmRLaW5kID09PSAiYmVsb25nc1RvIil7Ci0gICAgICAg
ICAgc2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVuY3Rpb24oKXsK
LSAgICAgICAgICAgIHNldChzZWNvbmRSZWNvcmQsIHNlY29uZFJlY29yZE5hbWUsIG51bGwpOwot
ICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYodGhpcy5zZWNvbmRSZWNv
cmRLaW5kID09PSAiaGFzTWFueSIpewotICAgICAgICAgIHNlY29uZFJlY29yZC5zdXNwZW5kUmVs
YXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICB2YXIgcmVsYXRpb25z
aGlwID0gZ2V0KHNlY29uZFJlY29yZCwgc2Vjb25kUmVjb3JkTmFtZSk7Ci0gICAgICAgICAgICBp
ZiAoaXNWYWx1ZShyZWxhdGlvbnNoaXApKSB7IHJlbGF0aW9uc2hpcC5yZW1vdmVPYmplY3QoZmly
c3RSZWNvcmQpOyB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
aWYgKGZpcnN0UmVjb3JkIGluc3RhbmNlb2YgTW9kZWwgJiYgZ2V0KGZpcnN0UmVjb3JkLCBmaXJz
dFJlY29yZE5hbWUpKSB7Ci0gICAgICAgIGlmKHRoaXMuZmlyc3RSZWNvcmRLaW5kID09PSAiYmVs
b25nc1RvIil7Ci0gICAgICAgICAgZmlyc3RSZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2Vy
dmVycyhmdW5jdGlvbigpewotICAgICAgICAgICAgc2V0KGZpcnN0UmVjb3JkLCBmaXJzdFJlY29y
ZE5hbWUsIG51bGwpOwotICAgICAgICAgIH0pOwotICAgICAgICAgfQotICAgICAgICAgZWxzZSBp
Zih0aGlzLmZpcnN0UmVjb3JkS2luZCA9PT0gImhhc01hbnkiKXsKLSAgICAgICAgICAgZmlyc3RS
ZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpewotICAgICAgICAg
ICAgIHZhciByZWxhdGlvbnNoaXAgPSBnZXQoZmlyc3RSZWNvcmQsIGZpcnN0UmVjb3JkTmFtZSk7
Ci0gICAgICAgICAgICAgaWYgKGlzVmFsdWUocmVsYXRpb25zaGlwKSkgeyByZWxhdGlvbnNoaXAu
cmVtb3ZlT2JqZWN0KHNlY29uZFJlY29yZCk7IH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICB0aGlzLmNvYWxlc2NlKCk7Ci0gICAgfTsKLQotICAgIF9fZXhwb3J0
c19fLlJlbGF0aW9uc2hpcENoYW5nZSA9IFJlbGF0aW9uc2hpcENoYW5nZTsKLSAgICBfX2V4cG9y
dHNfXy5SZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQ7Ci0gICAg
X19leHBvcnRzX18uUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlID0gUmVsYXRpb25zaGlwQ2hhbmdl
UmVtb3ZlOwotICAgIF9fZXhwb3J0c19fLk9uZVRvTWFueUNoYW5nZSA9IE9uZVRvTWFueUNoYW5n
ZTsKLSAgICBfX2V4cG9ydHNfXy5NYW55VG9Ob25lQ2hhbmdlID0gTWFueVRvTm9uZUNoYW5nZTsK
LSAgICBfX2V4cG9ydHNfXy5PbmVUb09uZUNoYW5nZSA9IE9uZVRvT25lQ2hhbmdlOwotICAgIF9f
ZXhwb3J0c19fLk1hbnlUb01hbnlDaGFuZ2UgPSBNYW55VG9NYW55Q2hhbmdlOwotICB9KTsKLWRl
ZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL2NvbnRhaW5lcl9wcm94eSIsIAotICBbImV4cG9y
dHMiXSwKLSAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
LyoqCi0gICAgICBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBlbmFibGUgZGVwcmVjYXRpb24g
b2YgY29udGFpbmVyIHBhdGhzIGFuZCBwcm92aWRlCi0gICAgICBhIGRlY2VudCBtZXNzYWdlIHRv
IHRoZSB1c2VyIGluZGljYXRpbmcgaG93IHRvIGZpeCB0aGUgaXNzdWUuCi0KLSAgICAgIEBjbGFz
cyBDb250YWluZXJQcm94eQotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQHByaXZhdGUKLSAg
ICAqLwotICAgIHZhciBDb250YWluZXJQcm94eSA9IGZ1bmN0aW9uIChjb250YWluZXIpewotICAg
ICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7Ci0gICAgfTsKLQotICAgIENvbnRhaW5lclBy
b3h5LnByb3RvdHlwZS5hbGlhc2VkRmFjdG9yeSA9IGZ1bmN0aW9uKHBhdGgsIHByZUxvb2t1cCkg
ewotICAgICAgdmFyIF90aGlzID0gdGhpczsKLQotICAgICAgcmV0dXJuIHtjcmVhdGU6IGZ1bmN0
aW9uKCl7IAotICAgICAgICBpZiAocHJlTG9va3VwKSB7IHByZUxvb2t1cCgpOyB9Ci0KLSAgICAg
ICAgcmV0dXJuIF90aGlzLmNvbnRhaW5lci5sb29rdXAocGF0aCk7IAotICAgICAgfX07Ci0gICAg
fTsKLQotICAgIENvbnRhaW5lclByb3h5LnByb3RvdHlwZS5yZWdpc3RlckFsaWFzID0gZnVuY3Rp
b24oc291cmNlLCBkZXN0LCBwcmVMb29rdXApIHsKLSAgICAgIHZhciBmYWN0b3J5ID0gdGhpcy5h
bGlhc2VkRmFjdG9yeShkZXN0LCBwcmVMb29rdXApOwotCi0gICAgICByZXR1cm4gdGhpcy5jb250
YWluZXIucmVnaXN0ZXIoc291cmNlLCBmYWN0b3J5KTsKLSAgICB9OwotCi0gICAgQ29udGFpbmVy
UHJveHkucHJvdG90eXBlLnJlZ2lzdGVyRGVwcmVjYXRpb24gPSBmdW5jdGlvbihkZXByZWNhdGVk
LCB2YWxpZCkgewotICAgICAgdmFyIHByZUxvb2t1cENhbGxiYWNrID0gZnVuY3Rpb24oKXsKLSAg
ICAgICAgRW1iZXIuZGVwcmVjYXRlKCJZb3UgdHJpZWQgdG8gbG9vayB1cCAnIiArIGRlcHJlY2F0
ZWQgKyAiJywgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnV0IHRoaXMgaGFzIGJlZW4g
ZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAnIiArIHZhbGlkICsgIicuIiwgZmFsc2UpOwotICAgICAg
fTsKLQotICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJBbGlhcyhkZXByZWNhdGVkLCB2YWxpZCwg
cHJlTG9va3VwQ2FsbGJhY2spOwotICAgIH07Ci0KLSAgICBDb250YWluZXJQcm94eS5wcm90b3R5
cGUucmVnaXN0ZXJEZXByZWNhdGlvbnMgPSBmdW5jdGlvbihwcm94eVBhaXJzKSB7Ci0gICAgICBm
b3IgKHZhciBpID0gcHJveHlQYWlycy5sZW5ndGg7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgdmFy
IHByb3h5UGFpciA9IHByb3h5UGFpcnNbaSAtIDFdLAotICAgICAgICAgICAgZGVwcmVjYXRlZCA9
IHByb3h5UGFpclsnZGVwcmVjYXRlZCddLAotICAgICAgICAgICAgdmFsaWQgPSBwcm94eVBhaXJb
J3ZhbGlkJ107Ci0KLSAgICAgICAgdGhpcy5yZWdpc3RlckRlcHJlY2F0aW9uKGRlcHJlY2F0ZWQs
IHZhbGlkKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IENvbnRhaW5lclByb3h5OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL2Rl
YnVnIiwgCi0gIFsiLi9kZWJ1Zy9kZWJ1Z19pbmZvIiwiLi9kZWJ1Zy9kZWJ1Z19hZGFwdGVyIiwi
ZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywg
X19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxl
IGVtYmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIERlYnVnQWRhcHRlciA9IF9fZGVwZW5kZW5j
eTJfX1siZGVmYXVsdCJdOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IERlYnVnQWRh
cHRlcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9kZWJ1Zy9kZWJ1Z19h
ZGFwdGVyIiwgCi0gIFsiLi4vbW9kZWwiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAg
ICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotICAgIHZhciBNb2RlbCA9IF9fZGVwZW5kZW5j
eTFfXy5Nb2RlbDsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBjYXBpdGFsaXplID0gRW1iZXIu
U3RyaW5nLmNhcGl0YWxpemUsIHVuZGVyc2NvcmUgPSBFbWJlci5TdHJpbmcudW5kZXJzY29yZTsK
LQotICAgIC8qKgotICAgICAgRXh0ZW5kIGBFbWJlci5EYXRhQWRhcHRlcmAgd2l0aCBFRCBzcGVj
aWZpYyBjb2RlLgotCi0gICAgICBAY2xhc3MgRGVidWdBZGFwdGVyCi0gICAgICBAbmFtZXNwYWNl
IERTCi0gICAgICBAZXh0ZW5kcyBFbWJlci5EYXRhQWRhcHRlcgotICAgICAgQHByaXZhdGUKLSAg
ICAqLwotICAgIHZhciBEZWJ1Z0FkYXB0ZXIgPSBFbWJlci5EYXRhQWRhcHRlci5leHRlbmQoewot
ICAgICAgZ2V0RmlsdGVyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAg
ICAgeyBuYW1lOiAnaXNOZXcnLCBkZXNjOiAnTmV3JyB9LAotICAgICAgICAgIHsgbmFtZTogJ2lz
TW9kaWZpZWQnLCBkZXNjOiAnTW9kaWZpZWQnIH0sCi0gICAgICAgICAgeyBuYW1lOiAnaXNDbGVh
bicsIGRlc2M6ICdDbGVhbicgfQotICAgICAgICBdOwotICAgICAgfSwKLQotICAgICAgZGV0ZWN0
OiBmdW5jdGlvbihrbGFzcykgewotICAgICAgICByZXR1cm4ga2xhc3MgIT09IE1vZGVsICYmIE1v
ZGVsLmRldGVjdChrbGFzcyk7Ci0gICAgICB9LAotCi0gICAgICBjb2x1bW5zRm9yVHlwZTogZnVu
Y3Rpb24odHlwZSkgewotICAgICAgICB2YXIgY29sdW1ucyA9IFt7IG5hbWU6ICdpZCcsIGRlc2M6
ICdJZCcgfV0sIGNvdW50ID0gMCwgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGdldCh0eXBlLCAnYXR0
cmlidXRlcycpLmZvckVhY2goZnVuY3Rpb24obmFtZSwgbWV0YSkgewotICAgICAgICAgICAgaWYg
KGNvdW50KysgPiBzZWxmLmF0dHJpYnV0ZUxpbWl0KSB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICAgICAgdmFyIGRlc2MgPSBjYXBpdGFsaXplKHVuZGVyc2NvcmUobmFtZSkucmVwbGFjZSgnXycs
ICcgJykpOwotICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgbmFtZTogbmFtZSwgZGVzYzogZGVz
YyB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBjb2x1bW5zOwotICAgICAgfSwKLQot
ICAgICAgZ2V0UmVjb3JkczogZnVuY3Rpb24odHlwZSkgewotICAgICAgICByZXR1cm4gdGhpcy5n
ZXQoJ3N0b3JlJykuYWxsKHR5cGUpOwotICAgICAgfSwKLQotICAgICAgZ2V0UmVjb3JkQ29sdW1u
VmFsdWVzOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBjb3Vu
dCA9IDAsCi0gICAgICAgICAgICBjb2x1bW5WYWx1ZXMgPSB7IGlkOiBnZXQocmVjb3JkLCAnaWQn
KSB9OwotCi0gICAgICAgIHJlY29yZC5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKGtleSkgewotICAg
ICAgICAgIGlmIChjb3VudCsrID4gc2VsZi5hdHRyaWJ1dGVMaW1pdCkgewotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQocmVj
b3JkLCBrZXkpOwotICAgICAgICAgIGNvbHVtblZhbHVlc1trZXldID0gdmFsdWU7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm4gY29sdW1uVmFsdWVzOwotICAgICAgfSwKLQotICAgICAgZ2V0
UmVjb3JkS2V5d29yZHM6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICB2YXIga2V5d29yZHMg
PSBbXSwga2V5cyA9IEVtYmVyLkEoWydpZCddKTsKLSAgICAgICAgcmVjb3JkLmVhY2hBdHRyaWJ1
dGUoZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAga2V5cy5wdXNoKGtleSk7Ci0gICAgICAgIH0p
OwotICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAga2V5d29y
ZHMucHVzaChnZXQocmVjb3JkLCBrZXkpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBr
ZXl3b3JkczsKLSAgICAgIH0sCi0KLSAgICAgIGdldFJlY29yZEZpbHRlclZhbHVlczogZnVuY3Rp
b24ocmVjb3JkKSB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgaXNOZXc6IHJlY29yZC5n
ZXQoJ2lzTmV3JyksCi0gICAgICAgICAgaXNNb2RpZmllZDogcmVjb3JkLmdldCgnaXNEaXJ0eScp
ICYmICFyZWNvcmQuZ2V0KCdpc05ldycpLAotICAgICAgICAgIGlzQ2xlYW46ICFyZWNvcmQuZ2V0
KCdpc0RpcnR5JykKLSAgICAgICAgfTsKLSAgICAgIH0sCi0KLSAgICAgIGdldFJlY29yZENvbG9y
OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgdmFyIGNvbG9yID0gJ2JsYWNrJzsKLSAgICAg
ICAgaWYgKHJlY29yZC5nZXQoJ2lzTmV3JykpIHsKLSAgICAgICAgICBjb2xvciA9ICdncmVlbic7
Ci0gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLmdldCgnaXNEaXJ0eScpKSB7Ci0gICAgICAgICAg
Y29sb3IgPSAnYmx1ZSc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgICAg
fSwKLQotICAgICAgb2JzZXJ2ZVJlY29yZDogZnVuY3Rpb24ocmVjb3JkLCByZWNvcmRVcGRhdGVk
KSB7Ci0gICAgICAgIHZhciByZWxlYXNlTWV0aG9kcyA9IEVtYmVyLkEoKSwgc2VsZiA9IHRoaXMs
Ci0gICAgICAgICAgICBrZXlzVG9PYnNlcnZlID0gRW1iZXIuQShbJ2lkJywgJ2lzTmV3JywgJ2lz
RGlydHknXSk7Ci0KLSAgICAgICAgcmVjb3JkLmVhY2hBdHRyaWJ1dGUoZnVuY3Rpb24oa2V5KSB7
Ci0gICAgICAgICAga2V5c1RvT2JzZXJ2ZS5wdXNoKGtleSk7Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIGtleXNUb09ic2VydmUuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICB2YXIg
aGFuZGxlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmVjb3JkVXBkYXRlZChzZWxmLndy
YXBSZWNvcmQocmVjb3JkKSk7Ci0gICAgICAgICAgfTsKLSAgICAgICAgICBFbWJlci5hZGRPYnNl
cnZlcihyZWNvcmQsIGtleSwgaGFuZGxlcik7Ci0gICAgICAgICAgcmVsZWFzZU1ldGhvZHMucHVz
aChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIEVtYmVyLnJlbW92ZU9ic2VydmVyKHJlY29yZCwg
a2V5LCBoYW5kbGVyKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFy
IHJlbGVhc2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICByZWxlYXNlTWV0aG9kcy5mb3JFYWNo
KGZ1bmN0aW9uKGZuKSB7IGZuKCk7IH0gKTsKLSAgICAgICAgfTsKLQotICAgICAgICByZXR1cm4g
cmVsZWFzZTsKLSAgICAgIH0KLQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQi
XSA9IERlYnVnQWRhcHRlcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9k
ZWJ1Zy9kZWJ1Z19pbmZvIiwgCi0gIFsiLi4vbW9kZWwiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9u
KF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
dmFyIE1vZGVsID0gX19kZXBlbmRlbmN5MV9fLk1vZGVsOwotCi0gICAgTW9kZWwucmVvcGVuKHsK
LQotICAgICAgLyoqCi0gICAgICAgIFByb3ZpZGVzIGluZm8gYWJvdXQgdGhlIG1vZGVsIGZvciBk
ZWJ1Z2dpbmcgcHVycG9zZXMKLSAgICAgICAgYnkgZ3JvdXBpbmcgdGhlIHByb3BlcnRpZXMgaW50
byBtb3JlIHNlbWFudGljIGdyb3Vwcy4KLQotICAgICAgICBNZWFudCB0byBiZSB1c2VkIGJ5IGRl
YnVnZ2luZyB0b29scyBzdWNoIGFzIHRoZSBDaHJvbWUgRW1iZXIgRXh0ZW5zaW9uLgotCi0gICAg
ICAgIC0gR3JvdXBzIGFsbCBhdHRyaWJ1dGVzIGluICJBdHRyaWJ1dGVzIiBncm91cC4KLSAgICAg
ICAgLSBHcm91cHMgYWxsIGJlbG9uZ3NUbyByZWxhdGlvbnNoaXBzIGluICJCZWxvbmdzIFRvIiBn
cm91cC4KLSAgICAgICAgLSBHcm91cHMgYWxsIGhhc01hbnkgcmVsYXRpb25zaGlwcyBpbiAiSGFz
IE1hbnkiIGdyb3VwLgotICAgICAgICAtIEdyb3VwcyBhbGwgZmxhZ3MgaW4gIkZsYWdzIiBncm91
cC4KLSAgICAgICAgLSBGbGFncyByZWxhdGlvbnNoaXAgQ1BzIGFzIGV4cGVuc2l2ZSBwcm9wZXJ0
aWVzLgotCi0gICAgICAgIEBtZXRob2QgX2RlYnVnSW5mbwotICAgICAgICBAZm9yIERTLk1vZGVs
Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgX2RlYnVnSW5mbzogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gWydpZCddLAotICAgICAgICAgICAgcmVsYXRp
b25zaGlwcyA9IHsgYmVsb25nc1RvOiBbXSwgaGFzTWFueTogW10gfSwKLSAgICAgICAgICAgIGV4
cGVuc2l2ZVByb3BlcnRpZXMgPSBbXTsKLQotICAgICAgICB0aGlzLmVhY2hBdHRyaWJ1dGUoZnVu
Y3Rpb24obmFtZSwgbWV0YSkgewotICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChuYW1lKTsKLSAg
ICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgdGhpcy5lYWNoUmVsYXRpb25zaGlwKGZ1bmN0aW9u
KG5hbWUsIHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgIHJlbGF0aW9uc2hpcHNbcmVsYXRpb25z
aGlwLmtpbmRdLnB1c2gobmFtZSk7Ci0gICAgICAgICAgZXhwZW5zaXZlUHJvcGVydGllcy5wdXNo
KG5hbWUpOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgZ3JvdXBzID0gWwotICAgICAgICAg
IHsKLSAgICAgICAgICAgIG5hbWU6ICdBdHRyaWJ1dGVzJywKLSAgICAgICAgICAgIHByb3BlcnRp
ZXM6IGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICBleHBhbmQ6IHRydWUKLSAgICAgICAgICB9LAot
ICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWU6ICdCZWxvbmdzIFRvJywKLSAgICAgICAgICAg
IHByb3BlcnRpZXM6IHJlbGF0aW9uc2hpcHMuYmVsb25nc1RvLAotICAgICAgICAgICAgZXhwYW5k
OiB0cnVlCi0gICAgICAgICAgfSwKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lOiAnSGFz
IE1hbnknLAotICAgICAgICAgICAgcHJvcGVydGllczogcmVsYXRpb25zaGlwcy5oYXNNYW55LAot
ICAgICAgICAgICAgZXhwYW5kOiB0cnVlCi0gICAgICAgICAgfSwKLSAgICAgICAgICB7Ci0gICAg
ICAgICAgICBuYW1lOiAnRmxhZ3MnLAotICAgICAgICAgICAgcHJvcGVydGllczogWydpc0xvYWRl
ZCcsICdpc0RpcnR5JywgJ2lzU2F2aW5nJywgJ2lzRGVsZXRlZCcsICdpc0Vycm9yJywgJ2lzTmV3
JywgJ2lzVmFsaWQnXQotICAgICAgICAgIH0KLSAgICAgICAgXTsKLQotICAgICAgICByZXR1cm4g
ewotICAgICAgICAgIHByb3BlcnR5SW5mbzogewotICAgICAgICAgICAgLy8gaW5jbHVkZSBhbGwg
b3RoZXIgbWl4aW5zIC8gcHJvcGVydGllcyAobm90IGp1c3QgdGhlIGdyb3VwZWQgb25lcykKLSAg
ICAgICAgICAgIGluY2x1ZGVPdGhlclByb3BlcnRpZXM6IHRydWUsCi0gICAgICAgICAgICBncm91
cHM6IGdyb3VwcywKLSAgICAgICAgICAgIC8vIGRvbid0IHByZS1jYWxjdWxhdGUgdW5sZXNzIGNh
Y2hlZAotICAgICAgICAgICAgZXhwZW5zaXZlUHJvcGVydGllczogZXhwZW5zaXZlUHJvcGVydGll
cwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBNb2RlbDsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGli
L3N5c3RlbS9tb2RlbCIsIAotICBbIi4vbW9kZWwvbW9kZWwiLCIuL21vZGVsL2F0dHJpYnV0ZXMi
LCIuL21vZGVsL3N0YXRlcyIsIi4vbW9kZWwvZXJyb3JzIiwiZXhwb3J0cyJdLAotICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgot
ICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBNb2RlbCA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBhdHRyID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0gICAgdmFyIFJvb3RTdGF0ZSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJd
OwotICAgIHZhciBFcnJvcnMgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgIF9f
ZXhwb3J0c19fLk1vZGVsID0gTW9kZWw7Ci0gICAgX19leHBvcnRzX18uUm9vdFN0YXRlID0gUm9v
dFN0YXRlOwotICAgIF9fZXhwb3J0c19fLmF0dHIgPSBhdHRyOwotICAgIF9fZXhwb3J0c19fLkVy
cm9ycyA9IEVycm9yczsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9tb2Rl
bC9hdHRyaWJ1dGVzIiwgCi0gIFsiLi9tb2RlbCIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIg
TW9kZWwgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgIC8qKgotICAgICAgQG1v
ZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQ7Ci0KLSAg
ICAvKioKLSAgICAgIEBjbGFzcyBNb2RlbAotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICovCi0g
ICAgTW9kZWwucmVvcGVuQ2xhc3MoewotICAgICAgLyoqCi0gICAgICAgIEEgbWFwIHdob3NlIGtl
eXMgYXJlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCAocHJvcGVydGllcwotICAgICAgICBk
ZXNjcmliZWQgYnkgRFMuYXR0cikgYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIG1ldGEgb2JqZWN0
IGZvciB0aGUKLSAgICAgICAgcHJvcGVydHkuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAg
IGBgYGphdmFzY3JpcHQKLQotICAgICAgICBBcHAuUGVyc29uID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICAgICAgICBmaXJzdE5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAgICAgICAgIGxhc3ROYW1l
OiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBiaXJ0aGRheTogYXR0cignZGF0ZScpCi0gICAg
ICAgIH0pOwotCi0gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gRW1iZXIuZ2V0KEFwcC5QZXJzb24s
ICdhdHRyaWJ1dGVzJykKLQotICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goZnVuY3Rpb24obmFt
ZSwgbWV0YSkgewotICAgICAgICAgIGNvbnNvbGUubG9nKG5hbWUsIG1ldGEpOwotICAgICAgICB9
KTsKLQotICAgICAgICAvLyBwcmludHM6Ci0gICAgICAgIC8vIGZpcnN0TmFtZSB7dHlwZTogInN0
cmluZyIsIGlzQXR0cmlidXRlOiB0cnVlLCBvcHRpb25zOiBPYmplY3QsIHBhcmVudFR5cGU6IGZ1
bmN0aW9uLCBuYW1lOiAiZmlyc3ROYW1lIn0KLSAgICAgICAgLy8gbGFzdE5hbWUge3R5cGU6ICJz
dHJpbmciLCBpc0F0dHJpYnV0ZTogdHJ1ZSwgb3B0aW9uczogT2JqZWN0LCBwYXJlbnRUeXBlOiBm
dW5jdGlvbiwgbmFtZTogImxhc3ROYW1lIn0KLSAgICAgICAgLy8gYmlydGhkYXkge3R5cGU6ICJk
YXRlIiwgaXNBdHRyaWJ1dGU6IHRydWUsIG9wdGlvbnM6IE9iamVjdCwgcGFyZW50VHlwZTogZnVu
Y3Rpb24sIG5hbWU6ICJiaXJ0aGRheSJ9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0
eSBhdHRyaWJ1dGVzCi0gICAgICAgIEBzdGF0aWMKLSAgICAgICAgQHR5cGUge0VtYmVyLk1hcH0K
LSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgYXR0cmlidXRlczogRW1iZXIuY29t
cHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBtYXAgPSBFbWJlci5NYXAuY3JlYXRlKCk7
Ci0KLSAgICAgICAgdGhpcy5lYWNoQ29tcHV0ZWRQcm9wZXJ0eShmdW5jdGlvbihuYW1lLCBtZXRh
KSB7Ci0gICAgICAgICAgaWYgKG1ldGEuaXNBdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIEVtYmVy
LmFzc2VydCgiWW91IG1heSBub3Qgc2V0IGBpZGAgYXMgYW4gYXR0cmlidXRlIG9uIHlvdXIgbW9k
ZWwuIFBsZWFzZSByZW1vdmUgYW55IGxpbmVzIHRoYXQgbG9vayBsaWtlOiBgaWQ6IERTLmF0dHIo
Jzx0eXBlPicpYCBmcm9tICIgKyB0aGlzLnRvU3RyaW5nKCksIG5hbWUgIT09ICdpZCcpOwotCi0g
ICAgICAgICAgICBtZXRhLm5hbWUgPSBuYW1lOwotICAgICAgICAgICAgbWFwLnNldChuYW1lLCBt
ZXRhKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBtYXA7Ci0g
ICAgICB9KSwKLQotICAgICAgLyoqCi0gICAgICAgIEEgbWFwIHdob3NlIGtleXMgYXJlIHRoZSBh
dHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCAocHJvcGVydGllcwotICAgICAgICBkZXNjcmliZWQgYnkg
RFMuYXR0cikgYW5kIHdob3NlIHZhbHVlcyBhcmUgdHlwZSBvZiB0cmFuc2Zvcm1hdGlvbgotICAg
ICAgICBhcHBsaWVkIHRvIGVhY2ggYXR0cmlidXRlLiBUaGlzIG1hcCBkb2VzIG5vdCBpbmNsdWRl
IGFueQotICAgICAgICBhdHRyaWJ1dGVzIHRoYXQgZG8gbm90IGhhdmUgYW4gdHJhbnNmb3JtYXRp
b24gdHlwZS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICBBcHAuUGVyc29uID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBmaXJzdE5hbWU6
IGF0dHIoKSwKLSAgICAgICAgICBsYXN0TmFtZTogYXR0cignc3RyaW5nJyksCi0gICAgICAgICAg
YmlydGhkYXk6IGF0dHIoJ2RhdGUnKQotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgdHJhbnNm
b3JtZWRBdHRyaWJ1dGVzID0gRW1iZXIuZ2V0KEFwcC5QZXJzb24sICd0cmFuc2Zvcm1lZEF0dHJp
YnV0ZXMnKQotCi0gICAgICAgIHRyYW5zZm9ybWVkQXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9u
KGZpZWxkLCB0eXBlKSB7Ci0gICAgICAgICAgY29uc29sZS5sb2coZmllbGQsIHR5cGUpOwotICAg
ICAgICB9KTsKLQotICAgICAgICAvLyBwcmludHM6Ci0gICAgICAgIC8vIGxhc3ROYW1lIHN0cmlu
ZwotICAgICAgICAvLyBiaXJ0aGRheSBkYXRlCi0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9w
ZXJ0eSB0cmFuc2Zvcm1lZEF0dHJpYnV0ZXMKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAdHlw
ZSB7RW1iZXIuTWFwfQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICB0cmFuc2Zv
cm1lZEF0dHJpYnV0ZXM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIg
bWFwID0gRW1iZXIuTWFwLmNyZWF0ZSgpOwotCi0gICAgICAgIHRoaXMuZWFjaEF0dHJpYnV0ZShm
dW5jdGlvbihrZXksIG1ldGEpIHsKLSAgICAgICAgICBpZiAobWV0YS50eXBlKSB7Ci0gICAgICAg
ICAgICBtYXAuc2V0KGtleSwgbWV0YS50eXBlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIHJldHVybiBtYXA7Ci0gICAgICB9KSwKLQotICAgICAgLyoqCi0gICAgICAgIEl0
ZXJhdGVzIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVsLCBjYWxsaW5nIHRoZSBw
YXNzZWQgZnVuY3Rpb24gb24gZWFjaAotICAgICAgICBhdHRyaWJ1dGUuCi0KLSAgICAgICAgVGhl
IGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNp
Z25hdHVyZSAoYWxsCi0gICAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKLQotICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIGZ1bmN0aW9uKG5hbWUsIG1ldGEpOwotICAgICAgICBg
YGAKLQotICAgICAgICAtIGBuYW1lYCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwcm9wZXJ0eSBp
biB0aGUgaXRlcmF0aW9uCi0gICAgICAgIC0gYG1ldGFgIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhl
IGF0dHJpYnV0ZSBwcm9wZXJ0eSBpbiB0aGUgaXRlcmF0aW9uCi0KLSAgICAgICAgTm90ZSB0aGF0
IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFs
IHRhcmdldAotICAgICAgICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBgdGhpc2Agb24gdGhl
IGNvbnRleHQuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgQXBwLlBlcnNvbiA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgZmlyc3ROYW1l
OiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBsYXN0TmFtZTogYXR0cignc3RyaW5nJyksCi0g
ICAgICAgICAgYmlydGhkYXk6IGF0dHIoJ2RhdGUnKQotICAgICAgICB9KTsKLQotICAgICAgICBB
cHAuUGVyc29uLmVhY2hBdHRyaWJ1dGUoZnVuY3Rpb24obmFtZSwgbWV0YSkgewotICAgICAgICAg
IGNvbnNvbGUubG9nKG5hbWUsIG1ldGEpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBwcmlu
dHM6Ci0gICAgICAgIC8vIGZpcnN0TmFtZSB7dHlwZTogInN0cmluZyIsIGlzQXR0cmlidXRlOiB0
cnVlLCBvcHRpb25zOiBPYmplY3QsIHBhcmVudFR5cGU6IGZ1bmN0aW9uLCBuYW1lOiAiZmlyc3RO
YW1lIn0KLSAgICAgICAgLy8gbGFzdE5hbWUge3R5cGU6ICJzdHJpbmciLCBpc0F0dHJpYnV0ZTog
dHJ1ZSwgb3B0aW9uczogT2JqZWN0LCBwYXJlbnRUeXBlOiBmdW5jdGlvbiwgbmFtZTogImxhc3RO
YW1lIn0KLSAgICAgICAgLy8gYmlydGhkYXkge3R5cGU6ICJkYXRlIiwgaXNBdHRyaWJ1dGU6IHRy
dWUsIG9wdGlvbnM6IE9iamVjdCwgcGFyZW50VHlwZTogZnVuY3Rpb24sIG5hbWU6ICJiaXJ0aGRh
eSJ9Ci0gICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBlYWNoQXR0cmlidXRlCi0gICAgICAg
IEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAg
ICAgICAgQHN0YXRpYwotICAgICAgKi8KLSAgICAgIGVhY2hBdHRyaWJ1dGU6IGZ1bmN0aW9uKGNh
bGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgIGdldCh0aGlzLCAnYXR0cmlidXRlcycpLmZvckVh
Y2goZnVuY3Rpb24obmFtZSwgbWV0YSkgewotICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGlu
ZywgbmFtZSwgbWV0YSk7Ci0gICAgICAgIH0sIGJpbmRpbmcpOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHRyYW5zZm9ybWVkQXR0cmlidXRlcyBv
ZiB0aGUgbW9kZWwsIGNhbGxpbmcKLSAgICAgICAgdGhlIHBhc3NlZCBmdW5jdGlvbiBvbiBlYWNo
IGF0dHJpYnV0ZS4gTm90ZSB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUKLSAgICAgICAgY2FsbGVk
IGZvciBhbnkgYXR0cmlidXRlcyB0aGF0IGRvIG5vdCBoYXZlIGFuIHRyYW5zZm9ybWF0aW9uIHR5
cGUuCi0KLSAgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2
ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICAgIHBhcmFtZXRlcnMgYXJlIG9w
dGlvbmFsKToKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIGZ1bmN0aW9uKG5hbWUs
IHR5cGUpOwotICAgICAgICBgYGAKLQotICAgICAgICAtIGBuYW1lYCB0aGUgbmFtZSBvZiB0aGUg
Y3VycmVudCBwcm9wZXJ0eSBpbiB0aGUgaXRlcmF0aW9uCi0gICAgICAgIC0gYHR5cGVgIGEgc3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb2YgdHJhbnNmb3JtZWQKLSAgICAg
ICAgICBhcHBsaWVkIHRvIHRoZSBhdHRyaWJ1dGUKLQotICAgICAgICBOb3RlIHRoYXQgaW4gYWRk
aXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0
Ci0gICAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4
dC4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBB
cHAuUGVyc29uID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBmaXJzdE5hbWU6IGF0dHIo
KSwKLSAgICAgICAgICBsYXN0TmFtZTogYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgYmlydGhk
YXk6IGF0dHIoJ2RhdGUnKQotICAgICAgICB9KTsKLQotICAgICAgICBBcHAuUGVyc29uLmVhY2hU
cmFuc2Zvcm1lZEF0dHJpYnV0ZShmdW5jdGlvbihuYW1lLCB0eXBlKSB7Ci0gICAgICAgICAgY29u
c29sZS5sb2cobmFtZSwgdHlwZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIHByaW50czoK
LSAgICAgICAgLy8gbGFzdE5hbWUgc3RyaW5nCi0gICAgICAgIC8vIGJpcnRoZGF5IGRhdGUKLSAg
ICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIGVhY2hUcmFuc2Zvcm1lZEF0dHJpYnV0ZQotICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQot
ICAgICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNl
Ci0gICAgICAgIEBzdGF0aWMKLSAgICAgICovCi0gICAgICBlYWNoVHJhbnNmb3JtZWRBdHRyaWJ1
dGU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgIGdldCh0aGlzLCAndHJh
bnNmb3JtZWRBdHRyaWJ1dGVzJykuZm9yRWFjaChmdW5jdGlvbihuYW1lLCB0eXBlKSB7Ci0gICAg
ICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCBuYW1lLCB0eXBlKTsKLSAgICAgICAgfSk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0KLQotICAgIE1vZGVsLnJlb3Blbih7Ci0gICAgICBlYWNoQXR0cmli
dXRlOiBmdW5jdGlvbihjYWxsYmFjaywgYmluZGluZykgewotICAgICAgICB0aGlzLmNvbnN0cnVj
dG9yLmVhY2hBdHRyaWJ1dGUoY2FsbGJhY2ssIGJpbmRpbmcpOwotICAgICAgfQotICAgIH0pOwot
Ci0gICAgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHJlY29yZCwgb3B0aW9ucywga2V5KSB7Ci0g
ICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVmYXVsdFZhbHVlID09PSAiZnVuY3Rpb24iKSB7Ci0g
ICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZS5hcHBseShudWxsLCBhcmd1bWVudHMp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVmYXVsdFZhbHVlOwot
ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhc1ZhbHVlKHJlY29yZCwga2V5KSB7Ci0g
ICAgICByZXR1cm4gcmVjb3JkLl9hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkgfHwKLSAg
ICAgICAgICAgICByZWNvcmQuX2luRmxpZ2h0QXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkp
IHx8Ci0gICAgICAgICAgICAgcmVjb3JkLl9kYXRhLmhhc093blByb3BlcnR5KGtleSk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZ2V0VmFsdWUocmVjb3JkLCBrZXkpIHsKLSAgICAgIGlmIChyZWNv
cmQuX2F0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICByZXR1cm4gcmVj
b3JkLl9hdHRyaWJ1dGVzW2tleV07Ci0gICAgICB9IGVsc2UgaWYgKHJlY29yZC5faW5GbGlnaHRB
dHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgcmV0dXJuIHJlY29yZC5f
aW5GbGlnaHRBdHRyaWJ1dGVzW2tleV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4g
cmVjb3JkLl9kYXRhW2tleV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICBgRFMu
YXR0cmAgZGVmaW5lcyBhbiBhdHRyaWJ1dGUgb24gYSBbRFMuTW9kZWxdKC9hcGkvZGF0YS9jbGFz
c2VzL0RTLk1vZGVsLmh0bWwpLgotICAgICAgQnkgZGVmYXVsdCwgYXR0cmlidXRlcyBhcmUgcGFz
c2VkIHRocm91Z2ggYXMtaXMsIGhvd2V2ZXIgeW91IGNhbiBzcGVjaWZ5IGFuCi0gICAgICBvcHRp
b25hbCB0eXBlIHRvIGhhdmUgdGhlIHZhbHVlIGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQuCi0g
ICAgICBFbWJlciBEYXRhIHNoaXBzIHdpdGggZm91ciBiYXNpYyB0cmFuc2Zvcm0gdHlwZXM6IGBz
dHJpbmdgLCBgbnVtYmVyYCwKLSAgICAgIGBib29sZWFuYCBhbmQgYGRhdGVgLiBZb3UgY2FuIGRl
ZmluZSB5b3VyIG93biB0cmFuc2Zvcm1zIGJ5IHN1YmNsYXNzaW5nCi0gICAgICBbRFMuVHJhbnNm
b3JtXSgvYXBpL2RhdGEvY2xhc3Nlcy9EUy5UcmFuc2Zvcm0uaHRtbCkuCi0KLSAgICAgIE5vdGUg
dGhhdCB5b3UgY2Fubm90IHVzZSBgYXR0cmAgdG8gZGVmaW5lIGFuIGF0dHJpYnV0ZSBvZiBgaWRg
LgotCi0gICAgICBgRFMuYXR0cmAgdGFrZXMgYW4gb3B0aW9uYWwgaGFzaCBhcyBhIHNlY29uZCBw
YXJhbWV0ZXIsIGN1cnJlbnRseQotICAgICAgc3VwcG9ydGVkIG9wdGlvbnMgYXJlOgotCi0gICAg
ICAtIGBkZWZhdWx0VmFsdWVgOiBQYXNzIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdG8gYmUgY2Fs
bGVkIHRvIHNldCB0aGUgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgICAgICB0byBhIGRl
ZmF1bHQgdmFsdWUgaWYgbm9uZSBpcyBzdXBwbGllZC4KLQotICAgICAgRXhhbXBsZQotCi0gICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYXR0ciA9IERTLmF0dHI7Ci0KLSAgICAgIEFwcC5V
c2VyID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgdXNlcm5hbWU6IGF0dHIoJ3N0cmluZycp
LAotICAgICAgICBlbWFpbDogYXR0cignc3RyaW5nJyksCi0gICAgICAgIHZlcmlmaWVkOiBhdHRy
KCdib29sZWFuJywge2RlZmF1bHRWYWx1ZTogZmFsc2V9KQotICAgICAgfSk7Ci0gICAgICBgYGAK
LQotICAgICAgQG5hbWVzcGFjZQotICAgICAgQG1ldGhvZCBhdHRyCi0gICAgICBAZm9yIERTCi0g
ICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgYXR0cmlidXRlIHR5cGUKLSAgICAgIEBwYXJh
bSB7T2JqZWN0fSBvcHRpb25zIGEgaGFzaCBvZiBvcHRpb25zCi0gICAgICBAcmV0dXJuIHtBdHRy
aWJ1dGV9Ci0gICAgKi8KLQotICAgIGZ1bmN0aW9uIGF0dHIodHlwZSwgb3B0aW9ucykgewotICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICAgIHZhciBtZXRhID0gewotICAgICAg
ICB0eXBlOiB0eXBlLAotICAgICAgICBpc0F0dHJpYnV0ZTogdHJ1ZSwKLSAgICAgICAgb3B0aW9u
czogb3B0aW9ucwotICAgICAgfTsKLQotICAgICAgcmV0dXJuIEVtYmVyLmNvbXB1dGVkKCdkYXRh
JywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+
IDEpIHsKLSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtYXkgbm90IHNldCBgaWRgIGFzIGFu
IGF0dHJpYnV0ZSBvbiB5b3VyIG1vZGVsLiBQbGVhc2UgcmVtb3ZlIGFueSBsaW5lcyB0aGF0IGxv
b2sgbGlrZTogYGlkOiBEUy5hdHRyKCc8dHlwZT4nKWAgZnJvbSAiICsgdGhpcy5jb25zdHJ1Y3Rv
ci50b1N0cmluZygpLCBrZXkgIT09ICdpZCcpOwotICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGdl
dFZhbHVlKHRoaXMsIGtleSk7Ci0KLSAgICAgICAgICBpZiAodmFsdWUgIT09IG9sZFZhbHVlKSB7
Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyB2YWx1ZSB0byB0aGUgY2hhbmdlZCBhdHRyaWJ1
dGVzIGhhc2g7IGl0IHdpbGwgZ2V0IGRlbGV0ZWQgYnkKLSAgICAgICAgICAgIC8vIHRoZSAnZGlk
U2V0UHJvcGVydHknIGhhbmRsZXIgaWYgaXQgaXMgbm8gZGlmZmVyZW50IGZyb20gdGhlIG9yaWdp
bmFsIHZhbHVlCi0gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTsKLQot
ICAgICAgICAgICAgdGhpcy5zZW5kKCdkaWRTZXRQcm9wZXJ0eScsIHsKLSAgICAgICAgICAgICAg
bmFtZToga2V5LAotICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsCi0gICAgICAgICAg
ICAgIG9yaWdpbmFsVmFsdWU6IHRoaXMuX2RhdGFba2V5XSwKLSAgICAgICAgICAgICAgdmFsdWU6
IHZhbHVlCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGFzVmFsdWUodGhpcywga2V5KSkgewotICAgICAg
ICAgIHJldHVybiBnZXRWYWx1ZSh0aGlzLCBrZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUodGhpcywgb3B0aW9ucywga2V5KTsKLSAgICAgICAg
fQotCi0gICAgICAvLyBgZGF0YWAgaXMgbmV2ZXIgc2V0IGRpcmVjdGx5LiBIb3dldmVyLCBpdCBt
YXkgYmUKLSAgICAgIC8vIGludmFsaWRhdGVkIGZyb20gdGhlIHN0YXRlIG1hbmFnZXIncyBzZXRE
YXRhCi0gICAgICAvLyBldmVudC4KLSAgICAgIH0pLm1ldGEobWV0YSk7Ci0gICAgfQotCi0gICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IGF0dHI7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRh
L2xpYi9zeXN0ZW0vbW9kZWwvZXJyb3JzIiwgCi0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihf
X2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0
LCBpc0VtcHR5ID0gRW1iZXIuaXNFbXB0eTsKLSAgICB2YXIgbWFwID0gRW1iZXIuRW51bWVyYWJs
ZVV0aWxzLm1hcDsKLQotICAgIC8qKgotICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0K
LSAgICAvKioKLSAgICAgIEhvbGRzIHZhbGlkYXRpb24gZXJyb3JzIGZvciBhIGdpdmVuIHJlY29y
ZCBvcmdhbml6ZWQgYnkgYXR0cmlidXRlIG5hbWVzLgotCi0gICAgICBFdmVyeSBEUy5Nb2RlbCBo
YXMgYW4gYGVycm9yc2AgcHJvcGVydHkgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZgotICAgICAgYERT
LkVycm9yc2AuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB2YWxpZGF0aW9uIGVycm9yCi0g
ICAgICBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgd2hlbiBhIGByZWNvcmQuc2F2
ZSgpYCByZWplY3RzLgotCi0gICAgICBGb3IgRXhhbXBsZSwgaWYgeW91IGhhZCBhbiBgVXNlcmAg
bW9kZWwgdGhhdCBsb29rZWQgbGlrZSB0aGlzOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICBBcHAuVXNlciA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIHVzZXJuYW1lOiBhdHRyKCdz
dHJpbmcnKSwKLSAgICAgICAgZW1haWw6IGF0dHIoJ3N0cmluZycpCi0gICAgICB9KTsKLSAgICAg
IGBgYAotICAgICAgQW5kIHlvdSBhdHRlbXB0ZWQgdG8gc2F2ZSBhIHJlY29yZCB0aGF0IGRpZCBu
b3QgdmFsaWRhdGUgb24gdGhlIGJhY2tlbmQuCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
IHZhciB1c2VyID0gc3RvcmUuY3JlYXRlUmVjb3JkKCd1c2VyJywgewotICAgICAgICB1c2VybmFt
ZTogJ3RvbXN0ZXInLAotICAgICAgICBlbWFpbDogJ2ludmFsaWRFbWFpbCcKLSAgICAgIH0pOwot
ICAgICAgdXNlci5zYXZlKCk7Ci0gICAgICBgYGAKLQotICAgICAgWW91ciBiYWNrZW5kIGRhdGEg
c3RvcmUgbWlnaHQgcmV0dXJuIGEgcmVzcG9uc2UgdGhhdCBsb29rcyBsaWtlCi0gICAgICB0aGlz
LiBUaGlzIHJlc3BvbnNlIHdpbGwgYmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgZXJyb3Igb2JqZWN0
LgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB7Ci0gICAgICAgICJlcnJvcnMiOiB7Ci0g
ICAgICAgICAgInVzZXJuYW1lIjogWyJUaGlzIHVzZXJuYW1lIGlzIGFscmVhZHkgdGFrZW4hIl0s
Ci0gICAgICAgICAgImVtYWlsIjogWyJEb2Vzbid0IGxvb2sgbGlrZSBhIHZhbGlkIGVtYWlsLiJd
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGBgYAotCi0gICAgICBFcnJvcnMgY2FuIGJlIGRp
c3BsYXllZCB0byB0aGUgdXNlciBieSBhY2Nlc3NpbmcgdGhlaXIgcHJvcGVydHkgbmFtZQotICAg
ICAgb3IgdXNpbmcgdGhlIGBtZXNzYWdlc2AgcHJvcGVydHkgdG8gZ2V0IGFuIGFycmF5IG9mIGFs
bCBlcnJvcnMuCi0KLSAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgIHt7I2VhY2ggZXJyb3JzLm1l
c3NhZ2VzfX0KLSAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3IiPgotICAgICAgICAgIHt7bWVzc2Fn
ZX19Ci0gICAgICAgIDwvZGl2PgotICAgICAge3svZWFjaH19Ci0KLSAgICAgIDxsYWJlbD5Vc2Vy
bmFtZToge3tpbnB1dCB2YWx1ZT11c2VybmFtZX19IDwvbGFiZWw+Ci0gICAgICB7eyNlYWNoIGVy
cm9ycy51c2VybmFtZX19Ci0gICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KLSAgICAgICAgICB7
e21lc3NhZ2V9fQotICAgICAgICA8L2Rpdj4KLSAgICAgIHt7L2VhY2h9fQotCi0gICAgICA8bGFi
ZWw+RW1haWw6IHt7aW5wdXQgdmFsdWU9ZW1haWx9fSA8L2xhYmVsPgotICAgICAge3sjZWFjaCBl
cnJvcnMuZW1haWx9fQotICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvciI+Ci0gICAgICAgICAge3tt
ZXNzYWdlfX0KLSAgICAgICAgPC9kaXY+Ci0gICAgICB7ey9lYWNofX0KLSAgICAgIGBgYAotCi0g
ICAgICBAY2xhc3MgRXJyb3JzCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBAZXh0ZW5kcyBF
bWJlci5PYmplY3QKLSAgICAgIEB1c2VzIEVtYmVyLkVudW1lcmFibGUKLSAgICAgIEB1c2VzIEVt
YmVyLkV2ZW50ZWQKLSAgICAgKi8KLSAgICB2YXIgRXJyb3JzID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZChFbWJlci5FbnVtZXJhYmxlLCBFbWJlci5FdmVudGVkLCB7Ci0gICAgICAvKioKLSAgICAgICAg
UmVnaXN0ZXIgd2l0aCB0YXJnZXQgaGFuZGxlcgotCi0gICAgICAgIEBtZXRob2QgcmVnaXN0ZXJI
YW5kbGVycwotICAgICAgICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0Ci0gICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IGJlY2FtZUludmFsaWQKLSAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gYmVjYW1l
VmFsaWQKLSAgICAgICovCi0gICAgICByZWdpc3RlckhhbmRsZXJzOiBmdW5jdGlvbih0YXJnZXQs
IGJlY2FtZUludmFsaWQsIGJlY2FtZVZhbGlkKSB7Ci0gICAgICAgIHRoaXMub24oJ2JlY2FtZUlu
dmFsaWQnLCB0YXJnZXQsIGJlY2FtZUludmFsaWQpOwotICAgICAgICB0aGlzLm9uKCdiZWNhbWVW
YWxpZCcsIHRhcmdldCwgYmVjYW1lVmFsaWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIEBwcm9wZXJ0eSBlcnJvcnNCeUF0dHJpYnV0ZU5hbWUKLSAgICAgICAgQHR5cGUge0VtYmVy
Lk1hcFdpdGhEZWZhdWx0fQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGVycm9y
c0J5QXR0cmlidXRlTmFtZTogRW1iZXIucmVkdWNlQ29tcHV0ZWQoImNvbnRlbnQiLCB7Ci0gICAg
ICAgIGluaXRpYWxWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmV0dXJuIEVtYmVyLk1h
cFdpdGhEZWZhdWx0LmNyZWF0ZSh7Ci0gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuQSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24oZXJy
b3JzLCBlcnJvcikgewotICAgICAgICAgIGVycm9ycy5nZXQoZXJyb3IuYXR0cmlidXRlKS5wdXNo
T2JqZWN0KGVycm9yKTsKLQotICAgICAgICAgIHJldHVybiBlcnJvcnM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgcmVtb3ZlZEl0ZW06IGZ1bmN0aW9uKGVycm9ycywgZXJyb3IpIHsKLSAgICAgICAg
ICBlcnJvcnMuZ2V0KGVycm9yLmF0dHJpYnV0ZSkucmVtb3ZlT2JqZWN0KGVycm9yKTsKLQotICAg
ICAgICAgIHJldHVybiBlcnJvcnM7Ci0gICAgICAgIH0KLSAgICAgIH0pLAotCi0gICAgICAvKioK
LSAgICAgICAgUmV0dXJucyBlcnJvcnMgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlCi0KLSAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgdXNlciA9IHN0b3JlLmNyZWF0ZVJlY29yZCgndXNl
cicsIHsKLSAgICAgICAgICB1c2VybmFtZTogJ3RvbXN0ZXInLAotICAgICAgICAgIGVtYWlsOiAn
aW52YWxpZEVtYWlsJwotICAgICAgICB9KTsKLSAgICAgICAgdXNlci5zYXZlKCkuY2F0Y2goZnVu
Y3Rpb24oKXsKLSAgICAgICAgICB1c2VyLmdldCgnZXJyb3JzJykuZXJyb3JzRm9yKCdlbWFpbCcp
OyAvLyBbIkRvZXNuJ3QgbG9vayBsaWtlIGEgdmFsaWQgZW1haWwuIl0KLSAgICAgICAgfSk7Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZXJyb3JzRm9yCi0gICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBhdHRyaWJ1dGUKLSAgICAgICAgQHJldHVybiB7QXJyYXl9Ci0gICAgICAqLwotICAg
ICAgZXJyb3JzRm9yOiBmdW5jdGlvbihhdHRyaWJ1dGUpIHsKLSAgICAgICAgcmV0dXJuIGdldCh0
aGlzLCAnZXJyb3JzQnlBdHRyaWJ1dGVOYW1lJykuZ2V0KGF0dHJpYnV0ZSk7Ci0gICAgICB9LAot
Ci0gICAgICAvKioKLSAgICAgICAgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIGVycm9y
IG1lc3NhZ2VzIGZvciB0aGlzCi0gICAgICAgIHJlY29yZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRp
c3BsYXlpbmcgYWxsIGVycm9ycyB0byB0aGUgdXNlci4KLQotICAgICAgICBgYGBoYW5kbGViYXJz
Ci0gICAgICAgIHt7I2VhY2ggZXJyb3JzLm1lc3NhZ2VzfX0KLSAgICAgICAgICA8ZGl2IGNsYXNz
PSJlcnJvciI+Ci0gICAgICAgICAgICB7e21lc3NhZ2V9fQotICAgICAgICAgIDwvZGl2PgotICAg
ICAgICB7ey9lYWNofX0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IG1lc3NhZ2Vz
Ci0gICAgICAgIEB0eXBlIHtBcnJheX0KLSAgICAgICovCi0gICAgICBtZXNzYWdlczogRW1iZXIu
Y29tcHV0ZWQubWFwQnkoJ2NvbnRlbnQnLCAnbWVzc2FnZScpLAotCi0gICAgICAvKioKLSAgICAg
ICAgQHByb3BlcnR5IGNvbnRlbnQKLSAgICAgICAgQHR5cGUge0FycmF5fQotICAgICAgICBAcHJp
dmF0ZQotICAgICAgKi8KLSAgICAgIGNvbnRlbnQ6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXR1cm4gRW1iZXIuQSgpOwotICAgICAgfSksCi0KLSAgICAgIC8qKgotICAg
ICAgICBAbWV0aG9kIHVua25vd25Qcm9wZXJ0eQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8K
LSAgICAgIHVua25vd25Qcm9wZXJ0eTogZnVuY3Rpb24oYXR0cmlidXRlKSB7Ci0gICAgICAgIHZh
ciBlcnJvcnMgPSB0aGlzLmVycm9yc0ZvcihhdHRyaWJ1dGUpOwotICAgICAgICBpZiAoaXNFbXB0
eShlcnJvcnMpKSB7IHJldHVybiBudWxsOyB9Ci0gICAgICAgIHJldHVybiBlcnJvcnM7Ci0gICAg
ICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBuZXh0T2JqZWN0Ci0gICAgICAgIEBw
cml2YXRlCi0gICAgICAqLwotICAgICAgbmV4dE9iamVjdDogZnVuY3Rpb24oaW5kZXgsIHByZXZp
b3VzT2JqZWN0LCBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBnZXQodGhpcywgJ2NvbnRlbnQn
KS5vYmplY3RBdChpbmRleCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVG90YWwg
bnVtYmVyIG9mIGVycm9ycy4KLQotICAgICAgICBAcHJvcGVydHkgbGVuZ3RoCi0gICAgICAgIEB0
eXBlIHtOdW1iZXJ9Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8KLSAgICAgIGxlbmd0aDog
RW1iZXIuY29tcHV0ZWQub25lV2F5KCdjb250ZW50Lmxlbmd0aCcpLnJlYWRPbmx5KCksCi0KLSAg
ICAgIC8qKgotICAgICAgICBAcHJvcGVydHkgaXNFbXB0eQotICAgICAgICBAdHlwZSB7Qm9vbGVh
bn0KLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgaXNFbXB0eTogRW1iZXIuY29t
cHV0ZWQubm90KCdsZW5ndGgnKS5yZWFkT25seSgpLAotCi0gICAgICAvKioKLSAgICAgICAgQWRk
cyBlcnJvciBtZXNzYWdlcyB0byBhIGdpdmVuIGF0dHJpYnV0ZSBhbmQgc2VuZHMKLSAgICAgICAg
YGJlY2FtZUludmFsaWRgIGV2ZW50IHRvIHRoZSByZWNvcmQuCi0KLSAgICAgICAgRXhhbXBsZToK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIGlmICghdXNlci5nZXQoJ3VzZXJuYW1l
JykgewotICAgICAgICAgIHVzZXIuZ2V0KCdlcnJvcnMnKS5hZGQoJ3VzZXJuYW1lJywgJ1RoaXMg
ZmllbGQgaXMgcmVxdWlyZWQnKTsKLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBA
bWV0aG9kIGFkZAotICAgICAgICBAcGFyYW0ge1N0cmluZ30gYXR0cmlidXRlCi0gICAgICAgIEBw
YXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlcwotICAgICAgKi8KLSAgICAgIGFkZDogZnVuY3Rp
b24oYXR0cmlidXRlLCBtZXNzYWdlcykgewotICAgICAgICB2YXIgd2FzRW1wdHkgPSBnZXQodGhp
cywgJ2lzRW1wdHknKTsKLQotICAgICAgICBtZXNzYWdlcyA9IHRoaXMuX2ZpbmRPckNyZWF0ZU1l
c3NhZ2VzKGF0dHJpYnV0ZSwgbWVzc2FnZXMpOwotICAgICAgICBnZXQodGhpcywgJ2NvbnRlbnQn
KS5hZGRPYmplY3RzKG1lc3NhZ2VzKTsKLQotICAgICAgICB0aGlzLm5vdGlmeVByb3BlcnR5Q2hh
bmdlKGF0dHJpYnV0ZSk7Ci0gICAgICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2Uo
KTsKLQotICAgICAgICBpZiAod2FzRW1wdHkgJiYgIWdldCh0aGlzLCAnaXNFbXB0eScpKSB7Ci0g
ICAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWNhbWVJbnZhbGlkJyk7Ci0gICAgICAgIH0KLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIF9maW5kT3JDcmVhdGVNZXNzYWdlcwot
ICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIF9maW5kT3JDcmVhdGVNZXNzYWdlczog
ZnVuY3Rpb24oYXR0cmlidXRlLCBtZXNzYWdlcykgewotICAgICAgICB2YXIgZXJyb3JzID0gdGhp
cy5lcnJvcnNGb3IoYXR0cmlidXRlKTsKLQotICAgICAgICByZXR1cm4gbWFwKEVtYmVyLm1ha2VB
cnJheShtZXNzYWdlcyksIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgICByZXR1cm4gZXJy
b3JzLmZpbmRCeSgnbWVzc2FnZScsIG1lc3NhZ2UpIHx8IHsKLSAgICAgICAgICAgIGF0dHJpYnV0
ZTogYXR0cmlidXRlLAotICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZQotICAgICAgICAgIH07
Ci0gICAgICAgIH0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJlbW92ZXMgYWxs
IGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGdpdmVuIGF0dHJpYnV0ZSBhbmQgc2VuZHMKLSAgICAg
ICAgYGJlY2FtZVZhbGlkYCBldmVudCB0byB0aGUgcmVjb3JkIGlmIHRoZXJlIG5vIG1vcmUgZXJy
b3JzIGxlZnQuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgIEFwcC5Vc2VyID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBlbWFpbDogRFMu
YXR0cignc3RyaW5nJyksCi0gICAgICAgICAgdHdvRmFjdG9yQXV0aDogRFMuYXR0cignYm9vbGVh
bicpLAotICAgICAgICAgIHBob25lOiBEUy5hdHRyKCdzdHJpbmcnKQotICAgICAgICB9KTsKLQot
ICAgICAgICBBcHAuVXNlckVkaXRSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAg
ICAgYWN0aW9uczogewotICAgICAgICAgICAgc2F2ZTogZnVuY3Rpb24odXNlcikgewotICAgICAg
ICAgICAgICAgaWYgKCF1c2VyLmdldCgndHdvRmFjdG9yQXV0aCcpKSB7Ci0gICAgICAgICAgICAg
ICAgIHVzZXIuZ2V0KCdlcnJvcnMnKS5yZW1vdmUoJ3Bob25lJyk7Ci0gICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICB1c2VyLnNhdmUoKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCByZW1vdmUKLSAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGF0dHJpYnV0ZQotICAgICAgKi8KLSAgICAgIHJlbW92ZTog
ZnVuY3Rpb24oYXR0cmlidXRlKSB7Ci0gICAgICAgIGlmIChnZXQodGhpcywgJ2lzRW1wdHknKSkg
eyByZXR1cm47IH0KLQotICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcp
LnJlamVjdEJ5KCdhdHRyaWJ1dGUnLCBhdHRyaWJ1dGUpOwotICAgICAgICBnZXQodGhpcywgJ2Nv
bnRlbnQnKS5zZXRPYmplY3RzKGNvbnRlbnQpOwotCi0gICAgICAgIHRoaXMubm90aWZ5UHJvcGVy
dHlDaGFuZ2UoYXR0cmlidXRlKTsKLSAgICAgICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudERpZENo
YW5nZSgpOwotCi0gICAgICAgIGlmIChnZXQodGhpcywgJ2lzRW1wdHknKSkgewotICAgICAgICAg
IHRoaXMudHJpZ2dlcignYmVjYW1lVmFsaWQnKTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAg
ICAgLyoqCi0gICAgICAgIFJlbW92ZXMgYWxsIGVycm9yIG1lc3NhZ2VzIGFuZCBzZW5kcyBgYmVj
YW1lVmFsaWRgIGV2ZW50Ci0gICAgICAgIHRvIHRoZSByZWNvcmQuCi0KLSAgICAgICAgRXhhbXBs
ZToKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Vc2VyRWRpdFJvdXRlID0g
RW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICBy
ZXRyeVNhdmU6IGZ1bmN0aW9uKHVzZXIpIHsKLSAgICAgICAgICAgICAgIHVzZXIuZ2V0KCdlcnJv
cnMnKS5jbGVhcigpOwotICAgICAgICAgICAgICAgdXNlci5zYXZlKCk7Ci0gICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRo
b2QgY2xlYXIKLSAgICAgICovCi0gICAgICBjbGVhcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlm
IChnZXQodGhpcywgJ2lzRW1wdHknKSkgeyByZXR1cm47IH0KLQotICAgICAgICBnZXQodGhpcywg
J2NvbnRlbnQnKS5jbGVhcigpOwotICAgICAgICB0aGlzLmVudW1lcmFibGVDb250ZW50RGlkQ2hh
bmdlKCk7Ci0KLSAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWNhbWVWYWxpZCcpOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIENoZWNrcyBpZiB0aGVyZSBpcyBlcnJvciBtZXNzYWdlcyBm
b3IgdGhlIGdpdmVuIGF0dHJpYnV0ZS4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
IEFwcC5Vc2VyRWRpdFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICBhY3Rp
b25zOiB7Ci0gICAgICAgICAgICBzYXZlOiBmdW5jdGlvbih1c2VyKSB7Ci0gICAgICAgICAgICAg
ICBpZiAodXNlci5nZXQoJ2Vycm9ycycpLmhhcygnZW1haWwnKSkgewotICAgICAgICAgICAgICAg
ICByZXR1cm4gYWxlcnQoJ1BsZWFzZSB1cGRhdGUgeW91ciBlbWFpbCBiZWZvcmUgYXR0ZW1wdGlu
ZyB0byBzYXZlLicpOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgdXNlci5zYXZl
KCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBg
YAotCi0gICAgICAgIEBtZXRob2QgaGFzCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBhdHRyaWJ1
dGUKLSAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGVyZSBzb21lIGVycm9ycyBv
biBnaXZlbiBhdHRyaWJ1dGUKLSAgICAgICovCi0gICAgICBoYXM6IGZ1bmN0aW9uKGF0dHJpYnV0
ZSkgewotICAgICAgICByZXR1cm4gIWlzRW1wdHkodGhpcy5lcnJvcnNGb3IoYXR0cmlidXRlKSk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRXJyb3Jz
OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL21vZGVsL21vZGVsIiwgCi0g
IFsiLi9zdGF0ZXMiLCIuL2Vycm9ycyIsIi4uL3N0b3JlIiwiZXhwb3J0cyJdLAotICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4
cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgUm9vdFN0YXRlID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIEVycm9ycyA9IF9fZGVwZW5kZW5jeTJfX1si
ZGVmYXVsdCJdOwotICAgIHZhciBQcm9taXNlT2JqZWN0ID0gX19kZXBlbmRlbmN5M19fLlByb21p
c2VPYmplY3Q7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0g
ICAgdmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0LAotICAgICAgICBtZXJnZSA9
IEVtYmVyLm1lcmdlLAotICAgICAgICBQcm9taXNlID0gRW1iZXIuUlNWUC5Qcm9taXNlOwotCi0g
ICAgdmFyIEpTT05TZXJpYWxpemVyOwotICAgIHZhciByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUg
PSBFbWJlci5jb21wdXRlZCgnY3VycmVudFN0YXRlJywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewot
ICAgICAgcmV0dXJuIGdldChnZXQodGhpcywgJ2N1cnJlbnRTdGF0ZScpLCBrZXkpOwotICAgIH0p
LnJlYWRPbmx5KCk7Ci0KLSAgICAvKioKLQotICAgICAgVGhlIG1vZGVsIGNsYXNzIHRoYXQgYWxs
IEVtYmVyIERhdGEgcmVjb3JkcyBkZXNjZW5kIGZyb20uCi0KLSAgICAgIEBjbGFzcyBNb2RlbAot
ICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICBA
dXNlcyBFbWJlci5FdmVudGVkCi0gICAgKi8KLSAgICB2YXIgTW9kZWwgPSBFbWJlci5PYmplY3Qu
ZXh0ZW5kKEVtYmVyLkV2ZW50ZWQsIHsKLSAgICAgIF9yZWNvcmRBcnJheXM6IHVuZGVmaW5lZCwK
LSAgICAgIF9yZWxhdGlvbnNoaXBzOiB1bmRlZmluZWQsCi0gICAgICBfbG9hZGluZ1JlY29yZEFy
cmF5czogdW5kZWZpbmVkLAotICAgICAgLyoqCi0gICAgICAgIElmIHRoaXMgcHJvcGVydHkgaXMg
YHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBlbXB0eWAKLSAgICAgICAgc3RhdGUuIEVtcHR5
IGlzIHRoZSBmaXJzdCBzdGF0ZSBhbGwgcmVjb3JkcyBlbnRlciBhZnRlciB0aGV5IGhhdmUKLSAg
ICAgICAgYmVlbiBjcmVhdGVkLiBNb3N0IHJlY29yZHMgY3JlYXRlZCBieSB0aGUgc3RvcmUgd2ls
bCBxdWlja2x5Ci0gICAgICAgIHRyYW5zaXRpb24gdG8gdGhlIGBsb2FkaW5nYCBzdGF0ZSBpZiBk
YXRhIG5lZWRzIHRvIGJlIGZldGNoZWQgZnJvbQotICAgICAgICB0aGUgc2VydmVyIG9yIHRoZSBg
Y3JlYXRlZGAgc3RhdGUgaWYgdGhlIHJlY29yZCBpcyBjcmVhdGVkIG9uIHRoZQotICAgICAgICBj
bGllbnQuIEEgcmVjb3JkIGNhbiBhbHNvIGVudGVyIHRoZSBlbXB0eSBzdGF0ZSBpZiB0aGUgYWRh
cHRlciBpcwotICAgICAgICB1bmFibGUgdG8gbG9jYXRlIHRoZSByZWNvcmQuCi0KLSAgICAgICAg
QHByb3BlcnR5IGlzRW1wdHkKLSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFk
T25seQotICAgICAgKi8KLSAgICAgIGlzRW1wdHk6IHJldHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSwK
LSAgICAgIC8qKgotICAgICAgICBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCB0aGUgcmVjb3Jk
IGlzIGluIHRoZSBgbG9hZGluZ2Agc3RhdGUuIEEKLSAgICAgICAgcmVjb3JkIGVudGVycyB0aGlz
IHN0YXRlIHdoZW4gdGhlIHN0b3JlIGFza3MgdGhlIGFkYXB0ZXIgZm9yIGl0cwotICAgICAgICBk
YXRhLiBJdCByZW1haW5zIGluIHRoaXMgc3RhdGUgdW50aWwgdGhlIGFkYXB0ZXIgcHJvdmlkZXMg
dGhlCi0gICAgICAgIHJlcXVlc3RlZCBkYXRhLgotCi0gICAgICAgIEBwcm9wZXJ0eSBpc0xvYWRp
bmcKLSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8K
LSAgICAgIGlzTG9hZGluZzogcmV0cmlldmVGcm9tQ3VycmVudFN0YXRlLAotICAgICAgLyoqCi0g
ICAgICAgIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBs
b2FkZWRgIHN0YXRlLiBBCi0gICAgICAgIHJlY29yZCBlbnRlcnMgdGhpcyBzdGF0ZSB3aGVuIGl0
cyBkYXRhIGlzIHBvcHVsYXRlZC4gTW9zdCBvZiBhCi0gICAgICAgIHJlY29yZCdzIGxpZmVjeWNs
ZSBpcyBzcGVudCBpbnNpZGUgc3Vic3RhdGVzIG9mIHRoZSBgbG9hZGVkYAotICAgICAgICBzdGF0
ZS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2
YXIgcmVjb3JkID0gc3RvcmUuY3JlYXRlUmVjb3JkKCdtb2RlbCcpOwotICAgICAgICByZWNvcmQu
Z2V0KCdpc0xvYWRlZCcpOyAvLyB0cnVlCi0KLSAgICAgICAgc3RvcmUuZmluZCgnbW9kZWwnLCAx
KS50aGVuKGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAgICAgICAgbW9kZWwuZ2V0KCdpc0xvYWRlZCcp
OyAvLyB0cnVlCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkg
aXNMb2FkZWQKLSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFkT25seQotICAg
ICAgKi8KLSAgICAgIGlzTG9hZGVkOiByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUsCi0gICAgICAv
KioKLSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgdGhlIHJlY29yZCBpcyBpbiB0
aGUgYGRpcnR5YCBzdGF0ZS4gVGhlCi0gICAgICAgIHJlY29yZCBoYXMgbG9jYWwgY2hhbmdlcyB0
aGF0IGhhdmUgbm90IHlldCBiZWVuIHNhdmVkIGJ5IHRoZQotICAgICAgICBhZGFwdGVyLiBUaGlz
IGluY2x1ZGVzIHJlY29yZHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCAoYnV0IG5vdCB5ZXQKLSAg
ICAgICAgc2F2ZWQpIG9yIGRlbGV0ZWQuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgdmFyIHJlY29yZCA9IHN0b3JlLmNyZWF0ZVJlY29yZCgnbW9k
ZWwnKTsKLSAgICAgICAgcmVjb3JkLmdldCgnaXNEaXJ0eScpOyAvLyB0cnVlCi0KLSAgICAgICAg
c3RvcmUuZmluZCgnbW9kZWwnLCAxKS50aGVuKGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAgICAgICAg
bW9kZWwuZ2V0KCdpc0RpcnR5Jyk7IC8vIGZhbHNlCi0gICAgICAgICAgbW9kZWwuc2V0KCdmb28n
LCAnc29tZSB2YWx1ZScpOwotICAgICAgICAgIG1vZGVsLmdldCgnaXNEaXJ0eScpOyAvLyB0cnVl
Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgaXNEaXJ0eQot
ICAgICAgICBAdHlwZSB7Qm9vbGVhbn0KLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAg
ICAgaXNEaXJ0eTogcmV0cmlldmVGcm9tQ3VycmVudFN0YXRlLAotICAgICAgLyoqCi0gICAgICAg
IElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBzYXZpbmdg
IHN0YXRlLiBBCi0gICAgICAgIHJlY29yZCBlbnRlcnMgdGhlIHNhdmluZyBzdGF0ZSB3aGVuIGBz
YXZlYCBpcyBjYWxsZWQsIGJ1dCB0aGUKLSAgICAgICAgYWRhcHRlciBoYXMgbm90IHlldCBhY2tu
b3dsZWRnZWQgdGhhdCB0aGUgY2hhbmdlcyBoYXZlIGJlZW4KLSAgICAgICAgcGVyc2lzdGVkIHRv
IHRoZSBiYWNrZW5kLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgIHZhciByZWNvcmQgPSBzdG9yZS5jcmVhdGVSZWNvcmQoJ21vZGVsJyk7Ci0gICAg
ICAgIHJlY29yZC5nZXQoJ2lzU2F2aW5nJyk7IC8vIGZhbHNlCi0gICAgICAgIHZhciBwcm9taXNl
ID0gcmVjb3JkLnNhdmUoKTsKLSAgICAgICAgcmVjb3JkLmdldCgnaXNTYXZpbmcnKTsgLy8gdHJ1
ZQotICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmVjb3JkLmdl
dCgnaXNTYXZpbmcnKTsgLy8gZmFsc2UKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAg
ICAgIEBwcm9wZXJ0eSBpc1NhdmluZwotICAgICAgICBAdHlwZSB7Qm9vbGVhbn0KLSAgICAgICAg
QHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgaXNTYXZpbmc6IHJldHJpZXZlRnJvbUN1cnJlbnRT
dGF0ZSwKLSAgICAgIC8qKgotICAgICAgICBJZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCB0aGUg
cmVjb3JkIGlzIGluIHRoZSBgZGVsZXRlZGAgc3RhdGUKLSAgICAgICAgYW5kIGhhcyBiZWVuIG1h
cmtlZCBmb3IgZGVsZXRpb24uIFdoZW4gYGlzRGVsZXRlZGAgaXMgdHJ1ZSBhbmQKLSAgICAgICAg
YGlzRGlydHlgIGlzIHRydWUsIHRoZSByZWNvcmQgaXMgZGVsZXRlZCBsb2NhbGx5IGJ1dCB0aGUg
ZGVsZXRpb24KLSAgICAgICAgd2FzIG5vdCB5ZXQgcGVyc2lzdGVkLiBXaGVuIGBpc1NhdmluZ2Ag
aXMgdHJ1ZSwgdGhlIGNoYW5nZSBpcwotICAgICAgICBpbi1mbGlnaHQuIFdoZW4gYm90aCBgaXNE
aXJ0eWAgYW5kIGBpc1NhdmluZ2AgYXJlIGZhbHNlLCB0aGUKLSAgICAgICAgY2hhbmdlIGhhcyBw
ZXJzaXN0ZWQuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgdmFyIHJlY29yZCA9IHN0b3JlLmNyZWF0ZVJlY29yZCgnbW9kZWwnKTsKLSAgICAgICAg
cmVjb3JkLmdldCgnaXNEZWxldGVkJyk7ICAgIC8vIGZhbHNlCi0gICAgICAgIHJlY29yZC5kZWxl
dGVSZWNvcmQoKTsKLQotICAgICAgICAvLyBMb2NhbGx5IGRlbGV0ZWQKLSAgICAgICAgcmVjb3Jk
LmdldCgnaXNEZWxldGVkJyk7ICAgIC8vIHRydWUKLSAgICAgICAgcmVjb3JkLmdldCgnaXNEaXJ0
eScpOyAgICAgIC8vIHRydWUKLSAgICAgICAgcmVjb3JkLmdldCgnaXNTYXZpbmcnKTsgICAgIC8v
IGZhbHNlCi0KLSAgICAgICAgLy8gUGVyc2lzdGluZyB0aGUgZGVsZXRpb24KLSAgICAgICAgdmFy
IHByb21pc2UgPSByZWNvcmQuc2F2ZSgpOwotICAgICAgICByZWNvcmQuZ2V0KCdpc0RlbGV0ZWQn
KTsgICAgLy8gdHJ1ZQotICAgICAgICByZWNvcmQuZ2V0KCdpc1NhdmluZycpOyAgICAgLy8gdHJ1
ZQotCi0gICAgICAgIC8vIERlbGV0aW9uIFBlcnNpc3RlZAotICAgICAgICBwcm9taXNlLnRoZW4o
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmVjb3JkLmdldCgnaXNEZWxldGVkJyk7ICAvLyB0cnVl
Ci0gICAgICAgICAgcmVjb3JkLmdldCgnaXNTYXZpbmcnKTsgICAvLyBmYWxzZQotICAgICAgICAg
IHJlY29yZC5nZXQoJ2lzRGlydHknKTsgICAgLy8gZmFsc2UKLSAgICAgICAgfSk7Ci0gICAgICAg
IGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBpc0RlbGV0ZWQKLSAgICAgICAgQHR5cGUge0Jvb2xl
YW59Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8KLSAgICAgIGlzRGVsZXRlZDogcmV0cmll
dmVGcm9tQ3VycmVudFN0YXRlLAotICAgICAgLyoqCi0gICAgICAgIElmIHRoaXMgcHJvcGVydHkg
aXMgYHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBuZXdgIHN0YXRlLiBBCi0gICAgICAgIHJl
Y29yZCB3aWxsIGJlIGluIHRoZSBgbmV3YCBzdGF0ZSB3aGVuIGl0IGhhcyBiZWVuIGNyZWF0ZWQg
b24gdGhlCi0gICAgICAgIGNsaWVudCBhbmQgdGhlIGFkYXB0ZXIgaGFzIG5vdCB5ZXQgcmVwb3J0
IHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWxseQotICAgICAgICBzYXZlZC4KLQotICAgICAgICBFeGFt
cGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcmVjb3JkID0gc3RvcmUu
Y3JlYXRlUmVjb3JkKCdtb2RlbCcpOwotICAgICAgICByZWNvcmQuZ2V0KCdpc05ldycpOyAvLyB0
cnVlCi0KLSAgICAgICAgcmVjb3JkLnNhdmUoKS50aGVuKGZ1bmN0aW9uKG1vZGVsKSB7Ci0gICAg
ICAgICAgbW9kZWwuZ2V0KCdpc05ldycpOyAvLyBmYWxzZQotICAgICAgICB9KTsKLSAgICAgICAg
YGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGlzTmV3Ci0gICAgICAgIEB0eXBlIHtCb29sZWFufQot
ICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICBpc05ldzogcmV0cmlldmVGcm9tQ3Vy
cmVudFN0YXRlLAotICAgICAgLyoqCi0gICAgICAgIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVg
IHRoZSByZWNvcmQgaXMgaW4gdGhlIGB2YWxpZGAgc3RhdGUuCi0KLSAgICAgICAgQSByZWNvcmQg
d2lsbCBiZSBpbiB0aGUgYHZhbGlkYCBzdGF0ZSB3aGVuIHRoZSBhZGFwdGVyIGRpZCBub3QgcmVw
b3J0IGFueQotICAgICAgICBzZXJ2ZXItc2lkZSB2YWxpZGF0aW9uIGZhaWx1cmVzLgotCi0gICAg
ICAgIEBwcm9wZXJ0eSBpc1ZhbGlkCi0gICAgICAgIEB0eXBlIHtCb29sZWFufQotICAgICAgICBA
cmVhZE9ubHkKLSAgICAgICovCi0gICAgICBpc1ZhbGlkOiByZXRyaWV2ZUZyb21DdXJyZW50U3Rh
dGUsCi0gICAgICAvKioKLSAgICAgICAgSWYgdGhlIHJlY29yZCBpcyBpbiB0aGUgZGlydHkgc3Rh
dGUgdGhpcyBwcm9wZXJ0eSB3aWxsIHJlcG9ydCB3aGF0Ci0gICAgICAgIGtpbmQgb2YgY2hhbmdl
IGhhcyBjYXVzZWQgaXQgdG8gbW92ZSBpbnRvIHRoZSBkaXJ0eQotICAgICAgICBzdGF0ZS4gUG9z
c2libGUgdmFsdWVzIGFyZToKLQotICAgICAgICAtIGBjcmVhdGVkYCBUaGUgcmVjb3JkIGhhcyBi
ZWVuIGNyZWF0ZWQgYnkgdGhlIGNsaWVudCBhbmQgbm90IHlldCBzYXZlZCB0byB0aGUgYWRhcHRl
ci4KLSAgICAgICAgLSBgdXBkYXRlZGAgVGhlIHJlY29yZCBoYXMgYmVlbiB1cGRhdGVkIGJ5IHRo
ZSBjbGllbnQgYW5kIG5vdCB5ZXQgc2F2ZWQgdG8gdGhlIGFkYXB0ZXIuCi0gICAgICAgIC0gYGRl
bGV0ZWRgIFRoZSByZWNvcmQgaGFzIGJlZW4gZGVsZXRlZCBieSB0aGUgY2xpZW50IGFuZCBub3Qg
eWV0IHNhdmVkIHRvIHRoZSBhZGFwdGVyLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciByZWNvcmQgPSBzdG9yZS5jcmVhdGVSZWNvcmQoJ21v
ZGVsJyk7Ci0gICAgICAgIHJlY29yZC5nZXQoJ2RpcnR5VHlwZScpOyAvLyAnY3JlYXRlZCcKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGRpcnR5VHlwZQotICAgICAgICBAdHlwZSB7
U3RyaW5nfQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICBkaXJ0eVR5cGU6IHJl
dHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSwKLQotICAgICAgLyoqCi0gICAgICAgIElmIGB0cnVlYCB0
aGUgYWRhcHRlciByZXBvcnRlZCB0aGF0IGl0IHdhcyB1bmFibGUgdG8gc2F2ZSBsb2NhbAotICAg
ICAgICBjaGFuZ2VzIHRvIHRoZSBiYWNrZW5kIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYSBz
ZXJ2ZXItc2lkZQotICAgICAgICB2YWxpZGF0aW9uIGVycm9yLgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lzRXJyb3InKTsg
Ly8gZmFsc2UKLSAgICAgICAgcmVjb3JkLnNldCgnZm9vJywgJ3ZhbGlkIHZhbHVlJyk7Ci0gICAg
ICAgIHJlY29yZC5zYXZlKCkudGhlbihudWxsLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICByZWNv
cmQuZ2V0KCdpc0Vycm9yJyk7IC8vIHRydWUKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0g
ICAgICAgIEBwcm9wZXJ0eSBpc0Vycm9yCi0gICAgICAgIEB0eXBlIHtCb29sZWFufQotICAgICAg
ICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICBpc0Vycm9yOiBmYWxzZSwKLSAgICAgIC8qKgot
ICAgICAgICBJZiBgdHJ1ZWAgdGhlIHN0b3JlIGlzIGF0dGVtcHRpbmcgdG8gcmVsb2FkIHRoZSBy
ZWNvcmQgZm9ybSB0aGUgYWRhcHRlci4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICByZWNvcmQuZ2V0KCdpc1JlbG9hZGluZycpOyAvLyBmYWxzZQot
ICAgICAgICByZWNvcmQucmVsb2FkKCk7Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lzUmVsb2FkaW5n
Jyk7IC8vIHRydWUKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGlzUmVsb2FkaW5n
Ci0gICAgICAgIEB0eXBlIHtCb29sZWFufQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0g
ICAgICBpc1JlbG9hZGluZzogZmFsc2UsCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgYGNsaWVu
dElkYCBwcm9wZXJ0eSBpcyBhIHRyYW5zaWVudCBudW1lcmljYWwgaWRlbnRpZmllcgotICAgICAg
ICBnZW5lcmF0ZWQgYXQgcnVudGltZSBieSB0aGUgZGF0YSBzdG9yZS4gSXQgaXMgaW1wb3J0YW50
Ci0gICAgICAgIHByaW1hcmlseSBiZWNhdXNlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0cyBtYXkgbm90
IHlldCBoYXZlIGFuCi0gICAgICAgIGV4dGVybmFsbHkgZ2VuZXJhdGVkIGlkLgotCi0gICAgICAg
IEBwcm9wZXJ0eSBjbGllbnRJZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAdHlwZSB7TnVt
YmVyfFN0cmluZ30KLSAgICAgICovCi0gICAgICBjbGllbnRJZDogbnVsbCwKLSAgICAgIC8qKgot
ICAgICAgICBBbGwgZW1iZXIgbW9kZWxzIGhhdmUgYW4gaWQgcHJvcGVydHkuIFRoaXMgaXMgYW4g
aWRlbnRpZmllcgotICAgICAgICBtYW5hZ2VkIGJ5IGFuIGV4dGVybmFsIHNvdXJjZS4gVGhlc2Ug
YXJlIGFsd2F5cyBjb2VyY2VkIHRvIGJlCi0gICAgICAgIHN0cmluZ3MgYmVmb3JlIGJlaW5nIHVz
ZWQgaW50ZXJuYWxseS4gTm90ZSB3aGVuIGRlY2xhcmluZyB0aGUKLSAgICAgICAgYXR0cmlidXRl
cyBmb3IgYSBtb2RlbCBpdCBpcyBhbiBlcnJvciB0byBkZWNsYXJlIGFuIGlkCi0gICAgICAgIGF0
dHJpYnV0ZS4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciByZWNvcmQgPSBz
dG9yZS5jcmVhdGVSZWNvcmQoJ21vZGVsJyk7Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lkJyk7IC8v
IG51bGwKLQotICAgICAgICBzdG9yZS5maW5kKCdtb2RlbCcsIDEpLnRoZW4oZnVuY3Rpb24obW9k
ZWwpIHsKLSAgICAgICAgICBtb2RlbC5nZXQoJ2lkJyk7IC8vICcxJwotICAgICAgICB9KTsKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGlkCi0gICAgICAgIEB0eXBlIHtTdHJpbmd9
Ci0gICAgICAqLwotICAgICAgaWQ6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBAcHJvcGVy
dHkgY3VycmVudFN0YXRlCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEB0eXBlIHtPYmplY3R9
Ci0gICAgICAqLwotICAgICAgY3VycmVudFN0YXRlOiBSb290U3RhdGUuZW1wdHksCi0KLSAgICAg
IC8qKgotICAgICAgICBXaGVuIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBpbnZhbGlkYCBzdGF0ZSB0
aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4KLSAgICAgICAgYW55IGVycm9ycyByZXR1cm5lZCBieSB0
aGUgYWRhcHRlci4gV2hlbiBwcmVzZW50IHRoZSBlcnJvcnMgaGFzaAotICAgICAgICB0eXBpY2Fs
bHkgY29udGFpbnMga2V5cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnZhbGlkIHByb3BlcnR5IG5h
bWVzCi0gICAgICAgIGFuZCB2YWx1ZXMgd2hpY2ggYXJlIGFuIGFycmF5IG9mIGVycm9yIG1lc3Nh
Z2VzLgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgcmVjb3JkLmdldCgnZXJyb3Jz
Lmxlbmd0aCcpOyAvLyAwCi0gICAgICAgIHJlY29yZC5zZXQoJ2ZvbycsICdpbnZhbGlkIHZhbHVl
Jyk7Ci0gICAgICAgIHJlY29yZC5zYXZlKCkudGhlbihudWxsLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICByZWNvcmQuZ2V0KCdlcnJvcnMnKS5nZXQoJ2ZvbycpOyAvLyBbJ2ZvbyBzaG91bGQgYmUg
YSBudW1iZXIuJ10KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0
eSBlcnJvcnMKLSAgICAgICAgQHR5cGUge0RTLkVycm9yc30KLSAgICAgICovCi0gICAgICBlcnJv
cnM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZXJyb3JzID0gRXJy
b3JzLmNyZWF0ZSgpOwotCi0gICAgICAgIGVycm9ycy5yZWdpc3RlckhhbmRsZXJzKHRoaXMsIGZ1
bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMuc2VuZCgnYmVjYW1lSW52YWxpZCcpOwotICAgICAg
ICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICB0aGlzLnNlbmQoJ2JlY2FtZVZhbGlkJyk7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBlcnJvcnM7Ci0gICAgICB9KS5yZWFkT25seSgp
LAotCi0gICAgICAvKioKLSAgICAgICAgQ3JlYXRlIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0
aGUgcmVjb3JkLCB1c2luZyB0aGUgc2VyaWFsaXphdGlvbgotICAgICAgICBzdHJhdGVneSBvZiB0
aGUgc3RvcmUncyBhZGFwdGVyLgotCi0gICAgICAgYHNlcmlhbGl6ZWAgdGFrZXMgYW4gb3B0aW9u
YWwgaGFzaCBhcyBhIHBhcmFtZXRlciwgY3VycmVudGx5Ci0gICAgICAgIHN1cHBvcnRlZCBvcHRp
b25zIGFyZToKLQotICAgICAgIC0gYGluY2x1ZGVJZGA6IGB0cnVlYCBpZiB0aGUgcmVjb3JkJ3Mg
SUQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQotICAgICAgICAgIEpTT04gcmVwcmVzZW50YXRp
b24uCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9
IG9wdGlvbnMKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3Qgd2hvc2UgdmFsdWVz
IGFyZSBwcmltaXRpdmUgSlNPTiB2YWx1ZXMgb25seQotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6
ZTogZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgICB2YXIgc3RvcmUgPSBnZXQodGhpcywgJ3N0
b3JlJyk7Ci0gICAgICAgIHJldHVybiBzdG9yZS5zZXJpYWxpemUodGhpcywgb3B0aW9ucyk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVXNlIFtEUy5KU09OU2VyaWFsaXplcl0oRFMu
SlNPTlNlcmlhbGl6ZXIuaHRtbCkgdG8KLSAgICAgICAgZ2V0IHRoZSBKU09OIHJlcHJlc2VudGF0
aW9uIG9mIGEgcmVjb3JkLgotCi0gICAgICAgIGB0b0pTT05gIHRha2VzIGFuIG9wdGlvbmFsIGhh
c2ggYXMgYSBwYXJhbWV0ZXIsIGN1cnJlbnRseQotICAgICAgICBzdXBwb3J0ZWQgb3B0aW9ucyBh
cmU6Ci0KLSAgICAgICAgLSBgaW5jbHVkZUlkYDogYHRydWVgIGlmIHRoZSByZWNvcmQncyBJRCBz
aG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlCi0gICAgICAgICAgSlNPTiByZXByZXNlbnRhdGlvbi4K
LQotICAgICAgICBAbWV0aG9kIHRvSlNPTgotICAgICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9u
cwotICAgICAgICBAcmV0dXJuIHtPYmplY3R9IEEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUg
b2JqZWN0LgotICAgICAgKi8KLSAgICAgIHRvSlNPTjogZnVuY3Rpb24ob3B0aW9ucykgewotICAg
ICAgICBpZiAoIUpTT05TZXJpYWxpemVyKSB7IEpTT05TZXJpYWxpemVyID0gcmVxdWlyZU1vZHVs
ZSgiZW1iZXItZGF0YS9saWIvc2VyaWFsaXplcnMvanNvbl9zZXJpYWxpemVyIilbImRlZmF1bHQi
XTsgfQotICAgICAgICAvLyBjb250YWluZXIgaXMgZm9yIGxhenkgdHJhbnNmb3JtIGxvb2t1cHMK
LSAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBKU09OU2VyaWFsaXplci5jcmVhdGUoeyBjb250YWlu
ZXI6IHRoaXMuY29udGFpbmVyIH0pOwotICAgICAgICByZXR1cm4gc2VyaWFsaXplci5zZXJpYWxp
emUodGhpcywgb3B0aW9ucyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgRmlyZWQg
d2hlbiB0aGUgcmVjb3JkIGlzIGxvYWRlZCBmcm9tIHRoZSBzZXJ2ZXIuCi0KLSAgICAgICAgQGV2
ZW50IGRpZExvYWQKLSAgICAgICovCi0gICAgICBkaWRMb2FkOiBFbWJlci5LLAotCi0gICAgICAv
KioKLSAgICAgICAgRmlyZWQgd2hlbiB0aGUgcmVjb3JkIGlzIHVwZGF0ZWQuCi0KLSAgICAgICAg
QGV2ZW50IGRpZFVwZGF0ZQotICAgICAgKi8KLSAgICAgIGRpZFVwZGF0ZTogRW1iZXIuSywKLQot
ICAgICAgLyoqCi0gICAgICAgIEZpcmVkIHdoZW4gdGhlIHJlY29yZCBpcyBjcmVhdGVkLgotCi0g
ICAgICAgIEBldmVudCBkaWRDcmVhdGUKLSAgICAgICovCi0gICAgICBkaWRDcmVhdGU6IEVtYmVy
LkssCi0KLSAgICAgIC8qKgotICAgICAgICBGaXJlZCB3aGVuIHRoZSByZWNvcmQgaXMgZGVsZXRl
ZC4KLQotICAgICAgICBAZXZlbnQgZGlkRGVsZXRlCi0gICAgICAqLwotICAgICAgZGlkRGVsZXRl
OiBFbWJlci5LLAotCi0gICAgICAvKioKLSAgICAgICAgRmlyZWQgd2hlbiB0aGUgcmVjb3JkIGJl
Y29tZXMgaW52YWxpZC4KLQotICAgICAgICBAZXZlbnQgYmVjYW1lSW52YWxpZAotICAgICAgKi8K
LSAgICAgIGJlY2FtZUludmFsaWQ6IEVtYmVyLkssCi0KLSAgICAgIC8qKgotICAgICAgICBGaXJl
ZCB3aGVuIHRoZSByZWNvcmQgZW50ZXJzIHRoZSBlcnJvciBzdGF0ZS4KLQotICAgICAgICBAZXZl
bnQgYmVjYW1lRXJyb3IKLSAgICAgICovCi0gICAgICBiZWNhbWVFcnJvcjogRW1iZXIuSywKLQot
ICAgICAgLyoqCi0gICAgICAgIEBwcm9wZXJ0eSBkYXRhCi0gICAgICAgIEBwcml2YXRlCi0gICAg
ICAgIEB0eXBlIHtPYmplY3R9Ci0gICAgICAqLwotICAgICAgZGF0YTogRW1iZXIuY29tcHV0ZWQo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHt9OwotICAg
ICAgICByZXR1cm4gdGhpcy5fZGF0YTsKLSAgICAgIH0pLnJlYWRPbmx5KCksCi0KLSAgICAgIF9k
YXRhOiBudWxsLAotCi0gICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5fc3Vw
ZXIoKTsKLSAgICAgICAgdGhpcy5fc2V0dXAoKTsKLSAgICAgIH0sCi0KLSAgICAgIF9zZXR1cDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMgPSB7fTsKLSAgICAgICAg
dGhpcy5fZGVmZXJyZWRUcmlnZ2VycyA9IFtdOwotICAgICAgICB0aGlzLl9kYXRhID0ge307Ci0g
ICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTsKLSAgICAgICAgdGhpcy5faW5GbGlnaHRBdHRy
aWJ1dGVzID0ge307Ci0gICAgICAgIHRoaXMuX3JlbGF0aW9uc2hpcHMgPSB7fTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIHNlbmQKLSAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGNvbnRl
eHQKLSAgICAgICovCi0gICAgICBzZW5kOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0KSB7Ci0gICAg
ICAgIHZhciBjdXJyZW50U3RhdGUgPSBnZXQodGhpcywgJ2N1cnJlbnRTdGF0ZScpOwotCi0gICAg
ICAgIGlmICghY3VycmVudFN0YXRlW25hbWVdKSB7Ci0gICAgICAgICAgdGhpcy5fdW5oYW5kbGVk
RXZlbnQoY3VycmVudFN0YXRlLCBuYW1lLCBjb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBjdXJyZW50U3RhdGVbbmFtZV0odGhpcywgY29udGV4dCk7Ci0gICAgICB9LAotCi0g
ICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB0cmFuc2l0aW9uVG8KLSAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUKLSAgICAgICovCi0gICAgICB0cmFuc2l0aW9u
VG86IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgLy8gUE9TU0lCTEUgVE9ETzogUmVtb3ZlIHRo
aXMgY29kZSBhbmQgcmVwbGFjZSB3aXRoCi0gICAgICAgIC8vIGFsd2F5cyBoYXZpbmcgZGlyZWN0
IHJlZmVyZW5jZXMgdG8gc3RhdGUgb2JqZWN0cwotCi0gICAgICAgIHZhciBwaXZvdE5hbWUgPSBu
YW1lLnNwbGl0KCIuIiwgMSksCi0gICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBnZXQodGhpcywg
J2N1cnJlbnRTdGF0ZScpLAotICAgICAgICAgICAgc3RhdGUgPSBjdXJyZW50U3RhdGU7Ci0KLSAg
ICAgICAgZG8gewotICAgICAgICAgIGlmIChzdGF0ZS5leGl0KSB7IHN0YXRlLmV4aXQodGhpcyk7
IH0KLSAgICAgICAgICBzdGF0ZSA9IHN0YXRlLnBhcmVudFN0YXRlOwotICAgICAgICB9IHdoaWxl
ICghc3RhdGUuaGFzT3duUHJvcGVydHkocGl2b3ROYW1lKSk7Ci0KLSAgICAgICAgdmFyIHBhdGgg
PSBuYW1lLnNwbGl0KCIuIik7Ci0KLSAgICAgICAgdmFyIHNldHVwcyA9IFtdLCBlbnRlcnMgPSBb
XSwgaSwgbDsKLQotICAgICAgICBmb3IgKGk9MCwgbD1wYXRoLmxlbmd0aDsgaTxsOyBpKyspIHsK
LSAgICAgICAgICBzdGF0ZSA9IHN0YXRlW3BhdGhbaV1dOwotCi0gICAgICAgICAgaWYgKHN0YXRl
LmVudGVyKSB7IGVudGVycy5wdXNoKHN0YXRlKTsgfQotICAgICAgICAgIGlmIChzdGF0ZS5zZXR1
cCkgeyBzZXR1cHMucHVzaChzdGF0ZSk7IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaT0w
LCBsPWVudGVycy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgICAgZW50ZXJzW2ldLmVudGVy
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0KHRoaXMsICdjdXJyZW50U3RhdGUnLCBz
dGF0ZSk7Ci0KLSAgICAgICAgZm9yIChpPTAsIGw9c2V0dXBzLmxlbmd0aDsgaTxsOyBpKyspIHsK
LSAgICAgICAgICBzZXR1cHNbaV0uc2V0dXAodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLnVwZGF0ZVJlY29yZEFycmF5c0xhdGVyKCk7Ci0gICAgICB9LAotCi0gICAgICBfdW5oYW5k
bGVkRXZlbnQ6IGZ1bmN0aW9uKHN0YXRlLCBuYW1lLCBjb250ZXh0KSB7Ci0gICAgICAgIHZhciBl
cnJvck1lc3NhZ2UgPSAiQXR0ZW1wdGVkIHRvIGhhbmRsZSBldmVudCBgIiArIG5hbWUgKyAiYCAi
OwotICAgICAgICBlcnJvck1lc3NhZ2UgICAgKz0gIm9uICIgKyBTdHJpbmcodGhpcykgKyAiIHdo
aWxlIGluIHN0YXRlICI7Ci0gICAgICAgIGVycm9yTWVzc2FnZSAgICArPSBzdGF0ZS5zdGF0ZU5h
bWUgKyAiLiAiOwotCi0gICAgICAgIGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgICBlcnJvck1lc3NhZ2UgICs9ICJDYWxsZWQgd2l0aCAiICsgRW1iZXIuaW5zcGVjdChjb250
ZXh0KSArICIuIjsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBFbWJlci5FcnJvcihl
cnJvck1lc3NhZ2UpOwotICAgICAgfSwKLQotICAgICAgd2l0aFRyYW5zYWN0aW9uOiBmdW5jdGlv
bihmbikgewotICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSBnZXQodGhpcywgJ3RyYW5zYWN0aW9u
Jyk7Ci0gICAgICAgIGlmICh0cmFuc2FjdGlvbikgeyBmbih0cmFuc2FjdGlvbik7IH0KLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGxvYWRpbmdEYXRhCi0gICAgICAgIEBw
cml2YXRlCi0gICAgICAgIEBwYXJhbSB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAg
IGxvYWRpbmdEYXRhOiBmdW5jdGlvbihwcm9taXNlKSB7Ci0gICAgICAgIHRoaXMuc2VuZCgnbG9h
ZGluZ0RhdGEnLCBwcm9taXNlKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0
aG9kIGxvYWRlZERhdGEKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBsb2FkZWRE
YXRhOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5zZW5kKCdsb2FkZWREYXRhJyk7Ci0gICAg
ICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBub3RGb3VuZAotICAgICAgICBAcHJp
dmF0ZQotICAgICAgKi8KLSAgICAgIG5vdEZvdW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhp
cy5zZW5kKCdub3RGb3VuZCcpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRo
b2QgcHVzaGVkRGF0YQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIHB1c2hlZERh
dGE6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnNlbmQoJ3B1c2hlZERhdGEnKTsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBNYXJrcyB0aGUgcmVjb3JkIGFzIGRlbGV0ZWQgYnV0
IGRvZXMgbm90IHNhdmUgaXQuIFlvdSBtdXN0IGNhbGwKLSAgICAgICAgYHNhdmVgIGFmdGVyd2Fy
ZHMgaWYgeW91IHdhbnQgdG8gcGVyc2lzdCBpdC4gWW91IG1pZ2h0IHVzZSB0aGlzCi0gICAgICAg
IG1ldGhvZCBpZiB5b3Ugd2FudCB0byBhbGxvdyB0aGUgdXNlciB0byBzdGlsbCBgcm9sbGJhY2so
KWAgYQotICAgICAgICBkZWxldGUgYWZ0ZXIgaXQgd2FzIG1hZGUuCi0KLSAgICAgICAgRXhhbXBs
ZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLk1vZGVsRGVsZXRlUm91dGUg
PSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAg
IHNvZnREZWxldGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICB0aGlzLmdldCgnbW9kZWwn
KS5kZWxldGVSZWNvcmQoKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBjb25maXJtOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgdGhpcy5nZXQoJ21vZGVsJykuc2F2ZSgpOwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIHVuZG86IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICB0aGlzLmdldCgnbW9kZWwnKS5yb2xsYmFjaygpOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZGVsZXRlUmVj
b3JkCi0gICAgICAqLwotICAgICAgZGVsZXRlUmVjb3JkOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5zZW5kKCdkZWxldGVSZWNvcmQnKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBTYW1lIGFzIGBkZWxldGVSZWNvcmRgLCBidXQgc2F2ZXMgdGhlIHJlY29yZCBpbW1lZGlhdGVs
eS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBB
cHAuTW9kZWxEZWxldGVSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgYWN0
aW9uczogewotICAgICAgICAgICAgZGVsZXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAgIHRoaXMuZ2V0
KCdtb2RlbCcpLmRlc3Ryb3lSZWNvcmQoKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ21vZGVsLmluZGV4Jyk7Ci0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
ICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZGVzdHJveVJlY29yZAotICAgICAgICBAcmV0dXJu
IHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhlIGFkYXB0
ZXIgcmV0dXJucwotICAgICAgICBzdWNjZXNzZnVsbHkgb3IgcmVqZWN0ZWQgaWYgdGhlIGFkYXB0
ZXIgcmV0dXJucyB3aXRoIGFuIGVycm9yLgotICAgICAgKi8KLSAgICAgIGRlc3Ryb3lSZWNvcmQ6
IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZCgpOwotICAgICAgICByZXR1
cm4gdGhpcy5zYXZlKCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB1
bmxvYWRSZWNvcmQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICB1bmxvYWRSZWNv
cmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgeyByZXR1cm47
IH0KLQotICAgICAgICB0aGlzLnNlbmQoJ3VubG9hZFJlY29yZCcpOwotICAgICAgfSwKLQotICAg
ICAgLyoqCi0gICAgICAgIEBtZXRob2QgY2xlYXJSZWxhdGlvbnNoaXBzCi0gICAgICAgIEBwcml2
YXRlCi0gICAgICAqLwotICAgICAgY2xlYXJSZWxhdGlvbnNoaXBzOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdGhpcy5lYWNoUmVsYXRpb25zaGlwKGZ1bmN0aW9uKG5hbWUsIHJlbGF0aW9uc2hpcCkg
ewotICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2JlbG9uZ3NUbycpIHsKLSAg
ICAgICAgICAgIHNldCh0aGlzLCBuYW1lLCBudWxsKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHJl
bGF0aW9uc2hpcC5raW5kID09PSAnaGFzTWFueScpIHsKLSAgICAgICAgICAgIHZhciBoYXNNYW55
ID0gdGhpcy5fcmVsYXRpb25zaGlwc1tuYW1lXTsKLSAgICAgICAgICAgIGlmIChoYXNNYW55KSB7
IC8vIHJlbGF0aW9uc2hpcHMgYXJlIGNyZWF0ZWQgbGF6aWx5Ci0gICAgICAgICAgICAgIGhhc01h
bnkuZGVzdHJveSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwgdGhp
cyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB1cGRhdGVSZWNvcmRB
cnJheXMKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICB1cGRhdGVSZWNvcmRBcnJh
eXM6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLl91cGRhdGluZ1JlY29yZEFycmF5c0xhdGVy
ID0gZmFsc2U7Ci0gICAgICAgIGdldCh0aGlzLCAnc3RvcmUnKS5kYXRhV2FzVXBkYXRlZCh0aGlz
LmNvbnN0cnVjdG9yLCB0aGlzKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBSZXR1
cm5zIGFuIG9iamVjdCwgd2hvc2Uga2V5cyBhcmUgY2hhbmdlZCBwcm9wZXJ0aWVzLCBhbmQgdmFs
dWUgaXMKLSAgICAgICAgYW4gW29sZFByb3AsIG5ld1Byb3BdIGFycmF5LgotCi0gICAgICAgIEV4
YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5NYXNjb3QgPSBEUy5N
b2RlbC5leHRlbmQoewotICAgICAgICAgIG5hbWU6IGF0dHIoJ3N0cmluZycpCi0gICAgICAgIH0p
OwotCi0gICAgICAgIHZhciBwZXJzb24gPSBzdG9yZS5jcmVhdGVSZWNvcmQoJ3BlcnNvbicpOwot
ICAgICAgICBwZXJzb24uY2hhbmdlZEF0dHJpYnV0ZXMoKTsgLy8ge30KLSAgICAgICAgcGVyc29u
LnNldCgnbmFtZScsICdUb21zdGVyJyk7Ci0gICAgICAgIHBlcnNvbi5jaGFuZ2VkQXR0cmlidXRl
cygpOyAvLyB7bmFtZTogW3VuZGVmaW5lZCwgJ1RvbXN0ZXInXX0KLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgQG1ldGhvZCBjaGFuZ2VkQXR0cmlidXRlcwotICAgICAgICBAcmV0dXJuIHtPYmplY3R9
IGFuIG9iamVjdCwgd2hvc2Uga2V5cyBhcmUgY2hhbmdlZCBwcm9wZXJ0aWVzLAotICAgICAgICAg
IGFuZCB2YWx1ZSBpcyBhbiBbb2xkUHJvcCwgbmV3UHJvcF0gYXJyYXkuCi0gICAgICAqLwotICAg
ICAgY2hhbmdlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgb2xkRGF0YSA9
IGdldCh0aGlzLCAnX2RhdGEnKSwKLSAgICAgICAgICAgIG5ld0RhdGEgPSBnZXQodGhpcywgJ19h
dHRyaWJ1dGVzJyksCi0gICAgICAgICAgICBkaWZmRGF0YSA9IHt9LAotICAgICAgICAgICAgcHJv
cDsKLQotICAgICAgICBmb3IgKHByb3AgaW4gbmV3RGF0YSkgewotICAgICAgICAgIGRpZmZEYXRh
W3Byb3BdID0gW29sZERhdGFbcHJvcF0sIG5ld0RhdGFbcHJvcF1dOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIGRpZmZEYXRhOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBt
ZXRob2QgYWRhcHRlcldpbGxDb21taXQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAg
ICBhZGFwdGVyV2lsbENvbW1pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2VuZCgnd2ls
bENvbW1pdCcpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIElmIHRoZSBhZGFwdGVy
IGRpZCBub3QgcmV0dXJuIGEgaGFzaCBpbiByZXNwb25zZSB0byBhIGNvbW1pdCwKLSAgICAgICAg
bWVyZ2UgdGhlIGNoYW5nZWQgYXR0cmlidXRlcyBhbmQgcmVsYXRpb25zaGlwcyBpbnRvIHRoZSBl
eGlzdGluZwotICAgICAgICBzYXZlZCBkYXRhLgotCi0gICAgICAgIEBtZXRob2QgYWRhcHRlckRp
ZENvbW1pdAotICAgICAgKi8KLSAgICAgIGFkYXB0ZXJEaWRDb21taXQ6IGZ1bmN0aW9uKGRhdGEp
IHsKLSAgICAgICAgc2V0KHRoaXMsICdpc0Vycm9yJywgZmFsc2UpOwotCi0gICAgICAgIGlmIChk
YXRhKSB7Ci0gICAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgRW1iZXIubWl4aW4odGhpcy5fZGF0YSwgdGhpcy5faW5GbGlnaHRBdHRyaWJ1dGVz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2luRmxpZ2h0QXR0cmlidXRlcyA9IHt9Owot
Ci0gICAgICAgIHRoaXMuc2VuZCgnZGlkQ29tbWl0Jyk7Ci0gICAgICAgIHRoaXMudXBkYXRlUmVj
b3JkQXJyYXlzTGF0ZXIoKTsKLQotICAgICAgICBpZiAoIWRhdGEpIHsgcmV0dXJuOyB9Ci0KLSAg
ICAgICAgdGhpcy5zdXNwZW5kUmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2UoJ2RhdGEnKTsKLSAgICAgICAgfSk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBhZGFwdGVyRGlkRGlydHkKLSAg
ICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBhZGFwdGVyRGlkRGlydHk6IGZ1bmN0aW9u
KCkgewotICAgICAgICB0aGlzLnNlbmQoJ2JlY29tZURpcnR5Jyk7Ci0gICAgICAgIHRoaXMudXBk
YXRlUmVjb3JkQXJyYXlzTGF0ZXIoKTsKLSAgICAgIH0sCi0KLSAgICAgIGRhdGFEaWRDaGFuZ2U6
IEVtYmVyLm9ic2VydmVyKGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJlbG9hZEhhc01hbnlz
KCk7Ci0gICAgICB9LCAnZGF0YScpLAotCi0gICAgICByZWxvYWRIYXNNYW55czogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciByZWxhdGlvbnNoaXBzID0gZ2V0KHRoaXMuY29uc3RydWN0b3IsICdy
ZWxhdGlvbnNoaXBzQnlOYW1lJyk7Ci0gICAgICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXlzTGF0
ZXIoKTsKLSAgICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUsIHJlbGF0
aW9uc2hpcCkgewotICAgICAgICAgIGlmICh0aGlzLl9kYXRhLmxpbmtzICYmIHRoaXMuX2RhdGEu
bGlua3NbbmFtZV0pIHsgcmV0dXJuOyB9Ci0gICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5raW5k
ID09PSAnaGFzTWFueScpIHsKLSAgICAgICAgICAgIHRoaXMuaGFzTWFueURpZENoYW5nZShyZWxh
dGlvbnNoaXAua2V5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIHRoaXMpOwotICAgICAgfSwK
LQotICAgICAgaGFzTWFueURpZENoYW5nZTogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIHZhciBo
YXNNYW55ID0gdGhpcy5fcmVsYXRpb25zaGlwc1trZXldOwotCi0gICAgICAgIGlmIChoYXNNYW55
KSB7Ci0gICAgICAgICAgdmFyIHJlY29yZHMgPSB0aGlzLl9kYXRhW2tleV0gfHwgW107Ci0KLSAg
ICAgICAgICBzZXQoaGFzTWFueSwgJ2NvbnRlbnQnLCBFbWJlci5BKHJlY29yZHMpKTsKLSAgICAg
ICAgICBzZXQoaGFzTWFueSwgJ2lzTG9hZGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgaGFzTWFueS50
cmlnZ2VyKCdkaWRMb2FkJyk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAg
ICAgICBAbWV0aG9kIHVwZGF0ZVJlY29yZEFycmF5c0xhdGVyCi0gICAgICAgIEBwcml2YXRlCi0g
ICAgICAqLwotICAgICAgdXBkYXRlUmVjb3JkQXJyYXlzTGF0ZXI6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAvLyBxdWljayBoYWNrIChzb21ldGhpbmcgbGlrZSB0aGlzIGNvdWxkIGJlIHB1c2hlZCBp
bnRvIHJ1bi5vbmNlCi0gICAgICAgIGlmICh0aGlzLl91cGRhdGluZ1JlY29yZEFycmF5c0xhdGVy
KSB7IHJldHVybjsgfQotICAgICAgICB0aGlzLl91cGRhdGluZ1JlY29yZEFycmF5c0xhdGVyID0g
dHJ1ZTsKLQotICAgICAgICBFbWJlci5ydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCB0aGlz
LnVwZGF0ZVJlY29yZEFycmF5cyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1l
dGhvZCBzZXR1cERhdGEKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9
IGRhdGEKLSAgICAgICAgQHBhcmFtIHtCb29sZWFufSBwYXJ0aWFsIHRoZSBkYXRhIHNob3VsZCBi
ZSBtZXJnZWQgaW50bwotICAgICAgICAgIHRoZSBleGlzdGluZyBkYXRhLCBub3QgcmVwbGFjZSBp
dC4KLSAgICAgICovCi0gICAgICBzZXR1cERhdGE6IGZ1bmN0aW9uKGRhdGEsIHBhcnRpYWwpIHsK
LSAgICAgICAgaWYgKHBhcnRpYWwpIHsKLSAgICAgICAgICBFbWJlci5tZXJnZSh0aGlzLl9kYXRh
LCBkYXRhKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciByZWxhdGlvbnNoaXBzID0gdGhpcy5fcmVsYXRpb25z
aGlwczsKLQotICAgICAgICB0aGlzLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24obmFtZSwgcmVs
KSB7Ci0gICAgICAgICAgaWYgKGRhdGEubGlua3MgJiYgZGF0YS5saW5rc1tuYW1lXSkgeyByZXR1
cm47IH0KLSAgICAgICAgICBpZiAocmVsLm9wdGlvbnMuYXN5bmMpIHsgcmVsYXRpb25zaGlwc1tu
YW1lXSA9IG51bGw7IH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKGRhdGEpIHsgdGhpcy5w
dXNoZWREYXRhKCk7IH0KLQotICAgICAgICB0aGlzLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZl
cnMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgnZGF0
YScpOwotICAgICAgICB9KTsKLSAgICAgIH0sCi0KLSAgICAgIG1hdGVyaWFsaXplSWQ6IGZ1bmN0
aW9uKGlkKSB7Ci0gICAgICAgIHNldCh0aGlzLCAnaWQnLCBpZCk7Ci0gICAgICB9LAotCi0gICAg
ICBtYXRlcmlhbGl6ZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAg
RW1iZXIuYXNzZXJ0KCJNdXN0IHBhc3MgYSBoYXNoIG9mIGF0dHJpYnV0ZXMgdG8gbWF0ZXJpYWxp
emVBdHRyaWJ1dGVzIiwgISFhdHRyaWJ1dGVzKTsKLSAgICAgICAgbWVyZ2UodGhpcy5fZGF0YSwg
YXR0cmlidXRlcyk7Ci0gICAgICB9LAotCi0gICAgICBtYXRlcmlhbGl6ZUF0dHJpYnV0ZTogZnVu
Y3Rpb24obmFtZSwgdmFsdWUpIHsKLSAgICAgICAgdGhpcy5fZGF0YVtuYW1lXSA9IHZhbHVlOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgdXBkYXRlSGFzTWFueQotICAg
ICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgICAgICBAcGFy
YW0ge0FycmF5fSByZWNvcmRzCi0gICAgICAqLwotICAgICAgdXBkYXRlSGFzTWFueTogZnVuY3Rp
b24obmFtZSwgcmVjb3JkcykgewotICAgICAgICB0aGlzLl9kYXRhW25hbWVdID0gcmVjb3JkczsK
LSAgICAgICAgdGhpcy5oYXNNYW55RGlkQ2hhbmdlKG5hbWUpOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIEBtZXRob2QgdXBkYXRlQmVsb25nc1RvCi0gICAgICAgIEBwcml2YXRlCi0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJl
Y29yZAotICAgICAgKi8KLSAgICAgIHVwZGF0ZUJlbG9uZ3NUbzogZnVuY3Rpb24obmFtZSwgcmVj
b3JkKSB7Ci0gICAgICAgIHRoaXMuX2RhdGFbbmFtZV0gPSByZWNvcmQ7Ci0gICAgICB9LAotCi0g
ICAgICAvKioKLSAgICAgICAgSWYgdGhlIG1vZGVsIGBpc0RpcnR5YCB0aGlzIGZ1bmN0aW9uIHdp
bGwgZGlzY2FyZCBhbnkgdW5zYXZlZAotICAgICAgICBjaGFuZ2VzCi0KLSAgICAgICAgRXhhbXBs
ZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgcmVjb3JkLmdldCgnbmFtZScpOyAv
LyAnVW50aXRsZWQgRG9jdW1lbnQnCi0gICAgICAgIHJlY29yZC5zZXQoJ25hbWUnLCAnRG9jIDEn
KTsKLSAgICAgICAgcmVjb3JkLmdldCgnbmFtZScpOyAvLyAnRG9jIDEnCi0gICAgICAgIHJlY29y
ZC5yb2xsYmFjaygpOwotICAgICAgICByZWNvcmQuZ2V0KCduYW1lJyk7IC8vICdVbnRpdGxlZCBE
b2N1bWVudCcKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCByb2xsYmFjawotICAgICAg
Ki8KLSAgICAgIHJvbGxiYWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5fYXR0cmlidXRl
cyA9IHt9OwotCi0gICAgICAgIGlmIChnZXQodGhpcywgJ2lzRXJyb3InKSkgewotICAgICAgICAg
IHRoaXMuX2luRmxpZ2h0QXR0cmlidXRlcyA9IHt9OwotICAgICAgICAgIHNldCh0aGlzLCAnaXNF
cnJvcicsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ2V0KHRoaXMsICdpc1Zh
bGlkJykpIHsKLSAgICAgICAgICB0aGlzLl9pbkZsaWdodEF0dHJpYnV0ZXMgPSB7fTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuc2VuZCgncm9sbGVkQmFjaycpOwotCi0gICAgICAgIHRoaXMu
c3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpIHsKLSAgICAgICAgICB0aGlz
Lm5vdGlmeVByb3BlcnR5Q2hhbmdlKCdkYXRhJyk7Ci0gICAgICAgIH0pOwotICAgICAgfSwKLQot
ICAgICAgdG9TdHJpbmdFeHRlbnNpb246IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gZ2V0
KHRoaXMsICdpZCcpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoZSBnb2FsIG9m
IHRoaXMgbWV0aG9kIGlzIHRvIHRlbXBvcmFyaWx5IGRpc2FibGUgc3BlY2lmaWMgb2JzZXJ2ZXJz
Ci0gICAgICAgIHRoYXQgdGFrZSBhY3Rpb24gaW4gcmVzcG9uc2UgdG8gYXBwbGljYXRpb24gY2hh
bmdlcy4KLQotICAgICAgICBUaGlzIGFsbG93cyB0aGUgc3lzdGVtIHRvIG1ha2UgY2hhbmdlcyAo
c3VjaCBhcyBtYXRlcmlhbGl6YXRpb24gYW5kCi0gICAgICAgIHJvbGxiYWNrKSB0aGF0IHNob3Vs
ZCBub3QgdHJpZ2dlciBzZWNvbmRhcnkgYmVoYXZpb3IgKHN1Y2ggYXMgc2V0dGluZyBhbgotICAg
ICAgICBpbnZlcnNlIHJlbGF0aW9uc2hpcCBvciBtYXJraW5nIHJlY29yZHMgYXMgZGlydHkpLgot
Ci0gICAgICAgIFRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3aWxsIGxpa2VseSBjaGFuZ2Ug
YXMgRW1iZXIgcHJvcGVyIHByb3ZpZGVzCi0gICAgICAgIGJldHRlciBpbmZyYXN0cnVjdHVyZSBm
b3Igc3VzcGVuZGluZyBncm91cHMgb2Ygb2JzZXJ2ZXJzLCBhbmQgaWYgQXJyYXkKLSAgICAgICAg
b2JzZXJ2YXRpb24gYmVjb21lcyBtb3JlIHVuaWZpZWQgd2l0aCByZWd1bGFyIG9ic2VydmVycy4K
LQotICAgICAgICBAbWV0aG9kIHN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMKLSAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgQHBhcmFtIGNhbGxiYWNrCi0gICAgICAgIEBwYXJhbSBiaW5kaW5n
Ci0gICAgICAqLwotICAgICAgc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVyczogZnVuY3Rpb24o
Y2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAgICAgICAgdmFyIG9ic2VydmVycyA9IGdldCh0aGlzLmNv
bnN0cnVjdG9yLCAncmVsYXRpb25zaGlwTmFtZXMnKS5iZWxvbmdzVG87Ci0gICAgICAgIHZhciBz
ZWxmID0gdGhpczsKLQotICAgICAgICB0cnkgewotICAgICAgICAgIHRoaXMuX3N1c3BlbmRlZFJl
bGF0aW9uc2hpcHMgPSB0cnVlOwotICAgICAgICAgIEVtYmVyLl9zdXNwZW5kT2JzZXJ2ZXJzKHNl
bGYsIG9ic2VydmVycywgbnVsbCwgJ2JlbG9uZ3NUb0RpZENoYW5nZScsIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgRW1iZXIuX3N1c3BlbmRCZWZvcmVPYnNlcnZlcnMoc2VsZiwgb2JzZXJ2ZXJz
LCBudWxsLCAnYmVsb25nc1RvV2lsbENoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICBjYWxsYmFjay5jYWxsKGJpbmRpbmcgfHwgc2VsZik7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICB9KTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICB0aGlzLl9zdXNwZW5kZWRS
ZWxhdGlvbnNoaXBzID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBTYXZlIHRoZSByZWNvcmQgYW5kIHBlcnNpc3QgYW55IGNoYW5nZXMgdG8gdGhlIHJl
Y29yZCB0byBhbgotICAgICAgICBleHRlbmFsIHNvdXJjZSB2aWEgdGhlIGFkYXB0ZXIuCi0KLSAg
ICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgcmVjb3JkLnNl
dCgnbmFtZScsICdUb21zdGVyJyk7Ci0gICAgICAgIHJlY29yZC5zYXZlKCkudGhlbihmdW5jdGlv
bigpewotICAgICAgICAgIC8vIFN1Y2Nlc3MgY2FsbGJhY2sKLSAgICAgICAgfSwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgLy8gRXJyb3IgY2FsbGJhY2sKLSAgICAgICAgfSk7Ci0gICAgICAgIGBg
YAotICAgICAgICBAbWV0aG9kIHNhdmUKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9t
aXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBhZGFwdGVyIHJldHVybnMKLSAgICAg
ICAgc3VjY2Vzc2Z1bGx5IG9yIHJlamVjdGVkIGlmIHRoZSBhZGFwdGVyIHJldHVybnMgd2l0aCBh
biBlcnJvci4KLSAgICAgICovCi0gICAgICBzYXZlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IHByb21pc2VMYWJlbCA9ICJEUzogTW9kZWwjc2F2ZSAiICsgdGhpczsKLSAgICAgICAgdmFyIHJl
c29sdmVyID0gRW1iZXIuUlNWUC5kZWZlcihwcm9taXNlTGFiZWwpOwotCi0gICAgICAgIHRoaXMu
Z2V0KCdzdG9yZScpLnNjaGVkdWxlU2F2ZSh0aGlzLCByZXNvbHZlcik7Ci0gICAgICAgIHRoaXMu
X2luRmxpZ2h0QXR0cmlidXRlcyA9IHRoaXMuX2F0dHJpYnV0ZXM7Ci0gICAgICAgIHRoaXMuX2F0
dHJpYnV0ZXMgPSB7fTsKLQotICAgICAgICByZXR1cm4gUHJvbWlzZU9iamVjdC5jcmVhdGUoeyBw
cm9taXNlOiByZXNvbHZlci5wcm9taXNlIH0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIFJlbG9hZCB0aGUgcmVjb3JkIGZyb20gdGhlIGFkYXB0ZXIuCi0KLSAgICAgICAgVGhpcyB3
aWxsIG9ubHkgd29yayBpZiB0aGUgcmVjb3JkIGhhcyBhbHJlYWR5IGZpbmlzaGVkIGxvYWRpbmcK
LSAgICAgICAgYW5kIGhhcyBub3QgeWV0IGJlZW4gbW9kaWZpZWQgKGBpc0xvYWRlZGAgYnV0IG5v
dCBgaXNEaXJ0eWAsCi0gICAgICAgIG9yIGBpc1NhdmluZ2ApLgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Nb2RlbFZpZXdSb3V0ZSA9IEVt
YmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgcmVs
b2FkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgdGhpcy5nZXQoJ21vZGVsJykucmVsb2Fk
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBg
Ci0KLSAgICAgICAgQG1ldGhvZCByZWxvYWQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBw
cm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSByZWNvcmQgd2hlbiB0aGUKLSAg
ICAgICAgYWRhcHRlciByZXR1cm5zIHN1Y2Nlc3NmdWxseSBvciByZWplY3RlZCBpZiB0aGUgYWRh
cHRlciByZXR1cm5zCi0gICAgICAgIHdpdGggYW4gZXJyb3IuCi0gICAgICAqLwotICAgICAgcmVs
b2FkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgc2V0KHRoaXMsICdpc1JlbG9hZGluZycsIHRydWUp
OwotCi0gICAgICAgIHZhciAgcmVjb3JkID0gdGhpczsKLQotICAgICAgICB2YXIgcHJvbWlzZUxh
YmVsID0gIkRTOiBNb2RlbCNyZWxvYWQgb2YgIiArIHRoaXM7Ci0gICAgICAgIHZhciBwcm9taXNl
ID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSl7Ci0gICAgICAgICAgIHJlY29yZC5zZW5k
KCdyZWxvYWRSZWNvcmQnLCByZXNvbHZlKTsKLSAgICAgICAgfSwgcHJvbWlzZUxhYmVsKS50aGVu
KGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJlY29yZC5zZXQoJ2lzUmVsb2FkaW5nJywgZmFsc2Up
OwotICAgICAgICAgIHJlY29yZC5zZXQoJ2lzRXJyb3InLCBmYWxzZSk7Ci0gICAgICAgICAgcmV0
dXJuIHJlY29yZDsKLSAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgICAgcmVj
b3JkLnNldCgnaXNFcnJvcicsIHRydWUpOwotICAgICAgICAgIHRocm93IHJlYXNvbjsKLSAgICAg
ICAgfSwgIkRTOiBNb2RlbCNyZWxvYWQgY29tcGxldGUsIHVwZGF0ZSBmbGFncyIpOwotCi0gICAg
ICAgIHJldHVybiBQcm9taXNlT2JqZWN0LmNyZWF0ZSh7IHByb21pc2U6IHByb21pc2UgfSk7Ci0g
ICAgICB9LAotCi0gICAgICAvLyBGT1IgVVNFIERVUklORyBDT01NSVQgUFJPQ0VTUwotCi0gICAg
ICBhZGFwdGVyRGlkVXBkYXRlQXR0cmlidXRlOiBmdW5jdGlvbihhdHRyaWJ1dGVOYW1lLCB2YWx1
ZSkgewotCi0gICAgICAgIC8vIElmIGEgdmFsdWUgaXMgcGFzc2VkIGluLCB1cGRhdGUgdGhlIGlu
dGVybmFsIGF0dHJpYnV0ZXMgYW5kIGNsZWFyCi0gICAgICAgIC8vIHRoZSBhdHRyaWJ1dGUgY2Fj
aGUgc28gaXQgcGlja3MgdXAgdGhlIG5ldyB2YWx1ZS4gT3RoZXJ3aXNlLAotICAgICAgICAvLyBj
b2xsYXBzZSB0aGUgY3VycmVudCB2YWx1ZSBpbnRvIHRoZSBpbnRlcm5hbCBhdHRyaWJ1dGVzIGJl
Y2F1c2UKLSAgICAgICAgLy8gdGhlIGFkYXB0ZXIgaGFzIGFja25vd2xlZGdlZCBpdC4KLSAgICAg
ICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICB0aGlzLl9kYXRhW2F0dHJp
YnV0ZU5hbWVdID0gdmFsdWU7Ci0gICAgICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZShh
dHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzLl9kYXRhW2F0
dHJpYnV0ZU5hbWVdID0gdGhpcy5faW5GbGlnaHRBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRBcnJheXNMYXRlcigpOwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgYWRhcHRlckRpZEludmFsaWRhdGUK
LSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBhZGFwdGVyRGlkSW52YWxpZGF0ZTog
ZnVuY3Rpb24oZXJyb3JzKSB7Ci0gICAgICAgIHZhciByZWNvcmRFcnJvcnMgPSBnZXQodGhpcywg
J2Vycm9ycycpOwotICAgICAgICBmdW5jdGlvbiBhZGRFcnJvcihuYW1lKSB7Ci0gICAgICAgICAg
aWYgKGVycm9yc1tuYW1lXSkgewotICAgICAgICAgICAgcmVjb3JkRXJyb3JzLmFkZChuYW1lLCBl
cnJvcnNbbmFtZV0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZWFj
aEF0dHJpYnV0ZShhZGRFcnJvcik7Ci0gICAgICAgIHRoaXMuZWFjaFJlbGF0aW9uc2hpcChhZGRF
cnJvcik7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBhZGFwdGVyRGlk
RXJyb3IKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBhZGFwdGVyRGlkRXJyb3I6
IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnNlbmQoJ2JlY2FtZUVycm9yJyk7Ci0gICAgICAg
IHNldCh0aGlzLCAnaXNFcnJvcicsIHRydWUpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGV2ZW50IGZpcmluZyBmcm9tIEVtYmVyLkV2ZW50ZWQg
dG8KLSAgICAgICAgYWxzbyBjYWxsIG1ldGhvZHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQotICAg
ICAgICBAbWV0aG9kIHRyaWdnZXIKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIG5h
bWUKLSAgICAgICovCi0gICAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgIEVt
YmVyLnRyeUludm9rZSh0aGlzLCBuYW1lLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwot
ICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgfSwKLQot
ICAgICAgdHJpZ2dlckxhdGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMuX2RlZmVy
cmVkVHJpZ2dlcnMucHVzaChhcmd1bWVudHMpICE9PSAxKSB7IHJldHVybjsgfQotICAgICAgICBF
bWJlci5ydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCAnX3RyaWdnZXJEZWZlcnJlZFRyaWdn
ZXJzJyk7Ci0gICAgICB9LAotCi0gICAgICBfdHJpZ2dlckRlZmVycmVkVHJpZ2dlcnM6IGZ1bmN0
aW9uKCkgewotICAgICAgICBmb3IgKHZhciBpPTAsIGw9dGhpcy5fZGVmZXJyZWRUcmlnZ2Vycy5s
ZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgICAgdGhpcy50cmlnZ2VyLmFwcGx5KHRoaXMsIHRo
aXMuX2RlZmVycmVkVHJpZ2dlcnNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fZGVm
ZXJyZWRUcmlnZ2Vycy5sZW5ndGggPSAwOwotICAgICAgfSwKLQotICAgICAgd2lsbERlc3Ryb3k6
IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICB0aGlzLmNsZWFy
UmVsYXRpb25zaGlwcygpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgTW9kZWwucmVvcGVuQ2xh
c3MoewotCi0gICAgICAvKioKLSAgICAgICAgQWxpYXMgRFMuTW9kZWwncyBgY3JlYXRlYCBtZXRo
b2QgdG8gYF9jcmVhdGVgLiBUaGlzIGFsbG93cyB1cyB0byBjcmVhdGUgRFMuTW9kZWwKLSAgICAg
ICAgaW5zdGFuY2VzIGZyb20gd2l0aGluIHRoZSBzdG9yZSwgYnV0IGlmIGVuZCB1c2VycyBhY2Np
ZGVudGFsbHkgY2FsbCBgY3JlYXRlKClgCi0gICAgICAgIChpbnN0ZWFkIG9mIGBjcmVhdGVSZWNv
cmQoKWApLCB3ZSBjYW4gcmFpc2UgYW4gZXJyb3IuCi0KLSAgICAgICAgQG1ldGhvZCBfY3JlYXRl
Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBzdGF0aWMKLSAgICAgICovCi0gICAgICBfY3Jl
YXRlOiBNb2RlbC5jcmVhdGUsCi0KLSAgICAgIC8qKgotICAgICAgICBPdmVycmlkZSB0aGUgY2xh
c3MnIGBjcmVhdGUoKWAgbWV0aG9kIHRvIHJhaXNlIGFuIGVycm9yLiBUaGlzCi0gICAgICAgIHBy
ZXZlbnRzIGVuZCB1c2VycyBmcm9tIGluYWR2ZXJ0ZW50bHkgY2FsbGluZyBgY3JlYXRlKClgIGlu
c3RlYWQKLSAgICAgICAgb2YgYGNyZWF0ZVJlY29yZCgpYC4gVGhlIHN0b3JlIGlzIHN0aWxsIGFi
bGUgdG8gY3JlYXRlIGluc3RhbmNlcwotICAgICAgICBieSBjYWxsaW5nIHRoZSBgX2NyZWF0ZSgp
YCBtZXRob2QuIFRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhCi0gICAgICAgIGBEUy5Nb2RlbGAg
dXNlIFtzdG9yZS5jcmVhdGVSZWNvcmRdKERTLlN0b3JlLmh0bWwjbWV0aG9kX2NyZWF0ZVJlY29y
ZCkuCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGUKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
QHN0YXRpYwotICAgICAgKi8KLSAgICAgIGNyZWF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBFbWJlci5FcnJvcigiWW91IHNob3VsZCBub3QgY2FsbCBgY3JlYXRlYCBvbiBhIG1v
ZGVsLiBJbnN0ZWFkLCBjYWxsIGBzdG9yZS5jcmVhdGVSZWNvcmRgIHdpdGggdGhlIGF0dHJpYnV0
ZXMgeW91IHdvdWxkIGxpa2UgdG8gc2V0LiIpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IE1vZGVsOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9s
aWIvc3lzdGVtL21vZGVsL3N0YXRlcyIsIAotICBbImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19l
eHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVt
YmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIu
c2V0OwotICAgIC8qCi0gICAgICBUaGlzIGZpbGUgZW5jYXBzdWxhdGVzIHRoZSB2YXJpb3VzIHN0
YXRlcyB0aGF0IGEgcmVjb3JkIGNhbiB0cmFuc2l0aW9uCi0gICAgICB0aHJvdWdoIGR1cmluZyBp
dHMgbGlmZWN5Y2xlLgotICAgICovCi0gICAgLyoqCi0gICAgICAjIyMgU3RhdGUKLQotICAgICAg
RWFjaCByZWNvcmQgaGFzIGEgYGN1cnJlbnRTdGF0ZWAgcHJvcGVydHkgdGhhdCBleHBsaWNpdGx5
IHRyYWNrcyB3aGF0Ci0gICAgICBzdGF0ZSBhIHJlY29yZCBpcyBpbiBhdCBhbnkgZ2l2ZW4gdGlt
ZS4gRm9yIGluc3RhbmNlLCBpZiBhIHJlY29yZCBpcwotICAgICAgbmV3bHkgY3JlYXRlZCBhbmQg
aGFzIG5vdCB5ZXQgYmVlbiBzZW50IHRvIHRoZSBhZGFwdGVyIHRvIGJlIHNhdmVkLAotICAgICAg
aXQgd291bGQgYmUgaW4gdGhlIGByb290LmxvYWRlZC5jcmVhdGVkLnVuY29tbWl0dGVkYCBzdGF0
ZS4gIElmIGEKLSAgICAgIHJlY29yZCBoYXMgaGFkIGxvY2FsIG1vZGlmaWNhdGlvbnMgbWFkZSB0
byBpdCB0aGF0IGFyZSBpbiB0aGUKLSAgICAgIHByb2Nlc3Mgb2YgYmVpbmcgc2F2ZWQsIHRoZSBy
ZWNvcmQgd291bGQgYmUgaW4gdGhlCi0gICAgICBgcm9vdC5sb2FkZWQudXBkYXRlZC5pbkZsaWdo
dGAgc3RhdGUuIChUaGVzZSBzdGF0ZSBwYXRocyB3aWxsIGJlCi0gICAgICBleHBsYWluZWQgaW4g
bW9yZSBkZXRhaWwgYmVsb3cuKQotCi0gICAgICBFdmVudHMgYXJlIHNlbnQgYnkgdGhlIHJlY29y
ZCBvciBpdHMgc3RvcmUgdG8gdGhlIHJlY29yZCdzCi0gICAgICBgY3VycmVudFN0YXRlYCBwcm9w
ZXJ0eS4gSG93IHRoZSBzdGF0ZSByZWFjdHMgdG8gdGhlc2UgZXZlbnRzIGlzCi0gICAgICBkZXBl
bmRlbnQgb24gd2hpY2ggc3RhdGUgaXQgaXMgaW4uIEluIHNvbWUgc3RhdGVzLCBjZXJ0YWluIGV2
ZW50cwotICAgICAgd2lsbCBiZSBpbnZhbGlkIGFuZCB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbiB0
byBiZSByYWlzZWQuCi0KLSAgICAgIFN0YXRlcyBhcmUgaGllcmFyY2hpY2FsIGFuZCBldmVyeSBz
dGF0ZSBpcyBhIHN1YnN0YXRlIG9mIHRoZQotICAgICAgYFJvb3RTdGF0ZWAuIEZvciBleGFtcGxl
LCBhIHJlY29yZCBjYW4gYmUgaW4gdGhlCi0gICAgICBgcm9vdC5kZWxldGVkLnVuY29tbWl0dGVk
YCBzdGF0ZSwgdGhlbiB0cmFuc2l0aW9uIGludG8gdGhlCi0gICAgICBgcm9vdC5kZWxldGVkLmlu
RmxpZ2h0YCBzdGF0ZS4gSWYgYSBjaGlsZCBzdGF0ZSBkb2VzIG5vdCBpbXBsZW1lbnQKLSAgICAg
IGFuIGV2ZW50IGhhbmRsZXIsIHRoZSBzdGF0ZSBtYW5hZ2VyIHdpbGwgYXR0ZW1wdCB0byBpbnZv
a2UgdGhlIGV2ZW50Ci0gICAgICBvbiBhbGwgcGFyZW50IHN0YXRlcyB1bnRpbCB0aGUgcm9vdCBz
dGF0ZSBpcyByZWFjaGVkLiBUaGUgc3RhdGUKLSAgICAgIGhpZXJhcmNoeSBvZiBhIHJlY29yZCBp
cyBkZXNjcmliZWQgaW4gdGVybXMgb2YgYSBwYXRoIHN0cmluZy4gWW91Ci0gICAgICBjYW4gZGV0
ZXJtaW5lIGEgcmVjb3JkJ3MgY3VycmVudCBzdGF0ZSBieSBnZXR0aW5nIHRoZSBzdGF0ZSdzCi0g
ICAgICBgc3RhdGVOYW1lYCBwcm9wZXJ0eToKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
cmVjb3JkLmdldCgnY3VycmVudFN0YXRlLnN0YXRlTmFtZScpOwotICAgICAgLy89PiAicm9vdC5j
cmVhdGVkLnVuY29tbWl0dGVkIgotICAgICAgIGBgYAotCi0gICAgICBUaGUgaGllcmFyY2h5IG9m
IHZhbGlkIHN0YXRlcyB0aGF0IHNoaXAgd2l0aCBlbWJlciBkYXRhIGxvb2tzIGxpa2UKLSAgICAg
IHRoaXM6Ci0KLSAgICAgIGBgYHRleHQKLSAgICAgICogcm9vdAotICAgICAgICAqIGRlbGV0ZWQK
LSAgICAgICAgICAqIHNhdmVkCi0gICAgICAgICAgKiB1bmNvbW1pdHRlZAotICAgICAgICAgICog
aW5GbGlnaHQKLSAgICAgICAgKiBlbXB0eQotICAgICAgICAqIGxvYWRlZAotICAgICAgICAgICog
Y3JlYXRlZAotICAgICAgICAgICAgKiB1bmNvbW1pdHRlZAotICAgICAgICAgICAgKiBpbkZsaWdo
dAotICAgICAgICAgICogc2F2ZWQKLSAgICAgICAgICAqIHVwZGF0ZWQKLSAgICAgICAgICAgICog
dW5jb21taXR0ZWQKLSAgICAgICAgICAgICogaW5GbGlnaHQKLSAgICAgICAgKiBsb2FkaW5nCi0g
ICAgICBgYGAKLQotICAgICAgVGhlIGBEUy5Nb2RlbGAgc3RhdGVzIGFyZSB0aGVtc2VsdmVzIHN0
YXRlbGVzcy4gV2hhdCB3ZSBtZWFuIGlzCi0gICAgICB0aGF0LCB0aGUgaGllcmFyY2hpY2FsIHN0
YXRlcyB0aGF0IGVhY2ggb2YgKnRob3NlKiBwb2ludHMgdG8gaXMgYQotICAgICAgc2hhcmVkIGRh
dGEgc3RydWN0dXJlLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgaW5zdGVhZCBvZiBlYWNoCi0g
ICAgICByZWNvcmQgZ2V0dGluZyBpdHMgb3duIGNvcHkgb2YgdGhlIGhpZXJhcmNoeSBvZiBzdGF0
ZXMsIGVhY2ggcmVjb3JkCi0gICAgICBwb2ludHMgdG8gdGhpcyBnbG9iYWwsIGltbXV0YWJsZSBz
aGFyZWQgaW5zdGFuY2UuIEhvdyBkb2VzIGEgc3RhdGUKLSAgICAgIGtub3cgd2hpY2ggcmVjb3Jk
IGl0IHNob3VsZCBiZSBhY3Rpbmcgb24/IFdlIHBhc3MgdGhlIHJlY29yZAotICAgICAgaW5zdGFu
Y2UgaW50byB0aGUgc3RhdGUncyBldmVudCBoYW5kbGVycyBhcyB0aGUgZmlyc3QgYXJndW1lbnQu
Ci0KLSAgICAgIFRoZSByZWNvcmQgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgd2hl
cmUgeW91IHNob3VsZCBzdGFzaAotICAgICAgc3RhdGUgYWJvdXQgdGhlIHJlY29yZCBpZiBuZWVk
ZWQ7IHlvdSBzaG91bGQgbmV2ZXIgc3RvcmUgZGF0YSBvbiB0aGUgc3RhdGUKLSAgICAgIG9iamVj
dCBpdHNlbGYuCi0KLSAgICAgICMjIyBFdmVudHMgYW5kIEZsYWdzCi0KLSAgICAgIEEgc3RhdGUg
bWF5IGltcGxlbWVudCB6ZXJvIG9yIG1vcmUgZXZlbnRzIGFuZCBmbGFncy4KLQotICAgICAgIyMj
IyBFdmVudHMKLQotICAgICAgRXZlbnRzIGFyZSBuYW1lZCBmdW5jdGlvbnMgdGhhdCBhcmUgaW52
b2tlZCB3aGVuIHNlbnQgdG8gYSByZWNvcmQuIFRoZQotICAgICAgcmVjb3JkIHdpbGwgZmlyc3Qg
bG9vayBmb3IgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBvbiB0aGUKLSAgICAgIGN1cnJl
bnQgc3RhdGUuIElmIG5vIG1ldGhvZCBpcyBmb3VuZCwgaXQgd2lsbCBzZWFyY2ggdGhlIGN1cnJl
bnQKLSAgICAgIHN0YXRlJ3MgcGFyZW50LCBhbmQgdGhlbiBpdHMgZ3JhbmRwYXJlbnQsIGFuZCBz
byBvbiB1bnRpbCByZWFjaGluZwotICAgICAgdGhlIHRvcCBvZiB0aGUgaGllcmFyY2h5LiBJZiB0
aGUgcm9vdCBpcyByZWFjaGVkIHdpdGhvdXQgYW4gZXZlbnQKLSAgICAgIGhhbmRsZXIgYmVpbmcg
Zm91bmQsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gVGhpcyBjYW4gYmUgdmVyeQotICAg
ICAgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBuZXcgZmVhdHVyZXMuCi0KLSAgICAgIEhlcmUncyBh
biBleGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIGEgc3RhdGUgd2l0aCBhIGBteUV2ZW50YCBldmVu
dCBoYW5kbGVyOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBhU3RhdGU6IERTLlN0YXRl
LmNyZWF0ZSh7Ci0gICAgICAgIG15RXZlbnQ6IGZ1bmN0aW9uKG1hbmFnZXIsIHBhcmFtKSB7Ci0g
ICAgICAgICAgY29uc29sZS5sb2coIlJlY2VpdmVkIG15RXZlbnQgd2l0aCIsIHBhcmFtKTsKLSAg
ICAgICAgfQotICAgICAgfSkKLSAgICAgIGBgYAotCi0gICAgICBUbyB0cmlnZ2VyIHRoaXMgZXZl
bnQ6Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHJlY29yZC5zZW5kKCdteUV2ZW50Jywg
J2ZvbycpOwotICAgICAgLy89PiAiUmVjZWl2ZWQgbXlFdmVudCB3aXRoIGZvbyIKLSAgICAgIGBg
YAotCi0gICAgICBOb3RlIHRoYXQgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGNhbiBiZSBzZW50IHRv
IGEgcmVjb3JkJ3MgYHNlbmQoKWAgbWV0aG9kLAotICAgICAgd2hpY2ggd2lsbCBiZSBwYXNzZWQg
YXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlIGV2ZW50IGhhbmRsZXIuCi0KLSAgICAgIEV2
ZW50cyBzaG91bGQgdHJhbnNpdGlvbiB0byBhIGRpZmZlcmVudCBzdGF0ZSBpZiBhcHByb3ByaWF0
ZS4gVGhpcyBjYW4gYmUKLSAgICAgIGRvbmUgYnkgY2FsbGluZyB0aGUgcmVjb3JkJ3MgYHRyYW5z
aXRpb25UbygpYCBtZXRob2Qgd2l0aCBhIHBhdGggdG8gdGhlCi0gICAgICBkZXNpcmVkIHN0YXRl
LiBUaGUgc3RhdGUgbWFuYWdlciB3aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgc3RhdGUgcGF0
aAotICAgICAgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RhdGUuIElmIG5vIHN0YXRlIGlzIGZv
dW5kIGF0IHRoYXQgcGF0aCwgaXQgd2lsbAotICAgICAgYXR0ZW1wdCB0byByZXNvbHZlIGl0IHJl
bGF0aXZlIHRvIHRoZSBjdXJyZW50IHN0YXRlJ3MgcGFyZW50LCBhbmQgdGhlbiBpdHMKLSAgICAg
IHBhcmVudCwgYW5kIHNvIG9uIHVudGlsIHRoZSByb290IGlzIHJlYWNoZWQuIEZvciBleGFtcGxl
LCBpbWFnaW5lIGEgaGllcmFyY2h5Ci0gICAgICBsaWtlIHRoaXM6Ci0KLSAgICAgICAgICAqIGNy
ZWF0ZWQKLSAgICAgICAgICAgICogdW5jb21taXR0ZWQgPC0tIGN1cnJlbnRTdGF0ZQotICAgICAg
ICAgICAgKiBpbkZsaWdodAotICAgICAgICAgICogdXBkYXRlZAotICAgICAgICAgICAgKiBpbkZs
aWdodAotCi0gICAgICBJZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBgdW5jb21taXR0ZWRgIHN0
YXRlLCBjYWxsaW5nCi0gICAgICBgdHJhbnNpdGlvblRvKCdpbkZsaWdodCcpYCB3b3VsZCB0cmFu
c2l0aW9uIHRvIHRoZSBgY3JlYXRlZC5pbkZsaWdodGAgc3RhdGUsCi0gICAgICB3aGlsZSBjYWxs
aW5nIGB0cmFuc2l0aW9uVG8oJ3VwZGF0ZWQuaW5GbGlnaHQnKWAgd291bGQgdHJhbnNpdGlvbiB0
bwotICAgICAgdGhlIGB1cGRhdGVkLmluRmxpZ2h0YCBzdGF0ZS4KLQotICAgICAgUmVtZW1iZXIg
dGhhdCAqb25seSBldmVudHMqIHNob3VsZCBldmVyIGNhdXNlIGEgc3RhdGUgdHJhbnNpdGlvbi4g
WW91IHNob3VsZAotICAgICAgbmV2ZXIgY2FsbCBgdHJhbnNpdGlvblRvKClgIGZyb20gb3V0c2lk
ZSBhIHN0YXRlJ3MgZXZlbnQgaGFuZGxlci4gSWYgeW91IGFyZQotICAgICAgdGVtcHRlZCB0byBk
byBzbywgY3JlYXRlIGEgbmV3IGV2ZW50IGFuZCBzZW5kIHRoYXQgdG8gdGhlIHN0YXRlIG1hbmFn
ZXIuCi0KLSAgICAgICMjIyMgRmxhZ3MKLQotICAgICAgRmxhZ3MgYXJlIEJvb2xlYW4gdmFsdWVz
IHRoYXQgY2FuIGJlIHVzZWQgdG8gaW50cm9zcGVjdCBhIHJlY29yZCdzIGN1cnJlbnQKLSAgICAg
IHN0YXRlIGluIGEgbW9yZSB1c2VyLWZyaWVuZGx5IHdheSB0aGFuIGV4YW1pbmluZyBpdHMgc3Rh
dGUgcGF0aC4gRm9yIGV4YW1wbGUsCi0gICAgICBpbnN0ZWFkIG9mIGRvaW5nIHRoaXM6Ci0KLSAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBzdGF0ZVBhdGggPSByZWNvcmQuZ2V0KCdzdGF0
ZU1hbmFnZXIuY3VycmVudFBhdGgnKTsKLSAgICAgIGlmIChzdGF0ZVBhdGggPT09ICdjcmVhdGVk
LmluRmxpZ2h0JykgewotICAgICAgICBkb1NvbWV0aGluZygpOwotICAgICAgfQotICAgICAgYGBg
Ci0KLSAgICAgIFlvdSBjYW4gc2F5OgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBpZiAo
cmVjb3JkLmdldCgnaXNOZXcnKSAmJiByZWNvcmQuZ2V0KCdpc1NhdmluZycpKSB7Ci0gICAgICAg
IGRvU29tZXRoaW5nKCk7Ci0gICAgICB9Ci0gICAgICBgYGAKLQotICAgICAgSWYgeW91ciBzdGF0
ZSBkb2VzIG5vdCBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBmbGFnLCB0aGUgdmFsdWUgd2lsbAot
ICAgICAgYmUgaW5oZXJpdGVkIGZyb20gaXRzIHBhcmVudCAob3IgdGhlIGZpcnN0IHBsYWNlIGlu
IHRoZSBzdGF0ZSBoaWVyYXJjaHkKLSAgICAgIHdoZXJlIGl0IGlzIGRlZmluZWQpLgotCi0gICAg
ICBUaGUgY3VycmVudCBzZXQgb2YgZmxhZ3MgYXJlIGRlZmluZWQgYmVsb3cuIElmIHlvdSB3YW50
IHRvIGFkZCBhIG5ldyBmbGFnLAotICAgICAgaW4gYWRkaXRpb24gdG8gdGhlIGFyZWEgYmVsb3cs
IHlvdSB3aWxsIGFsc28gbmVlZCB0byBkZWNsYXJlIGl0IGluIHRoZQotICAgICAgYERTLk1vZGVs
YCBjbGFzcy4KLQotCi0gICAgICAgKiBbaXNFbXB0eV0oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9p
c0VtcHR5KQotICAgICAgICogW2lzTG9hZGluZ10oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9pc0xv
YWRpbmcpCi0gICAgICAgKiBbaXNMb2FkZWRdKERTLk1vZGVsLmh0bWwjcHJvcGVydHlfaXNMb2Fk
ZWQpCi0gICAgICAgKiBbaXNEaXJ0eV0oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9pc0RpcnR5KQot
ICAgICAgICogW2lzU2F2aW5nXShEUy5Nb2RlbC5odG1sI3Byb3BlcnR5X2lzU2F2aW5nKQotICAg
ICAgICogW2lzRGVsZXRlZF0oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9pc0RlbGV0ZWQpCi0gICAg
ICAgKiBbaXNOZXddKERTLk1vZGVsLmh0bWwjcHJvcGVydHlfaXNOZXcpCi0gICAgICAgKiBbaXNW
YWxpZF0oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9pc1ZhbGlkKQotCi0gICAgICBAbmFtZXNwYWNl
IERTCi0gICAgICBAY2xhc3MgUm9vdFN0YXRlCi0gICAgKi8KLQotICAgIGZ1bmN0aW9uIGhhc0Rl
ZmluZWRQcm9wZXJ0aWVzKG9iamVjdCkgewotICAgICAgLy8gSWdub3JlIGludGVybmFsIHByb3Bl
cnR5IGRlZmluZWQgYnkgc2ltdWxhdGVkIGBFbWJlci5jcmVhdGVgLgotICAgICAgdmFyIG5hbWVz
ID0gRW1iZXIua2V5cyhvYmplY3QpOwotICAgICAgdmFyIGksIGwsIG5hbWU7Ci0gICAgICBmb3Ig
KGkgPSAwLCBsID0gbmFtZXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICBuYW1lID0g
bmFtZXNbaV07Ci0gICAgICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgb2Jq
ZWN0W25hbWVdKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkaWRTZXRQcm9wZXJ0eShyZWNvcmQsIGNvbnRleHQp
IHsKLSAgICAgIGlmIChjb250ZXh0LnZhbHVlID09PSBjb250ZXh0Lm9yaWdpbmFsVmFsdWUpIHsK
LSAgICAgICAgZGVsZXRlIHJlY29yZC5fYXR0cmlidXRlc1tjb250ZXh0Lm5hbWVdOwotICAgICAg
ICByZWNvcmQuc2VuZCgncHJvcGVydHlXYXNSZXNldCcsIGNvbnRleHQubmFtZSk7Ci0gICAgICB9
IGVsc2UgaWYgKGNvbnRleHQudmFsdWUgIT09IGNvbnRleHQub2xkVmFsdWUpIHsKLSAgICAgICAg
cmVjb3JkLnNlbmQoJ2JlY29tZURpcnR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHJlY29yZC51cGRh
dGVSZWNvcmRBcnJheXNMYXRlcigpOwotICAgIH0KLQotICAgIC8vIEltcGxlbWVudGF0aW9uIG5v
dGVzOgotICAgIC8vCi0gICAgLy8gRWFjaCBzdGF0ZSBoYXMgYSBib29sZWFuIHZhbHVlIGZvciBh
bGwgb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKLSAgICAvLwotICAgIC8vICogaXNMb2FkZWQ6IFRo
ZSByZWNvcmQgaGFzIGEgcG9wdWxhdGVkIGBkYXRhYCBwcm9wZXJ0eS4gV2hlbiBhCi0gICAgLy8g
ICByZWNvcmQgaXMgbG9hZGVkIHZpYSBgc3RvcmUuZmluZGAsIGBpc0xvYWRlZGAgaXMgZmFsc2UK
LSAgICAvLyAgIHVudGlsIHRoZSBhZGFwdGVyIHNldHMgaXQuIFdoZW4gYSByZWNvcmQgaXMgY3Jl
YXRlZCBsb2NhbGx5LAotICAgIC8vICAgaXRzIGBpc0xvYWRlZGAgcHJvcGVydHkgaXMgYWx3YXlz
IHRydWUuCi0gICAgLy8gKiBpc0RpcnR5OiBUaGUgcmVjb3JkIGhhcyBsb2NhbCBjaGFuZ2VzIHRo
YXQgaGF2ZSBub3QgeWV0IGJlZW4KLSAgICAvLyAgIHNhdmVkIGJ5IHRoZSBhZGFwdGVyLiBUaGlz
IGluY2x1ZGVzIHJlY29yZHMgdGhhdCBoYXZlIGJlZW4KLSAgICAvLyAgIGNyZWF0ZWQgKGJ1dCBu
b3QgeWV0IHNhdmVkKSBvciBkZWxldGVkLgotICAgIC8vICogaXNTYXZpbmc6IFRoZSByZWNvcmQg
aGFzIGJlZW4gY29tbWl0dGVkLCBidXQKLSAgICAvLyAgIHRoZSBhZGFwdGVyIGhhcyBub3QgeWV0
IGFja25vd2xlZGdlZCB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUKLSAgICAvLyAgIGJlZW4gcGVyc2lz
dGVkIHRvIHRoZSBiYWNrZW5kLgotICAgIC8vICogaXNEZWxldGVkOiBUaGUgcmVjb3JkIHdhcyBt
YXJrZWQgZm9yIGRlbGV0aW9uLiBXaGVuIGBpc0RlbGV0ZWRgCi0gICAgLy8gICBpcyB0cnVlIGFu
ZCBgaXNEaXJ0eWAgaXMgdHJ1ZSwgdGhlIHJlY29yZCBpcyBkZWxldGVkIGxvY2FsbHkKLSAgICAv
LyAgIGJ1dCB0aGUgZGVsZXRpb24gd2FzIG5vdCB5ZXQgcGVyc2lzdGVkLiBXaGVuIGBpc1Nhdmlu
Z2AgaXMKLSAgICAvLyAgIHRydWUsIHRoZSBjaGFuZ2UgaXMgaW4tZmxpZ2h0LiBXaGVuIGJvdGgg
YGlzRGlydHlgIGFuZAotICAgIC8vICAgYGlzU2F2aW5nYCBhcmUgZmFsc2UsIHRoZSBjaGFuZ2Ug
aGFzIHBlcnNpc3RlZC4KLSAgICAvLyAqIGlzRXJyb3I6IFRoZSBhZGFwdGVyIHJlcG9ydGVkIHRo
YXQgaXQgd2FzIHVuYWJsZSB0byBzYXZlCi0gICAgLy8gICBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBi
YWNrZW5kLiBUaGlzIG1heSBhbHNvIHJlc3VsdCBpbiB0aGUKLSAgICAvLyAgIHJlY29yZCBoYXZp
bmcgaXRzIGBpc1ZhbGlkYCBwcm9wZXJ0eSBiZWNvbWUgZmFsc2UgaWYgdGhlCi0gICAgLy8gICBh
ZGFwdGVyIHJlcG9ydGVkIHRoYXQgc2VydmVyLXNpZGUgdmFsaWRhdGlvbnMgZmFpbGVkLgotICAg
IC8vICogaXNOZXc6IFRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgb24gdGhlIGNsaWVudCBhbmQgdGhl
IGFkYXB0ZXIKLSAgICAvLyAgIGRpZCBub3QgeWV0IHJlcG9ydCB0aGF0IGl0IHdhcyBzdWNjZXNz
ZnVsbHkgc2F2ZWQuCi0gICAgLy8gKiBpc1ZhbGlkOiBUaGUgYWRhcHRlciBkaWQgbm90IHJlcG9y
dCBhbnkgc2VydmVyLXNpZGUgdmFsaWRhdGlvbgotICAgIC8vICAgZmFpbHVyZXMuCi0KLSAgICAv
LyBUaGUgZGlydHkgc3RhdGUgaXMgYSBhYnN0cmFjdCBzdGF0ZSB3aG9zZSBmdW5jdGlvbmFsaXR5
IGlzCi0gICAgLy8gc2hhcmVkIGJldHdlZW4gdGhlIGBjcmVhdGVkYCBhbmQgYHVwZGF0ZWRgIHN0
YXRlcy4KLSAgICAvLwotICAgIC8vIFRoZSBkZWxldGVkIHN0YXRlIHNoYXJlcyB0aGUgYGlzRGly
dHlgIGZsYWcgd2l0aCB0aGUKLSAgICAvLyBzdWJjbGFzc2VzIG9mIGBEaXJ0eVN0YXRlYCwgYnV0
IHdpdGggYSB2ZXJ5IGRpZmZlcmVudAotICAgIC8vIGltcGxlbWVudGF0aW9uLgotICAgIC8vCi0g
ICAgLy8gRGlydHkgc3RhdGVzIGhhdmUgdGhyZWUgY2hpbGQgc3RhdGVzOgotICAgIC8vCi0gICAg
Ly8gYHVuY29tbWl0dGVkYDogdGhlIHN0b3JlIGhhcyBub3QgeWV0IGhhbmRlZCBvZmYgdGhlIHJl
Y29yZAotICAgIC8vICAgdG8gYmUgc2F2ZWQuCi0gICAgLy8gYGluRmxpZ2h0YDogdGhlIHN0b3Jl
IGhhcyBoYW5kZWQgb2ZmIHRoZSByZWNvcmQgdG8gYmUgc2F2ZWQsCi0gICAgLy8gICBidXQgdGhl
IGFkYXB0ZXIgaGFzIG5vdCB5ZXQgYWNrbm93bGVkZ2VkIHN1Y2Nlc3MuCi0gICAgLy8gYGludmFs
aWRgOiB0aGUgcmVjb3JkIGhhcyBpbnZhbGlkIGluZm9ybWF0aW9uIGFuZCBjYW5ub3QgYmUKLSAg
ICAvLyAgIHNlbmQgdG8gdGhlIGFkYXB0ZXIgeWV0LgotICAgIHZhciBEaXJ0eVN0YXRlID0gewot
ICAgICAgaW5pdGlhbFN0YXRlOiAndW5jb21taXR0ZWQnLAotCi0gICAgICAvLyBGTEFHUwotICAg
ICAgaXNEaXJ0eTogdHJ1ZSwKLQotICAgICAgLy8gU1VCU1RBVEVTCi0KLSAgICAgIC8vIFdoZW4g
YSByZWNvcmQgZmlyc3QgYmVjb21lcyBkaXJ0eSwgaXQgaXMgYHVuY29tbWl0dGVkYC4KLSAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbG9jYWwgcGVuZGluZyBjaGFuZ2VzLCBidXQg
dGhleQotICAgICAgLy8gaGF2ZSBub3QgeWV0IGJlZ3VuIHRvIGJlIHNhdmVkLCBhbmQgYXJlIG5v
dCBpbnZhbGlkLgotICAgICAgdW5jb21taXR0ZWQ6IHsKLSAgICAgICAgLy8gRVZFTlRTCi0gICAg
ICAgIGRpZFNldFByb3BlcnR5OiBkaWRTZXRQcm9wZXJ0eSwKLQotICAgICAgICBwcm9wZXJ0eVdh
c1Jlc2V0OiBmdW5jdGlvbihyZWNvcmQsIG5hbWUpIHsKLSAgICAgICAgICB2YXIgc3RpbGxEaXJ0
eSA9IGZhbHNlOwotCi0gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiByZWNvcmQuX2F0dHJpYnV0
ZXMpIHsKLSAgICAgICAgICAgIHN0aWxsRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKCFzdGlsbERpcnR5KSB7IHJlY29yZC5zZW5k
KCdyb2xsZWRCYWNrJyk7IH0KLSAgICAgICAgfSwKLQotICAgICAgICBwdXNoZWREYXRhOiBFbWJl
ci5LLAotCi0gICAgICAgIGJlY29tZURpcnR5OiBFbWJlci5LLAotCi0gICAgICAgIHdpbGxDb21t
aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2lu
RmxpZ2h0Jyk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVsb2FkUmVjb3JkOiBmdW5jdGlvbihy
ZWNvcmQsIHJlc29sdmUpIHsKLSAgICAgICAgICByZXNvbHZlKGdldChyZWNvcmQsICdzdG9yZScp
LnJlbG9hZFJlY29yZChyZWNvcmQpKTsKLSAgICAgICAgfSwKLQotICAgICAgICByb2xsZWRCYWNr
OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCdsb2Fk
ZWQuc2F2ZWQnKTsKLSAgICAgICAgfSwKLQotICAgICAgICBiZWNhbWVJbnZhbGlkOiBmdW5jdGlv
bihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCdpbnZhbGlkJyk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgcm9sbGJhY2s6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAg
ICAgIHJlY29yZC5yb2xsYmFjaygpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvLyBP
bmNlIGEgcmVjb3JkIGhhcyBiZWVuIGhhbmRlZCBvZmYgdG8gdGhlIGFkYXB0ZXIgdG8gYmUKLSAg
ICAgIC8vIHNhdmVkLCBpdCBpcyBpbiB0aGUgJ2luIGZsaWdodCcgc3RhdGUuIENoYW5nZXMgdG8g
dGhlCi0gICAgICAvLyByZWNvcmQgY2Fubm90IGJlIG1hZGUgZHVyaW5nIHRoaXMgd2luZG93Lgot
ICAgICAgaW5GbGlnaHQ6IHsKLSAgICAgICAgLy8gRkxBR1MKLSAgICAgICAgaXNTYXZpbmc6IHRy
dWUsCi0KLSAgICAgICAgLy8gRVZFTlRTCi0gICAgICAgIGRpZFNldFByb3BlcnR5OiBkaWRTZXRQ
cm9wZXJ0eSwKLSAgICAgICAgYmVjb21lRGlydHk6IEVtYmVyLkssCi0gICAgICAgIHB1c2hlZERh
dGE6IEVtYmVyLkssCi0KLSAgICAgICAgdW5sb2FkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsK
LSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW4gb25seSB1bmxvYWQgYSByZWNvcmQgd2hp
Y2ggaXMgbm90IGluRmxpZ2h0LiBgIiArIEVtYmVyLmluc3BlY3QocmVjb3JkKSArICIgYCIsIGZh
bHNlKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBUT0RPOiBNb3JlIHJvYnVzdCBzZW1hbnRp
Y3MgYXJvdW5kIHNhdmUtd2hpbGUtaW4tZmxpZ2h0Ci0gICAgICAgIHdpbGxDb21taXQ6IEVtYmVy
LkssCi0KLSAgICAgICAgZGlkQ29tbWl0OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICB2
YXIgZGlydHlUeXBlID0gZ2V0KHRoaXMsICdkaXJ0eVR5cGUnKTsKLQotICAgICAgICAgIHJlY29y
ZC50cmFuc2l0aW9uVG8oJ3NhdmVkJyk7Ci0gICAgICAgICAgcmVjb3JkLnNlbmQoJ2ludm9rZUxp
ZmVjeWNsZUNhbGxiYWNrcycsIGRpcnR5VHlwZSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmVj
YW1lSW52YWxpZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRp
b25UbygnaW52YWxpZCcpOwotICAgICAgICAgIHJlY29yZC5zZW5kKCdpbnZva2VMaWZlY3ljbGVD
YWxsYmFja3MnKTsKLSAgICAgICAgfSwKLQotICAgICAgICBiZWNhbWVFcnJvcjogZnVuY3Rpb24o
cmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygndW5jb21taXR0ZWQnKTsK
LSAgICAgICAgICByZWNvcmQudHJpZ2dlckxhdGVyKCdiZWNhbWVFcnJvcicsIHJlY29yZCk7Ci0g
ICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8vIEEgcmVjb3JkIGlzIGluIHRoZSBgaW52YWxp
ZGAgaWYgdGhlIGFkYXB0ZXIgaGFzIGluZGljYXRlZAotICAgICAgLy8gdGhlIHRoZSByZWNvcmQg
ZmFpbGVkIHNlcnZlci1zaWRlIGludmFsaWRhdGlvbnMuCi0gICAgICBpbnZhbGlkOiB7Ci0gICAg
ICAgIC8vIEZMQUdTCi0gICAgICAgIGlzVmFsaWQ6IGZhbHNlLAotCi0gICAgICAgIC8vIEVWRU5U
UwotICAgICAgICBkZWxldGVSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJl
Y29yZC50cmFuc2l0aW9uVG8oJ2RlbGV0ZWQudW5jb21taXR0ZWQnKTsKLSAgICAgICAgICByZWNv
cmQuY2xlYXJSZWxhdGlvbnNoaXBzKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGlkU2V0UHJv
cGVydHk6IGZ1bmN0aW9uKHJlY29yZCwgY29udGV4dCkgewotICAgICAgICAgIGdldChyZWNvcmQs
ICdlcnJvcnMnKS5yZW1vdmUoY29udGV4dC5uYW1lKTsKLQotICAgICAgICAgIGRpZFNldFByb3Bl
cnR5KHJlY29yZCwgY29udGV4dCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmVjb21lRGlydHk6
IEVtYmVyLkssCi0KLSAgICAgICAgd2lsbENvbW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAg
ICAgICAgZ2V0KHJlY29yZCwgJ2Vycm9ycycpLmNsZWFyKCk7Ci0gICAgICAgICAgcmVjb3JkLnRy
YW5zaXRpb25UbygnaW5GbGlnaHQnKTsKLSAgICAgICAgfSwKLQotICAgICAgICByb2xsZWRCYWNr
OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICBnZXQocmVjb3JkLCAnZXJyb3JzJykuY2xl
YXIoKTsKLSAgICAgICAgfSwKLQotICAgICAgICBiZWNhbWVWYWxpZDogZnVuY3Rpb24ocmVjb3Jk
KSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygndW5jb21taXR0ZWQnKTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBpbnZva2VMaWZlY3ljbGVDYWxsYmFja3M6IGZ1bmN0aW9uKHJlY29y
ZCkgewotICAgICAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2JlY2FtZUludmFsaWQnLCByZWNv
cmQpOwotICAgICAgICB9LAotCi0gICAgICAgIGV4aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAg
ICAgICAgIHJlY29yZC5faW5GbGlnaHRBdHRyaWJ1dGVzID0ge307Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9OwotCi0gICAgLy8gVGhlIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgc3RhdGVzIGFyZSBj
cmVhdGVkIG91dHNpZGUgdGhlIHN0YXRlCi0gICAgLy8gY2hhcnQgc28gd2UgY2FuIHJlb3BlbiB0
aGVpciBzdWJzdGF0ZXMgYW5kIGFkZCBtaXhpbnMgYXMKLSAgICAvLyBuZWNlc3NhcnkuCi0KLSAg
ICBmdW5jdGlvbiBkZWVwQ2xvbmUob2JqZWN0KSB7Ci0gICAgICB2YXIgY2xvbmUgPSB7fSwgdmFs
dWU7Ci0KLSAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqZWN0KSB7Ci0gICAgICAgIHZhbHVlID0g
b2JqZWN0W3Byb3BdOwotICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2Jq
ZWN0JykgewotICAgICAgICAgIGNsb25lW3Byb3BdID0gZGVlcENsb25lKHZhbHVlKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbHVlOwotICAgICAgICB9Ci0g
ICAgICB9Ci0KLSAgICAgIHJldHVybiBjbG9uZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtaXhp
bihvcmlnaW5hbCwgaGFzaCkgewotICAgICAgZm9yICh2YXIgcHJvcCBpbiBoYXNoKSB7Ci0gICAg
ICAgIG9yaWdpbmFsW3Byb3BdID0gaGFzaFtwcm9wXTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IG9yaWdpbmFsOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGRpcnR5U3RhdGUob3B0aW9ucykgewot
ICAgICAgdmFyIG5ld1N0YXRlID0gZGVlcENsb25lKERpcnR5U3RhdGUpOwotICAgICAgcmV0dXJu
IG1peGluKG5ld1N0YXRlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICB2YXIgY3JlYXRlZFN0YXRl
ID0gZGlydHlTdGF0ZSh7Ci0gICAgICBkaXJ0eVR5cGU6ICdjcmVhdGVkJywKLSAgICAgIC8vIEZM
QUdTCi0gICAgICBpc05ldzogdHJ1ZQotICAgIH0pOwotCi0gICAgY3JlYXRlZFN0YXRlLnVuY29t
bWl0dGVkLnJvbGxlZEJhY2sgPSBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgIHJlY29yZC50cmFu
c2l0aW9uVG8oJ2RlbGV0ZWQuc2F2ZWQnKTsKLSAgICB9OwotCi0gICAgdmFyIHVwZGF0ZWRTdGF0
ZSA9IGRpcnR5U3RhdGUoewotICAgICAgZGlydHlUeXBlOiAndXBkYXRlZCcKLSAgICB9KTsKLQot
ICAgIGNyZWF0ZWRTdGF0ZS51bmNvbW1pdHRlZC5kZWxldGVSZWNvcmQgPSBmdW5jdGlvbihyZWNv
cmQpIHsKLSAgICAgIHJlY29yZC5jbGVhclJlbGF0aW9uc2hpcHMoKTsKLSAgICAgIHJlY29yZC50
cmFuc2l0aW9uVG8oJ2RlbGV0ZWQuc2F2ZWQnKTsKLSAgICB9OwotCi0gICAgY3JlYXRlZFN0YXRl
LnVuY29tbWl0dGVkLnJvbGxiYWNrID0gZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICBEaXJ0eVN0
YXRlLnVuY29tbWl0dGVkLnJvbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICBy
ZWNvcmQudHJhbnNpdGlvblRvKCdkZWxldGVkLnNhdmVkJyk7Ci0gICAgfTsKLQotICAgIGNyZWF0
ZWRTdGF0ZS51bmNvbW1pdHRlZC5wcm9wZXJ0eVdhc1Jlc2V0ID0gRW1iZXIuSzsKLQotICAgIGZ1
bmN0aW9uIGFzc2VydEFnYWluc3RVbmxvYWRSZWNvcmQocmVjb3JkKSB7Ci0gICAgICBFbWJlci5h
c3NlcnQoIllvdSBjYW4gb25seSB1bmxvYWQgYSByZWNvcmQgd2hpY2ggaXMgbm90IGluRmxpZ2h0
LiBgIiArIEVtYmVyLmluc3BlY3QocmVjb3JkKSArICJgIiwgZmFsc2UpOwotICAgIH0KLQotICAg
IHVwZGF0ZWRTdGF0ZS5pbkZsaWdodC51bmxvYWRSZWNvcmQgPSBhc3NlcnRBZ2FpbnN0VW5sb2Fk
UmVjb3JkOwotCi0gICAgdXBkYXRlZFN0YXRlLnVuY29tbWl0dGVkLmRlbGV0ZVJlY29yZCA9IGZ1
bmN0aW9uKHJlY29yZCkgewotICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnZGVsZXRlZC51bmNv
bW1pdHRlZCcpOwotICAgICAgcmVjb3JkLmNsZWFyUmVsYXRpb25zaGlwcygpOwotICAgIH07Ci0K
LSAgICB2YXIgUm9vdFN0YXRlID0gewotICAgICAgLy8gRkxBR1MKLSAgICAgIGlzRW1wdHk6IGZh
bHNlLAotICAgICAgaXNMb2FkaW5nOiBmYWxzZSwKLSAgICAgIGlzTG9hZGVkOiBmYWxzZSwKLSAg
ICAgIGlzRGlydHk6IGZhbHNlLAotICAgICAgaXNTYXZpbmc6IGZhbHNlLAotICAgICAgaXNEZWxl
dGVkOiBmYWxzZSwKLSAgICAgIGlzTmV3OiBmYWxzZSwKLSAgICAgIGlzVmFsaWQ6IHRydWUsCi0K
LSAgICAgIC8vIERFRkFVTFQgRVZFTlRTCi0KLSAgICAgIC8vIFRyeWluZyB0byByb2xsIGJhY2sg
aWYgeW91J3JlIG5vdCBpbiB0aGUgZGlydHkgc3RhdGUKLSAgICAgIC8vIGRvZXNuJ3QgY2hhbmdl
IHlvdXIgc3RhdGUuIEZvciBleGFtcGxlLCBpZiB5b3UncmUgaW4gdGhlCi0gICAgICAvLyBpbi1m
bGlnaHQgc3RhdGUsIHJvbGxpbmcgYmFjayB0aGUgcmVjb3JkIGRvZXNuJ3QgbW92ZQotICAgICAg
Ly8geW91IG91dCBvZiB0aGUgaW4tZmxpZ2h0IHN0YXRlLgotICAgICAgcm9sbGVkQmFjazogRW1i
ZXIuSywKLSAgICAgIHVubG9hZFJlY29yZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgIC8v
IGNsZWFyIHJlbGF0aW9uc2hpcHMgYmVmb3JlIG1vdmluZyB0byBkZWxldGVkIHN0YXRlCi0gICAg
ICAgIC8vIG90aGVyd2lzZSBpdCBmYWlscwotICAgICAgICByZWNvcmQuY2xlYXJSZWxhdGlvbnNo
aXBzKCk7Ci0gICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2RlbGV0ZWQuc2F2ZWQnKTsKLSAg
ICAgIH0sCi0KLQotICAgICAgcHJvcGVydHlXYXNSZXNldDogRW1iZXIuSywKLQotICAgICAgLy8g
U1VCU1RBVEVTCi0KLSAgICAgIC8vIEEgcmVjb3JkIGJlZ2lucyBpdHMgbGlmZWN5Y2xlIGluIHRo
ZSBgZW1wdHlgIHN0YXRlLgotICAgICAgLy8gSWYgaXRzIGRhdGEgd2lsbCBjb21lIGZyb20gdGhl
IGFkYXB0ZXIsIGl0IHdpbGwKLSAgICAgIC8vIHRyYW5zaXRpb24gaW50byB0aGUgYGxvYWRpbmdg
IHN0YXRlLiBPdGhlcndpc2UsIGlmCi0gICAgICAvLyB0aGUgcmVjb3JkIGlzIGJlaW5nIGNyZWF0
ZWQgb24gdGhlIGNsaWVudCwgaXQgd2lsbAotICAgICAgLy8gdHJhbnNpdGlvbiBpbnRvIHRoZSBg
Y3JlYXRlZGAgc3RhdGUuCi0gICAgICBlbXB0eTogewotICAgICAgICBpc0VtcHR5OiB0cnVlLAot
Ci0gICAgICAgIC8vIEVWRU5UUwotICAgICAgICBsb2FkaW5nRGF0YTogZnVuY3Rpb24ocmVjb3Jk
LCBwcm9taXNlKSB7Ci0gICAgICAgICAgcmVjb3JkLl9sb2FkaW5nUHJvbWlzZSA9IHByb21pc2U7
Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGluZycpOwotICAgICAgICB9LAot
Ci0gICAgICAgIGxvYWRlZERhdGE6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJlY29y
ZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5jcmVhdGVkLnVuY29tbWl0dGVkJyk7Ci0KLSAgICAgICAg
ICByZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHJlY29yZC5ub3RpZnlQcm9wZXJ0eUNoYW5nZSgnZGF0YScpOwotICAgICAgICAgIH0p
OwotICAgICAgICB9LAotCi0gICAgICAgIHB1c2hlZERhdGE6IGZ1bmN0aW9uKHJlY29yZCkgewot
ICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5zYXZlZCcpOwotICAgICAgICAg
IHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2RpZExvYWQnKTsKLSAgICAgICAgfQotICAgICAgfSwKLQot
ICAgICAgLy8gQSByZWNvcmQgZW50ZXJzIHRoaXMgc3RhdGUgd2hlbiB0aGUgc3RvcmUgYXNrcwot
ICAgICAgLy8gdGhlIGFkYXB0ZXIgZm9yIGl0cyBkYXRhLiBJdCByZW1haW5zIGluIHRoaXMgc3Rh
dGUKLSAgICAgIC8vIHVudGlsIHRoZSBhZGFwdGVyIHByb3ZpZGVzIHRoZSByZXF1ZXN0ZWQgZGF0
YS4KLSAgICAgIC8vCi0gICAgICAvLyBVc3VhbGx5LCB0aGlzIHByb2Nlc3MgaXMgYXN5bmNocm9u
b3VzLCB1c2luZyBhbgotICAgICAgLy8gWEhSIHRvIHJldHJpZXZlIHRoZSBkYXRhLgotICAgICAg
bG9hZGluZzogewotICAgICAgICAvLyBGTEFHUwotICAgICAgICBpc0xvYWRpbmc6IHRydWUsCi0K
LSAgICAgICAgZXhpdDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLl9sb2Fk
aW5nUHJvbWlzZSA9IG51bGw7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRVZFTlRTCi0gICAg
ICAgIHB1c2hlZERhdGE6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJlY29yZC50cmFu
c2l0aW9uVG8oJ2xvYWRlZC5zYXZlZCcpOwotICAgICAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIo
J2RpZExvYWQnKTsKLSAgICAgICAgICBzZXQocmVjb3JkLCAnaXNFcnJvcicsIGZhbHNlKTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBiZWNhbWVFcnJvcjogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAg
ICAgICAgcmVjb3JkLnRyaWdnZXJMYXRlcignYmVjYW1lRXJyb3InLCByZWNvcmQpOwotICAgICAg
ICB9LAotCi0gICAgICAgIG5vdEZvdW5kOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICBy
ZWNvcmQudHJhbnNpdGlvblRvKCdlbXB0eScpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAg
ICAvLyBBIHJlY29yZCBlbnRlcnMgdGhpcyBzdGF0ZSB3aGVuIGl0cyBkYXRhIGlzIHBvcHVsYXRl
ZC4KLSAgICAgIC8vIE1vc3Qgb2YgYSByZWNvcmQncyBsaWZlY3ljbGUgaXMgc3BlbnQgaW5zaWRl
IHN1YnN0YXRlcwotICAgICAgLy8gb2YgdGhlIGBsb2FkZWRgIHN0YXRlLgotICAgICAgbG9hZGVk
OiB7Ci0gICAgICAgIGluaXRpYWxTdGF0ZTogJ3NhdmVkJywKLQotICAgICAgICAvLyBGTEFHUwot
ICAgICAgICBpc0xvYWRlZDogdHJ1ZSwKLQotICAgICAgICAvLyBTVUJTVEFURVMKLQotICAgICAg
ICAvLyBJZiB0aGVyZSBhcmUgbm8gbG9jYWwgY2hhbmdlcyB0byBhIHJlY29yZCwgaXQgcmVtYWlu
cwotICAgICAgICAvLyBpbiB0aGUgYHNhdmVkYCBzdGF0ZS4KLSAgICAgICAgc2F2ZWQ6IHsKLSAg
ICAgICAgICBzZXR1cDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICB2YXIgYXR0cnMg
PSByZWNvcmQuX2F0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgaXNEaXJ0eSA9IGZhbHNlOwot
Ci0gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGF0dHJzKSB7Ci0gICAgICAgICAgICAgIGlm
IChhdHRycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgIGlzRGlydHkg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0RpcnR5KSB7Ci0gICAgICAgICAgICAgIHJlY29y
ZC5hZGFwdGVyRGlkRGlydHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LAotCi0gICAg
ICAgICAgLy8gRVZFTlRTCi0gICAgICAgICAgZGlkU2V0UHJvcGVydHk6IGRpZFNldFByb3BlcnR5
LAotCi0gICAgICAgICAgcHVzaGVkRGF0YTogRW1iZXIuSywKLQotICAgICAgICAgIGJlY29tZURp
cnR5OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8o
J3VwZGF0ZWQudW5jb21taXR0ZWQnKTsKLSAgICAgICAgICB9LAotCi0gICAgICAgICAgd2lsbENv
bW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRv
KCd1cGRhdGVkLmluRmxpZ2h0Jyk7Ci0gICAgICAgICAgfSwKLQotICAgICAgICAgIHJlbG9hZFJl
Y29yZDogZnVuY3Rpb24ocmVjb3JkLCByZXNvbHZlKSB7Ci0gICAgICAgICAgICByZXNvbHZlKGdl
dChyZWNvcmQsICdzdG9yZScpLnJlbG9hZFJlY29yZChyZWNvcmQpKTsKLSAgICAgICAgICB9LAot
Ci0gICAgICAgICAgZGVsZXRlUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAg
IHJlY29yZC50cmFuc2l0aW9uVG8oJ2RlbGV0ZWQudW5jb21taXR0ZWQnKTsKLSAgICAgICAgICAg
IHJlY29yZC5jbGVhclJlbGF0aW9uc2hpcHMoKTsKLSAgICAgICAgICB9LAotCi0gICAgICAgICAg
dW5sb2FkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIC8vIGNsZWFyIHJl
bGF0aW9uc2hpcHMgYmVmb3JlIG1vdmluZyB0byBkZWxldGVkIHN0YXRlCi0gICAgICAgICAgICAv
LyBvdGhlcndpc2UgaXQgZmFpbHMKLSAgICAgICAgICAgIHJlY29yZC5jbGVhclJlbGF0aW9uc2hp
cHMoKTsKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2RlbGV0ZWQuc2F2ZWQnKTsK
LSAgICAgICAgICB9LAotCi0gICAgICAgICAgZGlkQ29tbWl0OiBmdW5jdGlvbihyZWNvcmQpIHsK
LSAgICAgICAgICAgIHJlY29yZC5zZW5kKCdpbnZva2VMaWZlY3ljbGVDYWxsYmFja3MnLCBnZXQo
cmVjb3JkLCAnbGFzdERpcnR5VHlwZScpKTsKLSAgICAgICAgICB9LAotCi0gICAgICAgICAgLy8g
bG9hZGVkLnNhdmVkLm5vdEZvdW5kIHdvdWxkIGJlIHRyaWdnZXJlZCBieSBhIGZhaWxlZAotICAg
ICAgICAgIC8vIGByZWxvYWQoKWAgb24gYW4gdW5jaGFuZ2VkIHJlY29yZAotICAgICAgICAgIG5v
dEZvdW5kOiBFbWJlci5LCi0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBBIHJlY29yZCBpcyBp
biB0aGlzIHN0YXRlIGFmdGVyIGl0IGhhcyBiZWVuIGxvY2FsbHkKLSAgICAgICAgLy8gY3JlYXRl
ZCBidXQgYmVmb3JlIHRoZSBhZGFwdGVyIGhhcyBpbmRpY2F0ZWQgdGhhdAotICAgICAgICAvLyBp
dCBoYXMgYmVlbiBzYXZlZC4KLSAgICAgICAgY3JlYXRlZDogY3JlYXRlZFN0YXRlLAotCi0gICAg
ICAgIC8vIEEgcmVjb3JkIGlzIGluIHRoaXMgc3RhdGUgaWYgaXQgaGFzIGFscmVhZHkgYmVlbgot
ICAgICAgICAvLyBzYXZlZCB0byB0aGUgc2VydmVyLCBidXQgdGhlcmUgYXJlIG5ldyBsb2NhbCBj
aGFuZ2VzCi0gICAgICAgIC8vIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gc2F2ZWQuCi0gICAgICAg
IHVwZGF0ZWQ6IHVwZGF0ZWRTdGF0ZQotICAgICAgfSwKLQotICAgICAgLy8gQSByZWNvcmQgaXMg
aW4gdGhpcyBzdGF0ZSBpZiBpdCB3YXMgZGVsZXRlZCBmcm9tIHRoZSBzdG9yZS4KLSAgICAgIGRl
bGV0ZWQ6IHsKLSAgICAgICAgaW5pdGlhbFN0YXRlOiAndW5jb21taXR0ZWQnLAotICAgICAgICBk
aXJ0eVR5cGU6ICdkZWxldGVkJywKLQotICAgICAgICAvLyBGTEFHUwotICAgICAgICBpc0RlbGV0
ZWQ6IHRydWUsCi0gICAgICAgIGlzTG9hZGVkOiB0cnVlLAotICAgICAgICBpc0RpcnR5OiB0cnVl
LAotCi0gICAgICAgIC8vIFRSQU5TSVRJT05TCi0gICAgICAgIHNldHVwOiBmdW5jdGlvbihyZWNv
cmQpIHsKLSAgICAgICAgICByZWNvcmQudXBkYXRlUmVjb3JkQXJyYXlzKCk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgLy8gU1VCU1RBVEVTCi0KLSAgICAgICAgLy8gV2hlbiBhIHJlY29yZCBpcyBk
ZWxldGVkLCBpdCBlbnRlcnMgdGhlIGBzdGFydGAKLSAgICAgICAgLy8gc3RhdGUuIEl0IHdpbGwg
ZXhpdCB0aGlzIHN0YXRlIHdoZW4gdGhlIHJlY29yZAotICAgICAgICAvLyBzdGFydHMgdG8gY29t
bWl0LgotICAgICAgICB1bmNvbW1pdHRlZDogewotCi0gICAgICAgICAgLy8gRVZFTlRTCi0KLSAg
ICAgICAgICB3aWxsQ29tbWl0OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIHJlY29y
ZC50cmFuc2l0aW9uVG8oJ2luRmxpZ2h0Jyk7Ci0gICAgICAgICAgfSwKLQotICAgICAgICAgIHJv
bGxiYWNrOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIHJlY29yZC5yb2xsYmFjaygp
OwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBiZWNvbWVEaXJ0eTogRW1iZXIuSywKLSAgICAg
ICAgICBkZWxldGVSZWNvcmQ6IEVtYmVyLkssCi0KLSAgICAgICAgICByb2xsZWRCYWNrOiBmdW5j
dGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5z
YXZlZCcpOwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBBZnRlciBhIHJl
Y29yZCBzdGFydHMgY29tbWl0dGluZywgYnV0Ci0gICAgICAgIC8vIGJlZm9yZSB0aGUgYWRhcHRl
ciBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVsZXRpb24KLSAgICAgICAgLy8gaGFzIHNhdmVkIHRvIHRo
ZSBzZXJ2ZXIsIGEgcmVjb3JkIGlzIGluIHRoZQotICAgICAgICAvLyBgaW5GbGlnaHRgIHN1YnN0
YXRlIG9mIGBkZWxldGVkYC4KLSAgICAgICAgaW5GbGlnaHQ6IHsKLSAgICAgICAgICAvLyBGTEFH
UwotICAgICAgICAgIGlzU2F2aW5nOiB0cnVlLAotCi0gICAgICAgICAgLy8gRVZFTlRTCi0KLSAg
ICAgICAgICB1bmxvYWRSZWNvcmQ6IGFzc2VydEFnYWluc3RVbmxvYWRSZWNvcmQsCi0KLSAgICAg
ICAgICAvLyBUT0RPOiBNb3JlIHJvYnVzdCBzZW1hbnRpY3MgYXJvdW5kIHNhdmUtd2hpbGUtaW4t
ZmxpZ2h0Ci0gICAgICAgICAgd2lsbENvbW1pdDogRW1iZXIuSywKLSAgICAgICAgICBkaWRDb21t
aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25Ubygn
c2F2ZWQnKTsKLQotICAgICAgICAgICAgcmVjb3JkLnNlbmQoJ2ludm9rZUxpZmVjeWNsZUNhbGxi
YWNrcycpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBiZWNhbWVFcnJvcjogZnVuY3Rpb24o
cmVjb3JkKSB7Ci0gICAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCd1bmNvbW1pdHRlZCcp
OwotICAgICAgICAgICAgcmVjb3JkLnRyaWdnZXJMYXRlcignYmVjYW1lRXJyb3InLCByZWNvcmQp
OwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBPbmNlIHRoZSBhZGFwdGVy
IGluZGljYXRlcyB0aGF0IHRoZSBkZWxldGlvbiBoYXMKLSAgICAgICAgLy8gYmVlbiBzYXZlZCwg
dGhlIHJlY29yZCBlbnRlcnMgdGhlIGBzYXZlZGAgc3Vic3RhdGUKLSAgICAgICAgLy8gb2YgYGRl
bGV0ZWRgLgotICAgICAgICBzYXZlZDogewotICAgICAgICAgIC8vIEZMQUdTCi0gICAgICAgICAg
aXNEaXJ0eTogZmFsc2UsCi0KLSAgICAgICAgICBzZXR1cDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0g
ICAgICAgICAgICB2YXIgc3RvcmUgPSBnZXQocmVjb3JkLCAnc3RvcmUnKTsKLSAgICAgICAgICAg
IHN0b3JlLmRlbWF0ZXJpYWxpemVSZWNvcmQocmVjb3JkKTsKLSAgICAgICAgICB9LAotCi0gICAg
ICAgICAgaW52b2tlTGlmZWN5Y2xlQ2FsbGJhY2tzOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAg
ICAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2RpZERlbGV0ZScsIHJlY29yZCk7Ci0gICAgICAg
ICAgICByZWNvcmQudHJpZ2dlckxhdGVyKCdkaWRDb21taXQnLCByZWNvcmQpOwotICAgICAgICAg
IH0sCi0KLSAgICAgICAgICB3aWxsQ29tbWl0OiBFbWJlci5LLAotCi0gICAgICAgICAgZGlkQ29t
bWl0OiBFbWJlci5LCi0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIGludm9rZUxpZmVjeWNs
ZUNhbGxiYWNrczogZnVuY3Rpb24ocmVjb3JkLCBkaXJ0eVR5cGUpIHsKLSAgICAgICAgaWYgKGRp
cnR5VHlwZSA9PT0gJ2NyZWF0ZWQnKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyaWdnZXJMYXRlcign
ZGlkQ3JlYXRlJywgcmVjb3JkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZWNvcmQu
dHJpZ2dlckxhdGVyKCdkaWRVcGRhdGUnLCByZWNvcmQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmVjb3JkLnRyaWdnZXJMYXRlcignZGlkQ29tbWl0JywgcmVjb3JkKTsKLSAgICAgIH0KLSAgICB9
OwotCi0gICAgZnVuY3Rpb24gd2lyZVN0YXRlKG9iamVjdCwgcGFyZW50LCBuYW1lKSB7Ci0gICAg
ICAvKmpzaGludCBwcm90bzp0cnVlKi8KLSAgICAgIC8vIFRPRE86IFVzZSBPYmplY3QuY3JlYXRl
IGFuZCBjb3B5IGluc3RlYWQKLSAgICAgIG9iamVjdCA9IG1peGluKHBhcmVudCA/IEVtYmVyLmNy
ZWF0ZShwYXJlbnQpIDoge30sIG9iamVjdCk7Ci0gICAgICBvYmplY3QucGFyZW50U3RhdGUgPSBw
YXJlbnQ7Ci0gICAgICBvYmplY3Quc3RhdGVOYW1lID0gbmFtZTsKLQotICAgICAgZm9yICh2YXIg
cHJvcCBpbiBvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJv
cCkgfHwgcHJvcCA9PT0gJ3BhcmVudFN0YXRlJyB8fCBwcm9wID09PSAnc3RhdGVOYW1lJykgeyBj
b250aW51ZTsgfQotICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gJ29iamVjdCcp
IHsKLSAgICAgICAgICBvYmplY3RbcHJvcF0gPSB3aXJlU3RhdGUob2JqZWN0W3Byb3BdLCBvYmpl
Y3QsIG5hbWUgKyAiLiIgKyBwcm9wKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1
cm4gb2JqZWN0OwotICAgIH0KLQotICAgIFJvb3RTdGF0ZSA9IHdpcmVTdGF0ZShSb290U3RhdGUs
IG51bGwsICJyb290Iik7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gUm9vdFN0YXRl
OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlY29yZF9hcnJheV9tYW5h
Z2VyIiwgCi0gIFsiLi9yZWNvcmRfYXJyYXlzIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgot
ICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBSZWNvcmRBcnJheSA9
IF9fZGVwZW5kZW5jeTFfXy5SZWNvcmRBcnJheTsKLSAgICB2YXIgRmlsdGVyZWRSZWNvcmRBcnJh
eSA9IF9fZGVwZW5kZW5jeTFfXy5GaWx0ZXJlZFJlY29yZEFycmF5OwotICAgIHZhciBBZGFwdGVy
UG9wdWxhdGVkUmVjb3JkQXJyYXkgPSBfX2RlcGVuZGVuY3kxX18uQWRhcHRlclBvcHVsYXRlZFJl
Y29yZEFycmF5OwotICAgIHZhciBNYW55QXJyYXkgPSBfX2RlcGVuZGVuY3kxX18uTWFueUFycmF5
OwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLSAgICB2YXIgZm9y
RWFjaCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5mb3JFYWNoOwotCi0gICAgLyoqCi0gICAgICBA
Y2xhc3MgUmVjb3JkQXJyYXlNYW5hZ2VyCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBAcHJp
dmF0ZQotICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgKi8KLSAgICB2YXIgUmVjb3Jk
QXJyYXlNYW5hZ2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBpbml0OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgdGhpcy5maWx0ZXJlZFJlY29yZEFycmF5cyA9IEVtYmVyLk1hcFdpdGhE
ZWZhdWx0LmNyZWF0ZSh7Ci0gICAgICAgICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbigpIHsgcmV0
dXJuIFtdOyB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMuY2hhbmdlZFJlY29yZHMgPSBb
XTsKLSAgICAgICAgdGhpcy5fYWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5cyA9IFtdOwotICAg
ICAgfSwKLQotICAgICAgcmVjb3JkRGlkQ2hhbmdlOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAg
ICAgaWYgKHRoaXMuY2hhbmdlZFJlY29yZHMucHVzaChyZWNvcmQpICE9PSAxKSB7IHJldHVybjsg
fQotCi0gICAgICAgIEVtYmVyLnJ1bi5zY2hlZHVsZSgnYWN0aW9ucycsIHRoaXMsIHRoaXMudXBk
YXRlUmVjb3JkQXJyYXlzKTsKLSAgICAgIH0sCi0KLSAgICAgIHJlY29yZEFycmF5c0ZvclJlY29y
ZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgIHJlY29yZC5fcmVjb3JkQXJyYXlzID0gcmVj
b3JkLl9yZWNvcmRBcnJheXMgfHwgRW1iZXIuT3JkZXJlZFNldC5jcmVhdGUoKTsKLSAgICAgICAg
cmV0dXJuIHJlY29yZC5fcmVjb3JkQXJyYXlzOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbmV2ZXIgZGF0YSBpcyBsb2FkZWQgaW50byB0
aGUgc3RvcmUgYnkgdGhlCi0gICAgICAgIGFkYXB0ZXIgb3IgdXBkYXRlZCBieSB0aGUgYWRhcHRl
ciwgb3Igd2hlbiBhIHJlY29yZCBoYXMgY2hhbmdlZC4KLQotICAgICAgICBJdCB1cGRhdGVzIGFs
bCByZWNvcmQgYXJyYXlzIHRoYXQgYSByZWNvcmQgYmVsb25ncyB0by4KLQotICAgICAgICBUbyBh
dm9pZCB0aHJhc2hpbmcsIGl0IG9ubHkgcnVucyBhdCBtb3N0IG9uY2UgcGVyIHJ1biBsb29wLgot
Ci0gICAgICAgIEBtZXRob2QgdXBkYXRlUmVjb3JkQXJyYXlzCi0gICAgICAgIEBwYXJhbSB7Q2xh
c3N9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBjbGllbnRJZAotICAgICAg
Ki8KLSAgICAgIHVwZGF0ZVJlY29yZEFycmF5czogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZvckVh
Y2godGhpcy5jaGFuZ2VkUmVjb3JkcywgZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgaWYg
KGdldChyZWNvcmQsICdpc0RlbGV0ZWQnKSkgewotICAgICAgICAgICAgdGhpcy5fcmVjb3JkV2Fz
RGVsZXRlZChyZWNvcmQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9y
ZWNvcmRXYXNDaGFuZ2VkKHJlY29yZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsK
LQotICAgICAgICB0aGlzLmNoYW5nZWRSZWNvcmRzLmxlbmd0aCA9IDA7Ci0gICAgICB9LAotCi0g
ICAgICBfcmVjb3JkV2FzRGVsZXRlZDogZnVuY3Rpb24gKHJlY29yZCkgewotICAgICAgICB2YXIg
cmVjb3JkQXJyYXlzID0gcmVjb3JkLl9yZWNvcmRBcnJheXM7Ci0KLSAgICAgICAgaWYgKCFyZWNv
cmRBcnJheXMpIHsgcmV0dXJuOyB9Ci0KLSAgICAgICAgZm9yRWFjaChyZWNvcmRBcnJheXMsIGZ1
bmN0aW9uKGFycmF5KSB7Ci0gICAgICAgICAgYXJyYXkucmVtb3ZlUmVjb3JkKHJlY29yZCk7Ci0g
ICAgICAgIH0pOwotICAgICAgfSwKLQotICAgICAgX3JlY29yZFdhc0NoYW5nZWQ6IGZ1bmN0aW9u
IChyZWNvcmQpIHsKLSAgICAgICAgdmFyIHR5cGUgPSByZWNvcmQuY29uc3RydWN0b3IsCi0gICAg
ICAgICAgICByZWNvcmRBcnJheXMgPSB0aGlzLmZpbHRlcmVkUmVjb3JkQXJyYXlzLmdldCh0eXBl
KSwKLSAgICAgICAgICAgIGZpbHRlcjsKLQotICAgICAgICBmb3JFYWNoKHJlY29yZEFycmF5cywg
ZnVuY3Rpb24oYXJyYXkpIHsKLSAgICAgICAgICBmaWx0ZXIgPSBnZXQoYXJyYXksICdmaWx0ZXJG
dW5jdGlvbicpOwotICAgICAgICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXkoYXJyYXksIGZpbHRl
ciwgdHlwZSwgcmVjb3JkKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgLy8gbG9vcCB0
aHJvdWdoIGFsbCBtYW55QXJyYXlzIGNvbnRhaW5pbmcgYW4gdW5sb2FkZWQgY29weSBvZiB0aGlz
Ci0gICAgICAgIC8vIGNsaWVudElkIGFuZCBub3RpZnkgdGhlbSB0aGF0IHRoZSByZWNvcmQgd2Fz
IGxvYWRlZC4KLSAgICAgICAgdmFyIG1hbnlBcnJheXMgPSByZWNvcmQuX2xvYWRpbmdSZWNvcmRB
cnJheXM7Ci0KLSAgICAgICAgaWYgKG1hbnlBcnJheXMpIHsKLSAgICAgICAgICBmb3IgKHZhciBp
PTAsIGw9bWFueUFycmF5cy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgICAgICBtYW55QXJy
YXlzW2ldLmxvYWRlZFJlY29yZCgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJlY29yZC5f
bG9hZGluZ1JlY29yZEFycmF5cyA9IFtdOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgVXBkYXRlIGFuIGluZGl2aWR1YWwgZmlsdGVyLgotCi0gICAgICAgIEBtZXRo
b2QgdXBkYXRlUmVjb3JkQXJyYXkKLSAgICAgICAgQHBhcmFtIHtEUy5GaWx0ZXJlZFJlY29yZEFy
cmF5fSBhcnJheQotICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKLSAgICAgICAgQHBh
cmFtIHtDbGFzc30gdHlwZQotICAgICAgICBAcGFyYW0ge051bWJlcnxTdHJpbmd9IGNsaWVudElk
Ci0gICAgICAqLwotICAgICAgdXBkYXRlUmVjb3JkQXJyYXk6IGZ1bmN0aW9uKGFycmF5LCBmaWx0
ZXIsIHR5cGUsIHJlY29yZCkgewotICAgICAgICB2YXIgc2hvdWxkQmVJbkFycmF5OwotCi0gICAg
ICAgIGlmICghZmlsdGVyKSB7Ci0gICAgICAgICAgc2hvdWxkQmVJbkFycmF5ID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzaG91bGRCZUluQXJyYXkgPSBmaWx0ZXIocmVjb3Jk
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciByZWNvcmRBcnJheXMgPSB0aGlzLnJlY29yZEFy
cmF5c0ZvclJlY29yZChyZWNvcmQpOwotCi0gICAgICAgIGlmIChzaG91bGRCZUluQXJyYXkpIHsK
LSAgICAgICAgICByZWNvcmRBcnJheXMuYWRkKGFycmF5KTsKLSAgICAgICAgICBhcnJheS5hZGRS
ZWNvcmQocmVjb3JkKTsKLSAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkQmVJbkFycmF5KSB7Ci0g
ICAgICAgICAgcmVjb3JkQXJyYXlzLnJlbW92ZShhcnJheSk7Ci0gICAgICAgICAgYXJyYXkucmVt
b3ZlUmVjb3JkKHJlY29yZCk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAg
ICAgICBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGlmIHRoZSBgZmlsdGVyRnVuY3Rpb25gIHByb3Bl
cnR5IGlzCi0gICAgICAgIGNoYW5nZWQgb24gYSBgRFMuRmlsdGVyZWRSZWNvcmRBcnJheWAuCi0K
LSAgICAgICAgSXQgZXNzZW50aWFsbHkgcmUtcnVucyB0aGUgZmlsdGVyIGZyb20gc2NyYXRjaC4g
VGhpcyBzYW1lCi0gICAgICAgIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gdGhlIGZpbHRlciBpcyBj
cmVhdGVkIGluIHRoIGZpcnN0IHBsYWNlLgotCi0gICAgICAgIEBtZXRob2QgdXBkYXRlRmlsdGVy
Ci0gICAgICAgIEBwYXJhbSBhcnJheQotICAgICAgICBAcGFyYW0gdHlwZQotICAgICAgICBAcGFy
YW0gZmlsdGVyCi0gICAgICAqLwotICAgICAgdXBkYXRlRmlsdGVyOiBmdW5jdGlvbihhcnJheSwg
dHlwZSwgZmlsdGVyKSB7Ci0gICAgICAgIHZhciB0eXBlTWFwID0gdGhpcy5zdG9yZS50eXBlTWFw
Rm9yKHR5cGUpLAotICAgICAgICAgICAgcmVjb3JkcyA9IHR5cGVNYXAucmVjb3JkcywgcmVjb3Jk
OwotCi0gICAgICAgIGZvciAodmFyIGk9MCwgbD1yZWNvcmRzLmxlbmd0aDsgaTxsOyBpKyspIHsK
LSAgICAgICAgICByZWNvcmQgPSByZWNvcmRzW2ldOwotCi0gICAgICAgICAgaWYgKCFnZXQocmVj
b3JkLCAnaXNEZWxldGVkJykgJiYgIWdldChyZWNvcmQsICdpc0VtcHR5JykpIHsKLSAgICAgICAg
ICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXkoYXJyYXksIGZpbHRlciwgdHlwZSwgcmVjb3JkKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBD
cmVhdGUgYSBgRFMuTWFueUFycmF5YCBmb3IgYSB0eXBlIGFuZCBsaXN0IG9mIHJlY29yZCByZWZl
cmVuY2VzLCBhbmQgaW5kZXgKLSAgICAgICAgdGhlIGBNYW55QXJyYXlgIHVuZGVyIGVhY2ggcmVm
ZXJlbmNlLiBUaGlzIGFsbG93cyB1cyB0byBlZmZpY2llbnRseSByZW1vdmUKLSAgICAgICAgcmVj
b3JkcyBmcm9tIGBNYW55QXJyYXlgcyB3aGVuIHRoZXkgYXJlIGRlbGV0ZWQuCi0KLSAgICAgICAg
QG1ldGhvZCBjcmVhdGVNYW55QXJyYXkKLSAgICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZQotICAg
ICAgICBAcGFyYW0ge0FycmF5fSByZWZlcmVuY2VzCi0gICAgICAgIEByZXR1cm4ge0RTLk1hbnlB
cnJheX0KLSAgICAgICovCi0gICAgICBjcmVhdGVNYW55QXJyYXk6IGZ1bmN0aW9uKHR5cGUsIHJl
Y29yZHMpIHsKLSAgICAgICAgdmFyIG1hbnlBcnJheSA9IE1hbnlBcnJheS5jcmVhdGUoewotICAg
ICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgY29udGVudDogcmVjb3JkcywKLSAgICAgICAg
ICBzdG9yZTogdGhpcy5zdG9yZQotICAgICAgICB9KTsKLQotICAgICAgICBmb3JFYWNoKHJlY29y
ZHMsIGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHZhciBhcnJheXMgPSB0aGlzLnJlY29y
ZEFycmF5c0ZvclJlY29yZChyZWNvcmQpOwotICAgICAgICAgIGFycmF5cy5hZGQobWFueUFycmF5
KTsKLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIG1hbnlBcnJheTsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDcmVhdGUgYSBgRFMuUmVjb3JkQXJyYXlgIGZvciBh
IHR5cGUgYW5kIHJlZ2lzdGVyIGl0IGZvciB1cGRhdGVzLgotCi0gICAgICAgIEBtZXRob2QgY3Jl
YXRlUmVjb3JkQXJyYXkKLSAgICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZQotICAgICAgICBAcmV0
dXJuIHtEUy5SZWNvcmRBcnJheX0KLSAgICAgICovCi0gICAgICBjcmVhdGVSZWNvcmRBcnJheTog
ZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgYXJyYXkgPSBSZWNvcmRBcnJheS5jcmVhdGUo
ewotICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgY29udGVudDogRW1iZXIuQSgpLAot
ICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLAotICAgICAgICAgIGlzTG9hZGVkOiB0cnVlCi0g
ICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMucmVnaXN0ZXJGaWx0ZXJlZFJlY29yZEFycmF5KGFy
cmF5LCB0eXBlKTsKLQotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgQ3JlYXRlIGEgYERTLkZpbHRlcmVkUmVjb3JkQXJyYXlgIGZvciBhIHR5cGUg
YW5kIHJlZ2lzdGVyIGl0IGZvciB1cGRhdGVzLgotCi0gICAgICAgIEBtZXRob2QgY3JlYXRlRmls
dGVyZWRSZWNvcmRBcnJheQotICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCi0gICAgICAgIEBw
YXJhbSB7RnVuY3Rpb259IGZpbHRlcgotICAgICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnkgKG9w
dGlvbmFsCi0gICAgICAgIEByZXR1cm4ge0RTLkZpbHRlcmVkUmVjb3JkQXJyYXl9Ci0gICAgICAq
LwotICAgICAgY3JlYXRlRmlsdGVyZWRSZWNvcmRBcnJheTogZnVuY3Rpb24odHlwZSwgZmlsdGVy
LCBxdWVyeSkgewotICAgICAgICB2YXIgYXJyYXkgPSBGaWx0ZXJlZFJlY29yZEFycmF5LmNyZWF0
ZSh7Ci0gICAgICAgICAgcXVlcnk6IHF1ZXJ5LAotICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAg
ICAgICAgY29udGVudDogRW1iZXIuQSgpLAotICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLAot
ICAgICAgICAgIG1hbmFnZXI6IHRoaXMsCi0gICAgICAgICAgZmlsdGVyRnVuY3Rpb246IGZpbHRl
cgotICAgICAgICB9KTsKLQotICAgICAgICB0aGlzLnJlZ2lzdGVyRmlsdGVyZWRSZWNvcmRBcnJh
eShhcnJheSwgdHlwZSwgZmlsdGVyKTsKLQotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICB9
LAotCi0gICAgICAvKioKLSAgICAgICAgQ3JlYXRlIGEgYERTLkFkYXB0ZXJQb3B1bGF0ZWRSZWNv
cmRBcnJheWAgZm9yIGEgdHlwZSB3aXRoIGdpdmVuIHF1ZXJ5LgotCi0gICAgICAgIEBtZXRob2Qg
Y3JlYXRlQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5Ci0gICAgICAgIEBwYXJhbSB7Q2xhc3N9
IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHF1ZXJ5Ci0gICAgICAgIEByZXR1cm4ge0RT
LkFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheX0KLSAgICAgICovCi0gICAgICBjcmVhdGVBZGFw
dGVyUG9wdWxhdGVkUmVjb3JkQXJyYXk6IGZ1bmN0aW9uKHR5cGUsIHF1ZXJ5KSB7Ci0gICAgICAg
IHZhciBhcnJheSA9IEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheS5jcmVhdGUoewotICAgICAg
ICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgcXVlcnk6IHF1ZXJ5LAotICAgICAgICAgIGNvbnRl
bnQ6IEVtYmVyLkEoKSwKLSAgICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSwKLSAgICAgICAgICBt
YW5hZ2VyOiB0aGlzCi0gICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMuX2FkYXB0ZXJQb3B1bGF0
ZWRSZWNvcmRBcnJheXMucHVzaChhcnJheSk7Ci0KLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJlZ2lzdGVyIGEgUmVjb3JkQXJyYXkgZm9yIGEg
Z2l2ZW4gdHlwZSB0byBiZSBiYWNrZWQgYnkKLSAgICAgICAgYSBmaWx0ZXIgZnVuY3Rpb24uIFRo
aXMgd2lsbCBjYXVzZSB0aGUgYXJyYXkgdG8gdXBkYXRlCi0gICAgICAgIGF1dG9tYXRpY2FsbHkg
d2hlbiByZWNvcmRzIG9mIHRoYXQgdHlwZSBjaGFuZ2UgYXR0cmlidXRlCi0gICAgICAgIHZhbHVl
cyBvciBzdGF0ZXMuCi0KLSAgICAgICAgQG1ldGhvZCByZWdpc3RlckZpbHRlcmVkUmVjb3JkQXJy
YXkKLSAgICAgICAgQHBhcmFtIHtEUy5SZWNvcmRBcnJheX0gYXJyYXkKLSAgICAgICAgQHBhcmFt
IHtDbGFzc30gdHlwZQotICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIKLSAgICAgICov
Ci0gICAgICByZWdpc3RlckZpbHRlcmVkUmVjb3JkQXJyYXk6IGZ1bmN0aW9uKGFycmF5LCB0eXBl
LCBmaWx0ZXIpIHsKLSAgICAgICAgdmFyIHJlY29yZEFycmF5cyA9IHRoaXMuZmlsdGVyZWRSZWNv
cmRBcnJheXMuZ2V0KHR5cGUpOwotICAgICAgICByZWNvcmRBcnJheXMucHVzaChhcnJheSk7Ci0K
LSAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXIoYXJyYXksIHR5cGUsIGZpbHRlcik7Ci0gICAgICB9
LAotCi0gICAgICAvLyBJbnRlcm5hbGx5LCB3ZSBtYWludGFpbiBhIG1hcCBvZiBhbGwgdW5sb2Fk
ZWQgSURzIHJlcXVlc3RlZCBieQotICAgICAgLy8gYSBNYW55QXJyYXkuIEFzIHRoZSBhZGFwdGVy
IGxvYWRzIGRhdGEgaW50byB0aGUgc3RvcmUsIHRoZQotICAgICAgLy8gc3RvcmUgbm90aWZpZXMg
YW55IGludGVyZXN0ZWQgTWFueUFycmF5cy4gV2hlbiB0aGUgTWFueUFycmF5J3MKLSAgICAgIC8v
IHRvdGFsIG51bWJlciBvZiBsb2FkaW5nIHJlY29yZHMgZHJvcHMgdG8gemVybywgaXQgYmVjb21l
cwotICAgICAgLy8gYGlzTG9hZGVkYCBhbmQgZmlyZXMgYSBgZGlkTG9hZGAgZXZlbnQuCi0gICAg
ICByZWdpc3RlcldhaXRpbmdSZWNvcmRBcnJheTogZnVuY3Rpb24ocmVjb3JkLCBhcnJheSkgewot
ICAgICAgICB2YXIgbG9hZGluZ1JlY29yZEFycmF5cyA9IHJlY29yZC5fbG9hZGluZ1JlY29yZEFy
cmF5cyB8fCBbXTsKLSAgICAgICAgbG9hZGluZ1JlY29yZEFycmF5cy5wdXNoKGFycmF5KTsKLSAg
ICAgICAgcmVjb3JkLl9sb2FkaW5nUmVjb3JkQXJyYXlzID0gbG9hZGluZ1JlY29yZEFycmF5czsK
LSAgICAgIH0sCi0KLSAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpewotICAgICAgICB0aGlz
Ll9zdXBlcigpOwotCi0gICAgICAgIGZvckVhY2goZmxhdHRlbih2YWx1ZXModGhpcy5maWx0ZXJl
ZFJlY29yZEFycmF5cy52YWx1ZXMpKSwgZGVzdHJveSk7Ci0gICAgICAgIGZvckVhY2godGhpcy5f
YWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5cywgZGVzdHJveSk7Ci0gICAgICB9Ci0gICAgfSk7
Ci0KLSAgICBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gW107Ci0g
ICAgICB2YXIga2V5cyA9IEVtYmVyLmtleXMob2JqKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoKG9ialtrZXlzW2ld
XSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gZGVzdHJveShlbnRyeSkgewotICAgICAgZW50cnkuZGVzdHJveSgpOwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGZsYXR0ZW4obGlzdCkgewotICAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3Ro
OwotICAgICAgdmFyIHJlc3VsdCA9IEVtYmVyLkEoKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGxpc3Rb
aV0pOwotICAgICAgfQotCi0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBSZWNvcmRBcnJheU1hbmFnZXI7Ci0gIH0pOwotZGVmaW5lKCJl
bWJlci1kYXRhL2xpYi9zeXN0ZW0vcmVjb3JkX2FycmF5cyIsIAotICBbIi4vcmVjb3JkX2FycmF5
cy9yZWNvcmRfYXJyYXkiLCIuL3JlY29yZF9hcnJheXMvZmlsdGVyZWRfcmVjb3JkX2FycmF5Iiwi
Li9yZWNvcmRfYXJyYXlzL2FkYXB0ZXJfcG9wdWxhdGVkX3JlY29yZF9hcnJheSIsIi4vcmVjb3Jk
X2FycmF5cy9tYW55X2FycmF5IiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kx
X18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBl
bWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5jeTFf
X1siZGVmYXVsdCJdOwotICAgIHZhciBGaWx0ZXJlZFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5
Ml9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheSA9IF9f
ZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgIHZhciBNYW55QXJyYXkgPSBfX2RlcGVuZGVu
Y3k0X19bImRlZmF1bHQiXTsKLQotICAgIF9fZXhwb3J0c19fLlJlY29yZEFycmF5ID0gUmVjb3Jk
QXJyYXk7Ci0gICAgX19leHBvcnRzX18uRmlsdGVyZWRSZWNvcmRBcnJheSA9IEZpbHRlcmVkUmVj
b3JkQXJyYXk7Ci0gICAgX19leHBvcnRzX18uQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5ID0g
QWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5OwotICAgIF9fZXhwb3J0c19fLk1hbnlBcnJheSA9
IE1hbnlBcnJheTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9yZWNvcmRf
YXJyYXlzL2FkYXB0ZXJfcG9wdWxhdGVkX3JlY29yZF9hcnJheSIsIAotICBbIi4vcmVjb3JkX2Fy
cmF5IiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5j
eTFfX1siZGVmYXVsdCJdOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAg
Ki8KLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLQotICAgIC8q
KgotICAgICAgUmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgcmVjb3JkcyB3aG9zZSBvcmRl
ciBhbmQgbWVtYmVyc2hpcCBpcwotICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgYWRhcHRlci4gRm9y
IGV4YW1wbGUsIGEgcXVlcnkgc2VudCB0byB0aGUgYWRhcHRlcgotICAgICAgbWF5IHRyaWdnZXIg
YSBzZWFyY2ggb24gdGhlIHNlcnZlciwgd2hvc2UgcmVzdWx0cyB3b3VsZCBiZSBsb2FkZWQKLSAg
ICAgIGludG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGBBZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXlg
LgotCi0gICAgICBAY2xhc3MgQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5Ci0gICAgICBAbmFt
ZXNwYWNlIERTCi0gICAgICBAZXh0ZW5kcyBEUy5SZWNvcmRBcnJheQotICAgICovCi0gICAgdmFy
IEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheSA9IFJlY29yZEFycmF5LmV4dGVuZCh7Ci0gICAg
ICBxdWVyeTogbnVsbCwKLQotICAgICAgcmVwbGFjZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciB0eXBlID0gZ2V0KHRoaXMsICd0eXBlJykudG9TdHJpbmcoKTsKLSAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJUaGUgcmVzdWx0IG9mIGEgc2VydmVyIHF1ZXJ5IChvbiAiICsgdHlwZSArICIpIGlz
IGltbXV0YWJsZS4iKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGxv
YWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtBcnJheX0gZGF0YQotICAgICAg
Ki8KLSAgICAgIGxvYWQ6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgdmFyIHN0b3JlID0gZ2V0
KHRoaXMsICdzdG9yZScpLAotICAgICAgICAgICAgdHlwZSA9IGdldCh0aGlzLCAndHlwZScpLAot
ICAgICAgICAgICAgcmVjb3JkcyA9IHN0b3JlLnB1c2hNYW55KHR5cGUsIGRhdGEpLAotICAgICAg
ICAgICAgbWV0YSA9IHN0b3JlLm1ldGFkYXRhRm9yKHR5cGUpOwotCi0gICAgICAgIHRoaXMuc2V0
UHJvcGVydGllcyh7Ci0gICAgICAgICAgY29udGVudDogRW1iZXIuQShyZWNvcmRzKSwKLSAgICAg
ICAgICBpc0xvYWRlZDogdHJ1ZSwKLSAgICAgICAgICBtZXRhOiBFbWJlci5jb3B5KG1ldGEpCi0g
ICAgICAgIH0pOwotCi0gICAgICAgIHJlY29yZHMuZm9yRWFjaChmdW5jdGlvbihyZWNvcmQpIHsK
LSAgICAgICAgICB0aGlzLm1hbmFnZXIucmVjb3JkQXJyYXlzRm9yUmVjb3JkKHJlY29yZCkuYWRk
KHRoaXMpOwotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAvLyBUT0RPOiBzaG91bGQgdHJp
Z2dlcmluZyBkaWRMb2FkIGV2ZW50IGJlIHRoZSBsYXN0IGFjdGlvbiBvZiB0aGUgcnVuTG9vcD8K
LSAgICAgICAgRW1iZXIucnVuLm9uY2UodGhpcywgJ3RyaWdnZXInLCAnZGlkTG9hZCcpOwotICAg
ICAgfQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEFkYXB0ZXJQb3B1
bGF0ZWRSZWNvcmRBcnJheTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9y
ZWNvcmRfYXJyYXlzL2ZpbHRlcmVkX3JlY29yZF9hcnJheSIsIAotICBbIi4vcmVjb3JkX2FycmF5
IiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7
Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5jeTFf
X1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAq
LwotCi0gICAgdmFyIGdldCA9IEVtYmVyLmdldDsKLQotICAgIC8qKgotICAgICAgUmVwcmVzZW50
cyBhIGxpc3Qgb2YgcmVjb3JkcyB3aG9zZSBtZW1iZXJzaGlwIGlzIGRldGVybWluZWQgYnkgdGhl
Ci0gICAgICBzdG9yZS4gQXMgcmVjb3JkcyBhcmUgY3JlYXRlZCwgbG9hZGVkLCBvciBtb2RpZmll
ZCwgdGhlIHN0b3JlCi0gICAgICBldmFsdWF0ZXMgdGhlbSB0byBkZXRlcm1pbmUgaWYgdGhleSBz
aG91bGQgYmUgcGFydCBvZiB0aGUgcmVjb3JkCi0gICAgICBhcnJheS4KLQotICAgICAgQGNsYXNz
IEZpbHRlcmVkUmVjb3JkQXJyYXkKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRz
IERTLlJlY29yZEFycmF5Ci0gICAgKi8KLSAgICB2YXIgRmlsdGVyZWRSZWNvcmRBcnJheSA9IFJl
Y29yZEFycmF5LmV4dGVuZCh7Ci0gICAgICAvKioKLSAgICAgICAgVGhlIGZpbHRlckZ1bmN0aW9u
IGlzIGEgZnVuY3Rpb24gdXNlZCB0byB0ZXN0IHJlY29yZHMgZnJvbSB0aGUgc3RvcmUgdG8KLSAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZXkgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHJlY29yZCBhcnJh
eS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2
YXIgYWxsUGVvcGxlID0gc3RvcmUuYWxsKCdwZXJzb24nKTsKLSAgICAgICAgYWxsUGVvcGxlLm1h
cEJ5KCduYW1lJyk7IC8vIFsiVG9tIERhbGUiLCAiWWVodWRhIEthdHoiLCAiVHJlayBHbG93YWNr
aSJdCi0KLSAgICAgICAgdmFyIHBlb3BsZSA9IHN0b3JlLmZpbHRlcigncGVyc29uJywgZnVuY3Rp
b24ocGVyc29uKSB7Ci0gICAgICAgICAgaWYgKHBlcnNvbi5nZXQoJ25hbWUnKS5tYXRjaCgvS2F0
eiQvKSkgeyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB9KTsKLSAgICAgICAgcGVvcGxlLm1hcEJ5
KCduYW1lJyk7IC8vIFsiWWVodWRhIEthdHoiXQotCi0gICAgICAgIHZhciBub3RLYXR6RmlsdGVy
ID0gZnVuY3Rpb24ocGVyc29uKSB7Ci0gICAgICAgICAgcmV0dXJuICFwZXJzb24uZ2V0KCduYW1l
JykubWF0Y2goL0thdHokLyk7Ci0gICAgICAgIH07Ci0gICAgICAgIHBlb3BsZS5zZXQoJ2ZpbHRl
ckZ1bmN0aW9uJywgbm90S2F0ekZpbHRlcik7Ci0gICAgICAgIHBlb3BsZS5tYXBCeSgnbmFtZScp
OyAvLyBbIlRvbSBEYWxlIiwgIlRyZWsgR2xvd2Fja2kiXQotICAgICAgICBgYGAKLQotICAgICAg
ICBAbWV0aG9kIGZpbHRlckZ1bmN0aW9uCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29y
ZAotICAgICAgICBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJlY29yZCBzaG91bGQg
YmUgaW4gdGhlIGFycmF5Ci0gICAgICAqLwotICAgICAgZmlsdGVyRnVuY3Rpb246IG51bGwsCi0g
ICAgICBpc0xvYWRlZDogdHJ1ZSwKLQotICAgICAgcmVwbGFjZTogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciB0eXBlID0gZ2V0KHRoaXMsICd0eXBlJykudG9TdHJpbmcoKTsKLSAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJUaGUgcmVzdWx0IG9mIGEgY2xpZW50LXNpZGUgZmlsdGVyIChvbiAiICsg
dHlwZSArICIpIGlzIGltbXV0YWJsZS4iKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBAbWV0aG9kIHVwZGF0ZUZpbHRlcgotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAg
IF91cGRhdGVGaWx0ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgbWFuYWdlciA9IGdldCh0
aGlzLCAnbWFuYWdlcicpOwotICAgICAgICBtYW5hZ2VyLnVwZGF0ZUZpbHRlcih0aGlzLCBnZXQo
dGhpcywgJ3R5cGUnKSwgZ2V0KHRoaXMsICdmaWx0ZXJGdW5jdGlvbicpKTsKLSAgICAgIH0sCi0K
LSAgICAgIHVwZGF0ZUZpbHRlcjogRW1iZXIub2JzZXJ2ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAg
IEVtYmVyLnJ1bi5vbmNlKHRoaXMsIHRoaXMuX3VwZGF0ZUZpbHRlcik7Ci0gICAgICB9LCAnZmls
dGVyRnVuY3Rpb24nKQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEZp
bHRlcmVkUmVjb3JkQXJyYXk7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0v
cmVjb3JkX2FycmF5cy9tYW55X2FycmF5IiwgCi0gIFsiLi9yZWNvcmRfYXJyYXkiLCIuLi9jaGFu
Z2VzIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5j
eTJfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIFJlY29yZEFy
cmF5ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIFJlbGF0aW9uc2hpcENo
YW5nZSA9IF9fZGVwZW5kZW5jeTJfXy5SZWxhdGlvbnNoaXBDaGFuZ2U7Ci0KLSAgICAvKioKLSAg
ICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0
LCBzZXQgPSBFbWJlci5zZXQ7Ci0gICAgdmFyIG1hcCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5t
YXA7Ci0KLSAgICBmdW5jdGlvbiBzeW5jKGNoYW5nZSkgewotICAgICAgY2hhbmdlLnN5bmMoKTsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgIEEgYE1hbnlBcnJheWAgaXMgYSBgUmVjb3JkQXJyYXlg
IHRoYXQgcmVwcmVzZW50cyB0aGUgY29udGVudHMgb2YgYSBoYXMtbWFueQotICAgICAgcmVsYXRp
b25zaGlwLgotCi0gICAgICBUaGUgYE1hbnlBcnJheWAgaXMgaW5zdGFudGlhdGVkIGxhemlseSB0
aGUgZmlyc3QgdGltZSB0aGUgcmVsYXRpb25zaGlwIGlzCi0gICAgICByZXF1ZXN0ZWQuCi0KLSAg
ICAgICMjIyBJbnZlcnNlcwotCi0gICAgICBPZnRlbiwgdGhlIHJlbGF0aW9uc2hpcHMgaW4gRW1i
ZXIgRGF0YSBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlCi0gICAgICBhbiBpbnZlcnNlLiBGb3IgZXhh
bXBsZSwgaW1hZ2luZSB0aGUgZm9sbG93aW5nIG1vZGVscyBhcmUKLSAgICAgIGRlZmluZWQ6Ci0K
LSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0ID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICAgICAgY29tbWVudHM6IERTLmhhc01hbnkoJ2NvbW1lbnQnKQotICAgICAgfSk7Ci0KLSAg
ICAgIEFwcC5Db21tZW50ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgcG9zdDogRFMuYmVs
b25nc1RvKCdwb3N0JykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIElmIHlvdSBjcmVh
dGVkIGEgbmV3IGluc3RhbmNlIG9mIGBBcHAuUG9zdGAgYW5kIGFkZGVkCi0gICAgICBhIGBBcHAu
Q29tbWVudGAgcmVjb3JkIHRvIGl0cyBgY29tbWVudHNgIGhhcy1tYW55Ci0gICAgICByZWxhdGlv
bnNoaXAsIHlvdSB3b3VsZCBleHBlY3QgdGhlIGNvbW1lbnQncyBgcG9zdGAKLSAgICAgIHByb3Bl
cnR5IHRvIGJlIHNldCB0byB0aGUgcG9zdCB0aGF0IGNvbnRhaW5lZAotICAgICAgdGhlIGhhcy1t
YW55LgotCi0gICAgICBXZSBjYWxsIHRoZSByZWNvcmQgdG8gd2hpY2ggYSByZWxhdGlvbnNoaXAg
YmVsb25ncyB0aGUKLSAgICAgIHJlbGF0aW9uc2hpcCdzIF9vd25lcl8uCi0KLSAgICAgIEBjbGFz
cyBNYW55QXJyYXkKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIERTLlJlY29y
ZEFycmF5Ci0gICAgKi8KLSAgICB2YXIgTWFueUFycmF5ID0gUmVjb3JkQXJyYXkuZXh0ZW5kKHsK
LSAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwotICAgICAgICB0aGlzLl9jaGFuZ2VzVG9TeW5jID0gRW1iZXIuT3JkZXJl
ZFNldC5jcmVhdGUoKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgcHJvcGVy
dHkgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwCi0KLSAgICAgICAgQHByb3BlcnR5IHtTdHJpbmd9
IG5hbWUKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBuYW1lOiBudWxsLAotCi0g
ICAgICAvKioKLSAgICAgICAgVGhlIHJlY29yZCB0byB3aGljaCB0aGlzIHJlbGF0aW9uc2hpcCBi
ZWxvbmdzLgotCi0gICAgICAgIEBwcm9wZXJ0eSB7RFMuTW9kZWx9IG93bmVyCi0gICAgICAgIEBw
cml2YXRlCi0gICAgICAqLwotICAgICAgb3duZXI6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAg
ICBgdHJ1ZWAgaWYgdGhlIHJlbGF0aW9uc2hpcCBpcyBwb2x5bW9ycGhpYywgYGZhbHNlYCBvdGhl
cndpc2UuCi0KLSAgICAgICAgQHByb3BlcnR5IHtCb29sZWFufSBpc1BvbHltb3JwaGljCi0gICAg
ICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgaXNQb2x5bW9ycGhpYzogZmFsc2UsCi0KLSAg
ICAgIC8vIExPQURJTkcgU1RBVEUKLQotICAgICAgaXNMb2FkZWQ6IGZhbHNlLAotCi0gICAgICAv
KioKLSAgICAgICAgVXNlZCBmb3IgYXN5bmMgYGhhc01hbnlgIGFycmF5cwotICAgICAgICB0byBr
ZWVwIHRyYWNrIG9mIHdoZW4gdGhleSB3aWxsIHJlc29sdmUuCi0KLSAgICAgICAgQHByb3BlcnR5
IHtFbWJlci5SU1ZQLlByb21pc2V9IHByb21pc2UKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICov
Ci0gICAgICBwcm9taXNlOiBudWxsLAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBsb2Fk
aW5nUmVjb3Jkc0NvdW50Ci0gICAgICAgIEBwYXJhbSB7TnVtYmVyfSBjb3VudAotICAgICAgICBA
cHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGxvYWRpbmdSZWNvcmRzQ291bnQ6IGZ1bmN0aW9uKGNv
dW50KSB7Ci0gICAgICAgIHRoaXMubG9hZGluZ1JlY29yZHNDb3VudCA9IGNvdW50OwotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgbG9hZGVkUmVjb3JkCi0gICAgICAgIEBw
cml2YXRlCi0gICAgICAqLwotICAgICAgbG9hZGVkUmVjb3JkOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdGhpcy5sb2FkaW5nUmVjb3Jkc0NvdW50LS07Ci0gICAgICAgIGlmICh0aGlzLmxvYWRpbmdS
ZWNvcmRzQ291bnQgPT09IDApIHsKLSAgICAgICAgICBzZXQodGhpcywgJ2lzTG9hZGVkJywgdHJ1
ZSk7Ci0gICAgICAgICAgdGhpcy50cmlnZ2VyKCdkaWRMb2FkJyk7Ci0gICAgICAgIH0KLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGZldGNoCi0gICAgICAgIEBwcml2YXRl
Ci0gICAgICAqLwotICAgICAgZmV0Y2g6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcmVjb3Jk
cyA9IGdldCh0aGlzLCAnY29udGVudCcpLAotICAgICAgICAgICAgc3RvcmUgPSBnZXQodGhpcywg
J3N0b3JlJyksCi0gICAgICAgICAgICBvd25lciA9IGdldCh0aGlzLCAnb3duZXInKTsKLQotICAg
ICAgICB2YXIgdW5sb2FkZWRSZWNvcmRzID0gcmVjb3Jkcy5maWx0ZXJQcm9wZXJ0eSgnaXNFbXB0
eScsIHRydWUpOwotICAgICAgICBzdG9yZS5mZXRjaE1hbnkodW5sb2FkZWRSZWNvcmRzLCBvd25l
cik7Ci0gICAgICB9LAotCi0gICAgICAvLyBPdmVycmlkZXMgRW1iZXIuQXJyYXkncyByZXBsYWNl
IG1ldGhvZCB0byBpbXBsZW1lbnQKLSAgICAgIHJlcGxhY2VDb250ZW50OiBmdW5jdGlvbihpbmRl
eCwgcmVtb3ZlZCwgYWRkZWQpIHsKLSAgICAgICAgLy8gTWFwIHRoZSBhcnJheSBvZiByZWNvcmQg
b2JqZWN0cyBpbnRvIGFuIGFycmF5IG9mICBjbGllbnQgaWRzLgotICAgICAgICBhZGRlZCA9IG1h
cChhZGRlZCwgZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
Y2Fubm90IGFkZCAnIiArIHJlY29yZC5jb25zdHJ1Y3Rvci50eXBlS2V5ICsgIicgcmVjb3JkcyB0
byB0aGlzIHJlbGF0aW9uc2hpcCAob25seSAnIiArIHRoaXMudHlwZS50eXBlS2V5ICsgIicgYWxs
b3dlZCkiLCAhdGhpcy50eXBlIHx8IHJlY29yZCBpbnN0YW5jZW9mIHRoaXMudHlwZSk7Ci0gICAg
ICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgdGhpcy5f
c3VwZXIoaW5kZXgsIHJlbW92ZWQsIGFkZGVkKTsKLSAgICAgIH0sCi0KLSAgICAgIGFycmFuZ2Vk
Q29udGVudERpZENoYW5nZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIEVtYmVyLnJ1bi5vbmNlKHRo
aXMsICdmZXRjaCcpOwotICAgICAgfSwKLQotICAgICAgYXJyYXlDb250ZW50V2lsbENoYW5nZTog
ZnVuY3Rpb24oaW5kZXgsIHJlbW92ZWQsIGFkZGVkKSB7Ci0gICAgICAgIHZhciBvd25lciA9IGdl
dCh0aGlzLCAnb3duZXInKSwKLSAgICAgICAgICAgIG5hbWUgPSBnZXQodGhpcywgJ25hbWUnKTsK
LQotICAgICAgICBpZiAoIW93bmVyLl9zdXNwZW5kZWRSZWxhdGlvbnNoaXBzKSB7Ci0gICAgICAg
ICAgLy8gVGhpcyBjb2RlIGlzIHRoZSBmaXJzdCBoYWxmIG9mIGNvZGUgdGhhdCBjb250aW51ZXMg
aW5zaWRlCi0gICAgICAgICAgLy8gb2YgYXJyYXlDb250ZW50RGlkQ2hhbmdlLiBJdCBnZXRzIG9y
IGNyZWF0ZXMgYSBjaGFuZ2UgZnJvbQotICAgICAgICAgIC8vIHRoZSBjaGlsZCBvYmplY3QsIGFk
ZHMgdGhlIGN1cnJlbnQgb3duZXIgYXMgdGhlIG9sZAotICAgICAgICAgIC8vIHBhcmVudCBpZiB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBvYmplY3Qgd2FzIHJlbW92ZWQKLSAgICAgICAgICAv
LyBmcm9tIGEgTWFueUFycmF5LCBhbmQgc2V0cyBgbmV3UGFyZW50YCB0byBudWxsLgotICAgICAg
ICAgIC8vCi0gICAgICAgICAgLy8gTGF0ZXIsIGlmIHRoZSBvYmplY3QgaXMgYWRkZWQgdG8gYW5v
dGhlciBNYW55QXJyYXksCi0gICAgICAgICAgLy8gdGhlIGBhcnJheUNvbnRlbnREaWRDaGFuZ2Vg
IHdpbGwgc2V0IGBuZXdQYXJlbnRgIG9uCi0gICAgICAgICAgLy8gdGhlIGNoYW5nZS4KLSAgICAg
ICAgICBmb3IgKHZhciBpPWluZGV4OyBpPGluZGV4K3JlbW92ZWQ7IGkrKykgewotICAgICAgICAg
ICAgdmFyIHJlY29yZCA9IGdldCh0aGlzLCAnY29udGVudCcpLm9iamVjdEF0KGkpOwotCi0gICAg
ICAgICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZShvd25l
ciwgcmVjb3JkLCBnZXQodGhpcywgJ3N0b3JlJyksIHsKLSAgICAgICAgICAgICAgcGFyZW50VHlw
ZTogb3duZXIuY29uc3RydWN0b3IsCi0gICAgICAgICAgICAgIGNoYW5nZVR5cGU6ICJyZW1vdmUi
LAotICAgICAgICAgICAgICBraW5kOiAiaGFzTWFueSIsCi0gICAgICAgICAgICAgIGtleTogbmFt
ZQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMuYWRk
KGNoYW5nZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB9LAotCi0gICAgICBhcnJheUNv
bnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKGluZGV4LCByZW1vdmVkLCBhZGRlZCkgewotICAgICAg
ICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICAgIHZhciBvd25l
ciA9IGdldCh0aGlzLCAnb3duZXInKSwKLSAgICAgICAgICAgIG5hbWUgPSBnZXQodGhpcywgJ25h
bWUnKSwKLSAgICAgICAgICAgIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScpOwotCi0gICAgICAg
IGlmICghb3duZXIuX3N1c3BlbmRlZFJlbGF0aW9uc2hpcHMpIHsKLSAgICAgICAgICAvLyBUaGlz
IGNvZGUgaXMgdGhlIHNlY29uZCBoYWxmIG9mIGNvZGUgdGhhdCBzdGFydGVkIGluCi0gICAgICAg
ICAgLy8gYGFycmF5Q29udGVudFdpbGxDaGFuZ2VgLiBJdCBnZXRzIG9yIGNyZWF0ZXMgYSBjaGFu
Z2UKLSAgICAgICAgICAvLyBmcm9tIHRoZSBjaGlsZCBvYmplY3QsIGFuZCBhZGRzIHRoZSBjdXJy
ZW50IG93bmVyIGFzCi0gICAgICAgICAgLy8gdGhlIG5ldyBwYXJlbnQuCi0gICAgICAgICAgZm9y
ICh2YXIgaT1pbmRleDsgaTxpbmRleCthZGRlZDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcmVj
b3JkID0gZ2V0KHRoaXMsICdjb250ZW50Jykub2JqZWN0QXQoaSk7Ci0KLSAgICAgICAgICAgIHZh
ciBjaGFuZ2UgPSBSZWxhdGlvbnNoaXBDaGFuZ2UuY3JlYXRlQ2hhbmdlKG93bmVyLCByZWNvcmQs
IHN0b3JlLCB7Ci0gICAgICAgICAgICAgIHBhcmVudFR5cGU6IG93bmVyLmNvbnN0cnVjdG9yLAot
ICAgICAgICAgICAgICBjaGFuZ2VUeXBlOiAiYWRkIiwKLSAgICAgICAgICAgICAga2luZDoiaGFz
TWFueSIsCi0gICAgICAgICAgICAgIGtleTogbmFtZQotICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICBjaGFuZ2UuaGFzTWFueU5hbWUgPSBuYW1lOwotCi0gICAgICAgICAgICB0aGlzLl9jaGFu
Z2VzVG9TeW5jLmFkZChjaGFuZ2UpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8vIFdlIHdh
aXQgdW50aWwgdGhlIGFycmF5IGhhcyBmaW5pc2hlZCBiZWluZwotICAgICAgICAgIC8vIG11dGF0
ZWQgYmVmb3JlIHN5bmNpbmcgdGhlIE9uZVRvTWFueUNoYW5nZXMgY3JlYXRlZAotICAgICAgICAg
IC8vIGluIGFycmF5Q29udGVudFdpbGxDaGFuZ2UsIHNvIHRoYXQgdGhlIGFycmF5Ci0gICAgICAg
ICAgLy8gbWVtYmVyc2hpcCB0ZXN0IGluIHRoZSBzeW5jKCkgbG9naWMgb3BlcmF0ZXMKLSAgICAg
ICAgICAvLyBvbiB0aGUgZmluYWwgcmVzdWx0cy4KLSAgICAgICAgICB0aGlzLl9jaGFuZ2VzVG9T
eW5jLmZvckVhY2goc3luYyk7Ci0KLSAgICAgICAgICB0aGlzLl9jaGFuZ2VzVG9TeW5jLmNsZWFy
KCk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDcmVhdGUgYSBj
aGlsZCByZWNvcmQgd2l0aGluIHRoZSBvd25lcgotCi0gICAgICAgIEBtZXRob2QgY3JlYXRlUmVj
b3JkCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoCi0gICAg
ICAgIEByZXR1cm4ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICovCi0gICAgICBjcmVhdGVSZWNv
cmQ6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgdmFyIG93bmVyID0gZ2V0KHRoaXMsICdvd25l
cicpLAotICAgICAgICAgICAgc3RvcmUgPSBnZXQob3duZXIsICdzdG9yZScpLAotICAgICAgICAg
ICAgdHlwZSA9IGdldCh0aGlzLCAndHlwZScpLAotICAgICAgICAgICAgcmVjb3JkOwotCi0gICAg
ICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbm5vdCBhZGQgJyIgKyB0eXBlLnR5cGVLZXkgKyAiJyBy
ZWNvcmRzIHRvIHRoaXMgcG9seW1vcnBoaWMgcmVsYXRpb25zaGlwLiIsICFnZXQodGhpcywgJ2lz
UG9seW1vcnBoaWMnKSk7Ci0KLSAgICAgICAgcmVjb3JkID0gc3RvcmUuY3JlYXRlUmVjb3JkLmNh
bGwoc3RvcmUsIHR5cGUsIGhhc2gpOwotICAgICAgICB0aGlzLnB1c2hPYmplY3QocmVjb3JkKTsK
LQotICAgICAgICByZXR1cm4gcmVjb3JkOwotICAgICAgfQotICAgIH0pOwotCi0gICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IE1hbnlBcnJheTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEv
bGliL3N5c3RlbS9yZWNvcmRfYXJyYXlzL3JlY29yZF9hcnJheSIsIAotICBbIi4uL3N0b3JlIiwi
ZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAg
Ki8KLQotICAgIHZhciBQcm9taXNlQXJyYXkgPSBfX2RlcGVuZGVuY3kxX18uUHJvbWlzZUFycmF5
OwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLQotICAgIC8qKgot
ICAgICAgQSByZWNvcmQgYXJyYXkgaXMgYW4gYXJyYXkgdGhhdCBjb250YWlucyByZWNvcmRzIG9m
IGEgY2VydGFpbiB0eXBlLiBUaGUgcmVjb3JkCi0gICAgICBhcnJheSBtYXRlcmlhbGl6ZXMgcmVj
b3JkcyBhcyBuZWVkZWQgd2hlbiB0aGV5IGFyZSByZXRyaWV2ZWQgZm9yIHRoZSBmaXJzdAotICAg
ICAgdGltZS4gWW91IHNob3VsZCBub3QgY3JlYXRlIHJlY29yZCBhcnJheXMgeW91cnNlbGYuIElu
c3RlYWQsIGFuIGluc3RhbmNlIG9mCi0gICAgICBgRFMuUmVjb3JkQXJyYXlgIG9yIGl0cyBzdWJj
bGFzc2VzIHdpbGwgYmUgcmV0dXJuZWQgYnkgeW91ciBhcHBsaWNhdGlvbidzIHN0b3JlCi0gICAg
ICBpbiByZXNwb25zZSB0byBxdWVyaWVzLgotCi0gICAgICBAY2xhc3MgUmVjb3JkQXJyYXkKLSAg
ICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVtYmVyLkFycmF5UHJveHkKLSAgICAg
IEB1c2VzIEVtYmVyLkV2ZW50ZWQKLSAgICAqLwotCi0gICAgdmFyIFJlY29yZEFycmF5ID0gRW1i
ZXIuQXJyYXlQcm94eS5leHRlbmQoRW1iZXIuRXZlbnRlZCwgewotICAgICAgLyoqCi0gICAgICAg
IFRoZSBtb2RlbCB0eXBlIGNvbnRhaW5lZCBieSB0aGlzIHJlY29yZCBhcnJheS4KLQotICAgICAg
ICBAcHJvcGVydHkgdHlwZQotICAgICAgICBAdHlwZSBEUy5Nb2RlbAotICAgICAgKi8KLSAgICAg
IHR5cGU6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgYXJyYXkgb2YgY2xpZW50IGlk
cyBiYWNraW5nIHRoZSByZWNvcmQgYXJyYXkuIFdoZW4gYQotICAgICAgICByZWNvcmQgaXMgcmVx
dWVzdGVkIGZyb20gdGhlIHJlY29yZCBhcnJheSwgdGhlIHJlY29yZAotICAgICAgICBmb3IgdGhl
IGNsaWVudCBpZCBhdCB0aGUgc2FtZSBpbmRleCBpcyBtYXRlcmlhbGl6ZWQsIGlmCi0gICAgICAg
IG5lY2Vzc2FyeSwgYnkgdGhlIHN0b3JlLgotCi0gICAgICAgIEBwcm9wZXJ0eSBjb250ZW50Ci0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAgIEB0eXBlIEVtYmVyLkFycmF5Ci0gICAgICAqLwotICAg
ICAgY29udGVudDogbnVsbCwKLQotICAgICAgLyoqCi0gICAgICAgIFRoZSBmbGFnIHRvIHNpZ25h
bCBhIGBSZWNvcmRBcnJheWAgaXMgY3VycmVudGx5IGxvYWRpbmcgZGF0YS4KLQotICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcGVvcGxlID0gc3Rv
cmUuYWxsKCdwZXJzb24nKTsKLSAgICAgICAgcGVvcGxlLmdldCgnaXNMb2FkZWQnKTsgLy8gdHJ1
ZQotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgaXNMb2FkZWQKLSAgICAgICAgQHR5
cGUgQm9vbGVhbgotICAgICAgKi8KLSAgICAgIGlzTG9hZGVkOiBmYWxzZSwKLSAgICAgIC8qKgot
ICAgICAgICBUaGUgZmxhZyB0byBzaWduYWwgYSBgUmVjb3JkQXJyYXlgIGlzIGN1cnJlbnRseSBs
b2FkaW5nIGRhdGEuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgdmFyIHBlb3BsZSA9IHN0b3JlLmFsbCgncGVyc29uJyk7Ci0gICAgICAgIHBlb3Bs
ZS5nZXQoJ2lzVXBkYXRpbmcnKTsgLy8gZmFsc2UKLSAgICAgICAgcGVvcGxlLnVwZGF0ZSgpOwot
ICAgICAgICBwZW9wbGUuZ2V0KCdpc1VwZGF0aW5nJyk7IC8vIHRydWUKLSAgICAgICAgYGBgCi0K
LSAgICAgICAgQHByb3BlcnR5IGlzVXBkYXRpbmcKLSAgICAgICAgQHR5cGUgQm9vbGVhbgotICAg
ICAgKi8KLSAgICAgIGlzVXBkYXRpbmc6IGZhbHNlLAotCi0gICAgICAvKioKLSAgICAgICAgVGhl
IHN0b3JlIHRoYXQgY3JlYXRlZCB0aGlzIHJlY29yZCBhcnJheS4KLQotICAgICAgICBAcHJvcGVy
dHkgc3RvcmUKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHR5cGUgRFMuU3RvcmUKLSAgICAg
ICovCi0gICAgICBzdG9yZTogbnVsbCwKLQotICAgICAgLyoqCi0gICAgICAgIFJldHJpZXZlcyBh
biBvYmplY3QgZnJvbSB0aGUgY29udGVudCBieSBpbmRleC4KLQotICAgICAgICBAbWV0aG9kIG9i
amVjdEF0Q29udGVudAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge051bWJlcn0g
aW5kZXgKLSAgICAgICAgQHJldHVybiB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAg
IG9iamVjdEF0Q29udGVudDogZnVuY3Rpb24oaW5kZXgpIHsKLSAgICAgICAgdmFyIGNvbnRlbnQg
PSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLQotICAgICAgICByZXR1cm4gY29udGVudC5vYmplY3RB
dChpbmRleCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVXNlZCB0byBnZXQgdGhl
IGxhdGVzdCB2ZXJzaW9uIG9mIGFsbCBvZiB0aGUgcmVjb3JkcyBpbiB0aGlzIGFycmF5Ci0gICAg
ICAgIGZyb20gdGhlIGFkYXB0ZXIuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgdmFyIHBlb3BsZSA9IHN0b3JlLmFsbCgncGVyc29uJyk7Ci0gICAg
ICAgIHBlb3BsZS5nZXQoJ2lzVXBkYXRpbmcnKTsgLy8gZmFsc2UKLSAgICAgICAgcGVvcGxlLnVw
ZGF0ZSgpOwotICAgICAgICBwZW9wbGUuZ2V0KCdpc1VwZGF0aW5nJyk7IC8vIHRydWUKLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCB1cGRhdGUKLSAgICAgICovCi0gICAgICB1cGRhdGU6
IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoZ2V0KHRoaXMsICdpc1VwZGF0aW5nJykpIHsgcmV0
dXJuOyB9Ci0KLSAgICAgICAgdmFyIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScpLAotICAgICAg
ICAgICAgdHlwZSA9IGdldCh0aGlzLCAndHlwZScpOwotCi0gICAgICAgIHJldHVybiBzdG9yZS5m
ZXRjaEFsbCh0eXBlLCB0aGlzKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBBZGRz
IGEgcmVjb3JkIHRvIHRoZSBgUmVjb3JkQXJyYXlgLgotCi0gICAgICAgIEBtZXRob2QgYWRkUmVj
b3JkCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAot
ICAgICAgKi8KLSAgICAgIGFkZFJlY29yZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgIGdl
dCh0aGlzLCAnY29udGVudCcpLmFkZE9iamVjdChyZWNvcmQpOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIFJlbW92ZXMgYSByZWNvcmQgdG8gdGhlIGBSZWNvcmRBcnJheWAuCi0KLSAg
ICAgICAgQG1ldGhvZCByZW1vdmVSZWNvcmQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBh
cmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgcmVtb3ZlUmVjb3JkOiBmdW5j
dGlvbihyZWNvcmQpIHsKLSAgICAgICAgZ2V0KHRoaXMsICdjb250ZW50JykucmVtb3ZlT2JqZWN0
KHJlY29yZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgU2F2ZXMgYWxsIG9mIHRo
ZSByZWNvcmRzIGluIHRoZSBgUmVjb3JkQXJyYXlgLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciBtZXNzYWdlcyA9IHN0b3JlLmFsbCgnbWVz
c2FnZScpOwotICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICAgICAgICBtZXNzYWdlLnNldCgnaGFzQmVlblNlZW4nLCB0cnVlKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIG1lc3NhZ2VzLnNhdmUoKTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBz
YXZlCi0gICAgICAgIEByZXR1cm4ge0RTLlByb21pc2VBcnJheX0gcHJvbWlzZQotICAgICAgKi8K
LSAgICAgIHNhdmU6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcHJvbWlzZUxhYmVsID0gIkRT
OiBSZWNvcmRBcnJheSNzYXZlICIgKyBnZXQodGhpcywgJ3R5cGUnKTsKLSAgICAgICAgdmFyIHBy
b21pc2UgPSBFbWJlci5SU1ZQLmFsbCh0aGlzLmludm9rZSgic2F2ZSIpLCBwcm9taXNlTGFiZWwp
LnRoZW4oZnVuY3Rpb24oYXJyYXkpIHsKLSAgICAgICAgICByZXR1cm4gRW1iZXIuQShhcnJheSk7
Ci0gICAgICAgIH0sIG51bGwsICJEUzogUmVjb3JkQXJyYXkjc2F2ZSBhcHBseSBFbWJlci5OYXRp
dmVBcnJheSIpOwotCi0gICAgICAgIHJldHVybiBQcm9taXNlQXJyYXkuY3JlYXRlKHsgcHJvbWlz
ZTogcHJvbWlzZSB9KTsKLSAgICAgIH0sCi0KLSAgICAgIF9kaXNzb2NpYXRlRnJvbU93blJlY29y
ZHM6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgYXJyYXkgPSB0aGlzOwotCi0gICAgICAgIHRo
aXMuZm9yRWFjaChmdW5jdGlvbihyZWNvcmQpewotICAgICAgICAgIHZhciByZWNvcmRBcnJheXMg
PSByZWNvcmQuX3JlY29yZEFycmF5czsKLQotICAgICAgICAgIGlmIChyZWNvcmRBcnJheXMpIHsK
LSAgICAgICAgICAgIHJlY29yZEFycmF5cy5yZW1vdmUoYXJyYXkpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gICAgICB9LAotCi0gICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKXsKLSAg
ICAgICAgdGhpcy5fZGlzc29jaWF0ZUZyb21Pd25SZWNvcmRzKCk7Ci0gICAgICAgIHRoaXMuX3N1
cGVyKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0g
UmVjb3JkQXJyYXk7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0vcmVsYXRp
b25zaGlwLW1ldGEiLCAKLSAgWyIuLi8uLi8uLi9lbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbSIs
ImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgc2luZ3VsYXJpemUgPSBfX2RlcGVuZGVuY3kxX18u
c2luZ3VsYXJpemU7Ci0KLSAgICBmdW5jdGlvbiB0eXBlRm9yUmVsYXRpb25zaGlwTWV0YShzdG9y
ZSwgbWV0YSkgewotICAgICAgdmFyIHR5cGVLZXksIHR5cGU7Ci0KLSAgICAgIHR5cGVLZXkgPSBt
ZXRhLnR5cGUgfHwgbWV0YS5rZXk7Ci0gICAgICBpZiAodHlwZW9mIHR5cGVLZXkgPT09ICdzdHJp
bmcnKSB7Ci0gICAgICAgIGlmIChtZXRhLmtpbmQgPT09ICdoYXNNYW55JykgewotICAgICAgICAg
IHR5cGVLZXkgPSBzaW5ndWxhcml6ZSh0eXBlS2V5KTsKLSAgICAgICAgfQotICAgICAgICB0eXBl
ID0gc3RvcmUubW9kZWxGb3IodHlwZUtleSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0eXBl
ID0gbWV0YS50eXBlOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdHlwZTsKLSAgICB9Ci0KLSAg
ICBfX2V4cG9ydHNfXy50eXBlRm9yUmVsYXRpb25zaGlwTWV0YSA9IHR5cGVGb3JSZWxhdGlvbnNo
aXBNZXRhO2Z1bmN0aW9uIHJlbGF0aW9uc2hpcEZyb21NZXRhKHN0b3JlLCBtZXRhKSB7Ci0gICAg
ICByZXR1cm4gewotICAgICAgICBrZXk6ICBtZXRhLmtleSwKLSAgICAgICAga2luZDogbWV0YS5r
aW5kLAotICAgICAgICB0eXBlOiB0eXBlRm9yUmVsYXRpb25zaGlwTWV0YShzdG9yZSwgbWV0YSks
Ci0gICAgICAgIG9wdGlvbnM6ICAgIG1ldGEub3B0aW9ucywKLSAgICAgICAgcGFyZW50VHlwZTog
bWV0YS5wYXJlbnRUeXBlLAotICAgICAgICBpc1JlbGF0aW9uc2hpcDogdHJ1ZQotICAgICAgfTsK
LSAgICB9Ci0KLSAgICBfX2V4cG9ydHNfXy5yZWxhdGlvbnNoaXBGcm9tTWV0YSA9IHJlbGF0aW9u
c2hpcEZyb21NZXRhOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlbGF0
aW9uc2hpcHMiLCAKLSAgWyIuL3JlbGF0aW9uc2hpcHMvYmVsb25nc190byIsIi4vcmVsYXRpb25z
aGlwcy9oYXNfbWFueSIsIi4uL3N5c3RlbS9yZWxhdGlvbnNoaXBzL2V4dCIsImV4cG9ydHMiXSwK
LSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBA
bW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIGJlbG9uZ3NUbyA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBoYXNNYW55ID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0KLQotICAgIF9fZXhwb3J0c19fLmJlbG9uZ3NUbyA9IGJlbG9uZ3NUbzsKLSAg
ICBfX2V4cG9ydHNfXy5oYXNNYW55ID0gaGFzTWFueTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRh
dGEvbGliL3N5c3RlbS9yZWxhdGlvbnNoaXBzL2JlbG9uZ3NfdG8iLCAKLSAgWyIuLi9tb2RlbCIs
Ii4uL3N0b3JlIiwiLi4vY2hhbmdlcyIsIi4uL3JlbGF0aW9uc2hpcC1tZXRhIiwiZXhwb3J0cyJd
LAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3Qi
OwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldCwKLSAgICAgICAgaXNO
b25lID0gRW1iZXIuaXNOb25lOwotCi0gICAgdmFyIFByb21pc2UgPSBFbWJlci5SU1ZQLlByb21p
c2U7Ci0KLSAgICB2YXIgTW9kZWwgPSBfX2RlcGVuZGVuY3kxX18uTW9kZWw7Ci0gICAgdmFyIFBy
b21pc2VPYmplY3QgPSBfX2RlcGVuZGVuY3kyX18uUHJvbWlzZU9iamVjdDsKLSAgICB2YXIgUmVs
YXRpb25zaGlwQ2hhbmdlID0gX19kZXBlbmRlbmN5M19fLlJlbGF0aW9uc2hpcENoYW5nZTsKLSAg
ICB2YXIgcmVsYXRpb25zaGlwRnJvbU1ldGEgPSBfX2RlcGVuZGVuY3k0X18ucmVsYXRpb25zaGlw
RnJvbU1ldGE7Ci0gICAgdmFyIHR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhID0gX19kZXBlbmRlbmN5
NF9fLnR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhOwotCi0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVt
YmVyLWRhdGEKLSAgICAqLwotCi0gICAgZnVuY3Rpb24gYXN5bmNCZWxvbmdzVG8odHlwZSwgb3B0
aW9ucywgbWV0YSkgewotICAgICAgcmV0dXJuIEVtYmVyLmNvbXB1dGVkKCdkYXRhJywgZnVuY3Rp
b24oa2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIgZGF0YSA9IGdldCh0aGlzLCAnZGF0YScpLAot
ICAgICAgICAgICAgc3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyksCi0gICAgICAgICAgICBwcm9t
aXNlTGFiZWwgPSAiRFM6IEFzeW5jIGJlbG9uZ3NUbyAiICsgdGhpcyArICIgOiAiICsga2V5LAot
ICAgICAgICAgICAgcHJvbWlzZTsKLQotICAgICAgICBtZXRhLmtleSA9IGtleTsKLQotICAgICAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAgICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IGNhbiBvbmx5IGFkZCBhICciICsgdHlwZSArICInIHJlY29yZCB0byB0aGlzIHJlbGF0aW9u
c2hpcCIsICF2YWx1ZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIHR5cGVGb3JSZWxhdGlvbnNoaXBNZXRh
KHN0b3JlLCBtZXRhKSk7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBu
dWxsIDogUHJvbWlzZU9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlz
ZS5jYXN0KHZhbHVlLCBwcm9taXNlTGFiZWwpCi0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgbGluayA9IGRhdGEubGlua3MgJiYgZGF0YS5saW5rc1trZXldLAotICAgICAg
ICAgICAgYmVsb25nc1RvID0gZGF0YVtrZXldOwotCi0gICAgICAgIGlmKCFpc05vbmUoYmVsb25n
c1RvKSkgewotICAgICAgICAgIHByb21pc2UgPSBzdG9yZS5mZXRjaFJlY29yZChiZWxvbmdzVG8p
IHx8IFByb21pc2UuY2FzdChiZWxvbmdzVG8sIHByb21pc2VMYWJlbCk7Ci0gICAgICAgICAgcmV0
dXJuIFByb21pc2VPYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgIHByb21pc2U6IHByb21pc2UK
LSAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIGlmIChsaW5rKSB7Ci0gICAgICAgICAgcHJv
bWlzZSA9IHN0b3JlLmZpbmRCZWxvbmdzVG8odGhpcywgbGluaywgcmVsYXRpb25zaGlwRnJvbU1l
dGEoc3RvcmUsIG1ldGEpKTsKLSAgICAgICAgICByZXR1cm4gUHJvbWlzZU9iamVjdC5jcmVhdGUo
ewotICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZQotICAgICAgICAgIH0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9KS5tZXRh
KG1ldGEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAgYERTLmJlbG9uZ3NUb2AgaXMgdXNlZCB0
byBkZWZpbmUgT25lLVRvLU9uZSBhbmQgT25lLVRvLU1hbnkKLSAgICAgIHJlbGF0aW9uc2hpcHMg
b24gYSBbRFMuTW9kZWxdKC9hcGkvZGF0YS9jbGFzc2VzL0RTLk1vZGVsLmh0bWwpLgotCi0KLSAg
ICAgIGBEUy5iZWxvbmdzVG9gIHRha2VzIGFuIG9wdGlvbmFsIGhhc2ggYXMgYSBzZWNvbmQgcGFy
YW1ldGVyLCBjdXJyZW50bHkKLSAgICAgIHN1cHBvcnRlZCBvcHRpb25zIGFyZToKLQotICAgICAg
LSBgYXN5bmNgOiBBIGJvb2xlYW4gdmFsdWUgdXNlZCB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhp
cyB0byBiZSBhbiBhc3luYyByZWxhdGlvbnNoaXAuCi0gICAgICAtIGBpbnZlcnNlYDogQSBzdHJp
bmcgdXNlZCB0byBpZGVudGlmeSB0aGUgaW52ZXJzZSBwcm9wZXJ0eSBvbiBhCi0gICAgICAgIHJl
bGF0ZWQgbW9kZWwgaW4gYSBPbmUtVG8tTWFueSByZWxhdGlvbnNoaXAuIFNlZSBbRXhwbGljaXQg
SW52ZXJzZXNdKCN0b2NfZXhwbGljaXQtaW52ZXJzZXMpCi0KLSAgICAgICMjIyMgT25lLVRvLU9u
ZQotICAgICAgVG8gZGVjbGFyZSBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdv
IG1vZGVscywgdXNlCi0gICAgICBgRFMuYmVsb25nc1RvYDoKLQotICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgQXBwLlVzZXIgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBwcm9maWxlOiBE
Uy5iZWxvbmdzVG8oJ3Byb2ZpbGUnKQotICAgICAgfSk7Ci0KLSAgICAgIEFwcC5Qcm9maWxlID0g
RFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgdXNlcjogRFMuYmVsb25nc1RvKCd1c2VyJykKLSAg
ICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgICMjIyMgT25lLVRvLU1hbnkKLSAgICAgIFRvIGRl
Y2xhcmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gbW9kZWxzLCB1c2UK
LSAgICAgIGBEUy5iZWxvbmdzVG9gIGluIGNvbWJpbmF0aW9uIHdpdGggYERTLmhhc01hbnlgLCBs
aWtlIHRoaXM6Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0ID0gRFMuTW9k
ZWwuZXh0ZW5kKHsKLSAgICAgICAgY29tbWVudHM6IERTLmhhc01hbnkoJ2NvbW1lbnQnKQotICAg
ICAgfSk7Ci0KLSAgICAgIEFwcC5Db21tZW50ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAg
cG9zdDogRFMuYmVsb25nc1RvKCdwb3N0JykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAg
IEBuYW1lc3BhY2UKLSAgICAgIEBtZXRob2QgYmVsb25nc1RvCi0gICAgICBAZm9yIERTCi0gICAg
ICBAcGFyYW0ge1N0cmluZyBvciBEUy5Nb2RlbH0gdHlwZSB0aGUgbW9kZWwgdHlwZSBvZiB0aGUg
cmVsYXRpb25zaGlwCi0gICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhIGhhc2ggb2Ygb3B0
aW9ucwotICAgICAgQHJldHVybiB7RW1iZXIuY29tcHV0ZWR9IHJlbGF0aW9uc2hpcAotICAgICov
Ci0gICAgZnVuY3Rpb24gYmVsb25nc1RvKHR5cGUsIG9wdGlvbnMpIHsKLSAgICAgIGlmICh0eXBl
b2YgdHlwZSA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgb3B0aW9ucyA9IHR5cGU7Ci0gICAgICAg
IHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFbWJlci5hc3NlcnQo
IlRoZSBmaXJzdCBhcmd1bWVudCB0byBEUy5iZWxvbmdzVG8gbXVzdCBiZSBhIHN0cmluZyByZXBy
ZXNlbnRpbmcgYSBtb2RlbCB0eXBlIGtleSwgZS5nLiB1c2UgRFMuYmVsb25nc1RvKCdwZXJzb24n
KSB0byBkZWZpbmUgYSByZWxhdGlvbiB0byB0aGUgQXBwLlBlcnNvbiBtb2RlbCIsICEhdHlwZSAm
JiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IE1vZGVsLmRldGVjdCh0eXBlKSkpOwotICAg
ICAgfQotCi0gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgdmFyIG1ldGEg
PSB7Ci0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgIGlzUmVsYXRpb25zaGlwOiB0cnVlLAot
ICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBraW5kOiAnYmVsb25nc1RvJywKLSAg
ICAgICAga2V5OiBudWxsCi0gICAgICB9OwotCi0gICAgICBpZiAob3B0aW9ucy5hc3luYykgewot
ICAgICAgICByZXR1cm4gYXN5bmNCZWxvbmdzVG8odHlwZSwgb3B0aW9ucywgbWV0YSk7Ci0gICAg
ICB9Ci0KLSAgICAgIHJldHVybiBFbWJlci5jb21wdXRlZCgnZGF0YScsIGZ1bmN0aW9uKGtleSwg
dmFsdWUpIHsKLSAgICAgICAgdmFyIGRhdGEgPSBnZXQodGhpcywgJ2RhdGEnKSwKLSAgICAgICAg
ICAgIHN0b3JlID0gZ2V0KHRoaXMsICdzdG9yZScpLCBiZWxvbmdzVG8sIHR5cGVDbGFzczsKLQot
ICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgdHlwZUNs
YXNzID0gc3RvcmUubW9kZWxGb3IodHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
dHlwZUNsYXNzID0gdHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoID09PSAyKSB7Ci0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkgYWRkIGEg
JyIgKyB0eXBlICsgIicgcmVjb3JkIHRvIHRoaXMgcmVsYXRpb25zaGlwIiwgIXZhbHVlIHx8IHZh
bHVlIGluc3RhbmNlb2YgdHlwZUNsYXNzKTsKLSAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVu
ZGVmaW5lZCA/IG51bGwgOiB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJlbG9uZ3NUbyA9
IGRhdGFba2V5XTsKLQotICAgICAgICBpZiAoaXNOb25lKGJlbG9uZ3NUbykpIHsgcmV0dXJuIG51
bGw7IH0KLQotICAgICAgICBzdG9yZS5mZXRjaFJlY29yZChiZWxvbmdzVG8pOwotCi0gICAgICAg
IHJldHVybiBiZWxvbmdzVG87Ci0gICAgICB9KS5tZXRhKG1ldGEpOwotICAgIH0KLQotICAgIC8q
KgotICAgICAgVGhlc2Ugb2JzZXJ2ZXJzIG9ic2VydmUgYWxsIGBiZWxvbmdzVG9gIHJlbGF0aW9u
c2hpcHMgb24gdGhlIHJlY29yZC4gU2VlCi0gICAgICBgcmVsYXRpb25zaGlwcy9leHRgIHRvIHNl
ZSBob3cgdGhlc2Ugb2JzZXJ2ZXJzIGdldCB0aGVpciBkZXBlbmRlbmNpZXMuCi0KLSAgICAgIEBj
bGFzcyBNb2RlbAotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICovCi0gICAgTW9kZWwucmVvcGVu
KHsKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgYmVsb25nc1RvV2lsbENoYW5nZQotICAg
ICAgICBAcHJpdmF0ZQotICAgICAgICBAc3RhdGljCi0gICAgICAgIEBwYXJhbSByZWNvcmQKLSAg
ICAgICAgQHBhcmFtIGtleQotICAgICAgKi8KLSAgICAgIGJlbG9uZ3NUb1dpbGxDaGFuZ2U6IEVt
YmVyLmJlZm9yZU9ic2VydmVyKGZ1bmN0aW9uKHJlY29yZCwga2V5KSB7Ci0gICAgICAgIGlmIChn
ZXQocmVjb3JkLCAnaXNMb2FkZWQnKSkgewotICAgICAgICAgIHZhciBvbGRQYXJlbnQgPSBnZXQo
cmVjb3JkLCBrZXkpOwotCi0gICAgICAgICAgaWYgKG9sZFBhcmVudCkgewotICAgICAgICAgICAg
dmFyIHN0b3JlID0gZ2V0KHJlY29yZCwgJ3N0b3JlJyksCi0gICAgICAgICAgICAgICAgY2hhbmdl
ID0gUmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZShyZWNvcmQsIG9sZFBhcmVudCwgc3Rv
cmUsIHsga2V5OiBrZXksIGtpbmQ6ICJiZWxvbmdzVG8iLCBjaGFuZ2VUeXBlOiAicmVtb3ZlIiB9
KTsKLQotICAgICAgICAgICAgY2hhbmdlLnN5bmMoKTsKLSAgICAgICAgICAgIHRoaXMuX2NoYW5n
ZXNUb1N5bmNba2V5XSA9IGNoYW5nZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0p
LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBiZWxvbmdzVG9EaWRDaGFuZ2UKLSAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAcGFyYW0gcmVjb3JkCi0gICAg
ICAgIEBwYXJhbSBrZXkKLSAgICAgICovCi0gICAgICBiZWxvbmdzVG9EaWRDaGFuZ2U6IEVtYmVy
LmltbWVkaWF0ZU9ic2VydmVyKGZ1bmN0aW9uKHJlY29yZCwga2V5KSB7Ci0gICAgICAgIGlmIChn
ZXQocmVjb3JkLCAnaXNMb2FkZWQnKSkgewotICAgICAgICAgIHZhciBuZXdQYXJlbnQgPSBnZXQo
cmVjb3JkLCBrZXkpOwotCi0gICAgICAgICAgaWYgKG5ld1BhcmVudCkgewotICAgICAgICAgICAg
dmFyIHN0b3JlID0gZ2V0KHJlY29yZCwgJ3N0b3JlJyksCi0gICAgICAgICAgICAgICAgY2hhbmdl
ID0gUmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZUNoYW5nZShyZWNvcmQsIG5ld1BhcmVudCwgc3Rv
cmUsIHsga2V5OiBrZXksIGtpbmQ6ICJiZWxvbmdzVG8iLCBjaGFuZ2VUeXBlOiAiYWRkIiB9KTsK
LQotICAgICAgICAgICAgY2hhbmdlLnN5bmMoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBkZWxldGUgdGhpcy5fY2hhbmdlc1RvU3luY1trZXldOwotICAgICAgfSkKLSAgICB9
KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBiZWxvbmdzVG87Ci0gIH0pOwotZGVm
aW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0vcmVsYXRpb25zaGlwcy9leHQiLCAKLSAgWyIuLi8u
Li8uLi8uLi9lbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbSIsIi4uL3JlbGF0aW9uc2hpcC1tZXRh
IiwiLi4vbW9kZWwiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgc2luZ3Vs
YXJpemUgPSBfX2RlcGVuZGVuY3kxX18uc2luZ3VsYXJpemU7Ci0gICAgdmFyIHR5cGVGb3JSZWxh
dGlvbnNoaXBNZXRhID0gX19kZXBlbmRlbmN5Ml9fLnR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhOwot
ICAgIHZhciByZWxhdGlvbnNoaXBGcm9tTWV0YSA9IF9fZGVwZW5kZW5jeTJfXy5yZWxhdGlvbnNo
aXBGcm9tTWV0YTsKLSAgICB2YXIgTW9kZWwgPSBfX2RlcGVuZGVuY3kzX18uTW9kZWw7Ci0KLSAg
ICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7Ci0KLSAgICAvKioKLSAgICAg
IEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICAvKgotICAgICAgVGhpcyBmaWxlIGRl
ZmluZXMgc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBiYXNlIGBEUy5Nb2RlbGAgY2xhc3MgdGhh
dAotICAgICAgYWRkIHN1cHBvcnQgZm9yIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcHMuCi0gICAg
Ki8KLQotICAgIC8qKgotICAgICAgQGNsYXNzIE1vZGVsCi0gICAgICBAbmFtZXNwYWNlIERTCi0g
ICAgKi8KLSAgICBNb2RlbC5yZW9wZW4oewotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBFbWJl
ci5qcyBob29rIGFsbG93cyBhbiBvYmplY3QgdG8gYmUgbm90aWZpZWQgd2hlbiBhIHByb3BlcnR5
Ci0gICAgICAgIGlzIGRlZmluZWQuCi0KLSAgICAgICAgSW4gdGhpcyBjYXNlLCB3ZSB1c2UgaXQg
dG8gYmUgbm90aWZpZWQgd2hlbiBhbiBFbWJlciBEYXRhIHVzZXIgZGVmaW5lcyBhCi0gICAgICAg
IGJlbG9uZ3MtdG8gcmVsYXRpb25zaGlwLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gc2V0IHVw
IG9ic2VydmVycyBmb3IKLSAgICAgICAgZWFjaCBvbmUsIGFsbG93aW5nIHVzIHRvIHRyYWNrIHJl
bGF0aW9uc2hpcCBjaGFuZ2VzIGFuZCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgIHJlZmxlY3QgY2hh
bmdlcyBpbiB0aGUgaW52ZXJzZSBoYXMtbWFueSBhcnJheS4KLQotICAgICAgICBUaGlzIGhvb2sg
cGFzc2VzIHRoZSBjbGFzcyBiZWluZyBzZXQgdXAsIGFzIHdlbGwgYXMgdGhlIGtleSBhbmQgdmFs
dWUKLSAgICAgICAgYmVpbmcgZGVmaW5lZC4gU28sIGZvciBleGFtcGxlLCB3aGVuIHRoZSB1c2Vy
IGRvZXMgdGhpczoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIERTLk1vZGVsLmV4
dGVuZCh7Ci0gICAgICAgICAgcGFyZW50OiBEUy5iZWxvbmdzVG8oJ3VzZXInKQotICAgICAgICB9
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgVGhpcyBob29rIHdvdWxkIGJlIGNhbGxlZCB3aXRo
ICJwYXJlbnQiIGFzIHRoZSBrZXkgYW5kIHRoZSBjb21wdXRlZAotICAgICAgICBwcm9wZXJ0eSBy
ZXR1cm5lZCBieSBgRFMuYmVsb25nc1RvYCBhcyB0aGUgdmFsdWUuCi0KLSAgICAgICAgQG1ldGhv
ZCBkaWREZWZpbmVQcm9wZXJ0eQotICAgICAgICBAcGFyYW0gcHJvdG8KLSAgICAgICAgQHBhcmFt
IGtleQotICAgICAgICBAcGFyYW0gdmFsdWUKLSAgICAgICovCi0gICAgICBkaWREZWZpbmVQcm9w
ZXJ0eTogZnVuY3Rpb24ocHJvdG8sIGtleSwgdmFsdWUpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIHZhbHVlIGJlaW5nIHNldCBpcyBhIGNvbXB1dGVkIHByb3BlcnR5LgotICAgICAgICBpZiAo
dmFsdWUgaW5zdGFuY2VvZiBFbWJlci5EZXNjcmlwdG9yKSB7Ci0KLSAgICAgICAgICAvLyBJZiBp
dCBpcywgZ2V0IHRoZSBtZXRhZGF0YSBmb3IgdGhlIHJlbGF0aW9uc2hpcC4gVGhpcyBpcwotICAg
ICAgICAgIC8vIHBvcHVsYXRlZCBieSB0aGUgYERTLmJlbG9uZ3NUb2AgaGVscGVyIHdoZW4gaXQg
aXMgY3JlYXRpbmcKLSAgICAgICAgICAvLyB0aGUgY29tcHV0ZWQgcHJvcGVydHkuCi0gICAgICAg
ICAgdmFyIG1ldGEgPSB2YWx1ZS5tZXRhKCk7Ci0KLSAgICAgICAgICBpZiAobWV0YS5pc1JlbGF0
aW9uc2hpcCAmJiBtZXRhLmtpbmQgPT09ICdiZWxvbmdzVG8nKSB7Ci0gICAgICAgICAgICBFbWJl
ci5hZGRPYnNlcnZlcihwcm90bywga2V5LCBudWxsLCAnYmVsb25nc1RvRGlkQ2hhbmdlJyk7Ci0g
ICAgICAgICAgICBFbWJlci5hZGRCZWZvcmVPYnNlcnZlcihwcm90bywga2V5LCBudWxsLCAnYmVs
b25nc1RvV2lsbENoYW5nZScpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1ldGEucGFyZW50
VHlwZSA9IHByb3RvLmNvbnN0cnVjdG9yOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0K
LSAgICAvKgotICAgICAgVGhlc2UgRFMuTW9kZWwgZXh0ZW5zaW9ucyBhZGQgY2xhc3MgbWV0aG9k
cyB0aGF0IHByb3ZpZGUgcmVsYXRpb25zaGlwCi0gICAgICBpbnRyb3NwZWN0aW9uIGFiaWxpdGll
cyBhYm91dCByZWxhdGlvbnNoaXBzLgotCi0gICAgICBBIG5vdGUgYWJvdXQgdGhlIGNvbXB1dGVk
IHByb3BlcnRpZXMgY29udGFpbmVkIGhlcmU6Ci0KLSAgICAgICoqVGhlc2UgcHJvcGVydGllcyBh
cmUgZWZmZWN0aXZlbHkgc2VhbGVkIG9uY2UgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZS4qKgot
ICAgICAgVG8gYXZvaWQgcmVwZWF0ZWRseSBkb2luZyBleHBlbnNpdmUgaXRlcmF0aW9uIG92ZXIg
YSBtb2RlbCdzIGZpZWxkcywgdGhlc2UKLSAgICAgIHZhbHVlcyBhcmUgY29tcHV0ZWQgb25jZSBh
bmQgdGhlbiBjYWNoZWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHJ1bnRpbWUgb2YKLSAgICAg
IHlvdXIgYXBwbGljYXRpb24uCi0KLSAgICAgIElmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgdG8g
bW9kaWZ5IGEgY2xhc3MgYWZ0ZXIgaXRzIGluaXRpYWwgZGVmaW5pdGlvbgotICAgICAgKGZvciBl
eGFtcGxlLCB1c2luZyBgcmVvcGVuKClgIHRvIGFkZCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMpLCBt
YWtlIHN1cmUgeW91Ci0gICAgICBkbyBpdCBiZWZvcmUgdXNpbmcgeW91ciBtb2RlbCB3aXRoIHRo
ZSBzdG9yZSwgd2hpY2ggdXNlcyB0aGVzZSBwcm9wZXJ0aWVzCi0gICAgICBleHRlbnNpdmVseS4K
LSAgICAqLwotCi0gICAgTW9kZWwucmVvcGVuQ2xhc3MoewotICAgICAgLyoqCi0gICAgICAgIEZv
ciBhIGdpdmVuIHJlbGF0aW9uc2hpcCBuYW1lLCByZXR1cm5zIHRoZSBtb2RlbCB0eXBlIG9mIHRo
ZSByZWxhdGlvbnNoaXAuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmUgYSBt
b2RlbCBsaWtlIHRoaXM6Ci0KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Qb3N0
ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBjb21tZW50czogRFMuaGFzTWFueSgnY29t
bWVudCcpCi0gICAgICAgIH0pOwotICAgICAgIGBgYAotCi0gICAgICAgIENhbGxpbmcgYEFwcC5Q
b3N0LnR5cGVGb3JSZWxhdGlvbnNoaXAoJ2NvbW1lbnRzJylgIHdpbGwgcmV0dXJuIGBBcHAuQ29t
bWVudGAuCi0KLSAgICAgICAgQG1ldGhvZCB0eXBlRm9yUmVsYXRpb25zaGlwCi0gICAgICAgIEBz
dGF0aWMKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJlbGF0
aW9uc2hpcAotICAgICAgICBAcmV0dXJuIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdGhlIHR5cGUg
b2YgdGhlIHJlbGF0aW9uc2hpcCwgb3IgdW5kZWZpbmVkCi0gICAgICAqLwotICAgICAgdHlwZUZv
clJlbGF0aW9uc2hpcDogZnVuY3Rpb24obmFtZSkgewotICAgICAgICB2YXIgcmVsYXRpb25zaGlw
ID0gZ2V0KHRoaXMsICdyZWxhdGlvbnNoaXBzQnlOYW1lJykuZ2V0KG5hbWUpOwotICAgICAgICBy
ZXR1cm4gcmVsYXRpb25zaGlwICYmIHJlbGF0aW9uc2hpcC50eXBlOwotICAgICAgfSwKLQotICAg
ICAgaW52ZXJzZUZvcjogZnVuY3Rpb24obmFtZSkgewotICAgICAgICB2YXIgaW52ZXJzZVR5cGUg
PSB0aGlzLnR5cGVGb3JSZWxhdGlvbnNoaXAobmFtZSk7Ci0KLSAgICAgICAgaWYgKCFpbnZlcnNl
VHlwZSkgeyByZXR1cm4gbnVsbDsgfQotCi0gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5tZXRh
Rm9yUHJvcGVydHkobmFtZSkub3B0aW9uczsKLQotICAgICAgICBpZiAob3B0aW9ucy5pbnZlcnNl
ID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9Ci0KLSAgICAgICAgdmFyIGludmVyc2VOYW1lLCBp
bnZlcnNlS2luZDsKLQotICAgICAgICBpZiAob3B0aW9ucy5pbnZlcnNlKSB7Ci0gICAgICAgICAg
aW52ZXJzZU5hbWUgPSBvcHRpb25zLmludmVyc2U7Ci0gICAgICAgICAgaW52ZXJzZUtpbmQgPSBF
bWJlci5nZXQoaW52ZXJzZVR5cGUsICdyZWxhdGlvbnNoaXBzQnlOYW1lJykuZ2V0KGludmVyc2VO
YW1lKS5raW5kOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZhciBwb3NzaWJsZVJlbGF0
aW9uc2hpcHMgPSBmaW5kUG9zc2libGVJbnZlcnNlcyh0aGlzLCBpbnZlcnNlVHlwZSk7Ci0KLSAg
ICAgICAgICBpZiAocG9zc2libGVSZWxhdGlvbnNoaXBzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4g
bnVsbDsgfQotCi0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgZGVmaW5lZCB0aGUgJyIgKyBu
YW1lICsgIicgcmVsYXRpb25zaGlwIG9uICIgKyB0aGlzICsgIiwgYnV0IG11bHRpcGxlIHBvc3Np
YmxlIGludmVyc2UgcmVsYXRpb25zaGlwcyBvZiB0eXBlICIgKyB0aGlzICsgIiB3ZXJlIGZvdW5k
IG9uICIgKyBpbnZlcnNlVHlwZSArICIuIExvb2sgYXQgaHR0cDovL2VtYmVyanMuY29tL2d1aWRl
cy9tb2RlbHMvZGVmaW5pbmctbW9kZWxzLyN0b2NfZXhwbGljaXQtaW52ZXJzZXMgZm9yIGhvdyB0
byBleHBsaWNpdGx5IHNwZWNpZnkgaW52ZXJzZXMiLCBwb3NzaWJsZVJlbGF0aW9uc2hpcHMubGVu
Z3RoID09PSAxKTsKLQotICAgICAgICAgIGludmVyc2VOYW1lID0gcG9zc2libGVSZWxhdGlvbnNo
aXBzWzBdLm5hbWU7Ci0gICAgICAgICAgaW52ZXJzZUtpbmQgPSBwb3NzaWJsZVJlbGF0aW9uc2hp
cHNbMF0ua2luZDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmRQb3NzaWJsZUlu
dmVyc2VzKHR5cGUsIGludmVyc2VUeXBlLCBwb3NzaWJsZVJlbGF0aW9uc2hpcHMpIHsKLSAgICAg
ICAgICBwb3NzaWJsZVJlbGF0aW9uc2hpcHMgPSBwb3NzaWJsZVJlbGF0aW9uc2hpcHMgfHwgW107
Ci0KLSAgICAgICAgICB2YXIgcmVsYXRpb25zaGlwTWFwID0gZ2V0KGludmVyc2VUeXBlLCAncmVs
YXRpb25zaGlwcycpOwotICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwTWFwKSB7IHJldHVybjsg
fQotCi0gICAgICAgICAgdmFyIHJlbGF0aW9uc2hpcHMgPSByZWxhdGlvbnNoaXBNYXAuZ2V0KHR5
cGUpOwotICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXBzKSB7Ci0gICAgICAgICAgICBwb3NzaWJs
ZVJlbGF0aW9uc2hpcHMucHVzaC5hcHBseShwb3NzaWJsZVJlbGF0aW9uc2hpcHMsIHJlbGF0aW9u
c2hpcE1hcC5nZXQodHlwZSkpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICh0eXBlLnN1
cGVyY2xhc3MpIHsKLSAgICAgICAgICAgIGZpbmRQb3NzaWJsZUludmVyc2VzKHR5cGUuc3VwZXJj
bGFzcywgaW52ZXJzZVR5cGUsIHBvc3NpYmxlUmVsYXRpb25zaGlwcyk7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVsYXRpb25zaGlwczsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgdHlwZTogaW52ZXJzZVR5cGUsCi0gICAgICAgICAg
bmFtZTogaW52ZXJzZU5hbWUsCi0gICAgICAgICAga2luZDogaW52ZXJzZUtpbmQKLSAgICAgICAg
fTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgbW9kZWwncyByZWxhdGlvbnNo
aXBzIGFzIGEgbWFwLCBrZXllZCBvbiB0aGUgdHlwZSBvZiB0aGUKLSAgICAgICAgcmVsYXRpb25z
aGlwLiBUaGUgdmFsdWUgb2YgZWFjaCBlbnRyeSBpcyBhbiBhcnJheSBjb250YWluaW5nIGEgZGVz
Y3JpcHRvcgotICAgICAgICBmb3IgZWFjaCByZWxhdGlvbnNoaXAgd2l0aCB0aGF0IHR5cGUsIGRl
c2NyaWJpbmcgdGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcAotICAgICAgICBhcyB3ZWxsIGFz
IHRoZSB0eXBlLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIG1v
ZGVsIGRlZmluaXRpb246Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQmxv
ZyA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdXNlcnM6IERTLmhhc01hbnkoJ3VzZXIn
KSwKLSAgICAgICAgICBvd25lcjogRFMuYmVsb25nc1RvKCd1c2VyJyksCi0gICAgICAgICAgcG9z
dHM6IERTLmhhc01hbnkoJ3Bvc3QnKQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAg
ICAgVGhpcyBjb21wdXRlZCBwcm9wZXJ0eSB3b3VsZCByZXR1cm4gYSBtYXAgZGVzY3JpYmluZyB0
aGVzZQotICAgICAgICByZWxhdGlvbnNoaXBzLCBsaWtlIHRoaXM6Ci0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICB2YXIgcmVsYXRpb25zaGlwcyA9IEVtYmVyLmdldChBcHAuQmxvZywg
J3JlbGF0aW9uc2hpcHMnKTsKLSAgICAgICAgcmVsYXRpb25zaGlwcy5nZXQoQXBwLlVzZXIpOwot
ICAgICAgICAvLz0+IFsgeyBuYW1lOiAndXNlcnMnLCBraW5kOiAnaGFzTWFueScgfSwKLSAgICAg
ICAgLy8gICAgIHsgbmFtZTogJ293bmVyJywga2luZDogJ2JlbG9uZ3NUbycgfSBdCi0gICAgICAg
IHJlbGF0aW9uc2hpcHMuZ2V0KEFwcC5Qb3N0KTsKLSAgICAgICAgLy89PiBbIHsgbmFtZTogJ3Bv
c3RzJywga2luZDogJ2hhc01hbnknIH0gXQotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVy
dHkgcmVsYXRpb25zaGlwcwotICAgICAgICBAc3RhdGljCi0gICAgICAgIEB0eXBlIEVtYmVyLk1h
cAotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICByZWxhdGlvbnNoaXBzOiBFbWJl
ci5jb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG1hcCA9IG5ldyBFbWJlci5NYXBX
aXRoRGVmYXVsdCh7Ci0gICAgICAgICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbigpIHsgcmV0dXJu
IFtdOyB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGNvbXB1
dGVkIHByb3BlcnR5IG9uIHRoZSBjbGFzcwotICAgICAgICB0aGlzLmVhY2hDb21wdXRlZFByb3Bl
cnR5KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKLQotICAgICAgICAgIC8vIElmIHRoZSBjb21wdXRl
ZCBwcm9wZXJ0eSBpcyBhIHJlbGF0aW9uc2hpcCwgYWRkCi0gICAgICAgICAgLy8gaXQgdG8gdGhl
IG1hcC4KLSAgICAgICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAg
bWV0YS5rZXkgPSBuYW1lOwotICAgICAgICAgICAgdmFyIHJlbGF0aW9uc2hpcHNGb3JUeXBlID0g
bWFwLmdldCh0eXBlRm9yUmVsYXRpb25zaGlwTWV0YSh0aGlzLnN0b3JlLCBtZXRhKSk7Ci0KLSAg
ICAgICAgICAgIHJlbGF0aW9uc2hpcHNGb3JUeXBlLnB1c2goeyBuYW1lOiBuYW1lLCBraW5kOiBt
ZXRhLmtpbmQgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4g
bWFwOwotICAgICAgfSkuY2FjaGVhYmxlKGZhbHNlKSwKLQotICAgICAgLyoqCi0gICAgICAgIEEg
aGFzaCBjb250YWluaW5nIGxpc3RzIG9mIHRoZSBtb2RlbCdzIHJlbGF0aW9uc2hpcHMsIGdyb3Vw
ZWQKLSAgICAgICAgYnkgdGhlIHJlbGF0aW9uc2hpcCBraW5kLiBGb3IgZXhhbXBsZSwgZ2l2ZW4g
YSBtb2RlbCB3aXRoIHRoaXMKLSAgICAgICAgZGVmaW5pdGlvbjoKLQotICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICB1
c2VyczogRFMuaGFzTWFueSgndXNlcicpLAotICAgICAgICAgIG93bmVyOiBEUy5iZWxvbmdzVG8o
J3VzZXInKSwKLQotICAgICAgICAgIHBvc3RzOiBEUy5oYXNNYW55KCdwb3N0JykKLSAgICAgICAg
fSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMgcHJvcGVydHkgd291bGQgY29udGFpbiB0
aGUgZm9sbG93aW5nOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFyIHJlbGF0
aW9uc2hpcE5hbWVzID0gRW1iZXIuZ2V0KEFwcC5CbG9nLCAncmVsYXRpb25zaGlwTmFtZXMnKTsK
LSAgICAgICAgcmVsYXRpb25zaGlwTmFtZXMuaGFzTWFueTsKLSAgICAgICAgLy89PiBbJ3VzZXJz
JywgJ3Bvc3RzJ10KLSAgICAgICAgcmVsYXRpb25zaGlwTmFtZXMuYmVsb25nc1RvOwotICAgICAg
ICAvLz0+IFsnb3duZXInXQotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgcmVsYXRp
b25zaGlwTmFtZXMKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAdHlwZSBPYmplY3QKLSAgICAg
ICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgcmVsYXRpb25zaGlwTmFtZXM6IEVtYmVyLmNv
bXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgbmFtZXMgPSB7IGhhc01hbnk6IFtdLCBi
ZWxvbmdzVG86IFtdIH07Ci0KLSAgICAgICAgdGhpcy5lYWNoQ29tcHV0ZWRQcm9wZXJ0eShmdW5j
dGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgaWYgKG1ldGEuaXNSZWxhdGlvbnNoaXApIHsK
LSAgICAgICAgICAgIG5hbWVzW21ldGEua2luZF0ucHVzaChuYW1lKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBuYW1lczsKLSAgICAgIH0pLAotCi0gICAgICAv
KioKLSAgICAgICAgQW4gYXJyYXkgb2YgdHlwZXMgZGlyZWN0bHkgcmVsYXRlZCB0byBhIG1vZGVs
LiBFYWNoIHR5cGUgd2lsbCBiZQotICAgICAgICBpbmNsdWRlZCBvbmNlLCByZWdhcmRsZXNzIG9m
IHRoZSBudW1iZXIgb2YgcmVsYXRpb25zaGlwcyBpdCBoYXMgd2l0aAotICAgICAgICB0aGUgbW9k
ZWwuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgbW9kZWwgd2l0aCB0aGlzIGRlZmlu
aXRpb246Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQmxvZyA9IERTLk1v
ZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdXNlcnM6IERTLmhhc01hbnkoJ3VzZXInKSwKLSAgICAg
ICAgICBvd25lcjogRFMuYmVsb25nc1RvKCd1c2VyJyksCi0KLSAgICAgICAgICBwb3N0czogRFMu
aGFzTWFueSgncG9zdCcpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGlz
IHByb3BlcnR5IHdvdWxkIGNvbnRhaW4gdGhlIGZvbGxvd2luZzoKLQotICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgIHZhciByZWxhdGVkVHlwZXMgPSBFbWJlci5nZXQoQXBwLkJsb2csICdy
ZWxhdGVkVHlwZXMnKTsKLSAgICAgICAgLy89PiBbIEFwcC5Vc2VyLCBBcHAuUG9zdCBdCi0gICAg
ICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSByZWxhdGVkVHlwZXMKLSAgICAgICAgQHN0YXRp
YwotICAgICAgICBAdHlwZSBFbWJlci5BcnJheQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICov
Ci0gICAgICByZWxhdGVkVHlwZXM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgdHlwZSwKLSAgICAgICAgICAgIHR5cGVzID0gRW1iZXIuQSgpOwotCi0gICAgICAgIC8v
IExvb3AgdGhyb3VnaCBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IG9uIHRoZSBjbGFzcywKLSAgICAg
ICAgLy8gYW5kIGNyZWF0ZSBhbiBhcnJheSBvZiB0aGUgdW5pcXVlIHR5cGVzIGludm9sdmVkCi0g
ICAgICAgIC8vIGluIHJlbGF0aW9uc2hpcHMKLSAgICAgICAgdGhpcy5lYWNoQ29tcHV0ZWRQcm9w
ZXJ0eShmdW5jdGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgaWYgKG1ldGEuaXNSZWxhdGlv
bnNoaXApIHsKLSAgICAgICAgICAgIG1ldGEua2V5ID0gbmFtZTsKLSAgICAgICAgICAgIHR5cGUg
PSB0eXBlRm9yUmVsYXRpb25zaGlwTWV0YSh0aGlzLnN0b3JlLCBtZXRhKTsKLQotICAgICAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEgaGFzTWFueSAoIiArIG1ldGEudHlwZSAr
ICIpIG9uICIgKyBtZXRhLnBhcmVudFR5cGUgKyAiIGJ1dCAiICsgbWV0YS50eXBlICsgIiB3YXMg
bm90IGZvdW5kLiIsICB0eXBlKTsKLQotICAgICAgICAgICAgaWYgKCF0eXBlcy5jb250YWlucyh0
eXBlKSkgewotICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRyeWluZyB0byBzaWRlbG9hZCAi
ICsgbmFtZSArICIgb24gIiArIHRoaXMudG9TdHJpbmcoKSArICIgYnV0IHRoZSB0eXBlIGRvZXNu
J3QgZXhpc3QuIiwgISF0eXBlKTsKLSAgICAgICAgICAgICAgdHlwZXMucHVzaCh0eXBlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiB0
eXBlczsKLSAgICAgIH0pLmNhY2hlYWJsZShmYWxzZSksCi0KLSAgICAgIC8qKgotICAgICAgICBB
IG1hcCB3aG9zZSBrZXlzIGFyZSB0aGUgcmVsYXRpb25zaGlwcyBvZiBhIG1vZGVsIGFuZCB3aG9z
ZSB2YWx1ZXMgYXJlCi0gICAgICAgIHJlbGF0aW9uc2hpcCBkZXNjcmlwdG9ycy4KLQotICAgICAg
ICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBtb2RlbCB3aXRoIHRoaXMKLSAgICAgICAgZGVmaW5pdGlv
bjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwu
ZXh0ZW5kKHsKLSAgICAgICAgICB1c2VyczogRFMuaGFzTWFueSgndXNlcicpLAotICAgICAgICAg
IG93bmVyOiBEUy5iZWxvbmdzVG8oJ3VzZXInKSwKLQotICAgICAgICAgIHBvc3RzOiBEUy5oYXNN
YW55KCdwb3N0JykKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMgcHJv
cGVydHkgd291bGQgY29udGFpbiB0aGUgZm9sbG93aW5nOgotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgdmFyIHJlbGF0aW9uc2hpcHNCeU5hbWUgPSBFbWJlci5nZXQoQXBwLkJsb2cs
ICdyZWxhdGlvbnNoaXBzQnlOYW1lJyk7Ci0gICAgICAgIHJlbGF0aW9uc2hpcHNCeU5hbWUuZ2V0
KCd1c2VycycpOwotICAgICAgICAvLz0+IHsga2V5OiAndXNlcnMnLCBraW5kOiAnaGFzTWFueScs
IHR5cGU6IEFwcC5Vc2VyIH0KLSAgICAgICAgcmVsYXRpb25zaGlwc0J5TmFtZS5nZXQoJ293bmVy
Jyk7Ci0gICAgICAgIC8vPT4geyBrZXk6ICdvd25lcicsIGtpbmQ6ICdiZWxvbmdzVG8nLCB0eXBl
OiBBcHAuVXNlciB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSByZWxhdGlvbnNo
aXBzQnlOYW1lCi0gICAgICAgIEBzdGF0aWMKLSAgICAgICAgQHR5cGUgRW1iZXIuTWFwCi0gICAg
ICAgIEByZWFkT25seQotICAgICAgKi8KLSAgICAgIHJlbGF0aW9uc2hpcHNCeU5hbWU6IEVtYmVy
LmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgbWFwID0gRW1iZXIuTWFwLmNyZWF0
ZSgpOwotCi0gICAgICAgIHRoaXMuZWFjaENvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24obmFtZSwg
bWV0YSkgewotICAgICAgICAgIGlmIChtZXRhLmlzUmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAg
ICBtZXRhLmtleSA9IG5hbWU7Ci0gICAgICAgICAgICB2YXIgcmVsYXRpb25zaGlwID0gcmVsYXRp
b25zaGlwRnJvbU1ldGEodGhpcy5zdG9yZSwgbWV0YSk7Ci0gICAgICAgICAgICByZWxhdGlvbnNo
aXAudHlwZSA9IHR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhKHRoaXMuc3RvcmUsIG1ldGEpOwotICAg
ICAgICAgICAgbWFwLnNldChuYW1lLCByZWxhdGlvbnNoaXApOwotICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIG1hcDsKLSAgICAgIH0pLmNhY2hlYWJsZShmYWxzZSks
Ci0KLSAgICAgIC8qKgotICAgICAgICBBIG1hcCB3aG9zZSBrZXlzIGFyZSB0aGUgZmllbGRzIG9m
IHRoZSBtb2RlbCBhbmQgd2hvc2UgdmFsdWVzIGFyZSBzdHJpbmdzCi0gICAgICAgIGRlc2NyaWJp
bmcgdGhlIGtpbmQgb2YgdGhlIGZpZWxkLiBBIG1vZGVsJ3MgZmllbGRzIGFyZSB0aGUgdW5pb24g
b2YgYWxsIG9mIGl0cwotICAgICAgICBhdHRyaWJ1dGVzIGFuZCByZWxhdGlvbnNoaXBzLgotCi0g
ICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLQotICAgICAgICBB
cHAuQmxvZyA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdXNlcnM6IERTLmhhc01hbnko
J3VzZXInKSwKLSAgICAgICAgICBvd25lcjogRFMuYmVsb25nc1RvKCd1c2VyJyksCi0KLSAgICAg
ICAgICBwb3N0czogRFMuaGFzTWFueSgncG9zdCcpLAotCi0gICAgICAgICAgdGl0bGU6IERTLmF0
dHIoJ3N0cmluZycpCi0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciBmaWVsZHMgPSBFbWJlci5n
ZXQoQXBwLkJsb2csICdmaWVsZHMnKTsKLSAgICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24o
ZmllbGQsIGtpbmQpIHsKLSAgICAgICAgICBjb25zb2xlLmxvZyhmaWVsZCwga2luZCk7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIC8vIHByaW50czoKLSAgICAgICAgLy8gdXNlcnMsIGhhc01hbnkK
LSAgICAgICAgLy8gb3duZXIsIGJlbG9uZ3NUbwotICAgICAgICAvLyBwb3N0cywgaGFzTWFueQot
ICAgICAgICAvLyB0aXRsZSwgYXR0cmlidXRlCi0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9w
ZXJ0eSBmaWVsZHMKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAdHlwZSBFbWJlci5NYXAKLSAg
ICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgZmllbGRzOiBFbWJlci5jb21wdXRlZChm
dW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG1hcCA9IEVtYmVyLk1hcC5jcmVhdGUoKTsKLQotICAg
ICAgICB0aGlzLmVhY2hDb21wdXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKLSAg
ICAgICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAgbWFwLnNldChu
YW1lLCBtZXRhLmtpbmQpOwotICAgICAgICAgIH0gZWxzZSBpZiAobWV0YS5pc0F0dHJpYnV0ZSkg
ewotICAgICAgICAgICAgbWFwLnNldChuYW1lLCAnYXR0cmlidXRlJyk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gbWFwOwotICAgICAgfSksCi0KLSAgICAgIC8q
KgotICAgICAgICBHaXZlbiBhIGNhbGxiYWNrLCBpdGVyYXRlcyBvdmVyIGVhY2ggb2YgdGhlIHJl
bGF0aW9uc2hpcHMgaW4gdGhlIG1vZGVsLAotICAgICAgICBpbnZva2luZyB0aGUgY2FsbGJhY2sg
d2l0aCB0aGUgbmFtZSBvZiBlYWNoIHJlbGF0aW9uc2hpcCBhbmQgaXRzIHJlbGF0aW9uc2hpcAot
ICAgICAgICBkZXNjcmlwdG9yLgotCi0gICAgICAgIEBtZXRob2QgZWFjaFJlbGF0aW9uc2hpcAot
ICAgICAgICBAc3RhdGljCi0gICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIHRoZSBj
YWxsYmFjayB0byBpbnZva2UKLSAgICAgICAgQHBhcmFtIHthbnl9IGJpbmRpbmcgdGhlIHZhbHVl
IHRvIHdoaWNoIHRoZSBjYWxsYmFjaydzIGB0aGlzYCBzaG91bGQgYmUgYm91bmQKLSAgICAgICov
Ci0gICAgICBlYWNoUmVsYXRpb25zaGlwOiBmdW5jdGlvbihjYWxsYmFjaywgYmluZGluZykgewot
ICAgICAgICBnZXQodGhpcywgJ3JlbGF0aW9uc2hpcHNCeU5hbWUnKS5mb3JFYWNoKGZ1bmN0aW9u
KG5hbWUsIHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZywg
bmFtZSwgcmVsYXRpb25zaGlwKTsKLSAgICAgICAgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgR2l2ZW4gYSBjYWxsYmFjaywgaXRlcmF0ZXMgb3ZlciBlYWNoIG9mIHRoZSB0eXBl
cyByZWxhdGVkIHRvIGEgbW9kZWwsCi0gICAgICAgIGludm9raW5nIHRoZSBjYWxsYmFjayB3aXRo
IHRoZSByZWxhdGVkIHR5cGUncyBjbGFzcy4gRWFjaCB0eXBlIHdpbGwgYmUKLSAgICAgICAgcmV0
dXJuZWQganVzdCBvbmNlLCByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGRpZmZlcmVudCByZWxhdGlv
bnNoaXBzIGl0IGhhcwotICAgICAgICB3aXRoIGEgbW9kZWwuCi0KLSAgICAgICAgQG1ldGhvZCBl
YWNoUmVsYXRlZFR5cGUKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8gaW52b2tlCi0gICAgICAgIEBwYXJhbSB7YW55fSBi
aW5kaW5nIHRoZSB2YWx1ZSB0byB3aGljaCB0aGUgY2FsbGJhY2sncyBgdGhpc2Agc2hvdWxkIGJl
IGJvdW5kCi0gICAgICAqLwotICAgICAgZWFjaFJlbGF0ZWRUeXBlOiBmdW5jdGlvbihjYWxsYmFj
aywgYmluZGluZykgewotICAgICAgICBnZXQodGhpcywgJ3JlbGF0ZWRUeXBlcycpLmZvckVhY2go
ZnVuY3Rpb24odHlwZSkgewotICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZywgdHlwZSk7
Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0pOwotCi0gICAgTW9kZWwucmVvcGVuKHsKLSAg
ICAgIC8qKgotICAgICAgICBHaXZlbiBhIGNhbGxiYWNrLCBpdGVyYXRlcyBvdmVyIGVhY2ggb2Yg
dGhlIHJlbGF0aW9uc2hpcHMgaW4gdGhlIG1vZGVsLAotICAgICAgICBpbnZva2luZyB0aGUgY2Fs
bGJhY2sgd2l0aCB0aGUgbmFtZSBvZiBlYWNoIHJlbGF0aW9uc2hpcCBhbmQgaXRzIHJlbGF0aW9u
c2hpcAotICAgICAgICBkZXNjcmlwdG9yLgotCi0gICAgICAgIEBtZXRob2QgZWFjaFJlbGF0aW9u
c2hpcAotICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayB0aGUgY2FsbGJhY2sgdG8g
aW52b2tlCi0gICAgICAgIEBwYXJhbSB7YW55fSBiaW5kaW5nIHRoZSB2YWx1ZSB0byB3aGljaCB0
aGUgY2FsbGJhY2sncyBgdGhpc2Agc2hvdWxkIGJlIGJvdW5kCi0gICAgICAqLwotICAgICAgZWFj
aFJlbGF0aW9uc2hpcDogZnVuY3Rpb24oY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAgICAgICAgdGhp
cy5jb25zdHJ1Y3Rvci5lYWNoUmVsYXRpb25zaGlwKGNhbGxiYWNrLCBiaW5kaW5nKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9yZWxhdGlv
bnNoaXBzL2hhc19tYW55IiwgCi0gIFsiLi4vc3RvcmUiLCIuLi9yZWxhdGlvbnNoaXAtbWV0YSIs
ImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVs
ZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBQcm9taXNlQXJyYXkgPSBfX2RlcGVuZGVu
Y3kxX18uUHJvbWlzZUFycmF5OwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVy
LnNldCwgc2V0UHJvcGVydGllcyA9IEVtYmVyLnNldFByb3BlcnRpZXM7Ci0gICAgdmFyIHJlbGF0
aW9uc2hpcEZyb21NZXRhID0gX19kZXBlbmRlbmN5Ml9fLnJlbGF0aW9uc2hpcEZyb21NZXRhOwot
ICAgIHZhciB0eXBlRm9yUmVsYXRpb25zaGlwTWV0YSA9IF9fZGVwZW5kZW5jeTJfXy50eXBlRm9y
UmVsYXRpb25zaGlwTWV0YTsKLQotICAgIGZ1bmN0aW9uIGFzeW5jSGFzTWFueSh0eXBlLCBvcHRp
b25zLCBtZXRhKSB7Ci0gICAgICByZXR1cm4gRW1iZXIuY29tcHV0ZWQoJ2RhdGEnLCBmdW5jdGlv
bihrZXkpIHsKLSAgICAgICAgdmFyIHJlbGF0aW9uc2hpcCA9IHRoaXMuX3JlbGF0aW9uc2hpcHNb
a2V5XSwKLSAgICAgICAgICAgIHByb21pc2VMYWJlbCA9ICJEUzogQXN5bmMgaGFzTWFueSAiICsg
dGhpcyArICIgOiAiICsga2V5OwotCi0gICAgICAgIG1ldGEua2V5ID0ga2V5OwotCi0gICAgICAg
IGlmICghcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgdmFyIHJlc29sdmVyID0gRW1iZXIuUlNW
UC5kZWZlcihwcm9taXNlTGFiZWwpOwotICAgICAgICAgIHJlbGF0aW9uc2hpcCA9IGJ1aWxkUmVs
YXRpb25zaGlwKHRoaXMsIGtleSwgb3B0aW9ucywgZnVuY3Rpb24oc3RvcmUsIGRhdGEpIHsKLSAg
ICAgICAgICAgIHZhciBsaW5rID0gZGF0YS5saW5rcyAmJiBkYXRhLmxpbmtzW2tleV07Ci0gICAg
ICAgICAgICB2YXIgcmVsOwotICAgICAgICAgICAgaWYgKGxpbmspIHsKLSAgICAgICAgICAgICAg
cmVsID0gc3RvcmUuZmluZEhhc01hbnkodGhpcywgbGluaywgcmVsYXRpb25zaGlwRnJvbU1ldGEo
c3RvcmUsIG1ldGEpLCByZXNvbHZlcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICByZWwgPSBzdG9yZS5maW5kTWFueSh0aGlzLCBkYXRhW2tleV0sIHR5cGVGb3JSZWxhdGlv
bnNoaXBNZXRhKHN0b3JlLCBtZXRhKSwgcmVzb2x2ZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gY2FjaGUgdGhlIHByb21pc2Ugc28gd2UgY2FuIHVzZSBpdAotICAgICAgICAgICAg
Ly8gd2hlbiB3ZSBjb21lIGJhY2sgYW5kIGRvbid0IG5lZWQgdG8gcmVidWlsZAotICAgICAgICAg
ICAgLy8gdGhlIHJlbGF0aW9uc2hpcC4KLSAgICAgICAgICAgIHNldChyZWwsICdwcm9taXNlJywg
cmVzb2x2ZXIucHJvbWlzZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVsOwotICAgICAgICAgIH0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHByb21pc2UgPSByZWxhdGlvbnNoaXAuZ2V0KCdw
cm9taXNlJykudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICByZXR1cm4gcmVsYXRpb25zaGlw
OwotICAgICAgICB9LCBudWxsLCAiRFM6IEFzeW5jIGhhc01hbnkgcmVjb3JkcyByZWNlaXZlZCIp
OwotCi0gICAgICAgIHJldHVybiBQcm9taXNlQXJyYXkuY3JlYXRlKHsKLSAgICAgICAgICBwcm9t
aXNlOiBwcm9taXNlCi0gICAgICAgIH0pOwotICAgICAgfSkubWV0YShtZXRhKS5yZWFkT25seSgp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGJ1aWxkUmVsYXRpb25zaGlwKHJlY29yZCwga2V5LCBv
cHRpb25zLCBjYWxsYmFjaykgewotICAgICAgdmFyIHJlbHMgPSByZWNvcmQuX3JlbGF0aW9uc2hp
cHM7Ci0KLSAgICAgIGlmIChyZWxzW2tleV0pIHsgcmV0dXJuIHJlbHNba2V5XTsgfQotCi0gICAg
ICB2YXIgZGF0YSA9IGdldChyZWNvcmQsICdkYXRhJyksCi0gICAgICAgICAgc3RvcmUgPSBnZXQo
cmVjb3JkLCAnc3RvcmUnKTsKLQotICAgICAgdmFyIHJlbGF0aW9uc2hpcCA9IHJlbHNba2V5XSA9
IGNhbGxiYWNrLmNhbGwocmVjb3JkLCBzdG9yZSwgZGF0YSk7Ci0KLSAgICAgIHJldHVybiBzZXRQ
cm9wZXJ0aWVzKHJlbGF0aW9uc2hpcCwgewotICAgICAgICBvd25lcjogcmVjb3JkLAotICAgICAg
ICBuYW1lOiBrZXksCi0gICAgICAgIGlzUG9seW1vcnBoaWM6IG9wdGlvbnMucG9seW1vcnBoaWMK
LSAgICAgIH0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhc1JlbGF0aW9uc2hpcCh0eXBlLCBv
cHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgdmFyIG1l
dGEgPSB7Ci0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgIGlzUmVsYXRpb25zaGlwOiB0cnVl
LAotICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBraW5kOiAnaGFzTWFueScsCi0g
ICAgICAgIGtleTogbnVsbAotICAgICAgfTsKLQotICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHsK
LSAgICAgICAgcmV0dXJuIGFzeW5jSGFzTWFueSh0eXBlLCBvcHRpb25zLCBtZXRhKTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIEVtYmVyLmNvbXB1dGVkKCdkYXRhJywgZnVuY3Rpb24oa2V5KSB7
Ci0gICAgICAgIHJldHVybiBidWlsZFJlbGF0aW9uc2hpcCh0aGlzLCBrZXksIG9wdGlvbnMsIGZ1
bmN0aW9uKHN0b3JlLCBkYXRhKSB7Ci0gICAgICAgICAgdmFyIHJlY29yZHMgPSBkYXRhW2tleV07
Ci0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbG9va2VkIHVwIHRoZSAnIiArIGtleSArICIn
IHJlbGF0aW9uc2hpcCBvbiAnIiArIHRoaXMgKyAiJyBidXQgc29tZSBvZiB0aGUgYXNzb2NpYXRl
ZCByZWNvcmRzIHdlcmUgbm90IGxvYWRlZC4gRWl0aGVyIG1ha2Ugc3VyZSB0aGV5IGFyZSBhbGwg
bG9hZGVkIHRvZ2V0aGVyIHdpdGggdGhlIHBhcmVudCByZWNvcmQsIG9yIHNwZWNpZnkgdGhhdCB0
aGUgcmVsYXRpb25zaGlwIGlzIGFzeW5jIChgRFMuaGFzTWFueSh7IGFzeW5jOiB0cnVlIH0pYCki
LCBFbWJlci5BKHJlY29yZHMpLmV2ZXJ5UHJvcGVydHkoJ2lzRW1wdHknLCBmYWxzZSkpOwotICAg
ICAgICAgIHJldHVybiBzdG9yZS5maW5kTWFueSh0aGlzLCBkYXRhW2tleV0sIHR5cGVGb3JSZWxh
dGlvbnNoaXBNZXRhKHN0b3JlLCBtZXRhKSk7Ci0gICAgICAgIH0pOwotICAgICAgfSkubWV0YSht
ZXRhKS5yZWFkT25seSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAgYERTLmhhc01hbnlgIGlz
IHVzZWQgdG8gZGVmaW5lIE9uZS1Uby1NYW55IGFuZCBNYW55LVRvLU1hbnkKLSAgICAgIHJlbGF0
aW9uc2hpcHMgb24gYSBbRFMuTW9kZWxdKC9hcGkvZGF0YS9jbGFzc2VzL0RTLk1vZGVsLmh0bWwp
LgotCi0gICAgICBgRFMuaGFzTWFueWAgdGFrZXMgYW4gb3B0aW9uYWwgaGFzaCBhcyBhIHNlY29u
ZCBwYXJhbWV0ZXIsIGN1cnJlbnRseQotICAgICAgc3VwcG9ydGVkIG9wdGlvbnMgYXJlOgotCi0g
ICAgICAtIGBhc3luY2A6IEEgYm9vbGVhbiB2YWx1ZSB1c2VkIHRvIGV4cGxpY2l0bHkgZGVjbGFy
ZSB0aGlzIHRvIGJlIGFuIGFzeW5jIHJlbGF0aW9uc2hpcC4KLSAgICAgIC0gYGludmVyc2VgOiBB
IHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBpbnZlcnNlIHByb3BlcnR5IG9uIGEgcmVsYXRl
ZCBtb2RlbC4KLQotICAgICAgIyMjIyBPbmUtVG8tTWFueQotICAgICAgVG8gZGVjbGFyZSBhIG9u
ZS10by1tYW55IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byBtb2RlbHMsIHVzZQotICAgICAgYERT
LmJlbG9uZ3NUb2AgaW4gY29tYmluYXRpb24gd2l0aCBgRFMuaGFzTWFueWAsIGxpa2UgdGhpczoK
LQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLlBvc3QgPSBEUy5Nb2RlbC5leHRlbmQo
ewotICAgICAgICBjb21tZW50czogRFMuaGFzTWFueSgnY29tbWVudCcpCi0gICAgICB9KTsKLQot
ICAgICAgQXBwLkNvbW1lbnQgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBwb3N0OiBEUy5i
ZWxvbmdzVG8oJ3Bvc3QnKQotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgIyMjIyBNYW55
LVRvLU1hbnkKLSAgICAgIFRvIGRlY2xhcmUgYSBtYW55LXRvLW1hbnkgcmVsYXRpb25zaGlwIGJl
dHdlZW4gdHdvIG1vZGVscywgdXNlCi0gICAgICBgRFMuaGFzTWFueWA6Ci0KLSAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgdGFn
czogRFMuaGFzTWFueSgndGFnJykKLSAgICAgIH0pOwotCi0gICAgICBBcHAuVGFnID0gRFMuTW9k
ZWwuZXh0ZW5kKHsKLSAgICAgICAgcG9zdHM6IERTLmhhc01hbnkoJ3Bvc3QnKQotICAgICAgfSk7
Ci0gICAgICBgYGAKLQotICAgICAgIyMjIyBFeHBsaWNpdCBJbnZlcnNlcwotCi0gICAgICBFbWJl
ciBEYXRhIHdpbGwgZG8gaXRzIGJlc3QgdG8gZGlzY292ZXIgd2hpY2ggcmVsYXRpb25zaGlwcyBt
YXAgdG8KLSAgICAgIG9uZSBhbm90aGVyLiBJbiB0aGUgb25lLXRvLW1hbnkgY29kZSBhYm92ZSwg
Zm9yIGV4YW1wbGUsIEVtYmVyIERhdGEKLSAgICAgIGNhbiBmaWd1cmUgb3V0IHRoYXQgY2hhbmdp
bmcgdGhlIGBjb21tZW50c2AgcmVsYXRpb25zaGlwIHNob3VsZCB1cGRhdGUKLSAgICAgIHRoZSBg
cG9zdGAgcmVsYXRpb25zaGlwIG9uIHRoZSBpbnZlcnNlIGJlY2F1c2UgcG9zdCBpcyB0aGUgb25s
eQotICAgICAgcmVsYXRpb25zaGlwIHRvIHRoYXQgbW9kZWwuCi0KLSAgICAgIEhvd2V2ZXIsIHNv
bWV0aW1lcyB5b3UgbWF5IGhhdmUgbXVsdGlwbGUgYGJlbG9uZ3NUb2AvYGhhc01hbnlzYCBmb3Ig
dGhlCi0gICAgICBzYW1lIHR5cGUuIFlvdSBjYW4gc3BlY2lmeSB3aGljaCBwcm9wZXJ0eSBvbiB0
aGUgcmVsYXRlZCBtb2RlbCBpcwotICAgICAgdGhlIGludmVyc2UgdXNpbmcgYERTLmhhc01hbnlg
J3MgYGludmVyc2VgIG9wdGlvbjoKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGJl
bG9uZ3NUbyA9IERTLmJlbG9uZ3NUbywKLSAgICAgICAgICBoYXNNYW55ID0gRFMuaGFzTWFueTsK
LQotICAgICAgQXBwLkNvbW1lbnQgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBvbmVQb3N0
OiBiZWxvbmdzVG8oJ3Bvc3QnKSwKLSAgICAgICAgdHdvUG9zdDogYmVsb25nc1RvKCdwb3N0Jyks
Ci0gICAgICAgIHJlZFBvc3Q6IGJlbG9uZ3NUbygncG9zdCcpLAotICAgICAgICBibHVlUG9zdDog
YmVsb25nc1RvKCdwb3N0JykKLSAgICAgIH0pOwotCi0gICAgICBBcHAuUG9zdCA9IERTLk1vZGVs
LmV4dGVuZCh7Ci0gICAgICAgIGNvbW1lbnRzOiBoYXNNYW55KCdjb21tZW50JywgewotICAgICAg
ICAgIGludmVyc2U6ICdyZWRQb3N0JwotICAgICAgICB9KQotICAgICAgfSk7Ci0gICAgICBgYGAK
LQotICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gaW52ZXJzZSBvbiBhIGBiZWxvbmdzVG9g
LCB3aGljaCB3b3JrcyBob3cKLSAgICAgIHlvdSdkIGV4cGVjdC4KLQotICAgICAgQG5hbWVzcGFj
ZQotICAgICAgQG1ldGhvZCBoYXNNYW55Ci0gICAgICBAZm9yIERTCi0gICAgICBAcGFyYW0ge1N0
cmluZyBvciBEUy5Nb2RlbH0gdHlwZSB0aGUgbW9kZWwgdHlwZSBvZiB0aGUgcmVsYXRpb25zaGlw
Ci0gICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhIGhhc2ggb2Ygb3B0aW9ucwotICAgICAg
QHJldHVybiB7RW1iZXIuY29tcHV0ZWR9IHJlbGF0aW9uc2hpcAotICAgICovCi0gICAgZnVuY3Rp
b24gaGFzTWFueSh0eXBlLCBvcHRpb25zKSB7Ci0gICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdv
YmplY3QnKSB7Ci0gICAgICAgIG9wdGlvbnMgPSB0eXBlOwotICAgICAgICB0eXBlID0gdW5kZWZp
bmVkOwotICAgICAgfQotICAgICAgcmV0dXJuIGhhc1JlbGF0aW9uc2hpcCh0eXBlLCBvcHRpb25z
KTsKLSAgICB9Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gaGFzTWFueTsKLSAgfSk7
Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9zdG9yZSIsIAotICBbIi4vYWRhcHRlciIs
ImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyIsImV4cG9ydHMiXSwKLSAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
InVzZSBzdHJpY3QiOwotICAgIC8qZ2xvYmFscyBFbWJlciovCi0gICAgLypqc2hpbnQgZXFudWxs
OnRydWUqLwotCi0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0g
ICAgdmFyIEludmFsaWRFcnJvciA9IF9fZGVwZW5kZW5jeTFfXy5JbnZhbGlkRXJyb3I7Ci0gICAg
dmFyIEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3kxX18uQWRhcHRlcjsKLSAgICB2YXIgc2luZ3VsYXJp
emUgPSBfX2RlcGVuZGVuY3kyX18uc2luZ3VsYXJpemU7Ci0gICAgdmFyIGdldCA9IEVtYmVyLmdl
dCwgc2V0ID0gRW1iZXIuc2V0OwotICAgIHZhciBvbmNlID0gRW1iZXIucnVuLm9uY2U7Ci0gICAg
dmFyIGlzTm9uZSA9IEVtYmVyLmlzTm9uZTsKLSAgICB2YXIgZm9yRWFjaCA9IEVtYmVyLkVudW1l
cmFibGVVdGlscy5mb3JFYWNoOwotICAgIHZhciBpbmRleE9mID0gRW1iZXIuRW51bWVyYWJsZVV0
aWxzLmluZGV4T2Y7Ci0gICAgdmFyIG1hcCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5tYXA7Ci0g
ICAgdmFyIFByb21pc2UgPSBFbWJlci5SU1ZQLlByb21pc2U7Ci0gICAgdmFyIGNvcHkgPSBFbWJl
ci5jb3B5OwotICAgIHZhciBTdG9yZSwgUHJvbWlzZU9iamVjdCwgUHJvbWlzZUFycmF5LCBSZWNv
cmRBcnJheU1hbmFnZXIsIE1vZGVsOwotCi0gICAgdmFyIGNhbWVsaXplID0gRW1iZXIuU3RyaW5n
LmNhbWVsaXplOwotCi0gICAgLy8gSW1wbGVtZW50b3JzIE5vdGU6Ci0gICAgLy8KLSAgICAvLyAg
IFRoZSB2YXJpYWJsZXMgaW4gdGhpcyBmaWxlIGFyZSBjb25zaXN0ZW50bHkgbmFtZWQgYWNjb3Jk
aW5nIHRvIHRoZSBmb2xsb3dpbmcKLSAgICAvLyAgIHNjaGVtZToKLSAgICAvLwotICAgIC8vICAg
KiAraWQrIG1lYW5zIGFuIGlkZW50aWZpZXIgbWFuYWdlZCBieSBhbiBleHRlcm5hbCBzb3VyY2Us
IHByb3ZpZGVkIGluc2lkZQotICAgIC8vICAgICB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGF0IHNv
dXJjZS4gVGhlc2UgYXJlIGFsd2F5cyBjb2VyY2VkIHRvIGJlIHN0cmluZ3MKLSAgICAvLyAgICAg
YmVmb3JlIGJlaW5nIHVzZWQgaW50ZXJuYWxseS4KLSAgICAvLyAgICogK2NsaWVudElkKyBtZWFu
cyBhIHRyYW5zaWVudCBudW1lcmljYWwgaWRlbnRpZmllciBnZW5lcmF0ZWQgYXQgcnVudGltZSBi
eQotICAgIC8vICAgICB0aGUgZGF0YSBzdG9yZS4gSXQgaXMgaW1wb3J0YW50IHByaW1hcmlseSBi
ZWNhdXNlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0cyBtYXkKLSAgICAvLyAgICAgbm90IHlldCBoYXZl
IGFuIGV4dGVybmFsbHkgZ2VuZXJhdGVkIGlkLgotICAgIC8vICAgKiArcmVmZXJlbmNlKyBtZWFu
cyBhIHJlY29yZCByZWZlcmVuY2Ugb2JqZWN0LCB3aGljaCBob2xkcyBtZXRhZGF0YSBhYm91dCBh
Ci0gICAgLy8gICAgIHJlY29yZCwgZXZlbiBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGZ1bGx5IG1h
dGVyaWFsaXplZC4KLSAgICAvLyAgICogK3R5cGUrIG1lYW5zIGEgc3ViY2xhc3Mgb2YgRFMuTW9k
ZWwuCi0KLSAgICAvLyBVc2VkIGJ5IHRoZSBzdG9yZSB0byBub3JtYWxpemUgSURzIGVudGVyaW5n
IHRoZSBzdG9yZS4gIERlc3BpdGUgdGhlIGZhY3QKLSAgICAvLyB0aGF0IGRldmVsb3BlcnMgbWF5
IHByb3ZpZGUgSURzIGFzIG51bWJlcnMgKGUuZy4sIGBzdG9yZS5maW5kKFBlcnNvbiwgMSlgKSwK
LSAgICAvLyBpdCBpcyBpbXBvcnRhbnQgdGhhdCBpbnRlcm5hbGx5IHdlIHVzZSBzdHJpbmdzLCBz
aW5jZSBJRHMgbWF5IGJlIHNlcmlhbGl6ZWQKLSAgICAvLyBhbmQgbG9zZSB0eXBlIGluZm9ybWF0
aW9uLiAgRm9yIGV4YW1wbGUsIEVtYmVyJ3Mgcm91dGVyIG1heSBwdXQgYSByZWNvcmQncwotICAg
IC8vIElEIGludG8gdGhlIFVSTCwgYW5kIGlmIHdlIGxhdGVyIHRyeSB0byBkZXNlcmlhbGl6ZSB0
aGF0IFVSTCBhbmQgZmluZCB0aGUKLSAgICAvLyBjb3JyZXNwb25kaW5nIHJlY29yZCwgd2Ugd2ls
bCBub3Qga25vdyBpZiBpdCBpcyBhIHN0cmluZyBvciBhIG51bWJlci4KLSAgICBmdW5jdGlvbiBj
b2VyY2VJZChpZCkgewotICAgICAgcmV0dXJuIGlkID09IG51bGwgPyBudWxsIDogaWQrJyc7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICBUaGUgc3RvcmUgY29udGFpbnMgYWxsIG9mIHRoZSBkYXRh
IGZvciByZWNvcmRzIGxvYWRlZCBmcm9tIHRoZSBzZXJ2ZXIuCi0gICAgICBJdCBpcyBhbHNvIHJl
c3BvbnNpYmxlIGZvciBjcmVhdGluZyBpbnN0YW5jZXMgb2YgYERTLk1vZGVsYCB0aGF0IHdyYXAK
LSAgICAgIHRoZSBpbmRpdmlkdWFsIGRhdGEgZm9yIGEgcmVjb3JkLCBzbyB0aGF0IHRoZXkgY2Fu
IGJlIGJvdW5kIHRvIGluIHlvdXIKLSAgICAgIEhhbmRsZWJhcnMgdGVtcGxhdGVzLgotCi0gICAg
ICBEZWZpbmUgeW91ciBhcHBsaWNhdGlvbidzIHN0b3JlIGxpa2UgdGhpczoKLQotICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgTXlBcHAuU3RvcmUgPSBEUy5TdG9yZS5leHRlbmQoKTsKLSAgICAg
IGBgYAotCi0gICAgICBNb3N0IEVtYmVyLmpzIGFwcGxpY2F0aW9ucyB3aWxsIG9ubHkgaGF2ZSBh
IHNpbmdsZSBgRFMuU3RvcmVgIHRoYXQgaXMKLSAgICAgIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBi
eSB0aGVpciBgRW1iZXIuQXBwbGljYXRpb25gLgotCi0gICAgICBZb3UgY2FuIHJldHJpZXZlIG1v
ZGVscyBmcm9tIHRoZSBzdG9yZSBpbiBzZXZlcmFsIHdheXMuIFRvIHJldHJpZXZlIGEgcmVjb3Jk
Ci0gICAgICBmb3IgYSBzcGVjaWZpYyBpZCwgdXNlIGBEUy5TdG9yZWAncyBgZmluZCgpYCBtZXRo
b2Q6Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBwZXJzb24gPSBzdG9yZS5maW5k
KCdwZXJzb24nLCAxMjMpOwotICAgICAgYGBgCi0KLSAgICAgIElmIHlvdXIgYXBwbGljYXRpb24g
aGFzIG11bHRpcGxlIGBEUy5TdG9yZWAgaW5zdGFuY2VzIChhbiB1bnVzdWFsIGNhc2UpLCB5b3Ug
Y2FuCi0gICAgICBzcGVjaWZ5IHdoaWNoIHN0b3JlIHNob3VsZCBiZSB1c2VkOgotCi0gICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgcGVyc29uID0gc3RvcmUuZmluZCgncGVyc29uJywgMTIz
KTsKLSAgICAgIGBgYAotCi0gICAgICBCeSBkZWZhdWx0LCB0aGUgc3RvcmUgd2lsbCB0YWxrIHRv
IHlvdXIgYmFja2VuZCB1c2luZyBhIHN0YW5kYXJkCi0gICAgICBSRVNUIG1lY2hhbmlzbS4gWW91
IGNhbiBjdXN0b21pemUgaG93IHRoZSBzdG9yZSB0YWxrcyB0byB5b3VyCi0gICAgICBiYWNrZW5k
IGJ5IHNwZWNpZnlpbmcgYSBjdXN0b20gYWRhcHRlcjoKLQotICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgIE15QXBwLnN0b3JlID0gRFMuU3RvcmUuY3JlYXRlKHsKLSAgICAgICAgIGFkYXB0ZXI6
ICdNeUFwcC5DdXN0b21BZGFwdGVyJwotICAgICAgIH0pOwotICAgICAgIGBgYAotCi0gICAgICBZ
b3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgd3JpdGluZyBhIGN1c3RvbSBhZGFwdGVyIGJ5IHJlYWRp
bmcgdGhlIGBEUy5BZGFwdGVyYAotICAgICAgZG9jdW1lbnRhdGlvbi4KLQotICAgICAgIyMjIFN0
b3JlIGNyZWF0ZVJlY29yZCgpIHZzLiBwdXNoKCkgdnMuIHB1c2hQYXlsb2FkKCkgdnMuIHVwZGF0
ZSgpCi0KLSAgICAgIFRoZSBzdG9yZSBwcm92aWRlcyBtdWx0aXBsZSB3YXlzIHRvIGNyZWF0ZSBu
ZXcgcmVjb3JkcyBvYmplY3QuIFRoZXkgaGF2ZQotICAgICAgc29tZSBzdWJ0bGUgZGlmZmVyZW5j
ZXMgaW4gdGhlaXIgdXNlIHdoaWNoIGFyZSBkZXRhaWxlZCBiZWxvdzoKLQotICAgICAgW2NyZWF0
ZVJlY29yZF0oI21ldGhvZF9jcmVhdGVSZWNvcmQpIGlzIHVzZWQgZm9yIGNyZWF0aW5nIG5ldwot
ICAgICAgcmVjb3JkcyBvbiB0aGUgY2xpZW50IHNpZGUuIFRoaXMgd2lsbCByZXR1cm4gYSBuZXcg
cmVjb3JkIGluIHRoZQotICAgICAgYGNyZWF0ZWQudW5jb21taXR0ZWRgIHN0YXRlLiBJbiBvcmRl
ciB0byBwZXJzaXN0IHRoaXMgcmVjb3JkIHRvIHRoZQotICAgICAgYmFja2VuZCB5b3Ugd2lsbCBu
ZWVkIHRvIGNhbGwgYHJlY29yZC5zYXZlKClgLgotCi0gICAgICBbcHVzaF0oI21ldGhvZF9wdXNo
KSBpcyB1c2VkIHRvIG5vdGlmeSBFbWJlciBEYXRhJ3Mgc3RvcmUgb2YgbmV3IG9yCi0gICAgICB1
cGRhdGVkIHJlY29yZHMgdGhhdCBleGlzdCBpbiB0aGUgYmFja2VuZC4gVGhpcyB3aWxsIHJldHVy
biBhIHJlY29yZAotICAgICAgaW4gdGhlIGBsb2FkZWQuc2F2ZWRgIHN0YXRlLiBUaGUgcHJpbWFy
eSB1c2UtY2FzZSBmb3IgYHN0b3JlI3B1c2hgIGlzCi0gICAgICB0byBub3RpZnkgRW1iZXIgRGF0
YSBhYm91dCByZWNvcmQgdXBkYXRlcyB0aGF0IGhhcHBlbgotICAgICAgb3V0c2lkZSBvZiB0aGUg
bm9ybWFsIGFkYXB0ZXIgbWV0aG9kcyAoZm9yIGV4YW1wbGUKLSAgICAgIFtTU0VdKGh0dHA6Ly9k
ZXYudzMub3JnL2h0bWw1L2V2ZW50c291cmNlLykgb3IgW1dlYgotICAgICAgU29ja2V0c10oaHR0
cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC13ZWJzb2NrZXRzLTIwMDkxMjIyLykpLgotCi0gICAg
ICBbcHVzaFBheWxvYWRdKCNtZXRob2RfcHVzaFBheWxvYWQpIGlzIGEgY29udmVuaWVuY2Ugd3Jh
cHBlciBmb3IKLSAgICAgIGBzdG9yZSNwdXNoYCB0aGF0IHdpbGwgZGVzZXJpYWxpemUgcGF5bG9h
ZHMgaWYgdGhlCi0gICAgICBTZXJpYWxpemVyIGltcGxlbWVudHMgYSBgcHVzaFBheWxvYWRgIG1l
dGhvZC4KLQotICAgICAgW3VwZGF0ZV0oI21ldGhvZF91cGRhdGUpIHdvcmtzIGxpa2UgYHB1c2hg
LCBleGNlcHQgaXQgY2FuIGhhbmRsZQotICAgICAgcGFydGlhbCBhdHRyaWJ1dGVzIHdpdGhvdXQg
b3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nIHJlY29yZAotICAgICAgcHJvcGVydGllcy4KLQotICAg
ICAgTm90ZTogV2hlbiBjcmVhdGluZyBhIG5ldyByZWNvcmQgdXNpbmcgYW55IG9mIHRoZSBhYm92
ZSBtZXRob2RzCi0gICAgICBFbWJlciBEYXRhIHdpbGwgdXBkYXRlIGBEUy5SZWNvcmRBcnJheWBz
IHN1Y2ggYXMgdGhvc2UgcmV0dXJuZWQgYnkKLSAgICAgIGBzdG9yZSNhbGwoKWAsIGBzdG9yZSNm
aW5kQWxsKClgIG9yIGBzdG9yZSNmaWx0ZXIoKWAuIFRoaXMgbWVhbnMgYW55Ci0gICAgICBkYXRh
IGJpbmRpbmdzIG9yIGNvbXB1dGVkIHByb3BlcnRpZXMgdGhhdCBkZXBlbmQgb24gdGhlIFJlY29y
ZEFycmF5Ci0gICAgICB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc3luY2VkIHRvIGluY2x1ZGUgdGhl
IG5ldyBvciB1cGRhdGVkIHJlY29yZAotICAgICAgdmFsdWVzLgotCi0gICAgICBAY2xhc3MgU3Rv
cmUKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAg
ICovCi0gICAgU3RvcmUgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLQotICAgICAgLyoqCi0gICAg
ICAgIEBtZXRob2QgaW5pdAotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGluaXQ6
IGZ1bmN0aW9uKCkgewotICAgICAgICAvLyBpbnRlcm5hbCBib29ra2VlcGluZzsgbm90IG9ic2Vy
dmFibGUKLSAgICAgICAgaWYgKCFSZWNvcmRBcnJheU1hbmFnZXIpIHsgUmVjb3JkQXJyYXlNYW5h
Z2VyID0gcmVxdWlyZU1vZHVsZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlY29yZF9hcnJheV9t
YW5hZ2VyIilbImRlZmF1bHQiXTsgfQotICAgICAgICB0aGlzLnR5cGVNYXBzID0ge307Ci0gICAg
ICAgIHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyID0gUmVjb3JkQXJyYXlNYW5hZ2VyLmNyZWF0ZSh7
Ci0gICAgICAgICAgc3RvcmU6IHRoaXMKLSAgICAgICAgfSk7Ci0gICAgICAgIHRoaXMuX3JlbGF0
aW9uc2hpcENoYW5nZXMgPSB7fTsKLSAgICAgICAgdGhpcy5fcGVuZGluZ1NhdmUgPSBbXTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgYWRhcHRlciB0byB1c2UgdG8gY29tbXVu
aWNhdGUgdG8gYSBiYWNrZW5kIHNlcnZlciBvciBvdGhlciBwZXJzaXN0ZW5jZSBsYXllci4KLQot
ICAgICAgICBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gaW5zdGFuY2UsIGNsYXNzLCBvciBz
dHJpbmcuCi0KLSAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBgQXBwLkN1c3RvbUFkYXB0
ZXJgIGFzIGEgc3RyaW5nLCBkbzoKLQotICAgICAgICBgYGBqcwotICAgICAgICBhZGFwdGVyOiAn
Y3VzdG9tJwotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgYWRhcHRlcgotICAgICAg
ICBAZGVmYXVsdCBEUy5SRVNUQWRhcHRlcgotICAgICAgICBAdHlwZSB7RFMuQWRhcHRlcnxTdHJp
bmd9Ci0gICAgICAqLwotICAgICAgYWRhcHRlcjogJy1yZXN0JywKLQotICAgICAgLyoqCi0gICAg
ICAgIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZWNvcmQgdXNpbmcgYSBj
dXN0b20KLSAgICAgICAgdHlwZS1zcGVjaWZpYyBzZXJpYWxpemVyLCBpZiBvbmUgZXhpc3RzLgot
Ci0gICAgICAgIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6Ci0KLSAgICAgICAgKiBgaW5jbHVk
ZUlkYDogYHRydWVgIGlmIHRoZSByZWNvcmQncyBJRCBzaG91bGQgYmUgaW5jbHVkZWQgaW4KLSAg
ICAgICAgICB0aGUgSlNPTiByZXByZXNlbnRhdGlvbgotCi0gICAgICAgIEBtZXRob2Qgc2VyaWFs
aXplCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZCB0
aGUgcmVjb3JkIHRvIHNlcmlhbGl6ZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBh
biBvcHRpb25zIGhhc2gKLSAgICAgICovCi0gICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHJlY29y
ZCwgb3B0aW9ucykgewotICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyRm9yKHJlY29yZC5j
b25zdHJ1Y3Rvci50eXBlS2V5KS5zZXJpYWxpemUocmVjb3JkLCBvcHRpb25zKTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIHByb3BlcnR5IHJldHVybnMgdGhlIGFkYXB0ZXIs
IGFmdGVyIHJlc29sdmluZyBhIHBvc3NpYmxlCi0gICAgICAgIHN0cmluZyBrZXkuCi0KLSAgICAg
ICAgSWYgdGhlIHN1cHBsaWVkIGBhZGFwdGVyYCB3YXMgYSBjbGFzcywgb3IgYSBTdHJpbmcgcHJv
cGVydHkKLSAgICAgICAgcGF0aCByZXNvbHZlZCB0byBhIGNsYXNzLCB0aGlzIHByb3BlcnR5IHdp
bGwgaW5zdGFudGlhdGUgdGhlCi0gICAgICAgIGNsYXNzLgotCi0gICAgICAgIFRoaXMgcHJvcGVy
dHkgaXMgY2FjaGVhYmxlLCBzbyB0aGUgc2FtZSBpbnN0YW5jZSBvZiBhIHNwZWNpZmllZAotICAg
ICAgICBhZGFwdGVyIGNsYXNzIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhl
IHN0b3JlLgotCi0gICAgICAgIEBwcm9wZXJ0eSBkZWZhdWx0QWRhcHRlcgotICAgICAgICBAcHJp
dmF0ZQotICAgICAgICBAcmV0dXJuIERTLkFkYXB0ZXIKLSAgICAgICovCi0gICAgICBkZWZhdWx0
QWRhcHRlcjogRW1iZXIuY29tcHV0ZWQoJ2FkYXB0ZXInLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
dmFyIGFkYXB0ZXIgPSBnZXQodGhpcywgJ2FkYXB0ZXInKTsKLQotICAgICAgICBFbWJlci5hc3Nl
cnQoJ1lvdSB0cmllZCB0byBzZXQgYGFkYXB0ZXJgIHByb3BlcnR5IHRvIGFuIGluc3RhbmNlIG9m
IGBEUy5BZGFwdGVyYCwgd2hlcmUgaXQgc2hvdWxkIGJlIGEgbmFtZSBvciBhIGZhY3RvcnknLCAh
KGFkYXB0ZXIgaW5zdGFuY2VvZiBBZGFwdGVyKSk7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBhZGFw
dGVyID09PSAnc3RyaW5nJykgewotICAgICAgICAgIGFkYXB0ZXIgPSB0aGlzLmNvbnRhaW5lci5s
b29rdXAoJ2FkYXB0ZXI6JyArIGFkYXB0ZXIpIHx8IHRoaXMuY29udGFpbmVyLmxvb2t1cCgnYWRh
cHRlcjphcHBsaWNhdGlvbicpIHx8IHRoaXMuY29udGFpbmVyLmxvb2t1cCgnYWRhcHRlcjotcmVz
dCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKERTLkFkYXB0ZXIuZGV0ZWN0KGFkYXB0ZXIp
KSB7Ci0gICAgICAgICAgYWRhcHRlciA9IGFkYXB0ZXIuY3JlYXRlKHsKLSAgICAgICAgICAgIGNv
bnRhaW5lcjogdGhpcy5jb250YWluZXIKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBhZGFwdGVyOwotICAgICAgfSksCi0KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLgotICAgICAgLy8gLiBDUkVBVEUgTkVXIFJFQ09SRCAuCi0gICAgICAvLyAuLi4uLi4u
Li4uLi4uLi4uLi4uLi4KLQotICAgICAgLyoqCi0gICAgICAgIENyZWF0ZSBhIG5ldyByZWNvcmQg
aW4gdGhlIGN1cnJlbnQgc3RvcmUuIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZAotICAgICAgICB0byB0
aGlzIG1ldGhvZCBhcmUgc2V0IG9uIHRoZSBuZXdseSBjcmVhdGVkIHJlY29yZC4KLQotICAgICAg
ICBUbyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYEFwcC5Qb3N0YDoKLQotICAgICAgICBgYGBq
cwotICAgICAgICBzdG9yZS5jcmVhdGVSZWNvcmQoJ3Bvc3QnLCB7Ci0gICAgICAgICAgdGl0bGU6
ICJSYWlscyBpcyBvbWFrYXNlIgotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAg
QG1ldGhvZCBjcmVhdGVSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgYSBoYXNoIG9mIHByb3BlcnRpZXMgdG8gc2V0
IG9uIHRoZQotICAgICAgICAgIG5ld2x5IGNyZWF0ZWQgcmVjb3JkLgotICAgICAgICBAcmV0dXJu
IHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlv
bih0eXBlLCBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUp
OwotCi0gICAgICAgIHByb3BlcnRpZXMgPSBjb3B5KHByb3BlcnRpZXMpIHx8IHt9OwotCi0gICAg
ICAgIC8vIElmIHRoZSBwYXNzZWQgcHJvcGVydGllcyBkbyBub3QgaW5jbHVkZSBhIHByaW1hcnkg
a2V5LAotICAgICAgICAvLyBnaXZlIHRoZSBhZGFwdGVyIGFuIG9wcG9ydHVuaXR5IHRvIGdlbmVy
YXRlIG9uZS4gVHlwaWNhbGx5LAotICAgICAgICAvLyBjbGllbnQtc2lkZSBJRCBnZW5lcmF0b3Jz
IHdpbGwgdXNlIHNvbWV0aGluZyBsaWtlIHV1aWQuanMKLSAgICAgICAgLy8gdG8gYXZvaWQgY29u
ZmxpY3RzLgotCi0gICAgICAgIGlmIChpc05vbmUocHJvcGVydGllcy5pZCkpIHsKLSAgICAgICAg
ICBwcm9wZXJ0aWVzLmlkID0gdGhpcy5fZ2VuZXJhdGVJZCh0eXBlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENvZXJjZSBJRCB0byBhIHN0cmluZwotICAgICAgICBwcm9wZXJ0aWVzLmlkID0g
Y29lcmNlSWQocHJvcGVydGllcy5pZCk7Ci0KLSAgICAgICAgdmFyIHJlY29yZCA9IHRoaXMuYnVp
bGRSZWNvcmQodHlwZSwgcHJvcGVydGllcy5pZCk7Ci0KLSAgICAgICAgLy8gTW92ZSB0aGUgcmVj
b3JkIG91dCBvZiBpdHMgaW5pdGlhbCBgZW1wdHlgIHN0YXRlIGludG8KLSAgICAgICAgLy8gdGhl
IGBsb2FkZWRgIHN0YXRlLgotICAgICAgICByZWNvcmQubG9hZGVkRGF0YSgpOwotCi0gICAgICAg
IC8vIFNldCB0aGUgcHJvcGVydGllcyBzcGVjaWZpZWQgb24gdGhlIHJlY29yZC4KLSAgICAgICAg
cmVjb3JkLnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7Ci0KLSAgICAgICAgcmV0dXJuIHJlY29y
ZDsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJZiBwb3NzaWJsZSwgdGhpcyBtZXRo
b2QgYXNrcyB0aGUgYWRhcHRlciB0byBnZW5lcmF0ZSBhbiBJRCBmb3IKLSAgICAgICAgYSBuZXds
eSBjcmVhdGVkIHJlY29yZC4KLQotICAgICAgICBAbWV0aG9kIF9nZW5lcmF0ZUlkCi0gICAgICAg
IEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgICAgIEByZXR1cm4g
e1N0cmluZ30gaWYgdGhlIGFkYXB0ZXIgY2FuIGdlbmVyYXRlIG9uZSwgYW4gSUQKLSAgICAgICov
Ci0gICAgICBfZ2VuZXJhdGVJZDogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgYWRhcHRl
ciA9IHRoaXMuYWRhcHRlckZvcih0eXBlKTsKLQotICAgICAgICBpZiAoYWRhcHRlciAmJiBhZGFw
dGVyLmdlbmVyYXRlSWRGb3JSZWNvcmQpIHsKLSAgICAgICAgICByZXR1cm4gYWRhcHRlci5nZW5l
cmF0ZUlkRm9yUmVjb3JkKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICB9LAotCi0gICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBERUxF
VEUgUkVDT1JEIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uCi0KLSAgICAgIC8qKgotICAg
ICAgICBGb3Igc3ltbWV0cnksIGEgcmVjb3JkIGNhbiBiZSBkZWxldGVkIHZpYSB0aGUgc3RvcmUu
Ci0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFy
IHBvc3QgPSBzdG9yZS5jcmVhdGVSZWNvcmQoJ3Bvc3QnLCB7Ci0gICAgICAgICAgdGl0bGU6ICJS
YWlscyBpcyBvbWFrYXNlIgotICAgICAgICB9KTsKLQotICAgICAgICBzdG9yZS5kZWxldGVSZWNv
cmQocG9zdCk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZGVsZXRlUmVjb3JkCi0g
ICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAgIGRlbGV0ZVJl
Y29yZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgIHJlY29yZC5kZWxldGVSZWNvcmQoKTsK
LSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBGb3Igc3ltbWV0cnksIGEgcmVjb3JkIGNh
biBiZSB1bmxvYWRlZCB2aWEgdGhlIHN0b3JlLiBPbmx5Ci0gICAgICAgIG5vbi1kaXJ0eSByZWNv
cmRzIGNhbiBiZSB1bmxvYWRlZC4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICBzdG9yZS5maW5kKCdwb3N0JywgMSkudGhlbihmdW5jdGlvbihwb3N0
KSB7Ci0gICAgICAgICAgc3RvcmUudW5sb2FkUmVjb3JkKHBvc3QpOwotICAgICAgICB9KTsKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCB1bmxvYWRSZWNvcmQKLSAgICAgICAgQHBhcmFt
IHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgdW5sb2FkUmVjb3JkOiBmdW5jdGlv
bihyZWNvcmQpIHsKLSAgICAgICAgcmVjb3JkLnVubG9hZFJlY29yZCgpOwotICAgICAgfSwKLQot
ICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBGSU5EIFJFQ09SRFMgLgotICAg
ICAgLy8gLi4uLi4uLi4uLi4uLi4uLgotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBpcyB0aGUg
bWFpbiBlbnRyeSBwb2ludCBpbnRvIGZpbmRpbmcgcmVjb3Jkcy4gVGhlIGZpcnN0IHBhcmFtZXRl
ciB0bwotICAgICAgICB0aGlzIG1ldGhvZCBpcyB0aGUgbW9kZWwncyBuYW1lIGFzIGEgc3RyaW5n
LgotCi0gICAgICAgIC0tLQotCi0gICAgICAgIFRvIGZpbmQgYSByZWNvcmQgYnkgSUQsIHBhc3Mg
dGhlIGBpZGAgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXI6Ci0KLSAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICBzdG9yZS5maW5kKCdwZXJzb24nLCAxKTsKLSAgICAgICAgYGBgCi0KLSAgICAg
ICAgVGhlIGBmaW5kYCBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGEgKipwcm9taXNlKiogdGhh
dCB3aWxsIGJlIHJlc29sdmVkCi0gICAgICAgIHdpdGggdGhlIHJlY29yZC4gSWYgdGhlIHJlY29y
ZCB3YXMgYWxyZWFkeSBpbiB0aGUgc3RvcmUsIHRoZSBwcm9taXNlIHdpbGwKLSAgICAgICAgYmUg
cmVzb2x2ZWQgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSwgdGhlIHN0b3JlIHdpbGwgYXNrIHRoZSBh
ZGFwdGVyJ3MgYGZpbmRgCi0gICAgICAgIG1ldGhvZCB0byBmaW5kIHRoZSBuZWNlc3NhcnkgZGF0
YS4KLQotICAgICAgICBUaGUgYGZpbmRgIG1ldGhvZCB3aWxsIGFsd2F5cyByZXNvbHZlIGl0cyBw
cm9taXNlIHdpdGggdGhlIHNhbWUgb2JqZWN0IGZvcgotICAgICAgICBhIGdpdmVuIHR5cGUgYW5k
IGBpZGAuCi0KLSAgICAgICAgLS0tCi0KLSAgICAgICAgVG8gZmluZCBhbGwgcmVjb3JkcyBmb3Ig
YSB0eXBlLCBjYWxsIGBmaW5kYCB3aXRoIG5vIGFkZGl0aW9uYWwgcGFyYW1ldGVyczoKLQotICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHN0b3JlLmZpbmQoJ3BlcnNvbicpOwotICAgICAg
ICBgYGAKLQotICAgICAgICBUaGlzIHdpbGwgYXNrIHRoZSBhZGFwdGVyJ3MgYGZpbmRBbGxgIG1l
dGhvZCB0byBmaW5kIHRoZSByZWNvcmRzIGZvciB0aGUKLSAgICAgICAgZ2l2ZW4gdHlwZSwgYW5k
IHJldHVybiBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIG9uY2UgdGhlIHNlcnZlcgot
ICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZXMuCi0KLSAgICAgICAgLS0tCi0KLSAgICAgICAgVG8g
ZmluZCBhIHJlY29yZCBieSBhIHF1ZXJ5LCBjYWxsIGBmaW5kYCB3aXRoIGEgaGFzaCBhcyB0aGUg
c2Vjb25kCi0gICAgICAgIHBhcmFtZXRlcjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgIHN0b3JlLmZpbmQoJ3BlcnNvbicsIHsgcGFnZTogMSB9KTsKLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgVGhpcyB3aWxsIGFzayB0aGUgYWRhcHRlcidzIGBmaW5kUXVlcnlgIG1ldGhvZCB0byBm
aW5kIHRoZSByZWNvcmRzIGZvcgotICAgICAgICB0aGUgcXVlcnksIGFuZCByZXR1cm4gYSBwcm9t
aXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBvbmNlIHRoZSBzZXJ2ZXIKLSAgICAgICAgcmVzcG9u
ZHMuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1
YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fFN0cmluZ3xJ
bnRlZ2VyfG51bGx9IGlkCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAg
ICovCi0gICAgICBmaW5kOiBmdW5jdGlvbih0eXBlLCBpZCkgewotICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBuZWVkIHRvIHBhc3MgYSB0eXBlIHRvIHRoZSBzdG9yZSdzIGZpbmQgbWV0aG9kIiwg
YXJndW1lbnRzLmxlbmd0aCA+PSAxKTsKLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbWF5IG5v
dCBwYXNzIGAiICsgaWQgKyAiYCBhcyBpZCB0byB0aGUgc3RvcmUncyBmaW5kIG1ldGhvZCIsIGFy
Z3VtZW50cy5sZW5ndGggPT09IDEgfHwgIUVtYmVyLmlzTm9uZShpZCkpOwotCi0gICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEFs
bCh0eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGFyZSBwYXNzZWQgYSBxdWVyeSBp
bnN0ZWFkIG9mIGFuIGlkLgotICAgICAgICBpZiAoRW1iZXIudHlwZU9mKGlkKSA9PT0gJ29iamVj
dCcpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5maW5kUXVlcnkodHlwZSwgaWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJ5SWQodHlwZSwgY29lcmNlSWQoaWQpKTsK
LSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcmVj
b3JkIGZvciBhIGdpdmVuIHR5cGUgYW5kIGlkIGNvbWJpbmF0aW9uLgotCi0gICAgICAgIEBtZXRo
b2QgZmluZEJ5SWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Ig
c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd8SW50ZWdl
cn0gaWQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAg
IGZpbmRCeUlkOiBmdW5jdGlvbih0eXBlLCBpZCkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2Rl
bEZvcih0eXBlKTsKLQotICAgICAgICB2YXIgcmVjb3JkID0gdGhpcy5yZWNvcmRGb3JJZCh0eXBl
LCBpZCk7Ci0gICAgICAgIHZhciBmZXRjaGVkUmVjb3JkID0gdGhpcy5mZXRjaFJlY29yZChyZWNv
cmQpOwotCi0gICAgICAgIHJldHVybiBwcm9taXNlT2JqZWN0KGZldGNoZWRSZWNvcmQgfHwgcmVj
b3JkLCAiRFM6IFN0b3JlI2ZpbmRCeUlkICIgKyB0eXBlICsgIiB3aXRoIGlkOiAiICsgaWQpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIG1ha2VzIGEgc2VyaWVz
IG9mIHJlcXVlc3RzIHRvIHRoZSBhZGFwdGVyJ3MgYGZpbmRgIG1ldGhvZAotICAgICAgICBhbmQg
cmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZXkgYXJlIGFsbCBsb2FkZWQu
Ci0KLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQG1ldGhvZCBmaW5kQnlJZHMKLSAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtBcnJheX0gaWRzCi0gICAgICAg
IEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kQnlJZHM6IGZ1
bmN0aW9uKHR5cGUsIGlkcykgewotICAgICAgICB2YXIgc3RvcmUgPSB0aGlzOwotICAgICAgICB2
YXIgcHJvbWlzZUxhYmVsID0gIkRTOiBTdG9yZSNmaW5kQnlJZHMgIiArIHR5cGU7Ci0gICAgICAg
IHJldHVybiBwcm9taXNlQXJyYXkoRW1iZXIuUlNWUC5hbGwobWFwKGlkcywgZnVuY3Rpb24oaWQp
IHsKLSAgICAgICAgICByZXR1cm4gc3RvcmUuZmluZEJ5SWQodHlwZSwgaWQpOwotICAgICAgICB9
KSkudGhlbihFbWJlci5BLCBudWxsLCAiRFM6IFN0b3JlI2ZpbmRCeUlkcyBvZiAiICsgdHlwZSAr
ICIgY29tcGxldGUiKSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIGJ5IGBmaW5kQnlJZGAgaWYgaXQgZGlzY292ZXJzIHRoYXQgYSBwYXJ0aWN1
bGFyCi0gICAgICAgIHR5cGUvaWQgcGFpciBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0IHRvIGtpY2sg
b2ZmIGEgcmVxdWVzdCB0byB0aGUKLSAgICAgICAgYWRhcHRlci4KLQotICAgICAgICBAbWV0aG9k
IGZldGNoUmVjb3JkCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9
IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgZmV0Y2hSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICBpZiAoaXNOb25lKHJl
Y29yZCkpIHsgcmV0dXJuIG51bGw7IH0KLSAgICAgICAgaWYgKHJlY29yZC5fbG9hZGluZ1Byb21p
c2UpIHsgcmV0dXJuIHJlY29yZC5fbG9hZGluZ1Byb21pc2U7IH0KLSAgICAgICAgaWYgKCFnZXQo
cmVjb3JkLCAnaXNFbXB0eScpKSB7IHJldHVybiBudWxsOyB9Ci0KLSAgICAgICAgdmFyIHR5cGUg
PSByZWNvcmQuY29uc3RydWN0b3IsCi0gICAgICAgICAgICBpZCA9IGdldChyZWNvcmQsICdpZCcp
OwotCi0gICAgICAgIHZhciBhZGFwdGVyID0gdGhpcy5hZGFwdGVyRm9yKHR5cGUpOwotCi0gICAg
ICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGZpbmQgYSByZWNvcmQgYnV0IHlvdSBoYXZl
IG5vIGFkYXB0ZXIgKGZvciAiICsgdHlwZSArICIpIiwgYWRhcHRlcik7Ci0gICAgICAgIEVtYmVy
LmFzc2VydCgiWW91IHRyaWVkIHRvIGZpbmQgYSByZWNvcmQgYnV0IHlvdXIgYWRhcHRlciAoZm9y
ICIgKyB0eXBlICsgIikgZG9lcyBub3QgaW1wbGVtZW50ICdmaW5kJyIsIGFkYXB0ZXIuZmluZCk7
Ci0KLSAgICAgICAgdmFyIHByb21pc2UgPSBfZmluZChhZGFwdGVyLCB0aGlzLCB0eXBlLCBpZCk7
Ci0gICAgICAgIHJlY29yZC5sb2FkaW5nRGF0YShwcm9taXNlKTsKLSAgICAgICAgcmV0dXJuIHBy
b21pc2U7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgR2V0IGEgcmVjb3JkIGJ5IGEg
Z2l2ZW4gdHlwZSBhbmQgSUQgd2l0aG91dCB0cmlnZ2VyaW5nIGEgZmV0Y2guCi0KLSAgICAgICAg
VGhpcyBtZXRob2Qgd2lsbCBzeW5jaHJvbm91c2x5IHJldHVybiB0aGUgcmVjb3JkIGlmIGl0J3Mg
YXZhaWxhYmxlLgotICAgICAgICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIG51bGwuCi0KLSAg
ICAgICAgYGBganMKLSAgICAgICAgdmFyIHBvc3QgPSBzdG9yZS5nZXRCeUlkKCdwb3N0JywgMSk7
Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZ2V0QnlJZAotICAgICAgICBAcGFyYW0g
e1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge1N0
cmluZ3xJbnRlZ2VyfSBpZAotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAg
ICovCi0gICAgICBnZXRCeUlkOiBmdW5jdGlvbih0eXBlLCBpZCkgewotICAgICAgICBpZiAodGhp
cy5oYXNSZWNvcmRGb3JJZCh0eXBlLCBpZCkpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5yZWNv
cmRGb3JJZCh0eXBlLCBpZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgYnkgdGhlIHJlY29yZCdzIGByZWxvYWRgIG1ldGhvZC4KLQotICAgICAgICBU
aGlzIG1ldGhvZCBjYWxscyB0aGUgYWRhcHRlcidzIGBmaW5kYCBtZXRob2QsIHdoaWNoIHJldHVy
bnMgYSBwcm9taXNlLiBXaGVuCi0gICAgICAgICoqdGhhdCoqIHByb21pc2UgcmVzb2x2ZXMsIGBy
ZWxvYWRSZWNvcmRgIHdpbGwgcmVzb2x2ZSB0aGUgcHJvbWlzZSByZXR1cm5lZAotICAgICAgICBi
eSB0aGUgcmVjb3JkJ3MgYHJlbG9hZGAuCi0KLSAgICAgICAgQG1ldGhvZCByZWxvYWRSZWNvcmQK
LSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAg
ICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICByZWxvYWRSZWNv
cmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICB2YXIgdHlwZSA9IHJlY29yZC5jb25zdHJ1
Y3RvciwKLSAgICAgICAgICAgIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSksCi0gICAg
ICAgICAgICBpZCA9IGdldChyZWNvcmQsICdpZCcpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IGNhbm5vdCByZWxvYWQgYSByZWNvcmQgd2l0aG91dCBhbiBJRCIsIGlkKTsKLSAgICAgICAg
RW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gcmVsb2FkIGEgcmVjb3JkIGJ1dCB5b3UgaGF2ZSBu
byBhZGFwdGVyIChmb3IgIiArIHR5cGUgKyAiKSIsIGFkYXB0ZXIpOwotICAgICAgICBFbWJlci5h
c3NlcnQoIllvdSB0cmllZCB0byByZWxvYWQgYSByZWNvcmQgYnV0IHlvdXIgYWRhcHRlciBkb2Vz
IG5vdCBpbXBsZW1lbnQgYGZpbmRgIiwgYWRhcHRlci5maW5kKTsKLQotICAgICAgICByZXR1cm4g
X2ZpbmQoYWRhcHRlciwgdGhpcywgdHlwZSwgaWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgbGlzdCBvZiByZWNvcmRzLCBncm91cHMgdGhlIHJl
Y29yZHMgYnkgdHlwZSwKLSAgICAgICAgY29udmVydHMgdGhlIHJlY29yZHMgaW50byBJRHMsIGFu
ZCB0aGVuIGludm9rZXMgdGhlIGFkYXB0ZXIncyBgZmluZE1hbnlgCi0gICAgICAgIG1ldGhvZC4K
LQotICAgICAgICBUaGUgcmVjb3JkcyBhcmUgZ3JvdXBlZCBieSB0eXBlIHRvIGludm9rZSBgZmlu
ZE1hbnlgIG9uIGFkYXB0ZXJzCi0gICAgICAgIGZvciBlYWNoIHVuaXF1ZSB0eXBlIGluIHJlY29y
ZHMuCi0KLSAgICAgICAgSXQgaXMgdXNlZCBib3RoIGJ5IGEgYnJhbmQgbmV3IHJlbGF0aW9uc2hp
cCAodmlhIHRoZSBgZmluZE1hbnlgCi0gICAgICAgIG1ldGhvZCkgb3Igd2hlbiB0aGUgZGF0YSB1
bmRlcmx5aW5nIGFuIGV4aXN0aW5nIHJlbGF0aW9uc2hpcAotICAgICAgICBjaGFuZ2VzLgotCi0g
ICAgICAgIEBtZXRob2QgZmV0Y2hNYW55Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJh
bSB7QXJyYXl9IHJlY29yZHMKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gb3duZXIKLSAgICAg
ICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZldGNoTWFueTog
ZnVuY3Rpb24ocmVjb3Jkcywgb3duZXIpIHsKLSAgICAgICAgaWYgKCFyZWNvcmRzLmxlbmd0aCkg
ewotICAgICAgICAgIHJldHVybiBFbWJlci5SU1ZQLnJlc29sdmUocmVjb3Jkcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBHcm91cCBCeSBUeXBlCi0gICAgICAgIHZhciByZWNvcmRzQnlUeXBl
TWFwID0gRW1iZXIuTWFwV2l0aERlZmF1bHQuY3JlYXRlKHsKLSAgICAgICAgICBkZWZhdWx0VmFs
dWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gRW1iZXIuQSgpOyB9Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIGZvckVhY2gocmVjb3JkcywgZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3Jk
c0J5VHlwZU1hcC5nZXQocmVjb3JkLmNvbnN0cnVjdG9yKS5wdXNoKHJlY29yZCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIHZhciBwcm9taXNlcyA9IFtdOwotCi0gICAgICAgIGZvckVhY2gocmVj
b3Jkc0J5VHlwZU1hcCwgZnVuY3Rpb24odHlwZSwgcmVjb3JkcykgewotICAgICAgICAgIHZhciBp
ZHMgPSByZWNvcmRzLm1hcFByb3BlcnR5KCdpZCcpLAotICAgICAgICAgICAgICBhZGFwdGVyID0g
dGhpcy5hZGFwdGVyRm9yKHR5cGUpOwotCi0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJp
ZWQgdG8gbG9hZCBtYW55IHJlY29yZHMgYnV0IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZvciAiICsg
dHlwZSArICIpIiwgYWRhcHRlcik7Ci0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQg
dG8gbG9hZCBtYW55IHJlY29yZHMgYnV0IHlvdXIgYWRhcHRlciBkb2VzIG5vdCBpbXBsZW1lbnQg
YGZpbmRNYW55YCIsIGFkYXB0ZXIuZmluZE1hbnkpOwotCi0gICAgICAgICAgcHJvbWlzZXMucHVz
aChfZmluZE1hbnkoYWRhcHRlciwgdGhpcywgdHlwZSwgaWRzLCBvd25lcikpOwotICAgICAgICB9
LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4gRW1iZXIuUlNWUC5hbGwocHJvbWlzZXMpOwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJldHVybnMgdHJ1ZSBpZiBhIHJlY29yZCBmb3Ig
YSBnaXZlbiB0eXBlIGFuZCBJRCBpcyBhbHJlYWR5IGxvYWRlZC4KLQotICAgICAgICBAbWV0aG9k
IGhhc1JlY29yZEZvcklkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERT
Lk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGlkCi0gICAgICAg
IEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAqLwotICAgICAgaGFzUmVjb3JkRm9ySWQ6IGZ1bmN0
aW9uKHR5cGUsIGlkKSB7Ci0gICAgICAgIGlkID0gY29lcmNlSWQoaWQpOwotICAgICAgICB0eXBl
ID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLSAgICAgICAgcmV0dXJuICEhdGhpcy50eXBlTWFwRm9y
KHR5cGUpLmlkVG9SZWNvcmRbaWRdOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJl
dHVybnMgaWQgcmVjb3JkIGZvciBhIGdpdmVuIHR5cGUgYW5kIElELiBJZiBvbmUgaXNuJ3QgYWxy
ZWFkeSBsb2FkZWQsCi0gICAgICAgIGl0IGJ1aWxkcyBhIG5ldyByZWNvcmQgYW5kIGxlYXZlcyBp
dCBpbiB0aGUgYGVtcHR5YCBzdGF0ZS4KLQotICAgICAgICBAbWV0aG9kIHJlY29yZEZvcklkCi0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERT
Lk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGlkCi0gICAgICAg
IEByZXR1cm4ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICovCi0gICAgICByZWNvcmRGb3JJZDog
ZnVuY3Rpb24odHlwZSwgaWQpIHsKLSAgICAgICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7
Ci0KLSAgICAgICAgaWQgPSBjb2VyY2VJZChpZCk7Ci0KLSAgICAgICAgdmFyIHJlY29yZCA9IHRo
aXMudHlwZU1hcEZvcih0eXBlKS5pZFRvUmVjb3JkW2lkXTsKLQotICAgICAgICBpZiAoIXJlY29y
ZCkgewotICAgICAgICAgIHJlY29yZCA9IHRoaXMuYnVpbGRSZWNvcmQodHlwZSwgaWQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBAbWV0aG9kIGZpbmRNYW55Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJh
bSB7RFMuTW9kZWx9IG93bmVyCi0gICAgICAgIEBwYXJhbSB7QXJyYXl9IHJlY29yZHMKLSAgICAg
ICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAg
QHBhcmFtIHtSZXNvbHZlcn0gcmVzb2x2ZXIKLSAgICAgICAgQHJldHVybiB7RFMuTWFueUFycmF5
fSByZWNvcmRzCi0gICAgICAqLwotICAgICAgZmluZE1hbnk6IGZ1bmN0aW9uKG93bmVyLCByZWNv
cmRzLCB0eXBlLCByZXNvbHZlcikgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBl
KTsKLQotICAgICAgICByZWNvcmRzID0gRW1iZXIuQShyZWNvcmRzKTsKLQotICAgICAgICB2YXIg
dW5sb2FkZWRSZWNvcmRzID0gcmVjb3Jkcy5maWx0ZXJQcm9wZXJ0eSgnaXNFbXB0eScsIHRydWUp
LAotICAgICAgICAgICAgbWFueUFycmF5ID0gdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIuY3JlYXRl
TWFueUFycmF5KHR5cGUsIHJlY29yZHMpOwotCi0gICAgICAgIGZvckVhY2godW5sb2FkZWRSZWNv
cmRzLCBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQubG9hZGluZ0RhdGEoKTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgbWFueUFycmF5LmxvYWRpbmdSZWNvcmRzQ291bnQgPSB1
bmxvYWRlZFJlY29yZHMubGVuZ3RoOwotCi0gICAgICAgIGlmICh1bmxvYWRlZFJlY29yZHMubGVu
Z3RoKSB7Ci0gICAgICAgICAgZm9yRWFjaCh1bmxvYWRlZFJlY29yZHMsIGZ1bmN0aW9uKHJlY29y
ZCkgewotICAgICAgICAgICAgdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIucmVnaXN0ZXJXYWl0aW5n
UmVjb3JkQXJyYXkocmVjb3JkLCBtYW55QXJyYXkpOwotICAgICAgICAgIH0sIHRoaXMpOwotCi0g
ICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZSh0aGlzLmZldGNoTWFueSh1bmxvYWRlZFJlY29yZHMs
IG93bmVyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHJlc29sdmVyKSB7IHJl
c29sdmVyLnJlc29sdmUoKTsgfQotICAgICAgICAgIG1hbnlBcnJheS5zZXQoJ2lzTG9hZGVkJywg
dHJ1ZSk7Ci0gICAgICAgICAgb25jZShtYW55QXJyYXksICd0cmlnZ2VyJywgJ2RpZExvYWQnKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtYW55QXJyYXk7Ci0gICAgICB9LAotCi0gICAg
ICAvKioKLSAgICAgICAgSWYgYSByZWxhdGlvbnNoaXAgd2FzIG9yaWdpbmFsbHkgcG9wdWxhdGVk
IGJ5IHRoZSBhZGFwdGVyIGFzIGEgbGluawotICAgICAgICAoYXMgb3Bwb3NlZCB0byBhIGxpc3Qg
b2YgSURzKSwgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlCi0gICAgICAgIHJlbGF0aW9u
c2hpcCBpcyBmZXRjaGVkLgotCi0gICAgICAgIFRoZSBsaW5rICh3aGljaCBpcyB1c3VhbGx5IGEg
VVJMKSBpcyBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHNvIHRoZQotICAgICAgICBhZGFwdGVy
IGNhbiBtYWtlIHdoYXRldmVyIHJlcXVlc3QgaXQgd2FudHMuCi0KLSAgICAgICAgVGhlIHVzdWFs
IHVzZS1jYXNlIGlzIGZvciB0aGUgc2VydmVyIHRvIHJlZ2lzdGVyIGEgVVJMIGFzIGEgbGluaywg
YW5kCi0gICAgICAgIHRoZW4gdXNlIHRoYXQgVVJMIGluIHRoZSBmdXR1cmUgdG8gbWFrZSBhIHJl
cXVlc3QgZm9yIHRoZSByZWxhdGlvbnNoaXAuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kSGFzTWFu
eQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSBvd25lcgotICAg
ICAgICBAcGFyYW0ge2FueX0gbGluawotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0g
ICAgICAqLwotICAgICAgZmluZEhhc01hbnk6IGZ1bmN0aW9uKG93bmVyLCBsaW5rLCByZWxhdGlv
bnNoaXAsIHJlc29sdmVyKSB7Ci0gICAgICAgIHZhciBhZGFwdGVyID0gdGhpcy5hZGFwdGVyRm9y
KG93bmVyLmNvbnN0cnVjdG9yKTsKLQotICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0
byBsb2FkIGEgaGFzTWFueSByZWxhdGlvbnNoaXAgYnV0IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZv
ciAiICsgb3duZXIuY29uc3RydWN0b3IgKyAiKSIsIGFkYXB0ZXIpOwotICAgICAgICBFbWJlci5h
c3NlcnQoIllvdSB0cmllZCB0byBsb2FkIGEgaGFzTWFueSByZWxhdGlvbnNoaXAgZnJvbSBhIHNw
ZWNpZmllZCBgbGlua2AgaW4gdGhlIG9yaWdpbmFsIHBheWxvYWQgYnV0IHlvdXIgYWRhcHRlciBk
b2VzIG5vdCBpbXBsZW1lbnQgYGZpbmRIYXNNYW55YCIsIGFkYXB0ZXIuZmluZEhhc01hbnkpOwot
Ci0gICAgICAgIHZhciByZWNvcmRzID0gdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIuY3JlYXRlTWFu
eUFycmF5KHJlbGF0aW9uc2hpcC50eXBlLCBFbWJlci5BKFtdKSk7Ci0gICAgICAgIHJlc29sdmVy
LnJlc29sdmUoX2ZpbmRIYXNNYW55KGFkYXB0ZXIsIHRoaXMsIG93bmVyLCBsaW5rLCByZWxhdGlv
bnNoaXApKTsKLSAgICAgICAgcmV0dXJuIHJlY29yZHM7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgQG1ldGhvZCBmaW5kQmVsb25nc1RvCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAg
IEBwYXJhbSB7RFMuTW9kZWx9IG93bmVyCi0gICAgICAgIEBwYXJhbSB7YW55fSBsaW5rCi0gICAg
ICAgIEBwYXJhbSB7UmVsYXRpb25zaGlwfSByZWxhdGlvbnNoaXAKLSAgICAgICAgQHJldHVybiB7
UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRCZWxvbmdzVG86IGZ1bmN0aW9u
KG93bmVyLCBsaW5rLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlz
LmFkYXB0ZXJGb3Iob3duZXIuY29uc3RydWN0b3IpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IHRyaWVkIHRvIGxvYWQgYSBiZWxvbmdzVG8gcmVsYXRpb25zaGlwIGJ1dCB5b3UgaGF2ZSBu
byBhZGFwdGVyIChmb3IgIiArIG93bmVyLmNvbnN0cnVjdG9yICsgIikiLCBhZGFwdGVyKTsKLSAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gbG9hZCBhIGJlbG9uZ3NUbyByZWxhdGlv
bnNoaXAgZnJvbSBhIHNwZWNpZmllZCBgbGlua2AgaW4gdGhlIG9yaWdpbmFsIHBheWxvYWQgYnV0
IHlvdXIgYWRhcHRlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGZpbmRCZWxvbmdzVG9gIiwgYWRhcHRl
ci5maW5kQmVsb25nc1RvKTsKLQotICAgICAgICByZXR1cm4gX2ZpbmRCZWxvbmdzVG8oYWRhcHRl
ciwgdGhpcywgb3duZXIsIGxpbmssIHJlbGF0aW9uc2hpcCk7Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgVGhpcyBtZXRob2QgZGVsZWdhdGVzIGEgcXVlcnkgdG8gdGhlIGFkYXB0ZXIu
IFRoaXMgaXMgdGhlIG9uZSBwbGFjZSB3aGVyZQotICAgICAgICBhZGFwdGVyLWxldmVsIHNlbWFu
dGljcyBhcmUgZXhwb3NlZCB0byB0aGUgYXBwbGljYXRpb24uCi0KLSAgICAgICAgRXhwb3Npbmcg
cXVlcmllcyB0aGlzIHdheSBzZWVtcyBwcmVmZXJhYmxlIHRvIGNyZWF0aW5nIGFuIGFic3RyYWN0
IHF1ZXJ5Ci0gICAgICAgIGxhbmd1YWdlIGZvciBhbGwgc2VydmVyLXNpZGUgcXVlcmllcywgYW5k
IHRoZW4gcmVxdWlyZSBhbGwgYWRhcHRlcnMgdG8KLSAgICAgICAgaW1wbGVtZW50IHRoZW0uCi0K
LSAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UsIHdoaWNoIGlzIHJlc29sdmVk
IHdpdGggYSBgUmVjb3JkQXJyYXlgCi0gICAgICAgIG9uY2UgdGhlIHNlcnZlciByZXR1cm5zLgot
Ci0gICAgICAgIEBtZXRob2QgZmluZFF1ZXJ5Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBw
YXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJh
bSB7YW55fSBxdWVyeSBhbiBvcGFxdWUgcXVlcnkgdG8gYmUgdXNlZCBieSB0aGUgYWRhcHRlcgot
ICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgZmluZFF1
ZXJ5OiBmdW5jdGlvbih0eXBlLCBxdWVyeSkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZv
cih0eXBlKTsKLQotICAgICAgICB2YXIgYXJyYXkgPSB0aGlzLnJlY29yZEFycmF5TWFuYWdlcgot
ICAgICAgICAgIC5jcmVhdGVBZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkodHlwZSwgcXVlcnkp
OwotCi0gICAgICAgIHZhciBhZGFwdGVyID0gdGhpcy5hZGFwdGVyRm9yKHR5cGUpOwotCi0gICAg
ICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGxvYWQgYSBxdWVyeSBidXQgeW91IGhhdmUg
bm8gYWRhcHRlciAoZm9yICIgKyB0eXBlICsgIikiLCBhZGFwdGVyKTsKLSAgICAgICAgRW1iZXIu
YXNzZXJ0KCJZb3UgdHJpZWQgdG8gbG9hZCBhIHF1ZXJ5IGJ1dCB5b3VyIGFkYXB0ZXIgZG9lcyBu
b3QgaW1wbGVtZW50IGBmaW5kUXVlcnlgIiwgYWRhcHRlci5maW5kUXVlcnkpOwotCi0gICAgICAg
IHJldHVybiBwcm9taXNlQXJyYXkoX2ZpbmRRdWVyeShhZGFwdGVyLCB0aGlzLCB0eXBlLCBxdWVy
eSwgYXJyYXkpKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWNvcmRzIGFkYXB0ZXIgY2FuIGZpbmQuCi0gICAgICAg
IEl0IHRyaWdnZXJzIHRoZSBhZGFwdGVyJ3MgYGZpbmRBbGxgIG1ldGhvZCB0byBnaXZlIGl0IGFu
IG9wcG9ydHVuaXR5IHRvIHBvcHVsYXRlCi0gICAgICAgIHRoZSBhcnJheSB3aXRoIHJlY29yZHMg
b2YgdGhhdCB0eXBlLgotCi0gICAgICAgIEBtZXRob2QgZmluZEFsbAotICAgICAgICBAcHJpdmF0
ZQotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQot
ICAgICAgICBAcmV0dXJuIHtEUy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXl9Ci0gICAgICAq
LwotICAgICAgZmluZEFsbDogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB0eXBlID0gdGhpcy5t
b2RlbEZvcih0eXBlKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEFsbCh0eXBlLCB0aGlz
LmFsbCh0eXBlKSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBmZXRj
aEFsbAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEBwYXJhbSB7RFMuUmVjb3JkQXJyYXl9IGFycmF5Ci0gICAgICAgIEByZXR1cm4ge1By
b21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmZXRjaEFsbDogZnVuY3Rpb24odHlwZSwg
YXJyYXkpIHsKLSAgICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSksCi0g
ICAgICAgICAgICBzaW5jZVRva2VuID0gdGhpcy50eXBlTWFwRm9yKHR5cGUpLm1ldGFkYXRhLnNp
bmNlOwotCi0gICAgICAgIHNldChhcnJheSwgJ2lzVXBkYXRpbmcnLCB0cnVlKTsKLQotICAgICAg
ICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBsb2FkIGFsbCByZWNvcmRzIGJ1dCB5b3UgaGF2
ZSBubyBhZGFwdGVyIChmb3IgIiArIHR5cGUgKyAiKSIsIGFkYXB0ZXIpOwotICAgICAgICBFbWJl
ci5hc3NlcnQoIllvdSB0cmllZCB0byBsb2FkIGFsbCByZWNvcmRzIGJ1dCB5b3VyIGFkYXB0ZXIg
ZG9lcyBub3QgaW1wbGVtZW50IGBmaW5kQWxsYCIsIGFkYXB0ZXIuZmluZEFsbCk7Ci0KLSAgICAg
ICAgcmV0dXJuIHByb21pc2VBcnJheShfZmluZEFsbChhZGFwdGVyLCB0aGlzLCB0eXBlLCBzaW5j
ZVRva2VuKSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBkaWRVcGRh
dGVBbGwKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gdHlwZQotICAgICAgKi8KLSAgICAgIGRp
ZFVwZGF0ZUFsbDogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgZmluZEFsbENhY2hlID0g
dGhpcy50eXBlTWFwRm9yKHR5cGUpLmZpbmRBbGxDYWNoZTsKLSAgICAgICAgc2V0KGZpbmRBbGxD
YWNoZSwgJ2lzVXBkYXRpbmcnLCBmYWxzZSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGZpbHRlcmVkIGFycmF5IHRoYXQgY29udGFpbnMgYWxs
IG9mIHRoZSBrbm93biByZWNvcmRzCi0gICAgICAgIGZvciBhIGdpdmVuIHR5cGUuCi0KLSAgICAg
ICAgTm90ZSB0aGF0IGJlY2F1c2UgaXQncyBqdXN0IGEgZmlsdGVyLCBpdCB3aWxsIGhhdmUgYW55
IGxvY2FsbHkKLSAgICAgICAgY3JlYXRlZCByZWNvcmRzIG9mIHRoZSB0eXBlLgotCi0gICAgICAg
IEFsc28gbm90ZSB0aGF0IG11bHRpcGxlIGNhbGxzIHRvIGBhbGxgIGZvciBhIGdpdmVuIHR5cGUg
d2lsbCBhbHdheXMKLSAgICAgICAgcmV0dXJuIHRoZSBzYW1lIFJlY29yZEFycmF5LgotCi0gICAg
ICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciBsb2NhbFBv
c3RzID0gc3RvcmUuYWxsKCdwb3N0Jyk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qg
YWxsCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
Ci0gICAgICAgIEByZXR1cm4ge0RTLlJlY29yZEFycmF5fQotICAgICAgKi8KLSAgICAgIGFsbDog
ZnVuY3Rpb24odHlwZSkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLQot
ICAgICAgICB2YXIgdHlwZU1hcCA9IHRoaXMudHlwZU1hcEZvcih0eXBlKSwKLSAgICAgICAgICAg
IGZpbmRBbGxDYWNoZSA9IHR5cGVNYXAuZmluZEFsbENhY2hlOwotCi0gICAgICAgIGlmIChmaW5k
QWxsQ2FjaGUpIHsgcmV0dXJuIGZpbmRBbGxDYWNoZTsgfQotCi0gICAgICAgIHZhciBhcnJheSA9
IHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyLmNyZWF0ZVJlY29yZEFycmF5KHR5cGUpOwotCi0gICAg
ICAgIHR5cGVNYXAuZmluZEFsbENhY2hlID0gYXJyYXk7Ci0gICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgIH0sCi0KLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIHVubG9hZHMgYWxs
IG9mIHRoZSBrbm93biByZWNvcmRzIGZvciBhIGdpdmVuIHR5cGUuCi0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICBzdG9yZS51bmxvYWRBbGwoJ3Bvc3QnKTsKLSAgICAgICAgYGBgCi0K
LSAgICAgICAgQG1ldGhvZCB1bmxvYWRBbGwKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3Vi
Y2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICovCi0gICAgICB1bmxvYWRBbGw6IGZ1bmN0
aW9uKHR5cGUpIHsKLSAgICAgICAgdmFyIG1vZGVsVHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7
Ci0gICAgICAgIHZhciB0eXBlTWFwID0gdGhpcy50eXBlTWFwRm9yKG1vZGVsVHlwZSk7Ci0gICAg
ICAgIHZhciByZWNvcmRzID0gdHlwZU1hcC5yZWNvcmRzLnNsaWNlKCk7Ci0gICAgICAgIHZhciBy
ZWNvcmQ7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgcmVjb3JkID0gcmVjb3Jkc1tpXTsKLSAgICAgICAgICByZWNvcmQudW5s
b2FkUmVjb3JkKCk7Ci0gICAgICAgICAgcmVjb3JkLmRlc3Ryb3koKTsgLy8gbWF5YmUgd2l0aGlu
IHVubG9hZFJlY29yZAotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZU1hcC5maW5kQWxsQ2FjaGUg
PSBudWxsOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRha2VzIGEgdHlwZSBhbmQg
ZmlsdGVyIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyBhIGxpdmUgUmVjb3JkQXJyYXkgdGhhdAotICAg
ICAgICByZW1haW5zIHVwIHRvIGRhdGUgYXMgbmV3IHJlY29yZHMgYXJlIGxvYWRlZCBpbnRvIHRo
ZSBzdG9yZSBvciBjcmVhdGVkCi0gICAgICAgIGxvY2FsbHkuCi0KLSAgICAgICAgVGhlIGNhbGxi
YWNrIGZ1bmN0aW9uIHRha2VzIGEgbWF0ZXJpYWxpemVkIHJlY29yZCwgYW5kIHJldHVybnMgdHJ1
ZQotICAgICAgICBpZiB0aGUgcmVjb3JkIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsdGVy
IGFuZCBmYWxzZSBpZiBpdCBzaG91bGQKLSAgICAgICAgbm90LgotCi0gICAgICAgIFRoZSBmaWx0
ZXIgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ugb24gYWxsIHJlY29yZHMgZm9yIHRoZSB0eXBlIHdo
ZW4KLSAgICAgICAgaXQgaXMgY3JlYXRlZCwgYW5kIHRoZW4gb25jZSBvbiBlYWNoIG5ld2x5IGxv
YWRlZCBvciBjcmVhdGVkIHJlY29yZC4KLQotICAgICAgICBJZiBhbnkgb2YgYSByZWNvcmQncyBw
cm9wZXJ0aWVzIGNoYW5nZSwgb3IgaWYgaXQgY2hhbmdlcyBzdGF0ZSwgdGhlCi0gICAgICAgIGZp
bHRlciBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYWdhaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIg
aXQgc2hvdWxkCi0gICAgICAgIHN0aWxsIGJlIGluIHRoZSBhcnJheS4KLQotICAgICAgICBPcHRp
b25hbGx5IHlvdSBjYW4gcGFzcyBhIHF1ZXJ5IHdoaWNoIHdpbGwgYmUgdHJpZ2dlcmVkIGF0IGZp
cnN0LiBUaGUKLSAgICAgICAgcmVzdWx0cyByZXR1cm5lZCBieSB0aGUgc2VydmVyIGNvdWxkIHRo
ZW4gYXBwZWFyIGluIHRoZSBmaWx0ZXIgaWYgdGhleQotICAgICAgICBtYXRjaCB0aGUgZmlsdGVy
IGZ1bmN0aW9uLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgIHN0b3JlLmZpbHRlcigncG9zdCcsIHt1bnJlYWQ6IHRydWV9LCBmdW5jdGlvbihwb3N0
KSB7Ci0gICAgICAgICAgcmV0dXJuIHBvc3QuZ2V0KCd1bnJlYWQnKTsKLSAgICAgICAgfSkudGhl
bihmdW5jdGlvbih1bnJlYWRQb3N0cykgewotICAgICAgICAgIHVucmVhZFBvc3RzLmdldCgnbGVu
Z3RoJyk7IC8vIDUKLSAgICAgICAgICB2YXIgdW5yZWFkUG9zdCA9IHVucmVhZFBvc3RzLm9iamVj
dEF0KDApOwotICAgICAgICAgIHVucmVhZFBvc3Quc2V0KCd1bnJlYWQnLCBmYWxzZSk7Ci0gICAg
ICAgICAgdW5yZWFkUG9zdHMuZ2V0KCdsZW5ndGgnKTsgLy8gNAotICAgICAgICB9KTsKLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBmaWx0ZXIKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcg
b3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHF1
ZXJ5IG9wdGlvbmFsIHF1ZXJ5Ci0gICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlcgotICAg
ICAgICBAcmV0dXJuIHtEUy5Qcm9taXNlQXJyYXl9Ci0gICAgICAqLwotICAgICAgZmlsdGVyOiBm
dW5jdGlvbih0eXBlLCBxdWVyeSwgZmlsdGVyKSB7Ci0gICAgICAgIHZhciBwcm9taXNlOwotICAg
ICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgICAgdmFyIGFycmF5Owot
ICAgICAgICB2YXIgaGFzUXVlcnkgPSBsZW5ndGggPT09IDM7Ci0KLSAgICAgICAgLy8gYWxsb3cg
YW4gb3B0aW9uYWwgc2VydmVyIHF1ZXJ5Ci0gICAgICAgIGlmIChoYXNRdWVyeSkgewotICAgICAg
ICAgIHByb21pc2UgPSB0aGlzLmZpbmRRdWVyeSh0eXBlLCBxdWVyeSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAgICAgICAgIGZpbHRlciA9IHF1ZXJ5
OwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7Ci0KLSAg
ICAgICAgaWYgKGhhc1F1ZXJ5KSB7Ci0gICAgICAgICAgYXJyYXkgPSB0aGlzLnJlY29yZEFycmF5
TWFuYWdlci5jcmVhdGVGaWx0ZXJlZFJlY29yZEFycmF5KHR5cGUsIGZpbHRlciwgcXVlcnkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFycmF5ID0gdGhpcy5yZWNvcmRBcnJheU1hbmFn
ZXIuY3JlYXRlRmlsdGVyZWRSZWNvcmRBcnJheSh0eXBlLCBmaWx0ZXIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcHJvbWlzZSA9IHByb21pc2UgfHwgUHJvbWlzZS5jYXN0KGFycmF5KTsKLQotCi0g
ICAgICAgIHJldHVybiBwcm9taXNlQXJyYXkocHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSwgbnVsbCwgIkRTOiBTdG9yZSNmaWx0ZXIg
b2YgIiArIHR5cGUpKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhv
ZCByZXR1cm5zIGlmIGEgY2VydGFpbiByZWNvcmQgaXMgYWxyZWFkeSBsb2FkZWQKLSAgICAgICAg
aW4gdGhlIHN0b3JlLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBrbm93IGJlZm9yZWhhbmQgaWYgYSBm
aW5kKCkKLSAgICAgICAgd2lsbCByZXN1bHQgaW4gYSByZXF1ZXN0IG9yIHRoYXQgaXQgd2lsbCBi
ZSBhIGNhY2hlIGhpdC4KLQotICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgc3RvcmUucmVjb3JkSXNMb2FkZWQoJ3Bvc3QnLCAxKTsgLy8gZmFsc2UKLSAg
ICAgICAgc3RvcmUuZmluZCgncG9zdCcsIDEpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
c3RvcmUucmVjb3JkSXNMb2FkZWQoJ3Bvc3QnLCAxKTsgLy8gdHJ1ZQotICAgICAgICB9KTsKLSAg
ICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCByZWNvcmRJc0xvYWRlZAotICAgICAgICBAcGFy
YW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0g
e3N0cmluZ30gaWQKLSAgICAgICAgQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgICovCi0gICAgICBy
ZWNvcmRJc0xvYWRlZDogZnVuY3Rpb24odHlwZSwgaWQpIHsKLSAgICAgICAgaWYgKCF0aGlzLmhh
c1JlY29yZEZvcklkKHR5cGUsIGlkKSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgcmV0dXJu
ICFnZXQodGhpcy5yZWNvcmRGb3JJZCh0eXBlLCBpZCksICdpc0VtcHR5Jyk7Ci0gICAgICB9LAot
Ci0gICAgICAvKioKLSAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbWV0YWRhdGEgZm9y
IGEgc3BlY2lmaWMgdHlwZS4KLQotICAgICAgICBAbWV0aG9kIG1ldGFkYXRhRm9yCi0gICAgICAg
IEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBy
ZXR1cm4ge29iamVjdH0KLSAgICAgICovCi0gICAgICBtZXRhZGF0YUZvcjogZnVuY3Rpb24odHlw
ZSkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLSAgICAgICAgcmV0dXJu
IHRoaXMudHlwZU1hcEZvcih0eXBlKS5tZXRhZGF0YTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIC4u
Li4uLi4uLi4uLgotICAgICAgLy8gLiBVUERBVElORyAuCi0gICAgICAvLyAuLi4uLi4uLi4uLi4K
LQotICAgICAgLyoqCi0gICAgICAgIElmIHRoZSBhZGFwdGVyIHVwZGF0ZXMgYXR0cmlidXRlcyBv
ciBhY2tub3dsZWRnZXMgY3JlYXRpb24KLSAgICAgICAgb3IgZGVsZXRpb24sIHRoZSByZWNvcmQg
d2lsbCBub3RpZnkgdGhlIHN0b3JlIHRvIHVwZGF0ZSBpdHMKLSAgICAgICAgbWVtYmVyc2hpcCBp
biBhbnkgZmlsdGVycy4KLSAgICAgICAgVG8gYXZvaWQgdGhyYXNoaW5nLCB0aGlzIG1ldGhvZCBp
cyBpbnZva2VkIG9ubHkgb25jZSBwZXIKLQotICAgICAgICBydW4gbG9vcCBwZXIgcmVjb3JkLgot
Ci0gICAgICAgIEBtZXRob2QgZGF0YVdhc1VwZGF0ZWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgQHBhcmFtIHtDbGFzc30gdHlwZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQK
LSAgICAgICovCi0gICAgICBkYXRhV2FzVXBkYXRlZDogZnVuY3Rpb24odHlwZSwgcmVjb3JkKSB7
Ci0gICAgICAgIHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyLnJlY29yZERpZENoYW5nZShyZWNvcmQp
OwotICAgICAgfSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4KLSAgICAgIC8vIC4gUEVSU0lT
VElORyAuCi0gICAgICAvLyAuLi4uLi4uLi4uLi4uLgotCi0gICAgICAvKioKLSAgICAgICAgVGhp
cyBtZXRob2QgaXMgY2FsbGVkIGJ5IGByZWNvcmQuc2F2ZWAsIGFuZCBnZXRzIHBhc3NlZCBhCi0g
ICAgICAgIHJlc29sdmVyIGZvciB0aGUgcHJvbWlzZSB0aGF0IGByZWNvcmQuc2F2ZWAgcmV0dXJu
cy4KLQotICAgICAgICBJdCBzY2hlZHVsZXMgc2F2aW5nIHRvIGhhcHBlbiBhdCB0aGUgZW5kIG9m
IHRoZSBydW4gbG9vcC4KLQotICAgICAgICBAbWV0aG9kIHNjaGVkdWxlU2F2ZQotICAgICAgICBA
cHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBhcmFt
IHtSZXNvbHZlcn0gcmVzb2x2ZXIKLSAgICAgICovCi0gICAgICBzY2hlZHVsZVNhdmU6IGZ1bmN0
aW9uKHJlY29yZCwgcmVzb2x2ZXIpIHsKLSAgICAgICAgcmVjb3JkLmFkYXB0ZXJXaWxsQ29tbWl0
KCk7Ci0gICAgICAgIHRoaXMuX3BlbmRpbmdTYXZlLnB1c2goW3JlY29yZCwgcmVzb2x2ZXJdKTsK
LSAgICAgICAgb25jZSh0aGlzLCAnZmx1c2hQZW5kaW5nU2F2ZScpOwotICAgICAgfSwKLQotICAg
ICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBy
dW4gbG9vcCwgYW5kCi0gICAgICAgIGZsdXNoZXMgYW55IHJlY29yZHMgcGFzc2VkIGludG8gYHNj
aGVkdWxlU2F2ZWAKLQotICAgICAgICBAbWV0aG9kIGZsdXNoUGVuZGluZ1NhdmUKLSAgICAgICAg
QHByaXZhdGUKLSAgICAgICovCi0gICAgICBmbHVzaFBlbmRpbmdTYXZlOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgdmFyIHBlbmRpbmcgPSB0aGlzLl9wZW5kaW5nU2F2ZS5zbGljZSgpOwotICAgICAg
ICB0aGlzLl9wZW5kaW5nU2F2ZSA9IFtdOwotCi0gICAgICAgIGZvckVhY2gocGVuZGluZywgZnVu
Y3Rpb24odHVwbGUpIHsKLSAgICAgICAgICB2YXIgcmVjb3JkID0gdHVwbGVbMF0sIHJlc29sdmVy
ID0gdHVwbGVbMV0sCi0gICAgICAgICAgICAgIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3IocmVj
b3JkLmNvbnN0cnVjdG9yKSwKLSAgICAgICAgICAgICAgb3BlcmF0aW9uOwotCi0gICAgICAgICAg
aWYgKGdldChyZWNvcmQsICdjdXJyZW50U3RhdGUuc3RhdGVOYW1lJykgPT09ICdyb290LmRlbGV0
ZWQuc2F2ZWQnKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShyZWNvcmQp
OwotICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0KHJlY29yZCwgJ2lzTmV3JykpIHsKLSAgICAgICAg
ICAgIG9wZXJhdGlvbiA9ICdjcmVhdGVSZWNvcmQnOwotICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0
KHJlY29yZCwgJ2lzRGVsZXRlZCcpKSB7Ci0gICAgICAgICAgICBvcGVyYXRpb24gPSAnZGVsZXRl
UmVjb3JkJzsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3BlcmF0aW9uID0gJ3Vw
ZGF0ZVJlY29yZCc7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShf
Y29tbWl0KGFkYXB0ZXIsIHRoaXMsIG9wZXJhdGlvbiwgcmVjb3JkKSk7Ci0gICAgICAgIH0sIHRo
aXMpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBvbmNlIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IGFuCi0gICAgICAgIGFkYXB0ZXIncyBgY3Jl
YXRlUmVjb3JkYCwgYHVwZGF0ZVJlY29yZGAgb3IgYGRlbGV0ZVJlY29yZGAKLSAgICAgICAgaXMg
cmVzb2x2ZWQuCi0KLSAgICAgICAgSWYgdGhlIGRhdGEgcHJvdmlkZXMgYSBzZXJ2ZXItZ2VuZXJh
dGVkIElELCBpdCB3aWxsCi0gICAgICAgIHVwZGF0ZSB0aGUgcmVjb3JkIGFuZCB0aGUgc3RvcmUn
cyBpbmRleGVzLgotCi0gICAgICAgIEBtZXRob2QgZGlkU2F2ZVJlY29yZAotICAgICAgICBAcHJp
dmF0ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQgdGhlIGluLWZsaWdodCByZWNv
cmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGRhdGEgb3B0aW9uYWwgZGF0YSAoc2VlIGFib3Zl
KQotICAgICAgKi8KLSAgICAgIGRpZFNhdmVSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCwgZGF0YSkg
ewotICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgIC8vIG5vcm1hbGl6ZSByZWxhdGlvbnNo
aXAgSURzIGludG8gcmVjb3JkcwotICAgICAgICAgIGRhdGEgPSBub3JtYWxpemVSZWxhdGlvbnNo
aXBzKHRoaXMsIHJlY29yZC5jb25zdHJ1Y3RvciwgZGF0YSwgcmVjb3JkKTsKLQotICAgICAgICAg
IHRoaXMudXBkYXRlSWQocmVjb3JkLCBkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlY29y
ZC5hZGFwdGVyRGlkQ29tbWl0KGRhdGEpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAg
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IGFuCi0g
ICAgICAgIGFkYXB0ZXIncyBgY3JlYXRlUmVjb3JkYCwgYHVwZGF0ZVJlY29yZGAgb3IgYGRlbGV0
ZVJlY29yZGAKLSAgICAgICAgaXMgcmVqZWN0ZWQgd2l0aCBhIGBEUy5JbnZhbGlkRXJyb3JgLgot
Ci0gICAgICAgIEBtZXRob2QgcmVjb3JkV2FzSW52YWxpZAotICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGVy
cm9ycwotICAgICAgKi8KLSAgICAgIHJlY29yZFdhc0ludmFsaWQ6IGZ1bmN0aW9uKHJlY29yZCwg
ZXJyb3JzKSB7Ci0gICAgICAgIHJlY29yZC5hZGFwdGVyRGlkSW52YWxpZGF0ZShlcnJvcnMpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNl
IHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IGFuCi0gICAgICAgIGFkYXB0ZXIncyBgY3JlYXRlUmVj
b3JkYCwgYHVwZGF0ZVJlY29yZGAgb3IgYGRlbGV0ZVJlY29yZGAKLSAgICAgICAgaXMgcmVqZWN0
ZWQgKHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBhIGBEUy5JbnZhbGlkRXJyb3JgKS4KLQotICAg
ICAgICBAbWV0aG9kIHJlY29yZFdhc0Vycm9yCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBw
YXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAgIHJlY29yZFdhc0Vycm9yOiBm
dW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgcmVjb3JkLmFkYXB0ZXJEaWRFcnJvcigpOwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFdoZW4gYW4gYWRhcHRlcidzIGBjcmVhdGVSZWNv
cmRgLCBgdXBkYXRlUmVjb3JkYCBvciBgZGVsZXRlUmVjb3JkYAotICAgICAgICByZXNvbHZlcyB3
aXRoIGRhdGEsIHRoaXMgbWV0aG9kIGV4dHJhY3RzIHRoZSBJRCBmcm9tIHRoZSBzdXBwbGllZAot
ICAgICAgICBkYXRhLgotCi0gICAgICAgIEBtZXRob2QgdXBkYXRlSWQKLSAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBkYXRhCi0gICAgICAqLwotICAgICAgdXBkYXRlSWQ6IGZ1bmN0aW9uKHJlY29yZCwgZGF0
YSkgewotICAgICAgICB2YXIgb2xkSWQgPSBnZXQocmVjb3JkLCAnaWQnKSwKLSAgICAgICAgICAg
IGlkID0gY29lcmNlSWQoZGF0YS5pZCk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJBbiBhZGFw
dGVyIGNhbm5vdCBhc3NpZ24gYSBuZXcgaWQgdG8gYSByZWNvcmQgdGhhdCBhbHJlYWR5IGhhcyBh
biBpZC4gIiArIHJlY29yZCArICIgaGFkIGlkOiAiICsgb2xkSWQgKyAiIGFuZCB5b3UgdHJpZWQg
dG8gdXBkYXRlIGl0IHdpdGggIiArIGlkICsgIi4gVGhpcyBsaWtlbHkgaGFwcGVuZWQgYmVjYXVz
ZSB5b3VyIHNlcnZlciByZXR1cm5lZCBkYXRhIGluIHJlc3BvbnNlIHRvIGEgZmluZCBvciB1cGRh
dGUgdGhhdCBoYWQgYSBkaWZmZXJlbnQgaWQgdGhhbiB0aGUgb25lIHlvdSBzZW50LiIsIG9sZElk
ID09PSBudWxsIHx8IGlkID09PSBvbGRJZCk7Ci0KLSAgICAgICAgdGhpcy50eXBlTWFwRm9yKHJl
Y29yZC5jb25zdHJ1Y3RvcikuaWRUb1JlY29yZFtpZF0gPSByZWNvcmQ7Ci0KLSAgICAgICAgc2V0
KHJlY29yZCwgJ2lkJywgaWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJldHVy
bnMgYSBtYXAgb2YgSURzIHRvIGNsaWVudCBJRHMgZm9yIGEgZ2l2ZW4gdHlwZS4KLQotICAgICAg
ICBAbWV0aG9kIHR5cGVNYXBGb3IKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHR5
cGUKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0eXBlTWFwCi0gICAgICAqLwotICAgICAgdHlw
ZU1hcEZvcjogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgdHlwZU1hcHMgPSBnZXQodGhp
cywgJ3R5cGVNYXBzJyksCi0gICAgICAgICAgICBndWlkID0gRW1iZXIuZ3VpZEZvcih0eXBlKSwK
LSAgICAgICAgICAgIHR5cGVNYXA7Ci0KLSAgICAgICAgdHlwZU1hcCA9IHR5cGVNYXBzW2d1aWRd
OwotCi0gICAgICAgIGlmICh0eXBlTWFwKSB7IHJldHVybiB0eXBlTWFwOyB9Ci0KLSAgICAgICAg
dHlwZU1hcCA9IHsKLSAgICAgICAgICBpZFRvUmVjb3JkOiB7fSwKLSAgICAgICAgICByZWNvcmRz
OiBbXSwKLSAgICAgICAgICBtZXRhZGF0YToge30sCi0gICAgICAgICAgdHlwZTogdHlwZQotICAg
ICAgICB9OwotCi0gICAgICAgIHR5cGVNYXBzW2d1aWRdID0gdHlwZU1hcDsKLQotICAgICAgICBy
ZXR1cm4gdHlwZU1hcDsKLSAgICAgIH0sCi0KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4KLSAg
ICAgIC8vIC4gTE9BRElORyBEQVRBIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4KLQotICAg
ICAgLyoqCi0gICAgICAgIFRoaXMgaW50ZXJuYWwgbWV0aG9kIGlzIHVzZWQgYnkgYHB1c2hgLgot
Ci0gICAgICAgIEBtZXRob2QgX2xvYWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFt
IHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtP
YmplY3R9IGRhdGEKLSAgICAgICAgQHBhcmFtIHtCb29sZWFufSBwYXJ0aWFsIHRoZSBkYXRhIHNo
b3VsZCBiZSBtZXJnZWQgaW50bwotICAgICAgICAgIHRoZSBleGlzdGluZyBkYXRhLCBub3QgcmVw
bGFjZSBpdC4KLSAgICAgICovCi0gICAgICBfbG9hZDogZnVuY3Rpb24odHlwZSwgZGF0YSwgcGFy
dGlhbCkgewotICAgICAgICB2YXIgaWQgPSBjb2VyY2VJZChkYXRhLmlkKSwKLSAgICAgICAgICAg
IHJlY29yZCA9IHRoaXMucmVjb3JkRm9ySWQodHlwZSwgaWQpOwotCi0gICAgICAgIHJlY29yZC5z
ZXR1cERhdGEoZGF0YSwgcGFydGlhbCk7Ci0gICAgICAgIHRoaXMucmVjb3JkQXJyYXlNYW5hZ2Vy
LnJlY29yZERpZENoYW5nZShyZWNvcmQpOwotCi0gICAgICAgIHJldHVybiByZWNvcmQ7Ci0gICAg
ICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyBhIG1vZGVsIGNsYXNzIGZvciBhIHBh
cnRpY3VsYXIga2V5LiBVc2VkIGJ5Ci0gICAgICAgIG1ldGhvZHMgdGhhdCB0YWtlIGEgdHlwZSBr
ZXkgKGxpa2UgYGZpbmRgLCBgY3JlYXRlUmVjb3JkYCwKLSAgICAgICAgZXRjLikKLQotICAgICAg
ICBAbWV0aG9kIG1vZGVsRm9yCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9m
IERTLk1vZGVsfSBrZXkKLSAgICAgICAgQHJldHVybiB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9Ci0g
ICAgICAqLwotICAgICAgbW9kZWxGb3I6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICB2YXIgZmFj
dG9yeTsKLQotCi0gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykgewotICAgICAg
ICAgIHZhciBub3JtYWxpemVkS2V5ID0gdGhpcy5jb250YWluZXIubm9ybWFsaXplKCdtb2RlbDon
ICsga2V5KTsKLQotICAgICAgICAgIGZhY3RvcnkgPSB0aGlzLmNvbnRhaW5lci5sb29rdXBGYWN0
b3J5KG5vcm1hbGl6ZWRLZXkpOwotICAgICAgICAgIGlmICghZmFjdG9yeSkgeyB0aHJvdyBuZXcg
RW1iZXIuRXJyb3IoIk5vIG1vZGVsIHdhcyBmb3VuZCBmb3IgJyIgKyBrZXkgKyAiJyIpOyB9Ci0g
ICAgICAgICAgZmFjdG9yeS50eXBlS2V5ID0gdGhpcy5fbm9ybWFsaXplVHlwZUtleShub3JtYWxp
emVkS2V5LnNwbGl0KCc6JywgMilbMV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8v
IEEgZmFjdG9yeSBhbHJlYWR5IHN1cHBsaWVkLiBFbnN1cmUgaXQgaGFzIGEgbm9ybWFsaXplZCBr
ZXkuCi0gICAgICAgICAgZmFjdG9yeSA9IGtleTsKLSAgICAgICAgICBpZiAoZmFjdG9yeS50eXBl
S2V5KSB7Ci0gICAgICAgICAgICBmYWN0b3J5LnR5cGVLZXkgPSB0aGlzLl9ub3JtYWxpemVUeXBl
S2V5KGZhY3RvcnkudHlwZUtleSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
ZmFjdG9yeS5zdG9yZSA9IHRoaXM7Ci0gICAgICAgIHJldHVybiBmYWN0b3J5OwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIFB1c2ggc29tZSBkYXRhIGZvciBhIGdpdmVuIHR5cGUgaW50
byB0aGUgc3RvcmUuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgZXhwZWN0cyBub3JtYWxpemVkIGRh
dGE6Ci0KLSAgICAgICAgKiBUaGUgSUQgaXMgYSBrZXkgbmFtZWQgYGlkYCAoYW4gSUQgaXMgbWFu
ZGF0b3J5KQotICAgICAgICAqIFRoZSBuYW1lcyBvZiBhdHRyaWJ1dGVzIGFyZSB0aGUgb25lcyB5
b3UgdXNlZCBpbgotICAgICAgICAgIHlvdXIgbW9kZWwncyBgRFMuYXR0cmBzLgotICAgICAgICAq
IFlvdXIgcmVsYXRpb25zaGlwcyBtdXN0IGJlOgotICAgICAgICAgICogcmVwcmVzZW50ZWQgYXMg
SURzIG9yIEFycmF5cyBvZiBJRHMKLSAgICAgICAgICAqIHJlcHJlc2VudGVkIGFzIG1vZGVsIGlu
c3RhbmNlcwotICAgICAgICAgICogcmVwcmVzZW50ZWQgYXMgVVJMcywgdW5kZXIgdGhlIGBsaW5r
c2Aga2V5Ci0KLSAgICAgICAgRm9yIHRoaXMgbW9kZWw6Ci0KLSAgICAgICAgYGBganMKLSAgICAg
ICAgQXBwLlBlcnNvbiA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgZmlyc3ROYW1lOiBE
Uy5hdHRyKCksCi0gICAgICAgICAgbGFzdE5hbWU6IERTLmF0dHIoKSwKLQotICAgICAgICAgIGNo
aWxkcmVuOiBEUy5oYXNNYW55KCdwZXJzb24nKQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0K
LSAgICAgICAgVG8gcmVwcmVzZW50IHRoZSBjaGlsZHJlbiBhcyBJRHM6Ci0KLSAgICAgICAgYGBg
anMKLSAgICAgICAgewotICAgICAgICAgIGlkOiAxLAotICAgICAgICAgIGZpcnN0TmFtZTogIlRv
bSIsCi0gICAgICAgICAgbGFzdE5hbWU6ICJEYWxlIiwKLSAgICAgICAgICBjaGlsZHJlbjogWzEs
IDIsIDNdCi0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgVG8gcmVwcmVzZW50IHRo
ZSBjaGlsZHJlbiByZWxhdGlvbnNoaXAgYXMgYSBVUkw6Ci0KLSAgICAgICAgYGBganMKLSAgICAg
ICAgewotICAgICAgICAgIGlkOiAxLAotICAgICAgICAgIGZpcnN0TmFtZTogIlRvbSIsCi0gICAg
ICAgICAgbGFzdE5hbWU6ICJEYWxlIiwKLSAgICAgICAgICBsaW5rczogewotICAgICAgICAgICAg
Y2hpbGRyZW46ICIvcGVvcGxlLzEvY2hpbGRyZW4iCi0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIElmIHlvdSdyZSBzdHJlYW1pbmcgZGF0YSBvciBpbXBsZW1l
bnRpbmcgYW4gYWRhcHRlciwKLSAgICAgICAgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgY29udmVy
dGVkIHRoZSBpbmNvbWluZyBkYXRhCi0gICAgICAgIGludG8gdGhpcyBmb3JtLgotCi0gICAgICAg
IFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGJvdGggdG8gcHVzaCBpbiBicmFuZCBuZXcKLSAgICAg
ICAgcmVjb3JkcywgYXMgd2VsbCBhcyB0byB1cGRhdGUgZXhpc3RpbmcgcmVjb3Jkcy4KLQotICAg
ICAgICBAbWV0aG9kIHB1c2gKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2Yg
RFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgICAgQHJl
dHVybiB7RFMuTW9kZWx9IHRoZSByZWNvcmQgdGhhdCB3YXMgY3JlYXRlZCBvcgotICAgICAgICAg
IHVwZGF0ZWQuCi0gICAgICAqLwotICAgICAgcHVzaDogZnVuY3Rpb24odHlwZSwgZGF0YSwgX3Bh
cnRpYWwpIHsKLSAgICAgICAgLy8gX3BhcnRpYWwgaXMgYW4gaW50ZXJuYWwgcGFyYW0gdXNlZCBi
eSBgdXBkYXRlYC4KLSAgICAgICAgLy8gSWYgcGFzc2VkLCBpdCBtZWFucyB0aGF0IHRoZSBkYXRh
IHNob3VsZCBiZQotICAgICAgICAvLyBtZXJnZWQgaW50byB0aGUgZXhpc3RpbmcgZGF0YSwgbm90
IHJlcGxhY2UgaXQuCi0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBpbmNsdWRlIGFu
IGBpZGAgZm9yICIgKyB0eXBlICsgIiBpbiBhIGhhc2ggcGFzc2VkIHRvIGBwdXNoYCIsIGRhdGEu
aWQgIT0gbnVsbCk7Ci0KLSAgICAgICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7Ci0KLSAg
ICAgICAgLy8gbm9ybWFsaXplIHJlbGF0aW9uc2hpcCBJRHMgaW50byByZWNvcmRzCi0gICAgICAg
IGRhdGEgPSBub3JtYWxpemVSZWxhdGlvbnNoaXBzKHRoaXMsIHR5cGUsIGRhdGEpOwotCi0gICAg
ICAgIHRoaXMuX2xvYWQodHlwZSwgZGF0YSwgX3BhcnRpYWwpOwotCi0gICAgICAgIHJldHVybiB0
aGlzLnJlY29yZEZvcklkKHR5cGUsIGRhdGEuaWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIFB1c2ggc29tZSByYXcgZGF0YSBpbnRvIHRoZSBzdG9yZS4KLQotICAgICAgICBUaGlz
IG1ldGhvZCBjYW4gYmUgdXNlZCBib3RoIHRvIHB1c2ggaW4gYnJhbmQgbmV3Ci0gICAgICAgIHJl
Y29yZHMsIGFzIHdlbGwgYXMgdG8gdXBkYXRlIGV4aXN0aW5nIHJlY29yZHMuIFlvdQotICAgICAg
ICBjYW4gcHVzaCBpbiBtb3JlIHRoYW4gb25lIHR5cGUgb2Ygb2JqZWN0IGF0IG9uY2UuCi0gICAg
ICAgIEFsbCBvYmplY3RzIHNob3VsZCBiZSBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZQot
ICAgICAgICBzZXJpYWxpemVyLgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5BcHBsaWNh
dGlvblNlcmlhbGl6ZXIgPSBEUy5BY3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0KLSAgICAgICAgdmFy
IHB1c2hEYXRhID0gewotICAgICAgICAgIHBvc3RzOiBbCi0gICAgICAgICAgICB7aWQ6IDEsIHBv
c3RfdGl0bGU6ICJHcmVhdCBwb3N0IiwgY29tbWVudF9pZHM6IFsyXX0KLSAgICAgICAgICBdLAot
ICAgICAgICAgIGNvbW1lbnRzOiBbCi0gICAgICAgICAgICB7aWQ6IDIsIGNvbW1lbnRfYm9keTog
Ikluc2lnaHRmdWwgY29tbWVudCJ9Ci0gICAgICAgICAgXQotICAgICAgICB9Ci0KLSAgICAgICAg
c3RvcmUucHVzaFBheWxvYWQocHVzaERhdGEpOwotICAgICAgICBgYGAKLQotICAgICAgICBCeSBk
ZWZhdWx0LCB0aGUgZGF0YSB3aWxsIGJlIGRlc2VyaWFsaXplZCB1c2luZyBhIGRlZmF1bHQKLSAg
ICAgICAgc2VyaWFsaXplciAodGhlIGFwcGxpY2F0aW9uIHNlcmlhbGl6ZXIgaWYgaXQgZXhpc3Rz
KS4KLQotICAgICAgICBBbHRlcm5hdGl2bHksIGBwdXNoUGF5bG9hZGAgd2lsbCBhY2NlcHQgYSBt
b2RlbCB0eXBlIHdoaWNoCi0gICAgICAgIHdpbGwgZGV0ZXJtaW5lIHdoaWNoIHNlcmlhbGl6ZXIg
d2lsbCBwcm9jZXNzIHRoZSBwYXlsb2FkLgotICAgICAgICBIb3dldmVyLCB0aGUgc2VyaWFsaXpl
ciBpdHNlbGYgKHByb2Nlc3NpbmcgdGhpcyBkYXRhIHZpYQotICAgICAgICBgbm9ybWFsaXplUGF5
bG9hZGApIHdpbGwgbm90IGtub3cgd2hpY2ggbW9kZWwgaXQgaXMKLSAgICAgICAgZGVzZXJpYWxp
emluZy4KLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuQXBwbGljYXRpb25TZXJpYWxpemVy
ID0gRFMuQWN0aXZlTW9kZWxTZXJpYWxpemVyOwotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIg
PSBEUy5KU09OU2VyaWFsaXplcjsKLSAgICAgICAgc3RvcmUucHVzaFBheWxvYWQoJ2NvbW1lbnQn
LCBwdXNoRGF0YSk7IC8vIFdpbGwgdXNlIHRoZSBBcHBsaWNhdGlvblNlcmlhbGl6ZXIKLSAgICAg
ICAgc3RvcmUucHVzaFBheWxvYWQoJ3Bvc3QnLCBwdXNoRGF0YSk7IC8vIFdpbGwgdXNlIHRoZSBQ
b3N0U2VyaWFsaXplcgotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHB1c2hQYXlsb2Fk
Ci0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlIE9wdGlvbmFsbHksIGEgbW9kZWwgdXNlZCB0
byBkZXRlcm1pbmUgd2hpY2ggc2VyaWFsaXplciB3aWxsIGJlIHVzZWQKLSAgICAgICAgQHBhcmFt
IHtPYmplY3R9IHBheWxvYWQKLSAgICAgICovCi0gICAgICBwdXNoUGF5bG9hZDogZnVuY3Rpb24g
KHR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAgdmFyIHNlcmlhbGl6ZXI7Ci0gICAgICAgIGlmICgh
cGF5bG9hZCkgewotICAgICAgICAgIHBheWxvYWQgPSB0eXBlOwotICAgICAgICAgIHNlcmlhbGl6
ZXIgPSBkZWZhdWx0U2VyaWFsaXplcih0aGlzLmNvbnRhaW5lcik7Ci0gICAgICAgICAgRW1iZXIu
YXNzZXJ0KCJZb3UgY2Fubm90IHVzZSBgc3RvcmUjcHVzaFBheWxvYWRgIHdpdGhvdXQgYSB0eXBl
IHVubGVzcyB5b3VyIGRlZmF1bHQgc2VyaWFsaXplciBkZWZpbmVzIGBwdXNoUGF5bG9hZGAiLCBz
ZXJpYWxpemVyLnB1c2hQYXlsb2FkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzZXJp
YWxpemVyID0gdGhpcy5zZXJpYWxpemVyRm9yKHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIHNl
cmlhbGl6ZXIucHVzaFBheWxvYWQodGhpcywgcGF5bG9hZCk7Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgVXBkYXRlIGV4aXN0aW5nIHJlY29yZHMgaW4gdGhlIHN0b3JlLiBVbmxpa2Ug
W3B1c2hdKCNtZXRob2RfcHVzaCksCi0gICAgICAgIHVwZGF0ZSB3aWxsIG1lcmdlIHRoZSBuZXcg
ZGF0YSBwcm9wZXJ0aWVzIHdpdGggdGhlIGV4aXN0aW5nCi0gICAgICAgIHByb3BlcnRpZXMuIFRo
aXMgbWFrZXMgaXQgc2FmZSB0byB1c2Ugd2l0aCBhIHN1YnNldCBvZiByZWNvcmQKLSAgICAgICAg
YXR0cmlidXRlcy4gVGhpcyBtZXRob2QgZXhwZWN0cyBub3JtYWxpemVkIGRhdGEuCi0KLSAgICAg
ICAgYHVwZGF0ZWAgaXMgdXNlZnVsIGlmIHlvdSBhcHAgYnJvYWRjYXN0cyBwYXJ0aWFsIHVwZGF0
ZXMgdG8KLSAgICAgICAgcmVjb3Jkcy4KLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuUGVy
c29uID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBmaXJzdE5hbWU6IERTLmF0dHIoJ3N0
cmluZycpLAotICAgICAgICAgIGxhc3ROYW1lOiBEUy5hdHRyKCdzdHJpbmcnKQotICAgICAgICB9
KTsKLQotICAgICAgICBzdG9yZS5nZXQoJ3BlcnNvbicsIDEpLnRoZW4oZnVuY3Rpb24odG9tKSB7
Ci0gICAgICAgICAgdG9tLmdldCgnZmlyc3ROYW1lJyk7IC8vIFRvbQotICAgICAgICAgIHRvbS5n
ZXQoJ2xhc3ROYW1lJyk7IC8vIERhbGUKLQotICAgICAgICAgIHZhciB1cGRhdGVFdmVudCA9IHtp
ZDogMSwgZmlyc3ROYW1lOiAiVG9tSHVkYSJ9OwotICAgICAgICAgIHN0b3JlLnVwZGF0ZSgncGVy
c29uJywgdXBkYXRlRXZlbnQpOwotCi0gICAgICAgICAgdG9tLmdldCgnZmlyc3ROYW1lJyk7IC8v
IFRvbUh1ZGEKLSAgICAgICAgICB0b20uZ2V0KCdsYXN0TmFtZScpOyAvLyBEYWxlCi0gICAgICAg
IH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHVwZGF0ZQotICAgICAgICBAcGFy
YW0ge1N0cmluZ30gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAgICBA
cmV0dXJuIHtEUy5Nb2RlbH0gdGhlIHJlY29yZCB0aGF0IHdhcyB1cGRhdGVkLgotICAgICAgKi8K
LSAgICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZSwgZGF0YSkgewotICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBtdXN0IGluY2x1ZGUgYW4gYGlkYCBmb3IgIiArIHR5cGUgKyAiIGluIGEgaGFzaCBw
YXNzZWQgdG8gYHVwZGF0ZWAiLCBkYXRhLmlkICE9IG51bGwpOwotCi0gICAgICAgIHJldHVybiB0
aGlzLnB1c2godHlwZSwgZGF0YSwgdHJ1ZSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAgSWYgeW91IGhhdmUgYW4gQXJyYXkgb2Ygbm9ybWFsaXplZCBkYXRhIHRvIHB1c2gsCi0gICAg
ICAgIHlvdSBjYW4gY2FsbCBgcHVzaE1hbnlgIHdpdGggdGhlIEFycmF5LCBhbmQgaXQgd2lsbAot
ICAgICAgICBjYWxsIGBwdXNoYCByZXBlYXRlZGx5IGZvciB5b3UuCi0KLSAgICAgICAgQG1ldGhv
ZCBwdXNoTWFueQotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2Rl
bH0gdHlwZQotICAgICAgICBAcGFyYW0ge0FycmF5fSBkYXRhcwotICAgICAgICBAcmV0dXJuIHtB
cnJheX0KLSAgICAgICovCi0gICAgICBwdXNoTWFueTogZnVuY3Rpb24odHlwZSwgZGF0YXMpIHsK
LSAgICAgICAgcmV0dXJuIG1hcChkYXRhcywgZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgIHJl
dHVybiB0aGlzLnB1c2godHlwZSwgZGF0YSk7Ci0gICAgICAgIH0sIHRoaXMpOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIElmIHlvdSBoYXZlIHNvbWUgbWV0YWRhdGEgdG8gc2V0IGZv
ciBhIHR5cGUKLSAgICAgICAgeW91IGNhbiBjYWxsIGBtZXRhRm9yVHlwZWAuCi0KLSAgICAgICAg
QG1ldGhvZCBtZXRhRm9yVHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBv
ZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gbWV0YWRhdGEKLSAgICAg
ICovCi0gICAgICBtZXRhRm9yVHlwZTogZnVuY3Rpb24odHlwZSwgbWV0YWRhdGEpIHsKLSAgICAg
ICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7Ci0KLSAgICAgICAgRW1iZXIubWVyZ2UodGhp
cy50eXBlTWFwRm9yKHR5cGUpLm1ldGFkYXRhLCBtZXRhZGF0YSk7Ci0gICAgICB9LAotCi0gICAg
ICAvKioKLSAgICAgICAgQnVpbGQgYSBicmFuZCBuZXcgcmVjb3JkIGZvciBhIGdpdmVuIHR5cGUs
IElELCBhbmQKLSAgICAgICAgaW5pdGlhbCBkYXRhLgotCi0gICAgICAgIEBtZXRob2QgYnVpbGRS
ZWNvcmQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5N
b2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gaWQKLSAgICAgICAgQHBhcmFtIHtP
YmplY3R9IGRhdGEKLSAgICAgICAgQHJldHVybiB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8K
LSAgICAgIGJ1aWxkUmVjb3JkOiBmdW5jdGlvbih0eXBlLCBpZCwgZGF0YSkgewotICAgICAgICB2
YXIgdHlwZU1hcCA9IHRoaXMudHlwZU1hcEZvcih0eXBlKSwKLSAgICAgICAgICAgIGlkVG9SZWNv
cmQgPSB0eXBlTWFwLmlkVG9SZWNvcmQ7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCdUaGUgaWQg
JyArIGlkICsgJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgd2l0aCBhbm90aGVyIHJlY29yZCBvZiB0
eXBlICcgKyB0eXBlLnRvU3RyaW5nKCkgKyAnLicsICFpZCB8fCAhaWRUb1JlY29yZFtpZF0pOwot
ICAgICAgICBFbWJlci5hc3NlcnQoImAiICsgRW1iZXIuaW5zcGVjdCh0eXBlKSsgImAgZG9lcyBu
b3QgYXBwZWFyIHRvIGJlIGFuIGVtYmVyLWRhdGEgbW9kZWwiLCAodHlwZW9mIHR5cGUuX2NyZWF0
ZSA9PT0gJ2Z1bmN0aW9uJykgKTsKLQotICAgICAgICAvLyBsb29rdXBGYWN0b3J5IHNob3VsZCBy
ZWFsbHkgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGNyZWF0ZXMKLSAgICAgICAgLy8gaW5zdGFuY2Vz
IHdpdGggdGhlIGluamVjdGlvbnMgYXBwbGllZAotICAgICAgICB2YXIgcmVjb3JkID0gdHlwZS5f
Y3JlYXRlKHsKLSAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgc3RvcmU6IHRoaXMsCi0gICAg
ICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcgotICAgICAgICB9KTsKLQotICAgICAgICBp
ZiAoZGF0YSkgewotICAgICAgICAgIHJlY29yZC5zZXR1cERhdGEoZGF0YSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBpZiB3ZSdyZSBjcmVhdGluZyBhbiBpdGVtLCB0aGlzIHByb2Nlc3Mgd2ls
bCBiZSBkb25lCi0gICAgICAgIC8vIGxhdGVyLCBvbmNlIHRoZSBvYmplY3QgaGFzIGJlZW4gcGVy
c2lzdGVkLgotICAgICAgICBpZiAoaWQpIHsKLSAgICAgICAgICBpZFRvUmVjb3JkW2lkXSA9IHJl
Y29yZDsKLSAgICAgICAgfQotCi0gICAgICAgIHR5cGVNYXAucmVjb3Jkcy5wdXNoKHJlY29yZCk7
Ci0KLSAgICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICAgIH0sCi0KLSAgICAgIC8vIC4uLi4uLi4u
Li4uLi4uLgotICAgICAgLy8gLiBERVNUUlVDVElPTiAuCi0gICAgICAvLyAuLi4uLi4uLi4uLi4u
Li4KLQotICAgICAgLyoqCi0gICAgICAgIFdoZW4gYSByZWNvcmQgaXMgZGVzdHJveWVkLCB0aGlz
IHVuLWluZGV4ZXMgaXQgYW5kCi0gICAgICAgIHJlbW92ZXMgaXQgZnJvbSBhbnkgcmVjb3JkIGFy
cmF5cyBzbyBpdCBjYW4gYmUgR0NlZC4KLQotICAgICAgICBAbWV0aG9kIGRlbWF0ZXJpYWxpemVS
ZWNvcmQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3Jk
Ci0gICAgICAqLwotICAgICAgZGVtYXRlcmlhbGl6ZVJlY29yZDogZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgIHZhciB0eXBlID0gcmVjb3JkLmNvbnN0cnVjdG9yLAotICAgICAgICAgICAgdHlw
ZU1hcCA9IHRoaXMudHlwZU1hcEZvcih0eXBlKSwKLSAgICAgICAgICAgIGlkID0gZ2V0KHJlY29y
ZCwgJ2lkJyk7Ci0KLSAgICAgICAgcmVjb3JkLnVwZGF0ZVJlY29yZEFycmF5cygpOwotCi0gICAg
ICAgIGlmIChpZCkgewotICAgICAgICAgIGRlbGV0ZSB0eXBlTWFwLmlkVG9SZWNvcmRbaWRdOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGxvYyA9IGluZGV4T2YodHlwZU1hcC5yZWNvcmRzLCBy
ZWNvcmQpOwotICAgICAgICB0eXBlTWFwLnJlY29yZHMuc3BsaWNlKGxvYywgMSk7Ci0gICAgICB9
LAotCi0gICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgIC8vIC4gUkVMQVRJ
T05TSElQIENIQU5HRVMgLgotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLSAg
ICAgIGFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcjogZnVuY3Rpb24oY2hpbGRSZWNvcmQsIGNoaWxk
S2V5LCBwYXJlbnRSZWNvcmQsIHBhcmVudEtleSwgY2hhbmdlKSB7Ci0gICAgICAgIHZhciBjbGll
bnRJZCA9IGNoaWxkUmVjb3JkLmNsaWVudElkLAotICAgICAgICAgICAgcGFyZW50Q2xpZW50SWQg
PSBwYXJlbnRSZWNvcmQgPyBwYXJlbnRSZWNvcmQgOiBwYXJlbnRSZWNvcmQ7Ci0gICAgICAgIHZh
ciBrZXkgPSBjaGlsZEtleSArIHBhcmVudEtleTsKLSAgICAgICAgdmFyIGNoYW5nZXMgPSB0aGlz
Ll9yZWxhdGlvbnNoaXBDaGFuZ2VzOwotICAgICAgICBpZiAoIShjbGllbnRJZCBpbiBjaGFuZ2Vz
KSkgewotICAgICAgICAgIGNoYW5nZXNbY2xpZW50SWRdID0ge307Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCEocGFyZW50Q2xpZW50SWQgaW4gY2hhbmdlc1tjbGllbnRJZF0pKSB7Ci0gICAgICAg
ICAgY2hhbmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdID0ge307Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCEoa2V5IGluIGNoYW5nZXNbY2xpZW50SWRdW3BhcmVudENsaWVudElkXSkpIHsK
LSAgICAgICAgICBjaGFuZ2VzW2NsaWVudElkXVtwYXJlbnRDbGllbnRJZF1ba2V5XSA9IHt9Owot
ICAgICAgICB9Ci0gICAgICAgIGNoYW5nZXNbY2xpZW50SWRdW3BhcmVudENsaWVudElkXVtrZXld
W2NoYW5nZS5jaGFuZ2VUeXBlXSA9IGNoYW5nZTsKLSAgICAgIH0sCi0KLSAgICAgIHJlbW92ZVJl
bGF0aW9uc2hpcENoYW5nZUZvcjogZnVuY3Rpb24oY2xpZW50UmVjb3JkLCBjaGlsZEtleSwgcGFy
ZW50UmVjb3JkLCBwYXJlbnRLZXksIHR5cGUpIHsKLSAgICAgICAgdmFyIGNsaWVudElkID0gY2xp
ZW50UmVjb3JkLmNsaWVudElkLAotICAgICAgICAgICAgcGFyZW50Q2xpZW50SWQgPSBwYXJlbnRS
ZWNvcmQgPyBwYXJlbnRSZWNvcmQuY2xpZW50SWQgOiBwYXJlbnRSZWNvcmQ7Ci0gICAgICAgIHZh
ciBjaGFuZ2VzID0gdGhpcy5fcmVsYXRpb25zaGlwQ2hhbmdlczsKLSAgICAgICAgdmFyIGtleSA9
IGNoaWxkS2V5ICsgcGFyZW50S2V5OwotICAgICAgICBpZiAoIShjbGllbnRJZCBpbiBjaGFuZ2Vz
KSB8fCAhKHBhcmVudENsaWVudElkIGluIGNoYW5nZXNbY2xpZW50SWRdKSB8fCAhKGtleSBpbiBj
aGFuZ2VzW2NsaWVudElkXVtwYXJlbnRDbGllbnRJZF0pKXsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVsZXRlIGNoYW5nZXNbY2xpZW50SWRdW3BhcmVudENsaWVudElk
XVtrZXldW3R5cGVdOwotICAgICAgfSwKLQotICAgICAgcmVsYXRpb25zaGlwQ2hhbmdlUGFpcnNG
b3I6IGZ1bmN0aW9uKHJlY29yZCl7Ci0gICAgICAgIHZhciB0b1JldHVybiA9IFtdOwotCi0gICAg
ICAgIGlmKCAhcmVjb3JkICkgeyByZXR1cm4gdG9SZXR1cm47IH0KLQotICAgICAgICAvL1RPRE8o
SWdvcikgV2hhdCBhYm91dCB0aGUgb3RoZXIgc2lkZQotICAgICAgICB2YXIgY2hhbmdlc09iamVj
dCA9IHRoaXMuX3JlbGF0aW9uc2hpcENoYW5nZXNbcmVjb3JkLmNsaWVudElkXTsKLSAgICAgICAg
Zm9yICh2YXIgb2JqS2V5IGluIGNoYW5nZXNPYmplY3QpewotICAgICAgICAgIGlmKGNoYW5nZXNP
YmplY3QuaGFzT3duUHJvcGVydHkob2JqS2V5KSl7Ci0gICAgICAgICAgICBmb3IgKHZhciBjaGFu
Z2VLZXkgaW4gY2hhbmdlc09iamVjdFtvYmpLZXldKXsKLSAgICAgICAgICAgICAgaWYoY2hhbmdl
c09iamVjdFtvYmpLZXldLmhhc093blByb3BlcnR5KGNoYW5nZUtleSkpewotICAgICAgICAgICAg
ICAgIHRvUmV0dXJuLnB1c2goY2hhbmdlc09iamVjdFtvYmpLZXldW2NoYW5nZUtleV0pOwotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b1JldHVybjsKLSAgICAgIH0sCi0KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4KLSAgICAgIC8vIC4gUEVSLVRZUEUgQURBUFRFUlMKLSAgICAgIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4KLQotICAgICAgLyoqCi0gICAgICAgIFJldHVybnMgdGhlIGFkYXB0ZXIg
Zm9yIGEgZ2l2ZW4gdHlwZS4KLQotICAgICAgICBAbWV0aG9kIGFkYXB0ZXJGb3IKLSAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAg
ICAgICBAcmV0dXJuIERTLkFkYXB0ZXIKLSAgICAgICovCi0gICAgICBhZGFwdGVyRm9yOiBmdW5j
dGlvbih0eXBlKSB7Ci0gICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lciwgYWRh
cHRlcjsKLQotICAgICAgICBpZiAoY29udGFpbmVyKSB7Ci0gICAgICAgICAgYWRhcHRlciA9IGNv
bnRhaW5lci5sb29rdXAoJ2FkYXB0ZXI6JyArIHR5cGUudHlwZUtleSkgfHwgY29udGFpbmVyLmxv
b2t1cCgnYWRhcHRlcjphcHBsaWNhdGlvbicpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGFkYXB0ZXIgfHwgZ2V0KHRoaXMsICdkZWZhdWx0QWRhcHRlcicpOwotICAgICAgfSwKLQotICAg
ICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAvLyAuIFJFQ09SRCBD
SEFOR0UgTk9USUZJQ0FUSU9OIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLgotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgc2Vy
aWFsaXplciBmb3IgYSBnaXZlbiB0eXBlLiBGb3IKLSAgICAgICAgZXhhbXBsZSwgYHNlcmlhbGl6
ZXJGb3IoJ3BlcnNvbicpYCB3aWxsIHJldHVybiBhbiBpbnN0YW5jZSBvZgotICAgICAgICBgQXBw
LlBlcnNvblNlcmlhbGl6ZXJgLgotCi0gICAgICAgIElmIG5vIGBBcHAuUGVyc29uU2VyaWFsaXpl
cmAgaXMgZm91bmQsIHRoaXMgbWV0aG9kIHdpbGwgbG9vawotICAgICAgICBmb3IgYW4gYEFwcC5B
cHBsaWNhdGlvblNlcmlhbGl6ZXJgICh0aGUgZGVmYXVsdCBzZXJpYWxpemVyIGZvcgotICAgICAg
ICB5b3VyIGVudGlyZSBhcHBsaWNhdGlvbikuCi0KLSAgICAgICAgSWYgbm8gYEFwcC5BcHBsaWNh
dGlvblNlcmlhbGl6ZXJgIGlzIGZvdW5kLCBpdCB3aWxsIGZhbGwgYmFjawotICAgICAgICB0byBh
biBpbnN0YW5jZSBvZiBgRFMuSlNPTlNlcmlhbGl6ZXJgLgotCi0gICAgICAgIEBtZXRob2Qgc2Vy
aWFsaXplckZvcgotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlw
ZSB0aGUgcmVjb3JkIHRvIHNlcmlhbGl6ZQotICAgICAgICBAcmV0dXJuIHtEUy5TZXJpYWxpemVy
fQotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZXJGb3I6IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAg
ICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7Ci0gICAgICAgIHZhciBhZGFwdGVyID0gdGhp
cy5hZGFwdGVyRm9yKHR5cGUpOwotCi0gICAgICAgIHJldHVybiBzZXJpYWxpemVyRm9yKHRoaXMu
Y29udGFpbmVyLCB0eXBlLnR5cGVLZXksIGFkYXB0ZXIgJiYgYWRhcHRlci5kZWZhdWx0U2VyaWFs
aXplcik7Ci0gICAgICB9LAotCi0gICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciB0eXBlTWFwcyA9IHRoaXMudHlwZU1hcHM7Ci0gICAgICAgIHZhciBrZXlzID0gRW1i
ZXIua2V5cyh0eXBlTWFwcyk7Ci0gICAgICAgIHZhciBzdG9yZSA9IHRoaXM7Ci0KLSAgICAgICAg
dmFyIHR5cGVzID0gbWFwKGtleXMsIGJ5VHlwZSk7Ci0KLSAgICAgICAgdGhpcy5yZWNvcmRBcnJh
eU1hbmFnZXIuZGVzdHJveSgpOwotCi0gICAgICAgIGZvckVhY2godHlwZXMsIHRoaXMudW5sb2Fk
QWxsLCB0aGlzKTsKLQotICAgICAgICBmdW5jdGlvbiBieVR5cGUoZW50cnkpIHsKLSAgICAgICAg
ICByZXR1cm4gdHlwZU1hcHNbZW50cnldWyd0eXBlJ107Ci0gICAgICAgIH0KLQotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIEFsbCB0eXBlS2V5cyBhcmUgY2FtZWxDYXNlIGludGVybmFs
bHkuIENoYW5naW5nIHRoaXMgZnVuY3Rpb24gbWF5Ci0gICAgICAgIHJlcXVpcmUgY2hhbmdlcyB0
byBvdGhlciBub3JtYWxpemF0aW9uIGhvb2tzIChzdWNoIGFzIHR5cGVGb3JSb290KS4KLQotICAg
ICAgICBAbWV0aG9kIF9ub3JtYWxpemVUeXBlS2V5Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAg
IEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgICAgIEByZXR1cm4ge1N0cmluZ30gaWYgdGhlIGFk
YXB0ZXIgY2FuIGdlbmVyYXRlIG9uZSwgYW4gSUQKLSAgICAgICovCi0gICAgICBfbm9ybWFsaXpl
VHlwZUtleTogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIHJldHVybiBjYW1lbGl6ZShzaW5ndWxh
cml6ZShrZXkpKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVJl
bGF0aW9uc2hpcHMoc3RvcmUsIHR5cGUsIGRhdGEsIHJlY29yZCkgewotICAgICAgdHlwZS5lYWNo
UmVsYXRpb25zaGlwKGZ1bmN0aW9uKGtleSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIC8vIEEg
bGluayAodXN1YWxseSBhIFVSTCkgd2FzIGFscmVhZHkgcHJvdmlkZWQgaW4KLSAgICAgICAgLy8g
bm9ybWFsaXplZCBmb3JtCi0gICAgICAgIGlmIChkYXRhLmxpbmtzICYmIGRhdGEubGlua3Nba2V5
XSkgewotICAgICAgICAgIGlmIChyZWNvcmQgJiYgcmVsYXRpb25zaGlwLm9wdGlvbnMuYXN5bmMp
IHsgcmVjb3JkLl9yZWxhdGlvbnNoaXBzW2tleV0gPSBudWxsOyB9Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGtpbmQgPSByZWxhdGlvbnNoaXAua2luZCwKLSAg
ICAgICAgICAgIHZhbHVlID0gZGF0YVtrZXldOwotCi0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxs
KSB7IHJldHVybjsgfQotCi0gICAgICAgIGlmIChraW5kID09PSAnYmVsb25nc1RvJykgewotICAg
ICAgICAgIGRlc2VyaWFsaXplUmVjb3JkSWQoc3RvcmUsIGRhdGEsIGtleSwgcmVsYXRpb25zaGlw
LCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2hhc01hbnknKSB7Ci0gICAg
ICAgICAgZGVzZXJpYWxpemVSZWNvcmRJZHMoc3RvcmUsIGRhdGEsIGtleSwgcmVsYXRpb25zaGlw
LCB2YWx1ZSk7Ci0gICAgICAgICAgYWRkVW5zYXZlZFJlY29yZHMocmVjb3JkLCBrZXksIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIHJldHVybiBkYXRhOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplUmVjb3JkSWQoc3RvcmUsIGRhdGEsIGtleSwgcmVsYXRp
b25zaGlwLCBpZCkgewotICAgICAgaWYgKCFNb2RlbCkgeyBNb2RlbCA9IHJlcXVpcmVNb2R1bGUo
ImVtYmVyLWRhdGEvbGliL3N5c3RlbS9tb2RlbCIpWyJNb2RlbCJdOyB9Ci0gICAgICBpZiAoaXNO
b25lKGlkKSB8fCBpZCBpbnN0YW5jZW9mIE1vZGVsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLQotICAgICAgdmFyIHR5cGU7Ci0KLSAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdudW1iZXIn
IHx8IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgdHlwZSA9IHR5cGVGb3IocmVs
YXRpb25zaGlwLCBrZXksIGRhdGEpOwotICAgICAgICBkYXRhW2tleV0gPSBzdG9yZS5yZWNvcmRG
b3JJZCh0eXBlLCBpZCk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZCA9PT0gJ29iamVjdCcp
IHsKLSAgICAgICAgLy8gcG9seW1vcnBoaWMKLSAgICAgICAgZGF0YVtrZXldID0gc3RvcmUucmVj
b3JkRm9ySWQoaWQudHlwZSwgaWQuaWQpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHR5cGVGb3IocmVsYXRpb25zaGlwLCBrZXksIGRhdGEpIHsKLSAgICAgIGlmIChyZWxhdGlvbnNo
aXAub3B0aW9ucy5wb2x5bW9ycGhpYykgewotICAgICAgICByZXR1cm4gZGF0YVtrZXkgKyAiVHlw
ZSJdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcC50eXBlOwot
ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplUmVjb3JkSWRzKHN0b3Jl
LCBkYXRhLCBrZXksIHJlbGF0aW9uc2hpcCwgaWRzKSB7Ci0gICAgICBmb3IgKHZhciBpPTAsIGw9
aWRzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgZGVzZXJpYWxpemVSZWNvcmRJZChzdG9y
ZSwgaWRzLCBpLCByZWxhdGlvbnNoaXAsIGlkc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlcmUgYXJlIGFueSB1bnNhdmVkIHJlY29yZHMgdGhhdCBhcmUgaW4gYSBoYXNNYW55
IHRoZXkgd29uJ3QgYmUKLSAgICAvLyBpbiB0aGUgcGF5bG9hZCwgc28gYWRkIHRoZW0gYmFjayBp
biBtYW51YWxseS4KLSAgICBmdW5jdGlvbiBhZGRVbnNhdmVkUmVjb3JkcyhyZWNvcmQsIGtleSwg
ZGF0YSkgewotICAgICAgaWYocmVjb3JkKSB7Ci0gICAgICAgIEVtYmVyLkEoZGF0YSkucHVzaE9i
amVjdHMocmVjb3JkLmdldChrZXkpLmZpbHRlckJ5KCdpc05ldycpKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBEZWxlZ2F0aW9uIHRvIHRoZSBhZGFwdGVyIGFuZCBwcm9taXNlIG1hbmFnZW1l
bnQKLSAgICAvKioKLSAgICAgIEEgYFByb21pc2VBcnJheWAgaXMgYW4gb2JqZWN0IHRoYXQgYWN0
cyBsaWtlIGJvdGggYW4gYEVtYmVyLkFycmF5YAotICAgICAgYW5kIGEgcHJvbWlzZS4gV2hlbiB0
aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0aGUgcmVzdWx0aW5nIHZhbHVlCi0gICAgICB3aWxsIGJl
IHNldCB0byB0aGUgYFByb21pc2VBcnJheWAncyBgY29udGVudGAgcHJvcGVydHkuIFRoaXMgbWFr
ZXMKLSAgICAgIGl0IGVhc3kgdG8gY3JlYXRlIGRhdGEgYmluZGluZ3Mgd2l0aCB0aGUgYFByb21p
c2VBcnJheWAgdGhhdCB3aWxsIGJlCi0gICAgICB1cGRhdGVkIHdoZW4gdGhlIHByb21pc2UgcmVz
b2x2ZXMuCi0KLSAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW0VtYmVyLlByb21p
c2VQcm94eU1peGluCi0gICAgICBkb2N1bWVudGF0aW9uXSgvYXBpL2NsYXNzZXMvRW1iZXIuUHJv
bWlzZVByb3h5TWl4aW4uaHRtbCkuCi0KLSAgICAgIEV4YW1wbGUKLQotICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgdmFyIHByb21pc2VBcnJheSA9IERTLlByb21pc2VBcnJheS5jcmVhdGUoewot
ICAgICAgICBwcm9taXNlOiAkLmdldEpTT04oJy9zb21lL3JlbW90ZS9kYXRhLmpzb24nKQotICAg
ICAgfSk7Ci0KLSAgICAgIHByb21pc2VBcnJheS5nZXQoJ2xlbmd0aCcpOyAvLyAwCi0KLSAgICAg
IHByb21pc2VBcnJheS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICBwcm9taXNlQXJyYXkuZ2V0
KCdsZW5ndGgnKTsgLy8gMTAwCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBAY2xhc3Mg
UHJvbWlzZUFycmF5Ci0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBAZXh0ZW5kcyBFbWJlci5B
cnJheVByb3h5Ci0gICAgICBAdXNlcyBFbWJlci5Qcm9taXNlUHJveHlNaXhpbgotICAgICovCi0g
ICAgUHJvbWlzZUFycmF5ID0gRW1iZXIuQXJyYXlQcm94eS5leHRlbmQoRW1iZXIuUHJvbWlzZVBy
b3h5TWl4aW4pOwotICAgIC8qKgotICAgICAgQSBgUHJvbWlzZU9iamVjdGAgaXMgYW4gb2JqZWN0
IHRoYXQgYWN0cyBsaWtlIGJvdGggYW4gYEVtYmVyLk9iamVjdGAKLSAgICAgIGFuZCBhIHByb21p
c2UuIFdoZW4gdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdGhlIHRoZSByZXN1bHRpbmcgdmFsdWUK
LSAgICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBgUHJvbWlzZU9iamVjdGAncyBgY29udGVudGAgcHJv
cGVydHkuIFRoaXMgbWFrZXMKLSAgICAgIGl0IGVhc3kgdG8gY3JlYXRlIGRhdGEgYmluZGluZ3Mg
d2l0aCB0aGUgYFByb21pc2VPYmplY3RgIHRoYXQgd2lsbAotICAgICAgYmUgdXBkYXRlZCB3aGVu
IHRoZSBwcm9taXNlIHJlc29sdmVzLgotCi0gICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUg
dGhlIFtFbWJlci5Qcm9taXNlUHJveHlNaXhpbgotICAgICAgZG9jdW1lbnRhdGlvbl0oL2FwaS9j
bGFzc2VzL0VtYmVyLlByb21pc2VQcm94eU1peGluLmh0bWwpLgotCi0gICAgICBFeGFtcGxlCi0K
LSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBwcm9taXNlT2JqZWN0ID0gRFMuUHJvbWlz
ZU9iamVjdC5jcmVhdGUoewotICAgICAgICBwcm9taXNlOiAkLmdldEpTT04oJy9zb21lL3JlbW90
ZS9kYXRhLmpzb24nKQotICAgICAgfSk7Ci0KLSAgICAgIHByb21pc2VPYmplY3QuZ2V0KCduYW1l
Jyk7IC8vIG51bGwKLQotICAgICAgcHJvbWlzZU9iamVjdC50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICBwcm9taXNlT2JqZWN0LmdldCgnbmFtZScpOyAvLyAnVG9tc3RlcicKLSAgICAgIH0pOwot
ICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBQcm9taXNlT2JqZWN0Ci0gICAgICBAbmFtZXNwYWNl
IERTCi0gICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3RQcm94eQotICAgICAgQHVzZXMgRW1iZXIu
UHJvbWlzZVByb3h5TWl4aW4KLSAgICAqLwotICAgIFByb21pc2VPYmplY3QgPSBFbWJlci5PYmpl
Y3RQcm94eS5leHRlbmQoRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4pOwotCi0gICAgZnVuY3Rpb24g
cHJvbWlzZU9iamVjdChwcm9taXNlLCBsYWJlbCkgewotICAgICAgcmV0dXJuIFByb21pc2VPYmpl
Y3QuY3JlYXRlKHsKLSAgICAgICAgcHJvbWlzZTogUHJvbWlzZS5jYXN0KHByb21pc2UsIGxhYmVs
KQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcHJvbWlzZUFycmF5KHByb21pc2Us
IGxhYmVsKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZUFycmF5LmNyZWF0ZSh7Ci0gICAgICAgIHBy
b21pc2U6IFByb21pc2UuY2FzdChwcm9taXNlLCBsYWJlbCkKLSAgICAgIH0pOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGlzVGhlbmFibGUob2JqZWN0KSB7Ci0gICAgICByZXR1cm4gb2JqZWN0ICYm
IHR5cGVvZiBvYmplY3QudGhlbiA9PT0gJ2Z1bmN0aW9uJzsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBzZXJpYWxpemVyRm9yKGNvbnRhaW5lciwgdHlwZSwgZGVmYXVsdFNlcmlhbGl6ZXIpIHsKLSAg
ICAgIHJldHVybiBjb250YWluZXIubG9va3VwKCdzZXJpYWxpemVyOicrdHlwZSkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5sb29rdXAoJ3NlcmlhbGl6ZXI6YXBwbGljYXRpb24n
KSB8fAotICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmxvb2t1cCgnc2VyaWFsaXplcjon
ICsgZGVmYXVsdFNlcmlhbGl6ZXIpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBjb250YWluZXIu
bG9va3VwKCdzZXJpYWxpemVyOi1kZWZhdWx0Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZGVm
YXVsdFNlcmlhbGl6ZXIoY29udGFpbmVyKSB7Ci0gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1
cCgnc2VyaWFsaXplcjphcHBsaWNhdGlvbicpIHx8Ci0gICAgICAgICAgICAgY29udGFpbmVyLmxv
b2t1cCgnc2VyaWFsaXplcjotZGVmYXVsdCcpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNlcmlh
bGl6ZXJGb3JBZGFwdGVyKGFkYXB0ZXIsIHR5cGUpIHsKLSAgICAgIHZhciBzZXJpYWxpemVyID0g
YWRhcHRlci5zZXJpYWxpemVyLAotICAgICAgICAgIGRlZmF1bHRTZXJpYWxpemVyID0gYWRhcHRl
ci5kZWZhdWx0U2VyaWFsaXplciwKLSAgICAgICAgICBjb250YWluZXIgPSBhZGFwdGVyLmNvbnRh
aW5lcjsKLQotICAgICAgaWYgKGNvbnRhaW5lciAmJiBzZXJpYWxpemVyID09PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3IoY29udGFpbmVyLCB0eXBlLnR5
cGVLZXksIGRlZmF1bHRTZXJpYWxpemVyKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHNlcmlhbGl6
ZXIgPT09IG51bGwgfHwgc2VyaWFsaXplciA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHNlcmlh
bGl6ZXIgPSB7Ci0gICAgICAgICAgZXh0cmFjdDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHBheWxv
YWQpIHsgcmV0dXJuIHBheWxvYWQ7IH0KLSAgICAgICAgfTsKLSAgICAgIH0KLQotICAgICAgcmV0
dXJuIHNlcmlhbGl6ZXI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gX2ZpbmQoYWRhcHRlciwgc3Rv
cmUsIHR5cGUsIGlkKSB7Ci0gICAgICB2YXIgcHJvbWlzZSA9IGFkYXB0ZXIuZmluZChzdG9yZSwg
dHlwZSwgaWQpLAotICAgICAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRhcHRlcihh
ZGFwdGVyLCB0eXBlKSwKLSAgICAgICAgICBsYWJlbCA9ICJEUzogSGFuZGxlIEFkYXB0ZXIjZmlu
ZCBvZiAiICsgdHlwZSArICIgd2l0aCBpZDogIiArIGlkOwotCi0gICAgICByZXR1cm4gUHJvbWlz
ZS5jYXN0KHByb21pc2UsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGFkYXB0ZXJQYXlsb2FkKSB7Ci0g
ICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG1hZGUgYSByZXF1ZXN0IGZvciBhICIgKyB0eXBlLnR5
cGVLZXkgKyAiIHdpdGggaWQgIiArIGlkICsgIiwgYnV0IHRoZSBhZGFwdGVyJ3MgcmVzcG9uc2Ug
ZGlkIG5vdCBoYXZlIGFueSBkYXRhIiwgYWRhcHRlclBheWxvYWQpOwotICAgICAgICB2YXIgcGF5
bG9hZCA9IHNlcmlhbGl6ZXIuZXh0cmFjdChzdG9yZSwgdHlwZSwgYWRhcHRlclBheWxvYWQsIGlk
LCAnZmluZCcpOwotCi0gICAgICAgIHJldHVybiBzdG9yZS5wdXNoKHR5cGUsIHBheWxvYWQpOwot
ICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAgdmFyIHJlY29yZCA9IHN0b3JlLmdl
dEJ5SWQodHlwZSwgaWQpOwotICAgICAgICByZWNvcmQubm90Rm91bmQoKTsKLSAgICAgICAgdGhy
b3cgZXJyb3I7Ci0gICAgICB9LCAiRFM6IEV4dHJhY3QgcGF5bG9hZCBvZiAnIiArIHR5cGUgKyAi
JyIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIF9maW5kTWFueShhZGFwdGVyLCBzdG9yZSwgdHlw
ZSwgaWRzLCBvd25lcikgewotICAgICAgdmFyIHByb21pc2UgPSBhZGFwdGVyLmZpbmRNYW55KHN0
b3JlLCB0eXBlLCBpZHMsIG93bmVyKSwKLSAgICAgICAgICBzZXJpYWxpemVyID0gc2VyaWFsaXpl
ckZvckFkYXB0ZXIoYWRhcHRlciwgdHlwZSksCi0gICAgICAgICAgbGFiZWwgPSAiRFM6IEhhbmRs
ZSBBZGFwdGVyI2ZpbmRNYW55IG9mICIgKyB0eXBlOwotCi0gICAgICByZXR1cm4gUHJvbWlzZS5j
YXN0KHByb21pc2UsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGFkYXB0ZXJQYXlsb2FkKSB7Ci0gICAg
ICAgIHZhciBwYXlsb2FkID0gc2VyaWFsaXplci5leHRyYWN0KHN0b3JlLCB0eXBlLCBhZGFwdGVy
UGF5bG9hZCwgbnVsbCwgJ2ZpbmRNYW55Jyk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJUaGUg
cmVzcG9uc2UgZnJvbSBhIGZpbmRNYW55IG11c3QgYmUgYW4gQXJyYXksIG5vdCAiICsgRW1iZXIu
aW5zcGVjdChwYXlsb2FkKSwgRW1iZXIudHlwZU9mKHBheWxvYWQpID09PSAnYXJyYXknKTsKLQot
ICAgICAgICBzdG9yZS5wdXNoTWFueSh0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sIG51bGwsICJE
UzogRXh0cmFjdCBwYXlsb2FkIG9mICIgKyB0eXBlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBf
ZmluZEhhc01hbnkoYWRhcHRlciwgc3RvcmUsIHJlY29yZCwgbGluaywgcmVsYXRpb25zaGlwKSB7
Ci0gICAgICB2YXIgcHJvbWlzZSA9IGFkYXB0ZXIuZmluZEhhc01hbnkoc3RvcmUsIHJlY29yZCwg
bGluaywgcmVsYXRpb25zaGlwKSwKLSAgICAgICAgICBzZXJpYWxpemVyID0gc2VyaWFsaXplckZv
ckFkYXB0ZXIoYWRhcHRlciwgcmVsYXRpb25zaGlwLnR5cGUpLAotICAgICAgICAgIGxhYmVsID0g
IkRTOiBIYW5kbGUgQWRhcHRlciNmaW5kSGFzTWFueSBvZiAiICsgcmVjb3JkICsgIiA6ICIgKyBy
ZWxhdGlvbnNoaXAudHlwZTsKLQotICAgICAgcmV0dXJuIFByb21pc2UuY2FzdChwcm9taXNlLCBs
YWJlbCkudGhlbihmdW5jdGlvbihhZGFwdGVyUGF5bG9hZCkgewotICAgICAgICB2YXIgcGF5bG9h
ZCA9IHNlcmlhbGl6ZXIuZXh0cmFjdChzdG9yZSwgcmVsYXRpb25zaGlwLnR5cGUsIGFkYXB0ZXJQ
YXlsb2FkLCBudWxsLCAnZmluZEhhc01hbnknKTsKLQotICAgICAgICBFbWJlci5hc3NlcnQoIlRo
ZSByZXNwb25zZSBmcm9tIGEgZmluZEhhc01hbnkgbXVzdCBiZSBhbiBBcnJheSwgbm90ICIgKyBF
bWJlci5pbnNwZWN0KHBheWxvYWQpLCBFbWJlci50eXBlT2YocGF5bG9hZCkgPT09ICdhcnJheScp
OwotCi0gICAgICAgIHZhciByZWNvcmRzID0gc3RvcmUucHVzaE1hbnkocmVsYXRpb25zaGlwLnR5
cGUsIHBheWxvYWQpOwotICAgICAgICByZWNvcmQudXBkYXRlSGFzTWFueShyZWxhdGlvbnNoaXAu
a2V5LCByZWNvcmRzKTsKLSAgICAgIH0sIG51bGwsICJEUzogRXh0cmFjdCBwYXlsb2FkIG9mICIg
KyByZWNvcmQgKyAiIDogaGFzTWFueSAiICsgcmVsYXRpb25zaGlwLnR5cGUpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIF9maW5kQmVsb25nc1RvKGFkYXB0ZXIsIHN0b3JlLCByZWNvcmQsIGxpbmss
IHJlbGF0aW9uc2hpcCkgewotICAgICAgdmFyIHByb21pc2UgPSBhZGFwdGVyLmZpbmRCZWxvbmdz
VG8oc3RvcmUsIHJlY29yZCwgbGluaywgcmVsYXRpb25zaGlwKSwKLSAgICAgICAgICBzZXJpYWxp
emVyID0gc2VyaWFsaXplckZvckFkYXB0ZXIoYWRhcHRlciwgcmVsYXRpb25zaGlwLnR5cGUpLAot
ICAgICAgICAgIGxhYmVsID0gIkRTOiBIYW5kbGUgQWRhcHRlciNmaW5kQmVsb25nc1RvIG9mICIg
KyByZWNvcmQgKyAiIDogIiArIHJlbGF0aW9uc2hpcC50eXBlOwotCi0gICAgICByZXR1cm4gUHJv
bWlzZS5jYXN0KHByb21pc2UsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGFkYXB0ZXJQYXlsb2FkKSB7
Ci0gICAgICAgIHZhciBwYXlsb2FkID0gc2VyaWFsaXplci5leHRyYWN0KHN0b3JlLCByZWxhdGlv
bnNoaXAudHlwZSwgYWRhcHRlclBheWxvYWQsIG51bGwsICdmaW5kQmVsb25nc1RvJyk7Ci0gICAg
ICAgIHZhciByZWNvcmQgPSBzdG9yZS5wdXNoKHJlbGF0aW9uc2hpcC50eXBlLCBwYXlsb2FkKTsK
LQotICAgICAgICByZWNvcmQudXBkYXRlQmVsb25nc1RvKHJlbGF0aW9uc2hpcC5rZXksIHJlY29y
ZCk7Ci0gICAgICAgIHJldHVybiByZWNvcmQ7Ci0gICAgICB9LCBudWxsLCAiRFM6IEV4dHJhY3Qg
cGF5bG9hZCBvZiAiICsgcmVjb3JkICsgIiA6ICIgKyByZWxhdGlvbnNoaXAudHlwZSk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gX2ZpbmRBbGwoYWRhcHRlciwgc3RvcmUsIHR5cGUsIHNpbmNlVG9r
ZW4pIHsKLSAgICAgIHZhciBwcm9taXNlID0gYWRhcHRlci5maW5kQWxsKHN0b3JlLCB0eXBlLCBz
aW5jZVRva2VuKSwKLSAgICAgICAgICBzZXJpYWxpemVyID0gc2VyaWFsaXplckZvckFkYXB0ZXIo
YWRhcHRlciwgdHlwZSksCi0gICAgICAgICAgbGFiZWwgPSAiRFM6IEhhbmRsZSBBZGFwdGVyI2Zp
bmRBbGwgb2YgIiArIHR5cGU7Ci0KLSAgICAgIHJldHVybiBQcm9taXNlLmNhc3QocHJvbWlzZSwg
bGFiZWwpLnRoZW4oZnVuY3Rpb24oYWRhcHRlclBheWxvYWQpIHsKLSAgICAgICAgdmFyIHBheWxv
YWQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUsIGFkYXB0ZXJQYXlsb2FkLCBudWxs
LCAnZmluZEFsbCcpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIHJlc3BvbnNlIGZyb20g
YSBmaW5kQWxsIG11c3QgYmUgYW4gQXJyYXksIG5vdCAiICsgRW1iZXIuaW5zcGVjdChwYXlsb2Fk
KSwgRW1iZXIudHlwZU9mKHBheWxvYWQpID09PSAnYXJyYXknKTsKLQotICAgICAgICBzdG9yZS5w
dXNoTWFueSh0eXBlLCBwYXlsb2FkKTsKLSAgICAgICAgc3RvcmUuZGlkVXBkYXRlQWxsKHR5cGUp
OwotICAgICAgICByZXR1cm4gc3RvcmUuYWxsKHR5cGUpOwotICAgICAgfSwgbnVsbCwgIkRTOiBF
eHRyYWN0IHBheWxvYWQgb2YgZmluZEFsbCAiICsgdHlwZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gX2ZpbmRRdWVyeShhZGFwdGVyLCBzdG9yZSwgdHlwZSwgcXVlcnksIHJlY29yZEFycmF5KSB7
Ci0gICAgICB2YXIgcHJvbWlzZSA9IGFkYXB0ZXIuZmluZFF1ZXJ5KHN0b3JlLCB0eXBlLCBxdWVy
eSwgcmVjb3JkQXJyYXkpLAotICAgICAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRh
cHRlcihhZGFwdGVyLCB0eXBlKSwKLSAgICAgICAgICBsYWJlbCA9ICJEUzogSGFuZGxlIEFkYXB0
ZXIjZmluZFF1ZXJ5IG9mICIgKyB0eXBlOwotCi0gICAgICByZXR1cm4gUHJvbWlzZS5jYXN0KHBy
b21pc2UsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGFkYXB0ZXJQYXlsb2FkKSB7Ci0gICAgICAgIHZh
ciBwYXlsb2FkID0gc2VyaWFsaXplci5leHRyYWN0KHN0b3JlLCB0eXBlLCBhZGFwdGVyUGF5bG9h
ZCwgbnVsbCwgJ2ZpbmRRdWVyeScpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIHJlc3Bv
bnNlIGZyb20gYSBmaW5kUXVlcnkgbXVzdCBiZSBhbiBBcnJheSwgbm90ICIgKyBFbWJlci5pbnNw
ZWN0KHBheWxvYWQpLCBFbWJlci50eXBlT2YocGF5bG9hZCkgPT09ICdhcnJheScpOwotCi0gICAg
ICAgIHJlY29yZEFycmF5LmxvYWQocGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiByZWNvcmRBcnJh
eTsKLSAgICAgIH0sIG51bGwsICJEUzogRXh0cmFjdCBwYXlsb2FkIG9mIGZpbmRRdWVyeSAiICsg
dHlwZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gX2NvbW1pdChhZGFwdGVyLCBzdG9yZSwgb3Bl
cmF0aW9uLCByZWNvcmQpIHsKLSAgICAgIHZhciB0eXBlID0gcmVjb3JkLmNvbnN0cnVjdG9yLAot
ICAgICAgICAgIHByb21pc2UgPSBhZGFwdGVyW29wZXJhdGlvbl0oc3RvcmUsIHR5cGUsIHJlY29y
ZCksCi0gICAgICAgICAgc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3JBZGFwdGVyKGFkYXB0ZXIs
IHR5cGUpLAotICAgICAgICAgIGxhYmVsID0gIkRTOiBFeHRyYWN0IGFuZCBub3RpZnkgYWJvdXQg
IiArIG9wZXJhdGlvbiArICIgY29tcGxldGlvbiBvZiAiICsgcmVjb3JkOwotCi0gICAgICBFbWJl
ci5hc3NlcnQoIllvdXIgYWRhcHRlcidzICciICsgb3BlcmF0aW9uICsgIicgbWV0aG9kIG11c3Qg
cmV0dXJuIGEgcHJvbWlzZSwgYnV0IGl0IHJldHVybmVkICIgKyBwcm9taXNlLCBpc1RoZW5hYmxl
KHByb21pc2UpKTsKLQotICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbihhZGFwdGVy
UGF5bG9hZCkgewotICAgICAgICB2YXIgcGF5bG9hZDsKLQotICAgICAgICBpZiAoYWRhcHRlclBh
eWxvYWQpIHsKLSAgICAgICAgICBwYXlsb2FkID0gc2VyaWFsaXplci5leHRyYWN0KHN0b3JlLCB0
eXBlLCBhZGFwdGVyUGF5bG9hZCwgZ2V0KHJlY29yZCwgJ2lkJyksIG9wZXJhdGlvbik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcGF5bG9hZCA9IGFkYXB0ZXJQYXlsb2FkOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3RvcmUuZGlkU2F2ZVJlY29yZChyZWNvcmQsIHBheWxvYWQpOwotICAg
ICAgICByZXR1cm4gcmVjb3JkOwotICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAg
IGlmIChyZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkRXJyb3IpIHsKLSAgICAgICAgICBzdG9yZS5y
ZWNvcmRXYXNJbnZhbGlkKHJlY29yZCwgcmVhc29uLmVycm9ycyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgc3RvcmUucmVjb3JkV2FzRXJyb3IocmVjb3JkLCByZWFzb24pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhyb3cgcmVhc29uOwotICAgICAgfSwgbGFiZWwpOwotICAgIH0KLQot
ICAgIF9fZXhwb3J0c19fLlN0b3JlID0gU3RvcmU7Ci0gICAgX19leHBvcnRzX18uUHJvbWlzZUFy
cmF5ID0gUHJvbWlzZUFycmF5OwotICAgIF9fZXhwb3J0c19fLlByb21pc2VPYmplY3QgPSBQcm9t
aXNlT2JqZWN0OwotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBTdG9yZTsKLSAgfSk7Ci1k
ZWZpbmUoImVtYmVyLWRhdGEvbGliL3RyYW5zZm9ybXMiLCAKLSAgWyIuL3RyYW5zZm9ybXMvYmFz
ZSIsIi4vdHJhbnNmb3Jtcy9udW1iZXIiLCIuL3RyYW5zZm9ybXMvZGF0ZSIsIi4vdHJhbnNmb3Jt
cy9zdHJpbmciLCIuL3RyYW5zZm9ybXMvYm9vbGVhbiIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBl
bmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJp
Y3QiOwotICAgIHZhciBUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICB2YXIgTnVtYmVyVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAg
dmFyIERhdGVUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICB2YXIg
U3RyaW5nVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIEJv
b2xlYW5UcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAgIF9fZXhw
b3J0c19fLlRyYW5zZm9ybSA9IFRyYW5zZm9ybTsKLSAgICBfX2V4cG9ydHNfXy5OdW1iZXJUcmFu
c2Zvcm0gPSBOdW1iZXJUcmFuc2Zvcm07Ci0gICAgX19leHBvcnRzX18uRGF0ZVRyYW5zZm9ybSA9
IERhdGVUcmFuc2Zvcm07Ci0gICAgX19leHBvcnRzX18uU3RyaW5nVHJhbnNmb3JtID0gU3RyaW5n
VHJhbnNmb3JtOwotICAgIF9fZXhwb3J0c19fLkJvb2xlYW5UcmFuc2Zvcm0gPSBCb29sZWFuVHJh
bnNmb3JtOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvdHJhbnNmb3Jtcy9iYXNlIiwg
Ci0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAvKioKLSAgICAgIFRoZSBgRFMuVHJhbnNmb3JtYCBjbGFzcyBpcyB1c2VkIHRv
IHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgbW9kZWwKLSAgICAgIGF0dHJpYnV0ZXMgd2hlbiB0
aGV5IGFyZSBzYXZlZCBvciBsb2FkZWQgZnJvbSBhbgotICAgICAgYWRhcHRlci4gU3ViY2xhc3Np
bmcgYERTLlRyYW5zZm9ybWAgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBjdXN0b20KLSAgICAgIGF0
dHJpYnV0ZXMuIEFsbCBzdWJjbGFzc2VzIG9mIGBEUy5UcmFuc2Zvcm1gIG11c3QgaW1wbGVtZW50
IGEKLSAgICAgIGBzZXJpYWxpemVgIGFuZCBhIGBkZXNlcmlhbGl6ZWAgbWV0aG9kLgotCi0gICAg
ICBFeGFtcGxlCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8vIENvbnZlcnRzIGNlbnRp
Z3JhZGUgaW4gdGhlIEpTT04gdG8gZmFocmVuaGVpdCBpbiB0aGUgYXBwCi0gICAgICBBcHAuVGVt
cGVyYXR1cmVUcmFuc2Zvcm0gPSBEUy5UcmFuc2Zvcm0uZXh0ZW5kKHsKLSAgICAgICAgZGVzZXJp
YWxpemU6IGZ1bmN0aW9uKHNlcmlhbGl6ZWQpIHsKLSAgICAgICAgICByZXR1cm4gKHNlcmlhbGl6
ZWQgKiAgMS44KSArIDMyOwotICAgICAgICB9LAotICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9u
KGRlc2VyaWFsaXplZCkgewotICAgICAgICAgIHJldHVybiAoZGVzZXJpYWxpemVkIC0gMzIpIC8g
MS44OwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBVc2FnZQotCi0g
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYXR0ciA9IERTLmF0dHI7Ci0gICAgICBBcHAu
UmVxdWlyZW1lbnQgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBuYW1lOiBhdHRyKCdzdHJp
bmcnKSwKLSAgICAgICAgb3B0aW9uc0FycmF5OiBhdHRyKCdyYXcnKQotICAgICAgfSk7Ci0gICAg
ICBgYGAKLQotICAgICAgQGNsYXNzIFRyYW5zZm9ybQotICAgICAgQG5hbWVzcGFjZSBEUwotICAg
ICAqLwotICAgIHZhciBUcmFuc2Zvcm0gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIC8q
KgotICAgICAgICBXaGVuIGdpdmVuIGEgZGVzZXJpYWxpemVkIHZhbHVlIGZyb20gYSByZWNvcmQg
YXR0cmlidXRlIHRoaXMKLSAgICAgICAgbWV0aG9kIG11c3QgcmV0dXJuIHRoZSBzZXJpYWxpemVk
IHZhbHVlLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJpYWxpemVkKSB7Ci0gICAgICAgICAgcmV0dXJu
IEVtYmVyLmlzRW1wdHkoZGVzZXJpYWxpemVkKSA/IG51bGwgOiBOdW1iZXIoZGVzZXJpYWxpemVk
KTsKLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZQot
ICAgICAgICBAcGFyYW0gZGVzZXJpYWxpemVkIFRoZSBkZXNlcmlhbGl6ZWQgdmFsdWUKLSAgICAg
ICAgQHJldHVybiBUaGUgc2VyaWFsaXplZCB2YWx1ZQotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6
ZTogRW1iZXIucmVxdWlyZWQoKSwKLQotICAgICAgLyoqCi0gICAgICAgIFdoZW4gZ2l2ZW4gYSBz
ZXJpYWxpemUgdmFsdWUgZnJvbSBhIEpTT04gb2JqZWN0IHRoaXMgbWV0aG9kIG11c3QKLSAgICAg
ICAgcmV0dXJuIHRoZSBkZXNlcmlhbGl6ZWQgdmFsdWUgZm9yIHRoZSByZWNvcmQgYXR0cmlidXRl
LgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIGRl
c2VyaWFsaXplOiBmdW5jdGlvbihzZXJpYWxpemVkKSB7Ci0gICAgICAgICAgcmV0dXJuIGVtcHR5
KHNlcmlhbGl6ZWQpID8gbnVsbCA6IE51bWJlcihzZXJpYWxpemVkKTsKLSAgICAgICAgfQotICAg
ICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIGRlc2VyaWFsaXplCi0gICAgICAgIEBwYXJhbSBz
ZXJpYWxpemVkIFRoZSBzZXJpYWxpemVkIHZhbHVlCi0gICAgICAgIEByZXR1cm4gVGhlIGRlc2Vy
aWFsaXplZCB2YWx1ZQotICAgICAgKi8KLSAgICAgIGRlc2VyaWFsaXplOiBFbWJlci5yZXF1aXJl
ZCgpCi0KLSAgICB9KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBUcmFuc2Zvcm07
Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi90cmFuc2Zvcm1zL2Jvb2xlYW4iLCAKLSAg
WyIuL2Jhc2UiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBv
cnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIFRyYW5zZm9ybSA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBUaGUgYERTLkJvb2xlYW5UcmFu
c2Zvcm1gIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZQotICAgICAg
Ym9vbGVhbiBhdHRyaWJ1dGVzIG9uIEVtYmVyIERhdGEgcmVjb3JkIG9iamVjdHMuIFRoaXMgdHJh
bnNmb3JtIGlzCi0gICAgICB1c2VkIHdoZW4gYGJvb2xlYW5gIGlzIHBhc3NlZCBhcyB0aGUgdHlw
ZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAgICBbRFMuYXR0cl0oLi4vLi4vZGF0YSNtZXRob2RfYXR0
cikgZnVuY3Rpb24uCi0KLSAgICAgIFVzYWdlCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
IHZhciBhdHRyID0gRFMuYXR0cjsKLSAgICAgIEFwcC5Vc2VyID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICAgICAgaXNBZG1pbjogYXR0cignYm9vbGVhbicpLAotICAgICAgICBuYW1lOiBhdHRyKCdz
dHJpbmcnKSwKLSAgICAgICAgZW1haWw6IGF0dHIoJ3N0cmluZycpCi0gICAgICB9KTsKLSAgICAg
IGBgYAotCi0gICAgICBAY2xhc3MgQm9vbGVhblRyYW5zZm9ybQotICAgICAgQGV4dGVuZHMgRFMu
VHJhbnNmb3JtCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICovCi0gICAgdmFyIEJvb2xlYW5U
cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZXh0ZW5kKHsKLSAgICAgIGRlc2VyaWFsaXplOiBmdW5jdGlv
bihzZXJpYWxpemVkKSB7Ci0gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHNlcmlhbGl6ZWQ7Ci0K
LSAgICAgICAgaWYgKHR5cGUgPT09ICJib29sZWFuIikgewotICAgICAgICAgIHJldHVybiBzZXJp
YWxpemVkOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAg
ICAgcmV0dXJuIHNlcmlhbGl6ZWQubWF0Y2goL150cnVlJHxedCR8XjEkL2kpICE9PSBudWxsOwot
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgcmV0dXJu
IHNlcmlhbGl6ZWQgPT09IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKGRl
c2VyaWFsaXplZCkgewotICAgICAgICByZXR1cm4gQm9vbGVhbihkZXNlcmlhbGl6ZWQpOwotICAg
ICAgfQotICAgIH0pOwotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBCb29sZWFuVHJhbnNm
b3JtOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvdHJhbnNmb3Jtcy9kYXRlIiwgCi0g
IFsiLi9iYXNlIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhw
b3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgVGhlIGBEUy5EYXRl
VHJhbnNmb3JtYCBjbGFzcyBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUKLSAg
ICAgIGRhdGUgYXR0cmlidXRlcyBvbiBFbWJlciBEYXRhIHJlY29yZCBvYmplY3RzLiBUaGlzIHRy
YW5zZm9ybSBpcyB1c2VkCi0gICAgICB3aGVuIGBkYXRlYCBpcyBwYXNzZWQgYXMgdGhlIHR5cGUg
cGFyYW1ldGVyIHRvIHRoZQotICAgICAgW0RTLmF0dHJdKC4uLy4uL2RhdGEjbWV0aG9kX2F0dHIp
IGZ1bmN0aW9uLgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYXR0ciA9IERTLmF0
dHI7Ci0gICAgICBBcHAuU2NvcmUgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICB2YWx1ZTog
YXR0cignbnVtYmVyJyksCi0gICAgICAgIHBsYXllcjogRFMuYmVsb25nc1RvKCdwbGF5ZXInKSwK
LSAgICAgICAgZGF0ZTogYXR0cignZGF0ZScpCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAg
ICBAY2xhc3MgRGF0ZVRyYW5zZm9ybQotICAgICAgQGV4dGVuZHMgRFMuVHJhbnNmb3JtCi0gICAg
ICBAbmFtZXNwYWNlIERTCi0gICAgICovCi0gICAgdmFyIFRyYW5zZm9ybSA9IF9fZGVwZW5kZW5j
eTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBEYXRlVHJhbnNmb3JtID0gVHJhbnNmb3JtLmV4dGVu
ZCh7Ci0KLSAgICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbihzZXJpYWxpemVkKSB7Ci0gICAgICAg
IHZhciB0eXBlID0gdHlwZW9mIHNlcmlhbGl6ZWQ7Ci0KLSAgICAgICAgaWYgKHR5cGUgPT09ICJz
dHJpbmciKSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKEVtYmVyLkRhdGUucGFyc2Uoc2Vy
aWFsaXplZCkpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJudW1iZXIiKSB7Ci0gICAg
ICAgICAgcmV0dXJuIG5ldyBEYXRlKHNlcmlhbGl6ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHNl
cmlhbGl6ZWQgPT09IG51bGwgfHwgc2VyaWFsaXplZCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAg
ICAgLy8gaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhLAotICAgICAgICAg
IC8vIHJldHVybiB1bmRlZmluZWQsIG5vdCBudWxsLgotICAgICAgICAgIHJldHVybiBzZXJpYWxp
emVkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9
Ci0gICAgICB9LAotCi0gICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKGRhdGUpIHsKLSAgICAgICAg
aWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7Ci0gICAgICAgICAgdmFyIGRheXMgPSBbIlN1biIs
ICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdOwotICAgICAgICAgIHZh
ciBtb250aHMgPSBbIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1
bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIl07Ci0KLSAgICAgICAgICB2YXIg
cGFkID0gZnVuY3Rpb24obnVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVtIDwgMTAgPyAiMCIr
bnVtIDogIiIrbnVtOwotICAgICAgICAgIH07Ci0KLSAgICAgICAgICB2YXIgdXRjWWVhciA9IGRh
dGUuZ2V0VVRDRnVsbFllYXIoKSwKLSAgICAgICAgICAgICAgdXRjTW9udGggPSBkYXRlLmdldFVU
Q01vbnRoKCksCi0gICAgICAgICAgICAgIHV0Y0RheU9mTW9udGggPSBkYXRlLmdldFVUQ0RhdGUo
KSwKLSAgICAgICAgICAgICAgdXRjRGF5ID0gZGF0ZS5nZXRVVENEYXkoKSwKLSAgICAgICAgICAg
ICAgdXRjSG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCksCi0gICAgICAgICAgICAgIHV0Y01pbnV0
ZXMgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKSwKLSAgICAgICAgICAgICAgdXRjU2Vjb25kcyA9IGRh
dGUuZ2V0VVRDU2Vjb25kcygpOwotCi0KLSAgICAgICAgICB2YXIgZGF5T2ZXZWVrID0gZGF5c1t1
dGNEYXldOwotICAgICAgICAgIHZhciBkYXlPZk1vbnRoID0gcGFkKHV0Y0RheU9mTW9udGgpOwot
ICAgICAgICAgIHZhciBtb250aCA9IG1vbnRoc1t1dGNNb250aF07Ci0KLSAgICAgICAgICByZXR1
cm4gZGF5T2ZXZWVrICsgIiwgIiArIGRheU9mTW9udGggKyAiICIgKyBtb250aCArICIgIiArIHV0
Y1llYXIgKyAiICIgKwotICAgICAgICAgICAgICAgICBwYWQodXRjSG91cnMpICsgIjoiICsgcGFk
KHV0Y01pbnV0ZXMpICsgIjoiICsgcGFkKHV0Y1NlY29uZHMpICsgIiBHTVQiOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9IAotCi0g
ICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRGF0ZVRyYW5zZm9ybTsKLSAg
fSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3RyYW5zZm9ybXMvbnVtYmVyIiwgCi0gIFsiLi9i
YXNlIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLQotICAgIHZhciBlbXB0eSA9IEVtYmVyLmlzRW1wdHk7Ci0KLSAgICAv
KioKLSAgICAgIFRoZSBgRFMuTnVtYmVyVHJhbnNmb3JtYCBjbGFzcyBpcyB1c2VkIHRvIHNlcmlh
bGl6ZSBhbmQgZGVzZXJpYWxpemUKLSAgICAgIG51bWVyaWMgYXR0cmlidXRlcyBvbiBFbWJlciBE
YXRhIHJlY29yZCBvYmplY3RzLiBUaGlzIHRyYW5zZm9ybSBpcwotICAgICAgdXNlZCB3aGVuIGBu
dW1iZXJgIGlzIHBhc3NlZCBhcyB0aGUgdHlwZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAgICBbRFMu
YXR0cl0oLi4vLi4vZGF0YSNtZXRob2RfYXR0cikgZnVuY3Rpb24uCi0KLSAgICAgIFVzYWdlCi0K
LSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBhdHRyID0gRFMuYXR0cjsKLSAgICAgIEFw
cC5TY29yZSA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIHZhbHVlOiBhdHRyKCdudW1iZXIn
KSwKLSAgICAgICAgcGxheWVyOiBEUy5iZWxvbmdzVG8oJ3BsYXllcicpLAotICAgICAgICBkYXRl
OiBhdHRyKCdkYXRlJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBOdW1i
ZXJUcmFuc2Zvcm0KLSAgICAgIEBleHRlbmRzIERTLlRyYW5zZm9ybQotICAgICAgQG5hbWVzcGFj
ZSBEUwotICAgICAqLwotICAgIHZhciBOdW1iZXJUcmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZXh0ZW5k
KHsKLQotICAgICAgZGVzZXJpYWxpemU6IGZ1bmN0aW9uKHNlcmlhbGl6ZWQpIHsKLSAgICAgICAg
cmV0dXJuIGVtcHR5KHNlcmlhbGl6ZWQpID8gbnVsbCA6IE51bWJlcihzZXJpYWxpemVkKTsKLSAg
ICAgIH0sCi0KLSAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJpYWxpemVkKSB7Ci0gICAg
ICAgIHJldHVybiBlbXB0eShkZXNlcmlhbGl6ZWQpID8gbnVsbCA6IE51bWJlcihkZXNlcmlhbGl6
ZWQpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE51
bWJlclRyYW5zZm9ybTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3RyYW5zZm9ybXMv
c3RyaW5nIiwgCi0gIFsiLi9iYXNlIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBUcmFuc2Zv
cm0gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICB2YXIgbm9uZSA9IEVtYmVyLmlz
Tm9uZTsKLQotICAgIC8qKgotICAgICAgVGhlIGBEUy5TdHJpbmdUcmFuc2Zvcm1gIGNsYXNzIGlz
IHVzZWQgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZQotICAgICAgc3RyaW5nIGF0dHJpYnV0
ZXMgb24gRW1iZXIgRGF0YSByZWNvcmQgb2JqZWN0cy4gVGhpcyB0cmFuc2Zvcm0gaXMKLSAgICAg
IHVzZWQgd2hlbiBgc3RyaW5nYCBpcyBwYXNzZWQgYXMgdGhlIHR5cGUgcGFyYW1ldGVyIHRvIHRo
ZQotICAgICAgW0RTLmF0dHJdKC4uLy4uL2RhdGEjbWV0aG9kX2F0dHIpIGZ1bmN0aW9uLgotCi0g
ICAgICBVc2FnZQotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYXR0ciA9IERTLmF0
dHI7Ci0gICAgICBBcHAuVXNlciA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIGlzQWRtaW46
IGF0dHIoJ2Jvb2xlYW4nKSwKLSAgICAgICAgbmFtZTogYXR0cignc3RyaW5nJyksCi0gICAgICAg
IGVtYWlsOiBhdHRyKCdzdHJpbmcnKQotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgQGNs
YXNzIFN0cmluZ1RyYW5zZm9ybQotICAgICAgQGV4dGVuZHMgRFMuVHJhbnNmb3JtCi0gICAgICBA
bmFtZXNwYWNlIERTCi0gICAgICovCi0gICAgdmFyIFN0cmluZ1RyYW5zZm9ybSA9IFRyYW5zZm9y
bS5leHRlbmQoewotCi0gICAgICBkZXNlcmlhbGl6ZTogZnVuY3Rpb24oc2VyaWFsaXplZCkgewot
ICAgICAgICByZXR1cm4gbm9uZShzZXJpYWxpemVkKSA/IG51bGwgOiBTdHJpbmcoc2VyaWFsaXpl
ZCk7Ci0gICAgICB9LAotCi0gICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKGRlc2VyaWFsaXplZCkg
ewotICAgICAgICByZXR1cm4gbm9uZShkZXNlcmlhbGl6ZWQpID8gbnVsbCA6IFN0cmluZyhkZXNl
cmlhbGl6ZWQpOwotICAgICAgfQotCi0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVs
dCJdID0gU3RyaW5nVHJhbnNmb3JtOwotICB9KTsKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xp
Yi9leHQvc3RyaW5nIiwgCi0gIFsiLi4vc3lzdGVtL3N0cmluZyJdLAotICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIHBsdXJhbGl6ZSA9IF9f
ZGVwZW5kZW5jeTFfXy5wbHVyYWxpemU7Ci0gICAgdmFyIHNpbmd1bGFyaXplID0gX19kZXBlbmRl
bmN5MV9fLnNpbmd1bGFyaXplOwotCi0gICAgaWYgKEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID09
PSB0cnVlIHx8IEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLlN0cmluZykgewotICAgICAgLyoqCi0g
ICAgICAgIFNlZSB7eyNjcm9zc0xpbmsgIkVtYmVyLlN0cmluZy9wbHVyYWxpemUifX17ey9jcm9z
c0xpbmt9fQotCi0gICAgICAgIEBtZXRob2QgcGx1cmFsaXplCi0gICAgICAgIEBmb3IgU3RyaW5n
Ci0gICAgICAqLwotICAgICAgU3RyaW5nLnByb3RvdHlwZS5wbHVyYWxpemUgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIHBsdXJhbGl6ZSh0aGlzKTsKLSAgICAgIH07Ci0KLSAgICAgIC8q
KgotICAgICAgICBTZWUge3sjY3Jvc3NMaW5rICJFbWJlci5TdHJpbmcvc2luZ3VsYXJpemUifX17
ey9jcm9zc0xpbmt9fQotCi0gICAgICAgIEBtZXRob2Qgc2luZ3VsYXJpemUKLSAgICAgICAgQGZv
ciBTdHJpbmcKLSAgICAgICovCi0gICAgICBTdHJpbmcucHJvdG90eXBlLnNpbmd1bGFyaXplID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBzaW5ndWxhcml6ZSh0aGlzKTsKLSAgICAgIH07
Ci0gICAgfQotICB9KTsKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9tYWluIiwgCi0gIFsi
Li9zeXN0ZW0iLCIuL2V4dC9zdHJpbmciLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICB2YXIgSW5mbGVjdG9yID0gX19kZXBlbmRlbmN5MV9fLkluZmxlY3RvcjsKLSAgICB2
YXIgZGVmYXVsdFJ1bGVzID0gX19kZXBlbmRlbmN5MV9fLmRlZmF1bHRSdWxlczsKLSAgICB2YXIg
cGx1cmFsaXplID0gX19kZXBlbmRlbmN5MV9fLnBsdXJhbGl6ZTsKLSAgICB2YXIgc2luZ3VsYXJp
emUgPSBfX2RlcGVuZGVuY3kxX18uc2luZ3VsYXJpemU7Ci0KLSAgICBJbmZsZWN0b3IuZGVmYXVs
dFJ1bGVzID0gZGVmYXVsdFJ1bGVzOwotICAgIEVtYmVyLkluZmxlY3RvciAgICAgICAgPSBJbmZs
ZWN0b3I7Ci0KLSAgICBFbWJlci5TdHJpbmcucGx1cmFsaXplICAgPSBwbHVyYWxpemU7Ci0gICAg
RW1iZXIuU3RyaW5nLnNpbmd1bGFyaXplID0gc2luZ3VsYXJpemU7Ci0KLQotICAgIF9fZXhwb3J0
c19fWyJkZWZhdWx0Il0gPSBJbmZsZWN0b3I7Ci0KLSAgICBfX2V4cG9ydHNfXy5wbHVyYWxpemUg
PSBwbHVyYWxpemU7Ci0gICAgX19leHBvcnRzX18uc2luZ3VsYXJpemUgPSBzaW5ndWxhcml6ZTsK
LSAgfSk7Ci1kZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtIiwgCi0gIFsiLi9zeXN0
ZW0vaW5mbGVjdG9yIiwiLi9zeXN0ZW0vc3RyaW5nIiwiLi9zeXN0ZW0vaW5mbGVjdGlvbnMiLCJl
eHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZh
ciBJbmZsZWN0b3IgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgIHZhciBwbHVy
YWxpemUgPSBfX2RlcGVuZGVuY3kyX18ucGx1cmFsaXplOwotICAgIHZhciBzaW5ndWxhcml6ZSA9
IF9fZGVwZW5kZW5jeTJfXy5zaW5ndWxhcml6ZTsKLQotICAgIHZhciBkZWZhdWx0UnVsZXMgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgIAotICAgIEluZmxlY3Rvci5pbmZsZWN0
b3IgPSBuZXcgSW5mbGVjdG9yKGRlZmF1bHRSdWxlcyk7Ci0gICAgCi0gICAgX19leHBvcnRzX18u
SW5mbGVjdG9yID0gSW5mbGVjdG9yOwotICAgIF9fZXhwb3J0c19fLnNpbmd1bGFyaXplID0gc2lu
Z3VsYXJpemU7Ci0gICAgX19leHBvcnRzX18ucGx1cmFsaXplID0gcGx1cmFsaXplOwotICAgIF9f
ZXhwb3J0c19fLmRlZmF1bHRSdWxlcyA9IGRlZmF1bHRSdWxlczsKLSAgfSk7Ci1kZWZpbmUoImVt
YmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL2luZmxlY3Rpb25zIiwgCi0gIFsiZXhwb3J0cyJdLAot
ICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgZGVm
YXVsdFJ1bGVzID0gewotICAgICAgcGx1cmFsczogWwotICAgICAgICBbLyQvLCAncyddLAotICAg
ICAgICBbL3MkL2ksICdzJ10sCi0gICAgICAgIFsvXihheHx0ZXN0KWlzJC9pLCAnJDFlcyddLAot
ICAgICAgICBbLyhvY3RvcHx2aXIpdXMkL2ksICckMWknXSwKLSAgICAgICAgWy8ob2N0b3B8dmly
KWkkL2ksICckMWknXSwKLSAgICAgICAgWy8oYWxpYXN8c3RhdHVzKSQvaSwgJyQxZXMnXSwKLSAg
ICAgICAgWy8oYnUpcyQvaSwgJyQxc2VzJ10sCi0gICAgICAgIFsvKGJ1ZmZhbHx0b21hdClvJC9p
LCAnJDFvZXMnXSwKLSAgICAgICAgWy8oW3RpXSl1bSQvaSwgJyQxYSddLAotICAgICAgICBbLyhb
dGldKWEkL2ksICckMWEnXSwKLSAgICAgICAgWy9zaXMkL2ksICdzZXMnXSwKLSAgICAgICAgWy8o
PzooW15mXSlmZXwoW2xyXSlmKSQvaSwgJyQxJDJ2ZXMnXSwKLSAgICAgICAgWy8oaGl2ZSkkL2ks
ICckMXMnXSwKLSAgICAgICAgWy8oW15hZWlvdXldfHF1KXkkL2ksICckMWllcyddLAotICAgICAg
ICBbLyh4fGNofHNzfHNoKSQvaSwgJyQxZXMnXSwKLSAgICAgICAgWy8obWF0cnx2ZXJ0fGluZCko
PzppeHxleCkkL2ksICckMWljZXMnXSwKLSAgICAgICAgWy9eKG18bClvdXNlJC9pLCAnJDFpY2Un
XSwKLSAgICAgICAgWy9eKG18bClpY2UkL2ksICckMWljZSddLAotICAgICAgICBbL14ob3gpJC9p
LCAnJDFlbiddLAotICAgICAgICBbL14ob3hlbikkL2ksICckMSddLAotICAgICAgICBbLyhxdWl6
KSQvaSwgJyQxemVzJ10KLSAgICAgIF0sCi0KLSAgICAgIHNpbmd1bGFyOiBbCi0gICAgICAgIFsv
cyQvaSwgJyddLAotICAgICAgICBbLyhzcykkL2ksICckMSddLAotICAgICAgICBbLyhuKWV3cyQv
aSwgJyQxZXdzJ10sCi0gICAgICAgIFsvKFt0aV0pYSQvaSwgJyQxdW0nXSwKLSAgICAgICAgWy8o
KGEpbmFseXwoYilhfChkKWlhZ25vfChwKWFyZW50aGV8KHApcm9nbm98KHMpeW5vcHwodCloZSko
c2lzfHNlcykkL2ksICckMXNpcyddLAotICAgICAgICBbLyheYW5hbHkpKHNpc3xzZXMpJC9pLCAn
JDFzaXMnXSwKLSAgICAgICAgWy8oW15mXSl2ZXMkL2ksICckMWZlJ10sCi0gICAgICAgIFsvKGhp
dmUpcyQvaSwgJyQxJ10sCi0gICAgICAgIFsvKHRpdmUpcyQvaSwgJyQxJ10sCi0gICAgICAgIFsv
KFtscl0pdmVzJC9pLCAnJDFmJ10sCi0gICAgICAgIFsvKFteYWVpb3V5XXxxdSlpZXMkL2ksICck
MXknXSwKLSAgICAgICAgWy8ocyllcmllcyQvaSwgJyQxZXJpZXMnXSwKLSAgICAgICAgWy8obSlv
dmllcyQvaSwgJyQxb3ZpZSddLAotICAgICAgICBbLyh4fGNofHNzfHNoKWVzJC9pLCAnJDEnXSwK
LSAgICAgICAgWy9eKG18bClpY2UkL2ksICckMW91c2UnXSwKLSAgICAgICAgWy8oYnVzKShlcyk/
JC9pLCAnJDEnXSwKLSAgICAgICAgWy8obyllcyQvaSwgJyQxJ10sCi0gICAgICAgIFsvKHNob2Up
cyQvaSwgJyQxJ10sCi0gICAgICAgIFsvKGNyaXN8dGVzdCkoaXN8ZXMpJC9pLCAnJDFpcyddLAot
ICAgICAgICBbL14oYSl4W2llXXMkL2ksICckMXhpcyddLAotICAgICAgICBbLyhvY3RvcHx2aXIp
KHVzfGkpJC9pLCAnJDF1cyddLAotICAgICAgICBbLyhhbGlhc3xzdGF0dXMpKGVzKT8kL2ksICck
MSddLAotICAgICAgICBbL14ob3gpZW4vaSwgJyQxJ10sCi0gICAgICAgIFsvKHZlcnR8aW5kKWlj
ZXMkL2ksICckMWV4J10sCi0gICAgICAgIFsvKG1hdHIpaWNlcyQvaSwgJyQxaXgnXSwKLSAgICAg
ICAgWy8ocXVpeil6ZXMkL2ksICckMSddLAotICAgICAgICBbLyhkYXRhYmFzZSlzJC9pLCAnJDEn
XQotICAgICAgXSwKLQotICAgICAgaXJyZWd1bGFyUGFpcnM6IFsKLSAgICAgICAgWydwZXJzb24n
LCAncGVvcGxlJ10sCi0gICAgICAgIFsnbWFuJywgJ21lbiddLAotICAgICAgICBbJ2NoaWxkJywg
J2NoaWxkcmVuJ10sCi0gICAgICAgIFsnc2V4JywgJ3NleGVzJ10sCi0gICAgICAgIFsnbW92ZScs
ICdtb3ZlcyddLAotICAgICAgICBbJ2NvdycsICdraW5lJ10sCi0gICAgICAgIFsnem9tYmllJywg
J3pvbWJpZXMnXQotICAgICAgXSwKLQotICAgICAgdW5jb3VudGFibGU6IFsKLSAgICAgICAgJ2Vx
dWlwbWVudCcsCi0gICAgICAgICdpbmZvcm1hdGlvbicsCi0gICAgICAgICdyaWNlJywKLSAgICAg
ICAgJ21vbmV5JywKLSAgICAgICAgJ3NwZWNpZXMnLAotICAgICAgICAnc2VyaWVzJywKLSAgICAg
ICAgJ2Zpc2gnLAotICAgICAgICAnc2hlZXAnLAotICAgICAgICAnamVhbnMnLAotICAgICAgICAn
cG9saWNlJwotICAgICAgXQotICAgIH07Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0g
ZGVmYXVsdFJ1bGVzOwotICB9KTsKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0v
aW5mbGVjdG9yIiwgCi0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgQkxBTktfUkVHRVggPSAvXlxzKiQvOwotCi0gICAg
ZnVuY3Rpb24gbG9hZFVuY291bnRhYmxlKHJ1bGVzLCB1bmNvdW50YWJsZSkgewotICAgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IHVuY291bnRhYmxlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIHJ1bGVzLnVuY291bnRhYmxlW3VuY291bnRhYmxlW2ldLnRvTG93ZXJDYXNl
KCldID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBsb2FkSXJyZWd1bGFy
KHJ1bGVzLCBpcnJlZ3VsYXJQYWlycykgewotICAgICAgdmFyIHBhaXI7Ci0KLSAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSBpcnJlZ3VsYXJQYWlycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICBwYWlyID0gaXJyZWd1bGFyUGFpcnNbaV07Ci0KLSAgICAgICAgcnVsZXMu
aXJyZWd1bGFyW3BhaXJbMF0udG9Mb3dlckNhc2UoKV0gPSBwYWlyWzFdOwotICAgICAgICBydWxl
cy5pcnJlZ3VsYXJJbnZlcnNlW3BhaXJbMV0udG9Mb3dlckNhc2UoKV0gPSBwYWlyWzBdOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAgSW5mbGVjdG9yLkVtYmVyIHByb3ZpZGVzIGEg
bWVjaGFuaXNtIGZvciBzdXBwbHlpbmcgaW5mbGVjdGlvbiBydWxlcyBmb3IgeW91cgotICAgICAg
YXBwbGljYXRpb24uIEVtYmVyIGluY2x1ZGVzIGEgZGVmYXVsdCBzZXQgb2YgaW5mbGVjdGlvbiBy
dWxlcywgYW5kIHByb3ZpZGVzIGFuCi0gICAgICBBUEkgZm9yIHByb3ZpZGluZyBhZGRpdGlvbmFs
IHJ1bGVzLgotCi0gICAgICBFeGFtcGxlczoKLQotICAgICAgQ3JlYXRpbmcgYW4gaW5mbGVjdG9y
IHdpdGggbm8gcnVsZXMuCi0KLSAgICAgIGBgYGpzCi0gICAgICB2YXIgaW5mbGVjdG9yID0gbmV3
IEVtYmVyLkluZmxlY3RvcigpOwotICAgICAgYGBgCi0KLSAgICAgIENyZWF0aW5nIGFuIGluZmxl
Y3RvciB3aXRoIHRoZSBkZWZhdWx0IGVtYmVyIHJ1bGVzZXQuCi0KLSAgICAgIGBgYGpzCi0gICAg
ICB2YXIgaW5mbGVjdG9yID0gbmV3IEVtYmVyLkluZmxlY3RvcihFbWJlci5JbmZsZWN0b3IuZGVm
YXVsdFJ1bGVzKTsKLQotICAgICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnY293Jyk7IC8vPT4gJ2tp
bmUnCi0gICAgICBpbmZsZWN0b3Iuc2luZ3VsYXJpemUoJ2tpbmUnKTsgLy89PiAnY293JwotICAg
ICAgYGBgCi0KLSAgICAgIENyZWF0aW5nIGFuIGluZmxlY3RvciBhbmQgYWRkaW5nIHJ1bGVzIGxh
dGVyLgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgaW5mbGVjdG9yID0gRW1iZXIu
SW5mbGVjdG9yLmluZmxlY3RvcjsKLQotICAgICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnYWR2aWNl
Jyk7IC8vID0+ICdhZHZpY2VzJwotICAgICAgaW5mbGVjdG9yLnVuY291bnRhYmxlKCdhZHZpY2Un
KTsKLSAgICAgIGluZmxlY3Rvci5wbHVyYWxpemUoJ2FkdmljZScpOyAvLyA9PiAnYWR2aWNlJwot
Ci0gICAgICBpbmZsZWN0b3IucGx1cmFsaXplKCdmb3JtdWxhJyk7IC8vID0+ICdmb3JtdWxhcycK
LSAgICAgIGluZmxlY3Rvci5pcnJlZ3VsYXIoJ2Zvcm11bGEnLCAnZm9ybXVsYWUnKTsKLSAgICAg
IGluZmxlY3Rvci5wbHVyYWxpemUoJ2Zvcm11bGEnKTsgLy8gPT4gJ2Zvcm11bGFlJwotCi0gICAg
ICAvLyB5b3Ugd291bGQgbm90IG5lZWQgdG8gYWRkIHRoZXNlIGFzIHRoZXkgYXJlIHRoZSBkZWZh
dWx0IHJ1bGVzCi0gICAgICBpbmZsZWN0b3IucGx1cmFsKC8kLywgJ3MnKTsKLSAgICAgIGluZmxl
Y3Rvci5zaW5ndWxhcigvcyQvaSwgJycpOwotICAgICAgYGBgCi0KLSAgICAgIENyZWF0aW5nIGFu
IGluZmxlY3RvciB3aXRoIGEgbm9uZGVmYXVsdCBydWxlc2V0LgotCi0gICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICB2YXIgcnVsZXMgPSB7Ci0gICAgICAgIHBsdXJhbHM6ICBbIC8kLywgJ3MnIF0s
Ci0gICAgICAgIHNpbmd1bGFyOiBbIC9ccyQvLCAnJyBdLAotICAgICAgICBpcnJlZ3VsYXJQYWly
czogWwotICAgICAgICAgIFsgJ2NvdycsICdraW5lJyBdCi0gICAgICAgIF0sCi0gICAgICAgIHVu
Y291bnRhYmxlOiBbICdmaXNoJyBdCi0gICAgICB9OwotCi0gICAgICB2YXIgaW5mbGVjdG9yID0g
bmV3IEVtYmVyLkluZmxlY3RvcihydWxlcyk7Ci0gICAgICBgYGAKLQotICAgICAgQGNsYXNzIElu
ZmxlY3RvcgotICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICovCi0gICAgZnVuY3Rpb24gSW5m
bGVjdG9yKHJ1bGVTZXQpIHsKLSAgICAgIHJ1bGVTZXQgPSBydWxlU2V0IHx8IHt9OwotICAgICAg
cnVsZVNldC51bmNvdW50YWJsZSA9IHJ1bGVTZXQudW5jb3VudGFibGUgfHwge307Ci0gICAgICBy
dWxlU2V0LmlycmVndWxhclBhaXJzID0gcnVsZVNldC5pcnJlZ3VsYXJQYWlycyB8fCB7fTsKLQot
ICAgICAgdmFyIHJ1bGVzID0gdGhpcy5ydWxlcyA9IHsKLSAgICAgICAgcGx1cmFsczogIHJ1bGVT
ZXQucGx1cmFscyB8fCBbXSwKLSAgICAgICAgc2luZ3VsYXI6IHJ1bGVTZXQuc2luZ3VsYXIgfHwg
W10sCi0gICAgICAgIGlycmVndWxhcjoge30sCi0gICAgICAgIGlycmVndWxhckludmVyc2U6IHt9
LAotICAgICAgICB1bmNvdW50YWJsZToge30KLSAgICAgIH07Ci0KLSAgICAgIGxvYWRVbmNvdW50
YWJsZShydWxlcywgcnVsZVNldC51bmNvdW50YWJsZSk7Ci0gICAgICBsb2FkSXJyZWd1bGFyKHJ1
bGVzLCBydWxlU2V0LmlycmVndWxhclBhaXJzKTsKLSAgICB9Ci0KLSAgICBJbmZsZWN0b3IucHJv
dG90eXBlID0gewotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgcGx1cmFsCi0gICAgICAgIEBw
YXJhbSB7UmVnRXhwfSByZWdleAotICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nCi0gICAg
ICAqLwotICAgICAgcGx1cmFsOiBmdW5jdGlvbihyZWdleCwgc3RyaW5nKSB7Ci0gICAgICAgIHRo
aXMucnVsZXMucGx1cmFscy5wdXNoKFtyZWdleCwgc3RyaW5nLnRvTG93ZXJDYXNlKCldKTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIHNpbmd1bGFyCi0gICAgICAgIEBw
YXJhbSB7UmVnRXhwfSByZWdleAotICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nCi0gICAg
ICAqLwotICAgICAgc2luZ3VsYXI6IGZ1bmN0aW9uKHJlZ2V4LCBzdHJpbmcpIHsKLSAgICAgICAg
dGhpcy5ydWxlcy5zaW5ndWxhci5wdXNoKFtyZWdleCwgc3RyaW5nLnRvTG93ZXJDYXNlKCldKTsK
LSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIHVuY291bnRhYmxlCi0gICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSByZWdleAotICAgICAgKi8KLSAgICAgIHVuY291bnRhYmxlOiBm
dW5jdGlvbihzdHJpbmcpIHsKLSAgICAgICAgbG9hZFVuY291bnRhYmxlKHRoaXMucnVsZXMsIFtz
dHJpbmcudG9Mb3dlckNhc2UoKV0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBt
ZXRob2QgaXJyZWd1bGFyCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzaW5ndWxhcgotICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gcGx1cmFsCi0gICAgICAqLwotICAgICAgaXJyZWd1bGFyOiBmdW5j
dGlvbiAoc2luZ3VsYXIsIHBsdXJhbCkgewotICAgICAgICBsb2FkSXJyZWd1bGFyKHRoaXMucnVs
ZXMsIFtbc2luZ3VsYXIsIHBsdXJhbF1dKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBAbWV0aG9kIHBsdXJhbGl6ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gd29yZAotICAgICAg
Ki8KLSAgICAgIHBsdXJhbGl6ZTogZnVuY3Rpb24od29yZCkgewotICAgICAgICByZXR1cm4gdGhp
cy5pbmZsZWN0KHdvcmQsIHRoaXMucnVsZXMucGx1cmFscywgdGhpcy5ydWxlcy5pcnJlZ3VsYXIp
OwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2Qgc2luZ3VsYXJpemUKLSAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHdvcmQKLSAgICAgICovCi0gICAgICBzaW5ndWxhcml6ZTog
ZnVuY3Rpb24od29yZCkgewotICAgICAgICByZXR1cm4gdGhpcy5pbmZsZWN0KHdvcmQsIHRoaXMu
cnVsZXMuc2luZ3VsYXIsICB0aGlzLnJ1bGVzLmlycmVndWxhckludmVyc2UpOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIEBwcm90ZWN0ZWQKLQotICAgICAgICBAbWV0aG9kIGluZmxl
Y3QKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHdvcmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9
IHR5cGVSdWxlcwotICAgICAgICBAcGFyYW0ge09iamVjdH0gaXJyZWd1bGFyCi0gICAgICAqLwot
ICAgICAgaW5mbGVjdDogZnVuY3Rpb24od29yZCwgdHlwZVJ1bGVzLCBpcnJlZ3VsYXIpIHsKLSAg
ICAgICAgdmFyIGluZmxlY3Rpb24sIHN1YnN0aXR1dGlvbiwgcmVzdWx0LCBsb3dlcmNhc2UsIGlz
QmxhbmssCi0gICAgICAgIGlzVW5jb3VudGFibGUsIGlzSXJyZWd1bGFyLCBpc0lycmVndWxhcklu
dmVyc2UsIHJ1bGU7Ci0KLSAgICAgICAgaXNCbGFuayA9IEJMQU5LX1JFR0VYLnRlc3Qod29yZCk7
Ci0KLSAgICAgICAgaWYgKGlzQmxhbmspIHsKLSAgICAgICAgICByZXR1cm4gd29yZDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGxvd2VyY2FzZSA9IHdvcmQudG9Mb3dlckNhc2UoKTsKLQotICAgICAg
ICBpc1VuY291bnRhYmxlID0gdGhpcy5ydWxlcy51bmNvdW50YWJsZVtsb3dlcmNhc2VdOwotCi0g
ICAgICAgIGlmIChpc1VuY291bnRhYmxlKSB7Ci0gICAgICAgICAgcmV0dXJuIHdvcmQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpc0lycmVndWxhciA9IGlycmVndWxhciAmJiBpcnJlZ3VsYXJbbG93
ZXJjYXNlXTsKLQotICAgICAgICBpZiAoaXNJcnJlZ3VsYXIpIHsKLSAgICAgICAgICByZXR1cm4g
aXNJcnJlZ3VsYXI7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gdHlwZVJ1bGVz
Lmxlbmd0aCwgbWluID0gMDsgaSA+IG1pbjsgaS0tKSB7Ci0gICAgICAgICAgIGluZmxlY3Rpb24g
PSB0eXBlUnVsZXNbaS0xXTsKLSAgICAgICAgICAgcnVsZSA9IGluZmxlY3Rpb25bMF07Ci0KLSAg
ICAgICAgICBpZiAocnVsZS50ZXN0KHdvcmQpKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbmZsZWN0aW9uID0gaW5mbGVjdGlvbiB8fCBb
XTsKLQotICAgICAgICBydWxlID0gaW5mbGVjdGlvblswXTsKLSAgICAgICAgc3Vic3RpdHV0aW9u
ID0gaW5mbGVjdGlvblsxXTsKLQotICAgICAgICByZXN1bHQgPSB3b3JkLnJlcGxhY2UocnVsZSwg
c3Vic3RpdHV0aW9uKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfQotICAgIH07
Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gSW5mbGVjdG9yOwotICB9KTsKLWRlZmlu
ZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vc3RyaW5nIiwgCi0gIFsiLi9pbmZsZWN0b3Ii
LCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsK
LSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIEluZmxlY3RvciA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgIHZhciBwbHVyYWxpemUgPSBmdW5jdGlvbih3b3JkKSB7Ci0gICAgICBy
ZXR1cm4gSW5mbGVjdG9yLmluZmxlY3Rvci5wbHVyYWxpemUod29yZCk7Ci0gICAgfTsKLQotICAg
IHZhciBzaW5ndWxhcml6ZSA9IGZ1bmN0aW9uKHdvcmQpIHsKLSAgICAgIHJldHVybiBJbmZsZWN0
b3IuaW5mbGVjdG9yLnNpbmd1bGFyaXplKHdvcmQpOwotICAgIH07Ci0KLSAgICBfX2V4cG9ydHNf
Xy5wbHVyYWxpemUgPSBwbHVyYWxpemU7Ci0gICAgX19leHBvcnRzX18uc2luZ3VsYXJpemUgPSBz
aW5ndWxhcml6ZTsKLSAgfSk7Ci1nbG9iYWwuRFMgPSByZXF1aXJlTW9kdWxlKCdlbWJlci1kYXRh
L2xpYi9tYWluJylbJ2RlZmF1bHQnXTsKLX0oRW1iZXIubG9va3VwKSk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92Mi9qcy9lbWJlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMv
ZW1iZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Zjc1NWJlZjM2MjgwMzIz
NTQ3YzNhNGIzMjk5ZTM1YzIzN2IzZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9lbWJl
ci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ4ODg2ICswLDAgQEAKLS8qIQotICogQG92ZXJ2aWV3
ICBFbWJlciAtIEphdmFTY3JpcHQgQXBwbGljYXRpb24gRnJhbWV3b3JrCi0gKiBAY29weXJpZ2h0
IENvcHlyaWdodCAyMDExLTIwMTQgVGlsZGUgSW5jLiBhbmQgY29udHJpYnV0b3JzCi0gKiAgICAg
ICAgICAgIFBvcnRpb25zIENvcHlyaWdodCAyMDA2LTIwMTEgU3Ryb2JlIEluYy4KLSAqICAgICAg
ICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IDIwMDgtMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlCi0gKiAg
ICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWIuY29tL2VtYmVyanMvZW1iZXIuanMvbWFz
dGVyL0xJQ0VOU0UKLSAqIEB2ZXJzaW9uICAgMS43LjAtYmV0YS40K3ByZS40YjZmZjE0MwotICov
Ci0KLShmdW5jdGlvbigpIHsKLSAgICB2YXIgZGVmaW5lLCByZXF1aXJlTW9kdWxlLCByZXF1aXJl
LCByZXF1aXJlanMsIEVtYmVyOwotCi0gICAgKGZ1bmN0aW9uKCkgewotICAgICAgICBFbWJlciA9
IHRoaXMuRW1iZXIgPSB0aGlzLkVtYmVyIHx8IHt9OwotICAgICAgICBpZiAodHlwZW9mIEVtYmVy
ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgRW1iZXIgPSB7fQotICAgICAgICB9Owot
Ci0gICAgICAgIGlmICh0eXBlb2YgRW1iZXIuX19sb2FkZXIgPT09ICd1bmRlZmluZWQnKSB7Ci0g
ICAgICAgICAgICB2YXIgcmVnaXN0cnkgPSB7fSwgc2VlbiA9IHt9OwotCi0gICAgICAgICAgICBk
ZWZpbmUgPSBmdW5jdGlvbihuYW1lLCBkZXBzLCBjYWxsYmFjaykgewotICAgICAgICAgICAgICAg
IHJlZ2lzdHJ5W25hbWVdID0gewotICAgICAgICAgICAgICAgICAgICBkZXBzOiBkZXBzLAotICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sgCi0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHJlcXVpcmVqcyA9IHJlcXVpcmUgPSByZXF1
aXJlTW9kdWxlID0gZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIGlmIChzZWVuLmhh
c093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWVuW25h
bWVdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZWVuW25hbWVdID0ge307
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5W25hbWVdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgbW9kdWxlICIgKyBuYW1lKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgbW9kID0gcmVnaXN0cnlb
bmFtZV0sCi0gICAgICAgICAgICAgICAgZGVwcyA9IG1vZC5kZXBzLAotICAgICAgICAgICAgICAg
IGNhbGxiYWNrID0gbW9kLmNhbGxiYWNrLAotICAgICAgICAgICAgICAgIHJlaWZpZWQgPSBbXSwK
LSAgICAgICAgICAgICAgICBleHBvcnRzOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBkZXBzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZGVwc1tpXSA9PT0gJ2V4cG9ydHMnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWlm
aWVkLnB1c2goZXhwb3J0cyA9IHt9KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlaWZpZWQucHVzaChyZXF1aXJlTW9kdWxlKHJlc29sdmUo
ZGVwc1tpXSkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIHJlaWZpZWQp
OwotICAgICAgICAgICAgICAgIHJldHVybiBzZWVuW25hbWVdID0gZXhwb3J0cyB8fCB2YWx1ZTsK
LQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmUoY2hpbGQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLmNoYXJBdCgwKSAhPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHBhcnRzID0gY2hpbGQuc3BsaXQoIi8iKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHBhcmVudEJhc2UgPSBuYW1lLnNwbGl0KCIvIikuc2xpY2UoMCwgLTEpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudEJhc2UucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRCYXNlLnB1c2gocGFydCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyZW50QmFzZS5qb2luKCIvIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIHJlcXVpcmVqcy5fZWFrX3NlZW4gPSByZWdpc3RyeTsKLQotICAg
ICAgICAgICAgRW1iZXIuX19sb2FkZXIgPSB7Ci0gICAgICAgICAgICAgICAgZGVmaW5lOiBkZWZp
bmUsCi0gICAgICAgICAgICAgICAgcmVxdWlyZTogcmVxdWlyZSwKLSAgICAgICAgICAgICAgICBy
ZWdpc3RyeTogcmVnaXN0cnkKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBkZWZpbmUgPSBFbWJlci5fX2xvYWRlci5kZWZpbmU7Ci0gICAgICAgICAgICByZXF1
aXJlanMgPSByZXF1aXJlID0gcmVxdWlyZU1vZHVsZSA9IEVtYmVyLl9fbG9hZGVyLnJlcXVpcmU7
Ci0gICAgICAgIH0KLSAgICB9KSgpOwotCi0gICAgZGVmaW5lKCJiYWNrYnVybmVyIiwKLSAgICBb
ImJhY2tidXJuZXIvdXRpbHMiLCAiYmFja2J1cm5lci9kZWZlcnJlZF9hY3Rpb25fcXVldWVzIiwg
ImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgVXRp
bHMgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERlZmVycmVkQWN0
aW9uUXVldWVzID0gX19kZXBlbmRlbmN5Ml9fLkRlZmVycmVkQWN0aW9uUXVldWVzOwotCi0gICAg
ICAgIHZhciBzbGljZSA9IFtdLnNsaWNlLAotICAgICAgICBwb3AgPSBbXS5wb3AsCi0gICAgICAg
IGVhY2ggPSBVdGlscy5lYWNoLAotICAgICAgICBpc1N0cmluZyA9IFV0aWxzLmlzU3RyaW5nLAot
ICAgICAgICBpc0Z1bmN0aW9uID0gVXRpbHMuaXNGdW5jdGlvbiwKLSAgICAgICAgaXNOdW1iZXIg
PSBVdGlscy5pc051bWJlciwKLSAgICAgICAgdGltZXJzID0gW10sCi0gICAgICAgIGdsb2JhbCA9
IHRoaXMsCi0gICAgICAgIE5VTUJFUiA9IC9cZCsvOwotCi0gICAgICAgIC8vIEluIElFIDYtOCwg
dHJ5L2ZpbmFsbHkgZG9lc24ndCB3b3JrIHdpdGhvdXQgYSBjYXRjaC4KLSAgICAgICAgLy8gVW5m
b3J0dW5hdGVseSwgdGhpcyBpcyBpbXBvc3NpYmxlIHRvIHRlc3QgZm9yIHNpbmNlIHdyYXBwaW5n
IGl0IGluIGEgcGFyZW50IHRyeS9jYXRjaCBkb2Vzbid0IHRyaWdnZXIgdGhlIGJ1Zy4KLSAgICAg
ICAgLy8gVGhpcyB0ZXN0cyBmb3IgYW5vdGhlciBicm9rZW4gdHJ5L2NhdGNoIGJlaGF2aW9yIHRo
YXQgb25seSBleGhpYml0cyBpbiB0aGUgc2FtZSB2ZXJzaW9ucyBvZiBJRS4KLSAgICAgICAgdmFy
IG5lZWRzSUVUcnlDYXRjaEZpeCA9IChmdW5jdGlvbihlLCB4KSB7Ci0gICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgIHgoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9Ci0gICAg
ICAgICAgICAvLyBqc2hpbnQgaWdub3JlOmxpbmUKLSAgICAgICAgICAgIHJldHVybiAhIWU7Ci0g
ICAgICAgIH0pKCk7Ci0KLSAgICAgICAgZnVuY3Rpb24gaXNDb2VyY2FibGVOdW1iZXIobnVtYmVy
KSB7Ci0gICAgICAgICAgICByZXR1cm4gaXNOdW1iZXIobnVtYmVyKSB8fCBOVU1CRVIudGVzdChu
dW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gQmFja2J1cm5lcihxdWV1ZU5h
bWVzLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB0aGlzLnF1ZXVlTmFtZXMgPSBxdWV1ZU5hbWVz
OwotICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICAgICAgICAg
IGlmICghdGhpcy5vcHRpb25zLmRlZmF1bHRRdWV1ZSkgewotICAgICAgICAgICAgICAgIHRoaXMu
b3B0aW9ucy5kZWZhdWx0UXVldWUgPSBxdWV1ZU5hbWVzWzBdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhpcy5pbnN0YW5jZVN0YWNrID0gW107Ci0gICAgICAgICAgICB0aGlzLl9kZWJv
dW5jZWVzID0gW107Ci0gICAgICAgICAgICB0aGlzLl90aHJvdHRsZXJzID0gW107Ci0gICAgICAg
IH0KLQotICAgICAgICBCYWNrYnVybmVyLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIHF1ZXVl
TmFtZXM6IG51bGwsCi0gICAgICAgICAgICBvcHRpb25zOiBudWxsLAotICAgICAgICAgICAgY3Vy
cmVudEluc3RhbmNlOiBudWxsLAotICAgICAgICAgICAgaW5zdGFuY2VTdGFjazogbnVsbCwKLQot
ICAgICAgICAgICAgYmVnaW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBvcHRp
b25zID0gdGhpcy5vcHRpb25zLAotICAgICAgICAgICAgICAgIG9uQmVnaW4gPSBvcHRpb25zICYm
IG9wdGlvbnMub25CZWdpbiwKLSAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gdGhp
cy5jdXJyZW50SW5zdGFuY2U7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNJbnN0YW5j
ZSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlU3RhY2sucHVzaChwcmV2aW91
c0luc3RhbmNlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmN1
cnJlbnRJbnN0YW5jZSA9IG5ldyBEZWZlcnJlZEFjdGlvblF1ZXVlcyh0aGlzLnF1ZXVlTmFtZXMs
IG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGlmIChvbkJlZ2luKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG9uQmVnaW4odGhpcy5jdXJyZW50SW5zdGFuY2UsIHByZXZpb3VzSW5zdGFuY2UpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVuZDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCi0g
ICAgICAgICAgICAgICAgb25FbmQgPSBvcHRpb25zICYmIG9wdGlvbnMub25FbmQsCi0gICAgICAg
ICAgICAgICAgY3VycmVudEluc3RhbmNlID0gdGhpcy5jdXJyZW50SW5zdGFuY2UsCi0gICAgICAg
ICAgICAgICAgbmV4dEluc3RhbmNlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIFByZXZl
bnQgZG91YmxlLWZpbmFsbHkgYnVnIGluIFNhZmFyaSA2LjAuMiBhbmQgaU9TIDYKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIGJ1ZyBhcHBlYXJzIHRvIGJlIHJlc29sdmVkIGluIFNhZmFyaSA2LjAu
NSBhbmQgaU9TIDcKLSAgICAgICAgICAgICAgICB2YXIgZmluYWxseUFscmVhZHlDYWxsZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
SW5zdGFuY2UuZmx1c2goKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZpbmFsbHlBbHJlYWR5Q2FsbGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaW5hbGx5QWxyZWFkeUNhbGxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY3VycmVudEluc3RhbmNlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuaW5zdGFuY2VTdGFjay5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXh0SW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlU3RhY2sucG9wKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5zdGFuY2UgPSBuZXh0SW5zdGFu
Y2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvbkVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRW5kKGN1cnJlbnRJ
bnN0YW5jZSwgbmV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIHJ1bjogZnVuY3Rpb24odGFyZ2V0LCBtZXRob2QgLyosIGFyZ3MgKi8KLSAgICAg
ICAgICAgICkgewotICAgICAgICAgICAgICAgIHZhciBvbkVycm9yID0gZ2V0T25FcnJvcih0aGlz
Lm9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5iZWdpbigpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFtZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0
OwotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhtZXRob2QpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1ldGhvZCA9IHRhcmdldFttZXRob2RdOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwotCi0gICAg
ICAgICAgICAgICAgLy8gZ3VhcmQgYWdhaW5zdCBTYWZhcmkgNidzIGRvdWJsZS1maW5hbGx5IGJ1
ZwotICAgICAgICAgICAgICAgIHZhciBkaWRGaW5hbGx5ID0gZmFsc2U7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAob25FcnJvcikgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
b25FcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWRpZEZpbmFsbHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWRGaW5hbGx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdz
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghZGlkRmluYWxseSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZp
bmFsbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZWZlcjogZnVuY3Rpb24o
cXVldWVOYW1lLCB0YXJnZXQsIG1ldGhvZCAvKiAsIGFyZ3MgKi8KLSAgICAgICAgICAgICkgewot
ICAgICAgICAgICAgICAgIGlmICghbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhv
ZCA9IHRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobWV0aG9kKSkgewotICAg
ICAgICAgICAgICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLkRFQlVHID8gbmV3IEVycm9y
KCkgOiB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGgg
PiAzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpIDogdW5kZWZpbmVkOwotICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5jdXJyZW50SW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQXV0b3J1bih0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuY3VycmVudEluc3RhbmNlLnNjaGVkdWxlKHF1ZXVlTmFtZSwgdGFyZ2V0LCBtZXRo
b2QsIGFyZ3MsIGZhbHNlLCBzdGFjayk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBk
ZWZlck9uY2U6IGZ1bmN0aW9uKHF1ZXVlTmFtZSwgdGFyZ2V0LCBtZXRob2QgLyogLCBhcmdzICov
Ci0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewotICAgICAg
ICAgICAgICAgICAgICBtZXRob2QgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdl
dCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlzU3Ry
aW5nKG1ldGhvZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0W21ldGhv
ZF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhp
cy5ERUJVRyA/IG5ldyBFcnJvcigpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgIGFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKSA6IHVuZGVm
aW5lZDsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEluc3RhbmNlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUF1dG9ydW4odGhpcyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbnN0YW5jZS5zY2hlZHVsZShxdWV1
ZU5hbWUsIHRhcmdldCwgbWV0aG9kLCBhcmdzLCB0cnVlLCBzdGFjayk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSwKLSAgICAgICAgICAgICAgICBsZW5n
dGggPSBhcmdzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBtZXRob2QsIHdhaXQsIHRhcmdldCwK
LSAgICAgICAgICAgICAgICBtZXRob2RPclRhcmdldCwgbWV0aG9kT3JXYWl0LCBtZXRob2RPckFy
Z3M7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMSkg
ewotICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdhaXQgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09
PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZE9yVGFyZ2V0ID0gYXJnc1swXTsKLSAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kT3JXYWl0ID0gYXJnc1sxXTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNGdW5jdGlvbihtZXRob2RPcldhaXQpIHx8IGlzRnVuY3Rpb24obWV0aG9k
T3JUYXJnZXRbbWV0aG9kT3JXYWl0XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IGFyZ3Mu
c2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzQ29lcmNhYmxlTnVtYmVyKG1ldGhvZE9yV2FpdCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdhaXQgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3YWl0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0g
YXJnc1thcmdzLmxlbmd0aCAtIDFdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvZXJj
YWJsZU51bWJlcihsYXN0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCA9IGFyZ3Mu
cG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3YWl0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIG1ldGhvZE9yVGFyZ2V0ID0gYXJnc1swXTsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9k
T3JBcmdzID0gYXJnc1sxXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbiht
ZXRob2RPckFyZ3MpIHx8IChpc1N0cmluZyhtZXRob2RPckFyZ3MpICYmCi0gICAgICAgICAgICAg
ICAgICAgIG1ldGhvZE9yVGFyZ2V0ICE9PSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgIG1l
dGhvZE9yQXJncyBpbiBtZXRob2RPclRhcmdldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRhcmdldCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9
IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1ldGhvZCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBleGVjdXRlQXQgPSAo
ICsgbmV3IERhdGUoKSkgKyBwYXJzZUludCh3YWl0LCAxMCk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoaXNTdHJpbmcobWV0aG9kKSkgewotICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSB0YXJn
ZXRbbWV0aG9kXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgb25F
cnJvciA9IGdldE9uRXJyb3IodGhpcy5vcHRpb25zKTsKLQotICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIGZuKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qu
YXBwbHkodGFyZ2V0LCBhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRhcmdldCwgYXJncyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBmaW5kIHBvc2l0
aW9uIHRvIGluc2VydAotICAgICAgICAgICAgICAgIHZhciBpID0gc2VhcmNoVGltZXIoZXhlY3V0
ZUF0LCB0aW1lcnMpOwotCi0gICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZShpLCAwLCBleGVj
dXRlQXQsIGZuKTsKLQotICAgICAgICAgICAgICAgIHVwZGF0ZUxhdGVyVGltZXIodGhpcywgZXhl
Y3V0ZUF0LCB3YWl0KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmbjsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHRocm90dGxlOiBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCAvKiAs
IGFyZ3MsIHdhaXQsIFtpbW1lZGlhdGVdICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXMsCi0gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cywK
LSAgICAgICAgICAgICAgICBpbW1lZGlhdGUgPSBwb3AuY2FsbChhcmdzKSwKLSAgICAgICAgICAg
ICAgICB3YWl0LAotICAgICAgICAgICAgICAgIHRocm90dGxlciwKLSAgICAgICAgICAgICAgICBp
bmRleCwKLSAgICAgICAgICAgICAgICB0aW1lcjsKLQotICAgICAgICAgICAgICAgIGlmIChpc051
bWJlcihpbW1lZGlhdGUpIHx8IGlzU3RyaW5nKGltbWVkaWF0ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgd2FpdCA9IGltbWVkaWF0ZTsKLSAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB3YWl0
ID0gcG9wLmNhbGwoYXJncyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
d2FpdCA9IHBhcnNlSW50KHdhaXQsIDEwKTsKLQotICAgICAgICAgICAgICAgIGluZGV4ID0gZmlu
ZFRocm90dGxlcih0YXJnZXQsIG1ldGhvZCwgdGhpcy5fdGhyb3R0bGVycyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGluZGV4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3Rocm90dGxlcnNbaW5kZXhdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyB0aHJvdHRsZWQKLQotICAgICAgICAgICAgICAgIHRpbWVyID0gZ2xvYmFsLnNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bi5hcHBseShzZWxmLCBhcmdzKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBmaW5kVGhyb3R0
bGVyKHRhcmdldCwgbWV0aG9kLCBzZWxmLl90aHJvdHRsZXJzKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rocm90
dGxlcnMuc3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0sIHdhaXQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSkgewotICAg
ICAgICAgICAgICAgICAgICBzZWxmLnJ1bi5hcHBseShzZWxmLCBhcmdzKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aHJvdHRsZXIgPSBbdGFyZ2V0LCBtZXRob2QsIHRp
bWVyXTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX3Rocm90dGxlcnMucHVzaCh0aHJvdHRsZXIp
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm90dGxlcjsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGRlYm91bmNlOiBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCAvKiAsIGFyZ3Ms
IHdhaXQsIFtpbW1lZGlhdGVdICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICB2
YXIgc2VsZiA9IHRoaXMsCi0gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cywKLSAgICAg
ICAgICAgICAgICBpbW1lZGlhdGUgPSBwb3AuY2FsbChhcmdzKSwKLSAgICAgICAgICAgICAgICB3
YWl0LAotICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgIGRlYm91bmNlZSwK
LSAgICAgICAgICAgICAgICB0aW1lcjsKLQotICAgICAgICAgICAgICAgIGlmIChpc051bWJlcihp
bW1lZGlhdGUpIHx8IGlzU3RyaW5nKGltbWVkaWF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
d2FpdCA9IGltbWVkaWF0ZTsKLSAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgd2FpdCA9IHBv
cC5jYWxsKGFyZ3MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdhaXQg
PSBwYXJzZUludCh3YWl0LCAxMCk7Ci0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGRlYm91bmNl
ZQotICAgICAgICAgICAgICAgIGluZGV4ID0gZmluZERlYm91bmNlZSh0YXJnZXQsIG1ldGhvZCwg
dGhpcy5fZGVib3VuY2Vlcyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewot
ICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZWUgPSB0aGlzLl9kZWJvdW5jZWVzW2luZGV4XTsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2Vlcy5zcGxpY2UoaW5kZXgsIDEpOwot
ICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VlWzJdKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5ydW4uYXBwbHkoc2VsZiwgYXJncyk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gZmluZERlYm91bmNl
ZSh0YXJnZXQsIG1ldGhvZCwgc2VsZi5fZGVib3VuY2Vlcyk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5j
ZWVzLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9LCB3YWl0KTsKLQotICAgICAgICAgICAgICAgIGlmIChpbW1lZGlhdGUgJiYgaW5kZXgg
PT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucnVuLmFwcGx5KHNlbGYsIGFyZ3Mp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlYm91bmNlZSA9IFt0YXJn
ZXQsIG1ldGhvZCwgdGltZXJdOwotCi0gICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2Vlcy5w
dXNoKGRlYm91bmNlZSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGVib3VuY2VlOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgY2FuY2VsVGltZXJzOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgY2xlYXJJdGVtcyA9IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGl0ZW1bMl0pOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICBlYWNoKHRoaXMuX3Rocm90dGxlcnMsIGNsZWFySXRlbXMpOwotICAg
ICAgICAgICAgICAgIHRoaXMuX3Rocm90dGxlcnMgPSBbXTsKLQotICAgICAgICAgICAgICAgIGVh
Y2godGhpcy5fZGVib3VuY2VlcywgY2xlYXJJdGVtcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
ZGVib3VuY2VlcyA9IFtdOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhdGVyVGltZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xhdGVyVGltZXIpOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXRlclRpbWVyID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdGltZXJzID0gW107Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fYXV0b3J1bikgewotICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy5fYXV0b3J1bik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9ydW4gPSBudWxsOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGhhc1RpbWVy
czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEhdGltZXJzLmxlbmd0aCB8
fCAhIXRoaXMuX2RlYm91bmNlZXMubGVuZ3RoIHx8ICEhdGhpcy5fdGhyb3R0bGVycy5sZW5ndGgg
fHwgdGhpcy5fYXV0b3J1bjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNhbmNlbDog
ZnVuY3Rpb24odGltZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGltZXJUeXBlID0gdHlwZW9m
IHRpbWVyOwotCi0gICAgICAgICAgICAgICAgaWYgKHRpbWVyICYmIHRpbWVyVHlwZSA9PT0gJ29i
amVjdCcgJiYgdGltZXIucXVldWUgJiYgdGltZXIubWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHdlJ3JlIGNhbmNlbGxpbmcgYSBkZWZlck9uY2UKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRpbWVyLnF1ZXVlLmNhbmNlbCh0aW1lcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh0aW1lclR5cGUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
d2UncmUgY2FuY2VsbGluZyBhIHNldFRpbWVvdXQKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSB0aW1lcnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGltZXJzW2kgKyAxXSA9PT0gdGltZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKGksIDIpOyAvLyByZW1vdmUgdGhlIHR3byBl
bGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGltZXIpID09PSAi
W29iamVjdCBBcnJheV0iKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGNhbmNlbGxp
bmcgYSB0aHJvdHRsZSBvciBkZWJvdW5jZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fY2FuY2VsSXRlbShmaW5kVGhyb3R0bGVyLCB0aGlzLl90aHJvdHRsZXJzLCB0aW1lcikgfHwK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsSXRlbShmaW5kRGVib3VuY2VlLCB0aGlz
Ll9kZWJvdW5jZWVzLCB0aW1lcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyB0aW1lciB3YXMgbnVsbCBvciBub3QgYSB0aW1lcgotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9jYW5jZWxJdGVt
OiBmdW5jdGlvbihmaW5kTWV0aG9kLCBhcnJheSwgdGltZXIpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaXRlbSwKLSAgICAgICAgICAgICAgICBpbmRleDsKLQotICAgICAgICAgICAgICAgIGlmICh0
aW1lci5sZW5ndGggPCAzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpbmRleCA9IGZpbmRNZXRob2QodGlt
ZXJbMF0sIHRpbWVyWzFdLCBhcnJheSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAt
MSkgewotCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBhcnJheVtpbmRleF07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGl0ZW1bMl0gPT09IHRpbWVyWzJdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRpbWVyWzJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIEJhY2tidXJuZXIucHJvdG90eXBlLnNjaGVkdWxlID0gQmFja2J1cm5lci5wcm90b3R5
cGUuZGVmZXI7Ci0gICAgICAgIEJhY2tidXJuZXIucHJvdG90eXBlLnNjaGVkdWxlT25jZSA9IEJh
Y2tidXJuZXIucHJvdG90eXBlLmRlZmVyT25jZTsKLSAgICAgICAgQmFja2J1cm5lci5wcm90b3R5
cGUubGF0ZXIgPSBCYWNrYnVybmVyLnByb3RvdHlwZS5zZXRUaW1lb3V0OwotCi0gICAgICAgIGlm
IChuZWVkc0lFVHJ5Q2F0Y2hGaXgpIHsKLSAgICAgICAgICAgIHZhciBvcmlnaW5hbFJ1biA9IEJh
Y2tidXJuZXIucHJvdG90eXBlLnJ1bjsKLSAgICAgICAgICAgIEJhY2tidXJuZXIucHJvdG90eXBl
LnJ1biA9IHdyYXBJblRyeUNhdGNoKG9yaWdpbmFsUnVuKTsKLQotICAgICAgICAgICAgdmFyIG9y
aWdpbmFsRW5kID0gQmFja2J1cm5lci5wcm90b3R5cGUuZW5kOwotICAgICAgICAgICAgQmFja2J1
cm5lci5wcm90b3R5cGUuZW5kID0gd3JhcEluVHJ5Q2F0Y2gob3JpZ2luYWxFbmQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gd3JhcEluVHJ5Q2F0Y2goZnVuYykgewotICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZ2V0T25FcnJvcihvcHRpb25zKSB7Ci0gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5vbkVy
cm9yIHx8IChvcHRpb25zLm9uRXJyb3JUYXJnZXQgJiYgb3B0aW9ucy5vbkVycm9yVGFyZ2V0W29w
dGlvbnMub25FcnJvck1ldGhvZF0pOwotICAgICAgICB9Ci0KLQotICAgICAgICBmdW5jdGlvbiBj
cmVhdGVBdXRvcnVuKGJhY2tidXJuZXIpIHsKLSAgICAgICAgICAgIGJhY2tidXJuZXIuYmVnaW4o
KTsKLSAgICAgICAgICAgIGJhY2tidXJuZXIuX2F1dG9ydW4gPSBnbG9iYWwuc2V0VGltZW91dChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBiYWNrYnVybmVyLl9hdXRvcnVuID0gbnVsbDsK
LSAgICAgICAgICAgICAgICBiYWNrYnVybmVyLmVuZCgpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1cGRhdGVMYXRlclRpbWVyKHNlbGYsIGV4ZWN1dGVB
dCwgd2FpdCkgewotICAgICAgICAgICAgaWYgKCFzZWxmLl9sYXRlclRpbWVyIHx8IGV4ZWN1dGVB
dCA8IHNlbGYuX2xhdGVyVGltZXJFeHBpcmVzQXQpIHsKLSAgICAgICAgICAgICAgICBzZWxmLl9s
YXRlclRpbWVyID0gZ2xvYmFsLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGYuX2xhdGVyVGltZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9sYXRlclRpbWVyRXhwaXJlc0F0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0
ZVRpbWVycyhzZWxmKTsKLSAgICAgICAgICAgICAgICB9LCB3YWl0KTsKLSAgICAgICAgICAgICAg
ICBzZWxmLl9sYXRlclRpbWVyRXhwaXJlc0F0ID0gZXhlY3V0ZUF0OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZVRpbWVycyhzZWxmKSB7Ci0gICAg
ICAgICAgICB2YXIgbm93ID0gKyBuZXcgRGF0ZSgpLAotICAgICAgICAgICAgdGltZSwgZm5zLCBp
LCBsOwotCi0gICAgICAgICAgICBzZWxmLnJ1bihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpID0gc2VhcmNoVGltZXIobm93LCB0aW1lcnMpOwotCi0gICAgICAgICAgICAgICAgZm5zID0g
dGltZXJzLnNwbGljZSgwLCBpKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDEsIGwgPSBm
bnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2No
ZWR1bGUoc2VsZi5vcHRpb25zLmRlZmF1bHRRdWV1ZSwgbnVsbCwgZm5zW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHRpbWVycy5sZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXRlclRpbWVyKHNlbGYsIHRpbWVyc1swXSwg
dGltZXJzWzBdIC0gbm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGZpbmREZWJvdW5jZWUodGFyZ2V0LCBtZXRob2QsIGRlYm91bmNlZXMpIHsKLSAgICAg
ICAgICAgIHJldHVybiBmaW5kSXRlbSh0YXJnZXQsIG1ldGhvZCwgZGVib3VuY2Vlcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmaW5kVGhyb3R0bGVyKHRhcmdldCwgbWV0aG9kLCB0
aHJvdHRsZXJzKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmluZEl0ZW0odGFyZ2V0LCBtZXRob2Qs
IHRocm90dGxlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluZEl0ZW0odGFy
Z2V0LCBtZXRob2QsIGNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIHZhciBpdGVtLAotICAgICAg
ICAgICAgaW5kZXggPSAtMTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjb2xs
ZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIGl0ZW0gPSBjb2xs
ZWN0aW9uW2ldOwotICAgICAgICAgICAgICAgIGlmIChpdGVtWzBdID09PSB0YXJnZXQgJiYgaXRl
bVsxXSA9PT0gbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBzZWFyY2hUaW1lcih0aW1lLCB0aW1lcnMpIHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IDAs
Ci0gICAgICAgICAgICBlbmQgPSB0aW1lcnMubGVuZ3RoIC0gMiwKLSAgICAgICAgICAgIG1pZGRs
ZSwgbDsKLQotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gc2luY2UgdGltZXJzIGlzIGFuIGFycmF5IG9mIHBhaXJzICdsJyB3aWxsIGFsd2F5cwot
ICAgICAgICAgICAgICAgIC8vIGJlIGFuIGludGVnZXIKLSAgICAgICAgICAgICAgICBsID0gKGVu
ZCAtIHN0YXJ0KSAvIDI7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciB0aGUg
aW5kZXggaW4gY2FzZSBldmVuIG51bWJlcgotICAgICAgICAgICAgICAgIC8vIG9mIHBhaXJzIGlu
c2lkZSB0aW1lcnMKLSAgICAgICAgICAgICAgICBtaWRkbGUgPSBzdGFydCArIGwgLSAobCAlIDIp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHRpbWUgPj0gdGltZXJzW21pZGRsZV0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBtaWRkbGUgKyAyOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1pZGRsZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAodGltZSA+PSB0aW1lcnNbc3Rh
cnRdKSA/IHN0YXJ0ICsgMiA6IHN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRz
X18uQmFja2J1cm5lciA9IEJhY2tidXJuZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJiYWNrYnVy
bmVyL2RlZmVycmVkX2FjdGlvbl9xdWV1ZXMiLAotICAgIFsiYmFja2J1cm5lci91dGlscyIsICJi
YWNrYnVybmVyL3F1ZXVlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kx
X18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICB2YXIgVXRpbHMgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIFF1ZXVlID0gX19kZXBlbmRlbmN5Ml9fLlF1ZXVlOwotCi0gICAgICAgIHZhciBlYWNo
ID0gVXRpbHMuZWFjaCwKLSAgICAgICAgaXNTdHJpbmcgPSBVdGlscy5pc1N0cmluZzsKLQotICAg
ICAgICBmdW5jdGlvbiBEZWZlcnJlZEFjdGlvblF1ZXVlcyhxdWV1ZU5hbWVzLCBvcHRpb25zKSB7
Ci0gICAgICAgICAgICB2YXIgcXVldWVzID0gdGhpcy5xdWV1ZXMgPSB7fTsKLSAgICAgICAgICAg
IHRoaXMucXVldWVOYW1lcyA9IHF1ZXVlTmFtZXMgPSBxdWV1ZU5hbWVzIHx8IFtdOwotCi0gICAg
ICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotCi0gICAgICAgICAgICBlYWNoKHF1ZXVl
TmFtZXMsIGZ1bmN0aW9uKHF1ZXVlTmFtZSkgewotICAgICAgICAgICAgICAgIHF1ZXVlc1txdWV1
ZU5hbWVdID0gbmV3IFF1ZXVlKHRoaXMsIHF1ZXVlTmFtZSwgb3B0aW9ucyk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIERlZmVycmVkQWN0aW9uUXVldWVzLnByb3RvdHlw
ZSA9IHsKLSAgICAgICAgICAgIHF1ZXVlTmFtZXM6IG51bGwsCi0gICAgICAgICAgICBxdWV1ZXM6
IG51bGwsCi0gICAgICAgICAgICBvcHRpb25zOiBudWxsLAotCi0gICAgICAgICAgICBzY2hlZHVs
ZTogZnVuY3Rpb24ocXVldWVOYW1lLCB0YXJnZXQsIG1ldGhvZCwgYXJncywgb25jZUZsYWcsIHN0
YWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHF1ZXVlcyA9IHRoaXMucXVldWVzLAotICAgICAg
ICAgICAgICAgIHF1ZXVlID0gcXVldWVzW3F1ZXVlTmFtZV07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIXF1ZXVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiWW91IGF0
dGVtcHRlZCB0byBzY2hlZHVsZSBhbiBhY3Rpb24gaW4gYSBxdWV1ZSAoIiArIHF1ZXVlTmFtZSAr
ICIpIHRoYXQgZG9lc24ndCBleGlzdCIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChvbmNlRmxhZykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUu
cHVzaFVuaXF1ZSh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5wdXNoKHRhcmdldCwg
bWV0aG9kLCBhcmdzLCBzdGFjayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgaW52b2tlOiBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCwgYXJncywgXykg
ewotICAgICAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdzKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtZXRob2QuY2FsbCh0YXJnZXQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGludm9rZVdpdGhP
bkVycm9yOiBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCwgYXJncywgb25FcnJvcikgewotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVu
Z3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRhcmdldCwg
YXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtZXRob2QuY2FsbCh0YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgb25FcnJvcihl
cnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
Zmx1c2g6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBxdWV1ZXMgPSB0aGlzLnF1
ZXVlcywKLSAgICAgICAgICAgICAgICBxdWV1ZU5hbWVzID0gdGhpcy5xdWV1ZU5hbWVzLAotICAg
ICAgICAgICAgICAgIHF1ZXVlTmFtZSwgcXVldWUsIHF1ZXVlSXRlbXMsIHByaW9yUXVldWVOYW1l
SW5kZXgsCi0gICAgICAgICAgICAgICAgcXVldWVOYW1lSW5kZXggPSAwLCBudW1iZXJPZlF1ZXVl
cyA9IHF1ZXVlTmFtZXMubGVuZ3RoLAotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9w
dGlvbnMsCi0gICAgICAgICAgICAgICAgb25FcnJvciA9IG9wdGlvbnMub25FcnJvciB8fCAob3B0
aW9ucy5vbkVycm9yVGFyZ2V0ICYmIG9wdGlvbnMub25FcnJvclRhcmdldFtvcHRpb25zLm9uRXJy
b3JNZXRob2RdKSwKLSAgICAgICAgICAgICAgICBpbnZva2UgPSBvbkVycm9yID8gdGhpcy5pbnZv
a2VXaXRoT25FcnJvciA6IHRoaXMuaW52b2tlOwotCi0gICAgICAgICAgICAgICAgb3V0ZXJsb29w
OgotICAgICAgICAgICAgICAgIHdoaWxlIChxdWV1ZU5hbWVJbmRleCA8IG51bWJlck9mUXVldWVz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXVlTmFtZSA9IHF1ZXVlTmFtZXNbcXVldWVOYW1l
SW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IHF1ZXVlc1txdWV1ZU5hbWVdOwot
ICAgICAgICAgICAgICAgICAgICBxdWV1ZUl0ZW1zID0gcXVldWUuX3F1ZXVlQmVpbmdGbHVzaGVk
ID0gcXVldWUuX3F1ZXVlLnNsaWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXVlLl9xdWV1
ZSA9IFtdOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZU9wdGlvbnMgPSBxdWV1ZS5v
cHRpb25zLCAvLyBUT0RPOiB3cml0ZSBhIHRlc3QgZm9yIHRoaXMKLSAgICAgICAgICAgICAgICAg
ICAgYmVmb3JlID0gcXVldWVPcHRpb25zICYmIHF1ZXVlT3B0aW9ucy5iZWZvcmUsCi0gICAgICAg
ICAgICAgICAgICAgIGFmdGVyID0gcXVldWVPcHRpb25zICYmIHF1ZXVlT3B0aW9ucy5hZnRlciwK
LSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrLAotICAgICAg
ICAgICAgICAgICAgICBxdWV1ZUluZGV4ID0gMCwgbnVtYmVyT2ZRdWV1ZUl0ZW1zID0gcXVldWVJ
dGVtcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mUXVldWVJdGVt
cyAmJiBiZWZvcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSgpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHF1ZXVlSW5kZXgg
PCBudW1iZXJPZlF1ZXVlSXRlbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9
IHF1ZXVlSXRlbXNbcXVldWVJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qg
PSBxdWV1ZUl0ZW1zW3F1ZXVlSW5kZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3MgPSBxdWV1ZUl0ZW1zW3F1ZXVlSW5kZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrID0gcXVldWVJdGVtc1txdWV1ZUluZGV4ICsgM107IC8vIERlYnVnZ2luZyBhc3Npc3Rh
bmNlCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhtZXRob2QpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0W21ldGhvZF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGhv
ZCBjb3VsZCBoYXZlIGJlZW4gbnVsbGlmaWVkIC8gY2FuY2VsZWQgZHVyaW5nIGZsdXNoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW52b2tlKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBvbkVycm9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVJbmRleCArPSA0
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcXVldWUuX3F1
ZXVlQmVpbmdGbHVzaGVkID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9m
UXVldWVJdGVtcyAmJiBhZnRlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICgocHJpb3JR
dWV1ZU5hbWVJbmRleCA9IGluZGV4T2ZQcmlvclF1ZXVlV2l0aEFjdGlvbnModGhpcywgcXVldWVO
YW1lSW5kZXgpKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlTmFtZUlu
ZGV4ID0gcHJpb3JRdWV1ZU5hbWVJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlIG91dGVybG9vcDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHF1ZXVlTmFtZUluZGV4Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGluZGV4T2ZQcmlvclF1ZXVlV2l0aEFjdGlv
bnMoZGFxLCBjdXJyZW50UXVldWVJbmRleCkgewotICAgICAgICAgICAgdmFyIHF1ZXVlTmFtZSwg
cXVldWU7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY3VycmVudFF1ZXVlSW5k
ZXg7IGkgPD0gbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcXVldWVOYW1lID0gZGFxLnF1ZXVl
TmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgcXVldWUgPSBkYXEucXVldWVzW3F1ZXVlTmFtZV07
Ci0gICAgICAgICAgICAgICAgaWYgKHF1ZXVlLl9xdWV1ZS5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5E
ZWZlcnJlZEFjdGlvblF1ZXVlcyA9IERlZmVycmVkQWN0aW9uUXVldWVzOwotICAgIH0pOwotICAg
IGRlZmluZSgiYmFja2J1cm5lci9xdWV1ZSIsCi0gICAgWyJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICBmdW5jdGlv
biBRdWV1ZShkYXEsIG5hbWUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHRoaXMuZGFxID0gZGFx
OwotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHRoaXMuZ2xvYmFs
T3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zW25h
bWVdOwotICAgICAgICAgICAgdGhpcy5fcXVldWUgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAg
IFF1ZXVlLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIGRhcTogbnVsbCwKLSAgICAgICAgICAg
IG5hbWU6IG51bGwsCi0gICAgICAgICAgICBvcHRpb25zOiBudWxsLAotICAgICAgICAgICAgb25F
cnJvcjogbnVsbCwKLSAgICAgICAgICAgIF9xdWV1ZTogbnVsbCwKLQotICAgICAgICAgICAgcHVz
aDogZnVuY3Rpb24odGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWU7Ci0gICAgICAgICAgICAgICAgcXVldWUucHVzaCh0
YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHF1ZXVlOiB0aGlzLAotICAgICAgICAgICAgICAgICAgICB0YXJn
ZXQ6IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QKLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHVzaFVuaXF1ZTogZnVu
Y3Rpb24odGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHF1ZXVlID0gdGhpcy5fcXVldWUsIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRNZXRob2QsIGksIGw7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gcXVldWUubGVuZ3RoOyBpIDwgbDsg
aSArPSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBxdWV1ZVtpXTsK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudE1ldGhvZCA9IHF1ZXVlW2kgKyAxXTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRhcmdldCA9PT0gdGFyZ2V0ICYmIGN1cnJlbnRN
ZXRob2QgPT09IG1ldGhvZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbaSArIDJd
ID0gYXJnczsgLy8gcmVwbGFjZSBhcmdzCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVtp
ICsgM10gPSBzdGFjazsgLy8gcmVwbGFjZSBzdGFjawotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTogdGhpcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXRob2Q6IG1ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHF1ZXVlLnB1c2godGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBxdWV1ZTogdGhpcywKLSAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0
aG9kCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8v
IFRPRE86IHJlbW92ZSBtZSwgb25seSBiZWluZyB1c2VkIGZvciBFbWJlci5ydW4uc3luYwotICAg
ICAgICAgICAgZmx1c2g6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9
IHRoaXMuX3F1ZXVlLAotICAgICAgICAgICAgICAgIGdsb2JhbE9wdGlvbnMgPSB0aGlzLmdsb2Jh
bE9wdGlvbnMsCi0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKLSAgICAg
ICAgICAgICAgICBiZWZvcmUgPSBvcHRpb25zICYmIG9wdGlvbnMuYmVmb3JlLAotICAgICAgICAg
ICAgICAgIGFmdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmFmdGVyLAotICAgICAgICAgICAgICAg
IG9uRXJyb3IgPSBnbG9iYWxPcHRpb25zLm9uRXJyb3IgfHwgKGdsb2JhbE9wdGlvbnMub25FcnJv
clRhcmdldCAmJiBnbG9iYWxPcHRpb25zLm9uRXJyb3JUYXJnZXRbZ2xvYmFsT3B0aW9ucy5vbkVy
cm9yTWV0aG9kXSksCi0gICAgICAgICAgICAgICAgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNr
LCBpLCBsID0gcXVldWUubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgaWYgKGwgJiYgYmVmb3Jl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJlZm9yZSgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSArPSA0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRhcmdldCA9IHF1ZXVlW2ldOwotICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBx
dWV1ZVtpICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBxdWV1ZVtpICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YWNrID0gcXVldWVbaSArIDNdOyAvLyBEZWJ1Z2dpbmcgYXNz
aXN0YW5jZQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuYXBwbHko
dGFyZ2V0LCBhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNh
bGwodGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuY2FsbCh0YXJnZXQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChsICYmIGFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFm
dGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYg
bmV3IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZAotICAgICAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5n
dGggPiBsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gcXVldWUuc2xpY2Uo
bCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZmx1c2goKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZS5sZW5ndGggPSAwOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNhbmNlbDogZnVu
Y3Rpb24oYWN0aW9uVG9DYW5jZWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSB0aGlz
Ll9xdWV1ZSwgY3VycmVudFRhcmdldCwgY3VycmVudE1ldGhvZCwgaSwgbDsKLQotICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGwgPSBxdWV1ZS5sZW5ndGg7IGkgPCBsOyBpICs9IDQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IHF1ZXVlW2ldOwotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50TWV0aG9kID0gcXVldWVbaSArIDFdOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSBhY3Rpb25Ub0NhbmNlbC50YXJnZXQgJiYgY3VycmVu
dE1ldGhvZCA9PT0gYWN0aW9uVG9DYW5jZWwubWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBxdWV1ZS5zcGxpY2UoaSwgNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIGlmIG5vdCBmb3VuZCBpbiBjdXJyZW50IHF1ZXVlCi0gICAgICAgICAgICAg
ICAgLy8gY291bGQgYmUgaW4gdGhlIHF1ZXVlIHRoYXQgaXMgYmVpbmcgZmx1c2hlZAotICAgICAg
ICAgICAgICAgIHF1ZXVlID0gdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFxdWV1ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBxdWV1ZS5sZW5ndGg7IGkg
PCBsOyBpICs9IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IHF1ZXVl
W2ldOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWV0aG9kID0gcXVldWVbaSArIDFdOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSBhY3Rpb25Ub0NhbmNl
bC50YXJnZXQgJiYgY3VycmVudE1ldGhvZCA9PT0gYWN0aW9uVG9DYW5jZWwubWV0aG9kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBtZXNzIHdpdGggYXJyYXkgZHVyaW5nIGZs
dXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IG51bGxpZnkgdGhlIG1ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbaSArIDFdID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIF9fZXhwb3J0
c19fLlF1ZXVlID0gUXVldWU7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJiYWNrYnVybmVyL3V0aWxz
IiwKLSAgICBbImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSB7Ci0gICAg
ICAgICAgICBlYWNoOiBmdW5jdGlvbihjb2xsZWN0aW9uLCBjYWxsYmFjaykgewotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjayhjb2xsZWN0aW9uW2ldKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24oc3Vz
cGVjdCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygc3VzcGVjdCA9PT0gJ3N0cmlu
Zyc7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbihz
dXNwZWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBzdXNwZWN0ID09PSAnZnVu
Y3Rpb24nOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9u
KHN1c3BlY3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHN1c3BlY3QgPT09ICdu
dW1iZXInOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotCi0gICAgZGVmaW5l
KCJjb250YWluZXIiLAotICAgIFsiY29udGFpbmVyL2NvbnRhaW5lciIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIC8qCi0gICAgICAgICAgICBQdWJsaWMgYXBpIGZvciB0aGUgY29u
dGFpbmVyIGlzIHN0aWxsIGluIGZsdXguCi0gICAgICAgICAgICBUaGUgcHVibGljIGFwaSwgc3Bl
Y2lmaWVkIG9uIHRoZSBhcHBsaWNhdGlvbiBuYW1lc3BhY2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQg
dGhlIHN0YWJsZSBhcGkuCi0gICAgICAgICAgICAvLyBAbW9kdWxlIGNvbnRhaW5lcgotICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKgotICAgICAgICAg
ICAgIEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgbW9kZWwgZmFjdG9yeSBpbmplY3Rpb25zIChkaXNh
YmxlZCBieSBkZWZhdWx0KQotICAgICAgICAgICAgIElmIG1vZGVsIGZhY3RvcnkgaW5qZWN0aW9u
cyBhcmUgZW5hYmxlZCwgbW9kZWxzIHNob3VsZCBub3QgYmUKLSAgICAgICAgICAgICBhY2Nlc3Nl
ZCBnbG9iYWxseSAob25seSB0aHJvdWdoIGBjb250YWluZXIubG9va3VwRmFjdG9yeSgnbW9kZWw6
bW9kZWxOYW1lJykpYCk7Ci0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlci5NT0RFTF9GQUNU
T1JZX0lOSkVDVElPTlMgPSBmYWxzZTsKLQotICAgICAgICBpZiAoRW1iZXIuRU5WICYmIHR5cGVv
ZiBFbWJlci5FTlYuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TICE9PSAndW5kZWZpbmVkJykgewot
ICAgICAgICAgICAgRW1iZXIuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TID0gISFFbWJlci5FTlYu
TU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TOwotICAgICAgICB9Ci0KLQotICAgICAgICB2YXIgQ29u
dGFpbmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgX19leHBvcnRz
X19bImRlZmF1bHQiXSA9IENvbnRhaW5lcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImNvbnRhaW5l
ci9jb250YWluZXIiLAotICAgIFsiY29udGFpbmVyL2luaGVyaXRpbmdfZGljdCIsICJlbWJlci1t
ZXRhbC9jb3JlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgSW5oZXJpdGluZ0RpY3QgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8v
IEVtYmVyLmFzc2VydAotCi0gICAgICAgIC8vIEEgbGlnaHR3ZWlnaHQgY29udGFpbmVyIHRoYXQg
aGVscHMgdG8gYXNzZW1ibGUgYW5kIGRlY291cGxlIGNvbXBvbmVudHMuCi0gICAgICAgIC8vIFB1
YmxpYyBhcGkgZm9yIHRoZSBjb250YWluZXIgaXMgc3RpbGwgaW4gZmx1eC4KLSAgICAgICAgLy8g
VGhlIHB1YmxpYyBhcGksIHNwZWNpZmllZCBvbiB0aGUgYXBwbGljYXRpb24gbmFtZXNwYWNlIHNo
b3VsZCBiZSBjb25zaWRlcmVkIHRoZSBzdGFibGUgYXBpLgotICAgICAgICBmdW5jdGlvbiBDb250
YWluZXIocGFyZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLSAgICAg
ICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLQotICAgICAgICAgICAgdGhpcy5yZXNvbHZlciA9
IHBhcmVudCAmJiBwYXJlbnQucmVzb2x2ZXIgfHwgZnVuY3Rpb24oKSB7fTsKLQotICAgICAgICAg
ICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBJbmhlcml0aW5nRGljdChwYXJlbnQgJiYgcGFyZW50LnJl
Z2lzdHJ5KTsKLSAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBuZXcgSW5oZXJpdGluZ0RpY3QocGFy
ZW50ICYmIHBhcmVudC5jYWNoZSk7Ci0gICAgICAgICAgICB0aGlzLmZhY3RvcnlDYWNoZSA9IG5l
dyBJbmhlcml0aW5nRGljdChwYXJlbnQgJiYgcGFyZW50LmZhY3RvcnlDYWNoZSk7Ci0gICAgICAg
ICAgICB0aGlzLnJlc29sdmVDYWNoZSA9IG5ldyBJbmhlcml0aW5nRGljdChwYXJlbnQgJiYgcGFy
ZW50LnJlc29sdmVDYWNoZSk7Ci0gICAgICAgICAgICB0aGlzLnR5cGVJbmplY3Rpb25zID0gbmV3
IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQudHlwZUluamVjdGlvbnMpOwotICAgICAg
ICAgICAgdGhpcy5pbmplY3Rpb25zID0ge307Ci0KLSAgICAgICAgICAgIHRoaXMuZmFjdG9yeVR5
cGVJbmplY3Rpb25zID0gbmV3IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQuZmFjdG9y
eVR5cGVJbmplY3Rpb25zKTsKLSAgICAgICAgICAgIHRoaXMuZmFjdG9yeUluamVjdGlvbnMgPSB7
fTsKLQotICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG5ldyBJbmhlcml0aW5nRGljdChwYXJl
bnQgJiYgcGFyZW50Ll9vcHRpb25zKTsKLSAgICAgICAgICAgIHRoaXMuX3R5cGVPcHRpb25zID0g
bmV3IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQuX3R5cGVPcHRpb25zKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENvbnRhaW5lci5wcm90b3R5cGUgPSB7Ci0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcGFyZW50Ci0gICAgICAgICAgICAgICAg
ICAgIEB0eXBlIENvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGFyZW50OiBudWxsLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGNoaWxkcmVuCi0gICAgICAg
ICAgICAgICAgICAgIEB0eXBlIEFycmF5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IFtd
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcmVzb2x2ZXIKLSAg
ICAgICAgICAgICAgICAgICAgQHR5cGUgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByZXNvbHZlcjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIEBwcm9wZXJ0eSByZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBJ
bmhlcml0aW5nRGljdAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlZ2lzdHJ5
OiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5
IGNhY2hlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgY2FjaGU6IG51bGwsCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdHlwZUluamVjdGlvbnMKLSAgICAgICAg
ICAgICAgICAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB0eXBlSW5qZWN0aW9uczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpbmplY3Rpb25zCi0gICAgICAgICAgICAgICAgICAg
IEB0eXBlIE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7fQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGluamVjdGlvbnM6IG51bGwsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBfb3B0aW9ucwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBJbmhlcml0aW5n
RGljdAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgX29wdGlvbnM6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBfdHlwZU9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfdHlwZU9wdGlvbnM6IG51bGwsCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgbmV3IGNoaWxk
IG9mIHRoZSBjdXJyZW50IGNvbnRhaW5lci4gVGhlc2UgY2hpbGRyZW4gYXJlIGNvbmZpZ3VyZWQK
LSAgICAgICAgICAgICAgICAgICAgdG8gY29ycmVjdGx5IGluaGVyaXQgZnJvbSB0aGUgY3VycmVu
dCBjb250YWluZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjaGlsZAotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtDb250YWluZXJ9Ci0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgY2hpbGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250
YWluZXIgPSBuZXcgQ29udGFpbmVyKHRoaXMpOwotICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRy
ZW4ucHVzaChjb250YWluZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2V0
cyBhIGtleS12YWx1ZSBwYWlyIG9uIHRoZSBjdXJyZW50IGNvbnRhaW5lci4gSWYgYSBwYXJlbnQg
Y29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHNhbWUga2V5LCBvbmNlIHNl
dCBvbiBhIGNoaWxkLCB0aGUgcGFyZW50IGFuZCBjaGlsZCB3aWxsIGRpdmVyZ2UKLSAgICAgICAg
ICAgICAgICAgICAgYXMgZXhwZWN0ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBz
ZXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7YW55fSB2YWx1ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNldDogZnVu
Y3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0g
PSB2YWx1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBSZWdpc3RlcnMgYSBmYWN0b3J5IGZvciBsYXRlciBpbmplY3Rpb24uCi0KLSAgICAg
ICAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywg
UGVyc29uLCB7c2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyLnJlZ2lzdGVyKCdmcnVpdDpmYXZvcml0ZScsIE9yYW5nZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5yZWdpc3RlcignY29tbXVuaWNhdGlvbjptYWluJywgRW1haWwsIHtzaW5n
bGV0b246IGZhbHNlfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVnaXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZhY3Rv
cnkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICByZWdpc3RlcjogZnVuY3Rpb24oZnVsbE5hbWUsIGZh
Y3RvcnksIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ2Z1bGxOYW1l
IG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvcnkgPT09IHVuZGVmaW5lZCkgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdHRlbXB0aW5nIHRvIHJlZ2lzdGVy
IGFuIHVua25vd24gZmFjdG9yeTogYCcgKyBmdWxsTmFtZSArICdgJyk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxp
emUoZnVsbE5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGUuaGFzKG5vcm1h
bGl6ZWROYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5v
dCByZS1yZWdpc3RlcjogYCcgKyBmdWxsTmFtZSArICdgLCBhcyBpdCBoYXMgYWxyZWFkeSBiZWVu
IGxvb2tlZCB1cC4nKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlz
LnJlZ2lzdHJ5LnNldChub3JtYWxpemVkTmFtZSwgZmFjdG9yeSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fb3B0aW9ucy5zZXQobm9ybWFsaXplZE5hbWUsIG9wdGlvbnMgfHwge30pOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVucmVnaXN0
ZXIgYSBmdWxsTmFtZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5ldyBDb250YWluZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywgVXNlcik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmxvb2t1cCgnbW9kZWw6dXNlcicpIGluc3RhbmNl
b2YgVXNlciAvLz0+IHRydWUKLQotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIudW5yZWdp
c3RlcignbW9kZWw6dXNlcicpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5sb29rdXAo
J21vZGVsOnVzZXInKSA9PT0gdW5kZWZpbmVkIC8vPT4gdHJ1ZQotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVucmVnaXN0ZXIKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHVucmVnaXN0ZXI6IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCdmdWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFt
ZScsIHZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLQotICAgICAgICAgICAgICAgIHZhciBu
b3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAg
ICAgIHRoaXMucmVnaXN0cnkucmVtb3ZlKG5vcm1hbGl6ZWROYW1lKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLmNhY2hlLnJlbW92ZShub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5mYWN0b3J5Q2FjaGUucmVtb3ZlKG5vcm1hbGl6ZWROYW1lKTsKLSAgICAgICAgICAgICAgICB0
aGlzLnJlc29sdmVDYWNoZS5yZW1vdmUobm9ybWFsaXplZE5hbWUpOwotICAgICAgICAgICAgICAg
IHRoaXMuX29wdGlvbnMucmVtb3ZlKG5vcm1hbGl6ZWROYW1lKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIGZ1bGxOYW1lIHJl
dHVybiB0aGUgY29ycmVzcG9uZGluZyBmYWN0b3J5LgotCi0gICAgICAgICAgICAgICAgICAgIEJ5
IGRlZmF1bHQgYHJlc29sdmVgIHdpbGwgcmV0cmlldmUgdGhlIGZhY3RvcnkgZnJvbQotICAgICAg
ICAgICAgICAgICAgICBpdHMgY29udGFpbmVyJ3MgcmVnaXN0cnkuCi0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0g
bmV3IENvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIo
J2FwaTp0d2l0dGVyJywgVHdpdHRlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVy
LnJlc29sdmUoJ2FwaTp0d2l0dGVyJykgLy8gPT4gVHdpdHRlcgotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5IHRoZSBjb250YWluZXIgY2Fu
IGJlIHByb3ZpZGVkIHdpdGggYSBjdXN0b20gcmVzb2x2ZXIuCi0gICAgICAgICAgICAgICAgICAg
IElmIHByb3ZpZGVkLCBgcmVzb2x2ZWAgd2lsbCBmaXJzdCBwcm92aWRlIHRoZSBjdXN0b20gcmVz
b2x2ZXIKLSAgICAgICAgICAgICAgICAgICAgdGhlIG9wcG9ydHVuaXR5IHRvIHJlc29sdmUgdGhl
IGZ1bGxOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBmYWxsYmFjawotICAgICAgICAgICAgICAgICAg
ICB0byB0aGUgcmVnaXN0cnkuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXIucmVzb2x2ZXIgPSBmdW5jdGlvbihmdWxsTmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB2aWEgdGhlIG1vZHVsZSBzeXN0ZW0g
b2YgY2hvaWNlCi0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIHR3aXR0ZXIgZmFjdG9yeSBpcyBhZGRlZCB0byB0aGUgbW9kdWxlIHN5c3RlbQotICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXIucmVzb2x2ZSgnYXBpOnR3aXR0ZXInKSAvLyA9PiBU
d2l0dGVyCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgcmVzb2x2ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5h
bWUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RnVuY3Rpb259IGZ1bGxOYW1lJ3MgZmFj
dG9yeQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9u
KGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdmdWxsTmFtZSBtdXN0
IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLCB0aGlzLm5vcm1hbGl6ZShmdWxsTmFt
ZSkpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEEgaG9vayB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlc2NyaWJlIGhvdyB0aGUgcmVzb2x2ZXIg
d2lsbAotICAgICAgICAgICAgICAgICAgICBhdHRlbXB0IHRvIGZpbmQgdGhlIGZhY3RvcnkuCi0K
LSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IEVtYmVyIGAuZGVz
Y3JpYmVgIHJldHVybnMgdGhlIGZ1bGwKLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgbmFtZSAo
aW5jbHVkaW5nIG5hbWVzcGFjZSkgd2hlcmUgRW1iZXIncyByZXNvbHZlciBleHBlY3RzCi0gICAg
ICAgICAgICAgICAgICAgIHRvIGZpbmQgdGhlIGBmdWxsTmFtZWAuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBkZXNjcmliZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7c3RyaW5nfSBkZXNjcmli
ZWQgZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkZXNjcmliZTog
ZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVsbE5hbWU7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBo
b29rIHRvIGVuYWJsZSBjdXN0b20gZnVsbE5hbWUgbm9ybWFsaXphdGlvbiBiZWhhdmlvdXIKLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG5vcm1hbGl6ZQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
c3RyaW5nfSBub3JtYWxpemVkIGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbihmdWxsTmFtZSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmdWxsTmFtZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIG1ha2VUb1N0cmluZwotCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7YW55fSBmYWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7c3RyaW5n
fSBmdWxsTmFtZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtmdW5jdGlvbn0gdG9TdHJp
bmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtYWtlVG9TdHJp
bmc6IGZ1bmN0aW9uKGZhY3RvcnksIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhY3RvcnkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIGZ1bGxOYW1lIHJldHVybiBhIGNvcnJlc3BvbmRp
bmcgaW5zdGFuY2UuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Vy
IGlzIGZvciBsb29rdXAgdG8gcmV0dXJuIGEgc2luZ2xldG9uIGluc3RhbmNlLgotICAgICAgICAg
ICAgICAgICAgICBUaGUgc2luZ2xldG9uIGlzIHNjb3BlZCB0byB0aGUgY29udGFpbmVyLCBhbGxv
d2luZyBtdWx0aXBsZSBjb250YWluZXJzCi0gICAgICAgICAgICAgICAgICAgIHRvIGFsbCBoYXZl
IHRoZWlyIG93biBsb2NhbGx5IHNjb3BlZCBzaW5nbGV0b25zLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5l
dyBDb250YWluZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdh
cGk6dHdpdHRlcicsIFR3aXR0ZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciB0d2l0dGVy
ID0gY29udGFpbmVyLmxvb2t1cCgnYXBpOnR3aXR0ZXInKTsKLQotICAgICAgICAgICAgICAgICAg
ICB0d2l0dGVyIGluc3RhbmNlb2YgVHdpdHRlcjsgLy8gPT4gdHJ1ZQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGJ5IGRlZmF1bHQgdGhlIGNvbnRhaW5lciB3aWxsIHJldHVybiBzaW5nbGV0b25z
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0d2l0dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2Fw
aTp0d2l0dGVyJyk7Ci0gICAgICAgICAgICAgICAgICAgIHR3aXR0ZXIyIGluc3RhbmNlb2YgVHdp
dHRlcjsgLy8gPT4gdHJ1ZQotCi0gICAgICAgICAgICAgICAgICAgIHR3aXR0ZXIgPT09IHR3aXR0
ZXIyOyAvLz0+IHRydWUKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
ICAgICAgSWYgc2luZ2xldG9ucyBhcmUgbm90IHdhbnRlZCBhbiBvcHRpb25hbCBmbGFnIGNhbiBi
ZSBwcm92aWRlZCBhdCBsb29rdXAuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwot
ICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2FwaTp0d2l0dGVyJywgVHdp
dHRlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHR3aXR0ZXIgPSBjb250YWluZXIubG9v
a3VwKCdhcGk6dHdpdHRlcicsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHR3aXR0ZXIyID0gY29udGFpbmVyLmxvb2t1cCgnYXBpOnR3aXR0ZXInLCB7IHNp
bmdsZXRvbjogZmFsc2UgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdHdpdHRlciA9PT0gdHdp
dHRlcjI7IC8vPT4gZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBsb29rdXAKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25z
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge2FueX0KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBsb29rdXA6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBvcHRpb25zKSB7Ci0gICAg
ICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdmdWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwg
bmFtZScsIHZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbG9va3VwKHRoaXMsIHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKSwgb3B0aW9ucyk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgR2l2ZW4g
YSBmdWxsTmFtZSByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yeS4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGxvb2t1cEZhY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge2FueX0K
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBsb29rdXBGYWN0b3J5OiBmdW5jdGlv
bihmdWxsTmFtZSkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnZnVsbE5hbWUgbXVz
dCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB2YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnlGb3IodGhpcywgdGhpcy5ub3JtYWxpemUoZnVs
bE5hbWUpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBHaXZlbiBhIGZ1bGxOYW1lIGNoZWNrIGlmIHRoZSBjb250YWluZXIgaXMgYXdhcmUg
b2YgaXRzIGZhY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgb3Igc2luZ2xldG9uIGluc3RhbmNl
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaGFzCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtC
b29sZWFufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGhhczogZnVuY3Rpb24o
ZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ2Z1bGxOYW1lIG11c3Qg
YmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBoYXModGhpcywgdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBB
bGxvdyByZWdpc3RlcmluZyBvcHRpb25zIGZvciBhbGwgZmFjdG9yaWVzIG9mIGEgdHlwZS4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
aWYgYWxsIG9mIHR5cGUgYGNvbm5lY3Rpb25gIG11c3Qgbm90IGJlIHNpbmdsZXRvbnMKLSAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmVyLm9wdGlvbnNGb3JUeXBlKCdjb25uZWN0aW9uJywgeyBz
aW5nbGV0b246IGZhbHNlIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdp
c3RlcignY29ubmVjdGlvbjp0d2l0dGVyJywgVHdpdHRlckNvbm5lY3Rpb24pOwotICAgICAgICAg
ICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2Nvbm5lY3Rpb246ZmFjZWJvb2snLCBGYWNl
Ym9va0Nvbm5lY3Rpb24pOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciB0d2l0dGVyID0gY29u
dGFpbmVyLmxvb2t1cCgnY29ubmVjdGlvbjp0d2l0dGVyJyk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciB0d2l0dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2Nvbm5lY3Rpb246dHdpdHRlcicpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHR3aXR0ZXIgPT09IHR3aXR0ZXIyOyAvLyA9PiBmYWxzZQot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmYWNlYm9vayA9IGNvbnRhaW5lci5sb29rdXAoJ2Nv
bm5lY3Rpb246ZmFjZWJvb2snKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZhY2Vib29rMiA9
IGNvbnRhaW5lci5sb29rdXAoJ2Nvbm5lY3Rpb246ZmFjZWJvb2snKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmYWNlYm9vayA9PT0gZmFjZWJvb2syOyAvLyA9PiBmYWxzZQotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9wdGlvbnNGb3JUeXBl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgb3B0aW9uc0ZvclR5cGU6IGZ1bmN0aW9uKHR5cGUsIG9wdGlvbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWxsZWdh
bENoaWxkT3BlcmF0aW9uKCdvcHRpb25zRm9yVHlwZScpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHRoaXMuX3R5cGVPcHRpb25zLnNldCh0eXBlLCBvcHRpb25zKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBvcHRpb25zOiBmdW5jdGlvbih0eXBlLCBvcHRpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zRm9yVHlwZSh0eXBlLCBvcHRpb25zKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBVc2VkIG9u
bHkgdmlhIGBpbmplY3Rpb25gLgotCi0gICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgc3Bl
Y2lhbGl6ZWQgZm9ybSBvZiBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBlbmFibGluZwotICAgICAg
ICAgICAgICAgICAgICBhbGwgb2JqZWN0cyBvZiBvbmUgdHlwZSB0byBiZSBpbmplY3RlZCB3aXRo
IGEgcmVmZXJlbmNlIHRvIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LgotCi0g
ICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwcm92aWRlZCBlYWNoIG9iamVjdCBvZiB0
eXBlIGBjb250cm9sbGVyYCBuZWVkZWQgYSBgcm91dGVyYC4KLSAgICAgICAgICAgICAgICAgICAg
b25lIHdvdWxkIGRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5l
cigpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcigncm91dGVyOm1h
aW4nLCBSb3V0ZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2Nv
bnRyb2xsZXI6dXNlcicsIFVzZXJDb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmVyLnJlZ2lzdGVyKCdjb250cm9sbGVyOnBvc3QnLCBQb3N0Q29udHJvbGxlcik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnR5cGVJbmplY3Rpb24oJ2NvbnRyb2xsZXInLCAn
cm91dGVyJywgJ3JvdXRlcjptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIg
PSBjb250YWluZXIubG9va3VwKCdjb250cm9sbGVyOnVzZXInKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHBvc3QgPSBjb250YWluZXIubG9va3VwKCdjb250cm9sbGVyOnBvc3QnKTsKLQotICAg
ICAgICAgICAgICAgICAgICB1c2VyLnJvdXRlciBpbnN0YW5jZW9mIFJvdXRlcjsgLy89PiB0cnVl
Ci0gICAgICAgICAgICAgICAgICAgIHBvc3Qucm91dGVyIGluc3RhbmNlb2YgUm91dGVyOyAvLz0+
IHRydWUKLQotICAgICAgICAgICAgICAgICAgICAvLyBib3RoIGNvbnRyb2xsZXJzIHNoYXJlIHRo
ZSBzYW1lIHJvdXRlcgotICAgICAgICAgICAgICAgICAgICB1c2VyLnJvdXRlciA9PT0gcG9zdC5y
b3V0ZXI7IC8vPT4gdHJ1ZQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHR5cGVJbmplY3Rp
b24KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHR5cGVJbmplY3Rpb246IGZ1bmN0aW9uKHR5cGUsIHByb3BlcnR5LCBmdWxsTmFtZSkgewotICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxs
IG5hbWUnLCB2YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlsbGVnYWxDaGlsZE9wZXJhdGlv
bigndHlwZUluamVjdGlvbicpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHZhciBmdWxsTmFtZVR5cGUgPSBmdWxsTmFtZS5zcGxpdCgnOicpWzBdOwotICAgICAgICAgICAg
ICAgIGlmIChmdWxsTmFtZVR5cGUgPT09IHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdDYW5ub3QgaW5qZWN0IGEgYCcgKyBmdWxsTmFtZSArICdgIG9uIG90aGVy
ICcgKyB0eXBlICsgJyhzKS4gUmVnaXN0ZXIgdGhlIGAnICsgZnVsbE5hbWUgKyAnYCBhcyBhIGRp
ZmZlcmVudCB0eXBlIGFuZCBwZXJmb3JtIHRoZSB0eXBlSW5qZWN0aW9uLicpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBhZGRUeXBlSW5qZWN0aW9uKHRoaXMudHlwZUluamVj
dGlvbnMsIHR5cGUsIHByb3BlcnR5LCBmdWxsTmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBpbmplY3Rpb24gcnVsZXMu
Ci0KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgcnVsZXMgYXJlIHVzZWQgdG8gaW5qZWN0IGRl
cGVuZGVuY2llcyBvbnRvIG9iamVjdHMgd2hlbiB0aGV5Ci0gICAgICAgICAgICAgICAgICAgIGFy
ZSBpbnN0YW50aWF0ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVHdvIGZvcm1zIG9mIGluamVj
dGlvbnMgYXJlIHBvc3NpYmxlOgotCi0gICAgICAgICAgICAgICAgICAgICogSW5qZWN0aW5nIG9u
ZSBmdWxsTmFtZSBvbiBhbm90aGVyIGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAgICogSW5q
ZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhIHR5cGUKLQotICAgICAgICAgICAgICAgICAgICBFeGFt
cGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvbnRhaW5lciA9IG5ldyBDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3NvdXJjZTptYWluJywgU291cmNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywgVXNlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignbW9kZWw6cG9zdCcsIFBvc3QpOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhl
ciBmdWxsTmFtZQotICAgICAgICAgICAgICAgICAgICAvLyBlZy4gZWFjaCB1c2VyIG1vZGVsIGdl
dHMgYSBwb3N0IG1vZGVsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24o
J21vZGVsOnVzZXInLCAncG9zdCcsICdtb2RlbDpwb3N0Jyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90aGVyIHR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbignbW9kZWwnLCAnc291cmNlJywgJ3NvdXJjZTpt
YWluJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIgPSBjb250YWluZXIubG9va3Vw
KCdtb2RlbDp1c2VyJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwb3N0ID0gY29udGFpbmVy
Lmxvb2t1cCgnbW9kZWw6cG9zdCcpOwotCi0gICAgICAgICAgICAgICAgICAgIHVzZXIuc291cmNl
IGluc3RhbmNlb2YgU291cmNlOyAvLz0+IHRydWUKLSAgICAgICAgICAgICAgICAgICAgcG9zdC5z
b3VyY2UgaW5zdGFuY2VvZiBTb3VyY2U7IC8vPT4gdHJ1ZQotCi0gICAgICAgICAgICAgICAgICAg
IHVzZXIucG9zdCBpbnN0YW5jZW9mIFBvc3Q7IC8vPT4gdHJ1ZQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCBib3RoIG1vZGVscyBzaGFyZSB0aGUgc2FtZSBzb3VyY2UKLSAgICAgICAgICAg
ICAgICAgICAgdXNlci5zb3VyY2UgPT09IHBvc3Quc291cmNlOyAvLz0+IHRydWUKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbmplY3Rpb24K
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZhY3RvcnlOYW1lCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gaW5qZWN0aW9uTmFtZQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGluamVjdGlvbjogZnVuY3Rpb24oZnVsbE5hbWUsIHByb3BlcnR5LCBpbmplY3Rp
b25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlsbGVnYWxDaGlsZE9wZXJhdGlvbignaW5qZWN0aW9uJyk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFsaWRhdGVGdWxsTmFtZShpbmplY3Rpb25OYW1l
KTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZEluamVjdGlvbk5hbWUgPSB0aGlzLm5v
cm1hbGl6ZShpbmplY3Rpb25OYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChmdWxsTmFtZS5p
bmRleE9mKCc6JykgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5
cGVJbmplY3Rpb24oZnVsbE5hbWUsIHByb3BlcnR5LCBub3JtYWxpemVkSW5qZWN0aW9uTmFtZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdmdWxs
TmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHZhbGlkYXRlRnVsbE5hbWUoZnVsbE5h
bWUpKTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6
ZShmdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMobm9ybWFs
aXplZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0ZW1w
dGVkIHRvIHJlZ2lzdGVyIGFuIGluamVjdGlvbiBmb3IgYSB0eXBlIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBsb29rZWQgdXAuICgnIiArIG5vcm1hbGl6ZWROYW1lICsgIicsICciICsgcHJvcGVydHkg
KyAiJywgJyIgKyBpbmplY3Rpb25OYW1lICsgIicpIik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGFkZEluamVjdGlvbih0aGlzLmluamVjdGlvbnMsIG5vcm1hbGl6ZWROYW1l
LCBwcm9wZXJ0eSwgbm9ybWFsaXplZEluamVjdGlvbk5hbWUpOwotICAgICAgICAgICAgfSwKLQot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVXNlZCBvbmx5IHZpYSBgZmFj
dG9yeUluamVjdGlvbmAuCi0KLSAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBzcGVjaWFs
aXplZCBmb3JtIG9mIGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IGVuYWJsaW5nCi0gICAgICAgICAg
ICAgICAgICAgIGFsbCBmYWN0b3J5IG9mIG9uZSB0eXBlIHRvIGJlIGluamVjdGVkIHdpdGggYSBy
ZWZlcmVuY2UgdG8gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICBvYmplY3QuCi0KLSAgICAg
ICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHByb3ZpZGVkIGVhY2ggZmFjdG9yeSBvZiB0eXBl
IGBtb2RlbGAgbmVlZGVkIGEgYHN0b3JlYC4KLSAgICAgICAgICAgICAgICAgICAgb25lIHdvdWxk
IGRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcignc3RvcmU6bWFpbicsIFNvbWVT
dG9yZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmZhY3RvcnlUeXBlSW5qZWN0
aW9uKCdtb2RlbCcsICdzdG9yZScsICdzdG9yZTptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHN0b3JlID0gY29udGFpbmVyLmxvb2t1cCgnc3RvcmU6bWFpbicpOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgVXNlckZhY3RvcnkgPSBjb250YWluZXIubG9va3VwRmFjdG9yeSgnbW9k
ZWw6dXNlcicpOwotCi0gICAgICAgICAgICAgICAgICAgIFVzZXJGYWN0b3J5LnN0b3JlIGluc3Rh
bmNlb2YgU29tZVN0b3JlOyAvLz0+IHRydWUKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBm
YWN0b3J5VHlwZUluamVjdGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
dHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgZmFjdG9yeVR5cGVJbmplY3Rpb246IGZ1bmN0aW9uKHR5cGUsIHBy
b3BlcnR5LCBmdWxsTmFtZSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkgewot
ICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsQ2hpbGRPcGVyYXRpb24oJ2ZhY3RvcnlUeXBlSW5q
ZWN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYWRkVHlwZUlu
amVjdGlvbih0aGlzLmZhY3RvcnlUeXBlSW5qZWN0aW9ucywgdHlwZSwgcHJvcGVydHksIHRoaXMu
bm9ybWFsaXplKGZ1bGxOYW1lKSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBmYWN0b3J5IGluamVjdGlvbiBydWxlcy4KLQot
ICAgICAgICAgICAgICAgICAgICBTaW1pbGFyIHRvIHJlZ3VsYXIgaW5qZWN0aW9uIHJ1bGVzLCBi
dXQgYXJlIHJ1biBhZ2FpbnN0IGZhY3RvcmllcywgdmlhCi0gICAgICAgICAgICAgICAgICAgIGBD
b250YWluZXIjbG9va3VwRmFjdG9yeWAuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgcnVs
ZXMgYXJlIHVzZWQgdG8gaW5qZWN0IG9iamVjdHMgb250byBmYWN0b3JpZXMgd2hlbiB0aGV5Ci0g
ICAgICAgICAgICAgICAgICAgIGFyZSBsb29rZWQgdXAuCi0KLSAgICAgICAgICAgICAgICAgICAg
VHdvIGZvcm1zIG9mIGluamVjdGlvbnMgYXJlIHBvc3NpYmxlOgotCi0gICAgICAgICAgICAgICAg
ICAqIEluamVjdGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhlciBmdWxsTmFtZQotICAgICAgICAg
ICAgICAgICAgKiBJbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGEgdHlwZQotCi0gICAgICAgICAg
ICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcignc3RvcmU6bWFpbicsIFN0b3Jl
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdzdG9yZTpzZWNvbmRh
cnknLCBPdGhlclN0b3JlKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVy
KCdtb2RlbDp1c2VyJywgVXNlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdp
c3RlcignbW9kZWw6cG9zdCcsIFBvc3QpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGluamVj
dGluZyBvbmUgZnVsbE5hbWUgb24gYW5vdGhlciB0eXBlCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5mYWN0b3J5SW5qZWN0aW9uKCdtb2RlbCcsICdzdG9yZScsICdzdG9yZTptYWluJyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90
aGVyIGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5mYWN0b3J5SW5qZWN0
aW9uKCdtb2RlbDpwb3N0JywgJ3NlY29uZGFyeVN0b3JlJywgJ3N0b3JlOnNlY29uZGFyeScpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBVc2VyRmFjdG9yeSA9IGNvbnRhaW5lci5sb29rdXBG
YWN0b3J5KCdtb2RlbDp1c2VyJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBQb3N0RmFjdG9y
eSA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2RlbDpwb3N0Jyk7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBzdG9yZSA9IGNvbnRhaW5lci5sb29rdXAoJ3N0b3JlOm1haW4nKTsKLQotICAg
ICAgICAgICAgICAgICAgICBVc2VyRmFjdG9yeS5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlOyAvLz0+
IHRydWUKLSAgICAgICAgICAgICAgICAgICAgVXNlckZhY3Rvcnkuc2Vjb25kYXJ5U3RvcmUgaW5z
dGFuY2VvZiBPdGhlclN0b3JlOyAvLz0+IGZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAgUG9z
dEZhY3Rvcnkuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZTsgLy89PiB0cnVlCi0gICAgICAgICAgICAg
ICAgICAgIFBvc3RGYWN0b3J5LnNlY29uZGFyeVN0b3JlIGluc3RhbmNlb2YgT3RoZXJTdG9yZTsg
Ly89PiB0cnVlCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGJvdGggbW9kZWxzIHNoYXJl
IHRoZSBzYW1lIHNvdXJjZSBpbnN0YW5jZQotICAgICAgICAgICAgICAgICAgICBVc2VyRmFjdG9y
eS5zdG9yZSA9PT0gUG9zdEZhY3Rvcnkuc3RvcmU7IC8vPT4gdHJ1ZQotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZhY3RvcnlJbmplY3Rpb24K
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZhY3RvcnlOYW1lCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gaW5qZWN0aW9uTmFtZQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGZhY3RvcnlJbmplY3Rpb246IGZ1bmN0aW9uKGZ1bGxOYW1lLCBwcm9wZXJ0eSwg
aW5qZWN0aW9uTmFtZSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkgewotICAg
ICAgICAgICAgICAgICAgICBpbGxlZ2FsQ2hpbGRPcGVyYXRpb24oJ2luamVjdGlvbicpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRo
aXMubm9ybWFsaXplKGZ1bGxOYW1lKTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZElu
amVjdGlvbk5hbWUgPSB0aGlzLm5vcm1hbGl6ZShpbmplY3Rpb25OYW1lKTsKLQotICAgICAgICAg
ICAgICAgIHZhbGlkYXRlRnVsbE5hbWUoaW5qZWN0aW9uTmFtZSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZnVsbE5hbWUuaW5kZXhPZignOicpID09PSAtMSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5mYWN0b3J5VHlwZUluamVjdGlvbihub3JtYWxpemVkTmFtZSwgcHJvcGVy
dHksIG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBu
YW1lJywgdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkpOwotCi0gICAgICAgICAgICAgICAgaWYg
KHRoaXMuZmFjdG9yeUNhY2hlLmhhcyhub3JtYWxpemVkTmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gcmVnaXN0ZXIgYSBmYWN0b3J5SW5q
ZWN0aW9uIGZvciBhIHR5cGUgdGhhdCBoYXMgYWxyZWFkeSAnICsKLSAgICAgICAgICAgICAgICAg
ICAgJ2JlZW4gbG9va2VkIHVwLiAoXCcnICsgbm9ybWFsaXplZE5hbWUgKyAnXCcsIFwnJyArIHBy
b3BlcnR5ICsgJ1wnLCBcJycgKyBpbmplY3Rpb25OYW1lICsgJ1wnKScpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGFkZEluamVjdGlvbih0aGlzLmZhY3RvcnlJbmplY3Rp
b25zLCBub3JtYWxpemVkTmFtZSwgcHJvcGVydHksIG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBB
IGRlcHRoIGZpcnN0IHRyYXZlcnNhbCwgZGVzdHJveWluZyB0aGUgY29udGFpbmVyLCBpdHMgZGVz
Y2VuZGFudCBjb250YWluZXJzIGFuZCBhbGwKLSAgICAgICAgICAgICAgICAgICAgdGhlaXIgbWFu
YWdlZCBvYmplY3RzLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVzdHJveQotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLmNoaWxkcmVuLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5b
aV0uZGVzdHJveSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMu
Y2hpbGRyZW4gPSBbXTsKLQotICAgICAgICAgICAgICAgIGVhY2hEZXN0cm95YWJsZSh0aGlzLCBm
dW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzdHJveSgpOwotICAg
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmlu
ZWQ7Ci0gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNl
dAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5jaGlsZHJlbi5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICByZXNldENhY2hl
KHRoaXMuY2hpbGRyZW5baV0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJlc2V0Q2FjaGUodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
ZnVuY3Rpb24gcmVzb2x2ZShjb250YWluZXIsIG5vcm1hbGl6ZWROYW1lKSB7Ci0gICAgICAgICAg
ICB2YXIgY2FjaGVkID0gY29udGFpbmVyLnJlc29sdmVDYWNoZS5nZXQobm9ybWFsaXplZE5hbWUp
OwotICAgICAgICAgICAgaWYgKGNhY2hlZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjYWNo
ZWQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByZXNvbHZlZCA9IGNvbnRhaW5l
ci5yZXNvbHZlcihub3JtYWxpemVkTmFtZSkgfHwgY29udGFpbmVyLnJlZ2lzdHJ5LmdldChub3Jt
YWxpemVkTmFtZSk7Ci0gICAgICAgICAgICBjb250YWluZXIucmVzb2x2ZUNhY2hlLnNldChub3Jt
YWxpemVkTmFtZSwgcmVzb2x2ZWQpOwotCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBoYXMoY29udGFpbmVyLCBmdWxsTmFtZSkgewot
ICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5jYWNoZS5oYXMoZnVsbE5hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biAhIWNvbnRhaW5lci5yZXNvbHZlKGZ1bGxOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGxvb2t1cChjb250YWluZXIsIGZ1bGxOYW1lLCBvcHRpb25zKSB7Ci0gICAgICAgICAg
ICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5j
YWNoZS5oYXMoZnVsbE5hbWUpICYmIG9wdGlvbnMuc2luZ2xldG9uICE9PSBmYWxzZSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuY2FjaGUuZ2V0KGZ1bGxOYW1lKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5zdGFudGlhdGUoY29udGFpbmVy
LCBmdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
aXNTaW5nbGV0b24oY29udGFpbmVyLCBmdWxsTmFtZSkgJiYgb3B0aW9ucy5zaW5nbGV0b24gIT09
IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLmNhY2hlLnNldChmdWxsTmFtZSwg
dmFsdWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbGxlZ2FsQ2hpbGRPcGVyYXRpb24ob3BlcmF0aW9u
KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iob3BlcmF0aW9uICsgJyBpcyBub3QgY3Vy
cmVudGx5IHN1cHBvcnRlZCBvbiBjaGlsZCBjb250YWluZXJzJyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBpc1NpbmdsZXRvbihjb250YWluZXIsIGZ1bGxOYW1lKSB7Ci0gICAgICAg
ICAgICB2YXIgc2luZ2xldG9uID0gb3B0aW9uKGNvbnRhaW5lciwgZnVsbE5hbWUsICdzaW5nbGV0
b24nKTsKLQotICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbiAhPT0gZmFsc2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBidWlsZEluamVjdGlvbnMoY29udGFpbmVyLCBpbmplY3Rp
b25zKSB7Ci0gICAgICAgICAgICB2YXIgaGFzaCA9IHt9OwotCi0gICAgICAgICAgICBpZiAoIWlu
amVjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIGluamVjdGlvbiwgaW5qZWN0YWJsZTsKLQotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGluamVjdGlvbnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBpbmplY3Rpb24gPSBpbmplY3Rpb25zW2ldOwotICAgICAg
ICAgICAgICAgIGluamVjdGFibGUgPSBsb29rdXAoY29udGFpbmVyLCBpbmplY3Rpb24uZnVsbE5h
bWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKGluamVjdGFibGUgIT09IHVuZGVmaW5lZCkgewot
ICAgICAgICAgICAgICAgICAgICBoYXNoW2luamVjdGlvbi5wcm9wZXJ0eV0gPSBpbmplY3RhYmxl
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcignQXR0ZW1wdGluZyB0byBpbmplY3QgYW4gdW5rbm93biBpbmplY3Rpb246IGAnICsg
aW5qZWN0aW9uLmZ1bGxOYW1lICsgJ2AnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gb3B0aW9uKGNvbnRhaW5lciwgZnVsbE5hbWUsIG9wdGlvbk5hbWUpIHsKLSAgICAgICAg
ICAgIHZhciBvcHRpb25zID0gY29udGFpbmVyLl9vcHRpb25zLmdldChmdWxsTmFtZSk7Ci0KLSAg
ICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnNbb3B0aW9uTmFtZV0gIT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zW29wdGlvbk5hbWVdOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgdHlwZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07
Ci0gICAgICAgICAgICBvcHRpb25zID0gY29udGFpbmVyLl90eXBlT3B0aW9ucy5nZXQodHlwZSk7
Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9w
dGlvbnNbb3B0aW9uTmFtZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBmYWN0b3J5Rm9yKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsKLSAgICAgICAgICAgIHZh
ciBjYWNoZSA9IGNvbnRhaW5lci5mYWN0b3J5Q2FjaGU7Ci0gICAgICAgICAgICBpZiAoY2FjaGUu
aGFzKGZ1bGxOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoZnVsbE5h
bWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGZhY3RvcnkgPSBjb250YWluZXIu
cmVzb2x2ZShmdWxsTmFtZSk7Ci0gICAgICAgICAgICBpZiAoZmFjdG9yeSA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgdHlwZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07Ci0gICAgICAgICAgICBpZiAoIWZh
Y3RvcnkgfHwgdHlwZW9mIGZhY3RvcnkuZXh0ZW5kICE9PSAnZnVuY3Rpb24nIHx8ICghRW1iZXIu
TU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TICYmIHR5cGUgPT09ICdtb2RlbCcpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVE9ETzogdGhpbmsgYWJvdXQgYSAnc2FmZScgbWVyZ2Ugc3R5bGUgZXh0ZW5z
aW9uCi0gICAgICAgICAgICAgICAgLy8gZm9yIG5vdyBqdXN0IGZhbGxiYWNrIHRvIGNyZWF0ZSB0
aW1lIGluamVjdGlvbgotICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5OwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5qZWN0aW9ucyA9IGluamVjdGlvbnNG
b3IoY29udGFpbmVyLCBmdWxsTmFtZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGZhY3RvcnlJbmpl
Y3Rpb25zID0gZmFjdG9yeUluamVjdGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFtZSk7Ci0KLSAg
ICAgICAgICAgICAgICBmYWN0b3J5SW5qZWN0aW9ucy5fdG9TdHJpbmcgPSBjb250YWluZXIubWFr
ZVRvU3RyaW5nKGZhY3RvcnksIGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgICAgIHZhciBpbmpl
Y3RlZEZhY3RvcnkgPSBmYWN0b3J5LmV4dGVuZChpbmplY3Rpb25zKTsKLSAgICAgICAgICAgICAg
ICBpbmplY3RlZEZhY3RvcnkucmVvcGVuQ2xhc3MoZmFjdG9yeUluamVjdGlvbnMpOwotCi0gICAg
ICAgICAgICAgICAgY2FjaGUuc2V0KGZ1bGxOYW1lLCBpbmplY3RlZEZhY3RvcnkpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGluamVjdGVkRmFjdG9yeTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGluamVjdGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFt
ZSkgewotICAgICAgICAgICAgdmFyIHNwbGl0TmFtZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JyksCi0g
ICAgICAgICAgICB0eXBlID0gc3BsaXROYW1lWzBdLAotICAgICAgICAgICAgaW5qZWN0aW9ucyA9
IFtdOwotCi0gICAgICAgICAgICBpbmplY3Rpb25zID0gaW5qZWN0aW9ucy5jb25jYXQoY29udGFp
bmVyLnR5cGVJbmplY3Rpb25zLmdldCh0eXBlKSB8fCBbXSk7Ci0gICAgICAgICAgICBpbmplY3Rp
b25zID0gaW5qZWN0aW9ucy5jb25jYXQoY29udGFpbmVyLmluamVjdGlvbnNbZnVsbE5hbWVdIHx8
IFtdKTsKLQotICAgICAgICAgICAgaW5qZWN0aW9ucyA9IGJ1aWxkSW5qZWN0aW9ucyhjb250YWlu
ZXIsIGluamVjdGlvbnMpOwotICAgICAgICAgICAgaW5qZWN0aW9ucy5fZGVidWdDb250YWluZXJL
ZXkgPSBmdWxsTmFtZTsKLSAgICAgICAgICAgIGluamVjdGlvbnMuY29udGFpbmVyID0gY29udGFp
bmVyOwotCi0gICAgICAgICAgICByZXR1cm4gaW5qZWN0aW9uczsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGZhY3RvcnlJbmplY3Rpb25zRm9yKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsK
LSAgICAgICAgICAgIHZhciBzcGxpdE5hbWUgPSBmdWxsTmFtZS5zcGxpdCgnOicpLAotICAgICAg
ICAgICAgdHlwZSA9IHNwbGl0TmFtZVswXSwKLSAgICAgICAgICAgIGZhY3RvcnlJbmplY3Rpb25z
ID0gW107Ci0KLSAgICAgICAgICAgIGZhY3RvcnlJbmplY3Rpb25zID0gZmFjdG9yeUluamVjdGlv
bnMuY29uY2F0KGNvbnRhaW5lci5mYWN0b3J5VHlwZUluamVjdGlvbnMuZ2V0KHR5cGUpIHx8IFtd
KTsKLSAgICAgICAgICAgIGZhY3RvcnlJbmplY3Rpb25zID0gZmFjdG9yeUluamVjdGlvbnMuY29u
Y2F0KGNvbnRhaW5lci5mYWN0b3J5SW5qZWN0aW9uc1tmdWxsTmFtZV0gfHwgW10pOwotCi0gICAg
ICAgICAgICBmYWN0b3J5SW5qZWN0aW9ucyA9IGJ1aWxkSW5qZWN0aW9ucyhjb250YWluZXIsIGZh
Y3RvcnlJbmplY3Rpb25zKTsKLSAgICAgICAgICAgIGZhY3RvcnlJbmplY3Rpb25zLl9kZWJ1Z0Nv
bnRhaW5lcktleSA9IGZ1bGxOYW1lOwotCi0gICAgICAgICAgICByZXR1cm4gZmFjdG9yeUluamVj
dGlvbnM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnN0YW50aWF0ZShjb250YWlu
ZXIsIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgZmFjdG9yeSA9IGZhY3RvcnlGb3IoY29u
dGFpbmVyLCBmdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb24oY29udGFpbmVyLCBm
dWxsTmFtZSwgJ2luc3RhbnRpYXRlJykgPT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhY3Rvcnk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmYWN0b3J5KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9u
JykgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVh
dGUgYW4gaW5zdGFuY2Ugb2YgXCcnICsgZnVsbE5hbWUgKyAnXCcuICcgKwotICAgICAgICAgICAg
ICAgICAgICAnTW9zdCBsaWtlbHkgYW4gaW1wcm9wZXJseSBkZWZpbmVkIGNsYXNzIG9yIGFuIGlu
dmFsaWQgbW9kdWxlIGV4cG9ydC4nKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIGZhY3RvcnkuZXh0ZW5kID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGUgZmFjdG9yeSB3YXMgZXh0ZW5kYWJsZSBhbmQgaXMg
YWxyZWFkeSBpbmplY3RlZAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS5jcmVh
dGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBh
c3N1bWUgdGhlIGZhY3Rvcnkgd2FzIGV4dGVuZGFibGUKLSAgICAgICAgICAgICAgICAgICAgLy8g
dG8gY3JlYXRlIHRpbWUgaW5qZWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBz
dXBwb3J0IG5ldydpbmcgZm9yIGluc3RhbnRpYXRpb24gYW5kIG1lcmdlIGluamVjdGlvbnMgZm9y
IHB1cmUgSlMgRnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5LmNy
ZWF0ZShpbmplY3Rpb25zRm9yKGNvbnRhaW5lciwgZnVsbE5hbWUpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBlYWNoRGVz
dHJveWFibGUoY29udGFpbmVyLCBjYWxsYmFjaykgewotICAgICAgICAgICAgY29udGFpbmVyLmNh
Y2hlLmVhY2hMb2NhbChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG9wdGlvbihjb250YWluZXIsIGtleSwgJ2luc3RhbnRpYXRlJykgPT09IGZhbHNlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2sodmFsdWUpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiByZXNldENhY2hlKGNvbnRhaW5lcikgewotICAgICAgICAgICAgY29udGFpbmVy
LmNhY2hlLmVhY2hMb2NhbChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG9wdGlvbihjb250YWluZXIsIGtleSwgJ2luc3RhbnRpYXRlJykgPT09IGZhbHNlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdmFsdWUuZGVzdHJveSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBjb250
YWluZXIuY2FjaGUuZGljdCA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRk
VHlwZUluamVjdGlvbihydWxlcywgdHlwZSwgcHJvcGVydHksIGZ1bGxOYW1lKSB7Ci0gICAgICAg
ICAgICB2YXIgaW5qZWN0aW9ucyA9IHJ1bGVzLmdldCh0eXBlKTsKLQotICAgICAgICAgICAgaWYg
KCFpbmplY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgaW5qZWN0aW9ucyA9IFtdOwotICAgICAg
ICAgICAgICAgIHJ1bGVzLnNldCh0eXBlLCBpbmplY3Rpb25zKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW5qZWN0aW9ucy5wdXNoKHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eTog
cHJvcGVydHksCi0gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGZ1bGxOYW1lCi0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBWQUxJRF9GVUxMX05BTUVfUkVHRVhQID0g
L15bXjpdKy4rOlteOl0rJC87Ci0gICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVsbE5hbWUoZnVs
bE5hbWUpIHsKLSAgICAgICAgICAgIGlmICghVkFMSURfRlVMTF9OQU1FX1JFR0VYUC50ZXN0KGZ1
bGxOYW1lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQg
RnVsbG5hbWUsIGV4cGVjdGVkOiBgdHlwZTpuYW1lYCBnb3Q6ICcgKyBmdWxsTmFtZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGFkZEluamVjdGlvbihydWxlcywgZmFjdG9yeU5hbWUsIHByb3BlcnR5LCBpbmpl
Y3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICB2YXIgaW5qZWN0aW9ucyA9IHJ1bGVzW2ZhY3RvcnlO
YW1lXSA9IHJ1bGVzW2ZhY3RvcnlOYW1lXSB8fCBbXTsKLSAgICAgICAgICAgIGluamVjdGlvbnMu
cHVzaCh7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5LAotICAgICAgICAgICAg
ICAgIGZ1bGxOYW1lOiBpbmplY3Rpb25OYW1lIAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29udGFpbmVyOwotICAgIH0pOwot
ICAgIGRlZmluZSgiY29udGFpbmVyL2luaGVyaXRpbmdfZGljdCIsCi0gICAgWyJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICAvLyBBIHNhZmUgYW5kIHNpbXBsZSBpbmhlcml0aW5nIG9iamVjdC4KLSAgICAgICAgZnVu
Y3Rpb24gSW5oZXJpdGluZ0RpY3QocGFyZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnBhcmVudCA9
IHBhcmVudDsKLSAgICAgICAgICAgIHRoaXMuZGljdCA9IHt9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgSW5oZXJpdGluZ0RpY3QucHJvdG90eXBlID0gewotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IHBhcmVudAotICAgICAgICAgICAgICAgICAgICBAdHlw
ZSBJbmhlcml0aW5nRGljdAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAg
ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBwYXJlbnQ6IG51bGwsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBPYmplY3QgdXNlZCB0byBzdG9yZSB0aGUgY3Vy
cmVudCBub2RlcyBkYXRhLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBkaWN0Ci0g
ICAgICAgICAgICAgICAgICAgIEB0eXBlIE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAZGVm
YXVsdCBPYmplY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkaWN0OiBudWxs
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0cmlldmUgdGhlIHZh
bHVlIGdpdmVuIGEga2V5LCBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCBhdCB0aGUgY3VycmVudAot
ICAgICAgICAgICAgICAgICAgICBsZXZlbCB1c2UgaXQsIG90aGVyd2lzZSB3YWxrIHVwIHRoZSBw
YXJlbnQgaGllcmFyY2h5IGFuZCB0cnkgYWdhaW4uIElmCi0gICAgICAgICAgICAgICAgICAgIG5v
IG1hdGNoaW5nIGtleSBpcyBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZC4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGdldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
a2V5Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge2FueX0KLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZh
ciBkaWN0ID0gdGhpcy5kaWN0OwotCi0gICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzT3duUHJv
cGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdFtrZXldOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KGtleSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFNldCB0aGUgZ2l2ZW4gdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXksIGF0IHRoZSBjdXJy
ZW50IGxldmVsLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2V0Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtBbnl9IHZhbHVlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0OiBmdW5j
dGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kaWN0W2tleV0gPSB2YWx1
ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBEZWxldGUgdGhlIGdpdmVuIGtleQotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVt
b3ZlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLmRpY3Rba2V5XTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBn
aXZlbiBhIGtleSwgaWYgdGhlIGtleSBpcyBwcmVzZW50IGF0IHRoZSBjdXJyZW50Ci0gICAgICAg
ICAgICAgICAgICAgIGxldmVsIHJldHVybiB0cnVlLCBvdGhlcndpc2Ugd2FsayB1cCB0aGUgcGFy
ZW50IGhpZXJhcmNoeSBhbmQgdHJ5IGFnYWluLiBJZgotICAgICAgICAgICAgICAgICAgICBubyBt
YXRjaGluZyBrZXkgaXMgZm91bmQsIHJldHVybiBmYWxzZS4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIGhhcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5Ci0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIg
ZGljdCA9IHRoaXMuZGljdDsKLQotICAgICAgICAgICAgICAgIGlmIChkaWN0Lmhhc093blByb3Bl
cnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5oYXMoa2V5KTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0ZSBhbmQgaW52b2tlIGEgY2Fs
bGJhY2sgZm9yIGVhY2ggbG9jYWwga2V5LXZhbHVlIHBhaXIuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBlYWNoTG9jYWwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bn0gY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGJpbmRpbmcK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlYWNoTG9jYWw6IGZ1bmN0aW9uKGNh
bGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpY3QgPSB0aGlzLmRpY3Q7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRpY3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGRpY3QuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZywgcHJvcCwgZGljdFtwcm9wXSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEluaGVyaXRpbmdEaWN0
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItYXBwbGljYXRpb24iLAotICAgIFsiZW1iZXIt
bWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiLCAiZW1iZXItYXBw
bGljYXRpb24vc3lzdGVtL2RhZyIsICJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vcmVzb2x2ZXIi
LCAiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uIiwgImVtYmVyLWFwcGxpY2F0
aW9uL2V4dC9jb250cm9sbGVyIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVu
Y3k1X18sIF9fZGVwZW5kZW5jeTZfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcnVu
TG9hZEhvb2tzID0gX19kZXBlbmRlbmN5Ml9fLnJ1bkxvYWRIb29rczsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgIEVtYmVyIEFwcGxpY2F0aW9uCi0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1i
ZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KLSAgICAgICAgICAg
IEByZXF1aXJlcyBlbWJlci12aWV3cywgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQot
ICAgICAgICB2YXIgREFHID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBSZXNvbHZlciA9IF9fZGVwZW5kZW5jeTRfXy5SZXNvbHZlcjsKLSAgICAgICAgdmFyIERlZmF1
bHRSZXNvbHZlciA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQXBw
bGljYXRpb24gPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gc2lkZSBl
ZmZlY3Qgb2YgZXh0ZW5kaW5nIENvbnRyb2xsZXJNaXhpbgotCi0gICAgICAgIEVtYmVyLkFwcGxp
Y2F0aW9uID0gQXBwbGljYXRpb247Ci0gICAgICAgIEVtYmVyLkRBRyA9IERBRzsKLSAgICAgICAg
RW1iZXIuUmVzb2x2ZXIgPSBSZXNvbHZlcjsKLSAgICAgICAgRW1iZXIuRGVmYXVsdFJlc29sdmVy
ID0gRGVmYXVsdFJlc29sdmVyOwotCi0gICAgICAgIHJ1bkxvYWRIb29rcygnRW1iZXIuQXBwbGlj
YXRpb24nLCBBcHBsaWNhdGlvbik7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1hcHBsaWNh
dGlvbi9leHQvY29udHJvbGxlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1l
dGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0
YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAi
ZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsICJlbWJlci1yb3V0aW5nL3N5c3RlbS9j
b250cm9sbGVyX2ZvciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2Rl
cGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVu
Y3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVy
LWFwcGxpY2F0aW9uCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQKLSAgICAgICAg
dmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVu
ZGVuY3kzX18uc2V0OwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTRfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVwZW5kZW5jeTVfXy5pbnNwZWN0
OwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k2X18uY29tcHV0ZWQ7Ci0gICAg
ICAgIHZhciBDb250cm9sbGVyTWl4aW4gPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVuY3k1X18ubWV0YTsKLSAgICAgICAgdmFyIGNvbnRy
b2xsZXJGb3IgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLQotICAgICAgICBmdW5jdGlv
biB2ZXJpZnlOZWVkc0RlcGVuZGVuY2llcyhjb250cm9sbGVyLCBjb250YWluZXIsIG5lZWRzKSB7
Ci0gICAgICAgICAgICB2YXIgZGVwZW5kZW5jeSwgaSwgbCwgbWlzc2luZyA9IFtdOwotCi0gICAg
ICAgICAgICBmb3IgKGkgPSAwLCBsID0gbmVlZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZGVwZW5kZW5jeSA9IG5lZWRzW2ldOwotCi0gICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KGluc3BlY3QoY29udHJvbGxlcikgKyAiI25lZWRzIG11c3Qgbm90IHNwZWNpZnkg
ZGVwZW5kZW5jaWVzIHdpdGggcGVyaW9kcyBpbiB0aGVpciBuYW1lcyAoIiArIGRlcGVuZGVuY3kg
KyAiKSIsIGRlcGVuZGVuY3kuaW5kZXhPZignLicpID09PSAtMSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZGVwZW5kZW5jeS5pbmRleE9mKCc6JykgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlcGVuZGVuY3kgPSAiY29udHJvbGxlcjoiICsgZGVwZW5kZW5jeTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgYXNzZXJ0IHRvIHN0aWxsIGRv
IHZlcmlmaWNhdGlvbiBidXQgbm90IHN0cmluZyBjb25jYXQgaW4gcHJvZHVjdGlvbgotICAgICAg
ICAgICAgICAgIGlmICghY29udGFpbmVyLmhhcyhkZXBlbmRlbmN5KSkgewotICAgICAgICAgICAg
ICAgICAgICBtaXNzaW5nLnB1c2goZGVwZW5kZW5jeSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoaW5zcGVjdChjb250cm9sbGVyKSArICIgbmVlZHMg
WyAiICsgbWlzc2luZy5qb2luKCcsICcpICsgIiBdIGJ1dCAiICsgKG1pc3NpbmcubGVuZ3RoID4g
MSA/ICd0aGV5JyA6ICdpdCcpICsgIiBjb3VsZCBub3QgYmUgZm91bmQiKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkZWZhdWx0Q29udHJvbGxlcnNDb21wdXRlZFBy
b3BlcnR5ID0gY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgY29udHJvbGxl
ciA9IHRoaXM7Ci0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgbmVlZHM6
IGdldChjb250cm9sbGVyLCAnbmVlZHMnKSwKLSAgICAgICAgICAgICAgICBjb250YWluZXI6IGdl
dChjb250cm9sbGVyLCAnY29udGFpbmVyJyksCi0gICAgICAgICAgICAgICAgdW5rbm93blByb3Bl
cnR5OiBmdW5jdGlvbihjb250cm9sbGVyTmFtZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
bmVlZHMgPSB0aGlzLm5lZWRzLAotICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LCBpLCBs
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gbmVlZHMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5ID0gbmVlZHNbaV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeSA9PT0gY29udHJvbGxlck5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIu
bG9va3VwKCdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
YXIgZXJyb3JNZXNzYWdlID0gaW5zcGVjdChjb250cm9sbGVyKSArICcjbmVlZHMgZG9lcyBub3Qg
aW5jbHVkZSBgJyArIGNvbnRyb2xsZXJOYW1lICsgJ2AuIFRvIGFjY2VzcyB0aGUgJyArIGNvbnRy
b2xsZXJOYW1lICsgJyBjb250cm9sbGVyIGZyb20gJyArIGluc3BlY3QoY29udHJvbGxlcikgKyAn
LCAnICsgaW5zcGVjdChjb250cm9sbGVyKSArICcgc2hvdWxkIGhhdmUgYSBgbmVlZHNgIHByb3Bl
cnR5IHRoYXQgaXMgYW4gYXJyYXkgb2YgdGhlIGNvbnRyb2xsZXJzIGl0IGhhcyBhY2Nlc3MgdG8u
JzsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGVycm9yTWVz
c2FnZSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBzZXRVbmtub3duUHJv
cGVydHk6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiWW91IGNhbm5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIGBjb250cm9sbGVy
cy4iICsga2V5ICsgImAgb2YgIiArIGluc3BlY3QoY29udHJvbGxlcikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBAY2xhc3MgQ29udHJvbGxlck1peGluCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIENvbnRyb2xsZXJNaXhpbi5yZW9wZW4oewot
ICAgICAgICAgICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogWyduZWVkcyddLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQW4gYXJyYXkgb2Ygb3RoZXIgY29udHJvbGxl
ciBvYmplY3RzIGF2YWlsYWJsZSBpbnNpZGUKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vz
IG9mIHRoaXMgY29udHJvbGxlciB2aWEgdGhlIGBjb250cm9sbGVyc2AKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHk6Ci0KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4g
eW91IGRlZmluZSBhIGNvbnRyb2xsZXI6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuQ29tbWVudHNDb250cm9sbGVyID0gRW1iZXIu
QXJyYXlDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmVlZHM6IFsn
cG9zdCddCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24ncyBzaW5nbGUgaW5zdGFuY2Ug
b2YgdGhlc2Ugb3RoZXIKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcnMgYXJlIGFjY2Vz
c2libGUgYnkgbmFtZSB0aHJvdWdoIHRoZQotICAgICAgICAgICAgICAgICAgICBgY29udHJvbGxl
cnNgIHByb3BlcnR5OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2NvbnRyb2xsZXJzLnBvc3QnKTsgLy8gaW5zdGFuY2Ug
b2YgQXBwLlBvc3RDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIEdpdmVuIHRoYXQgeW91IGhhdmUgYSBuZXN0ZWQgY29udHJvbGxlciAobmVz
dGVkIHJlc291cmNlKToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcC5Db21tZW50c05ld0NvbnRyb2xsZXIgPSBFbWJlci5PYmplY3RD
b250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBkZWZpbmUgYSBjb250
cm9sbGVyIHRoYXQgcmVxdWlyZXMgYWNjZXNzIHRvIGEgbmVzdGVkIG9uZToKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5JbmRleENv
bnRyb2xsZXIgPSBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgICAgICAgbmVlZHM6IFsnY29tbWVudHNOZXcnXQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwg
YmUgYWJsZSB0byBnZXQgYWNjZXNzIHRvIGl0OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2NvbnRyb2xsZXJzLmNvbW1l
bnRzTmV3Jyk7IC8vIGluc3RhbmNlIG9mIEFwcC5Db21tZW50c05ld0NvbnRyb2xsZXIKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvbmx5IGF2
YWlsYWJsZSBmb3Igc2luZ2xldG9uIGNvbnRyb2xsZXJzLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSB7QXJyYXl9IG5lZWRzCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IFtd
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmVlZHM6IFtdLAotCi0gICAgICAg
ICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmVlZHMgPSBnZXQo
dGhpcywgJ25lZWRzJyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGdldChuZWVkcywg
J2xlbmd0aCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCcgYCcgKyBpbnNwZWN0KHRoaXMpICsgJyBzcGVjaWZp
ZXMgYG5lZWRzYCwgYnV0IGRvZXMgJyArCi0gICAgICAgICAgICAgICAgICAgICJub3QgaGF2ZSBh
IGNvbnRhaW5lci4gUGxlYXNlIGVuc3VyZSB0aGlzIGNvbnRyb2xsZXIgd2FzICIgKwotICAgICAg
ICAgICAgICAgICAgICAiaW5zdGFudGlhdGVkIHdpdGggYSBjb250YWluZXIuIiwKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250YWluZXIgfHwgbWV0YSh0aGlzLCBmYWxzZSkuZGVzY3MuY29u
dHJvbGxlcnMgIT09IGRlZmF1bHRDb250cm9sbGVyc0NvbXB1dGVkUHJvcGVydHkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmVyaWZ5TmVlZHNEZXBlbmRlbmNpZXModGhpcywgdGhpcy5jb250YWluZXIsIG5lZWRz
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIG5l
ZWRzIHRoZW4gaW5pdGlhbGl6ZSBjb250cm9sbGVycyBwcm94eQotICAgICAgICAgICAgICAgICAg
ICBnZXQodGhpcywgJ2NvbnRyb2xsZXJzJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNvbnRy
b2xsZXJGb3IKLSAgICAgICAgICAgICAgICAgICAgQHNlZSB7RW1iZXIuUm91dGUjY29udHJvbGxl
ckZvcn0KLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBuZWVkc2AgaW5zdGVh
ZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRyb2xsZXJGb3I6IGZ1bmN0
aW9uKGNvbnRyb2xsZXJOYW1lKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCJD
b250cm9sbGVyI2NvbnRyb2xsZXJGb3IgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBDb250cm9s
bGVyI25lZWRzIGluc3RlYWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlckZv
cihnZXQodGhpcywgJ2NvbnRhaW5lcicpLCBjb250cm9sbGVyTmFtZSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU3RvcmVzIHRoZSBpbnN0
YW5jZXMgb2Ygb3RoZXIgY29udHJvbGxlcnMgYXZhaWxhYmxlIGZyb20gd2l0aGluCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMgY29udHJvbGxlci4gQW55IGNvbnRyb2xsZXIgbGlzdGVkIGJ5IG5h
bWUgaW4gdGhlIGBuZWVkc2AKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgd2lsbCBiZSBh
Y2Nlc3NpYmxlIGJ5IG5hbWUgdGhyb3VnaCB0aGlzIHByb3BlcnR5LgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLkNvbW1lbnRzQ29u
dHJvbGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAgICAg
ICAgICAgIG5lZWRzOiBbJ3Bvc3QnXSwKLSAgICAgICAgICAgICAgICAgICAgICBwb3N0VGl0bGU6
IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBvc3QgPSB0
aGlzLmdldCgnY29udHJvbGxlcnMucG9zdCcpOyAvLyBpbnN0YW5jZSBvZiBBcHAuUG9zdENvbnRy
b2xsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zdC5nZXQoJ3Rp
dGxlJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgnY29udHJvbGxlcnMucG9z
dC50aXRsZScpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBAc2VlIHtFbWJlci5Db250cm9sbGVyTWl4aW4jbmVl
ZHN9Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb250cm9sbGVycwot
ICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgY29udHJvbGxlcnM6IGRlZmF1bHRDb250cm9sbGVyc0NvbXB1dGVkUHJvcGVy
dHkKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IENvbnRy
b2xsZXJNaXhpbjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3Rl
bS9hcHBsaWNhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L2xhenlfbG9hZCIsICJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZGFnIiwgImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL25hbWVzcGFjZSIsICJlbWJlci1ydW50aW1lL21peGlucy9kZWZlcnJlZCIsICJl
bWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vcmVzb2x2ZXIiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0i
LCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiY29udGFpbmVy
L2NvbnRhaW5lciIsICJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIiLCAiZW1i
ZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL29i
amVjdF9jb250cm9sbGVyIiwgImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvYXJyYXlfY29udHJv
bGxlciIsICJlbWJlci12aWV3cy9zeXN0ZW0vZXZlbnRfZGlzcGF0Y2hlciIsICJlbWJlci12aWV3
cy9zeXN0ZW0vanF1ZXJ5IiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlIiwgImVtYmVyLXJv
dXRpbmcvc3lzdGVtL3JvdXRlciIsICJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2hhc2hfbG9jYXRp
b24iLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9oaXN0b3J5X2xvY2F0aW9uIiwgImVtYmVyLXJv
dXRpbmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbiIsICJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL25v
bmVfbG9jYXRpb24iLCAiZW1iZXItcm91dGluZy9zeXN0ZW0vY2FjaGUiLCAiZW1iZXItbWV0YWwv
Y29yZSIsICJlbWJlci1oYW5kbGViYXJzLWNvbXBpbGVyIiwgImVtYmVyLWFwcGxpY2F0aW9uL3N5
c3RlbS9kZXByZWNhdGVkLWNvbnRhaW5lciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19k
ZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBl
bmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRl
bmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywgX19kZXBlbmRlbmN5MTlfXywgX19kZXBlbmRlbmN5
MjBfXywgX19kZXBlbmRlbmN5MjFfXywgX19kZXBlbmRlbmN5MjJfXywgX19kZXBlbmRlbmN5MjNf
XywgX19kZXBlbmRlbmN5MjRfXywgX19kZXBlbmRlbmN5MjVfXywgX19kZXBlbmRlbmN5MjZfXywg
X19kZXBlbmRlbmN5MjdfXywgX19kZXBlbmRlbmN5MjhfXywgX19leHBvcnRzX18pIHsKLSAgICAg
ICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIC8vIEVtYmVyLkZFQVRVUkVTLCBFbWJlci5kZXByZWNhdGUsIEVtYmVyLmFzc2VydCwgRW1i
ZXIubGlicmFyaWVzLCBMT0dfVkVSU0lPTiwgTmFtZXNwYWNlLCBCT09URUQKLSAgICAgICAgdmFy
IGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVu
Y3kzX18uc2V0OwotICAgICAgICB2YXIgcnVuTG9hZEhvb2tzID0gX19kZXBlbmRlbmN5NF9fLnJ1
bkxvYWRIb29rczsKLSAgICAgICAgdmFyIERBRyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgTmFtZXNwYWNlID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBEZWZlcnJlZE1peGluID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBEZWZhdWx0UmVzb2x2ZXIgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTlfXy5jcmVhdGU7Ci0gICAgICAgIHZh
ciBydW4gPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjYW5JbnZv
a2UgPSBfX2RlcGVuZGVuY3kxMV9fLmNhbkludm9rZTsKLSAgICAgICAgdmFyIENvbnRhaW5lciA9
IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIENvbnRyb2xsZXIgPSBf
X2RlcGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbnVtZXJhYmxlVXRpbHMg
PSBfX2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBPYmplY3RDb250cm9s
bGVyID0gX19kZXBlbmRlbmN5MTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQXJyYXlDb250
cm9sbGVyID0gX19kZXBlbmRlbmN5MTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRXZlbnRE
aXNwYXRjaGVyID0gX19kZXBlbmRlbmN5MTdfX1siZGVmYXVsdCJdOwotICAgICAgICAvL2ltcG9y
dCBDb250YWluZXJEZWJ1Z0FkYXB0ZXIgZnJvbSAiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29u
dGFpbmVyX2RlYnVnX2FkYXB0ZXIiOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19kZXBlbmRlbmN5
MThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgUm91dGUgPSBfX2RlcGVuZGVuY3kxOV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBSb3V0ZXIgPSBfX2RlcGVuZGVuY3kyMF9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBIYXNoTG9jYXRpb24gPSBfX2RlcGVuZGVuY3kyMV9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBIaXN0b3J5TG9jYXRpb24gPSBfX2RlcGVuZGVuY3kyMl9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBBdXRvTG9jYXRpb24gPSBfX2RlcGVuZGVuY3kyM19fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBOb25lTG9jYXRpb24gPSBfX2RlcGVuZGVuY3kyNF9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBCdWNrZXRDYWNoZSA9IF9fZGVwZW5kZW5jeTI1X19bImRlZmF1
bHQiXTsKLQotICAgICAgICB2YXIgSyA9IF9fZGVwZW5kZW5jeTI2X18uSzsKLSAgICAgICAgdmFy
IEVtYmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTI3X19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIERlcHJlY2F0ZWRDb250YWluZXIgPSBfX2RlcGVuZGVuY3kyOF9fWyJkZWZhdWx0Il07Ci0K
LSAgICAgICAgdmFyIENvbnRhaW5lckRlYnVnQWRhcHRlcjsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQW4gaW5zdGFuY2Ugb2YgYEVtYmVyLkFwcGxpY2F0aW9uYCBpcyB0aGUgc3RhcnRp
bmcgcG9pbnQgZm9yIGV2ZXJ5IEVtYmVyCi0gICAgICAgICAgICAgIGFwcGxpY2F0aW9uLiBJdCBo
ZWxwcyB0byBpbnN0YW50aWF0ZSwgaW5pdGlhbGl6ZSBhbmQgY29vcmRpbmF0ZSB0aGUgbWFueQot
ICAgICAgICAgICAgICBvYmplY3RzIHRoYXQgbWFrZSB1cCB5b3VyIGFwcC4KLQotICAgICAgICAg
ICAgICBFYWNoIEVtYmVyIGFwcCBoYXMgb25lIGFuZCBvbmx5IG9uZSBgRW1iZXIuQXBwbGljYXRp
b25gIG9iamVjdC4gSW4gZmFjdCwgdGhlCi0gICAgICAgICAgICAgIHZlcnkgZmlyc3QgdGhpbmcg
eW91IHNob3VsZCBkbyBpbiB5b3VyIGFwcGxpY2F0aW9uIGlzIGNyZWF0ZSB0aGUgaW5zdGFuY2U6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB3aW5kb3cuQXBw
ID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIFR5cGljYWxseSwgdGhlIGFwcGxpY2F0aW9uIG9iamVjdCBpcyB0aGUgb25seSBn
bG9iYWwgdmFyaWFibGUuIEFsbCBvdGhlcgotICAgICAgICAgICAgICBjbGFzc2VzIGluIHlvdXIg
YXBwIHNob3VsZCBiZSBwcm9wZXJ0aWVzIG9uIHRoZSBgRW1iZXIuQXBwbGljYXRpb25gIGluc3Rh
bmNlLAotICAgICAgICAgICAgICB3aGljaCBoaWdobGlnaHRzIGl0cyBmaXJzdCByb2xlOiBhIGds
b2JhbCBuYW1lc3BhY2UuCi0KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZp
bmUgYSB2aWV3IGNsYXNzLCBpdCBtaWdodCBsb29rIGxpa2UgdGhpczoKLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5NeVZpZXcgPSBFbWJlci5WaWV3LmV4
dGVuZCgpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBj
YWxsaW5nIGBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKWAgd2lsbCBhdXRvbWF0aWNhbGx5IGlu
aXRpYWxpemUKLSAgICAgICAgICAgICAgeW91ciBhcHBsaWNhdGlvbiBieSBjYWxsaW5nIHRoZSBg
RW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZSgpYCBtZXRob2QuIElmCi0gICAgICAgICAgICAg
IHlvdSBuZWVkIHRvIGRlbGF5IGluaXRpYWxpemF0aW9uLCB5b3UgY2FuIGNhbGwgeW91ciBhcHAn
cyBgZGVmZXJSZWFkaW5lc3MoKWAKLSAgICAgICAgICAgICAgbWV0aG9kLiBXaGVuIHlvdSBhcmUg
cmVhZHkgZm9yIHlvdXIgYXBwIHRvIGJlIGluaXRpYWxpemVkLCBjYWxsIGl0cwotICAgICAgICAg
ICAgICBgYWR2YW5jZVJlYWRpbmVzcygpYCBtZXRob2QuCi0KLSAgICAgICAgICAgICAgWW91IGNh
biBkZWZpbmUgYSBgcmVhZHlgIG1ldGhvZCBvbiB0aGUgYEVtYmVyLkFwcGxpY2F0aW9uYCBpbnN0
YW5jZSwgd2hpY2gKLSAgICAgICAgICAgICAgd2lsbCBiZSBydW4gYnkgRW1iZXIgd2hlbiB0aGUg
YXBwbGljYXRpb24gaXMgaW5pdGlhbGl6ZWQuCi0KLSAgICAgICAgICAgICAgQmVjYXVzZSBgRW1i
ZXIuQXBwbGljYXRpb25gIGluaGVyaXRzIGZyb20gYEVtYmVyLk5hbWVzcGFjZWAsIGFueSBjbGFz
c2VzCi0gICAgICAgICAgICAgIHlvdSBjcmVhdGUgd2lsbCBoYXZlIHVzZWZ1bCBzdHJpbmcgcmVw
cmVzZW50YXRpb25zIHdoZW4gY2FsbGluZyBgdG9TdHJpbmcoKWAuCi0gICAgICAgICAgICAgIFNl
ZSB0aGUgYEVtYmVyLk5hbWVzcGFjZWAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KLQotICAgICAgICAgICAgICBXaGlsZSB5b3UgY2FuIHRoaW5rIG9mIHlvdXIgYEVtYmVyLkFw
cGxpY2F0aW9uYCBhcyBhIGNvbnRhaW5lciB0aGF0IGhvbGRzIHRoZQotICAgICAgICAgICAgICBv
dGhlciBjbGFzc2VzIGluIHlvdXIgYXBwbGljYXRpb24sIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVy
IHJlc3BvbnNpYmlsaXRpZXMKLSAgICAgICAgICAgICAgZ29pbmcgb24gdW5kZXItdGhlLWhvb2Qg
dGhhdCB5b3UgbWF5IHdhbnQgdG8gdW5kZXJzdGFuZC4KLQotICAgICAgICAgICAgICAjIyMgRXZl
bnQgRGVsZWdhdGlvbgotCi0gICAgICAgICAgICAgIEVtYmVyIHVzZXMgYSB0ZWNobmlxdWUgY2Fs
bGVkIF9ldmVudCBkZWxlZ2F0aW9uXy4gVGhpcyBhbGxvd3MgdGhlIGZyYW1ld29yawotICAgICAg
ICAgICAgICB0byBzZXQgdXAgYSBnbG9iYWwsIHNoYXJlZCBldmVudCBsaXN0ZW5lciBpbnN0ZWFk
IG9mIHJlcXVpcmluZyBlYWNoIHZpZXcgdG8KLSAgICAgICAgICAgICAgZG8gaXQgbWFudWFsbHku
IEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIGVhY2ggdmlldyByZWdpc3RlcmluZyBpdHMgb3duCi0g
ICAgICAgICAgICAgIGBtb3VzZWRvd25gIGxpc3RlbmVyIG9uIGl0cyBhc3NvY2lhdGVkIGVsZW1l
bnQsIEVtYmVyIHNldHMgdXAgYSBgbW91c2Vkb3duYAotICAgICAgICAgICAgICBsaXN0ZW5lciBv
biB0aGUgYGJvZHlgLgotCi0gICAgICAgICAgICAgIElmIGEgYG1vdXNlZG93bmAgZXZlbnQgb2Nj
dXJzLCBFbWJlciB3aWxsIGxvb2sgYXQgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQgYW5kCi0gICAg
ICAgICAgICAgIHN0YXJ0IHdhbGtpbmcgdXAgdGhlIERPTSBub2RlIHRyZWUsIGZpbmRpbmcgY29y
cmVzcG9uZGluZyB2aWV3cyBhbmQgaW52b2tpbmcKLSAgICAgICAgICAgICAgdGhlaXIgYG1vdXNl
RG93bmAgbWV0aG9kIGFzIGl0IGdvZXMuCi0KLSAgICAgICAgICAgICAgYEVtYmVyLkFwcGxpY2F0
aW9uYCBoYXMgYSBudW1iZXIgb2YgZGVmYXVsdCBldmVudHMgdGhhdCBpdCBsaXN0ZW5zIGZvciwg
YXMKLSAgICAgICAgICAgICAgd2VsbCBhcyBhIG1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgZXZlbnRz
IHRvIGNhbWVsLWNhc2VkIHZpZXcgbWV0aG9kIG5hbWVzLiBGb3IKLSAgICAgICAgICAgICAgZXhh
bXBsZSwgdGhlIGBrZXlwcmVzc2AgZXZlbnQgY2F1c2VzIHRoZSBga2V5UHJlc3NgIG1ldGhvZCBv
biB0aGUgdmlldyB0byBiZQotICAgICAgICAgICAgICBjYWxsZWQsIHRoZSBgZGJsY2xpY2tgIGV2
ZW50IGNhdXNlcyBgZG91YmxlQ2xpY2tgIHRvIGJlIGNhbGxlZCwgYW5kIHNvIG9uLgotCi0gICAg
ICAgICAgICAgIElmIHRoZXJlIGlzIGEgYnViYmxpbmcgYnJvd3NlciBldmVudCB0aGF0IEVtYmVy
IGRvZXMgbm90IGxpc3RlbiBmb3IgYnkKLSAgICAgICAgICAgICAgZGVmYXVsdCwgeW91IGNhbiBz
cGVjaWZ5IGN1c3RvbSBldmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmlldyBtZXRob2QK
LSAgICAgICAgICAgICAgbmFtZXMgYnkgc2V0dGluZyB0aGUgYXBwbGljYXRpb24ncyBgY3VzdG9t
RXZlbnRzYCBwcm9wZXJ0eToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAg
Y3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgICAgICAgICAgICAvLyBhZGQgc3VwcG9ydCBmb3IgdGhl
IHBhc3RlIGV2ZW50Ci0gICAgICAgICAgICAgICAgICBwYXN0ZTogInBhc3RlIgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBhcHBsaWNhdGlvbiBzZXRzIHVwIHRoZXNlIGV2ZW50IGxp
c3RlbmVycyBvbiB0aGUgZG9jdW1lbnQKLSAgICAgICAgICAgICAgYm9keS4gSG93ZXZlciwgaW4g
Y2FzZXMgd2hlcmUgeW91IGFyZSBlbWJlZGRpbmcgYW4gRW1iZXIgYXBwbGljYXRpb24gaW5zaWRl
Ci0gICAgICAgICAgICAgIGFuIGV4aXN0aW5nIHBhZ2UsIHlvdSBtYXkgd2FudCBpdCB0byBzZXQg
dXAgdGhlIGxpc3RlbmVycyBvbiBhbiBlbGVtZW50Ci0gICAgICAgICAgICAgIGluc2lkZSB0aGUg
Ym9keS4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgb25seSBldmVudHMgaW5zaWRl
IGEgRE9NIGVsZW1lbnQgd2l0aCB0aGUgSUQgb2YgYGVtYmVyLWFwcGAKLSAgICAgICAgICAgICAg
c2hvdWxkIGJlIGRlbGVnYXRlZCwgc2V0IHlvdXIgYXBwbGljYXRpb24ncyBgcm9vdEVsZW1lbnRg
IHByb3BlcnR5OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
d2luZG93LkFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAg
cm9vdEVsZW1lbnQ6ICcjZW1iZXItYXBwJwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGByb290RWxlbWVudGAgY2FuIGJlIGVpdGhlciBh
IERPTSBlbGVtZW50IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgc2VsZWN0b3IKLSAgICAgICAgICAg
ICAgc3RyaW5nLiBOb3RlIHRoYXQgKnZpZXdzIGFwcGVuZGVkIHRvIHRoZSBET00gb3V0c2lkZSB0
aGUgcm9vdCBlbGVtZW50IHdpbGwKLSAgICAgICAgICAgICAgbm90IHJlY2VpdmUgZXZlbnRzLiog
SWYgeW91IHNwZWNpZnkgYSBjdXN0b20gcm9vdCBlbGVtZW50LCBtYWtlIHN1cmUgeW91IG9ubHkK
LSAgICAgICAgICAgICAgYXBwZW5kIHZpZXdzIGluc2lkZSBpdCEKLQotICAgICAgICAgICAgICBU
byBsZWFybiBtb3JlIGFib3V0IHRoZSBhZHZhbnRhZ2VzIG9mIGV2ZW50IGRlbGVnYXRpb24gYW5k
IHRoZSBFbWJlciB2aWV3Ci0gICAgICAgICAgICAgIGxheWVyLCBhbmQgYSBsaXN0IG9mIHRoZSBl
dmVudCBsaXN0ZW5lcnMgdGhhdCBhcmUgc2V0dXAgYnkgZGVmYXVsdCwgdmlzaXQgdGhlCi0gICAg
ICAgICAgICAgIFtFbWJlciBWaWV3IExheWVyIGd1aWRlXShodHRwOi8vZW1iZXJqcy5jb20vZ3Vp
ZGVzL3VuZGVyc3RhbmRpbmctZW1iZXIvdGhlLXZpZXctbGF5ZXIvI3RvY19ldmVudC1kZWxlZ2F0
aW9uKS4KLQotICAgICAgICAgICAgICAjIyMgSW5pdGlhbGl6ZXJzCi0KLSAgICAgICAgICAgICAg
TGlicmFyaWVzIG9uIHRvcCBvZiBFbWJlciBjYW4gYWRkIGluaXRpYWxpemVycywgbGlrZSBzbzoK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkFwcGxp
Y2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICBuYW1lOiAnYXBpLWFkYXB0ZXIn
LAotCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCBhcHBs
aWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2FwaS1h
ZGFwdGVyOm1haW4nLCBBcGlBZGFwdGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbml0aWFsaXplcnMg
cHJvdmlkZSBhbiBvcHBvcnR1bml0eSB0byBhY2Nlc3MgdGhlIGNvbnRhaW5lciwgd2hpY2gKLSAg
ICAgICAgICAgICAgb3JnYW5pemVzIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cyBvZiBhbiBFbWJl
ciBhcHBsaWNhdGlvbi4gQWRkaXRpb25hbGx5Ci0gICAgICAgICAgICAgIHRoZXkgcHJvdmlkZSBh
IGNoYW5jZSB0byBhY2Nlc3MgdGhlIGluc3RhbnRpYXRlZCBhcHBsaWNhdGlvbi4gQmV5b25kCi0g
ICAgICAgICAgICAgIGJlaW5nIHVzZWQgZm9yIGxpYnJhcmllcywgaW5pdGlhbGl6ZXJzIGFyZSBh
bHNvIGEgZ3JlYXQgd2F5IHRvIG9yZ2FuaXplCi0gICAgICAgICAgICAgIGRlcGVuZGVuY3kgaW5q
ZWN0aW9uIG9yIHNldHVwIGluIHlvdXIgb3duIGFwcGxpY2F0aW9uLgotCi0gICAgICAgICAgICAg
ICMjIyBSb3V0aW5nCi0KLSAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gY3JlYXRpbmcgeW91
ciBhcHBsaWNhdGlvbidzIHJvdXRlciwgYEVtYmVyLkFwcGxpY2F0aW9uYCBpcwotICAgICAgICAg
ICAgICBhbHNvIHJlc3BvbnNpYmxlIGZvciB0ZWxsaW5nIHRoZSByb3V0ZXIgd2hlbiB0byBzdGFy
dCByb3V0aW5nLiBUcmFuc2l0aW9ucwotICAgICAgICAgICAgICBiZXR3ZWVuIHJvdXRlcyBjYW4g
YmUgbG9nZ2VkIHdpdGggdGhlIGBMT0dfVFJBTlNJVElPTlNgIGZsYWcsIGFuZCBtb3JlCi0gICAg
ICAgICAgICAgIGRldGFpbGVkIGludHJhLXRyYW5zaXRpb24gbG9nZ2luZyBjYW4gYmUgbG9nZ2Vk
IHdpdGgKLSAgICAgICAgICAgICAgdGhlIGBMT0dfVFJBTlNJVElPTlNfSU5URVJOQUxgIGZsYWc6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB3aW5kb3cuQXBw
ID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBMT0dfVFJBTlNJ
VElPTlM6IHRydWUsIC8vIGJhc2ljIGxvZ2dpbmcgb2Ygc3VjY2Vzc2Z1bCB0cmFuc2l0aW9ucwot
ICAgICAgICAgICAgICAgIExPR19UUkFOU0lUSU9OU19JTlRFUk5BTDogdHJ1ZSAvLyBkZXRhaWxl
ZCBsb2dnaW5nIG9mIGFsbCByb3V0aW5nIHN0ZXBzCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgcm91dGVyIHdpbGwg
YmVnaW4gdHJ5aW5nIHRvIHRyYW5zbGF0ZSB0aGUgY3VycmVudCBVUkwgaW50bwotICAgICAgICAg
ICAgICBhcHBsaWNhdGlvbiBzdGF0ZSBvbmNlIHRoZSBicm93c2VyIGVtaXRzIHRoZSBgRE9NQ29u
dGVudFJlYWR5YCBldmVudC4gSWYgeW91Ci0gICAgICAgICAgICAgIG5lZWQgdG8gZGVmZXIgcm91
dGluZywgeW91IGNhbiBjYWxsIHRoZSBhcHBsaWNhdGlvbidzIGBkZWZlclJlYWRpbmVzcygpYAot
ICAgICAgICAgICAgICBtZXRob2QuIE9uY2Ugcm91dGluZyBjYW4gYmVnaW4sIGNhbGwgdGhlIGBh
ZHZhbmNlUmVhZGluZXNzKClgIG1ldGhvZC4KLQotICAgICAgICAgICAgICBJZiB0aGVyZSBpcyBh
bnkgc2V0dXAgcmVxdWlyZWQgYmVmb3JlIHJvdXRpbmcgYmVnaW5zLCB5b3UgY2FuIGltcGxlbWVu
dCBhCi0gICAgICAgICAgICAgIGByZWFkeSgpYCBtZXRob2Qgb24geW91ciBhcHAgdGhhdCB3aWxs
IGJlIGludm9rZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJvdXRpbmcKLSAgICAgICAgICAgICAgYmVn
aW5zLgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgQXBwbGljYXRp
b24KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5k
cyBFbWJlci5OYW1lc3BhY2UKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEFwcGxpY2F0
aW9uID0gTmFtZXNwYWNlLmV4dGVuZChEZWZlcnJlZE1peGluLCB7Ci0gICAgICAgICAgICBfc3Vw
cHJlc3NEZWZlcnJlZERlcHJlY2F0aW9uOiB0cnVlLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVGhlIHJvb3QgRE9NIGVsZW1lbnQgb2YgdGhlIEFwcGxpY2F0aW9uLiBU
aGlzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4KLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudCBv
ciBhCi0gICAgICAgICAgICAgICAgICAgIFtqUXVlcnktY29tcGF0aWJsZSBzZWxlY3RvciBzdHJp
bmddKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jYXRlZ29yeS9zZWxlY3RvcnMvKS4KLQotICAgICAg
ICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBlbGVtZW50IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8g
dGhlIEFwcGxpY2F0aW9uJ3MsCi0gICAgICAgICAgICAgICAgICAgIGBldmVudERpc3BhdGNoZXJg
LCB3aGljaCBzZXRzIHVwIHRoZSBsaXN0ZW5lcnMgZm9yIGV2ZW50IGRlbGVnYXRpb24uIEV2ZXJ5
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgaW4geW91ciBhcHBsaWNhdGlvbiBzaG91bGQgYmUg
YSBjaGlsZCBvZiB0aGUgZWxlbWVudCB5b3Ugc3BlY2lmeSBoZXJlLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSByb290RWxlbWVudAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBE
T01FbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0ICdib2R5JwotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHJvb3RFbGVtZW50OiAnYm9keScsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAg
cmVzcG9uc2libGUgZm9yIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoaXMKLSAgICAgICAgICAgICAg
ICAgICAgYXBwbGljYXRpb24ncyB2aWV3cy4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgZXZl
bnQgZGlzcGF0Y2hlciBpcyBjcmVhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhdCBpbml0aWFsaXph
dGlvbiB0aW1lCi0gICAgICAgICAgICAgICAgICAgIGFuZCBzZXRzIHVwIGV2ZW50IGxpc3RlbmVy
cyBvbiB0aGUgRE9NIGVsZW1lbnQgZGVzY3JpYmVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAg
ICBhcHBsaWNhdGlvbidzIGByb290RWxlbWVudGAgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAg
ICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYCBm
b3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgZXZl
bnREaXNwYXRjaGVyCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEVtYmVyLkV2ZW50RGlzcGF0
Y2hlcgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgZXZlbnREaXNwYXRjaGVyOiBudWxsLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhlIERPTSBldmVudHMgZm9yIHdoaWNoIHRoZSBldmVu
dCBkaXNwYXRjaGVyIHNob3VsZCBsaXN0ZW4uCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVm
YXVsdCwgdGhlIGFwcGxpY2F0aW9uJ3MgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgbGlzdGVucwot
ICAgICAgICAgICAgICAgICAgICBmb3IgYSBzZXQgb2Ygc3RhbmRhcmQgRE9NIGV2ZW50cywgc3Vj
aCBhcyBgbW91c2Vkb3duYCBhbmQKLSAgICAgICAgICAgICAgICAgICAgYGtleXVwYCwgYW5kIGRl
bGVnYXRlcyB0aGVtIHRvIHlvdXIgYXBwbGljYXRpb24ncyBgRW1iZXIuVmlld2AKLSAgICAgICAg
ICAgICAgICAgICAgaW5zdGFuY2VzLgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3b3Vs
ZCBsaWtlIGFkZGl0aW9uYWwgYnViYmxpbmcgZXZlbnRzIHRvIGJlIGRlbGVnYXRlZCB0byB5b3Vy
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXdzLCBzZXQgeW91ciBgRW1iZXIuQXBwbGljYXRpb25g
J3MgYGN1c3RvbUV2ZW50c2AgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgdG8gYSBoYXNo
IGNvbnRhaW5pbmcgdGhlIERPTSBldmVudCBuYW1lIGFzIHRoZSBrZXkgYW5kIHRoZQotICAgICAg
ICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHZpZXcgbWV0aG9kIG5hbWUgYXMgdGhlIHZhbHVl
LiBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgY3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBhZGQgc3VwcG9ydCBmb3IgdGhlIHBhc3RlIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXN0ZTogInBhc3RlIgotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBjdXN0b21FdmVudHMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgT2JqZWN0
Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBjdXN0b21FdmVudHM6IG51bGwsCi0KLSAgICAgICAgICAgIC8vIFN0YXJ0
IG9mZiB0aGUgbnVtYmVyIG9mIGRlZmVycmFscyBhdCAxLiBUaGlzIHdpbGwgYmUKLSAgICAgICAg
ICAgIC8vIGRlY3JlbWVudGVkIGJ5IHRoZSBBcHBsaWNhdGlvbidzIG93biBgaW5pdGlhbGl6ZWAg
bWV0aG9kLgotICAgICAgICAgICAgX3JlYWRpbmVzc0RlZmVycmFsczogMSwKLQotICAgICAgICAg
ICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy4kID0galF1ZXJ5OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB0aGlzLl9fY29udGFpbmVyX18gPSB0aGlzLmJ1aWxkQ29udGFpbmVyKCk7
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLlJvdXRlciA9IHRoaXMuZGVmYXVsdFJvdXRlcigpOwot
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLQotICAgICAgICAgICAgICAgIHRoaXMu
c2NoZWR1bGVJbml0aWFsaXplKCk7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5saWJyYXJpZXMu
cmVnaXN0ZXJDb3JlTGlicmFyeSgnSGFuZGxlYmFycycsIEVtYmVySGFuZGxlYmFycy5WRVJTSU9O
KTsKLSAgICAgICAgICAgICAgICBFbWJlci5saWJyYXJpZXMucmVnaXN0ZXJDb3JlTGlicmFyeSgn
alF1ZXJ5JywgalF1ZXJ5KCkuanF1ZXJ5KTsKLQotICAgICAgICAgICAgICAgIGlmICggRW1iZXIu
TE9HX1ZFUlNJT04gKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLkxPR19WRVJTSU9OID0g
ZmFsc2U7IC8vIHdlIG9ubHkgbmVlZCB0byBzZWUgdGhpcyBvbmNlIHBlciBBcHBsaWNhdGlvbiNp
bml0Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVMZW5ndGhzID0gRW51bWVyYWJsZVV0
aWxzLm1hcChFbWJlci5saWJyYXJpZXMsIGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnZXQoaXRlbSwgIm5hbWUubGVuZ3RoIik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBtYXhOYW1lTGVuZ3RoID0gTWF0
aC5tYXguYXBwbHkodGhpcywgbmFtZUxlbmd0aHMpOwotCi0gICAgICAgICAgICAgICAgICAgIEVt
YmVyLmRlYnVnKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7Ci0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLmxpYnJhcmllcy5lYWNoKGZ1bmN0aW9uKG5hbWUsIHZlcnNpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGFjZXMgPSBuZXcgQXJyYXkobWF4TmFtZUxl
bmd0aCAtIG5hbWUubGVuZ3RoICsgMSkuam9pbigiICIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuZGVidWcoW25hbWUsIHNwYWNlcywgJyA6ICcsIHZlcnNpb25dLmpvaW4oIiIpKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmRlYnVn
KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEJ1
aWxkIHRoZSBjb250YWluZXIgZm9yIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLgotCi0gICAgICAg
ICAgICAgICAgICAgIEFsc28gcmVnaXN0ZXIgYSBkZWZhdWx0IGFwcGxpY2F0aW9uIHZpZXcgaW4g
Y2FzZSB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgaXRzZWxmIGRvZXMgbm90
LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgYnVpbGRDb250YWluZXIKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIu
Q29udGFpbmVyfSB0aGUgY29uZmlndXJlZCBjb250YWluZXIKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBidWlsZENvbnRhaW5lcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX19jb250YWluZXJfXyA9IEFwcGxpY2F0aW9uLmJ1aWxk
Q29udGFpbmVyKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB0
aGUgYXBwbGljYXRpb24gaGFzIG5vdCBvcHRlZCBvdXQgb2Ygcm91dGluZyBhbmQgaGFzIG5vdCBl
eHBsaWNpdGx5Ci0gICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYSByb3V0ZXIsIHN1cHBseSBh
IGRlZmF1bHQgcm91dGVyIGZvciB0aGUgYXBwbGljYXRpb24gYXV0aG9yCi0gICAgICAgICAgICAg
ICAgICAgIHRvIGNvbmZpZ3VyZS4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBh
cHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRvIGRvOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9u
LmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3RzJyk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRlZmF1bHRS
b3V0ZXIKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuUm91dGVyfSB0aGUgZGVm
YXVsdCByb3V0ZXIKLSAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIGRlZmF1bHRS
b3V0ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLlJvdXRlciA9PT0g
ZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fX2NvbnRhaW5lcl9fOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMuUm91dGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lci51bnJlZ2lzdGVyKCdyb3V0ZXI6bWFpbicpOwotICAgICAgICAgICAgICAgICAgICBj
b250YWluZXIucmVnaXN0ZXIoJ3JvdXRlcjptYWluJywgdGhpcy5Sb3V0ZXIpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwRmFjdG9y
eSgncm91dGVyOm1haW4nKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBBdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgdGhlIGFwcGxpY2F0aW9u
IG9uY2UgdGhlIERPTSBoYXMKLSAgICAgICAgICAgICAgICAgICAgYmVjb21lIHJlYWR5LgotCi0g
ICAgICAgICAgICAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBpdHNlbGYgaXMgc2NoZWR1bGVk
IG9uIHRoZSBhY3Rpb25zIHF1ZXVlCi0gICAgICAgICAgICAgICAgICAgIHdoaWNoIGVuc3VyZXMg
dGhhdCBhcHBsaWNhdGlvbiBsb2FkaW5nIGZpbmlzaGVzIGJlZm9yZQotICAgICAgICAgICAgICAg
ICAgICBib290aW5nLgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYXN5bmNocm9u
b3VzbHkgbG9hZGluZyBjb2RlLCB5b3Ugc2hvdWxkIGNhbGwKLSAgICAgICAgICAgICAgICAgICAg
YGRlZmVyUmVhZGluZXNzKClgIHRvIGRlZmVyIGJvb3RpbmcsIGFuZCB0aGVuIGNhbGwKLSAgICAg
ICAgICAgICAgICAgICAgYGFkdmFuY2VSZWFkaW5lc3MoKWAgb25jZSBhbGwgb2YgeW91ciBjb2Rl
IGhhcyBmaW5pc2hlZAotICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2NoZWR1bGVJ
bml0aWFsaXplCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2NoZWR1bGVJbml0
aWFsaXplOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuJCB8fCB0aGlzLiQuaXNSZWFkeSkgewotICAgICAg
ICAgICAgICAgICAgICBydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCBzZWxmLCAnX2luaXRpYWxpemUn
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLiQo
KS5yZWFkeShmdW5jdGlvbiBydW5Jbml0aWFsaXplKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuKHNlbGYsICdfaW5pdGlhbGl6ZScpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVXNlIHRoaXMgdG8gZGVmZXIgcmVhZGluZXNzIHVudGlsIHNvbWUgY29u
ZGl0aW9uIGlzIHRydWUuCi0KLSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcCA9IEVt
YmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBBcHAuZGVmZXJS
ZWFkaW5lc3MoKTsKLQotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTigiL2F1dGgt
dG9rZW4iLCBmdW5jdGlvbih0b2tlbikgewotICAgICAgICAgICAgICAgICAgICAgIEFwcC50b2tl
biA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAgIEFwcC5hZHZhbmNlUmVhZGluZXNzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBhc3luY2hyb25vdXMg
c2V0dXAgbG9naWMgYW5kIGRlZmVyCi0gICAgICAgICAgICAgICAgICAgIGJvb3RpbmcgeW91ciBh
cHBsaWNhdGlvbiB1bnRpbCB0aGUgc2V0dXAgaGFzIGZpbmlzaGVkLgotCi0gICAgICAgICAgICAg
ICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBzZXR1cCByZXF1aXJlcyBhIGxvYWRpbmcgVUksIGl0IG1p
Z2h0IGJlIGJldHRlcgotICAgICAgICAgICAgICAgICAgICB0byB1c2UgdGhlIHJvdXRlciBmb3Ig
dGhpcyBwdXJwb3NlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVmZXJSZWFkaW5l
c3MKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkZWZlclJlYWRpbmVzczogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBjYWxsIGRl
ZmVyUmVhZGluZXNzIG9uIGFuIGluc3RhbmNlIG9mIEVtYmVyLkFwcGxpY2F0aW9uIiwgdGhpcyBp
bnN0YW5jZW9mIEFwcGxpY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllv
dSBjYW5ub3QgZGVmZXIgcmVhZGluZXNzIHNpbmNlIHRoZSBgcmVhZHkoKWAgaG9vayBoYXMgYWxy
ZWFkeSBiZWVuIGNhbGxlZC4iLCB0aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHMgPiAwKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9yZWFkaW5lc3NEZWZlcnJhbHMrKzsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDYWxsIGBhZHZhbmNlUmVhZGlu
ZXNzYCBhZnRlciBhbnkgYXN5bmNocm9ub3VzIHNldHVwIGxvZ2ljIGhhcyBjb21wbGV0ZWQuCi0g
ICAgICAgICAgICAgICAgICAgIEVhY2ggY2FsbCB0byBgZGVmZXJSZWFkaW5lc3NgIG11c3QgYmUg
bWF0Y2hlZCBieSBhIGNhbGwgdG8gYGFkdmFuY2VSZWFkaW5lc3NgCi0gICAgICAgICAgICAgICAg
ICAgIG9yIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5ldmVyIGJlY29tZSByZWFkeSBhbmQgcm91dGlu
ZyB3aWxsIG5vdCBiZWdpbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkdmFuY2VS
ZWFkaW5lc3MKLSAgICAgICAgICAgICAgICAgICAgQHNlZSB7RW1iZXIuQXBwbGljYXRpb24jZGVm
ZXJSZWFkaW5lc3N9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWR2YW5jZVJl
YWRpbmVzczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
bXVzdCBjYWxsIGFkdmFuY2VSZWFkaW5lc3Mgb24gYW4gaW5zdGFuY2Ugb2YgRW1iZXIuQXBwbGlj
YXRpb24iLCB0aGlzIGluc3RhbmNlb2YgQXBwbGljYXRpb24pOwotICAgICAgICAgICAgICAgIHRo
aXMuX3JlYWRpbmVzc0RlZmVycmFscy0tOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jl
YWRpbmVzc0RlZmVycmFscyA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBydW4ub25jZSh0
aGlzLCB0aGlzLmRpZEJlY29tZVJlYWR5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJzIGEg
ZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiAod2l0aAot
ICAgICAgICAgICAgICAgICAgICBgQXBwLmluamVjdGApIG9yIGZvciBzZXJ2aWNlIGxvb2t1cC4g
RWFjaCBmYWN0b3J5IGlzIHJlZ2lzdGVyZWQgd2l0aAotICAgICAgICAgICAgICAgICAgICBhIGZ1
bGwgbmFtZSBpbmNsdWRpbmcgdHdvIHBhcnRzOiBgdHlwZTpuYW1lYC4KLQotICAgICAgICAgICAg
ICAgICAgICBBIHNpbXBsZSBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNy
ZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBBcHAuT3JhbmdlICA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgQXBwLnJlZ2lzdGVyKCdmcnVpdDpmYXZvcml0
ZScsIEFwcC5PcmFuZ2UpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBFbWJlciB3aWxsIHJlc29sdmUgZmFjdG9yaWVzIGZyb20gdGhlIGBBcHBgIG5hbWVz
cGFjZSBhdXRvbWF0aWNhbGx5LgotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBgQXBw
LkNhcnNDb250cm9sbGVyYCB3aWxsIGJlIGRpc2NvdmVyZWQgYW5kIHJldHVybmVkIGlmCi0gICAg
ICAgICAgICAgICAgICAgIGFuIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGBjb250cm9sbGVyOmNhcnNg
LgotCi0gICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgcmVnaXN0ZXJpbmcgYSBjb250
cm9sbGVyIHdpdGggYSBub24tc3RhbmRhcmQgbmFtZToKLQotICAgICAgICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNh
dGlvbi5jcmVhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24gID0gRW1iZXIu
Q29udHJvbGxlci5leHRlbmQoKTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAucmVnaXN0ZXIo
J2NvbnRyb2xsZXI6c2Vzc2lvbicsIFNlc3Npb24pOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBTZXNzaW9uIGNvbnRyb2xsZXIgY2FuIG5vdyBiZSB0cmVhdGVkIGxpa2UgYSBub3JtYWwg
Y29udHJvbGxlciwKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVzcGl0ZSBpdHMgbm9uLXN0YW5k
YXJkIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIg
PSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmVlZHM6
IFsnc2Vzc2lvbiddCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkIGZhY3RvcmllcyBhcmUgKipp
bnN0YW50aWF0ZWQqKiBieSBoYXZpbmcgYGNyZWF0ZWAKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bGVkIG9uIHRoZW0uIEFkZGl0aW9uYWxseSB0aGV5IGFyZSAqKnNpbmdsZXRvbnMqKiwgZWFjaCB0
aW1lCi0gICAgICAgICAgICAgICAgICAgIHRoZXkgYXJlIGxvb2tlZCB1cCB0aGV5IHJldHVybiB0
aGUgc2FtZSBpbnN0YW5jZS4KLQotICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzIG1v
ZGlmeWluZyB0aGF0IGRlZmF1bHQgYmVoYXZpb3I6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRp
b24uY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLlBlcnNvbiAgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5PcmFuZ2UgID0gRW1iZXIu
T2JqZWN0LmV4dGVuZCgpOwotICAgICAgICAgICAgICAgICAgICBBcHAuRW1haWwgICA9IEVtYmVy
Lk9iamVjdC5leHRlbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgQXBwLnNlc3Npb24gPSBFbWJl
ci5PYmplY3QuY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLnJlZ2lzdGVyKCdt
b2RlbDp1c2VyJywgQXBwLlBlcnNvbiwge3NpbmdsZXRvbjogZmFsc2UgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIEFwcC5yZWdpc3RlcignZnJ1aXQ6ZmF2b3JpdGUnLCBBcHAuT3JhbmdlKTsKLSAg
ICAgICAgICAgICAgICAgICAgQXBwLnJlZ2lzdGVyKCdjb21tdW5pY2F0aW9uOm1haW4nLCBBcHAu
RW1haWwsIHtzaW5nbGV0b246IGZhbHNlfSk7Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5yZWdp
c3Rlcignc2Vzc2lvbicsIEFwcC5zZXNzaW9uLCB7aW5zdGFudGlhdGU6IGZhbHNlfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVnaXN0
ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtICBmdWxsTmFtZSB7U3RyaW5nfSB0eXBlOm5h
bWUgKGUuZy4sICdtb2RlbDp1c2VyJykKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtICBmYWN0
b3J5IHtGdW5jdGlvbn0gKGUuZy4sIEFwcC5QZXJzb24pCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSAgb3B0aW9ucyB7T2JqZWN0fSAob3B0aW9uYWwpIGRpc2FibGUgaW5zdGFudGlhdGlvbiBv
ciBzaW5nbGV0b24gdXNhZ2UKLSAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgcmVn
aXN0ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlz
Ll9fY29udGFpbmVyX187Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyLmFwcGx5
KGNvbnRhaW5lciwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBEZWZpbmUgYSBkZXBlbmRlbmN5IGluamVjdGlvbiBvbnRv
IGEgc3BlY2lmaWMgZmFjdG9yeSBvciBhbGwgZmFjdG9yaWVzCi0gICAgICAgICAgICAgICAgICAg
IG9mIGEgdHlwZS4KLQotICAgICAgICAgICAgICAgICAgICBXaGVuIEVtYmVyIGluc3RhbnRpYXRl
cyBhIGNvbnRyb2xsZXIsIHZpZXcsIG9yIG90aGVyIGZyYW1ld29yayBjb21wb25lbnQKLSAgICAg
ICAgICAgICAgICAgICAgaXQgY2FuIGF0dGFjaCBhIGRlcGVuZGVuY3kgdG8gdGhhdCBjb21wb25l
bnQuIFRoaXMgaXMgb2Z0ZW4gdXNlZCB0bwotICAgICAgICAgICAgICAgICAgICBwcm92aWRlIHNl
cnZpY2VzIHRvIGEgc2V0IG9mIGZyYW1ld29yayBjb21wb25lbnRzLgotCi0gICAgICAgICAgICAg
ICAgICAgIEFuIGV4YW1wbGUgb2YgcHJvdmlkaW5nIGEgc2Vzc2lvbiBvYmplY3QgdG8gYWxsIGNv
bnRyb2xsZXJzOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgU2Vzc2lvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoeyBpc0F1dGhl
bnRpY2F0ZWQ6IGZhbHNlIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEEgZmFjdG9yeSBt
dXN0IGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IGNhbiBiZSBpbmplY3RlZAotICAgICAgICAgICAg
ICAgICAgICBBcHAucmVnaXN0ZXIoJ3Nlc3Npb246bWFpbicsIFNlc3Npb24pOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEluamVjdCAnc2Vzc2lvbjptYWluJyBvbnRvIGFsbCBmYWN0b3JpZXMg
b2YgdGhlIHR5cGUgJ2NvbnRyb2xsZXInCi0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggdGhl
IG5hbWUgJ3Nlc3Npb24nCi0gICAgICAgICAgICAgICAgICAgIEFwcC5pbmplY3QoJ2NvbnRyb2xs
ZXInLCAnc2Vzc2lvbicsICdzZXNzaW9uOm1haW4nKTsKLQotICAgICAgICAgICAgICAgICAgICBB
cHAuSW5kZXhDb250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgICAg
ICAgICAgICAgICAgIGlzTG9nZ2VkSW46IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdzZXNzaW9uLmlz
QXV0aGVudGljYXRlZCcpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJbmplY3Rpb25zIGNhbiBhbHNvIGJlIHBl
cmZvcm1lZCBvbiBzcGVjaWZpYyBmYWN0b3JpZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuaW5qZWN0KDxmdWxsX25hbWUgb3Ig
dHlwZT4sIDxwcm9wZXJ0eSBuYW1lPiwgPGZ1bGxfbmFtZT4pCi0gICAgICAgICAgICAgICAgICAg
IEFwcC5pbmplY3QoJ3JvdXRlJywgJ3NvdXJjZScsICdzb3VyY2U6bWFpbicpCi0gICAgICAgICAg
ICAgICAgICAgIEFwcC5pbmplY3QoJ3JvdXRlOmFwcGxpY2F0aW9uJywgJ2VtYWlsJywgJ21vZGVs
OmVtYWlsJykKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
SXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbmplY3Rpb25zIGNhbiBvbmx5IGJlIHBlcmZv
cm1lZCBvbgotICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHRoYXQgYXJlIGluc3RhbnRpYXRl
ZCBieSBFbWJlciBpdHNlbGYuIEluc3RhbnRpYXRpbmcgYSBjbGFzcwotICAgICAgICAgICAgICAg
ICAgICBkaXJlY3RseSAodmlhIGBjcmVhdGVgIG9yIGBuZXdgKSBieXBhc3NlcyB0aGUgZGVwZW5k
ZW5jeSBpbmplY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgotCi0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLURhdGEgaW5zdGFudGlhdGVzIGl0cyBtb2RlbHMgaW4gYSB1bmlxdWUg
bWFubmVyLCBhbmQgY29uc2VxdWVudGx5Ci0gICAgICAgICAgICAgICAgICAgIGluamVjdGlvbnMg
b250byBtb2RlbHMgKG9yIGFsbCBtb2RlbHMpIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIElu
amVjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgb24gbW9kZWxzIGNhbiBiZSBlbmFibGVkIGJ5
IHNldHRpbmcgYEVtYmVyLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OU2AKLSAgICAgICAgICAgICAg
ICAgICAgdG8gYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5qZWN0Ci0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSAgZmFjdG9yeU5hbWVPclR5cGUge1N0cmluZ30KLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtICBwcm9wZXJ0eSB7U3RyaW5nfQotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0gIGluamVjdGlvbk5hbWUge1N0cmluZ30KLSAgICAgICAgICAgICAgICAg
ICoqLwotICAgICAgICAgICAgaW5qZWN0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgY29udGFpbmVyID0gdGhpcy5fX2NvbnRhaW5lcl9fOwotICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5pbmplY3Rpb24uYXBwbHkoY29udGFpbmVyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxpbmcgaW5pdGlh
bGl6ZSBtYW51YWxseSBpcyBub3Qgc3VwcG9ydGVkLgotCi0gICAgICAgICAgICAgICAgICAgIFBs
ZWFzZSBzZWUgRW1iZXIuQXBwbGljYXRpb24jYWR2YW5jZVJlYWRpbmVzcyBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgRW1iZXIuQXBwbGljYXRpb24jZGVmZXJSZWFkaW5lc3MuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQKLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbml0aWFsaXplCi0gICAgICAgICAgICAgICAgICAg
KiovCi0gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBFbWJlci5kZXByZWNhdGUoJ0NhbGxpbmcgaW5pdGlhbGl6ZSBtYW51YWxseSBpcyBub3Qgc3Vw
cG9ydGVkLiBQbGVhc2Ugc2VlIEVtYmVyLkFwcGxpY2F0aW9uI2FkdmFuY2VSZWFkaW5lc3MgYW5k
IEVtYmVyLkFwcGxpY2F0aW9uI2RlZmVyUmVhZGluZXNzJyk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgYXBwbGlj
YXRpb24uIFRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5LgotCi0gICAgICAgICAgICAgICAgICAg
IFJ1biBhbnkgaW5pdGlhbGl6ZXJzIGFuZCBydW4gdGhlIGFwcGxpY2F0aW9uIGxvYWQgaG9vay4g
VGhlc2UgaG9va3MgbWF5Ci0gICAgICAgICAgICAgICAgICAgIGNob29zZSB0byBkZWZlciByZWFk
aW5lc3MuIEZvciBleGFtcGxlLCBhbiBhdXRoZW50aWNhdGlvbiBob29rIG1pZ2h0IHdhbnQKLSAg
ICAgICAgICAgICAgICAgICAgdG8gZGVmZXIgcmVhZGluZXNzIHVudGlsIHRoZSBhdXRoIHRva2Vu
IGhhcyBiZWVuIHJldHJpZXZlZC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIF9pbml0aWFsaXplCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgX2luaXRpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IGlmICh0aGlzLmlzRGVzdHJveWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUg
QXBwLlJvdXRlciBtdXN0IGFscmVhZHkgYmUgYXNzaWduZWQKLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5Sb3V0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMu
X19jb250YWluZXJfXzsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnVucmVnaXN0ZXIo
J3JvdXRlcjptYWluJyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcign
cm91dGVyOm1haW4nLCB0aGlzLlJvdXRlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGhpcy5ydW5Jbml0aWFsaXplcnMoKTsKLSAgICAgICAgICAgICAgICBydW5Mb2Fk
SG9va3MoJ2FwcGxpY2F0aW9uJywgdGhpcyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCBhbnkgaW5pdGlhbGl6ZXJzIG9yIGxvYWQgaG9va3MgdGhhdCB3b3VsZCBoYXZlIHdh
bnRlZAotICAgICAgICAgICAgICAgIC8vIHRvIGRlZmVyIHJlYWRpbmVzcyBoYXZlIGZpcmVkLiBJ
biBnZW5lcmFsLCBhZHZhbmNpbmcgcmVhZGluZXNzIGhlcmUKLSAgICAgICAgICAgICAgICAvLyB3
aWxsIHByb2NlZWQgdG8gZGlkQmVjb21lUmVhZHkuCi0gICAgICAgICAgICAgICAgdGhpcy5hZHZh
bmNlUmVhZGluZXNzKCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXNldCB0aGUg
YXBwbGljYXRpb24uIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgb25seSBpbiB0ZXN0cy4gSXQgY2xl
YW5zIHVwCi0gICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUgZm9sbG93
aW5nIG9yZGVyOgotCi0gICAgICAgICAgICAgICAgICAgIDEuIERlYWN0aXZhdGUgZXhpc3Rpbmcg
cm91dGVzCi0gICAgICAgICAgICAgICAgICAgIDIuIERlc3Ryb3kgYWxsIG9iamVjdHMgaW4gdGhl
IGNvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgICAzLiBDcmVhdGUgYSBuZXcgYXBwbGljYXRp
b24gY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgIDQuIFJlLXJvdXRlIHRvIHRoZSBleGlz
dGluZyB1cmwKLQotICAgICAgICAgICAgICAgICAgICBUeXBpY2FsIEV4YW1wbGU6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAgICAgICAgICAgICAgICAgIHZhciBB
cHA7Ci0KLSAgICAgICAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBtb2R1bGUoImFjY2VwdGFuY2UgdGVz
dCIsIHsKLSAgICAgICAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBcHAucmVzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHRlc3QoImZpcnN0
IHRlc3QiLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBcHAgaXMgZnJl
c2hseSByZXNldAotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICB0ZXN0KCJmaXJzdCB0ZXN0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
Ly8gQXBwIGlzIGFnYWluIGZyZXNobHkgcmVzZXQKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEFkdmFuY2VkIEV4
YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgT2NjYXNpb25hbGx5IHlvdSBtYXkgd2FudCB0
byBwcmV2ZW50IHRoZSBhcHAgZnJvbSBpbml0aWFsaXppbmcgZHVyaW5nCi0gICAgICAgICAgICAg
ICAgICAgIHNldHVwLiBUaGlzIGNvdWxkIGVuYWJsZSBleHRyYSBjb25maWd1cmF0aW9uLCBvciBl
bmFibGUgYXNzZXJ0aW5nIHByaW9yCi0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSBhcHAgYmVj
b21pbmcgcmVhZHkuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBBcHA7Ci0KLSAgICAgICAgICAgICAgICAgICAgcnVuKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNy
ZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBt
b2R1bGUoImFjY2VwdGFuY2UgdGVzdCIsIHsKLSAgICAgICAgICAgICAgICAgICAgICBzZXR1cDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgIEFwcC5yZXNldCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcHAuZGVmZXJSZWFkaW5lc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdGVzdCgiZmlyc3QgdGVzdCIsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgIG9rKHRydWUsICdzb21ldGhpbmcgYmVmb3JlIGFwcCBpcyBpbml0aWFs
aXplZCcpOwotCi0gICAgICAgICAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQXBwLmFkdmFuY2VSZWFkaW5lc3MoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICBvayh0cnVlLCAnc29tZXRoaW5nIGFm
dGVyIGFwcCBpcyBpbml0aWFsaXplZCcpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNldAot
ICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzID0gMTsKLQotICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc2V0KCkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
cm91dGVyID0gdGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgncm91dGVyOm1haW4nKTsKLSAgICAg
ICAgICAgICAgICAgICAgcm91dGVyLnJlc2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcnVu
KHRoaXMuX19jb250YWluZXJfXywgJ2Rlc3Ryb3knKTsKLQotICAgICAgICAgICAgICAgICAgICB0
aGlzLmJ1aWxkQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxl
KCdhY3Rpb25zJywgdGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9pbml0aWFsaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJ1bi5qb2luKHRoaXMsIGhhbmRsZVJlc2V0KTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJ1bkluaXRpYWxpemVycwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJ1bkluaXRpYWxpemVyczogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGluaXRpYWxpemVycyA9IGdldCh0aGlzLmNvbnN0cnVjdG9y
LCAnaW5pdGlhbGl6ZXJzJyk7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMu
X19jb250YWluZXJfXzsKLSAgICAgICAgICAgICAgICB2YXIgZ3JhcGggPSBuZXcgREFHKCk7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgdmFy
IG5hbWUsIGluaXRpYWxpemVyOwotCi0gICAgICAgICAgICAgICAgZm9yIChuYW1lIGluIGluaXRp
YWxpemVycykgewotICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGluaXRpYWxpemVy
c1tuYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguYWRkRWRnZXMoaW5pdGlhbGl6ZXIu
bmFtZSwgaW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZSwgaW5pdGlhbGl6ZXIuYmVmb3JlLCBpbml0aWFs
aXplci5hZnRlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ3JhcGgu
dG9wc29ydChmdW5jdGlvbiAodmVydGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpbml0
aWFsaXplciA9IHZlcnRleC52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJObyBhcHBsaWNhdGlvbiBpbml0aWFsaXplciBuYW1lZCAnIiArIHZlcnRleC5uYW1lICsgIici
LCBpbml0aWFsaXplcik7Ci0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyKGNvbnRhaW5l
ciwgbmFtZXNwYWNlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGRpZEJlY29tZVJlYWR5Ci0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZGlkQmVjb21lUmVhZHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRo
aXMuc2V0dXBFdmVudERpc3BhdGNoZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlYWR5KCk7
IC8vIHVzZXIgaG9vawotICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSb3V0aW5nKCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIUVtYmVyLnRlc3RpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gRWFnZXJseSBuYW1lIGFsbCBjbGFzc2VzIHRoYXQgYXJlIGFscmVhZHkgbG9hZGVkCi0gICAg
ICAgICAgICAgICAgICAgIEVtYmVyLk5hbWVzcGFjZS5wcm9jZXNzQWxsKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLkJPT1RFRCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNldHVwIHVwIHRoZSBldmVudCBkaXNwYXRj
aGVyIHRvIHJlY2VpdmUgZXZlbnRzIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICBhcHBsaWNh
dGlvbidzIGByb290RWxlbWVudGAgd2l0aCBhbnkgcmVnaXN0ZXJlZAotICAgICAgICAgICAgICAg
ICAgICBgY3VzdG9tRXZlbnRzYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwRXZlbnREaXNwYXRjaGVyCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgc2V0dXBFdmVudERpc3BhdGNoZXI6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudHMgPSBnZXQodGhpcywgJ2N1c3RvbUV2
ZW50cycpOwotICAgICAgICAgICAgICAgIHZhciByb290RWxlbWVudCA9IGdldCh0aGlzLCAncm9v
dEVsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX19jb250
YWluZXJfXy5sb29rdXAoJ2V2ZW50X2Rpc3BhdGNoZXI6bWFpbicpOwotCi0gICAgICAgICAgICAg
ICAgc2V0KHRoaXMsICdldmVudERpc3BhdGNoZXInLCBkaXNwYXRjaGVyKTsKLSAgICAgICAgICAg
ICAgICBkaXNwYXRjaGVyLnNldHVwKGN1c3RvbUV2ZW50cywgcm9vdEVsZW1lbnQpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSBh
cHBsaWNhdGlvbiBoYXMgYSByb3V0ZXIsIHVzZSBpdCB0byByb3V0ZSB0byB0aGUgY3VycmVudCBV
UkwsIGFuZAotICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIGEgbmV3IGNhbGwgdG8gYHJvdXRl
YCB3aGVuZXZlciB0aGUgVVJMIGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzdGFydFJvdXRpbmcKLSAgICAgICAgICAg
ICAgICAgICAgQHByb3BlcnR5IHJvdXRlciB7RW1iZXIuUm91dGVyfQotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHN0YXJ0Um91dGluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHJvdXRlciA9IHRoaXMuX19jb250YWluZXJfXy5sb29rdXAoJ3JvdXRlcjptYWlu
Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyb3V0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJvdXRlci5zdGFy
dFJvdXRpbmcoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGhhbmRsZVVSTDogZnVu
Y3Rpb24odXJsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMuX19jb250YWlu
ZXJfXy5sb29rdXAoJ3JvdXRlcjptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICByb3V0ZXIuaGFu
ZGxlVVJMKHVybCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIEFwcGxpY2F0aW9uIGhhcyBiZWNvbWUgcmVhZHku
Ci0gICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsIHdpbGwgYmUgZGVsYXllZCB1bnRpbCB0aGUg
RE9NIGhhcyBiZWNvbWUgcmVhZHkuCi0KLSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IHJlYWR5
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVhZHk6IEssCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZCBVc2UgJ1Jlc29sdmVyJyBp
bnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHRvIHByb3ZpZGUgYW4gYWx0ZXJu
YXRlIGNsYXNzIHRvIGBFbWJlci5EZWZhdWx0UmVzb2x2ZXJgCi0KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgcmVzb2x2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXNvbHZlcjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFNldCB0aGlzIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIGNsYXNzIHRvIGBFbWJlci5EZWZhdWx0
UmVzb2x2ZXJgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJlc29sdmVyCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgUmVzb2x2ZXI6IG51bGwsCi0KLSAgICAgICAg
ICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5CT09U
RUQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgZGVhY3RpdmF0aW9uIG9mIHJv
dXRlcyBiZWZvcmUgb2JqZWN0cyBhcmUgZGVzdHJveWVkCi0gICAgICAgICAgICAgICAgdGhpcy5f
X2NvbnRhaW5lcl9fLmxvb2t1cCgncm91dGVyOm1haW4nKS5yZXNldCgpOwotCi0gICAgICAgICAg
ICAgICAgdGhpcy5fX2NvbnRhaW5lcl9fLmRlc3Ryb3koKTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIGluaXRpYWxpemVyOiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jb25zdHJ1Y3Rvci5pbml0aWFsaXplcihvcHRpb25zKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRoZW4KLSAg
ICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0
ZWQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0aGVuOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ0RvIG5vdCB1c2UgYC50aGVuYCBvbiBh
biBpbnN0YW5jZSBvZiBFbWJlci5BcHBsaWNhdGlvbi4gIFBsZWFzZSB1c2UgdGhlIGAucmVhZHlg
IGhvb2sgaW5zdGVhZC4nKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFw
cGxpY2F0aW9uLnJlb3BlbkNsYXNzKHsKLSAgICAgICAgICAgIGluaXRpYWxpemVyczoge30sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXplciByZWNlaXZl
cyBhbiBvYmplY3Qgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKLSAgICAgICAg
ICAgICAgICAgICAgYG5hbWVgLCBgYmVmb3JlYCwgYGFmdGVyYCwgYGluaXRpYWxpemVgLiBUaGUg
b25seSByZXF1aXJlZCBhdHRyaWJ1dGUgaXMKLSAgICAgICAgICAgICAgICAgICAgYGluaXRpYWxp
emUsIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsLgotCi0gICAgICAgICAgICAgICAgICAgICogYG5h
bWVgIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB1bmRlciB3aGljaCBuYW1lIHRoZSBpbml0aWFsaXpl
ciBpcyByZWdpc3RlcmVkLgotICAgICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYSB1bmlx
dWUgbmFtZSwgYXMgdHJ5aW5nIHRvIHJlZ2lzdGVyIHR3byBpbml0aWFsaXplcnMgd2l0aCB0aGUK
LSAgICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAgICAgICAgICAgICAgICAgIG5h
bWU6ICduYW1lZEluaXRpYWxpemVyJywKLSAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXpl
OiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBFbWJlci5kZWJ1ZygiUnVubmluZyBuYW1lZEluaXRpYWxpemVyISIpOwotICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgICogYGJlZm9yZWAgYW5kIGBhZnRlcmAgYXJl
IHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpbml0aWFsaXplciBpcyByYW4gcHJpb3IKLSAgICAg
ICAgICAgICAgICAgICAgb3IgYWZ0ZXIgdGhlIG9uZSBpZGVudGlmaWVkIGJ5IHRoZSB2YWx1ZS4g
VGhpcyB2YWx1ZSBjYW4gYmUgYSBzaW5nbGUgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIG9y
IGFuIGFycmF5IG9mIHN0cmluZ3MsIHJlZmVyZW5jaW5nIHRoZSBgbmFtZWAgb2Ygb3RoZXIgaW5p
dGlhbGl6ZXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2Ygb3JkZXJpbmcg
aW5pdGlhbGl6ZXJzLCB3ZSBjcmVhdGUgYW4gaW5pdGlhbGl6ZXIgbmFtZWQgYGZpcnN0YDoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVt
YmVyLkFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1l
OiAnZmlyc3QnLAotICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNv
bnRhaW5lciwgYXBwbGljYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmRl
YnVnKCJGaXJzdCBpbml0aWFsaXplciEiKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERFQlVHOiBGaXJz
dCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
ICAgICAgV2UgYWRkIGFub3RoZXIgaW5pdGlhbGl6ZXIgbmFtZWQgYHNlY29uZGAsIHNwZWNpZnlp
bmcgdGhhdCBpdCBzaG91bGQgcnVuCi0gICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBpbml0
aWFsaXplciBuYW1lZCBgZmlyc3RgOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewot
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzZWNvbmQnLAotICAgICAgICAgICAgICAgICAg
ICAgIGFmdGVyOiAnZmlyc3QnLAotCi0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24oY29udGFpbmVyLCBhcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuZGVidWcoIlNlY29uZCBpbml0aWFsaXplciEiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IERFQlVHOiBGaXJzdCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgLy8gREVCVUc6
IFNlY29uZCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgICAgICAgQWZ0ZXJ3YXJkcyB3ZSBhZGQgYSBmdXJ0aGVyIGluaXRpYWxpemVyIG5hbWVk
IGBwcmVgLCB0aGlzIHRpbWUgc3BlY2lmeWluZwotICAgICAgICAgICAgICAgICAgICB0aGF0IGl0
IHNob3VsZCBydW4gYmVmb3JlIHRoZSBpbml0aWFsaXplciBuYW1lZCBgZmlyc3RgOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIu
QXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdw
cmUnLAotICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZTogJ2ZpcnN0JywKLQotICAgICAgICAg
ICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXBwbGljYXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmRlYnVnKCJQcmUgaW5pdGlhbGl6ZXIh
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBERUJVRzogUHJlIGluaXRpYWxpemVyIQotICAgICAgICAg
ICAgICAgICAgICAvLyBERUJVRzogRmlyc3QgaW5pdGlhbGl6ZXIhCi0gICAgICAgICAgICAgICAg
ICAgIC8vIERFQlVHOiBTZWNvbmQgaW5pdGlhbGl6ZXIhCi0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIEZpbmFsbHkgd2UgYWRkIGFuIGluaXRpYWxpemVyIG5h
bWVkIGBwb3N0YCwgc3BlY2lmeWluZyBpdCBzaG91bGQgcnVuIGFmdGVyCi0gICAgICAgICAgICAg
ICAgICAgIGJvdGggdGhlIGBmaXJzdGAgYW5kIHRoZSBgc2Vjb25kYCBpbml0aWFsaXplcnM6Ci0K
LSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBF
bWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFt
ZTogJ3Bvc3QnLAotICAgICAgICAgICAgICAgICAgICAgIGFmdGVyOiBbJ2ZpcnN0JywgJ3NlY29u
ZCddLAotCi0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFp
bmVyLCBhcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVidWco
IlBvc3QgaW5pdGlhbGl6ZXIhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBERUJVRzogUHJlIGluaXRp
YWxpemVyIQotICAgICAgICAgICAgICAgICAgICAvLyBERUJVRzogRmlyc3QgaW5pdGlhbGl6ZXIh
Ci0gICAgICAgICAgICAgICAgICAgIC8vIERFQlVHOiBTZWNvbmQgaW5pdGlhbGl6ZXIhCi0gICAg
ICAgICAgICAgICAgICAgIC8vIERFQlVHOiBQb3N0IGluaXRpYWxpemVyIQotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICAqIGBpbml0aWFsaXplYCBpcyBhIGNh
bGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdHdvIGFyZ3VtZW50cywgYGNvbnRhaW5lcmAK
LSAgICAgICAgICAgICAgICAgICAgYW5kIGBhcHBsaWNhdGlvbmAgb24gd2hpY2ggeW91IGNhbiBv
cGVyYXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgb2YgdXNpbmcgYGNvbnRhaW5l
cmAgdG8gcHJlbG9hZCBkYXRhIGludG8gdGhlIHN0b3JlOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5p
dGlhbGl6ZXIoewotICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJwcmVsb2FkLWRhdGEiLAot
Ci0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCBh
cHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gY29udGFp
bmVyLmxvb2t1cCgnc3RvcmU6bWFpbicpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUu
cHVzaFBheWxvYWQocHJlbG9hZGVkRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgICAgICAgRXhhbXBsZSBvZiB1c2luZyBgYXBwbGljYXRpb25gIHRvIHJlZ2lzdGVyIGFu
IGFkYXB0ZXI6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICAgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogJ2FwaS1hZGFwdGVyJywKLQotICAgICAgICAgICAgICAgICAgICAgIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXBwbGljYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGxpY2F0aW9uLnJlZ2lzdGVyKCdhcGktYWRhcHRlcjptYWluJywgQXBp
QWRhcHRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBpbml0aWFsaXplcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gaW5pdGlhbGl6ZXIge09i
amVjdH0KLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5pdGlhbGl6ZXI6IGZ1
bmN0aW9uKGluaXRpYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUg
Zmlyc3QgaW5pdGlhbGl6ZXIgYmVpbmcgYWRkZWQgdG8gYSBzdWJjbGFzcywgd2UgYXJlIGdvaW5n
IHRvIHJlb3BlbiB0aGUgY2xhc3MKLSAgICAgICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgd2Ug
aGF2ZSBhIG5ldyBgaW5pdGlhbGl6ZXJzYCBvYmplY3QsIHdoaWNoIGV4dGVuZHMgZnJvbSB0aGUg
cGFyZW50IGNsYXNzJyB1c2luZwotICAgICAgICAgICAgICAgIC8vIHByb3RvdHlwYWwgaW5oZXJp
dGFuY2UuIFdpdGhvdXQgdGhpcywgYXR0ZW1wdGluZyB0byBhZGQgaW5pdGlhbGl6ZXJzIHRvIHRo
ZSBzdWJjbGFzcyB3b3VsZAotICAgICAgICAgICAgICAgIC8vIHBvbGx1dGUgdGhlIHBhcmVudCBj
bGFzcyBhcyB3ZWxsIGFzIG90aGVyIHN1YmNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKHRo
aXMuc3VwZXJjbGFzcy5pbml0aWFsaXplcnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnN1cGVyY2xh
c3MuaW5pdGlhbGl6ZXJzID09PSB0aGlzLmluaXRpYWxpemVycykgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlb3BlbkNsYXNzKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxp
emVyczogY3JlYXRlKHRoaXMuaW5pdGlhbGl6ZXJzKQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBp
bml0aWFsaXplciAnIiArIGluaXRpYWxpemVyLm5hbWUgKyAiJyBoYXMgYWxyZWFkeSBiZWVuIHJl
Z2lzdGVyZWQiLCAhdGhpcy5pbml0aWFsaXplcnNbaW5pdGlhbGl6ZXIubmFtZV0pOwotICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgiQW4gaW5pdGlhbGl6ZXIgY2Fubm90IGJlIHJlZ2lzdGVy
ZWQgd2l0aG91dCBhbiBpbml0aWFsaXplIGZ1bmN0aW9uIiwgY2FuSW52b2tlKGluaXRpYWxpemVy
LCAnaW5pdGlhbGl6ZScpKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZXJzW2lu
aXRpYWxpemVyLm5hbWVdID0gaW5pdGlhbGl6ZXI7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBjcmVhdGVzIGEgY29udGFpbmVyIHdp
dGggdGhlIGRlZmF1bHQgRW1iZXIgbmFtaW5nIGNvbnZlbnRpb25zLgotCi0gICAgICAgICAgICAg
ICAgICAgIEl0IGFsc28gY29uZmlndXJlcyB0aGUgY29udGFpbmVyOgotCi0gICAgICAgICAgICAg
ICAgICAgICogcmVnaXN0ZXJlZCB2aWV3cyBhcmUgY3JlYXRlZCBldmVyeSB0aW1lIHRoZXkgYXJl
IGxvb2tlZCB1cCAodGhleSBhcmUKLSAgICAgICAgICAgICAgICAgICAgICBub3Qgc2luZ2xldG9u
cykKLSAgICAgICAgICAgICAgICAgICAgKiByZWdpc3RlcmVkIHRlbXBsYXRlcyBhcmUgbm90IGZh
Y3RvcmllczsgdGhlIHJlZ2lzdGVyZWQgdmFsdWUgaXMKLSAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5lZCBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICAgICAgKiB0aGUgcm91dGVyIHJlY2Vp
dmVzIHRoZSBhcHBsaWNhdGlvbiBhcyBpdHMgYG5hbWVzcGFjZWAgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgICAgICAgKiBhbGwgY29udHJvbGxlcnMgcmVjZWl2ZSB0aGUgcm91dGVyIGFzIHRoZWly
IGB0YXJnZXRgIGFuZCBgY29udHJvbGxlcnNgCi0gICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dGllcwotICAgICAgICAgICAgICAgICAgICAqIGFsbCBjb250cm9sbGVycyByZWNlaXZlIHRoZSBh
cHBsaWNhdGlvbiBhcyB0aGVpciBgbmFtZXNwYWNlYCBwcm9wZXJ0eQotICAgICAgICAgICAgICAg
ICAgICAqIHRoZSBhcHBsaWNhdGlvbiB2aWV3IHJlY2VpdmVzIHRoZSBhcHBsaWNhdGlvbiBjb250
cm9sbGVyIGFzIGl0cwotICAgICAgICAgICAgICAgICAgICAgIGBjb250cm9sbGVyYCBwcm9wZXJ0
eQotICAgICAgICAgICAgICAgICAgICAqIHRoZSBhcHBsaWNhdGlvbiB2aWV3IHJlY2VpdmVzIHRo
ZSBhcHBsaWNhdGlvbiB0ZW1wbGF0ZSBhcyBpdHMKLSAgICAgICAgICAgICAgICAgICAgICBgZGVm
YXVsdFRlbXBsYXRlYCBwcm9wZXJ0eQotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYnVpbGRDb250YWluZXIKLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkFwcGxpY2F0
aW9ufSBuYW1lc3BhY2UgdGhlIGFwcGxpY2F0aW9uIHRvIGJ1aWxkIHRoZQotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lciBmb3IuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLkNvbnRhaW5lcn0gdGhlIGJ1aWx0IGNvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGJ1aWxkQ29udGFpbmVyOiBmdW5jdGlvbihuYW1lc3BhY2UpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotCi0gICAgICAgICAg
ICAgICAgQ29udGFpbmVyLmRlZmF1bHRDb250YWluZXIgPSBuZXcgRGVwcmVjYXRlZENvbnRhaW5l
cihjb250YWluZXIpOwotCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLnNldCA9IHNldDsKLSAg
ICAgICAgICAgICAgICBjb250YWluZXIucmVzb2x2ZXIgPSByZXNvbHZlckZvcihuYW1lc3BhY2Up
OwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5ub3JtYWxpemUgPSBjb250YWluZXIucmVzb2x2
ZXIubm9ybWFsaXplOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5kZXNjcmliZSA9IGNvbnRh
aW5lci5yZXNvbHZlci5kZXNjcmliZTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIubWFrZVRv
U3RyaW5nID0gY29udGFpbmVyLnJlc29sdmVyLm1ha2VUb1N0cmluZzsKLQotICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5vcHRpb25zRm9yVHlwZSgnY29tcG9uZW50JywgewotICAgICAgICAgICAg
ICAgICAgICBzaW5nbGV0b246IGZhbHNlIAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5vcHRpb25zRm9yVHlwZSgndmlldycsIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2luZ2xldG9uOiBmYWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICBjb250YWluZXIub3B0aW9uc0ZvclR5cGUoJ3RlbXBsYXRlJywgewotICAgICAgICAgICAg
ICAgICAgICBpbnN0YW50aWF0ZTogZmFsc2UgCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgY29udGFpbmVyLm9wdGlvbnNGb3JUeXBlKCdoZWxwZXInLCB7Ci0gICAgICAgICAg
ICAgICAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignYXBwbGljYXRpb246bWFpbicsIG5hbWVz
cGFjZSwgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZTogZmFsc2UgCi0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2NvbnRy
b2xsZXI6YmFzaWMnLCBDb250cm9sbGVyLCB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbnRp
YXRlOiBmYWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb250YWlu
ZXIucmVnaXN0ZXIoJ2NvbnRyb2xsZXI6b2JqZWN0JywgT2JqZWN0Q29udHJvbGxlciwgewotICAg
ICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZTogZmFsc2UgCi0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdjb250cm9sbGVyOmFycmF5Jywg
QXJyYXlDb250cm9sbGVyLCB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlOiBmYWxz
ZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0
ZXIoJ3JvdXRlOmJhc2ljJywgUm91dGUsIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlh
dGU6IGZhbHNlIAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5yZWdpc3RlcignZXZlbnRfZGlzcGF0Y2hlcjptYWluJywgRXZlbnREaXNwYXRjaGVyKTsKLQot
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcigncm91dGVyOm1haW4nLCBSb3V0ZXIp
OwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3JvdXRlcjptYWluJywgJ25h
bWVzcGFjZScsICdhcHBsaWNhdGlvbjptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICBjb250YWlu
ZXIucmVnaXN0ZXIoJ2xvY2F0aW9uOmF1dG8nLCBBdXRvTG9jYXRpb24pOwotICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5yZWdpc3RlcignbG9jYXRpb246aGFzaCcsIEhhc2hMb2NhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdsb2NhdGlvbjpoaXN0b3J5JywgSGlz
dG9yeUxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2xvY2F0
aW9uOm5vbmUnLCBOb25lTG9jYXRpb24pOwotCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLmlu
amVjdGlvbignY29udHJvbGxlcicsICd0YXJnZXQnLCAncm91dGVyOm1haW4nKTsKLSAgICAgICAg
ICAgICAgICBjb250YWluZXIuaW5qZWN0aW9uKCdjb250cm9sbGVyJywgJ25hbWVzcGFjZScsICdh
cHBsaWNhdGlvbjptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIo
Jy1idWNrZXQtY2FjaGU6bWFpbicsIEJ1Y2tldENhY2hlKTsKLSAgICAgICAgICAgICAgICBjb250
YWluZXIuaW5qZWN0aW9uKCdyb3V0ZXInLCAnX2J1Y2tldENhY2hlJywgJy1idWNrZXQtY2FjaGU6
bWFpbicpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3JvdXRlJywgJ19i
dWNrZXRDYWNoZScsICctYnVja2V0LWNhY2hlOm1haW4nKTsKLSAgICAgICAgICAgICAgICBjb250
YWluZXIuaW5qZWN0aW9uKCdjb250cm9sbGVyJywgJ19idWNrZXRDYWNoZScsICctYnVja2V0LWNh
Y2hlOm1haW4nKTsKLQotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3JvdXRl
JywgJ3JvdXRlcicsICdyb3V0ZXI6bWFpbicpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5p
bmplY3Rpb24oJ2xvY2F0aW9uJywgJ3Jvb3RVUkwnLCAnLWxvY2F0aW9uLXNldHRpbmc6cm9vdC11
cmwnKTsKLQotICAgICAgICAgICAgICAgIC8vIERFQlVHR0lORwotICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5yZWdpc3RlcigncmVzb2x2ZXItZm9yLWRlYnVnZ2luZzptYWluJywgY29udGFpbmVy
LnJlc29sdmVyLl9fcmVzb2x2ZXJfXywgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0
ZTogZmFsc2UgCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVy
LmluamVjdGlvbignY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbicsICdyZXNvbHZlcicsICdy
ZXNvbHZlci1mb3ItZGVidWdnaW5nOm1haW4nKTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIu
aW5qZWN0aW9uKCdkYXRhLWFkYXB0ZXI6bWFpbicsICdjb250YWluZXJEZWJ1Z0FkYXB0ZXInLCAn
Y29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbicpOwotICAgICAgICAgICAgICAgIC8vIEN1c3Rv
bSByZXNvbHZlciBhdXRob3JzIG1heSB3YW50IHRvIHJlZ2lzdGVyIHRoZWlyIG93biBDb250YWlu
ZXJEZWJ1Z0FkYXB0ZXIgd2l0aCB0aGlzIGtleQotCi0gICAgICAgICAgICAgICAgLy8gRVM2VE9E
TzogcmVzb2x2ZSB0aGlzIHZpYSBpbXBvcnQgb25jZSBlbWJlci1hcHBsaWNhdGlvbiBwYWNrYWdl
IGlzIEVTNidlZAotICAgICAgICAgICAgICAgIGlmICghQ29udGFpbmVyRGVidWdBZGFwdGVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIENvbnRhaW5lckRlYnVnQWRhcHRlciA9IHJlcXVpcmVNb2R1
bGUoJ2VtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2NvbnRhaW5lcl9kZWJ1Z19hZGFwdGVyJylbJ2Rl
ZmF1bHQnXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJl
Z2lzdGVyKCdjb250YWluZXItZGVidWctYWRhcHRlcjptYWluJywgQ29udGFpbmVyRGVidWdBZGFw
dGVyKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9u
IGRlZmluZXMgdGhlIGRlZmF1bHQgbG9va3VwIHJ1bGVzIGZvciBjb250YWluZXIgbG9va3VwczoK
LQotICAgICAgICAgICAgICAqIHRlbXBsYXRlcyBhcmUgbG9va2VkIHVwIG9uIGBFbWJlci5URU1Q
TEFURVNgCi0gICAgICAgICAgICAgICogb3RoZXIgbmFtZXMgYXJlIGxvb2tlZCB1cCBvbiB0aGUg
YXBwbGljYXRpb24gYWZ0ZXIgY2xhc3NpZnlpbmcgdGhlIG5hbWUuCi0gICAgICAgICAgICAgICAg
Rm9yIGV4YW1wbGUsIGBjb250cm9sbGVyOnBvc3RgIGxvb2tzIHVwIGBBcHAuUG9zdENvbnRyb2xs
ZXJgIGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICAgICogaWYgdGhlIGRlZmF1bHQgbG9va3VwIGZh
aWxzLCBsb29rIGZvciByZWdpc3RlcmVkIGNsYXNzZXMgb24gdGhlIGNvbnRhaW5lcgotCi0gICAg
ICAgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byByZWdpc3RlciBkZWZhdWx0
IGluamVjdGlvbnMgaW4gdGhlIGNvbnRhaW5lcgotICAgICAgICAgICAgICB0aGF0IGNvdWxkIGJl
IG92ZXJyaWRkZW4gYnkgdGhlIG5vcm1hbCBuYW1pbmcgY29udmVudGlvbi4KLQotICAgICAgICAg
ICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmVyRm9yCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7RW1iZXIuTmFtZXNwYWNlfSBuYW1lc3BhY2UgdGhlIG5hbWVzcGFjZSB0
byBsb29rIGZvciBjbGFzc2VzCi0gICAgICAgICAgICAgIEByZXR1cm4geyp9IHRoZSByZXNvbHZl
ZCB2YWx1ZSBmb3IgYSBnaXZlbiBsb29rdXAKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHJlc29sdmVyRm9yKG5hbWVzcGFjZSkgewotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5n
ZXQoJ3Jlc29sdmVyJykpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ0FwcGxp
Y2F0aW9uLnJlc29sdmVyIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgQXBwbGljYXRpb24uUmVz
b2x2ZXInLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBSZXNvbHZl
ckNsYXNzID0gbmFtZXNwYWNlLmdldCgncmVzb2x2ZXInKSB8fCBuYW1lc3BhY2UuZ2V0KCdSZXNv
bHZlcicpIHx8IERlZmF1bHRSZXNvbHZlcjsKLSAgICAgICAgICAgIHZhciByZXNvbHZlciA9IFJl
c29sdmVyQ2xhc3MuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFj
ZQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmUoZnVsbE5h
bWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZShmdWxsTmFtZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlc29sdmUuZGVzY3JpYmUgPSBmdW5jdGlv
bihmdWxsTmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlci5sb29rdXBEZXNj
cmlwdGlvbihmdWxsTmFtZSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXNvbHZl
Lm1ha2VUb1N0cmluZyA9IGZ1bmN0aW9uKGZhY3RvcnksIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc29sdmVyLm1ha2VUb1N0cmluZyhmYWN0b3J5LCBmdWxsTmFtZSk7Ci0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXNvbHZlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9u
KGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVyLm5vcm1hbGl6ZSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIubm9ybWFsaXplKGZ1bGxOYW1lKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5kZXBy
ZWNhdGUoJ1RoZSBSZXNvbHZlciBzaG91bGQgbm93IHByb3ZpZGUgYSBcJ25vcm1hbGl6ZVwnIGZ1
bmN0aW9uJywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsbE5hbWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgcmVzb2x2ZS5f
X3Jlc29sdmVyX18gPSByZXNvbHZlcjsKLQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQXBwbGljYXRpb247
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZGFnIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2Vycm9yIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgICAgICBm
dW5jdGlvbiB2aXNpdCh2ZXJ0ZXgsIGZuLCB2aXNpdGVkLCBwYXRoKSB7Ci0gICAgICAgICAgICB2
YXIgbmFtZSA9IHZlcnRleC5uYW1lOwotICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdmVydGV4
LmluY29taW5nOwotICAgICAgICAgICAgdmFyIG5hbWVzID0gdmVydGV4LmluY29taW5nTmFtZXM7
Ci0gICAgICAgICAgICB2YXIgbGVuID0gbmFtZXMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIGk7
Ci0KLSAgICAgICAgICAgIGlmICghdmlzaXRlZCkgewotICAgICAgICAgICAgICAgIHZpc2l0ZWQg
PSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGF0aCkgewotICAgICAgICAg
ICAgICAgIHBhdGggPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2aXNpdGVk
Lmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcGF0aC5wdXNoKG5hbWUpOwotICAgICAgICAgICAgdmlzaXRl
ZFtuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK
LSAgICAgICAgICAgICAgICB2aXNpdCh2ZXJ0aWNlc1tuYW1lc1tpXV0sIGZuLCB2aXNpdGVkLCBw
YXRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZuKHZlcnRleCwgcGF0aCk7Ci0gICAg
ICAgICAgICBwYXRoLnBvcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gREFHKCkg
ewotICAgICAgICAgICAgdGhpcy5uYW1lcyA9IFtdOwotICAgICAgICAgICAgdGhpcy52ZXJ0aWNl
cyA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgREFHLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgICAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNlcy5oYXNPd25Q
cm9wZXJ0eShuYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2VzW25h
bWVdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHZlcnRleCA9IHsKLSAgICAgICAg
ICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICAgIGluY29taW5nOiB7fSwKLSAgICAg
ICAgICAgICAgICBpbmNvbWluZ05hbWVzOiBbXSwKLSAgICAgICAgICAgICAgICBoYXNPdXRnb2lu
ZzogZmFsc2UsCi0gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB0aGlzLnZlcnRpY2VzW25hbWVdID0gdmVydGV4OwotICAgICAgICAgICAgdGhp
cy5uYW1lcy5wdXNoKG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHZlcnRleDsKLSAgICAgICAg
fTsKLQotICAgICAgICBEQUcucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7
Ci0gICAgICAgICAgICB0aGlzLmFkZChuYW1lKS52YWx1ZSA9IHZhbHVlOwotICAgICAgICB9Owot
Ci0gICAgICAgIERBRy5wcm90b3R5cGUuYWRkRWRnZSA9IGZ1bmN0aW9uKGZyb21OYW1lLCB0b05h
bWUpIHsKLSAgICAgICAgICAgIGlmICghZnJvbU5hbWUgfHwgIXRvTmFtZSB8fCBmcm9tTmFtZSA9
PT0gdG9OYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdmFyIGZyb20gPSB0aGlzLmFkZChmcm9tTmFtZSksIHRvID0gdGhpcy5hZGQodG9O
YW1lKTsKLSAgICAgICAgICAgIGlmICh0by5pbmNvbWluZy5oYXNPd25Qcm9wZXJ0eShmcm9tTmFt
ZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmdW5jdGlvbiBjaGVja0N5Y2xlKHZlcnRleCwgcGF0aCkgewotICAgICAgICAgICAgICAgIGlm
ICh2ZXJ0ZXgubmFtZSA9PT0gdG9OYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFbWJlckVycm9yKCJjeWNsZSBkZXRlY3RlZDogIiArIHRvTmFtZSArICIgPC0gIiArIHBhdGgu
am9pbigiIDwtICIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB2aXNpdChmcm9tLCBjaGVja0N5Y2xlKTsKLSAgICAgICAgICAgIGZyb20uaGFzT3V0Z29p
bmcgPSB0cnVlOwotICAgICAgICAgICAgdG8uaW5jb21pbmdbZnJvbU5hbWVdID0gZnJvbTsKLSAg
ICAgICAgICAgIHRvLmluY29taW5nTmFtZXMucHVzaChmcm9tTmFtZSk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgREFHLnByb3RvdHlwZS50b3Bzb3J0ID0gZnVuY3Rpb24oZm4pIHsKLSAgICAgICAg
ICAgIHZhciB2aXNpdGVkID0ge307Ci0gICAgICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZl
cnRpY2VzOwotICAgICAgICAgICAgdmFyIG5hbWVzID0gdGhpcy5uYW1lczsKLSAgICAgICAgICAg
IHZhciBsZW4gPSBuYW1lcy5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgaSwgdmVydGV4OwotCi0g
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICB2
ZXJ0ZXggPSB2ZXJ0aWNlc1tuYW1lc1tpXV07Ci0gICAgICAgICAgICAgICAgaWYgKCF2ZXJ0ZXgu
aGFzT3V0Z29pbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlzaXQodmVydGV4LCBmbiwgdmlz
aXRlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIERBRy5wcm90b3R5cGUuYWRkRWRnZXMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYmVm
b3JlLCBhZnRlcikgewotICAgICAgICAgICAgdmFyIGk7Ci0gICAgICAgICAgICB0aGlzLm1hcChu
YW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoYmVmb3JlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiBiZWZvcmUgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuYWRkRWRnZShuYW1lLCBiZWZvcmUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBiZWZvcmUubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRWRnZShuYW1lLCBiZWZvcmVbaV0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhZnRlciA9
PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFZGdlKGFmdGVyLCBu
YW1lKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgYWZ0ZXIubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuYWRkRWRnZShhZnRlcltpXSwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IERBRzsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWFw
cGxpY2F0aW9uL3N5c3RlbS9kZXByZWNhdGVkLWNvbnRhaW5lciIsCi0gICAgWyJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICBmdW5jdGlvbiBEZXByZWNhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikgewotICAgICAgICAg
ICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgRGVw
cmVjYXRlZENvbnRhaW5lci5kZXByZWNhdGUgPSBmdW5jdGlvbihtZXRob2QpIHsKLSAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0g
dGhpcy5fY29udGFpbmVyOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdVc2lu
ZyB0aGUgZGVmYXVsdENvbnRhaW5lciBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBbZGVmYXVsdENv
bnRhaW5lciMnICsgbWV0aG9kICsgJ10gc2VlOiBodHRwOi8vZ2l0LmlvL0VLUHBuQScsIGZhbHNl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyW21ldGhvZF0uYXBwbHkoY29udGFp
bmVyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLQotICAgICAgICBE
ZXByZWNhdGVkQ29udGFpbmVyLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIF9jb250YWluZXI6
IG51bGwsCi0gICAgICAgICAgICBsb29rdXA6IERlcHJlY2F0ZWRDb250YWluZXIuZGVwcmVjYXRl
KCdsb29rdXAnKSwKLSAgICAgICAgICAgIHJlc29sdmU6IERlcHJlY2F0ZWRDb250YWluZXIuZGVw
cmVjYXRlKCdyZXNvbHZlJyksCi0gICAgICAgICAgICByZWdpc3RlcjogRGVwcmVjYXRlZENvbnRh
aW5lci5kZXByZWNhdGUoJ3JlZ2lzdGVyJykKLSAgICAgICAgfTsKLQotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gRGVwcmVjYXRlZENvbnRhaW5lcjsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9sb2dnZXIi
LCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29i
amVjdCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UiLCAiZW1iZXItaGFuZGxlYmFy
cyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVu
Y3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18s
IF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgot
ICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1hcHBsaWNhdGlvbgotICAgICAgICAgICAgKi8K
LQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXIuVEVNUExBVEVTLCBFbWJlci5hc3NlcnQKLSAgICAgICAgdmFyIGdldCA9IF9f
ZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBMb2dnZXIgPSBfX2RlcGVuZGVuY3kzX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNsYXNzaWZ5ID0gX19kZXBlbmRlbmN5NF9fLmNsYXNz
aWZ5OwotICAgICAgICB2YXIgY2FwaXRhbGl6ZSA9IF9fZGVwZW5kZW5jeTRfXy5jYXBpdGFsaXpl
OwotICAgICAgICB2YXIgZGVjYW1lbGl6ZSA9IF9fZGVwZW5kZW5jeTRfXy5kZWNhbWVsaXplOwot
ICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIE5hbWVzcGFjZSA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0KLSAg
ICAgICAgdmFyIFJlc29sdmVyID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBBcHBsaWNhdGlv
biBpbnN0YW5jZSB3aGVuIGl0IGlzCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IG5hbWVzcGFjZQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIG5hbWVzcGFjZTogbnVsbCwKLSAgICAgICAgICAgIG5vcm1hbGl6ZTog
RW1iZXIucmVxdWlyZWQoRnVuY3Rpb24pLAotICAgICAgICAgICAgcmVzb2x2ZTogRW1iZXIucmVx
dWlyZWQoRnVuY3Rpb24pLAotICAgICAgICAgICAgcGFyc2VOYW1lOiBFbWJlci5yZXF1aXJlZChG
dW5jdGlvbiksCi0gICAgICAgICAgICBsb29rdXBEZXNjcmlwdGlvbjogRW1iZXIucmVxdWlyZWQo
RnVuY3Rpb24pLAotICAgICAgICAgICAgbWFrZVRvU3RyaW5nOiBFbWJlci5yZXF1aXJlZChGdW5j
dGlvbiksCi0gICAgICAgICAgICByZXNvbHZlT3RoZXI6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9u
KSwKLSAgICAgICAgICAgIF9sb2dMb29rdXA6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKQotICAg
ICAgICB9KTsKLSAgICAgICAgX19leHBvcnRzX18uUmVzb2x2ZXIgPSBSZXNvbHZlcjsKLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBEZWZhdWx0UmVzb2x2ZXIgZGVmaW5lcyB0aGUgZGVm
YXVsdCBsb29rdXAgcnVsZXMgdG8gcmVzb2x2ZQotICAgICAgICAgICAgICBjb250YWluZXIgbG9v
a3VwcyBiZWZvcmUgY29uc3VsdGluZyB0aGUgY29udGFpbmVyIGZvciByZWdpc3RlcmVkCi0gICAg
ICAgICAgICAgIGl0ZW1zOgotCi0gICAgICAgICAgICAgICogdGVtcGxhdGVzIGFyZSBsb29rZWQg
dXAgb24gYEVtYmVyLlRFTVBMQVRFU2AKLSAgICAgICAgICAgICAgKiBvdGhlciBuYW1lcyBhcmUg
bG9va2VkIHVwIG9uIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBjb252ZXJ0aW5nCi0gICAgICAgICAg
ICAgICAgdGhlIG5hbWUuIEZvciBleGFtcGxlLCBgY29udHJvbGxlcjpwb3N0YCBsb29rcyB1cAot
ICAgICAgICAgICAgICAgIGBBcHAuUG9zdENvbnRyb2xsZXJgIGJ5IGRlZmF1bHQuCi0gICAgICAg
ICAgICAgICogdGhlcmUgYXJlIHNvbWUgbnVhbmNlcyAoc2VlIGV4YW1wbGVzIGJlbG93KQotCi0g
ICAgICAgICAgICAgICMjIyBIb3cgUmVzb2x2aW5nIFdvcmtzCi0KLSAgICAgICAgICAgICAgVGhl
IGNvbnRhaW5lciBjYWxscyB0aGlzIG9iamVjdCdzIGByZXNvbHZlYCBtZXRob2Qgd2l0aCB0aGUK
LSAgICAgICAgICAgICAgYGZ1bGxOYW1lYCBhcmd1bWVudC4KLQotICAgICAgICAgICAgICBJdCBm
aXJzdCBwYXJzZXMgdGhlIGZ1bGxOYW1lIGludG8gYW4gb2JqZWN0IHVzaW5nIGBwYXJzZU5hbWVg
LgotCi0gICAgICAgICAgICAgIFRoZW4gaXQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSB0
eXBlLXNwZWNpZmljIGluc3RhbmNlCi0gICAgICAgICAgICAgIG1ldGhvZCBvZiB0aGUgZm9ybSBg
cmVzb2x2ZVtUeXBlXWAgYW5kIGNhbGxzIGl0IGlmIGl0IGV4aXN0cy4KLSAgICAgICAgICAgICAg
Rm9yIGV4YW1wbGUgaWYgaXQgd2FzIHJlc29sdmluZyAndGVtcGxhdGU6cG9zdCcsIGl0IHdvdWxk
IGNhbGwKLSAgICAgICAgICAgICAgdGhlIGByZXNvbHZlVGVtcGxhdGVgIG1ldGhvZC4KLQotICAg
ICAgICAgICAgICBJdHMgbGFzdCByZXNvcnQgaXMgdG8gY2FsbCB0aGUgYHJlc29sdmVPdGhlcmAg
bWV0aG9kLgotCi0gICAgICAgICAgICAgIFRoZSBtZXRob2RzIG9mIHRoaXMgb2JqZWN0IGFyZSBk
ZXNpZ25lZCB0byBiZSBlYXN5IHRvIG92ZXJyaWRlCi0gICAgICAgICAgICAgIGluIGEgc3ViY2xh
c3MuIEZvciBleGFtcGxlLCB5b3UgY291bGQgZW5oYW5jZSBob3cgYSB0ZW1wbGF0ZQotICAgICAg
ICAgICAgICBpcyByZXNvbHZlZCBsaWtlIHNvOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsKLSAgICAg
ICAgICAgICAgICBSZXNvbHZlcjogRW1iZXIuRGVmYXVsdFJlc29sdmVyLmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgICByZXNvbHZlVGVtcGxhdGU6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmVkVGVtcGxhdGUgPSB0aGlzLl9zdXBlcihwYXJz
ZWROYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkVGVtcGxhdGUpIHsgcmV0
dXJuIHJlc29sdmVkVGVtcGxhdGU7IH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVy
LlRFTVBMQVRFU1snbm90X2ZvdW5kJ107Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFNvbWUgZXhhbXBsZXMgb2YgaG93IG5hbWVzIGFyZSByZXNvbHZlZDoKLQotICAgICAg
ICAgICAgICBgYGAKLSAgICAgICAgICAgICAgJ3RlbXBsYXRlOnBvc3QnIC8vPT4gRW1iZXIuVEVN
UExBVEVTWydwb3N0J10KLSAgICAgICAgICAgICAgJ3RlbXBsYXRlOnBvc3RzL2J5bGluZScgLy89
PiBFbWJlci5URU1QTEFURVNbJ3Bvc3RzL2J5bGluZSddCi0gICAgICAgICAgICAgICd0ZW1wbGF0
ZTpwb3N0cy5ieWxpbmUnIC8vPT4gRW1iZXIuVEVNUExBVEVTWydwb3N0cy9ieWxpbmUnXQotICAg
ICAgICAgICAgICAndGVtcGxhdGU6YmxvZ1Bvc3QnIC8vPT4gRW1iZXIuVEVNUExBVEVTWydibG9n
UG9zdCddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBPUgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgRW1iZXIuVEVNUExBVEVTWydibG9nX3Bv
c3QnXQotICAgICAgICAgICAgICAnY29udHJvbGxlcjpwb3N0JyAvLz0+IEFwcC5Qb3N0Q29udHJv
bGxlcgotICAgICAgICAgICAgICAnY29udHJvbGxlcjpwb3N0cy5pbmRleCcgLy89PiBBcHAuUG9z
dHNJbmRleENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgJ2NvbnRyb2xsZXI6YmxvZy9wb3N0JyAv
Lz0+IEJsb2cuUG9zdENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgJ2NvbnRyb2xsZXI6YmFzaWMn
IC8vPT4gRW1iZXIuQ29udHJvbGxlcgotICAgICAgICAgICAgICAncm91dGU6cG9zdCcgLy89PiBB
cHAuUG9zdFJvdXRlCi0gICAgICAgICAgICAgICdyb3V0ZTpwb3N0cy5pbmRleCcgLy89PiBBcHAu
UG9zdHNJbmRleFJvdXRlCi0gICAgICAgICAgICAgICdyb3V0ZTpibG9nL3Bvc3QnIC8vPT4gQmxv
Zy5Qb3N0Um91dGUKLSAgICAgICAgICAgICAgJ3JvdXRlOmJhc2ljJyAvLz0+IEVtYmVyLlJvdXRl
Ci0gICAgICAgICAgICAgICd2aWV3OnBvc3QnIC8vPT4gQXBwLlBvc3RWaWV3Ci0gICAgICAgICAg
ICAgICd2aWV3OnBvc3RzLmluZGV4JyAvLz0+IEFwcC5Qb3N0c0luZGV4VmlldwotICAgICAgICAg
ICAgICAndmlldzpibG9nL3Bvc3QnIC8vPT4gQmxvZy5Qb3N0VmlldwotICAgICAgICAgICAgICAn
dmlldzpiYXNpYycgLy89PiBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICdmb286cG9zdCcgLy89
PiBBcHAuUG9zdEZvbwotICAgICAgICAgICAgICAnbW9kZWw6cG9zdCcgLy89PiBBcHAuUG9zdAot
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgRGVmYXVsdFJlc29sdmVy
Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMg
RW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAqLwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBFbWJlck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIEFwcGxpY2F0aW9uIGluc3RhbmNlIHdo
ZW4gaXQgaXMKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlZC4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgbmFtZXNwYWNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgbmFtZXNwYWNlOiBudWxsLAotCi0gICAgICAgICAgICBub3JtYWxpemU6IGZ1bmN0aW9uKGZ1
bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNwbGl0ID0gZnVsbE5hbWUuc3BsaXQoJzon
LCAyKSwKLSAgICAgICAgICAgICAgICB0eXBlID0gc3BsaXRbMF0sCi0gICAgICAgICAgICAgICAg
bmFtZSA9IHNwbGl0WzFdOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJUcmllZCB0
byBub3JtYWxpemUgYSBjb250YWluZXIgbmFtZSB3aXRob3V0IGEgY29sb24gKDopIGluIGl0LiBZ
b3UgcHJvYmFibHkgdHJpZWQgdG8gbG9va3VwIGEgbmFtZSB0aGF0IGRpZCBub3QgY29udGFpbiBh
IHR5cGUsIGEgY29sb24sIGFuZCBhIG5hbWUuIEEgcHJvcGVyIGxvb2t1cCBuYW1lIHdvdWxkIGJl
IGB2aWV3OnBvc3RgLiIsIHNwbGl0Lmxlbmd0aCA9PT0gMik7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodHlwZSAhPT0gJ3RlbXBsYXRlJykgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gbmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoJy4nKSA+
IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgv
XC4oLikvZywgZnVuY3Rpb24obSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5p
bmRleE9mKCdfJykgPiAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVz
dWx0LnJlcGxhY2UoL18oLikvZywgZnVuY3Rpb24obSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHlwZSArICc6JyArIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsbE5hbWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
VGhpcyBtZXRob2QgaXMgY2FsbGVkIHZpYSB0aGUgY29udGFpbmVyJ3MgcmVzb2x2ZXIgbWV0aG9k
LgotICAgICAgICAgICAgICAgICAgICBJdCBwYXJzZXMgdGhlIHByb3ZpZGVkIGBmdWxsTmFtZWAg
YW5kIHRoZW4gbG9va3MgdXAgYW5kCi0gICAgICAgICAgICAgICAgICAgIHJldHVybnMgdGhlIGFw
cHJvcHJpYXRlIHRlbXBsYXRlIG9yIGNsYXNzLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcmVzb2x2ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUg
dGhlIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0
aGUgcmVzb2x2ZWQgZmFjdG9yeQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJl
c29sdmU6IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnNlZE5h
bWUgPSB0aGlzLnBhcnNlTmFtZShmdWxsTmFtZSksCi0gICAgICAgICAgICAgICAgcmVzb2x2ZU1l
dGhvZE5hbWUgPSBwYXJzZWROYW1lLnJlc29sdmVNZXRob2ROYW1lLAotICAgICAgICAgICAgICAg
IHJlc29sdmVkOwotCi0gICAgICAgICAgICAgICAgaWYgKCEocGFyc2VkTmFtZS5uYW1lICYmIHBh
cnNlZE5hbWUudHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cignSW52YWxpZCBmdWxsTmFtZTogYCcgKyBmdWxsTmFtZSArICdgLCBtdXN0IGJlIG9mIHRoZSBm
b3JtIGB0eXBlOm5hbWVgICcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0aGlzW3Jlc29sdmVNZXRob2ROYW1lXSkgewotICAgICAgICAgICAgICAgICAgICByZXNv
bHZlZCA9IHRoaXNbcmVzb2x2ZU1ldGhvZE5hbWVdKHBhcnNlZE5hbWUpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghcmVzb2x2ZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyc2VkTmFtZS5yb290ICYmIHBhcnNl
ZE5hbWUucm9vdC5MT0dfUkVTT0xWRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9n
TG9va3VwKHJlc29sdmVkLCBwYXJzZWROYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIENvbnZlcnQgdGhlIHN0cmluZyBuYW1lIG9mIHRoZSBm
b3JtICd0eXBlOm5hbWUnIHRvCi0gICAgICAgICAgICAgICAgICAgIGEgSmF2YXNjcmlwdCBvYmpl
Y3Qgd2l0aCB0aGUgcGFyc2VkIGFzcGVjdHMgb2YgdGhlIG5hbWUKLSAgICAgICAgICAgICAgICAg
ICAgYnJva2VuIG91dC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZSB0aGUgbG9va3VwIHN0cmluZwot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHBhcnNlTmFtZQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHBhcnNlTmFtZTogZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgbmFtZVBhcnRzID0gZnVsbE5hbWUuc3BsaXQoJzonKSwKLSAgICAgICAgICAg
ICAgICB0eXBlID0gbmFtZVBhcnRzWzBdLCBmdWxsTmFtZVdpdGhvdXRUeXBlID0gbmFtZVBhcnRz
WzFdLAotICAgICAgICAgICAgICAgIG5hbWUgPSBmdWxsTmFtZVdpdGhvdXRUeXBlLAotICAgICAg
ICAgICAgICAgIG5hbWVzcGFjZSA9IGdldCh0aGlzLCAnbmFtZXNwYWNlJyksCi0gICAgICAgICAg
ICAgICAgcm9vdCA9IG5hbWVzcGFjZTsKLQotICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAn
dGVtcGxhdGUnICYmIG5hbWUuaW5kZXhPZignLycpICE9PSAtMSkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5h
bWVzcGFjZU5hbWUgPSBjYXBpdGFsaXplKHBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJykpOwot
ICAgICAgICAgICAgICAgICAgICByb290ID0gTmFtZXNwYWNlLmJ5TmFtZShuYW1lc3BhY2VOYW1l
KTsKLQotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1lvdSBhcmUgbG9va2luZyBm
b3IgYSAnICsgbmFtZSArICcgJyArIHR5cGUgKyAnIGluIHRoZSAnICsgbmFtZXNwYWNlTmFtZSAr
ICcgbmFtZXNwYWNlLCBidXQgdGhlIG5hbWVzcGFjZSBjb3VsZCBub3QgYmUgZm91bmQnLCByb290
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgICAgICBmdWxsTmFtZTogZnVsbE5hbWUsCi0gICAgICAgICAgICAgICAgICAgIHR5
cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lV2l0aG91dFR5cGU6IGZ1bGxO
YW1lV2l0aG91dFR5cGUsCi0gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgIHJvb3Q6IHJvb3QsCi0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVNZXRo
b2ROYW1lOiAncmVzb2x2ZScgKyBjbGFzc2lmeSh0eXBlKQotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0
dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGZvciBhIGZ1bGxOYW1lLiBVc2VkIGJ5
IHRoZQotICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBuYW1lc3BhY2UgaW4gYXNzZXJ0
aW9ucyB0byBkZXNjcmliZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgcHJlY2lzZSBuYW1lIG9m
IHRoZSBjbGFzcyB0aGF0IEVtYmVyIGlzIGxvb2tpbmcgZm9yLCByYXRoZXIgdGhhbgotICAgICAg
ICAgICAgICAgICAgICBjb250YWluZXIga2V5cy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
dGVjdGVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZSB0aGUg
bG9va3VwIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGxvb2t1cERlc2NyaXB0
aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9va3VwRGVzY3JpcHRpb246
IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnNlZE5hbWUgPSB0
aGlzLnBhcnNlTmFtZShmdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyc2VkTmFt
ZS50eXBlID09PSAndGVtcGxhdGUnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAndGVt
cGxhdGUgYXQgJyArIHBhcnNlZE5hbWUuZnVsbE5hbWVXaXRob3V0VHlwZS5yZXBsYWNlKC9cLi9n
LCAnLycpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBkZXNjcmlw
dGlvbiA9IHBhcnNlZE5hbWUucm9vdCArICcuJyArIGNsYXNzaWZ5KHBhcnNlZE5hbWUubmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZE5hbWUudHlwZSAhPT0gJ21vZGVsJykgewotICAg
ICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBjbGFzc2lmeShwYXJzZWROYW1lLnR5cGUp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIG1ha2VUb1N0cmluZzogZnVuY3Rpb24o
ZmFjdG9yeSwgZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS50b1N0
cmluZygpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBHaXZlbiBhIHBhcnNlTmFtZSBvYmplY3QgKG91dHB1dCBmcm9tIGBwYXJzZU5hbWVgKSwg
YXBwbHkKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnZlbnRpb25zIGV4cGVjdGVkIGJ5IGBF
bWJlci5Sb3V0ZXJgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3RlY3RlZAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNlTmFtZSBvYmplY3Qg
d2l0aCB0aGUgcGFyc2VkCi0gICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWUgbG9va3VwIHN0
cmluZwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVzZVJvdXRlck5hbWluZwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHVzZVJvdXRlck5hbWluZzogZnVuY3Rpb24ocGFy
c2VkTmFtZSkgewotICAgICAgICAgICAgICAgIHBhcnNlZE5hbWUubmFtZSA9IHBhcnNlZE5hbWUu
bmFtZS5yZXBsYWNlKC9cLi9nLCAnXycpOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZWROYW1l
Lm5hbWUgPT09ICdiYXNpYycpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkTmFtZS5uYW1l
ID0gJyc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBMb29rIHVwIHRoZSB0ZW1wbGF0ZSBpbiBFbWJlci5URU1Q
TEFURVMKLQotICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRo
ZSBwYXJzZWQKLSAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZVRlbXBsYXRlCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgcmVzb2x2ZVRlbXBsYXRlOiBmdW5jdGlvbihwYXJzZWROYW1l
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlTmFtZSA9IHBhcnNlZE5hbWUuZnVsbE5h
bWVXaXRob3V0VHlwZS5yZXBsYWNlKC9cLi9nLCAnLycpOwotCi0gICAgICAgICAgICAgICAgaWYg
KEVtYmVyLlRFTVBMQVRFU1t0ZW1wbGF0ZU5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBFbWJlci5URU1QTEFURVNbdGVtcGxhdGVOYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWUgPSBkZWNhbWVsaXplKHRlbXBsYXRlTmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKEVtYmVyLlRFTVBMQVRFU1t0ZW1wbGF0ZU5hbWVdKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5URU1QTEFURVNbdGVtcGxhdGVOYW1lXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIExvb2t1cCB0aGUgdmlldyB1c2luZyBgcmVzb2x2ZU90aGVyYAotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAot
ICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCByZXNvbHZlVmlldwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJlc29sdmVWaWV3OiBmdW5jdGlvbihwYXJzZWROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy51c2VSb3V0ZXJOYW1pbmcocGFyc2VkTmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMucmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUpOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBMb29rdXAgdGhlIGNvbnRyb2xsZXIgdXNp
bmcgYHJlc29sdmVPdGhlcmAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9i
amVjdCB3aXRoIHRoZSBwYXJzZWQKLSAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29r
dXAgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZUNvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXNvbHZlQ29udHJvbGxlcjogZnVu
Y3Rpb24ocGFyc2VkTmFtZSkgewotICAgICAgICAgICAgICAgIHRoaXMudXNlUm91dGVyTmFtaW5n
KHBhcnNlZE5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihw
YXJzZWROYW1lKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgTG9va3VwIHRoZSByb3V0ZSB1c2luZyBgcmVzb2x2ZU90aGVyYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAg
ICAgICAgICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCByZXNvbHZlUm91dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXNvbHZlUm91dGU6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnVzZVJvdXRlck5hbWluZyhwYXJzZWROYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5yZXNvbHZlT3RoZXIocGFyc2VkTmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTG9va3VwIHRoZSBtb2RlbCBvbiB0aGUgQXBw
bGljYXRpb24gbmFtZXNwYWNlCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3RlY3RlZAotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNlTmFtZSBv
YmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWUgbG9v
a3VwIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmVNb2RlbAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVNb2RlbDogZnVuY3Rpb24ocGFy
c2VkTmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFzc2lmeShwYXJz
ZWROYW1lLm5hbWUpOwotICAgICAgICAgICAgICAgIHZhciBmYWN0b3J5ID0gZ2V0KHBhcnNlZE5h
bWUucm9vdCwgY2xhc3NOYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTG9vayB1
cCB0aGUgc3BlY2lmaWVkIG9iamVjdCAoZnJvbSBwYXJzZWROYW1lKSBvbiB0aGUgYXBwcm9wcmlh
dGUKLSAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlICh1c3VhbGx5IG9uIHRoZSBBcHBsaWNh
dGlvbikKLQotICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRo
ZSBwYXJzZWQKLSAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZUhlbHBlcgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVIZWxwZXI6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3RoZXIocGFyc2VkTmFtZSkgfHwg
RW1iZXJIYW5kbGViYXJzLmhlbHBlcnNbcGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlXTsK
LSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTG9v
ayB1cCB0aGUgc3BlY2lmaWVkIG9iamVjdCAoZnJvbSBwYXJzZWROYW1lKSBvbiB0aGUgYXBwcm9w
cmlhdGUKLSAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlICh1c3VhbGx5IG9uIHRoZSBBcHBs
aWNhdGlvbikKLQotICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRo
IHRoZSBwYXJzZWQKLSAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5n
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZU90aGVyCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgcmVzb2x2ZU90aGVyOiBmdW5jdGlvbihwYXJzZWROYW1lKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzaWZ5KHBhcnNlZE5hbWUubmFt
ZSkgKyBjbGFzc2lmeShwYXJzZWROYW1lLnR5cGUpOwotICAgICAgICAgICAgICAgIHZhciBmYWN0
b3J5ID0gZ2V0KHBhcnNlZE5hbWUucm9vdCwgY2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZmFjdG9yeSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIF9sb2dMb29rdXAKLSAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0Jvb2xlYW59IGZvdW5kCi0gICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNl
ZE5hbWUKLSAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF9sb2dMb29rdXA6IGZ1bmN0aW9uKGZvdW5kLCBwYXJzZWROYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHN5bWJvbCwgcGFkZGluZzsKLQotICAgICAgICAgICAgICAgIGlm
IChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSAnW+Kck10nOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9ICdbIF0nOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwYXJzZWROYW1lLmZ1bGxO
YW1lLmxlbmd0aCA+IDYwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgPSAnLic7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFkZGluZyA9IG5l
dyBBcnJheSg2MCAtIHBhcnNlZE5hbWUuZnVsbE5hbWUubGVuZ3RoKS5qb2luKCcuJyk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgTG9nZ2VyLmluZm8oc3ltYm9sLCBwYXJz
ZWROYW1lLmZ1bGxOYW1lLCBwYWRkaW5nLCB0aGlzLmxvb2t1cERlc2NyaXB0aW9uKHBhcnNlZE5h
bWUuZnVsbE5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1kZWJ1ZyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1l
dGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL2xvZ2dlciJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICAvKmdsb2JhbCBfX2ZhaWxfXyovCi0KLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9y
ID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBMb2dnZXIgPSBfX2Rl
cGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVy
IERlYnVnCi0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1
bGUgZW1iZXItZGVidWcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAY2xhc3MgRW1iZXIKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIERlZmluZSBhbiBhc3NlcnRpb24gdGhhdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0
aGUgY29uZGl0aW9uIGlzIG5vdAotICAgICAgICAgICAgICBtZXQuIEVtYmVyIGJ1aWxkIHRvb2xz
IHdpbGwgcmVtb3ZlIGFueSBjYWxscyB0byBgRW1iZXIuYXNzZXJ0KClgIHdoZW4KLSAgICAgICAg
ICAgICAgZG9pbmcgYSBwcm9kdWN0aW9uIGJ1aWxkLiBFeGFtcGxlOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgLy8gVGVzdCBmb3IgdHJ1dGhpbmVzcwotICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoJ011c3QgcGFzcyBhIHZhbGlkIG9iamVjdCcsIG9iaik7
Ci0KLSAgICAgICAgICAgICAgLy8gRmFpbCB1bmNvbmRpdGlvbmFsbHkKLSAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCdUaGlzIGNvZGUgcGF0aCBzaG91bGQgbmV2ZXIgYmUgcnVuJyk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgYXNzZXJ0Ci0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBkZXNjIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFzc2VydGlvbi4g
VGhpcyB3aWxsIGJlY29tZQotICAgICAgICAgICAgICAgIHRoZSB0ZXh0IG9mIHRoZSBFcnJvciB0
aHJvd24gaWYgdGhlIGFzc2VydGlvbiBmYWlscy4KLSAgICAgICAgICAgICAgQHBhcmFtIHtCb29s
ZWFufSB0ZXN0IE11c3QgYmUgdHJ1dGh5IGZvciB0aGUgYXNzZXJ0aW9uIHRvIHBhc3MuIElmCi0g
ICAgICAgICAgICAgICAgZmFsc3ksIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAg
ICAgICAgICovCi0gICAgICAgIEVtYmVyLmFzc2VydCA9IGZ1bmN0aW9uKGRlc2MsIHRlc3QpIHsK
LSAgICAgICAgICAgIGlmICghdGVzdCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJl
ckVycm9yKCJBc3NlcnRpb24gRmFpbGVkOiAiICsgZGVzYyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGlzcGxheSBhIHdhcm5pbmcg
d2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZS4gRW1iZXIgYnVpbGQgdG9vbHMgd2lsbAotICAgICAg
ICAgICAgICByZW1vdmUgYW55IGNhbGxzIHRvIGBFbWJlci53YXJuKClgIHdoZW4gZG9pbmcgYSBw
cm9kdWN0aW9uIGJ1aWxkLgotCi0gICAgICAgICAgICAgIEBtZXRob2Qgd2FybgotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBBIHdhcm5pbmcgdG8gZGlzcGxheS4KLSAgICAg
ICAgICAgICAgQHBhcmFtIHtCb29sZWFufSB0ZXN0IEFuIG9wdGlvbmFsIGJvb2xlYW4uIElmIGZh
bHN5LCB0aGUgd2FybmluZwotICAgICAgICAgICAgICAgIHdpbGwgYmUgZGlzcGxheWVkLgotICAg
ICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIud2FybiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHRlc3Qp
IHsKLSAgICAgICAgICAgIGlmICghdGVzdCkgewotICAgICAgICAgICAgICAgIExvZ2dlci53YXJu
KCJXQVJOSU5HOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCd0cmFjZScgaW4g
TG9nZ2VyKSAKLSAgICAgICAgICAgICAgICAgICAgTG9nZ2VyLnRyYWNlKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIERpc3BsYXkgYSBk
ZWJ1ZyBub3RpY2UuIEVtYmVyIGJ1aWxkIHRvb2xzIHdpbGwgcmVtb3ZlIGFueSBjYWxscyB0bwot
ICAgICAgICAgICAgICBgRW1iZXIuZGVidWcoKWAgd2hlbiBkb2luZyBhIHByb2R1Y3Rpb24gYnVp
bGQuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5k
ZWJ1ZygnSVwnbSBhIGRlYnVnIG5vdGljZSEnKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBkZWJ1ZwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbWVz
c2FnZSBBIGRlYnVnIG1lc3NhZ2UgdG8gZGlzcGxheS4KLSAgICAgICAgICAgICovCi0gICAgICAg
IEVtYmVyLmRlYnVnID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICAgICAgTG9nZ2VyLmRl
YnVnKCJERUJVRzogIiArIG1lc3NhZ2UpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBEaXNwbGF5IGEgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHRoZSBwcm92aWRl
ZCBtZXNzYWdlIGFuZCBhIHN0YWNrIHRyYWNlCi0gICAgICAgICAgICAgIChDaHJvbWUgYW5kIEZp
cmVmb3ggb25seSkuIEVtYmVyIGJ1aWxkIHRvb2xzIHdpbGwgcmVtb3ZlIGFueSBjYWxscyB0bwot
ICAgICAgICAgICAgICBgRW1iZXIuZGVwcmVjYXRlKClgIHdoZW4gZG9pbmcgYSBwcm9kdWN0aW9u
IGJ1aWxkLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgZGVwcmVjYXRlCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIEEgZGVzY3JpcHRpb24gb2YgdGhlIGRlcHJlY2F0aW9u
LgotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IHRlc3QgQW4gb3B0aW9uYWwgYm9vbGVh
bi4gSWYgZmFsc3ksIHRoZSBkZXByZWNhdGlvbgotICAgICAgICAgICAgICAgIHdpbGwgYmUgZGlz
cGxheWVkLgotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuZGVwcmVjYXRlID0gZnVuY3Rp
b24obWVzc2FnZSwgdGVzdCkgewotICAgICAgICAgICAgaWYgKHRlc3QpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChFbWJlci5FTlYu
UkFJU0VfT05fREVQUkVDQVRJT04pIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJF
cnJvcihtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGVycm9yOwot
Ci0gICAgICAgICAgICAvLyBXaGVuIHVzaW5nIG5ldyBFcnJvciwgd2UgY2FuJ3QgZG8gdGhlIGFy
Z3VtZW50cyBjaGVjayBmb3IgQ2hyb21lLiBBbHRlcm5hdGl2ZXMgYXJlIHdlbGNvbWUKLSAgICAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgX19mYWlsX18uZmFpbCgpOwotICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGVycm9yID0gZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKEVtYmVyLkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9O
ICYmIGVycm9yLnN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YWNrLCBzdGFja1N0ciA9
ICcnOwotICAgICAgICAgICAgICAgIGlmIChlcnJvclsnYXJndW1lbnRzJ10pIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQ2hyb21lCi0gICAgICAgICAgICAgICAgICAgIHN0YWNrID0gZXJyb3Iu
c3RhY2sucmVwbGFjZSgvXlxzK2F0XHMrL2dtLCAnJykuCi0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2UoL14oW15cKF0rPykoW1xuJF0pL2dtLCAne2Fub255bW91c30oJDEpJDInKS4KLSAgICAg
ICAgICAgICAgICAgICAgcmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxzKlwoKFteXCldKylc
KS9nbSwgJ3thbm9ueW1vdXN9KCQxKScpLnNwbGl0KCdcbicpOwotICAgICAgICAgICAgICAgICAg
ICBzdGFjay5zaGlmdCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIEZpcmVmb3gKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBlcnJvci5zdGFj
ay5yZXBsYWNlKC8oPzpcbkA6MCk/XHMrJC9tLCAnJykuCi0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2UoL15cKC9nbSwgJ3thbm9ueW1vdXN9KCcpLnNwbGl0KCdcbicpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YWNrU3RyID0gIlxuICAgICIgKyBzdGFjay5zbGlj
ZSgyKS5qb2luKCJcbiAgICAiKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSAr
IHN0YWNrU3RyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMb2dnZXIud2FybigiREVQ
UkVDQVRJT046ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgfTsKLQotCi0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIEFsaWFzIGFuIG9sZCwgZGVwcmVjYXRlZCBtZXRob2Qgd2l0aCBpdHMgbmV3
IGNvdW50ZXJwYXJ0LgotCi0gICAgICAgICAgICAgIERpc3BsYXkgYSBkZXByZWNhdGlvbiB3YXJu
aW5nIHdpdGggdGhlIHByb3ZpZGVkIG1lc3NhZ2UgYW5kIGEgc3RhY2sgdHJhY2UKLSAgICAgICAg
ICAgICAgKENocm9tZSBhbmQgRmlyZWZveCBvbmx5KSB3aGVuIHRoZSBhc3NpZ25lZCBtZXRob2Qg
aXMgY2FsbGVkLgotCi0gICAgICAgICAgICAgIEVtYmVyIGJ1aWxkIHRvb2xzIHdpbGwgbm90IHJl
bW92ZSBjYWxscyB0byBgRW1iZXIuZGVwcmVjYXRlRnVuYygpYCwgdGhvdWdoCi0gICAgICAgICAg
ICAgIG5vIHdhcm5pbmdzIHdpbGwgYmUgc2hvd24gaW4gcHJvZHVjdGlvbi4KLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLm9sZE1ldGhvZCA9IEVtYmVy
LmRlcHJlY2F0ZUZ1bmMoJ1BsZWFzZSB1c2UgdGhlIG5ldywgdXBkYXRlZCBtZXRob2QnLCBFbWJl
ci5uZXdNZXRob2QpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9k
IGRlcHJlY2F0ZUZ1bmMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgQSBk
ZXNjcmlwdGlvbiBvZiB0aGUgZGVwcmVjYXRpb24uCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVu
Y3Rpb259IGZ1bmMgVGhlIG5ldyBmdW5jdGlvbiBjYWxsZWQgdG8gcmVwbGFjZSBpdHMgZGVwcmVj
YXRlZCBjb3VudGVycGFydC4KLSAgICAgICAgICAgICAgQHJldHVybiB7RnVuY3Rpb259IGEgbmV3
IGZ1bmN0aW9uIHRoYXQgd3JhcHBlZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBhIGRlcHJl
Y2F0aW9uIHdhcm5pbmcKLSAgICAgICAgICAgICovCi0gICAgICAgIEVtYmVyLmRlcHJlY2F0ZUZ1
bmMgPSBmdW5jdGlvbihtZXNzYWdlLCBmdW5jKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKG1lc3NhZ2UpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9OwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJ1biBhIGZ1
bmN0aW9uIG1lYW50IGZvciBkZWJ1Z2dpbmcuIEVtYmVyIGJ1aWxkIHRvb2xzIHdpbGwgcmVtb3Zl
IGFueSBjYWxscyB0bwotICAgICAgICAgICAgICBgRW1iZXIucnVuSW5EZWJ1ZygpYCB3aGVuIGRv
aW5nIGEgcHJvZHVjdGlvbiBidWlsZC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIEVtYmVyLnJ1bkluRGVidWcoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgRW1iZXIuSGFuZGxlYmFycy5FYWNoVmlldy5yZW9wZW4oewotICAgICAgICAgICAgICAgICAg
ZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJXCdtIGhhcHB5Jyk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBAbWV0aG9kIHJ1bkluRGVidWcKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
ZnVuYyBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuCi0gICAgICAgICAgICAgIEBzaW5jZSAx
LjUuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIucnVuSW5EZWJ1ZyA9IGZ1bmN0aW9u
KGZ1bmMpIHsKLSAgICAgICAgICAgIGZ1bmMoKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBJ
bmZvcm0gdGhlIGRldmVsb3BlciBhYm91dCB0aGUgRW1iZXIgSW5zcGVjdG9yIGlmIG5vdCBpbnN0
YWxsZWQuCi0gICAgICAgIGlmICghRW1iZXIudGVzdGluZykgewotICAgICAgICAgICAgdmFyIGlz
RmlyZWZveCA9IHR5cGVvZiBJbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCc7Ci0gICAgICAg
ICAgICB2YXIgaXNDaHJvbWUgPSAhIXdpbmRvdy5jaHJvbWUgJiYgIXdpbmRvdy5vcGVyYTsKLQot
ICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIChpc0ZpcmVm
b3ggfHwgaXNDaHJvbWUpICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7Ci0gICAgICAgICAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuZGF0YXNldCAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFz
ZXQuZW1iZXJFeHRlbnNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb3dubG9h
ZFVSTDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2hyb21lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRVUkwgPSAnaHR0cHM6Ly9jaHJvbWUuZ29vZ2xl
LmNvbS93ZWJzdG9yZS9kZXRhaWwvZW1iZXItaW5zcGVjdG9yL2JtZGJsbmNlZ2tlbmthY2llaWhm
aHBqZnBwb2NvbmhpJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNGaXJl
Zm94KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRVUkwgPSAnaHR0cHM6
Ly9hZGRvbnMubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9hZGRvbi9lbWJlci1pbnNwZWN0b3Iv
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
RW1iZXIuZGVidWcoJ0ZvciBtb3JlIGFkdmFuY2VkIGRlYnVnZ2luZywgaW5zdGFsbCB0aGUgRW1i
ZXIgSW5zcGVjdG9yIGZyb20gJyArIGRvd25sb2FkVVJMKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQiLAotICAgIFsiZW1i
ZXItbWV0YWwvY29yZSIsICJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9kYXRhX2FkYXB0ZXIiLCAi
ZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29udGFpbmVyX2RlYnVnX2FkYXB0ZXIiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBFbWJl
ciBFeHRlbnNpb24gU3VwcG9ydAotCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAg
ICAgICBAc3VibW9kdWxlIGVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0Ci0gICAgICAgICAgICBAcmVx
dWlyZXMgZW1iZXItYXBwbGljYXRpb24KLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBEYXRhQWRhcHRl
ciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29udGFpbmVyRGVi
dWdBZGFwdGVyID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgRW1iZXIu
RGF0YUFkYXB0ZXIgPSBEYXRhQWRhcHRlcjsKLSAgICAgICAgRW1iZXIuQ29udGFpbmVyRGVidWdB
ZGFwdGVyID0gQ29udGFpbmVyRGVidWdBZGFwdGVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29udGFpbmVyX2RlYnVnX2FkYXB0ZXIiLAotICAgIFsiZW1i
ZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLCAiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1
bnRpbWUvc3lzdGVtL25hbWVzcGFjZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2Rl
cGVuZGVuY3k2X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBl
bWJlckEgPSBfX2RlcGVuZGVuY3kyX18uQTsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5k
ZW5jeTNfXy50eXBlT2Y7Ci0gICAgICAgIHZhciBkYXNoZXJpemUgPSBfX2RlcGVuZGVuY3k0X18u
ZGFzaGVyaXplOwotICAgICAgICB2YXIgY2xhc3NpZnkgPSBfX2RlcGVuZGVuY3k0X18uY2xhc3Np
Znk7Ci0gICAgICAgIHZhciBOYW1lc3BhY2UgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0Ci0gICAgICAgICAgICAqLwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBUaGUgYENvbnRhaW5lckRlYnVnQWRhcHRlcmAgaGVscHMgdGhl
IGNvbnRhaW5lciBhbmQgcmVzb2x2ZXIgaW50ZXJmYWNlCi0gICAgICAgICAgICAgIHdpdGggdG9v
bHMgdGhhdCBkZWJ1ZyBFbWJlciBzdWNoIGFzIHRoZQotICAgICAgICAgICAgICBbRW1iZXIgRXh0
ZW5zaW9uXShodHRwczovL2dpdGh1Yi5jb20vdGlsZGVpby9lbWJlci1leHRlbnNpb24pCi0gICAg
ICAgICAgICAgIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guCi0KLSAgICAgICAgICAgICAgVGhpcyBj
bGFzcyBjYW4gYmUgZXh0ZW5kZWQgYnkgYSBjdXN0b20gcmVzb2x2ZXIgaW1wbGVtZW50ZXIKLSAg
ICAgICAgICAgICAgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0aG9kcyB3aXRoIGxpYnJhcnkt
c3BlY2lmaWMgY29kZS4KLQotICAgICAgICAgICAgICBUaGUgbWV0aG9kcyBsaWtlbHkgdG8gYmUg
b3ZlcnJpZGRlbiBhcmU6Ci0KLSAgICAgICAgICAgICAgKiBgY2FuQ2F0YWxvZ0VudHJpZXNCeVR5
cGVgCi0gICAgICAgICAgICAgICogYGNhdGFsb2dFbnRyaWVzQnlUeXBlYAotCi0gICAgICAgICAg
ICAgIFRoZSBhZGFwdGVyIHdpbGwgbmVlZCB0byBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAg
IGluIHRoZSBhcHBsaWNhdGlvbidzIGNvbnRhaW5lciBhcyBgY29udGFpbmVyLWRlYnVnLWFkYXB0
ZXI6bWFpbmAKLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAg
ICAgICAgICAgIG5hbWU6ICJjb250YWluZXJEZWJ1Z0FkYXB0ZXIiLAotCi0gICAgICAgICAgICAg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCBhcHBsaWNhdGlvbikgewotICAgICAg
ICAgICAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVy
Om1haW4nLCByZXF1aXJlKCdhcHAvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXInKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQGNsYXNzIENvbnRhaW5lckRlYnVnQWRhcHRlcgotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyT2JqZWN0Ci0gICAgICAg
ICAgICAgIEBzaW5jZSAxLjUuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVGhlIGNvbnRhaW5lciBvZiB0aGUgYXBwbGljYXRpb24gYmVpbmcgZGVi
dWdnZWQuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvcGVydHkgd2lsbCBiZSBpbmplY3Rl
ZAotICAgICAgICAgICAgICAgICAgICBvbiBjcmVhdGlvbi4KLQotICAgICAgICAgICAgICAgICAg
ICBAcHJvcGVydHkgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250YWluZXI6IG51bGwsCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgcmVzb2x2ZXIgaW5zdGFuY2Ug
b2YgdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIGJlaW5nIGRlYnVnZ2VkLiBU
aGlzIHByb3BlcnR5IHdpbGwgYmUgaW5qZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgb24gY3Jl
YXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJlc29sdmVyCi0gICAgICAg
ICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICByZXNvbHZlcjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBwb3NzaWJsZSB0byBjYXRhbG9nIGEgbGlzdCBvZiBh
dmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBpbiB0aGUgcmVzb2x2ZXIgZm9y
IGEgZ2l2ZW4gdHlwZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhbkNhdGFsb2dF
bnRyaWVzQnlUeXBlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRo
ZSB0eXBlLiBlLmcuICJtb2RlbCIsICJjb250cm9sbGVyIiwgInJvdXRlIgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIGEgbGlzdCBpcyBhdmFpbGFibGUgZm9y
IHRoaXMgdHlwZS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjYW5DYXRhbG9n
RW50cmllc0J5VHlwZTogZnVuY3Rpb24odHlwZSkgewotICAgICAgICAgICAgICAgIGlmICh0eXBl
ID09PSAnbW9kZWwnIHx8IHR5cGUgPT09ICd0ZW1wbGF0ZScpIAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUg
YXZhaWxhYmxlIGNsYXNzZXMgYSBnaXZlbiB0eXBlLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgY2F0YWxvZ0VudHJpZXNCeVR5cGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtz
dHJpbmd9IHR5cGUgVGhlIHR5cGUuIGUuZy4gIm1vZGVsIiwgImNvbnRyb2xsZXIiLCAicm91dGUi
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBzdHJpbmdz
LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhdGFsb2dFbnRyaWVzQnlUeXBl
OiBmdW5jdGlvbih0eXBlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBlbWJl
ckEoTmFtZXNwYWNlLk5BTUVTUEFDRVMpLCB0eXBlcyA9IGVtYmVyQSgpLCBzZWxmID0gdGhpczsK
LSAgICAgICAgICAgICAgICB2YXIgdHlwZVN1ZmZpeFJlZ2V4ID0gbmV3IFJlZ0V4cChjbGFzc2lm
eSh0eXBlKSArICIkIik7Ci0KLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLmZvckVhY2goZnVu
Y3Rpb24obmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgIT09
IEVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZXNw
YWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzT3du
UHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHR5cGVTdWZmaXhSZWdleC50ZXN0KGtleSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGtsYXNzID0gbmFtZXNwYWNlW2tleV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlT2Yoa2xhc3MpID09PSAnY2xhc3MnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKGRhc2hlcml6ZShrZXku
cmVwbGFjZSh0eXBlU3VmZml4UmVnZXgsICcnKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2RhdGFfYWRhcHRl
ciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIs
ICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAi
ZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNlIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29i
amVjdCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLCAiZW1iZXItYXBwbGlj
YXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVu
Y3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18s
IF9fZGVwZW5kZW5jeThfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVu
ZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGRhc2hlcml6ZSA9IF9fZGVwZW5kZW5j
eTRfXy5kYXNoZXJpemU7Ci0gICAgICAgIHZhciBOYW1lc3BhY2UgPSBfX2RlcGVuZGVuY3k1X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5Nl9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBlbWJlckEgPSBfX2RlcGVuZGVuY3k3X18uQTsKLSAgICAg
ICAgdmFyIEFwcGxpY2F0aW9uID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0Ci0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBUaGUgYERhdGFBZGFwdGVyYCBoZWxwcyBhIGRhdGEgcGVyc2lzdGVuY2Ug
bGlicmFyeQotICAgICAgICAgICAgICBpbnRlcmZhY2Ugd2l0aCB0b29scyB0aGF0IGRlYnVnIEVt
YmVyIHN1Y2gKLSAgICAgICAgICAgICAgYXMgdGhlIFtFbWJlciBFeHRlbnNpb25dKGh0dHBzOi8v
Z2l0aHViLmNvbS90aWxkZWlvL2VtYmVyLWV4dGVuc2lvbikKLSAgICAgICAgICAgICAgZm9yIENo
cm9tZSBhbmQgRmlyZWZveC4KLQotICAgICAgICAgICAgICBUaGlzIGNsYXNzIHdpbGwgYmUgZXh0
ZW5kZWQgYnkgYSBwZXJzaXN0ZW5jZSBsaWJyYXJ5Ci0gICAgICAgICAgICAgIHdoaWNoIHdpbGwg
b3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0aG9kcyB3aXRoCi0gICAgICAgICAgICAgIGxpYnJhcnkt
c3BlY2lmaWMgY29kZS4KLQotICAgICAgICAgICAgICBUaGUgbWV0aG9kcyBsaWtlbHkgdG8gYmUg
b3ZlcnJpZGRlbiBhcmU6Ci0KLSAgICAgICAgICAgICAgKiBgZ2V0RmlsdGVyc2AKLSAgICAgICAg
ICAgICAgKiBgZGV0ZWN0YAotICAgICAgICAgICAgICAqIGBjb2x1bW5zRm9yVHlwZWAKLSAgICAg
ICAgICAgICAgKiBgZ2V0UmVjb3Jkc2AKLSAgICAgICAgICAgICAgKiBgZ2V0UmVjb3JkQ29sdW1u
VmFsdWVzYAotICAgICAgICAgICAgICAqIGBnZXRSZWNvcmRLZXl3b3Jkc2AKLSAgICAgICAgICAg
ICAgKiBgZ2V0UmVjb3JkRmlsdGVyVmFsdWVzYAotICAgICAgICAgICAgICAqIGBnZXRSZWNvcmRD
b2xvcmAKLSAgICAgICAgICAgICAgKiBgb2JzZXJ2ZVJlY29yZGAKLQotICAgICAgICAgICAgICBU
aGUgYWRhcHRlciB3aWxsIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgICBpbiB0
aGUgYXBwbGljYXRpb24ncyBjb250YWluZXIgYXMgYGRhdGFBZGFwdGVyOm1haW5gCi0KLSAgICAg
ICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICBuYW1lOiAi
ZGF0YS1hZGFwdGVyIiwKLQotICAgICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNv
bnRhaW5lciwgYXBwbGljYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLnJl
Z2lzdGVyKCdkYXRhLWFkYXB0ZXI6bWFpbicsIERTLkRhdGFBZGFwdGVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBAY2xhc3MgRGF0YUFkYXB0ZXIKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlck9iamVjdAotICAgICAgICAgICAgKi8KLSAgICAg
ICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAg
ICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwot
ICAgICAgICAgICAgICAgIHRoaXMucmVsZWFzZU1ldGhvZHMgPSBlbWJlckEoKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgY29udGFp
bmVyIG9mIHRoZSBhcHBsaWNhdGlvbiBiZWluZyBkZWJ1Z2dlZC4KLSAgICAgICAgICAgICAgICAg
ICAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGluamVjdGVkCi0gICAgICAgICAgICAgICAgICAgIG9u
IGNyZWF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjb250YWluZXIKLSAg
ICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgICBAc2lu
Y2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250YWluZXI6IG51
bGwsCi0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjb250YWlu
ZXItZGVidWctYWRhcHRlciB3aGljaCBpcyB1c2VkCi0gICAgICAgICAgICAgICAgICAgIHRvIGxp
c3QgYWxsIG1vZGVscy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udGFpbmVy
RGVidWdBZGFwdGVyCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHVuZGVmaW5lZAotICAg
ICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjAKLSAgICAgICAgICAgICAgICAgICoqLwotICAg
ICAgICAgICAgY29udGFpbmVyRGVidWdBZGFwdGVyOiB1bmRlZmluZWQsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgYXR0cmlidXRlcyB0byBzZW5kCi0g
ICAgICAgICAgICAgICAgICAgIGFzIGNvbHVtbnMuIChFbm91Z2ggdG8gbWFrZSB0aGUgcmVjb3Jk
Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpYWJsZSkuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGF0dHJpYnV0ZUxpbWl0
Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IDMKLSAgICAgICAgICAgICAgICAgICAgQHNp
bmNlIDEuMy4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXR0cmlidXRlTGlt
aXQ6IDMsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTdG9yZXMgYWxs
IG1ldGhvZHMgdGhhdCBjbGVhciBvYnNlcnZlcnMuCi0gICAgICAgICAgICAgICAgICAgIFRoZXNl
IG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQgb24gZGVzdHJ1Y3Rpb24uCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJlbGVhc2VNZXRo
b2RzCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjMuMAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJlbGVhc2VNZXRob2RzOiBlbWJlckEoKSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBob3cgcmVjb3JkcyBjYW4gYmUgZmls
dGVyZWQuCi0gICAgICAgICAgICAgICAgICAgIFJlY29yZHMgcmV0dXJuZWQgd2lsbCBuZWVkIHRv
IGhhdmUgYSBgZmlsdGVyVmFsdWVzYAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSB3aXRo
IGEga2V5IGZvciBldmVyeSBuYW1lIGluIHRoZSByZXR1cm5lZCBhcnJheS4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0RmlsdGVy
cwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gTGlzdCBvZiBvYmplY3RzIGRl
ZmluaW5nIGZpbHRlcnMuCi0gICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHNob3VsZCBo
YXZlIGEgYG5hbWVgIGFuZCBgZGVzY2AgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgZ2V0RmlsdGVyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVtYmVyQSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEZldGNoIHRoZSBtb2RlbCB0eXBlcyBhbmQgb2JzZXJ2ZSB0aGVtIGZvciBj
aGFuZ2VzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCB3YXRjaE1vZGVsVHlwZXMKLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0Z1bmN0aW9ufSB0eXBlc0FkZGVkIENhbGxiYWNrIHRvIGNhbGwgdG8gYWRkIHR5cGVzLgotICAg
ICAgICAgICAgICAgICAgICBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgd3Jh
cHBlZCB0eXBlcyAocmV0dXJuZWQgZnJvbSBgd3JhcE1vZGVsVHlwZWApLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVzVXBkYXRlZCBDYWxsYmFjayB0byBjYWxs
IHdoZW4gYSB0eXBlIGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICAgICAgICBUYWtlcyBhbiBh
cnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgd3JhcHBlZCB0eXBlcy4KLQotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gTWV0aG9kIHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBv
YnNlcnZlcnMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3YXRjaE1vZGVsVHlw
ZXM6IGZ1bmN0aW9uKHR5cGVzQWRkZWQsIHR5cGVzVXBkYXRlZCkgewotICAgICAgICAgICAgICAg
IHZhciBtb2RlbFR5cGVzID0gdGhpcy5nZXRNb2RlbFR5cGVzKCksCi0gICAgICAgICAgICAgICAg
c2VsZiA9IHRoaXMsIHR5cGVzVG9TZW5kLCByZWxlYXNlTWV0aG9kcyA9IGVtYmVyQSgpOwotCi0g
ICAgICAgICAgICAgICAgdHlwZXNUb1NlbmQgPSBtb2RlbFR5cGVzLm1hcChmdW5jdGlvbih0eXBl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBrbGFzcyA9IHR5cGUua2xhc3M7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciB3cmFwcGVkID0gc2VsZi53cmFwTW9kZWxUeXBlKGtsYXNzLCB0eXBl
Lm5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZWxlYXNlTWV0aG9kcy5wdXNoKHNlbGYub2Jz
ZXJ2ZU1vZGVsVHlwZShrbGFzcywgdHlwZXNVcGRhdGVkKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB3cmFwcGVkOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAg
dHlwZXNBZGRlZCh0eXBlc1RvU2VuZCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVsZWFzZSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZWxlYXNlTWV0aG9kcy5mb3JFYWNo
KGZ1bmN0aW9uKGZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbigpOwotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlTWV0aG9kcy5y
ZW1vdmVPYmplY3QocmVsZWFzZSk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg
ICB0aGlzLnJlbGVhc2VNZXRob2RzLnB1c2hPYmplY3QocmVsZWFzZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlbGVhc2U7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfbmFtZVRv
Q2xhc3M6IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUg
PT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0aGlzLmNvbnRhaW5l
ci5sb29rdXBGYWN0b3J5KCdtb2RlbDonICsgdHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiB0eXBlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEZldGNoIHRoZSByZWNvcmRzIG9mIGEgZ2l2ZW4gdHlw
ZSBhbmQgb2JzZXJ2ZSB0aGVtIGZvciBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgICAgICAgIEBw
dWJsaWMKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3YXRjaFJlY29yZHMKLQotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSByZWNvcmRzQWRkZWQgQ2FsbGJhY2sgdG8g
Y2FsbCB0byBhZGQgcmVjb3Jkcy4KLSAgICAgICAgICAgICAgICAgICAgVGFrZXMgYW4gYXJyYXkg
b2Ygb2JqZWN0cyBjb250YWluaW5nIHdyYXBwZWQgcmVjb3Jkcy4KLSAgICAgICAgICAgICAgICAg
ICAgVGhlIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgY29sdW1uVmFsdWVzOiB7T2JqZWN0fSBrZXkgYW5kIHZhbHVlIG9m
IGEgdGFibGUgY2VsbAotICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDoge09iamVjdH0gdGhl
IGFjdHVhbCByZWNvcmQgb2JqZWN0Ci0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gcmVjb3Jkc1VwZGF0ZWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgcmVjb3JkIGhhcyBj
aGFuZ2VkLgotICAgICAgICAgICAgICAgICAgICBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGNv
bnRhaW5pbmcgd3JhcHBlZCByZWNvcmRzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IHJlY29yZHNSZW1vdmVkIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIHJlY29yZCBo
YXMgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgICAgVGFrZXMgdGhlIGZvbGxvd2luZyBwYXJh
bWV0ZXJzOgotICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGUgYXJyYXkgaW5kZXggd2hl
cmUgdGhlIHJlY29yZHMgd2VyZSByZW1vdmVkCi0gICAgICAgICAgICAgICAgICAgICAgY291bnQ6
IHRoZSBudW1iZXIgb2YgcmVjb3JkcyByZW1vdmVkCi0KLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7RnVuY3Rpb259IE1ldGhvZCB0byBjYWxsIHRvIHJlbW92ZSBhbGwgb2JzZXJ2ZXJzCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2F0Y2hSZWNvcmRzOiBmdW5jdGlvbih0
eXBlLCByZWNvcmRzQWRkZWQsIHJlY29yZHNVcGRhdGVkLCByZWNvcmRzUmVtb3ZlZCkgewotICAg
ICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywgcmVsZWFzZU1ldGhvZHMgPSBlbWJlckEoKSwg
cmVjb3JkcyA9IHRoaXMuZ2V0UmVjb3Jkcyh0eXBlKSwgcmVsZWFzZTsKLQotICAgICAgICAgICAg
ICAgIHZhciByZWNvcmRVcGRhdGVkID0gZnVuY3Rpb24odXBkYXRlZFJlY29yZCkgewotICAgICAg
ICAgICAgICAgICAgICByZWNvcmRzVXBkYXRlZChbdXBkYXRlZFJlY29yZF0pOwotICAgICAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVjb3Jkc1RvU2VuZCA9IHJlY29yZHMu
bWFwKGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgICAgICAgICByZWxlYXNlTWV0aG9k
cy5wdXNoKHNlbGYub2JzZXJ2ZVJlY29yZChyZWNvcmQsIHJlY29yZFVwZGF0ZWQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcFJlY29yZChyZWNvcmQpOwotICAgICAgICAg
ICAgICAgIH0pOwotCi0KLSAgICAgICAgICAgICAgICB2YXIgY29udGVudERpZENoYW5nZSA9IGZ1
bmN0aW9uKGFycmF5LCBpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRDb3VudCkgewotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gaWR4OyBpIDwgaWR4ICsgYWRkZWRDb3VudDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gYXJyYXkub2JqZWN0QXQoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZCA9IHNlbGYud3JhcFJlY29yZChy
ZWNvcmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZU1ldGhvZHMucHVzaChzZWxm
Lm9ic2VydmVSZWNvcmQocmVjb3JkLCByZWNvcmRVcGRhdGVkKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZWNvcmRzQWRkZWQoW3dyYXBwZWRdKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkQ291bnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY29yZHNSZW1vdmVkKGlkeCwgcmVtb3ZlZENvdW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICB2YXIgb2Jz
ZXJ2ZXIgPSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpZENoYW5nZTogY29udGVudERpZENoYW5n
ZSwKLSAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogRW1iZXIuSyAKLSAgICAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgICAgIHJlY29yZHMuYWRkQXJyYXlPYnNlcnZlcihzZWxmLCBv
YnNlcnZlcik7Ci0KLSAgICAgICAgICAgICAgICByZWxlYXNlID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlbGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZm4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgICAgICByZWNvcmRzLnJlbW92ZUFycmF5T2JzZXJ2ZXIoc2VsZiwgb2JzZXJ2
ZXIpOwotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVj
dChyZWxlYXNlKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcmVjb3Jk
c0FkZGVkKHJlY29yZHNUb1NlbmQpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5yZWxlYXNlTWV0
aG9kcy5wdXNoT2JqZWN0KHJlbGVhc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNl
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IENsZWFyIGFsbCBvYnNlcnZlcnMgYmVmb3JlIGRlc3RydWN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2lsbERlc3Ryb3kKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJl
bGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZm4pIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm4oKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBEZXRlY3Qgd2hldGhlciBhIGNsYXNzIGlzIGEgbW9k
ZWwuCi0KLSAgICAgICAgICAgICAgICAgICAgVGVzdCB0aGF0IGFnYWluc3QgdGhlIG1vZGVsIGNs
YXNzCi0gICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcGVyc2lzdGVuY2UgbGlicmFyeQotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
ZGV0ZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Q2xhc3N9IGtsYXNzIFRoZSBjbGFz
cyB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gYm9vbGVhbiBXaGV0aGVyIHRo
ZSBjbGFzcyBpcyBhIG1vZGVsIGNsYXNzIG9yIG5vdAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGRldGVjdDogZnVuY3Rpb24oa2xhc3MpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgR2V0IHRoZSBjb2x1bW5zIGZvciBhIGdpdmVuIG1vZGVsIHR5cGUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb2x1
bW5zRm9yVHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlIFRoZSBt
b2RlbCB0eXBlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBv
ZiBjb2x1bW5zIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotICAgICAgICAgICAgICAgICAgICAg
bmFtZToge1N0cmluZ30gbmFtZSBvZiB0aGUgY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICBk
ZXNjOiB7U3RyaW5nfSBIdW1hbml6ZWQgZGVzY3JpcHRpb24gKHdoYXQgd291bGQgc2hvdyBpbiBh
IHRhYmxlIGNvbHVtbiBuYW1lKQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNv
bHVtbnNGb3JUeXBlOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVt
YmVyQSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEFkZHMgb2JzZXJ2ZXJzIHRvIGEgbW9kZWwgdHlwZSBjbGFzcy4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9ic2VydmVN
b2RlbFR5cGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZSBUaGUgbW9k
ZWwgdHlwZSBjbGFzcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSB0eXBl
c1VwZGF0ZWQgQ2FsbGVkIHdoZW4gYSB0eXBlIGlzIG1vZGlmaWVkLgotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcmVtb3ZlIG9i
c2VydmVycwotICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgb2JzZXJ2ZU1vZGVs
VHlwZTogZnVuY3Rpb24odHlwZSwgdHlwZXNVcGRhdGVkKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHNlbGYgPSB0aGlzLCByZWNvcmRzID0gdGhpcy5nZXRSZWNvcmRzKHR5cGUpOwotCi0gICAgICAg
ICAgICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHR5cGVzVXBkYXRlZChbc2VsZi53cmFwTW9kZWxUeXBlKHR5cGUpXSk7Ci0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRpZENoYW5nZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4u
c2NoZWR1bGVPbmNlKCdhY3Rpb25zJywgdGhpcywgb25DaGFuZ2UpOwotICAgICAgICAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiBFbWJlci5LCi0gICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHJlY29yZHMuYWRkQXJyYXlPYnNlcnZlcih0
aGlzLCBvYnNlcnZlcik7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVsZWFzZSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICByZWNvcmRzLnJlbW92ZUFycmF5T2JzZXJ2ZXIoc2Vs
Ziwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVsZWFzZTsKLSAgICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFdyYXBzIGEgZ2l2ZW4gbW9kZWwgdHlwZSBhbmQgb2JzZXJ2ZXMgY2hhbmdl
cyB0byBpdC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIHdyYXBNb2RlbFR5cGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtD
bGFzc30gdHlwZSBBIG1vZGVsIGNsYXNzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSAgT3B0aW9uYWwgbmFtZSBvZiB0aGUgY2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7T2JqZWN0fSBjb250YWlucyB0aGUgd3JhcHBlZCB0eXBlIGFuZCB0aGUgZnVuY3Rpb24g
dG8gcmVtb3ZlIG9ic2VydmVycwotICAgICAgICAgICAgICAgICAgICBGb3JtYXQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgdHlwZToge09iamVjdH0gdGhlIHdyYXBwZWQgdHlwZQotICAgICAgICAg
ICAgICAgICAgICAgICAgVGhlIHdyYXBwZWQgdHlwZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHtTdHJpbmd9IG5hbWUgb2YgdGhlIHR5
cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IHtJbnRlZ2VyfSBudW1iZXIgb2Yg
cmVjb3JkcyBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczoge0Nv
bHVtbnN9IGFycmF5IG9mIGNvbHVtbnMgdG8gZGVzY3JpYmUgdGhlIHJlY29yZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3Q6IHtDbGFzc30gdGhlIGFjdHVhbCBNb2RlbCB0eXBlIGNs
YXNzCi0gICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZToge0Z1bmN0aW9ufSBUaGUgZnVuY3Rp
b24gdG8gcmVtb3ZlIG9ic2VydmVycwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHdyYXBNb2RlbFR5cGU6IGZ1bmN0aW9uKHR5cGUsIG5hbWUpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcmVsZWFzZSwgcmVjb3JkcyA9IHRoaXMuZ2V0UmVjb3Jkcyh0eXBlKSwKLSAgICAgICAgICAg
ICAgICB0eXBlVG9TZW5kLCBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHR5cGVUb1Nl
bmQgPSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUgfHwgdHlwZS50b1N0cmluZygp
LAotICAgICAgICAgICAgICAgICAgICBjb3VudDogZ2V0KHJlY29yZHMsICdsZW5ndGgnKSwKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zRm9yVHlwZSh0eXBlKSwKLSAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0eXBlCi0gICAgICAgICAgICAgICAgfTsKLQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVUb1NlbmQ7Ci0gICAgICAgICAgICB9LAotCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBGZXRjaGVzIGFsbCBtb2RlbHMgZGVm
aW5lZCBpbiB0aGUgYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRNb2RlbFR5cGVzCi0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBtb2RlbCB0eXBlcwotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGdldE1vZGVsVHlwZXM6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciB0eXBlcywgc2VsZiA9IHRoaXMsCi0gICAgICAgICAgICAgICAgY29udGFp
bmVyRGVidWdBZGFwdGVyID0gdGhpcy5nZXQoJ2NvbnRhaW5lckRlYnVnQWRhcHRlcicpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckRlYnVnQWRhcHRlci5jYW5DYXRhbG9nRW50cmll
c0J5VHlwZSgnbW9kZWwnKSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IGNvbnRhaW5l
ckRlYnVnQWRhcHRlci5jYXRhbG9nRW50cmllc0J5VHlwZSgnbW9kZWwnKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IHRoaXMuX2dldE9iamVj
dHNPbk5hbWVzcGFjZXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBOZXcgYWRhcHRlcnMgcmV0dXJuIHN0cmluZ3MgaW5zdGVhZCBvZiBjbGFzc2VzCi0gICAgICAg
ICAgICAgICAgdHlwZXMgPSBlbWJlckEodHlwZXMpLm1hcChmdW5jdGlvbihuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrbGFzczog
c2VsZi5fbmFtZVRvQ2xhc3MobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBu
YW1lCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgdHlwZXMgPSBlbWJlckEodHlwZXMpLmZpbHRlcihmdW5jdGlvbih0eXBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRldGVjdCh0eXBlLmtsYXNzKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBlbWJlckEodHlwZXMpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIExv
b3BzIG92ZXIgYWxsIG5hbWVzcGFjZXMgYW5kIGFsbCBvYmplY3RzCi0gICAgICAgICAgICAgICAg
ICAgIGF0dGFjaGVkIHRvIHRoZW0KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIF9nZXRPYmplY3RzT25OYW1lc3BhY2VzCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBBcnJheSBvZiBtb2RlbCB0eXBlIHN0cmluZ3MK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0T2JqZWN0c09uTmFtZXNwYWNl
czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBlbWJlckEo
TmFtZXNwYWNlLk5BTUVTUEFDRVMpLAotICAgICAgICAgICAgICAgIHR5cGVzID0gZW1iZXJBKCks
Ci0gICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VzLmZvckVhY2goZnVuY3Rpb24obmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBuYW1lc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bmFtZXNwYWNlLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIHdpbGwgZmlsdGVyIGFnYWluIGluIGBnZXRNb2Rl
bFR5cGVzYCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBub3QgY2FsbCBg
bG9va3VwQ29udGFpbmVyYCBvbiBub24tbW9kZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyAoZXNwZWNpYWxseSB3aGVuIGBFbWJlci5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlNgIGlzIGB0
cnVlYCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5kZXRlY3QobmFtZXNwYWNl
W2tleV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGRh
c2hlcml6ZShrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobmFtZXNwYWNlIGlu
c3RhbmNlb2YgQXBwbGljYXRpb24pICYmIG5hbWVzcGFjZS50b1N0cmluZygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVzcGFjZSArICcvJyArIG5hbWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5wdXNo
KG5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEZldGNoZXMgYWxsIGxvYWRlZCByZWNvcmRzIGZvciBh
IGdpdmVuIHR5cGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBnZXRSZWNvcmRzCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e0FycmF5fSBBbiBhcnJheSBvZiByZWNvcmRzLgotICAgICAgICAgICAgICAgICAgICAgVGhpcyBh
cnJheSB3aWxsIGJlIG9ic2VydmVkIGZvciBjaGFuZ2VzLAotICAgICAgICAgICAgICAgICAgICAg
c28gaXQgc2hvdWxkIHVwZGF0ZSB3aGVuIG5ldyByZWNvcmRzIGFyZSBhZGRlZC9yZW1vdmVkLgot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldFJlY29yZHM6IGZ1bmN0aW9uKHR5
cGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1iZXJBKCk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgV3JhcHMgYSByZWNvcmQgYW5k
IG9ic2VydmVycyBjaGFuZ2VzIHRvIGl0LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd3JhcFJlY29yZAotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge09iamVjdH0gcmVjb3JkIFRoZSByZWNvcmQgaW5zdGFuY2UuCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIHdyYXBwZWQgcmVjb3JkLiBGb3JtYXQ6
Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtblZhbHVlczoge0FycmF5fQotICAgICAgICAgICAg
ICAgICAgICBzZWFyY2hLZXl3b3Jkczoge0FycmF5fQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHdyYXBSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgICAg
IHZhciByZWNvcmRUb1NlbmQgPSB7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdDogcmVjb3Jk
IAotICAgICAgICAgICAgICAgIH0sIGNvbHVtblZhbHVlcyA9IHt9LCBzZWxmID0gdGhpczsKLQot
ICAgICAgICAgICAgICAgIHJlY29yZFRvU2VuZC5jb2x1bW5WYWx1ZXMgPSB0aGlzLmdldFJlY29y
ZENvbHVtblZhbHVlcyhyZWNvcmQpOwotICAgICAgICAgICAgICAgIHJlY29yZFRvU2VuZC5zZWFy
Y2hLZXl3b3JkcyA9IHRoaXMuZ2V0UmVjb3JkS2V5d29yZHMocmVjb3JkKTsKLSAgICAgICAgICAg
ICAgICByZWNvcmRUb1NlbmQuZmlsdGVyVmFsdWVzID0gdGhpcy5nZXRSZWNvcmRGaWx0ZXJWYWx1
ZXMocmVjb3JkKTsKLSAgICAgICAgICAgICAgICByZWNvcmRUb1NlbmQuY29sb3IgPSB0aGlzLmdl
dFJlY29yZENvbG9yKHJlY29yZCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkVG9T
ZW5kOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEdldHMgdGhlIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4uCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRSZWNvcmRDb2x1bW5W
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBLZXlzIHNob3VsZCBt
YXRjaCBjb2x1bW4gbmFtZXMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBieSB0aGUgbW9k
ZWwgdHlwZS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRSZWNvcmRDb2x1
bW5WYWx1ZXM6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgICAgIHJldHVybiB7fTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBS
ZXR1cm5zIGtleXdvcmRzIHRvIG1hdGNoIHdoZW4gc2VhcmNoaW5nIHJlY29yZHMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRS
ZWNvcmRLZXl3b3JkcwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gUmVsZXZh
bnQga2V5d29yZHMgZm9yIHNlYXJjaC4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBnZXRSZWNvcmRLZXl3b3JkczogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVtYmVyQSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHZhbHVlcyBvZiBmaWx0ZXJzIGRlZmluZWQgYnkg
YGdldEZpbHRlcnNgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgZ2V0UmVjb3JkRmlsdGVyVmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSByZWNvcmQgVGhlIHJlY29yZCBpbnN0YW5jZQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSBmaWx0ZXIgdmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgZ2V0UmVjb3JkRmlsdGVyVmFsdWVzOiBmdW5jdGlvbihy
ZWNvcmQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRWFjaCByZWNvcmQgY2FuIGhhdmUg
YSBjb2xvciB0aGF0IHJlcHJlc2VudHMgaXRzIHN0YXRlLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0UmVjb3JkQ29sb3IKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJlY29yZCBUaGUgcmVjb3JkIGluc3Rh
bmNlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gVGhlIHJlY29yZCdzIGNv
bG9yCi0gICAgICAgICAgICAgICAgICAgICAgUG9zc2libGUgb3B0aW9uczogYmxhY2ssIHJlZCwg
Ymx1ZSwgZ3JlZW4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRSZWNvcmRD
b2xvcjogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgT2Jz
ZXJ2ZXMgYWxsIHJlbGV2YW50IHByb3BlcnRpZXMgYW5kIHJlLXNlbmRzIHRoZSB3cmFwcGVkIHJl
Y29yZAotICAgICAgICAgICAgICAgICAgICB3aGVuIGEgY2hhbmdlIG9jY3Vycy4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9ic2Vy
dmVyUmVjb3JkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSByZWNvcmQgVGhl
IHJlY29yZCBpbnN0YW5jZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBy
ZWNvcmRVcGRhdGVkIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gYSByZWNvcmQgaXMgdXBkYXRl
ZC4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RnVuY3Rpb259IFRoZSBmdW5jdGlvbiB0
byBjYWxsIHRvIHJlbW92ZSBhbGwgb2JzZXJ2ZXJzLgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIG9ic2VydmVSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCwgcmVjb3JkVXBkYXRlZCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHt9OwotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0
L2luaXRpYWxpemVycyIsCi0gICAgW10sCi0gICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy1jb21waWxl
ciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAgICAgLyogZ2xvYmFsIEhhbmRsZWJhcnM6dHJ1ZSAqLwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGVi
YXJzLWNvbXBpbGVyCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8vIEVTNlRvZG86IHlvdSdsbCBuZWVk
IHRvIGltcG9ydCBkZWJ1Z2dlciBvbmNlIGRlYnVnZ2VyIGlzIGVzNidkLgotICAgICAgICBpZiAo
dHlwZW9mIEVtYmVyLmFzc2VydCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgIEVtYmVy
LmFzc2VydCA9IGZ1bmN0aW9uKCkge307Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGVvZiBF
bWJlci5GRUFUVVJFUyA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgIEVtYmVyLkZFQVRV
UkVTID0gewotICAgICAgICAgICAgICAgIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7fQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBvYmplY3RDcmVhdGUgPSBPYmplY3Qu
Y3JlYXRlIHx8IGZ1bmN0aW9uKHBhcmVudCkgewotICAgICAgICAgICAgZnVuY3Rpb24gRigpIHt9
Ci0gICAgICAgICAgICBGLnByb3RvdHlwZSA9IHBhcmVudDsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgRigpOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIHNldCB1cCBmb3IgY2lyY3VsYXIgcmVm
ZXJlbmNlcyBsYXRlcgotICAgICAgICB2YXIgVmlldywgQ29tcG9uZW50OwotCi0gICAgICAgIC8v
IEVTNlRvZG86IHdoZW4gZW1iZXItZGVidWcgaXMgZXM2J2VkIGltcG9ydCB0aGlzLgotICAgICAg
ICAvLyB2YXIgZW1iZXJBc3NlcnQgPSBFbWJlci5hc3NlcnQ7Ci0gICAgICAgIHZhciBIYW5kbGVi
YXJzID0gKEVtYmVyLmltcG9ydHMgJiYgRW1iZXIuaW1wb3J0cy5IYW5kbGViYXJzKSB8fCAodGhp
cyAmJiB0aGlzLkhhbmRsZWJhcnMpOwotICAgICAgICBpZiAoIUhhbmRsZWJhcnMgJiYgdHlwZW9m
IHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgIEhhbmRsZWJhcnMgPSByZXF1
aXJlKCdoYW5kbGViYXJzJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBFbWJlci5hc3NlcnQoIkVt
YmVyIEhhbmRsZWJhcnMgcmVxdWlyZXMgSGFuZGxlYmFycyB2ZXJzaW9uIDEuMCBvciAxLjEuIElu
Y2x1ZGUgIiArCi0gICAgICAgICJhIFNDUklQVCB0YWcgaW4gdGhlIEhUTUwgSEVBRCBsaW5raW5n
IHRvIHRoZSBIYW5kbGViYXJzIGZpbGUgIiArCi0gICAgICAgICJiZWZvcmUgeW91IGxpbmsgdG8g
RW1iZXIuIiwgSGFuZGxlYmFycyk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJFbWJlciBIYW5k
bGViYXJzIHJlcXVpcmVzIEhhbmRsZWJhcnMgdmVyc2lvbiAxLjAgb3IgMS4xLCAiICsKLSAgICAg
ICAgIkNPTVBJTEVSX1JFVklTSU9OIGV4cGVjdGVkOiA0LCBnb3Q6ICIgKyBIYW5kbGViYXJzLkNP
TVBJTEVSX1JFVklTSU9OICsKLSAgICAgICAgIiAtIFBsZWFzZSBub3RlOiBCdWlsZHMgb2YgbWFz
dGVyIG1heSBoYXZlIG90aGVyIENPTVBJTEVSX1JFVklTSU9OIHZhbHVlcy4iLAotICAgICAgICBI
YW5kbGViYXJzLkNPTVBJTEVSX1JFVklTSU9OID09PSA0KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgUHJlcGFyZXMgdGhlIEhhbmRsZWJhcnMgdGVtcGxhdGluZyBsaWJyYXJ5IGZvciB1
c2UgaW5zaWRlIEVtYmVyJ3MgdmlldwotICAgICAgICAgICAgICBzeXN0ZW0uCi0KLSAgICAgICAg
ICAgICAgVGhlIGBFbWJlci5IYW5kbGViYXJzYCBvYmplY3QgaXMgdGhlIHN0YW5kYXJkIEhhbmRs
ZWJhcnMgbGlicmFyeSwgZXh0ZW5kZWQgdG8KLSAgICAgICAgICAgICAgdXNlIEVtYmVyJ3MgYGdl
dCgpYCBtZXRob2QgaW5zdGVhZCBvZiBkaXJlY3QgcHJvcGVydHkgYWNjZXNzLCB3aGljaCBhbGxv
d3MKLSAgICAgICAgICAgICAgY29tcHV0ZWQgcHJvcGVydGllcyB0byBiZSB1c2VkIGluc2lkZSB0
ZW1wbGF0ZXMuCi0KLSAgICAgICAgICAgICAgVG8gY3JlYXRlIGFuIGBFbWJlci5IYW5kbGViYXJz
YCB0ZW1wbGF0ZSwgY2FsbCBgRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKClgLgotICAgICAgICAg
ICAgICBUaGlzIHdpbGwgcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBieSBgRW1i
ZXIuVmlld2AgZm9yIHJlbmRlcmluZy4KLQotICAgICAgICAgICAgICBAY2xhc3MgSGFuZGxlYmFy
cwotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAgICAg
ICB2YXIgRW1iZXJIYW5kbGViYXJzID0gRW1iZXIuSGFuZGxlYmFycyA9IG9iamVjdENyZWF0ZShI
YW5kbGViYXJzKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgUmVnaXN0ZXIgYSBib3Vu
ZCBoZWxwZXIgb3IgY3VzdG9tIHZpZXcgaGVscGVyLgotCi0gICAgICAgICAgICAgICMjIFNpbXBs
ZSBib3VuZCBoZWxwZXIgZXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXIoJ2NhcGl0YWxpemUnLCBmdW5jdGlv
bih2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpOwot
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhl
IGFib3ZlIGJvdW5kIGhlbHBlciBjYW4gYmUgdXNlZCBpbnNpZGUgb2YgdGVtcGxhdGVzIGFzIGZv
bGxvd3M6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e2Nh
cGl0YWxpemUgbmFtZX19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluIHRo
aXMgY2FzZSwgd2hlbiB0aGUgYG5hbWVgIHByb3BlcnR5IG9mIHRoZSB0ZW1wbGF0ZSdzIGNvbnRl
eHQgY2hhbmdlcywKLSAgICAgICAgICAgICAgdGhlIHJlbmRlcmVkIHZhbHVlIG9mIHRoZSBoZWxw
ZXIgd2lsbCB1cGRhdGUgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZS4KLQotICAgICAgICAgICAgICBG
b3IgbW9yZSBleGFtcGxlcyBvZiBib3VuZCBoZWxwZXJzLCBzZWUgZG9jdW1lbnRhdGlvbiBmb3IK
LSAgICAgICAgICAgICAgYEVtYmVyLkhhbmRsZWJhcnMucmVnaXN0ZXJCb3VuZEhlbHBlcmAuCi0K
LSAgICAgICAgICAgICAgIyMgQ3VzdG9tIHZpZXcgaGVscGVyIGV4YW1wbGUKLQotICAgICAgICAg
ICAgICBBc3N1bWluZyBhIHZpZXcgc3ViY2xhc3MgbmFtZWQgYEFwcC5DYWxlbmRhclZpZXdgIHdl
cmUgZGVmaW5lZCwgYSBoZWxwZXIKLSAgICAgICAgICAgICAgZm9yIHJlbmRlcmluZyBpbnN0YW5j
ZXMgb2YgdGhpcyB2aWV3IGNvdWxkIGJlIHJlZ2lzdGVyZWQgYXMgZm9sbG93czoKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkhhbmRsZWJhcnMuaGVs
cGVyKCdjYWxlbmRhcicsIEFwcC5DYWxlbmRhclZpZXcpOgotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBUaGUgYWJvdmUgYm91bmQgaGVscGVyIGNhbiBiZSB1c2VkIGluc2lkZSBv
ZiB0ZW1wbGF0ZXMgYXMgZm9sbG93czoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIHt7Y2FsZW5kYXJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBXaGljaCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0bzoKLQotICAgICAgICAgICAg
ICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dmlldyBBcHAuQ2FsZW5kYXJWaWV3fX0K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgT3B0aW9ucyBpbiB0aGUgaGVscGVy
IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB2aWV3IGluIGV4YWN0bHkgdGhlIHNhbWUKLSAgICAgICAg
ICAgICAgbWFubmVyIGFzIHdpdGggdGhlIGB2aWV3YCBoZWxwZXIuCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBoZWxwZXIKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVu
Y3Rpb258RW1iZXIuVmlld30gZnVuY3Rpb24gb3IgdmlldyBjbGFzcyBjb25zdHJ1Y3RvcgotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5cyoKLSAgICAgICAgICAgICov
Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5oZWxwZXIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkg
ewotICAgICAgICAgICAgaWYgKCFWaWV3KSB7Ci0gICAgICAgICAgICAgICAgVmlldyA9IHJlcXVp
cmVNb2R1bGUoJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnKVsnZGVmYXVsdCddOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gRVM2VE9ETzogc3R1cGlkIGNpcmN1bGFyIGRlcAotICAgICAg
ICAgICAgaWYgKCFDb21wb25lbnQpIHsKLSAgICAgICAgICAgICAgICBDb21wb25lbnQgPSByZXF1
aXJlTW9kdWxlKCdlbWJlci12aWV3cy92aWV3cy9jb21wb25lbnQnKVsnZGVmYXVsdCddOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gRVM2VE9ETzogc3R1cGlkIGNpcmN1bGFyIGRlcAot
Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byByZWdpc3RlciBhIGNvbXBv
bmVudCBuYW1lZCAnIiArIG5hbWUgKyAiJywgYnV0IGNvbXBvbmVudCBuYW1lcyBtdXN0IGluY2x1
ZGUgYSAnLSciLCAhQ29tcG9uZW50LmRldGVjdCh2YWx1ZSkgfHwgbmFtZS5tYXRjaCgvLS8pKTsK
LQotICAgICAgICAgICAgaWYgKFZpZXcuZGV0ZWN0KHZhbHVlKSkgewotICAgICAgICAgICAgICAg
IEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihuYW1lLCBFbWJlckhhbmRsZWJhcnMubWFr
ZVZpZXdIZWxwZXIodmFsdWUpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVyQm91bmRIZWxwZXIuYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgUmV0dXJucyBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGhlIHByb3ZpZGVk
IFZpZXdDbGFzcy4KLQotICAgICAgICAgICAgICBVc2VkIGludGVybmFsbHkgYnkgRW1iZXIuSGFu
ZGxlYmFycy5oZWxwZXIgYW5kIG90aGVyIG1ldGhvZHMKLSAgICAgICAgICAgICAgaW52b2x2aW5n
IGhlbHBlci9jb21wb25lbnQgcmVnaXN0cmF0aW9uLgotCi0gICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgIEBtZXRob2QgbWFrZVZpZXdIZWxwZXIKLSAgICAgICAgICAgICAgQGZv
ciBFbWJlci5IYW5kbGViYXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdD
bGFzcyB2aWV3IGNsYXNzIGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAot
ICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLm1ha2VWaWV3SGVscGVyID0g
ZnVuY3Rpb24oVmlld0NsYXNzKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ob3B0aW9u
cykgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbiBvbmx5IHBhc3MgYXR0
cmlidXRlcyAoc3VjaCBhcyBuYW1lPXZhbHVlKSBub3QgYmFyZSB2YWx1ZXMgdG8gYSBoZWxwZXIg
Zm9yIGEgVmlldyBmb3VuZCBpbiAnIiArIFZpZXdDbGFzcy50b1N0cmluZygpICsgIiciLCBhcmd1
bWVudHMubGVuZ3RoIDwgMik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVySGFuZGxlYmFy
cy5oZWxwZXJzLnZpZXcuY2FsbCh0aGlzLCBWaWV3Q2xhc3MsIG9wdGlvbnMpOwotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBjbGFzcyBoZWxw
ZXJzCi0gICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAg
ICovCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5oZWxwZXJzID0gb2JqZWN0Q3JlYXRlKEhhbmRs
ZWJhcnMuaGVscGVycyk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIE92ZXJyaWRlIHRo
ZSB0aGUgb3Bjb2RlIGNvbXBpbGVyIGFuZCBKYXZhU2NyaXB0IGNvbXBpbGVyIGZvciBIYW5kbGVi
YXJzLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBDb21waWxlcgotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
ICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlckhhbmRsZWJh
cnMuQ29tcGlsZXIgPSBmdW5jdGlvbigpIHt9OwotCi0gICAgICAgIC8vIEhhbmRsZWJhcnMuQ29t
cGlsZXIgZG9lc24ndCBleGlzdCBpbiBydW50aW1lLW9ubHkKLSAgICAgICAgaWYgKEhhbmRsZWJh
cnMuQ29tcGlsZXIpIHsKLSAgICAgICAgICAgIEVtYmVySGFuZGxlYmFycy5Db21waWxlci5wcm90
b3R5cGUgPSBvYmplY3RDcmVhdGUoSGFuZGxlYmFycy5Db21waWxlci5wcm90b3R5cGUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLkNvbXBpbGVyLnByb3RvdHlwZS5jb21w
aWxlciA9IEVtYmVySGFuZGxlYmFycy5Db21waWxlcjsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgQGNsYXNzIEphdmFTY3JpcHRDb21waWxlcgotICAgICAgICAgICAgICBAbmFtZXNwYWNl
IEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
QGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlckhhbmRsZWJhcnMuSmF2
YVNjcmlwdENvbXBpbGVyID0gZnVuY3Rpb24oKSB7fTsKLQotICAgICAgICAvLyBIYW5kbGViYXJz
LkphdmFTY3JpcHRDb21waWxlciBkb2Vzbid0IGV4aXN0IGluIHJ1bnRpbWUtb25seQotICAgICAg
ICBpZiAoSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIpIHsKLSAgICAgICAgICAgIEVtYmVy
SGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlID0gb2JqZWN0Q3JlYXRlKEhh
bmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSk7Ci0gICAgICAgICAgICBFbWJl
ckhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZS5jb21waWxlciA9IEVtYmVy
SGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXI7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIEVt
YmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlLm5hbWVzcGFjZSA9ICJF
bWJlci5IYW5kbGViYXJzIjsKLQotICAgICAgICBFbWJlckhhbmRsZWJhcnMuSmF2YVNjcmlwdENv
bXBpbGVyLnByb3RvdHlwZS5pbml0aWFsaXplQnVmZmVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gIicnIjsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnVmZmVyIGZvciBFbWJlciBIYW5kbGViYXJzLiBCeSBk
ZWZhdWx0LCBIYW5kbGViYXJzCi0gICAgICAgICAgICAgIGNyZWF0ZXMgYW4gZW1wdHkgU3RyaW5n
IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBpbnZvY2F0aW9uIGFuZCBhcHBlbmRzIHRvCi0gICAg
ICAgICAgICAgIGl0LiBFbWJlcidzIEhhbmRsZWJhcnMgb3ZlcnJpZGVzIHRoaXMgdG8gYXBwZW5k
IHRvIGEgc2luZ2xlIHNoYXJlZCBidWZmZXIuCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgQG1ldGhvZCBhcHBlbmRUb0J1ZmZlcgotICAgICAgICAgICAgICBAcGFyYW0g
c3RyaW5nIHtTdHJpbmd9Ci0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlckhhbmRsZWJhcnMu
SmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZS5hcHBlbmRUb0J1ZmZlciA9IGZ1bmN0aW9uKHN0
cmluZykgewotICAgICAgICAgICAgcmV0dXJuICJkYXRhLmJ1ZmZlci5wdXNoKCIgKyBzdHJpbmcg
KyAiKTsiOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIEhhY2tzIGFoZWFkOgotICAgICAgICAv
LyBIYW5kbGViYXJzIHByZXNlbnRseSBoYXMgYSBidWcgd2hlcmUgdGhlIGBibG9ja0hlbHBlck1p
c3NpbmdgIGhvb2sKLSAgICAgICAgLy8gZG9lc24ndCBnZXQgcGFzc2VkIHRoZSBuYW1lIG9mIHRo
ZSBtaXNzaW5nIGhlbHBlciBuYW1lLCBidXQgcmF0aGVyCi0gICAgICAgIC8vIGdldHMgcGFzc2Vk
IHRoZSB2YWx1ZSBvZiB0aGF0IG1pc3NpbmcgaGVscGVyIGV2YWx1YXRlZCBvbiB0aGUgY3VycmVu
dAotICAgICAgICAvLyBjb250ZXh0LCB3aGljaCBpcyBtb3N0IGxpa2VseSBgdW5kZWZpbmVkYCBh
bmQgdG90YWxseSB1c2VsZXNzLgotICAgICAgICAvLwotICAgICAgICAvLyBTbyB3ZSBhbHRlciB0
aGUgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdG8gcGFzcyB0aGUgbmFtZSBvZiB0aGUgaGVs
cGVyCi0gICAgICAgIC8vIGluc3RlYWQsIGFzIGV4cGVjdGVkLgotICAgICAgICAvLwotICAgICAg
ICAvLyBUaGlzIGNhbiBnbyBhd2F5IG9uY2UgdGhlIGZvbGxvd2luZyBpcyBjbG9zZWQ6Ci0gICAg
ICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvNjM0
Ci0KLSAgICAgICAgdmFyIERPVF9MT09LVVBfUkVHRVggPSAvaGVscGVyc1wuKC4qPylcKS8sCi0g
ICAgICAgIEJSQUNLRVRfU1RSSU5HX0xPT0tVUF9SRUdFWCA9IC9oZWxwZXJzXFsnKC4qPyknLywK
LSAgICAgICAgSU5WT0NBVElPTl9TUExJVFRJTkdfUkVHRVggPSAvKC4qYmxvY2tIZWxwZXJNaXNz
aW5nXC5jYWxsXCguKikoc3RhY2tbMC05XSspKCwuKikvOwotCi0gICAgICAgIEVtYmVySGFuZGxl
YmFycy5KYXZhU2NyaXB0Q29tcGlsZXIuc3RyaW5naWZ5TGFzdEJsb2NrSGVscGVyTWlzc2luZ0lu
dm9jYXRpb24gPSBmdW5jdGlvbihzb3VyY2UpIHsKLSAgICAgICAgICAgIHZhciBoZWxwZXJJbnZv
Y2F0aW9uID0gc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGhlbHBlck5h
bWUgPSAoRE9UX0xPT0tVUF9SRUdFWC5leGVjKGhlbHBlckludm9jYXRpb24pIHx8IEJSQUNLRVRf
U1RSSU5HX0xPT0tVUF9SRUdFWC5leGVjKGhlbHBlckludm9jYXRpb24pKVsxXSwKLSAgICAgICAg
ICAgIG1hdGNoZXMgPSBJTlZPQ0FUSU9OX1NQTElUVElOR19SRUdFWC5leGVjKGhlbHBlckludm9j
YXRpb24pOwotCi0gICAgICAgICAgICBzb3VyY2Vbc291cmNlLmxlbmd0aCAtIDFdID0gbWF0Y2hl
c1sxXSArICInIiArIGhlbHBlck5hbWUgKyAiJyIgKyBtYXRjaGVzWzNdOwotICAgICAgICB9Owot
Ci0gICAgICAgIHZhciBzdHJpbmdpZnlCbG9ja0hlbHBlck1pc3NpbmcgPSBFbWJlckhhbmRsZWJh
cnMuSmF2YVNjcmlwdENvbXBpbGVyLnN0cmluZ2lmeUxhc3RCbG9ja0hlbHBlck1pc3NpbmdJbnZv
Y2F0aW9uOwotCi0gICAgICAgIHZhciBvcmlnaW5hbEJsb2NrVmFsdWUgPSBFbWJlckhhbmRsZWJh
cnMuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZS5ibG9ja1ZhbHVlOwotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZS5ibG9ja1ZhbHVlID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBvcmlnaW5hbEJsb2NrVmFsdWUuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgIHN0cmluZ2lmeUJsb2NrSGVscGVyTWlzc2luZyh0aGlzLnNv
dXJjZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIG9yaWdpbmFsQW1iaWd1b3VzQmxvY2tW
YWx1ZSA9IEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlLmFtYmln
dW91c0Jsb2NrVmFsdWU7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGls
ZXIucHJvdG90eXBlLmFtYmlndW91c0Jsb2NrVmFsdWUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIG9yaWdpbmFsQW1iaWd1b3VzQmxvY2tWYWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgc3RyaW5naWZ5QmxvY2tIZWxwZXJNaXNzaW5nKHRoaXMuc291cmNlKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgUmV3cml0ZSBzaW1wbGUgbXVz
dGFjaGVzIGZyb20gYHt7Zm9vfX1gIHRvIGB7e2JpbmQgImZvbyJ9fWAuIFRoaXMgbWVhbnMgdGhh
dAotICAgICAgICAgICAgICBhbGwgc2ltcGxlIG11c3RhY2hlcyBpbiBFbWJlcidzIEhhbmRsZWJh
cnMgd2lsbCBhbHNvIHNldCB1cCBhbiBvYnNlcnZlciB0bwotICAgICAgICAgICAgICBrZWVwIHRo
ZSBET00gdXAgdG8gZGF0ZSB3aGVuIHRoZSB1bmRlcmx5aW5nIHByb3BlcnR5IGNoYW5nZXMuCi0K
LSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBtdXN0YWNoZQot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuQ29tcGlsZXIKLSAgICAgICAgICAg
ICAgQHBhcmFtIG11c3RhY2hlCi0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlckhhbmRsZWJh
cnMuQ29tcGlsZXIucHJvdG90eXBlLm11c3RhY2hlID0gZnVuY3Rpb24obXVzdGFjaGUpIHsKLSAg
ICAgICAgICAgIGlmICghKG11c3RhY2hlLnBhcmFtcy5sZW5ndGggfHwgbXVzdGFjaGUuaGFzaCkp
IHsKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSBuZXcgSGFuZGxlYmFycy5BU1QuSWROb2RlKFt7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcnQ6ICdfdHJpYWdlTXVzdGFjaGUnIAotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBdKTsKLQotICAgICAgICAgICAgICAgIC8vIFVwZGF0
ZSB0aGUgbXVzdGFjaGUgbm9kZSB0byBpbmNsdWRlIGEgaGFzaCB2YWx1ZSBpbmRpY2F0aW5nIHdo
ZXRoZXIgdGhlIG9yaWdpbmFsIG5vZGUKLSAgICAgICAgICAgICAgICAvLyB3YXMgZXNjYXBlZC4g
VGhpcyB3aWxsIGFsbG93IHVzIHRvIHByb3Blcmx5IGVzY2FwZSB2YWx1ZXMgd2hlbiB0aGUgdW5k
ZXJseWluZyB2YWx1ZQotICAgICAgICAgICAgICAgIC8vIGNoYW5nZXMgYW5kIHdlIG5lZWQgdG8g
cmUtcmVuZGVyIHRoZSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAoIW11c3RhY2hlLmVzY2Fw
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbXVzdGFjaGUuaGFzaCA9IG11c3RhY2hlLmhhc2gg
fHwgbmV3IEhhbmRsZWJhcnMuQVNULkhhc2hOb2RlKFtdKTsKLSAgICAgICAgICAgICAgICAgICAg
bXVzdGFjaGUuaGFzaC5wYWlycy5wdXNoKFsidW5lc2NhcGVkIiwgbmV3IEhhbmRsZWJhcnMuQVNU
LlN0cmluZ05vZGUoInRydWUiKV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtdXN0YWNoZSA9IG5ldyBIYW5kbGViYXJzLkFTVC5NdXN0YWNoZU5vZGUoW2lkXS5jb25jYXQo
W211c3RhY2hlLmlkXSksIG11c3RhY2hlLmhhc2gsICFtdXN0YWNoZS5lc2NhcGVkKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIEhhbmRsZWJhcnMuQ29tcGlsZXIucHJvdG90
eXBlLm11c3RhY2hlLmNhbGwodGhpcywgbXVzdGFjaGUpOwotICAgICAgICB9OwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBVc2VkIGZvciBwcmVjb21waWxhdGlvbiBvZiBFbWJlciBIYW5k
bGViYXJzIHRlbXBsYXRlcy4gVGhpcyB3aWxsIG5vdCBiZSB1c2VkCi0gICAgICAgICAgICAgIGR1
cmluZyBub3JtYWwgYXBwIGV4ZWN1dGlvbi4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHByZWNv
bXBpbGUKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzCi0gICAgICAgICAgICAg
IEBzdGF0aWMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgdGVtcGxh
dGUgdG8gcHJlY29tcGlsZQotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IGFzT2JqZWN0
IG9wdGlvbmFsIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byB0cnVlLCBvZiB3aGV0aGVyIG9yIG5v
dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZCB0
ZW1wbGF0ZSBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gT2JqZWN0IG9yIGEgU3RyaW5nCi0gICAg
ICAgICAgICAqLwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucHJlY29tcGlsZSA9IGZ1bmN0aW9u
KHN0cmluZywgYXNPYmplY3QpIHsKLSAgICAgICAgICAgIHZhciBhc3QgPSBIYW5kbGViYXJzLnBh
cnNlKHN0cmluZyk7Ci0KLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAgICAg
ICAgIGtub3duSGVscGVyczogewotICAgICAgICAgICAgICAgICAgICBhY3Rpb246IHRydWUsCi0g
ICAgICAgICAgICAgICAgICAgIHVuYm91bmQ6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICdi
aW5kLWF0dHInOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdHJ1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgdmlldzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgX3RyaWFn
ZU11c3RhY2hlOiB0cnVlCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBkYXRh
OiB0cnVlLAotICAgICAgICAgICAgICAgIHN0cmluZ1BhcmFtczogdHJ1ZQotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgYXNPYmplY3QgPSBhc09iamVjdCA9PT0gdW5kZWZpbmVkID8gdHJ1
ZSA6IGFzT2JqZWN0OwotCi0gICAgICAgICAgICB2YXIgZW52aXJvbm1lbnQgPSBuZXcgRW1iZXJI
YW5kbGViYXJzLkNvbXBpbGVyKCkuY29tcGlsZShhc3QsIG9wdGlvbnMpOwotICAgICAgICAgICAg
cmV0dXJuIG5ldyBFbWJlckhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShl
bnZpcm9ubWVudCwgb3B0aW9ucywgdW5kZWZpbmVkLCBhc09iamVjdCk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZvciBIYW5kbGViYXJzIHJ1bnRpbWUt
b25seQotICAgICAgICBpZiAoSGFuZGxlYmFycy5jb21waWxlKSB7Ci0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGZvciBFbWJlciBIYW5kbGViYXJz
LiBUaGlzIHJlcGxhY2VzIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIGBIYW5kbGVi
YXJzLmNvbXBpbGVgIGFuZCB0dXJucyBvbiB0ZW1wbGF0ZS1sb2NhbCBkYXRhIGFuZCBTdHJpbmcK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGNvbXBpbGUKLSAgICAgICAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJz
Ci0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IHN0cmluZyBUaGUgdGVtcGxhdGUgdG8gY29tcGlsZQotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtGdW5jdGlvbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBFbWJlckhhbmRsZWJhcnMuY29tcGlsZSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgICAgICAg
ICAgICAgIHZhciBhc3QgPSBIYW5kbGViYXJzLnBhcnNlKHN0cmluZyk7Ci0gICAgICAgICAgICAg
ICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgIHN0cmluZ1BhcmFtczogdHJ1ZSAKLSAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgICAgIHZhciBlbnZpcm9ubWVudCA9IG5ldyBFbWJlckhhbmRsZWJhcnMuQ29t
cGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgdmFyIHRlbXBs
YXRlU3BlYyA9IG5ldyBFbWJlckhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGls
ZShlbnZpcm9ubWVudCwgb3B0aW9ucywgdW5kZWZpbmVkLCB0cnVlKTsKLQotICAgICAgICAgICAg
ICAgIHZhciB0ZW1wbGF0ZSA9IEVtYmVySGFuZGxlYmFycy50ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMp
OwotICAgICAgICAgICAgICAgIHRlbXBsYXRlLmlzTWV0aG9kID0gZmFsc2U7IC8vTWFrZSBzdXJl
IHdlIGRvbid0IHdyYXAgdGVtcGxhdGVzIHdpdGggLl9zdXBlcgotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRlbXBsYXRlOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlckhhbmRsZWJhcnM7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1oYW5kbGViYXJzIiwKLSAgICBbImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIi
LCAiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiLCAi
ZW1iZXItaGFuZGxlYmFycy9sb2FkZXIiLCAiZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZW1iZXIt
aGFuZGxlYmFycy9zdHJpbmciLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL3NoYXJlZCIsICJl
bWJlci1oYW5kbGViYXJzL2hlbHBlcnMvYmluZGluZyIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBl
cnMvY29sbGVjdGlvbiIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdmlldyIsICJlbWJlci1o
YW5kbGViYXJzL2hlbHBlcnMvdW5ib3VuZCIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvZGVi
dWciLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL2VhY2giLCAiZW1iZXItaGFuZGxlYmFycy9o
ZWxwZXJzL3RlbXBsYXRlIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9wYXJ0aWFsIiwgImVt
YmVyLWhhbmRsZWJhcnMvaGVscGVycy95aWVsZCIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMv
bG9jIiwgImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvY2hlY2tib3giLCAiZW1iZXItaGFuZGxl
YmFycy9jb250cm9scy9zZWxlY3QiLCAiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X2Fy
ZWEiLCAiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X2ZpZWxkIiwgImVtYmVyLWhhbmRs
ZWJhcnMvY29udHJvbHMvdGV4dF9zdXBwb3J0IiwgImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMi
LCAiZW1iZXItaGFuZGxlYmFycy9jb21wb25lbnRfbG9va3VwIiwgImVtYmVyLWhhbmRsZWJhcnMv
dmlld3MvaGFuZGxlYmFyc19ib3VuZF92aWV3IiwgImVtYmVyLWhhbmRsZWJhcnMvdmlld3MvbWV0
YW1vcnBoX3ZpZXciLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBl
bmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5
OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18s
IF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5kZW5jeTEzX18sIF9fZGVwZW5kZW5jeTE0X18sIF9f
ZGVwZW5kZW5jeTE1X18sIF9fZGVwZW5kZW5jeTE2X18sIF9fZGVwZW5kZW5jeTE3X18sIF9fZGVw
ZW5kZW5jeTE4X18sIF9fZGVwZW5kZW5jeTE5X18sIF9fZGVwZW5kZW5jeTIwX18sIF9fZGVwZW5k
ZW5jeTIxX18sIF9fZGVwZW5kZW5jeTIyX18sIF9fZGVwZW5kZW5jeTIzX18sIF9fZGVwZW5kZW5j
eTI0X18sIF9fZGVwZW5kZW5jeTI1X18sIF9fZGVwZW5kZW5jeTI2X18sIF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVySGFuZGxlYmFycyA9IF9f
ZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVu
Y3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gdG8gYWRkIHRvIGdsb2JhbHMKLQotICAgICAg
ICB2YXIgcnVuTG9hZEhvb2tzID0gX19kZXBlbmRlbmN5M19fLnJ1bkxvYWRIb29rczsKLSAgICAg
ICAgdmFyIGJvb3RzdHJhcCA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotCi0gICAgICAg
IHZhciBub3JtYWxpemVQYXRoID0gX19kZXBlbmRlbmN5NV9fLm5vcm1hbGl6ZVBhdGg7Ci0gICAg
ICAgIHZhciB0ZW1wbGF0ZSA9IF9fZGVwZW5kZW5jeTVfXy50ZW1wbGF0ZTsKLSAgICAgICAgdmFy
IG1ha2VCb3VuZEhlbHBlciA9IF9fZGVwZW5kZW5jeTVfXy5tYWtlQm91bmRIZWxwZXI7Ci0gICAg
ICAgIHZhciByZWdpc3RlckJvdW5kSGVscGVyID0gX19kZXBlbmRlbmN5NV9fLnJlZ2lzdGVyQm91
bmRIZWxwZXI7Ci0gICAgICAgIHZhciByZXNvbHZlSGFzaCA9IF9fZGVwZW5kZW5jeTVfXy5yZXNv
bHZlSGFzaDsKLSAgICAgICAgdmFyIHJlc29sdmVQYXJhbXMgPSBfX2RlcGVuZGVuY3k1X18ucmVz
b2x2ZVBhcmFtczsKLSAgICAgICAgdmFyIGdldEVzY2FwZWQgPSBfX2RlcGVuZGVuY3k1X18uZ2V0
RXNjYXBlZDsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVuY3k1X18uaGFu
ZGxlYmFyc0dldDsKLSAgICAgICAgdmFyIGV2YWx1YXRlVW5ib3VuZEhlbHBlciA9IF9fZGVwZW5k
ZW5jeTVfXy5ldmFsdWF0ZVVuYm91bmRIZWxwZXI7Ci0gICAgICAgIHZhciBoZWxwZXJNaXNzaW5n
SGVscGVyID0gX19kZXBlbmRlbmN5NV9fLmhlbHBlck1pc3NpbmdIZWxwZXI7Ci0gICAgICAgIHZh
ciBibG9ja0hlbHBlck1pc3NpbmdIZWxwZXIgPSBfX2RlcGVuZGVuY3k1X18uYmxvY2tIZWxwZXJN
aXNzaW5nSGVscGVyOwotCi0KLSAgICAgICAgLy8gc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5nIFN0
cmluZ1V0aWxzIG9mIGh0bWxTYWZlCi0KLSAgICAgICAgdmFyIHJlc29sdmVQYXRocyA9IF9fZGVw
ZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgYmluZCA9IF9fZGVwZW5kZW5jeThf
Xy5iaW5kOwotICAgICAgICB2YXIgX3RyaWFnZU11c3RhY2hlSGVscGVyID0gX19kZXBlbmRlbmN5
OF9fLl90cmlhZ2VNdXN0YWNoZUhlbHBlcjsKLSAgICAgICAgdmFyIHJlc29sdmVIZWxwZXIgPSBf
X2RlcGVuZGVuY3k4X18ucmVzb2x2ZUhlbHBlcjsKLSAgICAgICAgdmFyIGJpbmRIZWxwZXIgPSBf
X2RlcGVuZGVuY3k4X18uYmluZEhlbHBlcjsKLSAgICAgICAgdmFyIGJvdW5kSWZIZWxwZXIgPSBf
X2RlcGVuZGVuY3k4X18uYm91bmRJZkhlbHBlcjsKLSAgICAgICAgdmFyIHVuYm91bmRJZkhlbHBl
ciA9IF9fZGVwZW5kZW5jeThfXy51bmJvdW5kSWZIZWxwZXI7Ci0gICAgICAgIHZhciB3aXRoSGVs
cGVyID0gX19kZXBlbmRlbmN5OF9fLndpdGhIZWxwZXI7Ci0gICAgICAgIHZhciBpZkhlbHBlciA9
IF9fZGVwZW5kZW5jeThfXy5pZkhlbHBlcjsKLSAgICAgICAgdmFyIHVubGVzc0hlbHBlciA9IF9f
ZGVwZW5kZW5jeThfXy51bmxlc3NIZWxwZXI7Ci0gICAgICAgIHZhciBiaW5kQXR0ckhlbHBlciA9
IF9fZGVwZW5kZW5jeThfXy5iaW5kQXR0ckhlbHBlcjsKLSAgICAgICAgdmFyIGJpbmRBdHRySGVs
cGVyRGVwcmVjYXRlZCA9IF9fZGVwZW5kZW5jeThfXy5iaW5kQXR0ckhlbHBlckRlcHJlY2F0ZWQ7
Ci0gICAgICAgIHZhciBiaW5kQ2xhc3NlcyA9IF9fZGVwZW5kZW5jeThfXy5iaW5kQ2xhc3NlczsK
LQotICAgICAgICB2YXIgY29sbGVjdGlvbkhlbHBlciA9IF9fZGVwZW5kZW5jeTlfX1siZGVmYXVs
dCJdOwotICAgICAgICB2YXIgVmlld0hlbHBlciA9IF9fZGVwZW5kZW5jeTEwX18uVmlld0hlbHBl
cjsKLSAgICAgICAgdmFyIHZpZXdIZWxwZXIgPSBfX2RlcGVuZGVuY3kxMF9fLnZpZXdIZWxwZXI7
Ci0gICAgICAgIHZhciB1bmJvdW5kSGVscGVyID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgbG9nSGVscGVyID0gX19kZXBlbmRlbmN5MTJfXy5sb2dIZWxwZXI7Ci0g
ICAgICAgIHZhciBkZWJ1Z2dlckhlbHBlciA9IF9fZGVwZW5kZW5jeTEyX18uZGVidWdnZXJIZWxw
ZXI7Ci0gICAgICAgIHZhciBFYWNoVmlldyA9IF9fZGVwZW5kZW5jeTEzX18uRWFjaFZpZXc7Ci0g
ICAgICAgIHZhciBHcm91cGVkRWFjaCA9IF9fZGVwZW5kZW5jeTEzX18uR3JvdXBlZEVhY2g7Ci0g
ICAgICAgIHZhciBlYWNoSGVscGVyID0gX19kZXBlbmRlbmN5MTNfXy5lYWNoSGVscGVyOwotICAg
ICAgICB2YXIgdGVtcGxhdGVIZWxwZXIgPSBfX2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBwYXJ0aWFsSGVscGVyID0gX19kZXBlbmRlbmN5MTVfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgeWllbGRIZWxwZXIgPSBfX2RlcGVuZGVuY3kxNl9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBsb2NIZWxwZXIgPSBfX2RlcGVuZGVuY3kxN19fWyJkZWZhdWx0Il07Ci0KLQot
ICAgICAgICB2YXIgQ2hlY2tib3ggPSBfX2RlcGVuZGVuY3kxOF9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBTZWxlY3QgPSBfX2RlcGVuZGVuY3kxOV9fLlNlbGVjdDsKLSAgICAgICAgdmFyIFNl
bGVjdE9wdGlvbiA9IF9fZGVwZW5kZW5jeTE5X18uU2VsZWN0T3B0aW9uOwotICAgICAgICB2YXIg
U2VsZWN0T3B0Z3JvdXAgPSBfX2RlcGVuZGVuY3kxOV9fLlNlbGVjdE9wdGdyb3VwOwotICAgICAg
ICB2YXIgVGV4dEFyZWEgPSBfX2RlcGVuZGVuY3kyMF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBUZXh0RmllbGQgPSBfX2RlcGVuZGVuY3kyMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBU
ZXh0U3VwcG9ydCA9IF9fZGVwZW5kZW5jeTIyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGlu
cHV0SGVscGVyID0gX19kZXBlbmRlbmN5MjNfXy5pbnB1dEhlbHBlcjsKLSAgICAgICAgdmFyIHRl
eHRhcmVhSGVscGVyID0gX19kZXBlbmRlbmN5MjNfXy50ZXh0YXJlYUhlbHBlcjsKLQotCi0gICAg
ICAgIHZhciBDb21wb25lbnRMb29rdXAgPSBfX2RlcGVuZGVuY3kyNF9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBfSGFuZGxlYmFyc0JvdW5kVmlldyA9IF9fZGVwZW5kZW5jeTI1X18uX0hhbmRs
ZWJhcnNCb3VuZFZpZXc7Ci0gICAgICAgIHZhciBTaW1wbGVIYW5kbGViYXJzVmlldyA9IF9fZGVw
ZW5kZW5jeTI1X18uU2ltcGxlSGFuZGxlYmFyc1ZpZXc7Ci0gICAgICAgIHZhciBfd3JhcE1hcCA9
IF9fZGVwZW5kZW5jeTI2X18uX3dyYXBNYXA7Ci0gICAgICAgIHZhciBfU2ltcGxlTWV0YW1vcnBo
VmlldyA9IF9fZGVwZW5kZW5jeTI2X18uX1NpbXBsZU1ldGFtb3JwaFZpZXc7Ci0gICAgICAgIHZh
ciBfTWV0YW1vcnBoVmlldyA9IF9fZGVwZW5kZW5jeTI2X18uX01ldGFtb3JwaFZpZXc7Ci0gICAg
ICAgIHZhciBfTWV0YW1vcnBoID0gX19kZXBlbmRlbmN5MjZfXy5fTWV0YW1vcnBoOwotCi0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICBFbWJlciBIYW5kbGViYXJzCi0KLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAg
ICAgICAgICAgQHJlcXVpcmVzIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwotCi0gICAgICAg
IC8vIEVtYmVyLkhhbmRsZWJhcnMuR2xvYmFscwotICAgICAgICBFbWJlckhhbmRsZWJhcnMuYm9v
dHN0cmFwID0gYm9vdHN0cmFwOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMudGVtcGxhdGUgPSB0
ZW1wbGF0ZTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLm1ha2VCb3VuZEhlbHBlciA9IG1ha2VC
b3VuZEhlbHBlcjsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVyQm91bmRIZWxwZXIg
PSByZWdpc3RlckJvdW5kSGVscGVyOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVzb2x2ZUhh
c2ggPSByZXNvbHZlSGFzaDsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlc29sdmVQYXJhbXMg
PSByZXNvbHZlUGFyYW1zOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVzb2x2ZUhlbHBlciA9
IHJlc29sdmVIZWxwZXI7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5nZXQgPSBoYW5kbGViYXJz
R2V0OwotICAgICAgICBFbWJlckhhbmRsZWJhcnMuZ2V0RXNjYXBlZCA9IGdldEVzY2FwZWQ7Ci0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy5ldmFsdWF0ZVVuYm91bmRIZWxwZXIgPSBldmFsdWF0ZVVu
Ym91bmRIZWxwZXI7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5iaW5kID0gYmluZDsKLSAgICAg
ICAgRW1iZXJIYW5kbGViYXJzLmJpbmRDbGFzc2VzID0gYmluZENsYXNzZXM7Ci0gICAgICAgIEVt
YmVySGFuZGxlYmFycy5FYWNoVmlldyA9IEVhY2hWaWV3OwotICAgICAgICBFbWJlckhhbmRsZWJh
cnMuR3JvdXBlZEVhY2ggPSBHcm91cGVkRWFjaDsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJl
c29sdmVQYXRocyA9IHJlc29sdmVQYXRoczsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLlZpZXdI
ZWxwZXIgPSBWaWV3SGVscGVyOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMubm9ybWFsaXplUGF0
aCA9IG5vcm1hbGl6ZVBhdGg7Ci0KLQotICAgICAgICAvLyBFbWJlciBHbG9iYWxzCi0gICAgICAg
IEVtYmVyLkhhbmRsZWJhcnMgPSBFbWJlckhhbmRsZWJhcnM7Ci0gICAgICAgIEVtYmVyLkNvbXBv
bmVudExvb2t1cCA9IENvbXBvbmVudExvb2t1cDsKLSAgICAgICAgRW1iZXIuX1NpbXBsZUhhbmRs
ZWJhcnNWaWV3ID0gU2ltcGxlSGFuZGxlYmFyc1ZpZXc7Ci0gICAgICAgIEVtYmVyLl9IYW5kbGVi
YXJzQm91bmRWaWV3ID0gX0hhbmRsZWJhcnNCb3VuZFZpZXc7Ci0gICAgICAgIEVtYmVyLl9TaW1w
bGVNZXRhbW9ycGhWaWV3ID0gX1NpbXBsZU1ldGFtb3JwaFZpZXc7Ci0gICAgICAgIEVtYmVyLl9N
ZXRhbW9ycGhWaWV3ID0gX01ldGFtb3JwaFZpZXc7Ci0gICAgICAgIEVtYmVyLl9NZXRhbW9ycGgg
PSBfTWV0YW1vcnBoOwotICAgICAgICBFbWJlci5fbWV0YW1vcnBoV3JhcE1hcCA9IF93cmFwTWFw
OwotICAgICAgICBFbWJlci5UZXh0U3VwcG9ydCA9IFRleHRTdXBwb3J0OwotICAgICAgICBFbWJl
ci5DaGVja2JveCA9IENoZWNrYm94OwotICAgICAgICBFbWJlci5TZWxlY3QgPSBTZWxlY3Q7Ci0g
ICAgICAgIEVtYmVyLlNlbGVjdE9wdGlvbiA9IFNlbGVjdE9wdGlvbjsKLSAgICAgICAgRW1iZXIu
U2VsZWN0T3B0Z3JvdXAgPSBTZWxlY3RPcHRncm91cDsKLSAgICAgICAgRW1iZXIuVGV4dEFyZWEg
PSBUZXh0QXJlYTsKLSAgICAgICAgRW1iZXIuVGV4dEZpZWxkID0gVGV4dEZpZWxkOwotICAgICAg
ICBFbWJlci5UZXh0U3VwcG9ydCA9IFRleHRTdXBwb3J0OwotCi0gICAgICAgIC8vIHJlZ2lzdGVy
IGhlbHBlcnMKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJN
aXNzaW5nJywgaGVscGVyTWlzc2luZ0hlbHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5y
ZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgYmxvY2tIZWxwZXJNaXNzaW5nSGVs
cGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdiaW5kJywgYmlu
ZEhlbHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignYm91bmRJ
ZicsIGJvdW5kSWZIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxw
ZXIoJ190cmlhZ2VNdXN0YWNoZScsIF90cmlhZ2VNdXN0YWNoZUhlbHBlcik7Ci0gICAgICAgIEVt
YmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigndW5ib3VuZElmJywgdW5ib3VuZElmSGVscGVy
KTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgd2l0aEhl
bHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignaWYnLCBpZkhl
bHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigndW5sZXNzJywg
dW5sZXNzSGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdi
aW5kLWF0dHInLCBiaW5kQXR0ckhlbHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdp
c3RlckhlbHBlcignYmluZEF0dHInLCBiaW5kQXR0ckhlbHBlckRlcHJlY2F0ZWQpOwotICAgICAg
ICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2NvbGxlY3Rpb24nLCBjb2xsZWN0aW9u
SGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCJsb2ciLCBs
b2dIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImRlYnVn
Z2VyIiwgZGVidWdnZXJIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJI
ZWxwZXIoImVhY2giLCBlYWNoSGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lz
dGVySGVscGVyKCJsb2MiLCBsb2NIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVn
aXN0ZXJIZWxwZXIoInBhcnRpYWwiLCBwYXJ0aWFsSGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5k
bGViYXJzLnJlZ2lzdGVySGVscGVyKCJ0ZW1wbGF0ZSIsIHRlbXBsYXRlSGVscGVyKTsKLSAgICAg
ICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCJ5aWVsZCIsIHlpZWxkSGVscGVyKTsK
LSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCJ2aWV3Iiwgdmlld0hlbHBl
cik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigidW5ib3VuZCIsIHVu
Ym91bmRIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImlu
cHV0IiwgaW5wdXRIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxw
ZXIoInRleHRhcmVhIiwgdGV4dGFyZWFIZWxwZXIpOwotCi0gICAgICAgIC8vIHJ1biBsb2FkIGhv
b2tzCi0gICAgICAgIHJ1bkxvYWRIb29rcygnRW1iZXIuSGFuZGxlYmFycycsIEVtYmVySGFuZGxl
YmFycyk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVySGFuZGxlYmFy
czsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvY29tcG9uZW50X2xvb2t1
cCIsCi0gICAgWyJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZXhwb3J0cyJdLAotICAg
IGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1
bHQiXTsKLQotICAgICAgICB2YXIgQ29tcG9uZW50TG9va3VwID0gRW1iZXJPYmplY3QuZXh0ZW5k
KHsKLSAgICAgICAgICAgIGxvb2t1cEZhY3Rvcnk6IGZ1bmN0aW9uKG5hbWUsIGNvbnRhaW5lcikg
ewotCi0gICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyIHx8IHRoaXMuY29udGFp
bmVyOwotCi0gICAgICAgICAgICAgICAgdmFyIGZ1bGxOYW1lID0gJ2NvbXBvbmVudDonICsgbmFt
ZSwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZ1bGxOYW1lID0gJ3RlbXBsYXRlOmNvbXBvbmVu
dHMvJyArIG5hbWUsCi0gICAgICAgICAgICAgICAgdGVtcGxhdGVSZWdpc3RlcmVkID0gY29udGFp
bmVyICYmIGNvbnRhaW5lci5oYXModGVtcGxhdGVGdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGVtcGxhdGVSZWdpc3RlcmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5pbmplY3Rpb24oZnVsbE5hbWUsICdsYXlvdXQnLCB0ZW1wbGF0ZUZ1bGxOYW1lKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gY29udGFpbmVy
Lmxvb2t1cEZhY3RvcnkoZnVsbE5hbWUpOwotCi0gICAgICAgICAgICAgICAgLy8gT25seSB0cmVh
dCBhcyBhIGNvbXBvbmVudCBpZiBlaXRoZXIgdGhlIGNvbXBvbmVudAotICAgICAgICAgICAgICAg
IC8vIG9yIGEgdGVtcGxhdGUgaGFzIGJlZW4gcmVnaXN0ZXJlZC4KLSAgICAgICAgICAgICAgICBp
ZiAodGVtcGxhdGVSZWdpc3RlcmVkIHx8IENvbXBvbmVudCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIUNvbXBvbmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJl
Z2lzdGVyKGZ1bGxOYW1lLCBFbWJlci5Db21wb25lbnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgQ29tcG9uZW50ID0gY29udGFpbmVyLmxvb2t1cEZhY3RvcnkoZnVsbE5hbWUpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21wb25lbnQ7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29tcG9uZW50TG9va3VwOwotICAgIH0pOwotICAgIGRl
ZmluZSgiZW1iZXItaGFuZGxlYmFycy9jb250cm9scyIsCi0gICAgWyJlbWJlci1oYW5kbGViYXJz
L2NvbnRyb2xzL2NoZWNrYm94IiwgImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvdGV4dF9maWVs
ZCIsICJlbWJlci1oYW5kbGViYXJzL2NvbnRyb2xzL3RleHRfYXJlYSIsICJlbWJlci1tZXRhbC9j
b3JlIiwgImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9f
ZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBDaGVja2JveCA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgVGV4dEZpZWxkID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBUZXh0QXJlYSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwot
Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAg
ICAvLyBFbWJlci5hc3NlcnQKLSAgICAgICAgLy8gdmFyIGVtYmVyQXNzZXJ0ID0gRW1iZXIuYXNz
ZXJ0OwotCi0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3k1X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVscGVyczsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgLyoqCi0KLSAgICAgICAgICAgICAgVGhlIGB7e2lucHV0fX1gIGhlbHBlciBpbnNlcnRzIGFu
IEhUTUwgYDxpbnB1dD5gIHRhZyBpbnRvIHRoZSB0ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgd2l0
aCBhIGB0eXBlYCB2YWx1ZSBvZiBlaXRoZXIgYHRleHRgIG9yIGBjaGVja2JveGAuIElmIG5vIGB0
eXBlYCBpcyBwcm92aWRlZCwKLSAgICAgICAgICAgICAgYHRleHRgIHdpbGwgYmUgdGhlIGRlZmF1
bHQgdmFsdWUgYXBwbGllZC4gVGhlIGF0dHJpYnV0ZXMgb2YgYHt7aW5wdXR9fWAKLSAgICAgICAg
ICAgICAgbWF0Y2ggdGhvc2Ugb2YgdGhlIG5hdGl2ZSBIVE1MIHRhZyBhcyBjbG9zZWx5IGFzIHBv
c3NpYmxlIGZvciB0aGVzZSB0d28gdHlwZXMuCi0KLSAgICAgICAgICAgICAgIyMgVXNlIGFzIHRl
eHQgZmllbGQKLSAgICAgICAgICAgICAgQW4gYHt7aW5wdXR9fWAgd2l0aCBubyBgdHlwZWAgb3Ig
YSBgdHlwZWAgb2YgYHRleHRgIHdpbGwgcmVuZGVyIGFuIEhUTUwgdGV4dCBpbnB1dC4KLSAgICAg
ICAgICAgICAgVGhlIGZvbGxvd2luZyBIVE1MIGF0dHJpYnV0ZXMgY2FuIGJlIHNldCB2aWEgdGhl
IGhlbHBlcjoKLQotICAgICAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5g
cmVhZG9ubHlgPC90ZD48dGQ+YHJlcXVpcmVkYDwvdGQ+PHRkPmBhdXRvZm9jdXNgPC90ZD48L3Ry
PgotICAgICAgICAgICAgICA8dHI+PHRkPmB2YWx1ZWA8L3RkPjx0ZD5gcGxhY2Vob2xkZXJgPC90
ZD48dGQ+YGRpc2FibGVkYDwvdGQ+PC90cj4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5gc2l6ZWA8
L3RkPjx0ZD5gdGFiaW5kZXhgPC90ZD48dGQ+YG1heGxlbmd0aGA8L3RkPjwvdHI+Ci0gICAgICAg
ICAgICAgIDx0cj48dGQ+YG5hbWVgPC90ZD48dGQ+YG1pbmA8L3RkPjx0ZD5gbWF4YDwvdGQ+PC90
cj4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5gcGF0dGVybmA8L3RkPjx0ZD5gYWNjZXB0YDwvdGQ+
PHRkPmBhdXRvY29tcGxldGVgPC90ZD48L3RyPgotICAgICAgICAgICAgICA8dHI+PHRkPmBhdXRv
c2F2ZWA8L3RkPjx0ZD5gZm9ybWFjdGlvbmA8L3RkPjx0ZD5gZm9ybWVuY3R5cGVgPC90ZD48L3Ry
PgotICAgICAgICAgICAgICA8dHI+PHRkPmBmb3JtbWV0aG9kYDwvdGQ+PHRkPmBmb3Jtbm92YWxp
ZGF0ZWA8L3RkPjx0ZD5gZm9ybXRhcmdldGA8L3RkPjwvdHI+Ci0gICAgICAgICAgICAgIDx0cj48
dGQ+YGhlaWdodGA8L3RkPjx0ZD5gaW5wdXRtb2RlYDwvdGQ+PHRkPmBtdWx0aXBsZWA8L3RkPjwv
dHI+Ci0gICAgICAgICAgICAgIDx0cj48dGQ+YHN0ZXBgPC90ZD48dGQ+YHdpZHRoYDwvdGQ+PHRk
PmBmb3JtYDwvdGQ+PC90cj4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5gc2VsZWN0aW9uRGlyZWN0
aW9uYDwvdGQ+PHRkPmBzcGVsbGNoZWNrYDwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90cj4KLSAgICAg
ICAgICAgICA8L3RhYmxlPgotCi0KLSAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gYSBxdW90ZWQg
c3RyaW5nLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXJlY3RseSBhcHBsaWVkIHRvIHRoZSBIVE1M
Ci0gICAgICAgICAgICAgIGVsZW1lbnQuIFdoZW4gbGVmdCB1bnF1b3RlZCwgdGhlc2UgdmFsdWVz
IHdpbGwgYmUgYm91bmQgdG8gYSBwcm9wZXJ0eSBvbiB0aGUKLSAgICAgICAgICAgICAgdGVtcGxh
dGUncyBjdXJyZW50IHJlbmRlcmluZyBjb250ZXh0IChtb3N0IHR5cGljYWxseSBhIGNvbnRyb2xs
ZXIgaW5zdGFuY2UpLgotCi0gICAgICAgICAgICAgICMjIFVuYm91bmQ6Ci0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e2lucHV0IHZhbHVlPSJodHRwOi8vd3d3
LmZhY2Vib29rLmNvbSJ9fQotICAgICAgICAgICAgICBgYGAKLQotCi0gICAgICAgICAgICAgIGBg
YGh0bWwKLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJodHRwOi8vd3d3
LmZhY2Vib29rLmNvbSIvPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBC
b3VuZDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5B
cHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgZmlyc3ROYW1lOiAiU3RhbmxleSIsCi0gICAgICAgICAgICAgICAgZW50cnlOb3RB
bGxvd2VkOiB0cnVlCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tpbnB1dCB0eXBlPSJ0
ZXh0IiB2YWx1ZT1maXJzdE5hbWUgZGlzYWJsZWQ9ZW50cnlOb3RBbGxvd2VkIHNpemU9IjUwIn19
Ci0gICAgICAgICAgICAgIGBgYAotCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAg
ICAgICA8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IlN0YW5sZXkiIGRpc2FibGVkPSJkaXNhYmxl
ZCIgc2l6ZT0iNTAiLz4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMgQWN0
aW9ucwotCi0gICAgICAgICAgICAgIFRoZSBoZWxwZXIgY2FuIHNlbmQgbXVsdGlwbGUgYWN0aW9u
cyBiYXNlZCBvbiB1c2VyIGV2ZW50cy4KLQotICAgICAgICAgICAgICBUaGUgYWN0aW9uIHByb3Bl
cnR5IGRlZmluZXMgdGhlIGFjdGlvbiB3aGljaCBpcyBzZW5kIHdoZW4KLSAgICAgICAgICAgICAg
dGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleS4KLQotICAgICAgICAgICAgICBgYGBoYW5k
bGViYXJzCi0gICAgICAgICAgICAgIHt7aW5wdXQgYWN0aW9uPSJzdWJtaXQifX0KLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGhlbHBlciBhbGxvd3Mgc29tZSB1c2VyIGV2
ZW50cyB0byBzZW5kIGFjdGlvbnMuCi0KLSAgICAgICAgICAgICogYGVudGVyYAotICAgICAgICAg
ICAgKiBgaW5zZXJ0LW5ld2xpbmVgCi0gICAgICAgICAgICAqIGBlc2NhcGUtcHJlc3NgCi0gICAg
ICAgICAgICAqIGBmb2N1cy1pbmAKLSAgICAgICAgICAgICogYGZvY3VzLW91dGAKLSAgICAgICAg
ICAgICogYGtleS1wcmVzc2AKLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRl
c2lyZSBhbiBhY3Rpb24gdG8gYmUgc2VudCB3aGVuIHRoZSBpbnB1dCBpcyBibHVycmVkLAotICAg
ICAgICAgICAgICB5b3Ugb25seSBuZWVkIHRvIHNldHVwIHRoZSBhY3Rpb24gbmFtZSB0byB0aGUg
ZXZlbnQgbmFtZSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIHt7aW5wdXQgZm9jdXMtaW49ImFsZXJ0TWVzc2FnZSJ9fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBTZWUgbW9yZSBhYm91dCBbVGV4dCBTdXBwb3J0IEFjdGlv
bnNdKGFwaS9jbGFzc2VzL0VtYmVyLlRleHRGaWVsZC5odG1sKQotCi0gICAgICAgICAgICAgICMj
IEV4dGVuc2lvbgotCi0gICAgICAgICAgICAgIEludGVybmFsbHksIGB7e2lucHV0IHR5cGU9InRl
eHQifX1gIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYEVtYmVyLlRleHRGaWVsZGAsIHBhc3NpbmcK
LSAgICAgICAgICAgICAgYXJndW1lbnRzIGZyb20gdGhlIGhlbHBlciB0byBgRW1iZXIuVGV4dEZp
ZWxkYCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNhbiBleHRlbmQgdGhlCi0gICAgICAgICAgICAg
IGNhcGFiaWxpdGllcyBvZiB0ZXh0IGlucHV0cyBpbiB5b3VyIGFwcGxpY2F0aW9ucyBieSByZW9w
ZW5pbmcgdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgIGlmIHlvdSBhcmUg
YnVpbGRpbmcgYSBCb290c3RyYXAgcHJvamVjdCB3aGVyZSBgZGF0YS0qYCBhdHRyaWJ1dGVzIGFy
ZSB1c2VkLCB5b3UKLSAgICAgICAgICAgICAgY2FuIGFkZCBvbmUgdG8gdGhlIGBUZXh0RmllbGRg
J3MgYGF0dHJpYnV0ZUJpbmRpbmdzYCBwcm9wZXJ0eToKLQotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuVGV4dEZpZWxkLnJlb3Blbih7Ci0gICAgICAg
ICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnZGF0YS1lcnJvciddCi0gICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBLZWVwIGluIG1pbmQgd2hl
biB3cml0aW5nIGBFbWJlci5UZXh0RmllbGRgIHN1YmNsYXNzZXMgdGhhdCBgRW1iZXIuVGV4dEZp
ZWxkYAotICAgICAgICAgICAgICBpdHNlbGYgZXh0ZW5kcyBgRW1iZXIuQ29tcG9uZW50YCwgbWVh
bmluZyB0aGF0IGl0IGRvZXMgTk9UIGluaGVyaXQKLSAgICAgICAgICAgICAgdGhlIGBjb250cm9s
bGVyYCBvZiB0aGUgcGFyZW50IHZpZXcuCi0KLSAgICAgICAgICAgICAgU2VlIG1vcmUgYWJvdXQg
W0VtYmVyIGNvbXBvbmVudHNdKGFwaS9jbGFzc2VzL0VtYmVyLkNvbXBvbmVudC5odG1sKQotCi0K
LSAgICAgICAgICAgICAgIyMgVXNlIGFzIGNoZWNrYm94Ci0KLSAgICAgICAgICAgICAgQW4gYHt7
aW5wdXR9fWAgd2l0aCBhIGB0eXBlYCBvZiBgY2hlY2tib3hgIHdpbGwgcmVuZGVyIGFuIEhUTUwg
Y2hlY2tib3ggaW5wdXQuCi0gICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgSFRNTCBhdHRyaWJ1
dGVzIGNhbiBiZSBzZXQgdmlhIHRoZSBoZWxwZXI6Ci0KLSAgICAgICAgICAgICogYGNoZWNrZWRg
Ci0gICAgICAgICAgICAqIGBkaXNhYmxlZGAKLSAgICAgICAgICAgICogYHRhYmluZGV4YAotICAg
ICAgICAgICAgKiBgaW5kZXRlcm1pbmF0ZWAKLSAgICAgICAgICAgICogYG5hbWVgCi0gICAgICAg
ICAgICAqIGBhdXRvZm9jdXNgCi0gICAgICAgICAgICAqIGBmb3JtYAotCi0KLSAgICAgICAgICAg
ICAgV2hlbiBzZXQgdG8gYSBxdW90ZWQgc3RyaW5nLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBkaXJl
Y3RseSBhcHBsaWVkIHRvIHRoZSBIVE1MCi0gICAgICAgICAgICAgIGVsZW1lbnQuIFdoZW4gbGVm
dCB1bnF1b3RlZCwgdGhlc2UgdmFsdWVzIHdpbGwgYmUgYm91bmQgdG8gYSBwcm9wZXJ0eSBvbiB0
aGUKLSAgICAgICAgICAgICAgdGVtcGxhdGUncyBjdXJyZW50IHJlbmRlcmluZyBjb250ZXh0ICht
b3N0IHR5cGljYWxseSBhIGNvbnRyb2xsZXIgaW5zdGFuY2UpLgotCi0gICAgICAgICAgICAgICMj
IFVuYm91bmQ6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7
e2lucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpc0FkbWluIn19Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNo
ZWNrYm94IiBuYW1lPSJpc0FkbWluIiAvPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAjIyBCb3VuZDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgaXNBZG1pbjogdHJ1ZQotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIHt7aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ9aXNBZG1pbiB9fQotICAgICAgICAg
ICAgICBgYGAKLQotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGlucHV0
IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPSJjaGVja2VkIiAvPgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAjIyBFeHRlbnNpb24KLQotICAgICAgICAgICAgICBJbnRlcm5hbGx5
LCBge3tpbnB1dCB0eXBlPSJjaGVja2JveCJ9fWAgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgRW1i
ZXIuQ2hlY2tib3hgLCBwYXNzaW5nCi0gICAgICAgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBo
ZWxwZXIgdG8gYEVtYmVyLkNoZWNrYm94YCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNhbiBleHRl
bmQgdGhlCi0gICAgICAgICAgICAgIGNhcGFibGlsdGllcyBvZiBjaGVja2JveCBpbnB1dHMgaW4g
eW91ciBhcHBsaWNhdGlvbnMgYnkgcmVvcGVuaW5nIHRoaXMgY2xhc3MuIEZvciBleGFtcGxlLAot
ICAgICAgICAgICAgICBpZiB5b3Ugd2FudGVkIHRvIGFkZCBhIGNzcyBjbGFzcyB0byBhbGwgY2hl
Y2tib3hlcyBpbiB5b3VyIGFwcGxpY2F0aW9uOgotCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICBFbWJlci5DaGVja2JveC5yZW9wZW4oewotICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZXM6IFsnbXktYXBwLWNoZWNrYm94J10KLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBpbnB1dAotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFy
YW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGlucHV0
SGVscGVyKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnWW91IGNhbiBvbmx5
IHBhc3MgYXR0cmlidXRlcyB0byB0aGUgYGlucHV0YCBoZWxwZXIsIG5vdCBhcmd1bWVudHMnLCBh
cmd1bWVudHMubGVuZ3RoIDwgMik7Ci0KLSAgICAgICAgICAgIHZhciBoYXNoID0gb3B0aW9ucy5o
YXNoLAotICAgICAgICAgICAgdHlwZXMgPSBvcHRpb25zLmhhc2hUeXBlcywKLSAgICAgICAgICAg
IGlucHV0VHlwZSA9IGhhc2gudHlwZSwKLSAgICAgICAgICAgIG9uRXZlbnQgPSBoYXNoLm9uOwot
Ci0gICAgICAgICAgICBkZWxldGUgaGFzaC50eXBlOwotICAgICAgICAgICAgZGVsZXRlIGhhc2gu
b247Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dFR5cGUgPT09ICdjaGVja2JveCcpIHsKLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoInt7aW5wdXQgdHlwZT0nY2hlY2tib3gnfX0gZG9lcyBu
b3Qgc3VwcG9ydCBzZXR0aW5nIGB2YWx1ZT1zb21lQm9vbGVhblZhbHVlYDsgeW91IG11c3QgdXNl
IGBjaGVja2VkPXNvbWVCb29sZWFuVmFsdWVgIGluc3RlYWQuIiwgb3B0aW9ucy5oYXNoVHlwZXMu
dmFsdWUgIT09ICdJRCcpOwotICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLnZpZXcuY2Fs
bCh0aGlzLCBDaGVja2JveCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChpbnB1dFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzaC50eXBl
ID0gaW5wdXRUeXBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBoYXNoLm9u
RXZlbnQgPSBvbkV2ZW50IHx8ICdlbnRlcic7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBl
cnMudmlldy5jYWxsKHRoaXMsIFRleHRGaWVsZCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5pbnB1dEhlbHBlciA9IGlucHV0SGVscGVy
OyAvKioKLSAgICAgICAgICAgICAgYHt7dGV4dGFyZWF9fWAgaW5zZXJ0cyBhIG5ldyBpbnN0YW5j
ZSBvZiBgPHRleHRhcmVhPmAgdGFnIGludG8gdGhlIHRlbXBsYXRlLgotICAgICAgICAgICAgICBU
aGUgYXR0cmlidXRlcyBvZiBge3t0ZXh0YXJlYX19YCBtYXRjaCB0aG9zZSBvZiB0aGUgbmF0aXZl
IEhUTUwgdGFncyBhcwotICAgICAgICAgICAgICBjbG9zZWx5IGFzIHBvc3NpYmxlLgotCi0gICAg
ICAgICAgICAgIFRoZSBmb2xsb3dpbmcgSFRNTCBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQ6Ci0KLSAg
ICAgICAgICAgICAgICAqIGB2YWx1ZWAKLSAgICAgICAgICAgICAgICAqIGBuYW1lYAotICAgICAg
ICAgICAgICAgICogYHJvd3NgCi0gICAgICAgICAgICAgICAgKiBgY29sc2AKLSAgICAgICAgICAg
ICAgICAqIGBwbGFjZWhvbGRlcmAKLSAgICAgICAgICAgICAgICAqIGBkaXNhYmxlZGAKLSAgICAg
ICAgICAgICAgICAqIGBtYXhsZW5ndGhgCi0gICAgICAgICAgICAgICAgKiBgdGFiaW5kZXhgCi0g
ICAgICAgICAgICAgICAgKiBgc2VsZWN0aW9uRW5kYAotICAgICAgICAgICAgICAgICogYHNlbGVj
dGlvblN0YXJ0YAotICAgICAgICAgICAgICAgICogYHNlbGVjdGlvbkRpcmVjdGlvbmAKLSAgICAg
ICAgICAgICAgICAqIGB3cmFwYAotICAgICAgICAgICAgICAgICogYHJlYWRvbmx5YAotICAgICAg
ICAgICAgICAgICogYGF1dG9mb2N1c2AKLSAgICAgICAgICAgICAgICAqIGBmb3JtYAotICAgICAg
ICAgICAgICAgICogYHNwZWxsY2hlY2tgCi0gICAgICAgICAgICAgICAgKiBgcmVxdWlyZWRgCi0K
LSAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gYSBxdW90ZWQgc3RyaW5nLCB0aGVzZSB2YWx1ZSB3
aWxsIGJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gdGhlIEhUTUwKLSAgICAgICAgICAgICAgZWxlbWVu
dC4gV2hlbiBsZWZ0IHVucXVvdGVkLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBib3VuZCB0byBhIHBy
b3BlcnR5IG9uIHRoZQotICAgICAgICAgICAgICB0ZW1wbGF0ZSdzIGN1cnJlbnQgcmVuZGVyaW5n
IGNvbnRleHQgKG1vc3QgdHlwaWNhbGx5IGEgY29udHJvbGxlciBpbnN0YW5jZSkuCi0KLSAgICAg
ICAgICAgICAgVW5ib3VuZDoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7dGV4dGFyZWEgdmFsdWU9IkxvdHMgb2Ygc3RhdGljIHRleHQgdGhhdCBJU04nVCBi
b3VuZCJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXb3VsZCByZXN1bHQg
aW4gdGhlIGZvbGxvd2luZyBIVE1MOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAg
ICAgICAgPHRleHRhcmVhIGNsYXNzPSJlbWJlci10ZXh0LWFyZWEiPgotICAgICAgICAgICAgICAg
IExvdHMgb2Ygc3RhdGljIHRleHQgdGhhdCBJU04nVCBib3VuZAotICAgICAgICAgICAgICA8L3Rl
eHRhcmVhPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBCb3VuZDoKLQotICAg
ICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBgd3JpdHRlbldvcmRzYCBw
cm9wZXJ0eSBvbiBgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlcmAKLSAgICAgICAgICAgICAgd2ls
bCBiZSB1cGRhdGVkIGxpdmUgYXMgdGhlIHVzZXIgdHlwZXMgJ0xvdHMgb2YgdGV4dCB0aGF0IElT
IGJvdW5kJyBpbnRvCi0gICAgICAgICAgICAgIHRoZSB0ZXh0IGFyZWEgb2YgdGhlaXIgYnJvd3Nl
cidzIHdpbmRvdy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0g
ICAgICAgICAgICAgICAgd3JpdHRlbldvcmRzOiAiTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQi
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dGV4dGFyZWEgdmFsdWU9d3JpdHRlbldvcmRz
fX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIFdvdWxkIHJlc3VsdCBpbiB0
aGUgZm9sbG93aW5nIEhUTUw6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAg
ICA8dGV4dGFyZWEgY2xhc3M9ImVtYmVyLXRleHQtYXJlYSI+Ci0gICAgICAgICAgICAgICAgTG90
cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQKLSAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91IHdhbnRlZCBhIG9uZSB3YXkgYmlu
ZGluZyBiZXR3ZWVuIHRoZSB0ZXh0IGFyZWEgYW5kIGEgZGl2IHRhZwotICAgICAgICAgICAgICBz
b21ld2hlcmUgZWxzZSBvbiB5b3VyIHNjcmVlbiwgeW91IGNvdWxkIHVzZSBgRW1iZXIuY29tcHV0
ZWQub25lV2F5YDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0g
ICAgICAgICAgICAgICAgd3JpdHRlbldvcmRzOiAiTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQi
LAotICAgICAgICAgICAgICAgIG91dHB1dFdyaXR0ZW5Xb3JkczogRW1iZXIuY29tcHV0ZWQub25l
V2F5KCJ3cml0dGVuV29yZHMiKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3RleHRhcmVh
IHZhbHVlPXdyaXR0ZW5Xb3Jkc319Ci0KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAg
ICAgICB7e291dHB1dFdyaXR0ZW5Xb3Jkc319Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXb3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2lu
ZyBIVE1MOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHRleHRhcmVh
IGNsYXNzPSJlbWJlci10ZXh0LWFyZWEiPgotICAgICAgICAgICAgICAgIExvdHMgb2YgdGV4dCB0
aGF0IElTIGJvdW5kCi0gICAgICAgICAgICAgIDwvdGV4dGFyZWE+Ci0KLSAgICAgICAgICAgICAg
PC0tIHRoZSBmb2xsb3dpbmcgZGl2IHdpbGwgYmUgdXBkYXRlZCBpbiByZWFsIHRpbWUgYXMgeW91
IHR5cGUgLS0+Ci0KLSAgICAgICAgICAgICAgPGRpdj4KLSAgICAgICAgICAgICAgICBMb3RzIG9m
IHRleHQgdGhhdCBJUyBib3VuZAotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgRmluYWxseSwgdGhpcyBleGFtcGxlIHJlYWxseSBzaG93cyB0
aGUgcG93ZXIgYW5kIGVhc2Ugb2YgRW1iZXIgd2hlbiB0d28KLSAgICAgICAgICAgICAgcHJvcGVy
dGllcyBhcmUgYm91bmQgdG8gZWFjaG90aGVyIHZpYSBgRW1iZXIuY29tcHV0ZWQuYWxpYXNgLiBU
eXBlIGludG8KLSAgICAgICAgICAgICAgZWl0aGVyIHRleHQgYXJlYSBib3ggYW5kIHRoZXknbGwg
Ym90aCBzdGF5IGluIHN5bmMuIE5vdGUgdGhhdAotICAgICAgICAgICAgICBgRW1iZXIuY29tcHV0
ZWQuYWxpYXNgIGNvc3RzIG1vcmUgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNvIG9ubHkgdXNl
IGl0IHdoZW4KLSAgICAgICAgICAgICAgeW91ciByZWFsbHkgYmluZGluZyBpbiBib3RoIGRpcmVj
dGlvbnM6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAu
QXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAg
ICAgICAgICAgIHdyaXR0ZW5Xb3JkczogIkxvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kIiwKLSAg
ICAgICAgICAgICAgICB0d29XYXlXcml0dGVuV29yZHM6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCJ3
cml0dGVuV29yZHMiKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3RleHRhcmVhIHZhbHVl
PXdyaXR0ZW5Xb3Jkc319Ci0gICAgICAgICAgICAgIHt7dGV4dGFyZWEgdmFsdWU9dHdvV2F5V3Jp
dHRlbldvcmRzfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAot
ICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXRleHQtYXJl
YSI+Ci0gICAgICAgICAgICAgICAgTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQKLSAgICAgICAg
ICAgICAgPC90ZXh0YXJlYT4KLQotICAgICAgICAgICAgICA8LS0gYm90aCB1cGRhdGVkIGluIHJl
YWwgdGltZSAtLT4KLQotICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9ImVtYmVyMiIgY2xhc3M9
ImVtYmVyLXRleHQtYXJlYSI+Ci0gICAgICAgICAgICAgICAgTG90cyBvZiB0ZXh0IHRoYXQgSVMg
Ym91bmQKLSAgICAgICAgICAgICAgPC90ZXh0YXJlYT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgIyMgQWN0aW9ucwotCi0gICAgICAgICAgICAgIFRoZSBoZWxwZXIgY2FuIHNl
bmQgbXVsdGlwbGUgYWN0aW9ucyBiYXNlZCBvbiB1c2VyIGV2ZW50cy4KLQotICAgICAgICAgICAg
ICBUaGUgYWN0aW9uIHByb3BlcnR5IGRlZmluZXMgdGhlIGFjdGlvbiB3aGljaCBpcyBzZW5kIHdo
ZW4KLSAgICAgICAgICAgICAgdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleS4KLQotICAg
ICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7aW5wdXQgYWN0aW9uPSJz
dWJtaXQifX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGhlbHBlciBh
bGxvd3Mgc29tZSB1c2VyIGV2ZW50cyB0byBzZW5kIGFjdGlvbnMuCi0KLSAgICAgICAgICAgICog
YGVudGVyYAotICAgICAgICAgICAgKiBgaW5zZXJ0LW5ld2xpbmVgCi0gICAgICAgICAgICAqIGBl
c2NhcGUtcHJlc3NgCi0gICAgICAgICAgICAqIGBmb2N1cy1pbmAKLSAgICAgICAgICAgICogYGZv
Y3VzLW91dGAKLSAgICAgICAgICAgICogYGtleS1wcmVzc2AKLQotICAgICAgICAgICAgICBGb3Ig
ZXhhbXBsZSwgaWYgeW91IGRlc2lyZSBhbiBhY3Rpb24gdG8gYmUgc2VudCB3aGVuIHRoZSBpbnB1
dCBpcyBibHVycmVkLAotICAgICAgICAgICAgICB5b3Ugb25seSBuZWVkIHRvIHNldHVwIHRoZSBh
Y3Rpb24gbmFtZSB0byB0aGUgZXZlbnQgbmFtZSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dGV4dGFyZWEgZm9jdXMtaW49ImFsZXJ0TWVz
c2FnZSJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBTZWUgbW9yZSBhYm91
dCBbVGV4dCBTdXBwb3J0IEFjdGlvbnNdKGFwaS9jbGFzc2VzL0VtYmVyLlRleHRBcmVhLmh0bWwp
Ci0KLSAgICAgICAgICAgICAgIyMgRXh0ZW5zaW9uCi0KLSAgICAgICAgICAgICAgSW50ZXJuYWxs
eSwgYHt7dGV4dGFyZWF9fWAgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuVGV4dEFyZWFg
LCBwYXNzaW5nCi0gICAgICAgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBoZWxwZXIgdG8gYEVt
YmVyLlRleHRBcmVhYCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNhbgotICAgICAgICAgICAgICBl
eHRlbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0ZXh0IGFyZWFzIGluIHlvdXIgYXBwbGljYXRpb24g
YnkgcmVvcGVuaW5nIHRoaXMKLSAgICAgICAgICAgICAgY2xhc3MuIEZvciBleGFtcGxlLCBpZiB5
b3UgYXJlIGJ1aWxkaW5nIGEgQm9vdHN0cmFwIHByb2plY3Qgd2hlcmUgYGRhdGEtKmAgCi0gICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMgYXJlIHVzZWQsIHlvdSBjYW4gZ2xvYmFsbHkgYWRkIHN1cHBv
cnQgZm9yIGEgYGRhdGEtKmAgYXR0cmlidXRlCi0gICAgICAgICAgICAgIG9uIGFsbCBge3t0ZXh0
YXJlYX19YHMnIGluIHlvdXIgYXBwIGJ5IHJlb3BlbmluZyBgRW1iZXIuVGV4dEFyZWFgIG9yCi0g
ICAgICAgICAgICAgIGBFbWJlci5UZXh0U3VwcG9ydGAgYW5kIGFkZGluZyBpdCB0byB0aGUgYGF0
dHJpYnV0ZUJpbmRpbmdzYCBjb25jYXRlbmF0ZWQKLSAgICAgICAgICAgICAgcHJvcGVydHk6Ci0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5UZXh0QXJl
YS5yZW9wZW4oewotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2RhdGEtZXJy
b3InXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgS2VlcCBpbiBtaW5kIHdoZW4gd3JpdGluZyBgRW1iZXIuVGV4dEFyZWFgIHN1YmNsYXNzZXMg
dGhhdCBgRW1iZXIuVGV4dEFyZWFgCi0gICAgICAgICAgICAgIGl0c2VsZiBleHRlbmRzIGBFbWJl
ci5Db21wb25lbnRgLCBtZWFuaW5nIHRoYXQgaXQgZG9lcyBOT1QgaW5oZXJpdAotICAgICAgICAg
ICAgICB0aGUgYGNvbnRyb2xsZXJgIG9mIHRoZSBwYXJlbnQgdmlldy4KLQotICAgICAgICAgICAg
ICBTZWUgbW9yZSBhYm91dCBbRW1iZXIgY29tcG9uZW50c10oYXBpL2NsYXNzZXMvRW1iZXIuQ29t
cG9uZW50Lmh0bWwpCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCB0ZXh0YXJlYQotICAgICAgICAg
ICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0g
e0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHRleHRhcmVh
SGVscGVyKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnWW91IGNhbiBvbmx5
IHBhc3MgYXR0cmlidXRlcyB0byB0aGUgYHRleHRhcmVhYCBoZWxwZXIsIG5vdCBhcmd1bWVudHMn
LCBhcmd1bWVudHMubGVuZ3RoIDwgMik7Ci0KLSAgICAgICAgICAgIHZhciBoYXNoID0gb3B0aW9u
cy5oYXNoLAotICAgICAgICAgICAgdHlwZXMgPSBvcHRpb25zLmhhc2hUeXBlczsKLQotICAgICAg
ICAgICAgcmV0dXJuIGhlbHBlcnMudmlldy5jYWxsKHRoaXMsIFRleHRBcmVhLCBvcHRpb25zKTsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnRleHRhcmVhSGVscGVyID0gdGV4dGFy
ZWFIZWxwZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2NvbnRyb2xz
L2NoZWNrYm94IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIg
Z2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5j
eTJfXy5zZXQ7Ci0gICAgICAgIHZhciBWaWV3ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBA
c3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIFRoZSBpbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGNyZWF0ZSB0ZXh0IGlu
cHV0cyB3aGVuIHRoZSBge3tpbnB1dH19YAotICAgICAgICAgICAgICBoZWxwZXIgaXMgdXNlZCB3
aXRoIGB0eXBlYCBvZiBgY2hlY2tib3hgLgotCi0gICAgICAgICAgICAgIFNlZSBbaGFuZGxlYmFy
cy5oZWxwZXJzLmlucHV0XSgvYXBpL2NsYXNzZXMvRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0
bWwjbWV0aG9kX2lucHV0KSAgZm9yIHVzYWdlIGRldGFpbHMuCi0KLSAgICAgICAgICAgICAgIyMg
RGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBgY2hlY2tlZGAKLQotICAgICAgICAgICAgICBUaGUgYGNo
ZWNrZWRgIGF0dHJpYnV0ZSBvZiBhbiBgRW1iZXIuQ2hlY2tib3hgIG9iamVjdCBzaG91bGQgYWx3
YXlzIGJlIHNldAotICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBFbWJlciBvYmplY3Qgb3IgYnkg
aW50ZXJhY3Rpbmcgd2l0aCBpdHMgcmVuZGVyZWQgZWxlbWVudAotICAgICAgICAgICAgICByZXBy
ZXNlbnRhdGlvbiB2aWEgdGhlIG1vdXNlLCBrZXlib2FyZCwgb3IgdG91Y2guIFVwZGF0aW5nIHRo
ZSB2YWx1ZSBvZiB0aGUKLSAgICAgICAgICAgICAgY2hlY2tib3ggdmlhIGpRdWVyeSB3aWxsIHJl
c3VsdCBpbiB0aGUgY2hlY2tlZCB2YWx1ZSBvZiB0aGUgb2JqZWN0IGFuZCBpdHMKLSAgICAgICAg
ICAgICAgZWxlbWVudCBsb3Npbmcgc3luY2hyb25pemF0aW9uLgotCi0gICAgICAgICAgICAgICMj
IExheW91dCBhbmQgTGF5b3V0TmFtZSBwcm9wZXJ0aWVzCi0KLSAgICAgICAgICAgICAgQmVjYXVz
ZSBIVE1MIGBpbnB1dGAgZWxlbWVudHMgYXJlIHNlbGYgY2xvc2luZyBgbGF5b3V0YCBhbmQgYGxh
eW91dE5hbWVgCi0gICAgICAgICAgICAgIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgYXBwbGllZC4g
U2VlIFtFbWJlci5WaWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIuVmlldy5odG1sKSdzCi0gICAgICAg
ICAgICAgIGxheW91dCBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAg
ICAgIEBjbGFzcyBDaGVja2JveAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAg
ICAgICAgICAgIEBleHRlbmRzIEVtYmVyLlZpZXcKLSAgICAgICAgICAgICovCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBWaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICBpbnN0cnVt
ZW50RGlzcGxheTogJ3t7aW5wdXQgdHlwZT0iY2hlY2tib3gifX0nLAotCi0gICAgICAgICAgICBj
bGFzc05hbWVzOiBbJ2VtYmVyLWNoZWNrYm94J10sCi0KLSAgICAgICAgICAgIHRhZ05hbWU6ICdp
bnB1dCcsCi0KLSAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbCi0gICAgICAgICAgICAn
dHlwZScsCi0gICAgICAgICAgICAnY2hlY2tlZCcsCi0gICAgICAgICAgICAnaW5kZXRlcm1pbmF0
ZScsCi0gICAgICAgICAgICAnZGlzYWJsZWQnLAotICAgICAgICAgICAgJ3RhYmluZGV4JywKLSAg
ICAgICAgICAgICduYW1lJywKLSAgICAgICAgICAgICdhdXRvZm9jdXMnLAotICAgICAgICAgICAg
J3JlcXVpcmVkJywKLSAgICAgICAgICAgICdmb3JtJwotICAgICAgICAgICAgXSwKLQotICAgICAg
ICAgICAgdHlwZTogJ2NoZWNrYm94JywKLSAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLAotICAg
ICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLAotICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogZmFs
c2UsCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRo
aXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbignY2hhbmdlJywgdGhpcywgdGhp
cy5fdXBkYXRlRWxlbWVudFZhbHVlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRp
ZEluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVy
KCk7Ci0gICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdlbGVtZW50JykuaW5kZXRlcm1pbmF0ZSA9
ICEhZ2V0KHRoaXMsICdpbmRldGVybWluYXRlJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBfdXBkYXRlRWxlbWVudFZhbHVlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBz
ZXQodGhpcywgJ2NoZWNrZWQnLCB0aGlzLiQoKS5wcm9wKCdjaGVja2VkJykpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMv
Y29udHJvbHMvc2VsZWN0IiwKLSAgICBbImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAiZW1i
ZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXciLCAiZW1i
ZXItdmlld3Mvdmlld3MvY29sbGVjdGlvbl92aWV3IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVt
YmVyLW1ldGFsL2lzX25vbmUiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbmF0aXZlX2FycmF5IiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFs
L3Byb3BlcnRpZXMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBl
bmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5
OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18s
IF9fZGVwZW5kZW5jeTEyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVt
YmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZh
ciBmb3JFYWNoID0gX19kZXBlbmRlbmN5Ml9fLmZvckVhY2g7Ci0gICAgICAgIHZhciBpbmRleE9m
ID0gX19kZXBlbmRlbmN5Ml9fLmluZGV4T2Y7Ci0gICAgICAgIHZhciBpbmRleGVzT2YgPSBfX2Rl
cGVuZGVuY3kyX18uaW5kZXhlc09mOwotICAgICAgICB2YXIgcmVwbGFjZSA9IF9fZGVwZW5kZW5j
eTJfXy5yZXBsYWNlOwotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kzX18uZ2V0Owot
ICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5NF9fLnNldDsKLSAgICAgICAgdmFyIFZpZXcg
PSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIENvbGxlY3Rpb25WaWV3
ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX19k
ZXBlbmRlbmN5N19fLmlzQXJyYXk7Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k4
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5OV9fLmNv
bXB1dGVkOwotICAgICAgICB2YXIgZW1iZXJBID0gX19kZXBlbmRlbmN5MTBfXy5BOwotICAgICAg
ICB2YXIgb2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMV9fLm9ic2VydmVyOwotICAgICAgICB2YXIg
ZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3kxMl9fLmRlZmluZVByb3BlcnR5OwotCi0gICAg
ICAgIHZhciBwcmVjb21waWxlVGVtcGxhdGUgPSBFbWJlckhhbmRsZWJhcnMuY29tcGlsZTsKLQot
ICAgICAgICB2YXIgU2VsZWN0T3B0aW9uID0gVmlldy5leHRlbmQoewotICAgICAgICAgICAgaW5z
dHJ1bWVudERpc3BsYXk6ICdFbWJlci5TZWxlY3RPcHRpb24nLAotCi0gICAgICAgICAgICB0YWdO
YW1lOiAnb3B0aW9uJywKLSAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ3ZhbHVlJywg
J3NlbGVjdGVkJ10sCi0KLSAgICAgICAgICAgIGRlZmF1bHRUZW1wbGF0ZTogZnVuY3Rpb24oY29u
dGV4dCwgb3B0aW9ucykgewotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGE6IG9wdGlvbnMuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgaGFzaDog
e30KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIEVtYmVySGFuZGxlYmFycy5o
ZWxwZXJzLmJpbmQuY2FsbChjb250ZXh0LCAidmlldy5sYWJlbCIsIG9wdGlvbnMpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5sYWJlbFBhdGhEaWRDaGFuZ2UoKTsKLSAgICAgICAgICAgICAgICB0aGlzLnZhbHVl
UGF0aERpZENoYW5nZSgpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNlbGVjdGVkOiBjb21wdXRlZChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcpLAotICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGdldCh0aGlzLCAncGFyZW50Vmlldy5zZWxlY3Rpb24n
KTsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdwYXJlbnRWaWV3Lm11bHRpcGxlJykp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbiAmJiBpbmRleE9mKHNlbGVj
dGlvbiwgY29udGVudC52YWx1ZU9mKCkpID4gLTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlcyBnZXQgcGFzc2VkIHRocm91Z2ggYmlu
ZGluZ3MgYXMgb2JqZWN0cy4uLiBzaW5jZQotICAgICAgICAgICAgICAgICAgICAvLyBgbmV3IE51
bWJlcig0KSAhPT0gNGAsIHdlIHVzZSBgPT1gIGJlbG93Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb250ZW50ID09IHNlbGVjdGlvbjsgLy8ganNoaW50IGlnbm9yZTpsaW5lCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSkucHJvcGVydHkoJ2NvbnRlbnQnLCAncGFyZW50Vmll
dy5zZWxlY3Rpb24nKSwKLQotICAgICAgICAgICAgbGFiZWxQYXRoRGlkQ2hhbmdlOiBvYnNlcnZl
cigncGFyZW50Vmlldy5vcHRpb25MYWJlbFBhdGgnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgbGFiZWxQYXRoID0gZ2V0KHRoaXMsICdwYXJlbnRWaWV3Lm9wdGlvbkxhYmVsUGF0
aCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFsYWJlbFBhdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlZmlu
ZVByb3BlcnR5KHRoaXMsICdsYWJlbCcsIGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGxhYmVsUGF0aCk7Ci0gICAgICAgICAgICAgICAg
fSkucHJvcGVydHkobGFiZWxQYXRoKSk7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAg
dmFsdWVQYXRoRGlkQ2hhbmdlOiBvYnNlcnZlcigncGFyZW50Vmlldy5vcHRpb25WYWx1ZVBhdGgn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWVQYXRoID0gZ2V0KHRoaXMs
ICdwYXJlbnRWaWV3Lm9wdGlvblZhbHVlUGF0aCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2
YWx1ZVBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICd2YWx1ZScsIGNvbXB1
dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHZh
bHVlUGF0aCk7Ci0gICAgICAgICAgICAgICAgfSkucHJvcGVydHkodmFsdWVQYXRoKSk7Ci0gICAg
ICAgICAgICB9KQotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgU2VsZWN0T3B0Z3JvdXAgPSBD
b2xsZWN0aW9uVmlldy5leHRlbmQoewotICAgICAgICAgICAgaW5zdHJ1bWVudERpc3BsYXk6ICdF
bWJlci5TZWxlY3RPcHRncm91cCcsCi0KLSAgICAgICAgICAgIHRhZ05hbWU6ICdvcHRncm91cCcs
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydsYWJlbCddLAotCi0gICAgICAgICAg
ICBzZWxlY3Rpb25CaW5kaW5nOiAncGFyZW50Vmlldy5zZWxlY3Rpb24nLAotICAgICAgICAgICAg
bXVsdGlwbGVCaW5kaW5nOiAncGFyZW50Vmlldy5tdWx0aXBsZScsCi0gICAgICAgICAgICBvcHRp
b25MYWJlbFBhdGhCaW5kaW5nOiAncGFyZW50Vmlldy5vcHRpb25MYWJlbFBhdGgnLAotICAgICAg
ICAgICAgb3B0aW9uVmFsdWVQYXRoQmluZGluZzogJ3BhcmVudFZpZXcub3B0aW9uVmFsdWVQYXRo
JywKLQotICAgICAgICAgICAgaXRlbVZpZXdDbGFzc0JpbmRpbmc6ICdwYXJlbnRWaWV3Lm9wdGlv
blZpZXcnCi0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGUgYEVt
YmVyLlNlbGVjdGAgdmlldyBjbGFzcyByZW5kZXJzIGEKLSAgICAgICAgICAgICAgW3NlbGVjdF0o
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSFRNTC9FbGVtZW50L3NlbGVjdCkgSFRN
TCBlbGVtZW50LAotICAgICAgICAgICAgICBhbGxvd2luZyB0aGUgdXNlciB0byBjaG9vc2UgZnJv
bSBhIGxpc3Qgb2Ygb3B0aW9ucy4KLQotICAgICAgICAgICAgICBUaGUgdGV4dCBhbmQgYHZhbHVl
YCBwcm9wZXJ0eSBvZiBlYWNoIGA8b3B0aW9uPmAgZWxlbWVudCB3aXRoaW4gdGhlCi0gICAgICAg
ICAgICAgIGA8c2VsZWN0PmAgZWxlbWVudCBhcmUgcG9wdWxhdGVkIGZyb20gdGhlIG9iamVjdHMg
aW4gdGhlIGBFbGVtZW50LlNlbGVjdGAncwotICAgICAgICAgICAgICBgY29udGVudGAgcHJvcGVy
dHkuIFRoZSB1bmRlcmx5aW5nIGRhdGEgb2JqZWN0IG9mIHRoZSBzZWxlY3RlZCBgPG9wdGlvbj5g
IGlzCi0gICAgICAgICAgICAgIHN0b3JlZCBpbiB0aGUgYEVsZW1lbnQuU2VsZWN0YCdzIGB2YWx1
ZWAgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgIyMgVGhlIENvbnRlbnQgUHJvcGVydHkgKGFy
cmF5IG9mIHN0cmluZ3MpCi0KLSAgICAgICAgICAgICAgVGhlIHNpbXBsZXN0IHZlcnNpb24gb2Yg
YW4gYEVtYmVyLlNlbGVjdGAgdGFrZXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhcyBpdHMKLSAgICAg
ICAgICAgICAgYGNvbnRlbnRgIHByb3BlcnR5LiBUaGUgc3RyaW5nIHdpbGwgYmUgdXNlZCBhcyBi
b3RoIHRoZSBgdmFsdWVgIHByb3BlcnR5IGFuZAotICAgICAgICAgICAgICB0aGUgaW5uZXIgdGV4
dCBvZiBlYWNoIGA8b3B0aW9uPmAgZWxlbWVudCBpbnNpZGUgdGhlIHJlbmRlcmVkIGA8c2VsZWN0
PmAuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5PYmpl
Y3RDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgbmFtZXM6IFsiWWVodWRhIiwg
IlRvbSJdCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QgY29u
dGVudD1uYW1lc319Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdvdWxkIHJl
c3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAg
ICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJlbWJlci1zZWxlY3QiPgotICAgICAgICAgICAgICAg
IDxvcHRpb24gdmFsdWU9IlllaHVkYSI+WWVodWRhPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAg
PG9wdGlvbiB2YWx1ZT0iVG9tIj5Ub208L29wdGlvbj4KLSAgICAgICAgICAgICAgPC9zZWxlY3Q+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB3aGlj
aCBgPG9wdGlvbj5gIGlzIHNlbGVjdGVkIHRocm91Z2ggdGhlIGBFbWJlci5TZWxlY3RgJ3MKLSAg
ICAgICAgICAgICAgYHZhbHVlYCBwcm9wZXJ0eToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5PYmpl
Y3RDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWROYW1lOiAnVG9t
JywKLSAgICAgICAgICAgICAgICBuYW1lczogWyJZZWh1ZGEiLCAiVG9tIl0KLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAg
Y29udGVudD1uYW1lcwotICAgICAgICAgICAgICAgICAgICAgdmFsdWU9c2VsZWN0ZWROYW1lCi0g
ICAgICAgICAgICAgIH19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdvdWxk
IHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwgd2l0aCB0aGUgYDxvcHRpb24+YCBmb3IgJ1Rv
bScgc2VsZWN0ZWQ6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8c2Vs
ZWN0IGNsYXNzPSJlbWJlci1zZWxlY3QiPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9
IlllaHVkYSI+WWVodWRhPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0i
VG9tIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlRvbTwvb3B0aW9uPgotICAgICAgICAgICAgICA8L3Nl
bGVjdD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQSB1c2VyIGludGVyYWN0
aW5nIHdpdGggdGhlIHJlbmRlcmVkIGA8c2VsZWN0PmAgdG8gY2hvb3NlICJZZWh1ZGEiIHdvdWxk
Ci0gICAgICAgICAgICAgIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYHNlbGVjdGVkTmFtZWAgdG8gIlll
aHVkYSIuCi0KLSAgICAgICAgICAgICAgIyMgVGhlIENvbnRlbnQgUHJvcGVydHkgKGFycmF5IG9m
IE9iamVjdHMpCi0KLSAgICAgICAgICAgICAgQW4gYEVtYmVyLlNlbGVjdGAgY2FuIGFsc28gdGFr
ZSBhbiBhcnJheSBvZiBKYXZhU2NyaXB0IG9yIEVtYmVyIG9iamVjdHMgYXMKLSAgICAgICAgICAg
ICAgaXRzIGBjb250ZW50YCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBXaGVuIHVzaW5nIG9i
amVjdHMgeW91IG5lZWQgdG8gdGVsbCB0aGUgYEVtYmVyLlNlbGVjdGAgd2hpY2ggcHJvcGVydHkg
c2hvdWxkCi0gICAgICAgICAgICAgIGJlIGFjY2Vzc2VkIG9uIGVhY2ggb2JqZWN0IHRvIHN1cHBs
eSB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUgb2YgdGhlIGA8b3B0aW9uPmAKLSAgICAgICAgICAgICAg
YW5kIHdoaWNoIHByb3BlcnR5IHNob3VsZCBiZSB1c2VkIHRvIHN1cHBseSB0aGUgZWxlbWVudCB0
ZXh0LgotCi0gICAgICAgICAgICAgIFRoZSBgb3B0aW9uVmFsdWVQYXRoYCBvcHRpb24gaXMgdXNl
ZCB0byBzcGVjaWZ5IHRoZSBwYXRoIG9uIGVhY2ggb2JqZWN0IHRvCi0gICAgICAgICAgICAgIHRo
ZSBkZXNpcmVkIHByb3BlcnR5IGZvciB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUuIFRoZSBgb3B0aW9u
TGFiZWxQYXRoYAotICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHBhdGggb24gZWFjaCBvYmpl
Y3QgdG8gdGhlIGRlc2lyZWQgcHJvcGVydHkgZm9yIHRoZQotICAgICAgICAgICAgICBlbGVtZW50
J3MgdGV4dC4gQm90aCBwYXRocyBtdXN0IHJlZmVyZW5jZSBlYWNoIG9iamVjdCBpdHNlbGYgYXMg
YGNvbnRlbnRgOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
QXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICBwcm9ncmFtbWVyczogWwotICAgICAgICAgICAgICAgICAge2Zp
cnN0TmFtZTogIlllaHVkYSIsIGlkOiAxfSwKLSAgICAgICAgICAgICAgICAgIHtmaXJzdE5hbWU6
ICJUb20iLCAgICBpZDogMn0KLSAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9
cHJvZ3JhbW1lcnMKLSAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlUGF0aD0iY29udGVu
dC5pZCIKLSAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsUGF0aD0iY29udGVudC5maXJz
dE5hbWUifX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVzdWx0
IGluIHRoZSBmb2xsb3dpbmcgSFRNTDoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAg
ICAgICAgIDxzZWxlY3QgY2xhc3M9ImVtYmVyLXNlbGVjdCI+Ci0gICAgICAgICAgICAgICAgPG9w
dGlvbiB2YWx1ZT0iMSI+WWVodWRhPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2
YWx1ZT0iMiI+VG9tPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgYHZhbHVlYCBhdHRyaWJ1dGUgb2YgdGhlIHNl
bGVjdGVkIGA8b3B0aW9uPmAgd2l0aGluIGFuIGBFbWJlci5TZWxlY3RgCi0gICAgICAgICAgICAg
IGNhbiBiZSBib3VuZCB0byBhIHByb3BlcnR5IG9uIGFub3RoZXIgb2JqZWN0OgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJv
bGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBw
cm9ncmFtbWVyczogWwotICAgICAgICAgICAgICAgICAge2ZpcnN0TmFtZTogIlllaHVkYSIsIGlk
OiAxfSwKLSAgICAgICAgICAgICAgICAgIHtmaXJzdE5hbWU6ICJUb20iLCAgICBpZDogMn0KLSAg
ICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtbWVyOiB7Ci0g
ICAgICAgICAgICAgICAgICBpZDogMgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgY29u
dGVudD1wcm9ncmFtbWVycwotICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSJj
b250ZW50LmlkIgotICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRoPSJjb250ZW50
LmZpcnN0TmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHZhbHVlPWN1cnJlbnRQcm9ncmFtbWVy
LmlkfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVzdWx0IGlu
IHRoZSBmb2xsb3dpbmcgSFRNTCB3aXRoIGEgc2VsZWN0ZWQgb3B0aW9uOgotCi0gICAgICAgICAg
ICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZW1iZXItc2VsZWN0Ij4K
LSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj5ZZWh1ZGE8L29wdGlvbj4KLSAgICAg
ICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlRvbTwvb3B0
aW9uPgotICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgSW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVuZGVyZWQgZWxlbWVudCBieSBzZWxlY3Rp
bmcgdGhlIGZpcnN0IG9wdGlvbgotICAgICAgICAgICAgICAoJ1llaHVkYScpIHdpbGwgdXBkYXRl
IHRoZSBgaWRgIG9mIGBjdXJyZW50UHJvZ3JhbW1lcmAKLSAgICAgICAgICAgICAgdG8gbWF0Y2gg
dGhlIGB2YWx1ZWAgcHJvcGVydHkgb2YgdGhlIG5ld2x5IHNlbGVjdGVkIGA8b3B0aW9uPmAuCi0K
LSAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjb250cm9sIHNlbGVjdGlvbiB0
aHJvdWdoIHRoZSB1bmRlcmx5aW5nIG9iamVjdHMKLSAgICAgICAgICAgICAgdXNlZCB0byByZW5k
ZXIgZWFjaCBvYmplY3QgYnkgYmluZGluZyB0aGUgYHNlbGVjdGlvbmAgb3B0aW9uLiBXaGVuIHRo
ZSBzZWxlY3RlZAotICAgICAgICAgICAgICBgPG9wdGlvbj5gIGlzIGNoYW5nZWQsIHRoZSBwcm9w
ZXJ0eSBwYXRoIHByb3ZpZGVkIHRvIGBzZWxlY3Rpb25gCi0gICAgICAgICAgICAgIHdpbGwgYmUg
dXBkYXRlZCB0byBtYXRjaCB0aGUgY29udGVudCBvYmplY3Qgb2YgdGhlIHJlbmRlcmVkIGA8b3B0
aW9uPmAKLSAgICAgICAgICAgICAgZWxlbWVudDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0KLSAgICAgICAgICAgICAgdmFyIHllaHVkYSA9IHtmaXJzdE5hbWU6ICJZZWh1ZGEiLCBp
ZDogMSwgYmZmNGV2YTogJ3RvbSd9Ci0gICAgICAgICAgICAgIHZhciB0b20gPSB7Zmlyc3ROYW1l
OiAiVG9tIiwgaWQ6IDIsIGJmZjRldmE6ICd5ZWh1ZGEnfTsKLQotICAgICAgICAgICAgICBBcHAu
QXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5leHRlbmQoewot
ICAgICAgICAgICAgICAgIHNlbGVjdGVkUGVyc29uOiB0b20sCi0gICAgICAgICAgICAgICAgcHJv
Z3JhbW1lcnM6IFsKLSAgICAgICAgICAgICAgICAgIHllaHVkYSwKLSAgICAgICAgICAgICAgICAg
IHRvbQotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3t2aWV3
IEVtYmVyLlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgY29udGVudD1wcm9ncmFtbWVycwot
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSJjb250ZW50LmlkIgotICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRoPSJjb250ZW50LmZpcnN0TmFtZSIKLSAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbj1zZWxlY3RlZFBlcnNvbn19Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFdvdWxkIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwg
d2l0aCBhIHNlbGVjdGVkIG9wdGlvbjoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAg
ICAgICAgIDxzZWxlY3QgY2xhc3M9ImVtYmVyLXNlbGVjdCI+Ci0gICAgICAgICAgICAgICAgPG9w
dGlvbiB2YWx1ZT0iMSI+WWVodWRhPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2
YWx1ZT0iMiIgc2VsZWN0ZWQ9InNlbGVjdGVkIj5Ub208L29wdGlvbj4KLSAgICAgICAgICAgICAg
PC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEludGVyYWN0aW5n
IHdpdGggdGhlIHJlbmRlcmVkIGVsZW1lbnQgYnkgc2VsZWN0aW5nIHRoZSBmaXJzdCBvcHRpb24K
LSAgICAgICAgICAgICAgKCdZZWh1ZGEnKSB3aWxsIHVwZGF0ZSB0aGUgYHNlbGVjdGVkUGVyc29u
YCB0byBtYXRjaCB0aGUgb2JqZWN0IG9mCi0gICAgICAgICAgICAgIHRoZSBuZXdseSBzZWxlY3Rl
ZCBgPG9wdGlvbj5gLiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIGZpcnN0IG9iamVjdAotICAgICAg
ICAgICAgICBpbiB0aGUgYHByb2dyYW1tZXJzYAotCi0gICAgICAgICAgICAgICMjIFN1cHBseWlu
ZyBhIFByb21wdAotCi0gICAgICAgICAgICAgIEEgYG51bGxgIHZhbHVlIGZvciB0aGUgYEVtYmVy
LlNlbGVjdGAncyBgdmFsdWVgIG9yIGBzZWxlY3Rpb25gIHByb3BlcnR5Ci0gICAgICAgICAgICAg
IHJlc3VsdHMgaW4gdGhlcmUgYmVpbmcgbm8gYDxvcHRpb24+YCB3aXRoIGEgYHNlbGVjdGVkYCBh
dHRyaWJ1dGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBB
cHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5leHRlbmQo
ewotICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3JhbW1lcjogbnVsbCwKLSAgICAgICAgICAg
ICAgICBwcm9ncmFtbWVyczogWwotICAgICAgICAgICAgICAgICAgIlllaHVkYSIsCi0gICAgICAg
ICAgICAgICAgICAiVG9tIgotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYCBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9
cHJvZ3JhbW1lcnMKLSAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXNlbGVjdGVkUHJvZ3JhbW1l
cgotICAgICAgICAgICAgICB9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBX
b3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MOgotCi0gICAgICAgICAgICAgIGBgYGh0
bWwKLSAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZW1iZXItc2VsZWN0Ij4KLSAgICAgICAg
ICAgICAgICA8b3B0aW9uIHZhbHVlPSJZZWh1ZGEiPlllaHVkYTwvb3B0aW9uPgotICAgICAgICAg
ICAgICAgIDxvcHRpb24gdmFsdWU9IlRvbSI+VG9tPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDwv
c2VsZWN0PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbHRob3VnaCBgc2Vs
ZWN0ZWRQcm9ncmFtbWVyYCBpcyBgbnVsbGAgYW5kIG5vIGA8b3B0aW9uPmAKLSAgICAgICAgICAg
ICAgaGFzIGEgYHNlbGVjdGVkYCBhdHRyaWJ1dGUgdGhlIHJlbmRlcmVkIEhUTUwgd2lsbCBkaXNw
bGF5IHRoZQotICAgICAgICAgICAgICBmaXJzdCBpdGVtIGFzIHRob3VnaCBpdCB3ZXJlIHNlbGVj
dGVkLiBZb3UgY2FuIHN1cHBseSBhIHN0cmluZwotICAgICAgICAgICAgICB2YWx1ZSBmb3IgdGhl
IGBFbWJlci5TZWxlY3RgIHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBzZWxlY3Rpb24KLSAg
ICAgICAgICAgICAgd2l0aCB0aGUgYHByb21wdGAgb3B0aW9uOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVt
YmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFBy
b2dyYW1tZXI6IG51bGwsCi0gICAgICAgICAgICAgICAgcHJvZ3JhbW1lcnM6IFsKLSAgICAgICAg
ICAgICAgICAgICJZZWh1ZGEiLAotICAgICAgICAgICAgICAgICAgIlRvbSIKLSAgICAgICAgICAg
ICAgICBdCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9cHJvZ3JhbW1lcnMKLSAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlPXNlbGVjdGVkUHJvZ3JhbW1lcgotICAgICAgICAgICAgICAgICAgICAgcHJvbXB0
PSJQbGVhc2Ugc2VsZWN0IGEgbmFtZSIKLSAgICAgICAgICAgICAgfX0KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRNTDoK
LQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9ImVt
YmVyLXNlbGVjdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbj5QbGVhc2Ugc2VsZWN0IGEgbmFt
ZTwvb3B0aW9uPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IlllaHVkYSI+WWVodWRh
PC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iVG9tIj5Ub208L29wdGlv
bj4KLSAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEBjbGFzcyBTZWxlY3QKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAg
ICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5WaWV3Ci0gICAgICAgICAgICAqLwotICAgICAgICB2
YXIgU2VsZWN0ID0gVmlldy5leHRlbmQoewotICAgICAgICAgICAgaW5zdHJ1bWVudERpc3BsYXk6
ICdFbWJlci5TZWxlY3QnLAotCi0gICAgICAgICAgICB0YWdOYW1lOiAnc2VsZWN0JywKLSAgICAg
ICAgICAgIGNsYXNzTmFtZXM6IFsnZW1iZXItc2VsZWN0J10sCi0gICAgICAgICAgICBkZWZhdWx0
VGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMudGVtcGxhdGUoZnVuY3Rpb24gYW5vbnltb3VzKEhh
bmRsZWJhcnMsIGRlcHRoMCwgaGVscGVycywgcGFydGlhbHMsIGRhdGEpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLmNvbXBpbGVySW5mbyA9IFs0LCAnPj0gMS4wLjAnXTsKLSAgICAgICAgICAgICAg
ICBoZWxwZXJzID0gdGhpcy5tZXJnZShoZWxwZXJzLCBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMp
OwotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHt9OwotICAgICAgICAgICAgICAgIHZh
ciBidWZmZXIgPSAnJywgc3RhY2sxLCBlc2NhcGVFeHByZXNzaW9uID0gdGhpcy5lc2NhcGVFeHBy
ZXNzaW9uLCBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyYW0x
KGRlcHRoMCwgZGF0YSkgewotCi0gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSAnJywg
c3RhY2sxOwotICAgICAgICAgICAgICAgICAgICBkYXRhLmJ1ZmZlci5wdXNoKCI8b3B0aW9uIHZh
bHVlPVwiXCI+Iik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrMSA9IGhlbHBlcnMuX3RyaWFn
ZU11c3RhY2hlLmNhbGwoZGVwdGgwLCAidmlldy5wcm9tcHQiLCB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBoYXNoOiB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hUeXBlczoge30s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29udGV4dHM6IHt9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZXM6IFsiSUQiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjazEgfHwgc3Rh
Y2sxID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJ1ZmZlci5wdXNoKHN0
YWNrMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5i
dWZmZXIucHVzaCgiPC9vcHRpb24+Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZm
ZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvZ3Jh
bTMoZGVwdGgwLCBkYXRhKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrMTsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhY2sxID0gaGVscGVycy5lYWNoLmNhbGwoZGVwdGgwLCAidmll
dy5ncm91cGVkQ29udGVudCIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IHt9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFR5cGVzOiB7fSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc2hDb250ZXh0czoge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNl
OiBzZWxmLm5vb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbjogc2VsZi5wcm9ncmFtKDQs
IHByb2dyYW00LCBkYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBbZGVw
dGgwXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzOiBbIklEIl0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhOiBkYXRhCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5idWZmZXIucHVzaChzdGFjazEpOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5idWZmZXIucHVzaCgnJyk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZnVuY3Rpb24gcHJvZ3JhbTQoZGVwdGgwLCBkYXRhKSB7Ci0KLQotICAgICAgICAgICAgICAg
ICAgICBkYXRhLmJ1ZmZlci5wdXNoKGVzY2FwZUV4cHJlc3Npb24oaGVscGVycy52aWV3LmNhbGwo
ZGVwdGgwLCAidmlldy5ncm91cFZpZXciLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNo
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnOiAoImNvbnRlbnQiKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAoImxhYmVsIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoVHlwZXM6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCc6ICJJRCIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogIklEIgotICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb250ZXh0czogewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjb250ZW50JzogZGVwdGgwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdsYWJlbCc6IGRlcHRoMAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBbZGVwdGgwXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVzOiBbIklEIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRh
Ci0gICAgICAgICAgICAgICAgICAgIH0pKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZnVuY3Rpb24gcHJvZ3JhbTYoZGVwdGgwLCBkYXRhKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHN0YWNrMTsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sxID0gaGVscGVy
cy5lYWNoLmNhbGwoZGVwdGgwLCAidmlldy5jb250ZW50IiwgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzaDoge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoVHlwZXM6IHt9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvbnRleHRzOiB7fSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludmVyc2U6IHNlbGYubm9vcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZu
OiBzZWxmLnByb2dyYW0oNywgcHJvZ3JhbTcsIGRhdGEpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXM6IFsi
SUQiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFjazEgfHwgc3RhY2sxID09PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJ1ZmZlci5wdXNoKHN0YWNrMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LmJ1ZmZlci5wdXNoKCcnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsIGRhdGEpIHsKLQot
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2goZXNjYXBlRXhwcmVzc2lvbiho
ZWxwZXJzLnZpZXcuY2FsbChkZXB0aDAsICJ2aWV3Lm9wdGlvblZpZXciLCB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBoYXNoOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRl
bnQnOiAoIiIpCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzaFR5cGVzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQn
OiAiSUQiCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgaGFzaENvbnRleHRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQn
OiBkZXB0aDAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0czogW2RlcHRoMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlczog
WyJJRCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YQotICAgICAgICAgICAg
ICAgICAgICB9KSkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YWNr
MSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsICJ2aWV3LnByb21wdCIsIHsKLSAgICAgICAg
ICAgICAgICAgICAgaGFzaDoge30sCi0gICAgICAgICAgICAgICAgICAgIGhhc2hUeXBlczoge30s
Ci0gICAgICAgICAgICAgICAgICAgIGhhc2hDb250ZXh0czoge30sCi0gICAgICAgICAgICAgICAg
ICAgIGludmVyc2U6IHNlbGYubm9vcCwKLSAgICAgICAgICAgICAgICAgICAgZm46IHNlbGYucHJv
Z3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBb
ZGVwdGgwXSwKLSAgICAgICAgICAgICAgICAgICAgdHlwZXM6IFsiSUQiXSwKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YTogZGF0YQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IGlmIChzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEu
YnVmZmVyLnB1c2goc3RhY2sxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgInZpZXcub3B0aW9uR3JvdXBQYXRo
IiwgewotICAgICAgICAgICAgICAgICAgICBoYXNoOiB7fSwKLSAgICAgICAgICAgICAgICAgICAg
aGFzaFR5cGVzOiB7fSwKLSAgICAgICAgICAgICAgICAgICAgaGFzaENvbnRleHRzOiB7fSwKLSAg
ICAgICAgICAgICAgICAgICAgaW52ZXJzZTogc2VsZi5wcm9ncmFtKDYsIHByb2dyYW02LCBkYXRh
KSwKLSAgICAgICAgICAgICAgICAgICAgZm46IHNlbGYucHJvZ3JhbSgzLCBwcm9ncmFtMywgZGF0
YSksCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBbZGVwdGgwXSwKLSAgICAgICAgICAg
ICAgICAgICAgdHlwZXM6IFsiSUQiXSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YQot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGlmIChzdGFjazEgfHwgc3RhY2sx
ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2goc3RhY2sxKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLQotICAg
ICAgICAgICAgfSksCi0gICAgICAgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydtdWx0aXBsZScs
ICdkaXNhYmxlZCcsICd0YWJpbmRleCcsICduYW1lJywgJ3JlcXVpcmVkJywgJ2F1dG9mb2N1cycs
Ci0gICAgICAgICAgICAnZm9ybScsICdzaXplJ10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBUaGUgYG11bHRpcGxlYCBhdHRyaWJ1dGUgb2YgdGhlIHNlbGVjdCBlbGVt
ZW50LiBJbmRpY2F0ZXMgd2hldGhlciBtdWx0aXBsZQotICAgICAgICAgICAgICAgICAgICBvcHRp
b25zIGNhbiBiZSBzZWxlY3RlZC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbXVs
dGlwbGUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAg
ICAgICBAZGVmYXVsdCBmYWxzZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG11
bHRpcGxlOiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRo
ZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuIEluZGljYXRlcyB3
aGV0aGVyCi0gICAgICAgICAgICAgICAgICAgIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkIGZyb20g
aW50ZXJhY3Rpb25zLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBkaXNhYmxlZAot
ICAgICAgICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgICAgICAgIEBk
ZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGlzYWJsZWQ6
IGZhbHNlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGByZXF1
aXJlZGAgYXR0cmlidXRlIG9mIHRoZSBzZWxlY3QgZWxlbWVudC4gSW5kaWNhdGVzIHdoZXRoZXIK
LSAgICAgICAgICAgICAgICAgICAgYSBzZWxlY3RlZCBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIGZv
cm0gdmFsaWRhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcmVxdWlyZWQK
LSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAgICBA
ZGVmYXVsdCBmYWxzZQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjAKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBvcHRpb25zLgotCi0gICAgICAg
ICAgICAgICAgICAgIElmIGBvcHRpb25MYWJlbFBhdGhgIGFuZCBgb3B0aW9uVmFsdWVQYXRoYCBh
cmUgbm90IG92ZXJyaWRkZW4sIHRoaXMgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgIGJlIGEg
bGlzdCBvZiBzdHJpbmdzLCB3aGljaCB3aWxsIHNlcnZlIHNpbXVsdGFuZW91c2x5IGFzIGxhYmVs
cyBhbmQgdmFsdWVzLgotCi0gICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhpcyBzaG91
bGQgYmUgYSBsaXN0IG9mIG9iamVjdHMuIEZvciBpbnN0YW5jZToKLQotICAgICAgICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlNlbGVjdC5jcmVh
dGUoewotICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IEVtYmVyLkEoWwotICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IGlkOiAxLCBmaXJzdE5hbWU6ICdZZWh1ZGEnIH0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgaWQ6IDIsIGZpcnN0TmFtZTogJ1RvbScgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgXSksCi0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRo
OiAnY29udGVudC5maXJzdE5hbWUnLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVl
UGF0aDogJ2NvbnRlbnQuaWQnCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udGVudAotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29udGVudDogbnVsbCwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gYG11bHRpcGxlYCBp
cyBgZmFsc2VgLCB0aGUgZWxlbWVudCBvZiBgY29udGVudGAgdGhhdCBpcyBjdXJyZW50bHkKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQsIGlmIGFueS4KLQotICAgICAgICAgICAgICAgICAg
ICBXaGVuIGBtdWx0aXBsZWAgaXMgYHRydWVgLCBhbiBhcnJheSBvZiBzdWNoIGVsZW1lbnRzLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBzZWxlY3Rpb24KLSAgICAgICAgICAgICAg
ICAgICAgQHR5cGUgT2JqZWN0IG9yIEFycmF5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0
IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZWxlY3Rpb246IG51bGws
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJbiBzaW5nbGUgc2VsZWN0
aW9uIG1vZGUgKHdoZW4gYG11bHRpcGxlYCBpcyBgZmFsc2VgKSwgdmFsdWUgY2FuIGJlIHVzZWQg
dG8KLSAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbidzIHZhbHVl
IG9yIHNldCB0aGUgc2VsZWN0aW9uIGJ5IGl0J3MgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAg
ICAgSXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gbXVsdGlwbGUgc2VsZWN0aW9uIG1v
ZGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdmFsdWU6IGNvbXB1dGVkKGZ1bmN0aW9u
KGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHZhciB2YWx1ZVBhdGggPSBnZXQodGhpcywgJ29wdGlvblZhbHVl
UGF0aCcpLnJlcGxhY2UoL15jb250ZW50XC4/LywgJycpOwotICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZVBhdGggPyBnZXQodGhpcywgJ3NlbGVjdGlvbi4nICsgdmFsdWVQYXRoKSA6IGdldCh0
aGlzLCAnc2VsZWN0aW9uJyk7Ci0gICAgICAgICAgICB9KS5wcm9wZXJ0eSgnc2VsZWN0aW9uJyks
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiBnaXZlbiwgYSB0b3At
bW9zdCBkdW1teSBvcHRpb24gd2lsbCBiZSByZW5kZXJlZCB0byBzZXJ2ZSBhcyBhIHVzZXIKLSAg
ICAgICAgICAgICAgICAgICAgcHJvbXB0LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBwcm9tcHQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAg
ICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBw
cm9tcHQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUg
cGF0aCBvZiB0aGUgb3B0aW9uIGxhYmVscy4gU2VlIFtjb250ZW50XSgvYXBpL2NsYXNzZXMvRW1i
ZXIuU2VsZWN0Lmh0bWwjcHJvcGVydHlfY29udGVudCkuCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByb3BlcnR5IG9wdGlvbkxhYmVsUGF0aAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJp
bmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgJ2NvbnRlbnQnCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRoOiAnY29udGVudCcsCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBvZiB0aGUgb3B0aW9uIHZh
bHVlcy4gU2VlIFtjb250ZW50XSgvYXBpL2NsYXNzZXMvRW1iZXIuU2VsZWN0Lmh0bWwjcHJvcGVy
dHlfY29udGVudCkuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IG9wdGlvblZhbHVl
UGF0aAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAg
ICAgQGRlZmF1bHQgJ2NvbnRlbnQnCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
b3B0aW9uVmFsdWVQYXRoOiAnY29udGVudCcsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBUaGUgcGF0aCBvZiB0aGUgb3B0aW9uIGdyb3VwLgotICAgICAgICAgICAgICAg
ICAgICBXaGVuIHRoaXMgcHJvcGVydHkgaXMgdXNlZCwgYGNvbnRlbnRgIHNob3VsZCBiZSBzb3J0
ZWQgYnkgYG9wdGlvbkdyb3VwUGF0aGAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5
IG9wdGlvbkdyb3VwUGF0aAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAg
ICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIG9wdGlvbkdyb3VwUGF0aDogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFRoZSB2aWV3IGNsYXNzIGZvciBvcHRncm91cC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgZ3JvdXBWaWV3Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEVt
YmVyLlZpZXcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuU2VsZWN0T3B0Z3Jv
dXAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBncm91cFZpZXc6IFNlbGVjdE9w
dGdyb3VwLAotCi0gICAgICAgICAgICBncm91cGVkQ29udGVudDogY29tcHV0ZWQoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGdyb3VwUGF0aCA9IGdldCh0aGlzLCAnb3B0aW9uR3Jv
dXBQYXRoJyk7Ci0gICAgICAgICAgICAgICAgdmFyIGdyb3VwZWRDb250ZW50ID0gZW1iZXJBKCk7
Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKSB8fCBb
XTsKLQotICAgICAgICAgICAgICAgIGZvckVhY2goY29udGVudCwgZnVuY3Rpb24oaXRlbSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBnZXQoaXRlbSwgZ3JvdXBQYXRoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0KGdyb3VwZWRDb250ZW50LCAnbGFzdE9iamVjdC5s
YWJlbCcpICE9PSBsYWJlbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbnRl
bnQucHVzaE9iamVjdCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGVtYmVyQSgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGdldChncm91cGVkQ29udGVudCwgJ2xhc3RPYmplY3QuY29udGVudCcpLnB1c2go
aXRlbSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZ3Jv
dXBlZENvbnRlbnQ7Ci0gICAgICAgICAgICB9KS5wcm9wZXJ0eSgnb3B0aW9uR3JvdXBQYXRoJywg
J2NvbnRlbnQuQGVhY2gnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSB2aWV3IGNsYXNzIGZvciBvcHRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IG9wdGlvblZpZXcKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRW1iZXIuVmlldwotICAg
ICAgICAgICAgICAgICAgICBAZGVmYXVsdCBFbWJlci5TZWxlY3RPcHRpb24KLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBvcHRpb25WaWV3OiBTZWxlY3RPcHRpb24sCi0KLSAgICAg
ICAgICAgIF9jaGFuZ2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQodGhp
cywgJ211bHRpcGxlJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlTXVsdGlw
bGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9jaGFuZ2VTaW5nbGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBzZWxlY3Rpb25EaWRDaGFuZ2U6IG9ic2VydmVyKCdzZWxlY3Rpb24uQGVhY2gn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZ2V0KHRoaXMs
ICdzZWxlY3Rpb24nKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdtdWx0aXBsZScp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShzZWxlY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgJ3NlbGVjdGlvbicsIGVtYmVyQShbc2VsZWN0
aW9uXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkRpZENoYW5nZU11bHRp
cGxlKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc2VsZWN0aW9uRGlkQ2hhbmdlU2luZ2xlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSksCi0KLSAgICAgICAgICAgIHZhbHVlRGlkQ2hhbmdlOiBvYnNlcnZlcigndmFsdWUn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAn
Y29udGVudCcpLAotICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0KHRoaXMsICd2YWx1ZScpLAot
ICAgICAgICAgICAgICAgIHZhbHVlUGF0aCA9IGdldCh0aGlzLCAnb3B0aW9uVmFsdWVQYXRoJyku
cmVwbGFjZSgvXmNvbnRlbnRcLj8vLCAnJyksCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1
ZSA9ICh2YWx1ZVBhdGggPyBnZXQodGhpcywgJ3NlbGVjdGlvbi4nICsgdmFsdWVQYXRoKSA6IGdl
dCh0aGlzLCAnc2VsZWN0aW9uJykpLAotICAgICAgICAgICAgICAgIHNlbGVjdGlvbjsKLQotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gc2VsZWN0ZWRWYWx1ZSkgewotICAgICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24gPSBjb250ZW50ID8gY29udGVudC5maW5kKGZ1bmN0aW9uKG9iaikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSAodmFsdWVQYXRoID8g
Z2V0KG9iaiwgdmFsdWVQYXRoKSA6IG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIH0pIDogbnVs
bDsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgnc2VsZWN0aW9uJywgc2VsZWN0aW9u
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQotCi0gICAgICAgICAgICBf
dHJpZ2dlckNoYW5nZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGlv
biA9IGdldCh0aGlzLCAnc2VsZWN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0g
Z2V0KHRoaXMsICd2YWx1ZScpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc05vbmUoc2VsZWN0
aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRpZENoYW5nZSgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWlzTm9uZSh2YWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZURpZENoYW5nZSgpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSgpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgX2NoYW5nZVNpbmdsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHNlbGVjdGVkSW5kZXggPSB0aGlzLiQoKVswXS5zZWxlY3RlZEluZGV4LAotICAgICAg
ICAgICAgICAgIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKSwKLSAgICAgICAgICAgICAg
ICBwcm9tcHQgPSBnZXQodGhpcywgJ3Byb21wdCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZW50IHx8ICFnZXQoY29udGVudCwgJ2xlbmd0aCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHByb21wdCAm
JiBzZWxlY3RlZEluZGV4ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAn
c2VsZWN0aW9uJywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJvbXB0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGVkSW5kZXggLT0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc2V0KHRoaXMsICdzZWxlY3Rpb24nLCBjb250ZW50Lm9iamVjdEF0KHNlbGVjdGVkSW5k
ZXgpKTsKLSAgICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgX2NoYW5nZU11bHRpcGxlOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJCgnb3B0aW9u
OnNlbGVjdGVkJyksCi0gICAgICAgICAgICAgICAgcHJvbXB0ID0gZ2V0KHRoaXMsICdwcm9tcHQn
KSwKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcm9tcHQgPyAxIDogMCwKLSAgICAgICAgICAg
ICAgICBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JyksCi0gICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uID0gZ2V0KHRoaXMsICdzZWxlY3Rpb24nKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
Y29udGVudCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBzZWxlY3RlZEluZGV4ZXMgPSBvcHRpb25zLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4IC0gb2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICB9KS50b0FycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdTZWxlY3Rpb24g
PSBjb250ZW50Lm9iamVjdHNBdChzZWxlY3RlZEluZGV4ZXMpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc0FycmF5KHNlbGVjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2Uoc2VsZWN0aW9uLCAwLCBnZXQoc2VsZWN0aW9uLCAnbGVuZ3RoJyksIG5ld1NlbGVjdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXQodGhpcywgJ3NlbGVjdGlvbicsIG5ld1NlbGVjdGlvbik7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBf
c2VsZWN0aW9uRGlkQ2hhbmdlU2luZ2xlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZWwgPSB0aGlzLmdldCgnZWxlbWVudCcpOwotICAgICAgICAgICAgICAgIGlmICghZWwpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JyksCi0gICAgICAgICAg
ICAgICAgc2VsZWN0aW9uID0gZ2V0KHRoaXMsICdzZWxlY3Rpb24nKSwKLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25JbmRleCA9IGNvbnRlbnQgPyBpbmRleE9mKGNvbnRlbnQsIHNlbGVjdGlvbikg
OiAtMSwKLSAgICAgICAgICAgICAgICBwcm9tcHQgPSBnZXQodGhpcywgJ3Byb21wdCcpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHByb21wdCkgewotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rp
b25JbmRleCArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGlvbkluZGV4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9zZWxl
Y3Rpb25EaWRDaGFuZ2VNdWx0aXBsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBzZWxlY3Rp
b24gPSBnZXQodGhpcywgJ3NlbGVjdGlvbicpLAotICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5k
ZXhlcyA9IGNvbnRlbnQgPyBpbmRleGVzT2YoY29udGVudCwgc2VsZWN0aW9uKSA6IFstMV0sCi0g
ICAgICAgICAgICAgICAgcHJvbXB0ID0gZ2V0KHRoaXMsICdwcm9tcHQnKSwKLSAgICAgICAgICAg
ICAgICBvZmZzZXQgPSBwcm9tcHQgPyAxIDogMCwKLSAgICAgICAgICAgICAgICBvcHRpb25zID0g
dGhpcy4kKCdvcHRpb24nKSwKLSAgICAgICAgICAgICAgICBhZGp1c3RlZDsKLQotICAgICAgICAg
ICAgICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZWFjaChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkID0gdGhpcy5pbmRl
eCA+IC0xID8gdGhpcy5pbmRleCAtIG9mZnNldCA6IC0xOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZWxlY3RlZCA9IGluZGV4T2Yoc2VsZWN0ZWRJbmRleGVzLCBhZGp1c3RlZCkgPiAt
MTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJkaWRJbnNlcnRFbGVtZW50
IiwgdGhpcywgdGhpcy5fdHJpZ2dlckNoYW5nZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbigi
Y2hhbmdlIiwgdGhpcywgdGhpcy5fY2hhbmdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFNlbGVjdDsKLSAgICAgICAgX19l
eHBvcnRzX18uU2VsZWN0ID0gU2VsZWN0OwotICAgICAgICBfX2V4cG9ydHNfXy5TZWxlY3RPcHRp
b24gPSBTZWxlY3RPcHRpb247Ci0gICAgICAgIF9fZXhwb3J0c19fLlNlbGVjdE9wdGdyb3VwID0g
U2VsZWN0T3B0Z3JvdXA7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2Nv
bnRyb2xzL3RleHRfYXJlYSIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1i
ZXItdmlld3Mvdmlld3MvY29tcG9uZW50IiwgImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvdGV4
dF9zdXBwb3J0IiwgImVtYmVyLW1ldGFsL21peGluIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1
bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIGdldCA9IF9f
ZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZhciBDb21wb25lbnQgPSBfX2RlcGVuZGVuY3ky
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRleHRTdXBwb3J0ID0gX19kZXBlbmRlbmN5M19f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBvYnNlcnZlciA9IF9fZGVwZW5kZW5jeTRfXy5vYnNl
cnZlcjsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGludGVybmFsIGNsYXNzIHVz
ZWQgdG8gY3JlYXRlIHRleHRhcmVhIGVsZW1lbnQgd2hlbiB0aGUgYHt7dGV4dGFyZWF9fWAKLSAg
ICAgICAgICAgICAgaGVscGVyIGlzIHVzZWQuCi0KLSAgICAgICAgICAgICAgU2VlIFtoYW5kbGVi
YXJzLmhlbHBlcnMudGV4dGFyZWFdKC9hcGkvY2xhc3Nlcy9FbWJlci5IYW5kbGViYXJzLmhlbHBl
cnMuaHRtbCNtZXRob2RfdGV4dGFyZWEpICBmb3IgdXNhZ2UgZGV0YWlscy4KLQotICAgICAgICAg
ICAgICAjIyBMYXlvdXQgYW5kIExheW91dE5hbWUgcHJvcGVydGllcwotCi0gICAgICAgICAgICAg
IEJlY2F1c2UgSFRNTCBgdGV4dGFyZWFgIGVsZW1lbnRzIGRvIG5vdCBjb250YWluIGlubmVyIEhU
TUwgdGhlIGBsYXlvdXRgIGFuZAotICAgICAgICAgICAgICBgbGF5b3V0TmFtZWAgcHJvcGVydGll
cyB3aWxsIG5vdCBiZSBhcHBsaWVkLiBTZWUgW0VtYmVyLlZpZXddKC9hcGkvY2xhc3Nlcy9FbWJl
ci5WaWV3Lmh0bWwpJ3MKLSAgICAgICAgICAgICAgbGF5b3V0IHNlY3Rpb24gZm9yIG1vcmUgaW5m
b3JtYXRpb24uCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFRleHRBcmVhCi0gICAgICAgICAgICAg
IEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQ29tcG9uZW50
Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLlRleHRTdXBwb3J0Ci0gICAgICAgICAgICAqLwot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29tcG9uZW50LmV4dGVuZChUZXh0U3Vw
cG9ydCwgewotICAgICAgICAgICAgaW5zdHJ1bWVudERpc3BsYXk6ICd7e3RleHRhcmVhfX0nLAot
Ci0gICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2VtYmVyLXRleHQtYXJlYSddLAotCi0gICAgICAg
ICAgICB0YWdOYW1lOiAidGV4dGFyZWEiLAotICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6
IFsncm93cycsICdjb2xzJywgJ25hbWUnLCAnc2VsZWN0aW9uRW5kJywgJ3NlbGVjdGlvblN0YXJ0
JywgJ3dyYXAnXSwKLSAgICAgICAgICAgIHJvd3M6IG51bGwsCi0gICAgICAgICAgICBjb2xzOiBu
dWxsLAotCi0gICAgICAgICAgICBfdXBkYXRlRWxlbWVudFZhbHVlOiBvYnNlcnZlcigndmFsdWUn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBkbyB0aGlzIGNoZWNrIHNvIGN1
cnNvciBwb3NpdGlvbiBkb2Vzbid0IGdldCBhZmZlY3RlZCBpbiBJRQotICAgICAgICAgICAgICAg
IHZhciB2YWx1ZSA9IGdldCh0aGlzLCAndmFsdWUnKSwKLSAgICAgICAgICAgICAgICAkZWwgPSB0
aGlzLiQoKTsKLSAgICAgICAgICAgICAgICBpZiAoJGVsICYmIHZhbHVlICE9PSAkZWwudmFsKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgJGVsLnZhbCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbigiZGlk
SW5zZXJ0RWxlbWVudCIsIHRoaXMsIHRoaXMuX3VwZGF0ZUVsZW1lbnRWYWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFy
cy9jb250cm9scy90ZXh0X2ZpZWxkIiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItdmlld3Mvdmlld3MvY29tcG9uZW50
IiwgImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvdGV4dF9zdXBwb3J0IiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAg
ICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAg
dmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVu
ZGVuY3kyX18uc2V0OwotICAgICAgICB2YXIgQ29tcG9uZW50ID0gX19kZXBlbmRlbmN5M19fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBUZXh0U3VwcG9ydCA9IF9fZGVwZW5kZW5jeTRfX1siZGVm
YXVsdCJdOwotCi0gICAgICAgIC8qKgotCi0gICAgICAgICAgICAgIFRoZSBpbnRlcm5hbCBjbGFz
cyB1c2VkIHRvIGNyZWF0ZSB0ZXh0IGlucHV0cyB3aGVuIHRoZSBge3tpbnB1dH19YAotICAgICAg
ICAgICAgICBoZWxwZXIgaXMgdXNlZCB3aXRoIGB0eXBlYCBvZiBgdGV4dGAuCi0KLSAgICAgICAg
ICAgICAgU2VlIFtIYW5kbGViYXJzLmhlbHBlcnMuaW5wdXRdKC9hcGkvY2xhc3Nlcy9FbWJlci5I
YW5kbGViYXJzLmhlbHBlcnMuaHRtbCNtZXRob2RfaW5wdXQpICBmb3IgdXNhZ2UgZGV0YWlscy4K
LQotICAgICAgICAgICAgICAjIyBMYXlvdXQgYW5kIExheW91dE5hbWUgcHJvcGVydGllcwotCi0g
ICAgICAgICAgICAgIEJlY2F1c2UgSFRNTCBgaW5wdXRgIGVsZW1lbnRzIGFyZSBzZWxmIGNsb3Np
bmcgYGxheW91dGAgYW5kIGBsYXlvdXROYW1lYAotICAgICAgICAgICAgICBwcm9wZXJ0aWVzIHdp
bGwgbm90IGJlIGFwcGxpZWQuIFNlZSBbRW1iZXIuVmlld10oL2FwaS9jbGFzc2VzL0VtYmVyLlZp
ZXcuaHRtbCkncwotICAgICAgICAgICAgICBsYXlvdXQgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1h
dGlvbi4KLQotICAgICAgICAgICAgICBAY2xhc3MgVGV4dEZpZWxkCi0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQ29tcG9uZW50Ci0g
ICAgICAgICAgICAgIEB1c2VzIEVtYmVyLlRleHRTdXBwb3J0Ci0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29tcG9uZW50LmV4dGVuZChUZXh0U3VwcG9y
dCwgewotICAgICAgICAgICAgaW5zdHJ1bWVudERpc3BsYXk6ICd7e2lucHV0IHR5cGU9InRleHQi
fX0nLAotCi0gICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2VtYmVyLXRleHQtZmllbGQnXSwKLSAg
ICAgICAgICAgIHRhZ05hbWU6ICJpbnB1dCIsCi0gICAgICAgICAgICBhdHRyaWJ1dGVCaW5kaW5n
czogWyd0eXBlJywgJ3ZhbHVlJywgJ3NpemUnLCAncGF0dGVybicsICduYW1lJywgJ21pbicsICdt
YXgnLAotICAgICAgICAgICAgJ2FjY2VwdCcsICdhdXRvY29tcGxldGUnLCAnYXV0b3NhdmUnLCAn
Zm9ybWFjdGlvbicsCi0gICAgICAgICAgICAnZm9ybWVuY3R5cGUnLCAnZm9ybW1ldGhvZCcsICdm
b3Jtbm92YWxpZGF0ZScsICdmb3JtdGFyZ2V0JywKLSAgICAgICAgICAgICdoZWlnaHQnLCAnaW5w
dXRtb2RlJywgJ2xpc3QnLCAnbXVsdGlwbGUnLCAnc3RlcCcsCi0gICAgICAgICAgICAnd2lkdGgn
XSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgdmFsdWVgIGF0
dHJpYnV0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudC4gQXMgdGhlIHVzZXIgaW5wdXRzIHRleHQsIHRo
aXMKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgaXMgdXBkYXRlZCBsaXZlLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBAdHlw
ZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgIiIKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICB2YWx1ZTogIiIsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBUaGUgYHR5cGVgIGF0dHJpYnV0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudC4K
LQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdHlwZQotICAgICAgICAgICAgICAgICAg
ICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgInRleHQiCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHlwZTogInRleHQiLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGBzaXplYCBvZiB0aGUgdGV4dCBmaWVsZCBp
biBjaGFyYWN0ZXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBzaXplCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2l6ZTogbnVsbCwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgcGF0dGVybmAgYXR0cmli
dXRlIG9mIGlucHV0IGVsZW1lbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHBh
dHRlcm4KLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwYXR0
ZXJuOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGBt
aW5gIGF0dHJpYnV0ZSBvZiBpbnB1dCBlbGVtZW50IHVzZWQgd2l0aCBgdHlwZT0ibnVtYmVyImAg
b3IgYHR5cGU9InJhbmdlImAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IG1pbgot
ICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRl
ZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS40LjAKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBtaW46IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBUaGUgYG1heGAgYXR0cmlidXRlIG9mIGlucHV0IGVsZW1lbnQgdXNl
ZCB3aXRoIGB0eXBlPSJudW1iZXIiYCBvciBgdHlwZT0icmFuZ2UiYC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgbWF4Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwot
ICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAgIEBz
aW5jZSAxLjQuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1heDogbnVsbAot
ICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvY29udHJv
bHMvdGV4dF9zdXBwb3J0IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJl
ci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItcnVudGlt
ZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIGdldCA9IF9f
ZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0
OwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3kzX18uTWl4aW47Ci0gICAgICAgIHZh
ciBUYXJnZXRBY3Rpb25TdXBwb3J0ID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIFNoYXJlZCBtaXhpbiB1c2VkIGJ5IGBFbWJlci5UZXh0
RmllbGRgIGFuZCBgRW1iZXIuVGV4dEFyZWFgLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBUZXh0
U3VwcG9ydAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEB1
c2VzIEVtYmVyLlRhcmdldEFjdGlvblN1cHBvcnQKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1i
ZXIuTWl4aW4KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0gICAgICAg
IHZhciBUZXh0U3VwcG9ydCA9IE1peGluLmNyZWF0ZShUYXJnZXRBY3Rpb25TdXBwb3J0LCB7Ci0g
ICAgICAgICAgICB2YWx1ZTogIiIsCi0KLSAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBb
J3BsYWNlaG9sZGVyJywgJ2Rpc2FibGVkJywgJ21heGxlbmd0aCcsICd0YWJpbmRleCcsICdyZWFk
b25seScsCi0gICAgICAgICAgICAnYXV0b2ZvY3VzJywgJ2Zvcm0nLCAnc2VsZWN0aW9uRGlyZWN0
aW9uJywgJ3NwZWxsY2hlY2snLCAncmVxdWlyZWQnLAotICAgICAgICAgICAgJ3RpdGxlJywgJ2F1
dG9jYXBpdGFsaXplJywgJ2F1dG9jb3JyZWN0J10sCi0gICAgICAgICAgICBwbGFjZWhvbGRlcjog
bnVsbCwKLSAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKLSAgICAgICAgICAgIG1heGxlbmd0
aDogbnVsbCwKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJmb2N1c091dCIsIHRo
aXMsIHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5v
bigiY2hhbmdlIiwgdGhpcywgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLm9uKCJwYXN0ZSIsIHRoaXMsIHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5n
ZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbigiY3V0IiwgdGhpcywgdGhpcy5fZWxlbWVudFZh
bHVlRGlkQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJpbnB1dCIsIHRoaXMsIHRo
aXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbigia2V5
VXAiLCB0aGlzLCB0aGlzLmludGVycHJldEtleUV2ZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGFjdGlvbiB0byBiZSBzZW50
IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleS4KLQotICAgICAgICAgICAgICAg
ICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIsIGJ1dCBpcyBm
aXJlZCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIHByZXNzZXMgdGhlIHJldHVy
biBrZXkgd2hlbiBlZGl0aW5nIGEgdGV4dCBmaWVsZCwgYW5kIHNlbmRzCi0gICAgICAgICAgICAg
ICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYXMgdGhlIGNvbnRleHQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByb3BlcnR5IGFjdGlvbgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBT
dHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGFjdGlvbjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoZSBldmVudCB0aGF0IHNob3VsZCBzZW5kIHRoZSBhY3Rpb24uCi0K
LSAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBhcmU6Ci0KLSAgICAgICAgICAgICAgICAgICAg
KiBgZW50ZXJgOiB0aGUgdXNlciBwcmVzc2VkIGVudGVyCi0gICAgICAgICAgICAgICAgICAgICog
YGtleVByZXNzYDogdGhlIHVzZXIgcHJlc3NlZCBhIGtleQotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBvbkV2ZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAg
ICAgICAgICAgICAgICAgICBAZGVmYXVsdCBlbnRlcgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIG9uRXZlbnQ6ICdlbnRlcicsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBXaGV0aGVyIHRoZXkgYGtleVVwYCBldmVudCB0aGF0IHRyaWdnZXJzIGFuIGBh
Y3Rpb25gIHRvIGJlIHNlbnQgY29udGludWVzCi0gICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0
aW5nIHRvIG90aGVyIHZpZXdzLgotCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHdo
ZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleSBvbiB0aGVpciBrZXlib2FyZCBhbmQK
LSAgICAgICAgICAgICAgICAgICAgdGhlIHRleHQgZmllbGQgaGFzIGFuIGBhY3Rpb25gIHNldCwg
dGhlIGFjdGlvbiB3aWxsIGJlIHNlbnQgdG8gdGhlIHZpZXcncwotICAgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVyIGFuZCB0aGUga2V5IGV2ZW50IHdpbGwgc3RvcCBwcm9wYWdhdGluZy4KLQot
ICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSBwYXJlbnQgdmlld3MgdG8gcmVj
ZWl2ZSB0aGUgYGtleVVwYCBldmVudCBldmVuIGFmdGVyIGFuCi0gICAgICAgICAgICAgICAgICAg
IGFjdGlvbiBoYXMgYmVlbiBkaXNwYXRjaGVkLCBzZXQgYGJ1YmJsZXNgIHRvIHRydWUuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGJ1YmJsZXMKLSAgICAgICAgICAgICAgICAgICAg
QHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBmYWxzZQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLAotCi0gICAgICAgICAg
ICBpbnRlcnByZXRLZXlFdmVudHM6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIG1hcCA9IFRleHRTdXBwb3J0LktFWV9FVkVOVFM7Ci0gICAgICAgICAgICAgICAgdmFyIG1l
dGhvZCA9IG1hcFtldmVudC5rZXlDb2RlXTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1l
bnRWYWx1ZURpZENoYW5nZSgpOwotICAgICAgICAgICAgICAgIGlmIChtZXRob2QpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXShldmVudCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2VsZW1lbnRWYWx1ZURpZENoYW5n
ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICd2YWx1ZScsIHRoaXMu
JCgpLnZhbCgpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgdXNlciBpbnNlcnRzIGEgbmV3IGxpbmUuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBgRW1iZXIuVGV4dFN1cHBvcnRgIG1peGlu
IG9uIGtleVVwIGlmIGtleWNvZGUgbWF0Y2hlcyAxMy4KLSAgICAgICAgICAgICAgICAgICAgVXNl
cyBzZW5kQWN0aW9uIHRvIHNlbmQgdGhlIGBlbnRlcmAgYWN0aW9uLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgaW5zZXJ0TmV3bGluZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0V2ZW50fSBldmVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluc2VydE5l
d2xpbmU6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VuZEFjdGlvbignZW50
ZXInLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICAgICAgc2VuZEFjdGlvbignaW5zZXJ0LW5l
d2xpbmUnLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGl0cyBlc2NhcGUuCi0K
LSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBgRW1iZXIuVGV4dFN1cHBvcnRgIG1p
eGluIG9uIGtleVVwIGlmIGtleWNvZGUgbWF0Y2hlcyAyNy4KLSAgICAgICAgICAgICAgICAgICAg
VXNlcyBzZW5kQWN0aW9uIHRvIHNlbmQgdGhlIGBlc2NhcGUtcHJlc3NgIGFjdGlvbi4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhbmNlbAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0V2ZW50fSBldmVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhbmNl
bDogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAgICBzZW5kQWN0aW9uKCdlc2NhcGUt
cHJlc3MnLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRleHQgYXJlYSBpcyBmb2N1c2Vk
LgotCi0gICAgICAgICAgICAgICAgICAgIFVzZXMgc2VuZEFjdGlvbiB0byBzZW5kIHRoZSBgZm9j
dXMtaW5gIGFjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZvY3VzSW4KLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBmb2N1c0luOiBmdW5jdGlvbihldmVudCkgewotICAgICAgICAgICAg
ICAgIHNlbmRBY3Rpb24oJ2ZvY3VzLWluJywgdGhpcywgZXZlbnQpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSB0
ZXh0IGFyZWEgaXMgYmx1cnJlZC4gCi0KLSAgICAgICAgICAgICAgICAgICAgVXNlcyBzZW5kQWN0
aW9uIHRvIHNlbmQgdGhlIGBmb2N1cy1vdXRgIGFjdGlvbi4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIGZvY3VzT3V0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RXZlbnR9IGV2
ZW50Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZm9jdXNPdXQ6IGZ1bmN0aW9u
KGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VuZEFjdGlvbignZm9jdXMtb3V0JywgdGhpcywg
ZXZlbnQpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkuIEVuYWJsZWQgYnkgc2V0
dGluZwotICAgICAgICAgICAgICAgICAgICB0aGUgYG9uRXZlbnRgIHByb3BlcnR5IHRvIGBrZXlQ
cmVzc2AuCi0KLSAgICAgICAgICAgICAgICAgICAgVXNlcyBzZW5kQWN0aW9uIHRvIHNlbmQgdGhl
IGBrZXktcHJlc3NgIGFjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGtleVBy
ZXNzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAga2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAg
ICAgICAgICAgICAgc2VuZEFjdGlvbigna2V5LXByZXNzJywgdGhpcywgZXZlbnQpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIH0pOwotCi0gICAgICAgIFRleHRTdXBwb3J0LktFWV9FVkVOVFMg
PSB7Ci0gICAgICAgICAgICAxMzogJ2luc2VydE5ld2xpbmUnLAotICAgICAgICAgICAgMjc6ICdj
YW5jZWwnCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gSW4gcHJpbmNpcGxlLCB0aGlzIHNob3Vs
ZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGUgbGVnYWN5Ci0gICAgICAgIC8vIHNlbmRBY3Rpb24g
c2VtYW50aWNzIGZvciBUZXh0RmllbGQgYXJlIGRpZmZlcmVudCBmcm9tCi0gICAgICAgIC8vIHRo
ZSBjb21wb25lbnQgc2VtYW50aWNzIHNvIHRoaXMgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlbS4KLSAg
ICAgICAgZnVuY3Rpb24gc2VuZEFjdGlvbihldmVudE5hbWUsIHZpZXcsIGV2ZW50KSB7Ci0gICAg
ICAgICAgICB2YXIgYWN0aW9uID0gZ2V0KHZpZXcsIGV2ZW50TmFtZSksCi0gICAgICAgICAgICBv
biA9IGdldCh2aWV3LCAnb25FdmVudCcpLAotICAgICAgICAgICAgdmFsdWUgPSBnZXQodmlldywg
J3ZhbHVlJyk7Ci0KLSAgICAgICAgICAgIC8vIGJhY2stY29tcGF0IHN1cHBvcnQgZm9yIGtleVBy
ZXNzIGFzIGFuIGV2ZW50IG5hbWUgZXZlbiB0aG91Z2gKLSAgICAgICAgICAgIC8vIGl0J3MgYWxz
byBhIG1ldGhvZCBuYW1lIHRoYXQgY29uc3VtZXMgdGhlIGV2ZW50IChhbmQgdGhlcmVmb3JlCi0g
ICAgICAgICAgICAvLyBpbmNvbXBhdGlibGUgd2l0aCBzZW5kQWN0aW9uIHNlbWFudGljcykuCi0g
ICAgICAgICAgICBpZiAob24gPT09IGV2ZW50TmFtZSB8fCAob24gPT09ICdrZXlQcmVzcycgJiYg
ZXZlbnROYW1lID09PSAna2V5LXByZXNzJykpIHsKLSAgICAgICAgICAgICAgICB2aWV3LnNlbmRB
Y3Rpb24oJ2FjdGlvbicsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmll
dy5zZW5kQWN0aW9uKGV2ZW50TmFtZSwgdmFsdWUpOwotCi0gICAgICAgICAgICBpZiAoYWN0aW9u
IHx8IG9uID09PSBldmVudE5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWdldCh2aWV3LCAn
YnViYmxlcycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBUZXh0U3VwcG9ydDsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLWhhbmRsZWJhcnMvZXh0IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL2JpbmRpbmciLCAiZW1iZXIt
bWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvaXNfZW1wdHki
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBf
X2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5GRUFUVVJFUywgRW1iZXIu
YXNzZXJ0LCBFbWJlci5IYW5kbGViYXJzLCBFbWJlci5sb29rdXAKLSAgICAgICAgLy8gdmFyIGVt
YmVyQXNzZXJ0ID0gRW1iZXIuYXNzZXJ0OwotCi0gICAgICAgIHZhciBmbXQgPSBfX2RlcGVuZGVu
Y3kyX18uZm10OwotCi0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3kz
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVs
cGVyczsKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5NF9fLmdldDsKLSAgICAgICAg
dmFyIGlzR2xvYmFsUGF0aCA9IF9fZGVwZW5kZW5jeTVfXy5pc0dsb2JhbFBhdGg7Ci0gICAgICAg
IHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBJU19CSU5ESU5HID0gX19kZXBlbmRlbmN5N19fLklTX0JJTkRJTkc7Ci0KLSAgICAgICAgLy8g
bGF0ZSBib3VuZCB2aWEgcmVxdWlyZU1vZHVsZSBiZWNhdXNlIG9mIGNpcmN1bGFyIGRlcGVuZGVu
Y2llcy4KLSAgICAgICAgdmFyIHJlc29sdmVIZWxwZXIsCi0gICAgICAgIFNpbXBsZUhhbmRsZWJh
cnNWaWV3OwotCi0gICAgICAgIHZhciBpc0VtcHR5ID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0
Il07Ci0KLSAgICAgICAgdmFyIHNsaWNlID0gW10uc2xpY2UsIG9yaWdpbmFsVGVtcGxhdGUgPSBF
bWJlckhhbmRsZWJhcnMudGVtcGxhdGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIElm
IGEgcGF0aCBzdGFydHMgd2l0aCBhIHJlc2VydmVkIGtleXdvcmQsIHJldHVybnMgdGhlIHJvb3QK
LSAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgdXNlZC4KLQotICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIG5vcm1hbGl6ZVBhdGgKLSAgICAgICAgICAgICAg
QGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0gcm9vdCB7T2JqZWN0fQotICAgICAgICAg
ICAgICBAcGFyYW0gcGF0aCB7U3RyaW5nfQotICAgICAgICAgICAgICBAcGFyYW0gZGF0YSB7SGFz
aH0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocm9vdCwg
cGF0aCwgZGF0YSkgewotICAgICAgICAgICAgdmFyIGtleXdvcmRzID0gKGRhdGEgJiYgZGF0YS5r
ZXl3b3JkcykgfHwge30sCi0gICAgICAgICAgICBrZXl3b3JkLCBpc0tleXdvcmQ7Ci0KLSAgICAg
ICAgICAgIC8vIEdldCB0aGUgZmlyc3Qgc2VnbWVudCBvZiB0aGUgcGF0aC4gRm9yIGV4YW1wbGUs
IGlmIHRoZQotICAgICAgICAgICAgLy8gcGF0aCBpcyAiZm9vLmJhci5iYXoiLCByZXR1cm5zICJm
b28iLgotICAgICAgICAgICAga2V5d29yZCA9IHBhdGguc3BsaXQoJy4nLCAxKVswXTsKLQotICAg
ICAgICAgICAgLy8gVGVzdCB0byBzZWUgaWYgdGhlIGZpcnN0IHBhdGggaXMgYSBrZXl3b3JkIHRo
YXQgaGFzIGJlZW4KLSAgICAgICAgICAgIC8vIHBhc3NlZCBhbG9uZyBpbiB0aGUgdmlldydzIGRh
dGEgaGFzaC4gSWYgc28sIHdlIHdpbGwgdHJlYXQKLSAgICAgICAgICAgIC8vIHRoYXQgb2JqZWN0
IGFzIHRoZSBuZXcgcm9vdC4KLSAgICAgICAgICAgIGlmIChrZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0
eShrZXl3b3JkKSkgewotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHZhbHVlIGluIHRo
ZSB0ZW1wbGF0ZSdzIGRhdGEgaGFzaC4KLSAgICAgICAgICAgICAgICByb290ID0ga2V5d29yZHNb
a2V5d29yZF07Ci0gICAgICAgICAgICAgICAgaXNLZXl3b3JkID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZW50aXJlIHBhdGggaXMgdGhlIHJlc2Vy
dmVkCi0gICAgICAgICAgICAgICAgLy8gd29yZC4gSW4gdGhhdCBjYXNlLCByZXR1cm4gdGhlIG9i
amVjdCBpdHNlbGYuCi0gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09IGtleXdvcmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGF0aCA9ICcnOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFN0cmlwIHRoZSBrZXl3b3JkIGZyb20gdGhlIHBhdGggYW5k
IGxvb2sgdXAKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlbWFpbmRlciBmcm9tIHRoZSBu
ZXdseSBmb3VuZCByb290LgotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIo
a2V5d29yZC5sZW5ndGggKyAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgcm9vdDogcm9vdCwKLSAgICAg
ICAgICAgICAgICBwYXRoOiBwYXRoLAotICAgICAgICAgICAgICAgIGlzS2V5d29yZDogaXNLZXl3
b3JkIAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIExvb2t1cCBib3RoIG9uIHJvb3QgYW5kIG9uIHdpbmRvdy4gSWYgdGhlIHBhdGggc3Rh
cnRzIHdpdGgKLSAgICAgICAgICAgICAgYSBrZXl3b3JkLCB0aGUgY29ycmVzcG9uZGluZyBvYmpl
Y3Qgd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhlCi0gICAgICAgICAgICAgIHRlbXBsYXRlJ3MgZGF0
YSBoYXNoIGFuZCB1c2VkIHRvIHJlc29sdmUgdGhlIHBhdGguCi0KLSAgICAgICAgICAgICAgQG1l
dGhvZCBnZXQKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSByb290IFRoZSBvYmplY3QgdG8gbG9vayB1cCB0aGUgcHJvcGVy
dHkgb24KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gYmUg
bG9va2VkdXAKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIHRlbXBs
YXRlJ3Mgb3B0aW9uIGhhc2gKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGhhbmRs
ZWJhcnNHZXQocm9vdCwgcGF0aCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGRhdGEgPSBv
cHRpb25zICYmIG9wdGlvbnMuZGF0YSwKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9y
bWFsaXplUGF0aChyb290LCBwYXRoLCBkYXRhKSwKLSAgICAgICAgICAgIHZhbHVlOwotCi0KLSAg
ICAgICAgICAgIHJvb3QgPSBub3JtYWxpemVkUGF0aC5yb290OwotICAgICAgICAgICAgcGF0aCA9
IG5vcm1hbGl6ZWRQYXRoLnBhdGg7Ci0KLSAgICAgICAgICAgIHZhbHVlID0gZ2V0KHJvb3QsIHBh
dGgpOwotCi0gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiByb290ICE9PSBF
bWJlci5sb29rdXAgJiYgaXNHbG9iYWxQYXRoKHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgdmFs
dWUgPSBnZXQoRW1iZXIubG9va3VwLCBwYXRoKTsKLSAgICAgICAgICAgIH0KLQotCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgVGhpcyBtZXRob2QgdXNlcyBgRW1iZXIuSGFuZGxlYmFycy5nZXRgIHRvIGxvb2t1cCBhIHZh
bHVlLCB0aGVuIGVuc3VyZXMKLSAgICAgICAgICAgICAgdGhhdCB0aGUgdmFsdWUgaXMgZXNjYXBl
ZCBwcm9wZXJseS4KLQotICAgICAgICAgICAgICBJZiBgdW5lc2NhcGVkYCBpcyBhIHRydXRoeSB2
YWx1ZSB0aGVuIHRoZSBlc2NhcGluZyB3aWxsIG5vdCBiZSBwZXJmb3JtZWQuCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCBnZXRFc2NhcGVkCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxl
YmFycwotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcm9vdCBUaGUgb2JqZWN0IHRvIGxv
b2sgdXAgdGhlIHByb3BlcnR5IG9uCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRo
IFRoZSBwYXRoIHRvIGJlIGxvb2tlZHVwCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBv
cHRpb25zIFRoZSB0ZW1wbGF0ZSdzIG9wdGlvbiBoYXNoCi0gICAgICAgICAgICAgIEBzaW5jZSAx
LjQuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZChyb290LCBw
YXRoLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaGFuZGxlYmFyc0dldChy
b290LCBwYXRoLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8
fCByZXN1bHQgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIiOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIEhhbmRsZWJhcnMuU2Fm
ZVN0cmluZykpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcocmVzdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghb3B0aW9ucy5oYXNoLnVuZXNjYXBlZCkgewot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEhhbmRsZWJhcnMuVXRpbHMuZXNjYXBlRXhwcmVzc2lv
bihyZXN1bHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZ2V0RXNjYXBlZCA9IGdldEVzY2FwZWQ7
Ci0gICAgICAgIGZ1bmN0aW9uIHJlc29sdmVQYXJhbXMoY29udGV4dCwgcGFyYW1zLCBvcHRpb25z
KSB7Ci0gICAgICAgICAgICB2YXIgcmVzb2x2ZWRQYXJhbXMgPSBbXSwgdHlwZXMgPSBvcHRpb25z
LnR5cGVzLCBwYXJhbSwgdHlwZTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBw
YXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVzW2ldOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT09ICdJRCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXJh
bXMucHVzaChoYW5kbGViYXJzR2V0KGNvbnRleHQsIHBhcmFtLCBvcHRpb25zKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXJhbXMucHVz
aChwYXJhbSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gcmVzb2x2ZWRQYXJhbXM7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNf
Xy5yZXNvbHZlUGFyYW1zID0gcmVzb2x2ZVBhcmFtczsKLSAgICAgICAgZnVuY3Rpb24gcmVzb2x2
ZUhhc2goY29udGV4dCwgaGFzaCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIHJlc29sdmVk
SGFzaCA9IHt9LCB0eXBlcyA9IG9wdGlvbnMuaGFzaFR5cGVzLCB0eXBlOwotCi0gICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gaGFzaCkgewotICAgICAgICAgICAgICAgIGlmICghaGFzaC5oYXNP
d25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlc1trZXldOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdJRCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
b2x2ZWRIYXNoW2tleV0gPSBoYW5kbGViYXJzR2V0KGNvbnRleHQsIGhhc2hba2V5XSwgb3B0aW9u
cyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZWRIYXNoW2tleV0gPSBoYXNoW2tleV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRIYXNoOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18ucmVzb2x2ZUhhc2ggPSByZXNvbHZlSGFzaDsgLyoqCi0gICAgICAgICAg
ICAgIFJlZ2lzdGVycyBhIGhlbHBlciBpbiBIYW5kbGViYXJzIHRoYXQgd2lsbCBiZSBjYWxsZWQg
aWYgbm8gcHJvcGVydHkgd2l0aCB0aGUKLSAgICAgICAgICAgICAgZ2l2ZW4gbmFtZSBjYW4gYmUg
Zm91bmQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3QsIGFuZCBubyBoZWxwZXIgd2l0aAot
ICAgICAgICAgICAgICB0aGF0IG5hbWUgaXMgcmVnaXN0ZXJlZC4KLQotICAgICAgICAgICAgICBU
aGlzIHRocm93cyBhbiBleGNlcHRpb24gd2l0aCBhIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdl
IHNvIHRoZSB1c2VyIGNhbgotICAgICAgICAgICAgICB0cmFjayBkb3duIHdoZXJlIHRoZSBwcm9i
bGVtIGlzIGhhcHBlbmluZy4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICBAbWV0aG9kIGhlbHBlck1pc3NpbmcKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGVi
YXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtIYXNofSBvcHRpb25zCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBoZWxwZXJNaXNzaW5nSGVscGVyKHBhdGgpIHsKLSAgICAgICAgICAgIGlmICghcmVzb2x2
ZUhlbHBlcikgewotICAgICAgICAgICAgICAgIHJlc29sdmVIZWxwZXIgPSByZXF1aXJlTW9kdWxl
KCdlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvYmluZGluZycpWydyZXNvbHZlSGVscGVyJ107Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBFUzZUT0RPOiBzdHVwaWQgY2lyY3VsYXIgZGVw
Ci0KLSAgICAgICAgICAgIHZhciBlcnJvciwgdmlldyA9ICIiOwotCi0gICAgICAgICAgICB2YXIg
b3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgICAg
IHZhciBoZWxwZXIgPSByZXNvbHZlSGVscGVyKG9wdGlvbnMuZGF0YS52aWV3LmNvbnRhaW5lciwg
cGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChoZWxwZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVyLmFwcGx5KHRoaXMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGVycm9yID0gIiVAIEhhbmRsZWJhcnMgZXJyb3I6IENvdWxk
IG5vdCBmaW5kIHByb3BlcnR5ICclQCcgb24gb2JqZWN0ICVALiI7Ci0gICAgICAgICAgICBpZiAo
b3B0aW9ucy5kYXRhKSB7Ci0gICAgICAgICAgICAgICAgdmlldyA9IG9wdGlvbnMuZGF0YS52aWV3
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoZm10KGVy
cm9yLCBbdmlldywgcGF0aCwgdGhpc10pKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLmhlbHBlck1pc3NpbmdIZWxwZXIgPSBoZWxwZXJNaXNzaW5nSGVscGVyOyAvKioKLSAgICAg
ICAgICAgICAgUmVnaXN0ZXJzIGEgaGVscGVyIGluIEhhbmRsZWJhcnMgdGhhdCB3aWxsIGJlIGNh
bGxlZCBpZiBubyBwcm9wZXJ0eSB3aXRoIHRoZQotICAgICAgICAgICAgICBnaXZlbiBuYW1lIGNh
biBiZSBmb3VuZCBvbiB0aGUgY3VycmVudCBjb250ZXh0IG9iamVjdCwgYW5kIG5vIGhlbHBlciB3
aXRoCi0gICAgICAgICAgICAgIHRoYXQgbmFtZSBpcyByZWdpc3RlcmVkLgotCi0gICAgICAgICAg
ICAgIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aXRoIGEgbW9yZSBoZWxwZnVsIGVycm9yIG1l
c3NhZ2Ugc28gdGhlIHVzZXIgY2FuCi0gICAgICAgICAgICAgIHRyYWNrIGRvd24gd2hlcmUgdGhl
IHByb2JsZW0gaXMgaGFwcGVuaW5nLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAg
ICAgICAgIEBtZXRob2QgaGVscGVyTWlzc2luZwotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhh
bmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAotICAg
ICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGJsb2NrSGVscGVyTWlzc2luZ0hlbHBlcihwYXRoKSB7Ci0gICAgICAgICAgICBp
ZiAoIXJlc29sdmVIZWxwZXIpIHsKLSAgICAgICAgICAgICAgICByZXNvbHZlSGVscGVyID0gcmVx
dWlyZU1vZHVsZSgnZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL2JpbmRpbmcnKVsncmVzb2x2ZUhl
bHBlciddOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRVM2VE9ETzogc3R1cGlkIGNp
cmN1bGFyIGRlcAotCi0gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVu
dHMubGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiYGJsb2NrSGVscGVy
TWlzc2luZ2Agd2FzIGludm9rZWQgd2l0aG91dCBhIGhlbHBlciBuYW1lLCB3aGljaCAiICsKLSAg
ICAgICAgICAgICJpcyBtb3N0IGxpa2VseSBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSB2
ZXJzaW9uIG9mICIgKwotICAgICAgICAgICAgIkVtYmVyLmpzIHlvdSdyZSBydW5uaW5nIG5vdyBh
bmQgdGhlIG9uZSB1c2VkIHRvIHByZWNvbXBpbGUgeW91ciAiICsKLSAgICAgICAgICAgICJ0ZW1w
bGF0ZXMuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHZlcnNpb24gb2YgIiArCi0gICAgICAgICAgICAi
YGVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXJgIHlvdSdyZSB1c2luZyBpcyB1cCB0byBkYXRlLiIs
IHBhdGgpOwotCi0gICAgICAgICAgICB2YXIgaGVscGVyID0gcmVzb2x2ZUhlbHBlcihvcHRpb25z
LmRhdGEudmlldy5jb250YWluZXIsIHBhdGgpOwotCi0gICAgICAgICAgICBpZiAoaGVscGVyKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5hcHBseSh0aGlzLCBzbGljZS5jYWxsKGFy
Z3VtZW50cywgMSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVycy5oZWxwZXJNaXNzaW5nLmNhbGwodGhpcywgcGF0aCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5ibG9ja0hlbHBlck1pc3NpbmdIZWxw
ZXIgPSBibG9ja0hlbHBlck1pc3NpbmdIZWxwZXI7IC8qKgotICAgICAgICAgICAgICBSZWdpc3Rl
ciBhIGJvdW5kIGhhbmRsZWJhcnMgaGVscGVyLiBCb3VuZCBoZWxwZXJzIGJlaGF2ZSBzaW1pbGFy
bHkgdG8gcmVndWxhcgotICAgICAgICAgICAgICBoYW5kbGViYXJzIGhlbHBlcnMsIHdpdGggdGhl
IGFkZGVkIGFiaWxpdHkgdG8gcmUtcmVuZGVyIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YQotICAg
ICAgICAgICAgICBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgICMjIFNpbXBsZSBleGFtcGxlCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5IYW5kbGVi
YXJzLnJlZ2lzdGVyQm91bmRIZWxwZXIoJ2NhcGl0YWxpemUnLCBmdW5jdGlvbih2YWx1ZSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5TdHJpbmcuY2FwaXRhbGl6ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUg
YWJvdmUgYm91bmQgaGVscGVyIGNhbiBiZSB1c2VkIGluc2lkZSBvZiB0ZW1wbGF0ZXMgYXMgZm9s
bG93czoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7Y2Fw
aXRhbGl6ZSBuYW1lfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4gdGhp
cyBjYXNlLCB3aGVuIHRoZSBgbmFtZWAgcHJvcGVydHkgb2YgdGhlIHRlbXBsYXRlJ3MgY29udGV4
dCBjaGFuZ2VzLAotICAgICAgICAgICAgICB0aGUgcmVuZGVyZWQgdmFsdWUgb2YgdGhlIGhlbHBl
ciB3aWxsIHVwZGF0ZSB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgotCi0gICAgICAgICAgICAgICMj
IEV4YW1wbGUgd2l0aCBvcHRpb25zCi0KLSAgICAgICAgICAgICAgTGlrZSBub3JtYWwgaGFuZGxl
YmFycyBoZWxwZXJzLCBib3VuZCBoZWxwZXJzIGhhdmUgYWNjZXNzIHRvIHRoZSBvcHRpb25zCi0g
ICAgICAgICAgICAgIHBhc3NlZCBpbnRvIHRoZSBoZWxwZXIgY2FsbC4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkhhbmRsZWJhcnMucmVnaXN0ZXJC
b3VuZEhlbHBlcigncmVwZWF0JywgZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgY291bnQgPSBvcHRpb25zLmhhc2guY291bnQ7Ci0gICAgICAgICAgICAgICAg
dmFyIGEgPSBbXTsKLSAgICAgICAgICAgICAgICB3aGlsZShhLmxlbmd0aCA8IGNvdW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGEucHVzaCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiBhLmpvaW4oJycpOwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyBoZWxwZXIgY291bGQgYmUgdXNlZCBp
biBhIHRlbXBsYXRlIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwot
ICAgICAgICAgICAgICB7e3JlcGVhdCB0ZXh0IGNvdW50PTN9fQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAjIyBFeGFtcGxlIHdpdGggYm91bmQgb3B0aW9ucwotCi0gICAgICAg
ICAgICAgIEJvdW5kIGhhc2ggb3B0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEV4YW1wbGU6Ci0K
LSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3JlcGVhdCB0ZXh0
IGNvdW50PW51bVJlcGVhdHN9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJ
biB0aGlzIGV4YW1wbGUsIGNvdW50IHdpbGwgYmUgYm91bmQgdG8gdGhlIHZhbHVlIG9mCi0gICAg
ICAgICAgICAgIHRoZSBgbnVtUmVwZWF0c2AgcHJvcGVydHkgb24gdGhlIGNvbnRleHQuIElmIHRo
YXQgcHJvcGVydHkKLSAgICAgICAgICAgICAgY2hhbmdlcywgdGhlIGhlbHBlciB3aWxsIGJlIHJl
LXJlbmRlcmVkLgotCi0gICAgICAgICAgICAgICMjIEV4YW1wbGUgd2l0aCBleHRyYSBkZXBlbmRl
bmNpZXMKLQotICAgICAgICAgICAgICBUaGUgYEVtYmVyLkhhbmRsZWJhcnMucmVnaXN0ZXJCb3Vu
ZEhlbHBlcmAgbWV0aG9kIHRha2VzIGEgdmFyaWFibGUgbGVuZ3RoCi0gICAgICAgICAgICAgIHRo
aXJkIHBhcmFtZXRlciB3aGljaCBpbmRpY2F0ZXMgZXh0cmEgZGVwZW5kZW5jaWVzIG9uIHRoZSBw
YXNzZWQgaW4gdmFsdWUuCi0gICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBoYW5kbGViYXJz
IGhlbHBlciB0byB1cGRhdGUgd2hlbiB0aGVzZSBkZXBlbmRlbmNpZXMgY2hhbmdlLgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5y
ZWdpc3RlckJvdW5kSGVscGVyKCdjYXBpdGFsaXplTmFtZScsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgnbmFtZScpLnRvVXBwZXJDYXNlKCk7Ci0g
ICAgICAgICAgICAgIH0sICduYW1lJyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICMjIEV4YW1wbGUgd2l0aCBtdWx0aXBsZSBib3VuZCBwcm9wZXJ0aWVzCi0KLSAgICAgICAg
ICAgICAgYEVtYmVyLkhhbmRsZWJhcnMucmVnaXN0ZXJCb3VuZEhlbHBlcmAgc3VwcG9ydHMgYmlu
ZGluZyB0bwotICAgICAgICAgICAgICBtdWx0aXBsZSBwcm9wZXJ0aWVzLCBlLmcuOgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5y
ZWdpc3RlckJvdW5kSGVscGVyKCdjb25jYXRlbmF0ZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
IDAsIC0xKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJ3x8Jyk7Ci0gICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaGljaCBh
bGxvd3MgZm9yIHRlbXBsYXRlIHN5bnRheCBzdWNoIGFzIGB7e2NvbmNhdGVuYXRlIHByb3AxIHBy
b3AyfX1gIG9yCi0gICAgICAgICAgICAgIGB7e2NvbmNhdGVuYXRlIHByb3AxIHByb3AyIHByb3Az
fX1gLiBJZiBhbnkgb2YgdGhlIHByb3BlcnRpZXMgY2hhbmdlLAotICAgICAgICAgICAgICB0aGUg
aGVscGVyIHdpbGwgcmUtcmVuZGVyLiAgTm90ZSB0aGF0IGRlcGVuZGVuY3kga2V5cyBjYW5ub3Qg
YmUKLSAgICAgICAgICAgICAgdXNpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBtdWx0aS1wcm9wZXJ0
eSBoZWxwZXJzLCBzaW5jZSBpdCBpcyBhbWJpZ3VvdXMKLSAgICAgICAgICAgICAgd2hpY2ggcHJv
cGVydHkgdGhlIGRlcGVuZGVudCBrZXlzIHdvdWxkIGJlbG9uZyB0by4KLQotICAgICAgICAgICAg
ICAjIyBVc2Ugd2l0aCB1bmJvdW5kIGhlbHBlcgotCi0gICAgICAgICAgICAgIFRoZSBge3t1bmJv
dW5kfX1gIGhlbHBlciBjYW4gYmUgdXNlZCB3aXRoIGJvdW5kIGhlbHBlciBpbnZvY2F0aW9ucwot
ICAgICAgICAgICAgICB0byByZW5kZXIgdGhlbSBpbiB0aGVpciB1bmJvdW5kIGZvcm0sIGUuZy4K
LQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dW5ib3VuZCBj
YXBpdGFsaXplIG5hbWV9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbiB0
aGlzIGV4YW1wbGUsIGlmIHRoZSBuYW1lIHByb3BlcnR5IGNoYW5nZXMsIHRoZSBoZWxwZXIKLSAg
ICAgICAgICAgICAgd2lsbCBub3QgcmUtcmVuZGVyLgotCi0gICAgICAgICAgICAgICMjIFVzZSB3
aXRoIGJsb2NrcyBub3Qgc3VwcG9ydGVkCi0KLSAgICAgICAgICAgICAgQm91bmQgaGVscGVycyBk
byBub3Qgc3VwcG9ydCB1c2Ugd2l0aCBIYW5kbGViYXJzIGJsb2NrcyBvcgotICAgICAgICAgICAg
ICB0aGUgYWRkaXRpb24gb2YgY2hpbGQgdmlld3Mgb2YgYW55IGtpbmQuCi0KLSAgICAgICAgICAg
ICAgQG1ldGhvZCByZWdpc3RlckJvdW5kSGVscGVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIu
SGFuZGxlYmFycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvbgotICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gZGVwZW5kZW50S2V5cyoKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHJl
Z2lzdGVyQm91bmRIZWxwZXIobmFtZSwgZm4pIHsKLSAgICAgICAgICAgIHZhciBib3VuZEhlbHBl
ckFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksCi0gICAgICAgICAgICBib3VuZEZuID0g
bWFrZUJvdW5kSGVscGVyLmFwcGx5KHRoaXMsIGJvdW5kSGVscGVyQXJncyk7Ci0gICAgICAgICAg
ICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIobmFtZSwgYm91bmRGbik7Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZWdpc3RlckJvdW5kSGVscGVyID0gcmVnaXN0ZXJC
b3VuZEhlbHBlcjsgLyoqCi0gICAgICAgICAgICAgIEEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkg
YHJlZ2lzdGVyQm91bmRIZWxwZXJgLiBUYWtlcyB0aGUKLSAgICAgICAgICAgICAgcHJvdmlkZWQg
SGFuZGxlYmFycyBoZWxwZXIgZnVuY3Rpb24gZm4gYW5kIHJldHVybnMgaXQgaW4gd3JhcHBlZAot
ICAgICAgICAgICAgICBib3VuZCBoZWxwZXIgZm9ybS4KLQotICAgICAgICAgICAgICBUaGUgbWFp
biB1c2UgY2FzZSBmb3IgdXNpbmcgdGhpcyBvdXRzaWRlIG9mIGByZWdpc3RlckJvdW5kSGVscGVy
YAotICAgICAgICAgICAgICBpcyBmb3IgcmVnaXN0ZXJpbmcgaGVscGVycyBvbiB0aGUgY29udGFp
bmVyOgotCi0gICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgIHZhciBib3VuZEhlbHBl
ckZuID0gRW1iZXIuSGFuZGxlYmFycy5tYWtlQm91bmRIZWxwZXIoZnVuY3Rpb24od29yZCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiB3b3JkLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignaGVscGVyOm15LWJvdW5k
LWhlbHBlcicsIGJvdW5kSGVscGVyRm4pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgaWYgdGhlIGhlbHBlciBmdW5jdGlvbiBoYWRuJ3Qg
YmVlbiB3cmFwcGVkIGluCi0gICAgICAgICAgICAgIGBtYWtlQm91bmRIZWxwZXJgLCB0aGUgcmVn
aXN0ZXJlZCBoZWxwZXIgd291bGQgYmUgdW5ib3VuZC4KLQotICAgICAgICAgICAgICBAbWV0aG9k
IG1ha2VCb3VuZEhlbHBlcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuY3Rpb24KLSAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleXMqCi0gICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWFrZUJvdW5kSGVscGVyKGZuKSB7Ci0g
ICAgICAgICAgICBpZiAoIVNpbXBsZUhhbmRsZWJhcnNWaWV3KSB7Ci0gICAgICAgICAgICAgICAg
U2ltcGxlSGFuZGxlYmFyc1ZpZXcgPSByZXF1aXJlTW9kdWxlKCdlbWJlci1oYW5kbGViYXJzL3Zp
ZXdzL2hhbmRsZWJhcnNfYm91bmRfdmlldycpWydTaW1wbGVIYW5kbGViYXJzVmlldyddOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gRVM2VE9ETzogc3R1cGlkIGNpcmN1bGFyIGRlcAot
Ci0gICAgICAgICAgICB2YXIgZGVwZW5kZW50S2V5cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gaGVscGVyKCkgewotICAgICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0aWVzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKSwKLSAgICAgICAgICAg
ICAgICBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydGllcy5sZW5ndGgsCi0gICAgICAgICAgICAgICAg
b3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sCi0gICAgICAgICAgICAg
ICAgbm9ybWFsaXplZFByb3BlcnRpZXMgPSBbXSwKLSAgICAgICAgICAgICAgICBkYXRhID0gb3B0
aW9ucy5kYXRhLAotICAgICAgICAgICAgICAgIHR5cGVzID0gZGF0YS5pc1VuYm91bmQgPyBzbGlj
ZS5jYWxsKG9wdGlvbnMudHlwZXMsIDEpIDogb3B0aW9ucy50eXBlcywKLSAgICAgICAgICAgICAg
ICBoYXNoID0gb3B0aW9ucy5oYXNoLAotICAgICAgICAgICAgICAgIHZpZXcgPSBkYXRhLnZpZXcs
Ci0gICAgICAgICAgICAgICAgY29udGV4dHMgPSBvcHRpb25zLmNvbnRleHRzLAotICAgICAgICAg
ICAgICAgIGN1cnJlbnRDb250ZXh0ID0gKGNvbnRleHRzICYmIGNvbnRleHRzLmxlbmd0aCkgPyBj
b250ZXh0c1swXSA6IHRoaXMsCi0gICAgICAgICAgICAgICAgcHJlZml4UGF0aEZvckRlcGVuZGVu
dEtleXMgPSAnJywKLSAgICAgICAgICAgICAgICBsb2MsIGxlbiwgaGFzaE9wdGlvbiwKLSAgICAg
ICAgICAgICAgICBib3VuZE9wdGlvbiwgcHJvcGVydHksCi0gICAgICAgICAgICAgICAgbm9ybWFs
aXplZFZhbHVlID0gU2ltcGxlSGFuZGxlYmFyc1ZpZXcucHJvdG90eXBlLm5vcm1hbGl6ZWRWYWx1
ZTsKLQotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgicmVnaXN0ZXJCb3VuZEhlbHBlci1n
ZW5lcmF0ZWQgaGVscGVycyBkbyBub3Qgc3VwcG9ydCB1c2Ugd2l0aCBIYW5kbGViYXJzIGJsb2Nr
cy4iLCAhb3B0aW9ucy5mbik7Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlY3QgYm91bmQgb3B0
aW9ucyAoZS5nLiBjb3VudEJpbmRpbmc9Im90aGVyQ291bnQiKQotICAgICAgICAgICAgICAgIHZh
ciBib3VuZE9wdGlvbnMgPSBoYXNoLmJvdW5kT3B0aW9ucyA9IHt9OwotICAgICAgICAgICAgICAg
IGZvciAoaGFzaE9wdGlvbiBpbiBoYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChJU19C
SU5ESU5HLnRlc3QoaGFzaE9wdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExv
cCBvZmYgJ0JpbmRpbmcnIHN1ZmZpeC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kT3B0
aW9uc1toYXNoT3B0aW9uLnNsaWNlKDAsIC03KV0gPSBoYXNoW2hhc2hPcHRpb25dOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
RXhwb3NlIHByb3BlcnR5IG5hbWVzIG9uIGRhdGEucHJvcGVydGllcyBvYmplY3QuCi0gICAgICAg
ICAgICAgICAgdmFyIHdhdGNoZWRQcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICAgICAgZGF0
YS5wcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICAgICAgZm9yIChsb2MgPSAwOyBsb2MgPCBu
dW1Qcm9wZXJ0aWVzOyArK2xvYykgewotICAgICAgICAgICAgICAgICAgICBkYXRhLnByb3BlcnRp
ZXMucHVzaChwcm9wZXJ0aWVzW2xvY10pOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNb
bG9jXSA9PT0gJ0lEJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRQ
cm9wID0gbm9ybWFsaXplUGF0aChjdXJyZW50Q29udGV4dCwgcHJvcGVydGllc1tsb2NdLCBkYXRh
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wZXJ0aWVzLnB1c2gobm9y
bWFsaXplZFByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlZFByb3BlcnRpZXMu
cHVzaChub3JtYWxpemVkUHJvcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc1VuYm91bmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcGVydGllcy5wdXNoKHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aDogcHJvcGVydGllc1tsb2NdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wZXJ0aWVzLnB1c2gobnVsbCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIGhlbHBlciBp
bnZvY2F0aW9uIGlzIHByZWNlZGVkIGJ5IGB1bmJvdW5kYCwgZS5nLgotICAgICAgICAgICAgICAg
IC8vIHt7dW5ib3VuZCBteUhlbHBlciBmb299fQotICAgICAgICAgICAgICAgIGlmIChkYXRhLmlz
VW5ib3VuZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVVbmJvdW5kSGVs
cGVyKHRoaXMsIGZuLCBub3JtYWxpemVkUHJvcGVydGllcywgb3B0aW9ucyk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGJpbmRWaWV3ID0gbmV3IFNpbXBsZUhhbmRs
ZWJhcnNWaWV3KG51bGwsIG51bGwsICFvcHRpb25zLmhhc2gudW5lc2NhcGVkLCBvcHRpb25zLmRh
dGEpOwotCi0gICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgU2ltcGxlSGFuZGxlYmFyc1ZpZXcn
cyBtZXRob2QgZm9yIGdlbmVyYXRpbmcgdGhlIHZpZXcncyBjb250ZW50LgotICAgICAgICAgICAg
ICAgIGJpbmRWaWV3Lm5vcm1hbGl6ZWRWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgYXJncyA9IFtdLCBib3VuZE9wdGlvbjsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBDb3B5IG92ZXIgYm91bmQgaGFzaCBvcHRpb25zLgotICAgICAgICAgICAgICAgICAgICBm
b3IgKGJvdW5kT3B0aW9uIGluIGJvdW5kT3B0aW9ucykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFib3VuZE9wdGlvbnMuaGFzT3duUHJvcGVydHkoYm91bmRPcHRpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IG5vcm1hbGl6ZVBhdGgoY3Vy
cmVudENvbnRleHQsIGJvdW5kT3B0aW9uc1tib3VuZE9wdGlvbl0sIGRhdGEpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZFZpZXcucGF0aCA9IHByb3BlcnR5LnBhdGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBiaW5kVmlldy5wYXRoUm9vdCA9IHByb3BlcnR5LnJvb3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBoYXNoW2JvdW5kT3B0aW9uXSA9IG5vcm1hbGl6ZWRWYWx1ZS5jYWxs
KGJpbmRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAobG9jID0gMDsgbG9jIDwgbnVtUHJvcGVydGllczsgKytsb2MpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5ID0gbm9ybWFsaXplZFByb3BlcnRpZXNbbG9jXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpbmRWaWV3LnBhdGggPSBwcm9wZXJ0eS5wYXRoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpbmRWaWV3LnBhdGhSb290ID0gcHJvcGVydHkucm9vdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzLnB1c2gobm9ybWFsaXplZFZhbHVlLmNhbGwoYmluZFZpZXcp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncy5wdXNoKHByb3BlcnRpZXNbbG9jXSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJncy5w
dXNoKG9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFJ1biB0aGUgc3VwcGxpZWQg
aGVscGVyIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoY3Vy
cmVudENvbnRleHQsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAg
ICB2aWV3LmFwcGVuZENoaWxkKGJpbmRWaWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIEFzc2Vt
YmxlIGxpc3Qgb2Ygd2F0Y2hlZCBwcm9wZXJ0aWVzIHRoYXQnbGwgcmUtcmVuZGVyIHRoaXMgaGVs
cGVyLgotICAgICAgICAgICAgICAgIGZvciAoYm91bmRPcHRpb24gaW4gYm91bmRPcHRpb25zKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3VuZE9wdGlvbnMuaGFzT3duUHJvcGVydHkoYm91
bmRPcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVkUHJvcGVydGllcy5w
dXNoKG5vcm1hbGl6ZVBhdGgoY3VycmVudENvbnRleHQsIGJvdW5kT3B0aW9uc1tib3VuZE9wdGlv
bl0sIGRhdGEpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIE9ic2VydmUgZWFjaCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAg
ICBmb3IgKGxvYyA9IDAsIGxlbiA9IHdhdGNoZWRQcm9wZXJ0aWVzLmxlbmd0aDsgbG9jIDwgbGVu
OyArK2xvYykgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHdhdGNoZWRQcm9wZXJ0
aWVzW2xvY107Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihwcm9w
ZXJ0eS5yb290LCBwcm9wZXJ0eS5wYXRoLCBiaW5kVmlldywgYmluZFZpZXcucmVyZW5kZXIpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlc1swXSAhPT0gJ0lE
JyB8fCBub3JtYWxpemVkUHJvcGVydGllcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFk
ZCBkZXBlbmRlbnQga2V5IG9ic2VydmVycyB0byB0aGUgZmlyc3QgcGFyYW0KLSAgICAgICAgICAg
ICAgICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRQcm9wZXJ0aWVzWzBdLAotICAgICAgICAg
ICAgICAgIHBhdGhSb290ID0gbm9ybWFsaXplZC5yb290LAotICAgICAgICAgICAgICAgIHBhdGgg
PSBub3JtYWxpemVkLnBhdGg7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHkocGF0aCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4UGF0aEZvckRlcGVuZGVudEtleXMgPSBwYXRo
ICsgJy4nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IGRlcGVuZGVudEtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihwYXRoUm9vdCwgcHJlZml4UGF0aEZvckRlcGVu
ZGVudEtleXMgKyBkZXBlbmRlbnRLZXlzW2ldLCBiaW5kVmlldywgYmluZFZpZXcucmVyZW5kZXIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGVscGVy
Ll9yYXdGdW5jdGlvbiA9IGZuOwotICAgICAgICAgICAgcmV0dXJuIGhlbHBlcjsKLSAgICAgICAg
fQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZW5kZXJzIHRoZSB1bmJvdW5kIGZvcm0g
b2YgYW4gb3RoZXJ3aXNlIGJvdW5kIGhlbHBlciBmdW5jdGlvbi4KLQotICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGV2YWx1YXRlVW5ib3VuZEhlbHBlcgotICAg
ICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmbgotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gY29udGV4dAotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBub3JtYWxpemVkUHJv
cGVydGllcwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucwotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZXZhbHVhdGVVbmJvdW5kSGVscGVyKGNvbnRleHQsIGZu
LCBub3JtYWxpemVkUHJvcGVydGllcywgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBbXSwKLSAgICAgICAgICAgIGhhc2ggPSBvcHRpb25zLmhhc2gsCi0gICAgICAgICAgICBib3Vu
ZE9wdGlvbnMgPSBoYXNoLmJvdW5kT3B0aW9ucywKLSAgICAgICAgICAgIHR5cGVzID0gc2xpY2Uu
Y2FsbChvcHRpb25zLnR5cGVzLCAxKSwKLSAgICAgICAgICAgIGxvYywKLSAgICAgICAgICAgIGxl
biwKLSAgICAgICAgICAgIHByb3BlcnR5LAotICAgICAgICAgICAgcHJvcGVydHlUeXBlLAotICAg
ICAgICAgICAgYm91bmRPcHRpb247Ci0KLSAgICAgICAgICAgIGZvciAoYm91bmRPcHRpb24gaW4g
Ym91bmRPcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFib3VuZE9wdGlvbnMuaGFzT3du
UHJvcGVydHkoYm91bmRPcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBoYXNoW2JvdW5kT3B0aW9uXSA9IGhh
bmRsZWJhcnNHZXQoY29udGV4dCwgYm91bmRPcHRpb25zW2JvdW5kT3B0aW9uXSwgb3B0aW9ucyk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAobG9jID0gMCwgbGVuID0gbm9ybWFs
aXplZFByb3BlcnRpZXMubGVuZ3RoOyBsb2MgPCBsZW47ICsrbG9jKSB7Ci0gICAgICAgICAgICAg
ICAgcHJvcGVydHkgPSBub3JtYWxpemVkUHJvcGVydGllc1tsb2NdOwotICAgICAgICAgICAgICAg
IHByb3BlcnR5VHlwZSA9IHR5cGVzW2xvY107Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
VHlwZSA9PT0gIklEIikgewotICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goaGFuZGxlYmFy
c0dldChwcm9wZXJ0eS5yb290LCBwcm9wZXJ0eS5wYXRoLCBvcHRpb25zKSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHByb3BlcnR5LnBh
dGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3Mu
cHVzaChvcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmdz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBPdmVycmlkZXMgSGFu
ZGxlYmFycy50ZW1wbGF0ZSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaAotICAgICAgICAgICAg
ICB1c2VyLWNyZWF0ZWQsIHRvcC1sZXZlbCB0ZW1wbGF0ZXMgZnJvbSBpbm5lciBjb250ZXh0cy4K
LQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHRlbXBsYXRl
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycwotICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gc3BlYwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdGVtcGxh
dGUoc3BlYykgewotICAgICAgICAgICAgdmFyIHQgPSBvcmlnaW5hbFRlbXBsYXRlKHNwZWMpOwot
ICAgICAgICAgICAgdC5pc1RvcCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnRlbXBsYXRlID0gdGVtcGxhdGU7Ci0gICAgICAg
IF9fZXhwb3J0c19fLm5vcm1hbGl6ZVBhdGggPSBub3JtYWxpemVQYXRoOwotICAgICAgICBfX2V4
cG9ydHNfXy5tYWtlQm91bmRIZWxwZXIgPSBtYWtlQm91bmRIZWxwZXI7Ci0gICAgICAgIF9fZXhw
b3J0c19fLmhhbmRsZWJhcnNHZXQgPSBoYW5kbGViYXJzR2V0OwotICAgICAgICBfX2V4cG9ydHNf
Xy5ldmFsdWF0ZVVuYm91bmRIZWxwZXIgPSBldmFsdWF0ZVVuYm91bmRIZWxwZXI7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvYmluZGluZyIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAiZW1iZXItbWV0
YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRh
bC91dGlscyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXItbWV0YWwvcGxh
dGZvcm0iLCAiZW1iZXItbWV0YWwvaXNfbm9uZSIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0
aWxzIiwgImVtYmVyLW1ldGFsL2FycmF5IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXciLCAiZW1i
ZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLCAiZW1iZXItbWV0YWwv
YmluZGluZyIsICJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5IiwgImVtYmVyLWhhbmRsZWJhcnMv
ZXh0IiwgImVtYmVyLXJ1bnRpbWUva2V5cyIsICJlbWJlci1oYW5kbGViYXJzL3ZpZXdzL2hhbmRs
ZWJhcnNfYm91bmRfdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5
MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBf
X2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVu
ZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5
MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRf
XywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywg
X19kZXBlbmRlbmN5MThfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJt
b2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1i
ZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0
LCBFbWJlci53YXJuLCB1dWlkCi0gICAgICAgIC8vIHZhciBlbWJlckFzc2VydCA9IEVtYmVyLmFz
c2VydCwgRW1iZXIud2FybiA9IEVtYmVyLndhcm47Ci0KLSAgICAgICAgdmFyIEVtYmVySGFuZGxl
YmFycyA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0ID0gX19k
ZXBlbmRlbmN5M19fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTRfXy5zZXQ7
Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVwZW5kZW5jeTVfXy5hcHBseTsKLSAgICAgICAgdmFy
IHV1aWQgPSBfX2RlcGVuZGVuY3k1X18udXVpZDsKLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5k
ZW5jeTZfXy5mbXQ7Ci0gICAgICAgIHZhciBvX2NyZWF0ZSA9IF9fZGVwZW5kZW5jeTdfXy5jcmVh
dGU7Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEVudW1lcmFibGVVdGlscyA9IF9fZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTEwX18uZm9yRWFjaDsKLSAgICAgICAg
dmFyIFZpZXcgPSBfX2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBydW4g
PSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciByZW1vdmVPYnNlcnZl
ciA9IF9fZGVwZW5kZW5jeTEzX18ucmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBpc0dsb2Jh
bFBhdGggPSBfX2RlcGVuZGVuY3kxNF9fLmlzR2xvYmFsUGF0aDsKLSAgICAgICAgdmFyIGVtYmVy
QmluZCA9IF9fZGVwZW5kZW5jeTE0X18uYmluZDsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9fZGVw
ZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVu
Y3k1X18uaXNBcnJheTsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXRFc2NhcGVkID0gX19kZXBl
bmRlbmN5MTZfXy5nZXRFc2NhcGVkOwotICAgICAgICB2YXIga2V5cyA9IF9fZGVwZW5kZW5jeTE3
X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgX0hhbmRsZWJhcnNCb3VuZFZpZXcgPSBfX2Rl
cGVuZGVuY3kxOF9fLl9IYW5kbGViYXJzQm91bmRWaWV3OwotICAgICAgICB2YXIgU2ltcGxlSGFu
ZGxlYmFyc1ZpZXcgPSBfX2RlcGVuZGVuY3kxOF9fLlNpbXBsZUhhbmRsZWJhcnNWaWV3OwotCi0g
ICAgICAgIHZhciBub3JtYWxpemVQYXRoID0gX19kZXBlbmRlbmN5MTZfXy5ub3JtYWxpemVQYXRo
OwotICAgICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTE2X18uaGFuZGxlYmFy
c0dldDsKLSAgICAgICAgdmFyIGdldEVzY2FwZWQgPSBfX2RlcGVuZGVuY3kxNl9fLmdldEVzY2Fw
ZWQ7Ci0KLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k1X18uZ3VpZEZvcjsKLSAg
ICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTVfXy50eXBlT2Y7Ci0KLSAgICAgICAgdmFy
IGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVscGVyczsKLSAgICAgICAgdmFyIFNhZmVTdHJp
bmcgPSBFbWJlckhhbmRsZWJhcnMuU2FmZVN0cmluZzsKLQotICAgICAgICBmdW5jdGlvbiBleGlz
dHModmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiAhaXNOb25lKHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBXaXRoVmlldyA9IF9IYW5kbGViYXJzQm91bmRWaWV3LmV4dGVuZCh7
Ci0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29u
dHJvbGxlcjsKLQotICAgICAgICAgICAgICAgIGFwcGx5KHRoaXMsIHRoaXMuX3N1cGVyLCBhcmd1
bWVudHMpOwotCi0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmRzID0gdGhpcy50ZW1wbGF0ZURh
dGEua2V5d29yZHM7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmROYW1lID0gdGhpcy50ZW1w
bGF0ZUhhc2gua2V5d29yZE5hbWU7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmRQYXRoID0g
dGhpcy50ZW1wbGF0ZUhhc2gua2V5d29yZFBhdGg7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRy
b2xsZXJOYW1lID0gdGhpcy50ZW1wbGF0ZUhhc2guY29udHJvbGxlcjsKLSAgICAgICAgICAgICAg
ICB2YXIgcHJlc2VydmVDb250ZXh0ID0gdGhpcy5wcmVzZXJ2ZUNvbnRleHQ7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoY29udHJvbGxlck5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzQ29udGV4dCA9IHRoaXMucHJldmlvdXNDb250ZXh0OwotICAgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVyID0gdGhpcy5jb250YWluZXIubG9va3VwRmFjdG9yeSgnY29udHJvbGxlcjon
ICsgY29udHJvbGxlck5hbWUpLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRDb250cm9sbGVyOiBwcmV2aW91c0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICB0
YXJnZXQ6IHByZXZpb3VzQ29udGV4dAotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZWRDb250cm9sbGVyID0gY29udHJvbGxlcjsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQ29udGV4dCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZXQoJ2NvbnRyb2xsZXInLCBjb250cm9sbGVyKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZU5vcm1hbGl6ZXJGdW5jID0gZnVuY3Rpb24ocmVz
dWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zZXQoJ21vZGVs
JywgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxl
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlclBhdGggPSBqUXVlcnku
ZXhwYW5kbyArIGd1aWRGb3IoY29udHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBr
ZXl3b3Jkc1tjb250cm9sbGVyUGF0aF0gPSBjb250cm9sbGVyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZW1iZXJCaW5kKGtleXdvcmRzLCBjb250cm9sbGVyUGF0aCArICcubW9kZWwnLCBrZXl3
b3JkUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkUGF0aCA9IGNvbnRyb2xs
ZXJQYXRoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKHByZXNlcnZlQ29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBl
bWJlckJpbmQoa2V5d29yZHMsIGtleXdvcmROYW1lLCBrZXl3b3JkUGF0aCk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fZ2VuZXJhdGVkQ29udHJvbGxlcikgewotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9nZW5lcmF0ZWRDb250cm9sbGVyLmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIEJpbmRzIGEgcHJvcGVydHkg
aW50byB0aGUgRE9NLiBUaGlzIHdpbGwgY3JlYXRlIGEgaG9vayBpbiBET00gdGhhdCB0aGUKLSAg
ICAgICAgLy8gS1ZPIHN5c3RlbSB3aWxsIGxvb2sgZm9yIGFuZCB1cGRhdGUgaWYgdGhlIHByb3Bl
cnR5IGNoYW5nZXMuCi0gICAgICAgIGZ1bmN0aW9uIGJpbmQocHJvcGVydHksIG9wdGlvbnMsIHBy
ZXNlcnZlQ29udGV4dCwgc2hvdWxkRGlzcGxheSwgdmFsdWVOb3JtYWxpemVyLCBjaGlsZFByb3Bl
cnRpZXMpIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLAotICAgICAgICAg
ICAgZm4gPSBvcHRpb25zLmZuLAotICAgICAgICAgICAgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJz
ZSwKLSAgICAgICAgICAgIHZpZXcgPSBkYXRhLnZpZXcsCi0gICAgICAgICAgICBub3JtYWxpemVk
LCBvYnNlcnZlciwgaTsKLQotICAgICAgICAgICAgLy8gd2UgcmVsaWVkIG9uIHRoZSBiZWhhdmlv
ciBvZiBjYWxsaW5nIHdpdGhvdXQKLSAgICAgICAgICAgIC8vIGNvbnRleHQgdG8gbWVhbiB0aGlz
ID09PSB3aW5kb3csIGJ1dCB3aGVuIHJ1bm5pbmcKLSAgICAgICAgICAgIC8vICJ1c2Ugc3RyaWN0
IiwgaXQncyBwb3NzaWJsZSBmb3IgdGhpcyB0byA9PT0gdW5kZWZpbmVkOwotICAgICAgICAgICAg
dmFyIGN1cnJlbnRDb250ZXh0ID0gdGhpcyB8fCB3aW5kb3c7Ci0KLSAgICAgICAgICAgIG5vcm1h
bGl6ZWQgPSBub3JtYWxpemVQYXRoKGN1cnJlbnRDb250ZXh0LCBwcm9wZXJ0eSwgZGF0YSk7Ci0K
LSAgICAgICAgICAgIC8vIFNldCB1cCBvYnNlcnZlcnMgZm9yIG9ic2VydmFibGUgb2JqZWN0cwot
ICAgICAgICAgICAgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgdGhpcykgewotICAgICAgICAgICAg
ICAgIGlmIChkYXRhLmluc2lkZUdyb3VwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVy
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodmlldy5fY29u
dGV4dFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3ID0gdmlldy5fY29u
dGV4dFZpZXc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBydW4ub25jZSh2aWV3LCAncmVyZW5kZXInKTsKLSAgICAgICAgICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUsIGNvbnRleHQsIHJlc3VsdCA9IGhh
bmRsZWJhcnNHZXQoY3VycmVudENvbnRleHQsIHByb3BlcnR5LCBvcHRpb25zKTsKLQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZU5vcm1hbGl6ZXIgPyB2YWx1ZU5vcm1hbGl6ZXIo
cmVzdWx0KSA6IHJlc3VsdDsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gcHJlc2Vy
dmVDb250ZXh0ID8gY3VycmVudENvbnRleHQgOiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzaG91bGREaXNwbGF5KHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlID0gZm47Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW52ZXJzZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBpbnZlcnNlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUoY29udGV4dCwgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YTogb3B0aW9ucy5kYXRhIAotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2
YXIgdmlld0NsYXNzID0gX0hhbmRsZWJhcnNCb3VuZFZpZXc7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciB2aWV3T3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQ29u
dGV4dDogcHJlc2VydmVDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGlz
cGxheUZ1bmM6IHNob3VsZERpc3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU5v
cm1hbGl6ZXJGdW5jOiB2YWx1ZU5vcm1hbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5VGVtcGxhdGU6IGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZVRlbXBs
YXRlOiBpbnZlcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogcHJvcGVydHksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwYXRoUm9vdDogY3VycmVudENvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2aW91c0NvbnRleHQ6IGN1cnJlbnRDb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgaXNFc2NhcGVkOiAhb3B0aW9ucy5oYXNoLnVuZXNjYXBlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRGF0YTogb3B0aW9ucy5kYXRhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcGxhdGVIYXNoOiBvcHRpb25zLmhhc2gsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwZXJOYW1lOiBvcHRpb25zLmhlbHBlck5hbWUKLSAgICAgICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pc1dpdGhIZWxw
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDbGFzcyA9IFdpdGhWaWV3OwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSB2
aWV3IHRoYXQgd2lsbCB3cmFwIHRoZSBvdXRwdXQgb2YgdGhpcyB0ZW1wbGF0ZS9wcm9wZXJ0eQot
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBuZWFyZXN0IHZpZXcncyBj
aGlsZFZpZXdzIGFycmF5LgotICAgICAgICAgICAgICAgICAgICAvLyBTZWUgdGhlIGRvY3VtZW50
YXRpb24gb2YgRW1iZXIuX0hhbmRsZWJhcnNCb3VuZFZpZXcgZm9yIG1vcmUuCi0gICAgICAgICAg
ICAgICAgICAgIHZhciBiaW5kVmlldyA9IHZpZXcuY3JlYXRlQ2hpbGRWaWV3KHZpZXdDbGFzcywg
dmlld09wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgICAgIHZpZXcuYXBwZW5kQ2hpbGQoYmlu
ZFZpZXcpOwotCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBydW4uc2NoZWR1bGVPbmNlKCdyZW5kZXInLCBiaW5kVmll
dywgJ3JlcmVuZGVySWZOZWVkZWQnKTsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBPYnNlcnZlcyB0aGUgZ2l2ZW4gcHJvcGVy
dHkgb24gdGhlIGNvbnRleHQgYW5kCi0gICAgICAgICAgICAgICAgLy8gdGVsbHMgdGhlIEVtYmVy
Ll9IYW5kbGViYXJzQm91bmRWaWV3IHRvIHJlLXJlbmRlci4gSWYgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgICAvLyBpcyBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBwcmludGluZyB0aGUgY3VycmVu
dCBjb250ZXh0Ci0gICAgICAgICAgICAgICAgLy8gb2JqZWN0ICh7e3RoaXN9fSkgc28gdXBkYXRp
bmcgaXQgaXMgbm90IG91ciByZXNwb25zaWJpbGl0eS4KLSAgICAgICAgICAgICAgICBpZiAobm9y
bWFsaXplZC5wYXRoICE9PSAnJykgewotICAgICAgICAgICAgICAgICAgICB2aWV3LnJlZ2lzdGVy
T2JzZXJ2ZXIobm9ybWFsaXplZC5yb290LCBub3JtYWxpemVkLnBhdGgsIG9ic2VydmVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUHJvcGVydGllcykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNoaWxkUHJvcGVydGllcy5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihub3JtYWxp
emVkLnJvb3QsIG5vcm1hbGl6ZWQucGF0aCArICcuJyArIGNoaWxkUHJvcGVydGllc1tpXSwgb2Jz
ZXJ2ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBUaGUgb2JqZWN0IGlzIG5vdCBvYnNlcnZhYmxlLCBzbyBqdXN0IHJlbmRlciBpdCBvdXQg
YW5kCi0gICAgICAgICAgICAgICAgLy8gYmUgZG9uZSB3aXRoIGl0LgotICAgICAgICAgICAgICAg
IGRhdGEuYnVmZmVyLnB1c2goaGFuZGxlYmFyc0dldEVzY2FwZWQoY3VycmVudENvbnRleHQsIHBy
b3BlcnR5LCBvcHRpb25zKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBzaW1wbGVCaW5kKGN1cnJlbnRDb250ZXh0LCBwcm9wZXJ0eSwgb3B0aW9ucykgewot
ICAgICAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsCi0gICAgICAgICAgICB2aWV3ID0g
ZGF0YS52aWV3LAotICAgICAgICAgICAgbm9ybWFsaXplZCwgb2JzZXJ2ZXIsIHBhdGhSb290LCBv
dXRwdXQ7Ci0KLSAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGN1cnJlbnRD
b250ZXh0LCBwcm9wZXJ0eSwgZGF0YSk7Ci0gICAgICAgICAgICBwYXRoUm9vdCA9IG5vcm1hbGl6
ZWQucm9vdDsKLQotICAgICAgICAgICAgLy8gU2V0IHVwIG9ic2VydmVycyBmb3Igb2JzZXJ2YWJs
ZSBvYmplY3RzCi0gICAgICAgICAgICBpZiAocGF0aFJvb3QgJiYgKCdvYmplY3QnID09PSB0eXBl
b2YgcGF0aFJvb3QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuaW5zaWRlR3JvdXApIHsK
LSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICh2aWV3Ll9jb250ZXh0VmlldykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZpZXcgPSB2aWV3Ll9jb250ZXh0VmlldzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5vbmNlKHZpZXcsICdyZXJlbmRl
cicpOwotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIG91dHB1
dCA9IGhhbmRsZWJhcnNHZXRFc2NhcGVkKGN1cnJlbnRDb250ZXh0LCBwcm9wZXJ0eSwgb3B0aW9u
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGF0YS5idWZmZXIucHVzaChvdXRwdXQpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBiaW5kVmlldyA9
IG5ldyBTaW1wbGVIYW5kbGViYXJzVmlldygKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHks
IGN1cnJlbnRDb250ZXh0LCAhb3B0aW9ucy5oYXNoLnVuZXNjYXBlZCwgb3B0aW9ucy5kYXRhCi0g
ICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYmluZFZpZXcuX3Bh
cmVudFZpZXcgPSB2aWV3OwotICAgICAgICAgICAgICAgICAgICB2aWV3LmFwcGVuZENoaWxkKGJp
bmRWaWV3KTsKLQotICAgICAgICAgICAgICAgICAgICBvYnNlcnZlciA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlT25jZSgncmVuZGVyJywgYmluZFZp
ZXcsICdyZXJlbmRlcicpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIE9ic2VydmVzIHRoZSBnaXZlbiBwcm9wZXJ0eSBvbiB0
aGUgY29udGV4dCBhbmQKLSAgICAgICAgICAgICAgICAvLyB0ZWxscyB0aGUgRW1iZXIuX0hhbmRs
ZWJhcnNCb3VuZFZpZXcgdG8gcmUtcmVuZGVyLiBJZiBwcm9wZXJ0eQotICAgICAgICAgICAgICAg
IC8vIGlzIGFuIGVtcHR5IHN0cmluZywgd2UgYXJlIHByaW50aW5nIHRoZSBjdXJyZW50IGNvbnRl
eHQKLSAgICAgICAgICAgICAgICAvLyBvYmplY3QgKHt7dGhpc319KSBzbyB1cGRhdGluZyBpdCBp
cyBub3Qgb3VyIHJlc3BvbnNpYmlsaXR5LgotICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVk
LnBhdGggIT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZl
cihub3JtYWxpemVkLnJvb3QsIG5vcm1hbGl6ZWQucGF0aCwgb2JzZXJ2ZXIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG9i
amVjdCBpcyBub3Qgb2JzZXJ2YWJsZSwgc28ganVzdCByZW5kZXIgaXQgb3V0IGFuZAotICAgICAg
ICAgICAgICAgIC8vIGJlIGRvbmUgd2l0aCBpdC4KLSAgICAgICAgICAgICAgICBvdXRwdXQgPSBo
YW5kbGViYXJzR2V0RXNjYXBlZChjdXJyZW50Q29udGV4dCwgcHJvcGVydHksIG9wdGlvbnMpOwot
ICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2gob3V0cHV0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNob3VsZERpc3BsYXlJZkhlbHBlckNvbnRl
bnQocmVzdWx0KSB7Ci0gICAgICAgICAgICB2YXIgdHJ1dGh5ID0gcmVzdWx0ICYmIGdldChyZXN1
bHQsICdpc1RydXRoeScpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiB0cnV0aHkgPT09ICdib29s
ZWFuJykgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnV0aHk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChpc0FycmF5KHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZ2V0KHJlc3VsdCwgJ2xlbmd0aCcpICE9PSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgJ190cmlhZ2VNdXN0YWNoZScgaXMgdXNlZCBp
bnRlcm5hbGx5IHNlbGVjdCBiZXR3ZWVuIGEgYmluZGluZywgaGVscGVyLCBvciBjb21wb25lbnQg
Zm9yCi0gICAgICAgICAgICAgIHRoZSBnaXZlbiBjb250ZXh0LiBVbnRpbCB0aGlzIHBvaW50LCBp
dCB3b3VsZCBiZSBoYXJkIHRvIGRldGVybWluZSBpZiB0aGUKLSAgICAgICAgICAgICAgbXVzdGFj
aGUgaXMgYSBwcm9wZXJ0eSByZWZlcmVuY2Ugb3IgYSByZWd1bGFyIGhlbHBlciByZWZlcmVuY2Uu
IFRoaXMgdHJpYWdlCi0gICAgICAgICAgICAgIGhlbHBlciByZXNvbHZlcyB0aGF0LgotCi0gICAg
ICAgICAgICAgIFRoaXMgd291bGQgbm90IGJlIHR5cGljYWxseSBpbnZva2VkIGJ5IGRpcmVjdGx5
LgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgX3RyaWFn
ZU11c3RhY2hlCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eS9oZWxwZXJJRCB0
byB0cmlhZ2UKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgaGFzaCBvZiB0
ZW1wbGF0ZS9yZW5kZXJpbmcgb3B0aW9ucwotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9
IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBfdHJpYWdlTXVz
dGFjaGVIZWxwZXIocHJvcGVydHksIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgiWW91IGNhbm5vdCBwYXNzIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgdG8gdGhlIF90cmlhZ2VN
dXN0YWNoZSBoZWxwZXIiLCBhcmd1bWVudHMubGVuZ3RoIDw9IDIpOwotCi0gICAgICAgICAgICB2
YXIgaGVscGVyID0gRW1iZXJIYW5kbGViYXJzLnJlc29sdmVIZWxwZXIob3B0aW9ucy5kYXRhLnZp
ZXcuY29udGFpbmVyLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBpZiAoaGVscGVyKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5jYWxsKHRoaXMsIG9wdGlvbnMpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gaGVscGVycy5iaW5kLmNhbGwodGhpcywgcHJvcGVy
dHksIG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFVz
ZWQgdG8gbG9va3VwL3Jlc29sdmUgaGFuZGxlYmFycyBoZWxwZXJzLiBUaGUgbG9va3VwIG9yZGVy
IGlzOgotCi0gICAgICAgICAgICAgICogTG9vayBmb3IgYSByZWdpc3RlcmVkIGhlbHBlcgotICAg
ICAgICAgICAgICAqIElmIGEgZGFzaCBleGlzdHMgaW4gdGhlIG5hbWU6Ci0gICAgICAgICAgICAg
ICAgKiBMb29rIGZvciBhIGhlbHBlciByZWdpc3RlZCBpbiB0aGUgY29udGFpbmVyCi0gICAgICAg
ICAgICAgICAgKiBVc2UgRW1iZXIuQ29tcG9uZW50TG9va3VwIHRvIGZpbmQgYW4gRW1iZXIuQ29t
cG9uZW50IHRoYXQgcmVzb2x2ZXMKLSAgICAgICAgICAgICAgICAgIHRvIHRoZSBnaXZlbiBuYW1l
Ci0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCByZXNvbHZl
SGVscGVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7Q29udGFpbmVyfSBjb250YWluZXIKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGhlbHBlciB0byBs
b29rdXAKLSAgICAgICAgICAgICAgQHJldHVybiB7SGFuZGxlYmFycyBIZWxwZXJ9Ci0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZXNvbHZlSGVscGVyKGNvbnRhaW5lciwgbmFtZSkg
ewotICAgICAgICAgICAgaWYgKGhlbHBlcnNbbmFtZV0pIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVyc1tuYW1lXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFjb250
YWluZXIgfHwgbmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgaGVscGVyID0gY29udGFpbmVy
Lmxvb2t1cCgnaGVscGVyOicgKyBuYW1lKTsKLSAgICAgICAgICAgIGlmICghaGVscGVyKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudExvb2t1cCA9IGNvbnRhaW5lci5sb29rdXAoJ2Nv
bXBvbmVudC1sb29rdXA6bWFpbicpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ291
bGQgbm90IGZpbmQgJ2NvbXBvbmVudC1sb29rdXA6bWFpbicgb24gdGhlIHByb3ZpZGVkIGNvbnRh
aW5lciwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBwZXJmb3JtaW5nIGNvbXBvbmVudCBsb29rdXBz
IiwgY29tcG9uZW50TG9va3VwKTsKLQotICAgICAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBj
b21wb25lbnRMb29rdXAubG9va3VwRmFjdG9yeShuYW1lLCBjb250YWluZXIpOwotICAgICAgICAg
ICAgICAgIGlmIChDb21wb25lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaGVscGVyID0gRW1i
ZXJIYW5kbGViYXJzLm1ha2VWaWV3SGVscGVyKENvbXBvbmVudCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lci5yZWdpc3RlcignaGVscGVyOicgKyBuYW1lLCBoZWxwZXIpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBoZWxwZXI7Ci0g
ICAgICAgIH0KLQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgYmluZGAgY2FuIGJlIHVz
ZWQgdG8gZGlzcGxheSBhIHZhbHVlLCB0aGVuIHVwZGF0ZSB0aGF0IHZhbHVlIGlmIGl0Ci0gICAg
ICAgICAgICAgIGNoYW5nZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudGVkIHRvIHByaW50IHRo
ZSBgdGl0bGVgIHByb3BlcnR5IG9mCi0gICAgICAgICAgICAgIGBjb250ZW50YDoKLQotICAgICAg
ICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7YmluZCAiY29udGVudC50aXRs
ZSJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIHdpbGwgcmV0dXJu
IHRoZSBgdGl0bGVgIHByb3BlcnR5IGFzIGEgc3RyaW5nLCB0aGVuIGNyZWF0ZSBhIG5ldyBvYnNl
cnZlcgotICAgICAgICAgICAgICBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIElmIGl0IGNoYW5nZXMs
IGl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZSBpbiBET00uIE5vdGUKLSAgICAgICAgICAgICAgdGhh
dCBpZiB5b3UgbmVlZCB0byBzdXBwb3J0IElFNyBhbmQgSUU4IHlvdSBtdXN0IG1vZGlmeSB0aGUg
bW9kZWwgb2JqZWN0cwotICAgICAgICAgICAgICBwcm9wZXJ0aWVzIHVzaW5nIGBFbWJlci5nZXQo
KWAgYW5kIGBFbWJlci5zZXQoKWAgZm9yIHRoaXMgdG8gd29yayBhcyBpdAotICAgICAgICAgICAg
ICByZWxpZXMgb24gRW1iZXIncyBLVk8gc3lzdGVtLiBGb3IgYWxsIG90aGVyIGJyb3dzZXJzIHRo
aXMgd2lsbCBiZSBoYW5kbGVkIGZvcgotICAgICAgICAgICAgICB5b3UgYXV0b21hdGljYWxseS4K
LQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGJpbmQKLSAg
ICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRvIGJpbmQKLSAgICAgICAgICAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gZm4gQ29udGV4dCB0byBwcm92aWRlIGZvciByZW5kZXJpbmcKLSAg
ICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gYmluZEhlbHBlcihwcm9wZXJ0eSwgb3B0aW9ucykgewotICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2Fubm90IHBhc3MgbW9yZSB0aGFuIG9uZSBhcmd1bWVu
dCB0byB0aGUgYmluZCBoZWxwZXIiLCBhcmd1bWVudHMubGVuZ3RoIDw9IDIpOwotCi0gICAgICAg
ICAgICB2YXIgY29udGV4dCA9IChvcHRpb25zLmNvbnRleHRzICYmIG9wdGlvbnMuY29udGV4dHMu
bGVuZ3RoKSA/IG9wdGlvbnMuY29udGV4dHNbMF0gOiB0aGlzOwotCi0gICAgICAgICAgICBpZiAo
IW9wdGlvbnMuZm4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2ltcGxlQmluZChjb250ZXh0
LCBwcm9wZXJ0eSwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlv
bnMuaGVscGVyTmFtZSA9ICdiaW5kJzsKLQotICAgICAgICAgICAgcmV0dXJuIGJpbmQuY2FsbChj
b250ZXh0LCBwcm9wZXJ0eSwgb3B0aW9ucywgZmFsc2UsIGV4aXN0cyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgVXNlIHRoZSBgYm91bmRJZmAgaGVscGVyIHRvIGNy
ZWF0ZSBhIGNvbmRpdGlvbmFsIHRoYXQgcmUtZXZhbHVhdGVzCi0gICAgICAgICAgICAgIHdoZW5l
dmVyIHRoZSB0cnV0aGluZXNzIG9mIHRoZSBib3VuZCB2YWx1ZSBjaGFuZ2VzLgotCi0gICAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjYm91bmRJZiAiY29udGVudC5z
aG91bGREaXNwbGF5VGl0bGUifX0KLSAgICAgICAgICAgICAgICB7e2NvbnRlbnQudGl0bGV9fQot
ICAgICAgICAgICAgICB7ey9ib3VuZElmfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBib3VuZElmCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBiaW5kCi0gICAgICAgICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IGZuIENvbnRleHQgdG8gcHJvdmlkZSBmb3IgcmVuZGVyaW5nCi0gICAgICAgICAg
ICAgIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGJvdW5kSWZIZWxwZXIocHJvcGVydHksIGZuKSB7Ci0gICAgICAgICAgICB2YXIg
Y29udGV4dCA9IChmbi5jb250ZXh0cyAmJiBmbi5jb250ZXh0cy5sZW5ndGgpID8gZm4uY29udGV4
dHNbMF0gOiB0aGlzOwotCi0gICAgICAgICAgICBmbi5oZWxwZXJOYW1lID0gZm4uaGVscGVyTmFt
ZSB8fCAnYm91bmRJZic7Ci0KLSAgICAgICAgICAgIHJldHVybiBiaW5kLmNhbGwoY29udGV4dCwg
cHJvcGVydHksIGZuLCB0cnVlLCBzaG91bGREaXNwbGF5SWZIZWxwZXJDb250ZW50LCBzaG91bGRE
aXNwbGF5SWZIZWxwZXJDb250ZW50LCBbJ2lzVHJ1dGh5JywgJ2xlbmd0aCddKTsKLSAgICAgICAg
fQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAg
ICAgVXNlIHRoZSBgdW5ib3VuZElmYCBoZWxwZXIgdG8gY3JlYXRlIGEgY29uZGl0aW9uYWwgdGhh
dCBldmFsdWF0ZXMgb25jZS4KLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7I3VuYm91bmRJZiAiY29udGVudC5zaG91bGREaXNwbGF5VGl0bGUifX0KLSAgICAg
ICAgICAgICAgICB7e2NvbnRlbnQudGl0bGV9fQotICAgICAgICAgICAgICB7ey91bmJvdW5kSWZ9
fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHVuYm91bmRJZgot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgdG8gYmluZAotICAgICAgICAgICAg
ICBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBDb250ZXh0IHRvIHByb3ZpZGUgZm9yIHJlbmRlcmluZwot
ICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAg
IEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdW5ib3VuZElm
SGVscGVyKHByb3BlcnR5LCBmbikgewotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSAoZm4uY29u
dGV4dHMgJiYgZm4uY29udGV4dHMubGVuZ3RoKSA/IGZuLmNvbnRleHRzWzBdIDogdGhpcywKLSAg
ICAgICAgICAgIGRhdGEgPSBmbi5kYXRhLAotICAgICAgICAgICAgdGVtcGxhdGUgPSBmbi5mbiwK
LSAgICAgICAgICAgIGludmVyc2UgPSBmbi5pbnZlcnNlLAotICAgICAgICAgICAgbm9ybWFsaXpl
ZCwgcHJvcGVydHlWYWx1ZSwgcmVzdWx0OwotCi0gICAgICAgICAgICBub3JtYWxpemVkID0gbm9y
bWFsaXplUGF0aChjb250ZXh0LCBwcm9wZXJ0eSwgZGF0YSk7Ci0gICAgICAgICAgICBwcm9wZXJ0
eVZhbHVlID0gaGFuZGxlYmFyc0dldChjb250ZXh0LCBwcm9wZXJ0eSwgZm4pOwotCi0gICAgICAg
ICAgICBpZiAoIXNob3VsZERpc3BsYXlJZkhlbHBlckNvbnRlbnQocHJvcGVydHlWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGludmVyc2U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHRlbXBsYXRlKGNvbnRleHQsIHsKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRh
IAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgVXNlIHRoZSBge3t3aXRofX1gIGhlbHBlciB3aGVuIHlvdSB3YW50IHRvIHNjb3BlIGNvbnRl
eHQuIFRha2UgdGhlIGZvbGxvd2luZyBjb2RlIGFzIGFuIGV4YW1wbGU6Ci0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8aDU+e3t1c2VyLm5hbWV9fTwvaDU+Ci0K
LSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9sZSI+Ci0gICAgICAgICAgICAgICAgPGg2Pnt7
dXNlci5yb2xlLmxhYmVsfX08L2g2PgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyb2xl
LWlkIj57e3VzZXIucm9sZS5pZH19PC9zcGFuPgotCi0gICAgICAgICAgICAgICAgPHAgY2xhc3M9
InJvbGUtZGVzYyI+e3t1c2VyLnJvbGUuZGVzY3JpcHRpb259fTwvcD4KLSAgICAgICAgICAgICAg
PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGB7e3dpdGh9fWAgY2Fu
IGJlIG91ciBiZXN0IGZyaWVuZCBpbiB0aGVzZSBjYXNlcywKLSAgICAgICAgICAgICAgaW5zdGVh
ZCBvZiB3cml0aW5nIGB1c2VyLnJvbGUuKmAgb3ZlciBhbmQgb3Zlciwgd2UgdXNlIGB7eyN3aXRo
IHVzZXIucm9sZX19YC4KLSAgICAgICAgICAgICAgTm93IHRoZSBjb250ZXh0IHdpdGhpbiB0aGUg
YHt7I3dpdGh9fSAuLiB7ey93aXRofX1gIGJsb2NrIGlzIGB1c2VyLnJvbGVgIHNvIHlvdSBjYW4g
ZG8gdGhlIGZvbGxvd2luZzoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIDxoNT57e3VzZXIubmFtZX19PC9oNT4KLQotICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJyb2xlIj4KLSAgICAgICAgICAgICAgICB7eyN3aXRoIHVzZXIucm9sZX19Ci0gICAgICAgICAg
ICAgICAgICA8aDY+e3tsYWJlbH19PC9oNj4KLSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNz
PSJyb2xlLWlkIj57e2lkfX08L3NwYW4+Ci0KLSAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJy
b2xlLWRlc2MiPnt7ZGVzY3JpcHRpb259fTwvcD4KLSAgICAgICAgICAgICAgICB7ey93aXRofX0K
LSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICMjIyBgYXNgIG9wZXJhdG9yCi0KLSAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBhbGlhc2Vz
IHRoZSBzY29wZSB0byBhIG5ldyBuYW1lLiBJdCdzIGhlbHBmdWwgZm9yIHNlbWFudGljIGNsYXJp
dHkgYW5kIHRvIHJldGFpbgotICAgICAgICAgICAgICBkZWZhdWx0IHNjb3BlIG9yIHRvIHJlZmVy
ZW5jZSBmcm9tIGFub3RoZXIgYHt7d2l0aH19YCBibG9jay4KLQotICAgICAgICAgICAgICBgYGBo
YW5kbGViYXJzCi0gICAgICAgICAgICAgIC8vIHBvc3RzIG1pZ2h0IG5vdCBiZQotICAgICAgICAg
ICAgICB7eyN3aXRoIHVzZXIucG9zdHMgYXMgYmxvZ1Bvc3RzfX0KLSAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJub3RpY2UiPgotICAgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHt7YmxvZ1Bv
c3RzLmxlbmd0aH19IGJsb2cgcG9zdHMgd3JpdHRlbiBieSB7e3VzZXIubmFtZX19LgotICAgICAg
ICAgICAgICAgIDwvZGl2PgotCi0gICAgICAgICAgICAgICAge3sjZWFjaCBwb3N0IGluIGJsb2dQ
b3N0c319Ci0gICAgICAgICAgICAgICAgICA8bGk+e3twb3N0LnRpdGxlfX08L2xpPgotICAgICAg
ICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICB7ey93aXRofX0KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgV2l0aG91dCB0aGUgYGFzYCBvcGVyYXRvciwgaXQgd291
bGQgYmUgaW1wb3NzaWJsZSB0byByZWZlcmVuY2UgYHVzZXIubmFtZWAgaW4gdGhlIGV4YW1wbGUg
YWJvdmUuCi0KLSAgICAgICAgICAgICAgTk9URTogVGhlIGFsaWFzIHNob3VsZCBub3QgcmV1c2Ug
YSBuYW1lIGZyb20gdGhlIGJvdW5kIHByb3BlcnR5IHBhdGguCi0gICAgICAgICAgICAgIEZvciBl
eGFtcGxlOiBge3sjd2l0aCBmb28uYmFyIGFzIGZvb319YCBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1
c2UgaXQgYXR0ZW1wdHMgdG8gYWxpYXMgdXNpbmcKLSAgICAgICAgICAgICAgdGhlIGZpcnN0IHBh
cnQgb2YgdGhlIHByb3BlcnR5IHBhdGgsIGBmb29gLiBJbnN0ZWFkLCB1c2UgYHt7I3dpdGggZm9v
LmJhciBhcyBiYXp9fWAuCi0KLSAgICAgICAgICAgICAgIyMjIGBjb250cm9sbGVyYCBvcHRpb24K
LQotICAgICAgICAgICAgICBBZGRpbmcgYGNvbnRyb2xsZXI9J3NvbWV0aGluZydgIGluc3RydWN0
cyB0aGUgYHt7d2l0aH19YCBoZWxwZXIgdG8gY3JlYXRlIGFuZCB1c2UgYW4gaW5zdGFuY2Ugb2YK
LSAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBjb250cm9sbGVyIHdpdGggdGhlIG5ldyBjb250
ZXh0IGFzIGl0cyBjb250ZW50LgotCi0gICAgICAgICAgICAgIFRoaXMgaXMgdmVyeSBzaW1pbGFy
IHRvIHVzaW5nIGFuIGBpdGVtQ29udHJvbGxlcmAgb3B0aW9uIHdpdGggdGhlIGB7e2VhY2h9fWAg
aGVscGVyLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sj
d2l0aCB1c2Vycy5wb3N0cyBjb250cm9sbGVyPSd1c2VyQmxvZ1Bvc3RzJ319Ci0gICAgICAgICAg
ICAgICAge3shLSBUaGUgY3VycmVudCBjb250ZXh0IGlzIHdyYXBwZWQgaW4gb3VyIGNvbnRyb2xs
ZXIgaW5zdGFuY2UgfX0KLSAgICAgICAgICAgICAge3svd2l0aH19Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgdGVtcGxhdGUgcHJv
dmlkZWQgdG8gdGhlIGB7e3dpdGh9fWAgYmxvY2sgaXMgbm93IHdyYXBwZWQgaW4gdGhlCi0gICAg
ICAgICAgICAgIGB1c2VyQmxvZ1Bvc3RgIGNvbnRyb2xsZXIsIHdoaWNoIHByb3ZpZGVzIGEgdmVy
eSBlbGVnYW50IHdheSB0byBkZWNvcmF0ZSB0aGUgY29udGV4dCB3aXRoIGN1c3RvbQotICAgICAg
ICAgICAgICBmdW5jdGlvbnMvcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHdp
dGgKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY29udGV4dAotICAgICAgICAgICAgICBAcGFyYW0ge0hh
c2h9IG9wdGlvbnMKLSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gd2l0aEhlbHBlcihjb250ZXh0LCBvcHRp
b25zKSB7Ci0gICAgICAgICAgICB2YXIgYmluZENvbnRleHQsIHByZXNlcnZlQ29udGV4dCwgY29u
dHJvbGxlciwgaGVscGVyTmFtZSA9ICd3aXRoJzsKLQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPT09IDQpIHsKLSAgICAgICAgICAgICAgICB2YXIga2V5d29yZE5hbWUsIHBhdGgs
IHJvb3RQYXRoLCBub3JtYWxpemVkLCBjb250ZXh0UGF0aDsKLQotICAgICAgICAgICAgICAgIEVt
YmVyLmFzc2VydCgiSWYgeW91IHBhc3MgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCB0byB0aGUgd2l0
aCBoZWxwZXIsIGl0IG11c3QgYmUgaW4gdGhlIGZvcm0gI3dpdGggZm9vIGFzIGJhciIsIGFyZ3Vt
ZW50c1sxXSA9PT0gImFzIik7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1sz
XTsKLSAgICAgICAgICAgICAgICBrZXl3b3JkTmFtZSA9IGFyZ3VtZW50c1syXTsKLSAgICAgICAg
ICAgICAgICBwYXRoID0gYXJndW1lbnRzWzBdOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhdGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgaGVscGVyTmFtZSArPSAnICcgKyBwYXRoICsgJyBhcyAn
ICsga2V5d29yZE5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGEgYmxvY2sgdG8gdGhlIHdpdGggaGVscGVyIiwgb3B0
aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBIYW5kbGViYXJzLlZNLm5vb3ApOwotCi0gICAgICAg
ICAgICAgICAgdmFyIGxvY2FsaXplZE9wdGlvbnMgPSBvX2NyZWF0ZShvcHRpb25zKTsKLSAgICAg
ICAgICAgICAgICBsb2NhbGl6ZWRPcHRpb25zLmRhdGEgPSBvX2NyZWF0ZShvcHRpb25zLmRhdGEp
OwotICAgICAgICAgICAgICAgIGxvY2FsaXplZE9wdGlvbnMuZGF0YS5rZXl3b3JkcyA9IG9fY3Jl
YXRlKG9wdGlvbnMuZGF0YS5rZXl3b3JkcyB8fCB7fSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aXNHbG9iYWxQYXRoKHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQYXRoID0g
cGF0aDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBub3Jt
YWxpemVkID0gbm9ybWFsaXplUGF0aCh0aGlzLCBwYXRoLCBvcHRpb25zLmRhdGEpOwotICAgICAg
ICAgICAgICAgICAgICBwYXRoID0gbm9ybWFsaXplZC5wYXRoOwotICAgICAgICAgICAgICAgICAg
ICByb290UGF0aCA9IG5vcm1hbGl6ZWQucm9vdDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCB5b3UgY2Fubm90IGJpbmQgc2Vw
YXJhdGUgb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAvLyB0b2dldGhlci4gV2hlbiB3ZSBp
bXBsZW1lbnQgdGhhdCBmdW5jdGlvbmFsaXR5LCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb250ZXh0S2V5ID0galF1ZXJ5LmV4cGFuZG8gKyBndWlkRm9y
KHJvb3RQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxpemVkT3B0aW9ucy5kYXRhLmtl
eXdvcmRzW2NvbnRleHRLZXldID0gcm9vdFBhdGg7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IHRoZSBwYXRoIGlzICcnICgidGhpcyIpLCBqdXN0IGJpbmQgZGlyZWN0bHkgdG8gdGhlIGN1cnJl
bnQgY29udGV4dAotICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aCA9IHBhdGggPyBjb250
ZXh0S2V5ICsgJy4nICsgcGF0aCA6IGNvbnRleHRLZXk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgbG9jYWxpemVkT3B0aW9ucy5oYXNoLmtleXdvcmROYW1lID0ga2V5d29y
ZE5hbWU7Ci0gICAgICAgICAgICAgICAgbG9jYWxpemVkT3B0aW9ucy5oYXNoLmtleXdvcmRQYXRo
ID0gY29udGV4dFBhdGg7Ci0KLSAgICAgICAgICAgICAgICBiaW5kQ29udGV4dCA9IHRoaXM7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRQYXRoOwotICAgICAgICAgICAgICAgIG9w
dGlvbnMgPSBsb2NhbGl6ZWRPcHRpb25zOwotICAgICAgICAgICAgICAgIHByZXNlcnZlQ29udGV4
dCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEVtYmVyLmFz
c2VydCgiWW91IG11c3QgcGFzcyBleGFjdGx5IG9uZSBhcmd1bWVudCB0byB0aGUgd2l0aCBoZWxw
ZXIiLCBhcmd1bWVudHMubGVuZ3RoID09PSAyKTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBtdXN0IHBhc3MgYSBibG9jayB0byB0aGUgd2l0aCBoZWxwZXIiLCBvcHRpb25zLmZu
ICYmIG9wdGlvbnMuZm4gIT09IEhhbmRsZWJhcnMuVk0ubm9vcCk7Ci0KLSAgICAgICAgICAgICAg
ICBoZWxwZXJOYW1lICs9ICcgJyArIGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgYmluZENvbnRl
eHQgPSBvcHRpb25zLmNvbnRleHRzWzBdOwotICAgICAgICAgICAgICAgIHByZXNlcnZlQ29udGV4
dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5h
bWUgPSBoZWxwZXJOYW1lOwotICAgICAgICAgICAgb3B0aW9ucy5pc1dpdGhIZWxwZXIgPSB0cnVl
OwotCi0gICAgICAgICAgICByZXR1cm4gYmluZC5jYWxsKGJpbmRDb250ZXh0LCBjb250ZXh0LCBv
cHRpb25zLCBwcmVzZXJ2ZUNvbnRleHQsIGV4aXN0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIFNlZSBbYm91bmRJZl0oL2FwaS9jbGFzc2VzL0VtYmVyLkhhbmRsZWJh
cnMuaGVscGVycy5odG1sI21ldGhvZF9ib3VuZElmKQotICAgICAgICAgICAgICBhbmQgW3VuYm91
bmRJZl0oL2FwaS9jbGFzc2VzL0VtYmVyLkhhbmRsZWJhcnMuaGVscGVycy5odG1sI21ldGhvZF91
bmJvdW5kSWYpCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBpZgotICAgICAgICAgICAgICBAZm9y
IEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjb250ZXh0Ci0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAgICAg
ICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBpZkhlbHBlcihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBFbWJl
ci5hc3NlcnQoIllvdSBtdXN0IHBhc3MgZXhhY3RseSBvbmUgYXJndW1lbnQgdG8gdGhlIGlmIGhl
bHBlciIsIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpOwotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJZb3UgbXVzdCBwYXNzIGEgYmxvY2sgdG8gdGhlIGlmIGhlbHBlciIsIG9wdGlvbnMuZm4gJiYg
b3B0aW9ucy5mbiAhPT0gSGFuZGxlYmFycy5WTS5ub29wKTsKLQotICAgICAgICAgICAgb3B0aW9u
cy5oZWxwZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8ICgnaWYgJyArIGNvbnRleHQpOwot
Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhLmlzVW5ib3VuZCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBoZWxwZXJzLnVuYm91bmRJZi5jYWxsKG9wdGlvbnMuY29udGV4dHNbMF0sIGNv
bnRleHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGVscGVycy5ib3VuZElmLmNhbGwob3B0aW9ucy5jb250ZXh0c1swXSwgY29udGV4dCwg
b3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQG1ldGhvZCB1bmxlc3MKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGVi
YXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY29udGV4dAotICAg
ICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICAgQHJldHVybiB7
U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdW5s
ZXNzSGVscGVyKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IG11c3QgcGFzcyBleGFjdGx5IG9uZSBhcmd1bWVudCB0byB0aGUgdW5sZXNzIGhlbHBlciIs
IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpOwotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
bXVzdCBwYXNzIGEgYmxvY2sgdG8gdGhlIHVubGVzcyBoZWxwZXIiLCBvcHRpb25zLmZuICYmIG9w
dGlvbnMuZm4gIT09IEhhbmRsZWJhcnMuVk0ubm9vcCk7Ci0KLSAgICAgICAgICAgIHZhciBmbiA9
IG9wdGlvbnMuZm4sIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsIGhlbHBlck5hbWUgPSAndW5s
ZXNzJzsKLQotICAgICAgICAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBoZWxw
ZXJOYW1lICs9ICcgJyArIGNvbnRleHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9w
dGlvbnMuZm4gPSBpbnZlcnNlOwotICAgICAgICAgICAgb3B0aW9ucy5pbnZlcnNlID0gZm47Ci0K
LSAgICAgICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IG9wdGlvbnMuaGVscGVyTmFtZSB8fCBo
ZWxwZXJOYW1lOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhLmlzVW5ib3VuZCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLnVuYm91bmRJZi5jYWxsKG9wdGlvbnMuY29u
dGV4dHNbMF0sIGNvbnRleHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaGVscGVycy5ib3VuZElmLmNhbGwob3B0aW9ucy5jb250ZXh0c1sw
XSwgY29udGV4dCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgYGJpbmQtYXR0cmAgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBi
aW5kaW5nIGJldHdlZW4gRE9NIGVsZW1lbnQgYXR0cmlidXRlcyBhbmQKLSAgICAgICAgICAgICAg
RW1iZXIgb2JqZWN0cy4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFy
cwotICAgICAgICAgICAgICA8aW1nIHt7YmluZC1hdHRyIHNyYz0iaW1hZ2VVcmwiIGFsdD0iaW1h
Z2VUaXRsZSJ9fT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGFib3Zl
IGhhbmRsZWJhcnMgdGVtcGxhdGUgd2lsbCBmaWxsIHRoZSBgPGltZz5gJ3MgYHNyY2AgYXR0cmli
dXRlIHdpbGwKLSAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSByZWZlcmVu
Y2VkIHdpdGggYCJpbWFnZVVybCJgIGFuZCBpdHMgYGFsdGAKLSAgICAgICAgICAgICAgYXR0cmli
dXRlIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIHdpdGggYCJpbWFn
ZVRpdGxlImAuCi0KLSAgICAgICAgICAgICAgSWYgdGhlIHJlbmRlcmluZyBjb250ZXh0IG9mIHRo
aXMgdGVtcGxhdGUgaXMgdGhlIGZvbGxvd2luZyBvYmplY3Q6Ci0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW1hZ2VVcmw6ICdo
dHRwOi8vbG9sY2F0cy5pbmZvL2hhei1hLWZ1bm55JywKLSAgICAgICAgICAgICAgICBpbWFnZVRp
dGxlOiAnQSBodW1vcm91cyBpbWFnZSBvZiBhIGNhdCcKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIEhUTUwgb3V0cHV0IHdp
bGwgYmU6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8aW1nIHNyYz0i
aHR0cDovL2xvbGNhdHMuaW5mby9oYXotYS1mdW5ueSIgYWx0PSJBIGh1bW9yb3VzIGltYWdlIG9m
IGEgY2F0Ij4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGJpbmQtYXR0cmAg
Y2Fubm90IHJlZGVjbGFyZSBleGlzdGluZyBET00gZWxlbWVudCBhdHRyaWJ1dGVzLiBUaGUgdXNl
IG9mIGBzcmNgCi0gICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgYGJpbmQtYXR0cmAgZXhh
bXBsZSB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSBoYXJkIGNvZGVkIHZhbHVlCi0gICAgICAgICAg
ICAgIG9mIGBzcmM9Ii9mYWlsd2hhbGUuZ2lmImAgd2lsbCB0YWtlIHByZWNlZGVuY2U6Ci0KLSAg
ICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8aW1nIHNyYz0iL2ZhaWx3
aGFsZS5naWYiIHt7YmluZC1hdHRyIHNyYz0iaW1hZ2VVcmwiIGFsdD0iaW1hZ2VUaXRsZSJ9fT4K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIGBiaW5kLWF0dHJgIGFuZCB0
aGUgYGNsYXNzYCBhdHRyaWJ1dGUKLQotICAgICAgICAgICAgICBgYmluZC1hdHRyYCBzdXBwb3J0
cyBhIHNwZWNpYWwgc3ludGF4IGZvciBoYW5kbGluZyBhIG51bWJlciBvZiBjYXNlcyB1bmlxdWUK
LSAgICAgICAgICAgICAgdG8gdGhlIGBjbGFzc2AgRE9NIGVsZW1lbnQgYXR0cmlidXRlLiBUaGUg
YGNsYXNzYCBhdHRyaWJ1dGUgY29tYmluZXMKLSAgICAgICAgICAgICAgbXVsdGlwbGUgZGlzY3Jl
dGUgdmFsdWVzIGludG8gYSBzaW5nbGUgYXR0cmlidXRlIGFzIGEgc3BhY2UtZGVsaW1pdGVkCi0g
ICAgICAgICAgICAgIGxpc3Qgb2Ygc3RyaW5ncy4gRWFjaCBzdHJpbmcgY2FuIGJlOgotCi0gICAg
ICAgICAgICAgICogYSBzdHJpbmcgcmV0dXJuIHZhbHVlIG9mIGFuIG9iamVjdCdzIHByb3BlcnR5
LgotICAgICAgICAgICAgICAqIGEgYm9vbGVhbiByZXR1cm4gdmFsdWUgb2YgYW4gb2JqZWN0J3Mg
cHJvcGVydHkKLSAgICAgICAgICAgICAgKiBhIGhhcmQtY29kZWQgdmFsdWUKLQotICAgICAgICAg
ICAgICBBIHN0cmluZyByZXR1cm4gdmFsdWUgd29ya3MgaWRlbnRpY2FsbHkgdG8gb3RoZXIgdXNl
cyBvZiBgYmluZC1hdHRyYC4gVGhlCi0gICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBvZiB0aGUg
cHJvcGVydHkgd2lsbCBiZWNvbWUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuIEZvcgotICAg
ICAgICAgICAgICBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHZpZXcgYW5kIHRlbXBsYXRlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICBBVmlldyA9IFZpZXcu
ZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgIHNvbWVQcm9wZXJ0eTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiYVZhbHVlIjsKLSAgICAgICAgICAgICAgICAgIH0u
cHJvcGVydHkoKQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGltZyB7e2JpbmQtYXR0ciBj
bGFzcz0idmlldy5zb21lUHJvcGVydHl9fT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgUmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgcmVuZGVyZWQgb3V0cHV0OgotCi0gICAgICAg
ICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYVZhbHVlIj4KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQSBib29sZWFuIHJldHVybiB2YWx1ZSB3aWxs
IGluc2VydCBhIHNwZWNpZmllZCBjbGFzcyBuYW1lIGlmIHRoZSBwcm9wZXJ0eQotICAgICAgICAg
ICAgICByZXR1cm5zIGB0cnVlYCBhbmQgcmVtb3ZlIHRoZSBjbGFzcyBuYW1lIGlmIHRoZSBwcm9w
ZXJ0eSByZXR1cm5zIGBmYWxzZWAuCi0KLSAgICAgICAgICAgICAgQSBjbGFzcyBuYW1lIGlzIHBy
b3ZpZGVkIHZpYSB0aGUgc3ludGF4Ci0gICAgICAgICAgICAgIGBzb21lUHJvcGVydHlOYW1lOmNs
YXNzLW5hbWUtaWYtdHJ1ZWAuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBBVmlldyA9IFZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBzb21lQm9vbDog
dHJ1ZQotICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDxpbWcge3tiaW5kLWF0dHIgY2xhc3M9InZp
ZXcuc29tZUJvb2w6Y2xhc3MtbmFtZS1pZi10cnVlIn19PgotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBSZXN1bHQgaW4gdGhlIGZvbGxvd2luZyByZW5kZXJlZCBvdXRwdXQ6Ci0K
LSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjbGFzcy1u
YW1lLWlmLXRydWUiPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbiBhZGRp
dGlvbmFsIHNlY3Rpb24gb2YgdGhlIGJpbmRpbmcgY2FuIGJlIHByb3ZpZGVkIGlmIHlvdSB3YW50
IHRvCi0gICAgICAgICAgICAgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGNsYXNzIGluc3RlYWQgb2Yg
cmVtb3ZpbmcgaXQgd2hlbiB0aGUgYm9vbGVhbgotICAgICAgICAgICAgICB2YWx1ZSBjaGFuZ2Vz
OgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGltZyB7e2Jp
bmQtYXR0ciBjbGFzcz0idmlldy5zb21lQm9vbDpjbGFzcy1uYW1lLWlmLXRydWU6Y2xhc3MtbmFt
ZS1pZi1mYWxzZSJ9fT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQSBoYXJk
LWNvZGVkIHZhbHVlIGNhbiBiZSB1c2VkIGJ5IHByZXBlbmRpbmcgYDpgIHRvIHRoZSBkZXNpcmVk
Ci0gICAgICAgICAgICAgIGNsYXNzIG5hbWU6IGA6Y2xhc3MtbmFtZS10by1hbHdheXMtYXBwbHlg
LgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGltZyB7e2Jp
bmQtYXR0ciBjbGFzcz0iOmNsYXNzLW5hbWUtdG8tYWx3YXlzLWFwcGx5In19PgotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBSZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgcmVuZGVy
ZWQgb3V0cHV0OgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGltZyBj
bGFzcz0iY2xhc3MtbmFtZS10by1hbHdheXMtYXBwbHkiPgotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBBbGwgdGhyZWUgc3RyYXRlZ2llcyAtIHN0cmluZyByZXR1cm4gdmFsdWUs
IGJvb2xlYW4gcmV0dXJuIHZhbHVlLCBhbmQKLSAgICAgICAgICAgICAgaGFyZC1jb2RlZCB2YWx1
ZSDigJMgY2FuIGJlIGNvbWJpbmVkIGluIGEgc2luZ2xlIGRlY2xhcmF0aW9uOgotCi0gICAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGltZyB7e2JpbmQtYXR0ciBjbGFz
cz0iOmNsYXNzLW5hbWUtdG8tYWx3YXlzLWFwcGx5IHZpZXcuc29tZUJvb2w6Y2xhc3MtbmFtZS1p
Zi10cnVlIHZpZXcuc29tZVByb3BlcnR5In19PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBAbWV0aG9kIGJpbmQtYXR0cgotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRs
ZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAg
ICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gYmluZEF0dHJIZWxwZXIob3B0aW9ucykgewotICAgICAgICAgICAgdmFy
IGF0dHJzID0gb3B0aW9ucy5oYXNoOwotCi0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBt
dXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGhhc2ggYXJndW1lbnQgdG8gYmluZC1hdHRyIiwgISFr
ZXlzKGF0dHJzKS5sZW5ndGgpOwotCi0gICAgICAgICAgICB2YXIgdmlldyA9IG9wdGlvbnMuZGF0
YS52aWV3OwotICAgICAgICAgICAgdmFyIHJldCA9IFtdOwotCi0gICAgICAgICAgICAvLyB3ZSBy
ZWxpZWQgb24gdGhlIGJlaGF2aW9yIG9mIGNhbGxpbmcgd2l0aG91dAotICAgICAgICAgICAgLy8g
Y29udGV4dCB0byBtZWFuIHRoaXMgPT09IHdpbmRvdywgYnV0IHdoZW4gcnVubmluZwotICAgICAg
ICAgICAgLy8gInVzZSBzdHJpY3QiLCBpdCdzIHBvc3NpYmxlIGZvciB0aGlzIHRvID09PSB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICB2YXIgY3R4ID0gdGhpcyB8fCB3aW5kb3c7Ci0KLSAgICAgICAg
ICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciB0aGlzIGVsZW1lbnQuIFRoaXMgd2lsbCBi
ZSBhZGRlZCBhcyBhCi0gICAgICAgICAgICAvLyBkYXRhIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVu
dCBzbyBpdCBjYW4gYmUgbG9va2VkIHVwIHdoZW4KLSAgICAgICAgICAgIC8vIHRoZSBib3VuZCBw
cm9wZXJ0eSBjaGFuZ2VzLgotICAgICAgICAgICAgdmFyIGRhdGFJZCA9IHV1aWQoKTsKLQotICAg
ICAgICAgICAgLy8gSGFuZGxlIGNsYXNzZXMgZGlmZmVyZW50bHksIGFzIHdlIGNhbiBiaW5kIG11
bHRpcGxlIGNsYXNzZXMKLSAgICAgICAgICAgIHZhciBjbGFzc0JpbmRpbmdzID0gYXR0cnNbJ2Ns
YXNzJ107Ci0gICAgICAgICAgICBpZiAoY2xhc3NCaW5kaW5ncyAhPSBudWxsKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNsYXNzUmVzdWx0cyA9IGJpbmRDbGFzc2VzKGN0eCwgY2xhc3NCaW5kaW5n
cywgdmlldywgZGF0YUlkLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgIHJldC5wdXNoKCdj
bGFzcz0iJyArIEhhbmRsZWJhcnMuVXRpbHMuZXNjYXBlRXhwcmVzc2lvbihjbGFzc1Jlc3VsdHMu
am9pbignICcpKSArICciJyk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGF0dHJzWydjbGFzcydd
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgYXR0cktleXMgPSBrZXlzKGF0dHJz
KTsKLQotICAgICAgICAgICAgLy8gRm9yIGVhY2ggYXR0cmlidXRlIHBhc3NlZCwgY3JlYXRlIGFu
IG9ic2VydmVyIGFuZCBlbWl0IHRoZQotICAgICAgICAgICAgLy8gY3VycmVudCB2YWx1ZSBvZiB0
aGUgcHJvcGVydHkgYXMgYW4gYXR0cmlidXRlLgotICAgICAgICAgICAgZm9yRWFjaC5jYWxsKGF0
dHJLZXlzLCBmdW5jdGlvbihhdHRyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBhdHRy
c1thdHRyXSwKLSAgICAgICAgICAgICAgICBub3JtYWxpemVkOwotCi0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KGZtdCgiWW91IG11c3QgcHJvdmlkZSBhbiBleHByZXNzaW9uIGFzIHRoZSB2
YWx1ZSBvZiBib3VuZCBhdHRyaWJ1dGUuIFlvdSBzcGVjaWZpZWQ6ICVAPSVAIiwgW2F0dHIsIHBh
dGhdKSwgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKTsKLQotICAgICAgICAgICAgICAgIG5vcm1h
bGl6ZWQgPSBub3JtYWxpemVQYXRoKGN0eCwgcGF0aCwgb3B0aW9ucy5kYXRhKTsKLQotICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IChwYXRoID09PSAndGhpcycpID8gbm9ybWFsaXplZC5yb290
IDogaGFuZGxlYmFyc0dldChjdHgsIHBhdGgsIG9wdGlvbnMpLAotICAgICAgICAgICAgICAgIHR5
cGUgPSB0eXBlT2YodmFsdWUpOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgi
QXR0cmlidXRlcyBtdXN0IGJlIG51bWJlcnMsIHN0cmluZ3Mgb3IgYm9vbGVhbnMsIG5vdCAlQCIs
IFt2YWx1ZV0pLCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUg
PT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyk7
Ci0KLSAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXI7Ci0KLSAgICAgICAgICAgICAgICBvYnNl
cnZlciA9IGZ1bmN0aW9uIG9ic2VydmVyKCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gaGFuZGxlYmFyc0dldChjdHgsIHBhdGgsIG9wdGlvbnMpOwotCi0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydChmbXQoIkF0dHJpYnV0ZXMgbXVzdCBiZSBudW1iZXJzLCBzdHJp
bmdzIG9yIGJvb2xlYW5zLCBub3QgJUAiLCBbcmVzdWx0XSksCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVzdWx0
ID09PSAnbnVtYmVyJyB8fAotICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSAn
c3RyaW5nJyB8fCB0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpOwotCi0gICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gdmlldy4kKCJbZGF0YS1iaW5kYXR0ci0iICsgZGF0YUlkICsgIj0n
IiArIGRhdGFJZCArICInXSIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZW4n
dCBhYmxlIHRvIGZpbmQgdGhlIGVsZW1lbnQsIGl0IG1lYW5zIHRoZSBlbGVtZW50Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHdoaWNoIHdlIHdlcmUgYm91bmQgaGFzIGJlZW4gcmVtb3ZlZCBm
cm9tIHRoZSB2aWV3LgotICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIGNh
biBhc3N1bWUgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlLXJlbmRlcmVkCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBvYnNlcnZlci4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlbGVtIHx8IGVsZW0ubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcihub3JtYWxpemVkLnJvb3QsIG5vcm1hbGl6ZWQu
cGF0aCwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgVmlldy5hcHBseUF0dHJpYnV0
ZUJpbmRpbmdzKGVsZW0sIGF0dHIsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgIC8vIEFkZCBhbiBvYnNlcnZlciB0byB0aGUgdmlldyBmb3Igd2hlbiB0aGUg
cHJvcGVydHkgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBvYnNlcnZlciBm
aXJlcywgZmluZCB0aGUgZWxlbWVudCB1c2luZyB0aGUKLSAgICAgICAgICAgICAgICAvLyB1bmlx
dWUgZGF0YSBpZCBhbmQgdXBkYXRlIHRoZSBhdHRyaWJ1dGUgdG8gdGhlIG5ldyB2YWx1ZS4KLSAg
ICAgICAgICAgICAgICAvLyBOb3RlOiBkb24ndCBhZGQgb2JzZXJ2ZXIgd2hlbiBwYXRoIGlzICd0
aGlzJyBvciBwYXRoCi0gICAgICAgICAgICAgICAgLy8gaXMgd2hvbGUga2V5d29yZCBlLmcuIHt7
I2VhY2ggeCBpbiBsaXN0fX0gLi4uIHt7YmluZC1hdHRyIGF0dHI9IngifX0KLSAgICAgICAgICAg
ICAgICBpZiAocGF0aCAhPT0gJ3RoaXMnICYmICEobm9ybWFsaXplZC5pc0tleXdvcmQgJiYgbm9y
bWFsaXplZC5wYXRoID09PSAnJyApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0
ZXJPYnNlcnZlcihub3JtYWxpemVkLnJvb3QsIG5vcm1hbGl6ZWQucGF0aCwgb2JzZXJ2ZXIpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgY2hhbmdlcywg
YWxzbyBjaGFuZ2UgdGhlIGxvZ2ljIGluIGVtYmVyLXZpZXdzL2xpYi92aWV3cy92aWV3LmpzCi0g
ICAgICAgICAgICAgICAgaWYgKCh0eXBlID09PSAnc3RyaW5nJyB8fCAodHlwZSA9PT0gJ251bWJl
cicgJiYgIWlzTmFOKHZhbHVlKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGF0
dHIgKyAnPSInICsgSGFuZGxlYmFycy5VdGlscy5lc2NhcGVFeHByZXNzaW9uKHZhbHVlKSArICci
Jyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlID09PSAnYm9vbGVh
bicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRldmVsb3BlciBjb250cm9scyB0aGUg
YXR0ciBuYW1lLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIHNhZmUKLSAgICAgICAgICAgICAgICAg
ICAgcmV0LnB1c2goYXR0ciArICc9IicgKyBhdHRyICsgJyInKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAgICAgLy8gQWRkIHRoZSB1bmlxdWUg
aWRlbnRpZmllcgotICAgICAgICAgICAgLy8gTk9URTogV2UgdXNlIGFsbCBsb3dlci1jYXNlIHNp
bmNlIEZpcmVmb3ggaGFzIHByb2JsZW1zIHdpdGggbWl4ZWQgY2FzZSBpbiBTVkcKLSAgICAgICAg
ICAgIHJldC5wdXNoKCdkYXRhLWJpbmRhdHRyLScgKyBkYXRhSWQgKyAnPSInICsgZGF0YUlkICsg
JyInKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU2FmZVN0cmluZyhyZXQuam9pbignICcpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBTZWUgYGJpbmQtYXR0cmAK
LQotICAgICAgICAgICAgICBAbWV0aG9kIGJpbmRBdHRyCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBkZXByZWNhdGVkCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNvbnRleHQKLSAgICAgICAgICAgICAgQHBhcmFtIHtI
YXNofSBvcHRpb25zCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcK
LSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGJpbmRBdHRySGVscGVyRGVwcmVjYXRl
ZCgpIHsKLSAgICAgICAgICAgIEVtYmVyLndhcm4oIlRoZSAnYmluZEF0dHInIHZpZXcgaGVscGVy
IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgJ2JpbmQtYXR0ciciKTsKLSAgICAgICAgICAgIHJl
dHVybiBoZWxwZXJzWydiaW5kLWF0dHInXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEhlbHBlciB0aGF0LCBnaXZlbiBhIHNw
YWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgcHJvcGVydHkgcGF0aHMgYW5kIGEgY29udGV4dCwKLSAg
ICAgICAgICAgICAgcmV0dXJucyBhbiBhcnJheSBvZiBjbGFzcyBuYW1lcy4gQ2FsbGluZyB0aGlz
IG1ldGhvZCBhbHNvIGhhcyB0aGUgc2lkZQotICAgICAgICAgICAgICBlZmZlY3Qgb2Ygc2V0dGlu
ZyB1cCBvYnNlcnZlcnMgYXQgdGhvc2UgcHJvcGVydHkgcGF0aHMsIHN1Y2ggdGhhdCBpZiB0aGV5
Ci0gICAgICAgICAgICAgIGNoYW5nZSwgdGhlIGNvcnJlY3QgY2xhc3MgbmFtZSB3aWxsIGJlIHJl
YXBwbGllZCB0byB0aGUgRE9NIGVsZW1lbnQuCi0KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUs
IGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgImZvb0JhciIsIGl0IHdpbGwgZmlyc3QgbG9vayB1cCB0
aGUKLSAgICAgICAgICAgICAgImZvb0JhciIgdmFsdWUgb2YgdGhlIGNvbnRleHQuIElmIHRoYXQg
dmFsdWUgaXMgdHJ1ZSwgaXQgd2lsbCBhZGQgdGhlCi0gICAgICAgICAgICAgICJmb28tYmFyIiBj
bGFzcyB0byB0aGUgY3VycmVudCBlbGVtZW50IChpLmUuLCB0aGUgZGFzaGVyaXplZCBmb3JtIG9m
Ci0gICAgICAgICAgICAgICJmb29CYXIiKS4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCB3
aWxsIGFkZCB0aGF0IHN0cmluZyBhcyB0aGUgY2xhc3MuCi0gICAgICAgICAgICAgIE90aGVyd2lz
ZSwgaXQgd2lsbCBub3QgYWRkIGFueSBuZXcgY2xhc3MgbmFtZS4KLQotICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGJpbmRDbGFzc2VzCi0gICAgICAgICAgICAg
IEBmb3IgRW1iZXIuSGFuZGxlYmFycwotICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLk9iamVj
dH0gY29udGV4dCBUaGUgY29udGV4dCBmcm9tIHdoaWNoIHRvIGxvb2t1cCBwcm9wZXJ0aWVzCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBjbGFzc0JpbmRpbmdzIEEgc3RyaW5nLCBzcGFj
ZS1zZXBhcmF0ZWQsIG9mIGNsYXNzIGJpbmRpbmdzCi0gICAgICAgICAgICAgICAgdG8gdXNlCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7Vmlld30gdmlldyBUaGUgdmlldyBpbiB3aGljaCBvYnNlcnZl
cnMgc2hvdWxkIGxvb2sgZm9yIHRoZQotICAgICAgICAgICAgICAgIGVsZW1lbnQgdG8gdXBkYXRl
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3J0aW5nfSBiaW5kQXR0cklkIE9wdGlvbmFsIGJpbmRB
dHRyIGlkIHVzZWQgdG8gbG9va3VwIGVsZW1lbnRzCi0gICAgICAgICAgICAgIEByZXR1cm4ge0Fy
cmF5fSBBbiBhcnJheSBvZiBjbGFzcyBuYW1lcyB0byBhZGQKLSAgICAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIGJpbmRDbGFzc2VzKGNvbnRleHQsIGNsYXNzQmluZGluZ3MsIHZpZXcsIGJp
bmRBdHRySWQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciByZXQgPSBbXSwgbmV3Q2xhc3Ms
IHZhbHVlLCBlbGVtOwotCi0gICAgICAgICAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIHJldHJpZXZl
IHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBjb250ZXh0IGFuZAotICAgICAgICAgICAgLy8gZGV0ZXJt
aW5lIHdoaWNoIGNsYXNzIHN0cmluZyB0byByZXR1cm4sIGJhc2VkIG9uIHdoZXRoZXIgaXQgaXMK
LSAgICAgICAgICAgIC8vIGEgQm9vbGVhbiBvciBub3QuCi0gICAgICAgICAgICB2YXIgY2xhc3NT
dHJpbmdGb3JQYXRoID0gZnVuY3Rpb24ocm9vdCwgcGFyc2VkUGF0aCwgb3B0aW9ucykgewotICAg
ICAgICAgICAgICAgIHZhciB2YWwsCi0gICAgICAgICAgICAgICAgcGF0aCA9IHBhcnNlZFBhdGgu
cGF0aDsKLQotICAgICAgICAgICAgICAgIGlmIChwYXRoID09PSAndGhpcycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFsID0gcm9vdDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGgg
PT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gaGFuZGxlYmFyc0dldChyb290
LCBwYXRoLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlldy5fY2xhc3NTdHJpbmdGb3JWYWx1ZShwYXRoLCB2YWwsIHBhcnNlZFBhdGguY2xh
c3NOYW1lLCBwYXJzZWRQYXRoLmZhbHN5Q2xhc3NOYW1lKTsKLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIC8vIEZvciBlYWNoIHByb3BlcnR5IHBhc3NlZCwgbG9vcCB0aHJvdWdoIGFuZCBz
ZXR1cAotICAgICAgICAgICAgLy8gYW4gb2JzZXJ2ZXIuCi0gICAgICAgICAgICBmb3JFYWNoLmNh
bGwoY2xhc3NCaW5kaW5ncy5zcGxpdCgnICcpLCBmdW5jdGlvbihiaW5kaW5nKSB7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBWYXJpYWJsZSBpbiB3aGljaCB0aGUgb2xkIGNsYXNzIHZhbHVlIGlzIHNh
dmVkLiBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAvLyBjbG9zZXMgb3Zl
ciB0aGlzIHZhcmlhYmxlLCBzbyBpdCBrbm93cyB3aGljaCBzdHJpbmcgdG8gcmVtb3ZlIHdoZW4K
LSAgICAgICAgICAgICAgICAvLyB0aGUgcHJvcGVydHkgY2hhbmdlcy4KLSAgICAgICAgICAgICAg
ICB2YXIgb2xkQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXI7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgcGFyc2VkUGF0aCA9IFZpZXcuX3BhcnNlUHJvcGVydHlQYXRoKGJpbmRp
bmcpLAotICAgICAgICAgICAgICAgIHBhdGggPSBwYXJzZWRQYXRoLnBhdGgsCi0gICAgICAgICAg
ICAgICAgcGF0aFJvb3QgPSBjb250ZXh0LAotICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQ7Ci0K
LSAgICAgICAgICAgICAgICBpZiAocGF0aCAhPT0gJycgJiYgcGF0aCAhPT0gJ3RoaXMnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGNvbnRleHQsIHBh
dGgsIG9wdGlvbnMuZGF0YSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcGF0aFJvb3QgPSBub3Jt
YWxpemVkLnJvb3Q7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBub3JtYWxpemVkLnBhdGg7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHVwIGFuIG9ic2Vy
dmVyIG9uIHRoZSBjb250ZXh0LiBJZiB0aGUgcHJvcGVydHkgY2hhbmdlcywgdG9nZ2xlIHRoZQot
ICAgICAgICAgICAgICAgIC8vIGNsYXNzIG5hbWUuCi0gICAgICAgICAgICAgICAgb2JzZXJ2ZXIg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHZh
bHVlIG9mIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBuZXdDbGFzcyA9IGNsYXNz
U3RyaW5nRm9yUGF0aChjb250ZXh0LCBwYXJzZWRQYXRoLCBvcHRpb25zKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IGJpbmRBdHRySWQgPyB2aWV3LiQoIltkYXRhLWJpbmRhdHRyLSIgKyBi
aW5kQXR0cklkICsgIj0nIiArIGJpbmRBdHRySWQgKyAiJ10iKSA6IHZpZXcuJCgpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIElmIHdlIGNhbid0IGZpbmQgdGhlIGVsZW1lbnQgYW55bW9yZSwg
YSBwYXJlbnQgdGVtcGxhdGUgaGFzIGJlZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVu
ZGVyZWQgYW5kIHdlJ3ZlIGJlZW4gbnVrZWQuIFJlbW92ZSB0aGUgb2JzZXJ2ZXIuCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghZWxlbSB8fCBlbGVtLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIocGF0aFJvb3QsIHBhdGgsIG9ic2VydmVyKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElmIHdlIGhhZCBwcmV2aW91c2x5IGFkZGVkIGEgY2xhc3MgdG8gdGhlIGVsZW1lbnQsIHJlbW92
ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRDbGFzcykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3Mob2xkQ2xhc3MpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZWNlc3Nh
cnksIGFkZCBhIG5ldyBjbGFzcy4gTWFrZSBzdXJlIHdlIGtlZXAgdHJhY2sgb2YgaXQgc28KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGNhbiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2xhc3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKG5ld0NsYXNzKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbGRDbGFzcyA9IG5ld0NsYXNzOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRDbGFzcyA9IG51bGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgaWYgKHBhdGggIT09ICcnICYmIHBhdGggIT09
ICd0aGlzJykgewotICAgICAgICAgICAgICAgICAgICB2aWV3LnJlZ2lzdGVyT2JzZXJ2ZXIocGF0
aFJvb3QsIHBhdGgsIG9ic2VydmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNldHVwIHRoZSBvYnNlcnZlcjsgbm93IHdlIGp1c3QgbmVl
ZCB0byBmaWd1cmUgb3V0IHRoZQotICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Ig
cmlnaHQgbm93IG9uIHRoZSBmaXJzdCBwYXNzIHRocm91Z2guCi0gICAgICAgICAgICAgICAgdmFs
dWUgPSBjbGFzc1N0cmluZ0ZvclBhdGgoY29udGV4dCwgcGFyc2VkUGF0aCwgb3B0aW9ucyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0LnB1
c2godmFsdWUpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzYXZlIHRo
ZSBjdXJyZW50IHZhbHVlIHNvIHRoYXQgaXQgY2FuIGJlIHJlbW92ZWQgaWYgdGhlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG9ic2VydmVyIGZpcmVzLgotICAgICAgICAgICAgICAgICAgICBvbGRD
bGFzcyA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uYmlu
ZCA9IGJpbmQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLl90cmlhZ2VNdXN0YWNoZUhlbHBlciA9IF90
cmlhZ2VNdXN0YWNoZUhlbHBlcjsKLSAgICAgICAgX19leHBvcnRzX18ucmVzb2x2ZUhlbHBlciA9
IHJlc29sdmVIZWxwZXI7Ci0gICAgICAgIF9fZXhwb3J0c19fLmJpbmRIZWxwZXIgPSBiaW5kSGVs
cGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5ib3VuZElmSGVscGVyID0gYm91bmRJZkhlbHBlcjsK
LSAgICAgICAgX19leHBvcnRzX18udW5ib3VuZElmSGVscGVyID0gdW5ib3VuZElmSGVscGVyOwot
ICAgICAgICBfX2V4cG9ydHNfXy53aXRoSGVscGVyID0gd2l0aEhlbHBlcjsKLSAgICAgICAgX19l
eHBvcnRzX18uaWZIZWxwZXIgPSBpZkhlbHBlcjsKLSAgICAgICAgX19leHBvcnRzX18udW5sZXNz
SGVscGVyID0gdW5sZXNzSGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5iaW5kQXR0ckhlbHBl
ciA9IGJpbmRBdHRySGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5iaW5kQXR0ckhlbHBlckRl
cHJlY2F0ZWQgPSBiaW5kQXR0ckhlbHBlckRlcHJlY2F0ZWQ7Ci0gICAgICAgIF9fZXhwb3J0c19f
LmJpbmRDbGFzc2VzID0gYmluZENsYXNzZXM7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1o
YW5kbGViYXJzL2hlbHBlcnMvY29sbGVjdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwg
ImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAiZW1iZXIt
cnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJl
ci1oYW5kbGViYXJzL2V4dCIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdmlldyIsICJlbWJl
ci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci12aWV3cy92aWV3cy9jb2xsZWN0aW9uX3ZpZXciLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2Rl
cGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVu
Y3k5X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVy
LWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydCwgRW1iZXIuZGVw
cmVjYXRlCi0gICAgICAgIHZhciBpbnNwZWN0ID0gX19kZXBlbmRlbmN5Ml9fLmluc3BlY3Q7Ci0K
LSAgICAgICAgLy8gdmFyIGVtYmVyQXNzZXJ0ID0gRW1iZXIuYXNzZXJ0OwotICAgICAgICAvLyBl
bWJlckRlcHJlY2F0ZSA9IEVtYmVyLmRlcHJlY2F0ZTsKLQotICAgICAgICB2YXIgRW1iZXJIYW5k
bGViYXJzID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoZWxwZXJz
ID0gRW1iZXJIYW5kbGViYXJzLmhlbHBlcnM7Ci0KLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5k
ZW5jeTRfXy5mbXQ7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k1X18uZ2V0OwotICAg
ICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTZfXy5oYW5kbGViYXJzR2V0Owot
ICAgICAgICB2YXIgVmlld0hlbHBlciA9IF9fZGVwZW5kZW5jeTdfXy5WaWV3SGVscGVyOwotICAg
ICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k4X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZh
ciBDb2xsZWN0aW9uVmlldyA9IF9fZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotCi0gICAgICAg
IHZhciBhbGlhcyA9IGNvbXB1dGVkLmFsaWFzOwotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
YHt7Y29sbGVjdGlvbn19YCBpcyBhIGBFbWJlci5IYW5kbGViYXJzYCBoZWxwZXIgZm9yIGFkZGlu
ZyBpbnN0YW5jZXMgb2YKLSAgICAgICAgICAgICAgYEVtYmVyLkNvbGxlY3Rpb25WaWV3YCB0byBh
IHRlbXBsYXRlLiBTZWUgW0VtYmVyLkNvbGxlY3Rpb25WaWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIu
Q29sbGVjdGlvblZpZXcuaHRtbCkKLSAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9y
bWF0aW9uIG9uIGhvdyBhIGBDb2xsZWN0aW9uVmlld2AgZnVuY3Rpb25zLgotCi0gICAgICAgICAg
ICAgIGB7e2NvbGxlY3Rpb259fWAncyBwcmltYXJ5IHVzZSBpcyBhcyBhIGJsb2NrIGhlbHBlciB3
aXRoIGEgYGNvbnRlbnRCaW5kaW5nYAotICAgICAgICAgICAgICBvcHRpb24gcG9pbnRpbmcgdG93
YXJkcyBhbiBgRW1iZXIuQXJyYXlgLWNvbXBhdGlibGUgb2JqZWN0LiBBbiBgRW1iZXIuVmlld2AK
LSAgICAgICAgICAgICAgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIGl0ZW0gaW4g
aXRzIGBjb250ZW50YCBwcm9wZXJ0eS4gRWFjaCB2aWV3Ci0gICAgICAgICAgICAgIHdpbGwgaGF2
ZSBpdHMgb3duIGBjb250ZW50YCBwcm9wZXJ0eSBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGl0ZW0g
aW4gdGhlCi0gICAgICAgICAgICAgIGNvbGxlY3Rpb24uCi0KLSAgICAgICAgICAgICAgVGhlIHBy
b3ZpZGVkIGJsb2NrIHdpbGwgYmUgYXBwbGllZCBhcyB0aGUgdGVtcGxhdGUgZm9yIGVhY2ggaXRl
bSdzIHZpZXcuCi0KLSAgICAgICAgICAgICAgR2l2ZW4gYW4gZW1wdHkgYDxib2R5PmAgdGhlIGZv
bGxvd2luZyB0ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7I2NvbGxlY3Rpb24gY29udGVudEJpbmRpbmc9IkFwcC5pdGVtcyJ9fQotICAgICAg
ICAgICAgICAgIEhpIHt7dmlldy5jb250ZW50Lm5hbWV9fQotICAgICAgICAgICAgICB7ey9jb2xs
ZWN0aW9ufX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW5kIHRoZSBmb2xs
b3dpbmcgYXBwbGljYXRpb24gY29kZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCkKLSAgICAgICAgICAg
ICAgQXBwLml0ZW1zID0gWwotICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25h
bWU6ICdEYXZlJ30pLAotICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6
ICdNYXJ5J30pLAotICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6ICdT
YXJhJ30pCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgV2lsbCByZXN1bHQgaW4gdGhlIEhUTUwgc3RydWN0dXJlIGJlbG93Ci0KLSAgICAgICAgICAg
ICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5IaSBEYXZlPC9kaXY+Ci0gICAgICAg
ICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+SGkgTWFyeTwvZGl2PgotICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkhpIFNhcmE8L2Rpdj4KLSAgICAgICAgICAg
ICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBCbG9ja2xl
c3MgdXNlIGluIGEgY29sbGVjdGlvbgotCi0gICAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGFu
IGBpdGVtVmlld0NsYXNzYCBvcHRpb24gdGhhdCBoYXMgaXRzIG93biBgdGVtcGxhdGVgIHlvdSBj
YW4KLSAgICAgICAgICAgICAgb21pdCB0aGUgYmxvY2suCi0KLSAgICAgICAgICAgICAgVGhlIGZv
bGxvd2luZyB0ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAg
ICAgICAgIHt7Y29sbGVjdGlvbiBjb250ZW50QmluZGluZz0iQXBwLml0ZW1zIiBpdGVtVmlld0Ns
YXNzPSJBcHAuQW5JdGVtVmlldyJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBBbmQgYXBwbGljYXRpb24gY29kZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAgICAg
ICAgIEFwcC5pdGVtcyA9IFsKLSAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtu
YW1lOiAnRGF2ZSd9KSwKLSAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtuYW1l
OiAnTWFyeSd9KSwKLSAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtuYW1lOiAn
U2FyYSd9KQotICAgICAgICAgICAgICBdOwotCi0gICAgICAgICAgICAgIEFwcC5Bbkl0ZW1WaWV3
ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5I
YW5kbGViYXJzLmNvbXBpbGUoIkdyZWV0aW5ncyB7e3ZpZXcuY29udGVudC5uYW1lfX0iKQotICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCBy
ZXN1bHQgaW4gdGhlIEhUTUwgc3RydWN0dXJlIGJlbG93Ci0KLSAgICAgICAgICAgICAgYGBgaHRt
bAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5HcmVldGluZ3MgRGF2ZTwvZGl2PgotICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkdyZWV0aW5ncyBNYXJ5PC9kaXY+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+R3JlZXRpbmdzIFNhcmE8L2Rpdj4K
LSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICMjIyBTcGVjaWZ5aW5nIGEgQ29sbGVjdGlvblZpZXcgc3ViY2xhc3MKLQotICAgICAgICAgICAg
ICBCeSBkZWZhdWx0IHRoZSBge3tjb2xsZWN0aW9ufX1gIGhlbHBlciB3aWxsIGNyZWF0ZSBhbiBp
bnN0YW5jZSBvZgotICAgICAgICAgICAgICBgRW1iZXIuQ29sbGVjdGlvblZpZXdgLiBZb3UgY2Fu
IHN1cHBseSBhIGBFbWJlci5Db2xsZWN0aW9uVmlld2Agc3ViY2xhc3MgdG8KLSAgICAgICAgICAg
ICAgdGhlIGhlbHBlciBieSBwYXNzaW5nIGl0IGFzIHRoZSBmaXJzdCBhcmd1bWVudDoKLQotICAg
ICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2NvbGxlY3Rpb24gQXBw
Lk15Q3VzdG9tQ29sbGVjdGlvbkNsYXNzIGNvbnRlbnRCaW5kaW5nPSJBcHAuaXRlbXMifX0KLSAg
ICAgICAgICAgICAgICBIaSB7e3ZpZXcuY29udGVudC5uYW1lfX0KLSAgICAgICAgICAgICAge3sv
Y29sbGVjdGlvbn19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBGb3J3
YXJkZWQgYGl0ZW0uKmAtbmFtZWQgT3B0aW9ucwotCi0gICAgICAgICAgICAgIEFzIHdpdGggdGhl
IGB7e3ZpZXd9fWAsIGhlbHBlciBvcHRpb25zIHBhc3NlZCB0byB0aGUgYHt7Y29sbGVjdGlvbn19
YCB3aWxsIGJlCi0gICAgICAgICAgICAgIHNldCBvbiB0aGUgcmVzdWx0aW5nIGBFbWJlci5Db2xs
ZWN0aW9uVmlld2AgYXMgcHJvcGVydGllcy4gQWRkaXRpb25hbGx5LAotICAgICAgICAgICAgICBv
cHRpb25zIHByZWZpeGVkIHdpdGggYGl0ZW1gIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgdmlld3Mg
cmVuZGVyZWQgZm9yIGVhY2gKLSAgICAgICAgICAgICAgaXRlbSAobm90ZSB0aGUgY2FtZWxjYXNp
bmcpOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjY29s
bGVjdGlvbiBjb250ZW50QmluZGluZz0iQXBwLml0ZW1zIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW1UYWdOYW1lPSJwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1D
bGFzc05hbWVzPSJncmVldGluZyJ9fQotICAgICAgICAgICAgICAgIEhvd2R5IHt7dmlldy5jb250
ZW50Lm5hbWV9fQotICAgICAgICAgICAgICB7ey9jb2xsZWN0aW9ufX0KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MIHN0
cnVjdHVyZToKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJlbWJlci12aWV3IGdy
ZWV0aW5nIj5Ib3dkeSBEYXZlPC9wPgotICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJlbWJlci12
aWV3IGdyZWV0aW5nIj5Ib3dkeSBNYXJ5PC9wPgotICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJl
bWJlci12aWV3IGdyZWV0aW5nIj5Ib3dkeSBTYXJhPC9wPgotICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb2xsZWN0aW9uCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9u
cwotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAg
ICAgIEBkZXByZWNhdGVkIFVzZSBge3tlYWNofX1gIGhlbHBlciBpbnN0ZWFkLgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY29sbGVjdGlvbkhlbHBlcihwYXRoLCBvcHRpb25zKSB7
Ci0gICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIlVzaW5nIHRoZSB7e2NvbGxlY3Rpb259fSBo
ZWxwZXIgd2l0aG91dCBzcGVjaWZ5aW5nIGEgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyB0
aGUge3tlYWNofX0gaGVscGVyIG5vdyBzdXBwb3J0cyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LiIs
IHBhdGggIT09ICdjb2xsZWN0aW9uJyk7Ci0KLSAgICAgICAgICAgIC8vIElmIG5vIHBhdGggaXMg
cHJvdmlkZWQsIHRyZWF0IHBhdGggcGFyYW0gYXMgb3B0aW9ucy4KLSAgICAgICAgICAgIGlmIChw
YXRoICYmIHBhdGguZGF0YSAmJiBwYXRoLmRhdGEuaXNSZW5kZXJEYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgb3B0aW9ucyA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHVuZGVmaW5lZDsK
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgcGFzcyBtb3JlIHRoYW4g
b25lIGFyZ3VtZW50IHRvIHRoZSBjb2xsZWN0aW9uIGhlbHBlciIsIGFyZ3VtZW50cy5sZW5ndGgg
PT09IDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBjYW5ub3QgcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIHRoZSBjb2xsZWN0
aW9uIGhlbHBlciIsIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2YXIgZm4gPSBvcHRpb25zLmZuOwotICAgICAgICAgICAgdmFyIGRhdGEgPSBv
cHRpb25zLmRhdGE7Ci0gICAgICAgICAgICB2YXIgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZTsK
LSAgICAgICAgICAgIHZhciB2aWV3ID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0KLQotICAgICAgICAg
ICAgdmFyIGNvbnRyb2xsZXIsIGNvbnRhaW5lcjsKLSAgICAgICAgICAgIC8vIElmIHBhc3NlZCBh
IHBhdGggc3RyaW5nLCBjb252ZXJ0IHRoYXQgaW50byBhbiBvYmplY3QuCi0gICAgICAgICAgICAv
LyBPdGhlcndpc2UsIGp1c3QgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgY2xhc3MuCi0gICAgICAg
ICAgICB2YXIgY29sbGVjdGlvbkNsYXNzOwotICAgICAgICAgICAgaWYgKHBhdGgpIHsKLSAgICAg
ICAgICAgICAgICBjb250cm9sbGVyID0gZGF0YS5rZXl3b3Jkcy5jb250cm9sbGVyOwotICAgICAg
ICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5jb250YWluZXI7
Ci0gICAgICAgICAgICAgICAgY29sbGVjdGlvbkNsYXNzID0gaGFuZGxlYmFyc0dldCh0aGlzLCBw
YXRoLCBvcHRpb25zKSB8fCBjb250YWluZXIubG9va3VwRmFjdG9yeSgndmlldzonICsgcGF0aCk7
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiJUAgI2NvbGxlY3Rpb246IENvdWxk
IG5vdCBmaW5kIGNvbGxlY3Rpb24gY2xhc3MgJUAiLCBbZGF0YS52aWV3LCBwYXRoXSksICEhY29s
bGVjdGlvbkNsYXNzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29s
bGVjdGlvbkNsYXNzID0gQ29sbGVjdGlvblZpZXc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhciBoYXNoID0gb3B0aW9ucy5oYXNoLCBpdGVtSGFzaCA9IHt9LCBtYXRjaDsKLQotICAg
ICAgICAgICAgLy8gRXh0cmFjdCBpdGVtIHZpZXcgY2xhc3MgaWYgcHJvdmlkZWQgZWxzZSBkZWZh
dWx0IHRvIHRoZSBzdGFuZGFyZCBjbGFzcwotICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb25Qcm90
b3R5cGUgPSBjb2xsZWN0aW9uQ2xhc3MucHJvdG8oKSwgaXRlbVZpZXdDbGFzczsKLQotICAgICAg
ICAgICAgaWYgKGhhc2guaXRlbVZpZXcpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyID0g
ZGF0YS5rZXl3b3Jkcy5jb250cm9sbGVyOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgn
WW91IHNwZWNpZmllZCBhbiBpdGVtVmlldywgYnV0IHRoZSBjdXJyZW50IGNvbnRleHQgaGFzIG5v
ICcgKwotICAgICAgICAgICAgICAgICdjb250YWluZXIgdG8gbG9vayB0aGUgaXRlbVZpZXcgdXAg
aW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgJyArCi0gICAgICAgICAgICAgICAgJ3RoYXQgeW91IGNy
ZWF0ZWQgYSB2aWV3IG1hbnVhbGx5LCBpbnN0ZWFkIG9mIHRocm91Z2ggdGhlICcgKwotICAgICAg
ICAgICAgICAgICdjb250YWluZXIuIEluc3RlYWQsIHVzZSBjb250YWluZXIubG9va3VwKCJ2aWV3
OnZpZXdOYW1lIiksICcgKwotICAgICAgICAgICAgICAgICd3aGljaCB3aWxsIHByb3Blcmx5IGlu
c3RhbnRpYXRlIHlvdXIgdmlldy4nLAotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29u
dHJvbGxlci5jb250YWluZXIpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRyb2xs
ZXIuY29udGFpbmVyOwotICAgICAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3MgPSBjb250YWluZXIu
bG9va3VwRmFjdG9yeSgndmlldzonICsgaGFzaC5pdGVtVmlldyk7Ci0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCdZb3Ugc3BlY2lmaWVkIHRoZSBpdGVtVmlldyAnICsgaGFzaC5pdGVtVmll
dyArICIsIGJ1dCBpdCB3YXMgIiArCi0gICAgICAgICAgICAgICAgIm5vdCBmb3VuZCBhdCAiICsg
Y29udGFpbmVyLmRlc2NyaWJlKCJ2aWV3OiIgKyBoYXNoLml0ZW1WaWV3KSArCi0gICAgICAgICAg
ICAgICAgIiAoYW5kIGl0IHdhcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgY29udGFpbmVyKSIsICEh
aXRlbVZpZXdDbGFzcyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc2guaXRlbVZpZXdDbGFz
cykgewotICAgICAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3MgPSBoYW5kbGViYXJzR2V0KGNvbGxl
Y3Rpb25Qcm90b3R5cGUsIGhhc2guaXRlbVZpZXdDbGFzcywgb3B0aW9ucyk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3MgPSBjb2xsZWN0aW9uUHJv
dG90eXBlLml0ZW1WaWV3Q2xhc3M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEVtYmVy
LmFzc2VydChmbXQoIiVAICNjb2xsZWN0aW9uOiBDb3VsZCBub3QgZmluZCBpdGVtVmlld0NsYXNz
ICVAIiwgW2RhdGEudmlldywgaXRlbVZpZXdDbGFzc10pLCAhIWl0ZW1WaWV3Q2xhc3MpOwotCi0g
ICAgICAgICAgICBkZWxldGUgaGFzaC5pdGVtVmlld0NsYXNzOwotICAgICAgICAgICAgZGVsZXRl
IGhhc2guaXRlbVZpZXc7Ci0KLSAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggb3B0aW9ucyBwYXNz
ZWQgdG8gdGhlIHt7Y29sbGVjdGlvbn19IGhlbHBlciBhbmQgZXh0cmFjdCBvcHRpb25zCi0gICAg
ICAgICAgICAvLyB0aGF0IGNvbmZpZ3VyZSBpdGVtIHZpZXdzIGluc3RlYWQgb2YgdGhlIGNvbGxl
Y3Rpb24gaXRzZWxmLgotICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBoYXNoKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGhhc2guaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSBwcm9wLm1hdGNoKC9eaXRlbSguKSguKikkLyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoICYmIHByb3AgIT09ICdpdGVtQ29udHJvbGxlcicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaXRlbVNob3VsZEZvbyAtPiBzaG91bGRG
b28KLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1IYXNoW21hdGNoWzFdLnRvTG93ZXJDYXNl
KCkgKyBtYXRjaFsyXV0gPSBoYXNoW3Byb3BdOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RGVsZXRlIGZyb20gaGFzaCBhcyB0aGlzIHdpbGwgZW5kIHVwIGdldHRpbmcgcGFzc2VkIHRvIHRo
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8ge3t2aWV3fX0gaGVscGVyIG1ldGhvZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW3Byb3BdOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoZm4pIHsKLSAgICAgICAgICAgICAgICBpdGVtSGFzaC50ZW1wbGF0ZSA9IGZuOwotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmZuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgZW1wdHlWaWV3Q2xhc3M7Ci0gICAgICAgICAgICBpZiAoaW52ZXJzZSAmJiBpbnZlcnNl
ICE9PSBFbWJlckhhbmRsZWJhcnMuVk0ubm9vcCkgewotICAgICAgICAgICAgICAgIGVtcHR5Vmll
d0NsYXNzID0gZ2V0KGNvbGxlY3Rpb25Qcm90b3R5cGUsICdlbXB0eVZpZXdDbGFzcycpOwotICAg
ICAgICAgICAgICAgIGVtcHR5Vmlld0NsYXNzID0gZW1wdHlWaWV3Q2xhc3MuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGludmVyc2UsCi0gICAgICAgICAgICAgICAgICAg
IHRhZ05hbWU6IGl0ZW1IYXNoLnRhZ05hbWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaGFzaC5lbXB0eVZpZXdDbGFzcykgewotICAgICAgICAgICAgICAgIGVt
cHR5Vmlld0NsYXNzID0gaGFuZGxlYmFyc0dldCh0aGlzLCBoYXNoLmVtcHR5Vmlld0NsYXNzLCBv
cHRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlbXB0eVZpZXdDbGFzcykg
ewotICAgICAgICAgICAgICAgIGhhc2guZW1wdHlWaWV3ID0gZW1wdHlWaWV3Q2xhc3M7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYXNoLmtleXdvcmQpIHsKLSAgICAgICAgICAg
ICAgICBpdGVtSGFzaC5fY29udGV4dCA9IHRoaXM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGl0ZW1IYXNoLl9jb250ZXh0ID0gYWxpYXMoJ2NvbnRlbnQnKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHZpZXdPcHRpb25zID0gVmlld0hlbHBlci5wcm9w
ZXJ0aWVzRnJvbUhUTUxPcHRpb25zKHsKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAotICAg
ICAgICAgICAgICAgIGhhc2g6IGl0ZW1IYXNoIAotICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAg
ICAgICAgICBoYXNoLml0ZW1WaWV3Q2xhc3MgPSBpdGVtVmlld0NsYXNzLmV4dGVuZCh2aWV3T3B0
aW9ucyk7Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IG9wdGlvbnMuaGVscGVy
TmFtZSB8fCAnY29sbGVjdGlvbic7Ci0KLSAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLnZpZXcu
Y2FsbCh0aGlzLCBjb2xsZWN0aW9uQ2xhc3MsIG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGNvbGxlY3Rpb25IZWxwZXI7Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvZGVidWciLAotICAgIFsiZW1iZXIt
bWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9sb2dnZXIiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLWhhbmRsZWJhcnMvZXh0IiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKmpzaGludCBkZWJ1Zzp0cnVl
Ki8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAg
IEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFy
IEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkZF
QVRVUkVTLAotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVwZW5kZW5jeTJfXy5pbnNwZWN0Owot
ICAgICAgICB2YXIgTG9nZ2VyID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAg
ICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTRfXy5nZXQ7Ci0gICAgICAgIHZhciBub3JtYWxpemVQ
YXRoID0gX19kZXBlbmRlbmN5NV9fLm5vcm1hbGl6ZVBhdGg7Ci0gICAgICAgIHZhciBoYW5kbGVi
YXJzR2V0ID0gX19kZXBlbmRlbmN5NV9fLmhhbmRsZWJhcnNHZXQ7Ci0KLSAgICAgICAgdmFyIGFf
c2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYGxvZ2AgYWxs
b3dzIHlvdSB0byBvdXRwdXQgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBy
ZW5kZXJpbmcKLSAgICAgICAgICAgICAgY29udGV4dC4gYGxvZ2AgYWxzbyBhY2NlcHRzIHByaW1p
dGl2ZSB0eXBlcyBzdWNoIGFzIHN0cmluZ3Mgb3IgbnVtYmVycy4KLQotICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7bG9nICJteVZhcmlhYmxlOiIgbXlWYXJpYWJs
ZSB9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGxvZwotICAg
ICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gcHJvcGVydHkKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IGxvZ0hlbHBlcigpIHsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBhX3NsaWNlLmNhbGwoYXJn
dW1lbnRzLCAwLCAtMSksCi0gICAgICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50
cy5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGxvZ2dlciA9IExvZ2dlci5sb2csCi0gICAgICAg
ICAgICB2YWx1ZXMgPSBbXSwKLSAgICAgICAgICAgIGFsbG93UHJpbWl0aXZlcyA9IHRydWU7Ci0K
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGVzW2ldOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHR5cGUgPT09ICdJRCcgfHwgIWFsbG93UHJpbWl0aXZlcykgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgY29udGV4dCA9IChvcHRpb25zLmNvbnRleHRzICYmIG9wdGlvbnMuY29u
dGV4dHNbaV0pIHx8IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3Jt
YWxpemVQYXRoKGNvbnRleHQsIHBhcmFtc1tpXSwgb3B0aW9ucy5kYXRhKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9ybWFsaXplZC5wYXRoID09PSAndGhpcycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG5vcm1hbGl6ZWQucm9vdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChoYW5k
bGViYXJzR2V0KG5vcm1hbGl6ZWQucm9vdCwgbm9ybWFsaXplZC5wYXRoLCBvcHRpb25zKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMucHVzaChwYXJhbXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9nZ2VyLmFwcGx5KGxvZ2dlciwgdmFsdWVzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBFeGVjdXRlIHRoZSBgZGVi
dWdnZXJgIHN0YXRlbWVudCBpbiB0aGUgY3VycmVudCBjb250ZXh0LgotCi0gICAgICAgICAgICAg
IGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tkZWJ1Z2dlcn19Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEJlZm9yZSBpbnZva2luZyB0aGUgYGRlYnVnZ2VyYCBzdGF0
ZW1lbnQsIHRoZXJlCi0gICAgICAgICAgICAgIGFyZSBhIGZldyBoZWxwZnVsIHZhcmlhYmxlcyBk
ZWZpbmVkIGluIHRoZQotICAgICAgICAgICAgICBib2R5IG9mIHRoaXMgaGVscGVyIHRoYXQgeW91
IGNhbiBpbnNwZWN0IHdoaWxlCi0gICAgICAgICAgICAgIGRlYnVnZ2luZyB0aGF0IGRlc2NyaWJl
IGhvdyBhbmQgd2hlcmUgdGhpcwotICAgICAgICAgICAgICBoZWxwZXIgd2FzIGludm9rZWQ6Ci0K
LSAgICAgICAgICAgICAgLSB0ZW1wbGF0ZUNvbnRleHQ6IHRoaXMgaXMgbW9zdCBsaWtlbHkgYSBj
b250cm9sbGVyCi0gICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0aGlzIHRlbXBsYXRlIGxvb2tz
IHVwIC8gZGlzcGxheXMgcHJvcGVydGllcwotICAgICAgICAgICAgICAtIHR5cGVPZlRlbXBsYXRl
Q29udGV4dDogYSBzdHJpbmcgZGVzY3JpcHRpb24gb2YKLSAgICAgICAgICAgICAgICB3aGF0IHRo
ZSB0ZW1wbGF0ZUNvbnRleHQgaXMKLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91
J3JlIHdvbmRlcmluZyB3aHkgYSB2YWx1ZSBge3tmb299fWAKLSAgICAgICAgICAgICAgaXNuJ3Qg
cmVuZGVyaW5nIGFzIGV4cGVjdGVkIHdpdGhpbiBhIHRlbXBsYXRlLCB5b3UKLSAgICAgICAgICAg
ICAgY291bGQgcGxhY2UgYSBge3tkZWJ1Z2dlcn19YCBzdGF0ZW1lbnQsIGFuZCB3aGVuCi0gICAg
ICAgICAgICAgIHRoZSBgZGVidWdnZXI7YCBicmVha3BvaW50IGlzIGhpdCwgeW91IGNhbiBpbnNw
ZWN0Ci0gICAgICAgICAgICAgIGB0ZW1wbGF0ZUNvbnRleHRgLCBkZXRlcm1pbmUgaWYgaXQncyB0
aGUgb2JqZWN0IHlvdQotICAgICAgICAgICAgICBleHBlY3QsIGFuZC9vciBldmFsdWF0ZSBleHBy
ZXNzaW9ucyBpbiB0aGUgY29uc29sZQotICAgICAgICAgICAgICB0byBwZXJmb3JtIHByb3BlcnR5
IGxvb2t1cHMgb24gdGhlIGB0ZW1wbGF0ZUNvbnRleHRgOgotCi0gICAgICAgICAgICAgIGBgYAot
ICAgICAgICAgICAgICAgID4gdGVtcGxhdGVDb250ZXh0LmdldCgnZm9vJykgLy8gLT4gIjx2YWx1
ZSBvZiB7e2Zvb319PiIKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBkZWJ1Z2dlcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwot
ICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkKLSAgICAgICAgICAgICovCi0g
ICAgICAgIGZ1bmN0aW9uIGRlYnVnZ2VySGVscGVyKG9wdGlvbnMpIHsKLQotICAgICAgICAgICAg
Ly8gVGhlc2UgYXJlIGhlbHBmdWwgdmFsdWVzIHlvdSBjYW4gaW5zcGVjdCB3aGlsZSBkZWJ1Z2dp
bmcuCi0gICAgICAgICAgICB2YXIgdGVtcGxhdGVDb250ZXh0ID0gdGhpczsKLSAgICAgICAgICAg
IHZhciB0eXBlT2ZUZW1wbGF0ZUNvbnRleHQgPSBpbnNwZWN0KHRlbXBsYXRlQ29udGV4dCk7Ci0g
ICAgICAgICAgICBFbWJlci5Mb2dnZXIuaW5mbygnVXNlIGB0aGlzYCB0byBhY2Nlc3MgdGhlIGNv
bnRleHQgb2YgdGhlIGNhbGxpbmcgdGVtcGxhdGUuJyk7Ci0KLSAgICAgICAgICAgIGRlYnVnZ2Vy
OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubG9nSGVscGVyID0gbG9nSGVscGVy
OwotICAgICAgICBfX2V4cG9ydHNfXy5kZWJ1Z2dlckhlbHBlciA9IGRlYnVnZ2VySGVscGVyOwot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL2VhY2giLAotICAg
IFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1oYW5kbGViYXJzLWNvbXBpbGVyIiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLXZpZXdzL3ZpZXdzL2NvbGxlY3Rpb25fdmll
dyIsICJlbWJlci1tZXRhbC9iaW5kaW5nIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xs
ZXIiLCAiZW1iZXItcnVudGltZS9jb250cm9sbGVycy9hcnJheV9jb250cm9sbGVyIiwgImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvY29weSIsICJlbWJlci1tZXRh
bC9ydW5fbG9vcCIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZW1iZXItaGFuZGxlYmFycy9leHQi
LCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLCAiZW1iZXIt
aGFuZGxlYmFycy92aWV3cy9tZXRhbW9ycGhfdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19k
ZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRl
bmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBf
XywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywg
X19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19k
ZXBlbmRlbmN5MTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1v
ZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Oywg
RW1iZXIuSwotICAgICAgICAvLyB2YXIgZW1iZXJBc3NlcnQgPSBFbWJlci5hc3NlcnQsCi0gICAg
ICAgIHZhciBLID0gRW1iZXIuSzsKLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19k
ZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoZWxwZXJzID0gRW1iZXJIYW5k
bGViYXJzLmhlbHBlcnM7Ci0KLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5jeTNfXy5mbXQ7
Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k0X18uZ2V0OwotICAgICAgICB2YXIgc2V0
ID0gX19kZXBlbmRlbmN5NV9fLnNldDsKLSAgICAgICAgdmFyIENvbGxlY3Rpb25WaWV3ID0gX19k
ZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBCaW5kaW5nID0gX19kZXBlbmRl
bmN5N19fLkJpbmRpbmc7Ci0gICAgICAgIHZhciBDb250cm9sbGVyTWl4aW4gPSBfX2RlcGVuZGVu
Y3k4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEFycmF5Q29udHJvbGxlciA9IF9fZGVwZW5k
ZW5jeTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5kZW5j
eTEwX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvcHkgPSBfX2RlcGVuZGVuY3kxMV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBvbiA9IF9fZGVwZW5kZW5jeTEzX18ub247Ci0gICAgICAgIHZhciBoYW5k
bGViYXJzR2V0ID0gX19kZXBlbmRlbmN5MTRfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIg
Y29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kxNV9fLmNvbXB1dGVkOwotCi0gICAgICAgIHZhciBhZGRP
YnNlcnZlciA9IF9fZGVwZW5kZW5jeTE2X18uYWRkT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1v
dmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTE2X18ucmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIHZh
ciBhZGRCZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTE2X18uYWRkQmVmb3JlT2JzZXJ2ZXI7
Ci0gICAgICAgIHZhciByZW1vdmVCZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTE2X18ucmVt
b3ZlQmVmb3JlT2JzZXJ2ZXI7Ci0KLSAgICAgICAgdmFyIF9NZXRhbW9ycGggPSBfX2RlcGVuZGVu
Y3kxN19fLl9NZXRhbW9ycGg7Ci0gICAgICAgIHZhciBfTWV0YW1vcnBoVmlldyA9IF9fZGVwZW5k
ZW5jeTE3X18uX01ldGFtb3JwaFZpZXc7Ci0KLSAgICAgICAgdmFyIEVhY2hWaWV3ID0gQ29sbGVj
dGlvblZpZXcuZXh0ZW5kKF9NZXRhbW9ycGgsIHsKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW1Db250cm9sbGVyID0gZ2V0KHRoaXMsICdp
dGVtQ29udHJvbGxlcicpOwotICAgICAgICAgICAgICAgIHZhciBiaW5kaW5nOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGl0ZW1Db250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBj
b250cm9sbGVyID0gZ2V0KHRoaXMsICdjb250cm9sbGVyLmNvbnRhaW5lcicpLmxvb2t1cEZhY3Rv
cnkoJ2NvbnRyb2xsZXI6YXJyYXknKS5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgICAgICAg
X2lzVmlydHVhbDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xs
ZXI6IGdldCh0aGlzLCAnY29udHJvbGxlcicpLAotICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bUNvbnRyb2xsZXI6IGl0ZW1Db250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0OiBnZXQodGhpcywgJ2NvbnRyb2xsZXInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9l
YWNoVmlldzogdGhpcwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRpc2FibGVDb250ZW50T2JzZXJ2ZXJzKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0KHRoaXMsICdjb250ZW50JywgY29udHJvbGxlcik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5nID0gbmV3IEJpbmRpbmcoJ2NvbnRlbnQnLCAnX2VhY2hW
aWV3LmRhdGFTb3VyY2UnKS5vbmVXYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcuY29ubmVjdChjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgc2V0KHRoaXMsICdfYXJyYXlDb250cm9sbGVyJywgY29udHJvbGxlcik7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNh
YmxlQ29udGVudE9ic2VydmVycyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJpbmRpbmcgPSBuZXcgQmluZGluZygnY29udGVudCcsICdkYXRhU291cmNlJykub25lV2F5KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmNvbm5lY3QodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2Fzc2Vy
dEFycmF5TGlrZTogZnVuY3Rpb24oY29udGVudCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFz
c2VydChmbXQoIlRoZSB2YWx1ZSB0aGF0ICNlYWNoIGxvb3BzIG92ZXIgbXVzdCBiZSBhbiBBcnJh
eS4gWW91ICIgKwotICAgICAgICAgICAgICAgICJwYXNzZWQgJUAsIGJ1dCBpdCBzaG91bGQgaGF2
ZSBiZWVuIGFuIEFycmF5Q29udHJvbGxlciIsCi0gICAgICAgICAgICAgICAgW2NvbnRlbnQuY29u
c3RydWN0b3JdKSwKLSAgICAgICAgICAgICAgICAhQ29udHJvbGxlck1peGluLmRldGVjdChjb250
ZW50KSB8fAotICAgICAgICAgICAgICAgIChjb250ZW50ICYmIGNvbnRlbnQuaXNHZW5lcmF0ZWQp
IHx8Ci0gICAgICAgICAgICAgICAgY29udGVudCBpbnN0YW5jZW9mIEFycmF5Q29udHJvbGxlcik7
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiVGhlIHZhbHVlIHRoYXQgI2VhY2gg
bG9vcHMgb3ZlciBtdXN0IGJlIGFuIEFycmF5LiBZb3UgcGFzc2VkICVAIiwgWyhDb250cm9sbGVy
TWl4aW4uZGV0ZWN0KGNvbnRlbnQpICYmIGNvbnRlbnQuZ2V0KCdtb2RlbCcpICE9PSB1bmRlZmlu
ZWQpID8gZm10KCInJUAnICh3cmFwcGVkIGluICVAKSIsIFtjb250ZW50LmdldCgnbW9kZWwnKSwg
Y29udGVudF0pIDogY29udGVudF0pLCBFbWJlckFycmF5LmRldGVjdChjb250ZW50KSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBkaXNhYmxlQ29udGVudE9ic2VydmVyczogZnVuY3Rp
b24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICByZW1vdmVCZWZvcmVPYnNlcnZlcih0aGlz
LCAnY29udGVudCcsIG51bGwsICdfY29udGVudFdpbGxDaGFuZ2UnKTsKLSAgICAgICAgICAgICAg
ICByZW1vdmVPYnNlcnZlcih0aGlzLCAnY29udGVudCcsIG51bGwsICdfY29udGVudERpZENoYW5n
ZScpOwotCi0gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIGFkZEJlZm9yZU9ic2VydmVyKHRoaXMsICdjb250ZW50JywgbnVsbCwgJ19jb250ZW50
V2lsbENoYW5nZScpOwotICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKHRoaXMsICdjb250ZW50
JywgbnVsbCwgJ19jb250ZW50RGlkQ2hhbmdlJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBpdGVtVmlld0NsYXNzOiBfTWV0YW1vcnBoVmlldywKLSAgICAgICAgICAgIGVtcHR5Vmll
d0NsYXNzOiBfTWV0YW1vcnBoVmlldywKLQotICAgICAgICAgICAgY3JlYXRlQ2hpbGRWaWV3OiBm
dW5jdGlvbih2aWV3LCBhdHRycykgewotICAgICAgICAgICAgICAgIHZpZXcgPSB0aGlzLl9zdXBl
cih2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdCB0aGUgbW9tZW50LCBpZiBh
IGNvbnRhaW5lciB2aWV3IHN1YmNsYXNzIHdhbnRzCi0gICAgICAgICAgICAgICAgLy8gdG8gaW5z
ZXJ0IGtleXdvcmRzLCBpdCBpcyByZXNwb25zaWJsZSBmb3IgY2xvbmluZwotICAgICAgICAgICAg
ICAgIC8vIHRoZSBrZXl3b3JkcyBoYXNoLiBUaGlzIHdpbGwgYmUgZml4ZWQgbW9tZW50YXJpbHku
Ci0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmQgPSBnZXQodGhpcywgJ2tleXdvcmQnKTsKLSAg
ICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh2aWV3LCAnY29udGVudCcpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGtleXdvcmQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEg
PSBnZXQodmlldywgJ3RlbXBsYXRlRGF0YScpOwotCi0gICAgICAgICAgICAgICAgICAgIGRhdGEg
PSBjb3B5KGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLmtleXdvcmRzID0gdmlldy5j
bG9uZUtleXdvcmRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldCh2aWV3LCAndGVtcGxhdGVE
YXRhJywgZGF0YSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBk
byBub3QgYmluZCwgYmVjYXVzZSB0aGUgYGNvbnRlbnRgIG9mCi0gICAgICAgICAgICAgICAgICAg
IC8vIGEgI2VhY2ggaXRlbSBjYW5ub3QgY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBkYXRh
LmtleXdvcmRzW2tleXdvcmRdID0gY29udGVudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBJZiB7eyNlYWNofX0gaXMgbG9vcGluZyBvdmVyIGFuIGFycmF5IG9mIGNv
bnRyb2xsZXJzLAotICAgICAgICAgICAgICAgIC8vIHBvaW50IGVhY2ggY2hpbGQgdmlldyBhdCB0
aGVpciByZXNwZWN0aXZlIGNvbnRyb2xsZXIuCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQg
JiYgY29udGVudC5pc0NvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHZpZXcs
ICdjb250cm9sbGVyJywgY29udGVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXN0cm95
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N1cGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciBhcnJheUNvbnRyb2xsZXIgPSBnZXQodGhpcywgJ19hcnJheUNvbnRyb2xsZXIn
KTsKLQotICAgICAgICAgICAgICAgIGlmIChhcnJheUNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXJyYXlDb250cm9sbGVyLmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgLy8gRGVmZWF0dXJlaWZ5IGRvZXNuJ3Qgc2VlbSB0byBsaWtlIG5lc3RlZCBm
dW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQKLSAgICAgICAgZnVuY3Rpb24gX2FkZE1l
dGFtb3JwaENoZWNrKCkgewotICAgICAgICAgICAgRWFjaFZpZXcucmVvcGVuKHsKLSAgICAgICAg
ICAgICAgICBfY2hlY2tNZXRhbW9ycGg6IG9uKCdkaWRJbnNlcnRFbGVtZW50JywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIG1ldGFtb3JwaCB0YWdz
LCAiICsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3JwaC5zdGFydCArICIgYW5kICIgKyB0
aGlzLm1vcnBoLmVuZCArCi0gICAgICAgICAgICAgICAgICAgICIsIGhhdmUgZGlmZmVyZW50IHBh
cmVudHMuXG5UaGUgYnJvd3NlciBoYXMgZml4ZWQgeW91ciB0ZW1wbGF0ZSB0byBvdXRwdXQgdmFs
aWQgSFRNTCAoZm9yIGV4YW1wbGUsIGNoZWNrIHRoYXQgeW91IGhhdmUgcHJvcGVybHkgY2xvc2Vk
IGFsbCB0YWdzIGFuZCBoYXZlIHVzZWQgYSBUQk9EWSB0YWcgd2hlbiBjcmVhdGluZyBhIHRhYmxl
IHdpdGggJ3t7I2VhY2h9fScpIiwKLSAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIHRoaXMubW9ycGguc3RhcnQgKS5wYXJlbnROb2RlID09PQotICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggdGhpcy5tb3JwaC5lbmQgKS5wYXJlbnRO
b2RlCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdW50aWwgZW1iZXItZGVidWcgaXMgZXM2
ZWQKLSAgICAgICAgdmFyIHJ1bkluRGVidWcgPSBmdW5jdGlvbihmKSB7Ci0gICAgICAgICAgICBm
KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIHJ1bkluRGVidWcoIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgX2FkZE1ldGFtb3JwaENoZWNrKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciBH
cm91cGVkRWFjaCA9IEVtYmVySGFuZGxlYmFycy5Hcm91cGVkRWFjaCA9IGZ1bmN0aW9uKGNvbnRl
eHQsIHBhdGgsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAg
ICAgICAgIG5vcm1hbGl6ZWQgPSBFbWJlckhhbmRsZWJhcnMubm9ybWFsaXplUGF0aChjb250ZXh0
LCBwYXRoLCBvcHRpb25zLmRhdGEpOwotCi0gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250
ZXh0OwotICAgICAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKLSAgICAgICAgICAgIHRoaXMub3B0
aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gb3B0aW9ucy5mbjsK
LSAgICAgICAgICAgIHRoaXMuY29udGFpbmluZ1ZpZXcgPSBvcHRpb25zLmRhdGEudmlldzsKLSAg
ICAgICAgICAgIHRoaXMubm9ybWFsaXplZFJvb3QgPSBub3JtYWxpemVkLnJvb3Q7Ci0gICAgICAg
ICAgICB0aGlzLm5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZC5wYXRoOwotICAgICAgICAgICAg
dGhpcy5jb250ZW50ID0gdGhpcy5sb29rdXBDb250ZW50KCk7Ci0KLSAgICAgICAgICAgIHRoaXMu
YWRkQ29udGVudE9ic2VydmVycygpOwotICAgICAgICAgICAgdGhpcy5hZGRBcnJheU9ic2VydmVy
cygpOwotCi0gICAgICAgICAgICB0aGlzLmNvbnRhaW5pbmdWaWV3Lm9uKCd3aWxsQ2xlYXJSZW5k
ZXInLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBzZWxmLmRlc3Ryb3koKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIEdyb3VwZWRFYWNoLnByb3RvdHlwZSA9
IHsKLSAgICAgICAgICAgIGNvbnRlbnRXaWxsQ2hhbmdlOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnJlbW92ZUFycmF5T2JzZXJ2ZXJzKCk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBjb250ZW50RGlkQ2hhbmdlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRlbnQgPSB0aGlzLmxvb2t1cENvbnRlbnQoKTsKLSAgICAgICAgICAgICAgICB0
aGlzLmFkZEFycmF5T2JzZXJ2ZXJzKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXJlbmRlckNv
bnRhaW5pbmdWaWV3KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb250ZW50QXJy
YXlXaWxsQ2hhbmdlOiBLLAotCi0gICAgICAgICAgICBjb250ZW50QXJyYXlEaWRDaGFuZ2U6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVyZW5kZXJDb250YWluaW5nVmlldygp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgbG9va3VwQ29udGVudDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWJhcnNHZXQodGhpcy5ub3JtYWxpemVk
Um9vdCwgdGhpcy5ub3JtYWxpemVkUGF0aCwgdGhpcy5vcHRpb25zKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIGFkZEFycmF5T2JzZXJ2ZXJzOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuY29udGVudCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50LmFkZEFy
cmF5T2JzZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAnY29u
dGVudEFycmF5V2lsbENoYW5nZScsCi0gICAgICAgICAgICAgICAgICAgIGRpZENoYW5nZTogJ2Nv
bnRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHJlbW92ZUFycmF5T2JzZXJ2ZXJzOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50LnJl
bW92ZUFycmF5T2JzZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdl
OiAnY29udGVudEFycmF5V2lsbENoYW5nZScsCi0gICAgICAgICAgICAgICAgICAgIGRpZENoYW5n
ZTogJ2NvbnRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGFkZENvbnRlbnRPYnNlcnZlcnM6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGFkZEJlZm9yZU9ic2VydmVyKHRoaXMubm9ybWFsaXplZFJvb3QsIHRo
aXMubm9ybWFsaXplZFBhdGgsIHRoaXMsIHRoaXMuY29udGVudFdpbGxDaGFuZ2UpOwotICAgICAg
ICAgICAgICAgIGFkZE9ic2VydmVyKHRoaXMubm9ybWFsaXplZFJvb3QsIHRoaXMubm9ybWFsaXpl
ZFBhdGgsIHRoaXMsIHRoaXMuY29udGVudERpZENoYW5nZSk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICByZW1vdmVDb250ZW50T2JzZXJ2ZXJzOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICByZW1vdmVCZWZvcmVPYnNlcnZlcih0aGlzLm5vcm1hbGl6ZWRSb290LCB0aGlzLm5v
cm1hbGl6ZWRQYXRoLCB0aGlzLmNvbnRlbnRXaWxsQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICBy
ZW1vdmVPYnNlcnZlcih0aGlzLm5vcm1hbGl6ZWRSb290LCB0aGlzLm5vcm1hbGl6ZWRQYXRoLCB0
aGlzLmNvbnRlbnREaWRDaGFuZ2UpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVu
ZGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudCkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsCi0gICAgICAgICAgICAgICAgY29u
dGVudExlbmd0aCA9IGdldChjb250ZW50LCAnbGVuZ3RoJyksCi0gICAgICAgICAgICAgICAgb3B0
aW9ucyA9IHRoaXMub3B0aW9ucywKLSAgICAgICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRh
LAotICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZTsKLQotICAgICAgICAg
ICAgICAgIGRhdGEuaW5zaWRlRWFjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjb250ZW50TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGNvbnRleHQgPSBjb250ZW50Lm9iamVjdEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLmRhdGEua2V5d29yZHNbb3B0aW9ucy5oYXNoLmtleXdvcmRdID0gY29udGV4dDsKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcGxhdGUoY29udGV4dCwgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YTogZGF0YSAKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVyZW5kZXJDb250YWluaW5nVmlldzog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICAg
ICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGl0J3MgYmVlbiBkZXN0cm95ZWQgYWZ0
ZXIgd2UgZW5xdWV1ZWQgYSByZS1yZW5kZXIgY2FsbC4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzZWxmLmRlc3Ryb3llZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWlu
aW5nVmlldy5yZXJlbmRlcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbnRlbnRPYnNlcnZlcnMoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5jb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVtb3ZlQXJyYXlPYnNlcnZlcnMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGUgYHt7I2VhY2h9fWAgaGVscGVyIGxvb3BzIG92
ZXIgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLCByZW5kZXJpbmcgaXRzCi0gICAgICAgICAgICAg
IGJsb2NrIG9uY2UgZm9yIGVhY2ggaXRlbS4gSXQgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBiYXNl
IEhhbmRsZWJhcnMgYHt7I2VhY2h9fWAKLSAgICAgICAgICAgICAgaGVscGVyOgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRGV2ZWxvcGVycyA9IFt7bmFtZTog
J1llaHVkYSd9LHtuYW1lOiAnVG9tJ30sIHtuYW1lOiAnUGF1bCd9XTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNlYWNo
IERldmVsb3BlcnN9fQotICAgICAgICAgICAgICAgIHt7bmFtZX19Ci0gICAgICAgICAgICAgIHt7
L2VhY2h9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBge3tlYWNofX1gIHN1
cHBvcnRzIGFuIGFsdGVybmF0aXZlIHN5bnRheCB3aXRoIGVsZW1lbnQgbmFtaW5nOgotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjZWFjaCBwZXJzb24gaW4g
RGV2ZWxvcGVyc319Ci0gICAgICAgICAgICAgICAge3twZXJzb24ubmFtZX19Ci0gICAgICAgICAg
ICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaGVuIGxv
b3Bpbmcgb3ZlciBvYmplY3RzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVydGllcywgYHt7dGhpc319
YCBjYW4gYmUgdXNlZAotICAgICAgICAgICAgICB0byByZW5kZXIgdGhlIG9iamVjdDoKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIERldmVsb3Blck5hbWVzID0g
WydZZWh1ZGEnLCAnVG9tJywgJ1BhdWwnXQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2VhY2ggRGV2ZWxvcGVyTmFtZXN9
fQotICAgICAgICAgICAgICAgIHt7dGhpc319Ci0gICAgICAgICAgICAgIHt7L2VhY2h9fQotICAg
ICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAgIyMjIHt7ZWxzZX19IGNvbmRpdGlvbgotICAg
ICAgICAgICAgICBge3sjZWFjaH19YCBjYW4gaGF2ZSBhIG1hdGNoaW5nIGB7e2Vsc2V9fWAuIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGJsb2NrIHdpbGwgcmVuZGVyCi0gICAgICAgICAgICAgIGlmIHRo
ZSBjb2xsZWN0aW9uIGlzIGVtcHR5LgotCi0gICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAg
ICB7eyNlYWNoIHBlcnNvbiBpbiBEZXZlbG9wZXJzfX0KLSAgICAgICAgICAgICAgICB7e3BlcnNv
bi5uYW1lfX0KLSAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICA8cD5Tb3Jy
eSwgbm9ib2R5IGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB0YXNrLjwvcD4KLSAgICAgICAgICAgICAg
e3svZWFjaH19Ci0gICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICAjIyMgU3BlY2lmeWlu
ZyBhIFZpZXcgY2xhc3MgZm9yIGl0ZW1zCi0gICAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGFu
IGBpdGVtVmlld0NsYXNzYCBvcHRpb24gdGhhdCByZWZlcmVuY2VzIGEgdmlldyBjbGFzcwotICAg
ICAgICAgICAgICB3aXRoIGl0cyBvd24gYHRlbXBsYXRlYCB5b3UgY2FuIG9taXQgdGhlIGJsb2Nr
LgotCi0gICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdGVtcGxhdGU6Ci0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyN2aWV3IEFwcC5NeVZpZXcgfX0KLSAg
ICAgICAgICAgICAgICB7e2VhY2ggdmlldy5pdGVtcyBpdGVtVmlld0NsYXNzPSJBcHAuQW5JdGVt
VmlldyJ9fQotICAgICAgICAgICAgICB7ey92aWV3fX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQW5kIGFwcGxpY2F0aW9uIGNvZGUKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7Ci0g
ICAgICAgICAgICAgICAgTXlWaWV3OiBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgICBpdGVtczogWwotICAgICAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtu
YW1lOiAnRGF2ZSd9KSwKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7
bmFtZTogJ01hcnknfSksCi0gICAgICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUo
e25hbWU6ICdTYXJhJ30pCi0gICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgfSkK
LSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgQXBwLkFuSXRlbVZpZXcgPSBFbWJl
ci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJh
cnMuY29tcGlsZSgiR3JlZXRpbmdzIHt7bmFtZX19IikKLSAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHRoZSBIVE1MIHN0
cnVjdHVyZSBiZWxvdwotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRp
diBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXIt
dmlldyI+R3JlZXRpbmdzIERhdmU8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJl
bWJlci12aWV3Ij5HcmVldGluZ3MgTWFyeTwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImVtYmVyLXZpZXciPkdyZWV0aW5ncyBTYXJhPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2
PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJZiBhbiBgaXRlbVZpZXdDbGFz
c2AgaXMgZGVmaW5lZCBvbiB0aGUgaGVscGVyLCBhbmQgdGhlcmVmb3JlIHRoZSBoZWxwZXIgaXMg
bm90Ci0gICAgICAgICAgICAgIGJlaW5nIHVzZWQgYXMgYSBibG9jaywgYW4gYGVtcHR5Vmlld0Ns
YXNzYCBjYW4gYWxzbyBiZSBwcm92aWRlZCBvcHRpb25hbGx5LgotICAgICAgICAgICAgICBUaGUg
YGVtcHR5Vmlld0NsYXNzYCB3aWxsIG1hdGNoIHRoZSBiZWhhdmlvciBvZiB0aGUgYHt7ZWxzZX19
YCBjb25kaXRpb24KLSAgICAgICAgICAgICAgZGVzY3JpYmVkIGFib3ZlLiBUaGF0IGlzLCB0aGUg
YGVtcHR5Vmlld0NsYXNzYCB3aWxsIHJlbmRlciBpZiB0aGUgY29sbGVjdGlvbgotICAgICAgICAg
ICAgICBpcyBlbXB0eS4KLQotICAgICAgICAgICAgICAjIyMgUmVwcmVzZW50aW5nIGVhY2ggaXRl
bSB3aXRoIGEgQ29udHJvbGxlci4KLSAgICAgICAgICAgICAgQnkgZGVmYXVsdCB0aGUgY29udHJv
bGxlciBsb29rdXAgd2l0aGluIGFuIGB7eyNlYWNofX1gIGJsb2NrIHdpbGwgYmUKLSAgICAgICAg
ICAgICAgdGhlIGNvbnRyb2xsZXIgb2YgdGhlIHRlbXBsYXRlIHdoZXJlIHRoZSBge3sjZWFjaH19
YCB3YXMgdXNlZC4gSWYgZWFjaAotICAgICAgICAgICAgICBpdGVtIG5lZWRzIHRvIGJlIHByZXNl
bnRlZCBieSBhIGN1c3RvbSBjb250cm9sbGVyIHlvdSBjYW4gcHJvdmlkZSBhCi0gICAgICAgICAg
ICAgIGBpdGVtQ29udHJvbGxlcmAgb3B0aW9uIHdoaWNoIHJlZmVyZW5jZXMgYSBjb250cm9sbGVy
IGJ5IGxvb2t1cCBuYW1lLgotICAgICAgICAgICAgICBFYWNoIGl0ZW0gaW4gdGhlIGxvb3Agd2ls
bCBiZSB3cmFwcGVkIGluIGFuIGluc3RhbmNlIG9mIHRoaXMgY29udHJvbGxlcgotICAgICAgICAg
ICAgICBhbmQgdGhlIGl0ZW0gaXRzZWxmIHdpbGwgYmUgc2V0IHRvIHRoZSBgbW9kZWxgIHByb3Bl
cnR5IG9mIHRoYXQgY29udHJvbGxlci4KLQotICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBp
biBjYXNlcyB3aGVyZSBwcm9wZXJ0aWVzIG9mIG1vZGVsIG9iamVjdHMgbmVlZCB0cmFuc2Zvcm1h
dGlvbgotICAgICAgICAgICAgICBvciBzeW50aGVzaXMgZm9yIGRpc3BsYXk6Ci0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAuRGV2ZWxvcGVyQ29udHJvbGxl
ciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBpc0F2
YWlsYWJsZUZvckhpcmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuICF0
aGlzLmdldCgnbW9kZWwuaXNFbXBsb3llZCcpICYmIHRoaXMuZ2V0KCdtb2RlbC5pc1NlZWtpbmdX
b3JrJyk7Ci0gICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgnaXNFbXBsb3llZCcsICdpc1NlZWtp
bmdXb3JrJykKLSAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNlYWNoIHBlcnNvbiBpbiBkZXZl
bG9wZXJzIGl0ZW1Db250cm9sbGVyPSJkZXZlbG9wZXIifX0KLSAgICAgICAgICAgICAgICB7e3Bl
cnNvbi5uYW1lfX0ge3sjaWYgcGVyc29uLmlzQXZhaWxhYmxlRm9ySGlyZX19SGlyZSBtZSF7ey9p
Zn19Ci0gICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBFYWNoIGl0ZW1Db250cm9sbGVyIHdpbGwgcmVjZWl2ZSBhIHJlZmVyZW5jZSB0byB0
aGUgY3VycmVudCBjb250cm9sbGVyIGFzCi0gICAgICAgICAgICAgIGEgYHBhcmVudENvbnRyb2xs
ZXJgIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgICMjIyAoRXhwZXJpbWVudGFsKSBHcm91cGVk
IEVhY2gKLQotICAgICAgICAgICAgICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUg
ZXhwZXJpbWVudGFsIFtncm91cCBoZWxwZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlcmpzL2dy
b3VwLWhlbHBlciksCi0gICAgICAgICAgICAgIHlvdSBjYW4gaW5mb3JtIEhhbmRsZWJhcnMgdG8g
cmUtcmVuZGVyIGFuIGVudGlyZSBncm91cCBvZiBpdGVtcyBpbnN0ZWFkIG9mCi0gICAgICAgICAg
ICAgIHJlLXJlbmRlcmluZyB0aGVtIG9uZSBhdCBhIHRpbWUgKGluIHRoZSBldmVudCB0aGF0IHRo
ZXkgYXJlIGNoYW5nZWQgZW4gbWFzc2UKLSAgICAgICAgICAgICAgb3IgYW4gaXRlbSBpcyBhZGRl
ZC9yZW1vdmVkKS4KLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAg
IHt7I2dyb3VwfX0KLSAgICAgICAgICAgICAgICB7eyNlYWNoIHBlb3BsZX19Ci0gICAgICAgICAg
ICAgICAgICB7e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fQotICAgICAgICAgICAgICAgIHt7L2Vh
Y2h9fQotICAgICAgICAgICAgICB7ey9ncm91cH19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIFRoaXMgY2FuIGJlIGZhc3RlciB0aGFuIHRoZSBub3JtYWwgd2F5IHRoYXQgSGFu
ZGxlYmFycyByZS1yZW5kZXJzIGl0ZW1zCi0gICAgICAgICAgICAgIGluIHNvbWUgY2FzZXMuCi0K
LSAgICAgICAgICAgICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBoYXZlIGEgZ3JvdXAgd2l0aCBt
b3JlIHRoYW4gb25lIGAjZWFjaGAsIHlvdSBjYW4gbWFrZQotICAgICAgICAgICAgICBvbmUgb2Yg
dGhlIGNvbGxlY3Rpb25zIGJlIHVwZGF0ZWQgaW4gbm9ybWFsIChub24tZ3JvdXBlZCkgZmFzaGlv
biBieSBzZXR0aW5nCi0gICAgICAgICAgICAgIHRoZSBvcHRpb24gYGdyb3VwZWRSb3dzPXRydWVg
IChjb3VudGVyLWludHVpdGl2ZSwgSSBrbm93KS4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBs
ZSwKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7ZGVhbGVy
c2hpcE5hbWV9fQotCi0gICAgICAgICAgICAgIHt7I2dyb3VwfX0KLSAgICAgICAgICAgICAgICB7
eyNlYWNoIGRlYWxlcnN9fQotICAgICAgICAgICAgICAgICAge3tmaXJzdE5hbWV9fSB7e2xhc3RO
YW1lfX0KLSAgICAgICAgICAgICAgICB7ey9lYWNofX0KLQotICAgICAgICAgICAgICAgIHt7I2Vh
Y2ggY2FyIGluIGNhcnMgZ3JvdXBlZFJvd3M9dHJ1ZX19Ci0gICAgICAgICAgICAgICAgICB7e2Nh
ci5tYWtlfX0ge3tjYXIubW9kZWx9fSB7e2Nhci5jb2xvcn19Ci0gICAgICAgICAgICAgICAge3sv
ZWFjaH19Ci0gICAgICAgICAgICAgIHt7L2dyb3VwfX0KLSAgICAgICAgICAgICAgYGBgCi0gICAg
ICAgICAgICAgIEFueSBjaGFuZ2UgdG8gYGRlYWxlcnNoaXBOYW1lYCBvciB0aGUgYGRlYWxlcnNg
IGNvbGxlY3Rpb24gd2lsbCBjYXVzZSB0aGUKLSAgICAgICAgICAgICAgZW50aXJlIGdyb3VwIHRv
IGJlIHJlLXJlbmRlcmVkLiBIb3dldmVyLCBjaGFuZ2VzIHRvIHRoZSBgY2Fyc2AgY29sbGVjdGlv
bgotICAgICAgICAgICAgICB3aWxsIGJlIHJlLXJlbmRlcmVkIGluZGl2aWR1YWxseSAoYXMgbm9y
bWFsKS4KLQotICAgICAgICAgICAgICBOb3RlIHRoYXQgYGdyb3VwYCBiZWhhdmlvciBpcyBhbHNv
IGRpc2FibGVkIGJ5IHNwZWNpZnlpbmcgYW4gYGl0ZW1WaWV3Q2xhc3NgLgotCi0gICAgICAgICAg
ICAgIEBtZXRob2QgZWFjaAotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVs
cGVycwotICAgICAgICAgICAgICBAcGFyYW0gW25hbWVdIHtTdHJpbmd9IG5hbWUgZm9yIGl0ZW0g
KHVzZWQgd2l0aCBgaW5gKQotICAgICAgICAgICAgICBAcGFyYW0gW3BhdGhdIHtTdHJpbmd9IHBh
dGgKLSAgICAgICAgICAgICAgQHBhcmFtIFtvcHRpb25zXSB7T2JqZWN0fSBIYW5kbGViYXJzIGtl
eS92YWx1ZSBwYWlycyBvZiBvcHRpb25zCi0gICAgICAgICAgICAgIEBwYXJhbSBbb3B0aW9ucy5p
dGVtVmlld0NsYXNzXSB7U3RyaW5nfSBhIHBhdGggdG8gYSB2aWV3IGNsYXNzIHVzZWQgZm9yIGVh
Y2ggaXRlbQotICAgICAgICAgICAgICBAcGFyYW0gW29wdGlvbnMuaXRlbUNvbnRyb2xsZXJdIHtT
dHJpbmd9IG5hbWUgb2YgYSBjb250cm9sbGVyIHRvIGJlIGNyZWF0ZWQgZm9yIGVhY2ggaXRlbQot
ICAgICAgICAgICAgICBAcGFyYW0gW29wdGlvbnMuZ3JvdXBlZFJvd3NdIHtib29sZWFufSBlbmFi
bGUgbm9ybWFsIGl0ZW0tYnktaXRlbSByZW5kZXJpbmcgd2hlbiBpbnNpZGUgYSBgI2dyb3VwYCBo
ZWxwZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGVhY2hIZWxwZXIocGF0aCwg
b3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGN0eCwgaGVscGVyTmFtZSA9ICdlYWNoJzsKLQot
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQpIHsKLSAgICAgICAgICAgICAg
ICBFbWJlci5hc3NlcnQoIklmIHlvdSBwYXNzIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgdG8gdGhl
IGVhY2ggaGVscGVyLCBpdCBtdXN0IGJlIGluIHRoZSBmb3JtICNlYWNoIGZvbyBpbiBiYXIiLCBh
cmd1bWVudHNbMV0gPT09ICJpbiIpOwotCi0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmROYW1l
ID0gYXJndW1lbnRzWzBdOwotCi0KLSAgICAgICAgICAgICAgICBvcHRpb25zID0gYXJndW1lbnRz
WzNdOwotICAgICAgICAgICAgICAgIHBhdGggPSBhcmd1bWVudHNbMl07Ci0KLSAgICAgICAgICAg
ICAgICBoZWxwZXJOYW1lICs9ICcgJyArIGtleXdvcmROYW1lICsgJyBpbiAnICsgcGF0aDsKLQot
ICAgICAgICAgICAgICAgIGlmIChwYXRoID09PSAnJykgewotICAgICAgICAgICAgICAgICAgICBw
YXRoID0gInRoaXMiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG9wdGlv
bnMuaGFzaC5rZXl3b3JkID0ga2V5d29yZE5hbWU7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBwYXRo
OwotICAgICAgICAgICAgICAgIHBhdGggPSAndGhpcyc7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGhlbHBlck5hbWUgKz0gJyAnICsgcGF0aDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3B0aW9ucy5oYXNoLmRhdGFTb3VyY2VCaW5kaW5nID0gcGF0aDsKLSAg
ICAgICAgICAgIC8vIFNldCB1cCBlbXB0eVZpZXcgYXMgYSBtZXRhbW9ycGggd2l0aCBubyB0YWcK
LSAgICAgICAgICAgIC8vb3B0aW9ucy5oYXNoLmVtcHR5Vmlld0NsYXNzID0gRW1iZXIuX01ldGFt
b3JwaFZpZXc7Ci0KLSAgICAgICAgICAgIC8vIGNhbid0IHJlbHkgb24gdGhpcyBkZWZhdWx0IGJl
aGF2aW9yIHdoZW4gdXNlIHN0cmljdAotICAgICAgICAgICAgY3R4ID0gdGhpcyB8fCB3aW5kb3c7
Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IG9wdGlvbnMuaGVscGVyTmFtZSB8
fCBoZWxwZXJOYW1lOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhLmluc2lkZUdyb3Vw
ICYmICFvcHRpb25zLmhhc2guZ3JvdXBlZFJvd3MgJiYgIW9wdGlvbnMuaGFzaC5pdGVtVmlld0Ns
YXNzKSB7Ci0gICAgICAgICAgICAgICAgbmV3IEdyb3VwZWRFYWNoKGN0eCwgcGF0aCwgb3B0aW9u
cykucmVuZGVyKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEVT
NlRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMgd2l0aG91dCBnbG9iYWwgbG9va3VwLgot
ICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLmNvbGxlY3Rpb24uY2FsbChjdHgsICdFbWJl
ci5IYW5kbGViYXJzLkVhY2hWaWV3Jywgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5FYWNoVmlldyA9IEVhY2hWaWV3OwotICAgICAgICBf
X2V4cG9ydHNfXy5Hcm91cGVkRWFjaCA9IEdyb3VwZWRFYWNoOwotICAgICAgICBfX2V4cG9ydHNf
Xy5lYWNoSGVscGVyID0gZWFjaEhlbHBlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhh
bmRsZWJhcnMvaGVscGVycy9sb2MiLAotICAgIFsiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGxvYyA9IF9fZGVwZW5kZW5j
eTFfXy5sb2M7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAg
ICAgICAgICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAg
ICAgICAgLy8gRVM2VE9ETzoKLSAgICAgICAgLy8gUHJldHR5IHN1cmUgdGhpcyBjYW4gYmUgZXhw
cmVzc2VkIGFzCi0gICAgICAgIC8vIHZhciBsb2NIZWxwZXIgRW1iZXJTdHJpbmdVdGlscy5sb2Mg
PwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBDYWxscyBbRW1iZXIuU3RyaW5nLmxvY10o
L2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9sb2MpIHdpdGggdGhlCi0gICAg
ICAgICAgICAgIHByb3ZpZGVkIHN0cmluZy4KLQotICAgICAgICAgICAgICBUaGlzIGlzIGEgY29u
dmVuaWVudCB3YXkgdG8gbG9jYWxpemUgdGV4dC4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAg
ICAgYGBgaHRtbAotICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJz
IiBkYXRhLXRlbXBsYXRlLW5hbWU9ImhvbWUiPgotICAgICAgICAgICAgICAgIHt7bG9jICJ3ZWxj
b21lIn19Ci0gICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBUYWtlIG5vdGUgdGhhdCBgIndlbGNvbWUiYCBpcyBhIHN0cmluZyBhbmQgbm90
IGFuIG9iamVjdAotICAgICAgICAgICAgICByZWZlcmVuY2UuCi0KLSAgICAgICAgICAgICAgU2Vl
IFtFbWJlci5TdHJpbmcubG9jXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9k
X2xvYykgZm9yIGhvdyB0byAKLSAgICAgICAgICAgICAgc2V0IHVwIGxvY2FsaXplZCBzdHJpbmcg
cmVmZXJlbmNlcy4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGxvYwotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gc3RyIFRoZSBzdHJpbmcgdG8gZm9ybWF0Ci0gICAgICAgICAgICAgIEBzZWUge0VtYmVyLlN0
cmluZyNsb2N9Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gZnVuY3Rpb24gbG9jSGVscGVyKHN0cikgewotICAgICAgICAgICAgcmV0dXJuIGxvYyhzdHIp
OwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hlbHBl
cnMvcGFydGlhbCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL2lzX25v
bmUiLCAiZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL2Jp
bmRpbmciLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVu
Y3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0gICAgICAgIC8vIHZh
ciBlbWJlckFzc2VydCA9IEVtYmVyLmFzc2VydDsKLQotICAgICAgICB2YXIgaXNOb25lID0gX19k
ZXBlbmRlbmN5Ml9fLmlzTm9uZTsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVu
ZGVuY3kzX18uaGFuZGxlYmFyc0dldDsKLSAgICAgICAgdmFyIGJpbmQgPSBfX2RlcGVuZGVuY3k0
X18uYmluZDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAg
ICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGBwYXJ0aWFsYCBoZWxwZXIgcmVuZGVycyBhbm90
aGVyIHRlbXBsYXRlIHdpdGhvdXQKLSAgICAgICAgICAgICAgY2hhbmdpbmcgdGhlIHRlbXBsYXRl
IGNvbnRleHQ6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7
e2Zvb319Ci0gICAgICAgICAgICAgIHt7cGFydGlhbCAibmF2In19Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIFRoZSBhYm92ZSBleGFtcGxlIHRlbXBsYXRlIHdpbGwgcmVuZGVy
IGEgdGVtcGxhdGUgbmFtZWQKLSAgICAgICAgICAgICAgIl9uYXYiLCB3aGljaCBoYXMgdGhlIHNh
bWUgY29udGV4dCBhcyB0aGUgcGFyZW50IHRlbXBsYXRlCi0gICAgICAgICAgICAgIGl0J3MgcmVu
ZGVyZWQgaW50bywgc28gaWYgdGhlICJfbmF2IiB0ZW1wbGF0ZSBhbHNvIHJlZmVyZW5jZWQKLSAg
ICAgICAgICAgICAgYHt7Zm9vfX1gLCBpdCB3b3VsZCBwcmludCB0aGUgc2FtZSB0aGluZyBhcyB0
aGUgYHt7Zm9vfX1gCi0gICAgICAgICAgICAgIGluIHRoZSBhYm92ZSBleGFtcGxlLgotCi0gICAg
ICAgICAgICAgIElmIGEgIl9uYXYiIHRlbXBsYXRlIGlzbid0IGZvdW5kLCB0aGUgYHBhcnRpYWxg
IGhlbHBlciB3aWxsCi0gICAgICAgICAgICAgIGZhbGwgYmFjayB0byBhIHRlbXBsYXRlIG5hbWVk
ICJuYXYiLgotCi0gICAgICAgICAgICAgICMjIEJvdW5kIHRlbXBsYXRlIG5hbWVzCi0KLSAgICAg
ICAgICAgICAgVGhlIHBhcmFtZXRlciBzdXBwbGllZCB0byBgcGFydGlhbGAgY2FuIGFsc28gYmUg
YSBwYXRoCi0gICAgICAgICAgICAgIHRvIGEgcHJvcGVydHkgY29udGFpbmluZyBhIHRlbXBsYXRl
IG5hbWUsIGUuZy46Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAg
ICB7e3BhcnRpYWwgc29tZVRlbXBsYXRlTmFtZX19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbG9vayB1cCB0aGUgdmFsdWUgb2YgYHNv
bWVUZW1wbGF0ZU5hbWVgCi0gICAgICAgICAgICAgIG9uIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IChl
LmcuIGEgY29udHJvbGxlcikgYW5kIHVzZSB0aGF0Ci0gICAgICAgICAgICAgIHZhbHVlIGFzIHRo
ZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIuIElmIHRoZSByZXNvbHZlZAotICAgICAg
ICAgICAgICB2YWx1ZSBpcyBmYWxzeSwgbm90aGluZyB3aWxsIGJlIHJlbmRlcmVkLiBJZiBgc29t
ZVRlbXBsYXRlTmFtZWAKLSAgICAgICAgICAgICAgY2hhbmdlcywgdGhlIHBhcnRpYWwgd2lsbCBi
ZSByZS1yZW5kZXJlZCB1c2luZyB0aGUgbmV3IHRlbXBsYXRlCi0gICAgICAgICAgICAgIG5hbWUu
Ci0KLSAgICAgICAgICAgICAgIyMgU2V0dGluZyB0aGUgcGFydGlhbCdzIGNvbnRleHQgd2l0aCBg
d2l0aGAKLQotICAgICAgICAgICAgICBUaGUgYHBhcnRpYWxgIGhlbHBlciBjYW4gYmUgdXNlZCBp
biBjb25qdW5jdGlvbiB3aXRoIHRoZSBgd2l0aGAKLSAgICAgICAgICAgICAgaGVscGVyIHRvIHNl
dCBhIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIHBhcnRpYWw6Ci0KLSAgICAgICAg
ICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyN3aXRoIGN1cnJlbnRVc2VyfX0K
LSAgICAgICAgICAgICAgICB7e3BhcnRpYWwgInVzZXJfaW5mbyJ9fQotICAgICAgICAgICAgICB7
ey93aXRofX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBwYXJ0
aWFsCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXJ0aWFsTmFtZSB0aGUgbmFtZSBvZiB0aGUgdGVtcGxh
dGUgdG8gcmVuZGVyIG1pbnVzIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUKLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIHBhcnRpYWxIZWxw
ZXIobmFtZSwgb3B0aW9ucykgewotCi0gICAgICAgICAgICB2YXIgY29udGV4dCA9IChvcHRpb25z
LmNvbnRleHRzICYmIG9wdGlvbnMuY29udGV4dHMubGVuZ3RoKSA/IG9wdGlvbnMuY29udGV4dHNb
MF0gOiB0aGlzOwotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25zLmhl
bHBlck5hbWUgfHwgJ3BhcnRpYWwnOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlc1sw
XSA9PT0gIklEIikgewotICAgICAgICAgICAgICAgIC8vIEhlbHBlciB3YXMgcGFzc2VkIGEgcHJv
cGVydHkgcGF0aDsgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGJpbmRp
bmcgdGhhdCB3aWxsIHJlLXJlbmRlciB3aGVuZXZlcgotICAgICAgICAgICAgICAgIC8vIHRoaXMg
cHJvcGVydHkgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICBvcHRpb25zLmZuID0gZnVuY3Rpb24o
Y29udGV4dCwgZm5PcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsTmFt
ZSA9IGhhbmRsZWJhcnNHZXQoY29udGV4dCwgbmFtZSwgZm5PcHRpb25zKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyUGFydGlhbChjb250ZXh0LCBwYXJ0aWFsTmFtZSwgZm5PcHRpb25zKTsK
LSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmQuY2FsbChj
b250ZXh0LCBuYW1lLCBvcHRpb25zLCB0cnVlLCBleGlzdHMpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIHBhcnRpYWwgcmlnaHQgaW50byBwYXJl
bnQgdGVtcGxhdGUuCi0gICAgICAgICAgICAgICAgcmVuZGVyUGFydGlhbChjb250ZXh0LCBuYW1l
LCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGV4aXN0cyh2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuICFpc05vbmUodmFsdWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVuZGVyUGFydGlhbChjb250ZXh0LCBuYW1lLCBv
cHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgiLyIpOwot
ICAgICAgICAgICAgdmFyIGxhc3RQYXJ0ID0gbmFtZVBhcnRzW25hbWVQYXJ0cy5sZW5ndGggLSAx
XTsKLQotICAgICAgICAgICAgbmFtZVBhcnRzW25hbWVQYXJ0cy5sZW5ndGggLSAxXSA9ICJfIiAr
IGxhc3RQYXJ0OwotCi0gICAgICAgICAgICB2YXIgdmlldyA9IG9wdGlvbnMuZGF0YS52aWV3Owot
ICAgICAgICAgICAgdmFyIHVuZGVyc2NvcmVkTmFtZSA9IG5hbWVQYXJ0cy5qb2luKCIvIik7Ci0g
ICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSB2aWV3LnRlbXBsYXRlRm9yTmFtZSh1bmRlcnNjb3Jl
ZE5hbWUpOwotICAgICAgICAgICAgdmFyIGRlcHJlY2F0ZWRUZW1wbGF0ZSA9ICF0ZW1wbGF0ZSAm
JiB2aWV3LnRlbXBsYXRlRm9yTmFtZShuYW1lKTsKLQotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJVbmFibGUgdG8gZmluZCBwYXJ0aWFsIHdpdGggbmFtZSAnIiArIG5hbWUgKyAiJy4iLCB0ZW1w
bGF0ZSB8fCBkZXByZWNhdGVkVGVtcGxhdGUpOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZSA9IHRl
bXBsYXRlIHx8IGRlcHJlY2F0ZWRUZW1wbGF0ZTsKLQotICAgICAgICAgICAgdGVtcGxhdGUoY29u
dGV4dCwgewotICAgICAgICAgICAgICAgIGRhdGE6IG9wdGlvbnMuZGF0YSAKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hl
bHBlcnMvc2hhcmVkIiwKLSAgICBbImVtYmVyLWhhbmRsZWJhcnMvZXh0IiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVuY3kxX18u
aGFuZGxlYmFyc0dldDsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rp
b24gcmVzb2x2ZVBhdGhzKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciByZXQgPSBbXSwKLSAg
ICAgICAgICAgIGNvbnRleHRzID0gb3B0aW9ucy5jb250ZXh0cywKLSAgICAgICAgICAgIHJvb3Rz
ID0gb3B0aW9ucy5yb290cywKLSAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGE7Ci0KLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY29udGV4dHMubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgcmV0LnB1c2goaGFuZGxlYmFyc0dldChyb290c1tpXSwgY29u
dGV4dHNbaV0sIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSAKLSAgICAgICAgICAg
ICAgICB9KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAg
ICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy90ZW1w
bGF0ZSIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLWhhbmRsZWJhcnMtY29tcGls
ZXIiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZh
ciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyB2YXIgZW1i
ZXJEZXByZWNhdGUgPSBFbWJlci5kZXByZWNhdGU7Ci0KLSAgICAgICAgdmFyIEVtYmVySGFuZGxl
YmFycyA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGVscGVycyA9
IEVtYmVySGFuZGxlYmFycy5oZWxwZXJzOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1
bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAg
ICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYHRlbXBsYXRlYCBhbGxvd3Mg
eW91IHRvIHJlbmRlciBhIHRlbXBsYXRlIGZyb20gaW5zaWRlIGFub3RoZXIgdGVtcGxhdGUuCi0g
ICAgICAgICAgICAgIFRoaXMgYWxsb3dzIHlvdSB0byByZS11c2UgdGhlIHNhbWUgdGVtcGxhdGUg
aW4gbXVsdGlwbGUgcGxhY2VzLiBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVt
cGxhdGUtbmFtZT0ibG9nZ2VkX2luX3VzZXIiPgotICAgICAgICAgICAgICAgIHt7I3dpdGggbG9n
Z2VkSW5Vc2VyfX0KLSAgICAgICAgICAgICAgICAgIExhc3QgTG9naW46IHt7bGFzdExvZ2lufX0K
LSAgICAgICAgICAgICAgICAgIFVzZXIgSW5mbzoge3t0ZW1wbGF0ZSAidXNlcl9pbmZvIn19Ci0g
ICAgICAgICAgICAgICAge3svd2l0aH19Ci0gICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0idXNlcl9pbmZv
Ij4KLSAgICAgICAgICAgICAgICBOYW1lOiA8ZW0+e3tuYW1lfX08L2VtPgotICAgICAgICAgICAg
ICAgIEthcm1hOiA8ZW0+e3trYXJtYX19PC9lbT4KLSAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAg
ICAgICAge3sjaWYgaXNVc2VyfX0KLSAgICAgICAgICAgICAgICB7e3RlbXBsYXRlICJ1c2VyX2lu
Zm8ifX0KLSAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICB7e3RlbXBsYXRl
ICJ1bmxvZ2dlZF91c2VyX2luZm8ifX0KLSAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIGhlbHBlciBsb29rcyBmb3IgdGVtcGxhdGVz
IGluIHRoZSBnbG9iYWwgYEVtYmVyLlRFTVBMQVRFU2AgaGFzaC4gSWYgeW91Ci0gICAgICAgICAg
ICAgIGFkZCBgPHNjcmlwdD5gIHRhZ3MgdG8geW91ciBwYWdlIHdpdGggdGhlIGBkYXRhLXRlbXBs
YXRlLW5hbWVgIGF0dHJpYnV0ZSBzZXQsCi0gICAgICAgICAgICAgIHRoZXkgd2lsbCBiZSBjb21w
aWxlZCBhbmQgcGxhY2VkIGluIHRoaXMgaGFzaCBhdXRvbWF0aWNhbGx5LgotCi0gICAgICAgICAg
ICAgIFlvdSBjYW4gYWxzbyBtYW51YWxseSByZWdpc3RlciB0ZW1wbGF0ZXMgYnkgYWRkaW5nIHRo
ZW0gdG8gdGhlIGhhc2g6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBFbWJlci5URU1QTEFURVNbIm15X2Nvb2xfdGVtcGxhdGUiXSA9IEVtYmVyLkhhbmRsZWJh
cnMuY29tcGlsZSgnPGI+e3t1c2VyfX08L2I+Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBkZXByZWNhdGVkCi0gICAgICAgICAgICAgIEBtZXRob2QgdGVtcGxhdGUKLSAg
ICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlTmFtZSB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyCi0gICAg
ICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gdGVt
cGxhdGVIZWxwZXIobmFtZSwgb3B0aW9ucykgewotICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRl
KCJUaGUgYHRlbXBsYXRlYCBoZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0
aGUgYHBhcnRpYWxgIGhlbHBlci4gUGxlYXNlIHVzZSBgcGFydGlhbGAgaW5zdGVhZCwgd2hpY2gg
d2lsbCB3b3JrIHRoZSBzYW1lIHdheS4iKTsKLQotICAgICAgICAgICAgb3B0aW9ucy5oZWxwZXJO
YW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8ICd0ZW1wbGF0ZSc7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBoZWxwZXJzLnBhcnRpYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgfQot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL3VuYm91bmQiLAot
ICAgIFsiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBl
cnMvYmluZGluZyIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywg
X19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKmdsb2JhbHMg
SGFuZGxlYmFycyAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgot
ICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVscGVyczsKLQotICAg
ICAgICB2YXIgcmVzb2x2ZUhlbHBlciA9IF9fZGVwZW5kZW5jeTJfXy5yZXNvbHZlSGVscGVyOwot
ICAgICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTNfXy5oYW5kbGViYXJzR2V0
OwotCi0gICAgICAgIHZhciBzbGljZSA9IFtdLnNsaWNlOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBgdW5ib3VuZGAgYWxsb3dzIHlvdSB0byBvdXRwdXQgYSBwcm9wZXJ0eSB3aXRob3V0
IGJpbmRpbmcuICpJbXBvcnRhbnQ6KiBUaGUKLSAgICAgICAgICAgICAgb3V0cHV0IHdpbGwgbm90
IGJlIHVwZGF0ZWQgaWYgdGhlIHByb3BlcnR5IGNoYW5nZXMuIFVzZSB3aXRoIGNhdXRpb24uCi0K
LSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8ZGl2Pnt7dW5ib3Vu
ZCBzb21lUHJvcGVydHlUaGF0RG9lc250Q2hhbmdlfX08L2Rpdj4KLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgYHVuYm91bmRgIGNhbiBhbHNvIGJlIHVzZWQgaW4gY29uanVuY3Rp
b24gd2l0aCBhIGJvdW5kIGhlbHBlciB0bwotICAgICAgICAgICAgICByZW5kZXIgaXQgaW4gaXRz
IHVuYm91bmQgZm9ybToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIDxkaXY+e3t1bmJvdW5kIGhlbHBlck5hbWUgc29tZVByb3BlcnR5VGhhdERvZXNudENoYW5n
ZX19PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgdW5i
b3VuZAotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkKLSAgICAgICAgICAgICAgQHJldHVybiB7
U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IGZ1bmN0aW9uIHVuYm91bmRIZWxwZXIocHJvcGVydHksIGZuKSB7Ci0gICAg
ICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sCi0g
ICAgICAgICAgICBjb250YWluZXIgPSBvcHRpb25zLmRhdGEudmlldy5jb250YWluZXIsCi0gICAg
ICAgICAgICBoZWxwZXIsIGNvbnRleHQsIG91dCwgY3R4OwotCi0gICAgICAgICAgICBjdHggPSB0
aGlzOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVW5ib3VuZCBoZWxwZXIgY2FsbC4KLSAgICAgICAgICAgICAgICBvcHRpb25zLmRh
dGEuaXNVbmJvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBoZWxwZXIgPSByZXNvbHZlSGVs
cGVyKGNvbnRhaW5lciwgcHJvcGVydHkpIHx8IGhlbHBlcnMuaGVscGVyTWlzc2luZzsKLSAgICAg
ICAgICAgICAgICBvdXQgPSBoZWxwZXIuYXBwbHkoY3R4LCBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSkpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLmRhdGEuaXNVbmJvdW5kOwotICAg
ICAgICAgICAgICAgIHJldHVybiBvdXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNv
bnRleHQgPSAoZm4uY29udGV4dHMgJiYgZm4uY29udGV4dHMubGVuZ3RoKSA/IGZuLmNvbnRleHRz
WzBdIDogY3R4OwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWJhcnNHZXQoY29udGV4dCwgcHJv
cGVydHksIGZuKTsKLSAgICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxl
YmFycy9oZWxwZXJzL3ZpZXciLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50
aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1l
dGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci12aWV3cy9zeXN0
ZW0vanF1ZXJ5IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXciLCAiZW1iZXItbWV0YWwvYmluZGlu
ZyIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmci
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBf
X2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVu
ZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAgICAgLypnbG9iYWxzIEhhbmRsZWJhcnMgKi8KLQotICAgICAgICAvKioK
LSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXIt
aGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIud2FybiwgRW1iZXIuYXNzZXJ0
Ci0gICAgICAgIC8vIHZhciBlbWJlcldhcm4gPSBFbWJlci53YXJuLCBlbWJlckFzc2VydCA9IEVt
YmVyLmFzc2VydDsKLQotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kyX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTNfXy5nZXQ7Ci0gICAg
ICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k0X18uc2V0OwotICAgICAgICB2YXIgSVNfQklORElO
RyA9IF9fZGVwZW5kZW5jeTVfXy5JU19CSU5ESU5HOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19k
ZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBWaWV3ID0gX19kZXBlbmRlbmN5
N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpc0dsb2JhbFBhdGggPSBfX2RlcGVuZGVuY3k4
X18uaXNHbG9iYWxQYXRoOwotICAgICAgICB2YXIgbm9ybWFsaXplUGF0aCA9IF9fZGVwZW5kZW5j
eTlfXy5ub3JtYWxpemVQYXRoOwotICAgICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5k
ZW5jeTlfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIgRW1iZXJTdHJpbmcgPSBfX2RlcGVu
ZGVuY3kxMF9fWyJkZWZhdWx0Il07Ci0KLQotICAgICAgICB2YXIgTE9XRVJDQVNFX0FfWiA9IC9e
W2Etel0vLAotICAgICAgICBWSUVXX1BSRUZJWCA9IC9edmlld1wuLzsKLQotICAgICAgICBmdW5j
dGlvbiBtYWtlQmluZGluZ3ModGhpc0NvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZh
ciBoYXNoID0gb3B0aW9ucy5oYXNoLAotICAgICAgICAgICAgaGFzaFR5cGUgPSBvcHRpb25zLmhh
c2hUeXBlczsKLQotICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBoYXNoKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGhhc2hUeXBlW3Byb3BdID09PSAnSUQnKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gaGFzaFtwcm9wXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
SVNfQklORElORy50ZXN0KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci53
YXJuKCJZb3UncmUgYXR0ZW1wdGluZyB0byByZW5kZXIgYSB2aWV3IGJ5IHBhc3NpbmcgIiArIHBy
b3AgKyAiPSIgKyB2YWx1ZSArICIgdG8gYSB2aWV3IGhlbHBlciwgYnV0IHRoaXMgc3ludGF4IGlz
IGFtYmlndW91cy4gWW91IHNob3VsZCBlaXRoZXIgc3Vycm91bmQgIiArIHZhbHVlICsgIiBpbiBx
dW90ZXMgb3IgcmVtb3ZlIGBCaW5kaW5nYCBmcm9tICIgKyBwcm9wICsgIi4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hbcHJvcCAr
ICdCaW5kaW5nJ10gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hUeXBlW3By
b3AgKyAnQmluZGluZyddID0gJ1NUUklORyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgaGFzaFtwcm9wXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoVHlwZVtw
cm9wXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGhhc2guaGFzT3duUHJvcGVydHkoJ2lkQmluZGluZycp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gaWQgY2FuJ3QgYmUgYm91bmQsIHNvIGp1c3QgcGVyZm9y
bSBvbmUtdGltZSBsb29rdXAuCi0gICAgICAgICAgICAgICAgaGFzaC5pZCA9IGhhbmRsZWJhcnNH
ZXQodGhpc0NvbnRleHQsIGhhc2guaWRCaW5kaW5nLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAg
ICBoYXNoVHlwZS5pZCA9ICdTVFJJTkcnOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoLmlk
QmluZGluZzsKLSAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFR5cGUuaWRCaW5kaW5nOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIFZpZXdIZWxwZXIgPSBFbWJlck9i
amVjdC5jcmVhdGUoewotCi0gICAgICAgICAgICBwcm9wZXJ0aWVzRnJvbUhUTUxPcHRpb25zOiBm
dW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBvcHRpb25zLmhh
c2gsIGRhdGEgPSBvcHRpb25zLmRhdGE7Ci0gICAgICAgICAgICAgICAgdmFyIGV4dGVuc2lvbnMg
PSB7fSwKLSAgICAgICAgICAgICAgICBjbGFzc2VzID0gaGFzaFsnY2xhc3MnXSwKLSAgICAgICAg
ICAgICAgICBkdXAgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGlmIChoYXNoLmlkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuZWxlbWVudElkID0gaGFzaC5pZDsKLSAgICAg
ICAgICAgICAgICAgICAgZHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoaGFzaC50YWcpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy50
YWdOYW1lID0gaGFzaC50YWc7Ci0gICAgICAgICAgICAgICAgICAgIGR1cCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuc3BsaXQoJyAnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXh0ZW5zaW9ucy5jbGFzc05hbWVzID0gY2xhc3NlczsKLSAgICAgICAgICAgICAgICAg
ICAgZHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aGFzaC5jbGFzc0JpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5jbGFz
c05hbWVCaW5kaW5ncyA9IGhhc2guY2xhc3NCaW5kaW5nLnNwbGl0KCcgJyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGR1cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKGhhc2guY2xhc3NOYW1lQmluZGluZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGV4dGVuc2lvbnMuY2xhc3NOYW1lQmluZGluZ3MgPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBleHRlbnNpb25zLmNsYXNzTmFtZUJpbmRpbmdzID0gW107Ci0gICAgICAg
ICAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xhc3NOYW1lQmluZGluZ3MgPSBleHRlbnNpb25zLmNs
YXNzTmFtZUJpbmRpbmdzLmNvbmNhdChoYXNoLmNsYXNzTmFtZUJpbmRpbmdzLnNwbGl0KCcgJykp
OwotICAgICAgICAgICAgICAgICAgICBkdXAgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChoYXNoLmF0dHJpYnV0ZUJpbmRpbmdzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgiU2V0dGluZyAnYXR0cmlidXRlQmluZGluZ3MnIHZpYSBI
YW5kbGViYXJzIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc3ViY2xhc3MgRW1iZXIuVmlldyBhbmQg
c2V0IGl0IHRoZXJlIGluc3RlYWQuIik7Ci0gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMu
YXR0cmlidXRlQmluZGluZ3MgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBkdXAgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChkdXApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaGFzaCA9IGpRdWVyeS5leHRlbmQoe30sIGhhc2gpOwotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgaGFzaC5pZDsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhh
c2gudGFnOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFsnY2xhc3MnXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIGhhc2guY2xhc3NCaW5kaW5nOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcHJvcGVyIGNvbnRleHQgZm9yIGFsbCBi
aW5kaW5ncyBwYXNzZWQgdG8gdGhlIGhlbHBlci4gVGhpcyBhcHBsaWVzIHRvIHJlZ3VsYXIgYXR0
cmlidXRlIGJpbmRpbmdzCi0gICAgICAgICAgICAgICAgLy8gYXMgd2VsbCBhcyBjbGFzcyBuYW1l
IGJpbmRpbmdzLiBJZiB0aGUgYmluZGluZ3MgYXJlIGxvY2FsLCBtYWtlIHRoZW0gcmVsYXRpdmUg
dG8gdGhlIGN1cnJlbnQgY29udGV4dAotICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhl
IHZpZXcuCi0gICAgICAgICAgICAgICAgdmFyIHBhdGg7Ci0KLSAgICAgICAgICAgICAgICAvLyBF
dmFsdWF0ZSB0aGUgY29udGV4dCBvZiByZWd1bGFyIGF0dHJpYnV0ZSBiaW5kaW5nczoKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFoYXNoLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IC8vIFRlc3QgaWYgdGhlIHByb3BlcnR5IGVuZHMgaW4gIkJpbmRpbmciCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChJU19CSU5ESU5HLnRlc3QocHJvcCkgJiYgdHlwZW9mIGhhc2hbcHJvcF0gPT09
ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5jb250ZXh0
dWFsaXplQmluZGluZ1BhdGgoaGFzaFtwcm9wXSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocGF0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hbcHJvcF0g
PSBwYXRoOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGhlIGNv
bnRleHQgb2YgY2xhc3MgbmFtZSBiaW5kaW5nczoKLSAgICAgICAgICAgICAgICBpZiAoZXh0ZW5z
aW9ucy5jbGFzc05hbWVCaW5kaW5ncykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBi
IGluIGV4dGVuc2lvbnMuY2xhc3NOYW1lQmluZGluZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBmdWxsID0gZXh0ZW5zaW9ucy5jbGFzc05hbWVCaW5kaW5nc1tiXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVsbCA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0dWFsaXplIHRoZSBwYXRoIG9mIGNsYXNzTmFt
ZUJpbmRpbmcgc28gdGhpczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjbGFzc05hbWVCaW5kaW5nPSJpc0dyZWVuOmdy
ZWVuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaXMgY29udmVydGVkIHRvIHRoaXM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY2xhc3NOYW1lQmlu
ZGluZz0iX3BhcmVudFZpZXcuY29udGV4dC5pc0dyZWVuOmdyZWVuIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwYXJzZWRQYXRoID0gVmlldy5fcGFyc2VQcm9wZXJ0eVBhdGgoZnVs
bCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuY29udGV4dHVhbGl6
ZUJpbmRpbmdQYXRoKHBhcnNlZFBhdGgucGF0aCwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9ucy5jbGFzc05hbWVCaW5kaW5nc1tiXSA9IHBhdGggKyBwYXJzZWRQYXRoLmNsYXNzTmFt
ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5leHRlbmQoaGFzaCwgZXh0ZW5zaW9ucyk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmluZGluZ3MgZnJvbSB0aGUgY3Vy
cmVudCBjb250ZXh0IHRvIGEgY29udGV4dCB0aGF0IGNhbiBiZSBldmFsdWF0ZWQgd2l0aGluIHRo
ZSB2aWV3LgotICAgICAgICAgICAgLy8gUmV0dXJucyBudWxsIGlmIHRoZSBwYXRoIHNob3VsZG4n
dCBiZSBjaGFuZ2VkLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRPRE86IGNvbnNp
ZGVyIHRoZSBhZGRpdGlvbiBvZiBhIHByZWZpeCB0aGF0IHdvdWxkIGFsbG93IHRoaXMgbWV0aG9k
IHRvIHJldHVybiBgcGF0aGAuCi0gICAgICAgICAgICBjb250ZXh0dWFsaXplQmluZGluZ1BhdGg6
IGZ1bmN0aW9uKHBhdGgsIGRhdGEpIHsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9
IG5vcm1hbGl6ZVBhdGgobnVsbCwgcGF0aCwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
cm1hbGl6ZWQuaXNLZXl3b3JkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAndGVtcGxh
dGVEYXRhLmtleXdvcmRzLicgKyBwYXRoOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNH
bG9iYWxQYXRoKHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0aCA9PT0gJ3RoaXMnIHx8IHBhdGggPT09ICcnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX3BhcmVudFZpZXcuY29udGV4dCc7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdfcGFyZW50
Vmlldy5jb250ZXh0LicgKyBwYXRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIGhlbHBlcjogZnVuY3Rpb24odGhpc0NvbnRleHQsIHBhdGgsIG9wdGlv
bnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YSwKLSAgICAgICAg
ICAgICAgICBmbiA9IG9wdGlvbnMuZm4sCi0gICAgICAgICAgICAgICAgbmV3VmlldzsKLQotICAg
ICAgICAgICAgICAgIG1ha2VCaW5kaW5ncyh0aGlzQ29udGV4dCwgb3B0aW9ucyk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBwYXRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBsb29rdXA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgaXMg
YSBsYW1lIGNvbmRpdGlvbmFsLCB0aGlzIHNob3VsZCBsaWtlbHkgY2hhbmdlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGJ1dCBzb21ldGhpbmcgYWxvbmcgdGhlc2UgbGluZXMgd2lsbCBsaWtlbHkg
bmVlZCB0byBiZSBhZGRlZAotICAgICAgICAgICAgICAgICAgICAvLyBhcyBkZXByZWNhdGlvbiB3
YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICBpZiAo
b3B0aW9ucy50eXBlc1swXSA9PT0gJ1NUUklORycgJiYgTE9XRVJDQVNFX0FfWi50ZXN0KHBhdGgp
ICYmICFWSUVXX1BSRUZJWC50ZXN0KHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
b29rdXAgPSBwYXRoOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3VmlldyA9IGhhbmRsZWJhcnNHZXQodGhpc0NvbnRleHQsIHBhdGgsIG9w
dGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdWaWV3ID09PSAn
c3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IG5ld1ZpZXc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAobG9va3VwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBF
bWJlci5hc3NlcnQoIlZpZXcgcmVxdWlyZXMgYSBjb250YWluZXIiLCAhIWRhdGEudmlldy5jb250
YWluZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmlldyA9IGRhdGEudmlldy5jb250
YWluZXIubG9va3VwRmFjdG9yeSgndmlldzonICsgbG9va3VwKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVW5hYmxlIHRvIGZpbmQg
dmlldyBhdCBwYXRoICciICsgcGF0aCArICInIiwgISFuZXdWaWV3KTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuZXdWaWV3ID0gcGF0aDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoRW1iZXJTdHJpbmcuZm10
KCdZb3UgbXVzdCBwYXNzIGEgdmlldyB0byB0aGUgI3ZpZXcgaGVscGVyLCBub3QgJUAgKCVAKScs
IFtwYXRoLCBuZXdWaWV3XSksIFZpZXcuZGV0ZWN0KG5ld1ZpZXcpIHx8IFZpZXcuZGV0ZWN0SW5z
dGFuY2UobmV3VmlldykpOwotCi0gICAgICAgICAgICAgICAgdmFyIHZpZXdPcHRpb25zID0gdGhp
cy5wcm9wZXJ0aWVzRnJvbUhUTUxPcHRpb25zKG9wdGlvbnMsIHRoaXNDb250ZXh0KTsKLSAgICAg
ICAgICAgICAgICB2YXIgY3VycmVudFZpZXcgPSBkYXRhLnZpZXc7Ci0gICAgICAgICAgICAgICAg
dmlld09wdGlvbnMudGVtcGxhdGVEYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICB2YXIgbmV3
Vmlld1Byb3RvID0gbmV3Vmlldy5wcm90byA/IG5ld1ZpZXcucHJvdG8oKSA6IG5ld1ZpZXc7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZm4pIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCJZb3UgY2Fubm90IHByb3ZpZGUgYSB0ZW1wbGF0ZSBibG9jayBpZiB5b3UgYWxzbyBzcGVj
aWZpZWQgYSB0ZW1wbGF0ZU5hbWUiLCAhZ2V0KHZpZXdPcHRpb25zLCAndGVtcGxhdGVOYW1lJykg
JiYgIWdldChuZXdWaWV3UHJvdG8sICd0ZW1wbGF0ZU5hbWUnKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZpZXdPcHRpb25zLnRlbXBsYXRlID0gZm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIG92ZXJyaWRlIHRoZSBgX2NvbnRleHRgIGNv
bXB1dGVkIHByb3BlcnR5IGlmIHRoZXJlIGlzCi0gICAgICAgICAgICAgICAgLy8gbm8gc3BlY2lm
aWVkIGNvbnRyb2xsZXIuIFNlZSBWaWV3I19jb250ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgot
ICAgICAgICAgICAgICAgIGlmICghbmV3Vmlld1Byb3RvLmNvbnRyb2xsZXIgJiYgIW5ld1ZpZXdQ
cm90by5jb250cm9sbGVyQmluZGluZyAmJiAhdmlld09wdGlvbnMuY29udHJvbGxlciAmJiAhdmll
d09wdGlvbnMuY29udHJvbGxlckJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlld09w
dGlvbnMuX2NvbnRleHQgPSB0aGlzQ29udGV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBmb3IgaW5zdHJ1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG9w
dGlvbnMuaGVscGVyTmFtZSkgewotICAgICAgICAgICAgICAgICAgICB2aWV3T3B0aW9ucy5oZWxw
ZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRWaWV3LmFwcGVuZENoaWxkKG5ld1ZpZXcsIHZpZXdPcHRpb25zKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIF9fZXhwb3J0c19fLlZpZXdIZWxw
ZXIgPSBWaWV3SGVscGVyOwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYHt7dmlld319YCBp
bnNlcnRzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGBFbWJlci5WaWV3YCBpbnRvIGEgdGVtcGxhdGUg
cGFzc2luZyBpdHMKLSAgICAgICAgICAgICAgb3B0aW9ucyB0byB0aGUgYEVtYmVyLlZpZXdgJ3Mg
YGNyZWF0ZWAgbWV0aG9kIGFuZCB1c2luZyB0aGUgc3VwcGxpZWQgYmxvY2sgYXMKLSAgICAgICAg
ICAgICAgdGhlIHZpZXcncyBvd24gdGVtcGxhdGUuCi0KLSAgICAgICAgICAgICAgQW4gZW1wdHkg
YDxib2R5PmAgYW5kIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGU6Ci0KLSAgICAgICAgICAgICAgYGBg
aGFuZGxlYmFycwotICAgICAgICAgICAgICBBIHNwYW46Ci0gICAgICAgICAgICAgIHt7I3ZpZXcg
dGFnTmFtZT0ic3BhbiJ9fQotICAgICAgICAgICAgICAgIGhlbGxvLgotICAgICAgICAgICAgICB7
ey92aWV3fX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQg
aW4gSFRNTCBzdHJ1Y3R1cmU6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAg
ICA8Ym9keT4KLSAgICAgICAgICAgICAgICA8IS0tIE5vdGU6IHRoZSBoYW5kbGViYXJzIHRlbXBs
YXRlIHNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgYWxzbyByZXN1bHRzIGluIGEgcmVuZGVy
ZWQgRW1iZXIuVmlldwotICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIG91dGVyIDxk
aXY+IGhlcmUgLS0+Ci0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4K
LSAgICAgICAgICAgICAgICAgIEEgc3BhbjoKLSAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJl
bWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAgICAgICAgSGVsbG8uCi0g
ICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAg
ICAgICAgIDwvYm9keT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIGBw
YXJlbnRWaWV3YCBzZXR0aW5nCi0KLSAgICAgICAgICAgICAgVGhlIGBwYXJlbnRWaWV3YCBwcm9w
ZXJ0eSBvZiB0aGUgbmV3IGBFbWJlci5WaWV3YCBpbnN0YW5jZSBjcmVhdGVkIHRocm91Z2gKLSAg
ICAgICAgICAgICAgYHt7dmlld319YCB3aWxsIGJlIHNldCB0byB0aGUgYEVtYmVyLlZpZXdgIGlu
c3RhbmNlIG9mIHRoZSB0ZW1wbGF0ZSB3aGVyZQotICAgICAgICAgICAgICBge3t2aWV3fX1gIHdh
cyBjYWxsZWQuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBh
VmlldyA9IEVtYmVyLlZpZXcuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1i
ZXIuSGFuZGxlYmFycy5jb21waWxlKCJ7eyN2aWV3fX0gbXkgcGFyZW50OiB7e3BhcmVudFZpZXcu
ZWxlbWVudElkfX0ge3svdmlld319IikKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgYVZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgV2lsbCByZXN1bHQgaW4gSFRNTCBzdHJ1Y3R1cmU6Ci0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4K
LSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjIiIGNsYXNzPSJlbWJlci12aWV3Ij4KLSAg
ICAgICAgICAgICAgICAgIG15IHBhcmVudDogZW1iZXIxCi0gICAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAjIyMgU2V0dGluZyBDU1MgaWQgYW5kIGNsYXNzIGF0dHJpYnV0ZXMKLQotICAgICAgICAgICAg
ICBUaGUgSFRNTCBgaWRgIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IG9uIHRoZSBge3t2aWV3fX1gJ3Mg
cmVzdWx0aW5nIGVsZW1lbnQgd2l0aAotICAgICAgICAgICAgICB0aGUgYGlkYCBvcHRpb24uIFRo
aXMgb3B0aW9uIHdpbGwgX25vdF8gYmUgcGFzc2VkIHRvIGBFbWJlci5WaWV3LmNyZWF0ZWAuCi0K
LSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyN2aWV3IHRhZ05h
bWU9InNwYW4iIGlkPSJhLWN1c3RvbS1pZCJ9fQotICAgICAgICAgICAgICAgIGhlbGxvLgotICAg
ICAgICAgICAgICB7ey92aWV3fX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
UmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlOgotCi0gICAgICAgICAgICAg
IGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICAg
ICAgICAgICAgPHNwYW4gaWQ9ImEtY3VzdG9tLWlkIiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAg
ICAgICAgICAgICAgICBoZWxsby4KLSAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAg
ICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgSFRNTCBg
Y2xhc3NgIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IG9uIHRoZSBge3t2aWV3fX1gJ3MgcmVzdWx0aW5n
IGVsZW1lbnQKLSAgICAgICAgICAgICAgd2l0aCB0aGUgYGNsYXNzYCBvciBgY2xhc3NOYW1lQmlu
ZGluZ3NgIG9wdGlvbnMuIFRoZSBgY2xhc3NgIG9wdGlvbiB3aWxsCi0gICAgICAgICAgICAgIGRp
cmVjdGx5IHNldCB0aGUgQ1NTIGBjbGFzc2AgYXR0cmlidXRlIGFuZCB3aWxsIG5vdCBiZSBwYXNz
ZWQgdG8KLSAgICAgICAgICAgICAgYEVtYmVyLlZpZXcuY3JlYXRlYC4gYGNsYXNzTmFtZUJpbmRp
bmdzYCB3aWxsIGJlIHBhc3NlZCB0byBgY3JlYXRlYCBhbmQgdXNlCi0gICAgICAgICAgICAgIGBF
bWJlci5WaWV3YCdzIGNsYXNzIG5hbWUgYmluZGluZyBmdW5jdGlvbmFsaXR5OgotCi0gICAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjdmlldyB0YWdOYW1lPSJzcGFu
IiBjbGFzcz0iYS1jdXN0b20tY2xhc3MifX0KLSAgICAgICAgICAgICAgICBoZWxsby4KLSAgICAg
ICAgICAgICAge3svdmlld319Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFJl
c3VsdHMgaW4gdGhlIGZvbGxvd2luZyBIVE1MIHN0cnVjdHVyZToKLQotICAgICAgICAgICAgICBg
YGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAg
ICAgICAgIDxzcGFuIGlkPSJlbWJlcjIiIGNsYXNzPSJlbWJlci12aWV3IGEtY3VzdG9tLWNsYXNz
Ij4KLSAgICAgICAgICAgICAgICAgIGhlbGxvLgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAg
ICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMj
IyBTdXBwbHlpbmcgYSBkaWZmZXJlbnQgdmlldyBjbGFzcwotCi0gICAgICAgICAgICAgIGB7e3Zp
ZXd9fWAgY2FuIHRha2UgYW4gb3B0aW9uYWwgZmlyc3QgYXJndW1lbnQgYmVmb3JlIGl0cyBzdXBw
bGllZCBvcHRpb25zIHRvCi0gICAgICAgICAgICAgIHNwZWNpZnkgYSBwYXRoIHRvIGEgY3VzdG9t
IHZpZXcgY2xhc3MuCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAg
ICB7eyN2aWV3ICJNeUFwcC5DdXN0b21WaWV3In19Ci0gICAgICAgICAgICAgICAgaGVsbG8uCi0g
ICAgICAgICAgICAgIHt7L3ZpZXd9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBUaGUgZmlyc3QgYXJndW1lbnQgY2FuIGFsc28gYmUgYSByZWxhdGl2ZSBwYXRoIGFjY2Vzc2li
bGUgZnJvbSB0aGUgY3VycmVudAotICAgICAgICAgICAgICBjb250ZXh0LgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlBcHAgPSBFbWJlci5BcHBsaWNhdGlv
bi5jcmVhdGUoe30pOwotICAgICAgICAgICAgICBNeUFwcC5PdXRlclZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgaW5uZXJWaWV3Q2xhc3M6IEVtYmVyLlZpZXcuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnYS1jdXN0b20tdmlldy1jbGFz
cy1hcy1wcm9wZXJ0eSddCi0gICAgICAgICAgICAgICAgfSksCi0gICAgICAgICAgICAgICAgdGVt
cGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgne3sjdmlldyAidmlldy5pbm5lclZpZXdD
bGFzcyJ9fSBoaSB7ey92aWV3fX0nKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICBNeUFwcC5PdXRlclZpZXcuY3JlYXRlKCkuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1M
OgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBpZD0iZW1iZXIx
IiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0iZW1iZXIyIiBj
bGFzcz0iZW1iZXItdmlldyBhLWN1c3RvbS12aWV3LWNsYXNzLWFzLXByb3BlcnR5Ij4KLSAgICAg
ICAgICAgICAgICAgIGhpCi0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIDwv
ZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgQmxvY2tsZXNzIHVz
ZQotCi0gICAgICAgICAgICAgIElmIHlvdSBzdXBwbHkgYSBjdXN0b20gYEVtYmVyLlZpZXdgIHN1
YmNsYXNzIHRoYXQgc3BlY2lmaWVzIGl0cyBvd24gdGVtcGxhdGUKLSAgICAgICAgICAgICAgb3Ig
cHJvdmlkZSBhIGB0ZW1wbGF0ZU5hbWVgIG9wdGlvbiB0byBge3t2aWV3fX1gIGl0IGNhbiBiZSB1
c2VkIHdpdGhvdXQKLSAgICAgICAgICAgICAgc3VwcGx5aW5nIGEgYmxvY2suIEF0dGVtcHRzIHRv
IHVzZSBib3RoIGEgYHRlbXBsYXRlTmFtZWAgb3B0aW9uIGFuZCBzdXBwbHkgYQotICAgICAgICAg
ICAgICBibG9jayB3aWxsIHRocm93IGFuIGVycm9yLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRs
ZWJhcnMKLSAgICAgICAgICAgICAge3t2aWV3ICJNeUFwcC5WaWV3V2l0aEFUZW1wbGF0ZURlZmlu
ZWQifX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIGB2aWV3TmFtZWAg
cHJvcGVydHkKLQotICAgICAgICAgICAgICBZb3UgY2FuIHN1cHBseSBhIGB2aWV3TmFtZWAgb3B0
aW9uIHRvIGB7e3ZpZXd9fWAuIFRoZSBgRW1iZXIuVmlld2AgaW5zdGFuY2UKLSAgICAgICAgICAg
ICAgd2lsbCBiZSByZWZlcmVuY2VkIGFzIGEgcHJvcGVydHkgb2YgaXRzIHBhcmVudCB2aWV3IGJ5
IHRoaXMgbmFtZS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IGFWaWV3ID0gRW1iZXIuVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBF
bWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ3t7I3ZpZXcgdmlld05hbWU9ImFDaGlsZEJ5TmFtZSJ9
fSBoaSB7ey92aWV3fX0nKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBhVmll
dy5hcHBlbmRUbygnYm9keScpOwotICAgICAgICAgICAgICBhVmlldy5nZXQoJ2FDaGlsZEJ5TmFt
ZScpIC8vIHRoZSBpbnN0YW5jZSBvZiBFbWJlci5WaWV3IGNyZWF0ZWQgYnkge3t2aWV3fX0gaGVs
cGVyCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgdmlldwotICAg
ICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMK
LSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gdmlld0hlbHBlcihwYXRoLCBvcHRpb25zKSB7Ci0gICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIlRoZSB2aWV3IGhlbHBlciBvbmx5IHRha2VzIGEgc2luZ2xlIGFy
Z3VtZW50IiwgYXJndW1lbnRzLmxlbmd0aCA8PSAyKTsKLQotICAgICAgICAgICAgLy8gSWYgbm8g
cGF0aCBpcyBwcm92aWRlZCwgdHJlYXQgcGF0aCBwYXJhbSBhcyBvcHRpb25zCi0gICAgICAgICAg
ICAvLyBhbmQgZ2V0IGFuIGluc3RhbmNlIG9mIHRoZSByZWdpc3RlcmVkIGB2aWV3OnRvcGxldmVs
YAotICAgICAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5kYXRhICYmIHBhdGguZGF0YS5pc1JlbmRl
ckRhdGEpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gcGF0aDsKLSAgICAgICAgICAgICAg
ICBFbWJlci5hc3NlcnQoJ3t7dmlld319IGhlbHBlciByZXF1aXJlcyBwYXJlbnQgdmlldyB0byBo
YXZlIGEgY29udGFpbmVyIGJ1dCBub25lIHdhcyBmb3VuZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMg
d2hlbiB5b3UgYXJlIG1hbnVhbGx5LW1hbmFnaW5nIHZpZXdzLicsICEhb3B0aW9ucy5kYXRhLnZp
ZXcuY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICBwYXRoID0gb3B0aW9ucy5kYXRhLnZpZXcu
Y29udGFpbmVyLmxvb2t1cEZhY3RvcnkoJ3ZpZXc6dG9wbGV2ZWwnKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3B0aW9ucy5oZWxwZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8
ICd2aWV3JzsKLQotICAgICAgICAgICAgcmV0dXJuIFZpZXdIZWxwZXIuaGVscGVyKHRoaXMsIHBh
dGgsIG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18udmlld0hlbHBl
ciA9IHZpZXdIZWxwZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hl
bHBlcnMveWllbGQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyB2YXIgZW1iZXJBc3NlcnQg
PSBFbWJlci5hc3NlcnQ7Ci0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGB7e3lpZWxkfX1gIGRlbm90ZXMgYW4gYXJl
YSBvZiBhIHRlbXBsYXRlIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBpbnNpZGUKLSAgICAgICAgICAg
ICAgb2YgYW5vdGhlciB0ZW1wbGF0ZS4gSXQgaGFzIHR3byBtYWluIHVzZXM6Ci0KLSAgICAgICAg
ICAgICAgIyMjIFVzZSB3aXRoIGBsYXlvdXRgCi0gICAgICAgICAgICAgIFdoZW4gdXNlZCBpbiBh
IEhhbmRsZWJhcnMgdGVtcGxhdGUgdGhhdCBpcyBhc3NpZ25lZCB0byBhbiBgRW1iZXIuVmlld2AK
LSAgICAgICAgICAgICAgaW5zdGFuY2UncyBgbGF5b3V0YCBwcm9wZXJ0eSBFbWJlciB3aWxsIHJl
bmRlciB0aGUgbGF5b3V0IHRlbXBsYXRlIGZpcnN0LAotICAgICAgICAgICAgICBpbnNlcnRpbmcg
dGhlIHZpZXcncyBvd24gcmVuZGVyZWQgb3V0cHV0IGF0IHRoZSBge3t5aWVsZH19YCBsb2NhdGlv
bi4KLQotICAgICAgICAgICAgICBBbiBlbXB0eSBgPGJvZHk+YCBhbmQgdGhlIGZvbGxvd2luZyBh
cHBsaWNhdGlvbiBjb2RlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NO
YW1lczogWydhLXZpZXctd2l0aC1sYXlvdXQnXSwKLSAgICAgICAgICAgICAgICBsYXlvdXQ6IEVt
YmVyLkhhbmRsZWJhcnMuY29tcGlsZSgnPGRpdiBjbGFzcz0id3JhcHBlciI+e3t5aWVsZH19PC9k
aXY+JyksCi0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGls
ZSgnPHNwYW4+SSBhbSB3cmFwcGVkPC9zcGFuPicpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIGFWaWV3ID0gQVZpZXcuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgIGFWaWV3LmFw
cGVuZFRvKCdib2R5Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwg
cmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRNTCBvdXRwdXQ6Ci0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8Ym9keT4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdl
bWJlci12aWV3IGEtdmlldy13aXRoLWxheW91dCc+Ci0gICAgICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJ3cmFwcGVyIj4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4+SSBhbSB3cmFwcGVkPC9z
cGFuPgotICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0g
ICAgICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
VGhlIGB5aWVsZGAgaGVscGVyIGNhbm5vdCBiZSB1c2VkIG91dHNpZGUgb2YgYSB0ZW1wbGF0ZSBh
c3NpZ25lZCB0byBhbgotICAgICAgICAgICAgICBgRW1iZXIuVmlld2AncyBgbGF5b3V0YCBwcm9w
ZXJ0eSBhbmQgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiBhdHRlbXB0ZWQuCi0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBCVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2Etdmlldy13aXRoLWxheW91dCddLAot
ICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ3t7eWll
bGR9fScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGJWaWV3ID0gQlZpZXcu
Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgIGJWaWV3LmFwcGVuZFRvKCdib2R5Jyk7Ci0KLSAgICAg
ICAgICAgICAgLy8gdGhyb3dzCi0gICAgICAgICAgICAgIC8vIFVuY2F1Z2h0IEVycm9yOiBhc3Nl
cnRpb24gZmFpbGVkOgotICAgICAgICAgICAgICAvLyBZb3UgY2FsbGVkIHlpZWxkIGluIGEgdGVt
cGxhdGUgdGhhdCB3YXMgbm90IGEgbGF5b3V0Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICMjIyBVc2Ugd2l0aCBFbWJlci5Db21wb25lbnQKLSAgICAgICAgICAgICAgV2hlbiBk
ZXNpZ25pbmcgY29tcG9uZW50cyBge3t5aWVsZH19YCBpcyB1c2VkIHRvIGRlbm90ZSB3aGVyZSwg
aW5zaWRlIHRoZSBjb21wb25lbnQncwotICAgICAgICAgICAgICB0ZW1wbGF0ZSwgYW4gb3B0aW9u
YWwgYmxvY2sgcGFzc2VkIHRvIHRoZSBjb21wb25lbnQgc2hvdWxkIHJlbmRlcjoKLQotICAgICAg
ICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDwhLS0gYXBwbGljYXRpb24uaGJz
IC0tPgotICAgICAgICAgICAgICB7eyNsYWJlbGVkLXRleHRmaWVsZCB2YWx1ZT1zb21lUHJvcGVy
dHl9fQotICAgICAgICAgICAgICAgIEZpcnN0IG5hbWU6Ci0gICAgICAgICAgICAgIHt7L2xhYmVs
ZWQtdGV4dGZpZWxkfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFu
ZGxlYmFycwotICAgICAgICAgICAgICA8IS0tIGNvbXBvbmVudHMvbGFiZWxlZC10ZXh0ZmllbGQu
aGJzIC0tPgotICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAge3t5aWVsZH19
IHt7aW5wdXQgdmFsdWU9dmFsdWV9fQotICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBSZXN1bHQ6Ci0KLSAgICAgICAgICAgICAgYGBgaHRt
bAotICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgRmlyc3QgbmFtZTogPGlu
cHV0IHR5cGU9InRleHQiIC8+Ci0gICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgeWllbGQKLSAgICAgICAgICAgICAgQGZvciBF
bWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBvcHRp
b25zCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAg
ICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiB5aWVsZEhl
bHBlcihvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgdmlldyA9IG9wdGlvbnMuZGF0YS52aWV3
OwotCi0gICAgICAgICAgICB3aGlsZSAodmlldyAmJiAhZ2V0KHZpZXcsICdsYXlvdXQnKSkgewot
ICAgICAgICAgICAgICAgIGlmICh2aWV3Ll9jb250ZXh0VmlldykgewotICAgICAgICAgICAgICAg
ICAgICB2aWV3ID0gdmlldy5fY29udGV4dFZpZXc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGdldCh2aWV3LCAnX3BhcmVudFZpZXcnKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgiWW91IGNhbGxlZCB5aWVsZCBpbiBhIHRlbXBsYXRlIHRoYXQgd2FzIG5vdCBhIGxheW91dCIs
ICEhdmlldyk7Ci0KLSAgICAgICAgICAgIHZpZXcuX3lpZWxkKHRoaXMsIG9wdGlvbnMpOwotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2xvYWRlciIsCi0g
ICAgWyJlbWJlci1oYW5kbGViYXJzL2NvbXBvbmVudF9sb29rdXAiLCAiZW1iZXItdmlld3Mvc3lz
dGVtL2pxdWVyeSIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9s
YXp5X2xvYWQiLCAiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJleHBvcnRzIl0sCi0gICAg
ZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNf
XywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLypnbG9iYWxzIEhhbmRsZWJhcnMgKi8KLQotICAg
ICAgICB2YXIgQ29tcG9uZW50TG9va3VwID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IG9uTG9hZCA9IF9fZGVwZW5kZW5jeTRfXy5vbkxvYWQ7Ci0KLSAgICAgICAgdmFyIEVtYmVySGFu
ZGxlYmFycyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5k
bGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBGaW5k
IHRlbXBsYXRlcyBzdG9yZWQgaW4gdGhlIGhlYWQgdGFnIGFzIHNjcmlwdCB0YWdzIGFuZCBtYWtl
IHRoZW0gYXZhaWxhYmxlCi0gICAgICAgICAgICAgIHRvIGBFbWJlci5Db3JlVmlld2AgaW4gdGhl
IGdsb2JhbCBgRW1iZXIuVEVNUExBVEVTYCBvYmplY3QuIFRoaXMgd2lsbCBiZSBydW4KLSAgICAg
ICAgICAgICAgYXMgYXMgalF1ZXJ5IERPTS1yZWFkeSBjYWxsYmFjay4KLQotICAgICAgICAgICAg
ICBTY3JpcHQgdGFncyB3aXRoIGB0ZXh0L3gtaGFuZGxlYmFyc2Agd2lsbCBiZSBjb21waWxlZAot
ICAgICAgICAgICAgICB3aXRoIEVtYmVyJ3MgSGFuZGxlYmFycyBhbmQgYXJlIHN1aXRhYmxlIGZv
ciB1c2UgYXMgYSB2aWV3J3MgdGVtcGxhdGUuCi0gICAgICAgICAgICAgIFRob3NlIHdpdGggdHlw
ZSBgdGV4dC94LXJhdy1oYW5kbGViYXJzYCB3aWxsIGJlIGNvbXBpbGVkIHdpdGggcmVndWxhcgot
ICAgICAgICAgICAgICBIYW5kbGViYXJzIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBpbiB2aWV3
cycgY29tcHV0ZWQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICBAbWV0aG9kIGJvb3RzdHJhcAotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRs
ZWJhcnMKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAcGFyYW0gY3R4Ci0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBib290c3RyYXAoY3R4KSB7Ci0gICAgICAg
ICAgICB2YXIgc2VsZWN0b3JzID0gJ3NjcmlwdFt0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyJdLCBz
Y3JpcHRbdHlwZT0idGV4dC94LXJhdy1oYW5kbGViYXJzIl0nOwotCi0gICAgICAgICAgICBqUXVl
cnkoc2VsZWN0b3JzLCBjdHgpCi0gICAgICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAvLyBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHNjcmlwdCB0YWcKLSAgICAgICAg
ICAgICAgICB2YXIgc2NyaXB0ID0galF1ZXJ5KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgdmFy
IGNvbXBpbGUgPSAoc2NyaXB0LmF0dHIoJ3R5cGUnKSA9PT0gJ3RleHQveC1yYXctaGFuZGxlYmFy
cycpID8KLSAgICAgICAgICAgICAgICBqUXVlcnkucHJveHkoSGFuZGxlYmFycy5jb21waWxlLCBI
YW5kbGViYXJzKSA6Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LnByb3h5KEVtYmVySGFuZGxlYmFy
cy5jb21waWxlLCBFbWJlckhhbmRsZWJhcnMpLAotICAgICAgICAgICAgICAgIC8vIEdldCB0aGUg
bmFtZSBvZiB0aGUgc2NyaXB0LCB1c2VkIGJ5IEVtYmVyLlZpZXcncyB0ZW1wbGF0ZU5hbWUgcHJv
cGVydHkuCi0gICAgICAgICAgICAgICAgLy8gRmlyc3QgbG9vayBmb3IgZGF0YS10ZW1wbGF0ZS1u
YW1lIGF0dHJpYnV0ZSwgdGhlbiBmYWxsIGJhY2sgdG8gaXRzCi0gICAgICAgICAgICAgICAgLy8g
aWQgaWYgbm8gbmFtZSBpcyBmb3VuZC4KLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWUgPSBz
Y3JpcHQuYXR0cignZGF0YS10ZW1wbGF0ZS1uYW1lJykgfHwgc2NyaXB0LmF0dHIoJ2lkJykgfHwg
J2FwcGxpY2F0aW9uJywKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbXBpbGUoc2NyaXB0
Lmh0bWwoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0ZW1wbGF0ZSBvZiBzYW1l
IG5hbWUgYWxyZWFkeSBleGlzdHMKLSAgICAgICAgICAgICAgICBpZiAoRW1iZXIuVEVNUExBVEVT
W3RlbXBsYXRlTmFtZV0gIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRW1iZXJFcnJvcignVGVtcGxhdGUgbmFtZWQgIicgKyB0ZW1wbGF0ZU5hbWUgKyAnIiBh
bHJlYWR5IGV4aXN0cy4nKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBGb3IgdGVtcGxhdGVzIHdoaWNoIGhhdmUgYSBuYW1lLCB3ZSBzYXZlIHRoZW0gYW5kIHRoZW4g
cmVtb3ZlIHRoZW0gZnJvbSB0aGUgRE9NCi0gICAgICAgICAgICAgICAgRW1iZXIuVEVNUExBVEVT
W3RlbXBsYXRlTmFtZV0gPSB0ZW1wbGF0ZTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBz
Y3JpcHQgdGFnIGZyb20gRE9NCi0gICAgICAgICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBfYm9vdHN0cmFwKCkg
ewotICAgICAgICAgICAgYm9vdHN0cmFwKCBqUXVlcnkoZG9jdW1lbnQpICk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiByZWdpc3RlckNvbXBvbmVudExvb2t1cChjb250YWluZXIpIHsK
LSAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignY29tcG9uZW50LWxvb2t1cDptYWluJywg
Q29tcG9uZW50TG9va3VwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAgICAg
IFdlIHRpZSB0aGlzIHRvIGFwcGxpY2F0aW9uLmxvYWQgdG8gZW5zdXJlIHRoYXQgd2UndmUgYXQg
bGVhc3QKLSAgICAgICAgICAgICAgYXR0ZW1wdGVkIHRvIGJvb3RzdHJhcCBhdCB0aGUgcG9pbnQg
dGhhdCB0aGUgYXBwbGljYXRpb24gaXMgbG9hZGVkLgotCi0gICAgICAgICAgICAgIFdlIGFsc28g
dGllIHRoaXMgdG8gZG9jdW1lbnQgcmVhZHkgc2luY2Ugd2UncmUgZ3VhcmFudGVlZCB0aGF0IGFs
bAotICAgICAgICAgICAgICB0aGUgaW5saW5lIHRlbXBsYXRlcyBhcmUgcHJlc2VudCBhdCB0aGlz
IHBvaW50LgotCi0gICAgICAgICAgICAgIFRoZXJlJ3Mgbm8gaGFybSB0byBydW5uaW5nIHRoaXMg
dHdpY2UsIHNpbmNlIHdlIHJlbW92ZSB0aGUgdGVtcGxhdGVzCi0gICAgICAgICAgICAgIGZyb20g
dGhlIERPTSBhZnRlciBwcm9jZXNzaW5nLgotICAgICAgICAgICAgKi8KLQotICAgICAgICBvbkxv
YWQoJ0VtYmVyLkFwcGxpY2F0aW9uJywgZnVuY3Rpb24oQXBwbGljYXRpb24pIHsKLSAgICAgICAg
ICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICBuYW1lOiAnZG9t
VGVtcGxhdGVzJywKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBfYm9vdHN0cmFwCi0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAg
ICAgICAgICAgICAgIG5hbWU6ICdyZWdpc3RlckNvbXBvbmVudExvb2t1cCcsCi0gICAgICAgICAg
ICAgICAgYWZ0ZXI6ICdkb21UZW1wbGF0ZXMnLAotICAgICAgICAgICAgICAgIGluaXRpYWxpemU6
IHJlZ2lzdGVyQ29tcG9uZW50TG9va3VwCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGJvb3RzdHJhcDsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvc3RyaW5nIiwKLSAgICBbImVtYmVyLXJ1bnRpbWUv
c3lzdGVtL3N0cmluZyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8vIHJlcXVp
cmVkIHNvIHdlIGNhbiBleHRlbmQgdGhpcyBvYmplY3QuCi0gICAgICAgIHZhciBFbWJlclN0cmlu
Z1V0aWxzID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIE1hcmsgYSBzdHJpbmcgYXMgc2FmZSBmb3IgdW5lc2NhcGVkIG91dHB1dCB3aXRo
IEhhbmRsZWJhcnMuIElmIHlvdQotICAgICAgICAgICAgICByZXR1cm4gSFRNTCBmcm9tIGEgSGFu
ZGxlYmFycyBoZWxwZXIsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvCi0gICAgICAgICAgICAgIGVuc3Vy
ZSBIYW5kbGViYXJzIGRvZXMgbm90IGVzY2FwZSB0aGUgSFRNTC4KLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLlN0cmluZy5odG1sU2FmZSgnPGRpdj5z
b21lU3RyaW5nPC9kaXY+JykKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1l
dGhvZCBodG1sU2FmZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyLlN0cmluZwotICAgICAgICAg
ICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEByZXR1cm4ge0hhbmRsZWJhcnMuU2FmZVN0cmlu
Z30gYSBzdHJpbmcgdGhhdCB3aWxsIG5vdCBiZSBodG1sIGVzY2FwZWQgYnkgSGFuZGxlYmFycwot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaHRtbFNhZmUoc3RyKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IEhhbmRsZWJhcnMuU2FmZVN0cmluZyhzdHIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgRW1iZXJTdHJpbmdVdGlscy5odG1sU2FmZSA9IGh0bWxTYWZlOwotICAgICAgICBp
ZiAoRW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwgRW1iZXIuRVhURU5EX1BST1RP
VFlQRVMuU3RyaW5nKSB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBN
YXJrIGEgc3RyaW5nIGFzIGJlaW5nIHNhZmUgZm9yIHVuZXNjYXBlZCBvdXRwdXQgd2l0aCBIYW5k
bGViYXJzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAgJzxkaXY+c29tZVN0cmluZzwvZGl2PicuaHRtbFNhZmUoKQotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5odG1s
U2FmZV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9odG1sU2FmZSkuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBodG1sU2FmZQotICAgICAgICAgICAgICAgICAg
ICBAZm9yIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtIYW5kbGViYXJzLlNh
ZmVTdHJpbmd9IGEgc3RyaW5nIHRoYXQgd2lsbCBub3QgYmUgaHRtbCBlc2NhcGVkIGJ5IEhhbmRs
ZWJhcnMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBTdHJpbmcucHJvdG90eXBl
Lmh0bWxTYWZlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxTYWZl
KHRoaXMpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBodG1sU2FmZTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRs
ZWJhcnMvdmlld3MvaGFuZGxlYmFyc19ib3VuZF92aWV3IiwKLSAgICBbImVtYmVyLWhhbmRsZWJh
cnMtY29tcGlsZXIiLCAiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9lcnJvciIsICJl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVt
YmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLW1ldGFsL2Nv
bXB1dGVkIiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXciLCAiZW1iZXItdmlld3Mvdmlld3Mvc3Rh
dGVzIiwgImVtYmVyLWhhbmRsZWJhcnMvdmlld3MvbWV0YW1vcnBoX3ZpZXciLCAiZW1iZXItaGFu
ZGxlYmFycy9leHQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBl
bmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5
OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18s
IF9fZGVwZW5kZW5jeTEyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgLypnbG9iYWxzIEhhbmRsZWJhcnMsIE1ldGFtb3JwaDp0cnVlICovCi0gICAgICAg
IC8qanNoaW50IG5ld2NhcDpmYWxzZSovCi0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAg
ICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVySGFuZGxlYmFycy5TYWZlU3RyaW5nOwot
ICAgICAgICB2YXIgU2FmZVN0cmluZyA9IEVtYmVySGFuZGxlYmFycy5TYWZlU3RyaW5nOwotCi0g
ICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICAv
LyBFbWJlci5LCi0gICAgICAgIHZhciBLID0gRW1iZXIuSzsKLQotICAgICAgICB2YXIgTWV0YW1v
cnBoID0gcmVxdWlyZU1vZHVsZSgnbWV0YW1vcnBoJyk7Ci0KLSAgICAgICAgdmFyIEVtYmVyRXJy
b3IgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVw
ZW5kZW5jeTRfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k1X18uc2V0Owot
ICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIHJ1biA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3k4X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBWaWV3ID0gX19kZXBl
bmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjbG9uZVN0YXRlcyA9IF9fZGVwZW5k
ZW5jeTEwX18uY2xvbmVTdGF0ZXM7Ci0gICAgICAgIHZhciBzdGF0ZXMgPSBfX2RlcGVuZGVuY3kx
MF9fLnN0YXRlczsKLSAgICAgICAgdmFyIHZpZXdTdGF0ZXMgPSBzdGF0ZXM7Ci0KLSAgICAgICAg
dmFyIF9NZXRhbW9ycGhWaWV3ID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTEyX18uaGFuZGxlYmFyc0dldDsKLQot
ICAgICAgICBmdW5jdGlvbiBTaW1wbGVIYW5kbGViYXJzVmlldyhwYXRoLCBwYXRoUm9vdCwgaXNF
c2NhcGVkLCB0ZW1wbGF0ZURhdGEpIHsKLSAgICAgICAgICAgIHRoaXMucGF0aCA9IHBhdGg7Ci0g
ICAgICAgICAgICB0aGlzLnBhdGhSb290ID0gcGF0aFJvb3Q7Ci0gICAgICAgICAgICB0aGlzLmlz
RXNjYXBlZCA9IGlzRXNjYXBlZDsKLSAgICAgICAgICAgIHRoaXMudGVtcGxhdGVEYXRhID0gdGVt
cGxhdGVEYXRhOwotCi0gICAgICAgICAgICB0aGlzLl9sYXN0Tm9ybWFsaXplZFZhbHVlID0gdW5k
ZWZpbmVkOwotICAgICAgICAgICAgdGhpcy5tb3JwaCA9IE1ldGFtb3JwaCgpOwotICAgICAgICAg
ICAgdGhpcy5zdGF0ZSA9ICdwcmVSZW5kZXInOwotICAgICAgICAgICAgdGhpcy51cGRhdGVJZCA9
IG51bGw7Ci0gICAgICAgICAgICB0aGlzLl9wYXJlbnRWaWV3ID0gbnVsbDsKLSAgICAgICAgICAg
IHRoaXMuYnVmZmVyID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFNpbXBsZUhhbmRsZWJh
cnNWaWV3LnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIGlzVmlydHVhbDogdHJ1ZSwKLSAgICAg
ICAgICAgIGlzVmlldzogdHJ1ZSwKLQotICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZUlkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJ1bi5jYW5jZWwodGhpcy51cGRhdGVJZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
dXBkYXRlSWQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fcGFyZW50VmlldykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRWaWV3
LnJlbW92ZUNoaWxkKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0
aGlzLm1vcnBoID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gJ2Rlc3Ryb3ll
ZCc7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2U6IEss
Ci0KLSAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlOiBLLAotCi0gICAgICAgICAgICBub3Jt
YWxpemVkVmFsdWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBwYXRoID0gdGhp
cy5wYXRoOwotICAgICAgICAgICAgICAgIHZhciBwYXRoUm9vdCA9IHRoaXMucGF0aFJvb3Q7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgdGVtcGxhdGVEYXRhOwotCi0gICAgICAgICAgICAg
ICAgLy8gVXNlIHRoZSBwYXRoUm9vdCBhcyB0aGUgcmVzdWx0IGlmIG5vIHBhdGggaXMgcHJvdmlk
ZWQuIFRoaXMKLSAgICAgICAgICAgICAgICAvLyBoYXBwZW5zIGlmIHRoZSBwYXRoIGlzIGB0aGlz
YCwgd2hpY2ggZ2V0cyBub3JtYWxpemVkIGludG8KLSAgICAgICAgICAgICAgICAvLyBhIGBwYXRo
Um9vdGAgb2YgdGhlIGN1cnJlbnQgSGFuZGxlYmFycyBjb250ZXh0IGFuZCBhIHBhdGgKLSAgICAg
ICAgICAgICAgICAvLyBvZiBgJydgLgotICAgICAgICAgICAgICAgIGlmIChwYXRoID09PSAnJykg
ewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXRoUm9vdDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURhdGEgPSB0aGlzLnRlbXBs
YXRlRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlYmFyc0dldChwYXRo
Um9vdCwgcGF0aCwgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGVtcGxhdGVEYXRh
IAotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVu
ZGVyVG9CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIHZhciBzdHJp
bmcgPSAnJzsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLm1vcnBoLnN0YXJ0VGFn
KCk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMucmVuZGVyKCk7Ci0gICAgICAgICAg
ICAgICAgc3RyaW5nICs9IHRoaXMubW9ycGguZW5kVGFnKCk7Ci0KLSAgICAgICAgICAgICAgICBi
dWZmZXIucHVzaChzdHJpbmcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVuZGVy
OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIElmIG5vdCBpbnZva2VkIHZp
YSBhIHRyaXBsZS1tdXN0YWNoZSAoe3t7Zm9vfX19KSwgZXNjYXBlCi0gICAgICAgICAgICAgICAg
Ly8gdGhlIGNvbnRlbnQgb2YgdGhlIHRlbXBsYXRlLgotICAgICAgICAgICAgICAgIHZhciBlc2Nh
cGUgPSB0aGlzLmlzRXNjYXBlZDsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWUg
fHwgdGhpcy5ub3JtYWxpemVkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0Tm9y
bWFsaXplZFZhbHVlID0gcmVzdWx0OwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51
bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gIiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKHJlc3VsdCBpbnN0YW5jZW9mIFNh
ZmVTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZyhyZXN1bHQp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSGFuZGxlYmFycy5VdGlscy5lc2NhcGVFeHByZXNz
aW9uKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZXJlbmRlcjogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAncHJlUmVuZGVyJzoKLSAgICAgICAgICAgICAgICBjYXNlICdkZXN0cm95ZWQnOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdpbkJ1ZmZl
cic6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJTb21ldGhpbmcg
eW91IGRpZCB0cmllZCB0byByZXBsYWNlIGFuIHt7ZXhwcmVzc2lvbn19IGJlZm9yZSBpdCB3YXMg
aW5zZXJ0ZWQgaW50byB0aGUgRE9NLiIpOwotICAgICAgICAgICAgICAgIGNhc2UgJ2hhc0VsZW1l
bnQnOgotICAgICAgICAgICAgICAgIGNhc2UgJ2luRE9NJzoKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy51cGRhdGVJZCA9IHJ1bi5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsICd1cGRhdGUn
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB1
cGRhdGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlkID0gbnVs
bDsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZWRWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fbGFzdE5vcm1hbGl6ZWRWYWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcnBoLmh0bWwodGhpcy5yZW5kZXIodmFsdWUp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfdHJh
bnNpdGlvblRvOiBmdW5jdGlvbihzdGF0ZSkgewotICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUg
PSBzdGF0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0ZXMgPSBj
bG9uZVN0YXRlcyh2aWV3U3RhdGVzKTsKLQotICAgICAgICBtZXJnZShzdGF0ZXMuX2RlZmF1bHQs
IHsKLSAgICAgICAgICAgIHJlcmVuZGVySWZOZWVkZWQ6IEsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgbWVyZ2Uoc3RhdGVzLmluRE9NLCB7Ci0gICAgICAgICAgICByZXJlbmRlcklmTmVlZGVkOiBm
dW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcubm9ybWFsaXplZFZhbHVl
KCkgIT09IHZpZXcuX2xhc3ROb3JtYWxpemVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmlldy5yZXJlbmRlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5fSGFuZGxlYmFyc0Jv
dW5kVmlld2AgaXMgYSBwcml2YXRlIHZpZXcgY3JlYXRlZCBieSB0aGUgSGFuZGxlYmFycwotICAg
ICAgICAgICAgICBge3tiaW5kfX1gIGhlbHBlcnMgdGhhdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sg
b2YgYm91bmQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBFdmVyeSB0aW1lIGEgcHJvcGVy
dHkgaXMgYm91bmQgdXNpbmcgYSBge3ttdXN0YWNoZX19YCwgYW4gYW5vbnltb3VzIHN1YmNsYXNz
Ci0gICAgICAgICAgICAgIG9mIGBFbWJlci5fSGFuZGxlYmFyc0JvdW5kVmlld2AgaXMgY3JlYXRl
ZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdWItdGVtcGxhdGUKLSAgICAgICAgICAgICAgYW5kIGNv
bnRleHQgc2V0IHVwLiBXaGVuIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGNoYW5nZXMsIGp1c3Qg
dGhlIHRlbXBsYXRlCi0gICAgICAgICAgICAgIGZvciB0aGlzIHZpZXcgd2lsbCByZS1yZW5kZXIu
Ci0KLSAgICAgICAgICAgICAgQGNsYXNzIF9IYW5kbGViYXJzQm91bmRWaWV3Ci0gICAgICAgICAg
ICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuX01ldGFt
b3JwaFZpZXcKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0gICAgICAg
IHZhciBfSGFuZGxlYmFyc0JvdW5kVmlldyA9IF9NZXRhbW9ycGhWaWV3LmV4dGVuZCh7Ci0gICAg
ICAgICAgICBpbnN0cnVtZW50TmFtZTogJ2JvdW5kSGFuZGxlYmFycycsCi0KLSAgICAgICAgICAg
IF9zdGF0ZXM6IHN0YXRlcywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgYGRpc3BsYXlUZW1wbGF0ZWAg
b3IKLSAgICAgICAgICAgICAgICAgICAgYGludmVyc2VUZW1wbGF0ZWAgc2hvdWxkIGJlIHJlbmRl
cmVkLiBUaGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMKLSAgICAgICAgICAgICAg
ICAgICAgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIEJvb2xlYW4uCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IHNob3VsZERpc3BsYXlGdW5jCi0gICAgICAgICAgICAgICAgICAgIEB0eXBl
IEZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBzaG91bGREaXNwbGF5RnVuYzogbnVsbCwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdoZXRoZXIgdGhlIHRlbXBsYXRlIHJlbmRl
cmVkIGJ5IHRoaXMgdmlldyBnZXRzIHBhc3NlZCB0aGUgY29udGV4dCBvYmplY3QKLSAgICAgICAg
ICAgICAgICAgICAgb2YgaXRzIHBhcmVudCB0ZW1wbGF0ZSwgb3IgZ2V0cyBwYXNzZWQgdGhlIHZh
bHVlIG9mIHJldHJpZXZpbmcgYHBhdGhgCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGBw
YXRoUm9vdGAuCi0KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgdHJ1
ZSB3aGVuIHVzaW5nIHRoZSBge3sjaWZ9fWAgaGVscGVyLCBiZWNhdXNlIHRoZQotICAgICAgICAg
ICAgICAgICAgICB0ZW1wbGF0ZSBpbnNpZGUgdGhlIGhlbHBlciBzaG91bGQgbG9vayB1cCBwcm9w
ZXJ0aWVzIHJlbGF0aXZlIHRvIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdCBh
cyBvdXRzaWRlIHRoZSBibG9jay4gVGhpcyB3b3VsZCBiZSBgZmFsc2VgIHdoZW4gdXNlZCB3aXRo
IGB7eyN3aXRoCi0gICAgICAgICAgICAgICAgICAgIGZvb319YCBiZWNhdXNlIHRoZSB0ZW1wbGF0
ZSBzaG91bGQgcmVjZWl2ZSB0aGUgb2JqZWN0IGZvdW5kIGJ5IGV2YWx1YXRpbmcKLSAgICAgICAg
ICAgICAgICAgICAgYGZvb2AuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHByZXNl
cnZlQ29udGV4dAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAg
ICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcHJlc2VydmVDb250ZXh0OiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIElmIGBwcmVzZXJ2ZUNvbnRleHRgIGlzIHRydWUsIHRoaXMgaXMgdGhlIG9iamVj
dCB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICAgICAgICAgICAgICB0byByZW5kZXIgdGhlIHRl
bXBsYXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBwcmV2aW91c0NvbnRleHQK
LSAgICAgICAgICAgICAgICAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0OiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgVGhlIHRlbXBsYXRlIHRvIHJlbmRlciB3aGVuIGBzaG91bGREaXNw
bGF5RnVuY2AgZXZhbHVhdGVzIHRvIGB0cnVlYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgZGlzcGxheVRlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEZ1bmN0aW9u
Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBkaXNwbGF5VGVtcGxhdGU6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBUaGUgdGVtcGxhdGUgdG8gcmVuZGVyIHdoZW4gYHNob3VsZERp
c3BsYXlGdW5jYCBldmFsdWF0ZXMgdG8gYGZhbHNlYC4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJvcGVydHkgaW52ZXJzZVRlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEZ1bmN0
aW9uCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBpbnZlcnNlVGVtcGxhdGU6IG51bGwsCi0KLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIHRvIGxvb2sgdXAgb24gYHBhdGhSb290
YCB0aGF0IGlzIHBhc3NlZCB0bwotICAgICAgICAgICAgICAgICAgICBgc2hvdWxkRGlzcGxheUZ1
bmNgIHRvIGRldGVybWluZSB3aGljaCB0ZW1wbGF0ZSB0byByZW5kZXIuCi0KLSAgICAgICAgICAg
ICAgICAgICAgSW4gYWRkaXRpb24sIGlmIGBwcmVzZXJ2ZUNvbnRleHRgIGlzIGBmYWxzZSxgIHRo
ZSBvYmplY3QgYXQgdGhpcyBwYXRoIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgYmUgcGFzc2Vk
IHRvIHRoZSB0ZW1wbGF0ZSB3aGVuIHJlbmRlcmluZy4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJvcGVydHkgcGF0aAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAg
ICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHBhdGg6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBU
aGUgb2JqZWN0IGZyb20gd2hpY2ggdGhlIGBwYXRoYCB3aWxsIGJlIGxvb2tlZCB1cC4gU29tZXRp
bWVzIHRoaXMgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlIGBwcmV2aW91
c0NvbnRleHRgLCBidXQgaW4gY2FzZXMgd2hlcmUgdGhpcyB2aWV3IGhhcyBiZWVuCi0gICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlZCBmb3IgcGF0aHMgdGhhdCBzdGFydCB3aXRoIGEga2V5d29y
ZCBzdWNoIGFzIGB2aWV3YCBvcgotICAgICAgICAgICAgICAgICAgICBgY29udHJvbGxlcmAsIHRo
ZSBwYXRoIHJvb3Qgd2lsbCBiZSB0aGF0IHJlc29sdmVkIG9iamVjdC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgcGF0aFJvb3QKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgT2Jq
ZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGF0aFJvb3Q6IG51bGwsCi0K
LSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHBhdGggPSBnZXQodGhpcywgJ3BhdGgnKSwKLSAgICAgICAgICAgICAgICBwYXRoUm9v
dCA9IGdldCh0aGlzLCAncGF0aFJvb3QnKSwKLSAgICAgICAgICAgICAgICB2YWx1ZU5vcm1hbGl6
ZXIgPSBnZXQodGhpcywgJ3ZhbHVlTm9ybWFsaXplckZ1bmMnKSwKLSAgICAgICAgICAgICAgICBy
ZXN1bHQsIHRlbXBsYXRlRGF0YTsKLQotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgcGF0aFJv
b3QgYXMgdGhlIHJlc3VsdCBpZiBubyBwYXRoIGlzIHByb3ZpZGVkLiBUaGlzCi0gICAgICAgICAg
ICAgICAgLy8gaGFwcGVucyBpZiB0aGUgcGF0aCBpcyBgdGhpc2AsIHdoaWNoIGdldHMgbm9ybWFs
aXplZCBpbnRvCi0gICAgICAgICAgICAgICAgLy8gYSBgcGF0aFJvb3RgIG9mIHRoZSBjdXJyZW50
IEhhbmRsZWJhcnMgY29udGV4dCBhbmQgYSBwYXRoCi0gICAgICAgICAgICAgICAgLy8gb2YgYCcn
YC4KLSAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJycpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gcGF0aFJvb3Q7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGVtcGxhdGVEYXRhID0gZ2V0KHRoaXMsICd0ZW1wbGF0ZURhdGEnKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlYmFyc0dldChwYXRoUm9vdCwgcGF0aCwg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGVtcGxhdGVEYXRhIAotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWVOb3JtYWxpemVyID8gdmFsdWVOb3JtYWxpemVyKHJlc3VsdCkgOiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZXJlbmRlcklmTmVlZGVkOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5yZXJlbmRlcklmTmVlZGVkKHRo
aXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIERldGVybWluZXMgd2hpY2ggdGVtcGxhdGUgdG8gaW52b2tlLCBzZXRzIHVwIHRoZSBjb3Jy
ZWN0IHN0YXRlIGJhc2VkIG9uCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgbG9naWMsIHRoZW4g
aW52b2tlcyB0aGUgZGVmYXVsdCBgRW1iZXIuVmlld2AgYHJlbmRlcmAgaW1wbGVtZW50YXRpb24u
Ci0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBmaXJzdCBsb29rIHVwIHRo
ZSBgcGF0aGAga2V5IG9uIGBwYXRoUm9vdGAsCi0gICAgICAgICAgICAgICAgICAgIHRoZW4gcGFz
cyB0aGF0IHZhbHVlIHRvIHRoZSBgc2hvdWxkRGlzcGxheUZ1bmNgIGZ1bmN0aW9uLiBJZiB0aGF0
IHJldHVybnMKLSAgICAgICAgICAgICAgICAgICAgYHRydWUsYCB0aGUgYGRpc3BsYXlUZW1wbGF0
ZWAgZnVuY3Rpb24gd2lsbCBiZSByZW5kZXJlZCB0byBET00uIE90aGVyd2lzZSwKLSAgICAgICAg
ICAgICAgICAgICAgYGludmVyc2VUZW1wbGF0ZWAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSByZW5k
ZXJlZC4KLQotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhpcyBgRW1iZXIu
X0hhbmRsZWJhcnNCb3VuZFZpZXdgIHJlcHJlc2VudGVkIHRoZSBge3sjd2l0aAotICAgICAgICAg
ICAgICAgICAgICBmb299fWAgaGVscGVyLCBpdCB3b3VsZCBsb29rIHVwIHRoZSBgZm9vYCBwcm9w
ZXJ0eSBvZiBpdHMgY29udGV4dCwgYW5kCi0gICAgICAgICAgICAgICAgICAgIGBzaG91bGREaXNw
bGF5RnVuY2Agd291bGQgYWx3YXlzIHJldHVybiB0cnVlLiBUaGUgb2JqZWN0IGZvdW5kIGJ5IGxv
b2tpbmcKLSAgICAgICAgICAgICAgICAgICAgdXAgYGZvb2Agd291bGQgYmUgcGFzc2VkIHRvIGBk
aXNwbGF5VGVtcGxhdGVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVuZGVyCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKGJ1ZmZlcikg
ewotICAgICAgICAgICAgICAgIC8vIElmIG5vdCBpbnZva2VkIHZpYSBhIHRyaXBsZS1tdXN0YWNo
ZSAoe3t7Zm9vfX19KSwgZXNjYXBlCi0gICAgICAgICAgICAgICAgLy8gdGhlIGNvbnRlbnQgb2Yg
dGhlIHRlbXBsYXRlLgotICAgICAgICAgICAgICAgIHZhciBlc2NhcGUgPSBnZXQodGhpcywgJ2lz
RXNjYXBlZCcpOwotCi0gICAgICAgICAgICAgICAgdmFyIHNob3VsZERpc3BsYXkgPSBnZXQodGhp
cywgJ3Nob3VsZERpc3BsYXlGdW5jJyksCi0gICAgICAgICAgICAgICAgcHJlc2VydmVDb250ZXh0
ID0gZ2V0KHRoaXMsICdwcmVzZXJ2ZUNvbnRleHQnKSwKLSAgICAgICAgICAgICAgICBjb250ZXh0
ID0gZ2V0KHRoaXMsICdwcmV2aW91c0NvbnRleHQnKTsKLQotICAgICAgICAgICAgICAgIHZhciBp
bnZlcnNlVGVtcGxhdGUgPSBnZXQodGhpcywgJ2ludmVyc2VUZW1wbGF0ZScpLAotICAgICAgICAg
ICAgICAgIGRpc3BsYXlUZW1wbGF0ZSA9IGdldCh0aGlzLCAnZGlzcGxheVRlbXBsYXRlJyk7Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5ub3JtYWxpemVkVmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9sYXN0Tm9ybWFsaXplZFZhbHVlID0gcmVzdWx0OwotCi0gICAg
ICAgICAgICAgICAgLy8gRmlyc3QsIHRlc3QgdGhlIGNvbmRpdGlvbmFsIHRvIHNlZSBpZiB3ZSBz
aG91bGQKLSAgICAgICAgICAgICAgICAvLyByZW5kZXIgdGhlIHRlbXBsYXRlIG9yIG5vdC4KLSAg
ICAgICAgICAgICAgICBpZiAoc2hvdWxkRGlzcGxheShyZXN1bHQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldCh0aGlzLCAndGVtcGxhdGUnLCBkaXNwbGF5VGVtcGxhdGUpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBwcmVzZXJ2aW5nIHRoZSBjb250ZXh0IChmb3IgZXhh
bXBsZSwgaWYgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBpcyBhbiAjaWYgYmxvY2ssIGNh
bGwgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHNhbWUgb2JqZWN0LgotICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlc2VydmVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQodGhp
cywgJ19jb250ZXh0JywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGRldGVybWluZSBpZiB0aGlzIGlz
IGEgYmxvY2sgYmluZCBvciBub3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzbywg
cGFzcyB0aGUgc3BlY2lmaWVkIG9iamVjdCB0byB0aGUgdGVtcGxhdGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChkaXNwbGF5VGVtcGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXQodGhpcywgJ19jb250ZXh0JywgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qg
YSBiaW5kIGJsb2NrLCBqdXN0IHB1c2ggdGhlIHJlc3VsdCBvZiB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBleHByZXNzaW9uIHRvIHRoZSByZW5kZXIgY29udGV4dCBhbmQgcmV0
dXJuLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwg
cmVzdWx0ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKHJl
c3VsdCBpbnN0YW5jZW9mIFNhZmVTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSGFuZGxlYmFycy5VdGlscy5lc2Nh
cGVFeHByZXNzaW9uKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnZlcnNlVGVt
cGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICd0ZW1wbGF0ZScsIGludmVy
c2VUZW1wbGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQ29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICdfY29udGV4dCcsIGNvbnRleHQp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
c2V0KHRoaXMsICdfY29udGV4dCcsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgJ3Rl
bXBsYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihidWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfXy5fSGFuZGxlYmFyc0JvdW5kVmlldyA9IF9IYW5k
bGViYXJzQm91bmRWaWV3OwotICAgICAgICBfX2V4cG9ydHNfXy5TaW1wbGVIYW5kbGViYXJzVmll
dyA9IFNpbXBsZUhhbmRsZWJhcnNWaWV3OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFu
ZGxlYmFycy92aWV3cy9tZXRhbW9ycGhfdmlldyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAi
ZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXciLCAi
ZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVu
Y3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18s
IF9fZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICAvKiBnbG9iYWwgTWV0YW1vcnBoOnRydWUgKi8KLQotICAgICAgICAvKmpzaGludCBu
ZXdjYXA6ZmFsc2UqLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1
bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuZGVwcmVjYXRlCi0gICAgICAgIC8vIHZhciBlbWJlckRl
cHJlY2F0ZSA9IEVtYmVyLmRlcHJlY2F0ZTsKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRl
bmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJd
OwotCi0gICAgICAgIHZhciBDb3JlVmlldyA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k2X18uTWl4aW47Ci0gICAgICAgIHZhciBydW4gPSBfX2Rl
cGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1
bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAg
ICAgICAgKi8KLQotICAgICAgICB2YXIgTWV0YW1vcnBoID0gcmVxdWlyZU1vZHVsZSgnbWV0YW1v
cnBoJyk7Ci0KLSAgICAgICAgZnVuY3Rpb24gbm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMoKSB7Ci0g
ICAgICAgICAgICBydW4ub25jZShWaWV3LCAnbm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMnKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIERPTU1hbmFnZXIgc2hvdWxkIGp1c3QgYWJzdHJhY3QgZG9t
IG1hbmlwdWxhdGlvbiBiZXR3ZWVuIGpxdWVyeSBhbmQgbWV0YW1vcnBoCi0gICAgICAgIHZhciBE
T01NYW5hZ2VyID0gewotICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbih2aWV3KSB7Ci0gICAg
ICAgICAgICAgICAgdmlldy5tb3JwaC5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICBub3RpZnlN
dXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHJlcGVu
ZDogZnVuY3Rpb24odmlldywgaHRtbCkgewotICAgICAgICAgICAgICAgIHZpZXcubW9ycGgucHJl
cGVuZChodG1sKTsKLSAgICAgICAgICAgICAgICBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKHZpZXcsIGh0bWwp
IHsKLSAgICAgICAgICAgICAgICB2aWV3Lm1vcnBoLmFmdGVyKGh0bWwpOwotICAgICAgICAgICAg
ICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBodG1sOiBmdW5jdGlvbih2aWV3LCBodG1sKSB7Ci0gICAgICAgICAgICAgICAgdmlldy5t
b3JwaC5odG1sKGh0bWwpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJz
KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIG1lc3NlZCB1cC4K
LSAgICAgICAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbW9ycGggPSB2aWV3Lm1vcnBoOwotCi0gICAgICAgICAgICAgICAgdmlldy5fdHJhbnNpdGlv
blRvKCdwcmVSZW5kZXInKTsKLQotICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZSgncmVuZGVy
JywgdGhpcywgZnVuY3Rpb24gcmVuZGVyTWV0YW1vcnBoVmlldygpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZpZXcuaXNEZXN0cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2aWV3
LmNsZWFyUmVuZGVyZWRDaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVy
ID0gdmlldy5yZW5kZXJUb0J1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgICAgIHZpZXcuaW52
b2tlUmVjdXJzaXZlbHkoZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmlldy5wcm9wZXJ0eVdpbGxDaGFuZ2UoJ2VsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcudHJpZ2dlclJlY3Vyc2l2ZWx5KCd3aWxsSW5z
ZXJ0RWxlbWVudCcpOwotCi0gICAgICAgICAgICAgICAgICAgIG1vcnBoLnJlcGxhY2VXaXRoKGJ1
ZmZlci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcuX3RyYW5zaXRpb25Ubygn
aW5ET00nKTsKLQotICAgICAgICAgICAgICAgICAgICB2aWV3Lmludm9rZVJlY3Vyc2l2ZWx5KGZ1
bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcucHJvcGVydHlEaWRD
aGFuZ2UoJ2VsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHZpZXcudHJpZ2dlclJlY3Vyc2l2ZWx5KCdkaWRJbnNlcnRFbGVtZW50Jyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMoKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbih2
aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmlldy5tb3JwaC5odG1sKCIiKTsKLSAgICAgICAgICAg
ICAgICBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgfQotICAgICAgICB9
OwotCi0gICAgICAgIC8vIFRoZSBgbW9ycGhgIGFuZCBgb3V0ZXJIVE1MYCBwcm9wZXJ0aWVzIGFy
ZSBpbnRlcm5hbCBvbmx5Ci0gICAgICAgIC8vIGFuZCBub3Qgb2JzZXJ2YWJsZS4KLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgQGNsYXNzIF9NZXRhbW9ycGgKLSAgICAgICAgICAgICAgQG5h
bWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAg
ICAgICAgdmFyIF9NZXRhbW9ycGggPSBNaXhpbi5jcmVhdGUoewotICAgICAgICAgICAgaXNWaXJ0
dWFsOiB0cnVlLAotICAgICAgICAgICAgdGFnTmFtZTogJycsCi0KLSAgICAgICAgICAgIGluc3Ry
dW1lbnROYW1lOiAnbWV0YW1vcnBoJywKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLm1v
cnBoID0gTWV0YW1vcnBoKCk7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdTdXBw
bHlpbmcgYSB0YWdOYW1lIHRvIE1ldGFtb3JwaCB2aWV3cyBpcyB1bnJlbGlhYmxlIGFuZCBpcyBk
ZXByZWNhdGVkLiBZb3UgbWF5IGJlIHNldHRpbmcgdGhlIHRhZ05hbWUgb24gYSBIYW5kbGViYXJz
IGhlbHBlciB0aGF0IGNyZWF0ZXMgYSBNZXRhbW9ycGguJywgIXRoaXMudGFnTmFtZSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uKGJ1ZmZlcikg
ewotICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHRoaXMubW9ycGguc3RhcnRUYWcoKSk7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyLnB1c2hPcGVuaW5nVGFnKCk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24oYnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyLnB1c2hDbG9zaW5nVGFnKCk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLnB1
c2godGhpcy5tb3JwaC5lbmRUYWcoKSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBj
cmVhdGVFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0g
dGhpcy5yZW5kZXJUb0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIHRoaXMub3V0ZXJIVE1MID0g
YnVmZmVyLnN0cmluZygpOwotICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJCdWZmZXIoKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRvbU1hbmFnZXI6IERPTU1hbmFnZXIKLSAgICAg
ICAgfSk7Ci0gICAgICAgIF9fZXhwb3J0c19fLl9NZXRhbW9ycGggPSBfTWV0YW1vcnBoOwotICAg
ICAgICB2YXIgX3dyYXBNYXAgPSBNZXRhbW9ycGguX3dyYXBNYXA7Ci0gICAgICAgIF9fZXhwb3J0
c19fLl93cmFwTWFwID0gX3dyYXBNYXA7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAY2xh
c3MgX01ldGFtb3JwaFZpZXcKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAZXh0ZW5kcyBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLl9N
ZXRhbW9ycGgKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0gICAgICAg
IHZhciBfTWV0YW1vcnBoVmlldyA9IFZpZXcuZXh0ZW5kKF9NZXRhbW9ycGgpOwotICAgICAgICBf
X2V4cG9ydHNfXy5fTWV0YW1vcnBoVmlldyA9IF9NZXRhbW9ycGhWaWV3OwotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgQGNsYXNzIF9TaW1wbGVNZXRhbW9ycGhWaWV3Ci0gICAgICAgICAgICAg
IEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQ29yZVZpZXcK
LSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuX01ldGFtb3JwaAotICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIF9TaW1wbGVNZXRhbW9ycGhWaWV3ID0g
Q29yZVZpZXcuZXh0ZW5kKF9NZXRhbW9ycGgpOwotICAgICAgICBfX2V4cG9ydHNfXy5fU2ltcGxl
TWV0YW1vcnBoVmlldyA9IF9TaW1wbGVNZXRhbW9ycGhWaWV3OwotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gVmlldy5leHRlbmQoX01ldGFtb3JwaCk7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1tZXRhbCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFs
L21lcmdlIiwgImVtYmVyLW1ldGFsL2luc3RydW1lbnRhdGlvbiIsICJlbWJlci1tZXRhbC91dGls
cyIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwg
ImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwgImVtYmVyLW1ldGFsL2FycmF5IiwgImVtYmVyLW1ldGFs
L2xvZ2dlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvZXZlbnRz
IiwgImVtYmVyLW1ldGFsL29ic2VydmVyX3NldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVu
dHMiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQi
LCAiZW1iZXItbWV0YWwvbWFwIiwgImVtYmVyLW1ldGFsL2dldF9wcm9wZXJ0aWVzIiwgImVtYmVy
LW1ldGFsL3NldF9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL3dhdGNoX2tleSIsICJlbWJlci1t
ZXRhbC9jaGFpbnMiLCAiZW1iZXItbWV0YWwvd2F0Y2hfcGF0aCIsICJlbWJlci1tZXRhbC93YXRj
aGluZyIsICJlbWJlci1tZXRhbC9leHBhbmRfcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9jb21w
dXRlZCIsICJlbWJlci1tZXRhbC9jb21wdXRlZF9tYWNyb3MiLCAiZW1iZXItbWV0YWwvb2JzZXJ2
ZXIiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvYmluZGluZyIsICJlbWJlci1t
ZXRhbC9ydW5fbG9vcCIsICJlbWJlci1tZXRhbC9saWJyYXJpZXMiLCAiZW1iZXItbWV0YWwvaXNf
bm9uZSIsICJlbWJlci1tZXRhbC9pc19lbXB0eSIsICJlbWJlci1tZXRhbC9pc19ibGFuayIsICJl
eHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVw
ZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5j
eTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJf
XywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywg
X19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywgX19k
ZXBlbmRlbmN5MTlfXywgX19kZXBlbmRlbmN5MjBfXywgX19kZXBlbmRlbmN5MjFfXywgX19kZXBl
bmRlbmN5MjJfXywgX19kZXBlbmRlbmN5MjNfXywgX19kZXBlbmRlbmN5MjRfXywgX19kZXBlbmRl
bmN5MjVfXywgX19kZXBlbmRlbmN5MjZfXywgX19kZXBlbmRlbmN5MjdfXywgX19kZXBlbmRlbmN5
MjhfXywgX19kZXBlbmRlbmN5MjlfXywgX19kZXBlbmRlbmN5MzBfXywgX19kZXBlbmRlbmN5MzFf
XywgX19kZXBlbmRlbmN5MzJfXywgX19kZXBlbmRlbmN5MzNfXywgX19leHBvcnRzX18pIHsKLSAg
ICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyIE1ldGFs
Ci0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1i
ZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gQkVHSU4gSU1QT1JUUwotICAg
ICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IG1lcmdlID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpbnN0cnVt
ZW50ID0gX19kZXBlbmRlbmN5M19fLmluc3RydW1lbnQ7Ci0gICAgICAgIHZhciBzdWJzY3JpYmUg
PSBfX2RlcGVuZGVuY3kzX18uc3Vic2NyaWJlOwotICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBf
X2RlcGVuZGVuY3kzX18udW5zdWJzY3JpYmU7Ci0gICAgICAgIHZhciByZXNldCA9IF9fZGVwZW5k
ZW5jeTNfXy5yZXNldDsKLSAgICAgICAgdmFyIGdlbmVyYXRlR3VpZCA9IF9fZGVwZW5kZW5jeTRf
Xy5nZW5lcmF0ZUd1aWQ7Ci0gICAgICAgIHZhciBHVUlEX0tFWSA9IF9fZGVwZW5kZW5jeTRfXy5H
VUlEX0tFWTsKLSAgICAgICAgdmFyIEdVSURfUFJFRklYID0gX19kZXBlbmRlbmN5NF9fLkdVSURf
UFJFRklYOwotICAgICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTRfXy5ndWlkRm9yOwot
ICAgICAgICB2YXIgTUVUQV9ERVNDID0gX19kZXBlbmRlbmN5NF9fLk1FVEFfREVTQzsKLSAgICAg
ICAgdmFyIEVNUFRZX01FVEEgPSBfX2RlcGVuZGVuY3k0X18uRU1QVFlfTUVUQTsKLSAgICAgICAg
dmFyIG1ldGEgPSBfX2RlcGVuZGVuY3k0X18ubWV0YTsKLSAgICAgICAgdmFyIGdldE1ldGEgPSBf
X2RlcGVuZGVuY3k0X18uZ2V0TWV0YTsKLSAgICAgICAgdmFyIHNldE1ldGEgPSBfX2RlcGVuZGVu
Y3k0X18uc2V0TWV0YTsKLSAgICAgICAgdmFyIG1ldGFQYXRoID0gX19kZXBlbmRlbmN5NF9fLm1l
dGFQYXRoOwotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVwZW5kZW5jeTRfXy5pbnNwZWN0Owot
ICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5NF9fLnR5cGVPZjsKLSAgICAgICAgdmFy
IHRyeUNhdGNoRmluYWxseSA9IF9fZGVwZW5kZW5jeTRfXy50cnlDYXRjaEZpbmFsbHk7Ci0gICAg
ICAgIHZhciBpc0FycmF5ID0gX19kZXBlbmRlbmN5NF9fLmlzQXJyYXk7Ci0gICAgICAgIHZhciBt
YWtlQXJyYXkgPSBfX2RlcGVuZGVuY3k0X18ubWFrZUFycmF5OwotICAgICAgICB2YXIgY2FuSW52
b2tlID0gX19kZXBlbmRlbmN5NF9fLmNhbkludm9rZTsKLSAgICAgICAgdmFyIHRyeUludm9rZSA9
IF9fZGVwZW5kZW5jeTRfXy50cnlJbnZva2U7Ci0gICAgICAgIHZhciB0cnlGaW5hbGx5ID0gX19k
ZXBlbmRlbmN5NF9fLnRyeUZpbmFsbHk7Ci0gICAgICAgIHZhciB3cmFwID0gX19kZXBlbmRlbmN5
NF9fLndyYXA7Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVwZW5kZW5jeTRfXy5hcHBseTsKLSAg
ICAgICAgdmFyIGFwcGx5U3RyID0gX19kZXBlbmRlbmN5NF9fLmFwcGx5U3RyOwotICAgICAgICB2
YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
RW51bWVyYWJsZVV0aWxzID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAg
dmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTdfXy5jcmVhdGU7Ci0gICAgICAgIHZhciBwbGF0Zm9y
bSA9IF9fZGVwZW5kZW5jeTdfXy5wbGF0Zm9ybTsKLSAgICAgICAgdmFyIG1hcCA9IF9fZGVwZW5k
ZW5jeThfXy5tYXA7Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5OF9fLmZvckVh
Y2g7Ci0gICAgICAgIHZhciBmaWx0ZXIgPSBfX2RlcGVuZGVuY3k4X18uZmlsdGVyOwotICAgICAg
ICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5kZW5jeThfXy5pbmRleE9mOwotICAgICAgICB2YXIgTG9n
Z2VyID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIGdldCA9IF9f
ZGVwZW5kZW5jeTEwX18uZ2V0OwotICAgICAgICB2YXIgZ2V0V2l0aERlZmF1bHQgPSBfX2RlcGVu
ZGVuY3kxMF9fLmdldFdpdGhEZWZhdWx0OwotICAgICAgICB2YXIgbm9ybWFsaXplVHVwbGUgPSBf
X2RlcGVuZGVuY3kxMF9fLm5vcm1hbGl6ZVR1cGxlOwotICAgICAgICB2YXIgX2dldFBhdGggPSBf
X2RlcGVuZGVuY3kxMF9fLl9nZXRQYXRoOwotCi0gICAgICAgIHZhciBvbiA9IF9fZGVwZW5kZW5j
eTExX18ub247Ci0gICAgICAgIHZhciBhZGRMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTExX18uYWRk
TGlzdGVuZXI7Ci0gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTExX18u
cmVtb3ZlTGlzdGVuZXI7Ci0gICAgICAgIHZhciBzdXNwZW5kTGlzdGVuZXIgPSBfX2RlcGVuZGVu
Y3kxMV9fLnN1c3BlbmRMaXN0ZW5lcjsKLSAgICAgICAgdmFyIHN1c3BlbmRMaXN0ZW5lcnMgPSBf
X2RlcGVuZGVuY3kxMV9fLnN1c3BlbmRMaXN0ZW5lcnM7Ci0gICAgICAgIHZhciBzZW5kRXZlbnQg
PSBfX2RlcGVuZGVuY3kxMV9fLnNlbmRFdmVudDsKLSAgICAgICAgdmFyIGhhc0xpc3RlbmVycyA9
IF9fZGVwZW5kZW5jeTExX18uaGFzTGlzdGVuZXJzOwotICAgICAgICB2YXIgd2F0Y2hlZEV2ZW50
cyA9IF9fZGVwZW5kZW5jeTExX18ud2F0Y2hlZEV2ZW50czsKLSAgICAgICAgdmFyIGxpc3RlbmVy
c0ZvciA9IF9fZGVwZW5kZW5jeTExX18ubGlzdGVuZXJzRm9yOwotICAgICAgICB2YXIgbGlzdGVu
ZXJzRGlmZiA9IF9fZGVwZW5kZW5jeTExX18ubGlzdGVuZXJzRGlmZjsKLSAgICAgICAgdmFyIGxp
c3RlbmVyc1VuaW9uID0gX19kZXBlbmRlbmN5MTFfXy5saXN0ZW5lcnNVbmlvbjsKLQotICAgICAg
ICB2YXIgT2JzZXJ2ZXJTZXQgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0KLSAgICAg
ICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5kZW5jeTEzX18ucHJvcGVydHlXaWxs
Q2hhbmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3kxM19f
LnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIgb3ZlcnJpZGVDaGFpbnMgPSBfX2RlcGVu
ZGVuY3kxM19fLm92ZXJyaWRlQ2hhaW5zOwotICAgICAgICB2YXIgYmVnaW5Qcm9wZXJ0eUNoYW5n
ZXMgPSBfX2RlcGVuZGVuY3kxM19fLmJlZ2luUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIg
ZW5kUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRlbmN5MTNfXy5lbmRQcm9wZXJ0eUNoYW5nZXM7
Ci0gICAgICAgIHZhciBjaGFuZ2VQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5MTNfXy5jaGFuZ2VQ
cm9wZXJ0aWVzOwotCi0gICAgICAgIHZhciBEZXNjcmlwdG9yID0gX19kZXBlbmRlbmN5MTRfXy5E
ZXNjcmlwdG9yOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3kxNF9f
LmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5MTVfXy5zZXQ7
Ci0gICAgICAgIHZhciB0cnlTZXQgPSBfX2RlcGVuZGVuY3kxNV9fLnRyeVNldDsKLQotICAgICAg
ICB2YXIgT3JkZXJlZFNldCA9IF9fZGVwZW5kZW5jeTE2X18uT3JkZXJlZFNldDsKLSAgICAgICAg
dmFyIE1hcCA9IF9fZGVwZW5kZW5jeTE2X18uTWFwOwotICAgICAgICB2YXIgTWFwV2l0aERlZmF1
bHQgPSBfX2RlcGVuZGVuY3kxNl9fLk1hcFdpdGhEZWZhdWx0OwotICAgICAgICB2YXIgZ2V0UHJv
cGVydGllcyA9IF9fZGVwZW5kZW5jeTE3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHNldFBy
b3BlcnRpZXMgPSBfX2RlcGVuZGVuY3kxOF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciB3YXRj
aEtleSA9IF9fZGVwZW5kZW5jeTE5X18ud2F0Y2hLZXk7Ci0gICAgICAgIHZhciB1bndhdGNoS2V5
ID0gX19kZXBlbmRlbmN5MTlfXy51bndhdGNoS2V5OwotICAgICAgICB2YXIgZmx1c2hQZW5kaW5n
Q2hhaW5zID0gX19kZXBlbmRlbmN5MjBfXy5mbHVzaFBlbmRpbmdDaGFpbnM7Ci0gICAgICAgIHZh
ciByZW1vdmVDaGFpbldhdGNoZXIgPSBfX2RlcGVuZGVuY3kyMF9fLnJlbW92ZUNoYWluV2F0Y2hl
cjsKLSAgICAgICAgdmFyIENoYWluTm9kZSA9IF9fZGVwZW5kZW5jeTIwX18uQ2hhaW5Ob2RlOwot
ICAgICAgICB2YXIgZmluaXNoQ2hhaW5zID0gX19kZXBlbmRlbmN5MjBfXy5maW5pc2hDaGFpbnM7
Ci0gICAgICAgIHZhciB3YXRjaFBhdGggPSBfX2RlcGVuZGVuY3kyMV9fLndhdGNoUGF0aDsKLSAg
ICAgICAgdmFyIHVud2F0Y2hQYXRoID0gX19kZXBlbmRlbmN5MjFfXy51bndhdGNoUGF0aDsKLSAg
ICAgICAgdmFyIHdhdGNoID0gX19kZXBlbmRlbmN5MjJfXy53YXRjaDsKLSAgICAgICAgdmFyIGlz
V2F0Y2hpbmcgPSBfX2RlcGVuZGVuY3kyMl9fLmlzV2F0Y2hpbmc7Ci0gICAgICAgIHZhciB1bndh
dGNoID0gX19kZXBlbmRlbmN5MjJfXy51bndhdGNoOwotICAgICAgICB2YXIgcmV3YXRjaCA9IF9f
ZGVwZW5kZW5jeTIyX18ucmV3YXRjaDsKLSAgICAgICAgdmFyIGRlc3Ryb3kgPSBfX2RlcGVuZGVu
Y3kyMl9fLmRlc3Ryb3k7Ci0gICAgICAgIHZhciBleHBhbmRQcm9wZXJ0aWVzID0gX19kZXBlbmRl
bmN5MjNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29tcHV0ZWRQcm9wZXJ0eSA9IF9fZGVw
ZW5kZW5jeTI0X18uQ29tcHV0ZWRQcm9wZXJ0eTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19k
ZXBlbmRlbmN5MjRfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIGNhY2hlRm9yID0gX19kZXBlbmRl
bmN5MjRfXy5jYWNoZUZvcjsKLQotICAgICAgICAvLyBzaWRlIGVmZmVjdCBvZiBkZWZpbmluZyB0
aGUgY29tcHV0ZWQuKiBtYWNyb3MKLQotICAgICAgICB2YXIgYWRkT2JzZXJ2ZXIgPSBfX2RlcGVu
ZGVuY3kyNl9fLmFkZE9ic2VydmVyOwotICAgICAgICB2YXIgb2JzZXJ2ZXJzRm9yID0gX19kZXBl
bmRlbmN5MjZfXy5vYnNlcnZlcnNGb3I7Ci0gICAgICAgIHZhciByZW1vdmVPYnNlcnZlciA9IF9f
ZGVwZW5kZW5jeTI2X18ucmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBhZGRCZWZvcmVPYnNl
cnZlciA9IF9fZGVwZW5kZW5jeTI2X18uYWRkQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBf
c3VzcGVuZEJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MjZfXy5fc3VzcGVuZEJlZm9yZU9i
c2VydmVyOwotICAgICAgICB2YXIgX3N1c3BlbmRPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTI2X18u
X3N1c3BlbmRPYnNlcnZlcjsKLSAgICAgICAgdmFyIF9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXJzID0g
X19kZXBlbmRlbmN5MjZfXy5fc3VzcGVuZEJlZm9yZU9ic2VydmVyczsKLSAgICAgICAgdmFyIF9z
dXNwZW5kT2JzZXJ2ZXJzID0gX19kZXBlbmRlbmN5MjZfXy5fc3VzcGVuZE9ic2VydmVyczsKLSAg
ICAgICAgdmFyIGJlZm9yZU9ic2VydmVyc0ZvciA9IF9fZGVwZW5kZW5jeTI2X18uYmVmb3JlT2Jz
ZXJ2ZXJzRm9yOwotICAgICAgICB2YXIgcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVu
Y3kyNl9fLnJlbW92ZUJlZm9yZU9ic2VydmVyOwotICAgICAgICB2YXIgSVNfQklORElORyA9IF9f
ZGVwZW5kZW5jeTI3X18uSVNfQklORElORzsKLSAgICAgICAgdmFyIG1peGluID0gX19kZXBlbmRl
bmN5MjdfXy5taXhpbjsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5MjdfXy5NaXhp
bjsKLSAgICAgICAgdmFyIHJlcXVpcmVkID0gX19kZXBlbmRlbmN5MjdfXy5yZXF1aXJlZDsKLSAg
ICAgICAgdmFyIGFsaWFzTWV0aG9kID0gX19kZXBlbmRlbmN5MjdfXy5hbGlhc01ldGhvZDsKLSAg
ICAgICAgdmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5MjdfXy5vYnNlcnZlcjsKLSAgICAgICAg
dmFyIGltbWVkaWF0ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MjdfXy5pbW1lZGlhdGVPYnNlcnZl
cjsKLSAgICAgICAgdmFyIGJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MjdfXy5iZWZvcmVP
YnNlcnZlcjsKLSAgICAgICAgdmFyIEJpbmRpbmcgPSBfX2RlcGVuZGVuY3kyOF9fLkJpbmRpbmc7
Ci0gICAgICAgIHZhciBpc0dsb2JhbFBhdGggPSBfX2RlcGVuZGVuY3kyOF9fLmlzR2xvYmFsUGF0
aDsKLSAgICAgICAgdmFyIGJpbmQgPSBfX2RlcGVuZGVuY3kyOF9fLmJpbmQ7Ci0gICAgICAgIHZh
ciBvbmVXYXkgPSBfX2RlcGVuZGVuY3kyOF9fLm9uZVdheTsKLSAgICAgICAgdmFyIHJ1biA9IF9f
ZGVwZW5kZW5jeTI5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGxpYnJhcmllcyA9IF9fZGVw
ZW5kZW5jeTMwX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzTm9uZSA9IF9fZGVwZW5kZW5j
eTMxX18uaXNOb25lOwotICAgICAgICB2YXIgbm9uZSA9IF9fZGVwZW5kZW5jeTMxX18ubm9uZTsK
LSAgICAgICAgdmFyIGlzRW1wdHkgPSBfX2RlcGVuZGVuY3kzMl9fLmlzRW1wdHk7Ci0gICAgICAg
IHZhciBlbXB0eSA9IF9fZGVwZW5kZW5jeTMyX18uZW1wdHk7Ci0gICAgICAgIHZhciBpc0JsYW5r
ID0gX19kZXBlbmRlbmN5MzNfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFTkQgSU1QT1JUUwot
Ci0gICAgICAgIC8vIEJFR0lOIEVYUE9SVFMKLSAgICAgICAgdmFyIEVtYmVySW5zdHJ1bWVudGF0
aW9uID0gRW1iZXIuSW5zdHJ1bWVudGF0aW9uID0ge307Ci0gICAgICAgIEVtYmVySW5zdHJ1bWVu
dGF0aW9uLmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotICAgICAgICBFbWJlckluc3RydW1lbnRh
dGlvbi5zdWJzY3JpYmUgPSBzdWJzY3JpYmU7Ci0gICAgICAgIEVtYmVySW5zdHJ1bWVudGF0aW9u
LnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7Ci0gICAgICAgIEVtYmVySW5zdHJ1bWVudGF0aW9u
LnJlc2V0ID0gcmVzZXQ7Ci0KLSAgICAgICAgRW1iZXIuaW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7
Ci0gICAgICAgIEVtYmVyLnN1YnNjcmliZSA9IHN1YnNjcmliZTsKLQotICAgICAgICBFbWJlci5n
ZW5lcmF0ZUd1aWQgPSBnZW5lcmF0ZUd1aWQ7Ci0gICAgICAgIEVtYmVyLkdVSURfS0VZID0gR1VJ
RF9LRVk7Ci0gICAgICAgIEVtYmVyLkdVSURfUFJFRklYID0gR1VJRF9QUkVGSVg7Ci0gICAgICAg
IEVtYmVyLmNyZWF0ZSA9IGNyZWF0ZTsKLSAgICAgICAgRW1iZXIucGxhdGZvcm0gPSBwbGF0Zm9y
bTsKLQotICAgICAgICB2YXIgRW1iZXJBcnJheVBvbHlmaWxscyA9IEVtYmVyLkFycmF5UG9seWZp
bGxzID0ge307Ci0KLSAgICAgICAgRW1iZXJBcnJheVBvbHlmaWxscy5tYXAgPSBtYXA7Ci0gICAg
ICAgIEVtYmVyQXJyYXlQb2x5ZmlsbHMuZm9yRWFjaCA9IGZvckVhY2g7Ci0gICAgICAgIEVtYmVy
QXJyYXlQb2x5ZmlsbHMuZmlsdGVyID0gZmlsdGVyOwotICAgICAgICBFbWJlckFycmF5UG9seWZp
bGxzLmluZGV4T2YgPSBpbmRleE9mOwotCi0gICAgICAgIEVtYmVyLkVycm9yID0gRW1iZXJFcnJv
cjsKLSAgICAgICAgRW1iZXIuZ3VpZEZvciA9IGd1aWRGb3I7Ci0gICAgICAgIEVtYmVyLk1FVEFf
REVTQyA9IE1FVEFfREVTQzsKLSAgICAgICAgRW1iZXIuRU1QVFlfTUVUQSA9IEVNUFRZX01FVEE7
Ci0gICAgICAgIEVtYmVyLm1ldGEgPSBtZXRhOwotICAgICAgICBFbWJlci5nZXRNZXRhID0gZ2V0
TWV0YTsKLSAgICAgICAgRW1iZXIuc2V0TWV0YSA9IHNldE1ldGE7Ci0gICAgICAgIEVtYmVyLm1l
dGFQYXRoID0gbWV0YVBhdGg7Ci0gICAgICAgIEVtYmVyLmluc3BlY3QgPSBpbnNwZWN0OwotICAg
ICAgICBFbWJlci50eXBlT2YgPSB0eXBlT2Y7Ci0gICAgICAgIEVtYmVyLnRyeUNhdGNoRmluYWxs
eSA9IHRyeUNhdGNoRmluYWxseTsKLSAgICAgICAgRW1iZXIuaXNBcnJheSA9IGlzQXJyYXk7Ci0g
ICAgICAgIEVtYmVyLm1ha2VBcnJheSA9IG1ha2VBcnJheTsKLSAgICAgICAgRW1iZXIuY2FuSW52
b2tlID0gY2FuSW52b2tlOwotICAgICAgICBFbWJlci50cnlJbnZva2UgPSB0cnlJbnZva2U7Ci0g
ICAgICAgIEVtYmVyLnRyeUZpbmFsbHkgPSB0cnlGaW5hbGx5OwotICAgICAgICBFbWJlci53cmFw
ID0gd3JhcDsKLSAgICAgICAgRW1iZXIuYXBwbHkgPSBhcHBseTsKLSAgICAgICAgRW1iZXIuYXBw
bHlTdHIgPSBhcHBseVN0cjsKLQotICAgICAgICBFbWJlci5Mb2dnZXIgPSBMb2dnZXI7Ci0KLSAg
ICAgICAgRW1iZXIuZ2V0ID0gZ2V0OwotICAgICAgICBFbWJlci5nZXRXaXRoRGVmYXVsdCA9IGdl
dFdpdGhEZWZhdWx0OwotICAgICAgICBFbWJlci5ub3JtYWxpemVUdXBsZSA9IG5vcm1hbGl6ZVR1
cGxlOwotICAgICAgICBFbWJlci5fZ2V0UGF0aCA9IF9nZXRQYXRoOwotCi0gICAgICAgIEVtYmVy
LkVudW1lcmFibGVVdGlscyA9IEVudW1lcmFibGVVdGlsczsKLQotICAgICAgICBFbWJlci5vbiA9
IG9uOwotICAgICAgICBFbWJlci5hZGRMaXN0ZW5lciA9IGFkZExpc3RlbmVyOwotICAgICAgICBF
bWJlci5yZW1vdmVMaXN0ZW5lciA9IHJlbW92ZUxpc3RlbmVyOwotICAgICAgICBFbWJlci5fc3Vz
cGVuZExpc3RlbmVyID0gc3VzcGVuZExpc3RlbmVyOwotICAgICAgICBFbWJlci5fc3VzcGVuZExp
c3RlbmVycyA9IHN1c3BlbmRMaXN0ZW5lcnM7Ci0gICAgICAgIEVtYmVyLnNlbmRFdmVudCA9IHNl
bmRFdmVudDsKLSAgICAgICAgRW1iZXIuaGFzTGlzdGVuZXJzID0gaGFzTGlzdGVuZXJzOwotICAg
ICAgICBFbWJlci53YXRjaGVkRXZlbnRzID0gd2F0Y2hlZEV2ZW50czsKLSAgICAgICAgRW1iZXIu
bGlzdGVuZXJzRm9yID0gbGlzdGVuZXJzRm9yOwotICAgICAgICBFbWJlci5saXN0ZW5lcnNEaWZm
ID0gbGlzdGVuZXJzRGlmZjsKLSAgICAgICAgRW1iZXIubGlzdGVuZXJzVW5pb24gPSBsaXN0ZW5l
cnNVbmlvbjsKLQotICAgICAgICBFbWJlci5fT2JzZXJ2ZXJTZXQgPSBPYnNlcnZlclNldDsKLQot
ICAgICAgICBFbWJlci5wcm9wZXJ0eVdpbGxDaGFuZ2UgPSBwcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0g
ICAgICAgIEVtYmVyLnByb3BlcnR5RGlkQ2hhbmdlID0gcHJvcGVydHlEaWRDaGFuZ2U7Ci0gICAg
ICAgIEVtYmVyLm92ZXJyaWRlQ2hhaW5zID0gb3ZlcnJpZGVDaGFpbnM7Ci0gICAgICAgIEVtYmVy
LmJlZ2luUHJvcGVydHlDaGFuZ2VzID0gYmVnaW5Qcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIEVt
YmVyLmVuZFByb3BlcnR5Q2hhbmdlcyA9IGVuZFByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgRW1i
ZXIuY2hhbmdlUHJvcGVydGllcyA9IGNoYW5nZVByb3BlcnRpZXM7Ci0KLSAgICAgICAgRW1iZXIu
RGVzY3JpcHRvciA9IERlc2NyaXB0b3I7Ci0gICAgICAgIEVtYmVyLmRlZmluZVByb3BlcnR5ID0g
ZGVmaW5lUHJvcGVydHk7Ci0KLSAgICAgICAgRW1iZXIuc2V0ID0gc2V0OwotICAgICAgICBFbWJl
ci50cnlTZXQgPSB0cnlTZXQ7Ci0KLSAgICAgICAgRW1iZXIuT3JkZXJlZFNldCA9IE9yZGVyZWRT
ZXQ7Ci0gICAgICAgIEVtYmVyLk1hcCA9IE1hcDsKLSAgICAgICAgRW1iZXIuTWFwV2l0aERlZmF1
bHQgPSBNYXBXaXRoRGVmYXVsdDsKLQotICAgICAgICBFbWJlci5nZXRQcm9wZXJ0aWVzID0gZ2V0
UHJvcGVydGllczsKLSAgICAgICAgRW1iZXIuc2V0UHJvcGVydGllcyA9IHNldFByb3BlcnRpZXM7
Ci0KLSAgICAgICAgRW1iZXIud2F0Y2hLZXkgPSB3YXRjaEtleTsKLSAgICAgICAgRW1iZXIudW53
YXRjaEtleSA9IHVud2F0Y2hLZXk7Ci0KLSAgICAgICAgRW1iZXIuZmx1c2hQZW5kaW5nQ2hhaW5z
ID0gZmx1c2hQZW5kaW5nQ2hhaW5zOwotICAgICAgICBFbWJlci5yZW1vdmVDaGFpbldhdGNoZXIg
PSByZW1vdmVDaGFpbldhdGNoZXI7Ci0gICAgICAgIEVtYmVyLl9DaGFpbk5vZGUgPSBDaGFpbk5v
ZGU7Ci0gICAgICAgIEVtYmVyLmZpbmlzaENoYWlucyA9IGZpbmlzaENoYWluczsKLQotICAgICAg
ICBFbWJlci53YXRjaFBhdGggPSB3YXRjaFBhdGg7Ci0gICAgICAgIEVtYmVyLnVud2F0Y2hQYXRo
ID0gdW53YXRjaFBhdGg7Ci0KLSAgICAgICAgRW1iZXIud2F0Y2ggPSB3YXRjaDsKLSAgICAgICAg
RW1iZXIuaXNXYXRjaGluZyA9IGlzV2F0Y2hpbmc7Ci0gICAgICAgIEVtYmVyLnVud2F0Y2ggPSB1
bndhdGNoOwotICAgICAgICBFbWJlci5yZXdhdGNoID0gcmV3YXRjaDsKLSAgICAgICAgRW1iZXIu
ZGVzdHJveSA9IGRlc3Ryb3k7Ci0KLSAgICAgICAgRW1iZXIuZXhwYW5kUHJvcGVydGllcyA9IGV4
cGFuZFByb3BlcnRpZXM7Ci0KLSAgICAgICAgRW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eSA9IENvbXB1
dGVkUHJvcGVydHk7Ci0gICAgICAgIEVtYmVyLmNvbXB1dGVkID0gY29tcHV0ZWQ7Ci0gICAgICAg
IEVtYmVyLmNhY2hlRm9yID0gY2FjaGVGb3I7Ci0KLSAgICAgICAgRW1iZXIuYWRkT2JzZXJ2ZXIg
PSBhZGRPYnNlcnZlcjsKLSAgICAgICAgRW1iZXIub2JzZXJ2ZXJzRm9yID0gb2JzZXJ2ZXJzRm9y
OwotICAgICAgICBFbWJlci5yZW1vdmVPYnNlcnZlciA9IHJlbW92ZU9ic2VydmVyOwotICAgICAg
ICBFbWJlci5hZGRCZWZvcmVPYnNlcnZlciA9IGFkZEJlZm9yZU9ic2VydmVyOwotICAgICAgICBF
bWJlci5fc3VzcGVuZEJlZm9yZU9ic2VydmVyID0gX3N1c3BlbmRCZWZvcmVPYnNlcnZlcjsKLSAg
ICAgICAgRW1iZXIuX3N1c3BlbmRCZWZvcmVPYnNlcnZlcnMgPSBfc3VzcGVuZEJlZm9yZU9ic2Vy
dmVyczsKLSAgICAgICAgRW1iZXIuX3N1c3BlbmRPYnNlcnZlciA9IF9zdXNwZW5kT2JzZXJ2ZXI7
Ci0gICAgICAgIEVtYmVyLl9zdXNwZW5kT2JzZXJ2ZXJzID0gX3N1c3BlbmRPYnNlcnZlcnM7Ci0g
ICAgICAgIEVtYmVyLmJlZm9yZU9ic2VydmVyc0ZvciA9IGJlZm9yZU9ic2VydmVyc0ZvcjsKLSAg
ICAgICAgRW1iZXIucmVtb3ZlQmVmb3JlT2JzZXJ2ZXIgPSByZW1vdmVCZWZvcmVPYnNlcnZlcjsK
LQotICAgICAgICBFbWJlci5JU19CSU5ESU5HID0gSVNfQklORElORzsKLSAgICAgICAgRW1iZXIu
cmVxdWlyZWQgPSByZXF1aXJlZDsKLSAgICAgICAgRW1iZXIuYWxpYXNNZXRob2QgPSBhbGlhc01l
dGhvZDsKLSAgICAgICAgRW1iZXIub2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLSAgICAgICAgRW1iZXIu
aW1tZWRpYXRlT2JzZXJ2ZXIgPSBpbW1lZGlhdGVPYnNlcnZlcjsKLSAgICAgICAgRW1iZXIuYmVm
b3JlT2JzZXJ2ZXIgPSBiZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgRW1iZXIubWl4aW4gPSBtaXhp
bjsKLSAgICAgICAgRW1iZXIuTWl4aW4gPSBNaXhpbjsKLQotICAgICAgICBFbWJlci5vbmVXYXkg
PSBvbmVXYXk7Ci0gICAgICAgIEVtYmVyLmJpbmQgPSBiaW5kOwotICAgICAgICBFbWJlci5CaW5k
aW5nID0gQmluZGluZzsKLSAgICAgICAgRW1iZXIuaXNHbG9iYWxQYXRoID0gaXNHbG9iYWxQYXRo
OwotCi0gICAgICAgIEVtYmVyLnJ1biA9IHJ1bjsKLQotICAgICAgICBFbWJlci5saWJyYXJpZXMg
PSBsaWJyYXJpZXM7Ci0gICAgICAgIEVtYmVyLmxpYnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5
KCdFbWJlcicsIEVtYmVyLlZFUlNJT04pOwotCi0gICAgICAgIEVtYmVyLmlzTm9uZSA9IGlzTm9u
ZTsKLSAgICAgICAgRW1iZXIubm9uZSA9IG5vbmU7Ci0KLSAgICAgICAgRW1iZXIuaXNFbXB0eSA9
IGlzRW1wdHk7Ci0gICAgICAgIEVtYmVyLmVtcHR5ID0gZW1wdHk7Ci0KLSAgICAgICAgRW1iZXIu
aXNCbGFuayA9IGlzQmxhbms7Ci0KLSAgICAgICAgRW1iZXIubWVyZ2UgPSBtZXJnZTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgQSBmdW5jdGlvbiBtYXkgYmUgYXNzaWduZWQgdG8gYEVt
YmVyLm9uZXJyb3JgIHRvIGJlIGNhbGxlZCB3aGVuIEVtYmVyCi0gICAgICAgICAgICAgIGludGVy
bmFscyBlbmNvdW50ZXIgYW4gZXJyb3IuIFRoaXMgaXMgdXNlZnVsIGZvciBzcGVjaWFsaXplZCBl
cnJvciBoYW5kbGluZwotICAgICAgICAgICAgICBhbmQgcmVwb3J0aW5nIGNvZGUuCi0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5vbmVycm9yID0gZnVu
Y3Rpb24oZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBFbS4kLmFqYXgoJy9yZXBvcnQtZXJyb3In
LCAnUE9TVCcsIHsKLSAgICAgICAgICAgICAgICAgIHN0YWNrOiBlcnJvci5zdGFjaywKLSAgICAg
ICAgICAgICAgICAgIG90aGVySW5mb3JtYXRpb246ICd3aGF0ZXZlciBhcHAgc3RhdGUgeW91IHdh
bnQgdG8gcHJvdmlkZScKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW50ZXJuYWxseSwgYEVtYmVyLm9uZXJy
b3JgIGlzIHVzZWQgYXMgQmFja2J1cm5lcidzIGVycm9yIGhhbmRsZXIuCi0KLSAgICAgICAgICAg
ICAgQGV2ZW50IG9uZXJyb3IKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAg
ICBAcGFyYW0ge0V4Y2VwdGlvbn0gZXJyb3IgdGhlIGVycm9yIG9iamVjdAotICAgICAgICAgICAg
Ki8KLSAgICAgICAgRW1iZXIub25lcnJvciA9IG51bGw7Ci0gICAgICAgIC8vIEVORCBFWFBPUlRT
Ci0KLSAgICAgICAgLy8gZG8gdGhpcyBmb3Igc2lkZS1lZmZlY3RzIG9mIHVwZGF0aW5nIEVtYmVy
LmFzc2VydCwgd2FybiwgZXRjIHdoZW4KLSAgICAgICAgLy8gZW1iZXItZGVidWcgaXMgcHJlc2Vu
dAotICAgICAgICBpZiAoRW1iZXIuX19sb2FkZXIucmVnaXN0cnlbJ2VtYmVyLWRlYnVnJ10pIHsK
LSAgICAgICAgICAgIHJlcXVpcmVNb2R1bGUoJ2VtYmVyLWRlYnVnJyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXI7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1tZXRhbC9hbGlhcyIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQi
LCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVy
LW1ldGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwv
cGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvZGVwZW5kZW50X2tl
eXMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9f
LCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQgPSBfX2Rl
cGVuZGVuY3kxX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Ml9fLnNldDsK
LSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIERlc2NyaXB0b3IgPSBfX2RlcGVuZGVuY3k0X18uRGVzY3JpcHRvcjsKLSAgICAg
ICAgdmFyIGRlZmluZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5NF9fLmRlZmluZVByb3BlcnR5Owot
ICAgICAgICB2YXIgQ29tcHV0ZWRQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTVfXy5Db21wdXRlZFBy
b3BlcnR5OwotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5Nl9fLmNyZWF0ZTsKLSAg
ICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVuY3k3X18ubWV0YTsKLSAgICAgICAgdmFyIGluc3Bl
Y3QgPSBfX2RlcGVuZGVuY3k3X18uaW5zcGVjdDsKLSAgICAgICAgdmFyIGFkZERlcGVuZGVudEtl
eXMgPSBfX2RlcGVuZGVuY3k4X18uYWRkRGVwZW5kZW50S2V5czsKLSAgICAgICAgdmFyIHJlbW92
ZURlcGVuZGVudEtleXMgPSBfX2RlcGVuZGVuY3k4X18ucmVtb3ZlRGVwZW5kZW50S2V5czsKLQot
ICAgICAgICBmdW5jdGlvbiBhbGlhcyhhbHRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
QWxpYXNlZFByb3BlcnR5KGFsdEtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNf
Xy5hbGlhcyA9IGFsaWFzOwotICAgICAgICBmdW5jdGlvbiBBbGlhc2VkUHJvcGVydHkoYWx0S2V5
KSB7Ci0gICAgICAgICAgICB0aGlzLmFsdEtleSA9IGFsdEtleTsKLSAgICAgICAgICAgIHRoaXMu
X2RlcGVuZGVudEtleXMgPSBbIGFsdEtleSBdOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18uQWxpYXNlZFByb3BlcnR5ID0gQWxpYXNlZFByb3BlcnR5OwotICAgICAgICBBbGlhc2Vk
UHJvcGVydHkucHJvdG90eXBlID0gY3JlYXRlKERlc2NyaXB0b3IucHJvdG90eXBlKTsKLQotICAg
ICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIEFsaWFzZWRQcm9w
ZXJ0eV9nZXQob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0KG9iaiwgdGhp
cy5hbHRLZXkpOwotICAgICAgICB9OwotCi0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5
cGUuc2V0ID0gZnVuY3Rpb24gQWxpYXNlZFByb3BlcnR5X3NldChvYmosIGtleU5hbWUsIHZhbHVl
KSB7Ci0gICAgICAgICAgICByZXR1cm4gc2V0KG9iaiwgdGhpcy5hbHRLZXksIHZhbHVlKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLndpbGxXYXRjaCA9
IGZ1bmN0aW9uKG9iaiwga2V5TmFtZSkgewotICAgICAgICAgICAgYWRkRGVwZW5kZW50S2V5cyh0
aGlzLCBvYmosIGtleU5hbWUsIG1ldGEob2JqKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQWxp
YXNlZFByb3BlcnR5LnByb3RvdHlwZS5kaWRVbndhdGNoID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1l
KSB7Ci0gICAgICAgICAgICByZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwg
bWV0YShvYmopKTsKLSAgICAgICAgfTsKLQotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90
eXBlLnNldHVwID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbSA9
IG1ldGEob2JqKTsKLSAgICAgICAgICAgIGlmIChtLndhdGNoaW5nW2tleU5hbWVdKSB7Ci0gICAg
ICAgICAgICAgICAgYWRkRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5
cGUudGVhcmRvd24gPSBmdW5jdGlvbihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgIHZhciBt
ID0gbWV0YShvYmopOwotICAgICAgICAgICAgaWYgKG0ud2F0Y2hpbmdba2V5TmFtZV0pIHsKLSAg
ICAgICAgICAgICAgICByZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQWxpYXNlZFByb3BlcnR5LnBy
b3RvdHlwZS5yZWFkT25seSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGhpcy5zZXQgPSBB
bGlhc2VkUHJvcGVydHlfcmVhZE9ubHlTZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBBbGlhc2VkUHJvcGVydHlfcmVhZE9ubHlTZXQo
b2JqLCBrZXlOYW1lLCB2YWx1ZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3Io
J0Nhbm5vdCBzZXQgcmVhZC1vbmx5IHByb3BlcnR5ICInICsga2V5TmFtZSArICciIG9uIG9iamVj
dDogJyArIGluc3BlY3Qob2JqKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBbGlhc2VkUHJvcGVy
dHkucHJvdG90eXBlLm9uZVdheSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGhpcy5zZXQg
PSBBbGlhc2VkUHJvcGVydHlfb25lV2F5U2V0OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gQWxpYXNlZFByb3BlcnR5X29uZVdheVNldChv
YmosIGtleU5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmosIGtl
eU5hbWUsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuIHNldChvYmosIGtleU5hbWUsIHZhbHVl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgg
RW1iZXIgRGF0YQotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLl9tZXRhID0gdW5k
ZWZpbmVkOwotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLm1ldGEgPSBDb21wdXRl
ZFByb3BlcnR5LnByb3RvdHlwZS5tZXRhOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0
YWwvYXJyYXkiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxl
IGVtYmVyLW1ldGFsCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBBcnJheVByb3RvdHlw
ZSA9IEFycmF5LnByb3RvdHlwZTsKLQotICAgICAgICAvLyBUZXN0aW5nIHRoaXMgaXMgbm90IGlk
ZWFsLCBidXQgd2Ugd2FudCB0byB1c2UgbmF0aXZlIGZ1bmN0aW9ucwotICAgICAgICAvLyBpZiBh
dmFpbGFibGUsIGJ1dCBub3QgdG8gdXNlIHZlcnNpb25zIGNyZWF0ZWQgYnkgbGlicmFyaWVzIGxp
a2UgUHJvdG90eXBlCi0gICAgICAgIHZhciBpc05hdGl2ZUZ1bmMgPSBmdW5jdGlvbihmdW5jKSB7
Ci0gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBwcm9iYWJseSB3b3JrIGluIGFsbCBicm93c2Vy
cyBsaWtlbHkgdG8gaGF2ZSBFUzUgYXJyYXkgbWV0aG9kcwotICAgICAgICAgICAgcmV0dXJuIGZ1
bmMgJiYgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZnVuYykuaW5kZXhPZignW25h
dGl2ZSBjb2RlXScpID4gLTE7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gRnJvbTogaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09i
amVjdHMvYXJyYXkvbWFwCi0gICAgICAgIHZhciBtYXAgPSBpc05hdGl2ZUZ1bmMoQXJyYXlQcm90
b3R5cGUubWFwKSA/IEFycmF5UHJvdG90eXBlLm1hcCA6IGZ1bmN0aW9uKGZ1biAvKiwgdGhpc3Ag
Ki8KLSAgICAgICAgKSB7Ci0gICAgICAgICAgICAvLyJ1c2Ugc3RyaWN0IjsKLQotICAgICAgICAg
ICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgdCA9IE9iamVjdCh0aGlzKTsKLSAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4g
MDsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuICE9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbik7Ci0gICAgICAgICAgICB2YXIgdGhpc3AgPSBh
cmd1bWVudHNbMV07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCkgewotICAgICAgICAgICAgICAgICAgICByZXNb
aV0gPSBmdW4uY2FsbCh0aGlzcCwgdFtpXSwgaSwgdCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9OwotCi0gICAg
ICAgIC8vIEZyb206IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQv
UmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2FycmF5L2ZvcmVhY2gKLSAgICAgICAgdmFyIGZvckVh
Y2ggPSBpc05hdGl2ZUZ1bmMoQXJyYXlQcm90b3R5cGUuZm9yRWFjaCkgPyBBcnJheVByb3RvdHlw
ZS5mb3JFYWNoIDogZnVuY3Rpb24oZnVuIC8qLCB0aGlzcCAqLwotICAgICAgICApIHsKLSAgICAg
ICAgICAgIC8vInVzZSBzdHJpY3QiOwotCi0gICAgICAgICAgICBpZiAodGhpcyA9PT0gdm9pZCAw
IHx8IHRoaXMgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpOwot
ICAgICAgICAgICAgdmFyIGxlbiA9IHQubGVuZ3RoID4+PiAwOwotICAgICAgICAgICAgaWYgKHR5
cGVvZiBmdW4gIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0aGlzcCA9IGFyZ3Vt
ZW50c1sxXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaSBpbiB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bi5jYWxs
KHRoaXNwLCB0W2ldLCBpLCB0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgdmFyIGluZGV4T2YgPSBpc05hdGl2ZUZ1bmMoQXJyYXlQcm90
b3R5cGUuaW5kZXhPZikgPyBBcnJheVByb3RvdHlwZS5pbmRleE9mIDogZnVuY3Rpb24gKG9iaiwg
ZnJvbUluZGV4KSB7Ci0gICAgICAgICAgICBpZiAoZnJvbUluZGV4ID09PSBudWxsIHx8IGZyb21J
bmRleCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gMDsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbUluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIGZy
b21JbmRleCA9IE1hdGgubWF4KDAsIHRoaXMubGVuZ3RoICsgZnJvbUluZGV4KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tSW5kZXgsIGogPSB0aGlzLmxlbmd0
aDsgaSA8IGo7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvYmopIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9OwotCi0gICAgICAgIHZh
ciBmaWx0ZXIgPSBpc05hdGl2ZUZ1bmMoQXJyYXlQcm90b3R5cGUuZmlsdGVyKSA/IEFycmF5UHJv
dG90eXBlLmZpbHRlciA6IGZ1bmN0aW9uIChmbiwgY29udGV4dCkgewotICAgICAgICAgICAgdmFy
IGksCi0gICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdLAotICAgICAg
ICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGZuLmNhbGwoY29udGV4dCwgdmFsdWUsIGksIHRoaXMpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9OwotCi0KLSAgICAgICAgaWYgKEVtYmVyLlNISU1fRVM1KSB7Ci0g
ICAgICAgICAgICBpZiAoIUFycmF5UHJvdG90eXBlLm1hcCkgewotICAgICAgICAgICAgICAgIEFy
cmF5UHJvdG90eXBlLm1hcCA9IG1hcDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFBcnJheVByb3RvdHlwZS5mb3JFYWNoKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5
cGUuZm9yRWFjaCA9IGZvckVhY2g7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
QXJyYXlQcm90b3R5cGUuZmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUu
ZmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIUFycmF5
UHJvdG90eXBlLmluZGV4T2YpIHsKLSAgICAgICAgICAgICAgICBBcnJheVByb3RvdHlwZS5pbmRl
eE9mID0gaW5kZXhPZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBBcnJheSBwb2x5ZmlsbHMgdG8gc3VwcG9ydCBFUzUgZmVhdHVyZXMgaW4g
b2xkZXIgYnJvd3NlcnMuCi0KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAcHJvcGVydHkgQXJyYXlQb2x5ZmlsbHMKLSAgICAgICAgICAgICovCi0gICAgICAg
IF9fZXhwb3J0c19fLm1hcCA9IG1hcDsKLSAgICAgICAgX19leHBvcnRzX18uZm9yRWFjaCA9IGZv
ckVhY2g7Ci0gICAgICAgIF9fZXhwb3J0c19fLmZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgX19l
eHBvcnRzX18uaW5kZXhPZiA9IGluZGV4T2Y7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1t
ZXRhbC9iaW5kaW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJv
cGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC91dGls
cyIsICJlbWJlci1tZXRhbC9tYXAiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLCAiZW1iZXItbWV0
YWwvcnVuX2xvb3AiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBl
bmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVu
Y3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuTG9nZ2VyLCBFbWJlci5MT0dfQklO
RElOR1MsIGFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAg
ICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciB0cnlTZXQg
PSBfX2RlcGVuZGVuY3kzX18udHJ5U2V0OwotICAgICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5k
ZW5jeTRfXy5ndWlkRm9yOwotICAgICAgICB2YXIgTWFwID0gX19kZXBlbmRlbmN5NV9fLk1hcDsK
LSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5Nl9fLmFkZE9ic2VydmVyOwot
ICAgICAgICB2YXIgcmVtb3ZlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k2X18ucmVtb3ZlT2JzZXJ2
ZXI7Ci0gICAgICAgIHZhciBfc3VzcGVuZE9ic2VydmVyID0gX19kZXBlbmRlbmN5Nl9fLl9zdXNw
ZW5kT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQi
XTsKLQotICAgICAgICAvLyBFUzZUT0RPOiB3aGVyZSBpcyBFbWJlci5sb29rdXAgZGVmaW5lZD8K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAgICAg
ICAqLwotCi0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gQ09OU1RBTlRTCi0gICAgICAgIC8vCi0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIERlYnVnIHBhcmFtZXRlciB5b3UgY2FuIHR1cm4g
b24uIFRoaXMgd2lsbCBsb2cgYWxsIGJpbmRpbmdzIHRoYXQgZmlyZSB0bwotICAgICAgICAgICAg
ICB0aGUgY29uc29sZS4gVGhpcyBzaG91bGQgYmUgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBjb2Rl
LiBOb3RlIHRoYXQgeW91Ci0gICAgICAgICAgICAgIGNhbiBhbHNvIGVuYWJsZSB0aGlzIGZyb20g
dGhlIGNvbnNvbGUgb3IgdGVtcG9yYXJpbHkuCi0KLSAgICAgICAgICAgICAgQHByb3BlcnR5IExP
R19CSU5ESU5HUwotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEB0eXBl
IEJvb2xlYW4KLSAgICAgICAgICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgICAgICAgICovCi0g
ICAgICAgIEVtYmVyLkxPR19CSU5ESU5HUyA9IGZhbHNlIHx8ICEhRW1iZXIuRU5WLkxPR19CSU5E
SU5HUzsKLQotICAgICAgICB2YXIgSVNfR0xPQkFMID0gL14oW0EtWiRdfChbMC05XVtBLVokXSkp
LzsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92
aWRlZCBwYXRoIGlzIGdsb2JhbCAoZS5nLiwgYE15QXBwLmZvb0NvbnRyb2xsZXIuYmFyYCkKLSAg
ICAgICAgICAgICAgaW5zdGVhZCBvZiBsb2NhbCAoYGZvby5iYXIuYmF6YCkuCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCBpc0dsb2JhbFBhdGgKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAot
ICAgICAgICAgICAgICBAcmV0dXJuIEJvb2xlYW4KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1
bmN0aW9uIGlzR2xvYmFsUGF0aChwYXRoKSB7Ci0gICAgICAgICAgICByZXR1cm4gSVNfR0xPQkFM
LnRlc3QocGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRXaXRoR2xvYmFs
cyhvYmosIHBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXQoaXNHbG9iYWxQYXRoKHBhdGgp
ID8gRW1iZXIubG9va3VwIDogb2JqLCBwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4K
LSAgICAgICAgLy8gQklORElORwotICAgICAgICAvLwotCi0gICAgICAgIGZ1bmN0aW9uIEJpbmRp
bmcodG9QYXRoLCBmcm9tUGF0aCkgewotICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gJ2Z3
ZCc7Ci0gICAgICAgICAgICB0aGlzLl9mcm9tID0gZnJvbVBhdGg7Ci0gICAgICAgICAgICB0aGlz
Ll90byA9IHRvUGF0aDsKLSAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbk1hcCA9IE1hcC5jcmVh
dGUoKTsKLSAgICAgICAgICAgIHRoaXMuX3JlYWR5VG9TeW5jID0gdW5kZWZpbmVkOwotICAgICAg
ICAgICAgdGhpcy5fb25lV2F5ID0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICBAY2xhc3MgQmluZGluZwotICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJl
cgotICAgICAgICAgICAgKi8KLQotICAgICAgICBCaW5kaW5nLnByb3RvdHlwZSA9IHsKLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIGNvcGllcyB0aGUgQmluZGluZyBz
byBpdCBjYW4gYmUgY29ubmVjdGVkIHRvIGFub3RoZXIgb2JqZWN0LgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgY29weQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5C
aW5kaW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb3B5OiBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvcHkgPSBuZXcgQmluZGluZyh0aGlz
Ll90bywgdGhpcy5fZnJvbSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX29uZVdheSkgewot
ICAgICAgICAgICAgICAgICAgICBjb3B5Ll9vbmVXYXkgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gY29weTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIENPTkZJRwotICAgICAgICAgICAgLy8KLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBzZXQgYGZyb21gIHBy
b3BlcnR5IHBhdGggdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4gSXQgd2lsbCBub3QKLSAgICAgICAg
ICAgICAgICAgICAgYXR0ZW1wdCB0byByZXNvbHZlIHRoaXMgcHJvcGVydHkgcGF0aCB0byBhbiBh
Y3R1YWwgb2JqZWN0IHVudGlsIHlvdQotICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRoZSBi
aW5kaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBiaW5kaW5nIHdpbGwgc2VhcmNoIGZv
ciB0aGUgcHJvcGVydHkgcGF0aCBzdGFydGluZyBhdCB0aGUgcm9vdCBvYmplY3QKLSAgICAgICAg
ICAgICAgICAgICAgeW91IHBhc3Mgd2hlbiB5b3UgYGNvbm5lY3QoKWAgdGhlIGJpbmRpbmcuIEl0
IGZvbGxvd3MgdGhlIHNhbWUgcnVsZXMgYXMKLSAgICAgICAgICAgICAgICAgICAgYGdldCgpYCAt
IHNlZSB0aGF0IG1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGZyb20KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBh
dGggdGhlIHByb3BlcnR5IHBhdGggdG8gY29ubmVjdCB0bwotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtFbWJlci5CaW5kaW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBmcm9tOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZnJv
bSA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIHNldCB0aGUg
YHRvYCBwcm9wZXJ0eSBwYXRoIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIEl0IHdpbGwgbm90Ci0g
ICAgICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gcmVzb2x2ZSB0aGlzIHByb3BlcnR5IHBhdGgg
dG8gYW4gYWN0dWFsIG9iamVjdCB1bnRpbCB5b3UKLSAgICAgICAgICAgICAgICAgICAgY29ubmVj
dCB0aGUgYmluZGluZy4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgYmluZGluZyB3aWxsIHNl
YXJjaCBmb3IgdGhlIHByb3BlcnR5IHBhdGggc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2JqZWN0Ci0g
ICAgICAgICAgICAgICAgICAgIHlvdSBwYXNzIHdoZW4geW91IGBjb25uZWN0KClgIHRoZSBiaW5k
aW5nLiBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzCi0gICAgICAgICAgICAgICAgICAgIGBn
ZXQoKWAgLSBzZWUgdGhhdCBtZXRob2QgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCB0bwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z3xUdXBsZX0gcGF0aCBBIHByb3BlcnR5IHBhdGggb3IgdHVwbGUKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYHRoaXNgCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgdG86IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl90
byA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgYmlu
ZGluZyBhcyBvbmUgd2F5LiBBIG9uZS13YXkgYmluZGluZyB3aWxsIHJlbGF5IGNoYW5nZXMKLSAg
ICAgICAgICAgICAgICAgICAgb24gdGhlIGBmcm9tYCBzaWRlIHRvIHRoZSBgdG9gIHNpZGUsIGJ1
dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgbWVh
bnMgdGhhdCBpZiB5b3UgY2hhbmdlIHRoZSBgdG9gIHNpZGUgZGlyZWN0bHksIHRoZSBgZnJvbWAg
c2lkZSBtYXkgaGF2ZQotICAgICAgICAgICAgICAgICAgICBhIGRpZmZlcmVudCB2YWx1ZS4KLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9uZVdheQotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtFbWJlci5CaW5kaW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBvbmVXYXk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuX29uZVdh
eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB0b1N0cmluZwot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlv
biBvZiBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdG9TdHJpbmc6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBvbmVXYXkgPSB0aGlzLl9vbmVXYXkg
PyAnW29uZVdheV0nIDogJyc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFbWJlci5CaW5kaW5n
PCIgKyBndWlkRm9yKHRoaXMpICsgIj4oIiArIHRoaXMuX2Zyb20gKyAiIC0+ICIgKyB0aGlzLl90
byArICIpIiArIG9uZVdheTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAg
ICAgICAgICAgIC8vIENPTk5FQ1QgQU5EIFNZTkMKLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBdHRlbXB0cyB0byBjb25uZWN0IHRoaXMgYmlu
ZGluZyBpbnN0YW5jZSBzbyB0aGF0IGl0IGNhbiByZWNlaXZlIGFuZCByZWxheQotICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VzLiBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBp
ZiB5b3UgaGF2ZSBub3Qgc2V0IHRoZQotICAgICAgICAgICAgICAgICAgICBmcm9tL3RvIHByb3Bl
cnRpZXMgeWV0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29ubmVjdAotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSByb290IG9iamVjdCBmb3IgdGhp
cyBiaW5kaW5nLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5CaW5kaW5nfSBg
dGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb25uZWN0OiBmdW5jdGlv
bihvYmopIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ011c3QgcGFzcyBhIHZhbGlk
IG9iamVjdCB0byBFbWJlci5CaW5kaW5nLmNvbm5lY3QoKScsICEhb2JqKTsKLQotICAgICAgICAg
ICAgICAgIHZhciBmcm9tUGF0aCA9IHRoaXMuX2Zyb20sIHRvUGF0aCA9IHRoaXMuX3RvOwotICAg
ICAgICAgICAgICAgIHRyeVNldChvYmosIHRvUGF0aCwgZ2V0V2l0aEdsb2JhbHMob2JqLCBmcm9t
UGF0aCkpOwotCi0gICAgICAgICAgICAgICAgLy8gYWRkIGFuIG9ic2VydmVyIG9uIHRoZSBvYmpl
Y3QgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgYmluZGluZyBzaG91bGQgYmUgdXBkYXRlZAotICAg
ICAgICAgICAgICAgIGFkZE9ic2VydmVyKG9iaiwgZnJvbVBhdGgsIHRoaXMsIHRoaXMuZnJvbURp
ZENoYW5nZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB0aGUgYmluZGluZyBpcyBhIHR3by13
YXkgYmluZGluZywgYWxzbyBzZXQgdXAgYW4gb2JzZXJ2ZXIgb24gdGhlIHRhcmdldAotICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5fb25lV2F5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE9i
c2VydmVyKG9iaiwgdG9QYXRoLCB0aGlzLCB0aGlzLnRvRGlkQ2hhbmdlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVRvU3luYyA9IHRydWU7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBEaXNjb25uZWN0cyB0aGUgYmluZGluZyBpbnN0YW5j
ZS4gQ2hhbmdlcyB3aWxsIG5vIGxvbmdlciBiZSByZWxheWVkLiBZb3UKLSAgICAgICAgICAgICAg
ICAgICAgd2lsbCBub3QgdXN1YWxseSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBkaXNjb25uZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBvYmogVGhlIHJvb3Qgb2JqZWN0IHlvdSBwYXNzZWQgd2hlbiBjb25uZWN0
aW5nIHRoZSBiaW5kaW5nLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5CaW5k
aW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkaXNjb25uZWN0
OiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ011c3QgcGFz
cyBhIHZhbGlkIG9iamVjdCB0byBFbWJlci5CaW5kaW5nLmRpc2Nvbm5lY3QoKScsICEhb2JqKTsK
LQotICAgICAgICAgICAgICAgIHZhciB0d29XYXkgPSAhdGhpcy5fb25lV2F5OwotCi0gICAgICAg
ICAgICAgICAgLy8gcmVtb3ZlIGFuIG9ic2VydmVyIG9uIHRoZSBvYmplY3Qgc28gd2UncmUgbm8g
bG9uZ2VyIG5vdGlmaWVkIG9mCi0gICAgICAgICAgICAgICAgLy8gY2hhbmdlcyB0aGF0IHNob3Vs
ZCB1cGRhdGUgYmluZGluZ3MuCi0gICAgICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIob2JqLCB0
aGlzLl9mcm9tLCB0aGlzLCB0aGlzLmZyb21EaWRDaGFuZ2UpOwotCi0gICAgICAgICAgICAgICAg
Ly8gaWYgdGhlIGJpbmRpbmcgaXMgdHdvLXdheSwgcmVtb3ZlIHRoZSBvYnNlcnZlciBmcm9tIHRo
ZSB0YXJnZXQgYXMgd2VsbAotICAgICAgICAgICAgICAgIGlmICh0d29XYXkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIob2JqLCB0aGlzLl90bywgdGhpcywgdGhpcy50b0Rp
ZENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVh
ZHlUb1N5bmMgPSBmYWxzZTsgLy8gZGlzYWJsZSBzY2hlZHVsZWQgc3luY3MuLi4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4K
LSAgICAgICAgICAgIC8vIFBSSVZBVEUKLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIC8q
IGNhbGxlZCB3aGVuIHRoZSBmcm9tIHNpZGUgY2hhbmdlcyAqLwotICAgICAgICAgICAgZnJvbURp
ZENoYW5nZTogZnVuY3Rpb24odGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1
bGVTeW5jKHRhcmdldCwgJ2Z3ZCcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyog
Y2FsbGVkIHdoZW4gdGhlIHRvIHNpZGUgY2hhbmdlcyAqLwotICAgICAgICAgICAgdG9EaWRDaGFu
Z2U6IGZ1bmN0aW9uKHRhcmdldCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlU3lu
Yyh0YXJnZXQsICdiYWNrJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfc2NoZWR1
bGVTeW5jOiBmdW5jdGlvbihvYmosIGRpcikgewotICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rp
b25NYXAgPSB0aGlzLl9kaXJlY3Rpb25NYXA7Ci0gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5n
RGlyID0gZGlyZWN0aW9uTWFwLmdldChvYmopOwotCi0gICAgICAgICAgICAgICAgLy8gaWYgd2Ug
aGF2ZW4ndCBzY2hlZHVsZWQgdGhlIGJpbmRpbmcgeWV0LCBzY2hlZHVsZSBpdAotICAgICAgICAg
ICAgICAgIGlmICghZXhpc3RpbmdEaXIpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuLnNjaGVk
dWxlKCdzeW5jJywgdGhpcywgdGhpcy5fc3luYywgb2JqKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0aW9uTWFwLnNldChvYmosIGRpcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gSWYgYm90aCBhICdiYWNrJyBhbmQgJ2Z3ZCcgc3luYyBoYXZlIGJlZW4gc2No
ZWR1bGVkIG9uIHRoZSBzYW1lIG9iamVjdCwKLSAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRv
IGEgJ2Z3ZCcgc3luYyBzbyB0aGF0IGl0IHJlbWFpbnMgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAg
ICAgICAgICBpZiAoZXhpc3RpbmdEaXIgPT09ICdiYWNrJyAmJiBkaXIgPT09ICdmd2QnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbk1hcC5zZXQob2JqLCAnZndkJyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3N5bmM6IGZ1bmN0aW9u
KG9iaikgewotICAgICAgICAgICAgICAgIHZhciBsb2cgPSBFbWJlci5MT0dfQklORElOR1M7Ci0K
LSAgICAgICAgICAgICAgICAvLyBkb24ndCBzeW5jaHJvbml6ZSBkZXN0cm95ZWQgb2JqZWN0cyBv
ciBkaXNjb25uZWN0ZWQgYmluZGluZ3MKLSAgICAgICAgICAgICAgICBpZiAob2JqLmlzRGVzdHJv
eWVkIHx8ICF0aGlzLl9yZWFkeVRvU3luYykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBkaXJlY3Rp
b24gb2YgdGhlIGJpbmRpbmcgZm9yIHRoZSBvYmplY3Qgd2UgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gc3luY2hyb25pemluZyBmcm9tCi0gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9
IHRoaXMuX2RpcmVjdGlvbk1hcDsKLSAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGly
ZWN0aW9uTWFwLmdldChvYmopOwotCi0gICAgICAgICAgICAgICAgdmFyIGZyb21QYXRoID0gdGhp
cy5fZnJvbSwgdG9QYXRoID0gdGhpcy5fdG87Ci0KLSAgICAgICAgICAgICAgICBkaXJlY3Rpb25N
YXAucmVtb3ZlKG9iaik7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBzeW5jaHJvbml6
aW5nIGZyb20gdGhlIHJlbW90ZSBvYmplY3QuLi4KLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uID09PSAnZndkJykgewotICAgICAgICAgICAgICAgICAgICB2YXIgZnJvbVZhbHVlID0gZ2V0
V2l0aEdsb2JhbHMob2JqLCB0aGlzLl9mcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxv
ZykgewotICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmxvZygnICcsIHRoaXMu
dG9TdHJpbmcoKSwgJy0+JywgZnJvbVZhbHVlLCBvYmopOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vbmVXYXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeVNldChvYmosIHRvUGF0aCwgZnJvbVZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9zdXNwZW5kT2JzZXJ2ZXIo
b2JqLCB0b1BhdGgsIHRoaXMsIHRoaXMudG9EaWRDaGFuZ2UsIGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnlTZXQob2JqLCB0b1BhdGgsIGZyb21WYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBzeW5jaHJvbml6aW5nICp0byogdGhlIHJlbW90ZSBv
YmplY3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2JhY2snKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0b1ZhbHVlID0gZ2V0KG9iaiwgdGhpcy5fdG8pOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobG9nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBF
bWJlci5Mb2dnZXIubG9nKCcgJywgdGhpcy50b1N0cmluZygpLCAnPC0nLCB0b1ZhbHVlLCBvYmop
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF9zdXNwZW5kT2Jz
ZXJ2ZXIob2JqLCBmcm9tUGF0aCwgdGhpcywgdGhpcy5mcm9tRGlkQ2hhbmdlLCBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlTZXQoaXNHbG9iYWxQYXRoKGZyb21QYXRo
KSA/IEVtYmVyLmxvb2t1cCA6IG9iaiwgZnJvbVBhdGgsIHRvVmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
fTsKLQotICAgICAgICBmdW5jdGlvbiBtaXhpblByb3BlcnRpZXModG8sIGZyb20pIHsKLSAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb20u
aGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJv
bVtrZXldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIG1peGluUHJvcGVydGllcyhCaW5kaW5nLCB7Ci0KLSAgICAgICAgICAgIC8qCi0gICAg
ICAgICAgICAgICAgICAgIFNlZSBgRW1iZXIuQmluZGluZy5mcm9tYC4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGZyb20KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZyb206IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBDID0gdGhpcywgYmluZGluZyA9IG5ldyBDKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJpbmRpbmcuZnJvbS5hcHBseShiaW5kaW5nLCBhcmd1bWVudHMpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgU2VlIGBFbWJlci5C
aW5kaW5nLnRvYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRvCi0gICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0bzog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIEMgPSB0aGlzLCBiaW5kaW5nID0gbmV3
IEMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZy50by5hcHBseShiaW5kaW5nLCBh
cmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIENyZWF0ZXMgYSBuZXcgQmluZGluZyBpbnN0YW5jZSBhbmQgbWFrZXMgaXQgYXBw
bHkgaW4gYSBzaW5nbGUgZGlyZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICBBIG9uZS13YXkg
YmluZGluZyB3aWxsIHJlbGF5IGNoYW5nZXMgb24gdGhlIGBmcm9tYCBzaWRlIG9iamVjdCAoc3Vw
cGxpZWQKLSAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGBmcm9tYCBhcmd1bWVudCkgdGhlIGB0
b2Agc2lkZSwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgICAgICAgICAgICAgICAg
ICAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhlICJ0byIgc2lkZSBkaXJlY3RseSwg
dGhlICJmcm9tIiBzaWRlIG1heSBoYXZlCi0gICAgICAgICAgICAgICAgICAgIGEgZGlmZmVyZW50
IHZhbHVlLgotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBgQmluZGluZy5vbmVXYXlgLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb25lV2F5Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBmcm9tIGZyb20gcGF0aC4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtCb29sZWFufSBbZmxhZ10gKE9wdGlvbmFsKSBwYXNzaW5nIG5vdGhpbmcgaGVyZSB3aWxsIG1h
a2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgYmluZGluZyBgb25lV2F5YC4gWW91IGNhbiBp
bnN0ZWFkIHBhc3MgYGZhbHNlYCB0byBkaXNhYmxlIGBvbmVXYXlgLCBtYWtpbmcgdGhlCi0gICAg
ICAgICAgICAgICAgICAgICAgYmluZGluZyB0d28gd2F5IGFnYWluLgotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5CaW5kaW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBvbmVXYXk6IGZ1bmN0aW9uKGZyb20sIGZsYWcpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgQyA9IHRoaXMsIGJpbmRpbmcgPSBuZXcgQyhudWxsLCBmcm9tKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYmluZGluZy5vbmVXYXkoZmxhZyk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfSk7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbiBgRW1iZXIuQmluZGluZ2Ag
Y29ubmVjdHMgdGhlIHByb3BlcnRpZXMgb2YgdHdvIG9iamVjdHMgc28gdGhhdCB3aGVuZXZlcgot
ICAgICAgICAgICAgICB0aGUgdmFsdWUgb2Ygb25lIHByb3BlcnR5IGNoYW5nZXMsIHRoZSBvdGhl
ciBwcm9wZXJ0eSB3aWxsIGJlIGNoYW5nZWQgYWxzby4KLQotICAgICAgICAgICAgICAjIyBBdXRv
bWF0aWMgQ3JlYXRpb24gb2YgQmluZGluZ3Mgd2l0aCBgL14qQmluZGluZy9gLW5hbWVkIFByb3Bl
cnRpZXMKLQotICAgICAgICAgICAgICBZb3UgZG8gbm90IHVzdWFsbHkgY3JlYXRlIEJpbmRpbmcg
b2JqZWN0cyBkaXJlY3RseSBidXQgaW5zdGVhZCBkZXNjcmliZQotICAgICAgICAgICAgICBiaW5k
aW5ncyBpbiB5b3VyIGNsYXNzIG9yIG9iamVjdCBkZWZpbml0aW9uIHVzaW5nIGF1dG9tYXRpYyBi
aW5kaW5nCi0gICAgICAgICAgICAgIGRldGVjdGlvbi4KLQotICAgICAgICAgICAgICBQcm9wZXJ0
aWVzIGVuZGluZyBpbiBhIGBCaW5kaW5nYCBzdWZmaXggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYEVt
YmVyLkJpbmRpbmdgCi0gICAgICAgICAgICAgIGluc3RhbmNlcy4gVGhlIHZhbHVlIG9mIHRoaXMg
cHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHBhdGgKLSAgICAgICAg
ICAgICAgdG8gYW5vdGhlciBvYmplY3Qgb3IgYSBjdXN0b20gYmluZGluZyBpbnN0YW5jZWQgY3Jl
YXRlZCB1c2luZyBCaW5kaW5nIGhlbHBlcnMKLSAgICAgICAgICAgICAgKHNlZSAiT25lIFdheSBC
aW5kaW5ncyIpOgotCi0gICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICB2YWx1ZUJpbmRp
bmc6ICJNeUFwcC5zb21lQ29udHJvbGxlci50aXRsZSIKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgVGhpcyB3aWxsIGNyZWF0ZSBhIGJpbmRpbmcgZnJvbSBgTXlBcHAuc29tZUNv
bnRyb2xsZXIudGl0bGVgIHRvIHRoZSBgdmFsdWVgCi0gICAgICAgICAgICAgIHByb3BlcnR5IG9m
IHlvdXIgb2JqZWN0IGluc3RhbmNlIGF1dG9tYXRpY2FsbHkuIE5vdyB0aGUgdHdvIHZhbHVlcyB3
aWxsIGJlCi0gICAgICAgICAgICAgIGtlcHQgaW4gc3luYy4KLQotICAgICAgICAgICAgICAjIyBP
bmUgV2F5IEJpbmRpbmdzCi0KLSAgICAgICAgICAgICAgT25lIGVzcGVjaWFsbHkgdXNlZnVsIGJp
bmRpbmcgY3VzdG9taXphdGlvbiB5b3UgY2FuIHVzZSBpcyB0aGUgYG9uZVdheSgpYAotICAgICAg
ICAgICAgICBoZWxwZXIuIFRoaXMgaGVscGVyIHRlbGxzIEVtYmVyIHRoYXQgeW91IGFyZSBvbmx5
IGludGVyZXN0ZWQgaW4KLSAgICAgICAgICAgICAgcmVjZWl2aW5nIGNoYW5nZXMgb24gdGhlIG9i
amVjdCB5b3UgYXJlIGJpbmRpbmcgZnJvbS4gRm9yIGV4YW1wbGUsIGlmIHlvdQotICAgICAgICAg
ICAgICBhcmUgYmluZGluZyB0byBhIHByZWZlcmVuY2UgYW5kIHlvdSB3YW50IHRvIGJlIG5vdGlm
aWVkIGlmIHRoZSBwcmVmZXJlbmNlCi0gICAgICAgICAgICAgIGhhcyBjaGFuZ2VkLCBidXQgeW91
ciBvYmplY3Qgd2lsbCBub3QgYmUgY2hhbmdpbmcgdGhlIHByZWZlcmVuY2UgaXRzZWxmLCB5b3UK
LSAgICAgICAgICAgICAgY291bGQgZG86Ci0KLSAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAg
ICAgIGJpZ1RpdGxlc0JpbmRpbmc6IEVtYmVyLkJpbmRpbmcub25lV2F5KCJNeUFwcC5wcmVmZXJl
bmNlc0NvbnRyb2xsZXIuYmlnVGl0bGVzIikKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgVGhpcyB3YXkgaWYgdGhlIHZhbHVlIG9mIGBNeUFwcC5wcmVmZXJlbmNlc0NvbnRyb2xs
ZXIuYmlnVGl0bGVzYCBjaGFuZ2VzIHRoZQotICAgICAgICAgICAgICBgYmlnVGl0bGVzYCBwcm9w
ZXJ0eSBvZiB5b3VyIG9iamVjdCB3aWxsIGNoYW5nZSBhbHNvLiBIb3dldmVyLCBpZiB5b3UKLSAg
ICAgICAgICAgICAgY2hhbmdlIHRoZSB2YWx1ZSBvZiB5b3VyIGBiaWdUaXRsZXNgIHByb3BlcnR5
LCBpdCB3aWxsIG5vdCB1cGRhdGUgdGhlCi0gICAgICAgICAgICAgIGBwcmVmZXJlbmNlc0NvbnRy
b2xsZXJgLgotCi0gICAgICAgICAgICAgIE9uZSB3YXkgYmluZGluZ3MgYXJlIGFsbW9zdCB0d2lj
ZSBhcyBmYXN0IHRvIHNldHVwIGFuZCB0d2ljZSBhcyBmYXN0IHRvCi0gICAgICAgICAgICAgIGV4
ZWN1dGUgYmVjYXVzZSB0aGUgYmluZGluZyBvbmx5IGhhcyB0byB3b3JyeSBhYm91dCBjaGFuZ2Vz
IHRvIG9uZSBzaWRlLgotCi0gICAgICAgICAgICAgIFlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcg
b25lIHdheSBiaW5kaW5ncyBhbnl0aW1lIHlvdSBoYXZlIGFuIG9iamVjdCB0aGF0Ci0gICAgICAg
ICAgICAgIG1heSBiZSBjcmVhdGVkIGZyZXF1ZW50bHkgYW5kIHlvdSBkbyBub3QgaW50ZW5kIHRv
IGNoYW5nZSBhIHByb3BlcnR5OyBvbmx5Ci0gICAgICAgICAgICAgIHRvIG1vbml0b3IgaXQgZm9y
IGNoYW5nZXMgKHN1Y2ggYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpLgotCi0gICAgICAgICAgICAg
ICMjIEFkZGluZyBCaW5kaW5ncyBNYW51YWxseQotCi0gICAgICAgICAgICAgIEFsbCBvZiB0aGUg
ZXhhbXBsZXMgYWJvdmUgc2hvdyB5b3UgaG93IHRvIGNvbmZpZ3VyZSBhIGN1c3RvbSBiaW5kaW5n
LCBidXQgdGhlCi0gICAgICAgICAgICAgIHJlc3VsdCBvZiB0aGVzZSBjdXN0b21pemF0aW9ucyB3
aWxsIGJlIGEgYmluZGluZyB0ZW1wbGF0ZSwgbm90IGEgZnVsbHkgYWN0aXZlCi0gICAgICAgICAg
ICAgIEJpbmRpbmcgaW5zdGFuY2UuIFRoZSBiaW5kaW5nIHdpbGwgYWN0dWFsbHkgYmVjb21lIGFj
dGl2ZSBvbmx5IHdoZW4geW91Ci0gICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBvYmplY3Qg
dGhlIGJpbmRpbmcgYmVsb25ncyB0by4gSXQgaXMgdXNlZnVsIGhvd2V2ZXIsIHRvCi0gICAgICAg
ICAgICAgIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseSBoYXBwZW5zIHdoZW4gdGhlIGJpbmRpbmcg
aXMgYWN0aXZhdGVkLgotCi0gICAgICAgICAgICAgIEZvciBhIGJpbmRpbmcgdG8gZnVuY3Rpb24g
aXQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgYGZyb21gIHByb3BlcnR5IGFuZCBhIGB0b2AKLSAgICAg
ICAgICAgICAgcHJvcGVydHkuIFRoZSBgZnJvbWAgcHJvcGVydHkgcGF0aCBwb2ludHMgdG8gdGhl
IG9iamVjdC9rZXkgdGhhdCB5b3Ugd2FudCB0bwotICAgICAgICAgICAgICBiaW5kIGZyb20gd2hp
bGUgdGhlIGB0b2AgcGF0aCBwb2ludHMgdG8gdGhlIG9iamVjdC9rZXkgeW91IHdhbnQgdG8gYmlu
ZCB0by4KLQotICAgICAgICAgICAgICBXaGVuIHlvdSBkZWZpbmUgYSBjdXN0b20gYmluZGluZywg
eW91IGFyZSB1c3VhbGx5IGRlc2NyaWJpbmcgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgIHlv
dSB3YW50IHRvIGJpbmQgZnJvbSAoc3VjaCBhcyBgTXlBcHAuc29tZUNvbnRyb2xsZXIudmFsdWVg
IGluIHRoZSBleGFtcGxlcwotICAgICAgICAgICAgICBhYm92ZSkuIFdoZW4geW91ciBvYmplY3Qg
aXMgY3JlYXRlZCwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFzc2lnbiB0aGUgdmFsdWUKLSAgICAg
ICAgICAgICAgeW91IHdhbnQgdG8gYmluZCBgdG9gIGJhc2VkIG9uIHRoZSBuYW1lIG9mIHlvdXIg
YmluZGluZyBrZXkuIEluIHRoZQotICAgICAgICAgICAgICBleGFtcGxlcyBhYm92ZSwgZHVyaW5n
IGluaXQsIEVtYmVyIG9iamVjdHMgd2lsbCBlZmZlY3RpdmVseSBjYWxsCi0gICAgICAgICAgICAg
IHNvbWV0aGluZyBsaWtlIHRoaXMgb24geW91ciBiaW5kaW5nOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgYmluZGluZyA9IEVtYmVyLkJpbmRpbmcuZnJvbSh0
aGlzLnZhbHVlQmluZGluZykudG8oInZhbHVlIik7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIFRoaXMgY3JlYXRlcyBhIG5ldyBiaW5kaW5nIGluc3RhbmNlIGJhc2VkIG9uIHRo
ZSB0ZW1wbGF0ZSB5b3UgcHJvdmlkZSwgYW5kCi0gICAgICAgICAgICAgIHNldHMgdGhlIHRvIHBh
dGggdG8gdGhlIGB2YWx1ZWAgcHJvcGVydHkgb2YgdGhlIG5ldyBvYmplY3QuIE5vdyB0aGF0IHRo
ZQotICAgICAgICAgICAgICBiaW5kaW5nIGlzIGZ1bGx5IGNvbmZpZ3VyZWQgd2l0aCBhIGBmcm9t
YCBhbmQgYSBgdG9gLCBpdCBzaW1wbHkgbmVlZHMgdG8gYmUKLSAgICAgICAgICAgICAgY29ubmVj
dGVkIHRvIGJlY29tZSBhY3RpdmUuIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHRoZSBgY29ubmVjdCgp
YCBtZXRob2Q6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBi
aW5kaW5nLmNvbm5lY3QodGhpcyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IE5vdGUgdGhhdCB3aGVuIHlvdSBjb25uZWN0IGEgYmluZGluZyB5b3UgcGFzcyB0aGUgb2JqZWN0
IHlvdSB3YW50IGl0IHRvIGJlCi0gICAgICAgICAgICAgIGNvbm5lY3RlZCB0by4gVGhpcyBvYmpl
Y3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSByb290IGZvciBib3RoIHRoZSBmcm9tIGFuZAotICAgICAg
ICAgICAgICB0byBzaWRlIG9mIHRoZSBiaW5kaW5nIHdoZW4gaW5zcGVjdGluZyByZWxhdGl2ZSBw
YXRocy4gVGhpcyBhbGxvd3MgdGhlCi0gICAgICAgICAgICAgIGJpbmRpbmcgdG8gYmUgYXV0b21h
dGljYWxseSBpbmhlcml0ZWQgYnkgc3ViY2xhc3NlZCBvYmplY3RzIGFzIHdlbGwuCi0KLSAgICAg
ICAgICAgICAgTm93IHRoYXQgdGhlIGJpbmRpbmcgaXMgY29ubmVjdGVkLCBpdCB3aWxsIG9ic2Vy
dmUgYm90aCB0aGUgZnJvbSBhbmQgdG8gc2lkZQotICAgICAgICAgICAgICBhbmQgcmVsYXkgY2hh
bmdlcy4KLQotICAgICAgICAgICAgICBJZiB5b3UgZXZlciBuZWVkZWQgdG8gZG8gc28gKHlvdSBh
bG1vc3QgbmV2ZXIgd2lsbCwgYnV0IGl0IGlzIHVzZWZ1bCB0bwotICAgICAgICAgICAgICB1bmRl
cnN0YW5kIHRoaXMgYW55d2F5KSwgeW91IGNvdWxkIG1hbnVhbGx5IGNyZWF0ZSBhbiBhY3RpdmUg
YmluZGluZyBieQotICAgICAgICAgICAgICB1c2luZyB0aGUgYEVtYmVyLmJpbmQoKWAgaGVscGVy
IG1ldGhvZC4gKFRoaXMgaXMgdGhlIHNhbWUgbWV0aG9kIHVzZWQgYnkKLSAgICAgICAgICAgICAg
dG8gc2V0dXAgeW91ciBiaW5kaW5ncyBvbiBvYmplY3RzKToKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmJpbmQoTXlBcHAuYW5vdGhlck9iamVjdCwg
InZhbHVlIiwgIk15QXBwLnNvbWVDb250cm9sbGVyLnZhbHVlIik7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEJvdGggb2YgdGhlc2UgY29kZSBmcmFnbWVudHMgaGF2ZSB0aGUg
c2FtZSBlZmZlY3QgYXMgZG9pbmcgdGhlIG1vc3QgZnJpZW5kbHkKLSAgICAgICAgICAgICAgZm9y
bSBvZiBiaW5kaW5nIGNyZWF0aW9uIGxpa2Ugc286Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICBNeUFwcC5hbm90aGVyT2JqZWN0ID0gRW1iZXIuT2JqZWN0LmNy
ZWF0ZSh7Ci0gICAgICAgICAgICAgICAgdmFsdWVCaW5kaW5nOiAiTXlBcHAuc29tZUNvbnRyb2xs
ZXIudmFsdWUiLAotCi0gICAgICAgICAgICAgICAgLy8gT1RIRVIgQ09ERSBGT1IgVEhJUyBPQkpF
Q1QuLi4KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIEVtYmVyJ3MgYnVpbHQgaW4gYmluZGluZyBjcmVhdGlvbiBtZXRob2QgbWFrZXMgaXQgZWFz
eSB0byBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICAgIGNyZWF0ZSBiaW5kaW5ncyBmb3IgeW91
LiBZb3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIGhpZ2hlc3QtbGV2ZWwgQVBJcwotICAgICAgICAg
ICAgICBhdmFpbGFibGUsIGV2ZW4gaWYgeW91IHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIHVuZGVy
bmVhdGguCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEJpbmRpbmcKLSAgICAgICAgICAgICAgQG5h
bWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc2luY2UgRW1iZXIgMC45Ci0gICAgICAgICAg
ICAqLwotICAgICAgICAvLyBFbWJlci5CaW5kaW5nID0gQmluZGluZzsgRVM2VE9ETzogd2hlcmUg
dG8gcHV0IHRoaXM/Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgR2xvYmFsIGhlbHBl
ciBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcuIEp1c3QgcGFzcyB0aGUgcm9vdCBvYmpl
Y3QKLSAgICAgICAgICAgICAgYWxvbmcgd2l0aCBhIGB0b2AgYW5kIGBmcm9tYCBwYXRoIHRvIGNy
ZWF0ZSBhbmQgY29ubmVjdCB0aGUgYmluZGluZy4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGJp
bmQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gb2JqIFRoZSByb290IG9iamVjdCBvZiB0aGUgdHJhbnNmb3JtLgotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gdG8gVGhlIHBhdGggdG8gdGhlICd0bycgc2lkZSBvZiB0aGUgYmluZGlu
Zy4KLSAgICAgICAgICAgICAgICBNdXN0IGJlIHJlbGF0aXZlIHRvIG9iai4KLSAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGZyb20gVGhlIHBhdGggdG8gdGhlICdmcm9tJyBzaWRlIG9mIHRo
ZSBiaW5kaW5nLgotICAgICAgICAgICAgICAgIE11c3QgYmUgcmVsYXRpdmUgdG8gb2JqIG9yIGEg
Z2xvYmFsIHBhdGguCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGJpbmRp
bmcgaW5zdGFuY2UKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGJpbmQob2JqLCB0
bywgZnJvbSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nKHRvLCBmcm9tKS5jb25u
ZWN0KG9iaik7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5iaW5kID0gYmluZDsg
LyoqCi0gICAgICAgICAgICAgIEBtZXRob2Qgb25lV2F5Ci0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgcm9vdCBvYmplY3Qgb2Yg
dGhlIHRyYW5zZm9ybS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHRvIFRoZSBwYXRo
IHRvIHRoZSAndG8nIHNpZGUgb2YgdGhlIGJpbmRpbmcuCi0gICAgICAgICAgICAgICAgTXVzdCBi
ZSByZWxhdGl2ZSB0byBvYmouCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmcm9tIFRo
ZSBwYXRoIHRvIHRoZSAnZnJvbScgc2lkZSBvZiB0aGUgYmluZGluZy4KLSAgICAgICAgICAgICAg
ICBNdXN0IGJlIHJlbGF0aXZlIHRvIG9iaiBvciBhIGdsb2JhbCBwYXRoLgotICAgICAgICAgICAg
ICBAcmV0dXJuIHtFbWJlci5CaW5kaW5nfSBiaW5kaW5nIGluc3RhbmNlCi0gICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBvbmVXYXkob2JqLCB0bywgZnJvbSkgewotICAgICAgICAgICAg
cmV0dXJuIG5ldyBCaW5kaW5nKHRvLCBmcm9tKS5vbmVXYXkoKS5jb25uZWN0KG9iaik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5vbmVXYXkgPSBvbmVXYXk7Ci0gICAgICAgIF9f
ZXhwb3J0c19fLkJpbmRpbmcgPSBCaW5kaW5nOwotICAgICAgICBfX2V4cG9ydHNfXy5pc0dsb2Jh
bFBhdGggPSBpc0dsb2JhbFBhdGg7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9j
aGFpbnMiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9n
ZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXItbWV0
YWwvd2F0Y2hfa2V5IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVw
ZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gd2Fy
biwgYXNzZXJ0LCBldGM7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0Owot
ICAgICAgICB2YXIgbm9ybWFsaXplVHVwbGUgPSBfX2RlcGVuZGVuY3kyX18ubm9ybWFsaXplVHVw
bGU7Ci0gICAgICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5M19fLm1ldGE7Ci0gICAgICAgIHZh
ciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5jeTNfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFyIGZvckVh
Y2ggPSBfX2RlcGVuZGVuY3k0X18uZm9yRWFjaDsKLSAgICAgICAgdmFyIHdhdGNoS2V5ID0gX19k
ZXBlbmRlbmN5NV9fLndhdGNoS2V5OwotICAgICAgICB2YXIgdW53YXRjaEtleSA9IF9fZGVwZW5k
ZW5jeTVfXy51bndhdGNoS2V5OwotCi0gICAgICAgIHZhciBtZXRhRm9yID0gbWV0YSwKLSAgICAg
ICAgd2FybiA9IEVtYmVyLndhcm4sCi0gICAgICAgIEZJUlNUX0tFWSA9IC9eKFteXC5dKykvOwot
Ci0gICAgICAgIGZ1bmN0aW9uIGZpcnN0S2V5KHBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBw
YXRoLm1hdGNoKEZJUlNUX0tFWSlbMF07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcGVuZGlu
Z1F1ZXVlID0gW107Ci0KLSAgICAgICAgLy8gYXR0ZW1wdHMgdG8gYWRkIHRoZSBwZW5kaW5nUXVl
dWUgY2hhaW5zIGFnYWluLiBJZiBzb21lIG9mIHRoZW0gZW5kIHVwCi0gICAgICAgIC8vIGJhY2sg
aW4gdGhlIHF1ZXVlIGFuZCByZXNjaGVkdWxlIGlzIHRydWUsIHNjaGVkdWxlcyBhIHRpbWVvdXQg
dG8gdHJ5Ci0gICAgICAgIC8vIGFnYWluLgotICAgICAgICBmdW5jdGlvbiBmbHVzaFBlbmRpbmdD
aGFpbnMoKSB7Ci0gICAgICAgICAgICBpZiAocGVuZGluZ1F1ZXVlLmxlbmd0aCA9PT0gMCkgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIG5v
dGhpbmcgdG8gZG8KLQotICAgICAgICAgICAgdmFyIHF1ZXVlID0gcGVuZGluZ1F1ZXVlOwotICAg
ICAgICAgICAgcGVuZGluZ1F1ZXVlID0gW107Ci0KLSAgICAgICAgICAgIGZvckVhY2guY2FsbChx
dWV1ZSwgZnVuY3Rpb24ocSkgewotICAgICAgICAgICAgICAgIHFbMF0uYWRkKHFbMV0pOwotICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHdhcm4oJ1dhdGNoaW5nIGFuIHVuZGVmaW5lZCBn
bG9iYWwsIEVtYmVyIGV4cGVjdHMgd2F0Y2hlZCBnbG9iYWxzIHRvIGJlIHNldHVwIGJ5IHRoZSB0
aW1lIHRoZSBydW4gbG9vcCBpcyBmbHVzaGVkLCBjaGVjayBmb3IgdHlwb3MnLCBwZW5kaW5nUXVl
dWUubGVuZ3RoID09PSAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmZsdXNo
UGVuZGluZ0NoYWlucyA9IGZsdXNoUGVuZGluZ0NoYWluczsKLSAgICAgICAgZnVuY3Rpb24gYWRk
Q2hhaW5XYXRjaGVyKG9iaiwga2V5TmFtZSwgbm9kZSkgewotICAgICAgICAgICAgaWYgKCFvYmog
fHwgKCdvYmplY3QnICE9PSB0eXBlb2Ygb2JqKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KLQotICAgICAgICAg
ICAgdmFyIG0gPSBtZXRhRm9yKG9iaiksIG5vZGVzID0gbS5jaGFpbldhdGNoZXJzOwotCi0gICAg
ICAgICAgICBpZiAoIW0uaGFzT3duUHJvcGVydHkoJ2NoYWluV2F0Y2hlcnMnKSkgewotICAgICAg
ICAgICAgICAgIG5vZGVzID0gbS5jaGFpbldhdGNoZXJzID0ge307Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghbm9kZXNba2V5TmFtZV0pIHsKLSAgICAgICAgICAgICAgICBub2Rl
c1trZXlOYW1lXSA9IFtdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm9kZXNba2V5TmFt
ZV0ucHVzaChub2RlKTsKLSAgICAgICAgICAgIHdhdGNoS2V5KG9iaiwga2V5TmFtZSwgbSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVDaGFpbldhdGNoZXIob2JqLCBrZXlO
YW1lLCBub2RlKSB7Ci0gICAgICAgICAgICBpZiAoIW9iaiB8fCAnb2JqZWN0JyAhPT0gdHlwZW9m
IG9iaikgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIG5vdGhpbmcgdG8gZG8KLQotICAgICAgICAgICAgdmFyIG0gPSBvYmpbTUVUQV9LRVld
OwotICAgICAgICAgICAgaWYgKG0gJiYgIW0uaGFzT3duUHJvcGVydHkoJ2NoYWluV2F0Y2hlcnMn
KSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIG5vdGhpbmcgdG8gZG8KLQotICAgICAgICAgICAgdmFyIG5vZGVzID0gbSAmJiBtLmNoYWlu
V2F0Y2hlcnM7Ci0KLSAgICAgICAgICAgIGlmIChub2RlcyAmJiBub2Rlc1trZXlOYW1lXSkgewot
ICAgICAgICAgICAgICAgIG5vZGVzID0gbm9kZXNba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVzW2ldID09PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHVud2F0Y2hLZXkob2JqLCBrZXlOYW1lLCBtKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIEEgQ2hhaW5Ob2RlIHdhdGNoZXMgYSBzaW5nbGUga2V5IG9uIGFuIG9iamVjdC4g
SWYgeW91IHByb3ZpZGUgYSBzdGFydGluZwotICAgICAgICAvLyB2YWx1ZSBmb3IgdGhlIGtleSB0
aGVuIHRoZSBub2RlIHdvbid0IGFjdHVhbGx5IHdhdGNoIGl0LiBGb3IgYSByb290IG5vZGUKLSAg
ICAgICAgLy8gcGFzcyBudWxsIGZvciBwYXJlbnQgYW5kIGtleSBhbmQgb2JqZWN0IGZvciB2YWx1
ZS4KLSAgICAgICAgZnVuY3Rpb24gQ2hhaW5Ob2RlKHBhcmVudCwga2V5LCB2YWx1ZSkgewotICAg
ICAgICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50OwotICAgICAgICAgICAgdGhpcy5fa2V5ID0g
a2V5OwotCi0gICAgICAgICAgICAvLyBfd2F0Y2hpbmcgaXMgdHJ1ZSB3aGVuIGNhbGxpbmcgZ2V0
KHRoaXMuX3BhcmVudCwgdGhpcy5fa2V5KSB3aWxsCi0gICAgICAgICAgICAvLyByZXR1cm4gdGhl
IHZhbHVlIG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJdCBp
cyBmYWxzZSBmb3IgdGhlIHJvb3Qgb2YgYSBjaGFpbiAoYmVjYXVzZSB3ZSBoYXZlIG5vIHBhcmVu
dCkKLSAgICAgICAgICAgIC8vIGFuZCBmb3IgZ2xvYmFsIHBhdGhzIChiZWNhdXNlIHRoZSBwYXJl
bnQgbm9kZSBpcyB0aGUgb2JqZWN0IHdpdGgKLSAgICAgICAgICAgIC8vIHRoZSBvYnNlcnZlciBv
biBpdCkKLSAgICAgICAgICAgIHRoaXMuX3dhdGNoaW5nID0gdmFsdWUgPT09IHVuZGVmaW5lZDsK
LQotICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHRoaXMuX3Bh
dGhzID0ge307Ci0gICAgICAgICAgICBpZiAodGhpcy5fd2F0Y2hpbmcpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9vYmplY3QgPSBwYXJlbnQudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZENoYWluV2F0Y2hlcih0aGlz
Ll9vYmplY3QsIHRoaXMuX2tleSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2U6IHRoZSBFYWNoUHJveHkgcmVsaWVz
IG9uIGltbWVkaWF0ZSBldmFsdWF0aW9uIHRvCi0gICAgICAgICAgICAvLyBlc3RhYmxpc2ggaXRz
IG9ic2VydmVycy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNl
IHRoaXMgd2l0aCBhbiBlZmZpY2llbnQgY2FsbGJhY2sgdGhhdCB0aGUgRWFjaFByb3h5Ci0gICAg
ICAgICAgICAvLyBjYW4gaW1wbGVtZW50LgotICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCAm
JiB0aGlzLl9wYXJlbnQuX2tleSA9PT0gJ0BlYWNoJykgewotICAgICAgICAgICAgICAgIHRoaXMu
dmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBDaGFpbk5v
ZGVQcm90b3R5cGUgPSBDaGFpbk5vZGUucHJvdG90eXBlOwotCi0gICAgICAgIGZ1bmN0aW9uIGxh
enlHZXQob2JqLCBrZXkpIHsKLSAgICAgICAgICAgIGlmICghb2JqKSAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tF
WV07Ci0gICAgICAgICAgICAvLyBjaGVjayBpZiBvYmplY3QgbWVhbnQgb25seSB0byBiZSBhIHBy
b3RvdHlwZQotICAgICAgICAgICAgaWYgKG1ldGEgJiYgbWV0YS5wcm90byA9PT0gb2JqKSAKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICBpZiAoa2V5ID09
PSAiQGVhY2giKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KG9iaiwga2V5KTsKLQotICAg
ICAgICAgICAgLy8gaWYgYSBDUCBvbmx5IHJldHVybiBjYWNoZWQgdmFsdWUKLSAgICAgICAgICAg
IHZhciBkZXNjID0gbWV0YSAmJiBtZXRhLmRlc2NzW2tleV07Ci0gICAgICAgICAgICBpZiAoZGVz
YyAmJiBkZXNjLl9jYWNoZWFibGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1ldGEu
Y2FjaGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGEuY2FjaGVba2V5XTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZp
bmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIGdldChvYmosIGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDaGFpbk5vZGVQcm90b3R5
cGUudmFsdWUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0g
dW5kZWZpbmVkICYmIHRoaXMuX3dhdGNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9iaiA9
IHRoaXMuX3BhcmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbGF6
eUdldChvYmosIHRoaXMuX2tleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fdmFsdWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLmRl
c3Ryb3kgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl93YXRjaGluZykgewot
ICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9vYmplY3Q7Ci0gICAgICAgICAgICAgICAg
aWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGFpbldhdGNoZXIob2JqLCB0
aGlzLl9rZXksIHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlz
Ll93YXRjaGluZyA9IGZhbHNlOyAvLyBzbyBmdXR1cmUgY2FsbHMgZG8gbm90aGluZwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8vIGNvcGllcyBhIHRvcCBsZXZlbCBvYmpl
Y3Qgb25seQotICAgICAgICBDaGFpbk5vZGVQcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uKG9iaikg
ewotICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBDaGFpbk5vZGUobnVsbCwgbnVsbCwgb2JqKSwK
LSAgICAgICAgICAgIHBhdGhzID0gdGhpcy5fcGF0aHMsIHBhdGg7Ci0gICAgICAgICAgICBmb3Ig
KHBhdGggaW4gcGF0aHMpIHsKLSAgICAgICAgICAgICAgICBpZiAocGF0aHNbcGF0aF0gPD0gMCkg
ewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgLy8gdGhpcyBjaGVjayB3aWxsIGFsc28gY2F0Y2ggbm9uLW51bWJlciB2YWxz
LgotICAgICAgICAgICAgICAgIHJldC5hZGQocGF0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmV0OwotICAgICAgICB9OwotCi0gICAgICAgIC8vIGNhbGxlZCBvbiB0aGUg
cm9vdCBub2RlIG9mIGEgY2hhaW4gdG8gc2V0dXAgd2F0Y2hlcnMgb24gdGhlIHNwZWNpZmllZAot
ICAgICAgICAvLyBwYXRoLgotICAgICAgICBDaGFpbk5vZGVQcm90b3R5cGUuYWRkID0gZnVuY3Rp
b24ocGF0aCkgewotICAgICAgICAgICAgdmFyIG9iaiwgdHVwbGUsIGtleSwgc3JjLCBwYXRoczsK
LQotICAgICAgICAgICAgcGF0aHMgPSB0aGlzLl9wYXRoczsKLSAgICAgICAgICAgIHBhdGhzW3Bh
dGhdID0gKHBhdGhzW3BhdGhdIHx8IDApICsgMTsKLQotICAgICAgICAgICAgb2JqID0gdGhpcy52
YWx1ZSgpOwotICAgICAgICAgICAgdHVwbGUgPSBub3JtYWxpemVUdXBsZShvYmosIHBhdGgpOwot
Ci0gICAgICAgICAgICAvLyB0aGUgcGF0aCB3YXMgYSBsb2NhbCBwYXRoCi0gICAgICAgICAgICBp
ZiAodHVwbGVbMF0gJiYgdHVwbGVbMF0gPT09IG9iaikgewotICAgICAgICAgICAgICAgIHBhdGgg
PSB0dXBsZVsxXTsKLSAgICAgICAgICAgICAgICBrZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAg
ICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBnbG9iYWwgcGF0aCwgYnV0IG9iamVjdCBkb2VzIG5vdCBleGlzdCB5ZXQuCi0g
ICAgICAgICAgICAgICAgLy8gcHV0IGludG8gYSBxdWV1ZSBhbmQgdHJ5IHRvIGNvbm5lY3QgbGF0
ZXIuCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCF0dXBsZVswXSkgewotICAgICAgICAgICAgICAg
IHBlbmRpbmdRdWV1ZS5wdXNoKFt0aGlzLCBwYXRoXSk7Ci0gICAgICAgICAgICAgICAgdHVwbGUu
bGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAv
LyBnbG9iYWwgcGF0aCwgYW5kIG9iamVjdCBhbHJlYWR5IGV4aXN0cwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBzcmMgPSB0dXBsZVswXTsKLSAgICAgICAgICAgICAgICBr
ZXkgPSBwYXRoLnNsaWNlKDAsIDAgLSAodHVwbGVbMV0ubGVuZ3RoICsgMSkpOwotICAgICAgICAg
ICAgICAgIHBhdGggPSB0dXBsZVsxXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHVw
bGUubGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHRoaXMuY2hhaW4oa2V5LCBwYXRoLCBzcmMpOwot
ICAgICAgICB9OwotCi0gICAgICAgIC8vIGNhbGxlZCBvbiB0aGUgcm9vdCBub2RlIG9mIGEgY2hh
aW4gdG8gdGVhcmRvd24gd2F0Y2hlciBvbiB0aGUgc3BlY2lmaWVkCi0gICAgICAgIC8vIHBhdGgK
LSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHBhdGgpIHsKLSAg
ICAgICAgICAgIHZhciBvYmosIHR1cGxlLCBrZXksIHNyYywgcGF0aHM7Ci0KLSAgICAgICAgICAg
IHBhdGhzID0gdGhpcy5fcGF0aHM7Ci0gICAgICAgICAgICBpZiAocGF0aHNbcGF0aF0gPiAwKSB7
Ci0gICAgICAgICAgICAgICAgcGF0aHNbcGF0aF0tLTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgb2JqID0gdGhpcy52YWx1ZSgpOwotICAgICAgICAgICAgdHVwbGUgPSBub3JtYWxpemVU
dXBsZShvYmosIHBhdGgpOwotICAgICAgICAgICAgaWYgKHR1cGxlWzBdID09PSBvYmopIHsKLSAg
ICAgICAgICAgICAgICBwYXRoID0gdHVwbGVbMV07Ci0gICAgICAgICAgICAgICAga2V5ID0gZmly
c3RLZXkocGF0aCk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2Uoa2V5Lmxlbmd0
aCArIDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcmMgPSB0dXBs
ZVswXTsKLSAgICAgICAgICAgICAgICBrZXkgPSBwYXRoLnNsaWNlKDAsIDAgLSAodHVwbGVbMV0u
bGVuZ3RoICsgMSkpOwotICAgICAgICAgICAgICAgIHBhdGggPSB0dXBsZVsxXTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdHVwbGUubGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHRoaXMu
dW5jaGFpbihrZXksIHBhdGgpOwotICAgICAgICB9OwotCi0gICAgICAgIENoYWluTm9kZVByb3Rv
dHlwZS5jb3VudCA9IDA7Ci0KLSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLmNoYWluID0gZnVu
Y3Rpb24oa2V5LCBwYXRoLCBzcmMpIHsKLSAgICAgICAgICAgIHZhciBjaGFpbnMgPSB0aGlzLl9j
aGFpbnMsIG5vZGU7Ci0gICAgICAgICAgICBpZiAoIWNoYWlucykgewotICAgICAgICAgICAgICAg
IGNoYWlucyA9IHRoaXMuX2NoYWlucyA9IHt9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBub2RlID0gY2hhaW5zW2tleV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAg
ICAgICAgICBub2RlID0gY2hhaW5zW2tleV0gPSBuZXcgQ2hhaW5Ob2RlKHRoaXMsIGtleSwgc3Jj
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUuY291bnQrKzsgLy8gY291bnQgY2hh
aW5zLi4uCi0KLSAgICAgICAgICAgIC8vIGNoYWluIHJlc3Qgb2YgcGF0aCBpZiB0aGVyZSBpcyBv
bmUKLSAgICAgICAgICAgIGlmIChwYXRoKSB7Ci0gICAgICAgICAgICAgICAga2V5ID0gZmlyc3RL
ZXkocGF0aCk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2Uoa2V5Lmxlbmd0aCAr
IDEpOwotICAgICAgICAgICAgICAgIG5vZGUuY2hhaW4oa2V5LCBwYXRoKTsgLy8gTk9URTogbm8g
c3JjIG1lYW5zIGl0IHdpbGwgb2JzZXJ2ZSBjaGFuZ2VzLi4uCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLnVuY2hhaW4gPSBmdW5jdGlvbihr
ZXksIHBhdGgpIHsKLSAgICAgICAgICAgIHZhciBjaGFpbnMgPSB0aGlzLl9jaGFpbnMsIG5vZGUg
PSBjaGFpbnNba2V5XTsKLQotICAgICAgICAgICAgLy8gdW5jaGFpbiByZXN0IG9mIHBhdGggZmly
c3QuLi4KLSAgICAgICAgICAgIGlmIChwYXRoICYmIHBhdGgubGVuZ3RoID4gMSkgewotICAgICAg
ICAgICAgICAgIGtleSA9IGZpcnN0S2V5KHBhdGgpOwotICAgICAgICAgICAgICAgIHBhdGggPSBw
YXRoLnNsaWNlKGtleS5sZW5ndGggKyAxKTsKLSAgICAgICAgICAgICAgICBub2RlLnVuY2hhaW4o
a2V5LCBwYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZGVsZXRlIG5vZGUg
aWYgbmVlZGVkLgotICAgICAgICAgICAgbm9kZS5jb3VudC0tOwotICAgICAgICAgICAgaWYgKG5v
ZGUuY291bnQgPD0gMCkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGFpbnNbbm9kZS5fa2V5
XTsKLSAgICAgICAgICAgICAgICBub2RlLmRlc3Ryb3koKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICB9OwotCi0gICAgICAgIENoYWluTm9kZVByb3RvdHlwZS53aWxsQ2hhbmdlID0gZnVuY3Rp
b24oZXZlbnRzKSB7Ci0gICAgICAgICAgICB2YXIgY2hhaW5zID0gdGhpcy5fY2hhaW5zOwotICAg
ICAgICAgICAgaWYgKGNoYWlucykgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBj
aGFpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFpbnMuaGFzT3duUHJvcGVydHko
a2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2hhaW5zW2tleV0ud2lsbENoYW5nZShldmVu
dHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHRoaXMuX3BhcmVudCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudC5jaGFpbldpbGxD
aGFuZ2UodGhpcywgdGhpcy5fa2V5LCAxLCBldmVudHMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9OwotCi0gICAgICAgIENoYWluTm9kZVByb3RvdHlwZS5jaGFpbldpbGxDaGFuZ2UgPSBmdW5j
dGlvbihjaGFpbiwgcGF0aCwgZGVwdGgsIGV2ZW50cykgewotICAgICAgICAgICAgaWYgKHRoaXMu
X2tleSkgewotICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLl9rZXkgKyAnLicgKyBwYXRoOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fcGFyZW50LmNoYWluV2lsbENoYW5nZSh0aGlzLCBwYXRoLCBkZXB0aCAr
IDEsIGV2ZW50cyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChk
ZXB0aCA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2godGhpcy52YWx1ZSgp
LCBwYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGF0aCA9ICd0aGlz
LicgKyBwYXRoOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXRoc1twYXRoXSA+IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2godGhpcy52YWx1ZSgpLCBwYXRoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQ2hh
aW5Ob2RlUHJvdG90eXBlLmNoYWluRGlkQ2hhbmdlID0gZnVuY3Rpb24oY2hhaW4sIHBhdGgsIGRl
cHRoLCBldmVudHMpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9rZXkpIHsKLSAgICAgICAgICAg
ICAgICBwYXRoID0gdGhpcy5fa2V5ICsgJy4nICsgcGF0aDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQu
Y2hhaW5EaWRDaGFuZ2UodGhpcywgcGF0aCwgZGVwdGggKyAxLCBldmVudHMpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVwdGggPiAxKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV2ZW50cy5wdXNoKHRoaXMudmFsdWUoKSwgcGF0aCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHBhdGggPSAndGhpcy4nICsgcGF0aDsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fcGF0aHNbcGF0aF0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2
ZW50cy5wdXNoKHRoaXMudmFsdWUoKSwgcGF0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIENoYWluTm9kZVByb3RvdHlwZS5kaWRDaGFu
Z2UgPSBmdW5jdGlvbihldmVudHMpIHsKLSAgICAgICAgICAgIC8vIGludmFsaWRhdGUgbXkgb3du
IHZhbHVlIGZpcnN0LgotICAgICAgICAgICAgaWYgKHRoaXMuX3dhdGNoaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3BhcmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAg
IGlmIChvYmogIT09IHRoaXMuX29iamVjdCkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVD
aGFpbldhdGNoZXIodGhpcy5fb2JqZWN0LCB0aGlzLl9rZXksIHRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9vYmplY3QgPSBvYmo7Ci0gICAgICAgICAgICAgICAgICAgIGFkZENoYWlu
V2F0Y2hlcihvYmosIHRoaXMuX2tleSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAgICAgLy8g
U3BlY2lhbC1jYXNlOiB0aGUgRWFjaFByb3h5IHJlbGllcyBvbiBpbW1lZGlhdGUgZXZhbHVhdGlv
biB0bwotICAgICAgICAgICAgICAgIC8vIGVzdGFibGlzaCBpdHMgb2JzZXJ2ZXJzLgotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQgJiYgdGhpcy5fcGFyZW50Ll9rZXkgPT09ICdAZWFj
aCcpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gdGhlbiBub3RpZnkgY2hhaW5zLi4uCi0gICAgICAgICAgICB2YXIgY2hh
aW5zID0gdGhpcy5fY2hhaW5zOwotICAgICAgICAgICAgaWYgKGNoYWlucykgewotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiBjaGFpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFjaGFpbnMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2hh
aW5zW2tleV0uZGlkQ2hhbmdlKGV2ZW50cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBpZiBubyBldmVudHMgYXJlIHBhc3NlZCBpbiB0aGVuIHdl
IG9ubHkgY2FyZSBhYm91dCB0aGUgYWJvdmUgd2lyaW5nIHVwZGF0ZQotICAgICAgICAgICAgaWYg
KGV2ZW50cyA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gYW5kIGZpbmFsbHkgdGVsbCBwYXJlbnQgYWJvdXQgbXkgcGF0
aCBjaGFuZ2luZy4uLgotICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkgewotICAgICAgICAg
ICAgICAgIHRoaXMuX3BhcmVudC5jaGFpbkRpZENoYW5nZSh0aGlzLCB0aGlzLl9rZXksIDEsIGV2
ZW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gZmlu
aXNoQ2hhaW5zKG9iaikgewotICAgICAgICAgICAgLy8gV2Ugb25seSBjcmVhdGUgbWV0YSBpZiB3
ZSByZWFsbHkgaGF2ZSB0bwotICAgICAgICAgICAgdmFyIG0gPSBvYmpbTUVUQV9LRVldLCBjaGFp
bnMgPSBtICYmIG0uY2hhaW5zOwotICAgICAgICAgICAgaWYgKGNoYWlucykgewotICAgICAgICAg
ICAgICAgIGlmIChjaGFpbnMudmFsdWUoKSAhPT0gb2JqKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1ldGFGb3Iob2JqKS5jaGFpbnMgPSBjaGFpbnMgPSBjaGFpbnMuY29weShvYmopOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYWlucy5kaWRDaGFuZ2Uo
bnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uZmluaXNoQ2hhaW5zID0gZmluaXNoQ2hhaW5zOwotICAgICAgICBf
X2V4cG9ydHNfXy5yZW1vdmVDaGFpbldhdGNoZXIgPSByZW1vdmVDaGFpbldhdGNoZXI7Ci0gICAg
ICAgIF9fZXhwb3J0c19fLkNoYWluTm9kZSA9IENoYWluTm9kZTsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9leHBhbmRfcHJvcGVydGllcyIsICJlbWJlci1t
ZXRhbC9lcnJvciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X2V2ZW50cyIsICJlbWJlci1tZXRhbC9kZXBlbmRlbnRfa2V5cyIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywg
X19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19leHBv
cnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJf
Xy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2
YXIgbWV0YSA9IF9fZGVwZW5kZW5jeTRfXy5tZXRhOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBf
X2RlcGVuZGVuY3k0X18uTUVUQV9LRVk7Ci0gICAgICAgIHZhciBpbnNwZWN0ID0gX19kZXBlbmRl
bmN5NF9fLmluc3BlY3Q7Ci0gICAgICAgIHZhciBleHBhbmRQcm9wZXJ0aWVzID0gX19kZXBlbmRl
bmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5
Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBEZXNjcmlwdG9yID0gX19kZXBlbmRlbmN5N19f
LkRlc2NyaXB0b3I7Ci0gICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTdf
Xy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVw
ZW5kZW5jeThfXy5wcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0gICAgICAgIHZhciBwcm9wZXJ0eURpZENo
YW5nZSA9IF9fZGVwZW5kZW5jeThfXy5wcm9wZXJ0eURpZENoYW5nZTsKLSAgICAgICAgdmFyIGFk
ZERlcGVuZGVudEtleXMgPSBfX2RlcGVuZGVuY3k5X18uYWRkRGVwZW5kZW50S2V5czsKLSAgICAg
ICAgdmFyIHJlbW92ZURlcGVuZGVudEtleXMgPSBfX2RlcGVuZGVuY3k5X18ucmVtb3ZlRGVwZW5k
ZW50S2V5czsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwK
LSAgICAgICAgICAgICovCi0KLSAgICAgICAgRW1iZXIud2FybigiVGhlIENQX0RFRkFVTFRfQ0FD
SEVBQkxFIGZsYWcgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUg
YWx3YXlzIGNhY2hlZCBieSBkZWZhdWx0LiBVc2UgYHZvbGF0aWxlYCBpZiB5b3UgZG9uJ3Qgd2Fu
dCBjYWNoaW5nLiIsIEVtYmVyLkVOVi5DUF9ERUZBVUxUX0NBQ0hFQUJMRSAhPT0gZmFsc2UpOwot
Ci0KLSAgICAgICAgdmFyIG1ldGFGb3IgPSBtZXRhLAotICAgICAgICBhX3NsaWNlID0gW10uc2xp
Y2U7Ci0KLSAgICAgICAgZnVuY3Rpb24gVU5ERUZJTkVEKCkge30KLQotICAgICAgICAvLyAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0g
ICAgICAgIC8vIENPTVBVVEVEIFBST1BFUlRZCi0gICAgICAgIC8vCi0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdHJhbnNmb3JtcyBhbiBvYmplY3RzIGZ1
bmN0aW9uIGludG8gYSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBCeSBkZWZhdWx0IHRoZSBm
dW5jdGlvbiBiYWNraW5nIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgY2FsbGVk
Ci0gICAgICAgICAgICAgIG9uY2UgYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBjYWNoZWQuIFlvdSBj
YW4gc3BlY2lmeSB2YXJpb3VzIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgdGhhdCB5b3VyIGNv
bXB1dGVkIHByb3BlcnR5IGlzIGRlcGVuZGVudCBvbi4gVGhpcyB3aWxsIGZvcmNlIHRoZSBjYWNo
ZWQKLSAgICAgICAgICAgICAgcmVzdWx0IHRvIGJlIHJlY29tcHV0ZWQgaWYgdGhlIGRlcGVuZGVu
Y2llcyBhcmUgbW9kaWZpZWQuCi0KLSAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBleGFt
cGxlIHdlIGRlY2xhcmUgYSBjb21wdXRlZCBwcm9wZXJ0eSAoYnkgY2FsbGluZwotICAgICAgICAg
ICAgICBgLnByb3BlcnR5KClgIG9uIHRoZSBmdWxsTmFtZSBmdW5jdGlvbikgYW5kIHNldHVwIHRo
ZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIGRlcGVuZGVuY2llcyAoZGVwZW5kaW5nIG9uIGZp
cnN0TmFtZSBhbmQgbGFzdE5hbWUpLiBUaGUgZnVsbE5hbWUgZnVuY3Rpb24KLSAgICAgICAgICAg
ICAgd2lsbCBiZSBjYWxsZWQgb25jZSAocmVnYXJkbGVzcyBvZiBob3cgbWFueSB0aW1lcyBpdCBp
cyBhY2Nlc3NlZCkgYXMgbG9uZwotICAgICAgICAgICAgICBhcyBpdCdzIGRlcGVuZGVuY2llcyBo
YXZlIG5vdCBiZWVuIGNoYW5nZWQuIE9uY2UgZmlyc3ROYW1lIG9yIGxhc3ROYW1lIGFyZSB1cGRh
dGVkCi0gICAgICAgICAgICAgIGFueSBmdXR1cmUgY2FsbHMgKG9yIGFueXRoaW5nIGJvdW5kKSB0
byBmdWxsTmFtZSB3aWxsIGluY29ycG9yYXRlIHRoZSBuZXcKLSAgICAgICAgICAgICAgdmFsdWVz
LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFBlcnNv
biA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIC8vIHRoZXNlIHdpbGwg
YmUgc3VwcGxpZWQgYnkgYGNyZWF0ZWAKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IG51bGws
Ci0gICAgICAgICAgICAgICAgbGFzdE5hbWU6IG51bGwsCi0KLSAgICAgICAgICAgICAgICBmdWxs
TmFtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICB2YXIgZmlyc3ROYW1lID0gdGhp
cy5nZXQoJ2ZpcnN0TmFtZScpOwotICAgICAgICAgICAgICAgICAgdmFyIGxhc3ROYW1lID0gdGhp
cy5nZXQoJ2xhc3ROYW1lJyk7Ci0KLSAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSAr
ICcgJyArIGxhc3ROYW1lOwotICAgICAgICAgICAgICAgIH0ucHJvcGVydHkoJ2ZpcnN0TmFtZScs
ICdsYXN0TmFtZScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciB0b20g
PSBQZXJzb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICdUb20nLAotICAg
ICAgICAgICAgICAgIGxhc3ROYW1lOiAnRGFsZScKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgdG9tLmdldCgnZnVsbE5hbWUnKSAvLyAnVG9tIERhbGUnCi0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBkZWZpbmUgd2hhdCBFbWJlciBzaG91
bGQgZG8gd2hlbiBzZXR0aW5nIGEgY29tcHV0ZWQgcHJvcGVydHkuCi0gICAgICAgICAgICAgIElm
IHlvdSB0cnkgdG8gc2V0IGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHdpbGwgYmUgaW52b2tlZCB3
aXRoIHRoZSBrZXkgYW5kCi0gICAgICAgICAgICAgIHZhbHVlIHlvdSB3YW50IHRvIHNldCBpdCB0
by4gWW91IGNhbiBhbHNvIGFjY2VwdCB0aGUgcHJldmlvdXMgdmFsdWUgYXMgdGhlCi0gICAgICAg
ICAgICAgIHRoaXJkIHBhcmFtZXRlci4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIHZhciBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICAvLyB0aGVzZSB3aWxsIGJlIHN1cHBsaWVkIGJ5IGBjcmVhdGVgCi0gICAgICAgICAg
ICAgICAgZmlyc3ROYW1lOiBudWxsLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBudWxsLAot
Ci0gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKGtleSwgdmFsdWUsIG9sZFZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgICAvLyBnZXR0ZXIKLSAgICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE5h
bWUgPSB0aGlzLmdldCgnZmlyc3ROYW1lJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0
TmFtZSA9IHRoaXMuZ2V0KCdsYXN0TmFtZScpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZTsKLQotICAgICAgICAgICAgICAgICAgLy8gc2V0
dGVyCi0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXIg
bmFtZSA9IHZhbHVlLnNwbGl0KCcgJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQo
J2ZpcnN0TmFtZScsIG5hbWVbMF0pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgnbGFz
dE5hbWUnLCBuYW1lWzFdKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1l
JywgJ2xhc3ROYW1lJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHBl
cnNvbiA9IFBlcnNvbi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBwZXJzb24uc2V0KCdmdWxs
TmFtZScsICdQZXRlciBXYWdlbmV0Jyk7Ci0gICAgICAgICAgICAgIHBlcnNvbi5nZXQoJ2ZpcnN0
TmFtZScpOyAvLyAnUGV0ZXInCi0gICAgICAgICAgICAgIHBlcnNvbi5nZXQoJ2xhc3ROYW1lJyk7
ICAvLyAnV2FnZW5ldCcKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNz
IENvbXB1dGVkUHJvcGVydHkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAZXh0ZW5kcyBFbWJlci5EZXNjcmlwdG9yCi0gICAgICAgICAgICAgIEBjb25zdHJ1
Y3RvcgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gQ29tcHV0ZWRQcm9wZXJ0eShm
dW5jLCBvcHRzKSB7Ci0gICAgICAgICAgICBmdW5jLl9fZW1iZXJfYXJpdHlfXyA9IGZ1bmMubGVu
Z3RoOwotICAgICAgICAgICAgdGhpcy5mdW5jID0gZnVuYzsKLQotICAgICAgICAgICAgdGhpcy5f
Y2FjaGVhYmxlID0gKG9wdHMgJiYgb3B0cy5jYWNoZWFibGUgIT09IHVuZGVmaW5lZCkgPyBvcHRz
LmNhY2hlYWJsZSA6IHRydWU7Ci0gICAgICAgICAgICB0aGlzLl9kZXBlbmRlbnRLZXlzID0gb3B0
cyAmJiBvcHRzLmRlcGVuZGVudEtleXM7Ci0gICAgICAgICAgICB0aGlzLl9yZWFkT25seSA9IG9w
dHMgJiYgKG9wdHMucmVhZE9ubHkgIT09IHVuZGVmaW5lZCB8fCAhIW9wdHMucmVhZE9ubHkpIHx8
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUg
PSBuZXcgRGVzY3JpcHRvcigpOwotCi0gICAgICAgIHZhciBDb21wdXRlZFByb3BlcnR5UHJvdG90
eXBlID0gQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGU7Ci0gICAgICAgIENvbXB1dGVkUHJvcGVy
dHlQcm90b3R5cGUuX2RlcGVuZGVudEtleXMgPSB1bmRlZmluZWQ7Ci0gICAgICAgIENvbXB1dGVk
UHJvcGVydHlQcm90b3R5cGUuX3N1c3BlbmRlZCA9IHVuZGVmaW5lZDsKLSAgICAgICAgQ29tcHV0
ZWRQcm9wZXJ0eVByb3RvdHlwZS5fbWV0YSA9IHVuZGVmaW5lZDsKLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgUHJvcGVydGllcyBhcmUgY2FjaGVhYmxlIGJ5IGRlZmF1bHQuIENvbXB1dGVk
IHByb3BlcnR5IHdpbGwgYXV0b21hdGljYWxseQotICAgICAgICAgICAgICBjYWNoZSB0aGUgcmV0
dXJuIHZhbHVlIG9mIHlvdXIgZnVuY3Rpb24gdW50aWwgb25lIG9mIHRoZSBkZXBlbmRlbnQga2V5
cyBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgIENhbGwgYHZvbGF0aWxlKClgIHRvIHNldCBpdCBp
bnRvIG5vbi1jYWNoZWQgbW9kZS4gV2hlbiBpbiB0aGlzIG1vZGUKLSAgICAgICAgICAgICAgdGhl
IGNvbXB1dGVkIHByb3BlcnR5IHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgY2FjaGUgdGhlIHJldHVy
biB2YWx1ZS4KLQotICAgICAgICAgICAgICBIb3dldmVyLCBpZiBhIHByb3BlcnR5IGlzIHByb3Bl
cmx5IG9ic2VydmFibGUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBkaXNhYmxlCi0gICAgICAgICAg
ICAgIGNhY2hpbmcuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjYWNoZWFibGUKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtCb29sZWFufSBhRmxhZyBvcHRpb25hbCBzZXQgdG8gYGZhbHNlYCB0byBk
aXNhYmxlIGNhY2hpbmcKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9w
ZXJ0eX0gdGhpcwotICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAqLwotICAg
ICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLmNhY2hlYWJsZSA9IGZ1bmN0aW9uKGFGbGFn
KSB7Ci0gICAgICAgICAgICB0aGlzLl9jYWNoZWFibGUgPSBhRmxhZyAhPT0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgQ2FsbCBvbiBhIGNvbXB1dGVkIHByb3BlcnR5IHRvIHNldCBpdCBpbnRvIG5vbi1jYWNo
ZWQgbW9kZS4gV2hlbiBpbiB0aGlzCi0gICAgICAgICAgICAgIG1vZGUgdGhlIGNvbXB1dGVkIHBy
b3BlcnR5IHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgY2FjaGUgdGhlIHJldHVybiB2YWx1ZS4KLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBvdXRzaWRlU2Vy
dmljZSA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBPdXRzaWRlU2VydmljZS5nZXRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgIH0ucHJvcGVydHkoKS52b2xhdGlsZSgpCi0gICAgICAgICAg
ICAgIH0pLmNyZWF0ZSgpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0
aG9kIHZvbGF0aWxlCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVy
dHl9IHRoaXMKLSAgICAgICAgICAgICAgQGNoYWluYWJsZQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZVsidm9sYXRpbGUiXSA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVhYmxlKGZhbHNlKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ2FsbCBvbiBhIGNvbXB1dGVkIHByb3BlcnR5IHRv
IHNldCBpdCBpbnRvIHJlYWQtb25seSBtb2RlLiBXaGVuIGluIHRoaXMKLSAgICAgICAgICAgICAg
bW9kZSB0aGUgY29tcHV0ZWQgcHJvcGVydHkgd2lsbCB0aHJvdyBhbiBlcnJvciB3aGVuIHNldC4K
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBQZXJzb24g
PSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBndWlkOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAnZ3VpZC1ndWlkLWd1aWQnOwotICAgICAgICAg
ICAgICAgIH0ucHJvcGVydHkoKS5yZWFkT25seSgpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIHZhciBwZXJzb24gPSBQZXJzb24uY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAg
cGVyc29uLnNldCgnZ3VpZCcsICduZXctZ3VpZCcpOyAvLyB3aWxsIHRocm93IGFuIGV4Y2VwdGlv
bgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlYWRPbmx5Ci0g
ICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRoaXMKLSAgICAg
ICAgICAgICAgQGNoYWluYWJsZQotICAgICAgICAgICAgKi8KLSAgICAgICAgQ29tcHV0ZWRQcm9w
ZXJ0eVByb3RvdHlwZS5yZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7Ci0gICAgICAgICAg
ICB0aGlzLl9yZWFkT25seSA9IHJlYWRPbmx5ID09PSB1bmRlZmluZWQgfHwgISFyZWFkT25seTsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBTZXRzIHRoZSBkZXBlbmRlbnQga2V5cyBvbiB0aGlzIGNvbXB1dGVkIHByb3Bl
cnR5LiBQYXNzIGFueSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgYXJndW1lbnRzIGNvbnRhaW5p
bmcga2V5IHBhdGhzIHRoYXQgdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBkZXBlbmRzIG9uLgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFByZXNpZGVudCA9
IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBjb21wdXRl
ZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCgnZmlyc3RO
YW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUnKTsKLQotICAgICAgICAgICAgICAgICAg
Ly8gVGVsbCBFbWJlciB0aGF0IHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgZGVwZW5kcyBvbiBmaXJz
dE5hbWUKLSAgICAgICAgICAgICAgICAgIC8vIGFuZCBsYXN0TmFtZQotICAgICAgICAgICAgICAg
IH0pLnByb3BlcnR5KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQotICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICB2YXIgcHJlc2lkZW50ID0gUHJlc2lkZW50LmNyZWF0ZSh7Ci0gICAg
ICAgICAgICAgICAgZmlyc3ROYW1lOiAnQmFyYWNrJywKLSAgICAgICAgICAgICAgICBsYXN0TmFt
ZTogJ09iYW1hJwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBwcmVzaWRlbnQu
Z2V0KCdmdWxsTmFtZScpOyAvLyAnQmFyYWNrIE9iYW1hJwotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAbWV0aG9kIHByb3BlcnR5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBwYXRoKiB6ZXJvIG9yIG1vcmUgcHJvcGVydHkgcGF0aHMKLSAgICAgICAgICAgICAgQHJl
dHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gdGhpcwotICAgICAgICAgICAgICBAY2hhaW5h
YmxlCi0gICAgICAgICAgICAqLwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnBy
b3BlcnR5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgYXJnczsKLQotICAgICAgICAg
ICAgdmFyIGFkZEFyZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIGFy
Z3MucHVzaChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBhcmdzID0g
W107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzKGFyZ3VtZW50c1tp
XSwgYWRkQXJnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5fZGVwZW5kZW50
S2V5cyA9IGFyZ3M7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgeW91IG1heSB3YW50IHRvIGFu
bm90YXRlIGNvbXB1dGVkIHByb3BlcnRpZXMgd2l0aCBhZGRpdGlvbmFsCi0gICAgICAgICAgICAg
IG1ldGFkYXRhIGFib3V0IGhvdyB0aGV5IGZ1bmN0aW9uIG9yIHdoYXQgdmFsdWVzIHRoZXkgb3Bl
cmF0ZSBvbi4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgIGNvbXB1dGVkIHByb3BlcnR5IGZ1
bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciB2YXJpYWJsZXMgdGhhdCBhcmUgdGhlbiBubyBsb25nZXIK
LSAgICAgICAgICAgICAgYXZhaWxhYmxlIGZvciBpbnRyb3NwZWN0aW9uLgotCi0gICAgICAgICAg
ICAgIFlvdSBjYW4gcGFzcyBhIGhhc2ggb2YgdGhlc2UgdmFsdWVzIHRvIGEgY29tcHV0ZWQgcHJv
cGVydHkgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICBwZXJz
b246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBwZXJzb25JZCA9IHRoaXMuZ2V0
KCdwZXJzb25JZCcpOwotICAgICAgICAgICAgICAgIHJldHVybiBBcHAuUGVyc29uLmNyZWF0ZSh7
IGlkOiBwZXJzb25JZCB9KTsKLSAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpLm1ldGEoeyB0eXBl
OiBBcHAuUGVyc29uIH0pCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSBo
YXNoIHRoYXQgeW91IHBhc3MgdG8gdGhlIGBtZXRhKClgIGZ1bmN0aW9uIHdpbGwgYmUgc2F2ZWQg
b24gdGhlCi0gICAgICAgICAgICAgIGNvbXB1dGVkIHByb3BlcnR5IGRlc2NyaXB0b3IgdW5kZXIg
dGhlIGBfbWV0YWAga2V5LiBFbWJlciBydW50aW1lCi0gICAgICAgICAgICAgIGV4cG9zZXMgYSBw
dWJsaWMgQVBJIGZvciByZXRyaWV2aW5nIHRoZXNlIHZhbHVlcyBmcm9tIGNsYXNzZXMsCi0gICAg
ICAgICAgICAgIHZpYSB0aGUgYG1ldGFGb3JQcm9wZXJ0eSgpYCBmdW5jdGlvbi4KLQotICAgICAg
ICAgICAgICBAbWV0aG9kIG1ldGEKLSAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBtZXRhCi0g
ICAgICAgICAgICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgQ29tcHV0
ZWRQcm9wZXJ0eVByb3RvdHlwZS5tZXRhID0gZnVuY3Rpb24obWV0YSkgewotICAgICAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fbWV0YSB8fCB7fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fbWV0YSA9IG1ldGE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyogaW1wbCBkZXNjcmlwdG9yIEFQSSAqLwotICAg
ICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLmRpZENoYW5nZSA9IGZ1bmN0aW9uKG9iaiwg
a2V5TmFtZSkgewotICAgICAgICAgICAgLy8gX3N1c3BlbmRlZCBpcyBzZXQgdmlhIGEgQ1Auc2V0
IHRvIGVuc3VyZSB3ZSBkb24ndCBjbGVhcgotICAgICAgICAgICAgLy8gdGhlIGNhY2hlZCB2YWx1
ZSBzZXQgYnkgdGhlIHNldHRlcgotICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlYWJsZSAmJiB0
aGlzLl9zdXNwZW5kZWQgIT09IG9iaikgewotICAgICAgICAgICAgICAgIHZhciBtZXRhID0gbWV0
YUZvcihvYmopOwotICAgICAgICAgICAgICAgIGlmIChtZXRhLmNhY2hlW2tleU5hbWVdICE9PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0YS5jYWNoZVtrZXlOYW1lXSA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRGVwZW5kZW50S2V5cyh0aGlzLCBv
YmosIGtleU5hbWUsIG1ldGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBmaW5pc2hDaGFpbnMoY2hhaW5Ob2RlcykKLSAg
ICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFpbk5vZGVzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIGNoYWluTm9kZXNbaV0uZGlkQ2hhbmdl
KG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIEFjY2VzcyB0aGUgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGJhY2tpbmcgdGhlIGNvbXB1
dGVkIHByb3BlcnR5LgotICAgICAgICAgICAgICBJZiB0aGlzIHByb3BlcnR5IGhhcyBhbHJlYWR5
IGJlZW4gY2FjaGVkLCByZXR1cm4gdGhlIGNhY2hlZCByZXN1bHQuCi0gICAgICAgICAgICAgIE90
aGVyd2lzZSwgY2FsbCB0aGUgZnVuY3Rpb24gcGFzc2luZyB0aGUgcHJvcGVydHkgbmFtZSBhcyBh
biBhcmd1bWVudC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IHZhciBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBmdWxs
TmFtZTogZnVuY3Rpb24oa2V5TmFtZSkgewotICAgICAgICAgICAgICAgICAgLy8gdGhlIGtleU5h
bWUgcGFyYW1ldGVyIGlzICdmdWxsTmFtZScgaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0KCdsYXN0TmFt
ZScpOwotICAgICAgICAgICAgICAgIH0ucHJvcGVydHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScp
Ci0gICAgICAgICAgICAgIH0pOwotCi0KLSAgICAgICAgICAgICAgdmFyIHRvbSA9IFBlcnNvbi5j
cmVhdGUoewotICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogJ1RvbScsCi0gICAgICAgICAgICAg
ICAgbGFzdE5hbWU6ICdEYWxlJwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB0
b20uZ2V0KCdmdWxsTmFtZScpIC8vICdUb20gRGFsZScKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBnZXQKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIGtleSBiZWluZyBhY2Nlc3NlZC4KLSAgICAgICAgICAgICAgQHJldHVybiB7T2Jq
ZWN0fSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBiYWNraW5nIHRoZSBDUC4KLSAg
ICAgICAgICAgICovCi0gICAgICAgIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUuZ2V0ID0gZnVu
Y3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgcmV0LCBjYWNoZSwgbWV0YSwg
Y2hhaW5Ob2RlczsKLSAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWFibGUpIHsKLSAgICAgICAg
ICAgICAgICBtZXRhID0gbWV0YUZvcihvYmopOwotICAgICAgICAgICAgICAgIGNhY2hlID0gbWV0
YS5jYWNoZTsKLQotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWNoZVtrZXlOYW1lXTsK
LQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFVOREVGSU5FRCkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
cmVzdWx0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmZ1bmMu
Y2FsbChvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgICAgICBjYWNoZVtrZXlOYW1lXSA9IFVOREVGSU5FRDsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjYWNoZVtrZXlOYW1l
XSA9IHJldDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFpbk5vZGVz
ID0gbWV0YS5jaGFpbldhdGNoZXJzICYmIG1ldGEuY2hhaW5XYXRjaGVyc1trZXlOYW1lXTsKLSAg
ICAgICAgICAgICAgICBpZiAoY2hhaW5Ob2RlcykgewotICAgICAgICAgICAgICAgICAgICBmaW5p
c2hDaGFpbnMoY2hhaW5Ob2Rlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGFkZERlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBtZXRhKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5mdW5jLmNhbGwob2JqLCBrZXlO
YW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBjb21wdXRl
ZCBwcm9wZXJ0eS4gSWYgdGhlIGZ1bmN0aW9uIHRoYXQgYmFja3MgeW91cgotICAgICAgICAgICAg
ICBjb21wdXRlZCBwcm9wZXJ0eSBkb2VzIG5vdCBhY2NlcHQgYXJndW1lbnRzIHRoZW4gdGhlIGRl
ZmF1bHQgYWN0aW9uIGZvcgotICAgICAgICAgICAgICBzZXR0aW5nIHdvdWxkIGJlIHRvIGRlZmlu
ZSB0aGUgcHJvcGVydHkgb24gdGhlIGN1cnJlbnQgb2JqZWN0LCBhbmQgc2V0Ci0gICAgICAgICAg
ICAgIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gdGhlIHZhbHVlIGJlaW5nIHNldC4KLQot
ICAgICAgICAgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcgaWYgeW91IGludGVuZCBmb3IgeW91ciBj
b21wdXRlZCBwcm9wZXJ0eSB0byBiZSBzZXQKLSAgICAgICAgICAgICAgeW91ciBiYWNraW5nIGZ1
bmN0aW9uIHNob3VsZCBhY2NlcHQgZWl0aGVyIHR3byBvciB0aHJlZSBhcmd1bWVudHMuCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBzZXQKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIGtleSBiZWluZyBhY2Nlc3NlZC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgYmVpbmcgYXNzaWduZWQuCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBvbGRWYWx1ZSBUaGUgb2xkIHZhbHVlIGJlaW5nIHJlcGxhY2VkLgot
ICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1
bmN0aW9uIGJhY2tpbmcgdGhlIENQLgotICAgICAgICAgICAgKi8KLSAgICAgICAgQ29tcHV0ZWRQ
cm9wZXJ0eVByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihvYmosIGtleU5hbWUsIHZhbHVlKSB7Ci0g
ICAgICAgICAgICB2YXIgY2FjaGVhYmxlID0gdGhpcy5fY2FjaGVhYmxlLAotICAgICAgICAgICAg
ZnVuYyA9IHRoaXMuZnVuYywKLSAgICAgICAgICAgIG1ldGEgPSBtZXRhRm9yKG9iaiwgY2FjaGVh
YmxlKSwKLSAgICAgICAgICAgIG9sZFN1c3BlbmRlZCA9IHRoaXMuX3N1c3BlbmRlZCwKLSAgICAg
ICAgICAgIGhhZENhY2hlZFZhbHVlID0gZmFsc2UsCi0gICAgICAgICAgICBjYWNoZSA9IG1ldGEu
Y2FjaGUsCi0gICAgICAgICAgICBmdW5jQXJnTGVuZ3RoLCBjYWNoZWRWYWx1ZSwgcmV0OwotCi0g
ICAgICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRW1iZXJFcnJvcignQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgIicgKyBrZXlOYW1l
ICsgJyIgb24gb2JqZWN0OiAnICsgaW5zcGVjdChvYmopKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdGhpcy5fc3VzcGVuZGVkID0gb2JqOwotCi0gICAgICAgICAgICB0cnkgewotCi0g
ICAgICAgICAgICAgICAgaWYgKGNhY2hlYWJsZSAmJiBjYWNoZVtrZXlOYW1lXSAhPT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVtrZXlOYW1lXSAhPT0gVU5ERUZJ
TkVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRWYWx1ZSA9IGNhY2hlW2tleU5h
bWVdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaGFkQ2Fj
aGVkVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBDUCBoYXMgYmVlbiB3cmFwcGVkLiBJZiBpdCBoYXMsIHVzZSB0aGUKLSAg
ICAgICAgICAgICAgICAvLyBsZW5ndGggZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbi4KLQotICAg
ICAgICAgICAgICAgIGZ1bmNBcmdMZW5ndGggPSBmdW5jLndyYXBwZWRGdW5jdGlvbiA/IGZ1bmMu
d3JhcHBlZEZ1bmN0aW9uLl9fZW1iZXJfYXJpdHlfXyA6IGZ1bmMuX19lbWJlcl9hcml0eV9fOwot
Ci0gICAgICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggY29t
cHV0ZWQgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8vIHRoYXQgY2hlY2sgZm9yIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDIgdG8gZGV0ZXJtaW5lIGlmCi0gICAgICAgICAgICAgICAgLy8gdGhl
eSBhcmUgYmVpbmcgZ2V0IG9yIHNldCwgb25seSBwYXNzIHRoZSBvbGQgY2FjaGVkCi0gICAgICAg
ICAgICAgICAgLy8gdmFsdWUgaWYgdGhlIGNvbXB1dGVkIHByb3BlcnR5IG9wdHMgaW50byBhIHRo
aXJkCi0gICAgICAgICAgICAgICAgLy8gYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgaWYgKGZ1
bmNBcmdMZW5ndGggPT09IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gZnVuYy5jYWxs
KG9iaiwga2V5TmFtZSwgdmFsdWUsIGNhY2hlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGZ1bmNBcmdMZW5ndGggPT09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g
ZnVuYy5jYWxsKG9iaiwga2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgbnVsbCwg
Y2FjaGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBzZXQob2JqLCBrZXlOYW1lLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaGFkQ2FjaGVkVmFsdWUgJiYgY2FjaGVkVmFsdWUgPT09IHJldCkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIHdhdGNoZWQgPSBtZXRhLndhdGNoaW5nW2tleU5hbWVdOwotICAgICAg
ICAgICAgICAgIGlmICh3YXRjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5V2ls
bENoYW5nZShvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChoYWRDYWNoZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBjYWNoZVtrZXlO
YW1lXSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFkQ2FjaGVkVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZERlcGVuZGVudEtleXModGhpcywgb2JqLCBr
ZXlOYW1lLCBtZXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAocmV0ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
W2tleU5hbWVdID0gVU5ERUZJTkVEOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5TmFtZV0gPSByZXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2F0Y2hl
ZCkgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5hbWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fc3VzcGVuZGVkID0gb2xkU3VzcGVuZGVkOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLQotICAgICAgICAvKiBjYWxsZWQgYmVm
b3JlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gKi8KLSAgICAgICAgQ29tcHV0ZWRQcm9wZXJ0eVBy
b3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uKG9iaiwga2V5TmFtZSkgewotICAgICAgICAgICAg
dmFyIG1ldGEgPSBtZXRhRm9yKG9iaik7Ci0KLSAgICAgICAgICAgIGlmIChrZXlOYW1lIGluIG1l
dGEuY2FjaGUpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9i
aiwga2V5TmFtZSwgbWV0YSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlz
Ll9jYWNoZWFibGUpIHsKLSAgICAgICAgICAgICAgICBkZWxldGUgbWV0YS5jYWNoZVtrZXlOYW1l
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIHZhbHVl
IHRvIHJlc3RvcmUKLSAgICAgICAgfTsKLQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBU
aGlzIGhlbHBlciByZXR1cm5zIGEgbmV3IHByb3BlcnR5IGRlc2NyaXB0b3IgdGhhdCB3cmFwcyB0
aGUgcGFzc2VkCi0gICAgICAgICAgICAgIGNvbXB1dGVkIHByb3BlcnR5IGZ1bmN0aW9uLiBZb3Ug
Y2FuIHVzZSB0aGlzIGhlbHBlciB0byBkZWZpbmUgcHJvcGVydGllcwotICAgICAgICAgICAgICB3
aXRoIG1peGlucyBvciB2aWEgYEVtYmVyLmRlZmluZVByb3BlcnR5KClgLgotCi0gICAgICAgICAg
ICAgIFRoZSBmdW5jdGlvbiB5b3UgcGFzcyB3aWxsIGJlIHVzZWQgdG8gYm90aCBnZXQgYW5kIHNl
dCBwcm9wZXJ0eSB2YWx1ZXMuCi0gICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgYWNj
ZXB0IHR3byBwYXJhbWV0ZXJzLCBrZXkgYW5kIHZhbHVlLiBJZiB2YWx1ZSBpcyBub3QKLSAgICAg
ICAgICAgICAgdW5kZWZpbmVkIHlvdSBzaG91bGQgc2V0IHRoZSB2YWx1ZSBmaXJzdC4gSW4gZWl0
aGVyIGNhc2UgcmV0dXJuIHRoZQotICAgICAgICAgICAgICBjdXJyZW50IHZhbHVlIG9mIHRoZSBw
cm9wZXJ0eS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkCi0gICAgICAgICAgICAg
IEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgY29t
cHV0ZWQgcHJvcGVydHkgZnVuY3Rpb24uCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNv
bXB1dGVkUHJvcGVydHl9IHByb3BlcnR5IGRlc2NyaXB0b3IgaW5zdGFuY2UKLSAgICAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkKGZ1bmMpIHsKLSAgICAgICAgICAgIHZhciBh
cmdzOwotCi0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAg
ICAgICAgICBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAg
ZnVuYyA9IGFyZ3MucG9wKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBl
b2YgZnVuYyAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJl
ckVycm9yKCJDb21wdXRlZCBQcm9wZXJ0eSBkZWNsYXJlZCB3aXRob3V0IGEgcHJvcGVydHkgZnVu
Y3Rpb24iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNwID0gbmV3IENvbXB1
dGVkUHJvcGVydHkoZnVuYyk7Ci0KLSAgICAgICAgICAgIGlmIChhcmdzKSB7Ci0gICAgICAgICAg
ICAgICAgY3AucHJvcGVydHkuYXBwbHkoY3AsIGFyZ3MpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgUmV0dXJucyB0aGUgY2FjaGVkIHZhbHVlIGZvciBhIHByb3BlcnR5LCBpZiBvbmUgZXhpc3Rz
LgotICAgICAgICAgICAgICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHBlZWtpbmcgYXQgdGhlIHZh
bHVlIG9mIGEgY29tcHV0ZWQKLSAgICAgICAgICAgICAgcHJvcGVydHkgdGhhdCBpcyBnZW5lcmF0
ZWQgbGF6aWx5LCB3aXRob3V0IGFjY2lkZW50YWxseSBjYXVzaW5nCi0gICAgICAgICAgICAgIGl0
IHRvIGJlIGNyZWF0ZWQuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjYWNoZUZvcgotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogdGhl
IG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBjaGVjawotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30ga2V5IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3aG9zZSBjYWNoZWQg
dmFsdWUgeW91IHdhbnQKLSAgICAgICAgICAgICAgICB0byByZXR1cm4KLSAgICAgICAgICAgICAg
QHJldHVybiB7T2JqZWN0fSB0aGUgY2FjaGVkIHZhbHVlCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBjYWNoZUZvcihvYmosIGtleSkgewotICAgICAgICAgICAgdmFyIG1ldGEgPSBv
YmpbTUVUQV9LRVldLAotICAgICAgICAgICAgY2FjaGUgPSBtZXRhICYmIG1ldGEuY2FjaGUsCi0g
ICAgICAgICAgICByZXQgPSBjYWNoZSAmJiBjYWNoZVtrZXldOwotCi0gICAgICAgICAgICBpZiAo
cmV0ID09PSBVTkRFRklORUQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhY2hlRm9yLnNldCA9IGZ1bmN0aW9uKGNhY2hlLCBrZXksIHZhbHVlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIGNhY2hlW2tl
eV0gPSBVTkRFRklORUQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNh
Y2hlW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBj
YWNoZUZvci5nZXQgPSBmdW5jdGlvbihjYWNoZSwga2V5KSB7Ci0gICAgICAgICAgICB2YXIgcmV0
ID0gY2FjaGVba2V5XTsKLSAgICAgICAgICAgIGlmIChyZXQgPT09IFVOREVGSU5FRCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gcmV0OwotICAgICAgICB9OwotCi0gICAgICAgIGNhY2hlRm9yLnJlbW92ZSA9IGZ1
bmN0aW9uKGNhY2hlLCBrZXkpIHsKLSAgICAgICAgICAgIGNhY2hlW2tleV0gPSB1bmRlZmluZWQ7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX18uQ29tcHV0ZWRQcm9wZXJ0eSA9IENv
bXB1dGVkUHJvcGVydHk7Ci0gICAgICAgIF9fZXhwb3J0c19fLmNvbXB1dGVkID0gY29tcHV0ZWQ7
Ci0gICAgICAgIF9fZXhwb3J0c19fLmNhY2hlRm9yID0gY2FjaGVGb3I7Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1tZXRhbC9jb21wdXRlZF9tYWNyb3MiLAotICAgIFsiZW1iZXItbWV0YWwv
Y29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlf
c2V0IiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL2lzX2VtcHR5IiwgImVt
YmVyLW1ldGFsL2lzX25vbmUiLCAiZW1iZXItbWV0YWwvYWxpYXMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVu
ZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5n
ZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2YXIg
Y29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k0X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBpc0VtcHR5
ID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2Rl
cGVuZGVuY3k2X18uaXNOb25lOwotICAgICAgICB2YXIgYWxpYXMgPSBfX2RlcGVuZGVuY3k3X18u
YWxpYXM7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBhX3NsaWNlID0gW10uc2xpY2U7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhzZWxmLCBwcm9wZXJ0eU5hbWVzKSB7Ci0gICAgICAg
ICAgICB2YXIgcmV0ID0ge307Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3Bl
cnR5TmFtZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICByZXRbcHJvcGVydHlOYW1l
c1tpXV0gPSBnZXQoc2VsZiwgcHJvcGVydHlOYW1lc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVnaXN0
ZXJDb21wdXRlZChuYW1lLCBtYWNybykgewotICAgICAgICAgICAgY29tcHV0ZWRbbmFtZV0gPSBm
dW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFfc2xp
Y2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlZChkZXBl
bmRlbnRLZXksIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFjcm8u
YXBwbHkodGhpcywgYXJncyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Owot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJDb21wdXRlZFdpdGhQcm9wZXJ0
aWVzKG5hbWUsIG1hY3JvKSB7Ci0gICAgICAgICAgICBjb21wdXRlZFtuYW1lXSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gYV9zbGljZS5jYWxsKGFyZ3Vt
ZW50cyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29tcHV0ZWRGdW5jID0gY29tcHV0ZWQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWNyby5hcHBseSh0aGlzLCBb
Z2V0UHJvcGVydGllcyh0aGlzLCBwcm9wZXJ0aWVzKV0pOwotICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkRnVuYy5wcm9wZXJ0eS5hcHBseShjb21w
dXRlZEZ1bmMsIHByb3BlcnRpZXMpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0
cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGUgZGVwZW5kZW50Ci0gICAgICAgICAgICAgIHByb3BlcnR5
IGlzIG51bGwsIGFuIGVtcHR5IHN0cmluZywgZW1wdHkgYXJyYXksIG9yIGVtcHR5IGZ1bmN0aW9u
LgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIHZhciBUb0RvTGlzdCA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAg
ICAgICAgICAgICAgIGRvbmU6IEVtYmVyLmNvbXB1dGVkLmVtcHR5KCd0b2RvcycpCi0gICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciB0b2RvTGlzdCA9IFRvRG9MaXN0LmNyZWF0
ZSh7Ci0gICAgICAgICAgICAgICAgdG9kb3M6IFsnVW5pdCBUZXN0JywgJ0RvY3VtZW50YXRpb24n
LCAnUmVsZWFzZSddCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHRvZG9MaXN0
LmdldCgnZG9uZScpOyAvLyBmYWxzZQotICAgICAgICAgICAgICB0b2RvTGlzdC5nZXQoJ3RvZG9z
JykuY2xlYXIoKTsKLSAgICAgICAgICAgICAgdG9kb0xpc3QuZ2V0KCdkb25lJyk7IC8vIHRydWUK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQHNpbmNlIDEuNi4wCi0gICAgICAg
ICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZW1wdHkKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgot
ICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAg
IEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNo
IG5lZ2F0ZQotICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5Ci0g
ICAgICAgICAgICAqLwotICAgICAgICBjb21wdXRlZC5lbXB0eSA9IGZ1bmN0aW9uIChkZXBlbmRl
bnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlZChkZXBlbmRlbnRLZXkgKyAnLmxl
bmd0aCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNFbXB0eShnZXQo
dGhpcywgZGVwZW5kZW50S2V5KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMg
dHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGRlcGVuZGVudAotICAgICAgICAgICAgICBwcm9wZXJ0
eSBpcyBOT1QgbnVsbCwgYW4gZW1wdHkgc3RyaW5nLCBlbXB0eSBhcnJheSwgb3IgZW1wdHkgZnVu
Y3Rpb24uCi0KLSAgICAgICAgICAgICAgTm90ZTogV2hlbiB1c2luZyBgY29tcHV0ZWQubm90RW1w
dHlgIHRvIHdhdGNoIGFuIGFycmF5IG1ha2Ugc3VyZSB0bwotICAgICAgICAgICAgICB1c2UgdGhl
IGBhcnJheS5bXWAgc3ludGF4IHNvIHRoZSBjb21wdXRlZCBjYW4gc3Vic2NyaWJlIHRvIHRyYW5z
aXRpb25zCi0gICAgICAgICAgICAgIGZyb20gZW1wdHkgdG8gbm9uLWVtcHR5IHN0YXRlcy4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAg
ICAgICAgIGhhc1N0dWZmOiBFbWJlci5jb21wdXRlZC5ub3RFbXB0eSgnYmFja3BhY2suW10nKQot
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIu
Y3JlYXRlKHsgYmFja3BhY2s6IFsnRm9vZCcsICdTbGVlcGluZyBCYWcnLCAnVGVudCddIH0pOwot
Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNTdHVmZicpOyAgICAgICAgIC8vIHRydWUK
LSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ2JhY2twYWNrJykuY2xlYXIoKTsgLy8gW10KLSAg
ICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ2hhc1N0dWZmJyk7ICAgICAgICAgLy8gZmFsc2UKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5ub3RFbXB0
eQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9w
ZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVlIGlmCi0gICAgICAgICAg
ICAgIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBub3QgZW1wdHkuCi0gICAgICAgICAg
ICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVkKCdub3RFbXB0eScsIGZ1bmN0aW9uKGRlcGVu
ZGVudEtleSkgewotICAgICAgICAgICAgcmV0dXJuICFpc0VtcHR5KGdldCh0aGlzLCBkZXBlbmRl
bnRLZXkpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgY29t
cHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoZSBkZXBl
bmRlbnQKLSAgICAgICAgICAgICAgcHJvcGVydHkgaXMgbnVsbCBvciB1bmRlZmluZWQuIFRoaXMg
YXZvaWRzIGVycm9ycyBmcm9tIEpTTGludCBjb21wbGFpbmluZwotICAgICAgICAgICAgICBhYm91
dCB1c2Ugb2YgPT0sIHdoaWNoIGNhbiBiZSB0ZWNobmljYWxseSBjb25mdXNpbmcuCi0KLSAgICAg
ICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICBpc0h1bmdyeTogRW1iZXIuY29tcHV0ZWQubm9uZSgnZm9vZCcpCi0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQotICAg
ICAgICAgICAgICBoYW1zdGVyLmdldCgnaXNIdW5ncnknKTsgLy8gdHJ1ZQotICAgICAgICAgICAg
ICBoYW1zdGVyLnNldCgnZm9vZCcsICdCYW5hbmEnKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5n
ZXQoJ2lzSHVuZ3J5Jyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdmb29k
JywgbnVsbCk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdpc0h1bmdyeScpOyAvLyB0cnVl
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQubm9u
ZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9w
ZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2gKLSAgICAgICAgICAgICAgcmV0dXJucyB0cnVl
IGlmIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBudWxsIG9yIHVuZGVmaW5lZC4KLSAg
ICAgICAgICAgICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQoJ25vbmUnLCBmdW5jdGlvbihk
ZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBpc05vbmUoZ2V0KHRoaXMsIGRlcGVu
ZGVudEtleSkpOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBj
b21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdGhlIGludmVyc2UgYm9vbGVhbiB2YWx1ZQot
ICAgICAgICAgICAgICBvZiB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRoZSBkZXBlbmRlbnQgcHJv
cGVydHkuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgdmFyIFVzZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICBpc0Fub255bW91czogRW1iZXIuY29tcHV0ZWQubm90KCdsb2dnZWRJbicp
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciB1c2VyID0gVXNlci5jcmVh
dGUoe2xvZ2dlZEluOiBmYWxzZX0pOwotCi0gICAgICAgICAgICAgIHVzZXIuZ2V0KCdpc0Fub255
bW91cycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIHVzZXIuc2V0KCdsb2dnZWRJbicsIHRydWUp
OwotICAgICAgICAgICAgICB1c2VyLmdldCgnaXNBbm9ueW1vdXMnKTsgLy8gZmFsc2UKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5ub3QKLSAgICAg
ICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5k
ZW50S2V5Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNv
bXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMKLSAgICAgICAgICAgICAgaW52ZXJzZSBvZiB0
aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5Ci0gICAgICAgICAgICAqLwotICAgICAgICBy
ZWdpc3RlckNvbXB1dGVkKCdub3QnLCBmdW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAg
ICAgIHJldHVybiAhZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY29udmVydHMg
dGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgICAgICAgICAgICBpbnRvIGEgYm9v
bGVhbiB2YWx1ZS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgaGFz
QmFuYW5hczogRW1iZXIuY29tcHV0ZWQuYm9vbCgnbnVtQmFuYW5hcycpCi0gICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQot
ICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaGFzQmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAg
ICAgICAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDApOwotICAgICAgICAgICAgICBoYW1z
dGVyLmdldCgnaGFzQmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVyLnNl
dCgnbnVtQmFuYW5hcycsIDEpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaGFzQmFuYW5h
cycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgbnVs
bCk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNCYW5hbmFzJyk7IC8vIGZhbHNlCi0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuYm9vbAot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0
eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggY29udmVydHMKLSAgICAgICAgICAgICAgdG8gYm9v
bGVhbiB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5Ci0gICAgICAgICAgICAqLwotICAg
ICAgICByZWdpc3RlckNvbXB1dGVkKCdib29sJywgZnVuY3Rpb24oZGVwZW5kZW50S2V5KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gISFnZXQodGhpcywgZGVwZW5kZW50S2V5KTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2gg
bWF0Y2hlcyB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRoZQotICAgICAgICAgICAgICBkZXBlbmRl
bnQgcHJvcGVydHkgYWdhaW5zdCBhIGdpdmVuIFJlZ0V4cCwgcmV0dXJuaW5nIGB0cnVlYAotICAg
ICAgICAgICAgICBpZiB0aGV5IHZhbHVlcyBtYXRjaGVzIHRoZSBSZWdFeHAgYW5kIGBmYWxzZWAg
aWYgaXQgZG9lcyBub3QuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFVzZXIgPSBFbWJlci5PYmplY3QuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICBoYXNWYWxpZEVtYWlsOiBFbWJlci5jb21wdXRlZC5tYXRj
aCgnZW1haWwnLCAvXi4rQC4rXC4uKyQvKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICB2YXIgdXNlciA9IFVzZXIuY3JlYXRlKHtsb2dnZWRJbjogZmFsc2V9KTsKLQotICAgICAg
ICAgICAgICB1c2VyLmdldCgnaGFzVmFsaWRFbWFpbCcpOyAvLyBmYWxzZQotICAgICAgICAgICAg
ICB1c2VyLnNldCgnZW1haWwnLCAnJyk7Ci0gICAgICAgICAgICAgIHVzZXIuZ2V0KCdoYXNWYWxp
ZEVtYWlsJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIHVzZXIuc2V0KCdlbWFpbCcsICdlbWJl
cl9oYW1zdGVyQGV4YW1wbGUuY29tJyk7Ci0gICAgICAgICAgICAgIHVzZXIuZ2V0KCdoYXNWYWxp
ZEVtYWlsJyk7IC8vIHRydWUKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1l
dGhvZCBjb21wdXRlZC5tYXRjaAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHBhcmFtIHtS
ZWdFeHB9IHJlZ2V4cAotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3Bl
cnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBtYXRjaAotICAgICAgICAgICAgICB0aGUgb3Jp
Z2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGFnYWluc3QgYSBnaXZlbiBSZWdFeHAKLSAgICAgICAg
ICAgICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQoJ21hdGNoJywgZnVuY3Rpb24oZGVwZW5k
ZW50S2V5LCByZWdleHApIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldCh0aGlzLCBkZXBl
bmRlbnRLZXkpOwotICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycg
PyByZWdleHAudGVzdCh2YWx1ZSkgOiBmYWxzZTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYg
dGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgICAgICAgICAgICBpcyBlcXVhbCB0
byB0aGUgZ2l2ZW4gdmFsdWUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmpl
Y3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBuYXBUaW1lOiBFbWJlci5jb21wdXRlZC5lcXVh
bCgnc3RhdGUnLCAnc2xlZXB5JykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
dmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIu
Z2V0KCduYXBUaW1lJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdzdGF0
ZScsICdzbGVlcHknKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ25hcFRpbWUnKTsgLy8g
dHJ1ZQotICAgICAgICAgICAgICBoYW1zdGVyLnNldCgnc3RhdGUnLCAnaHVuZ3J5Jyk7Ci0gICAg
ICAgICAgICAgIGhhbXN0ZXIuZ2V0KCduYXBUaW1lJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZXF1YWwKLSAgICAgICAgICAg
ICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfE51bWJlcnxPYmplY3R9IHZhbHVlCi0gICAg
ICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3Bl
cnR5IHdoaWNoIHJldHVybnMgdHJ1ZSBpZgotICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmFs
dWUgZm9yIHByb3BlcnR5IGlzIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLSAgICAgICAgICAg
ICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQoJ2VxdWFsJywgZnVuY3Rpb24oZGVwZW5kZW50
S2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBkZXBlbmRlbnRLZXkp
ID09PSB2YWx1ZTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEg
Y29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZWQgZGVwZW5k
ZW50IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcHJvdmlkZWQg
dmFsdWUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICBoYXNUb29NYW55QmFuYW5hczogRW1iZXIuY29tcHV0ZWQuZ3QoJ251
bUJhbmFuYXMnLCAxMCkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGhh
bXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdo
YXNUb29NYW55QmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVyLnNldCgn
bnVtQmFuYW5hcycsIDMpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaGFzVG9vTWFueUJh
bmFuYXMnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMn
LCAxMSk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycpOyAv
LyB0cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0
ZWQuZ3QKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZQot
ICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBw
cm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUgaWYKLSAgICAgICAgICAgICAgdGhlIG9yaWdpbmFs
IHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBncmVhdGVyIHRoZW4gZ2l2ZW4gdmFsdWUuCi0gICAgICAg
ICAgICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVkKCdndCcsIGZ1bmN0aW9uKGRlcGVuZGVu
dEtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgZGVwZW5kZW50S2V5
KSA+IHZhbHVlOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBj
b21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVwZW5k
ZW50IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0
aGUgcHJvdmlkZWQgdmFsdWUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmpl
Y3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBoYXNUb29NYW55QmFuYW5hczogRW1iZXIuY29t
cHV0ZWQuZ3RlKCdudW1CYW5hbmFzJywgMTApCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBo
YW1zdGVyLmdldCgnaGFzVG9vTWFueUJhbmFuYXMnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAg
aGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCAzKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQo
J2hhc1Rvb01hbnlCYW5hbmFzJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0
KCdudW1CYW5hbmFzJywgMTApOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaGFzVG9vTWFu
eUJhbmFuYXMnKTsgLy8gdHJ1ZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBA
bWV0aG9kIGNvbXB1dGVkLmd0ZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHBhcmFtIHtO
dW1iZXJ9IHZhbHVlCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVy
dHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgdHJ1ZSBpZgotICAgICAgICAgICAg
ICB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhl
biBnaXZlbiB2YWx1ZS4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQo
J2d0ZScsIGZ1bmN0aW9uKGRlcGVuZGVudEtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVy
biBnZXQodGhpcywgZGVwZW5kZW50S2V5KSA+PSB2YWx1ZTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRy
dWUgaWYgdGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgICAgICAgICAgICBpcyBs
ZXNzIHRoYW4gdGhlIHByb3ZpZGVkIHZhbHVlLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgbmVlZHNNb3JlQmFuYW5hczog
RW1iZXIuY29tcHV0ZWQubHQoJ251bUJhbmFuYXMnLCAzKQotICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgICAgaGFtc3Rlci5nZXQoJ25lZWRzTW9yZUJhbmFuYXMnKTsgLy8gdHJ1ZQotICAgICAgICAg
ICAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDMpOwotICAgICAgICAgICAgICBoYW1zdGVy
LmdldCgnbmVlZHNNb3JlQmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVy
LnNldCgnbnVtQmFuYW5hcycsIDIpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnbmVlZHNN
b3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IEBtZXRob2QgY29tcHV0ZWQubHQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7
TnVtYmVyfSB2YWx1ZQotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3Bl
cnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUgaWYKLSAgICAgICAgICAg
ICAgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBpcyBsZXNzIHRoZW4gZ2l2ZW4gdmFs
dWUuCi0gICAgICAgICAgICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVkKCdsdCcsIGZ1bmN0
aW9uKGRlcGVuZGVudEtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywg
ZGVwZW5kZW50S2V5KSA8IHZhbHVlOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJv
dmlkZWQgZGVwZW5kZW50IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGlzIGxlc3MgdGhhbiBvciBl
cXVhbCB0byB0aGUgcHJvdmlkZWQgdmFsdWUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBF
bWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBuZWVkc01vcmVCYW5hbmFzOiBF
bWJlci5jb21wdXRlZC5sdGUoJ251bUJhbmFuYXMnLCAzKQotICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgICAgaGFtc3Rlci5nZXQoJ25lZWRzTW9yZUJhbmFuYXMnKTsgLy8gdHJ1ZQotICAgICAgICAg
ICAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDUpOwotICAgICAgICAgICAgICBoYW1zdGVy
LmdldCgnbmVlZHNNb3JlQmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVy
LnNldCgnbnVtQmFuYW5hcycsIDMpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnbmVlZHNN
b3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IEBtZXRob2QgY29tcHV0ZWQubHRlCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0g
e051bWJlcn0gdmFsdWUKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9w
ZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVlIGlmCi0gICAgICAgICAg
ICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkgaXMgbGVzcyBvciBlcXVhbCB0aGVu
IGdpdmVuIHZhbHVlLgotICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJDb21wdXRlZCgn
bHRlJywgZnVuY3Rpb24oZGVwZW5kZW50S2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJu
IGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpIDw9IHZhbHVlOwotICAgICAgICB9KTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHBlcmZvcm1zIGEg
bG9naWNhbCBgYW5kYCBvbiB0aGUKLSAgICAgICAgICAgICAgb3JpZ2luYWwgdmFsdWVzIGZvciB0
aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAgRXhhbXBs
ZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0
ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICByZWFkeUZvckNhbXA6
IEVtYmVyLmNvbXB1dGVkLmFuZCgnaGFzVGVudCcsICdoYXNCYWNrcGFjaycpCi0gICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsK
LQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgncmVhZHlGb3JDYW1wJyk7IC8vIGZhbHNlCi0g
ICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdoYXNUZW50JywgdHJ1ZSk7Ci0gICAgICAgICAgICAg
IGhhbXN0ZXIuZ2V0KCdyZWFkeUZvckNhbXAnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgaGFt
c3Rlci5zZXQoJ2hhc0JhY2twYWNrJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0
KCdyZWFkeUZvckNhbXAnKTsgLy8gdHJ1ZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBAbWV0aG9kIGNvbXB1dGVkLmFuZAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkqCi0gICAgICAgICAgICAgIEBy
ZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHBl
cmZvcm1zCi0gICAgICAgICAgICAgIGEgbG9naWNhbCBgYW5kYCBvbiB0aGUgdmFsdWVzIG9mIGFs
bCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZvciBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgKi8KLSAg
ICAgICAgcmVnaXN0ZXJDb21wdXRlZFdpdGhQcm9wZXJ0aWVzKCdhbmQnLCBmdW5jdGlvbihwcm9w
ZXJ0aWVzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcGVydGllcykgewotICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXByb3Bl
cnRpZXNba2V5XSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIHBlcmZvcm1zIGEgbG9naWNhbCBgb3JgIG9uIHRoZQotICAgICAgICAgICAgICBvcmln
aW5hbCB2YWx1ZXMgZm9yIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVydGllcy4KLQotICAg
ICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAg
ICAgIHJlYWR5Rm9yUmFpbjogRW1iZXIuY29tcHV0ZWQub3IoJ2hhc0phY2tldCcsICdoYXNVbWJy
ZWxsYScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0g
SGFtc3Rlci5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgncmVhZHlGb3JS
YWluJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdoYXNKYWNrZXQnLCB0
cnVlKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ3JlYWR5Rm9yUmFpbicpOyAvLyB0cnVl
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQub3IK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
ZGVwZW5kZW50S2V5KgotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3Bl
cnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBwZXJmb3JtcwotICAgICAgICAgICAgICBhIGxv
Z2ljYWwgYG9yYCBvbiB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgb3JpZ2luYWwgdmFsdWVzIGZvciBw
cm9wZXJ0aWVzLgotICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJDb21wdXRlZFdpdGhQ
cm9wZXJ0aWVzKCdvcicsIGZ1bmN0aW9uKHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMu
aGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcm9wZXJ0aWVzW2tleV0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdGhlIGZpcnN0IHRydXRo
eSB2YWx1ZQotICAgICAgICAgICAgICBmcm9tIGEgbGlzdCBvZiBkZXBlbmRlbnQgcHJvcGVydGll
cy4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAg
ICAgICAgICAgICAgIGhhc0Nsb3RoZXM6IEVtYmVyLmNvbXB1dGVkLmFueSgnaGF0JywgJ3NoaXJ0
JykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGhhbXN0ZXIgPSBIYW1z
dGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNDbG90aGVzJyk7
IC8vIG51bGwKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ3NoaXJ0JywgJ0hhd2FpaWFuIFNo
aXJ0Jyk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNDbG90aGVzJyk7IC8vICdIYXdh
aWlhbiBTaGlydCcKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBj
b21wdXRlZC5hbnkKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gZGVwZW5kZW50S2V5KgotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5D
b21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zCi0gICAgICAg
ICAgICAgIHRoZSBmaXJzdCB0cnV0aHkgdmFsdWUgb2YgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVz
LgotICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJDb21wdXRlZFdpdGhQcm9wZXJ0aWVz
KCdhbnknLCBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkg
aW4gcHJvcGVydGllcykgewotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blBy
b3BlcnR5KGtleSkgJiYgcHJvcGVydGllc1trZXldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwcm9wZXJ0aWVzW2tleV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0aGUgYXJyYXkgb2Yg
dmFsdWVzCi0gICAgICAgICAgICAgIGZvciB0aGUgcHJvdmlkZWQgZGVwZW5kZW50IHByb3BlcnRp
ZXMuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICBjbG90aGVzOiBFbWJlci5jb21wdXRlZC5jb2xsZWN0KCdoYXQnLCAnc2hp
cnQnKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhh
bXN0ZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ2Nsb3RoZXMnKTsg
Ly8gW251bGwsIG51bGxdCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdoYXQnLCAnQ2FtcCBI
YXQnKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ3NoaXJ0JywgJ0NhbXAgU2hpcnQnKTsK
LSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ2Nsb3RoZXMnKTsgLy8gWydDYW1wIEhhdCcsICdD
YW1wIFNoaXJ0J10KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBj
b21wdXRlZC5jb2xsZWN0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleSoKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1i
ZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggbWFwcwotICAgICAg
ICAgICAgICB2YWx1ZXMgb2YgYWxsIHBhc3NlZCBwcm9wZXJ0aWVzIGluIHRvIGFuIGFycmF5Lgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJDb21wdXRlZFdpdGhQcm9wZXJ0aWVzKCdj
b2xsZWN0JywgZnVuY3Rpb24ocHJvcGVydGllcykgewotICAgICAgICAgICAgdmFyIHJlcyA9IFtd
OwotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpc05vbmUocHJvcGVydGllc1trZXldKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzLnB1c2gobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2tleV0pOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJlczsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IENyZWF0ZXMgYSBuZXcgcHJvcGVydHkgdGhhdCBpcyBhbiBhbGlhcyBmb3IgYW5vdGhlciBwcm9w
ZXJ0eQotICAgICAgICAgICAgICBvbiBhbiBvYmplY3QuIENhbGxzIHRvIGBnZXRgIG9yIGBzZXRg
IHRoaXMgcHJvcGVydHkgYmVoYXZlIGFzCi0gICAgICAgICAgICAgIHRob3VnaCB0aGV5IHdlcmUg
Y2FsbGVkIG9uIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICBuYW1lOiAnQWxleCBNYXRjaG5lZXInLAotICAgICAgICAgICAgICAg
IG5vbWVuOiBFbWJlci5jb21wdXRlZC5hbGlhcygnbmFtZScpCi0gICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgIHZhciBhbGV4ID0gUGVyc29uLmNyZWF0ZSgpOwotCi0gICAgICAgICAg
ICAgIGFsZXguZ2V0KCdub21lbicpOyAvLyAnQWxleCBNYXRjaG5lZXInCi0gICAgICAgICAgICAg
IGFsZXguZ2V0KCduYW1lJyk7ICAvLyAnQWxleCBNYXRjaG5lZXInCi0KLSAgICAgICAgICAgICAg
YWxleC5zZXQoJ25vbWVuJywgJ0BtYWNodHknKTsKLSAgICAgICAgICAgICAgYWxleC5nZXQoJ25h
bWUnKTsgIC8vICdAbWFjaHR5JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBA
bWV0aG9kIGNvbXB1dGVkLmFsaWFzCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcmV0dXJu
IHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBjcmVhdGVz
IGFuCi0gICAgICAgICAgICAgIGFsaWFzIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVy
dHkuCi0gICAgICAgICAgICAqLwotICAgICAgICBjb21wdXRlZC5hbGlhcyA9IGFsaWFzOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBXaGVyZSBgY29tcHV0ZWQuYWxpYXNgIGFsaWFzZXMg
YGdldGAgYW5kIGBzZXRgLCBhbmQgYWxsb3dzIGZvciBiaWRpcmVjdGlvbmFsCi0gICAgICAgICAg
ICAgIGRhdGEgZmxvdywgYGNvbXB1dGVkLm9uZVdheWAgb25seSBwcm92aWRlcyBhbiBhbGlhc2Vk
IGBnZXRgLiBUaGUgYHNldGAgd2lsbAotICAgICAgICAgICAgICBub3QgbXV0YXRlIHRoZSB1cHN0
cmVhbSBwcm9wZXJ0eSwgcmF0aGVyIGNhdXNlcyB0aGUgY3VycmVudCBwcm9wZXJ0eSB0bwotICAg
ICAgICAgICAgICBiZWNvbWUgdGhlIHZhbHVlIHNldC4gVGhpcyBjYXVzZXMgdGhlIGRvd25zdHJl
YW0gcHJvcGVydHkgdG8gcGVybWFuZW50bHkKLSAgICAgICAgICAgICAgZGl2ZXJnZSBmcm9tIHRo
ZSB1cHN0cmVhbSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgVXNlciA9IEVtYmVyLk9iamVj
dC5leHRlbmQoewotICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogbnVsbCwKLSAgICAgICAgICAg
ICAgICBsYXN0TmFtZTogbnVsbCwKLSAgICAgICAgICAgICAgICBuaWNrTmFtZTogRW1iZXIuY29t
cHV0ZWQub25lV2F5KCdmaXJzdE5hbWUnKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICB2YXIgdGVkZHkgPSBVc2VyLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgZmlyc3ROYW1l
OiAnVGVkZHknLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiAgJ1plZW5ueScKLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdGVkZHkuZ2V0KCduaWNrTmFtZScpOyAgICAgICAg
ICAgICAgLy8gJ1RlZGR5JwotICAgICAgICAgICAgICB0ZWRkeS5zZXQoJ25pY2tOYW1lJywgJ1Rl
ZGR5QmVhcicpOyAvLyAnVGVkZHlCZWFyJwotICAgICAgICAgICAgICB0ZWRkeS5nZXQoJ2ZpcnN0
TmFtZScpOyAgICAgICAgICAgICAvLyAnVGVkZHknCi0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQub25lV2F5Ci0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3
aGljaCBjcmVhdGVzIGEKLSAgICAgICAgICAgICAgb25lIHdheSBjb21wdXRlZCBwcm9wZXJ0eSB0
byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5LgotICAgICAgICAgICAgKi8KLSAgICAg
ICAgY29tcHV0ZWQub25lV2F5ID0gZnVuY3Rpb24oZGVwZW5kZW50S2V5KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYWxpYXMoZGVwZW5kZW50S2V5KS5vbmVXYXkoKTsKLSAgICAgICAgfTsKLQotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBtb3JlIHNlbWFudGljYWxseSBt
ZWFuaW5nZnVsIGFsaWFzIG9mIGBjb21wdXRlZC5vbmVXYXlgLAotICAgICAgICAgICAgICAgIHdo
b3NlIG5hbWUgaXMgc29tZXdoYXQgYW1iaWd1b3VzIGFzIHRvIHdoaWNoIGRpcmVjdGlvbiB0aGUg
ZGF0YSBmbG93cy4KLQotICAgICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQucmVhZHMKLSAg
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJv
cGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNyZWF0ZXMgYQotICAgICAgICAgICAgICAg
ICAgb25lIHdheSBjb21wdXRlZCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHBy
b3BlcnR5LgotICAgICAgICAgICAgICAgKi8KLSAgICAgICAgY29tcHV0ZWQucmVhZHMgPSBjb21w
dXRlZC5vbmVXYXk7Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgV2hlcmUgYGNvbXB1
dGVkLm9uZVdheWAgcHJvdmlkZXMgb25lV2F5IGJpbmRpbmdzLCBgY29tcHV0ZWQucmVhZE9ubHlg
IHByb3ZpZGVzCi0gICAgICAgICAgICAgIGEgcmVhZE9ubHkgb25lIHdheSBiaW5kaW5nLiBWZXJ5
IG9mdGVuIHdoZW4gdXNpbmcgYGNvbXB1dGVkLm9uZVdheWAgb25lIGRvZXMKLSAgICAgICAgICAg
ICAgbm90IGFsc28gd2FudCBjaGFuZ2VzIHRvIHByb3BvZ2F0ZSBiYWNrIHVwLCBhcyB0aGV5IHdp
bGwgcmVwbGFjZSB0aGUgdmFsdWUuCi0KLSAgICAgICAgICAgICAgVGhpcyBwcmV2ZW50cyB0aGUg
cmV2ZXJzZSBmbG93LCBhbmQgYWxzbyB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gaXQgb2NjdXJz
LgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIHZhciBVc2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgZmlyc3ROYW1lOiBudWxsLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBudWxs
LAotICAgICAgICAgICAgICAgIG5pY2tOYW1lOiBFbWJlci5jb21wdXRlZC5yZWFkT25seSgnZmly
c3ROYW1lJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHRlZGR5ID0g
VXNlci5jcmVhdGUoewotICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogJ1RlZGR5JywKLSAgICAg
ICAgICAgICAgICBsYXN0TmFtZTogICdaZWVubnknCi0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIHRlZGR5LmdldCgnbmlja05hbWUnKTsgICAgICAgICAgICAgIC8vICdUZWRkeScK
LSAgICAgICAgICAgICAgdGVkZHkuc2V0KCduaWNrTmFtZScsICdUZWRkeUJlYXInKTsgLy8gdGhy
b3dzIEV4Y2VwdGlvbgotICAgICAgICAgICAgICAvLyB0aHJvdyBuZXcgRW1iZXIuRXJyb3IoJ0Nh
bm5vdCBTZXQ6IG5pY2tOYW1lIG9uOiA8VXNlcjplbWJlcjI3Mjg4PicgKTtgCi0gICAgICAgICAg
ICAgIHRlZGR5LmdldCgnZmlyc3ROYW1lJyk7ICAgICAgICAgICAgIC8vICdUZWRkeScKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5yZWFkT25seQot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0
eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggY3JlYXRlcyBhCi0gICAgICAgICAgICAgIG9uZSB3
YXkgY29tcHV0ZWQgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eS4K
LSAgICAgICAgICAgICAgQHNpbmNlIDEuNS4wCi0gICAgICAgICAgICAqLwotICAgICAgICBjb21w
dXRlZC5yZWFkT25seSA9IGZ1bmN0aW9uKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgcmV0
dXJuIGFsaWFzKGRlcGVuZGVudEtleSkucmVhZE9ubHkoKTsKLSAgICAgICAgfTsKLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBhY3RzIGxpa2UgYSBz
dGFuZGFyZCBnZXR0ZXIgYW5kIHNldHRlciwKLSAgICAgICAgICAgICAgYnV0IHJldHVybnMgdGhl
IHZhbHVlIGF0IHRoZSBwcm92aWRlZCBgZGVmYXVsdFBhdGhgIGlmIHRoZQotICAgICAgICAgICAg
ICBwcm9wZXJ0eSBpdHNlbGYgaGFzIG5vdCBiZWVuIHNldCB0byBhIHZhbHVlCi0KLSAgICAgICAg
ICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB3
aXNoTGlzdDogRW1iZXIuY29tcHV0ZWQuZGVmYXVsdFRvKCdmYXZvcml0ZUZvb2QnKQotICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRl
KHsgZmF2b3JpdGVGb29kOiAnQmFuYW5hJyB9KTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdl
dCgnd2lzaExpc3QnKTsgICAgICAgICAgICAgICAgICAgICAvLyAnQmFuYW5hJwotICAgICAgICAg
ICAgICBoYW1zdGVyLnNldCgnd2lzaExpc3QnLCAnTW9yZSBVbml0IFRlc3RzJyk7Ci0gICAgICAg
ICAgICAgIGhhbXN0ZXIuZ2V0KCd3aXNoTGlzdCcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdN
b3JlIFVuaXQgVGVzdHMnCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdmYXZvcml0ZUZvb2Qn
KTsgICAgICAgICAgICAgICAgIC8vICdCYW5hbmEnCi0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZGVmYXVsdFRvCi0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRQYXRoCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIGFjdHMgbGlrZQotICAgICAgICAgICAgICBhIHN0YW5kYXJkIGdldHRlciBhbmQgc2V0
dGVyLCBidXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIGZyb20gYGRlZmF1bHRQYXRoYC4KLSAgICAg
ICAgICAgICovCi0gICAgICAgIC8vIEVTNlRPRE86IGNvbXB1dGVkIHNob3VsZCBoYXZlIGl0cyBv
d24gZXhwb3J0IHBhdGggc28geW91IGNhbiBkbyBpbXBvcnQge2RlZmF1bHRUb30gZnJvbSBjb21w
dXRlZAotICAgICAgICBjb21wdXRlZC5kZWZhdWx0VG8gPSBmdW5jdGlvbihkZWZhdWx0UGF0aCkg
ewotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkKGZ1bmN0aW9uKGtleSwgbmV3VmFsdWUsIGNh
Y2hlZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBkZWZhdWx0UGF0aCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSAhPSBudWxs
ID8gbmV3VmFsdWUgOiBnZXQodGhpcywgZGVmYXVsdFBhdGgpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgcHJv
cGVydHkgdGhhdCBpcyBhbiBhbGlhcyBmb3IgYW5vdGhlciBwcm9wZXJ0eQotICAgICAgICAgICAg
ICBvbiBhbiBvYmplY3QuIENhbGxzIHRvIGBnZXRgIG9yIGBzZXRgIHRoaXMgcHJvcGVydHkgYmVo
YXZlIGFzCi0gICAgICAgICAgICAgIHRob3VnaCB0aGV5IHdlcmUgY2FsbGVkIG9uIHRoZSBvcmln
aW5hbCBwcm9wZXJ0eSwgYnV0IGFsc28KLSAgICAgICAgICAgICAgcHJpbnQgYSBkZXByZWNhdGlv
biB3YXJuaW5nLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZGVwcmVjYXRpbmdB
bGlhcwotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQ
cm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggY3JlYXRlcyBhbgotICAgICAgICAgICAg
ICBhbGlhcyB3aXRoIGEgZGVwcmVjYXRpb24gdG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9w
ZXJ0eS4KLSAgICAgICAgICAgICovCi0gICAgICAgIGNvbXB1dGVkLmRlcHJlY2F0aW5nQWxpYXMg
PSBmdW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlZChk
ZXBlbmRlbnRLZXksIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBFbWJl
ci5kZXByZWNhdGUoJ1VzYWdlIG9mIGAnICsga2V5ICsgJ2AgaXMgZGVwcmVjYXRlZCwgdXNlIGAn
ICsgZGVwZW5kZW50S2V5ICsgJ2AgaW5zdGVhZC4nKTsKLQotICAgICAgICAgICAgICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgZGVw
ZW5kZW50S2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRo
aXMsIGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9jb3JlIiwKLSAgICBb
ImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qZ2xvYmFscyBFbWJlcjp0cnVlLEVtOnRydWUsRU5WLEVtYmVyRU5W
LE1ldGFtb3JwaEVOVjp0cnVlICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxl
IGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAgICAgICAq
LwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbGwgRW1iZXIgbWV0aG9kcyBhbmQgZnVu
Y3Rpb25zIGFyZSBkZWZpbmVkIGluc2lkZSBvZiB0aGlzIG5hbWVzcGFjZS4gWW91Ci0gICAgICAg
ICAgICAgIGdlbmVyYWxseSBzaG91bGQgbm90IGFkZCBuZXcgcHJvcGVydGllcyB0byB0aGlzIG5h
bWVzcGFjZSBhcyBpdCBtYXkgYmUKLSAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4gYnkgZnV0dXJl
IHZlcnNpb25zIG9mIEVtYmVyLgotCi0gICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhl
IHNob3J0aGFuZCBgRW1gIGluc3RlYWQgb2YgYEVtYmVyYC4KLQotICAgICAgICAgICAgICBFbWJl
ci1SdW50aW1lIGlzIGEgZnJhbWV3b3JrIHRoYXQgcHJvdmlkZXMgY29yZSBmdW5jdGlvbnMgZm9y
IEVtYmVyIGluY2x1ZGluZwotICAgICAgICAgICAgICBjcm9zcy1wbGF0Zm9ybSBmdW5jdGlvbnMs
IHN1cHBvcnQgZm9yIHByb3BlcnR5IG9ic2VydmluZyBhbmQgb2JqZWN0cy4gSXRzCi0gICAgICAg
ICAgICAgIGZvY3VzIGlzIG9uIHNtYWxsIHNpemUgYW5kIHBlcmZvcm1hbmNlLiBZb3UgY2FuIHVz
ZSB0aGlzIGluIHBsYWNlIG9mIG9yCi0gICAgICAgICAgICAgIGFsb25nLXNpZGUgb3RoZXIgY3Jv
c3MtcGxhdGZvcm0gbGlicmFyaWVzIHN1Y2ggYXMgalF1ZXJ5LgotCi0gICAgICAgICAgICAgIFRo
ZSBjb3JlIFJ1bnRpbWUgZnJhbWV3b3JrIGlzIGJhc2VkIG9uIHRoZSBqUXVlcnkgQVBJIHdpdGgg
YSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgRW1iZXIKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAg
ICAgICAgICBAdmVyc2lvbiAxLjcuMC1iZXRhLjQrcHJlLjRiNmZmMTQzCi0gICAgICAgICAgICAq
LwotCi0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyKSB7Ci0gICAgICAg
ICAgICAvLyBDcmVhdGUgY29yZSBvYmplY3QuIE1ha2UgaXQgYWN0IGxpa2UgYW4gaW5zdGFuY2Ug
b2YgRW1iZXIuTmFtZXNwYWNlIHNvIHRoYXQKLSAgICAgICAgICAgIC8vIG9iamVjdHMgYXNzaWdu
ZWQgdG8gaXQgYXJlIGdpdmVuIGEgc2FuZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gICAgICAg
ICAgICBFbWJlciA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGVmYXVsdCBpbXBvcnRz
LCBleHBvcnRzIGFuZCBsb29rdXAgdG8gdGhlIGdsb2JhbCBvYmplY3Q7Ci0gICAgICAgIHZhciBp
bXBvcnRzID0gRW1iZXIuaW1wb3J0cyA9IEVtYmVyLmltcG9ydHMgfHwgdGhpczsKLSAgICAgICAg
dmFyIGV4cG9ydHMgPSBFbWJlci5leHBvcnRzID0gRW1iZXIuZXhwb3J0cyB8fCB0aGlzOwotICAg
ICAgICB2YXIgbG9va3VwID0gRW1iZXIubG9va3VwID0gRW1iZXIubG9va3VwIHx8IHRoaXM7Ci0K
LSAgICAgICAgLy8gYWxpYXNlcyBuZWVkZWQgdG8ga2VlcCBtaW5pZmllcnMgZnJvbSByZW1vdmlu
ZyB0aGUgZ2xvYmFsIGNvbnRleHQKLSAgICAgICAgZXhwb3J0cy5FbSA9IGV4cG9ydHMuRW1iZXIg
PSBFbWJlcjsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlc2UgYXJlIHNldCB3aGV0aGVyIEVt
YmVyIHdhcyBhbHJlYWR5IGRlZmluZWQgb3Igbm90Ci0KLSAgICAgICAgRW1iZXIuaXNOYW1lc3Bh
Y2UgPSB0cnVlOwotCi0gICAgICAgIEVtYmVyLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gIkVtYmVyIjsKLSAgICAgICAgfTsKLQotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBAcHJvcGVydHkgVkVSU0lPTgotICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcK
LSAgICAgICAgICAgICAgQGRlZmF1bHQgJzEuNy4wLWJldGEuNCtwcmUuNGI2ZmYxNDMnCi0gICAg
ICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAgICAgIEVtYmVyLlZFUlNJT04g
PSAnMS43LjAtYmV0YS40K3ByZS40YjZmZjE0Myc7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFN0YW5kYXJkIGVudmlyb25tZW50YWwgdmFyaWFibGVzLiBZb3UgY2FuIGRlZmluZSB0aGVz
ZSBpbiBhIGdsb2JhbCBgRW1iZXJFTlZgCi0gICAgICAgICAgICAgIHZhcmlhYmxlIGJlZm9yZSBs
b2FkaW5nIEVtYmVyIHRvIGNvbnRyb2wgdmFyaW91cyBjb25maWd1cmF0aW9uIHNldHRpbmdzLgot
Ci0gICAgICAgICAgICAgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIg
dmVyc2lvbnMgb2YgRW1iZXIgdGhlIGdsb2JhbCBgRU5WYAotICAgICAgICAgICAgICB2YXJpYWJs
ZSB3aWxsIGJlIHVzZWQgaWYgYEVtYmVyRU5WYCBpcyBub3QgZGVmaW5lZC4KLQotICAgICAgICAg
ICAgICBAcHJvcGVydHkgRU5WCi0gICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAg
ICovCi0KLSAgICAgICAgaWYgKEVtYmVyLkVOVikgewotICAgICAgICAgICAgLy8gZG8gbm90aGlu
ZyBpZiBFbWJlci5FTlYgaXMgYWxyZWFkeSBzZXR1cAotICAgICAgICB9IGVsc2UgaWYgKCd1bmRl
ZmluZWQnICE9PSB0eXBlb2YgRW1iZXJFTlYpIHsKLSAgICAgICAgICAgIEVtYmVyLkVOViA9IEVt
YmVyRU5WOwotICAgICAgICB9IGVsc2UgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgRU5WKSB7
Ci0gICAgICAgICAgICBFbWJlci5FTlYgPSBFTlY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBFbWJlci5FTlYgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIEVtYmVyLmNvbmZpZyA9
IEVtYmVyLmNvbmZpZyB8fCB7fTsKLQotICAgICAgICAvLyBXZSBkaXNhYmxlIHRoZSBSQU5HRSBB
UEkgYnkgZGVmYXVsdCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucwotICAgICAgICBpZiAoJ3VuZGVm
aW5lZCcgPT09IHR5cGVvZiBFbWJlci5FTlYuRElTQUJMRV9SQU5HRV9BUEkpIHsKLSAgICAgICAg
ICAgIEVtYmVyLkVOVi5ESVNBQkxFX1JBTkdFX0FQSSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoInVuZGVmaW5lZCIgPT09IHR5cGVvZiBNZXRhbW9ycGhFTlYpIHsKLSAgICAgICAg
ICAgIGV4cG9ydHMuTWV0YW1vcnBoRU5WID0ge307Ci0gICAgICAgIH0KLQotICAgICAgICBNZXRh
bW9ycGhFTlYuRElTQUJMRV9SQU5HRV9BUEkgPSBFbWJlci5FTlYuRElTQUJMRV9SQU5HRV9BUEk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEhhc2ggb2YgZW5hYmxlZCBDYW5hcnkgZmVh
dHVyZXMuIEFkZCB0byBiZWZvcmUgY3JlYXRpbmcgeW91ciBhcHBsaWNhdGlvbi4KLQotICAgICAg
ICAgICAgICBZb3UgY2FuIGFsc28gZGVmaW5lIGBFTlYuRkVBVFVSRVNgIGlmIHlvdSBuZWVkIHRv
IGVuYWJsZSBmZWF0dXJlcyBmbGFnZ2VkIGF0IHJ1bnRpbWUuCi0KLSAgICAgICAgICAgICAgQGNs
YXNzIEZFQVRVUkVTCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAg
ICAgQHN0YXRpYwotICAgICAgICAgICAgICBAc2luY2UgMS4xLjAKLSAgICAgICAgICAgICovCi0K
LSAgICAgICAgRW1iZXIuRkVBVFVSRVMgPSBFbWJlci5FTlYuRkVBVFVSRVMgfHwge307Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIFRlc3QgdGhhdCBhIGZlYXR1cmUgaXMgZW5hYmxlZC4g
UGFyc2VkIGJ5IEVtYmVyJ3MgYnVpbGQgdG9vbHMgdG8gbGVhdmUKLSAgICAgICAgICAgICAgZXhw
ZXJpbWVudGFsIGZlYXR1cmVzIG91dCBvZiBiZXRhL3N0YWJsZSBidWlsZHMuCi0KLSAgICAgICAg
ICAgICAgWW91IGNhbiBkZWZpbmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6
Ci0KLSAgICAgICAgICAgICAgKiBgRU5WLkVOQUJMRV9BTExfRkVBVFVSRVNgIC0gZm9yY2UgYWxs
IGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQuCi0gICAgICAgICAgICAgICogYEVOVi5FTkFCTEVfT1BU
SU9OQUxfRkVBVFVSRVNgIC0gZW5hYmxlIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgbm90IGJlZW4g
ZXhwbGljaXRseQotICAgICAgICAgICAgICAgIGVuYWJsZWQvZGlzYWJsZWQuCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCBpc0VuYWJsZWQKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZl
YXR1cmUKLSAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgQGZv
ciBFbWJlci5GRUFUVVJFUwotICAgICAgICAgICAgICBAc2luY2UgMS4xLjAKLSAgICAgICAgICAg
ICovCi0KLSAgICAgICAgRW1iZXIuRkVBVFVSRVMuaXNFbmFibGVkID0gZnVuY3Rpb24oZmVhdHVy
ZSkgewotICAgICAgICAgICAgdmFyIGZlYXR1cmVWYWx1ZSA9IEVtYmVyLkZFQVRVUkVTW2ZlYXR1
cmVdOwotCi0gICAgICAgICAgICBpZiAoRW1iZXIuRU5WLkVOQUJMRV9BTExfRkVBVFVSRVMpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmVh
dHVyZVZhbHVlID09PSB0cnVlIHx8IGZlYXR1cmVWYWx1ZSA9PT0gZmFsc2UgfHwgZmVhdHVyZVZh
bHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVl
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChFbWJlci5FTlYuRU5BQkxFX09QVElPTkFMX0ZFQVRV
UkVTKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fTsKLQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIEJPT1RTVFJBUAotICAgICAgICAvLwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgRW1iZXIgc2hvdWxk
IGVuaGFuY2Ugc29tZSBidWlsdC1pbiBvYmplY3QgcHJvdG90eXBlcyB0bwotICAgICAgICAgICAg
ICBwcm92aWRlIGEgbW9yZSBmcmllbmRseSBBUEkuIElmIGVuYWJsZWQsIGEgZmV3IG1ldGhvZHMg
d2lsbCBiZSBhZGRlZCB0bwotICAgICAgICAgICAgICBgRnVuY3Rpb25gLCBgU3RyaW5nYCwgYW5k
IGBBcnJheWAuIGBPYmplY3QucHJvdG90eXBlYCB3aWxsIG5vdCBiZSBlbmhhbmNlZCwKLSAgICAg
ICAgICAgICAgd2hpY2ggaXMgdGhlIG9uZSB0aGF0IGNhdXNlcyBtb3N0IHRyb3VibGUgZm9yIHBl
b3BsZS4KLQotICAgICAgICAgICAgICBJbiBnZW5lcmFsIHdlIHJlY29tbWVuZCBsZWF2aW5nIHRo
aXMgb3B0aW9uIHNldCB0byB0cnVlIHNpbmNlIGl0IHJhcmVseQotICAgICAgICAgICAgICBjb25m
bGljdHMgd2l0aCBvdGhlciBjb2RlLiBJZiB5b3UgbmVlZCB0byB0dXJuIGl0IG9mZiBob3dldmVy
LCB5b3UgY2FuCi0gICAgICAgICAgICAgIGRlZmluZSBhbiBgRU5WLkVYVEVORF9QUk9UT1RZUEVT
YCBjb25maWcgdG8gZGlzYWJsZSBpdC4KLQotICAgICAgICAgICAgICBAcHJvcGVydHkgRVhURU5E
X1BST1RPVFlQRVMKLSAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICBA
ZGVmYXVsdCB0cnVlCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICovCi0g
ICAgICAgIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID0gRW1iZXIuRU5WLkVYVEVORF9QUk9UT1RZ
UEVTOwotCi0gICAgICAgIGlmICh0eXBlb2YgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09ICd1
bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9IHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0
aGVyIEVtYmVyIGxvZ3MgYSBmdWxsIHN0YWNrIHRyYWNlIGR1cmluZyBkZXByZWNhdGlvbiB3YXJu
aW5ncwotCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBMT0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNB
VElPTgotICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgIEBkZWZhdWx0
IHRydWUKLSAgICAgICAgICAgICovCi0gICAgICAgIEVtYmVyLkxPR19TVEFDS1RSQUNFX09OX0RF
UFJFQ0FUSU9OID0gKEVtYmVyLkVOVi5MT0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTiAhPT0g
ZmFsc2UpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIg
RW1iZXIgc2hvdWxkIGFkZCBFQ01BU2NyaXB0IDUgc2hpbXMgdG8gb2xkZXIgYnJvd3NlcnMuCi0K
LSAgICAgICAgICAgICAgQHByb3BlcnR5IFNISU1fRVM1Ci0gICAgICAgICAgICAgIEB0eXBlIEJv
b2xlYW4KLSAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMKLSAg
ICAgICAgICAgICovCi0gICAgICAgIEVtYmVyLlNISU1fRVM1ID0gKEVtYmVyLkVOVi5TSElNX0VT
NSA9PT0gZmFsc2UpID8gZmFsc2UgOiBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUzsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIEVtYmVyIGxvZ3MgaW5mbyBh
Ym91dCB2ZXJzaW9uIG9mIHVzZWQgbGlicmFyaWVzCi0KLSAgICAgICAgICAgICAgQHByb3BlcnR5
IExPR19WRVJTSU9OCi0gICAgICAgICAgICAgIEB0eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAg
QGRlZmF1bHQgdHJ1ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuTE9HX1ZFUlNJT04g
PSAoRW1iZXIuRU5WLkxPR19WRVJTSU9OID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIEVtcHR5IGZ1bmN0aW9uLiBVc2VmdWwgZm9yIHNvbWUg
b3BlcmF0aW9ucy4gQWx3YXlzIHJldHVybnMgYHRoaXNgLgotCi0gICAgICAgICAgICAgIEBtZXRo
b2QgSwotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmpl
Y3R9Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgSyA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH07Ci0gICAgICAgIHZhciBLID0gSzsKLSAgICAg
ICAgX19leHBvcnRzX18uSyA9IEs7Ci0gICAgICAgIEVtYmVyLksgPSBLOwotICAgICAgICAvL1RP
RE86IEVTNiBHTE9CTCBUT0RPCi0KLSAgICAgICAgLy8gU3R1YiBvdXQgdGhlIG1ldGhvZHMgZGVm
aW5lZCBieSB0aGUgZW1iZXItZGVidWcgcGFja2FnZSBpbiBjYXNlIGl0J3Mgbm90IGxvYWRlZAot
Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyLmFzc2VydCkgewotICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0ID0gRW1iZXIuSzsKLSAgICAgICAgfQotICAgICAgICBpZiAo
J3VuZGVmaW5lZCcgPT09IHR5cGVvZiBFbWJlci53YXJuKSB7Ci0gICAgICAgICAgICBFbWJlci53
YXJuID0gRW1iZXIuSzsKLSAgICAgICAgfQotICAgICAgICBpZiAoJ3VuZGVmaW5lZCcgPT09IHR5
cGVvZiBFbWJlci5kZWJ1ZykgewotICAgICAgICAgICAgRW1iZXIuZGVidWcgPSBFbWJlci5LOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyLnJ1bklu
RGVidWcpIHsKLSAgICAgICAgICAgIEVtYmVyLnJ1bkluRGVidWcgPSBFbWJlci5LOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyLmRlcHJlY2F0ZSkg
ewotICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlID0gRW1iZXIuSzsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBFbWJlci5kZXByZWNhdGVGdW5jKSB7Ci0g
ICAgICAgICAgICBFbWJlci5kZXByZWNhdGVGdW5jID0gZnVuY3Rpb24oXywgZnVuYykgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlcjsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLW1ldGFsL2RlcGVuZGVudF9rZXlzIiwKLSAgICBbImVtYmVyLW1ldGFsL3BsYXRm
b3JtIiwgImVtYmVyLW1ldGFsL3dhdGNoaW5nIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5MV9fLmNyZWF0
ZTsKLSAgICAgICAgdmFyIHdhdGNoID0gX19kZXBlbmRlbmN5Ml9fLndhdGNoOwotICAgICAgICB2
YXIgdW53YXRjaCA9IF9fZGVwZW5kZW5jeTJfXy51bndhdGNoOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8KLQotICAgICAgICB2
YXIgb19jcmVhdGUgPSBjcmVhdGU7Ci0KLSAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAvLyBERVBFTkRF
TlQgS0VZUwotICAgICAgICAvLwotCi0gICAgICAgIC8vIGRhdGEgc3RydWN0dXJlOgotICAgICAg
ICAvLyAgbWV0YS5kZXBzID0gewotICAgICAgICAvLyAgICAnZGVwS2V5JzogewotICAgICAgICAv
LyAgICAgICdrZXlOYW1lJzogY291bnQsCi0gICAgICAgIC8vICAgIH0KLSAgICAgICAgLy8gIH0K
LQotICAgICAgICAvKgotICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBtYXAg
b2YgdW5pcXVlIGRlcGVuZGVuY2llcyBmb3IgYQotICAgICAgICAgICAgICBnaXZlbiBvYmplY3Qg
YW5kIGtleS4KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGtleXNGb3JEZXAoZGVw
c01ldGEsIGRlcEtleSkgewotICAgICAgICAgICAgdmFyIGtleXMgPSBkZXBzTWV0YVtkZXBLZXld
OwotICAgICAgICAgICAgaWYgKCFrZXlzKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUg
YXJlIG5vIGRlcGVuZGVuY2llcyB5ZXQgZm9yIGEgdGhlIGdpdmVuIGtleQotICAgICAgICAgICAg
ICAgIC8vIGNyZWF0ZSBhIG5ldyBlbXB0eSBsaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdGhlIGtl
eQotICAgICAgICAgICAgICAgIGtleXMgPSBkZXBzTWV0YVtkZXBLZXldID0ge307Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKCFkZXBzTWV0YS5oYXNPd25Qcm9wZXJ0eShkZXBLZXkpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGlmIHRoZSBkZXBlbmRlbmN5IGxpc3QgaXMgaW5oZXJp
dGVkIGZyb20KLSAgICAgICAgICAgICAgICAvLyBhIHN1cGVyY2xhc3MsIGNsb25lIHRoZSBoYXNo
Ci0gICAgICAgICAgICAgICAga2V5cyA9IGRlcHNNZXRhW2RlcEtleV0gPSBvX2NyZWF0ZShrZXlz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBrZXlzOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gbWV0YUZvckRlcHMobWV0YSkgewotICAgICAgICAgICAgcmV0dXJu
IGtleXNGb3JEZXAobWV0YSwgJ2RlcHMnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGFkZERlcGVuZGVudEtleXMoZGVzYywgb2JqLCBrZXlOYW1lLCBtZXRhKSB7Ci0gICAgICAgICAg
ICAvLyB0aGUgZGVzY3JpcHRvciBoYXMgYSBsaXN0IG9mIGRlcGVuZGVudCBrZXlzLCBzbwotICAg
ICAgICAgICAgLy8gYWRkIGFsbCBvZiBpdHMgZGVwZW5kZW50IGtleXMuCi0gICAgICAgICAgICB2
YXIgZGVwS2V5cyA9IGRlc2MuX2RlcGVuZGVudEtleXMsIGRlcHNNZXRhLCBpZHgsIGxlbiwgZGVw
S2V5LCBrZXlzOwotICAgICAgICAgICAgaWYgKCFkZXBLZXlzKSAKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIGRlcHNNZXRhID0gbWV0YUZvckRlcHMobWV0YSk7Ci0KLSAg
ICAgICAgICAgIGZvciAoaWR4ID0gMCwgbGVuID0gZGVwS2V5cy5sZW5ndGg7IGlkeCA8IGxlbjsg
aWR4KyspIHsKLSAgICAgICAgICAgICAgICBkZXBLZXkgPSBkZXBLZXlzW2lkeF07Ci0gICAgICAg
ICAgICAgICAgLy8gTG9va3VwIGtleXMgbWV0YSBmb3IgZGVwS2V5Ci0gICAgICAgICAgICAgICAg
a2V5cyA9IGtleXNGb3JEZXAoZGVwc01ldGEsIGRlcEtleSk7Ci0gICAgICAgICAgICAgICAgLy8g
SW5jcmVtZW50IHRoZSBudW1iZXIgb2YgdGltZXMgZGVwS2V5IGRlcGVuZHMgb24ga2V5TmFtZS4K
LSAgICAgICAgICAgICAgICBrZXlzW2tleU5hbWVdID0gKGtleXNba2V5TmFtZV0gfHwgMCkgKyAx
OwotICAgICAgICAgICAgICAgIC8vIFdhdGNoIHRoZSBkZXBLZXkKLSAgICAgICAgICAgICAgICB3
YXRjaChvYmosIGRlcEtleSwgbWV0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBfX2V4cG9ydHNfXy5hZGREZXBlbmRlbnRLZXlzID0gYWRkRGVwZW5kZW50S2V5czsKLSAg
ICAgICAgZnVuY3Rpb24gcmVtb3ZlRGVwZW5kZW50S2V5cyhkZXNjLCBvYmosIGtleU5hbWUsIG1l
dGEpIHsKLSAgICAgICAgICAgIC8vIHRoZSBkZXNjcmlwdG9yIGhhcyBhIGxpc3Qgb2YgZGVwZW5k
ZW50IGtleXMsIHNvCi0gICAgICAgICAgICAvLyByZW1vdmUgYWxsIG9mIGl0cyBkZXBlbmRlbnQg
a2V5cy4KLSAgICAgICAgICAgIHZhciBkZXBLZXlzID0gZGVzYy5fZGVwZW5kZW50S2V5cywgZGVw
c01ldGEsIGlkeCwgbGVuLCBkZXBLZXksIGtleXM7Ci0gICAgICAgICAgICBpZiAoIWRlcEtleXMp
IAotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGVwc01ldGEgPSBtZXRh
Rm9yRGVwcyhtZXRhKTsKLQotICAgICAgICAgICAgZm9yIChpZHggPSAwLCBsZW4gPSBkZXBLZXlz
Lmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAgIGRlcEtleSA9IGRl
cEtleXNbaWR4XTsKLSAgICAgICAgICAgICAgICAvLyBMb29rdXAga2V5cyBtZXRhIGZvciBkZXBL
ZXkKLSAgICAgICAgICAgICAgICBrZXlzID0ga2V5c0ZvckRlcChkZXBzTWV0YSwgZGVwS2V5KTsK
LSAgICAgICAgICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIG51bWJlciBvZiB0aW1lcyBkZXBLZXkg
ZGVwZW5kcyBvbiBrZXlOYW1lLgotICAgICAgICAgICAgICAgIGtleXNba2V5TmFtZV0gPSAoa2V5
c1trZXlOYW1lXSB8fCAwKSAtIDE7Ci0gICAgICAgICAgICAgICAgLy8gVW53YXRjaCB0aGUgZGVw
S2V5Ci0gICAgICAgICAgICAgICAgdW53YXRjaChvYmosIGRlcEtleSwgbWV0YSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBvcnRzX18ucmVtb3ZlRGVwZW5kZW50S2V5
cyA9IHJlbW92ZURlcGVuZGVudEtleXM7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRh
bC9lbnVtZXJhYmxlX3V0aWxzIiwKLSAgICBbImVtYmVyLW1ldGFsL2FycmF5IiwgImV4cG9ydHMi
XSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIF9maWx0ZXIgPSBfX2RlcGVuZGVuY3kxX18uZmls
dGVyOwotICAgICAgICB2YXIgYV9mb3JFYWNoID0gX19kZXBlbmRlbmN5MV9fLmZvckVhY2g7Ci0g
ICAgICAgIHZhciBfaW5kZXhPZiA9IF9fZGVwZW5kZW5jeTFfXy5pbmRleE9mOwotICAgICAgICB2
YXIgX21hcCA9IF9fZGVwZW5kZW5jeTFfXy5tYXA7Ci0KLSAgICAgICAgdmFyIHNwbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zcGxpY2U7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBEZWZp
bmVzIHNvbWUgY29udmVuaWVuY2UgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIEVudW1lcmFibGVz
LgotICAgICAgICAgICAgICogYEVtYmVyLkVudW1lcmFibGVVdGlsc2AgdXNlcyBgRW1iZXIuQXJy
YXlQb2x5ZmlsbHNgIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICoKLSAgICAgICAgICAg
ICAqIEBjbGFzcyBFbnVtZXJhYmxlVXRpbHMKLSAgICAgICAgICAgICAqIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICAqIEBzdGF0aWMKLSAgICAgICAgICAgICAqICovCi0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgKiBDYWxscyB0aGUgbWFwIGZ1bmN0aW9uIG9uIHRoZSBwYXNzZWQg
b2JqZWN0IHdpdGggYSBzcGVjaWZpZWQgY2FsbGJhY2suIFRoaXMKLSAgICAgICAgICAgICAqIHVz
ZXMgYEVtYmVyLkFycmF5UG9seWZpbGxgJ3MtbWFwIG1ldGhvZCB3aGVuIG5lY2Vzc2FyeS4KLSAg
ICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIG1hcAotICAgICAgICAgICAgICog
QHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIG1hcHBlZAotICAg
ICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4
ZWN1dGUKLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFZhbHVlIHRvIHVz
ZSBhcyB0aGlzIHdoZW4gZXhlY3V0aW5nICpjYWxsYmFjayoKLSAgICAgICAgICAgICAqCi0gICAg
ICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgbWFwcGVkIHZhbHVlcy4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBtYXAob2JqLCBjYWxsYmFjaywgdGhpc0Fy
ZykgewotICAgICAgICAgICAgcmV0dXJuIG9iai5tYXAgPyBvYmoubWFwLmNhbGwob2JqLCBjYWxs
YmFjaywgdGhpc0FyZykgOiBfbWFwLmNhbGwob2JqLCBjYWxsYmFjaywgdGhpc0FyZyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5tYXAgPSBtYXA7IC8qKgotICAgICAgICAgICAg
ICogQ2FsbHMgdGhlIGZvckVhY2ggZnVuY3Rpb24gb24gdGhlIHBhc3NlZCBvYmplY3Qgd2l0aCBh
IHNwZWNpZmllZCBjYWxsYmFjay4gVGhpcwotICAgICAgICAgICAgICogdXNlcyBgRW1iZXIuQXJy
YXlQb2x5ZmlsbGAncy1mb3JFYWNoIG1ldGhvZCB3aGVuIG5lY2Vzc2FyeS4KLSAgICAgICAgICAg
ICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIGZvckVhY2gKLSAgICAgICAgICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjYWxsIGZvckVhY2ggb24KLSAgICAgICAgICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0g
ICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBWYWx1ZSB0byB1c2UgYXMgdGhp
cyB3aGVuIGV4ZWN1dGluZyAqY2FsbGJhY2sqCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIGZvckVhY2gob2JqLCBjYWxsYmFjaywgdGhpc0FyZykgewot
ICAgICAgICAgICAgcmV0dXJuIG9iai5mb3JFYWNoID8gb2JqLmZvckVhY2guY2FsbChvYmosIGNh
bGxiYWNrLCB0aGlzQXJnKSA6IGFfZm9yRWFjaC5jYWxsKG9iaiwgY2FsbGJhY2ssIHRoaXNBcmcp
OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZm9yRWFjaCA9IGZvckVhY2g7IC8q
KgotICAgICAgICAgICAgICogQ2FsbHMgdGhlIGZpbHRlciBmdW5jdGlvbiBvbiB0aGUgcGFzc2Vk
IG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGNhbGxiYWNrLiBUaGlzCi0gICAgICAgICAgICAgKiB1
c2VzIGBFbWJlci5BcnJheVBvbHlmaWxsYCdzLWZpbHRlciBtZXRob2Qgd2hlbiBuZWNlc3Nhcnku
Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQG1ldGhvZCBmaWx0ZXIKLSAgICAgICAg
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjYWxsIGZpbHRlciBvbgot
ICAgICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRv
IGV4ZWN1dGUKLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFZhbHVlIHRv
IHVzZSBhcyB0aGlzIHdoZW4gZXhlY3V0aW5nICpjYWxsYmFjayoKLSAgICAgICAgICAgICAqCi0g
ICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgY29udGFpbmluZyB0aGUgZmls
dGVyZWQgdmFsdWVzCi0gICAgICAgICAgICAgKiBAc2luY2UgMS40LjAKLSAgICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBmaWx0ZXIob2JqLCBjYWxsYmFjaywgdGhpc0FyZykgewotICAg
ICAgICAgICAgcmV0dXJuIG9iai5maWx0ZXIgPyBvYmouZmlsdGVyLmNhbGwob2JqLCBjYWxsYmFj
aywgdGhpc0FyZykgOiBfZmlsdGVyLmNhbGwob2JqLCBjYWxsYmFjaywgdGhpc0FyZyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5maWx0ZXIgPSBmaWx0ZXI7IC8qKgotICAgICAg
ICAgICAgICogQ2FsbHMgdGhlIGluZGV4T2YgZnVuY3Rpb24gb24gdGhlIHBhc3NlZCBvYmplY3Qg
d2l0aCBhIHNwZWNpZmllZCBjYWxsYmFjay4gVGhpcwotICAgICAgICAgICAgICogdXNlcyBgRW1i
ZXIuQXJyYXlQb2x5ZmlsbGAncy1pbmRleE9mIG1ldGhvZCB3aGVuIG5lY2Vzc2FyeS4KLSAgICAg
ICAgICAgICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIGluZGV4T2YKLSAgICAgICAgICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjYWxsIGluZGV4T24gb24KLSAgICAg
ICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVj
dXRlCi0gICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5kZXggVGhlIGluZGV4IHRvIHN0
YXJ0IHNlYXJjaGluZyBmcm9tCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIGluZGV4T2Yob2JqLCBlbGVtZW50LCBpbmRleCkgewotICAgICAgICAgICAg
cmV0dXJuIG9iai5pbmRleE9mID8gb2JqLmluZGV4T2YuY2FsbChvYmosIGVsZW1lbnQsIGluZGV4
KSA6IF9pbmRleE9mLmNhbGwob2JqLCBlbGVtZW50LCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBfX2V4cG9ydHNfXy5pbmRleE9mID0gaW5kZXhPZjsgLyoqCi0gICAgICAgICAgICAgKiBS
ZXR1cm5zIGFuIGFycmF5IG9mIGluZGV4ZXMgb2YgdGhlIGZpcnN0IG9jY3VycmVuY2VzIG9mIHRo
ZSBwYXNzZWQgZWxlbWVudHMKLSAgICAgICAgICAgICAqIG9uIHRoZSBwYXNzZWQgb2JqZWN0Lgot
ICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAqICB2YXIgYXJyYXkgPSBbMSwgMiwgMywgNCwgNV07Ci0gICAgICAgICAgICAgKiAgRW1iZXIu
RW51bWVyYWJsZVV0aWxzLmluZGV4ZXNPZihhcnJheSwgWzIsIDVdKTsgLy8gWzEsIDRdCi0gICAg
ICAgICAgICAgKgotICAgICAgICAgICAgICogIHZhciBmdWJhciA9ICJGdWJhcnIiOwotICAgICAg
ICAgICAgICogIEVtYmVyLkVudW1lcmFibGVVdGlscy5pbmRleGVzT2YoZnViYXIsIFsnYicsICdy
J10pOyAvLyBbMiwgNF0KLSAgICAgICAgICAgICAqIGBgYAotICAgICAgICAgICAgICoKLSAgICAg
ICAgICAgICAqIEBtZXRob2QgaW5kZXhlc09mCi0gICAgICAgICAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqIFRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIGVsZW1lbnQgaW5kZXhlcwotICAgICAgICAg
ICAgICogQHBhcmFtIHtBcnJheX0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIHRvIHNlYXJjaCBmb3Ig
b24gKm9iaioKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0g
QW4gYXJyYXkgb2YgaW5kZXhlcy4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gaW5kZXhlc09mKG9iaiwgZWxlbWVudHMpIHsKLSAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50cyA9PT0gdW5kZWZpbmVkID8gW10gOiBtYXAoZWxlbWVudHMsIGZ1bmN0aW9u
KGl0ZW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhPZihvYmosIGl0ZW0pOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5pbmRleGVzT2Yg
PSBpbmRleGVzT2Y7IC8qKgotICAgICAgICAgICAgICogQWRkcyBhbiBvYmplY3QgdG8gYW4gYXJy
YXkuIElmIHRoZSBhcnJheSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBvYmplY3QgdGhpcwotICAgICAg
ICAgICAgICogbWV0aG9kIGhhcyBubyBlZmZlY3QuCi0gICAgICAgICAgICAgKgotICAgICAgICAg
ICAgICogQG1ldGhvZCBhZGRPYmplY3QKLSAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFy
cmF5IFRoZSBhcnJheSB0aGUgcGFzc2VkIGl0ZW0gc2hvdWxkIGJlIGFkZGVkIHRvCi0gICAgICAg
ICAgICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBUaGUgaXRlbSB0byBhZGQgdG8gdGhlIHBhc3Nl
ZCBhcnJheQotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEByZXR1cm4gJ3VuZGVmaW5l
ZCcKLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBhZGRPYmplY3QoYXJyYXksIGl0
ZW0pIHsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4T2YoYXJyYXksIGl0ZW0pOwotICAg
ICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgewotICAgICAgICAgICAgICAgIGFycmF5LnB1c2go
aXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5h
ZGRPYmplY3QgPSBhZGRPYmplY3Q7IC8qKgotICAgICAgICAgICAgICogUmVtb3ZlcyBhbiBvYmpl
Y3QgZnJvbSBhbiBhcnJheS4gSWYgdGhlIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gdGhlIHBhc3Nl
ZAotICAgICAgICAgICAgICogb2JqZWN0IHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCi0gICAg
ICAgICAgICAgKgotICAgICAgICAgICAgICogQG1ldGhvZCByZW1vdmVPYmplY3QKLSAgICAgICAg
ICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW1vdmUgdGhlIGl0ZW0g
ZnJvbS4KLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIFRoZSBpdGVtIHRvIHJl
bW92ZSBmcm9tIHRoZSBwYXNzZWQgYXJyYXkuCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAg
ICogQHJldHVybiAndW5kZWZpbmVkJwotICAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IHJlbW92ZU9iamVjdChhcnJheSwgaXRlbSkgewotICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5k
ZXhPZihhcnJheSwgaXRlbSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7Ci0gICAg
ICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJlbW92ZU9iamVjdCA9IHJlbW92ZU9iamVjdDsK
LSAgICAgICAgZnVuY3Rpb24gX3JlcGxhY2UoYXJyYXksIGlkeCwgYW10LCBvYmplY3RzKSB7Ci0g
ICAgICAgICAgICB2YXIgYXJncyA9IFtdLmNvbmNhdChvYmplY3RzKSwgY2h1bmssIHJldCA9IFtd
LAotICAgICAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1
ZXMvZGV0YWlsP2lkPTU2NTg4Ci0gICAgICAgICAgICBzaXplID0gNjAwMDAsIHN0YXJ0ID0gaWR4
LCBlbmRzID0gYW10LCBjb3VudDsKLQotICAgICAgICAgICAgd2hpbGUgKGFyZ3MubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgY291bnQgPSBlbmRzID4gc2l6ZSA/IHNpemUgOiBlbmRzOwotICAg
ICAgICAgICAgICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50
ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaHVuayA9IGFyZ3Mu
c3BsaWNlKDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGNodW5rID0gW3N0YXJ0LCBjb3VudF0u
Y29uY2F0KGNodW5rKTsKLQotICAgICAgICAgICAgICAgIHN0YXJ0ICs9IHNpemU7Ci0gICAgICAg
ICAgICAgICAgZW5kcyAtPSBjb3VudDsKLQotICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25j
YXQoc3BsaWNlLmFwcGx5KGFycmF5LCBjaHVuaykpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLl9yZXBsYWNl
ID0gX3JlcGxhY2U7IC8qKgotICAgICAgICAgICAgICogUmVwbGFjZXMgb2JqZWN0cyBpbiBhbiBh
cnJheSB3aXRoIHRoZSBwYXNzZWQgb2JqZWN0cy4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAg
ICAgKiBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgKiAgIHZhciBhcnJheSA9IFsxLDIsM107
Ci0gICAgICAgICAgICAgKiAgIEVtYmVyLkVudW1lcmFibGVVdGlscy5yZXBsYWNlKGFycmF5LCAx
LCAyLCBbNCwgNV0pOyAvLyBbMSwgNCwgNV0KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAg
KiAgIHZhciBhcnJheSA9IFsxLDIsM107Ci0gICAgICAgICAgICAgKiAgIEVtYmVyLkVudW1lcmFi
bGVVdGlscy5yZXBsYWNlKGFycmF5LCAxLCAxLCBbNCwgNV0pOyAvLyBbMSwgNCwgNSwgM10KLSAg
ICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiAgIHZhciBhcnJheSA9IFsxLDIsM107Ci0gICAg
ICAgICAgICAgKiAgIEVtYmVyLkVudW1lcmFibGVVdGlscy5yZXBsYWNlKGFycmF5LCAxMCwgMSwg
WzQsIDVdKTsgLy8gWzEsIDIsIDMsIDQsIDVdCi0gICAgICAgICAgICAgKiBgYGAKLSAgICAgICAg
ICAgICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIHJlcGxhY2UKLSAgICAgICAgICAgICAqIEBw
YXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgb2JqZWN0cyBzaG91bGQgYmUgaW5zZXJ0
ZWQgaW50by4KLSAgICAgICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpZHggU3RhcnRpbmcgaW5k
ZXggaW4gdGhlIGFycmF5IHRvIHJlcGxhY2UuIElmICppZHgqID49Ci0gICAgICAgICAgICAgKiBs
ZW5ndGgsIHRoZW4gYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICAgICAgICAgICAg
ICogQHBhcmFtIHtOdW1iZXJ9IGFtdCBOdW1iZXIgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUg
cmVtb3ZlZCBmcm9tIHRoZSBhcnJheSwKLSAgICAgICAgICAgICAqIHN0YXJ0aW5nIGF0ICppZHgq
Ci0gICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBvYmplY3RzIEFuIGFycmF5IG9mIHplcm8g
b3IgbW9yZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlCi0gICAgICAgICAgICAgKiBpbnNlcnRlZCBp
bnRvIHRoZSBhcnJheSBhdCAqaWR4KgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBy
ZXR1cm4ge0FycmF5fSBUaGUgbW9kaWZpZWQgYXJyYXkuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgaWR4LCBhbXQsIG9iamVjdHMpIHsKLSAgICAgICAg
ICAgIGlmIChhcnJheS5yZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnJl
cGxhY2UoaWR4LCBhbXQsIG9iamVjdHMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gX3JlcGxhY2UoYXJyYXksIGlkeCwgYW10LCBvYmplY3RzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJlcGxhY2UgPSByZXBs
YWNlOyAvKioKLSAgICAgICAgICAgICAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBvZiB0
d28gYXJyYXlzLiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5Ci0gICAgICAgICAgICAg
KiBmaWxsZWQgd2l0aCB0aGUgcmVjb3JkcyB0aGF0IHRoZSB0d28gcGFzc2VkIGFycmF5cyBzaGFy
ZSB3aXRoIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICAgKiBJZiB0aGVyZSBpcyBubyBpbnRlcnNl
Y3Rpb24sIGFuIGVtcHR5IGFycmF5IHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgICAgICAgKgot
ICAgICAgICAgICAgICogYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICogdmFyIGFycmF5MSA9
IFsxLCAyLCAzLCA0LCA1XTsKLSAgICAgICAgICAgICAqIHZhciBhcnJheTIgPSBbMSwgMywgNSwg
NiwgN107Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogRW1iZXIuRW51bWVyYWJsZVV0
aWxzLmludGVyc2VjdGlvbihhcnJheTEsIGFycmF5Mik7IC8vIFsxLCAzLCA1XQotICAgICAgICAg
ICAgICoKLSAgICAgICAgICAgICAqIHZhciBhcnJheTEgPSBbMSwgMiwgM107Ci0gICAgICAgICAg
ICAgKiB2YXIgYXJyYXkyID0gWzQsIDUsIDZdOwotICAgICAgICAgICAgICoKLSAgICAgICAgICAg
ICAqIEVtYmVyLkVudW1lcmFibGVVdGlscy5pbnRlcnNlY3Rpb24oYXJyYXkxLCBhcnJheTIpOyAv
LyBbXQotICAgICAgICAgICAgICogYGBgCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICog
QG1ldGhvZCBpbnRlcnNlY3Rpb24KLSAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5
MSBUaGUgZmlyc3QgYXJyYXkKLSAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5MiBU
aGUgc2Vjb25kIGFycmF5Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQHJldHVybiB7
QXJyYXl9IFRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBwYXNzZWQgYXJyYXlzLgotICAgICAg
ICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheTEsIGFycmF5Mikg
ewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICAgICAgZm9yRWFjaChhcnJh
eTEsIGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZihhcnJh
eTIsIGVsZW1lbnQpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5pbnRlcnNl
Y3Rpb24gPSBpbnRlcnNlY3Rpb247IC8vIFRPRE86IHRoaXMgb25seSBleGlzdHMgdG8gbWFpbnRh
aW4gdGhlIGV4aXN0aW5nIGFwaSwgYXMgd2UgbW92ZSBmb3J3YXJkIGl0Ci0gICAgICAgIC8vIHNo
b3VsZCBvbmx5IGJlIHBhcnQgb2YgdGhlICJnbG9iYWwgYnVpbGQiIHZpYSBzb21lIHNoaW0KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IHsKLSAgICAgICAgICAgIF9yZXBsYWNlOiBf
cmVwbGFjZSwKLSAgICAgICAgICAgIGFkZE9iamVjdDogYWRkT2JqZWN0LAotICAgICAgICAgICAg
ZmlsdGVyOiBmaWx0ZXIsCi0gICAgICAgICAgICBmb3JFYWNoOiBmb3JFYWNoLAotICAgICAgICAg
ICAgaW5kZXhPZjogaW5kZXhPZiwKLSAgICAgICAgICAgIGluZGV4ZXNPZjogaW5kZXhlc09mLAot
ICAgICAgICAgICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb24sCi0gICAgICAgICAgICBtYXA6
IG1hcCwKLSAgICAgICAgICAgIHJlbW92ZU9iamVjdDogcmVtb3ZlT2JqZWN0LAotICAgICAgICAg
ICAgcmVwbGFjZTogcmVwbGFjZQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItbWV0YWwvZXJyb3IiLAotICAgIFsiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZXhwb3J0cyJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5MV9fLmNyZWF0
ZTsKLQotICAgICAgICB2YXIgZXJyb3JQcm9wcyA9IFsKLSAgICAgICAgJ2Rlc2NyaXB0aW9uJywK
LSAgICAgICAgJ2ZpbGVOYW1lJywKLSAgICAgICAgJ2xpbmVOdW1iZXInLAotICAgICAgICAnbWVz
c2FnZScsCi0gICAgICAgICduYW1lJywKLSAgICAgICAgJ251bWJlcicsCi0gICAgICAgICdzdGFj
aycKLSAgICAgICAgXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBzdWJjbGFzcyBv
ZiB0aGUgSmF2YVNjcmlwdCBFcnJvciBvYmplY3QgZm9yIHVzZSBpbiBFbWJlci4KLQotICAgICAg
ICAgICAgICBAY2xhc3MgRXJyb3IKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAg
ICAgICAgICAgICBAZXh0ZW5kcyBFcnJvcgotICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIEVtYmVyRXJyb3IoKSB7Ci0gICAgICAgICAg
ICB2YXIgdG1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgICAgICAg
Ly8gQWRkcyBhIGBzdGFja2AgcHJvcGVydHkgdG8gdGhlIGdpdmVuIGVycm9yIG9iamVjdCB0aGF0
IHdpbGwgeWllbGQgdGhlCi0gICAgICAgICAgICAvLyBzdGFjayB0cmFjZSBhdCB0aGUgdGltZSBj
YXB0dXJlU3RhY2tUcmFjZSB3YXMgY2FsbGVkLgotICAgICAgICAgICAgLy8gV2hlbiBjb2xsZWN0
aW5nIHRoZSBzdGFjayB0cmFjZSBhbGwgZnJhbWVzIGFib3ZlIHRoZSB0b3Btb3N0IGNhbGwKLSAg
ICAgICAgICAgIC8vIHRvIHRoaXMgZnVuY3Rpb24sIGluY2x1ZGluZyB0aGF0IGNhbGwsIHdpbGwg
YmUgbGVmdCBvdXQgb2YgdGhlCi0gICAgICAgICAgICAvLyBzdGFjayB0cmFjZS4KLSAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2Ugd2UgY2FuIGhpZGUgRW1iZXIgaW1wbGVtZW50
YXRpb24gZGV0YWlscwotICAgICAgICAgICAgLy8gdGhhdCBhcmUgbm90IHZlcnkgaGVscGZ1bCBm
b3IgdGhlIHVzZXIuCi0gICAgICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHsK
LSAgICAgICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFbWJlci5FcnJv
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBh
cmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0
bXBgIGRvZXNuJ3Qgd29yay4KLSAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGVy
cm9yUHJvcHMubGVuZ3RoOyBpZHgrKykgewotICAgICAgICAgICAgICAgIHRoaXNbZXJyb3JQcm9w
c1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgRW1iZXJFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBl
KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJFcnJvcjsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2V2ZW50cyIsCi0gICAgWyJlbWJlci1tZXRhbC9j
b3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8K
LSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAg
IHZhciBtZXRhID0gX19kZXBlbmRlbmN5Ml9fLm1ldGE7Ci0gICAgICAgIHZhciBNRVRBX0tFWSA9
IF9fZGVwZW5kZW5jeTJfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFyIHRyeUZpbmFsbHkgPSBfX2Rl
cGVuZGVuY3kyX18udHJ5RmluYWxseTsKLSAgICAgICAgdmFyIGFwcGx5ID0gX19kZXBlbmRlbmN5
Ml9fLmFwcGx5OwotICAgICAgICB2YXIgYXBwbHlTdHIgPSBfX2RlcGVuZGVuY3kyX18uYXBwbHlT
dHI7Ci0gICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3kzX18uY3JlYXRlOwotCi0gICAg
ICAgIHZhciBhX3NsaWNlID0gW10uc2xpY2UsCi0gICAgICAgIG1ldGFGb3IgPSBtZXRhLAotICAg
ICAgICAvKiBsaXN0ZW5lciBmbGFncyAqLwotICAgICAgICBPTkNFID0gMSwgU1VTUEVOREVEID0g
MjsKLQotCi0gICAgICAgIC8qCi0gICAgICAgICAgICAgIFRoZSBldmVudCBzeXN0ZW0gdXNlcyBh
IHNlcmllcyBvZiBuZXN0ZWQgaGFzaGVzIHRvIHN0b3JlIGxpc3RlbmVycyBvbiBhbgotICAgICAg
ICAgICAgICBvYmplY3QuIFdoZW4gYSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLCBvciB3aGVuIGFu
IGV2ZW50IGFycml2ZXMsIHRoZXNlCi0gICAgICAgICAgICAgIGhhc2hlcyBhcmUgY29uc3VsdGVk
IHRvIGRldGVybWluZSB3aGljaCB0YXJnZXQgYW5kIGFjdGlvbiBwYWlyIHRvIGludm9rZS4KLQot
ICAgICAgICAgICAgICBUaGUgaGFzaGVzIGFyZSBzdG9yZWQgaW4gdGhlIG9iamVjdCdzIG1ldGEg
aGFzaCwgYW5kIGxvb2sgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgICAvLyBPYmplY3Qn
cyBtZXRhIGhhc2gKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbGlz
dGVuZXJzOiB7ICAgICAgIC8vIHZhcmlhYmxlIG5hbWU6IGBsaXN0ZW5lclNldGAKLSAgICAgICAg
ICAgICAgICAgICAgICAiZm9vOmNoYW5nZWQiOiBbIC8vIHZhcmlhYmxlIG5hbWU6IGBhY3Rpb25z
YAotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBtZXRob2QsIGZsYWdzCi0gICAgICAg
ICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICovCi0KLSAgICAgICAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwg
dGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IC0xOwotICAgICAgICAg
ICAgLy8gaGFzaGVzIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBldmVudCBhcnJheQotICAg
ICAgICAgICAgLy8gc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgc2VhcmNoaW5nIGF0IHRoZSBl
bmQKLSAgICAgICAgICAgIC8vIG9mIHRoZSBhcnJheSBhbmQgc2VhcmNoIGluIHJldmVyc2UKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAzIDsgaSA+PSAwOyBpIC09IDMp
IHsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBhcnJheVtpXSAmJiBtZXRob2QgPT09
IGFycmF5W2kgKyAxXSkgewotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGFj
dGlvbnNGb3Iob2JqLCBldmVudE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBtZXRhID0gbWV0YUZv
cihvYmosIHRydWUpLAotICAgICAgICAgICAgYWN0aW9uczsKLQotICAgICAgICAgICAgaWYgKCFt
ZXRhLmxpc3RlbmVycykgewotICAgICAgICAgICAgICAgIG1ldGEubGlzdGVuZXJzID0ge307Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbWV0YS5oYXNPd25Qcm9wZXJ0eSgnbGlz
dGVuZXJzJykpIHsKLSAgICAgICAgICAgICAgICAvLyBzZXR1cCBpbmhlcml0ZWQgY29weSBvZiB0
aGUgbGlzdGVuZXJzIG9iamVjdAotICAgICAgICAgICAgICAgIG1ldGEubGlzdGVuZXJzID0gY3Jl
YXRlKG1ldGEubGlzdGVuZXJzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYWN0aW9u
cyA9IG1ldGEubGlzdGVuZXJzW2V2ZW50TmFtZV07Ci0KLSAgICAgICAgICAgIC8vIGlmIHRoZXJl
IGFyZSBhY3Rpb25zLCBidXQgdGhlIGV2ZW50TmFtZSBkb2Vzbid0IGV4aXN0IGluIG91ciBsaXN0
ZW5lcnMsIHRoZW4gY29weSB0aGVtIGZyb20gdGhlIHByb3RvdHlwZQotICAgICAgICAgICAgaWYg
KGFjdGlvbnMgJiYgIW1ldGEubGlzdGVuZXJzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHsK
LSAgICAgICAgICAgICAgICBhY3Rpb25zID0gbWV0YS5saXN0ZW5lcnNbZXZlbnROYW1lXSA9IG1l
dGEubGlzdGVuZXJzW2V2ZW50TmFtZV0uc2xpY2UoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBhY3Rpb25zID0gbWV0YS5saXN0ZW5lcnNbZXZl
bnROYW1lXSA9IFtdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9u
czsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyc1VuaW9uKG9iaiwgZXZl
bnROYW1lLCBvdGhlckFjdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBtZXRhID0gb2JqW01FVEFf
S0VZXSwKLSAgICAgICAgICAgIGFjdGlvbnMgPSBtZXRhICYmIG1ldGEubGlzdGVuZXJzICYmIG1l
dGEubGlzdGVuZXJzW2V2ZW50TmFtZV07Ci0KLSAgICAgICAgICAgIGlmICghYWN0aW9ucykgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSBhY3Rpb25zLmxlbmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAzKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRhcmdldCA9IGFjdGlvbnNbaV0sCi0gICAgICAgICAgICAgICAgbWV0aG9kID0g
YWN0aW9uc1tpICsgMV0sCi0gICAgICAgICAgICAgICAgZmxhZ3MgPSBhY3Rpb25zW2kgKyAyXSwK
LSAgICAgICAgICAgICAgICBhY3Rpb25JbmRleCA9IGluZGV4T2Yob3RoZXJBY3Rpb25zLCB0YXJn
ZXQsIG1ldGhvZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggPT09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG90aGVyQWN0aW9ucy5wdXNoKHRhcmdldCwgbWV0aG9kLCBm
bGFncyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18ubGlzdGVuZXJzVW5pb24gPSBsaXN0ZW5lcnNVbmlvbjsKLSAgICAg
ICAgZnVuY3Rpb24gbGlzdGVuZXJzRGlmZihvYmosIGV2ZW50TmFtZSwgb3RoZXJBY3Rpb25zKSB7
Ci0gICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV0sCi0gICAgICAgICAgICBhY3Rp
b25zID0gbWV0YSAmJiBtZXRhLmxpc3RlbmVycyAmJiBtZXRhLmxpc3RlbmVyc1tldmVudE5hbWVd
LAotICAgICAgICAgICAgZGlmZkFjdGlvbnMgPSBbXTsKLQotICAgICAgICAgICAgaWYgKCFhY3Rp
b25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IGFjdGlvbnMubGVuZ3RoIC0gMzsgaSA+PSAwOyBpIC09IDMpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYWN0aW9uc1tpXSwKLSAgICAgICAgICAgICAgICBt
ZXRob2QgPSBhY3Rpb25zW2kgKyAxXSwKLSAgICAgICAgICAgICAgICBmbGFncyA9IGFjdGlvbnNb
aSArIDJdLAotICAgICAgICAgICAgICAgIGFjdGlvbkluZGV4ID0gaW5kZXhPZihvdGhlckFjdGlv
bnMsIHRhcmdldCwgbWV0aG9kKTsKLQotICAgICAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAh
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgb3RoZXJBY3Rpb25zLnB1c2godGFyZ2V0LCBtZXRob2QsIGZs
YWdzKTsKLSAgICAgICAgICAgICAgICBkaWZmQWN0aW9ucy5wdXNoKHRhcmdldCwgbWV0aG9kLCBm
bGFncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBkaWZmQWN0aW9uczsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmxpc3RlbmVyc0RpZmYgPSBsaXN0ZW5l
cnNEaWZmOyAvKioKLSAgICAgICAgICAgICAgQWRkIGFuIGV2ZW50IGxpc3RlbmVyCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBhZGRMaXN0ZW5lcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2
ZW50TmFtZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0T3JN
ZXRob2QgQSB0YXJnZXQgb2JqZWN0IG9yIGEgZnVuY3Rpb24KLSAgICAgICAgICAgICAgQHBhcmFt
IHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBBIGZ1bmN0aW9uIG9yIHRoZSBuYW1lIG9mIGEgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIG9uIGB0YXJnZXRgCi0gICAgICAgICAgICAgIEBwYXJhbSB7Qm9v
bGVhbn0gb25jZSBBIGZsYWcgd2hldGhlciBhIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBvbmNlCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihvYmos
IGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIG9uY2UpIHsKLSAgICAgICAgICAgIEVtYmVyLmFz
c2VydCgiWW91IG11c3QgcGFzcyBhdCBsZWFzdCBhbiBvYmplY3QgYW5kIGV2ZW50IG5hbWUgdG8g
RW1iZXIuYWRkTGlzdGVuZXIiLCAhIW9iaiAmJiAhIWV2ZW50TmFtZSk7Ci0KLSAgICAgICAgICAg
IGlmICghbWV0aG9kICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiB0YXJnZXQpIHsKLSAgICAgICAg
ICAgICAgICBtZXRob2QgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBhY3Rpb25zRm9yKG9i
aiwgZXZlbnROYW1lKSwKLSAgICAgICAgICAgIGFjdGlvbkluZGV4ID0gaW5kZXhPZihhY3Rpb25z
LCB0YXJnZXQsIG1ldGhvZCksCi0gICAgICAgICAgICBmbGFncyA9IDA7Ci0KLSAgICAgICAgICAg
IGlmIChvbmNlKSAKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBPTkNFOwotCi0gICAgICAgICAg
ICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBhY3Rpb25zLnB1c2godGFyZ2V0LCBtZXRob2QsIGZs
YWdzKTsKLQotICAgICAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmouZGlkQWRk
TGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICBvYmouZGlkQWRkTGlzdGVuZXIoZXZlbnROYW1l
LCB0YXJnZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBf
X2V4cG9ydHNfXy5hZGRMaXN0ZW5lciA9IGFkZExpc3RlbmVyOyAvKioKLSAgICAgICAgICAgICAg
UmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyCi0KLSAgICAgICAgICAgICAgQXJndW1lbnRzIHNob3Vs
ZCBtYXRjaCB0aG9zZSBwYXNzZWQgdG8gYEVtYmVyLmFkZExpc3RlbmVyYC4KLQotICAgICAgICAg
ICAgICBAbWV0aG9kIHJlbW92ZUxpc3RlbmVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAg
ICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZl
bnROYW1lCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXRPck1l
dGhvZCBBIHRhcmdldCBvYmplY3Qgb3IgYSBmdW5jdGlvbgotICAgICAgICAgICAgICBAcGFyYW0g
e0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIEEgZnVuY3Rpb24gb3IgdGhlIG5hbWUgb2YgYSBmdW5j
dGlvbiB0byBiZSBjYWxsZWQgb24gYHRhcmdldGAKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1
bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG9iaiwgZXZlbnROYW1lLCB0YXJnZXQsIG1ldGhvZCkgewot
ICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGF0IGxlYXN0IGFuIG9iamVj
dCBhbmQgZXZlbnQgbmFtZSB0byBFbWJlci5yZW1vdmVMaXN0ZW5lciIsICEhb2JqICYmICEhZXZl
bnROYW1lKTsKLQotICAgICAgICAgICAgaWYgKCFtZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlw
ZW9mIHRhcmdldCkgewotICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRhcmdldDsKLSAgICAgICAg
ICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5j
dGlvbiBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgICAgICB2
YXIgYWN0aW9ucyA9IGFjdGlvbnNGb3Iob2JqLCBldmVudE5hbWUpLAotICAgICAgICAgICAgICAg
IGFjdGlvbkluZGV4ID0gaW5kZXhPZihhY3Rpb25zLCB0YXJnZXQsIG1ldGhvZCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBhY3Rpb24gZG9lc24ndCBleGlzdCwgZ2l2ZSB1cCBzaWxlbnRseQotICAg
ICAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFjdGlvbnMu
c3BsaWNlKGFjdGlvbkluZGV4LCAzKTsKLQotICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24n
ID09PSB0eXBlb2Ygb2JqLmRpZFJlbW92ZUxpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG9iai5kaWRSZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtZXRob2QpIHsK
LSAgICAgICAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBtZXRob2QpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV0s
Ci0gICAgICAgICAgICAgICAgYWN0aW9ucyA9IG1ldGEgJiYgbWV0YS5saXN0ZW5lcnMgJiYgbWV0
YS5saXN0ZW5lcnNbZXZlbnROYW1lXTsKLQotICAgICAgICAgICAgICAgIGlmICghYWN0aW9ucykg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSBhY3Rpb25zLmxlbmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIF9yZW1vdmVMaXN0ZW5lcihhY3Rpb25zW2ldLCBhY3Rp
b25zW2kgKyAxXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFN1c3BlbmQgbGlzdGVuZXIgZHVyaW5nIGNh
bGxiYWNrLgotCi0gICAgICAgICAgICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUg
dGFyZ2V0IG9mIHRoZSBldmVudCBsaXN0ZW5lcgotICAgICAgICAgICAgICB3aGVuIGl0IGlzIHRh
a2luZyBhbiBhY3Rpb24gdGhhdCB3b3VsZCBjYXVzZSB0aGUgZXZlbnQsIGUuZy4KLSAgICAgICAg
ICAgICAgYW4gb2JqZWN0IG1pZ2h0IHN1c3BlbmQgaXRzIHByb3BlcnR5IGNoYW5nZSBsaXN0ZW5l
ciB3aGlsZSBpdCBpcwotICAgICAgICAgICAgICBzZXR0aW5nIHRoYXQgcHJvcGVydHkuCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBzdXNwZW5kTGlzdGVuZXIKLSAgICAgICAgICAgICAgQGZvciBF
bWJlcgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBwYXJhbSBvYmoK
LSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZQotICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0T3JNZXRob2QgQSB0YXJnZXQgb2JqZWN0IG9y
IGEgZnVuY3Rpb24KLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhv
ZCBBIGZ1bmN0aW9uIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGB0
YXJnZXRgCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBzdXNwZW5kTGlzdGVuZXIob2JqLCBldmVudE5hbWUs
IHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgICAgICAgICAgaWYgKCFtZXRob2QgJiYg
J2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRhcmdldCkgewotICAgICAgICAgICAgICAgIG1ldGhvZCA9
IHRhcmdldDsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IGFjdGlvbnNGb3Iob2JqLCBldmVudE5hbWUpLAot
ICAgICAgICAgICAgYWN0aW9uSW5kZXggPSBpbmRleE9mKGFjdGlvbnMsIHRhcmdldCwgbWV0aG9k
KTsKLQotICAgICAgICAgICAgaWYgKGFjdGlvbkluZGV4ICE9PSAtMSkgewotICAgICAgICAgICAg
ICAgIGFjdGlvbnNbYWN0aW9uSW5kZXggKyAyXSB8PSBTVVNQRU5ERUQ7IC8vIG1hcmsgdGhlIGFj
dGlvbiBhcyBzdXNwZW5kZWQKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24g
dHJ5YWJsZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCh0YXJnZXQp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemVyKCkgewotICAg
ICAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWN0aW9uc1thY3Rpb25JbmRleCArIDJdICY9IH5TVVNQRU5ERUQ7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ5RmluYWxseSh0cnlh
YmxlLCBmaW5hbGl6ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uc3VzcGVu
ZExpc3RlbmVyID0gc3VzcGVuZExpc3RlbmVyOyAvKioKLSAgICAgICAgICAgICAgU3VzcGVuZHMg
bXVsdGlwbGUgbGlzdGVuZXJzIGR1cmluZyBhIGNhbGxiYWNrLgotCi0gICAgICAgICAgICAgIEBt
ZXRob2Qgc3VzcGVuZExpc3RlbmVycwotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0KLSAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAg
ICBAcGFyYW0ge0FycmF5fSBldmVudE5hbWUgQXJyYXkgb2YgZXZlbnQgbmFtZXMKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IHRhcmdldE9yTWV0aG9kIEEgdGFyZ2V0IG9i
amVjdCBvciBhIGZ1bmN0aW9uCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5n
fSBtZXRob2QgQSBmdW5jdGlvbiBvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxl
ZCBvbiBgdGFyZ2V0YAotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gc3VzcGVuZExpc3RlbmVycyhvYmosIGV2
ZW50TmFtZXMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgICAgICAgICAgaWYgKCFt
ZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRhcmdldCkgewotICAgICAgICAgICAgICAg
IG1ldGhvZCA9IHRhcmdldDsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgc3VzcGVuZGVkQWN0aW9ucyA9IFtdLAotICAgICAg
ICAgICAgYWN0aW9uc0xpc3QgPSBbXSwKLSAgICAgICAgICAgIGV2ZW50TmFtZSwgYWN0aW9ucywg
aSwgbDsKLQotICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGV2ZW50TmFtZXMubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnROYW1lc1tpXTsK
LSAgICAgICAgICAgICAgICBhY3Rpb25zID0gYWN0aW9uc0ZvcihvYmosIGV2ZW50TmFtZSk7Ci0g
ICAgICAgICAgICAgICAgdmFyIGFjdGlvbkluZGV4ID0gaW5kZXhPZihhY3Rpb25zLCB0YXJnZXQs
IG1ldGhvZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFjdGlvbnNbYWN0aW9uSW5kZXggKyAyXSB8PSBTVVNQRU5ERUQ7
Ci0gICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZEFjdGlvbnMucHVzaChhY3Rpb25JbmRleCk7
Ci0gICAgICAgICAgICAgICAgICAgIGFjdGlvbnNMaXN0LnB1c2goYWN0aW9ucyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiB0cnlhYmxl
KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHRhcmdldCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplcigpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN1c3BlbmRlZEFjdGlvbnMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25JbmRleCA9IHN1c3BlbmRl
ZEFjdGlvbnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGFjdGlvbnNMaXN0W2ldW2FjdGlvbklu
ZGV4ICsgMl0gJj0gflNVU1BFTkRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnlGaW5hbGx5KHRyeWFibGUsIGZpbmFsaXplcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5zdXNwZW5kTGlzdGVuZXJzID0gc3VzcGVu
ZExpc3RlbmVyczsgLyoqCi0gICAgICAgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgY3VycmVudGx5
IHdhdGNoZWQgZXZlbnRzCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
QG1ldGhvZCB3YXRjaGVkRXZlbnRzCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gd2F0Y2hl
ZEV2ZW50cyhvYmopIHsKLSAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBvYmpbTUVUQV9LRVld
Lmxpc3RlbmVycywgcmV0ID0gW107Ci0KLSAgICAgICAgICAgIGlmIChsaXN0ZW5lcnMpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gbGlzdGVuZXJzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbZXZlbnROYW1lXSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0LnB1c2goZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy53YXRjaGVkRXZlbnRzID0gd2F0Y2hlZEV2
ZW50czsgLyoqCi0gICAgICAgICAgICAgIFNlbmQgYW4gZXZlbnQuIFRoZSBleGVjdXRpb24gb2Yg
c3VzcGVuZGVkIGxpc3RlbmVycwotICAgICAgICAgICAgICBpcyBza2lwcGVkLCBhbmQgb25jZSBs
aXN0ZW5lcnMgYXJlIHJlbW92ZWQuIEEgbGlzdGVuZXIgd2l0aG91dAotICAgICAgICAgICAgICBh
IHRhcmdldCBpcyBleGVjdXRlZCBvbiB0aGUgcGFzc2VkIG9iamVjdC4gSWYgYW4gYXJyYXkgb2Yg
YWN0aW9ucwotICAgICAgICAgICAgICBpcyBub3QgcGFzc2VkLCB0aGUgYWN0aW9ucyBzdG9yZWQg
b24gdGhlIHBhc3NlZCBvYmplY3QgYXJlIGludm9rZWQuCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBzZW5kRXZlbnQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFy
YW0gb2JqCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtBcnJheX0gcGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGVhY2gg
bGlzdGVuZXIuCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGFjdGlvbnMgT3B0aW9uYWwg
YXJyYXkgb2YgYWN0aW9ucyAobGlzdGVuZXJzKS4KLSAgICAgICAgICAgICAgQHJldHVybiB0cnVl
Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBzZW5kRXZlbnQob2JqLCBldmVudE5h
bWUsIHBhcmFtcywgYWN0aW9ucykgewotICAgICAgICAgICAgLy8gZmlyc3QgZ2l2ZSBvYmplY3Qg
YSBjaGFuY2UgdG8gaGFuZGxlIGl0Ci0gICAgICAgICAgICBpZiAob2JqICE9PSBFbWJlciAmJiAn
ZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqLnNlbmRFdmVudCkgewotICAgICAgICAgICAgICAgIG9i
ai5zZW5kRXZlbnQoZXZlbnROYW1lLCBwYXJhbXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIWFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRB
X0tFWV07Ci0gICAgICAgICAgICAgICAgYWN0aW9ucyA9IG1ldGEgJiYgbWV0YS5saXN0ZW5lcnMg
JiYgbWV0YS5saXN0ZW5lcnNbZXZlbnROYW1lXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFhY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gYWN0aW9ucy5sZW5ndGggLSAzOyBpID49IDA7
IGkgLT0gMykgewotICAgICAgICAgICAgICAgIC8vIGxvb3BpbmcgaW4gcmV2ZXJzZSBmb3Igb25j
ZSBsaXN0ZW5lcnMKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYWN0aW9uc1tpXSwgbWV0
aG9kID0gYWN0aW9uc1tpICsgMV0sIGZsYWdzID0gYWN0aW9uc1tpICsgMl07Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNVU1BFTkRFRCkgewot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGZsYWdzICYgT05DRSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVM
aXN0ZW5lcihvYmosIGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkgewotICAgICAgICAgICAgICAgICAgICB0
YXJnZXQgPSBvYmo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgnc3Ry
aW5nJyA9PT0gdHlwZW9mIG1ldGhvZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1z
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBseVN0cih0YXJnZXQsIG1ldGhvZCwgcGFy
YW1zKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRhcmdldFttZXRob2RdKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcHBseSh0YXJnZXQsIG1ldGhvZCwgcGFyYW1zKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxs
KHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fLnNlbmRFdmVudCA9IHNlbmRFdmVudDsgLyoqCi0gICAgICAgICAgICAgIEBw
cml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgaGFzTGlzdGVuZXJzCi0gICAgICAgICAgICAg
IEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gZXZlbnROYW1lCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBo
YXNMaXN0ZW5lcnMob2JqLCBldmVudE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBtZXRhID0gb2Jq
W01FVEFfS0VZXSwKLSAgICAgICAgICAgIGFjdGlvbnMgPSBtZXRhICYmIG1ldGEubGlzdGVuZXJz
ICYmIG1ldGEubGlzdGVuZXJzW2V2ZW50TmFtZV07Ci0KLSAgICAgICAgICAgIHJldHVybiAhIShh
Y3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLmhhc0xpc3RlbmVycyA9IGhhc0xpc3RlbmVyczsgLyoqCi0gICAgICAgICAgICAgIEBwcml2
YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgbGlzdGVuZXJzRm9yCi0gICAgICAgICAgICAgIEBm
b3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZ30gZXZlbnROYW1lCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBsaXN0
ZW5lcnNGb3Iob2JqLCBldmVudE5hbWUpIHsKLSAgICAgICAgICAgIHZhciByZXQgPSBbXTsKLSAg
ICAgICAgICAgIHZhciBtZXRhID0gb2JqW01FVEFfS0VZXSwKLSAgICAgICAgICAgIGFjdGlvbnMg
PSBtZXRhICYmIG1ldGEubGlzdGVuZXJzICYmIG1ldGEubGlzdGVuZXJzW2V2ZW50TmFtZV07Ci0K
LSAgICAgICAgICAgIGlmICghYWN0aW9ucykgewotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYWN0aW9u
cy5sZW5ndGg7IGkgPCBsOyBpICs9IDMpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0g
YWN0aW9uc1tpXSwKLSAgICAgICAgICAgICAgICBtZXRob2QgPSBhY3Rpb25zW2kgKyAxXTsKLSAg
ICAgICAgICAgICAgICByZXQucHVzaChbdGFyZ2V0LCBtZXRob2RdKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLmxpc3RlbmVyc0ZvciA9IGxpc3RlbmVyc0ZvcjsgLyoqCi0gICAgICAgICAgICAgIERlZmlu
ZSBhIHByb3BlcnR5IGFzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbgot
ICAgICAgICAgICAgICBhIHNwZWNpZmllZCBldmVudCBvciBldmVudHMgYXJlIHRyaWdnZXJlZC4K
LQotCi0gICAgICAgICAgICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBKb2Ig
PSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBsb2dDb21wbGV0ZWQ6IEVt
YmVyLm9uKCdjb21wbGV0ZWQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdKb2IgY29tcGxldGVkIScpOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBqb2IgPSBKb2IuY3JlYXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgRW1iZXIuc2VuZEV2ZW50KGpvYiwgJ2NvbXBsZXRlZCcpOyAvLyBMb2dzICdKb2Ig
Y29tcGxldGVkIScKLSAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIG9u
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IGV2ZW50TmFtZXMqCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMKLSAgICAg
ICAgICAgICAgQHJldHVybiBmdW5jCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBv
bigpIHsKLSAgICAgICAgICAgIHZhciBmdW5jID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgLTEp
WzBdLAotICAgICAgICAgICAgZXZlbnRzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEp
OwotICAgICAgICAgICAgZnVuYy5fX2VtYmVyX2xpc3RlbnNfXyA9IGV2ZW50czsKLSAgICAgICAg
ICAgIHJldHVybiBmdW5jOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ub24gPSBv
bjsKLSAgICAgICAgX19leHBvcnRzX18ucmVtb3ZlTGlzdGVuZXIgPSByZW1vdmVMaXN0ZW5lcjsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVzIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJl
ckVycm9yID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBmb3JFYWNo
ID0gX19kZXBlbmRlbmN5Ml9fLmZvckVhY2g7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgQlJB
Q0VfRVhQQU5TSU9OID0gL14oKD86W15cLl0qXC4pKilceyguKilcfSQvOwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBFeHBhbmRzIGBwYXR0ZXJuYCwgaW52b2tpbmcgYGNhbGxiYWNrYCBm
b3IgZWFjaCBleHBhbnNpb24uCi0KLSAgICAgICAgICAgICAgVGhlIG9ubHkgcGF0dGVybiBzdXBw
b3J0ZWQgaXMgYnJhY2UtZXhwYW5zaW9uLCBhbnl0aGluZyBlbHNlIHdpbGwgYmUgcGFzc2VkCi0g
ICAgICAgICAgICAgIG9uY2UgdG8gYGNhbGxiYWNrYCBkaXJlY3RseS4gQnJhY2UgZXhwYW5zaW9u
IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIGEKLSAgICAgICAgICAgICAgcGF0dGVybiwg
Zm9yIGFuIGV4YW1wbGUgc2VlIHRoZSBsYXN0IGNhbGwgYmVsb3cuCi0KLSAgICAgICAgICAgICAg
RXhhbXBsZQotICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICBmdW5jdGlvbiBlY2hv
KGFyZyl7IGNvbnNvbGUubG9nKGFyZyk7IH0KLQotICAgICAgICAgICAgICBFbWJlci5leHBhbmRQ
cm9wZXJ0aWVzKCdmb28uYmFyJywgZWNobyk7ICAgICAgICAvLz0+ICdmb28uYmFyJwotICAgICAg
ICAgICAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzKCd7Zm9vLGJhcn0nLCBlY2hvKTsgICAgICAv
Lz0+ICdmb28nLCAnYmFyJwotICAgICAgICAgICAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzKCdm
b28ue2JhcixiYXp9JywgZWNobyk7ICAvLz0+ICdmb28uYmFyJywgJ2Zvby5iYXonCi0gICAgICAg
ICAgICAgIEVtYmVyLmV4cGFuZFByb3BlcnRpZXMoJ3tmb28sYmFyfS5iYXonLCBlY2hvKTsgIC8v
PT4gJ3tmb28sYmFyfS5iYXonCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQHBhcmFtIHtzdHJp
bmd9IHBhdHRlcm4gVGhlIHByb3BlcnR5IHBhdHRlcm4gdG8gZXhwYW5kLgotICAgICAgICAgICAg
ICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlLiAgSXQg
aXMgaW52b2tlZCBvbmNlIHBlcgotICAgICAgICAgICAgICBleHBhbnNpb24sIGFuZCBpcyBwYXNz
ZWQgdGhlIGV4cGFuc2lvbi4KLSAgICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGV4cGFuZFByb3BlcnRpZXMocGF0dGVybiwgY2FsbGJhY2sp
IHsKLSAgICAgICAgICAgIHZhciBtYXRjaCwgcHJlZml4LCBsaXN0OwotCi0gICAgICAgICAgICBp
ZiAocGF0dGVybi5pbmRleE9mKCcgJykgPiAtMSkgewotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFbWJlckVycm9yKCdCcmFjZSBleHBhbmRlZCBwcm9wZXJ0aWVzIGNhbm5vdCBjb250YWluIHNw
YWNlcywgJyArIAotICAgICAgICAgICAgICAgICdlLmcuIGB1c2VyLntmaXJzdE5hbWUsIGxhc3RO
YW1lfWAgc2hvdWxkIGJlIGB1c2VyLntmaXJzdE5hbWUsbGFzdE5hbWV9YCcpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobWF0Y2ggPSBCUkFDRV9FWFBBTlNJT04uZXhlYyhwYXR0
ZXJuKSkgewotICAgICAgICAgICAgICAgIHByZWZpeCA9IG1hdGNoWzFdOwotICAgICAgICAgICAg
ICAgIGxpc3QgPSBtYXRjaFsyXTsKLQotICAgICAgICAgICAgICAgIGZvckVhY2gobGlzdC5zcGxp
dCgnLCcpLCBmdW5jdGlvbiAoc3VmZml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHByZWZpeCArIHN1ZmZpeCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHBhdHRlcm4pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9nZXRfcHJvcGVydGll
cyIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMi
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBn
ZXQgPSBfX2RlcGVuZGVuY3kxX18uZ2V0OwotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRl
bmN5Ml9fLnR5cGVPZjsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVG8gZ2V0IG11bHRp
cGxlIHByb3BlcnRpZXMgYXQgb25jZSwgY2FsbCBgRW1iZXIuZ2V0UHJvcGVydGllc2AKLSAgICAg
ICAgICAgICAgd2l0aCBhbiBvYmplY3QgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIHN0cmluZ3Mgb3Ig
YW4gYXJyYXk6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBF
bWJlci5nZXRQcm9wZXJ0aWVzKHJlY29yZCwgJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd6aXBD
b2RlJyk7Ci0gICAgICAgICAgICAgIC8vIHsgZmlyc3ROYW1lOiAnSm9obicsIGxhc3ROYW1lOiAn
RG9lJywgemlwQ29kZTogJzEwMDExJyB9Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIGlzIGVxdWl2YWxlbnQgdG86Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBFbWJlci5nZXRQcm9wZXJ0aWVzKHJlY29yZCwgWydmaXJzdE5hbWUnLCAnbGFz
dE5hbWUnLCAnemlwQ29kZSddKTsKLSAgICAgICAgICAgICAgLy8geyBmaXJzdE5hbWU6ICdKb2hu
JywgbGFzdE5hbWU6ICdEb2UnLCB6aXBDb2RlOiAnMTAwMTEnIH0KLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgQG1ldGhvZCBnZXRQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIEBw
YXJhbSBvYmoKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmcuLi58QXJyYXl9IGxpc3Qgb2Yg
a2V5cyB0byBnZXQKLSAgICAgICAgICAgICAgQHJldHVybiB7SGFzaH0KLSAgICAgICAgICAgICov
Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVz
KG9iaikgewotICAgICAgICAgICAgdmFyIHJldCA9IHt9LAotICAgICAgICAgICAgcHJvcGVydHlO
YW1lcyA9IGFyZ3VtZW50cywKLSAgICAgICAgICAgIGkgPSAxOwotCi0gICAgICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlT2YoYXJndW1lbnRzWzFdKSA9PT0gJ2FycmF5
JykgewotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHZhciBs
ZW4gPSBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0W3Byb3BlcnR5TmFtZXNbaV1dID0gZ2V0KG9iaiwgcHJvcGVydHlOYW1lc1tpXSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9pbnN0cnVtZW50YXRpb24iLAotICAgIFsiZW1iZXIt
bWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciB0cnlDYXRjaEZpbmFsbHkgPSBfX2RlcGVuZGVuY3kyX18u
dHJ5Q2F0Y2hGaW5hbGx5OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGUgcHVycG9z
ZSBvZiB0aGUgRW1iZXIgSW5zdHJ1bWVudGF0aW9uIG1vZHVsZSBpcwotICAgICAgICAgICAgICB0
byBwcm92aWRlIGVmZmljaWVudCwgZ2VuZXJhbC1wdXJwb3NlIGluc3RydW1lbnRhdGlvbgotICAg
ICAgICAgICAgICBmb3IgRW1iZXIuCi0KLSAgICAgICAgICAgICAgU3Vic2NyaWJlIHRvIGEgbGlz
dGVuZXIgYnkgdXNpbmcgYEVtYmVyLnN1YnNjcmliZWA6Ci0KLSAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5zdWJzY3JpYmUoInJlbmRlciIsIHsKLSAgICAg
ICAgICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKG5hbWUsIHRpbWVzdGFtcCwgcGF5bG9hZCkgewot
Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIGFmdGVyOiBmdW5jdGlvbihu
YW1lLCB0aW1lc3RhbXAsIHBheWxvYWQpIHsKLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIElmIHlvdSByZXR1
cm4gYSB2YWx1ZSBmcm9tIHRoZSBgYmVmb3JlYCBjYWxsYmFjaywgdGhhdCBzYW1lCi0gICAgICAg
ICAgICAgIHZhbHVlIHdpbGwgYmUgcGFzc2VkIGFzIGEgZm91cnRoIHBhcmFtZXRlciB0byB0aGUg
YGFmdGVyYAotICAgICAgICAgICAgICBjYWxsYmFjay4KLQotICAgICAgICAgICAgICBJbnN0cnVt
ZW50IGEgYmxvY2sgb2YgY29kZSBieSB1c2luZyBgRW1iZXIuaW5zdHJ1bWVudGA6Ci0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5pbnN0cnVtZW50KCJy
ZW5kZXIuaGFuZGxlYmFycyIsIHBheWxvYWQsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IC8vIHJlbmRlcmluZyBsb2dpYwotICAgICAgICAgICAgICB9LCBiaW5kaW5nKTsKLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgRXZlbnQgbmFtZXMgcGFzc2VkIHRvIGBFbWJlci5p
bnN0cnVtZW50YCBhcmUgbmFtZXNwYWNlZAotICAgICAgICAgICAgICBieSBwZXJpb2RzLCBmcm9t
IG1vcmUgZ2VuZXJhbCB0byBtb3JlIHNwZWNpZmljLiBTdWJzY3JpYmVycwotICAgICAgICAgICAg
ICBjYW4gbGlzdGVuIGZvciBldmVudHMgYnkgd2hhdGV2ZXIgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkg
dGhleQotICAgICAgICAgICAgICBhcmUgaW50ZXJlc3RlZCBpbi4KLQotICAgICAgICAgICAgICBJ
biB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGV2ZW50IGlzIGByZW5kZXIuaGFuZGxlYmFyc2AsCi0g
ICAgICAgICAgICAgIGFuZCB0aGUgc3Vic2NyaWJlciBsaXN0ZW5lZCBmb3IgYWxsIGV2ZW50cyBi
ZWdpbm5pbmcgd2l0aAotICAgICAgICAgICAgICBgcmVuZGVyYC4gSXQgd291bGQgcmVjZWl2ZSBj
YWxsYmFja3MgZm9yIGV2ZW50cyBuYW1lZAotICAgICAgICAgICAgICBgcmVuZGVyYCwgYHJlbmRl
ci5oYW5kbGViYXJzYCwgYHJlbmRlci5jb250YWluZXJgLCBvcgotICAgICAgICAgICAgICBldmVu
IGByZW5kZXIuaGFuZGxlYmFycy5sYXlvdXRgLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBJbnN0
cnVtZW50YXRpb24KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAg
ICBAc3RhdGljCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgc3Vic2NyaWJlcnMgPSBbXSwg
Y2FjaGUgPSB7fTsKLQotICAgICAgICB2YXIgcG9wdWxhdGVMaXN0ZW5lcnMgPSBmdW5jdGlvbihu
YW1lKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gW10sIHN1YnNjcmliZXI7Ci0KLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vic2NyaWJlcnMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgc3Vic2NyaWJlciA9IHN1YnNjcmliZXJzW2ldOwotICAg
ICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLnJlZ2V4LnRlc3QobmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2goc3Vic2NyaWJlci5vYmplY3QpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FjaGVbbmFtZV0gPSBsaXN0
ZW5lcnM7Ci0gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzOwotICAgICAgICB9OwotCi0gICAg
ICAgIHZhciB0aW1lID0gKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHBlcmYgPSAndW5k
ZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdy5wZXJmb3JtYW5jZSB8fCB7fQotICAg
ICAgICAgICAgOiB7fTsKLSAgICAgICAgICAgIHZhciBmbiA9IHBlcmYubm93IHx8IHBlcmYubW96
Tm93IHx8IHBlcmYud2Via2l0Tm93IHx8IHBlcmYubXNOb3cgfHwgcGVyZi5vTm93OwotICAgICAg
ICAgICAgLy8gZm4uYmluZCB3aWxsIGJlIGF2YWlsYWJsZSBpbiBhbGwgdGhlIGJyb3dzZXJzIHRo
YXQgc3VwcG9ydCB0aGUgYWR2YW5jZWQgd2luZG93LnBlcmZvcm1hbmNlLi4uIDstKQotICAgICAg
ICAgICAgcmV0dXJuIGZuID8gZm4uYmluZChwZXJmKSA6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiArIG5ldyBEYXRlKCk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9KSgp
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBOb3RpZmllcyBldmVudCdzIHN1YnNjcmli
ZXJzLCBjYWxscyBgYmVmb3JlYCBhbmQgYGFmdGVyYCBob29rcy4KLQotICAgICAgICAgICAgICBA
bWV0aG9kIGluc3RydW1lbnQKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlci5JbnN0cnVt
ZW50YXRpb24KLQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW25hbWVdIE5hbWVzcGFj
ZWQgZXZlbnQgbmFtZS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCB5b3Un
cmUgaW5zdHJ1bWVudGluZy4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGJpbmRpbmcg
Q29udGV4dCB0aGF0IGluc3RydW1lbnQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGguCi0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbnN0cnVtZW50KG5hbWUsIHBheWxvYWQsIGNhbGxi
YWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gY2FjaGVbbmFtZV0s
IHRpbWVOYW1lLCByZXQ7Ci0KLSAgICAgICAgICAgIC8vIEVTNlRPRE86IERvY3MuIFdoYXQgaXMg
dGhpcz8KLSAgICAgICAgICAgIGlmIChFbWJlci5TVFJVQ1RVUkVEX1BST0ZJTEUpIHsKLSAgICAg
ICAgICAgICAgICB0aW1lTmFtZSA9IG5hbWUgKyAiOiAiICsgcGF5bG9hZC5vYmplY3Q7Ci0gICAg
ICAgICAgICAgICAgY29uc29sZS50aW1lKHRpbWVOYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCFsaXN0ZW5lcnMpIHsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBw
b3B1bGF0ZUxpc3RlbmVycyhuYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGxpc3RlbmVycy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSBjYWxsYmFj
ay5jYWxsKGJpbmRpbmcpOwotICAgICAgICAgICAgICAgIGlmIChFbWJlci5TVFJVQ1RVUkVEX1BS
T0ZJTEUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKHRpbWVOYW1lKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIGJlZm9yZVZhbHVlcyA9IFtdLCBsaXN0ZW5lciwgaSwg
bDsKLQotICAgICAgICAgICAgZnVuY3Rpb24gdHJ5YWJsZSgpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAg
YmVmb3JlVmFsdWVzW2ldID0gbGlzdGVuZXIuYmVmb3JlKG5hbWUsIHRpbWUoKSwgcGF5bG9hZCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNh
bGwoYmluZGluZyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGNhdGNo
YWJsZShlKSB7Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWQgfHwge307Ci0gICAg
ICAgICAgICAgICAgcGF5bG9hZC5leGNlcHRpb24gPSBlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmdW5jdGlvbiBmaW5hbGl6ZXIoKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0g
MCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVy
LmFmdGVyKG5hbWUsIHRpbWUoKSwgcGF5bG9hZCwgYmVmb3JlVmFsdWVzW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoRW1iZXIuU1RSVUNUVVJFRF9QUk9GSUxF
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUVuZCh0aW1lTmFtZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ5Q2F0
Y2hGaW5hbGx5KHRyeWFibGUsIGNhdGNoYWJsZSwgZmluYWxpemVyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIF9fZXhwb3J0c19fLmluc3RydW1lbnQgPSBpbnN0cnVtZW50OyAvKioKLSAgICAgICAg
ICAgICAgU3Vic2NyaWJlcyB0byBhIHBhcnRpY3VsYXIgZXZlbnQgb3IgaW5zdHJ1bWVudGVkIGJs
b2NrIG9mIGNvZGUuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBzdWJzY3JpYmUKLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlci5JbnN0cnVtZW50YXRpb24KLQotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gW3BhdHRlcm5dIE5hbWVzcGFjZWQgZXZlbnQgbmFtZS4KLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIEJlZm9yZSBhbmQgQWZ0ZXIgaG9va3MuCi0K
LSAgICAgICAgICAgICAgQHJldHVybiB7U3Vic2NyaWJlcn0KLSAgICAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIHN1YnNjcmliZShwYXR0ZXJuLCBvYmplY3QpIHsKLSAgICAgICAgICAgIHZh
ciBwYXRocyA9IHBhdHRlcm4uc3BsaXQoIi4iKSwgcGF0aCwgcmVnZXggPSBbXTsKLQotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBwYXRoID0gcGF0aHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHBhdGgg
PT09ICIqIikgewotICAgICAgICAgICAgICAgICAgICByZWdleC5wdXNoKCJbXlxcLl0qIik7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVnZXgucHVzaChw
YXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
Z2V4ID0gcmVnZXguam9pbigiXFwuIik7Ci0gICAgICAgICAgICByZWdleCA9IHJlZ2V4ICsgIihc
XC4uKik/IjsKLQotICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSB7Ci0gICAgICAgICAgICAg
ICAgcGF0dGVybjogcGF0dGVybiwKLSAgICAgICAgICAgICAgICByZWdleDogbmV3IFJlZ0V4cCgi
XiIgKyByZWdleCArICIkIiksCi0gICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIHN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcik7Ci0g
ICAgICAgICAgICBjYWNoZSA9IHt9OwotCi0gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnN1YnNjcmliZSA9IHN1YnNjcmliZTsg
LyoqCi0gICAgICAgICAgICAgIFVuc3Vic2NyaWJlcyBmcm9tIGEgcGFydGljdWxhciBldmVudCBv
ciBpbnN0cnVtZW50ZWQgYmxvY2sgb2YgY29kZS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHVu
c3Vic2NyaWJlCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIuSW5zdHJ1bWVudGF0aW9u
Ci0KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFtzdWJzY3JpYmVyXQotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdW5zdWJzY3JpYmUoc3Vic2NyaWJlcikgewotICAgICAg
ICAgICAgdmFyIGluZGV4OwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnNj
cmliZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChzdWJzY3Jp
YmVyc1tpXSA9PT0gc3Vic2NyaWJlcikgewotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdWJzY3Jp
YmVycy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgY2FjaGUgPSB7fTsKLSAgICAgICAg
fQotCi0gICAgICAgIF9fZXhwb3J0c19fLnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7IC8qKgot
ICAgICAgICAgICAgICBSZXNldHMgYEVtYmVyLkluc3RydW1lbnRhdGlvbmAgYnkgZmx1c2hpbmcg
bGlzdCBvZiBzdWJzY3JpYmVycy4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlc2V0Ci0gICAg
ICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIuSW5zdHJ1bWVudGF0aW9uCi0gICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiByZXNldCgpIHsKLSAgICAgICAgICAgIHN1YnNjcmliZXJzID0g
W107Ci0gICAgICAgICAgICBjYWNoZSA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18ucmVzZXQgPSByZXNldDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2lz
X2JsYW5rIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvaXNfZW1wdHki
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBF
bWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBkZXByZWNhdGVG
dW5jCi0gICAgICAgIHZhciBpc0VtcHR5ID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgdmFsdWUgaXMgYmxhbmsgaWYgaXQgaXMgZW1w
dHkgb3IgYSB3aGl0ZXNwYWNlIHN0cmluZy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIEVtYmVyLmlzQmxhbmsoKTsgICAgICAgICAgICAgICAgLy8gdHJ1ZQot
ICAgICAgICAgICAgICBFbWJlci5pc0JsYW5rKG51bGwpOyAgICAgICAgICAgIC8vIHRydWUKLSAg
ICAgICAgICAgICAgRW1iZXIuaXNCbGFuayh1bmRlZmluZWQpOyAgICAgICAvLyB0cnVlCi0gICAg
ICAgICAgICAgIEVtYmVyLmlzQmxhbmsoJycpOyAgICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAg
ICAgICAgICBFbWJlci5pc0JsYW5rKFtdKTsgICAgICAgICAgICAgIC8vIHRydWUKLSAgICAgICAg
ICAgICAgRW1iZXIuaXNCbGFuaygnXG5cdCcpOyAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAg
ICAgIEVtYmVyLmlzQmxhbmsoJyAgJyk7ICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAg
ICBFbWJlci5pc0JsYW5rKHt9KTsgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAg
IEVtYmVyLmlzQmxhbmsoJ1xuXHQgSGVsbG8nKTsgICAgLy8gZmFsc2UKLSAgICAgICAgICAgICAg
RW1iZXIuaXNCbGFuaygnSGVsbG8gd29ybGQnKTsgICAvLyBmYWxzZQotICAgICAgICAgICAgICBF
bWJlci5pc0JsYW5rKFsxLDIsM10pOyAgICAgICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEBtZXRob2QgaXNCbGFuawotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVmFsdWUgdG8gdGVzdAotICAg
ICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgICBAc2luY2UgMS41LjAK
LSAgICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0
aW9uIGlzQmxhbmsob2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gaXNFbXB0eShvYmopIHx8ICh0
eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoubWF0Y2goL1xTLykgPT09IG51bGwpOwotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9pc19lbXB0eSIsCi0gICAg
WyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1t
ZXRhbC9pc19ub25lIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBkZXByZWNhdGVGdW5jCi0gICAgICAgIHZhciBnZXQgPSBfX2Rl
cGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgaXNOb25lID0gX19kZXBlbmRlbmN5M19fWyJk
ZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFZlcmlmaWVzIHRoYXQgYSB2
YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nLCBlbXB0eSBhcnJheSwKLSAgICAgICAg
ICAgICAgb3IgZW1wdHkgZnVuY3Rpb24uCi0KLSAgICAgICAgICAgICAgQ29uc3RyYWlucyB0aGUg
cnVsZXMgb24gYEVtYmVyLmlzTm9uZWAgYnkgcmV0dXJuaW5nIGZhbHNlIGZvciBlbXB0eQotICAg
ICAgICAgICAgICBzdHJpbmcgYW5kIGVtcHR5IGFycmF5cy4KLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmlzRW1wdHkoKTsgICAgICAgICAgICAgICAg
Ly8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc0VtcHR5KG51bGwpOyAgICAgICAgICAgIC8v
IHRydWUKLSAgICAgICAgICAgICAgRW1iZXIuaXNFbXB0eSh1bmRlZmluZWQpOyAgICAgICAvLyB0
cnVlCi0gICAgICAgICAgICAgIEVtYmVyLmlzRW1wdHkoJycpOyAgICAgICAgICAgICAgLy8gdHJ1
ZQotICAgICAgICAgICAgICBFbWJlci5pc0VtcHR5KFtdKTsgICAgICAgICAgICAgIC8vIHRydWUK
LSAgICAgICAgICAgICAgRW1iZXIuaXNFbXB0eSgnQWRhbSBIYXdraW5zJyk7ICAvLyBmYWxzZQot
ICAgICAgICAgICAgICBFbWJlci5pc0VtcHR5KFswLDEsMl0pOyAgICAgICAgIC8vIGZhbHNlCi0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgaXNFbXB0eQotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVmFs
dWUgdG8gdGVzdAotICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBp
c05vbmUob2JqKSB8fCAob2JqLmxlbmd0aCA9PT0gMCAmJiB0eXBlb2Ygb2JqICE9PSAnZnVuY3Rp
b24nKSB8fCAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgZ2V0KG9iaiwgJ2xlbmd0aCcpID09
PSAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBlbXB0eSA9IEVtYmVyLmRlcHJlY2F0ZUZ1
bmMoIkVtYmVyLmVtcHR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgRW1iZXIuaXNFbXB0eSBp
bnN0ZWFkLiIsIGlzRW1wdHkpOwotICAgICAgICBfX2V4cG9ydHNfXy5lbXB0eSA9IGVtcHR5Owot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gaXNFbXB0eTsKLSAgICAgICAgX19leHBv
cnRzX18uaXNFbXB0eSA9IGlzRW1wdHk7Ci0gICAgICAgIF9fZXhwb3J0c19fLmVtcHR5ID0gZW1w
dHk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9pc19ub25lIiwKLSAgICBbImVt
YmVyLW1ldGFsL2NvcmUiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1i
ZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gZGVwcmVjYXRlRnVu
YwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3Nl
ZCB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZC4gVGhpcyBhdm9pZHMgZXJyb3JzCi0gICAgICAg
ICAgICAgIGZyb20gSlNMaW50IGNvbXBsYWluaW5nIGFib3V0IHVzZSBvZiA9PSwgd2hpY2ggY2Fu
IGJlIHRlY2huaWNhbGx5Ci0gICAgICAgICAgICAgIGNvbmZ1c2luZy4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmlzTm9uZSgpOyAgICAgICAgICAg
ICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc05vbmUobnVsbCk7ICAgICAgICAgIC8v
IHRydWUKLSAgICAgICAgICAgICAgRW1iZXIuaXNOb25lKHVuZGVmaW5lZCk7ICAgICAvLyB0cnVl
Ci0gICAgICAgICAgICAgIEVtYmVyLmlzTm9uZSgnJyk7ICAgICAgICAgICAgLy8gZmFsc2UKLSAg
ICAgICAgICAgICAgRW1iZXIuaXNOb25lKFtdKTsgICAgICAgICAgICAvLyBmYWxzZQotICAgICAg
ICAgICAgICBFbWJlci5pc05vbmUoZnVuY3Rpb24oKSB7fSk7ICAvLyBmYWxzZQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGlzTm9uZQotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVmFsdWUgdG8gdGVz
dAotICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gaXNOb25lKG9iaikgewotICAgICAgICAgICAgcmV0dXJuIG9iaiA9PT0gbnVs
bCB8fCBvYmogPT09IHVuZGVmaW5lZDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBub25lID0g
RW1iZXIuZGVwcmVjYXRlRnVuYygiRW1iZXIubm9uZSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNl
IEVtYmVyLmlzTm9uZSBpbnN0ZWFkLiIsIGlzTm9uZSk7Ci0gICAgICAgIF9fZXhwb3J0c19fLm5v
bmUgPSBub25lOwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gaXNOb25lOwotICAg
ICAgICBfX2V4cG9ydHNfXy5pc05vbmUgPSBpc05vbmU7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1tZXRhbC9saWJyYXJpZXMiLAotICAgIFsiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGls
cyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8vIFByb3ZpZGVzIGEgd2F5IHRv
IHJlZ2lzdGVyIGxpYnJhcnkgdmVyc2lvbnMgd2l0aCBlbWJlci4KLSAgICAgICAgdmFyIGZvckVh
Y2ggPSBfX2RlcGVuZGVuY3kxX18uZm9yRWFjaDsKLSAgICAgICAgdmFyIGluZGV4T2YgPSBfX2Rl
cGVuZGVuY3kxX18uaW5kZXhPZjsKLQotICAgICAgICB2YXIgbGlicmFyaWVzID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICB2YXIgX2xpYnJhcmllcyA9IFtdOwotICAgICAgICAgICAgdmFyIGNv
cmVMaWJJbmRleCA9IDA7Ci0KLSAgICAgICAgICAgIHZhciBnZXRMaWJyYXJ5ID0gZnVuY3Rpb24o
bmFtZSkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xpYnJhcmllcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoX2xpYnJhcmllc1tpXS5uYW1l
ID09PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xpYnJhcmllc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgIF9saWJyYXJpZXMucmVnaXN0ZXIgPSBmdW5jdGlvbihuYW1lLCB2
ZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnZXRMaWJyYXJ5KG5hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIF9saWJyYXJpZXMucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbgot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICBfbGlicmFyaWVzLnJlZ2lzdGVyQ29yZUxpYnJhcnkgPSBmdW5jdGlv
bihuYW1lLCB2ZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnZXRMaWJyYXJ5KG5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIF9saWJyYXJpZXMuc3BsaWNlKGNvcmVMaWJJbmRleCsr
LCAwLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBfbGlicmFyaWVz
LmRlUmVnaXN0ZXIgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpYiA9
IGdldExpYnJhcnkobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpYikgCi0gICAgICAgICAg
ICAgICAgICAgIF9saWJyYXJpZXMuc3BsaWNlKGluZGV4T2YoX2xpYnJhcmllcywgbGliKSwgMSk7
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBfbGlicmFyaWVzLmVhY2ggPSBmdW5jdGlv
biAoY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBmb3JFYWNoKF9saWJyYXJpZXMsIGZ1bmN0
aW9uKGxpYikgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaWIubmFtZSwgbGliLnZl
cnNpb24pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgcmV0dXJuIF9saWJyYXJpZXM7Ci0gICAgICAgIH0oKTsKLQotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gbGlicmFyaWVzOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0
YWwvbG9nZ2VyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvZXJyb3Ii
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBF
bWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJFcnJv
ciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnNv
bGVNZXRob2QobmFtZSkgewotICAgICAgICAgICAgdmFyIGNvbnNvbGVPYmosIGxvZ1RvQ29uc29s
ZTsKLSAgICAgICAgICAgIGlmIChFbWJlci5pbXBvcnRzLmNvbnNvbGUpIHsKLSAgICAgICAgICAg
ICAgICBjb25zb2xlT2JqID0gRW1iZXIuaW1wb3J0cy5jb25zb2xlOwotICAgICAgICAgICAgfSBl
bHNlIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAg
ICBjb25zb2xlT2JqID0gY29uc29sZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFy
IG1ldGhvZCA9IHR5cGVvZiBjb25zb2xlT2JqID09PSAnb2JqZWN0JyA/IGNvbnNvbGVPYmpbbmFt
ZV0gOiBudWxsOwotCi0gICAgICAgICAgICBpZiAobWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gT2xkZXIgSUUgZG9lc24ndCBzdXBwb3J0IGFwcGx5LCBidXQgQ2hyb21lIG5lZWRzIGl0Ci0g
ICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QuYXBwbHkgPT09ICdmdW5jdGlvbicpIHsK
LSAgICAgICAgICAgICAgICAgICAgbG9nVG9Db25zb2xlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtZXRob2QuYXBwbHkoY29uc29sZU9iaiwgYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgbG9nVG9Db25zb2xlLmRp
c3BsYXlOYW1lID0gJ2NvbnNvbGUuJyArIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBsb2dUb0NvbnNvbGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1l
c3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJywgJyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtZXRob2QobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gYXNzZXJ0UG9seWZpbGwodGVzdCwgbWVzc2FnZSkgewotICAgICAgICAgICAg
aWYgKCF0ZXN0KSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYXR0ZW1wdCB0byBwcmVzZXJ2ZSB0aGUgc3RhY2sKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVtYmVyRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBtZXNzYWdlKTsKLSAgICAg
ICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIH0sIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBJbnNpZGUgRW1iZXIt
TWV0YWwsIHNpbXBseSB1c2VzIHRoZSBtZXRob2RzIGZyb20gYGltcG9ydHMuY29uc29sZWAuCi0g
ICAgICAgICAgICAgIE92ZXJyaWRlIHRoaXMgdG8gcHJvdmlkZSBtb3JlIHJvYnVzdCBsb2dnaW5n
IGZ1bmN0aW9uYWxpdHkuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIExvZ2dlcgotICAgICAgICAg
ICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgTG9n
cyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zb2xlLgotICAgICAgICAgICAgICAgICAgIFlvdSBj
YW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50cyBhcyB5b3Ugd2FudCBhbmQgdGhleSB3aWxsIGJlIGpv
aW5lZCB0b2dldGhlciB3aXRoIGEgc3BhY2UuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgZm9vID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuTG9nZ2VyLmxvZygnbG9nIHZhbHVlIG9mIGZvbzonLCBmb28pOwotICAgICAg
ICAgICAgICAgICAgICAvLyAibG9nIHZhbHVlIG9mIGZvbzogMSIgd2lsbCBiZSBwcmludGVkIHRv
IHRoZSBjb25zb2xlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBsb2cKLSAgICAgICAgICAgICAgICAgICBAZm9yIEVtYmVyLkxvZ2dlcgotICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgbG9nOiBjb25zb2xlTWV0aG9kKCdsb2cnKSB8fCBFbWJlci5LLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBQcmludHMgdGhlIGFyZ3VtZW50cyB0
byB0aGUgY29uc29sZSB3aXRoIGEgd2FybmluZyBpY29uLgotICAgICAgICAgICAgICAgICAgIFlv
dSBjYW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50cyBhcyB5b3Ugd2FudCBhbmQgdGhleSB3aWxsIGJl
IGpvaW5lZCB0b2dldGhlciB3aXRoIGEgc3BhY2UuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIud2FybignU29tZXRo
aW5nIGhhcHBlbmVkIScpOwotICAgICAgICAgICAgICAgICAgICAvLyAiU29tZXRoaW5nIGhhcHBl
bmVkISIgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlIHdpdGggYSB3YXJuaW5nIGljb24u
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3
YXJuCi0gICAgICAgICAgICAgICAgICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgICAgICAgICAg
ICAgICBAcGFyYW0geyp9IGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHdhcm46IGNvbnNvbGVNZXRob2QoJ3dhcm4nKSB8fCBFbWJlci5LLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICBQcmludHMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29u
c29sZSB3aXRoIGFuIGVycm9yIGljb24sIHJlZCB0ZXh0IGFuZCBhIHN0YWNrIHRyYWNlLgotICAg
ICAgICAgICAgICAgICAgIFlvdSBjYW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50cyBhcyB5b3Ugd2Fu
dCBhbmQgdGhleSB3aWxsIGJlIGpvaW5lZCB0b2dldGhlciB3aXRoIGEgc3BhY2UuCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5M
b2dnZXIuZXJyb3IoJ0RhbmdlciEgRGFuZ2VyIScpOwotICAgICAgICAgICAgICAgICAgICAvLyAi
RGFuZ2VyISBEYW5nZXIhIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUgaW4gcmVkIHRl
eHQuCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBlcnJvcgotICAgICAgICAgICAgICAgICAgIEBmb3IgRW1iZXIuTG9nZ2VyCi0gICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHsqfSBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBlcnJvcjogY29uc29sZU1ldGhvZCgnZXJyb3InKSB8fCBFbWJlci5LLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBMb2dzIHRoZSBhcmd1bWVudHMgdG8gdGhl
IGNvbnNvbGUuCi0gICAgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFzIG1hbnkgYXJndW1l
bnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyIHdpdGggYSBz
cGFjZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBmb28gPSAxOwotICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIuaW5m
bygnbG9nIHZhbHVlIG9mIGZvbzonLCBmb28pOwotICAgICAgICAgICAgICAgICAgICAvLyAibG9n
IHZhbHVlIG9mIGZvbzogMSIgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlCi0gICAgICAg
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbmZvCi0gICAg
ICAgICAgICAgICAgICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgICAgICAgICAgICAgICBAcGFy
YW0geyp9IGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluZm86
IGNvbnNvbGVNZXRob2QoJ2luZm8nKSB8fCBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICBMb2dzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnNvbGUgaW4gYmx1
ZSB0ZXh0LgotICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50
cyBhcyB5b3Ugd2FudCBhbmQgdGhleSB3aWxsIGJlIGpvaW5lZCB0b2dldGhlciB3aXRoIGEgc3Bh
Y2UuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAg
ICAgICB2YXIgZm9vID0gMTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmRlYnVn
KCdsb2cgdmFsdWUgb2YgZm9vOicsIGZvbyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vICJsb2cg
dmFsdWUgb2YgZm9vOiAxIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRlYnVnCi0gICAg
ICAgICAgICAgICAgICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgICAgICAgICAgICAgICBAcGFy
YW0geyp9IGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlYnVn
OiBjb25zb2xlTWV0aG9kKCdkZWJ1ZycpIHx8IGNvbnNvbGVNZXRob2QoJ2luZm8nKSB8fCBFbWJl
ci5LLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBJZiB0aGUgdmFsdWUg
cGFzc2VkIGludG8gYEVtYmVyLkxvZ2dlci5hc3NlcnRgIGlzIG5vdCB0cnV0aHkgaXQgd2lsbCB0
aHJvdyBhbiBlcnJvciB3aXRoIGEgc3RhY2sgdHJhY2UuCi0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIuYXNzZXJ0KHRy
dWUpOyAvLyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmFzc2Vy
dCh0cnVlID09PSBmYWxzZSk7IC8vIFRocm93cyBhbiBBc3NlcnRpb24gZmFpbGVkIGVycm9yLgot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYXNz
ZXJ0Ci0gICAgICAgICAgICAgICAgICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge0Jvb2xlYW59IGJvb2wgVmFsdWUgdG8gdGVzdAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGFzc2VydDogY29uc29sZU1ldGhvZCgnYXNzZXJ0JykgfHwgYXNz
ZXJ0UG9seWZpbGwKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFs
L21hcCIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRp
bHMiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwK
LSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICAgICAgSmF2YVNjcmlwdCAo
YmVmb3JlIEVTNikgZG9lcyBub3QgaGF2ZSBhIE1hcCBpbXBsZW1lbnRhdGlvbi4gT2JqZWN0cywK
LSAgICAgICAgICAgICAgd2hpY2ggYXJlIG9mdGVuIHVzZWQgYXMgZGljdGlvbmFyaWVzLCBtYXkg
b25seSBoYXZlIFN0cmluZ3MgYXMga2V5cy4KLQotICAgICAgICAgICAgICBCZWNhdXNlIEVtYmVy
IGhhcyBhIHdheSB0byBnZXQgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZXZlcnkgb2JqZWN0Ci0g
ICAgICAgICAgICAgIHZpYSBgRW1iZXIuZ3VpZEZvcmAsIHdlIGNhbiBpbXBsZW1lbnQgYSBwZXJm
b3JtYW50IE1hcCB3aXRoIGFyYml0cmFyeQotICAgICAgICAgICAgICBrZXlzLiBCZWNhdXNlIGl0
IGlzIGNvbW1vbmx5IHVzZWQgaW4gbG93LWxldmVsIGJvb2trZWVwaW5nLCBNYXAgaXMKLSAgICAg
ICAgICAgICAgaW1wbGVtZW50ZWQgYXMgYSBwdXJlIEphdmFTY3JpcHQgb2JqZWN0IGZvciBwZXJm
b3JtYW5jZS4KLQotICAgICAgICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhl
IGN1cnJlbnQgaXRlcmF0aW9uIG9mIHRoZSBFUzYgcHJvcG9zYWwgZm9yCi0gICAgICAgICAgICAg
IG1hcHMgKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6c2lt
cGxlX21hcHNfYW5kX3NldHMpLAotICAgICAgICAgICAgICB3aXRoIHR3byBleGNlcHRpb25zLiBG
aXJzdCwgYmVjYXVzZSB3ZSBuZWVkIG91ciBpbXBsZW1lbnRhdGlvbiB0byBiZSBwbGVhc2FudAot
ICAgICAgICAgICAgICBvbiBvbGRlciBicm93c2Vycywgd2UgZG8gbm90IHVzZSB0aGUgYGRlbGV0
ZWAgbmFtZSAodXNpbmcgYHJlbW92ZWAgaW5zdGVhZCkuCi0gICAgICAgICAgICAgIFNlY29uZCwg
YXMgd2UgZG8gbm90IGhhdmUgdGhlIGx1eHVyeSBvZiBpbi1WTSBpdGVyYXRpb24sIHdlIGltcGxl
bWVudCBhCi0gICAgICAgICAgICAgIGZvckVhY2ggbWV0aG9kIGZvciBpdGVyYXRpb24uCi0KLSAg
ICAgICAgICAgICAgTWFwIGlzIG1vY2tlZCBvdXQgdG8gbG9vayBsaWtlIGFuIEVtYmVyIG9iamVj
dCwgc28geW91IGNhbiBkbwotICAgICAgICAgICAgICBgRW1iZXIuTWFwLmNyZWF0ZSgpYCBmb3Ig
c3ltbWV0cnkgd2l0aCBvdGhlciBFbWJlciBjbGFzc2VzLgotICAgICAgICAgICAgKi8KLQotICAg
ICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5MV9fLnNldDsKLSAgICAgICAgdmFyIGd1aWRGb3Ig
PSBfX2RlcGVuZGVuY3kyX18uZ3VpZEZvcjsKLSAgICAgICAgdmFyIGluZGV4T2YgPSBfX2RlcGVu
ZGVuY3kzX18uaW5kZXhPZjsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTRfXy5j
cmVhdGU7Ci0KLSAgICAgICAgZnVuY3Rpb24gY29weShvYmopIHsKLSAgICAgICAgICAgIHZhciBv
dXRwdXQgPSB7fTsKLQotICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKLSAgICAg
ICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG91dHB1dFtwcm9wXSA9IG9ialtwcm9wXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBjb3B5TWFwKG9yaWdpbmFsLCBuZXdPYmplY3QpIHsKLSAgICAgICAgICAg
IHZhciBrZXlzID0gb3JpZ2luYWwua2V5cy5jb3B5KCksCi0gICAgICAgICAgICB2YWx1ZXMgPSBj
b3B5KG9yaWdpbmFsLnZhbHVlcyk7Ci0KLSAgICAgICAgICAgIG5ld09iamVjdC5rZXlzID0ga2V5
czsKLSAgICAgICAgICAgIG5ld09iamVjdC52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgICAgICAgICBu
ZXdPYmplY3QubGVuZ3RoID0gb3JpZ2luYWwubGVuZ3RoOwotCi0gICAgICAgICAgICByZXR1cm4g
bmV3T2JqZWN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMg
Y2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IEVtYmVyIGFuZCBFbWJlciBEYXRhLgotICAgICAg
ICAgICAgICBQbGVhc2UgZG8gbm90IHVzZSBpdCBhdCB0aGlzIHRpbWUuIFdlIHBsYW4gdG8gY2xl
YW4gaXQgdXAKLSAgICAgICAgICAgICAgYW5kIGFkZCBtYW55IHRlc3RzIHNvb24uCi0KLSAgICAg
ICAgICAgICAgQGNsYXNzIE9yZGVyZWRTZXQKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJl
cgotICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIE9yZGVyZWRTZXQoKSB7Ci0gICAgICAgICAg
ICB0aGlzLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
QG1ldGhvZCBjcmVhdGUKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAcmV0
dXJuIHtFbWJlci5PcmRlcmVkU2V0fQotICAgICAgICAgICAgKi8KLSAgICAgICAgT3JkZXJlZFNl
dC5jcmVhdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgT3JkZXJlZFNl
dCgpOwotICAgICAgICB9OwotCi0KLSAgICAgICAgT3JkZXJlZFNldC5wcm90b3R5cGUgPSB7Ci0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjbGVhcgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnByZXNlbmNlU2V0ID0ge307Ci0gICAgICAgICAgICAgICAgdGhpcy5saXN0
ID0gW107Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBhZGQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkZDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGd1aWQgPSBndWlkRm9yKG9iaiksCi0gICAgICAgICAgICAgICAgcHJlc2Vu
Y2VTZXQgPSB0aGlzLnByZXNlbmNlU2V0LAotICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmxp
c3Q7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ3VpZCBpbiBwcmVzZW5jZVNldCkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcHJlc2VuY2VTZXRbZ3VpZF0gPSB0cnVlOwotICAgICAgICAgICAgICAgIGxpc3QucHVzaChv
YmopOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKG9iaikgewotICAg
ICAgICAgICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihvYmopLAotICAgICAgICAgICAgICAgIHBy
ZXNlbmNlU2V0ID0gdGhpcy5wcmVzZW5jZVNldCwKLSAgICAgICAgICAgICAgICBsaXN0ID0gdGhp
cy5saXN0OwotCi0gICAgICAgICAgICAgICAgZGVsZXRlIHByZXNlbmNlU2V0W2d1aWRdOwotCi0g
ICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhPZi5jYWxsKGxpc3QsIG9iaik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlzdC5z
cGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGlzRW1wdHkKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBpc0VtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5saXN0Lmxlbmd0aCA9PT0gMDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGhhcwotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0gb2JqCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAg
ICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3Iob2JqKSwKLSAgICAgICAgICAgICAgICBwcmVzZW5j
ZVNldCA9IHRoaXMucHJlc2VuY2VTZXQ7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZ3VpZCBp
biBwcmVzZW5jZVNldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGZvckVhY2gKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtGdW5jdGlvbn0gZm4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHNlbGYKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihmbiwgc2VsZikgewot
ICAgICAgICAgICAgICAgIC8vIGFsbG93IG11dGF0aW9uIGR1cmluZyBpdGVyYXRpb24KLSAgICAg
ICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMudG9BcnJheSgpOwotCi0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGogPSBsaXN0Lmxlbmd0aDsgaSA8IGo7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBmbi5jYWxsKHNlbGYsIGxpc3RbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIHRvQXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubGlzdC5zbGljZSgpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29weQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5PcmRlcmVkU2V0fQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGNvcHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBz
ZXQgPSBuZXcgT3JkZXJlZFNldCgpOwotCi0gICAgICAgICAgICAgICAgc2V0LnByZXNlbmNlU2V0
ID0gY29weSh0aGlzLnByZXNlbmNlU2V0KTsKLSAgICAgICAgICAgICAgICBzZXQubGlzdCA9IHRo
aXMudG9BcnJheSgpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBNYXAgc3RvcmVz
IHZhbHVlcyBpbmRleGVkIGJ5IGtleXMuIFVubGlrZSBKYXZhU2NyaXB0J3MKLSAgICAgICAgICAg
ICAgZGVmYXVsdCBPYmplY3RzLCB0aGUga2V5cyBvZiBhIE1hcCBjYW4gYmUgYW55IEphdmFTY3Jp
cHQKLSAgICAgICAgICAgICAgb2JqZWN0LgotCi0gICAgICAgICAgICAgIEludGVybmFsbHksIGEg
TWFwIGhhcyB0d28gZGF0YSBzdHJ1Y3R1cmVzOgotCi0gICAgICAgICAgICAgIDEuIGBrZXlzYDog
YW4gT3JkZXJlZFNldCBvZiBhbGwgb2YgdGhlIGV4aXN0aW5nIGtleXMKLSAgICAgICAgICAgICAg
Mi4gYHZhbHVlc2A6IGEgSmF2YVNjcmlwdCBPYmplY3QgaW5kZXhlZCBieSB0aGUgYEVtYmVyLmd1
aWRGb3Ioa2V5KWAKLQotICAgICAgICAgICAgICBXaGVuIGEga2V5L3ZhbHVlIHBhaXIgaXMgYWRk
ZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZQotICAgICAgICAgICAgICBhZGQgdGhlIGtleSB0byB0
aGUgYGtleXNgIE9yZGVyZWRTZXQsIGFuZCBjcmVhdGUgb3IKLSAgICAgICAgICAgICAgcmVwbGFj
ZSBhbiBlbnRyeSBpbiBgdmFsdWVzYC4gV2hlbiBhbiBlbnRyeSBpcyBkZWxldGVkLAotICAgICAg
ICAgICAgICB3ZSBkZWxldGUgaXRzIGVudHJ5IGluIGBrZXlzYCBhbmQgYHZhbHVlc2AuCi0KLSAg
ICAgICAgICAgICAgQGNsYXNzIE1hcAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBjb25zdHJ1Y3RvcgotICAgICAg
ICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gTWFwKCkgewotICAgICAgICAgICAgdGhpcy5rZXlz
ID0gT3JkZXJlZFNldC5jcmVhdGUoKTsKLSAgICAgICAgICAgIHRoaXMudmFsdWVzID0ge307Ci0g
ICAgICAgIH0KLQotICAgICAgICBFbWJlci5NYXAgPSBNYXA7Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIEBtZXRob2QgY3JlYXRlCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAg
ICAgICovCi0gICAgICAgIE1hcC5jcmVhdGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgTWFwKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgTWFwLnByb3RvdHlwZSA9IHsK
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IHdpbGwg
Y2hhbmdlIGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWFwIGNoYW5nZXMuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGxlbmd0aAotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgMAotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGxlbmd0aDogMCwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHJpZXZlIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZl
biBrZXkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXQKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Kn0gdGhl
IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciBgdW5kZWZpbmVkYAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHZhbHVlcyA9IHRoaXMudmFsdWVzLAotICAgICAgICAgICAgICAgIGd1aWQgPSBn
dWlkRm9yKGtleSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2d1aWRdOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFkZHMg
YSB2YWx1ZSB0byB0aGUgbWFwLiBJZiBhIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5IGhhcyBhbHJl
YWR5IGJlZW4KLSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQsIHRoZSBuZXcgdmFsdWUgd2ls
bCByZXBsYWNlIHRoZSBvbGQgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBz
ZXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHsqfSB2YWx1ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZhciBrZXlzID0gdGhp
cy5rZXlzLAotICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudmFsdWVzLAotICAgICAgICAg
ICAgICAgIGd1aWQgPSBndWlkRm9yKGtleSk7Ci0KLSAgICAgICAgICAgICAgICBrZXlzLmFkZChr
ZXkpOwotICAgICAgICAgICAgICAgIHZhbHVlc1tndWlkXSA9IHZhbHVlOwotICAgICAgICAgICAg
ICAgIHNldCh0aGlzLCAnbGVuZ3RoJywga2V5cy5saXN0Lmxlbmd0aCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyBhIHZhbHVl
IGZyb20gdGhlIG1hcCBmb3IgYW4gYXNzb2NpYXRlZCBrZXkuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCByZW1vdmUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsqfSBrZXkKLSAg
ICAgICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBhbiBpdGVtIHdhcyBy
ZW1vdmVkLCBmYWxzZSBvdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIC8vIGRvbid0IHVzZSBF
UzYgImRlbGV0ZSIgYmVjYXVzZSBpdCB3aWxsIGJlIGFubm95aW5nCi0gICAgICAgICAgICAgICAg
Ly8gdG8gdXNlIGluIGJyb3dzZXJzIHRoYXQgYXJlIG5vdCBFUzYgZnJpZW5kbHk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsCi0gICAgICAgICAgICAgICAgdmFsdWVzID0g
dGhpcy52YWx1ZXMsCi0gICAgICAgICAgICAgICAgZ3VpZCA9IGd1aWRGb3Ioa2V5KTsKLQotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZXMuaGFzT3duUHJvcGVydHkoZ3VpZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAga2V5cy5yZW1vdmUoa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHZhbHVlc1tndWlkXTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICdsZW5ndGgnLCBr
ZXlzLmxpc3QubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBDaGVjayB3aGV0aGVyIGEga2V5IGlzIHByZXNlbnQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBoYXMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsq
fSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUg
aXRlbSB3YXMgcHJlc2VudCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFs
dWVzID0gdGhpcy52YWx1ZXMsCi0gICAgICAgICAgICAgICAgZ3VpZCA9IGd1aWRGb3Ioa2V5KTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuaGFzT3duUHJvcGVydHkoZ3VpZCk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSXRl
cmF0ZSBvdmVyIGFsbCB0aGUga2V5cyBhbmQgdmFsdWVzLiBDYWxscyB0aGUgZnVuY3Rpb24gb25j
ZQotICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBrZXksIHBhc3NpbmcgaW4gdGhlIGtleSBh
bmQgdmFsdWUsIGluIHRoYXQgb3JkZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGtleXMg
YXJlIGd1YXJhbnRlZWQgdG8gYmUgaXRlcmF0ZWQgb3ZlciBpbiBpbnNlcnRpb24gb3JkZXIuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmb3JFYWNoCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
Kn0gc2VsZiBpZiBwYXNzZWQsIHRoZSBgdGhpc2AgdmFsdWUgaW5zaWRlIHRoZQotICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLiBCeSBkZWZhdWx0LCBgdGhpc2AgaXMgdGhlIG1hcC4KLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihjYWxsYmFj
aywgc2VsZikgewotICAgICAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5rZXlzLAotICAgICAg
ICAgICAgICAgIHZhbHVlcyA9IHRoaXMudmFsdWVzOwotCi0gICAgICAgICAgICAgICAga2V5cy5m
b3JFYWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1
aWRGb3Ioa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChzZWxmLCBrZXks
IHZhbHVlc1tndWlkXSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb3B5Ci0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk1hcH0KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBjb3B5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29w
eU1hcCh0aGlzLCBuZXcgTWFwKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBAY2xhc3MgTWFwV2l0aERlZmF1bHQKLSAgICAgICAgICAg
ICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5NYXAKLSAg
ICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICAg
ICAgICAgIEBwYXJhbSBbb3B0aW9uc10KLSAgICAgICAgICAgICAgICBAcGFyYW0geyp9IFtvcHRp
b25zLmRlZmF1bHRWYWx1ZV0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIE1hcFdp
dGhEZWZhdWx0KG9wdGlvbnMpIHsKLSAgICAgICAgICAgIE1hcC5jYWxsKHRoaXMpOwotICAgICAg
ICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZQotICAgICAgICAg
ICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEBwYXJhbSBbb3B0aW9uc10KLSAgICAgICAgICAg
ICAgICBAcGFyYW0geyp9IFtvcHRpb25zLmRlZmF1bHRWYWx1ZV0KLSAgICAgICAgICAgICAgQHJl
dHVybiB7RW1iZXIuTWFwV2l0aERlZmF1bHR8RW1iZXIuTWFwfSBJZiBvcHRpb25zIGFyZSBwYXNz
ZWQsIHJldHVybnMKLSAgICAgICAgICAgICAgICBgRW1iZXIuTWFwV2l0aERlZmF1bHRgIG90aGVy
d2lzZSByZXR1cm5zIGBFbWJlci5NYXBgCi0gICAgICAgICAgICAqLwotICAgICAgICBNYXBXaXRo
RGVmYXVsdC5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAob3B0
aW9ucykgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWFwV2l0aERlZmF1bHQob3B0aW9u
cyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTWFw
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgTWFwV2l0aERlZmF1bHQu
cHJvdG90eXBlID0gY3JlYXRlKE1hcC5wcm90b3R5cGUpOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBSZXRyaWV2ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4ga2V5Lgot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgZ2V0Ci0gICAgICAgICAgICAgIEBwYXJhbSB7Kn0ga2V5
Ci0gICAgICAgICAgICAgIEByZXR1cm4geyp9IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhl
IGtleSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgICAgICovCi0gICAgICAgIE1hcFdp
dGhEZWZhdWx0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgIHZh
ciBoYXNWYWx1ZSA9IHRoaXMuaGFzKGtleSk7Ci0KLSAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBNYXAucHJvdG90eXBlLmdldC5jYWxsKHRoaXMsIGtl
eSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0VmFs
dWUgPSB0aGlzLmRlZmF1bHRWYWx1ZShrZXkpOwotICAgICAgICAgICAgICAgIHRoaXMuc2V0KGtl
eSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBA
bWV0aG9kIGNvcHkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuTWFwV2l0aERlZmF1bHR9
Ci0gICAgICAgICAgICAqLwotICAgICAgICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUuY29weSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGNvcHlNYXAodGhpcywgbmV3IE1hcFdp
dGhEZWZhdWx0KHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZGVmYXVsdFZh
bHVlCi0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX18u
T3JkZXJlZFNldCA9IE9yZGVyZWRTZXQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLk1hcCA9IE1hcDsK
LSAgICAgICAgX19leHBvcnRzX18uTWFwV2l0aERlZmF1bHQgPSBNYXBXaXRoRGVmYXVsdDsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL21lcmdlIiwKLSAgICBbImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBNZXJnZSB0aGUgY29udGVudHMgb2YgdHdvIG9iamVjdHMg
dG9nZXRoZXIgaW50byB0aGUgZmlyc3Qgb2JqZWN0LgotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIubWVyZ2Uoe2ZpcnN0OiAnVG9tJ30sIHtsYXN0OiAn
RGFsZSd9KTsgLy8ge2ZpcnN0OiAnVG9tJywgbGFzdDogJ0RhbGUnfQotICAgICAgICAgICAgICB2
YXIgYSA9IHtmaXJzdDogJ1llaHVkYSd9LCBiID0ge2xhc3Q6ICdLYXR6J307Ci0gICAgICAgICAg
ICAgIEVtYmVyLm1lcmdlKGEsIGIpOyAvLyBhID09IHtmaXJzdDogJ1llaHVkYScsIGxhc3Q6ICdL
YXR6J30sIGIgPT0ge2xhc3Q6ICdLYXR6J30KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCBtZXJnZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5hbCBUaGUgb2JqZWN0IHRvIG1lcmdlIGludG8KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHVwZGF0ZXMgVGhlIG9iamVjdCB0byBjb3B5IHBy
b3BlcnRpZXMgZnJvbQotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICAgICAg
ICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gbWVyZ2Uob3Jp
Z2luYWwsIHVwZGF0ZXMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdXBkYXRlcykg
ewotICAgICAgICAgICAgICAgIGlmICghdXBkYXRlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgb3JpZ2luYWxbcHJvcF0gPSB1cGRhdGVzW3Byb3BdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1tZXRhbC9taXhpbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVy
LW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL2FycmF5IiwgImVtYmVyLW1ldGFsL3BsYXRmb3Jt
IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVzIiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXIt
bWV0YWwvYmluZGluZyIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9ldmVu
dHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9f
LCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2Rl
cGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAg
ICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICAvLyB3YXJuLCBhc3NlcnQsIHdyYXAsIGV0OwotICAgICAgICB2YXIgbWVyZ2Ug
PSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIG1hcCA9IF9fZGVwZW5k
ZW5jeTNfXy5tYXA7Ci0gICAgICAgIHZhciBpbmRleE9mID0gX19kZXBlbmRlbmN5M19fLmluZGV4
T2Y7Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5M19fLmZvckVhY2g7Ci0gICAg
ICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3k0X18uY3JlYXRlOwotICAgICAgICB2YXIgZ3Vp
ZEZvciA9IF9fZGVwZW5kZW5jeTVfXy5ndWlkRm9yOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVw
ZW5kZW5jeTVfXy5tZXRhOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2RlcGVuZGVuY3k1X18u
TUVUQV9LRVk7Ci0gICAgICAgIHZhciB3cmFwID0gX19kZXBlbmRlbmN5NV9fLndyYXA7Ci0gICAg
ICAgIHZhciBtYWtlQXJyYXkgPSBfX2RlcGVuZGVuY3k1X18ubWFrZUFycmF5OwotICAgICAgICB2
YXIgYXBwbHkgPSBfX2RlcGVuZGVuY3k1X18uYXBwbHk7Ci0gICAgICAgIHZhciBleHBhbmRQcm9w
ZXJ0aWVzID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBEZXNjcmlw
dG9yID0gX19kZXBlbmRlbmN5N19fLkRlc2NyaXB0b3I7Ci0gICAgICAgIHZhciBkZWZpbmVQcm9w
ZXJ0eSA9IF9fZGVwZW5kZW5jeTdfXy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIENvbXB1
dGVkUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k4X18uQ29tcHV0ZWRQcm9wZXJ0eTsKLSAgICAgICAg
dmFyIEJpbmRpbmcgPSBfX2RlcGVuZGVuY3k5X18uQmluZGluZzsKLSAgICAgICAgdmFyIGFkZE9i
c2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92
ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFy
IGFkZEJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRCZWZvcmVPYnNlcnZlcjsK
LSAgICAgICAgdmFyIHJlbW92ZUJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5yZW1v
dmVCZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gX19kZXBlbmRlbmN5
MTFfXy5hZGRMaXN0ZW5lcjsKLSAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gX19kZXBlbmRl
bmN5MTFfXy5yZW1vdmVMaXN0ZW5lcjsKLQotICAgICAgICB2YXIgUkVRVUlSRUQsCi0gICAgICAg
IGFfbWFwID0gbWFwLAotICAgICAgICBhX2luZGV4T2YgPSBpbmRleE9mLAotICAgICAgICBhX2Zv
ckVhY2ggPSBmb3JFYWNoLAotICAgICAgICBhX3NsaWNlID0gW10uc2xpY2UsCi0gICAgICAgIG9f
Y3JlYXRlID0gY3JlYXRlLAotICAgICAgICBtZXRhRm9yID0gbWV0YTsKLQotICAgICAgICBmdW5j
dGlvbiBzdXBlckZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHJldCwgZnVuYyA9IHRoaXMu
X19uZXh0U3VwZXI7Ci0gICAgICAgICAgICBpZiAoZnVuYykgewotICAgICAgICAgICAgICAgIHRo
aXMuX19uZXh0U3VwZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIHJldCA9IGFwcGx5KHRoaXMs
IGZ1bmMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fX25leHRTdXBlciA9IGZ1
bmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gbWl4aW5zTWV0YShvYmopIHsKLSAgICAgICAgICAgIHZhciBtID0g
bWV0YUZvcihvYmosIHRydWUpLCByZXQgPSBtLm1peGluczsKLSAgICAgICAgICAgIGlmICghcmV0
KSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gbS5taXhpbnMgPSB7fTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIW0uaGFzT3duUHJvcGVydHkoJ21peGlucycpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gbS5taXhpbnMgPSBvX2NyZWF0ZShyZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGluaXRNaXhpbiht
aXhpbiwgYXJncykgewotICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7
Ci0gICAgICAgICAgICAgICAgbWl4aW4ubWl4aW5zID0gYV9tYXAuY2FsbChhcmdzLCBmdW5jdGlv
bih4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgTWl4aW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogTWFudWFsbHkgc2V0dXAgYSBwcmltaXRpdmUg
bWl4aW4gaGVyZS4gVGhpcyBpcyB0aGUgb25seQotICAgICAgICAgICAgICAgICAgICAvLyB3YXkg
dG8gYWN0dWFsbHkgZ2V0IGEgcHJpbWl0aXZlIG1peGluLiBUaGlzIHdheSBub3JtYWwgY3JlYXRp
b24KLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgbWl4aW5zIHdpbGwgZ2l2ZSB5b3UgY29tYmlu
ZWQgbWl4aW5zLi4uCi0gICAgICAgICAgICAgICAgICAgIHZhciBtaXhpbiA9IG5ldyBNaXhpbigp
OwotICAgICAgICAgICAgICAgICAgICBtaXhpbi5wcm9wZXJ0aWVzID0geDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1peGluOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIG1peGluOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gaXNNZXRob2Qob2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJyA9PT0gdHlw
ZW9mIG9iaiAmJgotICAgICAgICAgICAgb2JqLmlzTWV0aG9kICE9PSBmYWxzZSAmJgotICAgICAg
ICAgICAgb2JqICE9PSBCb29sZWFuICYmIG9iaiAhPT0gT2JqZWN0ICYmIG9iaiAhPT0gTnVtYmVy
ICYmIG9iaiAhPT0gQXJyYXkgJiYgb2JqICE9PSBEYXRlICYmIG9iaiAhPT0gU3RyaW5nOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIENPTlRJTlVFID0ge307Ci0KLSAgICAgICAgZnVuY3Rpb24g
bWl4aW5Qcm9wZXJ0aWVzKG1peGluc01ldGEsIG1peGluKSB7Ci0gICAgICAgICAgICB2YXIgZ3Vp
ZDsKLQotICAgICAgICAgICAgaWYgKG1peGluIGluc3RhbmNlb2YgTWl4aW4pIHsKLSAgICAgICAg
ICAgICAgICBndWlkID0gZ3VpZEZvcihtaXhpbik7Ci0gICAgICAgICAgICAgICAgaWYgKG1peGlu
c01ldGFbZ3VpZF0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTlRJTlVFOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtaXhpbnNNZXRhW2d1aWRdID0gbWl4aW47
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1peGluLnByb3BlcnRpZXM7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBtaXhpbjsgLy8gYXBwbHkgYW5vbnltb3Vz
IG1peGluIHByb3BlcnRpZXMKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGNvbmNhdGVuYXRlZE1peGluUHJvcGVydGllcyhjb25jYXRQcm9wLCBwcm9wcywgdmFs
dWVzLCBiYXNlKSB7Ci0gICAgICAgICAgICB2YXIgY29uY2F0czsKLQotICAgICAgICAgICAgLy8g
cmVzZXQgYmVmb3JlIGFkZGluZyBlYWNoIG5ldyBtaXhpbiB0byBwaWNrdXAgY29uY2F0cyBmcm9t
IHByZXZpb3VzCi0gICAgICAgICAgICBjb25jYXRzID0gdmFsdWVzW2NvbmNhdFByb3BdIHx8IGJh
c2VbY29uY2F0UHJvcF07Ci0gICAgICAgICAgICBpZiAocHJvcHNbY29uY2F0UHJvcF0pIHsKLSAg
ICAgICAgICAgICAgICBjb25jYXRzID0gY29uY2F0cyA/IGNvbmNhdHMuY29uY2F0KHByb3BzW2Nv
bmNhdFByb3BdKSA6IHByb3BzW2NvbmNhdFByb3BdOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gY29uY2F0czsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdpdmVE
ZXNjcmlwdG9yU3VwZXIobWV0YSwga2V5LCBwcm9wZXJ0eSwgdmFsdWVzLCBkZXNjcykgewotICAg
ICAgICAgICAgdmFyIHN1cGVyUHJvcGVydHk7Ci0KLSAgICAgICAgICAgIC8vIENvbXB1dGVkIHBy
b3BlcnRpZXMgb3ZlcnJpZGUgbWV0aG9kcywgYW5kIGRvIG5vdCBjYWxsIHN1cGVyIHRvIHRoZW0K
LSAgICAgICAgICAgIGlmICh2YWx1ZXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRmluZCB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBpbiBhIHBhcmVudCBtaXhpbgot
ICAgICAgICAgICAgICAgIHN1cGVyUHJvcGVydHkgPSBkZXNjc1trZXldOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgb3JpZ2luYWwgZGVzY3Jp
cHRvciBpbiBhIHBhcmVudCBtaXhpbiwgZmluZAotICAgICAgICAgICAgLy8gaXQgb24gdGhlIG9y
aWdpbmFsIG9iamVjdC4KLSAgICAgICAgICAgIHN1cGVyUHJvcGVydHkgPSBzdXBlclByb3BlcnR5
IHx8IG1ldGEuZGVzY3Nba2V5XTsKLQotICAgICAgICAgICAgaWYgKCFzdXBlclByb3BlcnR5IHx8
ICEoc3VwZXJQcm9wZXJ0eSBpbnN0YW5jZW9mIENvbXB1dGVkUHJvcGVydHkpKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHByb3BlcnR5OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBTaW5jZSBtdWx0aXBsZSBtaXhpbnMgbWF5IGluaGVyaXQgZnJvbSB0aGUgc2FtZSBwYXJlbnQs
IHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIGNsb25lIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBz
byB0aGF0IG90aGVyIG1peGlucyBkbyBub3QgcmVjZWl2ZQotICAgICAgICAgICAgLy8gdGhlIHdy
YXBwZWQgdmVyc2lvbi4KLSAgICAgICAgICAgIHByb3BlcnR5ID0gb19jcmVhdGUocHJvcGVydHkp
OwotICAgICAgICAgICAgcHJvcGVydHkuZnVuYyA9IHdyYXAocHJvcGVydHkuZnVuYywgc3VwZXJQ
cm9wZXJ0eS5mdW5jKTsKLQotICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5OwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2l2ZU1ldGhvZFN1cGVyKG9iaiwga2V5LCBtZXRob2QsIHZh
bHVlcywgZGVzY3MpIHsKLSAgICAgICAgICAgIHZhciBzdXBlck1ldGhvZDsKLQotICAgICAgICAg
ICAgLy8gTWV0aG9kcyBvdmVyd3JpdGUgY29tcHV0ZWQgcHJvcGVydGllcywgYW5kIGRvIG5vdCBj
YWxsIHN1cGVyIHRvIHRoZW0uCi0gICAgICAgICAgICBpZiAoZGVzY3Nba2V5XSA9PT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgb3JpZ2luYWwgbWV0aG9kIGluIGEg
cGFyZW50IG1peGluCi0gICAgICAgICAgICAgICAgc3VwZXJNZXRob2QgPSB2YWx1ZXNba2V5XTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgdGhlIG9y
aWdpbmFsIHZhbHVlIGluIGEgcGFyZW50IG1peGluLCBmaW5kIGl0IGluCi0gICAgICAgICAgICAv
LyB0aGUgb3JpZ2luYWwgb2JqZWN0Ci0gICAgICAgICAgICBzdXBlck1ldGhvZCA9IHN1cGVyTWV0
aG9kIHx8IG9ialtrZXldOwotCi0gICAgICAgICAgICAvLyBPbmx5IHdyYXAgdGhlIG5ldyBtZXRo
b2QgaWYgdGhlIG9yaWdpbmFsIG1ldGhvZCB3YXMgYSBmdW5jdGlvbgotICAgICAgICAgICAgaWYg
KCdmdW5jdGlvbicgIT09IHR5cGVvZiBzdXBlck1ldGhvZCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBtZXRob2Q7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB3cmFwKG1l
dGhvZCwgc3VwZXJNZXRob2QpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYXBwbHlD
b25jYXRlbmF0ZWRQcm9wZXJ0aWVzKG9iaiwga2V5LCB2YWx1ZSwgdmFsdWVzKSB7Ci0gICAgICAg
ICAgICB2YXIgYmFzZVZhbHVlID0gdmFsdWVzW2tleV0gfHwgb2JqW2tleV07Ci0KLSAgICAgICAg
ICAgIGlmIChiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0g
dHlwZW9mIGJhc2VWYWx1ZS5jb25jYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJh
c2VWYWx1ZS5jb25jYXQodmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoYmFzZVZhbHVlKS5jb25jYXQodmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VBcnJheSh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBhcHBseU1lcmdlZFByb3BlcnRpZXMob2JqLCBrZXksIHZhbHVlLCB2YWx1
ZXMpIHsKLSAgICAgICAgICAgIHZhciBiYXNlVmFsdWUgPSB2YWx1ZXNba2V5XSB8fCBvYmpba2V5
XTsKLQotICAgICAgICAgICAgaWYgKCFiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBuZXdCYXNlID0gbWVy
Z2Uoe30sIGJhc2VWYWx1ZSksCi0gICAgICAgICAgICBoYXNGdW5jdGlvbiA9IGZhbHNlOwotCi0g
ICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcHJvcFZhbHVl
ID0gdmFsdWVbcHJvcF07Ci0gICAgICAgICAgICAgICAgaWYgKGlzTWV0aG9kKHByb3BWYWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogc3VwcG9ydCBmb3IgQ29tcHV0ZWQgUHJv
cGVydGllcywgZXRjPwotICAgICAgICAgICAgICAgICAgICBoYXNGdW5jdGlvbiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0Jhc2VbcHJvcF0gPSBnaXZlTWV0aG9kU3VwZXIob2JqLCBw
cm9wLCBwcm9wVmFsdWUsIGJhc2VWYWx1ZSwge30pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Jhc2VbcHJvcF0gPSBwcm9wVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaGFzRnVuY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICBuZXdCYXNlLl9zdXBlciA9IHN1cGVyRnVuY3Rpb247Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXdCYXNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gYWRkTm9ybWFsaXplZFByb3BlcnR5KGJhc2UsIGtleSwgdmFsdWUsIG1l
dGEsIGRlc2NzLCB2YWx1ZXMsIGNvbmNhdHMsIG1lcmdpbmdzKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVl
ID09PSBSRVFVSVJFRCAmJiBkZXNjc1trZXldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBDT05USU5VRTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXcmFw
IGRlc2NyaXB0b3IgZnVuY3Rpb24gdG8gaW1wbGVtZW50Ci0gICAgICAgICAgICAgICAgLy8gX19u
ZXh0U3VwZXIoKSBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuZnVuYykgewot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdpdmVEZXNjcmlwdG9yU3VwZXIobWV0YSwga2V5
LCB2YWx1ZSwgdmFsdWVzLCBkZXNjcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgZGVzY3Nba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIHZhbHVlc1trZXldID0g
dW5kZWZpbmVkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNv
bmNhdHMgJiYgYV9pbmRleE9mLmNhbGwoY29uY2F0cywga2V5KSA+PSAwKSB8fAotICAgICAgICAg
ICAgICAgIGtleSA9PT0gJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnIHx8Ci0gICAgICAgICAgICAg
ICAga2V5ID09PSAnbWVyZ2VkUHJvcGVydGllcycpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBhcHBseUNvbmNhdGVuYXRlZFByb3BlcnRpZXMoYmFzZSwga2V5LCB2YWx1ZSwgdmFsdWVz
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChtZXJnaW5ncyAmJiBhX2luZGV4T2YuY2Fs
bChtZXJnaW5ncywga2V5KSA+PSAwKSkgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFw
cGx5TWVyZ2VkUHJvcGVydGllcyhiYXNlLCBrZXksIHZhbHVlLCB2YWx1ZXMpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNNZXRob2QodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gZ2l2ZU1ldGhvZFN1cGVyKGJhc2UsIGtleSwgdmFsdWUsIHZhbHVlcywgZGVzY3Mp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlc2NzW2tleV0gPSB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1lcmdlTWl4aW5zKG1peGlucywgbSwg
ZGVzY3MsIHZhbHVlcywgYmFzZSwga2V5cykgewotICAgICAgICAgICAgdmFyIG1peGluLCBwcm9w
cywga2V5LCBjb25jYXRzLCBtZXJnaW5ncywgbWV0YTsKLQotICAgICAgICAgICAgZnVuY3Rpb24g
cmVtb3ZlS2V5cyhrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGRlc2NzW2tleU5h
bWVdOwotICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5TmFtZV07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbWl4aW5zLmxlbmd0aDsgaSA8
IGw7IGkrKykgewotICAgICAgICAgICAgICAgIG1peGluID0gbWl4aW5zW2ldOwotICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydCgnRXhwZWN0ZWQgaGFzaCBvciBNaXhpbiBpbnN0YW5jZSwgZ290
ICcgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWl4aW4pLAotICAgICAgICAgICAg
ICAgIHR5cGVvZiBtaXhpbiA9PT0gJ29iamVjdCcgJiYgbWl4aW4gIT09IG51bGwgJiYgT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1peGluKSAhPT0gJ1tvYmplY3QgQXJyYXldJyk7Ci0K
LSAgICAgICAgICAgICAgICBwcm9wcyA9IG1peGluUHJvcGVydGllcyhtLCBtaXhpbik7Ci0gICAg
ICAgICAgICAgICAgaWYgKHByb3BzID09PSBDT05USU5VRSkgewotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJv
cHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0YSA9IG1ldGFGb3IoYmFzZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChiYXNlLndpbGxNZXJnZU1peGluKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlLndpbGxNZXJnZU1peGluKHByb3BzKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBjb25jYXRzID0gY29uY2F0ZW5hdGVkTWl4aW5Qcm9wZXJ0
aWVzKCdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJywgcHJvcHMsIHZhbHVlcywgYmFzZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1lcmdpbmdzID0gY29uY2F0ZW5hdGVkTWl4aW5Qcm9wZXJ0aWVzKCdt
ZXJnZWRQcm9wZXJ0aWVzJywgcHJvcHMsIHZhbHVlcywgYmFzZSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChrZXkgaW4gcHJvcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
cHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAga2V5cy5wdXNoKGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGROb3JtYWxp
emVkUHJvcGVydHkoYmFzZSwga2V5LCBwcm9wc1trZXldLCBtZXRhLCBkZXNjcywgdmFsdWVzLCBj
b25jYXRzLCBtZXJnaW5ncyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBtYW51YWxseSBjb3B5IHRvU3RyaW5nKCkgYmVjYXVzZSBzb21lIEpTIGVuZ2lu
ZXMgZG8gbm90IGVudW1lcmF0ZSBpdAotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaGFz
T3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Uu
dG9TdHJpbmcgPSBwcm9wcy50b1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4ubWl4aW5zKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1lcmdlTWl4aW5zKG1peGluLm1peGlucywgbSwgZGVzY3MsIHZhbHVlcywgYmFzZSwga2V5cyk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtaXhpbi5fd2l0aG91dCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYV9mb3JFYWNoLmNhbGwobWl4aW4uX3dpdGhvdXQsIHJlbW92ZUtleXMpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIElTX0JJTkRJTkcgPSAvXi4rQmluZGluZyQvOwotCi0g
ICAgICAgIGZ1bmN0aW9uIGRldGVjdEJpbmRpbmcob2JqLCBrZXksIHZhbHVlLCBtKSB7Ci0gICAg
ICAgICAgICBpZiAoSVNfQklORElORy50ZXN0KGtleSkpIHsKLSAgICAgICAgICAgICAgICB2YXIg
YmluZGluZ3MgPSBtLmJpbmRpbmdzOwotICAgICAgICAgICAgICAgIGlmICghYmluZGluZ3MpIHsK
LSAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MgPSBtLmJpbmRpbmdzID0ge307Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICghbS5oYXNPd25Qcm9wZXJ0eSgnYmluZGluZ3MnKSkgewotICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5ncyA9IG0uYmluZGluZ3MgPSBvX2NyZWF0ZShtLmJpbmRp
bmdzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmluZGluZ3Nba2V5XSA9
IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29u
bmVjdEJpbmRpbmdzKG9iaiwgbSkgewotICAgICAgICAgICAgLy8gVE9ETyBNaXhpbi5hcHBseShp
bnN0YW5jZSkgc2hvdWxkIGRpc2Nvbm5lY3QgYmluZGluZyBpZiBleGlzdHMKLSAgICAgICAgICAg
IHZhciBiaW5kaW5ncyA9IG0uYmluZGluZ3MsIGtleSwgYmluZGluZywgdG87Ci0gICAgICAgICAg
ICBpZiAoYmluZGluZ3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBiaW5kaW5ncykg
ewotICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gYmluZGluZ3Nba2V5XTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvID0g
a2V5LnNsaWNlKDAsIC03KTsgLy8gc3RyaXAgQmluZGluZyBvZmYgZW5kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmluZGluZyBpbnN0YW5jZW9mIEJpbmRpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5nID0gYmluZGluZy5jb3B5KCk7IC8vIGNvcHkgcHJvdG90
eXBlcycgaW5zdGFuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLnRvKHRv
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmluZGluZyBpcyBzdHJpbmcgcGF0aAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmcgPSBuZXcgQmluZGluZyh0bywgYmluZGluZyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmNvbm5lY3Qob2Jq
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gYmluZGluZzsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBtYXJr
IGFzIGFwcGxpZWQKLSAgICAgICAgICAgICAgICBtLmJpbmRpbmdzID0ge307Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmaW5pc2hQYXJ0aWFsKG9iaiwgbSkg
ewotICAgICAgICAgICAgY29ubmVjdEJpbmRpbmdzKG9iaiwgbSB8fCBtZXRhRm9yKG9iaikpOwot
ICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZv
bGxvd0FsaWFzKG9iaiwgZGVzYywgbSwgZGVzY3MsIHZhbHVlcykgewotICAgICAgICAgICAgdmFy
IGFsdEtleSA9IGRlc2MubWV0aG9kTmFtZSwgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoZGVzY3Nb
YWx0S2V5XSB8fCB2YWx1ZXNbYWx0S2V5XSkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFs
dWVzW2FsdEtleV07Ci0gICAgICAgICAgICAgICAgZGVzYyA9IGRlc2NzW2FsdEtleV07Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG0uZGVzY3NbYWx0S2V5XSkgewotICAgICAgICAgICAgICAgIGRl
c2MgPSBtLmRlc2NzW2FsdEtleV07Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpbYWx0S2V5XTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLAotICAgICAg
ICAgICAgICAgIHZhbHVlOiB2YWx1ZSAKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIG9ic2Vy
dmVyT3JMaXN0ZW5lciwgcGF0aHNLZXksIHVwZGF0ZU1ldGhvZCkgewotICAgICAgICAgICAgdmFy
IHBhdGhzID0gb2JzZXJ2ZXJPckxpc3RlbmVyW3BhdGhzS2V5XTsKLQotICAgICAgICAgICAgaWYg
KHBhdGhzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXRocy5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWV0aG9kKG9iaiwg
cGF0aHNbaV0sIG51bGwsIGtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVwbGFjZU9ic2VydmVyc0FuZExpc3RlbmVy
cyhvYmosIGtleSwgb2JzZXJ2ZXJPckxpc3RlbmVyKSB7Ci0gICAgICAgICAgICB2YXIgcHJldiA9
IG9ialtrZXldOwotCi0gICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHByZXYp
IHsKLSAgICAgICAgICAgICAgICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXks
IHByZXYsICdfX2VtYmVyX29ic2VydmVzQmVmb3JlX18nLCByZW1vdmVCZWZvcmVPYnNlcnZlcik7
Ci0gICAgICAgICAgICAgICAgdXBkYXRlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBw
cmV2LCAnX19lbWJlcl9vYnNlcnZlc19fJywgcmVtb3ZlT2JzZXJ2ZXIpOwotICAgICAgICAgICAg
ICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgcHJldiwgJ19fZW1iZXJf
bGlzdGVuc19fJywgcmVtb3ZlTGlzdGVuZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9ic2VydmVyT3JMaXN0ZW5lcikgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgb2JzZXJ2ZXJP
ckxpc3RlbmVyLCAnX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fJywgYWRkQmVmb3JlT2JzZXJ2ZXIp
OwotICAgICAgICAgICAgICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwg
b2JzZXJ2ZXJPckxpc3RlbmVyLCAnX19lbWJlcl9vYnNlcnZlc19fJywgYWRkT2JzZXJ2ZXIpOwot
ICAgICAgICAgICAgICAgIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgb2Jz
ZXJ2ZXJPckxpc3RlbmVyLCAnX19lbWJlcl9saXN0ZW5zX18nLCBhZGRMaXN0ZW5lcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhcHBseU1peGluKG9iaiwg
bWl4aW5zLCBwYXJ0aWFsKSB7Ci0gICAgICAgICAgICB2YXIgZGVzY3MgPSB7fSwgdmFsdWVzID0g
e30sIG0gPSBtZXRhRm9yKG9iaiksCi0gICAgICAgICAgICBrZXksIHZhbHVlLCBkZXNjLCBrZXlz
ID0gW107Ci0KLSAgICAgICAgICAgIG9iai5fc3VwZXIgPSBzdXBlckZ1bmN0aW9uOwotCi0gICAg
ICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCBtaXhpbnMgYW5kIGhhc2hlcyBwYXNzZWQgaW4sIGFu
ZDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAqIEhhbmRsZSBjb25jYXRlbmF0ZWQg
cHJvcGVydGllcwotICAgICAgICAgICAgLy8gKiBIYW5kbGUgbWVyZ2VkIHByb3BlcnRpZXMKLSAg
ICAgICAgICAgIC8vICogU2V0IHVwIF9zdXBlciB3cmFwcGluZyBpZiBuZWNlc3NhcnkKLSAgICAg
ICAgICAgIC8vICogU2V0IHVwIGNvbXB1dGVkIHByb3BlcnR5IGRlc2NyaXB0b3JzCi0gICAgICAg
ICAgICAvLyAqIENvcHlpbmcgYHRvU3RyaW5nYCBpbiBicm9rZW4gYnJvd3NlcnMKLSAgICAgICAg
ICAgIG1lcmdlTWl4aW5zKG1peGlucywgbWl4aW5zTWV0YShvYmopLCBkZXNjcywgdmFsdWVzLCBv
YmosIGtleXMpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InIHx8ICF2YWx1ZXMuaGFzT3duUHJvcGVy
dHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBkZXNjID0gZGVzY3Nba2V5XTsKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlc1trZXldOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlc2MgPT09IFJF
UVVJUkVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHdoaWxlIChkZXNjICYmIGRlc2MgaW5zdGFuY2VvZiBBbGlh
cykgewotICAgICAgICAgICAgICAgICAgICB2YXIgZm9sbG93ZWQgPSBmb2xsb3dBbGlhcyhvYmos
IGRlc2MsIG0sIGRlc2NzLCB2YWx1ZXMpOwotICAgICAgICAgICAgICAgICAgICBkZXNjID0gZm9s
bG93ZWQuZGVzYzsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBmb2xsb3dlZC52YWx1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVzYyA9PT0gdW5kZWZp
bmVkICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVwbGFjZU9ic2VydmVy
c0FuZExpc3RlbmVycyhvYmosIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGRldGVjdEJp
bmRpbmcob2JqLCBrZXksIHZhbHVlLCBtKTsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0
eShvYmosIGtleSwgZGVzYywgdmFsdWUsIG0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIXBhcnRpYWwpIHsKLSAgICAgICAgICAgICAgICAvLyBkb24ndCBhcHBseSB0byBwcm90
b3R5cGUKLSAgICAgICAgICAgICAgICBmaW5pc2hQYXJ0aWFsKG9iaiwgbSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgQG1ldGhvZCBtaXhpbgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHBhcmFtIG1peGlucyoKLSAg
ICAgICAgICAgICAgQHJldHVybiBvYmoKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IG1peGluKG9iaikgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSBhX3NsaWNlLmNhbGwoYXJndW1l
bnRzLCAxKTsKLSAgICAgICAgICAgIGFwcGx5TWl4aW4ob2JqLCBhcmdzLCBmYWxzZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gb2JqOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubWl4
aW4gPSBtaXhpbjsgLyoqCi0gICAgICAgICAgICAgIFRoZSBgRW1iZXIuTWl4aW5gIGNsYXNzIGFs
bG93cyB5b3UgdG8gY3JlYXRlIG1peGlucywgd2hvc2UgcHJvcGVydGllcyBjYW4gYmUKLSAgICAg
ICAgICAgICAgYWRkZWQgdG8gb3RoZXIgY2xhc3Nlcy4gRm9yIGluc3RhbmNlLAotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkVkaXRhYmxlID0gRW1iZXIu
TWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBlZGl0OiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdGFydGluZyB0byBlZGl0Jyk7Ci0gICAgICAgICAg
ICAgICAgICB0aGlzLnNldCgnaXNFZGl0aW5nJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlCi0gICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgIC8vIE1peCBtaXhpbnMgaW50byBjbGFzc2VzIGJ5IHBhc3NpbmcgdGhlbSBh
cyB0aGUgZmlyc3QgYXJndW1lbnRzIHRvCi0gICAgICAgICAgICAgIC8vIC5leHRlbmQuCi0gICAg
ICAgICAgICAgIEFwcC5Db21tZW50VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEFwcC5FZGl0YWJs
ZSwgewotICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUo
J3t7I2lmIHZpZXcuaXNFZGl0aW5nfX0uLi57e2Vsc2V9fS4uLnt7L2lmfX0nKQotICAgICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgICBjb21tZW50VmlldyA9IEFwcC5Db21tZW50Vmlldy5j
cmVhdGUoKTsKLSAgICAgICAgICAgICAgY29tbWVudFZpZXcuZWRpdCgpOyAvLyBvdXRwdXRzICdz
dGFydGluZyB0byBlZGl0JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBOb3Rl
IHRoYXQgTWl4aW5zIGFyZSBjcmVhdGVkIHdpdGggYEVtYmVyLk1peGluLmNyZWF0ZWAsIG5vdAot
ICAgICAgICAgICAgICBgRW1iZXIuTWl4aW4uZXh0ZW5kYC4KLQotICAgICAgICAgICAgICBOb3Rl
IHRoYXQgbWl4aW5zIGV4dGVuZCBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIHNvIGFycmF5cyBh
bmQgb2JqZWN0IGxpdGVyYWxzCi0gICAgICAgICAgICAgIGRlZmluZWQgYXMgcHJvcGVydGllcyB3
aWxsIGJlIHNoYXJlZCBhbW9uZ3N0IG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgdGhlIG1peGluLgot
ICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBkZWZpbmUgYSBwcm9wZXJ0eSBpbiBhIG1peGlu
IHRoYXQgaXMgbm90IHNoYXJlZCwgeW91IGNhbiBkZWZpbmUKLSAgICAgICAgICAgICAgaXQgZWl0
aGVyIGFzIGEgY29tcHV0ZWQgcHJvcGVydHkgb3IgaGF2ZSBpdCBiZSBjcmVhdGVkIG9uIGluaXRp
YWxpemF0aW9uIG9mIHRoZSBvYmplY3QuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAvL2ZpbHRlcnMgYXJyYXkgd2lsbCBiZSBzaGFyZWQgYW1vbmdzdCBhbnkg
b2JqZWN0IGltcGxlbWVudGluZyBtaXhpbgotICAgICAgICAgICAgICBBcHAuRmlsdGVyYWJsZSA9
IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgZmlsdGVyczogRW1iZXIuQSgp
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIC8vZmlsdGVycyB3aWxsIGJlIGEg
c2VwYXJhdGUgIGFycmF5IGZvciBldmVyeSBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBtaXhpbgot
ICAgICAgICAgICAgICBBcHAuRmlsdGVyYWJsZSA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAg
ICAgICAgICAgICAgZmlsdGVyczogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKXtyZXR1cm4gRW1i
ZXIuQSgpO30pCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIC8vZmlsdGVycyB3
aWxsIGJlIGNyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBhcnJheSBkdXJpbmcgdGhlIG9iamVjdCdzIGlu
aXRpYWxpemF0aW9uCi0gICAgICAgICAgICAgIEFwcC5GaWx0ZXJhYmxlID0gRW1iZXIuTWl4aW4u
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnNldCgiZmlsdGVy
cyIsIEVtYmVyLkEoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNzIE1peGluCi0gICAgICAgICAg
ICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBNaXhpbjsKLSAgICAgICAgZnVuY3Rpb24gTWl4aW4oKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gaW5pdE1peGluKHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgTWl4aW4ucHJvdG90eXBlID0gewotICAgICAgICAgICAgcHJvcGVydGllczogbnVsbCwKLSAg
ICAgICAgICAgIG1peGluczogbnVsbCwKLSAgICAgICAgICAgIG93bmVyQ29uc3RydWN0b3I6IG51
bGwKLSAgICAgICAgfTsKLQotICAgICAgICBNaXhpbi5fYXBwbHkgPSBhcHBseU1peGluOwotCi0g
ICAgICAgIE1peGluLmFwcGx5UGFydGlhbCA9IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAg
dmFyIGFyZ3MgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgICAgIHJldHVy
biBhcHBseU1peGluKG9iaiwgYXJncywgdHJ1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgTWl4
aW4uZmluaXNoUGFydGlhbCA9IGZpbmlzaFBhcnRpYWw7Ci0KLSAgICAgICAgLy8gRVM2VE9ETzog
dGhpcyByZWxpZXMgb24gYSBnbG9iYWwgc3RhdGU/Ci0gICAgICAgIEVtYmVyLmFueVVucHJvY2Vz
c2VkTWl4aW5zID0gZmFsc2U7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2Qg
Y3JlYXRlCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQHBhcmFtIGFyZ3Vt
ZW50cyoKLSAgICAgICAgICAgICovCi0gICAgICAgIE1peGluLmNyZWF0ZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgLy8gRVM2VE9ETzogdGhpcyByZWxpZXMgb24gYSBnbG9iYWwgc3RhdGU/
Ci0gICAgICAgICAgICBFbWJlci5hbnlVbnByb2Nlc3NlZE1peGlucyA9IHRydWU7Ci0gICAgICAg
ICAgICB2YXIgTSA9IHRoaXM7Ci0gICAgICAgICAgICByZXR1cm4gaW5pdE1peGluKG5ldyBNKCks
IGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIE1peGluUHJvdG90eXBlID0g
TWl4aW4ucHJvdG90eXBlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIHJl
b3BlbgotICAgICAgICAgICAgICBAcGFyYW0gYXJndW1lbnRzKgotICAgICAgICAgICAgKi8KLSAg
ICAgICAgTWl4aW5Qcm90b3R5cGUucmVvcGVuID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2
YXIgbWl4aW4sIHRtcDsKLQotICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcykgewotICAg
ICAgICAgICAgICAgIG1peGluID0gTWl4aW4uY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgbWl4
aW4ucHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllczsKLSAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5wcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgIHRoaXMubWl4aW5zID0gW21peGluXTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubWl4aW5zKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5taXhpbnMgPSBbXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGxlbiA9
IGFyZ3VtZW50cy5sZW5ndGgsIG1peGlucyA9IHRoaXMubWl4aW5zLCBpZHg7Ci0KLSAgICAgICAg
ICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAgIG1p
eGluID0gYXJndW1lbnRzW2lkeF07Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdFeHBl
Y3RlZCBoYXNoIG9yIE1peGluIGluc3RhbmNlLCBnb3QgJyArIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuY2FsbChtaXhpbiksCi0gICAgICAgICAgICAgICAgdHlwZW9mIG1peGluID09PSAnb2Jq
ZWN0JyAmJiBtaXhpbiAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo
bWl4aW4pICE9PSAnW29iamVjdCBBcnJheV0nKTsKLQotICAgICAgICAgICAgICAgIGlmIChtaXhp
biBpbnN0YW5jZW9mIE1peGluKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1peGlucy5wdXNoKG1p
eGluKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0bXAg
PSBNaXhpbi5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wLnByb3BlcnRpZXMgPSBt
aXhpbjsKLSAgICAgICAgICAgICAgICAgICAgbWl4aW5zLnB1c2godG1wKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGFwcGx5Ci0gICAgICAg
ICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHJldHVybiBhcHBsaWVkIG9iamVjdAot
ICAgICAgICAgICAgKi8KLSAgICAgICAgTWl4aW5Qcm90b3R5cGUuYXBwbHkgPSBmdW5jdGlvbihv
YmopIHsKLSAgICAgICAgICAgIHJldHVybiBhcHBseU1peGluKG9iaiwgW3RoaXNdLCBmYWxzZSk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgTWl4aW5Qcm90b3R5cGUuYXBwbHlQYXJ0aWFsID0gZnVu
Y3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXBwbHlNaXhpbihvYmosIFt0aGlzXSwg
dHJ1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gX2RldGVjdChjdXJNaXhpbiwg
dGFyZ2V0TWl4aW4sIHNlZW4pIHsKLSAgICAgICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihjdXJN
aXhpbik7Ci0KLSAgICAgICAgICAgIGlmIChzZWVuW2d1aWRdKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VlbltndWlkXSA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGlmIChjdXJNaXhpbiA9PT0gdGFyZ2V0TWl4aW4pIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBt
aXhpbnMgPSBjdXJNaXhpbi5taXhpbnMsIGxvYyA9IG1peGlucyA/IG1peGlucy5sZW5ndGggOiAw
OwotICAgICAgICAgICAgd2hpbGUgKC0tbG9jID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo
X2RldGVjdChtaXhpbnNbbG9jXSwgdGFyZ2V0TWl4aW4sIHNlZW4pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBAbWV0aG9kIGRldGVjdAotICAgICAgICAgICAgICBAcGFyYW0gb2JqCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAqLwotICAgICAgICBNaXhpblBy
b3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgIGlmICghb2JqKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1peGluKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9k
ZXRlY3Qob2JqLCB0aGlzLCB7fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbSA9
IG9ialtNRVRBX0tFWV0sCi0gICAgICAgICAgICBtaXhpbnMgPSBtICYmIG0ubWl4aW5zOwotICAg
ICAgICAgICAgaWYgKG1peGlucykgewotICAgICAgICAgICAgICAgIHJldHVybiAhIW1peGluc1tn
dWlkRm9yKHRoaXMpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfTsKLQotICAgICAgICBNaXhpblByb3RvdHlwZS53aXRob3V0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICB2YXIgcmV0ID0gbmV3IE1peGluKHRoaXMpOwotICAgICAgICAgICAg
cmV0Ll93aXRob3V0ID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICByZXR1
cm4gcmV0OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIF9rZXlzKHJldCwgbWl4aW4s
IHNlZW4pIHsKLSAgICAgICAgICAgIGlmIChzZWVuW2d1aWRGb3IobWl4aW4pXSkgewotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlZW5bZ3VpZEZv
cihtaXhpbildID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKG1peGluLnByb3BlcnRpZXMpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBtaXhpbi5wcm9wZXJ0aWVzOwotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
W2tleV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbi5taXhpbnMpIHsKLSAgICAgICAgICAgICAgICBh
X2ZvckVhY2guY2FsbChtaXhpbi5taXhpbnMsIGZ1bmN0aW9uKHgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgX2tleXMocmV0LCB4LCBzZWVuKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIE1peGluUHJvdG90eXBlLmtleXMgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHZhciBrZXlzID0ge30sIHNlZW4gPSB7fSwgcmV0ID0gW107Ci0g
ICAgICAgICAgICBfa2V5cyhrZXlzLCB0aGlzLCBzZWVuKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGtleSBpbiBrZXlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGtleXMuaGFzT3duUHJvcGVydHko
a2V5KSkgewotICAgICAgICAgICAgICAgICAgICByZXQucHVzaChrZXkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgbWl4aW5zIGN1cnJlbnRseSBhcHBsaWVkIHRvIHRo
ZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIC8vIFRPRE86IE1ha2UgRW1iZXIubWl4aW4KLSAg
ICAgICAgTWl4aW4ubWl4aW5zID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICB2YXIgbSA9
IG9ialtNRVRBX0tFWV0sCi0gICAgICAgICAgICBtaXhpbnMgPSBtICYmIG0ubWl4aW5zLCByZXQg
PSBbXTsKLQotICAgICAgICAgICAgaWYgKCFtaXhpbnMpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWl4
aW5zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1peGluID0gbWl4aW5zW2tleV07Ci0KLSAgICAg
ICAgICAgICAgICAvLyBza2lwIHByaW1pdGl2ZSBtaXhpbnMgc2luY2UgdGhlc2UgYXJlIGFsd2F5
cyBhbm9ueW1vdXMKLSAgICAgICAgICAgICAgICBpZiAoIW1peGluLnByb3BlcnRpZXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0LnB1c2gobWl4aW4pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLQotICAg
ICAgICBSRVFVSVJFRCA9IG5ldyBEZXNjcmlwdG9yKCk7Ci0gICAgICAgIFJFUVVJUkVELnRvU3Ry
aW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gJyhSZXF1aXJlZCBQcm9wZXJ0
eSknOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBEZW5vdGVzIGEg
cmVxdWlyZWQgcHJvcGVydHkgZm9yIGEgbWl4aW4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJl
cXVpcmVkCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIHJlcXVpcmVkKCkgewotICAgICAgICAgICAgcmV0dXJuIFJFUVVJUkVEOwotICAg
ICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ucmVxdWlyZWQgPSByZXF1aXJlZDsKLSAgICAg
ICAgZnVuY3Rpb24gQWxpYXMobWV0aG9kTmFtZSkgewotICAgICAgICAgICAgdGhpcy5tZXRob2RO
YW1lID0gbWV0aG9kTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIEFsaWFzLnByb3RvdHlwZSA9
IG5ldyBEZXNjcmlwdG9yKCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIE1ha2VzIGEg
bWV0aG9kIGF2YWlsYWJsZSB2aWEgYW4gYWRkaXRpb25hbCBuYW1lLgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoewotICAgICAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgcmV0dXJuICdUb21odWRhIEthdHpkYWxlJzsKLSAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgIG1vbmlrZXI6IEVtYmVyLmFsaWFzTWV0aG9kKCduYW1lJykKLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGdvb2RHdXkgPSBBcHAuUGVyc29uLmNyZWF0
ZSgpOwotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgZ29vZEd1eS5uYW1lKCk7ICAgIC8v
ICdUb21odWRhIEthdHpkYWxlJwotICAgICAgICAgICAgICBnb29kR3V5Lm1vbmlrZXIoKTsgLy8g
J1RvbWh1ZGEgS2F0emRhbGUnCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgYWxpYXNNZXRob2QKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gbWV0aG9kTmFtZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gYWxpYXMK
LSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuRGVzY3JpcHRvcn0KLSAgICAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIGFsaWFzTWV0aG9kKG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgQWxpYXMobWV0aG9kTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4
cG9ydHNfXy5hbGlhc01ldGhvZCA9IGFsaWFzTWV0aG9kOyAvLyAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIE9CU0VS
VkVSIEhFTFBFUgotICAgICAgICAvLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBTcGVj
aWZ5IGEgbWV0aG9kIHRoYXQgb2JzZXJ2ZXMgcHJvcGVydHkgY2hhbmdlcy4KLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5leHRlbmQoewot
ICAgICAgICAgICAgICAgIHZhbHVlT2JzZXJ2ZXI6IEVtYmVyLm9ic2VydmVyKCd2YWx1ZScsIGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJ2
YWx1ZSIgcHJvcGVydHkgY2hhbmdlcwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbiB0aGUgZnV0dXJlIHRo
aXMgbWV0aG9kIG1heSBiZWNvbWUgYXN5bmNocm9ub3VzLiBJZiB5b3Ugd2FudCB0byBlbnN1cmUK
LSAgICAgICAgICAgICAgc3luY2hyb25vdXMgYmVoYXZpb3IsIHVzZSBgaW1tZWRpYXRlT2JzZXJ2
ZXJgLgotCi0gICAgICAgICAgICAgIEFsc28gYXZhaWxhYmxlIGFzIGBGdW5jdGlvbi5wcm90b3R5
cGUub2JzZXJ2ZXNgIGlmIHByb3RvdHlwZSBleHRlbnNpb25zIGFyZQotICAgICAgICAgICAgICBl
bmFibGVkLgotCi0gICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXIKLSAgICAgICAgICAgICAg
QGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlOYW1lcyoK
LSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYwotICAgICAgICAgICAgICBAcmV0
dXJuIGZ1bmMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVyKCkgewot
ICAgICAgICAgICAgdmFyIGZ1bmMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAtMSlbMF07Ci0g
ICAgICAgICAgICB2YXIgcGF0aHM7Ci0KLSAgICAgICAgICAgIHZhciBhZGRXYXRjaGVkUHJvcGVy
dHkgPSBmdW5jdGlvbiAocGF0aCkgewotICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocGF0aCk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdmFyIF9wYXRocyA9IGFfc2xpY2UuY2FsbChh
cmd1bWVudHMsIDAsIC0xKTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVu
Y3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmV2ZXJ0IHRvIG9sZCwgc29mdC1kZXByZWNh
dGVkIGFyZ3VtZW50IG9yZGVyaW5nCi0KLSAgICAgICAgICAgICAgICBmdW5jID0gYXJndW1lbnRz
WzBdOwotICAgICAgICAgICAgICAgIF9wYXRocyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIDEp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXRocyA9IFtdOwotCi0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IF9wYXRocy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIGV4cGFuZFByb3BlcnRpZXMoX3BhdGhzW2ldLCBhZGRXYXRjaGVkUHJvcGVydHkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIp
IHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXIuRXJyb3IoIkVtYmVyLm9ic2VydmVy
IGNhbGxlZCB3aXRob3V0IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZnVuYy5fX2VtYmVyX29ic2VydmVzX18gPSBwYXRoczsKLSAgICAgICAgICAgIHJldHVybiBm
dW5jOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ub2JzZXJ2ZXIgPSBvYnNlcnZl
cjsgLyoqCi0gICAgICAgICAgICAgIFNwZWNpZnkgYSBtZXRob2QgdGhhdCBvYnNlcnZlcyBwcm9w
ZXJ0eSBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdmFsdWVPYnNlcnZlcjog
RW1iZXIuaW1tZWRpYXRlT2JzZXJ2ZXIoJ3ZhbHVlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAvLyBFeGVjdXRlcyB3aGVuZXZlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBjaGFuZ2Vz
Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEluIHRoZSBmdXR1cmUsIGBFbWJlci5vYnNlcnZlcmAgbWF5IGJl
Y29tZSBhc3luY2hyb25vdXMuIEluIHRoaXMgZXZlbnQsCi0gICAgICAgICAgICAgIGBFbWJlci5p
bW1lZGlhdGVPYnNlcnZlcmAgd2lsbCBtYWludGFpbiB0aGUgc3luY2hyb25vdXMgYmVoYXZpb3Iu
Ci0KLSAgICAgICAgICAgICAgQWxzbyBhdmFpbGFibGUgYXMgYEZ1bmN0aW9uLnByb3RvdHlwZS5v
YnNlcnZlc0ltbWVkaWF0ZWx5YCBpZiBwcm90b3R5cGUgZXh0ZW5zaW9ucyBhcmUKLSAgICAgICAg
ICAgICAgZW5hYmxlZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGltbWVkaWF0ZU9ic2VydmVy
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IHByb3BlcnR5TmFtZXMqCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMKLSAg
ICAgICAgICAgICAgQHJldHVybiBmdW5jCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBpbW1lZGlhdGVPYnNlcnZlcigpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
YXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBhcmcg
PSBhcmd1bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJJbW1lZGlhdGUg
b2JzZXJ2ZXJzIG11c3Qgb2JzZXJ2ZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIG9ubHksIG5vdCBwcm9w
ZXJ0aWVzIG9uIG90aGVyIG9iamVjdHMuIiwgdHlwZW9mIGFyZyAhPT0gInN0cmluZyIgfHwgYXJn
LmluZGV4T2YoJy4nKSA9PT0gLTEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1
cm4gb2JzZXJ2ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fLmltbWVkaWF0ZU9ic2VydmVyID0gaW1tZWRpYXRlT2JzZXJ2ZXI7IC8qKgot
ICAgICAgICAgICAgICBXaGVuIG9ic2VydmVycyBmaXJlLCB0aGV5IGFyZSBjYWxsZWQgd2l0aCB0
aGUgYXJndW1lbnRzIGBvYmpgLCBga2V5TmFtZWAuCi0KLSAgICAgICAgICAgICAgTm90ZSwgYEBl
YWNoLnByb3BlcnR5YCBvYnNlcnZlciBpcyBjYWxsZWQgcGVyIGVhY2ggYWRkIG9yIHJlcGxhY2Ug
b2YgYW4gZWxlbWVudAotICAgICAgICAgICAgICBhbmQgaXQncyBub3QgY2FsbGVkIHdpdGggYSBz
cGVjaWZpYyBlbnVtZXJhdGlvbiBpdGVtLgotCi0gICAgICAgICAgICAgIEEgYGJlZm9yZU9ic2Vy
dmVyYCBmaXJlcyBiZWZvcmUgYSBwcm9wZXJ0eSBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgIEEg
YGJlZm9yZU9ic2VydmVyYCBpcyBhbiBhbHRlcm5hdGl2ZSBmb3JtIG9mIGAub2JzZXJ2ZXNCZWZv
cmUoKWAuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAu
UGVyc29uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBmcmllbmRz
OiBbeyBuYW1lOiAnVG9tJyB9LCB7IG5hbWU6ICdTdGVmYW4nIH0sIHsgbmFtZTogJ0tyaXMnIH1d
LAotCi0gICAgICAgICAgICAgICAgdmFsdWVXaWxsQ2hhbmdlOiBFbWJlci5iZWZvcmVPYnNlcnZl
cignY29udGVudC52YWx1ZScsIGZ1bmN0aW9uKG9iaiwga2V5TmFtZSkgewotICAgICAgICAgICAg
ICAgICAgdGhpcy5jaGFuZ2luZ0Zyb20gPSBvYmouZ2V0KGtleU5hbWUpOwotICAgICAgICAgICAg
ICAgIH0pLAotCi0gICAgICAgICAgICAgICAgdmFsdWVEaWRDaGFuZ2U6IEVtYmVyLm9ic2VydmVy
KCdjb250ZW50LnZhbHVlJywgZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIG9ubHkgcnVuIGlmIHVwZGF0aW5nIGEgdmFsdWUgYWxyZWFkeSBpbiB0aGUgRE9N
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldCgnc3RhdGUnKSA9PT0gJ2luRE9NJykg
ewotICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IG9iai5nZXQoa2V5TmFtZSkgPiB0
aGlzLmNoYW5naW5nRnJvbSA/ICdncmVlbicgOiAncmVkJzsKLSAgICAgICAgICAgICAgICAgICAg
ICAvLyBsb2dpYwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSksCi0K
LSAgICAgICAgICAgICAgICBmcmllbmRzRGlkQ2hhbmdlOiBFbWJlci5vYnNlcnZlcignZnJpZW5k
cy5AZWFjaC5uYW1lJywgZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAvLyBzb21lIGxvZ2ljCi0gICAgICAgICAgICAgICAgICAvLyBvYmouZ2V0KGtleU5hbWUpIHJl
dHVybnMgZnJpZW5kcyBhcnJheQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbHNvIGF2YWlsYWJsZSBhcyBg
RnVuY3Rpb24ucHJvdG90eXBlLm9ic2VydmVzQmVmb3JlYCBpZiBwcm90b3R5cGUgZXh0ZW5zaW9u
cyBhcmUKLSAgICAgICAgICAgICAgZW5hYmxlZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGJl
Zm9yZU9ic2VydmVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IHByb3BlcnR5TmFtZXMqCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rp
b259IGZ1bmMKLSAgICAgICAgICAgICAgQHJldHVybiBmdW5jCi0gICAgICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBiZWZvcmVPYnNlcnZlcigpIHsKLSAgICAgICAgICAgIHZhciBmdW5jID0g
YV9zbGljZS5jYWxsKGFyZ3VtZW50cywgLTEpWzBdOwotICAgICAgICAgICAgdmFyIHBhdGhzOwot
Ci0gICAgICAgICAgICB2YXIgYWRkV2F0Y2hlZFByb3BlcnR5ID0gZnVuY3Rpb24ocGF0aCkgewot
ICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocGF0aCk7Ci0gICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICB2YXIgX3BhdGhzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpOwotCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAg
ICAgICAvLyByZXZlcnQgdG8gb2xkLCBzb2Z0LWRlcHJlY2F0ZWQgYXJndW1lbnQgb3JkZXJpbmcK
LQotICAgICAgICAgICAgICAgIGZ1bmMgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgICAgICAgICAg
X3BhdGhzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHBhdGhzID0gW107Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
X3BhdGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZXhwYW5kUHJvcGVydGllcyhf
cGF0aHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFbWJlci5FcnJvcigiRW1iZXIuYmVmb3JlT2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQg
YSBmdW5jdGlvbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jLl9fZW1iZXJf
b2JzZXJ2ZXNCZWZvcmVfXyA9IHBhdGhzOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmM7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5iZWZvcmVPYnNlcnZlciA9IGJlZm9yZU9ic2Vy
dmVyOwotICAgICAgICBfX2V4cG9ydHNfXy5JU19CSU5ESU5HID0gSVNfQklORElORzsKLSAgICAg
ICAgX19leHBvcnRzX18uTWl4aW4gPSBNaXhpbjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVy
LW1ldGFsL29ic2VydmVyIiwKLSAgICBbImVtYmVyLW1ldGFsL3dhdGNoaW5nIiwgImVtYmVyLW1l
dGFsL2FycmF5IiwgImVtYmVyLW1ldGFsL2V2ZW50cyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgd2F0Y2ggPSBf
X2RlcGVuZGVuY3kxX18ud2F0Y2g7Ci0gICAgICAgIHZhciB1bndhdGNoID0gX19kZXBlbmRlbmN5
MV9fLnVud2F0Y2g7Ci0gICAgICAgIHZhciBtYXAgPSBfX2RlcGVuZGVuY3kyX18ubWFwOwotICAg
ICAgICB2YXIgbGlzdGVuZXJzRm9yID0gX19kZXBlbmRlbmN5M19fLmxpc3RlbmVyc0ZvcjsKLSAg
ICAgICAgdmFyIGFkZExpc3RlbmVyID0gX19kZXBlbmRlbmN5M19fLmFkZExpc3RlbmVyOwotICAg
ICAgICB2YXIgcmVtb3ZlTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kzX18ucmVtb3ZlTGlzdGVuZXI7
Ci0gICAgICAgIHZhciBzdXNwZW5kTGlzdGVuZXJzID0gX19kZXBlbmRlbmN5M19fLnN1c3BlbmRM
aXN0ZW5lcnM7Ci0gICAgICAgIHZhciBzdXNwZW5kTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kzX18u
c3VzcGVuZExpc3RlbmVyOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIt
bWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEFGVEVSX09CU0VSVkVSUyA9ICc6
Y2hhbmdlJzsKLSAgICAgICAgdmFyIEJFRk9SRV9PQlNFUlZFUlMgPSAnOmJlZm9yZSc7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gY2hhbmdlRXZlbnQoa2V5TmFtZSkgewotICAgICAgICAgICAgcmV0dXJu
IGtleU5hbWUgKyBBRlRFUl9PQlNFUlZFUlM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBiZWZvcmVFdmVudChrZXlOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4ga2V5TmFtZSArIEJF
Rk9SRV9PQlNFUlZFUlM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
QG1ldGhvZCBhZGRPYnNlcnZlcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IHRhcmdldE9yTWV0aG9kCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBbbWV0aG9kXQotICAgICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JqLCBfcGF0aCwgdGFyZ2V0LCBtZXRob2Qp
IHsKLSAgICAgICAgICAgIGFkZExpc3RlbmVyKG9iaiwgY2hhbmdlRXZlbnQoX3BhdGgpLCB0YXJn
ZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICB3YXRjaChvYmosIF9wYXRoKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5hZGRPYnNl
cnZlciA9IGFkZE9ic2VydmVyOwotICAgICAgICBmdW5jdGlvbiBvYnNlcnZlcnNGb3Iob2JqLCBw
YXRoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzRm9yKG9iaiwgY2hhbmdlRXZlbnQo
cGF0aCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ub2JzZXJ2ZXJzRm9yID0g
b2JzZXJ2ZXJzRm9yOyAvKioKLSAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmVPYnNlcnZlcgot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R8RnVuY3Rpb259IHRhcmdldE9yTWV0aG9kCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rp
b258U3RyaW5nfSBbbWV0aG9kXQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVt
b3ZlT2JzZXJ2ZXIob2JqLCBfcGF0aCwgdGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgIHVu
d2F0Y2gob2JqLCBfcGF0aCk7Ci0gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihvYmosIGNoYW5n
ZUV2ZW50KF9wYXRoKSwgdGFyZ2V0LCBtZXRob2QpOwotCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJlbW92ZU9ic2VydmVyID0gcmVt
b3ZlT2JzZXJ2ZXI7IC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGFkZEJlZm9yZU9ic2VydmVy
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdHxGdW5jdGlvbn0gdGFyZ2V0T3JNZXRob2QKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbnxTdHJpbmd9IFttZXRob2RdCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBh
ZGRCZWZvcmVPYnNlcnZlcihvYmosIF9wYXRoLCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAg
ICAgYWRkTGlzdGVuZXIob2JqLCBiZWZvcmVFdmVudChfcGF0aCksIHRhcmdldCwgbWV0aG9kKTsK
LSAgICAgICAgICAgIHdhdGNoKG9iaiwgX3BhdGgpOwotCi0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFkZEJlZm9yZU9ic2VydmVyID0g
YWRkQmVmb3JlT2JzZXJ2ZXI7IC8vIFN1c3BlbmQgb2JzZXJ2ZXIgZHVyaW5nIGNhbGxiYWNrLgot
ICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIHRh
cmdldCBvZiB0aGUgb2JzZXJ2ZXIKLSAgICAgICAgLy8gd2hpbGUgaXQgaXMgc2V0dGluZyB0aGUg
b2JzZXJ2ZWQgcGF0aC4KLSAgICAgICAgZnVuY3Rpb24gX3N1c3BlbmRCZWZvcmVPYnNlcnZlcihv
YmosIHBhdGgsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgICAgICAgICAgcmV0dXJu
IHN1c3BlbmRMaXN0ZW5lcihvYmosIGJlZm9yZUV2ZW50KHBhdGgpLCB0YXJnZXQsIG1ldGhvZCwg
Y2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uX3N1c3BlbmRCZWZv
cmVPYnNlcnZlciA9IF9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIGZ1bmN0aW9uIF9z
dXNwZW5kT2JzZXJ2ZXIob2JqLCBwYXRoLCB0YXJnZXQsIG1ldGhvZCwgY2FsbGJhY2spIHsKLSAg
ICAgICAgICAgIHJldHVybiBzdXNwZW5kTGlzdGVuZXIob2JqLCBjaGFuZ2VFdmVudChwYXRoKSwg
dGFyZ2V0LCBtZXRob2QsIGNhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLl9zdXNwZW5kT2JzZXJ2ZXIgPSBfc3VzcGVuZE9ic2VydmVyOwotICAgICAgICBmdW5jdGlv
biBfc3VzcGVuZEJlZm9yZU9ic2VydmVycyhvYmosIHBhdGhzLCB0YXJnZXQsIG1ldGhvZCwgY2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIHZhciBldmVudHMgPSBtYXAuY2FsbChwYXRocywgYmVmb3Jl
RXZlbnQpOwotICAgICAgICAgICAgcmV0dXJuIHN1c3BlbmRMaXN0ZW5lcnMob2JqLCBldmVudHMs
IHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjayk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5fc3VzcGVuZEJlZm9yZU9ic2VydmVycyA9IF9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXJzOwot
ICAgICAgICBmdW5jdGlvbiBfc3VzcGVuZE9ic2VydmVycyhvYmosIHBhdGhzLCB0YXJnZXQsIG1l
dGhvZCwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZhciBldmVudHMgPSBtYXAuY2FsbChwYXRo
cywgY2hhbmdlRXZlbnQpOwotICAgICAgICAgICAgcmV0dXJuIHN1c3BlbmRMaXN0ZW5lcnMob2Jq
LCBldmVudHMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjayk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBfX2V4cG9ydHNfXy5fc3VzcGVuZE9ic2VydmVycyA9IF9zdXNwZW5kT2JzZXJ2ZXJzOwotICAg
ICAgICBmdW5jdGlvbiBiZWZvcmVPYnNlcnZlcnNGb3Iob2JqLCBwYXRoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbGlzdGVuZXJzRm9yKG9iaiwgYmVmb3JlRXZlbnQocGF0aCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgX19leHBvcnRzX18uYmVmb3JlT2JzZXJ2ZXJzRm9yID0gYmVmb3JlT2JzZXJ2
ZXJzRm9yOyAvKioKLSAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmVCZWZvcmVPYnNlcnZlcgot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R8RnVuY3Rpb259IHRhcmdldE9yTWV0aG9kCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rp
b258U3RyaW5nfSBbbWV0aG9kXQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVt
b3ZlQmVmb3JlT2JzZXJ2ZXIob2JqLCBfcGF0aCwgdGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAg
ICAgIHVud2F0Y2gob2JqLCBfcGF0aCk7Ci0gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihvYmos
IGJlZm9yZUV2ZW50KF9wYXRoKSwgdGFyZ2V0LCBtZXRob2QpOwotCi0gICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJlbW92ZUJlZm9yZU9i
c2VydmVyID0gcmVtb3ZlQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJl
ci1tZXRhbC9vYnNlcnZlcl9zZXQiLAotICAgIFsiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXIt
bWV0YWwvZXZlbnRzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTFfXy5ndWlkRm9yOwotICAgICAgICB2
YXIgc2VuZEV2ZW50ID0gX19kZXBlbmRlbmN5Ml9fLnNlbmRFdmVudDsKLQotICAgICAgICAvKgot
ICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyU2V0ID0gewotICAgICAgICAgICAgICAgIFtzZW5k
ZXJHdWlkXTogeyAvLyB2YXJpYWJsZSBuYW1lOiBga2V5U2V0YAotICAgICAgICAgICAgICAgICAg
W2tleU5hbWVdOiBsaXN0SW5kZXgKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gWwotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIHNlbmRlcjogb2JqLAotICAgICAgICAgICAgICAgICAga2V5TmFtZTog
a2V5TmFtZSwKLSAgICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAotICAgICAg
ICAgICAgICAgICAgbGlzdGVuZXJzOiBbCi0gICAgICAgICAgICAgICAgICAgIFt0YXJnZXQsIG1l
dGhvZCwgZmxhZ3NdCi0gICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICAuLi4KLSAgICAgICAgICAgICAgXQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE9ic2VydmVyU2V0OwotICAgICAgICBmdW5jdGlv
biBPYnNlcnZlclNldCgpIHsKLSAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICAgICAgfQot
Ci0KLSAgICAgICAgT2JzZXJ2ZXJTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHNlbmRlciwg
a2V5TmFtZSwgZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICB2YXIgb2JzZXJ2ZXJTZXQgPSB0aGlz
Lm9ic2VydmVyU2V0LAotICAgICAgICAgICAgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMsCi0g
ICAgICAgICAgICBzZW5kZXJHdWlkID0gZ3VpZEZvcihzZW5kZXIpLAotICAgICAgICAgICAga2V5
U2V0ID0gb2JzZXJ2ZXJTZXRbc2VuZGVyR3VpZF0sCi0gICAgICAgICAgICBpbmRleDsKLQotICAg
ICAgICAgICAgaWYgKCFrZXlTZXQpIHsKLSAgICAgICAgICAgICAgICBvYnNlcnZlclNldFtzZW5k
ZXJHdWlkXSA9IGtleVNldCA9IHt9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgg
PSBrZXlTZXRba2V5TmFtZV07Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgICAgIGluZGV4ID0gb2JzZXJ2ZXJzLnB1c2goewotICAgICAgICAgICAg
ICAgICAgICBzZW5kZXI6IHNlbmRlciwKLSAgICAgICAgICAgICAgICAgICAga2V5TmFtZToga2V5
TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgIGxpc3RlbmVyczogW10KLSAgICAgICAgICAgICAgICB9KSAtIDE7Ci0gICAg
ICAgICAgICAgICAga2V5U2V0W2tleU5hbWVdID0gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzW2luZGV4XS5saXN0ZW5lcnM7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgT2JzZXJ2ZXJTZXQucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMsIGksIGxlbiwgb2JzZXJ2ZXIs
IHNlbmRlcjsKLSAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGZvciAoaSA9
IDAsIGxlbiA9IG9ic2VydmVycy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAg
ICAgIG9ic2VydmVyID0gb2JzZXJ2ZXJzW2ldOwotICAgICAgICAgICAgICAgIHNlbmRlciA9IG9i
c2VydmVyLnNlbmRlcjsKLSAgICAgICAgICAgICAgICBpZiAoc2VuZGVyLmlzRGVzdHJveWluZyB8
fCBzZW5kZXIuaXNEZXN0cm95ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNlbmRFdmVudChzZW5kZXIsIG9ic2Vy
dmVyLmV2ZW50TmFtZSwgW3NlbmRlciwgb2JzZXJ2ZXIua2V5TmFtZV0sIG9ic2VydmVyLmxpc3Rl
bmVycyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgT2JzZXJ2ZXJTZXQu
cHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLm9ic2VydmVy
U2V0ID0ge307Ci0gICAgICAgICAgICB0aGlzLm9ic2VydmVycyA9IFtdOwotICAgICAgICB9Owot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvcGxhdGZvcm0iLAotICAgIFsiZW1iZXIt
bWV0YWwvY29yZSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qZ2xvYmFscyBO
b2RlICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAg
ICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBQbGF0Zm9ybSBzcGVjaWZpYyBt
ZXRob2RzIGFuZCBmZWF0dXJlIGRldGVjdG9ycyBuZWVkZWQgYnkgdGhlIGZyYW1ld29yay4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgcGxhdGZvcm0KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBF
bWJlcgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAqLwotICAgICAgICAvLyBU
T0RPIHJlbW92ZSB0aGlzCi0gICAgICAgIHZhciBwbGF0Zm9ybSA9IHt9OwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBJZGVudGljYWwgdG8gYE9iamVjdC5jcmVhdGUoKWAuIEltcGxlbWVu
dHMgaWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGNy
ZWF0ZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAqLwotICAgICAgICB2
YXIgY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKLQotICAgICAgICAvLyBJRTggaGFzIE9iamVjdC5j
cmVhdGUgYnV0IGl0IGNvdWxkbid0IHRyZWF0IHByb3BlcnR5IGRlc2NyaXB0b3JzLgotICAgICAg
ICBpZiAoY3JlYXRlKSB7Ci0gICAgICAgICAgICBpZiAoY3JlYXRlKHsKLSAgICAgICAgICAgICAg
ICBhOiAxCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgYTogewotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogMgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLmEg
IT09IDIpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGUgPSBudWxsOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gU1RVQl9PQkpFQ1RfQ1JFQVRFIGFsbG93cyB1cyB0byBv
dmVycmlkZSBvdGhlciBsaWJyYXJpZXMgdGhhdCBzdHViCi0gICAgICAgIC8vIE9iamVjdC5jcmVh
dGUgZGlmZmVyZW50IHRoYW4gd2Ugd291bGQgcHJlZmVyCi0gICAgICAgIGlmICghY3JlYXRlIHx8
IEVtYmVyLkVOVi5TVFVCX09CSkVDVF9DUkVBVEUpIHsKLSAgICAgICAgICAgIHZhciBLID0gZnVu
Y3Rpb24oKSB7fTsKLQotICAgICAgICAgICAgY3JlYXRlID0gZnVuY3Rpb24ob2JqLCBwcm9wcykg
ewotICAgICAgICAgICAgICAgIEsucHJvdG90eXBlID0gb2JqOwotICAgICAgICAgICAgICAgIG9i
aiA9IG5ldyBLKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEsucHJvdG90eXBlID0gb2JqOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBw
cm9wIGluIHByb3BzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBLLnByb3RvdHlwZVtwcm9w
XSA9IHByb3BzW3Byb3BdLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIG9iaiA9IG5ldyBLKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIEsucHJvdG90eXBlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBjcmVhdGUuaXNTaW11bGF0ZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVBy
b3BlcnR5OwotICAgICAgICB2YXIgY2FuUmVkZWZpbmVQcm9wZXJ0aWVzLCBjYW5EZWZpbmVQcm9w
ZXJ0eU9uRE9NOwotCi0gICAgICAgIC8vIENhdGNoIElFOCB3aGVyZSBPYmplY3QuZGVmaW5lUHJv
cGVydHkgZXhpc3RzIGJ1dCBvbmx5IHdvcmtzIG9uIERPTSBlbGVtZW50cwotICAgICAgICBpZiAo
ZGVmaW5lUHJvcGVydHkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZGVm
aW5lUHJvcGVydHkoe30sICdhJywgewotICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
KCkge30KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHkpIHsKLSAgICAgICAgICAgIC8vIERl
dGVjdHMgYSBidWcgaW4gQW5kcm9pZCA8My4yIHdoZXJlIHlvdSBjYW5ub3QgcmVkZWZpbmUgYSBw
cm9wZXJ0eSB1c2luZwotICAgICAgICAgICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5IG9uY2Ug
YWNjZXNzb3JzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KLSAgICAgICAgICAgIGNhblJlZGVmaW5l
UHJvcGVydGllcyA9IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2JqID0ge307
Ci0KLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmosICdhJywgewotICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7fSwKLSAg
ICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigpIHt9Ci0gICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmosICdhJywgewotICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iai5hID09PSB0cnVlOwotICAgICAgICAgICAgfSkoKTsKLQotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBmb3IgU2FmYXJpIDUuMCwgd2hpY2ggc3VwcG9ydHMgT2JqZWN0
LmRlZmluZVByb3BlcnR5LCBidXQgbm90Ci0gICAgICAgICAgICAvLyBvbiBET00gbm9kZXMuCi0g
ICAgICAgICAgICBjYW5EZWZpbmVQcm9wZXJ0eU9uRE9NID0gKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnZGVmaW5lUHJvcGVydHlPbkRPTScsIHt9KTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAo
ZSkge30KLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0pKCk7
Ci0KLSAgICAgICAgICAgIGlmICghY2FuUmVkZWZpbmVQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAg
ICAgICAgZGVmaW5lUHJvcGVydHkgPSBudWxsOwotICAgICAgICAgICAgfSBlbHNlIGlmICghY2Fu
RGVmaW5lUHJvcGVydHlPbkRPTSkgewotICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5ID0g
ZnVuY3Rpb24ob2JqLCBrZXlOYW1lLCBkZXNjKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBp
c05vZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBOb2RlID09PSAib2JqZWN0
IikgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2RlID0gb2JqIGluc3RhbmNlb2YgTm9k
ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlzTm9kZSA9IHR5cGVvZiBvYmogPT09ICJvYmplY3QiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUg
PT09ICJudW1iZXIiICYmIHR5cGVvZiBvYmoubm9kZU5hbWUgPT09ICJzdHJpbmciOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGhhdmUgYSB3YXJuaW5nIGhl
cmU/Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9ialtrZXlOYW1lXSA9IGRlc2Mu
dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIGRlc2MpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQGNsYXNzIHBsYXRmb3JtCi0g
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBJZGVudGljYWwgdG8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYC4g
SW1wbGVtZW50cyBhcyBtdWNoIGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgICAgYXMgcG9zc2li
bGUgaWYgbm90IGF2YWlsYWJsZSBuYXRpdmVseS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGRl
ZmluZVByb3BlcnR5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVj
dCB0byBtb2RpZnkKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgcHJvcGVy
dHkgbmFtZSB0byBtb2RpZnkKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGRlc2MgZGVz
Y3JpcHRvciBoYXNoCi0gICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAgICAgICAq
LwotICAgICAgICBwbGF0Zm9ybS5kZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5OwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBTZXQgdG8gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gc3Vw
cG9ydHMgbmF0aXZlIGdldHRlcnMgYW5kIHNldHRlcnMuCi0KLSAgICAgICAgICAgICAgQHByb3Bl
cnR5IGhhc1Byb3BlcnR5QWNjZXNzb3JzCi0gICAgICAgICAgICAgIEBmaW5hbAotICAgICAgICAg
ICAgKi8KLSAgICAgICAgcGxhdGZvcm0uaGFzUHJvcGVydHlBY2Nlc3NvcnMgPSB0cnVlOwotCi0g
ICAgICAgIGlmICghcGxhdGZvcm0uZGVmaW5lUHJvcGVydHkpIHsKLSAgICAgICAgICAgIHBsYXRm
b3JtLmhhc1Byb3BlcnR5QWNjZXNzb3JzID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHBsYXRmb3Jt
LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1lLCBkZXNjKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFkZXNjLmdldCkgewotICAgICAgICAgICAgICAgICAgICBvYmpba2V5TmFt
ZV0gPSBkZXNjLnZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIHBsYXRmb3JtLmRlZmluZVByb3BlcnR5LmlzU2ltdWxhdGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChFbWJlci5FTlYuTUFOREFUT1JZX1NFVFRFUiAmJiAhcGxh
dGZvcm0uaGFzUHJvcGVydHlBY2Nlc3NvcnMpIHsKLSAgICAgICAgICAgIEVtYmVyLkVOVi5NQU5E
QVRPUllfU0VUVEVSID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5j
cmVhdGUgPSBjcmVhdGU7Ci0gICAgICAgIF9fZXhwb3J0c19fLnBsYXRmb3JtID0gcGxhdGZvcm07
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9wcm9wZXJ0aWVzIiwKLSAgICBbImVt
YmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvcGxhdGZv
cm0iLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9f
ZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2Rl
cGVuZGVuY3kyX18uTUVUQV9LRVk7Ci0gICAgICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5Ml9f
Lm1ldGE7Ci0gICAgICAgIHZhciBwbGF0Zm9ybSA9IF9fZGVwZW5kZW5jeTNfXy5wbGF0Zm9ybTsK
LSAgICAgICAgdmFyIG92ZXJyaWRlQ2hhaW5zID0gX19kZXBlbmRlbmN5NF9fLm92ZXJyaWRlQ2hh
aW5zOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5NV9fLmdldDsKLSAgICAgICAgdmFy
IHNldCA9IF9fZGVwZW5kZW5jeTZfXy5zZXQ7Ci0KLSAgICAgICAgdmFyIG1ldGFGb3IgPSBtZXRh
LAotICAgICAgICBvYmplY3REZWZpbmVQcm9wZXJ0eSA9IHBsYXRmb3JtLmRlZmluZVByb3BlcnR5
OwotCi0gICAgICAgIHZhciBNQU5EQVRPUllfU0VUVEVSID0gRW1iZXIuRU5WLk1BTkRBVE9SWV9T
RVRURVI7Ci0KLSAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAvLyBERVNDUklQVE9SCi0gICAgICAgIC8v
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIE9iamVjdHMgb2YgdGhpcyB0eXBlIGNhbiBp
bXBsZW1lbnQgYW4gaW50ZXJmYWNlIHRvIHJlc3BvbmQgdG8gcmVxdWVzdHMgdG8KLSAgICAgICAg
ICAgICAgZ2V0IGFuZCBzZXQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGhhbmRsZXMgc2lt
cGxlIHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAgWW91IGdlbmVyYWxseSB3b24ndCBuZWVk
IHRvIGNyZWF0ZSBvciBzdWJjbGFzcyB0aGlzIGRpcmVjdGx5LgotCi0gICAgICAgICAgICAgIEBj
bGFzcyBEZXNjcmlwdG9yCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBEZXNjcmlwdG9yKCkge30KLQotICAgICAgICBfX2V4cG9ydHNf
Xy5EZXNjcmlwdG9yID0gRGVzY3JpcHRvcjsgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAvLyBERUZJTklORyBQUk9Q
RVJUSUVTIEFQSQotICAgICAgICAvLwotCi0gICAgICAgIHZhciBNQU5EQVRPUllfU0VUVEVSX0ZV
TkNUSU9OID0gRW1iZXIuTUFOREFUT1JZX1NFVFRFUl9GVU5DVElPTiA9IGZ1bmN0aW9uKHZhbHVl
KSB7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IHVzZSBFbWJlci5zZXQoKSB0
byBhY2Nlc3MgdGhpcyBwcm9wZXJ0eSAob2YgIiArIHRoaXMgKyAiKSIsIGZhbHNlKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICB2YXIgREVGQVVMVF9HRVRURVJfRlVOQ1RJT04gPSBFbWJlci5ERUZB
VUxUX0dFVFRFUl9GVU5DVElPTiA9IGZ1bmN0aW9uIERFRkFVTFRfR0VUVEVSX0ZVTkNUSU9OKG5h
bWUpIHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbWV0YSA9IHRoaXNbTUVUQV9LRVldOwotICAgICAgICAgICAgICAgIHJldHVybiBtZXRhICYm
IG1ldGEudmFsdWVzW25hbWVdOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgTk9URTogVGhpcyBpcyBhIGxvdy1sZXZlbCBtZXRob2QgdXNl
ZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgQVBJLiBZb3UgYWxtb3N0Ci0gICAgICAgICAgICAgIG5l
dmVyIHdhbnQgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4gSW5zdGVhZCB5b3Ugc2hvdWxk
IHVzZQotICAgICAgICAgICAgICBgRW1iZXIubWl4aW4oKWAgdG8gZGVmaW5lIG5ldyBwcm9wZXJ0
aWVzLgotCi0gICAgICAgICAgICAgIERlZmluZXMgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIFRo
aXMgbWV0aG9kIHdvcmtzIG11Y2ggbGlrZSB0aGUgRVM1Ci0gICAgICAgICAgICAgIGBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoKWAgbWV0aG9kIGV4Y2VwdCB0aGF0IGl0IGNhbiBhbHNvIGFjY2VwdCBj
b21wdXRlZAotICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGFuZCBvdGhlciBzcGVjaWFsIGRlc2Ny
aXB0b3JzLgotCi0gICAgICAgICAgICAgIE5vcm1hbGx5IHRoaXMgbWV0aG9kIHRha2VzIG9ubHkg
dGhyZWUgcGFyYW1ldGVycy4gSG93ZXZlciBpZiB5b3UgcGFzcyBhbgotICAgICAgICAgICAgICBp
bnN0YW5jZSBvZiBgRW1iZXIuRGVzY3JpcHRvcmAgYXMgdGhlIHRoaXJkIHBhcmFtIHRoZW4geW91
IGNhbiBwYXNzIGFuCi0gICAgICAgICAgICAgIG9wdGlvbmFsIHZhbHVlIGFzIHRoZSBmb3VydGgg
cGFyYW1ldGVyLiBUaGlzIGlzIG9mdGVuIG1vcmUgZWZmaWNpZW50IHRoYW4KLSAgICAgICAgICAg
ICAgY3JlYXRpbmcgbmV3IGRlc2NyaXB0b3IgaGFzaGVzIGZvciBlYWNoIHByb3BlcnR5LgotCi0g
ICAgICAgICAgICAgICMjIEV4YW1wbGVzCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAvLyBFUzUgY29tcGF0aWJsZSBtb2RlCi0gICAgICAgICAgICAgIEVtYmVy
LmRlZmluZVByb3BlcnR5KGNvbnRhY3QsICdmaXJzdE5hbWUnLCB7Ci0gICAgICAgICAgICAgICAg
d3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKLSAg
ICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgIHZhbHVlOiAn
Q2hhcmxlcycKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgLy8gZGVmaW5lIGEg
c2ltcGxlIHByb3BlcnR5Ci0gICAgICAgICAgICAgIEVtYmVyLmRlZmluZVByb3BlcnR5KGNvbnRh
Y3QsICdsYXN0TmFtZScsIHVuZGVmaW5lZCwgJ0pvbGxleScpOwotCi0gICAgICAgICAgICAgIC8v
IGRlZmluZSBhIGNvbXB1dGVkIHByb3BlcnR5Ci0gICAgICAgICAgICAgIEVtYmVyLmRlZmluZVBy
b3BlcnR5KGNvbnRhY3QsICdmdWxsTmFtZScsIEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0TmFtZSsnICcrdGhpcy5sYXN0TmFtZTsK
LSAgICAgICAgICAgICAgfSkucHJvcGVydHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpKTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
QG1ldGhvZCBkZWZpbmVQcm9wZXJ0eQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogdGhlIG9iamVjdCB0byBkZWZpbmUgdGhpcyBwcm9w
ZXJ0eSBvbi4gVGhpcyBtYXkgYmUgYSBwcm90b3R5cGUuCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBrZXlOYW1lIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICBA
cGFyYW0ge0VtYmVyLkRlc2NyaXB0b3J9IFtkZXNjXSBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuRGVz
Y3JpcHRvcmAgKHR5cGljYWxseSBhCi0gICAgICAgICAgICAgICAgY29tcHV0ZWQgcHJvcGVydHkp
IG9yIGFuIEVTNSBkZXNjcmlwdG9yLgotICAgICAgICAgICAgICAgIFlvdSBtdXN0IHByb3ZpZGUg
dGhpcyBvciBgZGF0YWAgYnV0IG5vdCBib3RoLgotICAgICAgICAgICAgICBAcGFyYW0geyp9IFtk
YXRhXSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGRlc2NyaXB0b3IsIHRoYXQgd2lsbAotICAgICAg
ICAgICAgICAgIGJlY29tZSB0aGUgZXhwbGljaXQgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4KLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iaiwga2V5TmFt
ZSwgZGVzYywgZGF0YSwgbWV0YSkgewotICAgICAgICAgICAgdmFyIGRlc2NzLCBleGlzdGluZ0Rl
c2MsIHdhdGNoaW5nLCB2YWx1ZTsKLQotICAgICAgICAgICAgaWYgKCFtZXRhKSAKLSAgICAgICAg
ICAgICAgICBtZXRhID0gbWV0YUZvcihvYmopOwotICAgICAgICAgICAgZGVzY3MgPSBtZXRhLmRl
c2NzOwotICAgICAgICAgICAgZXhpc3RpbmdEZXNjID0gbWV0YS5kZXNjc1trZXlOYW1lXTsKLSAg
ICAgICAgICAgIHdhdGNoaW5nID0gbWV0YS53YXRjaGluZ1trZXlOYW1lXSA+IDA7Ci0KLSAgICAg
ICAgICAgIGlmIChleGlzdGluZ0Rlc2MgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7Ci0gICAgICAg
ICAgICAgICAgZXhpc3RpbmdEZXNjLnRlYXJkb3duKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChkZXNjIGluc3RhbmNlb2YgRGVzY3JpcHRvcikgewotICAg
ICAgICAgICAgICAgIHZhbHVlID0gZGVzYzsKLQotICAgICAgICAgICAgICAgIGRlc2NzW2tleU5h
bWVdID0gZGVzYzsKLSAgICAgICAgICAgICAgICBpZiAoTUFOREFUT1JZX1NFVFRFUiAmJiB3YXRj
aGluZykgewotICAgICAgICAgICAgICAgICAgICBvYmplY3REZWZpbmVQcm9wZXJ0eShvYmosIGtl
eU5hbWUsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB3cml0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1
bmRlZmluZWQgLy8gbWFrZSBlbnVtZXJhYmxlCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ialtrZXlOYW1lXSA9
IHVuZGVmaW5lZDsgLy8gbWFrZSBlbnVtZXJhYmxlCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChkZXNjLnNldHVwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2Muc2V0
dXAob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGRlc2NzW2tleU5hbWVdID0gdW5kZWZpbmVkOyAvLyBzaGFkb3cg
ZGVzY3JpcHRvciBpbiBwcm90bwotICAgICAgICAgICAgICAgIGlmIChkZXNjID09IG51bGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChNQU5EQVRPUllfU0VUVEVSICYmIHdhdGNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtZXRhLnZhbHVlc1trZXlOYW1lXSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3REZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IE1B
TkRBVE9SWV9TRVRURVJfRlVOQ1RJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
OiBERUZBVUxUX0dFVFRFUl9GVU5DVElPTihrZXlOYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvYmpba2V5TmFtZV0gPSBkYXRhOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkZXNjOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkgd2l0aCBFUzUKLSAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0RGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBkZXNjKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlmIGtleSBpcyBi
ZWluZyB3YXRjaGVkLCBvdmVycmlkZSBjaGFpbnMgdGhhdAotICAgICAgICAgICAgLy8gd2VyZSBp
bml0aWFsaXplZCB3aXRoIHRoZSBwcm90b3R5cGUKLSAgICAgICAgICAgIGlmICh3YXRjaGluZykg
ewotICAgICAgICAgICAgICAgIG92ZXJyaWRlQ2hhaW5zKG9iaiwga2V5TmFtZSwgbWV0YSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRoZSBgdmFsdWVgIHBhc3NlZCB0byB0aGUg
YGRpZERlZmluZVByb3BlcnR5YCBob29rIGlzCi0gICAgICAgICAgICAvLyBlaXRoZXIgdGhlIGRl
c2NyaXB0b3Igb3IgZGF0YSwgd2hpY2hldmVyIHdhcyBwYXNzZWQuCi0gICAgICAgICAgICBpZiAo
b2JqLmRpZERlZmluZVByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgb2JqLmRpZERlZmluZVBy
b3BlcnR5KG9iaiwga2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmRlZmluZVBy
b3BlcnR5ID0gZGVmaW5lUHJvcGVydHk7IC8qKgotICAgICAgICAgICAgICBVc2VkIGludGVybmFs
bHkgdG8gYWxsb3cgY2hhbmdpbmcgcHJvcGVydGllcyBpbiBhIGJhY2t3YXJkcyBjb21wYXRpYmxl
IHdheSwgYW5kIHByaW50IGEgaGVscGZ1bAotICAgICAgICAgICAgICBkZXByZWNhdGlvbiB3YXJu
aW5nLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgZGVwcmVjYXRlUHJvcGVydHkKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZGVwcmVj
YXRlZCBwcm9wZXJ0eSB0by4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcHJlY2F0
ZWRLZXkgVGhlIHByb3BlcnR5IHRvIGFkZCAoYW5kIHByaW50IGRlcHJlY2F0aW9uIHdhcm5pbmdz
IHVwb24gYWNjZXNzaW5nKS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5ld0tleSBU
aGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIGFsaWFzZWQuCi0gICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAqLwotCi0gICAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVByb3BlcnR5KG9i
amVjdCwgZGVwcmVjYXRlZEtleSwgbmV3S2V5KSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBkZXBy
ZWNhdGUoKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdVc2FnZSBvZiBgJyAr
IGRlcHJlY2F0ZWRLZXkgKyAnYCBpcyBkZXByZWNhdGVkLCB1c2UgYCcgKyBuZXdLZXkgKyAnYCBp
bnN0ZWFkLicpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocGxhdGZvcm0uaGFz
UHJvcGVydHlBY2Nlc3NvcnMpIHsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmpl
Y3QsIGRlcHJlY2F0ZWRLZXksIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlLAotICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAg
ICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVwcmVjYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQob2JqZWN0LCBuZXdLZXks
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChvYmplY3QsIG5ld0tleSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmRlcHJlY2F0ZVByb3BlcnR5ID0gZGVwcmVjYXRl
UHJvcGVydHk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVu
dHMiLAotICAgIFsiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvZXZlbnRzIiwgImVt
YmVyLW1ldGFsL29ic2VydmVyX3NldCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2RlcGVu
ZGVuY3kxX18uTUVUQV9LRVk7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRlbmN5MV9f
Lmd1aWRGb3I7Ci0gICAgICAgIHZhciB0cnlGaW5hbGx5ID0gX19kZXBlbmRlbmN5MV9fLnRyeUZp
bmFsbHk7Ci0gICAgICAgIHZhciBzZW5kRXZlbnQgPSBfX2RlcGVuZGVuY3kyX18uc2VuZEV2ZW50
OwotICAgICAgICB2YXIgbGlzdGVuZXJzVW5pb24gPSBfX2RlcGVuZGVuY3kyX18ubGlzdGVuZXJz
VW5pb247Ci0gICAgICAgIHZhciBsaXN0ZW5lcnNEaWZmID0gX19kZXBlbmRlbmN5Ml9fLmxpc3Rl
bmVyc0RpZmY7Ci0gICAgICAgIHZhciBPYnNlcnZlclNldCA9IF9fZGVwZW5kZW5jeTNfX1siZGVm
YXVsdCJdOwotCi0gICAgICAgIHZhciBiZWZvcmVPYnNlcnZlclNldCA9IG5ldyBPYnNlcnZlclNl
dCgpOwotICAgICAgICB2YXIgb2JzZXJ2ZXJTZXQgPSBuZXcgT2JzZXJ2ZXJTZXQoKTsKLSAgICAg
ICAgdmFyIGRlZmVycmVkID0gMDsKLQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIFBST1BFUlRZ
IENIQU5HRVMKLSAgICAgICAgLy8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQganVzdCBiZWZvcmUgYW4gb2JqZWN0IHByb3BlcnR5IGlzIGFib3V0
IHRvIGNoYW5nZS4KLSAgICAgICAgICAgICAgSXQgd2lsbCBub3RpZnkgYW55IGJlZm9yZSBvYnNl
cnZlcnMgYW5kIHByZXBhcmUgY2FjaGVzIGFtb25nIG90aGVyIHRoaW5ncy4KLQotICAgICAgICAg
ICAgICBOb3JtYWxseSB5b3Ugd2lsbCBub3QgbmVlZCB0byBjYWxsIHRoaXMgbWV0aG9kIGRpcmVj
dGx5IGJ1dCBpZiBmb3Igc29tZQotICAgICAgICAgICAgICByZWFzb24geW91IGNhbid0IGRpcmVj
dGx5IHdhdGNoIGEgcHJvcGVydHkgeW91IGNhbiBpbnZva2UgdGhpcyBtZXRob2QKLSAgICAgICAg
ICAgICAgbWFudWFsbHkgYWxvbmcgd2l0aCBgRW1iZXIucHJvcGVydHlEaWRDaGFuZ2UoKWAgd2hp
Y2ggeW91IHNob3VsZCBjYWxsIGp1c3QKLSAgICAgICAgICAgICAgYWZ0ZXIgdGhlIHByb3BlcnR5
IHZhbHVlIGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBwcm9wZXJ0eVdpbGxDaGFu
Z2UKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gb2JqIFRoZSBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydHkgdGhhdCB3aWxsIGNoYW5nZQotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IChvciBw
YXRoKSB0aGF0IHdpbGwgY2hhbmdlLgotICAgICAgICAgICAgICBAcmV0dXJuIHt2b2lkfQotICAg
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcHJvcGVydHlXaWxsQ2hhbmdlKG9iaiwga2V5
TmFtZSkgewotICAgICAgICAgICAgdmFyIG0gPSBvYmpbTUVUQV9LRVldLAotICAgICAgICAgICAg
d2F0Y2hpbmcgPSAobSAmJiBtLndhdGNoaW5nW2tleU5hbWVdID4gMCkgfHwga2V5TmFtZSA9PT0g
J2xlbmd0aCcsCi0gICAgICAgICAgICBwcm90byA9IG0gJiYgbS5wcm90bywKLSAgICAgICAgICAg
IGRlc2MgPSBtICYmIG0uZGVzY3Nba2V5TmFtZV07Ci0KLSAgICAgICAgICAgIGlmICghd2F0Y2hp
bmcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAocHJvdG8gPT09IG9iaikgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2Mud2lsbENoYW5nZSkgewotICAgICAg
ICAgICAgICAgIGRlc2Mud2lsbENoYW5nZShvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVwZW5kZW50S2V5c1dpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKTsKLSAg
ICAgICAgICAgIGNoYWluc1dpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKTsKLSAgICAgICAgICAg
IG5vdGlmeUJlZm9yZU9ic2VydmVycyhvYmosIGtleU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgYWZ0ZXIg
YW4gb2JqZWN0IHByb3BlcnR5IGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICBJdCB3aWxsIG5v
dGlmeSBhbnkgb2JzZXJ2ZXJzIGFuZCBjbGVhciBjYWNoZXMgYW1vbmcgb3RoZXIgdGhpbmdzLgot
Ci0gICAgICAgICAgICAgIE5vcm1hbGx5IHlvdSB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBt
ZXRob2QgZGlyZWN0bHkgYnV0IGlmIGZvciBzb21lCi0gICAgICAgICAgICAgIHJlYXNvbiB5b3Ug
Y2FuJ3QgZGlyZWN0bHkgd2F0Y2ggYSBwcm9wZXJ0eSB5b3UgY2FuIGludm9rZSB0aGlzIG1ldGhv
ZAotICAgICAgICAgICAgICBtYW51YWxseSBhbG9uZyB3aXRoIGBFbWJlci5wcm9wZXJ0eVdpbGxD
aGFuZ2UoKWAgd2hpY2ggeW91IHNob3VsZCBjYWxsIGp1c3QKLSAgICAgICAgICAgICAgYmVmb3Jl
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgcHJv
cGVydHlEaWRDaGFuZ2UKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydHkgdGhhdCB3aWxs
IGNoYW5nZQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVy
dHkga2V5IChvciBwYXRoKSB0aGF0IHdpbGwgY2hhbmdlLgotICAgICAgICAgICAgICBAcmV0dXJu
IHt2b2lkfQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcHJvcGVydHlEaWRDaGFu
Z2Uob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbSA9IG9ialtNRVRBX0tFWV0sCi0g
ICAgICAgICAgICB3YXRjaGluZyA9IChtICYmIG0ud2F0Y2hpbmdba2V5TmFtZV0gPiAwKSB8fCBr
ZXlOYW1lID09PSAnbGVuZ3RoJywKLSAgICAgICAgICAgIHByb3RvID0gbSAmJiBtLnByb3RvLAot
ICAgICAgICAgICAgZGVzYyA9IG0gJiYgbS5kZXNjc1trZXlOYW1lXTsKLQotICAgICAgICAgICAg
aWYgKHByb3RvID09PSBvYmopIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIHNob3VsZG4ndCB0aGlzIG1lYW4gdGhhdCB3ZSdyZSB3YXRj
aGluZyB0aGlzIGtleT8KLSAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2MuZGlkQ2hhbmdlKSB7
Ci0gICAgICAgICAgICAgICAgZGVzYy5kaWRDaGFuZ2Uob2JqLCBrZXlOYW1lKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghd2F0Y2hpbmcgJiYga2V5TmFtZSAhPT0gJ2xlbmd0aCcp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGRlcGVuZGVudEtleXNEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtKTsKLSAgICAgICAgICAgIGNo
YWluc0RpZENoYW5nZShvYmosIGtleU5hbWUsIG0sIGZhbHNlKTsKLSAgICAgICAgICAgIG5vdGlm
eU9ic2VydmVycyhvYmosIGtleU5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIFdJTExf
U0VFTiwgRElEX1NFRU47Ci0KLSAgICAgICAgLy8gY2FsbGVkIHdoZW5ldmVyIGEgcHJvcGVydHkg
aXMgYWJvdXQgdG8gY2hhbmdlIHRvIGNsZWFyIHRoZSBjYWNoZSBvZiBhbnkgZGVwZW5kZW50IGtl
eXMgKGFuZCBub3RpZnkgdGhvc2UgcHJvcGVydGllcyBvZiBjaGFuZ2VzLCBldGMuLi4pCi0gICAg
ICAgIGZ1bmN0aW9uIGRlcGVuZGVudEtleXNXaWxsQ2hhbmdlKG9iaiwgZGVwS2V5LCBtZXRhKSB7
Ci0gICAgICAgICAgICBpZiAob2JqLmlzRGVzdHJveWluZykgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHNlZW4gPSBXSUxMX1NFRU4s
IHRvcCA9ICFzZWVuOwotICAgICAgICAgICAgaWYgKHRvcCkgewotICAgICAgICAgICAgICAgIHNl
ZW4gPSBXSUxMX1NFRU4gPSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGl0ZXJEZXBz
KHByb3BlcnR5V2lsbENoYW5nZSwgb2JqLCBkZXBLZXksIHNlZW4sIG1ldGEpOwotICAgICAgICAg
ICAgaWYgKHRvcCkgewotICAgICAgICAgICAgICAgIFdJTExfU0VFTiA9IG51bGw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjYWxsZWQgd2hlbmV2ZXIgYSBwcm9wZXJ0
eSBoYXMganVzdCBjaGFuZ2VkIHRvIHVwZGF0ZSBkZXBlbmRlbnQga2V5cwotICAgICAgICBmdW5j
dGlvbiBkZXBlbmRlbnRLZXlzRGlkQ2hhbmdlKG9iaiwgZGVwS2V5LCBtZXRhKSB7Ci0gICAgICAg
ICAgICBpZiAob2JqLmlzRGVzdHJveWluZykgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHNlZW4gPSBESURfU0VFTiwgdG9wID0gIXNl
ZW47Ci0gICAgICAgICAgICBpZiAodG9wKSB7Ci0gICAgICAgICAgICAgICAgc2VlbiA9IERJRF9T
RUVOID0ge307Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpdGVyRGVwcyhwcm9wZXJ0eURp
ZENoYW5nZSwgb2JqLCBkZXBLZXksIHNlZW4sIG1ldGEpOwotICAgICAgICAgICAgaWYgKHRvcCkg
ewotICAgICAgICAgICAgICAgIERJRF9TRUVOID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGl0ZXJEZXBzKG1ldGhvZCwgb2JqLCBkZXBLZXksIHNl
ZW4sIG1ldGEpIHsKLSAgICAgICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihvYmopOwotICAgICAg
ICAgICAgaWYgKCFzZWVuW2d1aWRdKSAKLSAgICAgICAgICAgICAgICBzZWVuW2d1aWRdID0ge307
Ci0gICAgICAgICAgICBpZiAoc2VlbltndWlkXVtkZXBLZXldKSAKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBzZWVuW2d1aWRdW2RlcEtleV0gPSB0cnVlOwotCi0gICAgICAg
ICAgICB2YXIgZGVwcyA9IG1ldGEuZGVwczsKLSAgICAgICAgICAgIGRlcHMgPSBkZXBzICYmIGRl
cHNbZGVwS2V5XTsKLSAgICAgICAgICAgIGlmIChkZXBzKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh2YXIga2V5IGluIGRlcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBtZXRh
LmRlc2NzW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2MuX3N1c3Bl
bmRlZCA9PT0gb2JqKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICBtZXRob2Qob2JqLCBrZXkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNoYWluc1dpbGxDaGFuZ2Uo
b2JqLCBrZXlOYW1lLCBtKSB7Ci0gICAgICAgICAgICBpZiAoIShtLmhhc093blByb3BlcnR5KCdj
aGFpbldhdGNoZXJzJykgJiYKLSAgICAgICAgICAgIG0uY2hhaW5XYXRjaGVyc1trZXlOYW1lXSkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZhciBub2RlcyA9IG0uY2hhaW5XYXRjaGVyc1trZXlOYW1lXSwKLSAgICAgICAgICAgIGV2ZW50
cyA9IFtdLAotICAgICAgICAgICAgaSwgbDsKLQotICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9
IG5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIG5vZGVzW2ldLndp
bGxDaGFuZ2UoZXZlbnRzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0g
MCwgbCA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0eVdpbGxDaGFuZ2UoZXZlbnRzW2ldLCBldmVudHNbaSArIDFdKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNoYWluc0RpZENoYW5nZShvYmosIGtl
eU5hbWUsIG0sIHN1cHByZXNzRXZlbnRzKSB7Ci0gICAgICAgICAgICBpZiAoIShtICYmIG0uaGFz
T3duUHJvcGVydHkoJ2NoYWluV2F0Y2hlcnMnKSAmJgotICAgICAgICAgICAgbS5jaGFpbldhdGNo
ZXJzW2tleU5hbWVdKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIG5vZGVzID0gbS5jaGFpbldhdGNoZXJzW2tleU5hbWVdLAotICAg
ICAgICAgICAgZXZlbnRzID0gc3VwcHJlc3NFdmVudHMgPyBudWxsIDogW10sCi0gICAgICAgICAg
ICBpLCBsOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbm9kZXNbaV0uZGlkQ2hhbmdlKGV2ZW50cyk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzdXBwcmVzc0V2ZW50cykgewotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0g
MCwgbCA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0eURpZENoYW5nZShldmVudHNbaV0sIGV2ZW50c1tpICsgMV0pOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb3ZlcnJpZGVDaGFpbnMob2JqLCBrZXlO
YW1lLCBtKSB7Ci0gICAgICAgICAgICBjaGFpbnNEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBtLCB0
cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGJl
Z2luUHJvcGVydHlDaGFuZ2VzCi0gICAgICAgICAgICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGJlZ2luUHJvcGVy
dHlDaGFuZ2VzKCkgewotICAgICAgICAgICAgZGVmZXJyZWQrKzsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGVuZFByb3BlcnR5Q2hhbmdlcwotICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZW5kUHJv
cGVydHlDaGFuZ2VzKCkgewotICAgICAgICAgICAgZGVmZXJyZWQtLTsKLSAgICAgICAgICAgIGlm
IChkZWZlcnJlZCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgYmVmb3JlT2JzZXJ2ZXJTZXQuY2xl
YXIoKTsKLSAgICAgICAgICAgICAgICBvYnNlcnZlclNldC5mbHVzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIE1ha2UgYSBzZXJpZXMg
b2YgcHJvcGVydHkgY2hhbmdlcyB0b2dldGhlciBpbiBhbgotICAgICAgICAgICAgICBleGNlcHRp
b24tc2FmZSB3YXkuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICBFbWJlci5jaGFuZ2VQcm9wZXJ0aWVzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIG9i
ajEuc2V0KCdmb28nLCBtYXlCbG93VXBXaGVuU2V0KTsKLSAgICAgICAgICAgICAgICBvYmoyLnNl
dCgnYmFyJywgYmF6KTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIEBtZXRob2QgY2hhbmdlUHJvcGVydGllcwotICAgICAgICAgICAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgICAgICAgICBAcGFyYW0gW2JpbmRpbmddCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjaGFuZ2VQcm9wZXJ0aWVzKGNiLCBiaW5k
aW5nKSB7Ci0gICAgICAgICAgICBiZWdpblByb3BlcnR5Q2hhbmdlcygpOwotICAgICAgICAgICAg
dHJ5RmluYWxseShjYiwgZW5kUHJvcGVydHlDaGFuZ2VzLCBiaW5kaW5nKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIG5vdGlmeUJlZm9yZU9ic2VydmVycyhvYmosIGtleU5hbWUpIHsK
LSAgICAgICAgICAgIGlmIChvYmouaXNEZXN0cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZXZlbnROYW1lID0ga2V5TmFt
ZSArICc6YmVmb3JlJywgbGlzdGVuZXJzLCBkaWZmOwotICAgICAgICAgICAgaWYgKGRlZmVycmVk
KSB7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gYmVmb3JlT2JzZXJ2ZXJTZXQuYWRkKG9i
aiwga2V5TmFtZSwgZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICBkaWZmID0gbGlzdGVuZXJz
RGlmZihvYmosIGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKLSAgICAgICAgICAgICAgICBzZW5kRXZl
bnQob2JqLCBldmVudE5hbWUsIFtvYmosIGtleU5hbWVdLCBkaWZmKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VuZEV2ZW50KG9iaiwgZXZlbnROYW1lLCBbb2JqLCBr
ZXlOYW1lXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBu
b3RpZnlPYnNlcnZlcnMob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICBpZiAob2JqLmlzRGVz
dHJveWluZykgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGtleU5hbWUgKyAnOmNoYW5nZScsIGxpc3RlbmVyczsK
LSAgICAgICAgICAgIGlmIChkZWZlcnJlZCkgewotICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9
IG9ic2VydmVyU2V0LmFkZChvYmosIGtleU5hbWUsIGV2ZW50TmFtZSk7Ci0gICAgICAgICAgICAg
ICAgbGlzdGVuZXJzVW5pb24ob2JqLCBldmVudE5hbWUsIGxpc3RlbmVycyk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgW29i
aiwga2V5TmFtZV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18ucHJvcGVydHlXaWxsQ2hhbmdlID0gcHJvcGVydHlXaWxsQ2hhbmdlOwotICAgICAgICBf
X2V4cG9ydHNfXy5wcm9wZXJ0eURpZENoYW5nZSA9IHByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAg
ICBfX2V4cG9ydHNfXy5vdmVycmlkZUNoYWlucyA9IG92ZXJyaWRlQ2hhaW5zOwotICAgICAgICBf
X2V4cG9ydHNfXy5iZWdpblByb3BlcnR5Q2hhbmdlcyA9IGJlZ2luUHJvcGVydHlDaGFuZ2VzOwot
ICAgICAgICBfX2V4cG9ydHNfXy5lbmRQcm9wZXJ0eUNoYW5nZXMgPSBlbmRQcm9wZXJ0eUNoYW5n
ZXM7Ci0gICAgICAgIF9fZXhwb3J0c19fLmNoYW5nZVByb3BlcnRpZXMgPSBjaGFuZ2VQcm9wZXJ0
aWVzOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwv
ZXJyb3IiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2RlcGVuZGVuY3kyX18uTUVUQV9LRVk7
Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0K
LSAgICAgICAgdmFyIGdldDsKLQotICAgICAgICB2YXIgTUFOREFUT1JZX1NFVFRFUiA9IEVtYmVy
LkVOVi5NQU5EQVRPUllfU0VUVEVSOwotCi0gICAgICAgIHZhciBJU19HTE9CQUxfUEFUSCA9IC9e
KFtBLVokXXwoWzAtOV1bQS1aJF0pKS4qW1wuXS87Ci0gICAgICAgIHZhciBIQVNfVEhJUyA9ICd0
aGlzLic7Ci0gICAgICAgIHZhciBGSVJTVF9LRVkgPSAvXihbXlwuXSspLzsKLQotICAgICAgICAv
LyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uCi0gICAgICAgIC8vIEdFVCBBTkQgU0VUCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHdl
IGFyZSBvbiBhIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgYWNjZXNzb3JzIHdlIGNhbiB1c2UgdGhv
c2UuCi0gICAgICAgIC8vIE90aGVyd2lzZSBzaW11bGF0ZSBhY2Nlc3NvcnMgYnkgbG9va2luZyB1
cCB0aGUgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlCi0gICAgICAgIC8vIG9iamVjdC4KLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvbiBh
biBvYmplY3QuIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCwKLSAgICAgICAgICAgICAgdGhl
IGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZC4gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVk
IGJ1dCB0aGUKLSAgICAgICAgICAgICAgb2JqZWN0IGltcGxlbWVudHMgdGhlIGB1bmtub3duUHJv
cGVydHlgIG1ldGhvZCB0aGVuIHRoYXQgd2lsbCBiZSBpbnZva2VkLgotCi0gICAgICAgICAgICAg
IElmIHlvdSBwbGFuIHRvIHJ1biBvbiBJRTggYW5kIG9sZGVyIGJyb3dzZXJzIHRoZW4geW91IHNo
b3VsZCB1c2UgdGhpcwotICAgICAgICAgICAgICBtZXRob2QgYW55dGltZSB5b3Ugd2FudCB0byBy
ZXRyaWV2ZSBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCB0aGF0IHlvdSBkb24ndAotICAgICAgICAg
ICAgICBrbm93IGZvciBzdXJlIGlzIHByaXZhdGUuIChQcm9wZXJ0aWVzIGJlZ2lubmluZyB3aXRo
IGFuIHVuZGVyc2NvcmUgJ18nCi0gICAgICAgICAgICAgIGFyZSBjb25zaWRlcmVkIHByaXZhdGUu
KQotCi0gICAgICAgICAgICAgIE9uIGFsbCBuZXdlciBicm93c2VycywgeW91IG9ubHkgbmVlZCB0
byB1c2UgdGhpcyBtZXRob2QgdG8gcmV0cmlldmUKLSAgICAgICAgICAgICAgcHJvcGVydGllcyBp
ZiB0aGUgcHJvcGVydHkgbWlnaHQgbm90IGJlIGRlZmluZWQgb24gdGhlIG9iamVjdCBhbmQgeW91
IHdhbnQKLSAgICAgICAgICAgICAgdG8gcmVzcGVjdCB0aGUgYHVua25vd25Qcm9wZXJ0eWAgaGFu
ZGxlci4gT3RoZXJ3aXNlIHlvdSBjYW4gaWdub3JlIHRoaXMKLSAgICAgICAgICAgICAgbWV0aG9k
LgotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB0aGUgb2JqZWN0IGl0c2VsZiBpcyBgdW5k
ZWZpbmVkYCwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdwotICAgICAgICAgICAgICBhbiBlcnJvci4K
LQotICAgICAgICAgICAgICBAbWV0aG9kIGdldAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZXRyaWV2ZSBm
cm9tLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkg
a2V5IHRvIHJldHJpZXZlCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHByb3Bl
cnR5IHZhbHVlIG9yIGBudWxsYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBnZXQgPSBm
dW5jdGlvbiBnZXQob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAvLyBIZWxwZXJzIHRoYXQg
b3BlcmF0ZSB3aXRoICd0aGlzJyB3aXRoaW4gYW4gI2VhY2gKLSAgICAgICAgICAgIGlmIChrZXlO
YW1lID09PSAnJykgewotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICgha2V5TmFtZSAmJiAnc3RyaW5nJyA9PT0gdHlwZW9mIG9iaikg
ewotICAgICAgICAgICAgICAgIGtleU5hbWUgPSBvYmo7Ci0gICAgICAgICAgICAgICAgb2JqID0g
bnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJDYW5ub3Qg
Y2FsbCBnZXQgd2l0aCAiICsga2V5TmFtZSArICIga2V5LiIsICEha2V5TmFtZSk7Ci0gICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIkNhbm5vdCBjYWxsIGdldCB3aXRoICciICsga2V5TmFtZSArICIn
IG9uIGFuIHVuZGVmaW5lZCBvYmplY3QuIiwgb2JqICE9PSB1bmRlZmluZWQpOwotCi0gICAgICAg
ICAgICBpZiAob2JqID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRQYXRo
KG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBtZXRhID0g
b2JqW01FVEFfS0VZXSwgZGVzYyA9IG1ldGEgJiYgbWV0YS5kZXNjc1trZXlOYW1lXSwgcmV0Owot
Ci0gICAgICAgICAgICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkICYmIGtleU5hbWUuaW5kZXhPZign
LicpICE9PSAtMSkgewotICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0UGF0aChvYmosIGtleU5h
bWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVzYykgewotICAgICAgICAg
ICAgICAgIHJldHVybiBkZXNjLmdldChvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoTUFOREFUT1JZX1NFVFRFUiAmJiBtZXRhICYmIG1ldGEu
d2F0Y2hpbmdba2V5TmFtZV0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IG1ldGEu
dmFsdWVzW2tleU5hbWVdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldCA9IG9ialtrZXlOYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAocmV0ID09PSB1bmRlZmluZWQgJiYKLSAgICAgICAgICAgICAgICAnb2JqZWN0
JyA9PT0gdHlwZW9mIG9iaiAmJiAhKGtleU5hbWUgaW4gb2JqKSAmJiAnZnVuY3Rpb24nID09PSB0
eXBlb2Ygb2JqLnVua25vd25Qcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqLnVua25vd25Qcm9wZXJ0eShrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAg
ICAgIC8vIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgRW1iZXIgRGF0YSB0ZXN0cwotICAgICAgICBp
ZiAoRW1iZXIuY29uZmlnLm92ZXJyaWRlQWNjZXNzb3JzKSB7Ci0gICAgICAgICAgICBFbWJlci5n
ZXQgPSBnZXQ7Ci0gICAgICAgICAgICBFbWJlci5jb25maWcub3ZlcnJpZGVBY2Nlc3NvcnMoKTsK
LSAgICAgICAgICAgIGdldCA9IEVtYmVyLmdldDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBOb3JtYWxpemVzIGEgdGFyZ2V0L3BhdGggcGFpciB0byByZWZsZWN0IHRo
YXQgYWN0dWFsIHRhcmdldC9wYXRoIHRoYXQgc2hvdWxkCi0gICAgICAgICAgICAgIGJlIG9ic2Vy
dmVkLCBldGMuIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IHBhc3NpbmcgaW4gZ2xvYmFsIHByb3Bl
cnR5Ci0gICAgICAgICAgICAgIHBhdGhzIChpLmUuIGEgcGF0aCBiZWdpbm5pbmcgd2l0aCBhIGNh
cHRpYWwgbGV0dGVyIG5vdCBkZWZpbmVkIG9uIHRoZQotICAgICAgICAgICAgICB0YXJnZXQpLgot
Ci0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2Qgbm9ybWFsaXpl
VHVwbGUKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gdGFyZ2V0IFRoZSBjdXJyZW50IHRhcmdldC4gTWF5IGJlIGBudWxsYC4KLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGggQSBwYXRoIG9uIHRoZSB0YXJnZXQgb3IgYSBnbG9i
YWwgcHJvcGVydHkgcGF0aC4KLSAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IGEgdGVtcG9y
YXJ5IGFycmF5IHdpdGggdGhlIG5vcm1hbGl6ZWQgdGFyZ2V0L3BhdGggcGFpci4KLSAgICAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVR1cGxlKHRhcmdldCwgcGF0aCkgewot
ICAgICAgICAgICAgdmFyIGhhc1RoaXMgPSBwYXRoLmluZGV4T2YoSEFTX1RISVMpID09PSAwLAot
ICAgICAgICAgICAgaXNHbG9iYWwgPSAhaGFzVGhpcyAmJiBJU19HTE9CQUxfUEFUSC50ZXN0KHBh
dGgpLAotICAgICAgICAgICAga2V5OwotCi0gICAgICAgICAgICBpZiAoIXRhcmdldCB8fCBpc0ds
b2JhbCkgCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gRW1iZXIubG9va3VwOwotICAgICAgICAg
ICAgaWYgKGhhc1RoaXMpIAotICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDUpOwot
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBFbWJlci5sb29rdXApIHsKLSAgICAgICAgICAg
ICAgICBrZXkgPSBwYXRoLm1hdGNoKEZJUlNUX0tFWSlbMF07Ci0gICAgICAgICAgICAgICAgdGFy
Z2V0ID0gZ2V0KHRhcmdldCwga2V5KTsKLSAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zbGlj
ZShrZXkubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG11c3Qg
cmV0dXJuIHNvbWUga2luZCBvZiBwYXRoIHRvIGJlIHZhbGlkIGVsc2Ugb3RoZXIgdGhpbmdzIHdp
bGwgYnJlYWsuCi0gICAgICAgICAgICBpZiAoIXBhdGggfHwgcGF0aC5sZW5ndGggPT09IDApIAot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCdQYXRoIGNhbm5vdCBiZSBlbXB0
eScpOwotCi0gICAgICAgICAgICByZXR1cm4gWyB0YXJnZXQsIHBhdGggXTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIF9nZXRQYXRoKHJvb3QsIHBhdGgpIHsKLSAgICAgICAgICAgIHZh
ciBoYXNUaGlzLCBwYXJ0cywgdHVwbGUsIGlkeCwgbGVuOwotCi0gICAgICAgICAgICAvLyBJZiB0
aGVyZSBpcyBubyByb290IGFuZCBwYXRoIGlzIGEga2V5IG5hbWUsIHJldHVybiB0aGF0Ci0gICAg
ICAgICAgICAvLyBwcm9wZXJ0eSBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LgotICAgICAgICAgICAg
Ly8gRS5nLiBnZXQoJ0VtYmVyJykgLT4gRW1iZXIKLSAgICAgICAgICAgIGlmIChyb290ID09PSBu
dWxsICYmIHBhdGguaW5kZXhPZignLicpID09PSAtMSkgewotICAgICAgICAgICAgICAgIHJldHVy
biBnZXQoRW1iZXIubG9va3VwLCBwYXRoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gZGV0ZWN0IGNvbXBsaWNhdGVkIHBhdGhzIGFuZCBub3JtYWxpemUgdGhlbQotICAgICAgICAg
ICAgaGFzVGhpcyA9IHBhdGguaW5kZXhPZihIQVNfVEhJUykgPT09IDA7Ci0KLSAgICAgICAgICAg
IGlmICghcm9vdCB8fCBoYXNUaGlzKSB7Ci0gICAgICAgICAgICAgICAgdHVwbGUgPSBub3JtYWxp
emVUdXBsZShyb290LCBwYXRoKTsKLSAgICAgICAgICAgICAgICByb290ID0gdHVwbGVbMF07Ci0g
ICAgICAgICAgICAgICAgcGF0aCA9IHR1cGxlWzFdOwotICAgICAgICAgICAgICAgIHR1cGxlLmxl
bmd0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcnRzID0gcGF0aC5zcGxp
dCgiLiIpOwotICAgICAgICAgICAgbGVuID0gcGFydHMubGVuZ3RoOwotICAgICAgICAgICAgZm9y
IChpZHggPSAwOyByb290ICE9IG51bGwgJiYgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAg
ICAgICAgIHJvb3QgPSBnZXQocm9vdCwgcGFydHNbaWR4XSwgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJvb3QgJiYgcm9vdC5pc0Rlc3Ryb3llZCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiByb290OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2V0V2l0
aERlZmF1bHQocm9vdCwga2V5LCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgIHZhciB2YWx1
ZSA9IGdldChyb290LCBrZXkpOwotCi0gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5nZXRXaXRoRGVmYXVsdCA9IGdldFdpdGhEZWZhdWx0OwotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gZ2V0OwotICAgICAgICBfX2V4cG9ydHNfXy5nZXQgPSBnZXQ7Ci0gICAg
ICAgIF9fZXhwb3J0c19fLm5vcm1hbGl6ZVR1cGxlID0gbm9ybWFsaXplVHVwbGU7Ci0gICAgICAg
IF9fZXhwb3J0c19fLl9nZXRQYXRoID0gX2dldFBhdGg7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJl
ci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwv
cHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwv
ZXJyb3IiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5
NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBnZXRQYXRoID0gX19kZXBlbmRlbmN5Ml9fLl9nZXRQYXRoOwotICAgICAgICB2YXIg
TUVUQV9LRVkgPSBfX2RlcGVuZGVuY3kzX18uTUVUQV9LRVk7Ci0gICAgICAgIHZhciBwcm9wZXJ0
eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3k0X18ucHJvcGVydHlXaWxsQ2hhbmdlOwotICAgICAg
ICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3k0X18ucHJvcGVydHlEaWRDaGFu
Z2U7Ci0gICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTVfXy5kZWZpbmVQ
cm9wZXJ0eTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1
bHQiXTsKLQotICAgICAgICB2YXIgTUFOREFUT1JZX1NFVFRFUiA9IEVtYmVyLkVOVi5NQU5EQVRP
UllfU0VUVEVSOwotICAgICAgICB2YXIgSVNfR0xPQkFMID0gL14oW0EtWiRdfChbMC05XVtBLVok
XSkpLzsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgYSBw
cm9wZXJ0eSBvbiBhbiBvYmplY3QsIHJlc3BlY3RpbmcgY29tcHV0ZWQgcHJvcGVydGllcwotICAg
ICAgICAgICAgICBhbmQgbm90aWZ5aW5nIG9ic2VydmVycyBhbmQgb3RoZXIgbGlzdGVuZXJzIG9m
IHRoZSBjaGFuZ2UuIElmIHRoZQotICAgICAgICAgICAgICBwcm9wZXJ0eSBpcyBub3QgZGVmaW5l
ZCBidXQgdGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBgc2V0VW5rbm93blByb3BlcnR5YAotICAg
ICAgICAgICAgICBtZXRob2QgdGhlbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBhcyB3ZWxsLgotCi0g
ICAgICAgICAgICAgIEBtZXRob2Qgc2V0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIG1vZGlmeS4KLSAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5IGtleSB0byBzZXQK
LSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQKLSAg
ICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgcGFzc2VkIHZhbHVlLgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgdmFyIHNldCA9IGZ1bmN0aW9uIHNldChvYmosIGtleU5hbWUsIHZhbHVl
LCB0b2xlcmFudCkgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJQYXRoICciICsgb2JqICsgIicgbXVzdCBi
ZSBnbG9iYWwgaWYgbm8gb2JqIGlzIGdpdmVuLiIsIElTX0dMT0JBTC50ZXN0KG9iaikpOwotICAg
ICAgICAgICAgICAgIHZhbHVlID0ga2V5TmFtZTsKLSAgICAgICAgICAgICAgICBrZXlOYW1lID0g
b2JqOwotICAgICAgICAgICAgICAgIG9iaiA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEVtYmVyLmFzc2VydCgiQ2Fubm90IGNhbGwgc2V0IHdpdGggIiArIGtleU5hbWUgKyAi
IGtleS4iLCAhIWtleU5hbWUpOwotCi0gICAgICAgICAgICBpZiAoIW9iaikgewotICAgICAgICAg
ICAgICAgIHJldHVybiBzZXRQYXRoKG9iaiwga2V5TmFtZSwgdmFsdWUsIHRvbGVyYW50KTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG1ldGEgPSBvYmpbTUVUQV9LRVldLCBkZXNj
ID0gbWV0YSAmJiBtZXRhLmRlc2NzW2tleU5hbWVdLAotICAgICAgICAgICAgaXNVbmtub3duLCBj
dXJyZW50VmFsdWU7Ci0KLSAgICAgICAgICAgIGlmIChkZXNjID09PSB1bmRlZmluZWQgJiYga2V5
TmFtZS5pbmRleE9mKCcuJykgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNldFBh
dGgob2JqLCBrZXlOYW1lLCB2YWx1ZSwgdG9sZXJhbnQpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBuZWVkIHRvIHByb3ZpZGUgYW4gb2JqZWN0IGFuZCBr
ZXkgdG8gYHNldGAuIiwgISFvYmogJiYga2V5TmFtZSAhPT0gdW5kZWZpbmVkKTsKLSAgICAgICAg
ICAgIEVtYmVyLmFzc2VydCgnY2FsbGluZyBzZXQgb24gZGVzdHJveWVkIG9iamVjdCcsICFvYmou
aXNEZXN0cm95ZWQpOwotCi0gICAgICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgICAgICAgICAgZGVzYy5zZXQob2JqLCBrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3Qn
ICYmIG9iaiAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9ialtrZXlOYW1lXSA9
PT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlzVW5rbm93biA9ICdvYmplY3QnID09PSB0eXBl
b2Ygb2JqICYmICEoa2V5TmFtZSBpbiBvYmopOwotCi0gICAgICAgICAgICAgICAgLy8gc2V0VW5r
bm93blByb3BlcnR5IGlzIGNhbGxlZCBpZiBgb2JqYCBpcyBhbiBvYmplY3QsCi0gICAgICAgICAg
ICAgICAgLy8gdGhlIHByb3BlcnR5IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIGFuZCB0aGUKLSAg
ICAgICAgICAgICAgICAvLyBgc2V0VW5rbm93blByb3BlcnR5YCBtZXRob2QgZXhpc3RzIG9uIHRo
ZSBvYmplY3QKLSAgICAgICAgICAgICAgICBpZiAoaXNVbmtub3duICYmICdmdW5jdGlvbicgPT09
IHR5cGVvZiBvYmouc2V0VW5rbm93blByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9i
ai5zZXRVbmtub3duUHJvcGVydHkoa2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobWV0YSAmJiBtZXRhLndhdGNoaW5nW2tleU5hbWVdID4gMCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoTUFOREFUT1JZX1NFVFRFUikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFZhbHVlID0gbWV0YS52YWx1ZXNba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBvYmpb
a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8g
b25seSB0cmlnZ2VyIGEgY2hhbmdlIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZAotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoTUFOREFUT1JZX1NFVFRFUikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXlOYW1lIGluIG9i
aikpIHx8ICFvYmoucHJvcGVydHlJc0VudW1lcmFibGUoa2V5TmFtZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBudWxsLCB2
YWx1ZSk7IC8vIHNldHVwIG1hbmRhdG9yeSBzZXR0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLnZhbHVl
c1trZXlOYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqW2tleU5hbWVdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5hbWUpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgb2JqW2tleU5hbWVdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9OwotCi0gICAgICAgIC8v
IEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgRW1iZXIgRGF0YSB0ZXN0cwotICAgICAgICAvLyBFUzZU
T0RPOiBWZXJpZnkgc3RpbGwgdHJ1ZQotICAgICAgICBpZiAoRW1iZXIuY29uZmlnLm92ZXJyaWRl
QWNjZXNzb3JzKSB7Ci0gICAgICAgICAgICBFbWJlci5zZXQgPSBzZXQ7Ci0gICAgICAgICAgICBF
bWJlci5jb25maWcub3ZlcnJpZGVBY2Nlc3NvcnMoKTsKLSAgICAgICAgICAgIHNldCA9IEVtYmVy
LnNldDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNldFBhdGgocm9vdCwgcGF0aCwg
dmFsdWUsIHRvbGVyYW50KSB7Ci0gICAgICAgICAgICB2YXIga2V5TmFtZTsKLQotICAgICAgICAg
ICAgLy8gZ2V0IHRoZSBsYXN0IHBhcnQgb2YgdGhlIHBhdGgKLSAgICAgICAgICAgIGtleU5hbWUg
PSBwYXRoLnNsaWNlKHBhdGgubGFzdEluZGV4T2YoJy4nKSArIDEpOwotCi0gICAgICAgICAgICAv
LyBnZXQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhcnQKLSAgICAgICAgICAgIHBhdGggPSAocGF0
aCA9PT0ga2V5TmFtZSkgPyBrZXlOYW1lIDogcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIChr
ZXlOYW1lLmxlbmd0aCArIDEpKTsKLQotICAgICAgICAgICAgLy8gdW5sZXNzIHRoZSBwYXRoIGlz
IHRoaXMsIGxvb2sgdXAgdGhlIGZpcnN0IHBhcnQgdG8KLSAgICAgICAgICAgIC8vIGdldCB0aGUg
cm9vdAotICAgICAgICAgICAgaWYgKHBhdGggIT09ICd0aGlzJykgewotICAgICAgICAgICAgICAg
IHJvb3QgPSBnZXRQYXRoKHJvb3QsIHBhdGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoIWtleU5hbWUgfHwga2V5TmFtZS5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgRW1iZXJFcnJvcignUHJvcGVydHkgc2V0IGZhaWxlZDogWW91IHBhc3NlZCBh
biBlbXB0eSBwYXRoJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcm9vdCkg
ewotICAgICAgICAgICAgICAgIGlmICh0b2xlcmFudCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVtYmVyRXJyb3IoJ1Byb3BlcnR5IHNldCBmYWlsZWQ6IG9iamVjdCBpbiBwYXRoICIn
ICsgcGF0aCArICciIGNvdWxkIG5vdCBiZSBmb3VuZCBvciB3YXMgZGVzdHJveWVkLicpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNldChy
b290LCBrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgRXJyb3ItdG9sZXJhbnQgZm9ybSBvZiBgRW1iZXIuc2V0YC4gV2lsbCBub3QgYmxvdyB1
cCBpZiBhbnkgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgY2hhaW4gaXMgYHVuZGVmaW5lZGAs
IGBudWxsYCwgb3IgZGVzdHJveWVkLgotCi0gICAgICAgICAgICAgIFRoaXMgaXMgcHJpbWFyaWx5
IHVzZWQgd2hlbiBzeW5jaW5nIGJpbmRpbmdzLCB3aGljaCBtYXkgdHJ5IHRvIHVwZGF0ZSBhZnRl
cgotICAgICAgICAgICAgICBhbiBvYmplY3QgaGFzIGJlZW4gZGVzdHJveWVkLgotCi0gICAgICAg
ICAgICAgIEBtZXRob2QgdHJ5U2V0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIG1vZGlmeS4KLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gc2V0Ci0gICAg
ICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0Ci0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiB0cnlTZXQocm9vdCwgcGF0aCwgdmFsdWUpIHsKLSAg
ICAgICAgICAgIHJldHVybiBzZXQocm9vdCwgcGF0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgX19leHBvcnRzX18udHJ5U2V0ID0gdHJ5U2V0OwotICAgICAgICBfX2V4cG9y
dHNfXy5zZXQgPSBzZXQ7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9ydW5fbG9v
cCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVy
LW1ldGFsL2FycmF5IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgYXBwbHkgPSBfX2RlcGVuZGVuY3kyX18uYXBwbHk7Ci0gICAgICAgIHZhciBp
bmRleE9mID0gX19kZXBlbmRlbmN5M19fLmluZGV4T2Y7Ci0gICAgICAgIHZhciBiZWdpblByb3Bl
cnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTRfXy5iZWdpblByb3BlcnR5Q2hhbmdlczsKLSAgICAg
ICAgdmFyIGVuZFByb3BlcnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTRfXy5lbmRQcm9wZXJ0eUNo
YW5nZXM7Ci0KLSAgICAgICAgZnVuY3Rpb24gb25CZWdpbihjdXJyZW50KSB7Ci0gICAgICAgICAg
ICBydW4uY3VycmVudFJ1bkxvb3AgPSBjdXJyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gb25FbmQoY3VycmVudCwgbmV4dCkgewotICAgICAgICAgICAgcnVuLmN1cnJlbnRSdW5M
b29wID0gbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVTNlRPRE86IHNob3VsZCBCYWNr
YnVybmVyIGJlY29tZSBlczY/Ci0gICAgICAgIHZhciBCYWNrYnVybmVyID0gcmVxdWlyZU1vZHVs
ZSgnYmFja2J1cm5lcicpLkJhY2tidXJuZXI7Ci0gICAgICAgIHZhciBiYWNrYnVybmVyID0gbmV3
IEJhY2tidXJuZXIoWydzeW5jJywgJ2FjdGlvbnMnLCAnZGVzdHJveSddLCB7Ci0gICAgICAgICAg
ICBzeW5jOiB7Ci0gICAgICAgICAgICAgICAgYmVmb3JlOiBiZWdpblByb3BlcnR5Q2hhbmdlcywK
LSAgICAgICAgICAgICAgICBhZnRlcjogZW5kUHJvcGVydHlDaGFuZ2VzCi0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgZGVmYXVsdFF1ZXVlOiAnYWN0aW9ucycsCi0gICAgICAgICAgICBvbkJl
Z2luOiBvbkJlZ2luLAotICAgICAgICAgICAgb25FbmQ6IG9uRW5kLAotICAgICAgICAgICAgb25F
cnJvclRhcmdldDogRW1iZXIsCi0gICAgICAgICAgICBvbkVycm9yTWV0aG9kOiAnb25lcnJvcicK
LSAgICAgICAgfSk7Ci0gICAgICAgIHZhciBzbGljZSA9IFtdLnNsaWNlOwotICAgICAgICB2YXIg
Y29uY2F0ID0gW10uY29uY2F0OwotCi0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gcnVuIC0gdGhp
cyBpcyBpZGVhbGx5IHRoZSBvbmx5IHB1YmxpYyBBUEkgdGhlIGRldiBzZWVzCi0gICAgICAgIC8v
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJ1bnMgdGhlIHBhc3NlZCB0YXJnZXQgYW5k
IG1ldGhvZCBpbnNpZGUgb2YgYSBSdW5Mb29wLCBlbnN1cmluZyBhbnkKLSAgICAgICAgICAgICAg
ZGVmZXJyZWQgYWN0aW9ucyBpbmNsdWRpbmcgYmluZGluZ3MgYW5kIHZpZXdzIHVwZGF0ZXMgYXJl
IGZsdXNoZWQgYXQgdGhlCi0gICAgICAgICAgICAgIGVuZC4KLQotICAgICAgICAgICAgICBOb3Jt
YWxseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGludm9rZSB0aGlzIG1ldGhvZCB5b3Vyc2VsZi4g
SG93ZXZlciBpZgotICAgICAgICAgICAgICB5b3UgYXJlIGltcGxlbWVudGluZyByYXcgZXZlbnQg
aGFuZGxlcnMgd2hlbiBpbnRlcmZhY2luZyB3aXRoIG90aGVyCi0gICAgICAgICAgICAgIGxpYnJh
cmllcyBvciBwbHVnaW5zLCB5b3Ugc2hvdWxkIHByb2JhYmx5IHdyYXAgYWxsIG9mIHlvdXIgY29k
ZSBpbnNpZGUgdGhpcwotICAgICAgICAgICAgICBjYWxsLgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IC8vIGNvZGUgdG8gYmUgZXhlY3V0ZSB3aXRoaW4gYSBSdW5Mb29wCi0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgcnVuCi0gICAgICAg
ICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAg
ICAgICBAY29uc3RydWN0b3IKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRd
IHRhcmdldCBvZiBtZXRob2QgdG8gY2FsbAotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fFN0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBpbnZva2UuCi0gICAgICAgICAgICAgICAgTWF5IGJl
IGEgZnVuY3Rpb24gb3IgYSBzdHJpbmcuIElmIHlvdSBwYXNzIGEgc3RyaW5nCi0gICAgICAgICAg
ICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBvbiB0aGUgcGFzc2VkIHRhcmdldC4KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gQW55IGFkZGl0aW9uYWwgYXJndW1l
bnRzIHlvdSB3aXNoIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC4KLSAgICAgICAgICAgICAgQHJldHVy
biB7T2JqZWN0fSByZXR1cm4gdmFsdWUgZnJvbSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9u
LgotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IHJ1bjsK
LSAgICAgICAgZnVuY3Rpb24gcnVuKCkgewotICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2ti
dXJuZXIsIGJhY2tidXJuZXIucnVuLCBhcmd1bWVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIElmIG5vIHJ1bi1sb29wIGlzIHByZXNlbnQsIGl0IGNyZWF0ZXMg
YSBuZXcgb25lLiBJZiBhIHJ1biBsb29wIGlzCi0gICAgICAgICAgICAgIHByZXNlbnQgaXQgd2ls
bCBxdWV1ZSBpdHNlbGYgdG8gcnVuIG9uIHRoZSBleGlzdGluZyBydW4tbG9vcHMgYWN0aW9uCi0g
ICAgICAgICAgICAgIHF1ZXVlLgotCi0gICAgICAgICAgICAgIFBsZWFzZSBub3RlOiBUaGlzIGlz
IG5vdCBmb3Igbm9ybWFsIHVzYWdlLCBhbmQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LgotCi0g
ICAgICAgICAgICAgIElmIGludm9rZWQgd2hlbiBub3Qgd2l0aGluIGEgcnVuIGxvb3A6Ci0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBydW4uam9pbihmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgbmV3IHJ1bi1sb29wCi0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbHRlcm5hdGl2
ZWx5LCBpZiBjYWxsZWQgd2l0aGluIGFuIGV4aXN0aW5nIHJ1biBsb29wOgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIC8vIGNyZWF0ZXMgYSBuZXcgcnVuLWxvb3AKLSAgICAgICAgICAgICAgICBydW4u
am9pbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIC8vIGpvaW5zIHdpdGggdGhlIGV4
aXN0aW5nIHJ1bi1sb29wLCBhbmQgcXVldWVzIGZvciBpbnZvY2F0aW9uIG9uCi0gICAgICAgICAg
ICAgICAgICAvLyB0aGUgZXhpc3RpbmcgcnVuLWxvb3BzIGFjdGlvbiBxdWV1ZS4KLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2Qgam9pbgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRv
IGNhbGwKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBNZXRo
b2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgIE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3Ry
aW5nLiBJZiB5b3UgcGFzcyBhIHN0cmluZwotICAgICAgICAgICAgICAgIHRoZW4gaXQgd2lsbCBi
ZSBsb29rZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJnZXQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBbYXJncypdIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB5b3Ugd2lzaCB0byBwYXNz
IHRvIHRoZSBtZXRob2QuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gUmV0dXJuIHZh
bHVlIGZyb20gaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi4gUGxlYXNlIG5vdGUsCi0gICAg
ICAgICAgICAgIHdoZW4gY2FsbGVkIHdpdGhpbiBhbiBleGlzdGluZyBsb29wLCBubyByZXR1cm4g
dmFsdWUgaXMgcG9zc2libGUuCi0gICAgICAgICAgICAqLwotICAgICAgICBydW4uam9pbiA9IGZ1
bmN0aW9uKHRhcmdldCwgbWV0aG9kIC8qIGFyZ3MgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgICAg
ICBpZiAoIXJ1bi5jdXJyZW50UnVuTG9vcCkgewotICAgICAgICAgICAgICAgIHJldHVybiBhcHBs
eShFbWJlciwgcnVuLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGFyZ3MudW5zaGlm
dCgnYWN0aW9ucycpOwotICAgICAgICAgICAgYXBwbHkocnVuLCBydW4uc2NoZWR1bGUsIGFyZ3Mp
OwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBQcm92aWRlcyBhIHVz
ZWZ1bCB1dGlsaXR5IGZvciB3aGVuIGludGVncmF0aW5nIHdpdGggbm9uLUVtYmVyIGxpYnJhcmll
cwotICAgICAgICAgICAgICB0aGF0IHByb3ZpZGUgYXN5bmNocm9ub3VzIGNhbGxiYWNrcy4KLQot
ICAgICAgICAgICAgICBFbWJlciB1dGlsaXplcyBhIHJ1bi1sb29wIHRvIGJhdGNoIGFuZCBjb2Fs
ZXNjZSBjaGFuZ2VzLiBUaGlzIHdvcmtzIGJ5Ci0gICAgICAgICAgICAgIG1hcmtpbmcgdGhlIHN0
YXJ0IGFuZCBlbmQgb2YgRW1iZXItcmVsYXRlZCBKYXZhc2NyaXB0IGV4ZWN1dGlvbi4KLQotICAg
ICAgICAgICAgICBXaGVuIHVzaW5nIGV2ZW50cyBzdWNoIGFzIGEgVmlldydzIGNsaWNrIGhhbmRs
ZXIsIEVtYmVyIHdyYXBzIHRoZSBldmVudAotICAgICAgICAgICAgICBoYW5kbGVyIGluIGEgcnVu
LWxvb3AsIGJ1dCB3aGVuIGludGVncmF0aW5nIHdpdGggbm9uLUVtYmVyIGxpYnJhcmllcyB0aGlz
Ci0gICAgICAgICAgICAgIGNhbiBiZSB0ZWRpb3VzLgotCi0gICAgICAgICAgICAgIEZvciBleGFt
cGxlLCB0aGUgZm9sbG93aW5nIGlzIHJhdGhlciB2ZXJib3NlIGJ1dCBpcyB0aGUgY29ycmVjdCB3
YXkgdG8gY29tYmluZQotICAgICAgICAgICAgICB0aGlyZC1wYXJ0eSBldmVudHMgYW5kIEVtYmVy
IGNvZGUuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIg
dGhhdCA9IHRoaXM7Ci0gICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBm
dW5jdGlvbigpewotICAgICAgICAgICAgICAgIHJ1bihmdW5jdGlvbigpewotICAgICAgICAgICAg
ICAgICAgdGhhdC5oYW5kbGVSZXNpemUoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRvIHJlZHVjZSB0
aGUgYm9pbGVycGxhdGUsIHRoZSBmb2xsb3dpbmcgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEK
LSAgICAgICAgICAgICAgcnVuLWxvb3Atd3JhcHBlZCBjYWxsYmFjayBoYW5kbGVyLgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykub24o
J3Jlc2l6ZScsIHJ1bi5iaW5kKHRoaXMsIHRoaXMuaGFuZGxlUmVzaXplKSk7Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgYmluZAotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJn
ZXQgb2YgbWV0aG9kIHRvIGNhbGwKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJp
bmd9IG1ldGhvZCBNZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgIE1heSBiZSBhIGZ1
bmN0aW9uIG9yIGEgc3RyaW5nLiBJZiB5b3UgcGFzcyBhIHN0cmluZwotICAgICAgICAgICAgICAg
IHRoZW4gaXQgd2lsbCBiZSBsb29rZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJnZXQuCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypdIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB5
b3Ugd2lzaCB0byBwYXNzIHRvIHRoZSBtZXRob2QuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09i
amVjdH0gcmV0dXJuIHZhbHVlIGZyb20gaW52b2tpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbi4gUGxl
YXNlIG5vdGUsCi0gICAgICAgICAgICAgIHdoZW4gY2FsbGVkIHdpdGhpbiBhbiBleGlzdGluZyBs
b29wLCBubyByZXR1cm4gdmFsdWUgaXMgcG9zc2libGUuCi0gICAgICAgICAgICAgIEBzaW5jZSAx
LjQuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgcnVuLmJpbmQgPSBmdW5jdGlvbih0YXJnZXQs
IG1ldGhvZCAvKiBhcmdzKi8KLSAgICAgICAgKSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IHNs
aWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXBwbHkocnVuLCBydW4uam9pbiwgYXJncy5jb25jYXQoc2xp
Y2UuY2FsbChhcmd1bWVudHMpKSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotCi0gICAg
ICAgIHJ1bi5iYWNrYnVybmVyID0gYmFja2J1cm5lcjsKLSAgICAgICAgcnVuLmN1cnJlbnRSdW5M
b29wID0gbnVsbDsKLSAgICAgICAgcnVuLnF1ZXVlcyA9IGJhY2tidXJuZXIucXVldWVOYW1lczsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQmVnaW5zIGEgbmV3IFJ1bkxvb3AuIEFueSBk
ZWZlcnJlZCBhY3Rpb25zIGludm9rZWQgYWZ0ZXIgdGhlIGJlZ2luIHdpbGwKLSAgICAgICAgICAg
ICAgYmUgYnVmZmVyZWQgdW50aWwgeW91IGludm9rZSBhIG1hdGNoaW5nIGNhbGwgdG8gYHJ1bi5l
bmQoKWAuIFRoaXMgaXMKLSAgICAgICAgICAgICAgYSBsb3dlci1sZXZlbCB3YXkgdG8gdXNlIGEg
UnVuTG9vcCBpbnN0ZWFkIG9mIHVzaW5nIGBydW4oKWAuCi0KLSAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICBydW4uYmVnaW4oKTsKLSAgICAgICAgICAgICAgLy8gY29k
ZSB0byBiZSBleGVjdXRlIHdpdGhpbiBhIFJ1bkxvb3AKLSAgICAgICAgICAgICAgcnVuLmVuZCgp
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGJlZ2luCi0gICAg
ICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAgICAgICAqLwotICAgICAgICBydW4uYmVn
aW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGJhY2tidXJuZXIuYmVnaW4oKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRW5kcyBhIFJ1bkxvb3AuIFRoaXMg
bXVzdCBiZSBjYWxsZWQgc29tZXRpbWUgYWZ0ZXIgeW91IGNhbGwKLSAgICAgICAgICAgICAgYHJ1
bi5iZWdpbigpYCB0byBmbHVzaCBhbnkgZGVmZXJyZWQgYWN0aW9ucy4gVGhpcyBpcyBhIGxvd2Vy
LWxldmVsIHdheQotICAgICAgICAgICAgICB0byB1c2UgYSBSdW5Mb29wIGluc3RlYWQgb2YgdXNp
bmcgYHJ1bigpYC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IHJ1bi5iZWdpbigpOwotICAgICAgICAgICAgICAvLyBjb2RlIHRvIGJlIGV4ZWN1dGUgd2l0aGlu
IGEgUnVuTG9vcAotICAgICAgICAgICAgICBydW4uZW5kKCk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgZW5kCi0gICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9
Ci0gICAgICAgICAgICAqLwotICAgICAgICBydW4uZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICBiYWNrYnVybmVyLmVuZCgpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBBcnJheSBvZiBuYW1lZCBxdWV1ZXMuIFRoaXMgYXJyYXkgZGV0ZXJtaW5lcyB0aGUg
b3JkZXIgaW4gd2hpY2ggcXVldWVzCi0gICAgICAgICAgICAgIGFyZSBmbHVzaGVkIGF0IHRoZSBl
bmQgb2YgdGhlIFJ1bkxvb3AuIFlvdSBjYW4gZGVmaW5lIHlvdXIgb3duIHF1ZXVlcyBieQotICAg
ICAgICAgICAgICBzaW1wbHkgYWRkaW5nIHRoZSBxdWV1ZSBuYW1lIHRvIHRoaXMgYXJyYXkuIE5v
cm1hbGx5IHlvdSBzaG91bGQgbm90IG5lZWQKLSAgICAgICAgICAgICAgdG8gaW5zcGVjdCBvciBt
b2RpZnkgdGhpcyBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBAcHJvcGVydHkgcXVldWVzCi0g
ICAgICAgICAgICAgIEB0eXBlIEFycmF5Ci0gICAgICAgICAgICAgIEBkZWZhdWx0IFsnc3luYycs
ICdhY3Rpb25zJywgJ2Rlc3Ryb3knXQotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgQWRkcyB0aGUgcGFzc2VkIHRhcmdldC9tZXRob2QgYW5kIGFueSBvcHRpb25h
bCBhcmd1bWVudHMgdG8gdGhlIG5hbWVkCi0gICAgICAgICAgICAgIHF1ZXVlIHRvIGJlIGV4ZWN1
dGVkIGF0IHRoZSBlbmQgb2YgdGhlIFJ1bkxvb3AuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5Ci0g
ICAgICAgICAgICAgIHN0YXJ0ZWQgYSBSdW5Mb29wIHdoZW4gY2FsbGluZyB0aGlzIG1ldGhvZCBv
bmUgd2lsbCBiZSBzdGFydGVkIGZvciB5b3UKLSAgICAgICAgICAgICAgYXV0b21hdGljYWxseS4K
LQotICAgICAgICAgICAgICBBdCB0aGUgZW5kIG9mIGEgUnVuTG9vcCwgYW55IG1ldGhvZHMgc2No
ZWR1bGVkIGluIHRoaXMgd2F5IHdpbGwgYmUgaW52b2tlZC4KLSAgICAgICAgICAgICAgTWV0aG9k
cyB3aWxsIGJlIGludm9rZWQgaW4gYW4gb3JkZXIgbWF0Y2hpbmcgdGhlIG5hbWVkIHF1ZXVlcyBk
ZWZpbmVkIGluCi0gICAgICAgICAgICAgIHRoZSBgcnVuLnF1ZXVlc2AgcHJvcGVydHkuCi0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBydW4uc2NoZWR1bGUoJ3N5
bmMnLCB0aGlzLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgYmUg
ZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IFJ1bkxvb3AgcXVldWUsIHdoZW4gYmluZGluZ3MgYXJlIHN5
bmNlZAotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJzY2hlZHVsZWQgb24gc3luYyBxdWV1
ZSIpOwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBydW4uc2NoZWR1bGUoJ2Fj
dGlvbnMnLCB0aGlzLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwg
YmUgZXhlY3V0ZWQgaW4gdGhlICdhY3Rpb25zJyBxdWV1ZSwgYWZ0ZXIgYmluZGluZ3MgaGF2ZSBz
eW5jZWQuCi0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coInNjaGVkdWxlZCBvbiBhY3Rpb25z
IHF1ZXVlIik7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIC8vIE5vdGUgdGhl
IGZ1bmN0aW9ucyB3aWxsIGJlIHJ1biBpbiBvcmRlciBiYXNlZCBvbiB0aGUgcnVuIHF1ZXVlcyBv
cmRlci4KLSAgICAgICAgICAgICAgLy8gT3V0cHV0IHdvdWxkIGJlOgotICAgICAgICAgICAgICAv
LyAgIHNjaGVkdWxlZCBvbiBzeW5jIHF1ZXVlCi0gICAgICAgICAgICAgIC8vICAgc2NoZWR1bGVk
IG9uIGFjdGlvbnMgcXVldWUKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1l
dGhvZCBzY2hlZHVsZQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcXVldWUgVGhlIG5h
bWUgb2YgdGhlIHF1ZXVlIHRvIHNjaGVkdWxlIGFnYWluc3QuCi0gICAgICAgICAgICAgICAgRGVm
YXVsdCBxdWV1ZXMgYXJlICdzeW5jJyBhbmQgJ2FjdGlvbnMnCi0gICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2JqZWN0IHRvIHVzZSBhcyB0aGUgY29udGV4dCB3
aGVuIGludm9raW5nIGEgbWV0aG9kLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ3xGdW5j
dGlvbn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLiBJZiB5b3UgcGFzcyBhIHN0cmluZyBp
dAotICAgICAgICAgICAgICAgIHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlIHRhcmdldCBvYmplY3Qg
YXQgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICAgaW52b2tl
ZCBhbGxvd2luZyB5b3UgdG8gY2hhbmdlIHRoZSB0YXJnZXQgZnVuY3Rpb24uCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJndW1lbnRzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIGJl
IHBhc3NlZCB0byB0aGUgcXVldWVkIG1ldGhvZC4KLSAgICAgICAgICAgICAgQHJldHVybiB7dm9p
ZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1bi5zY2hlZHVsZSA9IGZ1bmN0aW9uKHF1ZXVl
LCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgY2hlY2tBdXRvUnVuKCk7Ci0gICAgICAg
ICAgICBhcHBseShiYWNrYnVybmVyLCBiYWNrYnVybmVyLnNjaGVkdWxlLCBhcmd1bWVudHMpOwot
ICAgICAgICB9OwotCi0gICAgICAgIC8vIFVzZWQgYnkgZ2xvYmFsIHRlc3QgdGVhcmRvd24KLSAg
ICAgICAgcnVuLmhhc1NjaGVkdWxlZFRpbWVycyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
cmV0dXJuIGJhY2tidXJuZXIuaGFzVGltZXJzKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8g
VXNlZCBieSBnbG9iYWwgdGVzdCB0ZWFyZG93bgotICAgICAgICBydW4uY2FuY2VsVGltZXJzID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYmFja2J1cm5lci5jYW5jZWxUaW1lcnMoKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgSW1tZWRpYXRlbHkgZmx1c2hl
cyBhbnkgZXZlbnRzIHNjaGVkdWxlZCBpbiB0aGUgJ3N5bmMnIHF1ZXVlLiBCaW5kaW5ncwotICAg
ICAgICAgICAgICB1c2UgdGhpcyBxdWV1ZSBzbyB0aGlzIG1ldGhvZCBpcyBhIHVzZWZ1bCB3YXkg
dG8gaW1tZWRpYXRlbHkgZm9yY2UgYWxsCi0gICAgICAgICAgICAgIGJpbmRpbmdzIGluIHRoZSBh
cHBsaWNhdGlvbiB0byBzeW5jLgotCi0gICAgICAgICAgICAgIFlvdSBzaG91bGQgY2FsbCB0aGlz
IG1ldGhvZCBhbnl0aW1lIHlvdSBuZWVkIGFueSBjaGFuZ2VkIHN0YXRlIHRvIHByb3BhZ2F0ZQot
ICAgICAgICAgICAgICB0aHJvdWdob3V0IHRoZSBhcHAgaW1tZWRpYXRlbHkgd2l0aG91dCByZXBh
aW50aW5nIHRoZSBVSSAod2hpY2ggaGFwcGVucwotICAgICAgICAgICAgICBpbiB0aGUgbGF0ZXIg
J3JlbmRlcicgcXVldWUgYWRkZWQgYnkgdGhlIGBlbWJlci12aWV3c2AgcGFja2FnZSkuCi0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBydW4uc3luYygpOwotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHN5bmMKLSAgICAgICAgICAg
ICAgQHJldHVybiB7dm9pZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1bi5zeW5jID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoYmFja2J1cm5lci5jdXJyZW50SW5zdGFuY2UpIHsK
LSAgICAgICAgICAgICAgICBiYWNrYnVybmVyLmN1cnJlbnRJbnN0YW5jZS5xdWV1ZXMuc3luYy5m
bHVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBJbnZva2VzIHRoZSBwYXNzZWQgdGFyZ2V0L21ldGhvZCBhbmQgb3B0aW9uYWwgYXJn
dW1lbnRzIGFmdGVyIGEgc3BlY2lmaWVkCi0gICAgICAgICAgICAgIHBlcmlvZCBpZiB0aW1lLiBU
aGUgbGFzdCBwYXJhbWV0ZXIgb2YgdGhpcyBtZXRob2QgbXVzdCBhbHdheXMgYmUgYSBudW1iZXIK
LSAgICAgICAgICAgICAgb2YgbWlsbGlzZWNvbmRzLgotCi0gICAgICAgICAgICAgIFlvdSBzaG91
bGQgdXNlIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSBuZWVkIHRvIHJ1biBzb21lIGFjdGlvbiBh
ZnRlciBhCi0gICAgICAgICAgICAgIHBlcmlvZCBvZiB0aW1lIGluc3RlYWQgb2YgdXNpbmcgYHNl
dFRpbWVvdXQoKWAuIFRoaXMgbWV0aG9kIHdpbGwgZW5zdXJlIHRoYXQKLSAgICAgICAgICAgICAg
aXRlbXMgdGhhdCBleHBpcmUgZHVyaW5nIHRoZSBzYW1lIHNjcmlwdCBleGVjdXRpb24gY3ljbGUg
YWxsIGV4ZWN1dGUKLSAgICAgICAgICAgICAgdG9nZXRoZXIsIHdoaWNoIGlzIG9mdGVuIG1vcmUg
ZWZmaWNpZW50IHRoYW4gdXNpbmcgYSByZWFsIHNldFRpbWVvdXQuCi0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBydW4ubGF0ZXIobXlDb250ZXh0LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAvLyBjb2RlIGhlcmUgd2lsbCBleGVjdXRlIHdpdGhpbiBh
IFJ1bkxvb3AgaW4gYWJvdXQgNTAwbXMgd2l0aCB0aGlzID09IG15Q29udGV4dAotICAgICAgICAg
ICAgICB9LCA1MDApOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9k
IGxhdGVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2Yg
bWV0aG9kIHRvIGludm9rZQotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30g
bWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgIElmIHlvdSBwYXNz
IGEgc3RyaW5nIGl0IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlCi0gICAgICAgICAgICAgICAgdGFy
Z2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KLSAgICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRp
bWVvdXQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSB3YWl0IE51bWJlciBvZiBtaWxs
aXNlY29uZHMgdG8gd2FpdC4KLSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBhIHN0cmlu
ZyB5b3UgY2FuIHVzZSB0byBjYW5jZWwgdGhlIHRpbWVyIGluCi0gICAgICAgICAgICAgICAgYHJ1
bi5jYW5jZWxgIGxhdGVyLgotICAgICAgICAgICAgKi8KLSAgICAgICAgcnVuLmxhdGVyID0gZnVu
Y3Rpb24odGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgIHJldHVybiBhcHBseShiYWNrYnVy
bmVyLCBiYWNrYnVybmVyLmxhdGVyLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBTY2hlZHVsZSBhIGZ1bmN0aW9uIHRvIHJ1biBvbmUgdGltZSBk
dXJpbmcgdGhlIGN1cnJlbnQgUnVuTG9vcC4gVGhpcyBpcyBlcXVpdmFsZW50Ci0gICAgICAgICAg
ICAgIHRvIGNhbGxpbmcgYHNjaGVkdWxlT25jZWAgd2l0aCB0aGUgImFjdGlvbnMiIHF1ZXVlLgot
Ci0gICAgICAgICAgICAgIEBtZXRob2Qgb25jZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gW3RhcmdldF0gVGhlIHRhcmdldCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICAgICAg
ICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9r
ZS4KLSAgICAgICAgICAgICAgICBJZiB5b3UgcGFzcyBhIHN0cmluZyBpdCB3aWxsIGJlIHJlc29s
dmVkIG9uIHRoZQotICAgICAgICAgICAgICAgIHRhcmdldCBhdCB0aGUgdGltZSB0aGUgbWV0aG9k
IGlzIGludm9rZWQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypdIE9wdGlv
bmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB0aW1lb3V0LgotICAgICAgICAgICAgICBAcmV0
dXJuIHtPYmplY3R9IFRpbWVyIGluZm9ybWF0aW9uIGZvciB1c2UgaW4gY2FuY2VsbGluZywgc2Vl
IGBydW4uY2FuY2VsYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1bi5vbmNlID0gZnVuY3Rp
b24odGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgIGNoZWNrQXV0b1J1bigpOwotICAgICAg
ICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBhcmdz
LnVuc2hpZnQoJ2FjdGlvbnMnKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBseShiYWNrYnVybmVy
LCBiYWNrYnVybmVyLnNjaGVkdWxlT25jZSwgYXJncyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIFNjaGVkdWxlcyBhIGZ1bmN0aW9uIHRvIHJ1biBvbmUgdGltZSBp
biBhIGdpdmVuIHF1ZXVlIG9mIHRoZSBjdXJyZW50IFJ1bkxvb3AuCi0gICAgICAgICAgICAgIENh
bGxpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBxdWV1ZS90YXJnZXQvbWV0aG9kIGNvbWJp
bmF0aW9uIHdpbGwgaGF2ZQotICAgICAgICAgICAgICBubyBlZmZlY3QgKHBhc3QgdGhlIGluaXRp
YWwgY2FsbCkuCi0KLSAgICAgICAgICAgICAgTm90ZSB0aGF0IGFsdGhvdWdoIHlvdSBjYW4gcGFz
cyBvcHRpb25hbCBhcmd1bWVudHMgdGhlc2Ugd2lsbCBub3QgYmUKLSAgICAgICAgICAgICAgY29u
c2lkZXJlZCB3aGVuIGxvb2tpbmcgZm9yIGR1cGxpY2F0ZXMuIE5ldyBhcmd1bWVudHMgd2lsbCBy
ZXBsYWNlIHByZXZpb3VzCi0gICAgICAgICAgICAgIGNhbGxzLgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHZhciBzYXlIaSA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnaGknKTsgfQotICAgICAg
ICAgICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ2FmdGVyUmVuZGVyJywgbXlDb250ZXh0LCBzYXlI
aSk7Ci0gICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCBteUNv
bnRleHQsIHNheUhpKTsKLSAgICAgICAgICAgICAgICAvLyBzYXlIaSB3aWxsIG9ubHkgYmUgZXhl
Y3V0ZWQgb25jZSwgaW4gdGhlIGFmdGVyUmVuZGVyIHF1ZXVlIG9mIHRoZSBSdW5Mb29wCi0gICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbHNvIG5v
dGUgdGhhdCBwYXNzaW5nIGFuIGFub255bW91cyBmdW5jdGlvbiB0byBgcnVuLnNjaGVkdWxlT25j
ZWAgd2lsbAotICAgICAgICAgICAgICBub3QgcHJldmVudCBhZGRpdGlvbmFsIGNhbGxzIHdpdGgg
YW4gaWRlbnRpY2FsIGFub255bW91cyBmdW5jdGlvbiBmcm9tCi0gICAgICAgICAgICAgIHNjaGVk
dWxpbmcgdGhlIGl0ZW1zIG11bHRpcGxlIHRpbWVzLCBlLmcuOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24gc2NoZWR1bGVJdCgpIHsKLSAgICAg
ICAgICAgICAgICBydW4uc2NoZWR1bGVPbmNlKCdhY3Rpb25zJywgbXlDb250ZXh0LCBmdW5jdGlv
bigpIHsgY29uc29sZS5sb2coIkNsb3N1cmUiKTsgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgc2NoZWR1bGVJdCgpOwotICAgICAgICAgICAgICBzY2hlZHVsZUl0KCk7Ci0gICAg
ICAgICAgICAgIC8vICJDbG9zdXJlIiB3aWxsIHByaW50IHR3aWNlLCBldmVuIHRob3VnaCB3ZSdy
ZSB1c2luZyBgcnVuLnNjaGVkdWxlT25jZWAsCi0gICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhl
IGZ1bmN0aW9uIHdlIHBhc3MgdG8gaXQgaXMgYW5vbnltb3VzIGFuZCB3b24ndCBtYXRjaCB0aGUK
LSAgICAgICAgICAgICAgLy8gcHJldmlvdXNseSBzY2hlZHVsZWQgb3BlcmF0aW9uLgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBdmFpbGFibGUgcXVldWVzLCBhbmQgdGhlaXIg
b3JkZXIsIGNhbiBiZSBmb3VuZCBhdCBgcnVuLnF1ZXVlc2AKLQotICAgICAgICAgICAgICBAbWV0
aG9kIHNjaGVkdWxlT25jZQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3F1ZXVlXSBU
aGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gc2NoZWR1bGUgYWdhaW5zdC4gRGVmYXVsdCBxdWV1ZXMg
YXJlICdzeW5jJyBhbmQgJ2FjdGlvbnMnLgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
W3RhcmdldF0gVGhlIHRhcmdldCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICAgICAgICAg
ICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4K
LSAgICAgICAgICAgICAgICBJZiB5b3UgcGFzcyBhIHN0cmluZyBpdCB3aWxsIGJlIHJlc29sdmVk
IG9uIHRoZQotICAgICAgICAgICAgICAgIHRhcmdldCBhdCB0aGUgdGltZSB0aGUgbWV0aG9kIGlz
IGludm9rZWQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypdIE9wdGlvbmFs
IGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB0aW1lb3V0LgotICAgICAgICAgICAgICBAcmV0dXJu
IHtPYmplY3R9IFRpbWVyIGluZm9ybWF0aW9uIGZvciB1c2UgaW4gY2FuY2VsbGluZywgc2VlIGBy
dW4uY2FuY2VsYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UgPSBm
dW5jdGlvbihxdWV1ZSwgdGFyZ2V0LCBtZXRob2QpIHsKLSAgICAgICAgICAgIGNoZWNrQXV0b1J1
bigpOwotICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2tidXJuZXIsIGJhY2tidXJuZXIuc2No
ZWR1bGVPbmNlLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBTY2hlZHVsZXMgYW4gaXRlbSB0byBydW4gZnJvbSB3aXRoaW4gYSBzZXBhcmF0ZSBy
dW4gbG9vcCwgYWZ0ZXIKLSAgICAgICAgICAgICAgY29udHJvbCBoYXMgYmVlbiByZXR1cm5lZCB0
byB0aGUgc3lzdGVtLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgICAgICAgICAg
ICBgcnVuLmxhdGVyYCB3aXRoIGEgd2FpdCB0aW1lIG9mIDFtcy4KLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHJ1bi5uZXh0KG15Q29udGV4dCwgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgLy8gY29kZSB0byBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dCBy
dW4gbG9vcCwKLSAgICAgICAgICAgICAgICAvLyB3aGljaCB3aWxsIGJlIHNjaGVkdWxlZCBhZnRl
ciB0aGUgY3VycmVudCBvbmUKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIE11bHRpcGxlIG9wZXJhdGlvbnMgc2NoZWR1bGVkIHdpdGggYHJ1bi5u
ZXh0YCB3aWxsIGNvYWxlc2NlCi0gICAgICAgICAgICAgIGludG8gdGhlIHNhbWUgbGF0ZXIgcnVu
IGxvb3AsIGFsb25nIHdpdGggYW55IG90aGVyIG9wZXJhdGlvbnMKLSAgICAgICAgICAgICAgc2No
ZWR1bGVkIGJ5IGBydW4ubGF0ZXJgIHRoYXQgZXhwaXJlIHJpZ2h0IGFyb3VuZCB0aGUgc2FtZQot
ICAgICAgICAgICAgICB0aW1lIHRoYXQgYHJ1bi5uZXh0YCBvcGVyYXRpb25zIHdpbGwgZmlyZS4K
LQotICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlcmUgYXJlIG9mdGVuIGFsdGVybmF0aXZlcyB0
byB1c2luZyBgcnVuLm5leHRgLgotICAgICAgICAgICAgICBGb3IgaW5zdGFuY2UsIGlmIHlvdSdk
IGxpa2UgdG8gc2NoZWR1bGUgYW4gb3BlcmF0aW9uIHRvIGhhcHBlbgotICAgICAgICAgICAgICBh
ZnRlciBhbGwgRE9NIGVsZW1lbnQgb3BlcmF0aW9ucyBoYXZlIGNvbXBsZXRlZCB3aXRoaW4gdGhl
IGN1cnJlbnQKLSAgICAgICAgICAgICAgcnVuIGxvb3AsIHlvdSBjYW4gbWFrZSB1c2Ugb2YgdGhl
IGBhZnRlclJlbmRlcmAgcnVuIGxvb3AgcXVldWUgKGFkZGVkCi0gICAgICAgICAgICAgIGJ5IHRo
ZSBgZW1iZXItdmlld3NgIHBhY2thZ2UsIGFsb25nIHdpdGggdGhlIHByZWNlZGluZyBgcmVuZGVy
YCBxdWV1ZQotICAgICAgICAgICAgICB3aGVyZSBhbGwgdGhlIERPTSBlbGVtZW50IG9wZXJhdGlv
bnMgaGFwcGVuKS4gRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIEFwcC5NeUNvbGxlY3Rpb25WaWV3ID0gRW1iZXIuQ29sbGVjdGlvblZpZXcuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICBkaWRJbnNlcnRFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ2FmdGVyUmVuZGVyJywgdGhpcywgJ3By
b2Nlc3NDaGlsZEVsZW1lbnRzJyk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg
ICBwcm9jZXNzQ2hpbGRFbGVtZW50czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAv
LyAuLi4gZG8gc29tZXRoaW5nIHdpdGggY29sbGVjdGlvblZpZXcncyBjaGlsZCB2aWV3Ci0gICAg
ICAgICAgICAgICAgICAvLyBlbGVtZW50cyBhZnRlciB0aGV5J3ZlIGZpbmlzaGVkIHJlbmRlcmlu
Zywgd2hpY2gKLSAgICAgICAgICAgICAgICAgIC8vIGNhbid0IGJlIGRvbmUgd2l0aGluIHRoZSBD
b2xsZWN0aW9uVmlldydzCi0gICAgICAgICAgICAgICAgICAvLyBgZGlkSW5zZXJ0RWxlbWVudGAg
aG9vayBiZWNhdXNlIHRoYXQgZ2V0cyBydW4KLSAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0
aGUgY2hpbGQgZWxlbWVudHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBET00uCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgT25lIGJlbmVmaXQgb2YgdGhlIGFib3ZlIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHVzaW5n
IGBydW4ubmV4dGAgaXMKLSAgICAgICAgICAgICAgdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHBl
cmZvcm0gRE9NL0NTUyBvcGVyYXRpb25zIGJlZm9yZSB1bnByb2Nlc3NlZAotICAgICAgICAgICAg
ICBlbGVtZW50cyBhcmUgcmVuZGVyZWQgdG8gdGhlIHNjcmVlbiwgd2hpY2ggbWF5IHByZXZlbnQg
ZmxpY2tlcmluZyBvcgotICAgICAgICAgICAgICBvdGhlciBhcnRpZmFjdHMgY2F1c2VkIGJ5IGRl
bGF5aW5nIHByb2Nlc3NpbmcgdW50aWwgYWZ0ZXIgcmVuZGVyaW5nLgotCi0gICAgICAgICAgICAg
IFRoZSBvdGhlciBtYWpvciBiZW5lZml0IHRvIHRoZSBhYm92ZSBhcHByb2FjaCBpcyB0aGF0IGBy
dW4ubmV4dGAKLSAgICAgICAgICAgICAgaW50cm9kdWNlcyBhbiBlbGVtZW50IG9mIG5vbi1kZXRl
cm1pbmlzbSwgd2hpY2ggY2FuIG1ha2UgdGhpbmdzIG11Y2gKLSAgICAgICAgICAgICAgaGFyZGVy
IHRvIHRlc3QsIGR1ZSB0byBpdHMgcmVsaWFuY2Ugb24gYHNldFRpbWVvdXRgOyBpdCdzIG11Y2gg
aGFyZGVyCi0gICAgICAgICAgICAgIHRvIGd1YXJhbnRlZSB0aGUgb3JkZXIgb2Ygc2NoZWR1bGVk
IG9wZXJhdGlvbnMgd2hlbiB0aGV5IGFyZSBzY2hlZHVsZWQKLSAgICAgICAgICAgICAgb3V0c2lk
ZSBvZiB0aGUgY3VycmVudCBydW4gbG9vcCwgaS5lLiB3aXRoIGBydW4ubmV4dGAuCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBuZXh0Ci0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGludm9rZQotICAgICAgICAgICAgICBAcGFyYW0ge0Z1
bmN0aW9ufFN0cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAg
ICAgIElmIHlvdSBwYXNzIGEgc3RyaW5nIGl0IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlCi0gICAg
ICAgICAgICAgICAgdGFyZ2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRv
IHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGlt
ZXIgaW5mb3JtYXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgcnVuLm5leHQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICAgICAgYXJncy5w
dXNoKDEpOwotICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2tidXJuZXIsIGJhY2tidXJuZXIu
bGF0ZXIsIGFyZ3MpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBD
YW5jZWxzIGEgc2NoZWR1bGVkIGl0ZW0uIE11c3QgYmUgYSB2YWx1ZSByZXR1cm5lZCBieSBgcnVu
LmxhdGVyKClgLAotICAgICAgICAgICAgICBgcnVuLm9uY2UoKWAsIGBydW4ubmV4dCgpYCwgYHJ1
bi5kZWJvdW5jZSgpYCwgb3IKLSAgICAgICAgICAgICAgYHJ1bi50aHJvdHRsZSgpYC4KLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBydW5OZXh0ID0gcnVu
Lm5leHQobXlDb250ZXh0LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyB3aWxsIG5v
dCBiZSBleGVjdXRlZAotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgcnVuLmNhbmNl
bChydW5OZXh0KTsKLQotICAgICAgICAgICAgICB2YXIgcnVuTGF0ZXIgPSBydW4ubGF0ZXIobXlD
b250ZXh0LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBiZSBleGVj
dXRlZAotICAgICAgICAgICAgICB9LCA1MDApOwotICAgICAgICAgICAgICBydW4uY2FuY2VsKHJ1
bkxhdGVyKTsKLQotICAgICAgICAgICAgICB2YXIgcnVuT25jZSA9IHJ1bi5vbmNlKG15Q29udGV4
dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYmUgZXhlY3V0ZWQK
LSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIHJ1bi5jYW5jZWwocnVuT25jZSk7Ci0K
LSAgICAgICAgICAgICAgdmFyIHRocm90dGxlID0gcnVuLnRocm90dGxlKG15Q29udGV4dCwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYmUgZXhlY3V0ZWQKLSAgICAg
ICAgICAgICAgfSwgMSwgZmFsc2UpOwotICAgICAgICAgICAgICBydW4uY2FuY2VsKHRocm90dGxl
KTsKLQotICAgICAgICAgICAgICB2YXIgZGVib3VuY2UgPSBydW4uZGVib3VuY2UobXlDb250ZXh0
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBiZSBleGVjdXRlZAot
ICAgICAgICAgICAgICB9LCAxKTsKLSAgICAgICAgICAgICAgcnVuLmNhbmNlbChkZWJvdW5jZSk7
Ci0KLSAgICAgICAgICAgICAgdmFyIGRlYm91bmNlSW1tZWRpYXRlID0gcnVuLmRlYm91bmNlKG15
Q29udGV4dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBleGVjdXRl
ZCBzaW5jZSB3ZSBwYXNzZWQgaW4gdHJ1ZSAoaW1tZWRpYXRlKQotICAgICAgICAgICAgICB9LCAx
MDAsIHRydWUpOwotICAgICAgICAgICAgICAvLyB0aGUgMTAwbXMgZGVsYXkgdW50aWwgdGhpcyBt
ZXRob2QgY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aWxsIGJlIGNhbmNlbGxlZAotICAgICAgICAgICAg
ICBydW4uY2FuY2VsKGRlYm91bmNlSW1tZWRpYXRlKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBjYW5jZWwKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IHRpbWVyIFRpbWVyIG9iamVjdCB0byBjYW5jZWwKLSAgICAgICAgICAgICAgQHJldHVybiB7Qm9v
bGVhbn0gdHJ1ZSBpZiBjYW5jZWxsZWQgb3IgZmFsc2UvdW5kZWZpbmVkIGlmIGl0IHdhc24ndCBm
b3VuZAotICAgICAgICAgICAgKi8KLSAgICAgICAgcnVuLmNhbmNlbCA9IGZ1bmN0aW9uKHRpbWVy
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2J1cm5lci5jYW5jZWwodGltZXIpOwotICAgICAg
ICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBEZWxheSBjYWxsaW5nIHRoZSB0YXJn
ZXQgbWV0aG9kIHVudGlsIHRoZSBkZWJvdW5jZSBwZXJpb2QgaGFzIGVsYXBzZWQKLSAgICAgICAg
ICAgICAgd2l0aCBubyBhZGRpdGlvbmFsIGRlYm91bmNlIGNhbGxzLiBJZiBgZGVib3VuY2VgIGlz
IGNhbGxlZCBhZ2FpbiBiZWZvcmUKLSAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCB0aW1lIGhh
cyBlbGFwc2VkLCB0aGUgdGltZXIgaXMgcmVzZXQgYW5kIHRoZSBlbnRpcmUgcGVyaW9kCi0gICAg
ICAgICAgICAgIG11c3QgcGFzcyBhZ2FpbiBiZWZvcmUgdGhlIHRhcmdldCBtZXRob2QgaXMgY2Fs
bGVkLgotCi0gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHdoZW4gYW4g
ZXZlbnQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcwotICAgICAgICAgICAgICBidXQgdGhl
IGFjdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSB3aGVuIHRoZSBldmVudCBpcyBkb25l
IGZpcmluZy4KLSAgICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpcyBmb3Igc2Nyb2xsIGV2
ZW50cyB3aGVyZSB5b3Ugb25seSB3YW50IHVwZGF0ZXMgdG8KLSAgICAgICAgICAgICAgaGFwcGVu
IG9uY2Ugc2Nyb2xsaW5nIGhhcyBjZWFzZWQuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgIHZhciBteUZ1bmMgPSBmdW5jdGlvbigpIHsgY29uc29sZS5sb2co
dGhpcy5uYW1lICsgJyByYW4uJyk7IH07Ci0gICAgICAgICAgICAgICAgdmFyIG15Q29udGV4dCA9
IHtuYW1lOiAnZGVib3VuY2UnfTsKLQotICAgICAgICAgICAgICAgIHJ1bi5kZWJvdW5jZShteUNv
bnRleHQsIG15RnVuYywgMTUwKTsKLQotICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiAxNTBt
cyBwYXNzZXMKLQotICAgICAgICAgICAgICAgIHJ1bi5kZWJvdW5jZShteUNvbnRleHQsIG15RnVu
YywgMTUwKTsKLQotICAgICAgICAgICAgICAgIC8vIDE1MG1zIHBhc3NlcwotICAgICAgICAgICAg
ICAgIC8vIG15RnVuYyBpcyBpbnZva2VkIHdpdGggY29udGV4dCBteUNvbnRleHQKLSAgICAgICAg
ICAgICAgICAvLyBjb25zb2xlIGxvZ3MgJ2RlYm91bmNlIHJhbi4nIG9uZSB0aW1lLgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbW1lZGlhdGUgYWxsb3dzIHlvdSB0byBydW4g
dGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5LCBidXQgZGVib3VuY2UKLSAgICAgICAgICAgICAgb3Ro
ZXIgY2FsbHMgZm9yIHRoaXMgZnVuY3Rpb24gdW50aWwgdGhlIHdhaXQgdGltZSBoYXMgZWxhcHNl
ZC4gSWYKLSAgICAgICAgICAgICAgYGRlYm91bmNlYCBpcyBjYWxsZWQgYWdhaW4gYmVmb3JlIHRo
ZSBzcGVjaWZpZWQgdGltZSBoYXMgZWxhcHNlZCwKLSAgICAgICAgICAgICAgdGhlIHRpbWVyIGlz
IHJlc2V0IGFuZCB0aGUgZW50aXJlIHBlcmlvZCBtdXN0IHBhc3MgYWdhaW4gYmVmb3JlCi0gICAg
ICAgICAgICAgIHRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBhZ2Fpbi4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgdmFyIG15RnVuYyA9IGZ1bmN0aW9uKCkg
eyBjb25zb2xlLmxvZyh0aGlzLm5hbWUgKyAnIHJhbi4nKTsgfTsKLSAgICAgICAgICAgICAgICB2
YXIgbXlDb250ZXh0ID0ge25hbWU6ICdkZWJvdW5jZSd9OwotCi0gICAgICAgICAgICAgICAgcnVu
LmRlYm91bmNlKG15Q29udGV4dCwgbXlGdW5jLCAxNTAsIHRydWUpOwotCi0gICAgICAgICAgICAg
ICAgLy8gY29uc29sZSBsb2dzICdkZWJvdW5jZSByYW4uJyBvbmUgdGltZSBpbW1lZGlhdGVseS4K
LSAgICAgICAgICAgICAgICAvLyAxMDBtcyBwYXNzZXMKLQotICAgICAgICAgICAgICAgIHJ1bi5k
ZWJvdW5jZShteUNvbnRleHQsIG15RnVuYywgMTUwLCB0cnVlKTsKLQotICAgICAgICAgICAgICAg
IC8vIDE1MG1zIHBhc3NlcyBhbmQgbm90aGluZyBlbHNlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29s
ZSBhbmQKLSAgICAgICAgICAgICAgICAvLyB0aGUgZGVib3VuY2VlIGlzIG5vIGxvbmdlciBiZWlu
ZyB3YXRjaGVkCi0KLSAgICAgICAgICAgICAgICBydW4uZGVib3VuY2UobXlDb250ZXh0LCBteUZ1
bmMsIDE1MCwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb25zb2xlIGxvZ3MgJ2RlYm91
bmNlIHJhbi4nIG9uZSB0aW1lIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgICAgIC8vIDE1MG1z
IHBhc3NlcyBhbmQgbm90aGluZyBlbHNlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZSBhbmQKLSAg
ICAgICAgICAgICAgICAvLyB0aGUgZGVib3VuY2VlIGlzIG5vIGxvbmdlciBiZWluZyB3YXRjaGVk
Ci0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBkZWJvdW5jZQot
ICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gdGFyZ2V0IG9mIG1ldGhvZCB0
byBpbnZva2UKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBU
aGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICAgICAgICAgICAgICBNYXkgYmUgYSBmdW5jdGlvbiBv
ciBhIHN0cmluZy4gSWYgeW91IHBhc3MgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICB0aGVuIGl0
IHdpbGwgYmUgbG9va2VkIHVwIG9uIHRoZSBwYXNzZWQgdGFyZ2V0LgotICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUg
dGltZW91dC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHdhaXQgTnVtYmVyIG9mIG1p
bGxpc2Vjb25kcyB0byB3YWl0LgotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IGltbWVk
aWF0ZSBUcmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUgbGVhZGluZyBpbnN0ZWFkCi0gICAgICAg
ICAgICAgICAgb2YgdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHdhaXQgaW50ZXJ2YWwuIERlZmF1
bHRzIHRvIGZhbHNlLgotICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gVGltZXIgaW5mb3Jt
YXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgcnVuLmRlYm91bmNlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXBwbHkoYmFja2J1cm5lciwgYmFja2J1cm5lci5kZWJvdW5jZSwgYXJndW1lbnRzKTsK
LSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRW5zdXJlIHRoYXQgdGhl
IHRhcmdldCBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkIG1vcmUgZnJlcXVlbnRseSB0aGFuCi0gICAg
ICAgICAgICAgIHRoZSBzcGVjaWZpZWQgc3BhY2luZyBwZXJpb2QuIFRoZSB0YXJnZXQgbWV0aG9k
IGlzIGNhbGxlZCBpbW1lZGlhdGVseS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgICAgdmFyIG15RnVuYyA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyh0aGlz
Lm5hbWUgKyAnIHJhbi4nKTsgfTsKLSAgICAgICAgICAgICAgICB2YXIgbXlDb250ZXh0ID0ge25h
bWU6ICd0aHJvdHRsZSd9OwotCi0gICAgICAgICAgICAgICAgcnVuLnRocm90dGxlKG15Q29udGV4
dCwgbXlGdW5jLCAxNTApOwotICAgICAgICAgICAgICAgIC8vIG15RnVuYyBpcyBpbnZva2VkIHdp
dGggY29udGV4dCBteUNvbnRleHQKLSAgICAgICAgICAgICAgICAvLyBjb25zb2xlIGxvZ3MgJ3Ro
cm90dGxlIHJhbi4nCi0KLSAgICAgICAgICAgICAgICAvLyA1MG1zIHBhc3NlcwotICAgICAgICAg
ICAgICAgIHJ1bi50aHJvdHRsZShteUNvbnRleHQsIG15RnVuYywgMTUwKTsKLQotICAgICAgICAg
ICAgICAgIC8vIDUwbXMgcGFzc2VzCi0gICAgICAgICAgICAgICAgcnVuLnRocm90dGxlKG15Q29u
dGV4dCwgbXlGdW5jLCAxNTApOwotCi0gICAgICAgICAgICAgICAgLy8gMTUwbXMgcGFzc2VzCi0g
ICAgICAgICAgICAgICAgcnVuLnRocm90dGxlKG15Q29udGV4dCwgbXlGdW5jLCAxNTApOwotICAg
ICAgICAgICAgICAgIC8vIG15RnVuYyBpcyBpbnZva2VkIHdpdGggY29udGV4dCBteUNvbnRleHQK
LSAgICAgICAgICAgICAgICAvLyBjb25zb2xlIGxvZ3MgJ3Rocm90dGxlIHJhbi4nCi0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgdGhyb3R0bGUKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8gaW52b2tlCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0
byBpbnZva2UuCi0gICAgICAgICAgICAgICAgTWF5IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmcu
IElmIHlvdSBwYXNzIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgdGhlbiBpdCB3aWxsIGJlIGxv
b2tlZCB1cCBvbiB0aGUgcGFzc2VkIHRhcmdldC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBzcGFjaW5nIE51bWJlciBvZiBtaWxsaXNlY29u
ZHMgdG8gc3BhY2Ugb3V0IHJlcXVlc3RzLgotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59
IGltbWVkaWF0ZSBUcmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUgbGVhZGluZyBpbnN0ZWFkCi0g
ICAgICAgICAgICAgICAgb2YgdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHdhaXQgaW50ZXJ2YWwu
IERlZmF1bHRzIHRvIHRydWUuCi0gICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBUaW1lciBp
bmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNhbmNlbGAuCi0gICAg
ICAgICAgICAqLwotICAgICAgICBydW4udGhyb3R0bGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIHJldHVybiBhcHBseShiYWNrYnVybmVyLCBiYWNrYnVybmVyLnRocm90dGxlLCBhcmd1bWVu
dHMpOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhbiBhdXRv
cnVuIGR1cmluZyB0ZXN0aW5nCi0gICAgICAgIGZ1bmN0aW9uIGNoZWNrQXV0b1J1bigpIHsKLSAg
ICAgICAgICAgIGlmICghcnVuLmN1cnJlbnRSdW5Mb29wKSB7Ci0gICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJZb3UgaGF2ZSB0dXJuZWQgb24gdGVzdGluZyBtb2RlLCB3aGljaCBkaXNhYmxl
ZCB0aGUgcnVuLWxvb3AncyBhdXRvcnVuLiBZb3Ugd2lsbCBuZWVkIHRvIHdyYXAgYW55IGNvZGUg
d2l0aCBhc3luY2hyb25vdXMgc2lkZS1lZmZlY3RzIGluIGFuIHJ1biIsICFFbWJlci50ZXN0aW5n
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBBZGQgYSBuZXcgbmFtZWQgcXVldWUgYWZ0ZXIgdGhlIHNwZWNpZmllZCBxdWV1ZS4KLQotICAg
ICAgICAgICAgICBUaGUgcXVldWUgdG8gYWRkIHdpbGwgb25seSBiZSBhZGRlZCBvbmNlLgotCi0g
ICAgICAgICAgICAgIEBtZXRob2QgX2FkZFF1ZXVlCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byBhZGQuCi0gICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBhZnRlciB0aGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gYWRkIGFmdGVyLgot
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgcnVuLl9hZGRR
dWV1ZSA9IGZ1bmN0aW9uKG5hbWUsIGFmdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXhPZi5j
YWxsKHJ1bi5xdWV1ZXMsIG5hbWUpID09PSAtMSkgewotICAgICAgICAgICAgICAgIHJ1bi5xdWV1
ZXMuc3BsaWNlKGluZGV4T2YuY2FsbChydW4ucXVldWVzLCBhZnRlcikgKyAxLCAwLCBuYW1lKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1l
dGFsL3NldF9wcm9wZXJ0aWVzIiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBjaGFuZ2VQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5
MV9fLmNoYW5nZVByb3BlcnRpZXM7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kyX18u
c2V0OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBTZXQgYSBsaXN0IG9mIHByb3BlcnRp
ZXMgb24gYW4gb2JqZWN0LiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBzZXQgaW5zaWRlCi0gICAgICAg
ICAgICAgIGEgc2luZ2xlIGBiZWdpblByb3BlcnR5Q2hhbmdlc2AgYW5kIGBlbmRQcm9wZXJ0eUNo
YW5nZXNgIGJhdGNoLCBzbwotICAgICAgICAgICAgICBvYnNlcnZlcnMgd2lsbCBiZSBidWZmZXJl
ZC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBhbk9i
amVjdCA9IEVtYmVyLk9iamVjdC5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBhbk9iamVjdC5z
ZXRQcm9wZXJ0aWVzKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICdTdGFubGV5JywKLSAg
ICAgICAgICAgICAgICBsYXN0TmFtZTogJ1N0dWFydCcsCi0gICAgICAgICAgICAgICAgYWdlOiAy
MQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBzZXRQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIEBwYXJhbSBzZWxmCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoCi0gICAgICAgICAgICAgIEByZXR1cm4gc2VsZgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9u
IHNldFByb3BlcnRpZXMoc2VsZiwgaGFzaCkgewotICAgICAgICAgICAgY2hhbmdlUHJvcGVydGll
cyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc2guaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNldChzZWxmLCBwcm9wLCBoYXNoW3Byb3BdKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVt
YmVyLW1ldGFsL3V0aWxzIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwv
cGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9u
KF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhw
b3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19k
ZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBwbGF0Zm9ybSA9IF9fZGVwZW5k
ZW5jeTJfXy5wbGF0Zm9ybTsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTJfXy5j
cmVhdGU7Ci0KLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kzX18uZm9yRWFjaDsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFByZXZpb3VzbHkgd2UgdXNlZCBg
RW1iZXIuJC51dWlkYCwgaG93ZXZlciBgJC51dWlkYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KLSAg
ICAgICAgICAgICAgalF1ZXJ5IG1hc3Rlci4gV2UnbGwganVzdCBib290c3RyYXAgb3VyIG93biB1
dWlkIG5vdy4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAcmV0dXJu
IHtOdW1iZXJ9IHRoZSB1dWlkCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgX3V1aWQgPSAw
OwotCi0gICAgICAgIGZ1bmN0aW9uIHV1aWQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKytfdXVp
ZDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnV1aWQgPSB1dWlkOyAvKioKLSAg
ICAgICAgICAgICAgUHJlZml4IHVzZWQgZm9yIGd1aWRzIHRocm91Z2ggb3V0IEVtYmVyLgotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAcHJvcGVydHkgR1VJRF9QUkVGSVgK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAg
ICAgICAgICAgICAgQGZpbmFsCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgR1VJRF9QUkVG
SVggPSAnZW1iZXInOwotCi0gICAgICAgIHZhciBvX2RlZmluZVByb3BlcnR5ID0gcGxhdGZvcm0u
ZGVmaW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBvX2NyZWF0ZSA9IGNyZWF0ZTsKLSAgICAgICAg
Ly8gVXNlZCBmb3IgZ3VpZCBnZW5lcmF0aW9uLi4uCi0gICAgICAgIHZhciBudW1iZXJDYWNoZSA9
IFtdOwotICAgICAgICB2YXIgc3RyaW5nQ2FjaGUgPSB7fTsKLSAgICAgICAgdmFyIE1BTkRBVE9S
WV9TRVRURVIgPSBFbWJlci5FTlYuTUFOREFUT1JZX1NFVFRFUjsKLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgQSB1bmlxdWUga2V5IHVzZWQgdG8gYXNzaWduIGd1aWRzIGFuZCBvdGhlciBw
cml2YXRlIG1ldGFkYXRhIHRvIG9iamVjdHMuCi0gICAgICAgICAgICAgIElmIHlvdSBpbnNwZWN0
IGFuIG9iamVjdCBpbiB5b3VyIGJyb3dzZXIgZGVidWdnZXIgeW91IHdpbGwgb2Z0ZW4gc2VlIHRo
ZXNlLgotICAgICAgICAgICAgICBUaGV5IGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KLQotICAgICAg
ICAgICAgICBPbiBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQsIHRoZXNlIHByb3BlcnRpZXMgYXJl
IGFkZGVkIHdpdGggZW51bWVyYXRpb24KLSAgICAgICAgICAgICAgZGlzYWJsZWQgc28gdGhleSB3
b24ndCBzaG93IHVwIHdoZW4geW91IGl0ZXJhdGUgb3ZlciB5b3VyIHByb3BlcnRpZXMuCi0KLSAg
ICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQHByb3BlcnR5IEdVSURfS0VZCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAg
ICAgICAgICAgIEBmaW5hbAotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIEdVSURfS0VZID0g
J19fZW1iZXInICsgKCArIG5ldyBEYXRlKCkpOwotCi0gICAgICAgIHZhciBHVUlEX0RFU0MgPSB7
Ci0gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCi0gICAgICAgICAgICBjb25maWd1cmFibGU6
IGZhbHNlLAotICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCi0gICAgICAgICAgICB2YWx1
ZTogbnVsbAotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBHZW5lcmF0
ZXMgYSBuZXcgZ3VpZCwgb3B0aW9uYWxseSBzYXZpbmcgdGhlIGd1aWQgdG8gdGhlIG9iamVjdCB0
aGF0IHlvdQotICAgICAgICAgICAgICBwYXNzIGluLiBZb3Ugd2lsbCByYXJlbHkgbmVlZCB0byB1
c2UgdGhpcyBtZXRob2QuIEluc3RlYWQgeW91IHNob3VsZAotICAgICAgICAgICAgICBjYWxsIGBF
bWJlci5ndWlkRm9yKG9iailgLCB3aGljaCByZXR1cm4gYW4gZXhpc3RpbmcgZ3VpZCBpZiBhdmFp
bGFibGUuCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBn
ZW5lcmF0ZUd1aWQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gW29ial0gT2JqZWN0IHRoZSBndWlkIHdpbGwgYmUgdXNlZCBmb3IuIElmIHBh
c3NlZCBpbiwgdGhlIGd1aWQgd2lsbAotICAgICAgICAgICAgICAgIGJlIHNhdmVkIG9uIHRoZSBv
YmplY3QgYW5kIHJldXNlZCB3aGVuZXZlciB5b3UgcGFzcyB0aGUgc2FtZSBvYmplY3QKLSAgICAg
ICAgICAgICAgICBhZ2Fpbi4KLQotICAgICAgICAgICAgICAgIElmIG5vIG9iamVjdCBpcyBwYXNz
ZWQsIGp1c3QgZ2VuZXJhdGUgYSBuZXcgZ3VpZC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IFtwcmVmaXhdIFByZWZpeCB0byBwbGFjZSBpbiBmcm9udCBvZiB0aGUgZ3VpZC4gVXNlZnVs
IHdoZW4geW91IHdhbnQgdG8KLSAgICAgICAgICAgICAgICBzZXBhcmF0ZSB0aGUgZ3VpZCBpbnRv
IHNlcGFyYXRlIG5hbWVzcGFjZXMuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gdGhl
IGd1aWQKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlR3VpZChvYmos
IHByZWZpeCkgewotICAgICAgICAgICAgaWYgKCFwcmVmaXgpIAotICAgICAgICAgICAgICAgIHBy
ZWZpeCA9IEdVSURfUFJFRklYOwotICAgICAgICAgICAgdmFyIHJldCA9IChwcmVmaXggKyB1dWlk
KCkpOwotICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgIGlmIChvYmpbR1VJ
RF9LRVldID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ialtHVUlEX0tFWV0gPSBy
ZXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgR1VJRF9E
RVNDLnZhbHVlID0gcmV0OwotICAgICAgICAgICAgICAgICAgICBvX2RlZmluZVByb3BlcnR5KG9i
aiwgR1VJRF9LRVksIEdVSURfREVTQyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLmdlbmVyYXRlR3VpZCA9IGdlbmVyYXRlR3VpZDsgLyoqCi0gICAgICAgICAgICAgIFJldHVy
bnMgYSB1bmlxdWUgaWQgZm9yIHRoZSBvYmplY3QuIElmIHRoZSBvYmplY3QgZG9lcyBub3QgeWV0
IGhhdmUgYSBndWlkLAotICAgICAgICAgICAgICBvbmUgd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4g
WW91IGNhbiBjYWxsIHRoaXMgb24gYW55IG9iamVjdCwKLSAgICAgICAgICAgICAgYEVtYmVyLk9i
amVjdGAtYmFzZWQgb3Igbm90LCBidXQgYmUgYXdhcmUgdGhhdCBpdCB3aWxsIGFkZCBhIGBfZ3Vp
ZGAKLSAgICAgICAgICAgICAgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBhbHNv
IHVzZSB0aGlzIG1ldGhvZCBvbiBET00gRWxlbWVudCBvYmplY3RzLgotCi0gICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgZ3VpZEZvcgotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogYW55IG9iamVjdCwg
c3RyaW5nLCBudW1iZXIsIEVsZW1lbnQsIG9yIHByaW1pdGl2ZQotICAgICAgICAgICAgICBAcmV0
dXJuIHtTdHJpbmd9IHRoZSB1bmlxdWUgZ3VpZCBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGd1aWRGb3Iob2JqKSB7Ci0KLSAgICAgICAgICAgIC8v
IHNwZWNpYWwgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0byBhZGQgYSBrZXkgdG8gb2JqZWN0
Ci0gICAgICAgICAgICBpZiAob2JqID09PSB1bmRlZmluZWQpIAotICAgICAgICAgICAgICAgIHJl
dHVybiAiKHVuZGVmaW5lZCkiOwotICAgICAgICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICIobnVsbCkiOwotCi0gICAgICAgICAgICB2YXIgcmV0OwotICAg
ICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqOwotCi0gICAgICAgICAgICAvLyBEb24ndCBh
bGxvdyBwcm90b3R5cGUgY2hhbmdlcyB0byBTdHJpbmcgZXRjLiB0byBjaGFuZ2UgdGhlIGd1aWRG
b3IKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSAnbnVtYmVy
JzoKLSAgICAgICAgICAgICAgICByZXQgPSBudW1iZXJDYWNoZVtvYmpdOwotICAgICAgICAgICAg
ICAgIGlmICghcmV0KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gbnVtYmVyQ2FjaGVbb2Jq
XSA9ICdudScgKyBvYmo7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLQotICAgICAgICAg
ICAgY2FzZSAnc3RyaW5nJzoKLSAgICAgICAgICAgICAgICByZXQgPSBzdHJpbmdDYWNoZVtvYmpd
OwotICAgICAgICAgICAgICAgIGlmICghcmV0KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g
c3RyaW5nQ2FjaGVbb2JqXSA9ICdzdCcgKyB1dWlkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJldDsKLQotICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG9iaiA/ICcodHJ1ZSknIDogJyhmYWxzZSknOwotCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChvYmpbR1VJRF9LRVldKSAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG9ialtHVUlEX0tFWV07Ci0gICAgICAgICAgICAgICAgaWYgKG9iaiA9PT0gT2JqZWN0
KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcoT2JqZWN0KSc7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9iaiA9PT0gQXJyYXkpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyhBcnJh
eSknOwotICAgICAgICAgICAgICAgIHJldCA9ICdlbWJlcicgKyB1dWlkKCk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAob2JqW0dVSURfS0VZXSA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAg
ICBvYmpbR1VJRF9LRVldID0gcmV0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdVSURfREVTQy52YWx1ZSA9IHJldDsKLSAgICAgICAgICAgICAgICAgICAg
b19kZWZpbmVQcm9wZXJ0eShvYmosIEdVSURfS0VZLCBHVUlEX0RFU0MpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZ3VpZEZvciA9IGd1aWRGb3I7IC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAg
ICAgLy8gTUVUQQotICAgICAgICAvLwotCi0gICAgICAgIHZhciBNRVRBX0RFU0MgPSB7Ci0gICAg
ICAgICAgICB3cml0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2Us
Ci0gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIHZhbHVlOiBudWxs
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBrZXkgdXNlZCB0
byBzdG9yZSBtZXRhIGluZm9ybWF0aW9uIG9uIG9iamVjdCBmb3IgcHJvcGVydHkgb2JzZXJ2aW5n
LgotCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBNRVRBX0tFWQotICAgICAgICAgICAgICBAZm9y
IEVtYmVyCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBmaW5hbAotICAg
ICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBNRVRB
X0tFWSA9ICdfX2VtYmVyX21ldGFfXyc7Ci0KLSAgICAgICAgdmFyIGlzRGVmaW5lUHJvcGVydHlT
aW11bGF0ZWQgPSBwbGF0Zm9ybS5kZWZpbmVQcm9wZXJ0eS5pc1NpbXVsYXRlZDsKLQotICAgICAg
ICBmdW5jdGlvbiBNZXRhKG9iaikgewotICAgICAgICAgICAgdGhpcy5kZXNjcyA9IHt9OwotICAg
ICAgICAgICAgdGhpcy53YXRjaGluZyA9IHt9OwotICAgICAgICAgICAgdGhpcy5jYWNoZSA9IHt9
OwotICAgICAgICAgICAgdGhpcy5jYWNoZU1ldGEgPSB7fTsKLSAgICAgICAgICAgIHRoaXMuc291
cmNlID0gb2JqOwotICAgICAgICB9Ci0KLSAgICAgICAgTWV0YS5wcm90b3R5cGUgPSB7Ci0gICAg
ICAgICAgICBkZXNjczogbnVsbCwKLSAgICAgICAgICAgIGRlcHM6IG51bGwsCi0gICAgICAgICAg
ICB3YXRjaGluZzogbnVsbCwKLSAgICAgICAgICAgIGxpc3RlbmVyczogbnVsbCwKLSAgICAgICAg
ICAgIGNhY2hlOiBudWxsLAotICAgICAgICAgICAgY2FjaGVNZXRhOiBudWxsLAotICAgICAgICAg
ICAgc291cmNlOiBudWxsLAotICAgICAgICAgICAgbWl4aW5zOiBudWxsLAotICAgICAgICAgICAg
YmluZGluZ3M6IG51bGwsCi0gICAgICAgICAgICBjaGFpbnM6IG51bGwsCi0gICAgICAgICAgICBj
aGFpbldhdGNoZXJzOiBudWxsLAotICAgICAgICAgICAgdmFsdWVzOiBudWxsLAotICAgICAgICAg
ICAgcHJvdG86IG51bGwKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoaXNEZWZpbmVQcm9wZXJ0
eVNpbXVsYXRlZCkgewotICAgICAgICAgICAgLy8gb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCBlbnVtZXJhYmxlIGZhbHNlCi0gICAgICAgICAgICAvLyBtYWtlIG1ldGEgZmFpbCBqUXVl
cnkuaXNQbGFpbk9iamVjdCgpIHRvIGhpZGUgZnJvbQotICAgICAgICAgICAgLy8galF1ZXJ5LmV4
dGVuZCgpIGJ5IGhhdmluZyBhIHByb3BlcnR5IHRoYXQgZmFpbHMKLSAgICAgICAgICAgIC8vIGhh
c093blByb3BlcnR5IGNoZWNrLgotICAgICAgICAgICAgTWV0YS5wcm90b3R5cGUuX19wcmV2ZW50
UGxhaW5PYmplY3RfXyA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFdpdGhvdXQgbm9uLWVudW1l
cmFibGUgcHJvcGVydGllcywgbWV0YSBvYmplY3RzIHdpbGwgYmUgb3V0cHV0IGluIEpTT04KLSAg
ICAgICAgICAgIC8vIHVubGVzcyBleHBsaWNpdGx5IHN1cHByZXNzZWQKLSAgICAgICAgICAgIE1l
dGEucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHt9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gUGxhY2Vob2xkZXIgZm9yIG5vbi13cml0YWJsZSBtZXRhcy4KLSAgICAgICAgdmFyIEVN
UFRZX01FVEEgPSBuZXcgTWV0YShudWxsKTsKLQotICAgICAgICBpZiAoTUFOREFUT1JZX1NFVFRF
UikgewotICAgICAgICAgICAgRU1QVFlfTUVUQS52YWx1ZXMgPSB7fTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG1ldGEgaGFzaCBmb3IgYW4g
b2JqZWN0LiBJZiBgd3JpdGFibGVgIGlzIHRydWUgZW5zdXJlcyB0aGUKLSAgICAgICAgICAgICAg
aGFzaCBpcyB3cml0YWJsZSBmb3IgdGhpcyBvYmplY3QgYXMgd2VsbC4KLQotICAgICAgICAgICAg
ICBUaGUgbWV0YSBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgY29tcHV0ZWQgcHJv
cGVydHkgZGVzY3JpcHRvcnMgYXMKLSAgICAgICAgICAgICAgd2VsbCBhcyBhbnkgd2F0Y2hlZCBw
cm9wZXJ0aWVzIGFuZCBvdGhlciBpbmZvcm1hdGlvbi4gWW91IGdlbmVyYWxseSB3aWxsCi0gICAg
ICAgICAgICAgIG5vdCBhY2Nlc3MgdGhpcyBpbmZvcm1hdGlvbiBkaXJlY3RseSBidXQgaW5zdGVh
ZCB3b3JrIHdpdGggaGlnaGVyIGxldmVsCi0gICAgICAgICAgICAgIG1ldGhvZHMgdGhhdCBtYW5p
cHVsYXRlIHRoaXMgaGFzaCBpbmRpcmVjdGx5LgotCi0gICAgICAgICAgICAgIEBtZXRob2QgbWV0
YQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJldHJpZXZlIG1l
dGEgZm9yCi0gICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gW3dyaXRhYmxlPXRydWVdIFBh
c3MgYGZhbHNlYCBpZiB5b3UgZG8gbm90IGludGVuZCB0byBtb2RpZnkKLSAgICAgICAgICAgICAg
ICB0aGUgbWV0YSBoYXNoLCBhbGxvd2luZyB0aGUgbWV0aG9kIHRvIGF2b2lkIG1ha2luZyBhbiB1
bm5lY2Vzc2FyeSBjb3B5LgotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBtZXRh
IGhhc2ggZm9yIGFuIG9iamVjdAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWV0
YShvYmosIHdyaXRhYmxlKSB7Ci0KLSAgICAgICAgICAgIHZhciByZXQgPSBvYmpbTUVUQV9LRVld
OwotICAgICAgICAgICAgaWYgKHdyaXRhYmxlID09PSBmYWxzZSkgCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJldCB8fCBFTVBUWV9NRVRBOwotCi0gICAgICAgICAgICBpZiAoIXJldCkgewotICAg
ICAgICAgICAgICAgIGlmICghaXNEZWZpbmVQcm9wZXJ0eVNpbXVsYXRlZCkgCi0gICAgICAgICAg
ICAgICAgICAgIG9fZGVmaW5lUHJvcGVydHkob2JqLCBNRVRBX0tFWSwgTUVUQV9ERVNDKTsKLQot
ICAgICAgICAgICAgICAgIHJldCA9IG5ldyBNZXRhKG9iaik7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoTUFOREFUT1JZX1NFVFRFUikgewotICAgICAgICAgICAgICAgICAgICByZXQudmFsdWVzID0g
e307Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb2JqW01FVEFfS0VZXSA9
IHJldDsKLQotICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFs
bHkgdHJ5IHRvIGNyZWF0ZSBjb25zdHJ1Y3RvciBsaWtlIGRlc2MKLSAgICAgICAgICAgICAgICBy
ZXQuZGVzY3MuY29uc3RydWN0b3IgPSBudWxsOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHJl
dC5zb3VyY2UgIT09IG9iaikgewotICAgICAgICAgICAgICAgIGlmICghaXNEZWZpbmVQcm9wZXJ0
eVNpbXVsYXRlZCkgCi0gICAgICAgICAgICAgICAgICAgIG9fZGVmaW5lUHJvcGVydHkob2JqLCBN
RVRBX0tFWSwgTUVUQV9ERVNDKTsKLQotICAgICAgICAgICAgICAgICAgICByZXQgPSBvX2NyZWF0
ZShyZXQpOwotICAgICAgICAgICAgICAgICAgICByZXQuZGVzY3MgPSBvX2NyZWF0ZShyZXQuZGVz
Y3MpOwotICAgICAgICAgICAgICAgICAgICByZXQud2F0Y2hpbmcgPSBvX2NyZWF0ZShyZXQud2F0
Y2hpbmcpOwotICAgICAgICAgICAgICAgICAgICByZXQuY2FjaGUgPSB7fTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0LmNhY2hlTWV0YSA9IHt9OwotICAgICAgICAgICAgICAgICAgICByZXQuc291
cmNlID0gb2JqOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChNQU5EQVRPUllfU0VUVEVSKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQudmFsdWVzID0gb19jcmVhdGUocmV0LnZhbHVl
cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBvYmpbTUVU
QV9LRVldID0gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldE1ldGEob2JqLCBwcm9wZXJ0eSkgewotICAg
ICAgICAgICAgdmFyIF9tZXRhID0gbWV0YShvYmosIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVy
biBfbWV0YVtwcm9wZXJ0eV07Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5nZXRN
ZXRhID0gZ2V0TWV0YTsKLSAgICAgICAgZnVuY3Rpb24gc2V0TWV0YShvYmosIHByb3BlcnR5LCB2
YWx1ZSkgewotICAgICAgICAgICAgdmFyIF9tZXRhID0gbWV0YShvYmosIHRydWUpOwotICAgICAg
ICAgICAgX21ldGFbcHJvcGVydHldID0gdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5zZXRNZXRhID0gc2V0TWV0YTsgLyoq
Ci0gICAgICAgICAgICAgIEBkZXByZWNhdGVkCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgSW4gb3JkZXIgdG8gc3RvcmUgZGVmYXVsdHMgZm9yIGEgY2xhc3MsIGEgcHJv
dG90eXBlIG1heSBuZWVkIHRvIGNyZWF0ZQotICAgICAgICAgICAgICBhIGRlZmF1bHQgbWV0YSBv
YmplY3QsIHdoaWNoIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGFueSBvYmplY3RzIGluc3RhbnRpYXRl
ZAotICAgICAgICAgICAgICBmcm9tIHRoZSBjbGFzcydzIGNvbnN0cnVjdG9yLgotCi0gICAgICAg
ICAgICAgIEhvd2V2ZXIsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoYXQgbWV0YSBvYmplY3QgYXJlIG9u
bHkgc2hhbGxvdy1jbG9uZWQsCi0gICAgICAgICAgICAgIHNvIGlmIGEgcHJvcGVydHkgaXMgYSBo
YXNoIChsaWtlIHRoZSBldmVudCBzeXN0ZW0ncyBgbGlzdGVuZXJzYCBoYXNoKSwKLSAgICAgICAg
ICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBv
ZiB0aGF0IGNsYXNzLgotCi0gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGFsbG93cyBleHRlbnNp
b25zIHRvIGRlZXBseSBjbG9uZSBhIHNlcmllcyBvZiBuZXN0ZWQgaGFzaGVzIG9yCi0gICAgICAg
ICAgICAgIG90aGVyIGNvbXBsZXggb2JqZWN0cy4gRm9yIGluc3RhbmNlLCB0aGUgZXZlbnQgc3lz
dGVtIG1pZ2h0IHBhc3MKLSAgICAgICAgICAgICAgYFsnbGlzdGVuZXJzJywgJ2ZvbzpjaGFuZ2Un
LCAnZW1iZXIxNTcnXWAgdG8gYHByZXBhcmVNZXRhUGF0aGAsIHdoaWNoIHdpbGwKLSAgICAgICAg
ICAgICAgd2FsayBkb3duIHRoZSBrZXlzIHByb3ZpZGVkLgotCi0gICAgICAgICAgICAgIEZvciBl
YWNoIGtleSwgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gSWYgaXQg
YWxyZWFkeQotICAgICAgICAgICAgICBleGlzdHMgYW5kIGl0IHdhcyBpbmhlcml0ZWQgZnJvbSBp
dHMgY29uc3RydWN0b3IsIHRoZSBjb25zdHJ1Y3RvcidzCi0gICAgICAgICAgICAgIGtleSBpcyBj
bG9uZWQuCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBhc3MgZmFsc2UgZm9yIGB3cml0
YWJsZWAsIHdoaWNoIHdpbGwgc2ltcGx5IHJldHVybgotICAgICAgICAgICAgICB1bmRlZmluZWQg
aWYgYHByZXBhcmVNZXRhUGF0aGAgZGlzY292ZXJzIGFueSBwYXJ0IG9mIHRoZSBwYXRoIHRoYXQK
LSAgICAgICAgICAgICAgc2hhcmVkIG9yIHVuZGVmaW5lZC4KLQotICAgICAgICAgICAgICBAbWV0
aG9kIG1ldGFQYXRoCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHdob3NlIG1ldGEgd2UgYXJlIGV4YW1pbmluZwot
ICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBwYXRoIEFuIGFycmF5IG9mIGtleXMgdG8gd2Fs
ayBkb3duCi0gICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gd3JpdGFibGUgd2hldGhlciBv
ciBub3QgdG8gY3JlYXRlIGEgbmV3IG1ldGEKLSAgICAgICAgICAgICAgICAob3IgbWV0YSBwcm9w
ZXJ0eSkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3Qgb3IgaWYgaXQncwotICAgICAgICAg
ICAgICAgIHNoYXJlZCB3aXRoIGl0cyBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gbWV0YVBhdGgob2JqLCBwYXRoLCB3cml0YWJsZSkgewotICAgICAgICAgICAg
RW1iZXIuZGVwcmVjYXRlKCJFbWJlci5tZXRhUGF0aCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJl
IHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFzZXMuIik7Ci0gICAgICAgICAgICB2YXIgX21ldGEg
PSBtZXRhKG9iaiwgd3JpdGFibGUpLCBrZXlOYW1lLCB2YWx1ZTsKLQotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBwYXRoLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAg
ICAgIGtleU5hbWUgPSBwYXRoW2ldOwotICAgICAgICAgICAgICAgIHZhbHVlID0gX21ldGFba2V5
TmFtZV07Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghd3JpdGFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBfbWV0YVtrZXlOYW1lXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fZW1iZXJfc291
cmNlX186IG9iaiAKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlLl9fZW1iZXJfc291cmNlX18gIT09IG9iaikgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXdyaXRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gX21ldGFba2V5TmFtZV0gPSBvX2NyZWF0ZSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhbHVlLl9fZW1iZXJfc291cmNlX18gPSBvYmo7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgX21ldGEgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubWV0YVBhdGgg
PSBtZXRhUGF0aDsgLyoqCi0gICAgICAgICAgICAgIFdyYXBzIHRoZSBwYXNzZWQgZnVuY3Rpb24g
c28gdGhhdCBgdGhpcy5fc3VwZXJgIHdpbGwgcG9pbnQgdG8gdGhlIHN1cGVyRnVuYwotICAgICAg
ICAgICAgICB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIHRoZSBwcmltaXRp
dmUgd2UgdXNlIHRvIGltcGxlbWVudAotICAgICAgICAgICAgICBjYWxscyB0byBzdXBlci4KLQot
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHdyYXAKLSAgICAg
ICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5j
IFRoZSBmdW5jdGlvbiB0byBjYWxsCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHN1
cGVyRnVuYyBUaGUgc3VwZXIgZnVuY3Rpb24uCi0gICAgICAgICAgICAgIEByZXR1cm4ge0Z1bmN0
aW9ufSB3cmFwcGVkIGZ1bmN0aW9uLgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
d3JhcChmdW5jLCBzdXBlckZ1bmMpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIHN1cGVyV3JhcHBl
cigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0LCBzdXAgPSB0aGlzICYmIHRoaXMuX19uZXh0
U3VwZXI7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fX25leHRTdXBlciA9IHN1cGVyRnVuYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0ID0gYXBwbHkodGhpcywgZnVuYywgYXJndW1lbnRzKTsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9fbmV4dFN1cGVyID0g
c3VwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzdXBlcldyYXBwZXIud3JhcHBlZEZ1bmN0aW9uID0g
ZnVuYzsKLSAgICAgICAgICAgIHN1cGVyV3JhcHBlci53cmFwcGVkRnVuY3Rpb24uX19lbWJlcl9h
cml0eV9fID0gZnVuYy5sZW5ndGg7Ci0gICAgICAgICAgICBzdXBlcldyYXBwZXIuX19lbWJlcl9v
YnNlcnZlc19fID0gZnVuYy5fX2VtYmVyX29ic2VydmVzX187Ci0gICAgICAgICAgICBzdXBlcldy
YXBwZXIuX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fID0gZnVuYy5fX2VtYmVyX29ic2VydmVzQmVm
b3JlX187Ci0gICAgICAgICAgICBzdXBlcldyYXBwZXIuX19lbWJlcl9saXN0ZW5zX18gPSBmdW5j
Ll9fZW1iZXJfbGlzdGVuc19fOwotCi0gICAgICAgICAgICByZXR1cm4gc3VwZXJXcmFwcGVyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ud3JhcCA9IHdyYXA7Ci0gICAgICAgIHZh
ciBFbWJlckFycmF5OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIHRydWUg
aWYgdGhlIHBhc3NlZCBvYmplY3QgaXMgYW4gYXJyYXkgb3IgQXJyYXktbGlrZS4KLQotICAgICAg
ICAgICAgICBFbWJlciBBcnJheSBQcm90b2NvbDoKLQotICAgICAgICAgICAgICAgIC0gdGhlIG9i
amVjdCBoYXMgYW4gb2JqZWN0QXQgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAtIHRoZSBvYmpl
Y3QgaXMgYSBuYXRpdmUgQXJyYXkKLSAgICAgICAgICAgICAgICAtIHRoZSBvYmplY3QgaXMgYW4g
T2JqZWN0LCBhbmQgaGFzIGEgbGVuZ3RoIHByb3BlcnR5Ci0KLSAgICAgICAgICAgICAgVW5saWtl
IGBFbWJlci50eXBlT2ZgIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBldmVuIGlmIHRoZSBwYXNz
ZWQgb2JqZWN0IGlzCi0gICAgICAgICAgICAgIG5vdCBmb3JtYWxseSBhcnJheSBidXQgYXBwZWFy
cyB0byBiZSBhcnJheS1saWtlIChpLmUuIGltcGxlbWVudHMgYEVtYmVyLkFycmF5YCkKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmlzQXJyYXkoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmYWxzZQotICAgICAg
ICAgICAgICBFbWJlci5pc0FycmF5KFtdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc0FycmF5KEVtYmVyLkFycmF5
UHJveHkuY3JlYXRlKHsgY29udGVudDogW10gfSkpOyAgLy8gdHJ1ZQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGlzQXJyYXkKLSAgICAgICAgICAgICAgQGZvciBF
bWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gdGVz
dAotICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBwYXNzZWQgb2Jq
ZWN0IGlzIGFuIGFycmF5IG9yIEFycmF5LWxpa2UKLSAgICAgICAgICAgICovCi0gICAgICAgIC8v
IEVTNlRPRE86IE1vdmUgdXAgdG8gcnVudGltZT8gVGhpcyBpcyBvbmx5IHVzZSBpbiBlbWJlci1t
ZXRhbCBieSBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzCi0gICAgICAgIGZ1bmN0aW9uIGlzQXJyYXko
b2JqKSB7Ci0gICAgICAgICAgICB2YXIgbW9kdWxlUGF0aCwgdHlwZTsKLQotICAgICAgICAgICAg
aWYgKHR5cGVvZiBFbWJlckFycmF5ID09PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAg
IG1vZHVsZVBhdGggPSAnZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXknOwotICAgICAgICAgICAg
ICAgIGlmIChFbWJlci5fX2xvYWRlci5yZWdpc3RyeVttb2R1bGVQYXRoXSkgewotICAgICAgICAg
ICAgICAgICAgICBFbWJlckFycmF5ID0gRW1iZXIuX19sb2FkZXIucmVxdWlyZShtb2R1bGVQYXRo
KVsnZGVmYXVsdCddOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFvYmogfHwgb2JqLnNldEludGVydmFsKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkg
JiYgQXJyYXkuaXNBcnJheShvYmopKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoRW1iZXJBcnJheSAmJiBFbWJlckFycmF5LmRl
dGVjdChvYmopKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHR5cGUgPSB0eXBlT2Yob2JqKTsKLSAgICAgICAgICAgIGlmICgnYXJy
YXknID09PSB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkgJiYgJ29iamVj
dCcgPT09IHR5cGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBGb3JjZXMgdGhlIHBhc3NlZCBvYmplY3QgdG8gYmUgcGFydCBvZiBhbiBh
cnJheS4gSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5Ci0gICAgICAgICAgICAgIGFuIGFycmF5IG9y
IGFycmF5LWxpa2UsIHJldHVybnMgdGhlIG9iamVjdC4gT3RoZXJ3aXNlIGFkZHMgdGhlIG9iamVj
dCB0bwotICAgICAgICAgICAgICBhbiBhcnJheS4gSWYgb2JqIGlzIGBudWxsYCBvciBgdW5kZWZp
bmVkYCwgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIEVtYmVyLm1ha2VBcnJheSgpOyAgICAgICAgICAgIC8vIFtdCi0g
ICAgICAgICAgICAgIEVtYmVyLm1ha2VBcnJheShudWxsKTsgICAgICAgIC8vIFtdCi0gICAgICAg
ICAgICAgIEVtYmVyLm1ha2VBcnJheSh1bmRlZmluZWQpOyAgIC8vIFtdCi0gICAgICAgICAgICAg
IEVtYmVyLm1ha2VBcnJheSgnbGluZHNheScpOyAgIC8vIFsnbGluZHNheSddCi0gICAgICAgICAg
ICAgIEVtYmVyLm1ha2VBcnJheShbMSwgMiwgNDJdKTsgIC8vIFsxLCAyLCA0Ml0KLQotICAgICAg
ICAgICAgICB2YXIgY29udHJvbGxlciA9IEVtYmVyLkFycmF5UHJveHkuY3JlYXRlKHsgY29udGVu
dDogW10gfSk7Ci0KLSAgICAgICAgICAgICAgRW1iZXIubWFrZUFycmF5KGNvbnRyb2xsZXIpID09
PSBjb250cm9sbGVyOyAgLy8gdHJ1ZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBAbWV0aG9kIG1ha2VBcnJheQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogdGhlIG9iamVjdAotICAgICAgICAgICAgICBAcmV0dXJu
IHtBcnJheX0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShvYmop
IHsKLSAgICAgICAgICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gaXNBcnJheShvYmopID8gb2JqIDogW29ial07Ci0gICAgICAgIH0KLQotICAgICAgICBf
X2V4cG9ydHNfXy5tYWtlQXJyYXkgPSBtYWtlQXJyYXk7IC8qKgotICAgICAgICAgICAgICBDaGVj
a3MgdG8gc2VlIGlmIHRoZSBgbWV0aG9kTmFtZWAgZXhpc3RzIG9uIHRoZSBgb2JqYC4KLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBmb28gPSB7IGJhcjog
RW1iZXIuSywgYmF6OiBudWxsIH07Ci0KLSAgICAgICAgICAgICAgRW1iZXIuY2FuSW52b2tlKGZv
bywgJ2JhcicpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIEVtYmVyLmNhbkludm9rZShmb28sICdi
YXonKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgRW1iZXIuY2FuSW52b2tlKGZvbywgJ2JhdCcp
OyAvLyBmYWxzZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNh
bkludm9rZQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIG1ldGhvZAotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2hlY2sg
Zm9yCi0gICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBjYW5JbnZva2Uob2JqLCBtZXRob2ROYW1lKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gISEob2JqICYmIHR5cGVvZiBvYmpbbWV0aG9kTmFtZV0gPT09ICdmdW5jdGlvbicpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENoZWNrcyB0byBzZWUgaWYg
dGhlIGBtZXRob2ROYW1lYCBleGlzdHMgb24gdGhlIGBvYmpgLAotICAgICAgICAgICAgICBhbmQg
aWYgaXQgZG9lcywgaW52b2tlcyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgcGFzc2VkLgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSgn
MDMvMTUvMjAxMycpOwotCi0gICAgICAgICAgICAgIEVtYmVyLnRyeUludm9rZShkLCAnZ2V0VGlt
ZScpOyAgICAgICAgICAgICAgLy8gMTM2MzMyMDAwMDAwMAotICAgICAgICAgICAgICBFbWJlci50
cnlJbnZva2UoZCwgJ3NldEZ1bGxZZWFyJywgWzIwMTRdKTsgIC8vIDEzOTQ4NTYwMDAwMDAKLSAg
ICAgICAgICAgICAgRW1iZXIudHJ5SW52b2tlKGQsICdub1N1Y2hNZXRob2QnLCBbMjAxNF0pOyAv
LyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCB0
cnlJbnZva2UKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0g
e09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSBtZXRob2QKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG1ldGhvZCBuYW1lIHRvIGNoZWNr
IGZvcgotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0
byBwYXNzIHRvIHRoZSBtZXRob2QKLSAgICAgICAgICAgICAgQHJldHVybiB7Kn0gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGUgaW52b2tlZCBtZXRob2Qgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBi
ZSBpbnZva2VkCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB0cnlJbnZva2Uob2Jq
LCBtZXRob2ROYW1lLCBhcmdzKSB7Ci0gICAgICAgICAgICBpZiAoY2FuSW52b2tlKG9iaiwgbWV0
aG9kTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJncyA/IGFwcGx5U3RyKG9iaiwg
bWV0aG9kTmFtZSwgYXJncykgOiBhcHBseVN0cihvYmosIG1ldGhvZE5hbWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18udHJ5SW52b2tlID0gdHJ5SW52
b2tlOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9lbWJlci5qcy9wdWxsLzE2MTcKLSAg
ICAgICAgdmFyIG5lZWRzRmluYWxseUZpeCA9IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZh
ciBjb3VudCA9IDA7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRyeSB7fSBm
aW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCduZWVkc0ZpbmFsbHlGaXhUZXN0Jyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KLQotICAgICAgICAgICAgcmV0dXJuIGNv
dW50ICE9PSAxOwotICAgICAgICB9KSgpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBQ
cm92aWRlcyB0cnkvZmluYWxseSBmdW5jdGlvbmFsaXR5LCB3aGlsZSB3b3JraW5nCi0gICAgICAg
ICAgICAgIGFyb3VuZCBTYWZhcmkncyBkb3VibGUgZmluYWxseSBidWcuCi0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgdHJ5YWJsZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHNvbWVSZXNvdXJjZS5sb2NrKCk7Ci0gICAgICAgICAgICAgICAg
cnVuQ2FsbGJhY2soKTsgLy8gTWF5IHRocm93IGVycm9yLgotICAgICAgICAgICAgICB9OwotCi0g
ICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBzb21lUmVzb3VyY2UudW5sb2NrKCk7Ci0gICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
ICAgRW1iZXIudHJ5RmluYWxseSh0cnlhYmxlLCBmaW5hbGl6ZXIpOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHRyeUZpbmFsbHkKLSAgICAgICAgICAgICAgQGZv
ciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSB0cnlhYmxlIFRoZSBmdW5j
dGlvbiB0byBydW4gdGhlIHRyeSBjYWxsYmFjawotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0
aW9ufSBmaW5hbGl6ZXIgVGhlIGZ1bmN0aW9uIHRvIHJ1biB0aGUgZmluYWxseSBjYWxsYmFjawot
ICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW2JpbmRpbmddIFRoZSBvcHRpb25hbCBjYWxs
aW5nIG9iamVjdC4gRGVmYXVsdHMgdG8gJ3RoaXMnCi0gICAgICAgICAgICAgIEByZXR1cm4geyp9
IFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHRoYXQgb2YgdGhlIGZpbmFsaXplciwKLSAgICAgICAg
ICAgICAgdW5sZXNzIHRoYXQgdmFsdWUgaXMgdW5kZWZpbmVkLCBpbiB3aGljaCBjYXNlIGl0IGlz
IHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgICAgICAgb2YgdGhlIHRyeWFibGUKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgdmFyIHRyeUZpbmFsbHk7Ci0gICAgICAgIGlmIChuZWVkc0ZpbmFs
bHlGaXgpIHsKLSAgICAgICAgICAgIHRyeUZpbmFsbHkgPSBmdW5jdGlvbih0cnlhYmxlLCBmaW5h
bGl6ZXIsIGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0LCBmaW5hbFJlc3Vs
dCwgZmluYWxFcnJvcjsKLQotICAgICAgICAgICAgICAgIGJpbmRpbmcgPSBiaW5kaW5nIHx8IHRo
aXM7Ci0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSB0cnlhYmxlLmNhbGwoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsUmVz
dWx0ID0gZmluYWxpemVyLmNhbGwoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRXJyb3IgPSBlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KGZpbmFsRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZmluYWxFcnJvcjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gKGZpbmFsUmVzdWx0ID09
PSB1bmRlZmluZWQpID8gcmVzdWx0IDogZmluYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHJ5RmluYWxseSA9IGZ1bmN0aW9uKHRyeWFibGUs
IGZpbmFsaXplciwgYmluZGluZykgewotICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGZpbmFs
UmVzdWx0OwotCi0gICAgICAgICAgICAgICAgYmluZGluZyA9IGJpbmRpbmcgfHwgdGhpczsKLQot
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyeWFi
bGUuY2FsbChiaW5kaW5nKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAg
ICAgICAgICAgICBmaW5hbFJlc3VsdCA9IGZpbmFsaXplci5jYWxsKGJpbmRpbmcpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiAoZmluYWxSZXN1bHQgPT09IHVu
ZGVmaW5lZCkgPyByZXN1bHQgOiBmaW5hbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgUHJvdmlkZXMgdHJ5L2NhdGNoL2ZpbmFs
bHkgZnVuY3Rpb25hbGl0eSwgd2hpbGUgd29ya2luZwotICAgICAgICAgICAgICBhcm91bmQgU2Fm
YXJpJ3MgZG91YmxlIGZpbmFsbHkgYnVnLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgdmFyIHRyeWFibGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07Ci0gICAgICAgICAgICAgICAgICBi
ZWZvcmVWYWx1ZXNbaV0gPSBsaXN0ZW5lci5iZWZvcmUobmFtZSwgdGltZSgpLCBwYXlsb2FkKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2Fs
bChiaW5kaW5nKTsKLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICB2YXIgY2F0Y2hh
YmxlID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXlsb2FkIHx8
IHt9OwotICAgICAgICAgICAgICAgIHBheWxvYWQuZXhjZXB0aW9uID0gZTsKLSAgICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldOwotICAgICAgICAg
ICAgICAgICAgbGlzdGVuZXIuYWZ0ZXIobmFtZSwgdGltZSgpLCBwYXlsb2FkLCBiZWZvcmVWYWx1
ZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgICBFbWJlci50cnlDYXRjaEZpbmFsbHkodHJ5YWJsZSwgY2F0Y2hhYmxlLCBmaW5hbGl6ZXIp
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHRyeUNhdGNoRmlu
YWxseQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVu
Y3Rpb259IHRyeWFibGUgVGhlIGZ1bmN0aW9uIHRvIHJ1biB0aGUgdHJ5IGNhbGxiYWNrCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhdGNoYWJsZSBUaGUgZnVuY3Rpb24gdG8gcnVu
IHRoZSBjYXRjaGFibGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
ZmluYWxpemVyIFRoZSBmdW5jdGlvbiB0byBydW4gdGhlIGZpbmFsbHkgY2FsbGJhY2sKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFtiaW5kaW5nXSBUaGUgb3B0aW9uYWwgY2FsbGluZyBv
YmplY3QuIERlZmF1bHRzIHRvICd0aGlzJwotICAgICAgICAgICAgICBAcmV0dXJuIHsqfSBUaGUg
cmV0dXJuIHZhbHVlIGlzIHRoZSB0aGF0IG9mIHRoZSBmaW5hbGl6ZXIsCi0gICAgICAgICAgICAg
IHVubGVzcyB0aGF0IHZhbHVlIGlzIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0aGUg
cmV0dXJuIHZhbHVlCi0gICAgICAgICAgICAgIG9mIHRoZSB0cnlhYmxlLgotICAgICAgICAgICAg
Ki8KLSAgICAgICAgdmFyIHRyeUNhdGNoRmluYWxseTsKLSAgICAgICAgaWYgKG5lZWRzRmluYWxs
eUZpeCkgewotICAgICAgICAgICAgdHJ5Q2F0Y2hGaW5hbGx5ID0gZnVuY3Rpb24odHJ5YWJsZSwg
Y2F0Y2hhYmxlLCBmaW5hbGl6ZXIsIGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVz
dWx0LCBmaW5hbFJlc3VsdCwgZmluYWxFcnJvcjsKLQotICAgICAgICAgICAgICAgIGJpbmRpbmcg
PSBiaW5kaW5nIHx8IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0cnlhYmxlLmNhbGwoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAg
fSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2F0Y2hhYmxl
LmNhbGwoYmluZGluZywgZXJyb3IpOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFJlc3Vs
dCA9IGZpbmFsaXplci5jYWxsKGJpbmRpbmcpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEVycm9yID0gZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChm
aW5hbEVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGZpbmFsRXJyb3I7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIChmaW5hbFJlc3VsdCA9PT0g
dW5kZWZpbmVkKSA/IHJlc3VsdCA6IGZpbmFsUmVzdWx0OwotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRyeUNhdGNoRmluYWxseSA9IGZ1bmN0aW9uKHRyeWFi
bGUsIGNhdGNoYWJsZSwgZmluYWxpemVyLCBiaW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHJlc3VsdCwgZmluYWxSZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICBiaW5kaW5nID0gYmluZGlu
ZyB8fCB0aGlzOwotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdHJ5YWJsZS5jYWxsKGJpbmRpbmcpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhdGNoYWJsZS5jYWxsKGJp
bmRpbmcsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAg
ICAgICAgICBmaW5hbFJlc3VsdCA9IGZpbmFsaXplci5jYWxsKGJpbmRpbmcpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiAoZmluYWxSZXN1bHQgPT09IHVuZGVm
aW5lZCkgPyByZXN1bHQgOiBmaW5hbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0g
ICAgICAgIC8vIFRZUElORyAmIEFSUkFZIE1FU1NBR0lORwotICAgICAgICAvLwotCi0gICAgICAg
IHZhciBUWVBFX01BUCA9IHt9OwotICAgICAgICB2YXIgdCA9ICJCb29sZWFuIE51bWJlciBTdHJp
bmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpOwotICAgICAg
ICBmb3JFYWNoLmNhbGwodCwgZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgVFlQRV9NQVBb
ICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7
Ci0KLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBSZXR1cm5zIGEgY29uc2lzdGVudCB0eXBlIGZvciB0aGUgcGFzc2VkIGl0ZW0uCi0KLSAgICAg
ICAgICAgICAgVXNlIHRoaXMgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gYHR5cGVvZmAgdG8gZ2V0
IHRoZSB0eXBlIG9mIGFuIGl0ZW0uCi0gICAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIHRoZSBz
YW1lIHJlc3VsdCBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCBpbmNsdWRlcyBhIGJpdAotICAgICAg
ICAgICAgICBtb3JlIGRldGFpbC4gSGVyZSBpcyB3aGF0IHdpbGwgYmUgcmV0dXJuZWQ6Ci0KLSAg
ICAgICAgICAgICAgICAgIHwgUmV0dXJuIFZhbHVlICB8IE1lYW5pbmcgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfC0tLS0t
LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS18Ci0gICAgICAgICAgICAgICAgICB8ICdzdHJpbmcnICAgICAgfCBTdHJpbmcgcHJp
bWl0aXZlIG9yIFN0cmluZyBvYmplY3QuICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAg
ICAgICAgIHwgJ251bWJlcicgICAgICB8IE51bWJlciBwcmltaXRpdmUgb3IgTnVtYmVyIG9iamVj
dC4gICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAnYm9vbGVhbicgICAg
IHwgQm9vbGVhbiBwcmltaXRpdmUgb3IgQm9vbGVhbiBvYmplY3QuICAgICAgICAgICAgICAgICB8
Ci0gICAgICAgICAgICAgICAgICB8ICdudWxsJyAgICAgICAgfCBOdWxsIHZhbHVlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwg
J3VuZGVmaW5lZCcgICB8IFVuZGVmaW5lZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAnZnVuY3Rpb24nICAgIHwgQSBmdW5j
dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAg
ICAgICAgICAgICB8ICdhcnJheScgICAgICAgfCBBbiBpbnN0YW5jZSBvZiBBcnJheSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgJ3JlZ2V4cCcg
ICAgICB8IEFuIGluc3RhbmNlIG9mIFJlZ0V4cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAotICAgICAgICAgICAgICAgICAgfCAnZGF0ZScgICAgICAgIHwgQW4gaW5zdGFuY2Ugb2Yg
RGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAg
ICB8ICdjbGFzcycgICAgICAgfCBBbiBFbWJlciBjbGFzcyAoY3JlYXRlZCB1c2luZyBFbWJlci5P
YmplY3QuZXh0ZW5kKCkpIHwKLSAgICAgICAgICAgICAgICAgIHwgJ2luc3RhbmNlJyAgICB8IEFu
IEVtYmVyIG9iamVjdCBpbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAg
ICAgICAgICAgICAgICAgfCAnZXJyb3InICAgICAgIHwgQW4gaW5zdGFuY2Ugb2YgdGhlIEVycm9y
IG9iamVjdCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICdvYmpl
Y3QnICAgICAgfCBBIEphdmFTY3JpcHQgb2JqZWN0IG5vdCBpbmhlcml0aW5nIGZyb20gRW1iZXIu
T2JqZWN0IHwKLQotICAgICAgICAgICAgICBFeGFtcGxlczoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZigpOyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gJ3VuZGVmaW5lZCcKLSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKG51bGwpOyAg
ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKLSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKHVu
ZGVmaW5lZCk7ICAgICAgICAgICAgICAvLyAndW5kZWZpbmVkJwotICAgICAgICAgICAgICBFbWJl
ci50eXBlT2YoJ21pY2hhZWwnKTsgICAgICAgICAgICAgIC8vICdzdHJpbmcnCi0gICAgICAgICAg
ICAgIEVtYmVyLnR5cGVPZihuZXcgU3RyaW5nKCdtaWNoYWVsJykpOyAgLy8gJ3N0cmluZycKLSAg
ICAgICAgICAgICAgRW1iZXIudHlwZU9mKDEwMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnbnVt
YmVyJwotICAgICAgICAgICAgICBFbWJlci50eXBlT2YobmV3IE51bWJlcigxMDEpKTsgICAgICAg
IC8vICdudW1iZXInCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZih0cnVlKTsgICAgICAgICAg
ICAgICAgICAgLy8gJ2Jvb2xlYW4nCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZihuZXcgQm9v
bGVhbih0cnVlKSk7ICAgICAgLy8gJ2Jvb2xlYW4nCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVP
ZihFbWJlci5tYWtlQXJyYXkpOyAgICAgICAgLy8gJ2Z1bmN0aW9uJwotICAgICAgICAgICAgICBF
bWJlci50eXBlT2YoWzEsIDIsIDkwXSk7ICAgICAgICAgICAgIC8vICdhcnJheScKLSAgICAgICAg
ICAgICAgRW1iZXIudHlwZU9mKC9hYmMvKTsgICAgICAgICAgICAgICAgICAvLyAncmVnZXhwJwot
ICAgICAgICAgICAgICBFbWJlci50eXBlT2YobmV3IERhdGUoKSk7ICAgICAgICAgICAgIC8vICdk
YXRlJwotICAgICAgICAgICAgICBFbWJlci50eXBlT2YoRW1iZXIuT2JqZWN0LmV4dGVuZCgpKTsg
IC8vICdjbGFzcycKLSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKEVtYmVyLk9iamVjdC5jcmVh
dGUoKSk7ICAvLyAnaW5zdGFuY2UnCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZihuZXcgRXJy
b3IoJ3RlYW1vY2lsJykpOyAgLy8gJ2Vycm9yJwotCi0gICAgICAgICAgICAgIC8vICdub3JtYWwn
IEphdmFTY3JpcHQgb2JqZWN0Ci0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZih7IGE6ICdiJyB9
KTsgICAgICAgICAgICAgLy8gJ29iamVjdCcKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCB0eXBlT2YKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAg
ICAgICBAcGFyYW0ge09iamVjdH0gaXRlbSB0aGUgaXRlbSB0byBjaGVjawotICAgICAgICAgICAg
ICBAcmV0dXJuIHtTdHJpbmd9IHRoZSB0eXBlCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiB0eXBlT2YoaXRlbSkgewotICAgICAgICAgICAgdmFyIHJldCwgbW9kdWxlUGF0aDsKLQot
ICAgICAgICAgICAgLy8gRVM2VE9ETzogRGVwZW5kcyBvbiBFbWJlci5PYmplY3Qgd2hpY2ggaXMg
ZGVmaW5lZCBpbiBydW50aW1lLgotICAgICAgICAgICAgaWYgKHR5cGVvZiBFbWJlck9iamVjdCA9
PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBtb2R1bGVQYXRoID0gJ2VtYmVyLXJ1
bnRpbWUvc3lzdGVtL29iamVjdCc7Ci0gICAgICAgICAgICAgICAgaWYgKEVtYmVyLl9fbG9hZGVy
LnJlZ2lzdHJ5W21vZHVsZVBhdGhdKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyT2JqZWN0
ID0gRW1iZXIuX19sb2FkZXIucmVxdWlyZShtb2R1bGVQYXRoKVsnZGVmYXVsdCddOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0ID0gKGl0ZW0gPT09
IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSA/IFN0cmluZyhpdGVtKSA6IFRZUEVfTUFQW3Rv
U3RyaW5nLmNhbGwoaXRlbSldIHx8ICdvYmplY3QnOwotCi0gICAgICAgICAgICBpZiAocmV0ID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEVtYmVyT2JqZWN0ICYmIEVtYmVy
T2JqZWN0LmRldGVjdChpdGVtKSkgCi0gICAgICAgICAgICAgICAgICAgIHJldCA9ICdjbGFzcyc7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJldCA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gJ2Vycm9yJzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChFbWJlck9iamVjdCAmJiBpdGVt
IGluc3RhbmNlb2YgRW1iZXJPYmplY3QpIAotICAgICAgICAgICAgICAgICAgICByZXQgPSAnaW5z
dGFuY2UnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEYXRlKSAK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gJ2RhdGUnOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIENvbnZlbmllbmNlIG1ldGhvZCB0byBpbnNwZWN0IGFuIG9iamVjdC4gVGhpcyBtZXRob2Qg
d2lsbCBhdHRlbXB0IHRvCi0gICAgICAgICAgICAgIGNvbnZlcnQgdGhlIG9iamVjdCBpbnRvIGEg
dXNlZnVsIHN0cmluZyBkZXNjcmlwdGlvbi4KLQotICAgICAgICAgICAgICBJdCBpcyBhIHByZXR0
eSBzaW1wbGUgaW1wbGVtZW50YXRpb24uIElmIHlvdSB3YW50IHNvbWV0aGluZyBtb3JlIHJvYnVz
dCwKLSAgICAgICAgICAgICAgdXNlIHNvbWV0aGluZyBsaWtlIEpTRHVtcDogaHR0cHM6Ly9naXRo
dWIuY29tL05WL2pzRHVtcAotCi0gICAgICAgICAgICAgIEBtZXRob2QgaW5zcGVjdAotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhl
IG9iamVjdCB5b3Ugd2FudCB0byBpbnNwZWN0LgotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJp
bmd9IEEgZGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgICBAc2luY2UgMS40
LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGluc3BlY3Qob2JqKSB7Ci0gICAg
ICAgICAgICB2YXIgdHlwZSA9IHR5cGVPZihvYmopOwotICAgICAgICAgICAgaWYgKHR5cGUgPT09
ICdhcnJheScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1snICsgb2JqICsgJ10nOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGUgIT09ICdvYmplY3QnKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iaiArICcnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgdiwgcmV0ID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHYgPSBvYmpba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT09ICd0b1N0
cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB1c2VsZXNzIGl0ZW1zCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlT2YodikgPT09ICdmdW5jdGlvbicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPSAiZnVuY3Rpb24oKSB7IC4uLiB9IjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXQucHVzaChrZXkgKyAiOiAiICsgdik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICJ7
IiArIHJldC5qb2luKCIsICIpICsgIn0iOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRz
X18uaW5zcGVjdCA9IGluc3BlY3Q7IC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBpbnRl
bnRpb25hbGx5IG1pbmlmaWVkIHRvIGtlZXAgdGhlIGZ1bmN0aW9ucwotICAgICAgICAvLyBiZWxv
dyBDaHJvbWUncyBmdW5jdGlvbiBib2R5IHNpemUgaW5saW5pbmcgbGltaXQgb2YgNjAwIGNoYXJz
LgotCi0gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHQgLyogdGFyZ2V0ICovCi0gICAgICAgICwgbSAv
KiBtZXRob2QgKi8KLSAgICAgICAgLCBhIC8qIGFyZ3MgKi8KLSAgICAgICAgKSB7Ci0gICAgICAg
ICAgICB2YXIgbCA9IGEgJiYgYS5sZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIWEgfHwgIWwpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbS5jYWxsKHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc3dpdGNoIChsKSB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG0uY2FsbCh0LCBhWzBdKTsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbS5jYWxsKHQsIGFbMF0sIGFbMV0pOwotICAgICAgICAgICAgY2FzZSAzOgot
ICAgICAgICAgICAgICAgIHJldHVybiBtLmNhbGwodCwgYVswXSwgYVsxXSwgYVsyXSk7Ci0gICAg
ICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG0uY2FsbCh0LCBhWzBdLCBh
WzFdLCBhWzJdLCBhWzNdKTsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbS5jYWxsKHQsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbS5hcHBseSh0LCBhKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFwcGx5ID0gYXBwbHk7
Ci0gICAgICAgIGZ1bmN0aW9uIGFwcGx5U3RyKHQgLyogdGFyZ2V0ICovCi0gICAgICAgICwgbSAv
KiBtZXRob2QgKi8KLSAgICAgICAgLCBhIC8qIGFyZ3MgKi8KLSAgICAgICAgKSB7Ci0gICAgICAg
ICAgICB2YXIgbCA9IGEgJiYgYS5sZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIWEgfHwgIWwpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdFttXSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc3dpdGNoIChsKSB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRbbV0oYVswXSk7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRbbV0oYVswXSwgYVsxXSk7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRbbV0oYVswXSwgYVsxXSwgYVsyXSk7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRbbV0oYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7Ci0gICAg
ICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRbbV0oYVswXSwgYVsxXSwg
YVsyXSwgYVszXSwgYVs0XSk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiB0W21dLmFwcGx5KHQsIGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uYXBwbHlTdHIgPSBhcHBseVN0cjsKLSAgICAgICAgX19leHBvcnRz
X18uR1VJRF9LRVkgPSBHVUlEX0tFWTsKLSAgICAgICAgX19leHBvcnRzX18uR1VJRF9QUkVGSVgg
PSBHVUlEX1BSRUZJWDsKLSAgICAgICAgX19leHBvcnRzX18uTUVUQV9ERVNDID0gTUVUQV9ERVND
OwotICAgICAgICBfX2V4cG9ydHNfXy5FTVBUWV9NRVRBID0gRU1QVFlfTUVUQTsKLSAgICAgICAg
X19leHBvcnRzX18uTUVUQV9LRVkgPSBNRVRBX0tFWTsKLSAgICAgICAgX19leHBvcnRzX18ubWV0
YSA9IG1ldGE7Ci0gICAgICAgIF9fZXhwb3J0c19fLnR5cGVPZiA9IHR5cGVPZjsKLSAgICAgICAg
X19leHBvcnRzX18udHJ5Q2F0Y2hGaW5hbGx5ID0gdHJ5Q2F0Y2hGaW5hbGx5OwotICAgICAgICBf
X2V4cG9ydHNfXy5pc0FycmF5ID0gaXNBcnJheTsKLSAgICAgICAgX19leHBvcnRzX18uY2FuSW52
b2tlID0gY2FuSW52b2tlOwotICAgICAgICBfX2V4cG9ydHNfXy50cnlGaW5hbGx5ID0gdHJ5Rmlu
YWxseTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL3dhdGNoX2tleSIsCi0gICAg
WyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL3Bs
YXRmb3JtIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVw
ZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVwZW5kZW5jeTJfXy5tZXRhOwotICAgICAgICB2YXIg
dHlwZU9mID0gX19kZXBlbmRlbmN5Ml9fLnR5cGVPZjsKLSAgICAgICAgdmFyIHBsYXRmb3JtID0g
X19kZXBlbmRlbmN5M19fLnBsYXRmb3JtOwotCi0gICAgICAgIHZhciBtZXRhRm9yID0gbWV0YTsg
Ly8gdXRpbHMuanMKLSAgICAgICAgdmFyIE1BTkRBVE9SWV9TRVRURVIgPSBFbWJlci5FTlYuTUFO
REFUT1JZX1NFVFRFUjsKLSAgICAgICAgdmFyIG9fZGVmaW5lUHJvcGVydHkgPSBwbGF0Zm9ybS5k
ZWZpbmVQcm9wZXJ0eTsKLQotICAgICAgICBmdW5jdGlvbiB3YXRjaEtleShvYmosIGtleU5hbWUs
IG1ldGEpIHsKLSAgICAgICAgICAgIC8vIGNhbid0IHdhdGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0
IGlzIHNwZWNpYWwuLi4KLSAgICAgICAgICAgIGlmIChrZXlOYW1lID09PSAnbGVuZ3RoJyAmJiB0
eXBlT2Yob2JqKSA9PT0gJ2FycmF5JykgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG0gPSBtZXRhIHx8IG1ldGFGb3Iob2JqKSwgd2F0
Y2hpbmcgPSBtLndhdGNoaW5nOwotCi0gICAgICAgICAgICAvLyBhY3RpdmF0ZSB3YXRjaGluZyBm
aXJzdCB0aW1lCi0gICAgICAgICAgICBpZiAoIXdhdGNoaW5nW2tleU5hbWVdKSB7Ci0gICAgICAg
ICAgICAgICAgd2F0Y2hpbmdba2V5TmFtZV0gPSAxOwotCi0gICAgICAgICAgICAgICAgdmFyIGRl
c2MgPSBtLmRlc2NzW2tleU5hbWVdOwotICAgICAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2Mu
d2lsbFdhdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2Mud2lsbFdhdGNoKG9iaiwga2V5
TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCdmdW5jdGlv
bicgPT09IHR5cGVvZiBvYmoud2lsbFdhdGNoUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgb2JqLndpbGxXYXRjaFByb3BlcnR5KGtleU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChNQU5EQVRPUllfU0VUVEVSICYmIGtleU5hbWUgaW4gb2JqKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG0udmFsdWVzW2tleU5hbWVdID0gb2JqW2tleU5hbWVdOwot
ICAgICAgICAgICAgICAgICAgICBvX2RlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZW51bWVyYWJsZTogb2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlKGtleU5hbWUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBFbWJlci5NQU5EQVRPUllfU0VUVEVSX0ZVTkNU
SU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBFbWJlci5ERUZBVUxUX0dFVFRFUl9G
VU5DVElPTihrZXlOYW1lKQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdhdGNoaW5nW2tleU5h
bWVdID0gKHdhdGNoaW5nW2tleU5hbWVdIHx8IDApICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLndhdGNoS2V5ID0gd2F0Y2hLZXk7Ci0gICAgICAg
IGZ1bmN0aW9uIHVud2F0Y2hLZXkob2JqLCBrZXlOYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgICB2
YXIgbSA9IG1ldGEgfHwgbWV0YUZvcihvYmopLCB3YXRjaGluZyA9IG0ud2F0Y2hpbmc7Ci0KLSAg
ICAgICAgICAgIGlmICh3YXRjaGluZ1trZXlOYW1lXSA9PT0gMSkgewotICAgICAgICAgICAgICAg
IHdhdGNoaW5nW2tleU5hbWVdID0gMDsKLQotICAgICAgICAgICAgICAgIHZhciBkZXNjID0gbS5k
ZXNjc1trZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoZGVzYyAmJiBkZXNjLmRpZFVud2F0
Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy5kaWRVbndhdGNoKG9iaiwga2V5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09
IHR5cGVvZiBvYmouZGlkVW53YXRjaFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9i
ai5kaWRVbndhdGNoUHJvcGVydHkoa2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKE1BTkRBVE9SWV9TRVRURVIgJiYga2V5TmFtZSBpbiBvYmopIHsKLSAg
ICAgICAgICAgICAgICAgICAgb19kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1lcmFibGU6IG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZShrZXlOYW1lKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcmVkZWZpbmUgdG8gc2V0IGFzIGVudW1lcmFibGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvX2RlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogdmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG0udmFsdWVzW2tleU5hbWVdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogRW1i
ZXIuREVGQVVMVF9HRVRURVJfRlVOQ1RJT04oa2V5TmFtZSkKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh3YXRjaGluZ1tr
ZXlOYW1lXSA+IDEpIHsKLSAgICAgICAgICAgICAgICB3YXRjaGluZ1trZXlOYW1lXS0tOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18udW53YXRjaEtleSA9
IHVud2F0Y2hLZXk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC93YXRjaF9wYXRo
IiwKLSAgICBbImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2NoYWlucyIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIG1ldGEgPSBf
X2RlcGVuZGVuY3kxX18ubWV0YTsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTFf
Xy50eXBlT2Y7Ci0gICAgICAgIHZhciBDaGFpbk5vZGUgPSBfX2RlcGVuZGVuY3kyX18uQ2hhaW5O
b2RlOwotCi0gICAgICAgIHZhciBtZXRhRm9yID0gbWV0YTsKLQotICAgICAgICAvLyBnZXQgdGhl
IGNoYWlucyBmb3IgdGhlIGN1cnJlbnQgb2JqZWN0LiBJZiB0aGUgY3VycmVudCBvYmplY3QgaGFz
Ci0gICAgICAgIC8vIGNoYWlucyBpbmhlcml0ZWQgZnJvbSB0aGUgcHJvdG8gdGhleSB3aWxsIGJl
IGNsb25lZCBhbmQgcmVjb25maWd1cmVkIGZvcgotICAgICAgICAvLyB0aGUgY3VycmVudCBvYmpl
Y3QuCi0gICAgICAgIGZ1bmN0aW9uIGNoYWluc0ZvcihvYmosIG1ldGEpIHsKLSAgICAgICAgICAg
IHZhciBtID0gbWV0YSB8fCBtZXRhRm9yKG9iaiksIHJldCA9IG0uY2hhaW5zOwotICAgICAgICAg
ICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBtLmNoYWlucyA9IG5ldyBDaGFp
bk5vZGUobnVsbCwgbnVsbCwgb2JqKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0LnZhbHVl
KCkgIT09IG9iaikgewotICAgICAgICAgICAgICAgIHJldCA9IG0uY2hhaW5zID0gcmV0LmNvcHko
b2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiB3YXRjaFBhdGgob2JqLCBrZXlQYXRoLCBtZXRhKSB7Ci0gICAg
ICAgICAgICAvLyBjYW4ndCB3YXRjaCBsZW5ndGggb24gQXJyYXkgLSBpdCBpcyBzcGVjaWFsLi4u
Ci0gICAgICAgICAgICBpZiAoa2V5UGF0aCA9PT0gJ2xlbmd0aCcgJiYgdHlwZU9mKG9iaikgPT09
ICdhcnJheScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciBtID0gbWV0YSB8fCBtZXRhRm9yKG9iaiksIHdhdGNoaW5nID0gbS53YXRj
aGluZzsKLQotICAgICAgICAgICAgaWYgKCF3YXRjaGluZ1trZXlQYXRoXSkgewotICAgICAgICAg
ICAgICAgIC8vIGFjdGl2YXRlIHdhdGNoaW5nIGZpcnN0IHRpbWUKLSAgICAgICAgICAgICAgICB3
YXRjaGluZ1trZXlQYXRoXSA9IDE7Ci0gICAgICAgICAgICAgICAgY2hhaW5zRm9yKG9iaiwgbSku
YWRkKGtleVBhdGgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3YXRj
aGluZ1trZXlQYXRoXSA9ICh3YXRjaGluZ1trZXlQYXRoXSB8fCAwKSArIDE7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy53YXRjaFBhdGggPSB3YXRjaFBh
dGg7Ci0gICAgICAgIGZ1bmN0aW9uIHVud2F0Y2hQYXRoKG9iaiwga2V5UGF0aCwgbWV0YSkgewot
ICAgICAgICAgICAgdmFyIG0gPSBtZXRhIHx8IG1ldGFGb3Iob2JqKSwgd2F0Y2hpbmcgPSBtLndh
dGNoaW5nOwotCi0gICAgICAgICAgICBpZiAod2F0Y2hpbmdba2V5UGF0aF0gPT09IDEpIHsKLSAg
ICAgICAgICAgICAgICB3YXRjaGluZ1trZXlQYXRoXSA9IDA7Ci0gICAgICAgICAgICAgICAgY2hh
aW5zRm9yKG9iaiwgbSkucmVtb3ZlKGtleVBhdGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh3
YXRjaGluZ1trZXlQYXRoXSA+IDEpIHsKLSAgICAgICAgICAgICAgICB3YXRjaGluZ1trZXlQYXRo
XS0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18udW53
YXRjaFBhdGggPSB1bndhdGNoUGF0aDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFs
L3dhdGNoaW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2NoYWlu
cyIsICJlbWJlci1tZXRhbC93YXRjaF9rZXkiLCAiZW1iZXItbWV0YWwvd2F0Y2hfcGF0aCIsICJl
eHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1t
ZXRhbAotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgbWV0YSA9IF9fZGVwZW5kZW5jeTFf
Xy5tZXRhOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2RlcGVuZGVuY3kxX18uTUVUQV9LRVk7
Ci0gICAgICAgIHZhciBHVUlEX0tFWSA9IF9fZGVwZW5kZW5jeTFfXy5HVUlEX0tFWTsKLSAgICAg
ICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTFfXy50eXBlT2Y7Ci0gICAgICAgIHZhciBnZW5l
cmF0ZUd1aWQgPSBfX2RlcGVuZGVuY3kxX18uZ2VuZXJhdGVHdWlkOwotICAgICAgICB2YXIgcmVt
b3ZlQ2hhaW5XYXRjaGVyID0gX19kZXBlbmRlbmN5Ml9fLnJlbW92ZUNoYWluV2F0Y2hlcjsKLSAg
ICAgICAgdmFyIGZsdXNoUGVuZGluZ0NoYWlucyA9IF9fZGVwZW5kZW5jeTJfXy5mbHVzaFBlbmRp
bmdDaGFpbnM7Ci0gICAgICAgIHZhciB3YXRjaEtleSA9IF9fZGVwZW5kZW5jeTNfXy53YXRjaEtl
eTsKLSAgICAgICAgdmFyIHVud2F0Y2hLZXkgPSBfX2RlcGVuZGVuY3kzX18udW53YXRjaEtleTsK
LSAgICAgICAgdmFyIHdhdGNoUGF0aCA9IF9fZGVwZW5kZW5jeTRfXy53YXRjaFBhdGg7Ci0gICAg
ICAgIHZhciB1bndhdGNoUGF0aCA9IF9fZGVwZW5kZW5jeTRfXy51bndhdGNoUGF0aDsKLQotICAg
ICAgICB2YXIgbWV0YUZvciA9IG1ldGE7IC8vIHV0aWxzLmpzCi0KLSAgICAgICAgLy8gcmV0dXJu
cyB0cnVlIGlmIHRoZSBwYXNzZWQgcGF0aCBpcyBqdXN0IGEga2V5TmFtZQotICAgICAgICBmdW5j
dGlvbiBpc0tleU5hbWUocGF0aCkgewotICAgICAgICAgICAgcmV0dXJuIHBhdGguaW5kZXhPZign
LicpID09PSAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBTdGFy
dHMgd2F0Y2hpbmcgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIFdoZW5ldmVyIHRoZSBwcm9wZXJ0
eSBjaGFuZ2VzLAotICAgICAgICAgICAgICBpbnZva2VzIGBFbWJlci5wcm9wZXJ0eVdpbGxDaGFu
Z2VgIGFuZCBgRW1iZXIucHJvcGVydHlEaWRDaGFuZ2VgLiBUaGlzIGlzIHRoZQotICAgICAgICAg
ICAgICBwcmltaXRpdmUgdXNlZCBieSBvYnNlcnZlcnMgYW5kIGRlcGVuZGVudCBrZXlzOyB1c3Vh
bGx5IHlvdSB3aWxsIG5ldmVyIGNhbGwKLSAgICAgICAgICAgICAgdGhpcyBtZXRob2QgZGlyZWN0
bHkgYnV0IGluc3RlYWQgdXNlIGhpZ2hlciBsZXZlbCBtZXRob2RzIGxpa2UKLSAgICAgICAgICAg
ICAgYEVtYmVyLmFkZE9ic2VydmVyKClgCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgICAgICAgQG1ldGhvZCB3YXRjaAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAg
ICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUK
LSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHdhdGNoKG9iaiwgX2tleVBhdGgsIG0p
IHsKLSAgICAgICAgICAgIC8vIGNhbid0IHdhdGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0IGlzIHNw
ZWNpYWwuLi4KLSAgICAgICAgICAgIGlmIChfa2V5UGF0aCA9PT0gJ2xlbmd0aCcgJiYgdHlwZU9m
KG9iaikgPT09ICdhcnJheScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0tleU5hbWUoX2tleVBhdGgpKSB7Ci0gICAgICAgICAg
ICAgICAgd2F0Y2hLZXkob2JqLCBfa2V5UGF0aCwgbSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHdhdGNoUGF0aChvYmosIF9rZXlQYXRoLCBtKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLndhdGNoID0gd2F0Y2g7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gaXNXYXRjaGluZyhvYmosIGtleSkgewotICAgICAgICAgICAgdmFyIG1l
dGEgPSBvYmpbTUVUQV9LRVldOwotICAgICAgICAgICAgcmV0dXJuIChtZXRhICYmIG1ldGEud2F0
Y2hpbmdba2V5XSkgPiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uaXNXYXRj
aGluZyA9IGlzV2F0Y2hpbmc7Ci0gICAgICAgIHdhdGNoLmZsdXNoUGVuZGluZyA9IGZsdXNoUGVu
ZGluZ0NoYWluczsKLQotICAgICAgICBmdW5jdGlvbiB1bndhdGNoKG9iaiwgX2tleVBhdGgsIG0p
IHsKLSAgICAgICAgICAgIC8vIGNhbid0IHdhdGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0IGlzIHNw
ZWNpYWwuLi4KLSAgICAgICAgICAgIGlmIChfa2V5UGF0aCA9PT0gJ2xlbmd0aCcgJiYgdHlwZU9m
KG9iaikgPT09ICdhcnJheScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0tleU5hbWUoX2tleVBhdGgpKSB7Ci0gICAgICAgICAg
ICAgICAgdW53YXRjaEtleShvYmosIF9rZXlQYXRoLCBtKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdW53YXRjaFBhdGgob2JqLCBfa2V5UGF0aCwgbSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy51bndhdGNoID0gdW53YXRj
aDsgLyoqCi0gICAgICAgICAgICAgIENhbGwgb24gYW4gb2JqZWN0IHdoZW4geW91IGZpcnN0IGJl
Z2V0IGl0IGZyb20gYW5vdGhlciBvYmplY3QuIFRoaXMgd2lsbAotICAgICAgICAgICAgICBzZXR1
cCBhbnkgY2hhaW5lZCB3YXRjaGVycyBvbiB0aGUgb2JqZWN0IGluc3RhbmNlIGFzIG5lZWRlZC4g
VGhpcyBtZXRob2QgaXMKLSAgICAgICAgICAgICAgc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVz
LgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgcmV3YXRj
aAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHJld2F0Y2gob2JqKSB7Ci0gICAgICAgICAg
ICB2YXIgbSA9IG9ialtNRVRBX0tFWV0sIGNoYWlucyA9IG0gJiYgbS5jaGFpbnM7Ci0KLSAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGhhcyBpdHMgb3duIGd1aWQuCi0gICAgICAg
ICAgICBpZiAoR1VJRF9LRVkgaW4gb2JqICYmICFvYmouaGFzT3duUHJvcGVydHkoR1VJRF9LRVkp
KSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVHdWlkKG9iaik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhbnkgY2hhaW5lZCB3YXRjaGVycyB1cGRhdGUuCi0g
ICAgICAgICAgICBpZiAoY2hhaW5zICYmIGNoYWlucy52YWx1ZSgpICE9PSBvYmopIHsKLSAgICAg
ICAgICAgICAgICBtLmNoYWlucyA9IGNoYWlucy5jb3B5KG9iaik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZXdhdGNoID0gcmV3YXRjaDsKLSAgICAg
ICAgdmFyIE5PREVfU1RBQ0sgPSBbXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGVh
cnMgZG93biB0aGUgbWV0YSBvbiBhbiBvYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQuCi0gICAgICAgICAgICAgIE11bHRpcGxlIGNhbGxzIHdpbGwgaGF2ZSBubyBlZmZl
Y3QuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiAgdGhlIG9iamVjdCB0byBk
ZXN0cm95Ci0gICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBkZXN0cm95KG9iaikgewotICAgICAgICAgICAgdmFyIG1ldGEgPSBvYmpb
TUVUQV9LRVldLCBub2RlLCBub2Rlcywga2V5LCBub2RlT2JqZWN0OwotICAgICAgICAgICAgaWYg
KG1ldGEpIHsKLSAgICAgICAgICAgICAgICBvYmpbTUVUQV9LRVldID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICAvLyByZW1vdmUgY2hhaW5XYXRjaGVycyB0byByZW1vdmUgY2lyY3VsYXIgcmVmZXJl
bmNlcyB0aGF0IHdvdWxkIHByZXZlbnQgR0MKLSAgICAgICAgICAgICAgICBub2RlID0gbWV0YS5j
aGFpbnM7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
Tk9ERV9TVEFDSy5wdXNoKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRy
ZWUKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKE5PREVfU1RBQ0subGVuZ3RoID4gMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5PREVfU1RBQ0sucG9wKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBwdXNoIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlcyA9IG5vZGUuX2NoYWluczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIG5vZGVzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rlcy5oYXNPd25Qcm9wZXJ0eShr
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT0RFX1NUQUNLLnB1
c2gobm9kZXNba2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2hhaW5XYXRjaGVyIGluIG5vZGUgb2JqZWN0
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5fd2F0Y2hpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlT2JqZWN0ID0gbm9kZS5fb2JqZWN0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZUNoYWluV2F0Y2hlcihub2RlT2JqZWN0LCBub2RlLl9rZXksIG5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmRlc3Ryb3kgPSBkZXN0cm95
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy1oYW5kbGViYXJzIiwKLSAgICBb
ImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItaGFuZGxlYmFycyIsICJlbWJlci1yb3V0aW5nL3N5
c3RlbS9yb3V0ZXIiLCAiZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvc2hhcmVkIiwg
ImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL2xpbmtfdG8iLCAiZW1iZXItcm91dGlu
Zy1oYW5kbGViYXJzL2hlbHBlcnMvb3V0bGV0IiwgImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9o
ZWxwZXJzL3JlbmRlciIsICJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMvaGVscGVycy9hY3Rpb24i
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBf
X2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAg
RW1iZXIgUm91dGluZyBIYW5kbGViYXJzCi0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAg
ICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZy1oYW5kbGViYXJzCi0gICAgICAgICAg
ICBAcmVxdWlyZXMgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckhhbmRs
ZWJhcnMgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJvdXRlciA9
IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciByZXNvbHZlUGF0aHMg
PSBfX2RlcGVuZGVuY3k0X18ucmVzb2x2ZVBhdGhzOwotICAgICAgICB2YXIgcmVzb2x2ZVBhcmFt
cyA9IF9fZGVwZW5kZW5jeTRfXy5yZXNvbHZlUGFyYW1zOwotCi0gICAgICAgIHZhciBkZXByZWNh
dGVkTGlua1RvSGVscGVyID0gX19kZXBlbmRlbmN5NV9fLmRlcHJlY2F0ZWRMaW5rVG9IZWxwZXI7
Ci0gICAgICAgIHZhciBsaW5rVG9IZWxwZXIgPSBfX2RlcGVuZGVuY3k1X18ubGlua1RvSGVscGVy
OwotICAgICAgICB2YXIgTGlua1ZpZXcgPSBfX2RlcGVuZGVuY3k1X18uTGlua1ZpZXc7Ci0KLSAg
ICAgICAgdmFyIG91dGxldEhlbHBlciA9IF9fZGVwZW5kZW5jeTZfXy5vdXRsZXRIZWxwZXI7Ci0g
ICAgICAgIHZhciBPdXRsZXRWaWV3ID0gX19kZXBlbmRlbmN5Nl9fLk91dGxldFZpZXc7Ci0KLSAg
ICAgICAgdmFyIHJlbmRlckhlbHBlciA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotCi0g
ICAgICAgIHZhciBBY3Rpb25IZWxwZXIgPSBfX2RlcGVuZGVuY3k4X18uQWN0aW9uSGVscGVyOwot
ICAgICAgICB2YXIgYWN0aW9uSGVscGVyID0gX19kZXBlbmRlbmN5OF9fLmFjdGlvbkhlbHBlcjsK
LQotICAgICAgICBSb3V0ZXIucmVzb2x2ZVBhcmFtcyA9IHJlc29sdmVQYXJhbXM7Ci0gICAgICAg
IFJvdXRlci5yZXNvbHZlUGF0aHMgPSByZXNvbHZlUGF0aHM7Ci0KLSAgICAgICAgRW1iZXIuTGlu
a1ZpZXcgPSBMaW5rVmlldzsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLkFjdGlvbkhlbHBlciA9
IEFjdGlvbkhlbHBlcjsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLk91dGxldFZpZXcgPSBPdXRs
ZXRWaWV3OwotCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigncmVuZGVy
JywgcmVuZGVySGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVy
KCdhY3Rpb24nLCBhY3Rpb25IZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0
ZXJIZWxwZXIoJ291dGxldCcsIG91dGxldEhlbHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFy
cy5yZWdpc3RlckhlbHBlcignbGluay10bycsIGxpbmtUb0hlbHBlcik7Ci0gICAgICAgIEVtYmVy
SGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignbGlua1RvJywgZGVwcmVjYXRlZExpbmtUb0hlbHBl
cik7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyOwotICAgIH0pOwot
ICAgIGRlZmluZSgiZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvYWN0aW9uIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVy
LW1ldGFsL2FycmF5IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL3J1bl9sb29w
IiwgImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyIsICJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0
ZXIiLCAiZW1iZXItaGFuZGxlYmFycyIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJlbWJlci1o
YW5kbGViYXJzL2hlbHBlcnMvdmlldyIsICJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMvaGVscGVy
cy9zaGFyZWQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRl
bmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9f
LCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0g
X19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEhhbmRsZWJhcnMsIHV1aWQs
IEZFQVRVUkVTLCBhc3NlcnQsIGRlcHJlY2F0ZQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRl
bmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kzX18uZm9yRWFj
aDsKLSAgICAgICAgdmFyIHV1aWQgPSBfX2RlcGVuZGVuY3k0X18udXVpZDsKLSAgICAgICAgdmFy
IHJ1biA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBpc1NpbXBs
ZUNsaWNrID0gX19kZXBlbmRlbmN5Nl9fLmlzU2ltcGxlQ2xpY2s7Ci0gICAgICAgIHZhciBFbWJl
clJvdXRlciA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBFbWJl
ckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGhh
bmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVuY3k5X18uaGFuZGxlYmFyc0dldDsKLSAgICAgICAgdmFy
IHZpZXdIZWxwZXIgPSBfX2RlcGVuZGVuY3kxMF9fLnZpZXdIZWxwZXI7Ci0gICAgICAgIHZhciBy
ZXNvbHZlUGFyYW1zID0gX19kZXBlbmRlbmN5MTFfXy5yZXNvbHZlUGFyYW1zOwotICAgICAgICB2
YXIgcmVzb2x2ZVBhdGggPSBfX2RlcGVuZGVuY3kxMV9fLnJlc29sdmVQYXRoOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBl
bWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBTYWZlU3RyaW5nID0g
RW1iZXJIYW5kbGViYXJzLlNhZmVTdHJpbmc7Ci0gICAgICAgIHZhciBhX3NsaWNlID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlOwotCi0gICAgICAgIGZ1bmN0aW9uIGFyZ3Mob3B0aW9ucywgYWN0aW9u
TmFtZSkgewotICAgICAgICAgICAgdmFyIHJldCA9IFtdOwotICAgICAgICAgICAgaWYgKGFjdGlv
bk5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXQucHVzaChhY3Rpb25OYW1lKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIHR5cGVzID0gb3B0aW9ucy5vcHRpb25zLnR5cGVzLnNs
aWNlKDEpLAotICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMub3B0aW9ucy5kYXRhOwotCi0gICAg
ICAgICAgICByZXR1cm4gcmV0LmNvbmNhdChyZXNvbHZlUGFyYW1zKG9wdGlvbnMuY29udGV4dCwg
b3B0aW9ucy5wYXJhbXMsIHsKLSAgICAgICAgICAgICAgICB0eXBlczogdHlwZXMsCi0gICAgICAg
ICAgICAgICAgZGF0YTogZGF0YSAKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBBY3Rpb25IZWxwZXIgPSB7Ci0gICAgICAgICAgICByZWdpc3RlcmVkQWN0aW9uczog
e30KLSAgICAgICAgfTsKLQotICAgICAgICBfX2V4cG9ydHNfXy5BY3Rpb25IZWxwZXIgPSBBY3Rp
b25IZWxwZXI7Ci0KLSAgICAgICAgdmFyIGtleXMgPSBbImFsdCIsICJzaGlmdCIsICJtZXRhIiwg
ImN0cmwiXTsKLQotICAgICAgICB2YXIgUE9JTlRFUl9FVkVOVF9UWVBFX1JFR0VYID0gL15jbGlj
a3xtb3VzZXx0b3VjaC87Ci0KLSAgICAgICAgdmFyIGlzQWxsb3dlZEV2ZW50ID0gZnVuY3Rpb24o
ZXZlbnQsIGFsbG93ZWRLZXlzKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGFsbG93ZWRLZXlz
ID09PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIGlmIChQT0lOVEVSX0VWRU5UX1RZ
UEVfUkVHRVgudGVzdChldmVudC50eXBlKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aXNTaW1wbGVDbGljayhldmVudCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgYWxsb3dlZEtleXMgPSAnJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhbGxvd2VkS2V5cy5pbmRleE9mKCJhbnkiKSA+PSAw
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHZhciBhbGxvd2VkID0gdHJ1ZTsKLQotICAgICAgICAgICAgZm9yRWFjaC5jYWxsKGtl
eXMsIGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIGlmIChldmVudFtrZXkgKyAiS2V5
Il0gJiYgYWxsb3dlZEtleXMuaW5kZXhPZihrZXkpID09PSAtMSkgewotICAgICAgICAgICAgICAg
ICAgICBhbGxvd2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBhbGxvd2VkOwotICAgICAgICB9OwotCi0gICAgICAgIEFj
dGlvbkhlbHBlci5yZWdpc3RlckFjdGlvbiA9IGZ1bmN0aW9uKGFjdGlvbk5hbWVPclBhdGgsIG9w
dGlvbnMsIGFsbG93ZWRLZXlzKSB7Ci0gICAgICAgICAgICB2YXIgYWN0aW9uSWQgPSB1dWlkKCk7
Ci0KLSAgICAgICAgICAgIEFjdGlvbkhlbHBlci5yZWdpc3RlcmVkQWN0aW9uc1thY3Rpb25JZF0g
PSB7Ci0gICAgICAgICAgICAgICAgZXZlbnROYW1lOiBvcHRpb25zLmV2ZW50TmFtZSwKLSAgICAg
ICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVSZWdpc3RlcmVkQWN0aW9uKGV2ZW50
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNBbGxvd2VkRXZlbnQoZXZlbnQsIGFsbG93
ZWRLZXlzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wcmV2ZW50
RGVmYXVsdCAhPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBpZiAob3B0aW9ucy5idWJibGVzID09PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gb3B0aW9ucy50YXJnZXQsCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMgPSBvcHRpb25zLnBhcmFtZXRlcnMsCi0gICAgICAgICAgICAg
ICAgICAgIGFjdGlvbk5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC50YXJn
ZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGhhbmRsZWJhcnNHZXQodGFy
Z2V0LnJvb3QsIHRhcmdldC50YXJnZXQsIHRhcmdldC5vcHRpb25zKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5y
b290OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG9w
dGlvbnMuYm91bmRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTmFt
ZSA9IHJlc29sdmVQYXJhbXMocGFyYW1ldGVycy5jb250ZXh0LCBbYWN0aW9uTmFtZU9yUGF0aF0s
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlczogWydJRCddLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtZXRlcnMub3B0aW9ucy5kYXRhIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfSlbMF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGFjdGlvbk5hbWUgPT09
ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQo
IllvdSBzcGVjaWZpZWQgYSBxdW90ZWxlc3MgcGF0aCB0byB0aGUge3thY3Rpb259fSBoZWxwZXIg
JyIgKyBhY3Rpb25OYW1lT3JQYXRoICsgIicgd2hpY2ggZGlkIG5vdCByZXNvbHZlIHRvIGFuIGFj
dGlvbk5hbWUuIFBlcmhhcHMgeW91IG1lYW50IHRvIHVzZSBhIHF1b3RlZCBhY3Rpb25OYW1lPyAo
ZS5nLiB7e2FjdGlvbiAnIiArIGFjdGlvbk5hbWVPclBhdGggKyAiJ319KS4iLCB0cnVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25OYW1lID0gYWN0aW9uTmFtZU9yUGF0aDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghYWN0aW9uTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0aW9uTmFtZSA9IGFjdGlvbk5hbWVPclBhdGg7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBydW4oZnVuY3Rpb24gcnVuUmVnaXN0ZXJlZEFjdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuc2VuZCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZW5kLmFwcGx5KHRhcmdldCwgYXJncyhwYXJhbWV0
ZXJzLCBhY3Rpb25OYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIGFjdGlvbiAnIiArIGFj
dGlvbk5hbWUgKyAiJyBkaWQgbm90IGV4aXN0IG9uICIgKyB0YXJnZXQsIHR5cGVvZiB0YXJnZXRb
YWN0aW9uTmFtZV0gPT09ICdmdW5jdGlvbicpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRhcmdldFthY3Rpb25OYW1lXS5hcHBseSh0YXJnZXQsIGFyZ3MocGFyYW1ldGVycykpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBvcHRpb25zLnZpZXcub24o
J3dpbGxDbGVhclJlbmRlcicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBB
Y3Rpb25IZWxwZXIucmVnaXN0ZXJlZEFjdGlvbnNbYWN0aW9uSWRdOwotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBhY3Rpb25JZDsKLSAgICAgICAgfTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgVGhlIGB7e2FjdGlvbn19YCBoZWxwZXIgcmVnaXN0ZXJzIGFuIEhU
TUwgZWxlbWVudCB3aXRoaW4gYSB0ZW1wbGF0ZSBmb3IgRE9NCi0gICAgICAgICAgICAgIGV2ZW50
IGhhbmRsaW5nIGFuZCBmb3J3YXJkcyB0aGF0IGludGVyYWN0aW9uIHRvIHRoZSB0ZW1wbGF0ZXMn
cyBjb250cm9sbGVyCi0gICAgICAgICAgICAgIG9yIHN1cHBsaWVkIGB0YXJnZXRgIG9wdGlvbiAo
c2VlICdTcGVjaWZ5aW5nIGEgVGFyZ2V0JykuCi0KLSAgICAgICAgICAgICAgSWYgdGhlIGNvbnRy
b2xsZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBldmVudCwgdGhlIGV2ZW50IGlzIHNlbnQKLSAg
ICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgcm91dGUsIGFuZCBpdCBidWJibGVzIHVwIHRoZSBy
b3V0ZSBoaWVyYXJjaHkgZnJvbSB0aGVyZS4KLQotICAgICAgICAgICAgICBVc2VyIGludGVyYWN0
aW9uIHdpdGggdGhhdCBlbGVtZW50IHdpbGwgaW52b2tlIHRoZSBzdXBwbGllZCBhY3Rpb24gbmFt
ZSBvbgotICAgICAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgdGFyZ2V0LiBTcGVjaWZ5aW5nIGEg
bm9uLXF1b3RlZCBhY3Rpb24gbmFtZSB3aWxsIHJlc3VsdCBpbgotICAgICAgICAgICAgICBhIGJv
dW5kIHByb3BlcnR5IGxvb2t1cCBhdCB0aGUgdGltZSB0aGUgZXZlbnQgd2lsbCBiZSB0cmlnZ2Vy
ZWQuCi0KLSAgICAgICAgICAgICAgR2l2ZW4gdGhlIGZvbGxvd2luZyBhcHBsaWNhdGlvbiBIYW5k
bGViYXJzIHRlbXBsYXRlIG9uIHRoZSBwYWdlCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFy
cwotICAgICAgICAgICAgICA8ZGl2IHt7YWN0aW9uICdhbkFjdGlvbk5hbWUnfX0+Ci0gICAgICAg
ICAgICAgICAgY2xpY2sgbWUKLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEFuZCBhcHBsaWNhdGlvbiBjb2RlCi0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAuQXBwbGljYXRpb25Db250cm9sbGVyID0g
RW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAg
ICAgICAgICAgICAgICAgIGFuQWN0aW9uTmFtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyByZW5k
ZXJlZCBIVE1MCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtZW1iZXItYWN0aW9u
PSIxIj4KLSAgICAgICAgICAgICAgICAgIGNsaWNrIG1lCi0gICAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBDbGlja2luZyAiY2xpY2sgbWUiIHdpbGwgdHJpZ2dlciB0aGUgYGFuQWN0aW9uTmFtZWAgYWN0
aW9uIG9mIHRoZQotICAgICAgICAgICAgICBgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlcmAuIElu
IHRoaXMgY2FzZSwgbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdpbGwgYmUgcGFzc2VkLgotCi0g
ICAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUg
aGVscGVyOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGJ1
dHRvbiB7e2FjdGlvbiAnZWRpdCcgcG9zdH19PkVkaXQ8L2J1dHRvbj4KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgVGhvc2UgcGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCBhbG9u
ZyBhcyBhcmd1bWVudHMgdG8gdGhlIEphdmFTY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24g
aW1wbGVtZW50aW5nIHRoZSBhY3Rpb24uCi0KLSAgICAgICAgICAgICAgIyMjIEV2ZW50IFByb3Bh
Z2F0aW9uCi0KLSAgICAgICAgICAgICAgRXZlbnRzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBhY3Rp
b24gaGVscGVyIHdpbGwgYXV0b21hdGljYWxseSBoYXZlCi0gICAgICAgICAgICAgIGAucHJldmVu
dERlZmF1bHQoKWAgY2FsbGVkIG9uIHRoZW0uIFlvdSBkbyBub3QgbmVlZCB0byBkbyBzbyBpbiB5
b3VyIGV2ZW50Ci0gICAgICAgICAgICAgIGhhbmRsZXJzLiBJZiB5b3UgbmVlZCB0byBhbGxvdyBl
dmVudCBwcm9wYWdhdGlvbiAodG8gaGFuZGxlIGZpbGUgaW5wdXRzIGZvcgotICAgICAgICAgICAg
ICBleGFtcGxlKSB5b3UgY2FuIHN1cHBseSB0aGUgYHByZXZlbnREZWZhdWx0PWZhbHNlYCBvcHRp
b24gdG8gdGhlIGB7e2FjdGlvbn19YCBoZWxwZXI6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxl
YmFycwotICAgICAgICAgICAgICA8ZGl2IHt7YWN0aW9uICJzYXlIZWxsbyIgcHJldmVudERlZmF1
bHQ9ZmFsc2V9fT4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgLz4KLSAgICAg
ICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+Ci0gICAgICAgICAgICAgIDwvZGl2
PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUbyBkaXNhYmxlIGJ1YmJsaW5n
LCBwYXNzIGBidWJibGVzPWZhbHNlYCB0byB0aGUgaGVscGVyOgotCi0gICAgICAgICAgICAgIGBg
YGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGJ1dHRvbiB7e2FjdGlvbiAnZWRpdCcgcG9zdCBi
dWJibGVzPWZhbHNlfX0+RWRpdDwvYnV0dG9uPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBJZiB5b3UgbmVlZCB0aGUgZGVmYXVsdCBoYW5kbGVyIHRvIHRyaWdnZXIgeW91IHNo
b3VsZCBlaXRoZXIgcmVnaXN0ZXIgeW91cgotICAgICAgICAgICAgICBvd24gZXZlbnQgaGFuZGxl
ciwgb3IgdXNlIGV2ZW50IG1ldGhvZHMgb24geW91ciB2aWV3IGNsYXNzLiBTZWUgW0VtYmVyLlZp
ZXddKC9hcGkvY2xhc3Nlcy9FbWJlci5WaWV3Lmh0bWwpCi0gICAgICAgICAgICAgICdSZXNwb25k
aW5nIHRvIEJyb3dzZXIgRXZlbnRzJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICAg
ICAgICAjIyMgU3BlY2lmeWluZyBET00gZXZlbnQgdHlwZQotCi0gICAgICAgICAgICAgIEJ5IGRl
ZmF1bHQgdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIgcmVnaXN0ZXJzIGZvciBET00gYGNsaWNrYCBl
dmVudHMuIFlvdSBjYW4KLSAgICAgICAgICAgICAgc3VwcGx5IGFuIGBvbmAgb3B0aW9uIHRvIHRo
ZSBoZWxwZXIgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBET00gZXZlbnQgbmFtZToKLQotICAgICAg
ICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDxkaXYge3thY3Rpb24gImFuQWN0
aW9uTmFtZSIgb249ImRvdWJsZUNsaWNrIn19PgotICAgICAgICAgICAgICAgIGNsaWNrIG1lCi0g
ICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBT
ZWUgYEVtYmVyLlZpZXdgICdSZXNwb25kaW5nIHRvIEJyb3dzZXIgRXZlbnRzJyBmb3IgYSBsaXN0
IG9mCi0gICAgICAgICAgICAgIGFjY2VwdGFibGUgRE9NIGV2ZW50IG5hbWVzLgotCi0gICAgICAg
ICAgICAgIE5PVEU6IEJlY2F1c2UgYHt7YWN0aW9ufX1gIGRlcGVuZHMgb24gRW1iZXIncyBldmVu
dCBkaXNwYXRjaCBzeXN0ZW0gaXQgd2lsbAotICAgICAgICAgICAgICBvbmx5IGZ1bmN0aW9uIGlm
IGFuIGBFbWJlci5FdmVudERpc3BhdGNoZXJgIGluc3RhbmNlIGlzIGF2YWlsYWJsZS4gQW4KLSAg
ICAgICAgICAgICAgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgaW5zdGFuY2Ugd2lsbCBiZSBjcmVh
dGVkIHdoZW4gYSBuZXcgYEVtYmVyLkFwcGxpY2F0aW9uYAotICAgICAgICAgICAgICBpcyBjcmVh
dGVkLiBIYXZpbmcgYW4gaW5zdGFuY2Ugb2YgYEVtYmVyLkFwcGxpY2F0aW9uYCB3aWxsIHNhdGlz
ZnkgdGhpcwotICAgICAgICAgICAgICByZXF1aXJlbWVudC4KLQotICAgICAgICAgICAgICAjIyMg
U3BlY2lmeWluZyBhbGxvd2VkIG1vZGlmaWVyIGtleXMKLQotICAgICAgICAgICAgICBCeSBkZWZh
dWx0IHRoZSBge3thY3Rpb259fWAgaGVscGVyIHdpbGwgaWdub3JlIGNsaWNrIGV2ZW50IHdpdGgg
cHJlc3NlZCBtb2RpZmllcgotICAgICAgICAgICAgICBrZXlzLiBZb3UgY2FuIHN1cHBseSBhbiBg
YWxsb3dlZEtleXNgIG9wdGlvbiB0byBzcGVjaWZ5IHdoaWNoIGtleXMgc2hvdWxkIG5vdCBiZSBp
Z25vcmVkLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGRp
diB7e2FjdGlvbiAiYW5BY3Rpb25OYW1lIiBhbGxvd2VkS2V5cz0iYWx0In19PgotICAgICAgICAg
ICAgICAgIGNsaWNrIG1lCi0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBUaGlzIHdheSB0aGUgYHt7YWN0aW9ufX1gIHdpbGwgZmlyZSB3aGVu
IGNsaWNraW5nIHdpdGggdGhlIGFsdCBrZXkgcHJlc3NlZCBkb3duLgotCi0gICAgICAgICAgICAg
IEFsdGVybmF0aXZlbHksIHN1cHBseSAiYW55IiB0byB0aGUgYGFsbG93ZWRLZXlzYCBvcHRpb24g
dG8gYWNjZXB0IGFueSBjb21iaW5hdGlvbiBvZiBtb2RpZmllciBrZXlzLgotCi0gICAgICAgICAg
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGRpdiB7e2FjdGlvbiAiYW5BY3Rpb25O
YW1lIiBhbGxvd2VkS2V5cz0iYW55In19PgotICAgICAgICAgICAgICAgIGNsaWNrIG1lIHdpdGgg
YW55IGtleSBwcmVzc2VkCi0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAjIyMgU3BlY2lmeWluZyBhIFRhcmdldAotCi0gICAgICAgICAgICAg
IFRoZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmxlIHRhcmdldCBvYmplY3RzIGZvciBge3thY3Rpb259
fWAgaGVscGVyczoKLQotICAgICAgICAgICAgICBJbiBhIHR5cGljYWwgRW1iZXIgYXBwbGljYXRp
b24sIHdoZXJlIHZpZXdzIGFyZSBtYW5hZ2VkIHRocm91Z2ggdXNlIG9mIHRoZQotICAgICAgICAg
ICAgICBge3tvdXRsZXR9fWAgaGVscGVyLCBhY3Rpb25zIHdpbGwgYnViYmxlIHRvIHRoZSBjdXJy
ZW50IGNvbnRyb2xsZXIsIHRoZW4KLSAgICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgcm91dGUs
IGFuZCB0aGVuIHVwIHRoZSByb3V0ZSBoaWVyYXJjaHkuCi0KLSAgICAgICAgICAgICAgQWx0ZXJu
YXRpdmVseSwgYSBgdGFyZ2V0YCBvcHRpb24gY2FuIGJlIHByb3ZpZGVkIHRvIHRoZSBoZWxwZXIg
dG8gY2hhbmdlCi0gICAgICAgICAgICAgIHdoaWNoIG9iamVjdCB3aWxsIHJlY2VpdmUgdGhlIG1l
dGhvZCBjYWxsLiBUaGlzIG9wdGlvbiBtdXN0IGJlIGEgcGF0aAotICAgICAgICAgICAgICB0byBh
biBvYmplY3QsIGFjY2Vzc2libGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dDoKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7ISB0aGUgYXBwbGljYXRpb24gdGVt
cGxhdGUgfX0KLSAgICAgICAgICAgICAgPGRpdiB7e2FjdGlvbiAiYW5BY3Rpb25OYW1lIiB0YXJn
ZXQ9dmlld319PgotICAgICAgICAgICAgICAgIGNsaWNrIG1lCi0gICAgICAgICAgICAgIDwvZGl2
PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIEFwcC5BcHBsaWNhdGlvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgYW5BY3Rpb25OYW1lOiBm
dW5jdGlvbigpe30KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBBZGRpdGlvbmFsIFBhcmFtZXRlcnMK
LQotICAgICAgICAgICAgICBZb3UgbWF5IHNwZWNpZnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRv
IHRoZSBge3thY3Rpb259fWAgaGVscGVyLiBUaGVzZQotICAgICAgICAgICAgICBwYXJhbWV0ZXJz
IGFyZSBwYXNzZWQgYWxvbmcgYXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgSmF2YVNjcmlwdCBmdW5j
dGlvbgotICAgICAgICAgICAgICBpbXBsZW1lbnRpbmcgdGhlIGFjdGlvbi4KLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2VhY2ggcGVyc29uIGluIHBlb3Bs
ZX19Ci0gICAgICAgICAgICAgICAgPGRpdiB7e2FjdGlvbiAiZWRpdCIgcGVyc29ufX0+Ci0gICAg
ICAgICAgICAgICAgICBjbGljayBtZQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAg
ICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQ2xpY2tp
bmcgImNsaWNrIG1lIiB3aWxsIHRyaWdnZXIgdGhlIGBlZGl0YCBtZXRob2Qgb24gdGhlIGN1cnJl
bnQgY29udHJvbGxlcgotICAgICAgICAgICAgICB3aXRoIHRoZSB2YWx1ZSBvZiBgcGVyc29uYCBh
cyBhIHBhcmFtZXRlci4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGFjdGlvbgotICAgICAgICAg
ICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZ30gYWN0aW9uTmFtZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW2NvbnRl
eHRdKgotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIGFjdGlvbkhlbHBlcihhY3Rpb25OYW1lKSB7Ci0gICAgICAgICAg
ICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sCi0gICAgICAg
ICAgICBjb250ZXh0cyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIDEsIC0xKTsKLQotICAgICAg
ICAgICAgdmFyIGhhc2ggPSBvcHRpb25zLmhhc2gsCi0gICAgICAgICAgICBjb250cm9sbGVyID0g
b3B0aW9ucy5kYXRhLmtleXdvcmRzLmNvbnRyb2xsZXI7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0
ZSBhIGhhc2ggdG8gcGFzcyBhbG9uZyB0byByZWdpc3RlckFjdGlvbgotICAgICAgICAgICAgdmFy
IGFjdGlvbiA9IHsKLSAgICAgICAgICAgICAgICBldmVudE5hbWU6IGhhc2gub24gfHwgImNsaWNr
IiwKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQ6IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtczogY29udGV4dHMKLSAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgIHZpZXc6IG9wdGlvbnMuZGF0YS52aWV3LAotICAgICAgICAgICAgICAgIGJ1
YmJsZXM6IGhhc2guYnViYmxlcywKLSAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogaGFz
aC5wcmV2ZW50RGVmYXVsdCwKLSAgICAgICAgICAgICAgICB0YXJnZXQ6IHsKLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW9uczogb3B0aW9ucyAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIGJvdW5kUHJvcGVydHk6IG9wdGlvbnMudHlwZXNbMF0gPT09ICJJRCIKLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIGlmIChoYXNoLnRhcmdldCkgewotICAgICAgICAgICAgICAg
IGFjdGlvbi50YXJnZXQucm9vdCA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnRhcmdl
dC50YXJnZXQgPSBoYXNoLnRhcmdldDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxl
cikgewotICAgICAgICAgICAgICAgIGFjdGlvbi50YXJnZXQucm9vdCA9IGNvbnRyb2xsZXI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhY3Rpb25JZCA9IEFjdGlvbkhlbHBlci5y
ZWdpc3RlckFjdGlvbihhY3Rpb25OYW1lLCBhY3Rpb24sIGhhc2guYWxsb3dlZEtleXMpOwotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3RyaW5nKCdkYXRhLWVtYmVyLWFjdGlvbj0iJyArIGFj
dGlvbklkICsgJyInKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFjdGlvbkhl
bHBlciA9IGFjdGlvbkhlbHBlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmct
aGFuZGxlYmFycy9oZWxwZXJzL2xpbmtfdG8iLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVt
YmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLW1ldGFsL2Nv
bXB1dGVkIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci1ydW50aW1l
L3N5c3RlbS9zdHJpbmciLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1
bnRpbWUva2V5cyIsICJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCAiZW1iZXItdmlld3Mvdmll
d3MvY29tcG9uZW50IiwgImVtYmVyLWhhbmRsZWJhcnMiLCAiZW1iZXItaGFuZGxlYmFycy9oZWxw
ZXJzL3ZpZXciLCAiZW1iZXItcm91dGluZy9zeXN0ZW0vcm91dGVyIiwgImVtYmVyLXJvdXRpbmct
aGFuZGxlYmFycy9oZWxwZXJzL3NoYXJlZCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19k
ZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBl
bmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRkVBVFVSRVMsIExvZ2dlciwgSGFuZGxl
YmFycywgd2FybiwgYXNzZXJ0Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0
OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIG1l
cmdlID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBydW4gPSBfX2Rl
cGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRl
bmN5Nl9fLmNvbXB1dGVkOwotCi0gICAgICAgIHZhciBvbkxvYWQgPSBfX2RlcGVuZGVuY3k3X18u
b25Mb2FkOwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5OF9fLmZtdDsKLSAgICAgICAg
dmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBrZXlzID0gX19kZXBlbmRlbmN5MTBfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaXNTaW1w
bGVDbGljayA9IF9fZGVwZW5kZW5jeTExX18uaXNTaW1wbGVDbGljazsKLSAgICAgICAgdmFyIEVt
YmVyQ29tcG9uZW50ID0gX19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
RW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5MTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgdmlld0hlbHBlciA9IF9fZGVwZW5kZW5jeTE0X18udmlld0hlbHBlcjsKLSAgICAgICAgdmFy
IEVtYmVyUm91dGVyID0gX19kZXBlbmRlbmN5MTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
cmVzb2x2ZVBhcmFtcyA9IF9fZGVwZW5kZW5jeTE2X18ucmVzb2x2ZVBhcmFtczsKLSAgICAgICAg
dmFyIHJlc29sdmVQYXRocyA9IF9fZGVwZW5kZW5jeTE2X18ucmVzb2x2ZVBhdGhzOwotICAgICAg
ICB2YXIgcm91dGVBcmdzID0gX19kZXBlbmRlbmN5MTZfXy5yb3V0ZUFyZ3M7Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVt
YmVyLXJvdXRpbmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIHNsaWNlID0gW10uc2xp
Y2U7Ci0KLSAgICAgICAgcmVxdWlyZU1vZHVsZSgnZW1iZXItaGFuZGxlYmFycycpOwotCi0gICAg
ICAgIHZhciBudW1iZXJPZkNvbnRleHRzQWNjZXB0ZWRCeUhhbmRsZXIgPSBmdW5jdGlvbihoYW5k
bGVyLCBoYW5kbGVySW5mb3MpIHsKLSAgICAgICAgICAgIHZhciByZXEgPSAwOwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgcmVxID0gcmVxICsgaGFuZGxlckluZm9zW2ldLm5hbWVzLmxlbmd0
aDsKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckluZm9zW2ldLmhhbmRsZXIgPT09IGhhbmRs
ZXIpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gcmVxOwotICAgICAgICB9OwotCi0gICAgICAgIHZhciBRdWVyeVBhcmFtcyA9
IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICB2YWx1ZXM6IG51bGwKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2V0UmVzb2x2ZWRQYXRocyhvcHRpb25zKSB7Ci0KLSAg
ICAgICAgICAgIHZhciB0eXBlcyA9IG9wdGlvbnMub3B0aW9ucy50eXBlcywKLSAgICAgICAgICAg
IGRhdGEgPSBvcHRpb25zLm9wdGlvbnMuZGF0YTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlc29s
dmVQYXRocyhvcHRpb25zLmNvbnRleHQsIG9wdGlvbnMucGFyYW1zLCB7Ci0gICAgICAgICAgICAg
ICAgdHlwZXM6IHR5cGVzLAotICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgCi0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgRW1iZXIuTGlu
a1ZpZXdgIHJlbmRlcnMgYW4gZWxlbWVudCB3aG9zZSBgY2xpY2tgIGV2ZW50IHRyaWdnZXJzIGEK
LSAgICAgICAgICAgICAgdHJhbnNpdGlvbiBvZiB0aGUgYXBwbGljYXRpb24ncyBpbnN0YW5jZSBv
ZiBgRW1iZXIuUm91dGVyYCB0bwotICAgICAgICAgICAgICBhIHN1cHBsaWVkIHJvdXRlIGJ5IG5h
bWUuCi0KLSAgICAgICAgICAgICAgSW5zdGFuY2VzIG9mIGBMaW5rVmlld2Agd2lsbCBtb3N0IGxp
a2VseSBiZSBjcmVhdGVkIHRocm91Z2gKLSAgICAgICAgICAgICAgdGhlIGBsaW5rLXRvYCBIYW5k
bGViYXJzIGhlbHBlciwgYnV0IHByb3BlcnRpZXMgb2YgdGhpcyBjbGFzcwotICAgICAgICAgICAg
ICBjYW4gYmUgb3ZlcnJpZGRlbiB0byBjdXN0b21pemUgYXBwbGljYXRpb24td2lkZSBiZWhhdmlv
ci4KLQotICAgICAgICAgICAgICBAY2xhc3MgTGlua1ZpZXcKLSAgICAgICAgICAgICAgQG5hbWVz
cGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5WaWV3Ci0gICAgICAgICAg
ICAgIEBzZWUge0hhbmRsZWJhcnMuaGVscGVycy5saW5rLXRvfQotICAgICAgICAgICAgKiovCi0g
ICAgICAgIHZhciBMaW5rVmlldyA9IEVtYmVyLkxpbmtWaWV3ID0gRW1iZXJDb21wb25lbnQuZXh0
ZW5kKHsKLSAgICAgICAgICAgIHRhZ05hbWU6ICdhJywKLSAgICAgICAgICAgIGN1cnJlbnRXaGVu
OiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUg
YHRpdGxlYCBhdHRyaWJ1dGUgb2YgdGhlIGBMaW5rVmlld2AncyBIVE1MIGVsZW1lbnQuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHRpdGxlCi0gICAgICAgICAgICAgICAgICAgIEBk
ZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgdGl0bGU6IG51
bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBgcmVs
YCBhdHRyaWJ1dGUgb2YgdGhlIGBMaW5rVmlld2AncyBIVE1MIGVsZW1lbnQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByb3BlcnR5IHJlbAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBu
dWxsCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIHJlbDogbnVsbCwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkg
dG8gYExpbmtWaWV3YCdzIGVsZW1lbnQgd2hlbiBpdHMgYGFjdGl2ZWAKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHkgaXMgYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBhY3RpdmVDbGFzcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAg
ICAgICAgICAgICAgQGRlZmF1bHQgYWN0aXZlCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAg
ICAgICAgIGFjdGl2ZUNsYXNzOiAnYWN0aXZlJywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gYExpbmtWaWV3YCdzIGVsZW1l
bnQgd2hlbiBpdHMgYGxvYWRpbmdgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IGlzIGB0
cnVlYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbG9hZGluZ0NsYXNzCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBsb2FkaW5nCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIGxvYWRpbmdDbGFz
czogJ2xvYWRpbmcnLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhl
IENTUyBjbGFzcyB0byBhcHBseSB0byBhIGBMaW5rVmlld2AncyBlbGVtZW50IHdoZW4gaXRzIGBk
aXNhYmxlZGAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgaXMgYHRydWVgLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBkaXNhYmxlZENsYXNzCi0gICAgICAgICAgICAgICAg
ICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBkaXNhYmxlZAot
ICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBkaXNhYmxlZENsYXNzOiAnZGlzYWJs
ZWQnLAotICAgICAgICAgICAgX2lzRGlzYWJsZWQ6IGZhbHNlLAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBgTGlua1ZpZXdgIHdp
bGwgdHJpZ2dlciByb3V0aW5nIHZpYQotICAgICAgICAgICAgICAgICAgICB0aGUgYHJlcGxhY2VX
aXRoYCByb3V0aW5nIHN0cmF0ZWd5LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBy
ZXBsYWNlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAg
ICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAg
cmVwbGFjZTogZmFsc2UsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBC
eSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1gIGhlbHBlciB3aWxsIGJpbmQgdG8gdGhlIGBocmVm
YCBhbmQKLSAgICAgICAgICAgICAgICAgICAgYHRpdGxlYCBhdHRyaWJ1dGVzLiBJdCdzIGRpc2Nv
dXJhZ2UgdGhhdCB5b3Ugb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAg
ICAgIGhvd2V2ZXIgeW91IGNhbiBwdXNoIG9udG8gdGhlIGFycmF5IGlmIG5lZWRlZC4KLQotICAg
ICAgICAgICAgICAgICAgICBAcHJvcGVydHkgYXR0cmlidXRlQmluZGluZ3MKLSAgICAgICAgICAg
ICAgICAgICAgQHR5cGUgQXJyYXkgfCBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1
bHQgWydocmVmJywgJ3RpdGxlJywgJ3JlbCddCi0gICAgICAgICAgICAgICAgICAgKiovCi0gICAg
ICAgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydocmVmJywgJ3RpdGxlJywgJ3JlbCddLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCB0aGUgYHt7bGlu
ay10b319YCBoZWxwZXIgd2lsbCBiaW5kIHRvIHRoZSBgYWN0aXZlYCwgYGxvYWRpbmdgLCBhbmQK
LSAgICAgICAgICAgICAgICAgICAgYGRpc2FibGVkYCBjbGFzc2VzLiBJdCBpcyBkaXNjb3VyYWdl
ZCB0byBvdmVycmlkZSB0aGVzZSBkaXJlY3RseS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgY2xhc3NOYW1lQmluZGluZ3MKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQXJyYXkK
LSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgWydhY3RpdmUnLCAnbG9hZGluZycsICdkaXNh
YmxlZCddCi0gICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBjbGFzc05hbWVCaW5k
aW5nczogWydhY3RpdmUnLCAnbG9hZGluZycsICdkaXNhYmxlZCddLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCB0aGUgYHt7bGluay10b319YCBoZWxw
ZXIgcmVzcG9uZHMgdG8gdGhlIGBjbGlja2AgZXZlbnQuIFlvdQotICAgICAgICAgICAgICAgICAg
ICBjYW4gb3ZlcnJpZGUgdGhpcyBnbG9iYWxseSBieSBzZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8g
eW91ciBjdXN0b20KLSAgICAgICAgICAgICAgICAgICAgZXZlbnQgbmFtZS4KLQotICAgICAgICAg
ICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gbW9iaWxlIHdoZW4gb25l
IHdhbnRzIHRvIGF2b2lkIHRoZSAzMDBtcwotICAgICAgICAgICAgICAgICAgICBjbGljayBkZWxh
eSB1c2luZyBzb21lIHNvcnQgb2YgY3VzdG9tIGB0YXBgIGV2ZW50LgotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSBldmVudE5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGNsaWNrCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgZXZlbnROYW1lOiAnY2xpY2snLAotCi0gICAgICAgICAgICAvLyB0
aGlzIGlzIGRvYydlZCBoZXJlIHNvIGl0IHNob3dzIHVwIGluIHRoZSBldmVudHMKLSAgICAgICAg
ICAgIC8vIHNlY3Rpb24gb2YgdGhlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGljaCBpcyB3aGVyZQot
ICAgICAgICAgICAgLy8gcGVvcGxlIHdpbGwgbGlrZWx5IGdvIGxvb2tpbmcgZm9yIGl0LgotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRyaWdnZXJzIHRoZSBgTGlua1ZpZXdg
J3Mgcm91dGluZyBiZWhhdmlvci4gSWYKLSAgICAgICAgICAgICAgICAgICAgYGV2ZW50TmFtZWAg
aXMgY2hhbmdlZCB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGNsaWNrYAotICAgICAgICAgICAgICAg
ICAgICB0aGUgcm91dGluZyBiZWhhdmlvciB3aWxsIHRyaWdnZXIgb24gdGhhdCBjdXN0b20gZXZl
bnQKLSAgICAgICAgICAgICAgICAgICAgaW5zdGVhZC4KLQotICAgICAgICAgICAgICAgICAgICBA
ZXZlbnQgY2xpY2sKLSAgICAgICAgICAgICAgICAgICoqLwotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgQW4gb3ZlcnJpZGFibGUgbWV0aG9kIGNhbGxlZCB3aGVuIExpbmtW
aWV3IG9iamVjdHMgYXJlIGluc3RhbnRpYXRlZC4KLQotICAgICAgICAgICAgICAgICAgICBFeGFt
cGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgQXBwLk15TGlua1ZpZXcgPSBFbWJlci5MaW5rVmlldy5leHRlbmQoewotICAgICAgICAg
ICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5sb2co
J0V2ZW50IGlzICcgKyB0aGlzLmdldCgnZXZlbnROYW1lJykpOwotICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIE5PVEU6IElmIHlvdSBkbyBvdmVycmlkZSBgaW5pdGAgZm9y
IGEgZnJhbWV3b3JrIGNsYXNzIGxpa2UgYEVtYmVyLlZpZXdgIG9yCi0gICAgICAgICAgICAgICAg
ICAgIGBFbWJlci5BcnJheUNvbnRyb2xsZXJgLCBiZSBzdXJlIHRvIGNhbGwgYHRoaXMuX3N1cGVy
KClgIGluIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgYGluaXRgIGRlY2xhcmF0aW9uISBJZiB5
b3UgZG9uJ3QsIEVtYmVyIG1heSBub3QgaGF2ZSBhbiBvcHBvcnR1bml0eSB0bwotICAgICAgICAg
ICAgICAgICAgICBkbyBpbXBvcnRhbnQgc2V0dXAgd29yaywgYW5kIHlvdSdsbCBzZWUgc3RyYW5n
ZSBiZWhhdmlvciBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5pdAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVy
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYXAgZGVzaXJl
ZCBldmVudCBuYW1lIHRvIGludm9rZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgIHZhciBldmVu
dE5hbWUgPSBnZXQodGhpcywgJ2V2ZW50TmFtZScpOwotICAgICAgICAgICAgICAgIHRoaXMub24o
ZXZlbnROYW1lLCB0aGlzLCB0aGlzLl9pbnZva2UpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkg
b2JzZXJ2ZXJzIGluc3RhbGxlZCBkdXJpbmcgYGluaXRgIHRoYXQgZmlyZQotICAgICAgICAgICAg
ICAgICAgICB3aGVuZXZlciB0aGUgcGFyYW1zIGNoYW5nZQotCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX3BhcmFtc0NoYW5nZWQKLSAg
ICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuMy4wCi0gICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIF9wYXJhbXNDaGFuZ2VkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKCdyZXNvbHZlZFBhcmFtcycpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgVGhpcyBpcyBjYWxsZWQg
dG8gc2V0dXAgb2JzZXJ2ZXJzIHRoYXQgd2lsbCB0cmlnZ2VyIGEgcmVyZW5kZXIuCi0KLSAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX3NldHVw
UGF0aE9ic2VydmVycwotICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjMuMAotICAgICAgICAg
ICAgICAgICAgKiovCi0gICAgICAgICAgICBfc2V0dXBQYXRoT2JzZXJ2ZXJzOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB2YXIgaGVscGVyUGFyYW1ldGVycyA9IHRoaXMucGFyYW1ldGVy
cywKLSAgICAgICAgICAgICAgICBsaW5rVGV4dFBhdGggPSBoZWxwZXJQYXJhbWV0ZXJzLm9wdGlv
bnMubGlua1RleHRQYXRoLAotICAgICAgICAgICAgICAgIHBhdGhzID0gZ2V0UmVzb2x2ZWRQYXRo
cyhoZWxwZXJQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5n
dGgsCi0gICAgICAgICAgICAgICAgcGF0aCwgaSwgbm9ybWFsaXplZFBhdGg7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAobGlua1RleHRQYXRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6
ZWRQYXRoID0gZ2V0Tm9ybWFsaXplZFBhdGgobGlua1RleHRQYXRoLCBoZWxwZXJQYXJhbWV0ZXJz
KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9ic2VydmVyKG5vcm1hbGl6ZWRQ
YXRoLnJvb3QsIG5vcm1hbGl6ZWRQYXRoLnBhdGgsIHRoaXMsIHRoaXMucmVyZW5kZXIpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChudWxsID09PSBwYXRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBBIGxpdGVyYWwgdmFsdWUgd2FzIHByb3ZpZGVkLCBub3QgYSBwYXRoLCBzbyBub3RoaW5nIHRv
IG9ic2VydmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID0gZ2V0Tm9y
bWFsaXplZFBhdGgocGF0aCwgaGVscGVyUGFyYW1ldGVycyk7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMucmVnaXN0ZXJPYnNlcnZlcihub3JtYWxpemVkUGF0aC5yb290LCBub3JtYWxpemVkUGF0
aC5wYXRoLCB0aGlzLCB0aGlzLl9wYXJhbXNDaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcXVlcnlQYXJhbXNPYmplY3QgPSB0aGlzLnF1ZXJ5UGFyYW1z
T2JqZWN0OwotICAgICAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtc09iamVjdCkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gcXVlcnlQYXJhbXNPYmplY3QudmFsdWVzOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgb2JzZXJ2ZXJzIGZvciBhbGwgb2YgdGhlIGhh
c2ggb3B0aW9ucwotICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlZCBpbiB0aGUgKHF1ZXJ5
LXBhcmFtcykgc3ViZXhwcmVzc2lvbi4KLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayBp
biB2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blBy
b3BlcnR5KGspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVy
eVBhcmFtc09iamVjdC50eXBlc1trXSA9PT0gJ0lEJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbGl6ZWRQYXRoID0gZ2V0Tm9ybWFsaXplZFBhdGgodmFsdWVzW2tdLCBoZWxw
ZXJQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVy
T2JzZXJ2ZXIobm9ybWFsaXplZFBhdGgucm9vdCwgbm9ybWFsaXplZFBhdGgucGF0aCwgdGhpcywg
dGhpcy5fcGFyYW1zQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
c3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXR1
cFBhdGhPYnNlcnZlcnMoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotCi0g
ICAgICAgICAgICAgICAgICAgIEFjY2Vzc2VkIGFzIGEgY2xhc3NuYW1lIGJpbmRpbmcgdG8gYXBw
bHkgdGhlIGBMaW5rVmlld2AncyBgZGlzYWJsZWRDbGFzc2AKLSAgICAgICAgICAgICAgICAgICAg
Q1NTIGBjbGFzc2AgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgbGluayBpcyBkaXNhYmxlZC4KLQot
ICAgICAgICAgICAgICAgICAgICBXaGVuIGB0cnVlYCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZWxl
bWVudCB3aWxsIG5vdCB0cmlnZ2VyIHJvdXRlIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBkaXNhYmxlZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRp
c2FibGVkOiBjb21wdXRlZChmdW5jdGlvbiBjb21wdXRlTGlua1ZpZXdEaXNhYmxlZChrZXksIHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5zZXQoJ19pc0Rpc2FibGVkJywgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/IGdldCh0aGlzLCAnZGlz
YWJsZWRDbGFzcycpIDogZmFsc2U7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vzc2VkIGFzIGEgY2xhc3NuYW1lIGJpbmRpbmcgdG8g
YXBwbHkgdGhlIGBMaW5rVmlld2AncyBgYWN0aXZlQ2xhc3NgCi0gICAgICAgICAgICAgICAgICAg
IENTUyBgY2xhc3NgIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGxpbmsgaXMgYWN0aXZlLgotCi0g
ICAgICAgICAgICAgICAgICAgIEEgYExpbmtWaWV3YCBpcyBjb25zaWRlcmVkIGFjdGl2ZSB3aGVu
IGl0cyBgY3VycmVudFdoZW5gIHByb3BlcnR5IGlzIGB0cnVlYAotICAgICAgICAgICAgICAgICAg
ICBvciB0aGUgYXBwbGljYXRpb24ncyBjdXJyZW50IHJvdXRlIGlzIHRoZSByb3V0ZSB0aGUgYExp
bmtWaWV3YCB3b3VsZCB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zIGlu
dG8uCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGFjdGl2ZQotICAgICAgICAgICAg
ICAgICAgKiovCi0gICAgICAgICAgICBhY3RpdmU6IGNvbXB1dGVkKCdsb2FkZWRQYXJhbXMnLCBm
dW5jdGlvbiBjb21wdXRlTGlua1ZpZXdBY3RpdmUoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdl
dCh0aGlzLCAnbG9hZGluZycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gZ2V0KHRo
aXMsICdyb3V0ZXInKSwKLSAgICAgICAgICAgICAgICBsb2FkZWRQYXJhbXMgPSBnZXQodGhpcywg
J2xvYWRlZFBhcmFtcycpLAotICAgICAgICAgICAgICAgIGNvbnRleHRzID0gbG9hZGVkUGFyYW1z
Lm1vZGVscywKLSAgICAgICAgICAgICAgICBjdXJyZW50V2hlbiA9IHRoaXMuY3VycmVudFdoZW4g
fHwgbG9hZGVkUGFyYW1zLnRhcmdldFJvdXRlTmFtZSwKLSAgICAgICAgICAgICAgICBoYW5kbGVy
cyA9IHJvdXRlci5yb3V0ZXIucmVjb2duaXplci5oYW5kbGVyc0ZvcihjdXJyZW50V2hlbiksCi0g
ICAgICAgICAgICAgICAgbGVhZk5hbWUgPSBoYW5kbGVyc1toYW5kbGVycy5sZW5ndGgtMV0uaGFu
ZGxlciwKLSAgICAgICAgICAgICAgICBtYXhpbXVtQ29udGV4dHMgPSBudW1iZXJPZkNvbnRleHRz
QWNjZXB0ZWRCeUhhbmRsZXIoY3VycmVudFdoZW4sIGhhbmRsZXJzKTsKLQotICAgICAgICAgICAg
ICAgIC8vIE5PVEU6IGFueSB1Z2xpbmVzcyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYWN0aXZlbmVz
cyBpcyBsYXJnZWx5Ci0gICAgICAgICAgICAgICAgLy8gZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2Ug
c3VwcG9ydCBhdXRvbWF0aWMgbm9ybWFsaXppbmcgb2YKLSAgICAgICAgICAgICAgICAvLyBgcmVz
b3VyY2VgIC0+IGByZXNvdXJjZS5pbmRleGAsIGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlCi0g
ICAgICAgICAgICAgICAgLy8gZHluYW1pYyBzZWdtZW50cyAvIHF1ZXJ5IHBhcmFtcyBkZWZpbmVk
IG9uIGByZXNvdXJjZS5pbmRleGAKLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjb21wbGljYXRl
cyAoYW5kIG1ha2VzIHNvbWV3aGF0IGFtYmlndW91cykgdGhlIGNhbGN1bGF0aW9uCi0gICAgICAg
ICAgICAgICAgLy8gb2YgYWN0aXZlbmVzcyBmb3IgbGlua3MgdGhhdCBsaW5rIHRvIGByZXNvdXJj
ZWAgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IHRvIGByZXNvdXJjZS5p
bmRleGAuCi0KLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBjb250
ZXh0cyByZXZlcnQgYmFjayB0byBmdWxsIHJvdXRlIG5hbWUKLSAgICAgICAgICAgICAgICAvLyB0
aGlzIGlzIGJlY2F1c2UgdGhlIGxlYWYgcm91dGUgd2lsbCB1c2Ugb25lIG9mIHRoZSBjb250ZXh0
cwotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0cy5sZW5ndGggPiBtYXhpbXVtQ29udGV4dHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFdoZW4gPSBsZWFmTmFtZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHJvdXRlQXJncyhjdXJyZW50
V2hlbiwgY29udGV4dHMsIG51bGwpOwotICAgICAgICAgICAgICAgIHZhciBpc0FjdGl2ZSA9IHJv
dXRlci5pc0FjdGl2ZS5hcHBseShyb3V0ZXIsIGFyZ3MpOwotICAgICAgICAgICAgICAgIGlmICgh
aXNBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRXaGVuICYmIGxl
YWZOYW1lID09PSBsb2FkZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciB2aXNpYmxlUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAg
bWVyZ2UodmlzaWJsZVF1ZXJ5UGFyYW1zLCBsb2FkZWRQYXJhbXMucXVlcnlQYXJhbXMpOwotICAg
ICAgICAgICAgICAgICAgICByb3V0ZXIuX3ByZXBhcmVRdWVyeVBhcmFtcyhsb2FkZWRQYXJhbXMu
dGFyZ2V0Um91dGVOYW1lLCBsb2FkZWRQYXJhbXMubW9kZWxzLCB2aXNpYmxlUXVlcnlQYXJhbXMp
OwotICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZSA9IHNoYWxsb3dFcXVhbCh2aXNpYmxlUXVl
cnlQYXJhbXMsIHJvdXRlci5yb3V0ZXIuc3RhdGUucXVlcnlQYXJhbXMpOwotICAgICAgICAgICAg
ICAgIH0KLQotCi0gICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnZXQodGhpcywgJ2FjdGl2ZUNsYXNzJyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBY2Nlc3NlZCBhcyBhIGNsYXNzbmFtZSBiaW5kaW5nIHRvIGFwcGx5IHRoZSBgTGlua1ZpZXdg
J3MgYGxvYWRpbmdDbGFzc2AKLSAgICAgICAgICAgICAgICAgICAgQ1NTIGBjbGFzc2AgdG8gdGhl
IGVsZW1lbnQgd2hlbiB0aGUgbGluayBpcyBsb2FkaW5nLgotCi0gICAgICAgICAgICAgICAgICAg
IEEgYExpbmtWaWV3YCBpcyBjb25zaWRlcmVkIGxvYWRpbmcgd2hlbiBpdCBoYXMgYXQgbGVhc3Qg
b25lCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB3aG9zZSB2YWx1ZSBpcyBjdXJyZW50
bHkgbnVsbCBvciB1bmRlZmluZWQuIER1cmluZwotICAgICAgICAgICAgICAgICAgICB0aGlzIHRp
bWUsIGNsaWNraW5nIHRoZSBsaW5rIHdpbGwgcGVyZm9ybSBubyB0cmFuc2l0aW9uIGFuZAotICAg
ICAgICAgICAgICAgICAgICBlbWl0IGEgd2FybmluZyB0aGF0IHRoZSBsaW5rIGlzIHN0aWxsIGlu
IGEgbG9hZGluZyBzdGF0ZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbG9hZGlu
ZwotICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBsb2FkaW5nOiBjb21wdXRlZCgn
bG9hZGVkUGFyYW1zJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtWaWV3TG9hZGluZygpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWdldCh0aGlzLCAnbG9hZGVkUGFyYW1zJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnbG9hZGluZ0NsYXNzJyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBSZXR1cm5zIHRoZSBhcHBsaWNhdGlvbidzIG1haW4gcm91dGVyIGZyb20gdGhlIGNvbnRh
aW5lci4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAg
ICBAcHJvcGVydHkgcm91dGVyCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIHJv
dXRlcjogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0
aGlzLCAnY29udHJvbGxlcicpLmNvbnRhaW5lci5sb29rdXAoJ3JvdXRlcjptYWluJyk7Ci0gICAg
ICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEV2ZW50
IGhhbmRsZXIgdGhhdCBpbnZva2VzIHRoZSBsaW5rLCBhY3RpdmF0aW5nIHRoZSBhc3NvY2lhdGVk
IHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgX2ludm9rZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0V2ZW50fSBl
dmVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9pbnZva2U6IGZ1bmN0aW9u
KGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1NpbXBsZUNsaWNrKGV2ZW50KSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2ZW50RGVmYXVsdCAhPT0gZmFsc2UpIHsKLQotICAg
ICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnViYmxlcyA9PT0gZmFsc2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnX2lzRGlzYWJsZWQnKSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnbG9hZGluZycpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLkxvZ2dlci53YXJuKCJUaGlzIGxpbmstdG8gaXMgaW4gYW4gaW5hY3RpdmUg
bG9hZGluZyBzdGF0ZSBiZWNhdXNlIGF0IGxlYXN0IG9uZSBvZiBpdHMgcGFyYW1ldGVycyBwcmVz
ZW50bHkgaGFzIGEgbnVsbC91bmRlZmluZWQgdmFsdWUsIG9yIHRoZSBwcm92aWRlZCByb3V0ZSBu
YW1lIGlzIGludmFsaWQuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gZ2V0KHRoaXMs
ICdyb3V0ZXInKSwKLSAgICAgICAgICAgICAgICBsb2FkZWRQYXJhbXMgPSBnZXQodGhpcywgJ2xv
YWRlZFBhcmFtcycpOwotCi0gICAgICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSByb3V0ZXIu
X2RvVHJhbnNpdGlvbihsb2FkZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1lLCBsb2FkZWRQYXJhbXMu
bW9kZWxzLCBsb2FkZWRQYXJhbXMucXVlcnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIGlmIChn
ZXQodGhpcywgJ3JlcGxhY2UnKSkgewotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLm1l
dGhvZCgncmVwbGFjZScpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFNjaGVkdWxlIGVhZ2VyIFVSTCB1cGRhdGUsIGJ1dCBhZnRlciB3ZSd2ZSBnaXZlbiB0aGUgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgIC8vIGEgY2hhbmNlIHRvIHN5bmNocm9ub3VzbHkgcmVk
aXJlY3QuCi0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhbHdheXMgZ2VuZXJhdGUgdGhl
IFVSTCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBocmVmIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAv
LyB0aGUgaHJlZiB3aWxsIGluY2x1ZGUgYW55IHJvb3RVUkwgc2V0LCBidXQgdGhlIHJvdXRlciBl
eHBlY3RzIGEgVVJMCi0gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBpdCEgTm90ZSB0aGF0IHdl
IGRvbid0IHVzZSB0aGUgZmlyc3QgbGV2ZWwgcm91dGVyIGJlY2F1c2UgaXQKLSAgICAgICAgICAg
ICAgICAvLyBjYWxscyBsb2NhdGlvbi5mb3JtYXRVUkwoKSwgd2hpY2ggYWxzbyB3b3VsZCBhZGQg
dGhlIHJvb3RVUkwhCi0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSByb3V0ZUFyZ3MobG9hZGVk
UGFyYW1zLnRhcmdldFJvdXRlTmFtZSwgbG9hZGVkUGFyYW1zLm1vZGVscywgdHJhbnNpdGlvbi5z
dGF0ZS5xdWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgdmFyIHVybCA9IHJvdXRlci5yb3V0
ZXIuZ2VuZXJhdGUuYXBwbHkocm91dGVyLnJvdXRlciwgYXJncyk7Ci0KLSAgICAgICAgICAgICAg
ICBydW4uc2NoZWR1bGVPbmNlKCdyb3V0ZXJUcmFuc2l0aW9ucycsIHRoaXMsIHRoaXMuX2VhZ2Vy
VXBkYXRlVXJsLCB0cmFuc2l0aW9uLCB1cmwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgX2VhZ2VyVXBkYXRlVXJsCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB0cmFu
c2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBocmVmCi0gICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIF9lYWdlclVwZGF0ZVVybDogZnVuY3Rpb24odHJhbnNpdGlvbiwg
aHJlZikgewotICAgICAgICAgICAgICAgIGlmICghdHJhbnNpdGlvbi5pc0FjdGl2ZSB8fCAhdHJh
bnNpdGlvbi51cmxNZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiB3
YXMgYWJvcnRlZCwgYWxyZWFkeSByYW4gdG8gY29tcGxldGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgLy8gb3IgaXQgaGFzIGEgbnVsbCB1cmwtdXBkYXRlZCBtZXRob2QuCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aHJlZi5pbmRleE9mKCcjJykgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhy
ZWYuc2xpY2UoMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUmUt
dXNlIHRoZSByb3V0ZXJqcyBob29rcyBzZXQgdXAgYnkgdGhlIEVtYmVyIHJvdXRlci4KLSAgICAg
ICAgICAgICAgICB2YXIgcm91dGVyanMgPSBnZXQodGhpcywgJ3JvdXRlci5yb3V0ZXInKTsKLSAg
ICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbi51cmxNZXRob2QgPT09ICd1cGRhdGUnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJvdXRlcmpzLnVwZGF0ZVVSTChocmVmKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb24udXJsTWV0aG9kID09PSAncmVwbGFjZScpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcm91dGVyanMucmVwbGFjZVVSTChocmVmKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGxhdGVyIHVwZGF0ZSB1cmwgcmVm
aXJlLgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24ubWV0aG9kKG51bGwpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENvbXB1dGVkIHBy
b3BlcnR5IHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZWQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGBsaW5rLXRvYCBoZWxwZXIsCi0gICAg
ICAgICAgICAgICAgICAgIGUuZy46Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgaGJzCi0gICAg
ICAgICAgICAgICAgICAgIHt7bGluay10byBhIGIgJzEyMycgY319Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgZ2VuZXJhdGUgYSBgcmVzb2x2ZWRQ
YXJhbXNgIG9mOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAg
ICAgIFthT2JqZWN0LCBiT2JqZWN0LCAnMTIzJywgY09iamVjdF0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fQotICAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXNvbHZlZFBhcmFtczogY29tcHV0ZWQoJ3Jv
dXRlci51cmwnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9
IHRoaXMucGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gcGFyYW1ldGVycy5v
cHRpb25zLAotICAgICAgICAgICAgICAgIHR5cGVzID0gb3B0aW9ucy50eXBlcywKLSAgICAgICAg
ICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRhLAotICAgICAgICAgICAgICAgIHRhcmdldFJvdXRl
TmFtZSwgbW9kZWxzOwotCi0gICAgICAgICAgICAgICAgdmFyIG9ubHlRdWVyeVBhcmFtc1N1cHBs
aWVkID0gKHBhcmFtZXRlcnMucGFyYW1zLmxlbmd0aCA9PT0gMCk7Ci0gICAgICAgICAgICAgICAg
aWYgKG9ubHlRdWVyeVBhcmFtc1N1cHBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBh
cHBDb250cm9sbGVyID0gdGhpcy5jb250YWluZXIubG9va3VwKCdjb250cm9sbGVyOmFwcGxpY2F0
aW9uJyk7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFJvdXRlTmFtZSA9IGdldChhcHBDb250
cm9sbGVyLCAnY3VycmVudFJvdXRlTmFtZScpOwotICAgICAgICAgICAgICAgICAgICBtb2RlbHMg
PSBbXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtb2Rl
bHMgPSByZXNvbHZlUGFyYW1zKHBhcmFtZXRlcnMuY29udGV4dCwgcGFyYW1ldGVycy5wYXJhbXMs
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzOiB0eXBlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGE6IGRhdGEgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRSb3V0ZU5hbWUgPSBtb2RlbHMuc2hpZnQoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3VwcGxpZWRRdWVyeVBhcmFtcyA9IGdldFJl
c29sdmVkUXVlcnlQYXJhbXModGhpcywgdGFyZ2V0Um91dGVOYW1lKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFJvdXRlTmFtZTogdGFyZ2V0
Um91dGVOYW1lLAotICAgICAgICAgICAgICAgICAgICBtb2RlbHM6IG1vZGVscywKLSAgICAgICAg
ICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHN1cHBsaWVkUXVlcnlQYXJhbXMKLSAgICAgICAgICAg
ICAgICB9OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBDb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgcm91dGUg
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZHluYW1pYyBzZWdtZW50cywgYW5kIHF1ZXJ5IHBh
cmFtcy4gUmV0dXJucyBmYWxzeSBpZgotICAgICAgICAgICAgICAgICAgICBmb3IgbnVsbC91bmRl
ZmluZWQgcGFyYW1zIHRvIGluZGljYXRlIHRoYXQgdGhlIGxpbmsgdmlldwotICAgICAgICAgICAg
ICAgICAgICBpcyBzdGlsbCBpbiBhIGxvYWRpbmcgc3RhdGUuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5Ci0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSByb3V0ZSBuYW1lIGFuZCBh
bnkgZHluYW1pYyBzZWdtZW50cwotICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBs
b2FkZWRQYXJhbXM6IGNvbXB1dGVkKCdyZXNvbHZlZFBhcmFtcycsIGZ1bmN0aW9uIGNvbXB1dGVM
aW5rVmlld1JvdXRlQXJncygpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZWRQYXJhbXMg
PSBnZXQodGhpcywgJ3Jlc29sdmVkUGFyYW1zJyksCi0gICAgICAgICAgICAgICAgcm91dGVyID0g
Z2V0KHRoaXMsICdyb3V0ZXInKSwKLSAgICAgICAgICAgICAgICBuYW1lZFJvdXRlID0gcmVzb2x2
ZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKCFuYW1lZFJv
dXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZm10KCJUaGUgYXR0ZW1wdCB0byBsaW5rLXRv
IHJvdXRlICclQCcgZmFpbGVkLiAiICsKLSAgICAgICAgICAgICAgICAiVGhlIHJvdXRlciBkaWQg
bm90IGZpbmQgJyVAJyBpbiBpdHMgcG9zc2libGUgcm91dGVzOiAnJUAnIiwKLSAgICAgICAgICAg
ICAgICBbbmFtZWRSb3V0ZSwgbmFtZWRSb3V0ZSwga2V5cyhyb3V0ZXIucm91dGVyLnJlY29nbml6
ZXIubmFtZXMpLmpvaW4oIicsICciKV0pLAotICAgICAgICAgICAgICAgIHJvdXRlci5oYXNSb3V0
ZShuYW1lZFJvdXRlKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXBhcmFtc0FyZUxvYWRlZChy
ZXNvbHZlZFBhcmFtcy5tb2RlbHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRQYXJhbXM7
Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmplY3Q6IG51bGws
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBlbGVtZW50
J3MgYGhyZWZgIGF0dHJpYnV0ZSB0byB0aGUgdXJsIGZvcgotICAgICAgICAgICAgICAgICAgICB0
aGUgYExpbmtWaWV3YCdzIHRhcmdldGVkIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIElm
IHRoZSBgTGlua1ZpZXdgJ3MgYHRhZ05hbWVgIGlzIGNoYW5nZWQgdG8gYSB2YWx1ZSBvdGhlcgot
ICAgICAgICAgICAgICAgICAgICB0aGFuIGBhYCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9y
ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGhyZWYKLSAgICAgICAgICAgICAg
ICAgICoqLwotICAgICAgICAgICAgaHJlZjogY29tcHV0ZWQoJ2xvYWRlZFBhcmFtcycsIGZ1bmN0
aW9uIGNvbXB1dGVMaW5rVmlld0hyZWYoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlz
LCAndGFnTmFtZScpICE9PSAnYScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSBnZXQodGhpcywg
J3JvdXRlcicpLAotICAgICAgICAgICAgICAgIGxvYWRlZFBhcmFtcyA9IGdldCh0aGlzLCAnbG9h
ZGVkUGFyYW1zJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWxvYWRlZFBhcmFtcykgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdsb2FkaW5nSHJlZicpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB2aXNpYmxlUXVlcnlQYXJhbXMgPSB7
fTsKLQotICAgICAgICAgICAgICAgIG1lcmdlKHZpc2libGVRdWVyeVBhcmFtcywgbG9hZGVkUGFy
YW1zLnF1ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAgICAgICByb3V0ZXIuX3ByZXBhcmVRdWVyeVBh
cmFtcyhsb2FkZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1lLCBsb2FkZWRQYXJhbXMubW9kZWxzLCB2
aXNpYmxlUXVlcnlQYXJhbXMpOwotCi0KLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHJvdXRl
QXJncyhsb2FkZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1lLCBsb2FkZWRQYXJhbXMubW9kZWxzLCB2
aXNpYmxlUXVlcnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByb3V0ZXIu
Z2VuZXJhdGUuYXBwbHkocm91dGVyLCBhcmdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBUaGUgZGVmYXVsdCBocmVmIHZhbHVlIHRvIHVzZSB3aGlsZSBhIGxpbmstdG8gaXMgbG9h
ZGluZy4KLSAgICAgICAgICAgICAgICAgICAgT25seSBhcHBsaWVzIHdoZW4gdGFnTmFtZSBpcyAn
YScKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbG9hZGluZ0hyZWYKLSAgICAgICAg
ICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0ICMK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBsb2FkaW5nSHJlZjogJyMnCi0gICAg
ICAgIH0pOwotCi0gICAgICAgIExpbmtWaWV3LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gIkxpbmtWaWV3IjsKLSAgICAgICAgfTsKLQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBUaGUgYHt7bGluay10b319YCBoZWxwZXIgcmVuZGVycyBhIGxpbmsgdG8g
dGhlIHN1cHBsaWVkCi0gICAgICAgICAgICAgIGByb3V0ZU5hbWVgIHBhc3NpbmcgYW4gb3B0aW9u
YWxseSBzdXBwbGllZCBtb2RlbCB0byB0aGUKLSAgICAgICAgICAgICAgcm91dGUgYXMgaXRzIGBt
b2RlbGAgY29udGV4dCBvZiB0aGUgcm91dGUuIFRoZSBibG9jawotICAgICAgICAgICAgICBmb3Ig
YHt7bGluay10b319YCBiZWNvbWVzIHRoZSBpbm5lckhUTUwgb2YgdGhlIHJlbmRlcmVkCi0gICAg
ICAgICAgICAgIGVsZW1lbnQ6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICB7eyNsaW5rLXRvICdwaG90b0dhbGxlcnknfX0KLSAgICAgICAgICAgICAgICBHcmVh
dCBIYW1zdGVyIFBob3RvcwotICAgICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8YSBocmVmPSIv
aGFtc3Rlci1waG90b3MiPgotICAgICAgICAgICAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0g
ICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMj
IFN1cHBseWluZyBhIHRhZ05hbWUKLSAgICAgICAgICAgICAgQnkgZGVmYXVsdCBge3tsaW5rLXRv
fX1gIHJlbmRlcnMgYW4gYDxhPmAgZWxlbWVudC4gVGhpcyBjYW4KLSAgICAgICAgICAgICAgYmUg
b3ZlcnJpZGRlbiBmb3IgYSBzaW5nbGUgdXNlIG9mIGB7e2xpbmstdG99fWAgYnkgc3VwcGx5aW5n
Ci0gICAgICAgICAgICAgIGEgYHRhZ05hbWVgIG9wdGlvbjoKLQotICAgICAgICAgICAgICBgYGBo
YW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgdGFnTmFt
ZT0ibGkifX0KLSAgICAgICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgICAgICAg
ICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAgR3JlYXQgSGFtc3RlciBQ
aG90b3MKLSAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgVG8gb3ZlcnJpZGUgdGhpcyBvcHRpb24gZm9yIHlvdXIgZW50aXJlIGFwcGxpY2F0aW9u
LCBzZWUKLSAgICAgICAgICAgICAgIk92ZXJyaWRpbmcgQXBwbGljYXRpb24td2lkZSBEZWZhdWx0
cyIuCi0KLSAgICAgICAgICAgICAgIyMjIERpc2FibGluZyB0aGUgYGxpbmstdG9gIGhlbHBlcgot
ICAgICAgICAgICAgICBCeSBkZWZhdWx0IGB7e2xpbmstdG99fWAgaXMgZW5hYmxlZC4KLSAgICAg
ICAgICAgICAgYW55IHBhc3NlZCB2YWx1ZSB0byBgZGlzYWJsZWRgIGhlbHBlciBwcm9wZXJ0eSB3
aWxsIGRpc2FibGUgdGhlIGBsaW5rLXRvYCBoZWxwZXIuCi0KLSAgICAgICAgICAgICAgc3RhdGlj
IHVzZTogdGhlIGBkaXNhYmxlZGAgb3B0aW9uOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgICAgICAgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5JyBkaXNhYmxlZD10cnVl
fX0KLSAgICAgICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgICAgICAgICAgICB7
ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgZHluYW1pYyB1
c2U6IHRoZSBgZGlzYWJsZWRXaGVuYCBvcHRpb246Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxl
YmFycwotICAgICAgICAgICAgICB7eyNsaW5rLXRvICdwaG90b0dhbGxlcnknIGRpc2FibGVkV2hl
bj1jb250cm9sbGVyLnNvbWVQcm9wZXJ0eX19Ci0gICAgICAgICAgICAgICAgR3JlYXQgSGFtc3Rl
ciBQaG90b3MKLSAgICAgICAgICAgICAge3svbGluay10b319Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIGFueSBwYXNzZWQgdmFsdWUgdG8gYGRpc2FibGVkYCB3aWxsIGRpc2Fi
bGUgaXQgZXhjZXB0IGB1bmRlZmluZWRgLgotICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCBv
bmx5IGB0cnVlYCBkaXNhYmxlIHRoZSBgbGluay10b2AgaGVscGVyIHlvdSBjYW4KLSAgICAgICAg
ICAgICAgb3ZlcnJpZGUgdGhlIGdsb2JhbCBiZWhhdmlvdXIgb2YgYEVtYmVyLkxpbmtWaWV3YC4K
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkxpbmtW
aWV3LnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IEVtYmVyLmNvbXB1dGVkKGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdfaXNEaXNhYmxlZCcsIHZh
bHVlID09PSB0cnVlKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSA9PT0gdHJ1ZSA/IGdldCh0aGlzLCAnZGlzYWJsZWRDbGFzcycpIDogZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIHNlZSAiT3ZlcnJpZGluZyBBcHBsaWNhdGlvbi13aWRlIERlZmF1
bHRzIiBmb3IgbW9yZS4KLQotICAgICAgICAgICAgICAjIyMgSGFuZGxpbmcgYGhyZWZgCi0gICAg
ICAgICAgICAgIGB7e2xpbmstdG99fWAgd2lsbCB1c2UgeW91ciBhcHBsaWNhdGlvbidzIFJvdXRl
ciB0bwotICAgICAgICAgICAgICBmaWxsIHRoZSBlbGVtZW50J3MgYGhyZWZgIHByb3BlcnR5IHdp
dGggYSB1cmwgdGhhdAotICAgICAgICAgICAgICBtYXRjaGVzIHRoZSBwYXRoIHRvIHRoZSBzdXBw
bGllZCBgcm91dGVOYW1lYCBmb3IgeW91cgotICAgICAgICAgICAgICByb3V0ZXJzJ3MgY29uZmln
dXJlZCBgTG9jYXRpb25gIHNjaGVtZSwgd2hpY2ggZGVmYXVsdHMKLSAgICAgICAgICAgICAgdG8g
RW1iZXIuSGFzaExvY2F0aW9uLgotCi0gICAgICAgICAgICAgICMjIyBIYW5kbGluZyBjdXJyZW50
IHJvdXRlCi0gICAgICAgICAgICAgIGB7e2xpbmstdG99fWAgd2lsbCBhcHBseSBhIENTUyBjbGFz
cyBuYW1lIG9mICdhY3RpdmUnCi0gICAgICAgICAgICAgIHdoZW4gdGhlIGFwcGxpY2F0aW9uJ3Mg
Y3VycmVudCByb3V0ZSBtYXRjaGVzCi0gICAgICAgICAgICAgIHRoZSBzdXBwbGllZCByb3V0ZU5h
bWUuIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24ncwotICAgICAgICAgICAgICBjdXJy
ZW50IHJvdXRlIGlzICdwaG90b0dhbGxlcnkucmVjZW50JyB0aGUgZm9sbG93aW5nCi0gICAgICAg
ICAgICAgIHVzZSBvZiBge3tsaW5rLXRvfX1gOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgICAgICAgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5LnJlY2VudCd9fQotICAg
ICAgICAgICAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zIGZyb20gdGhlIGxhc3Qgd2VlawotICAg
ICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgd2lsbCByZXN1bHQgaW4KLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAg
IDxhIGhyZWY9Ii9oYW1zdGVyLXBob3Rvcy90aGlzLXdlZWsiIGNsYXNzPSJhY3RpdmUiPgotICAg
ICAgICAgICAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAgICAgICAgICAgIDwvYT4KLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIENTUyBjbGFzcyBuYW1lIHVzZWQg
Zm9yIGFjdGl2ZSBjbGFzc2VzIGNhbiBiZSBjdXN0b21pemVkCi0gICAgICAgICAgICAgIGZvciBh
IHNpbmdsZSB1c2Ugb2YgYHt7bGluay10b319YCBieSBwYXNzaW5nIGFuIGBhY3RpdmVDbGFzc2AK
LSAgICAgICAgICAgICAgb3B0aW9uOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5LnJlY2VudCcgYWN0aXZlQ2xhc3M9
ImN1cnJlbnQtdXJsIn19Ci0gICAgICAgICAgICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MgZnJv
bSB0aGUgbGFzdCB3ZWVrCi0gICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxhIGhyZWY9Ii9o
YW1zdGVyLXBob3Rvcy90aGlzLXdlZWsiIGNsYXNzPSJjdXJyZW50LXVybCI+Ci0gICAgICAgICAg
ICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKLSAgICAgICAgICAgICAgPC9hPgotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBUbyBvdmVycmlkZSB0aGlzIG9wdGlvbiBmb3IgeW91
ciBlbnRpcmUgYXBwbGljYXRpb24sIHNlZQotICAgICAgICAgICAgICAiT3ZlcnJpZGluZyBBcHBs
aWNhdGlvbi13aWRlIERlZmF1bHRzIi4KLQotICAgICAgICAgICAgICAjIyMgU3VwcGx5aW5nIGEg
bW9kZWwKLSAgICAgICAgICAgICAgQW4gb3B0aW9uYWwgbW9kZWwgYXJndW1lbnQgY2FuIGJlIHVz
ZWQgZm9yIHJvdXRlcyB3aG9zZQotICAgICAgICAgICAgICBwYXRocyBjb250YWluIGR5bmFtaWMg
c2VnbWVudHMuIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUKLSAgICAgICAgICAgICAgdGhlIG1v
ZGVsIGNvbnRleHQgb2YgdGhlIGxpbmtlZCByb3V0ZToKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRoaXMucmVzb3VyY2UoInBob3RvR2FsbGVyeSIsIHtwYXRoOiAiaGFtc3Rlci1w
aG90b3MvOnBob3RvX2lkIn0pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNsaW5rLXRv
ICdwaG90b0dhbGxlcnknIGFQaG90b319Ci0gICAgICAgICAgICAgICAge3thUGhvdG8udGl0bGV9
fQotICAgICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3Mv
NDIiPgotICAgICAgICAgICAgICAgIFRvbXN0ZXIKLSAgICAgICAgICAgICAgPC9hPgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgU3VwcGx5aW5nIG11bHRpcGxlIG1vZGVs
cwotICAgICAgICAgICAgICBGb3IgZGVlcC1saW5raW5nIHRvIHJvdXRlIHBhdGhzIHRoYXQgY29u
dGFpbiBtdWx0aXBsZQotICAgICAgICAgICAgICBkeW5hbWljIHNlZ21lbnRzLCBtdWx0aXBsZSBt
b2RlbCBhcmd1bWVudHMgY2FuIGJlIHVzZWQuCi0gICAgICAgICAgICAgIEFzIHRoZSByb3V0ZXIg
dHJhbnNpdGlvbnMgdGhyb3VnaCB0aGUgcm91dGUgcGF0aCwgZWFjaAotICAgICAgICAgICAgICBz
dXBwbGllZCBtb2RlbCBhcmd1bWVudCB3aWxsIGJlY29tZSB0aGUgY29udGV4dCBmb3IgdGhlCi0g
ICAgICAgICAgICAgIHJvdXRlIHdpdGggdGhlIGR5bmFtaWMgc2VnbWVudHM6Ci0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCJwaG90b0dhbGxlcnkiLCB7cGF0
aDogImhhbXN0ZXItcGhvdG9zLzpwaG90b19pZCJ9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgIHRoaXMucm91dGUoImNvbW1lbnQiLCB7cGF0aDogImNvbW1lbnRzLzpjb21tZW50X2lk
In0pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgYGBgCi0gICAgICAgICAgICAgIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUgdGhlIG1vZGVs
IGNvbnRleHQgb2YgdGhlIGxpbmtlZCByb3V0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGVi
YXJzCi0gICAgICAgICAgICAgIHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeS5jb21tZW50JyBhUGhv
dG8gY29tbWVudH19Ci0gICAgICAgICAgICAgICAge3tjb21tZW50LmJvZHl9fQotICAgICAgICAg
ICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3MvNDIvY29tbWVudC83
MTgiPgotICAgICAgICAgICAgICAgIEErKysgd291bGQgc251Z2dsZSBhZ2Fpbi4KLSAgICAgICAg
ICAgICAgPC9hPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgU3VwcGx5
aW5nIGFuIGV4cGxpY2l0IGR5bmFtaWMgc2VnbWVudCB2YWx1ZQotICAgICAgICAgICAgICBJZiB5
b3UgZG9uJ3QgaGF2ZSBhIG1vZGVsIG9iamVjdCBhdmFpbGFibGUgdG8gcGFzcyB0byBge3tsaW5r
LXRvfX1gLAotICAgICAgICAgICAgICBhbiBvcHRpb25hbCBzdHJpbmcgb3IgaW50ZWdlciBhcmd1
bWVudCBjYW4gYmUgcGFzc2VkIGZvciByb3V0ZXMgd2hvc2UKLSAgICAgICAgICAgICAgcGF0aHMg
Y29udGFpbiBkeW5hbWljIHNlZ21lbnRzLiBUaGlzIGFyZ3VtZW50IHdpbGwgYmVjb21lIHRoZSB2
YWx1ZQotICAgICAgICAgICAgICBvZiB0aGUgZHluYW1pYyBzZWdtZW50OgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgicGhvdG9HYWxsZXJ5Iiwge3BhdGg6
ICJoYW1zdGVyLXBob3Rvcy86cGhvdG9faWQifSk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAg
IHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgYVBob3RvSWR9fQotICAgICAgICAgICAgICAgIHt7
YVBob3RvLnRpdGxlfX0KLSAgICAgICAgICAgICAge3svbGluay10b319Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGEgaHJlZj0iL2hh
bXN0ZXItcGhvdG9zLzQyIj4KLSAgICAgICAgICAgICAgICBUb21zdGVyCi0gICAgICAgICAgICAg
IDwvYT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2hlbiB0cmFuc2l0aW9u
aW5nIGludG8gdGhlIGxpbmtlZCByb3V0ZSwgdGhlIGBtb2RlbGAgaG9vayB3aWxsCi0gICAgICAg
ICAgICAgIGJlIHRyaWdnZXJlZCB3aXRoIHBhcmFtZXRlcnMgaW5jbHVkaW5nIHRoaXMgcGFzc2Vk
IGlkZW50aWZpZXIuCi0KLSAgICAgICAgICAgICAgIyMjIEFsbG93aW5nIERlZmF1bHQgQWN0aW9u
Ci0KLSAgICAgICAgICAgICBCeSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1gIGhlbHBlciBwcmV2
ZW50cyB0aGUgZGVmYXVsdCBicm93c2VyIGFjdGlvbgotICAgICAgICAgICAgIGJ5IGNhbGxpbmcg
YHByZXZlbnREZWZhdWx0KClgIGFzIHRoaXMgc29ydCBvZiBhY3Rpb24gYnViYmxpbmcgaXMgbm9y
bWFsbHkKLSAgICAgICAgICAgICBoYW5kbGVkIGludGVybmFsbHkgYW5kIHdlIGRvIG5vdCB3YW50
IHRvIHRha2UgdGhlIGJyb3dzZXIgdG8gYSBuZXcgVVJMIChmb3IKLSAgICAgICAgICAgICBleGFt
cGxlKS4KLQotICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZp
b3Igc3BlY2lmeSBgcHJldmVudERlZmF1bHQ9ZmFsc2VgIGluCi0gICAgICAgICAgICAgeW91ciB0
ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7
I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgYVBob3RvSWQgcHJldmVudERlZmF1bHQ9ZmFsc2V9fQot
ICAgICAgICAgICAgICAgIHt7YVBob3RvSWQudGl0bGV9fQotICAgICAgICAgICAgICB7ey9saW5r
LXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIE92ZXJyaWRpbmcg
YXR0cmlidXRlcwotICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIGFueSBnaXZlbiBwcm9w
ZXJ0eSBvZiB0aGUgRW1iZXIuTGlua1ZpZXcKLSAgICAgICAgICAgICAgdGhhdCBpcyBnZW5lcmF0
ZWQgYnkgdGhlIGB7e2xpbmstdG99fWAgaGVscGVyIGJ5IHBhc3NpbmcKLSAgICAgICAgICAgICAg
a2V5L3ZhbHVlIHBhaXJzLCBsaWtlIHNvOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgICAgICAgICAge3sjbGluay10byAgYVBob3RvIHRhZ05hbWU9J2xpJyB0aXRsZT0nRm9s
bG93aW5nIHRoaXMgbGluayB3aWxsIGNoYW5nZSB5b3VyIGxpZmUnIGNsYXNzTmFtZXM9J3BpYyBz
d2VldCd9fQotICAgICAgICAgICAgICAgIFVoLW1hemluZyEKLSAgICAgICAgICAgICAge3svbGlu
ay10b319Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFNlZSBbRW1iZXIuTGlu
a1ZpZXddKC9hcGkvY2xhc3Nlcy9FbWJlci5MaW5rVmlldy5odG1sKSBmb3IgYQotICAgICAgICAg
ICAgICBjb21wbGV0ZSBsaXN0IG9mIG92ZXJyaWRlYWJsZSBwcm9wZXJ0aWVzLiBCZSBzdXJlIHRv
IGFsc28KLSAgICAgICAgICAgICAgY2hlY2sgb3V0IGluaGVyaXRlZCBwcm9wZXJ0aWVzIG9mIGBM
aW5rVmlld2AuCi0KLSAgICAgICAgICAgICAgIyMjIE92ZXJyaWRpbmcgQXBwbGljYXRpb24td2lk
ZSBEZWZhdWx0cwotICAgICAgICAgICAgICBgYHt7bGluay10b319YGAgY3JlYXRlcyBhbiBpbnN0
YW5jZSBvZiBFbWJlci5MaW5rVmlldwotICAgICAgICAgICAgICBmb3IgcmVuZGVyaW5nLiBUbyBv
dmVycmlkZSBvcHRpb25zIGZvciB5b3VyIGVudGlyZQotICAgICAgICAgICAgICBhcHBsaWNhdGlv
biwgcmVvcGVuIEVtYmVyLkxpbmtWaWV3IGFuZCBzdXBwbHkgdGhlCi0gICAgICAgICAgICAgIGRl
c2lyZWQgdmFsdWVzOgotCi0gICAgICAgICAgICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgIEVtYmVyLkxpbmtWaWV3LnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgYWN0aXZlQ2xhc3M6
ICJpcy1hY3RpdmUiLAotICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdsaScKLSAgICAgICAgICAg
ICAgfSkKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3Nz
aWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBldmVudCBpbgotICAgICAgICAgICAgICB0aGlz
IG1hbm5lcjoKLQotICAgICAgICAgICAgICBgYGAgamF2YXNjcmlwdAotICAgICAgICAgICAgICBF
bWJlci5MaW5rVmlldy5yZW9wZW4oewotICAgICAgICAgICAgICAgIGV2ZW50TmFtZTogJ2N1c3Rv
bUV2ZW50TmFtZScKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgbGluay10bwotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRs
ZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcm91dGVOYW1lCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF0qCi0gICAgICAgICAgICAgIEBw
YXJhbSBbb3B0aW9uc10ge09iamVjdH0gSGFuZGxlYmFycyBrZXkvdmFsdWUgcGFpcnMgb2Ygb3B0
aW9ucywgeW91IGNhbiBvdmVycmlkZSBhbnkgcHJvcGVydHkgb2YgRW1iZXIuTGlua1ZpZXcKLSAg
ICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgICBA
c2VlIHtFbWJlci5MaW5rVmlld30KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGxp
bmtUb0hlbHBlcihuYW1lKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzLCAtMSlbMF0sCi0gICAgICAgICAgICBwYXJhbXMgPSBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMCwgLTEpLAotICAgICAgICAgICAgaGFzaCA9IG9wdGlvbnMuaGFzaDsKLQotICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIHBhcmFtZXRl
cnMgdG8gdGhlIGxpbmstdG8gaGVscGVyLiIsIHBhcmFtcy5sZW5ndGgpOwotCi0gICAgICAgICAg
ICBpZiAocGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIFF1ZXJ5UGFyYW1zKSB7
Ci0gICAgICAgICAgICAgICAgaGFzaC5xdWVyeVBhcmFtc09iamVjdCA9IHBhcmFtcy5wb3AoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFzaC5kaXNhYmxlZEJpbmRpbmcgPSBoYXNo
LmRpc2FibGVkV2hlbjsKLQotICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZuKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGxpbmtUaXRsZSA9IHBhcmFtcy5zaGlmdCgpOwotICAgICAgICAgICAgICAg
IHZhciBsaW5rVHlwZSA9IG9wdGlvbnMudHlwZXMuc2hpZnQoKTsKLSAgICAgICAgICAgICAgICB2
YXIgY29udGV4dCA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnSUQn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGlua1RleHRQYXRoID0gbGlua1RpdGxl
OwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZuID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXJIYW5kbGViYXJzLmdldEVzY2FwZWQoY29udGV4
dCwgbGlua1RpdGxlLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZuID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlua1RpdGxlOwotICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaGFzaC5wYXJhbWV0ZXJzID0gewotICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRo
aXMsCi0gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgICAgICAgICBw
YXJhbXM6IHBhcmFtcwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgb3B0aW9ucy5oZWxw
ZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8ICdsaW5rLXRvJzsKLQotICAgICAgICAgICAg
cmV0dXJuIHZpZXdIZWxwZXIuY2FsbCh0aGlzLCBMaW5rVmlldywgb3B0aW9ucyk7Ci0gICAgICAg
IH0KLQotCi0KLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdxdWVyeS1w
YXJhbXMnLCBmdW5jdGlvbiBxdWVyeVBhcmFtc0hlbHBlcihvcHRpb25zKSB7Ci0gICAgICAgICAg
ICBFbWJlci5hc3NlcnQoZm10KCJUaGUgYHF1ZXJ5LXBhcmFtc2AgaGVscGVyIG9ubHkgYWNjZXB0
cyBoYXNoIHBhcmFtZXRlcnMsIGUuZy4gKHF1ZXJ5LXBhcmFtcyBxdWVyeVBhcmFtUHJvcGVydHlO
YW1lPSclQCcpIGFzIG9wcG9zZWQgdG8ganVzdCAocXVlcnktcGFyYW1zICclQCcpIiwgW29wdGlv
bnMsIG9wdGlvbnNdKSwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBRdWVyeVBhcmFtcy5jcmVhdGUoewotICAgICAgICAgICAgICAgIHZhbHVlczogb3B0aW9u
cy5oYXNoLAotICAgICAgICAgICAgICAgIHR5cGVzOiBvcHRpb25zLmhhc2hUeXBlcwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNl
ZSBbbGluay10b10oL2FwaS9jbGFzc2VzL0VtYmVyLkhhbmRsZWJhcnMuaGVscGVycy5odG1sI21l
dGhvZF9saW5rLXRvKQotCi0gICAgICAgICAgICAgIEBtZXRob2QgbGlua1RvCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBkZXByZWNh
dGVkCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSByb3V0ZU5hbWUKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XSoKLSAgICAgICAgICAgICAgQHJldHVybiB7U3Ry
aW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGVwcmVj
YXRlZExpbmtUb0hlbHBlcigpIHsKLSAgICAgICAgICAgIEVtYmVyLndhcm4oIlRoZSAnbGlua1Rv
JyB2aWV3IGhlbHBlciBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mICdsaW5rLXRvJyIpOwotICAg
ICAgICAgICAgcmV0dXJuIGxpbmtUb0hlbHBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2V0UmVzb2x2ZWRRdWVyeVBhcmFtcyhsaW5rVmll
dywgdGFyZ2V0Um91dGVOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgaGVscGVyUGFyYW1ldGVycyA9
IGxpbmtWaWV3LnBhcmFtZXRlcnMsCi0gICAgICAgICAgICBxdWVyeVBhcmFtc09iamVjdCA9IGxp
bmtWaWV3LnF1ZXJ5UGFyYW1zT2JqZWN0LAotICAgICAgICAgICAgcmVzb2x2ZWRRdWVyeVBhcmFt
cyA9IHt9OwotCi0gICAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zT2JqZWN0KSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc29sdmVkUXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB2YXIgcmF3UGFyYW1zID0gcXVlcnlQYXJhbXNPYmplY3QudmFsdWVzOwotCi0gICAg
ICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmF3UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyYXdQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUg
PSByYXdQYXJhbXNba2V5XSwKLSAgICAgICAgICAgICAgICB0eXBlID0gcXVlcnlQYXJhbXNPYmpl
Y3QudHlwZXNba2V5XTsKLQotICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnSUQnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkUGF0aCA9IGdldE5vcm1hbGl6ZWRQYXRo
KHZhbHVlLCBoZWxwZXJQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBF
bWJlckhhbmRsZWJhcnMuZ2V0KG5vcm1hbGl6ZWRQYXRoLnJvb3QsIG5vcm1hbGl6ZWRQYXRoLnBh
dGgsIGhlbHBlclBhcmFtZXRlcnMub3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJlc29sdmVkUXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkUXVlcnlQYXJhbXM7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBnZXROb3JtYWxpemVkUGF0aChwYXRoLCBoZWxwZXJQYXJhbWV0ZXJz
KSB7Ci0gICAgICAgICAgICByZXR1cm4gRW1iZXJIYW5kbGViYXJzLm5vcm1hbGl6ZVBhdGgoaGVs
cGVyUGFyYW1ldGVycy5jb250ZXh0LCBwYXRoLCBoZWxwZXJQYXJhbWV0ZXJzLm9wdGlvbnMuZGF0
YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJhbXNBcmVMb2FkZWQocGFyYW1z
KSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFyYW1zLmxlbmd0aDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOwotICAg
ICAgICAgICAgICAgIGlmIChwYXJhbSA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyYW0gPT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7Ci0gICAgICAgICAgICB2
YXIgazsKLSAgICAgICAgICAgIGZvciAoayBpbiBhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEu
aGFzT3duUHJvcGVydHkoaykgJiYgYVtrXSAhPT0gYltrXSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZm9yIChrIGluIGIpIHsKLSAgICAgICAgICAgICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0
eShrKSAmJiBhW2tdICE9PSBiW2tdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLkxpbmtWaWV3ID0gTGlua1Zp
ZXc7Ci0gICAgICAgIF9fZXhwb3J0c19fLmRlcHJlY2F0ZWRMaW5rVG9IZWxwZXIgPSBkZXByZWNh
dGVkTGlua1RvSGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5saW5rVG9IZWxwZXIgPSBsaW5r
VG9IZWxwZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMv
aGVscGVycy9vdXRsZXQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLXJ1bnRpbWUv
c3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci12aWV3cy92aWV3cy9jb250YWluZXJfdmlldyIsICJl
bWJlci1oYW5kbGViYXJzL3ZpZXdzL21ldGFtb3JwaF92aWV3IiwgImVtYmVyLWhhbmRsZWJhcnMv
aGVscGVycy92aWV3IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVw
ZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRl
bmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIGFzc2VydAotICAgICAgICB2YXIgZ2V0ID0g
X19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5z
ZXQ7Ci0gICAgICAgIHZhciBvbkxvYWQgPSBfX2RlcGVuZGVuY3k0X18ub25Mb2FkOwotICAgICAg
ICB2YXIgQ29udGFpbmVyVmlldyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgX01ldGFtb3JwaCA9IF9fZGVwZW5kZW5jeTZfXy5fTWV0YW1vcnBoOwotICAgICAgICB2
YXIgdmlld0hlbHBlciA9IF9fZGVwZW5kZW5jeTdfXy52aWV3SGVscGVyOwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJl
ci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAg
ICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBPdXRsZXRWaWV3ID0gQ29udGFpbmVyVmlldy5l
eHRlbmQoX01ldGFtb3JwaCk7Ci0gICAgICAgIF9fZXhwb3J0c19fLk91dGxldFZpZXcgPSBPdXRs
ZXRWaWV3OwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGBvdXRsZXRgIGhlbHBlciBp
cyBhIHBsYWNlaG9sZGVyIHRoYXQgdGhlIHJvdXRlciB3aWxsIGZpbGwgaW4gd2l0aAotICAgICAg
ICAgICAgICB0aGUgYXBwcm9wcmlhdGUgdGVtcGxhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3Rh
dGUgb2YgdGhlIGFwcGxpY2F0aW9uLgotCi0gICAgICAgICAgICAgIGBgYCBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIHt7b3V0bGV0fX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgQnkgZGVmYXVsdCwgYSB0ZW1wbGF0ZSBiYXNlZCBvbiBFbWJlcidzIG5hbWluZyBjb252ZW50
aW9ucyB3aWxsIGJlIHJlbmRlcmVkCi0gICAgICAgICAgICAgIGludG8gdGhlIGBvdXRsZXRgIChl
LmcuIGBBcHAuUG9zdHNSb3V0ZWAgd2lsbCByZW5kZXIgdGhlIGBwb3N0c2AgdGVtcGxhdGUpLgot
Ci0gICAgICAgICAgICAgIFlvdSBjYW4gcmVuZGVyIGEgZGlmZmVyZW50IHRlbXBsYXRlIGJ5IHVz
aW5nIHRoZSBgcmVuZGVyKClgIG1ldGhvZCBpbiB0aGUKLSAgICAgICAgICAgICAgcm91dGUncyBg
cmVuZGVyVGVtcGxhdGVgIGhvb2suIFRoZSBmb2xsb3dpbmcgd2lsbCByZW5kZXIgdGhlIGBmYXZv
cml0ZVBvc3RgCi0gICAgICAgICAgICAgIHRlbXBsYXRlIGludG8gdGhlIGBvdXRsZXRgLgotCi0g
ICAgICAgICAgICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5Qb3N0c1JvdXRl
ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICByZW5kZXJUZW1wbGF0ZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcignZmF2b3JpdGVQb3N0
Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgY3VzdG9tIG5hbWVkIG91dGxldHMg
Zm9yIG1vcmUgY29udHJvbC4KLQotICAgICAgICAgICAgICBgYGAgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICB7e291dGxldCAnZmF2b3JpdGVQb3N0J319Ci0gICAgICAgICAgICAgIHt7b3V0bGV0
ICdwb3N0cyd9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGVuIHlvdSBj
YW4gZGVmaW5lIHdoYXQgdGVtcGxhdGUgaXMgcmVuZGVyZWQgaW50byBlYWNoIG91dGxldCBpbiB5
b3VyCi0gICAgICAgICAgICAgIHJvdXRlLgotCi0KLSAgICAgICAgICAgICAgYGBgIGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgQXBwLlBvc3RzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewot
ICAgICAgICAgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgIHRoaXMucmVuZGVyKCdmYXZvcml0ZVBvc3QnLCB7IG91dGxldDogJ2Zhdm9yaXRlUG9z
dCcgfSk7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcigncG9zdHMnLCB7IG91dGxldDog
J3Bvc3RzJyB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlIHZpZXcgdGhh
dCB0aGUgb3V0bGV0IHVzZXMgdG8gY29udGFpbiBhbmQgbWFuYWdlIHRoZQotICAgICAgICAgICAg
ICB0ZW1wbGF0ZXMgcmVuZGVyZWQgaW50byBpdC4KLQotICAgICAgICAgICAgICBgYGAgaGFuZGxl
YmFycwotICAgICAgICAgICAgICB7e291dGxldCB2aWV3PSdzZWN0aW9uQ29udGFpbmVyJ319Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIEFwcC5TZWN0aW9uQ29udGFpbmVyID0gRW1iZXIuQ29udGFpbmVyVmlldy5leHRlbmQo
ewotICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdzZWN0aW9uJywKLSAgICAgICAgICAgICAgICBj
bGFzc05hbWVzOiBbJ3NwZWNpYWwnXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBvdXRsZXQKLSAgICAgICAgICAgICAgQGZvciBF
bWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBy
b3BlcnR5IHRoZSBwcm9wZXJ0eSBvbiB0aGUgY29udHJvbGxlcgotICAgICAgICAgICAgICAgIHRo
YXQgaG9sZHMgdGhlIHZpZXcgZm9yIHRoaXMgb3V0bGV0Ci0gICAgICAgICAgICAgIEByZXR1cm4g
e1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG91
dGxldEhlbHBlcihwcm9wZXJ0eSwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG91dGxldFNv
dXJjZTsKLSAgICAgICAgICAgIHZhciBjb250YWluZXI7Ci0gICAgICAgICAgICB2YXIgdmlld05h
bWU7Ci0gICAgICAgICAgICB2YXIgdmlld0NsYXNzOwotICAgICAgICAgICAgdmFyIHZpZXdGdWxs
TmFtZTsKLQotICAgICAgICAgICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmRhdGEgJiYgcHJv
cGVydHkuZGF0YS5pc1JlbmRlckRhdGEpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gcHJv
cGVydHk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSAnbWFpbic7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNvbnRhaW5lciA9IG9wdGlvbnMuZGF0YS52aWV3LmNvbnRhaW5lcjsK
LQotICAgICAgICAgICAgb3V0bGV0U291cmNlID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0gICAgICAg
ICAgICB3aGlsZSAoIW91dGxldFNvdXJjZS5nZXQoJ3RlbXBsYXRlLmlzVG9wJykpIHsKLSAgICAg
ICAgICAgICAgICBvdXRsZXRTb3VyY2UgPSBvdXRsZXRTb3VyY2UuZ2V0KCdfcGFyZW50Vmlldycp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBwcm92aWRlIGNvbnRyb2xsZXIgb3Zl
cnJpZGUKLSAgICAgICAgICAgIHZpZXdOYW1lID0gb3B0aW9ucy5oYXNoLnZpZXc7Ci0KLSAgICAg
ICAgICAgIGlmICh2aWV3TmFtZSkgewotICAgICAgICAgICAgICAgIHZpZXdGdWxsTmFtZSA9ICd2
aWV3OicgKyB2aWV3TmFtZTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlVzaW5nIGEg
cXVvdGVsZXNzIHZpZXcgcGFyYW1ldGVyIHdpdGgge3tvdXRsZXR9fSBpcyBub3Qgc3VwcG9ydGVk
LiBQbGVhc2UgdXBkYXRlIHRvIHF1b3RlZCB1c2FnZSAne3tvdXRsZXQgXCIiICsgdmlld05hbWUg
KyAiXCJ9fS4iLCBvcHRpb25zLmhhc2hUeXBlcy52aWV3ICE9PSAnSUQnKTsKLSAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIlRoZSB2aWV3IG5hbWUgeW91IHN1cHBsaWVkICciICsgdmlld05h
bWUgKyAiJyBkaWQgbm90IHJlc29sdmUgdG8gYSB2aWV3LiIsIGNvbnRhaW5lci5oYXModmlld0Z1
bGxOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZpZXdDbGFzcyA9IHZpZXdO
YW1lID8gY29udGFpbmVyLmxvb2t1cEZhY3Rvcnkodmlld0Z1bGxOYW1lKSA6IG9wdGlvbnMuaGFz
aC52aWV3Q2xhc3MgfHwgT3V0bGV0VmlldzsKLQotICAgICAgICAgICAgb3B0aW9ucy5kYXRhLnZp
ZXcuc2V0KCdvdXRsZXRTb3VyY2UnLCBvdXRsZXRTb3VyY2UpOwotICAgICAgICAgICAgb3B0aW9u
cy5oYXNoLmN1cnJlbnRWaWV3QmluZGluZyA9ICdfdmlldy5vdXRsZXRTb3VyY2UuX291dGxldHMu
JyArIHByb3BlcnR5OwotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25z
LmhlbHBlck5hbWUgfHwgJ291dGxldCc7Ci0KLSAgICAgICAgICAgIHJldHVybiB2aWV3SGVscGVy
LmNhbGwodGhpcywgdmlld0NsYXNzLCBvcHRpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLm91dGxldEhlbHBlciA9IG91dGxldEhlbHBlcjsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL3JlbmRlciIsCi0gICAgWyJlbWJl
ci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0v
c3RyaW5nIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRyb2xsZXIiLCAiZW1i
ZXItaGFuZGxlYmFycy9leHQiLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL3ZpZXciLCAiZXhw
b3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVu
ZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9ydHNfXykg
ewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5j
eTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBhc3NlcnQsIGRlcHJlY2F0ZQotICAgICAgICB2
YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
Z2V0ID0gX19kZXBlbmRlbmN5M19fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5j
eTRfXy5zZXQ7Ci0gICAgICAgIHZhciBjYW1lbGl6ZSA9IF9fZGVwZW5kZW5jeTVfXy5jYW1lbGl6
ZTsKLSAgICAgICAgdmFyIGdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkgPSBfX2RlcGVuZGVuY3k2
X18uZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeTsKLSAgICAgICAgdmFyIGdlbmVyYXRlQ29udHJv
bGxlciA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGFuZGxlYmFy
c0dldCA9IF9fZGVwZW5kZW5jeTdfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIgdmlld0hl
bHBlciA9IF9fZGVwZW5kZW5jeThfXy52aWV3SGVscGVyOwotCi0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRp
bmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENhbGxpbmcg
YGB7e3JlbmRlcn19YGAgZnJvbSB3aXRoaW4gYSB0ZW1wbGF0ZSB3aWxsIGluc2VydCBhbm90aGVy
Ci0gICAgICAgICAgICAgIHRlbXBsYXRlIHRoYXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgbmFtZS4g
VGhlIGluc2VydGVkIHRlbXBsYXRlIHdpbGwKLSAgICAgICAgICAgICAgYWNjZXNzIGl0cyBwcm9w
ZXJ0aWVzIG9uIGl0cyBvd24gY29udHJvbGxlciAocmF0aGVyIHRoYW4gdGhlIGNvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgb2YgdGhlIHBhcmVudCB0ZW1wbGF0ZSkuCi0KLSAgICAgICAgICAgICAg
SWYgYSB2aWV3IGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMsIHRoZSB2aWV3IGNsYXNz
IGFsc28gd2lsbCBiZSB1c2VkLgotCi0gICAgICAgICAgICAgIE5vdGU6IEEgZ2l2ZW4gY29udHJv
bGxlciBtYXkgb25seSBiZSB1c2VkICpvbmNlKiBpbiB5b3VyIGFwcCBpbiB0aGlzIG1hbm5lci4K
LSAgICAgICAgICAgICAgQSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2xsZXIgd2ls
bCBiZSBjcmVhdGVkIGZvciB5b3UuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5OYXZpZ2F0aW9uQ29udHJv
bGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB3aG86ICJ3
b3JsZCIKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPCEtLSBuYXZpZ2F0aW9uLmhicyAtLT4K
LSAgICAgICAgICAgICAgSGVsbG8sIHt7d2hvfX0uCi0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRlbGJhcnMKLSAgICAgICAgICAgICAgPCEtLSBhcHBsaWNhdGlvbi5o
YnMgLS0+Ci0gICAgICAgICAgICAgIDxoMT5NeSBncmVhdCBhcHA8L2gxPgotICAgICAgICAgICAg
ICB7e3JlbmRlciAibmF2aWdhdGlvbiJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxoMT5NeSBncmVhdCBhcHA8L2gxPgotICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSdlbWJlci12aWV3Jz4KLSAgICAgICAgICAgICAgICBIZWxsbywg
d29ybGQuCi0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBPcHRpb25hbGx5IHlvdSBtYXkgcHJvdmlkZSBhIHNlY29uZCBhcmd1bWVudDogYSBw
cm9wZXJ0eSBwYXRoCi0gICAgICAgICAgICAgIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgYG1v
ZGVsYCBwcm9wZXJ0eSBvZiB0aGUgY29udHJvbGxlci4KLQotICAgICAgICAgICAgICBJZiBhIGBt
b2RlbGAgcHJvcGVydHkgcGF0aCBpcyBzcGVjaWZpZWQsIHRoZW4gYSBuZXcgaW5zdGFuY2Ugb2Yg
dGhlCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCBge3tyZW5k
ZXJ9fWAgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMKLSAgICAgICAgICAgICAgd2l0aCB0aGUg
c2FtZSBuYW1lLgotCi0gICAgICAgICAgICAgRm9yIGV4YW1wbGUgaWYgeW91IGhhZCB0aGlzIGBh
dXRob3JgIHRlbXBsYXRlLgotCi0gICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAg
ICAgPGRpdiBjbGFzcz0iYXV0aG9yIj4KLSAgICAgICAgICAgIFdyaXR0ZW4gYnkge3tmaXJzdE5h
bWV9fSB7e2xhc3ROYW1lfX0uCi0gICAgICAgICAgICBUb3RhbCBQb3N0czoge3twb3N0Q291bnR9
fQotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgWW91
IGNvdWxkIHJlbmRlciBpdCBpbnNpZGUgdGhlIGBwb3N0YCB0ZW1wbGF0ZSB1c2luZyB0aGUgYHJl
bmRlcmAgaGVscGVyLgotCi0gICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICA8
ZGl2IGNsYXNzPSJwb3N0Ij4KLSAgICAgICAgICAgIDxoMT57e3RpdGxlfX08L2gxPgotICAgICAg
ICAgICAgPGRpdj57e2JvZHl9fTwvZGl2PgotICAgICAgICAgICAge3tyZW5kZXIgImF1dGhvciIg
YXV0aG9yfX0KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEBtZXRob2QgcmVuZGVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFy
cy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0P30gY29udGV4dFN0cmluZwotICAgICAgICAgICAgICBAcGFyYW0g
e0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmlu
ZwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0
aW9uIHJlbmRlckhlbHBlcihuYW1lLCBjb250ZXh0U3RyaW5nLCBvcHRpb25zKSB7Ci0gICAgICAg
ICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLQotICAgICAgICAgICAgdmFyIGNv
bnRleHRQcm92aWRlZCA9IGxlbmd0aCA9PT0gMywKLSAgICAgICAgICAgIGNvbnRhaW5lciwgcm91
dGVyLCBjb250cm9sbGVyLCB2aWV3LCBjb250ZXh0LCBsb29rdXBPcHRpb25zOwotCi0gICAgICAg
ICAgICBjb250YWluZXIgPSAob3B0aW9ucyB8fCBjb250ZXh0U3RyaW5nKS5kYXRhLmtleXdvcmRz
LmNvbnRyb2xsZXIuY29udGFpbmVyOwotICAgICAgICAgICAgcm91dGVyID0gY29udGFpbmVyLmxv
b2t1cCgncm91dGVyOm1haW4nKTsKLQotICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMikgewot
ICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgc2luZ2xldG9uIGNvbnRyb2xsZXIKLSAgICAgICAg
ICAgICAgICBvcHRpb25zID0gY29udGV4dFN0cmluZzsKLSAgICAgICAgICAgICAgICBjb250ZXh0
U3RyaW5nID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNh
biBvbmx5IHVzZSB0aGUge3tyZW5kZXJ9fSBoZWxwZXIgb25jZSB3aXRob3V0IGEgbW9kZWwgb2Jq
ZWN0IGFzIGl0cyBzZWNvbmQgYXJndW1lbnQsIGFzIGluIHt7cmVuZGVyIFwicG9zdFwiIHBvc3R9
fS4iLCAhcm91dGVyIHx8ICFyb3V0ZXIuX2xvb2t1cEFjdGl2ZVZpZXcobmFtZSkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IDMpIHsKLSAgICAgICAgICAgICAgICAvLyBjcmVh
dGUgYSBuZXcgY29udHJvbGxlcgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBoYW5kbGViYXJz
R2V0KG9wdGlvbnMuY29udGV4dHNbMV0sIGNvbnRleHRTdHJpbmcsIG9wdGlvbnMpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiWW91
IG11c3QgcGFzcyBhIHRlbXBsYXRlTmFtZSB0byByZW5kZXIiKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCJVc2luZyBhIHF1b3RlbGVzcyBwYXJhbWV0ZXIg
d2l0aCB7e3JlbmRlcn19IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gcXVvdGVkIHVz
YWdlICd7e3JlbmRlciBcIiIgKyBuYW1lICsgIlwifX0uIiwgb3B0aW9ucy50eXBlc1swXSAhPT0g
J0lEJyk7Ci0KLSAgICAgICAgICAgIC8vICMgbGVnYWN5IG5hbWVzcGFjZQotICAgICAgICAgICAg
bmFtZSA9IG5hbWUucmVwbGFjZSgvXC8vZywgJy4nKTsKLSAgICAgICAgICAgIC8vIFwgbGVnYWN5
IHNsYXNoIGFzIG5hbWVzcGFjZSBzdXBwb3J0Ci0KLQotICAgICAgICAgICAgdmlldyA9IGNvbnRh
aW5lci5sb29rdXAoJ3ZpZXc6JyArIG5hbWUpIHx8IGNvbnRhaW5lci5sb29rdXAoJ3ZpZXc6ZGVm
YXVsdCcpOwotCi0gICAgICAgICAgICAvLyBwcm92aWRlIGNvbnRyb2xsZXIgb3ZlcnJpZGUKLSAg
ICAgICAgICAgIHZhciBjb250cm9sbGVyTmFtZSA9IG9wdGlvbnMuaGFzaC5jb250cm9sbGVyIHx8
IG5hbWU7Ci0gICAgICAgICAgICB2YXIgY29udHJvbGxlckZ1bGxOYW1lID0gJ2NvbnRyb2xsZXI6
JyArIGNvbnRyb2xsZXJOYW1lOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5oYXNoLmNvbnRy
b2xsZXIpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBjb250cm9sbGVyIG5h
bWUgeW91IHN1cHBsaWVkICciICsgY29udHJvbGxlck5hbWUgKyAiJyBkaWQgbm90IHJlc29sdmUg
dG8gYSBjb250cm9sbGVyLiIsIGNvbnRhaW5lci5oYXMoY29udHJvbGxlckZ1bGxOYW1lKSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJlbnRDb250cm9sbGVyID0gb3B0aW9u
cy5kYXRhLmtleXdvcmRzLmNvbnRyb2xsZXI7Ci0KLSAgICAgICAgICAgIC8vIGNob29zZSBuYW1l
Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID4gMikgewotICAgICAgICAgICAgICAgIHZhciBmYWN0
b3J5ID0gY29udGFpbmVyLmxvb2t1cEZhY3RvcnkoY29udHJvbGxlckZ1bGxOYW1lKSB8fAotICAg
ICAgICAgICAgICAgIGdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkoY29udGFpbmVyLCBjb250cm9s
bGVyTmFtZSwgY29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gZmFjdG9y
eS5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgICBtb2RlbDogY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgcGFyZW50Q29udHJvbGxlcjogcGFyZW50Q29udHJvbGxlciwKLSAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0OiBwYXJlbnRDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICB2aWV3Lm9uZSgnd2lsbERlc3Ryb3lFbGVtZW50JywgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZGVzdHJveSgpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250
cm9sbGVyID0gY29udGFpbmVyLmxvb2t1cChjb250cm9sbGVyRnVsbE5hbWUpIHx8Ci0gICAgICAg
ICAgICAgICAgZ2VuZXJhdGVDb250cm9sbGVyKGNvbnRhaW5lciwgY29udHJvbGxlck5hbWUpOwot
Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci5zZXRQcm9wZXJ0aWVzKHsKLSAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0OiBwYXJlbnRDb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICBw
YXJlbnRDb250cm9sbGVyOiBwYXJlbnRDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByb290ID0gb3B0aW9ucy5jb250ZXh0c1sx
XTsKLQotICAgICAgICAgICAgaWYgKHJvb3QpIHsKLSAgICAgICAgICAgICAgICB2aWV3LnJlZ2lz
dGVyT2JzZXJ2ZXIocm9vdCwgY29udGV4dFN0cmluZywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRyb2xsZXIuc2V0KCdtb2RlbCcsIGhhbmRsZWJhcnNHZXQocm9vdCwgY29u
dGV4dFN0cmluZywgb3B0aW9ucykpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBvcHRpb25zLmhhc2gudmlld05hbWUgPSBjYW1lbGl6ZShuYW1lKTsK
LQotICAgICAgICAgICAgdmFyIHRlbXBsYXRlTmFtZSA9ICd0ZW1wbGF0ZTonICsgbmFtZTsKLSAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHVzZWQgYHt7cmVuZGVyICciICsgbmFtZSArICIn
fX1gLCBidXQgJyIgKyBuYW1lICsgIicgY2FuIG5vdCBiZSBmb3VuZCBhcyBlaXRoZXIgYSB0ZW1w
bGF0ZSBvciBhIHZpZXcuIiwgY29udGFpbmVyLmhhcygidmlldzoiICsgbmFtZSkgfHwgY29udGFp
bmVyLmhhcyh0ZW1wbGF0ZU5hbWUpIHx8IG9wdGlvbnMuZm4pOwotICAgICAgICAgICAgb3B0aW9u
cy5oYXNoLnRlbXBsYXRlID0gY29udGFpbmVyLmxvb2t1cCh0ZW1wbGF0ZU5hbWUpOwotCi0gICAg
ICAgICAgICBvcHRpb25zLmhhc2guY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0KLSAgICAgICAg
ICAgIGlmIChyb3V0ZXIgJiYgIWNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICByb3V0ZXIuX2Nv
bm5lY3RBY3RpdmVWaWV3KG5hbWUsIHZpZXcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25zLmhlbHBlck5hbWUgfHwgKCdyZW5kZXIgIicg
KyBuYW1lICsgJyInKTsKLQotICAgICAgICAgICAgdmlld0hlbHBlci5jYWxsKHRoaXMsIHZpZXcs
IG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5n
LWhhbmRsZWJhcnMvaGVscGVycy9zaGFyZWQiLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlf
Z2V0IiwgImVtYmVyLW1ldGFsL2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xs
ZXIiLCAiZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVu
Y3kxX18uZ2V0OwotICAgICAgICB2YXIgbWFwID0gX19kZXBlbmRlbmN5Ml9fLm1hcDsKLSAgICAg
ICAgdmFyIENvbnRyb2xsZXJNaXhpbiA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgaGFuZGxlYmFyc1Jlc29sdmUgPSBfX2RlcGVuZGVuY3k0X18ucmVzb2x2ZVBhcmFt
czsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVuY3k0X18uaGFuZGxlYmFy
c0dldDsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTVfXy50eXBlT2Y7Ci0gICAg
ICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kxX18uZ2V0OwotCi0gICAgICAgIGZ1bmN0aW9uIHJv
dXRlQXJncyh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpIHsKLSAgICAgICAg
ICAgIHZhciBhcmdzID0gW107Ci0gICAgICAgICAgICBpZiAodHlwZU9mKHRhcmdldFJvdXRlTmFt
ZSkgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgYXJncy5wdXNoKCcnICsgdGFyZ2V0
Um91dGVOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3MucHVzaC5hcHBseShh
cmdzLCBtb2RlbHMpOwotICAgICAgICAgICAgYXJncy5wdXNoKHsKLSAgICAgICAgICAgICAgICBx
dWVyeVBhcmFtczogcXVlcnlQYXJhbXMgCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybiBhcmdzOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ucm91dGVBcmdzID0g
cm91dGVBcmdzOwotICAgICAgICBmdW5jdGlvbiBnZXRBY3RpdmVUYXJnZXROYW1lKHJvdXRlcikg
ewotICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHJvdXRlci5hY3RpdmVUcmFuc2l0aW9u
ID8KLSAgICAgICAgICAgIHJvdXRlci5hY3RpdmVUcmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZv
cyA6Ci0gICAgICAgICAgICByb3V0ZXIuc3RhdGUuaGFuZGxlckluZm9zOwotICAgICAgICAgICAg
cmV0dXJuIGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3MubGVuZ3RoIC0gMV0ubmFtZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmdldEFjdGl2ZVRhcmdldE5hbWUgPSBnZXRBY3Rp
dmVUYXJnZXROYW1lOwotICAgICAgICBmdW5jdGlvbiByZXNvbHZlUGFyYW1zKGNvbnRleHQsIHBh
cmFtcywgb3B0aW9ucykgewotICAgICAgICAgICAgcmV0dXJuIG1hcC5jYWxsKHJlc29sdmVQYXRo
cyhjb250ZXh0LCBwYXJhbXMsIG9wdGlvbnMpLCBmdW5jdGlvbihwYXRoLCBpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG51bGwgPT09IHBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUGFy
YW0gd2FzIHN0cmluZy9udW1iZXIsIG5vdCBhIHBhdGgsIHNvIGp1c3QgcmV0dXJuIHJhdyBzdHJp
bmcvbnVtYmVyLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zW2ldOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGViYXJz
R2V0KGNvbnRleHQsIHBhdGgsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ucmVzb2x2ZVBhcmFtcyA9
IHJlc29sdmVQYXJhbXM7Ci0gICAgICAgIGZ1bmN0aW9uIHN0YXNoUGFyYW1OYW1lcyhyb3V0ZXIs
IGhhbmRsZXJJbmZvcykgewotICAgICAgICAgICAgaWYgKGhhbmRsZXJJbmZvcy5fbmFtZXNTdGFz
aGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBUaGlzIGhlbHBlciBleGlzdHMgYmVjYXVzZSByb3V0ZXIuanMvcm91dGUtcmVjb2du
aXplci5qcyBhd2t3YXJkbHkKLSAgICAgICAgICAgIC8vIGtlZXBzIHNlcGFyYXRlIGEgaGFuZGxl
ckluZm8ncyBsaXN0IG9mIHBhcmFtZXRlciBuYW1lcyBkZXBlbmRpbmcKLSAgICAgICAgICAgIC8v
IG9uIHdoZXRoZXIgYSBVUkwgdHJhbnNpdGlvbiBvciBuYW1lZCB0cmFuc2l0aW9uIGlzIGhhcHBl
bmluZy4KLSAgICAgICAgICAgIC8vIEhvcGVmdWxseSB3ZSBjYW4gcmVtb3ZlIHRoaXMgaW4gdGhl
IGZ1dHVyZS4KLSAgICAgICAgICAgIHZhciB0YXJnZXRSb3V0ZU5hbWUgPSBoYW5kbGVySW5mb3Nb
aGFuZGxlckluZm9zLmxlbmd0aC0xXS5uYW1lOwotICAgICAgICAgICAgdmFyIHJlY29nSGFuZGxl
cnMgPSByb3V0ZXIucm91dGVyLnJlY29nbml6ZXIuaGFuZGxlcnNGb3IodGFyZ2V0Um91dGVOYW1l
KTsKLSAgICAgICAgICAgIHZhciBkeW5hbWljUGFyZW50ID0gbnVsbDsKLQotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsZW47ICsraSkg
ewotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsKLSAg
ICAgICAgICAgICAgICB2YXIgbmFtZXMgPSByZWNvZ0hhbmRsZXJzW2ldLm5hbWVzOwotCi0gICAg
ICAgICAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBkeW5h
bWljUGFyZW50ID0gaGFuZGxlckluZm87Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaGFuZGxlckluZm8uX25hbWVzID0gbmFtZXM7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
cm91dGUgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotICAgICAgICAgICAgICAgIHJvdXRlLl9zdGFz
aE5hbWVzKGhhbmRsZXJJbmZvLCBkeW5hbWljUGFyZW50KTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaGFuZGxlckluZm9zLl9uYW1lc1N0YXNoZWQgPSB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgX19leHBvcnRzX18uc3Rhc2hQYXJhbU5hbWVzID0gc3Rhc2hQYXJhbU5hbWVzOwot
ICAgICAgICBmdW5jdGlvbiByZXNvbHZlUGF0aHMoY29udGV4dCwgcGFyYW1zLCBvcHRpb25zKSB7
Ci0gICAgICAgICAgICB2YXIgcmVzb2x2ZWQgPSBoYW5kbGViYXJzUmVzb2x2ZShjb250ZXh0LCBw
YXJhbXMsIG9wdGlvbnMpLAotICAgICAgICAgICAgdHlwZXMgPSBvcHRpb25zLnR5cGVzOwotCi0g
ICAgICAgICAgICByZXR1cm4gbWFwLmNhbGwocmVzb2x2ZWQsIGZ1bmN0aW9uKG9iamVjdCwgaSkg
ewotICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gJ0lEJykgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdW53cmFwKG9iamVjdCwgcGFyYW1zW2ldKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gdW53cmFwKG9i
amVjdCwgcGF0aCkgewotICAgICAgICAgICAgICAgIGlmIChwYXRoID09PSAnY29udHJvbGxlcicp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKENvbnRyb2xsZXJNaXhpbi5kZXRlY3Qob2JqZWN0KSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW53cmFwKGdldChvYmplY3QsICdtb2RlbCcpLCBw
YXRoID8gcGF0aCArICcubW9kZWwnIDogJ21vZGVsJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ucmVzb2x2ZVBh
dGhzID0gcmVzb2x2ZVBhdGhzOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZyIs
Ci0gICAgWyJlbWJlci1oYW5kbGViYXJzIiwgImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItcm91
dGluZy9leHQvcnVuX2xvb3AiLCAiZW1iZXItcm91dGluZy9leHQvY29udHJvbGxlciIsICJlbWJl
ci1yb3V0aW5nL2V4dC92aWV3IiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIiwgImVtYmVy
LXJvdXRpbmcvbG9jYXRpb24vbm9uZV9sb2NhdGlvbiIsICJlbWJlci1yb3V0aW5nL2xvY2F0aW9u
L2hhc2hfbG9jYXRpb24iLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9oaXN0b3J5X2xvY2F0aW9u
IiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbiIsICJlbWJlci1yb3V0aW5n
L3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL2NvbnRy
b2xsZXJfZm9yIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCIsICJlbWJlci1yb3V0aW5nL3N5
c3RlbS9yb3V0ZXIiLCAiZW1iZXItcm91dGluZy9zeXN0ZW0vcm91dGUiLCAiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVu
Y3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18s
IF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVw
ZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5k
ZW5jeTEzX18sIF9fZGVwZW5kZW5jeTE0X18sIF9fZGVwZW5kZW5jeTE1X18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBFbWJl
ciBSb3V0aW5nCi0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJt
b2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgQHJlcXVpcmVzIGVtYmVyLXZpZXdzCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVu
Y3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0KLSAgICAgICAgLy8gRVM2VE9ETzogQ2xlYW51cCBtb2R1bGVzIHdpdGggc2lk
ZS1lZmZlY3RzIGJlbG93Ci0KLSAgICAgICAgdmFyIEVtYmVyTG9jYXRpb24gPSBfX2RlcGVuZGVu
Y3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE5vbmVMb2NhdGlvbiA9IF9fZGVwZW5kZW5j
eTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgSGFzaExvY2F0aW9uID0gX19kZXBlbmRlbmN5
OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBIaXN0b3J5TG9jYXRpb24gPSBfX2RlcGVuZGVu
Y3k5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEF1dG9Mb2NhdGlvbiA9IF9fZGVwZW5kZW5j
eTEwX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9y
eSA9IF9fZGVwZW5kZW5jeTExX18uZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeTsKLSAgICAgICAg
dmFyIGdlbmVyYXRlQ29udHJvbGxlciA9IF9fZGVwZW5kZW5jeTExX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIGNvbnRyb2xsZXJGb3IgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBSb3V0ZXJEU0wgPSBfX2RlcGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBSb3V0ZXIgPSBfX2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBSb3V0ZSA9IF9fZGVwZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLQotICAgICAgICBFbWJlci5M
b2NhdGlvbiA9IEVtYmVyTG9jYXRpb247Ci0gICAgICAgIEVtYmVyLkF1dG9Mb2NhdGlvbiA9IEF1
dG9Mb2NhdGlvbjsKLSAgICAgICAgRW1iZXIuSGFzaExvY2F0aW9uID0gSGFzaExvY2F0aW9uOwot
ICAgICAgICBFbWJlci5IaXN0b3J5TG9jYXRpb24gPSBIaXN0b3J5TG9jYXRpb247Ci0gICAgICAg
IEVtYmVyLk5vbmVMb2NhdGlvbiA9IE5vbmVMb2NhdGlvbjsKLQotICAgICAgICBFbWJlci5jb250
cm9sbGVyRm9yID0gY29udHJvbGxlckZvcjsKLSAgICAgICAgRW1iZXIuZ2VuZXJhdGVDb250cm9s
bGVyRmFjdG9yeSA9IGdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnk7Ci0gICAgICAgIEVtYmVyLmdl
bmVyYXRlQ29udHJvbGxlciA9IGdlbmVyYXRlQ29udHJvbGxlcjsKLSAgICAgICAgRW1iZXIuUm91
dGVyRFNMID0gUm91dGVyRFNMOwotICAgICAgICBFbWJlci5Sb3V0ZXIgPSBSb3V0ZXI7Ci0gICAg
ICAgIEVtYmVyLlJvdXRlID0gUm91dGU7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQi
XSA9IEVtYmVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9leHQvY29udHJv
bGxlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dl
dCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAi
ZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItbWV0YWwvZW51
bWVyYWJsZV91dGlscyIsICJlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRl
bmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRkVBVFVSRVMsIGRlcHJlY2F0ZQotICAgICAgICB2
YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5k
ZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTRfXy5jb21w
dXRlZDsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTVfXy50eXBlT2Y7Ci0gICAg
ICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5NV9fLm1ldGE7Ci0gICAgICAgIHZhciBtZXJnZSA9
IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWFwID0gX19kZXBlbmRl
bmN5N19fLm1hcDsKLQotICAgICAgICB2YXIgQ29udHJvbGxlck1peGluID0gX19kZXBlbmRlbmN5
OF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVy
Ci0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgICAgICAgICAgICovCi0K
LSAgICAgICAgQ29udHJvbGxlck1peGluLnJlb3Blbih7Ci0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVHJhbnNpdGlvbiB0aGUgYXBwbGljYXRpb24gaW50byBhbm90aGVyIHJv
dXRlLiBUaGUgcm91dGUgbWF5Ci0gICAgICAgICAgICAgICAgICAgIGJlIGVpdGhlciBhIHNpbmds
ZSByb3V0ZSBvciByb3V0ZSBwYXRoOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Js
b2dQb3N0cycpOwotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9S
b3V0ZSgnYmxvZ1Bvc3RzLnJlY2VudEVudHJpZXMnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSBzdXBwbHkgYSBtb2RlbCBmb3IgdGhl
IHJvdXRlIGluIHF1ZXN0aW9uLiBUaGUgbW9kZWwKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBi
ZSBzZXJpYWxpemVkIGludG8gdGhlIFVSTCB1c2luZyB0aGUgYHNlcmlhbGl6ZWAgaG9vayBvZgot
ICAgICAgICAgICAgICAgICAgICB0aGUgcm91dGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9S
b3V0ZSgnYmxvZ1Bvc3QnLCBhUG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIElmIGEgbGl0ZXJhbCBpcyBwYXNzZWQgKHN1Y2ggYXMgYSBudW1iZXIg
b3IgYSBzdHJpbmcpLCBpdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMg
YW4gaWRlbnRpZmllciBpbnN0ZWFkLiBJbiB0aGlzIGNhc2UsIHRoZSBgbW9kZWxgCi0gICAgICAg
ICAgICAgICAgICAgIGhvb2sgb2YgdGhlIHJvdXRlIHdpbGwgYmUgdHJpZ2dlcmVkOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRy
b2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dQb3N0JywgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIE11bHRpcGxlIG1vZGVscyB3aWxsIGJlIGFw
cGxpZWQgbGFzdCB0byBmaXJzdCByZWN1cnNpdmVseSB1cCB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgcmVzb3VyY2UgdHJlZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ2Jsb2dQb3N0Jywge3BhdGg6JzpibG9nUG9zdElk
J30sIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCdi
bG9nQ29tbWVudCcsIHtwYXRoOiAnOmJsb2dDb21tZW50SWQnfSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAg
IGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nQ29tbWVudCcsIGFQb3N0LCBhQ29t
bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRl
KCdibG9nQ29tbWVudCcsIDEsIDEzKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwYXNzIGEgVVJMIChhIHN0cmlu
ZyB0aGF0IHN0YXJ0cyB3aXRoIGEKLSAgICAgICAgICAgICAgICAgICAgYC9gKS4gVGhpcyBpcyBp
bnRlbmRlZCBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nIHB1cnBvc2VzIGFuZAotICAgICAgICAg
ICAgICAgICAgICBzaG91bGQgcmFyZWx5IGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYUNv
bnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgYUNv
bnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJy9ibG9nL3Bvc3QvMS9jb21tZW50LzEzJyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBhbHNvIFty
ZXBsYWNlUm91dGVdKC9hcGkvY2xhc3Nlcy9FbWJlci5Db250cm9sbGVyTWl4aW4uaHRtbCNtZXRo
b2RfcmVwbGFjZVJvdXRlKS4KLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
bmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3IgYSBVUkwKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHsuLi5PYmplY3R9IG1vZGVscyB0aGUgbW9kZWwocykgb3IgaWRlbnRpZmllcihzKSB0
byBiZSB1c2VkCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIHRyYW5zaXRpb25pbmcgdG8gdGhl
IHJvdXRlLgotICAgICAgICAgICAgICAgICAgICBAZm9yIEVtYmVyLkNvbnRyb2xsZXJNaXhpbgot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRyYW5zaXRpb25Ub1JvdXRlCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgdHJhbnNpdGlvblRvUm91dGU6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIC8vIHRhcmdldCBtYXkgYmUgZWl0aGVyIGFub3RoZXIgY29udHJvbGxl
ciBvciBhIHJvdXRlcgotICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXQodGhpcywgJ3Rh
cmdldCcpOwotICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB0YXJnZXQudHJhbnNpdGlvblRv
Um91dGUgfHwgdGFyZ2V0LnRyYW5zaXRpb25UbzsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWV0
aG9kLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAotICAgICAgICAgICAgICAg
ICAgICBAZm9yIEVtYmVyLkNvbnRyb2xsZXJNaXhpbgotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIHRyYW5zaXRpb25UbwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRyYW5z
aXRpb25UbzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCJ0
cmFuc2l0aW9uVG8gaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0cmFuc2l0aW9uVG9Sb3V0ZS4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9uVG9Sb3V0ZS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRyYW5zaXRpb24gaW50byBhbm90aGVyIHJvdXRlIHdoaWxlIHJlcGxh
Y2luZyB0aGUgY3VycmVudCBVUkwsIGlmIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICAgICBU
aGlzIHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgYWRk
aW5nIGEgbmV3IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgQmVzaWRlIHRoYXQsIGl0IGlzIGlk
ZW50aWNhbCB0byBgdHJhbnNpdGlvblRvUm91dGVgIGluIGFsbCBvdGhlciByZXNwZWN0cy4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGFD
b250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxvZ1Bvc3RzJyk7Ci0gICAgICAgICAgICAgICAgICAg
IGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxvZ1Bvc3RzLnJlY2VudEVudHJpZXMnKTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSBz
dXBwbHkgYSBtb2RlbCBmb3IgdGhlIHJvdXRlIGluIHF1ZXN0aW9uLiBUaGUgbW9kZWwKLSAgICAg
ICAgICAgICAgICAgICAgd2lsbCBiZSBzZXJpYWxpemVkIGludG8gdGhlIFVSTCB1c2luZyB0aGUg
YHNlcmlhbGl6ZWAgaG9vayBvZgotICAgICAgICAgICAgICAgICAgICB0aGUgcm91dGU6Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBhQ29u
dHJvbGxlci5yZXBsYWNlUm91dGUoJ2Jsb2dQb3N0JywgYVBvc3QpOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJZiBhIGxpdGVyYWwgaXMgcGFzc2VkIChz
dWNoIGFzIGEgbnVtYmVyIG9yIGEgc3RyaW5nKSwgaXQgd2lsbAotICAgICAgICAgICAgICAgICAg
ICBiZSB0cmVhdGVkIGFzIGFuIGlkZW50aWZpZXIgaW5zdGVhZC4gSW4gdGhpcyBjYXNlLCB0aGUg
YG1vZGVsYAotICAgICAgICAgICAgICAgICAgICBob29rIG9mIHRoZSByb3V0ZSB3aWxsIGJlIHRy
aWdnZXJlZDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxvZ1Bvc3QnLCAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGUgbW9kZWxz
IHdpbGwgYmUgYXBwbGllZCBsYXN0IHRvIGZpcnN0IHJlY3Vyc2l2ZWx5IHVwIHRoZQotICAgICAg
ICAgICAgICAgICAgICByZXNvdXJjZSB0cmVlLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYmxvZ1Bvc3QnLCB7cGF0aDon
OmJsb2dQb3N0SWQnfSwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVzb3VyY2UoJ2Jsb2dDb21tZW50Jywge3BhdGg6ICc6YmxvZ0NvbW1lbnRJZCd9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJvdXRlKCdibG9nQ29tbWVudCcsIGFQb3N0
LCBhQ29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0
ZSgnYmxvZ0NvbW1lbnQnLCAxLCAxMyk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcGFzcyBhIFVSTCAoYSBzdHJp
bmcgdGhhdCBzdGFydHMgd2l0aCBhCi0gICAgICAgICAgICAgICAgICAgIGAvYCkuIFRoaXMgaXMg
aW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcyBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkIHJhcmVseSBiZSB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGFD
b250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnLycpOwotICAgICAgICAgICAgICAgICAgICBhQ29udHJv
bGxlci5yZXBsYWNlUm91dGUoJy9ibG9nL3Bvc3QvMS9jb21tZW50LzEzJyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBvciBhIFVSTAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0gey4uLk9iamVjdH0gbW9kZWxzIHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJl
IHVzZWQKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91
dGUuCi0gICAgICAgICAgICAgICAgICAgIEBmb3IgRW1iZXIuQ29udHJvbGxlck1peGluCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgcmVwbGFjZVJvdXRlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgcmVwbGFjZVJvdXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAvLyB0YXJnZXQgbWF5IGJlIGVpdGhlciBhbm90aGVyIGNvbnRyb2xsZXIgb3IgYSByb3V0ZXIK
LSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZ2V0KHRoaXMsICd0YXJnZXQnKTsKLSAgICAg
ICAgICAgICAgICB2YXIgbWV0aG9kID0gdGFyZ2V0LnJlcGxhY2VSb3V0ZSB8fCB0YXJnZXQucmVw
bGFjZVdpdGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgQGZvciBFbWJlci5Db250
cm9sbGVyTWl4aW4KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXBsYWNlV2l0aAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoInJlcGxhY2VXaXRoIGlzIGRlcHJlY2F0
ZWQuIFBsZWFzZSB1c2UgcmVwbGFjZVJvdXRlLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnJlcGxhY2VSb3V0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLQotICAgICAgICB2YXIgQUxMX1BFUklPRFNfUkVHRVggPSAvXC4vZzsKLQot
Ci0gICAgICAgIENvbnRyb2xsZXJNaXhpbi5yZW9wZW4oewotICAgICAgICAgICAgaW5pdDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5Gb3JRdWVyeVBhcmFtQ2hhbmdlcyh0aGlzKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IFsn
cXVlcnlQYXJhbXMnLCAnX3BDYWNoZU1ldGEnXSwKLSAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBu
dWxsLAotCi0gICAgICAgICAgICBfcXBEZWxlZ2F0ZTogbnVsbCwKLSAgICAgICAgICAgIF9ub3Jt
YWxpemVkUXVlcnlQYXJhbXM6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHZhciBtID0gbWV0YSh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobS5wcm90byAhPT0gdGhp
cykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KG0ucHJvdG8sICdfbm9ybWFsaXpl
ZFF1ZXJ5UGFyYW1zJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFy
IHF1ZXJ5UGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtczsKLSAgICAgICAgICAgICAgICBpZiAocXVl
cnlQYXJhbXMuX3FwTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFt
cy5fcXBNYXA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHFwTWFw
ID0gcXVlcnlQYXJhbXMuX3FwTWFwID0ge307Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuID0gcXVlcnlQYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYWNjdW11bGF0ZVF1ZXJ5UGFyYW1EZXNjcmlwdG9ycyhxdWVyeVBhcmFtc1tp
XSwgcXBNYXApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBx
cE1hcDsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfY2FjaGVNZXRhOiBjb21wdXRl
ZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbSA9IG1ldGEodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG0ucHJvdG8gIT09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdldChtLnByb3RvLCAnX2NhY2hlTWV0YScpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHZhciBjYWNoZU1ldGEgPSB7fTsKLSAgICAgICAgICAgICAgICB2YXIg
cXBNYXAgPSBnZXQodGhpcywgJ19ub3JtYWxpemVkUXVlcnlQYXJhbXMnKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBwcm9wIGluIHFwTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
cXBNYXAuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFy
IHFwID0gcXBNYXBbcHJvcF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzY29wZSA9IHFwLnNj
b3BlOwotICAgICAgICAgICAgICAgICAgICB2YXIgcGFydHM7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNjb3BlID09PSAnY29udHJvbGxlcicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRzID0gW107Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBjYWNoZU1ldGFbcHJvcF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0czogcGFy
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlZCBieSByb3V0ZSBpZiAnbW9k
ZWwnIHNjb3BlCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IG51bGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBwcm92aWRlZCBieSByb3V0ZQotICAgICAgICAgICAgICAgICAg
ICAgICAgc2NvcGU6IHNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAiIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogZ2V0KHRoaXMsIHByb3ApCi0gICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNhY2hlTWV0YTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfdXBkYXRlQ2FjaGVQ
YXJhbXM6IGZ1bmN0aW9uKHBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciBjYWNoZU1ldGEg
PSBnZXQodGhpcywgJ19jYWNoZU1ldGEnKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9w
IGluIGNhY2hlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlTWV0YS5oYXNP
d25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BNZXRhID0g
Y2FjaGVNZXRhW3Byb3BdOwotICAgICAgICAgICAgICAgICAgICBwcm9wTWV0YS52YWx1ZXMgPSBw
YXJhbXM7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlS2V5ID0gdGhpcy5fY2FsY3Vs
YXRlQ2FjaGVLZXkocHJvcE1ldGEucHJlZml4LCBwcm9wTWV0YS5wYXJ0cywgcHJvcE1ldGEudmFs
dWVzKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fYnVja2V0Q2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNhY2hlLmxvb2t1cChjYWNoZUtleSwg
cHJvcCwgcHJvcE1ldGEuZGVmKTsKLQotICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgcHJv
cCwgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIF9xcENoYW5nZWQ6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIF9wcm9wKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHByb3AgPSBfcHJvcC5zdWJzdHIoMCwgX3Byb3AubGVuZ3RoLTMpOwotICAgICAg
ICAgICAgICAgIHZhciBjYWNoZU1ldGEgPSBnZXQoY29udHJvbGxlciwgJ19jYWNoZU1ldGEnKTsK
LSAgICAgICAgICAgICAgICB2YXIgcHJvcENhY2hlID0gY2FjaGVNZXRhW3Byb3BdOwotICAgICAg
ICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbnRyb2xsZXIuX2NhbGN1bGF0ZUNhY2hlS2V5KHBy
b3BDYWNoZS5wcmVmaXggfHwgIiIsIHByb3BDYWNoZS5wYXJ0cywgcHJvcENhY2hlLnZhbHVlcyk7
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KGNvbnRyb2xsZXIsIHByb3ApOwotCi0g
ICAgICAgICAgICAgICAgLy8gMS4gVXBkYXRlIG1vZGVsLWRlcCBjYWNoZQotICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuX2J1Y2tldENhY2hlLnN0YXNoKGNhY2hlS2V5LCBwcm9wLCB2YWx1ZSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBOb3RpZnkgYSBkZWxlZ2F0ZSAoZS5nLiB0byBmaXJl
IGEgcXAgdHJhbnNpdGlvbikKLSAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250cm9s
bGVyLl9xcERlbGVnYXRlOwotICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkgewotICAgICAg
ICAgICAgICAgICAgICBkZWxlZ2F0ZShjb250cm9sbGVyLCBwcm9wKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfY2FsY3VsYXRlQ2FjaGVLZXk6IGZ1
bmN0aW9uKHByZWZpeCwgX3BhcnRzLCB2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
dHMgPSBfcGFydHMgfHwgW10sIHN1ZmZpeGVzID0gIiI7Ci0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGxlbiA9IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IGdldCh2YWx1ZXMsIHBhcnQpOwotICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcyAr
PSAiOjoiICsgcGFydCArICI6IiArIHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcHJlZml4ICsgc3VmZml4ZXMucmVwbGFjZShBTExfUEVSSU9EU19SRUdF
WCwgJy0nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLQotICAgICAgICBmdW5jdGlv
biBhY2N1bXVsYXRlUXVlcnlQYXJhbURlc2NyaXB0b3JzKF9kZXNjLCBhY2N1bSkgewotICAgICAg
ICAgICAgdmFyIGRlc2MgPSBfZGVzYywgdG1wOwotICAgICAgICAgICAgaWYgKHR5cGVPZihkZXNj
KSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICB0bXAgPSB7fTsKLSAgICAgICAgICAg
ICAgICB0bXBbZGVzY10gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzOiBudWxsIAotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgZGVzYyA9IHRtcDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRlc2MpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWRlc2MuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHNpbmdsZURlc2Mg
PSBkZXNjW2tleV07Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVPZihzaW5nbGVEZXNjKSA9PT0g
J3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgc2luZ2xlRGVzYyA9IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFzOiBzaW5nbGVEZXNjIAotICAgICAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRtcCA9IGFjY3VtW2tleV0gfHwg
ewotICAgICAgICAgICAgICAgICAgICBhczogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgc2Nv
cGU6ICdtb2RlbCcgCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBtZXJnZSh0
bXAsIHNpbmdsZURlc2MpOwotCi0gICAgICAgICAgICAgICAgYWNjdW1ba2V5XSA9IHRtcDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGxpc3RlbkZvclF1ZXJ5
UGFyYW1DaGFuZ2VzKGNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgIHZhciBxcE1hcCA9IGdldChj
b250cm9sbGVyLCAnX25vcm1hbGl6ZWRRdWVyeVBhcmFtcycpOwotICAgICAgICAgICAgZm9yICh2
YXIgcHJvcCBpbiBxcE1hcCkgewotICAgICAgICAgICAgICAgIGlmICghcXBNYXAuaGFzT3duUHJv
cGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkT2JzZXJ2ZXIocHJvcCArICcu
W10nLCBjb250cm9sbGVyLCBjb250cm9sbGVyLl9xcENoYW5nZWQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29udHJvbGxl
ck1peGluOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9leHQvcnVuX2xvb3Ai
LAotICAgIFsiZW1iZXItbWV0YWwvcnVuX2xvb3AiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgcnVuID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxl
IGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAq
LwotCi0gICAgICAgIC8vIEFkZCBhIG5ldyBuYW1lZCBxdWV1ZSBhZnRlciB0aGUgJ2FjdGlvbnMn
IHF1ZXVlICh3aGVyZSBSU1ZQIHByb21pc2VzCi0gICAgICAgIC8vIHJlc29sdmUpLCB3aGljaCBp
cyB1c2VkIGluIHJvdXRlciB0cmFuc2l0aW9ucyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5Ci0gICAg
ICAgIC8vIGxvYWRpbmcgc3RhdGUgZW50cnkgaWYgYWxsIGNvbnRleHQgcHJvbWlzZXMgcmVzb2x2
ZSBvbiB0aGUKLSAgICAgICAgLy8gJ2FjdGlvbnMnIHF1ZXVlIGZpcnN0LgotCi0gICAgICAgIHZh
ciBxdWV1ZXMgPSBydW4ucXVldWVzOwotICAgICAgICBydW4uX2FkZFF1ZXVlKCdyb3V0ZXJUcmFu
c2l0aW9ucycsICdhY3Rpb25zJyk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5n
L2V4dC92aWV3IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItdmlld3Mvdmll
d3MvdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVu
Y3kxX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Ml9fLnNldDsKLSAgICAg
ICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1i
ZXJWaWV3ID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRp
bmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgRW1iZXJWaWV3LnJlb3Blbih7Ci0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBwcml2YXRlIGBfb3V0bGV0
c2Agb2JqZWN0IG9uIHRoZSB2aWV3LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5p
dAotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ19vdXRsZXRzJywge30pOwotICAgICAgICAgICAg
ICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgTWFudWFsbHkgZmlsbCBhbnkgb2YgYSB2aWV3J3MgYHt7b3V0bGV0
fX1gIGFyZWFzIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgIHN1cHBsaWVkIHZpZXcuCi0K
LSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5j
b21waWxlKCdDaGlsZCB2aWV3OiB7e291dGxldCAibWFpbiJ9fSAnKQotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG15VmlldyA9IE15Vmlldy5jcmVhdGUo
KTsKLSAgICAgICAgICAgICAgICAgICAgbXlWaWV3LmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZSBodG1sIGZvciBteVZpZXcgbm93IGxvb2tzIGxpa2U6Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIDxkaXYgaWQ9ImVtYmVyMjI4IiBjbGFzcz0iZW1iZXItdmlldyI+
Q2hpbGQgdmlldzogPC9kaXY+Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIEZvb1ZpZXcgPSBF
bWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVy
LkhhbmRsZWJhcnMuY29tcGlsZSgnPGgxPkZvbzwvaDE+ICcpCi0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICB2YXIgZm9vVmlldyA9IEZvb1ZpZXcuY3JlYXRlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIG15Vmlldy5jb25uZWN0T3V0bGV0KCdtYWluJywgZm9vVmll
dyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBodG1sIGZvciBteVZpZXcgbm93IGxvb2tz
IGxpa2U6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxkaXYgaWQ9ImVtYmVyMjI4IiBjbGFzcz0i
ZW1iZXItdmlldyI+Q2hpbGQgdmlldzoKLSAgICAgICAgICAgICAgICAgICAgLy8gICA8ZGl2IGlk
PSJlbWJlcjIzNCIgY2xhc3M9ImVtYmVyLXZpZXciPjxoMT5Gb288L2gxPiA8L2Rpdj4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGNvbm5lY3RPdXRsZXQKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtICB7U3RyaW5nfSBvdXRsZXROYW1lIEEgdW5pcXVlIG5hbWUgZm9yIHRoZSBvdXRsZXQK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtICB7T2JqZWN0fSB2aWV3ICAgICAgIEFuIEVtYmVy
LlZpZXcKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29ubmVjdE91dGxldDog
ZnVuY3Rpb24ob3V0bGV0TmFtZSwgdmlldykgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9w
ZW5kaW5nRGlzY29ubmVjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X3BlbmRpbmdEaXNjb25uZWN0aW9uc1tvdXRsZXROYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFzRXF1aXZhbGVudFZpZXcob3V0bGV0TmFtZSwg
dmlldykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5kZXN0cm95KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2
YXIgb3V0bGV0cyA9IGdldCh0aGlzLCAnX291dGxldHMnKTsKLSAgICAgICAgICAgICAgICB2YXIg
Y29udGFpbmVyID0gZ2V0KHRoaXMsICdjb250YWluZXInKTsKLSAgICAgICAgICAgICAgICB2YXIg
cm91dGVyID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5sb29rdXAoJ3JvdXRlcjptYWluJyk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJlbmRlcmVkTmFtZSA9IGdldCh2aWV3LCAncmVuZGVyZWROYW1l
Jyk7Ci0KLSAgICAgICAgICAgICAgICBzZXQob3V0bGV0cywgb3V0bGV0TmFtZSwgdmlldyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAocm91dGVyICYmIHJlbmRlcmVkTmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICByb3V0ZXIuX2Nvbm5lY3RBY3RpdmVWaWV3KHJlbmRlcmVkTmFtZSwgdmlldyk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaWYgdGhlIHZpZXcgaGFzIGFscmVhZHkgYmVl
biBjcmVhdGVkIGJ5IGNoZWNraW5nIGlmCi0gICAgICAgICAgICAgICAgICAgIHRoZSB2aWV3IGhh
cyB0aGUgc2FtZSBjb25zdHJ1Y3RvciwgdGVtcGxhdGUsIGFuZCBjb250ZXh0IGFzIHRoZQotICAg
ICAgICAgICAgICAgICAgICB2aWV3IGluIHRoZSBgX291dGxldHNgIG9iamVjdC4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9oYXNF
cXVpdmFsZW50VmlldwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gIHtTdHJpbmd9IG91dGxl
dE5hbWUgVGhlIG5hbWUgb2YgdGhlIG91dGxldCB3ZSBhcmUgY2hlY2tpbmcKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtICB7T2JqZWN0fSB2aWV3ICAgICAgIEFuIEVtYmVyLlZpZXcKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgX2hhc0VxdWl2YWxlbnRWaWV3OiBmdW5jdGlvbihvdXRsZXROYW1lLCB2aWV3
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nVmlldyA9IGdldCh0aGlzLCAnX291dGxl
dHMuJyArIG91dGxldE5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1ZpZXcg
JiYKLSAgICAgICAgICAgICAgICBleGlzdGluZ1ZpZXcuY29uc3RydWN0b3IgPT09IHZpZXcuY29u
c3RydWN0b3IgJiYKLSAgICAgICAgICAgICAgICBleGlzdGluZ1ZpZXcuZ2V0KCd0ZW1wbGF0ZScp
ID09PSB2aWV3LmdldCgndGVtcGxhdGUnKSAmJgotICAgICAgICAgICAgICAgIGV4aXN0aW5nVmll
dy5nZXQoJ2NvbnRleHQnKSA9PT0gdmlldy5nZXQoJ2NvbnRleHQnKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGFuIG91dGxl
dCBmcm9tIHRoZSB2aWV3LgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBNeVZp
ZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6
IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgnQ2hpbGQgdmlldzoge3tvdXRsZXQgIm1haW4ifX0g
JykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBteVZp
ZXcgPSBNeVZpZXcuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG15Vmlldy5hcHBlbmRU
bygnYm9keScpOwotICAgICAgICAgICAgICAgICAgICAvLyBteVZpZXcncyBodG1sOgotICAgICAg
ICAgICAgICAgICAgICAvLyA8ZGl2IGlkPSJlbWJlcjIyOCIgY2xhc3M9ImVtYmVyLXZpZXciPkNo
aWxkIHZpZXc6IDwvZGl2PgotCi0gICAgICAgICAgICAgICAgICAgIHZhciBGb29WaWV3ID0gRW1i
ZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5I
YW5kbGViYXJzLmNvbXBpbGUoJzxoMT5Gb288L2gxPiAnKQotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZvb1ZpZXcgPSBGb29WaWV3LmNyZWF0ZSgpOwot
ICAgICAgICAgICAgICAgICAgICBteVZpZXcuY29ubmVjdE91dGxldCgnbWFpbicsIGZvb1ZpZXcp
OwotICAgICAgICAgICAgICAgICAgICAvLyBteVZpZXcncyBodG1sOgotICAgICAgICAgICAgICAg
ICAgICAvLyA8ZGl2IGlkPSJlbWJlcjIyOCIgY2xhc3M9ImVtYmVyLXZpZXciPkNoaWxkIHZpZXc6
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgPGRpdiBpZD0iZW1iZXIyMzQiIGNsYXNzPSJlbWJl
ci12aWV3Ij48aDE+Rm9vPC9oMT4gPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIC8vIDwvZGl2
PgotCi0gICAgICAgICAgICAgICAgICAgIG15Vmlldy5kaXNjb25uZWN0T3V0bGV0KCdtYWluJyk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIG15VmlldydzIGh0bWw6Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIDxkaXYgaWQ9ImVtYmVyMjI4IiBjbGFzcz0iZW1iZXItdmlldyI+Q2hpbGQgdmlldzog
PC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgZGlzY29ubmVjdE91dGxldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gIHtTdHJp
bmd9IG91dGxldE5hbWUgVGhlIG5hbWUgb2YgdGhlIG91dGxldCB0byBiZSByZW1vdmVkCi0gICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRpc2Nvbm5lY3RPdXRsZXQ6IGZ1bmN0aW9u
KG91dGxldE5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdEaXNjb25u
ZWN0aW9ucykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nRGlzY29ubmVjdGlv
bnMgPSB7fTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGlu
Z0Rpc2Nvbm5lY3Rpb25zW291dGxldE5hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBydW4u
b25jZSh0aGlzLCAnX2ZpbmlzaERpc2Nvbm5lY3Rpb25zJyk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgR2V0cyBhbiBvdXRsZXQgdGhhdCBp
cyBwZW5kaW5nIGRpc2Nvbm5lY3Rpb24gYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgbnVs
bGlmeXMgdGhlIG9iamVjdCBvbiB0aGUgYF9vdXRsZXRgIG9iamVjdC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9maW5pc2hEaXNj
b25uZWN0aW9ucwotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZmluaXNoRGlz
Y29ubmVjdGlvbnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGVz
dHJveWVkKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBfb3V0bGV0cyB3aWxsIGJl
IGdvbmUgYW55d2F5Ci0gICAgICAgICAgICAgICAgdmFyIG91dGxldHMgPSBnZXQodGhpcywgJ19v
dXRsZXRzJyk7Ci0gICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdEaXNjb25uZWN0aW9ucyA9IHRo
aXMuX3BlbmRpbmdEaXNjb25uZWN0aW9uczsKLSAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5n
RGlzY29ubmVjdGlvbnMgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgb3V0bGV0
TmFtZSBpbiBwZW5kaW5nRGlzY29ubmVjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0
KG91dGxldHMsIG91dGxldE5hbWUsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVt
YmVyVmlldzsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBp
IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0Iiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gZGVwcmVjYXRlLCBhc3NlcnQKLSAgICAg
ICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2Rl
cGVuZGVuY3kzX18uc2V0OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJl
cgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBFbWJlci5Mb2NhdGlvbiByZXR1cm5zIGFuIGlu
c3RhbmNlIG9mIHRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgICAgICAgIHRo
ZSBgbG9jYXRpb25gIEFQSS4KLQotICAgICAgICAgICAgICAjIyBJbXBsZW1lbnRhdGlvbnMKLQot
ICAgICAgICAgICAgICBZb3UgY2FuIHBhc3MgYW4gaW1wbGVtZW50YXRpb24gbmFtZSAoYGhhc2hg
LCBgaGlzdG9yeWAsIGBub25lYCkgdG8gZm9yY2UgYQotICAgICAgICAgICAgICBwYXJ0aWN1bGFy
IGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbi4KLQotICAgICAg
ICAgICAgICAjIyMgSGFzaExvY2F0aW9uCi0KLSAgICAgICAgICAgICAgVXNpbmcgYEhhc2hMb2Nh
dGlvbmAgcmVzdWx0cyBpbiBVUkxzIHdpdGggYSBgI2AgKGhhc2ggc2lnbikgc2VwYXJhdGluZyB0
aGUKLSAgICAgICAgICAgICAgc2VydmVyIHNpZGUgVVJMIHBvcnRpb24gb2YgdGhlIFVSTCBmcm9t
IHRoZSBwb3J0aW9uIHRoYXQgaXMgdXNlZCBieSBFbWJlci4KLSAgICAgICAgICAgICAgVGhpcyBy
ZWxpZXMgdXBvbiB0aGUgYGhhc2hjaGFuZ2VgIGV2ZW50IGV4aXN0aW5nIGluIHRoZSBicm93c2Vy
LgotCi0gICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnJlc291cmNlKCdwb3N0cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgdGhpcy5yb3V0ZSgnbmV3Jyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgIEFwcC5Sb3V0ZXIucmVvcGVuKHsKLSAgICAgICAgICAgICAg
ICBsb2NhdGlvbjogJ2hhc2gnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgcG9zdHMubmV3IHVybCBvZiBg
LyMvcG9zdHMvbmV3YC4KLQotICAgICAgICAgICAgICAjIyMgSGlzdG9yeUxvY2F0aW9uCi0KLSAg
ICAgICAgICAgICAgVXNpbmcgYEhpc3RvcnlMb2NhdGlvbmAgcmVzdWx0cyBpbiBVUkxzIHRoYXQg
YXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYQotICAgICAgICAgICAgICBzdGFuZGFyZCBVUkwu
IFRoaXMgcmVsaWVzIHVwb24gdGhlIGJyb3dzZXIncyBgaGlzdG9yeWAgQVBJLgotCi0gICAgICAg
ICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJl
c291cmNlKCdwb3N0cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0
ZSgnbmV3Jyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIEFwcC5Sb3V0ZXIucmVvcGVuKHsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbjog
J2hpc3RvcnknCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgcG9zdHMubmV3IHVybCBvZiBgL3Bvc3RzL25l
d2AuCi0KLSAgICAgICAgICAgICAgS2VlcCBpbiBtaW5kIHRoYXQgeW91ciBzZXJ2ZXIgbXVzdCBz
ZXJ2ZSB0aGUgRW1iZXIgYXBwIGF0IGFsbCB0aGUgcm91dGVzIHlvdQotICAgICAgICAgICAgICBk
ZWZpbmUuCi0KLSAgICAgICAgICAgICAgIyMjIEF1dG9Mb2NhdGlvbgotCi0gICAgICAgICAgICAg
IFVzaW5nIGBBdXRvTG9jYXRpb25gLCB0aGUgcm91dGVyIHdpbGwgdXNlIHRoZSBiZXN0IExvY2F0
aW9uIGNsYXNzIHN1cHBvcnRlZCBieQotICAgICAgICAgICAgICB0aGUgYnJvd3NlciBpdCBpcyBy
dW5uaW5nIGluLgotCi0gICAgICAgICAgICAgIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0aGUgYGhp
c3RvcnlgIEFQSSB3aWxsIHVzZSBgSGlzdG9yeUxvY2F0aW9uYCwgdGhvc2UgdGhhdAotICAgICAg
ICAgICAgICBkbyBub3QsIGJ1dCBzdGlsbCBzdXBwb3J0IHRoZSBgaGFzaGNoYW5nZWAgZXZlbnQg
d2lsbCB1c2UgYEhhc2hMb2NhdGlvbmAsIGFuZAotICAgICAgICAgICAgICBpbiB0aGUgcmFyZSBj
YXNlIG5laXRoZXIgaXMgc3VwcG9ydGVkIHdpbGwgdXNlIGBOb25lTG9jYXRpb25gLgotCi0gICAg
ICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LnJlc291cmNlKCdwb3N0cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5y
b3V0ZSgnbmV3Jyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgIEFwcC5Sb3V0ZXIucmVvcGVuKHsKLSAgICAgICAgICAgICAgICBsb2NhdGlv
bjogJ2F1dG8nCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgcG9zdHMubmV3IHVybCBvZiBgL3Bvc3RzL25l
d2AgZm9yIG1vZGVybiBicm93c2VycyB0aGF0Ci0gICAgICAgICAgICAgIHN1cHBvcnQgdGhlIGBo
aXN0b3J5YCBhcGkgb3IgYC8jL3Bvc3RzL25ld2AgZm9yIG9sZGVyIG9uZXMsIGxpa2UgSW50ZXJu
ZXQKLSAgICAgICAgICAgICAgRXhwbG9yZXIgOSBhbmQgYmVsb3cuCi0KLSAgICAgICAgICAgICAg
V2hlbiBhIHVzZXIgdmlzaXRzIGEgbGluayB0byB5b3VyIGFwcGxpY2F0aW9uLCB0aGV5IHdpbGwg
YmUgYXV0b21hdGljYWxseQotICAgICAgICAgICAgICB1cGdyYWRlZCBvciBkb3duZ3JhZGVkIHRv
IHRoZSBhcHByb3ByaWF0ZSBgTG9jYXRpb25gIGNsYXNzLCB3aXRoIHRoZSBVUkwKLSAgICAgICAg
ICAgICAgdHJhbnNmb3JtZWQgYWNjb3JkaW5nbHksIGlmIG5lZWRlZC4KLQotICAgICAgICAgICAg
ICBLZWVwIGluIG1pbmQgdGhhdCBzaW5jZSBzb21lIG9mIHlvdXIgdXNlcnMgd2lsbCB1c2UgYEhp
c3RvcnlMb2NhdGlvbmAsIHlvdXIKLSAgICAgICAgICAgICAgc2VydmVyIG11c3Qgc2VydmUgdGhl
IEVtYmVyIGFwcCBhdCBhbGwgdGhlIHJvdXRlcyB5b3UgZGVmaW5lLgotCi0gICAgICAgICAgICAg
ICMjIyBOb25lTG9jYXRpb24KLQotICAgICAgICAgICAgICBVc2luZyBgTm9uZUxvY2F0aW9uYCBj
YXVzZXMgRW1iZXIgdG8gbm90IHN0b3JlIHRoZSBhcHBsaWNhdGlvbnMgVVJMIHN0YXRlCi0gICAg
ICAgICAgICAgIGluIHRoZSBhY3R1YWwgVVJMLiBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIGZvciB0
ZXN0aW5nIHB1cnBvc2VzLCBhbmQgaXMgb25lCi0gICAgICAgICAgICAgIG9mIHRoZSBjaGFuZ2Vz
IG1hZGUgd2hlbiBjYWxsaW5nIGBBcHAuc2V0dXBGb3JUZXN0aW5nKClgLgotCi0gICAgICAgICAg
ICAgICMjIExvY2F0aW9uIEFQSQotCi0gICAgICAgICAgICAgIEVhY2ggbG9jYXRpb24gaW1wbGVt
ZW50YXRpb24gbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKLQotICAgICAgICAg
ICAgICAqIGltcGxlbWVudGF0aW9uOiByZXR1cm5zIHRoZSBzdHJpbmcgbmFtZSB1c2VkIHRvIHJl
ZmVyZW5jZSB0aGUgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICAgICogZ2V0VVJMOiByZXR1
cm5zIHRoZSBjdXJyZW50IFVSTC4KLSAgICAgICAgICAgICAgKiBzZXRVUkwocGF0aCk6IHNldHMg
dGhlIGN1cnJlbnQgVVJMLgotICAgICAgICAgICAgICAqIHJlcGxhY2VVUkwocGF0aCk6IHJlcGxh
Y2UgdGhlIGN1cnJlbnQgVVJMIChvcHRpb25hbCkuCi0gICAgICAgICAgICAgICogb25VcGRhdGVV
UkwoY2FsbGJhY2spOiB0cmlnZ2VycyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgVVJMIGNoYW5nZXMu
Ci0gICAgICAgICAgICAgICogZm9ybWF0VVJMKHVybCk6IGZvcm1hdHMgYHVybGAgdG8gYmUgcGxh
Y2VkIGludG8gYGhyZWZgIGF0dHJpYnV0ZS4KLQotICAgICAgICAgICAgICBDYWxsaW5nIHNldFVS
TCBvciByZXBsYWNlVVJMIHdpbGwgbm90IHRyaWdnZXIgb25VcGRhdGVVUkwgY2FsbGJhY2tzLgot
Ci0gICAgICAgICAgICAgIEBjbGFzcyBMb2NhdGlvbgotICAgICAgICAgICAgICBAbmFtZXNwYWNl
IEVtYmVyCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSB7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICBUaGlzIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGNvbnRhaW5lciB0
byBsb29rdXAgdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24g
YXMgZGVzaXJlZC4KLQotICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgIC8vIEdpdmVuIGEg
bG9jYXRpb24gcmVnaXN0ZXJlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5yZWdpc3RlcignbG9jYXRpb246aGlzdG9yeS10ZXN0JywgSGlzdG9yeVRlc3RMb2NhdGlv
bik7Ci0KLSAgICAgICAgICAgICAgICAgICAvLyBZb3UgY291bGQgY3JlYXRlIGEgbmV3IGluc3Rh
bmNlIHZpYToKLSAgICAgICAgICAgICAgICAgICBjb250YWluZXIubG9va3VwKCdsb2NhdGlvbjpo
aXN0b3J5LXRlc3QnKTsKLSAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGNyZWF0ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
b3B0aW9ucwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGFuIGluc3RhbmNl
IG9mIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgbG9jYXRpb25gIEFQSQotICAgICAgICAgICAg
ICAgICAgICBAZGVwcmVjYXRlZCBVc2UgdGhlIGNvbnRhaW5lciB0byBsb29rdXAgdGhlIGxvY2F0
aW9uIGltcGxlbWVudGF0aW9uIHRoYXQgeW91Ci0gICAgICAgICAgICAgICAgICAgIG5lZWQuCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbihvcHRpb25z
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGltcGxlbWVudGF0aW9uID0gb3B0aW9ucyAmJiBvcHRp
b25zLmltcGxlbWVudGF0aW9uOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiRW1iZXIu
TG9jYXRpb24uY3JlYXRlOiB5b3UgbXVzdCBzcGVjaWZ5IGEgJ2ltcGxlbWVudGF0aW9uJyBvcHRp
b24iLCAhIWltcGxlbWVudGF0aW9uKTsKLQotICAgICAgICAgICAgICAgIHZhciBpbXBsZW1lbnRh
dGlvbkNsYXNzID0gdGhpcy5pbXBsZW1lbnRhdGlvbnNbaW1wbGVtZW50YXRpb25dOwotICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgiRW1iZXIuTG9jYXRpb24uY3JlYXRlOiAiICsgaW1wbGVt
ZW50YXRpb24gKyAiIGlzIG5vdCBhIHZhbGlkIGltcGxlbWVudGF0aW9uIiwgISFpbXBsZW1lbnRh
dGlvbkNsYXNzKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbkNsYXNz
LmNyZWF0ZS5hcHBseShpbXBsZW1lbnRhdGlvbkNsYXNzLCBhcmd1bWVudHMpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgVGhpcyBpcyBkZXBy
ZWNhdGVkIGluIGZhdm9yIG9mIHVzaW5nIHRoZSBjb250YWluZXIgdG8gcmVnaXN0ZXIgdGhlCi0g
ICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaW1wbGVtZW50YXRpb24gYXMgZGVzaXJlZC4KLQot
ICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAg
ICAgICAgICAgICAgICAgICBuYW1lOiAiaGlzdG9yeS10ZXN0LWxvY2F0aW9uIiwKLQotICAgICAg
ICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2xvY2F0aW9u
Omhpc3RvcnktdGVzdCcsIEhpc3RvcnlUZXN0TG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlZ2lzdGVySW1wbGVtZW50YXRpb24KLSAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGxvY2F0aW9uYCBBUEkKLSAgICAgICAg
ICAgICAgICAgICBAZGVwcmVjYXRlZCBSZWdpc3RlciB5b3VyIGN1c3RvbSBsb2NhdGlvbiBpbXBs
ZW1lbnRhdGlvbiB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciBkaXJlY3Rs
eS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZWdpc3RlckltcGxlbWVudGF0
aW9uOiBmdW5jdGlvbihuYW1lLCBpbXBsZW1lbnRhdGlvbikgewotICAgICAgICAgICAgICAgIEVt
YmVyLmRlcHJlY2F0ZSgnVXNpbmcgdGhlIEVtYmVyLkxvY2F0aW9uLnJlZ2lzdGVySW1wbGVtZW50
YXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUmVnaXN0ZXIgeW91ciBjdXN0b20gbG9jYXRp
b24gaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgY29udGFpbmVyIGluc3RlYWQuJywgZmFsc2UpOwot
Ci0gICAgICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbnNbbmFtZV0gPSBpbXBsZW1lbnRh
dGlvbjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9uczoge30s
Ci0gICAgICAgICAgICBfbG9jYXRpb246IHdpbmRvdy5sb2NhdGlvbiwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYGxvY2F0aW9uLmhh
c2hgIGJ5IHBhcnNpbmcgbG9jYXRpb24uaHJlZiBzaW5jZSBicm93c2VycwotICAgICAgICAgICAg
ICAgICAgICBpbmNvbnNpc3RlbnRseSBVUkwtZGVjb2RlIGBsb2NhdGlvbi5oYXNoYC4KLQotICAg
ICAgICAgICAgICAgICAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD00ODMzMDQKLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGdldEhhc2gKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNC4w
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2dldEhhc2g6IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgICAgICAvLyBBdXRvTG9jYXRpb24gaGFzIGl0IGF0IF9sb2NhdGlvbiwg
SGFzaExvY2F0aW9uIGF0IC5sb2NhdGlvbi4KLSAgICAgICAgICAgICAgICAvLyBCZWluZyBuaWNl
IGFuZCBub3QgY2hhbmdpbmcKLSAgICAgICAgICAgICAgICB2YXIgaHJlZiA9ICh0aGlzLl9sb2Nh
dGlvbiB8fCB0aGlzLmxvY2F0aW9uKS5ocmVmOwotICAgICAgICAgICAgICAgIHZhciBoYXNoSW5k
ZXggPSBocmVmLmluZGV4T2YoJyMnKTsKLQotICAgICAgICAgICAgICAgIGlmIChoYXNoSW5kZXgg
PT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHJlZi5zdWJzdHIoaGFzaElu
ZGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2F1dG9fbG9jYXRpb24iLAot
ICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIiwgImVt
YmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlvbiIsICJlbWJlci1yb3V0aW5nL2xv
Y2F0aW9uL2hhc2hfbG9jYXRpb24iLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9ub25lX2xvY2F0
aW9uIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIC8vIEZFQVRVUkVTCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVu
ZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLQot
ICAgICAgICB2YXIgRW1iZXJMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgSGlzdG9yeUxvY2F0aW9uID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBIYXNoTG9jYXRpb24gPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIE5vbmVMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1
Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBFbWJlci5BdXRvTG9jYXRpb24gd2lsbCBzZWxlY3QgdGhlIGJlc3QgbG9jYXRp
b24gb3B0aW9uIGJhc2VkIG9mZiBicm93c2VyCi0gICAgICAgICAgICAgIHN1cHBvcnQgd2l0aCB0
aGUgcHJpb3JpdHkgb3JkZXI6IGhpc3RvcnksIGhhc2gsIG5vbmUuCi0KLSAgICAgICAgICAgICAg
Q2xlYW4gcHVzaFN0YXRlIHBhdGhzIGFjY2Vzc2VkIGJ5IGhhc2hjaGFuZ2Utb25seSBicm93c2Vy
cyB3aWxsIGJlIHJlZGlyZWN0ZWQKLSAgICAgICAgICAgICAgdG8gdGhlIGhhc2gtZXF1aXZhbGVu
dCBhbmQgdmljZSB2ZXJzYSBzbyBmdXR1cmUgdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQuCi0K
LSAgICAgICAgICAgICAgS2VlcCBpbiBtaW5kIHRoYXQgc2luY2Ugc29tZSBvZiB5b3VyIHVzZXJz
IHdpbGwgdXNlIGBIaXN0b3J5TG9jYXRpb25gLCB5b3VyCi0gICAgICAgICAgICAgIHNlcnZlciBt
dXN0IHNlcnZlIHRoZSBFbWJlciBhcHAgYXQgYWxsIHRoZSByb3V0ZXMgeW91IGRlZmluZS4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgQXV0b0xvY2F0aW9uCi0gICAgICAgICAgICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgKi8KLSAgICAgICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBp
cyB1c2VkIGJ5IHJvdXRlcjptYWluIHRvIGtub3cgd2hldGhlciB0byBjYW5jZWwgdGhlIHJvdXRp
bmcKLSAgICAgICAgICAgICAgICAgICAgc2V0dXAgcHJvY2Vzcywgd2hpY2ggaXMgbmVlZGVkIHdo
aWxlIHdlIHJlZGlyZWN0IHRoZSBicm93c2VyLgotCi0gICAgICAgICAgICAgICAgICAgIEBzaW5j
ZSAxLjUuMQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY2FuY2VsUm91dGVyU2V0dXAK
LSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBjYW5jZWxSb3V0ZXJTZXR1cDogZmFsc2UsCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIFdp
bGwgYmUgcHJlLXBlbmRlZCB0byBwYXRoIHVwb24gc3RhdGUgY2hhbmdlLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcm9v
dFVSTAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCAnLycKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICByb290VVJMOiAnLycsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkIGZv
ciBtb2NraW5nIGluIHRlc3RzCi0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNS4xCi0g
ICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBfd2luZG93Ci0gICAgICAgICAgICAgICAgICAg
IEBkZWZhdWx0IHdpbmRvdwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF93aW5k
b3c6IHdpbmRvdywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2
YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWQgZm9yIG1vY2tpbmcgaW4gdGVzdHMK
LQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbG9jYXRpb24KLSAgICAgICAgICAgICAg
ICAgICAgQGRlZmF1bHQgd2luZG93LmxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgX2xvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEF0dGFj
aGVkIGZvciBtb2NraW5nIGluIHRlc3RzCi0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEu
NS4xCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBfaGlzdG9yeQotICAgICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCB3aW5kb3cuaGlzdG9yeQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIF9oaXN0b3J5OiB3aW5kb3cuaGlzdG9yeSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQXR0YWNo
ZWQgZm9yIG1vY2tpbmcgaW4gdGVzdHMKLQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41
LjEKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IF9IaXN0b3J5TG9jYXRpb24KLSAgICAg
ICAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuSGlzdG9yeUxvY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgX0hpc3RvcnlMb2NhdGlvbjogSGlzdG9yeUxvY2F0aW9u
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAg
ICAgICAgICAgICAgICAgICBBdHRhY2hlZCBmb3IgbW9ja2luZyBpbiB0ZXN0cwotCi0gICAgICAg
ICAgICAgICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkg
X0hhc2hMb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBFbWJlci5IYXNoTG9j
YXRpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfSGFzaExvY2F0aW9uOiBI
YXNoTG9jYXRpb24sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEF0dGFjaGVkIGZvciBtb2NraW5nIGluIHRlc3Rz
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNS4xCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBfTm9uZUxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IEVt
YmVyLk5vbmVMb2NhdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9Ob25l
TG9jYXRpb246IE5vbmVMb2NhdGlvbiwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBsb2NhdGlvbi5v
cmlnaW4gb3IgYnVpbGRzIGl0IGlmIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgaXQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBfZ2V0T3JpZ2luCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgX2dldE9yaWdpbjogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHZh
ciBsb2NhdGlvbiA9IHRoaXMuX2xvY2F0aW9uOwotICAgICAgICAgICAgICAgIHZhciBvcmlnaW4g
PSBsb2NhdGlvbi5vcmlnaW47Ci0KLSAgICAgICAgICAgICAgICAvLyBPbGRlciBicm93c2Vycywg
ZXNwZWNpYWxseSBJRSwgZG9uJ3QgaGF2ZSBvcmlnaW4KLSAgICAgICAgICAgICAgICBpZiAoIW9y
aWdpbikgewotICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPSBsb2NhdGlvbi5wcm90b2NvbCAr
ICcvLycgKyBsb2NhdGlvbi5ob3N0bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobG9j
YXRpb24ucG9ydCkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luICs9ICc6JyArIGxv
Y2F0aW9uLnBvcnQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAg
ICAgICAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGhpc3Rvcnkgb2JqZWN0IGhhcyBhIHB1c2hTdGF0
ZSBtZXRob2QsIHRoZSBob3N0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IEhp
c3RvcnlMb2NhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9nZXRTdXBwb3J0
c0hpc3RvcnkKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0U3VwcG9ydHNI
aXN0b3J5OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgLy8gQm9vc3RlZCBmcm9tIE1v
ZGVybml6cjogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0
ZXIvZmVhdHVyZS1kZXRlY3RzL2hpc3RvcnkuanMKLSAgICAgICAgICAgICAgICAvLyBUaGUgc3Rv
Y2sgYnJvd3NlciBvbiBBbmRyb2lkIDIuMiAmIDIuMyByZXR1cm5zIHBvc2l0aXZlIG9uIGhpc3Rv
cnkgc3VwcG9ydAotICAgICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgc3VwcG9ydCBpcyBy
ZWFsbHkgYnVnZ3kgYW5kIHRoZXJlIGlzIG5vIGNsZWFuIHdheSB0byBkZXRlY3QKLSAgICAgICAg
ICAgICAgICAvLyB0aGVzZSBidWdzLCBzbyB3ZSBmYWxsIGJhY2sgdG8gYSB1c2VyIGFnZW50IHNu
aWZmIDooCi0gICAgICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IHRoaXMuX3dpbmRvdy5uYXZp
Z2F0b3IudXNlckFnZW50OwotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IEFuZHJv
aWQgMiwgc3RvY2sgYnJvd3NlciwgYW5kIG5vdCBDaHJvbWUgd2hpY2ggaWRlbnRpZmllcwotICAg
ICAgICAgICAgICAgIC8vIGl0c2VsZiBhcyAnTW9iaWxlIFNhZmFyaScgYXMgd2VsbAotICAgICAg
ICAgICAgICAgIGlmICh1c2VyQWdlbnQuaW5kZXhPZignQW5kcm9pZCAyJykgIT09IC0xICYmCi0g
ICAgICAgICAgICAgICAgdXNlckFnZW50LmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEg
JiYKLSAgICAgICAgICAgICAgICB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPT09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gISEodGhpcy5faGlzdG9yeSAmJiAncHVzaFN0YXRlJyBp
biB0aGlzLl9oaXN0b3J5KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIElFOCBydW5u
aW5nIGluIElFNyBjb21wYXRpYmlsaXR5IG1vZGUgZ2l2ZXMgZmFsc2UgcG9zaXRpdmUsIHNvIHdl
IG11c3QgYWxzbwotICAgICAgICAgICAgICAgICAgICBjaGVjayBkb2N1bWVudE1vZGUuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfZ2V0U3VwcG9ydHNIYXNoQ2hhbmdlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgX2dldFN1cHBvcnRzSGFzaENoYW5nZTogZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgIHZhciBfd2luZG93ID0gdGhpcy5fd2luZG93OwotICAg
ICAgICAgICAgICAgIHZhciBkb2N1bWVudE1vZGUgPSBfd2luZG93LmRvY3VtZW50LmRvY3VtZW50
TW9kZTsKLQotICAgICAgICAgICAgICAgIHJldHVybiAoJ29uaGFzaGNoYW5nZScgaW4gX3dpbmRv
dyAmJiAoZG9jdW1lbnRNb2RlID09PSB1bmRlZmluZWQgfHwgZG9jdW1lbnRNb2RlID4gNyApKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIFJlZGlyZWN0cyB0aGUgYnJvd3NlciB1c2lu
ZyBsb2NhdGlvbi5yZXBsYWNlLCBwcmVwZW5kaW5nIHRoZSBsb2NhdGluLm9yaWdpbgotICAgICAg
ICAgICAgICAgICAgICB0byBwcmV2ZW50IHBoaXNoaW5nIGF0dGVtcHRzCi0KLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBfcmVwbGFjZVBhdGgKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBfcmVwbGFjZVBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fbG9jYXRpb24ucmVwbGFjZSh0aGlzLl9nZXRPcmlnaW4oKSArIHBhdGgpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAx
LjUuMQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIF9nZXRSb290VVJMCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2dl
dFJvb3RVUkw6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb290
VVJMOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBg
bG9jYXRpb24ucGF0aG5hbWVgLCBub3JtYWxpemVkIGZvciBJRSBpbmNvbnNpc3RlbmNpZXMuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfZ2V0UGF0aAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIF9nZXRQYXRoOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHBhdGhuYW1lID0gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWU7Ci0gICAgICAgICAgICAgICAg
Ly8gVmFyaW91cyB2ZXJzaW9ucyBvZiBJRS9PcGVyYSBkb24ndCBhbHdheXMgcmV0dXJuIGEgbGVh
ZGluZyBzbGFzaAotICAgICAgICAgICAgICAgIGlmIChwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcv
JykgewotICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRobmFtZTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0
ZQotCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgbm9ybWFsaXplZCBsb2NhdGlvbi5oYXNo
IGFzIGFuIGFsaWFzIHRvIEVtYmVyLkxvY2F0aW9uLl9nZXRIYXNoCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHNpbmNlIDEuNS4xCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2dldEhhc2gK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0SGFzaDogRW1iZXJMb2NhdGlv
bi5fZ2V0SGFzaCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2
YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBsb2NhdGlvbi5zZWFyY2gKLQotICAg
ICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjEKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBfZ2V0UXVlcnkKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0UXVlcnk6
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uc2Vh
cmNoOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZnVsbCBwYXRo
bmFtZSBpbmNsdWRpbmcgcXVlcnkgYW5kIGhhc2gKLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIF9nZXRGdWxsUGF0aAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9nZXRG
dWxsUGF0aDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQ
YXRoKCkgKyB0aGlzLl9nZXRRdWVyeSgpICsgdGhpcy5fZ2V0SGFzaCgpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBwYXRoIGFzIGl0IHNob3VsZCBh
cHBlYXIgZm9yIEhpc3RvcnlMb2NhdGlvbiBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICAgICAg
YnJvd3NlcnMuIFRoaXMgbWF5IHZlcnkgd2VsbCBkaWZmZXIgZnJvbSB0aGUgcmVhbCBjdXJyZW50
IHBhdGggKGUuZy4gaWYgaXQKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRzIG9mZiBhcyBhIGhh
c2hlZCBVUkwpCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfZ2V0SGlzdG9yeVBhdGgK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0SGlzdG9yeVBhdGg6IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm9vdFVSTCA9IHRoaXMuX2dldFJvb3RVUkwo
KTsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuX2dldFBhdGgoKTsKLSAgICAgICAg
ICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2dldEhhc2goKTsKLSAgICAgICAgICAgICAgICB2YXIg
cXVlcnkgPSB0aGlzLl9nZXRRdWVyeSgpOwotICAgICAgICAgICAgICAgIHZhciByb290VVJMSW5k
ZXggPSBwYXRoLmluZGV4T2Yocm9vdFVSTCk7Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlSGFz
aCwgaGFzaFBhcnRzOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdQYXRoICcgKyBw
YXRoICsgJyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcm92aWRlZCByb290VVJMICcgKyByb290
VVJMLCByb290VVJMSW5kZXggPT09IDApOwotCi0gICAgICAgICAgICAgICAgLy8gQnkgY29udmVu
dGlvbiwgRW1iZXIuanMgcm91dGVzIHVzaW5nIEhhc2hMb2NhdGlvbiBhcmUgcmVxdWlyZWQgdG8g
c3RhcnQKLSAgICAgICAgICAgICAgICAvLyB3aXRoIGAjL2AuIEFueXRoaW5nIGVsc2Ugc2hvdWxk
IE5PVCBiZSBjb25zaWRlcmVkIGEgcm91dGUgYW5kIHNob3VsZAotICAgICAgICAgICAgICAgIC8v
IGJlIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoLCB3aXRob3V0IHRyYW5zZm9ybWF0aW9uLgotICAg
ICAgICAgICAgICAgIGlmIChoYXNoLnN1YnN0cigwLCAyKSA9PT0gJyMvJykgewotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBleHRyYSBoYXNoIHNlZ21lbnRzIGFmdGVyIHRo
ZSByb3V0ZQotICAgICAgICAgICAgICAgICAgICBoYXNoUGFydHMgPSBoYXNoLnN1YnN0cigxKS5z
cGxpdCgnIycpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3Qgb25lIGlzIGFsd2F5
cyB0aGUgcm91dGUgdXJsCi0gICAgICAgICAgICAgICAgICAgIHJvdXRlSGFzaCA9IGhhc2hQYXJ0
cy5zaGlmdCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXRoIGFscmVhZHkg
aGFzIGEgdHJhaWxpbmcgc2xhc2gsIHJlbW92ZSB0aGUgb25lCi0gICAgICAgICAgICAgICAgICAg
IC8vIGZyb20gdGhlIGhhc2hlZCByb3V0ZSBzbyB3ZSBkb24ndCBkb3VibGUgdXAuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChwYXRoLnNsaWNlKC0xKSA9PT0gJy8nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByb3V0ZUhhc2ggPSByb3V0ZUhhc2guc3Vic3RyKDEpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgImV4cGVjdGVk
IiBmaW5hbCBvcmRlcgotICAgICAgICAgICAgICAgICAgICBwYXRoICs9IHJvdXRlSGFzaDsKLSAg
ICAgICAgICAgICAgICAgICAgcGF0aCArPSBxdWVyeTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzaFBhcnRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCArPSAn
IycgKyBoYXNoUGFydHMuam9pbignIycpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0aCArPSBxdWVyeTsKLSAg
ICAgICAgICAgICAgICAgICAgcGF0aCArPSBoYXNoOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAg
UmV0dXJucyB0aGUgY3VycmVudCBwYXRoIGFzIGl0IHNob3VsZCBhcHBlYXIgZm9yIEhhc2hMb2Nh
dGlvbiBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICAgICAgYnJvd3NlcnMuIFRoaXMgbWF5IHZl
cnkgd2VsbCBkaWZmZXIgZnJvbSB0aGUgcmVhbCBjdXJyZW50IHBhdGguCi0KLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBfZ2V0SGFzaFBhdGgKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBfZ2V0SGFzaFBhdGg6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cm9vdFVSTCA9IHRoaXMuX2dldFJvb3RVUkwoKTsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9
IHJvb3RVUkw7Ci0gICAgICAgICAgICAgICAgdmFyIGhpc3RvcnlQYXRoID0gdGhpcy5fZ2V0SGlz
dG9yeVBhdGgoKTsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVQYXRoID0gaGlzdG9yeVBhdGgu
c3Vic3RyKHJvb3RVUkwubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIGlmIChyb3V0ZVBhdGgg
IT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZVBhdGguY2hhckF0KDApICE9
PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUGF0aCA9ICcvJyArIHJvdXRl
UGF0aDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHBhdGgg
Kz0gJyMnICsgcm91dGVQYXRoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiBwYXRoOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFNlbGVjdHMgdGhlIGJlc3QgbG9jYXRpb24gb3B0aW9uIGJhc2VkIG9mZiBi
cm93c2VyIHN1cHBvcnQgYW5kIHJldHVybnMgYW4KLSAgICAgICAgICAgICAgICAgICAgaW5zdGFu
Y2Ugb2YgdGhhdCBMb2NhdGlvbiBjbGFzcy4KLQotICAgICAgICAgICAgICAgICAgICBAc2VlIEVt
YmVyLkF1dG9Mb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZQotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gKG9wdGlvbnMp
IHsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJvb3RVUkwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdyb290VVJMIG11c3QgZW5kIHdpdGggYSB0
cmFpbGluZyBmb3J3YXJkIHNsYXNoIGUuZy4gIi9hcHAvIicsIG9wdGlvbnMucm9vdFVSTC5jaGFy
QXQob3B0aW9ucy5yb290VVJMLmxlbmd0aC0xKSA9PT0gJy8nKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5yb290VVJMID0gb3B0aW9ucy5yb290VVJMOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHZhciBoaXN0b3J5UGF0aCwgaGFzaFBhdGg7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNhbmNlbFJvdXRlclNldHVwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFyIGlt
cGxlbWVudGF0aW9uQ2xhc3MgPSB0aGlzLl9Ob25lTG9jYXRpb247Ci0gICAgICAgICAgICAgICAg
dmFyIGN1cnJlbnRQYXRoID0gdGhpcy5fZ2V0RnVsbFBhdGgoKTsKLQotICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9nZXRTdXBwb3J0c0hpc3RvcnkoKSkgewotICAgICAgICAgICAgICAgICAgICBo
aXN0b3J5UGF0aCA9IHRoaXMuX2dldEhpc3RvcnlQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gU2luY2Ugd2Ugc3VwcG9ydCBoaXN0b3J5IHBhdGhzLCBsZXQncyBiZSBzdXJlIHdlJ3Jl
IHVzaW5nIHRoZW0gZWxzZQotICAgICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggdGhlIGxvY2F0
aW9uIG92ZXIgdG8gaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGF0aCA9PT0g
aGlzdG9yeVBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uQ2xh
c3MgPSB0aGlzLl9IaXN0b3J5TG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxSb3V0ZXJTZXR1cCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlUGF0aChoaXN0b3J5UGF0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZ2V0
U3VwcG9ydHNIYXNoQ2hhbmdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFzaFBhdGggPSB0
aGlzLl9nZXRIYXNoUGF0aCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEJlIHN1cmUgd2Un
cmUgdXNpbmcgYSBoYXNoZWQgcGF0aCwgb3RoZXJ3aXNlIGxldCdzIHN3aXRjaCBvdmVyIGl0IHRv
IHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IG9mZiBjbGVhbiBhbmQgY29uc2lz
dGVudC4gV2UnbGwgY291bnQgYW4gaW5kZXggcGF0aCB3aXRoIG5vCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGhhc2ggYXMgImdvb2QgZW5vdWdoIiBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudFBhdGggPT09IGhhc2hQYXRoIHx8IChjdXJyZW50UGF0aCA9PT0gJy8nICYm
IGhhc2hQYXRoID09PSAnLyMvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uQ2xhc3MgPSB0aGlzLl9IYXNoTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXIgVVJMIGlzbid0IGluIHRoZSBl
eHBlY3RlZCBoYXNoLXN1cHBvcnRlZCBmb3JtYXQsIHNvIHdlIHdhbnQgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNhbmNlbCB0aGUgcm91dGVyIHNldHVwIGFuZCByZXBsYWNlIHRoZSBV
UkwgdG8gc3RhcnQgb2ZmIGNsZWFuCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxSb3V0
ZXJTZXR1cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlUGF0
aChoYXNoUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbkNsYXNz
LmNyZWF0ZS5hcHBseShpbXBsZW1lbnRhdGlvbkNsYXNzLCBhcmd1bWVudHMpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGNhbmNlbFJvdXRlclNldHVwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dChpbXBsZW1lbnRhdGlvbiwgJ2NhbmNlbFJvdXRlclNldHVwJywgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9s
b2NhdGlvbi9oYXNoX2xvY2F0aW9uIiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJv
dXRpbmcvbG9jYXRpb24vYXBpIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVu
Y3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAgdmFy
IHNldCA9IF9fZGVwZW5kZW5jeTJfXy5zZXQ7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVu
Y3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18u
Z3VpZEZvcjsKLQotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3k1X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyTG9jYXRpb24gPSBfX2RlcGVuZGVuY3k2X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJd
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAg
QHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBgRW1iZXIuSGFzaExvY2F0aW9uYCBpbXBsZW1lbnRzIHRoZSBsb2NhdGlv
biBBUEkgdXNpbmcgdGhlIGJyb3dzZXIncwotICAgICAgICAgICAgICBoYXNoLiBBdCBwcmVzZW50
LCBpdCByZWxpZXMgb24gYSBgaGFzaGNoYW5nZWAgZXZlbnQgZXhpc3RpbmcgaW4gdGhlCi0gICAg
ICAgICAgICAgIGJyb3dzZXIuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEhhc2hMb2NhdGlvbgot
ICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVt
YmVyLk9iamVjdAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQi
XSA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjogJ2hh
c2gnLAotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBz
ZXQodGhpcywgJ2xvY2F0aW9uJywgZ2V0KHRoaXMsICdfbG9jYXRpb24nKSB8fCB3aW5kb3cubG9j
YXRpb24pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBub3JtYWxpemVk
IGxvY2F0aW9uLmhhc2gKLQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjEKLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRIYXNoCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZ2V0SGFzaDogRW1iZXJMb2NhdGlvbi5fZ2V0SGFzaCwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYGxvY2F0aW9uLmhh
c2hgLCBtaW51cyB0aGUgJyMnIGF0IHRoZSBmcm9udC4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdldFVSTAotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGdldFVSTDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0SGFzaCgpLnN1YnN0cigxKTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGBsb2NhdGlvbi5oYXNo
YCBhbmQgcmVtZW1iZXJzIHdoYXQgd2FzIHNldC4gVGhpcyBwcmV2ZW50cwotICAgICAgICAgICAg
ICAgICAgICBgb25VcGRhdGVVUkxgIGNhbGxiYWNrcyBmcm9tIHRyaWdnZXJpbmcgd2hlbiB0aGUg
aGFzaCB3YXMgc2V0IGJ5Ci0gICAgICAgICAgICAgICAgICAgIGBIYXNoTG9jYXRpb25gLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
c2V0VVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0VVJMOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAg
ICAgICAgICAgICAgZ2V0KHRoaXMsICdsb2NhdGlvbicpLmhhc2ggPSBwYXRoOwotICAgICAgICAg
ICAgICAgIHNldCh0aGlzLCAnbGFzdFNldFVSTCcsIHBhdGgpOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVzZXMgbG9jYXRpb24ucmVwbGFj
ZSB0byB1cGRhdGUgdGhlIHVybCB3aXRob3V0IGEgcGFnZSByZWxvYWQKLSAgICAgICAgICAgICAg
ICAgICAgb3IgaGlzdG9yeSBtb2RpZmljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXBsYWNlVVJMCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgcmVwbGFjZVVSTDogZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAgIGdl
dCh0aGlzLCAnbG9jYXRpb24nKS5yZXBsYWNlKCcjJyArIHBhdGgpOwotICAgICAgICAgICAgICAg
IHNldCh0aGlzLCAnbGFzdFNldFVSTCcsIHBhdGgpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUg
aW52b2tlZCB3aGVuIHRoZSBoYXNoIGNoYW5nZXMuIFRoZXNlCi0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrcyB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBiYWNrIG9y
IGZvcndhcmQKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCBidXQgbm90IGFmdGVyIGBzZXRV
UkxgIGlzIGludm9rZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBvblVwZGF0ZVVSTAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0gY2FsbGJhY2sge0Z1bmN0aW9ufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IG9uVXBkYXRlVVJMOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBz
ZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3IodGhpcyk7Ci0K
LSAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS5vbignaGFzaGNoYW5nZS5lbWJlci1sb2Nh
dGlvbi0nICsgZ3VpZCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bihmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gc2VsZi5nZXRVUkwo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXQoc2VsZiwgJ2xhc3RTZXRVUkwnKSA9
PT0gcGF0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHNlbGYsICds
YXN0U2V0VVJMJywgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHBh
dGgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHaXZlbiBh
IFVSTCwgZm9ybWF0cyBpdCB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFnZSBhcyBwYXJ0Ci0gICAg
ICAgICAgICAgICAgICAgIG9mIGFuIGVsZW1lbnQncyBgaHJlZmAgYXR0cmlidXRlLgotCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgdGhl
IHt7YWN0aW9ufX0gaGVscGVyCi0gICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGEgVVJM
IGJhc2VkIG9uIGFuIGV2ZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgZm9ybWF0VVJMCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB1cmwge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmb3Jt
YXRVUkw6IGZ1bmN0aW9uKHVybCkgewotICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyB1cmw7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
Q2xlYW5zIHVwIHRoZSBIYXNoTG9jYXRpb24gZXZlbnQgbGlzdGVuZXIuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3aWxsRGVzdHJv
eQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3IodGhpcyk7Ci0KLSAgICAg
ICAgICAgICAgICBqUXVlcnkod2luZG93KS5vZmYoJ2hhc2hjaGFuZ2UuZW1iZXItbG9jYXRpb24t
JyArIGd1aWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlvbiIsCi0gICAgWyJlbWJl
ci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0v
b2JqZWN0IiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18s
IF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZXhw
b3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19k
ZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEZFQVRVUkVTCi0gICAgICAgIHZh
ciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRl
bmN5M19fLnNldDsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18uZ3VpZEZv
cjsKLQotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1v
ZHVsZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBwb3BzdGF0
ZUZpcmVkID0gZmFsc2U7Ci0gICAgICAgIHZhciBzdXBwb3J0c0hpc3RvcnlTdGF0ZSA9IHdpbmRv
dy5oaXN0b3J5ICYmICdzdGF0ZScgaW4gd2luZG93Lmhpc3Rvcnk7Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIEVtYmVyLkhpc3RvcnlMb2NhdGlvbiBpbXBsZW1lbnRzIHRoZSBsb2NhdGlv
biBBUEkgdXNpbmcgdGhlIGJyb3dzZXIncwotICAgICAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0
ZSBBUEkuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEhpc3RvcnlMb2NhdGlvbgotICAgICAgICAg
ICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLk9iamVj
dAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVy
T2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjogJ2hpc3RvcnknLAot
Ci0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBzZXQodGhp
cywgJ2xvY2F0aW9uJywgZ2V0KHRoaXMsICdsb2NhdGlvbicpIHx8IHdpbmRvdy5sb2NhdGlvbik7
Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdiYXNlVVJMJywgalF1ZXJ5KCdiYXNlJykuYXR0
cignaHJlZicpIHx8ICcnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBVc2VkIHRvIHNldCBzdGF0ZSBvbiBmaXJzdCBjYWxsIHRvIHNldFVS
TAotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgaW5pdFN0YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5pdFN0
YXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ2hpc3RvcnknLCBn
ZXQodGhpcywgJ2hpc3RvcnknKSB8fCB3aW5kb3cuaGlzdG9yeSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5yZXBsYWNlU3RhdGUodGhpcy5mb3JtYXRVUkwodGhpcy5nZXRVUkwoKSkpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdpbGwgYmUg
cHJlLXBlbmRlZCB0byBwYXRoIHVwb24gc3RhdGUgY2hhbmdlCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IHJvb3RVUkwKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgJy8nCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcm9vdFVSTDogJy8nLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRp
b24ucGF0aG5hbWVgIHdpdGhvdXQgYHJvb3RVUkxgIG9yIGBiYXNlVVJMYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0VVJMCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4gdXJsIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgZ2V0VVJMOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcm9vdFVSTCA9IGdldCh0aGlzLCAncm9vdFVSTCcpOwotICAgICAgICAgICAgICAgIHZhciBs
b2NhdGlvbiA9IGdldCh0aGlzLCAnbG9jYXRpb24nKTsKLSAgICAgICAgICAgICAgICB2YXIgcGF0
aCA9IGxvY2F0aW9uLnBhdGhuYW1lOwotICAgICAgICAgICAgICAgIHZhciBiYXNlVVJMID0gZ2V0
KHRoaXMsICdiYXNlVVJMJyk7Ci0KLSAgICAgICAgICAgICAgICByb290VVJMID0gcm9vdFVSTC5y
ZXBsYWNlKC9cLyQvLCAnJyk7Ci0gICAgICAgICAgICAgICAgYmFzZVVSTCA9IGJhc2VVUkwucmVw
bGFjZSgvXC8kLywgJycpOwotCi0gICAgICAgICAgICAgICAgdmFyIHVybCA9IHBhdGgucmVwbGFj
ZShiYXNlVVJMLCAnJykucmVwbGFjZShyb290VVJMLCAnJyk7Ci0KLQotICAgICAgICAgICAgICAg
IHZhciBzZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggfHwgJyc7Ci0gICAgICAgICAgICAgICAgdXJs
ICs9IHNlYXJjaDsKLQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVybDsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBVc2VzIGBoaXN0b3J5
LnB1c2hTdGF0ZWAgdG8gdXBkYXRlIHRoZSB1cmwgd2l0aG91dCBhIHBhZ2UgcmVsb2FkLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
c2V0VVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0VVJMOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpOwotICAgICAgICAgICAgICAg
IHBhdGggPSB0aGlzLmZvcm1hdFVSTChwYXRoKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3Rh
dGUgfHwgc3RhdGUucGF0aCAhPT0gcGF0aCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnB1
c2hTdGF0ZShwYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVXNlcyBgaGlzdG9yeS5yZXBsYWNlU3Rh
dGVgIHRvIHVwZGF0ZSB0aGUgdXJsIHdpdGhvdXQgYSBwYWdlIHJlbG9hZAotICAgICAgICAgICAg
ICAgICAgICBvciBoaXN0b3J5IG1vZGlmaWNhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlcGxhY2VVUkwKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByZXBsYWNlVVJMOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIHBhdGggPSB0aGlz
LmZvcm1hdFVSTChwYXRoKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3RhdGUgfHwgc3RhdGUu
cGF0aCAhPT0gcGF0aCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTdGF0ZShw
YXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICBHZXQgdGhlIGN1cnJlbnQgYGhpc3Rvcnkuc3RhdGVgLiBD
aGVja3MgZm9yIGlmIGEgcG9seWZpbGwgaXMKLSAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBh
bmQgaWYgc28gZmV0Y2hlcyB0aGlzLl9oaXN0b3J5U3RhdGUuIFRoZSBzdGF0ZSByZXR1cm5lZAot
ICAgICAgICAgICAgICAgICAgIGZyb20gZ2V0U3RhdGUgbWF5IGJlIG51bGwgaWYgYW4gaWZyYW1l
IGhhcyBjaGFuZ2VkIGEgd2luZG93J3MKLSAgICAgICAgICAgICAgICAgICBoaXN0b3J5LgotCi0g
ICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdl
dFN0YXRlCi0gICAgICAgICAgICAgICAgICAgQHJldHVybiBzdGF0ZSB7T2JqZWN0fQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldFN0YXRlOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3VwcG9ydHNIaXN0b3J5U3RhdGUgPyBnZXQodGhpcywgJ2hpc3Rv
cnknKS5zdGF0ZSA6IHRoaXMuX2hpc3RvcnlTdGF0ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFB1c2hlcyBhIG5ldyBzdGF0ZS4KLQotICAg
ICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgQG1ldGhvZCBwdXNo
U3RhdGUKLSAgICAgICAgICAgICAgICAgICBAcGFyYW0gcGF0aCB7U3RyaW5nfQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24ocGF0aCkgewotICAg
ICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgcGF0aDogcGF0
aCAKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdoaXN0
b3J5JykucHVzaFN0YXRlKHN0YXRlLCBudWxsLCBwYXRoKTsKLQotICAgICAgICAgICAgICAgIC8v
IHN0b3JlIHN0YXRlIGlmIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGBoaXN0b3J5LnN0YXRlYAot
ICAgICAgICAgICAgICAgIGlmICghc3VwcG9ydHNIaXN0b3J5U3RhdGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5faGlzdG9yeVN0YXRlID0gc3RhdGU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gdXNlZCBmb3Igd2Via2l0IHdvcmthcm91bmQKLSAgICAgICAg
ICAgICAgICB0aGlzLl9wcmV2aW91c1VSTCA9IHRoaXMuZ2V0VVJMKCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyB0aGUgY3Vy
cmVudCBzdGF0ZS4KLQotICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCByZXBsYWNlU3RhdGUKLSAgICAgICAgICAgICAgICAgICBAcGFyYW0gcGF0
aCB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VTdGF0
ZTogZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKLSAgICAg
ICAgICAgICAgICAgICAgcGF0aDogcGF0aCAKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgZ2V0KHRoaXMsICdoaXN0b3J5JykucmVwbGFjZVN0YXRlKHN0YXRlLCBudWxsLCBw
YXRoKTsKLQotICAgICAgICAgICAgICAgIC8vIHN0b3JlIHN0YXRlIGlmIGJyb3dzZXIgZG9lc24n
dCBzdXBwb3J0IGBoaXN0b3J5LnN0YXRlYAotICAgICAgICAgICAgICAgIGlmICghc3VwcG9ydHNI
aXN0b3J5U3RhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlzdG9yeVN0YXRlID0g
c3RhdGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gdXNlZCBmb3Ig
d2Via2l0IHdvcmthcm91bmQKLSAgICAgICAgICAgICAgICB0aGlzLl9wcmV2aW91c1VSTCA9IHRo
aXMuZ2V0VVJMKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW5ldmVyIHRo
ZSBicm93c2VyCi0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnkgY2hhbmdlcywgaW5jbHVkaW5n
IHVzaW5nIGZvcndhcmQgYW5kIGJhY2sgYnV0dG9ucy4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9uVXBkYXRlVVJMCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSBjYWxsYmFjayB7RnVuY3Rpb259Ci0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgb25VcGRhdGVVUkw6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGd1aWQgPSBndWlkRm9yKHRoaXMpOwotICAgICAgICAgICAgICAgIHZh
ciBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3Bz
dGF0ZS5lbWJlci1sb2NhdGlvbi0nICsgZ3VpZCwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgaW5pdGlhbCBwYWdlIGxvYWQgcG9wc3RhdGUgZXZlbnQgaW4gQ2hy
b21lCi0gICAgICAgICAgICAgICAgICAgIGlmICghcG9wc3RhdGVGaXJlZCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcG9wc3RhdGVGaXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2VsZi5nZXRVUkwoKSA9PT0gc2VsZi5fcHJldmlvdXNVUkwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5n
ZXRVUkwoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVXNlZCB3aGVuIHVzaW5nIGB7e2FjdGlvbn19
YCBoZWxwZXIuICBUaGUgdXJsIGlzIGFsd2F5cyBhcHBlbmRlZCB0byB0aGUgcm9vdFVSTC4KLQot
ICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGZvcm1hdFVSTAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gdXJsIHtTdHJpbmd9Ci0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4gZm9ybWF0dGVkIHVybCB7U3RyaW5nfQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvcm1hdFVSTDogZnVuY3Rpb24odXJsKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHJvb3RVUkwgPSBnZXQodGhpcywgJ3Jvb3RVUkwnKTsKLSAgICAgICAg
ICAgICAgICB2YXIgYmFzZVVSTCA9IGdldCh0aGlzLCAnYmFzZVVSTCcpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHVybCAhPT0gJycpIHsKLSAgICAgICAgICAgICAgICAgICAgcm9vdFVSTCA9IHJv
b3RVUkwucmVwbGFjZSgvXC8kLywgJycpOwotICAgICAgICAgICAgICAgICAgICBiYXNlVVJMID0g
YmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAnJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChi
YXNlVVJMLm1hdGNoKC9eXC8vKSAmJiByb290VVJMLm1hdGNoKC9eXC8vKSkgewotICAgICAgICAg
ICAgICAgICAgICBiYXNlVVJMID0gYmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAnJyk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VVUkwgKyByb290VVJMICsg
dXJsOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIENsZWFucyB1cCB0aGUgSGlzdG9yeUxvY2F0aW9uIGV2ZW50IGxpc3RlbmVyLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2ls
bERlc3Ryb3kKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aWxsRGVzdHJveTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGd1aWQgPSBndWlkRm9yKHRoaXMpOwot
Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykub2ZmKCdwb3BzdGF0ZS5lbWJlci1sb2Nh
dGlvbi0nICsgZ3VpZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAg
IGRlZmluZSgiZW1iZXItcm91dGluZy9sb2NhdGlvbi9ub25lX2xvY2F0aW9uIiwKLSAgICBbImVt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVu
Y3kxX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Ml9fLnNldDsKLSAgICAg
ICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLXJvdXRpbmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIEVtYmVyLk5vbmVMb2NhdGlvbiBkb2VzIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2Vy
LiBJdCBpcyB1c2VmdWwgZm9yCi0gICAgICAgICAgICAgIHRlc3RpbmcsIG9yIHdoZW4geW91IG5l
ZWQgdG8gbWFuYWdlIHN0YXRlIHdpdGggeW91ciBSb3V0ZXIsIGJ1dCB0ZW1wb3JhcmlseQotICAg
ICAgICAgICAgICBkb24ndCB3YW50IGl0IHRvIG11Y2sgd2l0aCB0aGUgVVJMIChmb3IgZXhhbXBs
ZSB3aGVuIHlvdSBlbWJlZCB5b3VyCi0gICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGluIGEgbGFy
Z2VyIHBhZ2UpLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBOb25lTG9jYXRpb24KLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmpl
Y3QKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJl
ck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgaW1wbGVtZW50YXRpb246ICdub25lJywKLSAg
ICAgICAgICAgIHBhdGg6ICcnLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyB0aGUgY3VycmVudCBwYXRoLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2
YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0VVJMCi0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGdldFVSTDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlz
LCAncGF0aCcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFNldCB0aGUgcGF0aCBhbmQgcmVtZW1iZXJzIHdoYXQgd2FzIHNldC4gVXNpbmcg
dGhpcyBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgdG8gY2hhbmdlIHRoZSBwYXRoIHdpbGwg
bm90IGludm9rZSB0aGUgYHVwZGF0ZVVSTGAgY2FsbGJhY2suCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRVUkwKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBzZXRVUkw6IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICBzZXQo
dGhpcywgJ3BhdGgnLCBwYXRoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hl
biB0aGUgcGF0aCBjaGFuZ2VzLiBUaGVzZQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3Mg
d2lsbCBleGVjdXRlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgYmFjayBvciBmb3J3YXJkCi0g
ICAgICAgICAgICAgICAgICAgIGJ1dHRvbiwgYnV0IG5vdCBhZnRlciBgc2V0VVJMYCBpcyBpbnZv
a2VkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2Qgb25VcGRhdGVVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGNhbGxiYWNr
IHtGdW5jdGlvbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvblVwZGF0ZVVS
TDogZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGxi
YWNrID0gY2FsbGJhY2s7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgU2V0cyB0aGUgcGF0aCBhbmQgY2FsbHMgdGhlIGB1cGRhdGVVUkxgIGNh
bGxiYWNrLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgaGFuZGxlVVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBjYWxsYmFj
ayB7RnVuY3Rpb259Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaGFuZGxlVVJM
OiBmdW5jdGlvbih1cmwpIHsKLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ3BhdGgnLCB1cmwp
OwotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sodXJsKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIFVSTCwg
Zm9ybWF0cyBpdCB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFnZSBhcyBwYXJ0Ci0gICAgICAgICAg
ICAgICAgICAgIG9mIGFuIGVsZW1lbnQncyBgaHJlZmAgYXR0cmlidXRlLgotCi0gICAgICAgICAg
ICAgICAgICAgIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgdGhlIHt7YWN0
aW9ufX0gaGVscGVyCi0gICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGEgVVJMIGJhc2Vk
IG9uIGFuIGV2ZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgZm9ybWF0VVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB1
cmwge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSB1cmwKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmb3JtYXRVUkw6IGZ1bmN0aW9uKHVybCkg
ewotICAgICAgICAgICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgbm90IG92ZXJseSBtZWFu
aW5nZnVsLCBidXQgd2UgZG8gbm90IHdhbnQgdG8gdGhyb3cKLSAgICAgICAgICAgICAgICAvLyBl
cnJvcnMgd2hlbiB0ZXN0IGNvZGUgcmVuZGVycyB0ZW1wbGF0ZXMgY29udGFpbmluZyB7e2FjdGlv
biBocmVmPXRydWV9fQotICAgICAgICAgICAgICAgIC8vIGhlbHBlcnMuCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHVybDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jYWNoZSIsCi0gICAgWyJlbWJlci1ydW50aW1l
L3N5c3RlbS9vYmplY3QiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1i
ZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgIGluaXQ6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUgPSB7fTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKGJ1Y2tldEtleSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBidWNrZXRLZXkgaW4gdGhpcy5jYWNoZTsKLSAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICBzdGFzaDogZnVuY3Rpb24oYnVja2V0S2V5LCBrZXksIHZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGJ1Y2tldCA9IHRoaXMuY2FjaGVbYnVja2V0S2V5XTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWJ1Y2tldCkgewotICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSB0aGlz
LmNhY2hlW2J1Y2tldEtleV0gPSB7fTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnVja2V0W2tleV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBsb29r
dXA6IGZ1bmN0aW9uKGJ1Y2tldEtleSwgcHJvcCwgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTsKLSAgICAgICAgICAgICAgICBpZiAoIShidWNr
ZXRLZXkgaW4gY2FjaGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFs
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBidWNrZXQgPSBjYWNo
ZVtidWNrZXRLZXldOwotICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIGJ1Y2tldCkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYnVja2V0W3Byb3BdOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGNhY2hlOiBudWxsCi0gICAg
ICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vY29udHJv
bGxlcl9mb3IiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxl
IGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgICAgICAgICAg
ICovCi0KLSAgICAgICAgLyoqCi0KLSAgICAgICAgICAgICAgRmluZHMgYSBjb250cm9sbGVyIGlu
c3RhbmNlLgotCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQG1ldGhv
ZCBjb250cm9sbGVyRm9yCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAqLwot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gY29udHJvbGxlckZvcihj
b250YWluZXIsIGNvbnRyb2xsZXJOYW1lLCBsb29rdXBPcHRpb25zKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gY29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjonICsgY29udHJvbGxlck5hbWUsIGxv
b2t1cE9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0
aW5nL3N5c3RlbS9kc2wiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICAvLyBGRUFUVVJFUywgYXNzZXJ0Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgZnVuY3Rpb24gRFNMKG5hbWUpIHsKLSAgICAgICAgICAg
IHRoaXMucGFyZW50ID0gbmFtZTsKLSAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IFtdOwotICAg
ICAgICB9Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBEU0w7Ci0KLSAgICAgICAg
RFNMLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIHJvdXRlOiBmdW5jdGlvbihuYW1lLCBvcHRp
b25zLCBjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09
PSAyICYmIHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG9wdGlvbnMucmVzZXROYW1l
c3BhY2UgPT09IHRydWUgPyAncmVzb3VyY2UnIDogJ3JvdXRlJzsKLSAgICAgICAgICAgICAgICBF
bWJlci5hc3NlcnQoIidiYXNpYycgY2Fubm90IGJlIHVzZWQgYXMgYSAiICsgdHlwZSArICIgbmFt
ZS4iLCBuYW1lICE9PSAnYmFzaWMnKTsKLQotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zLnBhdGggIT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
cGF0aCA9ICIvIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKGNhbk5lc3QodGhpcykgJiYgb3B0aW9ucy5yZXNldE5hbWVzcGFjZSAhPT0gdHJ1ZSkgewot
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5wYXJlbnQgKyAiLiIgKyBuYW1lOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgZHNsID0gbmV3IERTTChuYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgcm91dGUoZHNsLCAnbG9hZGluZycpOwotICAgICAgICAgICAgICAgICAgICByb3V0ZShkc2ws
ICdlcnJvcicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICIvX3VudXNlZF9kdW1t
eV9lcnJvcl9wYXRoX3JvdXRlXyIgKyBuYW1lICsgIi86ZXJyb3IiIAotICAgICAgICAgICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoZHNsKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChvcHRpb25zLnBhdGgsIG5hbWUsIGRz
bC5nZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnB1c2gob3B0aW9ucy5wYXRoLCBuYW1lLCBudWxsKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uKHVybCwg
bmFtZSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0
KCcuJyk7Ci0gICAgICAgICAgICAgICAgaWYgKHVybCA9PT0gIiIgfHwgdXJsID09PSAiLyIgfHwg
cGFydHNbcGFydHMubGVuZ3RoLTFdID09PSAiaW5kZXgiKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuZXhwbGljaXRJbmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGhpcy5tYXRjaGVzLnB1c2goW3VybCwgbmFtZSwgY2FsbGJhY2tdKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlc291cmNlOiBmdW5jdGlvbihuYW1lLCBvcHRpb25z
LCBjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAy
ICYmIHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrID0gb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9Owot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvcHRpb25zLnJlc2V0TmFtZXNwYWNlID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdlbmVyYXRlOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZHNsTWF0Y2hlcyA9IHRoaXMubWF0Y2hlczsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5leHBsaWNpdEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRl
KHRoaXMsICJpbmRleCIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICIvIiAKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBsID0gZHNsTWF0Y2hlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBkc2xNYXRjaCA9IGRzbE1hdGNoZXNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbWF0Y2hPYmogPSBtYXRjaChkc2xNYXRjaFswXSkudG8oZHNsTWF0Y2hb
MV0sIGRzbE1hdGNoWzJdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FuTmVz
dChkc2wpIHsKLSAgICAgICAgICAgIHJldHVybiBkc2wucGFyZW50ICYmIGRzbC5wYXJlbnQgIT09
ICdhcHBsaWNhdGlvbic7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByb3V0ZShkc2ws
IG5hbWUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3QgdXNl
IGB0aGlzLnJlc291cmNlYCB0byBuZXN0IiwgdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicp
OwotCi0gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAg
aWYgKHR5cGVvZiBvcHRpb25zLnBhdGggIT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAg
b3B0aW9ucy5wYXRoID0gIi8iICsgbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGNhbk5lc3QoZHNsKSAmJiBvcHRpb25zLnJlc2V0TmFtZXNwYWNlICE9PSB0cnVlKSB7Ci0g
ICAgICAgICAgICAgICAgbmFtZSA9IGRzbC5wYXJlbnQgKyAiLiIgKyBuYW1lOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBkc2wucHVzaChvcHRpb25zLnBhdGgsIG5hbWUsIG51bGwpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgRFNMLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICB2YXIgZHNsID0gbmV3IERTTCgpOwotICAgICAgICAgICAgY2FsbGJhY2suY2FsbChk
c2wpOwotICAgICAgICAgICAgcmV0dXJuIGRzbDsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRyb2xsZXIiLAotICAgIFsi
ZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0
YWwvdXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIC8vIExvZ2dlcgotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9f
LmdldDsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kzX18uaXNBcnJheTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJt
b2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgR2VuZXJhdGVzIGEgY29udHJvbGxlciBmYWN0b3J5Ci0KLSAgICAgICAgICAgICAg
VGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBjb250cm9sbGVyIGZhY3RvcnkgaXMgZGVyaXZlZAot
ICAgICAgICAgICAgICBmcm9tIHRoZSBjb250ZXh0LiBJZiB0aGUgY29udGV4dCBpcyBhbiBhcnJh
eSBhbiBhcnJheSBjb250cm9sbGVyCi0gICAgICAgICAgICAgIGlzIGdlbmVyYXRlZCwgaWYgYW4g
b2JqZWN0LCBhbiBvYmplY3QgY29udHJvbGxlciBvdGhlcndpc2UsIGEgYmFzaWMKLSAgICAgICAg
ICAgICAgY29udHJvbGxlciBpcyBnZW5lcmF0ZWQuCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBj
dXN0b21pemUgeW91ciBnZW5lcmF0ZWQgY29udHJvbGxlcnMgYnkgZGVmaW5pbmcKLSAgICAgICAg
ICAgICAgYEFwcC5PYmplY3RDb250cm9sbGVyYCBvciBgQXBwLkFycmF5Q29udHJvbGxlcmAuCi0K
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAbWV0aG9kIGdlbmVyYXRl
Q29udHJvbGxlckZhY3RvcnkKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeShjb250YWluZXIs
IGNvbnRyb2xsZXJOYW1lLCBjb250ZXh0KSB7Ci0gICAgICAgICAgICB2YXIgRmFjdG9yeSwgZnVs
bE5hbWUsIGluc3RhbmNlLCBuYW1lLCBmYWN0b3J5TmFtZSwgY29udHJvbGxlclR5cGU7Ci0KLSAg
ICAgICAgICAgIGlmIChjb250ZXh0ICYmIGlzQXJyYXkoY29udGV4dCkpIHsKLSAgICAgICAgICAg
ICAgICBjb250cm9sbGVyVHlwZSA9ICdhcnJheSc7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNv
bnRleHQpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyVHlwZSA9ICdvYmplY3QnOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyVHlwZSA9ICdiYXNp
Yyc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZhY3RvcnlOYW1lID0gJ2NvbnRyb2xs
ZXI6JyArIGNvbnRyb2xsZXJUeXBlOwotCi0gICAgICAgICAgICBGYWN0b3J5ID0gY29udGFpbmVy
Lmxvb2t1cEZhY3RvcnkoZmFjdG9yeU5hbWUpLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgaXNH
ZW5lcmF0ZWQ6IHRydWUsCi0gICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIihnZW5lcmF0ZWQgIiArIGNvbnRyb2xsZXJOYW1l
ICsgIiBjb250cm9sbGVyKSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgIGZ1bGxOYW1lID0gJ2NvbnRyb2xsZXI6JyArIGNvbnRyb2xsZXJOYW1lOwot
Ci0gICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoZnVsbE5hbWUsIEZhY3RvcnkpOwotCi0g
ICAgICAgICAgICByZXR1cm4gRmFjdG9yeTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLmdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkgPSBnZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5
OyAvKioKLSAgICAgICAgICAgICAgR2VuZXJhdGVzIGFuZCBpbnN0YW50aWF0ZXMgYSBjb250cm9s
bGVyLgotCi0gICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgY29udHJvbGxl
ciBmYWN0b3J5IGlzIGRlcml2ZWQKLSAgICAgICAgICAgICAgZnJvbSB0aGUgY29udGV4dC4gSWYg
dGhlIGNvbnRleHQgaXMgYW4gYXJyYXkgYW4gYXJyYXkgY29udHJvbGxlcgotICAgICAgICAgICAg
ICBpcyBnZW5lcmF0ZWQsIGlmIGFuIG9iamVjdCwgYW4gb2JqZWN0IGNvbnRyb2xsZXIgb3RoZXJ3
aXNlLCBhIGJhc2ljCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIgaXMgZ2VuZXJhdGVkLgotCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQG1ldGhvZCBnZW5lcmF0ZUNv
bnRyb2xsZXIKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQHNpbmNlIDEu
My4wCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVu
Y3Rpb24gZ2VuZXJhdGVDb250cm9sbGVyKGNvbnRhaW5lciwgY29udHJvbGxlck5hbWUsIGNvbnRl
eHQpIHsKLSAgICAgICAgICAgIGdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkoY29udGFpbmVyLCBj
b250cm9sbGVyTmFtZSwgY29udGV4dCk7Ci0gICAgICAgICAgICB2YXIgZnVsbE5hbWUgPSAnY29u
dHJvbGxlcjonICsgY29udHJvbGxlck5hbWU7Ci0gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBj
b250YWluZXIubG9va3VwKGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgaWYgKGdldChpbnN0YW5j
ZSwgJ25hbWVzcGFjZS5MT0dfQUNUSVZFX0dFTkVSQVRJT04nKSkgewotICAgICAgICAgICAgICAg
IEVtYmVyLkxvZ2dlci5pbmZvKCJnZW5lcmF0ZWQgLT4gIiArIGZ1bGxOYW1lLCB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdWxsTmFtZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgICAgICB9Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZSIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvZ2V0X3By
b3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJlci1tZXRhbC9p
c19ub25lIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImVt
YmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLXJ1bnRpbWUv
a2V5cyIsICJlbWJlci1ydW50aW1lL2NvcHkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJlbWJlci1ydW50aW1lL21peGlucy9h
Y3Rpb25faGFuZGxlciIsICJlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVy
IiwgImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL3NoYXJlZCIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZf
XywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19k
ZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBl
bmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRl
bmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVu
Y3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRkVBVFVSRVMsIEssIEEsIGRlcHJlY2F0ZSwg
YXNzZXJ0LCBMb2dnZXIKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kyX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTNfXy5nZXQ7Ci0gICAg
ICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k0X18uc2V0OwotICAgICAgICB2YXIgZ2V0UHJvcGVy
dGllcyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZm9yRWFjaCA9
IF9fZGVwZW5kZW5jeTZfXy5mb3JFYWNoOwotICAgICAgICB2YXIgcmVwbGFjZSA9IF9fZGVwZW5k
ZW5jeTZfXy5yZXBsYWNlOwotICAgICAgICB2YXIgaXNOb25lID0gX19kZXBlbmRlbmN5N19fLmlz
Tm9uZTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5OF9fLmNvbXB1dGVkOwot
ICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kxMF9fLmlzQXJyYXk7Ci0gICAgICAgIHZhciB0eXBl
T2YgPSBfX2RlcGVuZGVuY3kxMF9fLnR5cGVPZjsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5k
ZW5jeTExX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGtleXMgPSBfX2RlcGVuZGVuY3kxMl9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjb3B5ID0gX19kZXBlbmRlbmN5MTNfX1siZGVmYXVs
dCJdOwotICAgICAgICB2YXIgY2xhc3NpZnkgPSBfX2RlcGVuZGVuY3kxNF9fLmNsYXNzaWZ5Owot
ICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5MTRfXy5mbXQ7Ci0gICAgICAgIHZhciBFbWJl
ck9iamVjdCA9IF9fZGVwZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEFjdGlv
bkhhbmRsZXIgPSBfX2RlcGVuZGVuY3kxNl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBnZW5l
cmF0ZUNvbnRyb2xsZXIgPSBfX2RlcGVuZGVuY3kxN19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBzdGFzaFBhcmFtTmFtZXMgPSBfX2RlcGVuZGVuY3kxOF9fLnN0YXNoUGFyYW1OYW1lczsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJt
b2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgVGhlIGBFbWJlci5Sb3V0ZWAgY2xhc3MgaXMgdXNlZCB0byBkZWZpbmUgaW5kaXZp
ZHVhbCByb3V0ZXMuIFJlZmVyIHRvCi0gICAgICAgICAgICAgIHRoZSBbcm91dGluZyBndWlkZV0o
aHR0cDovL2VtYmVyanMuY29tL2d1aWRlcy9yb3V0aW5nLykgZm9yIGRvY3VtZW50YXRpb24uCi0K
LSAgICAgICAgICAgICAgQGNsYXNzIFJvdXRlCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAgIEB1
c2VzIEVtYmVyLkFjdGlvbkhhbmRsZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBSb3V0
ZSA9IEVtYmVyT2JqZWN0LmV4dGVuZChBY3Rpb25IYW5kbGVyLCB7Ci0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgZXhpdAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGV4aXQ6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpOwotICAgICAgICAgICAg
ICAgIHRoaXMudGVhcmRvd25WaWV3cygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCByZXNldAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc2V0OiBm
dW5jdGlvbihpc0V4aXRpbmcsIHRyYW5zaXRpb24pIHsKLQotICAgICAgICAgICAgICAgIHZhciBj
b250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyOwotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIu
X3FwRGVsZWdhdGUgPSBnZXQodGhpcywgJ19xcC5zdGF0ZXMuaW5hY3RpdmUnKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLnJlc2V0Q29udHJvbGxlcih0aGlzLmNvbnRyb2xsZXIsIGlzRXhpdGluZywg
dHJhbnNpdGlvbik7Ci0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZW50
ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZSgpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSB2aWV3IHRv
IHVzZSBieSBkZWZhdWx0IHdoZW4gcmVuZGVyaW5nIHRoaXMgcm91dGVzIHRlbXBsYXRlLgotCi0g
ICAgICAgICAgICAgICAgICAgIFdoZW4gcmVuZGVyaW5nIGEgdGVtcGxhdGUsIHRoZSByb3V0ZSB3
aWxsLCBieSBkZWZhdWx0LCBkZXRlcm1pbmUgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBs
YXRlIGFuZCB2aWV3IHRvIHVzZSBmcm9tIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBpdHNlbGYuIElm
IHlvdSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgIGRlZmluZSBhIHNwZWNpZmljIHZpZXcs
IHNldCB0aGlzIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVs
IHdoZW4gbXVsdGlwbGUgcm91dGVzIHdvdWxkIGJlbmVmaXQgZnJvbSB1c2luZyB0aGUgc2FtZSB2
aWV3Ci0gICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgZG9lc24ndCByZXF1aXJlIGEgY3Vz
dG9tIGByZW5kZXJUZW1wbGF0ZWAgbWV0aG9kLiBGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAg
ICAgICAgdGhlIGZvbGxvd2luZyByb3V0ZXMgd2lsbCBhbGwgcmVuZGVyIHVzaW5nIHRoZSBgQXBw
LlBvc3RzTGlzdFZpZXdgIHZpZXc6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIFBvc3RzTGlzdCA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICdwb3N0c0xpc3QnCi0gICAgICAgICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0c0luZGV4Um91dGUgPSBQb3N0
c0xpc3QuZXh0ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0c0FyY2hpdmVkUm91
dGUgPSBQb3N0c0xpc3QuZXh0ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB2aWV3TmFtZQotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAg
ICAgICAgICAgICBAc2luY2UgMS40LjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICB2aWV3TmFtZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0byB1c2UgYnkgZGVmYXVsdCB3aGVuIHJlbmRlcmlu
ZyB0aGlzIHJvdXRlcwotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS4KLQotICAgICAgICAg
ICAgICAgICAgICBUaGlzIGlzIHNpbWlsYXIgd2l0aCBgdmlld05hbWVgLCBidXQgaXMgdXNlZnVs
IHdoZW4geW91IGp1c3Qgd2FudCBhIGN1c3RvbQotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0
ZSB3aXRob3V0IGEgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAg
ICAgICAgICAgICB2YXIgUG9zdHNMaXN0ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICdwb3N0cy9saXN0JwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuUG9zdHNJbmRleFJvdXRlID0gUG9z
dHNMaXN0LmV4dGVuZCgpOwotICAgICAgICAgICAgICAgICAgICBBcHAuUG9zdHNBcmNoaXZlZFJv
dXRlID0gUG9zdHNMaXN0LmV4dGVuZCgpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdGVtcGxhdGVOYW1lCi0gICAgICAgICAgICAgICAg
ICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAg
ICAgICAgICAgICAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHRlbXBsYXRlTmFtZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHRvIGFzc29jaWF0ZSB3aXRoIHRo
aXMgcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgRW1iZXIgd2lsbCBs
b29rdXAgYSByb3V0ZSdzIGNvbnRyb2xsZXIgdGhhdCBtYXRjaGVzIHRoZSBuYW1lCi0gICAgICAg
ICAgICAgICAgICAgIG9mIHRoZSByb3V0ZSAoaS5lLiBgQXBwLlBvc3RDb250cm9sbGVyYCBmb3Ig
YEFwcC5Qb3N0Um91dGVgKS4gSG93ZXZlciwKLSAgICAgICAgICAgICAgICAgICAgaWYgeW91IHdv
dWxkIGxpa2UgdG8gZGVmaW5lIGEgc3BlY2lmaWMgY29udHJvbGxlciB0byB1c2UsIHlvdSBjYW4g
ZG8gc28KLSAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyBwcm9wZXJ0eS4KLQotICAgICAg
ICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBpbiBtYW55IHdheXMsIGFzIHRoZSBjb250cm9s
bGVyIHNwZWNpZmllZCB3aWxsIGJlOgotCi0gICAgICAgICAgICAgICAgICAgICogcGFzc2VkIHRv
IHRoZSBgc2V0dXBDb250cm9sbGVyYCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgICogdXNl
ZCBhcyB0aGUgY29udHJvbGxlciBmb3IgdGhlIHZpZXcgYmVpbmcgcmVuZGVyZWQgYnkgdGhlIHJv
dXRlLgotICAgICAgICAgICAgICAgICAgICAqIHJldHVybmVkIGZyb20gYSBjYWxsIHRvIGBjb250
cm9sbGVyRm9yYCBmb3IgdGhlIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBjb250cm9sbGVyTmFtZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAg
ICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgICBAc2luY2Ug
MS40LjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250cm9sbGVyTmFtZTog
bnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgd2lsbFRy
YW5zaXRpb25gIGFjdGlvbiBpcyBmaXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueQotICAgICAg
ICAgICAgICAgICAgICBhdHRlbXB0ZWQgdHJhbnNpdGlvbiB3aXRoIGEgYFRyYW5zaXRpb25gIG9i
amVjdCBhcyB0aGUgc29sZQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4gVGhpcyBhY3Rp
b24gY2FuIGJlIHVzZWQgZm9yIGFib3J0aW5nLCByZWRpcmVjdGluZywKLSAgICAgICAgICAgICAg
ICAgICAgb3IgZGVjb3JhdGluZyB0aGUgdHJhbnNpdGlvbiBmcm9tIHRoZSBjdXJyZW50bHkgYWN0
aXZlIHJvdXRlcy4KLQotICAgICAgICAgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyBwcmV2
ZW50aW5nIG5hdmlnYXRpb24gd2hlbiBhIGZvcm0gaXMKLSAgICAgICAgICAgICAgICAgICAgaGFs
Zi1maWxsZWQgb3V0OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAg
ICAgICAgIEFwcC5Db250YWN0Rm9ybVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWxs
VHJhbnNpdGlvbjogZnVuY3Rpb24odHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldCgndXNlckhhc0VudGVyZWREYXRhJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGlzcGxheU5hdmlnYXRp
b25Db25maXJtKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5hYm9y
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNv
IHJlZGlyZWN0IGVsc2V3aGVyZSBieSBjYWxsaW5nCi0gICAgICAgICAgICAgICAgICAgIGB0aGlz
LnRyYW5zaXRpb25UbygnZWxzZXdoZXJlJylgIGZyb20gd2l0aGluIGB3aWxsVHJhbnNpdGlvbmAu
Ci0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBgd2lsbFRyYW5zaXRpb25gIHdpbGwgbm90
IGJlIGZpcmVkIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RpbmcgYHRyYW5z
aXRpb25Ub2AsIHNpbmNlIGB3aWxsVHJhbnNpdGlvbmAgZG9lc24ndAotICAgICAgICAgICAgICAg
ICAgICBmaXJlIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhIHRyYW5zaXRpb24gdW5kZXJ3YXkuIElm
IHlvdSB3YW50Ci0gICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgYHdpbGxUcmFuc2l0aW9u
YCBhY3Rpb25zIHRvIGZpcmUgZm9yIHRoZSByZWRpcmVjdGluZwotICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9uLCB5b3UgbXVzdCBmaXJzdCBleHBsaWNpdGx5IGNhbGwKLSAgICAgICAgICAg
ICAgICAgICAgYHRyYW5zaXRpb24uYWJvcnQoKWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQGV2
ZW50IHdpbGxUcmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlv
bn0gdHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFRoZSBgZGlkVHJhbnNpdGlvbmAgYWN0aW9uIGlzIGZpcmVkIGFm
dGVyIGEgdHJhbnNpdGlvbiBoYXMKLSAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGJl
ZW4gY29tcGxldGVkLiBUaGlzIG9jY3VycyBhZnRlciB0aGUgbm9ybWFsIG1vZGVsCi0gICAgICAg
ICAgICAgICAgICAgIGhvb2tzIChgYmVmb3JlTW9kZWxgLCBgbW9kZWxgLCBgYWZ0ZXJNb2RlbGAs
IGBzZXR1cENvbnRyb2xsZXJgKQotICAgICAgICAgICAgICAgICAgICBoYXZlIHJlc29sdmVkLiBU
aGUgYGRpZFRyYW5zaXRpb25gIGFjdGlvbiBoYXMgbm8gYXJndW1lbnRzLAotICAgICAgICAgICAg
ICAgICAgICBob3dldmVyLCBpdCBjYW4gYmUgdXNlZnVsIGZvciB0cmFja2luZyBwYWdlIHZpZXdz
IG9yIHJlc2V0dGluZwotICAgICAgICAgICAgICAgICAgICBzdGF0ZSBvbiB0aGUgY29udHJvbGxl
ci4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAu
TG9naW5Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAg
YWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgZGlkVHJhbnNpdGlvbjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5nZXQoJ2Vy
cm9ycy5iYXNlJykuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIEJ1YmJsZSB0aGUgZGlkVHJhbnNpdGlvbiBldmVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBldmVudCBk
aWRUcmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAotICAgICAgICAg
ICAgICAgICAgKi8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBg
bG9hZGluZ2AgYWN0aW9uIGlzIGZpcmVkIG9uIHRoZSByb3V0ZSB3aGVuIGEgcm91dGUncyBgbW9k
ZWxgCi0gICAgICAgICAgICAgICAgICAgIGhvb2sgcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBu
b3QgYWxyZWFkeSByZXNvbHZlZC4gVGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgYFRy
YW5zaXRpb25gIG9iamVjdCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCB0aGUgcm91dGUgdGhh
dAotICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgdGhlIGxvYWRpbmcgZXZlbnQgaXMgdGhl
IHNlY29uZCBwYXJhbWV0ZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAg
ICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewot
ICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvYWRpbmc6IGZ1bmN0aW9uKHRyYW5zaXRpb24sIHJvdXRlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB2aWV3ID0gRW1iZXIuVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnYXBwLWxvYWRpbmcnXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIub25lKCdkaWRUcmFuc2l0aW9uJywg
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZGVzdHJveSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIEJ1YmJsZSB0aGUgbG9hZGluZyBldmVudAotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBl
dmVudCBsb2FkaW5nCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLlJvdXRlfSByb3V0ZSBU
aGUgcm91dGUgdGhhdCB0cmlnZ2VyZWQgdGhlIGxvYWRpbmcgZXZlbnQKLSAgICAgICAgICAgICAg
ICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgV2hlbiBhdHRlbXB0aW5nIHRvIHRyYW5zaXRpb24gaW50
byBhIHJvdXRlLCBhbnkgb2YgdGhlIGhvb2tzCi0gICAgICAgICAgICAgICAgICAgIG1heSByZXR1
cm4gYSBwcm9taXNlIHRoYXQgcmVqZWN0cywgYXQgd2hpY2ggcG9pbnQgYW4gYGVycm9yYAotICAg
ICAgICAgICAgICAgICAgICBhY3Rpb24gd2lsbCBiZSBmaXJlZCBvbiB0aGUgcGFydGlhbGx5LWVu
dGVyZWQgcm91dGVzLCBhbGxvd2luZwotICAgICAgICAgICAgICAgICAgICBmb3IgcGVyLXJvdXRl
IGVycm9yIGhhbmRsaW5nIGxvZ2ljLCBvciBzaGFyZWQgZXJyb3IgaGFuZGxpbmcKLSAgICAgICAg
ICAgICAgICAgICAgbG9naWMgZGVmaW5lZCBvbiBhIHBhcmVudCByb3V0ZS4KLQotICAgICAgICAg
ICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gZXJyb3IgaGFuZGxlciB0aGF0IHdp
bGwgYmUgaW52b2tlZAotICAgICAgICAgICAgICAgICAgICBmb3IgcmVqZWN0ZWQgcHJvbWlzZXMg
ZnJvbSB0aGUgdmFyaW91cyBob29rcyBvbiB0aGUgcm91dGUsCi0gICAgICAgICAgICAgICAgICAg
IGFzIHdlbGwgYXMgYW55IHVuaGFuZGxlZCBlcnJvcnMgZnJvbSBjaGlsZCByb3V0ZXM6Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLkFkbWluUm91
dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZU1v
ZGVsOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5S
U1ZQLnJlamVjdCgiYmFkIHRoaW5ncyEiKTsKLSAgICAgICAgICAgICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3I6IGZ1bmN0aW9uKGVycm9yLCB0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFzc3VtaW5nIHdlIGdvdCBoZXJlIGR1ZSB0byB0aGUgZXJyb3IgaW4gYGJlZm9y
ZU1vZGVsYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2FuIGV4cGVjdCB0aGF0
IGVycm9yID09PSAiYmFkIHRoaW5ncyEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBi
dXQgYSBwcm9taXNlIG1vZGVsIHJlamVjdGluZyB3b3VsZCBhbHNvCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNhbGwgdGhpcyBob29rLCBhcyB3b3VsZCBhbnkgZXJyb3JzIGVuY291bnRl
cmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGBhZnRlck1vZGVsYC4KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYGVycm9yYCBob29rIGlzIGFsc28gcHJvdmlk
ZWQgdGhlIGZhaWxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgdHJhbnNpdGlvbmAs
IHdoaWNoIGNhbiBiZSBzdG9yZWQgYW5kIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGAucmV0cnkoKWBkIGlmIGRlc2lyZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50cmFuc2l0aW9uVG8oJ2xvZ2luJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgYGVycm9yYCBhY3Rpb25zIHRo
YXQgYnViYmxlIHVwIGFsbCB0aGUgd2F5IHRvIGBBcHBsaWNhdGlvblJvdXRlYAotICAgICAgICAg
ICAgICAgICAgICB3aWxsIGZpcmUgYSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgdGhhdCBsb2dzIHRo
ZSBlcnJvci4gWW91IGNhbgotICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHlvdXIgb3duIGds
b2JhbCBkZWZhdWx0IGVycm9yIGhhbmRsZXIgYnkgb3ZlcnJpZGluZyB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgYGVycm9yYCBoYW5kbGVyIG9uIGBBcHBsaWNhdGlvblJvdXRlYDoKLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuQXBwbGljYXRpb25S
b3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9u
czogewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGVycm9yLCB0cmFu
c2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckZvcign
YmFubmVyJykuZGlzcGxheUVycm9yKGVycm9yLm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICAgICAgICBAZXZlbnQgZXJy
b3IKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtFcnJvcn0gZXJyb3IKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAg
ICAqLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRyb2xs
ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgQXBwLkZvcm1Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgd2lsbFRyYW5zaXRp
b246IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuY29udHJvbGxlci5nZXQoJ3VzZXJIYXNFbnRlcmVkRGF0YScpICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAhY29uZmlybSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFi
YW5kb24gcHJvZ3Jlc3M/IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0
aW9uLmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQnViYmxlIHRoZSBgd2lsbFRyYW5zaXRpb25gIGFjdGlv
biBzbyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50IHJvdXRlcyBj
YW4gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGFib3J0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRW1iZXIu
Q29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS42LjAKLSAgICAgICAgICAg
ICAgICAgICovCi0KLSAgICAgICAgICAgIF9hY3Rpb25zOiB7Ci0KLSAgICAgICAgICAgICAgICBx
dWVyeVBhcmFtc0RpZENoYW5nZTogZnVuY3Rpb24oY2hhbmdlZCwgdG90YWxQcmVzZW50LCByZW1v
dmVkKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsQ2hhbmdlZCA9IGtleXMoY2hh
bmdlZCkuY29uY2F0KGtleXMocmVtb3ZlZCkpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbGVuID0gdG90YWxDaGFuZ2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgdXJsS2V5ID0gdG90YWxDaGFuZ2VkW2ldLAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGdldCh0aGlzLnF1ZXJ5UGFyYW1zLCB1cmxLZXkp
IHx8IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldChvcHRpb25zLCAncmVmcmVz
aE1vZGVsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgICAgICBmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFuZ2U6IGZ1bmN0aW9uKHBhcmFtcywgZmlu
YWxQYXJhbXMsIHRyYW5zaXRpb24pIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5y
b3V0ZU5hbWUgIT09ICdhcHBsaWNhdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gVHJhbnNpdGlvbiBvYmplY3QgaXMgYWJzZW50IGZvciBpbnRlcm1lZGlhdGUgdHJhbnNpdGlv
bnMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghdHJhbnNpdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9z
OwotICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBxcE1ldGEgPSByb3V0ZXIuX3F1ZXJ5UGFyYW1zRm9yKGhhbmRsZXJJ
bmZvc1toYW5kbGVySW5mb3MubGVuZ3RoLTFdLm5hbWUpOwotICAgICAgICAgICAgICAgICAgICB2
YXIgY2hhbmdlcyA9IHJvdXRlci5fcXBVcGRhdGVzOwotICAgICAgICAgICAgICAgICAgICB2YXIg
cmVwbGFjZVVybDsKLQotICAgICAgICAgICAgICAgICAgICBzdGFzaFBhcmFtTmFtZXMocm91dGVy
LCBoYW5kbGVySW5mb3MpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW4gPSBxcE1ldGEucXBzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcXAgPSBxcE1ldGEucXBzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHJvdXRlID0gcXAucm91dGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJv
bGxlciA9IHJvdXRlLmNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJl
c2VudEtleSA9IHFwLnVybEtleSBpbiBwYXJhbXMgJiYgcXAudXJsS2V5OwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEbyBhIHJldmVyc2UgbG9va3VwIHRvIHNlZSBpZiB0aGUgY2hhbmdl
ZCBxdWVyeQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyYW0gVVJMIGtleSBjb3JyZXNw
b25kcyB0byBhIFFQIHByb3BlcnR5IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlz
IGNvbnRyb2xsZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUsIHN2YWx1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzICYmIHFwLnVybEtleSBpbiBjaGFu
Z2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbGxlciBvdmVycm9k
ZSB0aGlzIHZhbHVlIGluIHNldHVwQ29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gZ2V0KGNvbnRyb2xsZXIsIHFwLnByb3ApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN2YWx1ZSA9IHJvdXRlLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0odmFsdWUsIHFwLnVy
bEtleSwgcXAudHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZW50S2V5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2YWx1ZSA9IHBhcmFtc1twcmVzZW50S2V5XTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByb3V0ZS5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW0o
c3ZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFFQIHByb3Zp
ZGVkOyB1c2UgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ZhbHVlID0gcXAuc2RlZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBxcC5kZWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZh
bHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBFbWJl
ci5BKHZhbHVlLnNsaWNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9xcERlbGVnYXRlID0gZ2V0KHRo
aXMsICdfcXAuc3RhdGVzLmluYWN0aXZlJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0aGlzUXVlcnlQYXJhbUNoYW5nZWQgPSAoc3ZhbHVlICE9PSBxcC5zdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNRdWVyeVBhcmFtQ2hhbmdlZCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gZ2V0KHJvdXRlLCAncXVlcnlQYXJhbXMu
JyArIHFwLnVybEtleSkgfHwge307Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dHJhbnNpdGlvbi5xdWVyeVBhcmFtc09ubHkgJiYgcmVwbGFjZVVybCAhPT0gZmFsc2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VDb25maWdWYWx1ZSA9IGdl
dChvcHRpb25zLCAncmVwbGFjZScpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVwbGFjZUNvbmZpZ1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlVXJsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChyZXBsYWNlQ29uZmlnVmFsdWUgPT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHBsaWNpdCBwdXNoU3RhdGUgd2lucyBvdmVyIGFu
eSBvdGhlciByZXBsYWNlU3RhdGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZVVybCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0KGNvbnRyb2xsZXIsIHFwLnByb3AsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Rhc2ggY3VycmVudCBzZXJp
YWxpemVkIHZhbHVlIG9mIGNvbnRyb2xsZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBxcC5z
dmFsdWUgPSBzdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzUXVlcnlQ
YXJhbUhhc0RlZmF1bHRWYWx1ZSA9IChxcC5zZGVmID09PSBzdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0aGlzUXVlcnlQYXJhbUhhc0RlZmF1bHRWYWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbmFsUGFyYW1zLnB1c2goewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogc3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aXNpYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXk6IHByZXNlbnRLZXkgfHwgcXAudXJsS2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVVybCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbi5tZXRob2QoJ3JlcGxhY2UnKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGZvckVhY2gocXBNZXRhLnFwcywgZnVuY3Rpb24ocXAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZVFwTWV0YSA9IGdldChxcC5yb3V0
ZSwgJ19xcCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplZENvbnRyb2xs
ZXIgPSBxcC5yb3V0ZS5jb250cm9sbGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxp
emVkQ29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9IGdldChyb3V0ZVFwTWV0YSwgJ3N0YXRlcy5hY3Rp
dmUnKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRl
ci5fcXBVcGRhdGVzID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAotCi0g
ICAgICAgICAgICAgICAgICAgIFBsZWFzZSB1c2UgYGFjdGlvbnNgIGluc3RlYWQuCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgZXZlbnRzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZXZlbnRzOiBudWxsLAotCi0gICAgICAgICAgICBtZXJnZWRQcm9wZXJ0aWVzOiBbJ2V2
ZW50cyddLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBob29r
IGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHJvdXRlciBjb21wbGV0ZWx5IGV4aXRzIHRoaXMgcm91dGUu
IEl0IGlzCi0gICAgICAgICAgICAgICAgICAgIG5vdCBleGVjdXRlZCB3aGVuIHRoZSBtb2RlbCBm
b3IgdGhlIHJvdXRlIGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkZWFj
dGl2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVhY3RpdmF0ZTogRW1i
ZXIuSywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaG9vayBp
cyBleGVjdXRlZCB3aGVuIHRoZSByb3V0ZXIgZW50ZXJzIHRoZSByb3V0ZS4gSXQgaXMgbm90IGV4
ZWN1dGVkCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUg
Y2hhbmdlcy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFjdGl2YXRlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgYWN0aXZhdGU6IEVtYmVyLkssCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uIHRoZSBhcHBsaWNhdGlvbiBp
bnRvIGFub3RoZXIgcm91dGUuIFRoZSByb3V0ZSBtYXkKLSAgICAgICAgICAgICAgICAgICAgYmUg
ZWl0aGVyIGEgc2luZ2xlIHJvdXRlIG9yIHJvdXRlIHBhdGg6Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubygn
YmxvZ1Bvc3RzJyk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdibG9n
UG9zdHMucmVjZW50RW50cmllcycpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICAgICAgICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVsIGZvciB0aGUgcm91dGUgaW4g
cXVlc3Rpb24uIFRoZSBtb2RlbAotICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNlcmlhbGl6
ZWQgaW50byB0aGUgVVJMIHVzaW5nIHRoZSBgc2VyaWFsaXplYCBob29rIG9mCi0gICAgICAgICAg
ICAgICAgICAgIHRoZSByb3V0ZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdibG9nUG9zdCcsIGFQb3N0
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgYSBs
aXRlcmFsIGlzIHBhc3NlZCAoc3VjaCBhcyBhIG51bWJlciBvciBhIHN0cmluZyksIGl0IHdpbGwK
LSAgICAgICAgICAgICAgICAgICAgYmUgdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyIGluc3RlYWQu
IEluIHRoaXMgY2FzZSwgdGhlIGBtb2RlbGAKLSAgICAgICAgICAgICAgICAgICAgaG9vayBvZiB0
aGUgcm91dGUgd2lsbCBiZSB0cmlnZ2VyZWQ6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ1Bvc3Qn
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgTXVs
dGlwbGUgbW9kZWxzIHdpbGwgYmUgYXBwbGllZCBsYXN0IHRvIGZpcnN0IHJlY3Vyc2l2ZWx5IHVw
IHRoZQotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSB0cmVlLgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYmxvZ1Bv
c3QnLCB7cGF0aDonOmJsb2dQb3N0SWQnfSwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucmVzb3VyY2UoJ2Jsb2dDb21tZW50Jywge3BhdGg6ICc6YmxvZ0NvbW1lbnRJ
ZCd9KTsKLSAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dDb21tZW50Jywg
YVBvc3QsIGFDb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8o
J2Jsb2dDb21tZW50JywgMSwgMTMpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHBhc3MgYSBVUkwgKGEgc3RyaW5n
IHRoYXQgc3RhcnRzIHdpdGggYQotICAgICAgICAgICAgICAgICAgICBgL2ApLiBUaGlzIGlzIGlu
dGVuZGVkIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kCi0gICAgICAgICAg
ICAgICAgICAgIHNob3VsZCByYXJlbHkgYmUgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCi0KLSAg
ICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB0aGlz
LnRyYW5zaXRpb25UbygnLycpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25U
bygnL2Jsb2cvcG9zdC8xL2NvbW1lbnQvMTMnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgU2VlIGFsc28gJ3JlcGxhY2VXaXRoJy4KLQotICAgICAgICAg
ICAgICAgICAgICBTaW1wbGUgVHJhbnNpdGlvbiBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCJpbmRleCIpOwotICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGUoInNlY3JldCIpOwotICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucm91dGUoImZvdXJPaEZvdXIiLCB7IHBhdGg6ICIqOiJ9KTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkluZGV4Um91dGUgPSBF
bWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1vdmVUb1NlY3JldDogZnVuY3Rpb24oY29udGV4dCl7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpemVkKCkpewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdzZWNyZXQnLCBjb250ZXh0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudHJhbnNpdGlvblRvKCdmb3VyT2hGb3VyJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbiB0byBh
IG5lc3RlZCByb3V0ZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYXJ0aWNsZXMnLCB7IHBhdGg6ICcvYXJ0aWNsZXMnIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSgnbmV3Jyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5JbmRleFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9uVG9OZXdBcnRpY2xlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2FydGljbGVzLm5ldycpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIE11
bHRpcGxlIE1vZGVscyBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCJpbmRleCIpOwotICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVzb3VyY2UoJ2JyZWFrZmFzdCcsIHtwYXRoOic6YnJlYWtmYXN0SWQnfSwgZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ2NlcmVhbCcs
IHtwYXRoOiAnOmNlcmVhbElkJ30pOwotICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuSW5kZXhSb3V0ZSA9
IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogewot
ICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRvQ2hvY29sYXRlQ2VyZWFsOiBmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VyZWFsID0geyBjZXJlYWxJZDogIkNo
b2NvbGF0ZVl1bW1pbmVzcyJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtm
YXN0ID0ge2JyZWFrZmFzdElkOiAiQ2VyZWFsQW5kTWlsayJ9OwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdjZXJlYWwnLCBicmVha2Zhc3QsIGNlcmVhbCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCB0cmFuc2l0aW9uVG8KLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlIG9yIGEgVVJMCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIG9yIGlk
ZW50aWZpZXIocykgdG8gYmUgdXNlZCB3aGlsZQotICAgICAgICAgICAgICAgICAgICAgIHRyYW5z
aXRpb25pbmcgdG8gdGhlIHJvdXRlLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtUcmFu
c2l0aW9ufSB0aGUgdHJhbnNpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAg
ICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQgdHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHRyYW5zaXRpb25UbzogZnVuY3Rpb24obmFtZSwgY29udGV4dCkgewot
ICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcm91dGVyLnRyYW5zaXRpb25Uby5hcHBseShyb3V0ZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUGVy
Zm9ybSBhIHN5bmNocm9ub3VzIHRyYW5zaXRpb24gaW50byBhbm90aGVyIHJvdXRlIHdpdGhvdXQg
YXR0ZW1wdGluZwotICAgICAgICAgICAgICAgICAgICB0byByZXNvbHZlIHByb21pc2VzLCB1cGRh
dGUgdGhlIFVSTCwgb3IgYWJvcnQgYW55IGN1cnJlbnRseSBhY3RpdmUKLSAgICAgICAgICAgICAg
ICAgICAgYXN5bmNocm9ub3VzIHRyYW5zaXRpb25zIChpLmUuIHJlZ3VsYXIgdHJhbnNpdGlvbnMg
Y2F1c2VkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIGB0cmFuc2l0aW9uVG9gIG9yIFVSTCBjaGFu
Z2VzKS4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBoYW5keSBmb3IgcGVy
Zm9ybWluZyBpbnRlcm1lZGlhdGUgdHJhbnNpdGlvbnMgb24gdGhlCi0gICAgICAgICAgICAgICAg
ICAgIHdheSB0byBhIGZpbmFsIGRlc3RpbmF0aW9uIHJvdXRlLCBhbmQgaXMgY2FsbGVkIGludGVy
bmFsbHkgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBgZXJyb3JgIGFuZCBgbG9hZGluZ2AgaGFuZGxlcnMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8KLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIHRvIGJlIHVz
ZWQgd2hpbGUgdHJhbnNpdGlvbmluZwotICAgICAgICAgICAgICAgICAgICB0byB0aGUgcm91dGUu
Ci0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAotICAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgICAgICAgICAgICBy
b3V0ZXIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvLmFwcGx5KHJvdXRlciwgYXJndW1lbnRzKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBS
ZWZyZXNoIHRoZSBtb2RlbCBvbiB0aGlzIHJvdXRlIGFuZCBhbnkgY2hpbGQgcm91dGVzLCBmaXJp
bmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIGBiZWZvcmVNb2RlbGAsIGBtb2RlbGAsIGFuZCBg
YWZ0ZXJNb2RlbGAgaG9va3MgaW4gYSBzaW1pbGFyIGZhc2hpb24KLSAgICAgICAgICAgICAgICAg
ICAgdG8gaG93IHJvdXRlcyBhcmUgZW50ZXJlZCB3aGVuIHRyYW5zaXRpb25pbmcgaW4gZnJvbSBv
dGhlciByb3V0ZS4KLSAgICAgICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgcm91dGUgcGFyYW1z
IChlLmcuIGBhcnRpY2xlX2lkYCkgd2lsbCBiZSBwYXNzZWQgaW4KLSAgICAgICAgICAgICAgICAg
ICAgdG8gdGhlIHJlc3BlY3RpdmUgbW9kZWwgaG9va3MsIGFuZCBpZiBhIGRpZmZlcmVudCBtb2Rl
bCBpcyByZXR1cm5lZCwKLSAgICAgICAgICAgICAgICAgICAgYHNldHVwQ29udHJvbGxlcmAgYW5k
IGFzc29jaWF0ZWQgcm91dGUgaG9va3Mgd2lsbCByZS1maXJlIGFzIHdlbGwuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQW4gZXhhbXBsZSB1c2FnZSBvZiB0aGlzIG1ldGhvZCBpcyByZS1xdWVyeWlu
ZyB0aGUgc2VydmVyIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgbGF0ZXN0IGluZm9ybWF0
aW9uIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgd2hlbiB0aGUgcm91dGUKLSAgICAgICAg
ICAgICAgICAgICAgd2FzIGZpcnN0IGVudGVyZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90
ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSBgbW9kZWxgIGhvb2tzIHRvIGZpcmUgZXZlbiBvbiByb3V0
ZXMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZXJlIHByb3ZpZGVkIGEgbW9kZWwgb2JqZWN0
IHdoZW4gdGhlIHJvdXRlIHdhcyBpbml0aWFsbHkKLSAgICAgICAgICAgICAgICAgICAgZW50ZXJl
ZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlZnJlc2gKLSAgICAgICAgICAgICAg
ICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhlIHRyYW5zaXRpb24gb2JqZWN0IGFzc29jaWF0
ZWQgd2l0aCB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdGVkIHRyYW5zaXRpb24K
LSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnJvdXRlci5yb3V0ZXIucmVmcmVzaCh0aGlzKTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uIGludG8gYW5vdGhl
ciByb3V0ZSB3aGlsZSByZXBsYWNpbmcgdGhlIGN1cnJlbnQgVVJMLCBpZiBwb3NzaWJsZS4KLSAg
ICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgaGlzdG9yeSBl
bnRyeSBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBvbmUuCi0gICAgICAgICAgICAgICAgICAgIEJl
c2lkZSB0aGF0LCBpdCBpcyBpZGVudGljYWwgdG8gYHRyYW5zaXRpb25Ub2AgaW4gYWxsIG90aGVy
IHJlc3BlY3RzLiBTZWUKLSAgICAgICAgICAgICAgICAgICAgJ3RyYW5zaXRpb25UbycgZm9yIGFk
ZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG11bHRpcGxlIG1vZGVscy4KLQotICAgICAg
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCJpbmRleCIpOwotICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucm91dGUoInNlY3JldCIpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICBBcHAuU2VjcmV0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewot
ICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTW9kZWw6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVkKCkpewotICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlcGxhY2VXaXRoKCdpbmRleCcpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVwbGFj
ZVdpdGgKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUg
b2YgdGhlIHJvdXRlIG9yIGEgVVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Li4uT2Jq
ZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIG9yIGlkZW50aWZpZXIocykgdG8gYmUgdXNlZCB3aGls
ZQotICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25pbmcgdG8gdGhlIHJvdXRlLgotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtUcmFuc2l0aW9ufSB0aGUgdHJhbnNpdGlvbiBvYmpl
Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQg
dHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VXaXRo
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5yZXBsYWNlV2l0aC5hcHBseShyb3V0ZXIs
IGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgU2VuZHMgYW4gYWN0aW9uIHRvIHRoZSByb3V0ZXIsIHdoaWNoIHdpbGwgZGVs
ZWdhdGUgaXQgdG8gdGhlIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBhY3RpdmUgcm91
dGUgaGllcmFyY2h5IHBlciB0aGUgYnViYmxpbmcgcnVsZXMgZXhwbGFpbmVkIHVuZGVyIGBhY3Rp
b25zYC4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCJpbmRleCIpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuQXBwbGljYXRp
b25Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2s6IGZ1bmN0aW9uKGFyZykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhcmcsICd3YXMgY2xpY2tlZCcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkluZGV4Um91
dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrSWZEZWJ1ZzogZnVuY3Rpb24oYXJnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2VuZCgndHJhY2snLCBhcmcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZW5kCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gdHJpZ2dlcgotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0gey4uLip9IGFyZ3MKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBzZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5yb3V0ZXIuc2VuZC5hcHBseSh0aGlzLnJvdXRlciwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIGhvb2sg
aXMgdGhlIGVudHJ5IHBvaW50IGZvciByb3V0ZXIuanMKLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKGNvbnRleHQsIHRyYW5zaXRpb24p
IHsKLSAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlck5hbWUgPSB0aGlzLmNvbnRyb2xsZXJO
YW1lIHx8IHRoaXMucm91dGVOYW1lOwotICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0g
dGhpcy5jb250cm9sbGVyRm9yKGNvbnRyb2xsZXJOYW1lLCB0cnVlKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghY29udHJvbGxlcikgewotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyID0g
dGhpcy5nZW5lcmF0ZUNvbnRyb2xsZXIoY29udHJvbGxlck5hbWUsIGNvbnRleHQpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB0aGUgcm91dGUncyBjb250
cm9sbGVyIHNvIHRoYXQgaXQgY2FuIG1vcmUgZWFzaWx5IGJlCi0gICAgICAgICAgICAgICAgLy8g
cmVmZXJlbmNlZCBpbiBhY3Rpb24gaGFuZGxlcnMKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dXBDb250
cm9sbGVycykgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIkVtYmVyLlJv
dXRlLnNldHVwQ29udHJvbGxlcnMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBFbWJlci5Sb3V0
ZS5zZXR1cENvbnRyb2xsZXIoY29udHJvbGxlciwgbW9kZWwpIGluc3RlYWQuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2V0dXBDb250cm9sbGVycyhjb250cm9sbGVyLCBjb250ZXh0KTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgIHZhciBzdGF0
ZXMgPSBnZXQodGhpcywgJ19xcC5zdGF0ZXMnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRy
YW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwg
ZGVwIHZhbHVlcyB1c2VkIHRvIGNhbGN1bGF0ZSBjYWNoZSBrZXlzLgotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9IHN0YXRlcy5jaGFuZ2luZ0tleXM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl91cGRhdGVDYWNoZVBhcmFtcyh0cmFu
c2l0aW9uLnBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgY29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9IHN0YXRlcy5hbGxvd092ZXJyaWRlczsKLQotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNldHVwQ29udHJvbGxlcihjb250cm9sbGVyLCBjb250ZXh0
LCB0cmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5yZW5kZXJUZW1wbGF0ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVj
YXRlKCJFbWJlci5Sb3V0ZS5yZW5kZXJUZW1wbGF0ZXMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVz
ZSBFbWJlci5Sb3V0ZS5yZW5kZXJUZW1wbGF0ZShjb250cm9sbGVyLCBtb2RlbCkgaW5zdGVhZC4i
KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUZW1wbGF0ZXMoY29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJU
ZW1wbGF0ZShjb250cm9sbGVyLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBob29r
IGlzIHRoZSBmaXJzdCBvZiB0aGUgcm91dGUgZW50cnkgdmFsaWRhdGlvbiBob29rcwotICAgICAg
ICAgICAgICAgICAgICBjYWxsZWQgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdHJhbnNpdGlv
biBpbnRvIGEgcm91dGUKLSAgICAgICAgICAgICAgICAgICAgb3Igb25lIG9mIGl0cyBjaGlsZHJl
bi4gSXQgaXMgY2FsbGVkIGJlZm9yZSBgbW9kZWxgIGFuZAotICAgICAgICAgICAgICAgICAgICBg
YWZ0ZXJNb2RlbGAsIGFuZCBpcyBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlbjoKLQotICAgICAg
ICAgICAgICAgICAgICAxKSBBIGRlY2lzaW9uIGNhbiBiZSBtYWRlIHRvIHJlZGlyZWN0IGVsc2V3
aGVyZSB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgIG5lZWRpbmcgdG8gcmVzb2x2ZSB0
aGUgbW9kZWwgZmlyc3QuCi0gICAgICAgICAgICAgICAgICAgIDIpIEFueSBhc3luYyBvcGVyYXRp
b25zIG5lZWQgdG8gb2NjdXIgZmlyc3QgYmVmb3JlIHRoZQotICAgICAgICAgICAgICAgICAgICAg
ICBtb2RlbCBpcyBhdHRlbXB0ZWQgdG8gYmUgcmVzb2x2ZWQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgVGhpcyBob29rIGlzIHByb3ZpZGVkIHRoZSBjdXJyZW50IGB0cmFuc2l0aW9uYCBhdHRlbXB0
Ci0gICAgICAgICAgICAgICAgICAgIGFzIGEgcGFyYW1ldGVyLCB3aGljaCBjYW4gYmUgdXNlZCB0
byBgLmFib3J0KClgIHRoZSB0cmFuc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICBzYXZlIGl0
IGZvciBhIGxhdGVyIGAucmV0cnkoKWAsIG9yIHJldHJpZXZlIHZhbHVlcyBzZXQKLSAgICAgICAg
ICAgICAgICAgICAgb24gaXQgZnJvbSBhIHByZXZpb3VzIGhvb2suIFlvdSBjYW4gYWxzbyBqdXN0
IGNhbGwKLSAgICAgICAgICAgICAgICAgICAgYHRoaXMudHJhbnNpdGlvblRvYCB0byBhbm90aGVy
IHJvdXRlIHRvIGltcGxpY2l0bHkKLSAgICAgICAgICAgICAgICAgICAgYWJvcnQgdGhlIGB0cmFu
c2l0aW9uYC4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJldHVybiBhIHByb21pc2Ug
ZnJvbSB0aGlzIGhvb2sgdG8gcGF1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRp
b24gdW50aWwgdGhlIHByb21pc2UgcmVzb2x2ZXMgKG9yIHJlamVjdHMpLiBUaGlzIGNvdWxkCi0g
ICAgICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCwgZm9yIGluc3RhbmNlLCBmb3IgcmV0cmlldmlu
ZyBhc3luYyBjb2RlIGZyb20KLSAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZlciB0aGF0IGlz
IHJlcXVpcmVkIHRvIGVudGVyIGEgcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBganMK
LSAgICAgICAgICAgICAgICAgICAgQXBwLlBvc3RSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTW9kZWw6IGZ1bmN0aW9uKHRyYW5zaXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXBwLlBvc3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLiQuZ2V0U2NyaXB0KCcvbW9kZWxzL3Bvc3QuanMn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICAgICAgICBJZiBgQXBwLlBvc3RgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGFib3ZlIGV4
YW1wbGUsCi0gICAgICAgICAgICAgICAgICAgIGBiZWZvcmVNb2RlbGAgd2lsbCB1c2UgalF1ZXJ5
J3MgYGdldFNjcmlwdGAsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIHJldHVybnMgYSBwcm9t
aXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNlcnZlciBoYXMKLSAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBhbmQgZXhlY3V0ZWQgdGhlIGNvZGUgZnJvbSB0aGUK
LSAgICAgICAgICAgICAgICAgICAgc2VydmVyLiBOb3RlIHRoYXQgaWYgYW4gZXJyb3Igd2VyZSB0
byBvY2N1ciwgaXQgd291bGQKLSAgICAgICAgICAgICAgICAgICAgYmUgcGFzc2VkIHRvIHRoZSBg
ZXJyb3JgIGhvb2sgb24gYEVtYmVyLlJvdXRlYCwgYnV0Ci0gICAgICAgICAgICAgICAgICAgIGl0
J3MgYWxzbyBwb3NzaWJsZSB0byBoYW5kbGUgZXJyb3JzIHNwZWNpZmljIHRvCi0gICAgICAgICAg
ICAgICAgICAgIGBiZWZvcmVNb2RlbGAgcmlnaHQgZnJvbSB3aXRoaW4gdGhlIGhvb2sgKHRvIGRp
c3Rpbmd1aXNoCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHNoYXJlZCBlcnJvciBoYW5k
bGluZyBiZWhhdmlvciBvZiB0aGUgYGVycm9yYAotICAgICAgICAgICAgICAgICAgICBob29rKToK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUG9z
dFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBiZWZv
cmVNb2RlbDogZnVuY3Rpb24odHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFBcHAuUG9zdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci4kLmdldFNjcmlwdCgn
cG9zdC5qcycpLnRoZW4obnVsbCwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYudHJhbnNpdGlvblRvKCdoZWxwJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGFib3ZlIHRyYW5zaXRpb25UbyB3aWxsIGltcGxpY2l0
bHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYWx0IHRoZSB0cmFuc2l0aW9uLiBJ
ZiB5b3Ugd2VyZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3Ro
aW5nIGZyb20gdGhpcyBwcm9taXNlIHJlamVjdCBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFjY29yZGluZyB0byBwcm9taXNlIHNlbWFudGljcywgdGhhdCB3b3VsZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIHJlamVjdCBpbnRvIGEg
cmVzb2x2ZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlv
biB3b3VsZCBjb250aW51ZS4gVG8gcHJvcGFnYXRlIHRoZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGVycm9yIHNvIHRoYXQgaXQnZCBiZSBoYW5kbGVkIGJ5IHRoZSBgZXJyb3JgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9vaywgeW91IHdvdWxkIGhhdmUgdG8gZWl0
aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLlJTVlAucmVqZWN0
KGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGJl
Zm9yZU1vZGVsCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNp
dGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnlQYXJhbXMgdGhl
IGFjdGl2ZSBxdWVyeSBwYXJhbXMgZm9yIHRoaXMgcm91dGUKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiB7UHJvbWlzZX0gaWYgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhpcyBob29rIGlz
Ci0gICAgICAgICAgICAgICAgICAgICAgYSBwcm9taXNlLCB0aGUgdHJhbnNpdGlvbiB3aWxsIHBh
dXNlIHVudGlsIHRoZSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXMu
IE90aGVyd2lzZSwgbm9uLXByb21pc2UgcmV0dXJuIHZhbHVlcyBhcmUgbm90Ci0gICAgICAgICAg
ICAgICAgICAgICAgdXRpbGl6ZWQgaW4gYW55IHdheS4KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBiZWZvcmVNb2RlbDogRW1iZXIuSywKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgaG9vayBpcyBjYWxsZWQgYWZ0ZXIgdGhpcyByb3V0ZSdzIG1v
ZGVsIGhhcyByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICAgICAgSXQgZm9sbG93cyBpZGVudGlj
YWwgYXN5bmMvcHJvbWlzZSBzZW1hbnRpY3MgdG8gYGJlZm9yZU1vZGVsYAotICAgICAgICAgICAg
ICAgICAgICBidXQgaXMgcHJvdmlkZWQgdGhlIHJvdXRlJ3MgcmVzb2x2ZWQgbW9kZWwgaW4gYWRk
aXRpb24gdG8KLSAgICAgICAgICAgICAgICAgICAgdGhlIGB0cmFuc2l0aW9uYCwgYW5kIGlzIHRo
ZXJlZm9yZSBzdWl0ZWQgdG8gcGVyZm9ybWluZwotICAgICAgICAgICAgICAgICAgICBsb2dpYyB0
aGF0IGNhbiBvbmx5IHRha2UgcGxhY2UgYWZ0ZXIgdGhlIG1vZGVsIGhhcyBhbHJlYWR5Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc29sdmVkLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0c1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBhZnRlck1vZGVsOiBmdW5jdGlvbihwb3N0cywgdHJhbnNp
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3RzLmdldCgnbGVuZ3RoJykg
PT09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ3Bv
c3Quc2hvdycsIHBvc3RzLmdldCgnZmlyc3RPYmplY3QnKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8g
ZG9jdW1lbnRhdGlvbiBmb3IgYGJlZm9yZU1vZGVsYCBmb3IgYSBkZXNjcmlwdGlvbgotICAgICAg
ICAgICAgICAgICAgICBvZiB0cmFuc2l0aW9uLXBhdXNpbmcgc2VtYW50aWNzIHdoZW4gYSBwcm9t
aXNlIGlzIHJldHVybmVkCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhpcyBob29rLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWZ0ZXJNb2RlbAotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gcmVzb2x2ZWRNb2RlbCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBg
bW9kZWxgLAotICAgICAgICAgICAgICAgICAgICAgIG9yIGl0cyByZXNvbHZlZCB2YWx1ZSBpZiBp
dCB3YXMgYSBwcm9taXNlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0g
dHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnlQYXJh
bXMgdGhlIGFjdGl2ZSBxdWVyeSBwYXJhbXMgZm9yIHRoaXMgaGFuZGxlcgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBpZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGlz
IGhvb2sgaXMKLSAgICAgICAgICAgICAgICAgICAgICBhIHByb21pc2UsIHRoZSB0cmFuc2l0aW9u
IHdpbGwgcGF1c2UgdW50aWwgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlcy4gT3RoZXJ3aXNlLCBub24tcHJvbWlzZSByZXR1cm4gdmFsdWVzIGFyZSBub3QKLSAg
ICAgICAgICAgICAgICAgICAgICB1dGlsaXplZCBpbiBhbnkgd2F5LgotICAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBhZnRlck1vZGVsOiBFbWJlci5LLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQSBob29rIHlvdSBjYW4gaW1wbGVtZW50IHRvIG9wdGlv
bmFsbHkgcmVkaXJlY3QgdG8gYW5vdGhlciByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBJ
ZiB5b3UgY2FsbCBgdGhpcy50cmFuc2l0aW9uVG9gIGZyb20gaW5zaWRlIG9mIHRoaXMgaG9vaywg
dGhpcyByb3V0ZQotICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBlbnRlcmVkIGluIGZh
dm9yIG9mIHRoZSBvdGhlciBob29rLgotCi0gICAgICAgICAgICAgICAgICAgIGByZWRpcmVjdGAg
YW5kIGBhZnRlck1vZGVsYCBiZWhhdmUgdmVyeSBzaW1pbGFybHkgYW5kIGFyZQotICAgICAgICAg
ICAgICAgICAgICBjYWxsZWQgYWxtb3N0IGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCB0aGV5IGhhdmUg
YW4gaW1wb3J0YW50Ci0gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0aW9uIGluIHRoZSBjYXNl
IHRoYXQsIGZyb20gb25lIG9mIHRoZXNlIGhvb2tzLCBhCi0gICAgICAgICAgICAgICAgICAgIHJl
ZGlyZWN0IGludG8gYSBjaGlsZCByb3V0ZSBvZiB0aGlzIHJvdXRlIG9jY3VyczogcmVkaXJlY3Rz
Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gYGFmdGVyTW9kZWxgIGVzc2VudGlhbGx5IGludmFs
aWRhdGUgdGhlIGN1cnJlbnQgYXR0ZW1wdAotICAgICAgICAgICAgICAgICAgICB0byBlbnRlciB0
aGlzIHJvdXRlLCBhbmQgd2lsbCByZXN1bHQgaW4gdGhpcyByb3V0ZSdzIGBiZWZvcmVNb2RlbGAs
Ci0gICAgICAgICAgICAgICAgICAgIGBtb2RlbGAsIGFuZCBgYWZ0ZXJNb2RlbGAgaG9va3MgYmVp
bmcgZmlyZWQgYWdhaW4gd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBuZXcsIHJlZGly
ZWN0aW5nIHRyYW5zaXRpb24uIFJlZGlyZWN0cyB0aGF0IG9jY3VyIHdpdGhpbgotICAgICAgICAg
ICAgICAgICAgICB0aGUgYHJlZGlyZWN0YCBob29rLCBvbiB0aGUgb3RoZXIgaGFuZCwgd2lsbCBf
bm90XyBjYXVzZQotICAgICAgICAgICAgICAgICAgICB0aGVzZSBob29rcyB0byBiZSBmaXJlZCBh
Z2FpbiB0aGUgc2Vjb25kIHRpbWUgYXJvdW5kOyBpbgotICAgICAgICAgICAgICAgICAgICBvdGhl
ciB3b3JkcywgYnkgdGhlIHRpbWUgdGhlIGByZWRpcmVjdGAgaG9vayBoYXMgYmVlbiBjYWxsZWQs
Ci0gICAgICAgICAgICAgICAgICAgIGJvdGggdGhlIHJlc29sdmVkIG1vZGVsIGFuZCBhdHRlbXB0
ZWQgZW50cnkgaW50byB0aGlzIHJvdXRlCi0gICAgICAgICAgICAgICAgICAgIGFyZSBjb25zaWRl
cmVkIHRvIGJlIGZ1bGx5IHZhbGlkYXRlZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IHJlZGlyZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBtb2RlbCB0aGUg
bW9kZWwgZm9yIHRoaXMgcm91dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBy
ZWRpcmVjdDogRW1iZXIuSywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IENhbGxlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGNoYW5nZWQgYnkgcm91dGVyLmpzLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29u
dGV4dERpZENoYW5nZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRleHRE
aWRDaGFuZ2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vZGVs
ID0gdGhpcy5jb250ZXh0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIEEgaG9vayB5b3UgY2FuIGltcGxlbWVudCB0byBjb252ZXJ0IHRoZSBV
UkwgaW50byB0aGUgbW9kZWwgZm9yCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgcm91dGUuCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLlJvdXRl
ci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgn
cG9zdCcsIHtwYXRoOiAnL3Bvc3RzLzpwb3N0X2lkJ30pOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIG1v
ZGVsIGZvciB0aGUgYHBvc3RgIHJvdXRlIGlzIGBBcHAuUG9zdC5maW5kKHBhcmFtcy5wb3N0X2lk
KWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgaWYgeW91ciByb3V0ZSBoYXMg
YSBkeW5hbWljIHNlZ21lbnQgZW5kaW5nIGluIGBfaWRgOgotCi0gICAgICAgICAgICAgICAgICAg
ICogVGhlIG1vZGVsIGNsYXNzIGlzIGRldGVybWluZWQgZnJvbSB0aGUgc2VnbWVudCAoYHBvc3Rf
aWRgJ3MKLSAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBgQXBwLlBvc3RgKQotICAgICAg
ICAgICAgICAgICAgICAqIFRoZSBmaW5kIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIG1vZGVsIGNs
YXNzIHdpdGggdGhlIHZhbHVlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgdGhlIGR5bmFtaWMg
c2VnbWVudC4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgZm9yIHJvdXRlcyB3aXRo
IGR5bmFtaWMgc2VnbWVudHMsIHRoaXMgaG9vayBpcyBvbmx5Ci0gICAgICAgICAgICAgICAgICAg
IGV4ZWN1dGVkIHdoZW4gZW50ZXJlZCB2aWEgdGhlIFVSTC4gSWYgdGhlIHJvdXRlIGlzIGVudGVy
ZWQKLSAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBhIHRyYW5zaXRpb24gKGUuZy4gd2hlbiB1
c2luZyB0aGUgYGxpbmstdG9gIEhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgICAgICAgaGVscGVy
KSwgdGhlbiBhIG1vZGVsIGNvbnRleHQgaXMgYWxyZWFkeSBwcm92aWRlZCBhbmQgdGhpcyBob29r
Ci0gICAgICAgICAgICAgICAgICAgIGlzIG5vdCBjYWxsZWQuIFJvdXRlcyB3aXRob3V0IGR5bmFt
aWMgc2VnbWVudHMgd2lsbCBhbHdheXMKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSB0aGUg
bW9kZWwgaG9vay4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGhvb2sgZm9sbG93cyB0aGUg
YXN5bmNocm9ub3VzL3Byb21pc2Ugc2VtYW50aWNzCi0gICAgICAgICAgICAgICAgICAgIGRlc2Ny
aWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGJlZm9yZU1vZGVsYC4gSW4gcGFydGljdWxh
ciwKLSAgICAgICAgICAgICAgICAgICAgaWYgYSBwcm9taXNlIHJldHVybmVkIGZyb20gYG1vZGVs
YCBmYWlscywgdGhlIGVycm9yIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCBi
eSB0aGUgYGVycm9yYCBob29rIG9uIGBFbWJlci5Sb3V0ZWAuCi0KLSAgICAgICAgICAgICAgICAg
ICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAg
ICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAg
ICAgICAgIG1vZGVsOiBmdW5jdGlvbihwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBBcHAuUG9zdC5maW5kKHBhcmFtcy5wb3N0X2lkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG1vZGVsCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgZXh0cmFjdGVkIGZyb20gdGhl
IFVSTAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1RyYW5zaXRpb259IHRyYW5zaXRpb24K
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHF1ZXJ5UGFyYW1zIHRoZSBxdWVy
eSBwYXJhbXMgZm9yIHRoaXMgcm91dGUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2Jq
ZWN0fFByb21pc2V9IHRoZSBtb2RlbCBmb3IgdGhpcyByb3V0ZS4gSWYKLSAgICAgICAgICAgICAg
ICAgICAgICBhIHByb21pc2UgaXMgcmV0dXJuZWQsIHRoZSB0cmFuc2l0aW9uIHdpbGwgcGF1c2Ug
dW50aWwKLSAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvbWlzZSByZXNvbHZlcywgYW5kIHRo
ZSByZXNvbHZlZCB2YWx1ZSBvZiB0aGUgcHJvbWlzZQotICAgICAgICAgICAgICAgICAgICAgIHdp
bGwgYmUgdXNlZCBhcyB0aGUgbW9kZWwgZm9yIHRoaXMgcm91dGUuCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgbW9kZWw6IGZ1bmN0aW9uKHBhcmFtcywgdHJhbnNpdGlvbikgewot
ICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgbmFtZSwgc2F3UGFyYW1zLCB2YWx1ZTsKLQotICAg
ICAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtczsKLQotICAgICAgICAgICAgICAgIHF1ZXJ5UGFy
YW1zID0gZ2V0KHRoaXMsICdfcXAubWFwJyk7Ci0KLQotICAgICAgICAgICAgICAgIGZvciAodmFy
IHByb3AgaW4gcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSAncXVl
cnlQYXJhbXMnIHx8IChxdWVyeVBhcmFtcyAmJiBwcm9wIGluIHF1ZXJ5UGFyYW1zKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSBwcm9wLm1hdGNoKC9eKC4qKV9pZCQvKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG1hdGNoWzFdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXNbcHJvcF07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgc2F3UGFyYW1zID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW5hbWUgJiYgc2F3UGFyYW1zKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb3B5KHBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghbmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbi5yZXNvbHZlSW5k
ZXggIT09IHRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zLmxlbmd0aC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICB2YXIgcGFyZW50TW9kZWwgPSB0cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJ
bmZvc1t0cmFuc2l0aW9uLnJlc29sdmVJbmRleC0xXS5jb250ZXh0OwotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnRNb2RlbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5kTW9kZWwobmFtZSwgdmFsdWUpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgZGVzZXJpYWxpemUKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtPYmplY3R9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyBleHRyYWN0ZWQgZnJvbSB0aGUg
VVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNpdGlvbgot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R8UHJvbWlzZX0gdGhlIG1vZGVsIGZv
ciB0aGlzIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIFJvdXRlci5qcyBob29rLgotICAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkZXNlcmlhbGl6ZTogZnVuY3Rpb24ocGFy
YW1zLCB0cmFuc2l0aW9uKSB7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCh0
aGlzLnBhcmFtc0Zvcih0aGlzLnJvdXRlTmFtZSksIHRyYW5zaXRpb24pOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmaW5k
TW9kZWwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIG1vZGVs
IHR5cGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlIHRoZSB2YWx1
ZSBwYXNzZWQgdG8gZmluZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZpbmRN
b2RlbDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gZ2V0KHRoaXMs
ICdzdG9yZScpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5maW5kLmFwcGx5KHN0b3Jl
LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFN0b3JlIHByb3BlcnR5IHByb3ZpZGVzIGEgaG9vayBmb3IgZGF0YSBwZXJz
aXN0ZW5jZSBsaWJyYXJpZXMgdG8gaW5qZWN0IHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzdG9yZSBwcm9wZXJ0eSBwcm92aWRlcyB0aGUgZXhhY3Qg
c2FtZSBmdW5jdGlvbmFsaXR5IHByZXZpb3VzbHkKLSAgICAgICAgICAgICAgICAgICAgaW4gdGhl
IG1vZGVsIGhvb2suCi0KLSAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgcmVxdWly
ZWQgaW50ZXJmYWNlIGlzOgotCi0gICAgICAgICAgICAgICAgICAgIGBzdG9yZS5maW5kKG1vZGVs
TmFtZSwgZmluZEFyZ3VtZW50cylgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzdG9y
ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gc3RvcmUKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBzdG9yZTogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyOwotICAgICAgICAgICAg
ICAgIHZhciByb3V0ZU5hbWUgPSB0aGlzLnJvdXRlTmFtZTsKLSAgICAgICAgICAgICAgICB2YXIg
bmFtZXNwYWNlID0gZ2V0KHRoaXMsICdyb3V0ZXIubmFtZXNwYWNlJyk7Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihuYW1lLCB2
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsQ2xhc3MgPSBjb250YWlu
ZXIubG9va3VwRmFjdG9yeSgnbW9kZWw6JyArIG5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIllvdSB1c2VkIHRoZSBkeW5hbWljIHNlZ21lbnQgIiArIG5hbWUg
KyAiX2lkIGluIHlvdXIgcm91dGUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZU5h
bWUgKyAiLCBidXQgIiArIG5hbWVzcGFjZSArICIuIiArIGNsYXNzaWZ5KG5hbWUpICsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICIgZGlkIG5vdCBleGlzdCBhbmQgeW91IGRpZCBub3Qgb3ZlcnJp
ZGUgeW91ciByb3V0ZSdzIGBtb2RlbGAgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiaG9v
ay4iLCBtb2RlbENsYXNzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RlbENs
YXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoY2xh
c3NpZnkobmFtZSkgKyAnIGhhcyBubyBtZXRob2QgYGZpbmRgLicsIHR5cGVvZiBtb2RlbENsYXNz
LmZpbmQgPT09ICdmdW5jdGlvbicpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bW9kZWxDbGFzcy5maW5kKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIEEgaG9vayB5b3UgY2FuIGltcGxlbWVudCB0byBjb252ZXJ0IHRoZSByb3V0ZSdz
IG1vZGVsIGludG8gcGFyYW1ldGVycwotICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFVSTC4K
LQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUm91
dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNl
KCdwb3N0Jywge3BhdGg6ICcvcG9zdHMvOnBvc3RfaWQnfSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5l
eHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBmdW5jdGlvbihwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzZXJ2ZXIgcmV0dXJucyBgeyBpZDogMTIg
fWAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0SlNPTigiL3Bvc3Rz
LyIgKyBwYXJhbXMucG9zdF9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgICAgICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24obW9kZWwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBtYWtlIHRoZSBVUkwgYC9wb3N0cy8xMmAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBvc3RfaWQ6IG1vZGVsLmlkIH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYHNlcmlhbGl6ZWAg
bWV0aG9kIHdpbGwgaW5zZXJ0IHRoZSBtb2RlbCdzIGBpZGAgaW50byB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgcm91dGUncyBkeW5hbWljIHNlZ21lbnQgKGluIHRoaXMgY2FzZSwgYDpwb3N0X2lk
YCkgaWYgdGhlIHNlZ21lbnQgY29udGFpbnMgJ19pZCcuCi0gICAgICAgICAgICAgICAgICAgIElm
IHRoZSByb3V0ZSBoYXMgbXVsdGlwbGUgZHluYW1pYyBzZWdtZW50cyBvciBkb2VzIG5vdCBjb250
YWluICdfaWQnLCBgc2VyaWFsaXplYAotICAgICAgICAgICAgICAgICAgICB3aWxsIHJldHVybiBg
RW1iZXIuZ2V0UHJvcGVydGllcyhtb2RlbCwgcGFyYW1zKWAKLQotICAgICAgICAgICAgICAgICAg
ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBgdHJhbnNpdGlvblRvYCBpcyBjYWxsZWQgd2l0
aCBhIGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gcG9wdWxhdGUgdGhl
IFVSTC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gbW9kZWwgdGhlIHJvdXRlJ3MgbW9kZWwKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtBcnJheX0gcGFyYW1zIGFuIEFycmF5IG9mIHBhcmFtZXRl
ciBuYW1lcyBmb3IgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgICByb3V0ZSAoaW4g
dGhlIGV4YW1wbGUsIGBbJ3Bvc3RfaWQnXWAuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e09iamVjdH0gdGhlIHNlcmlhbGl6ZWQgcGFyYW1ldGVycwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24obW9kZWwsIHBhcmFtcykgewotICAgICAg
ICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoIDwgMSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghbW9kZWwpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBuYW1lID0gcGFyYW1zWzBdLCBvYmplY3QgPSB7fTsKLQotICAgICAgICAg
ICAgICAgIGlmICgvX2lkJC8udGVzdChuYW1lKSAmJiBwYXJhbXMubGVuZ3RoID09PSAxKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG9iamVjdFtuYW1lXSA9IGdldChtb2RlbCwgImlkIik7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gZ2V0UHJv
cGVydGllcyhtb2RlbCwgcGFyYW1zKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEEgaG9vayB5b3UgY2FuIHVzZSB0byBzZXR1cCB0aGUgY29udHJv
bGxlciBmb3IgdGhlIGN1cnJlbnQgcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjdXJyZW50IHJvdXRl
IGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgbW9kZWwgc3VwcGxpZWQgYnkgdGhlIGBtb2Rl
bGAgaG9vay4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYHNldHVwQ29u
dHJvbGxlcmAgaG9vayBzZXRzIHRoZSBgbW9kZWxgIHByb3BlcnR5IG9mCi0gICAgICAgICAgICAg
ICAgICAgIHRoZSBjb250cm9sbGVyIHRvIHRoZSBgbW9kZWxgLgotCi0gICAgICAgICAgICAgICAg
ICAgIElmIHlvdSBpbXBsZW1lbnQgdGhlIGBzZXR1cENvbnRyb2xsZXJgIGhvb2sgaW4geW91ciBS
b3V0ZSwgaXQgd2lsbAotICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IHRoaXMgZGVmYXVsdCBi
ZWhhdmlvci4gSWYgeW91IHdhbnQgdG8gcHJlc2VydmUgdGhhdCBiZWhhdmlvcgotICAgICAgICAg
ICAgICAgICAgICB3aGVuIGltcGxlbWVudGluZyB5b3VyIGBzZXR1cENvbnRyb2xsZXJgIGZ1bmN0
aW9uLCBtYWtlIHN1cmUgdG8gY2FsbAotICAgICAgICAgICAgICAgICAgICBgX3N1cGVyYDoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUGhvdG9z
Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIG1vZGVs
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcHAuUGhvdG8u
ZmluZCgpOwotICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAg
ICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9uIChjb250cm9sbGVyLCBtb2RlbCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBfc3VwZXIgZm9yIGRlZmF1bHQgYmVoYXZpb3IKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKGNvbnRyb2xsZXIsIG1vZGVsKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEltcGxlbWVudCB5b3VyIGN1c3RvbSBzZXR1cCBhZnRl
cgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyRm9yKCdhcHBsaWNhdGlv
bicpLnNldCgnc2hvd2luZ1Bob3RvcycsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCB5b3VyIHRlbXBsYXRlIHdpbGwgZ2V0IGEg
cHJveHkgZm9yIHRoZSBtb2RlbCBhcyBpdHMKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dCwg
YW5kIHlvdSBjYW4gYWN0IGFzIHRob3VnaCB0aGUgbW9kZWwgaXRzZWxmIHdhcyB0aGUgY29udGV4
dC4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgY29udHJvbGxlciB3aWxsIGJl
IG9uZSByZXNvbHZlZCBiYXNlZCBvbiB0aGUgbmFtZQotICAgICAgICAgICAgICAgICAgICBvZiB0
aGlzIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIElmIG5vIGV4cGxpY2l0IGNvbnRyb2xs
ZXIgaXMgZGVmaW5lZCwgRW1iZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZQotICAgICAgICAg
ICAgICAgICAgICBhbiBhcHByb3ByaWF0ZSBjb250cm9sbGVyIGZvciB0aGUgbW9kZWwuCi0KLSAg
ICAgICAgICAgICAgICAgICAgKiBpZiB0aGUgbW9kZWwgaXMgYW4gYEVtYmVyLkFycmF5YCAoaW5j
bHVkaW5nIHJlY29yZCBhcnJheXMgZnJvbSBFbWJlcgotICAgICAgICAgICAgICAgICAgICAgIERh
dGEpLCB0aGUgY29udHJvbGxlciBpcyBhbiBgRW1iZXIuQXJyYXlDb250cm9sbGVyYC4KLSAgICAg
ICAgICAgICAgICAgICAgKiBvdGhlcndpc2UsIHRoZSBjb250cm9sbGVyIGlzIGFuIGBFbWJlci5P
YmplY3RDb250cm9sbGVyYC4KLQotICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBj
b25zaWRlciB0aGUgcm91dGVyOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAg
ICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3QnLCB7cGF0aDogJy9wb3N0cy86cG9zdF9pZCd9KTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIEZvciB0aGUgYHBvc3RgIHJvdXRlLCBhIGNvbnRyb2xsZXIgbmFtZWQg
YEFwcC5Qb3N0Q29udHJvbGxlcmAgd291bGQKLSAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBp
ZiBpdCBpcyBkZWZpbmVkLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgYW4gYEVtYmVyLk9iamVjdENv
bnRyb2xsZXJgCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIHdvdWxkIGJlIHVzZWQuCi0K
LSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpz
Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQo
ewotICAgICAgICAgICAgICAgICAgICAgIHNldHVwQ29udHJvbGxlcjogZnVuY3Rpb24oY29udHJv
bGxlciwgbW9kZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0KCdt
b2RlbCcsIG1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIHNldHVwQ29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NvbnRy
b2xsZXJ9IGNvbnRyb2xsZXIgaW5zdGFuY2UKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtP
YmplY3R9IG1vZGVsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0dXBDb250
cm9sbGVyOiBmdW5jdGlvbihjb250cm9sbGVyLCBjb250ZXh0LCB0cmFuc2l0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgJiYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2V0KGNvbnRyb2xsZXIsICdtb2RlbCcsIGNvbnRleHQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjb250cm9sbGVyIGZvciBhIHBhcnRpY3VsYXIg
cm91dGUgb3IgbmFtZS4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY29udHJvbGxlciBpbnN0
YW5jZSBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGNyZWF0ZWQsIGVpdGhlciB0aHJvdWdoIGVudGVy
aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHJvdXRlIG9yIHVzaW5nIGBn
ZW5lcmF0ZUNvbnRyb2xsZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAg
ICAgICAgICAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAg
ICAgICAgICAgICAgICAgIHNldHVwQ29udHJvbGxlcjogZnVuY3Rpb24oY29udHJvbGxlciwgcG9z
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoY29udHJvbGxlciwgcG9z
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJGb3IoJ3Bvc3RzJyku
c2V0KCdjdXJyZW50UG9zdCcsIHBvc3QpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgY29udHJvbGxlckZvcgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3IgY29udHJvbGxlcgotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db250cm9sbGVyfQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRyb2xsZXJGb3I6IGZ1bmN0aW9uKG5hbWUsIF9za2lw
QXNzZXJ0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVy
OwotICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IGNvbnRhaW5lci5sb29rdXAoJ3JvdXRlOicg
KyBuYW1lKTsKLSAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlcjsKLQotICAgICAgICAgICAg
ICAgIGlmIChyb3V0ZSAmJiByb3V0ZS5jb250cm9sbGVyTmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICBuYW1lID0gcm91dGUuY29udHJvbGxlck5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY29udHJvbGxlciA9IGNvbnRhaW5lci5sb29rdXAoJ2NvbnRyb2xsZXI6
JyArIG5hbWUpOwotCi0gICAgICAgICAgICAgICAgLy8gTk9URTogV2UncmUgc3BlY2lmaWNhbGx5
IGNoZWNraW5nIHRoYXQgc2tpcEFzc2VydCBpcyB0cnVlLCBiZWNhdXNlIGFjY29yZGluZwotICAg
ICAgICAgICAgICAgIC8vICAgdG8gdGhlIG9sZCBBUEkgdGhlIHNlY29uZCBwYXJhbWV0ZXIgd2Fz
IG1vZGVsLiBXZSBkbyBub3Qgd2FudCBwZW9wbGUgd2hvCi0gICAgICAgICAgICAgICAgLy8gICBw
YXNzZWQgYSBtb2RlbCB0byBza2lwIHRoZSBhc3NlcnRpb24uCi0gICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJUaGUgY29udHJvbGxlciBuYW1lZCAnIiArIG5hbWUgKyAiJyBjb3VsZCBub3Qg
YmUgZm91bmQuIE1ha2Ugc3VyZSAiICsKLSAgICAgICAgICAgICAgICAidGhhdCB0aGlzIHJvdXRl
IGV4aXN0cyBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbnRlcmVkIGF0IGxlYXN0ICIgKwotICAgICAg
ICAgICAgICAgICJvbmNlLiBJZiB5b3UgYXJlIGFjY2Vzc2luZyBhIGNvbnRyb2xsZXIgbm90IGFz
c29jaWF0ZWQgd2l0aCBhICIgKwotICAgICAgICAgICAgICAgICJyb3V0ZSwgbWFrZSBzdXJlIHRo
ZSBjb250cm9sbGVyIGNsYXNzIGlzIGV4cGxpY2l0bHkgZGVmaW5lZC4iLAotICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIgfHwgX3NraXBBc3NlcnQgPT09IHRydWUpOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnRyb2xsZXI7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVzIGEgY29udHJvbGxlciBmb3IgYSByb3V0ZS4K
LQotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgb3B0aW9uYWwgbW9kZWwgaXMgcGFzc2VkIHRo
ZW4gdGhlIGNvbnRyb2xsZXIgdHlwZSBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksCi0gICAg
ICAgICAgICAgICAgICAgIGUuZy4sIGFuIEFycmF5Q29udHJvbGxlciBmb3IgYXJyYXlzLgotCi0g
ICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwot
ICAgICAgICAgICAgICAgICAgICBBcHAuUG9zdFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9uKGNvbnRyb2xs
ZXIsIHBvc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKGNvbnRyb2xs
ZXIsIHBvc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbnRyb2xs
ZXIoJ3Bvc3RzJywgcG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBnZW5lcmF0ZUNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IG1vZGVsIHRoZSBtb2RlbCB0byBpbmZlciB0aGUgdHlwZSBv
ZiB0aGUgY29udHJvbGxlciAob3B0aW9uYWwpCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZ2VuZXJhdGVDb250cm9sbGVyOiBmdW5jdGlvbihuYW1lLCBtb2RlbCkgewotICAgICAg
ICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjsKLQotICAgICAgICAgICAg
ICAgIG1vZGVsID0gbW9kZWwgfHwgdGhpcy5tb2RlbEZvcihuYW1lKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZUNvbnRyb2xsZXIoY29udGFpbmVyLCBuYW1lLCBtb2RlbCk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0
dXJucyB0aGUgbW9kZWwgb2YgYSBwYXJlbnQgKG9yIGFueSBhbmNlc3Rvcikgcm91dGUKLSAgICAg
ICAgICAgICAgICAgICAgaW4gYSByb3V0ZSBoaWVyYXJjaHkuICBEdXJpbmcgYSB0cmFuc2l0aW9u
LCBhbGwgcm91dGVzCi0gICAgICAgICAgICAgICAgICAgIG11c3QgcmVzb2x2ZSBhIG1vZGVsIG9i
amVjdCwgYW5kIGlmIGEgcm91dGUKLSAgICAgICAgICAgICAgICAgICAgbmVlZHMgYWNjZXNzIHRv
IGEgcGFyZW50IHJvdXRlJ3MgbW9kZWwgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZSBhIG1vZGVsIChvciBqdXN0IHJldXNlIHRoZSBtb2RlbCBmcm9tIGEgcGFyZW50KSwK
LSAgICAgICAgICAgICAgICAgICAgaXQgY2FuIGNhbGwgYHRoaXMubW9kZWxGb3IodGhlTmFtZU9m
UGFyZW50Um91dGUpYCB0bwotICAgICAgICAgICAgICAgICAgICByZXRyaWV2ZSBpdC4KLQotICAg
ICAgICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAg
ICAgICAgICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCdwb3N0JywgeyBwYXRoOiAnL3Bvc3QvOnBvc3Rf
aWQnIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVz
b3VyY2UoJ2NvbW1lbnRzJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkNvbW1lbnRzUm91dGUg
PSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJNb2Rl
bDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3Bv
c3QnLCB0aGlzLm1vZGVsRm9yKCdwb3N0JykpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBtb2RlbEZvcgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7T2JqZWN0fSB0aGUgbW9kZWwgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgbW9kZWxGb3I6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcm91dGUgPSB0aGlzLmNvbnRhaW5lci5sb29rdXAoJ3JvdXRlOicgKyBuYW1lKTsKLSAg
ICAgICAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHRoaXMucm91dGVyID8gdGhpcy5yb3V0ZXIu
cm91dGVyLmFjdGl2ZVRyYW5zaXRpb24gOiBudWxsOwotCi0gICAgICAgICAgICAgICAgLy8gSWYg
d2UgYXJlIG1pZC10cmFuc2l0aW9uLCB3ZSB3YW50IHRvIHRyeSBhbmQgbG9vayB1cAotICAgICAg
ICAgICAgICAgIC8vIHJlc29sdmVkIHBhcmVudCBjb250ZXh0cyBvbiB0aGUgY3VycmVudCB0cmFu
c2l0aW9uRXZlbnQuCi0gICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG1vZGVsTG9va3VwTmFtZSA9IChyb3V0ZSAmJiByb3V0ZS5yb3V0ZU5h
bWUpIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnJlc29sdmVk
TW9kZWxzLmhhc093blByb3BlcnR5KG1vZGVsTG9va3VwTmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uLnJlc29sdmVkTW9kZWxzW21vZGVsTG9va3VwTmFt
ZV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcm91dGUgJiYgcm91dGUuY3VycmVudE1vZGVsOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEEgaG9vayB5b3UgY2Fu
IHVzZSB0byByZW5kZXIgdGhlIHRlbXBsYXRlIGZvciB0aGUgY3VycmVudCByb3V0ZS4KLQotICAg
ICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgY29udHJvbGxl
ciBmb3IgdGhlIGN1cnJlbnQgcm91dGUgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICBtb2Rl
bCBzdXBwbGllZCBieSB0aGUgYG1vZGVsYCBob29rLiBCeSBkZWZhdWx0LCBpdCByZW5kZXJzIHRo
ZSByb3V0ZSdzCi0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLCBjb25maWd1cmVkIHdpdGgg
dGhlIGNvbnRyb2xsZXIgZm9yIHRoZSByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBUaGlz
IG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBzZXQgdXAgYW5kIHJlbmRlciBhZGRpdGlvbmFs
IG9yCi0gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIHRlbXBsYXRlcy4KLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUG9zdHNSb3V0ZSA9
IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGVtcGxh
dGU6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIG1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZmF2Q29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlckZvcignZmF2b3JpdGVQb3N0Jyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgYGZhdm9yaXRlUG9zdGAg
dGVtcGxhdGUgaW50bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG91dGxldCBgcG9z
dHNgLCBhbmQgZGlzcGxheSB0aGUgYGZhdm9yaXRlUG9zdGAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNvbnRyb2xsZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcign
ZmF2b3JpdGVQb3N0JywgewotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsZXQ6ICdwb3N0
cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IGZhdkNvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgcmVuZGVyVGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtPYmplY3R9IGNvbnRyb2xsZXIgdGhlIHJvdXRlJ3MgY29udHJvbGxlcgotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gbW9kZWwgdGhlIHJvdXRlJ3MgbW9kZWwKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW5kZXJUZW1wbGF0ZTogZnVuY3Rpb24o
Y29udHJvbGxlciwgbW9kZWwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcigpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIGByZW5k
ZXJgIGlzIHVzZWQgdG8gcmVuZGVyIGEgdGVtcGxhdGUgaW50byBhIHJlZ2lvbiBvZiBhbm90aGVy
IHRlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAgIChpbmRpY2F0ZWQgYnkgYW4gYHt7b3V0bGV0
fX1gKS4gYHJlbmRlcmAgaXMgdXNlZCBib3RoIGR1cmluZyB0aGUgZW50cnkKLSAgICAgICAgICAg
ICAgICAgICAgcGhhc2Ugb2Ygcm91dGluZyAodmlhIHRoZSBgcmVuZGVyVGVtcGxhdGVgIGhvb2sp
IGFuZCBsYXRlciBpbiByZXNwb25zZSB0bwotICAgICAgICAgICAgICAgICAgICB1c2VyIGludGVy
YWN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9s
bG93aW5nIG1pbmltYWwgcm91dGVyIGFuZCB0ZW1wbGF0ZXM6Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCdwaG90b3MnKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgICAgICAgPCEtLSBhcHBsaWNhdGlvbi5o
YnMgLS0+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3NvbWV0aGluZy1pbi10aGUt
YXBwLWhicyc+Ci0gICAgICAgICAgICAgICAgICAgICAge3tvdXRsZXQgImFuT3V0bGV0TmFtZSJ9
fQotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICAgICAgICA8
IS0tIHBob3Rvcy5oYnMgLS0+Ci0gICAgICAgICAgICAgICAgICAgIDxoMT5QaG90b3M8L2gxPgot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJl
bmRlciBgcGhvdG9zLmhic2AgaW50byB0aGUgYCJhbk91dGxldE5hbWUiYCBvdXRsZXQgb2YKLSAg
ICAgICAgICAgICAgICAgICAgYGFwcGxpY2F0aW9uLmhic2AgYnkgY2FsbGluZyBgcmVuZGVyYDoK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICAvLyBwb3N0
cyByb3V0ZQotICAgICAgICAgICAgICAgICAgICBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbigpewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZW5kZXIoJ3Bvc3RzJywgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRvOiAnYXBwbGljYXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRs
ZXQ6ICdhbk91dGxldE5hbWUnCi0gICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIGByZW5kZXJgIGFkZGl0aW9uYWxseSBhbGxv
d3MgeW91IHRvIHN1cHBseSB3aGljaCBgdmlld2AsIGBjb250cm9sbGVyYCwgYW5kCi0gICAgICAg
ICAgICAgICAgICAgIGBtb2RlbGAgb2JqZWN0cyBzaG91bGQgYmUgbG9hZGVkIGFuZCBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlbmRlcmVkIHRlbXBsYXRlLgotCi0KLSAgICAgICAgICAgICAgICAgICAg
YGBganMKLSAgICAgICAgICAgICAgICAgICAgLy8gcG9zdHMgcm91dGUKLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICByZW5kZXJU
ZW1wbGF0ZTogZnVuY3Rpb24oY29udHJvbGxlciwgbW9kZWwpewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZW5kZXIoJ3Bvc3RzJywgeyAgICAvLyB0aGUgdGVtcGxhdGUgdG8gcmVuZGVy
LCByZWZlcmVuY2VkIGJ5IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50bzogJ2Fw
cGxpY2F0aW9uJywgICAgLy8gdGhlIHRlbXBsYXRlIHRvIHJlbmRlciBpbnRvLCByZWZlcmVuY2Vk
IGJ5IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0OiAnYW5PdXRsZXROYW1l
JywgLy8gdGhlIG91dGxldCBpbnNpZGUgYG9wdGlvbnMudGVtcGxhdGVgIHRvIHJlbmRlciBpbnRv
LgotICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3OiAnYVZpZXdOYW1lJywgICAgICAvLyB0
aGUgdmlldyB0byB1c2UgZm9yIHRoaXMgdGVtcGxhdGUsIHJlZmVyZW5jZWQgYnkgbmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiAnc29tZUNvbnRyb2xsZXJOYW1lJywg
Ly8gdGhlIGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGlzIHRlbXBsYXRlLCByZWZlcmVuY2VkIGJ5
IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1vZGVsICAgICAgICAgICAg
Ly8gdGhlIG1vZGVsIHRvIHNldCBvbiBgb3B0aW9ucy5jb250cm9sbGVyYC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
VGhlIHN0cmluZyB2YWx1ZXMgcHJvdmlkZWQgZm9yIHRoZSB0ZW1wbGF0ZSBuYW1lLCB2aWV3LCBh
bmQgY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICB3aWxsIGV2ZW50dWFsbHkgcGFzcyB0
aHJvdWdoIHRvIHRoZSByZXNvbHZlciBmb3IgbG9va3VwLiBTZWUKLSAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuUmVzb2x2ZXIgZm9yIGhvdyB0aGVzZSBhcmUgbWFwcGVkIHRvIEphdmFTY3JpcHQg
b2JqZWN0cyBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIE5vdCBhbGwgb3B0aW9ucyBuZWVkIHRvIGJlIHBhc3NlZCB0byBgcmVu
ZGVyYC4gRGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSB1c2VkCi0gICAgICAgICAgICAgICAgICAgIGJh
c2VkIG9uIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBzcGVjaWZpZWQgaW4gdGhlIHJvdXRlciBvciB0
aGUgUm91dGUncwotICAgICAgICAgICAgICAgICAgICBgY29udHJvbGxlck5hbWVgLCBgdmlld05h
bWVgIGFuZCBhbmQgYHRlbXBsYXRlTmFtZWAgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICAg
ICAgICBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAg
ICAgICAgICAgICAvLyByb3V0ZXIKLSAgICAgICAgICAgICAgICAgICAgUm91dGVyLm1hcChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCdpbmRleCcpOwotICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3QnLCB7cGF0aDogJy9wb3N0cy86
cG9zdF9pZCd9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIC8v
IHBvc3Qgcm91dGUKLSAgICAgICAgICAgICAgICAgICAgUG9zdFJvdXRlID0gQXBwLlJvdXRlLmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGVtcGxhdGU6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsgLy8gYWxsIGRlZmF1bHRz
IGFwcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUg
b2YgdGhlIGBQb3N0Um91dGVgLCBkZWZpbmVkIGJ5IHRoZSByb3V0ZXIsIGlzIGBwb3N0YC4KLQot
ICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGVxdWl2YWxlbnQgZGVmYXVsdCBvcHRp
b25zIHdpbGwgYmUgYXBwbGllZCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIHRoZSBSb3V0ZSBj
YWxscyBgcmVuZGVyYDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcigncG9zdCcsIHsgIC8v
IHRoZSB0ZW1wbGF0ZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCAncG9zdCcgUm91dGUKLSAgICAgICAg
ICAgICAgICAgICAgICBpbnRvOiAnYXBwbGljYXRpb24nLCAvLyB0aGUgcGFyZW50IHJvdXRlIHRv
ICdwb3N0JyBSb3V0ZQotICAgICAgICAgICAgICAgICAgICAgIG91dGxldDogJ21haW4nLCAgICAg
IC8vIHt7b3V0bGV0fX0gYW5kIHt7b3V0bGV0ICdtYWluJyBhcmUgc3lub255bW91c319LAotICAg
ICAgICAgICAgICAgICAgICAgIHZpZXc6ICdwb3N0JywgICAgICAgIC8vIHRoZSB2aWV3IGFzc29j
aWF0ZWQgd2l0aCB0aGUgJ3Bvc3QnIFJvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgY29udHJv
bGxlcjogJ3Bvc3QnLCAgLy8gdGhlIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSAncG9z
dCcgUm91dGUKLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCB0aGUgY29udHJvbGxlcidzIGBtb2Rl
bGAgd2lsbCBiZSB0aGUgcm91dGUncyBtb2RlbCwgc28gaXQgZG9lcyBub3QKLSAgICAgICAgICAg
ICAgICAgICAgbmVlZCB0byBiZSBwYXNzZWQgdW5sZXNzIHlvdSB3aXNoIHRvIGNoYW5nZSB3aGlj
aCBtb2RlbCBpcyBiZWluZyB1c2VkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVu
ZGVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9m
IHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IG9wdGlvbnMgdGhlIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IG9wdGlvbnMuaW50byB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyIGludG8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIGJ5IG5hbWUuIERlZmF1bHRzIHRv
IHRoZSBwYXJlbnQgdGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IG9wdGlvbnMub3V0bGV0IHRoZSBvdXRsZXQgaW5zaWRlIGBvcHRpb25zLnRlbXBsYXRlYCB0byBy
ZW5kZXIgaW50by4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRz
IHRvICdtYWluJwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5j
b250cm9sbGVyIHRoZSBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhpcyB0ZW1wbGF0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgYnkgbmFtZS4gRGVmYXVs
dHMgdG8gdGhlIFJvdXRlJ3MgcGFpcmVkIGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMubW9kZWwgdGhlIG1vZGVsIG9iamVjdCB0byBzZXQgb24g
YG9wdGlvbnMuY29udHJvbGxlcmAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERlZmF1bHRzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIFJvdXRlJ3MgbW9kZWwgaG9vawot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24obmFtZSwg
b3B0aW9ucykgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIG5hbWUgaW4gdGhl
IGdpdmVuIGFyZ3VtZW50cyBpcyB1bmRlZmluZWQiLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/ICFp
c05vbmUoYXJndW1lbnRzWzBdKSA6IHRydWUpOwotCi0gICAgICAgICAgICAgICAgdmFyIG5hbWVQ
YXNzZWQgPSB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgISFuYW1lOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JyAmJiAhb3B0aW9ucykgewotICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zID0gbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHRoaXMucm91dGVOYW1lOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgICAgICAgICAgICAgIG9wdGlvbnMubmFtZVBhc3Nl
ZCA9IG5hbWVQYXNzZWQ7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVOYW1lOwotCi0g
ICAgICAgICAgICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5h
bWUucmVwbGFjZSgvXC8vZywgJy4nKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1l
ID0gbmFtZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBu
YW1lID0gdGhpcy5yb3V0ZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZSA9
IHRoaXMudGVtcGxhdGVOYW1lIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIHZpZXdOYW1lID0gb3B0aW9ucy52aWV3IHx8IG5hbWVQYXNzZWQgJiYgbmFt
ZSB8fCB0aGlzLnZpZXdOYW1lIHx8IG5hbWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29udGFp
bmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBjb250YWlu
ZXIubG9va3VwKCd2aWV3OicgKyB2aWV3TmFtZSk7Ci0gICAgICAgICAgICAgICAgdmFyIHRlbXBs
YXRlID0gdmlldyA/IHZpZXcuZ2V0KCd0ZW1wbGF0ZScpIDogbnVsbDsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGVtcGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBjb250
YWluZXIubG9va3VwKCd0ZW1wbGF0ZTonICsgdGVtcGxhdGVOYW1lKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcgJiYgIXRlbXBsYXRlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ291bGQgbm90IGZpbmQgXCIiICsgbmFtZSArICJc
IiB0ZW1wbGF0ZSBvciB2aWV3LiIsIEVtYmVyLmlzRW1wdHkoYXJndW1lbnRzWzBdKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcy5yb3V0ZXIsICduYW1lc3BhY2UuTE9HX1ZJRVdf
TE9PS1VQUycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIuaW5mbygi
Q291bGQgbm90IGZpbmQgXCIiICsgbmFtZSArICJcIiB0ZW1wbGF0ZSBvciB2aWV3LiBOb3RoaW5n
IHdpbGwgYmUgcmVuZGVyZWQiLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbE5h
bWU6ICd0ZW1wbGF0ZTonICsgbmFtZSAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvcHRpb25zID0gbm9ybWFsaXplT3B0aW9ucyh0
aGlzLCBuYW1lLCB0ZW1wbGF0ZSwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgdmlldyA9IHNl
dHVwVmlldyh2aWV3LCBjb250YWluZXIsIG9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgaWYg
KG9wdGlvbnMub3V0bGV0ID09PSAnbWFpbicpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5s
YXN0UmVuZGVyZWRUZW1wbGF0ZSA9IG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgYXBwZW5kVmlldyh0aGlzLCB2aWV3LCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEaXNjb25uZWN0cyBhIHZp
ZXcgdGhhdCBoYXMgYmVlbiByZW5kZXJlZCBpbnRvIGFuIG91dGxldC4KLQotICAgICAgICAgICAg
ICAgICAgICBZb3UgbWF5IHBhc3MgYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMg
dG8gYGRpc2Nvbm5lY3RPdXRsZXRgOgotCi0gICAgICAgICAgICAgICAgICAgICogYG91dGxldGA6
IHRoZSBuYW1lIG9mIHRoZSBvdXRsZXQgdG8gY2xlYXIgKGRlZmF1bHQ6ICdtYWluJykKLSAgICAg
ICAgICAgICAgICAgICAgKiBgcGFyZW50Vmlld2A6IHRoZSBuYW1lIG9mIHRoZSB2aWV3IGNvbnRh
aW5pbmcgdGhlIG91dGxldCB0byBjbGVhcgotICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVs
dDogdGhlIHZpZXcgcmVuZGVyZWQgYnkgdGhlIHBhcmVudCByb3V0ZSkKLQotICAgICAgICAgICAg
ICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAg
ICAgICAgICAgIEFwcC5BcHBsaWNhdGlvblJvdXRlID0gQXBwLlJvdXRlLmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgc2hv
d01vZGFsOiBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5y
ZW5kZXIoZXZ0Lm1vZGFsTmFtZSwgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxl
dDogJ21vZGFsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvOiAnYXBwbGljYXRp
b24nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVNb2RhbDogZnVuY3Rpb24oZXZ0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdE91dGxldCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0OiAnbW9kYWwnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFZpZXc6ICdhcHBsaWNhdGlvbicKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwYXNzIHRoZSBg
b3V0bGV0YCBuYW1lIGRpcmVjdGx5IGFzIGEgc3RyaW5nLgotCi0gICAgICAgICAgICAgICAgICAg
IEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAg
ICAgaGlkZU1vZGFsOiBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmRpc2Nvbm5lY3RPdXRsZXQoJ21vZGFsJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkaXNjb25u
ZWN0T3V0bGV0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gb3B0
aW9ucyB0aGUgb3B0aW9ucyBoYXNoIG9yIG91dGxldCBuYW1lCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZGlzY29ubmVjdE91dGxldDogZnVuY3Rpb24ob3B0aW9ucykgewotICAg
ICAgICAgICAgICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG91dGxldE5hbWUgPSBvcHRpb25zOwotICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zID0ge307Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
b3V0bGV0ID0gb3V0bGV0TmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
b3B0aW9ucy5wYXJlbnRWaWV3ID0gb3B0aW9ucy5wYXJlbnRWaWV3ID8gb3B0aW9ucy5wYXJlbnRW
aWV3LnJlcGxhY2UoL1wvL2csICcuJykgOiBwYXJlbnRUZW1wbGF0ZSh0aGlzKTsKLSAgICAgICAg
ICAgICAgICBvcHRpb25zLm91dGxldCA9IG9wdGlvbnMub3V0bGV0IHx8ICdtYWluJzsKLQotICAg
ICAgICAgICAgICAgIHZhciBwYXJlbnRWaWV3ID0gdGhpcy5yb3V0ZXIuX2xvb2t1cEFjdGl2ZVZp
ZXcob3B0aW9ucy5wYXJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50Vmlldykg
ewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRWaWV3LmRpc2Nvbm5lY3RPdXRsZXQob3B0aW9u
cy5vdXRsZXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRlYXJk
b3duVmlld3MoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdGVhcmRv
d25WaWV3cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRlYXJkb3duVmlld3M6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIFRlYXIgZG93biB0aGUgdG9wIGxldmVs
IHZpZXcKLSAgICAgICAgICAgICAgICBpZiAodGhpcy50ZWFyZG93blRvcExldmVsVmlldykgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRlYXJkb3duVG9wTGV2ZWxWaWV3KCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGVhciBkb3duIGFueSBvdXRsZXRzIHJl
bmRlcmVkIHdpdGggJ2ludG8nCi0gICAgICAgICAgICAgICAgdmFyIHRlYXJkb3duT3V0bGV0Vmll
d3MgPSB0aGlzLnRlYXJkb3duT3V0bGV0Vmlld3MgfHwgW107Ci0gICAgICAgICAgICAgICAgZm9y
RWFjaCh0ZWFyZG93bk91dGxldFZpZXdzLCBmdW5jdGlvbih0ZWFyZG93bk91dGxldFZpZXcpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGVhcmRvd25PdXRsZXRWaWV3KCk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50ZWFyZG93blRvcExldmVsVmll
dzsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50ZWFyZG93bk91dGxldFZpZXdzOwotICAg
ICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxhc3RSZW5kZXJlZFRlbXBsYXRlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgZGVmYXVsdFFQTWV0YSA9IHsKLSAgICAg
ICAgICAgIHFwczogW10sCi0gICAgICAgICAgICBtYXA6IHt9LAotICAgICAgICAgICAgc3RhdGVz
OiB7fQotICAgICAgICB9OwotCi0KLSAgICAgICAgUm91dGUucmVvcGVuKHsKLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gaGFzaCBmb3IgdGhpcyBy
b3V0ZSdzIHF1ZXJ5UGFyYW1zLiBUaGUgcG9zc2libGUKLSAgICAgICAgICAgICAgICAgICAgICBj
b25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlZmF1bHRzIGFyZSBhcyBmb2xsb3dzCi0g
ICAgICAgICAgICAgICAgICAgICAgKGFzc3VtaW5nIGEgcXVlcnkgcGFyYW0gd2hvc2UgVVJMIGtl
eSBpcyBgcGFnZWApOgotCi0gICAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAg
ICAgICAgICAgICBxdWVyeVBhcmFtczogewotICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTog
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBjb250cm9sbGVyIHF1
ZXJ5IHBhcmFtIHByb3BlcnRpZXMgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y2F1c2UgYSBmdWxsIHRyYW5zaXRpb24gd2hlbiB0aGV5IGFyZSBjaGFuZ2VkLCBidXQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcmF0aGVyIG9ubHkgY2F1c2UgdGhlIFVSTCB0byB1cGRh
dGUuIFNldHRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHJlZnJlc2hNb2RlbGAg
dG8gdHJ1ZSB3aWxsIGNhdXNlIGFuICJpbi1wbGFjZSIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHJhbnNpdGlvbiB0byBvY2N1ciwgd2hlcmVieSB0aGUgbW9kZWwgaG9va3MgZm9yCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcm91dGUgKGFuZCBhbnkgY2hpbGQgcm91
dGVzKSB3aWxsIHJlLWZpcmUsIGFsbG93aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHlvdSB0byByZWxvYWQgbW9kZWxzIChlLmcuLCBmcm9tIHRoZSBzZXJ2ZXIpIHVzaW5nIHRoZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkIHF1ZXJ5IHBhcmFtIHZhbHVlcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaE1vZGVsOiBmYWxzZSwKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBjaGFuZ2VzIHRvIGNvbnRyb2xsZXIg
cXVlcnkgcGFyYW0gcHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVz
ZSB0aGUgVVJMIHRvIHVwZGF0ZSB2aWEgYHB1c2hTdGF0ZWAsIHdoaWNoIG1lYW5zIGFuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZW0gd2lsbCBiZSBhZGRlZCB0byB0aGUgYnJvd3Nl
cidzIGhpc3RvcnksIGFsbG93aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHlvdSB0
byB1c2UgdGhlIGJhY2sgYnV0dG9uIHRvIHJlc3RvcmUgdGhlIGFwcCB0byB0aGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgc3RhdGUgYmVmb3JlIHRoZSBxdWVyeSBwYXJh
bSBwcm9wZXJ0eSB3YXMgY2hhbmdlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0
dGluZyBgcmVwbGFjZWAgdG8gdHJ1ZSB3aWxsIHVzZSBgcmVwbGFjZVN0YXRlYCAob3IgaXRzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc2ggbG9jYXRpb24gZXF1aXZhbGVudCksIHdo
aWNoIGNhdXNlcyBubyBicm93c2VyIGhpc3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaXRlbSB0byBiZSBhZGRlZC4gVGhpcyBvcHRpb25zIG5hbWUgYW5kIGRlZmF1bHQgdmFsdWUg
YXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIGFzIHRoZSBgbGluay10
b2AgaGVscGVyJ3MgYHJlcGxhY2VgIG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZTogZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgcXVlcnlQYXJhbXMKLSAgICAgICAgICAgICAgICAgICAgICBAZm9yIEVt
YmVyLlJvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgQHR5cGUgSGFzaAotICAgICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHt9LAotCi0gICAgICAgICAgICBf
cXA6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVy
TmFtZSA9IHRoaXMuY29udHJvbGxlck5hbWUgfHwgdGhpcy5yb3V0ZU5hbWU7Ci0gICAgICAgICAg
ICAgICAgdmFyIGZ1bGxOYW1lID0gdGhpcy5jb250YWluZXIubm9ybWFsaXplKCdjb250cm9sbGVy
OicgKyBjb250cm9sbGVyTmFtZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJDbGFz
cyA9IHRoaXMuY29udGFpbmVyLmxvb2t1cEZhY3RvcnkoZnVsbE5hbWUpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFjb250cm9sbGVyQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRlZmF1bHRRUE1ldGE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFy
IGNvbnRyb2xsZXJQcm90byA9IGNvbnRyb2xsZXJDbGFzcy5wcm90bygpOwotICAgICAgICAgICAg
ICAgIHZhciBxcFByb3BzID0gZ2V0KGNvbnRyb2xsZXJQcm90bywgJ19ub3JtYWxpemVkUXVlcnlQ
YXJhbXMnKTsKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGVNZXRhID0gZ2V0KGNvbnRyb2xsZXJQ
cm90bywgJ19jYWNoZU1ldGEnKTsKLQotICAgICAgICAgICAgICAgIHZhciBxcHMgPSBbXSwgbWFw
ID0ge30sIHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGlu
IHFwUHJvcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFxcFByb3BzLmhhc093blByb3Bl
cnR5KHByb3BOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHFwUHJv
cHNbcHJvcE5hbWVdLAotICAgICAgICAgICAgICAgICAgICB1cmxLZXkgPSBkZXNjLmFzIHx8IHRo
aXMuc2VyaWFsaXplUXVlcnlQYXJhbUtleShwcm9wTmFtZSksCi0gICAgICAgICAgICAgICAgICAg
IGRlZmF1bHRWYWx1ZSA9IGdldChjb250cm9sbGVyUHJvdG8sIHByb3BOYW1lKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBFbWJlci5BKGRlZmF1bHRWYWx1ZS5zbGljZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0g
dHlwZU9mKGRlZmF1bHRWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZVNl
cmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0oZGVmYXVsdFZhbHVlLCB1cmxLZXks
IHR5cGUpLAotICAgICAgICAgICAgICAgICAgICBmcHJvcCA9IGNvbnRyb2xsZXJOYW1lICsgJzon
ICsgcHJvcE5hbWUsCi0gICAgICAgICAgICAgICAgICAgIHFwID0gewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmOiBkZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZGVm
OiBkZWZhdWx0VmFsdWVTZXJpYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybEtleTogdXJsS2V5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcDogcHJvcE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBm
cHJvcDogZnByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHJsOiBjb250cm9sbGVyTmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNQcm90bzogY29udHJvbGxlclByb3RvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3ZhbHVlOiBkZWZhdWx0VmFsdWVTZXJpYWxpemVkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FjaGVUeXBlOiBkZXNjLnNjb3BlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGU6IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZU1l
dGE6IGNhY2hlTWV0YVtwcm9wTmFtZV0KLSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgICAgICAgICBtYXBbcHJvcE5hbWVdID0gbWFwW3VybEtleV0gPSBtYXBbZnByb3BdID0g
cXA7Ci0gICAgICAgICAgICAgICAgICAgIHFwcy5wdXNoKHFwKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBxcHM6IHFw
cywKLSAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCi0gICAgICAgICAgICAgICAgICAgIHN0
YXRlczogewotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmdW5jdGlvbihjb250cm9s
bGVyLCBwcm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Fj
dGl2ZVFQQ2hhbmdlZChjb250cm9sbGVyLCBtYXBbcHJvcF0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93T3ZlcnJpZGVzOiBmdW5jdGlv
bihjb250cm9sbGVyLCBwcm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3VwZGF0aW5nUVBDaGFuZ2VkKGNvbnRyb2xsZXIsIG1hcFtwcm9wXSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmdLZXlz
OiBmdW5jdGlvbihjb250cm9sbGVyLCBwcm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3VwZGF0ZVNlcmlhbGl6ZWRRUFZhbHVlKGNvbnRyb2xsZXIsIG1hcFtw
cm9wXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9uYW1l
czogbnVsbCwKLSAgICAgICAgICAgIF9zdGFzaE5hbWVzOiBmdW5jdGlvbihfaGFuZGxlckluZm8s
IGR5bmFtaWNQYXJlbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBfaGFu
ZGxlckluZm87Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX25hbWVzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFy
IG5hbWVzID0gdGhpcy5fbmFtZXMgPSBoYW5kbGVySW5mby5fbmFtZXM7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIW5hbWVzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVySW5m
byA9IGR5bmFtaWNQYXJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVzID0gaGFuZGxlcklu
Zm8gJiYgaGFuZGxlckluZm8uX25hbWVzIHx8IFtdOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBxcHMgPSBnZXQodGhpcywgJ19xcC5xcHMnKTsKLSAgICAgICAgICAg
ICAgICB2YXIgbGVuID0gcXBzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIHZhciBuYW1lUGF0
aHMgPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBh
ID0gMCwgbmxlbiA9IG5hbWVzLmxlbmd0aDsgYSA8IG5sZW47ICsrYSkgewotICAgICAgICAgICAg
ICAgICAgICBuYW1lUGF0aHNbYV0gPSBoYW5kbGVySW5mby5uYW1lICsgJy4nICsgbmFtZXNbYV07
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcXAgPSBxcHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjYWNoZU1ldGEgPSBxcC5jYWNoZU1ldGE7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjYWNoZU1ldGEuc2NvcGUgPT09ICdtb2RlbCcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlTWV0YS5wYXJ0cyA9IG5hbWVQYXRoczsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYWNoZU1ldGEucHJlZml4ID0gcXAuY3RybDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfdXBkYXRl
U2VyaWFsaXplZFFQVmFsdWU6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHFwKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gZ2V0KGNvbnRyb2xsZXIsIHFwLnByb3ApOwotICAgICAgICAgICAg
ICAgIHFwLnN2YWx1ZSA9IHRoaXMuc2VyaWFsaXplUXVlcnlQYXJhbSh2YWx1ZSwgcXAudXJsS2V5
LCBxcC50eXBlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9hY3RpdmVRUENoYW5n
ZWQ6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHFwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVl
ID0gZ2V0KGNvbnRyb2xsZXIsIHFwLnByb3ApOwotICAgICAgICAgICAgICAgIHRoaXMucm91dGVy
Ll9xdWV1ZWRRUENoYW5nZXNbcXAuZnByb3BdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcnVu
Lm9uY2UodGhpcywgdGhpcy5fZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8vX2luYWN0aXZlUVBDaGFuZ2VkOiBmdW5jdGlvbihjb250cm9s
bGVyLCBxcCkgewotICAgICAgICAgICAgLy99LAotCi0gICAgICAgICAgICBfdXBkYXRpbmdRUENo
YW5nZWQ6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHFwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJv
dXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAgICAgIGlmICghcm91dGVyLl9xcFVwZGF0
ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVyLl9xcFVwZGF0ZXMgPSB7fTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm91dGVyLl9xcFVwZGF0ZXNbcXAudXJsS2V5
XSA9IHRydWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBtZXJnZWRQcm9wZXJ0aWVz
OiBbJ3F1ZXJ5UGFyYW1zJ10sCi0KLSAgICAgICAgICAgIHBhcmFtc0ZvcjogZnVuY3Rpb24obmFt
ZSkgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IHRoaXMuY29udGFpbmVyLmxvb2t1cCgn
cm91dGU6JyArIG5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFyb3V0ZSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgdmFyIHRyYW5zaXRpb24gPSB0aGlzLnJvdXRlci5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlv
bjsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0cmFuc2l0aW9uID8gdHJhbnNpdGlvbi5z
dGF0ZSA6IHRoaXMucm91dGVyLnJvdXRlci5zdGF0ZTsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
YW1zID0ge307Ci0KLSAgICAgICAgICAgICAgICBtZXJnZShwYXJhbXMsIHN0YXRlLnBhcmFtc1tu
YW1lXSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmZ1bGxRdWVyeVBhcmFtcykgewot
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5mdWxsUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAg
ICAgICAgICAgICAgbWVyZ2Uoc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zLCBzdGF0ZS5xdWVyeVBhcmFt
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldFJvdXRlTmFtZSA9IHN0YXRlLmhh
bmRsZXJJbmZvc1tzdGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoLTFdLm5hbWU7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMucm91dGVyLl9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHRhcmdldFJvdXRl
TmFtZSwgc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgcXBNZXRhID0gZ2V0KHJvdXRlLCAnX3FwJyk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXFwTWV0YSkgewotICAgICAgICAgICAgICAgICAgICAvLyBObyBxdWVyeSBwYXJh
bXMgc3BlY2lmaWVkIG9uIHRoZSBjb250cm9sbGVyLgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENvcHkg
b3ZlciBhbGwgdGhlIHF1ZXJ5IHBhcmFtcyBmb3IgdGhpcyByb3V0ZS9jb250cm9sbGVyIGludG8g
cGFyYW1zIGhhc2guCi0gICAgICAgICAgICAgICAgLy8gVE9ETzogaXMgdGhpcyBjb3JyZWN0PyBJ
IHRoaW5rIHRoaXMgd29uJ3QgZG8gbW9kZWwgZGVwIHN0YXRlLgotICAgICAgICAgICAgICAgIHZh
ciBxcHMgPSBxcE1ldGEucXBzOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBxcHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUHV0
IGRlc2VyaWFsaXplZCBxcCBvbiBwYXJhbXMgaGFzaC4KLSAgICAgICAgICAgICAgICAgICAgdmFy
IHFwID0gcXBzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoIShxcC5wcm9wIGluIHBhcmFt
cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1txcC5wcm9wXSA9IHN0YXRlLmZ1
bGxRdWVyeVBhcmFtc1txcC5wcm9wXSB8fCBxcC5kZWY7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2VyaWFsaXplUXVlcnlQYXJhbUtleTogZnVuY3Rp
b24oY29udHJvbGxlclByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb250
cm9sbGVyUHJvcGVydHlOYW1lOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2VyaWFs
aXplUXVlcnlQYXJhbTogZnVuY3Rpb24odmFsdWUsIHVybEtleSwgZGVmYXVsdFZhbHVlVHlwZSkg
ewotICAgICAgICAgICAgICAgIC8vIHVybEtleSBpc24ndCB1c2VkIGhlcmUsIGJ1dCBhbnlvbmUg
b3ZlcnJpZGluZwotICAgICAgICAgICAgICAgIC8vIGNhbiB1c2UgaXQgdG8gcHJvdmlkZSBzZXJp
YWxpemF0aW9uIHNwZWNpZmljCi0gICAgICAgICAgICAgICAgLy8gdG8gYSBjZXJ0YWluIHF1ZXJ5
IHBhcmFtLgotICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVUeXBlID09PSAnYXJyYXkn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAnJyArIHZhbHVlOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVzZXJpYWxpemVRdWVyeVBhcmFtOiBmdW5jdGlv
bih2YWx1ZSwgdXJsS2V5LCBkZWZhdWx0VmFsdWVUeXBlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
dXJsS2V5IGlzbid0IHVzZWQgaGVyZSwgYnV0IGFueW9uZSBvdmVycmlkaW5nCi0gICAgICAgICAg
ICAgICAgLy8gY2FuIHVzZSBpdCB0byBwcm92aWRlIGRlc2VyaWFsaXphdGlvbiBzcGVjaWZpYwot
ICAgICAgICAgICAgICAgIC8vIHRvIGEgY2VydGFpbiBxdWVyeSBwYXJhbS4KLQotICAgICAgICAg
ICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdFZhbHVlVHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSAo
dGhlIGluaXRpYWwgdmFsdWUgYXNzaWduZWQgdG8gYQotICAgICAgICAgICAgICAgIC8vIGNvbnRy
b2xsZXIgcXVlcnkgcGFyYW0gcHJvcGVydHkpLCB0byBpbnRlbGxpZ2VudGx5IGRlc2VyaWFsaXpl
IGFuZCBjYXN0LgotICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWVUeXBlID09PSAnYm9v
bGVhbicpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PT0gJ3RydWUnKSA/
IHRydWUgOiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZVR5
cGUgPT09ICdudW1iZXInKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoTnVtYmVyKHZh
bHVlKSkudmFsdWVPZigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVl
VHlwZSA9PT0gJ2FycmF5JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuQShK
U09OLnBhcnNlKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgX2ZpcmVRdWVyeVBh
cmFtVHJhbnNpdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0
aW9uVG8oewotICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5yb3V0ZXIuX3F1
ZXVlZFFQQ2hhbmdlcyAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0aGlz
LnJvdXRlci5fcXVldWVkUVBDaGFuZ2VzID0ge307Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgICBBIGhvb2sgeW91IGNhbiB1c2UgdG8gcmVz
ZXQgY29udHJvbGxlciB2YWx1ZXMgZWl0aGVyIHdoZW4gdGhlIG1vZGVsCi0gICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlcyBvciB0aGUgcm91dGUgaXMgZXhpdGluZy4KLQotICAgICAgICAgICAg
ICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgICAgQXBwLkFydGljbGVzUm91dGUg
PSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q29udHJvbGxlcjogZnVuY3Rpb24gKGNvbnRy
b2xsZXIsIGlzRXhpdGluZywgdHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNFeGl0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxl
ci5zZXQoJ3BhZ2UnLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNldENvbnRy
b2xsZXIKLSAgICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NvbnRyb2xsZXJ9IGNvbnRyb2xs
ZXIgaW5zdGFuY2UKLSAgICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IGlzRXhp
dGluZwotICAgICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0cmFuc2l0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXNldENvbnRyb2xsZXI6IEVtYmVy
LksKLSAgICAgICAgfSk7Ci0KLQotICAgICAgICBmdW5jdGlvbiBwYXJlbnRSb3V0ZShyb3V0ZSkg
ewotICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9Gb3Iocm91dGUsIHJv
dXRlLnJvdXRlci5yb3V0ZXIuc3RhdGUuaGFuZGxlckluZm9zLCAtMSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlckluZm8gJiYgaGFuZGxlckluZm8uaGFuZGxlcjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGhhbmRsZXJJbmZvRm9yKHJvdXRlLCBoYW5kbGVySW5mb3MsIF9vZmZz
ZXQpIHsKLSAgICAgICAgICAgIGlmICghaGFuZGxlckluZm9zKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gX29mZnNl
dCB8fCAwLCBjdXJyZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVy
SW5mb3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IGhh
bmRsZXJJbmZvc1tpXS5oYW5kbGVyOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBy
b3V0ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlckluZm9zW2kgKyBvZmZz
ZXRdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHBhcmVudFRlbXBsYXRlKHJvdXRlKSB7Ci0gICAgICAgICAgICB2YXIgcGFy
ZW50ID0gcGFyZW50Um91dGUocm91dGUpLCB0ZW1wbGF0ZTsKLQotICAgICAgICAgICAgaWYgKCFw
YXJlbnQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0ZW1wbGF0ZSA9IHBhcmVudC5sYXN0UmVuZGVyZWRUZW1wbGF0ZSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcmVudFRlbXBsYXRlKHBhcmVudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVPcHRpb25zKHJvdXRlLCBu
YW1lLCB0ZW1wbGF0ZSwgb3B0aW9ucykgewotICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMg
fHwge307Ci0gICAgICAgICAgICBvcHRpb25zLmludG8gPSBvcHRpb25zLmludG8gPyBvcHRpb25z
LmludG8ucmVwbGFjZSgvXC8vZywgJy4nKSA6IHBhcmVudFRlbXBsYXRlKHJvdXRlKTsKLSAgICAg
ICAgICAgIG9wdGlvbnMub3V0bGV0ID0gb3B0aW9ucy5vdXRsZXQgfHwgJ21haW4nOwotICAgICAg
ICAgICAgb3B0aW9ucy5uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIG9wdGlvbnMudGVtcGxhdGUg
PSB0ZW1wbGF0ZTsKLSAgICAgICAgICAgIG9wdGlvbnMuTE9HX1ZJRVdfTE9PS1VQUyA9IGdldChy
b3V0ZS5yb3V0ZXIsICduYW1lc3BhY2UuTE9HX1ZJRVdfTE9PS1VQUycpOwotCi0gICAgICAgICAg
ICBFbWJlci5hc3NlcnQoIkFuIG91dGxldCAoIiArIG9wdGlvbnMub3V0bGV0ICsgIikgd2FzIHNw
ZWNpZmllZCBidXQgd2FzIG5vdCBmb3VuZC4iLCBvcHRpb25zLm91dGxldCA9PT0gJ21haW4nIHx8
IG9wdGlvbnMuaW50byk7Ci0KLSAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gb3B0aW9ucy5j
b250cm9sbGVyLAotICAgICAgICAgICAgbW9kZWwgPSBvcHRpb25zLm1vZGVsLAotICAgICAgICAg
ICAgbmFtZWRDb250cm9sbGVyOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5jb250cm9sbGVy
KSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IG9wdGlvbnMuY29udHJvbGxlcjsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5uYW1lUGFzc2VkKSB7Ci0gICAgICAgICAgICAg
ICAgY29udHJvbGxlciA9IHJvdXRlLmNvbnRhaW5lci5sb29rdXAoJ2NvbnRyb2xsZXI6JyArIG5h
bWUpIHx8IHJvdXRlLmNvbnRyb2xsZXJOYW1lIHx8IHJvdXRlLnJvdXRlTmFtZTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IHJvdXRlLmNvbnRyb2xs
ZXJOYW1lIHx8IHJvdXRlLmNvbnRhaW5lci5sb29rdXAoJ2NvbnRyb2xsZXI6JyArIG5hbWUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXIgPT09ICdz
dHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJOYW1lID0gY29udHJvbGxl
cjsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gcm91dGUuY29udGFpbmVyLmxvb2t1cCgn
Y29udHJvbGxlcjonICsgY29udHJvbGxlck5hbWUpOwotICAgICAgICAgICAgICAgIGlmICghY29u
dHJvbGxlcikgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiWW91
IHBhc3NlZCBgY29udHJvbGxlcjogJyIgKyBjb250cm9sbGVyTmFtZSArICInYCBpbnRvIHRoZSBg
cmVuZGVyYCBtZXRob2QsIGJ1dCBubyBzdWNoIGNvbnRyb2xsZXIgY291bGQgYmUgZm91bmQuIik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobW9k
ZWwpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldCgnbW9kZWwnLCBtb2RlbCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0KLSAgICAgICAgICAgIHJldHVybiBvcHRpb25zOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gc2V0dXBWaWV3KHZpZXcsIGNvbnRhaW5lciwgb3B0aW9ucykgewotICAgICAgICAg
ICAgaWYgKHZpZXcpIHsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5MT0dfVklFV19MT09L
VVBTKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5pbmZvKCJSZW5kZXJpbmcg
IiArIG9wdGlvbnMubmFtZSArICIgd2l0aCAiICsgdmlldywgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVsbE5hbWU6ICd2aWV3OicgKyBvcHRpb25zLm5hbWUgCi0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRlZmF1bHRWaWV3ID0gb3B0aW9ucy5pbnRvID8gJ3ZpZXc6ZGVmYXVsdCcg
OiAndmlldzp0b3BsZXZlbCc7Ci0gICAgICAgICAgICAgICAgdmlldyA9IGNvbnRhaW5lci5sb29r
dXAoZGVmYXVsdFZpZXcpOwotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLkxPR19WSUVXX0xP
T0tVUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmluZm8oIlJlbmRlcmlu
ZyAiICsgb3B0aW9ucy5uYW1lICsgIiB3aXRoIGRlZmF1bHQgdmlldyAiICsgdmlldywgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6ICd2aWV3OicgKyBvcHRpb25zLm5hbWUgCi0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFnZXQodmlldywgJ3RlbXBsYXRlTmFtZScpKSB7Ci0gICAgICAg
ICAgICAgICAgc2V0KHZpZXcsICd0ZW1wbGF0ZScsIG9wdGlvbnMudGVtcGxhdGUpOwotCi0gICAg
ICAgICAgICAgICAgc2V0KHZpZXcsICdfZGVidWdUZW1wbGF0ZU5hbWUnLCBvcHRpb25zLm5hbWUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXQodmlldywgJ3JlbmRlcmVkTmFtZScs
IG9wdGlvbnMubmFtZSk7Ci0gICAgICAgICAgICBzZXQodmlldywgJ2NvbnRyb2xsZXInLCBvcHRp
b25zLmNvbnRyb2xsZXIpOwotCi0gICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGFwcGVuZFZpZXcocm91dGUsIHZpZXcsIG9wdGlvbnMpIHsKLSAg
ICAgICAgICAgIGlmIChvcHRpb25zLmludG8pIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50
VmlldyA9IHJvdXRlLnJvdXRlci5fbG9va3VwQWN0aXZlVmlldyhvcHRpb25zLmludG8pOwotICAg
ICAgICAgICAgICAgIHZhciB0ZWFyZG93bk91dGxldFZpZXcgPSBnZW5lcmF0ZU91dGxldFRlYXJk
b3duKHBhcmVudFZpZXcsIG9wdGlvbnMub3V0bGV0KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJv
dXRlLnRlYXJkb3duT3V0bGV0Vmlld3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGUudGVh
cmRvd25PdXRsZXRWaWV3cyA9IFtdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXBsYWNlKHJvdXRlLnRlYXJkb3duT3V0bGV0Vmlld3MsIDAsIDAsIFt0ZWFyZG93bk91dGxl
dFZpZXddKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRWaWV3LmNvbm5lY3RPdXRsZXQob3B0aW9u
cy5vdXRsZXQsIHZpZXcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2
YXIgcm9vdEVsZW1lbnQgPSBnZXQocm91dGUsICdyb3V0ZXIubmFtZXNwYWNlLnJvb3RFbGVtZW50
Jyk7Ci0gICAgICAgICAgICAgICAgLy8gdGVhciBkb3duIHZpZXcgaWYgb25lIGlzIGFscmVhZHkg
cmVuZGVyZWQKLSAgICAgICAgICAgICAgICBpZiAocm91dGUudGVhcmRvd25Ub3BMZXZlbFZpZXcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGUudGVhcmRvd25Ub3BMZXZlbFZpZXcoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm91dGUucm91dGVyLl9jb25uZWN0QWN0
aXZlVmlldyhvcHRpb25zLm5hbWUsIHZpZXcpOwotICAgICAgICAgICAgICAgIHJvdXRlLnRlYXJk
b3duVG9wTGV2ZWxWaWV3ID0gZ2VuZXJhdGVUb3BMZXZlbFRlYXJkb3duKHZpZXcpOwotICAgICAg
ICAgICAgICAgIHZpZXcuYXBwZW5kVG8ocm9vdEVsZW1lbnQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUb3BMZXZlbFRlYXJkb3duKHZpZXcp
IHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2aWV3
LmRlc3Ryb3koKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBnZW5lcmF0ZU91dGxldFRlYXJkb3duKHBhcmVudFZpZXcsIG91dGxldCkgewotICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHBhcmVudFZpZXcuZGlzY29u
bmVjdE91dGxldChvdXRsZXQpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBSb3V0ZTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVt
YmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVt
YmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9j
b21wdXRlZCIsICJlbWJlci1tZXRhbC9tZXJnZSIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJl
bWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmlu
ZyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItcnVudGltZS9taXhpbnMv
ZXZlbnRlZCIsICJlbWJlci1yb3V0aW5nL3N5c3RlbS9kc2wiLCAiZW1iZXItdmlld3Mvdmlld3Mv
dmlldyIsICJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaSIsICJlbWJlci1oYW5kbGViYXJzL3Zp
ZXdzL21ldGFtb3JwaF92aWV3IiwgImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL3No
YXJlZCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1
X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9f
ZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBl
bmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRl
bmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVu
Y3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRkVBVFVSRVMsIExvZ2dlciwgSywgYXNzZXJ0
Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kzX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0g
X19kZXBlbmRlbmN5NF9fLnNldDsKLSAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5ID0gX19kZXBl
bmRlbmN5NV9fLmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVu
ZGVuY3k2X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTdfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5OV9fLmZvckVhY2g7Ci0KLSAgICAg
ICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5jeTEwX18uZm10OwotICAgICAgICB2YXIgRW1iZXJPYmpl
Y3QgPSBfX2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFdmVudGVkID0g
X19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJSb3V0ZXJEU0wg
PSBfX2RlcGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlclZpZXcgPSBf
X2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckxvY2F0aW9uID0g
X19kZXBlbmRlbmN5MTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgX01ldGFtb3JwaFZpZXcg
PSBfX2RlcGVuZGVuY3kxNl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciByb3V0ZUFyZ3MgPSBf
X2RlcGVuZGVuY3kxN19fLnJvdXRlQXJnczsKLSAgICAgICAgdmFyIGdldEFjdGl2ZVRhcmdldE5h
bWUgPSBfX2RlcGVuZGVuY3kxN19fLmdldEFjdGl2ZVRhcmdldE5hbWU7Ci0gICAgICAgIHZhciBz
dGFzaFBhcmFtTmFtZXMgPSBfX2RlcGVuZGVuY3kxN19fLnN0YXNoUGFyYW1OYW1lczsKLQotICAg
ICAgICAvLyByZXF1aXJlTW9kdWxlKCJlbWJlci1oYW5kbGViYXJzIik7Ci0gICAgICAgIC8vIHJl
cXVpcmVNb2R1bGUoImVtYmVyLXJ1bnRpbWUiKTsKLSAgICAgICAgLy8gcmVxdWlyZU1vZHVsZSgi
ZW1iZXItdmlld3MiKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQot
ICAgICAgICAvLyAvLyBzaWRlIGVmZmVjdCBvZiBsb2FkaW5nIHNvbWUgRW1iZXIgZ2xvYmFscywg
Zm9yIG5vdwotICAgICAgICAvLyByZXF1aXJlTW9kdWxlKCJlbWJlci1oYW5kbGViYXJzIik7Ci0g
ICAgICAgIC8vIHJlcXVpcmVNb2R1bGUoImVtYmVyLXJ1bnRpbWUiKTsKLSAgICAgICAgLy8gcmVx
dWlyZU1vZHVsZSgiZW1iZXItdmlld3MiKTsKLQotICAgICAgICB2YXIgUm91dGVyID0gcmVxdWly
ZU1vZHVsZSgicm91dGVyIilbJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIFRyYW5zaXRpb24gPSBy
ZXF1aXJlTW9kdWxlKCJyb3V0ZXIvdHJhbnNpdGlvbiIpLlRyYW5zaXRpb247Ci0KLSAgICAgICAg
dmFyIHNsaWNlID0gW10uc2xpY2U7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBg
RW1iZXIuUm91dGVyYCBjbGFzcyBtYW5hZ2VzIHRoZSBhcHBsaWNhdGlvbiBzdGF0ZSBhbmQgVVJM
cy4gUmVmZXIgdG8KLSAgICAgICAgICAgICAgdGhlIFtyb3V0aW5nIGd1aWRlXShodHRwOi8vZW1i
ZXJqcy5jb20vZ3VpZGVzL3JvdXRpbmcvKSBmb3IgZG9jdW1lbnRhdGlvbi4KLQotICAgICAgICAg
ICAgICBAY2xhc3MgUm91dGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAg
ICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAgICB2
YXIgRW1iZXJSb3V0ZXIgPSBFbWJlck9iamVjdC5leHRlbmQoRXZlbnRlZCwgewotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgbG9jYXRpb25gIHByb3BlcnR5IGRldGVy
bWluZXMgdGhlIHR5cGUgb2YgVVJMJ3MgdGhhdCB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGFw
cGxpY2F0aW9uIHdpbGwgdXNlLgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcg
bG9jYXRpb24gdHlwZXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGU6Ci0KLSAgICAgICAgICAgICAg
ICAgICAgKiBgaGFzaGAKLSAgICAgICAgICAgICAgICAgICAgKiBgaGlzdG9yeWAKLSAgICAgICAg
ICAgICAgICAgICAgKiBgbm9uZWAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbG9j
YXRpb24KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgJ2hhc2gnCi0gICAgICAgICAgICAg
ICAgICAgIEBzZWUge0VtYmVyLkxvY2F0aW9ufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGxvY2F0aW9uOiAnaGFzaCcsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgIFJlcHJlc2VudHMgdGhlIFVSTCBvZiB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb24s
IG9mdGVuICcvJy4gVGhpcyBwcmVmaXggaXMKLSAgICAgICAgICAgICAgICAgICBhc3N1bWVkIG9u
IGFsbCByb3V0ZXMgZGVmaW5lZCBvbiB0aGlzIHJvdXRlci4KLQotICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSByb290VVJMCi0gICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgJy8nCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcm9vdFVSTDogJy8nLAotCi0gICAgICAgICAg
ICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlciA9IHRoaXMu
Y29uc3RydWN0b3Iucm91dGVyIHx8IHRoaXMuY29uc3RydWN0b3IubWFwKEVtYmVyLkspOwotICAg
ICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVZpZXdzID0ge307Ci0gICAgICAgICAgICAgICAgdGhp
cy5fc2V0dXBMb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIHRoaXMuX3FwQ2FjaGUgPSB7fTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRRUENoYW5nZXMgPSB7fTsKLQotICAgICAgICAg
ICAgICAgIGlmIChnZXQodGhpcywgJ25hbWVzcGFjZS5MT0dfVFJBTlNJVElPTlNfSU5URVJOQUwn
KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5sb2cgPSBFbWJlci5Mb2dnZXIu
ZGVidWc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgVVJMLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdXJsCi0gICAgICAgICAgICAgICAgICAgIEByZXR1
cm4ge1N0cmluZ30gVGhlIGN1cnJlbnQgVVJMLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHVybDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdldCh0aGlzLCAnbG9jYXRpb24nKS5nZXRVUkwoKTsKLSAgICAgICAgICAgIH0pLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGN1cnJlbnQg
cm91dGVyIGluc3RhbmNlIGFuZCBzZXRzIHVwIHRoZSBjaGFuZ2UgaGFuZGxpbmcKLSAgICAgICAg
ICAgICAgICAgICAgZXZlbnQgbGlzdGVuZXJzIHVzZWQgYnkgdGhlIGluc3RhbmNlcyBgbG9jYXRp
b25gIGltcGxlbWVudGF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEEgcHJvcGVydHkgbmFt
ZWQgYGluaXRpYWxVUkxgIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgVVJM
LgotICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBpcyBmb3VuZCBgL2Agd2lsbCBiZSB1
c2VkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc3RhcnRSb3V0aW5nCi0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
c3RhcnRSb3V0aW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlciA9
IHRoaXMucm91dGVyIHx8IHRoaXMuY29uc3RydWN0b3IubWFwKEVtYmVyLkspOwotCi0gICAgICAg
ICAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAgICAgIHZhciBs
b2NhdGlvbiA9IGdldCh0aGlzLCAnbG9jYXRpb24nKTsKLSAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OwotICAgICAgICAgICAgICAgIHZhciBpbml0aWFsVVJMID0gZ2V0KHRoaXMsICdpbml0aWFsVVJM
Jyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbGxvdyB0aGUgTG9jYXRpb24gY2xhc3MgdG8gY2Fu
Y2VsIHRoZSByb3V0ZXIgc2V0dXAgd2hpbGUgaXQgcmVmcmVzaGVzCi0gICAgICAgICAgICAgICAg
Ly8gdGhlIHBhZ2UKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KGxvY2F0aW9uLCAnY2FuY2VsUm91
dGVyU2V0dXAnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBSb3V0ZXIocm91dGVyLCBsb2NhdGlv
bik7Ci0KLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3ZpZXc6ZGVmYXVsdCcs
IF9NZXRhbW9ycGhWaWV3KTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ3Zp
ZXc6dG9wbGV2ZWwnLCBFbWJlclZpZXcuZXh0ZW5kKCkpOwotCi0gICAgICAgICAgICAgICAgbG9j
YXRpb24ub25VcGRhdGVVUkwoZnVuY3Rpb24odXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNl
bGYuaGFuZGxlVVJMKHVybCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodHlwZW9mIGluaXRpYWxVUkwgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluaXRpYWxVUkwgPSBsb2NhdGlvbi5nZXRVUkwoKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVSTChpbml0aWFsVVJMKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBIYW5kbGVzIHVw
ZGF0aW5nIHRoZSBwYXRocyBhbmQgbm90aWZ5aW5nIGFueSBsaXN0ZW5lcnMgb2YgdGhlIFVSTAot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgICAgICAgVHJpZ2dl
cnMgdGhlIHJvdXRlciBsZXZlbCBgZGlkVHJhbnNpdGlvbmAgaG9vay4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGRpZFRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZGlkVHJhbnNpdGlvbjogZnVuY3Rpb24oaW5mb3MpIHsKLSAgICAgICAg
ICAgICAgICB1cGRhdGVQYXRocyh0aGlzKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2NhbmNl
bExvYWRpbmdFdmVudCgpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNo
YW5nZSgndXJsJyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBQdXQgdGhpcyBpbiB0aGUgcnVubG9v
cCBzbyB1cmwgd2lsbCBiZSBhY2N1cmF0ZS4gU2VlbXMKLSAgICAgICAgICAgICAgICAvLyBsZXNz
IHN1cnByaXNpbmcgdGhhbiBkaWRUcmFuc2l0aW9uIGJlaW5nIG91dCBvZiBzeW5jLgotICAgICAg
ICAgICAgICAgIHJ1bi5vbmNlKHRoaXMsIHRoaXMudHJpZ2dlciwgJ2RpZFRyYW5zaXRpb24nKTsK
LQotICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywgJ25hbWVzcGFjZScpLkxPR19UUkFOU0lU
SU9OUykgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIubG9nKCJUcmFuc2l0aW9u
ZWQgaW50byAnIiArIEVtYmVyUm91dGVyLl9yb3V0ZVBhdGgoaW5mb3MpICsgIiciKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBoYW5kbGVVUkw6IGZ1
bmN0aW9uKHVybCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kb1VSTFRyYW5zaXRp
b24oJ2hhbmRsZVVSTCcsIHVybCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfZG9V
UkxUcmFuc2l0aW9uOiBmdW5jdGlvbihyb3V0ZXJKc01ldGhvZCwgdXJsKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRyYW5zaXRpb24gPSB0aGlzLnJvdXRlcltyb3V0ZXJKc01ldGhvZF0odXJsIHx8
ICcvJyk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuRm9yVHJhbnNpdGlvbkVycm9ycyh0cmFuc2l0
aW9uKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHRyYW5zaXRpb25UbzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIHF1ZXJ5UGFyYW1zOwotICAgICAg
ICAgICAgICAgIGlmIChyZXNlbWJsZXNVUkwoYXJnc1swXSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2RvVVJMVHJhbnNpdGlvbigndHJhbnNpdGlvblRvJywgYXJnc1swXSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlUXVlcnlQ
YXJhbXMgPSBhcmdzW2FyZ3MubGVuZ3RoLTFdOwotICAgICAgICAgICAgICAgIGlmIChwb3NzaWJs
ZVF1ZXJ5UGFyYW1zICYmIHBvc3NpYmxlUXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5
UGFyYW1zJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBhcmdzLnBvcCgp
LnF1ZXJ5UGFyYW1zOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHF1ZXJ5UGFyYW1zID0ge307Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdmFyIHRhcmdldFJvdXRlTmFtZSA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fZG9UcmFuc2l0aW9uKHRhcmdldFJvdXRlTmFtZSwgYXJncywgcXVlcnlQYXJh
bXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW50ZXJtZWRpYXRlVHJhbnNpdGlv
blRvOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5pbnRlcm1lZGlh
dGVUcmFuc2l0aW9uVG8uYXBwbHkodGhpcy5yb3V0ZXIsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAg
ICAgICAgICB1cGRhdGVQYXRocyh0aGlzKTsKLQotICAgICAgICAgICAgICAgIHZhciBpbmZvcyA9
IHRoaXMucm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICAgICAgaWYgKGdl
dCh0aGlzLCAnbmFtZXNwYWNlJykuTE9HX1RSQU5TSVRJT05TKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEVtYmVyLkxvZ2dlci5sb2coIkludGVybWVkaWF0ZS10cmFuc2l0aW9uZWQgaW50byAnIiAr
IEVtYmVyUm91dGVyLl9yb3V0ZVBhdGgoaW5mb3MpICsgIiciKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNpdGlvblRvLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykubWV0aG9kKCdyZXBsYWNlJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBnZW5lcmF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMu
cm91dGVyLmdlbmVyYXRlLmFwcGx5KHRoaXMucm91dGVyLCBhcmd1bWVudHMpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmZvcm1hdFVSTCh1cmwpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaWYg
dGhlIHN1cHBsaWVkIHJvdXRlIGlzIGN1cnJlbnRseSBhY3RpdmUuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBpc0FjdGl2ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcm91dGVO
YW1lCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAg
ICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaXNBY3Rp
dmU6IGZ1bmN0aW9uKHJvdXRlTmFtZSkgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0
aGlzLnJvdXRlcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gcm91dGVyLmlzQWN0aXZlLmFwcGx5
KHJvdXRlciwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBBbiBhbHRlcm5hdGl2ZSBmb3JtIG9mIGBpc0FjdGl2ZWAgdGhh
dCBkb2Vzbid0IHJlcXVpcmUKLSAgICAgICAgICAgICAgICAgICAgbWFudWFsIGNvbmNhdGVuYXRp
b24gb2YgdGhlIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlCi0gICAgICAgICAgICAgICAgICAgIGFy
cmF5LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaXNBY3RpdmUKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHJvdXRlTmFtZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gbW9k
ZWxzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBxdWVyeVBhcmFtcwotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzQWN0aXZlSW50ZW50OiBmdW5jdGlv
bihyb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cm91dGVyID0gdGhpcy5yb3V0ZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5pc0Fj
dGl2ZS5hcHBseShyb3V0ZXIsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBzZW5kOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5yb3V0ZXIudHJpZ2dlci5hcHBseSh0aGlzLnJvdXRlciwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEb2VzIHRoaXMg
cm91dGVyIGluc3RhbmNlIGhhdmUgdGhlIGdpdmVuIHJvdXRlLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgaGFzUm91dGUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVh
bn0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBoYXNSb3V0ZTogZnVuY3Rpb24ocm91dGUpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5yb3V0ZXIuaGFzUm91dGUocm91dGUpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlc2V0cyB0aGUgc3RhdGUgb2YgdGhl
IHJvdXRlciBieSBjbGVhcmluZyB0aGUgY3VycmVudCByb3V0ZQotICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVycyBhbmQgZGVhY3RpdmF0aW5nIHRoZW0uCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNldAotICAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5yb3V0ZXIucmVzZXQoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9s
b29rdXBBY3RpdmVWaWV3OiBmdW5jdGlvbih0ZW1wbGF0ZU5hbWUpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgYWN0aXZlID0gdGhpcy5fYWN0aXZlVmlld3NbdGVtcGxhdGVOYW1lXTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYWN0aXZlICYmIGFjdGl2ZVswXTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIF9jb25uZWN0QWN0aXZlVmlldzogZnVuY3Rpb24odGVtcGxhdGVOYW1lLCB2aWV3
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdGhpcy5fYWN0aXZlVmlld3NbdGVt
cGxhdGVOYW1lXTsKLQotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykgewotICAgICAgICAg
ICAgICAgICAgICBleGlzdGluZ1swXS5vZmYoJ3dpbGxEZXN0cm95RWxlbWVudCcsIHRoaXMsIGV4
aXN0aW5nWzFdKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlv
biBkaXNjb25uZWN0QWN0aXZlVmlldygpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2FjdGl2ZVZpZXdzW3RlbXBsYXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdGhpcy5fYWN0aXZlVmlld3NbdGVtcGxhdGVOYW1lXSA9IFt2aWV3LCBkaXNj
b25uZWN0QWN0aXZlVmlld107Ci0gICAgICAgICAgICAgICAgdmlldy5vbmUoJ3dpbGxEZXN0cm95
RWxlbWVudCcsIHRoaXMsIGRpc2Nvbm5lY3RBY3RpdmVWaWV3KTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIF9zZXR1cExvY2F0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgbG9jYXRpb24gPSBnZXQodGhpcywgJ2xvY2F0aW9uJyk7Ci0gICAgICAgICAgICAgICAg
dmFyIHJvb3RVUkwgPSBnZXQodGhpcywgJ3Jvb3RVUkwnKTsKLQotICAgICAgICAgICAgICAgIGlm
IChyb290VVJMICYmIHRoaXMuY29udGFpbmVyICYmICF0aGlzLmNvbnRhaW5lci5oYXMoJy1sb2Nh
dGlvbi1zZXR0aW5nOnJvb3QtdXJsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250
YWluZXIucmVnaXN0ZXIoJy1sb2NhdGlvbi1zZXR0aW5nOnJvb3QtdXJsJywgcm9vdFVSTCwgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGU6IGZhbHNlIAotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoJ3N0
cmluZycgPT09IHR5cGVvZiBsb2NhdGlvbiAmJiB0aGlzLmNvbnRhaW5lcikgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVzb2x2ZWRMb2NhdGlvbiA9IHRoaXMuY29udGFpbmVyLmxvb2t1cCgn
bG9jYXRpb246JyArIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoJ3VuZGVm
aW5lZCcgIT09IHR5cGVvZiByZXNvbHZlZExvY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbiA9IHNldCh0aGlzLCAnbG9jYXRpb24nLCByZXNvbHZlZExvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFsbG93IGZvciBkZXByZWNhdGVkIHJlZ2lzdHJhdGlvbiBvZiBjdXN0b20gbG9jYXRpb24gQVBJ
J3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uOiBsb2NhdGlvbgotICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBzZXQodGhp
cywgJ2xvY2F0aW9uJywgRW1iZXJMb2NhdGlvbi5jcmVhdGUob3B0aW9ucykpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJv
b3RVUkwgJiYgdHlwZW9mIHJvb3RVUkwgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLnJvb3RVUkwgPSByb290VVJMOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGluaXRTdGF0ZSBpcyBjYWxsZWQgQUZURVIgdGhl
IHJvb3RVUkwgaXMgc2V0IG9uCi0gICAgICAgICAgICAgICAgLy8gdGhlIGxvY2F0aW9uIGluc3Rh
bmNlCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5pbml0U3RhdGUgPT09ICdm
dW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaW5pdFN0YXRlKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2dldEhhbmRs
ZXJGdW5jdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlZW4gPSB7fSwg
Y29udGFpbmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAgICAgdmFyIERlZmF1bHRS
b3V0ZSA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdyb3V0ZTpiYXNpYycpOwotICAgICAgICAg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZU5hbWUgPSAncm91dGU6JyAr
IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gY29udGFpbmVyLmxvb2t1
cChyb3V0ZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWVuW25hbWVdKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNlZW5bbmFtZV0gPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghaGFuZGxlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmVyLnJlZ2lzdGVyKHJvdXRlTmFtZSwgRGVmYXVsdFJvdXRlLmV4dGVuZCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250YWluZXIubG9va3VwKHJvdXRlTmFtZSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXQoc2VsZiwgJ25hbWVzcGFjZS5MT0df
QUNUSVZFX0dFTkVSQVRJT04nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVy
LkxvZ2dlci5pbmZvKCJnZW5lcmF0ZWQgLT4gIiArIHJvdXRlTmFtZSwgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogcm91dGVOYW1lIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5yb3V0ZU5hbWUgPSBuYW1l
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3NldHVwUm91dGVyOiBmdW5jdGlvbihy
b3V0ZXIsIGxvY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RVUkwsIGVtYmVyUm91
dGVyID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHJvdXRlci5nZXRIYW5kbGVyID0gdGhpcy5f
Z2V0SGFuZGxlckZ1bmN0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZG9VcGRhdGVVUkwg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uc2V0VVJMKGxhc3RV
UkwpOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICByb3V0ZXIudXBkYXRl
VVJMID0gZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAgICAgICBsYXN0VVJMID0gcGF0
aDsKLSAgICAgICAgICAgICAgICAgICAgcnVuLm9uY2UoZG9VcGRhdGVVUkwpOwotICAgICAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVwbGFjZVVSTCkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgZG9SZXBsYWNlVVJMID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlVVJMKGxhc3RVUkwpOwotICAgICAg
ICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIHJvdXRlci5yZXBsYWNlVVJM
ID0gZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVSTCA9IHBh
dGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4ub25jZShkb1JlcGxhY2VVUkwpOwotICAg
ICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJvdXRlci5kaWRUcmFuc2l0aW9uID0gZnVuY3Rpb24oaW5mb3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZW1iZXJSb3V0ZXIuZGlkVHJhbnNpdGlvbihpbmZvcyk7Ci0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9zZXJpYWxpemVRdWVyeVBhcmFtczog
ZnVuY3Rpb24odGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAg
IHZhciBncm91cGVkQnlVcmxLZXkgPSB7fTsKLQotICAgICAgICAgICAgICAgIGZvckVhY2hRdWVy
eVBhcmFtKHRoaXMsIHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMsIGZ1bmN0aW9uKGtleSwg
dmFsdWUsIHFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1cmxLZXkgPSBxcC51cmxLZXk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZEJ5VXJsS2V5W3VybEtleV0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRCeVVybEtleVt1cmxLZXldID0gW107Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZEJ5VXJsS2V5W3Vy
bEtleV0ucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxcDogcXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1trZXldOwotICAgICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGdyb3VwZWRCeVVybEtleSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgcXBzID0gZ3JvdXBlZEJ5VXJsS2V5W2tleV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChxcHMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHFwMCA9IHFwc1swXS5xcCwgcXAxID0gcXBzWzFdLnFwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiWW91J3JlIG5vdCBhbGxvd2VkIHRvIGhh
dmUgbW9yZSB0aGFuIG9uZSBjb250cm9sbGVyIHByb3BlcnR5IG1hcCB0byB0aGUgc2FtZSBxdWVy
eSBwYXJhbSBrZXksIGJ1dCBib3RoIGAlQGAgYW5kIGAlQGAgbWFwIHRvIGAlQGAuIFlvdSBjYW4g
Zml4IHRoaXMgYnkgbWFwcGluZyBvbmUgb2YgdGhlIGNvbnRyb2xsZXIgcHJvcGVydGllcyB0byBh
IGRpZmZlcmVudCBxdWVyeSBwYXJhbSBrZXkgdmlhIHRoZSBgYXNgIGNvbmZpZyBvcHRpb24sIGUu
Zy4gYCVAOiB7IGFzOiAnb3RoZXItJUAnIH1gIiwgW3FwMC5mcHJvcCwgcXAxLmZwcm9wLCBxcDAu
dXJsS2V5LCBxcDAucHJvcCwgcXAwLnByb3BdKSwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciBxcCA9IHFwc1swXS5xcDsKLSAgICAgICAgICAg
ICAgICAgICAgcXVlcnlQYXJhbXNbcXAudXJsS2V5XSA9IHFwLnJvdXRlLnNlcmlhbGl6ZVF1ZXJ5
UGFyYW0ocXBzWzBdLnZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1z
OiBmdW5jdGlvbih0YXJnZXRSb3V0ZU5hbWUsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yRWFjaFF1ZXJ5UGFyYW0odGhpcywgdGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcywg
ZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcXApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHF1
ZXJ5UGFyYW1zW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW3FwLnByb3Bd
ID0gcXAucm91dGUuZGVzZXJpYWxpemVRdWVyeVBhcmFtKHZhbHVlLCBxcC51cmxLZXksIHFwLnR5
cGUpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
X3BydW5lRGVmYXVsdFF1ZXJ5UGFyYW1WYWx1ZXM6IGZ1bmN0aW9uKHRhcmdldFJvdXRlTmFtZSwg
cXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcXBzID0gdGhpcy5fcXVlcnlQYXJh
bXNGb3IodGFyZ2V0Um91dGVOYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g
cXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHFwID0gcXBzLm1hcFtrZXld
OwotICAgICAgICAgICAgICAgICAgICBpZiAocXAgJiYgcXAuc2RlZiA9PT0gcXVlcnlQYXJhbXNb
a2V5XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zW2tleV07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBfZG9UcmFuc2l0aW9uOiBmdW5jdGlvbihfdGFyZ2V0Um91dGVOYW1l
LCBtb2RlbHMsIF9xdWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciB0YXJnZXRSb3V0
ZU5hbWUgPSBfdGFyZ2V0Um91dGVOYW1lIHx8IGdldEFjdGl2ZVRhcmdldE5hbWUodGhpcy5yb3V0
ZXIpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIHJvdXRlICIgKyB0YXJnZXRS
b3V0ZU5hbWUgKyAiIHdhcyBub3QgZm91bmQiLCB0YXJnZXRSb3V0ZU5hbWUgJiYgdGhpcy5yb3V0
ZXIuaGFzUm91dGUodGFyZ2V0Um91dGVOYW1lKSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcXVl
cnlQYXJhbXMgPSB7fTsKLQotICAgICAgICAgICAgICAgIG1lcmdlKHF1ZXJ5UGFyYW1zLCBfcXVl
cnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVRdWVyeVBhcmFtcyh0YXJn
ZXRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpOwotCi0KLSAgICAgICAgICAgICAgICB2
YXIgdHJhbnNpdGlvbkFyZ3MgPSByb3V0ZUFyZ3ModGFyZ2V0Um91dGVOYW1lLCBtb2RlbHMsIHF1
ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAgICAgICB2YXIgdHJhbnNpdGlvblByb21pc2UgPSB0aGlz
LnJvdXRlci50cmFuc2l0aW9uVG8uYXBwbHkodGhpcy5yb3V0ZXIsIHRyYW5zaXRpb25BcmdzKTsK
LQotICAgICAgICAgICAgICAgIGxpc3RlbkZvclRyYW5zaXRpb25FcnJvcnModHJhbnNpdGlvblBy
b21pc2UpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb25Qcm9taXNlOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3ByZXBhcmVRdWVyeVBhcmFtczogZnVuY3Rpb24o
dGFyZ2V0Um91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5faHlkcmF0ZVVuc3VwcGxpZWRRdWVyeVBhcmFtcyh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVs
cywgcXVlcnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZVF1ZXJ5UGFy
YW1zKHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIHRoaXMu
X3BydW5lRGVmYXVsdFF1ZXJ5UGFyYW1WYWx1ZXModGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFt
cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyBhIG1lcmdlZCBxdWVyeSBwYXJhbXMgbWV0YSBvYmplY3QgZm9yIGEgZ2l2ZW4g
cm91dGUuCi0gICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBmb3IgYXNraW5nIGEgcm91dGUgd2hh
dCBpdHMga25vd24gcXVlcnkgcGFyYW1zIGFyZS4KLSAgICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgX3F1ZXJ5UGFyYW1zRm9yOiBmdW5jdGlvbihsZWFmUm91dGVOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX3FwQ2FjaGVbbGVhZlJvdXRlTmFtZV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3FwQ2FjaGVbbGVhZlJvdXRlTmFtZV07Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG1hcCA9IHt9LCBxcHMgPSBbXSwgcXBD
YWNoZSA9IHRoaXMuX3FwQ2FjaGVbbGVhZlJvdXRlTmFtZV0gPSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1hcDogbWFwLAotICAgICAgICAgICAgICAgICAgICBxcHM6IHFwcwotICAgICAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyanMgPSB0aGlzLnJvdXRlciwKLSAg
ICAgICAgICAgICAgICByZWNvZ0hhbmRsZXJJbmZvcyA9IHJvdXRlcmpzLnJlY29nbml6ZXIuaGFu
ZGxlcnNGb3IobGVhZlJvdXRlTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MCwgbGVuID0gcmVjb2dIYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlY29nSGFuZGxlciA9IHJlY29nSGFuZGxlckluZm9zW2ldOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGUgPSByb3V0ZXJqcy5nZXRIYW5kbGVyKHJlY29n
SGFuZGxlci5oYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHFwTWV0YSA9IGdldChy
b3V0ZSwgJ19xcCcpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghcXBNZXRhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIG1lcmdlKG1hcCwgcXBNZXRhLm1hcCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHFwcy5wdXNoLmFwcGx5KHFwcywgcXBNZXRhLnFwcyk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgcXBzOiBx
cHMsCi0gICAgICAgICAgICAgICAgICAgIG1hcDogbWFwCi0gICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgIGJlY29t
ZVJlc29sdmVkOiBmdW5jdGlvbihwYXlsb2FkLCByZXNvbHZlZENvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5zZXJpYWxpemUocmVzb2x2ZWRDb250ZXh0
KTsKLQotICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnN0YXNoUmVzb2x2ZWRNb2RlbChwYXlsb2FkLCByZXNvbHZlZENvbnRl
eHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5wYXJhbXMgPSBwYXlsb2FkLnBh
cmFtcyB8fCB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucGFyYW1zW3RoaXMu
bmFtZV0gPSBwYXJhbXM7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmFjdG9yeSgncmVzb2x2ZWQnLCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0OiByZXNvbHZlZENvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lOiB0aGlzLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0
aGlzLmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcwotICAg
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgKi8KLQotICAgICAgICAgICAgX2h5ZHJhdGVVbnN1cHBsaWVkUXVlcnlQYXJhbXM6
IGZ1bmN0aW9uKGxlYWZSb3V0ZU5hbWUsIGNvbnRleHRzLCBxdWVyeVBhcmFtcykgewotICAgICAg
ICAgICAgICAgIHZhciBzdGF0ZSA9IGNhbGN1bGF0ZVBvc3RUcmFuc2l0aW9uU3RhdGUodGhpcywg
bGVhZlJvdXRlTmFtZSwgY29udGV4dHMpOwotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5m
b3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICAgICAgdmFyIGFwcENhY2hlID0g
dGhpcy5fYnVja2V0Q2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBzdGFzaFBhcmFtTmFtZXModGhp
cywgaGFuZGxlckluZm9zKTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHJvdXRlID0gaGFuZGxlckluZm9zW2ldLmhhbmRsZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBxcE1ldGEgPSBnZXQocm91dGUsICdfcXAnKTsKLQotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMCwgcXBMZW4gPSBxcE1ldGEucXBzLmxlbmd0aDsgaiA8IHFwTGVuOyAr
K2opIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxcCA9IHFwTWV0YS5xcHNbal07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlc2VudFByb3AgPSBxcC5wcm9wIGluIHF1ZXJ5
UGFyYW1zICYmIHFwLnByb3AgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHFwLmZwcm9wIGlu
IHF1ZXJ5UGFyYW1zICYmIHFwLmZwcm9wOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJlc2VudFByb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VudFBy
b3AgIT09IHFwLmZwcm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5
UGFyYW1zW3FwLmZwcm9wXSA9IHF1ZXJ5UGFyYW1zW3ByZXNlbnRQcm9wXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zW3ByZXNlbnRQcm9wXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyUHJvdG8gPSBx
cC5jUHJvdG87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlTWV0YSA9IGdl
dChjb250cm9sbGVyUHJvdG8sICdfY2FjaGVNZXRhJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb250cm9sbGVyUHJvdG8uX2NhbGN1bGF0ZUNhY2hlS2V5
KHFwLmN0cmwsIGNhY2hlTWV0YVtxcC5wcm9wXS5wYXJ0cywgc3RhdGUucGFyYW1zKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1txcC5mcHJvcF0gPSBhcHBDYWNoZS5s
b29rdXAoY2FjaGVLZXksIHFwLnByb3AsIHFwLmRlZik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBfc2NoZWR1bGVMb2FkaW5nRXZlbnQ6IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIG9yaWdpblJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsTG9hZGlu
Z0V2ZW50KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1N0YXRlVGltZXIgPSBydW4u
c2NoZWR1bGVPbmNlKCdyb3V0ZXJUcmFuc2l0aW9ucycsIHRoaXMsICdfZmlyZUxvYWRpbmdFdmVu
dCcsIHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIF9maXJlTG9hZGluZ0V2ZW50OiBmdW5jdGlvbih0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSkg
ewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbikgewot
ICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBmaXJlIGFuIGV2ZW50IGlmIHdlJ3ZlIHNpbmNl
IG1vdmVkIG9uIGZyb20KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRyYW5zaXRpb24gdGhh
dCBwdXQgdXMgaW4gYSBsb2FkaW5nIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi50cmlnZ2Vy
KHRydWUsICdsb2FkaW5nJywgdHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgX2NhbmNlbExvYWRpbmdFdmVudDogZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nU3RhdGVUaW1lcikgewotICAgICAgICAgICAg
ICAgICAgICBydW4uY2FuY2VsKHRoaXMuX2xvYWRpbmdTdGF0ZVRpbWVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1N0YXRlVGltZXIgPSBudWxsOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvKgotICAgICAgICAgICAgICBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyByb290LXdhcmQsIHN0YXJ0aW5nCi0gICAgICAg
ICAgICAgIGZyb20gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgcHJvdmlkZWQgYG9yaWdpblJvdXRl
YC4KLQotICAgICAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGxhc3QgY2FsbGJhY2sgZmly
ZWQgcmVxdWVzdGVkCi0gICAgICAgICAgICAgIHRvIGJ1YmJsZSB1cHdhcmQuCi0KLSAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBmb3JFYWNo
Um91dGVBYm92ZShvcmlnaW5Sb3V0ZSwgdHJhbnNpdGlvbiwgY2FsbGJhY2spIHsKLSAgICAgICAg
ICAgIHZhciBoYW5kbGVySW5mb3MgPSB0cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZvczsKLSAg
ICAgICAgICAgIHZhciBvcmlnaW5Sb3V0ZUZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIg
aGFuZGxlckluZm8sIHJvdXRlOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gaGFuZGxlcklu
Zm9zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlcklu
Zm8gPSBoYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgcm91dGUgPSBoYW5kbGVySW5m
by5oYW5kbGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5Sb3V0ZUZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5Sb3V0ZSA9PT0gcm91dGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpblJvdXRlRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhyb3V0ZSwgaGFuZGxlckluZm9zW2kgKyAx
XS5oYW5kbGVyKSAhPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBnZXQgaW52b2tlZCB3aGVuIGFuIGFj
dGlvbiBidWJibGVzIGFib3ZlIEFwcGxpY2F0aW9uUm91dGUKLSAgICAgICAgLy8gYW5kIGFyZSBu
b3QgbWVhbnQgdG8gYmUgb3ZlcnJpZGFibGUuCi0gICAgICAgIHZhciBkZWZhdWx0QWN0aW9uSGFu
ZGxlcnMgPSB7Ci0KLSAgICAgICAgICAgIHdpbGxSZXNvbHZlTW9kZWw6IGZ1bmN0aW9uKHRyYW5z
aXRpb24sIG9yaWdpblJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgb3JpZ2luUm91dGUucm91dGVy
Ll9zY2hlZHVsZUxvYWRpbmdFdmVudCh0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3IsIHRyYW5zaXRpb24s
IG9yaWdpblJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFw
cHJvcHJpYXRlIGVycm9yIHN1YnN0YXRlIHRvIGVudGVyLgotICAgICAgICAgICAgICAgIHZhciBy
b3V0ZXIgPSBvcmlnaW5Sb3V0ZS5yb3V0ZXI7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdHJ5VG9w
TGV2ZWwgPSBmb3JFYWNoUm91dGVBYm92ZShvcmlnaW5Sb3V0ZSwgdHJhbnNpdGlvbiwgZnVuY3Rp
b24ocm91dGUsIGNoaWxkUm91dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkRXJy
b3JSb3V0ZU5hbWUgPSBmaW5kQ2hpbGRSb3V0ZU5hbWUocm91dGUsIGNoaWxkUm91dGUsICdlcnJv
cicpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRFcnJvclJvdXRlTmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25UbyhjaGls
ZEVycm9yUm91dGVOYW1lLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodHJ5VG9wTGV2ZWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRvcC1sZXZlbCBlcnJvciBzdGF0
ZSB0byBlbnRlci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlSGFzQmVlbkRlZmluZWQo
b3JpZ2luUm91dGUucm91dGVyLCAnYXBwbGljYXRpb25fZXJyb3InKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25UbygnYXBwbGljYXRpb25f
ZXJyb3InLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCBmaXJlIGFuIGFzc2VydGlvbiBpZiB3ZSBmb3VuZCBhbiBlcnJvciBzdWJz
dGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGVycm9yLCAnRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBy
b3V0ZTogJyArIHRyYW5zaXRpb24udGFyZ2V0TmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBsb2FkaW5nOiBmdW5jdGlvbih0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSkgewotICAg
ICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBsb2FkaW5nIHN1
YnN0YXRlIHRvIGVudGVyLgotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSBvcmlnaW5Sb3V0
ZS5yb3V0ZXI7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdHJ5VG9wTGV2ZWwgPSBmb3JFYWNoUm91
dGVBYm92ZShvcmlnaW5Sb3V0ZSwgdHJhbnNpdGlvbiwgZnVuY3Rpb24ocm91dGUsIGNoaWxkUm91
dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTG9hZGluZ1JvdXRlTmFtZSA9IGZp
bmRDaGlsZFJvdXRlTmFtZShyb3V0ZSwgY2hpbGRSb3V0ZSwgJ2xvYWRpbmcnKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRMb2FkaW5nUm91dGVOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByb3V0ZXIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKGNoaWxkTG9hZGluZ1Jv
dXRlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBidWJibGUgYWJvdmUgcGl2
b3Qgcm91dGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnBpdm90SGFuZGxl
ciAhPT0gcm91dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodHJ5VG9wTGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRv
cC1sZXZlbCBsb2FkaW5nIHN0YXRlIHRvIGVudGVyLgotICAgICAgICAgICAgICAgICAgICBpZiAo
cm91dGVIYXNCZWVuRGVmaW5lZChvcmlnaW5Sb3V0ZS5yb3V0ZXIsICdhcHBsaWNhdGlvbl9sb2Fk
aW5nJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlci5pbnRlcm1lZGlhdGVUcmFu
c2l0aW9uVG8oJ2FwcGxpY2F0aW9uX2xvYWRpbmcnKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBsb2dFcnJvcihlcnJvciwg
aW5pdGlhbE1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHZhciBlcnJvckFyZ3MgPSBbXTsKLQotICAg
ICAgICAgICAgaWYgKGluaXRpYWxNZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JBcmdz
LnB1c2goaW5pdGlhbE1lc3NhZ2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSkgewotICAgICAgICAg
ICAgICAgICAgICBlcnJvckFyZ3MucHVzaChlcnJvci5tZXNzYWdlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YWNrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVycm9yQXJncy5wdXNoKGVycm9yLnN0YWNrKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAic3RyaW5nIikgewotICAgICAgICAg
ICAgICAgICAgICBlcnJvckFyZ3MucHVzaChlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBFbWJlci5Mb2dnZXIuZXJyb3IuYXBwbHkodGhpcywg
ZXJyb3JBcmdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmRDaGlsZFJvdXRl
TmFtZShwYXJlbnRSb3V0ZSwgb3JpZ2luYXRpbmdDaGlsZFJvdXRlLCBuYW1lKSB7Ci0gICAgICAg
ICAgICB2YXIgcm91dGVyID0gcGFyZW50Um91dGUucm91dGVyOwotICAgICAgICAgICAgdmFyIGNo
aWxkTmFtZTsKLSAgICAgICAgICAgIHZhciB0YXJnZXRDaGlsZFJvdXRlTmFtZSA9IG9yaWdpbmF0
aW5nQ2hpbGRSb3V0ZS5yb3V0ZU5hbWUuc3BsaXQoJy4nKS5wb3AoKTsKLSAgICAgICAgICAgIHZh
ciBuYW1lc3BhY2UgPSBwYXJlbnRSb3V0ZS5yb3V0ZU5hbWUgPT09ICdhcHBsaWNhdGlvbicgPyAn
JyA6IHBhcmVudFJvdXRlLnJvdXRlTmFtZSArICcuJzsKLQotCi0gICAgICAgICAgICAvLyBTZWNv
bmQsIHRyeSBnZW5lcmFsIGxvYWRpbmcgc3RhdGUsIGUuZy4gJ2xvYWRpbmcnCi0gICAgICAgICAg
ICBjaGlsZE5hbWUgPSBuYW1lc3BhY2UgKyBuYW1lOwotICAgICAgICAgICAgaWYgKHJvdXRlSGFz
QmVlbkRlZmluZWQocm91dGVyLCBjaGlsZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNoaWxkTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IHJvdXRlSGFzQmVlbkRlZmluZWQocm91dGVyLCBuYW1lKSB7Ci0gICAgICAgICAgICB2YXIgY29u
dGFpbmVyID0gcm91dGVyLmNvbnRhaW5lcjsKLSAgICAgICAgICAgIHJldHVybiByb3V0ZXIuaGFz
Um91dGUobmFtZSkgJiYKLSAgICAgICAgICAgIChjb250YWluZXIuaGFzKCd0ZW1wbGF0ZTonICsg
bmFtZSkgfHwgY29udGFpbmVyLmhhcygncm91dGU6JyArIG5hbWUpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChoYW5kbGVySW5mb3MsIGlnbm9yZUZhaWx1cmUs
IGFyZ3MpIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gYXJncy5zaGlmdCgpOwotCi0gICAgICAg
ICAgICBpZiAoIWhhbmRsZXJJbmZvcykgewotICAgICAgICAgICAgICAgIGlmIChpZ25vcmVGYWls
dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIkNhbid0IHRyaWdnZXIgYWN0aW9u
ICciICsgbmFtZSArICInIGJlY2F1c2UgeW91ciBhcHAgaGFzbid0IGZpbmlzaGVkIHRyYW5zaXRp
b25pbmcgaW50byBpdHMgZmlyc3Qgcm91dGUuIFRvIHRyaWdnZXIgYW4gYWN0aW9uIG9uIGRlc3Rp
bmF0aW9uIHJvdXRlcyBkdXJpbmcgYSB0cmFuc2l0aW9uLCB5b3UgY2FuIGNhbGwgYC5zZW5kKClg
IG9uIHRoZSBgVHJhbnNpdGlvbmAgb2JqZWN0IHBhc3NlZCB0byB0aGUgYG1vZGVsL2JlZm9yZU1v
ZGVsL2FmdGVyTW9kZWxgIGhvb2tzLiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgaGFuZGxlckluZm8s
IGhhbmRsZXI7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSBoYW5kbGVySW5mb3MubGVuZ3Ro
IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVySW5mbyA9IGhhbmRs
ZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlckluZm8uaGFuZGxl
cjsKLQotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLl9hY3Rpb25zICYmIGhhbmRsZXIuX2Fj
dGlvbnNbbmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuX2FjdGlvbnNb
bmFtZV0uYXBwbHkoaGFuZGxlciwgYXJncykgPT09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChk
ZWZhdWx0QWN0aW9uSGFuZGxlcnNbbmFtZV0pIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0QWN0
aW9uSGFuZGxlcnNbbmFtZV0uYXBwbHkobnVsbCwgYXJncyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWV2ZW50V2FzSGFuZGxlZCAm
JiAhaWdub3JlRmFpbHVyZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9y
KCJOb3RoaW5nIGhhbmRsZWQgdGhlIGFjdGlvbiAnIiArIG5hbWUgKyAiJy4gSWYgeW91IGRpZCBo
YW5kbGUgdGhlIGFjdGlvbiwgdGhpcyBlcnJvciBjYW4gYmUgY2F1c2VkIGJ5IHJldHVybmluZyB0
cnVlIGZyb20gYW4gYWN0aW9uIGhhbmRsZXIgaW4gYSBjb250cm9sbGVyLCBjYXVzaW5nIHRoZSBh
Y3Rpb24gdG8gYnViYmxlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gY2FsY3VsYXRlUG9zdFRyYW5zaXRpb25TdGF0ZShlbWJlclJvdXRlciwgbGVhZlJv
dXRlTmFtZSwgY29udGV4dHMpIHsKLSAgICAgICAgICAgIHZhciByb3V0ZXJqcyA9IGVtYmVyUm91
dGVyLnJvdXRlcjsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IHJvdXRlcmpzLmFwcGx5SW50ZW50
KGxlYWZSb3V0ZU5hbWUsIGNvbnRleHRzKTsKLSAgICAgICAgICAgIHZhciBoYW5kbGVySW5mb3Mg
PSBzdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gc3RhdGUucGFy
YW1zOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxl
bmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0g
aGFuZGxlckluZm9zW2ldOwotICAgICAgICAgICAgICAgIGlmICghaGFuZGxlckluZm8uaXNSZXNv
bHZlZCkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvLmJl
Y29tZVJlc29sdmVkKG51bGwsIGhhbmRsZXJJbmZvLmNvbnRleHQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwYXJhbXNbaGFuZGxlckluZm8ubmFtZV0gPSBoYW5kbGVySW5m
by5wYXJhbXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1cGRhdGVQYXRocyhyb3V0ZXIpIHsKLSAgICAgICAg
ICAgIHZhciBhcHBDb250cm9sbGVyID0gcm91dGVyLmNvbnRhaW5lci5sb29rdXAoJ2NvbnRyb2xs
ZXI6YXBwbGljYXRpb24nKTsKLQotICAgICAgICAgICAgaWYgKCFhcHBDb250cm9sbGVyKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gYXBwQ29udHJvbGxlciBtaWdodCBub3QgZXhpc3Qgd2hlbiB0b3At
bGV2ZWwgbG9hZGluZy9lcnJvcgotICAgICAgICAgICAgICAgIC8vIHN1YnN0YXRlcyBoYXZlIGJl
ZW4gZW50ZXJlZCBzaW5jZSBBcHBsaWNhdGlvblJvdXRlIGhhc24ndAotICAgICAgICAgICAgICAg
IC8vIGFjdHVhbGx5IGJlZW4gZW50ZXJlZCBhdCB0aGF0IHBvaW50LgotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGluZm9zID0gcm91dGVy
LnJvdXRlci5jdXJyZW50SGFuZGxlckluZm9zLAotICAgICAgICAgICAgcGF0aCA9IEVtYmVyUm91
dGVyLl9yb3V0ZVBhdGgoaW5mb3MpOwotCi0gICAgICAgICAgICBpZiAoISgnY3VycmVudFBhdGgn
IGluIGFwcENvbnRyb2xsZXIpKSB7Ci0gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkoYXBw
Q29udHJvbGxlciwgJ2N1cnJlbnRQYXRoJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHNldChhcHBDb250cm9sbGVyLCAnY3VycmVudFBhdGgnLCBwYXRoKTsKLQotICAgICAgICAgICAg
aWYgKCEoJ2N1cnJlbnRSb3V0ZU5hbWUnIGluIGFwcENvbnRyb2xsZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgZGVmaW5lUHJvcGVydHkoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRSb3V0ZU5hbWUnKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0KGFwcENvbnRyb2xsZXIsICdjdXJyZW50
Um91dGVOYW1lJywgaW5mb3NbaW5mb3MubGVuZ3RoIC0gMV0ubmFtZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBFbWJlclJvdXRlci5yZW9wZW5DbGFzcyh7Ci0gICAgICAgICAgICByb3V0ZXI6IG51
bGwsCi0gICAgICAgICAgICBtYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAgICAgIGlmICghcm91dGVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRlciA9IG5ldyBSb3V0ZXIoKTsKLQotCi0gICAg
ICAgICAgICAgICAgICAgIHJvdXRlci5fdHJpZ2dlcldpbGxDaGFuZ2VDb250ZXh0ID0gRW1iZXIu
SzsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVyLl90cmlnZ2VyV2lsbExlYXZlID0gRW1iZXIu
SzsKLQotCi0gICAgICAgICAgICAgICAgICAgIHJvdXRlci5jYWxsYmFja3MgPSBbXTsKLSAgICAg
ICAgICAgICAgICAgICAgcm91dGVyLnRyaWdnZXJFdmVudCA9IHRyaWdnZXJFdmVudDsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5yZW9wZW5DbGFzcyh7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByb3V0ZXI6IHJvdXRlciAKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGRzbCA9IEVtYmVyUm91dGVyRFNMLm1hcChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYXBwbGljYXRpb24n
LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAiLyIgCi0gICAgICAgICAgICAgICAg
ICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCByb3V0ZXIuY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGVyLmNhbGxiYWNrc1tpXS5jYWxsKHRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlz
KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgICByb3V0ZXIuY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgICAgICAg
ICAgIHJvdXRlci5tYXAoZHNsLmdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBy
b3V0ZXI7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfcm91dGVQYXRoOiBmdW5jdGlv
bihoYW5kbGVySW5mb3MpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IFtdOwotCi0gICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUgY29hbGVzY2luZyByZXNvdXJjZSBuYW1l
cyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gYXJlIHByZWZpeGVkIHdpdGggdGhlaXIgcGFyZW50
J3MgbmFtZXMsIGUuZy4KLSAgICAgICAgICAgICAgICAvLyBbJ2ZvbycsICdmb28uYmFyLmJheidd
ID0+ICdmb28uYmFyLmJheicsIG5vdCAnZm9vLmZvby5iYXIuYmF6JwotCi0gICAgICAgICAgICAg
ICAgZnVuY3Rpb24gaW50ZXJzZWN0aW9uTWF0Y2hlcyhhMSwgYTIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGExLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYTFbaV0gIT09IGEyW2ldKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBuYW1lLCBuYW1lUGFy
dHMsIG9sZE5hbWVQYXJ0czsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IGhh
bmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IGhhbmRsZXJJbmZvc1tpXS5uYW1lOwotICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMg
PSBuYW1lLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICAgICAgICAgIG9sZE5hbWVQYXJ0cyA9IHNs
aWNlLmNhbGwocGF0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9sZE5hbWVQYXJ0
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25NYXRj
aGVzKG9sZE5hbWVQYXJ0cywgbmFtZVBhcnRzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkTmFtZVBhcnRzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBwYXRoLnB1c2guYXBwbHkocGF0aCwgbmFtZVBhcnRzLnNsaWNlKG9s
ZE5hbWVQYXJ0cy5sZW5ndGgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGF0aC5qb2luKCIuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIGZ1bmN0aW9uIGxpc3RlbkZvclRyYW5zaXRpb25FcnJvcnModHJhbnNpdGlvbikgewot
ICAgICAgICAgICAgdHJhbnNpdGlvbi50aGVuKG51bGwsIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFlcnJvciB8fCAhZXJyb3IubmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGVy
cm9yLm5hbWUgPT09ICJVbnJlY29nbml6ZWRVUkxFcnJvciIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJUaGUgVVJMICciICsgZXJyb3IubWVzc2FnZSArICInIGRpZCBub3Qg
bWF0Y2ggYW55IHJvdXRlcyBpbiB5b3VyIGFwcGxpY2F0aW9uIik7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnVHJhbnNpdGlvbkFib3J0ZWQnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgaWdub3JlIFRyYW5zaXRpb25BYm9ydGVkIGhlcmUKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihlcnJvcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotICAg
ICAgICAgICAgfSwgJ0VtYmVyOiBQcm9jZXNzIGVycm9ycyBmcm9tIFJvdXRlcicpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVzZW1ibGVzVVJMKHN0cikgewotICAgICAgICAgICAg
cmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnICYmICggc3RyID09PSAnJyB8fCBzdHIuY2hh
ckF0KDApID09PSAnLycpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZm9yRWFjaFF1
ZXJ5UGFyYW0ocm91dGVyLCB0YXJnZXRSb3V0ZU5hbWUsIHF1ZXJ5UGFyYW1zLCBjYWxsYmFjaykg
ewotCi0gICAgICAgICAgICB2YXIgcXBDYWNoZSA9IHJvdXRlci5fcXVlcnlQYXJhbXNGb3IodGFy
Z2V0Um91dGVOYW1lKSwKLSAgICAgICAgICAgIHFwcyA9IHFwQ2FjaGUucXBzOwotCi0gICAgICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IXF1ZXJ5UGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9
IHF1ZXJ5UGFyYW1zW2tleV0sCi0gICAgICAgICAgICAgICAgcXAgPSBxcENhY2hlLm1hcFtrZXld
OwotCi0gICAgICAgICAgICAgICAgaWYgKHFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKGtleSwgdmFsdWUsIHFwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJSb3V0ZXI7
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lIiwKLSAgICBbImVtYmVyLW1ldGFs
IiwgImVtYmVyLXJ1bnRpbWUvY29yZSIsICJlbWJlci1ydW50aW1lL2tleXMiLCAiZW1iZXItcnVu
dGltZS9jb21wYXJlIiwgImVtYmVyLXJ1bnRpbWUvY29weSIsICJlbWJlci1ydW50aW1lL3N5c3Rl
bS9uYW1lc3BhY2UiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL3RyYWNrZWRfYXJyYXkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3ViYXJyYXki
LCAiZW1iZXItcnVudGltZS9zeXN0ZW0vY29udGFpbmVyIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L2FwcGxpY2F0aW9uIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5IiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94eSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9jb3Jl
X29iamVjdCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9lYWNoX3Byb3h5IiwgImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL25hdGl2ZV9hcnJheSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zZXQiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2RlZmVycmVk
IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci1ydW50aW1lL21peGlu
cy9hcnJheSIsICJlbWJlci1ydW50aW1lL21peGlucy9jb21wYXJhYmxlIiwgImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL2NvcHlhYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCAi
ZW1iZXItcnVudGltZS9taXhpbnMvZnJlZXphYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29i
c2VydmFibGUiLCAiZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLCAiZW1iZXIt
cnVudGltZS9taXhpbnMvZGVmZXJyZWQiLCAiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9l
bnVtZXJhYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfYXJyYXkiLCAiZW1iZXIt
cnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwgImVtYmVyLXJ1bnRpbWUvbWl4
aW5zL2V2ZW50ZWQiLCAiZW1iZXItcnVudGltZS9taXhpbnMvcHJvbWlzZV9wcm94eSIsICJlbWJl
ci1ydW50aW1lL21peGlucy9zb3J0YWJsZSIsICJlbWJlci1ydW50aW1lL2NvbXB1dGVkL2FycmF5
X2NvbXB1dGVkIiwgImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNlX2NvbXB1dGVkIiwgImVt
YmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNlX2NvbXB1dGVkX21hY3JvcyIsICJlbWJlci1ydW50
aW1lL2NvbnRyb2xsZXJzL2FycmF5X2NvbnRyb2xsZXIiLCAiZW1iZXItcnVudGltZS9jb250cm9s
bGVycy9vYmplY3RfY29udHJvbGxlciIsICJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRy
b2xsZXIiLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsICJlbWJlci1ydW50aW1l
L2V4dC9yc3ZwIiwgImVtYmVyLXJ1bnRpbWUvZXh0L3N0cmluZyIsICJlbWJlci1ydW50aW1lL2V4
dC9mdW5jdGlvbiIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVu
ZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4
X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywg
X19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19k
ZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBl
bmRlbmN5MThfXywgX19kZXBlbmRlbmN5MTlfXywgX19kZXBlbmRlbmN5MjBfXywgX19kZXBlbmRl
bmN5MjFfXywgX19kZXBlbmRlbmN5MjJfXywgX19kZXBlbmRlbmN5MjNfXywgX19kZXBlbmRlbmN5
MjRfXywgX19kZXBlbmRlbmN5MjVfXywgX19kZXBlbmRlbmN5MjZfXywgX19kZXBlbmRlbmN5Mjdf
XywgX19kZXBlbmRlbmN5MjhfXywgX19kZXBlbmRlbmN5MjlfXywgX19kZXBlbmRlbmN5MzBfXywg
X19kZXBlbmRlbmN5MzFfXywgX19kZXBlbmRlbmN5MzJfXywgX19kZXBlbmRlbmN5MzNfXywgX19k
ZXBlbmRlbmN5MzRfXywgX19kZXBlbmRlbmN5MzVfXywgX19kZXBlbmRlbmN5MzZfXywgX19kZXBl
bmRlbmN5MzdfXywgX19kZXBlbmRlbmN5MzhfXywgX19kZXBlbmRlbmN5MzlfXywgX19kZXBlbmRl
bmN5NDBfXywgX19kZXBlbmRlbmN5NDFfXywgX19kZXBlbmRlbmN5NDJfXywgX19kZXBlbmRlbmN5
NDNfXywgX19kZXBlbmRlbmN5NDRfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyIFJ1bnRpbWUKLQotICAgICAgICAg
ICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0g
ICAgICAgICAgICBAcmVxdWlyZXMgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgLy8gQkVHSU4gSU1QT1JUUwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzRXF1YWwgPSBfX2RlcGVuZGVuY3kyX18uaXNFcXVh
bDsKLSAgICAgICAgdmFyIGtleXMgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIGNvbXBhcmUgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGNvcHkgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgTmFtZXNw
YWNlID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlck9iamVj
dCA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVHJhY2tlZEFycmF5
ID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBTdWJBcnJheSA9IF9f
ZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29udGFpbmVyID0gX19kZXBl
bmRlbmN5MTBfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQXBwbGljYXRpb24gPSBfX2RlcGVu
ZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBBcnJheVByb3h5ID0gX19kZXBlbmRl
bmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgT2JqZWN0UHJveHkgPSBfX2RlcGVuZGVu
Y3kxM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb3JlT2JqZWN0ID0gX19kZXBlbmRlbmN5
MTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRWFjaEFycmF5ID0gX19kZXBlbmRlbmN5MTVf
Xy5FYWNoQXJyYXk7Ci0gICAgICAgIHZhciBFYWNoUHJveHkgPSBfX2RlcGVuZGVuY3kxNV9fLkVh
Y2hQcm94eTsKLQotICAgICAgICB2YXIgTmF0aXZlQXJyYXkgPSBfX2RlcGVuZGVuY3kxNl9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBTZXQgPSBfX2RlcGVuZGVuY3kxN19fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBFbWJlclN0cmluZ1V0aWxzID0gX19kZXBlbmRlbmN5MThfX1siZGVmYXVs
dCJdOwotICAgICAgICB2YXIgRGVmZXJyZWQgPSBfX2RlcGVuZGVuY3kxOV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBvbkxvYWQgPSBfX2RlcGVuZGVuY3kyMF9fLm9uTG9hZDsKLSAgICAgICAg
dmFyIHJ1bkxvYWRIb29rcyA9IF9fZGVwZW5kZW5jeTIwX18ucnVuTG9hZEhvb2tzOwotCi0gICAg
ICAgIHZhciBFbWJlckFycmF5ID0gX19kZXBlbmRlbmN5MjFfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgQ29tcGFyYWJsZSA9IF9fZGVwZW5kZW5jeTIyX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIENvcHlhYmxlID0gX19kZXBlbmRlbmN5MjNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
RW51bWVyYWJsZSA9IF9fZGVwZW5kZW5jeTI0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEZy
ZWV6YWJsZSA9IF9fZGVwZW5kZW5jeTI1X18uRnJlZXphYmxlOwotICAgICAgICB2YXIgRlJPWkVO
X0VSUk9SID0gX19kZXBlbmRlbmN5MjVfXy5GUk9aRU5fRVJST1I7Ci0KLSAgICAgICAgdmFyIE9i
c2VydmFibGUgPSBfX2RlcGVuZGVuY3kyNl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBBY3Rp
b25IYW5kbGVyID0gX19kZXBlbmRlbmN5MjdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRGVm
ZXJyZWRNaXhpbiA9IF9fZGVwZW5kZW5jeTI4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE11
dGFibGVFbnVtZXJhYmxlID0gX19kZXBlbmRlbmN5MjlfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgTXV0YWJsZUFycmF5ID0gX19kZXBlbmRlbmN5MzBfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgVGFyZ2V0QWN0aW9uU3VwcG9ydCA9IF9fZGVwZW5kZW5jeTMxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEV2ZW50ZWQgPSBfX2RlcGVuZGVuY3kzMl9fWyJkZWZhdWx0Il07Ci0gICAgICAg
IHZhciBQcm9taXNlUHJveHlNaXhpbiA9IF9fZGVwZW5kZW5jeTMzX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIFNvcnRhYmxlTWl4aW4gPSBfX2RlcGVuZGVuY3kzNF9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBhcnJheUNvbXB1dGVkID0gX19kZXBlbmRlbmN5MzVfXy5hcnJheUNvbXB1dGVk
OwotICAgICAgICB2YXIgQXJyYXlDb21wdXRlZFByb3BlcnR5ID0gX19kZXBlbmRlbmN5MzVfXy5B
cnJheUNvbXB1dGVkUHJvcGVydHk7Ci0KLSAgICAgICAgdmFyIHJlZHVjZUNvbXB1dGVkID0gX19k
ZXBlbmRlbmN5MzZfXy5yZWR1Y2VDb21wdXRlZDsKLSAgICAgICAgdmFyIFJlZHVjZUNvbXB1dGVk
UHJvcGVydHkgPSBfX2RlcGVuZGVuY3kzNl9fLlJlZHVjZUNvbXB1dGVkUHJvcGVydHk7Ci0KLSAg
ICAgICAgdmFyIHN1bSA9IF9fZGVwZW5kZW5jeTM3X18uc3VtOwotICAgICAgICB2YXIgbWluID0g
X19kZXBlbmRlbmN5MzdfXy5taW47Ci0gICAgICAgIHZhciBtYXggPSBfX2RlcGVuZGVuY3kzN19f
Lm1heDsKLSAgICAgICAgdmFyIG1hcCA9IF9fZGVwZW5kZW5jeTM3X18ubWFwOwotICAgICAgICB2
YXIgc29ydCA9IF9fZGVwZW5kZW5jeTM3X18uc29ydDsKLSAgICAgICAgdmFyIHNldERpZmYgPSBf
X2RlcGVuZGVuY3kzN19fLnNldERpZmY7Ci0gICAgICAgIHZhciBtYXBCeSA9IF9fZGVwZW5kZW5j
eTM3X18ubWFwQnk7Ci0gICAgICAgIHZhciBtYXBQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTM3X18u
bWFwUHJvcGVydHk7Ci0gICAgICAgIHZhciBmaWx0ZXIgPSBfX2RlcGVuZGVuY3kzN19fLmZpbHRl
cjsKLSAgICAgICAgdmFyIGZpbHRlckJ5ID0gX19kZXBlbmRlbmN5MzdfXy5maWx0ZXJCeTsKLSAg
ICAgICAgdmFyIGZpbHRlclByb3BlcnR5ID0gX19kZXBlbmRlbmN5MzdfXy5maWx0ZXJQcm9wZXJ0
eTsKLSAgICAgICAgdmFyIHVuaXEgPSBfX2RlcGVuZGVuY3kzN19fLnVuaXE7Ci0gICAgICAgIHZh
ciB1bmlvbiA9IF9fZGVwZW5kZW5jeTM3X18udW5pb247Ci0gICAgICAgIHZhciBpbnRlcnNlY3Qg
PSBfX2RlcGVuZGVuY3kzN19fLmludGVyc2VjdDsKLQotICAgICAgICB2YXIgQXJyYXlDb250cm9s
bGVyID0gX19kZXBlbmRlbmN5MzhfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgT2JqZWN0Q29u
dHJvbGxlciA9IF9fZGVwZW5kZW5jeTM5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIENvbnRy
b2xsZXIgPSBfX2RlcGVuZGVuY3k0MF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb250cm9s
bGVyTWl4aW4gPSBfX2RlcGVuZGVuY3k0MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIFJT
VlAgPSBfX2RlcGVuZGVuY3k0Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIGp1c3QgZm9yIHNp
ZGUgZWZmZWN0IG9mIGV4dGVuZGluZyBFbWJlci5SU1ZQCi0gICAgICAgIC8vIGp1c3QgZm9yIHNp
ZGUgZWZmZWN0IG9mIGV4dGVuZGluZyBTdHJpbmcucHJvdG90eXBlCi0gICAgICAgIC8vIGp1c3Qg
Zm9yIHNpZGUgZWZmZWN0IG9mIGV4dGVuZGluZyBGdW5jdGlvbi5wcm90b3R5cGUKLSAgICAgICAg
Ly8gRU5EIElNUE9SVFMKLQotICAgICAgICAvLyBCRUdJTiBFWFBPUlRTCi0gICAgICAgIEVtYmVy
LmNvbXBhcmUgPSBjb21wYXJlOwotICAgICAgICBFbWJlci5jb3B5ID0gY29weTsKLSAgICAgICAg
RW1iZXIuaXNFcXVhbCA9IGlzRXF1YWw7Ci0gICAgICAgIEVtYmVyLmtleXMgPSBrZXlzOwotCi0g
ICAgICAgIEVtYmVyLkFycmF5ID0gRW1iZXJBcnJheTsKLQotICAgICAgICBFbWJlci5Db21wYXJh
YmxlID0gQ29tcGFyYWJsZTsKLSAgICAgICAgRW1iZXIuQ29weWFibGUgPSBDb3B5YWJsZTsKLQot
ICAgICAgICBFbWJlci5Tb3J0YWJsZU1peGluID0gU29ydGFibGVNaXhpbjsKLQotICAgICAgICBF
bWJlci5GcmVlemFibGUgPSBGcmVlemFibGU7Ci0gICAgICAgIEVtYmVyLkZST1pFTl9FUlJPUiA9
IEZST1pFTl9FUlJPUjsKLQotICAgICAgICBFbWJlci5EZWZlcnJlZE1peGluID0gRGVmZXJyZWRN
aXhpbjsKLQotICAgICAgICBFbWJlci5NdXRhYmxlRW51bWVyYWJsZSA9IE11dGFibGVFbnVtZXJh
YmxlOwotICAgICAgICBFbWJlci5NdXRhYmxlQXJyYXkgPSBNdXRhYmxlQXJyYXk7Ci0KLSAgICAg
ICAgRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydCA9IFRhcmdldEFjdGlvblN1cHBvcnQ7Ci0gICAg
ICAgIEVtYmVyLkV2ZW50ZWQgPSBFdmVudGVkOwotCi0gICAgICAgIEVtYmVyLlByb21pc2VQcm94
eU1peGluID0gUHJvbWlzZVByb3h5TWl4aW47Ci0KLSAgICAgICAgRW1iZXIuT2JzZXJ2YWJsZSA9
IE9ic2VydmFibGU7Ci0KLSAgICAgICAgRW1iZXIuYXJyYXlDb21wdXRlZCA9IGFycmF5Q29tcHV0
ZWQ7Ci0gICAgICAgIEVtYmVyLkFycmF5Q29tcHV0ZWRQcm9wZXJ0eSA9IEFycmF5Q29tcHV0ZWRQ
cm9wZXJ0eTsKLSAgICAgICAgRW1iZXIucmVkdWNlQ29tcHV0ZWQgPSByZWR1Y2VDb21wdXRlZDsK
LSAgICAgICAgRW1iZXIuUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eSA9IFJlZHVjZUNvbXB1dGVkUHJv
cGVydHk7Ci0KLSAgICAgICAgLy8gRVM2VE9ETzogdGhpcyBzZWVtcyBhIGxlc3MgdGhhbiBpZGVh
bCB3YXkvcGxhY2UgdG8gYWRkIHByb3BlcnRpZXMgdG8gRW1iZXIuY29tcHV0ZWQKLSAgICAgICAg
dmFyIEVtQ29tcHV0ZWQgPSBFbWJlci5jb21wdXRlZDsKLQotICAgICAgICBFbUNvbXB1dGVkLnN1
bSA9IHN1bTsKLSAgICAgICAgRW1Db21wdXRlZC5taW4gPSBtaW47Ci0gICAgICAgIEVtQ29tcHV0
ZWQubWF4ID0gbWF4OwotICAgICAgICBFbUNvbXB1dGVkLm1hcCA9IG1hcDsKLSAgICAgICAgRW1D
b21wdXRlZC5zb3J0ID0gc29ydDsKLSAgICAgICAgRW1Db21wdXRlZC5zZXREaWZmID0gc2V0RGlm
ZjsKLSAgICAgICAgRW1Db21wdXRlZC5tYXBCeSA9IG1hcEJ5OwotICAgICAgICBFbUNvbXB1dGVk
Lm1hcFByb3BlcnR5ID0gbWFwUHJvcGVydHk7Ci0gICAgICAgIEVtQ29tcHV0ZWQuZmlsdGVyID0g
ZmlsdGVyOwotICAgICAgICBFbUNvbXB1dGVkLmZpbHRlckJ5ID0gZmlsdGVyQnk7Ci0gICAgICAg
IEVtQ29tcHV0ZWQuZmlsdGVyUHJvcGVydHkgPSBmaWx0ZXJQcm9wZXJ0eTsKLSAgICAgICAgRW1D
b21wdXRlZC51bmlxID0gdW5pcTsKLSAgICAgICAgRW1Db21wdXRlZC51bmlvbiA9IHVuaW9uOwot
ICAgICAgICBFbUNvbXB1dGVkLmludGVyc2VjdCA9IGludGVyc2VjdDsKLQotICAgICAgICBFbWJl
ci5TdHJpbmcgPSBFbWJlclN0cmluZ1V0aWxzOwotICAgICAgICBFbWJlci5PYmplY3QgPSBFbWJl
ck9iamVjdDsKLSAgICAgICAgRW1iZXIuVHJhY2tlZEFycmF5ID0gVHJhY2tlZEFycmF5OwotICAg
ICAgICBFbWJlci5TdWJBcnJheSA9IFN1YkFycmF5OwotICAgICAgICBFbWJlci5Db250YWluZXIg
PSBDb250YWluZXI7Ci0gICAgICAgIEVtYmVyLk5hbWVzcGFjZSA9IE5hbWVzcGFjZTsKLSAgICAg
ICAgRW1iZXIuRW51bWVyYWJsZSA9IEVudW1lcmFibGU7Ci0gICAgICAgIEVtYmVyLkFycmF5UHJv
eHkgPSBBcnJheVByb3h5OwotICAgICAgICBFbWJlci5PYmplY3RQcm94eSA9IE9iamVjdFByb3h5
OwotICAgICAgICBFbWJlci5BY3Rpb25IYW5kbGVyID0gQWN0aW9uSGFuZGxlcjsKLSAgICAgICAg
RW1iZXIuQ29yZU9iamVjdCA9IENvcmVPYmplY3Q7Ci0gICAgICAgIEVtYmVyLkVhY2hBcnJheSA9
IEVhY2hBcnJheTsKLSAgICAgICAgRW1iZXIuRWFjaFByb3h5ID0gRWFjaFByb3h5OwotICAgICAg
ICBFbWJlci5OYXRpdmVBcnJheSA9IE5hdGl2ZUFycmF5OwotICAgICAgICAvLyBFUzZUT0RPOiBD
dXJyZW50bHkgd2UgbXVzdCByZWx5IG9uIHRoZSBnbG9iYWwgZnJvbSBlbWJlci1tZXRhbC9jb3Jl
IHRvIGF2b2lkIGNpcmN1bGFyIGRlcHMKLSAgICAgICAgLy8gRW1iZXIuQSA9IEE7Ci0gICAgICAg
IEVtYmVyLlNldCA9IFNldDsKLSAgICAgICAgRW1iZXIuRGVmZXJyZWQgPSBEZWZlcnJlZDsKLSAg
ICAgICAgRW1iZXIub25Mb2FkID0gb25Mb2FkOwotICAgICAgICBFbWJlci5ydW5Mb2FkSG9va3Mg
PSBydW5Mb2FkSG9va3M7Ci0KLSAgICAgICAgRW1iZXIuQXJyYXlDb250cm9sbGVyID0gQXJyYXlD
b250cm9sbGVyOwotICAgICAgICBFbWJlci5PYmplY3RDb250cm9sbGVyID0gT2JqZWN0Q29udHJv
bGxlcjsKLSAgICAgICAgRW1iZXIuQ29udHJvbGxlciA9IENvbnRyb2xsZXI7Ci0gICAgICAgIEVt
YmVyLkNvbnRyb2xsZXJNaXhpbiA9IENvbnRyb2xsZXJNaXhpbjsKLQotICAgICAgICBFbWJlci5S
U1ZQID0gUlNWUDsKLSAgICAgICAgLy8gRU5EIEVYUE9SVFMKLQotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gRW1iZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1l
L2NvbXBhcmUiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC91dGlscyIs
ICJlbWJlci1ydW50aW1lL21peGlucy9jb21wYXJhYmxlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBmb3IgRW1iZXIuT1JERVJf
REVGSU5JVElPTgotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5Ml9fLnR5cGVPZjsK
LSAgICAgICAgdmFyIENvbXBhcmFibGUgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQot
ICAgICAgICAvLyBVc2VkIGJ5IEVtYmVyLmNvbXBhcmUKLSAgICAgICAgRW1iZXIuT1JERVJfREVG
SU5JVElPTiA9IEVtYmVyLkVOVi5PUkRFUl9ERUZJTklUSU9OIHx8IFsKLSAgICAgICAgJ3VuZGVm
aW5lZCcsCi0gICAgICAgICdudWxsJywKLSAgICAgICAgJ2Jvb2xlYW4nLAotICAgICAgICAnbnVt
YmVyJywKLSAgICAgICAgJ3N0cmluZycsCi0gICAgICAgICdhcnJheScsCi0gICAgICAgICdvYmpl
Y3QnLAotICAgICAgICAnaW5zdGFuY2UnLAotICAgICAgICAnZnVuY3Rpb24nLAotICAgICAgICAn
Y2xhc3MnLAotICAgICAgICAnZGF0ZScKLSAgICAgICAgXTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICBUaGlzIHdpbGwgY29tcGFyZSB0d28gamF2YXNjcmlwdCB2YWx1ZXMgb2YgcG9zc2li
bHkgZGlmZmVyZW50IHR5cGVzLgotICAgICAgICAgICAgIEl0IHdpbGwgdGVsbCB5b3Ugd2hpY2gg
b25lIGlzIGdyZWF0ZXIgdGhhbiB0aGUgb3RoZXIgYnkgcmV0dXJuaW5nOgotCi0gICAgICAgICAg
ICAgIC0gLTEgaWYgdGhlIGZpcnN0IGlzIHNtYWxsZXIgdGhhbiB0aGUgc2Vjb25kLAotICAgICAg
ICAgICAgICAtIDAgaWYgYm90aCBhcmUgZXF1YWwsCi0gICAgICAgICAgICAgIC0gMSBpZiB0aGUg
Zmlyc3QgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQuCi0KLSAgICAgICAgICAgICBUaGUgb3Jk
ZXIgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBgRW1iZXIuT1JERVJfREVGSU5JVElPTmAsIGlmIHR5
cGVzIGFyZSBkaWZmZXJlbnQuCi0gICAgICAgICAgICAgSW4gY2FzZSB0aGV5IGhhdmUgdGhlIHNh
bWUgdHlwZSBhbiBhcHByb3ByaWF0ZSBjb21wYXJpc29uIGZvciB0aGlzIHR5cGUgaXMgbWFkZS4K
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmNvbXBh
cmUoJ2hlbGxvJywgJ2hlbGxvJyk7ICAvLyAwCi0gICAgICAgICAgICAgIEVtYmVyLmNvbXBhcmUo
J2FiYycsICdkZmcnKTsgICAgICAvLyAtMQotICAgICAgICAgICAgICBFbWJlci5jb21wYXJlKDIs
IDEpOyAgICAgICAgICAgICAgLy8gMQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
IEBtZXRob2QgY29tcGFyZQotICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gdiBGaXJzdCB2YWx1ZSB0byBjb21wYXJlCi0gICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IHcgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgICBAcmV0
dXJuIHtOdW1iZXJ9IC0xIGlmIHYgPCB3LCAwIGlmIHYgPSB3IGFuZCAxIGlmIHYgPiB3LgotICAg
ICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGNv
bXBhcmUodiwgdykgewotICAgICAgICAgICAgaWYgKHYgPT09IHcpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHR5cGUxID0gdHlw
ZU9mKHYpOwotICAgICAgICAgICAgdmFyIHR5cGUyID0gdHlwZU9mKHcpOwotCi0gICAgICAgICAg
ICBpZiAoQ29tcGFyYWJsZSkgewotICAgICAgICAgICAgICAgIGlmICh0eXBlMSA9PT0gJ2luc3Rh
bmNlJyAmJiBDb21wYXJhYmxlLmRldGVjdCh2LmNvbnN0cnVjdG9yKSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdi5jb25zdHJ1Y3Rvci5jb21wYXJlKHYsIHcpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlMiA9PT0gJ2luc3RhbmNlJyAmJiBDb21w
YXJhYmxlLmRldGVjdCh3LmNvbnN0cnVjdG9yKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMSAtIHcuY29uc3RydWN0b3IuY29tcGFyZSh3LCB2KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IGdlbmVyYXRl
ZCBhIHJldmVyc2UtbWFwcGluZyBvZiBFbWJlci5PUkRFUl9ERUZJTklUSU9OLAotICAgICAgICAg
ICAgLy8gZG8gc28gbm93LgotICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBFbWJlci5PUkRFUl9E
RUZJTklUSU9OX01BUFBJTkc7Ci0gICAgICAgICAgICBpZiAoIW1hcHBpbmcpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgb3JkZXIgPSBFbWJlci5PUkRFUl9ERUZJTklUSU9OOwotICAgICAgICAgICAg
ICAgIG1hcHBpbmcgPSBFbWJlci5PUkRFUl9ERUZJTklUSU9OX01BUFBJTkcgPSB7fTsKLSAgICAg
ICAgICAgICAgICB2YXIgaWR4LCBsZW47Ci0gICAgICAgICAgICAgICAgZm9yIChpZHggPSAwLCBs
ZW4gPSBvcmRlci5sZW5ndGg7IGlkeCA8IGxlbjsgKytpZHgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbWFwcGluZ1tvcmRlcltpZHhdXSA9IGlkeDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBXZSBubyBsb25nZXIgbmVlZCBFbWJlci5PUkRFUl9ERUZJTklUSU9OLgot
ICAgICAgICAgICAgICAgIGRlbGV0ZSBFbWJlci5PUkRFUl9ERUZJTklUSU9OOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB2YXIgdHlwZTFJbmRleCA9IG1hcHBpbmdbdHlwZTFdOwotICAg
ICAgICAgICAgdmFyIHR5cGUySW5kZXggPSBtYXBwaW5nW3R5cGUyXTsKLQotICAgICAgICAgICAg
aWYgKHR5cGUxSW5kZXggPCB0eXBlMkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGUxSW5kZXggPiB0eXBlMkluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIHR5cGVzIGFyZSBlcXVhbCAtIHNvIHdlIGhhdmUgdG8gY2hlY2sgdmFsdWVzIG5vdwot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlMSkgewotICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6
Ci0gICAgICAgICAgICBjYXNlICdudW1iZXInOgotICAgICAgICAgICAgICAgIGlmICh2IDwgdykg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh2ID4gdykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAg
ICAgIGNhc2UgJ3N0cmluZyc6Ci0gICAgICAgICAgICAgICAgdmFyIGNvbXAgPSB2LmxvY2FsZUNv
bXBhcmUodyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbXAgPCAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbXAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgY2FzZSAnYXJy
YXknOgotICAgICAgICAgICAgICAgIHZhciB2TGVuID0gdi5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgdmFyIHdMZW4gPSB3Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2YXIgbCA9IE1hdGgubWlu
KHZMZW4sIHdMZW4pOwotICAgICAgICAgICAgICAgIHZhciByID0gMDsKLSAgICAgICAgICAgICAg
ICB2YXIgaSA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHIgPT09IDAgJiYgaSA8IGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgciA9IGNvbXBhcmUodltpXSwgd1tpXSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHIg
IT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gYWxsIGVsZW1lbnRzIGFyZSBlcXVhbCBub3cKLSAgICAg
ICAgICAgICAgICAvLyBzaG9ydGVyIGFycmF5IHNob3VsZCBiZSBvcmRlcmVkIGZpcnN0Ci0gICAg
ICAgICAgICAgICAgaWYgKHZMZW4gPCB3TGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZMZW4gPiB3TGVu
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAvLyBhcnJheXMgYXJlIGVxdWFsIG5vdwotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotCi0gICAgICAgICAgICBjYXNlICdpbnN0YW5jZSc6Ci0gICAgICAgICAgICAgICAg
aWYgKENvbXBhcmFibGUgJiYgQ29tcGFyYWJsZS5kZXRlY3QodikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHYuY29tcGFyZSh2LCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2RhdGUnOgotICAgICAgICAg
ICAgICAgIHZhciB2TnVtID0gdi5nZXRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHdOdW0g
PSB3LmdldFRpbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodk51bSA8IHdOdW0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAodk51bSA+IHdOdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2NvbXB1dGVkL2FycmF5
X2NvbXB1dGVkIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItcnVudGltZS9jb21w
dXRlZC9yZWR1Y2VfY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJl
bWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRh
bC9lcnJvciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVu
Y3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIHJlZHVjZUNvbXB1dGVkID0gX19kZXBlbmRlbmN5Ml9fLnJlZHVjZUNvbXB1dGVk
OwotICAgICAgICB2YXIgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTJfXy5S
ZWR1Y2VDb21wdXRlZFByb3BlcnR5OwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5j
eTNfXy5mb3JFYWNoOwotICAgICAgICB2YXIgb19jcmVhdGUgPSBfX2RlcGVuZGVuY3k0X18uY3Jl
YXRlOwotICAgICAgICB2YXIgYWRkT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k1X18uYWRkT2JzZXJ2
ZXI7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07
Ci0KLSAgICAgICAgdmFyIGFfc2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICBmdW5jdGlvbiBB
cnJheUNvbXB1dGVkUHJvcGVydHkoKSB7Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzOwotCi0g
ICAgICAgICAgICBSZWR1Y2VDb21wdXRlZFByb3BlcnR5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
Ci0KLSAgICAgICAgICAgIHRoaXMuZnVuYyA9IChmdW5jdGlvbihyZWR1Y2VGdW5jKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjcC5faGFzSW5zdGFuY2VNZXRhKHRoaXMsIHByb3BlcnR5TmFtZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgcmVjb21wdXRlIGFuIGFycmF5IGNv
bXB1dGVkIHByb3BlcnR5LCB3ZSBuZWVkIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJldHJpZXZlZCBhcnJheXMgdG8gYmUgdXBkYXRlZDsgd2UgY2FuJ3Qgc2ltcGx5IGVtcHR5
IHRoZSBjYWNoZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhvcGUgdGhlIGFycmF5
IGlzIHJlLXJldHJpZXZlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2goY3AuX2Rl
cGVuZGVudEtleXMsIGZ1bmN0aW9uKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE9ic2VydmVyKHRoaXMsIGRlcGVuZGVudEtleSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwLnJlY29tcHV0ZU9uY2UuY2FsbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9KSh0aGlzLmZ1bmMpOwotCi0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIEFycmF5Q29tcHV0ZWRQ
cm9wZXJ0eS5wcm90b3R5cGUgPSBvX2NyZWF0ZShSZWR1Y2VDb21wdXRlZFByb3BlcnR5LnByb3Rv
dHlwZSk7Ci0gICAgICAgIEFycmF5Q29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUuaW5pdGlhbFZh
bHVlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIEVtYmVyLkEoKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgQXJyYXlDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZS5yZXNldFZhbHVl
ID0gZnVuY3Rpb24gKGFycmF5KSB7Ci0gICAgICAgICAgICBhcnJheS5jbGVhcigpOwotICAgICAg
ICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9OwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSBz
dG9wZ2FwIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSBjb3VudHMgY29ycmVjdCB3aXRoIGxhenkgQ1Bz
LgotICAgICAgICBBcnJheUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLmRpZENoYW5nZSA9IGZ1
bmN0aW9uIChvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ3JlYXRlcyBhIGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIG9wZXJhdGVzIG9uIGRlcGVuZGVudCBhcnJheXMgYW5kCi0gICAgICAgICAgICAgIGlz
IHVwZGF0ZWQgd2l0aCAib25lIGF0IGEgdGltZSIgc2VtYW50aWNzLiBXaGVuIGl0ZW1zIGFyZSBh
ZGRlZCBvcgotICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIGRlcGVuZGVudCBhcnJheShz
KSBhbiBhcnJheSBjb21wdXRlZCBvbmx5IG9wZXJhdGVzCi0gICAgICAgICAgICAgIG9uIHRoZSBj
aGFuZ2UgaW5zdGVhZCBvZiByZS1ldmFsdWF0aW5nIHRoZSBlbnRpcmUgYXJyYXkuIFRoaXMgc2hv
dWxkCi0gICAgICAgICAgICAgIHJldHVybiBhbiBhcnJheSwgaWYgeW91J2QgbGlrZSB0byB1c2Ug
Im9uZSBhdCBhIHRpbWUiIHNlbWFudGljcyBhbmQKLSAgICAgICAgICAgICAgY29tcHV0ZSBzb21l
IHZhbHVlIG90aGVyIHRoZW4gYW4gYXJyYXkgbG9vayBhdAotICAgICAgICAgICAgICBgRW1iZXIu
cmVkdWNlQ29tcHV0ZWRgLgotCi0gICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4g
b25lIGFyZ3VtZW50cyB0aGUgZmlyc3QgYXJndW1lbnRzIGFyZQotICAgICAgICAgICAgICBjb25z
aWRlcmVkIHRvIGJlIGRlcGVuZGVudCBwcm9wZXJ0eSBrZXlzLiBUaGUgbGFzdCBhcmd1bWVudCBp
cwotICAgICAgICAgICAgICByZXF1aXJlZCB0byBiZSBhbiBvcHRpb25zIG9iamVjdC4gVGhlIG9w
dGlvbnMgb2JqZWN0IGNhbiBoYXZlIHRoZQotICAgICAgICAgICAgICBmb2xsb3dpbmcgdGhyZWUg
cHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBgaW5pdGlhbGl6ZWAgLSBBbiBvcHRpb25hbCBp
bml0aWFsaXplIGZ1bmN0aW9uLiBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHVzZWQKLSAgICAgICAg
ICAgICAgdG8gc2V0IHVwIHN0YXRlIG9uIHRoZSBpbnN0YW5jZU1ldGEgb2JqZWN0LgotCi0gICAg
ICAgICAgICAgIGByZW1vdmVkSXRlbWAgLSBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGVhY2gg
dGltZSBhbiBlbGVtZW50IGlzCi0gICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgYXJyYXku
Ci0KLSAgICAgICAgICAgICAgYGFkZGVkSXRlbWAgLSBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVk
IGVhY2ggdGltZSBhbiBlbGVtZW50IGlzCi0gICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBhcnJh
eS4KLQotCi0gICAgICAgICAgICAgIFRoZSBgaW5pdGlhbGl6ZWAgZnVuY3Rpb24gaGFzIHRoZSBm
b2xsb3dpbmcgc2lnbmF0dXJlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgZnVuY3Rpb24oYXJyYXksIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGFycmF5YCAtIFRoZSBpbml0aWFsIHZhbHVl
IG9mIHRoZSBhcnJheUNvbXB1dGVkLCBhbiBlbXB0eSBhcnJheS4KLQotICAgICAgICAgICAgICBg
Y2hhbmdlTWV0YWAgLSBBbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgbWV0YSBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUKLSAgICAgICAgICAgICAgY29tcHV0ZWQuIEl0IGNvbnRhaW5zIHRoZSBmb2xsb3dp
bmcgcHJvcGVydGllczoKLQotICAgICAgICAgICAgICAgICAtIGBwcm9wZXJ0eWAgdGhlIGNvbXB1
dGVkIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgIC0gYHByb3BlcnR5TmFtZWAgdGhlIG5hbWUg
b2YgdGhlIHByb3BlcnR5IG9uIHRoZSBvYmplY3QKLQotICAgICAgICAgICAgICBgaW5zdGFuY2VN
ZXRhYCAtIEFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIG1ldGEKLSAgICAgICAg
ICAgICAgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBjYWxjdWxhdGluZyB5b3VyIGNvbXB1dGVkLiBG
b3IgZXhhbXBsZSBhCi0gICAgICAgICAgICAgIHVuaXF1ZSBjb21wdXRlZCBtaWdodCB1c2UgdGhp
cyB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgZ2l2ZW4KLSAgICAgICAgICAgICAgZWxl
bWVudCBpcyBmb3VuZCBpbiB0aGUgZGVwZW5kZW50IGFycmF5LgotCi0KLSAgICAgICAgICAgICAg
VGhlIGByZW1vdmVkSXRlbWAgYW5kIGBhZGRlZEl0ZW1gIGZ1bmN0aW9ucyBib3RoIGhhdmUgdGhl
IGZvbGxvd2luZyBzaWduYXR1cmU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBmdW5jdGlvbihhY2N1bXVsYXRlZFZhbHVlLCBpdGVtLCBjaGFuZ2VNZXRhLCBp
bnN0YW5jZU1ldGEpCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBhY2N1bXVs
YXRlZFZhbHVlYCAtIFRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBsYXN0IHRpbWUKLSAgICAg
ICAgICAgICAgYHJlbW92ZWRJdGVtYCBvciBgYWRkZWRJdGVtYCB3YXMgY2FsbGVkIG9yIGFuIGVt
cHR5IGFycmF5LgotCi0gICAgICAgICAgICAgIGBpdGVtYCAtIHRoZSBlbGVtZW50IGFkZGVkIG9y
IHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkKLQotICAgICAgICAgICAgICBgY2hhbmdlTWV0YWAgLSBB
biBvYmplY3Qgd2hpY2ggY29udGFpbnMgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAgICAg
ICAgICAgICAgY2hhbmdlLiBJdCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0K
LSAgICAgICAgICAgICAgICAtIGBwcm9wZXJ0eWAgdGhlIGNvbXB1dGVkIHByb3BlcnR5Ci0gICAg
ICAgICAgICAgICAgLSBgcHJvcGVydHlOYW1lYCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb24g
dGhlIG9iamVjdAotICAgICAgICAgICAgICAgIC0gYGluZGV4YCB0aGUgaW5kZXggb2YgdGhlIGFk
ZGVkIG9yIHJlbW92ZWQgaXRlbQotICAgICAgICAgICAgICAgIC0gYGl0ZW1gIHRoZSBhZGRlZCBv
ciByZW1vdmVkIGl0ZW06IHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcwotICAgICAgICAgICAg
ICAgICAgdGhlIHNlY29uZCBhcmcKLSAgICAgICAgICAgICAgICAtIGBhcnJheUNoYW5nZWRgIHRo
ZSBhcnJheSB0aGF0IHRyaWdnZXJlZCB0aGUgY2hhbmdlLiBDYW4gYmUKLSAgICAgICAgICAgICAg
ICAgIHVzZWZ1bCB3aGVuIGRlcGVuZGluZyBvbiBtdWx0aXBsZSBhcnJheXMuCi0KLSAgICAgICAg
ICAgICAgRm9yIHByb3BlcnR5IGNoYW5nZXMgdHJpZ2dlcmVkIG9uIGFuIGl0ZW0gcHJvcGVydHkg
Y2hhbmdlICh3aGVuCi0gICAgICAgICAgICAgIGRlcEtleSBpcyBzb21ldGhpbmcgbGlrZSBgc29t
ZUFycmF5LkBlYWNoLnNvbWVQcm9wZXJ0eWApLAotICAgICAgICAgICAgICBgY2hhbmdlTWV0YWAg
d2lsbCBhbHNvIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0eToKLQotICAgICAgICAgICAg
ICAgIC0gYHByZXZpb3VzVmFsdWVzYCBhbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIHByb3Bl
cnRpZXMgdGhhdCBjaGFuZ2VkIG9uCi0gICAgICAgICAgICAgICAgdGhlIGl0ZW0sIGFuZCB3aG9z
ZSB2YWx1ZXMgYXJlIHRoZSBpdGVtJ3MgcHJldmlvdXMgdmFsdWVzLgotCi0gICAgICAgICAgICAg
IGBwcmV2aW91c1ZhbHVlc2AgaXMgaW1wb3J0YW50IEVtYmVyIGNvYWxlc2NlcyBpdGVtIHByb3Bl
cnR5IGNoYW5nZXMgdmlhCi0gICAgICAgICAgICAgIEVtYmVyLnJ1bi5vbmNlLiBUaGlzIG1lYW5z
IHRoYXQgYnkgdGhlIHRpbWUgcmVtb3ZlZEl0ZW0gZ2V0cyBjYWxsZWQsIGl0ZW0gaGFzCi0gICAg
ICAgICAgICAgIHRoZSBuZXcgdmFsdWVzLCBidXQgeW91IG1heSBuZWVkIHRoZSBwcmV2aW91cyB2
YWx1ZSAoZWcgZm9yIHNvcnRpbmcgJgotICAgICAgICAgICAgICBmaWx0ZXJpbmcpLgotCi0gICAg
ICAgICAgICAgIGBpbnN0YW5jZU1ldGFgIC0gQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8g
c3RvcmUgbWV0YQotICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGNhbGN1bGF0
aW5nIHlvdXIgY29tcHV0ZWQuIEZvciBleGFtcGxlIGEKLSAgICAgICAgICAgICAgdW5pcXVlIGNv
bXB1dGVkIG1pZ2h0IHVzZSB0aGlzIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgdGltZXMgYSBnaXZl
bgotICAgICAgICAgICAgICBlbGVtZW50IGlzIGZvdW5kIGluIHRoZSBkZXBlbmRlbnQgYXJyYXku
Ci0KLSAgICAgICAgICAgICAgVGhlIGByZW1vdmVkSXRlbWAgYW5kIGBhZGRlZEl0ZW1gIGZ1bmN0
aW9ucyBzaG91bGQgcmV0dXJuIHRoZSBhY2N1bXVsYXRlZAotICAgICAgICAgICAgICB2YWx1ZS4g
SXQgaXMgYWNjZXB0YWJsZSB0byBub3QgcmV0dXJuIGFueXRoaW5nIChpZSByZXR1cm4gdW5kZWZp
bmVkKQotICAgICAgICAgICAgICB0byBpbnZhbGlkYXRlIHRoZSBjb21wdXRhdGlvbi4gVGhpcyBp
cyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIGZvcgotICAgICAgICAgICAgICBhcnJheUNvbXB1
dGVkIGJ1dCBpdCdzIHVzZWQgaW4gZWcgbWF4IGFuZCBtaW4uCi0KLSAgICAgICAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIu
Y29tcHV0ZWQubWFwID0gZnVuY3Rpb24oZGVwZW5kZW50S2V5LCBjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAgICAgICAgICAgYWRkZWRJdGVtOiBm
dW5jdGlvbihhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBtYXBwZWQgPSBjYWxsYmFjayhpdGVtKTsKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXkuaW5zZXJ0QXQoY2hhbmdlTWV0YS5pbmRleCwgbWFwcGVkKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbihhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwg
aW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5LnJlbW92ZUF0KGNoYW5n
ZU1ldGEuaW5kZXgsIDEpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBFbWJlci5hcnJheUNvbXB1dGVkKGRlcGVuZGVudEtleSwgb3B0aW9ucyk7Ci0gICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgYXJy
YXlDb21wdXRlZAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBbZGVwZW5kZW50S2V5cypdCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBvcHRpb25zCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9
Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBhcnJheUNvbXB1dGVkIChvcHRpb25z
KSB7Ci0gICAgICAgICAgICB2YXIgYXJnczsKLQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgYXJncyA9IGFfc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDAsIC0xKTsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gYV9zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgLTEpWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZW9mIG9w
dGlvbnMgIT09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJy
b3IoIkFycmF5IENvbXB1dGVkIFByb3BlcnR5IGRlY2xhcmVkIHdpdGhvdXQgYW4gb3B0aW9ucyBo
YXNoIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBjcCA9IG5ldyBBcnJheUNv
bXB1dGVkUHJvcGVydHkob3B0aW9ucyk7Ci0KLSAgICAgICAgICAgIGlmIChhcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgY3AucHJvcGVydHkuYXBwbHkoY3AsIGFyZ3MpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNf
Xy5hcnJheUNvbXB1dGVkID0gYXJyYXlDb21wdXRlZDsKLSAgICAgICAgX19leHBvcnRzX18uQXJy
YXlDb21wdXRlZFByb3BlcnR5ID0gQXJyYXlDb21wdXRlZFByb3BlcnR5OwotICAgIH0pOwotICAg
IGRlZmluZSgiZW1iZXItcnVudGltZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWQiLAotICAgIFsi
ZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0
YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2Vycm9y
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIsICJlbWJlci1tZXRhbC9leHBhbmRfcHJv
cGVydGllcyIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIs
ICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwg
ImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3RyYWNrZWRfYXJyYXkiLCAiZW1iZXItcnVudGltZS9taXhp
bnMvYXJyYXkiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0v
c2V0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19k
ZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVu
ZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVu
Y3kxNV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZh
ciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5h
c3NlcnQKLSAgICAgICAgdmFyIGVfZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAg
dmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19k
ZXBlbmRlbmN5NF9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBtZXRhRm9yID0gX19kZXBlbmRlbmN5
NF9fLm1ldGE7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5NV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBwcm9wZXJ0eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3k2X18u
cHJvcGVydHlXaWxsQ2hhbmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2Rl
cGVuZGVuY3k2X18ucHJvcGVydHlEaWRDaGFuZ2U7Ci0gICAgICAgIHZhciBleHBhbmRQcm9wZXJ0
aWVzID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBhZGRPYnNlcnZl
ciA9IF9fZGVwZW5kZW5jeThfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIG9ic2VydmVyc0Zv
ciA9IF9fZGVwZW5kZW5jeThfXy5vYnNlcnZlcnNGb3I7Ci0gICAgICAgIHZhciByZW1vdmVPYnNl
cnZlciA9IF9fZGVwZW5kZW5jeThfXy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIGFkZEJl
Zm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5OF9fLmFkZEJlZm9yZU9ic2VydmVyOwotICAgICAg
ICB2YXIgcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k4X18ucmVtb3ZlQmVmb3Jl
T2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBDb21wdXRlZFByb3BlcnR5ID0gX19kZXBlbmRlbmN5OV9f
LkNvbXB1dGVkUHJvcGVydHk7Ci0gICAgICAgIHZhciBjYWNoZUZvciA9IF9fZGVwZW5kZW5jeTlf
Xy5jYWNoZUZvcjsKLSAgICAgICAgdmFyIG9fY3JlYXRlID0gX19kZXBlbmRlbmN5MTBfXy5jcmVh
dGU7Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5MTFfXy5mb3JFYWNoOwotICAg
ICAgICB2YXIgVHJhY2tlZEFycmF5ID0gX19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5kZW5jeTEzX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTE0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFNl
dCA9IF9fZGVwZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBf
X2RlcGVuZGVuY3k0X18uaXNBcnJheTsKLQotICAgICAgICB2YXIgY2FjaGVTZXQgPSBjYWNoZUZv
ci5zZXQ7Ci0gICAgICAgIHZhciBjYWNoZUdldCA9IGNhY2hlRm9yLmdldDsKLSAgICAgICAgdmFy
IGNhY2hlUmVtb3ZlID0gY2FjaGVGb3IucmVtb3ZlOwotICAgICAgICB2YXIgYV9zbGljZSA9IFtd
LnNsaWNlOwotICAgICAgICAvLyBIZXJlIHdlIGV4cGxpY2l0bHkgZG9uJ3QgYWxsb3cgYEBlYWNo
LmZvb2A7IGl0IHdvdWxkIHJlcXVpcmUgc29tZSBzcGVjaWFsCi0gICAgICAgIC8vIHRlc3Rpbmcs
IGJ1dCB0aGVyZSdzIG5vIHBhcnRpY3VsYXIgcmVhc29uIHdoeSBpdCBzaG91bGQgYmUgZGlzYWxs
b3dlZC4KLSAgICAgICAgdmFyIGVhY2hQcm9wZXJ0eVBhdHRlcm4gPSAvXiguKilcLkBlYWNoXC4o
LiopLzsKLSAgICAgICAgdmFyIGRvdWJsZUVhY2hQcm9wZXJ0eVBhdHRlcm4gPSAvKC4qXC5AZWFj
aCl7Mix9LzsKLSAgICAgICAgdmFyIGFycmF5QnJhY2tldFBhdHRlcm4gPSAvXC5cW1xdJC87Ci0K
LSAgICAgICAgZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7Ci0gICAgICAgICAgICBpZiAoa2V5ID09
PSAnQHRoaXMnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGVfZ2V0KG9iaiwga2V5KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qCi0gICAgICAgICAgICAgIFRyYWNrcyBjaGFuZ2VzIHRvIGRlcGVuZGVudCBhcnJheXMs
IGFzIHdlbGwgYXMgdG8gcHJvcGVydGllcyBvZiBpdGVtcyBpbgotICAgICAgICAgICAgICBkZXBl
bmRlbnQgYXJyYXlzLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBEZXBlbmRlbnRBcnJheXNPYnNl
cnZlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gRGVwZW5kZW50QXJyYXlzT2Jz
ZXJ2ZXIoY2FsbGJhY2tzLCBjcCwgaW5zdGFuY2VNZXRhLCBjb250ZXh0LCBwcm9wZXJ0eU5hbWUs
IHN1Z2FyTWV0YSkgewotICAgICAgICAgICAgLy8gdXNlciBzcGVjaWZpZWQgY2FsbGJhY2tzIGZv
ciBgYWRkZWRJdGVtYCBhbmQgYHJlbW92ZWRJdGVtYAotICAgICAgICAgICAgdGhpcy5jYWxsYmFj
a3MgPSBjYWxsYmFja3M7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBjb21wdXRlZCBwcm9wZXJ0eTog
cmVtZW1iZXIgdGhlc2UgYXJlIHNoYXJlZCBhY3Jvc3MgaW5zdGFuY2VzCi0gICAgICAgICAgICB0
aGlzLmNwID0gY3A7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBSZWR1Y2VDb21wdXRlZFByb3BlcnR5
SW5zdGFuY2VNZXRhIHRoaXMgRGVwZW5kZW50QXJyYXlzT2JzZXJ2ZXIgaXMKLSAgICAgICAgICAg
IC8vIGFzc29jaWF0ZWQgd2l0aAotICAgICAgICAgICAgdGhpcy5pbnN0YW5jZU1ldGEgPSBpbnN0
YW5jZU1ldGE7Ci0KLSAgICAgICAgICAgIC8vIEEgbWFwIG9mIGFycmF5IGd1aWRzIHRvIGRlcGVu
ZGVudEtleXMsIGZvciB0aGUgZ2l2ZW4gY29udGV4dC4gIFdlIHRyYWNrCi0gICAgICAgICAgICAv
LyB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBzZXQgdXAgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHBv
dGVudGlhbGx5IGJlZm9yZSB0aGUKLSAgICAgICAgICAgIC8vIGRlcGVuZGVudCBhcnJheSBldmVu
IGV4aXN0cywgYnV0IHdoZW4gdGhlIGFycmF5IG9ic2VydmVyIGZpcmVzLCB3ZSBsYWNrCi0gICAg
ICAgICAgICAvLyBlbm91Z2ggY29udGV4dCB0byBrbm93IHdoYXQgdG8gdXBkYXRlOiB3ZSBjYW4g
cmVjb3ZlciB0aGF0IGNvbnRleHQgYnkKLSAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIGRlcGVu
ZGVudEtleS4KLSAgICAgICAgICAgIHRoaXMuZGVwZW5kZW50S2V5c0J5R3VpZCA9IHt9OwotCi0g
ICAgICAgICAgICAvLyBhIG1hcCBvZiBkZXBlbmRlbnQgYXJyYXkgZ3VpZHMgLT4gVHJhY2tlZEFy
cmF5IGluc3RhbmNlcy4gIFdlIHVzZQotICAgICAgICAgICAgLy8gdGhpcyB0byBsYXppbHkgcmVj
b21wdXRlIGluZGV4ZXMgZm9yIGl0ZW0gcHJvcGVydHkgb2JzZXJ2ZXJzLgotICAgICAgICAgICAg
dGhpcy50cmFja2VkQXJyYXlzQnlHdWlkID0ge307Ci0KLSAgICAgICAgICAgIC8vIFdlIHN1c3Bl
bmQgb2JzZXJ2ZXJzIHRvIGlnbm9yZSByZXBsYWNlbWVudHMgZnJvbSBgcmVzZXRgIHdoZW4gdG90
YWxseQotICAgICAgICAgICAgLy8gcmVjb21wdXRpbmcuICBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5v
dCBwcm9wZXJseSBzdXNwZW5kIHRoZSBvYnNlcnZlcnMKLSAgICAgICAgICAgIC8vIGJlY2F1c2Ug
d2Ugb25seSBoYXZlIHRoZSBrZXk7IGluc3RlYWQgd2UgbWFrZSB0aGUgb2JzZXJ2ZXJzIG5vLW9w
cwotICAgICAgICAgICAgdGhpcy5zdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8g
VGhpcyBpcyB1c2VkIHRvIGNvYWxlc2NlIGl0ZW0gY2hhbmdlcyBmcm9tIHByb3BlcnR5IG9ic2Vy
dmVycyB3aXRoaW4gYQotICAgICAgICAgICAgLy8gc2luZ2xlIGl0ZW0uCi0gICAgICAgICAgICB0
aGlzLmNoYW5nZWRJdGVtcyA9IHt9OwotICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNv
YWxlc2NlIGl0ZW0gY2hhbmdlcyBmb3IgbXVsdGlwbGUgaXRlbXMgdGhhdCBkZXBlbmQgb24KLSAg
ICAgICAgICAgIC8vIHNvbWUgc2hhcmVkIHN0YXRlLgotICAgICAgICAgICAgdGhpcy5jaGFuZ2Vk
SXRlbUNvdW50ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIEl0ZW1Qcm9wZXJ0
eU9ic2VydmVyQ29udGV4dCAoZGVwZW5kZW50QXJyYXksIGluZGV4LCB0cmFja2VkQXJyYXkpIHsK
LSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiSW50ZXJuYWwgZXJyb3I6IHRyYWNrZWRBcnJheSBp
cyBudWxsIG9yIHVuZGVmaW5lZCIsIHRyYWNrZWRBcnJheSk7Ci0KLSAgICAgICAgICAgIHRoaXMu
ZGVwZW5kZW50QXJyYXkgPSBkZXBlbmRlbnRBcnJheTsKLSAgICAgICAgICAgIHRoaXMuaW5kZXgg
PSBpbmRleDsKLSAgICAgICAgICAgIHRoaXMuaXRlbSA9IGRlcGVuZGVudEFycmF5Lm9iamVjdEF0
KGluZGV4KTsKLSAgICAgICAgICAgIHRoaXMudHJhY2tlZEFycmF5ID0gdHJhY2tlZEFycmF5Owot
ICAgICAgICAgICAgdGhpcy5iZWZvcmVPYnNlcnZlciA9IG51bGw7Ci0gICAgICAgICAgICB0aGlz
Lm9ic2VydmVyID0gbnVsbDsKLQotICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIERlcGVuZGVudEFycmF5c09ic2VydmVyLnByb3RvdHlwZSA9
IHsKLSAgICAgICAgICAgIHNldFZhbHVlOiBmdW5jdGlvbiAobmV3VmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLmluc3RhbmNlTWV0YS5zZXRWYWx1ZShuZXdWYWx1ZSwgdHJ1ZSk7Ci0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZU1ldGEuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHNldHVwT2JzZXJ2ZXJzOiBmdW5jdGlvbiAoZGVwZW5kZW50QXJy
YXksIGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgICAgIHRoaXMuZGVwZW5kZW50S2V5c0J5
R3VpZFtndWlkRm9yKGRlcGVuZGVudEFycmF5KV0gPSBkZXBlbmRlbnRLZXk7Ci0KLSAgICAgICAg
ICAgICAgICBkZXBlbmRlbnRBcnJheS5hZGRBcnJheU9ic2VydmVyKHRoaXMsIHsKLSAgICAgICAg
ICAgICAgICAgICAgd2lsbENoYW5nZTogJ2RlcGVuZGVudEFycmF5V2lsbENoYW5nZScsCi0gICAg
ICAgICAgICAgICAgICAgIGRpZENoYW5nZTogJ2RlcGVuZGVudEFycmF5RGlkQ2hhbmdlJwotICAg
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3AuX2l0ZW1Qcm9w
ZXJ0eUtleXNbZGVwZW5kZW50S2V5XSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVw
UHJvcGVydHlPYnNlcnZlcnMoZGVwZW5kZW50S2V5LCB0aGlzLmNwLl9pdGVtUHJvcGVydHlLZXlz
W2RlcGVuZGVudEtleV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIHRlYXJkb3duT2JzZXJ2ZXJzOiBmdW5jdGlvbiAoZGVwZW5kZW50QXJyYXksIGRl
cGVuZGVudEtleSkgewotICAgICAgICAgICAgICAgIHZhciBpdGVtUHJvcGVydHlLZXlzID0gdGhp
cy5jcC5faXRlbVByb3BlcnR5S2V5c1tkZXBlbmRlbnRLZXldIHx8IFtdOwotCi0gICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuZGVwZW5kZW50S2V5c0J5R3VpZFtndWlkRm9yKGRlcGVuZGVudEFy
cmF5KV07Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnRlYXJkb3duUHJvcGVydHlPYnNlcnZlcnMo
ZGVwZW5kZW50S2V5LCBpdGVtUHJvcGVydHlLZXlzKTsKLQotICAgICAgICAgICAgICAgIGRlcGVu
ZGVudEFycmF5LnJlbW92ZUFycmF5T2JzZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAg
ICB3aWxsQ2hhbmdlOiAnZGVwZW5kZW50QXJyYXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAg
ICAgICAgZGlkQ2hhbmdlOiAnZGVwZW5kZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzdXNwZW5kQXJyYXlPYnNlcnZl
cnM6IGZ1bmN0aW9uIChjYWxsYmFjaywgYmluZGluZykgewotICAgICAgICAgICAgICAgIHZhciBv
bGRTdXNwZW5kZWQgPSB0aGlzLnN1c3BlbmRlZDsKLSAgICAgICAgICAgICAgICB0aGlzLnN1c3Bl
bmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLnN1c3BlbmRlZCA9IG9sZFN1c3BlbmRlZDsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHNldHVwUHJvcGVydHlPYnNlcnZlcnM6IGZ1bmN0aW9uIChkZXBl
bmRlbnRLZXksIGl0ZW1Qcm9wZXJ0eUtleXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVwZW5k
ZW50QXJyYXkgPSBnZXQodGhpcy5pbnN0YW5jZU1ldGEuY29udGV4dCwgZGVwZW5kZW50S2V5KSwK
LSAgICAgICAgICAgICAgICBsZW5ndGggPSBnZXQoZGVwZW5kZW50QXJyYXksICdsZW5ndGgnKSwK
LSAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRleHRzID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0K
LSAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VHJhbnNmb3JtYXRpb25zKGRlcGVuZGVudEtleSwg
b2JzZXJ2ZXJDb250ZXh0cyk7Ci0KLSAgICAgICAgICAgICAgICBmb3JFYWNoKGRlcGVuZGVudEFy
cmF5LCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG9i
c2VydmVyQ29udGV4dCA9IHRoaXMuY3JlYXRlUHJvcGVydHlPYnNlcnZlckNvbnRleHQoZGVwZW5k
ZW50QXJyYXksIGluZGV4LCB0aGlzLnRyYWNrZWRBcnJheXNCeUd1aWRbZGVwZW5kZW50S2V5XSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyQ29udGV4dHNbaW5kZXhdID0gb2JzZXJ2ZXJD
b250ZXh0OwotCi0gICAgICAgICAgICAgICAgICAgIGZvckVhY2goaXRlbVByb3BlcnR5S2V5cywg
ZnVuY3Rpb24gKHByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRCZWZv
cmVPYnNlcnZlcihpdGVtLCBwcm9wZXJ0eUtleSwgdGhpcywgb2JzZXJ2ZXJDb250ZXh0LmJlZm9y
ZU9ic2VydmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKGl0ZW0sIHBy
b3BlcnR5S2V5LCB0aGlzLCBvYnNlcnZlckNvbnRleHQub2JzZXJ2ZXIpOwotICAgICAgICAgICAg
ICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHRlYXJkb3duUHJvcGVydHlPYnNlcnZlcnM6IGZ1bmN0aW9uIChk
ZXBlbmRlbnRLZXksIGl0ZW1Qcm9wZXJ0eUtleXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVw
ZW5kZW50QXJyYXlPYnNlcnZlciA9IHRoaXMsCi0gICAgICAgICAgICAgICAgdHJhY2tlZEFycmF5
ID0gdGhpcy50cmFja2VkQXJyYXlzQnlHdWlkW2RlcGVuZGVudEtleV0sCi0gICAgICAgICAgICAg
ICAgYmVmb3JlT2JzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgb2JzZXJ2ZXIsCi0gICAgICAgICAg
ICAgICAgaXRlbTsKLQotICAgICAgICAgICAgICAgIGlmICghdHJhY2tlZEFycmF5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB0cmFja2VkQXJyYXkuYXBwbHkoZnVuY3Rpb24gKG9ic2VydmVyQ29udGV4dHMsIG9mZnNl
dCwgb3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT09IFRy
YWNrZWRBcnJheS5ERUxFVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZvckVhY2gob2JzZXJ2
ZXJDb250ZXh0cywgZnVuY3Rpb24gKG9ic2VydmVyQ29udGV4dCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZXJDb250ZXh0LmRlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBiZWZvcmVPYnNlcnZlciA9IG9ic2VydmVyQ29udGV4dC5iZWZvcmVPYnNlcnZl
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyID0gb2JzZXJ2ZXJDb250ZXh0Lm9i
c2VydmVyOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG9ic2VydmVyQ29udGV4dC5p
dGVtOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGl0ZW1Qcm9wZXJ0eUtleXMs
IGZ1bmN0aW9uIChwcm9wZXJ0eUtleSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZUJlZm9yZU9ic2VydmVyKGl0ZW0sIHByb3BlcnR5S2V5LCBkZXBlbmRlbnRBcnJheU9ic2Vy
dmVyLCBiZWZvcmVPYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
T2JzZXJ2ZXIoaXRlbSwgcHJvcGVydHlLZXksIGRlcGVuZGVudEFycmF5T2JzZXJ2ZXIsIG9ic2Vy
dmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNy
ZWF0ZVByb3BlcnR5T2JzZXJ2ZXJDb250ZXh0OiBmdW5jdGlvbiAoZGVwZW5kZW50QXJyYXksIGlu
ZGV4LCB0cmFja2VkQXJyYXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJDb250ZXh0
ID0gbmV3IEl0ZW1Qcm9wZXJ0eU9ic2VydmVyQ29udGV4dChkZXBlbmRlbnRBcnJheSwgaW5kZXgs
IHRyYWNrZWRBcnJheSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVByb3BlcnR5T2Jz
ZXJ2ZXIob2JzZXJ2ZXJDb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZl
ckNvbnRleHQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eU9i
c2VydmVyOiBmdW5jdGlvbiAob2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGRlcGVuZGVudEFycmF5T2JzZXJ2ZXIgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgb2JzZXJ2
ZXJDb250ZXh0LmJlZm9yZU9ic2VydmVyID0gZnVuY3Rpb24gKG9iaiwga2V5TmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGVwZW5kZW50QXJyYXlPYnNlcnZlci5pdGVtUHJvcGVy
dHlXaWxsQ2hhbmdlKG9iaiwga2V5TmFtZSwgb2JzZXJ2ZXJDb250ZXh0LmRlcGVuZGVudEFycmF5
LCBvYnNlcnZlckNvbnRleHQpOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
b2JzZXJ2ZXJDb250ZXh0Lm9ic2VydmVyID0gZnVuY3Rpb24gKG9iaiwga2V5TmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGVwZW5kZW50QXJyYXlPYnNlcnZlci5pdGVtUHJvcGVy
dHlEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lLCBvYnNlcnZlckNvbnRleHQuZGVwZW5kZW50QXJyYXks
IG9ic2VydmVyQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHJlc2V0VHJhbnNmb3JtYXRpb25zOiBmdW5jdGlvbiAoZGVwZW5kZW50S2V5
LCBvYnNlcnZlckNvbnRleHRzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFja2VkQXJyYXlz
QnlHdWlkW2RlcGVuZGVudEtleV0gPSBuZXcgVHJhY2tlZEFycmF5KG9ic2VydmVyQ29udGV4dHMp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdHJhY2tBZGQ6IGZ1bmN0aW9uIChkZXBl
bmRlbnRLZXksIGluZGV4LCBuZXdJdGVtcykgewotICAgICAgICAgICAgICAgIHZhciB0cmFja2Vk
QXJyYXkgPSB0aGlzLnRyYWNrZWRBcnJheXNCeUd1aWRbZGVwZW5kZW50S2V5XTsKLSAgICAgICAg
ICAgICAgICBpZiAodHJhY2tlZEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWNrZWRB
cnJheS5hZGRJdGVtcyhpbmRleCwgbmV3SXRlbXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRyYWNrUmVtb3ZlOiBmdW5jdGlvbiAoZGVwZW5kZW50
S2V5LCBpbmRleCwgcmVtb3ZlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyYWNrZWRB
cnJheSA9IHRoaXMudHJhY2tlZEFycmF5c0J5R3VpZFtkZXBlbmRlbnRLZXldOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHRyYWNrZWRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJhY2tlZEFycmF5LnJlbW92ZUl0ZW1zKGluZGV4LCByZW1vdmVkQ291bnQpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHVwZGF0ZUluZGV4ZXM6IGZ1bmN0aW9uICh0cmFja2VkQXJyYXksIGFycmF5
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGdldChhcnJheSwgJ2xlbmd0aCcpOwot
ICAgICAgICAgICAgICAgIC8vIE9QVElNSVpFOiB3ZSBjb3VsZCBzdG9wIHVwZGF0aW5nIG9uY2Ug
d2UgaGl0IHRoZSBvYmplY3Qgd2hvc2Ugb2JzZXJ2ZXIKLSAgICAgICAgICAgICAgICAvLyBmaXJl
ZDsgaWUgcGFydGlhbGx5IGFwcGx5IHRoZSB0cmFuc2Zvcm1hdGlvbnMKLSAgICAgICAgICAgICAg
ICB0cmFja2VkQXJyYXkuYXBwbHkoZnVuY3Rpb24gKG9ic2VydmVyQ29udGV4dHMsIG9mZnNldCwg
b3BlcmF0aW9uLCBvcGVyYXRpb25JbmRleCkgewotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBk
b24ndCBldmVuIGhhdmUgb2JzZXJ2ZXIgY29udGV4dHMgZm9yIHJlbW92ZWQgaXRlbXMsIGV2ZW4g
aWYgd2UgZGlkLAotICAgICAgICAgICAgICAgICAgICAvLyB0aGV5IG5vIGxvbmdlciBoYXZlIGFu
eSBpbmRleCBpbiB0aGUgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9
PT0gVHJhY2tlZEFycmF5LkRFTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRp
b25JbmRleCA9PT0gMCAmJiBvcGVyYXRpb24gPT09IFRyYWNrZWRBcnJheS5SRVRBSU4gJiYgb2Jz
ZXJ2ZXJDb250ZXh0cy5sZW5ndGggPT09IGxlbmd0aCAmJiBvZmZzZXQgPT09IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHVwZGF0ZSBtYW55IGl0ZW1zIHdlIGRvbid0IHdh
bnQgdG8gd2FsayB0aGUgYXJyYXkgZWFjaCB0aW1lOiB3ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgaW5kZXhlcyBhdCBtb3N0IG9uY2UgcGVyIHJ1
biBsb29wLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChvYnNlcnZlckNvbnRleHRzLCBm
dW5jdGlvbiAoY29udGV4dCwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuaW5kZXggPSBpbmRleCArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXBlbmRlbnRB
cnJheVdpbGxDaGFuZ2U6IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheSwgaW5kZXgsIHJlbW92ZWRD
b3VudCwgYWRkZWRDb3VudCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1c3BlbmRlZCkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIHJlbW92ZWRJdGVtID0gdGhpcy5jYWxsYmFja3MucmVtb3ZlZEl0ZW07
Ci0gICAgICAgICAgICAgICAgdmFyIGNoYW5nZU1ldGE7Ci0gICAgICAgICAgICAgICAgdmFyIGd1
aWQgPSBndWlkRm9yKGRlcGVuZGVudEFycmF5KTsKLSAgICAgICAgICAgICAgICB2YXIgZGVwZW5k
ZW50S2V5ID0gdGhpcy5kZXBlbmRlbnRLZXlzQnlHdWlkW2d1aWRdOwotICAgICAgICAgICAgICAg
IHZhciBpdGVtUHJvcGVydHlLZXlzID0gdGhpcy5jcC5faXRlbVByb3BlcnR5S2V5c1tkZXBlbmRl
bnRLZXldIHx8IFtdOwotICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBnZXQoZGVwZW5kZW50
QXJyYXksICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZEluZGV4ID0g
bm9ybWFsaXplSW5kZXgoaW5kZXgsIGxlbmd0aCwgMCk7Ci0gICAgICAgICAgICAgICAgdmFyIG5v
cm1hbGl6ZWRSZW1vdmVDb3VudCA9IG5vcm1hbGl6ZVJlbW92ZUNvdW50KG5vcm1hbGl6ZWRJbmRl
eCwgbGVuZ3RoLCByZW1vdmVkQ291bnQpOwotICAgICAgICAgICAgICAgIHZhciBpdGVtLCBpdGVt
SW5kZXgsIHNsaWNlSW5kZXgsIG9ic2VydmVyQ29udGV4dHM7Ci0KLSAgICAgICAgICAgICAgICBv
YnNlcnZlckNvbnRleHRzID0gdGhpcy50cmFja1JlbW92ZShkZXBlbmRlbnRLZXksIG5vcm1hbGl6
ZWRJbmRleCwgbm9ybWFsaXplZFJlbW92ZUNvdW50KTsKLQotICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIHJlbW92ZU9ic2VydmVycyhwcm9wZXJ0eUtleSkgewotICAgICAgICAgICAgICAgICAgICBv
YnNlcnZlckNvbnRleHRzW3NsaWNlSW5kZXhdLmRlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlbW92ZUJlZm9yZU9ic2VydmVyKGl0ZW0sIHByb3BlcnR5S2V5LCB0aGlzLCBv
YnNlcnZlckNvbnRleHRzW3NsaWNlSW5kZXhdLmJlZm9yZU9ic2VydmVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIoaXRlbSwgcHJvcGVydHlLZXksIHRoaXMsIG9ic2VydmVy
Q29udGV4dHNbc2xpY2VJbmRleF0ub2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGZvciAoc2xpY2VJbmRleCA9IG5vcm1hbGl6ZWRSZW1vdmVDb3VudCAtIDE7
IHNsaWNlSW5kZXggPj0gMDsgLS1zbGljZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0
ZW1JbmRleCA9IG5vcm1hbGl6ZWRJbmRleCArIHNsaWNlSW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVtSW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0g
PSBkZXBlbmRlbnRBcnJheS5vYmplY3RBdChpdGVtSW5kZXgpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvckVhY2goaXRlbVByb3BlcnR5S2V5cywgcmVtb3ZlT2JzZXJ2ZXJzLCB0aGlzKTsKLQot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNZXRhID0gbmV3IENoYW5nZU1ldGEoZGVwZW5kZW50
QXJyYXksIGl0ZW0sIGl0ZW1JbmRleCwgdGhpcy5pbnN0YW5jZU1ldGEucHJvcGVydHlOYW1lLCB0
aGlzLmNwLCBub3JtYWxpemVkUmVtb3ZlQ291bnQpOwotICAgICAgICAgICAgICAgICAgICB0aGlz
LnNldFZhbHVlKCByZW1vdmVkSXRlbS5jYWxsKAotICAgICAgICAgICAgICAgICAgICB0aGlzLmlu
c3RhbmNlTWV0YS5jb250ZXh0LCB0aGlzLmdldFZhbHVlKCksIGl0ZW0sIGNoYW5nZU1ldGEsIHRo
aXMuaW5zdGFuY2VNZXRhLnN1Z2FyTWV0YSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGRlcGVuZGVudEFycmF5RGlkQ2hhbmdlOiBmdW5jdGlvbiAo
ZGVwZW5kZW50QXJyYXksIGluZGV4LCByZW1vdmVkQ291bnQsIGFkZGVkQ291bnQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zdXNwZW5kZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBhZGRlZEl0ZW0g
PSB0aGlzLmNhbGxiYWNrcy5hZGRlZEl0ZW07Ci0gICAgICAgICAgICAgICAgdmFyIGd1aWQgPSBn
dWlkRm9yKGRlcGVuZGVudEFycmF5KTsKLSAgICAgICAgICAgICAgICB2YXIgZGVwZW5kZW50S2V5
ID0gdGhpcy5kZXBlbmRlbnRLZXlzQnlHdWlkW2d1aWRdOwotICAgICAgICAgICAgICAgIHZhciBv
YnNlcnZlckNvbnRleHRzID0gbmV3IEFycmF5KGFkZGVkQ291bnQpOwotICAgICAgICAgICAgICAg
IHZhciBpdGVtUHJvcGVydHlLZXlzID0gdGhpcy5jcC5faXRlbVByb3BlcnR5S2V5c1tkZXBlbmRl
bnRLZXldOwotICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBnZXQoZGVwZW5kZW50QXJyYXks
ICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZEluZGV4ID0gbm9ybWFs
aXplSW5kZXgoaW5kZXgsIGxlbmd0aCwgYWRkZWRDb3VudCk7Ci0gICAgICAgICAgICAgICAgdmFy
IGNoYW5nZU1ldGEsIG9ic2VydmVyQ29udGV4dDsKLQotICAgICAgICAgICAgICAgIGZvckVhY2go
ZGVwZW5kZW50QXJyYXkuc2xpY2Uobm9ybWFsaXplZEluZGV4LCBub3JtYWxpemVkSW5kZXggKyBh
ZGRlZENvdW50KSwgZnVuY3Rpb24gKGl0ZW0sIHNsaWNlSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW1Qcm9wZXJ0eUtleXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
c2VydmVyQ29udGV4dCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRleHRz
W3NsaWNlSW5kZXhdID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVy
dHlPYnNlcnZlckNvbnRleHQoZGVwZW5kZW50QXJyYXksIG5vcm1hbGl6ZWRJbmRleCArIHNsaWNl
SW5kZXgsIHRoaXMudHJhY2tlZEFycmF5c0J5R3VpZFtkZXBlbmRlbnRLZXldKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvckVhY2goaXRlbVByb3BlcnR5S2V5cywgZnVuY3Rpb24gKHByb3Bl
cnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQmVmb3JlT2JzZXJ2ZXIo
aXRlbSwgcHJvcGVydHlLZXksIHRoaXMsIG9ic2VydmVyQ29udGV4dC5iZWZvcmVPYnNlcnZlcik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoaXRlbSwgcHJvcGVydHlL
ZXksIHRoaXMsIG9ic2VydmVyQ29udGV4dC5vYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGNoYW5nZU1ldGEgPSBuZXcgQ2hhbmdlTWV0YShkZXBlbmRlbnRBcnJheSwgaXRlbSwgbm9y
bWFsaXplZEluZGV4ICsgc2xpY2VJbmRleCwgdGhpcy5pbnN0YW5jZU1ldGEucHJvcGVydHlOYW1l
LCB0aGlzLmNwLCBhZGRlZENvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1
ZSggYWRkZWRJdGVtLmNhbGwoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VNZXRh
LmNvbnRleHQsIHRoaXMuZ2V0VmFsdWUoKSwgaXRlbSwgY2hhbmdlTWV0YSwgdGhpcy5pbnN0YW5j
ZU1ldGEuc3VnYXJNZXRhKSk7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLnRyYWNrQWRkKGRlcGVuZGVudEtleSwgbm9ybWFsaXplZEluZGV4LCBvYnNl
cnZlckNvbnRleHRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0
eVdpbGxDaGFuZ2U6IGZ1bmN0aW9uIChvYmosIGtleU5hbWUsIGFycmF5LCBvYnNlcnZlckNvbnRl
eHQpIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3Iob2JqKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jaGFuZ2VkSXRlbXNbZ3VpZF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jaGFuZ2VkSXRlbXNbZ3VpZF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheTogYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRleHQ6
IG9ic2VydmVyQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iajogb2JqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZXM6IHt9Ci0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrdGhpcy5jaGFuZ2Vk
SXRlbUNvdW50OwotCi0gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkSXRlbXNbZ3VpZF0ucHJl
dmlvdXNWYWx1ZXNba2V5TmFtZV0gPSBnZXQob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0eURpZENoYW5nZTogZnVuY3Rpb24ob2JqLCBrZXlO
YW1lLCBhcnJheSwgb2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKC0tdGhp
cy5jaGFuZ2VkSXRlbUNvdW50ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZmx1
c2hDaGFuZ2VzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgZmx1c2hDaGFuZ2VzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2hh
bmdlZEl0ZW1zID0gdGhpcy5jaGFuZ2VkSXRlbXMsIGtleSwgYywgY2hhbmdlTWV0YTsKLQotICAg
ICAgICAgICAgICAgIGZvciAoa2V5IGluIGNoYW5nZWRJdGVtcykgewotICAgICAgICAgICAgICAg
ICAgICBjID0gY2hhbmdlZEl0ZW1zW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjLm9i
c2VydmVyQ29udGV4dC5kZXN0cm95ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy51
cGRhdGVJbmRleGVzKGMub2JzZXJ2ZXJDb250ZXh0LnRyYWNrZWRBcnJheSwgYy5vYnNlcnZlckNv
bnRleHQuZGVwZW5kZW50QXJyYXkpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZU1ldGEg
PSBuZXcgQ2hhbmdlTWV0YShjLmFycmF5LCBjLm9iaiwgYy5vYnNlcnZlckNvbnRleHQuaW5kZXgs
IHRoaXMuaW5zdGFuY2VNZXRhLnByb3BlcnR5TmFtZSwgdGhpcy5jcCwgY2hhbmdlZEl0ZW1zLmxl
bmd0aCwgYy5wcmV2aW91c1ZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFs
dWUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnJlbW92ZWRJdGVtLmNhbGwo
dGhpcy5pbnN0YW5jZU1ldGEuY29udGV4dCwgdGhpcy5nZXRWYWx1ZSgpLCBjLm9iaiwgY2hhbmdl
TWV0YSwgdGhpcy5pbnN0YW5jZU1ldGEuc3VnYXJNZXRhKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuc2V0VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmFkZGVk
SXRlbS5jYWxsKHRoaXMuaW5zdGFuY2VNZXRhLmNvbnRleHQsIHRoaXMuZ2V0VmFsdWUoKSwgYy5v
YmosIGNoYW5nZU1ldGEsIHRoaXMuaW5zdGFuY2VNZXRhLnN1Z2FyTWV0YSkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVtcyA9IHt9OwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUluZGV4KGlu
ZGV4LCBsZW5ndGgsIG5ld0l0ZW1zT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAw
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGxlbmd0aCArIGluZGV4KTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgLyogaW5kZXggPiBsZW5ndGggKi8K
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4obGVuZ3RoIC0g
bmV3SXRlbXNPZmZzZXQsIGluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVJlbW92ZUNvdW50KGluZGV4LCBsZW5ndGgsIHJlbW92ZWRD
b3VudCkgewotICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHJlbW92ZWRDb3VudCwgbGVuZ3Ro
IC0gaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gQ2hhbmdlTWV0YShkZXBl
bmRlbnRBcnJheSwgaXRlbSwgaW5kZXgsIHByb3BlcnR5TmFtZSwgcHJvcGVydHksIGNoYW5nZWRD
b3VudCwgcHJldmlvdXNWYWx1ZXMpIHsKLSAgICAgICAgICAgIHRoaXMuYXJyYXlDaGFuZ2VkID0g
ZGVwZW5kZW50QXJyYXk7Ci0gICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICAg
ICAgICB0aGlzLml0ZW0gPSBpdGVtOwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBw
cm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7Ci0gICAg
ICAgICAgICB0aGlzLmNoYW5nZWRDb3VudCA9IGNoYW5nZWRDb3VudDsKLQotICAgICAgICAgICAg
aWYgKHByZXZpb3VzVmFsdWVzKSB7Ci0gICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgdmFsdWVz
IG9ubHkgYXZhaWxhYmxlIGZvciBpdGVtIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgICAgICAg
ICB0aGlzLnByZXZpb3VzVmFsdWVzID0gcHJldmlvdXNWYWx1ZXM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhZGRJdGVtcyAoZGVwZW5kZW50QXJyYXksIGNh
bGxiYWNrcywgY3AsIHByb3BlcnR5TmFtZSwgbWV0YSkgewotICAgICAgICAgICAgZm9yRWFjaChk
ZXBlbmRlbnRBcnJheSwgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
bWV0YS5zZXRWYWx1ZSggY2FsbGJhY2tzLmFkZGVkSXRlbS5jYWxsKAotICAgICAgICAgICAgICAg
IHRoaXMsIG1ldGEuZ2V0VmFsdWUoKSwgaXRlbSwgbmV3IENoYW5nZU1ldGEoZGVwZW5kZW50QXJy
YXksIGl0ZW0sIGluZGV4LCBwcm9wZXJ0eU5hbWUsIGNwLCBkZXBlbmRlbnRBcnJheS5sZW5ndGgp
LCBtZXRhLnN1Z2FyTWV0YSkpOwotICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiByZXNldChjcCwgcHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICB2
YXIgY2FsbGJhY2tzID0gY3AuX2NhbGxiYWNrcygpLAotICAgICAgICAgICAgbWV0YTsKLQotICAg
ICAgICAgICAgaWYgKGNwLl9oYXNJbnN0YW5jZU1ldGEodGhpcywgcHJvcGVydHlOYW1lKSkgewot
ICAgICAgICAgICAgICAgIG1ldGEgPSBjcC5faW5zdGFuY2VNZXRhKHRoaXMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgICAgICAgICAgbWV0YS5zZXRWYWx1ZShjcC5yZXNldFZhbHVlKG1ldGEuZ2V0
VmFsdWUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZXRhID0g
Y3AuX2luc3RhbmNlTWV0YSh0aGlzLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoY3Aub3B0aW9ucy5pbml0aWFsaXplKSB7Ci0gICAgICAgICAgICAgICAg
Y3Aub3B0aW9ucy5pbml0aWFsaXplLmNhbGwodGhpcywgbWV0YS5nZXRWYWx1ZSgpLCB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5OiBjcCwKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lOiBwcm9wZXJ0eU5hbWUgCi0gICAgICAgICAgICAgICAgfSwgbWV0YS5zdWdhck1ldGEp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFydGlhbGx5
UmVjb21wdXRlRm9yKG9iaiwgZGVwZW5kZW50S2V5KSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlC
cmFja2V0UGF0dGVybi50ZXN0KGRlcGVuZGVudEtleSkpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldChv
YmosIGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAgICByZXR1cm4gRW1iZXJBcnJheS5kZXRlY3Qo
dmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gUmVkdWNlQ29tcHV0ZWRQcm9w
ZXJ0eUluc3RhbmNlTWV0YShjb250ZXh0LCBwcm9wZXJ0eU5hbWUsIGluaXRpYWxWYWx1ZSkgewot
ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgICAgIHRoaXMucHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgdGhpcy5jYWNoZSA9IG1ldGFG
b3IoY29udGV4dCkuY2FjaGU7Ci0KLSAgICAgICAgICAgIHRoaXMuZGVwZW5kZW50QXJyYXlzID0g
e307Ci0gICAgICAgICAgICB0aGlzLnN1Z2FyTWV0YSA9IHt9OwotCi0gICAgICAgICAgICB0aGlz
LmluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZHVj
ZUNvbXB1dGVkUHJvcGVydHlJbnN0YW5jZU1ldGEucHJvdG90eXBlID0gewotICAgICAgICAgICAg
Z2V0VmFsdWU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjYWNo
ZUdldCh0aGlzLmNhY2hlLCB0aGlzLnByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmluaXRpYWxWYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24obmV3VmFsdWUsIHRyaWdnZXJPYnNlcnZlcnMp
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGxldHMgc3VnYXJzIGZvcmNlIGEgcmVjb21wdXRh
dGlvbiwgaGFuZHkgZm9yIHZlcnkgc2ltcGxlCi0gICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50
YXRpb25zIG9mIGVnIG1heC4KLSAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IGNhY2hl
R2V0KHRoaXMuY2FjaGUsIHRoaXMucHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRyaWdn
ZXJPYnNlcnZlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRo
aXMuY29udGV4dCwgdGhpcy5wcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhY2hlUmVtb3ZlKHRoaXMuY2FjaGUsIHRoaXMucHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjYWNoZVNldCh0aGlzLmNh
Y2hlLCB0aGlzLnByb3BlcnR5TmFtZSwgbmV3VmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyT2JzZXJ2ZXJzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aG9zZSBkZXBlbmRlbnQga2V5
cyBhcmUgYXJyYXlzIGFuZCB3aGljaCBpcyB1cGRhdGVkIHdpdGgKLSAgICAgICAgICAgICAgIm9u
ZSBhdCBhIHRpbWUiIHNlbWFudGljcy4KLQotICAgICAgICAgICAgICBAY2xhc3MgUmVkdWNlQ29t
cHV0ZWRQcm9wZXJ0eQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAg
ICAgIEBleHRlbmRzIEVtYmVyLkNvbXB1dGVkUHJvcGVydHkKLSAgICAgICAgICAgICAgQGNvbnN0
cnVjdG9yCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIF9fZXhwb3J0c19fLlJlZHVjZUNvbXB1
dGVkUHJvcGVydHkgPSBSZWR1Y2VDb21wdXRlZFByb3BlcnR5OwotICAgICAgICAvLyBUT0RPOiBk
ZWZhdWx0IGV4cG9ydAotICAgICAgICBmdW5jdGlvbiBSZWR1Y2VDb21wdXRlZFByb3BlcnR5KG9w
dGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBjcCA9IHRoaXM7Ci0KLSAgICAgICAgICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICAgICAgICAgIHRoaXMuX2RlcGVuZGVudEtleXMgPSBu
dWxsOwotICAgICAgICAgICAgLy8gQSBtYXAgb2YgZGVwZW5kZW50S2V5IC0+IFtpdGVtUHJvcGVy
dHksIC4uLl0gdGhhdCB0cmFja3Mgd2hhdCBwcm9wZXJ0aWVzIG9mCi0gICAgICAgICAgICAvLyBp
dGVtcyBpbiB0aGUgYXJyYXkgd2UgbXVzdCB0cmFjayB0byB1cGRhdGUgdGhpcyBwcm9wZXJ0eS4K
LSAgICAgICAgICAgIHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXMgPSB7fTsKLSAgICAgICAgICAgIHRo
aXMuX3ByZXZpb3VzSXRlbVByb3BlcnR5S2V5cyA9IHt9OwotCi0gICAgICAgICAgICB0aGlzLnJl
YWRPbmx5KCk7Ci0gICAgICAgICAgICB0aGlzLmNhY2hlYWJsZSgpOwotCi0gICAgICAgICAgICB0
aGlzLnJlY29tcHV0ZU9uY2UgPSBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGF0IHdlIHJlYWxseSB3YW50IHRvIGRvIGlzIGNvYWxlc2NlIGJ5IDxjcCwgcHJv
cGVydHlOYW1lPi4KLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIGEgZm9ybSBvZiBgc2NoZWR1
bGVPbmNlYCB0aGF0IGFjY2VwdHMgYW4gYXJiaXRyYXJ5IHRva2VuIHRvCi0gICAgICAgICAgICAg
ICAgLy8gY29hbGVzY2UgYnksIGluIGFkZGl0aW9uIHRvIHRoZSB0YXJnZXQgYW5kIG1ldGhvZC4K
LSAgICAgICAgICAgICAgICBydW4ub25jZSh0aGlzLCByZWNvbXB1dGUsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdmFyIHJlY29tcHV0ZSA9IGZ1bmN0aW9uKHBy
b3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRLZXlzID0gY3AuX2Rl
cGVuZGVudEtleXMsCi0gICAgICAgICAgICAgICAgbWV0YSA9IGNwLl9pbnN0YW5jZU1ldGEodGhp
cywgcHJvcGVydHlOYW1lKSwKLSAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBjcC5fY2FsbGJh
Y2tzKCk7Ci0KLSAgICAgICAgICAgICAgICByZXNldC5jYWxsKHRoaXMsIGNwLCBwcm9wZXJ0eU5h
bWUpOwotCi0gICAgICAgICAgICAgICAgbWV0YS5kZXBlbmRlbnRBcnJheXNPYnNlcnZlci5zdXNw
ZW5kQXJyYXlPYnNlcnZlcnMoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICBmb3JF
YWNoKGNwLl9kZXBlbmRlbnRLZXlzLCBmdW5jdGlvbiAoZGVwZW5kZW50S2V5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAi
ZGVwZW5kZW50IGFycmF5ICIgKyBkZXBlbmRlbnRLZXkgKyAiIG11c3QgYmUgYW4gYEVtYmVyLkFy
cmF5YC4gICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIklmIHlvdSBhcmUgbm90IGV4dGVu
ZGluZyBhcnJheXMsIHlvdSB3aWxsIG5lZWQgdG8gd3JhcCBuYXRpdmUgYXJyYXlzIHdpdGggYEVt
YmVyLkFgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICEoaXNBcnJheShnZXQodGhpcywgZGVw
ZW5kZW50S2V5KSkgJiYgIUVtYmVyQXJyYXkuZGV0ZWN0KGdldCh0aGlzLCBkZXBlbmRlbnRLZXkp
KSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnRpYWxseVJlY29tcHV0ZUZv
cih0aGlzLCBkZXBlbmRlbnRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZGVwZW5kZW50QXJyYXkgPSBnZXQodGhpcywgZGVwZW5kZW50S2V5KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzRGVwZW5kZW50QXJyYXkgPSBtZXRhLmRlcGVuZGVudEFy
cmF5c1tkZXBlbmRlbnRLZXldOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5k
ZW50QXJyYXkgPT09IHByZXZpb3VzRGVwZW5kZW50QXJyYXkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgYXJyYXkgbWF5IGJlIHRoZSBzYW1lLCBidXQgb3VyIGl0ZW0gcHJv
cGVydHkga2V5cyBtYXkgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5n
ZWQsIHNvIHdlIHNldCB0aGVtIHVwIGFnYWluLiAgV2UgY2FuJ3QgZWFzaWx5IHRlbGwgaWYgdGhl
eSd2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZWQ6IHRoZSBhcnJheSBt
YXkgYmUgdGhlIHNhbWUgb2JqZWN0LCBidXQgd2l0aCBkaWZmZXJlbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb250ZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY3AuX3ByZXZpb3VzSXRlbVByb3BlcnR5S2V5c1tkZXBlbmRlbnRLZXldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjcC5fcHJldmlvdXNJdGVtUHJvcGVydHlL
ZXlzW2RlcGVuZGVudEtleV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEu
ZGVwZW5kZW50QXJyYXlzT2JzZXJ2ZXIuc2V0dXBQcm9wZXJ0eU9ic2VydmVycyhkZXBlbmRlbnRL
ZXksIGNwLl9pdGVtUHJvcGVydHlLZXlzW2RlcGVuZGVudEtleV0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0YS5kZXBlbmRlbnRBcnJheXNbZGVwZW5kZW50S2V5XSA9
IGRlcGVuZGVudEFycmF5OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZp
b3VzRGVwZW5kZW50QXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0
YS5kZXBlbmRlbnRBcnJheXNPYnNlcnZlci50ZWFyZG93bk9ic2VydmVycyhwcmV2aW91c0RlcGVu
ZGVudEFycmF5LCBkZXBlbmRlbnRLZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbnRBcnJheSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLmRlcGVuZGVudEFycmF5c09ic2VydmVy
LnNldHVwT2JzZXJ2ZXJzKGRlcGVuZGVudEFycmF5LCBkZXBlbmRlbnRLZXkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAg
ICAgICAgICAgICBmb3JFYWNoKGNwLl9kZXBlbmRlbnRLZXlzLCBmdW5jdGlvbihkZXBlbmRlbnRL
ZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJ0aWFsbHlSZWNvbXB1dGVGb3IodGhp
cywgZGVwZW5kZW50S2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlcGVuZGVudEFy
cmF5ID0gZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChk
ZXBlbmRlbnRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbXMuY2FsbCh0
aGlzLCBkZXBlbmRlbnRBcnJheSwgY2FsbGJhY2tzLCBjcCwgcHJvcGVydHlOYW1lLCBtZXRhKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAg
ICAgICAgfTsKLQotCi0gICAgICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jdGlvbiAocHJvcGVydHlO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJDb21wdXRlZCByZWR1Y2UgdmFs
dWVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIGRlcGVuZGVudCBrZXkiLCBjcC5fZGVwZW5kZW50S2V5
cyk7Ci0KLSAgICAgICAgICAgICAgICByZWNvbXB1dGUuY2FsbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNwLl9pbnN0YW5jZU1ldGEodGhpcywgcHJvcGVy
dHlOYW1lKS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlID0gb19jcmVhdGUoQ29tcHV0ZWRQcm9w
ZXJ0eS5wcm90b3R5cGUpOwotCi0gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhjb21w
dXRlZFZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRWYWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLl9jYWxsYmFja3Mg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7Ci0gICAgICAgICAgICAgICAg
dGhpcy5jYWxsYmFja3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBvcHRp
b25zLnJlbW92ZWRJdGVtIHx8IGRlZmF1bHRDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAg
YWRkZWRJdGVtOiBvcHRpb25zLmFkZGVkSXRlbSB8fCBkZWZhdWx0Q2FsbGJhY2sKLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbGJh
Y2tzOwotICAgICAgICB9OwotCi0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90
eXBlLl9oYXNJbnN0YW5jZU1ldGEgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcGVydHlOYW1lKSB7
Ci0gICAgICAgICAgICByZXR1cm4gISFtZXRhRm9yKGNvbnRleHQpLmNhY2hlTWV0YVtwcm9wZXJ0
eU5hbWVdOwotICAgICAgICB9OwotCi0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJv
dG90eXBlLl9pbnN0YW5jZU1ldGEgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcGVydHlOYW1lKSB7
Ci0gICAgICAgICAgICB2YXIgY2FjaGVNZXRhID0gbWV0YUZvcihjb250ZXh0KS5jYWNoZU1ldGEs
Ci0gICAgICAgICAgICBtZXRhID0gY2FjaGVNZXRhW3Byb3BlcnR5TmFtZV07Ci0KLSAgICAgICAg
ICAgIGlmICghbWV0YSkgewotICAgICAgICAgICAgICAgIG1ldGEgPSBjYWNoZU1ldGFbcHJvcGVy
dHlOYW1lXSA9IG5ldyBSZWR1Y2VDb21wdXRlZFByb3BlcnR5SW5zdGFuY2VNZXRhKGNvbnRleHQs
IHByb3BlcnR5TmFtZSwgdGhpcy5pbml0aWFsVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgbWV0
YS5kZXBlbmRlbnRBcnJheXNPYnNlcnZlciA9IG5ldyBEZXBlbmRlbnRBcnJheXNPYnNlcnZlcih0
aGlzLl9jYWxsYmFja3MoKSwgdGhpcywgbWV0YSwgY29udGV4dCwgcHJvcGVydHlOYW1lLCBtZXRh
LnN1Z2FyTWV0YSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtZXRhOwot
ICAgICAgICB9OwotCi0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLmlu
aXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5v
cHRpb25zLmluaXRpYWxWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm9wdGlvbnMuaW5pdGlhbFZhbHVlKCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaW5pdGlhbFZhbHVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJv
dG90eXBlLnJlc2V0VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmluaXRpYWxWYWx1ZSgpOwotICAgICAgICB9OwotCi0gICAgICAgIFJlZHVjZUNvbXB1
dGVkUHJvcGVydHkucHJvdG90eXBlLml0ZW1Qcm9wZXJ0eUtleSA9IGZ1bmN0aW9uIChkZXBlbmRl
bnRBcnJheUtleSwgaXRlbVByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICB0aGlzLl9pdGVtUHJv
cGVydHlLZXlzW2RlcGVuZGVudEFycmF5S2V5XSA9IHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVw
ZW5kZW50QXJyYXlLZXldIHx8IFtdOwotICAgICAgICAgICAgdGhpcy5faXRlbVByb3BlcnR5S2V5
c1tkZXBlbmRlbnRBcnJheUtleV0ucHVzaChpdGVtUHJvcGVydHlLZXkpOwotICAgICAgICB9Owot
Ci0gICAgICAgIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLmNsZWFySXRlbVByb3Bl
cnR5S2V5cyA9IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheUtleSkgewotICAgICAgICAgICAgaWYg
KHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50QXJyYXlLZXldKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fcHJldmlvdXNJdGVtUHJvcGVydHlLZXlzW2RlcGVuZGVudEFycmF5S2V5XSA9
IHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50QXJyYXlLZXldOwotICAgICAgICAgICAg
ICAgIHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50QXJyYXlLZXldID0gW107Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5w
cm90b3R5cGUucHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY3AgPSB0
aGlzLAotICAgICAgICAgICAgYXJncyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMpLAotICAgICAg
ICAgICAgcHJvcGVydHlBcmdzID0gbmV3IFNldCgpLAotICAgICAgICAgICAgbWF0Y2gsCi0gICAg
ICAgICAgICBkZXBlbmRlbnRBcnJheUtleSwKLSAgICAgICAgICAgIGl0ZW1Qcm9wZXJ0eUtleTsK
LQotICAgICAgICAgICAgZm9yRWFjaChhcmdzLCBmdW5jdGlvbiAoZGVwZW5kZW50S2V5KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRvdWJsZUVhY2hQcm9wZXJ0eVBhdHRlcm4udGVzdChkZXBlbmRl
bnRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJOZXN0
ZWQgQGVhY2ggcHJvcGVydGllcyBub3Qgc3VwcG9ydGVkOiAiICsgZGVwZW5kZW50S2V5KTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gZWFjaFByb3BlcnR5UGF0dGVybi5leGVj
KGRlcGVuZGVudEtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50QXJyYXlLZXkg
PSBtYXRjaFsxXTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVByb3BlcnR5S2V5UGF0
dGVybiA9IG1hdGNoWzJdLAotICAgICAgICAgICAgICAgICAgICBhZGRJdGVtUHJvcGVydHlLZXkg
PSBmdW5jdGlvbiAoaXRlbVByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
cC5pdGVtUHJvcGVydHlLZXkoZGVwZW5kZW50QXJyYXlLZXksIGl0ZW1Qcm9wZXJ0eUtleSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAgZXhwYW5kUHJvcGVy
dGllcyhpdGVtUHJvcGVydHlLZXlQYXR0ZXJuLCBhZGRJdGVtUHJvcGVydHlLZXkpOwotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eUFyZ3MuYWRkKGRlcGVuZGVudEFycmF5S2V5KTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFyZ3MuYWRk
KGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgIHJldHVybiBDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZS5wcm9wZXJ0eS5hcHBs
eSh0aGlzLCBwcm9wZXJ0eUFyZ3MudG9BcnJheSgpKTsKLQotICAgICAgICB9OwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBDcmVhdGVzIGEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggb3Bl
cmF0ZXMgb24gZGVwZW5kZW50IGFycmF5cyBhbmQKLSAgICAgICAgICAgICAgaXMgdXBkYXRlZCB3
aXRoICJvbmUgYXQgYSB0aW1lIiBzZW1hbnRpY3MuIFdoZW4gaXRlbXMgYXJlIGFkZGVkIG9yCi0g
ICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5KHMpIGEgcmVkdWNl
IGNvbXB1dGVkIG9ubHkgb3BlcmF0ZXMKLSAgICAgICAgICAgICAgb24gdGhlIGNoYW5nZSBpbnN0
ZWFkIG9mIHJlLWV2YWx1YXRpbmcgdGhlIGVudGlyZSBhcnJheS4KLQotICAgICAgICAgICAgICBJ
ZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudHMgdGhlIGZpcnN0IGFyZ3VtZW50cyBh
cmUKLSAgICAgICAgICAgICAgY29uc2lkZXJlZCB0byBiZSBkZXBlbmRlbnQgcHJvcGVydHkga2V5
cy4gVGhlIGxhc3QgYXJndW1lbnQgaXMKLSAgICAgICAgICAgICAgcmVxdWlyZWQgdG8gYmUgYW4g
b3B0aW9ucyBvYmplY3QuIFRoZSBvcHRpb25zIG9iamVjdCBjYW4gaGF2ZSB0aGUKLSAgICAgICAg
ICAgICAgZm9sbG93aW5nIGZvdXIgcHJvcGVydGllczoKLQotICAgICAgICAgICAgICBgaW5pdGlh
bFZhbHVlYCAtIEEgdmFsdWUgb3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGlu
aXRpYWwKLSAgICAgICAgICAgICAgdmFsdWUgZm9yIHRoZSBjb21wdXRlZC4gSWYgdGhpcyBwcm9w
ZXJ0eSBpcyBhIGZ1bmN0aW9uIHRoZSByZXN1bHQgb2YgY2FsbGluZwotICAgICAgICAgICAgICB0
aGUgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLiBUaGlzIHByb3Bl
cnR5IGlzIHJlcXVpcmVkLgotCi0gICAgICAgICAgICAgIGBpbml0aWFsaXplYCAtIEFuIG9wdGlv
bmFsIGluaXRpYWxpemUgZnVuY3Rpb24uIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdXNlZAotICAg
ICAgICAgICAgICB0byBzZXQgdXAgc3RhdGUgb24gdGhlIGluc3RhbmNlTWV0YSBvYmplY3QuCi0K
LSAgICAgICAgICAgICAgYHJlbW92ZWRJdGVtYCAtIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQg
ZWFjaCB0aW1lIGFuIGVsZW1lbnQgaXMgcmVtb3ZlZAotICAgICAgICAgICAgICBmcm9tIHRoZSBh
cnJheS4KLQotICAgICAgICAgICAgICBgYWRkZWRJdGVtYCAtIEEgZnVuY3Rpb24gdGhhdCBpcyBj
YWxsZWQgZWFjaCB0aW1lIGFuIGVsZW1lbnQgaXMgYWRkZWQgdG8KLSAgICAgICAgICAgICAgdGhl
IGFycmF5LgotCi0KLSAgICAgICAgICAgICAgVGhlIGBpbml0aWFsaXplYCBmdW5jdGlvbiBoYXMg
dGhlIGZvbGxvd2luZyBzaWduYXR1cmU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBmdW5jdGlvbihpbml0aWFsVmFsdWUsIGNoYW5nZU1ldGEsIGluc3RhbmNl
TWV0YSkKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGluaXRpYWxWYWx1ZWAg
LSBUaGUgdmFsdWUgb2YgdGhlIGBpbml0aWFsVmFsdWVgIHByb3BlcnR5IGZyb20gdGhlCi0gICAg
ICAgICAgICAgIG9wdGlvbnMgb2JqZWN0LgotCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCAt
IEFuIG9iamVjdCB3aGljaCBjb250YWlucyBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAg
ICAgICAgICAgICBjb21wdXRlZC4gSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVz
OgotCi0gICAgICAgICAgICAgICAgIC0gYHByb3BlcnR5YCB0aGUgY29tcHV0ZWQgcHJvcGVydHkK
LSAgICAgICAgICAgICAgICAgLSBgcHJvcGVydHlOYW1lYCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVy
dHkgb24gdGhlIG9iamVjdAotCi0gICAgICAgICAgICAgIGBpbnN0YW5jZU1ldGFgIC0gQW4gb2Jq
ZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgbWV0YQotICAgICAgICAgICAgICBpbmZvcm1h
dGlvbiBuZWVkZWQgZm9yIGNhbGN1bGF0aW5nIHlvdXIgY29tcHV0ZWQuIEZvciBleGFtcGxlIGEK
LSAgICAgICAgICAgICAgdW5pcXVlIGNvbXB1dGVkIG1pZ2h0IHVzZSB0aGlzIHRvIHN0b3JlIHRo
ZSBudW1iZXIgb2YgdGltZXMgYSBnaXZlbgotICAgICAgICAgICAgICBlbGVtZW50IGlzIGZvdW5k
IGluIHRoZSBkZXBlbmRlbnQgYXJyYXkuCi0KLQotICAgICAgICAgICAgICBUaGUgYHJlbW92ZWRJ
dGVtYCBhbmQgYGFkZGVkSXRlbWAgZnVuY3Rpb25zIGJvdGggaGF2ZSB0aGUgZm9sbG93aW5nIHNp
Z25hdHVyZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGZ1
bmN0aW9uKGFjY3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGFjY3VtdWxhdGVkVmFsdWVgIC0g
VGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGxhc3QgdGltZQotICAgICAgICAgICAgICBgcmVt
b3ZlZEl0ZW1gIG9yIGBhZGRlZEl0ZW1gIHdhcyBjYWxsZWQgb3IgYGluaXRpYWxWYWx1ZWAuCi0K
LSAgICAgICAgICAgICAgYGl0ZW1gIC0gdGhlIGVsZW1lbnQgYWRkZWQgb3IgcmVtb3ZlZCBmcm9t
IHRoZSBhcnJheQotCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCAtIEFuIG9iamVjdCB3aGlj
aCBjb250YWlucyBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgICAgICAgICAgICBjaGFu
Z2UuIEl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLQotICAgICAgICAgICAg
ICAgIC0gYHByb3BlcnR5YCB0aGUgY29tcHV0ZWQgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAt
IGBwcm9wZXJ0eU5hbWVgIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0Ci0g
ICAgICAgICAgICAgICAgLSBgaW5kZXhgIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgb3IgcmVtb3Zl
ZCBpdGVtCi0gICAgICAgICAgICAgICAgLSBgaXRlbWAgdGhlIGFkZGVkIG9yIHJlbW92ZWQgaXRl
bTogdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICB0aGUgc2Vj
b25kIGFyZwotICAgICAgICAgICAgICAgIC0gYGFycmF5Q2hhbmdlZGAgdGhlIGFycmF5IHRoYXQg
dHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIENhbiBiZQotICAgICAgICAgICAgICAgICAgdXNlZnVsIHdo
ZW4gZGVwZW5kaW5nIG9uIG11bHRpcGxlIGFycmF5cy4KLQotICAgICAgICAgICAgICBGb3IgcHJv
cGVydHkgY2hhbmdlcyB0cmlnZ2VyZWQgb24gYW4gaXRlbSBwcm9wZXJ0eSBjaGFuZ2UgKHdoZW4K
LSAgICAgICAgICAgICAgZGVwS2V5IGlzIHNvbWV0aGluZyBsaWtlIGBzb21lQXJyYXkuQGVhY2gu
c29tZVByb3BlcnR5YCksCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCB3aWxsIGFsc28gY29u
dGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnR5OgotCi0gICAgICAgICAgICAgICAgLSBgcHJldmlv
dXNWYWx1ZXNgIGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgcHJvcGVydGllcyB0aGF0IGNo
YW5nZWQgb24KLSAgICAgICAgICAgICAgICB0aGUgaXRlbSwgYW5kIHdob3NlIHZhbHVlcyBhcmUg
dGhlIGl0ZW0ncyBwcmV2aW91cyB2YWx1ZXMuCi0KLSAgICAgICAgICAgICAgYHByZXZpb3VzVmFs
dWVzYCBpcyBpbXBvcnRhbnQgRW1iZXIgY29hbGVzY2VzIGl0ZW0gcHJvcGVydHkgY2hhbmdlcyB2
aWEKLSAgICAgICAgICAgICAgRW1iZXIucnVuLm9uY2UuIFRoaXMgbWVhbnMgdGhhdCBieSB0aGUg
dGltZSByZW1vdmVkSXRlbSBnZXRzIGNhbGxlZCwgaXRlbSBoYXMKLSAgICAgICAgICAgICAgdGhl
IG5ldyB2YWx1ZXMsIGJ1dCB5b3UgbWF5IG5lZWQgdGhlIHByZXZpb3VzIHZhbHVlIChlZyBmb3Ig
c29ydGluZyAmCi0gICAgICAgICAgICAgIGZpbHRlcmluZykuCi0KLSAgICAgICAgICAgICAgYGlu
c3RhbmNlTWV0YWAgLSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBtZXRhCi0g
ICAgICAgICAgICAgIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgeW91ciBjb21w
dXRlZC4gRm9yIGV4YW1wbGUgYQotICAgICAgICAgICAgICB1bmlxdWUgY29tcHV0ZWQgbWlnaHQg
dXNlIHRoaXMgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB0aW1lcyBhIGdpdmVuCi0gICAgICAgICAg
ICAgIGVsZW1lbnQgaXMgZm91bmQgaW4gdGhlIGRlcGVuZGVudCBhcnJheS4KLQotICAgICAgICAg
ICAgICBUaGUgYHJlbW92ZWRJdGVtYCBhbmQgYGFkZGVkSXRlbWAgZnVuY3Rpb25zIHNob3VsZCBy
ZXR1cm4gdGhlIGFjY3VtdWxhdGVkCi0gICAgICAgICAgICAgIHZhbHVlLiBJdCBpcyBhY2NlcHRh
YmxlIHRvIG5vdCByZXR1cm4gYW55dGhpbmcgKGllIHJldHVybiB1bmRlZmluZWQpCi0gICAgICAg
ICAgICAgIHRvIGludmFsaWRhdGUgdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIGdlbmVyYWxseSBu
b3QgYSBnb29kIGlkZWEgZm9yCi0gICAgICAgICAgICAgIGFycmF5Q29tcHV0ZWQgYnV0IGl0J3Mg
dXNlZCBpbiBlZyBtYXggYW5kIG1pbi4KLQotICAgICAgICAgICAgICBOb3RlIHRoYXQgb2JzZXJ2
ZXJzIHdpbGwgYmUgZmlyZWQgaWYgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2
YWx1ZQotICAgICAgICAgICAgICB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgYWNjdW11bGF0ZWQgdmFs
dWUuICBXaGVuIHJldHVybmluZyBhbiBvYmplY3QgdGhhdAotICAgICAgICAgICAgICBtdXRhdGVz
IGluIHJlc3BvbnNlIHRvIGFycmF5IGNoYW5nZXMsIGZvciBleGFtcGxlIGFuIGFycmF5IHRoYXQg
bWFwcwotICAgICAgICAgICAgICBldmVyeXRoaW5nIGZyb20gc29tZSBvdGhlciBhcnJheSAoc2Vl
IGBFbWJlci5jb21wdXRlZC5tYXBgKSwgaXQgaXMgdXN1YWxseQotICAgICAgICAgICAgICBpbXBv
cnRhbnQgdGhhdCB0aGUgKnNhbWUqIGFycmF5IGJlIHJldHVybmVkIHRvIGF2b2lkIGFjY2lkZW50
YWxseSB0cmlnZ2VyaW5nIG9ic2VydmVycy4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5jb21wdXRlZC5t
YXggPSBmdW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRW1i
ZXIucmVkdWNlQ29tcHV0ZWQoZGVwZW5kZW50S2V5LCB7Ci0gICAgICAgICAgICAgICAgICBpbml0
aWFsVmFsdWU6IC1JbmZpbml0eSwKLQotICAgICAgICAgICAgICAgICAgYWRkZWRJdGVtOiBmdW5j
dGlvbihhY2N1bXVsYXRlZFZhbHVlLCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGFjY3VtdWxhdGVkVmFsdWUsIGl0
ZW0pOwotICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgcmVtb3ZlZEl0
ZW06IGZ1bmN0aW9uKGFjY3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNl
TWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA8IGFjY3VtdWxhdGVkVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0ZWRWYWx1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBE
ZXBlbmRlbnQga2V5cyBtYXkgcmVmZXIgdG8gYEB0aGlzYCB0byBvYnNlcnZlIGNoYW5nZXMgdG8g
dGhlIG9iamVjdCBpdHNlbGYsCi0gICAgICAgICAgICAgIHdoaWNoIG11c3QgYmUgYXJyYXktbGlr
ZSwgcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0LiAgVGhpcyBpcwotICAgICAg
ICAgICAgICBtb3N0bHkgdXNlZnVsIGZvciBhcnJheSBwcm94aWVzLCB0byBlbnN1cmUgb2JqZWN0
cyBhcmUgcmV0cmlldmVkIHZpYQotICAgICAgICAgICAgICBgb2JqZWN0QXRDb250ZW50YC4gIFRo
aXMgaXMgaG93IHlvdSBjb3VsZCBzb3J0IGl0ZW1zIGJ5IHByb3BlcnRpZXMgZGVmaW5lZCBvbiBh
biBpdGVtIGNvbnRyb2xsZXIuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLlBlb3BsZUNvbnRyb2xsZXIgPSBF
bWJlci5BcnJheUNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBpdGVtQ29udHJv
bGxlcjogJ3BlcnNvbicsCi0KLSAgICAgICAgICAgICAgICBzb3J0ZWRQZW9wbGU6IEVtYmVyLmNv
bXB1dGVkLnNvcnQoJ0B0aGlzLkBlYWNoLnJldmVyc2VkTmFtZScsIGZ1bmN0aW9uKHBlcnNvbkEs
IHBlcnNvbkIpIHsKLSAgICAgICAgICAgICAgICAgIC8vIGByZXZlcnNlZE5hbWVgIGlzbid0IGRl
ZmluZWQgb24gUGVyc29uLCBidXQgd2UgaGF2ZSBhY2Nlc3MgdG8gaXQgdmlhCi0gICAgICAgICAg
ICAgICAgICAvLyB0aGUgaXRlbSBjb250cm9sbGVyIEFwcC5QZXJzb25Db250cm9sbGVyLiAgSWYg
d2UnZCB1c2VkCi0gICAgICAgICAgICAgICAgICAvLyBgY29udGVudC5AZWFjaC5yZXZlcnNlZE5h
bWVgIGFib3ZlLCB3ZSB3b3VsZCBiZSBnZXR0aW5nIHRoZSBvYmplY3RzCi0gICAgICAgICAgICAg
ICAgICAvLyBkaXJlY3RseSBhbmQgbm90IGhhdmUgYWNjZXNzIHRvIGByZXZlcnNlZE5hbWVgLgot
ICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgIHZhciByZXZlcnNlZE5hbWVB
ID0gZ2V0KHBlcnNvbkEsICdyZXZlcnNlZE5hbWUnKSwKLSAgICAgICAgICAgICAgICAgICAgICBy
ZXZlcnNlZE5hbWVCID0gZ2V0KHBlcnNvbkIsICdyZXZlcnNlZE5hbWUnKTsKLQotICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEVtYmVyLmNvbXBhcmUocmV2ZXJzZWROYW1lQSwgcmV2ZXJzZWROYW1l
Qik7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgQXBwLlBlcnNvbkNvbnRyb2xsZXIgPSBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgcmV2ZXJzZWROYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXZlcnNlKGdldCh0aGlzLCAnbmFtZScpKTsKLSAgICAgICAgICAgICAg
ICB9LnByb3BlcnR5KCduYW1lJykKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIERlcGVuZGVudCBrZXlzIHdob3NlIHZhbHVlcyBhcmUgbm90IGFy
cmF5cyBhcmUgdHJlYXRlZCBhcyByZWd1bGFyCi0gICAgICAgICAgICAgIGRlcGVuZGVuY2llczog
d2hlbiB0aGV5IGNoYW5nZSwgdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIGNvbXBsZXRlbHkKLSAg
ICAgICAgICAgICAgcmVjYWxjdWxhdGVkLiAgSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBoYXZl
IGRlcGVuZGVudCBhcnJheXMgd2l0aCBzaW1pbGFyCi0gICAgICAgICAgICAgIHNlbWFudGljcy4g
IERlcGVuZGVudCBrZXlzIHdoaWNoIGVuZCBpbiBgLltdYCBkbyBub3QgdXNlICJvbmUgYXQgYSB0
aW1lIgotICAgICAgICAgICAgICBzZW1hbnRpY3MuICBXaGVuIGFuIGl0ZW0gaXMgYWRkZWQgb3Ig
cmVtb3ZlZCBmcm9tIHN1Y2ggYSBkZXBlbmRlbmN5LCB0aGUKLSAgICAgICAgICAgICAgY29tcHV0
ZWQgcHJvcGVydHkgaXMgY29tcGxldGVseSByZWNvbXB1dGVkLgotCi0gICAgICAgICAgICAgIFdo
ZW4gdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIGNvbXBsZXRlbHkgcmVjb21wdXRlZCwgdGhlIGBh
Y2N1bXVsYXRlZFZhbHVlYAotICAgICAgICAgICAgICBpcyBkaXNjYXJkZWQsIGl0IHN0YXJ0cyB3
aXRoIGBpbml0aWFsVmFsdWVgIGFnYWluLCBhbmQgZWFjaCBpdGVtIGlzIHBhc3NlZAotICAgICAg
ICAgICAgICB0byBgYWRkZWRJdGVtYCBpbiB0dXJuLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLk9iamVj
dC5leHRlbmQoewotICAgICAgICAgICAgICAgIC8vIFdoZW4gYHN0cmluZ2AgaXMgY2hhbmdlZCwg
YGNvbXB1dGVkYCBpcyBjb21wbGV0ZWx5IHJlY29tcHV0ZWQuCi0gICAgICAgICAgICAgICAgc3Ry
aW5nOiAnYSBzdHJpbmcnLAotCi0gICAgICAgICAgICAgICAgLy8gV2hlbiBhbiBpdGVtIGlzIGFk
ZGVkIHRvIGBhcnJheWAsIGBhZGRlZEl0ZW1gIGlzIGNhbGxlZC4KLSAgICAgICAgICAgICAgICBh
cnJheTogW10sCi0KLSAgICAgICAgICAgICAgICAvLyBXaGVuIGFuIGl0ZW0gaXMgYWRkZWQgdG8g
YGFub3RoZXJBcnJheWAsIGBjb21wdXRlZGAgaXMgY29tcGxldGVseQotICAgICAgICAgICAgICAg
IC8vIHJlY29tcHV0ZWQuCi0gICAgICAgICAgICAgICAgYW5vdGhlckFycmF5OiBbXSwKLQotICAg
ICAgICAgICAgICAgIGNvbXB1dGVkOiBFbWJlci5yZWR1Y2VDb21wdXRlZCgnc3RyaW5nJywgJ2Fy
cmF5JywgJ2Fub3RoZXJBcnJheS5bXScsIHsKLSAgICAgICAgICAgICAgICAgIGFkZGVkSXRlbTog
YWRkZWRJdGVtQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICByZW1vdmVkSXRlbTogcmVtb3Zl
ZEl0ZW1DYWxsYmFjawotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlZHVjZUNvbXB1dGVkCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFtk
ZXBlbmRlbnRLZXlzKl0KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAg
ICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0KLSAgICAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIHJlZHVjZUNvbXB1dGVkKG9wdGlvbnMpIHsKLSAgICAgICAg
ICAgIHZhciBhcmdzOwotCi0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsK
LSAgICAgICAgICAgICAgICBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpOwot
ICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAtMSlbMF07
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gIm9i
amVjdCIpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiUmVkdWNlIENv
bXB1dGVkIFByb3BlcnR5IGRlY2xhcmVkIHdpdGhvdXQgYW4gb3B0aW9ucyBoYXNoIik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghKCdpbml0aWFsVmFsdWUnIGluIG9wdGlvbnMp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIlJlZHVjZSBDb21wdXRl
ZCBQcm9wZXJ0eSBkZWNsYXJlZCB3aXRob3V0IGFuIGluaXRpYWwgdmFsdWUiKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIGNwID0gbmV3IFJlZHVjZUNvbXB1dGVkUHJvcGVydHko
b3B0aW9ucyk7Ci0KLSAgICAgICAgICAgIGlmIChhcmdzKSB7Ci0gICAgICAgICAgICAgICAgY3Au
cHJvcGVydHkuYXBwbHkoY3AsIGFyZ3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gY3A7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZWR1Y2VDb21wdXRl
ZCA9IHJlZHVjZUNvbXB1dGVkOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9j
b21wdXRlZC9yZWR1Y2VfY29tcHV0ZWRfbWFjcm9zIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUi
LCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVy
LW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9l
cnJvciIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFsL3J1bl9s
b29wIiwgImVtYmVyLW1ldGFsL29ic2VydmVyIiwgImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvYXJy
YXlfY29tcHV0ZWQiLCAiZW1iZXItcnVudGltZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWQiLCAi
ZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0X3Byb3h5IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L3N1YmFycmF5IiwgImVtYmVyLXJ1bnRpbWUva2V5cyIsICJlbWJlci1ydW50aW1lL2NvbXBhcmUi
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBf
X2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVu
ZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5j
eTEyX18sIF9fZGVwZW5kZW5jeTEzX18sIF9fZGVwZW5kZW5jeTE0X18sIF9fZGVwZW5kZW5jeTE1
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgbWVy
Z2UgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVw
ZW5kZW5jeTNfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k0X18uc2V0Owot
ICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5jeTVfXy5pc0FycmF5OwotICAgICAgICB2
YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTVfXy5ndWlkRm9yOwotICAgICAgICB2YXIgRW1iZXJF
cnJvciA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZm9yRWFjaCA9
IF9fZGVwZW5kZW5jeTdfXy5mb3JFYWNoOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5
OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBhZGRPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTlf
Xy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIGFycmF5Q29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kx
MF9fLmFycmF5Q29tcHV0ZWQ7Ci0gICAgICAgIHZhciByZWR1Y2VDb21wdXRlZCA9IF9fZGVwZW5k
ZW5jeTExX18ucmVkdWNlQ29tcHV0ZWQ7Ci0gICAgICAgIHZhciBPYmplY3RQcm94eSA9IF9fZGVw
ZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFN1YkFycmF5ID0gX19kZXBlbmRl
bmN5MTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIga2V5cyA9IF9fZGVwZW5kZW5jeTE0X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvbXBhcmUgPSBfX2RlcGVuZGVuY3kxNV9fWyJkZWZh
dWx0Il07Ci0KLSAgICAgICAgdmFyIGFfc2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0aGUgc3VtIG9m
IHRoZSB2YWx1ZQotICAgICAgICAgICAgIGluIHRoZSBkZXBlbmRlbnQgYXJyYXkuCi0KLSAgICAg
ICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLnN1bQotICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgQHJl
dHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgdGhlIHN1bSBvZiBhbGwgdmFs
dWVzIGluIHRoZSBkZXBlbmRlbnRLZXkncyBhcnJheQotICAgICAgICAgICAgIEBzaW5jZSAxLjQu
MAotICAgICAgICAgICAgKi8KLQotICAgICAgICBmdW5jdGlvbiBzdW0oZGVwZW5kZW50S2V5KSB7
Ci0gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ29tcHV0ZWQoZGVwZW5kZW50S2V5LCB7Ci0gICAg
ICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAwLAotCi0gICAgICAgICAgICAgICAgYWRkZWRJdGVt
OiBmdW5jdGlvbihhY2N1bXVsYXRlZFZhbHVlLCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1l
dGEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkVmFsdWUgKyBpdGVt
OwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbTogZnVu
Y3Rpb24oYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRlZFZhbHVlIC0gaXRlbTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLnN1bSA9IHN1bTsgLyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVy
dHkgdGhhdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZQotICAgICAgICAgICAg
ICBkZXBlbmRlbnQgYXJyYXkuIFRoaXMgd2lsbCByZXR1cm4gYC1JbmZpbml0eWAgd2hlbiB0aGUg
ZGVwZW5kZW50Ci0gICAgICAgICAgICAgIGFycmF5IGlzIGVtcHR5LgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoewotICAgICAgICAgICAgICAgIGNoaWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFwQnko
J2NoaWxkcmVuJywgJ2FnZScpLAotICAgICAgICAgICAgICAgIG1heENoaWxkQWdlOiBFbWJlci5j
b21wdXRlZC5tYXgoJ2NoaWxkQWdlcycpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICAgIHZhciBsb3JkQnlyb24gPSBQZXJzb24uY3JlYXRlKHsgY2hpbGRyZW46IFtdIH0pOwotCi0g
ICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQoJ21heENoaWxkQWdlJyk7IC8vIC1JbmZpbml0eQot
ICAgICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZHJlbicpLnB1c2hPYmplY3QoewotICAg
ICAgICAgICAgICAgIG5hbWU6ICdBdWd1c3RhIEFkYSBCeXJvbicsIGFnZTogNwotICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgbG9yZEJ5cm9uLmdldCgnbWF4Q2hpbGRBZ2UnKTsgLy8g
NwotICAgICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZHJlbicpLnB1c2hPYmplY3RzKFt7
Ci0gICAgICAgICAgICAgICAgbmFtZTogJ0FsbGVncmEgQnlyb24nLAotICAgICAgICAgICAgICAg
IGFnZTogNQotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgbmFtZTogJ0VsaXph
YmV0aCBNZWRvcmEgTGVpZ2gnLAotICAgICAgICAgICAgICAgIGFnZTogOAotICAgICAgICAgICAg
ICB9XSk7Ci0gICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQoJ21heENoaWxkQWdlJyk7IC8vIDgK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5tYXgK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
ZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVy
dHl9IGNvbXB1dGVzIHRoZSBsYXJnZXN0IHZhbHVlIGluIHRoZSBkZXBlbmRlbnRLZXkncyBhcnJh
eQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWF4IChkZXBlbmRlbnRLZXkpIHsK
LSAgICAgICAgICAgIHJldHVybiByZWR1Y2VDb21wdXRlZChkZXBlbmRlbnRLZXksIHsKLSAgICAg
ICAgICAgICAgICBpbml0aWFsVmFsdWU6IC0gSW5maW5pdHksCi0KLSAgICAgICAgICAgICAgICBh
ZGRlZEl0ZW06IGZ1bmN0aW9uIChhY2N1bXVsYXRlZFZhbHVlLCBpdGVtLCBjaGFuZ2VNZXRhLCBp
bnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGFjY3Vt
dWxhdGVkVmFsdWUsIGl0ZW0pOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAg
ICByZW1vdmVkSXRlbTogZnVuY3Rpb24gKGFjY3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1l
dGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSA8IGFjY3Vt
dWxhdGVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRl
ZFZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5tYXggPSBtYXg7IC8q
KgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsY3VsYXRlcyB0aGUg
bWluaW11bSB2YWx1ZSBpbiB0aGUKLSAgICAgICAgICAgICAgZGVwZW5kZW50IGFycmF5LiBUaGlz
IHdpbGwgcmV0dXJuIGBJbmZpbml0eWAgd2hlbiB0aGUgZGVwZW5kZW50Ci0gICAgICAgICAgICAg
IGFycmF5IGlzIGVtcHR5LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAg
IGNoaWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFwQnkoJ2NoaWxkcmVuJywgJ2FnZScpLAotICAg
ICAgICAgICAgICAgIG1pbkNoaWxkQWdlOiBFbWJlci5jb21wdXRlZC5taW4oJ2NoaWxkQWdlcycp
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBsb3JkQnlyb24gPSBQZXJz
b24uY3JlYXRlKHsgY2hpbGRyZW46IFtdIH0pOwotCi0gICAgICAgICAgICAgIGxvcmRCeXJvbi5n
ZXQoJ21pbkNoaWxkQWdlJyk7IC8vIEluZmluaXR5Ci0gICAgICAgICAgICAgIGxvcmRCeXJvbi5n
ZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdCh7Ci0gICAgICAgICAgICAgICAgbmFtZTogJ0F1Z3Vz
dGEgQWRhIEJ5cm9uJywgYWdlOiA3Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBs
b3JkQnlyb24uZ2V0KCdtaW5DaGlsZEFnZScpOyAvLyA3Ci0gICAgICAgICAgICAgIGxvcmRCeXJv
bi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdHMoW3sKLSAgICAgICAgICAgICAgICBuYW1lOiAn
QWxsZWdyYSBCeXJvbicsCi0gICAgICAgICAgICAgICAgYWdlOiA1Ci0gICAgICAgICAgICAgIH0s
IHsKLSAgICAgICAgICAgICAgICBuYW1lOiAnRWxpemFiZXRoIE1lZG9yYSBMZWlnaCcsCi0gICAg
ICAgICAgICAgICAgYWdlOiA4Ci0gICAgICAgICAgICAgIH1dKTsKLSAgICAgICAgICAgICAgbG9y
ZEJ5cm9uLmdldCgnbWluQ2hpbGRBZ2UnKTsgLy8gNQotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLm1pbgotICAgICAgICAgICAgICBAZm9yIEVtYmVy
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAg
ICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgdGhlIHNtYWxsZXN0
IHZhbHVlIGluIHRoZSBkZXBlbmRlbnRLZXkncyBhcnJheQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gbWluKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgcmV0dXJuIHJlZHVj
ZUNvbXB1dGVkKGRlcGVuZGVudEtleSwgewotICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTog
SW5maW5pdHksCi0KLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uIChhY2N1bXVs
YXRlZFZhbHVlLCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGgubWluKGFjY3VtdWxhdGVkVmFsdWUsIGl0ZW0pOwotICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbTogZnVuY3Rpb24gKGFj
Y3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlbSA+IGFjY3VtdWxhdGVkVmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRlZFZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBfX2V4cG9ydHNfXy5taW4gPSBtaW47IC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIGFu
IGFycmF5IG1hcHBlZCB2aWEgdGhlIGNhbGxiYWNrCi0KLSAgICAgICAgICAgICAgVGhlIGNhbGxi
YWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVy
ZS4KLSAgICAgICAgICAgICAgYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJh
dGlvbi4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGZ1bmN0
aW9uKGl0ZW0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBFeGFtcGxlCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9
IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGV4Y2l0aW5nQ2hvcmVzOiBF
bWJlci5jb21wdXRlZC5tYXAoJ2Nob3JlcycsIGZ1bmN0aW9uKGNob3JlKSB7Ci0gICAgICAgICAg
ICAgICAgICByZXR1cm4gY2hvcmUudG9VcHBlckNhc2UoKSArICchJzsKLSAgICAgICAgICAgICAg
ICB9KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhh
bXN0ZXIuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjaG9yZXM6IFsnY2xlYW4nLCAnd3JpdGUg
bW9yZSB1bml0IHRlc3RzJ10KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgaGFt
c3Rlci5nZXQoJ2V4Y2l0aW5nQ2hvcmVzJyk7IC8vIFsnQ0xFQU4hJywgJ1dSSVRFIE1PUkUgVU5J
VCBURVNUUyEnXQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNv
bXB1dGVkLm1hcAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
Y2FsbGJhY2sKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0g
YW4gYXJyYXkgbWFwcGVkIHZpYSB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIG1hcChkZXBlbmRlbnRLZXksIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB2YXIg
b3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uKGFycmF5LCBp
dGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IG1hcHBlZCA9IGNhbGxiYWNrLmNhbGwodGhpcywgaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFycmF5Lmluc2VydEF0KGNoYW5nZU1ldGEuaW5kZXgsIG1hcHBlZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
IHJlbW92ZWRJdGVtOiBmdW5jdGlvbihhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VN
ZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5LnJlbW92ZUF0KGNoYW5nZU1ldGEuaW5k
ZXgsIDEpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgcmV0dXJuIGFycmF5Q29tcHV0ZWQo
ZGVwZW5kZW50S2V5LCBvcHRpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19f
Lm1hcCA9IG1hcDsgLyoqCi0gICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgbWFwcGVkIHRv
IHRoZSBzcGVjaWZpZWQga2V5LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAg
ICAgIGNoaWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFwQnkoJ2NoaWxkcmVuJywgJ2FnZScpCi0g
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBsb3JkQnlyb24gPSBQZXJzb24u
Y3JlYXRlKHsgY2hpbGRyZW46IFtdIH0pOwotCi0gICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQo
J2NoaWxkQWdlcycpOyAvLyBbXQotICAgICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZHJl
bicpLnB1c2hPYmplY3QoeyBuYW1lOiAnQXVndXN0YSBBZGEgQnlyb24nLCBhZ2U6IDcgfSk7Ci0g
ICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQoJ2NoaWxkQWdlcycpOyAvLyBbN10KLSAgICAgICAg
ICAgICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRyZW4nKS5wdXNoT2JqZWN0cyhbewotICAgICAgICAg
ICAgICAgIG5hbWU6ICdBbGxlZ3JhIEJ5cm9uJywKLSAgICAgICAgICAgICAgICBhZ2U6IDUKLSAg
ICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIG5hbWU6ICdFbGl6YWJldGggTWVkb3Jh
IExlaWdoJywKLSAgICAgICAgICAgICAgICBhZ2U6IDgKLSAgICAgICAgICAgICAgfV0pOwotICAg
ICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZEFnZXMnKTsgLy8gWzcsIDUsIDhdCi0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQubWFwQnkKLSAg
ICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVw
ZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleQotICAg
ICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBhbiBhcnJheSBtYXBw
ZWQgdG8gdGhlIHNwZWNpZmllZCBrZXkKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IG1hcEJ5IChkZXBlbmRlbnRLZXksIHByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICB2YXIgY2Fs
bGJhY2sgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldChpdGVt
LCBwcm9wZXJ0eUtleSk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0dXJuIG1hcChk
ZXBlbmRlbnRLZXkgKyAnLkBlYWNoLicgKyBwcm9wZXJ0eUtleSwgY2FsbGJhY2spOwotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubWFwQnkgPSBtYXBCeTsgLyoqCi0gICAgICAgICAg
ICAgIEBtZXRob2QgY29tcHV0ZWQubWFwUHJvcGVydHkKLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAZGVwcmVjYXRlZCBVc2UgYEVtYmVyLmNvbXB1dGVkLm1hcEJ5YCBp
bnN0ZWFkCi0gICAgICAgICAgICAgIEBwYXJhbSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAg
QHBhcmFtIHByb3BlcnR5S2V5Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgbWFwUHJvcGVy
dHkgPSBtYXBCeTsKLSAgICAgICAgX19leHBvcnRzX18ubWFwUHJvcGVydHkgPSBtYXBQcm9wZXJ0
eTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEZpbHRlcnMgdGhlIGFycmF5IGJ5IHRoZSBj
YWxsYmFjay4KLQotICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRl
IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLgotICAgICAgICAgICAgICBgaXRl
bWAgaXMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24oaXRlbSk7Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFy
IEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICByZW1haW5p
bmdDaG9yZXM6IEVtYmVyLmNvbXB1dGVkLmZpbHRlcignY2hvcmVzJywgZnVuY3Rpb24oY2hvcmUp
IHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAhY2hvcmUuZG9uZTsKLSAgICAgICAgICAgICAg
ICB9KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhh
bXN0ZXIuY3JlYXRlKHsgCi0gICAgICAgICAgICAgICAgY2hvcmVzOiBbCi0gICAgICAgICAgICAg
ICAgICB7IG5hbWU6ICdjb29rJywgZG9uZTogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgeyBu
YW1lOiAnY2xlYW4nLCBkb25lOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICB7IG5hbWU6ICd3
cml0ZSBtb3JlIHVuaXQgdGVzdHMnLCBkb25lOiBmYWxzZSB9Ci0gICAgICAgICAgICAgICAgXSAK
LSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ3JlbWFpbmlu
Z0Nob3JlcycpOyAvLyBbe25hbWU6ICd3cml0ZSBtb3JlIHVuaXQgdGVzdHMnLCBkb25lOiBmYWxz
ZX1dCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQu
ZmlsdGVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxs
YmFjawotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSB0aGUg
ZmlsdGVyZWQgYXJyYXkKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZpbHRlcihk
ZXBlbmRlbnRLZXksIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHsKLSAg
ICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXJyYXksIGNoYW5nZU1ldGEsIGlu
c3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZU1ldGEuZmlsdGVyZWRB
cnJheUluZGV4ZXMgPSBuZXcgU3ViQXJyYXkoKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgYWRkZWRJdGVtOiBmdW5jdGlvbihhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwg
aW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9ICEhY2FsbGJh
Y2suY2FsbCh0aGlzLCBpdGVtKSwKLSAgICAgICAgICAgICAgICAgICAgZmlsdGVySW5kZXggPSBp
bnN0YW5jZU1ldGEuZmlsdGVyZWRBcnJheUluZGV4ZXMuYWRkSXRlbShjaGFuZ2VNZXRhLmluZGV4
LCBtYXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhcnJheS5pbnNlcnRBdChmaWx0ZXJJbmRleCwgaXRlbSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAg
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbihh
cnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBmaWx0ZXJJbmRleCA9IGluc3RhbmNlTWV0YS5maWx0ZXJlZEFycmF5SW5kZXhlcy5y
ZW1vdmVJdGVtKGNoYW5nZU1ldGEuaW5kZXgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChm
aWx0ZXJJbmRleCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5yZW1vdmVB
dChmaWx0ZXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgcmV0dXJuIGFycmF5Q29tcHV0ZWQoZGVwZW5kZW50S2V5LCBvcHRpb25zKTsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmZpbHRlciA9IGZpbHRlcjsgLyoqCi0g
ICAgICAgICAgICAgIEZpbHRlcnMgdGhlIGFycmF5IGJ5IHRoZSBwcm9wZXJ0eSBhbmQgdmFsdWUK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVy
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ2hvcmVz
OiBFbWJlci5jb21wdXRlZC5maWx0ZXJCeSgnY2hvcmVzJywgJ2RvbmUnLCBmYWxzZSkKLSAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0
ZSh7Ci0gICAgICAgICAgICAgICAgY2hvcmVzOiBbCi0gICAgICAgICAgICAgICAgICB7IG5hbWU6
ICdjb29rJywgZG9uZTogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnY2xlYW4n
LCBkb25lOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICB7IG5hbWU6ICd3cml0ZSBtb3JlIHVu
aXQgdGVzdHMnLCBkb25lOiBmYWxzZSB9Ci0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgncmVtYWluaW5nQ2hvcmVzJyk7IC8v
IFt7IG5hbWU6ICd3cml0ZSBtb3JlIHVuaXQgdGVzdHMnLCBkb25lOiBmYWxzZSB9XQotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLmZpbHRlckJ5Ci0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRl
cGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkKLSAg
ICAgICAgICAgICAgQHBhcmFtIHsqfSB2YWx1ZQotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJl
ci5Db21wdXRlZFByb3BlcnR5fSB0aGUgZmlsdGVyZWQgYXJyYXkKLSAgICAgICAgICAgICovCi0g
ICAgICAgIGZ1bmN0aW9uIGZpbHRlckJ5IChkZXBlbmRlbnRLZXksIHByb3BlcnR5S2V5LCB2YWx1
ZSkgewotICAgICAgICAgICAgdmFyIGNhbGxiYWNrOwotCi0gICAgICAgICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gMikgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24o
aXRlbSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KGl0ZW0sIHByb3BlcnR5S2V5
KTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdldChpdGVtLCBwcm9wZXJ0eUtleSkgPT09IHZhbHVlOwotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoZGVwZW5kZW50S2V5
ICsgJy5AZWFjaC4nICsgcHJvcGVydHlLZXksIGNhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIF9fZXhwb3J0c19fLmZpbHRlckJ5ID0gZmlsdGVyQnk7IC8qKgotICAgICAgICAgICAgICBA
bWV0aG9kIGNvbXB1dGVkLmZpbHRlclByb3BlcnR5Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIK
LSAgICAgICAgICAgICAgQHBhcmFtIGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0g
cHJvcGVydHlLZXkKLSAgICAgICAgICAgICAgQHBhcmFtIHZhbHVlCi0gICAgICAgICAgICAgIEBk
ZXByZWNhdGVkIFVzZSBgRW1iZXIuY29tcHV0ZWQuZmlsdGVyQnlgIGluc3RlYWQKLSAgICAgICAg
ICAgICovCi0gICAgICAgIHZhciBmaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlckJ5OwotICAgICAgICBf
X2V4cG9ydHNfXy5maWx0ZXJQcm9wZXJ0eSA9IGZpbHRlclByb3BlcnR5OwotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgbmV3IGFy
cmF5IHdpdGggYWxsIHRoZSB1bmlxdWUKLSAgICAgICAgICAgICAgZWxlbWVudHMgZnJvbSBvbmUg
b3IgbW9yZSBkZXBlbmRlbnQgYXJyYXlzLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVyID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdW5pcXVlRnJ1aXRzOiBFbWJlci5j
b21wdXRlZC51bmlxKCdmcnVpdHMnKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBmcnVpdHM6
IFsKLSAgICAgICAgICAgICAgICAgICdiYW5hbmEnLAotICAgICAgICAgICAgICAgICAgJ2dyYXBl
JywKLSAgICAgICAgICAgICAgICAgICdrYWxlJywKLSAgICAgICAgICAgICAgICAgICdiYW5hbmEn
Ci0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBo
YW1zdGVyLmdldCgndW5pcXVlRnJ1aXRzJyk7IC8vIFsnYmFuYW5hJywgJ2dyYXBlJywgJ2thbGUn
XQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLnVu
aXEKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gcHJvcGVydHlLZXkqCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJv
cGVydHl9IGNvbXB1dGVzIGEgbmV3IGFycmF5IHdpdGggYWxsIHRoZQotICAgICAgICAgICAgICB1
bmlxdWUgZWxlbWVudHMgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5Ci0gICAgICAgICAgICAqLwot
ICAgICAgICBmdW5jdGlvbiB1bmlxKCkgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSBhX3NsaWNl
LmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGFyZ3MucHVzaCh7Ci0gICAgICAgICAgICAg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYXJyYXksIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkg
ewotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZU1ldGEuaXRlbUNvdW50cyA9IHt9OwotICAg
ICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uKGFy
cmF5LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGd1aWQgPSBndWlkRm9yKGl0ZW0pOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
aW5zdGFuY2VNZXRhLml0ZW1Db3VudHNbZ3VpZF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluc3RhbmNlTWV0YS5pdGVtQ291bnRzW2d1aWRdID0gMTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsraW5zdGFuY2VNZXRhLml0ZW1Db3Vu
dHNbZ3VpZF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJy
YXkuYWRkT2JqZWN0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbTogZnVuY3Rpb24o
YXJyYXksIGl0ZW0sIF8sIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
Z3VpZCA9IGd1aWRGb3IoaXRlbSksCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudHMgPSBp
bnN0YW5jZU1ldGEuaXRlbUNvdW50czsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoLS1pdGVt
Q291bnRzW2d1aWRdID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5yZW1v
dmVPYmplY3QoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIGFycmF5Q29tcHV0ZWQuYXBwbHkobnVsbCwgYXJncyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy51bmlxID0gdW5pcTsgLyoqCi0gICAgICAgICAgICAg
IEFsaWFzIGZvciBbRW1iZXIuY29tcHV0ZWQudW5pcV0oL2FwaS8jbWV0aG9kX2NvbXB1dGVkX3Vu
aXEpLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQudW5pb24KLSAgICAgICAgICAg
ICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkq
Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVz
IGEgbmV3IGFycmF5IHdpdGggYWxsIHRoZQotICAgICAgICAgICAgICB1bmlxdWUgZWxlbWVudHMg
ZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgdW5p
b24gPSB1bmlxOwotICAgICAgICBfX2V4cG9ydHNfXy51bmlvbiA9IHVuaW9uOwotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgbmV3
IGFycmF5IHdpdGggYWxsIHRoZSBkdXBsaWNhdGVkCi0gICAgICAgICAgICAgIGVsZW1lbnRzIGZy
b20gdHdvIG9yIG1vcmUgZGVwZW5kZW50IGFycmF5cy4KLQotICAgICAgICAgICAgICBFeGFtcGxl
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgb2JqID0g
RW1iZXIuT2JqZWN0LmNyZWF0ZVdpdGhNaXhpbnMoewotICAgICAgICAgICAgICAgIGFkYUZyaWVu
ZHM6IFsnQ2hhcmxlcyBCYWJiYWdlJywgJ0pvaG4gSG9iaG91c2UnLCAnV2lsbGlhbSBLaW5nJywg
J01hcnkgU29tZXJ2aWxsZSddLAotICAgICAgICAgICAgICAgIGNoYXJsZXNGcmllbmRzOiBbJ1dp
bGxpYW0gS2luZycsICdNYXJ5IFNvbWVydmlsbGUnLCAnQWRhIExvdmVsYWNlJywgJ0dlb3JnZSBQ
ZWFjb2NrJ10sCi0gICAgICAgICAgICAgICAgZnJpZW5kc0luQ29tbW9uOiBFbWJlci5jb21wdXRl
ZC5pbnRlcnNlY3QoJ2FkYUZyaWVuZHMnLCAnY2hhcmxlc0ZyaWVuZHMnKQotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICBvYmouZ2V0KCdmcmllbmRzSW5Db21tb24nKTsgLy8gWydX
aWxsaWFtIEtpbmcnLCAnTWFyeSBTb21lcnZpbGxlJ10KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5pbnRlcnNlY3QKLSAgICAgICAgICAgICAgQGZv
ciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkqCi0gICAg
ICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIGEgbmV3
IGFycmF5IHdpdGggYWxsIHRoZQotICAgICAgICAgICAgICBkdXBsaWNhdGVkIGVsZW1lbnRzIGZy
b20gdGhlIGRlcGVuZGVudCBhcnJheXMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IGludGVyc2VjdCgpIHsKLSAgICAgICAgICAgIHZhciBnZXREZXBlbmRlbnRLZXlHdWlkcyA9IGZ1
bmN0aW9uIChjaGFuZ2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcChjaGFuZ2VN
ZXRhLnByb3BlcnR5Ll9kZXBlbmRlbnRLZXlzLCBmdW5jdGlvbiAoZGVwZW5kZW50S2V5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBndWlkRm9yKGRlcGVuZGVudEtleSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgYXJncyA9IGFf
c2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICAgICAgYXJncy5wdXNoKHsKLSAgICAgICAg
ICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYXJyYXksIGNoYW5nZU1ldGEsIGluc3RhbmNl
TWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZU1ldGEuaXRlbUNvdW50cyA9IHt9
OwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0
aW9uKGFycmF5LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGl0ZW1HdWlkID0gZ3VpZEZvcihpdGVtKSwKLSAgICAgICAgICAgICAgICAg
ICAgZGVwZW5kZW50R3VpZHMgPSBnZXREZXBlbmRlbnRLZXlHdWlkcyhjaGFuZ2VNZXRhKSwKLSAg
ICAgICAgICAgICAgICAgICAgZGVwZW5kZW50R3VpZCA9IGd1aWRGb3IoY2hhbmdlTWV0YS5hcnJh
eUNoYW5nZWQpLAotICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkRlcGVuZGVudEFycmF5cyA9
IGNoYW5nZU1ldGEucHJvcGVydHkuX2RlcGVuZGVudEtleXMubGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICBpdGVtQ291bnRzID0gaW5zdGFuY2VNZXRhLml0ZW1Db3VudHM7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpdGVtQ291bnRzW2l0ZW1HdWlkXSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbUNvdW50c1tpdGVtR3VpZF0gPSB7fTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUNvdW50c1tpdGVtR3VpZF1bZGVwZW5kZW50
R3VpZF0gPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50
c1tpdGVtR3VpZF1bZGVwZW5kZW50R3VpZF0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCsraXRlbUNvdW50c1tpdGVtR3VpZF1bZGVwZW5kZW50
R3VpZF0gPT09IDEgJiYKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZEZXBlbmRlbnRBcnJh
eXMgPT09IGtleXMoaXRlbUNvdW50c1tpdGVtR3VpZF0pLmxlbmd0aCkgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhcnJheS5hZGRPYmplY3QoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW06IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjaGFu
Z2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1HdWlk
ID0gZ3VpZEZvcihpdGVtKSwKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50R3VpZHMgPSBn
ZXREZXBlbmRlbnRLZXlHdWlkcyhjaGFuZ2VNZXRhKSwKLSAgICAgICAgICAgICAgICAgICAgZGVw
ZW5kZW50R3VpZCA9IGd1aWRGb3IoY2hhbmdlTWV0YS5hcnJheUNoYW5nZWQpLAotICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZkRlcGVuZGVudEFycmF5cyA9IGNoYW5nZU1ldGEucHJvcGVydHku
X2RlcGVuZGVudEtleXMubGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkFycmF5
c0l0ZW1BcHBlYXJzSW4sCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudHMgPSBpbnN0YW5j
ZU1ldGEuaXRlbUNvdW50czsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUNvdW50c1tp
dGVtR3VpZF1bZGVwZW5kZW50R3VpZF0gPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbUNvdW50c1tpdGVtR3VpZF1bZGVwZW5kZW50R3VpZF0gPSAwOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLWl0ZW1Db3VudHNbaXRl
bUd1aWRdW2RlcGVuZGVudEd1aWRdID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgaXRlbUNvdW50c1tpdGVtR3VpZF1bZGVwZW5kZW50R3VpZF07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZkFycmF5c0l0ZW1BcHBlYXJzSW4gPSBrZXlzKGl0ZW1Db3VudHNb
aXRlbUd1aWRdKS5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJP
ZkFycmF5c0l0ZW1BcHBlYXJzSW4gPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgaXRlbUNvdW50c1tpdGVtR3VpZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5yZW1vdmVPYmplY3QoaXRlbSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5
Q29tcHV0ZWQuYXBwbHkobnVsbCwgYXJncyk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7IC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVk
IHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCi0gICAgICAg
ICAgICAgIHByb3BlcnRpZXMgZnJvbSB0aGUgZmlyc3QgZGVwZW5kZW50IGFycmF5IHRoYXQgYXJl
IG5vdCBpbiB0aGUgc2Vjb25kCi0gICAgICAgICAgICAgIGRlcGVuZGVudCBhcnJheS4KLQotICAg
ICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAg
ICAgIGxpa2VzOiBbJ2JhbmFuYScsICdncmFwZScsICdrYWxlJ10sCi0gICAgICAgICAgICAgICAg
d2FudHM6IEVtYmVyLmNvbXB1dGVkLnNldERpZmYoJ2xpa2VzJywgJ2ZydWl0cycpCi0gICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUo
ewotICAgICAgICAgICAgICAgIGZydWl0czogWwotICAgICAgICAgICAgICAgICAgJ2dyYXBlJywK
LSAgICAgICAgICAgICAgICAgICdrYWxlJywKLSAgICAgICAgICAgICAgICBdCi0gICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCd3YW50cycpOyAvLyBbJ2JhbmFu
YSddCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQu
c2V0RGlmZgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBzZXRBUHJvcGVydHkKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHNldEJQ
cm9wZXJ0eQotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBj
b21wdXRlcyBhIG5ldyBhcnJheSB3aXRoIGFsbCB0aGUKLSAgICAgICAgICAgICAgaXRlbXMgZnJv
bSB0aGUgZmlyc3QgZGVwZW5kZW50IGFycmF5IHRoYXQgYXJlIG5vdCBpbiB0aGUgc2Vjb25kCi0g
ICAgICAgICAgICAgIGRlcGVuZGVudCBhcnJheQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gc2V0RGlmZihzZXRBUHJvcGVydHksIHNldEJQcm9wZXJ0eSkgewotICAgICAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RW1iZXJFcnJvcigic2V0RGlmZiByZXF1aXJlcyBleGFjdGx5IHR3byBkZXBlbmRlbnQgYXJyYXlz
LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5Q29tcHV0ZWQoc2V0
QVByb3BlcnR5LCBzZXRCUHJvcGVydHksIHsKLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1
bmN0aW9uIChhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBzZXRBID0gZ2V0KHRoaXMsIHNldEFQcm9wZXJ0eSksCi0gICAgICAg
ICAgICAgICAgICAgIHNldEIgPSBnZXQodGhpcywgc2V0QlByb3BlcnR5KTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hhbmdlTWV0YS5hcnJheUNoYW5nZWQgPT09IHNldEEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2V0Qi5jb250YWlucyhpdGVtKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFycmF5LmFkZE9iamVjdChpdGVtKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFycmF5LnJlbW92ZU9iamVjdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0sIGNo
YW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc2V0QSA9
IGdldCh0aGlzLCBzZXRBUHJvcGVydHkpLAotICAgICAgICAgICAgICAgICAgICBzZXRCID0gZ2V0
KHRoaXMsIHNldEJQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZU1l
dGEuYXJyYXlDaGFuZ2VkID09PSBzZXRCKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0QS5jb250YWlucyhpdGVtKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5
LmFkZE9iamVjdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnJlbW92ZU9i
amVjdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5zZXREaWZmID0gc2V0RGlmZjsKLSAgICAgICAgZnVu
Y3Rpb24gYmluYXJ5U2VhcmNoKGFycmF5LCBpdGVtLCBsb3csIGhpZ2gpIHsKLSAgICAgICAgICAg
IHZhciBtaWQsIG1pZEl0ZW0sIHJlcywgZ3VpZE1pZCwgZ3VpZEl0ZW07Ci0KLSAgICAgICAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNCkgewotICAgICAgICAgICAgICAgIGhpZ2ggPSBnZXQo
YXJyYXksICdsZW5ndGgnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoIDwgMykgewotICAgICAgICAgICAgICAgIGxvdyA9IDA7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChsb3cgPT09IGhpZ2gpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbG93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtaWQgPSBsb3cgKyBNYXRoLmZs
b29yKChoaWdoIC0gbG93KSAvIDIpOwotICAgICAgICAgICAgbWlkSXRlbSA9IGFycmF5Lm9iamVj
dEF0KG1pZCk7Ci0KLSAgICAgICAgICAgIGd1aWRNaWQgPSBfZ3VpZEZvcihtaWRJdGVtKTsKLSAg
ICAgICAgICAgIGd1aWRJdGVtID0gX2d1aWRGb3IoaXRlbSk7Ci0KLSAgICAgICAgICAgIGlmIChn
dWlkTWlkID09PSBndWlkSXRlbSkgewotICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcyA9IHRoaXMub3JkZXIobWlkSXRlbSwgaXRlbSk7
Ci0gICAgICAgICAgICBpZiAocmVzID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gZ3Vp
ZE1pZCA8IGd1aWRJdGVtID8gLTEgOiAxOwotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAg
IGlmIChyZXMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluYXJ5U2VhcmNo
KGFycmF5LCBpdGVtLCBtaWQgKyAxLCBoaWdoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVz
ID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJpbmFyeVNlYXJjaChhcnJheSwg
aXRlbSwgbG93LCBtaWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbWlk
OwotCi0gICAgICAgICAgICBmdW5jdGlvbiBfZ3VpZEZvcihpdGVtKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNlYXJjaFByb3h5LmRldGVjdEluc3RhbmNlKGl0ZW0pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBndWlkRm9yKGdldChpdGVtLCAnY29udGVudCcpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGd1aWRGb3IoaXRlbSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZhciBTZWFyY2hQcm94eSA9IE9iamVjdFByb3h5
LmV4dGVuZCgpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3Bl
cnR5IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCi0gICAgICAgICAgICAg
IHByb3BlcnRpZXMgZnJvbSB0aGUgZmlyc3QgZGVwZW5kZW50IGFycmF5IHNvcnRlZCBiYXNlZCBv
biBhIHByb3BlcnR5Ci0gICAgICAgICAgICAgIG9yIHNvcnQgZnVuY3Rpb24uCi0KLSAgICAgICAg
ICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9s
bG93aW5nIHNpZ25hdHVyZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIGZ1bmN0aW9uKGl0ZW1BLCBpdGVtQik7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIC0gYGl0ZW1BYCB0aGUgZmlyc3QgaXRlbSB0byBjb21wYXJlLgotICAgICAgICAg
ICAgICAtIGBpdGVtQmAgdGhlIHNlY29uZCBpdGVtIHRvIGNvbXBhcmUuCi0KLSAgICAgICAgICAg
ICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIG5lZ2F0aXZlIG51bWJlciAoZS5nLiBgLTFg
KSB3aGVuIGBpdGVtQWAgc2hvdWxkIGNvbWUgYmVmb3JlCi0gICAgICAgICAgICAgIGBpdGVtQmAu
IEl0IHNob3VsZCByZXR1cm4gcG9zaXRpdmUgbnVtYmVyIChlLmcuIGAxYCkgd2hlbiBgaXRlbUFg
IHNob3VsZCBjb21lIGFmdGVyCi0gICAgICAgICAgICAgIGBpdGVtQmAuIElmIHRoZSBgaXRlbUFg
IGFuZCBgaXRlbUJgIGFyZSBlcXVhbCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYDBgLgot
Ci0gICAgICAgICAgICAgIFRoZXJlZm9yZSwgaWYgdGhpcyBmdW5jdGlvbiBpcyBjb21wYXJpbmcg
c29tZSBudW1lcmljIHZhbHVlcywgc2ltcGxlIGBpdGVtQSAtIGl0ZW1CYCBvcgotICAgICAgICAg
ICAgICBgaXRlbUEuZ2V0KCAnZm9vJyApIC0gaXRlbUIuZ2V0KCAnZm9vJyApYCBjYW4gYmUgdXNl
ZCBpbnN0ZWFkIG9mIHNlcmllcyBvZiBgaWZgLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBUb0RvTGlzdCA9
IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIC8vIHVzaW5nIHN0YW5kYXJk
IGFzY2VuZGluZyBzb3J0Ci0gICAgICAgICAgICAgICAgdG9kb3NTb3J0aW5nOiBbJ25hbWUnXSwK
LSAgICAgICAgICAgICAgICBzb3J0ZWRUb2RvczogRW1iZXIuY29tcHV0ZWQuc29ydCgndG9kb3Mn
LCAndG9kb3NTb3J0aW5nJyksCi0KLSAgICAgICAgICAgICAgICAvLyB1c2luZyBkZXNjZW5kaW5n
IHNvcnQKLSAgICAgICAgICAgICAgICB0b2Rvc1NvcnRpbmdEZXNjOiBbJ25hbWU6ZGVzYyddLAot
ICAgICAgICAgICAgICAgIHNvcnRlZFRvZG9zRGVzYzogRW1iZXIuY29tcHV0ZWQuc29ydCgndG9k
b3MnLCAndG9kb3NTb3J0aW5nRGVzYycpLAotCi0gICAgICAgICAgICAgICAgLy8gdXNpbmcgYSBj
dXN0b20gc29ydCBmdW5jdGlvbgotICAgICAgICAgICAgICAgIHByaW9yaXR5VG9kb3M6IEVtYmVy
LmNvbXB1dGVkLnNvcnQoJ3RvZG9zJywgZnVuY3Rpb24oYSwgYil7Ci0gICAgICAgICAgICAgICAg
ICBpZiAoYS5wcmlvcml0eSA+IGIucHJpb3JpdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucHJpb3JpdHkgPCBiLnByaW9y
aXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfSkKLSAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHRvZG9MaXN0ID0gVG9Eb0xpc3Qu
Y3JlYXRlKHt0b2RvczogWwotICAgICAgICAgICAgICAgIHsgbmFtZTogJ1VuaXQgVGVzdCcsIHBy
aW9yaXR5OiAyIH0sCi0gICAgICAgICAgICAgICAgeyBuYW1lOiAnRG9jdW1lbnRhdGlvbicsIHBy
aW9yaXR5OiAzIH0sCi0gICAgICAgICAgICAgICAgeyBuYW1lOiAnUmVsZWFzZScsIHByaW9yaXR5
OiAxIH0KLSAgICAgICAgICAgICAgXX0pOwotCi0gICAgICAgICAgICAgIHRvZG9MaXN0LmdldCgn
c29ydGVkVG9kb3MnKTsgICAgICAvLyBbeyBuYW1lOidEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6
MyB9LCB7IG5hbWU6J1JlbGVhc2UnLCBwcmlvcml0eToxIH0sIHsgbmFtZTonVW5pdCBUZXN0Jywg
cHJpb3JpdHk6MiB9XQotICAgICAgICAgICAgICB0b2RvTGlzdC5nZXQoJ3NvcnRlZFRvZG9zRGVz
YycpOyAgLy8gW3sgbmFtZTonVW5pdCBUZXN0JywgcHJpb3JpdHk6MiB9LCB7IG5hbWU6J1JlbGVh
c2UnLCBwcmlvcml0eToxIH0sIHsgbmFtZTonRG9jdW1lbnRhdGlvbicsIHByaW9yaXR5OjMgfV0K
LSAgICAgICAgICAgICAgdG9kb0xpc3QuZ2V0KCdwcmlvcml0eVRvZG9zJyk7ICAgIC8vIFt7IG5h
bWU6J1JlbGVhc2UnLCBwcmlvcml0eToxIH0sIHsgbmFtZTonVW5pdCBUZXN0JywgcHJpb3JpdHk6
MiB9LCB7IG5hbWU6J0RvY3VtZW50YXRpb24nLCBwcmlvcml0eTozIH1dCi0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuc29ydAotICAgICAgICAgICAg
ICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkK
LSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3IgRnVuY3Rpb259IHNvcnREZWZpbml0aW9u
IGEgZGVwZW5kZW50IGtleSB0byBhbgotICAgICAgICAgICAgICBhcnJheSBvZiBzb3J0IHByb3Bl
cnRpZXMgKGFkZCBgOmRlc2NgIHRvIHRoZSBhcnJheXMgc29ydCBwcm9wZXJ0aWVzIHRvIHNvcnQg
ZGVzY2VuZGluZykgb3IgYSBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzb3J0aW5nCi0gICAgICAgICAg
ICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIGEgbmV3IHNvcnRl
ZCBhcnJheSBiYXNlZAotICAgICAgICAgICAgICBvbiB0aGUgc29ydCBwcm9wZXJ0eSBhcnJheSBv
ciBjYWxsYmFjayBmdW5jdGlvbgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gc29y
dChpdGVtc0tleSwgc29ydERlZmluaXRpb24pIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgi
RW1iZXIuY29tcHV0ZWQuc29ydCByZXF1aXJlcyB0d28gYXJndW1lbnRzOiBhbiBhcnJheSBrZXkg
dG8gc29ydCBhbmQgZWl0aGVyIGEgc29ydCBwcm9wZXJ0aWVzIGtleSBvciBzb3J0IGZ1bmN0aW9u
IiwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMik7Ci0KLSAgICAgICAgICAgIHZhciBpbml0Rm4sIHNv
cnRQcm9wZXJ0aWVzS2V5OwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIHNvcnREZWZpbml0aW9u
ID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgaW5pdEZuID0gZnVuY3Rpb24gKGFy
cmF5LCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5z
dGFuY2VNZXRhLm9yZGVyID0gc29ydERlZmluaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGlu
c3RhbmNlTWV0YS5iaW5hcnlTZWFyY2ggPSBiaW5hcnlTZWFyY2g7Ci0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXNL
ZXkgPSBzb3J0RGVmaW5pdGlvbjsKLSAgICAgICAgICAgICAgICBpbml0Rm4gPSBmdW5jdGlvbiAo
YXJyYXksIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiBzZXR1cFNvcnRQcm9wZXJ0aWVzKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNvcnRQcm9wZXJ0eURlZmluaXRpb25zID0gZ2V0KHRoaXMsIHNvcnRQcm9wZXJ0aWVzS2V5
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0eSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNvcnRQcm9wZXJ0aWVzID0gaW5zdGFuY2VNZXRhLnNvcnRQcm9wZXJ0aWVzID0g
W10sCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3J0UHJvcGVydHlBc2NlbmRpbmcgPSBpbnN0
YW5jZU1ldGEuc29ydFByb3BlcnR5QXNjZW5kaW5nID0ge30sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICBhc2M7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ2Fubm90IHNvcnQ6ICciICsgc29ydFByb3BlcnRpZXNL
ZXkgKyAiJyBpcyBub3QgYW4gYXJyYXkuIiwgaXNBcnJheShzb3J0UHJvcGVydHlEZWZpbml0aW9u
cykpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNZXRhLnByb3BlcnR5LmNsZWFy
SXRlbVByb3BlcnR5S2V5cyhpdGVtc0tleSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ckVhY2goc29ydFByb3BlcnR5RGVmaW5pdGlvbnMsIGZ1bmN0aW9uIChzb3J0UHJvcGVydHlEZWZp
bml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpZHggPSBzb3J0UHJv
cGVydHlEZWZpbml0aW9uLmluZGV4T2YoJzonKSkgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0eSA9IHNvcnRQcm9wZXJ0eURlZmluaXRpb24uc3Vi
c3RyaW5nKDAsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzYyA9IHNv
cnRQcm9wZXJ0eURlZmluaXRpb24uc3Vic3RyaW5nKGlkeCArIDEpLnRvTG93ZXJDYXNlKCkgIT09
ICdkZXNjJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3J0UHJvcGVydHkgPSBzb3J0UHJvcGVydHlEZWZpbml0
aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2MgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
cnRQcm9wZXJ0aWVzLnB1c2goc29ydFByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzb3J0UHJvcGVydHlBc2NlbmRpbmdbc29ydFByb3BlcnR5XSA9IGFzYzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNZXRhLnByb3BlcnR5Lml0ZW1Qcm9wZXJ0eUtleShp
dGVtc0tleSwgc29ydFByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzb3J0UHJvcGVydHlEZWZpbml0aW9ucy5hZGRPYnNlcnZl
cignQGVhY2gnLCB0aGlzLCB1cGRhdGVTb3J0UHJvcGVydGllc09uY2UpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlU29ydFByb3Bl
cnRpZXNPbmNlKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcnVuLm9uY2UodGhpcywgdXBk
YXRlU29ydFByb3BlcnRpZXMsIGNoYW5nZU1ldGEucHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNvcnRQcm9w
ZXJ0aWVzKHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBTb3J0
UHJvcGVydGllcy5jYWxsKHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTWV0
YS5wcm9wZXJ0eS5yZWNvbXB1dGVPbmNlLmNhbGwodGhpcywgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKHRoaXMs
IHNvcnRQcm9wZXJ0aWVzS2V5LCB1cGRhdGVTb3J0UHJvcGVydGllc09uY2UpOwotCi0gICAgICAg
ICAgICAgICAgICAgIHNldHVwU29ydFByb3BlcnRpZXMuY2FsbCh0aGlzKTsKLQotCi0gICAgICAg
ICAgICAgICAgICAgIGluc3RhbmNlTWV0YS5vcmRlciA9IGZ1bmN0aW9uIChpdGVtQSwgaXRlbUIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1Byb3h5ID0gaXRlbUIgaW5zdGFuY2Vv
ZiBTZWFyY2hQcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0eSwgcmVz
dWx0LCBhc2M7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5zb3J0UHJvcGVydGllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvcnRQcm9wZXJ0eSA9IHRoaXMuc29ydFByb3BlcnRpZXNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZShnZXQoaXRlbUEsIHNvcnRQcm9wZXJ0
eSksIGlzUHJveHkgPyBpdGVtQltzb3J0UHJvcGVydHldIDogZ2V0KGl0ZW1CLCBzb3J0UHJvcGVy
dHkpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gdGhpcy5zb3J0UHJvcGVydHlB
c2NlbmRpbmdbc29ydFByb3BlcnR5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGFzYyA/IHJlc3VsdCA6ICgtMSAqIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ICAgICAgICBpbnN0YW5jZU1ldGEuYmluYXJ5U2VhcmNoID0gYmluYXJ5U2VhcmNoOwotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBhcnJheUNv
bXB1dGVkKGl0ZW1zS2V5LCB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogaW5pdEZuLAot
Ci0gICAgICAgICAgICAgICAgYWRkZWRJdGVtOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0sIGNoYW5n
ZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBp
bnN0YW5jZU1ldGEuYmluYXJ5U2VhcmNoKGFycmF5LCBpdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXJyYXkuaW5zZXJ0QXQoaW5kZXgsIGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHJlbW92ZWRJ
dGVtOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJveHlQcm9wZXJ0aWVzLCBpbmRleCwgc2VhcmNoSXRl
bTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlTWV0YS5wcmV2aW91c1ZhbHVlcykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlQcm9wZXJ0aWVzID0gbWVyZ2UoewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0gCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9LCBjaGFuZ2VNZXRhLnByZXZpb3VzVmFsdWVzKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VhcmNoSXRlbSA9IFNlYXJjaFByb3h5LmNyZWF0ZShwcm94eVByb3BlcnRpZXMp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
c2VhcmNoSXRlbSA9IGl0ZW07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IGluc3RhbmNlTWV0YS5iaW5hcnlTZWFyY2goYXJyYXksIHNlYXJjaEl0
ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcnJheS5yZW1vdmVBdChpbmRleCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnNvcnQgPSBzb3J0OwotICAg
IH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9jb250cm9sbGVycy9hcnJheV9jb250cm9s
bGVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0
aWxzIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5IiwgImVtYmVyLXJ1bnRpbWUv
bWl4aW5zL3NvcnRhYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLCAiZW1i
ZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZXhwb3J0cyJdLAotICAg
IGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kz
X18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9f
ZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAg
ICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIg
c2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVu
ZGVuY3k0X18uZm9yRWFjaDsKLSAgICAgICAgdmFyIHJlcGxhY2UgPSBfX2RlcGVuZGVuY3k0X18u
cmVwbGFjZTsKLSAgICAgICAgdmFyIEFycmF5UHJveHkgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIFNvcnRhYmxlTWl4aW4gPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIENvbnRyb2xsZXJNaXhpbiA9IF9fZGVwZW5kZW5jeTdfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k4X18uY29tcHV0ZWQ7
Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0K
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLkFycmF5Q29udHJvbGxlcmAgcHJv
dmlkZXMgYSB3YXkgZm9yIHlvdSB0byBwdWJsaXNoIGEgY29sbGVjdGlvbiBvZgotICAgICAgICAg
ICAgICBvYmplY3RzIHNvIHRoYXQgeW91IGNhbiBlYXNpbHkgYmluZCB0byB0aGUgY29sbGVjdGlv
biBmcm9tIGEgSGFuZGxlYmFycwotICAgICAgICAgICAgICBgI2VhY2hgIGhlbHBlciwgYW4gYEVt
YmVyLkNvbGxlY3Rpb25WaWV3YCwgb3Igb3RoZXIgY29udHJvbGxlcnMuCi0KLSAgICAgICAgICAg
ICAgVGhlIGFkdmFudGFnZSBvZiB1c2luZyBhbiBgQXJyYXlDb250cm9sbGVyYCBpcyB0aGF0IHlv
dSBvbmx5IGhhdmUgdG8gc2V0IHVwCi0gICAgICAgICAgICAgIHlvdXIgdmlldyBiaW5kaW5ncyBv
bmNlOyB0byBjaGFuZ2Ugd2hhdCdzIGRpc3BsYXllZCwgc2ltcGx5IHN3YXAgb3V0IHRoZQotICAg
ICAgICAgICAgICBgbW9kZWxgIHByb3BlcnR5IG9uIHRoZSBjb250cm9sbGVyLgotCi0gICAgICAg
ICAgICAgIEZvciBleGFtcGxlLCBpbWFnaW5lIHlvdSB3YW50ZWQgdG8gZGlzcGxheSBhIGxpc3Qg
b2YgaXRlbXMgZmV0Y2hlZCB2aWEgYW4gWEhSCi0gICAgICAgICAgICAgIHJlcXVlc3QuIENyZWF0
ZSBhbiBgRW1iZXIuQXJyYXlDb250cm9sbGVyYCBhbmQgc2V0IGl0cyBgbW9kZWxgIHByb3BlcnR5
OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlBcHAubGlz
dENvbnRyb2xsZXIgPSBFbWJlci5BcnJheUNvbnRyb2xsZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgICAgJC5nZXQoJ3Blb3BsZS5qc29uJywgZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAg
ICAgIE15QXBwLmxpc3RDb250cm9sbGVyLnNldCgnbW9kZWwnLCBkYXRhKTsKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZW4sIGNyZWF0ZSBh
IHZpZXcgdGhhdCBiaW5kcyB0byB5b3VyIG5ldyBjb250cm9sbGVyOgotCi0gICAgICAgICAgICAg
IGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjZWFjaCBNeUFwcC5saXN0Q29udHJvbGxl
cn19Ci0gICAgICAgICAgICAgICAge3tmaXJzdE5hbWV9fSB7e2xhc3ROYW1lfX0KLSAgICAgICAg
ICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFsdGhv
dWdoIHlvdSBhcmUgYmluZGluZyB0byB0aGUgY29udHJvbGxlciwgdGhlIGJlaGF2aW9yIG9mIHRo
aXMgY29udHJvbGxlcgotICAgICAgICAgICAgICBpcyB0byBwYXNzIHRocm91Z2ggYW55IG1ldGhv
ZHMgb3IgcHJvcGVydGllcyB0byB0aGUgdW5kZXJseWluZyBhcnJheS4gVGhpcwotICAgICAgICAg
ICAgICBjYXBhYmlsaXR5IGNvbWVzIGZyb20gYEVtYmVyLkFycmF5UHJveHlgLCB3aGljaCB0aGlz
IGNsYXNzIGluaGVyaXRzIGZyb20uCi0KLSAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSB3YW50
IHRvIGRpc3BsYXkgY29tcHV0ZWQgcHJvcGVydGllcyB3aXRoaW4gdGhlIGJvZHkgb2YgYW4KLSAg
ICAgICAgICAgICAgYCNlYWNoYCBoZWxwZXIgdGhhdCBkZXBlbmQgb24gdGhlIHVuZGVybHlpbmcg
aXRlbXMgaW4gYG1vZGVsYCwgYnV0IGFyZSBub3QKLSAgICAgICAgICAgICAgcHJlc2VudCBvbiB0
aG9zZSBpdGVtcy4gICBUbyBkbyB0aGlzLCBzZXQgYGl0ZW1Db250cm9sbGVyYCB0byB0aGUgbmFt
ZSBvZiBhCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIgKHByb2JhYmx5IGFuIGBPYmplY3RDb250
cm9sbGVyYCkgdGhhdCB3aWxsIHdyYXAgZWFjaCBpbmRpdmlkdWFsIGl0ZW0uCi0KLSAgICAgICAg
ICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICAgIHt7I2VhY2ggcG9zdCBpbiBjb250cm9sbGVyfX0KLSAgICAgICAgICAgICAgICAg
IDxsaT57e3Bvc3QudGl0bGV9fSAoe3twb3N0LnRpdGxlTGVuZ3RofX0gY2hhcmFjdGVycyk8L2xp
PgotICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5Qb3N0c0NvbnRyb2xsZXIg
PSBFbWJlci5BcnJheUNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBpdGVtQ29u
dHJvbGxlcjogJ3Bvc3QnCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIEFwcC5Q
b3N0Q29udHJvbGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICAvLyB0aGUgYHRpdGxlYCBwcm9wZXJ0eSB3aWxsIGJlIHByb3hpZWQgdG8gdGhlIHVu
ZGVybHlpbmcgcG9zdC4KLQotICAgICAgICAgICAgICAgIHRpdGxlTGVuZ3RoOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCgndGl0bGUnKS5sZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgndGl0bGUnKQotICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcyBpdCBpcyBoZWxw
ZnVsIHRvIHJldHVybiBhIGRpZmZlcmVudCBgaXRlbUNvbnRyb2xsZXJgIGRlcGVuZGluZwotICAg
ICAgICAgICAgICBvbiB0aGUgcGFydGljdWxhciBpdGVtLiAgU3ViY2xhc3NlcyBjYW4gZG8gdGhp
cyBieSBvdmVycmlkaW5nCi0gICAgICAgICAgICAgIGBsb29rdXBJdGVtQ29udHJvbGxlcmAuCi0K
LSAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBBcHAuTXlBcnJheUNvbnRyb2xsZXIgPSBFbWJlci5BcnJheUNvbnRy
b2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBsb29rdXBJdGVtQ29udHJvbGxlcjogZnVu
Y3Rpb24oIG9iamVjdCApIHsKLSAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZ2V0KCdpc1Nw
ZWNpYWwnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gInNwZWNpYWwiOyAvLyB1c2Ug
QXBwLlNwZWNpYWxDb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gInJlZ3VsYXIiOyAvLyB1c2UgQXBwLlJlZ3VsYXJDb250cm9s
bGVyCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGl0ZW1Db250cm9s
bGVyIGluc3RhbmNlcyB3aWxsIGhhdmUgYSBgcGFyZW50Q29udHJvbGxlcmAgcHJvcGVydHkgc2V0
IHRvCi0gICAgICAgICAgICAgIHRoZSBgQXJyYXlDb250cm9sbGVyYCBpbnN0YW5jZS4KLQotICAg
ICAgICAgICAgICBAY2xhc3MgQXJyYXlDb250cm9sbGVyCi0gICAgICAgICAgICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQXJyYXlQcm94eQotICAgICAg
ICAgICAgICBAdXNlcyBFbWJlci5Tb3J0YWJsZU1peGluCi0gICAgICAgICAgICAgIEB1c2VzIEVt
YmVyLkNvbnRyb2xsZXJNaXhpbgotICAgICAgICAgICAgKi8KLQotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gQXJyYXlQcm94eS5leHRlbmQoQ29udHJvbGxlck1peGluLCBTb3J0YWJs
ZU1peGluLCB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgY29u
dHJvbGxlciB1c2VkIHRvIHdyYXAgaXRlbXMsIGlmIGFueS4KLQotICAgICAgICAgICAgICAgICAg
ICBAcHJvcGVydHkgaXRlbUNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBpdGVtQ29udHJvbGxlcjogbnVsbCwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciB0
byB3cmFwIGl0ZW1zLCBvciBgbnVsbGAgaWYgaXRlbXMgc2hvdWxkCi0gICAgICAgICAgICAgICAg
ICAgIGJlIHJldHVybmVkIGRpcmVjdGx5LiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2lt
cGx5IHJldHVybnMgdGhlCi0gICAgICAgICAgICAgICAgICAgIGBpdGVtQ29udHJvbGxlcmAgcHJv
cGVydHksIGJ1dCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byByZXR1cm4K
LSAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGNvbnRyb2xsZXJzIGZvciBkaWZmZXJlbnQg
b2JqZWN0cy4KLQotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5NeUFycmF5
Q29udHJvbGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAg
ICAgICAgICAgIGxvb2t1cEl0ZW1Db250cm9sbGVyOiBmdW5jdGlvbiggb2JqZWN0ICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5nZXQoJ2lzU3BlY2lhbCcpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3BlY2lhbCI7IC8vIHVzZSBBcHAuU3BlY2lh
bENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAicmVndWxhciI7IC8vIHVzZSBBcHAuUmVndWxhckNvbnRy
b2xsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGxvb2t1cEl0ZW1Db250cm9sbGVyCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxvb2t1cEl0
ZW1Db250cm9sbGVyOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0KHRoaXMsICdpdGVtQ29udHJvbGxlcicpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgb2JqZWN0QXRDb250ZW50OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgICAgICB2YXIg
bGVuZ3RoID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYW5n
ZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLSAgICAgICAgICAgICAg
ICB2YXIgb2JqZWN0ID0gYXJyYW5nZWRDb250ZW50ICYmIGFycmFuZ2VkQ29udGVudC5vYmplY3RB
dChpZHgpOwotICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyQ2xhc3M7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXJDbGFzcyA9IHRoaXMubG9va3VwSXRlbUNvbnRyb2xsZXIob2JqZWN0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXJDbGFzcykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlckF0KGlkeCwgb2JqZWN0LCBjb250cm9s
bGVyQ2xhc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gV2hlbiBgY29udHJvbGxlckNsYXNzYCBpcyBmYWxzeSwgd2UgaGF2
ZSBub3Qgb3B0ZWQgaW4gdG8gdXNpbmcgaXRlbQotICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xs
ZXJzLCBzbyByZXR1cm4gdGhlIG9iamVjdCBkaXJlY3RseS4KLQotICAgICAgICAgICAgICAgIC8v
IFdoZW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZSwgd2Ugd2FudCB0byByZXR1cm4gdGhlICJv
dXQgb2YgcmFuZ2UiCi0gICAgICAgICAgICAgICAgLy8gdmFsdWUsIHdoYXRldmVyIHRoYXQgbWln
aHQgYmUuICBSYXRoZXIgdGhhbiBtYWtlIGFzc3VtcHRpb25zCi0gICAgICAgICAgICAgICAgLy8g
KGUuZy4gZ3Vlc3NpbmcgYG51bGxgIG9yIGB1bmRlZmluZWRgKSB3ZSBkZWZlciB0aGlzIHRvIGBh
cnJhbmdlZENvbnRlbnRgLgotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBhcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fcmVzZXRTdWJDb250cm9sbGVycygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
YXJyYXlDb250ZW50RGlkQ2hhbmdlOiBmdW5jdGlvbihpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN1YkNvbnRyb2xsZXJzID0gdGhpcy5fc3ViQ29udHJv
bGxlcnM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3ViQ29udHJvbGxlcnMubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBzdWJDb250cm9sbGVyc1RvUmVtb3ZlID0gc3ViQ29udHJv
bGxlcnMuc2xpY2UoaWR4LCBpZHggKyByZW1vdmVkQ250KTsKLQotICAgICAgICAgICAgICAgICAg
ICBmb3JFYWNoKHN1YkNvbnRyb2xsZXJzVG9SZW1vdmUsIGZ1bmN0aW9uKHN1YkNvbnRyb2xsZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJDb250cm9sbGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ViQ29udHJvbGxlci5kZXN0cm95KCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2Uoc3ViQ29udHJvbGxlcnMsIGlkeCwgcmVtb3ZlZENudCwgbmV3IEFycmF5
KGFkZGVkQ250KSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhl
IHNoYWRvdyBhcnJheSBvZiBzdWJjb250cm9sbGVycyBtdXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHdl
IHRyaWdnZXIKLSAgICAgICAgICAgICAgICAvLyBvYnNlcnZlcnMsIG90aGVyd2lzZSBvYnNlcnZl
cnMgd2lsbCBnZXQgdGhlIHdyb25nIHN1YmNvbnRhaW5lciB3aGVuCi0gICAgICAgICAgICAgICAg
Ly8gY2FsbGluZyBgb2JqZWN0QXRgCi0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoaWR4LCBy
ZW1vdmVkQ250LCBhZGRlZENudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpbml0
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICAg
ICAgICAgIHRoaXMuX3N1YkNvbnRyb2xsZXJzID0gW107Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBtb2RlbDogY29tcHV0ZWQoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBFbWJlci5BKCk7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgKiBGbGFnIHRvIG1hcmsgYXMgYmVpbmcgInZpcnR1YWwiLiBVc2VkIHRv
IGtlZXAgdGhpcyBpbnN0YW5jZQotICAgICAgICAgICAgICAgICAgICogZnJvbSBwYXJ0aWNpcGF0
aW5nIGluIHRoZSBwYXJlbnRDb250cm9sbGVyIGhpZXJhcmNoeS4KLSAgICAgICAgICAgICAgICAg
ICAqCi0gICAgICAgICAgICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICog
QHByb3BlcnR5IF9pc1ZpcnR1YWwKLSAgICAgICAgICAgICAgICAgICAqIEB0eXBlIEJvb2xlYW4K
LSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2lzVmlydHVhbDogZmFsc2UsCi0K
LSAgICAgICAgICAgIGNvbnRyb2xsZXJBdDogZnVuY3Rpb24oaWR4LCBvYmplY3QsIGNvbnRyb2xs
ZXJDbGFzcykgewotICAgICAgICAgICAgICAgIHZhciBmdWxsTmFtZSwgc3ViQ29udHJvbGxlciwg
cGFyZW50Q29udHJvbGxlcjsKLQotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBnZXQo
dGhpcywgJ2NvbnRhaW5lcicpOwotICAgICAgICAgICAgICAgIHZhciBzdWJDb250cm9sbGVycyA9
IHRoaXMuX3N1YkNvbnRyb2xsZXJzOwotCi0gICAgICAgICAgICAgICAgaWYgKHN1YkNvbnRyb2xs
ZXJzLmxlbmd0aCA+IGlkeCkgewotICAgICAgICAgICAgICAgICAgICBzdWJDb250cm9sbGVyID0g
c3ViQ29udHJvbGxlcnNbaWR4XTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc3ViQ29udHJv
bGxlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbnRyb2xsZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBmdWxsTmFtZSA9ICdjb250cm9sbGVyOicgKyBjb250cm9sbGVyQ2xhc3M7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWNvbnRhaW5lci5oYXMoZnVsbE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFbWJlckVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSBpdGVtQ29udHJvbGxl
cjogIicgKyBjb250cm9sbGVyQ2xhc3MgKyAnIicpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9pc1ZpcnR1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
cGFyZW50Q29udHJvbGxlciA9IGdldCh0aGlzLCAncGFyZW50Q29udHJvbGxlcicpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIg
PSB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN1YkNvbnRyb2xs
ZXIgPSBjb250YWluZXIubG9va3VwRmFjdG9yeShmdWxsTmFtZSkuY3JlYXRlKHsKLSAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0OiBwYXJlbnRDb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRDb250cm9sbGVyOiBwYXJlbnRDb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAg
ICBtb2RlbDogb2JqZWN0Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBz
dWJDb250cm9sbGVyc1tpZHhdID0gc3ViQ29udHJvbGxlcjsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdWJDb250cm9sbGVyOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3N1YkNv
bnRyb2xsZXJzOiBudWxsLAotCi0gICAgICAgICAgICBfcmVzZXRTdWJDb250cm9sbGVyczogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN1YkNvbnRyb2xsZXJzID0gdGhpcy5fc3ViQ29udHJvbGxlcnM7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoc3ViQ29udHJvbGxlcnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzdWJDb250cm9sbGVycy5sZW5ndGg7IGxlbmd0aCA+
IGk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciA9IHN1YkNvbnRy
b2xsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmRlc3Ryb3koKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHN1YkNvbnRyb2xsZXJzLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuX3Jlc2V0U3ViQ29udHJvbGxlcnMoKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvY29udHJvbGxlciIsCi0gICAgWyJl
bWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29udHJv
bGxlciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBNaXhpbiA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50
aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAY2xhc3Mg
Q29udHJvbGxlcgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAg
IEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgICAgICAgICAgICBAdXNlcyBFbWJlci5Db250cm9s
bGVyTWl4aW4KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0g
PSBFbWJlck9iamVjdC5leHRlbmQoTWl4aW4pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXIt
cnVudGltZS9jb250cm9sbGVycy9vYmplY3RfY29udHJvbGxlciIsCi0gICAgWyJlbWJlci1ydW50
aW1lL21peGlucy9jb250cm9sbGVyIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94
eSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVu
Y3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFy
IENvbnRyb2xsZXJNaXhpbiA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgT2JqZWN0UHJveHkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1i
ZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
YEVtYmVyLk9iamVjdENvbnRyb2xsZXJgIGlzIHBhcnQgb2YgRW1iZXIncyBDb250cm9sbGVyIGxh
eWVyLiBJdCBpcyBpbnRlbmRlZAotICAgICAgICAgICAgICB0byB3cmFwIGEgc2luZ2xlIG9iamVj
dCwgcHJveHlpbmcgdW5oYW5kbGVkIGF0dGVtcHRzIHRvIGBnZXRgIGFuZCBgc2V0YCB0byB0aGUg
dW5kZXJseWluZwotICAgICAgICAgICAgICBtb2RlbCBvYmplY3QsIGFuZCB0byBmb3J3YXJkIHVu
aGFuZGxlZCBhY3Rpb24gYXR0ZW1wdHMgdG8gaXRzIGB0YXJnZXRgLgotCi0gICAgICAgICAgICAg
IGBFbWJlci5PYmplY3RDb250cm9sbGVyYCBkZXJpdmVzIHRoaXMgZnVuY3Rpb25hbGl0eSBmcm9t
IGl0cyBzdXBlcmNsYXNzCi0gICAgICAgICAgICAgIGBFbWJlci5PYmplY3RQcm94eWAgYW5kIHRo
ZSBgRW1iZXIuQ29udHJvbGxlck1peGluYCBtaXhpbi4KLQotICAgICAgICAgICAgICBAY2xhc3Mg
T2JqZWN0Q29udHJvbGxlcgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAg
ICAgICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdFByb3h5Ci0gICAgICAgICAgICAgIEB1c2VzIEVt
YmVyLkNvbnRyb2xsZXJNaXhpbgotICAgICAgICAgICAgKiovCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBPYmplY3RQcm94eS5leHRlbmQoQ29udHJvbGxlck1peGluKTsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvY29weSIsCi0gICAgWyJlbWJlci1tZXRhbC9l
bnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLXJ1bnRpbWUvc3lz
dGVtL29iamVjdCIsICJlbWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZSIsICJlbWJlci1tZXRh
bC9wbGF0Zm9ybSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVu
ZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3kxX18uaW5kZXhPZjsKLSAgICAgICAgdmFyIHR5cGVP
ZiA9IF9fZGVwZW5kZW5jeTJfXy50eXBlT2Y7Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9f
ZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29weWFibGUgPSBfX2RlcGVu
ZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTVf
Xy5jcmVhdGU7Ci0KLSAgICAgICAgZnVuY3Rpb24gX2NvcHkob2JqLCBkZWVwLCBzZWVuLCBjb3Bp
ZXMpIHsKLSAgICAgICAgICAgIHZhciByZXQsIGxvYywga2V5OwotCi0gICAgICAgICAgICAvLyBw
cmltaXRpdmUgZGF0YSB0eXBlcyBhcmUgaW1tdXRhYmxlLCBqdXN0IHJldHVybiB0aGVtLgotICAg
ICAgICAgICAgaWYgKCdvYmplY3QnICE9PSB0eXBlb2Ygb2JqIHx8IG9iaiA9PT0gbnVsbCkgCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKLQotICAgICAgICAgICAgLy8gYXZvaWQgY3ljbGlj
YWwgbG9vcHMKLSAgICAgICAgICAgIGlmIChkZWVwICYmIChsb2MgPSBpbmRleE9mKHNlZW4sIG9i
aikpID49IDApIAotICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZXNbbG9jXTsKLQotICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCdDYW5ub3QgY2xvbmUgYW4gRW1iZXIuT2JqZWN0IHRoYXQgZG9l
cyBub3QgaW1wbGVtZW50IEVtYmVyLkNvcHlhYmxlJywgIShvYmogaW5zdGFuY2VvZiBFbWJlck9i
amVjdCkgfHwgKENvcHlhYmxlICYmIENvcHlhYmxlLmRldGVjdChvYmopKSk7Ci0KLSAgICAgICAg
ICAgIC8vIElNUE9SVEFOVDogdGhpcyBzcGVjaWZpYyB0ZXN0IHdpbGwgZGV0ZWN0IGEgbmF0aXZl
IGFycmF5IG9ubHkuIEFueSBvdGhlcgotICAgICAgICAgICAgLy8gb2JqZWN0IHdpbGwgbmVlZCB0
byBpbXBsZW1lbnQgQ29weWFibGUuCi0gICAgICAgICAgICBpZiAodHlwZU9mKG9iaikgPT09ICdh
cnJheScpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBvYmouc2xpY2UoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZGVlcCkgewotICAgICAgICAgICAgICAgICAgICBsb2MgPSByZXQubGVuZ3RoOwot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1sb2MgPj0gMCkgCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXRbbG9jXSA9IF9jb3B5KHJldFtsb2NdLCBkZWVwLCBzZWVuLCBjb3BpZXMpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoQ29weWFibGUgJiYgQ29w
eWFibGUuZGV0ZWN0KG9iaikpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBvYmouY29weShkZWVw
LCBzZWVuLCBjb3BpZXMpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBE
YXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gbmV3IERhdGUob2JqLmdldFRpbWUoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldCA9IHt9OwotICAgICAgICAg
ICAgICAgIGZvciAoa2V5IGluIG9iaikgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW9iai5o
YXNPd25Qcm9wZXJ0eShrZXkpKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50cyBicm93c2VycyB0aGF0IGRvbid0
IHJlc3BlY3Qgbm9uLWVudW1lcmFiaWxpdHkgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY29weWluZyBpbnRlcm5hbCBFbWJlciBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoa2V5LnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJykgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRb
a2V5XSA9IGRlZXAgPyBfY29weShvYmpba2V5XSwgZGVlcCwgc2VlbiwgY29waWVzKSA6IG9ialtr
ZXldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGRlZXApIHsKLSAgICAgICAgICAgICAgICBzZWVuLnB1c2gob2JqKTsKLSAgICAgICAgICAgICAg
ICBjb3BpZXMucHVzaChyZXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
cmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENyZWF0ZXMgYSBj
bG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdC4gVGhpcyBmdW5jdGlvbiBjYW4gdGFrZSBqdXN0IGFi
b3V0Ci0gICAgICAgICAgICAgIGFueSB0eXBlIG9mIG9iamVjdCBhbmQgY3JlYXRlIGEgY2xvbmUg
b2YgaXQsIGluY2x1ZGluZyBwcmltaXRpdmUgdmFsdWVzCi0gICAgICAgICAgICAgICh3aGljaCBh
cmUgbm90IGFjdHVhbGx5IGNsb25lZCBiZWNhdXNlIHRoZXkgYXJlIGltbXV0YWJsZSkuCi0KLSAg
ICAgICAgICAgICAgSWYgdGhlIHBhc3NlZCBvYmplY3QgaW1wbGVtZW50cyB0aGUgYGNsb25lKClg
IG1ldGhvZCwgdGhlbiB0aGlzIGZ1bmN0aW9uCi0gICAgICAgICAgICAgIHdpbGwgc2ltcGx5IGNh
bGwgdGhhdCBtZXRob2QgYW5kIHJldHVybiB0aGUgcmVzdWx0LgotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgY29weQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjbG9uZQotICAgICAgICAgICAgICBAcGFyYW0g
e0Jvb2xlYW59IGRlZXAgSWYgdHJ1ZSwgYSBkZWVwIGNvcHkgb2YgdGhlIG9iamVjdCBpcyBtYWRl
Ci0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lZCBvYmplY3QKLSAgICAg
ICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBjb3B5
KG9iaiwgZGVlcCkgewotICAgICAgICAgICAgLy8gZmFzdCBwYXRocwotICAgICAgICAgICAgaWYg
KCdvYmplY3QnICE9PSB0eXBlb2Ygb2JqIHx8IG9iaiA9PT0gbnVsbCkgCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9iajsgLy8gY2FuJ3QgY29weSBwcmltaXRpdmVzCi0gICAgICAgICAgICBpZiAo
Q29weWFibGUgJiYgQ29weWFibGUuZGV0ZWN0KG9iaikpIAotICAgICAgICAgICAgICAgIHJldHVy
biBvYmouY29weShkZWVwKTsKLSAgICAgICAgICAgIHJldHVybiBfY29weShvYmosIGRlZXAsIGRl
ZXAgPyBbXSA6IG51bGwsIGRlZXAgPyBbXSA6IG51bGwpOwotICAgICAgICB9Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2NvcmUiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVy
LXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENv
bXBhcmVzIHR3byBvYmplY3RzLCByZXR1cm5pbmcgdHJ1ZSBpZiB0aGV5IGFyZSBsb2dpY2FsbHkg
ZXF1YWwuIFRoaXMgaXMKLSAgICAgICAgICAgICAgYSBkZWVwZXIgY29tcGFyaXNvbiB0aGFuIGEg
c2ltcGxlIHRyaXBsZSBlcXVhbC4gRm9yIHNldHMgaXQgd2lsbCBjb21wYXJlIHRoZQotICAgICAg
ICAgICAgICBpbnRlcm5hbCBvYmplY3RzLiBGb3IgYW55IG90aGVyIG9iamVjdCB0aGF0IGltcGxl
bWVudHMgYGlzRXF1YWwoKWAgaXQgd2lsbAotICAgICAgICAgICAgICByZXNwZWN0IHRoYXQgbWV0
aG9kLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIu
aXNFcXVhbCgnaGVsbG8nLCAnaGVsbG8nKTsgIC8vIHRydWUKLSAgICAgICAgICAgICAgRW1iZXIu
aXNFcXVhbCgxLCAyKTsgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVy
LmlzRXF1YWwoWzQsIDJdLCBbNCwgMl0pOyAgICAvLyBmYWxzZQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBAbWV0aG9kIGlzRXF1YWwKLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gYSBmaXJzdCBvYmplY3QgdG8gY29tcGFy
ZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gYiBzZWNvbmQgb2JqZWN0IHRvIGNvbXBh
cmUKLSAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICovCi0gICAg
ICAgIHZhciBpc0VxdWFsID0gZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7Ci0gICAgICAgICAgICBp
ZiAoYSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgYS5pc0VxdWFsKSAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYS5pc0VxdWFsKGIpOwotICAgICAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRl
ICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0VGlt
ZSgpID09PSBiLmdldFRpbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBh
ID09PSBiOwotICAgICAgICB9OwotICAgICAgICBfX2V4cG9ydHNfXy5pc0VxdWFsID0gaXNFcXVh
bDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9uIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvZXhwYW5kX3Byb3BlcnRpZXMiLCAi
ZW1iZXItbWV0YWwvY29tcHV0ZWQiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVy
ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkVYVEVORF9Q
Uk9UT1RZUEVTLCBFbWJlci5hc3NlcnQKLSAgICAgICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSBf
X2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBl
bmRlbmN5M19fLmNvbXB1dGVkOwotCi0gICAgICAgIHZhciBhX3NsaWNlID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlOwotICAgICAgICB2YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90
b3R5cGU7Ci0KLSAgICAgICAgaWYgKEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8
IEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uKSB7Ci0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBUaGUgYHByb3BlcnR5YCBleHRlbnNpb24gb2YgSmF2YXNjcmlw
dCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAg
d2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBF
Uy5GdW5jdGlvbmAgaXMKLSAgICAgICAgICAgICAgICAgICAgYHRydWVgLCB3aGljaCBpcyB0aGUg
ZGVmYXVsdC4KLQotICAgICAgICAgICAgICAgICAgICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFsbG93
IHlvdSB0byB0cmVhdCBhIGZ1bmN0aW9uIGxpa2UgYSBwcm9wZXJ0eToKLQotICAgICAgICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIE15QXBwLlByZXNpZGVu
dCA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFt
ZTogJycsCi0gICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6ICAnJywKLQotICAgICAgICAg
ICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5h
bWUnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCB0aGlzIGZsYWcgdG8gbWFy
ayB0aGUgZnVuY3Rpb24gYXMgYSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgIH0ucHJv
cGVydHkoKQotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICB2
YXIgcHJlc2lkZW50ID0gTXlBcHAuUHJlc2lkZW50LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAg
ICAgICAgZmlyc3ROYW1lOiAiQmFyYWNrIiwKLSAgICAgICAgICAgICAgICAgICAgICBsYXN0TmFt
ZTogIk9iYW1hIgotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICBwcmVzaWRlbnQuZ2V0KCdmdWxsTmFtZScpOyAgICAvLyAiQmFyYWNrIE9iYW1hIgotICAgICAg
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUcmVhdGluZyBhIGZ1bmN0
aW9uIGxpa2UgYSBwcm9wZXJ0eSBpcyB1c2VmdWwgYmVjYXVzZSB0aGV5IGNhbiB3b3JrIHdpdGgK
LSAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MsIGp1c3QgbGlrZSBhbnkgb3RoZXIgcHJvcGVy
dHkuCi0KLSAgICAgICAgICAgICAgICAgICAgTWFueSBjb21wdXRlZCBwcm9wZXJ0aWVzIGhhdmUg
ZGVwZW5kZW5jaWVzIG9uIG90aGVyIHByb3BlcnRpZXMuIEZvcgotICAgICAgICAgICAgICAgICAg
ICBleGFtcGxlLCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGBmdWxsTmFtZWAgcHJvcGVydHkg
ZGVwZW5kcyBvbgotICAgICAgICAgICAgICAgICAgICBgZmlyc3ROYW1lYCBhbmQgYGxhc3ROYW1l
YCB0byBkZXRlcm1pbmUgaXRzIHZhbHVlLiBZb3UgY2FuIHRlbGwgRW1iZXIKLSAgICAgICAgICAg
ICAgICAgICAgYWJvdXQgdGhlc2UgZGVwZW5kZW5jaWVzIGxpa2UgdGhpczoKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIE15QXBwLlByZXNp
ZGVudCA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
TmFtZTogJycsCi0gICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6ICAnJywKLQotICAgICAg
ICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFz
dE5hbWUnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVsbCBFbWJlci5qcyB0aGF0
IHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgZGVwZW5kcyBvbiBmaXJzdE5hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuZCBsYXN0TmFtZQotICAgICAgICAgICAgICAgICAgICAgIH0ucHJv
cGVydHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpCi0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBNYWtlIHN1cmUg
eW91IGxpc3QgdGhlc2UgZGVwZW5kZW5jaWVzIHNvIEVtYmVyIGtub3dzIHdoZW4gdG8gdXBkYXRl
Ci0gICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzIHRoYXQgY29ubmVjdCB0byBhIGNvbXB1dGVk
IHByb3BlcnR5LiBDaGFuZ2luZyBhIGRlcGVuZGVuY3kKLSAgICAgICAgICAgICAgICAgICAgd2ls
bCBub3QgaW1tZWRpYXRlbHkgdHJpZ2dlciBhbiB1cGRhdGUgb2YgdGhlIGNvbXB1dGVkIHByb3Bl
cnR5LCBidXQKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBpbnN0ZWFkIGNsZWFyIHRoZSBjYWNo
ZSBzbyB0aGF0IGl0IGlzIHVwZGF0ZWQgd2hlbiB0aGUgbmV4dCBgZ2V0YAotICAgICAgICAgICAg
ICAgICAgICBpcyBjYWxsZWQgb24gdGhlIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgICAgICAg
IFNlZSBbRW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eV0oL2FwaS9jbGFzc2VzL0VtYmVyLkNvbXB1dGVk
UHJvcGVydHkuaHRtbCksIFtFbWJlci5jb21wdXRlZF0oL2FwaS8jbWV0aG9kX2NvbXB1dGVkKS4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAg
ICAgIEBmb3IgRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBGdW5j
dGlvblByb3RvdHlwZS5wcm9wZXJ0eSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZh
ciByZXQgPSBjb21wdXRlZCh0aGlzKTsKLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlZFByb3Bl
cnR5LnByb3RvdHlwZS5wcm9wZXJ0eSBleHBhbmRzIHByb3BlcnRpZXM7IG5vIG5lZWQgZm9yIHVz
IHRvCi0gICAgICAgICAgICAgICAgLy8gZG8gc28gaGVyZS4KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmV0LnByb3BlcnR5LmFwcGx5KHJldCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgYG9ic2VydmVzYCBleHRl
bnNpb24gb2YgSmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUKLSAg
ICAgICAgICAgICAgICAgICAgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yIGBFbWJl
ci5FWFRFTkRfUFJPVE9UWVBFUy5GdW5jdGlvbmAgaXMKLSAgICAgICAgICAgICAgICAgICAgdHJ1
ZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBv
YnNlcnZlIHByb3BlcnR5IGNoYW5nZXMgc2ltcGx5IGJ5IGFkZGluZyB0aGUgYG9ic2VydmVzYAot
ICAgICAgICAgICAgICAgICAgICBjYWxsIHRvIHRoZSBlbmQgb2YgeW91ciBtZXRob2QgZGVjbGFy
YXRpb25zIGluIGNsYXNzZXMgdGhhdCB5b3Ugd3JpdGUuCi0gICAgICAgICAgICAgICAgICAgIEZv
ciBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAg
dmFsdWVPYnNlcnZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBF
eGVjdXRlcyB3aGVuZXZlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBjaGFuZ2VzCi0gICAgICAgICAg
ICAgICAgICAgICAgfS5vYnNlcnZlcygndmFsdWUnKQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGZ1
dHVyZSB0aGlzIG1ldGhvZCBtYXkgYmVjb21lIGFzeW5jaHJvbm91cy4gSWYgeW91IHdhbnQgdG8g
ZW5zdXJlCi0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9ub3VzIGJlaGF2aW9yLCB1c2UgYG9i
c2VydmVzSW1tZWRpYXRlbHlgLgotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBgRW1iZXIub2Jz
ZXJ2ZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXMKLSAgICAgICAg
ICAgICAgICAgICAgQGZvciBGdW5jdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9ic2VydmVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGFkZFdhdGNoZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYnMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgd2F0Y2hlZC5wdXNoKG9icyk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgICAgICB2YXIgd2F0Y2hlZCA9IFtdOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZXhwYW5kUHJvcGVydGllcyhhcmd1bWVudHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fX2VtYmVyX29ic2VydmVzX18g
PSB3YXRjaGVkOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGBvYnNlcnZlc0lt
bWVkaWF0ZWx5YCBleHRlbnNpb24gb2YgSmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBp
cwotICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RP
VFlQRVNgIG9yCi0gICAgICAgICAgICAgICAgICAgIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5G
dW5jdGlvbmAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgWW91IGNhbiBvYnNlcnZlIHByb3BlcnR5IGNoYW5nZXMgc2ltcGx5IGJ5IGFkZGluZyB0
aGUgYG9ic2VydmVzSW1tZWRpYXRlbHlgCi0gICAgICAgICAgICAgICAgICAgIGNhbGwgdG8gdGhl
IGVuZCBvZiB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyB0aGF0IHlvdSB3cml0
ZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAi
dmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgICB9Lm9ic2VydmVz
SW1tZWRpYXRlbHkoJ3ZhbHVlJykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEluIHRoZSBmdXR1cmUsIGBvYnNl
cnZlc2AgbWF5IGJlY29tZSBhc3luY2hyb25vdXMuIEluIHRoaXMgZXZlbnQsCi0gICAgICAgICAg
ICAgICAgICAgIGBvYnNlcnZlc0ltbWVkaWF0ZWx5YCB3aWxsIG1haW50YWluIHRoZSBzeW5jaHJv
bm91cyBiZWhhdmlvci4KLQotICAgICAgICAgICAgICAgICAgICBTZWUgYEVtYmVyLmltbWVkaWF0
ZU9ic2VydmVyYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9ic2VydmVzSW1tZWRp
YXRlbHkKLSAgICAgICAgICAgICAgICAgICAgQGZvciBGdW5jdGlvbgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9ic2VydmVzSW1tZWRpYXRlbHkg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3Vt
ZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyZyA9
IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJJbW1lZGlh
dGUgb2JzZXJ2ZXJzIG11c3Qgb2JzZXJ2ZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIG9ubHksIG5vdCBw
cm9wZXJ0aWVzIG9uIG90aGVyIG9iamVjdHMuIiwgYXJnLmluZGV4T2YoJy4nKSA9PT0gLTEpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIG9ic2VydmVzIGhhbmRsZXMg
cHJvcGVydHkgZXhwYW5zaW9uCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBUaGUgYG9ic2VydmVzQmVmb3JlYCBleHRlbnNpb24gb2Yg
SmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcwotICAgICAgICAgICAgICAgICAgICBh
dmFpbGFibGUgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yCi0gICAgICAgICAgICAg
ICAgICAgIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5GdW5jdGlvbmAgaXMgdHJ1ZSwgd2hpY2gg
aXMgdGhlIGRlZmF1bHQuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgbm90aWZp
ZWQgd2hlbiBhIHByb3BlcnR5IGNoYW5nZSBpcyBhYm91dCB0byBoYXBwZW4gYnkKLSAgICAgICAg
ICAgICAgICAgICAgYnkgYWRkaW5nIHRoZSBgb2JzZXJ2ZXNCZWZvcmVgIGNhbGwgdG8gdGhlIGVu
ZCBvZiB5b3VyIG1ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMgaW4gY2xh
c3NlcyB0aGF0IHlvdSB3cml0ZS4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5ldmVyIHRoZSAidmFsdWUiIHByb3Bl
cnR5IGlzIGFib3V0IHRvIGNoYW5nZQotICAgICAgICAgICAgICAgICAgICAgIH0ub2JzZXJ2ZXNC
ZWZvcmUoJ3ZhbHVlJykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBgRW1iZXIuYmVmb3JlT2JzZXJ2ZXJg
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXNCZWZvcmUKLSAgICAgICAg
ICAgICAgICAgICAgQGZvciBGdW5jdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9ic2VydmVzQmVmb3JlID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGFkZFdhdGNoZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYnMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgd2F0Y2hlZC5wdXNoKG9icyk7Ci0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICB2YXIgd2F0Y2hlZCA9IFtdOwotCi0gICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwYW5kUHJvcGVydGllcyhhcmd1bWVudHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5fX2VtYmVyX29ic2Vy
dmVzQmVmb3JlX18gPSB3YXRjaGVkOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhl
IGBvbmAgZXh0ZW5zaW9uIG9mIEphdmFzY3JpcHQncyBGdW5jdGlvbiBwcm90b3R5cGUgaXMgYXZh
aWxhYmxlCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVT
YCBvciBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuRnVuY3Rpb25gIGlzCi0gICAgICAgICAgICAg
ICAgICAgIHRydWUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgotCi0gICAgICAgICAgICAgICAgICAg
IFlvdSBjYW4gbGlzdGVuIGZvciBldmVudHMgc2ltcGx5IGJ5IGFkZGluZyB0aGUgYG9uYCBjYWxs
IHRvIHRoZSBlbmQgb2YKLSAgICAgICAgICAgICAgICAgICAgeW91ciBtZXRob2QgZGVjbGFyYXRp
b25zIGluIGNsYXNzZXMgb3IgbWl4aW5zIHRoYXQgeW91IHdyaXRlLiBGb3IgZXhhbXBsZToKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVt
YmVyLk1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgZG9Tb21ldGhpbmdXaXRo
RWxlbWVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGVjdXRl
cyB3aGVuZXZlciB0aGUgImRpZEluc2VydEVsZW1lbnQiIGV2ZW50IGZpcmVzCi0gICAgICAgICAg
ICAgICAgICAgICAgfS5vbignZGlkSW5zZXJ0RWxlbWVudCcpCi0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBTZWUg
YEVtYmVyLm9uYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9uCi0gICAgICAgICAg
ICAgICAgICAgIEBmb3IgRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBGdW5jdGlvblByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZh
ciBldmVudHMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9fZW1iZXJfbGlzdGVuc19fID0gZXZlbnRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXIt
cnVudGltZS9leHQvcnN2cCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFs
L2xvZ2dlciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgLyogZ2xvYmFscyBSU1ZQOnRydWUgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIExvZ2dlciA9IF9fZGVwZW5kZW5jeTJf
X1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBSU1ZQID0gcmVxdWlyZU1vZHVsZSgicnN2cCIp
OwotICAgICAgICB2YXIgVGVzdCwgdGVzdE1vZHVsZU5hbWUgPSAnZW1iZXItdGVzdGluZy90ZXN0
JzsKLQotICAgICAgICBSU1ZQLm9uZXJyb3JEZWZhdWx0ID0gZnVuY3Rpb24oZXJyb3IpIHsKLSAg
ICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKEVtYmVyLnRlc3RpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRVM2VE9ETzogcmVt
b3ZlIHdoZW4gcG9zc2libGUKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFUZXN0ICYmIEVtYmVy
Ll9fbG9hZGVyLnJlZ2lzdHJ5W3Rlc3RNb2R1bGVOYW1lXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgVGVzdCA9IHJlcXVpcmVNb2R1bGUodGVzdE1vZHVsZU5hbWUpWydkZWZhdWx0J107Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdCAmJiBU
ZXN0LmFkYXB0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QuYWRhcHRlci5leGNl
cHRpb24oZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKEVtYmVyLm9uZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIub25lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgTG9nZ2VyLmVycm9yKGVycm9yLnN0YWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuYXNzZXJ0KGVycm9yLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIFJTVlAub24oJ2Vycm9yJywgUlNWUC5vbmVy
cm9yRGVmYXVsdCk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFJTVlA7Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2V4dC9zdHJpbmciLAotICAgIFsiZW1i
ZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZh
ciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5F
WFRFTkRfUFJPVE9UWVBFUywgRW1iZXIuYXNzZXJ0LCBFbWJlci5GRUFUVVJFUwotICAgICAgICB2
YXIgZm10ID0gX19kZXBlbmRlbmN5Ml9fLmZtdDsKLSAgICAgICAgdmFyIHcgPSBfX2RlcGVuZGVu
Y3kyX18udzsKLSAgICAgICAgdmFyIGxvYyA9IF9fZGVwZW5kZW5jeTJfXy5sb2M7Ci0gICAgICAg
IHZhciBjYW1lbGl6ZSA9IF9fZGVwZW5kZW5jeTJfXy5jYW1lbGl6ZTsKLSAgICAgICAgdmFyIGRl
Y2FtZWxpemUgPSBfX2RlcGVuZGVuY3kyX18uZGVjYW1lbGl6ZTsKLSAgICAgICAgdmFyIGRhc2hl
cml6ZSA9IF9fZGVwZW5kZW5jeTJfXy5kYXNoZXJpemU7Ci0gICAgICAgIHZhciB1bmRlcnNjb3Jl
ID0gX19kZXBlbmRlbmN5Ml9fLnVuZGVyc2NvcmU7Ci0gICAgICAgIHZhciBjYXBpdGFsaXplID0g
X19kZXBlbmRlbmN5Ml9fLmNhcGl0YWxpemU7Ci0gICAgICAgIHZhciBjbGFzc2lmeSA9IF9fZGVw
ZW5kZW5jeTJfXy5jbGFzc2lmeTsKLQotICAgICAgICB2YXIgU3RyaW5nUHJvdG90eXBlID0gU3Ry
aW5nLnByb3RvdHlwZTsKLQotICAgICAgICBpZiAoRW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09
IHRydWUgfHwgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5nKSB7Ci0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5mbXRdKC9hcGkvY2xh
c3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZm10KS4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIGZtdAotICAgICAgICAgICAgICAgICAgICBAZm9yIFN0cmluZwotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZS5mbXQgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm10KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2VlIFtFbWJl
ci5TdHJpbmcud10oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF93KS4KLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHcKLSAgICAgICAgICAgICAgICAgICAgQGZvciBT
dHJpbmcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBTdHJpbmdQcm90b3R5cGUu
dyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB3KHRoaXMpOwotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNlZSBbRW1i
ZXIuU3RyaW5nLmxvY10oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9sb2Mp
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgbG9jCi0gICAgICAgICAgICAgICAgICAg
IEBmb3IgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgU3RyaW5nUHJv
dG90eXBlLmxvYyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBsb2ModGhp
cywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5jYW1lbGl6ZV0oL2FwaS9jbGFzc2VzL0Vt
YmVyLlN0cmluZy5odG1sI21ldGhvZF9jYW1lbGl6ZSkuCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBjYW1lbGl6ZQotICAgICAgICAgICAgICAgICAgICBAZm9yIFN0cmluZwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZS5jYW1lbGl6ZSA9IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbGl6ZSh0aGlzKTsKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZWUgW0Vt
YmVyLlN0cmluZy5kZWNhbWVsaXplXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0
aG9kX2RlY2FtZWxpemUpLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVjYW1lbGl6
ZQotICAgICAgICAgICAgICAgICAgICBAZm9yIFN0cmluZwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZS5kZWNhbWVsaXplID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGRlY2FtZWxpemUodGhpcyk7Ci0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2VlIFtFbWJlci5TdHJpbmcu
ZGFzaGVyaXplXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2Rhc2hlcml6
ZSkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkYXNoZXJpemUKLSAgICAgICAgICAg
ICAgICAgICAgQGZvciBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBT
dHJpbmdQcm90b3R5cGUuZGFzaGVyaXplID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGRhc2hlcml6ZSh0aGlzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy51bmRlcnNjb3JlXSgvYXBp
L2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX3VuZGVyc2NvcmUpLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgdW5kZXJzY29yZQotICAgICAgICAgICAgICAgICAgICBAZm9y
IFN0cmluZwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlw
ZS51bmRlcnNjb3JlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVy
c2NvcmUodGhpcyk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgU2VlIFtFbWJlci5TdHJpbmcuY2xhc3NpZnldKC9hcGkvY2xhc3Nlcy9FbWJl
ci5TdHJpbmcuaHRtbCNtZXRob2RfY2xhc3NpZnkpLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgY2xhc3NpZnkKLSAgICAgICAgICAgICAgICAgICAgQGZvciBTdHJpbmcKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBTdHJpbmdQcm90b3R5cGUuY2xhc3NpZnkgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NpZnkodGhpcyk7Ci0gICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2VlIFtFbWJl
ci5TdHJpbmcuY2FwaXRhbGl6ZV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhv
ZF9jYXBpdGFsaXplKS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhcGl0YWxpemUK
LSAgICAgICAgICAgICAgICAgICAgQGZvciBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBTdHJpbmdQcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMpOwotICAgICAgICAgICAgfTsKLSAg
ICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9rZXlzIiwKLSAgICBb
ImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbnVt
ZXJhYmxlVXRpbHMgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNy
ZWF0ZSA9IF9fZGVwZW5kZW5jeTJfXy5jcmVhdGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFJldHVybnMgYWxsIG9mIHRoZSBrZXlzIGRlZmluZWQgb24gYW4gb2JqZWN0IG9yIGhhc2gu
IFRoaXMgaXMgdXNlZnVsCi0gICAgICAgICAgICAgIHdoZW4gaW5zcGVjdGluZyBvYmplY3RzIGZv
ciBkZWJ1Z2dpbmcuIE9uIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdCwgdGhpcwotICAgICAgICAg
ICAgICB1c2VzIHRoZSBuYXRpdmUgYE9iamVjdC5rZXlzYCBpbXBsZW1lbnRhdGlvbi4KLQotICAg
ICAgICAgICAgICBAbWV0aG9kIGtleXMKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAg
ICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqCi0gICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5
fSBBcnJheSBjb250YWluaW5nIGtleXMgb2Ygb2JqCi0gICAgICAgICAgICAqLwotICAgICAgICB2
YXIga2V5cyA9IE9iamVjdC5rZXlzOwotICAgICAgICBpZiAoIWtleXMgfHwgY3JlYXRlLmlzU2lt
dWxhdGVkKSB7Ci0gICAgICAgICAgICB2YXIgcHJvdG90eXBlUHJvcGVydGllcyA9IFsKLSAgICAg
ICAgICAgICdjb25zdHJ1Y3RvcicsCi0gICAgICAgICAgICAnaGFzT3duUHJvcGVydHknLAotICAg
ICAgICAgICAgJ2lzUHJvdG90eXBlT2YnLAotICAgICAgICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJh
YmxlJywKLSAgICAgICAgICAgICd2YWx1ZU9mJywKLSAgICAgICAgICAgICd0b0xvY2FsZVN0cmlu
ZycsCi0gICAgICAgICAgICAndG9TdHJpbmcnCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAg
cHVzaFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKG9iaiwgYXJyYXksIGtleSkgewotICAgICAgICAg
ICAgICAgIC8vIFByZXZlbnRzIGJyb3dzZXJzIHRoYXQgZG9uJ3QgcmVzcGVjdCBub24tZW51bWVy
YWJpbGl0eSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gY29weWluZyBpbnRlcm5hbCBFbWJlciBw
cm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgaWYgKGtleS5zdWJzdHJpbmcoMCwgMikgPT09ICdf
XycpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGtl
eSA9PT0gJ19zdXBlcicpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgaWYgKEVudW1lcmFibGVVdGlscy5pbmRleE9mKGFycmF5LCBrZXkpID49IDApIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmou
aGFzT3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkp
KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgYXJyYXku
cHVzaChrZXkpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAga2V5cyA9IGZ1bmN0aW9u
IGtleXMob2JqKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLCBrZXk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hQcm9w
ZXJ0eU5hbWUob2JqLCByZXQsIGtleSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gSUU4IGRvZXNuJ3QgZW51bWVyYXRlIHByb3BlcnR5IHRoYXQgbmFtZWQgdGhlIHNh
bWUgYXMgcHJvdG90eXBlIHByb3BlcnRpZXMuCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBwcm90b3R5cGVQcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBrZXkgPSBwcm90b3R5cGVQcm9wZXJ0aWVzW2ldOwotCi0gICAgICAgICAg
ICAgICAgICAgIHB1c2hQcm9wZXJ0eU5hbWUob2JqLCByZXQsIGtleSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0ga2V5czsKLSAgICB9KTsK
LSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwKLSAgICBb
ImVtYmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19k
ZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5
Ml9fLk1peGluOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5M19fLmdldDsKLSAgICAg
ICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTRfXy50eXBlT2Y7Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIFRoZSBgRW1iZXIuQWN0aW9uSGFuZGxlcmAgbWl4aW4gaW1wbGVtZW50cyBz
dXBwb3J0IGZvciBtb3ZpbmcgYW4gYGFjdGlvbnNgCi0gICAgICAgICAgICAgIHByb3BlcnR5IHRv
IGFuIGBfYWN0aW9uc2AgcHJvcGVydHkgYXQgZXh0ZW5kIHRpbWUsIGFuZCBhZGRpbmcgYF9hY3Rp
b25zYAotICAgICAgICAgICAgICB0byB0aGUgb2JqZWN0J3MgbWVyZ2VkUHJvcGVydGllcyBsaXN0
LgotCi0gICAgICAgICAgICAgIGBFbWJlci5BY3Rpb25IYW5kbGVyYCBpcyBhdmFpbGFibGUgb24g
c29tZSBmYW1pbGlhciBjbGFzc2VzIGluY2x1ZGluZwotICAgICAgICAgICAgICBgRW1iZXIuUm91
dGVgLCBgRW1iZXIuVmlld2AsIGBFbWJlci5Db21wb25lbnRgLCBhbmQgY29udHJvbGxlcnMgc3Vj
aCBhcwotICAgICAgICAgICAgICBgRW1iZXIuQ29udHJvbGxlcmAgYW5kIGBFbWJlci5PYmplY3RD
b250cm9sbGVyYC4KLSAgICAgICAgICAgICAgKEludGVybmFsbHkgdGhlIG1peGluIGlzIHVzZWQg
YnkgYEVtYmVyLkNvcmVWaWV3YCwgYEVtYmVyLkNvbnRyb2xsZXJNaXhpbmAsCi0gICAgICAgICAg
ICAgIGFuZCBgRW1iZXIuUm91dGVgIGFuZCBhdmFpbGFibGUgdG8gdGhlIGFib3ZlIGNsYXNzZXMg
dGhyb3VnaAotICAgICAgICAgICAgICBpbmhlcml0YW5jZS4pCi0KLSAgICAgICAgICAgICAgQGNs
YXNzIEFjdGlvbkhhbmRsZXIKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgKi8KLSAgICAgICAgdmFyIEFjdGlvbkhhbmRsZXIgPSBNaXhpbi5jcmVhdGUoewotICAg
ICAgICAgICAgbWVyZ2VkUHJvcGVydGllczogWydfYWN0aW9ucyddLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zLCBrZXll
ZCBieSBuYW1lLCBhdmFpbGFibGUgb24gdGhpcwotICAgICAgICAgICAgICAgICAgICBgQWN0aW9u
SGFuZGxlcmAgYXMgYWN0aW9uIHRhcmdldHMuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlc2Ug
ZnVuY3Rpb25zIHdpbGwgYmUgaW52b2tlZCB3aGVuIGEgbWF0Y2hpbmcgYHt7YWN0aW9ufX1gIGlz
IHRyaWdnZXJlZAotICAgICAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBhIHRlbXBsYXRlIGFu
ZCB0aGUgYXBwbGljYXRpb24ncyBjdXJyZW50IHJvdXRlIGlzIHRoaXMgcm91dGUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQWN0aW9ucyBjYW4gYWxzbyBiZSBpbnZva2VkIGZyb20gb3RoZXIgcGFy
dHMgb2YgeW91ciBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICB2aWEgYEFjdGlvbkhh
bmRsZXIjc2VuZGAuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGBhY3Rpb25zYCBoYXNoIHdp
bGwgaW5oZXJpdCBhY3Rpb24gaGFuZGxlcnMgZnJvbQotICAgICAgICAgICAgICAgICAgICB0aGUg
YGFjdGlvbnNgIGhhc2ggZGVmaW5lZCBvbiBleHRlbmRlZCBwYXJlbnQgY2xhc3NlcwotICAgICAg
ICAgICAgICAgICAgICBvciBtaXhpbnMgcmF0aGVyIHRoYW4ganVzdCByZXBsYWNlIHRoZSBlbnRp
cmUgaGFzaCwgZS5nLjoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAg
ICAgICAgICBBcHAuQ2FuRGlzcGxheUJhbm5lciA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgZGlz
cGxheUJhbm5lcjogZnVuY3Rpb24obXNnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IC4uLgotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLldlbGNv
bWVSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZChBcHAuQ2FuRGlzcGxheUJhbm5lciwgewotICAg
ICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBs
YXlNdXNpYzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLgot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYFdlbGNvbWVSb3V0
ZWAsIHdoZW4gYWN0aXZlLCB3aWxsIGJlIGFibGUgdG8gcmVzcG9uZAotICAgICAgICAgICAgICAg
ICAgICAvLyB0byBib3RoIGFjdGlvbnMsIHNpbmNlIHRoZSBhY3Rpb25zIGhhc2ggaXMgbWVyZ2Vk
IHJhdGhlcgotICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHJlcGxhY2VkIHdoZW4gZXh0ZW5k
aW5nIG1peGlucyAvIHBhcmVudCBjbGFzc2VzLgotICAgICAgICAgICAgICAgICAgICB0aGlzLnNl
bmQoJ2Rpc3BsYXlCYW5uZXInKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kKCdwbGF5
TXVzaWMnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
V2l0aGluIGEgQ29udHJvbGxlciwgUm91dGUsIFZpZXcgb3IgQ29tcG9uZW50J3MgYWN0aW9uIGhh
bmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgYHRoaXNgIGNvbnRl
eHQgaXMgdGhlIENvbnRyb2xsZXIsIFJvdXRlLCBWaWV3IG9yCi0gICAgICAgICAgICAgICAgICAg
IENvbXBvbmVudCBvYmplY3Q6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAg
ICAgICAgICAgICAgQXBwLlNvbmdSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgbXlBY3Rp
b246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xs
ZXJGb3IoInNvbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9u
VG8oIm90aGVyLnJvdXRlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2FsbCBgdGhpcy5fc3VwZXIoKWAgZnJvbSB3aXRo
aW4gYW4KLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGhhbmRsZXIgaWYgaXQgb3ZlcnJpZGVz
IGEgaGFuZGxlciBkZWZpbmVkIG9uIGEgcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNz
IG9yIG1peGluOgotCi0gICAgICAgICAgICAgICAgICAgIFRha2UgZm9yIGV4YW1wbGUgdGhlIGZv
bGxvd2luZyByb3V0ZXM6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAg
ICAgICAgICAgQXBwLkRlYnVnUm91dGUgPSBFbWJlci5NaXhpbi5jcmVhdGUoewotICAgICAgICAg
ICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnUm91
dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUuZGVidWcoInRyb2xvbG8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgIEFwcC5Bbm5veWluZ0RlYnVnUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoQXBw
LkRlYnVnUm91dGUsIHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWJ1Z1JvdXRlSW5mb3JtYXRpb246IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIGNhbGwgdGhlIGRlYnVnUm91dGVJbmZvcm1h
dGlvbiBvZiBtaXhlZCBpbiBBcHAuRGVidWdSb3V0ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zdXBlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3cgYWRk
aXRpb25hbCBhbm5veWFuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0
KC4uLik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICAgIyMgQnViYmxpbmcKLQotICAgICAgICAgICAgICAgICAgICBCeSBk
ZWZhdWx0LCBhbiBhY3Rpb24gd2lsbCBzdG9wIGJ1YmJsaW5nIG9uY2UgYSBoYW5kbGVyIGRlZmlu
ZWQKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIGBhY3Rpb25zYCBoYXNoIGhhbmRsZXMgaXQu
IFRvIGNvbnRpbnVlIGJ1YmJsaW5nIHRoZSBhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIHlv
dSBtdXN0IHJldHVybiBgdHJ1ZWAgZnJvbSB0aGUgaGFuZGxlcjoKLQotICAgICAgICAgICAgICAg
ICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCJhbGJ1bSIsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSgic29uZyIpOwotICAgICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICAgICAgICBBcHAuQWxidW1Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQ
bGF5aW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgIEFwcC5BbGJ1bVNvbmdSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQ
bGF5aW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblNob3VsZEFsc29CZVRyaWdnZXJl
ZE9uUGFyZW50Um91dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBhY3Rp
b25zCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICAgICAgICAg
QGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIE1vdmVzIGBhY3Rpb25zYCB0byBgX2FjdGlvbnNgIGF0IGV4dGVu
ZCB0aW1lLiBOb3RlIHRoYXQgdGhpcyBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZXMgdGhlIG1peGluIHRoZW1zZWx2ZXMsIHdoaWNoIGlzIHRlY2huaWNhbGx5IGR1YmlvdXMg
YnV0Ci0gICAgICAgICAgICAgICAgICAgIGlzIHByYWN0aWNhbGx5IG9mIGxpdHRsZSBjb25zZXF1
ZW5jZS4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3aWxsTWVyZ2VNaXhpbgot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdpbGxNZXJnZU1peGluOiBmdW5jdGlv
bihwcm9wcykgewotICAgICAgICAgICAgICAgIHZhciBoYXNoTmFtZTsKLQotICAgICAgICAgICAg
ICAgIGlmICghcHJvcHMuX2FjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCInYWN0aW9ucycgc2hvdWxkIG5vdCBiZSBhIGZ1bmN0aW9uIiwgdHlwZW9mKHByb3BzLmFj
dGlvbnMpICE9PSAnZnVuY3Rpb24nKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZU9m
KHByb3BzLmFjdGlvbnMpID09PSAnb2JqZWN0JykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aGFzaE5hbWUgPSAnYWN0aW9ucyc7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlw
ZU9mKHByb3BzLmV2ZW50cykgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBFbWJlci5kZXByZWNhdGUoJ0FjdGlvbiBoYW5kbGVycyBjb250YWluZWQgaW4gYW4gYGV2ZW50
c2Agb2JqZWN0IGFyZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHB1dHRpbmcgdGhlbSBpbiBhbiBg
YWN0aW9uc2Agb2JqZWN0JywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzaE5h
bWUgPSAnZXZlbnRzJzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNoTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuX2FjdGlv
bnMgPSBtZXJnZShwcm9wcy5fYWN0aW9ucyB8fCB7fSwgcHJvcHNbaGFzaE5hbWVdKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1toYXNo
TmFtZV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFRyaWdnZXJzIGEgbmFtZWQgYWN0aW9uIG9uIHRoZSBg
QWN0aW9uSGFuZGxlcmAuIEFueSBwYXJhbWV0ZXJzCi0gICAgICAgICAgICAgICAgICAgIHN1cHBs
aWVkIGFmdGVyIHRoZSBgYWN0aW9uTmFtZWAgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGFzIGFyZ3Vt
ZW50cwotICAgICAgICAgICAgICAgICAgICB0byB0aGUgYWN0aW9uIHRhcmdldCBmdW5jdGlvbi4K
LQotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYEFjdGlvbkhhbmRsZXJgIGhhcyBpdHMgYHRh
cmdldGAgcHJvcGVydHkgc2V0LCBhY3Rpb25zIG1heQotICAgICAgICAgICAgICAgICAgICBidWJi
bGUgdG8gdGhlIGB0YXJnZXRgLiBCdWJibGluZyBoYXBwZW5zIHdoZW4gYW4gYGFjdGlvbk5hbWVg
IGNhbgotICAgICAgICAgICAgICAgICAgICBub3QgYmUgZm91bmQgaW4gdGhlIGBBY3Rpb25IYW5k
bGVyYCdzIGBhY3Rpb25zYCBoYXNoIG9yIGlmIHRoZQotICAgICAgICAgICAgICAgICAgICBhY3Rp
b24gdGFyZ2V0IGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAg
IEV4YW1wbGUKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAg
ICBBcHAuV2VsY29tZVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwbGF5VGhlbWU6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kKCdwbGF5TXVz
aWMnLCAndGhlbWUubXAzJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgcGxheU11c2ljOiBmdW5jdGlvbih0cmFjaykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAuLi4KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNlbmQKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGFjdGlvbk5hbWUgVGhlIGFjdGlvbiB0byB0cmlnZ2Vy
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gY29udGV4dCBhIGNvbnRleHQgdG8gc2Vu
ZCB3aXRoIHRoZSBhY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZW5k
OiBmdW5jdGlvbihhY3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMSksIHRhcmdldDsKLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9hY3Rpb25zICYmIHRoaXMuX2FjdGlvbnNbYWN0aW9uTmFtZV0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX2FjdGlvbnNbYWN0aW9uTmFtZV0uYXBwbHkodGhpcywgYXJncykg
PT09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgcmV0dXJuZWQg
dHJ1ZSwgc28gdGhpcyBhY3Rpb24gd2lsbCBidWJibGUKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUVtYmVyLkZFQVRVUkVTLmlzRW5hYmxl
ZCgnZW1iZXItcm91dGluZy1kcm9wLWRlcHJlY2F0ZWQtYWN0aW9uLXN0eWxlJykgJiYgdGhpcy5k
ZXByZWNhdGVkU2VuZCAmJiB0aGlzLmRlcHJlY2F0ZWRTZW5kSGFuZGxlcyAmJiB0aGlzLmRlcHJl
Y2F0ZWRTZW5kSGFuZGxlcyhhY3Rpb25OYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBFbWJl
ci53YXJuKCJUaGUgY3VycmVudCBkZWZhdWx0IGlzIGRlcHJlY2F0ZWQgYnV0IHdpbGwgcHJlZmVy
IHRvIGhhbmRsZSBhY3Rpb25zIGRpcmVjdGx5IG9uIHRoZSBjb250cm9sbGVyIGluc3RlYWQgb2Yg
YSBzaW1pbGFybHkgbmFtZWQgYWN0aW9uIGluIHRoZSBhY3Rpb25zIGhhc2guIFRvIHR1cm4gb2Zm
IHRoaXMgZGVwcmVjYXRlZCBmZWF0dXJlIHNldDogRW1iZXIuRkVBVFVSRVNbJ2VtYmVyLXJvdXRp
bmctZHJvcC1kZXByZWNhdGVkLWFjdGlvbi1zdHlsZSddID0gdHJ1ZSIpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5kZXByZWNhdGVkU2VuZC5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxs
KGFyZ3VtZW50cykpID09PSB0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5k
bGVyIHJldHVybiB0cnVlLCBzbyB0aGlzIGFjdGlvbiB3aWxsIGJ1YmJsZQotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldCA9IGdldCh0aGlzLCAndGFyZ2V0JykpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJUaGUgYHRhcmdldGAgZm9yICIgKyB0aGlzICsgIiAoIiArIHRhcmdldCArICIp
IGRvZXMgbm90IGhhdmUgYSBgc2VuZGAgbWV0aG9kIiwgdHlwZW9mIHRhcmdldC5zZW5kID09PSAn
ZnVuY3Rpb24nKTsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNlbmQuYXBwbHkodGFyZ2V0
LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEFjdGlvbkhhbmRsZXI7Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvaXNf
bm9uZSIsICJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlIiwgImVtYmVyLW1ldGFsL2Vu
dW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL2V2ZW50cyIsICJlbWJlci1tZXRhbC93YXRjaGluZyIs
ICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9f
ZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5k
ZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1
bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAg
ICAgKi8KLQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIEhFTFBFUlMKLSAgICAgICAgLy8KLSAg
ICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8v
IEVTNlRPRE86IEVtYmVyLkEKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdl
dDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBj
b21wdXRlZCA9IF9fZGVwZW5kZW5jeTRfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIGNhY2hlRm9y
ID0gX19kZXBlbmRlbmN5NF9fLmNhY2hlRm9yOwotICAgICAgICB2YXIgaXNOb25lID0gX19kZXBl
bmRlbmN5NV9fLmlzTm9uZTsKLSAgICAgICAgdmFyIG5vbmUgPSBfX2RlcGVuZGVuY3k1X18ubm9u
ZTsKLSAgICAgICAgdmFyIEVudW1lcmFibGUgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIG1hcCA9IF9fZGVwZW5kZW5jeTdfXy5tYXA7Ci0gICAgICAgIHZhciBNaXhp
biA9IF9fZGVwZW5kZW5jeThfXy5NaXhpbjsKLSAgICAgICAgdmFyIHJlcXVpcmVkID0gX19kZXBl
bmRlbmN5OF9fLnJlcXVpcmVkOwotICAgICAgICB2YXIgcHJvcGVydHlXaWxsQ2hhbmdlID0gX19k
ZXBlbmRlbmN5OV9fLnByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlk
Q2hhbmdlID0gX19kZXBlbmRlbmN5OV9fLnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIg
YWRkTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kxMF9fLmFkZExpc3RlbmVyOwotICAgICAgICB2YXIg
cmVtb3ZlTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kxMF9fLnJlbW92ZUxpc3RlbmVyOwotICAgICAg
ICB2YXIgc2VuZEV2ZW50ID0gX19kZXBlbmRlbmN5MTBfXy5zZW5kRXZlbnQ7Ci0gICAgICAgIHZh
ciBoYXNMaXN0ZW5lcnMgPSBfX2RlcGVuZGVuY3kxMF9fLmhhc0xpc3RlbmVyczsKLSAgICAgICAg
dmFyIGlzV2F0Y2hpbmcgPSBfX2RlcGVuZGVuY3kxMV9fLmlzV2F0Y2hpbmc7Ci0KLSAgICAgICAg
Ly8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLgotICAgICAgICAvLyBBUlJBWQotICAgICAgICAvLwotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgVGhpcyBtaXhpbiBpbXBsZW1lbnRzIE9ic2VydmVyLWZyaWVuZGx5IEFycmF5LWxpa2Ug
YmVoYXZpb3IuIEl0IGlzIG5vdCBhCi0gICAgICAgICAgICAgIGNvbmNyZXRlIGltcGxlbWVudGF0
aW9uLCBidXQgaXQgY2FuIGJlIHVzZWQgdXAgYnkgb3RoZXIgY2xhc3NlcyB0aGF0IHdhbnQKLSAg
ICAgICAgICAgICAgdG8gYXBwZWFyIGxpa2UgYXJyYXlzLgotCi0gICAgICAgICAgICAgIEZvciBl
eGFtcGxlLCBBcnJheVByb3h5IGFuZCBBcnJheUNvbnRyb2xsZXIgYXJlIGJvdGggY29uY3JldGUg
Y2xhc3NlcyB0aGF0IGNhbgotICAgICAgICAgICAgICBiZSBpbnN0YW50aWF0ZWQgdG8gaW1wbGVt
ZW50IGFycmF5LWxpa2UgYmVoYXZpb3IuIEJvdGggb2YgdGhlc2UgY2xhc3NlcyB1c2UKLSAgICAg
ICAgICAgICAgdGhlIEFycmF5IE1peGluIGJ5IHdheSBvZiB0aGUgTXV0YWJsZUFycmF5IG1peGlu
LCB3aGljaCBhbGxvd3Mgb2JzZXJ2YWJsZQotICAgICAgICAgICAgICBjaGFuZ2VzIHRvIGJlIG1h
ZGUgdG8gdGhlIHVuZGVybHlpbmcgYXJyYXkuCi0KLSAgICAgICAgICAgICAgVW5saWtlIGBFbWJl
ci5FbnVtZXJhYmxlLGAgdGhpcyBtaXhpbiBkZWZpbmVzIG1ldGhvZHMgc3BlY2lmaWNhbGx5IGZv
cgotICAgICAgICAgICAgICBjb2xsZWN0aW9ucyB0aGF0IHByb3ZpZGUgaW5kZXgtb3JkZXJlZCBh
Y2Nlc3MgdG8gdGhlaXIgY29udGVudHMuIFdoZW4geW91Ci0gICAgICAgICAgICAgIGFyZSBkZXNp
Z25pbmcgY29kZSB0aGF0IG5lZWRzIHRvIGFjY2VwdCBhbnkga2luZCBvZiBBcnJheS1saWtlIG9i
amVjdCwgeW91Ci0gICAgICAgICAgICAgIHNob3VsZCB1c2UgdGhlc2UgbWV0aG9kcyBpbnN0ZWFk
IG9mIEFycmF5IHByaW1pdGl2ZXMgYmVjYXVzZSB0aGVzZSB3aWxsCi0gICAgICAgICAgICAgIHBy
b3Blcmx5IG5vdGlmeSBvYnNlcnZlcnMgb2YgY2hhbmdlcyB0byB0aGUgYXJyYXkuCi0KLSAgICAg
ICAgICAgICAgQWx0aG91Z2ggdGhlc2UgbWV0aG9kcyBhcmUgZWZmaWNpZW50LCB0aGV5IGRvIGFk
ZCBhIGxheWVyIG9mIGluZGlyZWN0aW9uIHRvCi0gICAgICAgICAgICAgIHlvdXIgYXBwbGljYXRp
b24gc28gaXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlIHRoZW0gb25seSB3aGVuIHlvdSBuZWVkIHRo
ZQotICAgICAgICAgICAgICBmbGV4aWJpbGl0eSBvZiB1c2luZyBib3RoIHRydWUgSmF2YVNjcmlw
dCBhcnJheXMgYW5kICJ2aXJ0dWFsIiBhcnJheXMgc3VjaAotICAgICAgICAgICAgICBhcyBjb250
cm9sbGVycyBhbmQgY29sbGVjdGlvbnMuCi0KLSAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhl
IG1ldGhvZHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSB0byBhY2Nlc3MgYW5kIG1vZGlmeSBhcnJh
eQotICAgICAgICAgICAgICBjb250ZW50cyBpbiBhIEtWTy1mcmllbmRseSB3YXkuIFlvdSBjYW4g
YWxzbyBiZSBub3RpZmllZCB3aGVuZXZlciB0aGUKLSAgICAgICAgICAgICAgbWVtYmVyc2hpcCBv
ZiBhbiBhcnJheSBjaGFuZ2VzIGJ5IHVzaW5nIGAub2JzZXJ2ZXMoJ215QXJyYXkuW10nKWAuCi0K
LSAgICAgICAgICAgICAgVG8gc3VwcG9ydCBgRW1iZXIuQXJyYXlgIGluIHlvdXIgb3duIGNsYXNz
LCB5b3UgbXVzdCBvdmVycmlkZSB0d28KLSAgICAgICAgICAgICAgcHJpbWl0aXZlcyB0byB1c2Ug
aXQ6IGByZXBsYWNlKClgIGFuZCBgb2JqZWN0QXQoKWAuCi0KLSAgICAgICAgICAgICAgTm90ZSB0
aGF0IHRoZSBFbWJlci5BcnJheSBtaXhpbiBhbHNvIGluY29ycG9yYXRlcyB0aGUgYEVtYmVyLkVu
dW1lcmFibGVgCi0gICAgICAgICAgICAgIG1peGluLiBBbGwgYEVtYmVyLkFycmF5YC1saWtlIG9i
amVjdHMgYXJlIGFsc28gZW51bWVyYWJsZS4KLQotICAgICAgICAgICAgICBAY2xhc3MgQXJyYXkK
LSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAdXNlcyBFbWJl
ci5FbnVtZXJhYmxlCi0gICAgICAgICAgICAgIEBzaW5jZSBFbWJlciAwLjkuMAotICAgICAgICAg
ICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZShFbnVt
ZXJhYmxlLCB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBZb3VyIGFy
cmF5IG11c3Qgc3VwcG9ydCB0aGUgYGxlbmd0aGAgcHJvcGVydHkuIFlvdXIgcmVwbGFjZSBtZXRo
b2RzIHNob3VsZAotICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyBwcm9wZXJ0eSB3aGVuZXZl
ciBpdCBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB7TnVtYmVyfSBs
ZW5ndGgKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBsZW5ndGg6IHJlcXVpcmVk
KCksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBv
YmplY3QgYXQgdGhlIGdpdmVuIGBpbmRleGAuIElmIHRoZSBnaXZlbiBgaW5kZXhgIGlzIG5lZ2F0
aXZlCi0gICAgICAgICAgICAgICAgICAgIG9yIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGUg
YXJyYXkgbGVuZ3RoLCByZXR1cm5zIGB1bmRlZmluZWRgLgotCi0gICAgICAgICAgICAgICAgICAg
IFRoaXMgaXMgb25lIG9mIHRoZSBwcmltaXRpdmVzIHlvdSBtdXN0IGltcGxlbWVudCB0byBzdXBw
b3J0IGBFbWJlci5BcnJheWAuCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdXIgb2JqZWN0IHN1
cHBvcnRzIHJldHJpZXZpbmcgdGhlIHZhbHVlIG9mIGFuIGFycmF5IGl0ZW0gdXNpbmcgYGdldCgp
YAotICAgICAgICAgICAgICAgICAgICAoaS5lLiBgbXlBcnJheS5nZXQoMClgKSwgdGhlbiB5b3Ug
ZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IHlvdXJzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGFyciA9IFsnYScsICdiJywgJ2MnLCAnZCddOwotICAgICAgICAgICAg
ICAgICAgICBhcnIub2JqZWN0QXQoMCk7ICAgLy8gImEiCi0gICAgICAgICAgICAgICAgICAgIGFy
ci5vYmplY3RBdCgzKTsgICAvLyAiZCIKLSAgICAgICAgICAgICAgICAgICAgYXJyLm9iamVjdEF0
KC0xKTsgIC8vIHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBhcnIub2JqZWN0QXQoNCk7
ICAgLy8gdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgIGFyci5vYmplY3RBdCg1KTsgICAv
LyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBvYmplY3RBdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0g
aWR4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4geyp9IGl0ZW0gYXQgaW5kZXggb3IgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgb2JqZWN0QXQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAg
ICAgIGlmICgoaWR4IDwgMCkgfHwgKGlkeCA+PSBnZXQodGhpcywgJ2xlbmd0aCcpKSkgCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdldCh0aGlzLCBpZHgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgcmV0dXJucyB0aGUgb2JqZWN0cyBhdCB0aGUgc3BlY2lmaWVk
IGluZGV4ZXMsIHVzaW5nIGBvYmplY3RBdGAuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID3CoFsnYScsICdiJywgJ2MnLCAn
ZCddOwotICAgICAgICAgICAgICAgICAgICBhcnIub2JqZWN0c0F0KFswLCAxLCAyXSk7ICAvLyBb
ImEiLCAiYiIsICJjIl0KLSAgICAgICAgICAgICAgICAgICAgYXJyLm9iamVjdHNBdChbMiwgMywg
NF0pOyAgLy8gWyJjIiwgImQiLCB1bmRlZmluZWRdCi0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JqZWN0c0F0Ci0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgQW4gYXJyYXkgb2YgaW5kZXhlcyBvZiBpdGVtcyB0
byByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fQotICAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBvYmplY3RzQXQ6IGZ1bmN0aW9uKGluZGV4ZXMpIHsK
LSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG1hcChpbmRleGVzLCBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYub2JqZWN0QXQoaWR4KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8vIG92ZXJyaWRlcyBFbWJlci5FbnVtZXJhYmxlIHZlcnNpb24KLSAg
ICAgICAgICAgIG5leHRPYmplY3Q6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm9iamVjdEF0KGlkeCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgaGFuZGxlciBmb3IgdGhlIHNwZWNp
YWwgYXJyYXkgY29udGVudCBwcm9wZXJ0eS4gSWYgeW91IGdldAotICAgICAgICAgICAgICAgICAg
ICB0aGlzIHByb3BlcnR5LCBpdCB3aWxsIHJldHVybiB0aGlzLiBJZiB5b3Ugc2V0IHRoaXMgcHJv
cGVydHkgdG8gYSBuZXcKLSAgICAgICAgICAgICAgICAgICAgYXJyYXksIGl0IHdpbGwgcmVwbGFj
ZSB0aGUgY3VycmVudCBjb250ZW50LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvcGVy
dHkgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHByb3BlcnR5IGRlZmluZWQgaW4gYEVtYmVyLkVudW1l
cmFibGVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBbXQotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHRoaXMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAn
W10nOiBjb21wdXRlZChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlICE9PSB1bmRlZmluZWQpIAotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2Uo
MCwgZ2V0KHRoaXMsICdsZW5ndGgnKSwgdmFsdWUpIDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcyA7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgZmlyc3RPYmplY3Q6IGNvbXB1
dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdEF0KDAp
OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIGxhc3RPYmplY3Q6IGNvbXB1dGVkKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdEF0KGdldCh0aGlz
LCAnbGVuZ3RoJyktMSk7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLy8gb3B0aW1p
emVkIHZlcnNpb24gZnJvbSBFbnVtZXJhYmxlCi0gICAgICAgICAgICBjb250YWluczogZnVuY3Rp
b24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZihvYmopID49IDA7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBBZGQgYW55IGV4dHJhIG1ldGhvZHMg
dG8gRW1iZXIuQXJyYXkgdGhhdCBhcmUgbmF0aXZlIHRvIHRoZSBidWlsdC1pbiBBcnJheS4KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgbmV3IGFycmF5IHRo
YXQgaXMgYSBzbGljZSBvZiB0aGUgcmVjZWl2ZXIuIFRoaXMgaW1wbGVtZW50YXRpb24KLSAgICAg
ICAgICAgICAgICAgICAgdXNlcyB0aGUgb2JzZXJ2YWJsZSBhcnJheSBtZXRob2RzIHRvIHJldHJp
ZXZlIHRoZSBvYmplY3RzIGZvciB0aGUgbmV3Ci0gICAgICAgICAgICAgICAgICAgIHNsaWNlLgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGFyciA9IFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXTsKLSAgICAgICAgICAgICAgICAgICAg
YXJyLnNsaWNlKDApOyAgICAgICAvLyBbJ3JlZCcsICdncmVlbicsICdibHVlJ10KLSAgICAgICAg
ICAgICAgICAgICAgYXJyLnNsaWNlKDAsIDIpOyAgICAvLyBbJ3JlZCcsICdncmVlbiddCi0gICAg
ICAgICAgICAgICAgICAgIGFyci5zbGljZSgxLCAxMDApOyAgLy8gWydncmVlbicsICdibHVlJ10K
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBz
bGljZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0ludGVnZXJ9IGJlZ2luSW5kZXggKE9w
dGlvbmFsKSBpbmRleCB0byBiZWdpbiBzbGljaW5nIGZyb20uCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7SW50ZWdlcn0gZW5kSW5kZXggKE9wdGlvbmFsKSBpbmRleCB0byBlbmQgdGhlIHNs
aWNlIGF0IChidXQgbm90IGluY2x1ZGVkKS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
QXJyYXl9IE5ldyBhcnJheSB3aXRoIHNwZWNpZmllZCBzbGljZQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHNsaWNlOiBmdW5jdGlvbihiZWdpbkluZGV4LCBlbmRJbmRleCkgewot
ICAgICAgICAgICAgICAgIHZhciByZXQgPSBFbWJlci5BKCk7Ci0gICAgICAgICAgICAgICAgdmFy
IGxlbmd0aCA9IGdldCh0aGlzLCAnbGVuZ3RoJykgOwotICAgICAgICAgICAgICAgIGlmIChpc05v
bmUoYmVnaW5JbmRleCkpIAotICAgICAgICAgICAgICAgICAgICBiZWdpbkluZGV4ID0gMCA7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzTm9uZShlbmRJbmRleCkgfHwgKGVuZEluZGV4ID4gbGVuZ3Ro
KSkgCi0gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbGVuZ3RoIDsKLQotICAgICAgICAg
ICAgICAgIGlmIChiZWdpbkluZGV4IDwgMCkgCi0gICAgICAgICAgICAgICAgICAgIGJlZ2luSW5k
ZXggPSBsZW5ndGggKyBiZWdpbkluZGV4OwotICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCA8
IDApIAotICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4Owot
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJlZ2luSW5kZXggPCBlbmRJbmRleCkgewotICAgICAg
ICAgICAgICAgICAgICByZXRbcmV0Lmxlbmd0aF0gPSB0aGlzLm9iamVjdEF0KGJlZ2luSW5kZXgr
KykgOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0IDsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1
cm5zIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3MgZmlyc3Qgb2NjdXJyZW5jZS4KLSAg
ICAgICAgICAgICAgICAgICAgSWYgbm8gYHN0YXJ0QXRgIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUg
c3RhcnRpbmcgbG9jYXRpb24gdG8KLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoIGlzIDAuIElm
IGl0J3MgbmVnYXRpdmUsIHdpbGwgY291bnQgYmFja3dhcmQgZnJvbQotICAgICAgICAgICAgICAg
ICAgICB0aGUgZW5kIG9mIHRoZSBhcnJheS4gUmV0dXJucyAtMSBpZiBubyBtYXRjaCBpcyBmb3Vu
ZC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBhcnIgPSBbImEiLCAiYiIsICJjIiwgImQiLCAiYSJdOwotICAgICAgICAgICAgICAg
ICAgICBhcnIuaW5kZXhPZigiYSIpOyAgICAgICAvLyAgMAotICAgICAgICAgICAgICAgICAgICBh
cnIuaW5kZXhPZigieiIpOyAgICAgICAvLyAtMQotICAgICAgICAgICAgICAgICAgICBhcnIuaW5k
ZXhPZigiYSIsIDIpOyAgICAvLyAgNAotICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZigi
YSIsIC0xKTsgICAvLyAgNAotICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZigiYiIsIDMp
OyAgICAvLyAtMQotICAgICAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZigiYSIsIDEwMCk7ICAv
LyAtMQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGluZGV4T2YKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0
aGUgaXRlbSB0byBzZWFyY2ggZm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVy
fSBzdGFydEF0IG9wdGlvbmFsIHN0YXJ0aW5nIGxvY2F0aW9uIHRvIHNlYXJjaCwgZGVmYXVsdCAw
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge051bWJlcn0gaW5kZXggb3IgLTEgaWYgbm90
IGZvdW5kCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5kZXhPZjogZnVuY3Rp
b24ob2JqZWN0LCBzdGFydEF0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlkeCwgbGVuID0gZ2V0
KHRoaXMsICdsZW5ndGgnKTsKLQotICAgICAgICAgICAgICAgIGlmIChzdGFydEF0ID09PSB1bmRl
ZmluZWQpIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhcnRBdCA8IDApIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ICs9IGxlbjsK
LQotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gc3RhcnRBdDsgaWR4IDwgbGVuOyBpZHgrKykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmplY3RBdChpZHgpID09PSBvYmplY3Qp
IAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkeDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZl
biBvYmplY3QncyBsYXN0IG9jY3VycmVuY2UuCi0gICAgICAgICAgICAgICAgICAgIElmIG5vIGBz
dGFydEF0YCBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIHNlYXJjaCBzdGFydHMgZnJvbQotICAgICAg
ICAgICAgICAgICAgICB0aGUgbGFzdCBwb3NpdGlvbi4gSWYgaXQncyBuZWdhdGl2ZSwgd2lsbCBj
b3VudCBiYWNrd2FyZAotICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBlbmQgb2YgdGhlIGFy
cmF5LiBSZXR1cm5zIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsiYSIsICJi
IiwgImMiLCAiZCIsICJhIl07Ci0gICAgICAgICAgICAgICAgICAgIGFyci5sYXN0SW5kZXhPZigi
YSIpOyAgICAgICAvLyAgNAotICAgICAgICAgICAgICAgICAgICBhcnIubGFzdEluZGV4T2YoInoi
KTsgICAgICAgLy8gLTEKLSAgICAgICAgICAgICAgICAgICAgYXJyLmxhc3RJbmRleE9mKCJhIiwg
Mik7ICAgIC8vICAwCi0gICAgICAgICAgICAgICAgICAgIGFyci5sYXN0SW5kZXhPZigiYSIsIC0x
KTsgICAvLyAgNAotICAgICAgICAgICAgICAgICAgICBhcnIubGFzdEluZGV4T2YoImIiLCAzKTsg
ICAgLy8gIDEKLSAgICAgICAgICAgICAgICAgICAgYXJyLmxhc3RJbmRleE9mKCJhIiwgMTAwKTsg
IC8vICA0Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgbGFzdEluZGV4T2YKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9i
amVjdCB0aGUgaXRlbSB0byBzZWFyY2ggZm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
TnVtYmVyfSBzdGFydEF0IG9wdGlvbmFsIHN0YXJ0aW5nIGxvY2F0aW9uIHRvIHNlYXJjaCwgZGVm
YXVsdCAwCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge051bWJlcn0gaW5kZXggb3IgLTEg
aWYgbm90IGZvdW5kCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbGFzdEluZGV4
T2Y6IGZ1bmN0aW9uKG9iamVjdCwgc3RhcnRBdCkgewotICAgICAgICAgICAgICAgIHZhciBpZHgs
IGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRB
dCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0QXQgPj0gbGVuKSAKLSAgICAgICAgICAgICAgICAgICAg
c3RhcnRBdCA9IGxlbi0xOwotICAgICAgICAgICAgICAgIGlmIChzdGFydEF0IDwgMCkgCi0gICAg
ICAgICAgICAgICAgICAgIHN0YXJ0QXQgKz0gbGVuOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
ZHggPSBzdGFydEF0OyBpZHggPj0gMDsgaWR4LS0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMub2JqZWN0QXQoaWR4KSA9PT0gb2JqZWN0KSAKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpZHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIEFS
UkFZIE9CU0VSVkVSUwotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEFkZHMgYW4gYXJyYXkgb2JzZXJ2ZXIgdG8gdGhlIHJlY2VpdmluZyBhcnJh
eS4gVGhlIGFycmF5IG9ic2VydmVyIG9iamVjdAotICAgICAgICAgICAgICAgICAgICBub3JtYWxs
eSBtdXN0IGltcGxlbWVudCB0d28gbWV0aG9kczoKLQotICAgICAgICAgICAgICAgICAgICAqIGBh
cnJheVdpbGxDaGFuZ2Uob2JzZXJ2ZWRPYmosIHN0YXJ0LCByZW1vdmVDb3VudCwgYWRkQ291bnQp
YCAtIFRoaXMgbWV0aG9kIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQganVz
dCBiZWZvcmUgdGhlIGFycmF5IGlzIG1vZGlmaWVkLgotICAgICAgICAgICAgICAgICAgICAqIGBh
cnJheURpZENoYW5nZShvYnNlcnZlZE9iaiwgc3RhcnQsIHJlbW92ZUNvdW50LCBhZGRDb3VudClg
IC0gVGhpcyBtZXRob2Qgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCBqdXN0
IGFmdGVyIHRoZSBhcnJheSBpcyBtb2RpZmllZC4KLQotICAgICAgICAgICAgICAgICAgICBCb3Ro
IGNhbGxiYWNrcyB3aWxsIGJlIHBhc3NlZCB0aGUgb2JzZXJ2ZWQgb2JqZWN0LCBzdGFydGluZyBp
bmRleCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIGFzIHdlbGwgYSBhIGNvdW50
IG9mIHRoZSBpdGVtcyB0byBiZSByZW1vdmVkIGFuZCBhZGRlZC4gWW91IGNhbiB1c2UKLSAgICAg
ICAgICAgICAgICAgICAgdGhlc2UgY2FsbGJhY2tzIHRvIG9wdGlvbmFsbHkgaW5zcGVjdCB0aGUg
YXJyYXkgZHVyaW5nIHRoZSBjaGFuZ2UsIGNsZWFyCi0gICAgICAgICAgICAgICAgICAgIGNhY2hl
cywgb3IgZG8gYW55IG90aGVyIGJvb2trZWVwaW5nIG5lY2Vzc2FyeS4KLQotICAgICAgICAgICAg
ICAgICAgICBJbiBhZGRpdGlvbiB0byBwYXNzaW5nIGEgdGFyZ2V0LCB5b3UgY2FuIGFsc28gaW5j
bHVkZSBhbiBvcHRpb25zIGhhc2gKLSAgICAgICAgICAgICAgICAgICAgd2hpY2ggeW91IGNhbiB1
c2UgdG8gb3ZlcnJpZGUgdGhlIG1ldGhvZCBuYW1lcyB0aGF0IHdpbGwgYmUgaW52b2tlZCBvbiB0
aGUKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgYWRkQXJyYXlPYnNlcnZlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gdGFyZ2V0IFRoZSBvYnNlcnZlciBvYmplY3QuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7SGFzaH0gb3B0cyBPcHRpb25hbCBoYXNoIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbmNs
dWRpbmcKLSAgICAgICAgICAgICAgICAgICAgICBgd2lsbENoYW5nZWAgYW5kIGBkaWRDaGFuZ2Vg
IG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2Vp
dmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWRkQXJyYXlPYnNlcnZlcjog
ZnVuY3Rpb24odGFyZ2V0LCBvcHRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHdpbGxDaGFuZ2Ug
PSAob3B0cyAmJiBvcHRzLndpbGxDaGFuZ2UpIHx8ICdhcnJheVdpbGxDaGFuZ2UnLAotICAgICAg
ICAgICAgICAgIGRpZENoYW5nZSA9IChvcHRzICYmIG9wdHMuZGlkQ2hhbmdlKSB8fCAnYXJyYXlE
aWRDaGFuZ2UnOwotCi0gICAgICAgICAgICAgICAgdmFyIGhhc09ic2VydmVycyA9IGdldCh0aGlz
LCAnaGFzQXJyYXlPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc09ic2VydmVy
cykgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnaGFzQXJy
YXlPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcih0aGlzLCAnQGFycmF5
OmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgYWRkTGlzdGVu
ZXIodGhpcywgJ0BhcnJheTpjaGFuZ2UnLCB0YXJnZXQsIGRpZENoYW5nZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFoYXNPYnNlcnZlcnMpIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURp
ZENoYW5nZSh0aGlzLCAnaGFzQXJyYXlPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBSZW1vdmVzIGFuIGFycmF5IG9ic2VydmVyIGZyb20gdGhlIG9iamVjdCBpZiB0aGUg
b2JzZXJ2ZXIgaXMgY3VycmVudAotICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkLiBDYWxs
aW5nIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUgb2JqZWN0IHdpbGwK
LSAgICAgICAgICAgICAgICAgICAgaGF2ZSBubyBlZmZlY3QuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCByZW1vdmVBcnJheU9ic2VydmVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSB0YXJnZXQgVGhlIG9iamVjdCBvYnNlcnZpbmcgdGhlIGFycmF5LgotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdHMgT3B0aW9uYWwgaGFzaCBvZiBjb25maWd1
cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgYHdpbGxDaGFu
Z2VgIGFuZCBgZGlkQ2hhbmdlYCBvcHRpb24uCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHJlbW92ZUFycmF5T2JzZXJ2ZXI6IGZ1bmN0aW9uKHRhcmdldCwgb3B0cykgewotICAgICAgICAg
ICAgICAgIHZhciB3aWxsQ2hhbmdlID0gKG9wdHMgJiYgb3B0cy53aWxsQ2hhbmdlKSB8fCAnYXJy
YXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSAob3B0cyAmJiBvcHRz
LmRpZENoYW5nZSkgfHwgJ2FycmF5RGlkQ2hhbmdlJzsKLQotICAgICAgICAgICAgICAgIHZhciBo
YXNPYnNlcnZlcnMgPSBnZXQodGhpcywgJ2hhc0FycmF5T2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhhc09ic2VydmVycykgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5V2ls
bENoYW5nZSh0aGlzLCAnaGFzQXJyYXlPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICByZW1v
dmVMaXN0ZW5lcih0aGlzLCAnQGFycmF5OmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7Ci0g
ICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIodGhpcywgJ0BhcnJheTpjaGFuZ2UnLCB0YXJn
ZXQsIGRpZENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycykgCi0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdoYXNBcnJheU9ic2VydmVy
cycpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEJlY29tZXMgdHJ1ZSB3aGVuZXZlciB0
aGUgYXJyYXkgY3VycmVudGx5IGhhcyBvYnNlcnZlcnMgd2F0Y2hpbmcgY2hhbmdlcwotICAgICAg
ICAgICAgICAgICAgICBvbiB0aGUgYXJyYXkuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IHtCb29sZWFufSBoYXNBcnJheU9ic2VydmVycwotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGhhc0FycmF5T2JzZXJ2ZXJzOiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaGFzTGlzdGVuZXJzKHRoaXMsICdAYXJyYXk6Y2hhbmdlJykgfHwg
aGFzTGlzdGVuZXJzKHRoaXMsICdAYXJyYXk6YmVmb3JlJyk7Ci0gICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgaW1wbGVtZW50
aW5nIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIGBFbWJlci5BcnJheWAsIGNhbGwgdGhpcwotICAg
ICAgICAgICAgICAgICAgICBtZXRob2QganVzdCBiZWZvcmUgdGhlIGFycmF5IGNvbnRlbnQgY2hh
bmdlcyB0byBub3RpZnkgYW55IG9ic2VydmVycyBhbmQKLSAgICAgICAgICAgICAgICAgICAgaW52
YWxpZGF0ZSBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzLiBQYXNzIHRoZSBzdGFydGluZyBpbmRleCBv
ZiB0aGUgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYSBkZWx0YSBvZiB0
aGUgYW1vdW50cyB0byBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhcnJh
eUNvbnRlbnRXaWxsQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBz
dGFydElkeCBUaGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGFycmF5IHRoYXQgd2lsbCBjaGFuZ2Uu
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSByZW1vdmVBbXQgVGhlIG51bWJl
ciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZC4gSWYgeW91Ci0gICAgICAgICAgICAgICAg
ICAgICAgcGFzcyBgbnVsbGAgYXNzdW1lcyAwCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
TnVtYmVyfSBhZGRBbXQgVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgYWRkZWQuIElm
IHlvdQotICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYG51bGxgIGFzc3VtZXMgMC4KLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgYXJyYXlDb250ZW50V2lsbENoYW5nZTogZnVuY3Rpb24o
c3RhcnRJZHgsIHJlbW92ZUFtdCwgYWRkQW10KSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiBu
byBhcmdzIGFyZSBwYXNzZWQgYXNzdW1lIGV2ZXJ5dGhpbmcgY2hhbmdlcwotICAgICAgICAgICAg
ICAgIGlmIChzdGFydElkeCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXJ0SWR4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW10ID0gYWRkQW10ID0gLTE7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92
ZUFtdCA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUFtdCA9
LSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWRkQW10ID09PSB1bmRlZmluZWQpIAotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkQW10ID0tIDE7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBAZWFjaCBwcm94eSBpcyBzZXQgdXAgaWYg
YW55b25lIGlzIG9ic2VydmluZyBAZWFjaAotICAgICAgICAgICAgICAgIGlmIChpc1dhdGNoaW5n
KHRoaXMsICdAZWFjaCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldCh0aGlzLCAnQGVhY2gn
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzZW5kRXZlbnQodGhpcywg
J0BhcnJheTpiZWZvcmUnLCBbdGhpcywgc3RhcnRJZHgsIHJlbW92ZUFtdCwgYWRkQW10XSk7Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcmVtb3ZpbmcsIGxpbTsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhcnRJZHggPj0gMCAmJiByZW1vdmVBbXQgPj0gMCAmJiBnZXQodGhpcywgJ2hhc0VudW1lcmFi
bGVPYnNlcnZlcnMnKSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmluZyA9IFtdOwotICAg
ICAgICAgICAgICAgICAgICBsaW0gPSBzdGFydElkeCArIHJlbW92ZUFtdDsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaWR4ID0gc3RhcnRJZHg7IGlkeCA8IGxpbTsgaWR4KyspIAotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVtb3ZpbmcucHVzaCh0aGlzLm9iamVjdEF0KGlkeCkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92aW5nID0g
cmVtb3ZlQW10OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuZW51
bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlKHJlbW92aW5nLCBhZGRBbXQpOwotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbXBsZW1lbnRpbmcgYW4gb2JqZWN0IHRoYXQg
c3VwcG9ydHMgYEVtYmVyLkFycmF5YCwgY2FsbCB0aGlzCi0gICAgICAgICAgICAgICAgICAgIG1l
dGhvZCBqdXN0IGFmdGVyIHRoZSBhcnJheSBjb250ZW50IGNoYW5nZXMgdG8gbm90aWZ5IGFueSBv
YnNlcnZlcnMgYW5kCi0gICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGUgYW55IHJlbGF0ZWQg
cHJvcGVydGllcy4gUGFzcyB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGNoYW5nZQotICAgICAg
ICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEgZGVsdGEgb2YgdGhlIGFtb3VudHMgdG8gY2hhbmdl
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYXJyYXlDb250ZW50RGlkQ2hhbmdlCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBzdGFydElkeCBUaGUgc3RhcnRpbmcg
aW5kZXggaW4gdGhlIGFycmF5IHRoYXQgZGlkIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtOdW1iZXJ9IHJlbW92ZUFtdCBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2VyZSBy
ZW1vdmVkLiBJZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgICBwYXNzIGBudWxsYCBhc3N1bWVz
IDAKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGFkZEFtdCBUaGUgbnVtYmVy
IG9mIGl0ZW1zIHRoYXQgd2VyZSBhZGRlZC4gSWYgeW91Ci0gICAgICAgICAgICAgICAgICAgICAg
cGFzcyBgbnVsbGAgYXNzdW1lcyAwLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJl
ci5BcnJheX0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhcnJh
eUNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdCkg
ewotCi0gICAgICAgICAgICAgICAgLy8gaWYgbm8gYXJncyBhcmUgcGFzc2VkIGFzc3VtZSBldmVy
eXRoaW5nIGNoYW5nZXMKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRJZHggPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgICAgICBzdGFydElkeCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbW92ZUFtdCA9IGFkZEFtdCA9IC0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVBbXQgPT09IHVuZGVmaW5lZCkgCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZW1vdmVBbXQgPS0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFkZEFtdCA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEFtdCA9
LSAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBhZGRpbmcsIGxp
bTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRJZHggPj0gMCAmJiBhZGRBbXQgPj0gMCAmJiBn
ZXQodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKSkgewotICAgICAgICAgICAgICAgICAg
ICBhZGRpbmcgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgbGltID0gc3RhcnRJZHggKyBhZGRB
bXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IHN0YXJ0SWR4OyBpZHggPCBs
aW07IGlkeCsrKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZy5wdXNoKHRoaXMub2Jq
ZWN0QXQoaWR4KSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkaW5nID0gYWRkQW10OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHRoaXMuZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UocmVtb3ZlQW10LCBhZGRpbmcpOwotICAg
ICAgICAgICAgICAgIHNlbmRFdmVudCh0aGlzLCAnQGFycmF5OmNoYW5nZScsIFt0aGlzLCBzdGFy
dElkeCwgcmVtb3ZlQW10LCBhZGRBbXRdKTsKLQotICAgICAgICAgICAgICAgIHZhciBsZW5ndGgg
PSBnZXQodGhpcywgJ2xlbmd0aCcpLAotICAgICAgICAgICAgICAgIGNhY2hlZEZpcnN0ID0gY2Fj
aGVGb3IodGhpcywgJ2ZpcnN0T2JqZWN0JyksCi0gICAgICAgICAgICAgICAgY2FjaGVkTGFzdCA9
IGNhY2hlRm9yKHRoaXMsICdsYXN0T2JqZWN0Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
b2JqZWN0QXQoMCkgIT09IGNhY2hlZEZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5V2lsbENoYW5nZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2ZpcnN0T2JqZWN0Jyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICh0aGlzLm9iamVjdEF0KGxlbmd0aC0xKSAhPT0gY2FjaGVk
TGFzdCkgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xh
c3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywg
J2xhc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAg
IC8vIEVOVU1FUkFURUQgUFJPUEVSVElFUwotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYSBzcGVjaWFsIG9iamVjdCB0aGF0IGNh
biBiZSB1c2VkIHRvIG9ic2VydmUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAg
ICAgICAgIG9uIHRoZSBhcnJheS4gSnVzdCBnZXQgYW4gZXF1aXZhbGVudCBwcm9wZXJ0eSBvbiB0
aGlzIG9iamVjdCBhbmQgaXQgd2lsbAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW4gZW51
bWVyYWJsZSB0aGF0IG1hcHMgYXV0b21hdGljYWxseSB0byB0aGUgbmFtZWQga2V5IG9uIHRoZQot
ICAgICAgICAgICAgICAgICAgICBtZW1iZXIgb2JqZWN0cy4KLQotICAgICAgICAgICAgICAgICAg
ICBJZiB5b3UgbWVyZWx5IHdhbnQgdG8gd2F0Y2ggZm9yIGFueSBpdGVtcyBiZWluZyBhZGRlZCBv
ciByZW1vdmVkIHRvIHRoZSBhcnJheSwKLSAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBgW11g
IHByb3BlcnR5IGluc3RlYWQgb2YgYEBlYWNoYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgQGVhY2gKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAnQGVhY2gnOiBj
b21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX19lYWNoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVTNlRPRE86IEdSUlJSUgotICAgICAgICAgICAgICAg
ICAgICB2YXIgRWFjaFByb3h5ID0gcmVxdWlyZU1vZHVsZSgnZW1iZXItcnVudGltZS9zeXN0ZW0v
ZWFjaF9wcm94eScpWydFYWNoUHJveHknXTsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9f
ZWFjaCA9IG5ldyBFYWNoUHJveHkodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX19lYWNoOwotICAgICAgICAgICAgfSkKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9jb21wYXJhYmxlIiwK
LSAgICBbImVtYmVyLW1ldGFsL21peGluIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5MV9fLk1peGluOwotICAgICAgICB2YXIgcmVxdWly
ZWQgPSBfX2RlcGVuZGVuY3kxX18ucmVxdWlyZWQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEltcGxlbWVudHMgc29t
ZSBzdGFuZGFyZCBtZXRob2RzIGZvciBjb21wYXJpbmcgb2JqZWN0cy4gQWRkIHRoaXMgbWl4aW4g
dG8KLSAgICAgICAgICAgICAgYW55IGNsYXNzIHlvdSBjcmVhdGUgdGhhdCBjYW4gY29tcGFyZSBp
dHMgaW5zdGFuY2VzLgotCi0gICAgICAgICAgICAgIFlvdSBzaG91bGQgaW1wbGVtZW50IHRoZSBg
Y29tcGFyZSgpYCBtZXRob2QuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIENvbXBhcmFibGUKLSAg
ICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc2luY2UgRW1iZXIg
MC45Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4
aW4uY3JlYXRlKHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIE92ZXJy
aWRlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIG9mIHRoZSB0d28gcGFy
YW1ldGVycy4gVGhlCi0gICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgbWV0aG9kIHNob3VsZCBy
ZXR1cm46Ci0KLSAgICAgICAgICAgICAgICAgICAgLSBgLTFgIGlmIGBhIDwgYmAKLSAgICAgICAg
ICAgICAgICAgICAgLSBgMGAgaWYgYGEgPT0gYmAKLSAgICAgICAgICAgICAgICAgICAgLSBgMWAg
aWYgYGEgPiBiYAotCi0gICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW1wbGVtZW50YXRpb24g
cmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNvbXBh
cmUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGEge09iamVjdH0gdGhlIGZpcnN0IG9iamVj
dCB0byBjb21wYXJlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBiIHtPYmplY3R9IHRoZSBz
ZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7SW50
ZWdlcn0gdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGNvbXBhcmU6IHJlcXVpcmVkKEZ1bmN0aW9uKQotICAgICAgICB9KTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLAotICAg
IFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFs
L2NvbXB1dGVkIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwgImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlhc19kZXByZWNhdGlv
biIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVu
Y3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18s
IF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQsIEVtYmVyLmRlcHJlY2F0ZQotICAgICAg
ICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0
ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVw
ZW5kZW5jeTRfXy5NaXhpbjsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5NV9f
LmNvbXB1dGVkOwotICAgICAgICB2YXIgQWN0aW9uSGFuZGxlciA9IF9fZGVwZW5kZW5jeTZfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29udHJvbGxlckNvbnRlbnRNb2RlbEFsaWFzRGVwcmVj
YXRpb24gPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgYEVtYmVyLkNvbnRyb2xsZXJNaXhpbmAgcHJvdmlkZXMgYSBzdGFuZGFyZCBpbnRl
cmZhY2UgZm9yIGFsbCBjbGFzc2VzIHRoYXQKLSAgICAgICAgICAgICAgY29tcG9zZSBFbWJlcidz
IGNvbnRyb2xsZXIgbGF5ZXI6IGBFbWJlci5Db250cm9sbGVyYCwKLSAgICAgICAgICAgICAgYEVt
YmVyLkFycmF5Q29udHJvbGxlcmAsIGFuZCBgRW1iZXIuT2JqZWN0Q29udHJvbGxlcmAuCi0KLSAg
ICAgICAgICAgICAgQGNsYXNzIENvbnRyb2xsZXJNaXhpbgotICAgICAgICAgICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLkFjdGlvbkhhbmRsZXIKLSAgICAg
ICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUo
QWN0aW9uSGFuZGxlciwgQ29udHJvbGxlckNvbnRlbnRNb2RlbEFsaWFzRGVwcmVjYXRpb24sIHsK
LSAgICAgICAgICAgIC8qIGR1Y2t0eXBlIGFzIGEgY29udHJvbGxlciAqLwotICAgICAgICAgICAg
aXNDb250cm9sbGVyOiB0cnVlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgVGhlIG9iamVjdCB0byB3aGljaCBhY3Rpb25zIGZyb20gdGhlIHZpZXcgc2hvdWxkIGJlIHNl
bnQuCi0KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gYSBIYW5kbGViYXJz
IHRlbXBsYXRlIHVzZXMgdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIsCi0gICAgICAgICAgICAgICAg
ICAgIGl0IHdpbGwgYXR0ZW1wdCB0byBzZW5kIHRoZSBhY3Rpb24gdG8gdGhlIHZpZXcncyBjb250
cm9sbGVyJ3MgYHRhcmdldGAuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhl
IHZhbHVlIG9mIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgc2V0IHRvIHRoZSByb3V0ZXIsIGFuZAot
ICAgICAgICAgICAgICAgICAgICBpcyBpbmplY3RlZCB3aGVuIGEgY29udHJvbGxlciBpcyBpbnN0
YW50aWF0ZWQuIFRoaXMgaW5qZWN0aW9uIGlzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAg
aW4gRW1iZXIuQXBwbGljYXRpb24jYnVpbGRDb250YWluZXIsIGFuZCBpcyBhcHBsaWVkIGFzIHBh
cnQgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBpbml0aWFsaXphdGlv
biBwcm9jZXNzLiBJdCBjYW4gYWxzbyBiZSBzZXQgYWZ0ZXIgYSBjb250cm9sbGVyCi0gICAgICAg
ICAgICAgICAgICAgIGhhcyBiZWVuIGluc3RhbnRpYXRlZCwgZm9yIGluc3RhbmNlIHdoZW4gdXNp
bmcgdGhlIHJlbmRlciBoZWxwZXIgaW4gYQotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSwg
b3Igd2hlbiBhIGNvbnRyb2xsZXIgaXMgdXNlZCBhcyBhbiBgaXRlbUNvbnRyb2xsZXJgLiBJbiBt
b3N0Ci0gICAgICAgICAgICAgICAgICAgIGNhc2VzIHRoZSBgdGFyZ2V0YCBwcm9wZXJ0eSB3aWxs
IGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIHRoZSBsb2dpY2FsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN1bWVyIG9mIGFjdGlvbnMgZm9yIHRoZSBjb250cm9sbGVyLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVs
bAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRhcmdldDogbnVsbCwKLQotICAg
ICAgICAgICAgY29udGFpbmVyOiBudWxsLAotCi0gICAgICAgICAgICBwYXJlbnRDb250cm9sbGVy
OiBudWxsLAotCi0gICAgICAgICAgICBzdG9yZTogbnVsbCwKLQotICAgICAgICAgICAgbW9kZWw6
IG51bGwsCi0gICAgICAgICAgICBjb250ZW50OiBjb21wdXRlZC5hbGlhcygnbW9kZWwnKSwKLQot
ICAgICAgICAgICAgZGVwcmVjYXRlZFNlbmRIYW5kbGVzOiBmdW5jdGlvbihhY3Rpb25OYW1lKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpc1thY3Rpb25OYW1lXTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGRlcHJlY2F0ZWRTZW5kOiBmdW5jdGlvbihhY3Rpb25OYW1lKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCcnICsgdGhpcyArICIgaGFzIHRoZSBhY3Rp
b24gIiArIGFjdGlvbk5hbWUgKyAiIGJ1dCBpdCBpcyBub3QgYSBmdW5jdGlvbiIsIHR5cGVvZiB0
aGlzW2FjdGlvbk5hbWVdID09PSAnZnVuY3Rpb24nKTsKLSAgICAgICAgICAgICAgICBFbWJlci5k
ZXByZWNhdGUoJ0FjdGlvbiBoYW5kbGVycyBpbXBsZW1lbnRlZCBkaXJlY3RseSBvbiBjb250cm9s
bGVycyBhcmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBhY3Rpb24gaGFuZGxlcnMgb24gYW4gYGFj
dGlvbnNgIG9iamVjdCAoIGFjdGlvbjogYCcgKyBhY3Rpb25OYW1lICsgJ2Agb24gJyArIHRoaXMg
KyAnKScsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0aGlzW2FjdGlvbk5hbWVdLmFwcGx5KHRo
aXMsIGFyZ3MpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9jb250cm9s
bGVyX2NvbnRlbnRfbW9kZWxfYWxpYXNfZGVwcmVjYXRpb24iLAotICAgIFsiZW1iZXItbWV0YWwv
Y29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAg
IC8vIEVtYmVyLmRlcHJlY2F0ZQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdl
dDsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5M19fLk1peGluOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBUaGUgQ29udHJvbGxlckNvbnRlbnRNb2RlbEFsaWFzRGVwcmVj
YXRpb24gbWl4aW4gaXMgdXNlZCB0byBwcm92aWRlIGEgdXNlZnVsCi0gICAgICAgICAgICAgIGRl
cHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBzcGVjaWZ5aW5nIGBjb250ZW50YCBkaXJlY3RseSBvbiBh
IGBFbWJlci5Db250cm9sbGVyYAotICAgICAgICAgICAgICAod2l0aG91dCBhbHNvIHNwZWNpZnlp
bmcgYG1vZGVsYCkuCi0KLSAgICAgICAgICAgICAgRW1iZXIgdmVyc2lvbnMgcHJpb3IgdG8gMS43
IHVzZWQgYG1vZGVsYCBhcyBhbiBhbGlhcyBvZiBgY29udGVudGAsIGJ1dCBkdWUgdG8KLSAgICAg
ICAgICAgICAgbXVjaCBjb25mdXNpb24gdGhpcyBhbGlhcyB3YXMgcmV2ZXJzZWQgKHNvIGBjb250
ZW50YCBpcyBub3cgYW4gYWxpYXMgb2YgYG1vZGVsKS4KLQotICAgICAgICAgICAgICBUaGlzIGNo
YW5nZSByZWR1Y2VzIG1hbnkgY2F2ZWF0cyB3aXRoIG1vZGVsL2NvbnRlbnQsIGFuZCBhbHNvIHNl
dHMgYQotICAgICAgICAgICAgICBzaW1wbGUgZ3JvdW5kIHJ1bGU6IE5ldmVyIHNldCBhIGNvbnRy
b2xsZXJzIGNvbnRlbnQsIHJhdGhlciBhbHdheXMgc2V0Ci0gICAgICAgICAgICAgIGl0J3MgbW9k
ZWwgYW5kIGVtYmVyIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLgotCi0KLSAgICAgICAgICAgICAg
YEVtYmVyLkNvbnRyb2xsZXJDb250ZW50TW9kZWxBbGlhc0RlcHJlY2F0aW9uYCBpcyB1c2VkIGlu
dGVybmFsbHkgYnkgRW1iZXIgaW4KLSAgICAgICAgICAgICAgYEVtYmVyLkNvbnRyb2xsZXJgLgot
Ci0gICAgICAgICAgICAgIEBjbGFzcyBDb250cm9sbGVyQ29udGVudE1vZGVsQWxpYXNEZXByZWNh
dGlvbgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAg
IE1vdmVzIGBjb250ZW50YCB0byBgbW9kZWxgICBhdCBleHRlbmQgdGltZSBpZiBhIGBtb2RlbGAg
aXMgbm90IGFsc28gc3BlY2lmaWVkLgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0
aGlzIGN1cnJlbnRseSBtb2RpZmllcyB0aGUgbWl4aW4gdGhlbXNlbHZlcywgd2hpY2ggaXMgdGVj
aG5pY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgZHViaW91cyBidXQgaXMgcHJhY3RpY2FsbHkg
b2YgbGl0dGxlIGNvbnNlcXVlbmNlLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlCi0gICAgICAgICAg
ICAgICAgICAgIGZ1dHVyZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHdpbGxNZXJn
ZU1peGluCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHdpbGxNZXJnZU1peGluOiBmdW5jdGlvbihwcm9wcykgewotICAg
ICAgICAgICAgICAgIC8vIENhbGxpbmcgc3VwZXIgaXMgb25seSBPSyBoZXJlIHNpbmNlIHdlIEtO
T1cgdGhhdAotICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGFub3RoZXIgTWl4aW4gbG9hZGVk
IGZpcnN0LgotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbW9kZWxTcGVjaWZpZWQgPSAhIXByb3BzLm1vZGVs
OwotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BzLmNvbnRlbnQgJiYgIW1vZGVsU3BlY2lmaWVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsID0gcHJvcHMuY29udGVudDsKLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzWydjb250ZW50J107Ci0KLSAgICAgICAgICAg
ICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdEbyBub3Qgc3BlY2lmeSBgY29udGVudGAgb24gYSBD
b250cm9sbGVyLCB1c2UgYG1vZGVsYCBpbnN0ZWFkLicsIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItcnVudGltZS9taXhpbnMvY29weWFibGUiLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlf
Z2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJl
bWJlci1ydW50aW1lL21peGlucy9mcmVlemFibGUiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3Ry
aW5nIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVu
Y3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2V4cG9ydHNfXykgewot
ICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBl
bWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAq
LwotCi0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZh
ciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAgICAgICB2YXIgcmVxdWlyZWQgPSBfX2Rl
cGVuZGVuY3kzX18ucmVxdWlyZWQ7Ci0gICAgICAgIHZhciBGcmVlemFibGUgPSBfX2RlcGVuZGVu
Y3k0X18uRnJlZXphYmxlOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3kzX18uTWl4
aW47Ci0gICAgICAgIHZhciBmbXQgPSBfX2RlcGVuZGVuY3k1X18uZm10OwotICAgICAgICB2YXIg
RW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotCi0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIEltcGxlbWVudHMgc29tZSBzdGFuZGFyZCBtZXRob2RzIGZvciBjb3B5
aW5nIGFuIG9iamVjdC4gQWRkIHRoaXMgbWl4aW4gdG8KLSAgICAgICAgICAgICAgYW55IG9iamVj
dCB5b3UgY3JlYXRlIHRoYXQgY2FuIGNyZWF0ZSBhIGNvcHkgb2YgaXRzZWxmLiBUaGlzIG1peGlu
IGlzCi0gICAgICAgICAgICAgIGFkZGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGJ1aWx0LWluIGFy
cmF5LgotCi0gICAgICAgICAgICAgIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGltcGxlbWVudCB0aGUg
YGNvcHkoKWAgbWV0aG9kIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlCi0gICAgICAgICAgICAgIHJl
Y2VpdmVyLgotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBgZnJvemVuQ29weSgpYCB3aWxsIG9u
bHkgd29yayBpZiB5b3UgYWxzbyBpbXBsZW1lbnQKLSAgICAgICAgICAgICAgYEVtYmVyLkZyZWV6
YWJsZWAuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIENvcHlhYmxlCi0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHNpbmNlIEVtYmVyIDAuOQotICAgICAgICAg
ICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZSh7Ci0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgdG8gcmV0dXJuIGEg
Y29weSBvZiB0aGUgcmVjZWl2ZXIuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gcmFpc2VzCi0gICAg
ICAgICAgICAgICAgICAgIGFuIGV4Y2VwdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGNvcHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtCb29sZWFufSBkZWVwIGlmIGB0
cnVlYCwgYSBkZWVwIGNvcHkgb2YgdGhlIG9iamVjdCBzaG91bGQgYmUgbWFkZQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGNvcHkgb2YgcmVjZWl2ZXIKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBjb3B5OiByZXF1aXJlZChGdW5jdGlvbiksCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgb2JqZWN0IGltcGxlbWVudHMg
YEVtYmVyLkZyZWV6YWJsZWAsIHRoZW4gdGhpcyB3aWxsIHJldHVybiBhIG5ldwotICAgICAgICAg
ICAgICAgICAgICBjb3B5IGlmIHRoZSBvYmplY3QgaXMgbm90IGZyb3plbiBhbmQgdGhlIHJlY2Vp
dmVyIGlmIHRoZSBvYmplY3QgaXMgZnJvemVuLgotCi0gICAgICAgICAgICAgICAgICAgIFJhaXNl
cyBhbiBleGNlcHRpb24gaWYgeW91IHRyeSB0byBjYWxsIHRoaXMgbWV0aG9kIG9uIGEgb2JqZWN0
IHRoYXQgZG9lcwotICAgICAgICAgICAgICAgICAgICBub3Qgc3VwcG9ydCBmcmVlemluZy4KLQot
ICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGlzIG1ldGhvZCB3aGVuZXZlciB5
b3Ugd2FudCBhIGNvcHkgb2YgYSBmcmVlemFibGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAg
IHNpbmNlIGEgZnJlZXphYmxlIG9iamVjdCBjYW4gc2ltcGx5IHJldHVybiBpdHNlbGYgd2l0aG91
dCBhY3R1YWxseQotICAgICAgICAgICAgICAgICAgICBjb25zdW1pbmcgbW9yZSBtZW1vcnkuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmcm96ZW5Db3B5Ci0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4ge09iamVjdH0gY29weSBvZiByZWNlaXZlciBvciByZWNlaXZlcgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZyb3plbkNvcHk6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIGlmIChGcmVlemFibGUgJiYgRnJlZXphYmxlLmRldGVjdCh0aGlzKSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdpc0Zyb3plbicpID8gdGhpcyA6
IHRoaXMuY29weSgpLmZyZWV6ZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKGZtdCgiJUAgZG9lcyBub3Qgc3VwcG9y
dCBmcmVlemluZyIsIFt0aGlzXSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9k
ZWZlcnJlZCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJl
ci1tZXRhbC9ydW5fbG9vcCIsICJlbWJlci1ydW50aW1lL2V4dC9yc3ZwIiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJl
ciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5GRUFUVVJF
UywgRW1iZXIuVGVzdAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAg
ICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5M19fLk1peGluOwotICAgICAgICB2YXIgY29t
cHV0ZWQgPSBfX2RlcGVuZGVuY3k0X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBydW4gPSBfX2Rl
cGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJTVlAgPSBfX2RlcGVuZGVuY3k2
X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgYXN5bmNTdGFydCA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgaWYgKEVtYmVyLlRlc3QgJiYgRW1iZXIuVGVzdC5hZGFwdGVyKSB7Ci0gICAg
ICAgICAgICAgICAgRW1iZXIuVGVzdC5hZGFwdGVyLmFzeW5jU3RhcnQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgYXN5bmNFbmQgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIGlmIChFbWJlci5UZXN0ICYmIEVtYmVyLlRlc3QuYWRhcHRlcikgewotICAgICAg
ICAgICAgICAgIEVtYmVyLlRlc3QuYWRhcHRlci5hc3luY0VuZCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIFJTVlAuY29uZmlndXJlKCdhc3luYycsIGZ1bmN0aW9uKGNh
bGxiYWNrLCBwcm9taXNlKSB7Ci0gICAgICAgICAgICB2YXIgYXN5bmMgPSAhcnVuLmN1cnJlbnRS
dW5Mb29wOwotCi0gICAgICAgICAgICBpZiAoRW1iZXIudGVzdGluZyAmJiBhc3luYykgewotICAg
ICAgICAgICAgICAgIGFzeW5jU3RhcnQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cnVuLmJhY2tidXJuZXIuc2NoZWR1bGUoJ2FjdGlvbnMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoRW1iZXIudGVzdGluZyAmJiBhc3luYykgewotICAgICAgICAgICAgICAgICAg
ICBhc3luY0VuZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayhwcm9taXNlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBSU1ZQ
LlByb21pc2UucHJvdG90eXBlLmZhaWwgPSBmdW5jdGlvbihjYWxsYmFjaywgbGFiZWwpIHsKLSAg
ICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnUlNWUC5Qcm9taXNlLmZhaWwgaGFzIGJlZW4gcmVu
YW1lZCBhcyBSU1ZQLlByb21pc2UuY2F0Y2gnKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzWydj
YXRjaCddKGNhbGxiYWNrLCBsYWJlbCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRp
bWUKLSAgICAgICAgICAgICovCi0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQGNsYXNz
IERlZmVycmVkCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAq
LwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKHsKLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBZGQgaGFuZGxlcnMgdG8gYmUgY2FsbGVk
IHdoZW4gdGhlIERlZmVycmVkIG9iamVjdCBpcyByZXNvbHZlZCBvciByZWplY3RlZC4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtGdW5jdGlvbn0gcmVzb2x2ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVu
IGRvbmUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ICBhIGNh
bGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGZhaWxlZAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCwgbGFiZWwp
IHsKLSAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQsIHByb21pc2UsIGVudGl0eTsKLQotICAg
ICAgICAgICAgICAgIGVudGl0eSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgZGVmZXJyZWQgPSBn
ZXQodGhpcywgJ19kZWZlcnJlZCcpOwotICAgICAgICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJl
ZC5wcm9taXNlOwotCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbG1lbnRIYW5kbGVy
KGZ1bGZpbGxtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmdWxmaWxsbWVudCA9PT0g
cHJvbWlzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZW50aXR5
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXNvbHZlKGZ1bGZpbGxtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4ocmVz
b2x2ZSAmJiBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdCwgbGFiZWwpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlc29sdmUgYSBEZWZl
cnJlZCBvYmplY3QgYW5kIGNhbGwgYW55IGBkb25lQ2FsbGJhY2tzYCB3aXRoIHRoZSBnaXZlbiBh
cmdzLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRlZmVycmVkLCBwcm9taXNlOwotCi0gICAgICAgICAgICAgICAgZGVmZXJy
ZWQgPSBnZXQodGhpcywgJ19kZWZlcnJlZCcpOwotICAgICAgICAgICAgICAgIHByb21pc2UgPSBk
ZWZlcnJlZC5wcm9taXNlOwotCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0aGlzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUocHJvbWlzZSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSh2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJlamVjdCBhIERlZmVycmVkIG9iamVjdCBhbmQgY2Fs
bCBhbnkgYGZhaWxDYWxsYmFja3NgIHdpdGggdGhlIGdpdmVuIGFyZ3MuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCByZWplY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZWplY3Q6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdf
ZGVmZXJyZWQnKS5yZWplY3QodmFsdWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
X2RlZmVycmVkOiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5k
ZXByZWNhdGUoJ1VzYWdlIG9mIEVtYmVyLkRlZmVycmVkTWl4aW4gb3IgRW1iZXIuRGVmZXJyZWQg
aXMgZGVwcmVjYXRlZC4nLCB0aGlzLl9zdXBwcmVzc0RlZmVycmVkRGVwcmVjYXRpb24pOwotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFJTVlAuZGVmZXIoJ0VtYmVyOiBEZWZlcnJlZE1peGluIC0g
JyArIHRoaXMpOwotICAgICAgICAgICAgfSkKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlIiwKLSAgICBbImVtYmVyLW1ldGFs
L2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1t
ZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1l
dGFsL3Byb3BlcnR5X2V2ZW50cyIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZW1iZXItcnVudGlt
ZS9jb21wYXJlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5k
ZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThf
XywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJl
cgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gSEVMUEVSUwotICAgICAgICAvLwotCi0gICAgICAg
IHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0
ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNf
Xy5zZXQ7Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVwZW5kZW5jeTRfXy5hcHBseTsKLSAgICAg
ICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5NV9fLk1peGluOwotICAgICAgICB2YXIgcmVxdWly
ZWQgPSBfX2RlcGVuZGVuY3k1X18ucmVxdWlyZWQ7Ci0gICAgICAgIHZhciBhbGlhc01ldGhvZCA9
IF9fZGVwZW5kZW5jeTVfXy5hbGlhc01ldGhvZDsKLSAgICAgICAgdmFyIGluZGV4T2YgPSBfX2Rl
cGVuZGVuY3k2X18uaW5kZXhPZjsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5
N19fLmNvbXB1dGVkOwotICAgICAgICB2YXIgcHJvcGVydHlXaWxsQ2hhbmdlID0gX19kZXBlbmRl
bmN5OF9fLnByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlkQ2hhbmdl
ID0gX19kZXBlbmRlbmN5OF9fLnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIgYWRkTGlz
dGVuZXIgPSBfX2RlcGVuZGVuY3k5X18uYWRkTGlzdGVuZXI7Ci0gICAgICAgIHZhciByZW1vdmVM
aXN0ZW5lciA9IF9fZGVwZW5kZW5jeTlfXy5yZW1vdmVMaXN0ZW5lcjsKLSAgICAgICAgdmFyIHNl
bmRFdmVudCA9IF9fZGVwZW5kZW5jeTlfXy5zZW5kRXZlbnQ7Ci0gICAgICAgIHZhciBoYXNMaXN0
ZW5lcnMgPSBfX2RlcGVuZGVuY3k5X18uaGFzTGlzdGVuZXJzOwotICAgICAgICB2YXIgY29tcGFy
ZSA9IF9fZGVwZW5kZW5jeTEwX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgYV9zbGljZSA9
IEFycmF5LnByb3RvdHlwZS5zbGljZTsKLQotICAgICAgICB2YXIgY29udGV4dHMgPSBbXTsKLQot
ICAgICAgICBmdW5jdGlvbiBwb3BDdHgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dHMu
bGVuZ3RoID09PSAwID8ge30gOiBjb250ZXh0cy5wb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIHB1c2hDdHgoY3R4KSB7Ci0gICAgICAgICAgICBjb250ZXh0cy5wdXNoKGN0eCk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGl0ZXIoa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgdmFyIHZhbHVlUHJvdmlkZWQgPSBhcmd1
bWVudHMubGVuZ3RoID09PSAyOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBpKGl0ZW0pIHsKLSAg
ICAgICAgICAgICAgICB2YXIgY3VyID0gZ2V0KGl0ZW0sIGtleSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlUHJvdmlkZWQgPyB2YWx1ZSA9PT0gY3VyIDogISFjdXI7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIFRoaXMgbWl4aW4gZGVmaW5lcyB0aGUgY29tbW9uIGludGVyZmFjZSBpbXBs
ZW1lbnRlZCBieSBlbnVtZXJhYmxlIG9iamVjdHMKLSAgICAgICAgICAgICAgaW4gRW1iZXIuIE1v
c3Qgb2YgdGhlc2UgbWV0aG9kcyBmb2xsb3cgdGhlIHN0YW5kYXJkIEFycmF5IGl0ZXJhdGlvbgot
ICAgICAgICAgICAgICBBUEkgZGVmaW5lZCB1cCB0byBKYXZhU2NyaXB0IDEuOCAoZXhjbHVkaW5n
IGxhbmd1YWdlLXNwZWNpZmljIGZlYXR1cmVzIHRoYXQKLSAgICAgICAgICAgICAgY2Fubm90IGJl
IGVtdWxhdGVkIGluIG9sZGVyIHZlcnNpb25zIG9mIEphdmFTY3JpcHQpLgotCi0gICAgICAgICAg
ICAgIFRoaXMgbWl4aW4gaXMgYXBwbGllZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBBcnJheSBjbGFz
cyBvbiBwYWdlIGxvYWQsIHNvIHlvdQotICAgICAgICAgICAgICBjYW4gdXNlIGFueSBvZiB0aGVz
ZSBtZXRob2RzIG9uIHNpbXBsZSBhcnJheXMuIElmIEFycmF5IGFscmVhZHkgaW1wbGVtZW50cwot
ICAgICAgICAgICAgICBvbmUgb2YgdGhlc2UgbWV0aG9kcywgdGhlIG1peGluIHdpbGwgbm90IG92
ZXJyaWRlIHRoZW0uCi0KLSAgICAgICAgICAgICAgIyMgV3JpdGluZyBZb3VyIE93biBFbnVtZXJh
YmxlCi0KLSAgICAgICAgICAgICAgVG8gbWFrZSB5b3VyIG93biBjdXN0b20gY2xhc3MgZW51bWVy
YWJsZSwgeW91IG5lZWQgdHdvIGl0ZW1zOgotCi0gICAgICAgICAgICAgIDEuIFlvdSBtdXN0IGhh
dmUgYSBsZW5ndGggcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgc2hvdWxkIGNoYW5nZSB3aGVuZXZl
cgotICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHlvdXIgZW51bWVyYWJs
ZSBvYmplY3QgY2hhbmdlcy4gSWYgeW91IHVzZSB0aGlzCi0gICAgICAgICAgICAgICAgIHdpdGgg
YW4gYEVtYmVyLk9iamVjdGAgc3ViY2xhc3MsIHlvdSBzaG91bGQgYmUgc3VyZSB0byBjaGFuZ2Ug
dGhlIGxlbmd0aAotICAgICAgICAgICAgICAgICBwcm9wZXJ0eSB1c2luZyBgc2V0KCkuYAotCi0g
ICAgICAgICAgICAgIDIuIFlvdSBtdXN0IGltcGxlbWVudCBgbmV4dE9iamVjdCgpLmAgU2VlIGRv
Y3VtZW50YXRpb24uCi0KLSAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGVzZSB0d28gbWV0
aG9kcyBpbXBsZW1lbnRlZCwgYXBwbHkgdGhlIGBFbWJlci5FbnVtZXJhYmxlYCBtaXhpbgotICAg
ICAgICAgICAgICB0byB5b3VyIGNsYXNzIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGVudW1lcmF0
ZSB0aGUgY29udGVudHMgb2YgeW91ciBvYmplY3QKLSAgICAgICAgICAgICAgbGlrZSBhbnkgb3Ro
ZXIgY29sbGVjdGlvbi4KLQotICAgICAgICAgICAgICAjIyBVc2luZyBFbWJlciBFbnVtZXJhdGlv
biB3aXRoIE90aGVyIExpYnJhcmllcwotCi0gICAgICAgICAgICAgIE1hbnkgb3RoZXIgbGlicmFy
aWVzIHByb3ZpZGUgc29tZSBraW5kIG9mIGl0ZXJhdG9yIG9yIGVudW1lcmF0aW9uIGxpa2UKLSAg
ICAgICAgICAgICAgZmFjaWxpdHkuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgdGhlIG1vc3QgY29tbW9u
IEFQSSBjb25mbGljdHMgb2NjdXIuCi0gICAgICAgICAgICAgIEVtYmVyJ3MgQVBJIGlzIGRlc2ln
bmVkIHRvIGJlIGFzIGZyaWVuZGx5IGFzIHBvc3NpYmxlIHdpdGggb3RoZXIKLSAgICAgICAgICAg
ICAgbGlicmFyaWVzIGJ5IGltcGxlbWVudGluZyBvbmx5IG1ldGhvZHMgdGhhdCBtb3N0bHkgY29y
cmVzcG9uZCB0byB0aGUKLSAgICAgICAgICAgICAgSmF2YVNjcmlwdCAxLjggQVBJLgotCi0gICAg
ICAgICAgICAgIEBjbGFzcyBFbnVtZXJhYmxlCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICAgQHNpbmNlIEVtYmVyIDAuOQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZSh7Ci0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbWFrZSB5
b3VyIGNsYXNzIGVudW1lcmFibGUuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qg
d2lsbCBiZSBjYWxsIHJlcGVhdGVkbHkgZHVyaW5nIGVudW1lcmF0aW9uLiBUaGUgaW5kZXggdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBhbHdheXMgYmVnaW4gd2l0aCAwIGFuZCBpbmNy
ZW1lbnQgbW9ub3RvbmljYWxseS4gWW91IGRvbid0IGhhdmUgdG8KLSAgICAgICAgICAgICAgICAg
ICAgcmVseSBvbiB0aGUgaW5kZXggdmFsdWUgdG8gZGV0ZXJtaW5lIHdoYXQgb2JqZWN0IHRvIHJl
dHVybiwgYnV0IHlvdSBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgYWx3YXlzIGNoZWNrIHRo
ZSB2YWx1ZSBhbmQgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHdoZW4geW91IHNlZSB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGluZGV4IGlzIDAuCi0KLSAgICAgICAgICAgICAg
ICAgICAgVGhlIGBwcmV2aW91c09iamVjdGAgaXMgdGhlIG9iamVjdCB0aGF0IHdhcyByZXR1cm5l
ZCBmcm9tIHRoZSBsYXN0IGNhbGwKLSAgICAgICAgICAgICAgICAgICAgdG8gYG5leHRPYmplY3Rg
IGZvciB0aGUgY3VycmVudCBpdGVyYXRpb24uIFRoaXMgaXMgYSB1c2VmdWwgd2F5IHRvCi0gICAg
ICAgICAgICAgICAgICAgIG1hbmFnZSBpdGVyYXRpb24gaWYgeW91IGFyZSB0cmFjaW5nIGEgbGlu
a2VkIGxpc3QsIGZvciBleGFtcGxlLgotCi0gICAgICAgICAgICAgICAgICAgIEZpbmFsbHkgdGhl
IGNvbnRleHQgcGFyYW1ldGVyIHdpbGwgYWx3YXlzIGNvbnRhaW4gYSBoYXNoIHlvdSBjYW4gdXNl
IGFzCi0gICAgICAgICAgICAgICAgICAgIGEgInNjcmF0Y2hwYWQiIHRvIG1haW50YWluIGFueSBv
dGhlciBzdGF0ZSB5b3UgbmVlZCBpbiBvcmRlciB0byBpdGVyYXRlCi0gICAgICAgICAgICAgICAg
ICAgIHByb3Blcmx5LiBUaGUgY29udGV4dCBvYmplY3QgaXMgcmV1c2VkIGFuZCBpcyBub3QgcmVz
ZXQgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zIHNvIG1ha2Ugc3VyZSB5
b3Ugc2V0dXAgdGhlIGNvbnRleHQgd2l0aCBhIGZyZXNoIHN0YXRlIHdoZW5ldmVyCi0gICAgICAg
ICAgICAgICAgICAgIHRoZSBpbmRleCBwYXJhbWV0ZXIgaXMgMC4KLQotICAgICAgICAgICAgICAg
ICAgICBHZW5lcmFsbHkgaXRlcmF0b3JzIHdpbGwgY29udGludWUgdG8gY2FsbCBgbmV4dE9iamVj
dGAgdW50aWwgdGhlIGluZGV4Ci0gICAgICAgICAgICAgICAgICAgIHJlYWNoZXMgdGhlIHlvdXIg
Y3VycmVudCBsZW5ndGgtMS4gSWYgeW91IHJ1biBvdXQgb2YgZGF0YSBiZWZvcmUgdGhpcwotICAg
ICAgICAgICAgICAgICAgICB0aW1lIGZvciBzb21lIHJlYXNvbiwgeW91IHNob3VsZCBzaW1wbHkg
cmV0dXJuIHVuZGVmaW5lZC4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBzaW1wbHkgbG9va3MgdXAgdGhlIGluZGV4LgotICAg
ICAgICAgICAgICAgICAgICBUaGlzIHdvcmtzIGdyZWF0IG9uIGFueSBBcnJheS1saWtlIG9iamVj
dHMuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBuZXh0T2JqZWN0Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBpbmRleCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUg
aXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwcmV2aW91c09i
amVjdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGxhc3QgY2FsbCB0bwotICAgICAgICAgICAg
ICAgICAgICAgIGBuZXh0T2JqZWN0YC4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IGNvbnRleHQgYSBjb250ZXh0IG9iamVjdCB5b3UgY2FuIHVzZSB0byBtYWludGFpbiBzdGF0
ZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgbmV4dCBvYmplY3Qg
aW4gdGhlIGl0ZXJhdGlvbiBvciB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBuZXh0T2JqZWN0OiByZXF1aXJlZChGdW5jdGlvbiksCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBIZWxwZXIgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IG9i
amVjdCBmcm9tIGEgY29sbGVjdGlvbi4gVGhpcyBpcyB1c3VhbGx5Ci0gICAgICAgICAgICAgICAg
ICAgIHVzZWQgYnkgYmluZGluZ3MgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBmcmFtZXdvcmsgdG8g
ZXh0cmFjdCBhIHNpbmdsZQotICAgICAgICAgICAgICAgICAgICBvYmplY3QgaWYgdGhlIGVudW1l
cmFibGUgY29udGFpbnMgb25seSBvbmUgaXRlbS4KLQotICAgICAgICAgICAgICAgICAgICBJZiB5
b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QsIHlvdSBzaG91bGQgaW1wbGVtZW50IGl0IHNvIHRoYXQg
aXQgd2lsbAotICAgICAgICAgICAgICAgICAgICBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHZhbHVl
IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuIElmIHlvdXIgZW51bWVyYWJsZQotICAgICAgICAgICAg
ICAgICAgICBjb250YWlucyBvbmx5IG9uZSBvYmplY3QsIHRoaXMgbWV0aG9kIHNob3VsZCBhbHdh
eXMgcmV0dXJuIHRoYXQgb2JqZWN0LgotICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGVudW1l
cmFibGUgaXMgZW1wdHksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYHVuZGVmaW5lZGAuCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2
YXIgYXJyID0gWyJhIiwgImIiLCAiYyJdOwotICAgICAgICAgICAgICAgICAgICBhcnIuZ2V0KCdm
aXJzdE9iamVjdCcpOyAgLy8gImEiCi0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtd
OwotICAgICAgICAgICAgICAgICAgICBhcnIuZ2V0KCdmaXJzdE9iamVjdCcpOyAgLy8gdW5kZWZp
bmVkCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9w
ZXJ0eSBmaXJzdE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRo
ZSBvYmplY3Qgb3IgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Zmlyc3RPYmplY3Q6IGNvbXB1dGVkKCdbXScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IGlmIChnZXQodGhpcywgJ2xlbmd0aCcpID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZCA7Ci0KLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZ2VuZXJpYyBlbnVt
ZXJhYmxlcwotICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gcG9wQ3R4KCksIHJldDsKLSAg
ICAgICAgICAgICAgICByZXQgPSB0aGlzLm5leHRPYmplY3QoMCwgbnVsbCwgY29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgcHVzaEN0eChjb250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBIZWxwZXIgbWV0aG9kIHJldHVybnMgdGhlIGxhc3Qgb2JqZWN0IGZyb20gYSBjb2xsZWN0
aW9uLiBJZiB5b3VyIGVudW1lcmFibGUKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgb25s
eSBvbmUgb2JqZWN0LCB0aGlzIG1ldGhvZCBzaG91bGQgYWx3YXlzIHJldHVybiB0aGF0IG9iamVj
dC4KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBlbnVtZXJhYmxlIGlzIGVtcHR5LCB0aGlz
IG1ldGhvZCBzaG91bGQgcmV0dXJuIGB1bmRlZmluZWRgLgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsiYSIsICJiIiwg
ImMiXTsKLSAgICAgICAgICAgICAgICAgICAgYXJyLmdldCgnbGFzdE9iamVjdCcpOyAgLy8gImMi
Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdOwotICAgICAgICAgICAgICAgICAg
ICBhcnIuZ2V0KCdsYXN0T2JqZWN0Jyk7ICAvLyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGxhc3RPYmplY3QKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgbGFzdCBvYmplY3Qgb3IgdW5kZWZp
bmVkCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbGFzdE9iamVjdDogY29tcHV0
ZWQoJ1tdJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdldCh0aGlz
LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkgCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB1bmRlZmluZWQgOwotICAgICAgICAgICAgICAgIHZhciBjb250ZXh0
ID0gcG9wQ3R4KCksIGlkeCA9IDAsIGN1ciwgbGFzdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgICAgICBsYXN0ID0gY3VyOwotICAgICAgICAgICAgICAgICAg
ICBjdXIgPSB0aGlzLm5leHRPYmplY3QoaWR4KyssIGxhc3QsIGNvbnRleHQpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQpOwotICAg
ICAgICAgICAgICAgIHB1c2hDdHgoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxh
c3Q7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgb2JqZWN0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgcmVjZWl2ZXIuIFRoZQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHZlcnNpb24gd2ls
bCBpdGVyYXRlIHRocm91Z2ggdGhlIGVudW1lcmFibGUgdW50aWwgdGhlIG9iamVjdAotICAgICAg
ICAgICAgICAgICAgICBpcyBmb3VuZC4gWW91IG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgd2l0
aCBhIG1vcmUgZWZmaWNpZW50IHZlcnNpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gWyJhIiwgImIiLCAiYyJdOwot
ICAgICAgICAgICAgICAgICAgICBhcnIuY29udGFpbnMoImEiKTsgLy8gdHJ1ZQotICAgICAgICAg
ICAgICAgICAgICBhcnIuY29udGFpbnMoInoiKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb250YWlucwotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gc2VhcmNoIGZvci4K
LSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIG9iamVjdCBp
cyBmb3VuZCBpbiBlbnVtZXJhYmxlLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGNvbnRhaW5zOiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5kKGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09
IG9iajsKLSAgICAgICAgICAgICAgICB9KSAhPT0gdW5kZWZpbmVkOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEl0ZXJhdGVzIHRocm91Z2gg
dGhlIGVudW1lcmFibGUsIGNhbGxpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbiBvbiBlYWNoCi0gICAg
ICAgICAgICAgICAgICAgIGl0ZW0uIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIHRoZSBgZm9y
RWFjaCgpYCBtZXRob2QgZGVmaW5lZCBpbgotICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0
IDEuNi4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92
aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oaXRlbSwgaW5kZXgs
IGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAg
ICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gICAg
ICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaXRl
cmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUgZW51bWVy
YWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpbiBh
ZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJn
ZXQKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNg
IG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgICAgICAgICAgICAgICAg
dG8gZ2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmpl
Y3QuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmb3JFYWNoCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0
IG9iamVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSByZWNl
aXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9u
KGNhbGxiYWNrLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNr
ICE9PSAnZnVuY3Rpb24nKSAKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cigpIDsKLSAgICAgICAgICAgICAgICB2YXIgbGVuID0gZ2V0KHRoaXMsICdsZW5ndGgnKSwgbGFz
dCA9IG51bGwsIGNvbnRleHQgPSBwb3BDdHgoKTsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IG51bGw7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0T2JqZWN0KGlkeCwgbGFzdCwg
Y29udGV4dCkgOwotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRhcmdldCwgbmV4
dCwgaWR4LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5leHQgOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXN0ID0gbnVsbCA7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dCA9IHB1c2hDdHgoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMgOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEFsaWFzIGZvciBgbWFwQnlgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRF
YWNoCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgbmFtZSBvZiB0aGUg
cHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IFRoZSBtYXBwZWQg
YXJyYXkuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0RWFjaDogZnVuY3Rp
b24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwQnkoa2V5KTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRo
ZSB2YWx1ZSBvbiB0aGUgbmFtZWQgcHJvcGVydHkgZm9yIGVhY2ggbWVtYmVyLiBUaGlzIGlzIG1v
cmUKLSAgICAgICAgICAgICAgICAgICAgZWZmaWNpZW50IHRoYW4gdXNpbmcgb3RoZXIgbWV0aG9k
cyBkZWZpbmVkIG9uIHRoaXMgaGVscGVyLiBJZiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgIGltcGxlbWVudHMgRW1iZXIuT2JzZXJ2YWJsZSwgdGhlIHZhbHVlIHdpbGwgYmUgY2hhbmdl
ZCB0byBgc2V0KCksYCBvdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBiZSBz
ZXQgZGlyZWN0bHkuIGBudWxsYCBvYmplY3RzIGFyZSBza2lwcGVkLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2Qgc2V0RWFjaAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5IFRoZSBrZXkgdG8gc2V0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0
fSB2YWx1ZSBUaGUgb2JqZWN0IHRvIHNldAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtP
YmplY3R9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0RWFj
aDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZv
ckVhY2goZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgICAgICAgICAgICBzZXQoaXRlbSwga2V5
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTWFwcyBhbGwgb2YgdGhlIGl0ZW1zIGluIHRo
ZSBlbnVtZXJhdGlvbiB0byBhbm90aGVyIHZhbHVlLCByZXR1cm5pbmcKLSAgICAgICAgICAgICAg
ICAgICAgYSBuZXcgYXJyYXkuIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIGBtYXAoKWAgZGVm
aW5lZCBpbiBKYXZhU2NyaXB0IDEuNi4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJh
Y2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJl
IChhbGwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oaXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRo
ZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVu
dCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJh
YmxlYCBpcyB0aGUgZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAg
ICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIG1hcHBlZCB2YWx1ZS4KLQotICAgICAgICAgICAgICAg
ICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBhbHNvIHBh
c3MgYW4gb3B0aW9uYWwgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IHdp
bGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0g
ICAgICAgICAgICAgICAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3Mg
dG8gdGhlIGN1cnJlbnQgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgbWFw
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7QXJyYXl9IFRoZSBtYXBwZWQgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgbWFwOiBmdW5jdGlvbihjYWxsYmFjaywgdGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHJldCA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rp
b24oeCwgaWR4LCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldFtpZHhdID0gY2FsbGJhY2su
Y2FsbCh0YXJnZXQsIHgsIGlkeCwgaSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJldCA7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgU2ltaWxhciB0byBtYXAsIHRoaXMgc3BlY2lhbGl6ZWQgZnVuY3Rp
b24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5IG9uIGFsbCBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24uCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBtYXBCeQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
a2V5IG5hbWUgb2YgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Fy
cmF5fSBUaGUgbWFwcGVkIGFycmF5LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IG1hcEJ5OiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24obmV4dCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KG5leHQsIGtl
eSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgU2ltaWxhciB0byBtYXAsIHRoaXMgc3BlY2lhbGl6ZWQg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5IG9uIGFsbCBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24uCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBtYXBQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30ga2V5IG5hbWUgb2YgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0FycmF5fSBUaGUgbWFwcGVkIGFycmF5LgotICAgICAgICAgICAgICAgICAgICBA
ZGVwcmVjYXRlZCBVc2UgYG1hcEJ5YCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAqLwotCi0g
ICAgICAgICAgICBtYXBQcm9wZXJ0eTogYWxpYXNNZXRob2QoJ21hcEJ5JyksCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIG9m
IHRoZSBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24gdGhhdCB0aGUgcGFzc2VkCi0gICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IuIFRoaXMgbWV0aG9kIGNvcnJlc3Bv
bmRzIHRvIGBmaWx0ZXIoKWAgZGVmaW5lZCBpbgotICAgICAgICAgICAgICAgICAgICBKYXZhU2Ny
aXB0IDEuNi4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBw
cm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oaXRlbSwgaW5k
ZXgsIGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0g
ICAgICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUg
aXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUgZW51
bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIEl0IHNob3VsZCBy
ZXR1cm4gdGhlIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBpdGVtIGluIHRoZSByZXN1bHRzLCBgZmFs
c2VgCi0gICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZS4KLQotICAgICAgICAgICAgICAgICAg
ICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBhbHNvIHBhc3Mg
YW4gb3B0aW9uYWwgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IHdpbGwg
YmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0gICAg
ICAgICAgICAgICAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8g
dGhlIGN1cnJlbnQgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmlsdGVy
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7QXJyYXl9IEEgZmlsdGVyZWQgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZmlsdGVyOiBmdW5jdGlvbihjYWxsYmFjaywgdGFyZ2V0KSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHJldCA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2goZnVu
Y3Rpb24oeCwgaWR4LCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxs
KHRhcmdldCwgeCwgaWR4LCBpKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh4
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0IDsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1
cm5zIGFuIGFycmF5IHdpdGggYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24gd2hl
cmUgdGhlIHBhc3NlZAotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXR1cm5zIGZhbHNl
IGZvci4gVGhpcyBtZXRob2QgaXMgdGhlIGludmVyc2Ugb2YgZmlsdGVyKCkuCi0KLSAgICAgICAg
ICAgICAgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0
aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRl
cnMgYXJlIG9wdGlvbmFsKToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgLSAqaXRlbSogaXMg
dGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAt
ICppbmRleCogaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbgotICAgICAgICAg
ICAgICAgICAgICAtICplbnVtZXJhYmxlKiBpcyB0aGUgZW51bWVyYWJsZSBvYmplY3QgaXRzZWxm
LgotCi0gICAgICAgICAgICAgICAgICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIGEgZmFsc2V5IHZh
bHVlIHRvIGluY2x1ZGUgdGhlIGl0ZW0gaW4gdGhlIHJlc3VsdHMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBw
YXNzIGFuIG9wdGlvbmFsIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBvYmplY3QgdGhhdCB3
aWxsIGJlIHNldCBhcyAidGhpcyIgb24gdGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQot
ICAgICAgICAgICAgICAgICAgICB0byBnaXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNz
IHRvIHRoZSBjdXJyZW50IG9iamVjdC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJl
amVjdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUg
Y2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
W3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge0FycmF5fSBBIHJlamVjdGVkIGFycmF5LgotICAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByZWplY3Q6IGZ1bmN0aW9uKGNhbGxiYWNrLCB0YXJnZXQpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhKGFwcGx5KHRhcmdldCwgY2FsbGJhY2ssIGFyZ3VtZW50cykpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBqdXN0IHRoZSBpdGVtcyB3aXRoIHRo
ZSBtYXRjaGVkIHByb3BlcnR5LiBZb3UKLSAgICAgICAgICAgICAgICAgICAgY2FuIHBhc3MgYW4g
b3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2YWx1ZS4gT3RoZXJ3aXNl
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgd2lsbCBtYXRjaCBhbnkgcHJvcGVydHkgdGhhdCBl
dmFsdWF0ZXMgdG8gYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmlsdGVy
QnkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkg
dG8gdGVzdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IFt2YWx1ZV0gb3B0aW9uYWwg
dmFsdWUgdG8gdGVzdCBhZ2FpbnN0LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJh
eX0gZmlsdGVyZWQgYXJyYXkKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmaWx0
ZXJCeTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbHRlcihhcHBseSh0aGlzLCBpdGVyLCBhcmd1bWVudHMpKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IHdp
dGgganVzdCB0aGUgaXRlbXMgd2l0aCB0aGUgbWF0Y2hlZCBwcm9wZXJ0eS4gWW91Ci0gICAgICAg
ICAgICAgICAgICAgIGNhbiBwYXNzIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB3aXRoIHRo
ZSB0YXJnZXQgdmFsdWUuIE90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICB0aGlzIHdpbGwg
bWF0Y2ggYW55IHByb3BlcnR5IHRoYXQgZXZhbHVhdGVzIHRvIGB0cnVlYC4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGZpbHRlclByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0
LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gZmlsdGVyZWQgYXJyYXkKLSAg
ICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBmaWx0ZXJCeWAgaW5zdGVhZAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZpbHRlclByb3BlcnR5OiBhbGlhc01ldGhv
ZCgnZmlsdGVyQnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJl
dHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgaXRlbXMgdGhhdCBkbyBub3QgaGF2ZSB0cnV0aHkgdmFs
dWVzIGZvcgotICAgICAgICAgICAgICAgICAgICBrZXkuICBZb3UgY2FuIHBhc3MgYW4gb3B0aW9u
YWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2YWx1ZS4gIE90aGVyd2lzZQotICAg
ICAgICAgICAgICAgICAgICB0aGlzIHdpbGwgbWF0Y2ggYW55IHByb3BlcnR5IHRoYXQgZXZhbHVh
dGVzIHRvIGZhbHNlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVqZWN0QnkKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVz
dAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2
YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5
fSByZWplY3RlZCBhcnJheQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlamVj
dEJ5OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4YWN0VmFs
dWUgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQoaXRl
bSwga2V5KSA9PT0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBo
YXNWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEh
Z2V0KGl0ZW0sIGtleSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB1c2Ug
PSAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IGV4YWN0VmFsdWUgOiBoYXNWYWx1ZSk7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWplY3QodXNlKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IHdp
dGggdGhlIGl0ZW1zIHRoYXQgZG8gbm90IGhhdmUgdHJ1dGh5IHZhbHVlcyBmb3IKLSAgICAgICAg
ICAgICAgICAgICAga2V5LiAgWW91IGNhbiBwYXNzIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVu
dCB3aXRoIHRoZSB0YXJnZXQgdmFsdWUuICBPdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAg
dGhpcyB3aWxsIG1hdGNoIGFueSBwcm9wZXJ0eSB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZS4KLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlamVjdFByb3BlcnR5Ci0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8gdGVz
dCBhZ2FpbnN0LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gcmVqZWN0ZWQg
YXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGByZWplY3RCeWAgaW5z
dGVhZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlamVjdFByb3BlcnR5OiBh
bGlhc01ldGhvZCgncmVqZWN0QnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFycmF5IGZvciB3aGljaCB0aGUg
Y2FsbGJhY2sgcmV0dXJucyB0cnVlLgotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3
b3JrcyBzaW1pbGFyIHRvIHRoZSBgZmlsdGVyKClgIG1ldGhvZCBkZWZpbmVkIGluIEphdmFTY3Jp
cHQgMS42Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB0aGF0IGl0IHdpbGwgc3RvcCB3b3Jr
aW5nIG9uIHRoZSBhcnJheSBvbmNlIGEgbWF0Y2ggaXMgZm91bmQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9s
bG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgYXJl
IG9wdGlvbmFsKToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgLSBgaXRlbWAgaXMgdGhlIGN1
cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBpbmRl
eGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAg
ICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2VsZi4KLQot
ICAgICAgICAgICAgICAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBgdHJ1ZWAgdG8gaW5jbHVk
ZSB0aGUgaXRlbSBpbiB0aGUgcmVzdWx0cywgYGZhbHNlYAotICAgICAgICAgICAgICAgICAgICBv
dGhlcndpc2UuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRv
IGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAotICAgICAg
ICAgICAgICAgICAgICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBgdGhpc2Agb24gdGhlIGNv
bnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQotICAgICAgICAgICAgICAgICAgICB0byBnaXZlIHlv
dXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGZpbmQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHVz
ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IEZvdW5kIGl0ZW0gb3IgYHVu
ZGVmaW5lZGAuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZmluZDogZnVuY3Rp
b24oY2FsbGJhY2ssIHRhcmdldCkgewotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBnZXQodGhp
cywgJ2xlbmd0aCcpIDsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQp
IAotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAg
dmFyIGxhc3QgPSBudWxsLCBuZXh0LCBmb3VuZCA9IGZhbHNlLCByZXQgOwotICAgICAgICAgICAg
ICAgIHZhciBjb250ZXh0ID0gcG9wQ3R4KCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4
ID0gMDsgaWR4IDwgbGVuICYmICFmb3VuZDsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
bmV4dCA9IHRoaXMubmV4dE9iamVjdChpZHgsIGxhc3QsIGNvbnRleHQpIDsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvdW5kID0gY2FsbGJhY2suY2FsbCh0YXJnZXQsIG5leHQsIGlkeCwgdGhp
cykpIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbmV4dCA7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhc3QgPSBuZXh0IDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
bmV4dCA9IGxhc3QgPSBudWxsIDsKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gcHVzaEN0eChj
b250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0IDsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBmaXJzdCBp
dGVtIHdpdGggYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgcGFzc2VkIHZhbHVlLiBZb3UKLSAgICAg
ICAgICAgICAgICAgICAgY2FuIHBhc3MgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGgg
dGhlIHRhcmdldCB2YWx1ZS4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgd2ls
bCBtYXRjaCBhbnkgcHJvcGVydHkgdGhhdCBldmFsdWF0ZXMgdG8gYHRydWVgLgotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIG11Y2ggbGlrZSB0aGUgbW9yZSBnZW5lcmlj
IGBmaW5kKClgIG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZpbmRCeQot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0
ZXN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFs
IHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2Jq
ZWN0fSBmb3VuZCBpdGVtIG9yIGB1bmRlZmluZWRgCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZmluZEJ5OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZmluZChhcHBseSh0aGlzLCBpdGVyLCBhcmd1bWVudHMpKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRo
ZSBmaXJzdCBpdGVtIHdpdGggYSBwcm9wZXJ0eSBtYXRjaGluZyB0aGUgcGFzc2VkIHZhbHVlLiBZ
b3UKLSAgICAgICAgICAgICAgICAgICAgY2FuIHBhc3MgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3Vt
ZW50IHdpdGggdGhlIHRhcmdldCB2YWx1ZS4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMgd2lsbCBtYXRjaCBhbnkgcHJvcGVydHkgdGhhdCBldmFsdWF0ZXMgdG8gYHRydWVgLgot
Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIG11Y2ggbGlrZSB0aGUgbW9y
ZSBnZW5lcmljIGBmaW5kKClgIG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGZpbmRQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IHRo
ZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBb
dmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7T2JqZWN0fSBmb3VuZCBpdGVtIG9yIGB1bmRlZmluZWRgCi0gICAgICAgICAg
ICAgICAgICAgIEBkZXByZWNhdGVkIFVzZSBgZmluZEJ5YCBpbnN0ZWFkCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgZmluZFByb3BlcnR5OiBhbGlhc01ldGhvZCgnZmluZEJ5Jyks
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGB0cnVlYCBp
ZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgZXZlcnkgaXRlbSBpbiB0aGUK
LSAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRpb24uIFRoaXMgY29ycmVzcG9uZHMgd2l0aCB0
aGUgYGV2ZXJ5KClgIG1ldGhvZCBpbiBKYXZhU2NyaXB0IDEuNi4KLQotICAgICAgICAgICAgICAg
ICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xs
b3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUg
b3B0aW9uYWwpOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oaXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3Vy
cmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGluZGV4
YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAg
ICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUgZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0g
ICAgICAgICAgICAgICAgICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIGB0cnVlYCBvciBgZmFsc2Vg
LgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxi
YWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LiBU
aGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgICAgICAgICAgICAgICAgdG8gZ2l2ZSB5b3VyIGl0ZXJh
dG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmplY3QuCi0KLSAgICAgICAgICAg
ICAgICAgICAgRXhhbXBsZSBVc2FnZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwZW9wbGUuZXZlcnkoaXNFbmdpbmVlcikpIHsg
UGF5Y2hlY2tzLmFkZEJpZ0JvbnVzKCk7IH0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBldmVyeQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8g
dXNlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKGNhbGxiYWNrLCB0YXJnZXQpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZmluZChmdW5jdGlvbih4LCBpZHgsIGkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjYWxsYmFjay5jYWxsKHRhcmdldCwgeCwgaWR4
LCBpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGV2ZXJ5QnkKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0
IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkIFVzZSBgaXNFdmVyeWAg
aW5zdGVhZAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGV2ZXJ5Qnk6IGFsaWFzTWV0aG9kKCdpc0V2ZXJ5Jyks
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGV2ZXJ5UHJv
cGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVy
dHkgdG8gdGVzdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBv
cHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEBkZXBy
ZWNhdGVkIFVzZSBgaXNFdmVyeWAgaW5zdGVhZAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtCb29sZWFufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGV2ZXJ5UHJvcGVy
dHk6IGFsaWFzTWV0aG9kKCdpc0V2ZXJ5JyksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGFzc2VkIHByb3BlcnR5IHJlc29sdmVz
IHRvIGB0cnVlYCBmb3IgYWxsIGl0ZW1zIGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBlbnVt
ZXJhYmxlLiBUaGlzIG1ldGhvZCBpcyBvZnRlbiBzaW1wbGVyL2Zhc3RlciB0aGFuIHVzaW5nIGEg
Y2FsbGJhY2suCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpc0V2ZXJ5Ci0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUg
dG8gdGVzdCBhZ2FpbnN0LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQot
ICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBpc0V2ZXJ5OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZXZlcnkoYXBwbHkodGhpcywgaXRlciwgYXJndW1lbnRzKSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJu
cyBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFueSBpdGVt
IGluIHRoZQotICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbi4gVGhpcyBjb3JyZXNwb25k
cyB3aXRoIHRoZSBgc29tZSgpYCBtZXRob2QgaW4gSmF2YVNjcmlwdCAxLjYuCi0KLSAgICAgICAg
ICAgICAgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0
aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRl
cnMgYXJlIG9wdGlvbmFsKToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgLSBgaXRlbWAgaXMg
dGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAt
IGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAg
ICAgICAgICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2Vs
Zi4KLQotICAgICAgICAgICAgICAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBgdHJ1ZWAgdG8g
aW5jbHVkZSB0aGUgaXRlbSBpbiB0aGUgcmVzdWx0cywgYGZhbHNlYAotICAgICAgICAgICAgICAg
ICAgICBvdGhlcndpc2UuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0
aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAot
ICAgICAgICAgICAgICAgICAgICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBgdGhpc2Agb24g
dGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQotICAgICAgICAgICAgICAgICAgICB0byBn
aXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4K
LQotICAgICAgICAgICAgICAgICAgICBVc2FnZSBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlb3BsZS5hbnkoaXNN
YW5hZ2VyKSkgeyBQYXljaGVja3MuYWRkQmlnZ2VyQm9udXMoKTsgfQotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFueQotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0
ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdl
dCBvYmplY3QgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59IGB0
cnVlYCBpZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkgaXRlbQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFueTogZnVuY3Rpb24oY2FsbGJhY2ss
IHRhcmdldCkgewotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcp
LAotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwb3BDdHgoKSwKLSAgICAgICAgICAgICAgICBm
b3VuZCA9IGZhbHNlLAotICAgICAgICAgICAgICAgIGxhc3QgPSBudWxsLAotICAgICAgICAgICAg
ICAgIG5leHQsIGlkeDsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuICYmICFmb3VuZDsg
aWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRoaXMubmV4dE9iamVjdChpZHgs
IGxhc3QsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGNhbGxiYWNrLmNh
bGwodGFyZ2V0LCBuZXh0LCBpZHgsIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBsYXN0ID0g
bmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXh0ID0gbGFzdCA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IHB1c2hDdHgoY29udGV4dCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGZvciBhbnkgaXRlbSBpbiB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgZW51bWVyYXRpb24uIFRoaXMgY29ycmVzcG9uZHMgd2l0aCB0aGUgYHNvbWUoKWAgbWV0aG9k
IGluIEphdmFTY3JpcHQgMS42LgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsYmFjayBt
ZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFs
bAotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCk6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0
ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJyZW50IGlu
ZGV4IGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGVudW1lcmFibGVg
IGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0KLSAgICAgICAgICAgICAgICAgICAg
SXQgc2hvdWxkIHJldHVybiB0aGUgYHRydWVgIHRvIGluY2x1ZGUgdGhlIGl0ZW0gaW4gdGhlIHJl
c3VsdHMsIGBmYWxzZWAKLSAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgotCi0gICAgICAg
ICAgICAgICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2Fu
IGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0
IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29v
ZCB3YXkKLSAgICAgICAgICAgICAgICAgICAgdG8gZ2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9u
IGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmplY3QuCi0KLSAgICAgICAgICAgICAgICAgICAgVXNh
Z2UgRXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwZW9wbGUuc29tZShpc01hbmFnZXIpKSB7IFBheWNoZWNrcy5hZGRC
aWdnZXJCb251cygpOyB9Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2Qgc29tZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcGFzc2VkIGZ1bmN0
aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkgaXRlbQotICAgICAgICAgICAgICAgICAgICBAZGVw
cmVjYXRlZCBVc2UgYGFueWAgaW5zdGVhZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHNvbWU6IGFsaWFzTWV0aG9kKCdhbnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgcHJvcGVydHkgcmVzb2x2
ZXMgdG8gYHRydWVgIGZvciBhbnkgaXRlbSBpbgotICAgICAgICAgICAgICAgICAgICB0aGUgZW51
bWVyYWJsZS4gVGhpcyBtZXRob2QgaXMgb2Z0ZW4gc2ltcGxlci9mYXN0ZXIgdGhhbiB1c2luZyBh
IGNhbGxiYWNrLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaXNBbnkKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0
byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59IGB0
cnVlYCBpZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkgaXRlbQot
ICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBpc0FueTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmFueShhcHBseSh0aGlzLCBpdGVyLCBhcmd1bWVudHMpKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFu
eUJ5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5
IHRvIHRlc3QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0
aW9uYWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBm
b3IgYW55IGl0ZW0KLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBpc0FueWAg
aW5zdGVhZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFueUJ5OiBhbGlhc01l
dGhvZCgnaXNBbnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2Qgc29tZVByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBr
ZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0LgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlvbiBy
ZXR1cm5zIGB0cnVlYCBmb3IgYW55IGl0ZW0KLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0
ZWQgVXNlIGBpc0FueWAgaW5zdGVhZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHNvbWVQcm9wZXJ0eTogYWxpYXNNZXRob2QoJ2lzQW55JyksCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgY29tYmluZSB0aGUgdmFsdWVzIG9mIHRoZSBl
bnVtZXJhdG9yIGludG8gYSBzaW5nbGUgdmFsdWUuIEl0Ci0gICAgICAgICAgICAgICAgICAgIGlz
IGEgdXNlZnVsIHdheSB0byBjb2xsZWN0IGEgc3VtbWFyeSB2YWx1ZSBmcm9tIGFuIGVudW1lcmF0
aW9uLiBUaGlzCi0gICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBgcmVkdWNl
KClgIG1ldGhvZCBkZWZpbmVkIGluIEphdmFTY3JpcHQgMS44LgotCi0gICAgICAgICAgICAgICAg
ICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxv
d2luZyBzaWduYXR1cmUgKGFsbAotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFyZSBv
cHRpb25hbCk6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihwcmV2aW91c1ZhbHVlLCBpdGVtLCBpbmRleCwgZW51bWVyYWJs
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIC0gYHBy
ZXZpb3VzVmFsdWVgIGlzIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbGFzdCBjYWxsIHRvIHRo
ZSBpdGVyYXRvci4KLSAgICAgICAgICAgICAgICAgICAgLSBgaXRlbWAgaXMgdGhlIGN1cnJlbnQg
aXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBpbmRleGAgaXMg
dGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
LSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2VsZi4KLQotICAgICAg
ICAgICAgICAgICAgICBSZXR1cm4gdGhlIG5ldyBjdW11bGF0aXZlIHZhbHVlLgotCi0gICAgICAg
ICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBjYWxsYmFjayB5b3UgY2FuIGFsc28gcGFz
cyBhbiBgaW5pdGlhbFZhbHVlYC4gQW4gZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBi
ZSByYWlzZWQgaWYgeW91IGRvIG5vdCBwYXNzIGFuIGluaXRpYWwgdmFsdWUgYW5kIHRoZSBlbnVt
ZXJhdG9yIGlzCi0gICAgICAgICAgICAgICAgICAgIGVtcHR5LgotCi0gICAgICAgICAgICAgICAg
ICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIG90aGVyIG1ldGhvZHMsIHRoaXMgbWV0aG9kIGRvZXMg
bm90IGFsbG93IHlvdSB0bwotICAgICAgICAgICAgICAgICAgICBwYXNzIGEgdGFyZ2V0IG9iamVj
dCB0byBzZXQgYXMgdGhpcyBmb3IgdGhlIGNhbGxiYWNrLiBJdCdzIHBhcnQgb2YgdGhlCi0gICAg
ICAgICAgICAgICAgICAgIHNwZWMuIFNvcnJ5LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcmVkdWNlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNr
IFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBpbml0aWFsVmFsdWUgSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHJlZHVjZQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcmVkdWNlclByb3BlcnR5IGludGVybmFsIHVzZSBv
bmx5LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSByZWR1Y2VkIHZh
bHVlLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlZHVjZTogZnVuY3Rpb24o
Y2FsbGJhY2ssIGluaXRpYWxWYWx1ZSwgcmVkdWNlclByb3BlcnR5KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIHJldCA9IGluaXRpYWxWYWx1ZTsKLQotICAgICAgICAgICAgICAgIHRoaXMu
Zm9yRWFjaChmdW5jdGlvbihpdGVtLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IGNh
bGxiYWNrKHJldCwgaXRlbSwgaSwgdGhpcywgcmVkdWNlclByb3BlcnR5KTsKLSAgICAgICAgICAg
ICAgICB9LCB0aGlzKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW52b2tlcyB0aGUg
bmFtZWQgbWV0aG9kIG9uIGV2ZXJ5IG9iamVjdCBpbiB0aGUgcmVjZWl2ZXIgdGhhdAotICAgICAg
ICAgICAgICAgICAgICBpbXBsZW1lbnRzIGl0LiBUaGlzIG1ldGhvZCBjb3JyZXNwb25kcyB0byB0
aGUgaW1wbGVtZW50YXRpb24gaW4KLSAgICAgICAgICAgICAgICAgICAgUHJvdG90eXBlIDEuNi4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGludm9rZQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gbWV0aG9kTmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0Li4ufSBhcmdzIG9wdGlvbmFsIGFyZ3VtZW50
cyB0byBwYXNzIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBy
ZXR1cm4gdmFsdWVzIGZyb20gY2FsbGluZyBpbnZva2UuCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgaW52b2tlOiBmdW5jdGlvbihtZXRob2ROYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGFyZ3MsIHJldCA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA+IDEpIAotICAgICAgICAgICAgICAgICAgICBhcmdzID0gYV9zbGljZS5jYWxs
KGFyZ3VtZW50cywgMSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24o
eCwgaWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB4ICYmIHhbbWV0aG9k
TmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgbWV0
aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXRbaWR4XSA9IGFyZ3MgPyBhcHBseSh4
LCBtZXRob2QsIGFyZ3MpIDogeFttZXRob2ROYW1lXSgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFNpbXBseSBjb252ZXJ0cyB0aGUgZW51bWVyYWJsZSBpbnRvIGEgZ2VudWluZSBhcnJheS4gVGhl
IG9yZGVyIGlzIG5vdAotICAgICAgICAgICAgICAgICAgICBndWFyYW50ZWVkLiBDb3JyZXNwb25k
cyB0byB0aGUgbWV0aG9kIGltcGxlbWVudGVkIGJ5IFByb3RvdHlwZS4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIHRvQXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJy
YXl9IHRoZSBlbnVtZXJhYmxlIGFzIGFuIGFycmF5LgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciByZXQg
PSBFbWJlci5BKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG8sIGlk
eCkgewotICAgICAgICAgICAgICAgICAgICByZXRbaWR4XSA9IG87Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgY29weSBvZiB0aGUgYXJy
YXkgd2l0aCBhbGwgbnVsbCBhbmQgdW5kZWZpbmVkIGVsZW1lbnRzIHJlbW92ZWQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgYXJy
ID0gWyJhIiwgbnVsbCwgImMiLCB1bmRlZmluZWRdOwotICAgICAgICAgICAgICAgICAgICBhcnIu
Y29tcGFjdCgpOyAgLy8gWyJhIiwgImMiXQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGNvbXBhY3QKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7QXJyYXl9IHRoZSBhcnJheSB3aXRob3V0IG51bGwgYW5kIHVuZGVmaW5lZCBlbGVtZW50
cy4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb21wYWN0OiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGw7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgUmV0dXJucyBhIG5ldyBlbnVtZXJhYmxlIHRoYXQgZXhjbHVkZXMgdGhlIHBhc3NlZCB2
YWx1ZS4gVGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gcmV0
dXJucyBhbiBhcnJheSByZWdhcmRsZXNzIG9mIHRoZSByZWNlaXZlciB0eXBlIHVubGVzcwotICAg
ICAgICAgICAgICAgICAgICB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgY29udGFpbiB0aGUgdmFsdWUu
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICB2YXIgYXJyID0gWyJhIiwgImIiLCAiYSIsICJjIl07Ci0gICAgICAgICAgICAgICAgICAgIGFy
ci53aXRob3V0KCJhIik7ICAvLyBbImIiLCAiYyJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2l0aG91dAotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1i
ZXIuRW51bWVyYWJsZX0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aXRob3V0
OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWlucyh2
YWx1ZSkpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gbm90aGluZyB0byBk
bwotICAgICAgICAgICAgICAgIHZhciByZXQgPSBFbWJlci5BKCk7Ci0gICAgICAgICAgICAgICAg
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGsgIT09
IHZhbHVlKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldFtyZXQubGVuZ3RoXSA9IGs7Ci0g
ICAgICAgICAgICAgICAgfSkgOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQgOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMg
YSBuZXcgZW51bWVyYWJsZSB0aGF0IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbHVlcy4gVGhlIGRl
ZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBhcnJh
eSByZWdhcmRsZXNzIG9mIHRoZSByZWNlaXZlciB0eXBlLgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsiYSIsICJhIiwg
ImIiLCAiYiJdOwotICAgICAgICAgICAgICAgICAgICBhcnIudW5pcSgpOyAgLy8gWyJhIiwgImIi
XQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IHVuaXEKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuRW51bWVyYWJsZX0KLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB1bmlxOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgcmV0ID0gRW1iZXIuQSgpOwotICAgICAgICAgICAgICAgIHRoaXMuZm9y
RWFjaChmdW5jdGlvbihrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKHJldCwg
aykgPCAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGspOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSB3aWxs
IHRyaWdnZXIgYW55dGltZSB0aGUgZW51bWVyYWJsZSdzIGNvbnRlbnQgY2hhbmdlcy4KLSAgICAg
ICAgICAgICAgICAgICAgWW91IGNhbiBvYnNlcnZlIHRoaXMgcHJvcGVydHkgdG8gYmUgbm90aWZp
ZWQgb2YgY2hhbmdlcyB0byB0aGUgZW51bWVyYWJsZXMKLSAgICAgICAgICAgICAgICAgICAgY29u
dGVudC4KLQotICAgICAgICAgICAgICAgICAgICBGb3IgcGxhaW4gZW51bWVyYWJsZXMsIHRoaXMg
cHJvcGVydHkgaXMgcmVhZCBvbmx5LiBgQXJyYXlgIG92ZXJyaWRlcwotICAgICAgICAgICAgICAg
ICAgICB0aGlzIG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgW10KLSAg
ICAgICAgICAgICAgICAgICAgQHR5cGUgQXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB0aGlzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgJ1tdJzogY29tcHV0ZWQo
ZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIEVOVU1FUkFC
TEUgT0JTRVJWRVJTCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJzIGFuIGVudW1lcmFibGUgb2JzZXJ2ZXIuIE11c3QgaW1wbGVt
ZW50IGBFbWJlci5FbnVtZXJhYmxlT2JzZXJ2ZXJgCi0gICAgICAgICAgICAgICAgICAgIG1peGlu
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWRkRW51bWVyYWJsZU9ic2VydmVyCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtIYXNofSBbb3B0c10KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB0
aGlzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWRkRW51bWVyYWJsZU9ic2Vy
dmVyOiBmdW5jdGlvbih0YXJnZXQsIG9wdHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgd2lsbENo
YW5nZSA9IChvcHRzICYmIG9wdHMud2lsbENoYW5nZSkgfHwgJ2VudW1lcmFibGVXaWxsQ2hhbmdl
JywKLSAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSAob3B0cyAmJiBvcHRzLmRpZENoYW5nZSkg
fHwgJ2VudW1lcmFibGVEaWRDaGFuZ2UnOwotCi0gICAgICAgICAgICAgICAgdmFyIGhhc09ic2Vy
dmVycyA9IGdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycpOwotICAgICAgICAgICAg
ICAgIGlmICghaGFzT2JzZXJ2ZXJzKSAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxs
Q2hhbmdlKHRoaXMsICdoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAgICAgICAg
YWRkTGlzdGVuZXIodGhpcywgJ0BlbnVtZXJhYmxlOmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5n
ZSk7Ci0gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIodGhpcywgJ0BlbnVtZXJhYmxlOmNoYW5n
ZScsIHRhcmdldCwgZGlkQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc09ic2VydmVy
cykgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdoYXNFbnVt
ZXJhYmxlT2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyBh
IHJlZ2lzdGVyZWQgZW51bWVyYWJsZSBvYnNlcnZlci4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIHJlbW92ZUVudW1lcmFibGVPYnNlcnZlcgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gW29w
dHNdCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gdGhpcwotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJlbW92ZUVudW1lcmFibGVPYnNlcnZlcjogZnVuY3Rpb24odGFyZ2V0
LCBvcHRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHdpbGxDaGFuZ2UgPSAob3B0cyAmJiBvcHRz
LndpbGxDaGFuZ2UpIHx8ICdlbnVtZXJhYmxlV2lsbENoYW5nZScsCi0gICAgICAgICAgICAgICAg
ZGlkQ2hhbmdlID0gKG9wdHMgJiYgb3B0cy5kaWRDaGFuZ2UpIHx8ICdlbnVtZXJhYmxlRGlkQ2hh
bmdlJzsKLQotICAgICAgICAgICAgICAgIHZhciBoYXNPYnNlcnZlcnMgPSBnZXQodGhpcywgJ2hh
c0VudW1lcmFibGVPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJz
KSAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdoYXNFbnVt
ZXJhYmxlT2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIodGhpcywg
J0BlbnVtZXJhYmxlOmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlTGlzdGVuZXIodGhpcywgJ0BlbnVtZXJhYmxlOmNoYW5nZScsIHRhcmdldCwgZGlk
Q2hhbmdlKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKSAKLSAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMn
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBCZWNvbWVzIHRydWUgd2hlbmV2ZXIgdGhl
IGFycmF5IGN1cnJlbnRseSBoYXMgb2JzZXJ2ZXJzIHdhdGNoaW5nIGNoYW5nZXMKLSAgICAgICAg
ICAgICAgICAgICAgb24gdGhlIGFycmF5LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEJvb2xl
YW4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoYXNFbnVtZXJhYmxlT2JzZXJ2
ZXJzOiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFzTGlz
dGVuZXJzKHRoaXMsICdAZW51bWVyYWJsZTpjaGFuZ2UnKSB8fCBoYXNMaXN0ZW5lcnModGhpcywg
J0BlbnVtZXJhYmxlOmJlZm9yZScpOwotICAgICAgICAgICAgfSksCi0KLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEludm9rZSB0aGlzIG1ldGhvZCBqdXN0IGJlZm9yZSB0
aGUgY29udGVudHMgb2YgeW91ciBlbnVtZXJhYmxlIHdpbGwKLSAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlLiBZb3UgY2FuIGVpdGhlciBvbWl0IHRoZSBwYXJhbWV0ZXJzIGNvbXBsZXRlbHkgb3Ig
cGFzcyB0aGUgb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICB0byBiZSByZW1vdmVkIG9yIGFk
ZGVkIGlmIGF2YWlsYWJsZSBvciBqdXN0IGEgY291bnQuCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBlbnVtZXJhYmxlQ29udGVudFdpbGxDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfE51bWJlcn0gcmVtb3ZpbmcgQW4gZW51bWVyYWJsZSBv
ZiB0aGUgb2JqZWN0cyB0bwotICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgb3IgdGhl
IG51bWJlciBvZiBpdGVtcyB0byBiZSByZW1vdmVkLgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0VtYmVyLkVudW1lcmFibGV8TnVtYmVyfSBhZGRpbmcgQW4gZW51bWVyYWJsZSBvZiB0aGUg
b2JqZWN0cyB0byBiZQotICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIG9yIHRoZSBudW1iZXIg
b2YgaXRlbXMgdG8gYmUgYWRkZWQuCi0gICAgICAgICAgICAgICAgICAgIEBjaGFpbmFibGUKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbnVtZXJhYmxlQ29udGVudFdpbGxDaGFu
Z2U6IGZ1bmN0aW9uKHJlbW92aW5nLCBhZGRpbmcpIHsKLQotICAgICAgICAgICAgICAgIHZhciBy
ZW1vdmVDbnQsIGFkZENudCwgaGFzRGVsdGE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoJ251bWJl
cicgPT09IHR5cGVvZiByZW1vdmluZykgCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNudCA9
IHJlbW92aW5nOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbW92aW5nKSAKLSAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlQ250ID0gZ2V0KHJlbW92aW5nLCAnbGVuZ3RoJyk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ250ID0gcmVtb3Zpbmcg
PSAtMTsKLQotICAgICAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGFkZGluZykg
Ci0gICAgICAgICAgICAgICAgICAgIGFkZENudCA9IGFkZGluZzsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChhZGRpbmcpIAotICAgICAgICAgICAgICAgICAgICBhZGRDbnQgPSBnZXQoYWRkaW5n
LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAg
YWRkQ250ID0gYWRkaW5nID0gLTE7Ci0KLSAgICAgICAgICAgICAgICBoYXNEZWx0YSA9IGFkZENu
dCA8IDAgfHwgcmVtb3ZlQ250IDwgMCB8fCBhZGRDbnQgLSByZW1vdmVDbnQgIT09IDA7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAocmVtb3ZpbmcgPT09IC0xKSAKLSAgICAgICAgICAgICAgICAgICAg
cmVtb3ZpbmcgPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChhZGRpbmcgPT09IC0xKSAKLSAg
ICAgICAgICAgICAgICAgICAgYWRkaW5nID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIHByb3Bl
cnR5V2lsbENoYW5nZSh0aGlzLCAnW10nKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRGVsdGEp
IAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xlbmd0aCcp
OwotICAgICAgICAgICAgICAgIHNlbmRFdmVudCh0aGlzLCAnQGVudW1lcmFibGU6YmVmb3JlJywg
W3RoaXMsIHJlbW92aW5nLCBhZGRpbmddKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEludm9rZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBjb250ZW50cyBvZiB5b3VyIGVudW1lcmFibGUg
aGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBub3RpZnkgYW55IG9i
c2VydmVycyB3YXRjaGluZyBmb3IgY29udGVudCBjaGFuZ2VzLiBJZiB5b3UgYXJlCi0gICAgICAg
ICAgICAgICAgICAgIGltcGxlbWVudGluZyBhbiBvcmRlcmVkIGVudW1lcmFibGUgKHN1Y2ggYXMg
YW4gYXJyYXkpLCBhbHNvIHBhc3MgdGhlCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0IGFuZCBl
bmQgdmFsdWVzIHdoZXJlIHRoZSBjb250ZW50IGNoYW5nZWQgc28gdGhhdCBpdCBjYW4gYmUgdXNl
ZCB0bwotICAgICAgICAgICAgICAgICAgICBub3RpZnkgcmFuZ2Ugb2JzZXJ2ZXJzLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfE51bWJlcn0gcmVtb3Zpbmcg
QW4gZW51bWVyYWJsZSBvZiB0aGUgb2JqZWN0cyB0bwotICAgICAgICAgICAgICAgICAgICAgIGJl
IHJlbW92ZWQgb3IgdGhlIG51bWJlciBvZiBpdGVtcyB0byBiZSByZW1vdmVkLgotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV8TnVtYmVyfSBhZGRpbmcgIEFuIGVu
dW1lcmFibGUgb2YgdGhlIG9iamVjdHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICBiZSBhZGRl
ZCBvciB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGFkZGVkLgotICAgICAgICAgICAgICAgICAg
ICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZW51bWVyYWJs
ZUNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKHJlbW92aW5nLCBhZGRpbmcpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcmVtb3ZlQ250LCBhZGRDbnQsIGhhc0RlbHRhOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgcmVtb3ZpbmcpIAotICAgICAgICAgICAgICAgICAg
ICByZW1vdmVDbnQgPSByZW1vdmluZzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW1vdmlu
ZykgCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNudCA9IGdldChyZW1vdmluZywgJ2xlbmd0
aCcpOwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNu
dCA9IHJlbW92aW5nID0gLTE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5
cGVvZiBhZGRpbmcpIAotICAgICAgICAgICAgICAgICAgICBhZGRDbnQgPSBhZGRpbmc7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYWRkaW5nKSAKLSAgICAgICAgICAgICAgICAgICAgYWRkQ250
ID0gZ2V0KGFkZGluZywgJ2xlbmd0aCcpOwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAg
ICAgICAgICAgICAgIGFkZENudCA9IGFkZGluZyA9IC0xOwotCi0gICAgICAgICAgICAgICAgaGFz
RGVsdGEgPSBhZGRDbnQgPCAwIHx8IHJlbW92ZUNudCA8IDAgfHwgYWRkQ250IC0gcmVtb3ZlQ250
ICE9PSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlbW92aW5nID09PSAtMSkgCi0gICAgICAg
ICAgICAgICAgICAgIHJlbW92aW5nID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoYWRkaW5n
ID09PSAtMSkgCi0gICAgICAgICAgICAgICAgICAgIGFkZGluZyA9IG51bGw7Ci0KLSAgICAgICAg
ICAgICAgICBzZW5kRXZlbnQodGhpcywgJ0BlbnVtZXJhYmxlOmNoYW5nZScsIFt0aGlzLCByZW1v
dmluZywgYWRkaW5nXSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RlbHRhKSAKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2xlbmd0aCcpOwotICAgICAgICAg
ICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdbXScpOwotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMgOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIENvbnZlcnRzIHRoZSBlbnVtZXJhYmxlIGludG8gYW4gYXJyYXkgYW5kIHNv
cnRzIGJ5IHRoZSBrZXlzCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgYXJn
dW1lbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IG1heSBwcm92aWRlIG11bHRpcGxlIGFy
Z3VtZW50cyB0byBzb3J0IGJ5IG11bHRpcGxlIHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBzb3J0QnkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IHByb3BlcnR5IG5hbWUocykgdG8gc29ydCBvbgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtBcnJheX0gVGhlIHNvcnRlZCBhcnJheS4KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEu
Mi4wCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzb3J0Qnk6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBzb3J0S2V5cyA9IGFyZ3VtZW50czsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydEtleXMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBzb3J0S2V5c1tpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BBID0gZ2V0KGEsIGtleSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wQiA9IGdldChiLCBrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cmV0dXJuIDEgb3IgLTEgZWxzZSBjb250aW51ZSB0byB0aGUgbmV4dCBzb3J0S2V5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY29tcGFyZVZhbHVlID0gY29tcGFyZShwcm9wQSwgcHJvcEIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVWYWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlVmFsdWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCIsCi0gICAg
WyJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5k
ZW5jeTFfXy5NaXhpbjsKLSAgICAgICAgdmFyIGFkZExpc3RlbmVyID0gX19kZXBlbmRlbmN5Ml9f
LmFkZExpc3RlbmVyOwotICAgICAgICB2YXIgcmVtb3ZlTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3ky
X18ucmVtb3ZlTGlzdGVuZXI7Ci0gICAgICAgIHZhciBoYXNMaXN0ZW5lcnMgPSBfX2RlcGVuZGVu
Y3kyX18uaGFzTGlzdGVuZXJzOwotICAgICAgICB2YXIgc2VuZEV2ZW50ID0gX19kZXBlbmRlbmN5
Ml9fLnNlbmRFdmVudDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyBtaXhpbiBhbGxvd3MgZm9yIEVtYmVyIG9i
amVjdHMgdG8gc3Vic2NyaWJlIHRvIGFuZCBlbWl0IGV2ZW50cy4KLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0
ZW5kKEVtYmVyLkV2ZW50ZWQsIHsKLSAgICAgICAgICAgICAgICBncmVldDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAvLyAuLi4KLSAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dl
cignZ3JlZXQnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIHZhciBwZXJzb24gPSBBcHAuUGVyc29uLmNyZWF0ZSgpOwotCi0gICAgICAgICAg
ICAgIHBlcnNvbi5vbignZ3JlZXQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmxvZygnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcpOwotICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICBwZXJzb24uZ3JlZXQoKTsKLQotICAgICAgICAgICAgICAvLyBvdXRwdXRz
OiAnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgWW91IGNhbiBhbHNvIGNoYWluIG11bHRpcGxlIGV2ZW50IHN1YnNjcmlwdGlvbnM6Ci0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBwZXJzb24ub24oJ2dy
ZWV0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ091ciBwZXJz
b24gaGFzIGdyZWV0ZWQnKTsKLSAgICAgICAgICAgICAgfSkub25lKCdncmVldCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPZmZlciBvbmUtdGltZSBzcGVjaWFs
Jyk7Ci0gICAgICAgICAgICAgIH0pLm9mZignZXZlbnQnLCB0aGlzLCBmb3JnZXRUaGlzKTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEV2ZW50ZWQKLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0
c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoewotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICBTdWJzY3JpYmVzIHRvIGEgbmFtZWQgZXZlbnQgd2l0aCBnaXZlbiBmdW5j
dGlvbi4KLQotICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICBwZXJzb24ub24oJ2RpZExvYWQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgIC8vIGZpcmVkIG9uY2UgdGhlIHBlcnNvbiBoYXMgbG9hZGVkCi0gICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICBBbiBv
cHRpb25hbCB0YXJnZXQgY2FuIGJlIHBhc3NlZCBpbiBhcyB0aGUgMm5kIGFyZ3VtZW50IHRoYXQg
d2lsbAotICAgICAgICAgICAgICAgICAgIGJlIHNldCBhcyB0aGUgInRoaXMiIGZvciB0aGUgY2Fs
bGJhY2suIFRoaXMgaXMgYSBnb29kIHdheSB0byBnaXZlIHlvdXIKLSAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIG9iamVjdCB0cmlnZ2VyaW5nIHRoZSBldmVudC4gV2hl
biB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzIHVzZWQgdGhlIGNh
bGxiYWNrIGJlY29tZXMgdGhlIHRoaXJkIGFyZ3VtZW50LgotCi0gICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBvbgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBu
YW1lIG9mIHRoZSBldmVudAotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSBUaGUgInRoaXMiIGJpbmRpbmcgZm9yIHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZCBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4gdGhpcwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIG9uOiBmdW5jdGlvbihuYW1lLCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAg
ICAgIGFkZExpc3RlbmVyKHRoaXMsIG5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBTdWJzY3JpYmVzIGEgZnVuY3Rpb24gdG8gYSBuYW1lZCBldmVudCBh
bmQgdGhlbiBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24KLSAgICAgICAgICAgICAgICAgICAgYWZ0
ZXIgdGhlIGZpcnN0IHRpbWUgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4gSXQgaXMgZ29vZCB0byB1
c2UgYGBvbmVgYCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIHlvdSBvbmx5IGNhcmUgYWJvdXQg
dGhlIGZpcnN0IHRpbWUgYW4gZXZlbnQgaGFzIHRha2VuIHBsYWNlLgotCi0gICAgICAgICAgICAg
ICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gb3B0aW9uYWwgMm5kIGFyZ3VtZW50IHRoYXQg
d2lsbCBiZWNvbWUgdGhlICJ0aGlzIgotICAgICAgICAgICAgICAgICAgICB2YWx1ZSBmb3IgdGhl
IGNhbGxiYWNrLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHBhc3NlZCB0aGVuIHRoZSAzcmQgYXJndW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgYmVjb21lcyB0aGUgZnVuY3Rpb24uCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBvbmUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgInRoaXMiIGJpbmRpbmcgZm9yIHRoZSBjYWxsYmFjawot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2QgVGhlIGNhbGxiYWNr
IHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB0aGlzCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgb25lOiBmdW5jdGlvbihuYW1lLCB0YXJnZXQsIG1ldGhv
ZCkgewotICAgICAgICAgICAgICAgIGlmICghbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1ldGhvZCA9IHRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcih0aGlzLCBuYW1l
LCB0YXJnZXQsIG1ldGhvZCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVHJp
Z2dlcnMgYSBuYW1lZCBldmVudCBmb3IgdGhlIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1l
bnRzCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8g
dGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzdWJzY3JpYmVkIHRvIHRoZQotICAgICAgICAgICAgICAg
ICAgICBldmVudC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgIHBlcnNvbi5vbignZGlkRWF0JywgZnVuY3Rpb24oZm9vZCkgewotICAgICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwZXJzb24gYXRlIHNvbWUgJyArIGZvb2QpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBwZXJzb24udHJp
Z2dlcignZGlkRWF0JywgJ2Jyb2Njb2xpJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb3V0
cHV0czogcGVyc29uIGF0ZSBzb21lIGJyb2Njb2xpCi0gICAgICAgICAgICAgICAgICAgIGBgYAot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRyaWdnZXIKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50Ci0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7T2JqZWN0Li4ufSBhcmdzIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNz
IG9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24o
bmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwot
ICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCAtIDEpOwotCi0gICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBzZW5kRXZlbnQodGhpcywgbmFtZSwgYXJncyk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FuY2VscyBz
dWJzY3JpcHRpb24gZm9yIGdpdmVuIG5hbWUsIHRhcmdldCwgYW5kIG1ldGhvZC4KLQotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIG9mZgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IHRhcmdldCBUaGUgdGFyZ2V0IG9mIHRoZSBzdWJzY3JpcHRpb24KLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIFRoZSBmdW5jdGlvbiBvZiB0
aGUgc3Vic2NyaXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gdGhpcwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9mZjogZnVuY3Rpb24obmFtZSwgdGFyZ2V0LCBt
ZXRob2QpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcih0aGlzLCBuYW1lLCB0YXJn
ZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBp
ZiBvYmplY3QgaGFzIGFueSBzdWJzY3JpcHRpb25zIGZvciBuYW1lZCBldmVudC4KLQotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGhhcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7Qm9vbGVhbn0gZG9lcyB0aGUgb2JqZWN0IGhhdmUgYSBzdWJzY3JpcHRpb24gZm9yIGV2
ZW50Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGhhczogZnVuY3Rpb24obmFt
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBoYXNMaXN0ZW5lcnModGhpcywgbmFtZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVu
dGltZS9taXhpbnMvZnJlZXphYmxlIiwKLSAgICBbImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVy
LW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIE1peGluID0gX19k
ZXBlbmRlbmN5MV9fLk1peGluOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdl
dDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIFRoZSBgRW1iZXIuRnJlZXphYmxlYCBtaXhpbiBpbXBsZW1lbnRzIHNv
bWUgYmFzaWMgbWV0aG9kcyBmb3IgbWFya2luZyBhbgotICAgICAgICAgICAgICBvYmplY3QgYXMg
ZnJvemVuLiBPbmNlIGFuIG9iamVjdCBpcyBmcm96ZW4gaXQgc2hvdWxkIGJlIHJlYWQgb25seS4g
Tm8gY2hhbmdlcwotICAgICAgICAgICAgICBtYXkgYmUgbWFkZSB0aGUgaW50ZXJuYWwgc3RhdGUg
b2YgdGhlIG9iamVjdC4KLQotICAgICAgICAgICAgICAjIyBFbmZvcmNlbWVudAotCi0gICAgICAg
ICAgICAgIFRvIGZ1bGx5IHN1cHBvcnQgZnJlZXppbmcgaW4geW91ciBzdWJjbGFzcywgeW91IG11
c3QgaW5jbHVkZSB0aGlzIG1peGluIGFuZAotICAgICAgICAgICAgICBvdmVycmlkZSBhbnkgbWV0
aG9kIHRoYXQgbWlnaHQgYWx0ZXIgYW55IHByb3BlcnR5IG9uIHRoZSBvYmplY3QgdG8gaW5zdGVh
ZAotICAgICAgICAgICAgICByYWlzZSBhbiBleGNlcHRpb24uIFlvdSBjYW4gY2hlY2sgdGhlIHN0
YXRlIG9mIGFuIG9iamVjdCBieSBjaGVja2luZyB0aGUKLSAgICAgICAgICAgICAgYGlzRnJvemVu
YCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBBbHRob3VnaCBmdXR1cmUgdmVyc2lvbnMgb2Yg
SmF2YVNjcmlwdCBtYXkgc3VwcG9ydCBsYW5ndWFnZS1sZXZlbCBmcmVlemluZwotICAgICAgICAg
ICAgICBvYmplY3Qgb2JqZWN0cywgdGhhdCBpcyBub3QgdGhlIGNhc2UgdG9kYXkuIEV2ZW4gaWYg
YW4gb2JqZWN0IGlzIGZyZWV6YWJsZSwKLSAgICAgICAgICAgICAgaXQgaXMgc3RpbGwgdGVjaG5p
Y2FsbHkgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBvYmplY3QsIGV2ZW4gdGhvdWdoIGl0IGNvdWxk
Ci0gICAgICAgICAgICAgIGJyZWFrIG90aGVyIHBhcnRzIG9mIHlvdXIgYXBwbGljYXRpb24gdGhh
dCBkbyBub3QgZXhwZWN0IGEgZnJvemVuIG9iamVjdCB0bwotICAgICAgICAgICAgICBjaGFuZ2Uu
IEl0IGlzLCB0aGVyZWZvcmUsIHZlcnkgaW1wb3J0YW50IHRoYXQgeW91IGFsd2F5cyByZXNwZWN0
IHRoZQotICAgICAgICAgICAgICBgaXNGcm96ZW5gIHByb3BlcnR5IG9uIGFsbCBmcmVlemFibGUg
b2JqZWN0cy4KLQotICAgICAgICAgICAgICAjIyBFeGFtcGxlIFVzYWdlCi0KLSAgICAgICAgICAg
ICAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgYSBzaW1wbGUgb2JqZWN0IHRoYXQgaW1wbGVtZW50
IHRoZSBgRW1iZXIuRnJlZXphYmxlYAotICAgICAgICAgICAgICBwcm90b2NvbC4KLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIENvbnRhY3QgPSBFbWJlci5PYmpl
Y3QuZXh0ZW5kKEVtYmVyLkZyZWV6YWJsZSwgewotICAgICAgICAgICAgICAgIGZpcnN0TmFtZTog
bnVsbCwKLSAgICAgICAgICAgICAgICBsYXN0TmFtZTogbnVsbCwKLQotICAgICAgICAgICAgICAg
IC8vIHN3YXBzIHRoZSBuYW1lcwotICAgICAgICAgICAgICAgIHN3YXBOYW1lczogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2lzRnJvemVuJykpIHRocm93IEVt
YmVyLkZST1pFTl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLmdldCgn
Zmlyc3ROYW1lJyk7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnNldCgnZmlyc3ROYW1lJywgdGhp
cy5nZXQoJ2xhc3ROYW1lJykpOwotICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2xhc3ROYW1l
JywgdG1wKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBjID0gQ29udGFjdC5jcmVh
dGUoeyBmaXJzdE5hbWU6ICJKb2huIiwgbGFzdE5hbWU6ICJEb2UiIH0pOwotICAgICAgICAgICAg
ICBjLnN3YXBOYW1lcygpOyAgLy8gcmV0dXJucyBjCi0gICAgICAgICAgICAgIGMuZnJlZXplKCk7
Ci0gICAgICAgICAgICAgIGMuc3dhcE5hbWVzKCk7ICAvLyBFWENFUFRJT04KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMgQ29weWluZwotCi0gICAgICAgICAgICAgIFVzdWFs
bHkgdGhlIGBFbWJlci5GcmVlemFibGVgIHByb3RvY29sIGlzIGltcGxlbWVudGVkIGluIGNvb3Bl
cmF0aW9uIHdpdGggdGhlCi0gICAgICAgICAgICAgIGBFbWJlci5Db3B5YWJsZWAgcHJvdG9jb2ws
IHdoaWNoIGRlZmluZXMgYSBgZnJvemVuQ29weSgpYCBtZXRob2QgdGhhdCB3aWxsCi0gICAgICAg
ICAgICAgIHJldHVybiBhIGZyb3plbiBvYmplY3QsIGlmIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0
aGlzIG1ldGhvZCBhcyB3ZWxsLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBGcmVlemFibGUKLSAg
ICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc2luY2UgRW1iZXIg
MC45Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRnJlZXphYmxlID0gTWl4aW4uY3JlYXRl
KHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNldCB0byBgdHJ1ZWAg
d2hlbiB0aGUgb2JqZWN0IGlzIGZyb3plbi4gVXNlIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0Ci0g
ICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgeW91ciBvYmplY3QgaXMgZnJvemVuIG9yIG5vdC4K
LQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgaXNGcm96ZW4KLSAgICAgICAgICAgICAg
ICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlz
RnJvemVuOiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEZy
ZWV6ZXMgdGhlIG9iamVjdC4gT25jZSB0aGlzIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgdGhlIG9i
amVjdCBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgbm8gbG9uZ2VyIGFsbG93IGFueSBwcm9w
ZXJ0aWVzIHRvIGJlIGVkaXRlZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZyZWV6
ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgZnJlZXplOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZ2V0KHRoaXMsICdpc0Zyb3plbicpKSAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdpc0Zyb3plbicsIHRydWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfQotCi0gICAgICAg
IH0pOwotICAgICAgICBfX2V4cG9ydHNfXy5GcmVlemFibGUgPSBGcmVlemFibGU7Ci0gICAgICAg
IHZhciBGUk9aRU5fRVJST1IgPSAiRnJvemVuIG9iamVjdCBjYW5ub3QgYmUgbW9kaWZpZWQuIjsK
LSAgICAgICAgX19leHBvcnRzX18uRlJPWkVOX0VSUk9SID0gRlJPWkVOX0VSUk9SOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsCi0gICAg
WyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0Iiwg
ImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL21p
eGluIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5z
L211dGFibGVfZW51bWVyYWJsZSIsICJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlIiwg
ImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJf
XywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19k
ZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAg
ICAgICAgKi8KLQotCi0gICAgICAgIC8vIHJlcXVpcmUoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2Fy
cmF5Jyk7Ci0gICAgICAgIC8vIHJlcXVpcmUoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVf
ZW51bWVyYWJsZScpOwotCi0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gQ09OU1RBTlRTCi0gICAg
ICAgIC8vCi0KLSAgICAgICAgdmFyIE9VVF9PRl9SQU5HRV9FWENFUFRJT04gPSAiSW5kZXggb3V0
IG9mIHJhbmdlIjsKLSAgICAgICAgdmFyIEVNUFRZID0gW107Ci0KLSAgICAgICAgLy8gLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAg
ICAgICAvLyBIRUxQRVJTCi0gICAgICAgIC8vCi0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5k
ZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAg
ICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5jeTNfXy5pc0FycmF5OwotICAgICAgICB2YXIg
RW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTWl4
aW4gPSBfX2RlcGVuZGVuY3k1X18uTWl4aW47Ci0gICAgICAgIHZhciByZXF1aXJlZCA9IF9fZGVw
ZW5kZW5jeTVfXy5yZXF1aXJlZDsKLSAgICAgICAgdmFyIEVtYmVyQXJyYXkgPSBfX2RlcGVuZGVu
Y3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE11dGFibGVFbnVtZXJhYmxlID0gX19kZXBl
bmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbnVtZXJhYmxlID0gX19kZXBlbmRl
bmN5OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIG1peGlu
IGRlZmluZXMgdGhlIEFQSSBmb3IgbW9kaWZ5aW5nIGFycmF5LWxpa2Ugb2JqZWN0cy4gVGhlc2Ug
bWV0aG9kcwotICAgICAgICAgICAgICBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIGEgY29sbGVjdGlv
biB0aGF0IGtlZXBzIGl0cyBpdGVtcyBpbiBhbiBvcmRlcmVkIHNldC4KLSAgICAgICAgICAgICAg
SXQgYnVpbGRzIHVwb24gdGhlIEFycmF5IG1peGluIGFuZCBhZGRzIG1ldGhvZHMgdG8gbW9kaWZ5
IHRoZSBhcnJheS4KLSAgICAgICAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRo
aXMgY2xhc3MgaW5jbHVkZSBBcnJheVByb3h5IGFuZCBBcnJheUNvbnRyb2xsZXIuCi0KLSAgICAg
ICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVzZSB0aGUgbWV0aG9kcyBpbiB0aGlzIGNsYXNz
IHRvIG1vZGlmeSBhcnJheXMgc28gdGhhdAotICAgICAgICAgICAgICBjaGFuZ2VzIGFyZSBvYnNl
cnZhYmxlLiBUaGlzIGFsbG93cyB0aGUgYmluZGluZyBzeXN0ZW0gaW4gRW1iZXIgdG8gZnVuY3Rp
b24KLSAgICAgICAgICAgICAgY29ycmVjdGx5LgotCi0KLSAgICAgICAgICAgICAgTm90ZSB0aGF0
IGFuIEFycmF5IGNhbiBjaGFuZ2UgZXZlbiBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhpcyBt
aXhpbi4KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG9uZSBtaWdodCBpbXBsZW1lbnQgYSBT
cGFyc2VBcnJheSB0aGF0IGNhbm5vdCBiZSBkaXJlY3RseQotICAgICAgICAgICAgICBtb2RpZmll
ZCwgYnV0IGlmIGl0cyB1bmRlcmx5aW5nIGVudW1lcmFibGUgY2hhbmdlcywgaXQgd2lsbCBjaGFu
Z2UgYWxzby4KLQotICAgICAgICAgICAgICBAY2xhc3MgTXV0YWJsZUFycmF5Ci0gICAgICAgICAg
ICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuQXJyYXkKLSAg
ICAgICAgICAgICAgQHVzZXMgRW1iZXIuTXV0YWJsZUVudW1lcmFibGUKLSAgICAgICAgICAgICov
Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoRW1iZXJBcnJh
eSwgTXV0YWJsZUVudW1lcmFibGUsIHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFw
cGx5IHRoaXMgbWl4aW4uCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhl
IHByaW1pdGl2ZXMgeW91IG11c3QgaW1wbGVtZW50IHRvIHN1cHBvcnQgYEVtYmVyLkFycmF5YC4K
LSAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZXBsYWNlIGFtdCBvYmplY3RzIHN0YXJ0
ZWQgYXQgaWR4IHdpdGggdGhlIG9iamVjdHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIHBh
c3NlZCBhcnJheS4gWW91IHNob3VsZCBhbHNvIGNhbGwgYHRoaXMuZW51bWVyYWJsZUNvbnRlbnRE
aWRDaGFuZ2UoKWAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlcGxhY2UKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGlkeCBTdGFydGluZyBpbmRleCBpbiB0aGUg
YXJyYXkgdG8gcmVwbGFjZS4gSWYKLSAgICAgICAgICAgICAgICAgICAgICBpZHggPj0gbGVuZ3Ro
LCB0aGVuIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtOdW1iZXJ9IGFtdCBOdW1iZXIgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUg
cmVtb3ZlZCBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgdGhlIGFycmF5LCBzdGFydGluZyBh
dCAqaWR4Ki4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtBcnJheX0gb2JqZWN0cyBBbiBh
cnJheSBvZiB6ZXJvIG9yIG1vcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBiZQotICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGVkIGludG8gdGhlIGFycmF5IGF0ICppZHgqCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgcmVwbGFjZTogcmVxdWlyZWQoKSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgYXJy
YXkuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQotICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHJl
dXNlIGFuIGV4aXN0aW5nIGFycmF5IHdpdGhvdXQgaGF2aW5nIHRvIHJlY3JlYXRlIGl0LgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGNvbG9ycyA9IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXTsKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3IubGVuZ3RoKCk7ICAgLy8gIDMKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLmNsZWFy
KCk7ICAgLy8gIFtdCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5sZW5ndGgoKTsgIC8vICAw
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
Y2xlYXIKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IEFuIGVtcHR5
IEFycmF5LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZSgwLCBsZW4sIEVNUFRZKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgdXNlIHRoZSBwcmltaXRpdmUgYHJl
cGxhY2UoKWAgbWV0aG9kIHRvIGluc2VydCBhbiBvYmplY3QgYXQgdGhlCi0gICAgICAgICAgICAg
ICAgICAgIHNwZWNpZmllZCBpbmRleC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJi
bHVlIl07Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5pbnNlcnRBdCgyLCAieWVsbG93Iik7
ICAvLyBbInJlZCIsICJncmVlbiIsICJ5ZWxsb3ciLCAiYmx1ZSJdCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9ycy5pbnNlcnRBdCg1LCAib3JhbmdlIik7ICAvLyBFcnJvcjogSW5kZXggb3V0IG9m
IHJhbmdlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgaW5zZXJ0QXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGlkeCBp
bmRleCBvZiBpbnNlcnQgdGhlIG9iamVjdCBhdC4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtPYmplY3R9IG9iamVjdCBvYmplY3QgdG8gaW5zZXJ0Ci0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGluc2VydEF0OiBmdW5jdGlvbihpZHgsIG9iamVjdCkgewotICAgICAgICAgICAgICAg
IGlmIChpZHggPiBnZXQodGhpcywgJ2xlbmd0aCcpKSAKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVtYmVyRXJyb3IoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5yZXBsYWNlKGlkeCwgMCwgW29iamVjdF0pOwotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJlbW92ZSBhbiBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBpbmRleCB1c2luZyB0aGUg
YHJlcGxhY2UoKWAgcHJpbWl0aXZlCi0gICAgICAgICAgICAgICAgICAgIG1ldGhvZC4gWW91IGNh
biBwYXNzIGVpdGhlciBhIHNpbmdsZSBpbmRleCwgb3IgYSBzdGFydCBhbmQgYSBsZW5ndGguCi0K
LSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHBhc3MgYSBzdGFydCBhbmQgbGVuZ3RoIHRoYXQg
aXMgYmV5b25kIHRoZQotICAgICAgICAgICAgICAgICAgICBsZW5ndGggdGhpcyBtZXRob2Qgd2ls
bCB0aHJvdyBhbiBgT1VUX09GX1JBTkdFX0VYQ0VQVElPTmAuCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gWyJyZWQi
LCAiZ3JlZW4iLCAiYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIl07Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbG9ycy5yZW1vdmVBdCgwKTsgICAgIC8vIFsiZ3JlZW4iLCAiYmx1ZSIsICJ5ZWxsb3ci
LCAib3JhbmdlIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnJlbW92ZUF0KDIsIDIpOyAg
Ly8gWyJncmVlbiIsICJibHVlIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnJlbW92ZUF0
KDQsIDIpOyAgLy8gRXJyb3I6IEluZGV4IG91dCBvZiByYW5nZQotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUF0Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBzdGFydCBpbmRleCwgc3RhcnQgb2YgcmFuZ2UKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGxlbiBsZW5ndGggb2YgcGFzc2luZyBy
YW5nZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVBdDogZnVuY3Rpb24oc3Rh
cnQsIGxlbikgewotICAgICAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHN0YXJ0
KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChzdGFydCA8IDApIHx8IChzdGFydCA+PSBn
ZXQodGhpcywgJ2xlbmd0aCcpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVtYmVyRXJyb3IoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBmYXN0IGNhc2UKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxlbiA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZShzdGFydCwgbGVuLCBFTVBUWSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUHVzaCB0
aGUgb2JqZWN0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgcHVz
aCgpYCBidXQgaXQKLSAgICAgICAgICAgICAgICAgICAgaXMgS1ZPLWNvbXBsaWFudC4KLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBj
b2xvcnMgPSBbInJlZCIsICJncmVlbiJdOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVz
aE9iamVjdCgiYmxhY2siKTsgICAgIC8vIFsicmVkIiwgImdyZWVuIiwgImJsYWNrIl0KLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JzLnB1c2hPYmplY3QoWyJ5ZWxsb3ciXSk7ICAvLyBbInJlZCIs
ICJncmVlbiIsIFsieWVsbG93Il1dCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgcHVzaE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0geyp9IG9iaiBvYmplY3QgdG8gcHVzaAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIG9i
amVjdCBzYW1lIG9iamVjdCBwYXNzZWQgYXMgYSBwYXJhbQotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHB1c2hPYmplY3Q6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgICAg
IHRoaXMuaW5zZXJ0QXQoZ2V0KHRoaXMsICdsZW5ndGgnKSwgb2JqKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEFkZCB0aGUgb2JqZWN0cyBpbiB0aGUgcGFzc2VkIG51bWVyYWJsZSB0byB0
aGUgZW5kIG9mIHRoZSBhcnJheS4gRGVmZXJzCi0gICAgICAgICAgICAgICAgICAgIG5vdGlmeWlu
ZyBvYnNlcnZlcnMgb2YgdGhlIGNoYW5nZSB1bnRpbCBhbGwgb2JqZWN0cyBhcmUgYWRkZWQuCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2
YXIgY29sb3JzID0gWyJyZWQiXTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2hPYmpl
Y3RzKFsieWVsbG93IiwgIm9yYW5nZSJdKTsgIC8vIFsicmVkIiwgInllbGxvdyIsICJvcmFuZ2Ui
XQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IHB1c2hPYmplY3RzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJs
ZX0gb2JqZWN0cyB0aGUgb2JqZWN0cyB0byBhZGQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcHVzaE9iamVjdHM6IGZ1bmN0aW9uKG9iamVjdHMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IShFbnVtZXJhYmxlLmRldGVjdChvYmplY3RzKSB8fCBpc0FycmF5KG9iamVjdHMpKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IHBhc3MgRW1iZXIuRW51
bWVyYWJsZSB0byBFbWJlci5NdXRhYmxlQXJyYXkjcHVzaE9iamVjdHMiKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlKGdldCh0aGlzLCAnbGVuZ3RoJyks
IDAsIG9iamVjdHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFBvcCBvYmplY3QgZnJv
bSBhcnJheSBvciBuaWwgaWYgbm9uZSBhcmUgbGVmdC4gV29ya3MganVzdCBsaWtlIGBwb3AoKWAg
YnV0Ci0gICAgICAgICAgICAgICAgICAgIGl0IGlzIEtWTy1jb21wbGlhbnQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3Jz
ID0gWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMu
cG9wT2JqZWN0KCk7ICAgLy8gImJsdWUiCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KGNvbG9ycyk7ICAvLyBbInJlZCIsICJncmVlbiJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcG9wT2JqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcG9w
T2JqZWN0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGVuID0gZ2V0KHRoaXMs
ICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuID09PSAwKSAKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5v
YmplY3RBdChsZW4tMSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdChsZW4tMSwgMSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTaGlmdCBhbiBvYmplY3QgZnJvbSBzdGFydCBv
ZiBhcnJheSBvciBuaWwgaWYgbm9uZSBhcmUgbGVmdC4gV29ya3MganVzdAotICAgICAgICAgICAg
ICAgICAgICBsaWtlIGBzaGlmdCgpYCBidXQgaXQgaXMgS1ZPLWNvbXBsaWFudC4KLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xv
cnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIl07Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9y
cy5zaGlmdE9iamVjdCgpOyAgLy8gInJlZCIKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coY29sb3JzKTsgICAvLyBbImdyZWVuIiwgImJsdWUiXQotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNoaWZ0T2JqZWN0Ci0gICAgICAgICAg
ICAgICAgICAgIEByZXR1cm4gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgc2hpZnRPYmplY3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQodGhp
cywgJ2xlbmd0aCcpID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJldCA9IHRoaXMub2JqZWN0QXQoMCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5yZW1vdmVBdCgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVuc2hpZnQg
YW4gb2JqZWN0IHRvIHN0YXJ0IG9mIGFycmF5LiBXb3JrcyBqdXN0IGxpa2UgYHVuc2hpZnQoKWAg
YnV0IGl0IGlzCi0gICAgICAgICAgICAgICAgICAgIEtWTy1jb21wbGlhbnQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3Jz
ID0gWyJyZWQiXTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnVuc2hpZnRPYmplY3QoInll
bGxvdyIpOyAgICAvLyBbInllbGxvdyIsICJyZWQiXQotICAgICAgICAgICAgICAgICAgICBjb2xv
cnMudW5zaGlmdE9iamVjdChbImJsYWNrIl0pOyAgIC8vIFtbImJsYWNrIl0sICJ5ZWxsb3ciLCAi
cmVkIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCB1bnNoaWZ0T2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gb2JqIG9i
amVjdCB0byB1bnNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gb2JqZWN0IHNhbWUg
b2JqZWN0IHBhc3NlZCBhcyBhIHBhcmFtCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgdW5zaGlmdE9iamVjdDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5p
bnNlcnRBdCgwLCBvYmopOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyB0aGUgbmFt
ZWQgb2JqZWN0cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4gRGVmZXJzIG5vdGlmeWlu
ZwotICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMgdW50aWwgYWxsIG9iamVjdHMgaGF2ZSBi
ZWVuIGFkZGVkLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFsicmVkIl07Ci0gICAgICAgICAgICAgICAgICAgIGNv
bG9ycy51bnNoaWZ0T2JqZWN0cyhbImJsYWNrIiwgIndoaXRlIl0pOyAgIC8vIFsiYmxhY2siLCAi
d2hpdGUiLCAicmVkIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnVuc2hpZnRPYmplY3Rz
KCJ5ZWxsb3ciKTsgLy8gVHlwZSBFcnJvcjogJ3VuZGVmaW5lZCcgaXMgbm90IGEgZnVuY3Rpb24K
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB1
bnNoaWZ0T2JqZWN0cwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFi
bGV9IG9iamVjdHMgdGhlIG9iamVjdHMgdG8gYWRkCi0gICAgICAgICAgICAgICAgICAgIEByZXR1
cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHVuc2hpZnRPYmplY3RzOiBmdW5jdGlvbihvYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5yZXBsYWNlKDAsIDAsIG9iamVjdHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFJldmVyc2Ugb2JqZWN0cyBpbiB0aGUgYXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgcmV2ZXJzZSgp
YCBidXQgaXQgaXMKLSAgICAgICAgICAgICAgICAgICAgS1ZPLWNvbXBsaWFudC4KLQotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIHJldmVyc2VPYmplY3RzCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByZXZlcnNlT2JqZWN0czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA9
PT0gMCkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAg
IHZhciBvYmplY3RzID0gdGhpcy50b0FycmF5KCkucmV2ZXJzZSgpOwotICAgICAgICAgICAgICAg
IHRoaXMucmVwbGFjZSgwLCBsZW4sIG9iamVjdHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFJlcGxhY2UgYWxsIHRoZSB0aGUgcmVjZWl2ZXIncyBjb250ZW50IHdpdGggY29udGVudCBv
ZiB0aGUgYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIElmIGFyZ3VtZW50IGlzIGFuIGVt
cHR5IGFycmF5IHJlY2VpdmVyIHdpbGwgYmUgY2xlYXJlZC4KLQotICAgICAgICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCIs
ICJncmVlbiIsICJibHVlIl07Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5zZXRPYmplY3Rz
KFsiYmxhY2siLCAid2hpdGUiXSk7ICAvLyBbImJsYWNrIiwgIndoaXRlIl0KLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzLnNldE9iamVjdHMoW10pOyAgICAgICAgICAgICAgICAgIC8vIFtdCi0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2V0
T2JqZWN0cwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkFycmF5fSBvYmplY3Rz
IGFycmF5IHdob3NlIGNvbnRlbnQgd2lsbCBiZSB1c2VkIGZvciByZXBsYWNpbmcKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZSBjb250ZW50IG9mIHRoZSByZWNlaXZlcgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIgd2l0aCB0aGUgbmV3IGNvbnRl
bnQKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0T2JqZWN0czogZnVuY3Rp
b24ob2JqZWN0cykgewotICAgICAgICAgICAgICAgIGlmIChvYmplY3RzLmxlbmd0aCA9PT0gMCkg
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFyKCk7Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgbGVuID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICB0aGlz
LnJlcGxhY2UoMCwgbGVuLCBvYmplY3RzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIElNUExF
TUVOVCBFbWJlci5NdXRhYmxlRW51bWVyYWJsZQotICAgICAgICAgICAgLy8KLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbGwgb2NjdXJhbmNlcyBvZiBhbiBv
YmplY3QgaW4gdGhlIGFycmF5LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGNpdGllcyA9IFsiQ2hpY2FnbyIsICJCZXJsaW4iLCAi
TGltYSIsICJDaGljYWdvIl07Ci0gICAgICAgICAgICAgICAgICAgIGNpdGllcy5yZW1vdmVPYmpl
Y3QoIkNoaWNhZ28iKTsgIC8vIFsiQmVybGluIiwgIkxpbWEiXQotICAgICAgICAgICAgICAgICAg
ICBjaXRpZXMucmVtb3ZlT2JqZWN0KCJMaW1hIik7ICAgICAvLyBbIkJlcmxpbiJdCi0gICAgICAg
ICAgICAgICAgICAgIGNpdGllcy5yZW1vdmVPYmplY3QoIlRva3lvIikgICAgIC8vIFsiQmVybGlu
Il0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCByZW1vdmVPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsqfSBvYmogb2JqZWN0
IHRvIHJlbW92ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVj
ZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVPYmplY3Q6IGZ1
bmN0aW9uKG9iaikgewotICAgICAgICAgICAgICAgIHZhciBsb2MgPSBnZXQodGhpcywgJ2xlbmd0
aCcpIHx8IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tbG9jID49IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGN1ck9iamVjdCA9IHRoaXMub2JqZWN0QXQobG9jKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1ck9iamVjdCA9PT0gb2JqKSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVtb3ZlQXQobG9jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgUHVzaCB0aGUgb2JqZWN0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkg
aWYgaXQgaXMgbm90IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgcHJlc2VudCBpbiB0aGUg
YXJyYXkuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICB2YXIgY2l0aWVzID0gWyJDaGljYWdvIiwgIkJlcmxpbiJdOwotICAgICAgICAgICAg
ICAgICAgICBjaXRpZXMuYWRkT2JqZWN0KCJMaW1hIik7ICAgIC8vIFsiQ2hpY2FnbyIsICJCZXJs
aW4iLCAiTGltYSJdCi0gICAgICAgICAgICAgICAgICAgIGNpdGllcy5hZGRPYmplY3QoIkJlcmxp
biIpOyAgLy8gWyJDaGljYWdvIiwgIkJlcmxpbiIsICJMaW1hIl0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhZGRPYmplY3QKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGFkZCwgaWYgbm90IGFscmVhZHkg
cHJlc2VudAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2
ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGRPYmplY3Q6IGZ1bmN0aW9u
KG9iaikgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWlucyhvYmopKSAKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5wdXNoT2JqZWN0KG9iaik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1lcmFibGUiLAotICAgIFsiZW1i
ZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJh
YmxlIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIs
ICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5MV9f
LmZvckVhY2g7Ci0gICAgICAgIHZhciBFbnVtZXJhYmxlID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTNfXy5NaXhpbjsKLSAgICAg
ICAgdmFyIHJlcXVpcmVkID0gX19kZXBlbmRlbmN5M19fLnJlcXVpcmVkOwotICAgICAgICB2YXIg
YmVnaW5Qcm9wZXJ0eUNoYW5nZXMgPSBfX2RlcGVuZGVuY3k0X18uYmVnaW5Qcm9wZXJ0eUNoYW5n
ZXM7Ci0gICAgICAgIHZhciBlbmRQcm9wZXJ0eUNoYW5nZXMgPSBfX2RlcGVuZGVuY3k0X18uZW5k
UHJvcGVydHlDaGFuZ2VzOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJl
cgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIG1peGluIGRlZmluZXMgdGhlIEFQSSBm
b3IgbW9kaWZ5aW5nIGdlbmVyaWMgZW51bWVyYWJsZXMuIFRoZXNlIG1ldGhvZHMKLSAgICAgICAg
ICAgICAgY2FuIGJlIGFwcGxpZWQgdG8gYW4gb2JqZWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBp
dCBpcyBvcmRlcmVkIG9yCi0gICAgICAgICAgICAgIHVub3JkZXJlZC4KLQotICAgICAgICAgICAg
ICBOb3RlIHRoYXQgYW4gRW51bWVyYWJsZSBjYW4gY2hhbmdlIGV2ZW4gaWYgaXQgZG9lcyBub3Qg
aW1wbGVtZW50IHRoaXMgbWl4aW4uCi0gICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIE1hcHBl
ZEVudW1lcmFibGUgY2Fubm90IGJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ1dCBpZiBpdHMKLSAgICAg
ICAgICAgICAgdW5kZXJseWluZyBlbnVtZXJhYmxlIGNoYW5nZXMsIGl0IHdpbGwgY2hhbmdlIGFs
c28uCi0KLSAgICAgICAgICAgICAgIyMgQWRkaW5nIE9iamVjdHMKLQotICAgICAgICAgICAgICBU
byBhZGQgYW4gb2JqZWN0IHRvIGFuIGVudW1lcmFibGUsIHVzZSB0aGUgYGFkZE9iamVjdCgpYCBt
ZXRob2QuIFRoaXMKLSAgICAgICAgICAgICAgbWV0aG9kIHdpbGwgb25seSBhZGQgdGhlIG9iamVj
dCB0byB0aGUgZW51bWVyYWJsZSBpZiB0aGUgb2JqZWN0IGlzIG5vdAotICAgICAgICAgICAgICBh
bHJlYWR5IHByZXNlbnQgYW5kIGlzIG9mIGEgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVudW1lcmFi
bGUuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBzZXQuYWRk
T2JqZWN0KGNvbnRhY3QpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBS
ZW1vdmluZyBPYmplY3RzCi0KLSAgICAgICAgICAgICAgVG8gcmVtb3ZlIGFuIG9iamVjdCBmcm9t
IGFuIGVudW1lcmFibGUsIHVzZSB0aGUgYHJlbW92ZU9iamVjdCgpYCBtZXRob2QuIFRoaXMKLSAg
ICAgICAgICAgICAgd2lsbCBvbmx5IHJlbW92ZSB0aGUgb2JqZWN0IGlmIGl0IGlzIHByZXNlbnQg
aW4gdGhlIGVudW1lcmFibGUsIG90aGVyd2lzZQotICAgICAgICAgICAgICB0aGlzIG1ldGhvZCBo
YXMgbm8gZWZmZWN0LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgc2V0LnJlbW92ZU9iamVjdChjb250YWN0KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgIyMgSW1wbGVtZW50aW5nIEluIFlvdXIgT3duIENvZGUKLQotICAgICAgICAgICAg
ICBJZiB5b3UgYXJlIGltcGxlbWVudGluZyBhbiBvYmplY3QgYW5kIHdhbnQgdG8gc3VwcG9ydCB0
aGlzIEFQSSwganVzdCBpbmNsdWRlCi0gICAgICAgICAgICAgIHRoaXMgbWl4aW4gaW4geW91ciBj
bGFzcyBhbmQgaW1wbGVtZW50IHRoZSByZXF1aXJlZCBtZXRob2RzLiBJbiB5b3VyIHVuaXQKLSAg
ICAgICAgICAgICAgdGVzdHMsIGJlIHN1cmUgdG8gYXBwbHkgdGhlIEVtYmVyLk11dGFibGVFbnVt
ZXJhYmxlVGVzdHMgdG8geW91ciBvYmplY3QuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIE11dGFi
bGVFbnVtZXJhYmxlCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAg
ICAgQHVzZXMgRW1iZXIuRW51bWVyYWJsZQotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZShFbnVtZXJhYmxlLCB7Ci0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBfX1JlcXVpcmVkLl9fIFlvdSBtdXN0IGltcGxl
bWVudCB0aGlzIG1ldGhvZCB0byBhcHBseSB0aGlzIG1peGluLgotCi0gICAgICAgICAgICAgICAg
ICAgIEF0dGVtcHRzIHRvIGFkZCB0aGUgcGFzc2VkIG9iamVjdCB0byB0aGUgcmVjZWl2ZXIgaWYg
dGhlIG9iamVjdCBpcyBub3QKLSAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBwcmVzZW50IGlu
IHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgb2JqZWN0IGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGhhcyBubyBlZmZlY3QuCi0KLSAgICAgICAgICAgICAgICAgICAg
SWYgdGhlIHBhc3NlZCBvYmplY3QgaXMgb2YgYSB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJl
Y2VpdmVyLAotICAgICAgICAgICAgICAgICAgICB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCByYWlz
ZSBhbiBleGNlcHRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhZGRPYmplY3QK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRv
IGFkZCB0byB0aGUgZW51bWVyYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2Jq
ZWN0fSB0aGUgcGFzc2VkIG9iamVjdAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGFkZE9iamVjdDogcmVxdWlyZWQoRnVuY3Rpb24pLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgQWRkcyBlYWNoIG9iamVjdCBpbiB0aGUgcGFzc2VkIGVudW1lcmFibGUg
dG8gdGhlIHJlY2VpdmVyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWRkT2JqZWN0
cwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV9IG9iamVjdHMg
dGhlIG9iamVjdHMgdG8gYWRkLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9
IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWRkT2JqZWN0czog
ZnVuY3Rpb24ob2JqZWN0cykgewotICAgICAgICAgICAgICAgIGJlZ2luUHJvcGVydHlDaGFuZ2Vz
KHRoaXMpOwotICAgICAgICAgICAgICAgIGZvckVhY2gob2JqZWN0cywgZnVuY3Rpb24ob2JqKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkT2JqZWN0KG9iaik7Ci0gICAgICAgICAgICAg
ICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgZW5kUHJvcGVydHlDaGFuZ2VzKHRoaXMpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVt
ZW50IHRoaXMgbWV0aG9kIHRvIGFwcGx5IHRoaXMgbWl4aW4uCi0KLSAgICAgICAgICAgICAgICAg
ICAgQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBwYXNzZWQgb2JqZWN0IGZyb20gdGhlIHJlY2VpdmVy
IGNvbGxlY3Rpb24gaWYgdGhlCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBwcmVzZW50
IGluIHRoZSBjb2xsZWN0aW9uLiBJZiB0aGUgb2JqZWN0IGlzIG5vdCBwcmVzZW50LAotICAgICAg
ICAgICAgICAgICAgICB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LgotCi0gICAgICAgICAgICAg
ICAgICAgIElmIHRoZSBwYXNzZWQgb2JqZWN0IGlzIG9mIGEgdHlwZSBub3Qgc3VwcG9ydGVkIGJ5
IHRoZSByZWNlaXZlciwKLSAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGlzIG1ldGhvZCBzaG91
bGQgcmFpc2UgYW4gZXhjZXB0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVt
b3ZlT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhl
IG9iamVjdCB0byByZW1vdmUgZnJvbSB0aGUgZW51bWVyYWJsZS4KLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7T2JqZWN0fSB0aGUgcGFzc2VkIG9iamVjdAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJlbW92ZU9iamVjdDogcmVxdWlyZWQoRnVuY3Rpb24pLAotCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGVhY2ggb2JqZWN0IGlu
IHRoZSBwYXNzZWQgZW51bWVyYWJsZSBmcm9tIHRoZSByZWNlaXZlci4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIHJlbW92ZU9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtFbWJlci5FbnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3RzIHRvIHJlbW92ZQotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmVtb3ZlT2JqZWN0czogZnVuY3Rpb24ob2JqZWN0cykgewotICAg
ICAgICAgICAgICAgIGJlZ2luUHJvcGVydHlDaGFuZ2VzKHRoaXMpOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSBvYmplY3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlT2JqZWN0KG9iamVjdHNbaV0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbmRQcm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZSIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvZ2V0X3By
b3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvc2V0X3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvbWl4
aW4iLCAiZW1iZXItbWV0YWwvZXZlbnRzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIs
ICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1t
ZXRhbC9pc19ub25lIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVw
ZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5j
eThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9f
LCBfX2RlcGVuZGVuY3kxMl9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1
Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0K
LSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBnZXRX
aXRoRGVmYXVsdCA9IF9fZGVwZW5kZW5jeTJfXy5nZXRXaXRoRGVmYXVsdDsKLSAgICAgICAgdmFy
IHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVwZW5k
ZW5jeTRfXy5hcHBseTsKLSAgICAgICAgdmFyIGdldFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3k1
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHNldFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3k2
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5N19fLk1peGlu
OwotICAgICAgICB2YXIgaGFzTGlzdGVuZXJzID0gX19kZXBlbmRlbmN5OF9fLmhhc0xpc3RlbmVy
czsKLSAgICAgICAgdmFyIGJlZ2luUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRlbmN5OV9fLmJl
Z2luUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIgcHJvcGVydHlXaWxsQ2hhbmdlID0gX19k
ZXBlbmRlbmN5OV9fLnByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlk
Q2hhbmdlID0gX19kZXBlbmRlbmN5OV9fLnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIg
ZW5kUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRlbmN5OV9fLmVuZFByb3BlcnR5Q2hhbmdlczsK
LSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRPYnNlcnZlcjsK
LSAgICAgICAgdmFyIGFkZEJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRCZWZv
cmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBf
Xy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIG9ic2VydmVyc0ZvciA9IF9fZGVwZW5kZW5j
eTEwX18ub2JzZXJ2ZXJzRm9yOwotICAgICAgICB2YXIgY2FjaGVGb3IgPSBfX2RlcGVuZGVuY3kx
MV9fLmNhY2hlRm9yOwotICAgICAgICB2YXIgaXNOb25lID0gX19kZXBlbmRlbmN5MTJfXy5pc05v
bmU7Ci0KLQotICAgICAgICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICAjIyBPdmVydmlldwotCi0gICAgICAgICAgICAgIFRoaXMg
bWl4aW4gcHJvdmlkZXMgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgb2JzZXJ2aW5nIGZ1bmN0aW9u
YWxpdHksIGNvcmUKLSAgICAgICAgICAgICAgZmVhdHVyZXMgb2YgdGhlIEVtYmVyIG9iamVjdCBt
b2RlbC4KLQotICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGFuZCBvYnNlcnZlcnMgYWxsb3cgb25l
IG9iamVjdCB0byBvYnNlcnZlIGNoYW5nZXMgdG8gYQotICAgICAgICAgICAgICBwcm9wZXJ0eSBv
biBhbm90aGVyIG9iamVjdC4gVGhpcyBpcyBvbmUgb2YgdGhlIGZ1bmRhbWVudGFsIHdheXMgdGhh
dAotICAgICAgICAgICAgICBtb2RlbHMsIGNvbnRyb2xsZXJzIGFuZCB2aWV3cyBjb21tdW5pY2F0
ZSB3aXRoIGVhY2ggb3RoZXIgaW4gYW4gRW1iZXIKLSAgICAgICAgICAgICAgYXBwbGljYXRpb24u
Ci0KLSAgICAgICAgICAgICAgQW55IG9iamVjdCB0aGF0IGhhcyB0aGlzIG1peGluIGFwcGxpZWQg
Y2FuIGJlIHVzZWQgaW4gb2JzZXJ2ZXIKLSAgICAgICAgICAgICAgb3BlcmF0aW9ucy4gVGhhdCBp
bmNsdWRlcyBgRW1iZXIuT2JqZWN0YCBhbmQgbW9zdCBvYmplY3RzIHlvdSB3aWxsCi0gICAgICAg
ICAgICAgIGludGVyYWN0IHdpdGggYXMgeW91IHdyaXRlIHlvdXIgRW1iZXIgYXBwbGljYXRpb24u
Ci0KLSAgICAgICAgICAgICAgTm90ZSB0aGF0IHlvdSB3aWxsIG5vdCBnZW5lcmFsbHkgYXBwbHkg
dGhpcyBtaXhpbiB0byBjbGFzc2VzIHlvdXJzZWxmLAotICAgICAgICAgICAgICBidXQgeW91IHdp
bGwgdXNlIHRoZSBmZWF0dXJlcyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZSBmcmVxdWVudGx5LCBz
byBpdAotICAgICAgICAgICAgICBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdG8gdXNl
IGl0LgotCi0gICAgICAgICAgICAgICMjIFVzaW5nIGBnZXQoKWAgYW5kIGBzZXQoKWAKLQotICAg
ICAgICAgICAgICBCZWNhdXNlIG9mIEVtYmVyJ3Mgc3VwcG9ydCBmb3IgYmluZGluZ3MgYW5kIG9i
c2VydmVycywgeW91IHdpbGwgYWx3YXlzCi0gICAgICAgICAgICAgIGFjY2VzcyBwcm9wZXJ0aWVz
IHVzaW5nIHRoZSBnZXQgbWV0aG9kLCBhbmQgc2V0IHByb3BlcnRpZXMgdXNpbmcgdGhlCi0gICAg
ICAgICAgICAgIHNldCBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBvYnNlcnZpbmcgb2JqZWN0cyB0
byBiZSBub3RpZmllZCBhbmQKLSAgICAgICAgICAgICAgY29tcHV0ZWQgcHJvcGVydGllcyB0byBi
ZSBoYW5kbGVkIHByb3Blcmx5LgotCi0gICAgICAgICAgICAgIE1vcmUgZG9jdW1lbnRhdGlvbiBh
Ym91dCBgZ2V0YCBhbmQgYHNldGAgYXJlIGJlbG93LgotCi0gICAgICAgICAgICAgICMjIE9ic2Vy
dmluZyBQcm9wZXJ0eSBDaGFuZ2VzCi0KLSAgICAgICAgICAgICAgWW91IHR5cGljYWxseSBvYnNl
cnZlIHByb3BlcnR5IGNoYW5nZXMgc2ltcGx5IGJ5IGFkZGluZyB0aGUgYG9ic2VydmVzYAotICAg
ICAgICAgICAgICBjYWxsIHRvIHRoZSBlbmQgb2YgeW91ciBtZXRob2QgZGVjbGFyYXRpb25zIGlu
IGNsYXNzZXMgdGhhdCB5b3Ugd3JpdGUuCi0gICAgICAgICAgICAgIEZvciBleGFtcGxlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgdmFsdWVPYnNlcnZlcjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAvLyBFeGVjdXRlcyB3aGVuZXZlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBj
aGFuZ2VzCi0gICAgICAgICAgICAgICAgfS5vYnNlcnZlcygndmFsdWUnKQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQWx0aG91Z2ggdGhpcyBp
cyB0aGUgbW9zdCBjb21tb24gd2F5IHRvIGFkZCBhbiBvYnNlcnZlciwgdGhpcyBjYXBhYmlsaXR5
Ci0gICAgICAgICAgICAgIGlzIGFjdHVhbGx5IGJ1aWx0IGludG8gdGhlIGBFbWJlci5PYmplY3Rg
IGNsYXNzIG9uIHRvcCBvZiB0d28gbWV0aG9kcwotICAgICAgICAgICAgICBkZWZpbmVkIGluIHRo
aXMgbWl4aW46IGBhZGRPYnNlcnZlcmAgYW5kIGByZW1vdmVPYnNlcnZlcmAuIFlvdSBjYW4gdXNl
Ci0gICAgICAgICAgICAgIHRoZXNlIHR3byBtZXRob2RzIHRvIGFkZCBhbmQgcmVtb3ZlIG9ic2Vy
dmVycyB5b3Vyc2VsZiBpZiB5b3UgbmVlZCB0bwotICAgICAgICAgICAgICBkbyBzbyBhdCBydW50
aW1lLgotCi0gICAgICAgICAgICAgIFRvIGFkZCBhbiBvYnNlcnZlciBmb3IgYSBwcm9wZXJ0eSwg
Y2FsbDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIG9iamVj
dC5hZGRPYnNlcnZlcigncHJvcGVydHlLZXknLCB0YXJnZXRPYmplY3QsIHRhcmdldEFjdGlvbikK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyB3aWxsIGNhbGwgdGhlIGB0
YXJnZXRBY3Rpb25gIG1ldGhvZCBvbiB0aGUgYHRhcmdldE9iamVjdGAgd2hlbmV2ZXIKLSAgICAg
ICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBgcHJvcGVydHlLZXlgIGNoYW5nZXMuCi0KLSAgICAg
ICAgICAgICAgTm90ZSB0aGF0IGlmIGBwcm9wZXJ0eUtleWAgaXMgYSBjb21wdXRlZCBwcm9wZXJ0
eSwgdGhlIG9ic2VydmVyIHdpbGwgYmUKLSAgICAgICAgICAgICAgY2FsbGVkIHdoZW4gYW55IG9m
IHRoZSBwcm9wZXJ0eSBkZXBlbmRlbmNpZXMgYXJlIGNoYW5nZWQsIGV2ZW4gaWYgdGhlCi0gICAg
ICAgICAgICAgIHJlc3VsdGluZyB2YWx1ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgdW5j
aGFuZ2VkLiBUaGlzIGlzIG5lY2Vzc2FyeQotICAgICAgICAgICAgICBiZWNhdXNlIGNvbXB1dGVk
IHByb3BlcnRpZXMgYXJlIG5vdCBjb21wdXRlZCB1bnRpbCBgZ2V0YCBpcyBjYWxsZWQuCi0KLSAg
ICAgICAgICAgICAgQGNsYXNzIE9ic2VydmFibGUKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBF
bWJlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1p
eGluLmNyZWF0ZSh7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXRy
aWV2ZXMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0LgotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgc2ltaWxhciB0byB1c2luZyBgb2Jq
ZWN0W2tleU5hbWVdYCBvciBgb2JqZWN0LmtleU5hbWVgLAotICAgICAgICAgICAgICAgICAgICBo
b3dldmVyIGl0IHN1cHBvcnRzIGJvdGggY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgdGhlIHVua25v
d25Qcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLgotCi0gICAgICAgICAgICAg
ICAgICAgIEJlY2F1c2UgYGdldGAgdW5pZmllcyB0aGUgc3ludGF4IGZvciBhY2Nlc3NpbmcgYWxs
IHRoZXNlIGtpbmRzCi0gICAgICAgICAgICAgICAgICAgIG9mIHByb3BlcnRpZXMsIGl0IGNhbiBt
YWtlIG1hbnkgcmVmYWN0b3JpbmdzIGVhc2llciwgc3VjaCBhcyByZXBsYWNpbmcgYQotICAgICAg
ICAgICAgICAgICAgICBzaW1wbGUgcHJvcGVydHkgd2l0aCBhIGNvbXB1dGVkIHByb3BlcnR5LCBv
ciB2aWNlIHZlcnNhLgotCi0gICAgICAgICAgICAgICAgICAgICMjIyBDb21wdXRlZCBQcm9wZXJ0
aWVzCi0KLSAgICAgICAgICAgICAgICAgICAgQ29tcHV0ZWQgcHJvcGVydGllcyBhcmUgbWV0aG9k
cyBkZWZpbmVkIHdpdGggdGhlIGBwcm9wZXJ0eWAgbW9kaWZpZXIKLSAgICAgICAgICAgICAgICAg
ICAgZGVjbGFyZWQgYXQgdGhlIGVuZCwgc3VjaCBhczoKLQotICAgICAgICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2ZpcnN0TmFtZScpICsgJyAn
ICsgdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0ucHJvcGVydHko
J2ZpcnN0TmFtZScsICdsYXN0TmFtZScpCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIFdoZW4geW91IGNhbGwgYGdldGAgb24gYSBjb21wdXRlZCBwcm9wZXJ0
eSwgdGhlIGZ1bmN0aW9uIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGFuZCB0
aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24K
LSAgICAgICAgICAgICAgICAgICAgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgICMjIyBV
bmtub3duIFByb3BlcnRpZXMKLQotICAgICAgICAgICAgICAgICAgICBMaWtld2lzZSwgaWYgeW91
IHRyeSB0byBjYWxsIGBnZXRgIG9uIGEgcHJvcGVydHkgd2hvc2UgdmFsdWUgaXMKLSAgICAgICAg
ICAgICAgICAgICAgYHVuZGVmaW5lZGAsIHRoZSBgdW5rbm93blByb3BlcnR5KClgIG1ldGhvZCB3
aWxsIGJlIGNhbGxlZCBvbiB0aGUgb2JqZWN0LgotICAgICAgICAgICAgICAgICAgICBJZiB0aGlz
IG1ldGhvZCByZXR1cm5zIGFueSB2YWx1ZSBvdGhlciB0aGFuIGB1bmRlZmluZWRgLCBpdCB3aWxs
IGJlIHJldHVybmVkCi0gICAgICAgICAgICAgICAgICAgIGluc3RlYWQuIFRoaXMgYWxsb3dzIHlv
dSB0byBpbXBsZW1lbnQgInZpcnR1YWwiIHByb3BlcnRpZXMgdGhhdCBhcmUKLSAgICAgICAgICAg
ICAgICAgICAgbm90IGRlZmluZWQgdXBmcm9udC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGdldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUg
cHJvcGVydHkgdG8gcmV0cmlldmUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0
fSBUaGUgcHJvcGVydHkgdmFsdWUgb3IgdW5kZWZpbmVkLgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5TmFtZSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnZXQodGhpcywga2V5TmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVG8gZ2V0IG11bHRpcGxlIHByb3BlcnRpZXMgYXQgb25j
ZSwgY2FsbCBgZ2V0UHJvcGVydGllc2AKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGxpc3Qg
b2Ygc3RyaW5ncyBvciBhbiBhcnJheToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5nZXRQcm9wZXJ0aWVzKCdmaXJzdE5hbWUn
LCAnbGFzdE5hbWUnLCAnemlwQ29kZScpOwotICAgICAgICAgICAgICAgICAgICAvLyB7IGZpcnN0
TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0RvZScsIHppcENvZGU6ICcxMDAxMScgfQotICAgICAg
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBpcyBlcXVpdmFsZW50IHRv
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgcmVjb3JkLmdldFByb3BlcnRpZXMoWydmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAnemlwQ29k
ZSddKTsKLSAgICAgICAgICAgICAgICAgICAgLy8geyBmaXJzdE5hbWU6ICdKb2huJywgbGFzdE5h
bWU6ICdEb2UnLCB6aXBDb2RlOiAnMTAwMTEnIH0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRQcm9wZXJ0aWVzCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nLi4ufEFycmF5fSBsaXN0IG9mIGtleXMgdG8gZ2V0Ci0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4ge0hhc2h9Ci0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZ2V0UHJvcGVydGllczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGFwcGx5KG51bGwsIGdldFByb3BlcnRpZXMsIFt0aGlzXS5jb25jYXQoc2xpY2UuY2FsbChh
cmd1bWVudHMpKSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgU2V0cyB0aGUgcHJvdmlkZWQga2V5IG9yIHBhdGggdG8gdGhlIHZhbHVlLgot
Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseSB2ZXJ5IHNpbWls
YXIgdG8gY2FsbGluZyBgb2JqZWN0W2tleV0gPSB2YWx1ZWAgb3IKLSAgICAgICAgICAgICAgICAg
ICAgYG9iamVjdC5rZXkgPSB2YWx1ZWAsIGV4Y2VwdCB0aGF0IGl0IHByb3ZpZGVzIHN1cHBvcnQg
Zm9yIGNvbXB1dGVkCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMsIHRoZSBgc2V0VW5r
bm93blByb3BlcnR5KClgIG1ldGhvZCBhbmQgcHJvcGVydHkgb2JzZXJ2ZXJzLgotCi0gICAgICAg
ICAgICAgICAgICAgICMjIyBDb21wdXRlZCBQcm9wZXJ0aWVzCi0KLSAgICAgICAgICAgICAgICAg
ICAgSWYgeW91IHRyeSB0byBzZXQgYSB2YWx1ZSBvbiBhIGtleSB0aGF0IGhhcyBhIGNvbXB1dGVk
IHByb3BlcnR5IGhhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAoc2VlIHRoZSBg
Z2V0KClgIG1ldGhvZCBmb3IgYW4gZXhhbXBsZSksIHRoZW4gYHNldCgpYCB3aWxsIGNhbGwKLSAg
ICAgICAgICAgICAgICAgICAgdGhhdCBtZXRob2QsIHBhc3NpbmcgYm90aCB0aGUgdmFsdWUgYW5k
IGtleSBpbnN0ZWFkIG9mIHNpbXBseSBjaGFuZ2luZwotICAgICAgICAgICAgICAgICAgICB0aGUg
dmFsdWUgaXRzZWxmLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhvc2UgdGltZXMgd2hlbiB5b3UgbmVl
ZCB0bwotICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnQgYSBwcm9wZXJ0eSB0aGF0IGlzIGNv
bXBvc2VkIG9mIG9uZSBvciBtb3JlIG1lbWJlcgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzLgotCi0gICAgICAgICAgICAgICAgICAgICMjIyBVbmtub3duIFByb3BlcnRpZXMKLQotICAg
ICAgICAgICAgICAgICAgICBJZiB5b3UgdHJ5IHRvIHNldCBhIHZhbHVlIG9uIGEga2V5IHRoYXQg
aXMgdW5kZWZpbmVkIGluIHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LCB0
aGVuIHRoZSBgc2V0VW5rbm93blByb3BlcnR5KClgIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgaW5z
dGVhZC4gVGhpcwotICAgICAgICAgICAgICAgICAgICBnaXZlcyB5b3UgYW4gb3Bwb3J0dW5pdHkg
dG8gaW1wbGVtZW50IGNvbXBsZXggInZpcnR1YWwiIHByb3BlcnRpZXMgdGhhdAotICAgICAgICAg
ICAgICAgICAgICBhcmUgbm90IHByZWRlZmluZWQgb24gdGhlIG9iamVjdC4gSWYgYHNldFVua25v
d25Qcm9wZXJ0eSgpYCByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCwgdGhl
biBgc2V0KClgIHdpbGwgc2ltcGx5IHNldCB0aGUgdmFsdWUgb24gdGhlIG9iamVjdC4KLQotICAg
ICAgICAgICAgICAgICAgICAjIyMgUHJvcGVydHkgT2JzZXJ2ZXJzCi0KLSAgICAgICAgICAgICAg
ICAgICAgSW4gYWRkaXRpb24gdG8gY2hhbmdpbmcgdGhlIHByb3BlcnR5LCBgc2V0KClgIHdpbGwg
YWxzbyByZWdpc3RlciBhIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZSB3aXRo
IHRoZSBvYmplY3QuIFVubGVzcyB5b3UgaGF2ZSBwbGFjZWQgdGhpcyBjYWxsIGluc2lkZSBvZiBh
Ci0gICAgICAgICAgICAgICAgICAgIGBiZWdpblByb3BlcnR5Q2hhbmdlcygpYCBhbmQgYGVuZFBy
b3BlcnR5Q2hhbmdlcygpLGAgYW55ICJsb2NhbCIgb2JzZXJ2ZXJzCi0gICAgICAgICAgICAgICAg
ICAgIChpLmUuIG9ic2VydmVyIG1ldGhvZHMgZGVjbGFyZWQgb24gdGhlIHNhbWUgb2JqZWN0KSwg
d2lsbCBiZSBjYWxsZWQKLSAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkuIEFueSAicmVt
b3RlIiBvYnNlcnZlcnMgKGkuZS4gb2JzZXJ2ZXIgbWV0aG9kcyBkZWNsYXJlZCBvbgotICAgICAg
ICAgICAgICAgICAgICBhbm90aGVyIG9iamVjdCkgd2lsbCBiZSBwbGFjZWQgaW4gYSBxdWV1ZSBh
bmQgY2FsbGVkIGF0IGEgbGF0ZXIgdGltZSBpbiBhCi0gICAgICAgICAgICAgICAgICAgIGNvYWxl
c2NlZCBtYW5uZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgIyMjIENoYWluaW5nCi0KLSAgICAg
ICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gcHJvcGVydHkgY2hhbmdlcywgYHNldCgpYCBy
ZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIGl0c2Vs
ZiBzbyB5b3UgY2FuIGRvIGNoYWluaW5nIGxpa2UgdGhpczoKLQotICAgICAgICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5zZXQoJ2ZpcnN0TmFt
ZScsICdDaGFybGVzJykuc2V0KCdsYXN0TmFtZScsICdKb2xsZXknKTsKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXQKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5IHRvIHNldAotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBv
ciBgbnVsbGAuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk9ic2VydmFibGV9
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihrZXlOYW1l
LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHNldCh0aGlzLCBrZXlOYW1lLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGF0
IG9uY2UuIFRoZXNlIHByb3BlcnRpZXMgYXJlIHNldCBpbnNpZGUKLSAgICAgICAgICAgICAgICAg
ICAgYSBzaW5nbGUgYGJlZ2luUHJvcGVydHlDaGFuZ2VzYCBhbmQgYGVuZFByb3BlcnR5Q2hhbmdl
c2AgYmF0Y2gsIHNvCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycyB3aWxsIGJlIGJ1ZmZl
cmVkLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgcmVjb3JkLnNldFByb3BlcnRpZXMoeyBmaXJzdE5hbWU6ICdDaGFybGVzJywgbGFzdE5h
bWU6ICdKb2xsZXknIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIHNldFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtIYXNofSBoYXNoIHRoZSBoYXNoIG9mIGtleXMgYW5kIHZhbHVlcyB0byBzZXQKLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBzZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihoYXNoKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNldFByb3BlcnRpZXModGhpcywgaGFzaCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQmVnaW5zIGEgZ3JvdXBp
bmcgb2YgcHJvcGVydHkgY2hhbmdlcy4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVz
ZSB0aGlzIG1ldGhvZCB0byBncm91cCBwcm9wZXJ0eSBjaGFuZ2VzIHNvIHRoYXQgbm90aWZpY2F0
aW9ucwotICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBzZW50IHVudGlsIHRoZSBjaGFu
Z2VzIGFyZSBmaW5pc2hlZC4gSWYgeW91IHBsYW4gdG8gbWFrZSBhCi0gICAgICAgICAgICAgICAg
ICAgIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIHRvIGFuIG9iamVjdCBhdCBvbmUgdGltZSwgeW91
IHNob3VsZCBjYWxsIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGF0IHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGNoYW5nZXMgdG8gYmVnaW4gZGVmZXJyaW5nIGNoYW5nZQotICAgICAgICAg
ICAgICAgICAgICBub3RpZmljYXRpb25zLiBXaGVuIHlvdSBhcmUgZG9uZSBtYWtpbmcgY2hhbmdl
cywgY2FsbAotICAgICAgICAgICAgICAgICAgICBgZW5kUHJvcGVydHlDaGFuZ2VzKClgIHRvIGRl
bGl2ZXIgdGhlIGRlZmVycmVkIGNoYW5nZSBub3RpZmljYXRpb25zIGFuZCBlbmQKLSAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYmVn
aW5Qcm9wZXJ0eUNoYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuT2Jz
ZXJ2YWJsZX0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBiZWdpblByb3BlcnR5
Q2hhbmdlczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYmVnaW5Qcm9wZXJ0eUNoYW5n
ZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBFbmRzIGEgZ3JvdXBpbmcgb2YgcHJv
cGVydHkgY2hhbmdlcy4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIG1l
dGhvZCB0byBncm91cCBwcm9wZXJ0eSBjaGFuZ2VzIHNvIHRoYXQgbm90aWZpY2F0aW9ucwotICAg
ICAgICAgICAgICAgICAgICB3aWxsIG5vdCBiZSBzZW50IHVudGlsIHRoZSBjaGFuZ2VzIGFyZSBm
aW5pc2hlZC4gSWYgeW91IHBsYW4gdG8gbWFrZSBhCi0gICAgICAgICAgICAgICAgICAgIGxhcmdl
IG51bWJlciBvZiBjaGFuZ2VzIHRvIGFuIG9iamVjdCBhdCBvbmUgdGltZSwgeW91IHNob3VsZCBj
YWxsCi0gICAgICAgICAgICAgICAgICAgIGBiZWdpblByb3BlcnR5Q2hhbmdlcygpYCBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBjaGFuZ2VzIHRvIGRlZmVyIGNoYW5nZQotICAgICAgICAgICAgICAg
ICAgICBub3RpZmljYXRpb25zLiBXaGVuIHlvdSBhcmUgZG9uZSBtYWtpbmcgY2hhbmdlcywgY2Fs
bCB0aGlzIG1ldGhvZCB0bwotICAgICAgICAgICAgICAgICAgICBkZWxpdmVyIHRoZSBkZWZlcnJl
ZCBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBhbmQgZW5kIGRlZmVycmluZy4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGVuZFByb3BlcnR5Q2hhbmdlcwotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtFbWJlci5PYnNlcnZhYmxlfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGVuZFByb3BlcnR5Q2hhbmdlczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZW5k
UHJvcGVydHlDaGFuZ2VzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTm90aWZ5IHRo
ZSBvYnNlcnZlciBzeXN0ZW0gdGhhdCBhIHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZS4KLQot
ICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IG5lZWQgdG8gY2hhbmdlIGEgdmFsdWUg
ZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVh
bGx5IGNhbGxpbmcgYGdldCgpYCBvciBgc2V0KClgIG9uIGl0LiBJbiB0aGlzIGNhc2UsIHlvdSBj
YW4gdXNlIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGFuZCBgcHJvcGVydHlEaWRD
aGFuZ2UoKWAgaW5zdGVhZC4gQ2FsbGluZyB0aGVzZSB0d28gbWV0aG9kcwotICAgICAgICAgICAg
ICAgICAgICB0b2dldGhlciB3aWxsIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzIHRoYXQgdGhlIHByb3Bl
cnR5IGhhcyBwb3RlbnRpYWxseQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHZhbHVlLgot
Ci0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB5b3UgbXVzdCBhbHdheXMgY2FsbCBgcHJv
cGVydHlXaWxsQ2hhbmdlYCBhbmQgYHByb3BlcnR5RGlkQ2hhbmdlYAotICAgICAgICAgICAgICAg
ICAgICBhcyBhIHBhaXIuIElmIHlvdSBkbyBub3QsIGl0IG1heSBnZXQgdGhlIHByb3BlcnR5IGNo
YW5nZSBncm91cHMgb3V0IG9mCi0gICAgICAgICAgICAgICAgICAgIG9yZGVyIGFuZCBjYXVzZSBu
b3RpZmljYXRpb25zIHRvIGJlIGRlbGl2ZXJlZCBtb3JlIG9mdGVuIHRoYW4geW91IHdvdWxkCi0g
ICAgICAgICAgICAgICAgICAgIGxpa2UuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBw
cm9wZXJ0eVdpbGxDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIHByb3BlcnR5IGtleSB0aGF0IGlzIGFib3V0IHRvIGNoYW5nZS4KLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2U6IGZ1bmN0aW9uKGtleU5hbWUpIHsK
LSAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5TmFtZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgTm90aWZ5IHRoZSBvYnNlcnZlciBzeXN0ZW0gdGhhdCBh
IHByb3BlcnR5IGhhcyBqdXN0IGNoYW5nZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgU29tZXRp
bWVzIHlvdSBuZWVkIHRvIGNoYW5nZSBhIHZhbHVlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgd2l0
aG91dAotICAgICAgICAgICAgICAgICAgICBhY3R1YWxseSBjYWxsaW5nIGBnZXQoKWAgb3IgYHNl
dCgpYCBvbiBpdC4gSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHVzZSB0aGlzCi0gICAgICAgICAgICAg
ICAgICAgIG1ldGhvZCBhbmQgYHByb3BlcnR5V2lsbENoYW5nZSgpYCBpbnN0ZWFkLiBDYWxsaW5n
IHRoZXNlIHR3byBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyIHdpbGwgbm90
aWZ5IGFsbCBvYnNlcnZlcnMgdGhhdCB0aGUgcHJvcGVydHkgaGFzIHBvdGVudGlhbGx5Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90
ZSB0aGF0IHlvdSBtdXN0IGFsd2F5cyBjYWxsIGBwcm9wZXJ0eVdpbGxDaGFuZ2VgIGFuZCBgcHJv
cGVydHlEaWRDaGFuZ2VgCi0gICAgICAgICAgICAgICAgICAgIGFzIGEgcGFpci4gSWYgeW91IGRv
IG5vdCwgaXQgbWF5IGdldCB0aGUgcHJvcGVydHkgY2hhbmdlIGdyb3VwcyBvdXQgb2YKLSAgICAg
ICAgICAgICAgICAgICAgb3JkZXIgYW5kIGNhdXNlIG5vdGlmaWNhdGlvbnMgdG8gYmUgZGVsaXZl
cmVkIG1vcmUgb2Z0ZW4gdGhhbiB5b3Ugd291bGQKLSAgICAgICAgICAgICAgICAgICAgbGlrZS4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHByb3BlcnR5RGlkQ2hhbmdlCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdGhh
dCBoYXMganVzdCBjaGFuZ2VkLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5P
YnNlcnZhYmxlfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3BlcnR5RGlk
Q2hhbmdlOiBmdW5jdGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlEaWRD
aGFuZ2UodGhpcywga2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ29udmVu
aWVuY2UgbWV0aG9kIHRvIGNhbGwgYHByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBwcm9wZXJ0eURp
ZENoYW5nZWAgaW4KLSAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2lvbi4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIG5vdGlmeVByb3BlcnR5Q2hhbmdlCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdG8gYmUgbm90aWZp
ZWQgYWJvdXQuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk9ic2VydmFibGV9
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbm90aWZ5UHJvcGVydHlDaGFuZ2U6
IGZ1bmN0aW9uKGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5V2lsbENo
YW5nZShrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5RGlkQ2hhbmdlKGtl
eU5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgYWRkQmVmb3JlT2JzZXJ2ZXI6IGZ1bmN0aW9uKGtleSwgdGFyZ2V0LCBtZXRo
b2QpIHsKLSAgICAgICAgICAgICAgICBhZGRCZWZvcmVPYnNlcnZlcih0aGlzLCBrZXksIHRhcmdl
dCwgbWV0aG9kKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBBZGRzIGFuIG9ic2VydmVyIG9uIGEgcHJvcGVydHkuCi0KLSAgICAgICAgICAg
ICAgICAgICAgVGhpcyBpcyB0aGUgY29yZSBtZXRob2QgdXNlZCB0byByZWdpc3RlciBhbiBvYnNl
cnZlciBmb3IgYSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjYWxs
IHRoaXMgbWV0aG9kLCBhbnkgdGltZSB0aGUga2V5J3MgdmFsdWUgaXMgc2V0LCB5b3VyIG9ic2Vy
dmVyCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbm90aWZpZWQuIE5vdGUgdGhhdCB0aGUg
b2JzZXJ2ZXJzIGFyZSB0cmlnZ2VyZWQgYW55IHRpbWUgdGhlCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlIGlzIHNldCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGhhcyBhY3R1YWxseSBjaGFu
Z2VkLiBZb3VyCi0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyIHNob3VsZCBiZSBwcmVwYXJl
ZCB0byBoYW5kbGUgdGhhdC4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcGFz
cyBhbiBvcHRpb25hbCBjb250ZXh0IHBhcmFtZXRlciB0byB0aGlzIG1ldGhvZC4gVGhlCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQgd2lsbCBiZSBwYXNzZWQgdG8geW91ciBvYnNlcnZlciBt
ZXRob2Qgd2hlbmV2ZXIgaXQgaXMgdHJpZ2dlcmVkLgotICAgICAgICAgICAgICAgICAgICBOb3Rl
IHRoYXQgaWYgeW91IGFkZCB0aGUgc2FtZSB0YXJnZXQvbWV0aG9kIHBhaXIgb24gYSBrZXkgbXVs
dGlwbGUgdGltZXMKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBkaWZmZXJlbnQgY29udGV4dCBw
YXJhbWV0ZXJzLCB5b3VyIG9ic2VydmVyIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZQotICAgICAg
ICAgICAgICAgICAgICB3aXRoIHRoZSBsYXN0IGNvbnRleHQgeW91IHBhc3NlZC4KLQotICAgICAg
ICAgICAgICAgICAgICAjIyMgT2JzZXJ2ZXIgTWV0aG9kcwotCi0gICAgICAgICAgICAgICAgICAg
IE9ic2VydmVyIG1ldGhvZHMgeW91IHBhc3Mgc2hvdWxkIGdlbmVyYWxseSBoYXZlIHRoZSBmb2xs
b3dpbmcgc2lnbmF0dXJlIGlmCi0gICAgICAgICAgICAgICAgICAgIHlvdSBkbyBub3QgcGFzcyBh
IGBjb250ZXh0YCBwYXJhbWV0ZXI6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgICAgICBmb29EaWRDaGFuZ2U6IGZ1bmN0aW9uKHNlbmRlciwga2V5
LCB2YWx1ZSwgcmV2KSB7IH07Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIFRoZSBzZW5kZXIgaXMgdGhlIG9iamVjdCB0aGF0IGNoYW5nZWQuIFRoZSBrZXkg
aXMgdGhlIHByb3BlcnR5IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4gVGhlIHZh
bHVlIHByb3BlcnR5IGlzIGN1cnJlbnRseSByZXNlcnZlZCBhbmQgdW51c2VkLiBUaGUgcmV2Ci0g
ICAgICAgICAgICAgICAgICAgIGlzIHRoZSBsYXN0IHByb3BlcnR5IHJldmlzaW9uIG9mIHRoZSBv
YmplY3Qgd2hlbiBpdCBjaGFuZ2VkLCB3aGljaCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAg
IHVzZSB0byBkZXRlY3QgaWYgdGhlIGtleSB2YWx1ZSBoYXMgcmVhbGx5IGNoYW5nZWQgb3Igbm90
LgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBwYXNzIGEgYGNvbnRleHRgIHBhcmFtZXRl
ciwgdGhlIGNvbnRleHQgd2lsbCBiZSBwYXNzZWQgYmVmb3JlIHRoZQotICAgICAgICAgICAgICAg
ICAgICByZXZpc2lvbiBsaWtlIHNvOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgZm9vRGlkQ2hhbmdlOiBmdW5jdGlvbihzZW5kZXIsIGtl
eSwgdmFsdWUsIGNvbnRleHQsIHJldikgeyB9OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBVc3VhbGx5IHlvdSB3aWxsIG5vdCBuZWVkIHRoZSB2YWx1ZSwg
Y29udGV4dCBvciByZXZpc2lvbiBwYXJhbWV0ZXJzIGF0Ci0gICAgICAgICAgICAgICAgICAgIHRo
ZSBlbmQuIEluIHRoaXMgY2FzZSwgaXQgaXMgY29tbW9uIHRvIHdyaXRlIG9ic2VydmVyIG1ldGhv
ZHMgdGhhdCB0YWtlCi0gICAgICAgICAgICAgICAgICAgIG9ubHkgYSBzZW5kZXIgYW5kIGtleSB2
YWx1ZSBhcyBwYXJhbWV0ZXJzIG9yLCBpZiB5b3UgYXJlbid0IGludGVyZXN0ZWQgaW4KLSAgICAg
ICAgICAgICAgICAgICAgYW55IG9mIHRoZXNlIHZhbHVlcywgdG8gd3JpdGUgYW4gb2JzZXJ2ZXIg
dGhhdCBoYXMgbm8gcGFyYW1ldGVycyBhdCBhbGwuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBhZGRPYnNlcnZlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5
IFRoZSBrZXkgdG8gb2JzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBpbnZva2UKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4KLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGRPYnNlcnZlcjogZnVuY3Rpb24oa2V5
LCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKHRoaXMsIGtl
eSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbiBvYnNlcnZlciB5b3UgaGF2ZSBwcmV2aW91c2x5
IHJlZ2lzdGVyZWQgb24gdGhpcyBvYmplY3QuIFBhc3MKLSAgICAgICAgICAgICAgICAgICAgdGhl
IHNhbWUga2V5LCB0YXJnZXQsIGFuZCBtZXRob2QgeW91IHBhc3NlZCB0byBgYWRkT2JzZXJ2ZXIo
KWAgYW5kIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHdpbGwgbm8gbG9uZ2VyIHJl
Y2VpdmUgbm90aWZpY2F0aW9ucy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92
ZU9ic2VydmVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtl
eSB0byBvYnNlcnZlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0
IFRoZSB0YXJnZXQgb2JqZWN0IHRvIGludm9rZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZ3xGdW5jdGlvbn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyOiBmdW5jdGlvbihrZXksIHRh
cmdldCwgbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIodGhpcywga2V5
LCB0YXJnZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBjdXJyZW50bHkg
aGFzIG9ic2VydmVycyByZWdpc3RlcmVkIGZvciBhCi0gICAgICAgICAgICAgICAgICAgIHBhcnRp
Y3VsYXIga2V5LiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3RlbnRpYWxseSBkZWZlciBw
ZXJmb3JtaW5nCi0gICAgICAgICAgICAgICAgICAgIGFuIGV4cGVuc2l2ZSBhY3Rpb24gdW50aWwg
c29tZW9uZSBiZWdpbnMgb2JzZXJ2aW5nIGEgcGFydGljdWxhciBwcm9wZXJ0eQotICAgICAgICAg
ICAgICAgICAgICBvbiB0aGUgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
aGFzT2JzZXJ2ZXJGb3IKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSBL
ZXkgdG8gY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoYXNPYnNlcnZlckZvcjogZnVuY3Rpb24oa2V5
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhhc0xpc3RlbmVycyh0aGlzLCBrZXkgKyAnOmNo
YW5nZScpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSwgb3IgYSBkZWZhdWx0IHZh
bHVlIGluIHRoZSBjYXNlIHRoYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IHJl
dHVybnMgYHVuZGVmaW5lZGAuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICBwZXJzb24uZ2V0V2l0aERlZmF1bHQoJ2xhc3ROYW1lJywgJ0Rv
ZScpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGdldFdpdGhEZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBr
ZXlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZQotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge09iamVjdH0gZGVmYXVsdFZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4g
aWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtPYmplY3R9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBvciB0aGUgZGVmYXVsdFZhbHVlLgot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldFdpdGhEZWZhdWx0OiBmdW5jdGlv
bihrZXlOYW1lLCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V2l0
aERlZmF1bHQodGhpcywga2V5TmFtZSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGEg
cHJvcGVydHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUgcGx1cyBzb21lIGFtb3VudC4KLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHBlcnNvbi5p
bmNyZW1lbnRQcm9wZXJ0eSgnYWdlJyk7Ci0gICAgICAgICAgICAgICAgICAgIHRlYW0uaW5jcmVt
ZW50UHJvcGVydHkoJ3Njb3JlJywgMik7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgaW5jcmVtZW50UHJvcGVydHkKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRv
IGluY3JlbWVudAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gaW5jcmVtZW50
IFRoZSBhbW91bnQgdG8gaW5jcmVtZW50IGJ5LiBEZWZhdWx0cyB0byAxCi0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge051bWJlcn0gVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGluY3JlbWVudFByb3BlcnR5OiBmdW5jdGlvbihrZXlO
YW1lLCBpbmNyZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOb25lKGluY3JlbWVudCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJNdXN0IHBhc3MgYSBudW1lcmljIHZhbHVl
IHRvIGluY3JlbWVudFByb3BlcnR5IiwgKCFpc05hTihwYXJzZUZsb2F0KGluY3JlbWVudCkpICYm
IGlzRmluaXRlKGluY3JlbWVudCkpKTsKLSAgICAgICAgICAgICAgICBzZXQodGhpcywga2V5TmFt
ZSwgKHBhcnNlRmxvYXQoZ2V0KHRoaXMsIGtleU5hbWUpKSB8fCAwKSArIGluY3JlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhbHVlIG9m
IGEgcHJvcGVydHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUgbWludXMgc29tZSBhbW91bnQuCi0KLSAg
ICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBwbGF5
ZXIuZGVjcmVtZW50UHJvcGVydHkoJ2xpdmVzJyk7Ci0gICAgICAgICAgICAgICAgICAgIG9yYy5k
ZWNyZW1lbnRQcm9wZXJ0eSgnaGVhbHRoJywgNSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVjcmVtZW50UHJvcGVydHkKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3Bl
cnR5IHRvIGRlY3JlbWVudAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gZGVj
cmVtZW50IFRoZSBhbW91bnQgdG8gZGVjcmVtZW50IGJ5LiBEZWZhdWx0cyB0byAxCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge051bWJlcn0gVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlY3JlbWVudFByb3BlcnR5OiBmdW5jdGlv
bihrZXlOYW1lLCBkZWNyZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOb25lKGRlY3Jl
bWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50ID0gMTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJNdXN0IHBhc3MgYSBudW1lcmlj
IHZhbHVlIHRvIGRlY3JlbWVudFByb3BlcnR5IiwgKCFpc05hTihwYXJzZUZsb2F0KGRlY3JlbWVu
dCkpICYmIGlzRmluaXRlKGRlY3JlbWVudCkpKTsKLSAgICAgICAgICAgICAgICBzZXQodGhpcywg
a2V5TmFtZSwgKGdldCh0aGlzLCBrZXlOYW1lKSB8fCAwKSAtIGRlY3JlbWVudCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGEgYm9v
bGVhbiBwcm9wZXJ0eSB0byB0aGUgb3Bwb3NpdGUgb2YgaXQncwotICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50IHZhbHVlLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgICAgICAgc3RhcnNoaXAudG9nZ2xlUHJvcGVydHkoJ3dhcnBEcml2ZUVuZ2Fn
ZWQnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCB0b2dnbGVQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
a2V5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gdG9nZ2xlCi0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHRvZ2dsZVByb3BlcnR5OiBmdW5jdGlvbihrZXlOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsIGtleU5hbWUsICFnZXQodGhpcywga2V5TmFt
ZSkpOwotICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywga2V5TmFtZSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0
aGUgY2FjaGVkIHZhbHVlIG9mIGEgY29tcHV0ZWQgcHJvcGVydHksIGlmIGl0IGV4aXN0cy4KLSAg
ICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgeW91IHRvIGluc3BlY3QgdGhlIHZhbHVlIG9m
IGEgY29tcHV0ZWQgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhY2NpZGVu
dGFsbHkgaW52b2tpbmcgaXQgaWYgaXQgaXMgaW50ZW5kZWQgdG8gYmUKLSAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVkIGxhemlseS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNh
Y2hlRm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lCi0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUg
Y29tcHV0ZWQgcHJvcGVydHksIGlmIGFueQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGNhY2hlRm9yOiBmdW5jdGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNhY2hlRm9yKHRoaXMsIGtleU5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
Ly8gaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICAgICAgICAgICAgb2JzZXJ2ZXJz
Rm9yS2V5OiBmdW5jdGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2Vy
dmVyc0Zvcih0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9wcm9taXNlX3Byb3h5IiwKLSAg
ICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQi
LCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0
YWwvZXJyb3IiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRl
bmN5NV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZh
ciBnZXQgPSBfX2RlcGVuZGVuY3kxX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRl
bmN5Ml9fLnNldDsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5M19fLmNvbXB1
dGVkOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k0X18uTWl4aW47Ci0gICAgICAg
IHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAg
dmFyIG5vdCA9IGNvbXB1dGVkLm5vdDsKLSAgICAgICAgdmFyIG9yID0gY29tcHV0ZWQub3I7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgICAg
QHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAgKi8KLQotICAgICAgICBmdW5j
dGlvbiB0YXAocHJveHksIHByb21pc2UpIHsKLSAgICAgICAgICAgIHNldChwcm94eSwgJ2lzRnVs
ZmlsbGVkJywgZmFsc2UpOwotICAgICAgICAgICAgc2V0KHByb3h5LCAnaXNSZWplY3RlZCcsIGZh
bHNlKTsKLQotICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkg
ewotICAgICAgICAgICAgICAgIHNldChwcm94eSwgJ2lzRnVsZmlsbGVkJywgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgc2V0KHByb3h5LCAnY29udGVudCcsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAg
ICAgICAgICAgICBzZXQocHJveHksICdpc1JlamVjdGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgc2V0KHByb3h5LCAncmVhc29uJywgcmVhc29uKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBy
ZWFzb247Ci0gICAgICAgICAgICB9LCAiRW1iZXI6IFByb21pc2VQcm94eSIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgbG93IGxldmVsIG1peGluIG1ha2luZyBP
YmplY3RQcm94eSwgT2JqZWN0Q29udHJvbGxlciBvciBBcnJheUNvbnRyb2xsZXIncyBwcm9taXNl
IGF3YXJlLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFy
IE9iamVjdFByb21pc2VDb250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5leHRlbmQo
RW1iZXIuUHJvbWlzZVByb3h5TWl4aW4pOwotCi0gICAgICAgICAgICAgIHZhciBjb250cm9sbGVy
ID0gT2JqZWN0UHJvbWlzZUNvbnRyb2xsZXIuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBwcm9t
aXNlOiAkLmdldEpTT04oJy9zb21lL3JlbW90ZS9kYXRhLmpzb24nKQotICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgICBjb250cm9sbGVyLnRoZW4oZnVuY3Rpb24oanNvbil7Ci0gICAg
ICAgICAgICAgICAgIC8vIHRoZSBqc29uCi0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNv
bikgewotICAgICAgICAgICAgICAgICAvLyB0aGUgcmVhc29uIHdoeSB5b3UgaGF2ZSBubyBqc29u
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICB0
aGUgY29udHJvbGxlciBoYXMgYmluZGFibGUgYXR0cmlidXRlcyB3aGljaAotICAgICAgICAgICAg
ICB0cmFjayB0aGUgcHJvbWlzZXMgbGlmZSBjeWNsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgY29udHJvbGxlci5nZXQoJ2lzUGVuZGluZycpICAgLy89PiB0
cnVlCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCdpc1NldHRsZWQnKSAgLy89PiBmYWxz
ZQotICAgICAgICAgICAgICBjb250cm9sbGVyLmdldCgnaXNSZWplY3RlZCcpICAvLz0+IGZhbHNl
Ci0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCdpc0Z1bGZpbGxlZCcpIC8vPT4gZmFsc2UK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2hlbiB0aGUgdGhlICQuZ2V0SlNP
TiBjb21wbGV0ZXMsIGFuZCB0aGUgcHJvbWlzZSBpcyBmdWxmaWxsZWQKLSAgICAgICAgICAgICAg
d2l0aCBqc29uLCB0aGUgbGlmZSBjeWNsZSBhdHRyaWJ1dGVzIHdpbGwgdXBkYXRlIGFjY29yZGlu
Z2x5LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgY29udHJv
bGxlci5nZXQoJ2lzUGVuZGluZycpICAgLy89PiBmYWxzZQotICAgICAgICAgICAgICBjb250cm9s
bGVyLmdldCgnaXNTZXR0bGVkJykgICAvLz0+IHRydWUKLSAgICAgICAgICAgICAgY29udHJvbGxl
ci5nZXQoJ2lzUmVqZWN0ZWQnKSAgLy89PiBmYWxzZQotICAgICAgICAgICAgICBjb250cm9sbGVy
LmdldCgnaXNGdWxmaWxsZWQnKSAvLz0+IHRydWUKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQXMgdGhlIGNvbnRyb2xsZXIgaXMgYW4gT2JqZWN0Q29udHJvbGxlciwgYW5kIHRo
ZSBqc29uIG5vdyBpdHMgY29udGVudCwKLSAgICAgICAgICAgICAgYWxsIHRoZSBqc29uIHByb3Bl
cnRpZXMgd2lsbCBiZSBhdmFpbGFibGUgZGlyZWN0bHkgZnJvbSB0aGUgY29udHJvbGxlci4KLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIC8vIEFzc3VtaW5nIHRo
ZSBmb2xsb3dpbmcganNvbjoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpcnN0
TmFtZTogJ1N0ZWZhbicsCi0gICAgICAgICAgICAgICAgbGFzdE5hbWU6ICdQZW5uZXInCi0gICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvLyBib3RoIHByb3BlcnRpZXMgd2lsbCBhY2Nl
c3NpYmxlIG9uIHRoZSBjb250cm9sbGVyCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCdm
aXJzdE5hbWUnKSAvLz0+ICdTdGVmYW4nCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCds
YXN0TmFtZScpICAvLz0+ICdQZW5uZXInCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIElmIHRoZSBjb250cm9sbGVyIGlzIGJhY2tpbmcgYSB0ZW1wbGF0ZSwgdGhlIGF0dHJpYnV0
ZXMgYXJlCi0gICAgICAgICAgICAgIGJpbmRhYmxlIGZyb20gd2l0aGluIHRoYXQgdGVtcGxhdGUK
LQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2lmIGlzUGVu
ZGluZ319Ci0gICAgICAgICAgICAgICAgbG9hZGluZy4uLgotICAgICAgICAgICAgICB7e2Vsc2V9
fQotICAgICAgICAgICAgICAgIGZpcnN0TmFtZToge3tmaXJzdE5hbWV9fQotICAgICAgICAgICAg
ICAgIGxhc3ROYW1lOiB7e2xhc3ROYW1lfX0KLSAgICAgICAgICAgICAge3svaWZ9fQotICAgICAg
ICAgICAgICBgYGAKLSAgICAgICAgICAgICAgQGNsYXNzIEVtYmVyLlByb21pc2VQcm94eU1peGlu
Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4aW4u
Y3JlYXRlKHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcHJv
eGllZCBwcm9taXNlIGlzIHJlamVjdGVkIHRoaXMgd2lsbCBjb250YWluIHRoZSByZWFzb24KLSAg
ICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IHJlYXNvbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmVhc29uOiBudWxsLAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgcHJveGllZCBwcm9taXNlIGhhcyBzZXR0bGVk
IHRoaXMgd2lsbCBiZWNvbWUgYGZhbHNlYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgaXNQZW5kaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHRydWUKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBpc1BlbmRpbmc6IG5vdCgnaXNTZXR0bGVkJykucmVh
ZE9ubHkoKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIE9uY2UgdGhl
IHByb3hpZWQgcHJvbWlzZSBoYXMgc2V0dGxlZCB0aGlzIHdpbGwgYmVjb21lIGB0cnVlYC4KLQot
ICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgaXNTZXR0bGVkCi0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaXNT
ZXR0bGVkOiBvcignaXNSZWplY3RlZCcsICdpc0Z1bGZpbGxlZCcpLnJlYWRPbmx5KCksCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBXaWxsIGJlY29tZSBgdHJ1ZWAgaWYg
dGhlIHByb3hpZWQgcHJvbWlzZSBpcyByZWplY3RlZC4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJvcGVydHkgaXNSZWplY3RlZAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBmYWxzZQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgV2lsbCBiZWNvbWUgYHRydWVgIGlm
IHRoZSBwcm94aWVkIHByb21pc2UgaXMgZnVsZmlsbGVkLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBpc0Z1bGZpbGxlZAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBmYWxz
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzRnVsZmlsbGVkOiBmYWxzZSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwcm9taXNlIHdob3Nl
IGZ1bGZpbGxtZW50IHZhbHVlIGlzIGJlaW5nIHByb3hpZWQgYnkgdGhpcyBvYmplY3QuCi0KLSAg
ICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCB1cG9uIGNy
ZWF0aW9uLCBhbmQgc2hvdWxkIG5vdCBiZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIG9u
Y2UgY3JlYXRlZC4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuT2JqZWN0
Q29udHJvbGxlci5leHRlbmQoRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4pLmNyZWF0ZSh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgcHJvbWlzZTogPHRoZW5hYmxlPgotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
b3BlcnR5IHByb21pc2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm9taXNl
OiBjb21wdXRlZChmdW5jdGlvbihrZXksIHByb21pc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFw
KHRoaXMsIHByb21pc2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJQcm9taXNlUHJveHkncyBwcm9taXNlIG11c3Qg
YmUgc2V0Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBbiBhbGlhcyB0byB0aGUgcHJveGllZCBwcm9t
aXNlJ3MgYHRoZW5gLgotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBSU1ZQLlByb21pc2UudGhl
bi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRoZW4KLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7UlNWUC5Qcm9taXNlfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRoZW46
IHByb21pc2VBbGlhcygndGhlbicpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgQW4gYWxpYXMgdG8gdGhlIHByb3hpZWQgcHJvbWlzZSdzIGBjYXRjaGAuCi0KLSAgICAg
ICAgICAgICAgICAgICAgU2VlIFJTVlAuUHJvbWlzZS5jYXRjaC4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGNhdGNoCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259
IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAg
ICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuMy4wCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgJ2NhdGNoJzogcHJvbWlzZUFsaWFzKCdjYXRjaCcpLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQW4gYWxpYXMgdG8gdGhlIHByb3hpZWQgcHJvbWlzZSdz
IGBmaW5hbGx5YC4KLQotICAgICAgICAgICAgICAgICAgICBTZWUgUlNWUC5Qcm9taXNlLmZpbmFs
bHkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmaW5hbGx5Ci0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuMy4wCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgJ2ZpbmFsbHknOiBwcm9taXNlQWxpYXMo
J2ZpbmFsbHknKQotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBwcm9taXNlQWxpYXMo
bmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcHJvbWlzZSA9IGdldCh0aGlzLCAncHJvbWlzZScpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBwcm9taXNlW25hbWVdLmFwcGx5KHByb21pc2UsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlu
cy9zb3J0YWJsZSIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvZW51bWVy
YWJsZV91dGlscyIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL21peGlucy9t
dXRhYmxlX2VudW1lcmFibGUiLCAiZW1iZXItcnVudGltZS9jb21wYXJlIiwgImVtYmVyLW1ldGFs
L29ic2VydmVyIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVu
ZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2V4cG9ydHNfXykg
ewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVs
ZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAg
ICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICAvLyBFbWJlci5hc3NlcnQsIEVtYmVyLkEKLQotICAgICAgICB2YXIgZ2V0ID0gX19k
ZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7
Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5NF9fLmZvckVhY2g7Ci0gICAgICAg
IHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTVfXy5NaXhpbjsKLSAgICAgICAgdmFyIE11dGFibGVF
bnVtZXJhYmxlID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjb21w
YXJlID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBhZGRPYnNlcnZl
ciA9IF9fZGVwZW5kZW5jeThfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2Vy
dmVyID0gX19kZXBlbmRlbmN5OF9fLnJlbW92ZU9ic2VydmVyOwotICAgICAgICB2YXIgY29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3k5X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBiZWZvcmVPYnNlcnZl
ciA9IF9fZGVwZW5kZW5jeTVfXy5iZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIG9ic2VydmVy
ID0gX19kZXBlbmRlbmN5NV9fLm9ic2VydmVyOwotICAgICAgICAvL0VTNlRPRE86IHNob3VsZCB3
ZSBhY2Nlc3MgdGhlc2UgZGlyZWN0bHkgZnJvbSB0aGVpciBwYWNrYWdlIG9yIGZyb20gaG93IHRo
aWVyIGV4cG9zZWQgaW4gZW1iZXItbWV0YWw/Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IGBFbWJlci5Tb3J0YWJsZU1peGluYCBwcm92aWRlcyBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3Ig
YXJyYXkgcHJveGllcwotICAgICAgICAgICAgICB0byBzcGVjaWZ5IGEgc29ydCBvcmRlciBhbmQg
bWFpbnRhaW4gdGhpcyBzb3J0aW5nIHdoZW4gb2JqZWN0cyBhcmUgYWRkZWQsCi0gICAgICAgICAg
ICAgIHJlbW92ZWQsIG9yIHVwZGF0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgaW1wbGljaXQgb3Jk
ZXIgb2YgdGhlaXIgdW5kZXJseWluZwotICAgICAgICAgICAgICBtb2RlbGFycmF5OgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgc29uZ3MgPSBbCi0gICAgICAg
ICAgICAgICAge3RyYWNrTnVtYmVyOiA0LCB0aXRsZTogJ09iLUxhLURpLCBPYi1MYS1EYSd9LAot
ICAgICAgICAgICAgICAgIHt0cmFja051bWJlcjogMiwgdGl0bGU6ICdCYWNrIGluIHRoZSBVLlMu
Uy5SLid9LAotICAgICAgICAgICAgICAgIHt0cmFja051bWJlcjogMywgdGl0bGU6ICdHbGFzcyBP
bmlvbid9LAotICAgICAgICAgICAgICBdOwotCi0gICAgICAgICAgICAgIHNvbmdzQ29udHJvbGxl
ciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5jcmVhdGUoewotICAgICAgICAgICAgICAgIG1vZGVs
OiBzb25ncywKLSAgICAgICAgICAgICAgICBzb3J0UHJvcGVydGllczogWyd0cmFja051bWJlcidd
LAotICAgICAgICAgICAgICAgIHNvcnRBc2NlbmRpbmc6IHRydWUKLSAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgc29uZ3NDb250cm9sbGVyLmdldCgnZmlyc3RPYmplY3QnKTsgIC8v
IHt0cmFja051bWJlcjogMiwgdGl0bGU6ICdCYWNrIGluIHRoZSBVLlMuUy5SLid9Ci0KLSAgICAg
ICAgICAgICAgc29uZ3NDb250cm9sbGVyLmFkZE9iamVjdCh7dHJhY2tOdW1iZXI6IDEsIHRpdGxl
OiAnRGVhciBQcnVkZW5jZSd9KTsKLSAgICAgICAgICAgICAgc29uZ3NDb250cm9sbGVyLmdldCgn
Zmlyc3RPYmplY3QnKTsgIC8vIHt0cmFja051bWJlcjogMSwgdGl0bGU6ICdEZWFyIFBydWRlbmNl
J30KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91IGFkZCBvciByZW1v
dmUgdGhlIHByb3BlcnRpZXMgdG8gc29ydCBieSBvciBjaGFuZ2UgdGhlIHNvcnQgZGlyZWN0aW9u
IHRoZSBtb2RlbAotICAgICAgICAgICAgICBzb3J0IG9yZGVyIHdpbGwgYmUgYXV0b21hdGljYWxs
eSB1cGRhdGVkLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
c29uZ3NDb250cm9sbGVyLnNldCgnc29ydFByb3BlcnRpZXMnLCBbJ3RpdGxlJ10pOwotICAgICAg
ICAgICAgICBzb25nc0NvbnRyb2xsZXIuZ2V0KCdmaXJzdE9iamVjdCcpOyAvLyB7dHJhY2tOdW1i
ZXI6IDIsIHRpdGxlOiAnQmFjayBpbiB0aGUgVS5TLlMuUi4nfQotCi0gICAgICAgICAgICAgIHNv
bmdzQ29udHJvbGxlci50b2dnbGVQcm9wZXJ0eSgnc29ydEFzY2VuZGluZycpOwotICAgICAgICAg
ICAgICBzb25nc0NvbnRyb2xsZXIuZ2V0KCdmaXJzdE9iamVjdCcpOyAvLyB7dHJhY2tOdW1iZXI6
IDQsIHRpdGxlOiAnT2ItTGEtRGksIE9iLUxhLURhJ30KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgU29ydGFibGVNaXhpbiB3b3JrcyBieSBzb3J0aW5nIHRoZSBhcnJhbmdlZENv
bnRlbnQgYXJyYXksIHdoaWNoIGlzIHRoZSBhcnJheSB0aGF0Ci0gICAgICAgICAgICAgIGFycmF5
UHJveHkgZGlzcGxheXMuIER1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSB1bmRlcmx5aW5nICdjb250
ZW50JyBhcnJheSBpcyBub3QgY2hhbmdlZCwgdGhhdAotICAgICAgICAgICAgICBhcnJheSB3aWxs
IG5vdCBkaXNwbGF5IHRoZSBzb3J0ZWQgbGlzdDoKLQotICAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICBzb25nc0NvbnRyb2xsZXIuZ2V0KCdjb250ZW50JykuZ2V0KCdm
aXJzdE9iamVjdCcpOyAvLyBSZXR1cm5zIHRoZSB1bnNvcnRlZCBvcmlnaW5hbCBjb250ZW50Ci0g
ICAgICAgICAgICAgIHNvbmdzQ29udHJvbGxlci5nZXQoJ2ZpcnN0T2JqZWN0Jyk7IC8vIFJldHVy
bnMgdGhlIHNvcnRlZCBjb250ZW50LgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBBbHRob3VnaCB0aGUgc29ydGVkIGNvbnRlbnQgY2FuIGFsc28gYmUgYWNjZXNzZWQgdGhyb3Vn
aCB0aGUgYXJyYW5nZWRDb250ZW50IHByb3BlcnR5LAotICAgICAgICAgICAgICBpdCBpcyBwcmVm
ZXJhYmxlIHRvIHVzZSB0aGUgcHJveGllZCBjbGFzcyBhbmQgbm90IHRoZSBhcnJhbmdlZENvbnRl
bnQgYXJyYXkgZGlyZWN0bHkuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFNvcnRhYmxlTWl4aW4K
LSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAdXNlcyBFbWJl
ci5NdXRhYmxlRW51bWVyYWJsZQotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZShNdXRhYmxlRW51bWVyYWJsZSwgewotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoaWNoIHByb3BlcnRpZXMg
ZGljdGF0ZSB0aGUgYXJyYW5nZWRDb250ZW50J3Mgc29ydCBvcmRlci4KLQotICAgICAgICAgICAg
ICAgICAgICBXaGVuIHNwZWNpZnlpbmcgbXVsdGlwbGUgcHJvcGVydGllcyB0aGUgc29ydGluZyB3
aWxsIHVzZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGBzb3J0UHJv
cGVydGllc2AgYXJyYXkgcHJpb3JpdGl6ZWQgZnJvbSBmaXJzdCB0byBsYXN0LgotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcm9wZXJ0eSB7QXJyYXl9IHNvcnRQcm9wZXJ0aWVzCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgc29ydFByb3BlcnRpZXM6IG51bGwsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGFycmFuZ2VkQ29udGVu
dCdzIHNvcnQgZGlyZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICBTb3J0cyB0aGUgY29udGVu
dCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgZGVmYXVsdC4gU2V0IHRvIGBmYWxzZWAgdG8KLSAgICAg
ICAgICAgICAgICAgICAgdXNlIGRlc2NlbmRpbmcgb3JkZXIuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IHtCb29sZWFufSBzb3J0QXNjZW5kaW5nCi0gICAgICAgICAgICAgICAgICAg
IEBkZWZhdWx0IHRydWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzb3J0QXNj
ZW5kaW5nOiB0cnVlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhl
IGZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSB0d28gdmFsdWVzLiBZb3UgY2FuIG92ZXJyaWRlIHRo
aXMgaWYgeW91Ci0gICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gZG8gY3VzdG9tIGNvbXBhcmlz
b25zLiBGdW5jdGlvbnMgbXVzdCBiZSBvZiB0aGUgdHlwZSBleHBlY3RlZCBieQotICAgICAgICAg
ICAgICAgICAgICBBcnJheSNzb3J0LCBpLmUuCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDAgaWYgdGhlIHR3byBwYXJhbWV0ZXJzIGFyZSBlcXVhbCwKLSAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHNtYWxs
ZXIgdGhhbiB0aGUgc2Vjb25kIG9yCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgcG9z
aXRpdmUgdmFsdWUgb3RoZXJ3aXNlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oeCx5KSB7IC8vIFRoZXNlIGFyZSBhc3N1
bWVkIHRvIGJlIGludGVnZXJzCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT09IHkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geCA8IHkgPyAtMSA6IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHNvcnRGdW5jdGlv
bgotICAgICAgICAgICAgICAgICAgICBAdHlwZSB7RnVuY3Rpb259Ci0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IEVtYmVyLmNvbXBhcmUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBzb3J0RnVuY3Rpb246IGNvbXBhcmUsCi0KLSAgICAgICAgICAgIG9yZGVyQnk6IGZ1bmN0
aW9uKGl0ZW0xLCBpdGVtMikgewotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwLAotICAg
ICAgICAgICAgICAgIHNvcnRQcm9wZXJ0aWVzID0gZ2V0KHRoaXMsICdzb3J0UHJvcGVydGllcycp
LAotICAgICAgICAgICAgICAgIHNvcnRBc2NlbmRpbmcgPSBnZXQodGhpcywgJ3NvcnRBc2NlbmRp
bmcnKSwKLSAgICAgICAgICAgICAgICBzb3J0RnVuY3Rpb24gPSBnZXQodGhpcywgJ3NvcnRGdW5j
dGlvbicpOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJ5b3UgbmVlZCB0byBkZWZp
bmUgYHNvcnRQcm9wZXJ0aWVzYCIsICEhc29ydFByb3BlcnRpZXMpOwotCi0gICAgICAgICAgICAg
ICAgZm9yRWFjaChzb3J0UHJvcGVydGllcywgZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNvcnRGdW5jdGlvbi5jYWxsKHRoaXMsIGdldChpdGVtMSwgcHJvcGVydHlO
YW1lKSwgZ2V0KGl0ZW0yLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgocmVzdWx0ICE9PSAwKSAmJiAhc29ydEFzY2VuZGluZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9ICgtMSkgKiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVu
dCA9IGdldCh0aGlzLCAnY29udGVudCcpLAotICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0aWVz
ID0gZ2V0KHRoaXMsICdzb3J0UHJvcGVydGllcycpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNv
bnRlbnQgJiYgc29ydFByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChj
b250ZW50LCBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNo
KHNvcnRQcm9wZXJ0aWVzLCBmdW5jdGlvbihzb3J0UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcihpdGVtLCBzb3J0UHJvcGVydHksIHRoaXMsICdj
b250ZW50SXRlbVNvcnRQcm9wZXJ0eURpZENoYW5nZScpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcigpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgaXNTb3J0ZWQ6IGNvbXB1dGVkLm5vdEVtcHR5KCdzb3J0UHJv
cGVydGllcycpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgT3ZlcnJp
ZGVzIHRoZSBkZWZhdWx0IGFycmFuZ2VkQ29udGVudCBmcm9tIGFycmF5UHJveHkgaW4gb3JkZXIg
dG8gc29ydCBieSBzb3J0RnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIEFsc28gc2V0cyB1
cCBvYnNlcnZlcnMgZm9yIGVhY2ggc29ydFByb3BlcnR5IG9uIGVhY2ggaXRlbSBpbiB0aGUgY29u
dGVudCBBcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgYXJyYW5nZWRDb250
ZW50Ci0gICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBhcnJhbmdlZENvbnRlbnQ6
IGNvbXB1dGVkKCdjb250ZW50JywgJ3NvcnRQcm9wZXJ0aWVzLkBlYWNoJywgZnVuY3Rpb24oa2V5
LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250
ZW50JyksCi0gICAgICAgICAgICAgICAgaXNTb3J0ZWQgPSBnZXQodGhpcywgJ2lzU29ydGVkJyks
Ci0gICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXMgPSBnZXQodGhpcywgJ3NvcnRQcm9wZXJ0
aWVzJyksCi0gICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoY29udGVudCAmJiBpc1NvcnRlZCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0g
Y29udGVudC5zbGljZSgpOwotICAgICAgICAgICAgICAgICAgICBjb250ZW50LnNvcnQoZnVuY3Rp
b24oaXRlbTEsIGl0ZW0yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
cmRlckJ5KGl0ZW0xLCBpdGVtMik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICBmb3JFYWNoKGNvbnRlbnQsIGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvckVhY2goc29ydFByb3BlcnRpZXMsIGZ1bmN0aW9uKHNvcnRQcm9wZXJ0
eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKGl0ZW0sIHNvcnRQ
cm9wZXJ0eSwgdGhpcywgJ2NvbnRlbnRJdGVtU29ydFByb3BlcnR5RGlkQ2hhbmdlJyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgdGhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5BKGNvbnRlbnQpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50OwotICAgICAgICAg
ICAgfSksCi0KLSAgICAgICAgICAgIF9jb250ZW50V2lsbENoYW5nZTogYmVmb3JlT2JzZXJ2ZXIo
J2NvbnRlbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdl
dCh0aGlzLCAnY29udGVudCcpLAotICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0aWVzID0gZ2V0
KHRoaXMsICdzb3J0UHJvcGVydGllcycpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQg
JiYgc29ydFByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjb250ZW50
LCBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHNvcnRQ
cm9wZXJ0aWVzLCBmdW5jdGlvbihzb3J0UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZW1vdmVPYnNlcnZlcihpdGVtLCBzb3J0UHJvcGVydHksIHRoaXMsICdjb250ZW50
SXRlbVNvcnRQcm9wZXJ0eURpZENoYW5nZScpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwg
dGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICB9KSwKLQotICAg
ICAgICAgICAgc29ydFByb3BlcnRpZXNXaWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcignc29ydFBy
b3BlcnRpZXMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0U29ydEFz
Y2VuZGluZyA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBzb3J0
UHJvcGVydGllc0RpZENoYW5nZTogb2JzZXJ2ZXIoJ3NvcnRQcm9wZXJ0aWVzJywgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFNvcnRBc2NlbmRpbmcgPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgc29ydEFzY2VuZGluZ1dpbGxDaGFuZ2U6
IGJlZm9yZU9ic2VydmVyKCdzb3J0QXNjZW5kaW5nJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fbGFzdFNvcnRBc2NlbmRpbmcgPSBnZXQodGhpcywgJ3NvcnRBc2NlbmRpbmcn
KTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBzb3J0QXNjZW5kaW5nRGlkQ2hhbmdl
OiBvYnNlcnZlcignc29ydEFzY2VuZGluZycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9sYXN0U29ydEFzY2VuZGluZyAhPT0gdW5kZWZpbmVkICYmIGdldCh0aGlzLCAn
c29ydEFzY2VuZGluZycpICE9PSB0aGlzLl9sYXN0U29ydEFzY2VuZGluZykgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgYXJyYW5nZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRl
bnQnKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50LnJldmVyc2VPYmplY3Rz
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIGNv
bnRlbnRBcnJheVdpbGxDaGFuZ2U6IGZ1bmN0aW9uKGFycmF5LCBpZHgsIHJlbW92ZWRDb3VudCwg
YWRkZWRDb3VudCkgewotICAgICAgICAgICAgICAgIHZhciBpc1NvcnRlZCA9IGdldCh0aGlzLCAn
aXNTb3J0ZWQnKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc1NvcnRlZCkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgYXJyYW5nZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRl
bnQnKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJlbW92ZWRPYmplY3RzID0gYXJyYXkuc2xp
Y2UoaWR4LCBpZHggKyByZW1vdmVkQ291bnQpOwotICAgICAgICAgICAgICAgICAgICB2YXIgc29y
dFByb3BlcnRpZXMgPSBnZXQodGhpcywgJ3NvcnRQcm9wZXJ0aWVzJyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yRWFjaChyZW1vdmVkT2JqZWN0cywgZnVuY3Rpb24oaXRlbSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50LnJlbW92ZU9iamVjdChpdGVtKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChzb3J0UHJvcGVydGllcywgZnVuY3Rpb24o
c29ydFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2
ZXIoaXRlbSwgc29ydFByb3BlcnR5LCB0aGlzLCAnY29udGVudEl0ZW1Tb3J0UHJvcGVydHlEaWRD
aGFuZ2UnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fc3VwZXIoYXJyYXksIGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZENvdW50KTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNvbnRlbnRBcnJheURpZENoYW5nZTogZnVu
Y3Rpb24oYXJyYXksIGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZENvdW50KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGlzU29ydGVkID0gZ2V0KHRoaXMsICdpc1NvcnRlZCcpLAotICAgICAgICAgICAg
ICAgIHNvcnRQcm9wZXJ0aWVzID0gZ2V0KHRoaXMsICdzb3J0UHJvcGVydGllcycpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGlzU29ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhZGRl
ZE9iamVjdHMgPSBhcnJheS5zbGljZShpZHgsIGlkeCArIGFkZGVkQ291bnQpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvckVhY2goYWRkZWRPYmplY3RzLCBmdW5jdGlvbihpdGVtKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEl0ZW1Tb3J0ZWQoaXRlbSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvckVhY2goc29ydFByb3BlcnRpZXMsIGZ1bmN0aW9uKHNvcnRQ
cm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9ic2VydmVyKGl0ZW0s
IHNvcnRQcm9wZXJ0eSwgdGhpcywgJ2NvbnRlbnRJdGVtU29ydFByb3BlcnR5RGlkQ2hhbmdlJyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAg
fSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N1cGVyKGFycmF5LCBpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRDb3VudCk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBpbnNlcnRJdGVtU29ydGVkOiBmdW5jdGlvbihpdGVtKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5n
ZWRDb250ZW50Jyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGdldChhcnJhbmdlZENv
bnRlbnQsICdsZW5ndGgnKTsKLQotICAgICAgICAgICAgICAgIHZhciBpZHggPSB0aGlzLl9iaW5h
cnlTZWFyY2goaXRlbSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBhcnJhbmdlZENvbnRl
bnQuaW5zZXJ0QXQoaWR4LCBpdGVtKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNv
bnRlbnRJdGVtU29ydFByb3BlcnR5RGlkQ2hhbmdlOiBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5nZWRDb250ZW50
JyksCi0gICAgICAgICAgICAgICAgb2xkSW5kZXggPSBhcnJhbmdlZENvbnRlbnQuaW5kZXhPZihp
dGVtKSwKLSAgICAgICAgICAgICAgICBsZWZ0SXRlbSA9IGFycmFuZ2VkQ29udGVudC5vYmplY3RB
dChvbGRJbmRleCAtIDEpLAotICAgICAgICAgICAgICAgIHJpZ2h0SXRlbSA9IGFycmFuZ2VkQ29u
dGVudC5vYmplY3RBdChvbGRJbmRleCArIDEpLAotICAgICAgICAgICAgICAgIGxlZnRSZXN1bHQg
PSBsZWZ0SXRlbSAmJiB0aGlzLm9yZGVyQnkoaXRlbSwgbGVmdEl0ZW0pLAotICAgICAgICAgICAg
ICAgIHJpZ2h0UmVzdWx0ID0gcmlnaHRJdGVtICYmIHRoaXMub3JkZXJCeShpdGVtLCByaWdodEl0
ZW0pOwotCi0gICAgICAgICAgICAgICAgaWYgKGxlZnRSZXN1bHQgPCAwIHx8IHJpZ2h0UmVzdWx0
ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBhcnJhbmdlZENvbnRlbnQucmVtb3ZlT2JqZWN0
KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEl0ZW1Tb3J0ZWQoaXRlbSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2JpbmFy
eVNlYXJjaDogZnVuY3Rpb24oaXRlbSwgbG93LCBoaWdoKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IG1pZCwgbWlkSXRlbSwgcmVzLCBhcnJhbmdlZENvbnRlbnQ7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobG93ID09PSBoaWdoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb3c7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50ID0gZ2V0KHRo
aXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLQotICAgICAgICAgICAgICAgIG1pZCA9IGxvdyArIE1h
dGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7Ci0gICAgICAgICAgICAgICAgbWlkSXRlbSA9IGFy
cmFuZ2VkQ29udGVudC5vYmplY3RBdChtaWQpOwotCi0gICAgICAgICAgICAgICAgcmVzID0gdGhp
cy5vcmRlckJ5KG1pZEl0ZW0sIGl0ZW0pOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlcyA8IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmFyeVNlYXJjaChpdGVtLCBt
aWQgKyAxLCBoaWdoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA+IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpbmFyeVNlYXJjaChpdGVtLCBsb3csIG1p
ZCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50
aW1lL21peGlucy90YXJnZXRfYWN0aW9uX3N1cHBvcnQiLAotICAgIFsiZW1iZXItbWV0YWwvY29y
ZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0
IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFs
L2NvbXB1dGVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5k
ZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIg
RW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIubG9v
a3VwLCBFbWJlci5hc3NlcnQKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdl
dDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciB0
eXBlT2YgPSBfX2RlcGVuZGVuY3k0X18udHlwZU9mOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2Rl
cGVuZGVuY3k1X18uTWl4aW47Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTZf
Xy5jb21wdXRlZDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIGBFbWJlci5UYXJnZXRBY3Rp
b25TdXBwb3J0YCBpcyBhIG1peGluIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGEgY2xhc3MKLSAg
ICAgICAgICAgIHRvIGFkZCBhIGB0cmlnZ2VyQWN0aW9uYCBtZXRob2Qgd2l0aCBzZW1hbnRpY3Mg
c2ltaWxhciB0byB0aGUgSGFuZGxlYmFycwotICAgICAgICAgICAgYHt7YWN0aW9ufX1gIGhlbHBl
ci4gSW4gbm9ybWFsIEVtYmVyIHVzYWdlLCB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciBpcwotICAg
ICAgICAgICAgdXN1YWxseSB0aGUgYmVzdCBjaG9pY2UuIFRoaXMgbWl4aW4gaXMgbW9zdCBvZnRl
biB1c2VmdWwgd2hlbiB5b3UgYXJlCi0gICAgICAgICAgICBkb2luZyBtb3JlIGNvbXBsZXggZXZl
bnQgaGFuZGxpbmcgaW4gVmlldyBvYmplY3RzLgotCi0gICAgICAgICAgICBTZWUgYWxzbyBgRW1i
ZXIuVmlld1RhcmdldEFjdGlvblN1cHBvcnRgLCB3aGljaCBoYXMKLSAgICAgICAgICAgIHZpZXct
YXdhcmUgZGVmYXVsdHMgZm9yIHRhcmdldCBhbmQgYWN0aW9uQ29udGV4dC4KLQotICAgICAgICAg
ICAgQGNsYXNzIFRhcmdldEFjdGlvblN1cHBvcnQKLSAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLk1peGluCi0gICAgICAgICAgICAqLwotICAg
ICAgICB2YXIgVGFyZ2V0QWN0aW9uU3VwcG9ydCA9IE1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAg
ICB0YXJnZXQ6IG51bGwsCi0gICAgICAgICAgICBhY3Rpb246IG51bGwsCi0gICAgICAgICAgICBh
Y3Rpb25Db250ZXh0OiBudWxsLAotCi0gICAgICAgICAgICB0YXJnZXRPYmplY3Q6IGNvbXB1dGVk
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXQodGhpcywgJ3Rh
cmdldCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVPZih0YXJnZXQpID09PSAic3RyaW5n
IikgewotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQodGhpcywgdGFyZ2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0KEVtYmVyLmxvb2t1cCwgdGFyZ2V0KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KS5wcm9wZXJ0eSgndGFyZ2V0JyksCi0K
LSAgICAgICAgICAgIGFjdGlvbkNvbnRleHRPYmplY3Q6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHZhciBhY3Rpb25Db250ZXh0ID0gZ2V0KHRoaXMsICdhY3Rpb25Db250
ZXh0Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZU9mKGFjdGlvbkNvbnRleHQpID09PSAi
c3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQodGhpcywgYWN0
aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldChFbWJlci5sb29rdXAsIGFj
dGlvbkNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KS5wcm9wZXJ0eSgnYWN0aW9uQ29udGV4dCcpLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgIFNlbmQgYW4gYGFjdGlvbmAgd2l0aCBhbiBgYWN0aW9uQ29udGV4dGAgdG8g
YSBgdGFyZ2V0YC4gVGhlIGFjdGlvbiwgYWN0aW9uQ29udGV4dAotICAgICAgICAgICAgICAgICAg
YW5kIHRhcmdldCB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHByb3BlcnRpZXMgb2YgdGhlIG9iamVj
dC4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgIEFwcC5TYXZlQnV0dG9uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEVtYmVy
LlRhcmdldEFjdGlvblN1cHBvcnQsIHsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBFbWJl
ci5jb21wdXRlZC5hbGlhcygnY29udHJvbGxlcicpLAotICAgICAgICAgICAgICAgICAgICBhY3Rp
b246ICdzYXZlJywKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29udGV4dDogRW1iZXIuY29t
cHV0ZWQuYWxpYXMoJ2NvbnRleHQnKSwKLSAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbigpOyAvLyBT
ZW5kcyB0aGUgYHNhdmVgIGFjdGlvbiwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjdXJy
ZW50IGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgVGhlIGB0YXJn
ZXRgLCBgYWN0aW9uYCwgYW5kIGBhY3Rpb25Db250ZXh0YCBjYW4gYmUgcHJvdmlkZWQgYXMgcHJv
cGVydGllcyBvZgotICAgICAgICAgICAgICAgICAgYW4gb3B0aW9uYWwgb2JqZWN0IGFyZ3VtZW50
IHRvIGB0cmlnZ2VyQWN0aW9uYCBhcyB3ZWxsLgotCi0gICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZChFbWJlci5UYXJnZXRBY3Rpb25TdXBwb3J0LCB7Ci0gICAgICAgICAgICAgICAgICAg
IGNsaWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJB
Y3Rpb24oewotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2F2ZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZ2V0KCdjb250cm9sbGVyJyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhY3Rpb25Db250ZXh0OiB0aGlzLmdldCgnY29udGV4dCcpCi0gICAg
ICAgICAgICAgICAgICAgICAgfSk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAgYWN0aW9uLCBhbG9uZyB3
aXRoIHRoZSBjdXJyZW50IGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8g
dGhlIGN1cnJlbnQgY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICBU
aGUgYGFjdGlvbkNvbnRleHRgIGRlZmF1bHRzIHRvIHRoZSBvYmplY3QgeW91IGFyZSBtaXhpbmcg
YFRhcmdldEFjdGlvblN1cHBvcnRgIGludG8uCi0gICAgICAgICAgICAgICAgICBCdXQgYHRhcmdl
dGAgYW5kIGBhY3Rpb25gIG11c3QgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBwcm9wZXJ0aWVzIG9y
IHdpdGggdGhlIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICB0byBgdHJpZ2dlckFjdGlvbmAs
IG9yIGEgY29tYmluYXRpb246Ci0KLSAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgICAgIEFwcC5TYXZlQnV0dG9uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEVt
YmVyLlRhcmdldEFjdGlvblN1cHBvcnQsIHsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBF
bWJlci5jb21wdXRlZC5hbGlhcygnY29udHJvbGxlcicpLAotICAgICAgICAgICAgICAgICAgICBj
bGljazogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQWN0
aW9uKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NhdmUnCi0gICAgICAgICAg
ICAgICAgICAgICAgfSk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAgYWN0aW9uLCBhbG9uZyB3aXRoIGEg
cmVmZXJlbmNlIHRvIGB0aGlzYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhl
IGN1cnJlbnQgY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICBAbWV0
aG9kIHRyaWdnZXJBY3Rpb24KLSAgICAgICAgICAgICAgICAgIEBwYXJhbSBvcHRzIHtIYXNofSAo
b3B0aW9uYWwsIHdpdGggdGhlIG9wdGlvbmFsIGtleXMgYWN0aW9uLCB0YXJnZXQgYW5kL29yIGFj
dGlvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlm
IHRoZSBhY3Rpb24gd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZCBkaWQgbm90IHJldHVybiBmYWxz
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRyaWdnZXJBY3Rpb246IGZ1bmN0
aW9uKG9wdHMpIHsKLSAgICAgICAgICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTsKLSAgICAgICAg
ICAgICAgICB2YXIgYWN0aW9uID0gb3B0cy5hY3Rpb24gfHwgZ2V0KHRoaXMsICdhY3Rpb24nKSwK
LSAgICAgICAgICAgICAgICB0YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBnZXQodGhpcywgJ3Rhcmdl
dE9iamVjdCcpLAotICAgICAgICAgICAgICAgIGFjdGlvbkNvbnRleHQgPSBvcHRzLmFjdGlvbkNv
bnRleHQ7Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcmdzKG9wdGlvbnMsIGFjdGlvbk5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoYWN0aW9uTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2go
YWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0LmNvbmNhdChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkNvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvbnRleHQgPSBnZXQodGhpcywgJ2FjdGlvbkNvbnRl
eHRPYmplY3QnKSB8fCB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0YXJnZXQgJiYgYWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXQ7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5zZW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSB0YXJnZXQuc2VuZC5hcHBseSh0YXJnZXQsIGFyZ3MoYWN0aW9uQ29udGV4
dCwgYWN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBhY3Rpb24gJyIgKyBhY3Rpb24gKyAiJyBkaWQg
bm90IGV4aXN0IG9uICIgKyB0YXJnZXQsIHR5cGVvZiB0YXJnZXRbYWN0aW9uXSA9PT0gJ2Z1bmN0
aW9uJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0YXJnZXRbYWN0aW9uXS5hcHBs
eSh0YXJnZXQsIGFyZ3MoYWN0aW9uQ29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gZmFsc2UpIAotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBUYXJnZXRBY3Rpb25TdXBwb3J0OwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vYXBwbGljYXRpb24iLAotICAgIFsi
ZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgdmFyIE5hbWVzcGFjZSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBOYW1lc3BhY2UuZXh0ZW5kKCk7Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9hcnJheV9wcm94eSIsCi0gICAg
WyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvY29t
cHV0ZWQiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRz
IiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJl
bWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5z
L2VudW1lcmFibGUiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9f
LCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2Rl
cGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5LLCBFbWJlci5hc3NlcnQK
LSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQg
PSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5j
eTRfXy5pc0FycmF5OwotICAgICAgICB2YXIgYXBwbHkgPSBfX2RlcGVuZGVuY3k0X18uYXBwbHk7
Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTVfXy5jb21wdXRlZDsKLSAgICAg
ICAgdmFyIGJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5Nl9fLmJlZm9yZU9ic2VydmVyOwot
ICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k2X18ub2JzZXJ2ZXI7Ci0gICAgICAg
IHZhciBiZWdpblByb3BlcnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTdfXy5iZWdpblByb3BlcnR5
Q2hhbmdlczsKLSAgICAgICAgdmFyIGVuZFByb3BlcnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTdf
Xy5lbmRQcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRl
bmN5OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5j
eTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTXV0YWJsZUFycmF5ID0gX19kZXBlbmRlbmN5
MTBfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW51bWVyYWJsZSA9IF9fZGVwZW5kZW5jeTEx
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5jeTEyX18uZm10Owot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1
Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBPVVRf
T0ZfUkFOR0VfRVhDRVBUSU9OID0gIkluZGV4IG91dCBvZiByYW5nZSI7Ci0gICAgICAgIHZhciBF
TVBUWSA9IFtdOwotICAgICAgICB2YXIgYWxpYXMgPSBjb21wdXRlZC5hbGlhczsKLSAgICAgICAg
dmFyIEsgPSBFbWJlci5LOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbiBBcnJheVBy
b3h5IHdyYXBzIGFueSBvdGhlciBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIGBFbWJlci5BcnJheWAg
YW5kL29yCi0gICAgICAgICAgICAgIGBFbWJlci5NdXRhYmxlQXJyYXksYCBmb3J3YXJkaW5nIGFs
bCByZXF1ZXN0cy4gVGhpcyBtYWtlcyBpdCB2ZXJ5IHVzZWZ1bCBmb3IKLSAgICAgICAgICAgICAg
YSBudW1iZXIgb2YgYmluZGluZyB1c2UgY2FzZXMgb3Igb3RoZXIgY2FzZXMgd2hlcmUgYmVpbmcg
YWJsZSB0byBzd2FwCi0gICAgICAgICAgICAgIG91dCB0aGUgdW5kZXJseWluZyBhcnJheSBpcyB1
c2VmdWwuCi0KLSAgICAgICAgICAgICAgQSBzaW1wbGUgZXhhbXBsZSBvZiB1c2FnZToKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwZXRzID0gWydkb2cn
LCAnY2F0JywgJ2Zpc2gnXTsKLSAgICAgICAgICAgICAgdmFyIGFwID0gRW1iZXIuQXJyYXlQcm94
eS5jcmVhdGUoeyBjb250ZW50OiBFbWJlci5BKHBldHMpIH0pOwotCi0gICAgICAgICAgICAgIGFw
LmdldCgnZmlyc3RPYmplY3QnKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9nJwotICAg
ICAgICAgICAgICBhcC5zZXQoJ2NvbnRlbnQnLCBbJ2Ftb2ViYScsICdwYXJhbWVjaXVtJ10pOwot
ICAgICAgICAgICAgICBhcC5nZXQoJ2ZpcnN0T2JqZWN0Jyk7ICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gJ2Ftb2ViYScKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyBj
bGFzcyBjYW4gYWxzbyBiZSB1c2VmdWwgYXMgYSBsYXllciB0byB0cmFuc2Zvcm0gdGhlIGNvbnRl
bnRzIG9mCi0gICAgICAgICAgICAgIGFuIGFycmF5LCBhcyB0aGV5IGFyZSBhY2Nlc3NlZC4gVGhp
cyBjYW4gYmUgZG9uZSBieSBvdmVycmlkaW5nCi0gICAgICAgICAgICAgIGBvYmplY3RBdENvbnRl
bnRgOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHBl
dHMgPSBbJ2RvZycsICdjYXQnLCAnZmlzaCddOwotICAgICAgICAgICAgICB2YXIgYXAgPSBFbWJl
ci5BcnJheVByb3h5LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICBjb250ZW50OiBFbWJlci5B
KHBldHMpLAotICAgICAgICAgICAgICAgICAgb2JqZWN0QXRDb250ZW50OiBmdW5jdGlvbihpZHgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2NvbnRlbnQnKS5vYmpl
Y3RBdChpZHgpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgIGFwLmdldCgnZmlyc3RPYmplY3QnKTsgLy8gLiAnRE9H
JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgQXJyYXlQcm94eQot
ICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVt
YmVyLk9iamVjdAotICAgICAgICAgICAgICBAdXNlcyBFbWJlci5NdXRhYmxlQXJyYXkKLSAgICAg
ICAgICAgICovCi0gICAgICAgIHZhciBBcnJheVByb3h5ID0gRW1iZXJPYmplY3QuZXh0ZW5kKE11
dGFibGVBcnJheSwgewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhl
IGNvbnRlbnQgYXJyYXkuIE11c3QgYmUgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyBgRW1iZXIu
QXJyYXlgIGFuZC9vcgotICAgICAgICAgICAgICAgICAgICBgRW1iZXIuTXV0YWJsZUFycmF5LmAK
LQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udGVudAotICAgICAgICAgICAgICAg
ICAgICBAdHlwZSBFbWJlci5BcnJheQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGNvbnRlbnQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFRo
ZSBhcnJheSB0aGF0IHRoZSBwcm94eSBwcmV0ZW5kcyB0byBiZS4gSW4gdGhlIGRlZmF1bHQgYEFy
cmF5UHJveHlgCi0gICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24sIHRoaXMgYW5kIGBj
b250ZW50YCBhcmUgdGhlIHNhbWUuIFN1YmNsYXNzZXMgb2YgYEFycmF5UHJveHlgCi0gICAgICAg
ICAgICAgICAgICAgY2FuIG92ZXJyaWRlIHRoaXMgcHJvcGVydHkgdG8gcHJvdmlkZSB0aGluZ3Mg
bGlrZSBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcuCi0KLSAgICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgYXJyYW5nZWRDb250ZW50Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXJy
YW5nZWRDb250ZW50OiBhbGlhcygnY29udGVudCcpLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgU2hvdWxkIGFjdHVhbGx5IHJldHJpZXZlIHRoZSBvYmplY3QgYXQgdGhl
IHNwZWNpZmllZCBpbmRleCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICBjb250ZW50LiBZ
b3UgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHN1YmNsYXNzZXMgdG8gdHJhbnNmb3JtIHRo
ZQotICAgICAgICAgICAgICAgICAgICBjb250ZW50IGl0ZW0gdG8gc29tZXRoaW5nIG5ldy4KLQot
ICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIGNv
bnRlbnQgaXMgbm9uLWBudWxsYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9iamVj
dEF0Q29udGVudAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gaWR4IFRoZSBp
bmRleCB0byByZXRyaWV2ZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0
aGUgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIG5vbmUgZm91bmQKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBvYmplY3RBdENvbnRlbnQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpLm9iamVjdEF0KGlkeCk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
U2hvdWxkIGFjdHVhbGx5IHJlcGxhY2UgdGhlIHNwZWNpZmllZCBvYmplY3RzIG9uIHRoZSBjb250
ZW50IGFycmF5LgotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgbWV0
aG9kIGluIHN1YmNsYXNzZXMgdG8gdHJhbnNmb3JtIHRoZSBjb250ZW50IGl0ZW0KLSAgICAgICAg
ICAgICAgICAgICAgaW50byBzb21ldGhpbmcgbmV3LgotCi0gICAgICAgICAgICAgICAgICAgIFRo
aXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgY29udGVudCBpcyBub24tYG51bGxgLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVwbGFjZUNvbnRlbnQKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGlkeCBUaGUgc3RhcnRpbmcgaW5kZXgKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGFtdCBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJl
bW92ZSBmcm9tIHRoZSBjb250ZW50LgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5
fSBvYmplY3RzIE9wdGlvbmFsIGFycmF5IG9mIG9iamVjdHMgdG8gaW5zZXJ0IG9yIG51bGwgaWYg
bm8KLSAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLgotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHt2b2lkfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VD
b250ZW50OiBmdW5jdGlvbihpZHgsIGFtdCwgb2JqZWN0cykgewotICAgICAgICAgICAgICAgIGdl
dCh0aGlzLCAnY29udGVudCcpLnJlcGxhY2UoaWR4LCBhbXQsIG9iamVjdHMpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEludm9rZWQgd2hl
biB0aGUgY29udGVudCBwcm9wZXJ0eSBpcyBhYm91dCB0byBjaGFuZ2UuIE5vdGlmaWVzIG9ic2Vy
dmVycyB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICBlbnRpcmUgYXJyYXkgY29udGVudCB3
aWxsIGNoYW5nZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIF9jb250ZW50V2lsbENoYW5nZQotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF9jb250ZW50V2lsbENoYW5nZTogYmVmb3JlT2JzZXJ2ZXIoJ2NvbnRlbnQn
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZWFyZG93bkNvbnRlbnQoKTsK
LSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfdGVhcmRvd25Db250ZW50OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGVudC5yZW1vdmVBcnJheU9ic2VydmVyKHRoaXMsIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbGxDaGFuZ2U6ICdjb250ZW50QXJyYXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZENoYW5nZTogJ2NvbnRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgY29udGVudEFycmF5V2lsbENoYW5nZTogSywKLSAgICAgICAgICAgIGNvbnRlbnRBcnJh
eURpZENoYW5nZTogSywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElu
dm9rZWQgd2hlbiB0aGUgY29udGVudCBwcm9wZXJ0eSBjaGFuZ2VzLiBOb3RpZmllcyBvYnNlcnZl
cnMgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgZW50aXJlIGFycmF5IGNvbnRlbnQgaGFz
IGNoYW5nZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBfY29udGVudERpZENoYW5nZQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIF9jb250ZW50RGlkQ2hhbmdlOiBvYnNlcnZlcignY29udGVudCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50Jyk7
Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIkNhbid0IHNldCBBcnJheVByb3h5J3Mg
Y29udGVudCB0byBpdHNlbGYiLCBjb250ZW50ICE9PSB0aGlzKTsKLQotICAgICAgICAgICAgICAg
IHRoaXMuX3NldHVwQ29udGVudCgpOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9z
ZXR1cENvbnRlbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0g
Z2V0KHRoaXMsICdjb250ZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCkgewot
ICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZm10KCdBcnJheVByb3h5IGV4cGVjdHMg
YW4gQXJyYXkgb3IgJyArCi0gICAgICAgICAgICAgICAgICAgICdFbWJlci5BcnJheVByb3h5LCBi
dXQgeW91IHBhc3NlZCAlQCcsIFt0eXBlb2YgY29udGVudF0pLAotICAgICAgICAgICAgICAgICAg
ICBpc0FycmF5KGNvbnRlbnQpIHx8IGNvbnRlbnQuaXNEZXN0cm95ZWQpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRlbnQuYWRkQXJyYXlPYnNlcnZlcih0aGlzLCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3aWxsQ2hhbmdlOiAnY29udGVudEFycmF5V2lsbENoYW5nZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkaWRDaGFuZ2U6ICdjb250ZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIF9hcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcign
YXJyYW5nZWRDb250ZW50JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFycmFu
Z2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5nZWRDb250ZW50JyksCi0gICAgICAgICAgICAg
ICAgbGVuID0gYXJyYW5nZWRDb250ZW50ID8gZ2V0KGFycmFuZ2VkQ29udGVudCwgJ2xlbmd0aCcp
IDogMDsKLQotICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50QXJyYXlXaWxsQ2hh
bmdlKHRoaXMsIDAsIGxlbiwgdW5kZWZpbmVkKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFycmFu
Z2VkQ29udGVudFdpbGxDaGFuZ2UodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl90ZWFy
ZG93bkFycmFuZ2VkQ29udGVudChhcnJhbmdlZENvbnRlbnQpOwotICAgICAgICAgICAgfSksCi0K
LSAgICAgICAgICAgIF9hcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6IG9ic2VydmVyKCdhcnJhbmdl
ZENvbnRlbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYW5nZWRDb250
ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBsZW4g
PSBhcnJhbmdlZENvbnRlbnQgPyBnZXQoYXJyYW5nZWRDb250ZW50LCAnbGVuZ3RoJykgOiAwOwot
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJDYW4ndCBzZXQgQXJyYXlQcm94eSdzIGNv
bnRlbnQgdG8gaXRzZWxmIiwgYXJyYW5nZWRDb250ZW50ICE9PSB0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIHRoaXMuX3NldHVwQXJyYW5nZWRDb250ZW50KCk7Ci0KLSAgICAgICAgICAgICAgICB0
aGlzLmFycmFuZ2VkQ29udGVudERpZENoYW5nZSh0aGlzKTsKLSAgICAgICAgICAgICAgICB0aGlz
LmFycmFuZ2VkQ29udGVudEFycmF5RGlkQ2hhbmdlKHRoaXMsIDAsIHVuZGVmaW5lZCwgbGVuKTsK
LSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfc2V0dXBBcnJhbmdlZENvbnRlbnQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQgPSBnZXQodGhp
cywgJ2FycmFuZ2VkQ29udGVudCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFycmFuZ2VkQ29u
dGVudCkgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZm10KCdBcnJheVByb3h5
IGV4cGVjdHMgYW4gQXJyYXkgb3IgJyArCi0gICAgICAgICAgICAgICAgICAgICdFbWJlci5BcnJh
eVByb3h5LCBidXQgeW91IHBhc3NlZCAlQCcsIFt0eXBlb2YgYXJyYW5nZWRDb250ZW50XSksCi0g
ICAgICAgICAgICAgICAgICAgIGlzQXJyYXkoYXJyYW5nZWRDb250ZW50KSB8fCBhcnJhbmdlZENv
bnRlbnQuaXNEZXN0cm95ZWQpOwotCi0gICAgICAgICAgICAgICAgICAgIGFycmFuZ2VkQ29udGVu
dC5hZGRBcnJheU9ic2VydmVyKHRoaXMsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxD
aGFuZ2U6ICdhcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2UnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkQ2hhbmdlOiAnYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIF90ZWFyZG93bkFycmFuZ2VkQ29udGVudDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5nZWRDb250
ZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYW5nZWRDb250ZW50KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudC5yZW1vdmVBcnJheU9ic2VydmVyKHRoaXMsIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICdhcnJhbmdlZENvbnRlbnRBcnJh
eVdpbGxDaGFuZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlOiAnYXJyYW5n
ZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFycmFuZ2VkQ29udGVu
dFdpbGxDaGFuZ2U6IEssCi0gICAgICAgICAgICBhcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6IEss
Ci0KLSAgICAgICAgICAgIG9iamVjdEF0OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0KHRoaXMsICdjb250ZW50JykgJiYgdGhpcy5vYmplY3RBdENvbnRlbnQoaWR4
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxlbmd0aDogY29tcHV0ZWQoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAn
YXJyYW5nZWRDb250ZW50Jyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFycmFuZ2VkQ29udGVu
dCA/IGdldChhcnJhbmdlZENvbnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0gICAgICAgICAgICAgICAg
Ly8gTm8gZGVwZW5kZW5jaWVzIHNpbmNlIEVudW1lcmFibGUgbm90aWZpZXMgbGVuZ3RoIG9mIGNo
YW5nZQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9yZXBsYWNlOiBmdW5jdGlvbihp
ZHgsIGFtdCwgb2JqZWN0cykgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRo
aXMsICdjb250ZW50Jyk7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdUaGUgY29udGVu
dCBwcm9wZXJ0eSBvZiAnICsgdGhpcy5jb25zdHJ1Y3RvciArICcgc2hvdWxkIGJlIHNldCBiZWZv
cmUgbW9kaWZ5aW5nIGl0JywgY29udGVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQp
IAotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZW50KGlkeCwgYW10LCBvYmpl
Y3RzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQo
dGhpcywgJ2FycmFuZ2VkQ29udGVudCcpID09PSBnZXQodGhpcywgJ2NvbnRlbnQnKSkgewotICAg
ICAgICAgICAgICAgICAgICBhcHBseSh0aGlzLCB0aGlzLl9yZXBsYWNlLCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
bWJlckVycm9yKCJVc2luZyByZXBsYWNlIG9uIGFuIGFycmFuZ2VkIEFycmF5UHJveHkgaXMgbm90
IGFsbG93ZWQuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgX2luc2VydEF0OiBmdW5jdGlvbihpZHgsIG9iamVjdCkgewotICAgICAgICAgICAgICAg
IGlmIChpZHggPiBnZXQodGhpcywgJ2NvbnRlbnQubGVuZ3RoJykpIAotICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihPVVRfT0ZfUkFOR0VfRVhDRVBUSU9OKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9yZXBsYWNlKGlkeCwgMCwgW29iamVjdF0pOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW5zZXJ0QXQ6
IGZ1bmN0aW9uKGlkeCwgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAn
YXJyYW5nZWRDb250ZW50JykgPT09IGdldCh0aGlzLCAnY29udGVudCcpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRBdChpZHgsIG9iamVjdCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3Io
IlVzaW5nIGluc2VydEF0IG9uIGFuIGFycmFuZ2VkIEFycmF5UHJveHkgaXMgbm90IGFsbG93ZWQu
Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVt
b3ZlQXQ6IGZ1bmN0aW9uKHN0YXJ0LCBsZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoJ251bWJl
cicgPT09IHR5cGVvZiBzdGFydCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9
IGdldCh0aGlzLCAnY29udGVudCcpLAotICAgICAgICAgICAgICAgICAgICBhcnJhbmdlZENvbnRl
bnQgPSBnZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpLAotICAgICAgICAgICAgICAgICAgICBp
bmRpY2VzID0gW10sIGk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChzdGFydCA8IDApIHx8
IChzdGFydCA+PSBnZXQodGhpcywgJ2xlbmd0aCcpKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobGVuID09PSB1bmRlZmlu
ZWQpIAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gMTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBHZXQgYSBsaXN0IG9mIGluZGljZXMgaW4gb3JpZ2luYWwgY29udGVudCB0byByZW1v
dmUKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGxlbjsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYXJyYW5nZWRDb250ZW50IGhl
cmUgc28gd2UgYXZvaWQgY29uZnVzaW9uIHdpdGggb2JqZWN0cyB0cmFuc2Zvcm1lZCBieSBvYmpl
Y3RBdENvbnRlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChjb250ZW50
LmluZGV4T2YoYXJyYW5nZWRDb250ZW50Lm9iamVjdEF0KGkpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGluIHJldmVyc2Ugb3JkZXIg
c2luY2UgaW5kaWNlcyB3aWxsIGNoYW5nZQotICAgICAgICAgICAgICAgICAgICBpbmRpY2VzLnNv
cnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIgLSBh
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBiZWdpblBy
b3BlcnR5Q2hhbmdlcygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5k
aWNlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFj
ZShpbmRpY2VzW2ldLCAxLCBFTVBUWSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZW5kUHJvcGVydHlDaGFuZ2VzKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgcHVzaE9iamVjdDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5z
ZXJ0QXQoZ2V0KHRoaXMsICdjb250ZW50Lmxlbmd0aCcpLCBvYmopIDsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqIDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHB1c2hPYmplY3Rz
OiBmdW5jdGlvbihvYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoRW51bWVyYWJsZS5k
ZXRlY3Qob2JqZWN0cykgfHwgaXNBcnJheShvYmplY3RzKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBwYXNzIEVtYmVyLkVudW1lcmFibGUgdG8gRW1i
ZXIuTXV0YWJsZUFycmF5I3B1c2hPYmplY3RzIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRoaXMuX3JlcGxhY2UoZ2V0KHRoaXMsICdsZW5ndGgnKSwgMCwgb2JqZWN0cyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBzZXRPYmplY3RzOiBmdW5jdGlvbihvYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG9iamVjdHMubGVuZ3RoID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y2xlYXIoKTsKLQotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcp
OwotICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2UoMCwgbGVuLCBvYmplY3RzKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHVu
c2hpZnRPYmplY3Q6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgICAgIHRoaXMuX2luc2Vy
dEF0KDAsIG9iaikgOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmogOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgdW5zaGlmdE9iamVjdHM6IGZ1bmN0aW9uKG9iamVjdHMpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlKDAsIDAsIG9iamVjdHMpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2xpY2U6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnRvQXJyYXkoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXJyLnNsaWNlLmFwcGx5KGFyciwgYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudEFycmF5V2lsbENoYW5n
ZTogZnVuY3Rpb24oaXRlbSwgaWR4LCByZW1vdmVkQ250LCBhZGRlZENudCkgewotICAgICAgICAg
ICAgICAgIHRoaXMuYXJyYXlDb250ZW50V2lsbENoYW5nZShpZHgsIHJlbW92ZWRDbnQsIGFkZGVk
Q250KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudEFycmF5
RGlkQ2hhbmdlOiBmdW5jdGlvbihpdGVtLCBpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250KSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5hcnJheUNvbnRlbnREaWRDaGFuZ2UoaWR4LCByZW1vdmVkQ250
LCBhZGRlZENudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgICAgIHRo
aXMuX3NldHVwQ29udGVudCgpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwQXJyYW5nZWRD
b250ZW50KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB3aWxsRGVzdHJveTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGVhcmRvd25BcnJhbmdlZENvbnRlbnQo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLl90ZWFyZG93bkNvbnRlbnQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEFycmF5
UHJveHk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9jb250YWlu
ZXIiLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImV4cG9ydHMiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0g
ICAgICAgIHZhciBDb250YWluZXIgPSByZXF1aXJlTW9kdWxlKCdjb250YWluZXInKVsiZGVmYXVs
dCJdOwotICAgICAgICBDb250YWluZXIuc2V0ID0gc2V0OwotCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBDb250YWluZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50
aW1lL3N5c3RlbS9jb3JlX29iamVjdCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVy
LW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXIt
bWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvd2F0Y2hp
bmciLCAiZW1iZXItbWV0YWwvY2hhaW5zIiwgImVtYmVyLW1ldGFsL2V2ZW50cyIsICJlbWJlci1t
ZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFs
L2Vycm9yIiwgImVtYmVyLXJ1bnRpbWUva2V5cyIsICJlbWJlci1ydW50aW1lL21peGlucy9hY3Rp
b25faGFuZGxlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL2JpbmRp
bmciLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZXhw
b3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVu
ZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5
X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18s
IF9fZGVwZW5kZW5jeTEzX18sIF9fZGVwZW5kZW5jeTE0X18sIF9fZGVwZW5kZW5jeTE1X18sIF9f
ZGVwZW5kZW5jeTE2X18sIF9fZGVwZW5kZW5jeTE3X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICAvLyBFbWJlci5FTlYuTUFOREFUT1JZX1NFVFRFUiwgRW1iZXIuYXNzZXJ0LCBFbWJlci5LLCBF
bWJlci5jb25maWcKLQotICAgICAgICAvLyBOT1RFOiB0aGlzIG9iamVjdCBzaG91bGQgbmV2ZXIg
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIEluc3RlYWQgdXNlIGBFbWJlci5PYmplY3RgLgotICAgICAg
ICAvLyBXZSBvbmx5IGRlZmluZSB0aGlzIHNlcGFyYXRlbHkgc28gdGhhdCBgRW1iZXIuU2V0YCBj
YW4gZGVwZW5kIG9uIGl0LgotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsK
LSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBndWlk
Rm9yID0gX19kZXBlbmRlbmN5NF9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVw
ZW5kZW5jeTRfXy5hcHBseTsKLSAgICAgICAgdmFyIG9fY3JlYXRlID0gX19kZXBlbmRlbmN5NV9f
LmNyZWF0ZTsKLSAgICAgICAgdmFyIGdlbmVyYXRlR3VpZCA9IF9fZGVwZW5kZW5jeTRfXy5nZW5l
cmF0ZUd1aWQ7Ci0gICAgICAgIHZhciBHVUlEX0tFWSA9IF9fZGVwZW5kZW5jeTRfXy5HVUlEX0tF
WTsKLSAgICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVuY3k0X18ubWV0YTsKLSAgICAgICAgdmFy
IE1FVEFfS0VZID0gX19kZXBlbmRlbmN5NF9fLk1FVEFfS0VZOwotICAgICAgICB2YXIgbWFrZUFy
cmF5ID0gX19kZXBlbmRlbmN5NF9fLm1ha2VBcnJheTsKLSAgICAgICAgdmFyIHJld2F0Y2ggPSBf
X2RlcGVuZGVuY3k2X18ucmV3YXRjaDsKLSAgICAgICAgdmFyIGZpbmlzaENoYWlucyA9IF9fZGVw
ZW5kZW5jeTdfXy5maW5pc2hDaGFpbnM7Ci0gICAgICAgIHZhciBzZW5kRXZlbnQgPSBfX2RlcGVu
ZGVuY3k4X18uc2VuZEV2ZW50OwotICAgICAgICB2YXIgSVNfQklORElORyA9IF9fZGVwZW5kZW5j
eTlfXy5JU19CSU5ESU5HOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k5X18uTWl4
aW47Ci0gICAgICAgIHZhciByZXF1aXJlZCA9IF9fZGVwZW5kZW5jeTlfXy5yZXF1aXJlZDsKLSAg
ICAgICAgdmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3kxMF9fLmluZGV4T2Y7Ci0gICAgICAgIHZh
ciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
cGxhdGZvcm0gPSBfX2RlcGVuZGVuY3k1X18ucGxhdGZvcm07Ci0gICAgICAgIHZhciBrZXlzID0g
X19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQWN0aW9uSGFuZGxlciA9
IF9fZGVwZW5kZW5jeTEzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5
ID0gX19kZXBlbmRlbmN5MTRfXy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIEJpbmRpbmcg
PSBfX2RlcGVuZGVuY3kxNV9fLkJpbmRpbmc7Ci0gICAgICAgIHZhciBDb21wdXRlZFByb3BlcnR5
ID0gX19kZXBlbmRlbmN5MTZfXy5Db21wdXRlZFByb3BlcnR5OwotICAgICAgICB2YXIgcnVuID0g
X19kZXBlbmRlbmN5MTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZGVzdHJveSA9IF9fZGVw
ZW5kZW5jeTZfXy5kZXN0cm95OwotCi0gICAgICAgIHZhciBLID0gX19kZXBlbmRlbmN5MV9fLks7
Ci0gICAgICAgIHZhciBvX2RlZmluZVByb3BlcnR5ID0gcGxhdGZvcm0uZGVmaW5lUHJvcGVydHk7
Ci0gICAgICAgIHZhciBzY2hlZHVsZSA9IHJ1bi5zY2hlZHVsZTsKLSAgICAgICAgdmFyIGFwcGx5
TWl4aW4gPSBNaXhpbi5fYXBwbHk7Ci0gICAgICAgIHZhciBmaW5pc2hQYXJ0aWFsID0gTWl4aW4u
ZmluaXNoUGFydGlhbDsKLSAgICAgICAgdmFyIHJlb3BlbiA9IE1peGluLnByb3RvdHlwZS5yZW9w
ZW47Ci0gICAgICAgIHZhciBNQU5EQVRPUllfU0VUVEVSID0gRW1iZXIuRU5WLk1BTkRBVE9SWV9T
RVRURVI7Ci0gICAgICAgIHZhciBoYXNDYWNoZWRDb21wdXRlZFByb3BlcnRpZXMgPSBmYWxzZTsK
LQotICAgICAgICB2YXIgdW5kZWZpbmVkRGVzY3JpcHRvciA9IHsKLSAgICAgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAotICAgICAgICAgICAg
ZW51bWVyYWJsZTogZmFsc2UsCi0gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkCi0gICAgICAg
IH07Ci0KLSAgICAgICAgdmFyIG51bGxEZXNjcmlwdG9yID0gewotICAgICAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICBl
bnVtZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIHZhbHVlOiBudWxsCi0gICAgICAgIH07Ci0K
LSAgICAgICAgZnVuY3Rpb24gbWFrZUN0b3IoKSB7Ci0KLSAgICAgICAgICAgIC8vIE5vdGU6IGF2
b2lkIGFjY2Vzc2luZyBhbnkgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0IHNpbmNlIGl0IG1ha2Vz
IHRoZQotICAgICAgICAgICAgLy8gbWV0aG9kIGEgbG90IGZhc3Rlci4gVGhpcyBpcyBnbHVlIGNv
ZGUgc28gd2Ugd2FudCBpdCB0byBiZSBhcyBmYXN0IGFzCi0gICAgICAgICAgICAvLyBwb3NzaWJs
ZS4KLQotICAgICAgICAgICAgdmFyIHdhc0FwcGxpZWQgPSBmYWxzZSwgaW5pdE1peGlucywgaW5p
dFByb3BlcnRpZXM7Ci0KLSAgICAgICAgICAgIHZhciBDbGFzcyA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIGlmICghd2FzQXBwbGllZCkgewotICAgICAgICAgICAgICAgICAgICBDbGFz
cy5wcm90bygpOyAvLyBwcmVwYXJlIHByb3RvdHlwZS4uLgotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBvX2RlZmluZVByb3BlcnR5KHRoaXMsIEdVSURfS0VZLCBudWxsRGVzY3Jp
cHRvcik7Ci0gICAgICAgICAgICAgICAgb19kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19uZXh0U3Vw
ZXInLCB1bmRlZmluZWREZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICB2YXIgbSA9IG1ldGEo
dGhpcyksIHByb3RvID0gbS5wcm90bzsKLSAgICAgICAgICAgICAgICBtLnByb3RvID0gdGhpczsK
LSAgICAgICAgICAgICAgICBpZiAoaW5pdE1peGlucykgewotICAgICAgICAgICAgICAgICAgICAv
LyBjYXB0dXJlIGxvY2FsbHkgc28gd2UgY2FuIGNsZWFyIHRoZSBjbG9zZWQgb3ZlciB2YXJpYWJs
ZQotICAgICAgICAgICAgICAgICAgICB2YXIgbWl4aW5zID0gaW5pdE1peGluczsKLSAgICAgICAg
ICAgICAgICAgICAgaW5pdE1peGlucyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGx5
KHRoaXMsIHRoaXMucmVvcGVuLCBtaXhpbnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoaW5pdFByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY2Fw
dHVyZSBsb2NhbGx5IHNvIHdlIGNhbiBjbGVhciB0aGUgY2xvc2VkIG92ZXIgdmFyaWFibGUKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHByb3BzID0gaW5pdFByb3BlcnRpZXM7Ci0gICAgICAgICAg
ICAgICAgICAgIGluaXRQcm9wZXJ0aWVzID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICB2
YXIgY29uY2F0ZW5hdGVkUHJvcGVydGllcyA9IHRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllczsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHByb3BzLmxlbmd0aDsg
aSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBw
cm9wc1tpXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJFbWJlci5P
YmplY3QuY3JlYXRlIG5vIGxvbmdlciBzdXBwb3J0cyBtaXhpbmcgaW4gb3RoZXIgZGVmaW5pdGlv
bnMsIHVzZSBjcmVhdGVXaXRoTWl4aW5zIGluc3RlYWQuIiwgIShwcm9wZXJ0aWVzIGluc3RhbmNl
b2YgTWl4aW4pKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0
aWVzICE9PSAnb2JqZWN0JyAmJiBwcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiRW1iZXIuT2JqZWN0LmNy
ZWF0ZSBvbmx5IGFjY2VwdHMgb2JqZWN0cy4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lcyA9IGtleXMocHJvcGVydGllcyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsbCA9IGtleU5hbWVz
Lmxlbmd0aDsgaiA8IGxsOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
a2V5TmFtZSA9IGtleU5hbWVzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
cHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleU5h
bWVdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX0JJTkRJTkcudGVzdChr
ZXlOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmluZGluZ3Mg
PSBtLmJpbmRpbmdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJpbmRp
bmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncyA9IG0u
YmluZGluZ3MgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghbS5oYXNPd25Qcm9wZXJ0eSgnYmluZGluZ3MnKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZGluZ3MgPSBtLmJpbmRpbmdzID0gb19jcmVhdGUobS5iaW5kaW5n
cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZGluZ3Nba2V5TmFtZV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzYyA9
IG0uZGVzY3Nba2V5TmFtZV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoIkVtYmVyLk9iamVjdC5jcmVhdGUgbm8gbG9uZ2VyIHN1cHBvcnRzIGRlZmluaW5nIGNv
bXB1dGVkIHByb3BlcnRpZXMuIERlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHVzaW5nIGV4dGVu
ZCgpIG9yIHJlb3BlbigpIGJlZm9yZSBjYWxsaW5nIGNyZWF0ZSgpLiIsICEodmFsdWUgaW5zdGFu
Y2VvZiBDb21wdXRlZFByb3BlcnR5KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJFbWJlci5PYmplY3QuY3JlYXRlIG5vIGxvbmdlciBzdXBwb3J0cyBkZWZpbmlu
ZyBtZXRob2RzIHRoYXQgY2FsbCBfc3VwZXIuIiwgISh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlv
bicgJiYgdmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCcuX3N1cGVyJykgIT09IC0xKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJgYWN0aW9uc2AgbXVzdCBiZSBw
cm92aWRlZCBhdCBleHRlbmQgdGltZSwgbm90IGF0IGNyZWF0ZSAiICsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGltZSwgd2hlbiBFbWJlci5BY3Rpb25IYW5kbGVyIGlzIHVzZWQgKGku
ZS4gdmlld3MsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb250cm9sbGVycyAm
IHJvdXRlcykuIiwgISgoa2V5TmFtZSA9PT0gJ2FjdGlvbnMnKSAmJiBBY3Rpb25IYW5kbGVyLmRl
dGVjdCh0aGlzKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmNhdGVu
YXRlZFByb3BlcnRpZXMgJiYgaW5kZXhPZihjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLCBrZXlOYW1l
KSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlVmFsdWUg
PSB0aGlzW2tleU5hbWVdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
YXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnZnVu
Y3Rpb24nID09PSB0eXBlb2YgYmFzZVZhbHVlLmNvbmNhdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZVZhbHVlLmNvbmNhdCh2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWFrZUFycmF5KGJhc2VWYWx1ZSku
Y29uY2F0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWFrZUFycmF5KHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc2Muc2V0KHRoaXMsIGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIHRoaXMuc2V0VW5rbm93blByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYm
ICEoa2V5TmFtZSBpbiB0aGlzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5zZXRVbmtub3duUHJvcGVydHkoa2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE1BTkRBVE9SWV9TRVRURVIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleU5h
bWUsIG51bGwsIHZhbHVlKTsgLy8gc2V0dXAgbWFuZGF0b3J5IHNldHRlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc1trZXlOYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGZpbmlzaFBhcnRpYWwodGhpcywgbSk7Ci0gICAgICAgICAgICAgICAgYXBw
bHkodGhpcywgdGhpcy5pbml0LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIG0ucHJvdG8g
PSBwcm90bzsKLSAgICAgICAgICAgICAgICBmaW5pc2hDaGFpbnModGhpcyk7Ci0gICAgICAgICAg
ICAgICAgc2VuZEV2ZW50KHRoaXMsICJpbml0Iik7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICBDbGFzcy50b1N0cmluZyA9IE1peGluLnByb3RvdHlwZS50b1N0cmluZzsKLSAgICAgICAg
ICAgIENsYXNzLndpbGxSZW9wZW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAo
d2FzQXBwbGllZCkgewotICAgICAgICAgICAgICAgICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbiA9
IE1peGluLmNyZWF0ZShDbGFzcy5Qcm90b3R5cGVNaXhpbik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgd2FzQXBwbGllZCA9IGZhbHNlOwotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIENsYXNzLl9pbml0TWl4aW5zID0gZnVuY3Rpb24oYXJncykgewotICAgICAgICAg
ICAgICAgIGluaXRNaXhpbnMgPSBhcmdzOwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIENs
YXNzLl9pbml0UHJvcGVydGllcyA9IGZ1bmN0aW9uKGFyZ3MpIHsKLSAgICAgICAgICAgICAgICBp
bml0UHJvcGVydGllcyA9IGFyZ3M7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBDbGFz
cy5wcm90byA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBzdXBlcmNsYXNzID0g
Q2xhc3Muc3VwZXJjbGFzczsKLSAgICAgICAgICAgICAgICBpZiAoc3VwZXJjbGFzcykgewotICAg
ICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzLnByb3RvKCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCF3YXNBcHBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHdhc0FwcGxpZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBDbGFzcy5Qcm90b3R5cGVN
aXhpbi5hcHBseVBhcnRpYWwoQ2xhc3MucHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV3YXRjaChDbGFzcy5wcm90b3R5cGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIHJldHVybiBDbGFzczsKLQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIEBjbGFzcyBDb3JlT2JqZWN0Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAg
ICAgICAgICAgICovCi0gICAgICAgIHZhciBDb3JlT2JqZWN0ID0gbWFrZUN0b3IoKTsKLSAgICAg
ICAgQ29yZU9iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJu
ICJFbWJlci5Db3JlT2JqZWN0IjsKLSAgICAgICAgfTsKLQotICAgICAgICBDb3JlT2JqZWN0LlBy
b3RvdHlwZU1peGluID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgIHJlb3BlbjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlNaXhpbih0aGlzLCBhcmd1bWVudHMsIHRydWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFuIG92ZXJyaWRhYmxlIG1ldGhvZCBjYWxs
ZWQgd2hlbiBvYmplY3RzIGFyZSBpbnN0YW50aWF0ZWQuIEJ5IGRlZmF1bHQsCi0gICAgICAgICAg
ICAgICAgICAgIGRvZXMgbm90aGluZyB1bmxlc3MgaXQgaXMgb3ZlcnJpZGRlbiBkdXJpbmcgY2xh
c3MgZGVmaW5pdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAg
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLlBlcnNv
biA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ05hbWUgaXMgJyArIHRo
aXMuZ2V0KCduYW1lJykpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXZlID0gQXBwLlBlcnNvbi5j
cmVhdGUoewotICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJTdGV2ZSIKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnRzICdOYW1lIGlzIFN0
ZXZlJy4KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgTk9U
RTogSWYgeW91IGRvIG92ZXJyaWRlIGBpbml0YCBmb3IgYSBmcmFtZXdvcmsgY2xhc3MgbGlrZSBg
RW1iZXIuVmlld2Agb3IKLSAgICAgICAgICAgICAgICAgICAgYEVtYmVyLkFycmF5Q29udHJvbGxl
cmAsIGJlIHN1cmUgdG8gY2FsbCBgdGhpcy5fc3VwZXIoKWAgaW4geW91cgotICAgICAgICAgICAg
ICAgICAgICBgaW5pdGAgZGVjbGFyYXRpb24hIElmIHlvdSBkb24ndCwgRW1iZXIgbWF5IG5vdCBo
YXZlIGFuIG9wcG9ydHVuaXR5IHRvCi0gICAgICAgICAgICAgICAgICAgIGRvIGltcG9ydGFudCBz
ZXR1cCB3b3JrLCBhbmQgeW91J2xsIHNlZSBzdHJhbmdlIGJlaGF2aW9yIGluIHlvdXIKLSAgICAg
ICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBpbml0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24o
KSB7fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhl
IHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIGNvbmNhdGVuYXRlZCBmcm9tIHRoZSBzdXBlcmNsYXNz
Ci0gICAgICAgICAgICAgICAgICAgIChpbnN0ZWFkIG9mIG92ZXJyaWRkZW4pLgotCi0gICAgICAg
ICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHdoZW4geW91IGV4dGVuZCBhbiBFbWJlciBjbGFzcyBh
IHByb3BlcnR5IGRlZmluZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgdGhlIHN1YmNsYXNzIG92
ZXJyaWRlcyBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSB0aGF0IGlzIGRlZmluZWQKLSAg
ICAgICAgICAgICAgICAgICAgaW4gdGhlIHN1cGVyY2xhc3MuIEhvd2V2ZXIsIHRoZXJlIGFyZSBz
b21lIGNhc2VzIHdoZXJlIGl0IGlzIHByZWZlcmFibGUKLSAgICAgICAgICAgICAgICAgICAgdG8g
YnVpbGQgdXAgYSBwcm9wZXJ0eSdzIHZhbHVlIGJ5IGNvbWJpbmluZyB0aGUgc3VwZXJjbGFzcycg
cHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2l0aCB0aGUgc3ViY2xhc3MnIHZh
bHVlLiBBbiBleGFtcGxlIG9mIHRoaXMgaW4gdXNlIHdpdGhpbiBFbWJlcgotICAgICAgICAgICAg
ICAgICAgICBpcyB0aGUgYGNsYXNzTmFtZXNgIHByb3BlcnR5IG9mIGBFbWJlci5WaWV3YC4KLQot
ICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHNvbWUgc2FtcGxlIGNvZGUgc2hvd2luZyB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29uY2F0ZW5hdGVkCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5IGFuZCBhIG5vcm1hbCBvbmU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuQmFyVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICAgICAgICBzb21lTm9uQ29uY2F0ZW5hdGVkUHJvcGVydHk6IFsn
YmFyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lczogWydiYXInXQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuRm9vQmFyVmlldyA9
IEFwcC5CYXJWaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgc29tZU5vbkNvbmNh
dGVuYXRlZFByb3BlcnR5OiBbJ2ZvbyddLAotICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZXM6IFsnZm9vJ10KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGZvb0JhclZpZXcgPSBBcHAuRm9vQmFyVmlldy5jcmVhdGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9vQmFyVmlldy5nZXQoJ3NvbWVOb25Db25jYXRlbmF0ZWRQcm9wZXJ0eScpOyAv
LyBbJ2ZvbyddCi0gICAgICAgICAgICAgICAgICAgIGZvb0JhclZpZXcuZ2V0KCdjbGFzc05hbWVz
Jyk7IC8vIFsnZW1iZXItdmlldycsICdiYXInLCAnZm9vJ10KLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBleHRlbmRzIHRvIG9iamVj
dCBjcmVhdGlvbiBhcyB3ZWxsLiBDb250aW51aW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBh
Ym92ZSBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBBcHAuRm9vQmFyVmlldy5jcmVhdGUoewotICAgICAg
ICAgICAgICAgICAgICAgIHNvbWVOb25Db25jYXRlbmF0ZWRQcm9wZXJ0eTogWydiYXonXSwKLSAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2JheiddCi0gICAgICAgICAgICAgICAg
ICAgIH0pCi0gICAgICAgICAgICAgICAgICAgIHZpZXcuZ2V0KCdzb21lTm9uQ29uY2F0ZW5hdGVk
UHJvcGVydHknKTsgLy8gWydiYXonXQotICAgICAgICAgICAgICAgICAgICB2aWV3LmdldCgnY2xh
c3NOYW1lcycpOyAvLyBbJ2VtYmVyLXZpZXcnLCAnYmFyJywgJ2ZvbycsICdiYXonXQotICAgICAg
ICAgICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAgICAgICAgQWRkaW5nIGEgc2luZ2xlIHBy
b3BlcnR5IHRoYXQgaXMgbm90IGFuIGFycmF5IHdpbGwganVzdCBhZGQgaXQgaW4gdGhlIGFycmF5
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHZpZXcgPSBBcHAuRm9vQmFyVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZXM6ICdiYXonCi0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAg
ICAgICAgICAgIHZpZXcuZ2V0KCdjbGFzc05hbWVzJyk7IC8vIFsnZW1iZXItdmlldycsICdiYXIn
LCAnZm9vJywgJ2JheiddCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIFVzaW5nIHRoZSBgY29uY2F0ZW5hdGVkUHJvcGVydGllc2AgcHJvcGVydHksIHdlIGNh
biB0ZWxsIHRvIEVtYmVyIHRoYXQgbWl4Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBjb250ZW50
IG9mIHRoZSBwcm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgICAgICAgIEluIGBFbWJlci5WaWV3
YCB0aGUgYGNsYXNzTmFtZUJpbmRpbmdzYCBhbmQgYGF0dHJpYnV0ZUJpbmRpbmdzYCBwcm9wZXJ0
aWVzCi0gICAgICAgICAgICAgICAgICAgIGFyZSBhbHNvIGNvbmNhdGVuYXRlZCwgaW4gYWRkaXRp
b24gdG8gYGNsYXNzTmFtZXNgLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBp
cyBhdmFpbGFibGUgZm9yIHlvdSB0byB1c2UgdGhyb3VnaG91dCB0aGUgRW1iZXIgb2JqZWN0IG1v
ZGVsLAotICAgICAgICAgICAgICAgICAgICBhbHRob3VnaCB0eXBpY2FsIGFwcCBkZXZlbG9wZXJz
IGFyZSBsaWtlbHkgdG8gdXNlIGl0IGluZnJlcXVlbnRseS4gU2luY2UKLSAgICAgICAgICAgICAg
ICAgICAgaXQgY2hhbmdlcyBleHBlY3RhdGlvbnMgYWJvdXQgYmVoYXZpb3Igb2YgcHJvcGVydGll
cywgeW91IHNob3VsZCBwcm9wZXJseQotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCBpdHMg
dXNhZ2UgaW4gZWFjaCBpbmRpdmlkdWFsIGNvbmNhdGVuYXRlZCBwcm9wZXJ0eSAodG8gbm90Ci0g
ICAgICAgICAgICAgICAgICAgIG1pc2xlYWQgeW91ciB1c2VycyB0byB0aGluayB0aGV5IGNhbiBv
dmVycmlkZSB0aGUgcHJvcGVydHkgaW4gYSBzdWJjbGFzcykuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IGNvbmNhdGVuYXRlZFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAg
QHR5cGUgQXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IG51bGwsCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEZXN0cm95ZWQgb2JqZWN0IHBy
b3BlcnR5IGZsYWcuCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGhpcyBwcm9wZXJ0eSBpcyBg
dHJ1ZWAgdGhlIG9ic2VydmVycyBhbmQgYmluZGluZ3Mgd2VyZSBhbHJlYWR5Ci0gICAgICAgICAg
ICAgICAgICAgIHJlbW92ZWQgYnkgdGhlIGVmZmVjdCBvZiBjYWxsaW5nIHRoZSBgZGVzdHJveSgp
YCBtZXRob2QuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGlzRGVzdHJveWVkCi0g
ICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgaXNEZXN0cm95ZWQ6IGZhbHNlLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgRGVzdHJ1Y3Rpb24gc2NoZWR1bGVkIGZsYWcuIFRoZSBgZGVzdHJveSgp
YCBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBvYmpl
Y3Qgc3RheXMgaW50YWN0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wIGF0IHdoaWNoIHBv
aW50Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBgaXNEZXN0cm95ZWRgIGZsYWcgaXMgc2V0Lgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpc0Rlc3Ryb3lpbmcKLSAgICAgICAgICAg
ICAgICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBpc0Rlc3Ryb3lpbmc6IGZhbHNlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgRGVzdHJveXMgYW4gb2JqZWN0IGJ5IHNldHRpbmcgdGhlIGBpc0Rlc3Ryb3llZGAgZmxh
ZyBhbmQgcmVtb3ZpbmcgaXRzCi0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLCB3aGljaCBl
ZmZlY3RpdmVseSBkZXN0cm95cyBvYnNlcnZlcnMgYW5kIGJpbmRpbmdzLgotCi0gICAgICAgICAg
ICAgICAgICAgIElmIHlvdSB0cnkgdG8gc2V0IGEgcHJvcGVydHkgb24gYSBkZXN0cm95ZWQgb2Jq
ZWN0LCBhbiBleGNlcHRpb24gd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICByYWlzZWQuCi0K
LSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGRlc3RydWN0aW9uIGlzIHNjaGVkdWxlZCBm
b3IgdGhlIGVuZCBvZiB0aGUgcnVuIGxvb3AgYW5kIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAg
ICAgIGhhcHBlbiBpbW1lZGlhdGVseS4gIEl0IHdpbGwgc2V0IGFuIGlzRGVzdHJveWluZyBmbGFn
IGltbWVkaWF0ZWx5LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVzdHJveQotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5PYmplY3R9IHJlY2VpdmVyCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc3Ryb3lp
bmcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCB0
aGlzLndpbGxEZXN0cm95KTsKLSAgICAgICAgICAgICAgICBzY2hlZHVsZSgnZGVzdHJveScsIHRo
aXMsIHRoaXMuX3NjaGVkdWxlZERlc3Ryb3kpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IE92ZXJyaWRlIHRvIGltcGxlbWVudCB0ZWFyZG93bi4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIHdpbGxEZXN0cm95Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdp
bGxEZXN0cm95OiBLLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW52
b2tlZCBieSB0aGUgcnVuIGxvb3AgdG8gYWN0dWFsbHkgZGVzdHJveSB0aGUgb2JqZWN0LiBUaGlz
IGlzCi0gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIGJ5IHRoZSBg
ZGVzdHJveWAgbWV0aG9kLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgX3NjaGVkdWxlZERlc3Ryb3kKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBfc2NoZWR1bGVkRGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZXN0cm95KHRoaXMpOwot
ICAgICAgICAgICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgYmluZDogZnVuY3Rpb24odG8sIGZyb20pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIShmcm9tIGluc3RhbmNlb2YgQmluZGluZykpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZnJvbSA9IEJpbmRpbmcuZnJvbShmcm9tKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZnJvbS50byh0bykuY29ubmVjdCh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZnJvbTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdoaWNoIGF0dGVtcHRzIHRvIHBy
b3ZpZGUgbW9yZSBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICAgICB0aGFuIEphdmFzY3Jp
cHQncyBgdG9TdHJpbmdgIHR5cGljYWxseSBkb2VzLCBpbiBhIGdlbmVyaWMgd2F5IGZvciBhbGwg
RW1iZXIKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4KLQotICAgICAgICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5QZXJzb24gPSBFbS5PYmpl
Y3QuZXh0ZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgcGVyc29uID0gQXBwLlBlcnNvbi5jcmVh
dGUoKQotICAgICAgICAgICAgICAgICAgICBwZXJzb24udG9TdHJpbmcoKSAvLz0+ICI8QXBwLlBl
cnNvbjplbWJlcjEwMjQ+IgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBJZiB0aGUgb2JqZWN0J3MgY2xhc3MgaXMgbm90IGRlZmluZWQgb24gYW4gRW1iZXIg
bmFtZXNwYWNlLCBpdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgIGluZGljYXRlIGl0IGlzIGEg
c3ViY2xhc3Mgb2YgdGhlIHJlZ2lzdGVyZWQgc3VwZXJjbGFzczoKLQotICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgU3R1ZGVudCA9IEFwcC5QZXJz
b24uZXh0ZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgc3R1ZGVudCA9IFN0dWRlbnQuY3JlYXRl
KCkKLSAgICAgICAgICAgICAgICAgICAgc3R1ZGVudC50b1N0cmluZygpIC8vPT4gIjwoc3ViY2xh
c3Mgb2YgQXBwLlBlcnNvbik6ZW1iZXIxMDI1PiIKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIG1ldGhvZCBgdG9TdHJpbmdFeHRlbnNpb25gIGlz
IGRlZmluZWQsIGl0cyByZXR1cm4gdmFsdWUgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlZCBpbiB0aGUgb3V0cHV0LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLlRlYWNoZXIgPSBBcHAuUGVyc29uLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdFeHRlbnNpb246IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdmdWxsTmFtZScpOwotICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlYWNoZXIgPSBBcHAuVGVhY2hlci5jcmVhdGUoKQotICAgICAgICAgICAgICAg
ICAgICB0ZWFjaGVyLnRvU3RyaW5nKCk7IC8vPT4gIjxBcHAuVGVhY2hlcjplbWJlcjEwMjY6VG9t
IERhbGU+IgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIHRvU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gc3Ry
aW5nIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdG9T
dHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgICAgIHZhciBoYXNUb1N0
cmluZ0V4dGVuc2lvbiA9IHR5cGVvZiB0aGlzLnRvU3RyaW5nRXh0ZW5zaW9uID09PSAnZnVuY3Rp
b24nLAotICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGhhc1RvU3RyaW5nRXh0ZW5zaW9uID8g
IjoiICsgdGhpcy50b1N0cmluZ0V4dGVuc2lvbigpIDogJyc7Ci0gICAgICAgICAgICAgICAgdmFy
IHJldCA9ICc8JyArIHRoaXMuY29uc3RydWN0b3IudG9TdHJpbmcoKSArICc6JyArIGd1aWRGb3Io
dGhpcykgKyBleHRlbnNpb24gKyAnPic7Ci0gICAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyA9
IG1ha2VUb1N0cmluZyhyZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIENvcmVPYmplY3QuUHJvdG90eXBlTWl4aW4u
b3duZXJDb25zdHJ1Y3RvciA9IENvcmVPYmplY3Q7Ci0KLSAgICAgICAgZnVuY3Rpb24gbWFrZVRv
U3RyaW5nKHJldCkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKEVtYmVyLmNvbmZpZy5vdmVycmlkZVByb3RvdHlwZU1peGluKSB7Ci0gICAgICAgICAgICBF
bWJlci5jb25maWcub3ZlcnJpZGVQcm90b3R5cGVNaXhpbihDb3JlT2JqZWN0LlByb3RvdHlwZU1p
eGluKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvcmVPYmplY3QuX19zdXBlcl9fID0gbnVsbDsK
LQotICAgICAgICB2YXIgQ2xhc3NNaXhpbiA9IE1peGluLmNyZWF0ZSh7Ci0KLSAgICAgICAgICAg
IENsYXNzTWl4aW46IHJlcXVpcmVkKCksCi0KLSAgICAgICAgICAgIFByb3RvdHlwZU1peGluOiBy
ZXF1aXJlZCgpLAotCi0gICAgICAgICAgICBpc0NsYXNzOiB0cnVlLAotCi0gICAgICAgICAgICBp
c01ldGhvZDogZmFsc2UsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBD
cmVhdGVzIGEgbmV3IHN1YmNsYXNzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQo
ewotICAgICAgICAgICAgICAgICAgICAgIHNheTogZnVuY3Rpb24odGhpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFsZXJ0KHRoaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgVGhpcyBkZWZpbmVzIGEgbmV3IHN1YmNsYXNzIG9mIEVtYmVyLk9iamVj
dDogYEFwcC5QZXJzb25gLiBJdCBjb250YWlucyBvbmUgbWV0aG9kOiBgc2F5KClgLgotCi0gICAg
ICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzdWJjbGFzcyBmcm9tIGFueSBl
eGlzdGluZyBjbGFzcyBieSBjYWxsaW5nIGl0cyBgZXh0ZW5kKClgICBtZXRob2QuIEZvciBleGFt
cGxlLCB5b3UgbWlnaHQgd2FudCB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBFbWJlcidzIGJ1aWx0
LWluIGBFbWJlci5WaWV3YCBjbGFzczoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5QZXJzb25WaWV3ID0gRW1iZXIuVmlldy5leHRl
bmQoewotICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdsaScsCi0gICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNBZG1pbmlzdHJhdG9yJ10KLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIFdoZW4gZGVmaW5pbmcgYSBzdWJjbGFzcywgeW91IGNhbiBvdmVycmlkZSBtZXRob2Rz
IGJ1dCBzdGlsbCBhY2Nlc3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIHlvdXIgcGFyZW50IGNsYXNz
IGJ5IGNhbGxpbmcgdGhlIHNwZWNpYWwgYF9zdXBlcigpYCBtZXRob2Q6Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29uID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgc2F5OiBmdW5jdGlv
bih0aGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldCgn
bmFtZScpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQobmFtZSArICcgc2F5czogJyAr
IHRoaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Tb2xkaWVyID0gQXBwLlBlcnNvbi5leHRlbmQo
ewotICAgICAgICAgICAgICAgICAgICAgIHNheTogZnVuY3Rpb24odGhpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKHRoaW5nICsgIiwgc2lyISIpOwotICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgbWFyY2g6IGZ1bmN0aW9uKG51
bWJlck9mSG91cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMuZ2V0KCdu
YW1lJykgKyAnIG1hcmNoZXMgZm9yICcgKyBudW1iZXJPZkhvdXJzICsgJyBob3Vycy4nKQotICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHllaHVkYSA9IEFwcC5Tb2xkaWVyLmNyZWF0ZSh7Ci0gICAgICAgICAg
ICAgICAgICAgICAgbmFtZTogIlllaHVkYSBLYXR6IgotICAgICAgICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICAgICAgICB5ZWh1ZGEuc2F5KCJZZXMiKTsgIC8vIGFsZXJ0cyAiWWVo
dWRhIEthdHogc2F5czogWWVzLCBzaXIhIgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBUaGUgYGNyZWF0ZSgpYCBvbiBsaW5lICMxNyBjcmVhdGVzIGFuICpp
bnN0YW5jZSogb2YgdGhlIGBBcHAuU29sZGllcmAgY2xhc3MuIFRoZSBgZXh0ZW5kKClgIG9uIGxp
bmUgIzggY3JlYXRlcyBhICpzdWJjbGFzcyogb2YgYEFwcC5QZXJzb25gLiBBbnkgaW5zdGFuY2Ug
b2YgdGhlIGBBcHAuUGVyc29uYCBjbGFzcyB3aWxsICpub3QqIGhhdmUgdGhlIGBtYXJjaCgpYCBt
ZXRob2QuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBhc3MgYE1peGluYCBj
bGFzc2VzIHRvIGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdGhlIHN1YmNsYXNzLgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBw
LlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIHNh
eTogZnVuY3Rpb24odGhpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMu
Z2V0KCduYW1lJykgKyAnIHNheXM6ICcgKyB0aGluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuU2lu
Z2luZ01peGluID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBzaW5nOiBm
dW5jdGlvbih0aGluZyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCh0aGlzLmdldCgn
bmFtZScpICsgJyBzaW5nczogbGEgbGEgbGEgJyArIHRoaW5nKTsKLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFw
cC5Ccm9hZHdheVN0YXIgPSBBcHAuUGVyc29uLmV4dGVuZChBcHAuU2luZ2luZ01peGluLCB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgZGFuY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYWxlcnQodGhpcy5nZXQoJ25hbWUnKSArICcgZGFuY2VzOiB0YXAgdGFwIHRhcCB0
YXAgJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGBBcHAu
QnJvYWR3YXlTdGFyYCBjbGFzcyBjb250YWlucyB0aHJlZSBtZXRob2RzOiBgc2F5KClgLCBgc2lu
ZygpYCwgYW5kIGBkYW5jZSgpYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGV4dGVu
ZAotICAgICAgICAgICAgICAgICAgICBAc3RhdGljCi0KLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtNaXhpbn0gW21peGluc10qIE9uZSBvciBtb3JlIE1peGluIGNsYXNzZXMKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFthcmd1bWVudHNdKiBPYmplY3QgY29udGFpbmlu
ZyB2YWx1ZXMgdG8gdXNlIHdpdGhpbiB0aGUgbmV3IGNsYXNzCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIg
Q2xhc3MgPSBtYWtlQ3RvcigpLCBwcm90bzsKLSAgICAgICAgICAgICAgICBDbGFzcy5DbGFzc01p
eGluID0gTWl4aW4uY3JlYXRlKHRoaXMuQ2xhc3NNaXhpbik7Ci0gICAgICAgICAgICAgICAgQ2xh
c3MuUHJvdG90eXBlTWl4aW4gPSBNaXhpbi5jcmVhdGUodGhpcy5Qcm90b3R5cGVNaXhpbik7Ci0K
LSAgICAgICAgICAgICAgICBDbGFzcy5DbGFzc01peGluLm93bmVyQ29uc3RydWN0b3IgPSBDbGFz
czsKLSAgICAgICAgICAgICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbi5vd25lckNvbnN0cnVjdG9y
ID0gQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICByZW9wZW4uYXBwbHkoQ2xhc3MuUHJvdG90eXBl
TWl4aW4sIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAgICAgICBDbGFzcy5zdXBlcmNsYXNzID0g
dGhpczsKLSAgICAgICAgICAgICAgICBDbGFzcy5fX3N1cGVyX18gPSB0aGlzLnByb3RvdHlwZTsK
LQotICAgICAgICAgICAgICAgIHByb3RvID0gQ2xhc3MucHJvdG90eXBlID0gb19jcmVhdGUodGhp
cy5wcm90b3R5cGUpOwotICAgICAgICAgICAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQ2xhc3M7
Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVHdWlkKHByb3RvKTsKLSAgICAgICAgICAgICAgICBt
ZXRhKHByb3RvKS5wcm90byA9IHByb3RvOyAvLyB0aGlzIHdpbGwgZGlzYWJsZSBvYnNlcnZlcnMg
b24gcHJvdG90eXBlCi0KLSAgICAgICAgICAgICAgICBDbGFzcy5DbGFzc01peGluLmFwcGx5KENs
YXNzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ2xhc3M7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byBkb2luZyBg
ZXh0ZW5kKGFyZ3VtZW50cykuY3JlYXRlKClgLgotICAgICAgICAgICAgICAgICAgICBJZiBwb3Nz
aWJsZSB1c2UgdGhlIG5vcm1hbCBgY3JlYXRlYCBtZXRob2QgaW5zdGVhZC4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZVdpdGhNaXhpbnMKLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpYwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gW2FyZ3VtZW50c10qCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgY3JlYXRlV2l0aE1peGluczogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIEMgPSB0aGlzOwotICAgICAgICAgICAgICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0TWl4aW5z
KGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgQygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcy4gQWNjZXB0cyBlaXRoZXIgbm8g
YXJndW1lbnRzLCBvciBhbiBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB2
YWx1ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3bHkgaW5zdGFudGlhdGVkIG9iamVjdCB3aXRoLgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
QXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAg
IGhlbGxvV29ybGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQo
IkhpLCBteSBuYW1lIGlzICIgKyB0aGlzLmdldCgnbmFtZScpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHZh
ciB0b20gPSBBcHAuUGVyc29uLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFtZTog
J1RvbSBEYWxlJwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICB0b20uaGVsbG9Xb3JsZCgpOyAvLyBhbGVydHMgIkhpLCBteSBuYW1lIGlzIFRvbSBEYWxlIi4K
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgYGNyZWF0ZWAg
d2lsbCBjYWxsIHRoZSBgaW5pdGAgZnVuY3Rpb24gaWYgZGVmaW5lZCBkdXJpbmcKLSAgICAgICAg
ICAgICAgICAgICAgYEVtYmVyLkFueU9iamVjdC5leHRlbmRgCi0KLSAgICAgICAgICAgICAgICAg
ICAgSWYgbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gYGNyZWF0ZWAsIGl0IHdpbGwgbm90IHNl
dCB2YWx1ZXMgdG8gdGhlIG5ldwotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBkdXJpbmcg
aW5pdGlhbGl6YXRpb246Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICB2YXIgbm9OYW1lID0gQXBwLlBlcnNvbi5jcmVhdGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9OYW1lLmhlbGxvV29ybGQoKTsgLy8gYWxlcnRzIHVuZGVmaW5lZAot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBOT1RFOiBGb3Ig
cGVyZm9ybWFuY2UgcmVhc29ucywgeW91IGNhbm5vdCBkZWNsYXJlIG1ldGhvZHMgb3IgY29tcHV0
ZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBkdXJpbmcgYGNyZWF0ZWAuIFlvdSBz
aG91bGQgaW5zdGVhZCBkZWNsYXJlIG1ldGhvZHMgYW5kIGNvbXB1dGVkCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXMgd2hlbiB1c2luZyBgZXh0ZW5kYCBvciB1c2UgdGhlIGBjcmVhdGVX
aXRoTWl4aW5zYCBzaG9ydGhhbmQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjcmVh
dGUKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0gW2FyZ3VtZW50c10qCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY3JlYXRl
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgQyA9IHRoaXM7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX2luaXRQcm9wZXJ0aWVzKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEF1Z21lbnRzIGEgY29uc3RydWN0b3IncyBwcm90b3R5
cGUgd2l0aCBhZGRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgYW5kIGZ1
bmN0aW9uczoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIE15T2JqZWN0ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogJ2FuIG9iamVjdCcKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbyA9IE15T2JqZWN0LmNyZWF0ZSgpOwotICAgICAgICAgICAgICAg
ICAgICBvLmdldCgnbmFtZScpOyAvLyAnYW4gb2JqZWN0JwotCi0gICAgICAgICAgICAgICAgICAg
IE15T2JqZWN0LnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgICAgICAgc2F5OiBmdW5jdGlvbiht
c2cpewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTsKLSAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0KLSAgICAgICAgICAgICAg
ICAgICAgbzIgPSBNeU9iamVjdC5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbzIuc2F5
KCJoZWxsbyIpOyAvLyBsb2dzICJoZWxsbyIKLQotICAgICAgICAgICAgICAgICAgICBvLnNheSgi
Z29vZGJ5ZSIpOyAvLyBsb2dzICJnb29kYnllIgotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBUbyBhZGQgZnVuY3Rpb25zIGFuZCBwcm9wZXJ0aWVzIHRvIHRo
ZSBjb25zdHJ1Y3RvciBpdHNlbGYsCi0gICAgICAgICAgICAgICAgICAgIHNlZSBgcmVvcGVuQ2xh
c3NgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW9wZW4KLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICByZW9wZW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHRoaXMud2lsbFJlb3BlbigpOwotICAgICAgICAgICAgICAgIGFwcGx5KHRoaXMuUHJvdG90eXBl
TWl4aW4sIHJlb3BlbiwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBB
dWdtZW50cyBhIGNvbnN0cnVjdG9yJ3Mgb3duIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9uczoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIE15
T2JqZWN0ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFt
ZTogJ2FuIG9iamVjdCcKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgTXlPYmplY3QucmVvcGVuQ2xhc3MoewotICAgICAgICAgICAgICAgICAgICAgIGNhbkJ1
aWxkOiBmYWxzZQotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICBNeU9iamVjdC5jYW5CdWlsZDsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgbyA9IE15
T2JqZWN0LmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhpcyBjcmVhdGVzIHN0YXRpYyBwcm9wZXJ0aWVzIGFu
ZCBmdW5jdGlvbnMgZm9yIHRoZSBjbGFzcy4gVGhlc2UgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIHRo
ZSBjbGFzcwotICAgICAgICAgICAgICAgICAgICBhbmQgbm90IG9uIGFueSBpbnN0YW5jZSBvZiB0
aGF0IGNsYXNzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICBzYXlIZWxsbyA6
IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiSGVsbG8uIE15IG5h
bWUgaXMgIiArIHRoaXMuZ2V0KCduYW1lJykpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLlBlcnNvbi5y
ZW9wZW5DbGFzcyh7Ci0gICAgICAgICAgICAgICAgICAgICAgc3BlY2llcyA6ICJIb21vIHNhcGll
bnMiLAotICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVBlcnNvbjogZnVuY3Rpb24obmV3UGVy
c29uc05hbWUpewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFwcC5QZXJzb24uY3Jl
YXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpuZXdQZXJzb25zTmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgdG9tID0gQXBwLlBl
cnNvbi5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgICAgIG5hbWUgOiAiVG9tIERhbGUiCi0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB2YXIgeWVodWRhID0g
QXBwLlBlcnNvbi5jcmVhdGVQZXJzb24oIlllaHVkYSBLYXR6Iik7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdG9tLnNheUhlbGxvKCk7IC8vICJIZWxsby4gTXkgbmFtZSBpcyBUb20gRGFsZSIKLSAg
ICAgICAgICAgICAgICAgICAgeWVodWRhLnNheUhlbGxvKCk7IC8vICJIZWxsby4gTXkgbmFtZSBp
cyBZZWh1ZGEgS2F0eiIKLSAgICAgICAgICAgICAgICAgICAgYWxlcnQoQXBwLlBlcnNvbi5zcGVj
aWVzKTsgLy8gIkhvbW8gc2FwaWVucyIKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgTm90ZSB0aGF0IGBzcGVjaWVzYCBhbmQgYGNyZWF0ZVBlcnNvbmAgYXJl
ICpub3QqIHZhbGlkIG9uIHRoZSBgdG9tYCBhbmQgYHllaHVkYWAKLSAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGVzLiBUaGV5IGFyZSBvbmx5IHZhbGlkIG9uIGBBcHAuUGVyc29uYC4KLQotICAg
ICAgICAgICAgICAgICAgICBUbyBhZGQgZnVuY3Rpb25zIGFuZCBwcm9wZXJ0aWVzIHRvIGluc3Rh
bmNlcyBvZgotICAgICAgICAgICAgICAgICAgICBhIGNvbnN0cnVjdG9yIGJ5IGV4dGVuZGluZyB0
aGUgY29uc3RydWN0b3IncyBwcm90b3R5cGUKLSAgICAgICAgICAgICAgICAgICAgc2VlIGByZW9w
ZW5gCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW9wZW5DbGFzcwotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlb3BlbkNsYXNzOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBhcHBseSh0aGlzLkNsYXNzTWl4aW4sIHJlb3BlbiwgYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICBhcHBseU1peGluKHRoaXMsIGFyZ3VtZW50cywgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGV0
ZWN0OiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyAhPT0g
dHlwZW9mIG9iaikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdoaWxlIChvYmopIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG9iaiA9PT0gdGhpcykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2JqID0g
b2JqLnN1cGVyY2xhc3M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRldGVjdEluc3RhbmNlOiBm
dW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdGhp
czsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gYW5ub3RhdGUgY29tcHV0ZWQgcHJvcGVy
dGllcyB3aXRoIGFkZGl0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgYWJvdXQg
aG93IHRoZXkgZnVuY3Rpb24gb3Igd2hhdCB2YWx1ZXMgdGhleSBvcGVyYXRlIG9uLiBGb3IKLSAg
ICAgICAgICAgICAgICAgICAgZXhhbXBsZSwgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb25zIG1h
eSBjbG9zZSBvdmVyIHZhcmlhYmxlcyB0aGF0IGFyZSB0aGVuCi0gICAgICAgICAgICAgICAgICAg
IG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGludHJvc3BlY3Rpb24uCi0KLSAgICAgICAgICAgICAg
ICAgICAgWW91IGNhbiBwYXNzIGEgaGFzaCBvZiB0aGVzZSB2YWx1ZXMgdG8gYSBjb21wdXRlZCBw
cm9wZXJ0eSBsaWtlIHRoaXM6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICBwZXJzb246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgIHZhciBwZXJzb25JZCA9IHRoaXMuZ2V0KCdwZXJzb25JZCcpOwotICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBcHAuUGVyc29uLmNyZWF0ZSh7IGlkOiBwZXJzb25JZCB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpLm1ldGEoeyB0eXBlOiBBcHAuUGVyc29uIH0p
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91
J3ZlIGRvbmUgdGhpcywgeW91IGNhbiByZXRyaWV2ZSB0aGUgdmFsdWVzIHNhdmVkIHRvIHRoZSBj
b21wdXRlZAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBmcm9tIHlvdXIgY2xhc3MgbGlr
ZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAgTXlDbGFzcy5tZXRhRm9yUHJvcGVydHkoJ3BlcnNvbicpOwotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgcmV0dXJuIHRoZSBv
cmlnaW5hbCBoYXNoIHRoYXQgd2FzIHBhc3NlZCB0byBgbWV0YSgpYC4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIG1ldGFGb3JQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ga2V5IHtTdHJpbmd9IHByb3BlcnR5IG5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBtZXRhRm9yUHJvcGVydHk6IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAg
IHZhciBtZXRhID0gdGhpcy5wcm90bygpW01FVEFfS0VZXSwKLSAgICAgICAgICAgICAgICBkZXNj
ID0gbWV0YSAmJiBtZXRhLmRlc2NzW2tleV07Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoIm1ldGFGb3JQcm9wZXJ0eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkg
d2l0aCBrZXkgJyIgKyBrZXkgKyAiJy4iLCAhIWRlc2MgJiYgZGVzYyBpbnN0YW5jZW9mIENvbXB1
dGVkUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLl9tZXRhIHx8IHt9Owot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2NvbXB1dGVkUHJvcGVydGllczogRW1iZXIu
Y29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaGFzQ2FjaGVkQ29tcHV0ZWRQ
cm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSB0aGlzLnByb3Rv
KCk7Ci0gICAgICAgICAgICAgICAgdmFyIGRlc2NzID0gbWV0YShwcm90bykuZGVzY3M7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByb3BlcnR5OwotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVz
ID0gW107Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGRlc2NzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gZGVzY3NbbmFtZV07Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgQ29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IHBy
b3BlcnR5Ll9tZXRhCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVy
dGllczsKLSAgICAgICAgICAgIH0pLnJlYWRPbmx5KCksCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBJdGVyYXRlIG92ZXIgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBmb3Ig
dGhlIGNsYXNzLCBwYXNzaW5nIGl0cyBuYW1lCi0gICAgICAgICAgICAgICAgICAgIGFuZCBhbnkg
YXNzb2NpYXRlZCBtZXRhZGF0YSAoc2VlIGBtZXRhRm9yUHJvcGVydHlgKSB0byB0aGUgY2FsbGJh
Y2suCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBlYWNoQ29tcHV0ZWRQcm9wZXJ0eQot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gYmluZGluZwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGVhY2hDb21wdXRlZFByb3BlcnR5OiBmdW5jdGlvbihjYWxsYmFjaywgYmlu
ZGluZykgewotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSwgbmFtZTsKLSAgICAgICAgICAg
ICAgICB2YXIgZW1wdHkgPSB7fTsKLQotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0g
Z2V0KHRoaXMsICdfY29tcHV0ZWRQcm9wZXJ0aWVzJyk7Ci0KLSAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lOwotICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjay5jYWxsKGJpbmRpbmcgfHwgdGhpcywgcHJvcGVydHkubmFtZSwgcHJvcGVydHkubWV0
YSB8fCBlbXB0eSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
KTsKLQotICAgICAgICBDbGFzc01peGluLm93bmVyQ29uc3RydWN0b3IgPSBDb3JlT2JqZWN0Owot
Ci0gICAgICAgIGlmIChFbWJlci5jb25maWcub3ZlcnJpZGVDbGFzc01peGluKSB7Ci0gICAgICAg
ICAgICBFbWJlci5jb25maWcub3ZlcnJpZGVDbGFzc01peGluKENsYXNzTWl4aW4pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQ29yZU9iamVjdC5DbGFzc01peGluID0gQ2xhc3NNaXhpbjsKLQotICAg
ICAgICBDbGFzc01peGluLmFwcGx5KENvcmVPYmplY3QpOwotCi0gICAgICAgIENvcmVPYmplY3Qu
cmVvcGVuKHsKLSAgICAgICAgICAgIGRpZERlZmluZVByb3BlcnR5OiBmdW5jdGlvbihwcm90bywg
a2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmIChoYXNDYWNoZWRDb21wdXRlZFByb3Bl
cnRpZXMgPT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRW1iZXIuQ29t
cHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBFbWJlci5t
ZXRhKHRoaXMuY29uc3RydWN0b3IpLmNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChj
YWNoZS5fY29tcHV0ZWRQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhY2hlLl9jb21wdXRlZFByb3BlcnRpZXMgPSB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdXBlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotCi0gICAgICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBDb3JlT2JqZWN0OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItcnVudGltZS9zeXN0ZW0vZGVmZXJyZWQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJl
bWJlci1ydW50aW1lL21peGlucy9kZWZlcnJlZCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQi
LCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBE
ZWZlcnJlZE1peGluID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBn
ZXQgPSBfX2RlcGVuZGVuY3kzX18uZ2V0OwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2Rl
cGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgRGVmZXJyZWQgPSBFbWJlck9i
amVjdC5leHRlbmQoRGVmZXJyZWRNaXhpbiwgewotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdVc2FnZSBvZiBFbWJlci5EZWZl
cnJlZCBpcyBkZXByZWNhdGVkLicpOwotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIERlZmVycmVkLnJlb3BlbkNsYXNz
KHsKLSAgICAgICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gRGVmZXJyZWQuY3JlYXRlKCk7Ci0gICAgICAg
ICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCBkZWZlcnJlZCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRGVmZXJyZWQ7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci1ydW50aW1lL3N5c3RlbS9lYWNoX3Byb3h5IiwKLSAgICBbImVtYmVyLW1ldGFsL2Nv
cmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3Nl
dCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwg
ImVtYmVyLW1ldGFsL2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1t
ZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dGllcyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18s
IF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVw
ZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5j
eTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5kZW5jeTEz
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotCi0gICAgICAgIHZhciBn
ZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5
M19fLnNldDsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18uZ3VpZEZvcjsK
LSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3k1X18uZm9yRWFjaDsKLSAgICAgICAg
dmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3k2X18uaW5kZXhPZjsKLSAgICAgICAgdmFyIEVtYmVy
QXJyYXkgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRVM2VE9ETzog
V0FUPyBDaXJjdWxhciBkZXA/Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5j
eThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k5X18u
Y29tcHV0ZWQ7Ci0gICAgICAgIHZhciBhZGRPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTEwX18uYWRk
T2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBhZGRCZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTEw
X18uYWRkQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1vdmVCZWZvcmVPYnNlcnZlciA9
IF9fZGVwZW5kZW5jeTEwX18ucmVtb3ZlQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1v
dmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTEwX18ucmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIHZh
ciB0eXBlT2YgPSBfX2RlcGVuZGVuY3k0X18udHlwZU9mOwotICAgICAgICB2YXIgd2F0Y2hlZEV2
ZW50cyA9IF9fZGVwZW5kZW5jeTExX18ud2F0Y2hlZEV2ZW50czsKLSAgICAgICAgdmFyIGRlZmlu
ZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5MTJfXy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAgdmFy
IGJlZ2luUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRlbmN5MTNfXy5iZWdpblByb3BlcnR5Q2hh
bmdlczsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlkQ2hhbmdlID0gX19kZXBlbmRlbmN5MTNfXy5w
cm9wZXJ0eURpZENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVw
ZW5kZW5jeTEzX18ucHJvcGVydHlXaWxsQ2hhbmdlOwotICAgICAgICB2YXIgZW5kUHJvcGVydHlD
aGFuZ2VzID0gX19kZXBlbmRlbmN5MTNfXy5lbmRQcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIHZh
ciBjaGFuZ2VQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5MTNfXy5jaGFuZ2VQcm9wZXJ0aWVzOwot
Ci0gICAgICAgIHZhciBFYWNoQXJyYXkgPSBFbWJlck9iamVjdC5leHRlbmQoRW1iZXJBcnJheSwg
ewotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbihjb250ZW50LCBrZXlOYW1lLCBvd25lcikg
ewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
a2V5TmFtZSA9IGtleU5hbWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fb3duZXIgPSBvd25lcjsK
LSAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIG9iamVjdEF0OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaXRlbSA9IHRoaXMuX2NvbnRlbnQub2JqZWN0QXQoaWR4KTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaXRlbSAmJiBnZXQoaXRlbSwgdGhpcy5fa2V5TmFtZSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBsZW5ndGg6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fY29udGVudDsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udGVudCA/IGdldChjb250ZW50LCAnbGVuZ3RoJykgOiAwOwotICAgICAgICAgICAgfSkK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIElTX09CU0VSVkVSID0gL14uKzooYmVmb3JlfGNo
YW5nZSkkLzsKLQotICAgICAgICBmdW5jdGlvbiBhZGRPYnNlcnZlckZvckNvbnRlbnRLZXkoY29u
dGVudCwga2V5TmFtZSwgcHJveHksIGlkeCwgbG9jKSB7Ci0gICAgICAgICAgICB2YXIgb2JqZWN0
cyA9IHByb3h5Ll9vYmplY3RzLCBndWlkOwotICAgICAgICAgICAgaWYgKCFvYmplY3RzKSAKLSAg
ICAgICAgICAgICAgICBvYmplY3RzID0gcHJveHkuX29iamVjdHMgPSB7fTsKLQotICAgICAgICAg
ICAgd2hpbGUgKC0tbG9jID49IGlkeCkgewotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY29u
dGVudC5vYmplY3RBdChsb2MpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnV2hlbiB1c2luZyBAZWFjaCB0byBvYnNlcnZlIHRo
ZSBhcnJheSAnICsgY29udGVudCArICcsIHRoZSBhcnJheSBtdXN0IHJldHVybiBhbiBvYmplY3Qn
LCB0eXBlT2YoaXRlbSkgPT09ICdpbnN0YW5jZScgfHwgdHlwZU9mKGl0ZW0pID09PSAnb2JqZWN0
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEJlZm9yZU9ic2VydmVyKGl0ZW0sIGtleU5hbWUs
IHByb3h5LCAnY29udGVudEtleVdpbGxDaGFuZ2UnKTsKLSAgICAgICAgICAgICAgICAgICAgYWRk
T2JzZXJ2ZXIoaXRlbSwga2V5TmFtZSwgcHJveHksICdjb250ZW50S2V5RGlkQ2hhbmdlJyk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgaW5kZXggZWFjaCBpdGVt
IHdhcyBmb3VuZCBhdCBzbyB3ZSBjYW4gbWFwCi0gICAgICAgICAgICAgICAgICAgIC8vIGl0IGJh
Y2sgd2hlbiB0aGUgb2JqIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIGd1aWQgPSBndWlk
Rm9yKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW9iamVjdHNbZ3VpZF0pIAotICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0c1tndWlkXSA9IFtdOwotICAgICAgICAgICAgICAg
ICAgICBvYmplY3RzW2d1aWRdLnB1c2gobG9jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVPYnNlcnZlckZvckNv
bnRlbnRLZXkoY29udGVudCwga2V5TmFtZSwgcHJveHksIGlkeCwgbG9jKSB7Ci0gICAgICAgICAg
ICB2YXIgb2JqZWN0cyA9IHByb3h5Ll9vYmplY3RzOwotICAgICAgICAgICAgaWYgKCFvYmplY3Rz
KSAKLSAgICAgICAgICAgICAgICBvYmplY3RzID0gcHJveHkuX29iamVjdHMgPSB7fTsKLSAgICAg
ICAgICAgIHZhciBpbmRpY2llcywgZ3VpZDsKLQotICAgICAgICAgICAgd2hpbGUgKC0tbG9jID49
IGlkeCkgewotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY29udGVudC5vYmplY3RBdChsb2Mp
OwotICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92
ZUJlZm9yZU9ic2VydmVyKGl0ZW0sIGtleU5hbWUsIHByb3h5LCAnY29udGVudEtleVdpbGxDaGFu
Z2UnKTsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIoaXRlbSwga2V5TmFtZSwg
cHJveHksICdjb250ZW50S2V5RGlkQ2hhbmdlJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZ3Vp
ZCA9IGd1aWRGb3IoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGluZGljaWVzID0gb2JqZWN0
c1tndWlkXTsKLSAgICAgICAgICAgICAgICAgICAgaW5kaWNpZXNbaW5kZXhPZi5jYWxsKGluZGlj
aWVzLCBsb2MpXSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgaXMgdGhlIG9iamVjdCBp
bnN0YW5jZSByZXR1cm5lZCB3aGVuIHlvdSBnZXQgdGhlIGBAZWFjaGAgcHJvcGVydHkgb24gYW4K
LSAgICAgICAgICAgICAgYXJyYXkuIEl0IHVzZXMgdGhlIHVua25vd25Qcm9wZXJ0eSBoYW5kbGVy
IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi0gICAgICAgICAgICAgIEVhY2hBcnJheSBpbnN0YW5j
ZXMgZm9yIHByb3BlcnR5IG5hbWVzLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAg
ICAgICAgIEBjbGFzcyBFYWNoUHJveHkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgICAgICAgICovCi0gICAg
ICAgIHZhciBFYWNoUHJveHkgPSBFbWJlck9iamVjdC5leHRlbmQoewotCi0gICAgICAgICAgICBp
bml0OiBmdW5jdGlvbihjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICAgICAgICAgICAg
ICBjb250ZW50LmFkZEFycmF5T2JzZXJ2ZXIodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBp
biBjYXNlIHNvbWVvbmUgaXMgYWxyZWFkeSBvYnNlcnZpbmcgc29tZSBrZXlzIG1ha2Ugc3VyZSB0
aGV5IGFyZQotICAgICAgICAgICAgICAgIC8vIGFkZGVkCi0gICAgICAgICAgICAgICAgZm9yRWFj
aCh3YXRjaGVkRXZlbnRzKHRoaXMpLCBmdW5jdGlvbihldmVudE5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5kaWRBZGRMaXN0ZW5lcihldmVudE5hbWUpOwotICAgICAgICAgICAgICAg
IH0sIHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFlvdSBjYW4gZGlyZWN0bHkgYWNjZXNzIG1hcHBlZCBwcm9wZXJ0aWVzIGJ5IHNp
bXBseSByZXF1ZXN0aW5nIHRoZW0uCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgdW5rbm93blBy
b3BlcnR5YCBoYW5kbGVyIHdpbGwgZ2VuZXJhdGUgYW4gRWFjaEFycmF5IG9mIGVhY2ggaXRlbS4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVua25vd25Qcm9wZXJ0eQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ga2V5TmFtZSB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0gdmFsdWUgeyp9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5rbm93
blByb3BlcnR5OiBmdW5jdGlvbihrZXlOYW1lLCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZh
ciByZXQ7Ci0gICAgICAgICAgICAgICAgcmV0ID0gbmV3IEVhY2hBcnJheSh0aGlzLl9jb250ZW50
LCBrZXlOYW1lLCB0aGlzKTsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBr
ZXlOYW1lLCBudWxsLCByZXQpOwotICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5PYnNlcnZpbmdD
b250ZW50S2V5KGtleU5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBBUlJBWSBDSEFOR0VT
Ci0gICAgICAgICAgICAvLyBJbnZva2VzIHdoZW5ldmVyIHRoZSBjb250ZW50IGFycmF5IGl0c2Vs
ZiBjaGFuZ2VzLgotCi0gICAgICAgICAgICBhcnJheVdpbGxDaGFuZ2U6IGZ1bmN0aW9uKGNvbnRl
bnQsIGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIga2V5
cyA9IHRoaXMuX2tleXMsIGtleSwgbGltOwotCi0gICAgICAgICAgICAgICAgbGltID0gcmVtb3Zl
ZENudCA+IDAgPyBpZHggKyByZW1vdmVkQ250IDogLTE7Ci0gICAgICAgICAgICAgICAgYmVnaW5Q
cm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBrZXlz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgha2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaW0gPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZW1vdmVPYnNlcnZlckZvckNvbnRlbnRLZXkoY29udGVudCwga2V5LCB0aGlzLCBp
ZHgsIGxpbSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcy5fY29udGVudCwgJ0BlYWNoJyk7Ci0g
ICAgICAgICAgICAgICAgZW5kUHJvcGVydHlDaGFuZ2VzKHRoaXMpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgYXJyYXlEaWRDaGFuZ2U6IGZ1bmN0aW9uKGNvbnRlbnQsIGlkeCwgcmVt
b3ZlZENudCwgYWRkZWRDbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMuX2tl
eXMsIGxpbTsKLQotICAgICAgICAgICAgICAgIGxpbSA9IGFkZGVkQ250ID4gMCA/IGlkeCArIGFk
ZGVkQ250IDogLTE7Ci0gICAgICAgICAgICAgICAgY2hhbmdlUHJvcGVydGllcyhmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGtleXMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgha2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW0gPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXJGb3JDb250ZW50S2V5KGNvbnRlbnQsIGtleSwgdGhp
cywgaWR4LCBsaW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlzLCBrZXkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcy5fY29u
dGVudCwgJ0BlYWNoJyk7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBMSVNURU4gRk9SIE5FVyBPQlNF
UlZFUlMgQU5EIE9USEVSIEVWRU5UIExJU1RFTkVSUwotICAgICAgICAgICAgLy8gU3RhcnQgbW9u
aXRvcmluZyBrZXlzIGJhc2VkIG9uIHdobyBpcyBsaXN0ZW5pbmcuLi4KLQotICAgICAgICAgICAg
ZGlkQWRkTGlzdGVuZXI6IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIGlm
IChJU19PQlNFUlZFUi50ZXN0KGV2ZW50TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5iZWdpbk9ic2VydmluZ0NvbnRlbnRLZXkoZXZlbnROYW1lLnNsaWNlKDAsIC03KSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGlkUmVtb3ZlTGlz
dGVuZXI6IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIGlmIChJU19PQlNF
UlZFUi50ZXN0KGV2ZW50TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wT2Jz
ZXJ2aW5nQ29udGVudEtleShldmVudE5hbWUuc2xpY2UoMCwgLTcpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBD
T05URU5UIEtFWSBPQlNFUlZJTkcKLSAgICAgICAgICAgIC8vIEFjdHVhbCB3YXRjaCBrZXlzIG9u
IHRoZSBzb3VyY2UgY29udGVudC4KLQotICAgICAgICAgICAgYmVnaW5PYnNlcnZpbmdDb250ZW50
S2V5OiBmdW5jdGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlz
Ll9rZXlzOwotICAgICAgICAgICAgICAgIGlmICgha2V5cykgCi0gICAgICAgICAgICAgICAgICAg
IGtleXMgPSB0aGlzLl9rZXlzID0ge307Ci0gICAgICAgICAgICAgICAgaWYgKCFrZXlzW2tleU5h
bWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNba2V5TmFtZV0gPSAxOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnQsCi0gICAgICAgICAgICAgICAg
ICAgIGxlbiA9IGdldChjb250ZW50LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZE9ic2VydmVyRm9yQ29udGVudEtleShjb250ZW50LCBrZXlOYW1lLCB0aGlzLCAwLCBsZW4pOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNba2V5TmFt
ZV0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBz
dG9wT2JzZXJ2aW5nQ29udGVudEtleTogZnVuY3Rpb24oa2V5TmFtZSkgewotICAgICAgICAgICAg
ICAgIHZhciBrZXlzID0gdGhpcy5fa2V5czsKLSAgICAgICAgICAgICAgICBpZiAoa2V5cyAmJiAo
a2V5c1trZXlOYW1lXSA+IDApICYmICgtLWtleXNba2V5TmFtZV0gPD0gMCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50LAotICAgICAgICAgICAgICAg
ICAgICBsZW4gPSBnZXQoY29udGVudCwgJ2xlbmd0aCcpOwotICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVPYnNlcnZlckZvckNvbnRlbnRLZXkoY29udGVudCwga2V5TmFtZSwgdGhpcywgMCwgbGVu
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb250
ZW50S2V5V2lsbENoYW5nZTogZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsIGtleU5hbWUpOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgY29udGVudEtleURpZENoYW5nZTogZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7
Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywga2V5TmFtZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fLkVhY2hBcnJheSA9
IEVhY2hBcnJheTsKLSAgICAgICAgX19leHBvcnRzX18uRWFjaFByb3h5ID0gRWFjaFByb3h5Owot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbmF0aXZlX2FycmF5IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykg
ewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qZ2xvYmFscyBDdXN0b21FdmVudCAq
LwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyBFbWJlci5FTlYuRU1CRVJfTE9BRF9IT09LUwotICAgICAgICB2YXIgZm9yRWFjaCA9
IF9fZGVwZW5kZW5jeTJfXy5mb3JFYWNoOwotICAgICAgICAvLyBtYWtlIHN1cmUgRW1iZXIuQSBp
cyBzZXR1cC4KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAg
ICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAg
ICAgICAgdmFyIGxvYWRIb29rcyA9IEVtYmVyLkVOVi5FTUJFUl9MT0FEX0hPT0tTIHx8IHt9Owot
ICAgICAgICB2YXIgbG9hZGVkID0ge307Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIERl
dGVjdHMgd2hlbiBhIHNwZWNpZmljIHBhY2thZ2Ugb2YgRW1iZXIgKGUuZy4gJ0VtYmVyLkhhbmRs
ZWJhcnMnKQotICAgICAgICAgICAgICBoYXMgZnVsbHkgbG9hZGVkIGFuZCBpcyBhdmFpbGFibGUg
Zm9yIGV4dGVuc2lvbi4KLQotICAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgYGNhbGxiYWNrYCB3
aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmFtZWAgcGFzc2VkCi0gICAgICAgICAgICAgIHJlc29s
dmVkIGZyb20gYSBzdHJpbmcgaW50byB0aGUgb2JqZWN0OgotCi0gICAgICAgICAgICAgIGBgYCBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLm9uTG9hZCgnRW1iZXIuSGFuZGxlYmFycycg
ZnVuY3Rpb24oaGJhcnMpIHsKLSAgICAgICAgICAgICAgICBoYmFycy5yZWdpc3RlckhlbHBlcigu
Li4pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgQG1ldGhvZCBvbkxvYWQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAg
ICBAcGFyYW0gbmFtZSB7U3RyaW5nfSBuYW1lIG9mIGhvb2sKLSAgICAgICAgICAgICAgQHBhcmFt
IGNhbGxiYWNrIHtGdW5jdGlvbn0gY2FsbGJhY2sgdG8gYmUgY2FsbGVkCi0gICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBvbkxvYWQobmFtZSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAg
IHZhciBvYmplY3Q7Ci0KLSAgICAgICAgICAgIGxvYWRIb29rc1tuYW1lXSA9IGxvYWRIb29rc1tu
YW1lXSB8fCBFbWJlci5BKCk7Ci0gICAgICAgICAgICBsb2FkSG9va3NbbmFtZV0ucHVzaE9iamVj
dChjYWxsYmFjayk7Ci0KLSAgICAgICAgICAgIGlmIChvYmplY3QgPSBsb2FkZWRbbmFtZV0pIHsK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3QpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ub25Mb2FkID0gb25Mb2FkOyAvKioKLSAgICAgICAg
ICAgICAgQ2FsbGVkIHdoZW4gYW4gRW1iZXIuanMgcGFja2FnZSAoZS5nIEVtYmVyLkhhbmRsZWJh
cnMpIGhhcyBmaW5pc2hlZAotICAgICAgICAgICAgICBsb2FkaW5nLiBUcmlnZ2VycyBhbnkgY2Fs
bGJhY2tzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgZXZlbnQuCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBydW5Mb2FkSG9va3MKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBA
cGFyYW0gbmFtZSB7U3RyaW5nfSBuYW1lIG9mIGhvb2sKLSAgICAgICAgICAgICAgQHBhcmFtIG9i
amVjdCB7T2JqZWN0fSBvYmplY3QgdG8gcGFzcyB0byBjYWxsYmFja3MKLSAgICAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIHJ1bkxvYWRIb29rcyhuYW1lLCBvYmplY3QpIHsKLSAgICAgICAg
ICAgIGxvYWRlZFtuYW1lXSA9IG9iamVjdDsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5k
b3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0
aW9uJyAmJiB0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZSwgewotICAgICAgICAgICAgICAg
ICAgICBkZXRhaWw6IG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZQotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxvYWRIb29rc1tuYW1lXSkg
ewotICAgICAgICAgICAgICAgIGZvckVhY2guY2FsbChsb2FkSG9va3NbbmFtZV0sIGZ1bmN0aW9u
KGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4
cG9ydHNfXy5ydW5Mb2FkSG9va3MgPSBydW5Mb2FkSG9va3M7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UiLAotICAgIFsiZW1iZXItbWV0YWwvY29y
ZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItcnVudGltZS9zeXN0
ZW0vb2JqZWN0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5k
ZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8v
IEVtYmVyLmxvb2t1cCwgRW1iZXIuQk9PVEVELCBFbWJlci5kZXByZWNhdGUsIEVtYmVyLk5BTUVf
S0VZLCBFbWJlci5hbnlVbnByb2Nlc3NlZE1peGlucwotICAgICAgICB2YXIgRW1iZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJf
Xy5nZXQ7Ci0gICAgICAgIHZhciBpbmRleE9mID0gX19kZXBlbmRlbmN5M19fLmluZGV4T2Y7Ci0g
ICAgICAgIHZhciBHVUlEX0tFWSA9IF9fZGVwZW5kZW5jeTRfXy5HVUlEX0tFWTsKLSAgICAgICAg
dmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18uZ3VpZEZvcjsKLSAgICAgICAgdmFyIE1peGlu
ID0gX19kZXBlbmRlbmN5NV9fLk1peGluOwotCi0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9f
ZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBB
IE5hbWVzcGFjZSBpcyBhbiBvYmplY3QgdXN1YWxseSB1c2VkIHRvIGNvbnRhaW4gb3RoZXIgb2Jq
ZWN0cyBvciBtZXRob2RzCi0gICAgICAgICAgICAgIHN1Y2ggYXMgYW4gYXBwbGljYXRpb24gb3Ig
ZnJhbWV3b3JrLiBDcmVhdGUgYSBuYW1lc3BhY2UgYW55dGltZSB5b3Ugd2FudAotICAgICAgICAg
ICAgICB0byBkZWZpbmUgb25lIG9mIHRoZXNlIG5ldyBjb250YWluZXJzLgotCi0gICAgICAgICAg
ICAgICMgRXhhbXBsZSBVc2FnZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgTXlGcmFtZXdvcmsgPSBFbWJlci5OYW1lc3BhY2UuY3JlYXRlKHsKLSAgICAgICAg
ICAgICAgICBWRVJTSU9OOiAnMS4wLjAnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgTmFtZXNwYWNlCi0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAg
ICAgICAgICAqLwotICAgICAgICB2YXIgTmFtZXNwYWNlID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgIGlzTmFtZXNwYWNlOiB0cnVlLAotCi0gICAgICAgICAgICBpbml0OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2UuTkFNRVNQQUNFUy5wdXNoKHRoaXMp
OwotICAgICAgICAgICAgICAgIE5hbWVzcGFjZS5QUk9DRVNTRUQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgbmFtZSA9IGdldCh0aGlzLCAnbmFtZScpOwotICAgICAgICAgICAgICAgIGlmIChu
YW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGZpbmROYW1lc3BhY2VzKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXNbTkFNRV9LRVldOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgbmFt
ZUNsYXNzZXM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHByb2Nlc3NOYW1lc3BhY2Uo
W3RoaXMudG9TdHJpbmcoKV0sIHRoaXMsIHt9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2Vz
ID0gTmFtZXNwYWNlLk5BTUVTUEFDRVMsCi0gICAgICAgICAgICAgICAgdG9TdHJpbmcgPSB0aGlz
LnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodG9TdHJpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgRW1iZXIubG9va3VwW3RvU3RyaW5nXSA9IHVuZGVmaW5lZDsKLSAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIE5hbWVzcGFjZS5OQU1FU1BBQ0VTX0JZX0lEW3RvU3RyaW5nXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5zcGxpY2UoaW5k
ZXhPZi5jYWxsKG5hbWVzcGFjZXMsIHRoaXMpLCAxKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9z
dXBlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBOYW1lc3BhY2Uu
cmVvcGVuQ2xhc3MoewotICAgICAgICAgICAgTkFNRVNQQUNFUzogW0VtYmVyXSwKLSAgICAgICAg
ICAgIE5BTUVTUEFDRVNfQllfSUQ6IHt9LAotICAgICAgICAgICAgUFJPQ0VTU0VEOiBmYWxzZSwK
LSAgICAgICAgICAgIHByb2Nlc3NBbGw6IHByb2Nlc3NBbGxOYW1lc3BhY2VzLAotICAgICAgICAg
ICAgYnlOYW1lOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFFbWJlci5C
T09URUQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0FsbE5hbWVzcGFjZXMoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gTkFNRVNQQUNFU19CWV9J
RFtuYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIE5BTUVT
UEFDRVNfQllfSUQgPSBOYW1lc3BhY2UuTkFNRVNQQUNFU19CWV9JRDsKLQotICAgICAgICB2YXIg
aGFzT3duUHJvcCA9ICh7fSkuaGFzT3duUHJvcGVydHk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcHJv
Y2Vzc05hbWVzcGFjZShwYXRocywgcm9vdCwgc2VlbikgewotICAgICAgICAgICAgdmFyIGlkeCA9
IHBhdGhzLmxlbmd0aDsKLQotICAgICAgICAgICAgTkFNRVNQQUNFU19CWV9JRFtwYXRocy5qb2lu
KCcuJyldID0gcm9vdDsKLQotICAgICAgICAgICAgLy8gTG9vcCBvdmVyIGFsbCBvZiB0aGUga2V5
cyBpbiB0aGUgbmFtZXNwYWNlLCBsb29raW5nIGZvciBjbGFzc2VzCi0gICAgICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gcm9vdCkgewotICAgICAgICAgICAgICAgIGlmICghaGFzT3duUHJvcC5jYWxs
KHJvb3QsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBvYmogPSByb290W2tleV07Ci0KLSAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgYEVtYmVyYCBuYW1lc3BhY2UsIGZv
ciBleGFtcGxlLCB0aGUKLSAgICAgICAgICAgICAgICAvLyBgcGF0aHNgIHdpbGwgc3RhcnQgd2l0
aCBgWyJFbWJlciJdYC4gRXZlcnkgaXRlcmF0aW9uIHRocm91Z2gKLSAgICAgICAgICAgICAgICAv
LyB0aGUgbG9vcCB3aWxsIHVwZGF0ZSB0aGUgKipzZWNvbmQqKiBlbGVtZW50IG9mIHRoaXMgbGlz
dCB3aXRoCi0gICAgICAgICAgICAgICAgLy8gdGhlIGtleSwgc28gcHJvY2Vzc2luZyBgRW1iZXIu
Vmlld2Agd2lsbCBtYWtlIHRoZSBBcnJheQotICAgICAgICAgICAgICAgIC8vIGBbJ0VtYmVyJywg
J1ZpZXcnXWAuCi0gICAgICAgICAgICAgICAgcGF0aHNbaWR4XSA9IGtleTsKLQotICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGhhdmUgZm91bmQgYW4gdW5wcm9jZXNzZWQgY2xhc3MKLSAgICAgICAg
ICAgICAgICBpZiAob2JqICYmIG9iai50b1N0cmluZyA9PT0gY2xhc3NUb1N0cmluZykgewotICAg
ICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjbGFzcycgYHRvU3RyaW5nYCB3aXRoIHRo
ZSBkb3Qtc2VwYXJhdGVkIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHNldCBpdHMg
YE5BTUVfS0VZYAotICAgICAgICAgICAgICAgICAgICBvYmoudG9TdHJpbmcgPSBtYWtlVG9TdHJp
bmcocGF0aHMuam9pbignLicpKTsKLSAgICAgICAgICAgICAgICAgICAgb2JqW05BTUVfS0VZXSA9
IHBhdGhzLmpvaW4oJy4nKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IG5lc3Rl
ZCBuYW1lc3BhY2VzCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmogJiYgb2JqLmlzTmFt
ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgYWxpYXNlZCBuYW1lc3BhY2Vz
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWVuW2d1aWRGb3Iob2JqKV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHNlZW5bZ3VpZEZvcihvYmopXSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gUHJvY2VzcyB0aGUgY2hpbGQgbmFtZXNwYWNlCi0gICAgICAgICAgICAgICAgICAg
IHByb2Nlc3NOYW1lc3BhY2UocGF0aHMsIG9iaiwgc2Vlbik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXRocy5sZW5ndGggPSBpZHg7IC8vIGN1dCBv
dXQgbGFzdCBpdGVtCi0gICAgICAgIH0KLQotICAgICAgICB2YXIgU1RBUlRTX1dJVEhfVVBQRVJD
QVNFID0gL15bQS1aXS87Ci0KLSAgICAgICAgZnVuY3Rpb24gdHJ5SXNOYW1lc3BhY2UobG9va3Vw
LCBwcm9wKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHZhciBvYmogPSBs
b29rdXBbcHJvcF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmouaXNOYW1lc3Bh
Y2UgJiYgb2JqOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIC8v
IGNvbnRpbnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBm
aW5kTmFtZXNwYWNlcygpIHsKLSAgICAgICAgICAgIHZhciBsb29rdXAgPSBFbWJlci5sb29rdXAs
IG9iaiwgaXNOYW1lc3BhY2U7Ci0KLSAgICAgICAgICAgIGlmIChOYW1lc3BhY2UuUFJPQ0VTU0VE
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3IgKHZhciBwcm9wIGluIGxvb2t1cCkgewotICAgICAgICAgICAgICAgIC8vIE9ubHkgcHJv
Y2VzcyBlbnRpdGllcyB0aGF0IHN0YXJ0IHdpdGggdXBwZXJjYXNlIEEtWgotICAgICAgICAgICAg
ICAgIGlmICghU1RBUlRTX1dJVEhfVVBQRVJDQVNFLnRlc3QocHJvcCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gVW5mb3J0dW5hdGVseSwgc29tZSB2ZXJzaW9ucyBvZiBJRSBkb24ndCBzdXBwb3J0IHdpbmRv
dy5oYXNPd25Qcm9wZXJ0eQotICAgICAgICAgICAgICAgIGlmIChsb29rdXAuaGFzT3duUHJvcGVy
dHkgJiYgIWxvb2t1cC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBdCB0
aW1lcyB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIGNlcnRhaW4gcHJvcGVydGllcyBmb3Ig
c2VjdXJpdHkgcmVhc29ucy4KLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgYWxzbyB0aW1l
cyB3aGVyZSBldmVuIGlmIHdlIGNhbiBhY2Nlc3MgdGhlbSwgd2UgYXJlIG5vdCBhbGxvd2VkIHRv
IGFjY2VzcyB0aGVpciBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgICAgIG9iaiA9IHRyeUlzTmFt
ZXNwYWNlKGxvb2t1cCwgcHJvcCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAg
ICAgICAgICAgICAgICBvYmpbTkFNRV9LRVldID0gcHJvcDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgTkFNRV9LRVkgPSBFbWJlci5O
QU1FX0tFWSA9IEdVSURfS0VZICsgJ19uYW1lJzsKLQotICAgICAgICBmdW5jdGlvbiBzdXBlckNs
YXNzU3RyaW5nKG1peGluKSB7Ci0gICAgICAgICAgICB2YXIgc3VwZXJjbGFzcyA9IG1peGluLnN1
cGVyY2xhc3M7Ci0gICAgICAgICAgICBpZiAoc3VwZXJjbGFzcykgewotICAgICAgICAgICAgICAg
IGlmIChzdXBlcmNsYXNzW05BTUVfS0VZXSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3VwZXJjbGFzc1tOQU1FX0tFWV07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN1cGVyQ2xhc3NTdHJpbmcoc3VwZXJjbGFzcyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjbGFzc1RvU3Ry
aW5nKCkgewotICAgICAgICAgICAgaWYgKCFFbWJlci5CT09URUQgJiYgIXRoaXNbTkFNRV9LRVld
KSB7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0FsbE5hbWVzcGFjZXMoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIHJldDsKLQotICAgICAgICAgICAgaWYgKHRoaXNbTkFNRV9L
RVldKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gdGhpc1tOQU1FX0tFWV07Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX3RvU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gdGhp
cy5fdG9TdHJpbmc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBz
dHIgPSBzdXBlckNsYXNzU3RyaW5nKHRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChzdHIpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gIihzdWJjbGFzcyBvZiAiICsgc3RyICsgIikiOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9ICIodW5r
bm93biBtaXhpbikiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLnRv
U3RyaW5nID0gbWFrZVRvU3RyaW5nKHJldCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQWxsTmFt
ZXNwYWNlcygpIHsKLSAgICAgICAgICAgIHZhciB1bnByb2Nlc3NlZE5hbWVzcGFjZXMgPSAhTmFt
ZXNwYWNlLlBST0NFU1NFRCwKLSAgICAgICAgICAgIHVucHJvY2Vzc2VkTWl4aW5zID0gRW1iZXIu
YW55VW5wcm9jZXNzZWRNaXhpbnM7Ci0KLSAgICAgICAgICAgIGlmICh1bnByb2Nlc3NlZE5hbWVz
cGFjZXMpIHsKLSAgICAgICAgICAgICAgICBmaW5kTmFtZXNwYWNlcygpOwotICAgICAgICAgICAg
ICAgIE5hbWVzcGFjZS5QUk9DRVNTRUQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodW5wcm9jZXNzZWROYW1lc3BhY2VzIHx8IHVucHJvY2Vzc2VkTWl4aW5zKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBOYW1lc3BhY2UuTkFNRVNQQUNFUywgbmFt
ZXNwYWNlOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmFtZXNwYWNlcy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gbmFt
ZXNwYWNlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc05hbWVzcGFjZShbbmFtZXNw
YWNlLnRvU3RyaW5nKCldLCBuYW1lc3BhY2UsIHt9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBFbWJlci5hbnlVbnByb2Nlc3NlZE1peGlucyA9IGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbWFrZVRvU3RyaW5nKHJldCkg
ewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgTWl4aW4ucHJvdG90
eXBlLnRvU3RyaW5nID0gY2xhc3NUb1N0cmluZzsgLy8gRVM2VE9ETzogYWx0ZXJpbmcgaW1wb3J0
ZWQgb2JqZWN0cy4gU0JCLgotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBOYW1l
c3BhY2U7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVf
YXJyYXkiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9n
ZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVf
dXRpbHMiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXki
LCAiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsICJlbWJlci1ydW50aW1lL21p
eGlucy9vYnNlcnZhYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlIiwgImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSIsICJlbWJlci1ydW50aW1lL2NvcHkiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVu
Y3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18s
IF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVy
Ci0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0K
LSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAg
IC8vIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTCi0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5k
ZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAg
ICAgICB2YXIgcmVwbGFjZSA9IF9fZGVwZW5kZW5jeTRfXy5fcmVwbGFjZTsKLSAgICAgICAgdmFy
IGZvckVhY2ggPSBfX2RlcGVuZGVuY3k0X18uZm9yRWFjaDsKLSAgICAgICAgdmFyIE1peGluID0g
X19kZXBlbmRlbmN5NV9fLk1peGluOwotICAgICAgICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5k
ZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTXV0YWJsZUFycmF5ID0gX19kZXBlbmRl
bmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBPYnNlcnZhYmxlID0gX19kZXBlbmRlbmN5
OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb3B5YWJsZSA9IF9fZGVwZW5kZW5jeTlfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgRlJPWkVOX0VSUk9SID0gX19kZXBlbmRlbmN5MTBfXy5G
Uk9aRU5fRVJST1I7Ci0gICAgICAgIHZhciBjb3B5ID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVs
dCJdOwotCi0gICAgICAgIC8vIEFkZCBFbWJlci5BcnJheSB0byBBcnJheS5wcm90b3R5cGUuIFJl
bW92ZSBtZXRob2RzIHdpdGggbmF0aXZlCi0gICAgICAgIC8vIGltcGxlbWVudGF0aW9ucyBhbmQg
c3VwcGx5IHNvbWUgbW9yZSBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgZ2VuZXJpYyBtZXRob2RzCi0g
ICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgc28gY29tbW9uLgotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBUaGUgTmF0aXZlQXJyYXkgbWl4aW4gY29udGFpbnMgdGhlIHByb3BlcnRpZXMg
bmVlZGVkIHRvIHRvIG1ha2UgdGhlIG5hdGl2ZQotICAgICAgICAgICAgICBBcnJheSBzdXBwb3J0
IEVtYmVyLk11dGFibGVBcnJheSBhbmQgYWxsIG9mIGl0cyBkZXBlbmRlbnQgQVBJcy4gVW5sZXNz
IHlvdQotICAgICAgICAgICAgICBoYXZlIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Agb3IgYEVt
YmVyLkVYVEVORF9QUk9UT1RZUEVTLkFycmF5YCBzZXQgdG8KLSAgICAgICAgICAgICAgZmFsc2Us
IHRoaXMgd2lsbCBiZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuIE90aGVyd2lzZSB5b3UgY2FuIGFw
cGx5IHRoZSBtaXhpbgotICAgICAgICAgICAgICBhdCBhbnl0aW1lIGJ5IGNhbGxpbmcgYEVtYmVy
Lk5hdGl2ZUFycmF5LmFjdGl2YXRlYC4KLQotICAgICAgICAgICAgICBAY2xhc3MgTmF0aXZlQXJy
YXkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAdXNlcyBF
bWJlci5NdXRhYmxlQXJyYXkKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuT2JzZXJ2YWJsZQot
ICAgICAgICAgICAgICBAdXNlcyBFbWJlci5Db3B5YWJsZQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgdmFyIE5hdGl2ZUFycmF5ID0gTWl4aW4uY3JlYXRlKE11dGFibGVBcnJheSwgT2JzZXJ2YWJs
ZSwgQ29weWFibGUsIHsKLQotICAgICAgICAgICAgLy8gYmVjYXVzZSBsZW5ndGggaXMgYSBidWls
dC1pbiBwcm9wZXJ0eSB3ZSBuZWVkIHRvIGtub3cgdG8ganVzdCBnZXQgdGhlCi0gICAgICAgICAg
ICAvLyBvcmlnaW5hbCBwcm9wZXJ0eS4KLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2xlbmd0aCcpIAotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ251bWJl
cicgPT09IHR5cGVvZiBrZXkpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trZXld
OwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zdXBlcihrZXkpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgb2JqZWN0QXQ6IGZ1
bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2lkeF07Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvLyBwcmltaXRpdmUgZm9yIGFycmF5IHN1cHBvcnQuCi0g
ICAgICAgICAgICByZXBsYWNlOiBmdW5jdGlvbihpZHgsIGFtdCwgb2JqZWN0cykgewotCi0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMuaXNGcm96ZW4pIAotICAgICAgICAgICAgICAgICAgICB0aHJv
dyBGUk9aRU5fRVJST1I7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSByZXBsYWNlZCBleGFj
dGx5IHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcywgdGhlbiBwYXNzIG9ubHkgdGhlCi0gICAgICAg
ICAgICAgICAgLy8gcmVwbGFjZWQgcmFuZ2UuIE90aGVyd2lzZSwgcGFzcyB0aGUgZnVsbCByZW1h
aW5pbmcgYXJyYXkgbGVuZ3RoCi0gICAgICAgICAgICAgICAgLy8gc2luY2UgZXZlcnl0aGluZyBo
YXMgc2hpZnRlZAotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBvYmplY3RzID8gZ2V0KG9iamVj
dHMsICdsZW5ndGgnKSA6IDA7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcnJheUNvbnRlbnRXaWxs
Q2hhbmdlKGlkeCwgYW10LCBsZW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpZHgsIGFtdCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSh0aGlzLCBpZHgsIGFt
dCwgb2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5h
cnJheUNvbnRlbnREaWRDaGFuZ2UoaWR4LCBhbXQsIGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBJZiB5b3UgYXNrIGZv
ciBhbiB1bmtub3duIHByb3BlcnR5LCB0aGVuIHRyeSB0byBjb2xsZWN0IHRoZSB2YWx1ZQotICAg
ICAgICAgICAgLy8gZnJvbSBtZW1iZXIgaXRlbXMuCi0gICAgICAgICAgICB1bmtub3duUHJvcGVy
dHk6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0OyAvLyA9
IHRoaXMucmVkdWNlZFByb3BlcnR5KGtleSwgdmFsdWUpIDsKLSAgICAgICAgICAgICAgICBpZiAo
KHZhbHVlICE9PSB1bmRlZmluZWQpICYmIHJldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldCA9IHRoaXNba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0IDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8vIElmIGJyb3dzZXIgZGlkIG5vdCBpbXBsZW1lbnQgaW5kZXhPZiBuYXRpdmVseSwgdGhlbiBv
dmVycmlkZSB3aXRoCi0gICAgICAgICAgICAvLyBzcGVjaWFsaXplZCB2ZXJzaW9uCi0gICAgICAg
ICAgICBpbmRleE9mOiBmdW5jdGlvbihvYmplY3QsIHN0YXJ0QXQpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaWR4LCBsZW4gPSB0aGlzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmIChzdGFy
dEF0ID09PSB1bmRlZmluZWQpIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ID0gMDsKLSAg
ICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ID0gKHN0YXJ0
QXQgPCAwKSA/IE1hdGguY2VpbChzdGFydEF0KSA6IE1hdGguZmxvb3Ioc3RhcnRBdCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0QXQgPCAwKSAKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRB
dCArPSBsZW47Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlkeCA9IHN0YXJ0QXQ7IGlkeCA8IGxl
bjsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNbaWR4XSA9PT0gb2JqZWN0
KSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZHggOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24ob2JqZWN0LCBzdGFydEF0KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGlkeCwgbGVuID0gdGhpcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
c3RhcnRBdCA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRBdCA9IGxl
bi0xOwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQg
PSAoc3RhcnRBdCA8IDApID8gTWF0aC5jZWlsKHN0YXJ0QXQpIDogTWF0aC5mbG9vcihzdGFydEF0
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRBdCA8IDApIAotICAgICAgICAgICAgICAgICAg
ICBzdGFydEF0ICs9IGxlbjsKLQotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gc3RhcnRBdDsg
aWR4ID49IDA7IGlkeC0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzW2lkeF0gPT09
IG9iamVjdCkgCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWR4IDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgY29weTogZnVuY3Rpb24oZGVlcCkgewotICAgICAgICAgICAgICAgIGlmIChk
ZWVwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihpdGVt
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weShpdGVtLCB0cnVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuc2xpY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAg
ICAgICAgLy8gUmVtb3ZlIGFueSBtZXRob2RzIGltcGxlbWVudGVkIG5hdGl2ZWx5IHNvIHdlIGRv
bid0IG92ZXJyaWRlIHRoZW0KLSAgICAgICAgdmFyIGlnbm9yZSA9IFsnbGVuZ3RoJ107Ci0gICAg
ICAgIGZvckVhY2goTmF0aXZlQXJyYXkua2V5cygpLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlW21ldGhvZE5hbWVdKSAKLSAgICAgICAgICAg
ICAgICBpZ25vcmUucHVzaChtZXRob2ROYW1lKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYg
KGlnbm9yZS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBOYXRpdmVBcnJheSA9IE5hdGl2ZUFy
cmF5LndpdGhvdXQuYXBwbHkoTmF0aXZlQXJyYXksIGlnbm9yZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgQ3JlYXRlcyBhbiBgRW1iZXIuTmF0aXZlQXJyYXlgIGZy
b20gYW4gQXJyYXkgbGlrZSBvYmplY3QuCi0gICAgICAgICAgICAgIERvZXMgbm90IG1vZGlmeSB0
aGUgb3JpZ2luYWwgb2JqZWN0LiBFbWJlci5BIGlzIG5vdCBuZWVkZWQgaWYKLSAgICAgICAgICAg
ICAgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0IHZhbHVl
KS4gSG93ZXZlciwKLSAgICAgICAgICAgICAgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNl
IEVtYmVyLkEgd2hlbiBjcmVhdGluZyBhZGRvbnMgZm9yCi0gICAgICAgICAgICAgIGVtYmVyIG9y
IHdoZW4geW91IGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVT
YAotICAgICAgICAgICAgICB3aWxsIGJlIGB0cnVlYC4KLQotICAgICAgICAgICAgICBFeGFtcGxl
Ci0KLSAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgdmFyIFBhZ2luYXRpb24gPSBF
bWJlci5Db2xsZWN0aW9uVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIHRhZ05hbWU6ICd1
bCcsCi0gICAgICAgICAgICAgICAgY2xhc3NOYW1lczogWydwYWdpbmF0aW9uJ10sCi0KLSAgICAg
ICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHRoaXMuX3N1
cGVyKCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0KCdjb250ZW50JykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2NvbnRlbnQnLCBFbWJlci5BKCkpOwotICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgQQotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk5hdGl2ZUFycmF5fQotICAg
ICAgICAgICAgKi8KLSAgICAgICAgdmFyIEEgPSBmdW5jdGlvbihhcnIpIHsKLSAgICAgICAgICAg
IGlmIChhcnIgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIGFyciA9IFtdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEVtYmVyQXJyYXkuZGV0ZWN0KGFycikgPyBh
cnIgOiBOYXRpdmVBcnJheS5hcHBseShhcnIpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBBY3RpdmF0ZXMgdGhlIG1peGluIG9uIHRoZSBBcnJheS5wcm90b3R5cGUg
aWYgbm90IGFscmVhZHkgYXBwbGllZC4gQ2FsbGluZwotICAgICAgICAgICAgICB0aGlzIG1ldGhv
ZCBtb3JlIHRoYW4gb25jZSBpcyBzYWZlLiBUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW4gZW1iZXIg
aXMgbG9hZGVkCi0gICAgICAgICAgICAgIHVubGVzcyB5b3UgaGF2ZSBgRW1iZXIuRVhURU5EX1BS
T1RPVFlQRVNgIG9yIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5BcnJheWAKLSAgICAgICAgICAg
ICAgc2V0IHRvIGBmYWxzZWAuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAg
ICAgIGBgYGpzCi0gICAgICAgICAgICAgIGlmIChFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9PT0g
dHJ1ZSB8fCBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5BcnJheSkgewotICAgICAgICAgICAgICAg
IEVtYmVyLk5hdGl2ZUFycmF5LmFjdGl2YXRlKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBhY3RpdmF0ZQotICAgICAgICAgICAg
ICBAZm9yIEVtYmVyLk5hdGl2ZUFycmF5Ci0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAg
ICAgICAgQHJldHVybiB7dm9pZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIE5hdGl2ZUFycmF5
LmFjdGl2YXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBOYXRpdmVBcnJheS5hcHBseShB
cnJheS5wcm90b3R5cGUpOwotCi0gICAgICAgICAgICBBID0gZnVuY3Rpb24oYXJyKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGFyciB8fCBbXTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgaWYgKEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8IEVtYmVy
LkVYVEVORF9QUk9UT1RZUEVTLkFycmF5KSB7Ci0gICAgICAgICAgICBOYXRpdmVBcnJheS5hY3Rp
dmF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgRW1iZXIuQSA9IEE7IC8vIEVTNlRPRE86IFNl
dHRpbmcgQSBvbnRvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgZW1iZXItbWV0YWwvY29yZSB0byBh
dm9pZCBjaXJjbGVzCi0gICAgICAgIF9fZXhwb3J0c19fLkEgPSBBOwotICAgICAgICBfX2V4cG9y
dHNfXy5OYXRpdmVBcnJheSA9IE5hdGl2ZUFycmF5OwotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gTmF0aXZlQXJyYXk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1l
L3N5c3RlbS9vYmplY3QiLAotICAgIFsiZW1iZXItcnVudGltZS9zeXN0ZW0vY29yZV9vYmplY3Qi
LCAiZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZSIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVt
YmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgdmFyIENvcmVPYmplY3QgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIE9ic2VydmFibGUgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLk9iamVjdGAgaXMgdGhlIG1haW4gYmFz
ZSBjbGFzcyBmb3IgYWxsIEVtYmVyIG9iamVjdHMuIEl0IGlzIGEgc3ViY2xhc3MKLSAgICAgICAg
ICAgICAgb2YgYEVtYmVyLkNvcmVPYmplY3RgIHdpdGggdGhlIGBFbWJlci5PYnNlcnZhYmxlYCBt
aXhpbiBhcHBsaWVkLiBGb3IgZGV0YWlscywKLSAgICAgICAgICAgICAgc2VlIHRoZSBkb2N1bWVu
dGF0aW9uIGZvciBlYWNoIG9mIHRoZXNlLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBPYmplY3QK
LSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBF
bWJlci5Db3JlT2JqZWN0Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLk9ic2VydmFibGUKLSAg
ICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IENvcmVPYmplY3QuZXh0ZW5k
KE9ic2VydmFibGUpOwotICAgICAgICBFbWJlck9iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgcmV0dXJuICJFbWJlci5PYmplY3QiOwotICAgICAgICB9OwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlck9iamVjdDsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94eSIsCi0gICAgWyJlbWJlci1t
ZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVt
YmVyLW1ldGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJleHBvcnRz
Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVw
ZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5j
eTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywg
X19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19leHBvcnRzX18pIHsKLSAgICAg
ICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLSAg
ICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8v
IEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAg
ICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBtZXRhID0g
X19kZXBlbmRlbmN5NF9fLm1ldGE7Ci0gICAgICAgIHZhciBhZGRPYnNlcnZlciA9IF9fZGVwZW5k
ZW5jeTVfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBl
bmRlbmN5NV9fLnJlbW92ZU9ic2VydmVyOwotICAgICAgICB2YXIgYWRkQmVmb3JlT2JzZXJ2ZXIg
PSBfX2RlcGVuZGVuY3k1X18uYWRkQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1vdmVC
ZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTVfXy5yZW1vdmVCZWZvcmVPYnNlcnZlcjsKLSAg
ICAgICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5kZW5jeTZfXy5wcm9wZXJ0eVdp
bGxDaGFuZ2U7Ci0gICAgICAgIHZhciBwcm9wZXJ0eURpZENoYW5nZSA9IF9fZGVwZW5kZW5jeTZf
Xy5wcm9wZXJ0eURpZENoYW5nZTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5
N19fLmNvbXB1dGVkOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k4
X18uZGVmaW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBvYnNlcnZlciA9IF9fZGVwZW5kZW5jeTlf
Xy5vYnNlcnZlcjsKLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5jeTEwX18uZm10OwotICAg
ICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0KLSAg
ICAgICAgZnVuY3Rpb24gY29udGVudFByb3BlcnR5V2lsbENoYW5nZShjb250ZW50LCBjb250ZW50
S2V5KSB7Ci0gICAgICAgICAgICB2YXIga2V5ID0gY29udGVudEtleS5zbGljZSg4KTsgLy8gcmVt
b3ZlICJjb250ZW50LiIKLSAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcykgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGlmIHNoYWRvd2Vk
IGluIHByb3h5Ci0gICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnRlbnRQcm9wZXJ0eURpZENoYW5nZShjb250
ZW50LCBjb250ZW50S2V5KSB7Ci0gICAgICAgICAgICB2YXIga2V5ID0gY29udGVudEtleS5zbGlj
ZSg4KTsgLy8gcmVtb3ZlICJjb250ZW50LiIKLSAgICAgICAgICAgIGlmIChrZXkgaW4gdGhpcykg
ewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IGlmIHNoYWRvd2VkIGluIHByb3h5Ci0gICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlz
LCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5P
YmplY3RQcm94eWAgZm9yd2FyZHMgYWxsIHByb3BlcnRpZXMgbm90IGRlZmluZWQgYnkgdGhlIHBy
b3h5IGl0c2VsZgotICAgICAgICAgICAgICB0byBhIHByb3hpZWQgYGNvbnRlbnRgIG9iamVjdC4K
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIG9iamVjdCA9IEVt
YmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgICAgIG5hbWU6ICdGb28nCi0gICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHByb3h5ID0gRW1iZXIuT2JqZWN0UHJveHkuY3Jl
YXRlKHsKLSAgICAgICAgICAgICAgICBjb250ZW50OiBvYmplY3QKLSAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgLy8gQWNjZXNzIGFuZCBjaGFuZ2UgZXhpc3RpbmcgcHJvcGVydGll
cwotICAgICAgICAgICAgICBwcm94eS5nZXQoJ25hbWUnKSAgICAgICAgICAvLyAnRm9vJwotICAg
ICAgICAgICAgICBwcm94eS5zZXQoJ25hbWUnLCAnQmFyJyk7Ci0gICAgICAgICAgICAgIG9iamVj
dC5nZXQoJ25hbWUnKSAgICAgICAgIC8vICdCYXInCi0KLSAgICAgICAgICAgICAgLy8gQ3JlYXRl
IG5ldyAnZGVzY3JpcHRpb24nIHByb3BlcnR5IG9uIGBvYmplY3RgCi0gICAgICAgICAgICAgIHBy
b3h5LnNldCgnZGVzY3JpcHRpb24nLCAnRm9vIGlzIGEgd2hpemJvbyBiYXonKTsKLSAgICAgICAg
ICAgICAgb2JqZWN0LmdldCgnZGVzY3JpcHRpb24nKSAgLy8gJ0ZvbyBpcyBhIHdoaXpib28gYmF6
JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaGlsZSBgY29udGVudGAgaXMg
dW5zZXQsIHNldHRpbmcgYSBwcm9wZXJ0eSB0byBiZSBkZWxlZ2F0ZWQgd2lsbCB0aHJvdyBhbgot
ICAgICAgICAgICAgICBFcnJvci4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIHByb3h5ID0gRW1iZXIuT2JqZWN0UHJveHkuY3JlYXRlKHsKLSAgICAgICAgICAg
ICAgICBjb250ZW50OiBudWxsLAotICAgICAgICAgICAgICAgIGZsYWc6IG51bGwKLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgIHByb3h5LnNldCgnZmxhZycsIHRydWUpOwotICAgICAg
ICAgICAgICBwcm94eS5nZXQoJ2ZsYWcnKTsgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAg
IHByb3h5LmdldCgnZm9vJyk7ICAgICAgICAgIC8vIHVuZGVmaW5lZAotICAgICAgICAgICAgICBw
cm94eS5zZXQoJ2ZvbycsICdkYXRhJyk7ICAvLyB0aHJvd3MgRXJyb3IKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgRGVsZWdhdGVkIHByb3BlcnRpZXMgY2FuIGJlIGJvdW5kIHRv
IGFuZCB3aWxsIGNoYW5nZSB3aGVuIGNvbnRlbnQgaXMgdXBkYXRlZC4KLQotICAgICAgICAgICAg
ICBDb21wdXRlZCBwcm9wZXJ0aWVzIG9uIHRoZSBwcm94eSBpdHNlbGYgY2FuIGRlcGVuZCBvbiBk
ZWxlZ2F0ZWQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIFByb3h5V2l0aENvbXB1dGVkUHJvcGVydHkgPSBFbWJlci5PYmplY3RQcm94eS5l
eHRlbmQoewotICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICAgICAgICB2YXIgZmlyc3ROYW1lID0gdGhpcy5nZXQoJ2ZpcnN0TmFtZScpLAotICAgICAg
ICAgICAgICAgICAgICAgIGxhc3ROYW1lID0gdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3ROYW1lICYmIGxhc3ROYW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZTsKLSAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE5hbWUgfHwgbGFzdE5hbWU7Ci0gICAg
ICAgICAgICAgICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykKLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgcHJveHkgPSBQcm94eVdpdGhDb21wdXRlZFByb3Bl
cnR5LmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIHByb3h5LmdldCgnZnVsbE5hbWUnKTsgIC8v
IHVuZGVmaW5lZAotICAgICAgICAgICAgICBwcm94eS5zZXQoJ2NvbnRlbnQnLCB7Ci0gICAgICAg
ICAgICAgICAgZmlyc3ROYW1lOiAnVG9tJywgbGFzdE5hbWU6ICdEYWxlJwotICAgICAgICAgICAg
ICB9KTsgLy8gdHJpZ2dlcnMgcHJvcGVydHkgY2hhbmdlIGZvciBmdWxsTmFtZSBvbiBwcm94eQot
Ci0gICAgICAgICAgICAgIHByb3h5LmdldCgnZnVsbE5hbWUnKTsgIC8vICdUb20gRGFsZScKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNzIE9iamVjdFByb3h5Ci0gICAg
ICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIu
T2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgT2JqZWN0UHJveHkgPSBFbWJlck9i
amVjdC5leHRlbmQoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBv
YmplY3Qgd2hvc2UgcHJvcGVydGllcyB3aWxsIGJlIGZvcndhcmRlZC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgY29udGVudAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBFbWJl
ci5PYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRlbnQ6IG51bGwsCi0gICAgICAgICAgICBfY29udGVu
dERpZENoYW5nZTogb2JzZXJ2ZXIoJ2NvbnRlbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIkNhbid0IHNldCBPYmplY3RQcm94eSdzIGNvbnRlbnQgdG8gaXRz
ZWxmIiwgZ2V0KHRoaXMsICdjb250ZW50JykgIT09IHRoaXMpOwotICAgICAgICAgICAgfSksCi0K
LSAgICAgICAgICAgIGlzVHJ1dGh5OiBjb21wdXRlZC5ib29sKCdjb250ZW50JyksCi0KLSAgICAg
ICAgICAgIF9kZWJ1Z0NvbnRhaW5lcktleTogbnVsbCwKLQotICAgICAgICAgICAgd2lsbFdhdGNo
UHJvcGVydHk6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudEtl
eSA9ICdjb250ZW50LicgKyBrZXk7Ci0gICAgICAgICAgICAgICAgYWRkQmVmb3JlT2JzZXJ2ZXIo
dGhpcywgY29udGVudEtleSwgbnVsbCwgY29udGVudFByb3BlcnR5V2lsbENoYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgYWRkT2JzZXJ2ZXIodGhpcywgY29udGVudEtleSwgbnVsbCwgY29udGVudFBy
b3BlcnR5RGlkQ2hhbmdlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRpZFVud2F0
Y2hQcm9wZXJ0eTogZnVuY3Rpb24gKGtleSkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50
S2V5ID0gJ2NvbnRlbnQuJyArIGtleTsKLSAgICAgICAgICAgICAgICByZW1vdmVCZWZvcmVPYnNl
cnZlcih0aGlzLCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlXaWxsQ2hhbmdlKTsK
LSAgICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcih0aGlzLCBjb250ZW50S2V5LCBudWxsLCBj
b250ZW50UHJvcGVydHlEaWRDaGFuZ2UpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
dW5rbm93blByb3BlcnR5OiBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNv
bnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGVu
dCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KGNvbnRlbnQsIGtleSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2V0VW5rbm93blBy
b3BlcnR5OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZhciBtID0g
bWV0YSh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobS5wcm90byA9PT0gdGhpcykgewotICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBtYXJrZWQgYXMgcHJvdG90eXBlIHRoZW4ganVzdCBkZWZp
bmVQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBkZWxlZ2F0ZQot
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIG51bGwsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50Jyk7Ci0g
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiQ2Fubm90IGRlbGVnYXRlIHNldCgnJUAn
LCAlQCkgdG8gdGhlICdjb250ZW50JyBwcm9wZXJ0eSBvZiBvYmplY3QgcHJveHkgJUA6IGl0cyAn
Y29udGVudCcgaXMgdW5kZWZpbmVkLiIsIFtrZXksIHZhbHVlLCB0aGlzXSksIGNvbnRlbnQpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBzZXQoY29udGVudCwga2V5LCB2YWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IE9iamVjdFByb3h5OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9zeXN0ZW0v
c2V0IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJl
ci1tZXRhbC9pc19ub25lIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1y
dW50aW1lL3N5c3RlbS9jb3JlX29iamVjdCIsICJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxl
X2VudW1lcmFibGUiLCAiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsICJlbWJlci1y
dW50aW1lL21peGlucy9jb3B5YWJsZSIsICJlbWJlci1ydW50aW1lL21peGlucy9mcmVlemFibGUi
LCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVt
YmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImV4cG9ydHMiXSwKLSAg
ICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5
M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBf
X2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVu
ZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVu
Y3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2V4cG9ydHNfXykg
ewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVs
ZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAg
ICAqLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgLy8gRW1iZXIuaXNOb25lCi0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJf
Xy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2
YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTRfXy5ndWlkRm9yOwotICAgICAgICB2YXIgaXNOb25l
ID0gX19kZXBlbmRlbmN5NV9fLmlzTm9uZTsKLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5j
eTZfXy5mbXQ7Ci0gICAgICAgIHZhciBDb3JlT2JqZWN0ID0gX19kZXBlbmRlbmN5N19fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBNdXRhYmxlRW51bWVyYWJsZSA9IF9fZGVwZW5kZW5jeThfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW51bWVyYWJsZSA9IF9fZGVwZW5kZW5jeTlfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgQ29weWFibGUgPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBGcmVlemFibGUgPSBfX2RlcGVuZGVuY3kxMV9fLkZyZWV6YWJsZTsK
LSAgICAgICAgdmFyIEZST1pFTl9FUlJPUiA9IF9fZGVwZW5kZW5jeTExX18uRlJPWkVOX0VSUk9S
OwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5kZW5jeTEzX18ucHJvcGVy
dHlXaWxsQ2hhbmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVu
Y3kxM19fLnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIgYWxpYXNNZXRob2QgPSBfX2Rl
cGVuZGVuY3kxNF9fLmFsaWFzTWV0aG9kOwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVu
ZGVuY3kxNV9fLmNvbXB1dGVkOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbiB1bm9y
ZGVyZWQgY29sbGVjdGlvbiBvZiBvYmplY3RzLgotCi0gICAgICAgICAgICAgIEEgU2V0IHdvcmtz
IGEgYml0IGxpa2UgYW4gYXJyYXkgZXhjZXB0IHRoYXQgaXRzIGl0ZW1zIGFyZSBub3Qgb3JkZXJl
ZC4gWW91Ci0gICAgICAgICAgICAgIGNhbiBjcmVhdGUgYSBzZXQgdG8gZWZmaWNpZW50bHkgdGVz
dCBmb3IgbWVtYmVyc2hpcCBmb3IgYW4gb2JqZWN0LiBZb3UgY2FuCi0gICAgICAgICAgICAgIGFs
c28gaXRlcmF0ZSB0aHJvdWdoIGEgc2V0IGp1c3QgbGlrZSBhbiBhcnJheSwgZXZlbiBhY2Nlc3Np
bmcgb2JqZWN0cyBieQotICAgICAgICAgICAgICBpbmRleCwgaG93ZXZlciB0aGVyZSBpcyBubyBn
dWFyYW50ZWUgYXMgdG8gdGhlaXIgb3JkZXIuCi0KLSAgICAgICAgICAgICAgQWxsIFNldHMgYXJl
IG9ic2VydmFibGUgdmlhIHRoZSBFbnVtZXJhYmxlIE9ic2VydmVyIEFQSSAtIHdoaWNoIHdvcmtz
Ci0gICAgICAgICAgICAgIG9uIGFueSBlbnVtZXJhYmxlIG9iamVjdCBpbmNsdWRpbmcgYm90aCBT
ZXRzIGFuZCBBcnJheXMuCi0KLSAgICAgICAgICAgICAgIyMgQ3JlYXRpbmcgYSBTZXQKLQotICAg
ICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIHNldCBsaWtlIHlvdSB3b3VsZCBtb3N0IG9iamVj
dHMgdXNpbmcKLSAgICAgICAgICAgICAgYG5ldyBFbWJlci5TZXQoKWAuIE1vc3QgbmV3IHNldHMg
eW91IGNyZWF0ZSB3aWxsIGJlIGVtcHR5LCBidXQgeW91IGNhbgotICAgICAgICAgICAgICBhbHNv
IGluaXRpYWxpemUgdGhlIHNldCB3aXRoIHNvbWUgY29udGVudCBieSBwYXNzaW5nIGFuIGFycmF5
IG9yIG90aGVyCi0gICAgICAgICAgICAgIGVudW1lcmFibGUgb2Ygb2JqZWN0cyB0byB0aGUgY29u
c3RydWN0b3IuCi0KLSAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBwYXNzIGluIGFuIGV4
aXN0aW5nIHNldCBhbmQgdGhlIHNldCB3aWxsIGJlIGNvcGllZC4gWW91Ci0gICAgICAgICAgICAg
IGNhbiBhbHNvIGNyZWF0ZSBhIGNvcHkgb2YgYSBzZXQgYnkgY2FsbGluZyBgRW1iZXIuU2V0I2Nv
cHkoKWAuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAvLyBj
cmVhdGVzIGEgbmV3IGVtcHR5IHNldAotICAgICAgICAgICAgICB2YXIgZm91bmROYW1lcyA9IG5l
dyBFbWJlci5TZXQoKTsKLQotICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgc2V0IHdpdGggZm91
ciBuYW1lcyBpbiBpdC4KLSAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmV3IEVtYmVyLlNldChb
IkNoYXJsZXMiLCAiVG9tIiwgIkp1YW4iLCAiQWxleCJdKTsgLy8gOlAKLQotICAgICAgICAgICAg
ICAvLyBjcmVhdGVzIGEgY29weSBvZiB0aGUgbmFtZXMgc2V0LgotICAgICAgICAgICAgICB2YXIg
bmFtZXNDb3B5ID0gbmV3IEVtYmVyLlNldChuYW1lcyk7Ci0KLSAgICAgICAgICAgICAgLy8gc2Ft
ZSBhcyBhYm92ZS4KLSAgICAgICAgICAgICAgdmFyIGFub3RoZXJOYW1lc0NvcHkgPSBuYW1lcy5j
b3B5KCk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEFkZGluZy9SZW1v
dmluZyBPYmplY3RzCi0KLSAgICAgICAgICAgICAgWW91IGdlbmVyYWxseSBhZGQgb3IgcmVtb3Zl
IG9iamVjdHMgZnJvbSBhIHNldCB1c2luZyBgYWRkKClgIG9yCi0gICAgICAgICAgICAgIGByZW1v
dmUoKWAuIFlvdSBjYW4gYWRkIGFueSB0eXBlIG9mIG9iamVjdCBpbmNsdWRpbmcgcHJpbWl0aXZl
cyBzdWNoIGFzCi0gICAgICAgICAgICAgIG51bWJlcnMsIHN0cmluZ3MsIGFuZCBib29sZWFucy4K
LQotICAgICAgICAgICAgICBVbmxpa2UgYXJyYXlzLCBvYmplY3RzIGNhbiBvbmx5IGV4aXN0IG9u
ZSB0aW1lIGluIGEgc2V0LiBJZiB5b3UgY2FsbCBgYWRkKClgCi0gICAgICAgICAgICAgIG9uIGEg
c2V0IHdpdGggdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgb2JqZWN0IHdpbGwg
b25seSBiZSBhZGRlZAotICAgICAgICAgICAgICBvbmNlLiBMaWtld2lzZSwgY2FsbGluZyBgcmVt
b3ZlKClgIHdpdGggdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzIHdpbGwKLSAgICAgICAg
ICAgICAgcmVtb3ZlIHRoZSBvYmplY3QgdGhlIGZpcnN0IHRpbWUgYW5kIGhhdmUgbm8gZWZmZWN0
IG9uIGZ1dHVyZSBjYWxscyB1bnRpbAotICAgICAgICAgICAgICB5b3UgYWRkIHRoZSBvYmplY3Qg
dG8gdGhlIHNldCBhZ2Fpbi4KLQotICAgICAgICAgICAgICBOT1RFOiBZb3UgY2Fubm90IGFkZC9y
ZW1vdmUgYG51bGxgIG9yIGB1bmRlZmluZWRgIHRvIGEgc2V0LiBBbnkgYXR0ZW1wdCB0byBkbwot
ICAgICAgICAgICAgICBzbyB3aWxsIGJlIGlnbm9yZWQuCi0KLSAgICAgICAgICAgICAgSW4gYWRk
aXRpb24gdG8gYWRkL3JlbW92ZSB5b3UgY2FuIGFsc28gY2FsbCBgcHVzaCgpYC9gcG9wKClgLiBQ
dXNoIGJlaGF2ZXMKLSAgICAgICAgICAgICAganVzdCBsaWtlIGBhZGQoKWAgYnV0IGBwb3AoKWAs
IHVubGlrZSBgcmVtb3ZlKClgIHdpbGwgcGljayBhbiBhcmJpdHJhcnkKLSAgICAgICAgICAgICAg
b2JqZWN0LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdC4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIHVz
ZSBhIHNldCBhcyBhIGpvYgotICAgICAgICAgICAgICBxdWV1ZSB3aGVuIHlvdSBkb24ndCBjYXJl
IHdoaWNoIG9yZGVyIHRoZSBqb2JzIGFyZSBleGVjdXRlZCBpbi4KLQotICAgICAgICAgICAgICAj
IyBUZXN0aW5nIGZvciBhbiBPYmplY3QKLQotICAgICAgICAgICAgICBUbyB0ZXN0IGZvciBhbiBv
YmplY3QncyBwcmVzZW5jZSBpbiBhIHNldCB5b3Ugc2ltcGx5IGNhbGwKLSAgICAgICAgICAgICAg
YEVtYmVyLlNldCNjb250YWlucygpYC4KLQotICAgICAgICAgICAgICAjIyBPYnNlcnZpbmcgY2hh
bmdlcwotCi0gICAgICAgICAgICAgIFdoZW4gdXNpbmcgYEVtYmVyLlNldGAsIHlvdSBjYW4gb2Jz
ZXJ2ZSB0aGUgYCJbXSJgIHByb3BlcnR5IHRvIGJlCi0gICAgICAgICAgICAgIGFsZXJ0ZWQgd2hl
bmV2ZXIgdGhlIGNvbnRlbnQgY2hhbmdlcy4gWW91IGNhbiBhbHNvIGFkZCBhbiBlbnVtZXJhYmxl
Ci0gICAgICAgICAgICAgIG9ic2VydmVyIHRvIHRoZSBzZXQgdG8gYmUgbm90aWZpZWQgb2Ygc3Bl
Y2lmaWMgb2JqZWN0cyB0aGF0IGFyZSBhZGRlZCBhbmQKLSAgICAgICAgICAgICAgcmVtb3ZlZCBm
cm9tIHRoZSBzZXQuIFNlZSBbRW1iZXIuRW51bWVyYWJsZV0oL2FwaS9jbGFzc2VzL0VtYmVyLkVu
dW1lcmFibGUuaHRtbCkKLSAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW51
bWVyYWJsZXMuCi0KLSAgICAgICAgICAgICAgVGhpcyBpcyBvZnRlbiB1bmhlbHBmdWwuIElmIHlv
dSBhcmUgZmlsdGVyaW5nIHNldHMgb2Ygb2JqZWN0cywgZm9yIGluc3RhbmNlLAotICAgICAgICAg
ICAgICBpdCBpcyB2ZXJ5IGluZWZmaWNpZW50IHRvIHJlLWZpbHRlciBhbGwgb2YgdGhlIGl0ZW1z
IGVhY2ggdGltZSB0aGUgc2V0Ci0gICAgICAgICAgICAgIGNoYW5nZXMuIEl0IHdvdWxkIGJlIGJl
dHRlciBpZiB5b3UgY291bGQganVzdCBhZGp1c3QgdGhlIGZpbHRlcmVkIHNldCBiYXNlZAotICAg
ICAgICAgICAgICBvbiB3aGF0IHdhcyBjaGFuZ2VkIG9uIHRoZSBvcmlnaW5hbCBzZXQuIFRoZSBz
YW1lIGlzc3VlIGFwcGxpZXMgdG8gbWVyZ2luZwotICAgICAgICAgICAgICBzZXRzLCBhcyB3ZWxs
LgotCi0gICAgICAgICAgICAgICMjIE90aGVyIE1ldGhvZHMKLQotICAgICAgICAgICAgICBgRW1i
ZXIuU2V0YCBwcmltYXJ5IGltcGxlbWVudHMgb3RoZXIgbWl4aW4gQVBJcy4gRm9yIGEgY29tcGxl
dGUgcmVmZXJlbmNlCi0gICAgICAgICAgICAgIG9uIHRoZSBtZXRob2RzIHlvdSB3aWxsIHVzZSB3
aXRoIGBFbWJlci5TZXRgLCBwbGVhc2UgY29uc3VsdCB0aGVzZSBtaXhpbnMuCi0gICAgICAgICAg
ICAgIFRoZSBtb3N0IHVzZWZ1bCBvbmVzIHdpbGwgYmUgYEVtYmVyLkVudW1lcmFibGVgIGFuZAot
ICAgICAgICAgICAgICBgRW1iZXIuTXV0YWJsZUVudW1lcmFibGVgIHdoaWNoIGltcGxlbWVudCBt
b3N0IG9mIHRoZSBjb21tb24gaXRlcmF0b3IKLSAgICAgICAgICAgICAgbWV0aG9kcyB5b3UgYXJl
IHVzZWQgdG8gb24gQXJyYXkuCi0KLSAgICAgICAgICAgICAgTm90ZSB0aGF0IHlvdSBjYW4gYWxz
byB1c2UgdGhlIGBFbWJlci5Db3B5YWJsZWAgYW5kIGBFbWJlci5GcmVlemFibGVgCi0gICAgICAg
ICAgICAgIEFQSXMgb24gYEVtYmVyLlNldGAgYXMgd2VsbC4gT25jZSBhIHNldCBpcyBmcm96ZW4g
aXQgY2FuIG5vIGxvbmdlciBiZQotICAgICAgICAgICAgICBtb2RpZmllZC4gVGhlIGJlbmVmaXQg
b2YgdGhpcyBpcyB0aGF0IHdoZW4geW91IGNhbGwgYGZyb3plbkNvcHkoKWAgb24gaXQsCi0gICAg
ICAgICAgICAgIEVtYmVyIHdpbGwgYXZvaWQgbWFraW5nIGNvcGllcyBvZiB0aGUgc2V0LiBUaGlz
IGFsbG93cyB5b3UgdG8gd3JpdGUKLSAgICAgICAgICAgICAgY29kZSB0aGF0IGNhbiBrbm93IHdp
dGggY2VydGFpbnR5IHdoZW4gdGhlIHVuZGVybHlpbmcgc2V0IGRhdGEgd2lsbCBvcgotICAgICAg
ICAgICAgICB3aWxsIG5vdCBiZSBtb2RpZmllZC4KLQotICAgICAgICAgICAgICBAY2xhc3MgU2V0
Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMg
RW1iZXIuQ29yZU9iamVjdAotICAgICAgICAgICAgICBAdXNlcyBFbWJlci5NdXRhYmxlRW51bWVy
YWJsZQotICAgICAgICAgICAgICBAdXNlcyBFbWJlci5Db3B5YWJsZQotICAgICAgICAgICAgICBA
dXNlcyBFbWJlci5GcmVlemFibGUKLSAgICAgICAgICAgICAgQHNpbmNlIEVtYmVyIDAuOQotICAg
ICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IENvcmVPYmplY3Qu
ZXh0ZW5kKE11dGFibGVFbnVtZXJhYmxlLCBDb3B5YWJsZSwgRnJlZXphYmxlLCB7Ci0KLSAgICAg
ICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIElNUExFTUVOVCBFTlVNRVJBQkxFIEFQSVMKLSAg
ICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlz
IHByb3BlcnR5IHdpbGwgY2hhbmdlIGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0
IGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGxlbmd0aAotICAgICAg
ICAgICAgICAgICAgICBAdHlwZSBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQg
MAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxlbmd0aDogMCwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENsZWFycyB0aGUgc2V0LiBUaGlzIGlzIHVz
ZWZ1bCBpZiB5b3Ugd2FudCB0byByZXVzZSBhbiBleGlzdGluZyBzZXQKLSAgICAgICAgICAgICAg
ICAgICAgd2l0aG91dCBoYXZpbmcgdG8gcmVjcmVhdGUgaXQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEVt
YmVyLlNldChbInJlZCIsICJncmVlbiIsICJibHVlIl0pOwotICAgICAgICAgICAgICAgICAgICBj
b2xvcnMubGVuZ3RoOyAgLy8gMwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuY2xlYXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JzLmxlbmd0aDsgIC8vIDAKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjbGVhcgotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5TZXR9IEFuIGVtcHR5IFNldAotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5pc0Zyb3plbikgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1i
ZXJFcnJvcihGUk9aRU5fRVJST1IpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhciBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpOwotICAgICAgICAgICAgICAgIGlmIChs
ZW4gPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGd1aWQ7Ci0KLSAgICAgICAgICAgICAgICB0
aGlzLmVudW1lcmFibGVDb250ZW50V2lsbENoYW5nZShsZW4sIDApOwotICAgICAgICAgICAgICAg
IHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsKLQotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
Z3VpZCA9IGd1aWRGb3IodGhpc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlz
W2d1aWRdOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tpXTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ2xlbmd0aCcsIDApOwotCi0gICAg
ICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2ZpcnN0T2JqZWN0Jyk7Ci0gICAg
ICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLmVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdlKGxlbiwgMCk7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBvYmpl
Y3QgaXMgYWxzbyBhbiBlbnVtZXJhYmxlIHRoYXQgY29udGFpbnMgdGhlCi0gICAgICAgICAgICAg
ICAgICAgIHNhbWUgb2JqZWN0cyBhcyB0aGUgcmVjZWl2ZXIuCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gWyJyZWQi
LCAiZ3JlZW4iLCAiYmx1ZSJdLAotICAgICAgICAgICAgICAgICAgICAgICAgc2FtZV9jb2xvcnMg
PSBuZXcgRW1iZXIuU2V0KGNvbG9ycyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2FtZV9jb2xv
cnMuaXNFcXVhbChjb2xvcnMpOyAgICAgICAgICAgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAg
ICAgICAgc2FtZV9jb2xvcnMuaXNFcXVhbChbInB1cnBsZSIsICJicm93biJdKTsgIC8vIGZhbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
aXNFcXVhbAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLlNldH0gb2JqIHRoZSBv
dGhlciBvYmplY3QuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaXNFcXVhbDogZnVuY3Rpb24ob2JqKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gZmFpbCBmYXN0Ci0gICAgICAgICAgICAgICAgaWYgKCFFbnVtZXJh
YmxlLmRldGVjdChvYmopKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICAgICAgdmFyIGxvYyA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGdldChvYmosICdsZW5ndGgnKSAhPT0gbG9jKSAKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKC0tbG9jID49IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFvYmouY29udGFpbnModGhpc1tsb2NdKSkgCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyBhbiBvYmplY3QgdG8gdGhlIHNldC4gT25s
eSBub24tYG51bGxgIG9iamVjdHMgY2FuIGJlIGFkZGVkIHRvIGEgc2V0Ci0gICAgICAgICAgICAg
ICAgICAgIGFuZCB0aG9zZSBjYW4gb25seSBiZSBhZGRlZCBvbmNlLiBJZiB0aGUgb2JqZWN0IGlz
IGFscmVhZHkgaW4gdGhlIHNldCBvcgotICAgICAgICAgICAgICAgICAgICB0aGUgcGFzc2VkIHZh
bHVlIGlzIG51bGwgdGhpcyBtZXRob2Qgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLQotICAgICAgICAg
ICAgICAgICAgICBUaGlzIGlzIGFuIGFsaWFzIGZvciBgRW1iZXIuTXV0YWJsZUVudW1lcmFibGUu
YWRkT2JqZWN0KClgLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBFbWJlci5TZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzLmFkZCgiYmx1ZSIpOyAgICAgLy8gWyJibHVlIl0KLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzLmFkZCgiYmx1ZSIpOyAgICAgLy8gWyJibHVlIl0KLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzLmFkZCgicmVkIik7ICAgICAgLy8gWyJibHVlIiwgInJlZCJdCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9ycy5hZGQobnVsbCk7ICAgICAgIC8vIFsiYmx1ZSIsICJyZWQi
XQotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuYWRkKHVuZGVmaW5lZCk7ICAvLyBbImJsdWUi
LCAicmVkIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBhZGQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUg
b2JqZWN0IHRvIGFkZC4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuU2V0fSBU
aGUgc2V0IGl0c2VsZi4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGQ6IGFs
aWFzTWV0aG9kKCdhZGRPYmplY3QnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJlbW92ZXMgdGhlIG9iamVjdCBmcm9tIHRoZSBzZXQgaWYgaXQgaXMgZm91bmQuIElm
IHlvdSBwYXNzIGEgYG51bGxgIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIG9yIGFuIG9iamVj
dCB0aGF0IGlzIGFscmVhZHkgbm90IGluIHRoZSBzZXQsIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSBu
bwotICAgICAgICAgICAgICAgICAgICBlZmZlY3QuIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGBFbWJl
ci5NdXRhYmxlRW51bWVyYWJsZS5yZW1vdmVPYmplY3QoKWAuCi0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEVt
YmVyLlNldChbInJlZCIsICJncmVlbiIsICJibHVlIl0pOwotICAgICAgICAgICAgICAgICAgICBj
b2xvcnMucmVtb3ZlKCJyZWQiKTsgICAgIC8vIFsiYmx1ZSIsICJncmVlbiJdCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9ycy5yZW1vdmUoInB1cnBsZSIpOyAgLy8gWyJibHVlIiwgImdyZWVuIl0K
LSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnJlbW92ZShudWxsKTsgICAgICAvLyBbImJsdWUi
LCAiZ3JlZW4iXQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIHJlbW92ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2Jq
IFRoZSBvYmplY3QgdG8gcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVy
LlNldH0gVGhlIHNldCBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
cmVtb3ZlOiBhbGlhc01ldGhvZCgncmVtb3ZlT2JqZWN0JyksCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0aGUgc2V0
IGFuZCByZXR1cm5zIGl0LCBvciBgbnVsbGAgaWYgaXQncyBlbXB0eS4KLQotICAgICAgICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBu
ZXcgRW1iZXIuU2V0KFsiZ3JlZW4iLCAiYmx1ZSJdKTsKLSAgICAgICAgICAgICAgICAgICAgY29s
b3JzLnBvcCgpOyAgLy8gImJsdWUiCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wb3AoKTsg
IC8vICJncmVlbiIKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnBvcCgpOyAgLy8gbnVsbAot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHBv
cAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSByZW1vdmVkIG9iamVj
dCBmcm9tIHRoZSBzZXQgb3IgbnVsbC4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBwb3A6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywgJ2lzRnJv
emVuJykpIAotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihGUk9aRU5f
RVJST1IpOwotICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmxlbmd0aCA+IDAgPyB0aGlz
W3RoaXMubGVuZ3RoLTFdIDogbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShvYmop
OwotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW5zZXJ0cyB0aGUgZ2l2ZW4gb2JqZWN0IG9u
IHRvIHRoZSBlbmQgb2YgdGhlIHNldC4gSXQgcmV0dXJucwotICAgICAgICAgICAgICAgICAgICB0
aGUgc2V0IGl0c2VsZi4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGFsaWFzIGZv
ciBgRW1iZXIuTXV0YWJsZUVudW1lcmFibGUuYWRkT2JqZWN0KClgLgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5l
dyBFbWJlci5TZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goInJlZCIpOyAg
IC8vIFsicmVkIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goImdyZWVuIik7IC8v
IFsicmVkIiwgImdyZWVuIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goImJsdWUi
KTsgIC8vIFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHB1c2gKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiB7RW1iZXIuU2V0fSBUaGUgc2V0IGl0c2VsZi4KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBwdXNoOiBhbGlhc01ldGhvZCgnYWRkT2JqZWN0JyksCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQgZnJv
bSB0aGUgc2V0IGFuZCByZXR1cm5zIGl0LCBvciBgbnVsbGAgaWYgaXQncyBlbXB0eS4KLQotICAg
ICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGFsaWFzIGZvciBgRW1iZXIuU2V0LnBvcCgpYC4K
LQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBjb2xvcnMgPSBuZXcgRW1iZXIuU2V0KFsiZ3JlZW4iLCAiYmx1ZSJdKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JzLnNoaWZ0KCk7ICAvLyAiYmx1ZSIKLSAgICAgICAgICAgICAgICAg
ICAgY29sb3JzLnNoaWZ0KCk7ICAvLyAiZ3JlZW4iCi0gICAgICAgICAgICAgICAgICAgIGNvbG9y
cy5zaGlmdCgpOyAgLy8gbnVsbAotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09i
amVjdH0gVGhlIHJlbW92ZWQgb2JqZWN0IGZyb20gdGhlIHNldCBvciBudWxsLgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHNoaWZ0OiBhbGlhc01ldGhvZCgncG9wJyksCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJbnNlcnRzIHRoZSBnaXZlbiBvYmpl
Y3Qgb24gdG8gdGhlIGVuZCBvZiB0aGUgc2V0LiBJdCByZXR1cm5zCi0gICAgICAgICAgICAgICAg
ICAgIHRoZSBzZXQgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4gYWxp
YXMgb2YgYEVtYmVyLlNldC5wdXNoKClgCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEVtYmVyLlNldCgpOwot
ICAgICAgICAgICAgICAgICAgICBjb2xvcnMudW5zaGlmdCgicmVkIik7ICAgIC8vIFsicmVkIl0K
LSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnVuc2hpZnQoImdyZWVuIik7ICAvLyBbInJlZCIs
ICJncmVlbiJdCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy51bnNoaWZ0KCJibHVlIik7ICAg
Ly8gWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdW5zaGlmdAotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtFbWJlci5TZXR9IFRoZSBzZXQgaXRzZWxmLgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHVuc2hpZnQ6IGFsaWFzTWV0aG9kKCdwdXNoJyksCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBBZGRzIGVhY2ggb2JqZWN0IGluIHRoZSBwYXNzZWQg
ZW51bWVyYWJsZSB0byB0aGUgc2V0LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4g
YWxpYXMgb2YgYEVtYmVyLk11dGFibGVFbnVtZXJhYmxlLmFkZE9iamVjdHMoKWAKLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xv
cnMgPSBuZXcgRW1iZXIuU2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5hZGRFYWNo
KFsicmVkIiwgImdyZWVuIiwgImJsdWUiXSk7ICAvLyBbInJlZCIsICJncmVlbiIsICJibHVlIl0K
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBh
ZGRFYWNoCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZX0gb2Jq
ZWN0cyB0aGUgb2JqZWN0cyB0byBhZGQuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLlNldH0gVGhlIHNldCBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgYWRkRWFjaDogYWxpYXNNZXRob2QoJ2FkZE9iamVjdHMnKSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFJlbW92ZXMgZWFjaCBvYmplY3QgaW4gdGhlIHBhc3NlZCBl
bnVtZXJhYmxlIHRvIHRoZSBzZXQuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBh
bGlhcyBvZiBgRW1iZXIuTXV0YWJsZUVudW1lcmFibGUucmVtb3ZlT2JqZWN0cygpYAotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNv
bG9ycyA9IG5ldyBFbWJlci5TZXQoWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JzLnJlbW92ZUVhY2goWyJyZWQiLCAiYmx1ZSJdKTsgIC8vICBbImdy
ZWVuIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCByZW1vdmVFYWNoCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVy
YWJsZX0gb2JqZWN0cyB0aGUgb2JqZWN0cyB0byByZW1vdmUuCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0VtYmVyLlNldH0gVGhlIHNldCBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgcmVtb3ZlRWFjaDogYWxpYXNNZXRob2QoJ3JlbW92ZU9iamVjdHMnKSwK
LQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gUFJJVkFURSBFTlVNRVJBQkxFIFNV
UFBPUlQKLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGl0ZW1z
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXRlbXMpIAotICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE9iamVjdHMoaXRlbXMpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gaW1wbGVtZW50IEVtYmVyLkVudW1lcmFibGUK
LSAgICAgICAgICAgIG5leHRPYmplY3Q6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzW2lkeF07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBtb3Jl
IG9wdGltaXplZCB2ZXJzaW9uCi0gICAgICAgICAgICBmaXJzdE9iamVjdDogY29tcHV0ZWQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMCA/IHRoaXNb
MF0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLy8gbW9yZSBv
cHRpbWl6ZWQgdmVyc2lvbgotICAgICAgICAgICAgbGFzdE9iamVjdDogY29tcHV0ZWQoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMCA/IHRoaXNbdGhp
cy5sZW5ndGgtMV0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAg
Ly8gaW1wbGVtZW50cyBFbWJlci5NdXRhYmxlRW51bWVyYWJsZQotICAgICAgICAgICAgYWRkT2Jq
ZWN0OiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdpc0Zy
b3plbicpKSAKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoRlJPWkVO
X0VSUk9SKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNOb25lKG9iaikpIAotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsgLy8gbm90aGluZyB0byBkbwotCi0gICAgICAgICAgICAgICAg
dmFyIGd1aWQgPSBndWlkRm9yKG9iaiksCi0gICAgICAgICAgICAgICAgaWR4ID0gdGhpc1tndWlk
XSwKLSAgICAgICAgICAgICAgICBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpLAotICAgICAgICAg
ICAgICAgIGFkZGVkIDsKLQotICAgICAgICAgICAgICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCBs
ZW4gJiYgKHRoaXNbaWR4XSA9PT0gb2JqKSkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOyAvLyBhZGRlZAotCi0gICAgICAgICAgICAgICAgYWRkZWQgPSBbb2JqXTsKLQotICAgICAg
ICAgICAgICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlKG51bGwsIGFkZGVkKTsK
LSAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsK
LQotICAgICAgICAgICAgICAgIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAg
ICAgICAgdGhpc1tndWlkXSA9IGxlbjsKLSAgICAgICAgICAgICAgICB0aGlzW2xlbl0gPSBvYmo7
Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdsZW5ndGgnLCBsZW4gKyAxKTsKLQotICAgICAg
ICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdsYXN0T2JqZWN0Jyk7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudERpZENoYW5nZShudWxsLCBhZGRlZCk7Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8vIGltcGxlbWVudHMgRW1iZXIuTXV0YWJsZUVudW1lcmFibGUKLSAgICAgICAgICAgIHJl
bW92ZU9iamVjdDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlz
LCAnaXNGcm96ZW4nKSkgCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9y
KEZST1pFTl9FUlJPUik7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTm9uZShvYmopKSAKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIG5vdGhpbmcgdG8gZG8KLQotICAgICAgICAg
ICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihvYmopLAotICAgICAgICAgICAgICAgIGlkeCA9IHRo
aXNbZ3VpZF0sCi0gICAgICAgICAgICAgICAgbGVuID0gZ2V0KHRoaXMsICdsZW5ndGgnKSwKLSAg
ICAgICAgICAgICAgICBpc0ZpcnN0ID0gaWR4ID09PSAwLAotICAgICAgICAgICAgICAgIGlzTGFz
dCA9IGlkeCA9PT0gbGVuLTEsCi0gICAgICAgICAgICAgICAgbGFzdCwgcmVtb3ZlZDsKLQotCi0g
ICAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IGxlbiAmJiAodGhpc1tpZHhdID09
PSBvYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBbb2JqXTsKLQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmVudW1lcmFibGVDb250ZW50V2lsbENoYW5nZShyZW1vdmVkLCBu
dWxsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3Qn
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHN3YXAg
aXRlbXMgLSBiYXNpY2FsbHkgbW92ZSB0aGUgaXRlbSB0byB0aGUgZW5kIHNvIGl0IGNhbiBiZSBy
ZW1vdmVkCi0gICAgICAgICAgICAgICAgICAgIGlmIChpZHggPCBsZW4tMSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdCA9IHRoaXNbbGVuLTFdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpc1tpZHhdID0gbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZ3VpZEZv
cihsYXN0KV0gPSBpZHg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgdGhpc1tndWlkXTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNb
bGVuLTFdOwotICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgJ2xlbmd0aCcsIGxlbi0xKTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2ZpcnN0T2JqZWN0Jyk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLmVudW1lcmFibGVD
b250ZW50RGlkQ2hhbmdlKHJlbW92ZWQsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
Ly8gb3B0aW1pemVkIHZlcnNpb24KLSAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvYmop
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tndWlkRm9yKG9iaildID49IDA7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBjb3B5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgQyA9IHRoaXMuY29uc3RydWN0b3IsIHJldCA9IG5ldyBDKCksIGxvYyA9IGdldCh0
aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgc2V0KHJldCwgJ2xlbmd0aCcsIGxvYyk7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tbG9jID49IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0W2xvY10gPSB0aGlzW2xvY107Ci0gICAgICAgICAgICAgICAgICAgIHJldFtndWlkRm9y
KHRoaXNbbG9jXSldID0gbG9jOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCwgaWR4LCBhcnJh
eSA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykg
ewotICAgICAgICAgICAgICAgICAgICBhcnJheVtpZHhdID0gdGhpc1tpZHhdOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZm10KCJFbWJlci5TZXQ8JUA+IiwgW2Fy
cmF5LmpvaW4oJywnKV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAg
ICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVt
YmVyLlNUUklOR1MsIEVtYmVyLkZFQVRVUkVTCi0gICAgICAgIHZhciBpc0FycmF5ID0gX19kZXBl
bmRlbmN5Ml9fLmlzQXJyYXk7Ci0gICAgICAgIHZhciBlbWJlckluc3BlY3QgPSBfX2RlcGVuZGVu
Y3kyX18uaW5zcGVjdDsKLQotICAgICAgICB2YXIgU1RSSU5HX0RBU0hFUklaRV9SRUdFWFAgPSAo
L1sgX10vZyk7Ci0gICAgICAgIHZhciBTVFJJTkdfREFTSEVSSVpFX0NBQ0hFID0ge307Ci0gICAg
ICAgIHZhciBTVFJJTkdfREVDQU1FTElaRV9SRUdFWFAgPSAoLyhbYS16XGRdKShbQS1aXSkvZyk7
Ci0gICAgICAgIHZhciBTVFJJTkdfQ0FNRUxJWkVfUkVHRVhQID0gKC8oXC18X3xcLnxccykrKC4p
Py9nKTsKLSAgICAgICAgdmFyIFNUUklOR19VTkRFUlNDT1JFX1JFR0VYUF8xID0gKC8oW2Etelxk
XSkoW0EtWl0rKS9nKTsKLSAgICAgICAgdmFyIFNUUklOR19VTkRFUlNDT1JFX1JFR0VYUF8yID0g
KC9cLXxccysvZyk7Ci0KLSAgICAgICAgZnVuY3Rpb24gZm10KHN0ciwgZm9ybWF0cykgewotICAg
ICAgICAgICAgaWYgKCFpc0FycmF5KGZvcm1hdHMpIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7
Ci0gICAgICAgICAgICAgICAgZm9ybWF0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cywgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGZpcnN0LCByZXBs
YWNlIGFueSBPUkRFUkVEIHJlcGxhY2VtZW50cy4KLSAgICAgICAgICAgIHZhciBpZHggPSAwOyAv
LyB0aGUgY3VycmVudCBpbmRleCBmb3Igbm9uLW51bWVyaWNhbCByZXBsYWNlbWVudHMKLSAgICAg
ICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJUAoWzAtOV0rKT8vZywgZnVuY3Rpb24ocywgYXJn
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhcmdJbmRleCA9IChhcmdJbmRleCkgPyBwYXJzZUlu
dChhcmdJbmRleCwgMTApIC0gMSA6IGlkeCsrOwotICAgICAgICAgICAgICAgIHMgPSBmb3JtYXRz
W2FyZ0luZGV4XTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHMgPT09IG51bGwpID8gJyhudWxs
KScgOiAocyA9PT0gdW5kZWZpbmVkKSA/ICcnIDogZW1iZXJJbnNwZWN0KHMpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBsb2Moc3RyLCBmb3JtYXRzKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXkoZm9ybWF0cykgfHwgYXJndW1lbnRzLmxlbmd0aCA+
IDIpIHsKLSAgICAgICAgICAgICAgICBmb3JtYXRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RyID0gRW1i
ZXIuU1RSSU5HU1tzdHJdIHx8IHN0cjsKLSAgICAgICAgICAgIHJldHVybiBmbXQoc3RyLCBmb3Jt
YXRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHcoc3RyKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RyLnNwbGl0KC9ccysvKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGRlY2FtZWxpemUoc3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoU1RSSU5H
X0RFQ0FNRUxJWkVfUkVHRVhQLCAnJDFfJDInKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gZGFzaGVyaXplKHN0cikgewotICAgICAgICAgICAgdmFyIGNhY2hl
ID0gU1RSSU5HX0RBU0hFUklaRV9DQUNIRSwKLSAgICAgICAgICAgIGhpdCA9IGNhY2hlLmhhc093
blByb3BlcnR5KHN0ciksCi0gICAgICAgICAgICByZXQ7Ci0KLSAgICAgICAgICAgIGlmIChoaXQp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbc3RyXTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gZGVjYW1lbGl6ZShzdHIpLnJlcGxhY2UoU1RSSU5H
X0RBU0hFUklaRV9SRUdFWFAsICctJyk7Ci0gICAgICAgICAgICAgICAgY2FjaGVbc3RyXSA9IHJl
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGNhbWVsaXplKHN0cikgewotICAgICAgICAgICAgcmV0dXJuIHN0
ci5yZXBsYWNlKFNUUklOR19DQU1FTElaRV9SRUdFWFAsIGZ1bmN0aW9uKG1hdGNoLCBzZXBhcmF0
b3IsIGNocikgewotICAgICAgICAgICAgICAgIHJldHVybiBjaHIgPyBjaHIudG9VcHBlckNhc2Uo
KSA6ICcnOwotICAgICAgICAgICAgfSkucmVwbGFjZSgvXihbQS1aXSkvLCBmdW5jdGlvbihtYXRj
aCwgc2VwYXJhdG9yLCBjaHIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2gudG9Mb3dl
ckNhc2UoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
Y2xhc3NpZnkoc3RyKSB7Ci0gICAgICAgICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoIi4iKSwK
LSAgICAgICAgICAgIG91dCA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9
IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBjYW1lbGl6
ZWQgPSBjYW1lbGl6ZShwYXJ0c1tpXSk7Ci0gICAgICAgICAgICAgICAgb3V0LnB1c2goY2FtZWxp
emVkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2FtZWxpemVkLnN1YnN0cigxKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBvdXQuam9pbigiLiIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gdW5kZXJzY29yZShzdHIpIHsKLSAgICAgICAgICAgIHJldHVy
biBzdHIucmVwbGFjZShTVFJJTkdfVU5ERVJTQ09SRV9SRUdFWFBfMSwgJyQxXyQyJykuCi0gICAg
ICAgICAgICByZXBsYWNlKFNUUklOR19VTkRFUlNDT1JFX1JFR0VYUF8yLCAnXycpLnRvTG93ZXJD
YXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cikgewot
ICAgICAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJz
dHIoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGVmaW5lcyB0
aGUgaGFzaCBvZiBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuIFVz
ZWQgYnkKLSAgICAgICAgICAgICAgdGhlIGBFbWJlci5TdHJpbmcubG9jKClgIGhlbHBlci4gVG8g
bG9jYWxpemUsIGFkZCBzdHJpbmcgdmFsdWVzIHRvIHRoaXMKLSAgICAgICAgICAgICAgaGFzaC4K
LQotICAgICAgICAgICAgICBAcHJvcGVydHkgU1RSSU5HUwotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICovCi0gICAgICAgIEVt
YmVyLlNUUklOR1MgPSB7fTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGVmaW5lcyBz
dHJpbmcgaGVscGVyIG1ldGhvZHMgaW5jbHVkaW5nIHN0cmluZyBmb3JtYXR0aW5nIGFuZCBsb2Nh
bGl6YXRpb24uCi0gICAgICAgICAgICAgIFVubGVzcyBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMu
U3RyaW5nYCBpcyBgZmFsc2VgIHRoZXNlIG1ldGhvZHMgd2lsbCBhbHNvIGJlCi0gICAgICAgICAg
ICAgIGFkZGVkIHRvIHRoZSBgU3RyaW5nLnByb3RvdHlwZWAgYXMgd2VsbC4KLQotICAgICAgICAg
ICAgICBAY2xhc3MgU3RyaW5nCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAg
ICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRl
ZmF1bHQiXSA9IHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBcHBseSBm
b3JtYXR0aW5nIG9wdGlvbnMgdG8gdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxvb2sgZm9yIG9jY3Vy
cmVuY2VzCi0gICAgICAgICAgICAgICAgICAgIG9mICIlQCIgaW4geW91ciBzdHJpbmcgYW5kIHN1
YnN0aXR1dGUgdGhlbSB3aXRoIHRoZSBhcmd1bWVudHMgeW91IHBhc3MgaW50bwotICAgICAgICAg
ICAgICAgICAgICB0aGlzIG1ldGhvZC4gSWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgc3BlY2lm
aWMgb3JkZXIgb2YgcmVwbGFjZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWRk
IGEgbnVtYmVyIGFmdGVyIHRoZSBrZXkgYXMgd2VsbCB0byBpbmRpY2F0ZSB3aGljaCBhcmd1bWVu
dAotICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBpbnNlcnQuCi0KLSAgICAgICAgICAg
ICAgICAgICAgT3JkZXJlZCBpbnNlcnRpb25zIGFyZSBtb3N0IHVzZWZ1bCB3aGVuIGJ1aWxkaW5n
IGxvYyBzdHJpbmdzIHdoZXJlIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCB0
byBpbnNlcnQgbWF5IGFwcGVhciBpbiBkaWZmZXJlbnQgb3JkZXJzLgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgIkhlbGxvICVAICVAIi5m
bXQoJ0pvaG4nLCAnRG9lJyk7ICAgICAvLyAiSGVsbG8gSm9obiBEb2UiCi0gICAgICAgICAgICAg
ICAgICAgICJIZWxsbyAlQDIsICVAMSIuZm10KCdKb2huJywgJ0RvZScpOyAgLy8gIkhlbGxvIERv
ZSwgSm9obiIKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBmbXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUg
c3RyaW5nIHRvIGZvcm1hdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBmb3Jt
YXRzIEFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gaW50ZXJwb2xhdGUgaW50byBzdHJpbmcuCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gZm9ybWF0dGVkIHN0cmluZwotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZtdDogZm10LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgRm9ybWF0cyB0aGUgcGFzc2VkIHN0cmluZywgYnV0IGZp
cnN0IGxvb2tzIHVwIHRoZSBzdHJpbmcgaW4gdGhlIGxvY2FsaXplZAotICAgICAgICAgICAgICAg
ICAgICBzdHJpbmdzIGhhc2guIFRoaXMgaXMgYSBjb252ZW5pZW50IHdheSB0byBsb2NhbGl6ZSB0
ZXh0LiBTZWUKLSAgICAgICAgICAgICAgICAgICAgYEVtYmVyLlN0cmluZy5mbXQoKWAgZm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gZm9ybWF0dGluZy4KLQotICAgICAgICAgICAgICAgICAgICBOb3Rl
IHRoYXQgaXQgaXMgdHJhZGl0aW9uYWwgYnV0IG5vdCByZXF1aXJlZCB0byBwcmVmaXggbG9jYWxp
emVkIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBrZXlzIHdpdGggYW4gdW5kZXJzY29yZSBv
ciBvdGhlciBjaGFyYWN0ZXIgc28geW91IGNhbiBlYXNpbHkgaWRlbnRpZnkKLSAgICAgICAgICAg
ICAgICAgICAgbG9jYWxpemVkIHN0cmluZ3MuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5TVFJJTkdTID0gewotICAgICAgICAg
ICAgICAgICAgICAgICdfSGVsbG8gV29ybGQnOiAnQm9uam91ciBsZSBtb25kZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgJ19IZWxsbyAlQCAlQCc6ICdCb25qb3VyICVAICVAJwotICAgICAgICAg
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlN0cmluZy5sb2MoIl9I
ZWxsbyBXb3JsZCIpOyAgLy8gJ0JvbmpvdXIgbGUgbW9uZGUnOwotICAgICAgICAgICAgICAgICAg
ICBFbWJlci5TdHJpbmcubG9jKCJfSGVsbG8gJUAgJUAiLCBbIkpvaG4iLCAiU21pdGgiXSk7ICAv
LyAiQm9uam91ciBKb2huIFNtaXRoIjsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBsb2MKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGZvcm1hdAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0FycmF5fSBmb3JtYXRzIE9wdGlvbmFsIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gaW50ZXJw
b2xhdGUgaW50byBzdHJpbmcuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30g
Zm9ybWF0dGVkIHN0cmluZwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxvYzog
bG9jLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU3BsaXRzIGEgc3Ry
aW5nIGludG8gc2VwYXJhdGUgdW5pdHMgc2VwYXJhdGVkIGJ5IHNwYWNlcywgZWxpbWluYXRpbmcg
YW55Ci0gICAgICAgICAgICAgICAgICAgIGVtcHR5IHN0cmluZ3MgaW4gdGhlIHByb2Nlc3MuIFRo
aXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIHNwbGl0IHRoYXQKLSAgICAgICAgICAgICAg
ICAgICAgaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIGFwcGxpZWQgdG8gdGhlIGBTdHJpbmcucHJvdG90
eXBlYC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLlN0cmluZy53KCJhbHBoYSBiZXRhIGdhbW1hIikuZm9yRWFjaChmdW5jdGlv
bihrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyA+IGFscGhhCi0gICAg
ICAgICAgICAgICAgICAgIC8vID4gYmV0YQotICAgICAgICAgICAgICAgICAgICAvLyA+IGdhbW1h
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
dwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8g
c3BsaXQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IGFycmF5IGNvbnRhaW5p
bmcgdGhlIHNwbGl0IHN0cmluZ3MKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3
OiB3LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ29udmVydHMgYSBj
YW1lbGl6ZWQgc3RyaW5nIGludG8gYWxsIGxvd2VyIGNhc2Ugc2VwYXJhdGVkIGJ5IHVuZGVyc2Nv
cmVzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgJ2lubmVySFRNTCcuZGVjYW1lbGl6ZSgpOyAgICAgICAgICAgLy8gJ2lubmVyX2h0bWwn
Ci0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZScuZGVjYW1lbGl6ZSgpOyAgICAgICAg
Ly8gJ2FjdGlvbl9uYW1lJwotICAgICAgICAgICAgICAgICAgICAnY3NzLWNsYXNzLW5hbWUnLmRl
Y2FtZWxpemUoKTsgICAgIC8vICdjc3MtY2xhc3MtbmFtZScKLSAgICAgICAgICAgICAgICAgICAg
J215IGZhdm9yaXRlIGl0ZW1zJy5kZWNhbWVsaXplKCk7ICAvLyAnbXkgZmF2b3JpdGUgaXRlbXMn
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
ZGVjYW1lbGl6ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBz
dHJpbmcgdG8gZGVjYW1lbGl6ZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5n
fSB0aGUgZGVjYW1lbGl6ZWQgc3RyaW5nLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGRlY2FtZWxpemU6IGRlY2FtZWxpemUsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBSZXBsYWNlcyB1bmRlcnNjb3Jlcywgc3BhY2VzLCBvciBjYW1lbENhc2Ugd2l0
aCBkYXNoZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICAgICAgICAnaW5uZXJIVE1MJy5kYXNoZXJpemUoKTsgICAgICAgICAgLy8gJ2lubmVyLWh0
bWwnCi0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZScuZGFzaGVyaXplKCk7ICAgICAg
ICAvLyAnYWN0aW9uLW5hbWUnCi0gICAgICAgICAgICAgICAgICAgICdjc3MtY2xhc3MtbmFtZScu
ZGFzaGVyaXplKCk7ICAgICAvLyAnY3NzLWNsYXNzLW5hbWUnCi0gICAgICAgICAgICAgICAgICAg
ICdteSBmYXZvcml0ZSBpdGVtcycuZGFzaGVyaXplKCk7ICAvLyAnbXktZmF2b3JpdGUtaXRlbXMn
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
ZGFzaGVyaXplCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0
cmluZyB0byBkYXNoZXJpemUuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30g
dGhlIGRhc2hlcml6ZWQgc3RyaW5nLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGRhc2hlcml6ZTogZGFzaGVyaXplLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgUmV0dXJucyB0aGUgbG93ZXJDYW1lbENhc2UgZm9ybSBvZiBhIHN0cmluZy4KLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICdpbm5l
ckhUTUwnLmNhbWVsaXplKCk7ICAgICAgICAgIC8vICdpbm5lckhUTUwnCi0gICAgICAgICAgICAg
ICAgICAgICdhY3Rpb25fbmFtZScuY2FtZWxpemUoKTsgICAgICAgIC8vICdhY3Rpb25OYW1lJwot
ICAgICAgICAgICAgICAgICAgICAnY3NzLWNsYXNzLW5hbWUnLmNhbWVsaXplKCk7ICAgICAvLyAn
Y3NzQ2xhc3NOYW1lJwotICAgICAgICAgICAgICAgICAgICAnbXkgZmF2b3JpdGUgaXRlbXMnLmNh
bWVsaXplKCk7ICAvLyAnbXlGYXZvcml0ZUl0ZW1zJwotICAgICAgICAgICAgICAgICAgICAnTXkg
RmF2b3JpdGUgSXRlbXMnLmNhbWVsaXplKCk7ICAvLyAnbXlGYXZvcml0ZUl0ZW1zJwotICAgICAg
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhbWVsaXpl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBj
YW1lbGl6ZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgY2FtZWxp
emVkIHN0cmluZy4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjYW1lbGl6ZTog
Y2FtZWxpemUsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5z
IHRoZSBVcHBlckNhbWVsQ2FzZSBmb3JtIG9mIGEgc3RyaW5nLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgJ2lubmVySFRNTCcuY2xhc3Np
ZnkoKTsgICAgICAgICAgLy8gJ0lubmVySFRNTCcKLSAgICAgICAgICAgICAgICAgICAgJ2FjdGlv
bl9uYW1lJy5jbGFzc2lmeSgpOyAgICAgICAgLy8gJ0FjdGlvbk5hbWUnCi0gICAgICAgICAgICAg
ICAgICAgICdjc3MtY2xhc3MtbmFtZScuY2xhc3NpZnkoKTsgICAgIC8vICdDc3NDbGFzc05hbWUn
Ci0gICAgICAgICAgICAgICAgICAgICdteSBmYXZvcml0ZSBpdGVtcycuY2xhc3NpZnkoKTsgIC8v
ICdNeUZhdm9yaXRlSXRlbXMnCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgY2xhc3NpZnkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIGNsYXNzaWZ5Ci0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge1N0cmluZ30gdGhlIGNsYXNzaWZpZWQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgY2xhc3NpZnk6IGNsYXNzaWZ5LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgTW9yZSBnZW5lcmFsIHRoYW4gZGVjYW1lbGl6ZS4gUmV0dXJucyB0
aGUgbG93ZXJcX2Nhc2VcX2FuZFxfdW5kZXJzY29yZWQKLSAgICAgICAgICAgICAgICAgICAgZm9y
bSBvZiBhIHN0cmluZy4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgICdpbm5lckhUTUwnLnVuZGVyc2NvcmUoKTsgICAgICAgICAgLy8gJ2lu
bmVyX2h0bWwnCi0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZScudW5kZXJzY29yZSgp
OyAgICAgICAgLy8gJ2FjdGlvbl9uYW1lJwotICAgICAgICAgICAgICAgICAgICAnY3NzLWNsYXNz
LW5hbWUnLnVuZGVyc2NvcmUoKTsgICAgIC8vICdjc3NfY2xhc3NfbmFtZScKLSAgICAgICAgICAg
ICAgICAgICAgJ215IGZhdm9yaXRlIGl0ZW1zJy51bmRlcnNjb3JlKCk7ICAvLyAnbXlfZmF2b3Jp
dGVfaXRlbXMnCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgdW5kZXJzY29yZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
c3RyIFRoZSBzdHJpbmcgdG8gdW5kZXJzY29yZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7U3RyaW5nfSB0aGUgdW5kZXJzY29yZWQgc3RyaW5nLgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHVuZGVyc2NvcmU6IHVuZGVyc2NvcmUsCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBDYXBpdGFsaXplZCBmb3JtIG9mIGEgc3Ry
aW5nCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAg
ICAgICAnaW5uZXJIVE1MJy5jYXBpdGFsaXplKCkgICAgICAgICAvLyAnSW5uZXJIVE1MJwotICAg
ICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnLmNhcGl0YWxpemUoKSAgICAgICAvLyAnQWN0
aW9uX25hbWUnCi0gICAgICAgICAgICAgICAgICAgICdjc3MtY2xhc3MtbmFtZScuY2FwaXRhbGl6
ZSgpICAgIC8vICdDc3MtY2xhc3MtbmFtZScKLSAgICAgICAgICAgICAgICAgICAgJ215IGZhdm9y
aXRlIGl0ZW1zJy5jYXBpdGFsaXplKCkgLy8gJ015IGZhdm9yaXRlIGl0ZW1zJwotICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhcGl0YWxpemUK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGNh
cGl0YWxpemUuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gVGhlIGNhcGl0
YWxpemVkIHN0cmluZy4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjYXBpdGFs
aXplOiBjYXBpdGFsaXplCi0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX18uZm10ID0g
Zm10OwotICAgICAgICBfX2V4cG9ydHNfXy5sb2MgPSBsb2M7Ci0gICAgICAgIF9fZXhwb3J0c19f
LncgPSB3OwotICAgICAgICBfX2V4cG9ydHNfXy5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTsKLSAg
ICAgICAgX19leHBvcnRzX18uZGFzaGVyaXplID0gZGFzaGVyaXplOwotICAgICAgICBfX2V4cG9y
dHNfXy5jYW1lbGl6ZSA9IGNhbWVsaXplOwotICAgICAgICBfX2V4cG9ydHNfXy5jbGFzc2lmeSA9
IGNsYXNzaWZ5OwotICAgICAgICBfX2V4cG9ydHNfXy51bmRlcnNjb3JlID0gdW5kZXJzY29yZTsK
LSAgICAgICAgX19leHBvcnRzX18uY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9zdWJhcnJheSIsCi0gICAgWyJlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvZW51
bWVyYWJsZV91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAg
ICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsK
LSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEVudW1lcmFibGVVdGlscyA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwot
Ci0gICAgICAgIHZhciBSRVRBSU4gPSAncic7Ci0gICAgICAgIHZhciBGSUxURVIgPSAnZic7Ci0K
LSAgICAgICAgZnVuY3Rpb24gT3BlcmF0aW9uKHR5cGUsIGNvdW50KSB7Ci0gICAgICAgICAgICB0
aGlzLnR5cGUgPSB0eXBlOwotICAgICAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50OwotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFN1YkFycmF5OwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBBbiBgRW1iZXIuU3ViQXJyYXlgIHRyYWNrcyBhbiBhcnJh
eSBpbiBhIHdheSBzaW1pbGFyIHRvLCBidXQgbW9yZSBzcGVjaWFsaXplZAotICAgICAgICAgICAg
ICB0aGFuLCBgRW1iZXIuVHJhY2tlZEFycmF5YC4gIEl0IGlzIHVzZWZ1bCBmb3Iga2VlcGluZyB0
cmFjayBvZiB0aGUgaW5kZXhlcyBvZgotICAgICAgICAgICAgICBpdGVtcyB3aXRoaW4gYSBmaWx0
ZXJlZCBhcnJheS4KLQotICAgICAgICAgICAgICBAY2xhc3MgU3ViQXJyYXkKLSAgICAgICAgICAg
ICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gU3Vi
QXJyYXkgKGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRpb25zID0g
W25ldyBPcGVyYXRpb24oUkVUQUlOLCBsZW5ndGgpXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucyA9IFtdOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLQotICAgICAgICBTdWJBcnJheS5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVHJhY2sgdGhhdCBhbiBpdGVtIHdhcyBhZGRlZCB0byB0
aGUgdHJhY2tlZCBhcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZEl0ZW0K
LQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9m
IHRoZSBpdGVtIGluIHRoZSB0cmFja2VkIGFycmF5LgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge2Jvb2xlYW59IG1hdGNoIGB0cnVlYCBpZmYgdGhlIGl0ZW0gaXMgaW5jbHVkZWQgaW4gdGhl
IHN1YmFycmF5LgotCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge251bWJlcn0gVGhlIGlu
ZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBzdWJhcnJheS4KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBhZGRJdGVtOiBmdW5jdGlvbihpbmRleCwgbWF0Y2gpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgcmV0dXJuVmFsdWUgPSAtMSwKLSAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IG1h
dGNoID8gUkVUQUlOIDogRklMVEVSLAotICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZmluZE9wZXJhdGlvbihpbmRleCwgZnVuY3Rpb24ob3BlcmF0
aW9uLCBvcGVyYXRpb25JbmRleCwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQsIHNlZW5JblN1YkFycmF5
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdPcGVyYXRpb24sIHNwbGl0T3BlcmF0aW9u
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gb3BlcmF0aW9uLnR5cGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrb3BlcmF0aW9uLmNvdW50OwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSByYW5nZVN0YXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpbnNlcnQgdG8gdGhlIGxlZnQgb2YgYG9wZXJhdGlvbmAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wZXJhdGlvbnMuc3BsaWNlKG9wZXJhdGlvbkluZGV4
LCAwLCBuZXcgT3BlcmF0aW9uKGl0ZW1UeXBlLCAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdPcGVyYXRpb24gPSBuZXcgT3BlcmF0
aW9uKGl0ZW1UeXBlLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0T3BlcmF0aW9u
ID0gbmV3IE9wZXJhdGlvbihvcGVyYXRpb24udHlwZSwgcmFuZ2VFbmQgLSBpbmRleCArIDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmNvdW50ID0gaW5kZXggLSByYW5nZVN0
YXJ0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcGVyYXRpb25zLnNwbGljZShv
cGVyYXRpb25JbmRleCArIDEsIDAsIG5ld09wZXJhdGlvbiwgc3BsaXRPcGVyYXRpb24pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09IFJFVEFJTikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gc2VlbkluU3ViQXJyYXkg
KyAoaW5kZXggLSByYW5nZVN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBzZWVuSW5TdWJBcnJh
eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXBvc2VBdChvcGVyYXRpb25JbmRleCk7Ci0gICAg
ICAgICAgICAgICAgfSwgZnVuY3Rpb24oc2VlbkluU3ViQXJyYXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fb3BlcmF0aW9ucy5wdXNoKG5ldyBPcGVyYXRpb24oaXRlbVR5cGUsIDEpKTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gc2VlbkluU3ViQXJyYXk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wb3NlQXQoc2VsZi5fb3BlcmF0aW9ucy5s
ZW5ndGgtMSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVHJhY2sgdGhhdCBhbiBpdGVtIHdhcyByZW1vdmVkIGZyb20gdGhlIHRyYWNr
ZWQgYXJyYXkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmVJdGVtCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUg
aXRlbSBpbiB0aGUgdHJhY2tlZCBhcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtudW1iZXJ9IFRoZSBpbmRleCBvZiB0aGUgaXRlbSBpbiB0aGUgc3ViYXJyYXksIG9yIGAtMWAg
aWYgdGhlIGl0ZW0KLSAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBpbiB0aGUgc3ViYXJyYXku
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24o
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSAtMSwKLSAgICAgICAg
ICAgICAgICBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRPcGVyYXRp
b24oaW5kZXgsIGZ1bmN0aW9uIChvcGVyYXRpb24sIG9wZXJhdGlvbkluZGV4LCByYW5nZVN0YXJ0
LCByYW5nZUVuZCwgc2VlbkluU3ViQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhdGlvbi50eXBlID09PSBSRVRBSU4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gc2VlbkluU3ViQXJyYXkgKyAoaW5kZXggLSByYW5nZVN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24uY291bnQg
PiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAtLW9wZXJhdGlvbi5jb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29w
ZXJhdGlvbnMuc3BsaWNlKG9wZXJhdGlvbkluZGV4LCAxKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX2NvbXBvc2VBdChvcGVyYXRpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVtYmVyRXJyb3IoIkNhbid0IHJlbW92ZSBhbiBpdGVtIHRoYXQgaGFzIG5ldmVy
IGJlZW4gYWRkZWQuIik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICB9LAotCi0KLSAgICAgICAgICAgIF9maW5k
T3BlcmF0aW9uOiBmdW5jdGlvbiAoaW5kZXgsIGZvdW5kQ2FsbGJhY2ssIG5vdEZvdW5kQ2FsbGJh
Y2spIHsKLSAgICAgICAgICAgICAgICB2YXIgb3BlcmF0aW9uSW5kZXgsCi0gICAgICAgICAgICAg
ICAgbGVuLAotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICByYW5n
ZVN0YXJ0LAotICAgICAgICAgICAgICAgIHJhbmdlRW5kLAotICAgICAgICAgICAgICAgIHNlZW5J
blN1YkFycmF5ID0gMDsKLQotICAgICAgICAgICAgICAgIC8vIE9QVElNSVpFOiBjaGFuZ2UgdG8g
YmFsYW5jZWQgdHJlZQotICAgICAgICAgICAgICAgIC8vIGZpbmQgbGVmdG1vc3Qgb3BlcmF0aW9u
IHRvIHRoZSByaWdodCBvZiBgaW5kZXhgCi0gICAgICAgICAgICAgICAgZm9yIChvcGVyYXRpb25J
bmRleCA9IHJhbmdlU3RhcnQgPSAwLCBsZW4gPSB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aDsgb3Bl
cmF0aW9uSW5kZXggPCBsZW47IHJhbmdlU3RhcnQgPSByYW5nZUVuZCArIDEsICsrb3BlcmF0aW9u
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9u
c1tvcGVyYXRpb25JbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlRW5kID0gcmFuZ2VT
dGFydCArIG9wZXJhdGlvbi5jb3VudCAtIDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IHJhbmdlU3RhcnQgJiYgaW5kZXggPD0gcmFuZ2VFbmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kQ2FsbGJhY2sob3BlcmF0aW9uLCBvcGVyYXRpb25JbmRleCwgcmFuZ2VT
dGFydCwgcmFuZ2VFbmQsIHNlZW5JblN1YkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9
PT0gUkVUQUlOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWVuSW5TdWJBcnJheSArPSBv
cGVyYXRpb24uY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBub3RGb3VuZENhbGxiYWNrKHNlZW5JblN1YkFycmF5KTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9jb21wb3NlQXQ6IGZ1bmN0aW9uKGluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgdmFyIG9wID0gdGhpcy5fb3BlcmF0aW9uc1tpbmRleF0sCi0gICAg
ICAgICAgICAgICAgb3RoZXJPcDsKLQotICAgICAgICAgICAgICAgIGlmICghb3ApIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQ29tcG9zaW5nIG91dCBvZiBib3VuZHMgaXMgYSBuby1vcCwgYXMg
d2hlbiByZW1vdmluZyB0aGUgbGFzdCBvcGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgLy8g
aW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG90aGVyT3AgPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4LTFdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAob3RoZXJPcC50eXBlID09PSBvcC50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvcC5jb3VudCArPSBvdGhlck9wLmNvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgtMSwgMSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAtLWluZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5fb3BlcmF0aW9ucy5sZW5ndGgtMSkg
ewotICAgICAgICAgICAgICAgICAgICBvdGhlck9wID0gdGhpcy5fb3BlcmF0aW9uc1tpbmRleCAr
IDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJPcC50eXBlID09PSBvcC50eXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcC5jb3VudCArPSBvdGhlck9wLmNvdW50OwotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXggKyAxLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN0ciA9ICIiOwotICAgICAgICAgICAgICAgIEVudW1lcmFibGVVdGlscy5mb3JFYWNo
KHRoaXMuX29wZXJhdGlvbnMsIGZ1bmN0aW9uIChvcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RyICs9ICIgIiArIG9wZXJhdGlvbi50eXBlICsgIjoiICsgb3BlcmF0aW9uLmNvdW50
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3Ry
aW5nKDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgi
ZW1iZXItcnVudGltZS9zeXN0ZW0vdHJhY2tlZF9hcnJheSIsCi0gICAgWyJlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5k
ZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5Ml9fLmZvckVh
Y2g7Ci0KLSAgICAgICAgdmFyIFJFVEFJTiA9ICdyJzsKLSAgICAgICAgdmFyIElOU0VSVCA9ICdp
JzsKLSAgICAgICAgdmFyIERFTEVURSA9ICdkJzsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gVHJhY2tlZEFycmF5OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbiBg
RW1iZXIuVHJhY2tlZEFycmF5YCB0cmFja3MgYXJyYXkgb3BlcmF0aW9ucy4gIEl0J3MgdXNlZnVs
IHdoZW4geW91IHdhbnQgdG8KLSAgICAgICAgICAgICAgbGF6aWx5IGNvbXB1dGUgdGhlIGluZGV4
ZXMgb2YgaXRlbXMgaW4gYW4gYXJyYXkgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNoaWZ0ZWQgYnkKLSAg
ICAgICAgICAgICAgc3Vic2VxdWVudCBvcGVyYXRpb25zLgotCi0gICAgICAgICAgICAgIEBjbGFz
cyBUcmFja2VkQXJyYXkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAg
ICAgICBAcGFyYW0ge2FycmF5fSBbaXRlbXM9W11dIFRoZSBhcnJheSB0byBiZSB0cmFja2VkLiAg
VGhpcyBpcyB1c2VkIGp1c3QgdG8gZ2V0Ci0gICAgICAgICAgICAgIHRoZSBpbml0aWFsIGl0ZW1z
IGZvciB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgcmV0YWluOm4uCi0gICAgICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBUcmFja2VkQXJyYXkoaXRlbXMpIHsKLSAgICAgICAgICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoIDwgMSkgewotICAgICAgICAgICAgICAgIGl0ZW1zID0gW107Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBsZW5ndGggPSBnZXQoaXRlbXMsICdsZW5ndGgnKTsK
LQotICAgICAgICAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX29wZXJh
dGlvbnMgPSBbbmV3IEFycmF5T3BlcmF0aW9uKFJFVEFJTiwgbGVuZ3RoLCBpdGVtcyldOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRpb25zID0gW107
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBUcmFja2VkQXJyYXkuUkVUQUlO
ID0gUkVUQUlOOwotICAgICAgICBUcmFja2VkQXJyYXkuSU5TRVJUID0gSU5TRVJUOwotICAgICAg
ICBUcmFja2VkQXJyYXkuREVMRVRFID0gREVMRVRFOwotCi0gICAgICAgIFRyYWNrZWRBcnJheS5w
cm90b3R5cGUgPSB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFj
ayB0aGF0IGBuZXdJdGVtc2Agd2VyZSBhZGRlZCB0byB0aGUgdHJhY2tlZCBhcnJheSBhdCBgaW5k
ZXhgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWRkSXRlbXMKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIGluZGV4Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBuZXdJdGVt
cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkZEl0ZW1zOiBmdW5jdGlvbiAo
aW5kZXgsIG5ld0l0ZW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZ2V0KG5ld0l0
ZW1zLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdmFyIG1hdGNoID0gdGhpcy5fZmluZEFycmF5T3BlcmF0aW9uKGluZGV4KSwKLSAgICAgICAg
ICAgICAgICBhcnJheU9wZXJhdGlvbiA9IG1hdGNoLm9wZXJhdGlvbiwKLSAgICAgICAgICAgICAg
ICBhcnJheU9wZXJhdGlvbkluZGV4ID0gbWF0Y2guaW5kZXgsCi0gICAgICAgICAgICAgICAgYXJy
YXlPcGVyYXRpb25SYW5nZVN0YXJ0ID0gbWF0Y2gucmFuZ2VTdGFydCwKLSAgICAgICAgICAgICAg
ICBjb21wb3NlSW5kZXgsCi0gICAgICAgICAgICAgICAgc3BsaXRJbmRleCwKLSAgICAgICAgICAg
ICAgICBzcGxpdEl0ZW1zLAotICAgICAgICAgICAgICAgIHNwbGl0QXJyYXlPcGVyYXRpb24sCi0g
ICAgICAgICAgICAgICAgbmV3QXJyYXlPcGVyYXRpb247Ci0KLSAgICAgICAgICAgICAgICBuZXdB
cnJheU9wZXJhdGlvbiA9IG5ldyBBcnJheU9wZXJhdGlvbihJTlNFUlQsIGNvdW50LCBuZXdJdGVt
cyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlPcGVyYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtYXRjaC5zcGxpdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW5zZXJ0IGxlZnQgb2YgYXJyYXlPcGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX29wZXJhdGlvbnMuc3BsaWNlKGFycmF5T3BlcmF0aW9uSW5kZXgsIDAsIG5ld0FycmF5T3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VJbmRleCA9IGFycmF5T3Bl
cmF0aW9uSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zcGxpdChhcnJheU9wZXJhdGlvbkluZGV4LCBpbmRleCAtIGFycmF5
T3BlcmF0aW9uUmFuZ2VTdGFydCwgbmV3QXJyYXlPcGVyYXRpb24pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcG9zZUluZGV4ID0gYXJyYXlPcGVyYXRpb25JbmRleCArIDE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBpbnNlcnQgYXQgZW5kCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlv
bnMucHVzaChuZXdBcnJheU9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXBvc2VJ
bmRleCA9IGFycmF5T3BlcmF0aW9uSW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdGhpcy5fY29tcG9zZUluc2VydChjb21wb3NlSW5kZXgpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRyYWNrIHRoYXQgYGNv
dW50YCBpdGVtcyB3ZXJlIHJlbW92ZWQgYXQgYGluZGV4YC4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIHJlbW92ZUl0ZW1zCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBpbmRleAot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0gY291bnQKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByZW1vdmVJdGVtczogZnVuY3Rpb24gKGluZGV4LCBjb3VudCkgewotICAgICAg
ICAgICAgICAgIGlmIChjb3VudCA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHRoaXMuX2Zp
bmRBcnJheU9wZXJhdGlvbihpbmRleCksCi0gICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb24g
PSBtYXRjaC5vcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb25JbmRleCA9
IG1hdGNoLmluZGV4LAotICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9uUmFuZ2VTdGFydCA9
IG1hdGNoLnJhbmdlU3RhcnQsCi0gICAgICAgICAgICAgICAgbmV3QXJyYXlPcGVyYXRpb24sCi0g
ICAgICAgICAgICAgICAgY29tcG9zZUluZGV4OwotCi0gICAgICAgICAgICAgICAgbmV3QXJyYXlP
cGVyYXRpb24gPSBuZXcgQXJyYXlPcGVyYXRpb24oREVMRVRFLCBjb3VudCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaC5zcGxpdCkgewotICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
bGVmdCBvZiBhcnJheU9wZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRp
b25zLnNwbGljZShhcnJheU9wZXJhdGlvbkluZGV4LCAwLCBuZXdBcnJheU9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbXBvc2VJbmRleCA9IGFycmF5T3BlcmF0aW9uSW5kZXg7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3BsaXQo
YXJyYXlPcGVyYXRpb25JbmRleCwgaW5kZXggLSBhcnJheU9wZXJhdGlvblJhbmdlU3RhcnQsIG5l
d0FycmF5T3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9zZUluZGV4ID0gYXJy
YXlPcGVyYXRpb25JbmRleCArIDE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbXBvc2VEZWxldGUoY29tcG9zZUluZGV4KTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBcHBseSBhbGwgb3Bl
cmF0aW9ucywgcmVkdWNpbmcgdGhlbSB0byByZXRhaW46biwgZm9yIGBuYCwgdGhlIG51bWJlciBv
ZgotICAgICAgICAgICAgICAgICAgICBpdGVtcyBpbiB0aGUgYXJyYXkuCi0KLSAgICAgICAgICAg
ICAgICAgICAgYGNhbGxiYWNrYCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBvcGVyYXRpb24gYW5k
IHdpbGwgYmUgcGFzc2VkIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgotCi0gICAgICAgICAgICAg
ICAgICAgICoge2FycmF5fSBpdGVtcyBUaGUgaXRlbXMgZm9yIHRoZSBnaXZlbiBvcGVyYXRpb24K
LSAgICAgICAgICAgICAgICAgICAgKiB7bnVtYmVyfSBvZmZzZXQgVGhlIGNvbXB1dGVkIG9mZnNl
dCBvZiB0aGUgaXRlbXMsIGllIHRoZSBpbmRleCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAg
YXJyYXkgb2YgdGhlIGZpcnN0IGl0ZW0gZm9yIHRoaXMgb3BlcmF0aW9uLgotICAgICAgICAgICAg
ICAgICAgICAqIHtzdHJpbmd9IG9wZXJhdGlvbiBUaGUgdHlwZSBvZiB0aGUgb3BlcmF0aW9uLiAg
T25lIG9mCi0gICAgICAgICAgICAgICAgICAgIGBFbWJlci5UcmFja2VkQXJyYXkue1JFVEFJTiwg
REVMRVRFLCBJTlNFUlR9YAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYXBwbHkKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBhcHBseTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGl0ZW1zID0gW10sCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsK
LQotICAgICAgICAgICAgICAgIGZvckVhY2godGhpcy5fb3BlcmF0aW9ucywgZnVuY3Rpb24gKGFy
cmF5T3BlcmF0aW9uLCBvcGVyYXRpb25JbmRleCkgewotICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhhcnJheU9wZXJhdGlvbi5pdGVtcywgb2Zmc2V0LCBhcnJheU9wZXJhdGlvbi50eXBlLCBv
cGVyYXRpb25JbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T3BlcmF0aW9u
LnR5cGUgIT09IERFTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGFy
cmF5T3BlcmF0aW9uLmNvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVt
cy5jb25jYXQoYXJyYXlPcGVyYXRpb24uaXRlbXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRpb25zID0g
W25ldyBBcnJheU9wZXJhdGlvbihSRVRBSU4sIGl0ZW1zLmxlbmd0aCwgaXRlbXMpXTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm4g
YW4gYEFycmF5T3BlcmF0aW9uTWF0Y2hgIGZvciB0aGUgb3BlcmF0aW9uIHRoYXQgY29udGFpbnMg
dGhlIGl0ZW0gYXQgYGluZGV4YC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9maW5k
QXJyYXlPcGVyYXRpb24KLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge251bWJlcn0gaW5k
ZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdob3NlIG9wZXJhdGlvbiBpbmZvcm1hdGlvbgotICAg
ICAgICAgICAgICAgICAgICBzaG91bGQgYmUgcmV0dXJuZWQuCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2ZpbmRBcnJheU9w
ZXJhdGlvbjogZnVuY3Rpb24gKGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFycmF5T3Bl
cmF0aW9uSW5kZXgsCi0gICAgICAgICAgICAgICAgbGVuLAotICAgICAgICAgICAgICAgIHNwbGl0
ID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb24sCi0gICAgICAgICAgICAg
ICAgYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0LAotICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0
aW9uUmFuZ2VFbmQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBPUFRJTUlaRTogd2UgY291bGQgc2Vh
cmNoIHRoZXNlIGZhc3RlciBpZiB3ZSBrZXB0IGEgYmFsYW5jZWQgdHJlZS4KLSAgICAgICAgICAg
ICAgICAvLyBmaW5kIGxlZnRtb3N0IGFycmF5T3BlcmF0aW9uIHRvIHRoZSByaWdodCBvZiBgaW5k
ZXhgCi0gICAgICAgICAgICAgICAgZm9yIChhcnJheU9wZXJhdGlvbkluZGV4ID0gYXJyYXlPcGVy
YXRpb25SYW5nZVN0YXJ0ID0gMCwgbGVuID0gdGhpcy5fb3BlcmF0aW9ucy5sZW5ndGg7IGFycmF5
T3BlcmF0aW9uSW5kZXggPCBsZW47ICsrYXJyYXlPcGVyYXRpb25JbmRleCkgewotICAgICAgICAg
ICAgICAgICAgICBhcnJheU9wZXJhdGlvbiA9IHRoaXMuX29wZXJhdGlvbnNbYXJyYXlPcGVyYXRp
b25JbmRleF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T3BlcmF0aW9uLnR5cGUg
PT09IERFTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvblJhbmdl
RW5kID0gYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0ICsgYXJyYXlPcGVyYXRpb24uY291bnQgLSAx
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gYXJyYXlPcGVyYXRpb25SYW5n
ZVN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChpbmRleCA+IGFycmF5T3BlcmF0aW9uUmFuZ2VTdGFydCAmJiBpbmRl
eCA8PSBhcnJheU9wZXJhdGlvblJhbmdlRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
cGxpdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9u
UmFuZ2VTdGFydCA9IGFycmF5T3BlcmF0aW9uUmFuZ2VFbmQgKyAxOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBB
cnJheU9wZXJhdGlvbk1hdGNoKGFycmF5T3BlcmF0aW9uLCBhcnJheU9wZXJhdGlvbkluZGV4LCBz
cGxpdCwgYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIF9zcGxpdDogZnVuY3Rpb24gKGFycmF5T3BlcmF0aW9uSW5kZXgsIHNwbGl0SW5kZXgs
IG5ld0FycmF5T3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFycmF5T3BlcmF0aW9u
ID0gdGhpcy5fb3BlcmF0aW9uc1thcnJheU9wZXJhdGlvbkluZGV4XTsKLSAgICAgICAgICAgICAg
ICB2YXIgc3BsaXRJdGVtcyA9IGFycmF5T3BlcmF0aW9uLml0ZW1zLnNsaWNlKHNwbGl0SW5kZXgp
OwotICAgICAgICAgICAgICAgIHZhciBzcGxpdEFycmF5T3BlcmF0aW9uID0gbmV3IEFycmF5T3Bl
cmF0aW9uKGFycmF5T3BlcmF0aW9uLnR5cGUsIHNwbGl0SXRlbXMubGVuZ3RoLCBzcGxpdEl0ZW1z
KTsKLQotICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIExIUwotICAgICAgICAgICAgICAgIGFy
cmF5T3BlcmF0aW9uLmNvdW50ID0gc3BsaXRJbmRleDsKLSAgICAgICAgICAgICAgICBhcnJheU9w
ZXJhdGlvbi5pdGVtcyA9IGFycmF5T3BlcmF0aW9uLml0ZW1zLnNsaWNlKDAsIHNwbGl0SW5kZXgp
OwotCi0gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoYXJyYXlPcGVyYXRp
b25JbmRleCArIDEsIDAsIG5ld0FycmF5T3BlcmF0aW9uLCBzcGxpdEFycmF5T3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIHNlZSBTdWJBcnJheSBmb3IgYSBiZXR0
ZXIgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBfY29tcG9zZUluc2VydDogZnVuY3Rpb24g
KGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5ld0FycmF5T3BlcmF0aW9uID0gdGhpcy5f
b3BlcmF0aW9uc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgbGVmdEFycmF5T3BlcmF0aW9uID0g
dGhpcy5fb3BlcmF0aW9uc1tpbmRleC0xXSwgLy8gbWF5IGJlIHVuZGVmaW5lZAotICAgICAgICAg
ICAgICAgIHJpZ2h0QXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4ICsgMV0s
IC8vIG1heSBiZSB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICBsZWZ0T3AgPSBsZWZ0QXJyYXlP
cGVyYXRpb24gJiYgbGVmdEFycmF5T3BlcmF0aW9uLnR5cGUsCi0gICAgICAgICAgICAgICAgcmln
aHRPcCA9IHJpZ2h0QXJyYXlPcGVyYXRpb24gJiYgcmlnaHRBcnJheU9wZXJhdGlvbi50eXBlOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnRPcCA9PT0gSU5TRVJUKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIG1lcmdlIGxlZnQKLSAgICAgICAgICAgICAgICAgICAgbGVmdEFycmF5T3BlcmF0
aW9uLmNvdW50ICs9IG5ld0FycmF5T3BlcmF0aW9uLmNvdW50OwotICAgICAgICAgICAgICAgICAg
ICBsZWZ0QXJyYXlPcGVyYXRpb24uaXRlbXMgPSBsZWZ0QXJyYXlPcGVyYXRpb24uaXRlbXMuY29u
Y2F0KG5ld0FycmF5T3BlcmF0aW9uLml0ZW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
cmlnaHRPcCA9PT0gSU5TRVJUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIG1l
cmdlIHJpZ2h0ICh3ZSBoYXZlIHNwbGl0IGFuIGluc2VydCB3aXRoIGFuIGluc2VydCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnRBcnJheU9wZXJhdGlvbi5jb3VudCArPSByaWdodEFycmF5
T3BlcmF0aW9uLmNvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEFycmF5T3BlcmF0
aW9uLml0ZW1zID0gbGVmdEFycmF5T3BlcmF0aW9uLml0ZW1zLmNvbmNhdChyaWdodEFycmF5T3Bl
cmF0aW9uLml0ZW1zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMu
c3BsaWNlKGluZGV4LCAyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG9ubHkgbWVyZ2UgbGVmdAotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodE9wID09PSBJTlNFUlQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgbmV3
QXJyYXlPcGVyYXRpb24uY291bnQgKz0gcmlnaHRBcnJheU9wZXJhdGlvbi5jb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3QXJyYXlPcGVyYXRpb24uaXRlbXMgPSBuZXdBcnJheU9wZXJhdGlv
bi5pdGVtcy5jb25jYXQocmlnaHRBcnJheU9wZXJhdGlvbi5pdGVtcyk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX29wZXJhdGlvbnMuc3BsaWNlKGluZGV4ICsgMSwgMSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2NvbXBvc2VEZWxldGU6IGZ1
bmN0aW9uIChpbmRleCkgewotICAgICAgICAgICAgICAgIHZhciBhcnJheU9wZXJhdGlvbiA9IHRo
aXMuX29wZXJhdGlvbnNbaW5kZXhdLAotICAgICAgICAgICAgICAgIGRlbGV0ZXNUb0dvID0gYXJy
YXlPcGVyYXRpb24uY291bnQsCi0gICAgICAgICAgICAgICAgbGVmdEFycmF5T3BlcmF0aW9uID0g
dGhpcy5fb3BlcmF0aW9uc1tpbmRleC0xXSwgLy8gbWF5IGJlIHVuZGVmaW5lZAotICAgICAgICAg
ICAgICAgIGxlZnRPcCA9IGxlZnRBcnJheU9wZXJhdGlvbiAmJiBsZWZ0QXJyYXlPcGVyYXRpb24u
dHlwZSwKLSAgICAgICAgICAgICAgICBuZXh0QXJyYXlPcGVyYXRpb24sCi0gICAgICAgICAgICAg
ICAgbmV4dE9wLAotICAgICAgICAgICAgICAgIG5leHRDb3VudCwKLSAgICAgICAgICAgICAgICBy
ZW1vdmVOZXdBbmROZXh0T3AgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICByZW1vdmVkSXRlbXMg
PSBbXTsKLQotICAgICAgICAgICAgICAgIGlmIChsZWZ0T3AgPT09IERFTEVURSkgewotICAgICAg
ICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvbiA9IGxlZnRBcnJheU9wZXJhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgaW5kZXggLT0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXggKyAxOyBkZWxldGVzVG9HbyA+IDA7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBuZXh0QXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25z
W2ldOwotICAgICAgICAgICAgICAgICAgICBuZXh0T3AgPSBuZXh0QXJyYXlPcGVyYXRpb24udHlw
ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV4dENvdW50ID0gbmV4dEFycmF5T3BlcmF0aW9uLmNv
dW50OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0T3AgPT09IERFTEVURSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb24uY291bnQgKz0gbmV4dENvdW50Owot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENvdW50ID4gZGVsZXRlc1RvR28pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGQ6MiB7cixpfTo1ICB3ZSByZWR1Y2UgdGhlIHJldGFp
biBvciBpbnNlcnQsIGJ1dCBpdCBzdGF5cwotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
ZEl0ZW1zID0gcmVtb3ZlZEl0ZW1zLmNvbmNhdChuZXh0QXJyYXlPcGVyYXRpb24uaXRlbXMuc3Bs
aWNlKDAsIGRlbGV0ZXNUb0dvKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXJyYXlP
cGVyYXRpb24uY291bnQgLT0gZGVsZXRlc1RvR287Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEluIHRoZSBjYXNlIHdoZXJlIHdlIHRydW5jYXRlIHRoZSBsYXN0IGFycmF5T3BlcmF0aW9u
LCB3ZSBkb24ndCBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgaXQ7
IGFsc28gdGhlIGRlbGV0ZXNUb0dvIHJlZHVjdGlvbiBpcyBub3QgdGhlIGVudGlyZXR5IG9mCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0Q291bnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGkgLT0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb3VudCA9IGRlbGV0ZXNU
b0dvOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVzVG9HbyA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENv
dW50ID09PSBkZWxldGVzVG9HbykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBlZGdlIGNhc2Ugb2YgZDoyIGk6MiBpbiB3aGljaCBjYXNlIGJvdGggb3BlcmF0aW9ucyBn
byBhd2F5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVyaW5nIGNvbXBvc2l0aW9u
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5ld0FuZE5leHRPcCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1v
dmVkSXRlbXMgPSByZW1vdmVkSXRlbXMuY29uY2F0KG5leHRBcnJheU9wZXJhdGlvbi5pdGVtcyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVzVG9HbyAtPSBuZXh0Q291bnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dE9wID09PSBJ
TlNFUlQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGQ6MiBpOjMgd2lsbCByZXN1bHQg
aW4gZGVsZXRlIGdvaW5nIGF3YXkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0
aW9uLmNvdW50IC09IG5leHRDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhcnJheU9wZXJhdGlvbi5jb3VudCA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9zZSBvdXIgbmV3IGRlbGV0ZSB3aXRoIHBv
c3NpYmx5IHNldmVyYWwgb3BlcmF0aW9ucyB0byB0aGUgcmlnaHQgb2YKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZGlzcGFyYXRlIHR5cGVzCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJh
dGlvbnMuc3BsaWNlKGluZGV4ICsgMSwgaS0xIC0gaW5kZXgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWxldGUgb3BlcmF0aW9uIGNhbiBn
byBhd2F5OyBpdCBoYXMgbWVyZWx5IHJlZHVjZWQgc29tZSBvdGhlcgotICAgICAgICAgICAgICAg
ICAgICAvLyBvcGVyYXRpb24sIGFzIGluIGQ6MyBpOjQ7IGl0IG1heSBhbHNvIGhhdmUgZWxpbWlu
YXRlZCB0aGF0IG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgLy8gYXMgaW4gZDozIGk6
My4KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgsIHJl
bW92ZU5ld0FuZE5leHRPcCA/IDIgOiAxKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW1zOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RyID0gIiI7
Ci0gICAgICAgICAgICAgICAgZm9yRWFjaCh0aGlzLl9vcGVyYXRpb25zLCBmdW5jdGlvbiAob3Bl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ciArPSAiICIgKyBvcGVyYXRpb24udHlw
ZSArICI6IiArIG9wZXJhdGlvbi5jb3VudDsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgSW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUg
dG8gcmVwcmVzZW50IGFuIGFycmF5IG9wZXJhdGlvbi4KLQotICAgICAgICAgICAgICBAbWV0aG9k
IEFycmF5T3BlcmF0aW9uCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBw
YXJhbSB7c3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24uICBPbmUgb2YKLSAg
ICAgICAgICAgICAgYEVtYmVyLlRyYWNrZWRBcnJheS57UkVUQUlOLCBJTlNFUlQsIERFTEVURX1g
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBUaGUgbnVtYmVyIG9mIGl0ZW1z
IGluIHRoaXMgb3BlcmF0aW9uLgotICAgICAgICAgICAgICBAcGFyYW0ge2FycmF5fSBpdGVtcyBU
aGUgaXRlbXMgb2YgdGhlIG9wZXJhdGlvbiwgaWYgaW5jbHVkZWQuICBSRVRBSU4gYW5kCi0gICAg
ICAgICAgICAgIElOU0VSVCBpbmNsdWRlIHRoZWlyIGl0ZW1zLCBERUxFVEUgZG9lcyBub3QuCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBBcnJheU9wZXJhdGlvbiAob3BlcmF0aW9u
LCBjb3VudCwgaXRlbXMpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IG9wZXJhdGlvbjsgLy8g
UkVUQUlOIHwgSU5TRVJUIHwgREVMRVRFCi0gICAgICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7
Ci0gICAgICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7Ci0gICAgICAgIH0KLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgSW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBpbmNsdWRl
IGluZm9ybWF0aW9uIHdoZW4gbG9va2luZyB1cCBvcGVyYXRpb25zCi0gICAgICAgICAgICAgIGJ5
IGl0ZW0gaW5kZXguCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBBcnJheU9wZXJhdGlvbk1hdGNo
Ci0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXlPcGVy
YXRpb259IG9wZXJhdGlvbgotICAgICAgICAgICAgICBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhl
IGluZGV4IG9mIGBvcGVyYXRpb25gIGluIHRoZSBhcnJheSBvZiBvcGVyYXRpb25zLgotICAgICAg
ICAgICAgICBAcGFyYW0ge2Jvb2xlYW59IHNwbGl0IFdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGlu
ZGV4IHNlYXJjaGVkIGZvciB3b3VsZAotICAgICAgICAgICAgICByZXF1aXJlIGEgc3BsaXQgZm9y
IGEgbmV3IG9wZXJhdGlvbiB0eXBlLgotICAgICAgICAgICAgICBAcGFyYW0ge251bWJlcn0gcmFu
Z2VTdGFydCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG9wZXJhdGlvbiwKLSAg
ICAgICAgICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSB0cmFja2VkIGFycmF5LiAgVGhlIGluZGV4
IG9mIHRoZSBsYXN0IGl0ZW0gY2FuIGJlIGNvbXB1dGVkCi0gICAgICAgICAgICAgIGZyb20gYHJh
bmdlU3RhcnRgIGFuZCBgb3BlcmF0aW9uLmNvdW50YC4KLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIEFycmF5T3BlcmF0aW9uTWF0Y2gob3BlcmF0aW9uLCBpbmRleCwgc3BsaXQsIHJh
bmdlU3RhcnQpIHsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAg
ICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgICAgICAgdGhpcy5zcGxpdCA9IHNw
bGl0OwotICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0ID0gcmFuZ2VTdGFydDsKLSAgICAgICAg
fQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGluZyIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLXRlc3RpbmcvaW5pdGlhbGl6ZXJzIiwgImVtYmVyLXRlc3Rpbmcvc3Vw
cG9ydCIsICJlbWJlci10ZXN0aW5nL3NldHVwX2Zvcl90ZXN0aW5nIiwgImVtYmVyLXRlc3Rpbmcv
dGVzdCIsICJlbWJlci10ZXN0aW5nL2FkYXB0ZXJzL2FkYXB0ZXIiLCAiZW1iZXItdGVzdGluZy9h
ZGFwdGVycy9xdW5pdCIsICJlbWJlci10ZXN0aW5nL2hlbHBlcnMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVu
ZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3
X18sIF9fZGVwZW5kZW5jeThfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZh
ciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8vIHRvIHNl
dHVwIGluaXRpYWxpemVyCi0gICAgICAgIC8vIHRvIGhhbmRsZSB2YXJpb3VzIGVkZ2UgY2FzZXMK
LQotICAgICAgICB2YXIgc2V0dXBGb3JUZXN0aW5nID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBUZXN0ID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBBZGFwdGVyID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBRVW5pdEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8g
YWRkcyBoZWxwZXJzIHRvIGhlbHBlcnMgb2JqZWN0IGluIFRlc3QKLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgRW1iZXIgVGVzdGluZwotCi0gICAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci10ZXN0aW5nCi0gICAgICAgICAgICAgIEBy
ZXF1aXJlcyBlbWJlci1hcHBsaWNhdGlvbgotICAgICAgICAgICAgKi8KLQotICAgICAgICBFbWJl
ci5UZXN0ID0gVGVzdDsKLSAgICAgICAgRW1iZXIuVGVzdC5BZGFwdGVyID0gQWRhcHRlcjsKLSAg
ICAgICAgRW1iZXIuVGVzdC5RVW5pdEFkYXB0ZXIgPSBRVW5pdEFkYXB0ZXI7Ci0gICAgICAgIEVt
YmVyLnNldHVwRm9yVGVzdGluZyA9IHNldHVwRm9yVGVzdGluZzsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLXRlc3RpbmcvYWRhcHRlcnMvYWRhcHRlciIsCi0gICAgWyJlbWJlci1tZXRhbC9j
b3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIs
ICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXIuSwotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVwZW5kZW5jeTJfXy5pbnNw
ZWN0OwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQi
XTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci10ZXN0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8g
Y3JlYXRlIGhvb2tzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkCi0gICAgICAgICAgICAgIGJ5IGFu
IGFkYXB0ZXIgZm9yIHZhcmlvdXMgdGVzdCBmcmFtZXdvcmtzLgotCi0gICAgICAgICAgICAgIEBj
bGFzcyBBZGFwdGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIuVGVzdAotICAgICAg
ICAgICAgKi8KLSAgICAgICAgdmFyIEFkYXB0ZXIgPSBFbWJlck9iamVjdC5leHRlbmQoewotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBj
YWxsZWQgd2hlbmV2ZXIgYW4gYXN5bmMgb3BlcmF0aW9uIGlzIGFib3V0IHRvIHN0YXJ0LgotCi0g
ICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlIHRoaXMgdG8gY2FsbCB5b3VyIGZyYW1ld29yaydz
IG1ldGhvZHMgdGhhdCBoYW5kbGUgYXN5bmMKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
cy4KLQotICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgYXN5bmNTdGFydAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFzeW5j
U3RhcnQ6IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBU
aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGFuIGFzeW5jIG9wZXJhdGlvbiBo
YXMgY29tcGxldGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBhc3luY0VuZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGFzeW5jRW5kOiBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgT3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB5b3VyIHRlc3RpbmcgZnJhbWV3b3JrJ3Mg
ZmFsc2UgYXNzZXJ0aW9uLgotICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aGVuZXZlciBhbiBleGNlcHRpb24gb2NjdXJzIGNhdXNpbmcgdGhlIHRlc3RpbmcKLSAg
ICAgICAgICAgICAgICAgICAgcHJvbWlzZSB0byBmYWlsLgotCi0gICAgICAgICAgICAgICAgICAg
IFFVbml0IGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbjogZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9rKGZhbHNlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHB1Ymxp
YwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gZXJyb3IgVGhlIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQuCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZXhjZXB0aW9uOiBmdW5jdGlvbihlcnJv
cikgewotICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQWRhcHRlcjsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLXRlc3RpbmcvYWRhcHRlcnMvcXVuaXQiLAotICAgIFsiZW1i
ZXItdGVzdGluZy9hZGFwdGVycy9hZGFwdGVyIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgQWRhcHRlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVw
ZW5kZW5jeTJfXy5pbnNwZWN0OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGNs
YXNzIGltcGxlbWVudHMgdGhlIG1ldGhvZHMgZGVmaW5lZCBieSBFbWJlci5UZXN0LkFkYXB0ZXIg
Zm9yIHRoZQotICAgICAgICAgICAgICBRVW5pdCB0ZXN0aW5nIGZyYW1ld29yay4KLQotICAgICAg
ICAgICAgICBAY2xhc3MgUVVuaXRBZGFwdGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIuVGVzdAotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5UZXN0LkFkYXB0ZXIKLSAgICAg
ICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBBZGFwdGVyLmV4dGVu
ZCh7Ci0gICAgICAgICAgICBhc3luY1N0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBRVW5pdC5zdG9wKCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgYXN5bmNFbmQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIFFVbml0LnN0YXJ0KCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgZXhjZXB0aW9uOiBmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAg
ICAgIG9rKGZhbHNlLCBpbnNwZWN0KGVycm9yKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0p
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGluZy9oZWxwZXJzIiwKLSAgICBbImVt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRh
bC9ydW5fbG9vcCIsICJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5IiwgImVtYmVyLXRlc3Rpbmcv
dGVzdCJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7
Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGpRdWVyeSA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVGVzdCA9
IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
KiBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICAqIEBzdWJtb2R1bGUgZW1iZXItdGVzdGluZwot
ICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgaGVscGVyID0gVGVzdC5yZWdpc3RlckhlbHBl
cjsKLSAgICAgICAgdmFyIGFzeW5jSGVscGVyID0gVGVzdC5yZWdpc3RlckFzeW5jSGVscGVyOwot
ICAgICAgICB2YXIgY291bnRBc3luYyA9IDA7Ci0KLSAgICAgICAgZnVuY3Rpb24gY3VycmVudFJv
dXRlTmFtZShhcHApIHsKLSAgICAgICAgICAgIHZhciBhcHBDb250cm9sbGVyID0gYXBwLl9fY29u
dGFpbmVyX18ubG9va3VwKCdjb250cm9sbGVyOmFwcGxpY2F0aW9uJyk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBnZXQoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRSb3V0ZU5hbWUnKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGN1cnJlbnRQYXRoKGFwcCkgewotICAgICAgICAgICAgdmFy
IGFwcENvbnRyb2xsZXIgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ2NvbnRyb2xsZXI6YXBw
bGljYXRpb24nKTsKLQotICAgICAgICAgICAgcmV0dXJuIGdldChhcHBDb250cm9sbGVyLCAnY3Vy
cmVudFBhdGgnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGN1cnJlbnRVUkwoYXBw
KSB7Ci0gICAgICAgICAgICB2YXIgcm91dGVyID0gYXBwLl9fY29udGFpbmVyX18ubG9va3VwKCdy
b3V0ZXI6bWFpbicpOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0KHJvdXRlciwgJ2xvY2F0aW9u
JykuZ2V0VVJMKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB2aXNpdChhcHAsIHVy
bCkgewotICAgICAgICAgICAgdmFyIHJvdXRlciA9IGFwcC5fX2NvbnRhaW5lcl9fLmxvb2t1cCgn
cm91dGVyOm1haW4nKTsKLSAgICAgICAgICAgIHJvdXRlci5sb2NhdGlvbi5zZXRVUkwodXJsKTsK
LQotICAgICAgICAgICAgaWYgKGFwcC5fcmVhZGluZXNzRGVmZXJyYWxzID4gMCkgewotICAgICAg
ICAgICAgICAgIHJvdXRlclsnaW5pdGlhbFVSTCddID0gdXJsOwotICAgICAgICAgICAgICAgIHJ1
bihhcHAsICdhZHZhbmNlUmVhZGluZXNzJyk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHJvdXRl
clsnaW5pdGlhbFVSTCddOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBy
dW4oYXBwLCBhcHAuaGFuZGxlVVJMLCB1cmwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGNsaWNrKGFwcCwgc2VsZWN0b3IsIGNvbnRleHQpIHsKLSAgICAgICAgICAgIHZhciAk
ZWwgPSBhcHAudGVzdEhlbHBlcnMuZmluZFdpdGhBc3NlcnQoc2VsZWN0b3IsIGNvbnRleHQpOwot
ICAgICAgICAgICAgcnVuKCRlbCwgJ21vdXNlZG93bicpOwotCi0gICAgICAgICAgICBpZiAoJGVs
LmlzKCc6aW5wdXQnKSkgewotICAgICAgICAgICAgICAgIHZhciB0eXBlID0gJGVsLnByb3AoJ3R5
cGUnKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ2NoZWNrYm94JyAmJiB0eXBlICE9
PSAncmFkaW8nICYmIHR5cGUgIT09ICdoaWRkZW4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1
bigkZWwsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBk
b2VzIG5vdCB0cmlnZ2VyIHRoZSBgZm9jdXNpbmAgZXZlbnQgaWYgdGhlIHdpbmRvdwotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgaGF2ZSBmb2N1cy4gSWYgdGhlIGRvY3VtZW50
IGRvZXNuJ3QgaGF2ZSBmb2N1cyBqdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
dHJpZ2dlcignZm9jdXNpbicpIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZm9jdXNp
bicpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJ1bigkZWws
ICdtb3VzZXVwJyk7Ci0gICAgICAgICAgICBydW4oJGVsLCAnY2xpY2snKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIGFwcC50ZXN0SGVscGVycy53YWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiB0cmlnZ2VyRXZlbnQoYXBwLCBzZWxlY3RvciwgY29udGV4dCwgdHlwZSwgb3B0aW9u
cykgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHsKLSAgICAgICAg
ICAgICAgICBvcHRpb25zID0gdHlwZTsKLSAgICAgICAgICAgICAgICB0eXBlID0gY29udGV4dDsK
LSAgICAgICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAg
ICAgIG9wdGlvbnMgPSB7fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyICRlbCA9
IGFwcC50ZXN0SGVscGVycy5maW5kV2l0aEFzc2VydChzZWxlY3RvciwgY29udGV4dCk7Ci0KLSAg
ICAgICAgICAgIHZhciBldmVudCA9IGpRdWVyeS5FdmVudCh0eXBlLCBvcHRpb25zKTsKLQotICAg
ICAgICAgICAgcnVuKCRlbCwgJ3RyaWdnZXInLCBldmVudCk7Ci0KLSAgICAgICAgICAgIHJldHVy
biBhcHAudGVzdEhlbHBlcnMud2FpdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
a2V5RXZlbnQoYXBwLCBzZWxlY3RvciwgY29udGV4dCwgdHlwZSwga2V5Q29kZSkgewotICAgICAg
ICAgICAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAg
ICAgIGtleUNvZGUgPSB0eXBlOwotICAgICAgICAgICAgICAgIHR5cGUgPSBjb250ZXh0OwotICAg
ICAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLnRyaWdnZXJFdmVudChzZWxlY3RvciwgY29udGV4dCwg
dHlwZSwgewotICAgICAgICAgICAgICAgIGtleUNvZGU6IGtleUNvZGUsCi0gICAgICAgICAgICAg
ICAgd2hpY2g6IGtleUNvZGUgCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGZpbGxJbihhcHAsIHNlbGVjdG9yLCBjb250ZXh0LCB0ZXh0KSB7Ci0gICAgICAg
ICAgICB2YXIgJGVsOwotICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAndW5kZWZpbmVk
JykgewotICAgICAgICAgICAgICAgIHRleHQgPSBjb250ZXh0OwotICAgICAgICAgICAgICAgIGNv
bnRleHQgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGVsID0gYXBwLnRlc3RI
ZWxwZXJzLmZpbmRXaXRoQXNzZXJ0KHNlbGVjdG9yLCBjb250ZXh0KTsKLSAgICAgICAgICAgIHJ1
bihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAkZWwudmFsKHRleHQpLmNoYW5nZSgpOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmRXaXRoQXNzZXJ0KGFwcCwgc2Vs
ZWN0b3IsIGNvbnRleHQpIHsKLSAgICAgICAgICAgIHZhciAkZWwgPSBhcHAudGVzdEhlbHBlcnMu
ZmluZChzZWxlY3RvciwgY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoJGVsLmxlbmd0aCA9PT0g
MCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJFbGVtZW50ICIgKyBz
ZWxlY3RvciArICIgbm90IGZvdW5kLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuICRlbDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmQoYXBwLCBzZWxlY3Rv
ciwgY29udGV4dCkgewotICAgICAgICAgICAgdmFyICRlbDsKLSAgICAgICAgICAgIGNvbnRleHQg
PSBjb250ZXh0IHx8IGdldChhcHAsICdyb290RWxlbWVudCcpOwotICAgICAgICAgICAgJGVsID0g
YXBwLiQoc2VsZWN0b3IsIGNvbnRleHQpOwotCi0gICAgICAgICAgICByZXR1cm4gJGVsOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYW5kVGhlbihhcHAsIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoY2FsbGJhY2soYXBwKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB3YWl0KGFwcCwgdmFsdWUpIHsKLSAgICAgICAgICAg
IHJldHVybiBUZXN0LnByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFzeW5jIHByb21pc2UsIGtpY2sgb2ZmIHRoZSBhc3lu
YyB0ZXN0Ci0gICAgICAgICAgICAgICAgaWYgKCsrY291bnRBc3luYyA9PT0gMSkgewotICAgICAg
ICAgICAgICAgICAgICBUZXN0LmFkYXB0ZXIuYXN5bmNTdGFydCgpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEV2ZXJ5IDEwbXMsIHBvbGwgZm9yIHRoZSBhc3luYyB0
aGluZyB0byBoYXZlIGZpbmlzaGVkCi0gICAgICAgICAgICAgICAgdmFyIHdhdGNoZXIgPSBzZXRJ
bnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gMS4gSWYgdGhlIHJv
dXRlciBpcyBsb2FkaW5nLCBrZWVwIHBvbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJv
dXRlcklzTG9hZGluZyA9ICEhYXBwLl9fY29udGFpbmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicp
LnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVy
SXNMb2FkaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAyLiBJZiB0aGVyZSBhcmUgcGVu
ZGluZyBBamF4IHJlcXVlc3RzLCBrZWVwIHBvbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgaWYg
KFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gMy4g
SWYgdGhlcmUgYXJlIHNjaGVkdWxlZCB0aW1lcnMgb3Igd2UgYXJlIGluc2lkZSBvZiBhIHJ1biBs
b29wLCBrZWVwIHBvbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bi5oYXNTY2hlZHVs
ZWRUaW1lcnMoKSB8fCBydW4uY3VycmVudFJ1bkxvb3ApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAoVGVzdC53YWl0ZXJzICYmIFRlc3Qud2FpdGVycy5hbnkoZnVuY3Rpb24od2FpdGVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHdhaXRlclswXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdhaXRlclsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhY2FsbGJhY2suY2FsbChjb250ZXh0KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHBvbGxpbmcKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh3YXRjaGVyKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGlzIHRoZSBsYXN0IGFzeW5jIHByb21pc2UsIGVuZCB0aGUgYXN5bmMgdGVz
dAotICAgICAgICAgICAgICAgICAgICBpZiAoLS1jb3VudEFzeW5jID09PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBUZXN0LmFkYXB0ZXIuYXN5bmNFbmQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFN5bmNocm9ub3VzbHkgcmVzb2x2ZSB0
aGUgcHJvbWlzZQotICAgICAgICAgICAgICAgICAgICBydW4obnVsbCwgcmVzb2x2ZSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgIH0sIDEwKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIH0K
LQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgKiBMb2FkcyBhIHJvdXRlLCBzZXRzIHVwIGFu
eSBjb250cm9sbGVycywgYW5kIHJlbmRlcnMgYW55IHRlbXBsYXRlcyBhc3NvY2lhdGVkCi0gICAg
ICAgICAgICAqIHdpdGggdGhlIHJvdXRlIGFzIHRob3VnaCBhIHJlYWwgdXNlciBoYWQgdHJpZ2dl
cmVkIHRoZSByb3V0ZSBjaGFuZ2Ugd2hpbGUKLSAgICAgICAgICAgICogdXNpbmcgeW91ciBhcHAu
Ci0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIEV4YW1wbGU6Ci0gICAgICAgICAgICAqCi0g
ICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICogdmlzaXQoJ3Bvc3RzL2lu
ZGV4JykudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICogICAvLyBhc3NlcnQgc29tZXRo
aW5nCi0gICAgICAgICAgICAqIH0pOwotICAgICAgICAgICAgKiBgYGAKLSAgICAgICAgICAgICoK
LSAgICAgICAgICAgICogQG1ldGhvZCB2aXNpdAotICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gdXJsIHRoZSBuYW1lIG9mIHRoZSByb3V0ZQotICAgICAgICAgICAgKiBAcmV0dXJuIHtSU1ZQ
LlByb21pc2V9Ci0gICAgICAgICAgICAqLwotICAgICAgICBhc3luY0hlbHBlcigndmlzaXQnLCB2
aXNpdCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAqIENsaWNrcyBhbiBlbGVtZW50IGFu
ZCB0cmlnZ2VycyBhbnkgYWN0aW9ucyB0cmlnZ2VyZWQgYnkgdGhlIGVsZW1lbnQncyBgY2xpY2tg
Ci0gICAgICAgICAgICAqIGV2ZW50LgotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBFeGFt
cGxlOgotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAqIGNsaWNrKCcuc29tZS1qUXVlcnktc2VsZWN0b3InKS50aGVuKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgKiAgIC8vIGFzc2VydCBzb21ldGhpbmcKLSAgICAgICAgICAgICogfSk7Ci0g
ICAgICAgICAgICAqIGBgYAotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBAbWV0aG9kIGNs
aWNrCi0gICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBqUXVlcnkgc2VsZWN0
b3IgZm9yIGZpbmRpbmcgZWxlbWVudCBvbiB0aGUgRE9NCi0gICAgICAgICAgICAqIEByZXR1cm4g
e1JTVlAuUHJvbWlzZX0KLSAgICAgICAgICAgICovCi0gICAgICAgIGFzeW5jSGVscGVyKCdjbGlj
aycsIGNsaWNrKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICogU2ltdWxhdGVzIGEga2V5
IGV2ZW50LCBlLmcuIGBrZXlwcmVzc2AsIGBrZXlkb3duYCwgYGtleXVwYCB3aXRoIHRoZSBkZXNp
cmVkIGtleUNvZGUKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICogRXhhbXBsZToKLSAgICAg
ICAgICAgICoKLSAgICAgICAgICAgICogYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgKiBrZXlF
dmVudCgnLnNvbWUtalF1ZXJ5LXNlbGVjdG9yJywgJ2tleXByZXNzJywgMTMpLnRoZW4oZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAqICAvLyBhc3NlcnQgc29tZXRoaW5nCi0gICAgICAgICAgICAq
IH0pOwotICAgICAgICAgICAgKiBgYGAKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICogQG1l
dGhvZCBrZXlFdmVudAotICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1
ZXJ5IHNlbGVjdG9yIGZvciBmaW5kaW5nIGVsZW1lbnQgb24gdGhlIERPTQotICAgICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiBrZXkgZXZlbnQsIGUuZy4gYGtleXBy
ZXNzYCwgYGtleWRvd25gLCBga2V5dXBgCi0gICAgICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBr
ZXlDb2RlIHRoZSBrZXlDb2RlIG9mIHRoZSBzaW11bGF0ZWQga2V5IGV2ZW50Ci0gICAgICAgICAg
ICAqIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgICAgICAgICogQHNpbmNlIDEuNS4wCi0g
ICAgICAgICAgICAqLwotICAgICAgICBhc3luY0hlbHBlcigna2V5RXZlbnQnLCBrZXlFdmVudCk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAqIEZpbGxzIGluIGFuIGlucHV0IGVsZW1lbnQg
d2l0aCBzb21lIHRleHQuCi0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIEV4YW1wbGU6Ci0g
ICAgICAgICAgICAqCi0gICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICog
ZmlsbEluKCcjZW1haWwnLCAneW91QGV4YW1wbGUuY29tJykudGhlbihmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICogICAvLyBhc3NlcnQgc29tZXRoaW5nCi0gICAgICAgICAgICAqIH0pOwotICAg
ICAgICAgICAgKiBgYGAKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICogQG1ldGhvZCBmaWxs
SW4KLSAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3Rv
ciBmaW5kaW5nIGFuIGlucHV0IGVsZW1lbnQgb24gdGhlIERPTQotICAgICAgICAgICAgKiB0byBm
aWxsIHRleHQgd2l0aAotICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0ZXh0IHRv
IHBsYWNlIGluc2lkZSB0aGUgaW5wdXQgZWxlbWVudAotICAgICAgICAgICAgKiBAcmV0dXJuIHtS
U1ZQLlByb21pc2V9Ci0gICAgICAgICAgICAqLwotICAgICAgICBhc3luY0hlbHBlcignZmlsbElu
JywgZmlsbEluKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICogRmluZHMgYW4gZWxlbWVu
dCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYXBwJ3MgY29udGFpbmVyIGVsZW1lbnQuIEEgc2ltcGxl
IGFsaWFzCi0gICAgICAgICAgICAqIGZvciBgYXBwLiQoc2VsZWN0b3IpYC4KLSAgICAgICAgICAg
ICoKLSAgICAgICAgICAgICogRXhhbXBsZToKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICog
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgKiB2YXIgJGVsID0gZmluZCgnLm15LXNlbGVjdG9y
Jyk7Ci0gICAgICAgICAgICAqIGBgYAotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBAbWV0
aG9kIGZpbmQKLSAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBz
dHJpbmcgc2VsZWN0b3IgZm9yIGVsZW1lbnQgbG9va3VwCi0gICAgICAgICAgICAqIEByZXR1cm4g
e09iamVjdH0galF1ZXJ5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHF1
ZXJ5Ci0gICAgICAgICAgICAqLwotICAgICAgICBoZWxwZXIoJ2ZpbmQnLCBmaW5kKTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICogTGlrZSBgZmluZGAsIGJ1dCB0aHJvd3MgYW4gZXJyb3Ig
aWYgdGhlIGVsZW1lbnQgc2VsZWN0b3IgcmV0dXJucyBubyByZXN1bHRzLgotICAgICAgICAgICAg
KgotICAgICAgICAgICAgKiBFeGFtcGxlOgotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAqIHZhciAkZWwgPSBmaW5kV2l0aEFzc2VydCgnLmRv
ZXNudC1leGlzdCcpOyAvLyB0aHJvd3MgZXJyb3IKLSAgICAgICAgICAgICogYGBgCi0gICAgICAg
ICAgICAqCi0gICAgICAgICAgICAqIEBtZXRob2QgZmluZFdpdGhBc3NlcnQKLSAgICAgICAgICAg
ICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBzdHJpbmcgZm9yIGZp
bmRpbmcgYW4gZWxlbWVudCB3aXRoaW4KLSAgICAgICAgICAgICogdGhlIERPTQotICAgICAgICAg
ICAgKiBAcmV0dXJuIHtPYmplY3R9IGpRdWVyeSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXN1
bHRzIG9mIHRoZSBxdWVyeQotICAgICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3dzIGVy
cm9yIGlmIGpRdWVyeSBvYmplY3QgcmV0dXJuZWQgaGFzIGEgbGVuZ3RoIG9mIDAKLSAgICAgICAg
ICAgICovCi0gICAgICAgIGhlbHBlcignZmluZFdpdGhBc3NlcnQnLCBmaW5kV2l0aEFzc2VydCk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENhdXNlcyB0aGUgcnVuIGxvb3AgdG8gcHJv
Y2VzcyBhbnkgcGVuZGluZyBldmVudHMuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdAotICAg
ICAgICAgICAgICBhbnkgYXN5bmMgb3BlcmF0aW9ucyBmcm9tIG90aGVyIGhlbHBlcnMgKG9yIHlv
dXIgYXNzZXJ0aW9ucykgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KLQotICAgICAgICAgICAgICBUaGlz
IGlzIG1vc3Qgb2Z0ZW4gdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIGZvciB0aGUgaGVscGVyIGZ1
bmN0aW9ucyAoc2VlICdjbGljaycsCi0gICAgICAgICAgICAgICdmaWxsSW4nLCd2aXNpdCcsZXRj
KS4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgRW1iZXIuVGVzdC5yZWdpc3RlckFzeW5jSGVscGVyKCdsb2dpblVz
ZXInLCBmdW5jdGlvbihhcHAsIHVzZXJuYW1lLCBwYXNzd29yZCkgewotICAgICAgICAgICAgICAg
IHZpc2l0KCdzZWN1cmVkL3BhdGgvaGVyZScpCi0gICAgICAgICAgICAgICAgLmZpbGxJbignI3Vz
ZXJuYW1lJywgdXNlcm5hbWUpCi0gICAgICAgICAgICAgICAgLmZpbGxJbignI3Bhc3N3b3JkJywg
dXNlcm5hbWUpCi0gICAgICAgICAgICAgICAgLmNsaWNrKCcuc3VibWl0JykKLQotICAgICAgICAg
ICAgICAgIHJldHVybiBhcHAudGVzdEhlbHBlcnMud2FpdCgpOwotICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICBAbWV0aG9kIHdhaXQKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IHZhbHVlIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC4KLSAgICAgICAgICAgICAgQHJldHVy
biB7UlNWUC5Qcm9taXNlfQotICAgICAgICAgICAgKi8KLSAgICAgICAgYXN5bmNIZWxwZXIoJ3dh
aXQnLCB3YWl0KTsKLSAgICAgICAgYXN5bmNIZWxwZXIoJ2FuZFRoZW4nLCBhbmRUaGVuKTsKLQot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50bHkgYWN0aXZl
IHJvdXRlIG5hbWUuCi0KLSAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlUm91dGVOYW1lKCl7Ci0gICAg
ICAgICAgICBlcXVhbChjdXJyZW50Um91dGVOYW1lKCksICdzb21lLnBhdGgnLCAiY29ycmVjdCBy
b3V0ZSB3YXMgdHJhbnNpdGlvbmVkIGludG8uIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZpc2l0KCcvc29tZS9wYXRoJykudGhlbih2YWxpZGF0ZVJvdXRlTmFtZSkKLSAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICBAbWV0aG9kIGN1cnJlbnRSb3V0ZU5hbWUKLSAgICAgICAg
ICAgIEByZXR1cm4ge09iamVjdH0gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91
dGUuCi0gICAgICAgICAgICBAc2luY2UgMS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGhl
bHBlcignY3VycmVudFJvdXRlTmFtZScsIGN1cnJlbnRSb3V0ZU5hbWUpOwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHBhdGguCi0KLSAgICAgICAgICAg
IEV4YW1wbGU6Ci0KLSAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgIGZ1bmN0
aW9uIHZhbGlkYXRlVVJMKCl7Ci0gICAgICAgICAgICBlcXVhbChjdXJyZW50UGF0aCgpLCAnc29t
ZS5wYXRoLmluZGV4JywgImNvcnJlY3QgcGF0aCB3YXMgdHJhbnNpdGlvbmVkIGludG8uIik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsaWNrKCcjc29tZS1saW5rLWlkJykudGhlbih2
YWxpZGF0ZVVSTCk7Ci0gICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgQG1ldGhvZCBjdXJy
ZW50UGF0aAotICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgY3VycmVudGx5IGFjdGl2
ZSBwYXRoLgotICAgICAgICAgICAgQHNpbmNlIDEuNS4wCi0gICAgICAgICAgICAqLwotICAgICAg
ICBoZWxwZXIoJ2N1cnJlbnRQYXRoJywgY3VycmVudFBhdGgpOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IFVSTC4KLQotICAgICAgICAgICAgRXhhbXBs
ZToKLQotICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgZnVuY3Rpb24gdmFs
aWRhdGVVUkwoKXsKLSAgICAgICAgICAgIGVxdWFsKGN1cnJlbnRVUkwoKSwgJy9zb21lL3BhdGgn
LCAiY29ycmVjdCBVUkwgd2FzIHRyYW5zaXRpb25lZCBpbnRvLiIpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjbGljaygnI3NvbWUtbGluay1pZCcpLnRoZW4odmFsaWRhdGVVUkwpOwot
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgIEBtZXRob2QgY3VycmVudFVSTAotICAgICAg
ICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgY3VycmVudGx5IGFjdGl2ZSBVUkwuCi0gICAgICAg
ICAgICBAc2luY2UgMS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGhlbHBlcignY3VycmVu
dFVSTCcsIGN1cnJlbnRVUkwpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUcmlnZ2Vy
cyB0aGUgZ2l2ZW4gRE9NIGV2ZW50IG9uIHRoZSBlbGVtZW50IGlkZW50aWZpZWQgYnkgdGhlIHBy
b3ZpZGVkIHNlbGVjdG9yLgotCi0gICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoJyNzb21lLWVsZW0t
aWQnLCAnYmx1cicpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIGlz
IGFjdHVhbGx5IHVzZWQgaW50ZXJuYWxseSBieSB0aGUgYGtleUV2ZW50YCBoZWxwZXIgbGlrZSBz
bzoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHRyaWdnZXJF
dmVudCgnI3NvbWUtZWxlbS1pZCcsICdrZXlwcmVzcycsIHsga2V5Q29kZTogMTMgfSk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgQG1ldGhvZCB0cmlnZ2VyRXZlbnQKLSAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIGZvciBmaW5k
aW5nIGVsZW1lbnQgb24gdGhlIERPTQotICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBbY29u
dGV4dF0galF1ZXJ5IHNlbGVjdG9yIHRoYXQgd2lsbCBsaW1pdCB0aGUgc2VsZWN0b3IKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IHRvIGZpbmQgb25seSB3
aXRoaW4gdGhlIGNvbnRleHQncyBjaGlsZHJlbgotICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGJlIHRyaWdnZXJlZC4KLSAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8galF1ZXJ5LkV2
ZW50LgotICAgICAgICAgICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgICAgICAgICBA
c2luY2UgMS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGFzeW5jSGVscGVyKCd0cmlnZ2Vy
RXZlbnQnLCB0cmlnZ2VyRXZlbnQpOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGlu
Zy9pbml0aWFsaXplcnMiLAotICAgIFsiZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgdmFyIG9uTG9hZCA9IF9fZGVwZW5kZW5jeTFfXy5vbkxvYWQ7Ci0KLSAgICAgICAg
dmFyIG5hbWUgPSAnZGVmZXJSZWFkaW5lc3MgaW4gYHRlc3RpbmdgIG1vZGUnOwotCi0gICAgICAg
IG9uTG9hZCgnRW1iZXIuQXBwbGljYXRpb24nLCBmdW5jdGlvbihBcHBsaWNhdGlvbikgewotICAg
ICAgICAgICAgaWYgKCFBcHBsaWNhdGlvbi5pbml0aWFsaXplcnNbbmFtZV0pIHsKLSAgICAgICAg
ICAgICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWU6IG5hbWUsCi0KLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29u
dGFpbmVyLCBhcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGxp
Y2F0aW9uLnRlc3RpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
bi5kZWZlclJlYWRpbmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGluZy9zZXR1cF9mb3JfdGVzdGlu
ZyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLXRlc3RpbmcvYWRhcHRlcnMvcXVu
aXQiLCAiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBf
X2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gaW1wb3J0IFRlc3QgZnJvbSAi
ZW1iZXItdGVzdGluZy90ZXN0IjsgIC8vIEVTNlRPRE86IGZpeCB3aGVuIGN5Y2xlcyBhcmUgc3Vw
cG9ydGVkCi0gICAgICAgIHZhciBRVW5pdEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwot
Ci0gICAgICAgIHZhciBUZXN0LCByZXF1ZXN0czsKLQotICAgICAgICBmdW5jdGlvbiBpbmNyZW1l
bnRBamF4UGVuZGluZ1JlcXVlc3RzKF8sIHhocikgewotICAgICAgICAgICAgcmVxdWVzdHMucHVz
aCh4aHIpOwotICAgICAgICAgICAgVGVzdC5wZW5kaW5nQWpheFJlcXVlc3RzID0gcmVxdWVzdHMu
bGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZGVjcmVtZW50QWpheFBlbmRp
bmdSZXF1ZXN0cyhfLCB4aHIpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVx
dWVzdHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoeGhyID09PSByZXF1ZXN0
c1tpXSkgewotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy5zcGxpY2UoaSwgMSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgVGVzdC5wZW5kaW5nQWph
eFJlcXVlc3RzID0gcmVxdWVzdHMubGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIFNldHMgRW1iZXIgdXAgZm9yIHRlc3RpbmcuIFRoaXMgaXMgdXNlZnVsIHRv
IHBlcmZvcm0KLSAgICAgICAgICAgICAgYmFzaWMgc2V0dXAgc3RlcHMgaW4gb3JkZXIgdG8gdW5p
dCB0ZXN0LgotCi0gICAgICAgICAgICAgIFVzZSBgQXBwLnNldHVwRm9yVGVzdGluZ2AgdG8gcGVy
Zm9ybSBpbnRlZ3JhdGlvbiB0ZXN0cyAoZnVsbAotICAgICAgICAgICAgICBhcHBsaWNhdGlvbiB0
ZXN0aW5nKS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwRm9yVGVzdGluZwotICAgICAg
ICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBzaW5jZSAxLjUuMAotICAg
ICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIHNl
dHVwRm9yVGVzdGluZygpIHsKLSAgICAgICAgICAgIGlmICghVGVzdCkgewotICAgICAgICAgICAg
ICAgIFRlc3QgPSByZXF1aXJlTW9kdWxlKCdlbWJlci10ZXN0aW5nL3Rlc3QnKVsnZGVmYXVsdCdd
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBFbWJlci50ZXN0aW5nID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgLy8gaWYgYWRhcHRlciBpcyBub3QgbWFudWFsbHkgc2V0IGRlZmF1bHQgdG8g
UVVuaXQKLSAgICAgICAgICAgIGlmICghVGVzdC5hZGFwdGVyKSB7Ci0gICAgICAgICAgICAgICAg
VGVzdC5hZGFwdGVyID0gUVVuaXRBZGFwdGVyLmNyZWF0ZSgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXF1ZXN0cyA9IFtdOwotICAgICAgICAgICAgVGVzdC5wZW5kaW5nQWpheFJl
cXVlc3RzID0gcmVxdWVzdHMubGVuZ3RoOwotCi0gICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQp
Lm9mZignYWpheFNlbmQnLCBpbmNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKTsKLSAgICAgICAg
ICAgIGpRdWVyeShkb2N1bWVudCkub2ZmKCdhamF4Q29tcGxldGUnLCBkZWNyZW1lbnRBamF4UGVu
ZGluZ1JlcXVlc3RzKTsKLSAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2FqYXhTZW5k
JywgaW5jcmVtZW50QWpheFBlbmRpbmdSZXF1ZXN0cyk7Ci0gICAgICAgICAgICBqUXVlcnkoZG9j
dW1lbnQpLm9uKCdhamF4Q29tcGxldGUnLCBkZWNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKTsK
LSAgICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGluZy9zdXBwb3J0IiwK
LSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAg
ICBAc3VibW9kdWxlIGVtYmVyLXRlc3RpbmcKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgIHZh
ciAkID0galF1ZXJ5OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBj
cmVhdGVzIGEgY2hlY2tib3ggYW5kIHRyaWdnZXJzIHRoZSBjbGljayBldmVudCB0byBmaXJlIHRo
ZQotICAgICAgICAgICAgICBwYXNzZWQgaW4gaGFuZGxlci4gSXQgaXMgdXNlZCB0byBjb3JyZWN0
IGZvciBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucwotICAgICAgICAgICAgICBvZiBqUXVlcnkgKGUu
ZyAxLjguMykuCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhv
ZCB0ZXN0Q2hlY2tib3hDbGljawotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdGVz
dENoZWNrYm94Q2xpY2soaGFuZGxlcikgewotICAgICAgICAgICAgJCgnPGlucHV0IHR5cGU9ImNo
ZWNrYm94Ij4nKQotICAgICAgICAgICAgLmNzcyh7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb246
ICdhYnNvbHV0ZScsCi0gICAgICAgICAgICAgICAgbGVmdDogJy0xMDAwcHgnLAotICAgICAgICAg
ICAgICAgIHRvcDogJy0xMDAwcHgnIAotICAgICAgICAgICAgfSkKLSAgICAgICAgICAgIC5hcHBl
bmRUbygnYm9keScpCi0gICAgICAgICAgICAub24oJ2NsaWNrJywgaGFuZGxlcikKLSAgICAgICAg
ICAgIC50cmlnZ2VyKCdjbGljaycpCi0gICAgICAgICAgICAucmVtb3ZlKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAg
ICAgICAgRGV0ZXJtaW5lIHdoZXRoZXIgYSBjaGVja2JveCBjaGVja2VkIHVzaW5nIGpRdWVyeSdz
ICJjbGljayIgbWV0aG9kIHdpbGwgaGF2ZQotICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVj
dCB2YWx1ZSBmb3IgaXRzIGNoZWNrZWQgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgICAgICAg
SWYgd2UgZGV0ZXJtaW5lIHRoYXQgdGhlIGN1cnJlbnQgalF1ZXJ5IHZlcnNpb24gZXhoaWJpdHMg
dGhpcyBiZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2ggaXQgdG8gd29yayBjb3Jy
ZWN0bHkgYXMgaW4gdGhlIGNvbW1pdCBmb3IgdGhlIGFjdHVhbCBmaXg6Ci0gICAgICAgICAgICAg
ICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2NvbW1pdC8xZmIyZjkyLgot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRlc3RDaGVja2JveENsaWNrKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja2VkICYmICEkLmV2ZW50LnNw
ZWNpYWwuY2xpY2spIHsKLSAgICAgICAgICAgICAgICAgICAgJC5ldmVudC5zcGVjaWFsLmNsaWNr
ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2
ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkLm5vZGVOYW1lKCB0aGlzLCAiaW5wdXQiICkgJiYgdGhpcy50eXBlID09PSAiY2hlY2ti
b3giICYmIHRoaXMuY2xpY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jbGljaygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAvLyBUcnkgYWdhaW4gdG8gdmVyaWZ5IHRoYXQgdGhlIHBhdGNo
IHRvb2sgZWZmZWN0IG9yIGJsb3cgdXAuCi0gICAgICAgICAgICB0ZXN0Q2hlY2tib3hDbGljayhm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBFbWJlci53YXJuKCJjbGlja2VkIGNoZWNrYm94
ZXMgc2hvdWxkIGJlIGNoZWNrZWQhIHRoZSBqUXVlcnkgcGF0Y2ggZGlkbid0IHdvcmsiLCB0aGlz
LmNoZWNrZWQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRl
ZmluZSgiZW1iZXItdGVzdGluZy90ZXN0IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItcnVudGlt
ZS9jb21wYXJlIiwgImVtYmVyLXJ1bnRpbWUvZXh0L3JzdnAiLCAiZW1iZXItdGVzdGluZy9zZXR1
cF9mb3JfdGVzdGluZyIsICJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24iLCAi
ZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9f
LCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2Rl
cGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIGVtYmVyUnVuID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3kzX18uY3JlYXRlOwotICAgICAgICB2YXIg
Y29tcGFyZSA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgUlNWUCA9
IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgc2V0dXBGb3JUZXN0aW5n
ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckFwcGxpY2F0
aW9uID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci10ZXN0
aW5nCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIHNsaWNlID0gW10uc2xpY2U7Ci0gICAg
ICAgIHZhciBoZWxwZXJzID0ge307Ci0gICAgICAgIHZhciBpbmplY3RIZWxwZXJzQ2FsbGJhY2tz
ID0gW107Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgaXMgYSBjb250YWluZXIg
Zm9yIGFuIGFzc29ydG1lbnQgb2YgdGVzdGluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdHk6Ci0KLSAg
ICAgICAgICAgICAgKiBDaG9vc2UgeW91ciBkZWZhdWx0IHRlc3QgYWRhcHRlciAoZm9yIHlvdXIg
ZnJhbWV3b3JrIG9mIGNob2ljZSkuCi0gICAgICAgICAgICAgICogUmVnaXN0ZXIvVW5yZWdpc3Rl
ciBhZGRpdGlvbmFsIHRlc3QgaGVscGVycy4KLSAgICAgICAgICAgICAgKiBTZXR1cCBjYWxsYmFj
a3MgdG8gYmUgZmlyZWQgd2hlbiB0aGUgdGVzdCBoZWxwZXJzIGFyZSBpbmplY3RlZCBpbnRvCi0g
ICAgICAgICAgICAgICAgeW91ciBhcHBsaWNhdGlvbi4KLQotICAgICAgICAgICAgICBAY2xhc3Mg
VGVzdAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAg
ICAgICB2YXIgVGVzdCA9IHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBI
YXNoIGNvbnRhaW5pbmcgYWxsIGtub3duIHRlc3QgaGVscGVycy4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgX2hlbHBlcnMKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfaGVscGVyczogaGVscGVycywKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIGByZWdpc3RlckhlbHBlcmAgaXMgdXNl
ZCB0byByZWdpc3RlciBhIHRlc3QgaGVscGVyIHRoYXQgd2lsbCBiZSBpbmplY3RlZAotICAgICAg
ICAgICAgICAgICAgICB3aGVuIGBBcHAuaW5qZWN0VGVzdEhlbHBlcnNgIGlzIGNhbGxlZC4KLQot
ICAgICAgICAgICAgICAgICAgICBUaGUgaGVscGVyIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSBjYWxs
ZWQgd2l0aCB0aGUgY3VycmVudCBBcHBsaWNhdGlvbiBhcwotICAgICAgICAgICAgICAgICAgICB0
aGUgZmlyc3QgcGFyYW1ldGVyLgotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIuVGVzdC5yZWdpc3RlckhlbHBlcignYm9vdCcsIGZ1bmN0aW9uKGFwcCkgewotICAgICAg
ICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihhcHAsIGFwcC5hZHZhbmNlUmVhZGluZXNzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgaGVscGVyIGNhbiBsYXRlciBiZSBjYWxsZWQgd2l0aG91dCBhcmd1
bWVudHMgYmVjYXVzZSBpdCB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZCB3aXRo
IGBhcHBgIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5j
cmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgQXBwLmluamVjdFRlc3RIZWxwZXJzKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJl
Z2lzdGVySGVscGVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRo
ZSBuYW1lIG9mIHRoZSBoZWxwZXIgbWV0aG9kIHRvIGFkZC4KLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gaGVscGVyTWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSBvcHRpb25zIHtPYmplY3R9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVn
aXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlck1ldGhvZCkgewotICAgICAgICAgICAg
ICAgIGhlbHBlcnNbbmFtZV0gPSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogaGVscGVy
TWV0aG9kLAotICAgICAgICAgICAgICAgICAgICBtZXRhOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3YWl0OiBmYWxzZSAKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgYHJlZ2lzdGVyQXN5bmNIZWxwZXJgIGlzIHVzZWQgdG8gcmVnaXN0ZXIgYW4gYXN5bmMgdGVz
dCBoZWxwZXIgdGhhdCB3aWxsIGJlIGluamVjdGVkCi0gICAgICAgICAgICAgICAgICAgIHdoZW4g
YEFwcC5pbmplY3RUZXN0SGVscGVyc2AgaXMgY2FsbGVkLgotCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBoZWxwZXIgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50
IEFwcGxpY2F0aW9uIGFzCi0gICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBwYXJhbWV0ZXIu
Ci0KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LnJlZ2lzdGVy
QXN5bmNIZWxwZXIoJ2Jvb3QnLCBmdW5jdGlvbihhcHApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICBFbWJlci5ydW4oYXBwLCBhcHAuYWR2YW5jZVJlYWRpbmVzcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBU
aGUgYWR2YW50YWdlIG9mIGFuIGFzeW5jIGhlbHBlciBpcyB0aGF0IGl0IHdpbGwgbm90IHJ1bgot
ICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgbGFzdCBhc3luYyBoZWxwZXIgaGFzIGNvbXBs
ZXRlZC4gIEFsbCBhc3luYyBoZWxwZXJzCi0gICAgICAgICAgICAgICAgICAgIGFmdGVyIGl0IHdp
bGwgd2FpdCBmb3IgaXQgY29tcGxldGUgYmVmb3JlIHJ1bm5pbmcuCi0KLQotICAgICAgICAgICAg
ICAgICAgICBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJBc3luY0hlbHBlcignZGVs
ZXRlUG9zdCcsIGZ1bmN0aW9uKGFwcCwgcG9zdElkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
Y2xpY2soJy5kZWxldGUtJyArIHBvc3RJZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIC4uLiBpbiB5b3VyIHRlc3QKLSAgICAgICAgICAgICAgICAg
ICAgdmlzaXQoJy9wb3N0LzInKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlUG9zdCgyKTsK
LSAgICAgICAgICAgICAgICAgICAgdmlzaXQoJy9wb3N0LzMnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlUG9zdCgzKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlZ2lzdGVyQXN5
bmNIZWxwZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5h
bWUgb2YgdGhlIGhlbHBlciBtZXRob2QgdG8gYWRkLgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBoZWxwZXJNZXRob2QKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEu
Mi4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVnaXN0ZXJBc3luY0hlbHBl
cjogZnVuY3Rpb24obmFtZSwgaGVscGVyTWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgaGVscGVy
c1tuYW1lXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBoZWxwZXJNZXRob2QsCi0g
ICAgICAgICAgICAgICAgICAgIG1ldGE6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQ6
IHRydWUgCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92ZSBh
IHByZXZpb3VzbHkgYWRkZWQgaGVscGVyIG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBF
eGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAgRW1iZXIuVGVzdC51bnJlZ2lzdGVySGVscGVyKCd3YWl0Jyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCB1bnJlZ2lzdGVySGVscGVyCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBoZWxwZXIgdG8gcmVtb3ZlLgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHsKLSAg
ICAgICAgICAgICAgICBkZWxldGUgaGVscGVyc1tuYW1lXTsKLSAgICAgICAgICAgICAgICBkZWxl
dGUgVGVzdC5Qcm9taXNlLnByb3RvdHlwZVtuYW1lXTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIHJlZ2lzdGVyIGNhbGxiYWNr
cyB0byBiZSBmaXJlZCB3aGVuZXZlciBgQXBwLmluamVjdFRlc3RIZWxwZXJzYAotICAgICAgICAg
ICAgICAgICAgICBpcyBjYWxsZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNr
IHdpbGwgcmVjZWl2ZSB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBhcyBhbiBhcmd1bWVudC4KLQot
ICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuVGVzdC5vbkluamVjdEhlbHBlcnMo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgRW1iZXIuJChkb2N1bWVudCkuYWph
eFNlbmQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXN0LnBlbmRpbmdB
amF4UmVxdWVzdHMrKzsKLSAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICAgICAgICAgIEVtYmVyLiQoZG9jdW1lbnQpLmFqYXhDb21wbGV0ZShmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cy0tOwotICAgICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIG9uSW5qZWN0SGVscGVycwotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9uSW5qZWN0SGVscGVyczogZnVuY3Rpb24oY2Fs
bGJhY2spIHsKLSAgICAgICAgICAgICAgICBpbmplY3RIZWxwZXJzQ2FsbGJhY2tzLnB1c2goY2Fs
bGJhY2spOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFRoaXMgcmV0dXJucyBhIHRoZW5hYmxlIHRhaWxvcmVkIGZvciB0ZXN0aW5nLiAgSXQg
Y2F0Y2hlcyBmYWlsZWQKLSAgICAgICAgICAgICAgICAgICAgYG9uU3VjY2Vzc2AgY2FsbGJhY2tz
IGFuZCBpbnZva2VzIHRoZSBgRW1iZXIuVGVzdC5hZGFwdGVyLmV4Y2VwdGlvbmAKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgaW4gdGhlIGxhc3QgY2hhaW5lZCB0aGVuLgotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSByZXR1cm5lZCBieSBhc3luYyBoZWxw
ZXJzIHN1Y2ggYXMgYHdhaXRgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBwcm9taXNlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7RnVuY3Rpb259IHJlc29sdmVyIFRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHBy
b21pc2UuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rp
b24ocmVzb2x2ZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRlc3QuUHJvbWlzZShy
ZXNvbHZlcik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICBVc2VkIHRvIGFsbG93IGVtYmVyLXRlc3RpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBh
IHNwZWNpZmljIHRlc3RpbmcKLSAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmsuCi0KLSAgICAg
ICAgICAgICAgICAgICBZb3UgY2FuIG1hbnVhbGx5IHNldCBpdCBiZWZvcmUgY2FsbGluZyBgQXBw
LnNldHVwRm9yVGVzdGluZygpYC4KLQotICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgRW1iZXIu
VGVzdC5hZGFwdGVyID0gTXlDdXN0b21BZGFwdGVyLmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCBpdCwgZW1iZXIt
dGVzdGluZyB3aWxsIGRlZmF1bHQgdG8gYEVtYmVyLlRlc3QuUVVuaXRBZGFwdGVyYC4KLQotICAg
ICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgYWRh
cHRlcgotICAgICAgICAgICAgICAgICAgIEB0eXBlIHtDbGFzc30gVGhlIGFkYXB0ZXIgdG8gYmUg
dXNlZC4KLSAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBFbWJlci5UZXN0LlFVbml0QWRhcHRl
cgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkYXB0ZXI6IG51bGwsCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXBsYWNlbWVudCBmb3IgYEVtYmVy
LlJTVlAucmVzb2x2ZWAKLSAgICAgICAgICAgICAgICAgICAgVGhlIG9ubHkgZGlmZmVyZW5jZSBp
cyB0aGlzIHVzZXMKLSAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgYEVtYmVyLlRl
c3QuUHJvbWlzZWAKLQotICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVzb2x2ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge01peGVk
fSBUaGUgdmFsdWUgdG8gcmVzb2x2ZQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4yLjAK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbih2YWwp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVGVzdC5wcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICAgVGhpcyBhbGxvd3MgZW1iZXItdGVzdGluZyB0byBwbGF5IG5pY2VseSB3aXRoIG90
aGVyIGFzeW5jaHJvbm91cwotICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLCBzdWNoIGFzIGFu
IGFwcGxpY2F0aW9uIHRoYXQgaXMgd2FpdGluZyBmb3IgYSBDU1MzCi0gICAgICAgICAgICAgICAg
ICAgICB0cmFuc2l0aW9uIG9yIGFuIEluZGV4REIgdHJhbnNhY3Rpb24uCi0KLSAgICAgICAgICAg
ICAgICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LnJlZ2lzdGVyV2FpdGVyKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbXlQZW5kaW5nVHJhbnNhY3Rp
b25zKCkgPT0gMDsKLSAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICAgYGBgCi0gICAgICAgICAgICAgICAgICAgICBUaGUgYGNvbnRleHRgIGFyZ3VtZW50IGFsbG93
cyB5b3UgdG8gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBgdGhpc2AKLSAgICAgICAgICAgICAgICAg
ICAgIHdpdGggd2hpY2ggeW91ciBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LnJlZ2lzdGVyV2FpdGVyKE15
REIsIE15REIuaGFzUGVuZGluZ1RyYW5zYWN0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCByZWdpc3RlcldhaXRlcgotICAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IGNvbnRleHQgKG9wdGlvbmFsKQotICAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyV2FpdGVyOiBmdW5jdGlvbihjb250
ZXh0LCBjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09
PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY29udGV4dDsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICghdGhpcy53YWl0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMud2Fp
dGVycyA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhp
cy53YWl0ZXJzLnB1c2goW2NvbnRleHQsIGNhbGxiYWNrXSk7Ci0gICAgICAgICAgICB9LAotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgICBgdW5yZWdpc3RlcldhaXRlcmAgaXMg
dXNlZCB0byB1bnJlZ2lzdGVyIGEgY2FsbGJhY2sgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyZWQgd2l0aCBgcmVnaXN0ZXJXYWl0ZXJgLgotCi0gICAgICAgICAgICAgICAg
ICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVucmVnaXN0ZXJXYWl0
ZXIKLSAgICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IChvcHRpb25h
bCkKLSAgICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAg
ICAgICAgICAgICAgICAgICBAc2luY2UgMS4yLjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICB1bnJlZ2lzdGVyV2FpdGVyOiBmdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykgewot
ICAgICAgICAgICAgICAgIHZhciBwYWlyOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy53YWl0
ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sgPSBjb250ZXh0OwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFpciA9IFtjb250
ZXh0LCBjYWxsYmFja107Ci0gICAgICAgICAgICAgICAgdGhpcy53YWl0ZXJzID0gRW1iZXIuQSh0
aGlzLndhaXRlcnMuZmlsdGVyKGZ1bmN0aW9uKGVsdCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29tcGFyZShlbHQsIHBhaXIpICE9PSAwOwotICAgICAgICAgICAgICAgIH0pKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBoZWxwZXIoYXBwLCBu
YW1lKSB7Ci0gICAgICAgICAgICB2YXIgZm4gPSBoZWxwZXJzW25hbWVdLm1ldGhvZCwKLSAgICAg
ICAgICAgIG1ldGEgPSBoZWxwZXJzW25hbWVdLm1ldGE7Ci0KLSAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1l
bnRzKSwKLSAgICAgICAgICAgICAgICBsYXN0UHJvbWlzZSA9IFRlc3QubGFzdFByb21pc2U7Ci0K
LSAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoYXBwKTsKLQotICAgICAgICAgICAgICAgIC8v
IHNvbWUgaGVscGVycyBhcmUgbm90IGFzeW5jIGFuZAotICAgICAgICAgICAgICAgIC8vIG5lZWQg
dG8gcmV0dXJuIGEgdmFsdWUgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgLy8gZXhhbXBs
ZTogYGZpbmRgCi0gICAgICAgICAgICAgICAgaWYgKCFtZXRhLndhaXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGFwcCwgYXJncyk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0UHJvbWlzZSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIHRoZSBmaXJzdCBhc3luYyBoZWxwZXIgaW4gY3VycmVudCBjb250ZXh0Ci0gICAg
ICAgICAgICAgICAgICAgIGxhc3RQcm9taXNlID0gZm4uYXBwbHkoYXBwLCBhcmdzKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciBsYXN0
IGhlbHBlcidzIHByb21pc2UgdG8gcmVzb2x2ZQotICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
dGhlbiBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIHJ1bihmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RQcm9taXNlID0gVGVzdC5yZXNvbHZlKGxhc3RQcm9taXNl
KS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
bi5hcHBseShhcHAsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiBsYXN0UHJvbWlzZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBydW4oZm4pIHsKLSAgICAgICAgICAgIGlmICghZW1iZXJSdW4uY3VycmVudFJ1bkxv
b3ApIHsKLSAgICAgICAgICAgICAgICBlbWJlclJ1bihmbik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGZuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBFbWJlckFwcGxpY2F0aW9uLnJlb3Blbih7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICBUaGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB0ZXN0aW5nIGhlbHBlcnMgZm9y
IHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLiBUaGVzZQotICAgICAgICAgICAgICAgICAgIGFyZSBj
cmVhdGVkIG9uY2UgeW91IGNhbGwgYGluamVjdFRlc3RIZWxwZXJzYCBvbiB5b3VyIGBFbWJlci5B
cHBsaWNhdGlvbmAKLSAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4gVGhlIGluY2x1ZGVkIGhl
bHBlcnMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBgd2luZG93YCBvYmplY3QgYnkKLSAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0LCBidXQgY2FuIGJlIHVzZWQgZnJvbSB0aGlzIG9iamVjdCBv
biB0aGUgaW5kaXZpZHVhbCBhcHBsaWNhdGlvbiBhbHNvLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSB0ZXN0SGVscGVycwotICAgICAgICAgICAgICAgICAgICBAdHlwZSB7T2JqZWN0
fQotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7fQotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHRlc3RIZWxwZXJzOiB7fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gdGhlIG9yaWdpbmFsIG1ldGhv
ZHMgdGhhdCB3ZXJlIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgICAgICAgICBvbiB0aGUgYGhlbHBl
ckNvbnRhaW5lcmAgYmVmb3JlIGBpbmplY3RUZXN0SGVscGVyc2AgaXMgY2FsbGVkLgotCi0gICAg
ICAgICAgICAgICAgICAgV2hlbiBgcmVtb3ZlVGVzdEhlbHBlcnNgIGlzIGNhbGxlZCwgdGhlc2Ug
bWV0aG9kcyBhcmUgcmVzdG9yZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgYGhlbHBlckNv
bnRhaW5lcmAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IG9yaWdpbmFsTWV0aG9k
cwotICAgICAgICAgICAgICAgICAgICBAdHlwZSB7T2JqZWN0fQotICAgICAgICAgICAgICAgICAg
ICBAZGVmYXVsdCB7fQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBv
cmlnaW5hbE1ldGhvZHM6IHt9LAotCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgVGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhpcyBhcHBsaWNhdGlv
biBpcyBjdXJyZW50bHkgaW4KLSAgICAgICAgICAgICAgICAgIHRlc3RpbmcgbW9kZS4gVGhpcyBp
cyBzZXQgd2hlbiBgc2V0dXBGb3JUZXN0aW5nYCBpcyBjYWxsZWQgb24gdGhlIGN1cnJlbnQKLSAg
ICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgotCi0gICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgdGVzdGluZwotICAgICAgICAgICAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCBmYWxzZQotICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuMy4wCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGVzdGluZzogZmFsc2UsCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFRoaXMgaG9vayBkZWZlcnMgdGhlIHJlYWRp
bmVzcyBvZiB0aGUgYXBwbGljYXRpb24sIHNvIHRoYXQgeW91IGNhbiBzdGFydAotICAgICAgICAg
ICAgICAgICAgIHRoZSBhcHAgd2hlbiB5b3VyIHRlc3RzIGFyZSByZWFkeSB0byBydW4uIEl0IGFs
c28gc2V0cyB0aGUgcm91dGVyJ3MKLSAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiB0byAnbm9u
ZScsIHNvIHRoYXQgdGhlIHdpbmRvdydzIGxvY2F0aW9uIHdpbGwgbm90IGJlIG1vZGlmaWVkCi0g
ICAgICAgICAgICAgICAgICAgKHByZXZlbnRpbmcgYm90aCBhY2NpZGVudGFsIGxlYWtpbmcgb2Yg
c3RhdGUgYmV0d2VlbiB0ZXN0cyBhbmQgaW50ZXJmZXJlbmNlCi0gICAgICAgICAgICAgICAgICAg
d2l0aCB5b3VyIHRlc3RpbmcgZnJhbWV3b3JrKS4KLQotICAgICAgICAgICAgICAgICAgIEV4YW1w
bGU6Ci0KLSAgICAgICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICAgICAgQXBwLnNldHVw
Rm9yVGVzdGluZygpOwotICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBzZXR1cEZvclRlc3RpbmcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBzZXR1cEZvclRlc3Rpbmc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNldHVw
Rm9yVGVzdGluZygpOwotCi0gICAgICAgICAgICAgICAgdGhpcy50ZXN0aW5nID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgICAgIHRoaXMuUm91dGVyLnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uOiAnbm9uZScKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCBh
cyB0aGUgY29udGFpbmVyIHRvIGluamVjdCB0aGUgdGVzdCBoZWxwZXJzIGludG8uIEJ5Ci0gICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQgdGhlIGhlbHBlcnMgYXJlIGluamVjdGVkIGludG8gYHdp
bmRvd2AuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGhlbHBlckNvbnRhaW5lcgot
ICAgICAgICAgICAgICAgICAgICBAdHlwZSB7T2JqZWN0fSBUaGUgb2JqZWN0IHRvIGJlIHVzZWQg
Zm9yIHRlc3QgaGVscGVycy4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgd2luZG93Ci0g
ICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGhlbHBlckNvbnRhaW5lcjogd2luZG93LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgVGhpcyBpbmplY3RzIHRoZSB0ZXN0IGhlbHBlcnMgaW50byB0aGUg
YGhlbHBlckNvbnRhaW5lcmAgb2JqZWN0LiBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQKLSAgICAg
ICAgICAgICAgICAgICAgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBoZWxwZXJDb250YWluZXIuIElm
IGBoZWxwZXJDb250YWluZXJgIGlzIG5vdCBzZXQgaXQgd2lsbCBkZWZhdWx0Ci0gICAgICAgICAg
ICAgICAgICAgIHRvIGB3aW5kb3dgLiBJZiBhIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUgaGFz
IGFscmVhZHkgYmVlbiBkZWZpbmVkIGl0IHdpbGwgYmUgY2FjaGVkCi0gICAgICAgICAgICAgICAg
ICAgIChzbyB0aGF0IGl0IGNhbiBiZSByZXNldCBpZiB0aGUgaGVscGVyIGlzIHJlbW92ZWQgd2l0
aCBgdW5yZWdpc3RlckhlbHBlcmAgb3IKLSAgICAgICAgICAgICAgICAgICAgYHJlbW92ZVRlc3RI
ZWxwZXJzYCkuCi0KLSAgICAgICAgICAgICAgICAgICBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQg
d2l0aCBgb25JbmplY3RIZWxwZXJzYCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZQotICAgICAgICAg
ICAgICAgICAgIGhlbHBlcnMgaGF2ZSBiZWVuIGluamVjdGVkLgotCi0gICAgICAgICAgICAgICAg
ICBFeGFtcGxlOgotICAgICAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgICAgICBBcHAu
aW5qZWN0VGVzdEhlbHBlcnMoKTsKLSAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgaW5qZWN0VGVzdEhlbHBlcnMKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBpbmplY3RUZXN0SGVscGVyczogZnVuY3Rpb24oaGVscGVyQ29udGFpbmVy
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhlbHBlckNvbnRhaW5lcikgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmhlbHBlckNvbnRhaW5lciA9IGhlbHBlckNvbnRhaW5lcjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnRlc3RIZWxwZXJzID0ge307Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBoZWxwZXJzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMub3JpZ2luYWxNZXRob2RzW25hbWVdID0gdGhpcy5oZWxwZXJDb250YWluZXJbbmFt
ZV07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudGVzdEhlbHBlcnNbbmFtZV0gPSB0aGlzLmhl
bHBlckNvbnRhaW5lcltuYW1lXSA9IGhlbHBlcih0aGlzLCBuYW1lKTsKLSAgICAgICAgICAgICAg
ICAgICAgcHJvdG9XcmFwKFRlc3QuUHJvbWlzZS5wcm90b3R5cGUsIG5hbWUsIGhlbHBlcih0aGlz
LCBuYW1lKSwgaGVscGVyc1tuYW1lXS5tZXRhLndhaXQpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaW5qZWN0SGVscGVyc0NhbGxiYWNr
cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW5qZWN0SGVscGVy
c0NhbGxiYWNrc1tpXSh0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyByZW1vdmVzIGFsbCBo
ZWxwZXJzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQsIGFuZCByZXNldHMgYW5kIGZ1bmN0aW9u
cwotICAgICAgICAgICAgICAgICAgICB0aGF0IHdlcmUgb3ZlcnJpZGRlbiBieSB0aGUgaGVscGVy
cy4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLnJlbW92ZVRlc3RIZWxwZXJz
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJs
aWMKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmVUZXN0SGVscGVycwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZVRlc3RIZWxwZXJzOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGhlbHBlcnMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5oZWxwZXJDb250YWluZXJbbmFtZV0gPSB0aGlzLm9yaWdpbmFsTWV0
aG9kc1tuYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGVzdEhlbHBlcnNb
bmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9yaWdpbmFsTWV0aG9kc1tu
YW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIG5vIGxvbmdlciBuZWVkZWQKLSAgICAgICAgLy8gQnV0
IHN0aWxsIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIG9mIGhl
bHBlciBjaGFpbmluZwotICAgICAgICBmdW5jdGlvbiBwcm90b1dyYXAocHJvdG8sIG5hbWUsIGNh
bGxiYWNrLCBpc0FzeW5jKSB7Ci0gICAgICAgICAgICBwcm90b1tuYW1lXSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwotICAgICAgICAgICAgICAg
IGlmIChpc0FzeW5jKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBs
eSh0aGlzLCBhcmdzKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAg
ICAgICAgVGVzdC5Qcm9taXNlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBSU1ZQLlByb21p
c2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIFRlc3QubGFzdFByb21pc2Ug
PSB0aGlzOwotICAgICAgICB9OwotCi0gICAgICAgIFRlc3QuUHJvbWlzZS5wcm90b3R5cGUgPSBj
cmVhdGUoUlNWUC5Qcm9taXNlLnByb3RvdHlwZSk7Ci0gICAgICAgIFRlc3QuUHJvbWlzZS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBUZXN0LlByb21pc2U7Ci0KLSAgICAgICAgLy8gUGF0Y2ggYHRo
ZW5gIHRvIGlzb2xhdGUgYXN5bmMgbWV0aG9kcwotICAgICAgICAvLyBzcGVjaWZpY2FsbHkgYEVt
YmVyLlRlc3QubGFzdFByb21pc2VgCi0gICAgICAgIHZhciBvcmlnaW5hbFRoZW4gPSBSU1ZQLlBy
b21pc2UucHJvdG90eXBlLnRoZW47Ci0gICAgICAgIFRlc3QuUHJvbWlzZS5wcm90b3R5cGUudGhl
biA9IGZ1bmN0aW9uKG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7Ci0gICAgICAgICAgICByZXR1cm4g
b3JpZ2luYWxUaGVuLmNhbGwodGhpcywgZnVuY3Rpb24odmFsKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGlzb2xhdGUob25TdWNjZXNzLCB2YWwpOwotICAgICAgICAgICAgfSwgb25GYWlsdXJl
KTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBUaGlzIG1ldGhvZCBpc29sYXRlcyBuZXN0ZWQg
YXN5bmMgbWV0aG9kcwotICAgICAgICAvLyBzbyB0aGF0IHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0
aCBvdGhlciBsYXN0IHByb21pc2VzLgotICAgICAgICAvLwotICAgICAgICAvLyAxLiBTZXQgYEVt
YmVyLlRlc3QubGFzdFByb21pc2VgIHRvIG51bGwKLSAgICAgICAgLy8gMi4gSW52b2tlIG1ldGhv
ZAotICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIGxhc3QgcHJvbWlzZSBjcmVhdGVkIGR1cmluZyBt
ZXRob2QKLSAgICAgICAgLy8gNC4gUmVzdG9yZSBgRW1iZXIuVGVzdC5sYXN0UHJvbWlzZWAgdG8g
b3JpZ2luYWwgdmFsdWUKLSAgICAgICAgZnVuY3Rpb24gaXNvbGF0ZShmbiwgdmFsKSB7Ci0gICAg
ICAgICAgICB2YXIgdmFsdWUsIGxhc3RQcm9taXNlOwotCi0gICAgICAgICAgICAvLyBSZXNldCBs
YXN0UHJvbWlzZSBmb3IgbmVzdGVkIGhlbHBlcnMKLSAgICAgICAgICAgIFRlc3QubGFzdFByb21p
c2UgPSBudWxsOwotCi0gICAgICAgICAgICB2YWx1ZSA9IGZuKHZhbCk7Ci0KLSAgICAgICAgICAg
IGxhc3RQcm9taXNlID0gVGVzdC5sYXN0UHJvbWlzZTsKLQotICAgICAgICAgICAgLy8gSWYgdGhl
IG1ldGhvZCByZXR1cm5lZCBhIHByb21pc2UKLSAgICAgICAgICAgIC8vIHJldHVybiB0aGF0IHBy
b21pc2UuIElmIG5vdCwKLSAgICAgICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCBhc3luYyBoZWxw
ZXIncyBwcm9taXNlCi0gICAgICAgICAgICBpZiAoKHZhbHVlICYmICh2YWx1ZSBpbnN0YW5jZW9m
IFRlc3QuUHJvbWlzZSkpIHx8ICFsYXN0UHJvbWlzZSkgewotICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcnVuKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBsYXN0UHJvbWlzZSA9IFRlc3QucmVzb2x2ZShs
YXN0UHJvbWlzZSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RQcm9taXNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFRlc3Q7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cyIsCi0gICAgWyJlbWJlci1ydW50aW1lIiwgImVtYmVy
LXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzIiwgImVtYmVy
LXZpZXdzL3N5c3RlbS9yZW5kZXJfYnVmZmVyIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9leHQiLCAi
ZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzIiwgImVtYmVyLXZpZXdzL3ZpZXdzL2NvcmVfdmlldyIs
ICJlbWJlci12aWV3cy92aWV3cy92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXdfY29sbGVj
dGlvbiIsICJlbWJlci12aWV3cy92aWV3cy9jb250YWluZXJfdmlldyIsICJlbWJlci12aWV3cy92
aWV3cy9jb2xsZWN0aW9uX3ZpZXciLCAiZW1iZXItdmlld3Mvdmlld3MvY29tcG9uZW50IiwgImVt
YmVyLXZpZXdzL3N5c3RlbS9ldmVudF9kaXNwYXRjaGVyIiwgImVtYmVyLXZpZXdzL21peGlucy92
aWV3X3RhcmdldF9hY3Rpb25fc3VwcG9ydCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19k
ZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBl
bmRlbmN5MTRfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICAvKioKLSAgICAgICAgICAgIEVtYmVyIFZpZXdzCi0KLSAgICAgICAgICAgIEBtb2R1bGUgZW1i
ZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgIEByZXF1
aXJlcyBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICBAbWFpbiBlbWJlci12aWV3cwotICAgICAg
ICAgICAgKi8KLQotICAgICAgICAvLyBCRUdJTiBJTVBPUlRTCi0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19kZXBl
bmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBzZXRJbm5lckhUTUwgPSBfX2RlcGVu
ZGVuY3kzX18uc2V0SW5uZXJIVE1MOwotICAgICAgICB2YXIgaXNTaW1wbGVDbGljayA9IF9fZGVw
ZW5kZW5jeTNfXy5pc1NpbXBsZUNsaWNrOwotICAgICAgICB2YXIgUmVuZGVyQnVmZmVyID0gX19k
ZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIGZvciB0aGUgc2lkZSBlZmZlY3Qg
b2YgZXh0ZW5kaW5nIEVtYmVyLnJ1bi5xdWV1ZXMKLSAgICAgICAgdmFyIGNsb25lU3RhdGVzID0g
X19kZXBlbmRlbmN5Nl9fLmNsb25lU3RhdGVzOwotICAgICAgICB2YXIgc3RhdGVzID0gX19kZXBl
bmRlbmN5Nl9fLnN0YXRlczsKLQotICAgICAgICB2YXIgQ29yZVZpZXcgPSBfX2RlcGVuZGVuY3k3
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFZpZXcgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIFZpZXdDb2xsZWN0aW9uID0gX19kZXBlbmRlbmN5OV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBDb250YWluZXJWaWV3ID0gX19kZXBlbmRlbmN5MTBfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgQ29sbGVjdGlvblZpZXcgPSBfX2RlcGVuZGVuY3kxMV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb21wb25lbnQgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZh
dWx0Il07Ci0KLSAgICAgICAgdmFyIEV2ZW50RGlzcGF0Y2hlciA9IF9fZGVwZW5kZW5jeTEzX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0ID0gX19kZXBl
bmRlbmN5MTRfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFTkQgSU1QT1JUUwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBBbGlhcyBmb3IgalF1ZXJ5Ci0KLSAgICAgICAgICAgICAgQG1l
dGhvZCAkCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgLy8gQkVHSU4gRVhQT1JUUwotICAgICAgICBFbWJlci4kID0galF1ZXJ5OwotCi0gICAgICAg
IEVtYmVyLlZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0ID0gVmlld1RhcmdldEFjdGlvblN1cHBvcnQ7
Ci0gICAgICAgIEVtYmVyLlJlbmRlckJ1ZmZlciA9IFJlbmRlckJ1ZmZlcjsKLQotICAgICAgICB2
YXIgVmlld1V0aWxzID0gRW1iZXIuVmlld1V0aWxzID0ge307Ci0gICAgICAgIFZpZXdVdGlscy5z
ZXRJbm5lckhUTUwgPSBzZXRJbm5lckhUTUw7Ci0gICAgICAgIFZpZXdVdGlscy5pc1NpbXBsZUNs
aWNrID0gaXNTaW1wbGVDbGljazsKLQotICAgICAgICBFbWJlci5Db3JlVmlldyA9IENvcmVWaWV3
OwotICAgICAgICBFbWJlci5WaWV3ID0gVmlldzsKLSAgICAgICAgRW1iZXIuVmlldy5zdGF0ZXMg
PSBzdGF0ZXM7Ci0gICAgICAgIEVtYmVyLlZpZXcuY2xvbmVTdGF0ZXMgPSBjbG9uZVN0YXRlczsK
LQotICAgICAgICBFbWJlci5fVmlld0NvbGxlY3Rpb24gPSBWaWV3Q29sbGVjdGlvbjsKLSAgICAg
ICAgRW1iZXIuQ29udGFpbmVyVmlldyA9IENvbnRhaW5lclZpZXc7Ci0gICAgICAgIEVtYmVyLkNv
bGxlY3Rpb25WaWV3ID0gQ29sbGVjdGlvblZpZXc7Ci0gICAgICAgIEVtYmVyLkNvbXBvbmVudCA9
IENvbXBvbmVudDsKLSAgICAgICAgRW1iZXIuRXZlbnREaXNwYXRjaGVyID0gRXZlbnREaXNwYXRj
aGVyOwotICAgICAgICAvLyBFTkQgRVhQT1JUUwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBFbWJlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL21peGlucy9j
b21wb25lbnRfdGVtcGxhdGVfZGVwcmVjYXRpb24iLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVt
YmVyLmRlcHJlY2F0ZQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAg
ICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5M19fLk1peGluOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBUaGUgQ29tcG9uZW50VGVtcGxhdGVEZXByZWNhdGlvbiBtaXhpbiBpcyB1
c2VkIHRvIHByb3ZpZGUgYSB1c2VmdWwKLSAgICAgICAgICAgICAgZGVwcmVjYXRpb24gd2Fybmlu
ZyB3aGVuIHVzaW5nIGVpdGhlciBgdGVtcGxhdGVgIG9yIGB0ZW1wbGF0ZU5hbWVgIHdpdGgKLSAg
ICAgICAgICAgICAgYSBjb21wb25lbnQuIFRoZSBgdGVtcGxhdGVgIGFuZCBgdGVtcGxhdGVOYW1l
YCBwcm9wZXJ0aWVzIHNwZWNpZmllZCBhdAotICAgICAgICAgICAgICBleHRlbmQgdGltZSBhcmUg
bW92ZWQgdG8gYGxheW91dGAgYW5kIGBsYXlvdXROYW1lYCByZXNwZWN0aXZlbHkuCi0KLSAgICAg
ICAgICAgICAgYEVtYmVyLkNvbXBvbmVudFRlbXBsYXRlRGVwcmVjYXRpb25gIGlzIHVzZWQgaW50
ZXJuYWxseSBieSBFbWJlciBpbgotICAgICAgICAgICAgICBgRW1iZXIuQ29tcG9uZW50YC4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgQ29tcG9uZW50VGVtcGxhdGVEZXByZWNhdGlvbgotICAgICAg
ICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIE1vdmVzIGB0ZW1w
bGF0ZU5hbWVgIHRvIGBsYXlvdXROYW1lYCBhbmQgYHRlbXBsYXRlYCB0byBgbGF5b3V0YCBhdCBl
eHRlbmQKLSAgICAgICAgICAgICAgICAgICAgdGltZSBpZiBhIGxheW91dCBpcyBub3QgYWxzbyBz
cGVjaWZpZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5
IG1vZGlmaWVzIHRoZSBtaXhpbiB0aGVtc2VsdmVzLCB3aGljaCBpcyB0ZWNobmljYWxseQotICAg
ICAgICAgICAgICAgICAgICBkdWJpb3VzIGJ1dCBpcyBwcmFjdGljYWxseSBvZiBsaXR0bGUgY29u
c2VxdWVuY2UuIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgZnV0
dXJlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2lsbE1lcmdlTWl4aW4KLSAgICAg
ICAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgd2lsbE1lcmdlTWl4aW46IGZ1bmN0aW9uKHByb3BzKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gbXVzdCBjYWxsIF9zdXBlciBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBBY3Rpb25IYW5kbGVy
Ci0gICAgICAgICAgICAgICAgLy8gbWl4aW4gaXMgc2V0dXAgcHJvcGVybHkgKG1vdmVzIGFjdGlv
bnMgLT4gX2FjdGlvbnMpCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBD
YWxsaW5nIHN1cGVyIGlzIG9ubHkgT0sgaGVyZSBzaW5jZSB3ZSBLTk9XIHRoYXQKLSAgICAgICAg
ICAgICAgICAvLyB0aGVyZSBpcyBhbm90aGVyIE1peGluIGxvYWRlZCBmaXJzdC4KLSAgICAgICAg
ICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICAgICAg
ICAgICAgdmFyIGRlcHJlY2F0ZWRQcm9wZXJ0eSwgcmVwbGFjZW1lbnRQcm9wZXJ0eSwKLSAgICAg
ICAgICAgICAgICBsYXlvdXRTcGVjaWZpZWQgPSAocHJvcHMubGF5b3V0TmFtZSB8fCBwcm9wcy5s
YXlvdXQgfHwgZ2V0KHRoaXMsICdsYXlvdXROYW1lJykpOwotCi0gICAgICAgICAgICAgICAgaWYg
KHByb3BzLnRlbXBsYXRlTmFtZSAmJiAhbGF5b3V0U3BlY2lmaWVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlcHJlY2F0ZWRQcm9wZXJ0eSA9ICd0ZW1wbGF0ZU5hbWUnOwotICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudFByb3BlcnR5ID0gJ2xheW91dE5hbWUnOwotCi0gICAgICAgICAg
ICAgICAgICAgIHByb3BzLmxheW91dE5hbWUgPSBwcm9wcy50ZW1wbGF0ZU5hbWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sndGVtcGxhdGVOYW1lJ107Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BzLnRlbXBsYXRlICYmICFsYXlvdXRTcGVj
aWZpZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZFByb3BlcnR5ID0gJ3RlbXBs
YXRlJzsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRQcm9wZXJ0eSA9ICdsYXlvdXQn
OwotCi0gICAgICAgICAgICAgICAgICAgIHByb3BzLmxheW91dCA9IHByb3BzLnRlbXBsYXRlOwot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHNbJ3RlbXBsYXRlJ107Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWRQcm9wZXJ0eSkgewotICAg
ICAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ0RvIG5vdCBzcGVjaWZ5ICcgKyBkZXBy
ZWNhdGVkUHJvcGVydHkgKyAnIG9uIGEgQ29tcG9uZW50LCB1c2UgJyArIHJlcGxhY2VtZW50UHJv
cGVydHkgKyAnIGluc3RlYWQuJywgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy9taXhp
bnMvdmlld190YXJnZXRfYWN0aW9uX3N1cHBvcnQiLAotICAgIFsiZW1iZXItbWV0YWwvbWl4aW4i
LCAiZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwgImVtYmVyLW1l
dGFsL2NvbXB1dGVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTFfXy5NaXhp
bjsKLSAgICAgICAgdmFyIFRhcmdldEFjdGlvblN1cHBvcnQgPSBfX2RlcGVuZGVuY3kyX19bImRl
ZmF1bHQiXTsKLQotICAgICAgICAvLyBFUzZUT0RPOiBjb21wdXRlZCBzaG91bGQgaGF2ZSBpdHMg
b3duIGV4cG9ydCBwYXRoIHNvIHlvdSBjYW4gZG8gaW1wb3J0IHtkZWZhdWx0VG99IGZyb20gY29t
cHV0ZWQKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5M19fLmNvbXB1dGVkOwot
ICAgICAgICB2YXIgYWxpYXMgPSBjb21wdXRlZC5hbGlhczsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgIGBFbWJlci5WaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydGAgaXMgYSBtaXhpbiB0aGF0IGNh
biBiZSBpbmNsdWRlZCBpbiBhCi0gICAgICAgICAgICB2aWV3IGNsYXNzIHRvIGFkZCBhIGB0cmln
Z2VyQWN0aW9uYCBtZXRob2Qgd2l0aCBzZW1hbnRpY3Mgc2ltaWxhciB0bwotICAgICAgICAgICAg
dGhlIEhhbmRsZWJhcnMgYHt7YWN0aW9ufX1gIGhlbHBlci4gSXQgcHJvdmlkZXMgaW50ZWxsaWdl
bnQgZGVmYXVsdHMKLSAgICAgICAgICAgIGZvciB0aGUgYWN0aW9uJ3MgdGFyZ2V0OiB0aGUgdmll
dydzIGNvbnRyb2xsZXI7IGFuZCB0aGUgY29udGV4dCB0aGF0IGlzCi0gICAgICAgICAgICBzZW50
IHdpdGggdGhlIGFjdGlvbjogdGhlIHZpZXcncyBjb250ZXh0LgotCi0gICAgICAgICAgICBOb3Rl
OiBJbiBub3JtYWwgRW1iZXIgdXNhZ2UsIHRoZSBge3thY3Rpb259fWAgaGVscGVyIGlzIHVzdWFs
bHkgdGhlIGJlc3QKLSAgICAgICAgICAgIGNob2ljZS4gVGhpcyBtaXhpbiBpcyBtb3N0IG9mdGVu
IHVzZWZ1bCB3aGVuIHlvdSBhcmUgZG9pbmcgbW9yZSBjb21wbGV4Ci0gICAgICAgICAgICBldmVu
dCBoYW5kbGluZyBpbiBjdXN0b20gVmlldyBzdWJjbGFzc2VzLgotCi0gICAgICAgICAgICBGb3Ig
ZXhhbXBsZToKLQotICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgQXBwLlNh
dmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVmlld1RhcmdldEFjdGlvblN1
cHBvcnQsIHsKLSAgICAgICAgICAgICAgYWN0aW9uOiAnc2F2ZScsCi0gICAgICAgICAgICAgIGNs
aWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJBY3Rpb24oKTsg
Ly8gU2VuZHMgdGhlIGBzYXZlYCBhY3Rpb24sIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgY29udGV4
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY3VycmVu
dCBjb250cm9sbGVyCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgIFRoZSBgYWN0aW9uYCBjYW4gYmUgcHJvdmlkZWQgYXMgcHJv
cGVydGllcyBvZiBhbiBvcHRpb25hbCBvYmplY3QgYXJndW1lbnQKLSAgICAgICAgICAgIHRvIGB0
cmlnZ2VyQWN0aW9uYCBhcyB3ZWxsLgotCi0gICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZChFbWJlci5WaWV3
VGFyZ2V0QWN0aW9uU3VwcG9ydCwgewotICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQWN0aW9uKHsKLSAgICAgICAgICAgICAgICAg
IGFjdGlvbjogJ3NhdmUnCi0gICAgICAgICAgICAgICAgfSk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAg
YWN0aW9uLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlcgotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICBAY2xhc3MgVmlld1Rhcmdl
dEFjdGlvblN1cHBvcnQKLSAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAg
IEBleHRlbmRzIEVtYmVyLlRhcmdldEFjdGlvblN1cHBvcnQKLSAgICAgICAgICAgICovCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoVGFyZ2V0QWN0aW9uU3Vw
cG9ydCwgewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdGFy
Z2V0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGFyZ2V0OiBhbGlhcygnY29u
dHJvbGxlcicpLAotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICBAcHJvcGVydHkg
YWN0aW9uQ29udGV4dAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFjdGlvbkNv
bnRleHQ6IGFsaWFzKCdjb250ZXh0JykKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci12aWV3cy9zeXN0ZW0vZXZlbnRfZGlzcGF0Y2hlciIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0
eV9zZXQiLCAiZW1iZXItbWV0YWwvaXNfbm9uZSIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJl
bWJlci1tZXRhbC91dGlscyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1i
ZXItdmlld3Mvdmlld3MvdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9f
LCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2Rl
cGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAg
ICAgICovCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICAvLyBFbWJlci5hc3NlcnQKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5
Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAg
IHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k0X18uaXNOb25lOwotICAgICAgICB2YXIgcnVuID0g
X19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciB0eXBlT2YgPSBfX2RlcGVu
ZGVuY3k2X18udHlwZU9mOwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5N19fLmZtdDsK
LSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIFZpZXcgPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIEFj
dGlvbkhlbHBlcjsKLQotICAgICAgICAvL0VTNlRPRE86Ci0gICAgICAgIC8vIGZpbmQgYSBiZXR0
ZXIgd2F5IHRvIGRvIEVtYmVyLlZpZXcudmlld3Mgd2l0aG91dCBnbG9iYWwgc3RhdGUKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgaGFuZGxlcyBk
ZWxlZ2F0aW5nIGJyb3dzZXIgZXZlbnRzIHRvIHRoZWlyCi0gICAgICAgICAgICAgIGNvcnJlc3Bv
bmRpbmcgYEVtYmVyLlZpZXdzLmAgRm9yIGV4YW1wbGUsIHdoZW4geW91IGNsaWNrIG9uIGEgdmll
dywKLSAgICAgICAgICAgICAgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgZW5zdXJlcyB0aGF0IHRo
YXQgdmlldydzIGBtb3VzZURvd25gIG1ldGhvZCBnZXRzCi0gICAgICAgICAgICAgIGNhbGxlZC4K
LQotICAgICAgICAgICAgICBAY2xhc3MgRXZlbnREaXNwYXRjaGVyCi0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQGV4
dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1si
ZGVmYXVsdCJdID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZXZlbnRzIG5hbWVzIChhbmQgYXNzb2NpYXRlZCBo
YW5kbGVyIGZ1bmN0aW9uIG5hbWVzKSB0byBiZSBzZXR1cAotICAgICAgICAgICAgICAgICAgICBh
bmQgZGlzcGF0Y2hlZCBieSB0aGUgYEV2ZW50RGlzcGF0Y2hlcmAuIEN1c3RvbSBldmVudHMgY2Fu
IGFkZGVkIHRvIHRoaXMgbGlzdCBhdCBzZXR1cAotICAgICAgICAgICAgICAgICAgICB0aW1lLCBn
ZW5lcmFsbHkgdmlhIHRoZSBgRW1iZXIuQXBwbGljYXRpb24uY3VzdG9tRXZlbnRzYCBoYXNoLiBP
bmx5IG92ZXJyaWRlIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBzZXQgdG8gcHJl
dmVudCB0aGUgRXZlbnREaXNwYXRjaGVyIGZyb20gbGlzdGVuaW5nIG9uIHNvbWUgZXZlbnRzIGFs
bCB0b2dldGhlci4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIHNldCB3aWxsIGJlIG1vZGlm
aWVkIGJ5IGBzZXR1cGAgdG8gYWxzbyBpbmNsdWRlIGFueSBldmVudHMgYWRkZWQgYXQgdGhhdCB0
aW1lLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBldmVudHMKLSAgICAgICAgICAg
ICAgICAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ZXZlbnRzOiB7Ci0gICAgICAgICAgICAgICAgdG91Y2hzdGFydCA6ICd0b3VjaFN0YXJ0JywKLSAg
ICAgICAgICAgICAgICB0b3VjaG1vdmUgOiAndG91Y2hNb3ZlJywKLSAgICAgICAgICAgICAgICB0
b3VjaGVuZCA6ICd0b3VjaEVuZCcsCi0gICAgICAgICAgICAgICAgdG91Y2hjYW5jZWwgOiAndG91
Y2hDYW5jZWwnLAotICAgICAgICAgICAgICAgIGtleWRvd24gOiAna2V5RG93bicsCi0gICAgICAg
ICAgICAgICAga2V5dXAgOiAna2V5VXAnLAotICAgICAgICAgICAgICAgIGtleXByZXNzIDogJ2tl
eVByZXNzJywKLSAgICAgICAgICAgICAgICBtb3VzZWRvd24gOiAnbW91c2VEb3duJywKLSAgICAg
ICAgICAgICAgICBtb3VzZXVwIDogJ21vdXNlVXAnLAotICAgICAgICAgICAgICAgIGNvbnRleHRt
ZW51IDogJ2NvbnRleHRNZW51JywKLSAgICAgICAgICAgICAgICBjbGljayA6ICdjbGljaycsCi0g
ICAgICAgICAgICAgICAgZGJsY2xpY2sgOiAnZG91YmxlQ2xpY2snLAotICAgICAgICAgICAgICAg
IG1vdXNlbW92ZSA6ICdtb3VzZU1vdmUnLAotICAgICAgICAgICAgICAgIGZvY3VzaW4gOiAnZm9j
dXNJbicsCi0gICAgICAgICAgICAgICAgZm9jdXNvdXQgOiAnZm9jdXNPdXQnLAotICAgICAgICAg
ICAgICAgIG1vdXNlZW50ZXIgOiAnbW91c2VFbnRlcicsCi0gICAgICAgICAgICAgICAgbW91c2Vs
ZWF2ZSA6ICdtb3VzZUxlYXZlJywKLSAgICAgICAgICAgICAgICBzdWJtaXQgOiAnc3VibWl0JywK
LSAgICAgICAgICAgICAgICBpbnB1dCA6ICdpbnB1dCcsCi0gICAgICAgICAgICAgICAgY2hhbmdl
IDogJ2NoYW5nZScsCi0gICAgICAgICAgICAgICAgZHJhZ3N0YXJ0IDogJ2RyYWdTdGFydCcsCi0g
ICAgICAgICAgICAgICAgZHJhZyA6ICdkcmFnJywKLSAgICAgICAgICAgICAgICBkcmFnZW50ZXIg
OiAnZHJhZ0VudGVyJywKLSAgICAgICAgICAgICAgICBkcmFnbGVhdmUgOiAnZHJhZ0xlYXZlJywK
LSAgICAgICAgICAgICAgICBkcmFnb3ZlciA6ICdkcmFnT3ZlcicsCi0gICAgICAgICAgICAgICAg
ZHJvcCA6ICdkcm9wJywKLSAgICAgICAgICAgICAgICBkcmFnZW5kIDogJ2RyYWdFbmQnCi0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIHJv
b3QgRE9NIGVsZW1lbnQgdG8gd2hpY2ggZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBiZSBhdHRhY2hl
ZC4gRXZlbnQKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzIHdpbGwgYmUgYXR0YWNoZWQg
dG8gdGhlIGRvY3VtZW50IHVubGVzcyB0aGlzIGlzIG92ZXJyaWRkZW4uCi0KLSAgICAgICAgICAg
ICAgICAgICAgQ2FuIGJlIHNwZWNpZmllZCBhcyBhIERPTUVsZW1lbnQgb3IgYSBzZWxlY3RvciBz
dHJpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYm9keSBpcyBhIHN0cmlu
ZyBzaW5jZSB0aGlzIG1heSBiZSBldmFsdWF0ZWQgYmVmb3JlIGRvY3VtZW50LmJvZHkKLSAgICAg
ICAgICAgICAgICAgICAgZXhpc3RzIGluIHRoZSBET00uCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJvb3RFbGVtZW50Ci0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIERPTUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgQGRl
ZmF1bHQgJ2JvZHknCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcm9vdEVsZW1l
bnQ6ICdib2R5JywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEl0IGVu
YWJsZXMgZXZlbnRzIHRvIGJlIGRpc3BhdGNoZWQgdG8gdGhlIHZpZXcncyBgZXZlbnRNYW5hZ2Vy
LmAgV2hlbiBwcmVzZW50LAotICAgICAgICAgICAgICAgICAgICB0aGlzIG9iamVjdCB0YWtlcyBw
cmVjZWRlbmNlIG92ZXIgaGFuZGxpbmcgb2YgZXZlbnRzIG9uIHRoZSB2aWV3IGl0c2VsZi4KLQot
ICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgbW9zdCBFbWJlciBhcHBsaWNhdGlvbnMgZG8g
bm90IHVzZSB0aGlzIGZlYXR1cmUuIElmIHlvdXIgYXBwIGFsc28KLSAgICAgICAgICAgICAgICAg
ICAgZG9lcyBub3QgdXNlIGl0LCBjb25zaWRlciBzZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gZmFs
c2UgdG8gZ2FpbiBzb21lIHBlcmZvcm1hbmNlCi0gICAgICAgICAgICAgICAgICAgIGltcHJvdmVt
ZW50IGJ5IGFsbG93aW5nIHRoZSBFdmVudERpc3BhdGNoZXIgdG8gc2tpcCB0aGUgc2VhcmNoIGZv
ciB0aGUKLSAgICAgICAgICAgICAgICAgICAgYGV2ZW50TWFuYWdlcmAgb24gdGhlIHZpZXcgdHJl
ZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBFdmVudERpc3BhdGNoZXIgPSBFbS5FdmVudERpc3BhdGNoZXIuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICAgICAgICBldmVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xpY2sgICAgICAgOiAnY2xpY2snLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2lu
ICAgICA6ICdmb2N1c0luJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNvdXQgICAg
OiAnZm9jdXNPdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgICAgICA6ICdj
aGFuZ2UnCi0gICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICBj
YW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyOiBmYWxzZQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdldmVudF9kaXNwYXRjaGVy
Om1haW4nLCBFdmVudERpc3BhdGNoZXIpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY2FuRGlzcGF0Y2hUb0V2ZW50TWFuYWdlcgotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBib29sZWFuCi0gICAgICAgICAgICAgICAgICAgIEBkZWZh
dWx0ICd0cnVlJwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhbkRpc3BhdGNo
VG9FdmVudE1hbmFnZXI6IHRydWUsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBTZXRzIHVwIGV2ZW50IGxpc3RlbmVycyBmb3Igc3RhbmRhcmQgYnJvd3NlciBldmVudHMu
Ci0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgYnJv
d3NlciBzZW5kcyBhIGBET01Db250ZW50UmVhZHlgIGV2ZW50LiBCeQotICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0LCBpdCB3aWxsIHNldCB1cCBhbGwgb2YgdGhlIGxpc3RlbmVycyBvbiB0aGUg
ZG9jdW1lbnQgYm9keS4gSWYgeW91Ci0gICAgICAgICAgICAgICAgICAgIHdvdWxkIGxpa2UgdG8g
cmVnaXN0ZXIgdGhlIGxpc3RlbmVycyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBzZXQgdGhlIGV2
ZW50Ci0gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIncyBgcm9vdGAgcHJvcGVydHkuCi0K
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBzZXR1cAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gYWRkZWRFdmVudHMge0hhc2h9Ci0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKGFkZGVkRXZl
bnRzLCByb290RWxlbWVudCkgewotICAgICAgICAgICAgICAgIHZhciBldmVudCwgZXZlbnRzID0g
Z2V0KHRoaXMsICdldmVudHMnKTsKLQotICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoZXZl
bnRzLCBhZGRlZEV2ZW50cyB8fCB7fSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlzTm9uZShy
b290RWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICdyb290RWxlbWVu
dCcsIHJvb3RFbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
b290RWxlbWVudCA9IGpRdWVyeShnZXQodGhpcywgJ3Jvb3RFbGVtZW50JykpOwotCi0gICAgICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgnWW91IGNhbm5vdCB1c2UgdGhlIHNhbWUgcm9vdCBl
bGVtZW50ICglQCkgbXVsdGlwbGUgdGltZXMgaW4gYW4gRW1iZXIuQXBwbGljYXRpb24nLCBbcm9v
dEVsZW1lbnQuc2VsZWN0b3IgfHwgcm9vdEVsZW1lbnRbMF0udGFnTmFtZV0pLCAhcm9vdEVsZW1l
bnQuaXMoJy5lbWJlci1hcHBsaWNhdGlvbicpKTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoJ1lvdSBjYW5ub3QgbWFrZSBhIG5ldyBFbWJlci5BcHBsaWNhdGlvbiB1c2luZyBhIHJvb3Qg
ZWxlbWVudCB0aGF0IGlzIGEgZGVzY2VuZGVudCBvZiBhbiBleGlzdGluZyBFbWJlci5BcHBsaWNh
dGlvbicsICFyb290RWxlbWVudC5jbG9zZXN0KCcuZW1iZXItYXBwbGljYXRpb24nKS5sZW5ndGgp
OwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnWW91IGNhbm5vdCBtYWtlIGEgbmV3IEVt
YmVyLkFwcGxpY2F0aW9uIHVzaW5nIGEgcm9vdCBlbGVtZW50IHRoYXQgaXMgYW4gYW5jZXN0b3Ig
b2YgYW4gZXhpc3RpbmcgRW1iZXIuQXBwbGljYXRpb24nLCAhcm9vdEVsZW1lbnQuZmluZCgnLmVt
YmVyLWFwcGxpY2F0aW9uJykubGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50
LmFkZENsYXNzKCdlbWJlci1hcHBsaWNhdGlvbicpOwotCi0gICAgICAgICAgICAgICAgRW1iZXIu
YXNzZXJ0KCdVbmFibGUgdG8gYWRkICJlbWJlci1hcHBsaWNhdGlvbiIgY2xhc3MgdG8gcm9vdEVs
ZW1lbnQuIE1ha2Ugc3VyZSB5b3Ugc2V0IHJvb3RFbGVtZW50IHRvIHRoZSBib2R5IG9yIGFuIGVs
ZW1lbnQgaW4gdGhlIGJvZHkuJywgcm9vdEVsZW1lbnQuaXMoJy5lbWJlci1hcHBsaWNhdGlvbicp
KTsKLQotICAgICAgICAgICAgICAgIGZvciAoZXZlbnQgaW4gZXZlbnRzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNldHVwSGFuZGxlcihyb290RWxlbWVudCwgZXZlbnQsIGV2ZW50
c1tldmVudF0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlZ2lz
dGVycyBhbiBldmVudCBsaXN0ZW5lciBvbiB0aGUgcm9vdEVsZW1lbnQuIElmIHRoZSBnaXZlbiBl
dmVudCBpcwotICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQsIHRoZSBwcm92aWRlZCBldmVu
dCBoYW5kbGVyIHdpbGwgYmUgdHJpZ2dlcmVkIG9uIHRoZSB0YXJnZXQgdmlldy4KLQotICAgICAg
ICAgICAgICAgICAgICBJZiB0aGUgdGFyZ2V0IHZpZXcgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBl
dmVudCBoYW5kbGVyLCBvciBpZiB0aGUgaGFuZGxlcgotICAgICAgICAgICAgICAgICAgICByZXR1
cm5zIGBmYWxzZWAsIHRoZSBwYXJlbnQgdmlldyB3aWxsIGJlIGNhbGxlZC4gVGhlIGV2ZW50IHdp
bGwgY29udGludWUgdG8KLSAgICAgICAgICAgICAgICAgICAgYnViYmxlIHRvIGVhY2ggc3VjY2Vz
c2l2ZSBwYXJlbnQgdmlldyB1bnRpbCBpdCByZWFjaGVzIHRoZSB0b3AuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXR1cEhhbmRs
ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtFbGVtZW50fSByb290RWxlbWVudAotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnQgdGhlIGJyb3dzZXItb3JpZ2lu
YXRlZCBldmVudCB0byBsaXN0ZW4gdG8KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGV2ZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvIGNhbGwgb24gdGhlIHZpZXcK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZXR1cEhhbmRsZXI6IGZ1bmN0aW9u
KHJvb3RFbGVtZW50LCBldmVudCwgZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgcm9vdEVsZW1lbnQub24oZXZlbnQgKyAnLmVt
YmVyJywgJy5lbWJlci12aWV3JywgZnVuY3Rpb24oZXZ0LCB0cmlnZ2VyaW5nTWFuYWdlcikgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IFZpZXcudmlld3NbdGhpcy5pZF0sCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFy
IG1hbmFnZXIgPSBzZWxmLmNhbkRpc3BhdGNoVG9FdmVudE1hbmFnZXIgPyBzZWxmLl9maW5kTmVh
cmVzdEV2ZW50TWFuYWdlcih2aWV3LCBldmVudE5hbWUpIDogbnVsbDsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAobWFuYWdlciAmJiBtYW5hZ2VyICE9PSB0cmlnZ2VyaW5nTWFuYWdlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZGlzcGF0Y2hFdmVudChtYW5h
Z2VyLCBldnQsIGV2ZW50TmFtZSwgdmlldyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fYnViYmxl
RXZlbnQodmlldywgZXZ0LCBldmVudE5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50Lm9uKGV2ZW50ICsgJy5lbWJlcicsICdbZGF0YS1l
bWJlci1hY3Rpb25dJywgZnVuY3Rpb24oZXZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vRVM2
VE9ETzogTmVlZGVkIGZvciBBY3Rpb25IZWxwZXIgKGdlbmVyYWxseSBub3QgYXZhaWxhYmxlIGlu
IGVtYmVyLXZpZXdzIHRlc3Qgc3VpdGUpCi0gICAgICAgICAgICAgICAgICAgIGlmICghQWN0aW9u
SGVscGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25IZWxwZXIgPSByZXF1aXJl
TW9kdWxlKCJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMvaGVscGVycy9hY3Rpb24iKVsiQWN0aW9u
SGVscGVyIl07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
YXIgYWN0aW9uSWQgPSBqUXVlcnkoZXZ0LmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2RhdGEtZW1iZXIt
YWN0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IEFjdGlvbkhlbHBlci5yZWdp
c3RlcmVkQWN0aW9uc1thY3Rpb25JZF07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSB0byBjaGVjayBmb3IgYWN0aW9uIGhlcmUgc2luY2UgaW4gc29tZSBjYXNlcywgalF1ZXJ5IHdp
bGwgdHJpZ2dlcgotICAgICAgICAgICAgICAgICAgICAvLyBhbiBldmVudCBvbiBgcmVtb3ZlQ2hp
bGRgIChpLmUuIGZvY3Vzb3V0KSBhZnRlciB3ZSd2ZSBhbHJlYWR5IHRvcm4gZG93biB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYWN0aW9uIGhhbmRsZXJzIGZvciB0aGUgdmlldy4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFjdGlvbiAmJiBhY3Rpb24uZXZlbnROYW1lID09PSBldmVudE5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24uaGFuZGxlcihldnQp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBfZmluZE5lYXJlc3RFdmVudE1hbmFnZXI6IGZ1bmN0aW9uKHZp
ZXcsIGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyID0gbnVsbDsKLQot
ICAgICAgICAgICAgICAgIHdoaWxlICh2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hbmFn
ZXIgPSBnZXQodmlldywgJ2V2ZW50TWFuYWdlcicpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
bWFuYWdlciAmJiBtYW5hZ2VyW2V2ZW50TmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmll
dyA9IGdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
X2Rpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uKG9iamVjdCwgZXZ0LCBldmVudE5hbWUsIHZpZXcpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHZh
ciBoYW5kbGVyID0gb2JqZWN0W2V2ZW50TmFtZV07Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVP
ZihoYW5kbGVyKSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBydW4ob2JqZWN0LCBoYW5kbGVyLCBldnQsIHZpZXcpOwotICAgICAgICAgICAgICAgICAgICAv
LyBEbyBub3QgcHJldmVudERlZmF1bHQgaW4gZXZlbnRNYW5hZ2Vycy4KLSAgICAgICAgICAgICAg
ICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2J1YmJsZUV2ZW50KHZpZXcsIGV2dCwg
ZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2J1YmJsZUV2ZW50OiBmdW5j
dGlvbih2aWV3LCBldnQsIGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBydW4o
dmlldywgdmlldy5oYW5kbGVFdmVudCwgZXZlbnROYW1lLCBldnQpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHJvb3RFbGVtZW50ID0gZ2V0KHRoaXMsICdyb290RWxlbWVudCcpOwotICAgICAgICAgICAgICAg
IGpRdWVyeShyb290RWxlbWVudCkub2ZmKCcuZW1iZXInLCAnKionKS5yZW1vdmVDbGFzcygnZW1i
ZXItYXBwbGljYXRpb24nKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIoKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJyhFdmVudERpc3B0YWNoZXIpJzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy9zeXN0ZW0vZXh0
IiwKLSAgICBbImVtYmVyLW1ldGFsL3J1bl9sb29wIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAg
ICAgICAgICAqLwotCi0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQi
XTsKLQotICAgICAgICAvLyBBZGQgYSBuZXcgbmFtZWQgcXVldWUgZm9yIHJlbmRlcmluZyB2aWV3
cyB0aGF0IGhhcHBlbnMKLSAgICAgICAgLy8gYWZ0ZXIgYmluZGluZ3MgaGF2ZSBzeW5jZWQsIGFu
ZCBhIHF1ZXVlIGZvciBzY2hlZHVsaW5nIGFjdGlvbnMKLSAgICAgICAgLy8gdGhhdCB0aGF0IHNo
b3VsZCBvY2N1ciBhZnRlciB2aWV3IHJlbmRlcmluZy4KLSAgICAgICAgdmFyIHF1ZXVlcyA9IHJ1
bi5xdWV1ZXM7Ci0gICAgICAgIHJ1bi5fYWRkUXVldWUoJ3JlbmRlcicsICdhY3Rpb25zJyk7Ci0g
ICAgICAgIHJ1bi5fYWRkUXVldWUoJ2FmdGVyUmVuZGVyJywgJ3JlbmRlcicpOwotICAgIH0pOwot
ICAgIGRlZmluZSgiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1tZXRhbC9lbnVt
ZXJhYmxlX3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQKLSAgICAgICAgdmFyIHcgPSBfX2RlcGVu
ZGVuY3kyX18udzsKLQotICAgICAgICAvLyBFUzZUT0RPOiB0aGUgZnVuY3Rpb25zIG9uIEVudW1l
cmFibGVVdGlscyBuZWVkIHRoZWlyIG93biBleHBvcnRzCi0gICAgICAgIHZhciBmb3JFYWNoID0g
X19kZXBlbmRlbmN5M19fLmZvckVhY2g7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBFbWJl
ciBWaWV3cwotCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICBAcmVxdWlyZXMgZW1iZXItcnVudGltZQotICAg
ICAgICAgICAgQG1haW4gZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFy
IGpRdWVyeSA9IChFbWJlci5pbXBvcnRzICYmIEVtYmVyLmltcG9ydHMualF1ZXJ5KSB8fCAodGhp
cyAmJiB0aGlzLmpRdWVyeSk7Ci0gICAgICAgIGlmICghalF1ZXJ5ICYmIHR5cGVvZiByZXF1aXJl
ID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnkn
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiRW1iZXIgVmlld3MgcmVxdWly
ZSBqUXVlcnkgYmV0d2VlbiAxLjcgYW5kIDIuMSIsIGpRdWVyeSAmJiAoalF1ZXJ5KCkuanF1ZXJ5
Lm1hdGNoKC9eKCgxXC4oN3w4fDl8MTB8MTEpKXwoMlwuKDB8MSkpKShcLlxkKyk/KHByZXxyY1xk
Pyk/LykgfHwgRW1iZXIuRU5WLkZPUkNFX0pRVUVSWSkpOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwot
ICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKGpRdWVyeSkgewotICAgICAgICAgICAgLy8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
ZG5kLmh0bWwjZG5kZXZlbnRzCi0gICAgICAgICAgICB2YXIgZHJhZ0V2ZW50cyA9IHcoJ2RyYWdz
dGFydCBkcmFnIGRyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCBkcmFnZW5kJyk7Ci0K
LSAgICAgICAgICAgIC8vIENvcGllcyB0aGUgYGRhdGFUcmFuc2ZlcmAgcHJvcGVydHkgZnJvbSBh
IGJyb3dzZXIgZXZlbnQgb2JqZWN0IG9udG8gdGhlCi0gICAgICAgICAgICAvLyBqUXVlcnkgZXZl
bnQgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50cwotICAgICAgICAgICAgZm9yRWFjaChk
cmFnRXZlbnRzLCBmdW5jdGlvbihldmVudE5hbWUpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuZml4SG9va3NbZXZlbnROYW1lXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcHM6
IFsnZGF0YVRyYW5zZmVyJ10gCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGpRdWVyeTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL3N5c3RlbS9yZW5kZXJfYnVmZmVyIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVy
LW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCAiZW1iZXIt
dmlld3Mvc3lzdGVtL2pxdWVyeSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9f
LCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBqUXVlcnkKLQotICAgICAg
ICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVw
ZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBzZXRJbm5lckhUTUwgPSBfX2RlcGVuZGVuY3k0
X18uc2V0SW5uZXJIVE1MOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19kZXBlbmRlbmN5NV9fWyJk
ZWZhdWx0Il07Ci0KLSAgICAgICAgZnVuY3Rpb24gQ2xhc3NTZXQoKSB7Ci0gICAgICAgICAgICB0
aGlzLnNlZW4gPSB7fTsKLSAgICAgICAgICAgIHRoaXMubGlzdCA9IFtdOwotICAgICAgICB9Ci0K
LSAgICAgICAgQ2xhc3NTZXQucHJvdG90eXBlID0gewotICAgICAgICAgICAgYWRkOiBmdW5jdGlv
bihzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaW5nIGluIHRoaXMuc2Vlbikgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHRoaXMuc2VlbltzdHJpbmddID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHRoaXMu
bGlzdC5wdXNoKHN0cmluZyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0b0RPTTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdC5qb2luKCIgIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIEJBRF9UQUdfTkFNRV9U
RVNUX1JFR0VYUCA9IC9bXmEtekEtWjAtOVwtXS87Ci0gICAgICAgIHZhciBCQURfVEFHX05BTUVf
UkVQTEFDRV9SRUdFWFAgPSAvW15hLXpBLVowLTlcLV0vZzsKLQotICAgICAgICBmdW5jdGlvbiBz
dHJpcFRhZ05hbWUodGFnTmFtZSkgewotICAgICAgICAgICAgaWYgKCF0YWdOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghQkFEX1RBR19OQU1FX1RFU1RfUkVHRVhQLnRlc3QodGFnTmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGFnTmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIHRhZ05hbWUucmVwbGFjZShCQURfVEFHX05BTUVfUkVQTEFDRV9SRUdFWFAsICcnKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBCQURfQ0hBUlNfUkVHRVhQID0gLyYoPyFcdys7KXxbPD4i
J2BdL2c7Ci0gICAgICAgIHZhciBQT1NTSUJMRV9DSEFSU19SRUdFWFAgPSAvWyY8PiInYF0vOwot
Ci0gICAgICAgIGZ1bmN0aW9uIGVzY2FwZUF0dHJpYnV0ZSh2YWx1ZSkgewotICAgICAgICAgICAg
Ly8gU3RvbGVuIHNoYW1lbGVzc2x5IGZyb20gSGFuZGxlYmFycwotCi0gICAgICAgICAgICB2YXIg
ZXNjYXBlID0gewotICAgICAgICAgICAgICAgICI8IjogIiZsdDsiLAotICAgICAgICAgICAgICAg
ICI+IjogIiZndDsiLAotICAgICAgICAgICAgICAgICciJzogIiZxdW90OyIsCi0gICAgICAgICAg
ICAgICAgIiciOiAiJiN4Mjc7IiwKLSAgICAgICAgICAgICAgICAiYCI6ICImI3g2MDsiCi0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKGNocikg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlc2NhcGVbY2hyXSB8fCAiJmFtcDsiOwotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgdmFyIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7Ci0K
LSAgICAgICAgICAgIGlmICghUE9TU0lCTEVfQ0hBUlNfUkVHRVhQLnRlc3Qoc3RyaW5nKSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoQkFEX0NIQVJTX1JFR0VYUCwgZXNjYXBlQ2hhcik7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBJRSA2LzcgaGF2ZSBidWdzIGFyb3VuZCBzZXR0aW5nIG5h
bWVzIG9uIGlucHV0cyBkdXJpbmcgY3JlYXRpb24uCi0gICAgICAgIC8vIEZyb20gaHR0cDovL21z
ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM2Mzg5KHY9dnMuODUpLmFzcHg6
Ci0gICAgICAgIC8vICJUbyBpbmNsdWRlIHRoZSBOQU1FIGF0dHJpYnV0ZSBhdCBydW4gdGltZSBv
biBvYmplY3RzIGNyZWF0ZWQgd2l0aCB0aGUgY3JlYXRlRWxlbWVudCBtZXRob2QsIHVzZSB0aGUg
ZVRhZy4iCi0gICAgICAgIHZhciBjYW5TZXROYW1lT25JbnB1dHMgPSAoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCi0gICAg
ICAgICAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0KLSAgICAgICAg
ICAgIGVsLnNldEF0dHJpYnV0ZSgnbmFtZScsICdmb28nKTsKLSAgICAgICAgICAgIGRpdi5hcHBl
bmRDaGlsZChlbCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAhIWRpdi5pbm5lckhUTUwubWF0Y2go
J2ZvbycpOwotICAgICAgICB9KSgpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgRW1i
ZXIuUmVuZGVyQnVmZmVyYCBnYXRoZXJzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgdmlldyBh
bmQgZ2VuZXJhdGVzIHRoZQotICAgICAgICAgICAgICBmaW5hbCByZXByZXNlbnRhdGlvbi4gYEVt
YmVyLlJlbmRlckJ1ZmZlcmAgd2lsbCBnZW5lcmF0ZSBIVE1MIHdoaWNoIGNhbiBiZSBwdXNoZWQK
LSAgICAgICAgICAgICAgdG8gdGhlIERPTS4KLQotICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IEVtYmVyLlJlbmRlckJ1ZmZlcignZGl2Jyk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBjbGFzcyBSZW5kZXJCdWZmZXIK
LSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAY29uc3RydWN0
b3IKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHRhZ05hbWUgdGFnIG5hbWUgKHN1Y2gg
YXMgJ2Rpdicgb3IgJ3AnKSB1c2VkIGZvciB0aGUgYnVmZmVyCi0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gUmVuZGVyQnVmZmVyKHRhZ05h
bWUpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgX1JlbmRlckJ1ZmZlcih0YWdOYW1lKTsgLy8g
anNoaW50IGlnbm9yZTpsaW5lCi0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBfUmVuZGVy
QnVmZmVyKHRhZ05hbWUpIHsKLSAgICAgICAgICAgIHRoaXMudGFnTmFtZXMgPSBbdGFnTmFtZSB8
fCBudWxsXTsKLSAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gIiI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBfUmVuZGVyQnVmZmVyLnByb3RvdHlwZSA9IHsKLQotICAgICAgICAgICAgLy8gVGhlIHJv
b3QgdmlldydzIGVsZW1lbnQKLSAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLAotCi0gICAgICAg
ICAgICBfaGFzRWxlbWVudDogdHJ1ZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEFuIGludGVybmFsIHNldCB1c2VkIHRvIGRlLWR1cGUgY2xhc3MgbmFtZXMgd2hlbiBg
YWRkQ2xhc3MoKWAgaXMKLSAgICAgICAgICAgICAgICAgICAgdXNlZC4gQWZ0ZXIgZWFjaCBjYWxs
IHRvIGBhZGRDbGFzcygpYCwgdGhlIGBjbGFzc2VzYCBwcm9wZXJ0eQotICAgICAgICAgICAgICAg
ICAgICB3aWxsIGJlIHVwZGF0ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGVsZW1lbnRDbGFzc2VzCi0gICAgICAgICAgICAg
ICAgICAgIEB0eXBlIEFycmF5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbGVtZW50Q2xhc3NlczogbnVsbCwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFycmF5IG9mIGNsYXNzIG5hbWVz
IHdoaWNoIHdpbGwgYmUgYXBwbGllZCBpbiB0aGUgY2xhc3MgYXR0cmlidXRlLgotCi0gICAgICAg
ICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGBzZXRDbGFzc2VzKClgIHRvIHNldCB0aGlzIHByb3Bl
cnR5IGRpcmVjdGx5LiBJZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgdXNlIGBhZGRDbGFzcygp
YCwgaXQgd2lsbCBiZSBtYWludGFpbmVkIGZvciB5b3UuCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByb3BlcnR5IGNsYXNzZXMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQXJyYXkKLSAgICAg
ICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGNsYXNzZXM6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBUaGUgaWQgaW4gb2YgdGhlIGVsZW1lbnQsIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGlkIGF0
dHJpYnV0ZS4KLQotICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBzZXQgdGhpcyBw
cm9wZXJ0eSB5b3Vyc2VsZiwgcmF0aGVyLCB5b3Ugc2hvdWxkIHVzZQotICAgICAgICAgICAgICAg
ICAgICB0aGUgYGlkKClgIG1ldGhvZCBvZiBgRW1iZXIuUmVuZGVyQnVmZmVyYC4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgZWxlbWVudElkCi0gICAgICAgICAgICAgICAgICAgIEB0
eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgZWxlbWVudElkOiBudWxsLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQSBoYXNoIGtleWVkIG9uIHRoZSBuYW1lIG9mIHRoZSBh
dHRyaWJ1dGUgYW5kIHdob3NlIHZhbHVlIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgYXBw
bGllZCB0byB0aGF0IGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8gYXBw
bHkgYQotICAgICAgICAgICAgICAgICAgICBgZGF0YS12aWV3PSJGb28uYmFyImAgcHJvcGVydHkg
dG8gYW4gZWxlbWVudCwgeW91IHdvdWxkIHNldCB0aGUKLSAgICAgICAgICAgICAgICAgICAgZWxl
bWVudEF0dHJpYnV0ZXMgaGFzaCB0byBgeydkYXRhLXZpZXcnOidGb28uYmFyJ31gLgotCi0gICAg
ICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IG1haW50YWluIHRoaXMgaGFzaCB5b3Vyc2Vs
ZiwgcmF0aGVyLCB5b3Ugc2hvdWxkIHVzZQotICAgICAgICAgICAgICAgICAgICB0aGUgYGF0dHIo
KWAgbWV0aG9kIG9mIGBFbWJlci5SZW5kZXJCdWZmZXJgLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBlbGVtZW50QXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBI
YXNoCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHt9Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZWxlbWVudEF0dHJpYnV0ZXM6IG51bGwsCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBBIGhhc2gga2V5ZWQgb24gdGhlIG5hbWUgb2YgdGhlIHBy
b3BlcnRpZXMgYW5kIHdob3NlIHZhbHVlIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgYXBw
bGllZCB0byB0aGF0IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byBhcHBs
eSBhCi0gICAgICAgICAgICAgICAgICAgIGBjaGVja2VkPXRydWVgIHByb3BlcnR5IHRvIGFuIGVs
ZW1lbnQsIHlvdSB3b3VsZCBzZXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRQcm9w
ZXJ0aWVzIGhhc2ggdG8gYHsnY2hlY2tlZCc6dHJ1ZX1gLgotCi0gICAgICAgICAgICAgICAgICAg
IFlvdSBzaG91bGQgbm90IG1haW50YWluIHRoaXMgaGFzaCB5b3Vyc2VsZiwgcmF0aGVyLCB5b3Ug
c2hvdWxkIHVzZQotICAgICAgICAgICAgICAgICAgICB0aGUgYHByb3AoKWAgbWV0aG9kIG9mIGBF
bWJlci5SZW5kZXJCdWZmZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBlbGVt
ZW50UHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBIYXNoCi0gICAgICAgICAg
ICAgICAgICAgIEBkZWZhdWx0IHt9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ZWxlbWVudFByb3BlcnRpZXM6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBUaGUgdGFnbmFtZSBvZiB0aGUgZWxlbWVudCBhbiBpbnN0YW5jZSBvZiBgRW1iZXIu
UmVuZGVyQnVmZmVyYCByZXByZXNlbnRzLgotCi0gICAgICAgICAgICAgICAgICAgIFVzdWFsbHks
IHRoaXMgZ2V0cyBzZXQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byBgRW1iZXIuUmVuZGVyQnVm
ZmVyYC4gRm9yCi0gICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8g
Y3JlYXRlIGEgYHBgIHRhZywgdGhlbiB5b3Ugd291bGQgY2FsbAotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuUmVuZGVyQnVmZmVy
KCdwJykKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
b3BlcnR5IGVsZW1lbnRUYWcKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBlbGVtZW50VGFnOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQSBoYXNoIGtleWVkIG9uIHRoZSBuYW1lIG9mIHRoZSBzdHlsZSBhdHRyaWJ1dGUg
YW5kIHdob3NlIHZhbHVlIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0byB0
aGF0IGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8gYXBwbHkgYQotICAg
ICAgICAgICAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjpibGFjaztgIHN0eWxlIHRvIGFuIGVs
ZW1lbnQsIHlvdSB3b3VsZCBzZXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHls
ZSBoYXNoIHRvIGB7J2JhY2tncm91bmQtY29sb3InOidibGFjayd9YC4KLQotICAgICAgICAgICAg
ICAgICAgICBZb3Ugc2hvdWxkIG5vdCBtYWludGFpbiB0aGlzIGhhc2ggeW91cnNlbGYsIHJhdGhl
ciwgeW91IHNob3VsZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgdGhlIGBzdHlsZSgpYCBtZXRo
b2Qgb2YgYEVtYmVyLlJlbmRlckJ1ZmZlcmAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IGVsZW1lbnRTdHlsZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBIYXNoCi0gICAgICAg
ICAgICAgICAgICAgIEBkZWZhdWx0IHt9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZWxlbWVudFN0eWxlOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgQWRkcyBhIHN0cmluZyBvZiBIVE1MIHRvIHRoZSBgUmVuZGVyQnVmZmVyYC4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHB1c2gKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IHN0cmluZyBIVE1MIHRvIHB1c2ggaW50byB0aGUgYnVmZmVyCi0gICAgICAgICAg
ICAgICAgICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBw
dXNoOiBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciArPSBz
dHJpbmc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyBhIGNsYXNzIHRvIHRoZSBi
dWZmZXIsIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgdG8gdGhlIGNsYXNzIGF0dHJpYnV0ZS4KLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZENsYXNzCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byBhZGQgdG8gdGhlIGJ1ZmZl
cgotICAgICAgICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgewotICAgICAgICAgICAg
ICAgIC8vIGxhemlseSBjcmVhdGUgZWxlbWVudENsYXNzZXMKLSAgICAgICAgICAgICAgICB0aGlz
LmVsZW1lbnRDbGFzc2VzID0gKHRoaXMuZWxlbWVudENsYXNzZXMgfHwgbmV3IENsYXNzU2V0KCkp
OwotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudENsYXNzZXMuYWRkKGNsYXNzTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5jbGFzc2VzID0gdGhpcy5lbGVtZW50Q2xhc3Nlcy5saXN0Owot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBzZXRDbGFzc2VzOiBmdW5jdGlvbihjbGFzc05hbWVzKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5lbGVtZW50Q2xhc3NlcyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNs
YXNzTmFtZXMubGVuZ3RoLCBpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47
IGkrKykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENsYXNzKGNsYXNzTmFtZXNbaV0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBlbGVtZW50SUQgdG8gYmUgdXNlZCBmb3IgdGhl
IGVsZW1lbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpZAotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gaWQKLSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJs
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlkOiBmdW5jdGlvbihpZCkgewot
ICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gaWQ7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBkdWNrIHR5cGUgYXR0
cmlidXRlIGZ1bmN0aW9uYWxpdHkgbGlrZSBqUXVlcnkgc28gYSByZW5kZXIgYnVmZmVyCi0gICAg
ICAgICAgICAvLyBjYW4gYmUgdXNlZCBsaWtlIGEgalF1ZXJ5IG9iamVjdCBpbiBhdHRyaWJ1dGUg
YmluZGluZyBzY2VuYXJpb3MuCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBZGRzIGFuIGF0dHJpYnV0ZSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIHRvIHRoZSBlbGVtZW50
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYXR0cgotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIHRvIHRo
ZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJsZQotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5SZW5kZXJCdWZmZXJ8U3RyaW5nfSB0aGlzIG9yIHRoZSBj
dXJyZW50IGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGF0dHI6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZXMgPSB0aGlzLmVsZW1lbnRBdHRyaWJ1dGVzID0gKHRoaXMuZWxlbWVudEF0dHJpYnV0ZXMg
fHwge30pOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNbbmFtZV07Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IHZh
bHVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJl
bW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHJlbmRlci4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUF0dHIKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotICAg
ICAgICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBh
dHRyaWJ1dGVzID0gdGhpcy5lbGVtZW50QXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcykgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlc1tuYW1l
XTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBZGRz
IGEgcHJvcGVydHkgd2hpY2ggd2lsbCBiZSByZW5kZXJlZCB0byB0aGUgZWxlbWVudC4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHByb3AKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIHRvIHRoZSBwcm9wZXJ0
eQotICAgICAgICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge0VtYmVyLlJlbmRlckJ1ZmZlcnxTdHJpbmd9IHRoaXMgb3IgdGhlIGN1cnJlbnQgcHJv
cGVydHkgdmFsdWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm9wOiBmdW5j
dGlvbihuYW1lLCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhp
cy5lbGVtZW50UHJvcGVydGllcyA9ICh0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzIHx8IHt9KTsKLQot
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW25hbWVdOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSB2YWx1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZW1vdmUgYW4gcHJv
cGVydHkgZnJvbSB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHJlbmRlci4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHJlbW92ZVByb3AKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAg
ICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVQ
cm9wOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0
aGlzLmVsZW1lbnRQcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wZXJ0aWVzW25hbWVdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFkZHMgYSBzdHlsZSB0byB0
aGUgc3R5bGUgYXR0cmlidXRlIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgdG8gdGhlIGVsZW1lbnQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzdHlsZQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBzdHlsZQotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJs
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN0eWxlOiBmdW5jdGlvbihuYW1l
LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFN0eWxlID0gKHRoaXMuZWxl
bWVudFN0eWxlIHx8IHt9KTsKLQotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFN0eWxlW25h
bWVdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBiZWdpbjogZnVuY3Rpb24odGFnTmFtZSkgewotICAgICAgICAgICAg
ICAgIHRoaXMudGFnTmFtZXMucHVzaCh0YWdOYW1lIHx8IG51bGwpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHVzaE9wZW5pbmdU
YWc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gdGhpcy5jdXJy
ZW50VGFnTmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghdGFnTmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2hhc0VsZW1lbnQgJiYgIXRoaXMuX2VsZW1lbnQgJiYgdGhpcy5idWZmZXIubGVu
Z3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSB0aGlzLmdl
bmVyYXRlRWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyLAotICAg
ICAgICAgICAgICAgIGlkID0gdGhpcy5lbGVtZW50SWQsCi0gICAgICAgICAgICAgICAgY2xhc3Nl
cyA9IHRoaXMuY2xhc3NlcywKLSAgICAgICAgICAgICAgICBhdHRycyA9IHRoaXMuZWxlbWVudEF0
dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgcHJvcHMgPSB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVz
LAotICAgICAgICAgICAgICAgIHN0eWxlID0gdGhpcy5lbGVtZW50U3R5bGUsCi0gICAgICAgICAg
ICAgICAgYXR0ciwgcHJvcDsKLQotICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAnPCcgKyBzdHJp
cFRhZ05hbWUodGFnTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyICs9ICcgaWQ9IicgKyBlc2NhcGVBdHRyaWJ1dGUoaWQpICsgJyIn
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlciArPSAnIGNsYXNzPSInICsgZXNjYXBlQXR0cmlidXRlKGNsYXNzZXMuam9pbign
ICcpKSArICciJzsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc2VzID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Q2xhc3NlcyA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlciArPSAnIHN0eWxlPSInOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAocHJv
cCBpbiBzdHlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLmhhc093blBy
b3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHBy
b3AgKyAnOicgKyBlc2NhcGVBdHRyaWJ1dGUoc3R5bGVbcHJvcF0pICsgJzsnOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyICs9ICciJzsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRT
dHlsZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF0
dHJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXR0ciBpbiBhdHRycykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KGF0dHIpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICcgJyArIGF0dHIgKyAnPSInICsgZXNj
YXBlQXR0cmlidXRlKGF0dHJzW2F0dHJdKSArICciJzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxl
bWVudEF0dHJpYnV0ZXMgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChwcm9wcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHByb3AgaW4gcHJvcHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9w
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BzW3Byb3Bd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSB8fCB0eXBlb2YodmFsdWUp
ID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
dWUgPT09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ciArPSAnICcgKyBwcm9wICsgJz0iJyArIHByb3AgKyAnIic7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gJyAnICsgcHJvcCArICc9IicgKyBlc2NhcGVBdHRyaWJ1dGUocHJvcHNbcHJv
cF0pICsgJyInOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UHJvcGVydGll
cyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnVmZmVyICs9
ICc+JzsKLSAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHB1c2hDbG9zaW5nVGFnOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgdGFnTmFtZSA9IHRoaXMudGFnTmFtZXMucG9wKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRhZ05hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgKz0gJzwv
JyArIHN0cmlwVGFnTmFtZSh0YWdOYW1lKSArICc+JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBjdXJyZW50VGFnTmFtZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFnTmFtZXNbdGhpcy50YWdOYW1lcy5sZW5ndGgt
MV07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBnZW5lcmF0ZUVsZW1lbnQ6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gdGhpcy50YWdOYW1lcy5wb3Ao
KSwgLy8gcG9wIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gY2xvc2UKLSAgICAgICAgICAgICAgICBp
ZCA9IHRoaXMuZWxlbWVudElkLAotICAgICAgICAgICAgICAgIGNsYXNzZXMgPSB0aGlzLmNsYXNz
ZXMsCi0gICAgICAgICAgICAgICAgYXR0cnMgPSB0aGlzLmVsZW1lbnRBdHRyaWJ1dGVzLAotICAg
ICAgICAgICAgICAgIHByb3BzID0gdGhpcy5lbGVtZW50UHJvcGVydGllcywKLSAgICAgICAgICAg
ICAgICBzdHlsZSA9IHRoaXMuZWxlbWVudFN0eWxlLAotICAgICAgICAgICAgICAgIHN0eWxlQnVm
ZmVyID0gJycsIGF0dHIsIHByb3AsIHRhZ1N0cmluZzsKLQotICAgICAgICAgICAgICAgIGlmIChh
dHRycyAmJiBhdHRycy5uYW1lICYmICFjYW5TZXROYW1lT25JbnB1dHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSUUgYWxsb3dzIHBhc3NpbmcgYSB0YWcgdG8gY3JlYXRlRWxlbWVudC4gU2Vl
IG5vdGUgb24gYGNhblNldE5hbWVPbklucHV0c2AgYWJvdmUgYXMgd2VsbC4KLSAgICAgICAgICAg
ICAgICAgICAgdGFnU3RyaW5nID0gJzwnICsgc3RyaXBUYWdOYW1lKHRhZ05hbWUpICsgJyBuYW1l
PSInICsgZXNjYXBlQXR0cmlidXRlKGF0dHJzLm5hbWUpICsgJyI+JzsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0YWdTdHJpbmcgPSB0YWdOYW1lOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCh0YWdTdHJpbmcpLAotICAgICAgICAgICAgICAgICRlbGVtZW50ID0galF1
ZXJ5KGVsZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICRlbGVtZW50LmF0dHIoJ2lkJywgaWQpOwotICAgICAgICAgICAgICAgICAgICB0aGlz
LmVsZW1lbnRJZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChjbGFzc2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmF0dHIoJ2NsYXNzJywg
Y2xhc3Nlcy5qb2luKCcgJykpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNsYXNzZXMgPSBu
dWxsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRDbGFzc2VzID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChwcm9wIGluIHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZUJ1ZmZlciArPSAocHJvcCArICc6JyArIHN0eWxlW3Byb3BdICsgJzsnKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICRlbGVtZW50LmF0dHIoJ3N0eWxlJywgc3R5bGVCdWZmZXIpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFN0eWxlID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdHRyIGluIGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0
cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
ZWxlbWVudC5hdHRyKGF0dHIsIGF0dHJzW2F0dHJdKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxl
bWVudEF0dHJpYnV0ZXMgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChwcm9wcykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHByb3AgaW4gcHJvcHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9w
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnByb3AocHJvcCwgcHJv
cHNbcHJvcF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UHJvcGVydGllcyA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRo
ZSBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdlbmVyYXRlZCBIVE1MCi0gICAgICAgICAg
ICAgICAgICAgICAgb2YgdGhpcyBidWZmZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBlbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHRo
aXMuaW5uZXJTdHJpbmcoKTsKLQotICAgICAgICAgICAgICAgIGlmIChodG1sKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBzZXRJbm5lckhUTUwodGhpcy5fZWxlbWVudCwg
aHRtbCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2VsZW1lbnQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVzIHRoZSBIVE1MIGNvbnRlbnQgZm9yIHRoaXMgYnVmZmVyLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge1N0cmluZ30gVGhlIGdlbmVyYXRlZCBIVE1MCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgc3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5faGFzRWxlbWVudCAmJiB0aGlzLl9lbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEZpcmVmb3ggdmVyc2lvbnMgPCAxMSBkbyBub3QgaGF2ZSBzdXBwb3J0IGZvciBlbGVtZW50Lm91
dGVySFRNTC4KLSAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNFbGVtZW50ID0gdGhpcy5lbGVt
ZW50KCksIG91dGVySFRNTCA9IHRoaXNFbGVtZW50Lm91dGVySFRNTDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBvdXRlckhUTUwgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCc8ZGl2Lz4nKS5hcHBlbmQodGhpc0VsZW1lbnQp
Lmh0bWwoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb3V0ZXJIVE1MOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmlubmVyU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgaW5uZXJTdHJpbmc6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kx
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyogZ2xv
YmFscyBYTUxTZXJpYWxpemVyICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci12
aWV3cwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKiBCRUdJTiBNRVRBTU9SUEggSEVMUEVS
UyAqLwotCi0gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIHByaW9yIHRvIDkgZG9lcyBub3Qg
YWxsb3cgc2V0dGluZyBpbm5lckhUTUwgaWYgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgICAgLy8g
aXMgYSAiemVyby1zY29wZSIgZWxlbWVudC4gVGhpcyBwcm9ibGVtIGNhbiBiZSB3b3JrZWQgYXJv
dW5kIGJ5IG1ha2luZwotICAgICAgICAvLyB0aGUgZmlyc3Qgbm9kZSBhbiBpbnZpc2libGUgdGV4
dCBub2RlLiBXZSwgbGlrZSBNb2Rlcm5penIsIHVzZSAmc2h5OwotCi0gICAgICAgIHZhciBuZWVk
c1NoeSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgdmFyIHRlc3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwot
ICAgICAgICAgICAgdGVzdEVsLmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7Ci0gICAgICAgICAg
ICB0ZXN0RWwuZmlyc3RDaGlsZC5pbm5lckhUTUwgPSAiPHNjcmlwdD48L3NjcmlwdD4iOwotICAg
ICAgICAgICAgcmV0dXJuIHRlc3RFbC5maXJzdENoaWxkLmlubmVySFRNTCA9PT0gJyc7Ci0gICAg
ICAgIH0pKCk7Ci0KLSAgICAgICAgLy8gSUUgOCAoYW5kIGxpa2VseSBlYXJsaWVyKSBsaWtlcyB0
byBtb3ZlIHdoaXRlc3BhY2UgcHJlY2VlZGluZwotICAgICAgICAvLyBhIHNjcmlwdCB0YWcgdG8g
YXBwZWFyIGFmdGVyIGl0LiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuCi0gICAgICAgIC8vIGFjY2lk
ZW50YWxseSByZW1vdmUgd2hpdGVzcGFjZSB3aGVuIHVwZGF0aW5nIGEgbW9ycGguCi0gICAgICAg
IHZhciBtb3Zlc1doaXRlc3BhY2UgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYm
IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKLSAgICAgICAgICAgIHRlc3RFbC5pbm5lckhUTUwgPSAiVGVzdDogPHNj
cmlwdCB0eXBlPSd0ZXh0L3gtcGxhY2Vob2xkZXInPjwvc2NyaXB0PlZhbHVlIjsKLSAgICAgICAg
ICAgIHJldHVybiB0ZXN0RWwuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUgPT09ICdUZXN0OicgJiYK
LSAgICAgICAgICAgIHRlc3RFbC5jaGlsZE5vZGVzWzJdLm5vZGVWYWx1ZSA9PT0gJyBWYWx1ZSc7
Ci0gICAgICAgIH0pKCk7Ci0KLSAgICAgICAgLy8gVXNlIHRoaXMgdG8gZmluZCBjaGlsZHJlbiBi
eSBJRCBpbnN0ZWFkIG9mIHVzaW5nIGpRdWVyeQotICAgICAgICB2YXIgZmluZENoaWxkQnlJZCA9
IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRy
aWJ1dGUoJ2lkJykgPT09IGlkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBsZW4gPSBlbGVtZW50LmNoaWxkTm9kZXMu
bGVuZ3RoLCBpZHgsIG5vZGUsIGZvdW5kOwotICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHgg
PCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rl
c1tpZHhdOwotICAgICAgICAgICAgICAgIGZvdW5kID0gbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBm
aW5kQ2hpbGRCeUlkKG5vZGUsIGlkKTsKLSAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgc2V0SW5uZXJIVE1MV2l0aG91dEZp
eCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGh0bWwpIHsKLSAgICAgICAgICAgIGlmIChuZWVkc1NoeSkg
ewotICAgICAgICAgICAgICAgIGh0bWwgPSAnJnNoeTsnICsgaHRtbDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBbXTsKLSAgICAgICAgICAgIGlmIChtb3Zlc1do
aXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBSaWdodCBub3cgd2Ugb25seSBjaGVjayBm
b3Igc2NyaXB0IHRhZ3Mgd2l0aCBpZHMgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAvLyBnb2Fs
IG9mIHRhcmdldGluZyBtb3JwaHMuCi0gICAgICAgICAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFj
ZSgvKFxzKykoPHNjcmlwdCBpZD0nKFteJ10rKScpL2csIGZ1bmN0aW9uKG1hdGNoLCBzcGFjZXMs
IHRhZywgaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKFtpZCwgc3BhY2Vz
XSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWc7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDsK
LQotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0byBkbyBhbnkgd2hpdGVzcGFjZSBhZGp1c3Rt
ZW50cyBkbyB0aGVtIG5vdwotICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewot
ICAgICAgICAgICAgICAgIHZhciBsZW4gPSBtYXRjaGVzLmxlbmd0aCwgaWR4OwotICAgICAgICAg
ICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgc2NyaXB0ID0gZmluZENoaWxkQnlJZChlbGVtZW50LCBtYXRjaGVzW2lkeF1bMF0p
LAotICAgICAgICAgICAgICAgICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWF0
Y2hlc1tpZHhdWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUuaW5z
ZXJ0QmVmb3JlKG5vZGUsIHNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobmVlZHNTaHkpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2h5
RWxlbWVudCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoc2h5
RWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAhc2h5RWxlbWVudC5ub2RlTmFtZSkgewotICAgICAg
ICAgICAgICAgICAgICBzaHlFbGVtZW50ID0gc2h5RWxlbWVudC5maXJzdENoaWxkOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc2h5RWxlbWVudC5ub2RlVHlwZSA9PT0g
MyAmJiBzaHlFbGVtZW50Lm5vZGVWYWx1ZS5jaGFyQXQoMCkgPT09ICJcdTAwQUQiKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNoeUVsZW1lbnQubm9kZVZhbHVlID0gc2h5RWxlbWVudC5ub2RlVmFs
dWUuc2xpY2UoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
OwotCi0gICAgICAgIC8qIEVORCBNRVRBTU9SUEggSEVMUEVSUyAqLwotCi0KLSAgICAgICAgdmFy
IGlubmVySFRNTFRhZ3MgPSB7fTsKLSAgICAgICAgdmFyIGNhblNldElubmVySFRNTCA9IGZ1bmN0
aW9uKHRhZ05hbWUpIHsKLSAgICAgICAgICAgIGlmIChpbm5lckhUTUxUYWdzW3RhZ05hbWVdICE9
PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXJIVE1MVGFnc1t0YWdO
YW1lXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhblNldCA9IHRydWU7Ci0K
LSAgICAgICAgICAgIC8vIElFIDggYW5kIGVhcmxpZXIgZG9uJ3QgYWxsb3cgdXMgdG8gZG8gaW5u
ZXJIVE1MIG9uIHNlbGVjdAotICAgICAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9
PT0gJ3NlbGVjdCcpIHsKLSAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzZWxlY3QnKTsKLSAgICAgICAgICAgICAgICBzZXRJbm5lckhUTUxXaXRob3V0Rml4
KGVsLCAnPG9wdGlvbiB2YWx1ZT0idGVzdCI+VGVzdDwvb3B0aW9uPicpOwotICAgICAgICAgICAg
ICAgIGNhblNldCA9IGVsLm9wdGlvbnMubGVuZ3RoID09PSAxOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpbm5lckhUTUxUYWdzW3RhZ05hbWVdID0gY2FuU2V0OwotCi0gICAgICAgICAg
ICByZXR1cm4gY2FuU2V0OwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIHNldElubmVy
SFRNTChlbGVtZW50LCBodG1sKSB7Ci0gICAgICAgICAgICB2YXIgdGFnTmFtZSA9IGVsZW1lbnQu
dGFnTmFtZTsKLQotICAgICAgICAgICAgaWYgKGNhblNldElubmVySFRNTCh0YWdOYW1lKSkgewot
ICAgICAgICAgICAgICAgIHNldElubmVySFRNTFdpdGhvdXRGaXgoZWxlbWVudCwgaHRtbCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggdmVyc2lvbnMg
PCAxMSBkbyBub3QgaGF2ZSBzdXBwb3J0IGZvciBlbGVtZW50Lm91dGVySFRNTC4KLSAgICAgICAg
ICAgICAgICB2YXIgb3V0ZXJIVE1MID0gZWxlbWVudC5vdXRlckhUTUwgfHwgbmV3IFhNTFNlcmlh
bGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoIkNhbid0IHNldCBpbm5lckhUTUwgb24gIiArIGVsZW1lbnQudGFnTmFtZSArICIg
aW4gdGhpcyBicm93c2VyIiwgb3V0ZXJIVE1MKTsKLQotICAgICAgICAgICAgICAgIHZhciBzdGFy
dFRhZyA9IG91dGVySFRNTC5tYXRjaChuZXcgUmVnRXhwKCI8IiArIHRhZ05hbWUgKyAiKFtePl0q
KT4iLCAnaScpKVswXSwKLSAgICAgICAgICAgICAgICBlbmRUYWcgPSAnPC8nICsgdGFnTmFtZSAr
ICc+JzsKLQotICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICAgICAgc2V0SW5uZXJIVE1MV2l0aG91dEZpeCh3cmFw
cGVyLCBzdGFydFRhZyArIGh0bWwgKyBlbmRUYWcpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSB3cmFwcGVyLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQudGFn
TmFtZSAhPT0gdGFnTmFtZSkgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVu
dC5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18u
c2V0SW5uZXJIVE1MID0gc2V0SW5uZXJIVE1MOwotICAgICAgICBmdW5jdGlvbiBpc1NpbXBsZUNs
aWNrKGV2ZW50KSB7Ci0gICAgICAgICAgICB2YXIgbW9kaWZpZXIgPSBldmVudC5zaGlmdEtleSB8
fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5LAotICAgICAg
ICAgICAgc2Vjb25kYXJ5Q2xpY2sgPSBldmVudC53aGljaCA+IDE7IC8vIElFOSBtYXkgcmV0dXJu
IHVuZGVmaW5lZAotCi0gICAgICAgICAgICByZXR1cm4gIW1vZGlmaWVyICYmICFzZWNvbmRhcnlD
bGljazsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmlzU2ltcGxlQ2xpY2sgPSBp
c1NpbXBsZUNsaWNrOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3MvY29s
bGVjdGlvbl92aWV3IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcGxh
dGZvcm0iLCAiZW1iZXItbWV0YWwvYmluZGluZyIsICJlbWJlci1tZXRhbC9tZXJnZSIsICJlbWJl
ci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci12aWV3cy92aWV3cy9jb250YWluZXJfdmll
dyIsICJlbWJlci12aWV3cy92aWV3cy9jb3JlX3ZpZXciLCAiZW1iZXItdmlld3Mvdmlld3Mvdmll
dyIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsICJl
eHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVw
ZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5j
eTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci12
aWV3cwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0gICAgICAgIHZhciBjcmVh
dGUgPSBfX2RlcGVuZGVuY3kyX18uY3JlYXRlOwotICAgICAgICB2YXIgaXNHbG9iYWxQYXRoID0g
X19kZXBlbmRlbmN5M19fLmlzR2xvYmFsUGF0aDsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBl
bmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k1X18u
Z2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Nl9fLnNldDsKLSAgICAgICAgdmFy
IGZtdCA9IF9fZGVwZW5kZW5jeTdfXy5mbXQ7Ci0gICAgICAgIHZhciBDb250YWluZXJWaWV3ID0g
X19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb3JlVmlldyA9IF9fZGVw
ZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeTEw
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5MTFfXy5v
YnNlcnZlcjsKLSAgICAgICAgdmFyIGJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTFfXy5i
ZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIEVtYmVyQXJyYXkgPSBfX2RlcGVuZGVuY3kxMl9f
WyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5Db2xsZWN0
aW9uVmlld2AgaXMgYW4gYEVtYmVyLlZpZXdgIGRlc2NlbmRlbnQgcmVzcG9uc2libGUgZm9yIG1h
bmFnaW5nCi0gICAgICAgICAgICAgIGEgY29sbGVjdGlvbiAoYW4gYXJyYXkgb3IgYXJyYXktbGlr
ZSBvYmplY3QpIGJ5IG1haW50YWluaW5nIGEgY2hpbGQgdmlldyBvYmplY3QKLSAgICAgICAgICAg
ICAgYW5kIGFzc29jaWF0ZWQgRE9NIHJlcHJlc2VudGF0aW9uIGZvciBlYWNoIGl0ZW0gaW4gdGhl
IGFycmF5IGFuZCBlbnN1cmluZwotICAgICAgICAgICAgICB0aGF0IGNoaWxkIHZpZXdzIGFuZCB0
aGVpciBhc3NvY2lhdGVkIHJlbmRlcmVkIEhUTUwgYXJlIHVwZGF0ZWQgd2hlbiBpdGVtcyBpbgot
ICAgICAgICAgICAgICB0aGUgYXJyYXkgYXJlIGFkZGVkLCByZW1vdmVkLCBvciByZXBsYWNlZC4K
LQotICAgICAgICAgICAgICAjIyBTZXR0aW5nIGNvbnRlbnQKLQotICAgICAgICAgICAgICBUaGUg
bWFuYWdlZCBjb2xsZWN0aW9uIG9mIG9iamVjdHMgaXMgcmVmZXJlbmNlZCBhcyB0aGUgYEVtYmVy
LkNvbGxlY3Rpb25WaWV3YAotICAgICAgICAgICAgICBpbnN0YW5jZSdzIGBjb250ZW50YCBwcm9w
ZXJ0eS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHNvbWVJ
dGVtc1ZpZXcgPSBFbWJlci5Db2xsZWN0aW9uVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAg
IGNvbnRlbnQ6IFsnQScsICdCJywnQyddCi0gICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFRoZSB2aWV3IGZvciBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxl
Y3Rpb24gd2lsbCBoYXZlIGl0cyBgY29udGVudGAgcHJvcGVydHkgc2V0Ci0gICAgICAgICAgICAg
IHRvIHRoZSBpdGVtLgotCi0gICAgICAgICAgICAgICMjIFNwZWNpZnlpbmcgaXRlbVZpZXdDbGFz
cwotCi0gICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhlIHZpZXcgY2xhc3MgZm9yIGVhY2ggaXRl
bSBpbiB0aGUgbWFuYWdlZCBjb2xsZWN0aW9uIHdpbGwgYmUgYW4KLSAgICAgICAgICAgICAgaW5z
dGFuY2Ugb2YgYEVtYmVyLlZpZXdgLiBZb3UgY2FuIHN1cHBseSBhIGRpZmZlcmVudCBjbGFzcyBi
eSBzZXR0aW5nIHRoZQotICAgICAgICAgICAgICBgQ29sbGVjdGlvblZpZXdgJ3MgYGl0ZW1WaWV3
Q2xhc3NgIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgIEdpdmVuIGFuIGVtcHR5IGA8Ym9keT5g
IGFuZCB0aGUgZm9sbG93aW5nIGNvZGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBzb21lSXRlbXNWaWV3ID0gRW1iZXIuQ29sbGVjdGlvblZpZXcuY3JlYXRl
KHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2EtY29sbGVjdGlvbiddLAotICAgICAg
ICAgICAgICAgIGNvbnRlbnQ6IFsnQScsJ0InLCdDJ10sCi0gICAgICAgICAgICAgICAgaXRlbVZp
ZXdDbGFzczogRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6
IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgidGhlIGxldHRlcjoge3t2aWV3LmNvbnRlbnR9fSIp
Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
c29tZUl0ZW1zVmlldy5hcHBlbmRUbygnYm9keScpOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlCi0K
LSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12
aWV3IGEtY29sbGVjdGlvbiI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmll
dyI+dGhlIGxldHRlcjogQTwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVy
LXZpZXciPnRoZSBsZXR0ZXI6IEI8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJl
bWJlci12aWV3Ij50aGUgbGV0dGVyOiBDPC9kaXY+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBBdXRvbWF0aWMgbWF0Y2hpbmcgb2Yg
cGFyZW50L2NoaWxkIHRhZ05hbWVzCi0KLSAgICAgICAgICAgICAgU2V0dGluZyB0aGUgYHRhZ05h
bWVgIHByb3BlcnR5IG9mIGEgYENvbGxlY3Rpb25WaWV3YCB0byBhbnkgb2YKLSAgICAgICAgICAg
ICAgInVsIiwgIm9sIiwgInRhYmxlIiwgInRoZWFkIiwgInRib2R5IiwgInRmb290IiwgInRyIiwg
b3IgInNlbGVjdCIgd2lsbCByZXN1bHQKLSAgICAgICAgICAgICAgaW4gdGhlIGl0ZW0gdmlld3Mg
cmVjZWl2aW5nIGFuIGFwcHJvcHJpYXRlbHkgbWF0Y2hlZCBgdGFnTmFtZWAgcHJvcGVydHkuCi0K
LSAgICAgICAgICAgICAgR2l2ZW4gYW4gZW1wdHkgYDxib2R5PmAgYW5kIHRoZSBmb2xsb3dpbmcg
Y29kZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFuVW5v
cmRlcmVkTGlzdFZpZXcgPSBFbWJlci5Db2xsZWN0aW9uVmlldy5jcmVhdGUoewotICAgICAgICAg
ICAgICAgIHRhZ05hbWU6ICd1bCcsCi0gICAgICAgICAgICAgICAgY29udGVudDogWydBJywnQics
J0MnXSwKLSAgICAgICAgICAgICAgICBpdGVtVmlld0NsYXNzOiBFbWJlci5WaWV3LmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJ0
aGUgbGV0dGVyOiB7e3ZpZXcuY29udGVudH19IikKLSAgICAgICAgICAgICAgICB9KQotICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBhblVub3JkZXJlZExpc3RWaWV3LmFwcGVuZFRv
KCdib2R5Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0
IGluIHRoZSBmb2xsb3dpbmcgSFRNTCBzdHJ1Y3R1cmUKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDx1bCBjbGFzcz0iZW1iZXItdmlldyBhLWNvbGxlY3Rpb24iPgotICAg
ICAgICAgICAgICAgIDxsaSBjbGFzcz0iZW1iZXItdmlldyI+dGhlIGxldHRlcjogQTwvbGk+Ci0g
ICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJlbWJlci12aWV3Ij50aGUgbGV0dGVyOiBCPC9saT4K
LSAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImVtYmVyLXZpZXciPnRoZSBsZXR0ZXI6IEM8L2xp
PgotICAgICAgICAgICAgICA8L3VsPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBBZGRpdGlvbmFsIGB0YWdOYW1lYCBwYWlycyBjYW4gYmUgcHJvdmlkZWQgYnkgYWRkaW5nIHRv
Ci0gICAgICAgICAgICAgIGBFbWJlci5Db2xsZWN0aW9uVmlldy5DT05UQUlORVJfTUFQIGAKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkNvbGxlY3Rp
b25WaWV3LkNPTlRBSU5FUl9NQVBbJ2FydGljbGUnXSA9ICdzZWN0aW9uJwotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAjIyBQcm9ncmFtbWF0aWMgY3JlYXRpb24gb2YgY2hpbGQg
dmlld3MKLQotICAgICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgYWRkaXRpb25hbCBjdXN0b21p
emF0aW9uIGJleW9uZCB0aGUgdXNlIG9mIGEgc2luZ2xlCi0gICAgICAgICAgICAgIGBpdGVtVmll
d0NsYXNzYCBvciBgdGFnTmFtZWAgbWF0Y2hpbmcgaXMgcmVxdWlyZWQgQ29sbGVjdGlvblZpZXcn
cwotICAgICAgICAgICAgICBgY3JlYXRlQ2hpbGRWaWV3YCBtZXRob2QgY2FuIGJlIG92ZXJpZGRl
bjoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEN1c3RvbUNv
bGxlY3Rpb25WaWV3ID0gRW1iZXIuQ29sbGVjdGlvblZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVDaGlsZFZpZXc6IGZ1bmN0aW9uKHZpZXdDbGFzcywgYXR0cnMpIHsKLSAgICAg
ICAgICAgICAgICAgIGlmIChhdHRycy5jb250ZW50LmtpbmQgPT0gJ2FsYnVtJykgewotICAgICAg
ICAgICAgICAgICAgICB2aWV3Q2xhc3MgPSBBcHAuQWxidW1WaWV3OwotICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmlld0NsYXNzID0gQXBwLlNvbmdWaWV3
OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1
cGVyKHZpZXdDbGFzcywgYXR0cnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEVtcHR5IFZpZXcKLQot
ICAgICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gYEVtYmVyLlZpZXdgIHN1YmNsYXNzIHRv
IHRoZSBgRW1iZXIuQ29sbGVjdGlvblZpZXdgCi0gICAgICAgICAgICAgIGluc3RhbmNlIGFzIGl0
cyBgZW1wdHlWaWV3YCBwcm9wZXJ0eS4gSWYgdGhlIGBjb250ZW50YCBwcm9wZXJ0eSBvZiBhCi0g
ICAgICAgICAgICAgIGBDb2xsZWN0aW9uVmlld2AgaXMgc2V0IHRvIGBudWxsYCBvciBhbiBlbXB0
eSBhcnJheSwgYW4gaW5zdGFuY2Ugb2YgdGhpcyB2aWV3Ci0gICAgICAgICAgICAgIHdpbGwgYmUg
dGhlIGBDb2xsZWN0aW9uVmlld2BzIG9ubHkgY2hpbGQuCi0KLSAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICBhTGlzdFdpdGhOb3RoaW5nID0gRW1iZXIuQ29sbGVjdGlv
blZpZXcuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ25vdGhpbmcnXQot
ICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG51bGwsCi0gICAgICAgICAgICAgICAgZW1wdHlWaWV3
OiBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIu
SGFuZGxlYmFycy5jb21waWxlKCJUaGUgY29sbGVjdGlvbiBpcyBlbXB0eSIpCi0gICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgYUxpc3RXaXRoTm90
aGluZy5hcHBlbmRUbygnYm9keScpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlCi0KLSAgICAgICAg
ICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3IG5vdGhp
bmciPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAg
ICAgICAgICAgVGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkKLSAgICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICMjIEFkZGluZyBhbmQgUmVtb3ZpbmcgaXRlbXMKLQotICAgICAgICAgICAgICBUaGUgYGNoaWxk
Vmlld3NgIHByb3BlcnR5IG9mIGEgYENvbGxlY3Rpb25WaWV3YCBzaG91bGQgbm90IGJlIGRpcmVj
dGx5Ci0gICAgICAgICAgICAgIG1hbmlwdWxhdGVkLiBJbnN0ZWFkLCBhZGQsIHJlbW92ZSwgcmVw
bGFjZSBpdGVtcyBmcm9tIGl0cyBgY29udGVudGAgcHJvcGVydHkuCi0gICAgICAgICAgICAgIFRo
aXMgd2lsbCB0cmlnZ2VyIGFwcHJvcHJpYXRlIGNoYW5nZXMgdG8gaXRzIHJlbmRlcmVkIEhUTUwu
Ci0KLQotICAgICAgICAgICAgICBAY2xhc3MgQ29sbGVjdGlvblZpZXcKLSAgICAgICAgICAgICAg
QG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5Db250YWluZXJW
aWV3Ci0gICAgICAgICAgICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICAgICAgICAgICovCi0gICAg
ICAgIHZhciBDb2xsZWN0aW9uVmlldyA9IENvbnRhaW5lclZpZXcuZXh0ZW5kKHsKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpdGVtcyB0byBiZSBkaXNw
bGF5ZWQgYnkgdGhlIGBFbWJlci5Db2xsZWN0aW9uVmlld2AuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IGNvbnRlbnQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRW1iZXIuQXJy
YXkKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGNvbnRlbnQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBUaGlzIHByb3ZpZGVzIG1ldGFkYXRhIGFib3V0IHdoYXQga2luZCBvZiBl
bXB0eSB2aWV3IGNsYXNzIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbiB3b3Vs
ZCBsaWtlIGlmIGl0IGlzIGJlaW5nIGluc3RhbnRpYXRlZCBmcm9tIGFub3RoZXIKLSAgICAgICAg
ICAgICAgICAgICAgc3lzdGVtIChsaWtlIEhhbmRsZWJhcnMpCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGVtcHR5Vmlld0NsYXNz
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZW1wdHlWaWV3Q2xhc3M6IFZpZXcs
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBbiBvcHRpb25hbCB2aWV3
IHRvIGRpc3BsYXkgaWYgY29udGVudCBpcyBzZXQgdG8gYW4gZW1wdHkgYXJyYXkuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IGVtcHR5VmlldwotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbXB0eVZpZXc6IG51bGwsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgaXRlbVZpZXdDbGFzcwotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAgICAgIEBk
ZWZhdWx0IEVtYmVyLlZpZXcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpdGVt
Vmlld0NsYXNzOiBWaWV3LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
U2V0dXAgYSBDb2xsZWN0aW9uVmlldwotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5p
dAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHZhciByZXQgPSB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgICAg
IHRoaXMuX2NvbnRlbnREaWRDaGFuZ2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElu
dm9rZWQgd2hlbiB0aGUgY29udGVudCBwcm9wZXJ0eSBpcyBhYm91dCB0byBjaGFuZ2UuIE5vdGlm
aWVzIG9ic2VydmVycyB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICBlbnRpcmUgYXJyYXkg
Y29udGVudCB3aWxsIGNoYW5nZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIF9jb250ZW50V2lsbENoYW5nZQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIF9jb250ZW50V2lsbENoYW5nZTogYmVmb3JlT2JzZXJ2ZXIo
J2NvbnRlbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRo
aXMuZ2V0KCdjb250ZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZW50LnJlbW92ZUFycmF5T2JzZXJ2ZXIodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjb250ZW50ID8gZ2V0KGNv
bnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcnJheVdpbGxDaGFu
Z2UoY29udGVudCwgMCwgbGVuKTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnQg
aGFzIGNoYW5nZWQsIGFuZCBpZiBzbywKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRoZSBj
aGlsZHJlbiBkaXJlY3RseS4gVGhpcyBpcyBhbHdheXMgc2NoZWR1bGVkCi0gICAgICAgICAgICAg
ICAgICAgIGFzeW5jaHJvbm91c2x5LCB0byBhbGxvdyB0aGUgZWxlbWVudCB0byBiZSBjcmVhdGVk
IGJlZm9yZQotICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncyBoYXZlIHN5bmNocm9uaXplZCBh
bmQgdmljZSB2ZXJzYS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIF9jb250ZW50RGlkQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgX2NvbnRlbnREaWRDaGFuZ2U6IG9ic2VydmVyKCdjb250ZW50JywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRl
bnQnKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2Fzc2VydEFycmF5TGlrZShjb250ZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGVudC5hZGRBcnJheU9ic2VydmVyKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBsZW4gPSBjb250ZW50ID8gZ2V0KGNvbnRlbnQsICdsZW5ndGgnKSA6
IDA7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcnJheURpZENoYW5nZShjb250ZW50LCAwLCBudWxs
LCBsZW4pOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBFbnN1cmUgdGhhdCB0aGUgY29udGVudCBpbXBsZW1lbnRzIEVtYmVyLkFycmF5Ci0K
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBfYXNzZXJ0QXJyYXlMaWtlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2Fz
c2VydEFycmF5TGlrZTogZnVuY3Rpb24oY29udGVudCkgewotICAgICAgICAgICAgICAgIEVtYmVy
LmFzc2VydChmbXQoImFuIEVtYmVyLkNvbGxlY3Rpb25WaWV3J3MgY29udGVudCBtdXN0IGltcGxl
bWVudCBFbWJlci5BcnJheS4gWW91IHBhc3NlZCAlQCIsIFtjb250ZW50XSksIEVtYmVyQXJyYXku
ZGV0ZWN0KGNvbnRlbnQpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBjb250ZW50IGFuZCBjb250ZW50IG9ic2VydmVy
cy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRlc3Ryb3kKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX3N1cGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMs
ICdjb250ZW50Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGVudC5yZW1vdmVBcnJheU9ic2VydmVyKHRoaXMpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jcmVhdGVkRW1wdHlWaWV3KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWRFbXB0eVZpZXcuZGVzdHJveSgpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVu
IGEgbXV0YXRpb24gdG8gdGhlIHVuZGVybHlpbmcgY29udGVudCBhcnJheSB3aWxsIG9jY3VyLgot
Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlIGFueSB2aWV3cyB0
aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIHVuZGVybHlpbmcKLSAgICAgICAgICAgICAgICAgICAg
Y29udGVudCBhcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBJbnZva2VzIHdoZW5ldmVyIHRo
ZSBjb250ZW50IGFycmF5IGl0c2VsZiB3aWxsIGNoYW5nZS4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIGFycmF5V2lsbENoYW5nZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Fy
cmF5fSBjb250ZW50IHRoZSBtYW5hZ2VkIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cwotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gc3RhcnQgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBj
aGFuZ2VzIHdpbGwgb2NjdXJyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBy
ZW1vdmVkIG51bWJlciBvZiBvYmplY3QgdG8gYmUgcmVtb3ZlZCBmcm9tIGNvbnRlbnQKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhcnJheVdpbGxDaGFuZ2U6IGZ1bmN0aW9uKGNv
bnRlbnQsIHN0YXJ0LCByZW1vdmVkQ291bnQpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
Y29udGVudHMgd2VyZSBlbXB0eSBiZWZvcmUgYW5kIHRoaXMgdGVtcGxhdGUgY29sbGVjdGlvbiBo
YXMgYW4KLSAgICAgICAgICAgICAgICAvLyBlbXB0eSB2aWV3IHJlbW92ZSBpdCBub3cuCi0gICAg
ICAgICAgICAgICAgdmFyIGVtcHR5VmlldyA9IGdldCh0aGlzLCAnZW1wdHlWaWV3Jyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVtcHR5VmlldyAmJiBlbXB0eVZpZXcgaW5zdGFuY2VvZiBWaWV3KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVtcHR5Vmlldy5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGNoaWxkIHZp
ZXdzIHRoYXQgY29ycmVzcG9uZCB3aXRoIHRoZSByZW1vdmVkIGl0ZW1zLgotICAgICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB3ZSBsb29wIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgdG8gdGhl
IGJlZ2lubmluZyBiZWNhdXNlCi0gICAgICAgICAgICAgICAgLy8gd2UgYXJlIG11dGF0aW5nIGl0
IGFzIHdlIGdvLgotICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRW
aWV3cywgY2hpbGRWaWV3LCBpZHgsIGxlbjsKLQotICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMu
X2NoaWxkVmlld3MubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgdmFyIHJlbW92aW5nQWxsID0g
cmVtb3ZlZENvdW50ID09PSBsZW47Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVtb3ZpbmdBbGwp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZW1wdHkodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlUmVjdXJzaXZlbHkoZnVuY3Rpb24odmlldykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5yZW1vdmVkRnJvbURPTSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGlkeCA9IHN0YXJ0ICsgcmVtb3ZlZENvdW50IC0gMTsgaWR4ID49IHN0
YXJ0OyBpZHgtLSkgewotICAgICAgICAgICAgICAgICAgICBjaGlsZFZpZXcgPSBjaGlsZFZpZXdz
W2lkeF07Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkVmlldy5kZXN0cm95KCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIENhbGxlZCB3aGVuIGEgbXV0YXRpb24gdG8gdGhlIHVuZGVybHlpbmcgY29udGVu
dCBhcnJheSBvY2N1cnMuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBy
ZXBsYXkgdGhhdCBtdXRhdGlvbiBhZ2FpbnN0IHRoZSB2aWV3cyB0aGF0IGNvbXBvc2UgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIGBFbWJlci5Db2xsZWN0aW9uVmlld2AsIGVuc3VyaW5nIHRoYXQg
dGhlIHZpZXcgcmVmbGVjdHMgdGhlIG1vZGVsLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMg
YXJyYXkgb2JzZXJ2ZXIgaXMgYWRkZWQgaW4gYGNvbnRlbnREaWRDaGFuZ2VgLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgYXJyYXlEaWRDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtBcnJheX0gY29udGVudCB0aGUgbWFuYWdlZCBjb2xsZWN0aW9uIG9mIG9iamVjdHMK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IHRoZSBpbmRleCBhdCB3
aGljaCB0aGUgY2hhbmdlcyBvY2N1cnJlZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051
bWJlcn0gcmVtb3ZlZCBudW1iZXIgb2Ygb2JqZWN0IHJlbW92ZWQgZnJvbSBjb250ZW50Ci0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBhZGRlZCBudW1iZXIgb2Ygb2JqZWN0IGFk
ZGVkIHRvIGNvbnRlbnQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhcnJheURp
ZENoYW5nZTogZnVuY3Rpb24oY29udGVudCwgc3RhcnQsIHJlbW92ZWQsIGFkZGVkKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGFkZGVkVmlld3MgPSBbXSwgdmlldywgaXRlbSwgaWR4LCBsZW4sIGl0
ZW1WaWV3Q2xhc3MsCi0gICAgICAgICAgICAgICAgZW1wdHlWaWV3OwotCi0gICAgICAgICAgICAg
ICAgbGVuID0gY29udGVudCA/IGdldChjb250ZW50LCAnbGVuZ3RoJykgOiAwOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGxlbikgewotICAgICAgICAgICAgICAgICAgICBpdGVtVmlld0NsYXNzID0g
Z2V0KHRoaXMsICdpdGVtVmlld0NsYXNzJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCdz
dHJpbmcnID09PSB0eXBlb2YgaXRlbVZpZXdDbGFzcyAmJiBpc0dsb2JhbFBhdGgoaXRlbVZpZXdD
bGFzcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3MgPSBnZXQoaXRl
bVZpZXdDbGFzcykgfHwgaXRlbVZpZXdDbGFzczsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydChmbXQoIml0ZW1WaWV3Q2xhc3MgbXVzdCBi
ZSBhIHN1YmNsYXNzIG9mIEVtYmVyLlZpZXcsIG5vdCAlQCIsCi0gICAgICAgICAgICAgICAgICAg
IFtpdGVtVmlld0NsYXNzXSksCi0gICAgICAgICAgICAgICAgICAgICdzdHJpbmcnID09PSB0eXBl
b2YgaXRlbVZpZXdDbGFzcyB8fCBWaWV3LmRldGVjdChpdGVtVmlld0NsYXNzKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpZHggPSBzdGFydDsgaWR4IDwgc3RhcnQgKyBhZGRlZDsgaWR4
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjb250ZW50Lm9iamVjdEF0KGlk
eCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSB0aGlzLmNyZWF0ZUNoaWxkVmll
dyhpdGVtVmlld0NsYXNzLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDog
aXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50SW5kZXg6IGlkeAotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVk
Vmlld3MucHVzaCh2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtcHR5VmlldyA9IGdldCh0aGlzLCAnZW1w
dHlWaWV3Jyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eVZpZXcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGVtcHR5VmlldyAmJiBpc0ds
b2JhbFBhdGgoZW1wdHlWaWV3KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlWaWV3
ID0gZ2V0KGVtcHR5VmlldykgfHwgZW1wdHlWaWV3OwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgZW1wdHlWaWV3ID0gdGhpcy5jcmVhdGVDaGlsZFZpZXcoZW1w
dHlWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgYWRkZWRWaWV3cy5wdXNoKGVtcHR5Vmlldyk7
Ci0gICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnZW1wdHlWaWV3JywgZW1wdHlWaWV3KTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoQ29yZVZpZXcuZGV0ZWN0KGVtcHR5VmlldykpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWRFbXB0eVZpZXcgPSBlbXB0eVZp
ZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLnJlcGxhY2Uoc3RhcnQsIDAsIGFkZGVkVmlld3MpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEluc3RhbnRpYXRlcyBh
IHZpZXcgdG8gYmUgYWRkZWQgdG8gdGhlIGNoaWxkVmlld3MgYXJyYXkgZHVyaW5nIHZpZXcKLSAg
ICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uIFlvdSBnZW5lcmFsbHkgd2lsbCBub3Qg
Y2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgeW91
IGFyZSBvdmVycmlkaW5nIGBjcmVhdGVDaGlsZFZpZXdzKClgLiBOb3RlIHRoYXQgdGhpcyBtZXRo
b2Qgd2lsbAotICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSB0aGUg
Y29ycmVjdCBzZXR0aW5ncyBvbiB0aGUgbmV3IHZpZXcgaW5zdGFuY2UgdG8KLSAgICAgICAgICAg
ICAgICAgICAgYWN0IGFzIGEgY2hpbGQgb2YgdGhlIHBhcmVudC4KLQotICAgICAgICAgICAgICAg
ICAgICBUaGUgdGFnIG5hbWUgZm9yIHRoZSB2aWV3IHdpbGwgYmUgc2V0IHRvIHRoZSB0YWdOYW1l
IG9mIHRoZSB2aWV3Q2xhc3MKLSAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGluLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlQ2hpbGRWaWV3Ci0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7Q2xhc3N9IHZpZXdDbGFzcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0hhc2h9IFthdHRyc10gQXR0cmlidXRlcyB0byBhZGQKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7RW1iZXIuVmlld30gbmV3IGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgY3JlYXRlQ2hpbGRWaWV3OiBmdW5jdGlvbih2aWV3LCBhdHRycykgewotICAgICAg
ICAgICAgICAgIHZpZXcgPSB0aGlzLl9zdXBlcih2aWV3LCBhdHRycyk7Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgaXRlbVRhZ05hbWUgPSBnZXQodmlldywgJ3RhZ05hbWUnKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChpdGVtVGFnTmFtZSA9PT0gbnVsbCB8fCBpdGVtVGFnTmFtZSA9PT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1UYWdOYW1lID0gQ29sbGVjdGlvblZpZXcu
Q09OVEFJTkVSX01BUFtnZXQodGhpcywgJ3RhZ05hbWUnKV07Ci0gICAgICAgICAgICAgICAgICAg
IHNldCh2aWV3LCAndGFnTmFtZScsIGl0ZW1UYWdOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgbWFwIG9mIHBhcmVudCB0YWdzIHRvIHRo
ZWlyIGRlZmF1bHQgY2hpbGQgdGFncy4gWW91IGNhbiBhZGQKLSAgICAgICAgICAgICAgYWRkaXRp
b25hbCBwYXJlbnQgdGFncyBpZiB5b3Ugd2FudCBjb2xsZWN0aW9uIHZpZXdzIHRoYXQgdXNlCi0g
ICAgICAgICAgICAgIGEgcGFydGljdWxhciBwYXJlbnQgdGFnIHRvIGRlZmF1bHQgdG8gYSBjaGls
ZCB0YWcuCi0KLSAgICAgICAgICAgICAgQHByb3BlcnR5IENPTlRBSU5FUl9NQVAKLSAgICAgICAg
ICAgICAgQHR5cGUgSGFzaAotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEBm
aW5hbAotICAgICAgICAgICAgKi8KLSAgICAgICAgQ29sbGVjdGlvblZpZXcuQ09OVEFJTkVSX01B
UCA9IHsKLSAgICAgICAgICAgIHVsOiAnbGknLAotICAgICAgICAgICAgb2w6ICdsaScsCi0gICAg
ICAgICAgICB0YWJsZTogJ3RyJywKLSAgICAgICAgICAgIHRoZWFkOiAndHInLAotICAgICAgICAg
ICAgdGJvZHk6ICd0cicsCi0gICAgICAgICAgICB0Zm9vdDogJ3RyJywKLSAgICAgICAgICAgIHRy
OiAndGQnLAotICAgICAgICAgICAgc2VsZWN0OiAnb3B0aW9uJwotICAgICAgICB9OwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBDb2xsZWN0aW9uVmlldzsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLXZpZXdzL3ZpZXdzL2NvbXBvbmVudCIsCi0gICAgWyJlbWJlci1tZXRh
bC9jb3JlIiwgImVtYmVyLXZpZXdzL21peGlucy9jb21wb25lbnRfdGVtcGxhdGVfZGVwcmVjYXRp
b24iLCAiZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwgImVtYmVy
LXZpZXdzL3ZpZXdzL3ZpZXciLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1l
dGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9pc19ub25lIiwgImVtYmVyLW1ldGFsL2Nv
bXB1dGVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVw
ZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5j
eTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywg
X19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0LCBF
bWJlci5IYW5kbGViYXJzCi0KLSAgICAgICAgdmFyIENvbXBvbmVudFRlbXBsYXRlRGVwcmVjYXRp
b24gPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRhcmdldEFjdGlv
blN1cHBvcnQgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFZpZXcg
PSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBl
bmRlbmN5NV9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTZfXy5zZXQ7Ci0g
ICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k3X18uaXNOb25lOwotCi0gICAgICAgIHZh
ciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeThfXy5jb21wdXRlZDsKLQotICAgICAgICB2YXIgYV9z
bGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
IEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAg
ICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFuIGBFbWJlci5Db21wb25l
bnRgIGlzIGEgdmlldyB0aGF0IGlzIGNvbXBsZXRlbHkKLSAgICAgICAgICAgICAgaXNvbGF0ZWQu
IFByb3BlcnR5IGFjY2VzcyBpbiBpdHMgdGVtcGxhdGVzIGdvCi0gICAgICAgICAgICAgIHRvIHRo
ZSB2aWV3IG9iamVjdCBhbmQgYWN0aW9ucyBhcmUgdGFyZ2V0ZWQgYXQKLSAgICAgICAgICAgICAg
dGhlIHZpZXcgb2JqZWN0LiBUaGVyZSBpcyBubyBhY2Nlc3MgdG8gdGhlCi0gICAgICAgICAgICAg
IHN1cnJvdW5kaW5nIGNvbnRleHQgb3Igb3V0ZXIgY29udHJvbGxlcjsgYWxsCi0gICAgICAgICAg
ICAgIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gbXVzdCBiZSBwYXNzZWQgaW4uCi0KLSAgICAgICAg
ICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBgRW1iZXIuQ29tcG9uZW50YCBpcyB2
aWEKLSAgICAgICAgICAgICAgYSB0ZW1wbGF0ZS4gSWYgeW91IG5hbWUgYSB0ZW1wbGF0ZQotICAg
ICAgICAgICAgICBgY29tcG9uZW50cy9teS1mb29gLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZQot
ICAgICAgICAgICAgICBge3tteS1mb299fWAgaW4gb3RoZXIgdGVtcGxhdGVzLCB3aGljaCB3aWxs
IG1ha2UKLSAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlIGlzb2xhdGVkIGNvbXBvbmVu
dC4KLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7YXBwLXBy
b2ZpbGUgcGVyc29uPWN1cnJlbnRVc2VyfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8IS0tIGFwcC1wcm9maWxlIHRlbXBs
YXRlIC0tPgotICAgICAgICAgICAgICA8aDE+e3twZXJzb24udGl0bGV9fTwvaDE+Ci0gICAgICAg
ICAgICAgIDxpbWcge3tiaW5kLWF0dHIgc3JjPXBlcnNvbi5hdmF0YXJ9fT4KLSAgICAgICAgICAg
ICAgPHAgY2xhc3M9J3NpZ25hdHVyZSc+e3twZXJzb24uc2lnbmF0dXJlfX08L3A+Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGB5aWVsZGAgaW5zaWRlIGEg
dGVtcGxhdGUgdG8KLSAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgKipjb250ZW50cyoqIG9mIGFu
eSBibG9jayBhdHRhY2hlZCB0bwotICAgICAgICAgICAgICB0aGUgY29tcG9uZW50LiBUaGUgYmxv
Y2sgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUKLSAgICAgICAgICAgICAgY29udGV4dCBvZiB0aGUg
c3Vycm91bmRpbmcgY29udGV4dCBvciBvdXRlciBjb250cm9sbGVyOgotCi0gICAgICAgICAgICAg
IGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjYXBwLXByb2ZpbGUgcGVyc29uPWN1cnJl
bnRVc2VyfX0KLSAgICAgICAgICAgICAgICA8cD5BZG1pbiBtb2RlPC9wPgotICAgICAgICAgICAg
ICAgIHt7ISBFeGVjdXRlZCBpbiB0aGUgY29udHJvbGxlcidzIGNvbnRleHQuIH19Ci0gICAgICAg
ICAgICAgIHt7L2FwcC1wcm9maWxlfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8IS0tIGFwcC1wcm9maWxlIHRlbXBsYXRl
IC0tPgotICAgICAgICAgICAgICA8aDE+e3twZXJzb24udGl0bGV9fTwvaDE+Ci0gICAgICAgICAg
ICAgIHt7ISBFeGVjdXRlZCBpbiB0aGUgY29tcG9uZW50cyBjb250ZXh0LiB9fQotICAgICAgICAg
ICAgICB7e3lpZWxkfX0ge3shIGJsb2NrIGNvbnRlbnRzIH19Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50LCBp
biBvcmRlciB0bwotICAgICAgICAgICAgICBoYW5kbGUgZXZlbnRzIG9yIGFjdGlvbnMsIHlvdSBp
bXBsZW1lbnQgYSBzdWJjbGFzcwotICAgICAgICAgICAgICBvZiBgRW1iZXIuQ29tcG9uZW50YCBu
YW1lZCBhZnRlciB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgICAgICAgY29tcG9uZW50LiBOb3Rl
IHRoYXQgYENvbXBvbmVudGAgbmVlZHMgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIG5hbWUgb2YKLSAg
ICAgICAgICAgICAgeW91ciBzdWJjbGFzcyBsaWtlIGBBcHBQcm9maWxlQ29tcG9uZW50YC4KLQot
ICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGltcGxlbWVudCB0aGUgYWN0aW9u
Ci0gICAgICAgICAgICAgIGBoZWxsb2AgZm9yIHRoZSBgYXBwLXByb2ZpbGVgIGNvbXBvbmVudDoK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5BcHBQcm9m
aWxlQ29tcG9uZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAg
YWN0aW9uczogewotICAgICAgICAgICAgICAgICAgaGVsbG86IGZ1bmN0aW9uKG5hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkhlbGxvIiwgbmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW5kIHRoZW4gdXNlIGl0IGluIHRoZSBjb21wb25l
bnQncyB0ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIDwhLS0gYXBwLXByb2ZpbGUgdGVtcGxhdGUgLS0+Ci0KLSAgICAgICAgICAgICAgPGgxPnt7
cGVyc29uLnRpdGxlfX08L2gxPgotICAgICAgICAgICAgICB7e3lpZWxkfX0gPCEtLSBibG9jayBj
b250ZW50cyAtLT4KLQotICAgICAgICAgICAgICA8YnV0dG9uIHt7YWN0aW9uICdoZWxsbycgcGVy
c29uLm5hbWV9fT4KLSAgICAgICAgICAgICAgICBTYXkgSGVsbG8gdG8ge3twZXJzb24ubmFtZX19
Ci0gICAgICAgICAgICAgIDwvYnV0dG9uPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBDb21wb25lbnRzIG11c3QgaGF2ZSBhIGAtYCBpbiB0aGVpciBuYW1lIHRvIGF2b2lkCi0g
ICAgICAgICAgICAgIGNvbmZsaWN0cyB3aXRoIGJ1aWx0LWluIGNvbnRyb2xzIHRoYXQgd3JhcCBI
VE1MCi0gICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUg
c2FtZQotICAgICAgICAgICAgICByZXF1aXJlbWVudCBpbiB3ZWIgY29tcG9uZW50cy4KLQotICAg
ICAgICAgICAgICBAY2xhc3MgQ29tcG9uZW50Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuVmlldwotICAgICAgICAgICAgKi8KLSAg
ICAgICAgdmFyIENvbXBvbmVudCA9IFZpZXcuZXh0ZW5kKFRhcmdldEFjdGlvblN1cHBvcnQsIENv
bXBvbmVudFRlbXBsYXRlRGVwcmVjYXRpb24sIHsKLSAgICAgICAgICAgIGluc3RydW1lbnROYW1l
OiAnY29tcG9uZW50JywKLSAgICAgICAgICAgIGluc3RydW1lbnREaXNwbGF5OiBjb21wdXRlZChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVidWdDb250YWluZXJLZXkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd7eycgKyB0aGlzLl9kZWJ1Z0NvbnRhaW5l
cktleS5zcGxpdCgnOicpWzFdICsgJ319JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KSwKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ29yaWdDb250ZXh0Jywg
Z2V0KHRoaXMsICdjb250ZXh0JykpOwotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnY29udGV4
dCcsIHRoaXMpOwotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnY29udHJvbGxlcicsIHRoaXMp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVmYXVsdExheW91dDogZnVuY3Rpb24o
Y29udGV4dCwgb3B0aW9ucykgewotICAgICAgICAgICAgICAgIEVtYmVyLkhhbmRsZWJhcnMuaGVs
cGVyc1sneWllbGQnXS5jYWxsKGNvbnRleHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICBBIGNvbXBvbmVudHMgdGVtcGxhdGUg
cHJvcGVydHkgaXMgc2V0IGJ5IHBhc3NpbmcgYSBibG9jawotICAgICAgICAgICAgICAgICAgZHVy
aW5nIGl0cyBpbnZvY2F0aW9uLiBJdCBpcyBleGVjdXRlZCB3aXRoaW4gdGhlIHBhcmVudCBjb250
ZXh0LgotCi0gICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgICAgICB7eyNteS1jb21wb25lbnR9fQotICAgICAg
ICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgdGhhdCBpcyBydW4gaW4gdGhlIGNvbnRleHQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHBhcmVudCBjb250ZXh0Ci0gICAgICAgICAgICAg
ICAgICB7ey9teS1jb21wb25lbnR9fQotICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgICAgIFNwZWNpZnlpbmcgYSB0ZW1wbGF0ZSBkaXJlY3RseSB0byBhIGNvbXBvbmVudCBp
cyBkZXByZWNhdGVkIHdpdGhvdXQKLSAgICAgICAgICAgICAgICAgIGFsc28gc3BlY2lmeWluZyB0
aGUgbGF5b3V0IHByb3BlcnR5LgotCi0gICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAotICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IHRlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgdGVtcGxhdGU6IGNvbXB1dGVkKGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
dmFyIHRlbXBsYXRlTmFtZSA9IGdldCh0aGlzLCAndGVtcGxhdGVOYW1lJyksCi0gICAgICAgICAg
ICAgICAgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlRm9yTmFtZSh0ZW1wbGF0ZU5hbWUsICd0ZW1w
bGF0ZScpOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIHRo
ZSB0ZW1wbGF0ZU5hbWUgIiArIHRlbXBsYXRlTmFtZSArICIgZm9yICIgKyB0aGlzICsgIiwgYnV0
IGl0IGRpZCBub3QgZXhpc3QuIiwgIXRlbXBsYXRlTmFtZSB8fCB0ZW1wbGF0ZSk7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUgfHwgZ2V0KHRoaXMsICdkZWZhdWx0VGVtcGxhdGUn
KTsKLSAgICAgICAgICAgIH0pLnByb3BlcnR5KCd0ZW1wbGF0ZU5hbWUnKSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgY29tcG9uZW50cyBgdGVtcGxh
dGVOYW1lYCBpcyBkZXByZWNhdGVkIHdpdGhvdXQgYWxzbwotICAgICAgICAgICAgICAgICAgcHJv
dmlkaW5nIHRoZSBgbGF5b3V0YCBvciBgbGF5b3V0TmFtZWAgcHJvcGVydGllcy4KLQotICAgICAg
ICAgICAgICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB0ZW1w
bGF0ZU5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6
IG51bGwsCi0KLSAgICAgICAgICAgIC8vIGR1cmluZyByZW5kZXIsIGlzb2xhdGUga2V5d29yZHMK
LSAgICAgICAgICAgIGNsb25lS2V5d29yZHM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXc6IHRoaXMsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRyb2xsZXI6IHRoaXMKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgX3lpZWxkOiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBvcHRpb25zLmRhdGEudmlldywKLSAgICAgICAgICAg
ICAgICBwYXJlbnRWaWV3ID0gdGhpcy5fcGFyZW50VmlldywKLSAgICAgICAgICAgICAgICB0ZW1w
bGF0ZSA9IGdldCh0aGlzLCAndGVtcGxhdGUnKTsKLQotICAgICAgICAgICAgICAgIGlmICh0ZW1w
bGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIkEgQ29tcG9uZW50IG11
c3QgaGF2ZSBhIHBhcmVudCB2aWV3IGluIG9yZGVyIHRvIHlpZWxkLiIsIHBhcmVudFZpZXcpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcuYXBwZW5kQ2hpbGQoVmlldywgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaXNWaXJ0dWFsOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
dGFnTmFtZTogJycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dFZpZXc6IHBhcmVu
dFZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBvcHRpb25zLmRhdGEuaW5zaWRlR3JvdXAgPyBn
ZXQodGhpcywgJ29yaWdDb250ZXh0JykgOiBnZXQocGFyZW50VmlldywgJ2NvbnRleHQnKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IGdldChwYXJlbnRWaWV3LCAnY29udHJv
bGxlcicpLAotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IHBhcmVudFZpZXcuY2xvbmVLZXl3b3Jkcygp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZUdyb3VwOiBvcHRpb25zLmRhdGEu
aW5zaWRlR3JvdXAgCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29tcG9uZW50IGlzIGN1cnJlbnRseSBp
bnNlcnRlZCBpbnRvIHRoZSBET00gb2YgYSBwYXJlbnQgdmlldywgdGhpcwotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eSB3aWxsIHBvaW50IHRvIHRoZSBjb250cm9sbGVyIG9mIHRoZSBwYXJl
bnQgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdGFyZ2V0T2JqZWN0Ci0g
ICAgICAgICAgICAgICAgICAgIEB0eXBlIEVtYmVyLkNvbnRyb2xsZXIKLSAgICAgICAgICAgICAg
ICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRh
cmdldE9iamVjdDogY29tcHV0ZWQoZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHBhcmVudFZpZXcgPSBnZXQodGhpcywgJ19wYXJlbnRWaWV3Jyk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHBhcmVudFZpZXcgPyBnZXQocGFyZW50VmlldywgJ2NvbnRyb2xsZXInKSA6IG51bGw7
Ci0gICAgICAgICAgICB9KS5wcm9wZXJ0eSgnX3BhcmVudFZpZXcnKSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFRyaWdnZXJzIGEgbmFtZWQgYWN0aW9uIG9uIHRoZSBj
b250cm9sbGVyIGNvbnRleHQgd2hlcmUgdGhlIGNvbXBvbmVudCBpcyB1c2VkIGlmCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMgY29udHJvbGxlciBoYXMgcmVnaXN0ZXJlZCBmb3Igbm90aWZpY2F0
aW9ucyBvZiB0aGUgYWN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGEg
Y29tcG9uZW50IGZvciBwbGF5aW5nIG9yIHBhdXNpbmcgbXVzaWMgbWF5IHRyYW5zbGF0ZSBjbGlj
ayBldmVudHMKLSAgICAgICAgICAgICAgICAgICAgaW50byBhY3Rpb24gbm90aWZpY2F0aW9ucyBv
ZiAicGxheSIgb3IgInN0b3AiIGRlcGVuZGluZyBvbiBzb21lIGludGVybmFsIHN0YXRlCi0gICAg
ICAgICAgICAgICAgICAgIG9mIHRoZSBjb21wb25lbnQ6Ci0KLQotICAgICAgICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5QbGF5QnV0dG9uQ29tcG9u
ZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2xp
Y2s6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2lz
UGxheWluZycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZEFjdGlvbign
cGxheScpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCdzdG9wJyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2Vk
IGluc2lkZSBhIHRlbXBsYXRlIHRoZXNlIGNvbXBvbmVudCBhY3Rpb25zIGFyZSBjb25maWd1cmVk
IHRvCi0gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgYWN0aW9ucyBpbiB0aGUgb3V0ZXIgYXBw
bGljYXRpb24gY29udGV4dDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgICAgICAgIHt7ISBhcHBsaWNhdGlvbi5oYnMgfX0KLSAgICAgICAgICAgICAg
ICAgICAge3twbGF5LWJ1dHRvbiBwbGF5PSJtdXNpY1N0YXJ0ZWQiIHN0b3A9Im11c2ljU3RvcHBl
ZCJ9fQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBXaGVu
IHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgYSBicm93c2VyIGBjbGlja2AgZXZlbnQgaXQgdHJhbnNs
YXRlIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24gaW50byBhcHBsaWNhdGlv
bi1zcGVjaWZpYyBzZW1hbnRpY3MgKCJwbGF5IiBvciAic3RvcCIpIGFuZAotICAgICAgICAgICAg
ICAgICAgICB0cmlnZ2VycyB0aGUgc3BlY2lmaWVkIGFjdGlvbiBuYW1lIG9uIHRoZSBjb250cm9s
bGVyIGZvciB0aGUgdGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGNvbXBv
bmVudCBpcyB1c2VkOgotCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBBcHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuQ29udHJv
bGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG11c2ljU3RhcnRlZDogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHBsYXkgYnV0dG9uIGlzIGNsaWNrZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBtdXNpYyBzdGFydGVkIHBsYXlpbmcK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBtdXNp
Y1N0b3BwZWQ6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxl
ZCB3aGVuIHRoZSBwbGF5IGJ1dHRvbiBpcyBjbGlja2VkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCB0aGUgbXVzaWMgc3RvcHBlZCBwbGF5aW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgbm8gYWN0
aW9uIG5hbWUgaXMgcGFzc2VkIHRvIGBzZW5kQWN0aW9uYCBhIGRlZmF1bHQgbmFtZSBvZiAiYWN0
aW9uIgotICAgICAgICAgICAgICAgICAgICBpcyBhc3N1bWVkLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLk5leHRCdXR0b25Db21w
b25lbnQgPSBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBj
bGljazogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZEFjdGlv
bigpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgICAgICAgICAgICAgICAge3shIGFwcGxpY2F0aW9uLmhicyB9fQotICAgICAgICAg
ICAgICAgICAgICB7e25leHQtYnV0dG9uIGFjdGlvbj0icGxheU5leHRTb25nSW5BbGJ1bSJ9fQot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJl
ci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogewot
ICAgICAgICAgICAgICAgICAgICAgICAgcGxheU5leHRTb25nSW5BbGJ1bTogZnVuY3Rpb24oKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZW5kQWN0
aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBbYWN0aW9uXSB7U3RyaW5nfSB0aGUgYWN0
aW9uIHRvIHRyaWdnZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIFtjb250ZXh0XSB7Kn0g
YSBjb250ZXh0IHRvIHNlbmQgd2l0aCB0aGUgYWN0aW9uCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgc2VuZEFjdGlvbjogZnVuY3Rpb24oYWN0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGFjdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgY29udGV4dHMgPSBhX3NsaWNlLmNh
bGwoYXJndW1lbnRzLCAxKTsKLQotICAgICAgICAgICAgICAgIC8vIFNlbmQgdGhlIGRlZmF1bHQg
YWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gdW5kZWZpbmVkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBnZXQodGhpcywgJ2FjdGlvbicpOwotICAgICAg
ICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBkZWZhdWx0IGFjdGlvbiB3YXMgdHJpZ2dl
cmVkIG9uIHRoZSBjb21wb25lbnQgIiArIHRoaXMudG9TdHJpbmcoKSArCi0gICAgICAgICAgICAg
ICAgICAgICIsIGJ1dCB0aGUgYWN0aW9uIG5hbWUgKCIgKyBhY3Rpb25OYW1lICsgIikgd2FzIG5v
dCBhIHN0cmluZy4iLAotICAgICAgICAgICAgICAgICAgICBpc05vbmUoYWN0aW9uTmFtZSkgfHwg
dHlwZW9mIGFjdGlvbk5hbWUgPT09ICdzdHJpbmcnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBhY3Rpb25OYW1lID0gZ2V0KHRoaXMsIGFjdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlICIgKyBhY3Rpb24gKyAiIGFjdGlv
biB3YXMgdHJpZ2dlcmVkIG9uIHRoZSBjb21wb25lbnQgIiArCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMudG9TdHJpbmcoKSArICIsIGJ1dCB0aGUgYWN0aW9uIG5hbWUgKCIgKyBhY3Rpb25OYW1l
ICsKLSAgICAgICAgICAgICAgICAgICAgIikgd2FzIG5vdCBhIHN0cmluZy4iLAotICAgICAgICAg
ICAgICAgICAgICBpc05vbmUoYWN0aW9uTmFtZSkgfHwgdHlwZW9mIGFjdGlvbk5hbWUgPT09ICdz
dHJpbmcnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBubyBh
Y3Rpb24gbmFtZSBmb3IgdGhhdCBhY3Rpb24gY291bGQgYmUgZm91bmQsIGp1c3QgYWJvcnQuCi0g
ICAgICAgICAgICAgICAgaWYgKGFjdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
dGhpcy50cmlnZ2VyQWN0aW9uKHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db250ZXh0OiBjb250ZXh0cwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gQ29tcG9uZW50OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItdmlld3Mvdmlld3MvY29udGFpbmVyX3ZpZXciLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9tZXJnZSIsICJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQi
LCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJlbWJlci12aWV3cy92aWV3cy92aWV3X2NvbGxl
Y3Rpb24iLCAiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwg
ImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAi
ZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJlbWJlci12
aWV3cy9zeXN0ZW0vcmVuZGVyX2J1ZmZlciIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1y
dW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdf
XywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9f
ZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5kZW5jeTEzX18sIF9fZGVw
ZW5kZW5jeTE0X18sIF9fZGVwZW5kZW5jeTE1X18sIF9fZGVwZW5kZW5jeTE2X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydCwgRW1iZXIuSwot
Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgTXV0YWJsZUFycmF5ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAg
IHZhciBnZXQgPSBfX2RlcGVuZGVuY3k0X18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBl
bmRlbmN5NV9fLnNldDsKLQotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeTZfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgVmlld0NvbGxlY3Rpb24gPSBfX2RlcGVuZGVuY3k3X19bImRl
ZmF1bHQiXTsKLQotICAgICAgICB2YXIgY2xvbmVTdGF0ZXMgPSBfX2RlcGVuZGVuY3k4X18uY2xv
bmVTdGF0ZXM7Ci0gICAgICAgIHZhciBFbWJlclZpZXdTdGF0ZXMgPSBfX2RlcGVuZGVuY3k4X18u
c3RhdGVzOwotCi0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5OV9fWyJkZWZh
dWx0Il07Ci0KLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kxMF9fLmZvckVhY2g7
Ci0KLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5MTFfXy5jb21wdXRlZDsKLSAg
ICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGRlZmluZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5MTNfXy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAg
ICAgdmFyIHJlbmRlckJ1ZmZlciA9IF9fZGVwZW5kZW5jeTE0X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5MTVfXy5vYnNlcnZlcjsKLSAgICAgICAgdmFy
IGJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTVfXy5iZWZvcmVPYnNlcnZlcjsKLSAgICAg
ICAgdmFyIGVtYmVyQSA9IF9fZGVwZW5kZW5jeTE2X18uQTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MK
LSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIHN0YXRlcyA9IGNsb25lU3RhdGVzKEVtYmVy
Vmlld1N0YXRlcyk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgYENvbnRhaW5lclZp
ZXdgIGlzIGFuIGBFbWJlci5WaWV3YCBzdWJjbGFzcyB0aGF0IGltcGxlbWVudHMgYEVtYmVyLk11
dGFibGVBcnJheWAKLSAgICAgICAgICAgICAgYWxsb3dpbmcgcHJvZ3JhbW1hdGljIG1hbmFnZW1l
bnQgb2YgaXRzIGNoaWxkIHZpZXdzLgotCi0gICAgICAgICAgICAgICMjIFNldHRpbmcgSW5pdGlh
bCBDaGlsZCBWaWV3cwotCi0gICAgICAgICAgICAgIFRoZSBpbml0aWFsIGFycmF5IG9mIGNoaWxk
IHZpZXdzIGNhbiBiZSBzZXQgaW4gb25lIG9mIHR3byB3YXlzLiBZb3UgY2FuCi0gICAgICAgICAg
ICAgIHByb3ZpZGUgYSBgY2hpbGRWaWV3c2AgcHJvcGVydHkgYXQgY3JlYXRpb24gdGltZSB0aGF0
IGNvbnRhaW5zIGluc3RhbmNlIG9mCi0gICAgICAgICAgICAgIGBFbWJlci5WaWV3YDoKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFDb250YWluZXIgPSBFbWJl
ci5Db250YWluZXJWaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgY2hpbGRWaWV3czogW0Vt
YmVyLlZpZXcuY3JlYXRlKCksIEVtYmVyLlZpZXcuY3JlYXRlKCldCi0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcHJvdmlk
ZSBhIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgd2hvc2UgdmFsdWVzIGFyZSBpbnN0YW5jZXMgb2YK
LSAgICAgICAgICAgICAgYEVtYmVyLlZpZXdgOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgYUNvbnRhaW5lciA9IEVtYmVyLkNvbnRhaW5lclZpZXcuY3JlYXRl
KHsKLSAgICAgICAgICAgICAgICBjaGlsZFZpZXdzOiBbJ2FWaWV3JywgJ2JWaWV3JywgJ2NWaWV3
J10sCi0gICAgICAgICAgICAgICAgYVZpZXc6IEVtYmVyLlZpZXcuY3JlYXRlKCksCi0gICAgICAg
ICAgICAgICAgYlZpZXc6IEVtYmVyLlZpZXcuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgY1Zp
ZXc6IEVtYmVyLlZpZXcuY3JlYXRlKCkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFRoZSB0d28gc3RyYXRlZ2llcyBjYW4gYmUgY29tYmluZWQ6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBhQ29udGFpbmVy
ID0gRW1iZXIuQ29udGFpbmVyVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgIGNoaWxkVmll
d3M6IFsnYVZpZXcnLCBFbWJlci5WaWV3LmNyZWF0ZSgpXSwKLSAgICAgICAgICAgICAgICBhVmll
dzogRW1iZXIuVmlldy5jcmVhdGUoKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgRWFjaCBjaGlsZCB2aWV3J3MgcmVuZGVyaW5nIHdpbGwgYmUg
aW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyJ3MgcmVuZGVyZWQKLSAgICAgICAgICAgICAgSFRN
TCBpbiB0aGUgc2FtZSBvcmRlciBhcyBpdHMgcG9zaXRpb24gaW4gdGhlIGBjaGlsZFZpZXdzYCBw
cm9wZXJ0eS4KLQotICAgICAgICAgICAgICAjIyBBZGRpbmcgYW5kIFJlbW92aW5nIENoaWxkIFZp
ZXdzCi0KLSAgICAgICAgICAgICAgVGhlIGNvbnRhaW5lciB2aWV3IGltcGxlbWVudHMgYEVtYmVy
Lk11dGFibGVBcnJheWAgYWxsb3dpbmcgcHJvZ3JhbW1hdGljIG1hbmFnZW1lbnQgb2YgaXRzIGNo
aWxkIHZpZXdzLgotCi0gICAgICAgICAgICAgIFRvIHJlbW92ZSBhIHZpZXcsIHBhc3MgdGhhdCB2
aWV3IGludG8gYSBgcmVtb3ZlT2JqZWN0YCBjYWxsIG9uIHRoZSBjb250YWluZXIgdmlldy4KLQot
ICAgICAgICAgICAgICBHaXZlbiBhbiBlbXB0eSBgPGJvZHk+YCB0aGUgZm9sbG93aW5nIGNvZGUK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFDb250YWluZXIg
PSBFbWJlci5Db250YWluZXJWaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1l
czogWyd0aGUtY29udGFpbmVyJ10sCi0gICAgICAgICAgICAgICAgY2hpbGRWaWV3czogWydhVmll
dycsICdiVmlldyddLAotICAgICAgICAgICAgICAgIGFWaWV3OiBFbWJlci5WaWV3LmNyZWF0ZSh7
Ci0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJB
IikKLSAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICBiVmlldzogRW1iZXIuVmll
dy5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMu
Y29tcGlsZSgiQiIpCi0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgYUNvbnRhaW5lci5hcHBlbmRUbygnYm9keScpOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBSZXN1bHRzIGluIHRoZSBIVE1MCi0KLSAgICAgICAgICAgICAg
YGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3IHRoZS1jb250YWlu
ZXIiPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkE8L2Rpdj4KLSAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5CPC9kaXY+Ci0gICAgICAgICAg
ICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBSZW1vdmluZyBh
IHZpZXcKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFDb250
YWluZXIudG9BcnJheSgpOyAgLy8gW2FDb250YWluZXIuYVZpZXcsIGFDb250YWluZXIuYlZpZXdd
Ci0gICAgICAgICAgICAgIGFDb250YWluZXIucmVtb3ZlT2JqZWN0KGFDb250YWluZXIuZ2V0KCdi
VmlldycpKTsKLSAgICAgICAgICAgICAgYUNvbnRhaW5lci50b0FycmF5KCk7ICAvLyBbYUNvbnRh
aW5lci5hVmlld10KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1
bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3IHRoZS1jb250YWluZXIiPgotICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkE8L2Rpdj4KLSAgICAgICAgICAgICAgPC9k
aXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFNpbWlsYXJseSwgYWRkaW5n
IGEgY2hpbGQgdmlldyBpcyBhY2NvbXBsaXNoZWQgYnkgYWRkaW5nIGBFbWJlci5WaWV3YCBpbnN0
YW5jZXMgdG8gdGhlCi0gICAgICAgICAgICAgIGNvbnRhaW5lciB2aWV3LgotCi0gICAgICAgICAg
ICAgIEdpdmVuIGFuIGVtcHR5IGA8Ym9keT5gIHRoZSBmb2xsb3dpbmcgY29kZQotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgYUNvbnRhaW5lciA9IEVtYmVyLkNv
bnRhaW5lclZpZXcuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ3RoZS1j
b250YWluZXInXSwKLSAgICAgICAgICAgICAgICBjaGlsZFZpZXdzOiBbJ2FWaWV3JywgJ2JWaWV3
J10sCi0gICAgICAgICAgICAgICAgYVZpZXc6IEVtYmVyLlZpZXcuY3JlYXRlKHsKLSAgICAgICAg
ICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoIkEiKQotICAgICAg
ICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgIGJWaWV3OiBFbWJlci5WaWV3LmNyZWF0ZSh7
Ci0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJC
IikKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICBhQ29udGFpbmVyLmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIFJlc3VsdHMgaW4gdGhlIEhUTUwKLQotICAgICAgICAgICAgICBgYGBodG1sCi0g
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXcgdGhlLWNvbnRhaW5lciI+Ci0gICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+QTwvZGl2PgotICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkI8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFkZGluZyBhIHZpZXcKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFub3RoZXJWaWV3Q2xhc3Mg
PSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhh
bmRsZWJhcnMuY29tcGlsZSgiQW5vdGhlciB2aWV3IikKLSAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgYUNvbnRhaW5lci50b0FycmF5KCk7ICAvLyBbYUNvbnRhaW5lci5hVmlldywg
YUNvbnRhaW5lci5iVmlld10KLSAgICAgICAgICAgICAgYUNvbnRhaW5lci5wdXNoT2JqZWN0KEFu
b3RoZXJWaWV3Q2xhc3MuY3JlYXRlKCkpOwotICAgICAgICAgICAgICBhQ29udGFpbmVyLnRvQXJy
YXkoKTsgLy8gW2FDb250YWluZXIuYVZpZXcsIGFDb250YWluZXIuYlZpZXcsIDxBbm90aGVyVmll
d0NsYXNzIGluc3RhbmNlPl0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2ls
bCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAot
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3IHRoZS1jb250YWluZXIiPgotICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkE8L2Rpdj4KLSAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5CPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0iZW1iZXItdmlldyI+QW5vdGhlciB2aWV3PC9kaXY+Ci0gICAgICAgICAgICAgIDwv
ZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBUZW1wbGF0ZXMgYW5k
IExheW91dAotCi0gICAgICAgICAgICAgIEEgYHRlbXBsYXRlYCwgYHRlbXBsYXRlTmFtZWAsIGBk
ZWZhdWx0VGVtcGxhdGVgLCBgbGF5b3V0YCwgYGxheW91dE5hbWVgIG9yCi0gICAgICAgICAgICAg
IGBkZWZhdWx0TGF5b3V0YCBwcm9wZXJ0eSBvbiBhIGNvbnRhaW5lciB2aWV3IHdpbGwgbm90IHJl
c3VsdCBpbiB0aGUgdGVtcGxhdGUKLSAgICAgICAgICAgICAgb3IgbGF5b3V0IGJlaW5nIHJlbmRl
cmVkLiBUaGUgSFRNTCBjb250ZW50cyBvZiBhIGBFbWJlci5Db250YWluZXJWaWV3YCdzIERPTQot
ICAgICAgICAgICAgICByZXByZXNlbnRhdGlvbiB3aWxsIG9ubHkgYmUgdGhlIHJlbmRlcmVkIEhU
TUwgb2YgaXRzIGNoaWxkIHZpZXdzLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBDb250YWluZXJW
aWV3Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVu
ZHMgRW1iZXIuVmlldwotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIENvbnRhaW5lclZpZXcg
PSBWaWV3LmV4dGVuZChNdXRhYmxlQXJyYXksIHsKLSAgICAgICAgICAgIF9zdGF0ZXM6IHN0YXRl
cywKLQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fc3VwZXIoKTsKLQotICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gZ2V0KHRoaXMs
ICdjaGlsZFZpZXdzJyk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZWRlZmluZSB2aWV3J3MgY2hp
bGRWaWV3cyBwcm9wZXJ0eSB0aGF0IHdhcyBvYmxpdGVyYXRlZAotICAgICAgICAgICAgICAgIGRl
ZmluZVByb3BlcnR5KHRoaXMsICdjaGlsZFZpZXdzJywgVmlldy5jaGlsZFZpZXdzUHJvcGVydHkp
OwotCi0gICAgICAgICAgICAgICAgdmFyIF9jaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3czsK
LQotICAgICAgICAgICAgICAgIGZvckVhY2goY2hpbGRWaWV3cywgZnVuY3Rpb24odmlld05hbWUs
IGlkeCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdmlldzsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2aWV3TmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlldyA9IGdldCh0aGlzLCB2aWV3TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2aWV3ID0gdGhpcy5jcmVhdGVDaGlsZFZpZXcodmlldyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzZXQodGhpcywgdmlld05hbWUsIHZpZXcpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IHRoaXMuY3JlYXRlQ2hpbGRW
aWV3KHZpZXdOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIF9jaGlsZFZpZXdzW2lkeF0gPSB2aWV3OwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwot
Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWaWV3ID0gZ2V0KHRoaXMsICdjdXJyZW50Vmll
dycpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmlldykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIV9jaGlsZFZpZXdzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
X2NoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3cy5zbGljZSgp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF9jaGlsZFZpZXdz
LnB1c2godGhpcy5jcmVhdGVDaGlsZFZpZXcoY3VycmVudFZpZXcpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZXBsYWNlOiBmdW5jdGlvbihpZHgs
IHJlbW92ZWRDb3VudCwgYWRkZWRWaWV3cykgewotICAgICAgICAgICAgICAgIHZhciBhZGRlZENv
dW50ID0gYWRkZWRWaWV3cyA/IGdldChhZGRlZFZpZXdzLCAnbGVuZ3RoJykgOiAwOwotICAgICAg
ICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQo
IllvdSBjYW4ndCBhZGQgYSBjaGlsZCB0byBhIGNvbnRhaW5lciAtIHRoZSBjaGlsZCBpcyBhbHJl
YWR5IGEgY2hpbGQgb2YgYW5vdGhlciB2aWV3IiwgZW1iZXJBKGFkZGVkVmlld3MpLmV2ZXJ5KGZ1
bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFnZXQoaXRlbSwgJ19w
YXJlbnRWaWV3JykgfHwgZ2V0KGl0ZW0sICdfcGFyZW50VmlldycpID09PSBzZWxmOwotICAgICAg
ICAgICAgICAgIH0pKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlDb250ZW50V2lsbENo
YW5nZShpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRDb3VudCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5jaGlsZFZpZXdzV2lsbENoYW5nZSh0aGlzLl9jaGlsZFZpZXdzLCBpZHgsIHJlbW92ZWRDb3Vu
dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWRkZWRDb3VudCA9PT0gMCkgewotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9jaGlsZFZpZXdzLnNwbGljZShpZHgsIHJlbW92ZWRDb3VudCkgOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
W2lkeCwgcmVtb3ZlZENvdW50XS5jb25jYXQoYWRkZWRWaWV3cyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhZGRlZFZpZXdzLmxlbmd0aCAmJiAhdGhpcy5fY2hpbGRWaWV3cy5sZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZp
ZXdzLnNsaWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fY2hpbGRWaWV3cy5zcGxpY2UuYXBwbHkodGhpcy5fY2hpbGRWaWV3cywgYXJncyk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5hcnJheUNvbnRlbnREaWRD
aGFuZ2UoaWR4LCByZW1vdmVkQ291bnQsIGFkZGVkQ291bnQpOwotICAgICAgICAgICAgICAgIHRo
aXMuY2hpbGRWaWV3c0RpZENoYW5nZSh0aGlzLl9jaGlsZFZpZXdzLCBpZHgsIHJlbW92ZWRDb3Vu
dCwgYWRkZWRDb3VudCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIG9iamVjdEF0OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRWaWV3c1tpZHhdOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgbGVuZ3RoOiBjb21wdXRlZChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2NoaWxkVmlld3MubGVuZ3RoOwotICAgICAgICAgICAgfSlbInZvbGF0
aWxlIl0oKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEluc3RydWN0
cyBlYWNoIGNoaWxkIHZpZXcgdG8gcmVuZGVyIHRvIHRoZSBwYXNzZWQgcmVuZGVyIGJ1ZmZlci4K
LQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIHJlbmRlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLlJlbmRlckJ1ZmZl
cn0gYnVmZmVyIHRoZSBidWZmZXIgdG8gcmVuZGVyIHRvCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLmZvckVhY2hDaGlsZFZpZXcoZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAg
ICB2aWV3LnJlbmRlclRvQnVmZmVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBpbnN0cnVtZW50TmFtZTogJ2NvbnRhaW5lcicsCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBXaGVuIGEgY2hpbGQgdmlldyBp
cyByZW1vdmVkLCBkZXN0cm95IGl0cyBlbGVtZW50IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAg
ICAgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uCi0KLSAgICAgICAgICAgICAgICAgICAgVGhl
IGFycmF5IG9ic2VydmVyIHRoYXQgdHJpZ2dlcnMgdGhpcyBhY3Rpb24gaXMgc2V0IHVwIGluIHRo
ZQotICAgICAgICAgICAgICAgICAgICBgcmVuZGVyVG9CdWZmZXJgIG1ldGhvZC4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNoaWxk
Vmlld3NXaWxsQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuQXJyYXl9
IHZpZXdzIHRoZSBjaGlsZCB2aWV3cyBhcnJheSBiZWZvcmUgbXV0YXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUg
bXV0YXRpb24KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZWQgdGhl
IG51bWJlciBvZiBjaGlsZCB2aWV3cyByZW1vdmVkCi0gICAgICAgICAgICAgICAgICAqKi8KLSAg
ICAgICAgICAgIGNoaWxkVmlld3NXaWxsQ2hhbmdlOiBmdW5jdGlvbih2aWV3cywgc3RhcnQsIHJl
bW92ZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5V2lsbENoYW5nZSgnY2hpbGRW
aWV3cycpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlbW92ZWQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBjaGFuZ2VkVmlld3MgPSB2aWV3cy5zbGljZShzdGFydCwgc3RhcnQgKyBy
ZW1vdmVkKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiB0byBwcmVSZW5kZXIg
YmVmb3JlIGNsZWFyaW5nIHBhcmVudFZpZXcKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJy
ZW50U3RhdGUuY2hpbGRWaWV3c1dpbGxDaGFuZ2UodGhpcywgdmlld3MsIHN0YXJ0LCByZW1vdmVk
KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld3MoY2hhbmdlZFZpZXdz
LCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnJlbW92ZU9iamVjdChjaGlsZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgV2hl
biBhIGNoaWxkIHZpZXcgaXMgYWRkZWQsIG1ha2Ugc3VyZSB0aGUgRE9NIGdldHMgdXBkYXRlZCBh
cHByb3ByaWF0ZWx5LgotCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSB2aWV3IGhhcyBhbHJl
YWR5IHJlbmRlcmVkIGFuIGVsZW1lbnQsIHdlIHRlbGwgdGhlIGNoaWxkIHZpZXcgdG8KLSAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlIGFuIGVsZW1lbnQgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBE
T00uIElmIHRoZSBlbmNsb3NpbmcgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgIHZpZXcg
aGFzIGFscmVhZHkgd3JpdHRlbiB0byBhIGJ1ZmZlciwgYnV0IG5vdCB5ZXQgY29udmVydGVkIHRo
YXQgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgIGludG8gYW4gZWxlbWVudCwgd2UgaW5zZXJ0
IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoaWxkIGludG8gdGhlCi0gICAgICAg
ICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBidWZmZXIuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjaGlsZFZp
ZXdzRGlkQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuQXJyYXl9IHZp
ZXdzIHRoZSBhcnJheSBvZiBjaGlsZCB2aWV3cyBhZnRlciB0aGUgbXV0YXRpb24gaGFzIG9jY3Vy
cmVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBzdGFydCB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgdGhlIG11dGF0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVt
YmVyfSByZW1vdmVkIHRoZSBudW1iZXIgb2YgY2hpbGQgdmlld3MgcmVtb3ZlZAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gYWRkZWQgdGhlIG51bWJlciBvZiBjaGlsZCB2aWV3
cyBhZGRlZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNoaWxkVmlld3NEaWRD
aGFuZ2U6IGZ1bmN0aW9uKHZpZXdzLCBzdGFydCwgcmVtb3ZlZCwgYWRkZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWRkZWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2Vk
Vmlld3MgPSB2aWV3cy5zbGljZShzdGFydCwgc3RhcnQgKyBhZGRlZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdzKGNoYW5nZWRWaWV3cywgdGhpcywgZ2V0KHRoaXMs
ICd0ZW1wbGF0ZURhdGEnKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRl
LmNoaWxkVmlld3NEaWRDaGFuZ2UodGhpcywgdmlld3MsIHN0YXJ0LCBhZGRlZCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlEaWRDaGFuZ2UoJ2NoaWxk
Vmlld3MnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGluaXRpYWxpemVWaWV3czog
ZnVuY3Rpb24odmlld3MsIHBhcmVudFZpZXcsIHRlbXBsYXRlRGF0YSkgewotICAgICAgICAgICAg
ICAgIGZvckVhY2godmlld3MsIGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAg
c2V0KHZpZXcsICdfcGFyZW50VmlldycsIHBhcmVudFZpZXcpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghdmlldy5jb250YWluZXIgJiYgcGFyZW50VmlldykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0KHZpZXcsICdjb250YWluZXInLCBwYXJlbnRWaWV3LmNvbnRhaW5lcik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWdldCh2aWV3
LCAndGVtcGxhdGVEYXRhJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCh2aWV3LCAn
dGVtcGxhdGVEYXRhJywgdGVtcGxhdGVEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY3VycmVudFZp
ZXc6IG51bGwsCi0KLSAgICAgICAgICAgIF9jdXJyZW50Vmlld1dpbGxDaGFuZ2U6IGJlZm9yZU9i
c2VydmVyKCdjdXJyZW50VmlldycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBj
dXJyZW50VmlldyA9IGdldCh0aGlzLCAnY3VycmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXcuZGVzdHJv
eSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBf
Y3VycmVudFZpZXdEaWRDaGFuZ2U6IG9ic2VydmVyKCdjdXJyZW50VmlldycsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmlldyA9IGdldCh0aGlzLCAnY3VycmVudFZp
ZXcnKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZpZXcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gc2V0IGEgY3VycmVudCB2aWV3IHRoYXQg
YWxyZWFkeSBoYXMgYSBwYXJlbnQuIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBv
dXRsZXRzIGluIHRoZSBzYW1lIHZpZXcuIiwgIWdldChjdXJyZW50VmlldywgJ19wYXJlbnRWaWV3
JykpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hPYmplY3QoY3VycmVudFZpZXcpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfZW5zdXJl
Q2hpbGRyZW5BcmVJbkRPTTogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHRoaXMuY3Vy
cmVudFN0YXRlLmVuc3VyZUNoaWxkcmVuQXJlSW5ET00odGhpcyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIG1lcmdlKHN0YXRlcy5fZGVmYXVsdCwgewotICAgICAgICAg
ICAgY2hpbGRWaWV3c1dpbGxDaGFuZ2U6IEVtYmVyLkssCi0gICAgICAgICAgICBjaGlsZFZpZXdz
RGlkQ2hhbmdlOiBFbWJlci5LLAotICAgICAgICAgICAgZW5zdXJlQ2hpbGRyZW5BcmVJbkRPTTog
RW1iZXIuSwotICAgICAgICB9KTsKLQotICAgICAgICBtZXJnZShzdGF0ZXMuaW5CdWZmZXIsIHsK
LSAgICAgICAgICAgIGNoaWxkVmlld3NEaWRDaGFuZ2U6IGZ1bmN0aW9uKHBhcmVudFZpZXcsIHZp
ZXdzLCBzdGFydCwgYWRkZWQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJv
cignWW91IGNhbm5vdCBtb2RpZnkgY2hpbGQgdmlld3Mgd2hpbGUgaW4gdGhlIGluQnVmZmVyIHN0
YXRlJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG1lcmdlKHN0YXRl
cy5oYXNFbGVtZW50LCB7Ci0gICAgICAgICAgICBjaGlsZFZpZXdzV2lsbENoYW5nZTogZnVuY3Rp
b24odmlldywgdmlld3MsIHN0YXJ0LCByZW1vdmVkKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyByZW1vdmVkOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmlld3NbaV0ucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgY2hpbGRWaWV3c0RpZENoYW5nZTogZnVuY3Rpb24odmlldywgdmll
d3MsIHN0YXJ0LCBhZGRlZCkgewotICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ3Jl
bmRlcicsIHZpZXcsICdfZW5zdXJlQ2hpbGRyZW5BcmVJbkRPTScpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgZW5zdXJlQ2hpbGRyZW5BcmVJbkRPTTogZnVuY3Rpb24odmlldykgewot
ICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gdmlldy5fY2hpbGRWaWV3cywgaSwgbGVu
LCBjaGlsZFZpZXcsIHByZXZpb3VzLCBidWZmZXIsIHZpZXdDb2xsZWN0aW9uID0gbmV3IFZpZXdD
b2xsZWN0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBjaGlsZFZp
ZXdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkVmll
dyA9IGNoaWxkVmlld3NbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHJlbmRlckJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyLl9oYXNFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWaWV3LnJlbmRlclRv
QnVmZmVySWZOZWVkZWQoYnVmZmVyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlld0Nv
bGxlY3Rpb24ucHVzaChjaGlsZFZpZXcpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHZpZXdDb2xsZWN0aW9uLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
Vmlld0NvbGxlY3Rpb24odmlldywgdmlld0NvbGxlY3Rpb24sIHByZXZpb3VzLCBidWZmZXIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZpb3VzID0gY2hpbGRWaWV3OwotICAgICAgICAgICAgICAgICAgICAgICAgdmll
d0NvbGxlY3Rpb24uY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY2hpbGRWaWV3OwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHZpZXdDb2xs
ZWN0aW9uLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRWaWV3Q29sbGVjdGlv
bih2aWV3LCB2aWV3Q29sbGVjdGlvbiwgcHJldmlvdXMsIGJ1ZmZlcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBpbnNl
cnRWaWV3Q29sbGVjdGlvbih2aWV3LCB2aWV3Q29sbGVjdGlvbiwgcHJldmlvdXMsIGJ1ZmZlcikg
ewotICAgICAgICAgICAgdmlld0NvbGxlY3Rpb24udHJpZ2dlclJlY3Vyc2l2ZWx5KCd3aWxsSW5z
ZXJ0RWxlbWVudCcpOwotCi0gICAgICAgICAgICBpZiAocHJldmlvdXMpIHsKLSAgICAgICAgICAg
ICAgICBwcmV2aW91cy5kb21NYW5hZ2VyLmFmdGVyKHByZXZpb3VzLCBidWZmZXIuc3RyaW5nKCkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2aWV3LmRvbU1hbmFnZXIu
cHJlcGVuZCh2aWV3LCBidWZmZXIuc3RyaW5nKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2aWV3Q29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsKLSAgICAgICAgICAgICAg
ICB2Ll90cmFuc2l0aW9uVG8oJ2luRE9NJyk7Ci0gICAgICAgICAgICAgICAgdi5wcm9wZXJ0eURp
ZENoYW5nZSgnZWxlbWVudCcpOwotICAgICAgICAgICAgICAgIHYudHJpZ2dlclJlY3Vyc2l2ZWx5
KCdkaWRJbnNlcnRFbGVtZW50Jyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IENvbnRhaW5lclZpZXc7Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9jb3JlX3ZpZXciLAotICAgIFsiZW1iZXItdmll
d3Mvdmlld3Mvc3RhdGVzIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJlbWJlci1y
dW50aW1lL21peGlucy9ldmVudGVkIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5k
bGVyIiwgImVtYmVyLW1ldGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJl
bWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9pbnN0cnVtZW50YXRpb24iLCAiZW1iZXIt
dmlld3Mvc3lzdGVtL3JlbmRlcl9idWZmZXIiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdf
XywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9f
ZGVwZW5kZW5jeTExX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAgICAgdmFyIGNsb25lU3RhdGVzID0gX19kZXBlbmRlbmN5MV9fLmNsb25lU3RhdGVzOwotICAg
ICAgICB2YXIgc3RhdGVzID0gX19kZXBlbmRlbmN5MV9fLnN0YXRlczsKLSAgICAgICAgdmFyIEVt
YmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFdmVu
dGVkID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBBY3Rpb25IYW5k
bGVyID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIGRlZmluZVBy
b3BlcnR5ID0gX19kZXBlbmRlbmN5NV9fLmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgZGVw
cmVjYXRlUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k1X18uZGVwcmVjYXRlUHJvcGVydHk7Ci0gICAg
ICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k2X18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19k
ZXBlbmRlbmN5N19fLnNldDsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5OF9f
LmNvbXB1dGVkOwotCi0gICAgICAgIHZhciB0eXBlT2YgPSBfX2RlcGVuZGVuY3k5X18udHlwZU9m
OwotCi0gICAgICAgIHZhciBpbnN0cnVtZW50ID0gX19kZXBlbmRlbmN5MTBfXy5pbnN0cnVtZW50
OwotCi0KLSAgICAgICAgdmFyIHJlbmRlckJ1ZmZlciA9IF9fZGVwZW5kZW5jeTExX19bImRlZmF1
bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLkNvcmVWaWV3YCBpcyBh
biBhYnN0cmFjdCBjbGFzcyB0aGF0IGV4aXN0cyB0byBnaXZlIHZpZXctbGlrZSBiZWhhdmlvcgot
ICAgICAgICAgICAgICB0byBib3RoIEVtYmVyJ3MgbWFpbiB2aWV3IGNsYXNzIGBFbWJlci5WaWV3
YCBhbmQgb3RoZXIgY2xhc3NlcyBsaWtlCi0gICAgICAgICAgICAgIGBFbWJlci5fU2ltcGxlTWV0
YW1vcnBoVmlld2AgdGhhdCBkb24ndCBuZWVkIHRoZSBmdWxseSBmdW5jdGlvbmFsdGl5IG9mCi0g
ICAgICAgICAgICAgIGBFbWJlci5WaWV3YC4KLQotICAgICAgICAgICAgICBVbmxlc3MgeW91IGhh
dmUgc3BlY2lmaWMgbmVlZHMgZm9yIGBDb3JlVmlld2AsIHlvdSB3aWxsIHVzZSBgRW1iZXIuVmll
d2AKLSAgICAgICAgICAgICAgaW4geW91ciBhcHBsaWNhdGlvbnMuCi0KLSAgICAgICAgICAgICAg
QGNsYXNzIENvcmVWaWV3Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAg
ICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLkV2
ZW50ZWQKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuQWN0aW9uSGFuZGxlcgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgdmFyIENvcmVWaWV3ID0gRW1iZXJPYmplY3QuZXh0ZW5kKEV2ZW50ZWQs
IEFjdGlvbkhhbmRsZXIsIHsKLSAgICAgICAgICAgIGlzVmlldzogdHJ1ZSwKLQotICAgICAgICAg
ICAgX3N0YXRlczogY2xvbmVTdGF0ZXMoc3RhdGVzKSwKLQotICAgICAgICAgICAgaW5pdDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLl90cmFuc2l0aW9uVG8oJ3ByZVJlbmRlcicpOwotICAgICAgICAgICAgICAgIHRoaXMu
X2lzVmlzaWJsZSA9IGdldCh0aGlzLCAnaXNWaXNpYmxlJyk7Ci0KLSAgICAgICAgICAgICAgICBk
ZXByZWNhdGVQcm9wZXJ0eSh0aGlzLCAnc3RhdGVzJywgJ19zdGF0ZXMnKTsKLSAgICAgICAgICAg
ICAgICBkZXByZWNhdGVQcm9wZXJ0eSh0aGlzLCAnc3RhdGUnLCAnX3N0YXRlJyk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHZp
ZXcgaXMgY3VycmVudGx5IGluc2VydGVkIGludG8gdGhlIERPTSBvZiBhIHBhcmVudCB2aWV3LCB0
aGlzCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IHdpbGwgcG9pbnQgdG8gdGhlIHBhcmVu
dCBvZiB0aGUgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcGFyZW50Vmll
dwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwYXJl
bnRWaWV3OiBjb21wdXRlZCgnX3BhcmVudFZpZXcnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgcGFyZW50ID0gdGhpcy5fcGFyZW50VmlldzsKLQotICAgICAgICAgICAgICAgIGlm
IChwYXJlbnQgJiYgcGFyZW50LmlzVmlydHVhbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2V0KHBhcmVudCwgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBfc3RhdGU6IG51bGwsCi0KLSAgICAgICAgICAg
IF9wYXJlbnRWaWV3OiBudWxsLAotCi0gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGN1cnJlbnQg
dmlldywgbm90IGluY2x1ZGluZyB2aXJ0dWFsIHZpZXdzCi0gICAgICAgICAgICBjb25jcmV0ZVZp
ZXc6IGNvbXB1dGVkKCdwYXJlbnRWaWV3JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmlzVmlydHVhbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0
KHRoaXMsICdwYXJlbnRWaWV3LmNvbmNyZXRlVmlldycpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBpbnN0cnVtZW50TmFtZTogJ2NvcmVfdmlldycs
Ci0KLSAgICAgICAgICAgIGluc3RydW1lbnREZXRhaWxzOiBmdW5jdGlvbihoYXNoKSB7Ci0gICAg
ICAgICAgICAgICAgaGFzaC5vYmplY3QgPSB0aGlzLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgaGFzaC5jb250YWluZXJLZXkgPSB0aGlzLl9kZWJ1Z0NvbnRhaW5lcktleTsKLSAgICAgICAg
ICAgICAgICBoYXNoLnZpZXcgPSB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEludm9rZWQgYnkgdGhlIHZpZXcgc3lzdGVtIHdoZW4g
dGhpcyB2aWV3IG5lZWRzIHRvIHByb2R1Y2UgYW4gSFRNTAotICAgICAgICAgICAgICAgICAgICBy
ZXByZXNlbnRhdGlvbi4gVGhpcyBtZXRob2Qgd2lsbCBjcmVhdGUgYSBuZXcgcmVuZGVyIGJ1ZmZl
ciwgaWYgbmVlZGVkLAotICAgICAgICAgICAgICAgICAgICB0aGVuIGFwcGx5IGFueSBkZWZhdWx0
IGF0dHJpYnV0ZXMsIHN1Y2ggYXMgY2xhc3MgbmFtZXMgYW5kIHZpc2liaWxpdHkuCi0gICAgICAg
ICAgICAgICAgICAgIEZpbmFsbHksIHRoZSBgcmVuZGVyKClgIG1ldGhvZCBpcyBpbnZva2VkLCB3
aGljaCBpcyByZXNwb25zaWJsZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgZG9pbmcgdGhlIGJ1
bGsgb2YgdGhlIHJlbmRlcmluZy4KLQotICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5v
dCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kOyBpbnN0ZWFkLCBpbXBsZW1lbnQgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIGB0ZW1wbGF0ZWAgcHJvcGVydHksIG9yIGlmIHlvdSBuZWVkIG1v
cmUgY29udHJvbCwgb3ZlcnJpZGUgdGhlIGByZW5kZXJgCi0gICAgICAgICAgICAgICAgICAgIG1l
dGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbmRlclRvQnVmZmVyCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIgdGhlIHJl
bmRlciBidWZmZXIuIElmIG5vIGJ1ZmZlciBpcwotICAgICAgICAgICAgICAgICAgICAgIHBhc3Nl
ZCwgYSBkZWZhdWx0IGJ1ZmZlciwgdXNpbmcgdGhlIGN1cnJlbnQgdmlldydzIGB0YWdOYW1lYCwg
d2lsbAotICAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQuCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVuZGVyVG9CdWZm
ZXI6IGZ1bmN0aW9uKGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gJ3JlbmRl
ci4nICsgdGhpcy5pbnN0cnVtZW50TmFtZSwKLSAgICAgICAgICAgICAgICBkZXRhaWxzID0ge307
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmluc3RydW1lbnREZXRhaWxzKGRldGFpbHMpOwotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnQobmFtZSwgZGV0YWlscywgZnVuY3Rpb24g
aW5zdHJ1bWVudFJlbmRlclRvQnVmZmVyKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fcmVuZGVyVG9CdWZmZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9yZW5kZXJUb0J1ZmZlcjogZnVuY3Rpb24o
X2J1ZmZlcikgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHRvcC1tb3N0IHZp
ZXcsIHN0YXJ0IGEgbmV3IGJ1ZmZlci4gT3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgIC8vIGNy
ZWF0ZSBhIG5ldyBidWZmZXIgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbmFsIHVzaW5nIHRoZQotICAg
ICAgICAgICAgICAgIC8vIHByb3ZpZGVkIGJ1ZmZlciBvcGVyYXRpb24gKGZvciBleGFtcGxlLCBg
aW5zZXJ0QWZ0ZXJgIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBpbnNlcnQgYSBuZXcgYnVmZmVy
IGFmdGVyIHRoZSAicGFyZW50IGJ1ZmZlciIpLgotICAgICAgICAgICAgICAgIHZhciB0YWdOYW1l
ID0gdGhpcy50YWdOYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT09IG51bGwg
fHwgdGFnTmFtZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhZ05hbWUg
PSAnZGl2JzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgYnVmZmVy
ID0gdGhpcy5idWZmZXIgPSBfYnVmZmVyICYmIF9idWZmZXIuYmVnaW4odGFnTmFtZSkgfHwgcmVu
ZGVyQnVmZmVyKHRhZ05hbWUpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25Ubygn
aW5CdWZmZXInLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbmRlcihi
dWZmZXIpOwotICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKGJ1ZmZlcik7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5hZnRlclJlbmRlcihidWZmZXIpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGJ1ZmZlcjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBPdmVycmlkZSB0aGUgZGVmYXVsdCBldmVudCBmaXJpbmcgZnJvbSBgRW1iZXIuRXZl
bnRlZGAgdG8KLSAgICAgICAgICAgICAgICAgICAgYWxzbyBjYWxsIG1ldGhvZHMgd2l0aCB0aGUg
Z2l2ZW4gbmFtZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRyaWdnZXIKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIG5hbWUge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0cmlnZ2VyOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXJndW1lbnRzWzBdOwotICAgICAgICAg
ICAgICAgIHZhciBtZXRob2QgPSB0aGlzW25hbWVdOwotICAgICAgICAgICAgICAgIGlmIChtZXRo
b2QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCAtIDEpOwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5
KHRoaXMsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIGRlcHJlY2F0ZWRTZW5kSGFuZGxlczogZnVuY3Rpb24oYWN0aW9uTmFtZSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiAhIXRoaXNbYWN0aW9uTmFtZV07Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBkZXByZWNhdGVkU2VuZDogZnVuY3Rpb24oYWN0aW9uTmFtZSkgewotICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnJyArIHRoaXMgKyAiIGhhcyB0aGUgYWN0aW9uICIg
KyBhY3Rpb25OYW1lICsgIiBidXQgaXQgaXMgbm90IGEgZnVuY3Rpb24iLCB0eXBlb2YgdGhpc1th
Y3Rpb25OYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVj
YXRlKCdBY3Rpb24gaGFuZGxlcnMgaW1wbGVtZW50ZWQgZGlyZWN0bHkgb24gdmlld3MgYXJlIGRl
cHJlY2F0ZWQgaW4gZmF2b3Igb2YgYWN0aW9uIGhhbmRsZXJzIG9uIGFuIGBhY3Rpb25zYCBvYmpl
Y3QgKCBhY3Rpb246IGAnICsgYWN0aW9uTmFtZSArICdgIG9uICcgKyB0aGlzICsgJyknLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgdGhpc1thY3Rpb25OYW1lXS5hcHBseSh0aGlzLCBhcmdzKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBo
YXM6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZU9mKHRoaXNb
bmFtZV0pID09PSAnZnVuY3Rpb24nIHx8IHRoaXMuX3N1cGVyKG5hbWUpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHBhcmVudCA9IHRoaXMuX3BhcmVudFZpZXc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX3N1cGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGRlc3Ryb3kgdGhlIGVsZW1lbnQgLS0gdGhpcyB3
aWxsIGF2b2lkIGVhY2ggY2hpbGQgdmlldyBkZXN0cm95aW5nCi0gICAgICAgICAgICAgICAgLy8g
dGhlIGVsZW1lbnQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4uLgotICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5yZW1vdmVkRnJvbURPTSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lF
bGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gcmVtb3Zl
IGZyb20gcGFyZW50IGlmIGZvdW5kLiBEb24ndCBjYWxsIHJlbW92ZUZyb21QYXJlbnQsCi0gICAg
ICAgICAgICAgICAgLy8gYXMgcmVtb3ZlRnJvbVBhcmVudCB3aWxsIHRyeSB0byByZW1vdmUgdGhl
IGVsZW1lbnQgZnJvbQotICAgICAgICAgICAgICAgIC8vIHRoZSBET00gYWdhaW4uCi0gICAgICAg
ICAgICAgICAgaWYgKHBhcmVudCkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnQucmVtb3Zl
Q2hpbGQodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5f
dHJhbnNpdGlvblRvKCdkZXN0cm95aW5nJywgZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjbGVhclJlbmRlcmVkQ2hp
bGRyZW46IEVtYmVyLkssCi0gICAgICAgICAgICB0cmlnZ2VyUmVjdXJzaXZlbHk6IEVtYmVyLkss
Ci0gICAgICAgICAgICBpbnZva2VSZWN1cnNpdmVseTogRW1iZXIuSywKLSAgICAgICAgICAgIF90
cmFuc2l0aW9uVG86IEVtYmVyLkssCi0gICAgICAgICAgICBkZXN0cm95RWxlbWVudDogRW1iZXIu
SwotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29yZVZp
ZXc7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMiLAotICAg
IFsiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItdmll
d3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiLCAiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL3ByZV9y
ZW5kZXIiLCAiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2luX2J1ZmZlciIsICJlbWJlci12aWV3
cy92aWV3cy9zdGF0ZXMvaGFzX2VsZW1lbnQiLCAiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2lu
X2RvbSIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVzdHJveWluZyIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZf
XywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTFfXy5j
cmVhdGU7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgX2RlZmF1bHQgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIHByZVJlbmRlciA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgaW5CdWZmZXIgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGhh
c0VsZW1lbnQgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGluRE9N
ID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBkZXN0cm95aW5nID0g
X19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgZnVuY3Rpb24gY2xvbmVTdGF0
ZXMoZnJvbSkgewotICAgICAgICAgICAgdmFyIGludG8gPSB7fTsKLQotICAgICAgICAgICAgaW50
by5fZGVmYXVsdCA9IHt9OwotICAgICAgICAgICAgaW50by5wcmVSZW5kZXIgPSBjcmVhdGUoaW50
by5fZGVmYXVsdCk7Ci0gICAgICAgICAgICBpbnRvLmRlc3Ryb3lpbmcgPSBjcmVhdGUoaW50by5f
ZGVmYXVsdCk7Ci0gICAgICAgICAgICBpbnRvLmluQnVmZmVyID0gY3JlYXRlKGludG8uX2RlZmF1
bHQpOwotICAgICAgICAgICAgaW50by5oYXNFbGVtZW50ID0gY3JlYXRlKGludG8uX2RlZmF1bHQp
OwotICAgICAgICAgICAgaW50by5pbkRPTSA9IGNyZWF0ZShpbnRvLmhhc0VsZW1lbnQpOwotCi0g
ICAgICAgICAgICBmb3IgKHZhciBzdGF0ZU5hbWUgaW4gZnJvbSkgewotICAgICAgICAgICAgICAg
IGlmICghZnJvbS5oYXNPd25Qcm9wZXJ0eShzdGF0ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZXJnZShp
bnRvW3N0YXRlTmFtZV0sIGZyb21bc3RhdGVOYW1lXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJldHVybiBpbnRvOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uY2xv
bmVTdGF0ZXMgPSBjbG9uZVN0YXRlczsKLSAgICAgICAgdmFyIHN0YXRlcyA9IHsKLSAgICAgICAg
ICAgIF9kZWZhdWx0OiBfZGVmYXVsdCwKLSAgICAgICAgICAgIHByZVJlbmRlcjogcHJlUmVuZGVy
LAotICAgICAgICAgICAgaW5ET006IGluRE9NLAotICAgICAgICAgICAgaW5CdWZmZXI6IGluQnVm
ZmVyLAotICAgICAgICAgICAgaGFzRWxlbWVudDogaGFzRWxlbWVudCwKLSAgICAgICAgICAgIGRl
c3Ryb3lpbmc6IGRlc3Ryb3lpbmcKLSAgICAgICAgfTsKLSAgICAgICAgX19leHBvcnRzX18uc3Rh
dGVzID0gc3RhdGVzOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvc3Rh
dGVzL2RlZmF1bHQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3J1bl9s
b29wIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVu
Y3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgLy8gRW1iZXIuSwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsK
LSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBydW4g
PSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBf
X2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAg
ICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSB7Ci0gICAgICAgICAgICAv
LyBhcHBlbmRDaGlsZCBpcyBvbmx5IGxlZ2FsIHdoaWxlIHJlbmRlcmluZyB0aGUgYnVmZmVyLgot
ICAgICAgICAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFbWJlckVycm9yKCJZb3UgY2FuJ3QgdXNlIGFwcGVuZENoaWxkIG91dHNpZGUgb2Yg
dGhlIHJlbmRlcmluZyBwcm9jZXNzIik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAk
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgZ2V0RWxlbWVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBI
YW5kbGUgZXZlbnRzIGZyb20gYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAKLSAgICAgICAgICAgIGhh
bmRsZUV2ZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
Y29udGludWUgZXZlbnQgcHJvcGFnYXRpb24KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGRlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgc2V0KHZp
ZXcsICdlbGVtZW50JywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZpZXcuX3NjaGVkdWxl
ZEluc2VydCkgewotICAgICAgICAgICAgICAgICAgICBydW4uY2FuY2VsKHZpZXcuX3NjaGVkdWxl
ZEluc2VydCk7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcuX3NjaGVkdWxlZEluc2VydCA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVuZGVyVG9CdWZmZXJJZk5lZWRlZDogZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHJlcmVuZGVyOiBFbWJlci5LLAotICAgICAgICAgICAgaW52b2tlT2JzZXJ2
ZXI6IEVtYmVyLksKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdz
L3ZpZXdzL3N0YXRlcy9kZXN0cm95aW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL21lcmdlIiwgImVt
YmVyLW1ldGFsL3BsYXRmb3JtIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJl
ci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCIsICJlbWJlci1tZXRhbC9lcnJvciIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3ky
X18uY3JlYXRlOwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5M19fLmZtdDsKLSAgICAg
ICAgdmFyIF9kZWZhdWx0ID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8qKgot
ICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci12
aWV3cwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgZGVzdHJveWluZ0Vycm9yID0gIllv
dSBjYW4ndCBjYWxsICVAIG9uIGEgdmlldyBiZWluZyBkZXN0cm95ZWQiOwotCi0gICAgICAgIHZh
ciBkZXN0cm95aW5nID0gY3JlYXRlKF9kZWZhdWx0KTsKLQotICAgICAgICBtZXJnZShkZXN0cm95
aW5nLCB7Ci0gICAgICAgICAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoZm10KGRlc3Ryb3lpbmdFcnJvciwgWydhcHBlbmRD
aGlsZCddKSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcmVyZW5kZXI6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKGZtdChkZXN0cm95aW5n
RXJyb3IsIFsncmVyZW5kZXInXSkpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGRlc3Ry
b3lFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJF
cnJvcihmbXQoZGVzdHJveWluZ0Vycm9yLCBbJ2Rlc3Ryb3lFbGVtZW50J10pKTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVtYmVyRXJyb3IoZm10KGRlc3Ryb3lpbmdFcnJvciwgWydlbXB0eSddKSk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzZXRFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihmbXQoZGVzdHJveWluZ0Vycm9yLCBb
InNldCgnZWxlbWVudCcsIC4uLikiXSkpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
cmVuZGVyVG9CdWZmZXJJZk5lZWRlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gU2luY2UgZWxlbWVu
dCBpbnNlcnRpb24gaXMgc2NoZWR1bGVkLCBkb24ndCBkbyBhbnl0aGluZyBpZgotICAgICAgICAg
ICAgLy8gdGhlIHZpZXcgaGFzIGJlZW4gZGVzdHJveWVkIGJldHdlZW4gc2NoZWR1bGluZyBhbmQg
ZXhlY3V0aW9uCi0gICAgICAgICAgICBpbnNlcnRFbGVtZW50OiBFbWJlci5LCi0gICAgICAgIH0p
OwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBkZXN0cm95aW5nOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50IiwKLSAg
ICBbImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0IiwgImVtYmVyLW1ldGFsL3J1bl9s
b29wIiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwgImVtYmVy
LXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywg
X19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIF9kZWZhdWx0ID0gX19kZXBlbmRlbmN5MV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAg
IHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3k0X18uY3JlYXRlOwotICAgICAgICB2YXIgalF1ZXJ5
ID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0g
X19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAg
ICAgICAqLwotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k3X18uZ2V0OwotICAgICAg
ICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5OF9fLnNldDsKLQotICAgICAgICB2YXIgaGFzRWxlbWVu
dCA9IGNyZWF0ZShfZGVmYXVsdCk7Ci0KLSAgICAgICAgbWVyZ2UoaGFzRWxlbWVudCwgewotICAg
ICAgICAgICAgJDogZnVuY3Rpb24odmlldywgc2VsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVs
ZW0gPSBnZXQodmlldywgJ2VsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsID8g
alF1ZXJ5KHNlbCwgZWxlbSkgOiBqUXVlcnkoZWxlbSk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBnZXRFbGVtZW50OiBmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHBhcmVudCA9IGdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAgICAgICAgICAgIGlmIChw
YXJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZ2V0KHBhcmVudCwgJ2VsZW1l
bnQnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5maW5kRWxlbWVudEluUGFyZW50RWxlbWVu
dChwYXJlbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5KCIjIiArIGdldCh2aWV3LCAnZWxlbWVudElkJykpWzBdOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgc2V0RWxlbWVudDogZnVuY3Rpb24odmlldywgdmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5f
dHJhbnNpdGlvblRvKCdwcmVSZW5kZXInKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiWW91IGNhbm5vdCBzZXQgYW4g
ZWxlbWVudCB0byBhIG5vbi1udWxsIHZhbHVlIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBp
biB0aGUgRE9NLiIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIG9uY2UgdGhlIHZpZXcg
aGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgRE9NLCByZXJlbmRlcmluZyBpcwotICAgICAgICAg
ICAgLy8gZGVmZXJyZWQgdG8gYWxsb3cgYmluZGluZ3MgdG8gc3luY2hyb25pemUuCi0gICAgICAg
ICAgICByZXJlbmRlcjogZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgIHZpZXcudHJp
Z2dlclJlY3Vyc2l2ZWx5KCd3aWxsQ2xlYXJSZW5kZXInKTsKLQotICAgICAgICAgICAgICAgIHZp
ZXcuY2xlYXJSZW5kZXJlZENoaWxkcmVuKCk7Ci0KLSAgICAgICAgICAgICAgICB2aWV3LmRvbU1h
bmFnZXIucmVwbGFjZSh2aWV3KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIG9uY2UgdGhlIHZpZXcgaXMgYWxyZWFkeSBpbiB0
aGUgRE9NLCBkZXN0cm95aW5nIGl0IHJlbW92ZXMgaXQKLSAgICAgICAgICAgIC8vIGZyb20gdGhl
IERPTSwgbnVrZXMgaXRzIGVsZW1lbnQsIGFuZCBwdXRzIGl0IGJhY2sgaW50byB0aGUKLSAgICAg
ICAgICAgIC8vIHByZVJlbmRlciBzdGF0ZSBpZiBpbkRPTS4KLQotICAgICAgICAgICAgZGVzdHJv
eUVsZW1lbnQ6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3Ll9ub3RpZnlX
aWxsRGVzdHJveUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB2aWV3LmRvbU1hbmFnZXIucmVt
b3ZlKHZpZXcpOwotICAgICAgICAgICAgICAgIHNldCh2aWV3LCAnZWxlbWVudCcsIG51bGwpOwot
ICAgICAgICAgICAgICAgIGlmICh2aWV3Ll9zY2hlZHVsZWRJbnNlcnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcnVuLmNhbmNlbCh2aWV3Ll9zY2hlZHVsZWRJbnNlcnQpOwotICAgICAgICAgICAg
ICAgICAgICB2aWV3Ll9zY2hlZHVsZWRJbnNlcnQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGVtcHR5OiBmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmFyIF9jaGlsZFZp
ZXdzID0gdmlldy5fY2hpbGRWaWV3cywgbGVuLCBpZHg7Ci0gICAgICAgICAgICAgICAgaWYgKF9j
aGlsZFZpZXdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IF9jaGlsZFZpZXdzLmxlbmd0
aDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBfY2hpbGRWaWV3c1tpZHhdLl9ub3RpZnlXaWxsRGVz
dHJveUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB2aWV3LmRvbU1hbmFnZXIuZW1wdHkodmlldyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvLyBIYW5kbGUgZXZlbnRzIGZyb20gYEVtYmVyLkV2ZW50RGlz
cGF0Y2hlcmAKLSAgICAgICAgICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbih2aWV3LCBldmVudE5h
bWUsIGV2dCkgewotICAgICAgICAgICAgICAgIGlmICh2aWV3LmhhcyhldmVudE5hbWUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZXIgc2hvdWxkIGJlIGFibGUgdG8gcmUtZGlzcGF0
Y2ggZXZlbnRzLCBzbyB3ZSBkb24ndAotICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50RGVm
YXVsdCBvciBzdG9wUHJvcGFnYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3
LnRyaWdnZXIoZXZlbnROYW1lLCBldnQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBjb250aW51ZSBldmVudCBwcm9wYWdhdGlv
bgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGludm9r
ZU9ic2VydmVyOiBmdW5jdGlvbih0YXJnZXQsIG9ic2VydmVyKSB7Ci0gICAgICAgICAgICAgICAg
b2JzZXJ2ZXIuY2FsbCh0YXJnZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gaGFzRWxlbWVudDsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9pbl9idWZmZXIiLAotICAgIFsiZW1iZXIt
dmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXIt
bWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9tZXJnZSIs
ICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIF9kZWZhdWx0
ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0g
X19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBl
bmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAgICAgICB2
YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5NF9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIG1lcmdlID0g
X19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAg
ICAgICAqLwotCi0gICAgICAgIHZhciBpbkJ1ZmZlciA9IGNyZWF0ZShfZGVmYXVsdCk7Ci0KLSAg
ICAgICAgbWVyZ2UoaW5CdWZmZXIsIHsKLSAgICAgICAgICAgICQ6IGZ1bmN0aW9uKHZpZXcsIHNl
bCkgewotICAgICAgICAgICAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgYW4gZWxlbWVudCB5ZXQs
IHNvbWVvbmUgY2FsbGluZyB0aGlzLiQoKSBpcwotICAgICAgICAgICAgICAgIC8vIHRyeWluZyB0
byB1cGRhdGUgYW4gZWxlbWVudCB0aGF0IGlzbid0IGluIHRoZSBET00uIEluc3RlYWQsCi0gICAg
ICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIHZpZXcgdG8gYWxsb3cgdGhlIHJlbmRlciBtZXRo
b2QgdG8gcmVmbGVjdCB0aGUKLSAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzLgotICAgICAgICAg
ICAgICAgIHZpZXcucmVyZW5kZXIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuJCgp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gd2hlbiBhIHZpZXcgaXMgcmVuZGVy
ZWQgaW4gYSBidWZmZXIsIHJlcmVuZGVyaW5nIGl0IHNpbXBseQotICAgICAgICAgICAgLy8gcmVw
bGFjZXMgdGhlIGV4aXN0aW5nIGJ1ZmZlciB3aXRoIGEgbmV3IG9uZQotICAgICAgICAgICAgcmVy
ZW5kZXI6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJF
cnJvcigiU29tZXRoaW5nIHlvdSBkaWQgY2F1c2VkIGEgdmlldyB0byByZS1yZW5kZXIgYWZ0ZXIg
aXQgcmVuZGVyZWQgYnV0IGJlZm9yZSBpdCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiIpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gd2hlbiBhIHZpZXcgaXMgcmVuZGVyZWQg
aW4gYSBidWZmZXIsIGFwcGVuZGluZyBhIGNoaWxkCi0gICAgICAgICAgICAvLyB2aWV3IHdpbGwg
cmVuZGVyIHRoYXQgdmlldyBhbmQgYXBwZW5kIHRoZSByZXN1bHRpbmcKLSAgICAgICAgICAgIC8v
IGJ1ZmZlciBpbnRvIGl0cyBidWZmZXIuCi0gICAgICAgICAgICBhcHBlbmRDaGlsZDogZnVuY3Rp
b24odmlldywgY2hpbGRWaWV3LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJ1ZmZl
ciA9IHZpZXcuYnVmZmVyLCBfY2hpbGRWaWV3cyA9IHZpZXcuX2NoaWxkVmlld3M7Ci0KLSAgICAg
ICAgICAgICAgICBjaGlsZFZpZXcgPSB2aWV3LmNyZWF0ZUNoaWxkVmlldyhjaGlsZFZpZXcsIG9w
dGlvbnMpOwotICAgICAgICAgICAgICAgIGlmICghX2NoaWxkVmlld3MubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIF9jaGlsZFZpZXdzID0gdmlldy5fY2hpbGRWaWV3cyA9IF9jaGlsZFZp
ZXdzLnNsaWNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIF9jaGlsZFZp
ZXdzLnB1c2goY2hpbGRWaWV3KTsKLQotICAgICAgICAgICAgICAgIGNoaWxkVmlldy5yZW5kZXJU
b0J1ZmZlcihidWZmZXIpOwotCi0gICAgICAgICAgICAgICAgdmlldy5wcm9wZXJ0eURpZENoYW5n
ZSgnY2hpbGRWaWV3cycpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmlldzsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIHdoZW4gYSB2aWV3IGlzIHJlbmRlcmVkIGlu
IGEgYnVmZmVyLCBkZXN0cm95aW5nIHRoZQotICAgICAgICAgICAgLy8gZWxlbWVudCB3aWxsIHNp
bXBseSBkZXN0cm95IHRoZSBidWZmZXIgYW5kIHB1dCB0aGUKLSAgICAgICAgICAgIC8vIHN0YXRl
IGJhY2sgaW50byB0aGUgcHJlUmVuZGVyIHN0YXRlLgotICAgICAgICAgICAgZGVzdHJveUVsZW1l
bnQ6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3LmNsZWFyQnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXdDb2xsZWN0aW9uID0gdmlldy5fbm90aWZ5V2lsbERl
c3Ryb3lFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgdmlld0NvbGxlY3Rpb24udHJhbnNpdGlv
blRvKCdwcmVSZW5kZXInLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoIkVtcHR5aW5nIGEgdmlldyBpbiB0aGUgaW5CdWZmZXIg
c3RhdGUgaXMgbm90IGFsbG93ZWQgYW5kICIgKwotICAgICAgICAgICAgICAgICJzaG91bGQgbm90
IGhhcHBlbiB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcy4gTW9zdCBsaWtlbHkgIiArCi0gICAg
ICAgICAgICAgICAgInRoZXJlIGlzIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uIFRoaXMgbWF5
IGJlIGR1ZSB0byAiICsKLSAgICAgICAgICAgICAgICAiZXhjZXNzaXZlIHByb3BlcnR5IGNoYW5n
ZSBub3RpZmljYXRpb25zLiIpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVuZGVy
VG9CdWZmZXJJZk5lZWRlZDogZnVuY3Rpb24gKHZpZXcsIGJ1ZmZlcikgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIEl0IHNo
b3VsZCBiZSBpbXBvc3NpYmxlIGZvciBhIHJlbmRlcmVkIHZpZXcgdG8gYmUgc2NoZWR1bGVkIGZv
cgotICAgICAgICAgICAgLy8gaW5zZXJ0aW9uLgotICAgICAgICAgICAgaW5zZXJ0RWxlbWVudDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIllvdSBj
YW4ndCBpbnNlcnQgYW4gZWxlbWVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcmVuZGVyZWQiKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldEVsZW1lbnQ6IGZ1bmN0aW9uKHZpZXcs
IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZpZXcuX3RyYW5zaXRpb25UbygncHJlUmVuZGVyJyk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5jbGVhckJ1ZmZlcigpOwot
ICAgICAgICAgICAgICAgICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ2hhc0VsZW1lbnQnKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBpbnZva2VPYnNlcnZlcjogZnVuY3Rpb24odGFyZ2V0LCBv
YnNlcnZlcikgewotICAgICAgICAgICAgICAgIG9ic2VydmVyLmNhbGwodGFyZ2V0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IGluQnVmZmVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVz
L2luX2RvbSIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3BsYXRmb3Jt
IiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLXZpZXdz
L3ZpZXdzL3N0YXRlcy9oYXNfZWxlbWVudCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5
Ml9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07
Ci0KLSAgICAgICAgdmFyIGhhc0VsZW1lbnQgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBpbkRPTSA9
IGNyZWF0ZShoYXNFbGVtZW50KTsKLQotICAgICAgICB2YXIgVmlldzsKLQotICAgICAgICBtZXJn
ZShpbkRPTSwgewotICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIVZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgVmlldyA9IHJlcXVpcmVN
b2R1bGUoJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnKVsiZGVmYXVsdCJdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAvLyBFUzZUT0RPOiB0aGlzIHN1Y2tzLiBIYXZlIHRvIGF2
b2lkIGN5Y2xlcy4uLgotCi0gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHZpZXcgZm9y
IGV2ZW50IGhhbmRsaW5nLiBUaGlzIGhhc2ggaXMgdXNlZCBieQotICAgICAgICAgICAgICAgIC8v
IEVtYmVyLkV2ZW50RGlzcGF0Y2hlciB0byBkaXNwYXRjaCBpbmNvbWluZyBldmVudHMuCi0gICAg
ICAgICAgICAgICAgaWYgKCF2aWV3LmlzVmlydHVhbCkgewotICAgICAgICAgICAgICAgICAgICBF
bWJlci5hc3NlcnQoIkF0dGVtcHRlZCB0byByZWdpc3RlciBhIHZpZXcgd2l0aCBhbiBpZCBhbHJl
YWR5IGluIHVzZTogIiArIHZpZXcuZWxlbWVudElkLCAhVmlldy52aWV3c1t2aWV3LmVsZW1lbnRJ
ZF0pOwotICAgICAgICAgICAgICAgICAgICBWaWV3LnZpZXdzW3ZpZXcuZWxlbWVudElkXSA9IHZp
ZXc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmlldy5hZGRCZWZvcmVP
YnNlcnZlcignZWxlbWVudElkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFbWJlckVycm9yKCJDaGFuZ2luZyBhIHZpZXcncyBlbGVtZW50SWQgYWZ0ZXIgY3Jl
YXRpb24gaXMgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGV4aXQ6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIVZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgVmlldyA9IHJlcXVpcmVNb2R1bGUo
J2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnKVsiZGVmYXVsdCJdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAvLyBFUzZUT0RPOiB0aGlzIHN1Y2tzLiBIYXZlIHRvIGF2b2lkIGN5
Y2xlcy4uLgotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlydHVhbCkgCi0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBWaWV3LnZpZXdzW3ZpZXcuZWxlbWVudElkXTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uKHZpZXcsIGZuKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIllvdSBjYW4ndCBpbnNlcnQg
YW4gZWxlbWVudCBpbnRvIHRoZSBET00gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluc2VydGVkIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBpbkRPTTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0
YXRlcy9wcmVfcmVuZGVyIiwKLSAgICBbImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0
IiwgImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImV4cG9ydHMi
XSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBl
bmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IHZhciBfZGVmYXVsdCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
Y3JlYXRlID0gX19kZXBlbmRlbmN5Ml9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIG1lcmdlID0gX19k
ZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9k
dWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAg
ICAqLwotICAgICAgICB2YXIgcHJlUmVuZGVyID0gY3JlYXRlKF9kZWZhdWx0KTsKLQotICAgICAg
ICBtZXJnZShwcmVSZW5kZXIsIHsKLSAgICAgICAgICAgIC8vIGEgdmlldyBsZWF2ZXMgdGhlIHBy
ZVJlbmRlciBzdGF0ZSBvbmNlIGl0cyBlbGVtZW50IGhhcyBiZWVuCi0gICAgICAgICAgICAvLyBj
cmVhdGVkIChjcmVhdGVFbGVtZW50KS4KLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQ6IGZ1bmN0
aW9uKHZpZXcsIGZuKSB7Ci0gICAgICAgICAgICAgICAgdmlldy5jcmVhdGVFbGVtZW50KCk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHZpZXdDb2xsZWN0aW9uID0gdmlldy52aWV3SGllcmFyY2h5Q29s
bGVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgdmlld0NvbGxlY3Rpb24udHJpZ2dlcignd2ls
bEluc2VydEVsZW1lbnQnKTsKLQotICAgICAgICAgICAgICAgIGZuLmNhbGwodmlldyk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSB0cmFuc2l0aW9uIHRvIGBpbkRPTWAgaWYgdGhlIGVsZW1lbnQg
ZXhpc3RzIGluIHRoZSBET00KLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHZpZXcuZ2V0
KCdlbGVtZW50Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMo
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlld0NvbGxlY3Rpb24udHJhbnNpdGlv
blRvKCdpbkRPTScsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgdmlld0NvbGxlY3Rpb24u
dHJpZ2dlcignZGlkSW5zZXJ0RWxlbWVudCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIHJlbmRlclRvQnVmZmVySWZOZWVkZWQ6IGZ1bmN0aW9uKHZp
ZXcsIGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIHZpZXcucmVuZGVyVG9CdWZmZXIoYnVmZmVy
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIGVtcHR5OiBFbWJlci5LLAotCi0gICAgICAgICAgICBzZXRFbGVtZW50OiBmdW5jdGlv
bih2aWV3LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgewot
ICAgICAgICAgICAgICAgICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ2hhc0VsZW1lbnQnKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gcHJl
UmVuZGVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsCi0g
ICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQiLCAi
ZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVy
LW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXIt
bWV0YWwvc2V0X3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0
YWwvb2JzZXJ2ZXIiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC91dGls
cyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1t
ZXRhbC9pc19ub25lIiwgImNvbnRhaW5lci9jb250YWluZXIiLCAiZW1iZXItcnVudGltZS9zeXN0
ZW0vbmF0aXZlX2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1t
ZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLXJ1bnRpbWUvY29weSIsICJlbWJlci1tZXRh
bC9iaW5kaW5nIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIsICJlbWJlci12aWV3cy9z
eXN0ZW0vanF1ZXJ5IiwgImVtYmVyLXZpZXdzL3N5c3RlbS9leHQiLCAiZW1iZXItdmlld3Mvdmll
d3MvY29yZV92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXdfY29sbGVjdGlvbiIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5k
ZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlf
XywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywg
X19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19k
ZXBlbmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywgX19kZXBl
bmRlbmN5MTlfXywgX19kZXBlbmRlbmN5MjBfXywgX19kZXBlbmRlbmN5MjFfXywgX19kZXBlbmRl
bmN5MjJfXywgX19kZXBlbmRlbmN5MjNfXywgX19kZXBlbmRlbmN5MjRfXywgX19kZXBlbmRlbmN5
MjVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvLyBF
bWJlci5hc3NlcnQsIEVtYmVyLmRlcHJlY2F0ZSwgRW1iZXIud2FybiwgRW1iZXIuVEVNUExBVEVT
LAotICAgICAgICAvLyBFbWJlci5LLCBqUXVlcnksIEVtYmVyLmxvb2t1cCwKLSAgICAgICAgLy8g
RW1iZXIuQ29udGFpbmVyVmlldyBjaXJjdWxhciBkZXBlbmRlbmN5Ci0gICAgICAgIC8vIEVtYmVy
LkVOVgotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQot
ICAgICAgICB2YXIgRXZlbnRlZCA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGdldCA9IF9fZGVwZW5kZW5jeTVfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVu
Y3k2X18uc2V0OwotICAgICAgICB2YXIgc2V0UHJvcGVydGllcyA9IF9fZGVwZW5kZW5jeTdfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBhZGRPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTlfXy5hZGRPYnNlcnZlcjsK
LSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5OV9fLnJlbW92ZU9ic2Vy
dmVyOwotCi0gICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTEwX18uZGVm
aW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBkZXByZWNhdGVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5j
eTEwX18uZGVwcmVjYXRlUHJvcGVydHk7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRl
bmN5MTFfXy5ndWlkRm9yOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVwZW5kZW5jeTExX18ubWV0
YTsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5MTJfXy5jb21wdXRlZDsKLSAg
ICAgICAgdmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5MTNfXy5vYnNlcnZlcjsKLQotICAgICAg
ICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5MTFfXy50eXBlT2Y7Ci0gICAgICAgIHZhciBpc0Fy
cmF5ID0gX19kZXBlbmRlbmN5MTFfXy5pc0FycmF5OwotICAgICAgICB2YXIgaXNOb25lID0gX19k
ZXBlbmRlbmN5MTRfXy5pc05vbmU7Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTEz
X18uTWl4aW47Ci0gICAgICAgIHZhciBDb250YWluZXIgPSBfX2RlcGVuZGVuY3kxNV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBlbWJlckEgPSBfX2RlcGVuZGVuY3kxNl9fLkE7Ci0KLSAgICAg
ICAgdmFyIGRhc2hlcml6ZSA9IF9fZGVwZW5kZW5jeTE3X18uZGFzaGVyaXplOwotCi0gICAgICAg
IC8vIEVTNlRPRE86IGZ1bmN0aW9ucyBvbiBFbnVtZXJhYmxlVXRpbHMgc2hvdWxkIGdldCB0aGVp
ciBvd24gZXhwb3J0Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5MThfXy5mb3JF
YWNoOwotICAgICAgICB2YXIgYWRkT2JqZWN0ID0gX19kZXBlbmRlbmN5MThfXy5hZGRPYmplY3Q7
Ci0gICAgICAgIHZhciByZW1vdmVPYmplY3QgPSBfX2RlcGVuZGVuY3kxOF9fLnJlbW92ZU9iamVj
dDsKLQotICAgICAgICB2YXIgYmVmb3JlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxM19fLmJlZm9y
ZU9ic2VydmVyOwotICAgICAgICB2YXIgY29weSA9IF9fZGVwZW5kZW5jeTE5X19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIGlzR2xvYmFsUGF0aCA9IF9fZGVwZW5kZW5jeTIwX18uaXNHbG9iYWxQ
YXRoOwotCi0gICAgICAgIHZhciBwcm9wZXJ0eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3kyMV9f
LnByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlkQ2hhbmdlID0gX19k
ZXBlbmRlbmN5MjFfXy5wcm9wZXJ0eURpZENoYW5nZTsKLQotICAgICAgICB2YXIgalF1ZXJ5ID0g
X19kZXBlbmRlbmN5MjJfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBmb3IgdGhlIHNpZGUgZWZm
ZWN0IG9mIGV4dGVuZGluZyBFbWJlci5ydW4ucXVldWVzCi0KLSAgICAgICAgdmFyIENvcmVWaWV3
ID0gX19kZXBlbmRlbmN5MjRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVmlld0NvbGxlY3Rp
b24gPSBfX2RlcGVuZGVuY3kyNV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBDb250YWluZXJWaWV3OwotCi0gICAgICAgIGZ1
bmN0aW9uIG51bGxWaWV3c0J1ZmZlcih2aWV3KSB7Ci0gICAgICAgICAgICB2aWV3LmJ1ZmZlciA9
IG51bGw7Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNsZWFyQ2FjaGVkRWxlbWVu
dCh2aWV3KSB7Ci0gICAgICAgICAgICBtZXRhKHZpZXcpLmNhY2hlLmVsZW1lbnQgPSB1bmRlZmlu
ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY2hpbGRWaWV3c1Byb3BlcnR5ID0gY29tcHV0
ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGRWaWV3cyA9IHRoaXMuX2NoaWxk
Vmlld3MsIHJldCA9IGVtYmVyQSgpLCB2aWV3ID0gdGhpczsKLQotICAgICAgICAgICAgZm9yRWFj
aChjaGlsZFZpZXdzLCBmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJl
bnRDaGlsZFZpZXdzOwotICAgICAgICAgICAgICAgIGlmICh2aWV3LmlzVmlydHVhbCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoaWxkVmlld3MgPSBnZXQodmlldywgJ2NoaWxk
Vmlld3MnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2hPYmplY3RzKGN1cnJl
bnRDaGlsZFZpZXdzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHZpZXcpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICByZXQucmVwbGFjZSA9IGZ1bmN0
aW9uIChpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRWaWV3cykgewotICAgICAgICAgICAgICAgIGlm
ICghQ29udGFpbmVyVmlldykgewotICAgICAgICAgICAgICAgICAgICBDb250YWluZXJWaWV3ID0g
cmVxdWlyZU1vZHVsZSgnZW1iZXItdmlld3Mvdmlld3MvY29udGFpbmVyX3ZpZXcnKVsnZGVmYXVs
dCddOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBFUzZUT0RPOiBzdHVw
aWQgY2lyY3VsYXIgZGVwCi0KLSAgICAgICAgICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIENv
bnRhaW5lclZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCJNYW5p
cHVsYXRpbmcgYW4gRW1iZXIuQ29udGFpbmVyVmlldyB0aHJvdWdoIGl0cyBjaGlsZFZpZXdzIHBy
b3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdGhlIENvbnRhaW5lclZpZXcgaW5zdGFu
Y2UgaXRzZWxmIGFzIGFuIEVtYmVyLk11dGFibGVBcnJheS4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZpZXcucmVwbGFjZShpZHgsIHJlbW92ZWRDb3VudCwgYWRkZWRWaWV3cyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJj
aGlsZFZpZXdzIGlzIGltbXV0YWJsZSIpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
cmV0dXJuIHJldDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgRW1iZXIud2FybigiVGhlIFZJRVdf
UFJFU0VSVkVTX0NPTlRFWFQgZmxhZyBoYXMgYmVlbiByZW1vdmVkIGFuZCB0aGUgZnVuY3Rpb25h
bGl0eSBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkLiIsIEVtYmVyLkVOVi5WSUVXX1BSRVNFUlZF
U19DT05URVhUICE9PSBmYWxzZSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEdsb2Jh
bCBoYXNoIG9mIHNoYXJlZCB0ZW1wbGF0ZXMuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHBv
cHVsYXRlZAotICAgICAgICAgICAgICBieSB0aGUgYnVpbGQgdG9vbHMgc28gdGhhdCB5b3UgY2Fu
IHN0b3JlIHlvdXIgSGFuZGxlYmFycyB0ZW1wbGF0ZXMgaW4KLSAgICAgICAgICAgICAgc2VwYXJh
dGUgZmlsZXMgdGhhdCBnZXQgbG9hZGVkIGludG8gSmF2YVNjcmlwdCBhdCBidWlsZHRpbWUuCi0K
LSAgICAgICAgICAgICAgQHByb3BlcnR5IFRFTVBMQVRFUwotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICovCi0gICAgICAgIEVt
YmVyLlRFTVBMQVRFUyA9IHt9OwotCi0gICAgICAgIHZhciBFTVBUWV9BUlJBWSA9IFtdOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBgRW1iZXIuVmlld2AgaXMgdGhlIGNsYXNzIGluIEVt
YmVyIHJlc3BvbnNpYmxlIGZvciBlbmNhcHN1bGF0aW5nIHRlbXBsYXRlcyBvZgotICAgICAgICAg
ICAgICBIVE1MIGNvbnRlbnQsIGNvbWJpbmluZyB0ZW1wbGF0ZXMgd2l0aCBkYXRhIHRvIHJlbmRl
ciBhcyBzZWN0aW9ucyBvZiBhIHBhZ2UncwotICAgICAgICAgICAgICBET00sIGFuZCByZWdpc3Rl
cmluZyBhbmQgcmVzcG9uZGluZyB0byB1c2VyLWluaXRpYXRlZCBldmVudHMuCi0KLSAgICAgICAg
ICAgICAgIyMgSFRNTCBUYWcKLQotICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBIVE1MIHRhZyBu
YW1lIHVzZWQgZm9yIGEgdmlldydzIERPTSByZXByZXNlbnRhdGlvbiBpcyBgZGl2YC4gVGhpcwot
ICAgICAgICAgICAgICBjYW4gYmUgY3VzdG9taXplZCBieSBzZXR0aW5nIHRoZSBgdGFnTmFtZWAg
cHJvcGVydHkuIFRoZSBmb2xsb3dpbmcgdmlldwotICAgICAgICAgICAgICBjbGFzczoKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIFBhcmFncmFwaFZpZXcgPSBF
bWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGFnTmFtZTogJ2VtJwotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVz
dWx0IGluIGluc3RhbmNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgSFRNTDoKLQotICAgICAgICAgICAg
ICBgYGBodG1sCi0gICAgICAgICAgICAgIDxlbSBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmll
dyI+PC9lbT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMgSFRNTCBgY2xh
c3NgIEF0dHJpYnV0ZQotCi0gICAgICAgICAgICAgIFRoZSBIVE1MIGBjbGFzc2AgYXR0cmlidXRl
IG9mIGEgdmlldydzIHRhZyBjYW4gYmUgc2V0IGJ5IHByb3ZpZGluZyBhCi0gICAgICAgICAgICAg
IGBjbGFzc05hbWVzYCBwcm9wZXJ0eSB0aGF0IGlzIHNldCB0byBhbiBhcnJheSBvZiBzdHJpbmdz
OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlWaWV3ID0g
RW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnbXktY2xh
c3MnLCAnbXktb3RoZXItY2xhc3MnXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBh
biBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAg
ICAgICAgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBteS1jbGFzcyBteS1v
dGhlci1jbGFzcyI+PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBj
bGFzc2AgYXR0cmlidXRlIHZhbHVlcyBjYW4gYWxzbyBiZSBzZXQgYnkgcHJvdmlkaW5nIGEgYGNs
YXNzTmFtZUJpbmRpbmdzYAotICAgICAgICAgICAgICBwcm9wZXJ0eSBzZXQgdG8gYW4gYXJyYXkg
b2YgcHJvcGVydGllcyBuYW1lcyBmb3IgdGhlIHZpZXcuIFRoZSByZXR1cm4gdmFsdWUKLSAgICAg
ICAgICAgICAgb2YgdGhlc2UgcHJvcGVydGllcyB3aWxsIGJlIGFkZGVkIGFzIHBhcnQgb2YgdGhl
IHZhbHVlIGZvciB0aGUgdmlldydzIGBjbGFzc2AKLSAgICAgICAgICAgICAgYXR0cmlidXRlLiBU
aGVzZSBwcm9wZXJ0aWVzIGNhbiBiZSBjb21wdXRlZCBwcm9wZXJ0aWVzOgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRl
bmQoewotICAgICAgICAgICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ3Byb3BlcnR5QScsICdw
cm9wZXJ0eUInXSwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eUE6ICdmcm9tLWEnLAotICAgICAg
ICAgICAgICAgIHByb3BlcnR5QjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo
c29tZUxvZ2ljKSB7IHJldHVybiAnZnJvbS1iJzsgfQotICAgICAgICAgICAgICAgIH0ucHJvcGVy
dHkoKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0
aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBpZD0i
ZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBmcm9tLWEgZnJvbS1iIj48L2Rpdj4KLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgdGhlIHZhbHVlIG9mIGEgY2xhc3MgbmFtZSBi
aW5kaW5nIHJldHVybnMgYSBib29sZWFuIHRoZSBwcm9wZXJ0eSBuYW1lCi0gICAgICAgICAgICAg
IGl0c2VsZiB3aWxsIGJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWUgaWYgdGhlIHByb3BlcnR5IGlz
IHRydWUuIFRoZSBjbGFzcyBuYW1lCi0gICAgICAgICAgICAgIHdpbGwgbm90IGJlIGFkZGVkIGlm
IHRoZSB2YWx1ZSBpcyBgZmFsc2VgIG9yIGB1bmRlZmluZWRgLgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewot
ICAgICAgICAgICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2hvdmVyZWQnXSwKLSAgICAgICAg
ICAgICAgICBob3ZlcmVkOiB0cnVlCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFu
IEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAg
ICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGhvdmVyZWQiPjwvZGl2
PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaGVuIHVzaW5nIGJvb2xlYW4g
Y2xhc3MgbmFtZSBiaW5kaW5ncyB5b3UgY2FuIHN1cHBseSBhIHN0cmluZyB2YWx1ZSBvdGhlcgot
ICAgICAgICAgICAgICB0aGFuIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB1c2UgYXMgdGhlIGBjbGFz
c2AgSFRNTCBhdHRyaWJ1dGUgYnkgYXBwZW5kaW5nIHRoZQotICAgICAgICAgICAgICBwcmVmZXJy
ZWQgdmFsdWUgYWZ0ZXIgYSAiOiIgY2hhcmFjdGVyIHdoZW4gZGVmaW5pbmcgdGhlIGJpbmRpbmc6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBNeVZpZXcgPSBF
bWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsn
YXdlc29tZTpzby12ZXJ5LWNvb2wnXSwKLSAgICAgICAgICAgICAgICBhd2Vzb21lOiB0cnVlCi0g
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxs
IHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6
Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEi
IGNsYXNzPSJlbWJlci12aWV3IHNvLXZlcnktY29vbCI+PC9kaXY+Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEJvb2xlYW4gdmFsdWUgY2xhc3MgbmFtZSBiaW5kaW5ncyB3aG9z
ZSBwcm9wZXJ0eSBuYW1lcyBhcmUgaW4gYQotICAgICAgICAgICAgICBjYW1lbENhc2Utc3R5bGUg
Zm9ybWF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgZGFzaGVyaXplZCBmb3JtYXQ6Ci0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBNeVZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNVcmdlbnQn
XSwKLSAgICAgICAgICAgICAgICBpc1VyZ2VudDogdHJ1ZQotICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0
YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBg
YGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBp
cy11cmdlbnQiPjwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBDbGFz
cyBuYW1lIGJpbmRpbmdzIGNhbiBhbHNvIHJlZmVyIHRvIG9iamVjdCB2YWx1ZXMgdGhhdCBhcmUg
Zm91bmQgYnkKLSAgICAgICAgICAgICAgdHJhdmVyc2luZyBhIHBhdGggcmVsYXRpdmUgdG8gdGhl
IHZpZXcgaXRzZWxmOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZUJpbmRpbmdzOiBbJ21lc3NhZ2VzLmVtcHR5J10KLSAgICAgICAgICAgICAgICBtZXNzYWdlczog
RW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICBlbXB0eTogdHJ1ZQotICAg
ICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwg
cmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAg
ICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGVtcHR5Ij48L2Rpdj4KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYWRkIGEgY2xhc3Mg
bmFtZSBmb3IgYSBwcm9wZXJ0eSB3aGljaCBldmFsdWF0ZXMgdG8gdHJ1ZSBhbmQKLSAgICAgICAg
ICAgICAgYW5kIGEgZGlmZmVyZW50IGNsYXNzIG5hbWUgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNl
LCB5b3UgY2FuIHBhc3MgYSBiaW5kaW5nCi0gICAgICAgICAgICAgIGxpa2UgdGhpczoKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIC8vIEFwcGxpZXMgJ2VuYWJs
ZWQnIGNsYXNzIHdoZW4gaXNFbmFibGVkIGlzIHRydWUgYW5kICdkaXNhYmxlZCcgd2hlbiBpc0Vu
YWJsZWQgaXMgZmFsc2UKLSAgICAgICAgICAgICAgRW1iZXIuVmlldy5leHRlbmQoewotICAgICAg
ICAgICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2lzRW5hYmxlZDplbmFibGVkOmRpc2FibGVk
J10KLSAgICAgICAgICAgICAgICBpc0VuYWJsZWQ6IHRydWUKLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5z
dGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBg
YGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXcg
ZW5hYmxlZCI+PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdoZW4g
aXNFbmFibGVkIGlzIGBmYWxzZWAsIHRoZSByZXN1bHRpbmcgSFRNTCByZXByZW5zZW50YXRpb24g
bG9va3MgbGlrZQotICAgICAgICAgICAgICB0aGlzOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwK
LSAgICAgICAgICAgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBkaXNhYmxl
ZCI+PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMgc3ludGF4
IG9mZmVycyB0aGUgY29udmVuaWVuY2UgdG8gYWRkIGEgY2xhc3MgaWYgYSBwcm9wZXJ0eSBpcyBg
ZmFsc2VgOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgLy8g
QXBwbGllcyBubyBjbGFzcyB3aGVuIGlzRW5hYmxlZCBpcyB0cnVlIGFuZCBjbGFzcyAnZGlzYWJs
ZWQnIHdoZW4gaXNFbmFibGVkIGlzIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVyLlZpZXcuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc0VuYWJsZWQ6OmRp
c2FibGVkJ10KLSAgICAgICAgICAgICAgICBpc0VuYWJsZWQ6IHRydWUKLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHZp
ZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAg
ICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVy
LXZpZXciPjwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaGVuIHRo
ZSBgaXNFbmFibGVkYCBwcm9wZXJ0eSBvbiB0aGUgdmlldyBpcyBzZXQgdG8gYGZhbHNlYCwgaXQg
d2lsbCByZXN1bHQKLSAgICAgICAgICAgICAgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1M
IHJlcHJlc2VudGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAg
ICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBkaXNhYmxlZCI+PC9kaXY+Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFVwZGF0ZXMgdG8gdGhlIHRoZSB2YWx1
ZSBvZiBhIGNsYXNzIG5hbWUgYmluZGluZyB3aWxsIHJlc3VsdCBpbiBhdXRvbWF0aWMKLSAgICAg
ICAgICAgICAgdXBkYXRlIG9mIHRoZSAgSFRNTCBgY2xhc3NgIGF0dHJpYnV0ZSBpbiB0aGUgdmll
dydzIHJlbmRlcmVkIEhUTUwKLSAgICAgICAgICAgICAgcmVwcmVzZW50YXRpb24uIElmIHRoZSB2
YWx1ZSBiZWNvbWVzIGBmYWxzZWAgb3IgYHVuZGVmaW5lZGAgdGhlIGNsYXNzIG5hbWUKLSAgICAg
ICAgICAgICAgd2lsbCBiZSByZW1vdmVkLgotCi0gICAgICAgICAgICAgIEJvdGggYGNsYXNzTmFt
ZXNgIGFuZCBgY2xhc3NOYW1lQmluZGluZ3NgIGFyZSBjb25jYXRlbmF0ZWQgcHJvcGVydGllcy4g
U2VlCi0gICAgICAgICAgICAgIFtFbWJlci5PYmplY3RdKC9hcGkvY2xhc3Nlcy9FbWJlci5PYmpl
Y3QuaHRtbCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZQotICAgICAgICAgICAgICBpbmZvcm1hdGlv
biBhYm91dCBjb25jYXRlbmF0ZWQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICAjIyBIVE1M
IEF0dHJpYnV0ZXMKLQotICAgICAgICAgICAgICBUaGUgSFRNTCBhdHRyaWJ1dGUgc2VjdGlvbiBv
ZiBhIHZpZXcncyB0YWcgY2FuIGJlIHNldCBieSBwcm92aWRpbmcgYW4KLSAgICAgICAgICAgICAg
YGF0dHJpYnV0ZUJpbmRpbmdzYCBwcm9wZXJ0eSBzZXQgdG8gYW4gYXJyYXkgb2YgcHJvcGVydHkg
bmFtZXMgb24gdGhlIHZpZXcuCi0gICAgICAgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhl
c2UgcHJvcGVydGllcyB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSB2aWV3J3MKLSAg
ICAgICAgICAgICAgSFRNTCBhc3NvY2lhdGVkIGF0dHJpYnV0ZToKLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFuY2hvclZpZXcgPSBFbWJlci5WaWV3LmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgdGFnTmFtZTogJ2EnLAotICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZUJpbmRpbmdzOiBbJ2hyZWYnXSwKLSAgICAgICAgICAgICAgICBocmVmOiAnaHR0cDovL2dv
b2dsZS5jb20nCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVz
ZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8YSBp
ZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyIgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20iPjwv
YT4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgT25lIHByb3BlcnR5IGNhbiBi
ZSBtYXBwZWQgb24gdG8gYW5vdGhlciBieSBwbGFjaW5nIGEgIjoiIGJldHdlZW4KLSAgICAgICAg
ICAgICAgdGhlIHNvdXJjZSBwcm9wZXJ0eSBhbmQgdGhlIGRlc3RpbmF0aW9uIHByb3BlcnR5Ogot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQW5jaG9yVmlldyA9
IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB0YWdOYW1lOiAnYScsCi0gICAg
ICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsndXJsOmhyZWYnXSwKLSAgICAgICAgICAg
ICAgICB1cmw6ICdodHRwOi8vZ29vZ2xlLmNvbScKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2Vz
IHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDxhIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IiBocmVmPSJo
dHRwOi8vZ29vZ2xlLmNvbSI+PC9hPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuIGBhdHRyaWJ1dGVCaW5kaW5nc2AgbW9uaXRvcmVk
IHByb3BlcnR5IGlzIGEgYm9vbGVhbgotICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgd2lsbCBm
b2xsb3cgSFRNTCdzIHBhdHRlcm4gb2YgcmVwZWF0aW5nIHRoZSBhdHRyaWJ1dGUncyBuYW1lIGFz
Ci0gICAgICAgICAgICAgIGl0cyB2YWx1ZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIE15VGV4dElucHV0ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAg
ICAgICAgICAgIHRhZ05hbWU6ICdpbnB1dCcsCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlQmlu
ZGluZ3M6IFsnZGlzYWJsZWQnXSwKLSAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZQotICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCBy
ZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgot
Ci0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGlucHV0IGlkPSJlbWJlcjEi
IGNsYXNzPSJlbWJlci12aWV3IiBkaXNhYmxlZD0iZGlzYWJsZWQiIC8+Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIGBhdHRyaWJ1dGVCaW5kaW5nc2AgY2FuIHJlZmVyIHRvIGNv
bXB1dGVkIHByb3BlcnRpZXM6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBNeVRleHRJbnB1dCA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICB0YWdOYW1lOiAnaW5wdXQnLAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBb
J2Rpc2FibGVkJ10sCi0gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgaWYgKHNvbWVMb2dpYykgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LnBy
b3BlcnR5KCkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFVwZGF0ZXMgdG8gdGhlIHRoZSBwcm9wZXJ0eSBvZiBhbiBhdHRyaWJ1dGUgYmluZGlu
ZyB3aWxsIHJlc3VsdCBpbiBhdXRvbWF0aWMKLSAgICAgICAgICAgICAgdXBkYXRlIG9mIHRoZSAg
SFRNTCBhdHRyaWJ1dGUgaW4gdGhlIHZpZXcncyByZW5kZXJlZCBIVE1MIHJlcHJlc2VudGF0aW9u
LgotCi0gICAgICAgICAgICAgIGBhdHRyaWJ1dGVCaW5kaW5nc2AgaXMgYSBjb25jYXRlbmF0ZWQg
cHJvcGVydHkuIFNlZSBbRW1iZXIuT2JqZWN0XSgvYXBpL2NsYXNzZXMvRW1iZXIuT2JqZWN0Lmh0
bWwpCi0gICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJv
dXQgY29uY2F0ZW5hdGVkIHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAgIyMgVGVtcGxhdGVz
Ci0KLSAgICAgICAgICAgICAgVGhlIEhUTUwgY29udGVudHMgb2YgYSB2aWV3J3MgcmVuZGVyZWQg
cmVwcmVzZW50YXRpb24gYXJlIGRldGVybWluZWQgYnkgaXRzCi0gICAgICAgICAgICAgIHRlbXBs
YXRlLiBUZW1wbGF0ZXMgY2FuIGJlIGFueSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gb3B0aW9u
YWwgY29udGV4dAotICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIHJldHVybnMgYSBzdHJpbmcg
b2YgSFRNTCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgd2l0aGluIHRoZQotICAgICAgICAgICAgICB2
aWV3J3MgdGFnLiBNb3N0IHR5cGljYWxseSBpbiBFbWJlciB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUg
YSBjb21waWxlZAotICAgICAgICAgICAgICBgRW1iZXIuSGFuZGxlYmFyc2AgdGVtcGxhdGUuCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVtYmVy
LlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFy
cy5jb21waWxlKCdJIGFtIHRoZSB0ZW1wbGF0ZScpCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNl
cyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRt
bAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij5JIGFt
IHRoZSB0ZW1wbGF0ZTwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBX
aXRoaW4gYW4gRW1iZXIgYXBwbGljYXRpb24gaXMgbW9yZSBjb21tb24gdG8gZGVmaW5lIGEgSGFu
ZGxlYmFycyB0ZW1wbGF0ZXMgYXMKLSAgICAgICAgICAgICAgcGFydCBvZiBhIHBhZ2U6Ci0KLSAg
ICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQveC1o
YW5kbGViYXJzJyBkYXRhLXRlbXBsYXRlLW5hbWU9J3NvbWUtdGVtcGxhdGUnPgotICAgICAgICAg
ICAgICAgIEhlbGxvCi0gICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBBbmQgYXNzb2NpYXRlIGl0IGJ5IG5hbWUgdXNpbmcgYSB2aWV3J3Mg
YHRlbXBsYXRlTmFtZWAgcHJvcGVydHk6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZU5hbWU6ICdzb21lLXRlbXBsYXRlJwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbmVzdGVkIHJlc291cmNl
cywgeW91ciBIYW5kbGViYXJzIHRlbXBsYXRlIHdpbGwgbG9vayBsaWtlIHRoaXM6Ci0KLSAgICAg
ICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQveC1oYW5k
bGViYXJzJyBkYXRhLXRlbXBsYXRlLW5hbWU9J3Bvc3RzL25ldyc+Ci0gICAgICAgICAgICAgICAg
PGgxPk5ldyBQb3N0PC9oMT4KLSAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEFuZCBgdGVtcGxhdGVOYW1lYCBwcm9wZXJ0eToKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0gRW1iZXIuVmll
dy5leHRlbmQoewotICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJ3Bvc3RzL25ldycKLSAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFVzaW5n
IGEgdmFsdWUgZm9yIGB0ZW1wbGF0ZU5hbWVgIHRoYXQgZG9lcyBub3QgaGF2ZSBhIEhhbmRsZWJh
cnMgdGVtcGxhdGUKLSAgICAgICAgICAgICAgd2l0aCBhIG1hdGNoaW5nIGBkYXRhLXRlbXBsYXRl
LW5hbWVgIGF0dHJpYnV0ZSB3aWxsIHRocm93IGFuIGVycm9yLgotCi0gICAgICAgICAgICAgIEZv
ciB2aWV3cyBjbGFzc2VzIHRoYXQgbWF5IGhhdmUgYSB0ZW1wbGF0ZSBsYXRlciBkZWZpbmVkIChl
LmcuIGFzIHRoZSBibG9jawotICAgICAgICAgICAgICBwb3J0aW9uIG9mIGEgYHt7dmlld319YCBI
YW5kbGViYXJzIGhlbHBlciBjYWxsIGluIGFub3RoZXIgdGVtcGxhdGUgb3IgaW4KLSAgICAgICAg
ICAgICAgYSBzdWJjbGFzcyksIHlvdSBjYW4gcHJvdmlkZSBhIGBkZWZhdWx0VGVtcGxhdGVgIHBy
b3BlcnR5IHNldCB0byBjb21waWxlZAotICAgICAgICAgICAgICB0ZW1wbGF0ZSBmdW5jdGlvbi4g
SWYgYSB0ZW1wbGF0ZSBpcyBub3QgbGF0ZXIgcHJvdmlkZWQgZm9yIHRoZSB2aWV3IGluc3RhbmNl
Ci0gICAgICAgICAgICAgIHRoZSBgZGVmYXVsdFRlbXBsYXRlYCB2YWx1ZSB3aWxsIGJlIHVzZWQ6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVt
YmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0VGVtcGxhdGU6IEVtYmVy
LkhhbmRsZWJhcnMuY29tcGlsZSgnSSB3YXMgdGhlIGRlZmF1bHQnKSwKLSAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZTogbnVsbCwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6IG51bGwKLSAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwg
cmVzdWx0IGluIGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAg
ICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNz
PSJlbWJlci12aWV3Ij5JIHdhcyB0aGUgZGVmYXVsdDwvZGl2PgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBJZiBhIGB0ZW1wbGF0ZWAgb3IgYHRlbXBsYXRlTmFtZWAgaXMgcHJv
dmlkZWQgaXQgd2lsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlcgotICAgICAgICAgICAgICBgZGVmYXVs
dFRlbXBsYXRlYDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGRlZmF1bHRUZW1w
bGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCdJIHdhcyB0aGUgZGVmYXVsdCcpCi0gICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGFWaWV3ID0gQVZpZXcuY3JlYXRlKHsKLSAg
ICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCdJIHdhcyB0
aGUgdGVtcGxhdGUsIG5vdCBkZWZhdWx0JykKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRN
TCByZXByZXNlbnRhdGlvbiB3aGVuIHJlbmRlcmVkOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwK
LSAgICAgICAgICAgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+SSB3YXMg
dGhlIHRlbXBsYXRlLCBub3QgZGVmYXVsdDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAjIyBWaWV3IENvbnRleHQKLQotICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBj
b250ZXh0IG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBpcyB0aGUgdmlldydzIGNvbnRyb2xsZXI6
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVt
YmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxl
YmFycy5jb21waWxlKCdIZWxsbyB7e2V4Y2l0ZWRHcmVldGluZ319JykKLSAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgYUNvbnRyb2xsZXIgPSBFbWJlci5PYmplY3QuY3JlYXRlKHsK
LSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICdCYXJyeScsCi0gICAgICAgICAgICAgICAgZXhj
aXRlZEdyZWV0aW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmdldCgiY29udGVudC5maXJzdE5hbWUiKSArICIhISEiCi0gICAgICAgICAgICAgICAgfS5wcm9w
ZXJ0eSgpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGFWaWV3ID0gQVZpZXcu
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBhQ29udHJvbGxlcgotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1
bHQgaW4gYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPkhlbGxv
IEJhcnJ5ISEhPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEEgY29u
dGV4dCBjYW4gYWxzbyBiZSBleHBsaWNpdGx5IHN1cHBsaWVkIHRocm91Z2ggdGhlIHZpZXcncyBg
Y29udGV4dGAKLSAgICAgICAgICAgICAgcHJvcGVydHkuIElmIHRoZSB2aWV3IGhhcyBuZWl0aGVy
IGBjb250ZXh0YCBub3IgYGNvbnRyb2xsZXJgIHByb3BlcnRpZXMsIHRoZQotICAgICAgICAgICAg
ICBgcGFyZW50Vmlld2AncyBjb250ZXh0IHdpbGwgYmUgdXNlZC4KLQotICAgICAgICAgICAgICAj
IyBMYXlvdXRzCi0KLSAgICAgICAgICAgICAgVmlld3MgY2FuIGhhdmUgYSBzZWNvbmRhcnkgdGVt
cGxhdGUgdGhhdCB3cmFwcyB0aGVpciBtYWluIHRlbXBsYXRlLiBMaWtlCi0gICAgICAgICAgICAg
IHByaW1hcnkgdGVtcGxhdGVzLCBsYXlvdXRzIGNhbiBiZSBhbnkgZnVuY3Rpb24gdGhhdCAgYWNj
ZXB0cyBhbiBvcHRpb25hbAotICAgICAgICAgICAgICBjb250ZXh0IHBhcmFtZXRlciBhbmQgcmV0
dXJucyBhIHN0cmluZyBvZiBIVE1MIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbnNpZGUKLSAgICAg
ICAgICAgICAgdmlldydzIHRhZy4gVmlld3Mgd2hvc2UgSFRNTCBlbGVtZW50IGlzIHNlbGYgY2xv
c2luZyAoZS5nLiBgPGlucHV0IC8+YCkKLSAgICAgICAgICAgICAgY2Fubm90IGhhdmUgYSBsYXlv
dXQgYW5kIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLgotCi0gICAgICAgICAgICAgIE1v
c3QgdHlwaWNhbGx5IGluIEVtYmVyIGEgbGF5b3V0IHdpbGwgYmUgYSBjb21waWxlZCBgRW1iZXIu
SGFuZGxlYmFyc2AKLSAgICAgICAgICAgICAgdGVtcGxhdGUuCi0KLSAgICAgICAgICAgICAgQSB2
aWV3J3MgbGF5b3V0IGNhbiBiZSBzZXQgZGlyZWN0bHkgd2l0aCB0aGUgYGxheW91dGAgcHJvcGVy
dHkgb3IgcmVmZXJlbmNlCi0gICAgICAgICAgICAgIGFuIGV4aXN0aW5nIEhhbmRsZWJhcnMgdGVt
cGxhdGUgYnkgbmFtZSB3aXRoIHRoZSBgbGF5b3V0TmFtZWAgcHJvcGVydHkuCi0KLSAgICAgICAg
ICAgICAgQSB0ZW1wbGF0ZSB1c2VkIGFzIGEgbGF5b3V0IG11c3QgY29udGFpbiBhIHNpbmdsZSB1
c2Ugb2YgdGhlIEhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgYHt7eWllbGR9fWAgaGVscGVyLiBU
aGUgSFRNTCBjb250ZW50cyBvZiBhIHZpZXcncyByZW5kZXJlZCBgdGVtcGxhdGVgIHdpbGwgYmUK
LSAgICAgICAgICAgICAgaW5zZXJ0ZWQgYXQgdGhpcyBsb2NhdGlvbjoKLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3V2l0aExheW91dCA9IEVtYmVyLlZp
ZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBsYXlvdXQ6IEVtYmVyLkhhbmRsZWJhcnMuY29t
cGlsZSgiPGRpdiBjbGFzcz0nbXktZGVjb3JhdGl2ZS1jbGFzcyc+e3t5aWVsZH19PC9kaXY+Iiks
Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgiSSBn
b3Qgd3JhcHBlZCIpCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVw
cmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8
ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJteS1kZWNvcmF0aXZlLWNsYXNzIj4KLSAgICAgICAgICAgICAgICAgIEkgZ290IHdy
YXBwZWQKLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFNlZSBbRW1iZXIuSGFuZGxlYmFycy5oZWxw
ZXJzLnlpZWxkXSgvYXBpL2NsYXNzZXMvRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0bWwjbWV0
aG9kX3lpZWxkKQotICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAg
ICAgICAgICAjIyBSZXNwb25kaW5nIHRvIEJyb3dzZXIgRXZlbnRzCi0KLSAgICAgICAgICAgICAg
Vmlld3MgY2FuIHJlc3BvbmQgdG8gdXNlci1pbml0aWF0ZWQgZXZlbnRzIGluIG9uZSBvZiB0aHJl
ZSB3YXlzOiBtZXRob2QKLSAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24sIHRocm91Z2ggYW4g
ZXZlbnQgbWFuYWdlciwgYW5kIHRocm91Z2ggYHt7YWN0aW9ufX1gIGhlbHBlciB1c2UKLSAgICAg
ICAgICAgICAgaW4gdGhlaXIgdGVtcGxhdGUgb3IgbGF5b3V0LgotCi0gICAgICAgICAgICAgICMj
IyBNZXRob2QgSW1wbGVtZW50YXRpb24KLQotICAgICAgICAgICAgICBWaWV3cyBjYW4gcmVzcG9u
ZCB0byB1c2VyLWluaXRpYXRlZCBldmVudHMgYnkgaW1wbGVtZW50aW5nIGEgbWV0aG9kIHRoYXQK
LSAgICAgICAgICAgICAgbWF0Y2hlcyB0aGUgZXZlbnQgbmFtZS4gQSBgalF1ZXJ5LkV2ZW50YCBv
YmplY3Qgd2lsbCBiZSBwYXNzZWQgYXMgdGhlCi0gICAgICAgICAgICAgIGFyZ3VtZW50IHRvIHRo
aXMgbWV0aG9kLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
QVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0
aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCB3aGVuIHdo
ZW4gYW4gaW5zdGFuY2UncwotICAgICAgICAgICAgICAgICAgLy8gcmVuZGVyZWQgZWxlbWVudCBp
cyBjbGlja2VkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIEV2ZW50IE1hbmFnZXJzCi0KLSAgICAgICAg
ICAgICAgVmlld3MgY2FuIGRlZmluZSBhbiBvYmplY3QgYXMgdGhlaXIgYGV2ZW50TWFuYWdlcmAg
cHJvcGVydHkuIFRoaXMgb2JqZWN0IGNhbgotICAgICAgICAgICAgICB0aGVuIGltcGxlbWVudCBt
ZXRob2RzIHRoYXQgbWF0Y2ggdGhlIGRlc2lyZWQgZXZlbnQgbmFtZXMuIE1hdGNoaW5nIGV2ZW50
cwotICAgICAgICAgICAgICB0aGF0IG9jY3VyIG9uIHRoZSB2aWV3J3MgcmVuZGVyZWQgSFRNTCBv
ciB0aGUgcmVuZGVyZWQgSFRNTCBvZiBhbnkgb2YgaXRzIERPTQotICAgICAgICAgICAgICBkZXNj
ZW5kYW50cyB3aWxsIHRyaWdnZXIgdGhpcyBtZXRob2QuIEEgYGpRdWVyeS5FdmVudGAgb2JqZWN0
IHdpbGwgYmUgcGFzc2VkCi0gICAgICAgICAgICAgIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0
aGUgbWV0aG9kIGFuZCBhbiAgYEVtYmVyLlZpZXdgIG9iamVjdCBhcyB0aGUKLSAgICAgICAgICAg
ICAgc2Vjb25kLiBUaGUgYEVtYmVyLlZpZXdgIHdpbGwgYmUgdGhlIHZpZXcgd2hvc2UgcmVuZGVy
ZWQgSFRNTCB3YXMgaW50ZXJhY3RlZAotICAgICAgICAgICAgICB3aXRoLiBUaGlzIG1heSBiZSB0
aGUgdmlldyB3aXRoIHRoZSBgZXZlbnRNYW5hZ2VyYCBwcm9wZXJ0eSBvciBvbmUgb2YgaXRzCi0g
ICAgICAgICAgICAgIGRlc2NlbmRlbnQgdmlld3MuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICBldmVudE1hbmFnZXI6IEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAg
ICAgICAgZG91YmxlQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50LCB2aWV3KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIHdoZW4gd2hlbiBhbiBpbnN0YW5jZSdzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHJlbmRlcmVkIGVsZW1lbnQgb3IgYW55IHJlbmRlcmluZwotICAgICAg
ICAgICAgICAgICAgICAvLyBvZiB0aGlzIHZpZXdzJ3MgZGVzY2VuZGVudAotICAgICAgICAgICAg
ICAgICAgICAvLyBlbGVtZW50cyBpcyBjbGlja2VkCi0gICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIEFuIGV2ZW50IGRlZmluZWQgZm9yIGFuIGV2ZW50IG1hbmFnZXIgdGFrZXMg
cHJlY2VkZW5jZSBvdmVyIGV2ZW50cyBvZiB0aGUKLSAgICAgICAgICAgICAgc2FtZSBuYW1lIGhh
bmRsZWQgdGhyb3VnaCBtZXRob2RzIG9uIHRoZSB2aWV3LgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwgbmV2ZXIgdHJpZ2dlci4KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIGV2ZW50TWFuYWdlcjogRW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICAg
ICAgICBtb3VzZUVudGVyOiBmdW5jdGlvbihldmVudCwgdmlldykgewotICAgICAgICAgICAgICAg
ICAgICAvLyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgQVZpZXcjbW91c2VFbnRlcgotICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBTaW1pbGFybHkgYSB2aWV3J3MgZXZlbnQgbWFu
YWdlciB3aWxsIHRha2UgcHJlY2VkZW5jZSBmb3IgZXZlbnRzIG9mIGFueSB2aWV3cwotICAgICAg
ICAgICAgICByZW5kZXJlZCBhcyBhIGRlc2NlbmRlbnQuIEEgbWV0aG9kIG5hbWUgdGhhdCBtYXRj
aGVzIGFuIGV2ZW50IG5hbWUgd2lsbCBub3QKLSAgICAgICAgICAgICAgYmUgY2FsbGVkIGlmIHRo
ZSB2aWV3IGluc3RhbmNlIHdhcyByZW5kZXJlZCBpbnNpZGUgdGhlIEhUTUwgcmVwcmVzZW50YXRp
b24gb2YKLSAgICAgICAgICAgICAgYSB2aWV3IHRoYXQgaGFzIGFuIGBldmVudE1hbmFnZXJgIHBy
b3BlcnR5IGRlZmluZWQgdGhhdCBoYW5kbGVzIGV2ZW50cyBvZiB0aGUKLSAgICAgICAgICAgICAg
bmFtZS4gRXZlbnRzIG5vdCBoYW5kbGVkIGJ5IHRoZSBldmVudCBtYW5hZ2VyIHdpbGwgc3RpbGwg
dHJpZ2dlciBtZXRob2QgY2FsbHMKLSAgICAgICAgICAgICAgb24gdGhlIGRlc2NlbmRlbnQuCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBPdXRlclZpZXcgPSBF
bWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRs
ZWJhcnMuY29tcGlsZSgib3V0ZXIge3sjdmlldyBJbm5lclZpZXd9fWlubmVye3svdmlld319IG91
dGVyIiksCi0gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyOiBFbWJlci5PYmplY3QuY3JlYXRl
KHsKLSAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uKGV2ZW50LCB2aWV3KSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHZpZXcgbWlnaHQgYmUgaW5zdGFuY2Ugb2YgZWl0aGVy
Ci0gICAgICAgICAgICAgICAgICAgIC8vIE91dGVyVmlldyBvciBJbm5lclZpZXcgZGVwZW5kaW5n
IG9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIG9uIHRoZSBwYWdlIHRoZSB1c2VyIGlu
dGVyYWN0aW9uIG9jY3VyZWQKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBJbm5lclZpZXcgPSBFbWJlci5W
aWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBpZiByZW5kZXJlZCBpbnNpZGUKLSAg
ICAgICAgICAgICAgICAgIC8vIGFuIE91dGVyVmlldyBiZWNhdXNlIE91dGVyVmlldydzCi0gICAg
ICAgICAgICAgICAgICAvLyBldmVudE1hbmFnZXIgZG9lc24ndCBoYW5kbGUgY2xpY2sgZXZlbnRz
Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBtb3VzZUVudGVyOiBmdW5jdGlv
bihldmVudCkgewotICAgICAgICAgICAgICAgICAgLy8gd2lsbCBuZXZlciBiZSBjYWxsZWQgaWYg
cmVuZGVyZWQgaW5zaWRlCi0gICAgICAgICAgICAgICAgICAvLyBhbiBPdXRlclZpZXcuCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgIyMjIEhhbmRsZWJhcnMgYHt7YWN0aW9ufX1gIEhlbHBlcgotCi0gICAgICAg
ICAgICAgIFNlZSBbSGFuZGxlYmFycy5oZWxwZXJzLmFjdGlvbl0oL2FwaS9jbGFzc2VzL0VtYmVy
LkhhbmRsZWJhcnMuaGVscGVycy5odG1sI21ldGhvZF9hY3Rpb24pLgotCi0gICAgICAgICAgICAg
ICMjIyBFdmVudCBOYW1lcwotCi0gICAgICAgICAgICAgIEFsbCBvZiB0aGUgZXZlbnQgaGFuZGxp
bmcgYXBwcm9hY2hlcyBkZXNjcmliZWQgYWJvdmUgcmVzcG9uZCB0byB0aGUgc2FtZSBzZXQKLSAg
ICAgICAgICAgICAgb2YgZXZlbnRzLiBUaGUgbmFtZXMgb2YgdGhlIGJ1aWx0LWluIGV2ZW50cyBh
cmUgbGlzdGVkIGJlbG93LiAoVGhlIGhhc2ggb2YKLSAgICAgICAgICAgICAgYnVpbHQtaW4gZXZl
bnRzIGV4aXN0cyBpbiBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYC4pIEFkZGl0aW9uYWwsIGN1c3Rv
bSBldmVudHMKLSAgICAgICAgICAgICAgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgdXNpbmcgYEVtYmVy
LkFwcGxpY2F0aW9uLmN1c3RvbUV2ZW50c2AuCi0KLSAgICAgICAgICAgICAgVG91Y2ggZXZlbnRz
OgotCi0gICAgICAgICAgICAgICogYHRvdWNoU3RhcnRgCi0gICAgICAgICAgICAgICogYHRvdWNo
TW92ZWAKLSAgICAgICAgICAgICAgKiBgdG91Y2hFbmRgCi0gICAgICAgICAgICAgICogYHRvdWNo
Q2FuY2VsYAotCi0gICAgICAgICAgICAgIEtleWJvYXJkIGV2ZW50cwotCi0gICAgICAgICAgICAg
ICogYGtleURvd25gCi0gICAgICAgICAgICAgICogYGtleVVwYAotICAgICAgICAgICAgICAqIGBr
ZXlQcmVzc2AKLQotICAgICAgICAgICAgICBNb3VzZSBldmVudHMKLQotICAgICAgICAgICAgICAq
IGBtb3VzZURvd25gCi0gICAgICAgICAgICAgICogYG1vdXNlVXBgCi0gICAgICAgICAgICAgICog
YGNvbnRleHRNZW51YAotICAgICAgICAgICAgICAqIGBjbGlja2AKLSAgICAgICAgICAgICAgKiBg
ZG91YmxlQ2xpY2tgCi0gICAgICAgICAgICAgICogYG1vdXNlTW92ZWAKLSAgICAgICAgICAgICAg
KiBgZm9jdXNJbmAKLSAgICAgICAgICAgICAgKiBgZm9jdXNPdXRgCi0gICAgICAgICAgICAgICog
YG1vdXNlRW50ZXJgCi0gICAgICAgICAgICAgICogYG1vdXNlTGVhdmVgCi0KLSAgICAgICAgICAg
ICAgRm9ybSBldmVudHM6Ci0KLSAgICAgICAgICAgICAgKiBgc3VibWl0YAotICAgICAgICAgICAg
ICAqIGBjaGFuZ2VgCi0gICAgICAgICAgICAgICogYGZvY3VzSW5gCi0gICAgICAgICAgICAgICog
YGZvY3VzT3V0YAotICAgICAgICAgICAgICAqIGBpbnB1dGAKLQotICAgICAgICAgICAgICBIVE1M
NSBkcmFnIGFuZCBkcm9wIGV2ZW50czoKLQotICAgICAgICAgICAgICAqIGBkcmFnU3RhcnRgCi0g
ICAgICAgICAgICAgICogYGRyYWdgCi0gICAgICAgICAgICAgICogYGRyYWdFbnRlcmAKLSAgICAg
ICAgICAgICAgKiBgZHJhZ0xlYXZlYAotICAgICAgICAgICAgICAqIGBkcmFnT3ZlcmAKLSAgICAg
ICAgICAgICAgKiBgZHJhZ0VuZGAKLSAgICAgICAgICAgICAgKiBgZHJvcGAKLQotICAgICAgICAg
ICAgICAjIyBIYW5kbGViYXJzIGB7e3ZpZXd9fWAgSGVscGVyCi0KLSAgICAgICAgICAgICAgT3Ro
ZXIgYEVtYmVyLlZpZXdgIGluc3RhbmNlcyBjYW4gYmUgaW5jbHVkZWQgYXMgcGFydCBvZiBhIHZp
ZXcncyB0ZW1wbGF0ZSBieQotICAgICAgICAgICAgICB1c2luZyB0aGUgYHt7dmlld319YCBIYW5k
bGViYXJzIGhlbHBlci4gU2VlIFtFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMudmlld10oL2FwaS9j
bGFzc2VzL0VtYmVyLkhhbmRsZWJhcnMuaGVscGVycy5odG1sI21ldGhvZF92aWV3KQotICAgICAg
ICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICBAY2xh
c3MgVmlldwotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBl
eHRlbmRzIEVtYmVyLkNvcmVWaWV3Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgVmlldyA9
IENvcmVWaWV3LmV4dGVuZCh7Ci0KLSAgICAgICAgICAgIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6
IFsnY2xhc3NOYW1lcycsICdjbGFzc05hbWVCaW5kaW5ncycsICdhdHRyaWJ1dGVCaW5kaW5ncydd
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGlzVmll
dwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgICAgICAg
IEBkZWZhdWx0IHRydWUKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGlzVmlldzogdHJ1ZSwKLQotICAgICAgICAgICAgLy8gLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgot
ICAgICAgICAgICAgLy8gVEVNUExBVEUgU1VQUE9SVAotICAgICAgICAgICAgLy8KLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0
byBsb29rdXAgaWYgbm8gdGVtcGxhdGUgaXMgcHJvdmlkZWQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQnkgZGVmYXVsdCBgRW1iZXIuVmlld2Agd2lsbCBsb29rdXAgYSB0ZW1wbGF0ZSB3aXRoIHRo
aXMgbmFtZSBpbgotICAgICAgICAgICAgICAgICAgICBgRW1iZXIuVEVNUExBVEVTYCAoYSBzaGFy
ZWQgZ2xvYmFsIG9iamVjdCkuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHRlbXBs
YXRlTmFtZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAg
ICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRl
bXBsYXRlTmFtZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgdG8gbG9va3VwIGlmIG5vIGxheW91dCBpcyBwcm92aWRl
ZC4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IGBFbWJlci5WaWV3YCB3aWxsIGxv
b2t1cCBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGluCi0gICAgICAgICAgICAgICAgICAgIGBF
bWJlci5URU1QTEFURVNgIChhIHNoYXJlZCBnbG9iYWwgb2JqZWN0KS4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgbGF5b3V0TmFtZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBT
dHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGxheW91dE5hbWU6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGlkZW50aWZ5IHRoaXMgdmlldyBkdXJpbmcgZGVi
dWdnaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGluc3RydW1lbnREaXNwbGF5
Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGluc3RydW1lbnREaXNwbGF5OiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5oZWxwZXJOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAne3snICsgdGhpcy5oZWxwZXJOYW1lICsgJ319JzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciB0aGUgdmlldy4gVGhpcyBzaG91bGQgYmUgYSBm
dW5jdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGFjY2VwdHMgYW4gb3B0aW9uYWwgY29u
dGV4dCBwYXJhbWV0ZXIgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgSFRNTCB0aGF0Ci0gICAgICAg
ICAgICAgICAgICAgIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NIHJlbGF0aXZlIHRvIGl0
cyBwYXJlbnQgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB5b3Ugc2hv
dWxkIHNldCB0aGUgYHRlbXBsYXRlTmFtZWAgcHJvcGVydHkgaW5zdGVhZCBvZiBzZXR0aW5nCi0g
ICAgICAgICAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSB5b3Vyc2VsZi4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgdGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRnVu
Y3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0ZW1wbGF0ZTogY29tcHV0
ZWQoJ3RlbXBsYXRlTmFtZScsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRl
TmFtZSA9IGdldCh0aGlzLCAndGVtcGxhdGVOYW1lJyksCi0gICAgICAgICAgICAgICAgdGVtcGxh
dGUgPSB0aGlzLnRlbXBsYXRlRm9yTmFtZSh0ZW1wbGF0ZU5hbWUsICd0ZW1wbGF0ZScpOwotCi0g
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIHRoZSB0ZW1wbGF0ZU5h
bWUgIiArIHRlbXBsYXRlTmFtZSArICIgZm9yICIgKyB0aGlzICsgIiwgYnV0IGl0IGRpZCBub3Qg
ZXhpc3QuIiwgIXRlbXBsYXRlTmFtZSB8fCB0ZW1wbGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGVtcGxhdGUgfHwgZ2V0KHRoaXMsICdkZWZhdWx0VGVtcGxhdGUnKTsKLSAgICAgICAg
ICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRy
b2xsZXIgbWFuYWdpbmcgdGhpcyB2aWV3LiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCwgaXQgd2ls
bCBiZQotICAgICAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSB0
ZW1wbGF0ZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udHJvbGxlcgotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBPYmplY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBjb250cm9sbGVyOiBjb21wdXRlZCgnX3BhcmVudFZpZXcnLCBmdW5jdGlvbihrZXkp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50VmlldyA9IGdldCh0aGlzLCAnX3BhcmVudFZp
ZXcnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50VmlldyA/IGdldChwYXJlbnRWaWV3
LCAnY29udHJvbGxlcicpIDogbnVsbDsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQSB2aWV3IG1heSBjb250YWluIGEgbGF5b3V0LiBBIGxh
eW91dCBpcyBhIHJlZ3VsYXIgdGVtcGxhdGUgYnV0Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVy
c2VkZXMgdGhlIGB0ZW1wbGF0ZWAgcHJvcGVydHkgZHVyaW5nIHJlbmRlcmluZy4gSXQgaXMgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBsYXlvdXQgdGVtcGxh
dGUgdG8gcmV0cmlldmUgdGhlIGB0ZW1wbGF0ZWAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkgZnJvbSB0aGUgdmlldyAob3IgYWx0ZXJuYXRpdmVseSwgY2FsbCBgSGFuZGxlYmFycy5oZWxw
ZXJzLnlpZWxkYCwKLSAgICAgICAgICAgICAgICAgICAgYHt7eWllbGR9fWApIHRvIHJlbmRlciBp
dCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGlz
IHVzZWZ1bCBmb3IgYSB2aWV3IHRoYXQgaGFzIGEgc2hhcmVkIHdyYXBwZXIsIGJ1dCB3aGljaCBk
ZWxlZ2F0ZXMKLSAgICAgICAgICAgICAgICAgICAgdGhlIHJlbmRlcmluZyBvZiB0aGUgY29udGVu
dHMgb2YgdGhlIHdyYXBwZXIgdG8gdGhlIGB0ZW1wbGF0ZWAgcHJvcGVydHkKLSAgICAgICAgICAg
ICAgICAgICAgb24gYSBzdWJjbGFzcy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkg
bGF5b3V0Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEZ1bmN0aW9uCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgbGF5b3V0OiBjb21wdXRlZChmdW5jdGlvbihrZXkpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbGF5b3V0TmFtZSA9IGdldCh0aGlzLCAnbGF5b3V0TmFtZScpLAot
ICAgICAgICAgICAgICAgIGxheW91dCA9IHRoaXMudGVtcGxhdGVGb3JOYW1lKGxheW91dE5hbWUs
ICdsYXlvdXQnKTsKLQotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHNwZWNpZmll
ZCB0aGUgbGF5b3V0TmFtZSAiICsgbGF5b3V0TmFtZSArICIgZm9yICIgKyB0aGlzICsgIiwgYnV0
IGl0IGRpZCBub3QgZXhpc3QuIiwgIWxheW91dE5hbWUgfHwgbGF5b3V0KTsKLQotICAgICAgICAg
ICAgICAgIHJldHVybiBsYXlvdXQgfHwgZ2V0KHRoaXMsICdkZWZhdWx0TGF5b3V0Jyk7Ci0gICAg
ICAgICAgICB9KS5wcm9wZXJ0eSgnbGF5b3V0TmFtZScpLAotCi0gICAgICAgICAgICBfeWllbGQ6
IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxh
dGUgPSBnZXQodGhpcywgJ3RlbXBsYXRlJyk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlKGNvbnRleHQsIG9wdGlvbnMpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRlbXBsYXRlRm9y
TmFtZTogZnVuY3Rpb24obmFtZSwgdHlwZSkgewotICAgICAgICAgICAgICAgIGlmICghbmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgidGVtcGxhdGVOYW1lcyBhcmUgbm90IGFsbG93ZWQgdG8g
Y29udGFpbiBwZXJpb2RzOiAiICsgbmFtZSwgbmFtZS5pbmRleE9mKCcuJykgPT09IC0xKTsKLQot
ICAgICAgICAgICAgICAgIC8vIHRoZSBkZWZhdWx0Q29udGFpbmVyIGlzIGRlcHJlY2F0ZWQKLSAg
ICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIgfHwgKENvbnRhaW5l
ciAmJiBDb250YWluZXIuZGVmYXVsdENvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnRhaW5lciAmJiBjb250YWluZXIubG9va3VwKCd0ZW1wbGF0ZTonICsgbmFtZSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG9i
amVjdCBmcm9tIHdoaWNoIHRlbXBsYXRlcyBzaG91bGQgYWNjZXNzIHByb3BlcnRpZXMuCi0KLSAg
ICAgICAgICAgICAgICAgICAgVGhpcyBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRlbXBs
YXRlIGZ1bmN0aW9uIGVhY2ggdGltZSB0aGUgcmVuZGVyCi0gICAgICAgICAgICAgICAgICAgIG1l
dGhvZCBpcyBjYWxsZWQsIGJ1dCBpdCBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiB0
byBkZWNpZGUgd2hhdAotICAgICAgICAgICAgICAgICAgICB0byBkbyB3aXRoIGl0LgotCi0gICAg
ICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBiZSB0aGUgdmlldydzIGNvbnRy
b2xsZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGNvbnRleHQKLSAgICAgICAg
ICAgICAgICAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgY29udGV4dDogY29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dCh0aGlzLCAnX2NvbnRleHQnLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2V0KHRoaXMsICdfY29udGV4dCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pWyJ2b2xhdGlsZSJdKCksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBQcml2YXRlIGNvcHkgb2YgdGhlIHZpZXcncyB0ZW1wbGF0ZSBjb250ZXh0LiBUaGlzIGNhbiBi
ZSBzZXQgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgYnkgSGFuZGxlYmFycyB3aXRob3V0
IHRyaWdnZXJpbmcgdGhlIG9ic2VydmVyIHRoYXQgY2F1c2VzIHRoZSB2aWV3Ci0gICAgICAgICAg
ICAgICAgICAgIHRvIGJlIHJlLXJlbmRlcmVkLgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBj
b250ZXh0IG9mIGEgdmlldyBpcyBsb29rZWQgdXAgYXMgZm9sbG93czoKLQotICAgICAgICAgICAg
ICAgICAgICAxLiBTdXBwbGllZCBjb250ZXh0ICh1c3VhbGx5IGJ5IEhhbmRsZWJhcnMpCi0gICAg
ICAgICAgICAgICAgICAgIDIuIFNwZWNpZmllZCBjb250cm9sbGVyCi0gICAgICAgICAgICAgICAg
ICAgIDMuIGBwYXJlbnRWaWV3YCdzIGNvbnRleHQgKGZvciBhIGNoaWxkIG9mIGEgQ29udGFpbmVy
VmlldykKLQotICAgICAgICAgICAgICAgICAgICBUaGUgY29kZSBpbiBIYW5kbGViYXJzIHRoYXQg
b3ZlcnJpZGVzIHRoZSBgX2NvbnRleHRgIHByb3BlcnR5IGZpcnN0Ci0gICAgICAgICAgICAgICAg
ICAgIGNoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgdmlldyBoYXMgYSBzcGVjaWZpZWQgY29udHJv
bGxlci4gVGhpcyBpcwotICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcgb2YgYSBoYWNrIGFu
ZCBzaG91bGQgYmUgcmV2aXNpdGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBf
Y29udGV4dAotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIF9jb250ZXh0OiBjb21wdXRlZChmdW5jdGlvbihrZXkpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgcGFyZW50VmlldywgY29udHJvbGxlcjsKLQotICAgICAgICAgICAgICAg
IGlmIChjb250cm9sbGVyID0gZ2V0KHRoaXMsICdjb250cm9sbGVyJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcGFyZW50VmlldyA9IHRoaXMuX3BhcmVudFZpZXc7Ci0gICAgICAgICAgICAgICAg
aWYgKHBhcmVudFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChwYXJlbnRW
aWV3LCAnX2NvbnRleHQnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgSWYgYSB2YWx1ZSB0aGF0IGFmZmVjdHMgdGVtcGxhdGUgcmVuZGVyaW5nIGNo
YW5nZXMsIHRoZSB2aWV3IHNob3VsZCBiZQotICAgICAgICAgICAgICAgICAgICByZS1yZW5kZXJl
ZCB0byByZWZsZWN0IHRoZSBuZXcgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBfY29udGV4dERpZENoYW5nZQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9jb250ZXh0RGlkQ2hhbmdlOiBvYnNlcnZlcign
Y29udGV4dCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVyZW5kZXIoKTsK
LSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
SWYgYGZhbHNlYCwgdGhlIHZpZXcgd2lsbCBhcHBlYXIgaGlkZGVuIGluIERPTS4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgaXNWaXNpYmxlCi0gICAgICAgICAgICAgICAgICAgIEB0
eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzVmlzaWJsZTogdHJ1ZSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEFycmF5IG9mIGNoaWxkIHZpZXdzLiBZb3Ugc2hvdWxk
IG5ldmVyIGVkaXQgdGhpcyBhcnJheSBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICAgICAgSW5z
dGVhZCwgdXNlIGBhcHBlbmRDaGlsZGAgYW5kIGByZW1vdmVGcm9tUGFyZW50YC4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgY2hpbGRWaWV3cwotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBBcnJheQotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBbXQotICAgICAgICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNoaWxk
Vmlld3M6IGNoaWxkVmlld3NQcm9wZXJ0eSwKLQotICAgICAgICAgICAgX2NoaWxkVmlld3M6IEVN
UFRZX0FSUkFZLAotCi0gICAgICAgICAgICAvLyBXaGVuIGl0J3MgYSB2aXJ0dWFsIHZpZXcsIHdl
IG5lZWQgdG8gbm90aWZ5IHRoZSBwYXJlbnQgdGhhdCB0aGVpcgotICAgICAgICAgICAgLy8gY2hp
bGRWaWV3cyB3aWxsIGNoYW5nZS4KLSAgICAgICAgICAgIF9jaGlsZFZpZXdzV2lsbENoYW5nZTog
YmVmb3JlT2JzZXJ2ZXIoJ2NoaWxkVmlld3MnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5pc1ZpcnR1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudFZp
ZXcgPSBnZXQodGhpcywgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmVudFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZShw
YXJlbnRWaWV3LCAnY2hpbGRWaWV3cycpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8vIFdoZW4gaXQncyBh
IHZpcnR1YWwgdmlldywgd2UgbmVlZCB0byBub3RpZnkgdGhlIHBhcmVudCB0aGF0IHRoZWlyCi0g
ICAgICAgICAgICAvLyBjaGlsZFZpZXdzIGRpZCBjaGFuZ2UuCi0gICAgICAgICAgICBfY2hpbGRW
aWV3c0RpZENoYW5nZTogb2JzZXJ2ZXIoJ2NoaWxkVmlld3MnLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHBhcmVudFZpZXcgPSBnZXQodGhpcywgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGlk
Q2hhbmdlKHBhcmVudFZpZXcsICdjaGlsZFZpZXdzJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFJldHVybiB0aGUgbmVhcmVzdCBhbmNlc3RvciB0aGF0IGlzIGFu
IGluc3RhbmNlIG9mIHRoZSBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICBjbGFzcy4KLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG5lYXJlc3RJbnN0YW5jZU9mCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7Q2xhc3N9IGtsYXNzIFN1YmNsYXNzIG9mIEVtYmVyLlZpZXcgKG9y
IEVtYmVyLlZpZXcgaXRzZWxmKQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIEVtYmVyLlZp
ZXcKLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBuZWFyZXN0SW5zdGFuY2VPZjogZnVuY3Rpb24oa2xhc3MpIHsKLSAgICAg
ICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIm5lYXJlc3RJbnN0YW5jZU9mIGlzIGRlcHJlY2F0
ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGZ1dHVyZSByZWxlYXNlcy4gVXNlIG5lYXJlc3RP
ZlR5cGUuIik7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBnZXQodGhpcywgJ3BhcmVudFZp
ZXcnKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICh2aWV3KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh2aWV3IGluc3RhbmNlb2Yga2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2aWV3OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHZpZXcgPSBnZXQodmlldywgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJu
IHRoZSBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVk
Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzIG9yIG1peGluLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgbmVhcmVzdE9mVHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Ns
YXNzLE1peGlufSBrbGFzcyBTdWJjbGFzcyBvZiBFbWJlci5WaWV3IChvciBFbWJlci5WaWV3IGl0
c2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBpbnN0YW5jZSBvZiBFbWJl
ci5NaXhpbi4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiBFbWJlci5WaWV3Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgbmVhcmVzdE9mVHlwZTogZnVuY3Rpb24oa2xhc3Mp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdmlldyA9IGdldCh0aGlzLCAncGFyZW50VmlldycpLAot
ICAgICAgICAgICAgICAgIGlzT2ZUeXBlID0ga2xhc3MgaW5zdGFuY2VvZiBNaXhpbiA/Ci0gICAg
ICAgICAgICAgICAgZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
a2xhc3MuZGV0ZWN0KHZpZXcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICA6
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4ga2xhc3MuZGV0ZWN0KHZpZXcuY29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAodmlldykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNPZlR5cGUodmlldykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgPSBnZXQo
dmlldywgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBuZWFyZXN0
IGFuY2VzdG9yIHRoYXQgaGFzIGEgZ2l2ZW4gcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBuZWFyZXN0V2l0aFByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBwcm9wZXJ0eSBBIHByb3BlcnR5IG5hbWUKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmVh
cmVzdFdpdGhQcm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICB2
YXIgdmlldyA9IGdldCh0aGlzLCAncGFyZW50VmlldycpOwotCi0gICAgICAgICAgICAgICAgd2hp
bGUgKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluIHZpZXcpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgPSBnZXQodmlldywgJ3BhcmVudFZpZXcnKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHdob3NlIHBhcmVu
dCBpcyBhbiBpbnN0YW5jZSBvZgotICAgICAgICAgICAgICAgICAgICBga2xhc3NgLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgbmVhcmVzdENoaWxkT2YKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtDbGFzc30ga2xhc3MgU3ViY2xhc3Mgb2YgRW1iZXIuVmlldyAob3IgRW1iZXIu
VmlldyBpdHNlbGYpCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gRW1iZXIuVmlldwotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5lYXJlc3RDaGlsZE9mOiBmdW5jdGlvbihr
bGFzcykgewotICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gZ2V0KHRoaXMsICdwYXJlbnRWaWV3
Jyk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAodmlldykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2V0KHZpZXcsICdwYXJlbnRWaWV3JykgaW5zdGFuY2VvZiBrbGFzcykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgdmlldyA9IGdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBXaGVuIHRoZSBwYXJlbnQgdmlldyBjaGFuZ2VzLCByZWN1cnNpdmVseSBpbnZh
bGlkYXRlIGBjb250cm9sbGVyYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX3BhcmVu
dFZpZXdEaWRDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBfcGFyZW50Vmlld0RpZENoYW5nZTogb2JzZXJ2ZXIoJ19w
YXJlbnRWaWV3JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0
cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3BhcmVudFZpZXdEaWRDaGFuZ2UnKTsK
LQotICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywgJ3BhcmVudFZpZXcuY29udHJvbGxlcicp
ICYmICFnZXQodGhpcywgJ2NvbnRyb2xsZXInKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Lm5vdGlmeVByb3BlcnR5Q2hhbmdlKCdjb250cm9sbGVyJyk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9jb250cm9sbGVyRGlkQ2hhbmdlOiBvYnNl
cnZlcignY29udHJvbGxlcicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlz
LmlzRGVzdHJveWluZykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5yZXJlbmRlcigpOwotCi0gICAgICAgICAg
ICAgICAgdGhpcy5mb3JFYWNoQ2hpbGRWaWV3KGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmlldy5wcm9wZXJ0eURpZENoYW5nZSgnY29udHJvbGxlcicpOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIGNsb25lS2V5d29yZHM6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZURhdGEgPSBnZXQodGhp
cywgJ3RlbXBsYXRlRGF0YScpOwotCi0gICAgICAgICAgICAgICAgdmFyIGtleXdvcmRzID0gdGVt
cGxhdGVEYXRhID8gY29weSh0ZW1wbGF0ZURhdGEua2V5d29yZHMpIDoge307Ci0gICAgICAgICAg
ICAgICAgc2V0KGtleXdvcmRzLCAndmlldycsIHRoaXMuaXNWaXJ0dWFsID8ga2V5d29yZHMudmll
dyA6IHRoaXMpOwotICAgICAgICAgICAgICAgIHNldChrZXl3b3JkcywgJ192aWV3JywgdGhpcyk7
Ci0gICAgICAgICAgICAgICAgc2V0KGtleXdvcmRzLCAnY29udHJvbGxlcicsIGdldCh0aGlzLCAn
Y29udHJvbGxlcicpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBrZXl3b3JkczsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDYWxsZWQg
b24geW91ciB2aWV3IHdoZW4gaXQgc2hvdWxkIHB1c2ggc3RyaW5ncyBvZiBIVE1MIGludG8gYQot
ICAgICAgICAgICAgICAgICAgICBgRW1iZXIuUmVuZGVyQnVmZmVyYC4gTW9zdCB1c2VycyB3aWxs
IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGB0ZW1wbGF0ZWAKLSAgICAgICAgICAgICAgICAgICAgb3Ig
YHRlbXBsYXRlTmFtZWAgcHJvcGVydGllcyBpbnN0ZWFkIG9mIHRoaXMgbWV0aG9kLgotCi0gICAg
ICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGBFbWJlci5WaWV3YCB3aWxsIGxvb2sgZm9yIGEg
ZnVuY3Rpb24gaW4gdGhlIGB0ZW1wbGF0ZWAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkg
YW5kIGludm9rZSBpdCB3aXRoIHRoZSB2YWx1ZSBvZiBgY29udGV4dGAuIFRoZSB2YWx1ZSBvZgot
ICAgICAgICAgICAgICAgICAgICBgY29udGV4dGAgd2lsbCBiZSB0aGUgdmlldydzIGNvbnRyb2xs
ZXIgdW5sZXNzIHlvdSBvdmVycmlkZSBpdC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IHJlbmRlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLlJlbmRlckJ1ZmZlcn0g
YnVmZmVyIFRoZSByZW5kZXIgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcmVuZGVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IHZpZXcgaGFzIGEgbGF5b3V0LCBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIGxheW91dCB0byByZW5kZXIgdGhlIHZpZXcncyB0ZW1wbGF0ZS4g
T3RoZXJ3aXNlLCByZW5kZXIgdGhlIHRlbXBsYXRlCi0gICAgICAgICAgICAgICAgLy8gZGlyZWN0
bHkuCi0gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gZ2V0KHRoaXMsICdsYXlvdXQnKSB8
fCBnZXQodGhpcywgJ3RlbXBsYXRlJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBnZXQodGhpcywgJ2NvbnRleHQn
KTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGtleXdvcmRzID0gdGhpcy5jbG9uZUtleXdvcmRz
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXQ7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3OiB0aGlzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpc1JlbmRlckRhdGE6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jk
czoga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGVHcm91cDogZ2V0KHRo
aXMsICd0ZW1wbGF0ZURhdGEuaW5zaWRlR3JvdXAnKQotICAgICAgICAgICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEludm9rZSB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgcHJv
dmlkZWQgdGVtcGxhdGUgY29udGV4dCwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gaXMg
dGhlIHZpZXcncyBjb250cm9sbGVyIGJ5IGRlZmF1bHQuIEEgaGFzaCBvZiBkYXRhIGlzIGFsc28g
cGFzc2VkIHRoYXQgcHJvdmlkZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRlbXBsYXRl
IHdpdGggYWNjZXNzIHRvIHRoZSB2aWV3IGFuZCByZW5kZXIgYnVmZmVyLgotCi0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLmFzc2VydCgndGVtcGxhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uLiBEaWQg
eW91IG1lYW4gdG8gY2FsbCBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoIi4uLiIpIG9yIHNwZWNp
ZnkgdGVtcGxhdGVOYW1lIGluc3RlYWQ/JywgdHlwZW9mIHRlbXBsYXRlID09PSAnZnVuY3Rpb24n
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRlbXBsYXRlIHNob3VsZCB3cml0ZSBkaXJl
Y3RseSB0byB0aGUgcmVuZGVyIGJ1ZmZlciBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgIC8v
IG9mIHJldHVybmluZyBhIHN0cmluZy4KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gdGVt
cGxhdGUoY29udGV4dCwgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSAKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRl
bXBsYXRlIHJldHVybmVkIGEgc3RyaW5nIGluc3RlYWQgb2Ygd3JpdGluZyB0byB0aGUgYnVmZmVy
LAotICAgICAgICAgICAgICAgICAgICAvLyBwdXNoIHRoZSBzdHJpbmcgb250byB0aGUgYnVmZmVy
LgotICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKG91dHB1dCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVycyB0aGUgdmlldyBhZ2Fpbi4gVGhpcyB3aWxs
IHdvcmsgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZQotICAgICAgICAgICAgICAgICAgICB2aWV3
IGlzIGFscmVhZHkgaW4gdGhlIERPTSBvciBub3QuIElmIHRoZSB2aWV3IGlzIGluIHRoZSBET00s
IHRoZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgcHJvY2VzcyB3aWxsIGJlIGRlZmVy
cmVkIHRvIGdpdmUgYmluZGluZ3MgYSBjaGFuY2UKLSAgICAgICAgICAgICAgICAgICAgdG8gc3lu
Y2hyb25pemUuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgY2hpbGRyZW4gd2VyZSBhZGRlZCBk
dXJpbmcgdGhlIHJlbmRlcmluZyBwcm9jZXNzIHVzaW5nIGBhcHBlbmRDaGlsZGAsCi0gICAgICAg
ICAgICAgICAgICAgIGByZXJlbmRlcmAgd2lsbCByZW1vdmUgdGhlbSwgYmVjYXVzZSB0aGV5IHdp
bGwgYmUgYWRkZWQgYWdhaW4KLSAgICAgICAgICAgICAgICAgICAgaWYgbmVlZGVkIGJ5IHRoZSBu
ZXh0IGByZW5kZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGlmIHRoZSBk
aXNwbGF5IG9mIHlvdXIgdmlldyBjaGFuZ2VzLCB5b3Ugc2hvdWxkIG1vZGlmeQotICAgICAgICAg
ICAgICAgICAgICB0aGUgRE9NIGVsZW1lbnQgZGlyZWN0bHkgaW5zdGVhZCBvZiBtYW51YWxseSBj
YWxsaW5nIGByZXJlbmRlcmAsIHdoaWNoIGNhbgotICAgICAgICAgICAgICAgICAgICBiZSBzbG93
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVyZW5kZXIKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICByZXJlbmRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnJlcmVuZGVyKHRoaXMpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgY2xlYXJSZW5kZXJlZENoaWxkcmVuOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbGVuZ3RoQmVmb3JlID0gdGhpcy5sZW5ndGhCZWZvcmVSZW5kZXIs
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoQWZ0ZXIgPSB0aGlzLmxlbmd0aEFmdGVyUmVuZGVyOwot
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBjaGlsZCB2aWV3cyBjcmVhdGVkIGR1
cmluZyB0aGUgbGFzdCBjYWxsIHRvIHJlbmRlcigpLAotICAgICAgICAgICAgICAgIC8vIHJlbW92
ZSB0aGVtIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlLWNyZWF0ZWQg
d2hlbgotICAgICAgICAgICAgICAgIC8vIHdlIHJlLXJlbmRlci4KLQotICAgICAgICAgICAgICAg
IC8vIFZJRVctVE9ETzogVW5pdCB0ZXN0IHRoaXMgcGF0aC4KLSAgICAgICAgICAgICAgICB2YXIg
Y2hpbGRWaWV3cyA9IHRoaXMuX2NoaWxkVmlld3M7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IGxlbmd0aEFmdGVyLTE7IGkgPj0gbGVuZ3RoQmVmb3JlOyBpLS0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkVmlld3NbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkVmlld3NbaV0uZGVzdHJveSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEl0ZXJhdGVzIG92ZXIgdGhlIHZpZXcncyBgY2xhc3NOYW1lQmluZGluZ3NgIGFycmF5
LCBpbnNlcnRzIHRoZSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3BlY2lmaWVk
IHByb3BlcnR5IGludG8gdGhlIGBjbGFzc05hbWVzYCBhcnJheSwgdGhlbiBjcmVhdGVzIGFuCi0g
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVyIHRvIHVwZGF0ZSB0aGUgdmlldydzIGVsZW1lbnQg
aWYgdGhlIGJvdW5kIHByb3BlcnR5IGV2ZXIgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICBp
biB0aGUgZnV0dXJlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2FwcGx5Q2xhc3NO
YW1lQmluZGluZ3MKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBfYXBwbHlDbGFzc05hbWVCaW5kaW5nczogZnVuY3Rpb24oY2xh
c3NCaW5kaW5ncykgewotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWVzID0gdGhpcy5jbGFz
c05hbWVzLAotICAgICAgICAgICAgICAgIGVsZW0sIG5ld0NsYXNzLCBkYXNoZXJpemVkQ2xhc3M7
Ci0KLSAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9mIHRoZSBjb25maWd1cmVk
IGJpbmRpbmdzLiBUaGVzZSB3aWxsIGJlIGVpdGhlcgotICAgICAgICAgICAgICAgIC8vIHByb3Bl
cnR5IG5hbWVzICgnaXNVcmdlbnQnKSBvciBwcm9wZXJ0eSBwYXRocyByZWxhdGl2ZSB0byB0aGUg
dmlldwotICAgICAgICAgICAgICAgIC8vICgnY29udGVudC5pc1VyZ2VudCcpCi0gICAgICAgICAg
ICAgICAgZm9yRWFjaChjbGFzc0JpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJjbGFzc05hbWVCaW5kaW5ncyBtdXN0IG5vdCBo
YXZlIHNwYWNlcyBpbiB0aGVtLiBNdWx0aXBsZSBjbGFzcyBuYW1lIGJpbmRpbmdzIGNhbiBiZSBw
cm92aWRlZCBhcyBlbGVtZW50cyBvZiBhbiBhcnJheSwgZS5nLiBbJ2ZvbycsICc6YmFyJ10iLCBi
aW5kaW5nLmluZGV4T2YoJyAnKSA9PT0gLTEpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFZh
cmlhYmxlIGluIHdoaWNoIHRoZSBvbGQgY2xhc3MgdmFsdWUgaXMgc2F2ZWQuIFRoZSBvYnNlcnZl
ciBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZXMgb3ZlciB0aGlzIHZhcmlh
YmxlLCBzbyBpdCBrbm93cyB3aGljaCBzdHJpbmcgdG8gcmVtb3ZlIHdoZW4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIHByb3BlcnR5IGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBvbGRDbGFzczsKLSAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBwcm9w
ZXJ0eSBuYW1lIGZyb20gYmluZGluZ3MgbGlrZSAnZm9vOmJhcicKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHBhcnNlZFBhdGggPSBWaWV3Ll9wYXJzZVByb3BlcnR5UGF0aChiaW5kaW5nKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdXAgYW4gb2JzZXJ2ZXIgb24gdGhlIGNvbnRleHQu
IElmIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLCB0b2dnbGUgdGhlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGNsYXNzIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHZhbHVl
IG9mIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2xhc3MgPSB0aGlz
Ll9jbGFzc1N0cmluZ0ZvclByb3BlcnR5KGJpbmRpbmcpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IHRoaXMuJCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBo
YWQgcHJldmlvdXNseSBhZGRlZCBhIGNsYXNzIHRvIHRoZSBlbGVtZW50LCByZW1vdmUgaXQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKG9sZENsYXNzKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBbHNvIHJlbW92ZSBmcm9tIGNsYXNzTmFtZXMgc28gdGhhdCBpZiB0aGUg
dmlldyBnZXRzIHJlcmVuZGVyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IGNsYXNzIGRvZXNuJ3QgZ2V0IGFkZGVkIGJhY2sgdG8gdGhlIERPTS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc05hbWVzLnJlbW92ZU9iamVjdChvbGRDbGFzcyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lY2Vz
c2FyeSwgYWRkIGEgbmV3IGNsYXNzLiBNYWtlIHN1cmUgd2Uga2VlcCB0cmFjayBvZiBpdCBzbwot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVy
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDbGFzcykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MobmV3Q2xhc3MpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZENsYXNzID0gbmV3Q2xhc3M7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZENsYXNzID0gbnVsbDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNsYXNzIG5hbWUgZm9yIHRoZSBwcm9wZXJ0eSBh
dCBpdHMgY3VycmVudCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBkYXNoZXJpemVkQ2xhc3Mg
PSB0aGlzLl9jbGFzc1N0cmluZ0ZvclByb3BlcnR5KGJpbmRpbmcpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChkYXNoZXJpemVkQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVuc3VyZSB0aGF0IGl0IGdldHMgaW50byB0aGUgY2xhc3NOYW1lcyBhcnJheQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc28gaXQgaXMgZGlzcGxheWVkIHdoZW4gd2UgcmVuZGVyLgotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkT2JqZWN0KGNsYXNzTmFtZXMsIGRhc2hlcml6ZWRDbGFz
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhl
IGNsYXNzIG5hbWUgc28gd2UgY2FuIHJlbW92ZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaWYgdGhlIG9ic2VydmVyIGZpcmVzLiBSZW1lbWJlciB0aGF0IHRoaXMgdmFyaWFibGUgaGFz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIGNsb3NlZCBvdmVyIGJ5IHRoZSBvYnNl
cnZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZENsYXNzID0gZGFzaGVyaXplZENsYXNz
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdp
c3Rlck9ic2VydmVyKHRoaXMsIHBhcnNlZFBhdGgucGF0aCwgb2JzZXJ2ZXIpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgY2xhc3NOYW1lIHNvIHdoZW4gdGhlIHZpZXcgaXMgcmVyZW5k
ZXJlZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNsYXNzTmFtZSBpcyBhZGRlZCBiYXNl
ZCBvbiBiaW5kaW5nIHJlZXZhbHVhdGlvbgotICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZSgn
d2lsbENsZWFyUmVuZGVyJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob2xkQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzLnJl
bW92ZU9iamVjdChvbGRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2xh
c3MgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgX3Vuc3BlY2lmaWVkQXR0cmlidXRlQmluZGluZ3M6IG51bGwsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJdGVyYXRlcyB0aHJvdWdoIHRoZSB2aWV3J3Mg
YXR0cmlidXRlIGJpbmRpbmdzLCBzZXRzIHVwIG9ic2VydmVycyBmb3IgZWFjaCwKLSAgICAgICAg
ICAgICAgICAgICAgdGhlbiBhcHBsaWVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhdHRyaWJ1
dGVzIHRvIHRoZSBwYXNzZWQgcmVuZGVyIGJ1ZmZlci4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIF9hcHBseUF0dHJpYnV0ZUJpbmRpbmdzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfYXBwbHlBdHRyaWJ1dGVCaW5k
aW5nczogZnVuY3Rpb24oYnVmZmVyLCBhdHRyaWJ1dGVCaW5kaW5ncykgewotICAgICAgICAgICAg
ICAgIHZhciBhdHRyaWJ1dGVWYWx1ZSwKLSAgICAgICAgICAgICAgICB1bnNwZWNpZmllZEF0dHJp
YnV0ZUJpbmRpbmdzID0gdGhpcy5fdW5zcGVjaWZpZWRBdHRyaWJ1dGVCaW5kaW5ncyA9IHRoaXMu
X3Vuc3BlY2lmaWVkQXR0cmlidXRlQmluZGluZ3MgfHwge307Ci0KLSAgICAgICAgICAgICAgICBm
b3JFYWNoKGF0dHJpYnV0ZUJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBzcGxpdCA9IGJpbmRpbmcuc3BsaXQoJzonKSwKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHkgPSBzcGxpdFswXSwKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
TmFtZSA9IHNwbGl0WzFdIHx8IHByb3BlcnR5OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0eSBpbiB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEF0
dHJpYnV0ZUJpbmRpbmdPYnNlcnZhdGlvbihwcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCB2YWx1ZSBhbmQg
YWRkIGl0IHRvIHRoZSByZW5kZXIgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdl
dCh0aGlzLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWaWV3LmFwcGx5QXR0
cmlidXRlQmluZGluZ3MoYnVmZmVyLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNw
ZWNpZmllZEF0dHJpYnV0ZUJpbmRpbmdzW3Byb3BlcnR5XSA9IGF0dHJpYnV0ZU5hbWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIC8vIExhemlseSBzZXR1cCBzZXRVbmtub3duUHJvcGVydHkgYWZ0ZXIgYXR0cmlidXRl
QmluZGluZ3MgYXJlIGluaXRpYWxseSBhcHBsaWVkCi0gICAgICAgICAgICAgICAgdGhpcy5zZXRV
bmtub3duUHJvcGVydHkgPSB0aGlzLl9zZXRVbmtub3duUHJvcGVydHk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBfc2V0dXBBdHRyaWJ1dGVCaW5kaW5nT2JzZXJ2YXRpb246IGZ1bmN0
aW9uKHByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJp
YnV0ZVZhbHVlLCBlbGVtOwotCi0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIG9ic2VydmVy
IHRvIGFkZC9yZW1vdmUvY2hhbmdlIHRoZSBhdHRyaWJ1dGUgaWYgdGhlCi0gICAgICAgICAgICAg
ICAgLy8gSmF2YVNjcmlwdCBwcm9wZXJ0eSBjaGFuZ2VzLgotICAgICAgICAgICAgICAgIHZhciBv
YnNlcnZlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpcy4k
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBnZXQodGhpcywgcHJv
cGVydHkpOwotCi0gICAgICAgICAgICAgICAgICAgIFZpZXcuYXBwbHlBdHRyaWJ1dGVCaW5kaW5n
cyhlbGVtLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcih0aGlzLCBwcm9wZXJ0
eSwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFdlJ3JlIHVzaW5nIHNldFVua25vd25Qcm9wZXJ0eSBhcyBhIGhvb2sgdG8g
c2V0dXAgYXR0cmlidXRlQmluZGluZyBvYnNlcnZlcnMgZm9yCi0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnRpZXMgdGhhdCBhcmVuJ3QgZGVmaW5lZCBvbiBhIHZpZXcgYXQgaW5pdGlhbGl6YXRp
b24gdGltZS4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlOiBzZXRVbmtub3duUHJvcGVydHkg
d2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHByb3BlcnR5LgotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2Qgc2V0VW5rbm93blByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHZhbHVlCi0gICAgICAgICAg
ICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0
VW5rbm93blByb3BlcnR5OiBudWxsLAotICAgICAgICAgICAgLy8gR2V0cyBkZWZpbmVkIGFmdGVy
IGluaXRpYWxpemF0aW9uIGJ5IF9hcHBseUF0dHJpYnV0ZUJpbmRpbmdzCi0KLSAgICAgICAgICAg
IF9zZXRVbmtub3duUHJvcGVydHk6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHRoaXMuX3Vuc3BlY2lmaWVkQXR0cmlidXRlQmluZGlu
Z3MgJiYgdGhpcy5fdW5zcGVjaWZpZWRBdHRyaWJ1dGVCaW5kaW5nc1trZXldOwotICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nl
dHVwQXR0cmlidXRlQmluZGluZ09ic2VydmF0aW9uKGtleSwgYXR0cmlidXRlTmFtZSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywga2V5
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0KHRoaXMsIGtleSwgdmFsdWUpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEdpdmVuIGEg
cHJvcGVydHkgbmFtZSwgcmV0dXJucyBhIGRhc2hlcml6ZWQgdmVyc2lvbiBvZiB0aGF0Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5IG5hbWUgaWYgdGhlIHByb3BlcnR5IGV2YWx1YXRlcyB0
byBhIG5vbi1mYWxzeSB2YWx1ZS4KLQotICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwg
aWYgdGhlIHZpZXcgaGFzIHByb3BlcnR5IGBpc1VyZ2VudGAgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1
ZSwKLSAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBgaXNVcmdlbnRgIHRvIHRoaXMgbWV0aG9k
IHdpbGwgcmV0dXJuIGAiaXMtdXJnZW50ImAuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBfY2xhc3NTdHJpbmdGb3JQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcHJv
cGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBfY2xhc3NTdHJpbmdGb3JQcm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHkp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUGF0aCA9IFZpZXcuX3BhcnNlUHJvcGVydHlQ
YXRoKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IHBhcnNlZFBhdGgucGF0
aDsKLQotICAgICAgICAgICAgICAgIHZhciB2YWwgPSBnZXQodGhpcywgcGF0aCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmIGlzR2xvYmFsUGF0aChwYXRoKSkgewot
ICAgICAgICAgICAgICAgICAgICB2YWwgPSBnZXQoRW1iZXIubG9va3VwLCBwYXRoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gVmlldy5fY2xhc3NTdHJpbmdG
b3JWYWx1ZShwYXRoLCB2YWwsIHBhcnNlZFBhdGguY2xhc3NOYW1lLCBwYXJzZWRQYXRoLmZhbHN5
Q2xhc3NOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAg
ICAgIC8vIEVMRU1FTlQgU1VQUE9SVAotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQgZm9y
IHRoZSB2aWV3LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBlbGVtZW50Ci0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIERPTUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBlbGVtZW50OiBjb21wdXRlZCgnX3BhcmVudFZpZXcnLCBmdW5jdGlvbihrZXks
IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLnNldEVsZW1lbnQodGhp
cywgdmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5nZXRFbGVtZW50KHRoaXMpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgUmV0dXJucyBhIGpRdWVyeSBvYmplY3QgZm9yIHRoaXMgdmlldydzIGVsZW1lbnQuIElm
IHlvdSBwYXNzIGluIGEgc2VsZWN0b3IKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCB0aGlz
IG1ldGhvZCB3aWxsIHJldHVybiBhIGpRdWVyeSBvYmplY3QsIHVzaW5nIHRoZSBjdXJyZW50IGVs
ZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgYXMgaXRzIGJ1ZmZlci4KLQotICAgICAgICAgICAg
ICAgICAgICBGb3IgZXhhbXBsZSwgY2FsbGluZyBgdmlldy4kKCdsaScpYCB3aWxsIHJldHVybiBh
IGpRdWVyeSBvYmplY3QgY29udGFpbmluZwotICAgICAgICAgICAgICAgICAgICBhbGwgb2YgdGhl
IGBsaWAgZWxlbWVudHMgaW5zaWRlIHRoZSBET00gZWxlbWVudCBvZiB0aGlzIHZpZXcuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCAkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBbc2VsZWN0b3JdIGEgalF1ZXJ5LWNvbXBhdGlibGUgc2VsZWN0b3Igc3RyaW5nCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge2pRdWVyeX0gdGhlIGpRdWVyeSBvYmplY3QgZm9y
IHRoZSBET00gbm9kZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICQ6IGZ1bmN0
aW9uKHNlbCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS4kKHRo
aXMsIHNlbCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBtdXRhdGVDaGlsZFZpZXdz
OiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0g
dGhpcy5fY2hpbGRWaWV3cywKLSAgICAgICAgICAgICAgICBpZHggPSBjaGlsZFZpZXdzLmxlbmd0
aCwKLSAgICAgICAgICAgICAgICB2aWV3OwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKC0taWR4
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGNoaWxkVmlld3NbaWR4XTsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpcywgdmlldywgaWR4KTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGZvckVhY2hDaGlsZFZpZXc6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCFjaGlsZFZpZXdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjaGls
ZFZpZXdzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICB2aWV3LCBpZHg7Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmlldyA9IGNoaWxkVmlld3NbaWR4XTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
dmlldyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
QXBwZW5kcyB0aGUgdmlldydzIGVsZW1lbnQgdG8gdGhlIHNwZWNpZmllZCBwYXJlbnQgZWxlbWVu
dC4KLQotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgdmlldyBkb2VzIG5vdCBoYXZlIGFuIEhU
TUwgcmVwcmVzZW50YXRpb24geWV0LCBgY3JlYXRlRWxlbWVudCgpYAotICAgICAgICAgICAgICAg
ICAgICB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5LgotCi0gICAgICAgICAgICAgICAgICAg
IE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBqdXN0IHNjaGVkdWxlcyB0aGUgdmlldyB0byBiZSBhcHBl
bmRlZDsgdGhlIERPTQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHdpbGwgbm90IGJlIGFw
cGVuZGVkIHRvIHRoZSBnaXZlbiBlbGVtZW50IHVudGlsIGFsbCBiaW5kaW5ncyBoYXZlCi0gICAg
ICAgICAgICAgICAgICAgIGZpbmlzaGVkIHN5bmNocm9uaXppbmcuCi0KLSAgICAgICAgICAgICAg
ICAgICAgVGhpcyBpcyBub3QgdHlwaWNhbGx5IGEgZnVuY3Rpb24gdGhhdCB5b3Ugd2lsbCBuZWVk
IHRvIGNhbGwgZGlyZWN0bHkgd2hlbgotICAgICAgICAgICAgICAgICAgICBidWlsZGluZyB5b3Vy
IGFwcGxpY2F0aW9uLiBZb3UgbWlnaHQgY29uc2lkZXIgdXNpbmcgYEVtYmVyLkNvbnRhaW5lclZp
ZXdgCi0gICAgICAgICAgICAgICAgICAgIGluc3RlYWQuIElmIHlvdSBkbyBuZWVkIHRvIHVzZSBg
YXBwZW5kVG9gLCBiZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBlbGVtZW50Ci0gICAgICAgICAgICAg
ICAgICAgIHlvdSBhcmUgcHJvdmlkaW5nIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBgRW1iZXIuQXBw
bGljYXRpb25gIGFuZCBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICBoYXZlIGFuIGFuY2Vz
dG9yIGVsZW1lbnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gRW1iZXIgdmlldy4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGFwcGVuZFRvCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfERPTUVsZW1lbnR8alF1ZXJ5fSBBIHNlbGVjdG9yLCBlbGVtZW50LCBIVE1M
IHN0cmluZywgb3IgalF1ZXJ5IG9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtF
bWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFw
cGVuZFRvOiBmdW5jdGlvbih0YXJnZXQpIHsKLSAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0
aGUgRE9NIGVsZW1lbnQgdG8gYmUgY3JlYXRlZCBhbmQgYXBwZW5kZWQgdG8gdGhlIGdpdmVuCi0g
ICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhZnRlciBiaW5kaW5ncyBoYXZlIHN5bmNocm9uaXpl
ZC4KLSAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRFbGVtZW50TGF0ZXIoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGFwcGVuZCB0
byAoIiArIHRhcmdldCArICIpIGJ1dCB0aGF0IGlzbid0IGluIHRoZSBET00iLCBqUXVlcnkodGFy
Z2V0KS5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
Y2Fubm90IGFwcGVuZCB0byBhbiBleGlzdGluZyBFbWJlci5WaWV3LiBDb25zaWRlciB1c2luZyBF
bWJlci5Db250YWluZXJWaWV3IGluc3RlYWQuIiwgIWpRdWVyeSh0YXJnZXQpLmlzKCcuZW1iZXIt
dmlldycpICYmICFqUXVlcnkodGFyZ2V0KS5wYXJlbnRzKCkuaXMoJy5lbWJlci12aWV3JykpOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLiQoKS5hcHBlbmRUbyh0YXJnZXQpOwotICAgICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVwbGFjZXMgdGhlIGNv
bnRlbnQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgZWxlbWVudCB3aXRoIHRoaXMgdmlldydzCi0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuIElmIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgYW4g
SFRNTCByZXByZXNlbnRhdGlvbiB5ZXQsCi0gICAgICAgICAgICAgICAgICAgIGBjcmVhdGVFbGVt
ZW50KClgIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCi0KLSAgICAgICAgICAgICAgICAg
ICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGp1c3Qgc2NoZWR1bGVzIHRoZSB2aWV3IHRvIGJlIGFw
cGVuZGVkOyB0aGUgRE9NCi0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgd2lsbCBub3QgYmUg
YXBwZW5kZWQgdG8gdGhlIGdpdmVuIGVsZW1lbnQgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUKLSAg
ICAgICAgICAgICAgICAgICAgZmluaXNoZWQgc3luY2hyb25pemluZwotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVwbGFjZUluCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfERPTUVsZW1lbnR8alF1ZXJ5fSB0YXJnZXQgQSBzZWxlY3RvciwgZWxlbWVudCwgSFRNTCBz
dHJpbmcsIG9yIGpRdWVyeSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1i
ZXIuVmlld30gcmVjZWl2ZWQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXBs
YWNlSW46IGZ1bmN0aW9uKHRhcmdldCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IHRyaWVkIHRvIHJlcGxhY2UgaW4gKCIgKyB0YXJnZXQgKyAiKSBidXQgdGhhdCBpc24ndCBp
biB0aGUgRE9NIiwgalF1ZXJ5KHRhcmdldCkubGVuZ3RoID4gMCk7Ci0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJZb3UgY2Fubm90IHJlcGxhY2UgYW4gZXhpc3RpbmcgRW1iZXIuVmlldy4g
Q29uc2lkZXIgdXNpbmcgRW1iZXIuQ29udGFpbmVyVmlldyBpbnN0ZWFkLiIsICFqUXVlcnkodGFy
Z2V0KS5pcygnLmVtYmVyLXZpZXcnKSAmJiAhalF1ZXJ5KHRhcmdldCkucGFyZW50cygpLmlzKCcu
ZW1iZXItdmlldycpKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnRMYXRl
cihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRhcmdldCkuZW1wdHko
KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy4kKCkuYXBwZW5kVG8odGFyZ2V0KTsKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNjaGVkdWxlcyBh
IERPTSBvcGVyYXRpb24gdG8gb2NjdXIgZHVyaW5nIHRoZSBuZXh0IHJlbmRlciBwaGFzZS4gVGhp
cwotICAgICAgICAgICAgICAgICAgICBlbnN1cmVzIHRoYXQgYWxsIGJpbmRpbmdzIGhhdmUgZmlu
aXNoZWQgc3luY2hyb25pemluZyBiZWZvcmUgdGhlIHZpZXcgaXMKLSAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVG8gdXNlLCBwYXNzIGEgZnVuY3Rp
b24gdGhhdCBwZXJmb3JtcyBhIERPTSBvcGVyYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAg
QmVmb3JlIHlvdXIgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGlzIHZpZXcgYW5kIGFsbCBjaGlsZCB2
aWV3cyB3aWxsIHJlY2VpdmUKLSAgICAgICAgICAgICAgICAgICAgdGhlIGB3aWxsSW5zZXJ0RWxl
bWVudGAgZXZlbnQuIEFmdGVyIHlvdXIgZnVuY3Rpb24gaXMgaW52b2tlZCwgdGhpcyB2aWV3Ci0g
ICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgb2YgaXRzIGNoaWxkIHZpZXdzIHdpbGwgcmVjZWl2
ZSB0aGUgYGRpZEluc2VydEVsZW1lbnRgIGV2ZW50LgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmlldy5faW5zZXJ0RWxlbWVudExhdGVy
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudCgp
OwotICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCgpLmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIF9pbnNlcnRFbGVtZW50TGF0ZXIKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRoYXQgaW5zZXJ0cyB0aGUgZWxl
bWVudCBpbnRvIHRoZSBET00KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBfaW5zZXJ0RWxlbWVudExhdGVyOiBmdW5jdGlvbihm
bikgewotICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZEluc2VydCA9IHJ1bi5zY2hlZHVs
ZU9uY2UoJ3JlbmRlcicsIHRoaXMsICdfaW5zZXJ0RWxlbWVudCcsIGZuKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIF9pbnNlcnRFbGVtZW50OiBmdW5jdGlvbiAoZm4pIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRJbnNlcnQgPSBudWxsOwotICAgICAgICAgICAgICAg
IHRoaXMuY3VycmVudFN0YXRlLmluc2VydEVsZW1lbnQodGhpcywgZm4pOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFwcGVuZHMgdGhlIHZp
ZXcncyBlbGVtZW50IHRvIHRoZSBkb2N1bWVudCBib2R5LiBJZiB0aGUgdmlldyBkb2VzCi0gICAg
ICAgICAgICAgICAgICAgIG5vdCBoYXZlIGFuIEhUTUwgcmVwcmVzZW50YXRpb24geWV0LCBgY3Jl
YXRlRWxlbWVudCgpYCB3aWxsIGJlIGNhbGxlZAotICAgICAgICAgICAgICAgICAgICBhdXRvbWF0
aWNhbGx5LgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyB0
aGUgYHJvb3RFbGVtZW50YCBwcm9wZXJ0eSwgeW91IG11c3QgYXBwZW5kCi0gICAgICAgICAgICAg
ICAgICAgIHRoZSB2aWV3IHdpdGhpbiB0aGF0IGVsZW1lbnQuIFJlbmRlcmluZyB2aWV3cyBvdXRz
aWRlIG9mIHRoZSBgcm9vdEVsZW1lbnRgCi0gICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzdXBw
b3J0ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGp1c3Qg
c2NoZWR1bGVzIHRoZSB2aWV3IHRvIGJlIGFwcGVuZGVkOyB0aGUgRE9NCi0gICAgICAgICAgICAg
ICAgICAgIGVsZW1lbnQgd2lsbCBub3QgYmUgYXBwZW5kZWQgdG8gdGhlIGRvY3VtZW50IGJvZHkg
dW50aWwgYWxsIGJpbmRpbmdzIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgc3lu
Y2hyb25pemluZy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFwcGVuZAotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB0aGUgdmlldydz
IGVsZW1lbnQgZnJvbSB0aGUgZWxlbWVudCB0byB3aGljaCBpdCBpcyBhdHRhY2hlZC4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZQotICAgICAgICAgICAgICAgICAgICBAcmV0
dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hhdCB3ZSBzaG91
bGQgcmVhbGx5IGRvIGhlcmUgaXMgd2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBydW4gbG9vcAot
ICAgICAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgZWxlbWVudCBoYXMgYmVlbiBy
ZS1hcHBlbmRlZCB0byBhIGRpZmZlcmVudAotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuCi0g
ICAgICAgICAgICAgICAgLy8gSW4gdGhlIGludGVyaW0sIHdlIHdpbGwganVzdCByZS1yZW5kZXIg
aWYgdGhhdCBoYXBwZW5zLiBJdCBpcyBtb3JlCi0gICAgICAgICAgICAgICAgLy8gaW1wb3J0YW50
IHRoYW4gZWxlbWVudHMgZ2V0IGdhcmJhZ2UgY29sbGVjdGVkLgotICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5yZW1vdmVkRnJvbURPTSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ry
b3lFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuaW52
b2tlUmVjdXJzaXZlbHkoZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
dmlldy5jbGVhclJlbmRlcmVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZp
ZXcuY2xlYXJSZW5kZXJlZENoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVsZW1lbnRJZDog
bnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEF0dGVtcHRzIHRv
IGRpc2NvdmVyIHRoZSBlbGVtZW50IGluIHRoZSBwYXJlbnQgZWxlbWVudC4gVGhlIGRlZmF1bHQK
LSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gbG9va3MgZm9yIGFuIGVsZW1lbnQg
d2l0aCBhbiBJRCBvZiBgZWxlbWVudElkYCAob3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZp
ZXcncyBndWlkIGlmIGBlbGVtZW50SWRgIGlzIG51bGwpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMg
bWV0aG9kIHRvCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgeW91ciBvd24gZm9ybSBvZiBs
b29rdXAuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkaXNjb3ZlciB5b3VyCi0gICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQgdXNpbmcgYSBDU1MgY2xhc3MgbmFtZSBpbnN0ZWFkIG9mIGFu
IElELgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmluZEVsZW1lbnRJblBhcmVudEVs
ZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtET01FbGVtZW50fSBwYXJlbnRFbGVt
ZW50IFRoZSBwYXJlbnQncyBET00gZWxlbWVudAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtET01FbGVtZW50fSBUaGUgZGlzY292ZXJlZCBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZmluZEVsZW1lbnRJblBhcmVudEVsZW1lbnQ6IGZ1bmN0aW9uKHBhcmVu
dEVsZW0pIHsKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSAiIyIgKyB0aGlzLmVsZW1lbnRJZDsK
LSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KGlkKVswXSB8fCBqUXVlcnkoaWQsIHBhcmVu
dEVsZW0pWzBdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIENyZWF0ZXMgYSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhlIHZpZXcgYW5kIGFs
bCBvZiBpdHMKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQgdmlld3MgYnkgcmVjdXJzaXZlbHkg
Y2FsbGluZyB0aGUgYHJlbmRlcigpYCBtZXRob2QuCi0KLSAgICAgICAgICAgICAgICAgICAgQWZ0
ZXIgdGhlIGVsZW1lbnQgaGFzIGJlZW4gY3JlYXRlZCwgYGRpZEluc2VydEVsZW1lbnRgIHdpbGwK
LSAgICAgICAgICAgICAgICAgICAgYmUgY2FsbGVkIG9uIHRoaXMgdmlldyBhbmQgYWxsIG9mIGl0
cyBjaGlsZCB2aWV3cy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZUVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuVmlld30gcmVjZWl2ZXIKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdlbGVtZW50JykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMucmVuZGVyVG9CdWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBzZXQodGhpcywgJ2VsZW1lbnQnLCBidWZmZXIuZWxlbWVudCgpKTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIGEgdmlldyBpcyBnb2luZyB0byBpbnNlcnQgYW4g
ZWxlbWVudCBpbnRvIHRoZSBET00uCi0KLSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IHdpbGxJ
bnNlcnRFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2lsbEluc2Vy
dEVsZW1lbnQ6IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBvZiB0aGUgdmlldyBoYXMgYmVlbiBpbnNlcnRlZCBp
bnRvIHRoZSBET00KLSAgICAgICAgICAgICAgICAgICAgb3IgYWZ0ZXIgdGhlIHZpZXcgd2FzIHJl
LXJlbmRlcmVkLiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGRvIGFueQotICAgICAgICAgICAg
ICAgICAgICBzZXQgdXAgdGhhdCByZXF1aXJlcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCBi
b2R5LgotCi0gICAgICAgICAgICAgICAgICAgIEBldmVudCBkaWRJbnNlcnRFbGVtZW50Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGlkSW5zZXJ0RWxlbWVudDogRW1iZXIuSywK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSB2
aWV3IGlzIGFib3V0IHRvIHJlcmVuZGVyLCBidXQgYmVmb3JlIGFueXRoaW5nIGhhcwotICAgICAg
ICAgICAgICAgICAgICBiZWVuIHRvcm4gZG93bi4gVGhpcyBpcyBhIGdvb2Qgb3Bwb3J0dW5pdHkg
dG8gdGVhciBkb3duIGFueSBtYW51YWwKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzIHlv
dSBoYXZlIGluc3RhbGxlZCBiYXNlZCBvbiB0aGUgRE9NIHN0YXRlCi0KLSAgICAgICAgICAgICAg
ICAgICAgQGV2ZW50IHdpbGxDbGVhclJlbmRlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHdpbGxDbGVhclJlbmRlcjogRW1iZXIuSywKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJ1biB0aGlzIGNhbGxiYWNrIG9uIHRoZSBjdXJyZW50IHZpZXcgKHVu
bGVzcyBpbmNsdWRlU2VsZiBpcyBmYWxzZSkgYW5kIHJlY3Vyc2l2ZWx5IG9uIGNoaWxkIHZpZXdz
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW52b2tlUmVjdXJzaXZlbHkKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIGZuIHtGdW5jdGlvbn0KLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIGluY2x1ZGVTZWxmIHtCb29sZWFufSBJbmNsdWRlcyBpdHNlbGYgaWYgdHJ1ZS4KLSAg
ICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBpbnZva2VSZWN1cnNpdmVseTogZnVuY3Rpb24oZm4sIGluY2x1ZGVTZWxmKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSAoaW5jbHVkZVNlbGYgPT09IGZhbHNlKSA/IHRo
aXMuX2NoaWxkVmlld3MgOiBbdGhpc107Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWaWV3
cywgdmlldywgY3VycmVudENoaWxkVmlld3M7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoY2hp
bGRWaWV3cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXdzID0gY2hp
bGRWaWV3cy5zbGljZSgpOwotICAgICAgICAgICAgICAgICAgICBjaGlsZFZpZXdzID0gW107Ci0K
LSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjdXJyZW50Vmlld3MubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY3VycmVu
dFZpZXdzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoaWxkVmlld3MgPSB2
aWV3Ll9jaGlsZFZpZXdzID8gdmlldy5fY2hpbGRWaWV3cy5zbGljZSgwKSA6IG51bGw7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmbih2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50Q2hpbGRWaWV3cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
Vmlld3MucHVzaC5hcHBseShjaGlsZFZpZXdzLCBjdXJyZW50Q2hpbGRWaWV3cyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0cmlnZ2VyUmVjdXJzaXZlbHk6IGZ1
bmN0aW9uKGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gW3Ro
aXNdLCBjdXJyZW50Vmlld3MsIHZpZXcsIGN1cnJlbnRDaGlsZFZpZXdzOwotCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKGNoaWxkVmlld3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRWaWV3cyA9IGNoaWxkVmlld3Muc2xpY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGRWaWV3cyA9IFtdOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
Y3VycmVudFZpZXdzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmlldyA9IGN1cnJlbnRWaWV3c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGlsZFZpZXdzID0gdmlldy5fY2hpbGRWaWV3cyA/IHZpZXcuX2NoaWxkVmlld3Muc2xpY2Uo
MCkgOiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcudHJpZ2dlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcudHJpZ2dlcihldmVudE5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRDaGlsZFZpZXdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRWaWV3cy5w
dXNoLmFwcGx5KGNoaWxkVmlld3MsIGN1cnJlbnRDaGlsZFZpZXdzKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdmlld0hpZXJhcmNoeUNvbGxlY3Rpb246IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Vmlldywgdmlld0NvbGxlY3Rp
b24gPSBuZXcgVmlld0NvbGxlY3Rpb24oW3RoaXNdKTsKLQotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmlld0NvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFZpZXcgPSB2aWV3Q29sbGVjdGlvbi5vYmplY3RBdChpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWaWV3Ll9jaGlsZFZpZXdzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi5wdXNoLmFwcGx5KHZpZXdDb2xsZWN0aW9uLCBj
dXJyZW50Vmlldy5fY2hpbGRWaWV3cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmlld0NvbGxlY3Rpb247Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRGVzdHJv
eXMgYW55IGV4aXN0aW5nIGVsZW1lbnQgYWxvbmcgd2l0aCB0aGUgZWxlbWVudCBmb3IgYW55IGNo
aWxkIHZpZXdzCi0gICAgICAgICAgICAgICAgICAgIGFzIHdlbGwuIElmIHRoZSB2aWV3IGRvZXMg
bm90IGN1cnJlbnRseSBoYXZlIGEgZWxlbWVudCwgdGhlbiB0aGlzIG1ldGhvZAotICAgICAgICAg
ICAgICAgICAgICB3aWxsIGRvIG5vdGhpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91
IGltcGxlbWVudCBgd2lsbERlc3Ryb3lFbGVtZW50KClgIG9uIHlvdXIgdmlldywgdGhlbiB0aGlz
IG1ldGhvZCB3aWxsCi0gICAgICAgICAgICAgICAgICAgIGJlIGludm9rZWQgb24geW91ciB2aWV3
IGJlZm9yZSB5b3VyIGVsZW1lbnQgaXMgZGVzdHJveWVkIHRvIGdpdmUgeW91IGEKLSAgICAgICAg
ICAgICAgICAgICAgY2hhbmNlIHRvIGNsZWFuIHVwIGFueSBldmVudCBoYW5kbGVycywgZXRjLgot
Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3cml0ZSBhIGB3aWxsRGVzdHJveUVsZW1lbnQo
KWAgaGFuZGxlciwgeW91IGNhbiBhc3N1bWUgdGhhdCB5b3VyCi0gICAgICAgICAgICAgICAgICAg
IGBkaWRJbnNlcnRFbGVtZW50KClgIGhhbmRsZXIgd2FzIGNhbGxlZCBlYXJsaWVyIGZvciB0aGUg
c2FtZSBlbGVtZW50LgotCi0gICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IGNhbGwg
b3Igb3ZlcnJpZGUgdGhpcyBtZXRob2QgeW91cnNlbGYsIGJ1dCB5b3UgbWF5Ci0gICAgICAgICAg
ICAgICAgICAgIHdhbnQgdG8gaW1wbGVtZW50IHRoZSBhYm92ZSBjYWxsYmFja3MuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBkZXN0cm95RWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGRlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jdXJyZW50U3RhdGUuZGVzdHJveUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4g
dGhlIGVsZW1lbnQgb2YgdGhlIHZpZXcgaXMgZ29pbmcgdG8gYmUgZGVzdHJveWVkLiBPdmVycmlk
ZQotICAgICAgICAgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIHRvIGRvIGFueSB0ZWFyZG93biB0
aGF0IHJlcXVpcmVzIGFuIGVsZW1lbnQsIGxpa2UgcmVtb3ZpbmcKLSAgICAgICAgICAgICAgICAg
ICAgZXZlbnQgbGlzdGVuZXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEBldmVudCB3aWxsRGVz
dHJveUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aWxsRGVzdHJv
eUVsZW1lbnQ6IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUcmlnZ2VycyB0aGUgYHdpbGxEZXN0cm95RWxlbWVudGAgZXZlbnQgKHdoaWNoIGludm9rZXMg
dGhlCi0gICAgICAgICAgICAgICAgICAgIGB3aWxsRGVzdHJveUVsZW1lbnQoKWAgbWV0aG9kIGlm
IGl0IGV4aXN0cykgb24gdGhpcyB2aWV3IGFuZCBhbGwgY2hpbGQKLSAgICAgICAgICAgICAgICAg
ICAgdmlld3MuCi0KLSAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHRyaWdnZXJpbmcgYHdpbGxE
ZXN0cm95RWxlbWVudGAsIGl0IGZpcnN0IHRyaWdnZXJzIHRoZQotICAgICAgICAgICAgICAgICAg
ICBgd2lsbENsZWFyUmVuZGVyYCBldmVudCByZWN1cnNpdmVseS4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIF9ub3RpZnlXaWxsRGVzdHJveUVsZW1lbnQKLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfbm90aWZ5V2ls
bERlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmlld0Nv
bGxlY3Rpb24gPSB0aGlzLnZpZXdIaWVyYXJjaHlDb2xsZWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgdmlld0NvbGxlY3Rpb24udHJpZ2dlcignd2lsbENsZWFyUmVuZGVyJyk7Ci0gICAgICAgICAg
ICAgICAgdmlld0NvbGxlY3Rpb24udHJpZ2dlcignd2lsbERlc3Ryb3lFbGVtZW50Jyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHZpZXdDb2xsZWN0aW9uOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElmIHRoaXMgdmlldydzIGVsZW1lbnQg
Y2hhbmdlcywgd2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgb2Ygb3VyCi0gICAgICAg
ICAgICAgICAgICAgIGNoaWxkIHZpZXdzIHNvIHRoYXQgd2UgZG8gbm90IHJldGFpbiByZWZlcmVu
Y2VzIHRvIERPTSBlbGVtZW50cyB0aGF0IGFyZQotICAgICAgICAgICAgICAgICAgICBubyBsb25n
ZXIgbmVlZGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2VsZW1lbnREaWRDaGFu
Z2UKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBfZWxlbWVudERpZENoYW5nZTogb2JzZXJ2ZXIoJ2VsZW1lbnQnLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hDaGlsZFZpZXcoY2xlYXJDYWNoZWRF
bGVtZW50KTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHBhcmVudFZpZXcgcHJvcGVydHkgaGFzIGNoYW5nZWQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IHBhcmVudFZpZXdEaWRDaGFuZ2UKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwYXJlbnRWaWV3RGlkQ2hhbmdlOiBFbWJlci5L
LAotCi0gICAgICAgICAgICBpbnN0cnVtZW50TmFtZTogJ3ZpZXcnLAotCi0gICAgICAgICAgICBp
bnN0cnVtZW50RGV0YWlsczogZnVuY3Rpb24oaGFzaCkgewotICAgICAgICAgICAgICAgIGhhc2gu
dGVtcGxhdGUgPSBnZXQodGhpcywgJ3RlbXBsYXRlTmFtZScpOwotICAgICAgICAgICAgICAgIHRo
aXMuX3N1cGVyKGhhc2gpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3JlbmRlclRv
QnVmZmVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aEJl
Zm9yZVJlbmRlciA9IHRoaXMuX2NoaWxkVmlld3MubGVuZ3RoOwotICAgICAgICAgICAgICAgIGJ1
ZmZlciA9IHRoaXMuX3N1cGVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGhB
ZnRlclJlbmRlciA9IHRoaXMuX2NoaWxkVmlld3MubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGJ1ZmZlcjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlbmRlclRvQnVm
ZmVySWZOZWVkZWQ6IGZ1bmN0aW9uIChidWZmZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5jdXJyZW50U3RhdGUucmVuZGVyVG9CdWZmZXJJZk5lZWRlZCh0aGlzLCBidWZmZXIpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYmVmb3JlUmVuZGVyOiBmdW5jdGlvbihidWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QXR0cmlidXRlc1RvQnVmZmVyKGJ1ZmZl
cik7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2hPcGVuaW5nVGFnKCk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24oYnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyLnB1c2hDbG9zaW5nVGFnKCk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBhcHBseUF0dHJpYnV0ZXNUb0J1ZmZlcjogZnVuY3Rpb24oYnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ3JlYXRlcyBvYnNlcnZlcnMgZm9yIGFsbCByZWdpc3RlcmVkIGNs
YXNzIG5hbWUgYW5kIGF0dHJpYnV0ZSBiaW5kaW5ncywKLSAgICAgICAgICAgICAgICAvLyB0aGVu
IGFkZHMgdGhlbSB0byB0aGUgZWxlbWVudC4KLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1l
QmluZGluZ3MgPSBnZXQodGhpcywgJ2NsYXNzTmFtZUJpbmRpbmdzJyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsYXNzTmFtZUJpbmRpbmdzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9hcHBseUNsYXNzTmFtZUJpbmRpbmdzKGNsYXNzTmFtZUJpbmRpbmdzKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBQYXNzIHRoZSByZW5kZXIgYnVmZmVyIHNv
IHRoZSBtZXRob2QgY2FuIGFwcGx5IGF0dHJpYnV0ZXMgZGlyZWN0bHkuCi0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGNsYXNzIG5hbWUgYmluZGluZ3MgYmVjYXVzZSB0
aGV5IHVzZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBjbGFzc05hbWVzIGluZnJh
c3RydWN0dXJlLgotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCaW5kaW5ncyA9IGdldCh0
aGlzLCAnYXR0cmlidXRlQmluZGluZ3MnKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRl
QmluZGluZ3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5QXR0cmli
dXRlQmluZGluZ3MoYnVmZmVyLCBhdHRyaWJ1dGVCaW5kaW5ncyk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldENsYXNzZXModGhpcy5jbGFzc05hbWVzKTsK
LSAgICAgICAgICAgICAgICBidWZmZXIuaWQodGhpcy5lbGVtZW50SWQpOwotCi0gICAgICAgICAg
ICAgICAgdmFyIHJvbGUgPSBnZXQodGhpcywgJ2FyaWFSb2xlJyk7Ci0gICAgICAgICAgICAgICAg
aWYgKHJvbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmF0dHIoJ3JvbGUnLCByb2xl
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdp
c1Zpc2libGUnKSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnN0eWxl
KCdkaXNwbGF5JywgJ25vbmUnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBTVEFOREFSRCBSRU5ERVIgUFJPUEVS
VElFUwotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFRhZyBuYW1lIGZvciB0aGUgdmlldydzIG91dGVyIGVsZW1lbnQuIFRoZSB0YWcgbmFtZSBp
cyBvbmx5IHVzZWQgd2hlbiBhbgotICAgICAgICAgICAgICAgICAgICBlbGVtZW50IGlzIGZpcnN0
IGNyZWF0ZWQuIElmIHlvdSBjaGFuZ2UgdGhlIGB0YWdOYW1lYCBmb3IgYW4gZWxlbWVudCwgeW91
Ci0gICAgICAgICAgICAgICAgICAgIG11c3QgZGVzdHJveSBhbmQgcmVjcmVhdGUgdGhlIHZpZXcg
ZWxlbWVudC4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgcmVuZGVyIGJ1
ZmZlciB3aWxsIHVzZSBhIGA8ZGl2PmAgdGFnIGZvciB2aWV3cy4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgdGFnTmFtZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcK
LSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8K
LQotICAgICAgICAgICAgLy8gV2UgbGVhdmUgdGhpcyBudWxsIGJ5IGRlZmF1bHQgc28gd2UgY2Fu
IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQg
Y2FzZSBhbmQgYSB1c2VyLXNwZWNpZmllZCB0YWcuCi0gICAgICAgICAgICB0YWdOYW1lOiBudWxs
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIFdBSS1BUklBIHJv
bGUgb2YgdGhlIGNvbnRyb2wgcmVwcmVzZW50ZWQgYnkgdGhpcyB2aWV3LiBGb3IgZXhhbXBsZSwg
YQotICAgICAgICAgICAgICAgICAgICBidXR0b24gbWF5IGhhdmUgYSByb2xlIG9mIHR5cGUgJ2J1
dHRvbicsIG9yIGEgcGFuZSBtYXkgaGF2ZSBhIHJvbGUgb2YKLSAgICAgICAgICAgICAgICAgICAg
dHlwZSAnYWxlcnRkaWFsb2cnLiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYXNzaXN0aXZlIHNv
ZnR3YXJlIHRvIGhlbHAKLSAgICAgICAgICAgICAgICAgICAgdmlzdWFsbHkgY2hhbGxlbmdlZCB1
c2VycyBuYXZpZ2F0ZSByaWNoIHdlYiBhcHBsaWNhdGlvbnMuCi0KLSAgICAgICAgICAgICAgICAg
ICAgVGhlIGZ1bGwgbGlzdCBvZiB2YWxpZCBXQUktQVJJQSByb2xlcyBpcyBhdmFpbGFibGUgYXQ6
Ci0gICAgICAgICAgICAgICAgICAgIFtodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS9yb2xl
cyNyb2xlc19jYXRlZ29yaXphdGlvbl0oaHR0cDovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvcm9s
ZXMjcm9sZXNfY2F0ZWdvcml6YXRpb24pCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5
IGFyaWFSb2xlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
YXJpYVJvbGU6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBT
dGFuZGFyZCBDU1MgY2xhc3MgbmFtZXMgdG8gYXBwbHkgdG8gdGhlIHZpZXcncyBvdXRlciBlbGVt
ZW50LiBUaGlzCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IGF1dG9tYXRpY2FsbHkgaW5o
ZXJpdHMgYW55IGNsYXNzIG5hbWVzIGRlZmluZWQgYnkgdGhlIHZpZXcncwotICAgICAgICAgICAg
ICAgICAgICBzdXBlcmNsYXNzZXMgYXMgd2VsbC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgY2xhc3NOYW1lcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAg
ICAgICAgICAgICAgICBAZGVmYXVsdCBbJ2VtYmVyLXZpZXcnXQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnZW1iZXItdmlldyddLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIHZp
ZXcgdG8gYXBwbHkgYXMgY2xhc3MgbmFtZXMuIElmIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAg
ICAgICAgICBpcyBhIHN0cmluZyB2YWx1ZSwgdGhlIHZhbHVlIG9mIHRoYXQgc3RyaW5nIHdpbGwg
YmUgYXBwbGllZCBhcyBhIGNsYXNzCi0gICAgICAgICAgICAgICAgICAgIG5hbWUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICAvLyBBcHBs
aWVzIHRoZSAnaGlnaCcgY2xhc3MgdG8gdGhlIHZpZXcgZWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1l
QmluZGluZ3M6IFsncHJpb3JpdHknXQotICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAn
aGlnaCcKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaXMgYSBC
b29sZWFuLCB0aGUgbmFtZSBvZiB0aGF0IHByb3BlcnR5IGlzCi0gICAgICAgICAgICAgICAgICAg
IGFkZGVkIGFzIGEgZGFzaGVyaXplZCBjbGFzcyBuYW1lLgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGllcyB0aGUgJ2lzLXVy
Z2VudCcgY2xhc3MgdG8gdGhlIHZpZXcgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICBFbWJl
ci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6
IFsnaXNVcmdlbnQnXQotICAgICAgICAgICAgICAgICAgICAgIGlzVXJnZW50OiB0cnVlCi0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHVzZSBhIGN1c3RvbSB2YWx1ZSBpbnN0
ZWFkIG9mIHRoZSBkYXNoZXJpemVkCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IG5hbWUs
IHlvdSBjYW4gcGFzcyBhIGJpbmRpbmcgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGllcyB0aGUgJ3VyZ2Vu
dCcgY2xhc3MgdG8gdGhlIHZpZXcgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICBFbWJlci5W
aWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsn
aXNVcmdlbnQ6dXJnZW50J10KLSAgICAgICAgICAgICAgICAgICAgICBpc1VyZ2VudDogdHJ1ZQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgVGhpcyBsaXN0IG9mIHByb3BlcnRpZXMgaXMgaW5oZXJpdGVkIGZyb20g
dGhlIHZpZXcncyBzdXBlcmNsYXNzZXMgYXMgd2VsbC4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJvcGVydHkgY2xhc3NOYW1lQmluZGluZ3MKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQXJy
YXkKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgW10KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogRU1QVFlfQVJSQVksCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcHJvcGVydGllcyBvZiB0aGUg
dmlldyB0byBhcHBseSBhcyBhdHRyaWJ1dGVzLiBJZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgICAg
ICAgICAgICAgICAgYSBzdHJpbmcgdmFsdWUsIHRoZSB2YWx1ZSBvZiB0aGF0IHN0cmluZyB3aWxs
IGJlIGFwcGxpZWQgYXMgdGhlIGF0dHJpYnV0ZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGxpZXMgdGhlIHR5cGUgYXR0cmli
dXRlIHRvIHRoZSBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIHZhbHVl
ICJidXR0b24iLCBsaWtlIDxkaXYgdHlwZT0iYnV0dG9uIj4KLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRp
bmdzOiBbJ3R5cGUnXSwKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgICAgICAgSWYgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBhIEJvb2xlYW4sIHRo
ZSBuYW1lIG9mIHRoYXQgcHJvcGVydHkgaXMKLSAgICAgICAgICAgICAgICAgICAgYWRkZWQgYXMg
YW4gYXR0cmlidXRlLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgLy8gUmVuZGVycyBzb21ldGhpbmcgbGlrZSA8ZGl2IGVuYWJsZWQ9ImVu
YWJsZWQiPgotICAgICAgICAgICAgICAgICAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnZW5hYmxlZCddLAotICAgICAgICAg
ICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBhdHRy
aWJ1dGVCaW5kaW5ncwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGF0dHJpYnV0
ZUJpbmRpbmdzOiBFTVBUWV9BUlJBWSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8g
Q09SRSBESVNQTEFZIE1FVEhPRFMKLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBTZXR1cCBhIHZpZXcsIGJ1dCBkbyBub3QgZmluaXNoIHdha2lu
ZyBpdCB1cC4KLQotICAgICAgICAgICAgICAgICAgICAqIGNvbmZpZ3VyZSBgY2hpbGRWaWV3c2AK
LSAgICAgICAgICAgICAgICAgICAgKiByZWdpc3RlciB0aGUgdmlldyB3aXRoIHRoZSBnbG9iYWwg
dmlld3MgaGFzaCwgd2hpY2ggaXMgdXNlZCBmb3IgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAg
ICBkaXNwYXRjaAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5pdAotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlu
aXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gdGhpcy5l
bGVtZW50SWQgfHwgZ3VpZEZvcih0aGlzKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVy
KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBzZXR1cCBjaGlsZCB2aWV3cy4gYmUgc3VyZSB0byBj
bG9uZSB0aGUgY2hpbGQgdmlld3MgYXJyYXkgZmlyc3QKLSAgICAgICAgICAgICAgICB0aGlzLl9j
aGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3cy5zbGljZSgpOwotCi0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJPbmx5IGFycmF5cyBhcmUgYWxsb3dlZCBmb3IgJ2NsYXNzTmFtZUJpbmRp
bmdzJyIsIHR5cGVPZih0aGlzLmNsYXNzTmFtZUJpbmRpbmdzKSA9PT0gJ2FycmF5Jyk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5jbGFzc05hbWVCaW5kaW5ncyA9IGVtYmVyQSh0aGlzLmNsYXNzTmFt
ZUJpbmRpbmdzLnNsaWNlKCkpOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJPbmx5
IGFycmF5cyBhcmUgYWxsb3dlZCBmb3IgJ2NsYXNzTmFtZXMnIiwgdHlwZU9mKHRoaXMuY2xhc3NO
YW1lcykgPT09ICdhcnJheScpOwotICAgICAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lcyA9IGVt
YmVyQSh0aGlzLmNsYXNzTmFtZXMuc2xpY2UoKSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24odmlldywgb3B0aW9ucykgewotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5hcHBlbmRDaGlsZCh0aGlzLCB2aWV3LCBvcHRp
b25zKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBSZW1vdmVzIHRoZSBjaGlsZCB2aWV3IGZyb20gdGhlIHBhcmVudCB2aWV3LgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlQ2hpbGQKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtFbWJlci5WaWV3fSB2aWV3Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLlZpZXd9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVt
b3ZlQ2hpbGQ6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBk
ZXN0cm95aW5nLCB0aGUgZW50aXJlIHN1YnRyZWUgd2lsbCBiZQotICAgICAgICAgICAgICAgIC8v
IGZyZWVkLCBhbmQgdGhlIERPTSB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseSwKLSAgICAgICAg
ICAgICAgICAvLyBzbyBubyBuZWVkIHRvIG1lc3Mgd2l0aCBjaGlsZFZpZXdzLgotICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWluZykgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBhcmVu
dCBub2RlCi0gICAgICAgICAgICAgICAgc2V0KHZpZXcsICdfcGFyZW50VmlldycsIG51bGwpOwot
Ci0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZpZXcgZnJvbSBjaGlsZFZpZXdzIGFycmF5Lgot
ICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3czsKLQotICAg
ICAgICAgICAgICAgIHJlbW92ZU9iamVjdChjaGlsZFZpZXdzLCB2aWV3KTsKLQotICAgICAgICAg
ICAgICAgIHRoaXMucHJvcGVydHlEaWRDaGFuZ2UoJ2NoaWxkVmlld3MnKTsgLy8gSFVIPyEgd2hh
dCBoYXBwZW5lZCB0byB3aWxsIGNoYW5nZT8KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gdGhlIGBwYXJlbnRWaWV3YC4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUFsbENoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLm11dGF0ZUNoaWxkVmlld3MoZnVuY3Rpb24ocGFyZW50Vmlldywgdmlldykg
ewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRWaWV3LnJlbW92ZUNoaWxkKHZpZXcpOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVzdHJveUFs
bENoaWxkcmVuOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tdXRh
dGVDaGlsZFZpZXdzKGZ1bmN0aW9uKHBhcmVudFZpZXcsIHZpZXcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmlldy5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB0aGUgdmll
dyBmcm9tIGl0cyBgcGFyZW50Vmlld2AsIGlmIG9uZSBpcyBmb3VuZC4gT3RoZXJ3aXNlCi0gICAg
ICAgICAgICAgICAgICAgIGRvZXMgbm90aGluZy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIHJlbW92ZUZyb21QYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIu
Vmlld30gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVG
cm9tUGFyZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhp
cy5fcGFyZW50VmlldzsKLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBET00gZWxlbWVudCBm
cm9tIHBhcmVudAotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGls
ZCh0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
WW91IG11c3QgY2FsbCBgZGVzdHJveWAgb24gYSB2aWV3IHRvIGRlc3Ryb3kgdGhlIHZpZXcgKGFu
ZCBhbGwgb2YgaXRzCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkIHZpZXdzKS4gVGhpcyB3aWxs
IHJlbW92ZSB0aGUgdmlldyBmcm9tIGFueSBwYXJlbnQgbm9kZSwgdGhlbiBtYWtlCi0gICAgICAg
ICAgICAgICAgICAgIHN1cmUgdGhhdCB0aGUgRE9NIGVsZW1lbnQgbWFuYWdlZCBieSB0aGUgdmll
dyBjYW4gYmUgcmVsZWFzZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIG1lbW9yeSBtYW5h
Z2VyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVzdHJveQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3cywKLSAgICAgICAgICAgICAgICAv
LyBnZXQgcGFyZW50VmlldyBiZWZvcmUgY2FsbGluZyBzdXBlciBiZWNhdXNlIGl0J2xsIGJlIGRl
c3Ryb3llZAotICAgICAgICAgICAgICAgIG5vblZpcnR1YWxQYXJlbnRWaWV3ID0gZ2V0KHRoaXMs
ICdwYXJlbnRWaWV3JyksCi0gICAgICAgICAgICAgICAgdmlld05hbWUgPSB0aGlzLnZpZXdOYW1l
LAotICAgICAgICAgICAgICAgIGNoaWxkTGVuLCBpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0
aGlzLl9zdXBlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGlsZExlbiA9IGNoaWxkVmlld3MubGVuZ3RoOwot
ICAgICAgICAgICAgICAgIGZvciAoaSA9IGNoaWxkTGVuLTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoaWxkVmlld3NbaV0ucmVtb3ZlZEZyb21ET00gPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIG5vbi12aXJ0
dWFsIHBhcmVudCB2aWV3IGlmIHZpZXdOYW1lIHdhcyBzcGVjaWZpZWQKLSAgICAgICAgICAgICAg
ICBpZiAodmlld05hbWUgJiYgbm9uVmlydHVhbFBhcmVudFZpZXcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbm9uVmlydHVhbFBhcmVudFZpZXcuc2V0KHZpZXdOYW1lLCBudWxsKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGlsZExlbiA9IGNoaWxkVmlld3MubGVuZ3Ro
OwotICAgICAgICAgICAgICAgIGZvciAoaSA9IGNoaWxkTGVuLTE7IGkgPj0gMDsgaS0tKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNoaWxkVmlld3NbaV0uZGVzdHJveSgpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEluc3RhbnRpYXRlcyBhIHZpZXcg
dG8gYmUgYWRkZWQgdG8gdGhlIGNoaWxkVmlld3MgYXJyYXkgZHVyaW5nIHZpZXcKLSAgICAgICAg
ICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uIFlvdSBnZW5lcmFsbHkgd2lsbCBub3QgY2FsbCB0
aGlzIG1ldGhvZCBkaXJlY3RseSB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBv
dmVycmlkaW5nIGBjcmVhdGVDaGlsZFZpZXdzKClgLiBOb3RlIHRoYXQgdGhpcyBtZXRob2Qgd2ls
bAotICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSB0aGUgY29ycmVj
dCBzZXR0aW5ncyBvbiB0aGUgbmV3IHZpZXcgaW5zdGFuY2UgdG8KLSAgICAgICAgICAgICAgICAg
ICAgYWN0IGFzIGEgY2hpbGQgb2YgdGhlIHBhcmVudC4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGNyZWF0ZUNoaWxkVmlldwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NsYXNz
fFN0cmluZ30gdmlld0NsYXNzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gW2F0
dHJzXSBBdHRyaWJ1dGVzIHRvIGFkZAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJl
ci5WaWV3fSBuZXcgaW5zdGFuY2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBj
cmVhdGVDaGlsZFZpZXc6IGZ1bmN0aW9uKHZpZXcsIGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCF2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNy
ZWF0ZUNoaWxkVmlld3MgZmlyc3QgYXJndW1lbnQgbXVzdCBleGlzdCIpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh2aWV3LmlzVmlldyAmJiB2aWV3Ll9wYXJlbnRW
aWV3ID09PSB0aGlzICYmIHZpZXcuY29udGFpbmVyID09PSB0aGlzLmNvbnRhaW5lcikgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHt9OwotICAgICAgICAgICAgICAgIGF0dHJzLl9w
YXJlbnRWaWV3ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGlmIChDb3JlVmlldy5kZXRlY3Qo
dmlldykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0cnMudGVtcGxhdGVEYXRhID0gYXR0cnMu
dGVtcGxhdGVEYXRhIHx8IGdldCh0aGlzLCAndGVtcGxhdGVEYXRhJyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYXR0cnMuY29udGFpbmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHZpZXcgPSB2aWV3LmNyZWF0ZShhdHRycyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gZG9uJ3Qgc2V0IHRoZSBwcm9wZXJ0eSBvbiBhIHZpcnR1YWwgdmlldywgYXMgdGhleSBhcmUg
aW52aXNpYmxlIHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN1bWVycyBvZiB0aGUgdmll
dyBBUEkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcudmlld05hbWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldChnZXQodGhpcywgJ2NvbmNyZXRlVmlldycpLCB2aWV3LnZpZXdO
YW1lLCB2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBmdWxsTmFtZSA9ICd2aWV3OicgKyB2aWV3OwotICAgICAgICAgICAgICAgICAgICB2YXIgVmll
d0tsYXNzID0gdGhpcy5jb250YWluZXIubG9va3VwRmFjdG9yeShmdWxsTmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJDb3VsZCBub3QgZmluZCB2aWV3OiAnIiArIGZ1
bGxOYW1lICsgIiciLCAhIVZpZXdLbGFzcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXR0cnMu
dGVtcGxhdGVEYXRhID0gZ2V0KHRoaXMsICd0ZW1wbGF0ZURhdGEnKTsKLSAgICAgICAgICAgICAg
ICAgICAgdmlldyA9IFZpZXdLbGFzcy5jcmVhdGUoYXR0cnMpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnWW91IG11c3QgcGFzcyBp
bnN0YW5jZSBvciBzdWJjbGFzcyBvZiBWaWV3Jywgdmlldy5pc1ZpZXcpOwotICAgICAgICAgICAg
ICAgICAgICBhdHRycy5jb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWdldCh2aWV3LCAndGVtcGxhdGVEYXRhJykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJzLnRlbXBsYXRlRGF0YSA9IGdldCh0aGlzLCAndGVtcGxhdGVEYXRhJyk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0
aWVzKHZpZXcsIGF0dHJzKTsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiB2aWV3OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYmVjYW1lVmlzaWJs
ZTogRW1iZXIuSywKLSAgICAgICAgICAgIGJlY2FtZUhpZGRlbjogRW1iZXIuSywKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIHZpZXcncyBgaXNWaXNpYmxl
YCBwcm9wZXJ0eSBjaGFuZ2VzLCB0b2dnbGUgdGhlIHZpc2liaWxpdHkKLSAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudCBvZiB0aGUgYWN0dWFsIERPTSBlbGVtZW50LgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgX2lzVmlzaWJsZURpZENoYW5nZQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9pc1Zpc2libGVEaWRD
aGFuZ2U6IG9ic2VydmVyKCdpc1Zpc2libGUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5faXNWaXNpYmxlID09PSBnZXQodGhpcywgJ2lzVmlzaWJsZScpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsIHRoaXMuX3RvZ2dsZVZpc2liaWxp
dHkpOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF90b2dnbGVWaXNpYmlsaXR5OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgJGVsID0gdGhpcy4kKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEkZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBpc1Zpc2libGUgPSBnZXQodGhpcywg
J2lzVmlzaWJsZScpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVmlzaWJsZSA9PT0g
aXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiA7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgJGVsLnRvZ2dsZShpc1Zpc2libGUpOwotCi0gICAgICAg
ICAgICAgICAgdGhpcy5faXNWaXNpYmxlID0gaXNWaXNpYmxlOwotCi0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2lzQW5jZXN0b3JIaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlzVmlzaWJsZSkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlCZWNhbWVWaXNpYmxlKCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5QmVj
YW1lSGlkZGVuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgX25vdGlmeUJlY2FtZVZpc2libGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHRoaXMudHJpZ2dlcignYmVjYW1lVmlzaWJsZScpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5m
b3JFYWNoQ2hpbGRWaWV3KGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGlzVmlzaWJsZSA9IGdldCh2aWV3LCAnaXNWaXNpYmxlJyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmlzaWJsZSB8fCBpc1Zpc2libGUgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZpZXcuX25vdGlmeUJlY2FtZVZpc2libGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
X25vdGlmeUJlY2FtZUhpZGRlbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50
cmlnZ2VyKCdiZWNhbWVIaWRkZW4nKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hDaGls
ZFZpZXcoZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaXNWaXNpYmxl
ID0gZ2V0KHZpZXcsICdpc1Zpc2libGUnKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNW
aXNpYmxlIHx8IGlzVmlzaWJsZSA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmlldy5fbm90aWZ5QmVjYW1lSGlkZGVuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9pc0FuY2VzdG9y
SGlkZGVuOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZ2V0KHRo
aXMsICdwYXJlbnRWaWV3Jyk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChnZXQocGFyZW50LCAnaXNWaXNpYmxlJykgPT09IGZhbHNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGdldChwYXJlbnQsICdwYXJl
bnRWaWV3Jyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY2xlYXJCdWZmZXI6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlUmVjdXJzaXZlbHkobnVsbFZpZXdzQnVm
ZmVyKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9u
KHN0YXRlLCBjaGlsZHJlbikgewotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgiRW1i
ZXIuVmlldyN0cmFuc2l0aW9uVG8gaGFzIGJlZW4gZGVwcmVjYXRlZCwgaXQgaXMgZm9yIGludGVy
bmFsIHVzZSBvbmx5Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvKHN0YXRl
LCBjaGlsZHJlbik7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgX3RyYW5zaXRpb25Ubzog
ZnVuY3Rpb24oc3RhdGUsIGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByaW9yU3Rh
dGUgPSB0aGlzLmN1cnJlbnRTdGF0ZTsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudFN0YXRl
ID0gdGhpcy5jdXJyZW50U3RhdGUgPSB0aGlzLl9zdGF0ZXNbc3RhdGVdOwotCi0gICAgICAgICAg
ICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTsKLQotICAgICAgICAgICAgICAgIGlmIChwcmlvclN0
YXRlICYmIHByaW9yU3RhdGUuZXhpdCkgewotICAgICAgICAgICAgICAgICAgICBwcmlvclN0YXRl
LmV4aXQodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50U3RhdGUuZW50ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlLmVudGVy
KHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09
ICdpbkRPTScpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0YSh0aGlzKS5jYWNoZS5lbGVtZW50
ID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChj
aGlsZHJlbiAhPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoQ2hp
bGRWaWV3KGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuX3Ry
YW5zaXRpb25UbyhzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIEVW
RU5UIEhBTkRMSU5HCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgSGFuZGxlIGV2ZW50cyBmcm9tIGBFbWJlci5FdmVudERpc3BhdGNoZXJgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBoYW5kbGVFdmVudAotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0gZXZlbnROYW1lIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSBldnQge0V2ZW50fQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbihldmVudE5hbWUsIGV2
dCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5oYW5kbGVFdmVu
dCh0aGlzLCBldmVudE5hbWUsIGV2dCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBy
ZWdpc3Rlck9ic2VydmVyOiBmdW5jdGlvbihyb290LCBwYXRoLCB0YXJnZXQsIG9ic2VydmVyKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvYnNlcnZlciAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2Yg
dGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyID0gdGFyZ2V0OwotICAgICAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICghcm9vdCB8fCB0eXBlb2Ygcm9vdCAhPT0gJ29iamVjdCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhciB2aWV3ID0gdGhpcywKLSAgICAgICAgICAgICAgICBzdGF0ZUNoZWNrZWRPYnNlcnZl
ciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICB2aWV3LmN1cnJlbnRTdGF0ZS5p
bnZva2VPYnNlcnZlcih0aGlzLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICBzY2hlZHVsZWRPYnNlcnZlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICBydW4uc2NoZWR1bGVPbmNlKCdyZW5kZXInLCB0aGlzLCBzdGF0ZUNoZWNrZWRPYnNl
cnZlcik7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGFkZE9ic2VydmVy
KHJvb3QsIHBhdGgsIHRhcmdldCwgc2NoZWR1bGVkT2JzZXJ2ZXIpOwotCi0gICAgICAgICAgICAg
ICAgdGhpcy5vbmUoJ3dpbGxDbGVhclJlbmRlcicsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICByZW1vdmVPYnNlcnZlcihyb290LCBwYXRoLCB0YXJnZXQsIHNjaGVkdWxlZE9ic2Vy
dmVyKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9KTsK
LQotICAgICAgICAvKgotICAgICAgICAgICAgICBEZXNjcmliZSBob3cgdGhlIHNwZWNpZmllZCBh
Y3Rpb25zIHNob3VsZCBiZWhhdmUgaW4gdGhlIHZhcmlvdXMKLSAgICAgICAgICAgICAgc3RhdGVz
IHRoYXQgYSB2aWV3IGNhbiBleGlzdCBpbi4gUG9zc2libGUgc3RhdGVzOgotCi0gICAgICAgICAg
ICAgICogcHJlUmVuZGVyOiB3aGVuIGEgdmlldyBpcyBmaXJzdCBpbnN0YW50aWF0ZWQsIGFuZCBh
ZnRlciBpdHMKLSAgICAgICAgICAgICAgICBlbGVtZW50IHdhcyBkZXN0cm95ZWQsIGl0IGlzIGlu
IHRoZSBwcmVSZW5kZXIgc3RhdGUKLSAgICAgICAgICAgICAgKiBpbkJ1ZmZlcjogb25jZSBhIHZp
ZXcgaGFzIGJlZW4gcmVuZGVyZWQsIGJ1dCBiZWZvcmUgaXQgaGFzCi0gICAgICAgICAgICAgICAg
YmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBET00sIGl0IGlzIGluIHRoZSBpbkJ1ZmZlciBzdGF0ZQot
ICAgICAgICAgICAgICAqIGhhc0VsZW1lbnQ6IHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhl
IHZpZXcgaXMgY3JlYXRlZCwKLSAgICAgICAgICAgICAgICBhbmQgaXMgcmVhZHkgdG8gYmUgaW5z
ZXJ0ZWQKLSAgICAgICAgICAgICAgKiBpbkRPTTogb25jZSBhIHZpZXcgaGFzIGJlZW4gaW5zZXJ0
ZWQgaW50byB0aGUgRE9NIGl0IGlzIGluCi0gICAgICAgICAgICAgICAgdGhlIGluRE9NIHN0YXRl
LiBBIHZpZXcgc3BlbmRzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGl0cwotICAgICAgICAgICAgICAg
IGV4aXN0ZW5jZSBpbiB0aGlzIHN0YXRlLgotICAgICAgICAgICAgICAqIGRlc3Ryb3llZDogb25j
ZSBhIHZpZXcgaGFzIGJlZW4gZGVzdHJveWVkICh1c2luZyB0aGUgZGVzdHJveQotICAgICAgICAg
ICAgICAgIG1ldGhvZCksIGl0IGlzIGluIHRoaXMgc3RhdGUuIE5vIGZ1cnRoZXIgYWN0aW9ucyBj
YW4gYmUgaW52b2tlZAotICAgICAgICAgICAgICAgIG9uIGEgZGVzdHJveWVkIHZpZXcuCi0gICAg
ICAgICAgICAqLwotCi0gICAgICAgIC8vIGluIHRoZSBkZXN0cm95ZWQgc3RhdGUsIGV2ZXJ5dGhp
bmcgaXMgaWxsZWdhbAotCi0gICAgICAgIC8vIGJlZm9yZSByZW5kZXJpbmcgaGFzIGJlZ3VuLCBh
bGwgbGVnYWwgbWFuaXB1bGF0aW9ucyBhcmUgbm9vcHMuCi0KLSAgICAgICAgLy8gaW5zaWRlIHRo
ZSBidWZmZXIsIGxlZ2FsIG1hbmlwdWxhdGlvbnMgYXJlIGRvbmUgb24gdGhlIGJ1ZmZlcgotCi0g
ICAgICAgIC8vIG9uY2UgdGhlIHZpZXcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgRE9NLCBs
ZWdhbCBtYW5pcHVsYXRpb25zCi0gICAgICAgIC8vIGFyZSBkb25lIG9uIHRoZSBET00gZWxlbWVu
dC4KLQotICAgICAgICBmdW5jdGlvbiBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpIHsKLSAgICAg
ICAgICAgIHJ1bi5vbmNlKFZpZXcsICdub3RpZnlNdXRhdGlvbkxpc3RlbmVycycpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIERPTU1hbmFnZXIgPSB7Ci0gICAgICAgICAgICBwcmVwZW5kOiBm
dW5jdGlvbih2aWV3LCBodG1sKSB7Ci0gICAgICAgICAgICAgICAgdmlldy4kKCkucHJlcGVuZCho
dG1sKTsKLSAgICAgICAgICAgICAgICBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKHZpZXcsIGh0bWwpIHsKLSAg
ICAgICAgICAgICAgICB2aWV3LiQoKS5hZnRlcihodG1sKTsKLSAgICAgICAgICAgICAgICBub3Rp
ZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaHRt
bDogZnVuY3Rpb24odmlldywgaHRtbCkgewotICAgICAgICAgICAgICAgIHZpZXcuJCgpLmh0bWwo
aHRtbCk7Ci0gICAgICAgICAgICAgICAgbm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMoKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZWxlbWVudCA9IGdldCh2aWV3LCAnZWxlbWVudCcpOwotCi0gICAgICAg
ICAgICAgICAgc2V0KHZpZXcsICdlbGVtZW50JywgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICB2
aWV3Ll9pbnNlcnRFbGVtZW50TGF0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGpRdWVyeShlbGVtZW50KS5yZXBsYWNlV2l0aChnZXQodmlldywgJ2VsZW1lbnQnKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKHZp
ZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3LiQoKS5yZW1vdmUoKTsKLSAgICAgICAgICAgICAg
ICBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgZW1wdHk6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3LiQoKS5lbXB0
eSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVmlldy5yZW9wZW4oewotICAgICAgICAgICAg
ZG9tTWFuYWdlcjogRE9NTWFuYWdlcgotICAgICAgICB9KTsKLQotICAgICAgICBWaWV3LnJlb3Bl
bkNsYXNzKHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFBhcnNlIGEg
cGF0aCBhbmQgcmV0dXJuIGFuIG9iamVjdCB3aGljaCBob2xkcyB0aGUgcGFyc2VkIHByb3BlcnRp
ZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgYSBwYXRoIGxpa2UgImNvbnRl
bnQuaXNFbmFibGVkOmVuYWJsZWQ6ZGlzYWJsZWQiIHdpbGwgcmV0dXJuIHRoZQotICAgICAgICAg
ICAgICAgICAgICBmb2xsb3dpbmcgb2JqZWN0OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHBh
dGg6ICJjb250ZW50LmlzRW5hYmxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1l
OiAiZW5hYmxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgZmFsc3lDbGFzc05hbWU6ICJkaXNh
YmxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lczogIjplbmFibGVkOmRpc2Fi
bGVkIgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX3BhcnNlUHJvcGVydHlQYXRoCi0gICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBfcGFyc2VQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uKHBh
dGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBwYXRoLnNwbGl0KCc6JyksCi0gICAg
ICAgICAgICAgICAgcHJvcGVydHlQYXRoID0gc3BsaXRbMF0sCi0gICAgICAgICAgICAgICAgY2xh
c3NOYW1lcyA9ICIiLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAg
ICBmYWxzeUNsYXNzTmFtZTsKLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBwcm9w
ZXJ0eSBpcyBkZWZpbmVkIGFzIHByb3A6Y2xhc3Mgb3IgcHJvcDp0cnVlQ2xhc3M6ZmFsc2VDbGFz
cwotICAgICAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzTmFtZSA9IHNwbGl0WzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Bs
aXQubGVuZ3RoID09PSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWxzeUNsYXNzTmFt
ZSA9IHNwbGl0WzJdOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgY2xhc3NOYW1lcyA9ICc6JyArIGNsYXNzTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZhbHN5Q2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzICs9
ICI6IiArIGZhbHN5Q2xhc3NOYW1lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAg
cGF0aDogcHJvcGVydHlQYXRoLAotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBjbGFz
c05hbWVzLAotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IChjbGFzc05hbWUgPT09ICcn
KSA/IHVuZGVmaW5lZCA6IGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZmFsc3lDbGFz
c05hbWU6IGZhbHN5Q2xhc3NOYW1lCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHZXQgdGhlIGNsYXNzIG5h
bWUgZm9yIGEgZ2l2ZW4gdmFsdWUsIGJhc2VkIG9uIHRoZSBwYXRoLCBvcHRpb25hbAotICAgICAg
ICAgICAgICAgICAgICBgY2xhc3NOYW1lYCBhbmQgb3B0aW9uYWwgYGZhbHN5Q2xhc3NOYW1lYC4K
LQotICAgICAgICAgICAgICAgICAgICAtIGlmIGEgYGNsYXNzTmFtZWAgb3IgYGZhbHN5Q2xhc3NO
YW1lYCBoYXMgYmVlbiBzcGVjaWZpZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgLSBpZiB0aGUg
dmFsdWUgaXMgdHJ1dGh5IGFuZCBgY2xhc3NOYW1lYCBoYXMgYmVlbiBzcGVjaWZpZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBgY2xhc3NOYW1lYCBpcyByZXR1cm5lZAotICAgICAgICAgICAg
ICAgICAgICAgIC0gaWYgdGhlIHZhbHVlIGlzIGZhbHN5IGFuZCBgZmFsc3lDbGFzc05hbWVgIGhh
cyBiZWVuIHNwZWNpZmllZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGBmYWxzeUNsYXNzTmFt
ZWAgaXMgcmV0dXJuZWQKLSAgICAgICAgICAgICAgICAgICAgICAtIG90aGVyd2lzZSBgbnVsbGAg
aXMgcmV0dXJuZWQKLSAgICAgICAgICAgICAgICAgICAgLSBpZiB0aGUgdmFsdWUgaXMgYHRydWVg
LCB0aGUgZGFzaGVyaXplZCBsYXN0IHBhcnQgb2YgdGhlIHN1cHBsaWVkIHBhdGgKLSAgICAgICAg
ICAgICAgICAgICAgICBpcyByZXR1cm5lZAotICAgICAgICAgICAgICAgICAgICAtIGlmIHRoZSB2
YWx1ZSBpcyBub3QgYGZhbHNlYCwgYHVuZGVmaW5lZGAgb3IgYG51bGxgLCB0aGUgYHZhbHVlYAot
ICAgICAgICAgICAgICAgICAgICAgIGlzIHJldHVybmVkCi0gICAgICAgICAgICAgICAgICAgIC0g
aWYgbm9uZSBvZiB0aGUgYWJvdmUgcnVsZXMgYXBwbHksIGBudWxsYCBpcyByZXR1cm5lZAotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2NsYXNzU3RyaW5nRm9yVmFsdWUKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHZhbAot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0gY2xhc3NOYW1lCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSBmYWxzeUNsYXNzTmFtZQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljCi0gICAg
ICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgX2NsYXNzU3RyaW5nRm9yVmFsdWU6IGZ1bmN0aW9uKHBhdGgsIHZhbCwgY2xhc3NOYW1lLCBm
YWxzeUNsYXNzTmFtZSkgewotICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0KHZhbCwgJ2xlbmd0aCcpICE9PSAwOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgdGhlIGNvbG9uIHN5
bnRheCwgZXZhbHVhdGUgdGhlIHRydXRoaW5lc3Mgb3IgZmFsc2luZXNzCi0gICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIHZhbHVlIHRvIGRldGVybWluZSB3aGljaCBjbGFzc05hbWUgdG8gcmV0dXJu
Ci0gICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSB8fCBmYWxzeUNsYXNzTmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lICYmICEhdmFsKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZmFsc3lDbGFzc05hbWUgJiYgIXZhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHN5Q2xhc3NOYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgQm9vbGVhbiBhbmQgdHJ1
ZSwgcmV0dXJuIHRoZSBkYXNoZXJpemVkIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIC8v
IG5hbWUuCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgPT09IHRydWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHByb3BlcnR5IHBhdGggdG8gYmUgc3VpdGFibGUg
Zm9yIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBhcyBhIGNsYXNzIG5hbWUuIEZvciBleGFw
bGUsIGNvbnRlbnQuZm9vLmJhckJhegotICAgICAgICAgICAgICAgICAgICAvLyBiZWNvbWVzIGJh
ci1iYXouCi0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhc2hlcml6ZShwYXJ0c1twYXJ0cy5sZW5ndGgt
MV0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgZmFsc2Us
IHVuZGVmaW5lZCwgb3IgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHZhbCAhPT0gZmFsc2UgJiYgdmFsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRpc3BsYXkuIFJl
dHVybiBudWxsIHNvIHRoYXQgdGhlIG9sZCBjbGFzcyBpcyByZW1vdmVkCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGJ1dCBubyBuZXcgY2xhc3MgaXMgYWRkZWQuCi0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgbXV0YXRpb24gPSBF
bWJlck9iamVjdC5leHRlbmQoRXZlbnRlZCkuY3JlYXRlKCk7Ci0KLSAgICAgICAgVmlldy5hZGRN
dXRhdGlvbkxpc3RlbmVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgIG11dGF0
aW9uLm9uKCdjaGFuZ2UnLCBjYWxsYmFjayk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVmlldy5y
ZW1vdmVNdXRhdGlvbkxpc3RlbmVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAg
IG11dGF0aW9uLm9mZignY2hhbmdlJywgY2FsbGJhY2spOwotICAgICAgICB9OwotCi0gICAgICAg
IFZpZXcubm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IG11dGF0aW9uLnRyaWdnZXIoJ2NoYW5nZScpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBHbG9iYWwgdmlld3MgaGFzaAotCi0gICAgICAgICAgICAgIEBwcm9wZXJ0
eSB2aWV3cwotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEB0eXBlIEhhc2gK
LSAgICAgICAgICAgICovCi0gICAgICAgIFZpZXcudmlld3MgPSB7fTsKLQotICAgICAgICAvLyBJ
ZiBzb21lb25lIG92ZXJyaWRlcyB0aGUgY2hpbGQgdmlld3MgY29tcHV0ZWQgcHJvcGVydHkgd2hl
bgotICAgICAgICAvLyBkZWZpbmluZyB0aGVpciBjbGFzcywgd2Ugd2FudCB0byBiZSBhYmxlIHRv
IHByb2Nlc3MgdGhlIHVzZXIncwotICAgICAgICAvLyBzdXBwbGllZCBjaGlsZFZpZXdzIGFuZCB0
aGVuIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvbXB1dGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGF0
IHZpZXcgaW5pdGlhbGl6YXRpb24gdGltZS4gVGhpcyBoYXBwZW5zIGluIEVtYmVyLkNvbnRhaW5l
clZpZXcncyBpbml0Ci0gICAgICAgIC8vIG1ldGhvZC4KLSAgICAgICAgVmlldy5jaGlsZFZpZXdz
UHJvcGVydHkgPSBjaGlsZFZpZXdzUHJvcGVydHk7Ci0KLSAgICAgICAgVmlldy5hcHBseUF0dHJp
YnV0ZUJpbmRpbmdzID0gZnVuY3Rpb24oZWxlbSwgbmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAg
IHZhciB0eXBlID0gdHlwZU9mKHZhbHVlKTsKLQotICAgICAgICAgICAgLy8gaWYgdGhpcyBjaGFu
Z2VzLCBhbHNvIGNoYW5nZSB0aGUgbG9naWMgaW4gZW1iZXItaGFuZGxlYmFycy9saWIvaGVscGVy
cy9iaW5kaW5nLmpzCi0gICAgICAgICAgICBpZiAobmFtZSAhPT0gJ3ZhbHVlJyAmJiAodHlwZSA9
PT0gJ3N0cmluZycgfHwgKHR5cGUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSkpKSkgewot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gZWxlbS5hdHRyKG5hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsZW0uYXR0cihuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAndmFsdWUnIHx8IHR5cGUgPT09ICdib29s
ZWFuJykgewotICAgICAgICAgICAgICAgIGlmIChpc05vbmUodmFsdWUpIHx8IHZhbHVlID09PSBm
YWxzZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBgbnVsbGAsIGB1bmRlZmluZWRgIG9yIGBm
YWxzZWAgc2hvdWxkIHJlbW92ZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgZWxlbS5y
ZW1vdmVBdHRyKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAvLyBJbiBJRTggYHByb3BgIGNv
dWxkbid0IHJlbW92ZSBhdHRyaWJ1dGUgd2hlbiBuYW1lIGlzIGByZXF1aXJlZGAuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09PSAncmVxdWlyZWQnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnJlbW92ZVByb3AobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnByb3AobmFtZSwgJycpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gZWxl
bS5wcm9wKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHNob3VsZCBhbHdh
eXMgYmUgcHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICBlbGVtLnByb3AobmFtZSwgdmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyKG5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBWaWV3OwotICAg
IH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvdmlld19jb2xsZWN0aW9uIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTFfXy5mb3JFYWNoOwotCi0gICAg
ICAgIGZ1bmN0aW9uIFZpZXdDb2xsZWN0aW9uKGluaXRpYWxWaWV3cykgewotICAgICAgICAgICAg
dmFyIHZpZXdzID0gdGhpcy52aWV3cyA9IGluaXRpYWxWaWV3cyB8fCBbXTsKLSAgICAgICAgICAg
IHRoaXMubGVuZ3RoID0gdmlld3MubGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgVmlld0Nv
bGxlY3Rpb24ucHJvdG90eXBlID0gewotICAgICAgICAgICAgbGVuZ3RoOiAwLAotCi0gICAgICAg
ICAgICB0cmlnZ2VyOiBmdW5jdGlvbihldmVudE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIg
dmlld3MgPSB0aGlzLnZpZXdzLCB2aWV3OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gdmlld3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZXcgPSB2aWV3c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcudHJpZ2dlcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmlldy50cmlnZ2VyKGV2ZW50TmFtZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICB0cmlnZ2VyUmVjdXJzaXZlbHk6IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewotICAgICAg
ICAgICAgICAgIHZhciB2aWV3cyA9IHRoaXMudmlld3M7Ci0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSB2aWV3cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmlld3NbaV0udHJpZ2dlclJlY3Vyc2l2ZWx5KGV2ZW50TmFtZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW52b2tlUmVjdXJzaXZlbHk6
IGZ1bmN0aW9uKGZuKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXdzID0gdGhpcy52aWV3cywg
dmlldzsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmlld3MubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgPSB2aWV3c1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgZm4odmlldyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgdHJhbnNpdGlvblRvOiBmdW5jdGlvbihzdGF0ZSwgY2hpbGRy
ZW4pIHsKLSAgICAgICAgICAgICAgICB2YXIgdmlld3MgPSB0aGlzLnZpZXdzOwotICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmlld3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZpZXdzW2ldLl90cmFuc2l0aW9uVG8oc3RhdGUsIGNoaWxkcmVu
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBwdXNo
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCArPSBhcmd1bWVudHMu
bGVuZ3RoOwotICAgICAgICAgICAgICAgIHZhciB2aWV3cyA9IHRoaXMudmlld3M7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZpZXdzLnB1c2guYXBwbHkodmlld3MsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBvYmplY3RBdDogZnVuY3Rpb24oaWR4KSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld3NbaWR4XTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHZpZXdzID0gdGhpcy52aWV3czsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9yRWFjaCh2
aWV3cywgY2FsbGJhY2spOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY2xlYXI6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDsKLSAgICAgICAgICAg
ICAgICB0aGlzLnZpZXdzLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFZpZXdDb2xsZWN0aW9uOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXIiLAotICAgIFsiZW1iZXItbWV0YWwiLCAiZW1iZXItcnVudGlt
ZSIsICJlbWJlci1oYW5kbGViYXJzIiwgImVtYmVyLXZpZXdzIiwgImVtYmVyLXJvdXRpbmciLCAi
ZW1iZXItcm91dGluZy1oYW5kbGViYXJzIiwgImVtYmVyLWFwcGxpY2F0aW9uIiwgImVtYmVyLWV4
dGVuc2lvbi1zdXBwb3J0Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1
X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvLyByZXF1aXJlIHRoZSBtYWluIGVudHJ5
IHBvaW50cyBmb3IgZWFjaCBvZiB0aGVzZSBwYWNrYWdlcwotICAgICAgICAvLyB0aGlzIGlzIHNv
IHRoYXQgdGhlIGdsb2JhbCBleHBvcnRzIG9jY3VyIHByb3Blcmx5Ci0KLSAgICAgICAgLy8gZG8g
dGhpcyB0byBlbnN1cmUgdGhhdCBFbWJlci5UZXN0IGlzIGRlZmluZWQgcHJvcGVybHkgb24gdGhl
IGdsb2JhbAotICAgICAgICAvLyBpZiBpdCBpcyBwcmVzZW50LgotICAgICAgICBpZiAoRW1iZXIu
X19sb2FkZXIucmVnaXN0cnlbJ2VtYmVyLXRlc3RpbmcnXSkgewotICAgICAgICAgICAgcmVxdWly
ZU1vZHVsZSgnZW1iZXItdGVzdGluZycpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICBFbWJlcgotCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICAq
LwotCi0gICAgICAgIGZ1bmN0aW9uIHRocm93V2l0aE1lc3NhZ2UobXNnKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyLkVy
cm9yKG1zZyk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
Z2VuZXJhdGVSZW1vdmVkQ2xhc3MoY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbXNnID0g
IiBoYXMgYmVlbiBtb3ZlZCBpbnRvIGEgcGx1Z2luOiBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJq
cy9lbWJlci1zdGF0ZXMiOwotCi0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
IGV4dGVuZDogdGhyb3dXaXRoTWVzc2FnZShjbGFzc05hbWUgKyBtc2cpLAotICAgICAgICAgICAg
ICAgIGNyZWF0ZTogdGhyb3dXaXRoTWVzc2FnZShjbGFzc05hbWUgKyBtc2cpCi0gICAgICAgICAg
ICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgRW1iZXIuU3RhdGVNYW5hZ2VyID0gZ2VuZXJhdGVS
ZW1vdmVkQ2xhc3MoIkVtYmVyLlN0YXRlTWFuYWdlciIpOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBUaGlzIHdhcyBleHBvcnRlZCB0byBlbWJlci1zdGF0ZXMgcGx1Z2luIGZvciB2IDEu
MC4wIHJlbGVhc2UuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvZW1iZXItc3RhdGVz
Ci0KLSAgICAgICAgICAgICAgQGNsYXNzIFN0YXRlTWFuYWdlcgotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIEVtYmVyLlN0YXRlID0gZ2Vu
ZXJhdGVSZW1vdmVkQ2xhc3MoIkVtYmVyLlN0YXRlIik7Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIFRoaXMgd2FzIGV4cG9ydGVkIHRvIGVtYmVyLXN0YXRlcyBwbHVnaW4gZm9yIHYgMS4w
LjAgcmVsZWFzZS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9lbWJlci1zdGF0ZXMK
LQotICAgICAgICAgICAgICBAY2xhc3MgU3RhdGUKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBF
bWJlcgotICAgICAgICAgICAgKi8KLSAgICB9KTsKLSAgICBkZWZpbmUoIm1ldGFtb3JwaCIsCi0g
ICAgW10sCi0gICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgLy8gUHJvamVjdDogICBtZXRhbW9ycGgKLSAg
ICAgICAgLy8gQ29weXJpZ2h0OiDCqTIwMTQgVGlsZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgICAgICB2YXIgSyA9IGZ1bmN0
aW9uKCkge30sCi0gICAgICAgIGd1aWQgPSAwLAotICAgICAgICBkaXNhYmxlUmFuZ2UgPSAoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBNZXRhbW9y
cGhFTlYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTWV0YW1vcnBoRU5WLkRJU0FCTEVfUkFO
R0VfQVBJOwotICAgICAgICAgICAgfSBlbHNlIGlmICgndW5kZWZpbmVkJyAhPT0gRU5WKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEVOVi5ESVNBQkxFX1JBTkdFX0FQSTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9KSgpLAotICAgICAgICAvLyBGZWF0dXJlLWRldGVjdCB0aGUgVzNDIHJhbmdlIEFQ
SSwgdGhlIGV4dGVuZGVkIGNoZWNrIGlzIGZvciBJRTkgd2hpY2ggb25seSBwYXJ0aWFsbHkgc3Vw
cG9ydHMgcmFuZ2VzCi0gICAgICAgIHN1cHBvcnRzUmFuZ2UgPSAoIWRpc2FibGVSYW5nZSkgJiYg
dHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAoJ2NyZWF0ZVJhbmdlJyBpbiBkb2N1
bWVudCkgJiYgKHR5cGVvZiBSYW5nZSAhPT0gJ3VuZGVmaW5lZCcpICYmIFJhbmdlLnByb3RvdHlw
ZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQsCi0gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVy
IHByaW9yIHRvIDkgZG9lcyBub3QgYWxsb3cgc2V0dGluZyBpbm5lckhUTUwgaWYgdGhlIGZpcnN0
IGVsZW1lbnQKLSAgICAgICAgLy8gaXMgYSAiemVyby1zY29wZSIgZWxlbWVudC4gVGhpcyBwcm9i
bGVtIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IG1ha2luZwotICAgICAgICAvLyB0aGUgZmlyc3Qg
bm9kZSBhbiBpbnZpc2libGUgdGV4dCBub2RlLiBXZSwgbGlrZSBNb2Rlcm5penIsIHVzZSAmc2h5
OwotICAgICAgICBuZWVkc1NoeSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYg
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHRlc3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOwotICAgICAgICAgICAgdGVzdEVsLmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2
PiI7Ci0gICAgICAgICAgICB0ZXN0RWwuZmlyc3RDaGlsZC5pbm5lckhUTUwgPSAiPHNjcmlwdD48
L3NjcmlwdD4iOwotICAgICAgICAgICAgcmV0dXJuIHRlc3RFbC5maXJzdENoaWxkLmlubmVySFRN
TCA9PT0gJyc7Ci0gICAgICAgIH0pKCksCi0KLSAgICAgICAgLy8gSUUgOCAoYW5kIGxpa2VseSBl
YXJsaWVyKSBsaWtlcyB0byBtb3ZlIHdoaXRlc3BhY2UgcHJlY2VlZGluZwotICAgICAgICAvLyBh
IHNjcmlwdCB0YWcgdG8gYXBwZWFyIGFmdGVyIGl0LiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuCi0g
ICAgICAgIC8vIGFjY2lkZW50YWxseSByZW1vdmUgd2hpdGVzcGFjZSB3aGVuIHVwZGF0aW5nIGEg
bW9ycGguCi0gICAgICAgIG1vdmVzV2hpdGVzcGFjZSA9IGRvY3VtZW50ICYmIChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHZhciB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KTsKLSAgICAgICAgICAgIHRlc3RFbC5pbm5lckhUTUwgPSAiVGVzdDogPHNjcmlwdCB0eXBlPSd0
ZXh0L3gtcGxhY2Vob2xkZXInPjwvc2NyaXB0PlZhbHVlIjsKLSAgICAgICAgICAgIHJldHVybiB0
ZXN0RWwuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUgPT09ICdUZXN0OicgJiYKLSAgICAgICAgICAg
IHRlc3RFbC5jaGlsZE5vZGVzWzJdLm5vZGVWYWx1ZSA9PT0gJyBWYWx1ZSc7Ci0gICAgICAgIH0p
KCk7Ci0KLSAgICAgICAgLy8gQ29uc3RydWN0b3IgdGhhdCBzdXBwb3J0cyBlaXRoZXIgTWV0YW1v
cnBoKCdmb28nKSBvciBuZXcKLSAgICAgICAgLy8gTWV0YW1vcnBoKCdmb28nKTsKLSAgICAgICAg
Ly8KLSAgICAgICAgLy8gVGFrZXMgYSBzdHJpbmcgb2YgSFRNTCBhcyB0aGUgYXJndW1lbnQuCi0K
LSAgICAgICAgdmFyIE1ldGFtb3JwaCA9IGZ1bmN0aW9uKGh0bWwpIHsKLSAgICAgICAgICAgIHZh
ciBzZWxmOwotCi0gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE1ldGFtb3JwaCkgewot
ICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzZWxmID0gbmV3IEsoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c2VsZi5pbm5lckhUTUwgPSBodG1sOwotICAgICAgICAgICAgdmFyIG15R3VpZCA9ICdtZXRhbW9y
cGgtJyArIChndWlkKyspOwotICAgICAgICAgICAgc2VsZi5zdGFydCA9IG15R3VpZCArICctc3Rh
cnQnOwotICAgICAgICAgICAgc2VsZi5lbmQgPSBteUd1aWQgKyAnLWVuZCc7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBzZWxmOwotICAgICAgICB9OwotCi0gICAgICAgIEsucHJvdG90eXBlID0gTWV0
YW1vcnBoLnByb3RvdHlwZTsKLQotICAgICAgICB2YXIgcmFuZ2VGb3IsIGh0bWxGdW5jLCByZW1v
dmVGdW5jLCBvdXRlckhUTUxGdW5jLCBhcHBlbmRUb0Z1bmMsIGFmdGVyRnVuYywgcHJlcGVuZEZ1
bmMsIHN0YXJ0VGFnRnVuYywgZW5kVGFnRnVuYzsKLQotICAgICAgICBvdXRlckhUTUxGdW5jID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydFRhZygpICsgdGhpcy5p
bm5lckhUTUwgKyB0aGlzLmVuZFRhZygpOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXJ0VGFn
RnVuYyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAq
IFdlIHJlcGxhY2UgY2hldnJvbiBieSBpdHMgaGV4IGNvZGUgaW4gb3JkZXIgdG8gcHJldmVudCBl
c2NhcGluZyBwcm9ibGVtcy4KLSAgICAgICAgICAgICAgICAgICAqIENoZWNrIHRoaXMgdGhyZWFk
IGZvciBtb3JlIGV4cGxhaW5hdGlvbjoKLSAgICAgICAgICAgICAgICAgICAqIGh0dHA6Ly9zdGFj
a292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODIzMTA0OC93aHktdXNlLXgzYy1pbnN0ZWFkLW9mLXdo
ZW4tZ2VuZXJhdGluZy1odG1sLWZyb20tamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICByZXR1cm4gIjxzY3JpcHQgaWQ9JyIgKyB0aGlzLnN0YXJ0ICsgIicgdHlw
ZT0ndGV4dC94LXBsYWNlaG9sZGVyJz5ceDNDL3NjcmlwdD4iOwotICAgICAgICB9OwotCi0gICAg
ICAgIGVuZFRhZ0Z1bmMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAg
ICAgICAgICAgKiBXZSByZXBsYWNlIGNoZXZyb24gYnkgaXRzIGhleCBjb2RlIGluIG9yZGVyIHRv
IHByZXZlbnQgZXNjYXBpbmcgcHJvYmxlbXMuCi0gICAgICAgICAgICAgICAgICAgKiBDaGVjayB0
aGlzIHRocmVhZCBmb3IgbW9yZSBleHBsYWluYXRpb246Ci0gICAgICAgICAgICAgICAgICAgKiBo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzgyMzEwNDgvd2h5LXVzZS14M2MtaW5z
dGVhZC1vZi13aGVuLWdlbmVyYXRpbmctaHRtbC1mcm9tLWphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuICI8c2NyaXB0IGlkPSciICsgdGhpcy5lbmQg
KyAiJyB0eXBlPSd0ZXh0L3gtcGxhY2Vob2xkZXInPlx4M0Mvc2NyaXB0PiI7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgVzNDIHJhbmdlIEFQSSwgdGhpcyBwcm9jZXNz
IGlzIHJlbGF0aXZlbHkgc3RyYWlnaHQgZm9yd2FyZC4KLSAgICAgICAgaWYgKHN1cHBvcnRzUmFu
Z2UpIHsKLQotICAgICAgICAgICAgLy8gR2V0IGEgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IG1vcnBo
LiBPcHRpb25hbGx5IGluY2x1ZGUgdGhlIHN0YXJ0aW5nIGFuZAotICAgICAgICAgICAgLy8gZW5k
aW5nIHBsYWNlaG9sZGVycy4KLSAgICAgICAgICAgIHJhbmdlRm9yID0gZnVuY3Rpb24obW9ycGgs
IG91dGVyVG9vKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKLSAgICAgICAgICAgICAgICB2YXIgYmVmb3JlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQobW9ycGguc3RhcnQpOwotICAgICAgICAgICAgICAgIHZhciBhZnRlciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKG1vcnBoLmVuZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAob3V0ZXJU
b28pIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnRCZWZvcmUoYmVmb3JlKTsK
LSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIoYWZ0ZXIpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIo
YmVmb3JlKTsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kQmVmb3JlKGFmdGVyKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7Ci0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICBodG1sRnVuYyA9IGZ1bmN0aW9uKGh0bWwsIG91dGVy
VG9vKSB7Ci0gICAgICAgICAgICAgICAgLy8gZ2V0IGEgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IG1l
dGFtb3JwaCBvYmplY3QKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZUZvcih0aGlz
LCBvdXRlclRvbyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBkZWxldGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByYW5nZSwgd2hpY2ggd2lsbCBiZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBub2RlcyBi
ZXR3ZWVuIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHBsYWNlaG9sZGVyLgotICAgICAgICAgICAg
ICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUg
YSBuZXcgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIHRoZSBIVE1MCi0gICAgICAgICAgICAgICAgdmFy
IGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwotCi0gICAg
ICAgICAgICAgICAgLy8gaW5zZXJ0IHRoZSBmcmFnbWVudCBpbnRvIHRoZSByYW5nZQotICAgICAg
ICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZnJhZ21lbnQpOwotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAqIEBwdWJsaWMKLSAgICAgICAgICAg
ICAgICAgICoKLSAgICAgICAgICAgICAgICAgICogUmVtb3ZlIHRoaXMgb2JqZWN0IChpbmNsdWRp
bmcgc3RhcnRpbmcgYW5kIGVuZGluZwotICAgICAgICAgICAgICAgICAgKiBwbGFjZWhvbGRlcnMp
LgotICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgKiBAbWV0aG9kIHJlbW92
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZUZ1bmMgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAvLyBnZXQgYSByYW5nZSBmb3IgdGhlIGN1cnJlbnQgbWV0
YW1vcnBoIG9iamVjdCBpbmNsdWRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnRpbmcg
YW5kIGVuZGluZyBwbGFjZWhvbGRlcnMuCi0gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gcmFu
Z2VGb3IodGhpcywgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBkZWxldGUgdGhlIGVudGly
ZSByYW5nZS4KLSAgICAgICAgICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpOwotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgYXBwZW5kVG9GdW5jID0gZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAg
ICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uu
Y29sbGFwc2UoZmFsc2UpOwotICAgICAgICAgICAgICAgIHZhciBmcmFnID0gcmFuZ2UuY3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KHRoaXMub3V0ZXJIVE1MKCkpOwotICAgICAgICAgICAgICAgIG5v
ZGUuYXBwZW5kQ2hpbGQoZnJhZyk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBhZnRl
ckZ1bmMgPSBmdW5jdGlvbihodG1sKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gZG9j
dW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICB2YXIgYWZ0ZXIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCh0aGlzLmVuZCk7Ci0KLSAgICAgICAgICAgICAgICByYW5nZS5zZXRT
dGFydEFmdGVyKGFmdGVyKTsKLSAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihhZnRl
cik7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSByYW5nZS5jcmVhdGVDb250ZXh0
dWFsRnJhZ21lbnQoaHRtbCk7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFn
bWVudCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBwcmVwZW5kRnVuYyA9IGZ1bmN0
aW9uKGh0bWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVS
YW5nZSgpOwotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKHRoaXMuc3RhcnQpOwotCi0gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihz
dGFydCk7Ci0gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIoc3RhcnQpOwotCi0gICAg
ICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGh0bWwpOwotICAgICAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZnJhZ21lbnQpOwotICAg
ICAgICAgICAgfTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyoKLSAgICAgICAg
ICAgICAgICAgICAqIFRoaXMgY29kZSBpcyBtb3N0bHkgdGFrZW4gZnJvbSBqUXVlcnksIHdpdGgg
b25lIGV4Y2VwdGlvbi4gSW4galF1ZXJ5J3MgY2FzZSwgd2UKLSAgICAgICAgICAgICAgICAgICAq
IGhhdmUgc29tZSBIVE1MIGFuZCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbnZlcnQg
aXQgaW50byBzb21lIG5vZGVzLgotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAg
ICAgICAqIEluIHRoaXMgY2FzZSwgalF1ZXJ5IG5lZWRzIHRvIHNjYW4gdGhlIEhUTUwgbG9va2lu
ZyBmb3IgYW4gb3BlbmluZyB0YWcgYW5kIHVzZQotICAgICAgICAgICAgICAgICAgICogdGhhdCBh
cyB0aGUga2V5IGZvciB0aGUgd3JhcCBtYXAuIEluIG91ciBjYXNlLCB3ZSBrbm93IHRoZSBwYXJl
bnQgbm9kZSwgYW5kCi0gICAgICAgICAgICAgICAgICAgKiBjYW4gdXNlIGl0cyB0eXBlIGFzIHRo
ZSBrZXkgZm9yIHRoZSB3cmFwIG1hcC4KLSAgICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAg
ICAgIE1ldGFtb3JwaC5fd3JhcE1hcCA9IHsKLSAgICAgICAgICAgICAgICBzZWxlY3Q6IFsgMSwg
IjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAotICAgICAgICAg
ICAgICAgIGZpZWxkc2V0OiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdLAotICAg
ICAgICAgICAgICAgIHRhYmxlOiBbIDEsICI8dGFibGU+IiwgIjwvdGFibGU+IiBdLAotICAgICAg
ICAgICAgICAgIHRib2R5OiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+
IiBdLAotICAgICAgICAgICAgICAgIHRyOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90
cj48L3Rib2R5PjwvdGFibGU+IiBdLAotICAgICAgICAgICAgICAgIGNvbGdyb3VwOiBbIDIsICI8
dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBd
LAotICAgICAgICAgICAgICAgIG1hcDogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAotICAgICAg
ICAgICAgICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCi0gICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICB2YXIgZmluZENoaWxkQnlJZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpID09PSBpZCkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgbGVuID0gZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCwgaWR4LCBu
b2RlLCBmb3VuZDsKLSAgICAgICAgICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpZHhd
OwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG5vZGUubm9kZVR5cGUgPT09IDEgJiYgZmlu
ZENoaWxkQnlJZChub2RlLCBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdmFy
IHNldElubmVySFRNTCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGh0bWwpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgbWF0Y2hlcyA9IFtdOwotICAgICAgICAgICAgICAgIGlmIChtb3Zlc1doaXRlc3BhY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdlIG9ubHkgY2hlY2sgZm9yIHNj
cmlwdCB0YWdzIHdpdGggaWRzIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGdvYWwg
b2YgdGFyZ2V0aW5nIG1vcnBocy4KLSAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGh0bWwucmVw
bGFjZSgvKFxzKykoPHNjcmlwdCBpZD0nKFteJ10rKScpL2csIGZ1bmN0aW9uKG1hdGNoLCBzcGFj
ZXMsIHRhZywgaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChbaWQs
IHNwYWNlc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZWxl
bWVudC5pbm5lckhUTUwgPSBodG1sOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSB0
byBkbyBhbnkgd2hpdGVzcGFjZSBhZGp1c3RtZW50cyBkbyB0aGVtIG5vdwotICAgICAgICAgICAg
ICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxl
biA9IG1hdGNoZXMubGVuZ3RoLCBpZHg7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaWR4ID0g
MDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcmlw
dCA9IGZpbmRDaGlsZEJ5SWQoZWxlbWVudCwgbWF0Y2hlc1tpZHhdWzBdKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtYXRjaGVzW2lkeF1b
MV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVm
b3JlKG5vZGUsIHNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAg
ICogR2l2ZW4gYSBwYXJlbnQgbm9kZSBhbmQgc29tZSBIVE1MLCBnZW5lcmF0ZSBhIHNldCBvZiBu
b2Rlcy4gUmV0dXJuIHRoZSBmaXJzdAotICAgICAgICAgICAgICAgICAgICogbm9kZSwgd2hpY2gg
d2lsbCBhbGxvdyB1cyB0byB0cmF2ZXJzZSB0aGUgcmVzdCB1c2luZyBuZXh0U2libGluZy4KLSAg
ICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKiBXZSBuZWVkIHRvIGRvIHRo
aXMgYmVjYXVzZSBpbm5lckhUTUwgaW4gSUUgZG9lcyBub3QgcmVhbGx5IHBhcnNlIHRoZSBub2Rl
cy4KLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZUZvciA9
IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGh0bWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgd3JhcE1h
cCA9IE1ldGFtb3JwaC5fd3JhcE1hcDsKLSAgICAgICAgICAgICAgICB2YXIgYXJyID0gd3JhcE1h
cFtwYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0gfHwgd3JhcE1hcC5fZGVmYXVsdDsK
LSAgICAgICAgICAgICAgICB2YXIgZGVwdGggPSBhcnJbMF0sIHN0YXJ0ID0gYXJyWzFdLCBlbmQg
PSBhcnJbMl07Ci0KLSAgICAgICAgICAgICAgICBpZiAobmVlZHNTaHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaHRtbCA9ICcmc2h5OycgKyBodG1sOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
Ci0KLSAgICAgICAgICAgICAgICBzZXRJbm5lckhUTUwoZWxlbWVudCwgc3RhcnQgKyBodG1sICsg
ZW5kKTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGRlcHRoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBMb29rIGZvciAmc2h5OyB0byBy
ZW1vdmUgaXQuCi0gICAgICAgICAgICAgICAgaWYgKG5lZWRzU2h5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBzaHlFbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBTb21ldGltZXMgd2UgZ2V0IG5hbWVsZXNzIGVsZW1lbnRzIHdpdGggdGhlIHNoeSBpbnNpZGUK
LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNoeUVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYg
IXNoeUVsZW1lbnQubm9kZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoeUVsZW1l
bnQgPSBzaHlFbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0J3MgdGhlIGFjdHVhbCB1bmljb2Rl
IGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNoeUVsZW1lbnQubm9kZVR5cGUg
PT09IDMgJiYgc2h5RWxlbWVudC5ub2RlVmFsdWUuY2hhckF0KDApID09PSAiXHUwMEFEIikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc2h5RWxlbWVudC5ub2RlVmFsdWUgPSBzaHlFbGVtZW50
Lm5vZGVWYWx1ZS5zbGljZSgxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAqIEluIHNvbWUgY2FzZXMsIElu
dGVybmV0IEV4cGxvcmVyIGNhbiBjcmVhdGUgYW4gYW5vbnltb3VzIG5vZGUgaW4KLSAgICAgICAg
ICAgICAgICAgICAqIHRoZSBoaWVyYXJjaHkgd2l0aCBubyB0YWdOYW1lLiBZb3UgY2FuIGNyZWF0
ZSB0aGlzIHNjZW5hcmlvIHZpYToKLSAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAg
ICAgICAgKiAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAg
ICAgICAgICAgICAgKiAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+JnNoeTxzY3JpcHQ+PC9z
Y3JpcHQ+PHRyPjx0ZD5oaTwvdGQ+PC90cj48L3RhYmxlPiI7Ci0gICAgICAgICAgICAgICAgICAg
KiAgICAgZGl2LmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC50YWdOYW1lIC8vPT4gIiIKLSAgICAgICAg
ICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKiBJZiBvdXIgc2NyaXB0IG1hcmtlcnMg
YXJlIGluc2lkZSBzdWNoIGEgbm9kZSwgd2UgbmVlZCB0byBmaW5kIHRoYXQKLSAgICAgICAgICAg
ICAgICAgICAqIG5vZGUgYW5kIHVzZSAqaXQqIGFzIHRoZSBtYXJrZXIuCi0gICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHZhciByZWFsTm9kZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0LnBhcmVudE5vZGUudGFnTmFtZSA9PT0gIiIpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnROb2RlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBzdGFydDsKLSAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgKiBXaGVuIGF1dG9tYXRpY2Fs
bHkgYWRkaW5nIGEgdGJvZHksIEludGVybmV0IEV4cGxvcmVyIGluc2VydHMgdGhlCi0gICAgICAg
ICAgICAgICAgICAgKiB0Ym9keSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGZpcnN0IDx0cj4uIE90
aGVyIGJyb3dzZXJzIGNyZWF0ZSBpdAotICAgICAgICAgICAgICAgICAgICogYmVmb3JlIHRoZSBm
aXJzdCBub2RlLCBubyBtYXR0ZXIgd2hhdC4KLSAgICAgICAgICAgICAgICAgICAqCi0gICAgICAg
ICAgICAgICAgICAgKiBUaGlzIG1lYW5zIHRoZSB0aGUgZm9sbG93aW5nIGNvZGU6Ci0gICAgICAg
ICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICogICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgICAgICogICAgIGRpdi5pbm5lckhU
TUwgPSAiPHRhYmxlPjxzY3JpcHQgaWQ9J2ZpcnN0Jz48L3NjcmlwdD48dHI+PHRkPmhpPC90ZD48
L3RyPjxzY3JpcHQgaWQ9J2xhc3QnPjwvc2NyaXB0PjwvdGFibGU+Ci0gICAgICAgICAgICAgICAg
ICAgKgotICAgICAgICAgICAgICAgICAgICogR2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgRE9NIGlu
IElFOgotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqICAgICArIGRp
dgotICAgICAgICAgICAgICAgICAgICogICAgICAgKyB0YWJsZQotICAgICAgICAgICAgICAgICAg
ICogICAgICAgICAtIHNjcmlwdCBpZD0nZmlyc3QnCi0gICAgICAgICAgICAgICAgICAgKiAgICAg
ICAgICsgdGJvZHkKLSAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICArIHRyCi0gICAgICAg
ICAgICAgICAgICAgKiAgICAgICAgICAgICArIHRkCi0gICAgICAgICAgICAgICAgICAgKiAgICAg
ICAgICAgICAgIC0gImhpIgotICAgICAgICAgICAgICAgICAgICogICAgICAgICAgIC0gc2NyaXB0
IGlkPSdsYXN0JwotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqIFdo
aWNoIG1lYW5zIHRoYXQgdGhlIHR3byBzY3JpcHQgdGFncywgZXZlbiB0aG91Z2ggdGhleSB3ZXJl
Ci0gICAgICAgICAgICAgICAgICAgKiBpbnNlcnRlZCBhdCB0aGUgc2FtZSBwb2ludCBpbiB0aGUg
aGllcmFyY2h5IGluIHRoZSBvcmlnaW5hbAotICAgICAgICAgICAgICAgICAgICogSFRNTCwgbm93
IGhhdmUgZGlmZmVyZW50IHBhcmVudHMuCi0gICAgICAgICAgICAgICAgICAgKgotICAgICAgICAg
ICAgICAgICAgICogVGhpcyBjb2RlIHJlcGFyZW50cyB0aGUgZmlyc3Qgc2NyaXB0IHRhZyBieSBt
YWtpbmcgaXQgdGhlIHRib2R5J3MKLSAgICAgICAgICAgICAgICAgICAqIGZpcnN0IGNoaWxkLgot
ICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
dmFyIGZpeFBhcmVudGFnZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhcnQucGFyZW50Tm9kZSAhPT0gZW5kLnBhcmVudE5vZGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZW5kLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHN0YXJ0LCBlbmQucGFyZW50Tm9k
ZS5maXJzdENoaWxkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICBodG1sRnVuYyA9IGZ1bmN0aW9uKGh0bWwsIG91dGVyVG9vKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gZ2V0IHRoZSByZWFsIHN0YXJ0aW5nIG5vZGUuIHNlZSByZWFsTm9kZSBmb3IgZGV0
YWlscy4KLSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSByZWFsTm9kZShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCh0aGlzLnN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgdmFyIGVuZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZW5kKTsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50
Tm9kZSA9IGVuZC5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIHZhciBub2RlLCBuZXh0U2li
bGluZywgbGFzdDsKLQotICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGFy
dCBhbmQgZW5kIG5vZGVzIHNoYXJlIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgLy8gcGFyZW50
LiBJZiBub3QsIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBmaXhQYXJlbnRhZ2Uoc3RhcnQsIGVu
ZCk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIG9mIHRoZSBub2RlcyBhZnRlciB0
aGUgc3RhcnRpbmcgcGxhY2Vob2xkZXIgYW5kCi0gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRo
ZSBlbmRpbmcgcGxhY2Vob2xkZXIuCi0gICAgICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Lm5leHRT
aWJsaW5nOwotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAg
bGFzdCA9IG5vZGUgPT09IGVuZDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlz
IHRoZSBsYXN0IG5vZGUsIGFuZCB3ZSB3YW50IHRvIHJlbW92ZSBpdCBhcyB3ZWxsLAotICAgICAg
ICAgICAgICAgICAgICAvLyBzZXQgdGhlIGBlbmRgIG5vZGUgdG8gdGhlIG5leHQgc2libGluZy4g
VGhpcyBpcyBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmVzdCBvZiB0
aGUgZnVuY3Rpb24sIHdlIGluc2VydCB0aGUgbmV3IG5vZGVzCi0gICAgICAgICAgICAgICAgICAg
IC8vIGJlZm9yZSB0aGUgZW5kIChub3RlIHRoYXQgaW5zZXJ0QmVmb3JlKG5vZGUsIG51bGwpIGlz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzYW1lIGFzIGFwcGVuZENoaWxkKG5vZGUpKS4K
LSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgZG8g
bm90IHdhbnQgdG8gcmVtb3ZlIGl0LCBqdXN0IGJyZWFrLgotICAgICAgICAgICAgICAgICAgICBp
ZiAobGFzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dGVyVG9vKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgbGFzdCBub2RlIGFuZCB3ZSBk
aWRuJ3QgYnJlYWsgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgIC8vIChiZWNhdXNlIHdlIHdh
bnRlZCB0byByZW1vdmUgdGhlIG91dGVyIG5vZGVzKSwgYnJlYWsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gbm93LgotICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBub2RlID0gbmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gZ2V0IHRoZSBmaXJzdCBub2RlIGZvciB0aGUgSFRNTCBzdHJpbmcsIGV2ZW4g
aW4gY2FzZXMgbGlrZQotICAgICAgICAgICAgICAgIC8vIHRhYmxlcyBhbmQgbGlzdHMgd2hlcmUg
YSBzaW1wbGUgaW5uZXJIVE1MIG9uIGEgZGl2IHdvdWxkCi0gICAgICAgICAgICAgICAgLy8gc3dh
bGxvdyBzb21lIG9mIHRoZSBjb250ZW50LgotICAgICAgICAgICAgICAgIG5vZGUgPSBmaXJzdE5v
ZGVGb3Ioc3RhcnQucGFyZW50Tm9kZSwgaHRtbCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAob3V0
ZXJUb28pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChzdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY29weSB0
aGUgbm9kZXMgZm9yIHRoZSBIVE1MIGJldHdlZW4gdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcKLSAg
ICAgICAgICAgICAgICAvLyBwbGFjZWhvbGRlci4KLSAgICAgICAgICAgICAgICB3aGlsZSAobm9k
ZSkgewotICAgICAgICAgICAgICAgICAgICBuZXh0U2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVuZCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvLyByZW1vdmUgdGhlIG5vZGVzIGlu
IHRoZSBET00gcmVwcmVzZW50aW5nIHRoaXMgbWV0YW1vcnBoLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIHRoaXMgaW5jbHVkZXMgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcGxhY2Vo
b2xkZXJzLgotICAgICAgICAgICAgcmVtb3ZlRnVuYyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBzdGFydCA9IHJlYWxOb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMu
c3RhcnQpKTsKLSAgICAgICAgICAgICAgICB2YXIgZW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQodGhpcy5lbmQpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5odG1sKCcnKTsKLSAgICAgICAg
ICAgICAgICBzdGFydC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0YXJ0KTsKLSAgICAgICAgICAg
ICAgICBlbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbmQpOwotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgYXBwZW5kVG9GdW5jID0gZnVuY3Rpb24ocGFyZW50Tm9kZSkgewotICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gZmlyc3ROb2RlRm9yKHBhcmVudE5vZGUsIHRoaXMub3V0ZXJI
VE1MKCkpOwotICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGluZzsKLQotICAgICAgICAgICAg
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gbm9k
ZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5hcHBlbmRDaGls
ZChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHRTaWJsaW5nOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGFmdGVyRnVuYyA9IGZ1
bmN0aW9uKGh0bWwpIHsKLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlYWwgc3RhcnRpbmcg
bm9kZS4gc2VlIHJlYWxOb2RlIGZvciBkZXRhaWxzLgotICAgICAgICAgICAgICAgIHZhciBlbmQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVuZCk7Ci0gICAgICAgICAgICAgICAgdmFy
IGluc2VydEJlZm9yZSA9IGVuZC5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
ZW50Tm9kZSA9IGVuZC5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGlu
ZzsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZTsKLQotICAgICAgICAgICAgICAgIC8vIGdldCB0
aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIEhUTUwgc3RyaW5nLCBldmVuIGluIGNhc2VzIGxpa2UKLSAg
ICAgICAgICAgICAgICAvLyB0YWJsZXMgYW5kIGxpc3RzIHdoZXJlIGEgc2ltcGxlIGlubmVySFRN
TCBvbiBhIGRpdiB3b3VsZAotICAgICAgICAgICAgICAgIC8vIHN3YWxsb3cgc29tZSBvZiB0aGUg
Y29udGVudC4KLSAgICAgICAgICAgICAgICBub2RlID0gZmlyc3ROb2RlRm9yKHBhcmVudE5vZGUs
IGh0bWwpOwotCi0gICAgICAgICAgICAgICAgLy8gY29weSB0aGUgbm9kZXMgZm9yIHRoZSBIVE1M
IGJldHdlZW4gdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcKLSAgICAgICAgICAgICAgICAvLyBwbGFj
ZWhvbGRlci4KLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgICAg
ICAgICBuZXh0U2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGluc2VydEJlZm9yZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICBwcmVwZW5kRnVuYyA9IGZ1bmN0aW9uKGh0bWwpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnN0
YXJ0KTsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IHN0YXJ0LnBhcmVudE5vZGU7
Ci0gICAgICAgICAgICAgICAgdmFyIG5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIHZhciBu
b2RlOwotCi0gICAgICAgICAgICAgICAgbm9kZSA9IGZpcnN0Tm9kZUZvcihwYXJlbnROb2RlLCBo
dG1sKTsKLSAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gc3RhcnQubmV4dFNpYmxp
bmc7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgICAgICAg
ICBuZXh0U2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGluc2VydEJlZm9yZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vZGUgPSBuZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5odG1sID0gZnVu
Y3Rpb24oaHRtbCkgewotICAgICAgICAgICAgdGhpcy5jaGVja1JlbW92ZWQoKTsKLSAgICAgICAg
ICAgIGlmIChodG1sID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5pbm5lckhUTUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGh0bWxGdW5jLmNhbGwo
dGhpcywgaHRtbCk7Ci0KLSAgICAgICAgICAgIHRoaXMuaW5uZXJIVE1MID0gaHRtbDsKLSAgICAg
ICAgfTsKLQotICAgICAgICBNZXRhbW9ycGgucHJvdG90eXBlLnJlcGxhY2VXaXRoID0gZnVuY3Rp
b24oaHRtbCkgewotICAgICAgICAgICAgdGhpcy5jaGVja1JlbW92ZWQoKTsKLSAgICAgICAgICAg
IGh0bWxGdW5jLmNhbGwodGhpcywgaHRtbCwgdHJ1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
TWV0YW1vcnBoLnByb3RvdHlwZS5yZW1vdmUgPSByZW1vdmVGdW5jOwotICAgICAgICBNZXRhbW9y
cGgucHJvdG90eXBlLm91dGVySFRNTCA9IG91dGVySFRNTEZ1bmM7Ci0gICAgICAgIE1ldGFtb3Jw
aC5wcm90b3R5cGUuYXBwZW5kVG8gPSBhcHBlbmRUb0Z1bmM7Ci0gICAgICAgIE1ldGFtb3JwaC5w
cm90b3R5cGUuYWZ0ZXIgPSBhZnRlckZ1bmM7Ci0gICAgICAgIE1ldGFtb3JwaC5wcm90b3R5cGUu
cHJlcGVuZCA9IHByZXBlbmRGdW5jOwotICAgICAgICBNZXRhbW9ycGgucHJvdG90eXBlLnN0YXJ0
VGFnID0gc3RhcnRUYWdGdW5jOwotICAgICAgICBNZXRhbW9ycGgucHJvdG90eXBlLmVuZFRhZyA9
IGVuZFRhZ0Z1bmM7Ci0KLSAgICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5pc1JlbW92ZWQgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBiZWZvcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCh0aGlzLnN0YXJ0KTsKLSAgICAgICAgICAgIHZhciBhZnRlciA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKHRoaXMuZW5kKTsKLQotICAgICAgICAgICAgcmV0dXJuICFiZWZvcmUgfHwgIWFm
dGVyOwotICAgICAgICB9OwotCi0gICAgICAgIE1ldGFtb3JwaC5wcm90b3R5cGUuY2hlY2tSZW1v
dmVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1JlbW92ZWQoKSkgewot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9u
cyBvbiBhIE1ldGFtb3JwaCB0aGF0IGlzIG5vdCBpbiB0aGUgRE9NLiIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBNZXRhbW9ycGg7Ci0gICAgfSk7Ci0KLSAg
ICBkZWZpbmUoInJvdXRlLXJlY29nbml6ZXIiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIHNw
ZWNpYWxzID0gWwotICAgICAgICAnLycsICcuJywgJyonLCAnKycsICc/JywgJ3wnLAotICAgICAg
ICAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30nLCAnXFwnCi0gICAgICAgIF07Ci0KLSAgICAg
ICAgdmFyIGVzY2FwZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKFxcJyArIHNwZWNpYWxzLmpvaW4oJ3xc
XCcpICsgJyknLCAnZycpOwotCi0gICAgICAgIGZ1bmN0aW9uIGlzQXJyYXkodGVzdCkgewotICAg
ICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0ZXN0KSA9PT0g
IltvYmplY3QgQXJyYXldIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEEgU2VnbWVudCByZXBy
ZXNlbnRzIGEgc2VnbWVudCBpbiB0aGUgb3JpZ2luYWwgcm91dGUgZGVzY3JpcHRpb24uCi0gICAg
ICAgIC8vIEVhY2ggU2VnbWVudCB0eXBlIHByb3ZpZGVzIGFuIGBlYWNoQ2hhcmAgYW5kIGByZWdl
eGAgbWV0aG9kLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgYGVhY2hDaGFyYCBtZXRob2Qg
aW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIKLSAgICAgICAg
Ly8gc3BlY2lmaWNhdGlvbnMuIEEgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gY29uc3VtZXMgb25l
IG9yIG1vcmUgaW5wdXQKLSAgICAgICAgLy8gY2hhcmFjdGVycy4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gVGhlIGByZWdleGAgbWV0aG9kIHJldHVybnMgYSByZWdleCBmcmFnbWVudCBmb3IgdGhl
IHNlZ21lbnQuIElmIHRoZQotICAgICAgICAvLyBzZWdtZW50IGlzIGEgZHluYW1pYyBvZiBzdGFy
IHNlZ21lbnQsIHRoZSByZWdleCBmcmFnbWVudCBhbHNvIGluY2x1ZGVzCi0gICAgICAgIC8vIGEg
Y2FwdHVyZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlv
biBjb250YWluczoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gKiBgdmFsaWRDaGFyc2A6IGEgU3Ry
aW5nIHdpdGggYSBsaXN0IG9mIGFsbCB2YWxpZCBjaGFyYWN0ZXJzLCBvcgotICAgICAgICAvLyAq
IGBpbnZhbGlkQ2hhcnNgOiBhIFN0cmluZyB3aXRoIGEgbGlzdCBvZiBhbGwgaW52YWxpZCBjaGFy
YWN0ZXJzCi0gICAgICAgIC8vICogYHJlcGVhdGA6IHRydWUgaWYgdGhlIGNoYXJhY3RlciBzcGVj
aWZpY2F0aW9uIGNhbiByZXBlYXQKLQotICAgICAgICBmdW5jdGlvbiBTdGF0aWNTZWdtZW50KHN0
cmluZykgewotICAgICAgICAgICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgICAgIH0KLSAg
ICAgICAgU3RhdGljU2VnbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBlYWNoQ2hhcjog
ZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RyaW5nID0gdGhpcy5z
dHJpbmcsIGNoOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdHJpbmcu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gc3RyaW5nLmNo
YXJBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRDaGFyczogY2ggCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlZ2V4OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcucmVwbGFjZShlc2NhcGVS
ZWdleCwgJ1xcJDEnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdlbmVyYXRlOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmc7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gRHluYW1pY1NlZ21lbnQobmFt
ZSkgewotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgfQotICAgICAgICBE
eW5hbWljU2VnbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBlYWNoQ2hhcjogZnVuY3Rp
b24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh7Ci0gICAgICAgICAgICAg
ICAgICAgIGludmFsaWRDaGFyczogIi8iLAotICAgICAgICAgICAgICAgICAgICByZXBlYXQ6IHRy
dWUgCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBy
ZWdleDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIoW14vXSspIjsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdlbmVyYXRlOiBmdW5jdGlvbihwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zW3RoaXMubmFtZV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gU3RhclNlZ21lbnQobmFtZSkgewotICAg
ICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgfQotICAgICAgICBTdGFyU2VnbWVu
dC5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBlYWNoQ2hhcjogZnVuY3Rpb24oY2FsbGJhY2sp
IHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh7Ci0gICAgICAgICAgICAgICAgICAgIGludmFs
aWRDaGFyczogIiIsCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdDogdHJ1ZSAKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlZ2V4OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIiguKykiOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKHBhcmFtcykgewotICAgICAgICAgICAgICAg
IHJldHVybiBwYXJhbXNbdGhpcy5uYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQot
ICAgICAgICBmdW5jdGlvbiBFcHNpbG9uU2VnbWVudCgpIHt9Ci0gICAgICAgIEVwc2lsb25TZWdt
ZW50LnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIGVhY2hDaGFyOiBmdW5jdGlvbigpIHt9LAot
ICAgICAgICAgICAgcmVnZXg6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiAi
IjsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBnZW5lcmF0ZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIGZ1bmN0aW9uIHBhcnNlKHJvdXRlLCBuYW1lcywgdHlwZXMpIHsKLSAgICAgICAgICAg
IC8vIG5vcm1hbGl6ZSByb3V0ZSBhcyBub3Qgc3RhcnRpbmcgd2l0aCBhICIvIi4gUmVjb2duaXRp
b24gd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBub3JtYWxpemUuCi0gICAgICAgICAgICBpZiAo
cm91dGUuY2hhckF0KDApID09PSAiLyIpIHsKLSAgICAgICAgICAgICAgICByb3V0ZSA9IHJvdXRl
LnN1YnN0cigxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0g
cm91dGUuc3BsaXQoIi8iKSwgcmVzdWx0cyA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAg
IHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV0sIG1hdGNoOwotCi0gICAgICAgICAgICAgICAgaWYg
KG1hdGNoID0gc2VnbWVudC5tYXRjaCgvXjooW15cL10rKSQvKSkgewotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRzLnB1c2gobmV3IER5bmFtaWNTZWdtZW50KG1hdGNoWzFdKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5hbWVzLnB1c2gobWF0Y2hbMV0pOwotICAgICAgICAgICAgICAgICAgICB0
eXBlcy5keW5hbWljcysrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSBzZWdt
ZW50Lm1hdGNoKC9eXCooW15cL10rKSQvKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRz
LnB1c2gobmV3IFN0YXJTZWdtZW50KG1hdGNoWzFdKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWVzLnB1c2gobWF0Y2hbMV0pOwotICAgICAgICAgICAgICAgICAgICB0eXBlcy5zdGFycysrOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gIiIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKG5ldyBFcHNpbG9uU2VnbWVudCgpKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gobmV3IFN0YXRp
Y1NlZ21lbnQoc2VnbWVudCkpOwotICAgICAgICAgICAgICAgICAgICB0eXBlcy5zdGF0aWNzKys7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEEgU3RhdGUgaGFzIGEgY2hhcmFjdGVy
IHNwZWNpZmljYXRpb24gYW5kIChgY2hhclNwZWNgKSBhbmQgYSBsaXN0IG9mIHBvc3NpYmxlCi0g
ICAgICAgIC8vIHN1YnNlcXVlbnQgc3RhdGVzIChgbmV4dFN0YXRlc2ApLgotICAgICAgICAvLwot
ICAgICAgICAvLyBJZiBhIFN0YXRlIGlzIGFuIGFjY2VwdGluZyBzdGF0ZSwgaXQgd2lsbCBhbHNv
IGhhdmUgc2V2ZXJhbCBhZGRpdGlvbmFsCi0gICAgICAgIC8vIHByb3BlcnRpZXM6Ci0gICAgICAg
IC8vCi0gICAgICAgIC8vICogYHJlZ2V4YDogQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyB1
c2VkIHRvIGV4dHJhY3QgcGFyYW1ldGVycyBmcm9tIHBhdGhzCi0gICAgICAgIC8vICAgdGhhdCBy
ZWFjaGVkIHRoaXMgYWNjZXB0aW5nIHN0YXRlLgotICAgICAgICAvLyAqIGBoYW5kbGVyc2A6IElu
Zm9ybWF0aW9uIG9uIGhvdyB0byBjb252ZXJ0IHRoZSBsaXN0IG9mIGNhcHR1cmVzIGludG8gY2Fs
bHMKLSAgICAgICAgLy8gICB0byByZWdpc3RlcmVkIGhhbmRsZXJzIHdpdGggdGhlIHNwZWNpZmll
ZCBwYXJhbWV0ZXJzCi0gICAgICAgIC8vICogYHR5cGVzYDogSG93IG1hbnkgc3RhdGljLCBkeW5h
bWljIG9yIHN0YXIgc2VnbWVudHMgaW4gdGhpcyByb3V0ZS4gVXNlZCB0bwotICAgICAgICAvLyAg
IGRlY2lkZSB3aGljaCByb3V0ZSB0byB1c2UgaWYgbXVsdGlwbGUgcmVnaXN0ZXJlZCByb3V0ZXMg
bWF0Y2ggYSBwYXRoLgotICAgICAgICAvLwotICAgICAgICAvLyBDdXJyZW50bHksIFN0YXRlIGlz
IGltcGxlbWVudGVkIG5haXZlbHkgYnkgbG9vcGluZyBvdmVyIGBuZXh0U3RhdGVzYCBhbmQKLSAg
ICAgICAgLy8gY29tcGFyaW5nIGEgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gYWdhaW5zdCBhIGNo
YXJhY3Rlci4gQSBtb3JlIGVmZmljaWVudAotICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiB3b3Vs
ZCB1c2UgYSBoYXNoIG9mIGtleXMgcG9pbnRpbmcgYXQgb25lIG9yIG1vcmUgbmV4dCBzdGF0ZXMu
Ci0KLSAgICAgICAgZnVuY3Rpb24gU3RhdGUoY2hhclNwZWMpIHsKLSAgICAgICAgICAgIHRoaXMu
Y2hhclNwZWMgPSBjaGFyU3BlYzsKLSAgICAgICAgICAgIHRoaXMubmV4dFN0YXRlcyA9IFtdOwot
ICAgICAgICB9Ci0KLSAgICAgICAgU3RhdGUucHJvdG90eXBlID0gewotICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbihjaGFyU3BlYykgewotICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhdGVzID0g
dGhpcy5uZXh0U3RhdGVzOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBu
ZXh0U3RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2YXIg
Y2hpbGQgPSBuZXh0U3RhdGVzW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBpc0VxdWFs
ID0gY2hpbGQuY2hhclNwZWMudmFsaWRDaGFycyA9PT0gY2hhclNwZWMudmFsaWRDaGFyczsKLSAg
ICAgICAgICAgICAgICAgICAgaXNFcXVhbCA9IGlzRXF1YWwgJiYgY2hpbGQuY2hhclNwZWMuaW52
YWxpZENoYXJzID09PSBjaGFyU3BlYy5pbnZhbGlkQ2hhcnM7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHB1dDogZnVuY3Rpb24oY2hhclNwZWMpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgc3RhdGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIHNwZWNp
ZmljYXRpb24gYWxyZWFkeSBleGlzdHMgaW4gYSBjaGlsZCBvZiB0aGUgY3VycmVudAotICAgICAg
ICAgICAgICAgIC8vIHN0YXRlLCBqdXN0IHJldHVybiB0aGF0IHN0YXRlLgotICAgICAgICAgICAg
ICAgIGlmIChzdGF0ZSA9IHRoaXMuZ2V0KGNoYXJTcGVjKSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
TWFrZSBhIG5ldyBzdGF0ZSBmb3IgdGhlIGNoYXJhY3RlciBzcGVjCi0gICAgICAgICAgICAgICAg
c3RhdGUgPSBuZXcgU3RhdGUoY2hhclNwZWMpOwotCi0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0
IHRoZSBuZXcgc3RhdGUgYXMgYSBjaGlsZCBvZiB0aGUgY3VycmVudCBzdGF0ZQotICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTsKLQotICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gcmVwZWF0cywgaW5zZXJ0IHRoZSBuZXcg
c3RhdGUgYXMgYSBjaGlsZAotICAgICAgICAgICAgICAgIC8vIG9mIGl0c2VsZi4gTm90ZSB0aGF0
IHRoaXMgd2lsbCBub3QgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wIGJlY2F1c2UgZWFjaAotICAg
ICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gZHVyaW5nIHJlY29nbml0aW9uIGNvbnN1bWVzIGEg
Y2hhcmFjdGVyLgotICAgICAgICAgICAgICAgIGlmIChjaGFyU3BlYy5yZXBlYXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5ldyBzdGF0ZQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8v
IEZpbmQgYSBsaXN0IG9mIGNoaWxkIHN0YXRlcyBtYXRjaGluZyB0aGUgbmV4dCBjaGFyYWN0ZXIK
LSAgICAgICAgICAgIG1hdGNoOiBmdW5jdGlvbihjaCkgewotICAgICAgICAgICAgICAgIC8vIERF
QlVHICJQcm9jZXNzaW5nIGAiICsgY2ggKyAiYDoiCi0gICAgICAgICAgICAgICAgdmFyIG5leHRT
dGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXMsCi0gICAgICAgICAgICAgICAgY2hpbGQsIGNoYXJTcGVj
LCBjaGFyczsKLQotICAgICAgICAgICAgICAgIC8vIERFQlVHICIgICIgKyBkZWJ1Z1N0YXRlKHRo
aXMpCi0gICAgICAgICAgICAgICAgdmFyIHJldHVybmVkID0gW107Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IG5leHRTdGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbmV4dFN0YXRlc1tpXTsKLQotICAgICAgICAgICAg
ICAgICAgICBjaGFyU3BlYyA9IGNoaWxkLmNoYXJTcGVjOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgKGNoYXJzID0gY2hhclNwZWMudmFsaWRDaGFycykgIT09ICd1bmRlZmluZWQn
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihjaCkgIT09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHVzaChjaGlsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
dHlwZW9mIChjaGFycyA9IGNoYXJTcGVjLmludmFsaWRDaGFycykgIT09ICd1bmRlZmluZWQnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihjaCkgPT09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHVzaChjaGlsZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuZWQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8qKiBJRiBERUJVRwotICAgICAgICAgICAgICAgICAgLCBkZWJ1Zzog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyU3BlYyA9IHRoaXMuY2hh
clNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyA9ICJbIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXJzID0gY2hhclNwZWMudmFsaWRDaGFycyB8fCBjaGFyU3BlYy5pbnZh
bGlkQ2hhcnM7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJTcGVjLmludmFsaWRDaGFy
cykgeyBkZWJ1ZyArPSAiXiI7IH0KLSAgICAgICAgICAgICAgICAgICAgZGVidWcgKz0gY2hhcnM7
Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnICs9ICJdIjsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2hhclNwZWMucmVwZWF0KSB7IGRlYnVnICs9ICIrIjsgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkZWJ1ZzsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgIEVORCBJRiAqKi8KLSAgICAgICAgfTsKLQotICAgICAgICAvKiogSUYgREVCVUcKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGRlYnVnKGxvZykgewotICAgICAgICAgICAgICBjb25zb2xlLmxvZyhs
b2cpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBkZWJ1Z1N0YXRlKHN0
YXRlKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5uZXh0U3RhdGVzLm1hcChmdW5jdGlv
bihuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG4ubmV4dFN0YXRlcy5sZW5ndGggPT09IDApIHsg
cmV0dXJuICIoICIgKyBuLmRlYnVnKCkgKyAiIFthY2NlcHRpbmddICkiOyB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICIoICIgKyBuLmRlYnVnKCkgKyAiIDx0aGVuPiAiICsgbi5uZXh0U3RhdGVz
Lm1hcChmdW5jdGlvbihzKSB7IHJldHVybiBzLmRlYnVnKCkgfSkuam9pbigiIG9yICIpICsgIiAp
IjsKLSAgICAgICAgICAgICAgfSkuam9pbigiLCAiKQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgRU5EIElGICoqLwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBuYWl2ZSBzdHJh
dGVneSwgYnV0IHNob3VsZCB3b3JrIGluIGEgbG90IG9mIGNhc2VzCi0gICAgICAgIC8vIEEgYmV0
dGVyIHN0cmF0ZWd5IHdvdWxkIHByb3Blcmx5IHJlc29sdmUgL3Bvc3RzLzppZC9uZXcgYW5kIC9w
b3N0cy9lZGl0LzppZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBzdHJhdGVneSBnZW5l
cmFsbHkgcHJlZmVycyBtb3JlIHN0YXRpYyBhbmQgbGVzcyBkeW5hbWljIG1hdGNoaW5nLgotICAg
ICAgICAvLyBTcGVjaWZpY2FsbHksIGl0Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAqIHByZWZl
cnMgZmV3ZXIgc3RhcnMgdG8gbW9yZSwgdGhlbgotICAgICAgICAvLyAgKiBwcmVmZXJzIHVzaW5n
IHN0YXJzIGZvciBsZXNzIG9mIHRoZSBtYXRjaCB0byBtb3JlLCB0aGVuCi0gICAgICAgIC8vICAq
IHByZWZlcnMgZmV3ZXIgZHluYW1pYyBzZWdtZW50cyB0byBtb3JlLCB0aGVuCi0gICAgICAgIC8v
ICAqIHByZWZlcnMgbW9yZSBzdGF0aWMgc2VnbWVudHMgdG8gbW9yZQotICAgICAgICBmdW5jdGlv
biBzb3J0U29sdXRpb25zKHN0YXRlcykgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRlcy5zb3J0
KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgICAgICAgICBpZiAoYS50eXBlcy5zdGFycyAhPT0g
Yi50eXBlcy5zdGFycykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS50eXBlcy5zdGFy
cyAtIGIudHlwZXMuc3RhcnM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKGEudHlwZXMuc3RhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZXMuc3Rh
dGljcyAhPT0gYi50eXBlcy5zdGF0aWNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYi50eXBlcy5zdGF0aWNzIC0gYS50eXBlcy5zdGF0aWNzOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGVzLmR5bmFtaWNzICE9PSBiLnR5cGVz
LmR5bmFtaWNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi50eXBlcy5keW5h
bWljcyAtIGEudHlwZXMuZHluYW1pY3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYS50eXBlcy5keW5hbWljcyAhPT0gYi50
eXBlcy5keW5hbWljcykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS50eXBlcy5keW5h
bWljcyAtIGIudHlwZXMuZHluYW1pY3M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChhLnR5cGVzLnN0YXRpY3MgIT09IGIudHlwZXMuc3RhdGljcykgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYi50eXBlcy5zdGF0aWNzIC0gYS50eXBlcy5zdGF0aWNzOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZWNvZ25pemVDaGFyKHN0YXRlcywg
Y2gpIHsKLSAgICAgICAgICAgIHZhciBuZXh0U3RhdGVzID0gW107Ci0KLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gc3RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAg
ICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1tpXTsKLQotICAgICAgICAgICAgICAgIG5leHRTdGF0
ZXMgPSBuZXh0U3RhdGVzLmNvbmNhdChzdGF0ZS5tYXRjaChjaCkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlczsKLSAgICAgICAgfQotCi0gICAgICAgIHZh
ciBvQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbihwcm90bykgewotICAgICAgICAg
ICAgZnVuY3Rpb24gRigpIHt9Ci0gICAgICAgICAgICBGLnByb3RvdHlwZSA9IHByb3RvOwotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBGKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24g
UmVjb2duaXplUmVzdWx0cyhxdWVyeVBhcmFtcykgewotICAgICAgICAgICAgdGhpcy5xdWVyeVBh
cmFtcyA9IHF1ZXJ5UGFyYW1zIHx8IHt9OwotICAgICAgICB9Ci0gICAgICAgIFJlY29nbml6ZVJl
c3VsdHMucHJvdG90eXBlID0gb0NyZWF0ZSh7Ci0gICAgICAgICAgICBzcGxpY2U6IEFycmF5LnBy
b3RvdHlwZS5zcGxpY2UsCi0gICAgICAgICAgICBzbGljZTogQXJyYXkucHJvdG90eXBlLnNsaWNl
LAotICAgICAgICAgICAgcHVzaDogQXJyYXkucHJvdG90eXBlLnB1c2gsCi0gICAgICAgICAgICBs
ZW5ndGg6IDAsCi0gICAgICAgICAgICBxdWVyeVBhcmFtczogbnVsbAotICAgICAgICB9KTsKLQot
ICAgICAgICBmdW5jdGlvbiBmaW5kSGFuZGxlcihzdGF0ZSwgcGF0aCwgcXVlcnlQYXJhbXMpIHsK
LSAgICAgICAgICAgIHZhciBoYW5kbGVycyA9IHN0YXRlLmhhbmRsZXJzLCByZWdleCA9IHN0YXRl
LnJlZ2V4OwotICAgICAgICAgICAgdmFyIGNhcHR1cmVzID0gcGF0aC5tYXRjaChyZWdleCksIGN1
cnJlbnRDYXB0dXJlID0gMTsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgUmVjb2duaXpl
UmVzdWx0cyhxdWVyeVBhcmFtcyk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
aGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGhhbmRs
ZXIgPSBoYW5kbGVyc1tpXSwgbmFtZXMgPSBoYW5kbGVyLm5hbWVzLCBwYXJhbXMgPSB7fTsKLQot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBtID0gbmFtZXMubGVuZ3RoOyBqIDwgbTsg
aisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tuYW1lc1tqXV0gPSBjYXB0dXJlc1tj
dXJyZW50Q2FwdHVyZSsrXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXN1bHQucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIuaGFuZGxl
ciwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCi0gICAgICAgICAgICAgICAg
ICAgIGlzRHluYW1pYzogISFuYW1lcy5sZW5ndGggCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBhZGRTZWdtZW50KGN1cnJlbnRTdGF0ZSwgc2VnbWVudCkgewotICAgICAg
ICAgICAgc2VnbWVudC5lYWNoQ2hhcihmdW5jdGlvbihjaCkgewotICAgICAgICAgICAgICAgIHZh
ciBzdGF0ZTsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRTdGF0ZS5w
dXQoY2gpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U3Rh
dGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgbWFpbiBpbnRlcmZhY2UKLQotICAgICAg
ICB2YXIgUm91dGVSZWNvZ25pemVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLnJv
b3RTdGF0ZSA9IG5ldyBTdGF0ZSgpOwotICAgICAgICAgICAgdGhpcy5uYW1lcyA9IHt9OwotICAg
ICAgICB9OwotCi0KLSAgICAgICAgUm91dGVSZWNvZ25pemVyLnByb3RvdHlwZSA9IHsKLSAgICAg
ICAgICAgIGFkZDogZnVuY3Rpb24ocm91dGVzLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMucm9vdFN0YXRlLCByZWdleCA9ICJeIiwKLSAgICAgICAg
ICAgICAgICB0eXBlcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljczogMCwKLSAgICAg
ICAgICAgICAgICAgICAgZHluYW1pY3M6IDAsCi0gICAgICAgICAgICAgICAgICAgIHN0YXJzOiAw
IAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBbXSwgYWxs
U2VnbWVudHMgPSBbXSwgbmFtZTsKLQotICAgICAgICAgICAgICAgIHZhciBpc0VtcHR5ID0gdHJ1
ZTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcm91dGVzLmxlbmd0aDsg
aSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGUgPSByb3V0ZXNbaV0s
IG5hbWVzID0gW107Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gcGFyc2Uo
cm91dGUucGF0aCwgbmFtZXMsIHR5cGVzKTsKLQotICAgICAgICAgICAgICAgICAgICBhbGxTZWdt
ZW50cyA9IGFsbFNlZ21lbnRzLmNvbmNhdChzZWdtZW50cyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaiA9IDAsIG0gPSBzZWdtZW50cy5sZW5ndGg7IGogPCBtOyBqKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbal07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBzaWxvblNlZ21lbnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSAiLyIgZm9yIHRoZSBuZXcgc2VnbWVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFN0YXRlLnB1
dCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRDaGFyczogIi8iIAotICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWdleCArPSAi
LyI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBzZWdtZW50IHRvIHRoZSBORkEgYW5kIHJlZ2V4Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBhZGRTZWdtZW50KGN1cnJlbnRTdGF0ZSwgc2VnbWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZWdleCArPSBzZWdtZW50LnJlZ2V4KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHJvdXRlLmhhbmRsZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lczogbmFtZXMgCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXJzLnB1c2goaGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFN0YXRlID0gY3VycmVudFN0YXRlLnB1dCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZENoYXJzOiAiLyIgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICByZWdleCArPSAiLyI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlLmhhbmRsZXJzID0gaGFuZGxlcnM7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFN0YXRlLnJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleCArICIkIik7Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlLnR5cGVzID0gdHlwZXM7Ci0KLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9
IG9wdGlvbnMgJiYgb3B0aW9ucy5hcykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWVz
W25hbWVdID0gewotICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IGFsbFNlZ21lbnRz
LAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzCi0gICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgaGFuZGxlcnNGb3I6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cm91dGUgPSB0aGlzLm5hbWVzW25hbWVdLCByZXN1bHQgPSBbXTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhlcmUg
aXMgbm8gcm91dGUgbmFtZWQgIiArIG5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcm91dGUuaGFuZGxlcnMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJvdXRlLmhhbmRsZXJz
W2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaGFzUm91dGU6IGZ1bmN0aW9uKG5hbWUp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLm5hbWVzW25hbWVdOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKG5hbWUsIHBhcmFtcykgewot
ICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IHRoaXMubmFtZXNbbmFtZV0sIG91dHB1dCA9ICIi
OwotICAgICAgICAgICAgICAgIGlmICghcm91dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyByb3V0ZSBuYW1lZCAiICsgbmFtZSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gcm91dGUuc2VnbWVu
dHM7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudCA9IHNlZ21l
bnRzW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBz
aWxvblNlZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICIvIjsKLSAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHNlZ21lbnQuZ2VuZXJhdGUocGFyYW1zKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LmNoYXJBdCgwKSAh
PT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICcvJyArIG91dHB1dDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5x
dWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gdGhpcy5nZW5lcmF0
ZVF1ZXJ5U3RyaW5nKHBhcmFtcy5xdWVyeVBhcmFtcywgcm91dGUuaGFuZGxlcnMpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBnZW5lcmF0ZVF1ZXJ5U3RyaW5nOiBmdW5jdGlvbihwYXJhbXMs
IGhhbmRsZXJzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhaXJzID0gW107Ci0gICAgICAgICAg
ICAgICAgdmFyIGtleXMgPSBbXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFy
YW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5cy5zb3J0
KCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBp
IDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyYW1zW2tleV07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9
IGtleTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaiA8IGw7
IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheVBhaXIgPSBrZXkg
KyAnW10nICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlW2pdKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKGFycmF5UGFpcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwYWlyICs9ICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHBhaXIpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHBhaXJzLmxlbmd0aCA9
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuICI/IiArIHBhaXJzLmpvaW4oIiYiKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHBhcnNlUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKHF1ZXJ5
U3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhaXJzID0gcXVlcnlTdHJpbmcuc3BsaXQo
IiYiKSwgcXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0g
cGFpcnNbaV0uc3BsaXQoJz0nKSwKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gZGVjb2RlVVJJ
Q29tcG9uZW50KHBhaXJbMF0pLAotICAgICAgICAgICAgICAgICAgICBrZXlMZW5ndGggPSBrZXku
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBpc0FycmF5ID0gZmFsc2UsCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFpci5sZW5ndGggPT09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ3RydWUnOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9IYW5kbGUgYXJy
YXlzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TGVuZ3RoID4gMiAmJiBrZXkuc2xp
Y2Uoa2V5TGVuZ3RoIC0yKSA9PT0gJ1tdJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzQXJyYXkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5z
bGljZSgwLCBrZXlMZW5ndGggLSAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXF1ZXJ5UGFyYW1zW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVl
cnlQYXJhbXNba2V5XSA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFp
clsxXSA/IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdKSA6ICcnOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBxdWVyeVBhcmFtc1trZXldLnB1c2godmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9
IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgcmVjb2duaXplOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHN0YXRlcyA9IFsgdGhpcy5yb290U3RhdGUgXSwKLSAgICAgICAgICAg
ICAgICBwYXRoTGVuLCBpLCBsLCBxdWVyeVN0YXJ0LCBxdWVyeVBhcmFtcyA9IHt9LAotICAgICAg
ICAgICAgICAgIGlzU2xhc2hEcm9wcGVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBwYXRo
ID0gZGVjb2RlVVJJKHBhdGgpOwotCi0gICAgICAgICAgICAgICAgcXVlcnlTdGFydCA9IHBhdGgu
aW5kZXhPZignPycpOwotICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0YXJ0ICE9PSAtMSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBwYXRoLnN1YnN0cihxdWVyeVN0
YXJ0ICsgMSwgcGF0aC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5z
dWJzdHIoMCwgcXVlcnlTdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0g
dGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBERUJVRyBHUk9VUCBwYXRoCi0KLSAgICAgICAgICAgICAgICBp
ZiAocGF0aC5jaGFyQXQoMCkgIT09ICIvIikgewotICAgICAgICAgICAgICAgICAgICBwYXRoID0g
Ii8iICsgcGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXRoTGVu
ID0gcGF0aC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgaWYgKHBhdGhMZW4gPiAxICYmIHBhdGgu
Y2hhckF0KHBhdGhMZW4gLSAxKSA9PT0gIi8iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGgg
PSBwYXRoLnN1YnN0cigwLCBwYXRoTGVuIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlzU2xh
c2hEcm9wcGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBsID0gcGF0aC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RhdGVzID0gcmVjb2duaXplQ2hhcihzdGF0ZXMsIHBhdGguY2hhckF0KGkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIEVORCBERUJVRyBHUk9VUAotCi0gICAgICAgICAgICAgICAg
dmFyIHNvbHV0aW9ucyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBzdGF0
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZXNb
aV0uaGFuZGxlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9ucy5wdXNoKHN0
YXRlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBzdGF0ZXMgPSBzb3J0U29sdXRpb25zKHNvbHV0aW9ucyk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgc3RhdGUgPSBzb2x1dGlvbnNbMF07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoc3RhdGUgJiYgc3RhdGUuaGFuZGxlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYg
YSB0cmFpbGluZyBzbGFzaCB3YXMgZHJvcHBlZCBhbmQgYSBzdGFyIHNlZ21lbnQgaXMgdGhlIGxh
c3Qgc2VnbWVudAotICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQsIHB1dCB0aGUgdHJh
aWxpbmcgc2xhc2ggYmFjawotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTbGFzaERyb3BwZWQg
JiYgc3RhdGUucmVnZXguc291cmNlLnNsaWNlKC01KSA9PT0gIiguKykkIikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aCA9IHBhdGggKyAiLyI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRIYW5kbGVyKHN0YXRlLCBwYXRoLCBxdWVy
eVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBSb3V0ZVJlY29nbml6ZXI7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gVGFyZ2V0KHBhdGgsIG1hdGNoZXIsIGRlbGVnYXRlKSB7Ci0gICAgICAg
ICAgICB0aGlzLnBhdGggPSBwYXRoOwotICAgICAgICAgICAgdGhpcy5tYXRjaGVyID0gbWF0Y2hl
cjsKLSAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFRhcmdldC5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICB0bzogZnVuY3Rpb24odGFy
Z2V0LCBjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRoaXMuZGVs
ZWdhdGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGUgJiYgZGVsZWdhdGUud2lsbEFk
ZFJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGRlbGVnYXRlLndpbGxBZGRS
b3V0ZSh0aGlzLm1hdGNoZXIudGFyZ2V0LCB0YXJnZXQpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlci5hZGQodGhpcy5wYXRoLCB0YXJnZXQpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
YWxsYmFjay5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiWW91IG11c3QgaGF2ZSBhbiBhcmd1bWVudCBpbiB0aGUgZnVuY3Rpb24gcGFzc2Vk
IHRvIGB0b2AiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0
aGlzLm1hdGNoZXIuYWRkQ2hpbGQodGhpcy5wYXRoLCB0YXJnZXQsIGNhbGxiYWNrLCB0aGlzLmRl
bGVnYXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gTWF0Y2hlcih0
YXJnZXQpIHsKLSAgICAgICAgICAgIHRoaXMucm91dGVzID0ge307Ci0gICAgICAgICAgICB0aGlz
LmNoaWxkcmVuID0ge307Ci0gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKLSAgICAg
ICAgfQotCi0gICAgICAgIE1hdGNoZXIucHJvdG90eXBlID0gewotICAgICAgICAgICAgYWRkOiBm
dW5jdGlvbihwYXRoLCBoYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXNbcGF0
aF0gPSBoYW5kbGVyOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYWRkQ2hpbGQ6IGZ1
bmN0aW9uKHBhdGgsIHRhcmdldCwgY2FsbGJhY2ssIGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG1hdGNoZXIgPSBuZXcgTWF0Y2hlcih0YXJnZXQpOwotICAgICAgICAgICAgICAgIHRo
aXMuY2hpbGRyZW5bcGF0aF0gPSBtYXRjaGVyOwotCi0gICAgICAgICAgICAgICAgdmFyIG1hdGNo
ID0gZ2VuZXJhdGVNYXRjaChwYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoZGVsZWdhdGUgJiYgZGVsZWdhdGUuY29udGV4dEVudGVyZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVsZWdhdGUuY29udGV4dEVudGVyZWQodGFyZ2V0LCBtYXRjaCk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FsbGJhY2sobWF0Y2gpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlTWF0Y2goc3Rh
cnRpbmdQYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKHBhdGgsIG5lc3RlZENhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZ1bGxQYXRo
ID0gc3RhcnRpbmdQYXRoICsgcGF0aDsKLQotICAgICAgICAgICAgICAgIGlmIChuZXN0ZWRDYWxs
YmFjaykgewotICAgICAgICAgICAgICAgICAgICBuZXN0ZWRDYWxsYmFjayhnZW5lcmF0ZU1hdGNo
KGZ1bGxQYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFyZ2V0KHN0YXJ0aW5nUGF0aCArIHBh
dGgsIG1hdGNoZXIsIGRlbGVnYXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRkUm91dGUocm91dGVBcnJheSwgcGF0
aCwgaGFuZGxlcikgewotICAgICAgICAgICAgdmFyIGxlbiA9IDA7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IHJvdXRlQXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgbGVuICs9IHJvdXRlQXJyYXlbaV0ucGF0aC5sZW5ndGg7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihsZW4pOwotICAgICAgICAgICAgdmFy
IHJvdXRlID0gewotICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsCi0gICAgICAgICAgICAgICAg
aGFuZGxlcjogaGFuZGxlciAKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICByb3V0ZUFycmF5
LnB1c2gocm91dGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZWFjaFJvdXRlKGJh
c2VSb3V0ZSwgbWF0Y2hlciwgY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAgICAgICAgICAgIHZhciBy
b3V0ZXMgPSBtYXRjaGVyLnJvdXRlczsKLQotICAgICAgICAgICAgZm9yICh2YXIgcGF0aCBpbiBy
b3V0ZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAocm91dGVzLmhhc093blByb3BlcnR5KHBhdGgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZUFycmF5ID0gYmFzZVJvdXRlLnNsaWNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFJvdXRlKHJvdXRlQXJyYXksIHBhdGgsIHJvdXRl
c1twYXRoXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXIuY2hpbGRyZW5bcGF0
aF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSb3V0ZShyb3V0ZUFycmF5LCBtYXRj
aGVyLmNoaWxkcmVuW3BhdGhdLCBjYWxsYmFjaywgYmluZGluZyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGJpbmRp
bmcsIHJvdXRlQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUm91dGVSZWNvZ25pemVyLnBy
b3RvdHlwZS5tYXAgPSBmdW5jdGlvbihjYWxsYmFjaywgYWRkUm91dGVDYWxsYmFjaykgewotICAg
ICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgTWF0Y2hlcigpOwotCi0gICAgICAgICAgICBjYWxs
YmFjayhnZW5lcmF0ZU1hdGNoKCIiLCBtYXRjaGVyLCB0aGlzLmRlbGVnYXRlKSk7Ci0KLSAgICAg
ICAgICAgIGVhY2hSb3V0ZShbXSwgbWF0Y2hlciwgZnVuY3Rpb24ocm91dGUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWRkUm91dGVDYWxsYmFjaykgewotICAgICAgICAgICAgICAgICAgICBhZGRS
b3V0ZUNhbGxiYWNrKHRoaXMsIHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmFkZChyb3V0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0KLSAgICBkZWZpbmUoInJv
dXRlci9oYW5kbGVyLWluZm8iLAotICAgIFsiLi91dGlscyIsICJyc3ZwL3Byb21pc2UiLCAiZXhw
b3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBiaW5kID0g
X19kZXBlbmRlbmN5MV9fLmJpbmQ7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTFf
Xy5tZXJnZTsKLSAgICAgICAgdmFyIHNlcmlhbGl6ZSA9IF9fZGVwZW5kZW5jeTFfXy5zZXJpYWxp
emU7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSBfX2RlcGVuZGVuY3kxX18ucHJvbWlzZUxh
YmVsOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwot
Ci0gICAgICAgIGZ1bmN0aW9uIEhhbmRsZXJJbmZvKF9wcm9wcykgewotICAgICAgICAgICAgdmFy
IHByb3BzID0gX3Byb3BzIHx8IHt9OwotICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcHMpOwot
ICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKHByb3BzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEhhbmRsZXJJbmZvLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIG5hbWU6IG51bGwsCi0gICAg
ICAgICAgICBoYW5kbGVyOiBudWxsLAotICAgICAgICAgICAgcGFyYW1zOiBudWxsLAotICAgICAg
ICAgICAgY29udGV4dDogbnVsbCwKLQotICAgICAgICAgICAgLy8gSW5qZWN0ZWQgYnkgdGhlIGhh
bmRsZXIgaW5mbyBmYWN0b3J5LgotICAgICAgICAgICAgZmFjdG9yeTogbnVsbCwKLQotICAgICAg
ICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7fSwKLQotICAgICAgICAgICAgbG9nOiBmdW5j
dGlvbihwYXlsb2FkLCBtZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubG9n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQubG9nKHRoaXMubmFtZSArICc6ICcgKyBt
ZXNzYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBwcm9taXNlTGFiZWw6IGZ1bmN0aW9uKGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHByb21pc2VMYWJlbCgiJyIgKyB0aGlzLm5hbWUgKyAiJyAiICsgbGFiZWwpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgZ2V0VW5yZXNvbHZlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzZXJp
YWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFtcyB8
fCB7fTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHNo
b3VsZENvbnRpbnVlLCBwYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoZWNrRm9yQWJv
cnQgPSBiaW5kKHRoaXMsIHRoaXMuY2hlY2tGb3JBYm9ydCwgc2hvdWxkQ29udGludWUpLAotICAg
ICAgICAgICAgICAgIGJlZm9yZU1vZGVsID0gYmluZCh0aGlzLCB0aGlzLnJ1bkJlZm9yZU1vZGVs
SG9vaywgcGF5bG9hZCksCi0gICAgICAgICAgICAgICAgbW9kZWwgPSBiaW5kKHRoaXMsIHRoaXMu
Z2V0TW9kZWwsIHBheWxvYWQpLAotICAgICAgICAgICAgICAgIGFmdGVyTW9kZWwgPSBiaW5kKHRo
aXMsIHRoaXMucnVuQWZ0ZXJNb2RlbEhvb2ssIHBheWxvYWQpLAotICAgICAgICAgICAgICAgIGJl
Y29tZVJlc29sdmVkID0gYmluZCh0aGlzLCB0aGlzLmJlY29tZVJlc29sdmVkLCBwYXlsb2FkKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkLCB0aGlz
LnByb21pc2VMYWJlbCgiU3RhcnQgaGFuZGxlciIpKQotICAgICAgICAgICAgICAgIC50aGVuKGNo
ZWNrRm9yQWJvcnQsIG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJDaGVjayBmb3IgYWJvcnQiKSkK
LSAgICAgICAgICAgICAgICAudGhlbihiZWZvcmVNb2RlbCwgbnVsbCwgdGhpcy5wcm9taXNlTGFi
ZWwoIkJlZm9yZSBtb2RlbCIpKQotICAgICAgICAgICAgICAgIC50aGVuKGNoZWNrRm9yQWJvcnQs
IG51bGwsIHRoaXMucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBhYm9ydGVkIGR1cmluZyAnYmVmb3Jl
TW9kZWwnIGhvb2siKSkKLSAgICAgICAgICAgICAgICAudGhlbihtb2RlbCwgbnVsbCwgdGhpcy5w
cm9taXNlTGFiZWwoIk1vZGVsIikpCi0gICAgICAgICAgICAgICAgLnRoZW4oY2hlY2tGb3JBYm9y
dCwgbnVsbCwgdGhpcy5wcm9taXNlTGFiZWwoIkNoZWNrIGlmIGFib3J0ZWQgaW4gJ21vZGVsJyBo
b29rIikpCi0gICAgICAgICAgICAgICAgLnRoZW4oYWZ0ZXJNb2RlbCwgbnVsbCwgdGhpcy5wcm9t
aXNlTGFiZWwoIkFmdGVyIG1vZGVsIikpCi0gICAgICAgICAgICAgICAgLnRoZW4oY2hlY2tGb3JB
Ym9ydCwgbnVsbCwgdGhpcy5wcm9taXNlTGFiZWwoIkNoZWNrIGlmIGFib3J0ZWQgaW4gJ2FmdGVy
TW9kZWwnIGhvb2siKSkKLSAgICAgICAgICAgICAgICAudGhlbihiZWNvbWVSZXNvbHZlZCwgbnVs
bCwgdGhpcy5wcm9taXNlTGFiZWwoIkJlY29tZSByZXNvbHZlZCIpKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHJ1bkJlZm9yZU1vZGVsSG9vazogZnVuY3Rpb24ocGF5bG9hZCkgewot
ICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnRyaWdnZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC50cmlnZ2VyKHRydWUsICd3aWxsUmVzb2x2ZU1vZGVsJywgcGF5bG9hZCwgdGhp
cy5oYW5kbGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMucnVuU2hhcmVkTW9kZWxIb29rKHBheWxvYWQsICdiZWZvcmVNb2RlbCcsIFtdKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJ1bkFmdGVyTW9kZWxIb29rOiBmdW5jdGlvbihwYXls
b2FkLCByZXNvbHZlZE1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3Rhc2ggdGhlIHJlc29s
dmVkIG1vZGVsIG9uIHRoZSBwYXlsb2FkLgotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMg
aXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIHN3YXAgb3V0Ci0gICAgICAgICAgICAgICAgLy8gdGhl
IHJlc29sdmVkIG1vZGVsIGluIGFmdGVyTW9kZWwuCi0gICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSB0aGlzLm5hbWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGFzaFJlc29sdmVkTW9kZWwocGF5
bG9hZCwgcmVzb2x2ZWRNb2RlbCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5T
aGFyZWRNb2RlbEhvb2socGF5bG9hZCwgJ2FmdGVyTW9kZWwnLCBbcmVzb2x2ZWRNb2RlbF0pCi0g
ICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IElnbm9yZSB0aGUgZnVsZmlsbGVkIHZhbHVlIHJldHVybmVkIGZyb20gYWZ0ZXJNb2RlbC4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBzdGFzaGVkIGluIHJlc29sdmVk
TW9kZWxzLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyBtaWdodCBoYXZlIGJlZW4gc3dh
cHBlZCBvdXQgaW4gYWZ0ZXJNb2RlbC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBheWxv
YWQucmVzb2x2ZWRNb2RlbHNbbmFtZV07Ci0gICAgICAgICAgICAgICAgfSwgbnVsbCwgdGhpcy5w
cm9taXNlTGFiZWwoIklnbm9yZSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgcmV0dXJuIG1vZGVsIHZh
bHVlIikpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcnVuU2hhcmVkTW9kZWxIb29r
OiBmdW5jdGlvbihwYXlsb2FkLCBob29rTmFtZSwgYXJncykgewotICAgICAgICAgICAgICAgIHRo
aXMubG9nKHBheWxvYWQsICJjYWxsaW5nICIgKyBob29rTmFtZSArICIgaG9vayIpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXJncy5wdXNoKHRoaXMucXVlcnlQYXJhbXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBhcmdzLnB1c2gocGF5bG9hZCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
ciA9IHRoaXMuaGFuZGxlcjsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaGFuZGxlclto
b29rTmFtZV0gJiYgaGFuZGxlcltob29rTmFtZV0uYXBwbHkoaGFuZGxlciwgYXJncyk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5pc1RyYW5zaXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCwgbnVsbCwgdGhpcy5wcm9t
aXNlTGFiZWwoIlJlc29sdmUgdmFsdWUgcmV0dXJuZWQgZnJvbSBvbmUgb2YgdGhlIG1vZGVsIGhv
b2tzIikpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gb3ZlcnJpZGRlbiBieSBz
dWJjbGFzc2VzCi0gICAgICAgICAgICBnZXRNb2RlbDogbnVsbCwKLQotICAgICAgICAgICAgY2hl
Y2tGb3JBYm9ydDogZnVuY3Rpb24oc2hvdWxkQ29udGludWUsIHByb21pc2VWYWx1ZSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hvdWxkQ29udGludWUoKSwgdGhp
cy5wcm9taXNlTGFiZWwoIkNoZWNrIGZvciBhYm9ydCIpKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHNob3VsZENvbnRpbnVlJ3Mg
cmVzb2x2ZSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFzcyBhbG9uZyB0aGUgb3Jp
Z2luYWwgdmFsdWUgcGFzc2VkIHRvIHRoaXMgZm4uCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBwcm9taXNlVmFsdWU7Ci0gICAgICAgICAgICAgICAgfSwgbnVsbCwgdGhpcy5wcm9taXNlTGFi
ZWwoIklnbm9yZSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgY29udGludWUiKSk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBzdGFzaFJlc29sdmVkTW9kZWw6IGZ1bmN0aW9uKHBheWxvYWQs
IHJlc29sdmVkTW9kZWwpIHsKLSAgICAgICAgICAgICAgICBwYXlsb2FkLnJlc29sdmVkTW9kZWxz
ID0gcGF5bG9hZC5yZXNvbHZlZE1vZGVscyB8fCB7fTsKLSAgICAgICAgICAgICAgICBwYXlsb2Fk
LnJlc29sdmVkTW9kZWxzW3RoaXMubmFtZV0gPSByZXNvbHZlZE1vZGVsOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgYmVjb21lUmVzb2x2ZWQ6IGZ1bmN0aW9uKHBheWxvYWQsIHJlc29s
dmVkQ29udGV4dCkgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnNlcmlhbGl6
ZShyZXNvbHZlZENvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zdGFzaFJlc29sdmVkTW9kZWwocGF5bG9hZCwgcmVzb2x2
ZWRDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5wYXJhbXMgPSBwYXlsb2Fk
LnBhcmFtcyB8fCB7fTsKLSAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5wYXJhbXNbdGhpcy5u
YW1lXSA9IHBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5mYWN0b3J5KCdyZXNvbHZlZCcsIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dDogcmVzb2x2ZWRDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlciwKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zOiBwYXJhbXMKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHNob3VsZFN1cGVyY2VkZTogZnVuY3Rpb24ob3RoZXIpIHsKLSAg
ICAgICAgICAgICAgICAvLyBQcmVmZXIgdGhpcyBuZXdlciBoYW5kbGVySW5mbyBvdmVyIGBvdGhl
cmAgaWY6Ci0gICAgICAgICAgICAgICAgLy8gMSkgVGhlIG90aGVyIG9uZSBkb2Vzbid0IGV4aXN0
Ci0gICAgICAgICAgICAgICAgLy8gMikgVGhlIG5hbWVzIGRvbid0IG1hdGNoCi0gICAgICAgICAg
ICAgICAgLy8gMykgVGhpcyBoYW5kbGVyIGhhcyBhIGNvbnRleHQgdGhhdCBkb2Vzbid0IG1hdGNo
Ci0gICAgICAgICAgICAgICAgLy8gICAgdGhlIG90aGVyIG9uZSAob3IgdGhlIG90aGVyIG9uZSBk
b2Vzbid0IGhhdmUgb25lKS4KLSAgICAgICAgICAgICAgICAvLyA0KSBUaGlzIGhhbmRsZXIgaGFz
IHBhcmFtZXRlcnMgdGhhdCBkb24ndCBtYXRjaCB0aGUgb3RoZXIuCi0gICAgICAgICAgICAgICAg
aWYgKCFvdGhlcikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29udGV4dHNNYXRjaCA9IChvdGhlci5j
b250ZXh0ID09PSB0aGlzLmNvbnRleHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5u
YW1lICE9PSB0aGlzLm5hbWUgfHwKLSAgICAgICAgICAgICAgICAodGhpcy5oYXNPd25Qcm9wZXJ0
eSgnY29udGV4dCcpICYmICFjb250ZXh0c01hdGNoKSB8fAotICAgICAgICAgICAgICAgICh0aGlz
Lmhhc093blByb3BlcnR5KCdwYXJhbXMnKSAmJiAhcGFyYW1zTWF0Y2godGhpcy5wYXJhbXMsIG90
aGVyLnBhcmFtcykpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0
aW9uIHBhcmFtc01hdGNoKGEsIGIpIHsKLSAgICAgICAgICAgIGlmICgoIWEpIF4gKCFiKSkgewot
ICAgICAgICAgICAgICAgIC8vIE9ubHkgb25lIGlzIG51bGwuCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWEpIHsKLSAgICAg
ICAgICAgICAgICAvLyBCb3RoIG11c3QgYmUgbnVsbC4KLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBhc3N1bWVz
IHRoYXQgYm90aCBwYXJhbXMgaGF2ZSB0aGUgc2FtZQotICAgICAgICAgICAgLy8gbnVtYmVyIG9m
IGtleXMsIGJ1dCBzaW5jZSB3ZSdyZSBjb21wYXJpbmcgdGhlCi0gICAgICAgICAgICAvLyBzYW1l
IGhhbmRsZXJzLCB0aGV5IHNob3VsZC4KLSAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYSkgewot
ICAgICAgICAgICAgICAgIGlmIChhLmhhc093blByb3BlcnR5KGspICYmIGFba10gIT09IGJba10p
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEhhbmRsZXJJbmZvOwotICAgIH0pOwotICAg
IGRlZmluZSgicm91dGVyL2hhbmRsZXItaW5mby9mYWN0b3J5IiwKLSAgICBbInJvdXRlci9oYW5k
bGVyLWluZm8vcmVzb2x2ZWQtaGFuZGxlci1pbmZvIiwgInJvdXRlci9oYW5kbGVyLWluZm8vdW5y
ZXNvbHZlZC1oYW5kbGVyLWluZm8tYnktb2JqZWN0IiwgInJvdXRlci9oYW5kbGVyLWluZm8vdW5y
ZXNvbHZlZC1oYW5kbGVyLWluZm8tYnktcGFyYW0iLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9u
KF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhw
b3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIFJlc29sdmVkSGFu
ZGxlckluZm8gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFVucmVz
b2x2ZWRIYW5kbGVySW5mb0J5T2JqZWN0ID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBVbnJlc29sdmVkSGFuZGxlckluZm9CeVBhcmFtID0gX19kZXBlbmRlbmN5M19f
WyJkZWZhdWx0Il07Ci0KLSAgICAgICAgaGFuZGxlckluZm9GYWN0b3J5LmtsYXNzZXMgPSB7Ci0g
ICAgICAgICAgICByZXNvbHZlZDogUmVzb2x2ZWRIYW5kbGVySW5mbywKLSAgICAgICAgICAgIHBh
cmFtOiBVbnJlc29sdmVkSGFuZGxlckluZm9CeVBhcmFtLAotICAgICAgICAgICAgb2JqZWN0OiBV
bnJlc29sdmVkSGFuZGxlckluZm9CeU9iamVjdAotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0
aW9uIGhhbmRsZXJJbmZvRmFjdG9yeShuYW1lLCBwcm9wcykgewotICAgICAgICAgICAgdmFyIEN0
b3IgPSBoYW5kbGVySW5mb0ZhY3Rvcnkua2xhc3Nlc1tuYW1lXSwKLSAgICAgICAgICAgIGhhbmRs
ZXJJbmZvID0gbmV3IEN0b3IocHJvcHMgfHwge30pOwotICAgICAgICAgICAgaGFuZGxlckluZm8u
ZmFjdG9yeSA9IGhhbmRsZXJJbmZvRmFjdG9yeTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVy
SW5mbzsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBoYW5k
bGVySW5mb0ZhY3Rvcnk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvaGFuZGxlci1pbmZv
L3Jlc29sdmVkLWhhbmRsZXItaW5mbyIsCi0gICAgWyIuLi9oYW5kbGVyLWluZm8iLCAicm91dGVy
L3V0aWxzIiwgInJzdnAvcHJvbWlzZSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgSGFuZGxlckluZm8gPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHN1YmNsYXNzID0gX19kZXBlbmRl
bmN5Ml9fLnN1YmNsYXNzOwotICAgICAgICB2YXIgcHJvbWlzZUxhYmVsID0gX19kZXBlbmRlbmN5
Ml9fLnByb21pc2VMYWJlbDsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kzX19b
ImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgUmVzb2x2ZWRIYW5kbGVySW5mbyA9IHN1YmNsYXNz
KEhhbmRsZXJJbmZvLCB7Ci0gICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbihzaG91bGRDb250
aW51ZSwgcGF5bG9hZCkgewotICAgICAgICAgICAgICAgIC8vIEEgUmVzb2x2ZWRIYW5kbGVySW5m
byBqdXN0IHJlc29sdmVkIHdpdGggaXRzZWxmLgotICAgICAgICAgICAgICAgIGlmIChwYXlsb2Fk
ICYmIHBheWxvYWQucmVzb2x2ZWRNb2RlbHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcGF5bG9h
ZC5yZXNvbHZlZE1vZGVsc1t0aGlzLm5hbWVdID0gdGhpcy5jb250ZXh0OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMsIHRoaXMu
cHJvbWlzZUxhYmVsKCJSZXNvbHZlIikpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
Z2V0VW5yZXNvbHZlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZmFjdG9yeSgncGFyYW0nLCB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLAotICAgICAgICAgICAg
ICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1zCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlCi0gICAgICAgIH0pOwotCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBSZXNvbHZlZEhhbmRsZXJJbmZvOwotICAg
IH0pOwotICAgIGRlZmluZSgicm91dGVyL2hhbmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXIt
aW5mby1ieS1vYmplY3QiLAotICAgIFsiLi4vaGFuZGxlci1pbmZvIiwgInJvdXRlci91dGlscyIs
ICJyc3ZwL3Byb21pc2UiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEhhbmRsZXJJbmZvID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfXy5tZXJn
ZTsKLSAgICAgICAgdmFyIHN1YmNsYXNzID0gX19kZXBlbmRlbmN5Ml9fLnN1YmNsYXNzOwotICAg
ICAgICB2YXIgcHJvbWlzZUxhYmVsID0gX19kZXBlbmRlbmN5Ml9fLnByb21pc2VMYWJlbDsKLSAg
ICAgICAgdmFyIGlzUGFyYW0gPSBfX2RlcGVuZGVuY3kyX18uaXNQYXJhbTsKLSAgICAgICAgdmFy
IFByb21pc2UgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgVW5y
ZXNvbHZlZEhhbmRsZXJJbmZvQnlPYmplY3QgPSBzdWJjbGFzcyhIYW5kbGVySW5mbywgewotICAg
ICAgICAgICAgZ2V0TW9kZWw6IGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLmxvZyhwYXlsb2FkLCB0aGlzLm5hbWUgKyAiOiByZXNvbHZpbmcgcHJvdmlkZWQgbW9kZWwi
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29udGV4dCk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihwcm9w
cykgewotICAgICAgICAgICAgICAgIHRoaXMubmFtZXMgPSBwcm9wcy5uYW1lcyB8fCBbXTsKLSAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBwcm9wcy5jb250ZXh0OwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgICAgICAgU2VyaWFsaXplcyBhIGhhbmRsZXIgdXNpbmcgaXRzIGN1c3RvbSBg
c2VyaWFsaXplYCBtZXRob2Qgb3IKLSAgICAgICAgICAgICAgICAgICAgYnkgYSBkZWZhdWx0IHRo
YXQgbG9va3MgdXAgdGhlIGV4cGVjdGVkIHByb3BlcnR5IG5hbWUgZnJvbQotICAgICAgICAgICAg
ICAgICAgICB0aGUgZHluYW1pYyBzZWdtZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBtb2RlbCB0aGUgbW9kZWwgdG8gYmUgc2VyaWFsaXplZCBmb3IgdGhpcyBoYW5k
bGVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlv
bihfbW9kZWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBfbW9kZWwgfHwgdGhpcy5j
b250ZXh0LAotICAgICAgICAgICAgICAgIG5hbWVzID0gdGhpcy5uYW1lcywKLSAgICAgICAgICAg
ICAgICBoYW5kbGVyID0gdGhpcy5oYW5kbGVyOwotCi0gICAgICAgICAgICAgICAgdmFyIG9iamVj
dCA9IHt9OwotICAgICAgICAgICAgICAgIGlmIChpc1BhcmFtKG1vZGVsKSkgewotICAgICAgICAg
ICAgICAgICAgICBvYmplY3RbbmFtZXNbMF1dID0gbW9kZWw7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
VXNlIGN1c3RvbSBzZXJpYWxpemUgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIGlmICho
YW5kbGVyLnNlcmlhbGl6ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlci5z
ZXJpYWxpemUobW9kZWwsIG5hbWVzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAobmFtZXMubGVuZ3RoICE9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5hbWVz
WzBdOwotCi0gICAgICAgICAgICAgICAgaWYgKC9faWQkLy50ZXN0KG5hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG9iamVjdFtuYW1lXSA9IG1vZGVsLmlkOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdFtuYW1lXSA9IG1vZGVsOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAg
fQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gVW5yZXNv
bHZlZEhhbmRsZXJJbmZvQnlPYmplY3Q7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvaGFu
ZGxlci1pbmZvL3VucmVzb2x2ZWQtaGFuZGxlci1pbmZvLWJ5LXBhcmFtIiwKLSAgICBbIi4uL2hh
bmRsZXItaW5mbyIsICJyb3V0ZXIvdXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBIYW5kbGVySW5mbyA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3kyX18ubWVyZ2U7Ci0g
ICAgICAgIHZhciBzdWJjbGFzcyA9IF9fZGVwZW5kZW5jeTJfXy5zdWJjbGFzczsKLSAgICAgICAg
dmFyIHByb21pc2VMYWJlbCA9IF9fZGVwZW5kZW5jeTJfXy5wcm9taXNlTGFiZWw7Ci0KLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGJ5IFVSTCB0cmFuc2l0aW9ucyBhbmQgbm9uLWR5bmFtaWMgcm91dGUg
c2VnbWVudHMgaW4gbmFtZWQgVHJhbnNpdGlvbnMuCi0gICAgICAgIHZhciBVbnJlc29sdmVkSGFu
ZGxlckluZm9CeVBhcmFtID0gc3ViY2xhc3MgKEhhbmRsZXJJbmZvLCB7Ci0gICAgICAgICAgICBp
bml0aWFsaXplOiBmdW5jdGlvbihwcm9wcykgewotICAgICAgICAgICAgICAgIHRoaXMucGFyYW1z
ID0gcHJvcHMucGFyYW1zIHx8IHt9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZ2V0
TW9kZWw6IGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgICAgICAgICB2YXIgZnVsbFBhcmFt
cyA9IHRoaXMucGFyYW1zOwotICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQu
cXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVsbFBhcmFtcyA9IHt9OwotICAg
ICAgICAgICAgICAgICAgICBtZXJnZShmdWxsUGFyYW1zLCB0aGlzLnBhcmFtcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZ1bGxQYXJhbXMucXVlcnlQYXJhbXMgPSBwYXlsb2FkLnF1ZXJ5UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBob29rTmFtZSA9IHR5
cGVvZiB0aGlzLmhhbmRsZXIuZGVzZXJpYWxpemUgPT09ICdmdW5jdGlvbicgPwotICAgICAgICAg
ICAgICAgICdkZXNlcmlhbGl6ZScgOiAnbW9kZWwnOwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKHBheWxvYWQsIGhvb2tOYW1lLCBbZnVsbFBhcmFtc10p
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlQYXJhbTsKLSAgICB9KTsKLSAgICBkZWZp
bmUoInJvdXRlci9yb3V0ZXIiLAotICAgIFsicm91dGUtcmVjb2duaXplciIsICJyc3ZwL3Byb21p
c2UiLCAiLi91dGlscyIsICIuL3RyYW5zaXRpb24tc3RhdGUiLCAiLi90cmFuc2l0aW9uIiwgIi4v
dHJhbnNpdGlvbi1pbnRlbnQvbmFtZWQtdHJhbnNpdGlvbi1pbnRlbnQiLCAiLi90cmFuc2l0aW9u
LWludGVudC91cmwtdHJhbnNpdGlvbi1pbnRlbnQiLCAiLi9oYW5kbGVyLWluZm8iLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVu
Y3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9ydHNfXykgewot
ICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBSb3V0ZVJlY29nbml6ZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVu
Y3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHRyaWdnZXIgPSBfX2RlcGVuZGVuY3kzX18u
dHJpZ2dlcjsKLSAgICAgICAgdmFyIGxvZyA9IF9fZGVwZW5kZW5jeTNfXy5sb2c7Ci0gICAgICAg
IHZhciBzbGljZSA9IF9fZGVwZW5kZW5jeTNfXy5zbGljZTsKLSAgICAgICAgdmFyIGZvckVhY2gg
PSBfX2RlcGVuZGVuY3kzX18uZm9yRWFjaDsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRl
bmN5M19fLm1lcmdlOwotICAgICAgICB2YXIgc2VyaWFsaXplID0gX19kZXBlbmRlbmN5M19fLnNl
cmlhbGl6ZTsKLSAgICAgICAgdmFyIGV4dHJhY3RRdWVyeVBhcmFtcyA9IF9fZGVwZW5kZW5jeTNf
Xy5leHRyYWN0UXVlcnlQYXJhbXM7Ci0gICAgICAgIHZhciBnZXRDaGFuZ2VsaXN0ID0gX19kZXBl
bmRlbmN5M19fLmdldENoYW5nZWxpc3Q7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSBfX2Rl
cGVuZGVuY3kzX18ucHJvbWlzZUxhYmVsOwotICAgICAgICB2YXIgVHJhbnNpdGlvblN0YXRlID0g
X19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBsb2dBYm9ydCA9IF9fZGVw
ZW5kZW5jeTVfXy5sb2dBYm9ydDsKLSAgICAgICAgdmFyIFRyYW5zaXRpb24gPSBfX2RlcGVuZGVu
Y3k1X18uVHJhbnNpdGlvbjsKLSAgICAgICAgdmFyIFRyYW5zaXRpb25BYm9ydGVkID0gX19kZXBl
bmRlbmN5NV9fLlRyYW5zaXRpb25BYm9ydGVkOwotICAgICAgICB2YXIgTmFtZWRUcmFuc2l0aW9u
SW50ZW50ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBVUkxUcmFu
c2l0aW9uSW50ZW50ID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBS
ZXNvbHZlZEhhbmRsZXJJbmZvID0gX19kZXBlbmRlbmN5OF9fLlJlc29sdmVkSGFuZGxlckluZm87
Ci0KLSAgICAgICAgdmFyIHBvcCA9IEFycmF5LnByb3RvdHlwZS5wb3A7Ci0KLSAgICAgICAgZnVu
Y3Rpb24gUm91dGVyKCkgewotICAgICAgICAgICAgdGhpcy5yZWNvZ25pemVyID0gbmV3IFJvdXRl
UmVjb2duaXplcigpOwotICAgICAgICAgICAgdGhpcy5yZXNldCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUm91dGVyLnByb3RvdHlwZSA9IHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFRoZSBtYWluIGVudHJ5IHBvaW50IGludG8gdGhlIHJvdXRlci4gVGhlIEFQSSBp
cyBlc3NlbnRpYWxseQotICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBhcyB0aGUgYG1hcGAg
bWV0aG9kIGluIGByb3V0ZS1yZWNvZ25pemVyYC4KLQotICAgICAgICAgICAgICAgICAgICBUaGlz
IG1ldGhvZCBleHRyYWN0cyB0aGUgU3RyaW5nIGhhbmRsZXIgYXQgdGhlIGxhc3QgYC50bygpYAot
ICAgICAgICAgICAgICAgICAgICBjYWxsIGFuZCB1c2VzIGl0IGFzIHRoZSBuYW1lIG9mIHRoZSB3
aG9sZSByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxs
YmFjawotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1hcDogZnVuY3Rpb24oY2Fs
bGJhY2spIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlY29nbml6ZXIuZGVsZWdhdGUgPSB0aGlz
LmRlbGVnYXRlOwotCi0gICAgICAgICAgICAgICAgdGhpcy5yZWNvZ25pemVyLm1hcChjYWxsYmFj
aywgZnVuY3Rpb24ocmVjb2duaXplciwgcm91dGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSByb3V0ZXMubGVuZ3RoIC0gMSwgcHJvY2VlZCA9IHRydWU7IGkgPj0gMCAmJiBw
cm9jZWVkOyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IHJvdXRl
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXIuYWRkKHJvdXRlcywgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzOiByb3V0ZS5oYW5kbGVyIAotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZWVkID0gcm91
dGUucGF0aCA9PT0gJy8nIHx8IHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLmhhbmRsZXIuc2xp
Y2UoLTYpID09PSAnLmluZGV4JzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaGFzUm91dGU6IGZ1bmN0aW9u
KHJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjb2duaXplci5oYXNSb3V0
ZShyb3V0ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBxdWVyeVBhcmFtc1RyYW5z
aXRpb246IGZ1bmN0aW9uKGNoYW5nZWxpc3QsIHdhc1RyYW5zaXRpb25pbmcsIG9sZFN0YXRlLCBu
ZXdTdGF0ZSkgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzOwotCi0gICAgICAg
ICAgICAgICAgZmlyZVF1ZXJ5UGFyYW1EaWRDaGFuZ2UodGhpcywgbmV3U3RhdGUsIGNoYW5nZWxp
c3QpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF3YXNUcmFuc2l0aW9uaW5nICYmIHRoaXMuYWN0
aXZlVHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAvLyBPbmUgb2YgdGhlIGhhbmRs
ZXJzIGluIHF1ZXJ5UGFyYW1zRGlkQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhdXNl
ZCBhIHRyYW5zaXRpb24uIEp1c3QgcmV0dXJuIHRoYXQgdHJhbnNpdGlvbi4KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVHJhbnNpdGlvbjsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBSdW5uaW5nIHF1ZXJ5UGFyYW1zRGlkQ2hh
bmdlIGRpZG4ndCBjaGFuZ2UgYW55dGhpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qg
dXBkYXRlIHF1ZXJ5IHBhcmFtcyBhbmQgYmUgb24gb3VyIHdheS4KLQotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhIG5vb3AgdHJhbnNpdGlvbiB0aGF0IHdpbGwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBhIFVSTCB1cGRhdGUgYXQgdGhlIGVuZC4gVGhp
cyBnaXZlcwotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdXNlciB0aGUgYWJpbGl0eSB0byBz
ZXQgdGhlIHVybCB1cGRhdGUKLSAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kIChkZWZhdWx0
IGlzIHJlcGxhY2VTdGF0ZSkuCi0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdUcmFuc2l0aW9u
ID0gbmV3IFRyYW5zaXRpb24odGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1RyYW5zaXRp
b24ucXVlcnlQYXJhbXNPbmx5ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBvbGRTdGF0
ZS5xdWVyeVBhcmFtcyA9IGZpbmFsaXplUXVlcnlQYXJhbUNoYW5nZSh0aGlzLCBuZXdTdGF0ZS5o
YW5kbGVySW5mb3MsIG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCBuZXdUcmFuc2l0aW9uKTsKLQotICAg
ICAgICAgICAgICAgICAgICBuZXdUcmFuc2l0aW9uLnByb21pc2UgPSBuZXdUcmFuc2l0aW9uLnBy
b21pc2UudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZVVSTChuZXdUcmFuc2l0aW9uLCBvbGRTdGF0ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocm91dGVyLmRpZFRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb3V0ZXIuZGlkVHJhbnNpdGlvbihyb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvcyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCBwcm9taXNlTGFiZWwoIlRy
YW5zaXRpb24gY29tcGxldGUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdUcmFu
c2l0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8vIE5PVEU6IHRoaXMgZG9lc24ndCByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dCBoZXJlCi0gICAg
ICAgICAgICAvLyBpdCBzaGFsbCByZW1haW4gdW50aWwgb3VyIEVTNiB0cmFuc3BpbGVyIGNhbgot
ICAgICAgICAgICAgLy8gaGFuZGxlIGN5Y2xpY2FsIGRlcHMuCi0gICAgICAgICAgICB0cmFuc2l0
aW9uQnlJbnRlbnQ6IGZ1bmN0aW9uKGludGVudCwgaXNJbnRlcm1lZGlhdGUpIHsKLQotICAgICAg
ICAgICAgICAgIHZhciB3YXNUcmFuc2l0aW9uaW5nID0gISF0aGlzLmFjdGl2ZVRyYW5zaXRpb247
Ci0gICAgICAgICAgICAgICAgdmFyIG9sZFN0YXRlID0gd2FzVHJhbnNpdGlvbmluZyA/IHRoaXMu
YWN0aXZlVHJhbnNpdGlvbi5zdGF0ZSA6IHRoaXMuc3RhdGU7Ci0gICAgICAgICAgICAgICAgdmFy
IG5ld1RyYW5zaXRpb247Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlciA9IHRoaXM7Ci0KLSAg
ICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBp
bnRlbnQuYXBwbHlUb1N0YXRlKG9sZFN0YXRlLCB0aGlzLnJlY29nbml6ZXIsIHRoaXMuZ2V0SGFu
ZGxlciwgaXNJbnRlcm1lZGlhdGUpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlQYXJh
bUNoYW5nZWxpc3QgPSBnZXRDaGFuZ2VsaXN0KG9sZFN0YXRlLnF1ZXJ5UGFyYW1zLCBuZXdTdGF0
ZS5xdWVyeVBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJJbmZvc0Vx
dWFsKG5ld1N0YXRlLmhhbmRsZXJJbmZvcywgb2xkU3RhdGUuaGFuZGxlckluZm9zKSkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgdHJhbnNpdGlvbi4gU2Vl
IGlmIHF1ZXJ5IHBhcmFtcyBjaGFuZ2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1
ZXJ5UGFyYW1DaGFuZ2VsaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VHJh
bnNpdGlvbiA9IHRoaXMucXVlcnlQYXJhbXNUcmFuc2l0aW9uKHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0
LCB3YXNUcmFuc2l0aW9uaW5nLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChuZXdUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm8tb3AuIE5vIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRyYW5zaXRpb24uCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyYW5zaXRpb24odGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnRlcm1lZGlhdGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwQ29udGV4dHModGhpcywgbmV3U3RhdGUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHRyYW5zaXRpb24gdG8gdGhlIGRl
c3RpbmF0aW9uIHJvdXRlLgotICAgICAgICAgICAgICAgICAgICBuZXdUcmFuc2l0aW9uID0gbmV3
IFRyYW5zaXRpb24odGhpcywgaW50ZW50LCBuZXdTdGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gQWJvcnQgYW5kIHVzdXJwIGFueSBwcmV2aW91c2x5IGFjdGl2ZSB0cmFuc2l0aW9uLgot
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zaXRpb24uYWJvcnQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVRyYW5zaXRpb24g
PSBuZXdUcmFuc2l0aW9uOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gcHJv
bWlzZXMgYnkgZGVmYXVsdCByZXNvbHZlIHdpdGggcmVzb2x2ZWQgc3RhdGUuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBvdXIgcHVycG9zZXMsIHN3YXAgb3V0IHRoZSBwcm9taXNlIHRvIHJl
c29sdmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHRyYW5zaXRpb24gaGFzIGJl
ZW4gZmluYWxpemVkLgotICAgICAgICAgICAgICAgICAgICBuZXdUcmFuc2l0aW9uLnByb21pc2Ug
PSBuZXdUcmFuc2l0aW9uLnByb21pc2UudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZVRyYW5zaXRpb24obmV3VHJhbnNpdGlvbiwg
cmVzdWx0LnN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgcHJvbWlzZUxhYmVs
KCJTZXR0bGUgdHJhbnNpdGlvbiBwcm9taXNlIHdoZW4gdHJhbnNpdGlvbiBpcyBmaW5hbGl6ZWQi
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3YXNUcmFuc2l0aW9uaW5nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBub3RpZnlFeGlzdGluZ0hhbmRsZXJzKHRoaXMsIG5ld1N0YXRl
LCBuZXdUcmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGZpcmVRdWVyeVBhcmFtRGlkQ2hhbmdlKHRoaXMsIG5ld1N0YXRlLCBxdWVyeVBhcmFt
Q2hhbmdlbGlzdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RyYW5zaXRpb247
Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IFRyYW5zaXRpb24odGhpcywgaW50ZW50LCBudWxsLCBlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQ2xlYXJzIHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgcm91dGUgaGFuZGxlcnMgYW5kIHRyaWdn
ZXJzIGV4aXQKLSAgICAgICAgICAgICAgICAgICAgb24gZWFjaCBvZiB0aGVtIHN0YXJ0aW5nIGF0
IHRoZSBsZWFmIGFuZCB0cmF2ZXJzaW5nIHVwIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAg
aXRzIGFuY2VzdG9ycy4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXNldDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yRWFjaCh0aGlzLnN0YXRlLmhhbmRsZXJJbmZvcywgZnVuY3Rpb24oaGFu
ZGxlckluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxl
ckluZm8uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLmV4aXQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmV4aXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBUcmFuc2l0aW9uU3RhdGUo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3MgPSBudWxsOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgYWN0aXZlVHJhbnNpdGlvbjogbnVsbCwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlcklu
Zm8uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGZvciBoYW5k
bGluZyBhIGNoYW5nZSB0byB0aGUgVVJMICh1c3VhbGx5Ci0gICAgICAgICAgICAgICAgICAgIHZp
YSB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b24pLgotCi0gICAgICAgICAgICAgICAgICAgIFJl
dHVybnMgYW4gQXJyYXkgb2YgaGFuZGxlcnMgYW5kIHRoZSBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQK
LSAgICAgICAgICAgICAgICAgICAgd2l0aCB0aG9zZSBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwgYSBVUkwgdG8gcHJvY2VzcwotCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBhbiBBcnJheSBvZiBgW2hhbmRsZXIsIHBhcmFt
ZXRlcl1gIHR1cGxlcwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGhhbmRsZVVS
TDogZnVuY3Rpb24odXJsKSB7Ci0gICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBhIFVSTC1iYXNl
ZCB0cmFuc2l0aW9uLCBidXQgZG9uJ3QgY2hhbmdlCi0gICAgICAgICAgICAgICAgLy8gdGhlIFVS
TCBhZnRlcndhcmQsIHNpbmNlIGl0IGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICAgICAgICAgICAg
dmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHVy
bC5jaGFyQXQoMCkgIT09ICcvJykgewotICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gJy8n
ICsgdXJsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBkb1Ry
YW5zaXRpb24odGhpcywgYXJncykubWV0aG9kKG51bGwpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEhvb2sgcG9pbnQgZm9yIHVwZGF0aW5n
IHRoZSBVUkwuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHVybCBhIFVS
TCB0byB1cGRhdGUgdG8KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB1cGRhdGVV
Ukw6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidXBkYXRl
VVJMIGlzIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEhvb2sgcG9pbnQgZm9yIHJlcGxhY2luZyB0aGUgY3Vy
cmVudCBVUkwsIGkuZS4gd2l0aCByZXBsYWNlU3RhdGUKLQotICAgICAgICAgICAgICAgICAgICBC
eSBkZWZhdWx0IHRoaXMgYmVoYXZlcyB0aGUgc2FtZSBhcyBgdXBkYXRlVVJMYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwgYSBVUkwgdG8gdXBkYXRlIHRvCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVwbGFjZVVSTDogZnVuY3Rpb24odXJsKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVVUkwodXJsKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uIGludG8gdGhl
IHNwZWNpZmllZCBuYW1lZCByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3Nh
cnksIHRyaWdnZXIgdGhlIGV4aXQgY2FsbGJhY2sgb24gYW55IGhhbmRsZXJzCi0gICAgICAgICAg
ICAgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IHJv
dXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1l
IG9mIHRoZSByb3V0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRyYW5zaXRp
b25UbzogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBkb1RyYW5zaXRp
b24odGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGludGVy
bWVkaWF0ZVRyYW5zaXRpb25UbzogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIGRv
VHJhbnNpdGlvbih0aGlzLCBhcmd1bWVudHMsIHRydWUpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24ocGl2b3RIYW5kbGVyKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN0YXRlID0gdGhpcy5hY3RpdmVUcmFuc2l0aW9uID8gdGhpcy5hY3RpdmVUcmFuc2l0
aW9uLnN0YXRlIDogdGhpcy5zdGF0ZTsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluZm9z
ID0gc3RhdGUuaGFuZGxlckluZm9zOwotICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxlbmd0
aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9
IGhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2hhbmRsZXJJbmZv
Lm5hbWVdID0gaGFuZGxlckluZm8ucGFyYW1zIHx8IHt9OwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGxvZyh0aGlzLCAiU3RhcnRpbmcgYSByZWZyZXNoIHRyYW5zaXRpb24i
KTsKLSAgICAgICAgICAgICAgICB2YXIgaW50ZW50ID0gbmV3IE5hbWVkVHJhbnNpdGlvbkludGVu
dCh7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3Mu
bGVuZ3RoIC0gMV0ubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgcGl2b3RIYW5kbGVyOiBwaXZv
dEhhbmRsZXIgfHwgaGFuZGxlckluZm9zWzBdLmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHRzOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBjb2xsZWN0IGNvbnRl
eHRzLi4uPwotICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5fY2hhbmdlZFF1
ZXJ5UGFyYW1zIHx8IHN0YXRlLnF1ZXJ5UGFyYW1zIHx8IHt9Ci0gICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2l0aW9uQnlJbnRlbnQoaW50ZW50
LCBmYWxzZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgSWRlbnRpY2FsIHRvIGB0cmFuc2l0aW9uVG9gIGV4Y2VwdCB0aGF0IHRoZSBjdXJy
ZW50IFVSTCB3aWxsIGJlIHJlcGxhY2VkCi0gICAgICAgICAgICAgICAgICAgIGlmIHBvc3NpYmxl
LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHByaW1hcmls
eSBmb3IgdXNlIHdpdGggYHJlcGxhY2VTdGF0ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZG9UcmFuc2l0aW9uKHRoaXMsIGFyZ3VtZW50cykubWV0aG9kKCdyZXBs
YWNlJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgVGFrZSBhIG5hbWVkIHJvdXRlIGFuZCBjb250ZXh0IG9iamVjdHMgYW5kIGdlbmVyYXRl
IGEKLSAgICAgICAgICAgICAgICAgICAgVVJMLgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSB0byBnZW5lcmF0ZQotICAgICAg
ICAgICAgICAgICAgICAgIGEgVVJMIGZvcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gey4u
Lk9iamVjdH0gb2JqZWN0cyBhIGxpc3Qgb2Ygb2JqZWN0cyB0byBzZXJpYWxpemUKLQotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IGEgVVJMCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKGhhbmRsZXJOYW1lKSB7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgcGFydGl0aW9uZWRBcmdzID0gZXh0cmFjdFF1ZXJ5UGFyYW1zKHNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKSksCi0gICAgICAgICAgICAgICAgc3VwcGxpZWRQYXJhbXMgPSBw
YXJ0aXRpb25lZEFyZ3NbMF0sCi0gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBwYXJ0aXRp
b25lZEFyZ3NbMV07Ci0KLSAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgYSBUcmFuc2l0aW9u
SW50ZW50IHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtcwotICAgICAgICAgICAgICAgIC8vIGFuZCBh
cHBseSBpdCB0byB0aGUgcHJlc2VudCBzdGF0ZSBvZiB0aGUgcm91dGVyLgotICAgICAgICAgICAg
ICAgIHZhciBpbnRlbnQgPSBuZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsKLSAgICAgICAgICAg
ICAgICAgICAgbmFtZTogaGFuZGxlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRz
OiBzdXBwbGllZFBhcmFtcyAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB2
YXIgc3RhdGUgPSBpbnRlbnQuYXBwbHlUb1N0YXRlKHRoaXMuc3RhdGUsIHRoaXMucmVjb2duaXpl
ciwgdGhpcy5nZXRIYW5kbGVyKTsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge307Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RhdGUuaGFuZGxlckluZm9z
Lmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVy
SW5mbyA9IHN0YXRlLmhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGhh
bmRsZXJQYXJhbXMgPSBoYW5kbGVySW5mby5zZXJpYWxpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgbWVyZ2UocGFyYW1zLCBoYW5kbGVyUGFyYW1zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXM7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5yZWNvZ25pemVyLmdlbmVyYXRlKGhhbmRsZXJOYW1lLCBwYXJh
bXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYXBwbHlJbnRlbnQ6IGZ1bmN0aW9u
KGhhbmRsZXJOYW1lLCBjb250ZXh0cykgewotICAgICAgICAgICAgICAgIHZhciBpbnRlbnQgPSBu
ZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZTogaGFu
ZGxlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBjb250ZXh0cwotICAgICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5hY3RpdmVU
cmFuc2l0aW9uICYmIHRoaXMuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZSB8fCB0aGlzLnN0YXRlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlbnQuYXBwbHlUb1N0YXRlKHN0YXRlLCB0aGlzLnJl
Y29nbml6ZXIsIHRoaXMuZ2V0SGFuZGxlcik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBpc0FjdGl2ZUludGVudDogZnVuY3Rpb24oaGFuZGxlck5hbWUsIGNvbnRleHRzLCBxdWVyeVBh
cmFtcykgewotICAgICAgICAgICAgICAgIHZhciB0YXJnZXRIYW5kbGVySW5mb3MgPSB0aGlzLnN0
YXRlLmhhbmRsZXJJbmZvcywKLSAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlLCBuYW1lcywg
b2JqZWN0LCBoYW5kbGVySW5mbywgaGFuZGxlck9iaiwgaSwgbGVuOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCF0YXJnZXRIYW5kbGVySW5mb3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIg
dGFyZ2V0SGFuZGxlciA9IHRhcmdldEhhbmRsZXJJbmZvc1t0YXJnZXRIYW5kbGVySW5mb3MubGVu
Z3RoIC0gMV0ubmFtZTsKLSAgICAgICAgICAgICAgICB2YXIgcmVjb2dIYW5kbGVycyA9IHRoaXMu
cmVjb2duaXplci5oYW5kbGVyc0Zvcih0YXJnZXRIYW5kbGVyKTsKLQotICAgICAgICAgICAgICAg
IHZhciBpbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChsZW4gPSByZWNvZ0hhbmRsZXJz
Lmxlbmd0aDsgaW5kZXggPCBsZW47ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlckluZm8gPSB0YXJnZXRIYW5kbGVySW5mb3NbaW5kZXhdOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFuZGxlckluZm8ubmFtZSA9PT0gaGFuZGxlck5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSByZWNvZ0hhbmRsZXJzLmxlbmd0aCkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJvdmlkZWQgcm91dGUgbmFtZSBpc24ndCBl
dmVuIGluIHRoZSByb3V0ZSBoaWVyYXJjaHkuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBu
ZXcgVHJhbnNpdGlvblN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuaGFuZGxlckluZm9z
ID0gdGFyZ2V0SGFuZGxlckluZm9zLnNsaWNlKDAsIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAg
ICAgcmVjb2dIYW5kbGVycyA9IHJlY29nSGFuZGxlcnMuc2xpY2UoMCwgaW5kZXggKyAxKTsKLQot
ICAgICAgICAgICAgICAgIHZhciBpbnRlbnQgPSBuZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsK
LSAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0SGFuZGxlciwKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dHM6IGNvbnRleHRzCi0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgbmV3U3RhdGUgPSBpbnRlbnQuYXBwbHlUb0hhbmRsZXJzKHN0YXRlLCByZWNv
Z0hhbmRsZXJzLCB0aGlzLmdldEhhbmRsZXIsIHRhcmdldEhhbmRsZXIsIHRydWUsIHRydWUpOwot
Ci0gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJzRXF1YWwgPSBoYW5kbGVySW5mb3NFcXVhbChu
ZXdTdGF0ZS5oYW5kbGVySW5mb3MsIHN0YXRlLmhhbmRsZXJJbmZvcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFxdWVyeVBhcmFtcyB8fCAhaGFuZGxlcnNFcXVhbCkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaGFuZGxlcnNFcXVhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBHZXQgYSBoYXNoIG9mIFFQcyB0aGF0IHdpbGwgc3RpbGwgYmUgYWN0aXZlIG9u
IG5ldyByb3V0ZQotICAgICAgICAgICAgICAgIHZhciBhY3RpdmVRUHNPbk5ld0hhbmRsZXIgPSB7
fTsKLSAgICAgICAgICAgICAgICBtZXJnZShhY3RpdmVRUHNPbk5ld0hhbmRsZXIsIHF1ZXJ5UGFy
YW1zKTsKLQotICAgICAgICAgICAgICAgIHZhciBhY3RpdmVRdWVyeVBhcmFtcyA9IHRoaXMuc3Rh
dGUucXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGFjdGl2ZVF1
ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVRdWVyeVBhcmFtcy5o
YXNPd25Qcm9wZXJ0eShrZXkpICYmCi0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVFQc09uTmV3
SGFuZGxlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
Y3RpdmVRUHNPbk5ld0hhbmRsZXJba2V5XSA9IGFjdGl2ZVF1ZXJ5UGFyYW1zW2tleV07Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlcnNFcXVhbCAmJiAhZ2V0Q2hhbmdlbGlzdChhY3RpdmVRUHNPbk5ld0hhbmRs
ZXIsIHF1ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGlzQWN0aXZl
OiBmdW5jdGlvbihoYW5kbGVyTmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBwYXJ0aXRpb25l
ZEFyZ3MgPSBleHRyYWN0UXVlcnlQYXJhbXMoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZUludGVudChoYW5kbGVyTmFtZSwgcGFy
dGl0aW9uZWRBcmdzWzBdLCBwYXJ0aXRpb25lZEFyZ3NbMV0pOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHZh
ciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHRyaWdnZXIo
dGhpcywgdGhpcy5jdXJyZW50SGFuZGxlckluZm9zLCBmYWxzZSwgYXJncyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSG9vayBwb2ludCBm
b3IgbG9nZ2luZyB0cmFuc2l0aW9uIHN0YXR1cyB1cGRhdGVzLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGxvZy4KLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBsb2c6IG51bGwsCi0KLSAgICAgICAgICAgIF93aWxs
Q2hhbmdlQ29udGV4dEV2ZW50OiAnd2lsbENoYW5nZUNvbnRleHQnLAotICAgICAgICAgICAgX3Ry
aWdnZXJXaWxsQ2hhbmdlQ29udGV4dDogZnVuY3Rpb24oaGFuZGxlckluZm9zLCBuZXdUcmFuc2l0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLCBoYW5kbGVySW5mb3MsIHRydWUs
IFt0aGlzLl93aWxsQ2hhbmdlQ29udGV4dEV2ZW50LCBuZXdUcmFuc2l0aW9uXSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBfdHJpZ2dlcldpbGxMZWF2ZTogZnVuY3Rpb24oaGFuZGxl
ckluZm9zLCBuZXdUcmFuc2l0aW9uLCBsZWF2aW5nQ2hlY2tlcikgewotICAgICAgICAgICAgICAg
IHRyaWdnZXIodGhpcywgaGFuZGxlckluZm9zLCB0cnVlLCBbJ3dpbGxMZWF2ZScsIG5ld1RyYW5z
aXRpb24sIGxlYXZpbmdDaGVja2VyXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgRmlyZXMg
cXVlcnlQYXJhbXNEaWRDaGFuZ2UgZXZlbnQKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIGZpcmVRdWVyeVBhcmFtRGlkQ2hhbmdlKHJvdXRlciwgbmV3U3RhdGUsIHF1ZXJ5UGFyYW1D
aGFuZ2VsaXN0KSB7Ci0gICAgICAgICAgICAvLyBJZiBxdWVyeVBhcmFtcyBjaGFuZ2VkIHRyaWdn
ZXIgZXZlbnQKLSAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtQ2hhbmdlbGlzdCkgewotCi0gICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxpdHRsZSBoYWNreSBidXQgd2UgbmVlZCBzb21lIHdh
eSBvZiBzdG9yaW5nCi0gICAgICAgICAgICAgICAgLy8gY2hhbmdlZCBxdWVyeSBwYXJhbXMgZ2l2
ZW4gdGhhdCBubyBhY3RpdmVUcmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgLy8gaXMgZ3VhcmFu
dGVlZCB0byBoYXZlIG9jY3VycmVkLgotICAgICAgICAgICAgICAgIHJvdXRlci5fY2hhbmdlZFF1
ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbUNoYW5nZWxpc3QuYWxsOwotICAgICAgICAgICAgICAgIHRy
aWdnZXIocm91dGVyLCBuZXdTdGF0ZS5oYW5kbGVySW5mb3MsIHRydWUsIFsncXVlcnlQYXJhbXNE
aWRDaGFuZ2UnLCBxdWVyeVBhcmFtQ2hhbmdlbGlzdC5jaGFuZ2VkLCBxdWVyeVBhcmFtQ2hhbmdl
bGlzdC5hbGwsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0LnJlbW92ZWRdKTsKLSAgICAgICAgICAgICAg
ICByb3V0ZXIuX2NoYW5nZWRRdWVyeVBhcmFtcyA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAg
ICAgICBUYWtlcyBhbiBBcnJheSBvZiBgSGFuZGxlckluZm9gcywgZmlndXJlcyBvdXQgd2hpY2gg
b25lcyBhcmUKLSAgICAgICAgICAgICAgZXhpdGluZywgZW50ZXJpbmcsIG9yIGNoYW5naW5nIGNv
bnRleHRzLCBhbmQgY2FsbHMgdGhlCi0gICAgICAgICAgICAgIHByb3BlciBoYW5kbGVyIGhvb2tz
LgotCi0gICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRy
ZWUgb2YgaGFuZGxlcnMuIEVhY2ggaGFuZGxlciBpcwotICAgICAgICAgICAgICBmb2xsb3dlZCBi
eSB0aGUgVVJMIHNlZ21lbnQgaXQgaGFuZGxlcy4KLQotICAgICAgICAgICAgICBgYGAKLSAgICAg
ICAgICAgICAgfH5pbmRleCAoIi8iKQotICAgICAgICAgICAgICB8IHx+cG9zdHMgKCIvcG9zdHMi
KQotICAgICAgICAgICAgICB8IHwgfC1zaG93UG9zdCAoIi86aWQiKQotICAgICAgICAgICAgICB8
IHwgfC1uZXdQb3N0ICgiL25ldyIpCi0gICAgICAgICAgICAgIHwgfCB8LWVkaXRQb3N0ICgiL2Vk
aXQiKQotICAgICAgICAgICAgICB8IHx+YWJvdXQgKCIvYWJvdXQvOmlkIikKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB0cmFuc2l0aW9u
czoKLQotICAgICAgICAgICAgICAxLiBBIFVSTCB0cmFuc2l0aW9uIHRvIGAvcG9zdHMvMWAuCi0g
ICAgICAgICAgICAgICAgIDEuIFRyaWdnZXJzIHRoZSBgKm1vZGVsYCBjYWxsYmFja3Mgb24gdGhl
Ci0gICAgICAgICAgICAgICAgICAgIGBpbmRleGAsIGBwb3N0c2AsIGFuZCBgc2hvd1Bvc3RgIGhh
bmRsZXJzCi0gICAgICAgICAgICAgICAgIDIuIFRyaWdnZXJzIHRoZSBgZW50ZXJgIGNhbGxiYWNr
IG9uIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgIDMuIFRyaWdnZXJzIHRoZSBgc2V0dXBgIGNh
bGxiYWNrIG9uIHRoZSBzYW1lCi0gICAgICAgICAgICAgIDIuIEEgZGlyZWN0IHRyYW5zaXRpb24g
dG8gYG5ld1Bvc3RgCi0gICAgICAgICAgICAgICAgIDEuIFRyaWdnZXJzIHRoZSBgZXhpdGAgY2Fs
bGJhY2sgb24gYHNob3dQb3N0YAotICAgICAgICAgICAgICAgICAyLiBUcmlnZ2VycyB0aGUgYGVu
dGVyYCBjYWxsYmFjayBvbiBgbmV3UG9zdGAKLSAgICAgICAgICAgICAgICAgMy4gVHJpZ2dlcnMg
dGhlIGBzZXR1cGAgY2FsbGJhY2sgb24gYG5ld1Bvc3RgCi0gICAgICAgICAgICAgIDMuIEEgZGly
ZWN0IHRyYW5zaXRpb24gdG8gYGFib3V0YCB3aXRoIGEgc3BlY2lmaWVkCi0gICAgICAgICAgICAg
ICAgIGNvbnRleHQgb2JqZWN0Ci0gICAgICAgICAgICAgICAgIDEuIFRyaWdnZXJzIHRoZSBgZXhp
dGAgY2FsbGJhY2sgb24gYG5ld1Bvc3RgCi0gICAgICAgICAgICAgICAgICAgIGFuZCBgcG9zdHNg
Ci0gICAgICAgICAgICAgICAgIDIuIFRyaWdnZXJzIHRoZSBgc2VyaWFsaXplYCBjYWxsYmFjayBv
biBgYWJvdXRgCi0gICAgICAgICAgICAgICAgIDMuIFRyaWdnZXJzIHRoZSBgZW50ZXJgIGNhbGxi
YWNrIG9uIGBhYm91dGAKLSAgICAgICAgICAgICAgICAgNC4gVHJpZ2dlcnMgdGhlIGBzZXR1cGAg
Y2FsbGJhY2sgb24gYGFib3V0YAotCi0gICAgICAgICAgICAgIEBwYXJhbSB7Um91dGVyfSB0cmFu
c2l0aW9uCi0gICAgICAgICAgICAgIEBwYXJhbSB7VHJhbnNpdGlvblN0YXRlfSBuZXdTdGF0ZQot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gc2V0dXBDb250ZXh0cyhyb3V0ZXIsIG5l
d1N0YXRlLCB0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgcGFydGl0aW9uID0gcGFydGl0
aW9uSGFuZGxlcnMocm91dGVyLnN0YXRlLCBuZXdTdGF0ZSk7Ci0KLSAgICAgICAgICAgIGZvckVh
Y2gocGFydGl0aW9uLmV4aXRlZCwgZnVuY3Rpb24oaGFuZGxlckluZm8pIHsKLSAgICAgICAgICAg
ICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIGhhbmRsZXIuY29udGV4dDsKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5yZXNl
dCkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnJlc2V0KHRydWUsIHRyYW5zaXRpb24p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5leGl0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuZXhpdCh0cmFuc2l0aW9uKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgdmFyIG9sZFN0YXRlID0g
cm91dGVyLm9sZFN0YXRlID0gcm91dGVyLnN0YXRlOwotICAgICAgICAgICAgcm91dGVyLnN0YXRl
ID0gbmV3U3RhdGU7Ci0gICAgICAgICAgICB2YXIgY3VycmVudEhhbmRsZXJJbmZvcyA9IHJvdXRl
ci5jdXJyZW50SGFuZGxlckluZm9zID0gcGFydGl0aW9uLnVuY2hhbmdlZC5zbGljZSgpOwotCi0g
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZvckVhY2gocGFydGl0aW9uLnJlc2V0
LCBmdW5jdGlvbihoYW5kbGVySW5mbykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
ciA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVy
LnJlc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnJlc2V0KGZhbHNlLCB0
cmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgICAgZm9yRWFjaChwYXJ0aXRpb24udXBkYXRlZENvbnRleHQsIGZ1bmN0
aW9uKGhhbmRsZXJJbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyRW50
ZXJlZE9yVXBkYXRlZChjdXJyZW50SGFuZGxlckluZm9zLCBoYW5kbGVySW5mbywgZmFsc2UsIHRy
YW5zaXRpb24pOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgZm9yRWFj
aChwYXJ0aXRpb24uZW50ZXJlZCwgZnVuY3Rpb24oaGFuZGxlckluZm8pIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGhhbmRsZXJFbnRlcmVkT3JVcGRhdGVkKGN1cnJlbnRIYW5kbGVySW5m
b3MsIGhhbmRsZXJJbmZvLCB0cnVlLCB0cmFuc2l0aW9uKTsKLSAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICByb3V0ZXIuc3RhdGUg
PSBvbGRTdGF0ZTsKLSAgICAgICAgICAgICAgICByb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvcyA9
IG9sZFN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByb3V0ZXIuc3RhdGUucXVlcnlQYXJhbXMgPSBmaW5hbGl6
ZVF1ZXJ5UGFyYW1DaGFuZ2Uocm91dGVyLCBjdXJyZW50SGFuZGxlckluZm9zLCBuZXdTdGF0ZS5x
dWVyeVBhcmFtcywgdHJhbnNpdGlvbik7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgIEhlbHBlciBtZXRob2QgdXNlZCBi
eSBzZXR1cENvbnRleHRzLiBIYW5kbGVzIGVycm9ycyBvciByZWRpcmVjdHMKLSAgICAgICAgICAg
ICAgdGhhdCBtYXkgaGFwcGVuIGluIGVudGVyL3NldHVwLgotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gaGFuZGxlckVudGVyZWRPclVwZGF0ZWQoY3VycmVudEhhbmRsZXJJbmZvcywg
aGFuZGxlckluZm8sIGVudGVyLCB0cmFuc2l0aW9uKSB7Ci0KLSAgICAgICAgICAgIHZhciBoYW5k
bGVyID0gaGFuZGxlckluZm8uaGFuZGxlciwKLSAgICAgICAgICAgIGNvbnRleHQgPSBoYW5kbGVy
SW5mby5jb250ZXh0OwotCi0gICAgICAgICAgICBpZiAoZW50ZXIgJiYgaGFuZGxlci5lbnRlcikg
ewotICAgICAgICAgICAgICAgIGhhbmRsZXIuZW50ZXIodHJhbnNpdGlvbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLmlzQWJvcnRlZCkg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2l0aW9uQWJvcnRlZCgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0OwotICAgICAg
ICAgICAgaWYgKGhhbmRsZXIuY29udGV4dERpZENoYW5nZSkgewotICAgICAgICAgICAgICAgIGhh
bmRsZXIuY29udGV4dERpZENoYW5nZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoaGFuZGxlci5zZXR1cCkgewotICAgICAgICAgICAgICAgIGhhbmRsZXIuc2V0dXAoY29udGV4
dCwgdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlv
biAmJiB0cmFuc2l0aW9uLmlzQWJvcnRlZCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBU
cmFuc2l0aW9uQWJvcnRlZCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjdXJyZW50
SGFuZGxlckluZm9zLnB1c2goaGFuZGxlckluZm8pOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0K
LSAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0cmFuc2l0aW9uaW5n
IGZyb20gb25lIFVSTCB0bwotICAgICAgICAgICAgICBhbm90aGVyIHRvIGRldGVybWluZSB3aGlj
aCBoYW5kbGVycyBhcmUgbm8gbG9uZ2VyIGFjdGl2ZSwKLSAgICAgICAgICAgICAgd2hpY2ggaGFu
ZGxlcnMgYXJlIG5ld2x5IGFjdGl2ZSwgYW5kIHdoaWNoIGhhbmRsZXJzIHJlbWFpbgotICAgICAg
ICAgICAgICBhY3RpdmUgYnV0IGhhdmUgdGhlaXIgY29udGV4dCBjaGFuZ2VkLgotCi0gICAgICAg
ICAgICAgIFRha2UgYSBsaXN0IG9mIG9sZCBoYW5kbGVycyBhbmQgbmV3IGhhbmRsZXJzIGFuZCBw
YXJ0aXRpb24KLSAgICAgICAgICAgICAgdGhlbSBpbnRvIGZvdXIgYnVja2V0czoKLQotICAgICAg
ICAgICAgICAqIHVuY2hhbmdlZDogdGhlIGhhbmRsZXIgd2FzIGFjdGl2ZSBpbiBib3RoIHRoZSBv
bGQgYW5kCi0gICAgICAgICAgICAgICAgbmV3IFVSTCwgYW5kIGl0cyBjb250ZXh0IHJlbWFpbnMg
dGhlIHNhbWUKLSAgICAgICAgICAgICAgKiB1cGRhdGVkIGNvbnRleHQ6IHRoZSBoYW5kbGVyIHdh
cyBhY3RpdmUgaW4gYm90aCB0aGUKLSAgICAgICAgICAgICAgICBvbGQgYW5kIG5ldyBVUkwsIGJ1
dCBpdHMgY29udGV4dCBjaGFuZ2VkLiBUaGUgaGFuZGxlcidzCi0gICAgICAgICAgICAgICAgYHNl
dHVwYCBtZXRob2QsIGlmIGFueSwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC4KLSAgICAgICAgICAgICAgKiBleGl0ZWQ6IHRoZSBoYW5kbGVyIHdh
cyBhY3RpdmUgaW4gdGhlIG9sZCBVUkwsIGJ1dCBpcwotICAgICAgICAgICAgICAgIG5vIGxvbmdl
ciBhY3RpdmUuCi0gICAgICAgICAgICAgICogZW50ZXJlZDogdGhlIGhhbmRsZXIgd2FzIG5vdCBh
Y3RpdmUgaW4gdGhlIG9sZCBVUkwsIGJ1dAotICAgICAgICAgICAgICAgIGlzIG5vdyBhY3RpdmUu
Ci0KLSAgICAgICAgICAgICAgVGhlIFBhcnRpdGlvbmVkSGFuZGxlcnMgc3RydWN0dXJlIGhhcyBm
b3VyIGZpZWxkczoKLQotICAgICAgICAgICAgICAqIGB1cGRhdGVkQ29udGV4dGA6IGEgbGlzdCBv
ZiBgSGFuZGxlckluZm9gIG9iamVjdHMgdGhhdAotICAgICAgICAgICAgICAgIHJlcHJlc2VudCBo
YW5kbGVycyB0aGF0IHJlbWFpbiBhY3RpdmUgYnV0IGhhdmUgYSBjaGFuZ2VkCi0gICAgICAgICAg
ICAgICAgY29udGV4dAotICAgICAgICAgICAgICAqIGBlbnRlcmVkYDogYSBsaXN0IG9mIGBIYW5k
bGVySW5mb2Agb2JqZWN0cyB0aGF0IHJlcHJlc2VudAotICAgICAgICAgICAgICAgIGhhbmRsZXJz
IHRoYXQgYXJlIG5ld2x5IGFjdGl2ZQotICAgICAgICAgICAgICAqIGBleGl0ZWRgOiBhIGxpc3Qg
b2YgYEhhbmRsZXJJbmZvYCBvYmplY3RzIHRoYXQgYXJlIG5vCi0gICAgICAgICAgICAgICAgbG9u
Z2VyIGFjdGl2ZS4KLSAgICAgICAgICAgICAgKiBgdW5jaGFuZ2VkYDogYSBsaXN0IG9mIGBIYW5k
ZXJJbmZvYCBvYmplY3RzIHRoYXQgcmVtYWluIGFjdGl2ZS4KLQotICAgICAgICAgICAgICBAcGFy
YW0ge0FycmF5W0hhbmRsZXJJbmZvXX0gb2xkSGFuZGxlcnMgYSBsaXN0IG9mIHRoZSBoYW5kbGVy
Ci0gICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoZSBwcmV2aW91cyBVUkwgKG9yIGBb
XWAgaWYgdGhpcyBpcyB0aGUKLSAgICAgICAgICAgICAgICBmaXJzdCBoYW5kbGVkIHRyYW5zaXRp
b24pCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXlbSGFuZGxlckluZm9dfSBuZXdIYW5kbGVy
cyBhIGxpc3Qgb2YgdGhlIGhhbmRsZXIKLSAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmb3Ig
dGhlIG5ldyBVUkwKLQotICAgICAgICAgICAgICBAcmV0dXJuIHtQYXJ0aXRpb259Ci0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiBwYXJ0aXRpb25IYW5kbGVycyhvbGRTdGF0ZSwgbmV3
U3RhdGUpIHsKLSAgICAgICAgICAgIHZhciBvbGRIYW5kbGVycyA9IG9sZFN0YXRlLmhhbmRsZXJJ
bmZvczsKLSAgICAgICAgICAgIHZhciBuZXdIYW5kbGVycyA9IG5ld1N0YXRlLmhhbmRsZXJJbmZv
czsKLQotICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gewotICAgICAgICAgICAgICAgIHVwZGF0
ZWRDb250ZXh0OiBbXSwKLSAgICAgICAgICAgICAgICBleGl0ZWQ6IFtdLAotICAgICAgICAgICAg
ICAgIGVudGVyZWQ6IFtdLAotICAgICAgICAgICAgICAgIHVuY2hhbmdlZDogW10KLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBoYW5kbGVyQ2hhbmdlZCwgY29udGV4dENoYW5nZWQs
IGksIGw7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBuZXdIYW5kbGVycy5sZW5ndGg7
IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgb2xkSGFuZGxlciA9IG9sZEhhbmRs
ZXJzW2ldLCBuZXdIYW5kbGVyID0gbmV3SGFuZGxlcnNbaV07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIW9sZEhhbmRsZXIgfHwgb2xkSGFuZGxlci5oYW5kbGVyICE9PSBuZXdIYW5kbGVyLmhhbmRs
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlckNoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyQ2hhbmdlZCkgewotICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVycy5lbnRlcmVkLnB1c2gobmV3SGFuZGxlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChvbGRIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVycy5leGl0ZWQudW5zaGlmdChvbGRIYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dENoYW5nZWQgfHwgb2xkSGFu
ZGxlci5jb250ZXh0ICE9PSBuZXdIYW5kbGVyLmNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dENoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVycy51
cGRhdGVkQ29udGV4dC5wdXNoKG5ld0hhbmRsZXIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnVuY2hhbmdlZC5wdXNoKG9sZEhhbmRsZXIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChp
ID0gbmV3SGFuZGxlcnMubGVuZ3RoLCBsID0gb2xkSGFuZGxlcnMubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMuZXhpdGVkLnVuc2hpZnQob2xkSGFuZGxlcnNb
aV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVycy5yZXNldCA9IGhhbmRs
ZXJzLnVwZGF0ZWRDb250ZXh0LnNsaWNlKCk7Ci0gICAgICAgICAgICBoYW5kbGVycy5yZXNldC5y
ZXZlcnNlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVyczsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVVSTCh0cmFuc2l0aW9uLCBzdGF0ZSwgaW5wdXRVcmwpIHsK
LSAgICAgICAgICAgIHZhciB1cmxNZXRob2QgPSB0cmFuc2l0aW9uLnVybE1ldGhvZDsKLQotICAg
ICAgICAgICAgaWYgKCF1cmxNZXRob2QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0cmFuc2l0aW9uLnJvdXRlciwK
LSAgICAgICAgICAgIGhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJbmZvcywKLSAgICAgICAg
ICAgIGhhbmRsZXJOYW1lID0gaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5u
YW1lLAotICAgICAgICAgICAgcGFyYW1zID0ge307Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkg
PSBoYW5kbGVySW5mb3MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgbWVy
Z2UocGFyYW1zLCBoYW5kbGVySW5mby5wYXJhbXMpOwotICAgICAgICAgICAgICAgIGlmIChoYW5k
bGVySW5mby5oYW5kbGVyLmluYWNjZXNzaWJsZUJ5VVJMKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVybE1ldGhvZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodXJsTWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnF1ZXJ5
UGFyYW1zID0gdHJhbnNpdGlvbi5fdmlzaWJsZVF1ZXJ5UGFyYW1zIHx8IHN0YXRlLnF1ZXJ5UGFy
YW1zOwotICAgICAgICAgICAgICAgIHZhciB1cmwgPSByb3V0ZXIucmVjb2duaXplci5nZW5lcmF0
ZShoYW5kbGVyTmFtZSwgcGFyYW1zKTsKLQotICAgICAgICAgICAgICAgIGlmICh1cmxNZXRob2Qg
PT09ICdyZXBsYWNlJykgewotICAgICAgICAgICAgICAgICAgICByb3V0ZXIucmVwbGFjZVVSTCh1
cmwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRl
ci51cGRhdGVVUkwodXJsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAg
ICAgICBVcGRhdGVzIHRoZSBVUkwgKGlmIG5lY2Vzc2FyeSkgYW5kIGNhbGxzIGBzZXR1cENvbnRl
eHRzYAotICAgICAgICAgICAgICB0byB1cGRhdGUgdGhlIHJvdXRlcidzIGFycmF5IG9mIGBjdXJy
ZW50SGFuZGxlckluZm9zYC4KLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBmaW5h
bGl6ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwgbmV3U3RhdGUpIHsKLQotICAgICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgICAgICBsb2codHJhbnNpdGlvbi5yb3V0ZXIsIHRyYW5zaXRpb24uc2Vx
dWVuY2UsICJSZXNvbHZlZCBhbGwgbW9kZWxzIG9uIGRlc3RpbmF0aW9uIHJvdXRlOyBmaW5hbGl6
aW5nIHRyYW5zaXRpb24uIik7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdHJhbnNp
dGlvbi5yb3V0ZXIsCi0gICAgICAgICAgICAgICAgaGFuZGxlckluZm9zID0gbmV3U3RhdGUuaGFu
ZGxlckluZm9zLAotICAgICAgICAgICAgICAgIHNlcSA9IHRyYW5zaXRpb24uc2VxdWVuY2U7Ci0K
LSAgICAgICAgICAgICAgICAvLyBSdW4gYWxsIHRoZSBuZWNlc3NhcnkgZW50ZXIvc2V0dXAvZXhp
dCBob29rcwotICAgICAgICAgICAgICAgIHNldHVwQ29udGV4dHMocm91dGVyLCBuZXdTdGF0ZSwg
dHJhbnNpdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBhIHJlZGlyZWN0IG9j
Y3VycmVkIGluIGVudGVyL3NldHVwCi0gICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24uaXNB
Ym9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGNsZWFuZXIgd2F5PyBkaXN0
aW5ndWlzaCBiL3cgdGFyZ2V0SGFuZGxlckluZm9zPwotICAgICAgICAgICAgICAgICAgICByb3V0
ZXIuc3RhdGUuaGFuZGxlckluZm9zID0gcm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChsb2dBYm9ydCh0cmFuc2l0aW9u
KSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdXBkYXRlVVJMKHRyYW5z
aXRpb24sIG5ld1N0YXRlLCB0cmFuc2l0aW9uLmludGVudC51cmwpOwotCi0gICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbi5pc0FjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJvdXRlci5h
Y3RpdmVUcmFuc2l0aW9uID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIHRyaWdnZXIocm91dGVy
LCByb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvcywgdHJ1ZSwgWydkaWRUcmFuc2l0aW9uJ10pOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHJvdXRlci5kaWRUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJvdXRlci5kaWRUcmFuc2l0aW9uKHJvdXRlci5jdXJyZW50SGFuZGxlckluZm9z
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsb2cocm91dGVyLCB0cmFu
c2l0aW9uLnNlcXVlbmNlLCAiVFJBTlNJVElPTiBDT01QTEVURS4iKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFJlc29sdmUgd2l0aCB0aGUgZmluYWwgaGFuZGxlci4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5oYW5kbGVyOwotICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGlmICghKChlIGluc3RhbmNl
b2YgVHJhbnNpdGlvbkFib3J0ZWQpKSkgewotICAgICAgICAgICAgICAgICAgICAvL3ZhciBlcnJv
bmVvdXNIYW5kbGVyID0gaGFuZGxlckluZm9zLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICB2
YXIgaW5mb3MgPSB0cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICAgICAgICAgICAg
ICAgICAgdHJhbnNpdGlvbi50cmlnZ2VyKHRydWUsICdlcnJvcicsIGUsIHRyYW5zaXRpb24sIGlu
Zm9zW2luZm9zLmxlbmd0aC0xXS5oYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNp
dGlvbi5hYm9ydCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRocm93
IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBCZWdpbnMgYW5kIHJldHVybnMgYSBUcmFuc2l0
aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZAotICAgICAgICAgICAgICBhcmd1bWVudHMuIEFjY2Vw
dHMgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGJvdGggVVJMCi0gICAgICAgICAgICAgIHRyYW5z
aXRpb25zIGFuZCBuYW1lZCB0cmFuc2l0aW9ucy4KLQotICAgICAgICAgICAgICBAcGFyYW0ge1Jv
dXRlcn0gcm91dGVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXlbT2JqZWN0XX0gYXJncyBh
cmd1bWVudHMgcGFzc2VkIHRvIHRyYW5zaXRpb25UbywKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aCwgb3IgaGFuZGxlVVJMCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkb1Ry
YW5zaXRpb24ocm91dGVyLCBhcmdzLCBpc0ludGVybWVkaWF0ZSkgewotICAgICAgICAgICAgLy8g
Tm9ybWFsaXplIGJsYW5rIHRyYW5zaXRpb25zIHRvIHJvb3QgVVJMIHRyYW5zaXRpb25zLgotICAg
ICAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdIHx8ICcvJzsKLQotICAgICAgICAgICAgdmFyIGxh
c3RBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoLTFdOwotICAgICAgICAgICAgdmFyIHF1ZXJ5UGFyYW1z
ID0ge307Ci0gICAgICAgICAgICBpZiAobGFzdEFyZyAmJiBsYXN0QXJnLmhhc093blByb3BlcnR5
KCdxdWVyeVBhcmFtcycpKSB7Ci0gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBwb3AuY2Fs
bChhcmdzKS5xdWVyeVBhcmFtczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGlu
dGVudDsKLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgewotCi0gICAgICAgICAg
ICAgICAgbG9nKHJvdXRlciwgIlVwZGF0aW5nIHF1ZXJ5IHBhcmFtcyIpOwotCi0gICAgICAgICAg
ICAgICAgLy8gQSBxdWVyeSBwYXJhbSB1cGRhdGUgaXMgcmVhbGx5IGp1c3QgYSB0cmFuc2l0aW9u
Ci0gICAgICAgICAgICAgICAgLy8gaW50byB0aGUgcm91dGUgeW91J3JlIGFscmVhZHkgb24uCi0g
ICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHJvdXRlci5zdGF0ZS5oYW5kbGVySW5m
b3M7Ci0gICAgICAgICAgICAgICAgaW50ZW50ID0gbmV3IE5hbWVkVHJhbnNpdGlvbkludGVudCh7
Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3MubGVu
Z3RoIC0gMV0ubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtdLAotICAgICAg
ICAgICAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMKLSAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSB7Ci0K
LSAgICAgICAgICAgICAgICBsb2cocm91dGVyLCAiQXR0ZW1wdGluZyBVUkwgdHJhbnNpdGlvbiB0
byAiICsgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaW50ZW50ID0gbmV3IFVSTFRyYW5zaXRpb25J
bnRlbnQoewotICAgICAgICAgICAgICAgICAgICB1cmw6IG5hbWUgCi0gICAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICBsb2cocm91dGVy
LCAiQXR0ZW1wdGluZyB0cmFuc2l0aW9uIHRvICIgKyBuYW1lKTsKLSAgICAgICAgICAgICAgICBp
bnRlbnQgPSBuZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsKLSAgICAgICAgICAgICAgICAgICAg
bmFtZTogYXJnc1swXSwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IHNsaWNlLmNhbGwo
YXJncywgMSksCi0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
cm91dGVyLnRyYW5zaXRpb25CeUludGVudChpbnRlbnQsIGlzSW50ZXJtZWRpYXRlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGhhbmRsZXJJbmZvc0VxdWFsKGhhbmRsZXJJbmZvcywg
b3RoZXJIYW5kbGVySW5mb3MpIHsKLSAgICAgICAgICAgIGlmIChoYW5kbGVySW5mb3MubGVuZ3Ro
ICE9PSBvdGhlckhhbmRsZXJJbmZvcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaGFuZGxlckluZm9zW2ldICE9PSBvdGhlckhhbmRsZXJJbmZvc1tpXSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biBmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFuZ2Uocm91dGVyLCByZXNvbHZlZEhhbmRsZXJzLCBuZXdR
dWVyeVBhcmFtcywgdHJhbnNpdGlvbikgewotICAgICAgICAgICAgLy8gV2UgZmlyZSBhIGZpbmFs
aXplUXVlcnlQYXJhbUNoYW5nZSBldmVudCB3aGljaAotICAgICAgICAgICAgLy8gZ2l2ZXMgdGhl
IG5ldyByb3V0ZSBoaWVyYXJjaHkgYSBjaGFuY2UgdG8gdGVsbAotICAgICAgICAgICAgLy8gdXMg
d2hpY2ggcXVlcnkgcGFyYW1zIGl0J3MgY29uc3VtaW5nIGFuZCB3aGF0Ci0gICAgICAgICAgICAv
LyB0aGVpciBmaW5hbCB2YWx1ZXMgYXJlLiBJZiBhIHF1ZXJ5IHBhcmFtIGlzCi0gICAgICAgICAg
ICAvLyBubyBsb25nZXIgY29uc3VtZWQgaW4gdGhlIGZpbmFsIHJvdXRlIGhpZXJhcmNoeSwKLSAg
ICAgICAgICAgIC8vIGl0cyBzZXJpYWxpemVkIHNlZ21lbnQgd2lsbCBiZSByZW1vdmVkCi0gICAg
ICAgICAgICAvLyBmcm9tIHRoZSBVUkwuCi0KLSAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbmV3
UXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3UXVlcnlQYXJhbXMuaGFzT3du
UHJvcGVydHkoaykgJiYKLSAgICAgICAgICAgICAgICBuZXdRdWVyeVBhcmFtc1trXSA9PT0gbnVs
bCkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3UXVlcnlQYXJhbXNba107Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZmluYWxRdWVy
eVBhcmFtc0FycmF5ID0gW107Ci0gICAgICAgICAgICB0cmlnZ2VyKHJvdXRlciwgcmVzb2x2ZWRI
YW5kbGVycywgdHJ1ZSwgWydmaW5hbGl6ZVF1ZXJ5UGFyYW1DaGFuZ2UnLCBuZXdRdWVyeVBhcmFt
cywgZmluYWxRdWVyeVBhcmFtc0FycmF5LCB0cmFuc2l0aW9uXSk7Ci0KLSAgICAgICAgICAgIGlm
ICh0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5fdmlzaWJsZVF1ZXJ5
UGFyYW1zID0ge307Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBmaW5hbFF1ZXJ5
UGFyYW1zID0ge307Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZmluYWxRdWVy
eVBhcmFtc0FycmF5Lmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHFwID0gZmluYWxRdWVyeVBhcmFtc0FycmF5W2ldOwotICAgICAgICAgICAgICAgIGZpbmFsUXVl
cnlQYXJhbXNbcXAua2V5XSA9IHFwLnZhbHVlOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0
aW9uICYmIHFwLnZpc2libGUgIT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5z
aXRpb24uX3Zpc2libGVRdWVyeVBhcmFtc1txcC5rZXldID0gcXAudmFsdWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZpbmFsUXVlcnlQYXJh
bXM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBub3RpZnlFeGlzdGluZ0hhbmRsZXJz
KHJvdXRlciwgbmV3U3RhdGUsIG5ld1RyYW5zaXRpb24pIHsKLSAgICAgICAgICAgIHZhciBvbGRI
YW5kbGVycyA9IHJvdXRlci5zdGF0ZS5oYW5kbGVySW5mb3MsCi0gICAgICAgICAgICBjaGFuZ2lu
ZyA9IFtdLAotICAgICAgICAgICAgbGVhdmluZ0luZGV4ID0gbnVsbCwKLSAgICAgICAgICAgIGxl
YXZpbmcsIGxlYXZpbmdDaGVja2VyLCBpLCBvbGRIYW5kbGVyLCBuZXdIYW5kbGVyOwotCi0gICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkSGFuZGxlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBvbGRIYW5kbGVyID0gb2xkSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAg
bmV3SGFuZGxlciA9IG5ld1N0YXRlLmhhbmRsZXJJbmZvc1tpXTsKLQotICAgICAgICAgICAgICAg
IGlmICghbmV3SGFuZGxlciB8fCBvbGRIYW5kbGVyLm5hbWUgIT09IG5ld0hhbmRsZXIubmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICBsZWF2aW5nSW5kZXggPSBpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW5l
d0hhbmRsZXIuaXNSZXNvbHZlZCkgewotICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZy5wdXNo
KG9sZEhhbmRsZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKGxlYXZpbmdJbmRleCAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxlYXZp
bmcgPSBvbGRIYW5kbGVycy5zbGljZShsZWF2aW5nSW5kZXgsIG9sZEhhbmRsZXJzLmxlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgbGVhdmluZ0NoZWNrZXIgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGggPSAwOyBoIDwgbGVhdmluZy5sZW5ndGg7IGgrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlYXZpbmdbaF0ubmFtZSA9PT0gbmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcm91
dGVyLl90cmlnZ2VyV2lsbExlYXZlKGxlYXZpbmcsIG5ld1RyYW5zaXRpb24sIGxlYXZpbmdDaGVj
a2VyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNoYW5naW5nLmxlbmd0aCA+
IDApIHsKLSAgICAgICAgICAgICAgICByb3V0ZXIuX3RyaWdnZXJXaWxsQ2hhbmdlQ29udGV4dChj
aGFuZ2luZywgbmV3VHJhbnNpdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRy
aWdnZXIocm91dGVyLCBvbGRIYW5kbGVycywgdHJ1ZSwgWyd3aWxsVHJhbnNpdGlvbicsIG5ld1Ry
YW5zaXRpb25dKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0g
PSBSb3V0ZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvdHJhbnNpdGlvbi1pbnRlbnQi
LAotICAgIFsiLi91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5
MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBt
ZXJnZSA9IF9fZGVwZW5kZW5jeTFfXy5tZXJnZTsKLQotICAgICAgICBmdW5jdGlvbiBUcmFuc2l0
aW9uSW50ZW50KHByb3BzKSB7Ci0gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUocHJvcHMpOwot
Ci0gICAgICAgICAgICAvLyBUT0RPOiB3YXQKLSAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMu
ZGF0YSB8fCB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIFRyYW5zaXRpb25JbnRlbnQucHJvdG90
eXBlID0gewotICAgICAgICAgICAgaW5pdGlhbGl6ZTogbnVsbCwKLSAgICAgICAgICAgIGFwcGx5
VG9TdGF0ZTogbnVsbAotICAgICAgICB9OwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0
Il0gPSBUcmFuc2l0aW9uSW50ZW50OwotICAgIH0pOwotICAgIGRlZmluZSgicm91dGVyL3RyYW5z
aXRpb24taW50ZW50L25hbWVkLXRyYW5zaXRpb24taW50ZW50IiwKLSAgICBbIi4uL3RyYW5zaXRp
b24taW50ZW50IiwgIi4uL3RyYW5zaXRpb24tc3RhdGUiLCAiLi4vaGFuZGxlci1pbmZvL2ZhY3Rv
cnkiLCAiLi4vdXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgVHJhbnNpdGlv
bkludGVudCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVHJhbnNp
dGlvblN0YXRlID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoYW5k
bGVySW5mb0ZhY3RvcnkgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGlzUGFyYW0gPSBfX2RlcGVuZGVuY3k0X18uaXNQYXJhbTsKLSAgICAgICAgdmFyIGV4dHJhY3RR
dWVyeVBhcmFtcyA9IF9fZGVwZW5kZW5jeTRfXy5leHRyYWN0UXVlcnlQYXJhbXM7Ci0gICAgICAg
IHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTRfXy5tZXJnZTsKLSAgICAgICAgdmFyIHN1YmNsYXNz
ID0gX19kZXBlbmRlbmN5NF9fLnN1YmNsYXNzOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBzdWJjbGFzcyhUcmFuc2l0aW9uSW50ZW50LCB7Ci0gICAgICAgICAgICBuYW1lOiBu
dWxsLAotICAgICAgICAgICAgcGl2b3RIYW5kbGVyOiBudWxsLAotICAgICAgICAgICAgY29udGV4
dHM6IG51bGwsCi0gICAgICAgICAgICBxdWVyeVBhcmFtczogbnVsbCwKLQotICAgICAgICAgICAg
aW5pdGlhbGl6ZTogZnVuY3Rpb24ocHJvcHMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5hbWUg
PSBwcm9wcy5uYW1lOwotICAgICAgICAgICAgICAgIHRoaXMucGl2b3RIYW5kbGVyID0gcHJvcHMu
cGl2b3RIYW5kbGVyOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dHMgPSBwcm9wcy5jb250
ZXh0cyB8fCBbXTsKLSAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcHJvcHMucXVl
cnlQYXJhbXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhcHBseVRvU3RhdGU6IGZ1
bmN0aW9uKG9sZFN0YXRlLCByZWNvZ25pemVyLCBnZXRIYW5kbGVyLCBpc0ludGVybWVkaWF0ZSkg
ewotCi0gICAgICAgICAgICAgICAgdmFyIHBhcnRpdGlvbmVkQXJncyA9IGV4dHJhY3RRdWVyeVBh
cmFtcyhbdGhpcy5uYW1lXS5jb25jYXQodGhpcy5jb250ZXh0cykpLAotICAgICAgICAgICAgICAg
IHB1cmVBcmdzID0gcGFydGl0aW9uZWRBcmdzWzBdLAotICAgICAgICAgICAgICAgIHF1ZXJ5UGFy
YW1zID0gcGFydGl0aW9uZWRBcmdzWzFdLAotICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gcmVj
b2duaXplci5oYW5kbGVyc0ZvcihwdXJlQXJnc1swXSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
dGFyZ2V0Um91dGVOYW1lID0gaGFuZGxlcnNbaGFuZGxlcnMubGVuZ3RoLTFdLmhhbmRsZXI7Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseVRvSGFuZGxlcnMob2xkU3RhdGUsIGhh
bmRsZXJzLCBnZXRIYW5kbGVyLCB0YXJnZXRSb3V0ZU5hbWUsIGlzSW50ZXJtZWRpYXRlKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFwcGx5VG9IYW5kbGVyczogZnVuY3Rpb24ob2xk
U3RhdGUsIGhhbmRsZXJzLCBnZXRIYW5kbGVyLCB0YXJnZXRSb3V0ZU5hbWUsIGlzSW50ZXJtZWRp
YXRlLCBjaGVja2luZ0lmQWN0aXZlKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaTsKLSAgICAg
ICAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBuZXcgVHJhbnNpdGlvblN0YXRlKCk7Ci0gICAgICAg
ICAgICAgICAgdmFyIG9iamVjdHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKDApOwotCi0gICAgICAg
ICAgICAgICAgdmFyIGludmFsaWRhdGVJbmRleCA9IGhhbmRsZXJzLmxlbmd0aDsKLQotICAgICAg
ICAgICAgICAgIC8vIFBpdm90IGhhbmRsZXJzIGFyZSBwcm92aWRlZCBmb3IgcmVmcmVzaCB0cmFu
c2l0aW9ucwotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpdm90SGFuZGxlcikgewotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRIYW5kbGVyKGhhbmRsZXJzW2ldLmhhbmRsZXIp
ID09PSB0aGlzLnBpdm90SGFuZGxlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dmFsaWRhdGVJbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcGl2b3RIYW5kbGVyRm91bmQgPSAhdGhp
cy5waXZvdEhhbmRsZXI7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBoYW5kbGVycy5sZW5n
dGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0g
aGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcmVzdWx0LmhhbmRs
ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZ2V0SGFuZGxlcihuYW1lKTsK
LQotICAgICAgICAgICAgICAgICAgICB2YXIgb2xkSGFuZGxlckluZm8gPSBvbGRTdGF0ZS5oYW5k
bGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZXdIYW5kbGVySW5mbyA9IG51
bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5uYW1lcy5sZW5ndGggPiAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnZhbGlkYXRlSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVySW5mbyA9IHRoaXMuY3JlYXRlUGFy
YW1IYW5kbGVySW5mbyhuYW1lLCBoYW5kbGVyLCByZXN1bHQubmFtZXMsIG9iamVjdHMsIG9sZEhh
bmRsZXJJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlckluZm8gPSB0aGlzLmdldEhhbmRsZXJJbmZvRm9y
RHluYW1pY1NlZ21lbnQobmFtZSwgaGFuZGxlciwgcmVzdWx0Lm5hbWVzLCBvYmplY3RzLCBvbGRI
YW5kbGVySW5mbywgdGFyZ2V0Um91dGVOYW1lLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgcm91dGUgaGFzIG5vIGR5bmFtaWMgc2VnbWVudC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZXJlZm9yZSB0cmVhdCBhcyBhIHBhcmFtLWJhc2VkIGhhbmRsZXJJbmZvCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGVtcHR5IHBhcmFtcy4gVGhpcyB3aWxsIGNh
dXNlIHRoZSBgbW9kZWxgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBob29rIHRvIGJlIGNh
bGxlZCB3aXRoIGVtcHR5IHBhcmFtcywgd2hpY2ggaXMgZGVzaXJhYmxlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3SGFuZGxlckluZm8gPSB0aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8o
bmFtZSwgaGFuZGxlciwgcmVzdWx0Lm5hbWVzLCBvYmplY3RzLCBvbGRIYW5kbGVySW5mbyk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tpbmdJ
ZkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcGVyZm9ybWlu
ZyBhbiBpc0FjdGl2ZSBjaGVjaywgd2Ugd2FudCB0bwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc2VyaWFsaXplIFVSTCBwYXJhbXMgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgYnV0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbWlzbWF0Y2hlcyBiZXR3ZWVuIG9sZCBh
bmQgbmV3IGNvbnRleHQuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVySW5mbyA9
IG5ld0hhbmRsZXJJbmZvLmJlY29tZVJlc29sdmVkKG51bGwsIG5ld0hhbmRsZXJJbmZvLmNvbnRl
eHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBvbGRIYW5kbGVy
SW5mbyAmJiBvbGRIYW5kbGVySW5mby5jb250ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5uYW1lcy5sZW5ndGggPiAwICYmIG5ld0hhbmRsZXJJbmZvLmNvbnRleHQgPT09
IG9sZENvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjb250ZXh0
cyBtYXRjaCBpbiBpc0FjdGl2ZSB0ZXN0LCBhc3N1bWUgcGFyYW1zIGFsc28gbWF0Y2guCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIGZsZXhpYmlsaXR5IGlu
IG5vdCByZXF1aXJpbmcgdGhhdCBldmVyeSBsYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlciBwcm92aWRlIGEgYHNlcmlhbGl6ZWAgbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3SGFuZGxlckluZm8ucGFyYW1zID0gb2xkSGFuZGxlckluZm8gJiYg
b2xkSGFuZGxlckluZm8ucGFyYW1zOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlckluZm8uY29udGV4dCA9IG9sZENvbnRleHQ7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlclRv
VXNlID0gb2xkSGFuZGxlckluZm87Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID49IGludmFs
aWRhdGVJbmRleCB8fCBuZXdIYW5kbGVySW5mby5zaG91bGRTdXBlcmNlZGUob2xkSGFuZGxlcklu
Zm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5kZXggPSBNYXRoLm1p
bihpLCBpbnZhbGlkYXRlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclRv
VXNlID0gbmV3SGFuZGxlckluZm87Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNJbnRlcm1lZGlhdGUgJiYgIWNoZWNraW5nSWZBY3RpdmUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJUb1VzZSA9IGhhbmRsZXJUb1VzZS5iZWNvbWVS
ZXNvbHZlZChudWxsLCBoYW5kbGVyVG9Vc2UuY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5oYW5kbGVySW5mb3MudW5zaGlmdCho
YW5kbGVyVG9Vc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChv
YmplY3RzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJNb3JlIGNvbnRleHQgb2JqZWN0cyB3ZXJlIHBhc3NlZCB0aGFuIHRoZXJlIGFyZSBkeW5hbWlj
IHNlZ21lbnRzIGZvciB0aGUgcm91dGU6ICIgKyB0YXJnZXRSb3V0ZU5hbWUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNJbnRlcm1lZGlhdGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlQ2hpbGRyZW4obmV3U3RhdGUuaGFuZGxlcklu
Zm9zLCBpbnZhbGlkYXRlSW5kZXgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG1lcmdlKG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9KTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIGludmFsaWRhdGVDaGlsZHJlbjogZnVuY3Rpb24oaGFuZGxlckluZm9zLCBpbnZh
bGlkYXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gaW52YWxpZGF0ZUlu
ZGV4LCBsID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJJbmZvc1tpXSA9IGhhbmRsZXJJbmZvc1tpXS5nZXRVbnJlc29sdmVkKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZ2V0SGFu
ZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudDogZnVuY3Rpb24obmFtZSwgaGFuZGxlciwgbmFtZXMs
IG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvLCB0YXJnZXRSb3V0ZU5hbWUsIGkpIHsKLQotICAgICAg
ICAgICAgICAgIHZhciBudW1OYW1lcyA9IG5hbWVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2
YXIgb2JqZWN0VG9Vc2U7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID4gMCkg
ewotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgb2JqZWN0cyBwcm92aWRlZCBmb3Ig
dGhpcyB0cmFuc2l0aW9uLgotICAgICAgICAgICAgICAgICAgICBvYmplY3RUb1VzZSA9IG9iamVj
dHNbb2JqZWN0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW0o
b2JqZWN0VG9Vc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVh
dGVQYXJhbUhhbmRsZXJJbmZvKG5hbWUsIGhhbmRsZXIsIG5hbWVzLCBvYmplY3RzLCBvbGRIYW5k
bGVySW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvYmplY3RzLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChvbGRIYW5kbGVySW5mbyAmJiBvbGRIYW5kbGVySW5mby5uYW1lID09
PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIHRoZSBtYXRjaGluZyBvbGRI
YW5kbGVySW5mbwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkSGFuZGxlckluZm87Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJl
VHJhbnNpdGlvblN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlVHJhbnNp
dGlvbkhhbmRsZXJJbmZvID0gdGhpcy5wcmVUcmFuc2l0aW9uU3RhdGUuaGFuZGxlckluZm9zW2ld
OwotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9Vc2UgPSBwcmVUcmFuc2l0aW9uSGFu
ZGxlckluZm8gJiYgcHJlVHJhbnNpdGlvbkhhbmRsZXJJbmZvLmNvbnRleHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVhbGx5IHdl
IHNob3VsZCB0aHJvdyB0aGlzIGVycm9yIHRvIHByb3ZpZGUgbWF4aW1hbAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBub3QgZW5vdWdoIGNv
bnRleHQgb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2VyZSBwcm92aWRlZCwg
YnV0IHRoaXMgcHJvdmVzIHRvbyBjdW1iZXJzb21lIGluIEVtYmVyCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBjYXNlcyB3aGVyZSBpbm5lciB0ZW1wbGF0ZSBoZWxwZXJzIGFyZSBldmFs
dWF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBwYXJlbnQgaGVscGVycyB1
bi1yZW5kZXIsIGluIHdoaWNoIGNhc2VzIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGVycm9yIHNvbWV3aGF0IHByZW1hdHVyZWx5IGZpcmVzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy90aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggY29udGV4dCBvYmplY3RzIHdlcmUgcHJv
dmlkZWQgdG8gY29tcGxldGUgYSB0cmFuc2l0aW9uIHRvICIgKyB0YXJnZXRSb3V0ZU5hbWUgKyAi
LiBTcGVjaWZpY2FsbHksIHRoZSAiICsgbmFtZSArICIgcm91dGUgbmVlZHMgYW4gb2JqZWN0IHRo
YXQgY2FuIGJlIHNlcmlhbGl6ZWQgaW50byBpdHMgZHluYW1pYyBVUkwgc2VnbWVudHMgWyIgKyBu
YW1lcy5qb2luKCcsICcpICsgIl0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBv
bGRIYW5kbGVySW5mbzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW5mb0ZhY3RvcnkoJ29iamVjdCcsIHsK
LSAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlcjogaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dDogb2JqZWN0VG9Vc2Us
Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY3JlYXRlUGFyYW1IYW5kbGVySW5mbzogZnVu
Y3Rpb24obmFtZSwgaGFuZGxlciwgbmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9OwotCi0gICAgICAgICAgICAgICAgLy8gU29h
ayB1cCBhbGwgdGhlIHByb3ZpZGVkIHN0cmluZy9udW1iZXJzCi0gICAgICAgICAgICAgICAgdmFy
IG51bU5hbWVzID0gbmFtZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgIHdoaWxlIChudW1OYW1l
cy0tKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2Ugb2xkIHBhcmFtcyBpZiB0
aGUgbmFtZXMgbWF0Y2ggd2l0aCB0aGUgbmV3IGhhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAg
dmFyIG9sZFBhcmFtcyA9IChvbGRIYW5kbGVySW5mbyAmJiBuYW1lID09PSBvbGRIYW5kbGVySW5m
by5uYW1lICYmIG9sZEhhbmRsZXJJbmZvLnBhcmFtcykgfHwge307Ci0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHBlZWsgPSBvYmplY3RzW29iamVjdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJhbU5hbWUgPSBuYW1lc1tudW1OYW1lc107Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpc1BhcmFtKHBlZWspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbcGFyYW1OYW1lXSA9ICIiICsgb2JqZWN0cy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGhlcmUsIHRoaXMg
bWVhbnMgb25seSBzb21lIG9mIHRoZSBwYXJhbXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdlcmUgc3RyaW5nL251bWJlciBwYXJhbXMsIHNvIHRyeSBhbmQgdXNlIGEgcGFyYW0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGZyb20gYSBwcmV2aW91cyBoYW5kbGVyLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW3BhcmFtTmFtZV0gPSBv
bGRQYXJhbXNbcGFyYW1OYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgZGlkbid0IHBy
b3ZpZGUgZW5vdWdoIHN0cmluZy9udW1lcmljIHBhcmFtZXRlcnMgdG8gc2F0aXNmeSBhbGwgb2Yg
dGhlIGR5bmFtaWMgc2VnbWVudHMgZm9yIHJvdXRlICIgKyBuYW1lKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW5mb0ZhY3RvcnkoJ3BhcmFtJywgewotICAg
ICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVy
OiBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZp
bmUoInJvdXRlci90cmFuc2l0aW9uLWludGVudC91cmwtdHJhbnNpdGlvbi1pbnRlbnQiLAotICAg
IFsiLi4vdHJhbnNpdGlvbi1pbnRlbnQiLCAiLi4vdHJhbnNpdGlvbi1zdGF0ZSIsICIuLi9oYW5k
bGVyLWluZm8vZmFjdG9yeSIsICIuLi91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBl
bmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IHZhciBUcmFuc2l0aW9uSW50ZW50ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBUcmFuc2l0aW9uU3RhdGUgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIGhhbmRsZXJJbmZvRmFjdG9yeSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgb0NyZWF0ZSA9IF9fZGVwZW5kZW5jeTRfXy5vQ3JlYXRlOwotICAgICAg
ICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k0X18ubWVyZ2U7Ci0gICAgICAgIHZhciBzdWJjbGFz
cyA9IF9fZGVwZW5kZW5jeTRfXy5zdWJjbGFzczsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gc3ViY2xhc3MoVHJhbnNpdGlvbkludGVudCwgewotICAgICAgICAgICAgdXJsOiBu
dWxsLAotCi0gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihwcm9wcykgewotICAgICAg
ICAgICAgICAgIHRoaXMudXJsID0gcHJvcHMudXJsOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgYXBwbHlUb1N0YXRlOiBmdW5jdGlvbihvbGRTdGF0ZSwgcmVjb2duaXplciwgZ2V0SGFu
ZGxlcikgewotICAgICAgICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IG5ldyBUcmFuc2l0aW9uU3Rh
dGUoKTsKLQotICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gcmVjb2duaXplci5yZWNvZ25p
emUodGhpcy51cmwpLAotICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0ge30sCi0gICAgICAg
ICAgICAgICAgaSwgbGVuOwotCi0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnJlY29nbml6ZWRVUkxFcnJvcih0aGlzLnVybCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHN0YXRlc0RpZmZlciA9
IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVzdWx0cy5sZW5n
dGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVz
dWx0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSByZXN1bHQuaGFuZGxlcjsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBnZXRIYW5kbGVyKG5hbWUpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLmluYWNjZXNzaWJsZUJ5VVJMKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5yZWNvZ25pemVkVVJMRXJyb3IodGhpcy51
cmwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5l
d0hhbmRsZXJJbmZvID0gaGFuZGxlckluZm9GYWN0b3J5KCdwYXJhbScsIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVy
OiBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1z
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBvbGRI
YW5kbGVySW5mbyA9IG9sZFN0YXRlLmhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlc0RpZmZlciB8fCBuZXdIYW5kbGVySW5mby5zaG91bGRTdXBlcmNlZGUob2xk
SGFuZGxlckluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXNEaWZmZXIgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuaGFuZGxlckluZm9zW2ldID0g
bmV3SGFuZGxlckluZm87Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXdTdGF0ZS5oYW5kbGVySW5mb3NbaV0gPSBvbGRIYW5kbGVySW5mbzsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG1lcmdlKG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCByZXN1bHRzLnF1ZXJ5UGFyYW1zKTsKLQot
ICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFByb21pc2UgcmVqZWN0IHJlYXNvbnMg
cGFzc2VkIHRvIHByb21pc2UgcmVqZWN0aW9uCi0gICAgICAgICAgICAgIGhhbmRsZXJzIGZvciBm
YWlsZWQgdHJhbnNpdGlvbnMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gVW5y
ZWNvZ25pemVkVVJMRXJyb3IobWVzc2FnZSkgewotICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0g
KG1lc3NhZ2UgfHwgIlVucmVjb2duaXplZFVSTEVycm9yIik7Ci0gICAgICAgICAgICB0aGlzLm5h
bWUgPSAiVW5yZWNvZ25pemVkVVJMRXJyb3IiOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJyb3V0ZXIvdHJhbnNpdGlvbi1zdGF0ZSIsCi0gICAgWyIuL2hhbmRsZXItaW5mbyIsICIu
L3V0aWxzIiwgInJzdnAvcHJvbWlzZSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgUmVzb2x2ZWRIYW5kbGVySW5m
byA9IF9fZGVwZW5kZW5jeTFfXy5SZXNvbHZlZEhhbmRsZXJJbmZvOwotICAgICAgICB2YXIgZm9y
RWFjaCA9IF9fZGVwZW5kZW5jeTJfXy5mb3JFYWNoOwotICAgICAgICB2YXIgcHJvbWlzZUxhYmVs
ID0gX19kZXBlbmRlbmN5Ml9fLnByb21pc2VMYWJlbDsKLSAgICAgICAgdmFyIFByb21pc2UgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICBmdW5jdGlvbiBUcmFuc2l0aW9u
U3RhdGUob3RoZXIpIHsKLSAgICAgICAgICAgIHRoaXMuaGFuZGxlckluZm9zID0gW107Ci0gICAg
ICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge307Ci0gICAgICAgICAgICB0aGlzLnBhcmFtcyA9
IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgVHJhbnNpdGlvblN0YXRlLnByb3RvdHlwZSA9IHsK
LSAgICAgICAgICAgIGhhbmRsZXJJbmZvczogbnVsbCwKLSAgICAgICAgICAgIHF1ZXJ5UGFyYW1z
OiBudWxsLAotICAgICAgICAgICAgcGFyYW1zOiBudWxsLAotCi0gICAgICAgICAgICBwcm9taXNl
TGFiZWw6IGZ1bmN0aW9uKGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRhcmdldE5hbWUg
PSAnJzsKLSAgICAgICAgICAgICAgICBmb3JFYWNoKHRoaXMuaGFuZGxlckluZm9zLCBmdW5jdGlv
bihoYW5kbGVySW5mbykgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0TmFtZSAhPT0g
JycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWUgKz0gJy4nOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWUgKz0gaGFuZGxl
ckluZm8ubmFtZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cHJvbWlzZUxhYmVsKCInIiArIHRhcmdldE5hbWUgKyAiJzogIiArIGxhYmVsKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHNob3VsZENvbnRpbnVlLCBw
YXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIC8vIEZpcnN0LCBjYWxjdWxhdGUgcGFyYW1zIGZvciB0aGlzIHN0YXRlLiBUaGlzIGlzIHVz
ZWZ1bAotICAgICAgICAgICAgICAgIC8vIGluZm9ybWF0aW9uIHRvIHByb3ZpZGUgdG8gdGhlIHZh
cmlvdXMgcm91dGUgaG9va3MuCi0gICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFy
YW1zOwotICAgICAgICAgICAgICAgIGZvckVhY2godGhpcy5oYW5kbGVySW5mb3MsIGZ1bmN0aW9u
KGhhbmRsZXJJbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1toYW5kbGVySW5mby5u
YW1lXSA9IGhhbmRsZXJJbmZvLnBhcmFtcyB8fCB7fTsKLSAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXlsb2FkIHx8IHt9OwotICAgICAgICAgICAgICAg
IHBheWxvYWQucmVzb2x2ZUluZGV4ID0gMDsKLQotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50
U3RhdGUgPSB0aGlzOwotICAgICAgICAgICAgICAgIHZhciB3YXNBYm9ydGVkID0gZmFsc2U7Ci0K
LSAgICAgICAgICAgICAgICAvLyBUaGUgcHJlbHVkZSBSU1ZQLnJlc29sdmUoKSBhc3luY3MgdXMg
aW50byB0aGUgcHJvbWlzZSBsYW5kLgotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUobnVsbCwgdGhpcy5wcm9taXNlTGFiZWwoIlN0YXJ0IHRyYW5zaXRpb24iKSkKLSAgICAg
ICAgICAgICAgICAudGhlbihyZXNvbHZlT25lSGFuZGxlckluZm8sIG51bGwsIHRoaXMucHJvbWlz
ZUxhYmVsKCdSZXNvbHZlIGhhbmRsZXInKSlbJ2NhdGNoJ10oaGFuZGxlRXJyb3IsIHRoaXMucHJv
bWlzZUxhYmVsKCdIYW5kbGUgZXJyb3InKSk7Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBp
bm5lclNob3VsZENvbnRpbnVlKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKHNob3VsZENvbnRpbnVlKCksIHByb21pc2VMYWJlbCgiQ2hlY2sgaWYgc2hvdWxk
IGNvbnRpbnVlIikpWydjYXRjaCddKGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBlcnJvcnMgdGhhdCBvY2N1cnJlZAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVyaW5nIHJlc29sdXRpb24gKGUuZy4gYmVmb3Jl
TW9kZWwvbW9kZWwvYWZ0ZXJNb2RlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
YWJvcnRzIGR1ZSB0byBhIHJlamVjdGluZyBwcm9taXNlIGZyb20gc2hvdWxkQ29udGludWUoKS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHdhc0Fib3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0sIHByb21pc2VMYWJlbCgiSGFuZGxlIGFib3J0IikpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycm9yKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUKLSAgICAgICAgICAg
ICAgICAgICAgLy8gcmVqZWN0IHZhbHVlIG9mIFRyYW5zaXRpb25TdGF0ZSNyZXNvbHZlCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mb3MgPSBjdXJyZW50U3RhdGUuaGFuZGxlcklu
Zm9zOwotICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JIYW5kbGVySW5kZXggPSBwYXlsb2Fk
LnJlc29sdmVJbmRleCA+PSBoYW5kbGVySW5mb3MubGVuZ3RoID8KLSAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlckluZm9zLmxlbmd0aCAtIDEgOiBwYXlsb2FkLnJlc29sdmVJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yOiBlcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJXaXRo
RXJyb3I6IGN1cnJlbnRTdGF0ZS5oYW5kbGVySW5mb3NbZXJyb3JIYW5kbGVySW5kZXhdLmhhbmRs
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXNBYm9ydGVkOiB3YXNBYm9ydGVkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGN1cnJlbnRTdGF0ZQotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBw
cm9jZWVkKHJlc29sdmVkSGFuZGxlckluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdh
c0FscmVhZHlSZXNvbHZlZCA9IGN1cnJlbnRTdGF0ZS5oYW5kbGVySW5mb3NbcGF5bG9hZC5yZXNv
bHZlSW5kZXhdLmlzUmVzb2x2ZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU3dhcCB0aGUg
cHJldmlvdXNseSB1bnJlc29sdmVkIGhhbmRsZXJJbmZvIHdpdGgKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIHJlc29sdmVkIGhhbmRsZXJJbmZvCi0gICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTdGF0ZS5oYW5kbGVySW5mb3NbcGF5bG9hZC5yZXNvbHZlSW5kZXgrK10gPSByZXNvbHZlZEhh
bmRsZXJJbmZvOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghd2FzQWxyZWFkeVJlc29sdmVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSByZWRpcmVjdCBob29rLiBU
aGUgcmVhc29uIHdlIGNhbGwgaXQgaGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdnMu
IGFmdGVyTW9kZWwgaXMgc28gdGhhdCByZWRpcmVjdHMgaW50byBjaGlsZAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcm91dGVzIGRvbid0IHJlLXJ1biB0aGUgbW9kZWwgaG9va3MgZm9yIHRo
aXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHktcmVzb2x2ZWQgcm91dGUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IHJlc29sdmVkSGFuZGxlckluZm8u
aGFuZGxlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyICYmIGhhbmRsZXIu
cmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnJlZGlyZWN0
KHJlc29sdmVkSGFuZGxlckluZm8uY29udGV4dCwgcGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBQcm9jZWVkIGFmdGVyIGVuc3VyaW5nIHRoYXQgdGhlIHJlZGlyZWN0IGhvb2sKLSAgICAgICAg
ICAgICAgICAgICAgLy8gZGlkbid0IGFib3J0IHRoaXMgdHJhbnNpdGlvbiBieSB0cmFuc2l0aW9u
aW5nIGVsc2V3aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyU2hvdWxkQ29u
dGludWUoKS50aGVuKHJlc29sdmVPbmVIYW5kbGVySW5mbywgbnVsbCwgcHJvbWlzZUxhYmVsKCdS
ZXNvbHZlIGhhbmRsZXInKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ZnVuY3Rpb24gcmVzb2x2ZU9uZUhhbmRsZXJJbmZvKCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAocGF5bG9hZC5yZXNvbHZlSW5kZXggPT09IGN1cnJlbnRTdGF0ZS5oYW5kbGVySW5mb3MubGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGlzIHRoZSBvbmx5IHBv
c3NpYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmdWxmaWxsIHZhbHVlIG9mIFRyYW5z
aXRpb25TdGF0ZSNyZXNvbHZlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlOiBjdXJyZW50U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
ckluZm8gPSBjdXJyZW50U3RhdGUuaGFuZGxlckluZm9zW3BheWxvYWQucmVzb2x2ZUluZGV4XTsK
LQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlckluZm8ucmVzb2x2ZShpbm5lclNo
b3VsZENvbnRpbnVlLCBwYXlsb2FkKQotICAgICAgICAgICAgICAgICAgICAudGhlbihwcm9jZWVk
LCBudWxsLCBwcm9taXNlTGFiZWwoJ1Byb2NlZWQnKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0g
PSBUcmFuc2l0aW9uU3RhdGU7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvdHJhbnNpdGlv
biIsCi0gICAgWyJyc3ZwL3Byb21pc2UiLCAiLi9oYW5kbGVyLWluZm8iLCAiLi91dGlscyIsICJl
eHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgUmVzb2x2ZWRIYW5kbGVySW5mbyA9IF9fZGVwZW5kZW5jeTJfXy5SZXNvbHZlZEhhbmRs
ZXJJbmZvOwotICAgICAgICB2YXIgdHJpZ2dlciA9IF9fZGVwZW5kZW5jeTNfXy50cmlnZ2VyOwot
ICAgICAgICB2YXIgc2xpY2UgPSBfX2RlcGVuZGVuY3kzX18uc2xpY2U7Ci0gICAgICAgIHZhciBs
b2cgPSBfX2RlcGVuZGVuY3kzX18ubG9nOwotICAgICAgICB2YXIgcHJvbWlzZUxhYmVsID0gX19k
ZXBlbmRlbmN5M19fLnByb21pc2VMYWJlbDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
QHByaXZhdGUKLQotICAgICAgICAgICAgICBBIFRyYW5zaXRpb24gaXMgYSB0aGVubmFibGUgKGEg
cHJvbWlzZS1saWtlIG9iamVjdCkgdGhhdCByZXByZXNlbnRzCi0gICAgICAgICAgICAgIGFuIGF0
dGVtcHQgdG8gdHJhbnNpdGlvbiB0byBhbm90aGVyIHJvdXRlLiBJdCBjYW4gYmUgYWJvcnRlZCwg
ZWl0aGVyCi0gICAgICAgICAgICAgIGV4cGxpY2l0bHkgdmlhIGBhYm9ydGAgb3IgYnkgYXR0ZW1w
dGluZyBhbm90aGVyIHRyYW5zaXRpb24gd2hpbGUgYQotICAgICAgICAgICAgICBwcmV2aW91cyBv
bmUgaXMgc3RpbGwgdW5kZXJ3YXkuIEFuIGFib3J0ZWQgdHJhbnNpdGlvbiBjYW4gYWxzbwotICAg
ICAgICAgICAgICBiZSBgcmV0cnkoKWBkIGxhdGVyLgotICAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIFRyYW5zaXRpb24ocm91dGVyLCBpbnRlbnQsIHN0YXRlLCBlcnJvcikgewotICAg
ICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSB0aGlzOwotICAgICAgICAgICAgdGhpcy5zdGF0ZSA9
IHN0YXRlIHx8IHJvdXRlci5zdGF0ZTsKLSAgICAgICAgICAgIHRoaXMuaW50ZW50ID0gaW50ZW50
OwotICAgICAgICAgICAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7Ci0gICAgICAgICAgICB0aGlzLmRh
dGEgPSB0aGlzLmludGVudCAmJiB0aGlzLmludGVudC5kYXRhIHx8IHt9OwotICAgICAgICAgICAg
dGhpcy5yZXNvbHZlZE1vZGVscyA9IHt9OwotICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9
IHt9OwotCi0gICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnBy
b21pc2UgPSBQcm9taXNlLnJlamVjdChlcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3RhdGUpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLnBhcmFtcyA9IHN0YXRlLnBhcmFtczsKLSAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5
UGFyYW1zID0gc3RhdGUucXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVy
SW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbGVuID0g
c3RhdGUuaGFuZGxlckluZm9zLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0TmFtZSA9IHN0YXRlLmhhbmRsZXJJbmZvc1tz
dGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoLTFdLm5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBzdGF0ZS5oYW5kbGVySW5mb3NbaV07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBhbGwgc2VlbXMgaGFja3kKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYW5kbGVySW5mby5pc1Jlc29sdmVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnBpdm90SGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZW5jZSA9IFRyYW5zaXRpb24uY3Vy
cmVudFNlcXVlbmNlKys7Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gc3RhdGUucmVz
b2x2ZShjaGVja0ZvckFib3J0LCB0aGlzKVsnY2F0Y2gnXShmdW5jdGlvbihyZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC53YXNBYm9ydGVkIHx8IHRyYW5zaXRpb24uaXNB
Ym9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qo
bG9nQWJvcnQodHJhbnNpdGlvbikpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi50cmlnZ2VyKCdlcnJvcicsIHJlc3VsdC5l
cnJvciwgdHJhbnNpdGlvbiwgcmVzdWx0LmhhbmRsZXJXaXRoRXJyb3IpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNpdGlvbi5hYm9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdC5lcnJvcik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9LCBwcm9taXNlTGFiZWwoJ0hhbmRsZSBBYm9ydCcpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gUHJvbWlz
ZS5yZXNvbHZlKHRoaXMuc3RhdGUpOwotICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0ge307
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yQWJvcnQoKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24uaXNBYm9ydGVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh1bmRlZmluZWQsIHByb21pc2VMYWJlbCgi
VHJhbnNpdGlvbiBhYm9ydGVkIC0gcmVqZWN0IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFRyYW5zaXRpb24uY3VycmVudFNlcXVlbmNl
ID0gMDsKLQotICAgICAgICBUcmFuc2l0aW9uLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIHRh
cmdldE5hbWU6IG51bGwsCi0gICAgICAgICAgICB1cmxNZXRob2Q6ICd1cGRhdGUnLAotICAgICAg
ICAgICAgaW50ZW50OiBudWxsLAotICAgICAgICAgICAgcGFyYW1zOiBudWxsLAotICAgICAgICAg
ICAgcGl2b3RIYW5kbGVyOiBudWxsLAotICAgICAgICAgICAgcmVzb2x2ZUluZGV4OiAwLAotICAg
ICAgICAgICAgaGFuZGxlckluZm9zOiBudWxsLAotICAgICAgICAgICAgcmVzb2x2ZWRNb2RlbHM6
IG51bGwsCi0gICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSwKLSAgICAgICAgICAgIHN0YXRlOiBu
dWxsLAotICAgICAgICAgICAgcXVlcnlQYXJhbXNPbmx5OiBmYWxzZSwKLQotICAgICAgICAgICAg
aXNUcmFuc2l0aW9uOiB0cnVlLAotCi0gICAgICAgICAgICBpc0V4aXRpbmc6IGZ1bmN0aW9uKGhh
bmRsZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluZm9zID0gdGhpcy5oYW5kbGVy
SW5mb3M7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJbmZv
cy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxl
ckluZm8gPSBoYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVy
SW5mby5uYW1lID09PSBoYW5kbGVyIHx8IGhhbmRsZXJJbmZvLmhhbmRsZXIgPT09IGhhbmRsZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBA
cHVibGljCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIFRyYW5zaXRpb24ncyBpbnRlcm5hbCBw
cm9taXNlLiBDYWxsaW5nIGAudGhlbmAgb24gdGhpcyBwcm9wZXJ0eQotICAgICAgICAgICAgICAg
ICAgICBpcyB0aGF0IHNhbWUgYXMgY2FsbGluZyBgLnRoZW5gIG9uIHRoZSBUcmFuc2l0aW9uIG9i
amVjdCBpdHNlbGYsIGJ1dAotICAgICAgICAgICAgICAgICAgICB0aGlzIHByb3BlcnR5IGlzIGV4
cG9zZWQgZm9yIHdoZW4geW91IHdhbnQgdG8gcGFzcyBhcm91bmQgYQotICAgICAgICAgICAgICAg
ICAgICBUcmFuc2l0aW9uJ3MgcHJvbWlzZSwgYnV0IG5vdCB0aGUgVHJhbnNpdGlvbiBvYmplY3Qg
aXRzZWxmLCBzaW5jZQotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uIG9iamVjdCBjYW4g
YmUgZXh0ZXJuYWxseSBgYWJvcnRgZWQsIHdoaWxlIHRoZSBwcm9taXNlCi0gICAgICAgICAgICAg
ICAgICAgIGNhbm5vdC4KLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvbWlz
ZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMK
LQotICAgICAgICAgICAgICAgICAgICBDdXN0b20gc3RhdGUgY2FuIGJlIHN0b3JlZCBvbiBhIFRy
YW5zaXRpb24ncyBgZGF0YWAgb2JqZWN0LgotICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbiBi
ZSB1c2VmdWwgZm9yIGRlY29yYXRpbmcgYSBUcmFuc2l0aW9uIHdpdGhpbiBhbiBlYXJsaWVyCi0g
ICAgICAgICAgICAgICAgICAgIGhvb2sgYW5kIHNoYXJlZCB3aXRoIGEgbGF0ZXIgaG9vay4gUHJv
cGVydGllcyBzZXQgb24gYGRhdGFgIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgYmUgY29waWVk
IHRvIG5ldyB0cmFuc2l0aW9ucyBnZW5lcmF0ZWQgYnkgY2FsbGluZyBgcmV0cnlgIG9uIHRoaXMK
LSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgZGF0YTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBwdWJsaWMKLQotICAgICAgICAgICAgICAgICAgICBBIHN0YW5kYXJkIHByb21pc2Ug
aG9vayB0aGF0IHJlc29sdmVzIGlmIHRoZSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAg
IHN1Y2NlZWRzIGFuZCByZWplY3RzIGlmIGl0IGZhaWxzL3JlZGlyZWN0cy9hYm9ydHMuCi0KLSAg
ICAgICAgICAgICAgICAgICAgRm9yd2FyZHMgdG8gdGhlIGludGVybmFsIGBwcm9taXNlYCBwcm9w
ZXJ0eSB3aGljaCB5b3UgY2FuCi0gICAgICAgICAgICAgICAgICAgIHVzZSBpbiBzaXR1YXRpb25z
IHdoZXJlIHlvdSB3YW50IHRvIHBhc3MgYXJvdW5kIGEgdGhlbm5hYmxlLAotICAgICAgICAgICAg
ICAgICAgICBidXQgbm90IHRoZSBUcmFuc2l0aW9uIGl0c2VsZi4KLQotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBzdWNjZXNzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7RnVuY3Rpb259IGZhaWx1cmUKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
dGhlbjogZnVuY3Rpb24oc3VjY2VzcywgZmFpbHVyZSkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnByb21pc2UudGhlbihzdWNjZXNzLCBmYWlsdXJlKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0KLSAgICAgICAg
ICAgICAgICAgICAgQWJvcnRzIHRoZSBUcmFuc2l0aW9uLiBOb3RlIHlvdSBjYW4gYWxzbyBpbXBs
aWNpdGx5IGFib3J0IGEgdHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBieSBpbml0aWF0
aW5nIGFub3RoZXIgdHJhbnNpdGlvbiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyB1bmRlcndheS4K
LSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWJvcnRlZCkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbG9nKHRo
aXMucm91dGVyLCB0aGlzLnNlcXVlbmNlLCB0aGlzLnRhcmdldE5hbWUgKyAiOiB0cmFuc2l0aW9u
IHdhcyBhYm9ydGVkIik7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbnRlbnQucHJlVHJhbnNpdGlv
blN0YXRlID0gdGhpcy5yb3V0ZXIuc3RhdGU7Ci0gICAgICAgICAgICAgICAgdGhpcy5pc0Fib3J0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB0aGlzLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0cmll
cyBhIHByZXZpb3VzbHktYWJvcnRlZCB0cmFuc2l0aW9uIChtYWtpbmcgc3VyZSB0byBhYm9ydCB0
aGUKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbiBpZiBpdCdzIHN0aWxsIGFjdGl2ZSku
IFJldHVybnMgYSBuZXcgdHJhbnNpdGlvbiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIHJlcHJl
c2VudHMgdGhlIG5ldyBhdHRlbXB0IHRvIHRyYW5zaXRpb24uCi0gICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJldHJ5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBU
T0RPOiBhZGQgdGVzdHMgZm9yIG1lcmdlZCBzdGF0ZSByZXRyeSgpcwotICAgICAgICAgICAgICAg
IHRoaXMuYWJvcnQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIudHJhbnNp
dGlvbkJ5SW50ZW50KHRoaXMuaW50ZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotCi0gICAgICAgICAgICAg
ICAgICAgIFNldHMgdGhlIFVSTC1jaGFuZ2luZyBtZXRob2QgdG8gYmUgZW1wbG95ZWQgYXQgdGhl
IGVuZCBvZiBhCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbi4gQnkg
ZGVmYXVsdCwgYSBuZXcgVHJhbnNpdGlvbiB3aWxsIGp1c3QKLSAgICAgICAgICAgICAgICAgICAg
dXNlIGB1cGRhdGVVUkxgLCBidXQgcGFzc2luZyAncmVwbGFjZScgdG8gdGhpcyBtZXRob2Qgd2ls
bAotICAgICAgICAgICAgICAgICAgICBjYXVzZSB0aGUgVVJMIHRvIHVwZGF0ZSB1c2luZyAncmVw
bGFjZVdpdGgnIGluc3RlYWQuIE9taXR0aW5nCi0gICAgICAgICAgICAgICAgICAgIGEgcGFyYW1l
dGVyIHdpbGwgZGlzYWJsZSB0aGUgVVJMIGNoYW5nZSwgYWxsb3dpbmcgZm9yIHRyYW5zaXRpb25z
Ci0gICAgICAgICAgICAgICAgICAgIHRoYXQgZG9uJ3QgdXBkYXRlIHRoZSBVUkwgYXQgY29tcGxl
dGlvbiAodGhpcyBpcyBhbHNvIHVzZWQgZm9yCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVVS
TCwgc2luY2UgdGhlIFVSTCBoYXMgYWxyZWFkeSBjaGFuZ2VkIGJlZm9yZSB0aGUKLSAgICAgICAg
ICAgICAgICAgICAgdHJhbnNpdGlvbiB0b29rIHBsYWNlKS4KLQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIHRoZSB0eXBlIG9mIFVSTC1jaGFuZ2luZyBtZXRob2Qg
dG8gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIGVuZCBvZiBhIHRyYW5zaXRpb24u
IEFjY2VwdGVkIHZhbHVlcyBhcmUgJ3JlcGxhY2UnLAotICAgICAgICAgICAgICAgICAgICAgIGZh
bHN5IHZhbHVlcywgb3IgYW55IG90aGVyIG5vbi1mYWxzeSB2YWx1ZSAod2hpY2ggaXMKLSAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcnByZXRlZCBhcyBhbiB1cGRhdGVVUkwgdHJhbnNpdGlvbiku
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhpcyB0cmFuc2l0
aW9uCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24o
bWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy51cmxNZXRob2QgPSBtZXRob2Q7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotCi0gICAgICAgICAgICAgICAgICAgIEZp
cmVzIGFuIGV2ZW50IG9uIHRoZSBjdXJyZW50IGxpc3Qgb2YgcmVzb2x2ZWQvcmVzb2x2aW5nCi0g
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzIHdpdGhpbiB0aGlzIHRyYW5zaXRpb24uIFVzZWZ1
bCBmb3IgZmlyaW5nIGV2ZW50cwotICAgICAgICAgICAgICAgICAgICBvbiByb3V0ZSBoaWVyYXJj
aGllcyB0aGF0IGhhdmVuJ3QgZnVsbHkgYmVlbiBlbnRlcmVkIHlldC4KLQotICAgICAgICAgICAg
ICAgICAgICBOb3RlOiBUaGlzIG1ldGhvZCBpcyBhbHNvIGFsaWFzZWQgYXMgYHNlbmRgCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtCb29sZWFufSBbaWdub3JlRmFpbHVyZT1mYWxzZV0g
YSBib29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciB1bmhhbmRsZWQgZXZlbnRzIHRocm93IGFuIGVy
cm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9m
IHRoZSBldmVudCB0byBmaXJlCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRy
aWdnZXI6IGZ1bmN0aW9uIChpZ25vcmVGYWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFy
Z3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBp
Z25vcmVGYWlsdXJlID09PSAnYm9vbGVhbicpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJncy5z
aGlmdCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFRocm93IGVycm9ycyBvbiB1bmhhbmRsZWQgdHJpZ2dlciBldmVudHMgYnkgZGVmYXVsdAotICAg
ICAgICAgICAgICAgICAgICBpZ25vcmVGYWlsdXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHRyaWdnZXIodGhpcy5yb3V0ZXIsIHRoaXMuc3RhdGUuaGFuZGxl
ckluZm9zLnNsaWNlKDAsIHRoaXMucmVzb2x2ZUluZGV4ICsgMSksIGlnbm9yZUZhaWx1cmUsIGFy
Z3MpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBwdWJsaWMKLQotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9ucyBhcmUgYWJvcnRl
ZCBhbmQgdGhlaXIgcHJvbWlzZXMgcmVqZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBy
ZWRpcmVjdHMgb2NjdXI7IHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlCi0gICAgICAgICAg
ICAgICAgICAgIHRoYXQgd2lsbCBmb2xsb3cgYW55IHJlZGlyZWN0cyB0aGF0IG9jY3VyIGFuZCBm
dWxmaWxsCi0gICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHZhbHVlIGZ1bGZpbGxlZCBieSBh
bnkgcmVkaXJlY3RpbmcgdHJhbnNpdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBvY2N1
ci4KLQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhh
dCBmdWxmaWxscyB3aXRoIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdGhh
dCB0aGUgZmluYWwgcmVkaXJlY3RpbmcgdHJhbnNpdGlvbiBmdWxmaWxscyB3aXRoCi0gICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvbGxvd1JlZGlyZWN0czogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLnByb21pc2VbJ2NhdGNoJ10oZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5hY3RpdmVUcmFuc2l0aW9uLmZvbGxvd1JlZGly
ZWN0cygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdChyZWFzb24pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiAiVHJhbnNpdGlvbiAoc2VxdWVuY2UgIiArIHRoaXMuc2VxdWVuY2UgKyAiKSI7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9nOiBmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgbG9nKHRoaXMucm91dGVyLCB0aGlzLnNlcXVl
bmNlLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvLyBB
bGlhcyAndHJpZ2dlcicgYXMgJ3NlbmQnCi0gICAgICAgIFRyYW5zaXRpb24ucHJvdG90eXBlLnNl
bmQgPSBUcmFuc2l0aW9uLnByb3RvdHlwZS50cmlnZ2VyOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgIExvZ3MgYW5kIHJldHVybnMgYSBUcmFu
c2l0aW9uQWJvcnRlZCBlcnJvci4KLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBs
b2dBYm9ydCh0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICBsb2codHJhbnNpdGlvbi5yb3V0ZXIs
IHRyYW5zaXRpb24uc2VxdWVuY2UsICJkZXRlY3RlZCBhYm9ydC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgVHJhbnNpdGlvbkFib3J0ZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIFRyYW5zaXRpb25BYm9ydGVkKG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHRoaXMubWVzc2Fn
ZSA9IChtZXNzYWdlIHx8ICJUcmFuc2l0aW9uQWJvcnRlZCIpOwotICAgICAgICAgICAgdGhpcy5u
YW1lID0gIlRyYW5zaXRpb25BYm9ydGVkIjsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uOwotICAgICAgICBfX2V4cG9ydHNfXy5sb2dBYm9y
dCA9IGxvZ0Fib3J0OwotICAgICAgICBfX2V4cG9ydHNfXy5UcmFuc2l0aW9uQWJvcnRlZCA9IFRy
YW5zaXRpb25BYm9ydGVkOwotICAgIH0pOwotICAgIGRlZmluZSgicm91dGVyL3V0aWxzIiwKLSAg
ICBbImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKLQot
ICAgICAgICB2YXIgX2lzQXJyYXk7Ci0gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSkgewotICAg
ICAgICAgICAgX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkgewotICAgICAgICAgICAgICAgIHJldHVy
biBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICJbb2JqZWN0IEFycmF5XSI7
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgX2lzQXJyYXkg
PSBBcnJheS5pc0FycmF5OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfaXNB
cnJheTsKLSAgICAgICAgX19leHBvcnRzX18uaXNBcnJheSA9IGlzQXJyYXk7Ci0gICAgICAgIGZ1
bmN0aW9uIG1lcmdlKGhhc2gsIG90aGVyKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGlu
IG90aGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVyLmhhc093blByb3BlcnR5KHByb3Ap
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhc2hbcHJvcF0gPSBvdGhlcltwcm9wXTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgb0Ny
ZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocHJvdG8pIHsKLSAgICAgICAgICAgIGZ1
bmN0aW9uIEYoKSB7fQotICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBwcm90bzsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgRigpOwotICAgICAgICB9OwotICAgICAgICBfX2V4cG9ydHNfXy5vQ3Jl
YXRlID0gb0NyZWF0ZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgRXh0cmFjdHMgcXVlcnkgcGFyYW1zIGZyb20gdGhlIGVuZCBvZiBhbiBhcnJh
eQotICAgICAgICAgICAgKiovCi0gICAgICAgIGZ1bmN0aW9uIGV4dHJhY3RRdWVyeVBhcmFtcyhh
cnJheSkgewotICAgICAgICAgICAgdmFyIGxlbiA9IChhcnJheSAmJiBhcnJheS5sZW5ndGgpLCBo
ZWFkLCBxdWVyeVBhcmFtczsKLQotICAgICAgICAgICAgaWYgKGxlbiAmJiBsZW4gPiAwICYmIGFy
cmF5W2xlbiAtIDFdICYmIGFycmF5W2xlbiAtIDFdLmhhc093blByb3BlcnR5KCdxdWVyeVBhcmFt
cycpKSB7Ci0gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBhcnJheVtsZW4gLSAxXS5xdWVy
eVBhcmFtczsKLSAgICAgICAgICAgICAgICBoZWFkID0gc2xpY2UuY2FsbChhcnJheSwgMCwgbGVu
IC0gMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtoZWFkLCBxdWVyeVBhcmFtc107Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBbYXJyYXksIG51bGxdOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZXh0cmFjdFF1
ZXJ5UGFyYW1zID0gZXh0cmFjdFF1ZXJ5UGFyYW1zOyAvKioKLSAgICAgICAgICAgICAgQHByaXZh
dGUKLQotICAgICAgICAgICAgICBDb2VyY2VzIHF1ZXJ5IHBhcmFtIHByb3BlcnRpZXMgYW5kIGFy
cmF5IGVsZW1lbnRzIGludG8gc3RyaW5ncy4KLSAgICAgICAgICAgICoqLwotICAgICAgICBmdW5j
dGlvbiBjb2VyY2VRdWVyeVBhcmFtc1RvU3RyaW5nKHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIHF1ZXJ5UGFyYW1zW2tleV0gPT09ICdudW1iZXInKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHF1ZXJ5UGFyYW1zW2tleV0gPSAnJyArIHF1ZXJ5UGFyYW1zW2tleV07Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0FycmF5KHF1ZXJ5UGFyYW1zW2tleV0pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcXVlcnlQYXJhbXNba2V5XS5sZW5ndGg7IGkgPCBs
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tleV1baV0gPSAn
JyArIHF1ZXJ5UGFyYW1zW2tleV1baV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbG9nKHJv
dXRlciwgc2VxdWVuY2UsIG1zZykgewotICAgICAgICAgICAgaWYgKCFyb3V0ZXIubG9nKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMykgewotICAgICAgICAgICAgICAgIHJvdXRlci5sb2coIlRy
YW5zaXRpb24gIyIgKyBzZXF1ZW5jZSArICI6ICIgKyBtc2cpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBtc2cgPSBzZXF1ZW5jZTsKLSAgICAgICAgICAgICAgICByb3V0
ZXIubG9nKG1zZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5sb2cgPSBsb2c7Ci0gICAgICAgIGZ1bmN0aW9uIGJpbmQoY29udGV4dCwgZm4pIHsKLSAg
ICAgICAgICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHM7Ci0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
Ym91bmRBcmdzLCAyKTsKLSAgICAgICAgICAgICAgICBhcmdzLnB1c2godmFsdWUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5iaW5kID0gYmluZDsKLSAgICAgICAg
ZnVuY3Rpb24gaXNQYXJhbShvYmplY3QpIHsKLSAgICAgICAgICAgIHJldHVybiAodHlwZW9mIG9i
amVjdCA9PT0gInN0cmluZyIgfHwgb2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBv
YmplY3QgPT09ICJudW1iZXIiIHx8IG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcik7Ci0gICAgICAg
IH0KLQotCi0gICAgICAgIGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGwgJiYgZmFsc2Ug
IT09IGNhbGxiYWNrKGFycmF5W2ldKTsgaSsrKSB7fQotICAgICAgICB9Ci0KLSAgICAgICAgX19l
eHBvcnRzX18uZm9yRWFjaCA9IGZvckVhY2g7Ci0gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXIocm91
dGVyLCBoYW5kbGVySW5mb3MsIGlnbm9yZUZhaWx1cmUsIGFyZ3MpIHsKLSAgICAgICAgICAgIGlm
IChyb3V0ZXIudHJpZ2dlckV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgcm91dGVyLnRyaWdnZXJF
dmVudChoYW5kbGVySW5mb3MsIGlnbm9yZUZhaWx1cmUsIGFyZ3MpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG5hbWUgPSBhcmdzLnNo
aWZ0KCk7Ci0KLSAgICAgICAgICAgIGlmICghaGFuZGxlckluZm9zKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlnbm9yZUZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5v
dCB0cmlnZ2VyIGV2ZW50ICciICsgbmFtZSArICInLiBUaGVyZSBhcmUgbm8gYWN0aXZlIGhhbmRs
ZXJzIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBldmVudFdhc0hhbmRsZWQg
PSBmYWxzZTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZvcy5sZW5ndGgt
MTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5k
bGVySW5mb3NbaV0sCi0gICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRs
ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5ldmVudHMgJiYgaGFuZGxlci5ldmVu
dHNbbmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuZXZlbnRzW25hbWVd
LmFwcGx5KGhhbmRsZXIsIGFyZ3MpID09PSB0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBldmVudFdhc0hhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWV2ZW50
V2FzSGFuZGxlZCAmJiAhaWdub3JlRmFpbHVyZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTm90aGluZyBoYW5kbGVkIHRoZSBldmVudCAnIiArIG5hbWUgKyAiJy4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnRyaWdnZXIgPSB0
cmlnZ2VyOwotICAgICAgICBmdW5jdGlvbiBnZXRDaGFuZ2VsaXN0KG9sZE9iamVjdCwgbmV3T2Jq
ZWN0KSB7Ci0gICAgICAgICAgICB2YXIga2V5OwotICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB7
Ci0gICAgICAgICAgICAgICAgYWxsOiB7fSwKLSAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSwK
LSAgICAgICAgICAgICAgICByZW1vdmVkOiB7fQotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgbWVyZ2UocmVzdWx0cy5hbGwsIG5ld09iamVjdCk7Ci0KLSAgICAgICAgICAgIHZhciBkaWRD
aGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvZXJjZVF1ZXJ5UGFyYW1zVG9TdHJpbmcob2xk
T2JqZWN0KTsKLSAgICAgICAgICAgIGNvZXJjZVF1ZXJ5UGFyYW1zVG9TdHJpbmcobmV3T2JqZWN0
KTsKLQotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbW92YWxzCi0gICAgICAgICAgICBmb3Ig
KGtleSBpbiBvbGRPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkT2JqZWN0Lmhhc093
blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdPYmplY3QuaGFz
T3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucmVtb3ZlZFtrZXldID0gb2xk
T2JqZWN0W2tleV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjaGFuZ2VzCi0gICAgICAg
ICAgICBmb3IgKGtleSBpbiBuZXdPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAobmV3T2Jq
ZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJy
YXkob2xkT2JqZWN0W2tleV0pICYmIGlzQXJyYXkobmV3T2JqZWN0W2tleV0pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob2xkT2JqZWN0W2tleV0ubGVuZ3RoICE9PSBuZXdPYmplY3Rb
a2V5XS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNoYW5n
ZWRba2V5XSA9IG5ld09iamVjdFtrZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
ZENoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2xkT2JqZWN0W2tleV0u
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvbGRPYmplY3Rba2V5XVtpXSAhPT0gbmV3T2JqZWN0W2tleV1baV0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2hhbmdlZFtrZXldID0gbmV3T2JqZWN0
W2tleV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE9iamVjdFtrZXld
ICE9PSBuZXdPYmplY3Rba2V5XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMuY2hhbmdlZFtrZXldID0gbmV3T2JqZWN0W2tleV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIGRpZENoYW5nZSAmJiByZXN1bHRzOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18uZ2V0Q2hhbmdlbGlzdCA9IGdldENoYW5nZWxpc3Q7Ci0gICAgICAgIGZ1
bmN0aW9uIHByb21pc2VMYWJlbChsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuICdSb3V0ZXI6
ICcgKyBsYWJlbDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnByb21pc2VMYWJl
bCA9IHByb21pc2VMYWJlbDsKLSAgICAgICAgZnVuY3Rpb24gc3ViY2xhc3MocGFyZW50Q29uc3Ry
dWN0b3IsIHByb3RvKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBDKHByb3BzKSB7Ci0gICAgICAg
ICAgICAgICAgcGFyZW50Q29uc3RydWN0b3IuY2FsbCh0aGlzLCBwcm9wcyB8fCB7fSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBDLnByb3RvdHlwZSA9IG9DcmVhdGUocGFyZW50Q29uc3Ry
dWN0b3IucHJvdG90eXBlKTsKLSAgICAgICAgICAgIG1lcmdlKEMucHJvdG90eXBlLCBwcm90byk7
Ci0gICAgICAgICAgICByZXR1cm4gQzsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19f
LnN1YmNsYXNzID0gc3ViY2xhc3M7Ci0gICAgICAgIF9fZXhwb3J0c19fLm1lcmdlID0gbWVyZ2U7
Ci0gICAgICAgIF9fZXhwb3J0c19fLnNsaWNlID0gc2xpY2U7Ci0gICAgICAgIF9fZXhwb3J0c19f
LmlzUGFyYW0gPSBpc1BhcmFtOwotICAgICAgICBfX2V4cG9ydHNfXy5jb2VyY2VRdWVyeVBhcmFt
c1RvU3RyaW5nID0gY29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZzsKLSAgICB9KTsKLSAgICBkZWZp
bmUoInJvdXRlciIsCi0gICAgWyIuL3JvdXRlci9yb3V0ZXIiLCAiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgUm91dGVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0K
LSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFJvdXRlcjsKLSAgICB9KTsKLSAgICAv
KioKLSAgICAgIEBjbGFzcyBSU1ZQCi0gICAgICBAbW9kdWxlIFJTVlAKLSAgICAgICovCi0gICAg
ZGVmaW5lKCdyc3ZwLy1pbnRlcm5hbCcsIFsKLSAgICAnLi91dGlscycsCi0gICAgJy4vaW5zdHJ1
bWVudCcsCi0gICAgJy4vY29uZmlnJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAo
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBv
cnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgb2JqZWN0T3JGdW5j
dGlvbiA9IF9fZGVwZW5kZW5jeTFfXy5vYmplY3RPckZ1bmN0aW9uOwotICAgICAgICB2YXIgaXNG
dW5jdGlvbiA9IF9fZGVwZW5kZW5jeTFfXy5pc0Z1bmN0aW9uOwotICAgICAgICB2YXIgbm93ID0g
X19kZXBlbmRlbmN5MV9fLm5vdzsKLSAgICAgICAgdmFyIGluc3RydW1lbnQgPSBfX2RlcGVuZGVu
Y3kyX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGNvbmZpZyA9IF9fZGVwZW5kZW5jeTNfXy5j
b25maWc7Ci0gICAgICAgIGZ1bmN0aW9uIG5vb3AoKSB7fQotICAgICAgICB2YXIgUEVORElORyA9
IHZvaWQgMDsKLSAgICAgICAgdmFyIEZVTEZJTExFRCA9IDE7Ci0gICAgICAgIHZhciBSRUpFQ1RF
RCA9IDI7Ci0gICAgICAgIHZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpOwot
ICAgICAgICBmdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbjsKLSAgICAgICAgICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBlcnJvcjsK
LSAgICAgICAgICAgICAgICByZXR1cm4gR0VUX1RIRU5fRVJST1I7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gdHJ5VGhlbih0aGVuLCB2YWx1ZSwgZnVsZmlsbG1l
bnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25I
YW5kbGVyKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBoYW5kbGVG
b3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHsKLSAgICAgICAgICAgIGNv
bmZpZy5hc3luYyhmdW5jdGlvbiAocHJvbWlzZSQyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNl
YWxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwg
dGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2Vh
bGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VhbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZShwcm9taXNlJDIsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwocHJvbWlzZSQyLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWFsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBz
ZWFsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZWplY3QocHJvbWlzZSQyLCByZWFz
b24pOwotICAgICAgICAgICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZSQyLl9sYWJlbCB8
fCAnIHVua25vd24gcHJvbWlzZScpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNlYWxlZCAmJiBl
cnJvcikgewotICAgICAgICAgICAgICAgICAgICBzZWFsZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICByZWplY3QocHJvbWlzZSQyLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwgcHJvbWlzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gaGFuZGxl
T3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHsKLSAgICAgICAgICAgIHByb21pc2UuX29u
ZXJyb3IgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklM
TEVEKSB7Ci0gICAgICAgICAgICAgICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7
Ci0gICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVu
ZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGVu
YWJsZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocHJvbWlz
ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU1heWJlVGhlbmFibGUo
cHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkgewotICAgICAgICAgICAgaWYgKG1heWJlVGhlbmFibGUg
aW5zdGFuY2VvZiBwcm9taXNlLmNvbnN0cnVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxl
T3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHZhciB0aGVuID0gZ2V0VGhlbihtYXliZVRoZW5hYmxlKTsKLSAg
ICAgICAgICAgICAgICBpZiAodGhlbiA9PT0gR0VUX1RIRU5fRVJST1IpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAg
ICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuKSkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVG
b3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbik7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXli
ZVRoZW5hYmxlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkgewotICAgICAgICAgICAg
aWYgKHByb21pc2UgPT09IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZnVsZmlsbChwcm9taXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdE9yRnVuY3Rpb24odmFsdWUp
KSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCB2YWx1ZSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZ1bGZpbGwocHJvbWlzZSwg
dmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHB1Ymxp
c2hSZWplY3Rpb24ocHJvbWlzZSkgewotICAgICAgICAgICAgaWYgKHByb21pc2UuX29uZXJyb3Ip
IHsKLSAgICAgICAgICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdWJsaXNoKHByb21pc2UpOwotICAgICAgICB9Ci0g
ICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIGlm
IChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykgewotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlOwotICAg
ICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7Ci0gICAgICAgICAgICBpZiAocHJv
bWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNv
bmZpZy5pbnN0cnVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnQoJ2Z1bGZp
bGxlZCcsIHByb21pc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY29uZmlnLmFzeW5jKHB1Ymxpc2gsIHByb21pc2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHJlamVjdChwcm9taXNlLCByZWFz
b24pIHsKLSAgICAgICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykgewotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb21pc2Uu
X3N0YXRlID0gUkVKRUNURUQ7Ci0gICAgICAgICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247
Ci0gICAgICAgICAgICBjb25maWcuYXN5bmMocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVs
ZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgc3Vic2NyaWJlcnMgPSBw
YXJlbnQuX3N1YnNjcmliZXJzOwotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHN1YnNjcmliZXJz
Lmxlbmd0aDsKLSAgICAgICAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7Ci0gICAgICAgICAg
ICBzdWJzY3JpYmVyc1tsZW5ndGhdID0gY2hpbGQ7Ci0gICAgICAgICAgICBzdWJzY3JpYmVyc1ts
ZW5ndGggKyBGVUxGSUxMRURdID0gb25GdWxmaWxsbWVudDsKLSAgICAgICAgICAgIHN1YnNjcmli
ZXJzW2xlbmd0aCArIFJFSkVDVEVEXSA9IG9uUmVqZWN0aW9uOwotICAgICAgICAgICAgaWYgKGxl
bmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnLmFz
eW5jKHB1Ymxpc2gsIHBhcmVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7Ci0gICAgICAgICAgICB2YXIgc3Vic2NyaWJlcnMg
PSBwcm9taXNlLl9zdWJzY3JpYmVyczsKLSAgICAgICAgICAgIHZhciBzZXR0bGVkID0gcHJvbWlz
ZS5fc3RhdGU7Ci0gICAgICAgICAgICBpZiAoY29uZmlnLmluc3RydW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICBpbnN0cnVtZW50KHNldHRsZWQgPT09IEZVTEZJTExFRCA/ICdmdWxmaWxsZWQnIDog
J3JlamVjdGVkJywgcHJvbWlzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3Vi
c2NyaWJlcnMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlz
ZS5fcmVzdWx0OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5s
ZW5ndGg7IGkgKz0gMykgewotICAgICAgICAgICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludm9rZUNh
bGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb21pc2UuX3N1YnNjcmli
ZXJzLmxlbmd0aCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gRXJyb3JPYmplY3Qo
KSB7Ci0gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICB2
YXIgVFJZX0NBVENIX0VSUk9SID0gbmV3IEVycm9yT2JqZWN0KCk7Ci0gICAgICAgIGZ1bmN0aW9u
IHRyeUNhdGNoKGNhbGxiYWNrLCBkZXRhaWwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICAgICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxi
YWNrLCBkZXRhaWwpIHsKLSAgICAgICAgICAgIHZhciBoYXNDYWxsYmFjayA9IGlzRnVuY3Rpb24o
Y2FsbGJhY2spLCB2YWx1ZSwgZXJyb3IsIHN1Y2NlZWRlZCwgZmFpbGVkOwotICAgICAgICAgICAg
aWYgKGhhc0NhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0cnlDYXRjaChjYWxs
YmFjaywgZGV0YWlsKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9F
UlJPUikgewotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBlcnJvciA9IHZhbHVlLmVycm9yOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VlZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBy
b21pc2UgPT09IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlamVjdChwcm9taXNlLCBu
ZXcgVHlwZUVycm9yKCdBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1l
IHByb21pc2UuJykpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGRldGFp
bDsKLSAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7fQotICAgICAgICAgICAg
Ly8gbm9vcAotICAgICAgICAgICAgZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGZhaWxlZCkgewotICAgICAgICAgICAgICAgIHJlamVjdChwcm9taXNlLCBlcnJv
cik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkgewotICAg
ICAgICAgICAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkgewotICAgICAgICAgICAgICAgIHJlamVjdChwcm9t
aXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24g
aW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHsKLSAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2Us
IGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIF9fZXhwb3J0c19fLm5vb3Ag
PSBub29wOwotICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZlID0gcmVzb2x2ZTsKLSAgICAgICAg
X19leHBvcnRzX18ucmVqZWN0ID0gcmVqZWN0OwotICAgICAgICBfX2V4cG9ydHNfXy5mdWxmaWxs
ID0gZnVsZmlsbDsKLSAgICAgICAgX19leHBvcnRzX18uc3Vic2NyaWJlID0gc3Vic2NyaWJlOwot
ICAgICAgICBfX2V4cG9ydHNfXy5wdWJsaXNoID0gcHVibGlzaDsKLSAgICAgICAgX19leHBvcnRz
X18ucHVibGlzaFJlamVjdGlvbiA9IHB1Ymxpc2hSZWplY3Rpb247Ci0gICAgICAgIF9fZXhwb3J0
c19fLmluaXRpYWxpemVQcm9taXNlID0gaW5pdGlhbGl6ZVByb21pc2U7Ci0gICAgICAgIF9fZXhw
b3J0c19fLmludm9rZUNhbGxiYWNrID0gaW52b2tlQ2FsbGJhY2s7Ci0gICAgICAgIF9fZXhwb3J0
c19fLkZVTEZJTExFRCA9IEZVTEZJTExFRDsKLSAgICAgICAgX19leHBvcnRzX18uUkVKRUNURUQg
PSBSRUpFQ1RFRDsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvYWxsLXNldHRsZWQnLCBbCi0g
ICAgJy4vZW51bWVyYXRvcicsCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJy4vdXRpbHMnLAotICAg
ICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5j
eTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmlj
dCc7Ci0gICAgICAgIHZhciBFbnVtZXJhdG9yID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107
Ci0gICAgICAgIHZhciBtYWtlU2V0dGxlZFJlc3VsdCA9IF9fZGVwZW5kZW5jeTFfXy5tYWtlU2V0
dGxlZFJlc3VsdDsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kyX19bJ2RlZmF1
bHQnXTsKLSAgICAgICAgdmFyIG9fY3JlYXRlID0gX19kZXBlbmRlbmN5M19fLm9fY3JlYXRlOwot
ICAgICAgICBmdW5jdGlvbiBBbGxTZXR0bGVkKENvbnN0cnVjdG9yLCBlbnRyaWVzLCBsYWJlbCkg
ewotICAgICAgICAgICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciwgZW50cmll
cywgZmFsc2UsIGxhYmVsKTsKLSAgICAgICAgfQotICAgICAgICBBbGxTZXR0bGVkLnByb3RvdHlw
ZSA9IG9fY3JlYXRlKEVudW1lcmF0b3IucHJvdG90eXBlKTsKLSAgICAgICAgQWxsU2V0dGxlZC5w
cm90b3R5cGUuX3N1cGVyQ29uc3RydWN0b3IgPSBFbnVtZXJhdG9yOwotICAgICAgICBBbGxTZXR0
bGVkLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9IG1ha2VTZXR0bGVkUmVzdWx0OwotICAgICAgICBB
bGxTZXR0bGVkLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignYWxsU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRo
IGFuIGFycmF5Jyk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgUlNW
UC5hbGxTZXR0bGVkYCBpcyBzaW1pbGFyIHRvIGBSU1ZQLmFsbGAsIGJ1dCBpbnN0ZWFkIG9mIGlt
cGxlbWVudGluZwotICAgICAgICAgICAgICBhIGZhaWwtZmFzdCBtZXRob2QsIGl0IHdhaXRzIHVu
dGlsIGFsbCB0aGUgcHJvbWlzZXMgaGF2ZSByZXR1cm5lZCBhbmQKLSAgICAgICAgICAgICAgc2hv
d3MgeW91IGFsbCB0aGUgcmVzdWx0cy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gaGFu
ZGxlIG11bHRpcGxlCi0gICAgICAgICAgICAgIHByb21pc2VzJyBmYWlsdXJlIHN0YXRlcyB0b2dl
dGhlciBhcyBhIHNldC4KLQotICAgICAgICAgICAgICBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlz
IGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUgZ2l2ZW4gcHJvbWlzZXMgaGF2ZSBiZWVuCi0gICAgICAg
ICAgICAgIHNldHRsZWQuIFRoZSByZXR1cm4gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBh
cnJheSBvZiB0aGUgc3RhdGVzIG9mCi0gICAgICAgICAgICAgIHRoZSBwcm9taXNlcyBwYXNzZWQg
aW50byB0aGUgYHByb21pc2VzYCBhcnJheSBhcmd1bWVudC4KLQotICAgICAgICAgICAgICBFYWNo
IHN0YXRlIG9iamVjdCB3aWxsIGVpdGhlciBpbmRpY2F0ZSBmdWxmaWxsbWVudCBvciByZWplY3Rp
b24sIGFuZAotICAgICAgICAgICAgICBwcm92aWRlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9y
IHJlYXNvbi4gVGhlIHN0YXRlcyB3aWxsIHRha2Ugb25lIG9mCi0gICAgICAgICAgICAgIHRoZSBm
b2xsb3dpbmcgZm9ybWF0czoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfQotICAgICAgICAgICAg
ICAgIG9yCi0gICAgICAgICAgICAgIHsgc3RhdGU6ICdyZWplY3RlZCcsIHJlYXNvbjogcmVhc29u
IH0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMSA9IFJTVlAu
UHJvbWlzZS5yZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLlBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcignMicpKTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2Uz
ID0gUlNWUC5Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJzMnKSk7Ci0gICAgICAgICAgICAgIHZh
ciBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwotCi0gICAgICAg
ICAgICAgIFJTVlAuYWxsU2V0dGxlZChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7Ci0g
ICAgICAgICAgICAgICAgLy8gYXJyYXkgPT0gWwotICAgICAgICAgICAgICAgIC8vICAgeyBzdGF0
ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAxIH0sCi0gICAgICAgICAgICAgICAgLy8gICB7IHN0YXRl
OiAncmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCi0gICAgICAgICAgICAgICAgLy8gICB7IHN0
YXRlOiAncmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0KLSAgICAgICAgICAgICAgICAvLyBdCi0g
ICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciB0aGUgc2Vjb25kIGl0ZW0sIHJlYXNvbi5t
ZXNzYWdlIHdpbGwgYmUgIjIiLCBhbmQgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIHRoaXJk
IGl0ZW0sIHJlYXNvbi5tZXNzYWdlIHdpbGwgYmUgIjMiLgotICAgICAgICAgICAgICB9LCBmdW5j
dGlvbihlcnJvcikgewotICAgICAgICAgICAgICAgIC8vIE5vdCBydW4uIChUaGlzIGJsb2NrIHdv
dWxkIG9ubHkgYmUgY2FsbGVkIGlmIGFsbFNldHRsZWQgaGFkIGZhaWxlZCwKLSAgICAgICAgICAg
ICAgICAvLyBmb3IgaW5zdGFuY2UgaWYgcGFzc2VkIGFuIGluY29ycmVjdCBhcmd1bWVudCB0eXBl
LikKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IEBtZXRob2QgYWxsU2V0dGxlZAotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAg
IEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcwotICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgLSBvcHRpb25hbCBzdHJpbmcgdGhhdCBkZXNj
cmliZXMgdGhlIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAg
ICAgICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3
aXRoIGFuIGFycmF5IG9mIHRoZSBzZXR0bGVkCi0gICAgICAgICAgICAgIHN0YXRlcyBvZiB0aGUg
Y29uc3RpdHVlbnQgcHJvbWlzZXMuCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNf
X1snZGVmYXVsdCddID0gZnVuY3Rpb24gYWxsU2V0dGxlZChlbnRyaWVzLCBsYWJlbCkgewotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBBbGxTZXR0bGVkKFByb21pc2UsIGVudHJpZXMsIGxhYmVsKS5w
cm9taXNlOwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9hbGwnLCBbCi0g
ICAgJy4vcHJvbWlzZScsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5k
ZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2
YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2Uu
YWxsYC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGFsbAotICAgICAgICAgICAgICBAc3RhdGlj
Ci0gICAgICAgICAgICAgIEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBh
cnJheSBBcnJheSBvZiBwcm9taXNlcy4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGxh
YmVsIEFuIG9wdGlvbmFsIGxhYmVsLiBUaGlzIGlzIHVzZWZ1bAotICAgICAgICAgICAgICBmb3Ig
dG9vbGluZy4KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10g
PSBmdW5jdGlvbiBhbGwoYXJyYXksIGxhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5hbGwoYXJyYXksIGxhYmVsKTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3Jz
dnAvYXNhcCcsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoX19leHBvcnRzX18pIHsKLSAgICAgICAg
J3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgbGVuZ3RoID0gMDsKLSAgICAgICAgX19leHBvcnRz
X19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykgewotICAgICAgICAg
ICAgcXVldWVbbGVuZ3RoXSA9IGNhbGxiYWNrOwotICAgICAgICAgICAgcXVldWVbbGVuZ3RoICsg
MV0gPSBhcmc7Ci0gICAgICAgICAgICBsZW5ndGggKz0gMjsKLSAgICAgICAgICAgIGlmIChsZW5n
dGggPT09IDIpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBsZW5ndGggaXMgMSwgdGhhdCBtZWFu
cyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guCi0gICAgICAgICAgICAg
ICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVl
IGlzIGZsdXNoZWQsIHRoZXkKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHByb2Nlc3NlZCBi
eSB0aGlzIGZsdXNoIHRoYXQgd2UgYXJlIHNjaGVkdWxpbmcuCi0gICAgICAgICAgICAgICAgc2No
ZWR1bGVGbHVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICB2YXIgYnJv
d3Nlckdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge307
Ci0gICAgICAgIHZhciBCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGJyb3dzZXJHbG9iYWwuTXV0
YXRpb25PYnNlcnZlciB8fCBicm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7Ci0g
ICAgICAgIC8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwCi0gICAgICAgIHZh
ciBpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYg
dHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBNZXNzYWdlQ2hh
bm5lbCAhPT0gJ3VuZGVmaW5lZCc7Ci0gICAgICAgIC8vIG5vZGUKLSAgICAgICAgZnVuY3Rpb24g
dXNlTmV4dFRpY2soKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpOwotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfQotICAgICAgICBmdW5jdGlvbiB1c2VNdXRhdGlvbk9ic2VydmVyKCkgewotICAgICAgICAg
ICAgdmFyIGl0ZXJhdGlvbnMgPSAwOwotICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEJy
b3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTsKLSAgICAgICAgICAgIHZhciBub2RlID0gZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOwotICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShu
b2RlLCB7Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSAKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjsKLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gd2ViIHdvcmtlcgotICAgICAgICBmdW5jdGlvbiB1c2VN
ZXNzYWdlQ2hhbm5lbCgpIHsKLSAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VD
aGFubmVsKCk7Ci0gICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoOwot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVs
LnBvcnQyLnBvc3RNZXNzYWdlKDApOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg
ICBmdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZsdXNoLCAxKTsKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApOwotICAg
ICAgICBmdW5jdGlvbiBmbHVzaCgpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtp
XTsKLSAgICAgICAgICAgICAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdOwotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKGFyZyk7Ci0gICAgICAgICAgICAgICAgcXVldWVbaV0gPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICAgICAgcXVldWVbaSArIDFdID0gdW5kZWZpbmVkOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICAgICAgfQotICAgICAgICB2YXIgc2NoZWR1
bGVGbHVzaDsKLSAgICAgICAgLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0
cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczoKLSAgICAgICAgaWYgKHR5
cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3Mp
ID09PSAnW29iamVjdCBwcm9jZXNzXScpIHsKLSAgICAgICAgICAgIHNjaGVkdWxlRmx1c2ggPSB1
c2VOZXh0VGljaygpOwotICAgICAgICB9IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVy
KSB7Ci0gICAgICAgICAgICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzV29ya2VyKSB7Ci0gICAgICAgICAgICBzY2hlZHVsZUZsdXNo
ID0gdXNlTWVzc2FnZUNoYW5uZWwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNj
aGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBk
ZWZpbmUoJ3JzdnAvY29uZmlnJywgWwotICAgICcuL2V2ZW50cycsCi0gICAgJ2V4cG9ydHMnCi0g
ICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
J3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgRXZlbnRUYXJnZXQgPSBfX2RlcGVuZGVuY3kxX19b
J2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGNvbmZpZyA9IHsKLSAgICAgICAgICAgIGluc3RydW1l
bnQ6IGZhbHNlIAotICAgICAgICB9OwotICAgICAgICBFdmVudFRhcmdldC5taXhpbihjb25maWcp
OwotICAgICAgICBmdW5jdGlvbiBjb25maWd1cmUobmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAg
IGlmIChuYW1lID09PSAnb25lcnJvcicpIHsKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZm9y
IGxlZ2FjeSB1c2VycyB0aGF0IGV4cGVjdCB0aGUgYWN0dWFsCi0gICAgICAgICAgICAgICAgLy8g
ZXJyb3IgdG8gYmUgcGFzc2VkIHRvIHRoZWlyIGZ1bmN0aW9uIGFkZGVkIHZpYQotICAgICAgICAg
ICAgICAgIC8vIGBSU1ZQLmNvbmZpZ3VyZSgnb25lcnJvcicsIHNvbWVGdW5jdGlvbkhlcmUpO2AK
LSAgICAgICAgICAgICAgICBjb25maWcub24oJ2Vycm9yJywgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoID09PSAyKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnW25hbWVdID0gdmFsdWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdbbmFtZV07Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBvcnRzX18uY29uZmlnID0gY29u
ZmlnOwotICAgICAgICBfX2V4cG9ydHNfXy5jb25maWd1cmUgPSBjb25maWd1cmU7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCdyc3ZwL2RlZmVyJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICdleHBv
cnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kx
X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLmRlZmVyYCBy
ZXR1cm5zIGFuIG9iamVjdCBzaW1pbGFyIHRvIGpRdWVyeSdzIGAkLkRlZmVycmVkYC4KLSAgICAg
ICAgICAgICAgYFJTVlAuZGVmZXJgIHNob3VsZCBiZSB1c2VkIHdoZW4gcG9ydGluZyBvdmVyIGNv
ZGUgcmVsaWFudCBvbiBgJC5EZWZlcnJlZGAncwotICAgICAgICAgICAgICBpbnRlcmZhY2UuIE5l
dyBjb2RlIHNob3VsZCB1c2UgdGhlIGBSU1ZQLlByb21pc2VgIGNvbnN0cnVjdG9yIGluc3RlYWQu
Ci0KLSAgICAgICAgICAgICAgVGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIGBSU1ZQLmRlZmVyYCBp
cyBhIHBsYWluIG9iamVjdCB3aXRoIHRocmVlIHByb3BlcnRpZXM6Ci0KLSAgICAgICAgICAgICAg
KiBwcm9taXNlIC0gYW4gYFJTVlAuUHJvbWlzZWAuCi0gICAgICAgICAgICAgICogcmVqZWN0IC0g
YSBmdW5jdGlvbiB0aGF0IGNhdXNlcyB0aGUgYHByb21pc2VgIHByb3BlcnR5IG9uIHRoaXMgb2Jq
ZWN0IHRvCi0gICAgICAgICAgICAgICAgYmVjb21lIHJlamVjdGVkCi0gICAgICAgICAgICAgICog
cmVzb2x2ZSAtIGEgZnVuY3Rpb24gdGhhdCBjYXVzZXMgdGhlIGBwcm9taXNlYCBwcm9wZXJ0eSBv
biB0aGlzIG9iamVjdCB0bwotICAgICAgICAgICAgICAgIGJlY29tZSBmdWxmaWxsZWQuCi0KLSAg
ICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gUlNWUC5kZWZlcigpOwotCi0gICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlKCJTdWNjZXNzISIpOwotCi0gICAgICAgICAgICAgICBkZWZlcmVk
LnByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgIC8vIHZhbHVl
IGhlcmUgaXMgIlN1Y2Nlc3MhIgotICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGRlZmVyCi0gICAgICAgICAgICAgIEBzdGF0aWMK
LSAgICAgICAgICAgICAgQGZvciBSU1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBs
YWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgICAg
ICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0K
LSAgICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rp
b24gZGVmZXIobGFiZWwpIHsKLSAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IHt9OwotICAgICAg
ICAgICAgZGVmZXJyZWQucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCBy
ZWplY3QpIHsKLSAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlID0gcmVzb2x2ZTsKLSAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QgPSByZWplY3Q7Ci0gICAgICAgICAgICB9LCBs
YWJlbCk7Ci0gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7Ci0gICAgICAgIH07Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCdyc3ZwL2VudW1lcmF0b3InLCBbCi0gICAgJy4vdXRpbHMnLAotICAgICcu
Ly1pbnRlcm5hbCcsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5j
eTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmlj
dCc7Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX19kZXBlbmRlbmN5MV9fLmlzQXJyYXk7Ci0gICAg
ICAgIHZhciBpc01heWJlVGhlbmFibGUgPSBfX2RlcGVuZGVuY3kxX18uaXNNYXliZVRoZW5hYmxl
OwotICAgICAgICB2YXIgbm9vcCA9IF9fZGVwZW5kZW5jeTJfXy5ub29wOwotICAgICAgICB2YXIg
cmVqZWN0ID0gX19kZXBlbmRlbmN5Ml9fLnJlamVjdDsKLSAgICAgICAgdmFyIGZ1bGZpbGwgPSBf
X2RlcGVuZGVuY3kyX18uZnVsZmlsbDsKLSAgICAgICAgdmFyIHN1YnNjcmliZSA9IF9fZGVwZW5k
ZW5jeTJfXy5zdWJzY3JpYmU7Ci0gICAgICAgIHZhciBGVUxGSUxMRUQgPSBfX2RlcGVuZGVuY3ky
X18uRlVMRklMTEVEOwotICAgICAgICB2YXIgUkVKRUNURUQgPSBfX2RlcGVuZGVuY3kyX18uUkVK
RUNURUQ7Ci0gICAgICAgIHZhciBQRU5ESU5HID0gX19kZXBlbmRlbmN5Ml9fLlBFTkRJTkc7Ci0g
ICAgICAgIHZhciBBQk9SVF9PTl9SRUpFQ1RJT04gPSB0cnVlOwotICAgICAgICBfX2V4cG9ydHNf
Xy5BQk9SVF9PTl9SRUpFQ1RJT04gPSBBQk9SVF9PTl9SRUpFQ1RJT047Ci0gICAgICAgIGZ1bmN0
aW9uIG1ha2VTZXR0bGVkUmVzdWx0KHN0YXRlLCBwb3NpdGlvbiwgdmFsdWUpIHsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZSA9PT0gRlVMRklMTEVEKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdmdWxmaWxsZWQnLAotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZTogdmFsdWUKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBzdGF0ZTog
J3JlamVjdGVkJywKLSAgICAgICAgICAgICAgICAgICAgcmVhc29uOiB2YWx1ZQotICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBvcnRzX18u
bWFrZVNldHRsZWRSZXN1bHQgPSBtYWtlU2V0dGxlZFJlc3VsdDsKLSAgICAgICAgZnVuY3Rpb24g
RW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQsIGFib3J0T25SZWplY3QsIGxhYmVsKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7Ci0gICAg
ICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCwgbGFiZWwpOwotICAg
ICAgICAgICAgdGhpcy5fYWJvcnRPblJlamVjdCA9IGFib3J0T25SZWplY3Q7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9pbnB1dCA9IGlucHV0OwotICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVu
Z3RoOwotICAgICAgICAgICAgICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9pbml0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVu
Z3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0
aGlzLl9yZXN1bHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZW51bWVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZW1haW5p
bmcgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNl
LCB0aGlzLl9yZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWplY3QodGhpcy5wcm9t
aXNlLCB0aGlzLl92YWxpZGF0aW9uRXJyb3IoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBmdW5jdGlvbiAo
aW5wdXQpIHsKLSAgICAgICAgICAgIHJldHVybiBpc0FycmF5KGlucHV0KTsKLSAgICAgICAgfTsK
LSAgICAgICAgRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBi
ZSBwcm92aWRlZCBhbiBBcnJheScpOwotICAgICAgICB9OwotICAgICAgICBFbnVtZXJhdG9yLnBy
b3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuX3Jlc3VsdCA9
IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Ci0gICAgICAgIH07Ci0gICAgICAgIF9fZXhwb3J0c19f
WydkZWZhdWx0J10gPSBFbnVtZXJhdG9yOwotICAgICAgICBFbnVtZXJhdG9yLnByb3RvdHlwZS5f
ZW51bWVyYXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMu
bGVuZ3RoOwotICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7Ci0gICAgICAg
ICAgICB2YXIgaW5wdXQgPSB0aGlzLl9pbnB1dDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLl9lYWNoRW50cnkoaW5wdXRbaV0sIGkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotICAgICAgICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVu
Y3Rpb24gKGVudHJ5LCBpKSB7Ci0gICAgICAgICAgICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29u
c3RydWN0b3I7Ci0gICAgICAgICAgICBpZiAoaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkgewotICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS5jb25zdHJ1Y3RvciA9PT0gYyAmJiBlbnRyeS5fc3RhdGUg
IT09IFBFTkRJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBl
bnRyeS5fcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl93aWxsU2V0dGxlQXQoYy5yZXNvbHZlKGVudHJ5KSwgaSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9yZW1h
aW5pbmctLTsKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSB0aGlzLl9tYWtlUmVz
dWx0KEZVTEZJTExFRCwgaSwgZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAg
ICAgICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBp
LCB2YWx1ZSkgewotICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7Ci0gICAg
ICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9yZW1haW5pbmctLTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWJvcnRPblJl
amVjdCAmJiBzdGF0ZSA9PT0gUkVKRUNURUQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVqZWN0
KHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSB0aGlzLl9tYWtlUmVzdWx0KHN0YXRlLCBpLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRo
aXMuX3JlbWFpbmluZyA9PT0gMCkgewotICAgICAgICAgICAgICAgIGZ1bGZpbGwocHJvbWlzZSwg
dGhpcy5fcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgRW51bWVy
YXRvci5wcm90b3R5cGUuX21ha2VSZXN1bHQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEVudW1lcmF0
b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkgewotICAg
ICAgICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOwotICAgICAgICAgICAgc3Vic2NyaWJlKHBy
b21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZW51
bWVyYXRvci5fc2V0dGxlZEF0KEZVTEZJTExFRCwgaSwgdmFsdWUpOwotICAgICAgICAgICAgfSwg
ZnVuY3Rpb24gKHJlYXNvbikgewotICAgICAgICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRB
dChSRUpFQ1RFRCwgaSwgcmVhc29uKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotICAg
IH0pOwotICAgIGRlZmluZSgncnN2cC9ldmVudHMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgZnVuY3Rpb24gaW5k
ZXhPZihjYWxsYmFja3MsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y2FsbGJhY2tzW2ldID09PSBjYWxsYmFjaykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
aTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tzRm9yKG9iamVjdCkgewot
ICAgICAgICAgICAgdmFyIGNhbGxiYWNrcyA9IG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrczsKLSAg
ICAgICAgICAgIGlmICghY2FsbGJhY2tzKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tzID0g
b2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzID0ge307Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2tzOwotICAgICAgICB9Ci0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBAY2xhc3MgUlNWUC5FdmVudFRhcmdldAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBv
cnRzX19bJ2RlZmF1bHQnXSA9IHsKLSAgICAgICAgICAgIG1peGluOiBmdW5jdGlvbiAob2JqZWN0
KSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0Lm9uID0gdGhpcy5vbjsKLSAgICAgICAgICAgICAg
ICBvYmplY3Qub2ZmID0gdGhpcy5vZmY7Ci0gICAgICAgICAgICAgICAgb2JqZWN0LnRyaWdnZXIg
PSB0aGlzLnRyaWdnZXI7Ci0gICAgICAgICAgICAgICAgb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tz
ID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgb246IGZ1bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGFsbENhbGxiYWNrcyA9IGNhbGxiYWNrc0Zvcih0aGlzKSwgY2Fs
bGJhY2tzOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5h
bWVdOwotICAgICAgICAgICAgICAgIGlmICghY2FsbGJhY2tzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdID0gW107Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGNhbGxiYWNrcywgY2FsbGJhY2sp
ID09PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIG9mZjogZnVu
Y3Rpb24gKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgYWxsQ2Fs
bGJhY2tzID0gY2FsbGJhY2tzRm9yKHRoaXMpLCBjYWxsYmFja3MsIGluZGV4OwotICAgICAgICAg
ICAgICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgYWxsQ2FsbGJhY2tz
W2V2ZW50TmFtZV0gPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBhbGxDYWxsYmFja3NbZXZlbnRO
YW1lXTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4T2YoY2FsbGJhY2tzLCBjYWxsYmFj
ayk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewotICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24gKGV2ZW50TmFtZSwgb3B0
aW9ucykgewotICAgICAgICAgICAgICAgIHZhciBhbGxDYWxsYmFja3MgPSBjYWxsYmFja3NGb3Io
dGhpcyksIGNhbGxiYWNrcywgY2FsbGJhY2tUdXBsZSwgY2FsbGJhY2ssIGJpbmRpbmc7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNhY2hlIHRoZSBjYWxsYmFja3MubGVuZ3RoIHNp
bmNlIGl0IG1heSBncm93Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayA9IGNhbGxiYWNrc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlv
bnMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9maWx0ZXInLCBbCi0g
ICAgJy4vcHJvbWlzZScsCi0gICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1
bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5j
eTFfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IF9fZGVwZW5kZW5jeTJf
Xy5pc0Z1bmN0aW9uOwotICAgICAgICB2YXIgaXNNYXliZVRoZW5hYmxlID0gX19kZXBlbmRlbmN5
Ml9fLmlzTWF5YmVUaGVuYWJsZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgYFJTVlAuZmls
dGVyYCBpcyBzaW1pbGFyIHRvIEphdmFTY3JpcHQncyBuYXRpdmUgYGZpbHRlcmAgbWV0aG9kLCBl
eGNlcHQgdGhhdCBpdAotICAgICAgICAgICAgICB3YWl0cyBmb3IgYWxsIHByb21pc2VzIHRvIGJl
Y29tZSBmdWxmaWxsZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGBmaWx0ZXJGbmAgb24KLSAgICAgICAg
ICAgICAgZWFjaCBpdGVtIGluIGdpdmVuIHRvIGBwcm9taXNlc2AuIGBSU1ZQLmZpbHRlcmAgcmV0
dXJucyBhIHByb21pc2UgdGhhdCB3aWxsCi0gICAgICAgICAgICAgIGJlY29tZSBmdWxmaWxsZWQg
d2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYGZpbHRlckZuYCBvbiB0aGUgdmFsdWVzIHRoZQot
ICAgICAgICAgICAgICBwcm9taXNlcyBiZWNvbWUgZnVsZmlsbGVkIHdpdGguCi0KLSAgICAgICAg
ICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAg
ICAgICAgICAgIHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsKLSAgICAgICAgICAgICAg
dmFyIHByb21pc2UyID0gUlNWUC5yZXNvbHZlKDIpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlz
ZTMgPSBSU1ZQLnJlc29sdmUoMyk7Ci0KLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW3By
b21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTNdOwotCi0gICAgICAgICAgICAgIHZhciBmaWx0ZXJG
biA9IGZ1bmN0aW9uKGl0ZW0pewotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtID4gMTsKLSAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICBSU1ZQLmZpbHRlcihwcm9taXNlcywgZmls
dGVyRm4pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXsKLSAgICAgICAgICAgICAgICAvLyByZXN1bHQg
aXMgWyAyLCAzIF0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgUlNWUC5maWx0ZXJg
IGFyZSByZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2UKLSAgICAgICAgICAgICAgdGhhdCBpcyBy
ZWplY3RlZCB3aWxsIGJlIGdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSByZXR1cm5lZCBwcm9t
aXNlJ3MKLSAgICAgICAgICAgICAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2UxID0g
UlNWUC5yZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLnJlamVj
dChuZXcgRXJyb3IoIjIiKSk7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVq
ZWN0KG5ldyBFcnJvcigiMyIpKTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gWyBwcm9t
aXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07Ci0KLSAgICAgICAgICAgICAgdmFyIGZpbHRlckZu
ID0gZnVuY3Rpb24oaXRlbSl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPiAxOwotICAg
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIFJTVlAuZmlsdGVyKHByb21pc2VzLCBmaWx0
ZXJGbikudGhlbihmdW5jdGlvbihhcnJheSl7Ci0gICAgICAgICAgICAgICAgLy8gQ29kZSBoZXJl
IG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhCi0gICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgICAgICAgIC8vIHJlYXNvbi5t
ZXNzYWdlID09PSAiMiIKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIGBSU1ZQLmZpbHRlcmAgd2lsbCBhbHNvIHdhaXQgZm9yIGFueSBwcm9taXNl
cyByZXR1cm5lZCBmcm9tIGBmaWx0ZXJGbmAuCi0gICAgICAgICAgICAgIEZvciBpbnN0YW5jZSwg
eW91IG1heSB3YW50IHRvIGZldGNoIGEgbGlzdCBvZiB1c2VycyB0aGVuIHJldHVybiBhIHN1YnNl
dAotICAgICAgICAgICAgICBvZiB0aG9zZSB1c2VycyBiYXNlZCBvbiBzb21lIGFzeW5jaHJvbm91
cyBvcGVyYXRpb246Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAgICAgICAg
ICAgIHZhciBhbGljZSA9IHsgbmFtZTogJ2FsaWNlJyB9OwotICAgICAgICAgICAgICB2YXIgYm9i
ICAgPSB7IG5hbWU6ICdib2InIH07Ci0gICAgICAgICAgICAgIHZhciB1c2VycyA9IFsgYWxpY2Us
IGJvYiBdOwotCi0gICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IHVzZXJzLm1hcChmdW5jdGlv
bih1c2VyKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gUlNWUC5yZXNvbHZlKHVzZXIpOwotICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgZmlsdGVyRm4gPSBmdW5jdGlvbih1
c2VyKXsKLSAgICAgICAgICAgICAgICAvLyBIZXJlLCBBbGljZSBoYXMgcGVybWlzc2lvbnMgdG8g
Y3JlYXRlIGEgYmxvZyBwb3N0LCBidXQgQm9iIGRvZXMgbm90LgotICAgICAgICAgICAgICAgIHJl
dHVybiBnZXRQcml2aWxlZ2VzRm9yVXNlcih1c2VyKS50aGVuKGZ1bmN0aW9uKHByaXZzKXsKLSAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcml2cy5jYW5fY3JlYXRlX2Jsb2dfcG9zdCA9PT0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg
UlNWUC5maWx0ZXIocHJvbWlzZXMsIGZpbHRlckZuKS50aGVuKGZ1bmN0aW9uKHVzZXJzKXsKLSAg
ICAgICAgICAgICAgICAvLyB0cnVlLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgdG9sZCB1cyBvbmx5IEFs
aWNlIGNhbiBjcmVhdGUgYSBibG9nIHBvc3QuCi0gICAgICAgICAgICAgICAgdXNlcnMubGVuZ3Ro
ID09PSAxOwotICAgICAgICAgICAgICAgIC8vIGZhbHNlLCBiZWNhdXNlIEFsaWNlIGlzIHRoZSBv
bmx5IHVzZXIgcHJlc2VudCBpbiBgdXNlcnNgCi0gICAgICAgICAgICAgICAgdXNlcnNbMF0gPT09
IGJvYjsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIEBtZXRob2QgZmlsdGVyCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAg
QGZvciBSU1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlckZuIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVk
IG9uIGVhY2ggcmVzb2x2ZWQgdmFsdWUgdG8KLSAgICAgICAgICAgICAgZmlsdGVyIHRoZSBmaW5h
bCByZXN1bHRzLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwg
c3RyaW5nIGRlc2NyaWJpbmcgdGhlIHByb21pc2UuIFVzZWZ1bCBmb3IKLSAgICAgICAgICAgICAg
dG9vbGluZy4KLSAgICAgICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0KLSAgICAgICAgICAgICov
Ci0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBmaWx0ZXIocHJvbWlz
ZXMsIGZpbHRlckZuLCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBy
b21pc2VzLCBsYWJlbCkudGhlbihmdW5jdGlvbiAodmFsdWVzKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpc0Z1bmN0aW9uKGZpbHRlckZuKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgZmlsdGVyXCdzIHNlY29u
ZCBhcmd1bWVudC4nKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIGxl
bmd0aCA9IHZhbHVlcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gbmV3
IEFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZFtpXSA9IGZpbHRlckZuKHZh
bHVlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBQcm9t
aXNlLmFsbChmaWx0ZXJlZCwgbGFiZWwpLnRoZW4oZnVuY3Rpb24gKGZpbHRlcmVkJDIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkkMiA9IDA7IGkkMiA8IGxlbmd0aDsgaSQyKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChmaWx0ZXJlZCQyW2kkMl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzW25ld0xlbmd0aF0gPSB2YWx1ZXNbaSQyXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdMZW5ndGgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmxlbmd0aCA9IG5ld0xl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUo
J3JzdnAvaGFzaC1zZXR0bGVkJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICcuL2VudW1lcmF0
b3InLAotICAgICcuL3Byb21pc2UtaGFzaCcsCi0gICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRz
JwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1
c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1
bHQnXTsKLSAgICAgICAgdmFyIG1ha2VTZXR0bGVkUmVzdWx0ID0gX19kZXBlbmRlbmN5Ml9fLm1h
a2VTZXR0bGVkUmVzdWx0OwotICAgICAgICB2YXIgUHJvbWlzZUhhc2ggPSBfX2RlcGVuZGVuY3kz
X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIEVudW1lcmF0b3IgPSBfX2RlcGVuZGVuY3kyX19b
J2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIG9fY3JlYXRlID0gX19kZXBlbmRlbmN5NF9fLm9fY3Jl
YXRlOwotICAgICAgICBmdW5jdGlvbiBIYXNoU2V0dGxlZChDb25zdHJ1Y3Rvciwgb2JqZWN0LCBs
YWJlbCkgewotICAgICAgICAgICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3Rvciwg
b2JqZWN0LCBmYWxzZSwgbGFiZWwpOwotICAgICAgICB9Ci0gICAgICAgIEhhc2hTZXR0bGVkLnBy
b3RvdHlwZSA9IG9fY3JlYXRlKFByb21pc2VIYXNoLnByb3RvdHlwZSk7Ci0gICAgICAgIEhhc2hT
ZXR0bGVkLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3RvciA9IEVudW1lcmF0b3I7Ci0gICAgICAg
IEhhc2hTZXR0bGVkLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9IG1ha2VTZXR0bGVkUmVzdWx0Owot
ICAgICAgICBIYXNoU2V0dGxlZC5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2hhc2hTZXR0bGVkIG11c3QgYmUg
Y2FsbGVkIHdpdGggYW4gb2JqZWN0Jyk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBgUlNWUC5oYXNoU2V0dGxlZGAgaXMgc2ltaWxhciB0byBgUlNWUC5hbGxTZXR0bGVk
YCwgYnV0IHRha2VzIGFuIG9iamVjdAotICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGFuIGFycmF5
IGZvciBpdHMgYHByb21pc2VzYCBhcmd1bWVudC4KLQotICAgICAgICAgICAgICBVbmxpa2UgYFJT
VlAuYWxsYCBvciBgUlNWUC5oYXNoYCwgd2hpY2ggaW1wbGVtZW50IGEgZmFpbC1mYXN0IG1ldGhv
ZCwKLSAgICAgICAgICAgICAgYnV0IGxpa2UgYFJTVlAuYWxsU2V0dGxlZGAsIGBoYXNoU2V0dGxl
ZGAgd2FpdHMgdW50aWwgYWxsIHRoZQotICAgICAgICAgICAgICBjb25zdGl0dWVudCBwcm9taXNl
cyBoYXZlIHJldHVybmVkIGFuZCB0aGVuIHNob3dzIHlvdSBhbGwgdGhlIHJlc3VsdHMKLSAgICAg
ICAgICAgICAgd2l0aCB0aGVpciBzdGF0ZXMgYW5kIHZhbHVlcy9yZWFzb25zLiBUaGlzIGlzIHVz
ZWZ1bCBpZiB5b3Ugd2FudCB0bwotICAgICAgICAgICAgICBoYW5kbGUgbXVsdGlwbGUgcHJvbWlz
ZXMnIGZhaWx1cmUgc3RhdGVzIHRvZ2V0aGVyIGFzIGEgc2V0LgotCi0gICAgICAgICAgICAgIFJl
dHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIHRoZSBnaXZlbiBwcm9t
aXNlcyBoYXZlIGJlZW4KLSAgICAgICAgICAgICAgc2V0dGxlZCwgb3IgcmVqZWN0ZWQgaWYgdGhl
IHBhc3NlZCBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotCi0gICAgICAgICAgICAgIFRoZSByZXR1
cm5lZCBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGEgaGFzaCB0aGF0IGhhcyB0aGUgc2FtZSBr
ZXkgbmFtZXMgYXMKLSAgICAgICAgICAgICAgdGhlIGBwcm9taXNlc2Agb2JqZWN0IGFyZ3VtZW50
LiBJZiBhbnkgb2YgdGhlIHZhbHVlcyBpbiB0aGUgb2JqZWN0IGFyZSBub3QKLSAgICAgICAgICAg
ICAgcHJvbWlzZXMsIHRoZXkgd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGUgZnVsZmlsbGVkIG9i
amVjdCBhbmQgbWFya2VkIHdpdGggc3RhdGUKLSAgICAgICAgICAgICAgJ2Z1bGZpbGxlZCcuCi0K
LSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IHsKLSAgICAgICAgICAgICAgICBteVByb21pc2U6
IFJTVlAuUHJvbWlzZS5yZXNvbHZlKDEpLAotICAgICAgICAgICAgICAgIHlvdXJQcm9taXNlOiBS
U1ZQLlByb21pc2UucmVzb2x2ZSgyKSwKLSAgICAgICAgICAgICAgICB0aGVpclByb21pc2U6IFJT
VlAuUHJvbWlzZS5yZXNvbHZlKDMpLAotICAgICAgICAgICAgICAgIG5vdEFQcm9taXNlOiA0Ci0g
ICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgUlNWUC5oYXNoU2V0dGxlZChwcm9taXNl
cykudGhlbihmdW5jdGlvbihoYXNoKXsKLSAgICAgICAgICAgICAgICAvLyBoYXNoIGhlcmUgaXMg
YW4gb2JqZWN0IHRoYXQgbG9va3MgbGlrZToKLSAgICAgICAgICAgICAgICAvLyB7Ci0gICAgICAg
ICAgICAgICAgLy8gICBteVByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTogMSB9
LAotICAgICAgICAgICAgICAgIC8vICAgeW91clByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQn
LCB2YWx1ZTogMiB9LAotICAgICAgICAgICAgICAgIC8vICAgdGhlaXJQcm9taXNlOiB7IHN0YXRl
OiAnZnVsZmlsbGVkJywgdmFsdWU6IDMgfSwKLSAgICAgICAgICAgICAgICAvLyAgIG5vdEFQcm9t
aXNlOiB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IDQgfQotICAgICAgICAgICAgICAgIC8v
IH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgUlNWUC5oYXNoYCBhcmUgcmVqZWN0
ZWQsIHRoZSBzdGF0ZSB3aWxsCi0gICAgICAgICAgICAgIGJlIHNldCB0byAncmVqZWN0ZWQnIGFu
ZCB0aGUgcmVhc29uIGZvciByZWplY3Rpb24gcHJvdmlkZWQuCi0KLSAgICAgICAgICAgICAgRXhh
bXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBw
cm9taXNlcyA9IHsKLSAgICAgICAgICAgICAgICBteVByb21pc2U6IFJTVlAuUHJvbWlzZS5yZXNv
bHZlKDEpLAotICAgICAgICAgICAgICAgIHJlamVjdGVkUHJvbWlzZTogUlNWUC5Qcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoJ3JlamVjdGlvbicpKSwKLSAgICAgICAgICAgICAgICBhbm90aGVyUmVq
ZWN0ZWRQcm9taXNlOiBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbW9yZSByZWplY3Rp
b24nKSkKLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICBSU1ZQLmhhc2hTZXR0bGVk
KHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gpewotICAgICAgICAgICAgICAgIC8vIGhhc2gg
aGVyZSBpcyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAgICAgICAgICAgICAgIC8vIHsK
LSAgICAgICAgICAgICAgICAvLyAgIG15UHJvbWlzZTogICAgICAgICAgICAgIHsgc3RhdGU6ICdm
dWxmaWxsZWQnLCB2YWx1ZTogMSB9LAotICAgICAgICAgICAgICAgIC8vICAgcmVqZWN0ZWRQcm9t
aXNlOiAgICAgICAgeyBzdGF0ZTogJ3JlamVjdGVkJywgcmVhc29uOiBFcnJvciB9LAotICAgICAg
ICAgICAgICAgIC8vICAgYW5vdGhlclJlamVjdGVkUHJvbWlzZTogeyBzdGF0ZTogJ3JlamVjdGVk
JywgcmVhc29uOiBFcnJvciB9LAotICAgICAgICAgICAgICAgIC8vIH0KLSAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgZm9yIHJlamVjdGVkUHJvbWlzZSwgcmVhc29uLm1lc3NhZ2UgPT0gJ3Jl
amVjdGlvbicsCi0gICAgICAgICAgICAgICAgLy8gYW5kIGZvciBhbm90aGVyUmVqZWN0ZWRQcm9t
aXNlLCByZWFzb24ubWVzc2FnZSA9PSAnbW9yZSByZWplY3Rpb24nLgotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW4gaW1wb3J0YW50IG5vdGU6
IGBSU1ZQLmhhc2hTZXR0bGVkYCBpcyBpbnRlbmRlZCBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmpl
Y3RzIHRoYXQKLSAgICAgICAgICAgICAgYXJlIGp1c3QgYSBzZXQgb2Yga2V5cyBhbmQgdmFsdWVz
LiBgUlNWUC5oYXNoU2V0dGxlZGAgd2lsbCBOT1QgcHJlc2VydmUgcHJvdG90eXBlCi0gICAgICAg
ICAgICAgIGNoYWlucy4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24gTXlDb25zdHJ1Y3Rvcigpewot
ICAgICAgICAgICAgICAgIHRoaXMuZXhhbXBsZSA9IFJTVlAuUHJvbWlzZS5yZXNvbHZlKCdFeGFt
cGxlJyk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBNeUNvbnN0cnVjdG9yLnBy
b3RvdHlwZSA9IHsKLSAgICAgICAgICAgICAgICBwcm90b1Byb3BlcnR5OiBSU1ZQLlByb21pc2Uu
cmVzb2x2ZSgnUHJvdG8gUHJvcGVydHknKQotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICAgIHZhciBteU9iamVjdCA9IG5ldyBNeUNvbnN0cnVjdG9yKCk7Ci0KLSAgICAgICAgICAgICAg
UlNWUC5oYXNoU2V0dGxlZChteU9iamVjdCkudGhlbihmdW5jdGlvbihoYXNoKXsKLSAgICAgICAg
ICAgICAgICAvLyBwcm90b1Byb3BlcnR5IHdpbGwgbm90IGJlIHByZXNlbnQsIGluc3RlYWQgeW91
IHdpbGwganVzdCBoYXZlIGFuCi0gICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRoYXQgbG9va3Mg
bGlrZToKLSAgICAgICAgICAgICAgICAvLyB7Ci0gICAgICAgICAgICAgICAgLy8gICBleGFtcGxl
OiB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6ICdFeGFtcGxlJyB9Ci0gICAgICAgICAgICAg
ICAgLy8gfQotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gaGFzaC5oYXNP
d25Qcm9wZXJ0eSgncHJvdG9Qcm9wZXJ0eScpOyAvLyBmYWxzZQotICAgICAgICAgICAgICAgIC8v
ICd1bmRlZmluZWQnID09PSB0eXBlb2YgaGFzaC5wcm90b1Byb3BlcnR5Ci0gICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGhhc2hTZXR0
bGVkCi0gICAgICAgICAgICAgIEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gcHJvbWlzZXMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFs
IHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvbWlzZS4KLSAgICAgICAgICAgICAgVXNlZnVs
IGZvciB0b29saW5nLgotICAgICAgICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRo
YXQgaXMgZnVsZmlsbGVkIHdoZW4gd2hlbiBhbGwgcHJvcGVydGllcyBvZiBgcHJvbWlzZXNgCi0g
ICAgICAgICAgICAgIGhhdmUgYmVlbiBzZXR0bGVkLgotICAgICAgICAgICAgICBAc3RhdGljCi0g
ICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rpb24g
aGFzaFNldHRsZWQob2JqZWN0LCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBIYXNo
U2V0dGxlZChQcm9taXNlLCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOwotICAgICAgICB9OwotICAg
IH0pOwotICAgIGRlZmluZSgncnN2cC9oYXNoJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICcu
L3Byb21pc2UtaGFzaCcsCi0gICAgJy4vZW51bWVyYXRvcicsCi0gICAgJ2V4cG9ydHMnCi0gICAg
XSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVu
Y3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFy
IFByb21pc2UgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIFByb21p
c2VIYXNoID0gX19kZXBlbmRlbmN5Ml9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBBQk9SVF9P
Tl9SRUpFQ1RJT04gPSBfX2RlcGVuZGVuY3kzX18uQUJPUlRfT05fUkVKRUNUSU9OOwotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgYFJTVlAuaGFzaGAgaXMgc2ltaWxhciB0byBgUlNWUC5hbGxg
LCBidXQgdGFrZXMgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gYXJyYXkKLSAgICAgICAgICAgICAg
Zm9yIGl0cyBgcHJvbWlzZXNgIGFyZ3VtZW50LgotCi0gICAgICAgICAgICAgIFJldHVybnMgYSBw
cm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIHRoZSBnaXZlbiBwcm9taXNlcyBoYXZl
IGJlZW4KLSAgICAgICAgICAgICAgZnVsZmlsbGVkLCBvciByZWplY3RlZCBpZiBhbnkgb2YgdGhl
bSBiZWNvbWUgcmVqZWN0ZWQuIFRoZSByZXR1cm5lZCBwcm9taXNlCi0gICAgICAgICAgICAgIGlz
IGZ1bGZpbGxlZCB3aXRoIGEgaGFzaCB0aGF0IGhhcyB0aGUgc2FtZSBrZXkgbmFtZXMgYXMgdGhl
IGBwcm9taXNlc2Agb2JqZWN0Ci0gICAgICAgICAgICAgIGFyZ3VtZW50LiBJZiBhbnkgb2YgdGhl
IHZhbHVlcyBpbiB0aGUgb2JqZWN0IGFyZSBub3QgcHJvbWlzZXMsIHRoZXkgd2lsbAotICAgICAg
ICAgICAgICBzaW1wbHkgYmUgY29waWVkIG92ZXIgdG8gdGhlIGZ1bGZpbGxlZCBvYmplY3QuCi0K
LSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IHsKLSAgICAgICAgICAgICAgICBteVByb21pc2U6
IFJTVlAucmVzb2x2ZSgxKSwKLSAgICAgICAgICAgICAgICB5b3VyUHJvbWlzZTogUlNWUC5yZXNv
bHZlKDIpLAotICAgICAgICAgICAgICAgIHRoZWlyUHJvbWlzZTogUlNWUC5yZXNvbHZlKDMpLAot
ICAgICAgICAgICAgICAgIG5vdEFQcm9taXNlOiA0Ci0gICAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgICAgUlNWUC5oYXNoKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gpewotICAgICAg
ICAgICAgICAgIC8vIGhhc2ggaGVyZSBpcyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAg
ICAgICAgICAgICAgIC8vIHsKLSAgICAgICAgICAgICAgICAvLyAgIG15UHJvbWlzZTogMSwKLSAg
ICAgICAgICAgICAgICAvLyAgIHlvdXJQcm9taXNlOiAyLAotICAgICAgICAgICAgICAgIC8vICAg
dGhlaXJQcm9taXNlOiAzLAotICAgICAgICAgICAgICAgIC8vICAgbm90QVByb21pc2U6IDQKLSAg
ICAgICAgICAgICAgICAvLyB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGBg
Ci0KLSAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQ
Lmhhc2hgIGFyZSByZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2UKLSAgICAgICAgICAgICAgdGhh
dCBpcyByZWplY3RlZCB3aWxsIGJlIGdpdmVuIGFzIHRoZSByZWFzb24gdG8gdGhlIHJlamVjdGlv
biBoYW5kbGVyLgotCi0gICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSB7Ci0gICAgICAgICAgICAg
ICAgbXlQcm9taXNlOiBSU1ZQLnJlc29sdmUoMSksCi0gICAgICAgICAgICAgICAgcmVqZWN0ZWRQ
cm9taXNlOiBSU1ZQLnJlamVjdChuZXcgRXJyb3IoInJlamVjdGVkUHJvbWlzZSIpKSwKLSAgICAg
ICAgICAgICAgICBhbm90aGVyUmVqZWN0ZWRQcm9taXNlOiBSU1ZQLnJlamVjdChuZXcgRXJyb3Io
ImFub3RoZXJSZWplY3RlZFByb21pc2UiKSkKLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgICBSU1ZQLmhhc2gocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oaGFzaCl7Ci0gICAgICAgICAg
ICAgICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQg
cHJvbWlzZXMhCi0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAg
ICAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAicmVqZWN0ZWRQcm9taXNlIgotICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW4gaW1wb3J0YW50
IG5vdGU6IGBSU1ZQLmhhc2hgIGlzIGludGVuZGVkIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVj
dHMgdGhhdAotICAgICAgICAgICAgICBhcmUganVzdCBhIHNldCBvZiBrZXlzIGFuZCB2YWx1ZXMu
IGBSU1ZQLmhhc2hgIHdpbGwgTk9UIHByZXNlcnZlIHByb3RvdHlwZQotICAgICAgICAgICAgICBj
aGFpbnMuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIGZ1bmN0aW9uIE15Q29uc3RydWN0b3IoKXsKLSAgICAgICAg
ICAgICAgICB0aGlzLmV4YW1wbGUgPSBSU1ZQLnJlc29sdmUoIkV4YW1wbGUiKTsKLSAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgIE15Q29uc3RydWN0b3IucHJvdG90eXBlID0gewotICAg
ICAgICAgICAgICAgIHByb3RvUHJvcGVydHk6IFJTVlAucmVzb2x2ZSgiUHJvdG8gUHJvcGVydHki
KQotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIHZhciBteU9iamVjdCA9IG5ldyBN
eUNvbnN0cnVjdG9yKCk7Ci0KLSAgICAgICAgICAgICAgUlNWUC5oYXNoKG15T2JqZWN0KS50aGVu
KGZ1bmN0aW9uKGhhc2gpewotICAgICAgICAgICAgICAgIC8vIHByb3RvUHJvcGVydHkgd2lsbCBu
b3QgYmUgcHJlc2VudCwgaW5zdGVhZCB5b3Ugd2lsbCBqdXN0IGhhdmUgYW4KLSAgICAgICAgICAg
ICAgICAvLyBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAgICAgICAgICAgICAgIC8vIHsKLSAg
ICAgICAgICAgICAgICAvLyAgIGV4YW1wbGU6ICJFeGFtcGxlIgotICAgICAgICAgICAgICAgIC8v
IH0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIGhhc2guaGFzT3duUHJv
cGVydHkoJ3Byb3RvUHJvcGVydHknKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgICAvLyAndW5k
ZWZpbmVkJyA9PT0gdHlwZW9mIGhhc2gucHJvdG9Qcm9wZXJ0eQotICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBoYXNoCi0gICAgICAg
ICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZvciBSU1ZQCi0gICAgICAgICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBwcm9taXNlcwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFi
ZWwgb3B0aW9uYWwgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9taXNlLgotICAgICAgICAg
ICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9
IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgcHJvcGVydGllcyBvZiBgcHJvbWlz
ZXNgCi0gICAgICAgICAgICAgIGhhdmUgYmVlbiBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFu
eSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC4KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhw
b3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBoYXNoKG9iamVjdCwgbGFiZWwpIHsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUhhc2goUHJvbWlzZSwgb2JqZWN0LCBsYWJlbCkucHJv
bWlzZTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvaW5zdHJ1bWVudCcs
IFsKLSAgICAnLi9jb25maWcnLAotICAgICcuL3V0aWxzJywKLSAgICAnZXhwb3J0cycKLSAgICBd
LCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIGNvbmZpZyA9IF9fZGVwZW5k
ZW5jeTFfXy5jb25maWc7Ci0gICAgICAgIHZhciBub3cgPSBfX2RlcGVuZGVuY3kyX18ubm93Owot
ICAgICAgICB2YXIgcXVldWUgPSBbXTsKLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9
IGZ1bmN0aW9uIGluc3RydW1lbnQoZXZlbnROYW1lLCBwcm9taXNlLCBjaGlsZCkgewotICAgICAg
ICAgICAgaWYgKDEgPT09IHF1ZXVlLnB1c2goewotICAgICAgICAgICAgICAgIG5hbWU6IGV2ZW50
TmFtZSwKLSAgICAgICAgICAgICAgICBwYXlsb2FkOiB7Ci0gICAgICAgICAgICAgICAgICAgIGd1
aWQ6IHByb21pc2UuX2d1aWRLZXkgKyBwcm9taXNlLl9pZCwKLSAgICAgICAgICAgICAgICAgICAg
ZXZlbnROYW1lOiBldmVudE5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbDogcHJvbWlz
ZS5fcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICBjaGlsZEd1aWQ6IGNoaWxkICYmIHByb21p
c2UuX2d1aWRLZXkgKyBjaGlsZC5faWQsCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBwcm9t
aXNlLl9sYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOiBub3coKSwKLSAgICAg
ICAgICAgICAgICAgICAgc3RhY2s6IG5ldyBFcnJvcihwcm9taXNlLl9sYWJlbCkuc3RhY2sKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSkgewotICAgICAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gcXVldWVbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25maWcudHJpZ2dlcihlbnRyeS5uYW1lLCBlbnRyeS5wYXlsb2FkKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBxdWV1ZS5sZW5ndGggPSAw
OwotICAgICAgICAgICAgICAgIH0sIDUwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvbWFwJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICcu
L3V0aWxzJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsK
LSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1bHQnXTsKLSAgICAg
ICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kyX18uaXNBcnJheTsKLSAgICAgICAgdmFyIGlz
RnVuY3Rpb24gPSBfX2RlcGVuZGVuY3kyX18uaXNGdW5jdGlvbjsKLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgYFJTVlAubWFwYCBpcyBzaW1pbGFyIHRvIEphdmFTY3JpcHQncyBuYXRpdmUgYG1h
cGAgbWV0aG9kLCBleGNlcHQgdGhhdCBpdAotICAgICAgICAgICAgICB3YWl0cyBmb3IgYWxsIHBy
b21pc2VzIHRvIGJlY29tZSBmdWxmaWxsZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGBtYXBGbmAgb24K
LSAgICAgICAgICAgICAgZWFjaCBpdGVtIGluIGdpdmVuIHRvIGBwcm9taXNlc2AuIGBSU1ZQLm1h
cGAgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsCi0gICAgICAgICAgICAgIGJlY29tZSBmdWxm
aWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYG1hcEZuYCBvbiB0aGUgdmFsdWVzIHRo
ZSBwcm9taXNlcwotICAgICAgICAgICAgICBiZWNvbWUgZnVsZmlsbGVkIHdpdGguCi0KLSAgICAg
ICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotCi0g
ICAgICAgICAgICAgIHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsKLSAgICAgICAgICAg
ICAgdmFyIHByb21pc2UyID0gUlNWUC5yZXNvbHZlKDIpOwotICAgICAgICAgICAgICB2YXIgcHJv
bWlzZTMgPSBSU1ZQLnJlc29sdmUoMyk7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFsg
cHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwotCi0gICAgICAgICAgICAgIHZhciBtYXBG
biA9IGZ1bmN0aW9uKGl0ZW0pewotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICsgMTsKLSAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICBSU1ZQLm1hcChwcm9taXNlcywgbWFwRm4p
LnRoZW4oZnVuY3Rpb24ocmVzdWx0KXsKLSAgICAgICAgICAgICAgICAvLyByZXN1bHQgaXMgWyAy
LCAzLCA0IF0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgUlNWUC5tYXBgIGFyZSBy
ZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2UKLSAgICAgICAgICAgICAgdGhhdCBpcyByZWplY3Rl
ZCB3aWxsIGJlIGdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSByZXR1cm5lZCBwcm9taXNlJ3MK
LSAgICAgICAgICAgICAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2UxID0gUlNWUC5y
ZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLnJlamVjdChuZXcg
RXJyb3IoIjIiKSk7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVqZWN0KG5l
dyBFcnJvcigiMyIpKTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwg
cHJvbWlzZTIsIHByb21pc2UzIF07Ci0KLSAgICAgICAgICAgICAgdmFyIG1hcEZuID0gZnVuY3Rp
b24oaXRlbSl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gKyAxOwotICAgICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICAgIFJTVlAubWFwKHByb21pc2VzLCBtYXBGbikudGhlbihmdW5j
dGlvbihhcnJheSl7Ci0gICAgICAgICAgICAgICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVj
YXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhCi0gICAgICAgICAgICAgIH0sIGZ1bmN0
aW9uKHJlYXNvbikgewotICAgICAgICAgICAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAiMiIK
LSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBS
U1ZQLm1hcGAgd2lsbCBhbHNvIHdhaXQgaWYgYSBwcm9taXNlIGlzIHJldHVybmVkIGZyb20gYG1h
cEZuYC4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgIHNheSB5b3Ugd2FudCB0byBnZXQgYWxs
IGNvbW1lbnRzIGZyb20gYSBzZXQgb2YgYmxvZyBwb3N0cywgYnV0IHlvdSBuZWVkCi0gICAgICAg
ICAgICAgIHRoZSBibG9nIHBvc3RzIGZpcnN0IGJlY2F1c2UgdGhleSBjb250YWluIGEgdXJsIHRv
IHRob3NlIGNvbW1lbnRzLgotCi0gICAgICAgICAgICAgIGBgYGphdnNjcmlwdAotCi0gICAgICAg
ICAgICAgIHZhciBtYXBGbiA9IGZ1bmN0aW9uKGJsb2dQb3N0KXsKLSAgICAgICAgICAgICAgICAv
LyBnZXRDb21tZW50cyBkb2VzIHNvbWUgYWpheCBhbmQgcmV0dXJucyBhbiBSU1ZQLlByb21pc2Ug
dGhhdCBpcyBmdWxmaWxsZWQKLSAgICAgICAgICAgICAgICAvLyB3aXRoIHNvbWUgY29tbWVudHMg
ZGF0YQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21tZW50cyhibG9nUG9zdC5jb21tZW50
c191cmwpOwotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIC8vIGdldEJsb2dQb3N0
cyBkb2VzIHNvbWUgYWpheCBhbmQgcmV0dXJucyBhbiBSU1ZQLlByb21pc2UgdGhhdCBpcyBmdWxm
aWxsZWQKLSAgICAgICAgICAgICAgLy8gd2l0aCBzb21lIGJsb2cgcG9zdCBkYXRhCi0gICAgICAg
ICAgICAgIFJTVlAubWFwKGdldEJsb2dQb3N0cygpLCBtYXBGbikudGhlbihmdW5jdGlvbihjb21t
ZW50cyl7Ci0gICAgICAgICAgICAgICAgLy8gY29tbWVudHMgaXMgdGhlIHJlc3VsdCBvZiBhc2tp
bmcgdGhlIHNlcnZlciBmb3IgdGhlIGNvbW1lbnRzCi0gICAgICAgICAgICAgICAgLy8gb2YgYWxs
IGJsb2cgcG9zdHMgcmV0dXJuZWQgZnJvbSBnZXRCbG9nUG9zdHMoKQotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBtYXAKLSAgICAg
ICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAgICAg
QHBhcmFtIHtBcnJheX0gcHJvbWlzZXMKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
bWFwRm4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGVhY2ggZnVsZmlsbGVkIHByb21pc2UuCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxh
YmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgICAgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0g
ICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQg
d2l0aCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcKLSAgICAgICAgICAgICAgYG1hcEZuYCBvbiBlYWNo
IGZ1bGZpbGxlZCBwcm9taXNlIG9yIHZhbHVlIHdoZW4gdGhleSBiZWNvbWUgZnVsZmlsbGVkLgot
ICAgICAgICAgICAgICAgVGhlIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCBpZiBhbnkgb2YgdGhl
IGdpdmVuIGBwcm9taXNlc2AgYmVjb21lIHJlamVjdGVkLgotICAgICAgICAgICAgICBAc3RhdGlj
Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rp
b24gbWFwKHByb21pc2VzLCBtYXBGbiwgbGFiZWwpIHsKLSAgICAgICAgICAgIHJldHVybiBQcm9t
aXNlLmFsbChwcm9taXNlcywgbGFiZWwpLnRoZW4oZnVuY3Rpb24gKHZhbHVlcykgewotICAgICAg
ICAgICAgICAgIGlmICghaXNGdW5jdGlvbihtYXBGbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIG1hcFwncyBz
ZWNvbmQgYXJndW1lbnQuJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZh
ciBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0g
bmV3IEFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbWFwRm4odmFs
dWVzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UuYWxsKHJlc3VsdHMsIGxhYmVsKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotICAg
IH0pOwotICAgIGRlZmluZSgncnN2cC9ub2RlJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICcu
L3V0aWxzJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsK
LSAgICAgICAgLyogZ2xvYmFsICBhcnJheVNsaWNlICovCi0gICAgICAgIHZhciBQcm9taXNlID0g
X19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX19kZXBl
bmRlbmN5Ml9fLmlzQXJyYXk7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgUlNWUC5kZW5v
ZGVpZnlgIHRha2VzIGEgIm5vZGUtc3R5bGUiIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZnVuY3Rp
b24gdGhhdAotICAgICAgICAgICAgICB3aWxsIHJldHVybiBhbiBgUlNWUC5Qcm9taXNlYC4gWW91
IGNhbiB1c2UgYGRlbm9kZWlmeWAgaW4gTm9kZS5qcyBvciB0aGUKLSAgICAgICAgICAgICAgYnJv
d3NlciB3aGVuIHlvdSdkIHByZWZlciB0byB1c2UgcHJvbWlzZXMgb3ZlciB1c2luZyBjYWxsYmFj
a3MuIEZvciBleGFtcGxlLAotICAgICAgICAgICAgICBgZGVub2RlaWZ5YCB0cmFuc2Zvcm1zIHRo
ZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICB2YXIgZnMgPSByZXF1aXJlKCdmcycpOwotCi0gICAgICAgICAgICAgIGZzLnJlYWRGaWxlKCdt
eWZpbGUudHh0JywgZnVuY3Rpb24oZXJyLCBkYXRhKXsKLSAgICAgICAgICAgICAgICBpZiAoZXJy
KSByZXR1cm4gaGFuZGxlRXJyb3IoZXJyKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVEYXRhKGRh
dGEpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgaW50bzoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZh
ciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Ci0gICAgICAgICAgICAgIHZhciByZWFkRmlsZSA9IFJTVlAu
ZGVub2RlaWZ5KGZzLnJlYWRGaWxlKTsKLQotICAgICAgICAgICAgICByZWFkRmlsZSgnbXlmaWxl
LnR4dCcpLnRoZW4oaGFuZGxlRGF0YSwgaGFuZGxlRXJyb3IpOwotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBJZiB0aGUgbm9kZSBmdW5jdGlvbiBoYXMgbXVsdGlwbGUgc3VjY2Vz
cyBwYXJhbWV0ZXJzLCB0aGVuIGBkZW5vZGVpZnlgCi0gICAgICAgICAgICAgIGp1c3QgcmV0dXJu
cyB0aGUgZmlyc3Qgb25lOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgdmFyIHJlcXVlc3QgPSBSU1ZQLmRlbm9kZWlmeShyZXF1aXJlKCdyZXF1ZXN0JykpOwot
Ci0gICAgICAgICAgICAgIHJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpLnRoZW4oZnVuY3Rp
b24ocmVzKSB7Ci0gICAgICAgICAgICAgICAgLy8gLi4uCi0gICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgbmVlZCBhbGwg
c3VjY2VzcyBwYXJhbWV0ZXJzLCBzZXR0aW5nIGBkZW5vZGVpZnlgJ3MKLSAgICAgICAgICAgICAg
c2Vjb25kIHBhcmFtZXRlciB0byBgdHJ1ZWAgY2F1c2VzIGl0IHRvIHJldHVybiBhbGwgc3VjY2Vz
cyBwYXJhbWV0ZXJzCi0gICAgICAgICAgICAgIGFzIGFuIGFycmF5OgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBSU1ZQLmRlbm9kZWlm
eShyZXF1aXJlKCdyZXF1ZXN0JyksIHRydWUpOwotCi0gICAgICAgICAgICAgIHJlcXVlc3QoJ2h0
dHA6Ly9leGFtcGxlLmNvbScpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gcmVzdWx0WzBdIC0+IHJlcwotICAgICAgICAgICAgICAgIC8vIHJlc3VsdFsxXSAtPiBi
b2R5Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBPciBpZiB5b3UgcGFzcyBpdCBhbiBhcnJheSB3aXRoIG5hbWVzIGl0IHJldHVybnMgdGhlIHBh
cmFtZXRlcnMgYXMgYSBoYXNoOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgdmFyIHJlcXVlc3QgPSBSU1ZQLmRlbm9kZWlmeShyZXF1aXJlKCdyZXF1ZXN0Jyks
IFsncmVzJywgJ2JvZHknXSk7Ci0KLSAgICAgICAgICAgICAgcmVxdWVzdCgnaHR0cDovL2V4YW1w
bGUuY29tJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvLyByZXN1
bHQucmVzCi0gICAgICAgICAgICAgICAgLy8gcmVzdWx0LmJvZHkKLSAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFNvbWV0aW1lcyB5b3UgbmVlZCB0
byByZXRhaW4gdGhlIGB0aGlzYDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIHZhciBhcHAgPSByZXF1aXJlKCdleHByZXNzJykoKTsKLSAgICAgICAgICAgICAg
dmFyIHJlbmRlciA9IFJTVlAuZGVub2RlaWZ5KGFwcC5yZW5kZXIuYmluZChhcHApKTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGRlbm9kaWZpZWQgZnVuY3Rpb24gaW5o
ZXJpdHMgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uIEl0IHdvcmtzIGluIGFsbAotICAgICAg
ICAgICAgICBlbnZpcm9ubWVudHMsIGV4Y2VwdCBJRSAxMCBhbmQgYmVsb3cuIENvbnNlcXVlbnRs
eSBhbGwgcHJvcGVydGllcyBvZiB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgZnVuY3Rpb24g
YXJlIGF2YWlsYWJsZSB0byB5b3UuIEhvd2V2ZXIsIGFueSBwcm9wZXJ0aWVzIHlvdSBjaGFuZ2Ug
b24gdGhlCi0gICAgICAgICAgICAgIGRlbm9kZWlmaWVkIGZ1bmN0aW9uIHdvbid0IGJlIGNoYW5n
ZWQgb24gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBSU1ZQLmRlbm9kZWlmeShy
ZXF1aXJlKCdyZXF1ZXN0JykpLAotICAgICAgICAgICAgICAgICAgY29va2llSmFyID0gcmVxdWVz
dC5qYXIoKTsgLy8gPC0gSW5oZXJpdGFuY2UgaXMgdXNlZCBoZXJlCi0KLSAgICAgICAgICAgICAg
cmVxdWVzdCgnaHR0cDovL2V4YW1wbGUuY29tJywge2phcjogY29va2llSmFyfSkudGhlbihmdW5j
dGlvbihyZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBjb29raWVKYXIuY29va2llcyBob2xkcyBu
b3cgdGhlIGNvb2tpZXMgcmV0dXJuZWQgYnkgZXhhbXBsZS5jb20KLSAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFVzaW5nIGBkZW5vZGVpZnlgIG1h
a2VzIGl0IGVhc2llciB0byBjb21wb3NlIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGluc3RlYWQK
LSAgICAgICAgICAgICAgb2YgdXNpbmcgY2FsbGJhY2tzLiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBv
ZjoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBmcyA9
IHJlcXVpcmUoJ2ZzJyk7Ci0KLSAgICAgICAgICAgICAgZnMucmVhZEZpbGUoJ215ZmlsZS50eHQn
LCBmdW5jdGlvbihlcnIsIGRhdGEpewotICAgICAgICAgICAgICAgIGlmIChlcnIpIHsgLi4uIH0g
Ly8gSGFuZGxlIGVycm9yCi0gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlKCdteWZpbGUyLnR4
dCcsIGRhdGEsIGZ1bmN0aW9uKGVycil7Ci0gICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7IC4u
LiB9IC8vIEhhbmRsZSBlcnJvcgotICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RvbmUn
KQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgeW91IGNhbiBjaGFpbiB0aGUgb3BlcmF0aW9ucyB0b2dldGhl
ciB1c2luZyBgdGhlbmAgZnJvbSB0aGUgcmV0dXJuZWQgcHJvbWlzZToKLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Ci0g
ICAgICAgICAgICAgIHZhciByZWFkRmlsZSA9IFJTVlAuZGVub2RlaWZ5KGZzLnJlYWRGaWxlKTsK
LSAgICAgICAgICAgICAgdmFyIHdyaXRlRmlsZSA9IFJTVlAuZGVub2RlaWZ5KGZzLndyaXRlRmls
ZSk7Ci0KLSAgICAgICAgICAgICAgcmVhZEZpbGUoJ215ZmlsZS50eHQnKS50aGVuKGZ1bmN0aW9u
KGRhdGEpewotICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZUZpbGUoJ215ZmlsZTIudHh0Jywg
ZGF0YSk7Ci0gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygnZG9uZScpCi0gICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVy
cm9yKXsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IKLSAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgZGVub2RlaWZ5Ci0g
ICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZvciBSU1ZQCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7RnVuY3Rpb259IG5vZGVGdW5jIGEgIm5vZGUtc3R5bGUiIGZ1bmN0aW9uIHRo
YXQgdGFrZXMgYSBjYWxsYmFjayBhcwotICAgICAgICAgICAgICBpdHMgbGFzdCBhcmd1bWVudC4g
VGhlIGNhbGxiYWNrIGV4cGVjdHMgYW4gZXJyb3IgdG8gYmUgcGFzc2VkIGFzIGl0cyBmaXJzdAot
ICAgICAgICAgICAgICBhcmd1bWVudCAoaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG90aGVyd2lzZSBu
dWxsKSwgYW5kIHRoZSB2YWx1ZSBmcm9tIHRoZQotICAgICAgICAgICAgICBvcGVyYXRpb24gYXMg
aXRzIHNlY29uZCBhcmd1bWVudCAoImZ1bmN0aW9uKGVyciwgdmFsdWUpeyB9IikuCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7Qm9vbGVhbnxBcnJheX0gYXJndW1lbnROYW1lcyBBbiBvcHRpb25hbCBw
YXJhbXRlciB0aGF0IGlmIHNldAotICAgICAgICAgICAgICB0byBgdHJ1ZWAgY2F1c2VzIHRoZSBw
cm9taXNlIHRvIGZ1bGZpbGwgd2l0aCB0aGUgY2FsbGJhY2sncyBzdWNjZXNzIGFyZ3VtZW50cwot
ICAgICAgICAgICAgICBhcyBhbiBhcnJheS4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIG5vZGUgZnVu
Y3Rpb24gaGFzIG11bHRpcGxlIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgcGFyYW10ZXJzLiBJZiB5
b3Ugc2V0IHRoaXMgcGFyYW10ZXIgdG8gYW4gYXJyYXkgd2l0aCBuYW1lcywgdGhlIHByb21pc2Ug
d2lsbAotICAgICAgICAgICAgICBmdWxmaWxsIHdpdGggYSBoYXNoIHdpdGggdGhlc2UgbmFtZXMg
YXMga2V5cyBhbmQgdGhlIHN1Y2Nlc3MgcGFyYW1ldGVycyBhcwotICAgICAgICAgICAgICB2YWx1
ZXMuCi0gICAgICAgICAgICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQgd3Jh
cHMgYG5vZGVGdW5jYCB0byByZXR1cm4gYW4KLSAgICAgICAgICAgICAgYFJTVlAuUHJvbWlzZWAK
LSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRz
X19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIGRlbm9kZWlmeShub2RlRnVuYywgYXJndW1lbnROYW1l
cykgewotICAgICAgICAgICAgdmFyIGFzQXJyYXkgPSBhcmd1bWVudE5hbWVzID09PSB0cnVlOwot
ICAgICAgICAgICAgdmFyIGFzSGFzaCA9IGlzQXJyYXkoYXJndW1lbnROYW1lcyk7Ci0gICAgICAg
ICAgICBmdW5jdGlvbiBkZW5vZGVpZmllZEZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZh
ciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgICAgIHZhciBub2RlQXJn
cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZUFyZ3NbaV0gPSBhcmd1
bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciB0aGlzQXJn
OwotICAgICAgICAgICAgICAgIGlmICghYXNBcnJheSAmJiAhYXNIYXNoICYmIGFyZ3VtZW50TmFt
ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSAnb2JqZWN0
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbjog
UlNWUC5kZW5vZGVpZnkoKSBkb2VzblwndCBhbGxvdyBzZXR0aW5nIHRoZSAnICsgJyJ0aGlzIiBi
aW5kaW5nIGFueW1vcmUuIFVzZSB5b3VyRnVuY3Rpb24uYmluZCh5b3VyVGhpcykgaW5zdGVhZC4n
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzQXJnID0g
YXJndW1lbnROYW1lczsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzQXJnID0gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFByb21pc2UuYWxsKG5vZGVBcmdzKS50aGVuKGZ1bmN0aW9uIChub2RlQXJncyQyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIHN3ZWV0LmpzIGhhcyBhIGJ1ZywgdGhpcyByZXNvbHZlciBjYW4n
dCBiZSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgICAgICAvLyBv
ciB0aGUgYXJyYXlTbGljZSBtYWNybyBkb2Vzbid0IHdvcmsKLSAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gcmVzb2x2ZXIocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbGVuZ3RoJDIgPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCQyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBsZW5ndGgkMjsgaSQyKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpJDJdID0gYXJndW1lbnRzW2kkMl07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBlcnJvciA9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gYXJnc1sxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzQXJyYXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhcmdzLnNsaWNlKDEpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzSGFzaCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgb2JqID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzdWNjZXNzQXJndW1lbnRzID0gYXJncy5zbGljZSgxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBpJDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSQzID0gMDsg
aSQzIDwgYXJndW1lbnROYW1lcy5sZW5ndGg7IGkkMysrKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lID0gYXJndW1lbnROYW1lc1tpJDNdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqW25hbWVdID0gc3VjY2Vzc0FyZ3VtZW50c1tpJDNd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmUob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlQXJncyQyLnB1c2goY2FsbGJhY2spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUZ1bmMuYXBwbHkodGhpc0FyZywgbm9kZUFyZ3MkMik7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlbm9kZWlmaWVkRnVuY3Rpb24uX19wcm90b19fID0gbm9kZUZ1bmM7
Ci0gICAgICAgICAgICByZXR1cm4gZGVub2RlaWZpZWRGdW5jdGlvbjsKLSAgICAgICAgfTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvcHJvbWlzZS1oYXNoJywgWwotICAgICcuL2VudW1lcmF0
b3InLAotICAgICcuLy1pbnRlcm5hbCcsCi0gICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRzJwot
ICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBl
bmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAg
IHZhciBFbnVtZXJhdG9yID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIHZh
ciBQRU5ESU5HID0gX19kZXBlbmRlbmN5Ml9fLlBFTkRJTkc7Ci0gICAgICAgIHZhciBGVUxGSUxM
RUQgPSBfX2RlcGVuZGVuY3kyX18uRlVMRklMTEVEOwotICAgICAgICB2YXIgb19jcmVhdGUgPSBf
X2RlcGVuZGVuY3kzX18ub19jcmVhdGU7Ci0gICAgICAgIGZ1bmN0aW9uIFByb21pc2VIYXNoKENv
bnN0cnVjdG9yLCBvYmplY3QsIGxhYmVsKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdXBlckNvbnN0
cnVjdG9yKENvbnN0cnVjdG9yLCBvYmplY3QsIHRydWUsIGxhYmVsKTsKLSAgICAgICAgfQotICAg
ICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gUHJvbWlzZUhhc2g7Ci0gICAgICAgIFByb21p
c2VIYXNoLnByb3RvdHlwZSA9IG9fY3JlYXRlKEVudW1lcmF0b3IucHJvdG90eXBlKTsKLSAgICAg
ICAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gRW51bWVyYXRvcjsK
LSAgICAgICAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdGhpcy5fcmVzdWx0ID0ge307Ci0gICAgICAgIH07Ci0gICAgICAgIFByb21pc2VI
YXNoLnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dCA9IGZ1bmN0aW9uIChpbnB1dCkgewotICAgICAg
ICAgICAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCc7Ci0gICAgICAg
IH07Ci0gICAgICAgIFByb21pc2VIYXNoLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignUHJvbWlzZS5oYXNoIG11
c3QgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0Jyk7Ci0gICAgICAgIH07Ci0gICAgICAgIFByb21p
c2VIYXNoLnByb3RvdHlwZS5fZW51bWVyYXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7Ci0gICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlz
Ll9pbnB1dDsKLSAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gaW5wdXQpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUg
PT09IFBFTkRJTkcgJiYgaW5wdXQuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246
IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5OiBpbnB1dFtrZXldCi0gICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHZhciBsZW5ndGggPSByZXN1bHRzLmxlbmd0aDsKLSAgICAgICAgICAgIHRoaXMuX3Jl
bWFpbmluZyA9IGxlbmd0aDsKLSAgICAgICAgICAgIHZhciByZXN1bHQ7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9lYWNoRW50cnkocmVzdWx0LmVudHJ5LCByZXN1bHQucG9zaXRpb24pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9wcm9taXNl
JywgWwotICAgICcuL2NvbmZpZycsCi0gICAgJy4vZXZlbnRzJywKLSAgICAnLi9pbnN0cnVtZW50
JywKLSAgICAnLi91dGlscycsCi0gICAgJy4vLWludGVybmFsJywKLSAgICAnLi9wcm9taXNlL2Nh
c3QnLAotICAgICcuL3Byb21pc2UvYWxsJywKLSAgICAnLi9wcm9taXNlL3JhY2UnLAotICAgICcu
L3Byb21pc2UvcmVzb2x2ZScsCi0gICAgJy4vcHJvbWlzZS9yZWplY3QnLAotICAgICdleHBvcnRz
JwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRl
bmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9f
LCBfX2RlcGVuZGVuY3kxMF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7
Ci0gICAgICAgIHZhciBjb25maWcgPSBfX2RlcGVuZGVuY3kxX18uY29uZmlnOwotICAgICAgICB2
YXIgRXZlbnRUYXJnZXQgPSBfX2RlcGVuZGVuY3kyX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFy
IGluc3RydW1lbnQgPSBfX2RlcGVuZGVuY3kzX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIG9i
amVjdE9yRnVuY3Rpb24gPSBfX2RlcGVuZGVuY3k0X18ub2JqZWN0T3JGdW5jdGlvbjsKLSAgICAg
ICAgdmFyIGlzRnVuY3Rpb24gPSBfX2RlcGVuZGVuY3k0X18uaXNGdW5jdGlvbjsKLSAgICAgICAg
dmFyIG5vdyA9IF9fZGVwZW5kZW5jeTRfXy5ub3c7Ci0gICAgICAgIHZhciBub29wID0gX19kZXBl
bmRlbmN5NV9fLm5vb3A7Ci0gICAgICAgIHZhciByZXNvbHZlID0gX19kZXBlbmRlbmN5NV9fLnJl
c29sdmU7Ci0gICAgICAgIHZhciByZWplY3QgPSBfX2RlcGVuZGVuY3k1X18ucmVqZWN0OwotICAg
ICAgICB2YXIgZnVsZmlsbCA9IF9fZGVwZW5kZW5jeTVfXy5mdWxmaWxsOwotICAgICAgICB2YXIg
c3Vic2NyaWJlID0gX19kZXBlbmRlbmN5NV9fLnN1YnNjcmliZTsKLSAgICAgICAgdmFyIGluaXRp
YWxpemVQcm9taXNlID0gX19kZXBlbmRlbmN5NV9fLmluaXRpYWxpemVQcm9taXNlOwotICAgICAg
ICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBfX2RlcGVuZGVuY3k1X18uaW52b2tlQ2FsbGJhY2s7Ci0g
ICAgICAgIHZhciBGVUxGSUxMRUQgPSBfX2RlcGVuZGVuY3k1X18uRlVMRklMTEVEOwotICAgICAg
ICB2YXIgY2FzdCA9IF9fZGVwZW5kZW5jeTZfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgYWxs
ID0gX19kZXBlbmRlbmN5N19fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciByYWNlID0gX19kZXBl
bmRlbmN5OF9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBSZXNvbHZlID0gX19kZXBlbmRlbmN5
OV9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBSZWplY3QgPSBfX2RlcGVuZGVuY3kxMF9fWydk
ZWZhdWx0J107Ci0gICAgICAgIHZhciBndWlkS2V5ID0gJ3JzdnBfJyArIG5vdygpICsgJy0nOwot
ICAgICAgICB2YXIgY291bnRlciA9IDA7Ci0gICAgICAgIGZ1bmN0aW9uIG5lZWRzUmVzb2x2ZXIo
KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVz
b2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0
cnVjdG9yJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gbmVlZHNOZXcoKSB7Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gY29uc3RydWN0IFwnUHJvbWlz
ZVwnOiBQbGVhc2UgdXNlIHRoZSBcJ25ld1wnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1
Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IFByb21pc2U7Ci0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2Yg
YW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlCi0gICAgICAgICAgICAgIHByaW1hcnkgd2F5
IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRo
b2QsIHdoaWNoCi0gICAgICAgICAgICAgIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBl
aXRoZXIgYSBwcm9taXNl4oCZcyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uCi0gICAgICAg
ICAgICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLgotCi0gICAgICAgICAg
ICAgIFRlcm1pbm9sb2d5Ci0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAg
ICAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0
aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi4KLSAgICAg
ICAgICAgICAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmlu
ZXMgYSBgdGhlbmAgbWV0aG9kLgotICAgICAgICAgICAgICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2Fs
IEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEg
cHJvbWlzZSkuCi0gICAgICAgICAgICAgIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlz
IHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LgotICAgICAgICAgICAgICAtIGByZWFz
b25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQu
Ci0gICAgICAgICAgICAgIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEg
cHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLgotCi0gICAgICAgICAgICAgIEEgcHJvbWlz
ZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciBy
ZWplY3RlZC4KLQotICAgICAgICAgICAgICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2
ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZAotICAgICAgICAg
ICAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24g
cmVhc29uIGFuZCBhcmUgaW4gdGhlCi0gICAgICAgICAgICAgIHJlamVjdGVkIHN0YXRlLiAgQSBm
dWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLgotCi0gICAgICAgICAgICAgIFBy
b21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZh
bHVlIGlzIGFsc28gYQotICAgICAgICAgICAgICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBw
cm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzCi0gICAgICAgICAg
ICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlz
ZSB0aGF0IHJlamVjdHMgd2lsbAotICAgICAgICAgICAgICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBw
cm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsCi0gICAg
ICAgICAgICAgIGl0c2VsZiBmdWxmaWxsLgotCi0KLSAgICAgICAgICAgICAgQmFzaWMgVXNhZ2U6
Ci0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgIGBgYGpzCi0gICAg
ICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7Ci0gICAgICAgICAgICAgICAgLy8gb24gc3VjY2VzcwotICAgICAgICAgICAgICAgIHJl
c29sdmUodmFsdWUpOwotCi0gICAgICAgICAgICAgICAgLy8gb24gZmFpbHVyZQotICAgICAgICAg
ICAgICAgIHJlamVjdChyZWFzb24pOwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICAvLyBvbiBm
dWxmaWxsbWVudAotICAgICAgICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgICAg
ICAgICAgICAvLyBvbiByZWplY3Rpb24KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEFkdmFuY2VkIFVzYWdlOgotICAgICAgICAgICAgICAtLS0t
LS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0
aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzCi0gICAgICAgICAgICAg
IGBYTUxIdHRwUmVxdWVzdGBzLgotCi0gICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAg
IGZ1bmN0aW9uIGdldEpTT04odXJsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7Ci0gICAgICAgICAgICAgICAgICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCdH
RVQnLCB1cmwpOwotICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhh
bmRsZXI7Ci0gICAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nOwotICAg
ICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlv
bi9qc29uJyk7Ci0gICAgICAgICAgICAgICAgICB4aHIuc2VuZCgpOwotCi0gICAgICAgICAgICAg
ICAgICBmdW5jdGlvbiBoYW5kbGVyKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5y
ZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy5zdGF0dXMgPT09IDIwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlz
LnJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigiZ2V0SlNPTjogYCIgKyB1cmwgKyAiYCBmYWls
ZWQgd2l0aCBzdGF0dXM6IFsiICsgdGhpcy5zdGF0dXMgKyAiXSIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBnZXRK
U09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikgewotICAgICAgICAgICAgICAg
IC8vIG9uIGZ1bGZpbGxtZW50Ci0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewot
ICAgICAgICAgICAgICAgIC8vIG9uIHJlamVjdGlvbgotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMg
YXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy4KLQotICAgICAgICAgICAgICBgYGBqcwot
ICAgICAgICAgICAgICBQcm9taXNlLmFsbChbCi0gICAgICAgICAgICAgICAgZ2V0SlNPTignL3Bv
c3RzJyksCi0gICAgICAgICAgICAgICAgZ2V0SlNPTignL2NvbW1lbnRzJykKLSAgICAgICAgICAg
ICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpewotICAgICAgICAgICAgICAgIHZhbHVlc1swXSAv
LyA9PiBwb3N0c0pTT04KLSAgICAgICAgICAgICAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNK
U09OCi0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFJTVlAuUHJvbWlzZQot
ICAgICAgICAgICAgICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlcgotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJv
bWlzZS4KLSAgICAgICAgICAgICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgICAgICAgICAgICBA
Y29uc3RydWN0b3IKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIFByb21pc2UocmVz
b2x2ZXIsIGxhYmVsKSB7Ci0gICAgICAgICAgICB0aGlzLl9pZCA9IGNvdW50ZXIrKzsKLSAgICAg
ICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7Ci0gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVy
cyA9IFtdOwotICAgICAgICAgICAgaWYgKGNvbmZpZy5pbnN0cnVtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgaW5zdHJ1bWVudCgnY3JlYXRlZCcsIHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0Z1
bmN0aW9uKHJlc29sdmVyKSkgewotICAgICAgICAgICAgICAgICAgICBuZWVkc1Jlc29sdmVyKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2Vv
ZiBQcm9taXNlKSkgewotICAgICAgICAgICAgICAgICAgICBuZWVkc05ldygpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbml0aWFsaXplUHJvbWlzZSh0aGlzLCByZXNvbHZl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUHJvbWlzZS5jYXN0ID0gY2Fz
dDsKLSAgICAgICAgUHJvbWlzZS5hbGwgPSBhbGw7Ci0gICAgICAgIFByb21pc2UucmFjZSA9IHJh
Y2U7Ci0gICAgICAgIFByb21pc2UucmVzb2x2ZSA9IFJlc29sdmU7Ci0gICAgICAgIFByb21pc2Uu
cmVqZWN0ID0gUmVqZWN0OwotICAgICAgICBQcm9taXNlLnByb3RvdHlwZSA9IHsKLSAgICAgICAg
ICAgIGNvbnN0cnVjdG9yOiBQcm9taXNlLAotICAgICAgICAgICAgX2lkOiB1bmRlZmluZWQsCi0g
ICAgICAgICAgICBfZ3VpZEtleTogZ3VpZEtleSwKLSAgICAgICAgICAgIF9sYWJlbDogdW5kZWZp
bmVkLAotICAgICAgICAgICAgX3N0YXRlOiB1bmRlZmluZWQsCi0gICAgICAgICAgICBfcmVzdWx0
OiB1bmRlZmluZWQsCi0gICAgICAgICAgICBfc3Vic2NyaWJlcnM6IHVuZGVmaW5lZCwKLSAgICAg
ICAgICAgIF9vbmVycm9yOiBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAgY29u
ZmlnLnRyaWdnZXIoJ2Vycm9yJywgcmVhc29uKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICB0aGVuOiBmdW5jdGlvbiAob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24sIGxhYmVsKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyZW50
Ll9vbmVycm9yID0gbnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5j
b25zdHJ1Y3Rvcihub29wLCBsYWJlbCk7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gcGFy
ZW50Ll9zdGF0ZTsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGFyZW50Ll9yZXN1bHQ7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pbnN0cnVtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluc3RydW1lbnQoJ2NoYWluZWQnLCBwYXJlbnQsIGNoaWxkKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBGVUxGSUxMRUQgJiYgb25GdWxm
aWxsbWVudCkgewotICAgICAgICAgICAgICAgICAgICBjb25maWcuYXN5bmMoZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soc3RhdGUsIGNoaWxkLCBv
bkZ1bGZpbGxtZW50LCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmUocGFyZW50LCBj
aGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
J2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0aW9uLCBsYWJlbCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24sIGxhYmVsKTsKLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAnZmluYWxseSc6IGZ1bmN0aW9uIChjYWxsYmFjaywgbGFiZWwpIHsK
LSAgICAgICAgICAgICAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4o
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29u
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxi
YWNrKCkpLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
cmVhc29uOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9LCBsYWJl
bCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3Zw
L3Byb21pc2UvYWxsJywgWwotICAgICcuLi9lbnVtZXJhdG9yJywKLSAgICAnZXhwb3J0cycKLSAg
ICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAn
dXNlIHN0cmljdCc7Ci0gICAgICAgIHZhciBFbnVtZXJhdG9yID0gX19kZXBlbmRlbmN5MV9fWydk
ZWZhdWx0J107Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgUlNWUC5Qcm9taXNlLmFsbGAg
YWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3
aGljaAotICAgICAgICAgICAgICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxs
bWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yCi0gICAgICAgICAgICAgIHJl
amVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUg
cmVqZWN0ZWQuIEl0IGNhc3RzIGFsbAotICAgICAgICAgICAgICBlbGVtZW50cyBvZiB0aGUgcGFz
c2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uCi0KLSAg
ICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsKLSAgICAgICAgICAgICAg
dmFyIHByb21pc2UyID0gUlNWUC5yZXNvbHZlKDIpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlz
ZTMgPSBSU1ZQLnJlc29sdmUoMyk7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFsgcHJv
bWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwotCi0gICAgICAgICAgICAgIFJTVlAuUHJvbWlz
ZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpewotICAgICAgICAgICAgICAgIC8v
IFRoZSBhcnJheSBoZXJlIHdvdWxkIGJlIFsgMSwgMiwgMyBdOwotICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSBgcHJvbWlz
ZXNgIGdpdmVuIHRvIGBSU1ZQLmFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZQot
ICAgICAgICAgICAgICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1l
bnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3MKLSAgICAgICAgICAgICAgcmVqZWN0aW9uIGhh
bmRsZXIuIEZvciBleGFtcGxlOgotCi0gICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLnJl
c29sdmUoMSk7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBF
cnJvcigiMiIpKTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2UzID0gUlNWUC5yZWplY3QobmV3
IEVycm9yKCIzIikpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBw
cm9taXNlMiwgcHJvbWlzZTMgXTsKLQotICAgICAgICAgICAgICBSU1ZQLlByb21pc2UuYWxsKHBy
b21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKLSAgICAgICAgICAgICAgICAvLyBDb2RlIGhl
cmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyEKLSAgICAg
ICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAvLyBlcnJvci5t
ZXNzYWdlID09PSAiMiIKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIEBtZXRob2QgYWxsCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlcwotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0
aGUgcHJvbWlzZS4KLSAgICAgICAgICAgICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgICAgICAg
ICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxs
IGBwcm9taXNlc2AgaGF2ZSBiZWVuCi0gICAgICAgICAgICAgIGZ1bGZpbGxlZCwgb3IgcmVqZWN0
ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLgotICAgICAgICAgICAgICBAc3RhdGlj
Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rp
b24gYWxsKGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVudW1lcmF0
b3IodGhpcywgZW50cmllcywgdHJ1ZSwgbGFiZWwpLnByb21pc2U7Ci0gICAgICAgIH07Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCdyc3ZwL3Byb21pc2UvY2FzdCcsIFsKLSAgICAnLi9yZXNvbHZlJywK
LSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAgIHZhciByZXNvbHZlID0gX19k
ZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAZGVw
cmVjYXRlZAotCi0gICAgICAgICAgICAgIGBSU1ZQLlByb21pc2UuY2FzdGAgY29lcmNlcyBpdHMg
YXJndW1lbnQgdG8gYSBwcm9taXNlLCBvciByZXR1cm5zIHRoZQotICAgICAgICAgICAgICBhcmd1
bWVudCBpZiBpdCBpcyBhbHJlYWR5IGEgcHJvbWlzZSB3aGljaCBzaGFyZXMgYSBjb25zdHJ1Y3Rv
ciB3aXRoIHRoZSBjYXN0ZXIuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUlNWUC5Qcm9t
aXNlLnJlc29sdmUoMSk7Ci0gICAgICAgICAgICAgIHZhciBjYXN0ZWQgPSBSU1ZQLlByb21pc2Uu
Y2FzdChwcm9taXNlKTsKLQotICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9taXNlID09PSBj
YXN0ZWQpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluIHRo
ZSBjYXNlIG9mIGEgcHJvbWlzZSB3aG9zZSBjb25zdHJ1Y3RvciBkb2VzIG5vdCBtYXRjaCwgaXQg
aXMgYXNzaW1pbGF0ZWQuCi0gICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgcHJvbWlzZSB3aWxs
IGZ1bGZpbGwgb3IgcmVqZWN0IGJhc2VkIG9uIHRoZSBvdXRjb21lIG9mIHRoZQotICAgICAgICAg
ICAgICBwcm9taXNlIGJlaW5nIGNhc3RlZC4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHRoZW5uYWJsZSA9
ICQuZ2V0SlNPTignL2FwaS9mb28nKTsKLSAgICAgICAgICAgICAgdmFyIGNhc3RlZCA9IFJTVlAu
UHJvbWlzZS5jYXN0KHRoZW5uYWJsZSk7Ci0KLSAgICAgICAgICAgICAgY29uc29sZS5sb2codGhl
bm5hYmxlID09PSBjYXN0ZWQpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBjb25zb2xlLmxvZyhj
YXN0ZWQgaW5zdGFuY2VvZiBSU1ZQLlByb21pc2UpIC8vIHRydWUKLQotICAgICAgICAgICAgICBj
YXN0ZWQudGhlbihmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAgICAgICAgLy8gZGF0YSBpcyB0
aGUgdmFsdWUgZ2V0SlNPTiBmdWxmaWxscyB3aXRoCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiBhIG5vbi1wcm9taXNl
LCBhIHByb21pc2Ugd2hpY2ggd2lsbCBmdWxmaWxsIHdpdGggdGhhdCB2YWx1ZSBpcwotICAgICAg
ICAgICAgICByZXR1cm5lZC4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHZhbHVlID0gMTsgLy8gY291bGQg
YmUgYSBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgdW5kZWZpbmVkLi4uCi0gICAgICAgICAgICAg
IHZhciBjYXN0ZWQgPSBSU1ZQLlByb21pc2UuY2FzdCh2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAg
Y29uc29sZS5sb2codmFsdWUgPT09IGNhc3RlZCk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGNv
bnNvbGUubG9nKGNhc3RlZCBpbnN0YW5jZW9mIFJTVlAuUHJvbWlzZSkgLy8gdHJ1ZQotCi0gICAg
ICAgICAgICAgIGNhc3RlZC50aGVuKGZ1bmN0aW9uKHZhbCkgewotICAgICAgICAgICAgICAgIHZh
bCA9PT0gdmFsdWUgLy8gPT4gdHJ1ZQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgYFJTVlAuUHJvbWlzZS5jYXN0YCBpcyBzaW1pbGFyIHRvIGBS
U1ZQLlByb21pc2UucmVzb2x2ZWAsIGJ1dCBgUlNWUC5Qcm9taXNlLmNhc3RgIGRpZmZlcnMgaW4g
dGhlCi0gICAgICAgICAgICAgIGZvbGxvd2luZyB3YXlzOgotCi0gICAgICAgICAgICAgICogYFJT
VlAuUHJvbWlzZS5jYXN0YCBzZXJ2ZXMgYXMgYSBtZW1vcnktZWZmaWNpZW50IHdheSBvZiBnZXR0
aW5nIGEgcHJvbWlzZSwgd2hlbiB5b3UKLSAgICAgICAgICAgICAgaGF2ZSBzb21ldGhpbmcgdGhh
dCBjb3VsZCBlaXRoZXIgYmUgYSBwcm9taXNlIG9yIGEgdmFsdWUuIFJTVlAucmVzb2x2ZQotICAg
ICAgICAgICAgICB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGJ1dCB3aWxsIGNyZWF0ZSBhIG5l
dyBwcm9taXNlIHdyYXBwZXIgaWYgdGhlCi0gICAgICAgICAgICAgIGFyZ3VtZW50IGlzIGEgcHJv
bWlzZS4KLSAgICAgICAgICAgICAgKiBgUlNWUC5Qcm9taXNlLmNhc3RgIGlzIGEgd2F5IG9mIGNh
c3RpbmcgaW5jb21pbmcgdGhlbmFibGVzIG9yIHByb21pc2Ugc3ViY2xhc3NlcyB0bwotICAgICAg
ICAgICAgICBwcm9taXNlcyBvZiB0aGUgZXhhY3QgY2xhc3Mgc3BlY2lmaWVkLCBzbyB0aGF0IHRo
ZSByZXN1bHRpbmcgb2JqZWN0J3MgYHRoZW5gIGlzCi0gICAgICAgICAgICAgIGVuc3VyZWQgdG8g
aGF2ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbnN0cnVjdG9yIHlvdSBhcmUgY2FsbGluZyBjYXN0
IG9uIChpLmUuLCBSU1ZQLlByb21pc2UpLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgY2FzdAot
ICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmpl
Y3QgdG8gYmUgY2FzdGVkCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRp
b25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgICAgICAgICBVc2Vm
dWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UK
LSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSByZXNvbHZl
OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9wcm9taXNlL3JhY2UnLCBbCi0gICAgJy4uL3V0
aWxzJywKLSAgICAnLi4vLWludGVybmFsJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlv
biAoX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kxX18u
aXNBcnJheTsKLSAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBfX2RlcGVuZGVuY3kxX18uaXNGdW5j
dGlvbjsKLSAgICAgICAgdmFyIGlzTWF5YmVUaGVuYWJsZSA9IF9fZGVwZW5kZW5jeTFfXy5pc01h
eWJlVGhlbmFibGU7Ci0gICAgICAgIHZhciBub29wID0gX19kZXBlbmRlbmN5Ml9fLm5vb3A7Ci0g
ICAgICAgIHZhciByZXNvbHZlID0gX19kZXBlbmRlbmN5Ml9fLnJlc29sdmU7Ci0gICAgICAgIHZh
ciByZWplY3QgPSBfX2RlcGVuZGVuY3kyX18ucmVqZWN0OwotICAgICAgICB2YXIgc3Vic2NyaWJl
ID0gX19kZXBlbmRlbmN5Ml9fLnN1YnNjcmliZTsKLSAgICAgICAgdmFyIFBFTkRJTkcgPSBfX2Rl
cGVuZGVuY3kyX18uUEVORElORzsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLlBy
b21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhl
IHNhbWUgd2F5IGFzIHRoZQotICAgICAgICAgICAgICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBz
ZXR0bGUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMSA9IG5ldyBSU1ZQLlByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgICAgICAgICByZXNvbHZlKCJwcm9taXNlIDEiKTsKLSAgICAgICAg
ICAgICAgICB9LCAyMDApOwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIg
cHJvbWlzZTIgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7Ci0g
ICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAg
cmVzb2x2ZSgicHJvbWlzZSAyIik7Ci0gICAgICAgICAgICAgICAgfSwgMTAwKTsKLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgUlNWUC5Qcm9taXNlLnJhY2UoW3Byb21pc2UxLCBw
cm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXsKLSAgICAgICAgICAgICAgICAvLyByZXN1
bHQgPT09ICJwcm9taXNlIDIiIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNl
MQotICAgICAgICAgICAgICAgIC8vIHdhcyByZXNvbHZlZC4KLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBSU1ZQLlByb21pc2UucmFjZWAgaXMg
ZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdAotICAgICAg
ICAgICAgICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3Ro
ZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlCi0gICAgICAgICAgICAgIGBwcm9taXNlc2AgYXJyYXkg
YXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXMK
LSAgICAgICAgICAgICAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMg
YmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkCi0gICAgICAgICAgICAgIHByb21pc2Ugd2ls
bCBiZWNvbWUgcmVqZWN0ZWQ6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgcHJvbWlzZTEgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCl7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewotICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZSgicHJvbWlzZSAxIik7Ci0gICAgICAgICAgICAgICAgfSwgMjAw
KTsKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHByb21pc2UyID0gbmV3
IFJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewotICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJy
b3IoInByb21pc2UgMiIpKTsKLSAgICAgICAgICAgICAgICB9LCAxMDApOwotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICBSU1ZQLlByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21p
c2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpewotICAgICAgICAgICAgICAgIC8vIENvZGUgaGVy
ZSBuZXZlciBydW5zCi0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7Ci0gICAgICAg
ICAgICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICJwcm9taXNlIDIiIGJlY2F1c2UgcHJvbWlz
ZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBwcm9taXNlIDEg
YmVjYW1lIGZ1bGZpbGxlZAotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVu
dGluZyB0aW1lb3V0czoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgIFJTVlAuUHJvbWlzZS5yYWNlKFthamF4KCdmb28uanNvbicpLCB0aW1lb3V0KDUwMDApXSkK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCByYWNlCi0gICAgICAg
ICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQHBhcmFtIHtBcnJheX0gcHJvbWlzZXMgYXJy
YXkgb2YgcHJvbWlzZXMgdG8gb2JzZXJ2ZQotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
bGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBkZXNjcmliaW5nIHRoZSBwcm9taXNlIHJldHVybmVk
LgotICAgICAgICAgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1
cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB3aGljaCBzZXR0bGVzIGluIHRoZSBzYW1lIHdheSBhcyB0
aGUgZmlyc3QgcGFzc2VkCi0gICAgICAgICAgICAgIHByb21pc2UgdG8gc2V0dGxlLgotICAgICAg
ICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIHJhY2Uo
ZW50cmllcywgbGFiZWwpIHsKLSAgICAgICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICov
Ci0gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzLCBlbnRyeTsKLSAgICAgICAgICAg
IHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3AsIGxhYmVsKTsKLSAgICAgICAgICAg
IGlmICghaXNBcnJheShlbnRyaWVzKSkgewotICAgICAgICAgICAgICAgIHJlamVjdChwcm9taXNl
LCBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuJykpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBwcm9taXNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoOwotICAgICAgICAgICAgZnVuY3Rpb24gb25GdWxm
aWxsbWVudCh2YWx1ZSkgewotICAgICAgICAgICAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29u
KSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJ
TkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3Vic2NyaWJlKENvbnN0
cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSksIHVuZGVmaW5lZCwgb25GdWxmaWxsbWVudCwgb25S
ZWplY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7Ci0g
ICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3ZwL3Byb21pc2UvcmVqZWN0JywgWwot
ICAgICcuLi8taW50ZXJuYWwnLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2Rl
cGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAg
ICAgdmFyIG5vb3AgPSBfX2RlcGVuZGVuY3kxX18ubm9vcDsKLSAgICAgICAgdmFyIF9yZWplY3Qg
PSBfX2RlcGVuZGVuY3kxX18ucmVqZWN0OwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYFJT
VlAuUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBh
c3NlZCBgcmVhc29uYC4KLSAgICAgICAgICAgICAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9s
bG93aW5nOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFy
IHByb21pc2UgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7Ci0g
ICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpOwotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpewotICAg
ICAgICAgICAgICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNl
IGlzIHJlamVjdGVkIQotICAgICAgICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pewotICAgICAg
ICAgICAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJwotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW5zdGVhZCBvZiB3cml0aW5n
IHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2Ug
PSBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpOwotCi0gICAgICAgICAg
ICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgLy8gQ29k
ZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhCi0gICAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7Ci0gICAgICAgICAgICAgICAgLy8gcmVhc29u
Lm1lc3NhZ2UgPT09ICdXSE9PUFMnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlamVjdAotICAgICAgICAgICAgICBAc3RhdGlj
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7QW55fSByZWFzb24gdmFsdWUgdGhhdCB0aGUgcmV0dXJu
ZWQgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGguCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5aW5nIHRoZSByZXR1cm5l
ZCBwcm9taXNlLgotICAgICAgICAgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAg
ICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBg
cmVhc29uYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10g
PSBmdW5jdGlvbiByZWplY3QocmVhc29uLCBsYWJlbCkgewotICAgICAgICAgICAgLypqc2hpbnQg
dmFsaWR0aGlzOnRydWUgKi8KLSAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7Ci0g
ICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wLCBsYWJlbCk7Ci0g
ICAgICAgICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7Ci0gICAgICAgICAgICByZXR1cm4g
cHJvbWlzZTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvcHJvbWlzZS9y
ZXNvbHZlJywgWwotICAgICcuLi8taW50ZXJuYWwnLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1
bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3Ry
aWN0JzsKLSAgICAgICAgdmFyIG5vb3AgPSBfX2RlcGVuZGVuY3kxX18ubm9vcDsKLSAgICAgICAg
dmFyIF9yZXNvbHZlID0gX19kZXBlbmRlbmN5MV9fLnJlc29sdmU7Ci0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBgUlNWUC5Qcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQg
d2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgcGFzc2VkIGB2YWx1
ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzoKLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFJTVlAuUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewotICAgICAgICAgICAgICAgIHJlc29sdmUoMSk7
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlv
bih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgLy8gdmFsdWUgPT09IDEKLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluc3RlYWQgb2Ygd3JpdGlu
ZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzoK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNl
ID0gUlNWUC5Qcm9taXNlLnJlc29sdmUoMSk7Ci0KLSAgICAgICAgICAgICAgcHJvbWlzZS50aGVu
KGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZSA9PT0gMQotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBy
ZXNvbHZlCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQHBhcmFtIHtBbnl9
IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3
aXRoCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcg
Zm9yIGlkZW50aWZ5aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlLgotICAgICAgICAgICAgICBVc2Vm
dWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlz
ZSB0aGF0IHdpbGwgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSBnaXZlbgotICAgICAgICAgICAg
ICBgdmFsdWVgCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCdd
ID0gZnVuY3Rpb24gcmVzb2x2ZShvYmplY3QsIGxhYmVsKSB7Ci0gICAgICAgICAgICAvKmpzaGlu
dCB2YWxpZHRoaXM6dHJ1ZSAqLwotICAgICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpczsK
LSAgICAgICAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYg
b2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3RvcikgewotICAgICAgICAgICAgICAgIHJl
dHVybiBvYmplY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5l
dyBDb25zdHJ1Y3Rvcihub29wLCBsYWJlbCk7Ci0gICAgICAgICAgICBfcmVzb2x2ZShwcm9taXNl
LCBvYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7Ci0gICAgICAgIH07Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCdyc3ZwL3JhY2UnLCBbCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJ2V4
cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5j
eTFfX1snZGVmYXVsdCddOwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyBpcyBhIGNv
bnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2UucmFjZWAuCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCByYWNlCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZvciBS
U1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IG9mIHByb21pc2Vz
LgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQW4gb3B0aW9uYWwgbGFiZWwu
IFRoaXMgaXMgdXNlZnVsCi0gICAgICAgICAgICAgIGZvciB0b29saW5nLgotICAgICAgICAgICAg
ICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiByYWNlKGFycmF5
LCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmFjZShhcnJheSwgbGFiZWwp
OwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9yZWplY3QnLCBbCi0gICAg
Jy4vcHJvbWlzZScsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5j
eTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIg
UHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2UucmVq
ZWN0YC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlamVjdAotICAgICAgICAgICAgICBAc3Rh
dGljCi0gICAgICAgICAgICAgIEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge0FueX0g
cmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3
aXRoLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5n
IGZvciBpZGVudGlmeWluZyB0aGUgcmV0dXJuZWQgcHJvbWlzZS4KLSAgICAgICAgICAgICAgVXNl
ZnVsIGZvciB0b29saW5nLgotICAgICAgICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21p
c2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuCi0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rpb24gcmVqZWN0KHJlYXNvbiwgbGFi
ZWwpIHsKLSAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24sIGxhYmVsKTsK
LSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvcmVzb2x2ZScsIFsKLSAgICAn
Li9wcm9taXNlJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5
MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAgIHZhciBQ
cm9taXNlID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVudCBhbGlhcyBmb3IgYFJTVlAuUHJvbWlzZS5yZXNv
bHZlYC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmUKLSAgICAgICAgICAgICAgQHN0
YXRpYwotICAgICAgICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAgICAgQHBhcmFtIHtBbnl9
IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3
aXRoCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcg
Zm9yIGlkZW50aWZ5aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlLgotICAgICAgICAgICAgICBVc2Vm
dWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlz
ZSB0aGF0IHdpbGwgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSBnaXZlbgotICAgICAgICAgICAg
ICBgdmFsdWVgCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCdd
ID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSwgbGFiZWwpIHsKLSAgICAgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUodmFsdWUsIGxhYmVsKTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoJ3JzdnAvcmV0aHJvdycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoX19leHBvcnRzX18p
IHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYFJT
VlAucmV0aHJvd2Agd2lsbCByZXRocm93IGFuIGVycm9yIG9uIHRoZSBuZXh0IHR1cm4gb2YgdGhl
IEphdmFTY3JpcHQgZXZlbnQKLSAgICAgICAgICAgICAgbG9vcCBpbiBvcmRlciB0byBhaWQgZGVi
dWdnaW5nLgotCi0gICAgICAgICAgICAgIFByb21pc2VzIEErIHNwZWNpZmllcyB0aGF0IGFueSBl
eGNlcHRpb25zIHRoYXQgb2NjdXIgd2l0aCBhIHByb21pc2UgbXVzdCBiZQotICAgICAgICAgICAg
ICBjYXVnaHQgYnkgdGhlIHByb21pc2VzIGltcGxlbWVudGF0aW9uIGFuZCBidWJibGVkIHRvIHRo
ZSBsYXN0IGhhbmRsZXIuIEZvcgotICAgICAgICAgICAgICB0aGlzIHJlYXNvbiwgaXQgaXMgcmVj
b21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzIHNwZWNpZnkgYSBzZWNvbmQgcmVqZWN0aW9uCi0gICAg
ICAgICAgICAgIGhhbmRsZXIgZnVuY3Rpb24gdG8gYHRoZW5gLiBIb3dldmVyLCBgUlNWUC5yZXRo
cm93YCB3aWxsIHRocm93IHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgb3V0c2lkZSBvZiB0
aGUgcHJvbWlzZSwgc28gaXQgYnViYmxlcyB1cCB0byB5b3VyIGNvbnNvbGUgaWYgaW4gdGhlIGJy
b3dzZXIsCi0gICAgICAgICAgICAgIG9yIGRvbWFpbi9jYXVzZSB1bmNhdWdodCBleGNlcHRpb24g
aW4gTm9kZS4gYHJldGhyb3dgIHdpbGwgYWxzbyB0aHJvdyB0aGUKLSAgICAgICAgICAgICAgZXJy
b3IgYWdhaW4gc28gdGhlIGVycm9yIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBwcm9taXNlIHBlciB0
aGUgc3BlYy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGZ1
bmN0aW9uIHRocm93cygpewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2hvb3Bz
IScpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcg
UlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7Ci0gICAgICAgICAgICAgICAg
dGhyb3dzKCk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHByb21pc2UuY2F0
Y2goUlNWUC5yZXRocm93KS50aGVuKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgLy8gQ29k
ZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgYmVjYW1lIHJlamVjdGVkIGR1
ZSB0byBhbgotICAgICAgICAgICAgICAgIC8vIGVycm9yIQotICAgICAgICAgICAgICB9LCBmdW5j
dGlvbiAoZXJyKXsKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdGhlIGVycm9yIGhlcmUKLSAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSAn
V2hvb3BzJyBlcnJvciB3aWxsIGJlIHRocm93biBvbiB0aGUgbmV4dCB0dXJuIG9mIHRoZSBldmVu
dCBsb29wCi0gICAgICAgICAgICAgIGFuZCB5b3UgY2FuIHdhdGNoIGZvciBpdCBpbiB5b3VyIGNv
bnNvbGUuIFlvdSBjYW4gYWxzbyBoYW5kbGUgaXQgdXNpbmcgYQotICAgICAgICAgICAgICByZWpl
Y3Rpb24gaGFuZGxlciBnaXZlbiB0byBgLnRoZW5gIG9yIGAuY2F0Y2hgIG9uIHRoZSByZXR1cm5l
ZCBwcm9taXNlLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgcmV0aHJvdwotICAgICAgICAgICAg
ICBAc3RhdGljCi0gICAgICAgICAgICAgIEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0g
e0Vycm9yfSByZWFzb24gcmVhc29uIHRoZSBwcm9taXNlIGJlY2FtZSByZWplY3RlZC4KLSAgICAg
ICAgICAgICAgQHRocm93cyBFcnJvcgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAg
ICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rpb24gcmV0aHJvdyhy
ZWFzb24pIHsKLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgICAgIHRocm93IHJlYXNvbjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhyb3cg
cmVhc29uOwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC91dGlscycsIFsn
ZXhwb3J0cyddLCBmdW5jdGlvbiAoX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3Qn
OwotICAgICAgICBmdW5jdGlvbiBvYmplY3RPckZ1bmN0aW9uKHgpIHsKLSAgICAgICAgICAgIHJl
dHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYg
eCAhPT0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBfX2V4cG9ydHNfXy5vYmplY3RPckZ1bmN0
aW9uID0gb2JqZWN0T3JGdW5jdGlvbjsKLSAgICAgICAgZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7
Ci0gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7Ci0gICAgICAgIH0K
LSAgICAgICAgX19leHBvcnRzX18uaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247Ci0gICAgICAgIGZ1
bmN0aW9uIGlzTWF5YmVUaGVuYWJsZSh4KSB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHgg
PT09ICdvYmplY3QnICYmIHggIT09IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBvcnRz
X18uaXNNYXliZVRoZW5hYmxlID0gaXNNYXliZVRoZW5hYmxlOwotICAgICAgICB2YXIgX2lzQXJy
YXk7Ci0gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSkgewotICAgICAgICAgICAgX2lzQXJyYXkg
PSBmdW5jdGlvbiAoeCkgewotICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7Ci0gICAgICAgICAgICB9Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5Owot
ICAgICAgICB9Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX2lzQXJyYXk7Ci0gICAgICAgIF9fZXhw
b3J0c19fLmlzQXJyYXkgPSBpc0FycmF5OwotICAgICAgICAvLyBEYXRlLm5vdyBpcyBub3QgYXZh
aWxhYmxlIGluIGJyb3dzZXJzIDwgSUU5Ci0gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmpl
Y3RzL0RhdGUvbm93I0NvbXBhdGliaWxpdHkKLSAgICAgICAgdmFyIG5vdyA9IERhdGUubm93IHx8
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsK
LSAgICAgICAgfTsKLSAgICAgICAgX19leHBvcnRzX18ubm93ID0gbm93OwotICAgICAgICB2YXIg
b19jcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIChvYmplY3QpIHsKLSAgICAgICAg
ICAgIHZhciBvID0gZnVuY3Rpb24gKCkge307Ci0gICAgICAgICAgICBvLnByb3RvdHlwZSA9IG9i
amVjdDsKLSAgICAgICAgICAgIHJldHVybiBvOwotICAgICAgICB9OwotICAgICAgICBfX2V4cG9y
dHNfXy5vX2NyZWF0ZSA9IG9fY3JlYXRlOwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cCcsIFsK
LSAgICAnLi9yc3ZwL3Byb21pc2UnLAotICAgICcuL3JzdnAvZXZlbnRzJywKLSAgICAnLi9yc3Zw
L25vZGUnLAotICAgICcuL3JzdnAvYWxsJywKLSAgICAnLi9yc3ZwL2FsbC1zZXR0bGVkJywKLSAg
ICAnLi9yc3ZwL3JhY2UnLAotICAgICcuL3JzdnAvaGFzaCcsCi0gICAgJy4vcnN2cC9oYXNoLXNl
dHRsZWQnLAotICAgICcuL3JzdnAvcmV0aHJvdycsCi0gICAgJy4vcnN2cC9kZWZlcicsCi0gICAg
Jy4vcnN2cC9jb25maWcnLAotICAgICcuL3JzdnAvbWFwJywKLSAgICAnLi9yc3ZwL3Jlc29sdmUn
LAotICAgICcuL3JzdnAvcmVqZWN0JywKLSAgICAnLi9yc3ZwL2ZpbHRlcicsCi0gICAgJy4vcnN2
cC9hc2FwJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2Rl
cGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVu
Y3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFf
XywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywg
X19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19leHBvcnRzX18pIHsKLSAgICAg
ICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1sn
ZGVmYXVsdCddOwotICAgICAgICB2YXIgRXZlbnRUYXJnZXQgPSBfX2RlcGVuZGVuY3kyX19bJ2Rl
ZmF1bHQnXTsKLSAgICAgICAgdmFyIGRlbm9kZWlmeSA9IF9fZGVwZW5kZW5jeTNfX1snZGVmYXVs
dCddOwotICAgICAgICB2YXIgYWxsID0gX19kZXBlbmRlbmN5NF9fWydkZWZhdWx0J107Ci0gICAg
ICAgIHZhciBhbGxTZXR0bGVkID0gX19kZXBlbmRlbmN5NV9fWydkZWZhdWx0J107Ci0gICAgICAg
IHZhciByYWNlID0gX19kZXBlbmRlbmN5Nl9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBoYXNo
ID0gX19kZXBlbmRlbmN5N19fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBoYXNoU2V0dGxlZCA9
IF9fZGVwZW5kZW5jeThfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgcmV0aHJvdyA9IF9fZGVw
ZW5kZW5jeTlfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgZGVmZXIgPSBfX2RlcGVuZGVuY3kx
MF9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBjb25maWcgPSBfX2RlcGVuZGVuY3kxMV9fLmNv
bmZpZzsKLSAgICAgICAgdmFyIGNvbmZpZ3VyZSA9IF9fZGVwZW5kZW5jeTExX18uY29uZmlndXJl
OwotICAgICAgICB2YXIgbWFwID0gX19kZXBlbmRlbmN5MTJfX1snZGVmYXVsdCddOwotICAgICAg
ICB2YXIgcmVzb2x2ZSA9IF9fZGVwZW5kZW5jeTEzX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFy
IHJlamVjdCA9IF9fZGVwZW5kZW5jeTE0X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGZpbHRl
ciA9IF9fZGVwZW5kZW5jeTE1X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGFzYXAgPSBfX2Rl
cGVuZGVuY3kxNl9fWydkZWZhdWx0J107Ci0gICAgICAgIGNvbmZpZy5hc3luYyA9IGFzYXA7Ci0g
ICAgICAgIC8vIGRlZmF1bHQgYXN5bmMgaXMgYXNhcDsKLSAgICAgICAgZnVuY3Rpb24gYXN5bmMo
Y2FsbGJhY2ssIGFyZykgewotICAgICAgICAgICAgY29uZmlnLmFzeW5jKGNhbGxiYWNrLCBhcmcp
OwotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIG9uKCkgewotICAgICAgICAgICAgY29uZmln
Lm9uLmFwcGx5KGNvbmZpZywgYXJndW1lbnRzKTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlv
biBvZmYoKSB7Ci0gICAgICAgICAgICBjb25maWcub2ZmLmFwcGx5KGNvbmZpZywgYXJndW1lbnRz
KTsKLSAgICAgICAgfQotICAgICAgICAvLyBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIHRocm91Z2gg
YHdpbmRvdy5fX1BST01JU0VfSU5UUlVNRU5UQVRJT05fX2AKLSAgICAgICAgaWYgKHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuX19QUk9NSVNFX0lOU1RSVU1F
TlRBVElPTl9fID09PSAnb2JqZWN0JykgewotICAgICAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHdp
bmRvdy5fX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX187Ci0gICAgICAgICAgICBjb25maWd1cmUo
J2luc3RydW1lbnQnLCB0cnVlKTsKLSAgICAgICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBj
YWxsYmFja3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzLmhhc093blByb3BlcnR5
KGV2ZW50TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb24oZXZlbnROYW1lLCBjYWxsYmFj
a3NbZXZlbnROYW1lXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIF9fZXhwb3J0c19fLlByb21pc2UgPSBQcm9taXNlOwotICAgICAgICBfX2V4
cG9ydHNfXy5FdmVudFRhcmdldCA9IEV2ZW50VGFyZ2V0OwotICAgICAgICBfX2V4cG9ydHNfXy5h
bGwgPSBhbGw7Ci0gICAgICAgIF9fZXhwb3J0c19fLmFsbFNldHRsZWQgPSBhbGxTZXR0bGVkOwot
ICAgICAgICBfX2V4cG9ydHNfXy5yYWNlID0gcmFjZTsKLSAgICAgICAgX19leHBvcnRzX18uaGFz
aCA9IGhhc2g7Ci0gICAgICAgIF9fZXhwb3J0c19fLmhhc2hTZXR0bGVkID0gaGFzaFNldHRsZWQ7
Ci0gICAgICAgIF9fZXhwb3J0c19fLnJldGhyb3cgPSByZXRocm93OwotICAgICAgICBfX2V4cG9y
dHNfXy5kZWZlciA9IGRlZmVyOwotICAgICAgICBfX2V4cG9ydHNfXy5kZW5vZGVpZnkgPSBkZW5v
ZGVpZnk7Ci0gICAgICAgIF9fZXhwb3J0c19fLmNvbmZpZ3VyZSA9IGNvbmZpZ3VyZTsKLSAgICAg
ICAgX19leHBvcnRzX18ub24gPSBvbjsKLSAgICAgICAgX19leHBvcnRzX18ub2ZmID0gb2ZmOwot
ICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZlID0gcmVzb2x2ZTsKLSAgICAgICAgX19leHBvcnRz
X18ucmVqZWN0ID0gcmVqZWN0OwotICAgICAgICBfX2V4cG9ydHNfXy5hc3luYyA9IGFzeW5jOwot
ICAgICAgICBfX2V4cG9ydHNfXy5tYXAgPSBtYXA7Ci0gICAgICAgIF9fZXhwb3J0c19fLmZpbHRl
ciA9IGZpbHRlcjsKLSAgICB9KTsKLQotICAgIHJlcXVpcmVNb2R1bGUoImVtYmVyIik7Ci0KLX0p
KCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2hh
bmRsZWJhcnMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2hhbmRs
ZWJhcnMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MDMzNDYwYTRlYWU5MGM3
MjkzZDQ2NmRjM2ExMmY2YjcxZGE4NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9oYW5k
bGViYXJzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjc0NiArMCwwIEBACi0vKiEKLQotIGhhbmRs
ZWJhcnMgdjEuMy4wCi0KLUNvcHlyaWdodCAoQykgMjAxMSBieSBZZWh1ZGEgS2F0egotCi1QZXJt
aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv
YnRhaW5pbmcgYSBjb3B5Ci1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50
YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJlIHdp
dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0
cwotdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs
aWNlbnNlLCBhbmQvb3Igc2VsbAotY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p
dCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi1mdXJuaXNoZWQgdG8gZG8gc28sIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgot
YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRI
RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL
SU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVU
SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF
UyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9O
IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLVRIRSBT
T0ZUV0FSRS4KLQotQGxpY2Vuc2UKLSovCi0vKiBleHBvcnRlZCBIYW5kbGViYXJzICovCi12YXIg
SGFuZGxlYmFycyA9IChmdW5jdGlvbigpIHsKLS8vIGhhbmRsZWJhcnMvc2FmZS1zdHJpbmcuanMK
LXZhciBfX21vZHVsZTRfXyA9IChmdW5jdGlvbigpIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIg
X19leHBvcnRzX187Ci0gIC8vIEJ1aWxkIG91dCBvdXIgYmFzaWMgU2FmZVN0cmluZyB0eXBlCi0g
IGZ1bmN0aW9uIFNhZmVTdHJpbmcoc3RyaW5nKSB7Ci0gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7
Ci0gIH0KLQotICBTYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiAiIiArIHRoaXMuc3RyaW5nOwotICB9OwotCi0gIF9fZXhwb3J0c19fID0gU2Fm
ZVN0cmluZzsKLSAgcmV0dXJuIF9fZXhwb3J0c19fOwotfSkoKTsKLQotLy8gaGFuZGxlYmFycy91
dGlscy5qcwotdmFyIF9fbW9kdWxlM19fID0gKGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXykgewot
ICAidXNlIHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXyA9IHt9OwotICAvKmpzaGludCAtVzAw
NCAqLwotICB2YXIgU2FmZVN0cmluZyA9IF9fZGVwZW5kZW5jeTFfXzsKLQotICB2YXIgZXNjYXBl
ID0gewotICAgICImIjogIiZhbXA7IiwKLSAgICAiPCI6ICImbHQ7IiwKLSAgICAiPiI6ICImZ3Q7
IiwKLSAgICAnIic6ICImcXVvdDsiLAotICAgICInIjogIiYjeDI3OyIsCi0gICAgImAiOiAiJiN4
NjA7IgotICB9OwotCi0gIHZhciBiYWRDaGFycyA9IC9bJjw+IidgXS9nOwotICB2YXIgcG9zc2li
bGUgPSAvWyY8PiInYF0vOwotCi0gIGZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7Ci0gICAgcmV0
dXJuIGVzY2FwZVtjaHJdIHx8ICImYW1wOyI7Ci0gIH0KLQotICBmdW5jdGlvbiBleHRlbmQob2Jq
LCB2YWx1ZSkgewotICAgIGZvcih2YXIga2V5IGluIHZhbHVlKSB7Ci0gICAgICBpZihPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHsKLSAgICAgICAgb2Jq
W2tleV0gPSB2YWx1ZVtrZXldOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIF9fZXhwb3J0c19f
LmV4dGVuZCA9IGV4dGVuZDt2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
OwotICBfX2V4cG9ydHNfXy50b1N0cmluZyA9IHRvU3RyaW5nOwotICAvLyBTb3VyY2VkIGZyb20g
bG9kYXNoCi0gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0
ZXIvTElDRU5TRS50eHQKLSAgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkgewotICAg
IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7Ci0gIH07Ci0gIC8vIGZhbGxiYWNr
IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaQotICBpZiAoaXNGdW5jdGlv
bigveC8pKSB7Ci0gICAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1
cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmIHRvU3RyaW5nLmNhbGwodmFsdWUpID09
PSAnW29iamVjdCBGdW5jdGlvbl0nOwotICAgIH07Ci0gIH0KLSAgdmFyIGlzRnVuY3Rpb247Ci0g
IF9fZXhwb3J0c19fLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uOwotICB2YXIgaXNBcnJheSA9IEFy
cmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1cm4gKHZhbHVlICYmIHR5
cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2Jq
ZWN0IEFycmF5XScgOiBmYWxzZTsKLSAgfTsKLSAgX19leHBvcnRzX18uaXNBcnJheSA9IGlzQXJy
YXk7Ci0KLSAgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHsKLSAgICAvLyBkb24n
dCBlc2NhcGUgU2FmZVN0cmluZ3MsIHNpbmNlIHRoZXkncmUgYWxyZWFkeSBzYWZlCi0gICAgaWYg
KHN0cmluZyBpbnN0YW5jZW9mIFNhZmVTdHJpbmcpIHsKLSAgICAgIHJldHVybiBzdHJpbmcudG9T
dHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJpbmcgJiYgc3RyaW5nICE9PSAwKSB7Ci0gICAg
ICByZXR1cm4gIiI7Ci0gICAgfQotCi0gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBh
cyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kCi0gICAgLy8g
dGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2Vu
ZXMsIGNhdXNpbmcgaXNzdWVzIGlmCi0gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBl
c2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuCi0gICAgc3RyaW5nID0gIiIgKyBzdHJpbmc7Ci0KLSAg
ICBpZighcG9zc2libGUudGVzdChzdHJpbmcpKSB7IHJldHVybiBzdHJpbmc7IH0KLSAgICByZXR1
cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpOwotICB9Ci0KLSAgX19leHBv
cnRzX18uZXNjYXBlRXhwcmVzc2lvbiA9IGVzY2FwZUV4cHJlc3Npb247ZnVuY3Rpb24gaXNFbXB0
eSh2YWx1ZSkgewotICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09
PSAwKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgfQotCi0gIF9fZXhwb3J0c19fLmlzRW1wdHkgPSBpc0VtcHR5OwotICBy
ZXR1cm4gX19leHBvcnRzX187Ci19KShfX21vZHVsZTRfXyk7Ci0KLS8vIGhhbmRsZWJhcnMvZXhj
ZXB0aW9uLmpzCi12YXIgX19tb2R1bGU1X18gPSAoZnVuY3Rpb24oKSB7Ci0gICJ1c2Ugc3RyaWN0
IjsKLSAgdmFyIF9fZXhwb3J0c19fOwotCi0gIHZhciBlcnJvclByb3BzID0gWydkZXNjcmlwdGlv
bicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXIn
LCAnc3RhY2snXTsKLQotICBmdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkgewotICAg
IHZhciBsaW5lOwotICAgIGlmIChub2RlICYmIG5vZGUuZmlyc3RMaW5lKSB7Ci0gICAgICBsaW5l
ID0gbm9kZS5maXJzdExpbmU7Ci0KLSAgICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzon
ICsgbm9kZS5maXJzdENvbHVtbjsKLSAgICB9Ci0KLSAgICB2YXIgdG1wID0gRXJyb3IucHJvdG90
eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7Ci0KLSAgICAvLyBVbmZvcnR1bmF0
ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBm
b3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay4KLSAgICBmb3IgKHZhciBpZHggPSAwOyBpZHgg
PCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHsKLSAgICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhd
XSA9IHRtcFtlcnJvclByb3BzW2lkeF1dOwotICAgIH0KLQotICAgIGlmIChsaW5lKSB7Ci0gICAg
ICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lOwotICAgICAgdGhpcy5jb2x1bW4gPSBub2RlLmZpcnN0
Q29sdW1uOwotICAgIH0KLSAgfQotCi0gIEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3Io
KTsKLQotICBfX2V4cG9ydHNfXyA9IEV4Y2VwdGlvbjsKLSAgcmV0dXJuIF9fZXhwb3J0c19fOwot
fSkoKTsKLQotLy8gaGFuZGxlYmFycy9iYXNlLmpzCi12YXIgX19tb2R1bGUyX18gPSAoZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18pIHsKLSAgInVzZSBzdHJpY3QiOwot
ICB2YXIgX19leHBvcnRzX18gPSB7fTsKLSAgdmFyIFV0aWxzID0gX19kZXBlbmRlbmN5MV9fOwot
ICB2YXIgRXhjZXB0aW9uID0gX19kZXBlbmRlbmN5Ml9fOwotCi0gIHZhciBWRVJTSU9OID0gIjEu
My4wIjsKLSAgX19leHBvcnRzX18uVkVSU0lPTiA9IFZFUlNJT047dmFyIENPTVBJTEVSX1JFVklT
SU9OID0gNDsKLSAgX19leHBvcnRzX18uQ09NUElMRVJfUkVWSVNJT04gPSBDT01QSUxFUl9SRVZJ
U0lPTjsKLSAgdmFyIFJFVklTSU9OX0NIQU5HRVMgPSB7Ci0gICAgMTogJzw9IDEuMC5yYy4yJywg
Ly8gMS4wLnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24ndCByZXBvcnQgaXQKLSAgICAy
OiAnPT0gMS4wLjAtcmMuMycsCi0gICAgMzogJz09IDEuMC4wLXJjLjQnLAotICAgIDQ6ICc+PSAx
LjAuMCcKLSAgfTsKLSAgX19leHBvcnRzX18uUkVWSVNJT05fQ0hBTkdFUyA9IFJFVklTSU9OX0NI
QU5HRVM7Ci0gIHZhciBpc0FycmF5ID0gVXRpbHMuaXNBcnJheSwKLSAgICAgIGlzRnVuY3Rpb24g
PSBVdGlscy5pc0Z1bmN0aW9uLAotICAgICAgdG9TdHJpbmcgPSBVdGlscy50b1N0cmluZywKLSAg
ICAgIG9iamVjdFR5cGUgPSAnW29iamVjdCBPYmplY3RdJzsKLQotICBmdW5jdGlvbiBIYW5kbGVi
YXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMpIHsKLSAgICB0aGlzLmhlbHBlcnMgPSBo
ZWxwZXJzIHx8IHt9OwotICAgIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTsKLQotICAg
IHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7Ci0gIH0KLQotICBfX2V4cG9ydHNfXy5IYW5k
bGViYXJzRW52aXJvbm1lbnQgPSBIYW5kbGViYXJzRW52aXJvbm1lbnQ7SGFuZGxlYmFyc0Vudmly
b25tZW50LnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25t
ZW50LAotCi0gICAgbG9nZ2VyOiBsb2dnZXIsCi0gICAgbG9nOiBsb2csCi0KLSAgICByZWdpc3Rl
ckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4sIGludmVyc2UpIHsKLSAgICAgIGlmICh0b1N0cmlu
Zy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7Ci0gICAgICAgIGlmIChpbnZlcnNlIHx8IGZu
KSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUg
aGVscGVycycpOyB9Ci0gICAgICAgIFV0aWxzLmV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGludmVyc2UpIHsgZm4ubm90ID0gaW52ZXJzZTsg
fQotICAgICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjsKLSAgICAgIH0KLSAgICB9LAotCi0g
ICAgcmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lLCBzdHIpIHsKLSAgICAgIGlmICh0b1N0
cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7Ci0gICAgICAgIFV0aWxzLmV4dGVuZCh0
aGlzLnBhcnRpYWxzLCAgbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLnBhcnRp
YWxzW25hbWVdID0gc3RyOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiByZWdp
c3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7Ci0gICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxw
ZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihhcmcpIHsKLSAgICAgIGlmKGFyZ3VtZW50cy5s
ZW5ndGggPT09IDIpIHsKLSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgaGVscGVyOiAnIiArIGFyZyAr
ICInIik7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcign
YmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICAgICAg
dmFyIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UgfHwgZnVuY3Rpb24oKSB7fSwgZm4gPSBvcHRp
b25zLmZuOwotCi0gICAgICBpZiAoaXNGdW5jdGlvbihjb250ZXh0KSkgeyBjb250ZXh0ID0gY29u
dGV4dC5jYWxsKHRoaXMpOyB9Ci0KLSAgICAgIGlmKGNvbnRleHQgPT09IHRydWUpIHsKLSAgICAg
ICAgcmV0dXJuIGZuKHRoaXMpOwotICAgICAgfSBlbHNlIGlmKGNvbnRleHQgPT09IGZhbHNlIHx8
IGNvbnRleHQgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTsKLSAgICAg
IH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkgewotICAgICAgICBpZihjb250ZXh0Lmxlbmd0
aCA+IDApIHsKLSAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuaGVscGVycy5lYWNoKGNvbnRleHQs
IG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBpbnZlcnNlKHRo
aXMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZm4oY29udGV4
dCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFj
aCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgIHZhciBmbiA9IG9wdGlvbnMu
Zm4sIGludmVyc2UgPSBvcHRpb25zLmludmVyc2U7Ci0gICAgICB2YXIgaSA9IDAsIHJldCA9ICIi
LCBkYXRhOwotCi0gICAgICBpZiAoaXNGdW5jdGlvbihjb250ZXh0KSkgeyBjb250ZXh0ID0gY29u
dGV4dC5jYWxsKHRoaXMpOyB9Ci0KLSAgICAgIGlmIChvcHRpb25zLmRhdGEpIHsKLSAgICAgICAg
ZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmKGNv
bnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgIGlmIChpc0Fy
cmF5KGNvbnRleHQpKSB7Ci0gICAgICAgICAgZm9yKHZhciBqID0gY29udGV4dC5sZW5ndGg7IGk8
ajsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICBkYXRhLmlu
ZGV4ID0gaTsKLSAgICAgICAgICAgICAgZGF0YS5maXJzdCA9IChpID09PSAwKTsKLSAgICAgICAg
ICAgICAgZGF0YS5sYXN0ICA9IChpID09PSAoY29udGV4dC5sZW5ndGgtMSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0ID0gcmV0ICsgZm4oY29udGV4dFtpXSwgeyBkYXRhOiBkYXRh
IH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmb3IodmFyIGtl
eSBpbiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBpZihjb250ZXh0Lmhhc093blByb3BlcnR5KGtl
eSkpIHsKLSAgICAgICAgICAgICAgaWYoZGF0YSkgeyAKLSAgICAgICAgICAgICAgICBkYXRhLmtl
eSA9IGtleTsgCi0gICAgICAgICAgICAgICAgZGF0YS5pbmRleCA9IGk7Ci0gICAgICAgICAgICAg
ICAgZGF0YS5maXJzdCA9IChpID09PSAwKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICByZXQgPSByZXQgKyBmbihjb250ZXh0W2tleV0sIHtkYXRhOiBkYXRhfSk7Ci0gICAgICAgICAg
ICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LQotICAgICAgaWYoaSA9PT0gMCl7Ci0gICAgICAgIHJldCA9IGludmVyc2UodGhpcyk7Ci0gICAg
ICB9Ci0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSk7Ci0KLSAgICBpbnN0YW5jZS5yZWdpc3Rl
ckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykgewotICAgICAgaWYg
KGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7IGNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWwuY2Fs
bCh0aGlzKTsgfQotCi0gICAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlbmRlciB0aGUg
cG9zaXRpdmUgcGF0aCBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IGFuZCBub3QgZW1wdHkuCi0gICAg
ICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29u
ZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZQotICAgICAgLy8gYmVoYXZp
b3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxl
ZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS4KLSAgICAgIGlmICgoIW9wdGlvbnMu
aGFzaC5pbmNsdWRlWmVybyAmJiAhY29uZGl0aW9uYWwpIHx8IFV0aWxzLmlzRW1wdHkoY29uZGl0
aW9uYWwpKSB7Ci0gICAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICByZXR1cm4gb3B0aW9ucy5mbih0aGlzKTsKLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd1bmxlc3MnLCBmdW5jdGlvbihjb25k
aXRpb25hbCwgb3B0aW9ucykgewotICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10u
Y2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9w
dGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pOwotICAgIH0pOwotCi0gICAgaW5zdGFuY2Uu
cmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAg
ICBpZiAoaXNGdW5jdGlvbihjb250ZXh0KSkgeyBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMp
OyB9Ci0KLSAgICAgIGlmICghVXRpbHMuaXNFbXB0eShjb250ZXh0KSkgcmV0dXJuIG9wdGlvbnMu
Zm4oY29udGV4dCk7Ci0gICAgfSk7Ci0KLSAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9n
JywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICAgICAgdmFyIGxldmVsID0gb3B0aW9u
cy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsID8gcGFyc2VJbnQob3B0aW9ucy5k
YXRhLmxldmVsLCAxMCkgOiAxOwotICAgICAgaW5zdGFuY2UubG9nKGxldmVsLCBjb250ZXh0KTsK
LSAgICB9KTsKLSAgfQotCi0gIHZhciBsb2dnZXIgPSB7Ci0gICAgbWV0aG9kTWFwOiB7IDA6ICdk
ZWJ1ZycsIDE6ICdpbmZvJywgMjogJ3dhcm4nLCAzOiAnZXJyb3InIH0sCi0KLSAgICAvLyBTdGF0
ZSBlbnVtCi0gICAgREVCVUc6IDAsCi0gICAgSU5GTzogMSwKLSAgICBXQVJOOiAyLAotICAgIEVS
Uk9SOiAzLAotICAgIGxldmVsOiAzLAotCi0gICAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhl
IGhvc3QgZW52aXJvbm1lbnQKLSAgICBsb2c6IGZ1bmN0aW9uKGxldmVsLCBvYmopIHsKLSAgICAg
IGlmIChsb2dnZXIubGV2ZWwgPD0gbGV2ZWwpIHsKLSAgICAgICAgdmFyIG1ldGhvZCA9IGxvZ2dl
ci5tZXRob2RNYXBbbGV2ZWxdOwotICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRl
ZmluZWQnICYmIGNvbnNvbGVbbWV0aG9kXSkgewotICAgICAgICAgIGNvbnNvbGVbbWV0aG9kXS5j
YWxsKGNvbnNvbGUsIG9iaik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0gIF9f
ZXhwb3J0c19fLmxvZ2dlciA9IGxvZ2dlcjsKLSAgZnVuY3Rpb24gbG9nKGxldmVsLCBvYmopIHsg
bG9nZ2VyLmxvZyhsZXZlbCwgb2JqKTsgfQotCi0gIF9fZXhwb3J0c19fLmxvZyA9IGxvZzt2YXIg
Y3JlYXRlRnJhbWUgPSBmdW5jdGlvbihvYmplY3QpIHsKLSAgICB2YXIgb2JqID0ge307Ci0gICAg
VXRpbHMuZXh0ZW5kKG9iaiwgb2JqZWN0KTsKLSAgICByZXR1cm4gb2JqOwotICB9OwotICBfX2V4
cG9ydHNfXy5jcmVhdGVGcmFtZSA9IGNyZWF0ZUZyYW1lOwotICByZXR1cm4gX19leHBvcnRzX187
Ci19KShfX21vZHVsZTNfXywgX19tb2R1bGU1X18pOwotCi0vLyBoYW5kbGViYXJzL3J1bnRpbWUu
anMKLXZhciBfX21vZHVsZTZfXyA9IChmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLSAgdmFyIF9fZXhw
b3J0c19fID0ge307Ci0gIHZhciBVdGlscyA9IF9fZGVwZW5kZW5jeTFfXzsKLSAgdmFyIEV4Y2Vw
dGlvbiA9IF9fZGVwZW5kZW5jeTJfXzsKLSAgdmFyIENPTVBJTEVSX1JFVklTSU9OID0gX19kZXBl
bmRlbmN5M19fLkNPTVBJTEVSX1JFVklTSU9OOwotICB2YXIgUkVWSVNJT05fQ0hBTkdFUyA9IF9f
ZGVwZW5kZW5jeTNfXy5SRVZJU0lPTl9DSEFOR0VTOwotCi0gIGZ1bmN0aW9uIGNoZWNrUmV2aXNp
b24oY29tcGlsZXJJbmZvKSB7Ci0gICAgdmFyIGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlcklu
Zm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsCi0gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IENP
TVBJTEVSX1JFVklTSU9OOwotCi0gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gIT09IGN1cnJlbnRS
ZXZpc2lvbikgewotICAgICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24p
IHsKLSAgICAgICAgdmFyIHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVu
dFJldmlzaW9uXSwKLSAgICAgICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFO
R0VTW2NvbXBpbGVyUmV2aXNpb25dOwotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZW1w
bGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMg
dGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAiKwotICAgICAgICAgICAgICAiUGxlYXNlIHVwZGF0
ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoIitydW50aW1lVmVyc2lvbnMr
Iikgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgiK2NvbXBp
bGVyVmVyc2lvbnMrIikuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBVc2UgdGhlIGVt
YmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQg
dGhpcyByZXZpc2lvbiB5ZXQKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVtcGxhdGUg
d2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0
aGUgY3VycmVudCBydW50aW1lLiAiKwotICAgICAgICAgICAgICAiUGxlYXNlIHVwZGF0ZSB5b3Vy
IHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgiK2NvbXBpbGVySW5mb1sxXSsiKS4iKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBfX2V4cG9ydHNfXy5jaGVja1JldmlzaW9uID0gY2hlY2tS
ZXZpc2lvbjsvLyBUT0RPOiBSZW1vdmUgdGhpcyBsaW5lIGFuZCBicmVhayB1cCBjb21waWxlUGFy
dGlhbAotCi0gIGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7Ci0gICAgaWYg
KCFlbnYpIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk5vIGVudmlyb25tZW50IHBhc3Nl
ZCB0byB0ZW1wbGF0ZSIpOwotICAgIH0KLQotICAgIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZl
cmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBz
ZWN0aW9uIHRvIGFsbG93Ci0gICAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRo
ZXNlIGFzIHBzdWVkby1zdXBwb3J0ZWQgQVBJcy4KLSAgICB2YXIgaW52b2tlUGFydGlhbFdyYXBw
ZXIgPSBmdW5jdGlvbihwYXJ0aWFsLCBuYW1lLCBjb250ZXh0LCBoZWxwZXJzLCBwYXJ0aWFscywg
ZGF0YSkgewotICAgICAgdmFyIHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0gICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsgcmV0dXJuIHJlc3Vs
dDsgfQotCi0gICAgICBpZiAoZW52LmNvbXBpbGUpIHsKLSAgICAgICAgdmFyIG9wdGlvbnMgPSB7
IGhlbHBlcnM6IGhlbHBlcnMsIHBhcnRpYWxzOiBwYXJ0aWFscywgZGF0YTogZGF0YSB9OwotICAg
ICAgICBwYXJ0aWFsc1tuYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHsgZGF0YTogZGF0YSAh
PT0gdW5kZWZpbmVkIH0sIGVudik7Ci0gICAgICAgIHJldHVybiBwYXJ0aWFsc1tuYW1lXShjb250
ZXh0LCBvcHRpb25zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93IG5ldyBFeGNlcHRp
b24oIlRoZSBwYXJ0aWFsICIgKyBuYW1lICsgIiBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBy
dW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlIik7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIC8v
IEp1c3QgYWRkIHdhdGVyCi0gICAgdmFyIGNvbnRhaW5lciA9IHsKLSAgICAgIGVzY2FwZUV4cHJl
c3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sCi0gICAgICBpbnZva2VQYXJ0aWFsOiBpbnZv
a2VQYXJ0aWFsV3JhcHBlciwKLSAgICAgIHByb2dyYW1zOiBbXSwKLSAgICAgIHByb2dyYW06IGZ1
bmN0aW9uKGksIGZuLCBkYXRhKSB7Ci0gICAgICAgIHZhciBwcm9ncmFtV3JhcHBlciA9IHRoaXMu
cHJvZ3JhbXNbaV07Ci0gICAgICAgIGlmKGRhdGEpIHsKLSAgICAgICAgICBwcm9ncmFtV3JhcHBl
ciA9IHByb2dyYW0oaSwgZm4sIGRhdGEpOwotICAgICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3Jh
cHBlcikgewotICAgICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHBy
b2dyYW0oaSwgZm4pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjsK
LSAgICAgIH0sCi0gICAgICBtZXJnZTogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikgewotICAgICAg
ICB2YXIgcmV0ID0gcGFyYW0gfHwgY29tbW9uOwotCi0gICAgICAgIGlmIChwYXJhbSAmJiBjb21t
b24gJiYgKHBhcmFtICE9PSBjb21tb24pKSB7Ci0gICAgICAgICAgcmV0ID0ge307Ci0gICAgICAg
ICAgVXRpbHMuZXh0ZW5kKHJldCwgY29tbW9uKTsKLSAgICAgICAgICBVdGlscy5leHRlbmQocmV0
LCBwYXJhbSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIH0sCi0gICAg
ICBwcm9ncmFtV2l0aERlcHRoOiBlbnYuVk0ucHJvZ3JhbVdpdGhEZXB0aCwKLSAgICAgIG5vb3A6
IGVudi5WTS5ub29wLAotICAgICAgY29tcGlsZXJJbmZvOiBudWxsCi0gICAgfTsKLQotICAgIHJl
dHVybiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9u
cyB8fCB7fTsKLSAgICAgIHZhciBuYW1lc3BhY2UgPSBvcHRpb25zLnBhcnRpYWwgPyBvcHRpb25z
IDogZW52LAotICAgICAgICAgIGhlbHBlcnMsCi0gICAgICAgICAgcGFydGlhbHM7Ci0KLSAgICAg
IGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7Ci0gICAgICAgIGhlbHBlcnMgPSBvcHRpb25zLmhlbHBl
cnM7Ci0gICAgICAgIHBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFsczsKLSAgICAgIH0KLSAgICAg
IHZhciByZXN1bHQgPSB0ZW1wbGF0ZVNwZWMuY2FsbCgKLSAgICAgICAgICAgIGNvbnRhaW5lciwK
LSAgICAgICAgICAgIG5hbWVzcGFjZSwgY29udGV4dCwKLSAgICAgICAgICAgIGhlbHBlcnMsCi0g
ICAgICAgICAgICBwYXJ0aWFscywKLSAgICAgICAgICAgIG9wdGlvbnMuZGF0YSk7Ci0KLSAgICAg
IGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7Ci0gICAgICAgIGVudi5WTS5jaGVja1JldmlzaW9uKGNv
bnRhaW5lci5jb21waWxlckluZm8pOwotICAgICAgfQotCi0gICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH07Ci0gIH0KLQotICBfX2V4cG9ydHNfXy50ZW1wbGF0ZSA9IHRlbXBsYXRlO2Z1bmN0aW9u
IHByb2dyYW1XaXRoRGVwdGgoaSwgZm4sIGRhdGEgLyosICRkZXB0aCAqLykgewotICAgIHZhciBh
cmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTsKLQotICAgIHZh
ciBwcm9nID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9IG9w
dGlvbnMgfHwge307Ci0KLSAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBbY29udGV4dCwgb3B0
aW9ucy5kYXRhIHx8IGRhdGFdLmNvbmNhdChhcmdzKSk7Ci0gICAgfTsKLSAgICBwcm9nLnByb2dy
YW0gPSBpOwotICAgIHByb2cuZGVwdGggPSBhcmdzLmxlbmd0aDsKLSAgICByZXR1cm4gcHJvZzsK
LSAgfQotCi0gIF9fZXhwb3J0c19fLnByb2dyYW1XaXRoRGVwdGggPSBwcm9ncmFtV2l0aERlcHRo
O2Z1bmN0aW9uIHByb2dyYW0oaSwgZm4sIGRhdGEpIHsKLSAgICB2YXIgcHJvZyA9IGZ1bmN0aW9u
KGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0g
ICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucy5kYXRhIHx8IGRhdGEpOwotICAgIH07Ci0g
ICAgcHJvZy5wcm9ncmFtID0gaTsKLSAgICBwcm9nLmRlcHRoID0gMDsKLSAgICByZXR1cm4gcHJv
ZzsKLSAgfQotCi0gIF9fZXhwb3J0c19fLnByb2dyYW0gPSBwcm9ncmFtO2Z1bmN0aW9uIGludm9r
ZVBhcnRpYWwocGFydGlhbCwgbmFtZSwgY29udGV4dCwgaGVscGVycywgcGFydGlhbHMsIGRhdGEp
IHsKLSAgICB2YXIgb3B0aW9ucyA9IHsgcGFydGlhbDogdHJ1ZSwgaGVscGVyczogaGVscGVycywg
cGFydGlhbHM6IHBhcnRpYWxzLCBkYXRhOiBkYXRhIH07Ci0KLSAgICBpZihwYXJ0aWFsID09PSB1
bmRlZmluZWQpIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBwYXJ0aWFsICIgKyBu
YW1lICsgIiBjb3VsZCBub3QgYmUgZm91bmQiKTsKLSAgICB9IGVsc2UgaWYocGFydGlhbCBpbnN0
YW5jZW9mIEZ1bmN0aW9uKSB7Ci0gICAgICByZXR1cm4gcGFydGlhbChjb250ZXh0LCBvcHRpb25z
KTsKLSAgICB9Ci0gIH0KLQotICBfX2V4cG9ydHNfXy5pbnZva2VQYXJ0aWFsID0gaW52b2tlUGFy
dGlhbDtmdW5jdGlvbiBub29wKCkgeyByZXR1cm4gIiI7IH0KLQotICBfX2V4cG9ydHNfXy5ub29w
ID0gbm9vcDsKLSAgcmV0dXJuIF9fZXhwb3J0c19fOwotfSkoX19tb2R1bGUzX18sIF9fbW9kdWxl
NV9fLCBfX21vZHVsZTJfXyk7Ci0KLS8vIGhhbmRsZWJhcnMucnVudGltZS5qcwotdmFyIF9fbW9k
dWxlMV9fID0gKGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fKSB7Ci0gICJ1c2Ug
c3RyaWN0IjsKLSAgdmFyIF9fZXhwb3J0c19fOwotICAvKmdsb2JhbHMgSGFuZGxlYmFyczogdHJ1
ZSAqLwotICB2YXIgYmFzZSA9IF9fZGVwZW5kZW5jeTFfXzsKLQotICAvLyBFYWNoIG9mIHRoZXNl
IGF1Z21lbnQgdGhlIEhhbmRsZWJhcnMgb2JqZWN0LiBObyBuZWVkIHRvIHNldHVwIGhlcmUuCi0g
IC8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBh
bmQgYnJvd3NlIGVudnMpCi0gIHZhciBTYWZlU3RyaW5nID0gX19kZXBlbmRlbmN5Ml9fOwotICB2
YXIgRXhjZXB0aW9uID0gX19kZXBlbmRlbmN5M19fOwotICB2YXIgVXRpbHMgPSBfX2RlcGVuZGVu
Y3k0X187Ci0gIHZhciBydW50aW1lID0gX19kZXBlbmRlbmN5NV9fOwotCi0gIC8vIEZvciBjb21w
YXRpYmlsaXR5IGFuZCB1c2FnZSBvdXRzaWRlIG9mIG1vZHVsZSBzeXN0ZW1zLCBtYWtlIHRoZSBI
YW5kbGViYXJzIG9iamVjdCBhIG5hbWVzcGFjZQotICB2YXIgY3JlYXRlID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7Ci0KLSAgICBV
dGlscy5leHRlbmQoaGIsIGJhc2UpOwotICAgIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nOwot
ICAgIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjsKLSAgICBoYi5VdGlscyA9IFV0aWxzOwotCi0g
ICAgaGIuVk0gPSBydW50aW1lOwotICAgIGhiLnRlbXBsYXRlID0gZnVuY3Rpb24oc3BlYykgewot
ICAgICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpOwotICAgIH07Ci0KLSAgICBy
ZXR1cm4gaGI7Ci0gIH07Ci0KLSAgdmFyIEhhbmRsZWJhcnMgPSBjcmVhdGUoKTsKLSAgSGFuZGxl
YmFycy5jcmVhdGUgPSBjcmVhdGU7Ci0KLSAgX19leHBvcnRzX18gPSBIYW5kbGViYXJzOwotICBy
ZXR1cm4gX19leHBvcnRzX187Ci19KShfX21vZHVsZTJfXywgX19tb2R1bGU0X18sIF9fbW9kdWxl
NV9fLCBfX21vZHVsZTNfXywgX19tb2R1bGU2X18pOwotCi0vLyBoYW5kbGViYXJzL2NvbXBpbGVy
L2FzdC5qcwotdmFyIF9fbW9kdWxlN19fID0gKGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXykgewot
ICAidXNlIHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXzsKLSAgdmFyIEV4Y2VwdGlvbiA9IF9f
ZGVwZW5kZW5jeTFfXzsKLQotICBmdW5jdGlvbiBMb2NhdGlvbkluZm8obG9jSW5mbyl7Ci0gICAg
bG9jSW5mbyA9IGxvY0luZm8gfHwge307Ci0gICAgdGhpcy5maXJzdExpbmUgICA9IGxvY0luZm8u
Zmlyc3RfbGluZTsKLSAgICB0aGlzLmZpcnN0Q29sdW1uID0gbG9jSW5mby5maXJzdF9jb2x1bW47
Ci0gICAgdGhpcy5sYXN0Q29sdW1uICA9IGxvY0luZm8ubGFzdF9jb2x1bW47Ci0gICAgdGhpcy5s
YXN0TGluZSAgICA9IGxvY0luZm8ubGFzdF9saW5lOwotICB9Ci0KLSAgdmFyIEFTVCA9IHsKLSAg
ICBQcm9ncmFtTm9kZTogZnVuY3Rpb24oc3RhdGVtZW50cywgaW52ZXJzZVN0cmlwLCBpbnZlcnNl
LCBsb2NJbmZvKSB7Ci0gICAgICB2YXIgaW52ZXJzZUxvY2F0aW9uSW5mbywgZmlyc3RJbnZlcnNl
Tm9kZTsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7Ci0gICAgICAgIGxvY0lu
Zm8gPSBpbnZlcnNlOwotICAgICAgICBpbnZlcnNlID0gbnVsbDsKLSAgICAgIH0gZWxzZSBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAgICAgICBsb2NJbmZvID0gaW52ZXJzZVN0cmlw
OwotICAgICAgICBpbnZlcnNlU3RyaXAgPSBudWxsOwotICAgICAgfQotCi0gICAgICBMb2NhdGlv
bkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJwcm9ncmFtIjsK
LSAgICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7Ci0gICAgICB0aGlzLnN0cmlwID0g
e307Ci0KLSAgICAgIGlmKGludmVyc2UpIHsKLSAgICAgICAgZmlyc3RJbnZlcnNlTm9kZSA9IGlu
dmVyc2VbMF07Ci0gICAgICAgIGlmIChmaXJzdEludmVyc2VOb2RlKSB7Ci0gICAgICAgICAgaW52
ZXJzZUxvY2F0aW9uSW5mbyA9IHsKLSAgICAgICAgICAgIGZpcnN0X2xpbmU6IGZpcnN0SW52ZXJz
ZU5vZGUuZmlyc3RMaW5lLAotICAgICAgICAgICAgbGFzdF9saW5lOiBmaXJzdEludmVyc2VOb2Rl
Lmxhc3RMaW5lLAotICAgICAgICAgICAgbGFzdF9jb2x1bW46IGZpcnN0SW52ZXJzZU5vZGUubGFz
dENvbHVtbiwKLSAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogZmlyc3RJbnZlcnNlTm9kZS5maXJz
dENvbHVtbgotICAgICAgICAgIH07Ci0gICAgICAgICAgdGhpcy5pbnZlcnNlID0gbmV3IEFTVC5Q
cm9ncmFtTm9kZShpbnZlcnNlLCBpbnZlcnNlU3RyaXAsIGludmVyc2VMb2NhdGlvbkluZm8pOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXMuaW52ZXJzZSA9IG5ldyBBU1QuUHJvZ3Jh
bU5vZGUoaW52ZXJzZSwgaW52ZXJzZVN0cmlwKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnN0
cmlwLnJpZ2h0ID0gaW52ZXJzZVN0cmlwLmxlZnQ7Ci0gICAgICB9IGVsc2UgaWYgKGludmVyc2VT
dHJpcCkgewotICAgICAgICB0aGlzLnN0cmlwLmxlZnQgPSBpbnZlcnNlU3RyaXAucmlnaHQ7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIE11c3RhY2hlTm9kZTogZnVuY3Rpb24ocmF3UGFyYW1zLCBo
YXNoLCBvcGVuLCBzdHJpcCwgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwodGhp
cywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgPSAibXVzdGFjaGUiOwotICAgICAgdGhpcy5z
dHJpcCA9IHN0cmlwOwotCi0gICAgICAvLyBPcGVuIG1heSBiZSBhIHN0cmluZyBwYXJzZWQgZnJv
bSB0aGUgcGFyc2VyIG9yIGEgcGFzc2VkIGJvb2xlYW4gZmxhZwotICAgICAgaWYgKG9wZW4gIT0g
bnVsbCAmJiBvcGVuLmNoYXJBdCkgewotICAgICAgICAvLyBNdXN0IHVzZSBjaGFyQXQgdG8gc3Vw
cG9ydCBJRSBwcmUtMTAKLSAgICAgICAgdmFyIGVzY2FwZUZsYWcgPSBvcGVuLmNoYXJBdCgzKSB8
fCBvcGVuLmNoYXJBdCgyKTsKLSAgICAgICAgdGhpcy5lc2NhcGVkID0gZXNjYXBlRmxhZyAhPT0g
J3snICYmIGVzY2FwZUZsYWcgIT09ICcmJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMu
ZXNjYXBlZCA9ICEhb3BlbjsKLSAgICAgIH0KLQotICAgICAgaWYgKHJhd1BhcmFtcyBpbnN0YW5j
ZW9mIEFTVC5TZXhwck5vZGUpIHsKLSAgICAgICAgdGhpcy5zZXhwciA9IHJhd1BhcmFtczsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFN1cHBvcnQgb2xkIEFTVCBBUEkKLSAgICAgICAgdGhp
cy5zZXhwciA9IG5ldyBBU1QuU2V4cHJOb2RlKHJhd1BhcmFtcywgaGFzaCk7Ci0gICAgICB9Ci0K
LSAgICAgIHRoaXMuc2V4cHIuaXNSb290ID0gdHJ1ZTsKLQotICAgICAgLy8gU3VwcG9ydCBvbGQg
QVNUIEFQSSB0aGF0IHN0b3JlZCB0aGlzIGluZm8gaW4gTXVzdGFjaGVOb2RlCi0gICAgICB0aGlz
LmlkID0gdGhpcy5zZXhwci5pZDsKLSAgICAgIHRoaXMucGFyYW1zID0gdGhpcy5zZXhwci5wYXJh
bXM7Ci0gICAgICB0aGlzLmhhc2ggPSB0aGlzLnNleHByLmhhc2g7Ci0gICAgICB0aGlzLmVsaWdp
YmxlSGVscGVyID0gdGhpcy5zZXhwci5lbGlnaWJsZUhlbHBlcjsKLSAgICAgIHRoaXMuaXNIZWxw
ZXIgPSB0aGlzLnNleHByLmlzSGVscGVyOwotICAgIH0sCi0KLSAgICBTZXhwck5vZGU6IGZ1bmN0
aW9uKHJhd1BhcmFtcywgaGFzaCwgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwo
dGhpcywgbG9jSW5mbyk7Ci0KLSAgICAgIHRoaXMudHlwZSA9ICJzZXhwciI7Ci0gICAgICB0aGlz
Lmhhc2ggPSBoYXNoOwotCi0gICAgICB2YXIgaWQgPSB0aGlzLmlkID0gcmF3UGFyYW1zWzBdOwot
ICAgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyYW1zID0gcmF3UGFyYW1zLnNsaWNlKDEpOwotCi0g
ICAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjoKLSAgICAgIC8vICog
aXRzIGlkIGlzIHNpbXBsZSAoYSBzaW5nbGUgcGFydCwgbm90IGB0aGlzYCBvciBgLi5gKQotICAg
ICAgdmFyIGVsaWdpYmxlSGVscGVyID0gdGhpcy5lbGlnaWJsZUhlbHBlciA9IGlkLmlzU2ltcGxl
OwotCi0gICAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6Ci0gICAg
ICAvLyAqIGl0IGlzIGFuIGVsaWdpYmxlIGhlbHBlciwgYW5kCi0gICAgICAvLyAqIGl0IGhhcyBh
dCBsZWFzdCBvbmUgcGFyYW1ldGVyIG9yIGhhc2ggc2VnbWVudAotICAgICAgdGhpcy5pc0hlbHBl
ciA9IGVsaWdpYmxlSGVscGVyICYmIChwYXJhbXMubGVuZ3RoIHx8IGhhc2gpOwotCi0gICAgICAv
LyBpZiBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBidXQgbm90IGEgZGVmaW5pdGUK
LSAgICAgIC8vIGhlbHBlciwgaXQgaXMgYW1iaWd1b3VzLCBhbmQgd2lsbCBiZSByZXNvbHZlZCBp
biBhIGxhdGVyCi0gICAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuCi0gICAgfSwKLQotICAgIFBh
cnRpYWxOb2RlOiBmdW5jdGlvbihwYXJ0aWFsTmFtZSwgY29udGV4dCwgc3RyaXAsIGxvY0luZm8p
IHsKLSAgICAgIExvY2F0aW9uSW5mby5jYWxsKHRoaXMsIGxvY0luZm8pOwotICAgICAgdGhpcy50
eXBlICAgICAgICAgPSAicGFydGlhbCI7Ci0gICAgICB0aGlzLnBhcnRpYWxOYW1lICA9IHBhcnRp
YWxOYW1lOwotICAgICAgdGhpcy5jb250ZXh0ICAgICAgPSBjb250ZXh0OwotICAgICAgdGhpcy5z
dHJpcCA9IHN0cmlwOwotICAgIH0sCi0KLSAgICBCbG9ja05vZGU6IGZ1bmN0aW9uKG11c3RhY2hl
LCBwcm9ncmFtLCBpbnZlcnNlLCBjbG9zZSwgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZv
LmNhbGwodGhpcywgbG9jSW5mbyk7Ci0KLSAgICAgIGlmKG11c3RhY2hlLnNleHByLmlkLm9yaWdp
bmFsICE9PSBjbG9zZS5wYXRoLm9yaWdpbmFsKSB7Ci0gICAgICAgIHRocm93IG5ldyBFeGNlcHRp
b24obXVzdGFjaGUuc2V4cHIuaWQub3JpZ2luYWwgKyAiIGRvZXNuJ3QgbWF0Y2ggIiArIGNsb3Nl
LnBhdGgub3JpZ2luYWwsIHRoaXMpOwotICAgICAgfQotCi0gICAgICB0aGlzLnR5cGUgPSAnYmxv
Y2snOwotICAgICAgdGhpcy5tdXN0YWNoZSA9IG11c3RhY2hlOwotICAgICAgdGhpcy5wcm9ncmFt
ICA9IHByb2dyYW07Ci0gICAgICB0aGlzLmludmVyc2UgID0gaW52ZXJzZTsKLQotICAgICAgdGhp
cy5zdHJpcCA9IHsKLSAgICAgICAgbGVmdDogbXVzdGFjaGUuc3RyaXAubGVmdCwKLSAgICAgICAg
cmlnaHQ6IGNsb3NlLnN0cmlwLnJpZ2h0Ci0gICAgICB9OwotCi0gICAgICAocHJvZ3JhbSB8fCBp
bnZlcnNlKS5zdHJpcC5sZWZ0ID0gbXVzdGFjaGUuc3RyaXAucmlnaHQ7Ci0gICAgICAoaW52ZXJz
ZSB8fCBwcm9ncmFtKS5zdHJpcC5yaWdodCA9IGNsb3NlLnN0cmlwLmxlZnQ7Ci0KLSAgICAgIGlm
IChpbnZlcnNlICYmICFwcm9ncmFtKSB7Ci0gICAgICAgIHRoaXMuaXNJbnZlcnNlID0gdHJ1ZTsK
LSAgICAgIH0KLSAgICB9LAotCi0gICAgQ29udGVudE5vZGU6IGZ1bmN0aW9uKHN0cmluZywgbG9j
SW5mbykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0
aGlzLnR5cGUgPSAiY29udGVudCI7Ci0gICAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgICB9
LAotCi0gICAgSGFzaE5vZGU6IGZ1bmN0aW9uKHBhaXJzLCBsb2NJbmZvKSB7Ci0gICAgICBMb2Nh
dGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJoYXNoIjsK
LSAgICAgIHRoaXMucGFpcnMgPSBwYWlyczsKLSAgICB9LAotCi0gICAgSWROb2RlOiBmdW5jdGlv
bihwYXJ0cywgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwodGhpcywgbG9jSW5m
byk7Ci0gICAgICB0aGlzLnR5cGUgPSAiSUQiOwotCi0gICAgICB2YXIgb3JpZ2luYWwgPSAiIiwK
LSAgICAgICAgICBkaWcgPSBbXSwKLSAgICAgICAgICBkZXB0aCA9IDA7Ci0KLSAgICAgIGZvcih2
YXIgaT0wLGw9cGFydHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICB2YXIgcGFydCA9IHBh
cnRzW2ldLnBhcnQ7Ci0gICAgICAgIG9yaWdpbmFsICs9IChwYXJ0c1tpXS5zZXBhcmF0b3IgfHwg
JycpICsgcGFydDsKLQotICAgICAgICBpZiAocGFydCA9PT0gIi4uIiB8fCBwYXJ0ID09PSAiLiIg
fHwgcGFydCA9PT0gInRoaXMiKSB7Ci0gICAgICAgICAgaWYgKGRpZy5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIHBhdGg6ICIgKyBvcmlnaW5h
bCwgdGhpcyk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAiLi4iKSB7Ci0gICAgICAg
ICAgICBkZXB0aCsrOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmlzU2Nv
cGVkID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZGln
LnB1c2gocGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdGhpcy5vcmlnaW5hbCA9
IG9yaWdpbmFsOwotICAgICAgdGhpcy5wYXJ0cyAgICA9IGRpZzsKLSAgICAgIHRoaXMuc3RyaW5n
ICAgPSBkaWcuam9pbignLicpOwotICAgICAgdGhpcy5kZXB0aCAgICA9IGRlcHRoOwotCi0gICAg
ICAvLyBhbiBJRCBpcyBzaW1wbGUgaWYgaXQgb25seSBoYXMgb25lIHBhcnQsIGFuZCB0aGF0IHBh
cnQgaXMgbm90Ci0gICAgICAvLyBgLi5gIG9yIGB0aGlzYC4KLSAgICAgIHRoaXMuaXNTaW1wbGUg
PSBwYXJ0cy5sZW5ndGggPT09IDEgJiYgIXRoaXMuaXNTY29wZWQgJiYgZGVwdGggPT09IDA7Ci0K
LSAgICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0gdGhpcy5zdHJpbmc7Ci0gICAgfSwKLQotICAg
IFBhcnRpYWxOYW1lTm9kZTogZnVuY3Rpb24obmFtZSwgbG9jSW5mbykgewotICAgICAgTG9jYXRp
b25JbmZvLmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgPSAiUEFSVElBTF9O
QU1FIjsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWUub3JpZ2luYWw7Ci0gICAgfSwKLQotICAgIERh
dGFOb2RlOiBmdW5jdGlvbihpZCwgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwo
dGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgPSAiREFUQSI7Ci0gICAgICB0aGlzLmlk
ID0gaWQ7Ci0gICAgfSwKLQotICAgIFN0cmluZ05vZGU6IGZ1bmN0aW9uKHN0cmluZywgbG9jSW5m
bykgewotICAgICAgTG9jYXRpb25JbmZvLmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlz
LnR5cGUgPSAiU1RSSU5HIjsKLSAgICAgIHRoaXMub3JpZ2luYWwgPQotICAgICAgICB0aGlzLnN0
cmluZyA9Ci0gICAgICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0gc3RyaW5nOwotICAgIH0sCi0K
LSAgICBJbnRlZ2VyTm9kZTogZnVuY3Rpb24oaW50ZWdlciwgbG9jSW5mbykgewotICAgICAgTG9j
YXRpb25JbmZvLmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgPSAiSU5URUdF
UiI7Ci0gICAgICB0aGlzLm9yaWdpbmFsID0KLSAgICAgICAgdGhpcy5pbnRlZ2VyID0gaW50ZWdl
cjsKLSAgICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0gTnVtYmVyKGludGVnZXIpOwotICAgIH0s
Ci0KLSAgICBCb29sZWFuTm9kZTogZnVuY3Rpb24oYm9vbCwgbG9jSW5mbykgewotICAgICAgTG9j
YXRpb25JbmZvLmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgPSAiQk9PTEVB
TiI7Ci0gICAgICB0aGlzLmJvb2wgPSBib29sOwotICAgICAgdGhpcy5zdHJpbmdNb2RlVmFsdWUg
PSBib29sID09PSAidHJ1ZSI7Ci0gICAgfSwKLQotICAgIENvbW1lbnROb2RlOiBmdW5jdGlvbihj
b21tZW50LCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZv
KTsKLSAgICAgIHRoaXMudHlwZSA9ICJjb21tZW50IjsKLSAgICAgIHRoaXMuY29tbWVudCA9IGNv
bW1lbnQ7Ci0gICAgfQotICB9OwotCi0gIC8vIE11c3QgYmUgZXhwb3J0ZWQgYXMgYW4gb2JqZWN0
IHJhdGhlciB0aGFuIHRoZSByb290IG9mIHRoZSBtb2R1bGUgYXMgdGhlIGppc29uIGxleGVyCi0g
IC8vIG1vc3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS4KLSAgX19leHBv
cnRzX18gPSBBU1Q7Ci0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0pKF9fbW9kdWxlNV9fKTsKLQot
Ly8gaGFuZGxlYmFycy9jb21waWxlci9wYXJzZXIuanMKLXZhciBfX21vZHVsZTlfXyA9IChmdW5j
dGlvbigpIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIgX19leHBvcnRzX187Ci0gIC8qIGpzaGlu
dCBpZ25vcmU6c3RhcnQgKi8KLSAgLyogSmlzb24gZ2VuZXJhdGVkIHBhcnNlciAqLwotICB2YXIg
aGFuZGxlYmFycyA9IChmdW5jdGlvbigpewotICB2YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlv
biB0cmFjZSgpIHsgfSwKLSAgeXk6IHt9LAotICBzeW1ib2xzXzogeyJlcnJvciI6Miwicm9vdCI6
Mywic3RhdGVtZW50cyI6NCwiRU9GIjo1LCJwcm9ncmFtIjo2LCJzaW1wbGVJbnZlcnNlIjo3LCJz
dGF0ZW1lbnQiOjgsIm9wZW5JbnZlcnNlIjo5LCJjbG9zZUJsb2NrIjoxMCwib3BlbkJsb2NrIjox
MSwibXVzdGFjaGUiOjEyLCJwYXJ0aWFsIjoxMywiQ09OVEVOVCI6MTQsIkNPTU1FTlQiOjE1LCJP
UEVOX0JMT0NLIjoxNiwic2V4cHIiOjE3LCJDTE9TRSI6MTgsIk9QRU5fSU5WRVJTRSI6MTksIk9Q
RU5fRU5EQkxPQ0siOjIwLCJwYXRoIjoyMSwiT1BFTiI6MjIsIk9QRU5fVU5FU0NBUEVEIjoyMywi
Q0xPU0VfVU5FU0NBUEVEIjoyNCwiT1BFTl9QQVJUSUFMIjoyNSwicGFydGlhbE5hbWUiOjI2LCJw
YXJ0aWFsX29wdGlvbjAiOjI3LCJzZXhwcl9yZXBldGl0aW9uMCI6MjgsInNleHByX29wdGlvbjAi
OjI5LCJkYXRhTmFtZSI6MzAsInBhcmFtIjozMSwiU1RSSU5HIjozMiwiSU5URUdFUiI6MzMsIkJP
T0xFQU4iOjM0LCJPUEVOX1NFWFBSIjozNSwiQ0xPU0VfU0VYUFIiOjM2LCJoYXNoIjozNywiaGFz
aF9yZXBldGl0aW9uX3BsdXMwIjozOCwiaGFzaFNlZ21lbnQiOjM5LCJJRCI6NDAsIkVRVUFMUyI6
NDEsIkRBVEEiOjQyLCJwYXRoU2VnbWVudHMiOjQzLCJTRVAiOjQ0LCIkYWNjZXB0IjowLCIkZW5k
IjoxfSwKLSAgdGVybWluYWxzXzogezI6ImVycm9yIiw1OiJFT0YiLDE0OiJDT05URU5UIiwxNToi
Q09NTUVOVCIsMTY6Ik9QRU5fQkxPQ0siLDE4OiJDTE9TRSIsMTk6Ik9QRU5fSU5WRVJTRSIsMjA6
Ik9QRU5fRU5EQkxPQ0siLDIyOiJPUEVOIiwyMzoiT1BFTl9VTkVTQ0FQRUQiLDI0OiJDTE9TRV9V
TkVTQ0FQRUQiLDI1OiJPUEVOX1BBUlRJQUwiLDMyOiJTVFJJTkciLDMzOiJJTlRFR0VSIiwzNDoi
Qk9PTEVBTiIsMzU6Ik9QRU5fU0VYUFIiLDM2OiJDTE9TRV9TRVhQUiIsNDA6IklEIiw0MToiRVFV
QUxTIiw0MjoiREFUQSIsNDQ6IlNFUCJ9LAotICBwcm9kdWN0aW9uc186IFswLFszLDJdLFszLDFd
LFs2LDJdLFs2LDNdLFs2LDJdLFs2LDFdLFs2LDFdLFs2LDBdLFs0LDFdLFs0LDJdLFs4LDNdLFs4
LDNdLFs4LDFdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMSwzXSxbOSwzXSxbMTAsM10sWzEyLDNdLFsx
MiwzXSxbMTMsNF0sWzcsMl0sWzE3LDNdLFsxNywxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEs
MV0sWzMxLDFdLFszMSwzXSxbMzcsMV0sWzM5LDNdLFsyNiwxXSxbMjYsMV0sWzI2LDFdLFszMCwy
XSxbMjEsMV0sWzQzLDNdLFs0MywxXSxbMjcsMF0sWzI3LDFdLFsyOCwwXSxbMjgsMl0sWzI5LDBd
LFsyOSwxXSxbMzgsMV0sWzM4LDJdXSwKLSAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnlt
b3VzKHl5dGV4dCx5eWxlbmcseXlsaW5lbm8seXkseXlzdGF0ZSwkJCxfJCkgewotCi0gIHZhciAk
MCA9ICQkLmxlbmd0aCAtIDE7Ci0gIHN3aXRjaCAoeXlzdGF0ZSkgewotICBjYXNlIDE6IHJldHVy
biBuZXcgeXkuUHJvZ3JhbU5vZGUoJCRbJDAtMV0sIHRoaXMuXyQpOyAKLSAgYnJlYWs7Ci0gIGNh
c2UgMjogcmV0dXJuIG5ldyB5eS5Qcm9ncmFtTm9kZShbXSwgdGhpcy5fJCk7IAotICBicmVhazsK
LSAgY2FzZSAzOnRoaXMuJCA9IG5ldyB5eS5Qcm9ncmFtTm9kZShbXSwgJCRbJDAtMV0sICQkWyQw
XSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDQ6dGhpcy4kID0gbmV3IHl5LlByb2dyYW1O
b2RlKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNh
c2UgNTp0aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoJCRbJDAtMV0sICQkWyQwXSwgW10sIHRo
aXMuXyQpOwotICBicmVhazsKLSAgY2FzZSA2OnRoaXMuJCA9IG5ldyB5eS5Qcm9ncmFtTm9kZSgk
JFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSA3OnRoaXMuJCA9IG5ldyB5eS5Qcm9n
cmFtTm9kZShbXSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDg6dGhpcy4kID0gbmV3IHl5
LlByb2dyYW1Ob2RlKFtdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgOTp0aGlzLiQgPSBb
JCRbJDBdXTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTA6ICQkWyQwLTFdLnB1c2goJCRbJDBdKTsgdGhp
cy4kID0gJCRbJDAtMV07IAotICBicmVhazsKLSAgY2FzZSAxMTp0aGlzLiQgPSBuZXcgeXkuQmxv
Y2tOb2RlKCQkWyQwLTJdLCAkJFskMC0xXS5pbnZlcnNlLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlz
Ll8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTI6dGhpcy4kID0gbmV3IHl5LkJsb2NrTm9kZSgkJFsk
MC0yXSwgJCRbJDAtMV0sICQkWyQwLTFdLmludmVyc2UsICQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJy
ZWFrOwotICBjYXNlIDEzOnRoaXMuJCA9ICQkWyQwXTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTQ6dGhp
cy4kID0gJCRbJDBdOwotICBicmVhazsKLSAgY2FzZSAxNTp0aGlzLiQgPSBuZXcgeXkuQ29udGVu
dE5vZGUoJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTY6dGhpcy4kID0gbmV3
IHl5LkNvbW1lbnROb2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDE3OnRo
aXMuJCA9IG5ldyB5eS5NdXN0YWNoZU5vZGUoJCRbJDAtMV0sIG51bGwsICQkWyQwLTJdLCBzdHJp
cEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTg6
dGhpcy4kID0gbmV3IHl5Lk11c3RhY2hlTm9kZSgkJFskMC0xXSwgbnVsbCwgJCRbJDAtMl0sIHN0
cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQwXSksIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAx
OTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiBzdHJpcEZsYWdzKCQkWyQwLTJdLCAk
JFskMF0pfTsKLSAgYnJlYWs7Ci0gIGNhc2UgMjA6dGhpcy4kID0gbmV3IHl5Lk11c3RhY2hlTm9k
ZSgkJFskMC0xXSwgbnVsbCwgJCRbJDAtMl0sIHN0cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQwXSks
IHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAyMTp0aGlzLiQgPSBuZXcgeXkuTXVzdGFjaGVO
b2RlKCQkWyQwLTFdLCBudWxsLCAkJFskMC0yXSwgc3RyaXBGbGFncygkJFskMC0yXSwgJCRbJDBd
KSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDIyOnRoaXMuJCA9IG5ldyB5eS5QYXJ0aWFs
Tm9kZSgkJFskMC0yXSwgJCRbJDAtMV0sIHN0cmlwRmxhZ3MoJCRbJDAtM10sICQkWyQwXSksIHRo
aXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAyMzp0aGlzLiQgPSBzdHJpcEZsYWdzKCQkWyQwLTFd
LCAkJFskMF0pOwotICBicmVhazsKLSAgY2FzZSAyNDp0aGlzLiQgPSBuZXcgeXkuU2V4cHJOb2Rl
KFskJFskMC0yXV0uY29uY2F0KCQkWyQwLTFdKSwgJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7
Ci0gIGNhc2UgMjU6dGhpcy4kID0gbmV3IHl5LlNleHByTm9kZShbJCRbJDBdXSwgbnVsbCwgdGhp
cy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDI2OnRoaXMuJCA9ICQkWyQwXTsKLSAgYnJlYWs7Ci0g
IGNhc2UgMjc6dGhpcy4kID0gbmV3IHl5LlN0cmluZ05vZGUoJCRbJDBdLCB0aGlzLl8kKTsKLSAg
YnJlYWs7Ci0gIGNhc2UgMjg6dGhpcy4kID0gbmV3IHl5LkludGVnZXJOb2RlKCQkWyQwXSwgdGhp
cy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDI5OnRoaXMuJCA9IG5ldyB5eS5Cb29sZWFuTm9kZSgk
JFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAzMDp0aGlzLiQgPSAkJFskMF07Ci0g
IGJyZWFrOwotICBjYXNlIDMxOiQkWyQwLTFdLmlzSGVscGVyID0gdHJ1ZTsgdGhpcy4kID0gJCRb
JDAtMV07Ci0gIGJyZWFrOwotICBjYXNlIDMyOnRoaXMuJCA9IG5ldyB5eS5IYXNoTm9kZSgkJFsk
MF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAzMzp0aGlzLiQgPSBbJCRbJDAtMl0sICQk
WyQwXV07Ci0gIGJyZWFrOwotICBjYXNlIDM0OnRoaXMuJCA9IG5ldyB5eS5QYXJ0aWFsTmFtZU5v
ZGUoJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMzU6dGhpcy4kID0gbmV3IHl5
LlBhcnRpYWxOYW1lTm9kZShuZXcgeXkuU3RyaW5nTm9kZSgkJFskMF0sIHRoaXMuXyQpLCB0aGlz
Ll8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMzY6dGhpcy4kID0gbmV3IHl5LlBhcnRpYWxOYW1lTm9k
ZShuZXcgeXkuSW50ZWdlck5vZGUoJCRbJDBdLCB0aGlzLl8kKSk7Ci0gIGJyZWFrOwotICBjYXNl
IDM3OnRoaXMuJCA9IG5ldyB5eS5EYXRhTm9kZSgkJFskMF0sIHRoaXMuXyQpOwotICBicmVhazsK
LSAgY2FzZSAzODp0aGlzLiQgPSBuZXcgeXkuSWROb2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJy
ZWFrOwotICBjYXNlIDM5OiAkJFskMC0yXS5wdXNoKHtwYXJ0OiAkJFskMF0sIHNlcGFyYXRvcjog
JCRbJDAtMV19KTsgdGhpcy4kID0gJCRbJDAtMl07IAotICBicmVhazsKLSAgY2FzZSA0MDp0aGlz
LiQgPSBbe3BhcnQ6ICQkWyQwXX1dOwotICBicmVhazsKLSAgY2FzZSA0Mzp0aGlzLiQgPSBbXTsK
LSAgYnJlYWs7Ci0gIGNhc2UgNDQ6JCRbJDAtMV0ucHVzaCgkJFskMF0pOwotICBicmVhazsKLSAg
Y2FzZSA0Nzp0aGlzLiQgPSBbJCRbJDBdXTsKLSAgYnJlYWs7Ci0gIGNhc2UgNDg6JCRbJDAtMV0u
cHVzaCgkJFskMF0pOwotICBicmVhazsKLSAgfQotICB9LAotICB0YWJsZTogW3szOjEsNDoyLDU6
WzEsM10sODo0LDk6NSwxMTo2LDEyOjcsMTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJd
LDE5OlsxLDExXSwyMjpbMSwxM10sMjM6WzEsMTRdLDI1OlsxLDE1XX0sezE6WzNdfSx7NTpbMSwx
Nl0sODoxNyw5OjUsMTE6NiwxMjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDEyXSwx
OTpbMSwxMV0sMjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwxNV19LHsxOlsyLDJdfSx7NTpbMiw5
XSwxNDpbMiw5XSwxNTpbMiw5XSwxNjpbMiw5XSwxOTpbMiw5XSwyMDpbMiw5XSwyMjpbMiw5XSwy
MzpbMiw5XSwyNTpbMiw5XX0sezQ6MjAsNjoxOCw3OjE5LDg6NCw5OjUsMTE6NiwxMjo3LDEzOjgs
MTQ6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDEyXSwxOTpbMSwyMV0sMjA6WzIsOF0sMjI6WzEsMTNd
LDIzOlsxLDE0XSwyNTpbMSwxNV19LHs0OjIwLDY6MjIsNzoxOSw4OjQsOTo1LDExOjYsMTI6Nywx
Mzo4LDE0OlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMl0sMTk6WzEsMjFdLDIwOlsyLDhdLDIyOlsx
LDEzXSwyMzpbMSwxNF0sMjU6WzEsMTVdfSx7NTpbMiwxM10sMTQ6WzIsMTNdLDE1OlsyLDEzXSwx
NjpbMiwxM10sMTk6WzIsMTNdLDIwOlsyLDEzXSwyMjpbMiwxM10sMjM6WzIsMTNdLDI1OlsyLDEz
XX0sezU6WzIsMTRdLDE0OlsyLDE0XSwxNTpbMiwxNF0sMTY6WzIsMTRdLDE5OlsyLDE0XSwyMDpb
MiwxNF0sMjI6WzIsMTRdLDIzOlsyLDE0XSwyNTpbMiwxNF19LHs1OlsyLDE1XSwxNDpbMiwxNV0s
MTU6WzIsMTVdLDE2OlsyLDE1XSwxOTpbMiwxNV0sMjA6WzIsMTVdLDIyOlsyLDE1XSwyMzpbMiwx
NV0sMjU6WzIsMTVdfSx7NTpbMiwxNl0sMTQ6WzIsMTZdLDE1OlsyLDE2XSwxNjpbMiwxNl0sMTk6
WzIsMTZdLDIwOlsyLDE2XSwyMjpbMiwxNl0sMjM6WzIsMTZdLDI1OlsyLDE2XX0sezE3OjIzLDIx
OjI0LDMwOjI1LDQwOlsxLDI4XSw0MjpbMSwyN10sNDM6MjZ9LHsxNzoyOSwyMToyNCwzMDoyNSw0
MDpbMSwyOF0sNDI6WzEsMjddLDQzOjI2fSx7MTc6MzAsMjE6MjQsMzA6MjUsNDA6WzEsMjhdLDQy
OlsxLDI3XSw0MzoyNn0sezE3OjMxLDIxOjI0LDMwOjI1LDQwOlsxLDI4XSw0MjpbMSwyN10sNDM6
MjZ9LHsyMTozMywyNjozMiwzMjpbMSwzNF0sMzM6WzEsMzVdLDQwOlsxLDI4XSw0MzoyNn0sezE6
WzIsMV19LHs1OlsyLDEwXSwxNDpbMiwxMF0sMTU6WzIsMTBdLDE2OlsyLDEwXSwxOTpbMiwxMF0s
MjA6WzIsMTBdLDIyOlsyLDEwXSwyMzpbMiwxMF0sMjU6WzIsMTBdfSx7MTA6MzYsMjA6WzEsMzdd
fSx7NDozOCw4OjQsOTo1LDExOjYsMTI6NywxMzo4LDE0OlsxLDldLDE1OlsxLDEwXSwxNjpbMSwx
Ml0sMTk6WzEsMTFdLDIwOlsyLDddLDIyOlsxLDEzXSwyMzpbMSwxNF0sMjU6WzEsMTVdfSx7Nzoz
OSw4OjE3LDk6NSwxMTo2LDEyOjcsMTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJdLDE5
OlsxLDIxXSwyMDpbMiw2XSwyMjpbMSwxM10sMjM6WzEsMTRdLDI1OlsxLDE1XX0sezE3OjIzLDE4
OlsxLDQwXSwyMToyNCwzMDoyNSw0MDpbMSwyOF0sNDI6WzEsMjddLDQzOjI2fSx7MTA6NDEsMjA6
WzEsMzddfSx7MTg6WzEsNDJdfSx7MTg6WzIsNDNdLDI0OlsyLDQzXSwyODo0MywzMjpbMiw0M10s
MzM6WzIsNDNdLDM0OlsyLDQzXSwzNTpbMiw0M10sMzY6WzIsNDNdLDQwOlsyLDQzXSw0MjpbMiw0
M119LHsxODpbMiwyNV0sMjQ6WzIsMjVdLDM2OlsyLDI1XX0sezE4OlsyLDM4XSwyNDpbMiwzOF0s
MzI6WzIsMzhdLDMzOlsyLDM4XSwzNDpbMiwzOF0sMzU6WzIsMzhdLDM2OlsyLDM4XSw0MDpbMiwz
OF0sNDI6WzIsMzhdLDQ0OlsxLDQ0XX0sezIxOjQ1LDQwOlsxLDI4XSw0MzoyNn0sezE4OlsyLDQw
XSwyNDpbMiw0MF0sMzI6WzIsNDBdLDMzOlsyLDQwXSwzNDpbMiw0MF0sMzU6WzIsNDBdLDM2Olsy
LDQwXSw0MDpbMiw0MF0sNDI6WzIsNDBdLDQ0OlsyLDQwXX0sezE4OlsxLDQ2XX0sezE4OlsxLDQ3
XX0sezI0OlsxLDQ4XX0sezE4OlsyLDQxXSwyMTo1MCwyNzo0OSw0MDpbMSwyOF0sNDM6MjZ9LHsx
ODpbMiwzNF0sNDA6WzIsMzRdfSx7MTg6WzIsMzVdLDQwOlsyLDM1XX0sezE4OlsyLDM2XSw0MDpb
MiwzNl19LHs1OlsyLDExXSwxNDpbMiwxMV0sMTU6WzIsMTFdLDE2OlsyLDExXSwxOTpbMiwxMV0s
MjA6WzIsMTFdLDIyOlsyLDExXSwyMzpbMiwxMV0sMjU6WzIsMTFdfSx7MjE6NTEsNDA6WzEsMjhd
LDQzOjI2fSx7ODoxNyw5OjUsMTE6NiwxMjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBdLDE2Olsx
LDEyXSwxOTpbMSwxMV0sMjA6WzIsM10sMjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwxNV19LHs0
OjUyLDg6NCw5OjUsMTE6NiwxMjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDEyXSwx
OTpbMSwxMV0sMjA6WzIsNV0sMjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwxNV19LHsxNDpbMiwy
M10sMTU6WzIsMjNdLDE2OlsyLDIzXSwxOTpbMiwyM10sMjA6WzIsMjNdLDIyOlsyLDIzXSwyMzpb
MiwyM10sMjU6WzIsMjNdfSx7NTpbMiwxMl0sMTQ6WzIsMTJdLDE1OlsyLDEyXSwxNjpbMiwxMl0s
MTk6WzIsMTJdLDIwOlsyLDEyXSwyMjpbMiwxMl0sMjM6WzIsMTJdLDI1OlsyLDEyXX0sezE0Olsy
LDE4XSwxNTpbMiwxOF0sMTY6WzIsMThdLDE5OlsyLDE4XSwyMDpbMiwxOF0sMjI6WzIsMThdLDIz
OlsyLDE4XSwyNTpbMiwxOF19LHsxODpbMiw0NV0sMjE6NTYsMjQ6WzIsNDVdLDI5OjUzLDMwOjYw
LDMxOjU0LDMyOlsxLDU3XSwzMzpbMSw1OF0sMzQ6WzEsNTldLDM1OlsxLDYxXSwzNjpbMiw0NV0s
Mzc6NTUsMzg6NjIsMzk6NjMsNDA6WzEsNjRdLDQyOlsxLDI3XSw0MzoyNn0sezQwOlsxLDY1XX0s
ezE4OlsyLDM3XSwyNDpbMiwzN10sMzI6WzIsMzddLDMzOlsyLDM3XSwzNDpbMiwzN10sMzU6WzIs
MzddLDM2OlsyLDM3XSw0MDpbMiwzN10sNDI6WzIsMzddfSx7MTQ6WzIsMTddLDE1OlsyLDE3XSwx
NjpbMiwxN10sMTk6WzIsMTddLDIwOlsyLDE3XSwyMjpbMiwxN10sMjM6WzIsMTddLDI1OlsyLDE3
XX0sezU6WzIsMjBdLDE0OlsyLDIwXSwxNTpbMiwyMF0sMTY6WzIsMjBdLDE5OlsyLDIwXSwyMDpb
MiwyMF0sMjI6WzIsMjBdLDIzOlsyLDIwXSwyNTpbMiwyMF19LHs1OlsyLDIxXSwxNDpbMiwyMV0s
MTU6WzIsMjFdLDE2OlsyLDIxXSwxOTpbMiwyMV0sMjA6WzIsMjFdLDIyOlsyLDIxXSwyMzpbMiwy
MV0sMjU6WzIsMjFdfSx7MTg6WzEsNjZdfSx7MTg6WzIsNDJdfSx7MTg6WzEsNjddfSx7ODoxNyw5
OjUsMTE6NiwxMjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDEyXSwxOTpbMSwxMV0s
MjA6WzIsNF0sMjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwxNV19LHsxODpbMiwyNF0sMjQ6WzIs
MjRdLDM2OlsyLDI0XX0sezE4OlsyLDQ0XSwyNDpbMiw0NF0sMzI6WzIsNDRdLDMzOlsyLDQ0XSwz
NDpbMiw0NF0sMzU6WzIsNDRdLDM2OlsyLDQ0XSw0MDpbMiw0NF0sNDI6WzIsNDRdfSx7MTg6WzIs
NDZdLDI0OlsyLDQ2XSwzNjpbMiw0Nl19LHsxODpbMiwyNl0sMjQ6WzIsMjZdLDMyOlsyLDI2XSwz
MzpbMiwyNl0sMzQ6WzIsMjZdLDM1OlsyLDI2XSwzNjpbMiwyNl0sNDA6WzIsMjZdLDQyOlsyLDI2
XX0sezE4OlsyLDI3XSwyNDpbMiwyN10sMzI6WzIsMjddLDMzOlsyLDI3XSwzNDpbMiwyN10sMzU6
WzIsMjddLDM2OlsyLDI3XSw0MDpbMiwyN10sNDI6WzIsMjddfSx7MTg6WzIsMjhdLDI0OlsyLDI4
XSwzMjpbMiwyOF0sMzM6WzIsMjhdLDM0OlsyLDI4XSwzNTpbMiwyOF0sMzY6WzIsMjhdLDQwOlsy
LDI4XSw0MjpbMiwyOF19LHsxODpbMiwyOV0sMjQ6WzIsMjldLDMyOlsyLDI5XSwzMzpbMiwyOV0s
MzQ6WzIsMjldLDM1OlsyLDI5XSwzNjpbMiwyOV0sNDA6WzIsMjldLDQyOlsyLDI5XX0sezE4Olsy
LDMwXSwyNDpbMiwzMF0sMzI6WzIsMzBdLDMzOlsyLDMwXSwzNDpbMiwzMF0sMzU6WzIsMzBdLDM2
OlsyLDMwXSw0MDpbMiwzMF0sNDI6WzIsMzBdfSx7MTc6NjgsMjE6MjQsMzA6MjUsNDA6WzEsMjhd
LDQyOlsxLDI3XSw0MzoyNn0sezE4OlsyLDMyXSwyNDpbMiwzMl0sMzY6WzIsMzJdLDM5OjY5LDQw
OlsxLDcwXX0sezE4OlsyLDQ3XSwyNDpbMiw0N10sMzY6WzIsNDddLDQwOlsyLDQ3XX0sezE4Olsy
LDQwXSwyNDpbMiw0MF0sMzI6WzIsNDBdLDMzOlsyLDQwXSwzNDpbMiw0MF0sMzU6WzIsNDBdLDM2
OlsyLDQwXSw0MDpbMiw0MF0sNDE6WzEsNzFdLDQyOlsyLDQwXSw0NDpbMiw0MF19LHsxODpbMiwz
OV0sMjQ6WzIsMzldLDMyOlsyLDM5XSwzMzpbMiwzOV0sMzQ6WzIsMzldLDM1OlsyLDM5XSwzNjpb
MiwzOV0sNDA6WzIsMzldLDQyOlsyLDM5XSw0NDpbMiwzOV19LHs1OlsyLDIyXSwxNDpbMiwyMl0s
MTU6WzIsMjJdLDE2OlsyLDIyXSwxOTpbMiwyMl0sMjA6WzIsMjJdLDIyOlsyLDIyXSwyMzpbMiwy
Ml0sMjU6WzIsMjJdfSx7NTpbMiwxOV0sMTQ6WzIsMTldLDE1OlsyLDE5XSwxNjpbMiwxOV0sMTk6
WzIsMTldLDIwOlsyLDE5XSwyMjpbMiwxOV0sMjM6WzIsMTldLDI1OlsyLDE5XX0sezM2OlsxLDcy
XX0sezE4OlsyLDQ4XSwyNDpbMiw0OF0sMzY6WzIsNDhdLDQwOlsyLDQ4XX0sezQxOlsxLDcxXX0s
ezIxOjU2LDMwOjYwLDMxOjczLDMyOlsxLDU3XSwzMzpbMSw1OF0sMzQ6WzEsNTldLDM1OlsxLDYx
XSw0MDpbMSwyOF0sNDI6WzEsMjddLDQzOjI2fSx7MTg6WzIsMzFdLDI0OlsyLDMxXSwzMjpbMiwz
MV0sMzM6WzIsMzFdLDM0OlsyLDMxXSwzNTpbMiwzMV0sMzY6WzIsMzFdLDQwOlsyLDMxXSw0Mjpb
MiwzMV19LHsxODpbMiwzM10sMjQ6WzIsMzNdLDM2OlsyLDMzXSw0MDpbMiwzM119XSwKLSAgZGVm
YXVsdEFjdGlvbnM6IHszOlsyLDJdLDE2OlsyLDFdLDUwOlsyLDQyXX0sCi0gIHBhcnNlRXJyb3I6
IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Io
c3RyKTsKLSAgfSwKLSAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7Ci0gICAgICB2YXIg
c2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0
YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9ICIiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAs
IHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxOwotICAgICAgdGhpcy5sZXhlci5z
ZXRJbnB1dChpbnB1dCk7Ci0gICAgICB0aGlzLmxleGVyLnl5ID0gdGhpcy55eTsKLSAgICAgIHRo
aXMueXkubGV4ZXIgPSB0aGlzLmxleGVyOwotICAgICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzOwot
ICAgICAgaWYgKHR5cGVvZiB0aGlzLmxleGVyLnl5bGxvYyA9PSAidW5kZWZpbmVkIikKLSAgICAg
ICAgICB0aGlzLmxleGVyLnl5bGxvYyA9IHt9OwotICAgICAgdmFyIHl5bG9jID0gdGhpcy5sZXhl
ci55eWxsb2M7Ci0gICAgICBsc3RhY2sucHVzaCh5eWxvYyk7Ci0gICAgICB2YXIgcmFuZ2VzID0g
dGhpcy5sZXhlci5vcHRpb25zICYmIHRoaXMubGV4ZXIub3B0aW9ucy5yYW5nZXM7Ci0gICAgICBp
ZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICB0
aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBhcnNlRXJyb3I7Ci0gICAgICBmdW5jdGlvbiBwb3BT
dGFjayhuKSB7Ci0gICAgICAgICAgc3RhY2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47
Ci0gICAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuOwotICAgICAgICAg
IGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjsKLSAgICAgIH0KLSAgICAgIGZ1bmN0
aW9uIGxleCgpIHsKLSAgICAgICAgICB2YXIgdG9rZW47Ci0gICAgICAgICAgdG9rZW4gPSBzZWxm
LmxleGVyLmxleCgpIHx8IDE7Ci0gICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gIm51bWJl
ciIpIHsKLSAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tl
bjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgfQotICAgICAg
dmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0g
e30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkOwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwotICAgICAgICAgIGlmICh0
aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkgewotICAgICAgICAgICAgICBhY3Rpb24gPSB0aGlz
LmRlZmF1bHRBY3Rpb25zW3N0YXRlXTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gInVuZGVmaW5lZCIpIHsK
LSAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpOwotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICJ1bmRlZmluZWQi
IHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHsKLSAgICAgICAgICAgICAgdmFyIGVy
clN0ciA9ICIiOwotICAgICAgICAgICAgICBpZiAoIXJlY292ZXJpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkID0gW107Ci0gICAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVb
c3RhdGVdKQotICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYg
cCA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaCgiJyIgKyB0
aGlzLnRlcm1pbmFsc19bcF0gKyAiJyIpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgIGVyclN0ciA9ICJQYXJzZSBlcnJvciBvbiBsaW5lICIgKyAoeXlsaW5lbm8gKyAx
KSArICI6XG4iICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArICJcbkV4cGVjdGluZyAiICsg
ZXhwZWN0ZWQuam9pbigiLCAiKSArICIsIGdvdCAnIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9s
XSB8fCBzeW1ib2wpICsgIiciOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICBlcnJTdHIgPSAiUGFyc2UgZXJyb3Igb24gbGluZSAiICsgKHl5bGluZW5v
ICsgMSkgKyAiOiBVbmV4cGVjdGVkICIgKyAoc3ltYm9sID09IDE/ImVuZCBvZiBpbnB1dCI6Iici
ICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAiJyIpOwotICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwge3Rl
eHQ6IHRoaXMubGV4ZXIubWF0Y2gsIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBz
eW1ib2wsIGxpbmU6IHRoaXMubGV4ZXIueXlsaW5lbm8sIGxvYzogeXlsb2MsIGV4cGVjdGVkOiBl
eHBlY3RlZH0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChh
Y3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkgewotICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBv
c3NpYmxlIGF0IHN0YXRlOiAiICsgc3RhdGUgKyAiLCB0b2tlbjogIiArIHN5bWJvbCk7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7Ci0gICAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7Ci0gICAgICAgICAgICAgIHZzdGFj
ay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTsKLSAgICAgICAgICAgICAgbHN0YWNrLnB1c2godGhp
cy5sZXhlci55eWxsb2MpOwotICAgICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvblsxXSk7Ci0g
ICAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7Ci0gICAgICAgICAgICAgIGlmICghcHJlRXJyb3JT
eW1ib2wpIHsKLSAgICAgICAgICAgICAgICAgIHl5bGVuZyA9IHRoaXMubGV4ZXIueXlsZW5nOwot
ICAgICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7Ci0gICAgICAgICAg
ICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87Ci0gICAgICAgICAgICAgICAg
ICB5eWxvYyA9IHRoaXMubGV4ZXIueXlsbG9jOwotICAgICAgICAgICAgICAgICAgaWYgKHJlY292
ZXJpbmcgPiAwKQotICAgICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTsKLSAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9s
OwotICAgICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAg
ICAgbGVuID0gdGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVsxXTsKLSAgICAgICAgICAgICAg
eXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTsKLSAgICAgICAgICAgICAgeXl2
YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5m
aXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5l
LCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3Rf
Y29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVt
bn07Ci0gICAgICAgICAgICAgIGlmIChyYW5nZXMpIHsKLSAgICAgICAgICAgICAgICAgIHl5dmFs
Ll8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0s
IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dOwotICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgIHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh5eXZhbCwgeXl0ZXh0LCB5
eWxlbmcsIHl5bGluZW5vLCB0aGlzLnl5LCBhY3Rpb25bMV0sIHZzdGFjaywgbHN0YWNrKTsKLSAg
ICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKGxlbikg
ewotICAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIp
OwotICAgICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTsK
LSAgICAgICAgICAgICAgICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7Ci0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25z
X1thY3Rpb25bMV1dWzBdKTsKLSAgICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7Ci0g
ICAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTsKLSAgICAgICAgICAgICAgbmV3U3Rh
dGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0g
MV1dOwotICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTsKLSAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICB9OwotCi0KLSAg
ZnVuY3Rpb24gc3RyaXBGbGFncyhvcGVuLCBjbG9zZSkgewotICAgIHJldHVybiB7Ci0gICAgICBs
ZWZ0OiBvcGVuLmNoYXJBdCgyKSA9PT0gJ34nLAotICAgICAgcmlnaHQ6IGNsb3NlLmNoYXJBdCgw
KSA9PT0gJ34nIHx8IGNsb3NlLmNoYXJBdCgxKSA9PT0gJ34nCi0gICAgfTsKLSAgfQotCi0gIC8q
IEppc29uIGdlbmVyYXRlZCBsZXhlciAqLwotICB2YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXsKLSAg
dmFyIGxleGVyID0gKHtFT0Y6MSwKLSAgcGFyc2VFcnJvcjpmdW5jdGlvbiBwYXJzZUVycm9yKHN0
ciwgaGFzaCkgewotICAgICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikgewotICAgICAgICAgICAg
ICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7Ci0gICAgICAgICAgfQotICAg
ICAgfSwKLSAgc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7Ci0gICAgICAgICAgdGhpcy5faW5w
dXQgPSBpbnB1dDsKLSAgICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9u
ZSA9IGZhbHNlOwotICAgICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7Ci0g
ICAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gJyc7Ci0g
ICAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddOwotICAgICAgICAgIHRo
aXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0
X2NvbHVtbjowfTsKLSAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgdGhpcy55eWxs
b2MucmFuZ2UgPSBbMCwwXTsKLSAgICAgICAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICB9LAotICBpbnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
dmFyIGNoID0gdGhpcy5faW5wdXRbMF07Ci0gICAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7Ci0g
ICAgICAgICAgdGhpcy55eWxlbmcrKzsKLSAgICAgICAgICB0aGlzLm9mZnNldCsrOwotICAgICAg
ICAgIHRoaXMubWF0Y2ggKz0gY2g7Ci0gICAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoOwotICAg
ICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTsKLSAgICAgICAg
ICBpZiAobGluZXMpIHsKLSAgICAgICAgICAgICAgdGhpcy55eWxpbmVubysrOwotICAgICAgICAg
ICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKzsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgdGhpcy55eWxsb2MucmFuZ2VbMV0rKzsKLQotICAg
ICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7Ci0gICAgICAgICAgcmV0
dXJuIGNoOwotICAgICAgfSwKLSAgdW5wdXQ6ZnVuY3Rpb24gKGNoKSB7Ci0gICAgICAgICAgdmFy
IGxlbiA9IGNoLmxlbmd0aDsKLSAgICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XHJc
bj98XG4pL2cpOwotCi0gICAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0Owot
ICAgICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0
Lmxlbmd0aC1sZW4tMSk7Ci0gICAgICAgICAgLy90aGlzLnl5bGVuZyAtPSBsZW47Ci0gICAgICAg
ICAgdGhpcy5vZmZzZXQgLT0gbGVuOwotICAgICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0
Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTsKLSAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5t
YXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGgtMSk7Ci0gICAgICAgICAgdGhpcy5tYXRj
aGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpOwotCi0g
ICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0
aC0xOwotICAgICAgICAgIHZhciByID0gdGhpcy55eWxsb2MucmFuZ2U7Ci0KLSAgICAgICAgICB0
aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLAotICAgICAg
ICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsCi0gICAgICAgICAgICBmaXJzdF9jb2x1
bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiwKLSAgICAgICAgICAgIGxhc3RfY29sdW1uOiBs
aW5lcyA/Ci0gICAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3Ro
ID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5n
dGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDoKLSAgICAgICAgICAg
ICAgICB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW4KLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgewotICAgICAgICAgICAgICB0aGlzLnl5
bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dOwotICAgICAgICAg
IH0KLSAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0sCi0gIG1vcmU6ZnVuY3Rpb24gKCkg
ewotICAgICAgICAgIHRoaXMuX21vcmUgPSB0cnVlOwotICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgfSwKLSAgbGVzczpmdW5jdGlvbiAobikgewotICAgICAgICAgIHRoaXMudW5wdXQodGhp
cy5tYXRjaC5zbGljZShuKSk7Ci0gICAgICB9LAotICBwYXN0SW5wdXQ6ZnVuY3Rpb24gKCkgewot
ICAgICAgICAgIHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQu
bGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpOwotICAgICAgICAgIHJldHVybiAocGFzdC5sZW5n
dGggPiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywgIiIp
OwotICAgICAgfSwKLSAgdXBjb21pbmdJbnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdmFy
IG5leHQgPSB0aGlzLm1hdGNoOwotICAgICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7Ci0g
ICAgICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5wdXQuc3Vic3RyKDAsIDIwLW5leHQubGVuZ3Ro
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4
dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXG4vZywgIiIpOwotICAgICAgfSwK
LSAgc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB2YXIgcHJlID0gdGhpcy5w
YXN0SW5wdXQoKTsKLSAgICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShwcmUubGVuZ3RoICsgMSku
am9pbigiLSIpOwotICAgICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSAr
ICJcbiIgKyBjKyJeIjsKLSAgICAgIH0sCi0gIG5leHQ6ZnVuY3Rpb24gKCkgewotICAgICAgICAg
IGlmICh0aGlzLmRvbmUpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlOwotCi0g
ICAgICAgICAgdmFyIHRva2VuLAotICAgICAgICAgICAgICBtYXRjaCwKLSAgICAgICAgICAgICAg
dGVtcE1hdGNoLAotICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgY29sLAotICAg
ICAgICAgICAgICBsaW5lczsKLSAgICAgICAgICBpZiAoIXRoaXMuX21vcmUpIHsKLSAgICAgICAg
ICAgICAgdGhpcy55eXRleHQgPSAnJzsKLSAgICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnOwot
ICAgICAgICAgIH0KLSAgICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTsK
LSAgICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgIHRlbXBNYXRjaCA9IHRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1d
KTsKLSAgICAgICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFsw
XS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgICBtYXRjaCA9
IHRlbXBNYXRjaDsKLSAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKLSAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgICBsaW5lcyA9IG1h
dGNoWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTsKLSAgICAgICAgICAgICAgaWYgKGxpbmVz
KSB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgdGhpcy55eWxs
b2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGlu
ZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8p
WzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RofTsK
LSAgICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07Ci0gICAgICAgICAgICAgIHRo
aXMubWF0Y2ggKz0gbWF0Y2hbMF07Ci0gICAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNo
OwotICAgICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDsKLSAgICAg
ICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHsKLSAgICAgICAgICAgICAgICAgIHRo
aXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVu
Z107Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlOwot
ICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxl
bmd0aCk7Ci0gICAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTsKLSAgICAgICAg
ICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlz
LCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxl
bmd0aC0xXSk7Ci0gICAgICAgICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHRo
aXMuZG9uZSA9IGZhbHNlOwotICAgICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjsK
LSAgICAgICAgICAgICAgZWxzZSByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0
aGlzLl9pbnB1dCA9PT0gIiIpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GOwotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoJ0xl
eGljYWwgZXJyb3Igb24gbGluZSAnKyh0aGlzLnl5bGluZW5vKzEpKycuIFVucmVjb2duaXplZCB0
ZXh0LlxuJyt0aGlzLnNob3dQb3NpdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgIHt0ZXh0
OiAiIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm99KTsKLSAgICAgICAgICB9Ci0g
ICAgICB9LAotICBsZXg6ZnVuY3Rpb24gbGV4KCkgewotICAgICAgICAgIHZhciByID0gdGhpcy5u
ZXh0KCk7Ci0gICAgICAgICAgaWYgKHR5cGVvZiByICE9PSAndW5kZWZpbmVkJykgewotICAgICAg
ICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5sZXgoKTsKLSAgICAgICAgICB9Ci0gICAgICB9LAotICBiZWdpbjpmdW5jdGlvbiBi
ZWdpbihjb25kaXRpb24pIHsKLSAgICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29u
ZGl0aW9uKTsKLSAgICAgIH0sCi0gIHBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlKCkgewotICAg
ICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOwotICAgICAgfSwKLSAgX2N1
cnJlbnRSdWxlczpmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkgewotICAgICAgICAgIHJldHVybiB0
aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxl
bmd0aC0xXV0ucnVsZXM7Ci0gICAgICB9LAotICB0b3BTdGF0ZTpmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5n
dGgtMl07Ci0gICAgICB9LAotICBwdXNoU3RhdGU6ZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7
Ci0gICAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pOwotICAgICAgfX0pOwotICBsZXhlci5v
cHRpb25zID0ge307Ci0gIGxleGVyLnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMo
eXkseXlfLCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsWVlfU1RBUlQpIHsKLQotCi0gIGZ1bmN0
aW9uIHN0cmlwKHN0YXJ0LCBlbmQpIHsKLSAgICByZXR1cm4geXlfLnl5dGV4dCA9IHl5Xy55eXRl
eHQuc3Vic3RyKHN0YXJ0LCB5eV8ueXlsZW5nLWVuZCk7Ci0gIH0KLQotCi0gIHZhciBZWVNUQVRF
PVlZX1NUQVJUCi0gIHN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7Ci0gIGNhc2Ug
MDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0LnNs
aWNlKC0yKSA9PT0gIlxcXFwiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJpcCgwLDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5iZWdpbigibXUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09ICJcXCIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCJlbXUiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5iZWdpbigibXUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlf
Lnl5dGV4dCkgcmV0dXJuIDE0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgYnJlYWs7Ci0gIGNhc2UgMTpyZXR1cm4gMTQ7Ci0gIGJyZWFrOwotICBjYXNlIDI6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gIGJyZWFrOwotICBjYXNlIDM6c3RyaXAoMCw0KTsgdGhp
cy5wb3BTdGF0ZSgpOyByZXR1cm4gMTU7Ci0gIGJyZWFrOwotICBjYXNlIDQ6cmV0dXJuIDM1Owot
ICBicmVhazsKLSAgY2FzZSA1OnJldHVybiAzNjsKLSAgYnJlYWs7Ci0gIGNhc2UgNjpyZXR1cm4g
MjU7Ci0gIGJyZWFrOwotICBjYXNlIDc6cmV0dXJuIDE2OwotICBicmVhazsKLSAgY2FzZSA4OnJl
dHVybiAyMDsKLSAgYnJlYWs7Ci0gIGNhc2UgOTpyZXR1cm4gMTk7Ci0gIGJyZWFrOwotICBjYXNl
IDEwOnJldHVybiAxOTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTE6cmV0dXJuIDIzOwotICBicmVhazsK
LSAgY2FzZSAxMjpyZXR1cm4gMjI7Ci0gIGJyZWFrOwotICBjYXNlIDEzOnRoaXMucG9wU3RhdGUo
KTsgdGhpcy5iZWdpbignY29tJyk7Ci0gIGJyZWFrOwotICBjYXNlIDE0OnN0cmlwKDMsNSk7IHRo
aXMucG9wU3RhdGUoKTsgcmV0dXJuIDE1OwotICBicmVhazsKLSAgY2FzZSAxNTpyZXR1cm4gMjI7
Ci0gIGJyZWFrOwotICBjYXNlIDE2OnJldHVybiA0MTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTc6cmV0
dXJuIDQwOwotICBicmVhazsKLSAgY2FzZSAxODpyZXR1cm4gNDA7Ci0gIGJyZWFrOwotICBjYXNl
IDE5OnJldHVybiA0NDsKLSAgYnJlYWs7Ci0gIGNhc2UgMjA6Ly8gaWdub3JlIHdoaXRlc3BhY2UK
LSAgYnJlYWs7Ci0gIGNhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gMjQ7Ci0gIGJyZWFr
OwotICBjYXNlIDIyOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDE4OwotICBicmVhazsKLSAgY2Fz
ZSAyMzp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXCIvZywnIicpOyByZXR1cm4g
MzI7Ci0gIGJyZWFrOwotICBjYXNlIDI0Onl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2Uo
L1xcJy9nLCInIik7IHJldHVybiAzMjsKLSAgYnJlYWs7Ci0gIGNhc2UgMjU6cmV0dXJuIDQyOwot
ICBicmVhazsKLSAgY2FzZSAyNjpyZXR1cm4gMzQ7Ci0gIGJyZWFrOwotICBjYXNlIDI3OnJldHVy
biAzNDsKLSAgYnJlYWs7Ci0gIGNhc2UgMjg6cmV0dXJuIDMzOwotICBicmVhazsKLSAgY2FzZSAy
OTpyZXR1cm4gNDA7Ci0gIGJyZWFrOwotICBjYXNlIDMwOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIp
OyByZXR1cm4gNDA7Ci0gIGJyZWFrOwotICBjYXNlIDMxOnJldHVybiAnSU5WQUxJRCc7Ci0gIGJy
ZWFrOwotICBjYXNlIDMyOnJldHVybiA1OwotICBicmVhazsKLSAgfQotICB9OwotICBsZXhlci5y
dWxlcyA9IFsvXig/OlteXHgwMF0qPyg/PShce1x7KSkpLywvXig/OlteXHgwMF0rKS8sL14oPzpb
Xlx4MDBdezIsfT8oPz0oXHtce3xcXFx7XHt8XFxcXFx7XHt8JCkpKS8sL14oPzpbXHNcU10qPy0t
XH1cfSkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpce1x7KH4pPz4pLywvXig/Olx7XHsofik/
IykvLC9eKD86XHtceyh+KT9cLykvLC9eKD86XHtceyh+KT9cXikvLC9eKD86XHtceyh+KT9ccypl
bHNlXGIpLywvXig/Olx7XHsofik/XHspLywvXig/Olx7XHsofik/JikvLC9eKD86XHtceyEtLSkv
LC9eKD86XHtceyFbXHNcU10qP1x9XH0pLywvXig/Olx7XHsofik/KS8sL14oPzo9KS8sL14oPzpc
LlwuKS8sL14oPzpcLig/PShbPX59XHNcLy4pXSkpKS8sL14oPzpbXC8uXSkvLC9eKD86XHMrKS8s
L14oPzpcfSh+KT9cfVx9KS8sL14oPzoofik/XH1cfSkvLC9eKD86IihcXFsiXXxbXiJdKSoiKS8s
L14oPzonKFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XHMpXSkpKS8s
L14oPzpmYWxzZSg/PShbfn1ccyldKSkpLywvXig/Oi0/WzAtOV0rKD89KFt+fVxzKV0pKSkvLC9e
KD86KFteXHMhIiMlLSxcLlwvOy0+QFxbLVxeYFx7LX5dKyg/PShbPX59XHNcLy4pXSkpKSkvLC9e
KD86XFtbXlxdXSpcXSkvLC9eKD86LikvLC9eKD86JCkvXTsKLSAgbGV4ZXIuY29uZGl0aW9ucyA9
IHsibXUiOnsicnVsZXMiOls0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwx
OSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMl0sImluY2x1c2l2ZSI6ZmFs
c2V9LCJlbXUiOnsicnVsZXMiOlsyXSwiaW5jbHVzaXZlIjpmYWxzZX0sImNvbSI6eyJydWxlcyI6
WzNdLCJpbmNsdXNpdmUiOmZhbHNlfSwiSU5JVElBTCI6eyJydWxlcyI6WzAsMSwzMl0sImluY2x1
c2l2ZSI6dHJ1ZX19OwotICByZXR1cm4gbGV4ZXI7fSkoKQotICBwYXJzZXIubGV4ZXIgPSBsZXhl
cjsKLSAgZnVuY3Rpb24gUGFyc2VyICgpIHsgdGhpcy55eSA9IHt9OyB9UGFyc2VyLnByb3RvdHlw
ZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyOwotICByZXR1cm4gbmV3IFBhcnNlcjsK
LSAgfSkoKTtfX2V4cG9ydHNfXyA9IGhhbmRsZWJhcnM7Ci0gIC8qIGpzaGludCBpZ25vcmU6ZW5k
ICovCi0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0pKCk7Ci0KLS8vIGhhbmRsZWJhcnMvY29tcGls
ZXIvYmFzZS5qcwotdmFyIF9fbW9kdWxlOF9fID0gKGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLSAgdmFyIF9fZXhwb3J0c19fID0g
e307Ci0gIHZhciBwYXJzZXIgPSBfX2RlcGVuZGVuY3kxX187Ci0gIHZhciBBU1QgPSBfX2RlcGVu
ZGVuY3kyX187Ci0KLSAgX19leHBvcnRzX18ucGFyc2VyID0gcGFyc2VyOwotCi0gIGZ1bmN0aW9u
IHBhcnNlKGlucHV0KSB7Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgYW4gYWxyZWFkeS1jb21waWxl
IEFTVCB3YXMgcGFzc2VkIGluLgotICAgIGlmKGlucHV0LmNvbnN0cnVjdG9yID09PSBBU1QuUHJv
Z3JhbU5vZGUpIHsgcmV0dXJuIGlucHV0OyB9Ci0KLSAgICBwYXJzZXIueXkgPSBBU1Q7Ci0gICAg
cmV0dXJuIHBhcnNlci5wYXJzZShpbnB1dCk7Ci0gIH0KLQotICBfX2V4cG9ydHNfXy5wYXJzZSA9
IHBhcnNlOwotICByZXR1cm4gX19leHBvcnRzX187Ci19KShfX21vZHVsZTlfXywgX19tb2R1bGU3
X18pOwotCi0vLyBoYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzCi12YXIgX19tb2R1bGUx
MF9fID0gKGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXykgewotICAidXNlIHN0cmljdCI7Ci0gIHZh
ciBfX2V4cG9ydHNfXyA9IHt9OwotICB2YXIgRXhjZXB0aW9uID0gX19kZXBlbmRlbmN5MV9fOwot
Ci0gIGZ1bmN0aW9uIENvbXBpbGVyKCkge30KLQotICBfX2V4cG9ydHNfXy5Db21waWxlciA9IENv
bXBpbGVyOy8vIHRoZSBmb3VuZEhlbHBlciByZWdpc3RlciB3aWxsIGRpc2FtYmlndWF0ZSBoZWxw
ZXIgbG9va3VwIGZyb20gZmluZGluZyBhCi0gIC8vIGZ1bmN0aW9uIGluIGEgY29udGV4dC4gVGhp
cyBpcyBuZWNlc3NhcnkgZm9yIG11c3RhY2hlIGNvbXBhdGliaWxpdHksIHdoaWNoCi0gIC8vIHJl
cXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkg
YmxvY2tIZWxwZXJNaXNzaW5nLAotICAvLyBhbmQgdGhlbiBwcm9jZWVkIGFzIGlmIHRoZSByZXN1
bHRpbmcgdmFsdWUgd2FzIHByb3ZpZGVkIHRvIGJsb2NrSGVscGVyTWlzc2luZy4KLQotICBDb21w
aWxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29tcGlsZXI6IENvbXBpbGVyLAotCi0gICAgZGlzYXNz
ZW1ibGU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIG9wY29kZXMgPSB0aGlzLm9wY29kZXMsIG9w
Y29kZSwgb3V0ID0gW10sIHBhcmFtcywgcGFyYW07Ci0KLSAgICAgIGZvciAodmFyIGk9MCwgbD1v
cGNvZGVzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTsK
LQotICAgICAgICBpZiAob3Bjb2RlLm9wY29kZSA9PT0gJ0RFQ0xBUkUnKSB7Ci0gICAgICAgICAg
b3V0LnB1c2goIkRFQ0xBUkUgIiArIG9wY29kZS5uYW1lICsgIj0iICsgb3Bjb2RlLnZhbHVlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwYXJhbXMgPSBbXTsKLSAgICAgICAgICBmb3Ig
KHZhciBqPTA7IGo8b3Bjb2RlLmFyZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIHBhcmFt
ID0gb3Bjb2RlLmFyZ3Nbal07Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAic3Ry
aW5nIikgewotICAgICAgICAgICAgICBwYXJhbSA9ICJcIiIgKyBwYXJhbS5yZXBsYWNlKCJcbiIs
ICJcXG4iKSArICJcIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbXMucHVzaChw
YXJhbSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG91dC5wdXNoKG9wY29kZS5vcGNvZGUgKyAi
ICIgKyBwYXJhbXMuam9pbigiICIpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1
cm4gb3V0LmpvaW4oIlxuIik7Ci0gICAgfSwKLQotICAgIGVxdWFsczogZnVuY3Rpb24ob3RoZXIp
IHsKLSAgICAgIHZhciBsZW4gPSB0aGlzLm9wY29kZXMubGVuZ3RoOwotICAgICAgaWYgKG90aGVy
Lm9wY29kZXMubGVuZ3RoICE9PSBsZW4pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBv
cGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sCi0gICAgICAgICAgICBvdGhlck9wY29kZSA9IG90aGVy
Lm9wY29kZXNbaV07Ci0gICAgICAgIGlmIChvcGNvZGUub3Bjb2RlICE9PSBvdGhlck9wY29kZS5v
cGNvZGUgfHwgb3Bjb2RlLmFyZ3MubGVuZ3RoICE9PSBvdGhlck9wY29kZS5hcmdzLmxlbmd0aCkg
ewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IG9wY29kZS5hcmdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKG9wY29k
ZS5hcmdzW2pdICE9PSBvdGhlck9wY29kZS5hcmdzW2pdKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGxlbiA9IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOwotICAgICAgaWYgKG90aGVyLmNoaWxkcmVuLmxlbmd0aCAhPT0g
bGVuKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaSA9IDA7
IGkgPCBsZW47IGkrKykgewotICAgICAgICBpZiAoIXRoaXMuY2hpbGRyZW5baV0uZXF1YWxzKG90
aGVyLmNoaWxkcmVuW2ldKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZ3VpZDogMCwKLQot
ICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHsKLSAgICAgIHRoaXMub3Bj
b2RlcyA9IFtdOwotICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotICAgICAgdGhpcy5kZXB0aHMg
PSB7bGlzdDogW119OwotICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLQotICAgICAgLy8g
VGhlc2UgY2hhbmdlcyB3aWxsIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgY29tcGlsZXIgY29tcG9u
ZW50cwotICAgICAgdmFyIGtub3duSGVscGVycyA9IHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnM7
Ci0gICAgICB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzID0gewotICAgICAgICAnaGVscGVyTWlz
c2luZyc6IHRydWUsCi0gICAgICAgICdibG9ja0hlbHBlck1pc3NpbmcnOiB0cnVlLAotICAgICAg
ICAnZWFjaCc6IHRydWUsCi0gICAgICAgICdpZic6IHRydWUsCi0gICAgICAgICd1bmxlc3MnOiB0
cnVlLAotICAgICAgICAnd2l0aCc6IHRydWUsCi0gICAgICAgICdsb2cnOiB0cnVlCi0gICAgICB9
OwotICAgICAgaWYgKGtub3duSGVscGVycykgewotICAgICAgICBmb3IgKHZhciBuYW1lIGluIGtu
b3duSGVscGVycykgewotICAgICAgICAgIHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNbbmFtZV0g
PSBrbm93bkhlbHBlcnNbbmFtZV07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IHRoaXMuYWNjZXB0KHByb2dyYW0pOwotICAgIH0sCi0KLSAgICBhY2NlcHQ6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgIHZhciBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge30sCi0gICAgICAgICAgcmV0
OwotICAgICAgaWYgKHN0cmlwLmxlZnQpIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ3N0cmlwJyk7
Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IHRoaXNbbm9kZS50eXBlXShub2RlKTsKLQotICAgICAg
aWYgKHN0cmlwLnJpZ2h0KSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdzdHJpcCcpOwotICAgICAg
fQotCi0gICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICBwcm9ncmFtOiBmdW5jdGlvbihw
cm9ncmFtKSB7Ci0gICAgICB2YXIgc3RhdGVtZW50cyA9IHByb2dyYW0uc3RhdGVtZW50czsKLQot
ICAgICAgZm9yKHZhciBpPTAsIGw9c3RhdGVtZW50cy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAg
ICAgIHRoaXMuYWNjZXB0KHN0YXRlbWVudHNbaV0pOwotICAgICAgfQotICAgICAgdGhpcy5pc1Np
bXBsZSA9IGwgPT09IDE7Ci0KLSAgICAgIHRoaXMuZGVwdGhzLmxpc3QgPSB0aGlzLmRlcHRocy5s
aXN0LnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICByZXR1cm4gYSAtIGI7Ci0gICAgICB9
KTsKLQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIGNvbXBpbGVQcm9ncmFtOiBm
dW5jdGlvbihwcm9ncmFtKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29tcGlsZXIo
KS5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyk7Ci0gICAgICB2YXIgZ3VpZCA9IHRoaXMu
Z3VpZCsrLCBkZXB0aDsKLQotICAgICAgdGhpcy51c2VQYXJ0aWFsID0gdGhpcy51c2VQYXJ0aWFs
IHx8IHJlc3VsdC51c2VQYXJ0aWFsOwotCi0gICAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVz
dWx0OwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1yZXN1bHQuZGVwdGhzLmxpc3QubGVuZ3RoOyBp
PGw7IGkrKykgewotICAgICAgICBkZXB0aCA9IHJlc3VsdC5kZXB0aHMubGlzdFtpXTsKLQotICAg
ICAgICBpZihkZXB0aCA8IDIpIHsgY29udGludWU7IH0KLSAgICAgICAgZWxzZSB7IHRoaXMuYWRk
RGVwdGgoZGVwdGggLSAxKTsgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gZ3VpZDsKLSAgICB9
LAotCi0gICAgYmxvY2s6IGZ1bmN0aW9uKGJsb2NrKSB7Ci0gICAgICB2YXIgbXVzdGFjaGUgPSBi
bG9jay5tdXN0YWNoZSwKLSAgICAgICAgICBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSwKLSAgICAg
ICAgICBpbnZlcnNlID0gYmxvY2suaW52ZXJzZTsKLQotICAgICAgaWYgKHByb2dyYW0pIHsKLSAg
ICAgICAgcHJvZ3JhbSA9IHRoaXMuY29tcGlsZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChpbnZlcnNlKSB7Ci0gICAgICAgIGludmVyc2UgPSB0aGlzLmNvbXBpbGVQcm9n
cmFtKGludmVyc2UpOwotICAgICAgfQotCi0gICAgICB2YXIgc2V4cHIgPSBtdXN0YWNoZS5zZXhw
cjsKLSAgICAgIHZhciB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKHNleHByKTsKLQotICAgICAg
aWYgKHR5cGUgPT09ICJoZWxwZXIiKSB7Ci0gICAgICAgIHRoaXMuaGVscGVyU2V4cHIoc2V4cHIs
IHByb2dyYW0sIGludmVyc2UpOwotICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAic2ltcGxlIikg
ewotICAgICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTsKLQotICAgICAgICAvLyBub3cgdGhh
dCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8v
IGV2YWx1YXRlIGl0IGJ5IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYAotICAgICAgICB0
aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTsKLSAgICAgICAgdGhpcy5vcGNvZGUo
J3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gn
KTsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2Jsb2NrVmFsdWUnKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpOwotCi0g
ICAgICAgIC8vIG5vdyB0aGF0IHRoZSBzaW1wbGUgbXVzdGFjaGUgaXMgcmVzb2x2ZWQsIHdlIG5l
ZWQgdG8KLSAgICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1p
c3NpbmdgCi0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOwotICAg
ICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTsKLSAgICAgICAgdGhpcy5v
cGNvZGUoJ2VtcHR5SGFzaCcpOwotICAgICAgICB0aGlzLm9wY29kZSgnYW1iaWd1b3VzQmxvY2tW
YWx1ZScpOwotICAgICAgfQotCi0gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7Ci0gICAgfSwK
LQotICAgIGhhc2g6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgIHZhciBwYWlycyA9IGhhc2gucGFp
cnMsIHBhaXIsIHZhbDsKLQotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hIYXNoJyk7Ci0KLSAgICAg
IGZvcih2YXIgaT0wLCBsPXBhaXJzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgcGFpciA9
IHBhaXJzW2ldOwotICAgICAgICB2YWwgID0gcGFpclsxXTsKLQotICAgICAgICBpZiAodGhpcy5v
cHRpb25zLnN0cmluZ1BhcmFtcykgewotICAgICAgICAgIGlmKHZhbC5kZXB0aCkgewotICAgICAg
ICAgICAgdGhpcy5hZGREZXB0aCh2YWwuZGVwdGgpOwotICAgICAgICAgIH0KLSAgICAgICAgICB0
aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHZhbC5kZXB0aCB8fCAwKTsKLSAgICAgICAgICB0aGlz
Lm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsLnN0cmluZ01vZGVWYWx1ZSwgdmFsLnR5cGUp
OwotCi0gICAgICAgICAgaWYgKHZhbC50eXBlID09PSAnc2V4cHInKSB7Ci0gICAgICAgICAgICAv
LyBTdWJleHByZXNzaW9ucyBnZXQgZXZhbHVhdGVkIGFuZCBwYXNzZWQgaW4KLSAgICAgICAgICAg
IC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS4KLSAgICAgICAgICAgIHRoaXMuc2V4cHIodmFsKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpcy5hY2NlcHQodmFs
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWly
WzBdKTsKLSAgICAgIH0KLSAgICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNoJyk7Ci0gICAgfSwKLQot
ICAgIHBhcnRpYWw6IGZ1bmN0aW9uKHBhcnRpYWwpIHsKLSAgICAgIHZhciBwYXJ0aWFsTmFtZSA9
IHBhcnRpYWwucGFydGlhbE5hbWU7Ci0gICAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlOwotCi0g
ICAgICBpZihwYXJ0aWFsLmNvbnRleHQpIHsKLSAgICAgICAgdGhpcy5JRChwYXJ0aWFsLmNvbnRl
eHQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2gnLCAnZGVwdGgw
Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgcGFydGlh
bE5hbWUubmFtZSk7Ci0gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7Ci0gICAgfSwKLQotICAg
IGNvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpIHsKLSAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRD
b250ZW50JywgY29udGVudC5zdHJpbmcpOwotICAgIH0sCi0KLSAgICBtdXN0YWNoZTogZnVuY3Rp
b24obXVzdGFjaGUpIHsKLSAgICAgIHRoaXMuc2V4cHIobXVzdGFjaGUuc2V4cHIpOwotCi0gICAg
ICBpZihtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHsKLSAgICAg
ICAgdGhpcy5vcGNvZGUoJ2FwcGVuZEVzY2FwZWQnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHRoaXMub3Bjb2RlKCdhcHBlbmQnKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgYW1iaWd1b3Vz
U2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7Ci0gICAgICB2YXIgaWQg
PSBzZXhwci5pZCwKLSAgICAgICAgICBuYW1lID0gaWQucGFydHNbMF0sCi0gICAgICAgICAgaXNC
bG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7Ci0KLSAgICAgIHRoaXMu
b3Bjb2RlKCdnZXRDb250ZXh0JywgaWQuZGVwdGgpOwotCi0gICAgICB0aGlzLm9wY29kZSgncHVz
aFByb2dyYW0nLCBwcm9ncmFtKTsKLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGlu
dmVyc2UpOwotCi0gICAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3VzJywgbmFtZSwgaXNC
bG9jayk7Ci0gICAgfSwKLQotICAgIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikgewotICAg
ICAgdmFyIGlkID0gc2V4cHIuaWQ7Ci0KLSAgICAgIGlmIChpZC50eXBlID09PSAnREFUQScpIHsK
LSAgICAgICAgdGhpcy5EQVRBKGlkKTsKLSAgICAgIH0gZWxzZSBpZiAoaWQucGFydHMubGVuZ3Ro
KSB7Ci0gICAgICAgIHRoaXMuSUQoaWQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2lt
cGxpZmllZCBJRCBmb3IgYHRoaXNgCi0gICAgICAgIHRoaXMuYWRkRGVwdGgoaWQuZGVwdGgpOwot
ICAgICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIGlkLmRlcHRoKTsKLSAgICAgICAgdGhp
cy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdy
ZXNvbHZlUG9zc2libGVMYW1iZGEnKTsKLSAgICB9LAotCi0gICAgaGVscGVyU2V4cHI6IGZ1bmN0
aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7Ci0gICAgICB2YXIgcGFyYW1zID0gdGhpcy5z
ZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSksCi0gICAgICAg
ICAgbmFtZSA9IHNleHByLmlkLnBhcnRzWzBdOwotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLmtu
b3duSGVscGVyc1tuYW1lXSkgewotICAgICAgICB0aGlzLm9wY29kZSgnaW52b2tlS25vd25IZWxw
ZXInLCBwYXJhbXMubGVuZ3RoLCBuYW1lKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25z
Lmtub3duSGVscGVyc09ubHkpIHsKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiWW91IHNw
ZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgIiAr
IG5hbWUsIHNleHByKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdpbnZv
a2VIZWxwZXInLCBwYXJhbXMubGVuZ3RoLCBuYW1lLCBzZXhwci5pc1Jvb3QpOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICBzZXhwcjogZnVuY3Rpb24oc2V4cHIpIHsKLSAgICAgIHZhciB0eXBlID0g
dGhpcy5jbGFzc2lmeVNleHByKHNleHByKTsKLQotICAgICAgaWYgKHR5cGUgPT09ICJzaW1wbGUi
KSB7Ci0gICAgICAgIHRoaXMuc2ltcGxlU2V4cHIoc2V4cHIpOwotICAgICAgfSBlbHNlIGlmICh0
eXBlID09PSAiaGVscGVyIikgewotICAgICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpOwotICAgICAg
fQotICAgIH0sCi0KLSAgICBJRDogZnVuY3Rpb24oaWQpIHsKLSAgICAgIHRoaXMuYWRkRGVwdGgo
aWQuZGVwdGgpOwotICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBpZC5kZXB0aCk7Ci0K
LSAgICAgIHZhciBuYW1lID0gaWQucGFydHNbMF07Ci0gICAgICBpZiAoIW5hbWUpIHsKLSAgICAg
ICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0
aGlzLm9wY29kZSgnbG9va3VwT25Db250ZXh0JywgaWQucGFydHNbMF0pOwotICAgICAgfQotCi0g
ICAgICBmb3IodmFyIGk9MSwgbD1pZC5wYXJ0cy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAg
IHRoaXMub3Bjb2RlKCdsb29rdXAnLCBpZC5wYXJ0c1tpXSk7Ci0gICAgICB9Ci0gICAgfSwKLQot
ICAgIERBVEE6IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdHJ1
ZTsKLSAgICAgIGlmIChkYXRhLmlkLmlzU2NvcGVkIHx8IGRhdGEuaWQuZGVwdGgpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignU2NvcGVkIGRhdGEgcmVmZXJlbmNlcyBhcmUgbm90IHN1
cHBvcnRlZDogJyArIGRhdGEub3JpZ2luYWwsIGRhdGEpOwotICAgICAgfQotCi0gICAgICB0aGlz
Lm9wY29kZSgnbG9va3VwRGF0YScpOwotICAgICAgdmFyIHBhcnRzID0gZGF0YS5pZC5wYXJ0czsK
LSAgICAgIGZvcih2YXIgaT0wLCBsPXBhcnRzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAg
dGhpcy5vcGNvZGUoJ2xvb2t1cCcsIHBhcnRzW2ldKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAg
U1RSSU5HOiBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5n
Jywgc3RyaW5nLnN0cmluZyk7Ci0gICAgfSwKLQotICAgIElOVEVHRVI6IGZ1bmN0aW9uKGludGVn
ZXIpIHsKLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIGludGVnZXIuaW50ZWdlcik7
Ci0gICAgfSwKLQotICAgIEJPT0xFQU46IGZ1bmN0aW9uKGJvb2wpIHsKLSAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoTGl0ZXJhbCcsIGJvb2wuYm9vbCk7Ci0gICAgfSwKLQotICAgIGNvbW1lbnQ6IGZ1
bmN0aW9uKCkge30sCi0KLSAgICAvLyBIRUxQRVJTCi0gICAgb3Bjb2RlOiBmdW5jdGlvbihuYW1l
KSB7Ci0gICAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFtZSwgYXJnczogW10uc2xp
Y2UuY2FsbChhcmd1bWVudHMsIDEpIH0pOwotICAgIH0sCi0KLSAgICBkZWNsYXJlOiBmdW5jdGlv
bihuYW1lLCB2YWx1ZSkgewotICAgICAgdGhpcy5vcGNvZGVzLnB1c2goeyBvcGNvZGU6ICdERUNM
QVJFJywgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pOwotICAgIH0sCi0KLSAgICBhZGREZXB0
aDogZnVuY3Rpb24oZGVwdGgpIHsKLSAgICAgIGlmKGRlcHRoID09PSAwKSB7IHJldHVybjsgfQot
Ci0gICAgICBpZighdGhpcy5kZXB0aHNbZGVwdGhdKSB7Ci0gICAgICAgIHRoaXMuZGVwdGhzW2Rl
cHRoXSA9IHRydWU7Ci0gICAgICAgIHRoaXMuZGVwdGhzLmxpc3QucHVzaChkZXB0aCk7Ci0gICAg
ICB9Ci0gICAgfSwKLQotICAgIGNsYXNzaWZ5U2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7Ci0gICAg
ICB2YXIgaXNIZWxwZXIgICA9IHNleHByLmlzSGVscGVyOwotICAgICAgdmFyIGlzRWxpZ2libGUg
PSBzZXhwci5lbGlnaWJsZUhlbHBlcjsKLSAgICAgIHZhciBvcHRpb25zICAgID0gdGhpcy5vcHRp
b25zOwotCi0gICAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRo
ZSBhbWJpZ3VpdHkgbm93Ci0gICAgICBpZiAoaXNFbGlnaWJsZSAmJiAhaXNIZWxwZXIpIHsKLSAg
ICAgICAgdmFyIG5hbWUgPSBzZXhwci5pZC5wYXJ0c1swXTsKLQotICAgICAgICBpZiAob3B0aW9u
cy5rbm93bkhlbHBlcnNbbmFtZV0pIHsKLSAgICAgICAgICBpc0hlbHBlciA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7Ci0gICAgICAgICAgaXNF
bGlnaWJsZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpc0hlbHBl
cikgeyByZXR1cm4gImhlbHBlciI7IH0KLSAgICAgIGVsc2UgaWYgKGlzRWxpZ2libGUpIHsgcmV0
dXJuICJhbWJpZ3VvdXMiOyB9Ci0gICAgICBlbHNlIHsgcmV0dXJuICJzaW1wbGUiOyB9Ci0gICAg
fSwKLQotICAgIHB1c2hQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtcykgewotICAgICAgdmFyIGkgPSBw
YXJhbXMubGVuZ3RoLCBwYXJhbTsKLQotICAgICAgd2hpbGUoaS0tKSB7Ci0gICAgICAgIHBhcmFt
ID0gcGFyYW1zW2ldOwotCi0gICAgICAgIGlmKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsK
LSAgICAgICAgICBpZihwYXJhbS5kZXB0aCkgewotICAgICAgICAgICAgdGhpcy5hZGREZXB0aChw
YXJhbS5kZXB0aCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgdGhpcy5vcGNvZGUoJ2dldENv
bnRleHQnLCBwYXJhbS5kZXB0aCB8fCAwKTsKLSAgICAgICAgICB0aGlzLm9wY29kZSgncHVzaFN0
cmluZ1BhcmFtJywgcGFyYW0uc3RyaW5nTW9kZVZhbHVlLCBwYXJhbS50eXBlKTsKLQotICAgICAg
ICAgIGlmIChwYXJhbS50eXBlID09PSAnc2V4cHInKSB7Ci0gICAgICAgICAgICAvLyBTdWJleHBy
ZXNzaW9ucyBnZXQgZXZhbHVhdGVkIGFuZCBwYXNzZWQgaW4KLSAgICAgICAgICAgIC8vIGluIHN0
cmluZyBwYXJhbXMgbW9kZS4KLSAgICAgICAgICAgIHRoaXMuc2V4cHIocGFyYW0pOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzW3BhcmFtLnR5cGVdKHBhcmFt
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBzZXR1cEZ1bGxNdXN0YWNoZVBh
cmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHsKLSAgICAgIHZhciBwYXJh
bXMgPSBzZXhwci5wYXJhbXM7Ci0gICAgICB0aGlzLnB1c2hQYXJhbXMocGFyYW1zKTsKLQotICAg
ICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7Ci0gICAgICB0aGlzLm9wY29k
ZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTsKLQotICAgICAgaWYgKHNleHByLmhhc2gpIHsKLSAg
ICAgICAgdGhpcy5oYXNoKHNleHByLmhhc2gpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhp
cy5vcGNvZGUoJ2VtcHR5SGFzaCcpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gcGFyYW1zOwot
ICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYp
IHsKLSAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAm
JiBpbnB1dC5jb25zdHJ1Y3RvciAhPT0gZW52LkFTVC5Qcm9ncmFtTm9kZSkpIHsKLSAgICAgIHRo
cm93IG5ldyBFeGNlcHRpb24oIllvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBB
U1QgdG8gSGFuZGxlYmFycy5wcmVjb21waWxlLiBZb3UgcGFzc2VkICIgKyBpbnB1dCk7Ci0gICAg
fQotCi0gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gICAgaWYgKCEoJ2RhdGEnIGluIG9w
dGlvbnMpKSB7Ci0gICAgICBvcHRpb25zLmRhdGEgPSB0cnVlOwotICAgIH0KLQotICAgIHZhciBh
c3QgPSBlbnYucGFyc2UoaW5wdXQpOwotICAgIHZhciBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29t
cGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIG5ldyBlbnYuSmF2YVNj
cmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7Ci0gIH0KLQotICBf
X2V4cG9ydHNfXy5wcmVjb21waWxlID0gcHJlY29tcGlsZTtmdW5jdGlvbiBjb21waWxlKGlucHV0
LCBvcHRpb25zLCBlbnYpIHsKLSAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCAodHlwZW9mIGlucHV0
ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC5jb25zdHJ1Y3RvciAhPT0gZW52LkFTVC5Qcm9ncmFtTm9k
ZSkpIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIllvdSBtdXN0IHBhc3MgYSBzdHJpbmcg
b3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkICIgKyBp
bnB1dCk7Ci0gICAgfQotCi0gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICBpZiAo
ISgnZGF0YScgaW4gb3B0aW9ucykpIHsKLSAgICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7Ci0gICAg
fQotCi0gICAgdmFyIGNvbXBpbGVkOwotCi0gICAgZnVuY3Rpb24gY29tcGlsZUlucHV0KCkgewot
ICAgICAgdmFyIGFzdCA9IGVudi5wYXJzZShpbnB1dCk7Ci0gICAgICB2YXIgZW52aXJvbm1lbnQg
PSBuZXcgZW52LkNvbXBpbGVyKCkuY29tcGlsZShhc3QsIG9wdGlvbnMpOwotICAgICAgdmFyIHRl
bXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9u
bWVudCwgb3B0aW9ucywgdW5kZWZpbmVkLCB0cnVlKTsKLSAgICAgIHJldHVybiBlbnYudGVtcGxh
dGUodGVtcGxhdGVTcGVjKTsKLSAgICB9Ci0KLSAgICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBp
bGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuCi0gICAgcmV0dXJu
IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgIGlmICghY29tcGlsZWQpIHsKLSAg
ICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBj
b21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIG9wdGlvbnMpOwotICAgIH07Ci0gIH0KLQotICBf
X2V4cG9ydHNfXy5jb21waWxlID0gY29tcGlsZTsKLSAgcmV0dXJuIF9fZXhwb3J0c19fOwotfSko
X19tb2R1bGU1X18pOwotCi0vLyBoYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGls
ZXIuanMKLXZhciBfX21vZHVsZTExX18gPSAoZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18pIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIgX19leHBvcnRzX187Ci0gIHZh
ciBDT01QSUxFUl9SRVZJU0lPTiA9IF9fZGVwZW5kZW5jeTFfXy5DT01QSUxFUl9SRVZJU0lPTjsK
LSAgdmFyIFJFVklTSU9OX0NIQU5HRVMgPSBfX2RlcGVuZGVuY3kxX18uUkVWSVNJT05fQ0hBTkdF
UzsKLSAgdmFyIGxvZyA9IF9fZGVwZW5kZW5jeTFfXy5sb2c7Ci0gIHZhciBFeGNlcHRpb24gPSBf
X2RlcGVuZGVuY3kyX187Ci0KLSAgZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkgewotICAgIHRoaXMu
dmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9
Ci0KLSAgSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHsKLSAgICAvLyBQVUJMSUMgQVBJ
OiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIG1ldGhvZHMgaW4gYSBzdWJjbGFzcyB0byBwcm92aWRl
Ci0gICAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBi
dWZmZXJpbmcgc2VtYW50aWNzCi0gICAgbmFtZUxvb2t1cDogZnVuY3Rpb24ocGFyZW50LCBuYW1l
IC8qICwgdHlwZSovKSB7Ci0gICAgICB2YXIgd3JhcCwKLSAgICAgICAgICByZXQ7Ci0gICAgICBp
ZiAocGFyZW50LmluZGV4T2YoJ2RlcHRoJykgPT09IDApIHsKLSAgICAgICAgd3JhcCA9IHRydWU7
Ci0gICAgICB9Ci0KLSAgICAgIGlmICgvXlswLTldKyQvLnRlc3QobmFtZSkpIHsKLSAgICAgICAg
cmV0ID0gcGFyZW50ICsgIlsiICsgbmFtZSArICJdIjsKLSAgICAgIH0gZWxzZSBpZiAoSmF2YVNj
cmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUpKSB7Ci0gICAg
ICAgIHJldCA9IHBhcmVudCArICIuIiArIG5hbWU7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAg
ICAgICAgcmV0ID0gcGFyZW50ICsgIlsnIiArIG5hbWUgKyAiJ10iOwotICAgICAgfQotCi0gICAg
ICBpZiAod3JhcCkgewotICAgICAgICByZXR1cm4gJygnICsgcGFyZW50ICsgJyAmJiAnICsgcmV0
ICsgJyknOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIH0KLSAg
ICB9LAotCi0gICAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciByZXZpc2lv
biA9IENPTVBJTEVSX1JFVklTSU9OLAotICAgICAgICAgIHZlcnNpb25zID0gUkVWSVNJT05fQ0hB
TkdFU1tyZXZpc2lvbl07Ci0gICAgICByZXR1cm4gInRoaXMuY29tcGlsZXJJbmZvID0gWyIrcmV2
aXNpb24rIiwnIit2ZXJzaW9ucysiJ107XG4iOwotICAgIH0sCi0KLSAgICBhcHBlbmRUb0J1ZmZl
cjogZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBs
ZSkgewotICAgICAgICByZXR1cm4gInJldHVybiAiICsgc3RyaW5nICsgIjsiOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBhcHBlbmRUb0J1ZmZlcjogdHJ1ZSwK
LSAgICAgICAgICBjb250ZW50OiBzdHJpbmcsCi0gICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gImJ1ZmZlciArPSAiICsgc3RyaW5nICsgIjsiOyB9Ci0gICAgICAgIH07Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIGluaXRpYWxpemVCdWZmZXI6IGZ1bmN0aW9uKCkgewotICAg
ICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCIiKTsKLSAgICB9LAotCi0gICAgbmFtZXNwYWNl
OiAiSGFuZGxlYmFycyIsCi0gICAgLy8gRU5EIFBVQkxJQyBBUEkKLQotICAgIGNvbXBpbGU6IGZ1
bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkgewotICAgICAg
dGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50OwotICAgICAgdGhpcy5vcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKLQotICAgICAgbG9nKCdkZWJ1ZycsIHRoaXMuZW52aXJvbm1lbnQuZGlzYXNz
ZW1ibGUoKSArICJcblxuIik7Ci0KLSAgICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQu
bmFtZTsKLSAgICAgIHRoaXMuaXNDaGlsZCA9ICEhY29udGV4dDsKLSAgICAgIHRoaXMuY29udGV4
dCA9IGNvbnRleHQgfHwgewotICAgICAgICBwcm9ncmFtczogW10sCi0gICAgICAgIGVudmlyb25t
ZW50czogW10sCi0gICAgICAgIGFsaWFzZXM6IHsgfQotICAgICAgfTsKLQotICAgICAgdGhpcy5w
cmVhbWJsZSgpOwotCi0gICAgICB0aGlzLnN0YWNrU2xvdCA9IDA7Ci0gICAgICB0aGlzLnN0YWNr
VmFycyA9IFtdOwotICAgICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07Ci0gICAgICB0
aGlzLmhhc2hlcyA9IFtdOwotICAgICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTsKLSAgICAgIHRo
aXMuaW5saW5lU3RhY2sgPSBbXTsKLQotICAgICAgdGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJv
bm1lbnQsIG9wdGlvbnMpOwotCi0gICAgICB2YXIgb3Bjb2RlcyA9IGVudmlyb25tZW50Lm9wY29k
ZXMsIG9wY29kZTsKLQotICAgICAgdGhpcy5pID0gMDsKLQotICAgICAgZm9yKHZhciBsPW9wY29k
ZXMubGVuZ3RoOyB0aGlzLmk8bDsgdGhpcy5pKyspIHsKLSAgICAgICAgb3Bjb2RlID0gb3Bjb2Rl
c1t0aGlzLmldOwotCi0gICAgICAgIGlmKG9wY29kZS5vcGNvZGUgPT09ICdERUNMQVJFJykgewot
ICAgICAgICAgIHRoaXNbb3Bjb2RlLm5hbWVdID0gb3Bjb2RlLnZhbHVlOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFy
Z3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIHN0cmlwTmV4dCBmbGFnIGlm
IGl0IHdhcyBub3Qgc2V0IGJ5IHRoaXMgb3BlcmF0aW9uLgotICAgICAgICBpZiAob3Bjb2RlLm9w
Y29kZSAhPT0gdGhpcy5zdHJpcE5leHQpIHsKLSAgICAgICAgICB0aGlzLnN0cmlwTmV4dCA9IGZh
bHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBj
b250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy4KLSAgICAgIHRoaXMucHVzaFNvdXJjZSgnJyk7
Ci0KLSAgICAgIGlmICh0aGlzLnN0YWNrU2xvdCB8fCB0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8
fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgpIHsKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlv
bignQ29tcGlsZSBjb21wbGV0ZWQgd2l0aCBjb250ZW50IGxlZnQgb24gc3RhY2snKTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRnVuY3Rpb25Db250ZXh0KGFzT2JqZWN0KTsK
LSAgICB9LAotCi0gICAgcHJlYW1ibGU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIG91dCA9IFtd
OwotCi0gICAgICBpZiAoIXRoaXMuaXNDaGlsZCkgewotICAgICAgICB2YXIgbmFtZXNwYWNlID0g
dGhpcy5uYW1lc3BhY2U7Ci0KLSAgICAgICAgdmFyIGNvcGllcyA9ICJoZWxwZXJzID0gdGhpcy5t
ZXJnZShoZWxwZXJzLCAiICsgbmFtZXNwYWNlICsgIi5oZWxwZXJzKTsiOwotICAgICAgICBpZiAo
dGhpcy5lbnZpcm9ubWVudC51c2VQYXJ0aWFsKSB7IGNvcGllcyA9IGNvcGllcyArICIgcGFydGlh
bHMgPSB0aGlzLm1lcmdlKHBhcnRpYWxzLCAiICsgbmFtZXNwYWNlICsgIi5wYXJ0aWFscyk7Ijsg
fQotICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGEpIHsgY29waWVzID0gY29waWVzICsgIiBk
YXRhID0gZGF0YSB8fCB7fTsiOyB9Ci0gICAgICAgIG91dC5wdXNoKGNvcGllcyk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBvdXQucHVzaCgnJyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhp
cy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgewotICAgICAgICBvdXQucHVzaCgiLCBidWZmZXIgPSAi
ICsgdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3V0
LnB1c2goIiIpOwotICAgICAgfQotCi0gICAgICAvLyB0cmFjayB0aGUgbGFzdCBjb250ZXh0IHB1
c2hlZCBpbnRvIHBsYWNlIHRvIGFsbG93IHNraXBwaW5nIHRoZQotICAgICAgLy8gZ2V0Q29udGV4
dCBvcGNvZGUgd2hlbiBpdCB3b3VsZCBiZSBhIG5vb3AKLSAgICAgIHRoaXMubGFzdENvbnRleHQg
PSAwOwotICAgICAgdGhpcy5zb3VyY2UgPSBvdXQ7Ci0gICAgfSwKLQotICAgIGNyZWF0ZUZ1bmN0
aW9uQ29udGV4dDogZnVuY3Rpb24oYXNPYmplY3QpIHsKLSAgICAgIHZhciBsb2NhbHMgPSB0aGlz
LnN0YWNrVmFycy5jb25jYXQodGhpcy5yZWdpc3RlcnMubGlzdCk7Ci0KLSAgICAgIGlmKGxvY2Fs
cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIHRoaXMuc291cmNlWzFdID0gdGhpcy5zb3VyY2VbMV0g
KyAiLCAiICsgbG9jYWxzLmpvaW4oIiwgIik7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdlbmVyYXRl
IG1pbmltaXplciBhbGlhcyBtYXBwaW5ncwotICAgICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHsKLSAg
ICAgICAgZm9yICh2YXIgYWxpYXMgaW4gdGhpcy5jb250ZXh0LmFsaWFzZXMpIHsKLSAgICAgICAg
ICBpZiAodGhpcy5jb250ZXh0LmFsaWFzZXMuaGFzT3duUHJvcGVydHkoYWxpYXMpKSB7Ci0gICAg
ICAgICAgICB0aGlzLnNvdXJjZVsxXSA9IHRoaXMuc291cmNlWzFdICsgJywgJyArIGFsaWFzICsg
Jz0nICsgdGhpcy5jb250ZXh0LmFsaWFzZXNbYWxpYXNdOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5zb3VyY2VbMV0pIHsKLSAgICAgICAgdGhpcy5z
b3VyY2VbMV0gPSAidmFyICIgKyB0aGlzLnNvdXJjZVsxXS5zdWJzdHJpbmcoMikgKyAiOyI7Ci0g
ICAgICB9Ci0KLSAgICAgIC8vIE1lcmdlIGNoaWxkcmVuCi0gICAgICBpZiAoIXRoaXMuaXNDaGls
ZCkgewotICAgICAgICB0aGlzLnNvdXJjZVsxXSArPSAnXG4nICsgdGhpcy5jb250ZXh0LnByb2dy
YW1zLmpvaW4oJ1xuJykgKyAnXG4nOwotICAgICAgfQotCi0gICAgICBpZiAoIXRoaXMuZW52aXJv
bm1lbnQuaXNTaW1wbGUpIHsKLSAgICAgICAgdGhpcy5wdXNoU291cmNlKCJyZXR1cm4gYnVmZmVy
OyIpOwotICAgICAgfQotCi0gICAgICB2YXIgcGFyYW1zID0gdGhpcy5pc0NoaWxkID8gWyJkZXB0
aDAiLCAiZGF0YSJdIDogWyJIYW5kbGViYXJzIiwgImRlcHRoMCIsICJoZWxwZXJzIiwgInBhcnRp
YWxzIiwgImRhdGEiXTsKLQotICAgICAgZm9yKHZhciBpPTAsIGw9dGhpcy5lbnZpcm9ubWVudC5k
ZXB0aHMubGlzdC5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgIHBhcmFtcy5wdXNoKCJkZXB0
aCIgKyB0aGlzLmVudmlyb25tZW50LmRlcHRocy5saXN0W2ldKTsKLSAgICAgIH0KLQotICAgICAg
Ly8gUGVyZm9ybSBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIG91dHB1dCB0byBtZXJnZSBjb250ZW50
IHdoZW4gcG9zc2libGUKLSAgICAgIHZhciBzb3VyY2UgPSB0aGlzLm1lcmdlU291cmNlKCk7Ci0K
LSAgICAgIGlmICghdGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIHNvdXJjZSA9IHRoaXMuY29tcGls
ZXJJbmZvKCkrc291cmNlOwotICAgICAgfQotCi0gICAgICBpZiAoYXNPYmplY3QpIHsKLSAgICAg
ICAgcGFyYW1zLnB1c2goc291cmNlKTsKLQotICAgICAgICByZXR1cm4gRnVuY3Rpb24uYXBwbHko
dGhpcywgcGFyYW1zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBmdW5jdGlvblNvdXJj
ZSA9ICdmdW5jdGlvbiAnICsgKHRoaXMubmFtZSB8fCAnJykgKyAnKCcgKyBwYXJhbXMuam9pbign
LCcpICsgJykge1xuICAnICsgc291cmNlICsgJ30nOwotICAgICAgICBsb2coJ2RlYnVnJywgZnVu
Y3Rpb25Tb3VyY2UgKyAiXG5cbiIpOwotICAgICAgICByZXR1cm4gZnVuY3Rpb25Tb3VyY2U7Ci0g
ICAgICB9Ci0gICAgfSwKLSAgICBtZXJnZVNvdXJjZTogZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBX
QVJOOiBXZSBhcmUgbm90IGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIGJ1ZmZlciBpcyBzdGlsbCBw
b3B1bGF0ZWQgYXMgdGhlIHNvdXJjZSBzaG91bGQKLSAgICAgIC8vIG5vdCBoYXZlIGJ1ZmZlciBh
cHBlbmQgb3BlcmF0aW9ucyBhcyB0aGVpciBmaW5hbCBhY3Rpb24uCi0gICAgICB2YXIgc291cmNl
ID0gJycsCi0gICAgICAgICAgYnVmZmVyOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRo
aXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhp
cy5zb3VyY2VbaV07Ci0gICAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7Ci0gICAgICAg
ICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyICsgJ1xuICAgICsg
JyArIGxpbmUuY29udGVudDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnVmZmVy
ID0gbGluZS5jb250ZW50OwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gJ2J1ZmZlciArPSAnICsgYnVm
ZmVyICsgJztcbiAgJzsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHVuZGVmaW5lZDsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgc291cmNlICs9IGxpbmUgKyAnXG4gICc7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIHJldHVybiBzb3VyY2U7Ci0gICAgfSwKLQotICAgIC8vIFtibG9ja1ZhbHVlXQot
ICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwg
dmFsdWUKLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJldHVybiB2YWx1ZSBvZiBibG9ja0hlbHBl
ck1pc3NpbmcKLSAgICAvLwotICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRv
IHRha2UgYSBibG9jayBvZiB0aGUgZm9ybQotICAgIC8vIGB7eyNmb299fS4uLnt7L2Zvb319YCwg
cmVzb2x2ZSB0aGUgdmFsdWUgb2YgYGZvb2AsIGFuZAotICAgIC8vIHJlcGxhY2UgaXQgb24gdGhl
IHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseQotICAgIC8vIGludm9raW5nIGJsb2Nr
SGVscGVyTWlzc2luZy4KLSAgICBibG9ja1ZhbHVlOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMu
Y29udGV4dC5hbGlhc2VzLmJsb2NrSGVscGVyTWlzc2luZyA9ICdoZWxwZXJzLmJsb2NrSGVscGVy
TWlzc2luZyc7Ci0KLSAgICAgIHZhciBwYXJhbXMgPSBbImRlcHRoMCJdOwotICAgICAgdGhpcy5z
ZXR1cFBhcmFtcygwLCBwYXJhbXMpOwotCi0gICAgICB0aGlzLnJlcGxhY2VTdGFjayhmdW5jdGlv
bihjdXJyZW50KSB7Ci0gICAgICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgY3VycmVudCk7Ci0gICAg
ICAgIHJldHVybiAiYmxvY2tIZWxwZXJNaXNzaW5nLmNhbGwoIiArIHBhcmFtcy5qb2luKCIsICIp
ICsgIikiOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFthbWJpZ3VvdXNCbG9ja1ZhbHVl
XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3Jh
bSwgdmFsdWUKLSAgICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVscGVyPXZhbHVl
IG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnkKLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlm
IG5vIGxhc3RIZWxwZXI6IHNhbWUgYXMgW2Jsb2NrVmFsdWVdCi0gICAgLy8gT24gc3RhY2ssIGFm
dGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZQotICAgIGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0
aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuYmxvY2tIZWxwZXJNaXNzaW5nID0g
J2hlbHBlcnMuYmxvY2tIZWxwZXJNaXNzaW5nJzsKLQotICAgICAgdmFyIHBhcmFtcyA9IFsiZGVw
dGgwIl07Ci0gICAgICB0aGlzLnNldHVwUGFyYW1zKDAsIHBhcmFtcyk7Ci0KLSAgICAgIHZhciBj
dXJyZW50ID0gdGhpcy50b3BTdGFjaygpOwotICAgICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJy
ZW50KTsKLQotICAgICAgdGhpcy5wdXNoU291cmNlKCJpZiAoISIgKyB0aGlzLmxhc3RIZWxwZXIg
KyAiKSB7ICIgKyBjdXJyZW50ICsgIiA9IGJsb2NrSGVscGVyTWlzc2luZy5jYWxsKCIgKyBwYXJh
bXMuam9pbigiLCAiKSArICIpOyB9Iik7Ci0gICAgfSwKLQotICAgIC8vIFthcHBlbmRDb250ZW50
XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ss
IGFmdGVyOiAuLi4KLSAgICAvLwotICAgIC8vIEFwcGVuZHMgdGhlIHN0cmluZyB2YWx1ZSBvZiBg
Y29udGVudGAgdG8gdGhlIGN1cnJlbnQgYnVmZmVyCi0gICAgYXBwZW5kQ29udGVudDogZnVuY3Rp
b24oY29udGVudCkgewotICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHsKLSAgICAgICAg
Y29udGVudCA9IHRoaXMucGVuZGluZ0NvbnRlbnQgKyBjb250ZW50OwotICAgICAgfQotICAgICAg
aWYgKHRoaXMuc3RyaXBOZXh0KSB7Ci0gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uo
L15ccysvLCAnJyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSBjb250
ZW50OwotICAgIH0sCi0KLSAgICAvLyBbc3RyaXBdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywg
YmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgotICAgIC8vCi0gICAgLy8g
UmVtb3ZlcyBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSBwcmlvciBjb250ZW50IG5v
ZGUgYW5kIGZsYWdzCi0gICAgLy8gdGhlIG5leHQgb3BlcmF0aW9uIGZvciBzdHJpcHBpbmcgaWYg
aXQgaXMgYSBjb250ZW50IG5vZGUuCi0gICAgc3RyaXA6IGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KHRoaXMucGVuZGluZ0NvbnRlbnQpIHsKLSAgICAgICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IHRo
aXMucGVuZGluZ0NvbnRlbnQucmVwbGFjZSgvXHMrJC8sICcnKTsKLSAgICAgIH0KLSAgICAgIHRo
aXMuc3RyaXBOZXh0ID0gJ3N0cmlwJzsKLSAgICB9LAotCi0gICAgLy8gW2FwcGVuZF0KLSAgICAv
LwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4KLSAgICAvLyBPbiBzdGFjaywg
YWZ0ZXI6IC4uLgotICAgIC8vCi0gICAgLy8gQ29lcmNlcyBgdmFsdWVgIHRvIGEgU3RyaW5nIGFu
ZCBhcHBlbmRzIGl0IHRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KLSAgICAvLwotICAgIC8vIElmIGB2
YWx1ZWAgaXMgdHJ1dGh5LCBvciAwLCBpdCBpcyBjb2VyY2VkIGludG8gYSBzdHJpbmcgYW5kIGFw
cGVuZGVkCi0gICAgLy8gT3RoZXJ3aXNlLCB0aGUgZW1wdHkgc3RyaW5nIGlzIGFwcGVuZGVkCi0g
ICAgYXBwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgIC8vIEZvcmNlIGFueXRoaW5nIHRoYXQgaXMg
aW5saW5lZCBvbnRvIHRoZSBzdGFjayBzbyB3ZSBkb24ndCBoYXZlIGR1cGxpY2F0aW9uCi0gICAg
ICAvLyB3aGVuIHdlIGV4YW1pbmUgbG9jYWwKLSAgICAgIHRoaXMuZmx1c2hJbmxpbmUoKTsKLSAg
ICAgIHZhciBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTsKLSAgICAgIHRoaXMucHVzaFNvdXJjZSgi
aWYoIiArIGxvY2FsICsgIiB8fCAiICsgbG9jYWwgKyAiID09PSAwKSB7ICIgKyB0aGlzLmFwcGVu
ZFRvQnVmZmVyKGxvY2FsKSArICIgfSIpOwotICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNT
aW1wbGUpIHsKLSAgICAgICAgdGhpcy5wdXNoU291cmNlKCJlbHNlIHsgIiArIHRoaXMuYXBwZW5k
VG9CdWZmZXIoIicnIikgKyAiIH0iKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2FwcGVu
ZEVzY2FwZWRdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uCi0g
ICAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4KLSAgICAvLwotICAgIC8vIEVzY2FwZSBgdmFsdWVg
IGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlcgotICAgIGFwcGVuZEVzY2FwZWQ6IGZ1bmN0aW9u
KCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuZXNjYXBlRXhwcmVzc2lvbiA9ICd0aGlz
LmVzY2FwZUV4cHJlc3Npb24nOwotCi0gICAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRU
b0J1ZmZlcigiZXNjYXBlRXhwcmVzc2lvbigiICsgdGhpcy5wb3BTdGFjaygpICsgIikiKSk7Ci0g
ICAgfSwKLQotICAgIC8vIFtnZXRDb250ZXh0XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJl
Zm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4KLSAgICAvLyBDb21waWxlciB2
YWx1ZSwgYWZ0ZXI6IGxhc3RDb250ZXh0PWRlcHRoCi0gICAgLy8KLSAgICAvLyBTZXQgdGhlIHZh
bHVlIG9mIHRoZSBgbGFzdENvbnRleHRgIGNvbXBpbGVyIHZhbHVlIHRvIHRoZSBkZXB0aAotICAg
IGdldENvbnRleHQ6IGZ1bmN0aW9uKGRlcHRoKSB7Ci0gICAgICBpZih0aGlzLmxhc3RDb250ZXh0
ICE9PSBkZXB0aCkgewotICAgICAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7Ci0gICAgICB9
Ci0gICAgfSwKLQotICAgIC8vIFtsb29rdXBPbkNvbnRleHRdCi0gICAgLy8KLSAgICAvLyBPbiBz
dGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0
W25hbWVdLCAuLi4KLSAgICAvLwotICAgIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAg
b24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzCi0gICAgLy8gaXQgb250byB0aGUgc3Rh
Y2suCi0gICAgbG9va3VwT25Db250ZXh0OiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB0aGlzLnB1
c2godGhpcy5uYW1lTG9va3VwKCdkZXB0aCcgKyB0aGlzLmxhc3RDb250ZXh0LCBuYW1lLCAnY29u
dGV4dCcpKTsKLSAgICB9LAotCi0gICAgLy8gW3B1c2hDb250ZXh0XQotICAgIC8vCi0gICAgLy8g
T24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29u
dGV4dCwgLi4uCi0gICAgLy8KLSAgICAvLyBQdXNoZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50
IGNvbnRleHQgb250byB0aGUgc3RhY2suCi0gICAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkZXB0aCcgKyB0aGlzLmxhc3RDb250ZXh0KTsK
LSAgICB9LAotCi0gICAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV0KLSAgICAvLwotICAgIC8v
IE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJl
c29sdmVkIHZhbHVlLCAuLi4KLSAgICAvLwotICAgIC8vIElmIHRoZSBgdmFsdWVgIGlzIGEgbGFt
YmRhLCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBieQotICAgIC8vIHRoZSByZXR1cm4gdmFsdWUg
b2YgdGhlIGxhbWJkYQotICAgIHJlc29sdmVQb3NzaWJsZUxhbWJkYTogZnVuY3Rpb24oKSB7Ci0g
ICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5mdW5jdGlvblR5cGUgPSAnImZ1bmN0aW9uIic7Ci0K
LSAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGZ1bmN0aW9uKGN1cnJlbnQpIHsKLSAgICAgICAgcmV0
dXJuICJ0eXBlb2YgIiArIGN1cnJlbnQgKyAiID09PSBmdW5jdGlvblR5cGUgPyAiICsgY3VycmVu
dCArICIuYXBwbHkoZGVwdGgwKSA6ICIgKyBjdXJyZW50OwotICAgICAgfSk7Ci0gICAgfSwKLQot
ICAgIC8vIFtsb29rdXBdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwg
Li4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZVtuYW1lXSwgLi4uCi0gICAgLy8KLSAg
ICAvLyBSZXBsYWNlIHRoZSB2YWx1ZSBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIGxv
b2tpbmcKLSAgICAvLyB1cCBgbmFtZWAgb24gYHZhbHVlYAotICAgIGxvb2t1cDogZnVuY3Rpb24o
bmFtZSkgewotICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24oY3VycmVudCkgewotICAg
ICAgICByZXR1cm4gY3VycmVudCArICIgPT0gbnVsbCB8fCAiICsgY3VycmVudCArICIgPT09IGZh
bHNlID8gIiArIGN1cnJlbnQgKyAiIDogIiArIHRoaXMubmFtZUxvb2t1cChjdXJyZW50LCBuYW1l
LCAnY29udGV4dCcpOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFtsb29rdXBEYXRhXQot
ICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFm
dGVyOiBkYXRhLCAuLi4KLSAgICAvLwotICAgIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJh
dG9yCi0gICAgbG9va3VwRGF0YTogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xp
dGVyYWwoJ2RhdGEnKTsKLSAgICB9LAotCi0gICAgLy8gW3B1c2hTdHJpbmdQYXJhbV0KLSAgICAv
LwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjog
c3RyaW5nLCBjdXJyZW50Q29udGV4dCwgLi4uCi0gICAgLy8KLSAgICAvLyBUaGlzIG9wY29kZSBp
cyBkZXNpZ25lZCBmb3IgdXNlIGluIHN0cmluZyBtb2RlLCB3aGljaAotICAgIC8vIHByb3ZpZGVz
IHRoZSBzdHJpbmcgdmFsdWUgb2YgYSBwYXJhbWV0ZXIgYWxvbmcgd2l0aCBpdHMKLSAgICAvLyBk
ZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuCi0gICAgcHVzaFN0cmlu
Z1BhcmFtOiBmdW5jdGlvbihzdHJpbmcsIHR5cGUpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0
ZXJhbCgnZGVwdGgnICsgdGhpcy5sYXN0Q29udGV4dCk7Ci0KLSAgICAgIHRoaXMucHVzaFN0cmlu
Zyh0eXBlKTsKLQotICAgICAgLy8gSWYgaXQncyBhIHN1YmV4cHJlc3Npb24sIHRoZSBzdHJpbmcg
cmVzdWx0Ci0gICAgICAvLyB3aWxsIGJlIHB1c2hlZCBhZnRlciB0aGlzIG9wY29kZS4KLSAgICAg
IGlmICh0eXBlICE9PSAnc2V4cHInKSB7Ci0gICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAn
c3RyaW5nJykgewotICAgICAgICAgIHRoaXMucHVzaFN0cmluZyhzdHJpbmcpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGVtcHR5SGFzaDogZnVuY3Rpb24oKSB7Ci0gICAg
ICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ3t9Jyk7Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMu
c3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgIHRoaXMucHVzaCgne30nKTsgLy8gaGFzaENvbnRleHRz
Ci0gICAgICAgIHRoaXMucHVzaCgne30nKTsgLy8gaGFzaFR5cGVzCi0gICAgICB9Ci0gICAgfSwK
LSAgICBwdXNoSGFzaDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5oYXNoKSB7Ci0gICAg
ICAgIHRoaXMuaGFzaGVzLnB1c2godGhpcy5oYXNoKTsKLSAgICAgIH0KLSAgICAgIHRoaXMuaGFz
aCA9IHt2YWx1ZXM6IFtdLCB0eXBlczogW10sIGNvbnRleHRzOiBbXX07Ci0gICAgfSwKLSAgICBw
b3BIYXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoOwotICAgICAg
dGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMu
c3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgIHRoaXMucHVzaCgneycgKyBoYXNoLmNvbnRleHRzLmpv
aW4oJywnKSArICd9Jyk7Ci0gICAgICAgIHRoaXMucHVzaCgneycgKyBoYXNoLnR5cGVzLmpvaW4o
JywnKSArICd9Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMucHVzaCgne1xuICAgICcgKyBoYXNo
LnZhbHVlcy5qb2luKCcsXG4gICAgJykgKyAnXG4gIH0nKTsKLSAgICB9LAotCi0gICAgLy8gW3B1
c2hTdHJpbmddCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBP
biBzdGFjaywgYWZ0ZXI6IHF1b3RlZFN0cmluZyhzdHJpbmcpLCAuLi4KLSAgICAvLwotICAgIC8v
IFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFjawotICAgIHB1
c2hTdHJpbmc6IGZ1bmN0aW9uKHN0cmluZykgewotICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFs
KHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaF0KLSAg
ICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRl
cjogZXhwciwgLi4uCi0gICAgLy8KLSAgICAvLyBQdXNoIGFuIGV4cHJlc3Npb24gb250byB0aGUg
c3RhY2sKLSAgICBwdXNoOiBmdW5jdGlvbihleHByKSB7Ci0gICAgICB0aGlzLmlubGluZVN0YWNr
LnB1c2goZXhwcik7Ci0gICAgICByZXR1cm4gZXhwcjsKLSAgICB9LAotCi0gICAgLy8gW3B1c2hM
aXRlcmFsXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24g
c3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uCi0gICAgLy8KLSAgICAvLyBQdXNoZXMgYSB2YWx1ZSBv
bnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24gcHJldmVudHMKLSAgICAvLyB0aGUgY29tcGls
ZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkCi0gICAgLy8gaXQu
Ci0gICAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFj
a0xpdGVyYWwodmFsdWUpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaFByb2dyYW1dCi0gICAgLy8K
LSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHBy
b2dyYW0oZ3VpZCksIC4uLgotICAgIC8vCi0gICAgLy8gUHVzaCBhIHByb2dyYW0gZXhwcmVzc2lv
biBvbnRvIHRoZSBzdGFjay4gVGhpcyB0YWtlcwotICAgIC8vIGEgY29tcGlsZS10aW1lIGd1aWQg
YW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGUKLSAgICAvLyBleHByZXNz
aW9uLgotICAgIHB1c2hQcm9ncmFtOiBmdW5jdGlvbihndWlkKSB7Ci0gICAgICBpZiAoZ3VpZCAh
PSBudWxsKSB7Ci0gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHBy
ZXNzaW9uKGd1aWQpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0
ZXJhbChudWxsKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2ludm9rZUhlbHBlcl0KLSAg
ICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBh
cmFtcy4uLiwgLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGlu
dm9jYXRpb24KLSAgICAvLwotICAgIC8vIFBvcHMgb2ZmIHRoZSBoZWxwZXIncyBwYXJhbWV0ZXJz
LCBpbnZva2VzIHRoZSBoZWxwZXIsCi0gICAgLy8gYW5kIHB1c2hlcyB0aGUgaGVscGVyJ3MgcmV0
dXJuIHZhbHVlIG9udG8gdGhlIHN0YWNrLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIGhlbHBlciBp
cyBub3QgZm91bmQsIGBoZWxwZXJNaXNzaW5nYCBpcyBjYWxsZWQuCi0gICAgaW52b2tlSGVscGVy
OiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUsIGlzUm9vdCkgewotICAgICAgdGhpcy5jb250ZXh0
LmFsaWFzZXMuaGVscGVyTWlzc2luZyA9ICdoZWxwZXJzLmhlbHBlck1pc3NpbmcnOwotICAgICAg
dGhpcy51c2VSZWdpc3RlcignaGVscGVyJyk7Ci0KLSAgICAgIHZhciBoZWxwZXIgPSB0aGlzLmxh
c3RIZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSwgdHJ1ZSk7Ci0gICAg
ICB2YXIgbm9uSGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdkZXB0aCcgKyB0aGlzLmxhc3RDb250
ZXh0LCBuYW1lLCAnY29udGV4dCcpOwotCi0gICAgICB2YXIgbG9va3VwID0gJ2hlbHBlciA9ICcg
KyBoZWxwZXIubmFtZSArICcgfHwgJyArIG5vbkhlbHBlcjsKLSAgICAgIGlmIChoZWxwZXIucGFy
YW1zSW5pdCkgewotICAgICAgICBsb29rdXAgKz0gJywnICsgaGVscGVyLnBhcmFtc0luaXQ7Ci0g
ICAgICB9Ci0KLSAgICAgIHRoaXMucHVzaCgKLSAgICAgICAgJygnCi0gICAgICAgICAgKyBsb29r
dXAKLSAgICAgICAgICArICcsaGVscGVyICcKLSAgICAgICAgICAgICsgJz8gaGVscGVyLmNhbGwo
JyArIGhlbHBlci5jYWxsUGFyYW1zICsgJykgJwotICAgICAgICAgICAgKyAnOiBoZWxwZXJNaXNz
aW5nLmNhbGwoJyArIGhlbHBlci5oZWxwZXJNaXNzaW5nUGFyYW1zICsgJykpJyk7Ci0KLSAgICAg
IC8vIEFsd2F5cyBmbHVzaCBzdWJleHByZXNzaW9ucy4gVGhpcyBpcyBib3RoIHRvIHByZXZlbnQg
dGhlIGNvbXBvdW5kaW5nIHNpemUgaXNzdWUgdGhhdAotICAgICAgLy8gb2NjdXJzIHdoZW4gdGhl
IGNvZGUgaGFzIHRvIGJlIGR1cGxpY2F0ZWQgZm9yIGlubGluaW5nIGFuZCBhbHNvIHRvIHByZXZl
bnQgZXJyb3JzCi0gICAgICAvLyBkdWUgdG8gdGhlIGluY29ycmVjdCBvcHRpb25zIG9iamVjdCBi
ZWluZyBwYXNzZWQgZHVlIHRvIHRoZSBzaGFyZWQgcmVnaXN0ZXIuCi0gICAgICBpZiAoIWlzUm9v
dCkgewotICAgICAgICB0aGlzLmZsdXNoSW5saW5lKCk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IC8vIFtpbnZva2VLbm93bkhlbHBlcl0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6
IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uCi0gICAgLy8gT24gc3RhY2ss
IGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGludm9jYXRpb24KLSAgICAvLwotICAgIC8vIFRoaXMg
b3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LAotICAg
IC8vIHNvIGEgYGhlbHBlck1pc3NpbmdgIGZhbGxiYWNrIGlzIG5vdCByZXF1aXJlZC4KLSAgICBp
bnZva2VLbm93bkhlbHBlcjogZnVuY3Rpb24ocGFyYW1TaXplLCBuYW1lKSB7Ci0gICAgICB2YXIg
aGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpOwotICAgICAgdGhpcy5w
dXNoKGhlbHBlci5uYW1lICsgIi5jYWxsKCIgKyBoZWxwZXIuY2FsbFBhcmFtcyArICIpIik7Ci0g
ICAgfSwKLQotICAgIC8vIFtpbnZva2VBbWJpZ3VvdXNdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFj
aywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLgotICAgIC8v
IE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGRpc2FtYmlndWF0aW9uCi0gICAgLy8KLSAgICAv
LyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319
YAotICAgIC8vIGlzIHByb3ZpZGVkLCBidXQgd2UgZG9uJ3Qga25vdyBhdCBjb21waWxlLXRpbWUg
d2hldGhlciBpdAotICAgIC8vIGlzIGEgaGVscGVyIG9yIGEgcGF0aC4KLSAgICAvLwotICAgIC8v
IFRoaXMgb3BlcmF0aW9uIGVtaXRzIG1vcmUgY29kZSB0aGFuIHRoZSBvdGhlciBvcHRpb25zLAot
ICAgIC8vIGFuZCBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBh
bmQKLSAgICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLgotICAg
IGludm9rZUFtYmlndW91czogZnVuY3Rpb24obmFtZSwgaGVscGVyQ2FsbCkgewotICAgICAgdGhp
cy5jb250ZXh0LmFsaWFzZXMuZnVuY3Rpb25UeXBlID0gJyJmdW5jdGlvbiInOwotICAgICAgdGhp
cy51c2VSZWdpc3RlcignaGVscGVyJyk7Ci0KLSAgICAgIHRoaXMuZW1wdHlIYXNoKCk7Ci0gICAg
ICB2YXIgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxsKTsKLQot
ICAgICAgdmFyIGhlbHBlck5hbWUgPSB0aGlzLmxhc3RIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAo
J2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyk7Ci0KLSAgICAgIHZhciBub25IZWxwZXIgPSB0aGlz
Lm5hbWVMb29rdXAoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRleHQsIG5hbWUsICdjb250ZXh0Jyk7
Ci0gICAgICB2YXIgbmV4dFN0YWNrID0gdGhpcy5uZXh0U3RhY2soKTsKLQotICAgICAgaWYgKGhl
bHBlci5wYXJhbXNJbml0KSB7Ci0gICAgICAgIHRoaXMucHVzaFNvdXJjZShoZWxwZXIucGFyYW1z
SW5pdCk7Ci0gICAgICB9Ci0gICAgICB0aGlzLnB1c2hTb3VyY2UoJ2lmIChoZWxwZXIgPSAnICsg
aGVscGVyTmFtZSArICcpIHsgJyArIG5leHRTdGFjayArICcgPSBoZWxwZXIuY2FsbCgnICsgaGVs
cGVyLmNhbGxQYXJhbXMgKyAnKTsgfScpOwotICAgICAgdGhpcy5wdXNoU291cmNlKCdlbHNlIHsg
aGVscGVyID0gJyArIG5vbkhlbHBlciArICc7ICcgKyBuZXh0U3RhY2sgKyAnID0gdHlwZW9mIGhl
bHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoJyArIGhlbHBlci5jYWxsUGFyYW1z
ICsgJykgOiBoZWxwZXI7IH0nKTsKLSAgICB9LAotCi0gICAgLy8gW2ludm9rZVBhcnRpYWxdCi0g
ICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiBjb250ZXh0LCAuLi4KLSAgICAvLyBPbiBz
dGFjayBhZnRlcjogcmVzdWx0IG9mIHBhcnRpYWwgaW52b2NhdGlvbgotICAgIC8vCi0gICAgLy8g
VGhpcyBvcGVyYXRpb24gcG9wcyBvZmYgYSBjb250ZXh0LCBpbnZva2VzIGEgcGFydGlhbCB3aXRo
IHRoYXQgY29udGV4dCwKLSAgICAvLyBhbmQgcHVzaGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9j
YXRpb24gYmFjay4KLSAgICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB2
YXIgcGFyYW1zID0gW3RoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcp
LCAiJyIgKyBuYW1lICsgIiciLCB0aGlzLnBvcFN0YWNrKCksICJoZWxwZXJzIiwgInBhcnRpYWxz
Il07Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGF0YSkgewotICAgICAgICBwYXJhbXMucHVz
aCgiZGF0YSIpOwotICAgICAgfQotCi0gICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5zZWxmID0g
InRoaXMiOwotICAgICAgdGhpcy5wdXNoKCJzZWxmLmludm9rZVBhcnRpYWwoIiArIHBhcmFtcy5q
b2luKCIsICIpICsgIikiKTsKLSAgICB9LAotCi0gICAgLy8gW2Fzc2lnblRvSGFzaF0KLSAgICAv
LwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCBoYXNoLCAuLi4KLSAgICAvLyBPbiBz
dGFjaywgYWZ0ZXI6IGhhc2gsIC4uLgotICAgIC8vCi0gICAgLy8gUG9wcyBhIHZhbHVlIGFuZCBo
YXNoIG9mZiB0aGUgc3RhY2ssIGFzc2lnbnMgYGhhc2hba2V5XSA9IHZhbHVlYAotICAgIC8vIGFu
ZCBwdXNoZXMgdGhlIGhhc2ggYmFjayBvbnRvIHRoZSBzdGFjay4KLSAgICBhc3NpZ25Ub0hhc2g6
IGZ1bmN0aW9uKGtleSkgewotICAgICAgdmFyIHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLAotICAg
ICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgdHlwZTsKLQotICAgICAgaWYgKHRoaXMub3B0aW9u
cy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgdHlwZSA9IHRoaXMucG9wU3RhY2soKTsKLSAgICAg
ICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTsKLSAgICAgIH0KLQotICAgICAgdmFyIGhhc2gg
PSB0aGlzLmhhc2g7Ci0gICAgICBpZiAoY29udGV4dCkgewotICAgICAgICBoYXNoLmNvbnRleHRz
LnB1c2goIiciICsga2V5ICsgIic6ICIgKyBjb250ZXh0KTsKLSAgICAgIH0KLSAgICAgIGlmICh0
eXBlKSB7Ci0gICAgICAgIGhhc2gudHlwZXMucHVzaCgiJyIgKyBrZXkgKyAiJzogIiArIHR5cGUp
OwotICAgICAgfQotICAgICAgaGFzaC52YWx1ZXMucHVzaCgiJyIgKyBrZXkgKyAiJzogKCIgKyB2
YWx1ZSArICIpIik7Ci0gICAgfSwKLQotICAgIC8vIEhFTFBFUlMKLQotICAgIGNvbXBpbGVyOiBK
YXZhU2NyaXB0Q29tcGlsZXIsCi0KLSAgICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmly
b25tZW50LCBvcHRpb25zKSB7Ci0gICAgICB2YXIgY2hpbGRyZW4gPSBlbnZpcm9ubWVudC5jaGls
ZHJlbiwgY2hpbGQsIGNvbXBpbGVyOwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1jaGlsZHJlbi5s
ZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07Ci0gICAgICAg
IGNvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKTsKLQotICAgICAgICB2YXIgaW5kZXggPSB0
aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTsKLQotICAgICAgICBpZiAoaW5kZXggPT0g
bnVsbCkgewotICAgICAgICAgIHRoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKCcnKTsgICAgIC8v
IFBsYWNlaG9sZGVyIHRvIHByZXZlbnQgbmFtZSBjb25mbGljdHMgZm9yIG5lc3RlZCBjaGlsZHJl
bgotICAgICAgICAgIGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDsKLSAgICAg
ICAgICBjaGlsZC5pbmRleCA9IGluZGV4OwotICAgICAgICAgIGNoaWxkLm5hbWUgPSAncHJvZ3Jh
bScgKyBpbmRleDsKLSAgICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29t
cGlsZXIuY29tcGlsZShjaGlsZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0KTsKLSAgICAgICAgICB0
aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2luZGV4XSA9IGNoaWxkOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIGNoaWxkLmluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgY2hpbGQubmFtZSA9
ICdwcm9ncmFtJyArIGluZGV4OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICBtYXRj
aEV4aXN0aW5nUHJvZ3JhbTogZnVuY3Rpb24oY2hpbGQpIHsKLSAgICAgIGZvciAodmFyIGkgPSAw
LCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIHZhciBlbnZpcm9ubWVudCA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaV07
Ci0gICAgICAgIGlmIChlbnZpcm9ubWVudCAmJiBlbnZpcm9ubWVudC5lcXVhbHMoY2hpbGQpKSB7
Ci0gICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotCi0gICAg
cHJvZ3JhbUV4cHJlc3Npb246IGZ1bmN0aW9uKGd1aWQpIHsKLSAgICAgIHRoaXMuY29udGV4dC5h
bGlhc2VzLnNlbGYgPSAidGhpcyI7Ci0KLSAgICAgIGlmKGd1aWQgPT0gbnVsbCkgewotICAgICAg
ICByZXR1cm4gInNlbGYubm9vcCI7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjaGlsZCA9IHRoaXMu
ZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sCi0gICAgICAgICAgZGVwdGhzID0gY2hpbGQuZGVw
dGhzLmxpc3QsIGRlcHRoOwotCi0gICAgICB2YXIgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRl
eCwgY2hpbGQubmFtZSwgImRhdGEiXTsKLQotICAgICAgZm9yKHZhciBpPTAsIGwgPSBkZXB0aHMu
bGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBkZXB0aCA9IGRlcHRoc1tpXTsKLQotICAgICAg
ICBpZihkZXB0aCA9PT0gMSkgeyBwcm9ncmFtUGFyYW1zLnB1c2goImRlcHRoMCIpOyB9Ci0gICAg
ICAgIGVsc2UgeyBwcm9ncmFtUGFyYW1zLnB1c2goImRlcHRoIiArIChkZXB0aCAtIDEpKTsgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gKGRlcHRocy5sZW5ndGggPT09IDAgPyAic2VsZi5wcm9n
cmFtKCIgOiAic2VsZi5wcm9ncmFtV2l0aERlcHRoKCIpICsgcHJvZ3JhbVBhcmFtcy5qb2luKCIs
ICIpICsgIikiOwotICAgIH0sCi0KLSAgICByZWdpc3RlcjogZnVuY3Rpb24obmFtZSwgdmFsKSB7
Ci0gICAgICB0aGlzLnVzZVJlZ2lzdGVyKG5hbWUpOwotICAgICAgdGhpcy5wdXNoU291cmNlKG5h
bWUgKyAiID0gIiArIHZhbCArICI7Iik7Ci0gICAgfSwKLQotICAgIHVzZVJlZ2lzdGVyOiBmdW5j
dGlvbihuYW1lKSB7Ci0gICAgICBpZighdGhpcy5yZWdpc3RlcnNbbmFtZV0pIHsKLSAgICAgICAg
dGhpcy5yZWdpc3RlcnNbbmFtZV0gPSB0cnVlOwotICAgICAgICB0aGlzLnJlZ2lzdGVycy5saXN0
LnB1c2gobmFtZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHB1c2hTdGFja0xpdGVyYWw6IGZ1
bmN0aW9uKGl0ZW0pIHsKLSAgICAgIHJldHVybiB0aGlzLnB1c2gobmV3IExpdGVyYWwoaXRlbSkp
OwotICAgIH0sCi0KLSAgICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHsKLSAgICAgIGlm
ICh0aGlzLnBlbmRpbmdDb250ZW50KSB7Ci0gICAgICAgIHRoaXMuc291cmNlLnB1c2godGhpcy5h
cHBlbmRUb0J1ZmZlcih0aGlzLnF1b3RlZFN0cmluZyh0aGlzLnBlbmRpbmdDb250ZW50KSkpOwot
ICAgICAgICB0aGlzLnBlbmRpbmdDb250ZW50ID0gdW5kZWZpbmVkOwotICAgICAgfQotCi0gICAg
ICBpZiAoc291cmNlKSB7Ci0gICAgICAgIHRoaXMuc291cmNlLnB1c2goc291cmNlKTsKLSAgICAg
IH0KLSAgICB9LAotCi0gICAgcHVzaFN0YWNrOiBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICB0aGlz
LmZsdXNoSW5saW5lKCk7Ci0KLSAgICAgIHZhciBzdGFjayA9IHRoaXMuaW5jclN0YWNrKCk7Ci0g
ICAgICBpZiAoaXRlbSkgewotICAgICAgICB0aGlzLnB1c2hTb3VyY2Uoc3RhY2sgKyAiID0gIiAr
IGl0ZW0gKyAiOyIpOwotICAgICAgfQotICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFj
ayk7Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAgfSwKLQotICAgIHJlcGxhY2VTdGFjazogZnVu
Y3Rpb24oY2FsbGJhY2spIHsKLSAgICAgIHZhciBwcmVmaXggPSAnJywKLSAgICAgICAgICBpbmxp
bmUgPSB0aGlzLmlzSW5saW5lKCksCi0gICAgICAgICAgc3RhY2ssCi0gICAgICAgICAgY3JlYXRl
ZFN0YWNrLAotICAgICAgICAgIHVzZWRMaXRlcmFsOwotCi0gICAgICAvLyBJZiB3ZSBhcmUgY3Vy
cmVudGx5IGlubGluZSB0aGVuIHdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQg
aW50byB0aGUKLSAgICAgIC8vIHJlcGxhY2VtZW50IHN0YXRlbWVudCB2aWEgJywnCi0gICAgICBp
ZiAoaW5saW5lKSB7Ci0gICAgICAgIHZhciB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpOwotCi0g
ICAgICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7Ci0gICAgICAgICAgLy8gTGl0ZXJh
bHMgZG8gbm90IG5lZWQgdG8gYmUgaW5saW5lZAotICAgICAgICAgIHN0YWNrID0gdG9wLnZhbHVl
OwotICAgICAgICAgIHVzZWRMaXRlcmFsID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0
aGUgaW5saW5lCi0gICAgICAgICAgY3JlYXRlZFN0YWNrID0gIXRoaXMuc3RhY2tTbG90OwotICAg
ICAgICAgIHZhciBuYW1lID0gIWNyZWF0ZWRTdGFjayA/IHRoaXMudG9wU3RhY2tOYW1lKCkgOiB0
aGlzLmluY3JTdGFjaygpOwotCi0gICAgICAgICAgcHJlZml4ID0gJygnICsgdGhpcy5wdXNoKG5h
bWUpICsgJyA9ICcgKyB0b3AgKyAnKSwnOwotICAgICAgICAgIHN0YWNrID0gdGhpcy50b3BTdGFj
aygpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdGFjayA9IHRoaXMudG9w
U3RhY2soKTsKLSAgICAgIH0KLQotICAgICAgdmFyIGl0ZW0gPSBjYWxsYmFjay5jYWxsKHRoaXMs
IHN0YWNrKTsKLQotICAgICAgaWYgKGlubGluZSkgewotICAgICAgICBpZiAoIXVzZWRMaXRlcmFs
KSB7Ci0gICAgICAgICAgdGhpcy5wb3BTdGFjaygpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChj
cmVhdGVkU3RhY2spIHsKLSAgICAgICAgICB0aGlzLnN0YWNrU2xvdC0tOwotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMucHVzaCgnKCcgKyBwcmVmaXggKyBpdGVtICsgJyknKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZXh0IGRlcHRo
IHZhcmlhYmxlLiBUaHJvdWdoIHJlcGxhY2VTdGFjawotICAgICAgICBpZiAoIS9ec3RhY2svLnRl
c3Qoc3RhY2spKSB7Ci0gICAgICAgICAgc3RhY2sgPSB0aGlzLm5leHRTdGFjaygpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5wdXNoU291cmNlKHN0YWNrICsgIiA9ICgiICsgcHJlZml4ICsg
aXRlbSArICIpOyIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH0sCi0KLSAg
ICBuZXh0U3RhY2s6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCk7
Ci0gICAgfSwKLQotICAgIGluY3JTdGFjazogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0YWNr
U2xvdCsrOwotICAgICAgaWYodGhpcy5zdGFja1Nsb3QgPiB0aGlzLnN0YWNrVmFycy5sZW5ndGgp
IHsgdGhpcy5zdGFja1ZhcnMucHVzaCgic3RhY2siICsgdGhpcy5zdGFja1Nsb3QpOyB9Ci0gICAg
ICByZXR1cm4gdGhpcy50b3BTdGFja05hbWUoKTsKLSAgICB9LAotICAgIHRvcFN0YWNrTmFtZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gInN0YWNrIiArIHRoaXMuc3RhY2tTbG90OwotICAg
IH0sCi0gICAgZmx1c2hJbmxpbmU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGlubGluZVN0YWNr
ID0gdGhpcy5pbmxpbmVTdGFjazsKLSAgICAgIGlmIChpbmxpbmVTdGFjay5sZW5ndGgpIHsKLSAg
ICAgICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVu
ID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICB2YXIgZW50
cnkgPSBpbmxpbmVTdGFja1tpXTsKLSAgICAgICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRl
cmFsKSB7Ci0gICAgICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTsKLSAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2soZW50cnkpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgaXNJbmxpbmU6IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoOwotICAgIH0sCi0KLSAg
ICBwb3BTdGFjazogZnVuY3Rpb24od3JhcHBlZCkgewotICAgICAgdmFyIGlubGluZSA9IHRoaXMu
aXNJbmxpbmUoKSwKLSAgICAgICAgICBpdGVtID0gKGlubGluZSA/IHRoaXMuaW5saW5lU3RhY2sg
OiB0aGlzLmNvbXBpbGVTdGFjaykucG9wKCk7Ci0KLSAgICAgIGlmICghd3JhcHBlZCAmJiAoaXRl
bSBpbnN0YW5jZW9mIExpdGVyYWwpKSB7Ci0gICAgICAgIHJldHVybiBpdGVtLnZhbHVlOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFpbmxpbmUpIHsKLSAgICAgICAgICBpZiAoIXRoaXMu
c3RhY2tTbG90KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0
YWNrIHBvcCcpOwotICAgICAgICAgIH0KLSAgICAgICAgICB0aGlzLnN0YWNrU2xvdC0tOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBpdGVtOwotICAgICAgfQotICAgIH0sCi0KLSAgICB0b3BT
dGFjazogZnVuY3Rpb24od3JhcHBlZCkgewotICAgICAgdmFyIHN0YWNrID0gKHRoaXMuaXNJbmxp
bmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayksCi0gICAgICAgICAg
aXRlbSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwotCi0gICAgICBpZiAoIXdyYXBwZWQgJiYg
KGl0ZW0gaW5zdGFuY2VvZiBMaXRlcmFsKSkgewotICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBpdGVtOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikgewotICAgICAgcmV0dXJuICciJyArIHN0
cgotICAgICAgICAucmVwbGFjZSgvXFwvZywgJ1xcXFwnKQotICAgICAgICAucmVwbGFjZSgvIi9n
LCAnXFwiJykKLSAgICAgICAgLnJlcGxhY2UoL1xuL2csICdcXG4nKQotICAgICAgICAucmVwbGFj
ZSgvXHIvZywgJ1xccicpCi0gICAgICAgIC5yZXBsYWNlKC9cdTIwMjgvZywgJ1xcdTIwMjgnKSAg
IC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNAotICAgICAgICAucmVwbGFjZSgvXHUyMDI5L2cs
ICdcXHUyMDI5JykgKyAnIic7Ci0gICAgfSwKLQotICAgIHNldHVwSGVscGVyOiBmdW5jdGlvbihw
YXJhbVNpemUsIG5hbWUsIG1pc3NpbmdQYXJhbXMpIHsKLSAgICAgIHZhciBwYXJhbXMgPSBbXSwK
LSAgICAgICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cFBhcmFtcyhwYXJhbVNpemUsIHBhcmFt
cywgbWlzc2luZ1BhcmFtcyk7Ci0gICAgICB2YXIgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29r
dXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyk7Ci0KLSAgICAgIHJldHVybiB7Ci0gICAgICAg
IHBhcmFtczogcGFyYW1zLAotICAgICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LAotICAgICAg
ICBuYW1lOiBmb3VuZEhlbHBlciwKLSAgICAgICAgY2FsbFBhcmFtczogWyJkZXB0aDAiXS5jb25j
YXQocGFyYW1zKS5qb2luKCIsICIpLAotICAgICAgICBoZWxwZXJNaXNzaW5nUGFyYW1zOiBtaXNz
aW5nUGFyYW1zICYmIFsiZGVwdGgwIiwgdGhpcy5xdW90ZWRTdHJpbmcobmFtZSldLmNvbmNhdChw
YXJhbXMpLmpvaW4oIiwgIikKLSAgICAgIH07Ci0gICAgfSwKLQotICAgIHNldHVwT3B0aW9uczog
ZnVuY3Rpb24ocGFyYW1TaXplLCBwYXJhbXMpIHsKLSAgICAgIHZhciBvcHRpb25zID0gW10sIGNv
bnRleHRzID0gW10sIHR5cGVzID0gW10sIHBhcmFtLCBpbnZlcnNlLCBwcm9ncmFtOwotCi0gICAg
ICBvcHRpb25zLnB1c2goImhhc2g6IiArIHRoaXMucG9wU3RhY2soKSk7Ci0KLSAgICAgIGlmICh0
aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgIG9wdGlvbnMucHVzaCgiaGFzaFR5
cGVzOiIgKyB0aGlzLnBvcFN0YWNrKCkpOwotICAgICAgICBvcHRpb25zLnB1c2goImhhc2hDb250
ZXh0czoiICsgdGhpcy5wb3BTdGFjaygpKTsKLSAgICAgIH0KLQotICAgICAgaW52ZXJzZSA9IHRo
aXMucG9wU3RhY2soKTsKLSAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7Ci0KLSAgICAg
IC8vIEF2b2lkIHNldHRpbmcgZm4gYW5kIGludmVyc2UgaWYgbmVpdGhlciBhcmUgc2V0LiBUaGlz
IGFsbG93cwotICAgICAgLy8gaGVscGVycyB0byBkbyBhIGNoZWNrIGZvciBgaWYgKG9wdGlvbnMu
Zm4pYAotICAgICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkgewotICAgICAgICBpZiAoIXByb2dy
YW0pIHsKLSAgICAgICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5zZWxmID0gInRoaXMiOwotICAg
ICAgICAgIHByb2dyYW0gPSAic2VsZi5ub29wIjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
aW52ZXJzZSkgewotICAgICAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhpcyI7
Ci0gICAgICAgICAgaW52ZXJzZSA9ICJzZWxmLm5vb3AiOwotICAgICAgICB9Ci0KLSAgICAgICAg
b3B0aW9ucy5wdXNoKCJpbnZlcnNlOiIgKyBpbnZlcnNlKTsKLSAgICAgICAgb3B0aW9ucy5wdXNo
KCJmbjoiICsgcHJvZ3JhbSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvcih2YXIgaT0wOyBpPHBhcmFt
U2l6ZTsgaSsrKSB7Ci0gICAgICAgIHBhcmFtID0gdGhpcy5wb3BTdGFjaygpOwotICAgICAgICBw
YXJhbXMucHVzaChwYXJhbSk7Ci0KLSAgICAgICAgaWYodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFt
cykgewotICAgICAgICAgIHR5cGVzLnB1c2godGhpcy5wb3BTdGFjaygpKTsKLSAgICAgICAgICBj
b250ZXh0cy5wdXNoKHRoaXMucG9wU3RhY2soKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgb3B0aW9ucy5wdXNo
KCJjb250ZXh0czpbIiArIGNvbnRleHRzLmpvaW4oIiwiKSArICJdIik7Ci0gICAgICAgIG9wdGlv
bnMucHVzaCgidHlwZXM6WyIgKyB0eXBlcy5qb2luKCIsIikgKyAiXSIpOwotICAgICAgfQotCi0g
ICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YSkgewotICAgICAgICBvcHRpb25zLnB1c2goImRhdGE6
ZGF0YSIpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9LAotCi0gICAg
Ly8gdGhlIHBhcmFtcyBhbmQgY29udGV4dHMgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYXJyYXlz
Ci0gICAgLy8gdG8gZmlsbCBpbgotICAgIHNldHVwUGFyYW1zOiBmdW5jdGlvbihwYXJhbVNpemUs
IHBhcmFtcywgdXNlUmVnaXN0ZXIpIHsKLSAgICAgIHZhciBvcHRpb25zID0gJ3snICsgdGhpcy5z
ZXR1cE9wdGlvbnMocGFyYW1TaXplLCBwYXJhbXMpLmpvaW4oJywnKSArICd9JzsKLQotICAgICAg
aWYgKHVzZVJlZ2lzdGVyKSB7Ci0gICAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTsK
LSAgICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTsKLSAgICAgICAgcmV0dXJuICdvcHRpb25z
PScgKyBvcHRpb25zOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFyYW1zLnB1c2gob3B0aW9u
cyk7Ci0gICAgICAgIHJldHVybiAnJzsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgdmFyIHJl
c2VydmVkV29yZHMgPSAoCi0gICAgImJyZWFrIGVsc2UgbmV3IHZhciIgKwotICAgICIgY2FzZSBm
aW5hbGx5IHJldHVybiB2b2lkIiArCi0gICAgIiBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlIiArCi0g
ICAgIiBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgiICsKLSAgICAiIGRlZmF1bHQgaWYgdGhy
b3ciICsKLSAgICAiIGRlbGV0ZSBpbiB0cnkiICsKLSAgICAiIGRvIGluc3RhbmNlb2YgdHlwZW9m
IiArCi0gICAgIiBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCIgKwotICAgICIgYm9vbGVhbiBleHBv
cnQgaW50ZXJmYWNlIHN0YXRpYyIgKwotICAgICIgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXIiICsK
LSAgICAiIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCIgKwotICAgICIgY2xhc3MgZmxv
YXQgcGFja2FnZSB0aHJvd3MiICsKLSAgICAiIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQi
ICsKLSAgICAiIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlIiArCi0gICAg
IiBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQiCi0gICkuc3BsaXQoIiAiKTsKLQotICB2
YXIgY29tcGlsZXJXb3JkcyA9IEphdmFTY3JpcHRDb21waWxlci5SRVNFUlZFRF9XT1JEUyA9IHt9
OwotCi0gIGZvcih2YXIgaT0wLCBsPXJlc2VydmVkV29yZHMubGVuZ3RoOyBpPGw7IGkrKykgewot
ICAgIGNvbXBpbGVyV29yZHNbcmVzZXJ2ZWRXb3Jkc1tpXV0gPSB0cnVlOwotICB9Ci0KLSAgSmF2
YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lID0gZnVuY3Rpb24o
bmFtZSkgewotICAgIGlmKCFKYXZhU2NyaXB0Q29tcGlsZXIuUkVTRVJWRURfV09SRFNbbmFtZV0g
JiYgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpKSB7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIF9fZXhwb3J0c19f
ID0gSmF2YVNjcmlwdENvbXBpbGVyOwotICByZXR1cm4gX19leHBvcnRzX187Ci19KShfX21vZHVs
ZTJfXywgX19tb2R1bGU1X18pOwotCi0vLyBoYW5kbGViYXJzLmpzCi12YXIgX19tb2R1bGUwX18g
PSAoZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18pIHsKLSAgInVzZSBzdHJpY3Qi
OwotICB2YXIgX19leHBvcnRzX187Ci0gIC8qZ2xvYmFscyBIYW5kbGViYXJzOiB0cnVlICovCi0g
IHZhciBIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5MV9fOwotCi0gIC8vIENvbXBpbGVyIGltcG9y
dHMKLSAgdmFyIEFTVCA9IF9fZGVwZW5kZW5jeTJfXzsKLSAgdmFyIFBhcnNlciA9IF9fZGVwZW5k
ZW5jeTNfXy5wYXJzZXI7Ci0gIHZhciBwYXJzZSA9IF9fZGVwZW5kZW5jeTNfXy5wYXJzZTsKLSAg
dmFyIENvbXBpbGVyID0gX19kZXBlbmRlbmN5NF9fLkNvbXBpbGVyOwotICB2YXIgY29tcGlsZSA9
IF9fZGVwZW5kZW5jeTRfXy5jb21waWxlOwotICB2YXIgcHJlY29tcGlsZSA9IF9fZGVwZW5kZW5j
eTRfXy5wcmVjb21waWxlOwotICB2YXIgSmF2YVNjcmlwdENvbXBpbGVyID0gX19kZXBlbmRlbmN5
NV9fOwotCi0gIHZhciBfY3JlYXRlID0gSGFuZGxlYmFycy5jcmVhdGU7Ci0gIHZhciBjcmVhdGUg
PSBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGIgPSBfY3JlYXRlKCk7Ci0KLSAgICBoYi5jb21waWxl
ID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBjb21waWxlKGlucHV0
LCBvcHRpb25zLCBoYik7Ci0gICAgfTsKLSAgICBoYi5wcmVjb21waWxlID0gZnVuY3Rpb24gKGlu
cHV0LCBvcHRpb25zKSB7Ci0gICAgICByZXR1cm4gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywg
aGIpOwotICAgIH07Ci0KLSAgICBoYi5BU1QgPSBBU1Q7Ci0gICAgaGIuQ29tcGlsZXIgPSBDb21w
aWxlcjsKLSAgICBoYi5KYXZhU2NyaXB0Q29tcGlsZXIgPSBKYXZhU2NyaXB0Q29tcGlsZXI7Ci0g
ICAgaGIuUGFyc2VyID0gUGFyc2VyOwotICAgIGhiLnBhcnNlID0gcGFyc2U7Ci0KLSAgICByZXR1
cm4gaGI7Ci0gIH07Ci0KLSAgSGFuZGxlYmFycyA9IGNyZWF0ZSgpOwotICBIYW5kbGViYXJzLmNy
ZWF0ZSA9IGNyZWF0ZTsKLQotICBfX2V4cG9ydHNfXyA9IEhhbmRsZWJhcnM7Ci0gIHJldHVybiBf
X2V4cG9ydHNfXzsKLX0pKF9fbW9kdWxlMV9fLCBfX21vZHVsZTdfXywgX19tb2R1bGU4X18sIF9f
bW9kdWxlMTBfXywgX19tb2R1bGUxMV9fKTsKLQotICByZXR1cm4gX19tb2R1bGUwX187Ci19KSgp
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvanF1ZXJ5Lm1pbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjIvanMvanF1ZXJ5Lm1pbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjFmOGVhNWJjOTBjYWIzYmJjYjU0ODdkY2ZkMDBhN2JjMjAyZmY3ZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YyL2pzL2pxdWVyeS5taW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSwz
MTc4ICswLDAgQEAKLS8qISBqUXVlcnkgdjEuOS4xIHwgKGMpIDIwMDUsIDIwMTIgalF1ZXJ5IEZv
dW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKLS8vQCBzb3VyY2VNYXBwaW5nVVJM
PWpxdWVyeS5taW4ubWFwCi0qLwotKGZ1bmN0aW9uKGUsIHQpIHsKLSAgICB2YXIgbiwgciwgaSA9
IHR5cGVvZiB0LCBvID0gZS5kb2N1bWVudCwgYSA9IGUubG9jYXRpb24sIHMgPSBlLmpRdWVyeSwg
dSA9IGUuJCwgbCA9IHt9LCBjID0gW10sIHAgPSAiMS45LjEiLCBmID0gYy5jb25jYXQsIGQgPSBj
LnB1c2gsIGggPSBjLnNsaWNlLCBnID0gYy5pbmRleE9mLCBtID0gbC50b1N0cmluZywgeSA9IGwu
aGFzT3duUHJvcGVydHksIHYgPSBwLnRyaW0sIGIgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAg
IHJldHVybiBuZXcgYi5mbi5pbml0KGUsIHQsIHIpCi0gICAgfSwgeCA9IC9bKy1dPyg/OlxkKlwu
fClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLCB3ID0gL1xTKy9nLCBUID0gL15bXHNcdUZF
RkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCBOID0gL14oPzooPFtcd1xXXSs+KVtePl0qfCMo
W1x3LV0qKSkkLywgQyA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sIGsgPSAvXltcXSw6
e31cc10qJC8sIEUgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLCBTID0gL1xcKD86WyJcXFwvYmZu
cnRdfHVbXGRhLWZBLUZdezR9KS9nLCBBID0gLyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxs
fC0/KD86XGQrXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpL2csIGogPSAvXi1tcy0vLCBEID0gLy0o
W1xkYS16XSkvZ2ksIEwgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIHJldHVybiB0LnRvVXBw
ZXJDYXNlKCkKLSAgICB9LCBIID0gZnVuY3Rpb24oZSkgewotICAgICAgICAoby5hZGRFdmVudExp
c3RlbmVyIHx8ICJsb2FkIiA9PT0gZS50eXBlIHx8ICJjb21wbGV0ZSIgPT09IG8ucmVhZHlTdGF0
ZSkgJiYgKHEoKSwgYi5yZWFkeSgpKQotICAgIH0sIHEgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
by5hZGRFdmVudExpc3RlbmVyID8gKG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExv
YWRlZCIsIEgsICExKSwgZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgSCwgITEpKSA6IChv
LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBIKSwgZS5kZXRhY2hFdmVudCgib25s
b2FkIiwgSCkpCi0gICAgfTsKLSAgICBiLmZuID0gYi5wcm90b3R5cGUgPSB7Ci0gICAgICAgIGpx
dWVyeTogcCwKLSAgICAgICAgY29uc3RydWN0b3I6IGIsCi0gICAgICAgIGluaXQ6IGZ1bmN0aW9u
KGUsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpLCBhOwotICAgICAgICAgICAgaWYgKCFlKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgaWYgKCJzdHJpbmciID09
IHR5cGVvZiBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPSAiPCIgPT09IGUuY2hhckF0KDAp
ICYmICI+IiA9PT0gZS5jaGFyQXQoZS5sZW5ndGgtMSkgJiYgZS5sZW5ndGggPj0gMyA/IFtudWxs
LCBlLCBudWxsXSA6IE4uZXhlYyhlKSwgIWkgfHwhaVsxXSAmJiBuKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIW4gfHwgbi5qcXVlcnkgPyAobiB8fCByKS5maW5kKGUpIDogdGhpcy5jb25z
dHJ1Y3RvcihuKS5maW5kKGUpOwotICAgICAgICAgICAgICAgIGlmIChpWzFdKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChuID0gbiBpbnN0YW5jZW9mIGIgPyBuWzBdIDogbiwgYi5tZXJnZSh0
aGlzLCBiLnBhcnNlSFRNTChpWzFdLCBuICYmIG4ubm9kZVR5cGUgPyBuLm93bmVyRG9jdW1lbnQg
fHwgbiA6IG8sICEwKQotICAgICAgICAgICAgICAgICAgICAgICAgKSwgQy50ZXN0KGlbMV0pICYm
IGIuaXNQbGFpbk9iamVjdChuKSlmb3IgKGkgaW4gbikKLSAgICAgICAgICAgICAgICAgICAgICAg
IGIuaXNGdW5jdGlvbih0aGlzW2ldKSA/IHRoaXNbaV0obltpXSkgOiB0aGlzLmF0dHIoaSwgbltp
XSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChhID0gby5nZXRFbGVtZW50QnlJZChpWzJdKSwgYSAmJiBhLnBh
cmVudE5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGEuaWQgIT09IGlbMl0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gci5maW5kKGUpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmxlbmd0aCA9IDEsIHRoaXNbMF0gPSBhCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQgPSBvLCB0aGlzLnNlbGVjdG9yID0gZSwgdGhp
cwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGUubm9kZVR5cGUgPyAodGhpcy5j
b250ZXh0ID0gdGhpc1swXSA9IGUsIHRoaXMubGVuZ3RoID0gMSwgdGhpcykgOiBiLmlzRnVuY3Rp
b24oZSkgPyByLnJlYWR5KGUpIDogKGUuc2VsZWN0b3IgIT09IHQgJiYgKHRoaXMuc2VsZWN0b3Ig
PSBlLnNlbGVjdG9yLCB0aGlzLmNvbnRleHQgPSBlLmNvbnRleHQpLCBiLm1ha2VBcnJheShlLCB0
aGlzKSkKLSAgICAgICAgfSwKLSAgICAgICAgc2VsZWN0b3I6ICIiLAotICAgICAgICBsZW5ndGg6
IDAsCi0gICAgICAgIHNpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bGVuZ3RoCi0gICAgICAgIH0sCi0gICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgcmV0dXJuIGguY2FsbCh0aGlzKQotICAgICAgICB9LAotICAgICAgICBnZXQ6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsID09IGUgPyB0aGlzLnRvQXJyYXkoKSA6
IDAgPiBlID8gdGhpc1t0aGlzLmxlbmd0aCArIGVdIDogdGhpc1tlXQotICAgICAgICB9LAotICAg
ICAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0ID0gYi5tZXJn
ZSh0aGlzLmNvbnN0cnVjdG9yKCksIGUpOwotICAgICAgICAgICAgcmV0dXJuIHQucHJldk9iamVj
dCA9IHRoaXMsIHQuY29udGV4dCA9IHRoaXMuY29udGV4dCwgdAotICAgICAgICB9LAotICAgICAg
ICBlYWNoOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5lYWNoKHRoaXMs
IGUsIHQpCi0gICAgICAgIH0sCi0gICAgICAgIHJlYWR5OiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gYi5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSwgdGhpcwotICAgICAgICB9LAot
ICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKQotICAgICAgICB9LAotICAgICAgICBmaXJz
dDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lcSgwKQotICAgICAgICB9
LAotICAgICAgICBsYXN0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVx
KC0xKQotICAgICAgICB9LAotICAgICAgICBlcTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
dmFyIHQgPSB0aGlzLmxlbmd0aCwgbiA9KyBlICsgKDAgPiBlID8gdCA6IDApOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4gPj0gMCAmJiB0ID4gbiA/IFt0aGlzW25dXSA6IFtd
KQotICAgICAgICB9LAotICAgICAgICBtYXA6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjayhiLm1hcCh0aGlzLCBmdW5jdGlvbih0LCBuKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGUuY2FsbCh0LCBuLCB0KQotICAgICAgICAgICAgfSkpCi0gICAgICAg
IH0sCi0gICAgICAgIGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5w
cmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCkKLSAgICAgICAgfSwKLSAgICAgICAg
cHVzaDogZCwKLSAgICAgICAgc29ydDogW10uc29ydCwKLSAgICAgICAgc3BsaWNlOiBbXS5zcGxp
Y2UKLSAgICB9LCBiLmZuLmluaXQucHJvdG90eXBlID0gYi5mbiwgYi5leHRlbmQgPSBiLmZuLmV4
dGVuZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZSwgbiwgciwgaSwgbywgYSwgcyA9IGFy
Z3VtZW50c1swXSB8fCB7fSwgdSA9IDEsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBjPSExOwotICAg
ICAgICBmb3IgKCJib29sZWFuIiA9PSB0eXBlb2YgcyAmJiAoYyA9IHMsIHMgPSBhcmd1bWVudHNb
MV0gfHwge30sIHUgPSAyKSwgIm9iamVjdCIgPT0gdHlwZW9mIHMgfHwgYi5pc0Z1bmN0aW9uKHMp
IHx8IChzID0ge30pLCBsID09PSB1ICYmIChzID0gdGhpcywgLS11KTsKLSAgICAgICAgbCA+IHU7
Ci0gICAgICAgIHUrKylpZiAobnVsbCAhPSAobyA9IGFyZ3VtZW50c1t1XSkpCi0gICAgICAgICAg
ICBmb3IgKGkgaW4gbykKLSAgICAgICAgICAgICAgICBlID0gc1tpXSwgciA9IG9baV0sIHMgIT09
IHIgJiYgKGMgJiYgciAmJiAoYi5pc1BsYWluT2JqZWN0KHIpIHx8IChuID0gYi5pc0FycmF5KHIp
KSkgPyAobiA/IChuPSExLCBhID0gZSAmJiBiLmlzQXJyYXkoZSkgPyBlIDogW10pIDogYSA9IGUg
JiYgYi5pc1BsYWluT2JqZWN0KGUpID8gZSA6IHt9LCBzW2ldID0gYi5leHRlbmQoYywgYSwgcikp
IDogciAhPT0gdCAmJiAoc1tpXSA9IHIpKTsKLSAgICAgICAgcmV0dXJuIHMKLSAgICB9LCBiLmV4
dGVuZCh7Ci0gICAgICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgIHJl
dHVybiBlLiQgPT09IGIgJiYgKGUuJCA9IHUpLCB0ICYmIGUualF1ZXJ5ID09PSBiICYmIChlLmpR
dWVyeSA9IHMpLCBiCi0gICAgICAgIH0sCi0gICAgICAgIGlzUmVhZHk6ICExLAotICAgICAgICBy
ZWFkeVdhaXQ6IDEsCi0gICAgICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgZSA/IGIucmVhZHlXYWl0KysgOiBiLnJlYWR5KCEwKQotICAgICAgICB9LAotICAgICAgICBy
ZWFkeTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgaWYgKGU9PT0hMD8hLS1iLnJlYWR5V2Fp
dCA6ICFiLmlzUmVhZHkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW8uYm9keSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoYi5yZWFkeSk7Ci0gICAgICAgICAgICAgICAg
Yi5pc1JlYWR5PSEwLCBlIT09ITAmJi0tYi5yZWFkeVdhaXQgPiAwIHx8IChuLnJlc29sdmVXaXRo
KG8sIFtiXSksIGIuZm4udHJpZ2dlciAmJiBiKG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFk
eSIpKQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBpc0Z1bmN0aW9uOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gImZ1bmN0aW9uIiA9PT0gYi50eXBlKGUpCi0g
ICAgICAgIH0sCi0gICAgICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgcmV0dXJuICJhcnJheSIgPT09IGIudHlwZShlKQotICAgICAgICB9LAot
ICAgICAgICBpc1dpbmRvdzogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGwg
IT0gZSAmJiBlID09IGUud2luZG93Ci0gICAgICAgIH0sCi0gICAgICAgIGlzTnVtZXJpYzogZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KGUpKSAmJiBp
c0Zpbml0ZShlKQotICAgICAgICB9LAotICAgICAgICB0eXBlOiBmdW5jdGlvbihlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbCA9PSBlID8gZSArICIiIDogIm9iamVjdCIgPT0gdHlwZW9mIGUg
fHwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgZSA/IGxbbS5jYWxsKGUpXSB8fCAib2JqZWN0IiA6IHR5
cGVvZiBlCi0gICAgICAgIH0sCi0gICAgICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgIGlmICghZSB8fCAib2JqZWN0IiAhPT0gYi50eXBlKGUpIHx8IGUubm9kZVR5
cGUgfHwgYi5pc1dpbmRvdyhlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gITE7Ci0gICAgICAg
ICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUs
ICJjb25zdHJ1Y3RvciIpJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90
b3R5cGVPZiIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gITEKLSAgICAgICAgICAgIH0g
Y2F0Y2ggKG4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gITEKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHZhciByOwotICAgICAgICAgICAgZm9yIChyIGluIGUpOwotICAgICAgICAgICAg
cmV0dXJuIHIgPT09IHQgfHwgeS5jYWxsKGUsIHIpCi0gICAgICAgIH0sCi0gICAgICAgIGlzRW1w
dHlPYmplY3Q6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0OwotICAgICAgICAgICAg
Zm9yICh0IGluIGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICExOwotICAgICAgICAgICAgcmV0
dXJuICEwCi0gICAgICAgIH0sCi0gICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICB0aHJvdyBFcnJvcihlKQotICAgICAgICB9LAotICAgICAgICBwYXJzZUhUTUw6IGZ1bmN0
aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIGlmICghZSB8fCAic3RyaW5nIiAhPSB0eXBlb2Yg
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICJib29sZWFuIiA9
PSB0eXBlb2YgdCAmJiAobiA9IHQsIHQ9ITEpLCB0ID0gdCB8fCBvOwotICAgICAgICAgICAgdmFy
IHIgPSBDLmV4ZWMoZSksIGk9IW4gJiYgW107Ci0gICAgICAgICAgICByZXR1cm4gciA/IFt0LmNy
ZWF0ZUVsZW1lbnQoclsxXSldIDogKHIgPSBiLmJ1aWxkRnJhZ21lbnQoW2VdLCB0LCBpKSwgaSAm
JiBiKGkpLnJlbW92ZSgpLCBiLm1lcmdlKFtdLCByLmNoaWxkTm9kZXMpKQotICAgICAgICB9LAot
ICAgICAgICBwYXJzZUpTT046IGZ1bmN0aW9uKG4pIHsKLSAgICAgICAgICAgIHJldHVybiBlLkpT
T04gJiYgZS5KU09OLnBhcnNlID8gZS5KU09OLnBhcnNlKG4pIDogbnVsbCA9PT0gbiA/IG4gOiAi
c3RyaW5nIiA9PSB0eXBlb2YgbiAmJiAobiA9IGIudHJpbShuKSwgbiAmJiBrLnRlc3Qobi5yZXBs
YWNlKFMsICJAIikucmVwbGFjZShBLCAiXSIpLnJlcGxhY2UoRSwgIiIpKSkgPyBGdW5jdGlvbigi
cmV0dXJuICIgKyBuKSgpIDogKGIuZXJyb3IoIkludmFsaWQgSlNPTjogIiArIG4pLCB0KQotICAg
ICAgICB9LAotICAgICAgICBwYXJzZVhNTDogZnVuY3Rpb24obikgewotICAgICAgICAgICAgdmFy
IHIsIGk7Ci0gICAgICAgICAgICBpZiAoIW4gfHwgInN0cmluZyIgIT0gdHlwZW9mIG4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgIGUuRE9NUGFyc2VyID8gKGkgPSBuZXcgRE9NUGFyc2VyLCByID0gaS5wYXJzZUZyb21TdHJp
bmcobiwgInRleHQveG1sIikpIDogKHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhN
TERPTSIpLCByLmFzeW5jID0gImZhbHNlIiwgci5sb2FkWE1MKG4pKQotICAgICAgICAgICAgfSBj
YXRjaCAobykgewotICAgICAgICAgICAgICAgIHIgPSB0Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gciAmJiByLmRvY3VtZW50RWxlbWVudCYmIXIuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoInBhcnNlcmVycm9yIikubGVuZ3RoIHx8IGIuZXJyb3IoIkludmFsaWQgWE1MOiAiICsgbiks
IHIKLSAgICAgICAgfSwKLSAgICAgICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKLSAgICAgICAgZ2xv
YmFsRXZhbDogZnVuY3Rpb24odCkgewotICAgICAgICAgICAgdCAmJiBiLnRyaW0odCkgJiYgKGUu
ZXhlY1NjcmlwdCB8fCBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgZS5ldmFsLmNhbGwo
ZSwgdCkKLSAgICAgICAgICAgIH0pKHQpCi0gICAgICAgIH0sCi0gICAgICAgIGNhbWVsQ2FzZTog
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGUucmVwbGFjZShqLCAibXMtIikucmVw
bGFjZShELCBMKQotICAgICAgICB9LAotICAgICAgICBub2RlTmFtZTogZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgcmV0dXJuIGUubm9kZU5hbWUgJiYgZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSB0LnRvTG93ZXJDYXNlKCkKLSAgICAgICAgfSwKLSAgICAgICAgZWFjaDogZnVuY3Rp
b24oZSwgdCwgbikgewotICAgICAgICAgICAgdmFyIHIsIGkgPSAwLCBvID0gZS5sZW5ndGgsIGEg
PSBNKGUpOwotICAgICAgICAgICAgaWYgKG4pIHsKLSAgICAgICAgICAgICAgICBpZiAoYSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbyA+IGk7IGkrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyID0gdC5hcHBseShlW2ldLCBuKSwgcj09PSExKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgfSBlbHNlIAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGkgaW4gZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gdC5h
cHBseShlW2ldLCBuKSwgcj09PSExKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGEpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgbyA+
IGk7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSB0LmNhbGwoZVtpXSwgaSwgZVtp
XSksIHI9PT0hMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB9
IGVsc2UgCi0gICAgICAgICAgICAgICAgZm9yIChpIGluIGUpCi0gICAgICAgICAgICAgICAgICAg
IGlmIChyID0gdC5jYWxsKGVbaV0sIGksIGVbaV0pLCByPT09ITEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBlCi0gICAgICAgIH0sCi0gICAgICAg
IHRyaW06IHYmJiF2LmNhbGwoIlx1ZmVmZlx1MDBhMCIpID8gZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgcmV0dXJuIG51bGwgPT0gZSA/ICIiIDogdi5jYWxsKGUpCi0gICAgICAgIH0KLSAgICAg
ICAgOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBlID8gIiIgOiAo
ZSArICIiKS5yZXBsYWNlKFQsICIiKQotICAgICAgICB9LAotICAgICAgICBtYWtlQXJyYXk6IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gdCB8fCBbXTsKLSAgICAgICAgICAg
IHJldHVybiBudWxsICE9IGUgJiYgKE0oT2JqZWN0KGUpKSA/IGIubWVyZ2UobiwgInN0cmluZyIg
PT0gdHlwZW9mIGUgPyBbZV0gOiBlKSA6IGQuY2FsbChuLCBlKSksIG4KLSAgICAgICAgfSwKLSAg
ICAgICAgaW5BcnJheTogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAgICAgICAgdmFyIHI7Ci0g
ICAgICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgICAgIGlmIChnKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZy5jYWxsKHQsIGUsIG4pOwotICAgICAgICAgICAgICAgIGZvciAociA9
IHQubGVuZ3RoLCBuID0gbiA/IDAgPiBuID8gTWF0aC5tYXgoMCwgciArIG4pIAotICAgICAgICAg
ICAgICAgICAgICA6IG46Ci0gICAgICAgICAgICAgICAgMDsKLSAgICAgICAgICAgICAgICByID4g
bjsKLSAgICAgICAgICAgICAgICBuKyspaWYgKG4gaW4gdCAmJiB0W25dID09PSBlKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbgotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IC0xCi0gICAgICAgIH0sCi0gICAgICAgIG1lcmdlOiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAg
ICAgICB2YXIgciA9IG4ubGVuZ3RoLCBpID0gZS5sZW5ndGgsIG8gPSAwOwotICAgICAgICAgICAg
aWYgKCJudW1iZXIiID09IHR5cGVvZiByKQotICAgICAgICAgICAgICAgIGZvciAoOyByID4gbzsg
bysrKQotICAgICAgICAgICAgICAgICAgICBlW2krK10gPSBuW29dOwotICAgICAgICAgICAgZWxz
ZSAKLSAgICAgICAgICAgICAgICB3aGlsZSAobltvXSAhPT0gdCkKLSAgICAgICAgICAgICAgICAg
ICAgZVtpKytdID0gbltvKytdOwotICAgICAgICAgICAgcmV0dXJuIGUubGVuZ3RoID0gaSwgZQot
ICAgICAgICB9LAotICAgICAgICBncmVwOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAg
ICB2YXIgciwgaSA9IFtdLCBvID0gMCwgYSA9IGUubGVuZ3RoOwotICAgICAgICAgICAgZm9yIChu
PSEhbjsgYSA+IG87IG8rKykKLSAgICAgICAgICAgICAgICByPSEhdChlW29dLCBvKSwgbiAhPT0g
ciAmJiBpLnB1c2goZVtvXSk7Ci0gICAgICAgICAgICByZXR1cm4gaQotICAgICAgICB9LAotICAg
ICAgICBtYXA6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHZhciByLCBpID0gMCwg
byA9IGUubGVuZ3RoLCBhID0gTShlKSwgcyA9IFtdOwotICAgICAgICAgICAgaWYgKGEpCi0gICAg
ICAgICAgICAgICAgZm9yICg7IG8gPiBpOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHIgPSB0
KGVbaV0sIGksIG4pLCBudWxsICE9IHIgJiYgKHNbcy5sZW5ndGhdID0gcik7Ci0gICAgICAgICAg
ICBlbHNlIAotICAgICAgICAgICAgICAgIGZvciAoaSBpbiBlKQotICAgICAgICAgICAgICAgICAg
ICByID0gdChlW2ldLCBpLCBuKSwgbnVsbCAhPSByICYmIChzW3MubGVuZ3RoXSA9IHIpOwotICAg
ICAgICAgICAgcmV0dXJuIGYuYXBwbHkoW10sIHMpCi0gICAgICAgIH0sCi0gICAgICAgIGd1aWQ6
IDEsCi0gICAgICAgIHByb3h5OiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB2YXIgciwg
aSwgbzsKLSAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgbiAmJiAobyA9IGVb
bl0sIG4gPSBlLCBlID0gbyksIGIuaXNGdW5jdGlvbihlKSA/IChyID0gaC5jYWxsKGFyZ3VtZW50
cywgMiksIGkgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS5hcHBseShu
IHx8IHRoaXMsIHIuY29uY2F0KGguY2FsbChhcmd1bWVudHMpKSkKLSAgICAgICAgICAgIH0sIGku
Z3VpZCA9IGUuZ3VpZCA9IGUuZ3VpZCB8fCBiLmd1aWQrKywgaSkgOiB0Ci0gICAgICAgIH0sCi0g
ICAgICAgIGFjY2VzczogZnVuY3Rpb24oZSwgbiwgciwgaSwgbywgYSwgcykgewotICAgICAgICAg
ICAgdmFyIHUgPSAwLCBsID0gZS5sZW5ndGgsIGMgPSBudWxsID09IHI7Ci0gICAgICAgICAgICBp
ZiAoIm9iamVjdCIgPT09IGIudHlwZShyKSkgewotICAgICAgICAgICAgICAgIG89ITA7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1IGluIHIpCi0gICAgICAgICAgICAgICAgICAgIGIuYWNjZXNzKGUs
IG4sIHUsIHJbdV0sICEwLCBhLCBzKQotICAgICAgICAgICAgfSBlbHNlIGlmIChpICE9PSB0ICYm
IChvPSEwLCBiLmlzRnVuY3Rpb24oaSkgfHwgKHM9ITApLCBjICYmIChzID8gKG4uY2FsbChlLCBp
KQotICAgICAgICAgICAgICAgICwgbiA9IG51bGwpIDogKGMgPSBuLCBuID0gZnVuY3Rpb24oZSwg
dCwgbikgewotICAgICAgICAgICAgICAgIHJldHVybiBjLmNhbGwoYihlKSwgbikKLSAgICAgICAg
ICAgIH0pKSwgbikpZm9yICg7IGwgPiB1OyB1KyspCi0gICAgICAgICAgICAgICAgbihlW3VdLCBy
LCBzID8gaSA6IGkuY2FsbChlW3VdLCB1LCBuKGVbdV0sIHIpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gbyA/IGUgOiBjID8gbi5jYWxsKGUpIDogbCA/IG4oZVswXSwgcikgOiBhCi0gICAgICAgIH0s
Ci0gICAgICAgIG5vdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRl
KS5nZXRUaW1lKCkKLSAgICAgICAgfQotICAgIH0pLCBiLnJlYWR5LnByb21pc2UgPSBmdW5jdGlv
bih0KSB7Ci0gICAgICAgIGlmICghbikKLSAgICAgICAgICAgIGlmIChuID0gYi5EZWZlcnJlZCgp
LCAiY29tcGxldGUiID09PSBvLnJlYWR5U3RhdGUpCi0gICAgICAgICAgICAgICAgc2V0VGltZW91
dChiLnJlYWR5KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG8uYWRkRXZlbnRMaXN0ZW5lcikKLSAg
ICAgICAgICAgICAgICBvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBILCAh
MSksIGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIEgsICExKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBvLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBIKSwgZS5hdHRh
Y2hFdmVudCgib25sb2FkIiwgSCk7Ci0gICAgICAgICAgICB2YXIgcj0hMTsKLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgciA9IG51bGwgPT0gZS5mcmFtZUVsZW1lbnQgJiYgby5k
b2N1bWVudEVsZW1lbnQKLSAgICAgICAgICAgIH0gY2F0Y2ggKGkpIHt9Ci0gICAgICAgICAgICBy
ICYmIHIuZG9TY3JvbGwgJiYgZnVuY3Rpb24gYSgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWIu
aXNSZWFkeSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgci5kb1Njcm9sbCgibGVmdCIpCi0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGEsIDUwKQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHEoKSwgYi5yZWFkeSgpCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSgpCi0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG4ucHJvbWlzZSh0KQotICAgIH0sIGIuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1
bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSwgZnVuY3Rp
b24oZSwgdCkgewotICAgICAgICBsWyJbb2JqZWN0ICIgKyB0ICsgIl0iXSA9IHQudG9Mb3dlckNh
c2UoKQotICAgIH0pOwotICAgIGZ1bmN0aW9uIE0oZSkgewotICAgICAgICB2YXIgdCA9IGUubGVu
Z3RoLCBuID0gYi50eXBlKGUpOwotICAgICAgICByZXR1cm4gYi5pc1dpbmRvdyhlKT8hMSA6IDEg
PT09IGUubm9kZVR5cGUgJiYgdD8hMCA6ICJhcnJheSIgPT09IG4gfHwgImZ1bmN0aW9uIiAhPT0g
biAmJiAoMCA9PT0gdCB8fCAibnVtYmVyIiA9PSB0eXBlb2YgdCAmJiB0ID4gMCAmJiB0LTEgaW4g
ZSkKLSAgICB9Ci0gICAgciA9IGIobyk7Ci0gICAgdmFyIF8gPSB7fTsKLSAgICBmdW5jdGlvbiBG
KGUpIHsKLSAgICAgICAgdmFyIHQgPSBfW2VdID0ge307Ci0gICAgICAgIHJldHVybiBiLmVhY2go
ZS5tYXRjaCh3KSB8fCBbXSwgZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdFtuXT0hMAot
ICAgICAgICB9KSwgdAotICAgIH0KLSAgICBiLkNhbGxiYWNrcyA9IGZ1bmN0aW9uKGUpIHsKLSAg
ICAgICAgZSA9ICJzdHJpbmciID09IHR5cGVvZiBlID8gX1tlXSB8fCBGKGUpIDogYi5leHRlbmQo
e30sIGUpOwotICAgICAgICB2YXIgbiwgciwgaSwgbywgYSwgcywgdSA9IFtdLCBsPSFlLm9uY2Ug
JiYgW10sIGMgPSBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICBmb3IgKHIgPSBlLm1lbW9yeSAm
JiB0LCBpPSEwLCBhID0gcyB8fCAwLCBzID0gMCwgbyA9IHUubGVuZ3RoLCBuPSEwOyB1ICYmIG8g
PiBhOyBhKyspCi0gICAgICAgICAgICAgICAgaWYgKHVbYV0uYXBwbHkodFswXSwgdFsxXSk9PT0h
MSAmJiBlLnN0b3BPbkZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHI9ITE7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgbj0hMSwg
dSAmJiAobCA/IGwubGVuZ3RoICYmIGMobC5zaGlmdCgpKSA6IHIgPyB1ID0gW10gOiBwLmRpc2Fi
bGUoKSkKLSAgICAgICAgfSwgcCA9IHsKLSAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB1Lmxl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGkodCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYi5lYWNoKHQsIGZ1bmN0aW9uKHQsIG4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgciA9IGIudHlwZShuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZnVuY3Rpb24iID09PSByID8gZS51bmlxdWUgJiYgcC5oYXMobikgfHwgdS5wdXNoKG4pIDog
biAmJiBuLmxlbmd0aCAmJiAic3RyaW5nIiAhPT0gciAmJiBpKG4pCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9KQotICAgICAgICAgICAgICAgICAgICB9KShhcmd1bWVudHMpLCBuID8gbyA9IHUu
bGVuZ3RoIDogciAmJiAocyA9IHQsIGMocikpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcmVtb3ZlOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdSAmJiBiLmVhY2goYXJndW1lbnRz
LCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByOwotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoKHIgPSBiLmluQXJyYXkodCwgdSwgcikpPi0xKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdS5zcGxpY2UociwgMSksIG4gJiYgKG8gPj0gciAmJiBvLS0sIGEgPj0g
ciAmJiBhLS0pCi0gICAgICAgICAgICAgICAgfSksIHRoaXMKLSAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBoYXM6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZSA/IGIu
aW5BcnJheShlLCB1KT4tMSA6ICEoIXUgfHwhdS5sZW5ndGgpCi0gICAgICAgICAgICB9LAotICAg
ICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB1ID0g
W10sIHRoaXMKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdSA9IGwgPSByID0gdCwgdGhpcwotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gIXUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBsb2NrOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbCA9IHQsIHIgfHwgcC5kaXNhYmxlKCksIHRoaXMK
LSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAhbAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGZpcmVXaXRo
OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHQgPSB0IHx8IFtdLCB0
ID0gW2UsIHQuc2xpY2UgPyB0LnNsaWNlKCk6IHRdLCAhdSB8fCBpJiYhbCB8fCAobiA/IGwucHVz
aCh0KSA6IGModCkpLCB0aGlzCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZmlyZTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHAuZmlyZVdpdGgodGhpcywgYXJndW1l
bnRzKSwgdGhpcwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGZpcmVkOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISFpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0gICAgICAgIHJldHVybiBwCi0gICAgfSwgYi5leHRlbmQoewotICAgICAgICBEZWZlcnJlZDog
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIHQgPSBbWyJyZXNvbHZlIiwgImRvbmUiLCBi
LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIl0sIFsicmVqZWN0IiwgImZhaWwi
LCBiLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlamVjdGVkIl0sIFsibm90aWZ5IiwgInBy
b2dyZXNzIiwgYi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sIG4gPSAicGVuZGluZyIsIHIgPSB7Ci0g
ICAgICAgICAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuZG9uZShhcmd1bWVudHMpLmZh
aWwoYXJndW1lbnRzKSwgdGhpcwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
dGhlbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlID0gYXJndW1lbnRz
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5EZWZlcnJlZChmdW5jdGlvbihuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiLmVhY2godCwgZnVuY3Rpb24odCwgbykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gb1swXSwgcyA9IGIuaXNGdW5jdGlvbihlW3Rd
KSAmJiBlW3RdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlbb1sxXV0oZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gcyAmJiBzLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgJiYg
Yi5pc0Z1bmN0aW9uKGUucHJvbWlzZSkgPyBlLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFp
bChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpIDogblthICsgIldpdGgiXSh0aGlzID09PSBy
ID8gbi5wcm9taXNlKCkgOiB0aGlzLCBzID8gW2VdIDogYXJndW1lbnRzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgICAgICB9KSwgZSA9IG51bGwK
LSAgICAgICAgICAgICAgICAgICAgfSkucHJvbWlzZSgpCi0gICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsICE9IGUgPyBiLmV4dGVuZChlLCByKSA6IHIKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LCBpID0ge307Ci0gICAgICAgICAgICByZXR1cm4gci5waXBlID0gci50
aGVuLCBiLmVhY2godCwgZnVuY3Rpb24oZSwgbykgewotICAgICAgICAgICAgICAgIHZhciBhID0g
b1syXSwgcyA9IG9bM107Ci0gICAgICAgICAgICAgICAgcltvWzFdXSA9IGEuYWRkLCBzICYmIGEu
YWRkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBuID0gcwotICAgICAgICAgICAg
ICAgIH0sIHRbMV5lXVsyXS5kaXNhYmxlLCB0WzJdWzJdLmxvY2spLCBpW29bMF1dID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpW29bMF0gKyAiV2l0aCJdKHRoaXMg
PT09IGkgPyByIDogdGhpcywgYXJndW1lbnRzKSwgdGhpcwotICAgICAgICAgICAgICAgIH0sIGlb
b1swXSArICJXaXRoIl0gPSBhLmZpcmVXaXRoCi0gICAgICAgICAgICB9KSwgci5wcm9taXNlKGkp
LCBlICYmIGUuY2FsbChpLCBpKSwgaQotICAgICAgICB9LAotICAgICAgICB3aGVuOiBmdW5jdGlv
bihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9IDAsIG4gPSBoLmNhbGwoYXJndW1lbnRzKSwgciA9
IG4ubGVuZ3RoLCBpID0gMSAhPT0gciB8fCBlICYmIGIuaXNGdW5jdGlvbihlLnByb21pc2UpID8g
cjogMCwgbyA9IDEgPT09IGkgPyBlOiBiLkRlZmVycmVkKCksIGEgPSBmdW5jdGlvbihlLCB0LCBu
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdFtlXSA9IHRoaXMsIG5bZV0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGguY2FsbChh
cmd1bWVudHMpIDogciwgbiA9PT0gcyA/IG8ubm90aWZ5V2l0aCh0LCBuKSA6IC0taSB8fCBvLnJl
c29sdmVXaXRoKHQsIG4pCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgcywgdSwg
bDsKLSAgICAgICAgICAgIGlmIChyID4gMSkKLSAgICAgICAgICAgICAgICBmb3IgKHMgPSBBcnJh
eShyKSwgdSA9IEFycmF5KHIpCi0gICAgICAgICAgICAgICAgICAgICwgbCA9IEFycmF5KHIpOwot
ICAgICAgICAgICAgciA+IHQ7Ci0gICAgICAgICAgICB0Kyspblt0XSAmJiBiLmlzRnVuY3Rpb24o
blt0XS5wcm9taXNlKSA/IG5bdF0ucHJvbWlzZSgpLmRvbmUoYSh0LCBsLCBuKSkuZmFpbChvLnJl
amVjdCkucHJvZ3Jlc3MoYSh0LCB1LCBzKSkgOiAtLWk7Ci0gICAgICAgICAgICByZXR1cm4gaSB8
fCBvLnJlc29sdmVXaXRoKGwsIG4pLCBvLnByb21pc2UoKQotICAgICAgICB9Ci0gICAgfSksIGIu
c3VwcG9ydCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgdCwgbiwgciwgYSwgcywgdSwgbCwg
YywgcCwgZiwgZCA9IG8uY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGlmIChkLnNldEF0
dHJpYnV0ZSgiY2xhc3NOYW1lIiwgInQiKSwgZC5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxl
PjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IiwgbiA9
IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKQotICAgICAgICAgICAgLCByID0gZC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiYSIpWzBdLCAhbiB8fCFyIHx8IW4ubGVuZ3RoKXJldHVybiB7fTsKLSAg
ICAgICAgcyA9IG8uY3JlYXRlRWxlbWVudCgic2VsZWN0IiksIGwgPSBzLmFwcGVuZENoaWxkKG8u
Y3JlYXRlRWxlbWVudCgib3B0aW9uIikpLCBhID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5w
dXQiKVswXSwgci5zdHlsZS5jc3NUZXh0ID0gInRvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41
IiwgdCA9IHsKLSAgICAgICAgICAgIGdldFNldEF0dHJpYnV0ZTogInQiICE9PSBkLmNsYXNzTmFt
ZSwKLSAgICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAzID09PSBkLmZpcnN0Q2hpbGQubm9k
ZVR5cGUsCi0gICAgICAgICAgICB0Ym9keTogIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5
IikubGVuZ3RoLAotICAgICAgICAgICAgaHRtbFNlcmlhbGl6ZTogISFkLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJsaW5rIikubGVuZ3RoLAotICAgICAgICAgICAgc3R5bGU6IC90b3AvLnRlc3Qoci5n
ZXRBdHRyaWJ1dGUoInN0eWxlIikpLAotICAgICAgICAgICAgaHJlZk5vcm1hbGl6ZWQ6ICIvYSIg
PT09IHIuZ2V0QXR0cmlidXRlKCJocmVmIiksCi0gICAgICAgICAgICBvcGFjaXR5OiAvXjAuNS8u
dGVzdChyLnN0eWxlLm9wYWNpdHkpLAotICAgICAgICAgICAgY3NzRmxvYXQ6ICEhci5zdHlsZS5j
c3NGbG9hdCwKLSAgICAgICAgICAgIGNoZWNrT246ICEhYS52YWx1ZSwKLSAgICAgICAgICAgIG9w
dFNlbGVjdGVkOiBsLnNlbGVjdGVkLAotICAgICAgICAgICAgZW5jdHlwZTogISFvLmNyZWF0ZUVs
ZW1lbnQoImZvcm0iKS5lbmN0eXBlLAotICAgICAgICAgICAgaHRtbDVDbG9uZTogIjw6bmF2Pjwv
Om5hdj4iICE9PSBvLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1M
LAotICAgICAgICAgICAgYm94TW9kZWw6ICJDU1MxQ29tcGF0IiA9PT0gby5jb21wYXRNb2RlLAot
ICAgICAgICAgICAgZGVsZXRlRXhwYW5kbzogITAsCi0gICAgICAgICAgICBub0Nsb25lRXZlbnQ6
ICEwLAotICAgICAgICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogITEsCi0gICAgICAgICAg
ICBzaHJpbmtXcmFwQmxvY2tzOiAhMSwKLSAgICAgICAgICAgIHJlbGlhYmxlTWFyZ2luUmlnaHQ6
ICEwLAotICAgICAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6ICEwLAotICAgICAgICAgICAgcGl4
ZWxQb3NpdGlvbjogITEKLSAgICAgICAgfSwgYS5jaGVja2VkPSEwLCB0Lm5vQ2xvbmVDaGVja2Vk
ID0gYS5jbG9uZU5vZGUoITApLmNoZWNrZWQsIHMuZGlzYWJsZWQ9ITAsIHQub3B0RGlzYWJsZWQ9
IWwuZGlzYWJsZWQ7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBkZWxldGUgZC50ZXN0Ci0g
ICAgICAgIH0gY2F0Y2ggKGgpIHsKLSAgICAgICAgICAgIHQuZGVsZXRlRXhwYW5kbz0hMQotICAg
ICAgICB9Ci0gICAgICAgIGEgPSBvLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksIGEuc2V0QXR0cmli
dXRlKCJ2YWx1ZSIsICIiKSwgdC5pbnB1dCA9ICIiID09PSBhLmdldEF0dHJpYnV0ZSgidmFsdWUi
KSwgYS52YWx1ZSA9ICJ0IiwgYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAicmFkaW8iKSwgdC5yYWRp
b1ZhbHVlID0gInQiID09PSBhLnZhbHVlLCBhLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsICJ0Iiks
IGEuc2V0QXR0cmlidXRlKCJuYW1lIiwgInQiKSwgdSA9IG8uY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpLCB1LmFwcGVuZENoaWxkKGEpLCB0LmFwcGVuZENoZWNrZWQgPSBhLmNoZWNrZWQsIHQuY2hl
Y2tDbG9uZSA9IHUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2Vk
LCBkLmF0dGFjaEV2ZW50ICYmIChkLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICB0Lm5vQ2xvbmVFdmVudD0hMQotICAgICAgICB9KSwgZC5jbG9uZU5vZGUo
ITApLmNsaWNrKCkpOwotICAgICAgICBmb3IgKGYgaW57Ci0gICAgICAgICAgICBzdWJtaXQ6ICEw
LAotICAgICAgICAgICAgY2hhbmdlOiAhMCwKLSAgICAgICAgICAgIGZvY3VzaW46ICEwCi0gICAg
ICAgIH0pCi0gICAgICAgICAgICBkLnNldEF0dHJpYnV0ZShjID0gIm9uIiArIGYsICJ0IiksIHRb
ZiArICJCdWJibGVzIl0gPSBjIGluIGUgfHwgZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMTsK
LSAgICAgICAgcmV0dXJuIGQuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giLCBk
LmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIiwgdC5jbGVhckNsb25lU3R5
bGUgPSAiY29udGVudC1ib3giID09PSBkLnN0eWxlLmJhY2tncm91bmRDbGlwLCBiKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdmFyIG4sIHIsIGEsIHMgPSAicGFkZGluZzowO21hcmdpbjowO2Jv
cmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXpp
bmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsIHUgPSBvLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07Ci0gICAgICAgICAgICB1ICYmIChuID0gby5j
cmVhdGVFbGVtZW50KCJkaXYiKSwgbi5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjA7
aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6
MXB4IiwgdS5hcHBlbmRDaGlsZChuKS5hcHBlbmRDaGlsZChkKSwgZC5pbm5lckhUTUwgPSAiPHRh
YmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsIGEgPSBkLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0ZCIpLCBhWzBdLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzowO21hcmdp
bjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSIsIHAgPSAwID09PSBhWzBdLm9mZnNldEhlaWdodCwg
YVswXS5zdHlsZS5kaXNwbGF5ID0gIiIsIGFbMV0uc3R5bGUuZGlzcGxheSA9ICJub25lIiwgdC5y
ZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBwICYmIDAgPT09IGFbMF0ub2Zmc2V0SGVpZ2h0LCBkLmlu
bmVySFRNTCA9ICIiLCBkLnN0eWxlLmNzc1RleHQgPSAiYm94LXNpemluZzpib3JkZXItYm94Oy1t
b3otYm94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3Bh
ZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDox
JTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSU7IiwgdC5ib3hTaXppbmcgPSA0ID09PSBkLm9mZnNl
dFdpZHRoLCB0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ID0gMSAhPT0gdS5vZmZz
ZXRUb3AsIGUuZ2V0Q29tcHV0ZWRTdHlsZSAmJiAodC5waXhlbFBvc2l0aW9uID0gIjElIiAhPT0g
KGUuZ2V0Q29tcHV0ZWRTdHlsZShkLCBudWxsKSB8fCB7fSkudG9wLCB0LmJveFNpemluZ1JlbGlh
YmxlID0gIjRweCIgPT09IChlLmdldENvbXB1dGVkU3R5bGUoZCwgbnVsbCkgfHwgewotICAgICAg
ICAgICAgICAgIHdpZHRoOiAiNHB4IgotICAgICAgICAgICAgfSkud2lkdGgsIHIgPSBkLmFwcGVu
ZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLCByLnN0eWxlLmNzc1RleHQgPSBkLnN0eWxl
LmNzc1RleHQgPSBzLCByLnN0eWxlLm1hcmdpblJpZ2h0ID0gci5zdHlsZS53aWR0aCA9ICIwIiwg
ZC5zdHlsZS53aWR0aCA9ICIxcHgiLCB0LnJlbGlhYmxlTWFyZ2luUmlnaHQ9IXBhcnNlRmxvYXQo
KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLCBudWxsKSB8fCB7fSkubWFyZ2luUmlnaHQpKSwgdHlwZW9m
IGQuc3R5bGUuem9vbSAhPT0gaSAmJiAoZC5pbm5lckhUTUwgPSAiIiwgZC5zdHlsZS5jc3NUZXh0
ID0gcyArICJ3aWR0aDoxcHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbToxIiwgdC5p
bmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gMyA9PT0gZC5vZmZzZXRXaWR0aCwgZC5zdHlsZS5kaXNw
bGF5ID0gImJsb2NrIiwgZC5pbm5lckhUTUwgPSAiPGRpdj48L2Rpdj4iLCBkLmZpcnN0Q2hpbGQu
c3R5bGUud2lkdGggPSAiNXB4IiwgdC5zaHJpbmtXcmFwQmxvY2tzID0gMyAhPT0gZC5vZmZzZXRX
aWR0aCwgdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ICYmICh1LnN0eWxlLnpvb20gPSAxKSksIHUu
cmVtb3ZlQ2hpbGQobiksIG4gPSBkID0gYSA9IHIgPSBudWxsKQotICAgICAgICB9KSwgbiA9IHMg
PSB1ID0gbCA9IHIgPSBhID0gbnVsbCwgdAotICAgIH0oKTsKLSAgICB2YXIgTyA9IC8oPzpce1tc
c1xTXSpcfXxcW1tcc1xTXSpcXSkkLywgQiA9IC8oW0EtWl0pL2c7Ci0gICAgZnVuY3Rpb24gUChl
LCBuLCByLCBpKSB7Ci0gICAgICAgIGlmIChiLmFjY2VwdERhdGEoZSkpIHsKLSAgICAgICAgICAg
IHZhciBvLCBhLCBzID0gYi5leHBhbmRvLCB1ID0gInN0cmluZyIgPT0gdHlwZW9mIG4sIGwgPSBl
Lm5vZGVUeXBlLCBwID0gbCA/IGIuY2FjaGU6IGUsIGYgPSBsID8gZVtzXTogZVtzXSAmJiBzOwot
ICAgICAgICAgICAgaWYgKGYgJiYgcFtmXSAmJiAoaSB8fCBwW2ZdLmRhdGEpIHx8IXUgfHwgciAh
PT0gdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZiB8fCAobCA/IGVbc10gPSBmID0gYy5wb3Ao
KSB8fCBiLmd1aWQrKyA6IGYgPSBzKSwgcFtmXSB8fCAocFtmXSA9IHt9LCBsIHx8IChwW2ZdLnRv
SlNPTiA9IGIubm9vcCkpLCAoIm9iamVjdCIgPT0gdHlwZW9mIG4gfHwgImZ1bmN0aW9uIiA9PSB0
eXBlb2YgbikgJiYgKGkgPyBwW2ZdID0gYi5leHRlbmQocFtmXSwgbikgOiBwW2ZdLmRhdGEgPSBi
LmV4dGVuZChwW2ZdLmRhdGEsIG4pKSwgbyA9IHBbZl0sIGkgfHwgKG8uZGF0YSB8fCAoby5kYXRh
ID0ge30pLCBvID0gby5kYXRhKSwgciAhPT0gdCAmJiAob1tiLmNhbWVsQ2FzZShuKV0gPSByKSwg
dSA/IChhID0gb1tuXSwgbnVsbCA9PSBhICYmIChhID0gb1tiLmNhbWVsQ2FzZShuKV0pKSA6IGEg
PSBvLCBhCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gUihlLCB0LCBuKSB7Ci0gICAg
ICAgIGlmIChiLmFjY2VwdERhdGEoZSkpIHsKLSAgICAgICAgICAgIHZhciByLCBpLCBvLCBhID0g
ZS5ub2RlVHlwZSwgcyA9IGEgPyBiLmNhY2hlOiBlLCB1ID0gYSA/IGVbYi5leHBhbmRvXTogYi5l
eHBhbmRvOwotICAgICAgICAgICAgaWYgKHNbdV0pIHsKLSAgICAgICAgICAgICAgICBpZiAodCAm
JiAobyA9IG4gPyBzW3VdIDogc1t1XS5kYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBiLmlz
QXJyYXkodCkgPyB0ID0gdC5jb25jYXQoYi5tYXAodCwgYi5jYW1lbENhc2UpKSA6IHQgaW4gbyA/
IHQgPSBbdF0gOiAodCA9IGIuY2FtZWxDYXNlKHQpLCB0ID0gdCBpbiBvID8gW3RdIDogdC5zcGxp
dCgiICIpKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gMCwgaSA9IHQubGVuZ3RoOyBp
ID4gcjsgcisrKQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9bdFtyXV07Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghKG4gPyAkIDogYi5pc0VtcHR5T2JqZWN0KShvKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAKLSAgICAgICAgICAgICAgICB9KG4gfHwgKGRlbGV0
ZSBzW3VdLmRhdGEsICQoc1t1XSkpKSAmJiAoYSA/IGIuY2xlYW5EYXRhKFtlXSwgITApIDogYi5z
dXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgcyAhPSBzLndpbmRvdyA/IGRlbGV0ZSBzW3VdIDogc1t1
XSA9IG51bGwpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYi5leHRlbmQo
ewotICAgICAgICBjYWNoZToge30sCi0gICAgICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKHAgKyBN
YXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCAiIiksCi0gICAgICAgIG5vRGF0YTogewotICAg
ICAgICAgICAgZW1iZWQ6ICEwLAotICAgICAgICAgICAgb2JqZWN0OiAiY2xzaWQ6RDI3Q0RCNkUt
QUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwKLSAgICAgICAgICAgIGFwcGxldDogITAKLSAg
ICAgICAgfSwKLSAgICAgICAgaGFzRGF0YTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0
dXJuIGUgPSBlLm5vZGVUeXBlID8gYi5jYWNoZVtlW2IuZXhwYW5kb11dIDogZVtiLmV4cGFuZG9d
LCAhIWUmJiEkKGUpCi0gICAgICAgIH0sCi0gICAgICAgIGRhdGE6IGZ1bmN0aW9uKGUsIHQsIG4p
IHsKLSAgICAgICAgICAgIHJldHVybiBQKGUsIHQsIG4pCi0gICAgICAgIH0sCi0gICAgICAgIHJl
bW92ZURhdGE6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiBSKGUsIHQpCi0g
ICAgICAgIH0sCi0gICAgICAgIF9kYXRhOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gUChlLCB0LCBuLCAhMCkKLSAgICAgICAgfSwKLSAgICAgICAgX3JlbW92ZURhdGE6
IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiBSKGUsIHQsICEwKQotICAgICAg
ICB9LAotICAgICAgICBhY2NlcHREYXRhOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBpZiAo
ZS5ub2RlVHlwZSAmJiAxICE9PSBlLm5vZGVUeXBlICYmIDkgIT09IGUubm9kZVR5cGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuICExOwotICAgICAgICAgICAgdmFyIHQgPSBlLm5vZGVOYW1lICYm
IGIubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07Ci0gICAgICAgICAgICByZXR1cm4g
IXQgfHwgdCE9PSEwICYmIGUuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikgPT09IHQKLSAgICAgICAg
fQotICAgIH0pLCBiLmZuLmV4dGVuZCh7Ci0gICAgICAgIGRhdGE6IGZ1bmN0aW9uKGUsIG4pIHsK
LSAgICAgICAgICAgIHZhciByLCBpLCBvID0gdGhpc1swXSwgYSA9IDAsIHMgPSBudWxsOwotICAg
ICAgICAgICAgaWYgKGUgPT09IHQpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZW5ndGgg
JiYgKHMgPSBiLmRhdGEobyksIDEgPT09IG8ubm9kZVR5cGUmJiFiLl9kYXRhKG8sICJwYXJzZWRB
dHRycyIpKQotICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChyID0gby5hdHRyaWJ1dGVzOyByLmxlbmd0aCA+IGE7IGErKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSByW2FdLm5hbWUsIGkuaW5kZXhPZigiZGF0YS0iKSB8fCAoaSA9IGIuY2FtZWxD
YXNlKGkuc2xpY2UoNSkpLCBXKG8sIGksIHNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgYi5f
ZGF0YShvLCAicGFyc2VkQXR0cnMiLCAhMCkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHMKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAib2JqZWN0
IiA9PSB0eXBlb2YgZSA/IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBi
LmRhdGEodGhpcywgZSkKLSAgICAgICAgICAgIH0pIDogYi5hY2Nlc3ModGhpcywgZnVuY3Rpb24o
bikgewotICAgICAgICAgICAgICAgIHJldHVybiBuID09PSB0ID8gbyA/IFcobywgZSwgYi5kYXRh
KG8sIGUpKSA6IG51bGwgOiAodGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICBiLmRhdGEodGhpcywgZSwgbikKLSAgICAgICAgICAgICAgICB9KSwgdCkKLSAgICAgICAg
ICAgIH0sIG51bGwsIG4sIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCAhMCkKLSAgICAgICAg
fSwKLSAgICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBiLnJlbW92ZURhdGEodGhp
cywgZSkKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBmdW5jdGlvbiBX
KGUsIG4sIHIpIHsKLSAgICAgICAgaWYgKHIgPT09IHQgJiYgMSA9PT0gZS5ub2RlVHlwZSkgewot
ICAgICAgICAgICAgdmFyIGkgPSAiZGF0YS0iICsgbi5yZXBsYWNlKEIsICItJDEiKS50b0xvd2Vy
Q2FzZSgpOwotICAgICAgICAgICAgaWYgKHIgPSBlLmdldEF0dHJpYnV0ZShpKSwgInN0cmluZyIg
PT0gdHlwZW9mIHIpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAg
ICByID0gInRydWUiID09PSByPyEwIDogImZhbHNlIiA9PT0gcj8hMSA6ICJudWxsIiA9PT0gciA/
IG51bGwgOiArIHIgKyAiIiA9PT0gcj8rciA6IE8udGVzdChyKSA/IGIucGFyc2VKU09OKHIpIDog
cgotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG8pIHt9Ci0gICAgICAgICAgICAgICAgYi5kYXRh
KGUsIG4sIHIpCi0gICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgciA9IHQKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcgotICAgIH0KLSAgICBmdW5jdGlvbiAkKGUpIHsKLSAg
ICAgICAgdmFyIHQ7Ci0gICAgICAgIGZvciAodCBpbiBlKQotICAgICAgICAgICAgaWYgKCgiZGF0
YSIgIT09IHQgfHwhYi5pc0VtcHR5T2JqZWN0KGVbdF0pKSAmJiAidG9KU09OIiAhPT0gdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gITE7Ci0gICAgICAgIHJldHVybiAhMAotICAgIH0KLSAgICBi
LmV4dGVuZCh7Ci0gICAgICAgIHF1ZXVlOiBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAgICAg
ICB2YXIgaTsKLSAgICAgICAgICAgIHJldHVybiBlID8gKG4gPSAobiB8fCAiZngiKSArICJxdWV1
ZSIsIGkgPSBiLl9kYXRhKGUsIG4pLCByICYmICghaSB8fCBiLmlzQXJyYXkocikgPyBpID0gYi5f
ZGF0YShlLCBuLCBiLm1ha2VBcnJheShyKSkgOiBpLnB1c2gocikpLCBpIHx8IFtdKSA6IHQKLSAg
ICAgICAgfSwKLSAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAg
dCA9IHQgfHwgImZ4IjsKLSAgICAgICAgICAgIHZhciBuID0gYi5xdWV1ZShlLCB0KSwgciA9IG4u
bGVuZ3RoLCBpID0gbi5zaGlmdCgpLCBvID0gYi5fcXVldWVIb29rcyhlLCB0KSwgYSA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIGIuZGVxdWV1ZShlLCB0KQotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICJpbnByb2dyZXNzIiA9PT0gaSAmJiAoaSA9IG4uc2hpZnQoKSwgci0tKSwg
by5jdXIgPSBpLCBpICYmICgiZngiID09PSB0ICYmIG4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLCBk
ZWxldGUgby5zdG9wLCBpLmNhbGwoZSwgYSwgbykpLCAhciAmJiBvICYmIG8uZW1wdHkuZmlyZSgp
Ci0gICAgICAgIH0sCi0gICAgICAgIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAg
ICAgICAgICB2YXIgbiA9IHQgKyAicXVldWVIb29rcyI7Ci0gICAgICAgICAgICByZXR1cm4gYi5f
ZGF0YShlLCBuKSB8fCBiLl9kYXRhKGUsIG4sIHsKLSAgICAgICAgICAgICAgICBlbXB0eTogYi5D
YWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICBiLl9yZW1vdmVEYXRhKGUsIHQgKyAicXVldWUiKSwgYi5fcmVtb3ZlRGF0YShlLCBuKQot
ICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICB9KQotICAgICAgICB9Ci0gICAgfSksIGIu
Zm4uZXh0ZW5kKHsKLSAgICAgICAgcXVldWU6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgICAg
IHZhciByID0gMjsKLSAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiAo
biA9IGUsIGUgPSAiZngiLCByLS0pLCByID4gYXJndW1lbnRzLmxlbmd0aCA/IGIucXVldWUodGhp
c1swXSwgZSkgOiBuID09PSB0ID8gdGhpcyA6IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgdCA9IGIucXVldWUodGhpcywgZSwgbik7Ci0gICAgICAgICAgICAgICAg
Yi5fcXVldWVIb29rcyh0aGlzLCBlKSwgImZ4IiA9PT0gZSAmJiAiaW5wcm9ncmVzcyIgIT09IHRb
MF0gJiYgYi5kZXF1ZXVlKHRoaXMsIGUpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAg
ICAgICBkZXF1ZXVlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGIuZGVxdWV1ZSh0aGlzLCBlKQotICAgICAg
ICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgZGVsYXk6IGZ1bmN0aW9uKGUsIHQpIHsKLSAg
ICAgICAgICAgIHJldHVybiBlID0gYi5meCA/IGIuZnguc3BlZWRzW2VdIHx8IGUgOiBlLCB0ID0g
dCB8fCAiZngiLCB0aGlzLnF1ZXVlKHQsIGZ1bmN0aW9uKHQsIG4pIHsKLSAgICAgICAgICAgICAg
ICB2YXIgciA9IHNldFRpbWVvdXQodCwgZSk7Ci0gICAgICAgICAgICAgICAgbi5zdG9wID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyKQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIGNsZWFyUXVldWU6
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKGUgfHwgImZ4Iiwg
W10pCi0gICAgICAgIH0sCi0gICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAg
ICAgICAgIHZhciByLCBpID0gMSwgbyA9IGIuRGVmZXJyZWQoKSwgYSA9IHRoaXMsIHMgPSB0aGlz
Lmxlbmd0aCwgdSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC0taSB8fCBvLnJlc29s
dmVXaXRoKGEsIFthXSkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAic3RyaW5nIiAhPSB0
eXBlb2YgZSAmJiAobiA9IGUsIGUgPSB0KSwgZSA9IGUgfHwgImZ4IjsKLSAgICAgICAgICAgIHdo
aWxlIChzLS0pCi0gICAgICAgICAgICAgICAgciA9IGIuX2RhdGEoYVtzXSwgZSArICJxdWV1ZUhv
b2tzIiksIHIgJiYgci5lbXB0eSAmJiAoaSsrLCByLmVtcHR5LmFkZCh1KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdSgpLCBvLnByb21pc2UobikKLSAgICAgICAgfQotICAgIH0pOwotICAgIHZhciBJ
LCB6LCBYID0gL1tcdFxyXG5dL2csIFUgPSAvXHIvZywgViA9IC9eKD86aW5wdXR8c2VsZWN0fHRl
eHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pLCBZID0gL14oPzphfGFyZWEpJC9pLCBKID0gL14oPzpj
aGVja2VkfHNlbGVjdGVkfGF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjb250cm9sc3xkZWZlcnxk
aXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3Bl
ZCkkL2ksIEcgPSAvXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLCBRID0gYi5zdXBwb3J0LmdldFNl
dEF0dHJpYnV0ZSwgSyA9IGIuc3VwcG9ydC5pbnB1dDsKLSAgICBiLmZuLmV4dGVuZCh7Ci0gICAg
ICAgIGF0dHI6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiBiLmFjY2Vzcyh0
aGlzLCBiLmF0dHIsIGUsIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxKQotICAgICAgICB9LAotICAg
ICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGIucmVtb3ZlQXR0cih0aGlzLCBlKQot
ICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgcHJvcDogZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgcmV0dXJuIGIuYWNjZXNzKHRoaXMsIGIucHJvcCwgZSwgdCwgYXJndW1l
bnRzLmxlbmd0aCA+IDEpCi0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9u
KGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlID0gYi5wcm9wRml4W2VdIHx8IGUsIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzW2VdID0gdCwgZGVsZXRlIHRoaXNbZV0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChu
KSB7fQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0LCBuLCByLCBpLCBvLCBhID0gMCwgcyA9IHRoaXMu
bGVuZ3RoLCB1ID0gInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgZTsKLSAgICAgICAgICAgIGlmIChi
LmlzRnVuY3Rpb24oZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bih0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGIodGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMs
IHQsIHRoaXMuY2xhc3NOYW1lKSkKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlm
ICh1KQotICAgICAgICAgICAgICAgIGZvciAodCA9IChlIHx8ICIiKS5tYXRjaCh3KSB8fCBbXTsg
cyA+IGE7IGErKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSB0aGlzW2FdLCByID0gMSA9
PT0gbi5ub2RlVHlwZSAmJiAobi5jbGFzc05hbWUgPyAoIiAiICsgbi5jbGFzc05hbWUgKyAiICIp
LnJlcGxhY2UoWCwgIiAiKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIiAiKSkgewotICAg
ICAgICAgICAgICAgIG8gPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChpID0gdFtvKytdKQot
ICAgICAgICAgICAgICAgICAgICAwID4gci5pbmRleE9mKCIgIiArIGkgKyAiICIpICYmIChyICs9
IGkgKyAiICIpOwotICAgICAgICAgICAgICAgIG4uY2xhc3NOYW1lID0gYi50cmltKHIpCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcwotICAgICAgICB9LAotICAgICAgICBy
ZW1vdmVDbGFzczogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIHQsIG4sIHIsIGksIG8s
IGEgPSAwLCBzID0gdGhpcy5sZW5ndGgsIHUgPSAwID09PSBhcmd1bWVudHMubGVuZ3RoIHx8ICJz
dHJpbmciID09IHR5cGVvZiBlICYmIGU7Ci0gICAgICAgICAgICBpZiAoYi5pc0Z1bmN0aW9uKGUp
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCkgewotICAgICAg
ICAgICAgICAgICAgICBiKHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLCB0LCB0aGlzLmNs
YXNzTmFtZSkpCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAodSkKLSAgICAg
ICAgICAgICAgICBmb3IgKHQgPSAoZSB8fCAiIikubWF0Y2godykgfHwgW107IHMgPiBhOyBhKysp
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuID0gdGhpc1thXSwgciA9IDEgPT09IG4ubm9kZVR5
cGUgJiYgKG4uY2xhc3NOYW1lID8gKCIgIiArIG4uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKFgs
ICIgIikgCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIiKSkgewotICAgICAgICAgICAgICAg
IG8gPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChpID0gdFtvKytdKQotICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoci5pbmRleE9mKCIgIiArIGkgKyAiICIpID49IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgICByID0gci5yZXBsYWNlKCIgIiArIGkgKyAiICIsICIgIik7Ci0gICAgICAg
ICAgICAgICAgbi5jbGFzc05hbWUgPSBlID8gYi50cmltKHIpIDogIiIKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB0aGlzCi0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZUNsYXNz
OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiA9IHR5cGVvZiBlLCByID0gImJv
b2xlYW4iID09IHR5cGVvZiB0OwotICAgICAgICAgICAgcmV0dXJuIGIuaXNGdW5jdGlvbihlKSA/
IHRoaXMuZWFjaChmdW5jdGlvbihuKSB7Ci0gICAgICAgICAgICAgICAgYih0aGlzKS50b2dnbGVD
bGFzcyhlLmNhbGwodGhpcywgbiwgdGhpcy5jbGFzc05hbWUsIHQpLCB0KQotICAgICAgICAgICAg
fSkgOiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCJzdHJpbmci
ID09PSBuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvLCBhID0gMCwgcyA9IGIodGhpcyks
IHUgPSB0LCBsID0gZS5tYXRjaCh3KSB8fCBbXTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KG8gPSBsW2ErK10pCi0gICAgICAgICAgICAgICAgICAgICAgICB1ID0gciA/IHUgOiAhcy5oYXND
bGFzcyhvKSwgc1t1ID8gImFkZENsYXNzIjogInJlbW92ZUNsYXNzIl0obykKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgKG4gPT09IGkgfHwgImJvb2xlYW4iID09PSBuKSAKLSAgICAgICAgICAgICAg
ICAgICAgJiYgKHRoaXMuY2xhc3NOYW1lICYmIGIuX2RhdGEodGhpcywgIl9fY2xhc3NOYW1lX18i
LCB0aGlzLmNsYXNzTmFtZSksIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgZT09
PSExID8gIiIgOiBiLl9kYXRhKHRoaXMsICJfX2NsYXNzTmFtZV9fIikgfHwgIiIpCi0gICAgICAg
ICAgICB9KQotICAgICAgICB9LAotICAgICAgICBoYXNDbGFzczogZnVuY3Rpb24oZSkgewotICAg
ICAgICAgICAgdmFyIHQgPSAiICIgKyBlICsgIiAiLCBuID0gMCwgciA9IHRoaXMubGVuZ3RoOwot
ICAgICAgICAgICAgZm9yICg7IHIgPiBuOyBuKyspCi0gICAgICAgICAgICAgICAgaWYgKDEgPT09
IHRoaXNbbl0ubm9kZVR5cGUgJiYgKCIgIiArIHRoaXNbbl0uY2xhc3NOYW1lICsgIiAiKS5yZXBs
YWNlKFgsICIgIikuaW5kZXhPZih0KSA+PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ITA7Ci0gICAgICAgICAgICByZXR1cm4gITEKLSAgICAgICAgfSwKLSAgICAgICAgdmFsOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgbiwgciwgaSwgbyA9IHRoaXNbMF07Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpID0gYi5pc0Z1bmN0aW9uKGUpLCB0aGlzLmVhY2goZnVuY3Rpb24o
bikgewotICAgICAgICAgICAgICAgICAgICB2YXIgbywgYSA9IGIodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIDEgPT09IHRoaXMubm9kZVR5cGUgJiYgKG8gPSBpID8gZS5jYWxsKHRoaXMsIG4s
IGEudmFsKCkpIDogZSwgbnVsbCA9PSBvID8gbyA9ICIiIDogIm51bWJlciIgPT0gdHlwZW9mIG8g
PyBvICs9ICIiIDogYi5pc0FycmF5KG8pICYmIChvID0gYi5tYXAobywgZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gZSA/ICIiIDogZSArICIiCi0g
ICAgICAgICAgICAgICAgICAgIH0pKSwgciA9IGIudmFsSG9va3NbdGhpcy50eXBlXSB8fCBiLnZh
bEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sIHIgJiYgInNldCJpbiByICYmIHIu
c2V0KHRoaXMsIG8sICJ2YWx1ZSIpICE9PSB0IHx8ICh0aGlzLnZhbHVlID0gbykpCi0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKG8pCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiByID0gYi52YWxIb29rc1tvLnR5cGVdIHx8IGIudmFsSG9va3Nbby5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpXSwgciAmJiAiZ2V0ImluIHIgJiYgKG4gPSByLmdldChvLCAidmFsdWUiKSkg
IT09IHQgPyBuIDogKG4gPSBvLnZhbHVlLCAic3RyaW5nIiA9PSB0eXBlb2YgbiA/IG4ucmVwbGFj
ZShVLCAiIikgOiBudWxsID09IG4gPyAiIiA6IG4pCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9KSwgYi5leHRlbmQoewotICAgICAgICB2YWxIb29rczogewotICAgICAgICAgICAgb3B0
aW9uOiB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciB0ID0gZS5hdHRyaWJ1dGVzLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIXQgfHwgdC5zcGVjaWZpZWQgPyBlLnZhbHVlIDogZS50ZXh0Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNlbGVjdDogewotICAgICAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdCwgbiwgciA9
IGUub3B0aW9ucywgaSA9IGUuc2VsZWN0ZWRJbmRleCwgbyA9ICJzZWxlY3Qtb25lIiA9PT0gZS50
eXBlIHx8IDAgPiBpLCBhID0gbyA/IG51bGw6IFtdLCBzID0gbyA/IGkgKyAxOiByLmxlbmd0aCwg
dSA9IDAgPiBpID8gczogbyA/IGk6IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyBzID4g
dTsgdSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSByW3VdLCAhKCFuLnNlbGVj
dGVkICYmIHUgIT09IGkgfHwgKGIuc3VwcG9ydC5vcHREaXNhYmxlZCA/IG4uZGlzYWJsZWQgOiBu
dWxsICE9PSBuLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkgfHwgbi5wYXJlbnROb2RlLmRpc2FibGVkICYmIGIubm9kZU5hbWUobi5wYXJlbnRO
b2RlLCAib3B0Z3JvdXAiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gYihu
KS52YWwoKSwgbykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGEucHVzaCh0KQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBi
Lm1ha2VBcnJheSh0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIoZSkuZmluZCgib3B0
aW9uIikuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vs
ZWN0ZWQgPSBiLmluQXJyYXkoYih0aGlzKS52YWwoKSwgbikgPj0gMAotICAgICAgICAgICAgICAg
ICAgICB9KSwgbi5sZW5ndGggfHwgKGUuc2VsZWN0ZWRJbmRleCA9LSAxKSwgbgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgYXR0cjogZnVuY3Rp
b24oZSwgbiwgcikgewotICAgICAgICAgICAgdmFyIG8sIGEsIHMsIHUgPSBlLm5vZGVUeXBlOwot
ICAgICAgICAgICAgaWYgKGUgJiYgMyAhPT0gdSAmJiA4ICE9PSB1ICYmIDIgIT09IHUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZSA9PT0gaSA/IGIucHJvcChl
LCBuLCByKSA6IChhID0gMSAhPT0gdSB8fCFiLmlzWE1MRG9jKGUpLCBhICYmIChuID0gbi50b0xv
d2VyQ2FzZSgpLCBvID0gYi5hdHRySG9va3Nbbl0gfHwgKEoudGVzdChuKSA/IHogOiBJKSksIHIg
PT09IHQgPyBvICYmIGEgJiYgImdldCJpbiBvICYmIG51bGwgIT09IChzID0gby5nZXQoZSwgbikp
ID8gcyA6ICh0eXBlb2YgZS5nZXRBdHRyaWJ1dGUgIT09IGkgJiYgKHMgPSBlLmdldEF0dHJpYnV0
ZShuKSksIG51bGwgPT0gcyA/IHQgOiBzKSA6IG51bGwgIT09IHIgPyBvICYmIGEgJiYgInNldCJp
biBvICYmIChzID0gby5zZXQoZSwgciwgbikpICE9PSB0ID8gcyA6IChlLnNldEF0dHJpYnV0ZShu
LCByICsgIiIpLCByKSA6IChiLnJlbW92ZUF0dHIoZSwgbiksIHQpKQotICAgICAgICB9LAotICAg
ICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiwgciwg
aSA9IDAsIG8gPSB0ICYmIHQubWF0Y2godyk7Ci0gICAgICAgICAgICBpZiAobyAmJiAxID09PSBl
Lm5vZGVUeXBlKQotICAgICAgICAgICAgICAgIHdoaWxlIChuID0gb1tpKytdKQotICAgICAgICAg
ICAgICAgICAgICByID0gYi5wcm9wRml4W25dIHx8IG4sIEoudGVzdChuKT8hUSAmJiBHLnRlc3Qo
bikgPyBlW2IuY2FtZWxDYXNlKCJkZWZhdWx0LSIgKyBuKV0gPSBlW3JdPSExIDogZVtyXT0hMSA6
IGIuYXR0cihlLCBuLCAiIiksIGUucmVtb3ZlQXR0cmlidXRlKFEgPyBuIDogcikKLSAgICAgICAg
fSwKLSAgICAgICAgYXR0ckhvb2tzOiB7Ci0gICAgICAgICAgICB0eXBlOiB7Ci0gICAgICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYi5z
dXBwb3J0LnJhZGlvVmFsdWUgJiYgInJhZGlvIiA9PT0gdCAmJiBiLm5vZGVOYW1lKGUsICJpbnB1
dCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGUudmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0KSwgbiAmJiAo
ZS52YWx1ZSA9IG4pLCB0Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHByb3BGaXg6IHsKLSAgICAgICAg
ICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAotICAgICAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25s
eSIsCi0gICAgICAgICAgICAiZm9yIjogImh0bWxGb3IiLAotICAgICAgICAgICAgImNsYXNzIjog
ImNsYXNzTmFtZSIsCi0gICAgICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAotICAgICAg
ICAgICAgY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCi0gICAgICAgICAgICBjZWxscGFkZGlu
ZzogImNlbGxQYWRkaW5nIiwKLSAgICAgICAgICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKLSAgICAg
ICAgICAgIGNvbHNwYW46ICJjb2xTcGFuIiwKLSAgICAgICAgICAgIHVzZW1hcDogInVzZU1hcCIs
Ci0gICAgICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKLSAgICAgICAgICAgIGNv
bnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIKLSAgICAgICAgfSwKLSAgICAgICAgcHJv
cDogZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgdmFyIGksIG8sIGEsIHMgPSBlLm5v
ZGVUeXBlOwotICAgICAgICAgICAgaWYgKGUgJiYgMyAhPT0gcyAmJiA4ICE9PSBzICYmIDIgIT09
IHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgPSAxICE9PSBzIHx8IWIuaXNYTUxEb2MoZSks
IGEgJiYgKG4gPSBiLnByb3BGaXhbbl0gfHwgbiwgbyA9IGIucHJvcEhvb2tzW25dKSwgciAhPT0g
dCA/IG8gJiYgInNldCJpbiBvICYmIChpID0gby5zZXQoZSwgciwgbikpICE9PSB0ID8gaSA6IGVb
bl0gPSByIDogbyAmJiAiZ2V0ImluIG8gJiYgbnVsbCAhPT0gKGkgPSBvLmdldChlLCBuKSkgPyBp
IDogZVtuXQotICAgICAgICB9LAotICAgICAgICBwcm9wSG9va3M6IHsKLSAgICAgICAgICAgIHRh
YkluZGV4OiB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBuID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbiAmJiBuLnNwZWNpZmllZCA/IHBhcnNlSW50KG4udmFsdWUs
IDEwKSA6IFYudGVzdChlLm5vZGVOYW1lKSB8fCBZLnRlc3QoZS5ub2RlTmFtZSkgJiYgZS5ocmVm
ID8gMCA6IHQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9KSwgeiA9IHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB2
YXIgciA9IGIucHJvcChlLCBuKSwgaSA9ICJib29sZWFuIiA9PSB0eXBlb2YgciAmJiBlLmdldEF0
dHJpYnV0ZShuKSwgbyA9ICJib29sZWFuIiA9PSB0eXBlb2YgciA/IEsgJiYgUSA/IG51bGwgIT0g
aTogRy50ZXN0KG4pID8gZVtiLmNhbWVsQ2FzZSgiZGVmYXVsdC0iICsgbildOiAhIWk6IGUuZ2V0
QXR0cmlidXRlTm9kZShuKTsKLSAgICAgICAgICAgIHJldHVybiBvICYmIG8udmFsdWUhPT0hMSA/
IG4udG9Mb3dlckNhc2UoKSA6IHQKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbihl
LCB0LCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4gdD09PSExID8gYi5yZW1vdmVBdHRyKGUsIG4p
IDogSyAmJiBRIHx8IUcudGVzdChuKSA/IGUuc2V0QXR0cmlidXRlKCFRICYmIGIucHJvcEZpeFtu
XSB8fCBuLCBuKSA6IGVbYi5jYW1lbENhc2UoImRlZmF1bHQtIiArIG4pXSA9IGVbbl09ITAsIG4K
LSAgICAgICAgfQotICAgIH0sIEsgJiYgUSB8fCAoYi5hdHRySG9va3MudmFsdWUgPSB7Ci0gICAg
ICAgIGdldDogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFyIHIgPSBlLmdldEF0dHJp
YnV0ZU5vZGUobik7Ci0gICAgICAgICAgICByZXR1cm4gYi5ub2RlTmFtZShlLCAiaW5wdXQiKSA/
IGUuZGVmYXVsdFZhbHVlIDogciAmJiByLnNwZWNpZmllZCA/IHIudmFsdWUgOiB0Ci0gICAgICAg
IH0sCi0gICAgICAgIHNldDogZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgcmV0dXJu
IGIubm9kZU5hbWUoZSwgImlucHV0IikgPyAoZS5kZWZhdWx0VmFsdWUgPSBuLCB0KSA6IEkgJiYg
SS5zZXQoZSwgbiwgcikKLSAgICAgICAgfQotICAgIH0pLCBRIHx8IChJID0gYi52YWxIb29rcy5i
dXR0b24gPSB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFy
IHIgPSBlLmdldEF0dHJpYnV0ZU5vZGUobik7Ci0gICAgICAgICAgICByZXR1cm4gciAmJiAoImlk
IiA9PT0gbiB8fCAibmFtZSIgPT09IG4gfHwgImNvb3JkcyIgPT09IG4gPyAiIiAhPT0gci52YWx1
ZSA6IHIuc3BlY2lmaWVkKSA/IHIudmFsdWUgOiB0Ci0gICAgICAgIH0sCi0gICAgICAgIHNldDog
ZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgdmFyIGkgPSBlLmdldEF0dHJpYnV0ZU5v
ZGUocik7Ci0gICAgICAgICAgICByZXR1cm4gaSB8fCBlLnNldEF0dHJpYnV0ZU5vZGUoaSA9IGUu
b3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUocikpLCBpLnZhbHVlID0gbiArPSAiIiwgInZh
bHVlIiA9PT0gciB8fCBuID09PSBlLmdldEF0dHJpYnV0ZShyKSA/IG4gOiB0Ci0gICAgICAgIH0K
LSAgICB9LCBiLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGUgPSB7Ci0gICAgICAgIGdldCA6IEku
Z2V0LCBzZXQgOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICBJLnNldChlLCAiIiA9
PT0gdD8hMSA6IHQsIG4pCi0gICAgICAgIH0KLSAgICB9LCBiLmVhY2goWyJ3aWR0aCIsICJoZWln
aHQiXSwgZnVuY3Rpb24oZSwgbikgewotICAgICAgICBiLmF0dHJIb29rc1tuXSA9IGIuZXh0ZW5k
KGIuYXR0ckhvb2tzW25dLCB7Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHIpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIiIgPT09IHIgPyAoZS5zZXRBdHRyaWJ1dGUobiwgImF1dG8i
KSwgcikgOiB0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAgfSkpLCBiLnN1cHBvcnQu
aHJlZk5vcm1hbGl6ZWQgfHwgKGIuZWFjaChbImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhlaWdo
dCJdLCBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgIGIuYXR0ckhvb2tzW25dID0gYi5leHRlbmQo
Yi5hdHRySG9va3Nbbl0sIHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgICAgIHZhciByID0gZS5nZXRBdHRyaWJ1dGUobiwgMik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGwgPT0gciA/IHQgOiByCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAg
fSksIGIuZWFjaChbImhyZWYiLCAic3JjIl0sIGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgYi5w
cm9wSG9va3NbdF0gPSB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCwgNCkKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0pKSwgYi5zdXBwb3J0LnN0eWxlIHx8IChiLmF0dHJIb29rcy5zdHlsZSA9IHsK
LSAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZS5zdHlsZS5j
c3NUZXh0IHx8IHQKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbihlLCB0KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gZS5zdHlsZS5jc3NUZXh0ID0gdCArICIiCi0gICAgICAgIH0KLSAg
ICB9KSwgYi5zdXBwb3J0Lm9wdFNlbGVjdGVkIHx8IChiLnByb3BIb29rcy5zZWxlY3RlZCA9IGIu
ZXh0ZW5kKGIucHJvcEhvb2tzLnNlbGVjdGVkLCB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgdmFyIHQgPSBlLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICByZXR1cm4g
dCAmJiAodC5zZWxlY3RlZEluZGV4LCB0LnBhcmVudE5vZGUgJiYgdC5wYXJlbnROb2RlLnNlbGVj
dGVkSW5kZXgpLCBudWxsCi0gICAgICAgIH0KLSAgICB9KSksIGIuc3VwcG9ydC5lbmN0eXBlIHx8
IChiLnByb3BGaXguZW5jdHlwZSA9ICJlbmNvZGluZyIpLCBiLnN1cHBvcnQuY2hlY2tPbiB8fCBi
LmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbigpIHsKLSAgICAgICAgYi52YWxI
b29rc1t0aGlzXSA9IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsID09PSBlLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA/ICJvbiIgOiBl
LnZhbHVlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KSwgYi5lYWNoKFsicmFkaW8i
LCAiY2hlY2tib3giXSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGIudmFsSG9va3NbdGhpc10gPSBi
LmV4dGVuZChiLnZhbEhvb2tzW3RoaXNdLCB7Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUs
IG4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYi5pc0FycmF5KG4pID8gZS5jaGVja2VkID0g
Yi5pbkFycmF5KGIoZSkudmFsKCksIG4pID49IDAgOiB0Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pCi0gICAgfSk7Ci0gICAgdmFyIFogPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ks
IGV0ID0gL15rZXkvLCB0dCA9IC9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLywgbnQgPSAv
Xig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sIHJ0ID0gL14oW14uXSopKD86XC4oLisp
fCkkLzsKLSAgICBmdW5jdGlvbiBpdCgpIHsKLSAgICAgICAgcmV0dXJuICEwCi0gICAgfQotICAg
IGZ1bmN0aW9uIG90KCkgewotICAgICAgICByZXR1cm4gITEKLSAgICB9Ci0gICAgYi5ldmVudCA9
IHsKLSAgICAgICAgZ2xvYmFsOiB7fSwKLSAgICAgICAgYWRkOiBmdW5jdGlvbihlLCBuLCByLCBv
LCBhKSB7Ci0gICAgICAgICAgICB2YXIgcywgdSwgbCwgYywgcCwgZiwgZCwgaCwgZywgbSwgeSwg
diA9IGIuX2RhdGEoZSk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIHIu
aGFuZGxlciAmJiAoYyA9IHIsIHIgPSBjLmhhbmRsZXIsIGEgPSBjLnNlbGVjdG9yKSwgci5ndWlk
IHx8IChyLmd1aWQgPSBiLmd1aWQrKyksICh1ID0gdi5ldmVudHMpIHx8ICh1ID0gdi5ldmVudHMg
PSB7fSksIChmID0gdi5oYW5kbGUpIHx8IChmID0gdi5oYW5kbGUgPSBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYiA9PT0gaSB8fCBlICYmIGIuZXZlbnQu
dHJpZ2dlcmVkID09PSBlLnR5cGUgPyB0IDogYi5ldmVudC5kaXNwYXRjaC5hcHBseShmLmVsZW0s
IGFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICB9LCBmLmVsZW0gPSBlKSwgbiA9IChuIHx8ICIi
KS5tYXRjaCh3KSB8fCBbIiJdLCBsID0gbi5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KGwtLSkKLSAgICAgICAgICAgICAgICAgICAgcyA9IHJ0LmV4ZWMobltsXSkgfHwgW10sIGcgPSB5
ID0gc1sxXSwgbSA9IChzWzJdIHx8ICIiKS5zcGxpdCgiLiIpLnNvcnQoKSwgcCA9IGIuZXZlbnQu
c3BlY2lhbFtnXSB8fCB7fSwgZyA9IChhID8gcC5kZWxlZ2F0ZVR5cGUgOiBwLmJpbmRUeXBlKSB8
fCBnLCBwID0gYi5ldmVudC5zcGVjaWFsW2ddIHx8IHt9LCBkID0gYi5leHRlbmQoewotICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBnLAotICAgICAgICAgICAgICAgICAgICBvcmlnVHlwZTogeSwK
LSAgICAgICAgICAgICAgICAgICAgZGF0YTogbywKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxl
cjogciwKLSAgICAgICAgICAgICAgICAgICAgZ3VpZDogci5ndWlkLAotICAgICAgICAgICAgICAg
ICAgICBzZWxlY3RvcjogYSwKLSAgICAgICAgICAgICAgICAgICAgbmVlZHNDb250ZXh0OiBhICYm
IGIuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChhKSwKLSAgICAgICAgICAgICAgICAgICAg
bmFtZXNwYWNlOiBtLmpvaW4oIi4iKQotICAgICAgICAgICAgICAgIH0sIGMpLCAoaCA9IHVbZ10p
IHx8IChoID0gdVtnXSA9IFtdLCBoLmRlbGVnYXRlQ291bnQgPSAwLCBwLnNldHVwICYmIHAuc2V0
dXAuY2FsbChlLCBvLCBtLCBmKSE9PSExIHx8IChlLmFkZEV2ZW50TGlzdGVuZXIgPyBlLmFkZEV2
ZW50TGlzdGVuZXIoZywgZiwgITEpIDogZS5hdHRhY2hFdmVudCAmJiBlLmF0dGFjaEV2ZW50KCJv
biIgKyBnLCBmKSkpLCBwLmFkZCAmJiAocC5hZGQuY2FsbChlLCBkKSwgZC5oYW5kbGVyLmd1aWQg
fHwgKGQuaGFuZGxlci5ndWlkID0gci5ndWlkKSksIGEgPyBoLnNwbGljZShoLmRlbGVnYXRlQ291
bnQrKywgMCwgZCkgOiBoLnB1c2goZCksIGIuZXZlbnQuZ2xvYmFsW2ddPSEwOwotICAgICAgICAg
ICAgICAgIGUgPSBudWxsCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHJlbW92
ZTogZnVuY3Rpb24oZSwgdCwgbiwgciwgaSkgewotICAgICAgICAgICAgdmFyIG8sIGEsIHMsIHUs
IGwsIGMsIHAsIGYsIGQsIGgsIGcsIG0gPSBiLmhhc0RhdGEoZSkgJiYgYi5fZGF0YShlKTsKLSAg
ICAgICAgICAgIGlmIChtICYmIChjID0gbS5ldmVudHMpKSB7Ci0gICAgICAgICAgICAgICAgdCA9
ICh0IHx8ICIiKS5tYXRjaCh3KSB8fCBbIiJdLCBsID0gdC5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKGwtLSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHMgPSBydC5leGVjKHRbbF0p
IHx8IFtdLCBkID0gZyA9IHNbMV0sIGggPSAoc1syXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICwgZCkgewotICAgICAgICAgICAgICAgICAgICBwID0g
Yi5ldmVudC5zcGVjaWFsW2RdIHx8IHt9LCBkID0gKHIgPyBwLmRlbGVnYXRlVHlwZSA6IHAuYmlu
ZFR5cGUpIHx8IGQsIGYgPSBjW2RdIHx8IFtdLCBzID0gc1syXSAmJiBSZWdFeHAoIihefFxcLiki
ICsgaC5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIpLCB1ID0gbyA9IGYubGVuZ3Ro
OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoby0tKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYSA9IGZbb10sICFpICYmIGcgIT09IGEub3JpZ1R5cGUgfHwgbiAmJiBuLmd1aWQgIT09IGEu
Z3VpZCB8fCBzJiYhcy50ZXN0KGEubmFtZXNwYWNlKSB8fCByICYmIHIgIT09IGEuc2VsZWN0b3Ig
JiYgKCIqKiIgIT09IHIgfHwhYS5zZWxlY3RvcikgfHwgKGYuc3BsaWNlKG8sIDEpLCBhLnNlbGVj
dG9yICYmIGYuZGVsZWdhdGVDb3VudC0tLCBwLnJlbW92ZSAmJiBwLnJlbW92ZS5jYWxsKGUsIGEp
KTsKLSAgICAgICAgICAgICAgICAgICAgdSYmIWYubGVuZ3RoICYmIChwLnRlYXJkb3duICYmIHAu
dGVhcmRvd24uY2FsbChlLCBoLCBtLmhhbmRsZSkhPT0hMSB8fCBiLnJlbW92ZUV2ZW50KGUsIGQs
IG0uaGFuZGxlKSwgZGVsZXRlIGNbZF0pCi0gICAgICAgICAgICAgICAgfSBlbHNlIAotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGQgaW4gYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGIuZXZl
bnQucmVtb3ZlKGUsIGQgKyB0W2xdLCBuLCByLCAhMCk7Ci0gICAgICAgICAgICAgICAgYi5pc0Vt
cHR5T2JqZWN0KGMpICYmIChkZWxldGUgbS5oYW5kbGUsIGIuX3JlbW92ZURhdGEoZSwgImV2ZW50
cyIpKQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICB0cmlnZ2VyOiBmdW5jdGlv
bihuLCByLCBpLCBhKSB7Ci0gICAgICAgICAgICB2YXIgcywgdSwgbCwgYywgcCwgZiwgZCwgaCA9
IFtpIHx8IG9dLCBnID0geS5jYWxsKG4sICJ0eXBlIikgPyBuLnR5cGU6IG4sIG0gPSB5LmNhbGwo
biwgIm5hbWVzcGFjZSIpID8gbi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTogW107Ci0gICAgICAgICAg
ICBpZiAobCA9IGYgPSBpID0gaSB8fCBvLCAzICE9PSBpLm5vZGVUeXBlICYmIDggIT09IGkubm9k
ZVR5cGUmJiFudC50ZXN0KGcgKyBiLmV2ZW50LnRyaWdnZXJlZCkgJiYgKGcuaW5kZXhPZigiLiIp
ID49IDAgJiYgKG0gPSBnLnNwbGl0KCIuIiksIGcgPSBtLnNoaWZ0KCksIG0uc29ydCgpCi0gICAg
ICAgICAgICAgICAgKSwgdSA9IDAgPiBnLmluZGV4T2YoIjoiKSAmJiAib24iICsgZywgbiA9IG5b
Yi5leHBhbmRvXSA/IG4gOiBuZXcgYi5FdmVudChnLCAib2JqZWN0IiA9PSB0eXBlb2YgbiAmJiBu
KSwgbi5pc1RyaWdnZXI9ITAsIG4ubmFtZXNwYWNlID0gbS5qb2luKCIuIiksIG4ubmFtZXNwYWNl
X3JlID0gbi5uYW1lc3BhY2UgPyBSZWdFeHAoIihefFxcLikiICsgbS5qb2luKCJcXC4oPzouKlxc
LnwpIikgKyAiKFxcLnwkKSIpIDogbnVsbCwgbi5yZXN1bHQgPSB0LCBuLnRhcmdldCB8fCAobi50
YXJnZXQgPSBpKSwgciA9IG51bGwgPT0gciA/IFtuXSA6IGIubWFrZUFycmF5KHIsIFtuXSksIHAg
PSBiLmV2ZW50LnNwZWNpYWxbZ10gfHwge30sIGEgfHwhcC50cmlnZ2VyIHx8IHAudHJpZ2dlci5h
cHBseShpLCByKSE9PSExKSkgewotICAgICAgICAgICAgICAgIGlmICghYSYmIXAubm9CdWJibGUm
JiFiLmlzV2luZG93KGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IHAuZGVsZWdh
dGVUeXBlIHx8IGcsIG50LnRlc3QoYyArIGcpIAotICAgICAgICAgICAgICAgICAgICAgICAgfHwg
KGwgPSBsLnBhcmVudE5vZGUpOwotICAgICAgICAgICAgICAgICAgICBsOwotICAgICAgICAgICAg
ICAgICAgICBsID0gbC5wYXJlbnROb2RlKWgucHVzaChsKSwgZiA9IGw7Ci0gICAgICAgICAgICAg
ICAgICAgIGYgPT09IChpLm93bmVyRG9jdW1lbnQgfHwgbykgJiYgaC5wdXNoKGYuZGVmYXVsdFZp
ZXcgfHwgZi5wYXJlbnRXaW5kb3cgfHwgZSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZCA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChsID0gaFtkKytdKSYmIW4uaXNQ
cm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbi50eXBlID0gZCA+IDEg
PyBjIDogcC5iaW5kVHlwZSB8fCBnLCBzID0gKGIuX2RhdGEobCwgImV2ZW50cyIpIHx8IHt9KVtu
LnR5cGVdICYmIGIuX2RhdGEobCwgImhhbmRsZSIpLCBzICYmIHMuYXBwbHkobCwgciksIHMgPSB1
ICYmIGxbdV0sIHMgJiYgYi5hY2NlcHREYXRhKGwpICYmIHMuYXBwbHkgJiYgcy5hcHBseShsLCBy
KT09PSExICYmIG4ucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobi50eXBl
ID0gZywgIShhIHx8IG4uaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgcC5fZGVmYXVsdCAmJiBwLl9k
ZWZhdWx0LmFwcGx5KGkub3duZXJEb2N1bWVudCwgcikhPT0hMSB8fCAiY2xpY2siID09PSBnICYm
IGIubm9kZU5hbWUoaSwgImEiKSB8fCFiLmFjY2VwdERhdGEoaSkgfHwhdSB8fCFpW2ddIHx8IGIu
aXNXaW5kb3coaSkKLSAgICAgICAgICAgICAgICAgICAgKSkgewotICAgICAgICAgICAgICAgICAg
ICBmID0gaVt1XSwgZiAmJiAoaVt1XSA9IG51bGwpLCBiLmV2ZW50LnRyaWdnZXJlZCA9IGc7Ci0g
ICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpW2ddKCkK
LSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodikge30KLSAgICAgICAgICAgICAgICAgICAg
Yi5ldmVudC50cmlnZ2VyZWQgPSB0LCBmICYmIChpW3VdID0gZikKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG4ucmVzdWx0Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBlID0gYi5l
dmVudC5maXgoZSk7Ci0gICAgICAgICAgICB2YXIgbiwgciwgaSwgbywgYSwgcyA9IFtdLCB1ID0g
aC5jYWxsKGFyZ3VtZW50cyksIGwgPSAoYi5fZGF0YSh0aGlzLCAiZXZlbnRzIikgfHwge30pW2Uu
dHlwZV0gfHwgW10sIGMgPSBiLmV2ZW50LnNwZWNpYWxbZS50eXBlXSB8fCB7fTsKLSAgICAgICAg
ICAgIGlmICh1WzBdID0gZSwgZS5kZWxlZ2F0ZVRhcmdldCA9IHRoaXMsICFjLnByZURpc3BhdGNo
IHx8IGMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLCBlKSE9PSExKSB7Ci0gICAgICAgICAgICAgICAg
cyA9IGIuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLCBlLCBsKSwgbiA9IDA7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKChvID0gc1tuKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQgPSBvLmVsZW0sIGEgPSAwOwotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoKGkgPSBvLmhhbmRsZXJzW2ErK10pJiYhZS5pc0ltbWVk
aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmUgfHwgZS5uYW1lc3BhY2Vf
cmUudGVzdChpLm5hbWVzcGFjZSkpICYmIChlLmhhbmRsZU9iaiA9IGksIGUuZGF0YSA9IGkuZGF0
YSwgciA9ICgoYi5ldmVudC5zcGVjaWFsW2kub3JpZ1R5cGVdIHx8IHt9KS5oYW5kbGUgfHwgaS5o
YW5kbGVyKS5hcHBseShvLmVsZW0sIHUpLCByICE9PSB0ICYmIChlLnJlc3VsdCA9IHIpPT09ITEg
JiYgKGUucHJldmVudERlZmF1bHQoKSwgZS5zdG9wUHJvcGFnYXRpb24oKSkpCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBjLnBvc3REaXNwYXRjaCAmJiBjLnBvc3RE
aXNwYXRjaC5jYWxsKHRoaXMsIGUpLCBlLnJlc3VsdAotICAgICAgICAgICAgfQotICAgICAgICB9
LAotICAgICAgICBoYW5kbGVyczogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFyIHIs
IGksIG8sIGEsIHMgPSBbXSwgdSA9IG4uZGVsZWdhdGVDb3VudCwgbCA9IGUudGFyZ2V0OwotICAg
ICAgICAgICAgaWYgKHUgJiYgbC5ub2RlVHlwZSAmJiAoIWUuYnV0dG9uIHx8ICJjbGljayIgIT09
IGUudHlwZSkpCi0gICAgICAgICAgICAgICAgZm9yICg7IGwgIT0gdGhpczsgbCA9IGwucGFyZW50
Tm9kZSB8fCB0aGlzKQotICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PT0gbC5ub2RlVHlwZSAm
JiAobC5kaXNhYmxlZCE9PSEwIHx8ICJjbGljayIgIT09IGUudHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAobyA9IFtdLCBhID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHUgPiBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYSsrKWkgPSBuW2FdLCByID0gaS5zZWxl
Y3RvciArICIgIiwgb1tyXSA9PT0gdCAmJiAob1tyXSA9IGkubmVlZHNDb250ZXh0ID8gYihyLCB0
aGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbmRleChsKSA+PSAwIDogYi5maW5k
KHIsIHRoaXMsIG51bGwsIFtsXSkubGVuZ3RoKSwgb1tyXSAmJiBvLnB1c2goaSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgby5sZW5ndGggJiYgcy5wdXNoKHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbTogbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlcnM6IG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbi5sZW5ndGggPiB1ICYmIHMucHVzaCh7
Ci0gICAgICAgICAgICAgICAgZWxlbTogdGhpcywKLSAgICAgICAgICAgICAgICBoYW5kbGVyczog
bi5zbGljZSh1KQotICAgICAgICAgICAgfSksIHMKLSAgICAgICAgfSwKLSAgICAgICAgZml4OiBm
dW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBpZiAoZVtiLmV4cGFuZG9dKQotICAgICAgICAgICAg
ICAgIHJldHVybiBlOwotICAgICAgICAgICAgdmFyIHQsIG4sIHIsIGkgPSBlLnR5cGUsIGEgPSBl
LCBzID0gdGhpcy5maXhIb29rc1tpXTsKLSAgICAgICAgICAgIHMgfHwgKHRoaXMuZml4SG9va3Nb
aV0gPSBzID0gdHQudGVzdChpKSA/IHRoaXMubW91c2VIb29rcyA6IGV0LnRlc3QoaSkgPyB0aGlz
LmtleUhvb2tzIDoge30pLCByID0gcy5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KHMucHJvcHMp
IDogdGhpcy5wcm9wcywgZSA9IG5ldyBiLkV2ZW50KGEpLCB0ID0gci5sZW5ndGg7Ci0gICAgICAg
ICAgICB3aGlsZSAodC0tKQotICAgICAgICAgICAgICAgIG4gPSByW3RdLCBlW25dID0gYVtuXTsK
LSAgICAgICAgICAgIHJldHVybiBlLnRhcmdldCB8fCAoZS50YXJnZXQgPSBhLnNyY0VsZW1lbnQg
fHwgbyksIDMgPT09IGUudGFyZ2V0Lm5vZGVUeXBlICYmIChlLnRhcmdldCA9IGUudGFyZ2V0LnBh
cmVudE5vZGUpLCBlLm1ldGFLZXk9ISFlLm1ldGFLZXksIHMuZmlsdGVyID8gcy5maWx0ZXIoZSwg
YSkgOiBlCi0gICAgICAgIH0sCi0gICAgICAgIHByb3BzOiAiYWx0S2V5IGJ1YmJsZXMgY2FuY2Vs
YWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJn
ZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAotICAg
ICAgICBmaXhIb29rczoge30sCi0gICAgICAgIGtleUhvb2tzOiB7Ci0gICAgICAgICAgICBwcm9w
czogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksCi0gICAgICAgICAgICBm
aWx0ZXI6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBl
LndoaWNoICYmIChlLndoaWNoID0gbnVsbCAhPSB0LmNoYXJDb2RlID8gdC5jaGFyQ29kZSA6IHQu
a2V5Q29kZSksIGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgbW91c2VIb29r
czogewotICAgICAgICAgICAgcHJvcHM6ICJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkg
ZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0
b0VsZW1lbnQiLnNwbGl0KCIgIiksCi0gICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKGUsIG4p
IHsKLSAgICAgICAgICAgICAgICB2YXIgciwgaSwgYSwgcyA9IG4uYnV0dG9uLCB1ID0gbi5mcm9t
RWxlbWVudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBlLnBhZ2VYICYmIG51bGwg
IT0gbi5jbGllbnRYICYmIChpID0gZS50YXJnZXQub3duZXJEb2N1bWVudCB8fCBvLCBhID0gaS5k
b2N1bWVudEVsZW1lbnQsIHIgPSBpLmJvZHksIGUucGFnZVggPSBuLmNsaWVudFggKyAoYSAmJiBh
LnNjcm9sbExlZnQgfHwgciAmJiByLnNjcm9sbExlZnQgfHwgMCkgLSAoYSAmJiBhLmNsaWVudExl
ZnQgfHwgciAmJiByLmNsaWVudExlZnQgfHwgMCksIGUucGFnZVkgPSBuLmNsaWVudFkgKyAoYSAm
JiBhLnNjcm9sbFRvcCB8fCByICYmIHIuc2Nyb2xsVG9wIHx8IDApIC0gKGEgJiYgYS5jbGllbnRU
b3AgfHwgciAmJiByLmNsaWVudFRvcCB8fCAwKSksICFlLnJlbGF0ZWRUYXJnZXQgJiYgdSAmJiAo
ZS5yZWxhdGVkVGFyZ2V0ID0gdSA9PT0gZS50YXJnZXQgPyBuLnRvRWxlbWVudCA6IHUpLCBlLndo
aWNoIHx8IHMgPT09IHQgfHwgKGUud2hpY2ggPSAxICYgcyA/IDEgOiAyICYgcyA/IDMgOiA0ICYg
cyA/IDIgOiAwKSwgZQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBzcGVjaWFs
OiB7Ci0gICAgICAgICAgICBsb2FkOiB7Ci0gICAgICAgICAgICAgICAgbm9CdWJibGU6ICEwCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgY2xpY2s6IHsKLSAgICAgICAgICAgICAgICB0cmln
Z2VyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIubm9kZU5hbWUo
dGhpcywgImlucHV0IikgJiYgImNoZWNrYm94IiA9PT0gdGhpcy50eXBlICYmIHRoaXMuY2xpY2sg
PyAodGhpcy5jbGljaygpLCAhMSkgOiB0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIGZvY3VzOiB7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzICE9PSBvLmFjdGl2ZUVsZW1lbnQg
JiYgdGhpcy5mb2N1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXMoKSwgITEKLSAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCAoZSkge30KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
IGRlbGVnYXRlVHlwZTogImZvY3VzaW4iCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgYmx1
cjogewotICAgICAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcyA9PT0gby5hY3RpdmVFbGVtZW50ICYmIHRoaXMuYmx1ciA/ICh0
aGlzLmJsdXIoKSwgITEpIDogdAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
ZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgYmVm
b3JldW5sb2FkOiB7Ci0gICAgICAgICAgICAgICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGUucmVzdWx0ICE9PSB0ICYmIChlLm9yaWdpbmFsRXZlbnQu
cmV0dXJuVmFsdWUgPSBlLnJlc3VsdCkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0gICAgICAgIHNpbXVsYXRlOiBmdW5jdGlvbihlLCB0LCBuLCByKSB7Ci0g
ICAgICAgICAgICB2YXIgaSA9IGIuZXh0ZW5kKG5ldyBiLkV2ZW50LCBuLCB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogZSwKLSAgICAgICAgICAgICAgICBpc1NpbXVsYXRlZDogITAsCi0gICAgICAg
ICAgICAgICAgb3JpZ2luYWxFdmVudDoge30KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ciA/IGIuZXZlbnQudHJpZ2dlcihpLCBudWxsLCB0KSA6IGIuZXZlbnQuZGlzcGF0Y2guY2FsbCh0
LCBpKSwgaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSAmJiBuLnByZXZlbnREZWZhdWx0KCkKLSAgICAg
ICAgfQotICAgIH0sIGIucmVtb3ZlRXZlbnQgPSBvLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBmdW5j
dGlvbihlLCB0LCBuKSB7Ci0gICAgICAgIGUucmVtb3ZlRXZlbnRMaXN0ZW5lciAmJiBlLnJlbW92
ZUV2ZW50TGlzdGVuZXIodCwgbiwgITEpCi0gICAgfSA6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAg
ICAgICAgdmFyIHIgPSAib24iICsgdDsKLSAgICAgICAgZS5kZXRhY2hFdmVudCAmJiAodHlwZW9m
IGVbcl0gPT09IGkgJiYgKGVbcl0gPSBudWxsKSwgZS5kZXRhY2hFdmVudChyLCBuKSkKLSAgICB9
LCBiLkV2ZW50ID0gZnVuY3Rpb24oZSwgbikgewotICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5j
ZW9mIGIuRXZlbnQgPyAoZSAmJiBlLnR5cGUgPyAodGhpcy5vcmlnaW5hbEV2ZW50ID0gZSwgdGhp
cy50eXBlID0gZS50eXBlLCB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGUuZGVmYXVsdFByZXZl
bnRlZCB8fCBlLnJldHVyblZhbHVlPT09ITEgfHwgZS5nZXRQcmV2ZW50RGVmYXVsdCAmJiBlLmdl
dFByZXZlbnREZWZhdWx0KCkgPyBpdCA6IG90KSA6IHRoaXMudHlwZSA9IGUsIG4gJiYgYi5leHRl
bmQodGhpcywgbiksIHRoaXMudGltZVN0YW1wID0gZSAmJiBlLnRpbWVTdGFtcCB8fCBiLm5vdygp
LCB0aGlzW2IuZXhwYW5kb109ITAsIHQpIDogbmV3IGIuRXZlbnQoZSwgbikKLSAgICB9LCBiLkV2
ZW50LnByb3RvdHlwZSA9IHsKLSAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkOiBvdCwKLSAgICAg
ICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IG90LAotICAgICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0
aW9uU3RvcHBlZDogb3QsCi0gICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotICAgICAgICAgICAgdGhpcy5p
c0RlZmF1bHRQcmV2ZW50ZWQgPSBpdCwgZSAmJiAoZS5wcmV2ZW50RGVmYXVsdCA/IGUucHJldmVu
dERlZmF1bHQoKSA6IGUucmV0dXJuVmFsdWU9ITEpCi0gICAgICAgIH0sCi0gICAgICAgIHN0b3BQ
cm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2lu
YWxFdmVudDsKLSAgICAgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBpdCwgZSAm
JiAoZS5zdG9wUHJvcGFnYXRpb24gJiYgZS5zdG9wUHJvcGFnYXRpb24oKSwgZS5jYW5jZWxCdWJi
bGU9ITApCi0gICAgICAgIH0sCi0gICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk
ID0gaXQsIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkKLSAgICAgICAgfQotICAgIH0sIGIuZWFjaCh7
Ci0gICAgICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAotICAgICAgICBtb3VzZWxlYXZlOiAi
bW91c2VvdXQiCi0gICAgfSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICBiLmV2ZW50LnNwZWNp
YWxbZV0gPSB7Ci0gICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6IHQsCi0gICAgICAgICAgICBiaW5k
VHlwZTogdCwKLSAgICAgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
ICAgIHZhciBuLCByID0gdGhpcywgaSA9IGUucmVsYXRlZFRhcmdldCwgbyA9IGUuaGFuZGxlT2Jq
OwotICAgICAgICAgICAgICAgIHJldHVybiAoIWkgfHwgaSAhPT0gciYmIWIuY29udGFpbnMociwg
aSkpICYmIChlLnR5cGUgPSBvLm9yaWdUeXBlLCBuID0gby5oYW5kbGVyLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyksIGUudHlwZSA9IHQpLCBuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
KSwgYi5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgfHwgKGIuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7
Ci0gICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBiLm5vZGVO
YW1lKHRoaXMsICJmb3JtIik/ITEgOiAoYi5ldmVudC5hZGQodGhpcywgImNsaWNrLl9zdWJtaXQg
a2V5cHJlc3MuX3N1Ym1pdCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgbiA9
IGUudGFyZ2V0LCByID0gYi5ub2RlTmFtZShuLCAiaW5wdXQiKSB8fCBiLm5vZGVOYW1lKG4sICJi
dXR0b24iKSA/IG4uZm9ybTogdDsKLSAgICAgICAgICAgICAgICByJiYhYi5fZGF0YShyLCAic3Vi
bWl0QnViYmxlcyIpICYmIChiLmV2ZW50LmFkZChyLCAic3VibWl0Ll9zdWJtaXQiLCBmdW5jdGlv
bihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUuX3N1Ym1pdF9idWJibGU9ITAKLSAgICAgICAg
ICAgICAgICB9KSwgYi5fZGF0YShyLCAic3VibWl0QnViYmxlcyIsICEwKSkKLSAgICAgICAgICAg
IH0pLCB0KQotICAgICAgICB9LAotICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgIGUuX3N1Ym1pdF9idWJibGUgJiYgKGRlbGV0ZSBlLl9zdWJtaXRfYnViYmxl
LCB0aGlzLnBhcmVudE5vZGUmJiFlLmlzVHJpZ2dlciAmJiBiLmV2ZW50LnNpbXVsYXRlKCJzdWJt
aXQiLCB0aGlzLnBhcmVudE5vZGUsIGUsICEwKSkKLSAgICAgICAgfSwKLSAgICAgICAgdGVhcmRv
d246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGIubm9kZU5hbWUodGhpcywgImZv
cm0iKT8hMSA6IChiLmV2ZW50LnJlbW92ZSh0aGlzLCAiLl9zdWJtaXQiKSwgdCkKLSAgICAgICAg
fQotICAgIH0pLCBiLnN1cHBvcnQuY2hhbmdlQnViYmxlcyB8fCAoYi5ldmVudC5zcGVjaWFsLmNo
YW5nZSA9IHsKLSAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJu
IFoudGVzdCh0aGlzLm5vZGVOYW1lKSA/ICgoImNoZWNrYm94IiA9PT0gdGhpcy50eXBlIHx8ICJy
YWRpbyIgPT09IHRoaXMudHlwZSkgJiYgKGIuZXZlbnQuYWRkKHRoaXMsICJwcm9wZXJ0eWNoYW5n
ZS5fY2hhbmdlIiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICJjaGVja2VkIiA9PT0g
ZS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSAmJiAodGhpcy5fanVzdF9jaGFuZ2VkPSEwKQot
ICAgICAgICAgICAgfSksIGIuZXZlbnQuYWRkKHRoaXMsICJjbGljay5fY2hhbmdlIiwgZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2Vy
ICYmICh0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLCBiLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLCB0
aGlzLCBlLCAhMCkKLSAgICAgICAgICAgIH0pKSwgITEpIDogKGIuZXZlbnQuYWRkKHRoaXMsICJi
ZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZh
ciB0ID0gZS50YXJnZXQ7Ci0gICAgICAgICAgICAgICAgWi50ZXN0KHQubm9kZU5hbWUpJiYhYi5f
ZGF0YSh0LCAiY2hhbmdlQnViYmxlcyIpICYmIChiLmV2ZW50LmFkZCh0LCAiY2hhbmdlLl9jaGFu
Z2UiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgICF0aGlzLnBhcmVudE5vZGUg
fHwgZS5pc1NpbXVsYXRlZCB8fCBlLmlzVHJpZ2dlciB8fCBiLmV2ZW50LnNpbXVsYXRlKCJjaGFu
Z2UiLCB0aGlzLnBhcmVudE5vZGUsIGUsICEwKQotICAgICAgICAgICAgICAgIH0pLCBiLl9kYXRh
KHQsICJjaGFuZ2VCdWJibGVzIiwgITApKQotICAgICAgICAgICAgfSksIHQpCi0gICAgICAgIH0s
Ci0gICAgICAgIGhhbmRsZTogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIG4gPSBlLnRh
cmdldDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzICE9PSBuIHx8IGUuaXNTaW11bGF0ZWQgfHwg
ZS5pc1RyaWdnZXIgfHwgInJhZGlvIiAhPT0gbi50eXBlICYmICJjaGVja2JveCIgIT09IG4udHlw
ZSA/IGUuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHQKLSAgICAg
ICAgfSwKLSAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJu
IGIuZXZlbnQucmVtb3ZlKHRoaXMsICIuX2NoYW5nZSIpLCAhWi50ZXN0KHRoaXMubm9kZU5hbWUp
Ci0gICAgICAgIH0KLSAgICB9KSwgYi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzIHx8IGIuZWFjaCh7
Ci0gICAgICAgIGZvY3VzOiAiZm9jdXNpbiIsCi0gICAgICAgIGJsdXI6ICJmb2N1c291dCIKLSAg
ICB9LCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIHZhciBuID0gMCwgciA9IGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgIGIuZXZlbnQuc2ltdWxhdGUodCwgZS50YXJnZXQsIGIuZXZlbnQuZml4
KGUpLCAhMCkKLSAgICAgICAgfTsKLSAgICAgICAgYi5ldmVudC5zcGVjaWFsW3RdID0gewotICAg
ICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIDAgPT09IG4rKyYm
by5hZGRFdmVudExpc3RlbmVyKGUsIHIsICEwKQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAwPT09LS1uICYmIG8ucmVt
b3ZlRXZlbnRMaXN0ZW5lcihlLCByLCAhMCkKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0pLCBiLmZuLmV4dGVuZCh7Ci0gICAgICAgIG9uOiBmdW5jdGlvbihlLCBuLCByLCBpLCBvKSB7
Ci0gICAgICAgICAgICB2YXIgYSwgczsKLSAgICAgICAgICAgIGlmICgib2JqZWN0IiA9PSB0eXBl
b2YgZSkgewotICAgICAgICAgICAgICAgICJzdHJpbmciICE9IHR5cGVvZiBuICYmIChyID0gciB8
fCBuLCBuID0gdCk7Ci0gICAgICAgICAgICAgICAgZm9yIChhIGluIGUpCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMub24oYSwgbiwgciwgZVthXSwgbyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChudWxsID09IHIgJiYgbnVsbCA9
PSBpID8gKGkgPSBuLCByID0gbiA9IHQpIDogbnVsbCA9PSBpICYmICgic3RyaW5nIiA9PSB0eXBl
b2YgbiA/IChpID0gciwgciA9IHQpIDogKGkgPSByLCByID0gbiwgbiA9IHQpKSwgaT09PSExKQot
ICAgICAgICAgICAgICAgIGkgPSBvdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgcmV0dXJuIDEgPT09IG8gJiYgKHMg
PSBpLCBpID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBiKCkub2ZmKGUp
LCBzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKLSAgICAgICAgICAgIH0sIGkuZ3VpZCA9IHMuZ3Vp
ZCB8fCAocy5ndWlkID0gYi5ndWlkKyspKSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIGIuZXZlbnQuYWRkKHRoaXMsIGUsIGksIHIsIG4pCi0gICAgICAgICAgICB9KQot
ICAgICAgICB9LAotICAgICAgICBvbmU6IGZ1bmN0aW9uKGUsIHQsIG4sIHIpIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9uKGUsIHQsIG4sIHIsIDEpCi0gICAgICAgIH0sCi0gICAgICAgIG9m
ZjogZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgdmFyIGksIG87Ci0gICAgICAgICAg
ICBpZiAoZSAmJiBlLnByZXZlbnREZWZhdWx0ICYmIGUuaGFuZGxlT2JqKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpID0gZS5oYW5kbGVPYmosIGIoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGkubmFt
ZXNwYWNlID8gaS5vcmlnVHlwZSArICIuIiArIGkubmFtZXNwYWNlIDogaS5vcmlnVHlwZSwgaS5z
ZWxlY3RvciwgaS5oYW5kbGVyKSwgdGhpczsKLSAgICAgICAgICAgIGlmICgib2JqZWN0IiA9PSB0
eXBlb2YgZSkgewotICAgICAgICAgICAgICAgIGZvciAobyBpbiBlKQotICAgICAgICAgICAgICAg
ICAgICB0aGlzLm9mZihvLCBuLCBlW29dKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIChuPT09ITEgfHwgImZ1bmN0aW9uIiA9
PSB0eXBlb2YgbikgJiYgKHIgPSBuLCBuID0gdCksIHI9PT0hMSAmJiAociA9IG90KSwgdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGIuZXZlbnQucmVtb3ZlKHRoaXMsIGUs
IHIsIG4pCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBiaW5kOiBmdW5jdGlv
bihlLCB0LCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5vbihlLCBudWxsLCB0LCBuKQot
ICAgICAgICB9LAotICAgICAgICB1bmJpbmQ6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLm9mZihlLCBudWxsLCB0KQotICAgICAgICB9LAotICAgICAgICBkZWxlZ2F0
ZTogZnVuY3Rpb24oZSwgdCwgbiwgcikgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMub24odCwg
ZSwgbiwgcikKLSAgICAgICAgfSwKLSAgICAgICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oZSwgdCwg
bikgewotICAgICAgICAgICAgcmV0dXJuIDEgPT09IGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLm9m
ZihlLCAiKioiKSA6IHRoaXMub2ZmKHQsIGUgfHwgIioqIiwgbikKLSAgICAgICAgfSwKLSAgICAg
ICAgdHJpZ2dlcjogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBiLmV2ZW50LnRyaWdnZXIoZSwgdCwgdGhp
cykKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIHRyaWdnZXJIYW5kbGVyOiBm
dW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB2YXIgciA9IHRoaXNbMF07Ci0gICAgICAgICAg
ICByZXR1cm4gciA/IGIuZXZlbnQudHJpZ2dlcihlLCBuLCByLCAhMCkgOiB0Ci0gICAgICAgIH0K
LSAgICB9KSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICB2YXIgbiwgciwgaSwgbywgYSwgcywg
dSwgbCwgYywgcCwgZiwgZCwgaCwgZywgbSwgeSwgdiwgeCA9ICJzaXp6bGUiICstIG5ldyBEYXRl
LCB3ID0gZS5kb2N1bWVudCwgVCA9IHt9LCBOID0gMCwgQyA9IDAsIGsgPSBpdCgpLCBFID0gaXQo
KSwgUyA9IGl0KCksIEEgPSB0eXBlb2YgdCwgaiA9IDE8PDMxLCBEID0gW10sIEwgPSBELnBvcCwg
SCA9IEQucHVzaCwgcSA9IEQuc2xpY2UsIE0gPSBELmluZGV4T2YgfHwgZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgdmFyIHQgPSAwLCBuID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3Ig
KDsgbiA+IHQ7IHQrKykKLSAgICAgICAgICAgICAgICBpZiAodGhpc1t0XSA9PT0gZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAg
fSwgXyA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwgRiA9ICIoPzpcXFxcLnxbXFx3LV18W15cXHgw
MC1cXHhhMF0pKyIsIE8gPSBGLnJlcGxhY2UoInciLCAidyMiKSwgQiA9ICIoWypeJHwhfl0/PSki
LCBQID0gIlxcWyIgKyBfICsgIiooIiArIEYgKyAiKSIgKyBfICsgIiooPzoiICsgQiArIF8gKyAi
Kig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIgKyBPICsgIil8KXwpIiArIF8g
KyAiKlxcXSIsIFIgPSAiOigiICsgRiArICIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxc
XSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiArIFAucmVwbGFjZSgzLCA4KSArICIp
Kil8LiopXFwpfCkiLCBXID0gUmVnRXhwKCJeIiArIF8gKyAiK3woKD86XnxbXlxcXFxdKSg/Olxc
XFwuKSopIiArIF8gKyAiKyQiLCAiZyIpLCAkID0gUmVnRXhwKCJeIiArIF8gKyAiKiwiICsgXyAr
ICIqIiksIEkgPSBSZWdFeHAoIl4iICsgXyArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiAr
IF8gKyAiKiIpLCB6ID0gUmVnRXhwKFIpLCBYID0gUmVnRXhwKCJeIiArIE8gKyAiJCIpLCBVID0g
ewotICAgICAgICAgICAgSUQ6IFJlZ0V4cCgiXiMoIiArIEYgKyAiKSIpLAotICAgICAgICAgICAg
Q0xBU1M6IFJlZ0V4cCgiXlxcLigiICsgRiArICIpIiksCi0gICAgICAgICAgICBOQU1FOiBSZWdF
eHAoIl5cXFtuYW1lPVsnXCJdPygiICsgRiArICIpWydcIl0/XFxdIiksCi0gICAgICAgICAgICBU
QUc6IFJlZ0V4cCgiXigiICsgRi5yZXBsYWNlKCJ3IiwgIncqIikgKyAiKSIpLAotICAgICAgICAg
ICAgQVRUUjogUmVnRXhwKCJeIiArIFApLAotICAgICAgICAgICAgUFNFVURPOiBSZWdFeHAoIl4i
ICsgUiksCi0gICAgICAgICAgICBDSElMRDogUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRo
fG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiICsgXyArICIqKGV2ZW58b2RkfCgoWyst
XXwpKFxcZCopbnwpIiArIF8gKyAiKig/OihbKy1dfCkiICsgXyArICIqKFxcZCspfCkpIiArIF8g
KyAiKlxcKXwpIiwgImkiKSwKLSAgICAgICAgICAgIG5lZWRzQ29udGV4dDogUmVnRXhwKCJeIiAr
IF8gKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiAr
IF8gKyAiKigoPzotXFxkKT9cXGQqKSIgKyBfICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIpCi0g
ICAgICAgIH0sIFYgPSAvW1x4MjBcdFxyXG5cZl0qWyt+XS8sIFkgPSAvXltee10rXHtccypcW25h
dGl2ZSBjb2RlLywgSiA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sIEcgPSAv
Xig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLCBRID0gL15oXGQkL2ksIEsgPSAv
J3xcXC9nLCBaID0gL1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxd
L2csIGV0ID0gL1xcKFtcZGEtZkEtRl17MSw2fVtceDIwXHRcclxuXGZdP3wuKS9nLCB0dCA9IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gIjB4IiArIHQtNjU1MzY7Ci0gICAg
ICAgICAgICByZXR1cm4gbiAhPT0gbiA/IHQgOiAwID4gbiA/IFN0cmluZy5mcm9tQ2hhckNvZGUo
biArIDY1NTM2KSA6IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCBuPj4xMCwgNTYzMjAgfCAx
MDIzICYgbikKLSAgICAgICAgfTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHEuY2FsbCh3
LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwKVswXS5ub2RlVHlwZQotICAgICAgICB9IGNh
dGNoIChudCkgewotICAgICAgICAgICAgcSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgdCwgbiA9IFtdOwotICAgICAgICAgICAgICAgIHdoaWxlICh0ID0gdGhpc1tlKytdKQot
ICAgICAgICAgICAgICAgICAgICBuLnB1c2godCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG4K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBydChlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gWS50ZXN0KGUgKyAiIikKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlv
biBpdCgpIHsKLSAgICAgICAgICAgIHZhciBlLCB0ID0gW107Ci0gICAgICAgICAgICByZXR1cm4g
ZSA9IGZ1bmN0aW9uKG4sIHIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdC5wdXNoKG4gKz0g
IiAiKSA+IGkuY2FjaGVMZW5ndGggJiYgZGVsZXRlIGVbdC5zaGlmdCgpXSwgZVtuXSA9IHIKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBvdChlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZVt4XT0hMCwgZQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGF0KGUp
IHsKLSAgICAgICAgICAgIHZhciB0ID0gcC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUodCkKLSAgICAgICAgICAgIH0gY2F0
Y2ggKG4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gITEKLSAgICAgICAgICAgIH0gZmluYWxs
eSB7Ci0gICAgICAgICAgICAgICAgdCA9IG51bGwKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBmdW5jdGlvbiBzdChlLCB0LCBuLCByKSB7Ci0gICAgICAgICAgICB2YXIgaSwgbywg
YSwgcywgdSwgbCwgZiwgZywgbSwgdjsKLSAgICAgICAgICAgIGlmICgodCA/IHQub3duZXJEb2N1
bWVudCB8fCB0IDogdykgIT09IHAgJiYgYyh0KSwgdCA9IHQgfHwgcCwgbiA9IG4gfHwgW10sICFl
IHx8ICJzdHJpbmciICE9IHR5cGVvZiBlKQotICAgICAgICAgICAgICAgIHJldHVybiBuOwotICAg
ICAgICAgICAgaWYgKDEgIT09IChzID0gdC5ub2RlVHlwZSkgJiYgOSAhPT0gcykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gW107Ci0gICAgICAgICAgICBpZiAoIWQmJiFyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGkgPSBKLmV4ZWMoZSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChhID0gaVsx
XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDkgPT09IHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobyA9IHQuZ2V0RWxlbWVudEJ5SWQoYSksICFvIHx8IW8ucGFy
ZW50Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLmlkID09PSBhKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4ucHVzaChvKSwgbgotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0Lm93bmVyRG9jdW1lbnQgJiYgKG8gPSB0Lm93bmVyRG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpICYmIHkodCwgbykgJiYgby5pZCA9PT0gYSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi5wdXNoKG8pLCBuCi0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaVsyXSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSC5hcHBseShuLCBxLmNhbGwodC5nZXRFbGVt
ZW50c0J5VGFnTmFtZShlKSwgMCkpLCBuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgoYSA9IGlbM10pICYmIFQuZ2V0QnlDbGFzc05hbWUgJiYgdC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSC5hcHBseShuLCBx
LmNhbGwodC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpLCAwKSksIG4KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChULnFzYSYmIWgudGVzdChlKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoZj0hMCwgZyA9IHgsIG0gPSB0LCB2ID0gOSA9PT0gcyAmJiBlLCAx
ID09PSBzICYmICJvYmplY3QiICE9PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGZ0KGUpLCAo
ZiA9IHQuZ2V0QXR0cmlidXRlKCJpZCIpKSA/IGcgPSBmLnJlcGxhY2UoSywgIlxcJCYiKSA6IHQu
c2V0QXR0cmlidXRlKCJpZCIsIGcpLCBnID0gIltpZD0nIiArIGcgKyAiJ10gIiwgdSA9IGwubGVu
Z3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHUtLSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsW3VdID0gZyArIGR0KGxbdV0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbSA9IFYudGVzdChlKSAmJiB0LnBhcmVudE5vZGUgfHwgdCwgdiA9IGwuam9pbigiLCIpCi0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHYpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBILmFwcGx5KG4sIHEuY2FsbChtLnF1ZXJ5U2VsZWN0b3JBbGwodiksIDApKSwgbgotICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7fSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGYgfHwgdC5yZW1vdmVBdHRyaWJ1dGUoImlkIikKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB3
dChlLnJlcGxhY2UoVywgIiQxIiksIHQsIG4sIHIpCi0gICAgICAgIH0KLSAgICAgICAgYSA9IHN0
LmlzWE1MID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIHQgPSBlICYmIChlLm93bmVy
RG9jdW1lbnQgfHwgZSkuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAgICAgcmV0dXJuIHQgPyAi
SFRNTCIgIT09IHQubm9kZU5hbWUgOiAhMQotICAgICAgICB9LCBjID0gc3Quc2V0RG9jdW1lbnQg
PSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgbiA9IGUgPyBlLm93bmVyRG9jdW1lbnQg
fHwgZTogdzsKLSAgICAgICAgICAgIHJldHVybiBuICE9PSBwICYmIDkgPT09IG4ubm9kZVR5cGUg
JiYgbi5kb2N1bWVudEVsZW1lbnQgPyAocCA9IG4sIGYgPSBuLmRvY3VtZW50RWxlbWVudCwgZCA9
IGEobiksIFQudGFnTmFtZU5vQ29tbWVudHMgPSBhdChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGUuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksICFlLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoCi0gICAgICAgICAgICB9KSwgVC5hdHRyaWJ1dGVz
ID0gYXQoZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIGUuaW5uZXJIVE1MID0gIjxzZWxl
Y3Q+PC9zZWxlY3Q+IjsKLSAgICAgICAgICAgICAgICB2YXIgdCA9IHR5cGVvZiBlLmxhc3RDaGls
ZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJib29s
ZWFuIiAhPT0gdCAmJiAic3RyaW5nIiAhPT0gdAotICAgICAgICAgICAgfSksIFQuZ2V0QnlDbGFz
c05hbWUgPSBhdChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUuaW5uZXJI
VE1MID0gIjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwv
ZGl2PiIsIGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBlLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoImUiKS5sZW5ndGggPyAoZS5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiLCAyID09PSBlLmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGgpIDogITEKLSAgICAgICAgICAgIH0pLCBU
LmdldEJ5TmFtZSA9IGF0KGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBlLmlkID0geCAr
IDAsIGUuaW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyB4ICsgIic+PC9hPjxkaXYgbmFtZT0nIiAr
IHggKyAiJz48L2Rpdj4iLCBmLmluc2VydEJlZm9yZShlLCBmLmZpcnN0Q2hpbGQpOwotICAgICAg
ICAgICAgICAgIHZhciB0ID0gbi5nZXRFbGVtZW50c0J5TmFtZSAmJiBuLmdldEVsZW1lbnRzQnlO
YW1lKHgpLmxlbmd0aCA9PT0gMiArIG4uZ2V0RWxlbWVudHNCeU5hbWUoeCArIDApLmxlbmd0aDsK
LSAgICAgICAgICAgICAgICByZXR1cm4gVC5nZXRJZE5vdE5hbWU9IW4uZ2V0RWxlbWVudEJ5SWQo
eCksIGYucmVtb3ZlQ2hpbGQoZSksIHQKLSAgICAgICAgICAgIH0pLCBpLmF0dHJIYW5kbGUgPSBh
dChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUuaW5uZXJIVE1MID0gIjxh
IGhyZWY9JyMnPjwvYT4iLCBlLmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGUuZmlyc3RDaGlsZC5nZXRB
dHRyaWJ1dGUgIT09IEEgJiYgIiMiID09PSBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVm
IikKLSAgICAgICAgICAgIH0pID8ge30gOiB7Ci0gICAgICAgICAgICAgICAgaHJlZjogZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImhyZWYi
LCAyKQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgdHlwZTogZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIFQuZ2V0SWROb3ROYW1lID8gKGkuZmlu
ZC5JRCA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHQuZ2V0
RWxlbWVudEJ5SWQgIT09IEEmJiFkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuID0gdC5n
ZXRFbGVtZW50QnlJZChlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gJiYgbi5wYXJl
bnROb2RlID8gW25dIDogW10KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBpLmZp
bHRlci5JRCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdCA9IGUucmVwbGFj
ZShldCwgdHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gdAotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0pIDogKGkuZmluZC5JRCA9IGZ1bmN0aW9uKGUsIG4pIHsK
LSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4uZ2V0RWxlbWVudEJ5SWQgIT09IEEmJiFkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciByID0gbi5nZXRFbGVtZW50QnlJZChlKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHIgPyByLmlkID09PSBlIHx8IHR5cGVvZiByLmdldEF0dHJp
YnV0ZU5vZGUgIT09IEEgJiYgci5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlID09PSBlID8g
W3JdIDogdCA6IFtdCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgaS5maWx0ZXIu
SUQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBlLnJlcGxhY2UoZXQs
IHR0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgbiA9IHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUgIT09IEEgJiYgZS5nZXRB
dHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiAmJiBuLnZh
bHVlID09PSB0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSksIGkuZmluZC5UQUcg
PSBULnRhZ05hbWVOb0NvbW1lbnRzID8gZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlb2Ygbi5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gQSA/IG4uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoZSkgOiB0Ci0gICAgICAgICAgICB9IDogZnVuY3Rpb24oZSwgdCkgewotICAg
ICAgICAgICAgICAgIHZhciBuLCByID0gW10sIGkgPSAwLCBvID0gdC5nZXRFbGVtZW50c0J5VGFn
TmFtZShlKTsKLSAgICAgICAgICAgICAgICBpZiAoIioiID09PSBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChuID0gb1tpKytdKQotICAgICAgICAgICAgICAgICAgICAgICAgMSA9PT0g
bi5ub2RlVHlwZSAmJiByLnB1c2gobik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBvCi0gICAgICAgICAgICB9
LCBpLmZpbmQuTkFNRSA9IFQuZ2V0QnlOYW1lICYmIGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHlwZW9mIG4uZ2V0RWxlbWVudHNCeU5hbWUgIT09IEEgPyBuLmdldEVs
ZW1lbnRzQnlOYW1lKG5hbWUpIDogdAotICAgICAgICAgICAgfSwgaS5maW5kLkNMQVNTID0gVC5n
ZXRCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHR5cGVvZiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPT09IEEgfHwgZCA/IHQgOiBuLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoZSkKLSAgICAgICAgICAgIH0sIGcgPSBbXSwgaCA9IFsiOmZvY3Vz
Il0sIChULnFzYSA9IHJ0KG4ucXVlcnlTZWxlY3RvckFsbCkpICYmIChhdChmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgZS5pbm5lckhUTUwgPSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVk
PScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsIGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIp
Lmxlbmd0aCB8fCBoLnB1c2goIlxcWyIgKyBfICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFw
fG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwo
IjpjaGVja2VkIikubGVuZ3RoIHx8IGgucHVzaCgiOmNoZWNrZWQiKQotICAgICAgICAgICAgfSks
IGF0KGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBlLmlubmVySFRNTCA9ICI8aW5wdXQg
dHlwZT0naGlkZGVuJyBpPScnLz4iLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpXj0nJ10iKS5sZW5n
dGggJiYgaC5wdXNoKCJbKl4kXT0iICsgXyArICIqKD86XCJcInwnJykiKSwgZS5xdWVyeVNlbGVj
dG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCB8fCBoLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxl
ZCIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSwgaC5wdXNoKCIsLio6IikKLSAgICAgICAg
ICAgIH0pKSwgKFQubWF0Y2hlc1NlbGVjdG9yID0gcnQobSA9IGYubWF0Y2hlc1NlbGVjdG9yIHx8
IGYubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGYud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGYub01h
dGNoZXNTZWxlY3RvciB8fCBmLm1zTWF0Y2hlc1NlbGVjdG9yKSkgJiYgYXQoZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgICAgIFQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtLmNhbGwoZSwgImRpdiIp
LCBtLmNhbGwoZSwgIltzIT0nJ106eCIpLCBnLnB1c2goIiE9IiwgUikKLSAgICAgICAgICAgIH0p
LCBoID0gUmVnRXhwKGguam9pbigifCIpKSwgZyA9IFJlZ0V4cChnLmpvaW4oInwiKSksIHkgPSBy
dChmLmNvbnRhaW5zKSB8fCBmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gZnVuY3Rpb24oZSwg
dCkgewotICAgICAgICAgICAgICAgIHZhciBuID0gOSA9PT0gZS5ub2RlVHlwZSA/IGUuZG9jdW1l
bnRFbGVtZW50OiBlLCByID0gdCAmJiB0LnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGUgPT09IHIgfHwhKCFyIHx8IDEgIT09IHIubm9kZVR5cGUgfHwhKG4uY29udGFpbnMgPyBu
LmNvbnRhaW5zKHIpIDogZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiAxNiAmIGUuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24ocikpKQotICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKGUsIHQpIHsK
LSAgICAgICAgICAgICAgICBpZiAodCkKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPSB0
LnBhcmVudE5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICExCi0gICAgICAgICAgICB9LCB2ID0gZi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/IGZ1bmN0
aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICB2YXIgcjsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZSA9PT0gdCA/ICh1PSEwLCAwKSA6IChyID0gdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAm
JiBlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24o
dCkpID8gMSAmIHIgfHwgZS5wYXJlbnROb2RlICYmIDExID09PSBlLnBhcmVudE5vZGUubm9kZVR5
cGUgPyBlID09PSBuIHx8IHkodywgZSk/LTEgOiB0ID09PSBuIHx8IHkodywgdCkgPyAxIDogMCA6
IDQgJiByPy0xIDogMSA6IGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTEgOiAxCi0gICAgICAg
ICAgICB9IDogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgICAgIHZhciByLCBpID0gMCwg
byA9IGUucGFyZW50Tm9kZSwgYSA9IHQucGFyZW50Tm9kZSwgcyA9IFtlXSwgbCA9IFt0XTsKLSAg
ICAgICAgICAgICAgICBpZiAoZSA9PT0gdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHU9
ITAsIDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFvIHx8IWEpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlID09PSBuPy0xIDogdCA9PT0gbiA/IDEgOiBvPy0xIDogYSA/IDEgOiAwOwotICAg
ICAgICAgICAgICAgIGlmIChvID09PSBhKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXQo
ZSwgdCk7Ci0gICAgICAgICAgICAgICAgciA9IGU7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHIg
PSByLnBhcmVudE5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHMudW5zaGlmdChyKTsKLSAgICAg
ICAgICAgICAgICByID0gdDsKLSAgICAgICAgICAgICAgICB3aGlsZSAociA9IHIucGFyZW50Tm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgbC51bnNoaWZ0KHIpOwotICAgICAgICAgICAgICAgIHdo
aWxlIChzW2ldID09PSBsW2ldKQotICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPyB1dChzW2ldLCBsW2ldKSA6IHNbaV0gPT09IHc/LTEgOiBsW2ldID09
PSB3ID8gMSA6IDAKLSAgICAgICAgICAgIH0sIHU9ITEsIFswLCAwXS5zb3J0KHYpLCBULmRldGVj
dER1cGxpY2F0ZXMgPSB1LCBwKSA6IHAKLSAgICAgICAgfSwgc3QubWF0Y2hlcyA9IGZ1bmN0aW9u
KGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiBzdChlLCBudWxsLCBudWxsLCB0KQotICAgICAg
ICB9LCBzdC5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICBp
ZiAoKGUub3duZXJEb2N1bWVudCB8fCBlKSAhPT0gcCAmJiBjKGUpLCB0ID0gdC5yZXBsYWNlKFos
ICI9JyQxJ10iKQotICAgICAgICAgICAgICAgICwgISghVC5tYXRjaGVzU2VsZWN0b3IgfHwgZCB8
fCBnICYmIGcudGVzdCh0KSB8fCBoLnRlc3QodCkpKXRyeSB7Ci0gICAgICAgICAgICAgICAgdmFy
IG4gPSBtLmNhbGwoZSwgdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG4gfHwgVC5kaXNjb25uZWN0
ZWRNYXRjaCB8fCBlLmRvY3VtZW50ICYmIDExICE9PSBlLmRvY3VtZW50Lm5vZGVUeXBlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbgotICAgICAgICAgICAgfSBjYXRjaCAocikge30KLSAg
ICAgICAgICAgIHJldHVybiBzdCh0LCBwLCBudWxsLCBbZV0pLmxlbmd0aCA+IDAKLSAgICAgICAg
fSwgc3QuY29udGFpbnMgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4gKGUu
b3duZXJEb2N1bWVudCB8fCBlKSAhPT0gcCAmJiBjKGUpLCB5KGUsIHQpCi0gICAgICAgIH0sIHN0
LmF0dHIgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbjsKLSAgICAgICAgICAg
IHJldHVybiAoZS5vd25lckRvY3VtZW50IHx8IGUpICE9PSBwICYmIGMoZSksIGQgfHwgKHQgPSB0
LnRvTG93ZXJDYXNlKCkpLCAobiA9IGkuYXR0ckhhbmRsZVt0XSkgPyBuKGUpIDogZCB8fCBULmF0
dHJpYnV0ZXMgPyBlLmdldEF0dHJpYnV0ZSh0KSA6ICgobiA9IGUuZ2V0QXR0cmlidXRlTm9kZSh0
KSkgfHwgZS5nZXRBdHRyaWJ1dGUodCkpICYmIGVbdF09PT0hMCA/IHQgOiBuICYmIG4uc3BlY2lm
aWVkID8gbi52YWx1ZSA6IG51bGwKLSAgICAgICAgfSwgc3QuZXJyb3IgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICB0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhw
cmVzc2lvbjogIiArIGUpCi0gICAgICAgIH0sIHN0LnVuaXF1ZVNvcnQgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICB2YXIgdCwgbiA9IFtdLCByID0gMSwgaSA9IDA7Ci0gICAgICAgICAgICBp
ZiAodT0hVC5kZXRlY3REdXBsaWNhdGVzLCBlLnNvcnQodikKLSAgICAgICAgICAgICAgICAsIHUp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgdCA9IGVbcl07IHIrKykKLSAgICAgICAgICAgICAg
ICAgICAgdCA9PT0gZVtyLTFdICYmIChpID0gbi5wdXNoKHIpKTsKLSAgICAgICAgICAgICAgICB3
aGlsZSAoaS0tKQotICAgICAgICAgICAgICAgICAgICBlLnNwbGljZShuW2ldLCAxKQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGUKLSAgICAgICAgfTsKLSAgICAgICAgZnVuY3Rp
b24gdXQoZSwgdCkgewotICAgICAgICAgICAgdmFyIG4gPSB0ICYmIGUsIHIgPSBuICYmICh+dC5z
b3VyY2VJbmRleCB8fCBqKSAtICh+ZS5zb3VyY2VJbmRleCB8fCBqKTsKLSAgICAgICAgICAgIGlm
IChyKQotICAgICAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICAgICAgaWYgKG4pCi0gICAg
ICAgICAgICAgICAgd2hpbGUgKG4gPSBuLm5leHRTaWJsaW5nKQotICAgICAgICAgICAgICAgICAg
ICBpZiAobiA9PT0gdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgICAgIHJldHVybiBlID8gMSA6IC0xCi0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gbHQo
ZSkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbiA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ImlucHV0IiA9PT0gbiAmJiB0LnR5cGUgPT09IGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBmdW5jdGlvbiBjdChlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkg
ewotICAgICAgICAgICAgICAgIHZhciBuID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybiAoImlucHV0IiA9PT0gbiB8fCAiYnV0dG9uIiA9PT0gbikgJiYg
dC50eXBlID09PSBlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24g
cHQoZSkgewotICAgICAgICAgICAgcmV0dXJuIG90KGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdCA9KyB0LCBvdChmdW5jdGlvbihuLCByKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBpLCBvID0gZShbXSwgbi5sZW5ndGgsIHQpLCBhID0gby5sZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChhLS0pCi0gICAgICAgICAgICAgICAgICAgICAgICBuW2kgPSBv
W2FdXSAmJiAobltpXT0hKHJbaV0gPSBuW2ldKSkKLSAgICAgICAgICAgICAgICB9KQotICAgICAg
ICAgICAgfSkKLSAgICAgICAgfQotICAgICAgICBvID0gc3QuZ2V0VGV4dCA9IGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgIHZhciB0LCBuID0gIiIsIHIgPSAwLCBpID0gZS5ub2RlVHlwZTsKLSAg
ICAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKDEgPT09IGkgfHwgOSA9PT0g
aSB8fCAxMSA9PT0gaSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlw
ZW9mIGUudGV4dENvbnRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50ZXh0
Q29udGVudDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBl
ID0gZS5uZXh0U2libGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gbyhlKQotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDMgPT09IGkgfHwgNCA9PT0gaSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlLm5vZGVWYWx1ZQotICAgICAgICAgICAgfSBlbHNlIAot
ICAgICAgICAgICAgICAgIGZvciAoOyB0ID0gZVtyXTsgcisrKQotICAgICAgICAgICAgICAgICAg
ICBuICs9IG8odCk7Ci0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICB9LCBpID0gc3Quc2Vs
ZWN0b3JzID0gewotICAgICAgICAgICAgY2FjaGVMZW5ndGg6IDUwLAotICAgICAgICAgICAgY3Jl
YXRlUHNldWRvOiBvdCwKLSAgICAgICAgICAgIG1hdGNoOiBVLAotICAgICAgICAgICAgZmluZDog
e30sCi0gICAgICAgICAgICByZWxhdGl2ZTogewotICAgICAgICAgICAgICAgICI+IjogewotICAg
ICAgICAgICAgICAgICAgICBkaXI6ICJwYXJlbnROb2RlIiwKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3Q6ICEwCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiICI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgZGlyOiAicGFyZW50Tm9kZSIKLSAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICIrIjogewotICAgICAgICAgICAgICAgICAgICBkaXI6ICJwcmV2aW91
c1NpYmxpbmciLAotICAgICAgICAgICAgICAgICAgICBmaXJzdDogITAKLSAgICAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgICAgICJ+IjogewotICAgICAgICAgICAgICAgICAgICBkaXI6ICJw
cmV2aW91c1NpYmxpbmciCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIHByZUZpbHRlcjogewotICAgICAgICAgICAgICAgIEFUVFI6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVbMV0gPSBlWzFdLnJlcGxhY2UoZXQsIHR0KSwg
ZVszXSA9IChlWzRdIHx8IGVbNV0gfHwgIiIpLnJlcGxhY2UoZXQsIHR0KSwgIn49IiA9PT0gZVsy
XSAmJiAoZVszXSA9ICIgIiArIGVbM10gKyAiICIpLCBlLnNsaWNlKDAsIDQpCi0gICAgICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgICAgICBDSElMRDogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZVsxXSA9IGVbMV0udG9Mb3dlckNhc2UoKSwgIm50aCIgPT09IGVb
MV0uc2xpY2UoMCwgMykgPyAoZVszXSB8fCBzdC5lcnJvcihlWzBdKSwgZVs0XSA9KyAoZVs0XSA/
IGVbNV0gKyAoZVs2XSB8fCAxKSA6IDIgKiAoImV2ZW4iID09PSBlWzNdIHx8ICJvZGQiID09PSBl
WzNdKSksIGVbNV0gPSsgKGVbN10gKyBlWzhdIHx8ICJvZGQiID09PSBlWzNdKSkgOiBlWzNdICYm
IHN0LmVycm9yKGVbMF0pLCBlCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBQ
U0VVRE86IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQsIG49IWVbNV0g
JiYgZVsyXTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFUuQ0hJTEQudGVzdChlWzBdKSA/
IG51bGwgOiAoZVs0XSA/IGVbMl0gPSBlWzRdIDogbiAmJiB6LnRlc3QobikgJiYgKHQgPSBmdChu
LCAhMCkpICYmICh0ID0gbi5pbmRleE9mKCIpIiwgbi5sZW5ndGggLSB0KSAtIG4ubGVuZ3RoKSAm
JiAoZVswXSA9IGVbMF0uc2xpY2UoMCwgdCksIGVbMl0gPSBuLnNsaWNlKDAsIHQpKSwgZS5zbGlj
ZSgwLCAzKSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
ZmlsdGVyOiB7Ci0gICAgICAgICAgICAgICAgVEFHOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiKiIgPT09IGUgPyBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhMAotICAgICAgICAgICAgICAgICAgICB9IDogKGUgPSBlLnJlcGxh
Y2UoZXQsIHR0KS50b0xvd2VyQ2FzZSgpLCBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdC5ub2RlTmFtZSAmJiB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09
IGUKLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIENMQVNTOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0ID0g
a1tlICsgIiAiXTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQgfHwgKHQgPSBSZWdFeHAo
IihefCIgKyBfICsgIikiICsgZSArICIoIiArIF8gKyAifCQpIikpICYmIGsoZSwgZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQudGVzdChlLmNsYXNzTmFtZSB8
fCB0eXBlb2YgZS5nZXRBdHRyaWJ1dGUgIT09IEEgJiYgZS5nZXRBdHRyaWJ1dGUoImNsYXNzIikg
fHwgIiIpCi0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICBBVFRSOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbihyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHN0
LmF0dHIociwgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBpID8g
IiE9IiA9PT0gdCA6IHQgPyAoaSArPSAiIiwgIj0iID09PSB0ID8gaSA9PT0gbiA6ICIhPSIgPT09
IHQgPyBpICE9PSBuIDogIl49IiA9PT0gdCA/IG4gJiYgMCA9PT0gaS5pbmRleE9mKG4pIDogIio9
IiA9PT0gdCA/IG4gJiYgaS5pbmRleE9mKG4pPi0xIDogIiQ9IiA9PT0gdCA/IG4gJiYgaS5zbGlj
ZSggLSBuLmxlbmd0aCkgPT09IG4gOiAifj0iID09PSB0ID8gKCIgIiArIGkgKyAiICIpLmluZGV4
T2Yobik+LTEgOiAifD0iID09PSB0ID8gaSA9PT0gbiB8fCBpLnNsaWNlKDAsIG4ubGVuZ3RoICsg
MSkgPT09IG4gKyAiLSIgOiAhMSkgOiAhMAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBDSElMRDogZnVuY3Rpb24oZSwgdCwgbiwgciwg
aSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbyA9ICJudGgiICE9PSBlLnNsaWNlKDAsIDMp
LCBhID0gImxhc3QiICE9PSBlLnNsaWNlKC00KSwgcyA9ICJvZi10eXBlIiA9PT0gdDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDEgPT09IHIgJiYgMCA9PT0gaSA/IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWUucGFyZW50Tm9kZQotICAgICAgICAg
ICAgICAgICAgICB9IDogZnVuY3Rpb24odCwgbiwgdSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGwsIGMsIHAsIGYsIGQsIGgsIGcgPSBvICE9PSBhID8gIm5leHRTaWJsaW5nIjogInBy
ZXZpb3VzU2libGluZyIsIG0gPSB0LnBhcmVudE5vZGUsIHkgPSBzICYmIHQubm9kZU5hbWUudG9M
b3dlckNhc2UoKSwgdj0hdSYmIXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwID0gdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChw
ID0gcFtnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA/
IHAubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0geSA6IDEgPT09IHAubm9kZVR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnID0gIm9ubHkiID09PSBlJiYhaCAm
JiAibmV4dFNpYmxpbmciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID0gW2EgPyBtLmZp
cnN0Q2hpbGQ6IG0ubGFzdENoaWxkXSwgYSAmJiB2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGMgPSBtW3hdIHx8IChtW3hdID0ge30pLCBsID0gY1tlXSB8fCBbXSwgZCA9IGxb
MF0gPT09IE4gJiYgbFsxXSwgZiA9IGxbMF0gPT09IE4gJiYgbFsyXSwgcCA9IGQgJiYgbS5jaGls
ZE5vZGVzW2RdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocD0rK2Qg
JiYgcCAmJiBwW2ddIHx8IChmID0gZCA9IDApIHx8IGgucG9wKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIClpZiAoMSA9PT0gcC5ub2RlVHlwZSYmKytmICYmIHAgPT09IHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbZV0gPSBbTiwgZCwgZl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh2ICYmIChsID0gKHRbeF0gfHwgKHRbeF0gPSB7fSkpW2VdKSAmJiBsWzBdID09PSBOKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbFsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAocD0rK2QgJiYgcCAmJiBwW2ddIHx8IChmID0gZCA9IDApIHx8IGgucG9wKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIClpZiAoKHMgPyBwLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCkgPT09IHkgOiAxID09PSBwLm5vZGVUeXBlKSYmKytmICYmICh2ICYmICgocFt4XSB8fCAo
cFt4XSA9IHt9KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApW2VdID0gW04sIGZd
KSwgcCA9PT0gdCkpYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYg
LT0gaSwgZiA9PT0gciB8fCAwID09PSBmJXIgJiYgZiAvIHIgPj0gMAotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICBQU0VVRE86IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG4sIHIgPSBpLnBzZXVkb3NbZV0gfHwgaS5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2Uo
KV0gfHwgc3QuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIiArIGUpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gclt4XSA/IHIodCkgOiByLmxlbmd0aCA+IDEgPyAobiA9IFtlLCBlLCAi
IiwgdF0sIGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpID8gb3Qo
ZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIG8gPSByKGUs
IHQpLCBhID0gby5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYS0tKWkg
PSBNLmNhbGwoZSwgb1thXSksIGVbaV09IShuW2ldID0gb1thXSkKLSAgICAgICAgICAgICAgICAg
ICAgfSkgOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcihl
LCAwLCBuKQotICAgICAgICAgICAgICAgICAgICB9KSA6IHIKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgcHNldWRvczogewotICAgICAgICAgICAgICAgIG5v
dDogb3QoZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFtdLCBuID0g
W10sIHIgPSBzKGUucmVwbGFjZShXLCAiJDEiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByW3hdID8gb3QoZnVuY3Rpb24oZSwgdCwgbiwgaSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG8sIGEgPSByKGUsIG51bGwsIGksIFtdKSwgcyA9IGUubGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKHMtLSkobyA9IGFbc10pICYmIChlW3NdPSEodFtzXSA9IG8p
KQotICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBmdW5jdGlvbihlLCBpLCBvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdFswXSA9IGUsIHIodCwgbnVsbCwgbywgbiksICFu
LnBvcCgpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwgaGFzIDog
b3QoZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0KGUsIHQpLmxlbmd0aCA+IDAKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pLCBjb250YWluczogb3QoZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0LnRleHRDb250ZW50IHx8IHQuaW5uZXJUZXh0
IHx8IG8odCkpLmluZGV4T2YoZSk+LTEKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0pLCBsYW5nOiBvdChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBYLnRlc3QoZSB8fCAiIikgfHwgc3QuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBl
KSwgZSA9IGUucmVwbGFjZShldCwgdHQpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uKHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBuOwotICAgICAgICAgICAgICAgICAgICAgICAgZG8g
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBkID8gdC5nZXRBdHRyaWJ1dGUo
InhtbDpsYW5nIikgfHwgdC5nZXRBdHRyaWJ1dGUoImxhbmciKSA6IHQubGFuZykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPSBuLnRvTG93ZXJDYXNlKCksIG4gPT09
IGUgfHwgMCA9PT0gbi5pbmRleE9mKGUgKyAiLSIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCh0ID0gdC5wYXJlbnROb2RlKSAmJiAxID09PSB0Lm5vZGVUeXBlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhMQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSksIHRhcmdldDogZnVuY3Rpb24odCkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgbiA9IGUubG9jYXRpb24gJiYgZS5sb2NhdGlvbi5oYXNoOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbiAmJiBuLnNsaWNlKDEpID09PSB0LmlkCi0gICAgICAgICAgICAgICAgfSwgcm9v
dDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSA9PT0gZgotICAg
ICAgICAgICAgICAgIH0sIGZvY3VzOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBlID09PSBwLmFjdGl2ZUVsZW1lbnQgJiYgKCFwLmhhc0ZvY3VzIHx8IHAuaGFzRm9j
dXMoKSkmJiEhKGUudHlwZSB8fCBlLmhyZWZ8fH5lLnRhYkluZGV4KQotICAgICAgICAgICAgICAg
IH0sIGVuYWJsZWQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUu
ZGlzYWJsZWQ9PT0hMQotICAgICAgICAgICAgICAgIH0sIGRpc2FibGVkOiBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmRpc2FibGVkPT09ITAKLSAgICAgICAgICAg
ICAgICB9LCBjaGVja2VkOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0
ID0gZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ImlucHV0IiA9PT0gdCYmISFlLmNoZWNrZWQgfHwgIm9wdGlvbiIgPT09IHQmJiEhZS5zZWxlY3Rl
ZAotICAgICAgICAgICAgICAgIH0sIHNlbGVjdGVkOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlLnBhcmVudE5vZGUgJiYgZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5k
ZXgsIGUuc2VsZWN0ZWQ9PT0hMAotICAgICAgICAgICAgICAgIH0sIGVtcHR5OiBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoZSA9IGUuZmlyc3RDaGlsZDsgZTsgZSA9IGUu
bmV4dFNpYmxpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5ub2RlTmFtZSA+ICJA
IiB8fCAzID09PSBlLm5vZGVUeXBlIHx8IDQgPT09IGUubm9kZVR5cGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICExOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gITAK
LSAgICAgICAgICAgICAgICB9LCBwYXJlbnQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICFpLnBzZXVkb3MuZW1wdHkoZSkKLSAgICAgICAgICAgICAgICB9LCBoZWFk
ZXI6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFEudGVzdChlLm5v
ZGVOYW1lKQotICAgICAgICAgICAgICAgIH0sIGlucHV0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHLnRlc3QoZS5ub2RlTmFtZSkKLSAgICAgICAgICAgICAgICB9
LCBidXR0b246IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW5wdXQi
ID09PSB0ICYmICJidXR0b24iID09PSBlLnR5cGUgfHwgImJ1dHRvbiIgPT09IHQKLSAgICAgICAg
ICAgICAgICB9LCB0ZXh0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gImlucHV0IiA9PT0gZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpICYmICJ0ZXh0IiA9PT0gZS50eXBlICYmIChudWxsID09ICh0ID0gZS5nZXRBdHRy
aWJ1dGUoInR5cGUiKSkgfHwgdC50b0xvd2VyQ2FzZSgpID09PSBlLnR5cGUpCi0gICAgICAgICAg
ICAgICAgfSwgZmlyc3Q6IHB0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gWzBdCi0gICAgICAgICAgICAgICAgfSksIGxhc3Q6IHB0KGZ1bmN0aW9uKGUsIHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0LTFdCi0gICAgICAgICAgICAgICAgfSksIGVxOiBw
dChmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMCA+IG4g
PyBuICsgdDogbl0KLSAgICAgICAgICAgICAgICB9KSwgZXZlbjogcHQoZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoOyB0ID4gbjsgbiArPSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgZS5wdXNoKG4pOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZQotICAgICAgICAgICAgICAgIH0pLCBvZGQ6IHB0
KGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSAxOwotICAgICAg
ICAgICAgICAgICAgICBmb3IgKDsgdCA+IG47IG4gKz0gMikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGUucHVzaChuKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUKLSAgICAgICAgICAg
ICAgICB9KSwgbHQ6IHB0KGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHIgPSAwID4gbiA/IG4gKyB0OiBuOwotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgLS1y
ID49IDA7KQotICAgICAgICAgICAgICAgICAgICAgICAgZS5wdXNoKHIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZQotICAgICAgICAgICAgICAgIH0pLCBndDogcHQoZnVuY3Rpb24oZSwg
dCwgbikgewotICAgICAgICAgICAgICAgICAgICB2YXIgciA9IDAgPiBuID8gbiArIHQ6IG47Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoOyB0PisrcjspCi0gICAgICAgICAgICAgICAgICAgICAg
ICBlLnB1c2gocik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlCi0gICAgICAgICAgICAg
ICAgfSkKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsgZm9yIChuIGluewotICAgICAgICAgICAg
cmFkaW8gOiAhMCwgY2hlY2tib3ggOiAhMCwgZmlsZSA6ICEwLCBwYXNzd29yZCA6ICEwLCBpbWFn
ZSA6ICEwCi0gICAgICAgIH0paS5wc2V1ZG9zW25dID0gbHQobik7Ci0gICAgICAgIGZvciAobiBp
bnsKLSAgICAgICAgICAgIHN1Ym1pdDogITAsCi0gICAgICAgICAgICByZXNldDogITAKLSAgICAg
ICAgfSlpLnBzZXVkb3Nbbl0gPSBjdChuKTsKLSAgICAgICAgZnVuY3Rpb24gZnQoZSwKLSAgICAg
ICAgdCkgewotICAgICAgICAgICAgdmFyIG4sCi0gICAgICAgICAgICByLAotICAgICAgICAgICAg
bywKLSAgICAgICAgICAgIGEsCi0gICAgICAgICAgICBzLAotICAgICAgICAgICAgdSwKLSAgICAg
ICAgICAgIGwsCi0gICAgICAgICAgICBjID0gRVtlICsgIiAiXTsKLSAgICAgICAgICAgIGlmIChj
KXJldHVybiB0ID8gMDogYy5zbGljZSgwKTsKLSAgICAgICAgICAgIHMgPSBlLAotICAgICAgICAg
ICAgdSA9IFtdLAotICAgICAgICAgICAgbCA9IGkucHJlRmlsdGVyOwotICAgICAgICAgICAgd2hp
bGUgKHMpIHsKLSAgICAgICAgICAgICAgICAoIW4gfHwgKHIgPSAkLmV4ZWMocykpKSAmJiAociAm
JiAocyA9IHMuc2xpY2UoclswXS5sZW5ndGgpIHx8IHMpLAotICAgICAgICAgICAgICAgIHUucHVz
aChvID0gW10pKSwKLSAgICAgICAgICAgICAgICBuPSExLAotICAgICAgICAgICAgICAgIChyID0g
SS5leGVjKHMpKSAmJiAobiA9IHIuc2hpZnQoKSwKLSAgICAgICAgICAgICAgICBvLnB1c2goewot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTog
clswXS5yZXBsYWNlKFcsCi0gICAgICAgICAgICAgICAgICAgICIgIikKLSAgICAgICAgICAgICAg
ICB9KSwgcyA9IHMuc2xpY2Uobi5sZW5ndGgpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGEgaW4g
aS5maWx0ZXIpCi0gICAgICAgICAgICAgICAgICAgICEociA9IFVbYV0uZXhlYyhzKSkgfHwgbFth
XSYmIShyID0gbFthXShyKSkgfHwgKG4gPSByLnNoaWZ0KCksIG8ucHVzaCh7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA6IG4sIHR5cGUgOiBhLCBtYXRjaGVzIDogcgotICAgICAgICAg
ICAgICAgICAgICB9KSwgcyA9IHMuc2xpY2Uobi5sZW5ndGgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdCA/IHMubGVuZ3RoIDogcyA/IHN0LmVycm9yKGUpIDogRShlLCB1KS5zbGlj
ZSgwKQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGR0KGUpIHsKLSAgICAgICAgICAgIHZh
ciB0ID0gMCwgbiA9IGUubGVuZ3RoLCByID0gIiI7Ci0gICAgICAgICAgICBmb3IgKDsgbiA+IHQ7
IHQrKykKLSAgICAgICAgICAgICAgICByICs9IGVbdF0udmFsdWU7Ci0gICAgICAgICAgICByZXR1
cm4gcgotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGh0KGUsIHQsIG4pIHsKLSAgICAgICAg
ICAgIHZhciBpID0gdC5kaXIsIG8gPSBuICYmICJwYXJlbnROb2RlIiA9PT0gaSwgYSA9IEMrKzsK
LSAgICAgICAgICAgIHJldHVybiB0LmZpcnN0ID8gZnVuY3Rpb24odCwgbiwgcikgewotICAgICAg
ICAgICAgICAgIHdoaWxlICh0ID0gdFtpXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT09
IHQubm9kZVR5cGUgfHwgbykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlKHQsIG4s
IHIpCi0gICAgICAgICAgICB9IDogZnVuY3Rpb24odCwgbiwgcykgewotICAgICAgICAgICAgICAg
IHZhciB1LCBsLCBjLCBwID0gTiArICIgIiArIGE7Ci0gICAgICAgICAgICAgICAgaWYgKHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPSB0W2ldKQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCgxID09PSB0Lm5vZGVUeXBlIHx8IG8pICYmIGUodCwgbiwgcykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwCi0gICAgICAgICAgICAgICAgfSBlbHNlIAot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA9IHRbaV0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoMSA9PT0gdC5ub2RlVHlwZSB8fCBvKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjID0gdFt4XSB8fCAodFt4XSA9IHt9KSwgKGwgPSBjW2ldKSAmJiBsWzBdID09PSBw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodSA9IGxbMV0pPT09ITAgfHwgdSA9PT0gcikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1PT09ITAKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGwgPSBjW2ldID0gW3BdLCBsWzFdID0gZSh0LCBuLCBzKSB8fCByLCBsWzFdPT09
ITApcmV0dXJuICEwCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24g
Z3QoZSkgewotICAgICAgICAgICAgcmV0dXJuIGUubGVuZ3RoID4gMSA/IGZ1bmN0aW9uKHQsIG4s
IHIpIHsKLSAgICAgICAgICAgICAgICB2YXIgaSA9IGUubGVuZ3RoOwotICAgICAgICAgICAgICAg
IHdoaWxlIChpLS0pCi0gICAgICAgICAgICAgICAgICAgIGlmICghZVtpXSh0LCBuLCByKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ITAKLSAgICAgICAgICAgIH0gOiBlWzBdCi0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gbXQo
ZSwgdCwgbiwgciwgaSkgewotICAgICAgICAgICAgdmFyIG8sIGEgPSBbXSwgcyA9IDAsIHUgPSBl
Lmxlbmd0aCwgbCA9IG51bGwgIT0gdDsKLSAgICAgICAgICAgIGZvciAoOyB1ID4gczsgcysrKShv
ID0gZVtzXSkgCi0gICAgICAgICAgICAgICAgJiYgKCFuIHx8IG4obywgciwgaSkpICYmIChhLnB1
c2gobyksIGwgJiYgdC5wdXNoKHMpKTsKLSAgICAgICAgICAgIHJldHVybiBhCi0gICAgICAgIH0K
LSAgICAgICAgZnVuY3Rpb24geXQoZSwgdCwgbiwgciwgaSwgbykgewotICAgICAgICAgICAgcmV0
dXJuIHImJiFyW3hdICYmIChyID0geXQocikpLCBpJiYhaVt4XSAmJiAoaSA9IHl0KGksIG8pKSwg
b3QoZnVuY3Rpb24obywgYSwgcywgdSkgewotICAgICAgICAgICAgICAgIHZhciBsLCBjLCBwLCBm
ID0gW10sIGQgPSBbXSwgaCA9IGEubGVuZ3RoLCBnID0gbyB8fCB4dCh0IHx8ICIqIiwgcy5ub2Rl
VHlwZSA/IFtzXSA6IHMsIFtdKSwgbT0hZSB8fCFvICYmIHQgPyBnIDogbXQoZywgZiwgZSwgcywg
dSksIHkgPSBuID8gaSB8fCAobyA/IGUgOiBoIHx8IHIpID8gW10gOiBhIDogbTsKLSAgICAgICAg
ICAgICAgICBpZiAobiAmJiBuKG0sIHksIHMsIHUpLCByKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGwgPSBtdCh5LCBkKSwgcihsLCBbXSwgcywgdSksIGMgPSBsLmxlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKGMtLSkocCA9IGxbY10pICYmICh5W2RbY11dPSEobVtkW2NdXSA9IHAp
KQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGkgfHwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gW10sIGMgPSB5Lmxlbmd0aDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYy0tKShwID0geVtjXSkgJiYgbC5w
dXNoKG1bY10gPSBwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKG51bGwsIHkgPSBb
XSwgbCwgdSkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGMgPSB5Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjLS0pKHAg
PSB5W2NdKSAmJiAobCA9IGkgPyBNLmNhbGwobywgcCkgOiBmW2NdKT4tMSAmJiAob1tsXT0hKGFb
bF0gPSBwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgCi0gICAgICAgICAgICAgICAgICAgIHkgPSBtdCh5ID09PSBhID8geS5zcGxpY2UoaCwgeS5s
ZW5ndGgpIDogeSksIGkgPyBpKG51bGwsIGEsIHksIHUpIDogSC5hcHBseShhLCB5KQotICAgICAg
ICAgICAgfSkKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiB2dChlKSB7Ci0gICAgICAgICAg
ICB2YXIgdCwgbiwgciwgbyA9IGUubGVuZ3RoLCBhID0gaS5yZWxhdGl2ZVtlWzBdLnR5cGVdLCBz
ID0gYSB8fCBpLnJlbGF0aXZlWyIgIl0sIHUgPSBhID8gMTogMCwgYyA9IGh0KGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZSA9PT0gdAotICAgICAgICAgICAgfSwgcywgITAp
LCBwID0gaHQoZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBNLmNhbGwodCwg
ZSk+LTEKLSAgICAgICAgICAgIH0sIHMsICEwKSwgZiA9IFtmdW5jdGlvbihlLCBuLCByKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICFhICYmIChyIHx8IG4gIT09IGwpIHx8ICgodCA9IG4pLm5v
ZGVUeXBlID8gYyhlLCBuLCByKSA6IHAoZSwgbiwgcikpCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBdOwotICAgICAgICAgICAgZm9yICg7IG8gPiB1OyB1KyspCi0gICAgICAgICAgICAgICAg
aWYgKG4gPSBpLnJlbGF0aXZlW2VbdV0udHlwZV0pCi0gICAgICAgICAgICAgICAgICAgIGYgPSBb
aHQoZ3QoZiksIG4pXTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG4gPSBpLmZpbHRlcltlW3VdLnR5cGVdLmFwcGx5KG51bGwsIGVbdV0ubWF0Y2hlcyks
IG5beF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocj0rK3U7IG8gPiByOyByKysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkucmVsYXRpdmVbZVtyXS50eXBlXSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB5dCh1ID4gMSAmJiBndChmKSwgdSA+IDEgJiYgZHQoZS5z
bGljZSgwLCB1LTEpKS5yZXBsYWNlKFcsICIkMSIpLCBuLCByID4gdSAmJiB2dChlLnNsaWNlKHUs
IHIpKSwgbyA+IHIgJiYgdnQoZSA9IGUuc2xpY2UocikpLCBvID4gciAmJiBkdChlKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5w
dXNoKG4pCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGd0KGYpCi0gICAg
ICAgIH0KLSAgICAgICAgZnVuY3Rpb24gYnQoZSwgdCkgewotICAgICAgICAgICAgdmFyIG4gPSAw
LCBvID0gdC5sZW5ndGggPiAwLCBhID0gZS5sZW5ndGggPiAwLCBzID0gZnVuY3Rpb24ocywgdSwg
YywgZiwgZCkgewotICAgICAgICAgICAgICAgIHZhciBoLCBnLCBtLCB5ID0gW10sIHYgPSAwLCBi
ID0gIjAiLCB4ID0gcyAmJiBbXSwgdyA9IG51bGwgIT0gZCwgVCA9IGwsIEMgPSBzIHx8IGEgJiYg
aS5maW5kLlRBRygiKiIsIGQgJiYgdS5wYXJlbnROb2RlIHx8IHUpLCBrID0gTiArPSBudWxsID09
IFQgPyAxOiBNYXRoLnJhbmRvbSgpIHx8IC4xOwotICAgICAgICAgICAgICAgIGZvciAodyAmJiAo
bCA9IHUgIT09IHAgJiYgdSwgciA9IG4pOyBudWxsICE9IChoID0gQ1tiXSk7IGIrKykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYSAmJiBoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtID0gZVtnKytdKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtKGgsIHUsIGMpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGYucHVzaChoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3ICYmIChOID0gaywgcj0rK24pCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgbyAmJiAoKGg9IW0gJiYgaCkgJiYgdi0tLCBzICYmIHgucHVzaChoKSkK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHYgKz0gYiwgbyAmJiBiICE9
PSB2KSB7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAwOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobSA9IHRbZysrXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG0oeCwgeSwgdSwgYyk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGItLSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtiXSB8fCB5W2JdIHx8ICh5W2JdID0gTC5jYWxs
KGYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBtdCh5KQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEguYXBwbHkoZiwgeSksIHcmJiFzICYmIHkubGVu
Z3RoID4gMCAmJiB2ICsgdC5sZW5ndGggPiAxICYmIHN0LnVuaXF1ZVNvcnQoZikKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHcgJiYgKE4gPSBrLCBsID0gVCksIHgK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICByZXR1cm4gbyA/IG90KHMpIDogcwotICAgICAg
ICB9Ci0gICAgICAgIHMgPSBzdC5jb21waWxlID0gZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAg
ICAgdmFyIG4sIHIgPSBbXSwgaSA9IFtdLCBvID0gU1tlICsgIiAiXTsKLSAgICAgICAgICAgIGlm
ICghbykgewotICAgICAgICAgICAgICAgIHQgfHwgKHQgPSBmdChlKSksIG4gPSB0Lmxlbmd0aDsK
LSAgICAgICAgICAgICAgICB3aGlsZSAobi0tKQotICAgICAgICAgICAgICAgICAgICBvID0gdnQo
dFtuXSksIG9beF0gPyByLnB1c2gobykgOiBpLnB1c2gobyk7Ci0gICAgICAgICAgICAgICAgbyA9
IFMoZSwgYnQoaSwgcikpCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbwotICAg
ICAgICB9OwotICAgICAgICBmdW5jdGlvbiB4dChlLCB0LCBuKSB7Ci0gICAgICAgICAgICB2YXIg
ciA9IDAsIGkgPSB0Lmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAoOyBpID4gcjsgcisrKQotICAg
ICAgICAgICAgICAgIHN0KGUsIHRbcl0sIG4pOwotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAg
ICAgfQotICAgICAgICBmdW5jdGlvbiB3dChlLCB0LCBuLCByKSB7Ci0gICAgICAgICAgICB2YXIg
bywgYSwgdSwgbCwgYywgcCA9IGZ0KGUpOwotICAgICAgICAgICAgaWYgKCFyICYmIDEgPT09IHAu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEgPSBwWzBdID0gcFswXS5zbGljZSgwKSwg
YS5sZW5ndGggPiAyICYmICJJRCIgPT09ICh1ID0gYVswXSkudHlwZSAmJiA5ID09PSB0Lm5vZGVU
eXBlJiYhZCAmJiBpLnJlbGF0aXZlW2FbMV0udHlwZV0pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHQgPSBpLmZpbmQuSUQodS5tYXRjaGVzWzBdLnJlcGxhY2UoZXQsIHR0KSwgdClbMF0sICF0
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgICAg
IGUgPSBlLnNsaWNlKGEuc2hpZnQoKS52YWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG8gPSBVLm5lZWRzQ29udGV4dC50ZXN0KGUpID8gMCA6IGEubGVuZ3Ro
OwotICAgICAgICAgICAgICAgIHdoaWxlIChvLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHUgPSBhW29dLCBpLnJlbGF0aXZlW2wgPSB1LnR5cGVdKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoYyA9IGkuZmluZFtsXSkgJiYgKHIg
PSBjKHUubWF0Y2hlc1swXS5yZXBsYWNlKGV0LCB0dCksIFYudGVzdChhWzBdLnR5cGUpICYmIHQu
cGFyZW50Tm9kZSB8fCB0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnNwbGlj
ZShvLCAxKSwgZSA9IHIubGVuZ3RoICYmIGR0KGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAhZSlyZXR1cm4gSC5hcHBseShuLCBxLmNhbGwociwgMCkpLCBuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzKGUsIHApKHIsIHQsIGQsIG4s
IFYudGVzdChlKSksIG4KLSAgICAgICAgfQotICAgICAgICBpLnBzZXVkb3MubnRoID0gaS5wc2V1
ZG9zLmVxOwotICAgICAgICBmdW5jdGlvbiBUdCgpIHt9Ci0gICAgICAgIGkuZmlsdGVycyA9IFR0
LnByb3RvdHlwZSA9IGkucHNldWRvcywgaS5zZXRGaWx0ZXJzID0gbmV3IFR0LCBjKCksIHN0LmF0
dHIgPSBiLmF0dHIsIGIuZmluZCA9IHN0LCBiLmV4cHIgPSBzdC5zZWxlY3RvcnMsIGIuZXhwclsi
OiJdID0gYi5leHByLnBzZXVkb3MsIGIudW5pcXVlID0gc3QudW5pcXVlU29ydCwgYi50ZXh0ID0g
c3QuZ2V0VGV4dCwgYi5pc1hNTERvYyA9IHN0LmlzWE1MLCBiLmNvbnRhaW5zID0gc3QuY29udGFp
bnMKLSAgICB9KGUpOwotICAgIHZhciBhdCA9IC9VbnRpbCQvLCBzdCA9IC9eKD86cGFyZW50c3xw
cmV2KD86VW50aWx8QWxsKSkvLCB1dCA9IC9eLlteOiNcW1wuLF0qJC8sIGx0ID0gYi5leHByLm1h
dGNoLm5lZWRzQ29udGV4dCwgY3QgPSB7Ci0gICAgICAgIGNoaWxkcmVuOiAhMCwKLSAgICAgICAg
Y29udGVudHM6ICEwLAotICAgICAgICBuZXh0OiAhMCwKLSAgICAgICAgcHJldjogITAKLSAgICB9
OwotICAgIGIuZm4uZXh0ZW5kKHsKLSAgICAgICAgZmluZDogZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgdmFyIHQsIG4sIHIsIGkgPSB0aGlzLmxlbmd0aDsKLSAgICAgICAgICAgIGlmICgic3Ry
aW5nIiAhPSB0eXBlb2YgZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gciA9IHRoaXMsIHRoaXMu
cHVzaFN0YWNrKGIoZSkuZmlsdGVyKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGZvciAo
dCA9IDA7IGkgPiB0OyB0KyspCi0gICAgICAgICAgICAgICAgICAgIGlmIChiLmNvbnRhaW5zKHJb
dF0sIHRoaXMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwCi0gICAgICAgICAg
ICB9KSk7Ci0gICAgICAgICAgICBmb3IgKG4gPSBbXSwgdCA9IDA7Ci0gICAgICAgICAgICBpID4g
dDsKLSAgICAgICAgICAgIHQrKyliLmZpbmQoZSwgdGhpc1t0XSwgbik7Ci0gICAgICAgICAgICBy
ZXR1cm4gbiA9IHRoaXMucHVzaFN0YWNrKGkgPiAxID8gYi51bmlxdWUobikgOiBuKSwgbi5zZWxl
Y3RvciA9ICh0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArICIgIiA6ICIiKSArIGUsIG4K
LSAgICAgICAgfSwKLSAgICAgICAgaGFzOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIg
dCwgbiA9IGIoZSwgdGhpcyksIHIgPSBuLmxlbmd0aDsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHQgPSAwOyByID4gdDsg
dCsrKQotICAgICAgICAgICAgICAgICAgICBpZiAoYi5jb250YWlucyh0aGlzLCBuW3RdKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMAotICAgICAgICAgICAgfSkKLSAgICAgICAg
fSwKLSAgICAgICAgbm90OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soZnQodGhpcywgZSwgITEpKQotICAgICAgICB9LAotICAgICAgICBmaWx0ZXI6IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLCBl
LCAhMCkpCi0gICAgICAgIH0sCi0gICAgICAgIGlzOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gISFlICYmICgic3RyaW5nIiA9PSB0eXBlb2YgZSA/IGx0LnRlc3QoZSkgPyBiKGUs
IHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSkgPj0gMCA6IGIuZmlsdGVyKGUsIHRoaXMpLmxl
bmd0aCA+IDAgOiB0aGlzLmZpbHRlcihlKS5sZW5ndGggPiAwKQotICAgICAgICB9LAotICAgICAg
ICBjbG9zZXN0OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiwgciA9IDAsIGkg
PSB0aGlzLmxlbmd0aCwgbyA9IFtdLCBhID0gbHQudGVzdChlKSB8fCAic3RyaW5nIiAhPSB0eXBl
b2YgZSA/IGIoZSwgdCB8fCB0aGlzLmNvbnRleHQpOiAwOwotICAgICAgICAgICAgZm9yICg7IGkg
PiByOyByKyspIHsKLSAgICAgICAgICAgICAgICBuID0gdGhpc1tyXTsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAobiAmJiBuLm93bmVyRG9jdW1lbnQgJiYgbiAhPT0gdCAmJiAxMSAhPT0gbi5ub2Rl
VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYSA/IGEuaW5kZXgobik+LTEgOiBiLmZp
bmQubWF0Y2hlc1NlbGVjdG9yKG4sIGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvLnB1
c2gobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBuLnBhcmVudE5vZGUKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soby5s
ZW5ndGggPiAxID8gYi51bmlxdWUobykgOiBvKQotICAgICAgICB9LAotICAgICAgICBpbmRleDog
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGUgPyAic3RyaW5nIiA9PSB0eXBlb2Yg
ZSA/IGIuaW5BcnJheSh0aGlzWzBdLCBiKGUpKSA6IGIuaW5BcnJheShlLmpxdWVyeSA/IGVbMF0g
OiBlLCB0aGlzKSA6IHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlID8gdGhpcy5maXJzdCgp
LnByZXZBbGwoKS5sZW5ndGggOiAtMQotICAgICAgICB9LAotICAgICAgICBhZGQ6IGZ1bmN0aW9u
KGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gInN0cmluZyIgPT0gdHlwZW9mIGUgPyBiKGUs
IHQpOiBiLm1ha2VBcnJheShlICYmIGUubm9kZVR5cGUgPyBbZV0gOiBlKSwgciA9IGIubWVyZ2Uo
dGhpcy5nZXQoKSwgbik7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soYi51bmlx
dWUocikpCi0gICAgICAgIH0sCi0gICAgICAgIGFkZEJhY2s6IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmFkZChudWxsID09IGUgPyB0aGlzLnByZXZPYmplY3QgOiB0aGlz
LnByZXZPYmplY3QuZmlsdGVyKGUpKQotICAgICAgICB9Ci0gICAgfSksIGIuZm4uYW5kU2VsZiA9
IGIuZm4uYWRkQmFjazsKLSAgICBmdW5jdGlvbiBwdChlLCB0KSB7Ci0gICAgICAgIGRvIAotICAg
ICAgICAgICAgZSA9IGVbdF07Ci0gICAgICAgIHdoaWxlIChlICYmIDEgIT09IGUubm9kZVR5cGUp
OwotICAgICAgICByZXR1cm4gZQotICAgIH0KLSAgICBiLmVhY2goewotICAgICAgICBwYXJlbnQ6
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0ID0gZS5wYXJlbnROb2RlOwotICAgICAg
ICAgICAgcmV0dXJuIHQgJiYgMTEgIT09IHQubm9kZVR5cGUgPyB0IDogbnVsbAotICAgICAgICB9
LAotICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5k
aXIoZSwgInBhcmVudE5vZGUiKQotICAgICAgICB9LAotICAgICAgICBwYXJlbnRzVW50aWw6IGZ1
bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHJldHVybiBiLmRpcihlLCAicGFyZW50Tm9k
ZSIsIG4pCi0gICAgICAgIH0sCi0gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBwdChlLCAibmV4dFNpYmxpbmciKQotICAgICAgICB9LAotICAgICAgICBwcmV2
OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gcHQoZSwgInByZXZpb3VzU2libGlu
ZyIpCi0gICAgICAgIH0sCi0gICAgICAgIG5leHRBbGw6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBiLmRpcihlLCAibmV4dFNpYmxpbmciKQotICAgICAgICB9LAotICAgICAgICBw
cmV2QWxsOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5kaXIoZSwgInByZXZp
b3VzU2libGluZyIpCi0gICAgICAgIH0sCi0gICAgICAgIG5leHRVbnRpbDogZnVuY3Rpb24oZSwg
dCwgbikgewotICAgICAgICAgICAgcmV0dXJuIGIuZGlyKGUsICJuZXh0U2libGluZyIsIG4pCi0g
ICAgICAgIH0sCi0gICAgICAgIHByZXZVbnRpbDogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAg
ICAgICAgcmV0dXJuIGIuZGlyKGUsICJwcmV2aW91c1NpYmxpbmciLCBuKQotICAgICAgICB9LAot
ICAgICAgICBzaWJsaW5nczogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIuc2li
bGluZygoZS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBlKQotICAgICAgICB9LAotICAg
ICAgICBjaGlsZHJlbjogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIuc2libGlu
ZyhlLmZpcnN0Q2hpbGQpCi0gICAgICAgIH0sCi0gICAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5ub2RlTmFtZShlLCAiaWZyYW1lIikgPyBlLmNvbnRl
bnREb2N1bWVudCB8fCBlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOiBiLm1lcmdlKFtdLCBlLmNo
aWxkTm9kZXMpCi0gICAgICAgIH0KLSAgICB9LCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGIu
Zm5bZV0gPSBmdW5jdGlvbihuLCByKSB7Ci0gICAgICAgICAgICB2YXIgaSA9IGIubWFwKHRoaXMs
IHQsIG4pOwotICAgICAgICAgICAgcmV0dXJuIGF0LnRlc3QoZSkgfHwgKHIgPSBuKSwgciAmJiAi
c3RyaW5nIiA9PSB0eXBlb2YgciAmJiAoaSA9IGIuZmlsdGVyKHIsIGkpKSwgaSA9IHRoaXMubGVu
Z3RoID4gMSYmIWN0W2VdID8gYi51bmlxdWUoaSkgOiBpLCB0aGlzLmxlbmd0aCA+IDEgJiYgc3Qu
dGVzdChlKSAmJiAoaSA9IGkucmV2ZXJzZSgpKSwgdGhpcy5wdXNoU3RhY2soaSkKLSAgICAgICAg
fQotICAgIH0pLCBiLmV4dGVuZCh7Ci0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZSwgdCwgbikg
ewotICAgICAgICAgICAgcmV0dXJuIG4gJiYgKGUgPSAiOm5vdCgiICsgZSArICIpIiksIDEgPT09
IHQubGVuZ3RoID8gYi5maW5kLm1hdGNoZXNTZWxlY3Rvcih0WzBdLCBlKSA/IFt0WzBdXSA6IFtd
IDogYi5maW5kLm1hdGNoZXMoZSwgdCkKLSAgICAgICAgfSwKLSAgICAgICAgZGlyOiBmdW5jdGlv
bihlLCBuLCByKSB7Ci0gICAgICAgICAgICB2YXIgaSA9IFtdLCBvID0gZVtuXTsKLSAgICAgICAg
ICAgIHdoaWxlIChvICYmIDkgIT09IG8ubm9kZVR5cGUgJiYgKHIgPT09IHQgfHwgMSAhPT0gby5u
b2RlVHlwZSB8fCFiKG8pLmlzKHIpKSkKLSAgICAgICAgICAgICAgICAxID09PSBvLm5vZGVUeXBl
ICYmIGkucHVzaChvKSwgbyA9IG9bbl07Ci0gICAgICAgICAgICByZXR1cm4gaQotICAgICAgICB9
LAotICAgICAgICBzaWJsaW5nOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiA9
IFtdOwotICAgICAgICAgICAgZm9yICg7IGU7IGUgPSBlLm5leHRTaWJsaW5nKQotICAgICAgICAg
ICAgICAgIDEgPT09IGUubm9kZVR5cGUgJiYgZSAhPT0gdCAmJiBuLnB1c2goZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbgotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZnVuY3Rpb24gZnQoZSwgdCwg
bikgewotICAgICAgICBpZiAodCA9IHQgfHwgMCwgYi5pc0Z1bmN0aW9uKHQpCi0gICAgICAgICAg
ICApcmV0dXJuIGIuZ3JlcChlLCBmdW5jdGlvbihlLCByKSB7Ci0gICAgICAgICAgICB2YXIgaT0h
IXQuY2FsbChlLCByLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBpID09PSBuCi0gICAgICAgIH0p
OwotICAgICAgICBpZiAodC5ub2RlVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBiLmdyZXAoZSwg
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBlID09PSB0ID09PSBuCi0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiB0KSB7Ci0gICAgICAg
ICAgICB2YXIgciA9IGIuZ3JlcChlLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDEgPT09IGUubm9kZVR5cGUKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHV0
LnRlc3QodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGIuZmlsdGVyKHQsIHIsICFuKTsKLSAg
ICAgICAgICAgIHQgPSBiLmZpbHRlcih0LCByKQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBi
LmdyZXAoZSwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIuaW5BcnJheShlLCB0
KSA+PSAwID09PSBuCi0gICAgICAgIH0pCi0gICAgfQotICAgIGZ1bmN0aW9uIGR0KGUpIHsKLSAg
ICAgICAgdmFyIHQgPSBodC5zcGxpdCgifCIpLCBuID0gZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7Ci0gICAgICAgIGlmIChuLmNyZWF0ZUVsZW1lbnQpCi0gICAgICAgICAgICB3aGlsZSAodC5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgbi5jcmVhdGVFbGVtZW50KHQucG9wKCkpOwotICAgICAg
ICByZXR1cm4gbgotICAgIH0KLSAgICB2YXIgaHQgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlv
fGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rl
cnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1
bW1hcnl8dGltZXx2aWRlbyIsIGd0ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZywgbXQg
PSBSZWdFeHAoIjwoPzoiICsgaHQgKyAiKVtcXHMvPl0iLCAiaSIpLCB5dCA9IC9eXHMrLywgdnQg
PSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChb
XHc6XSspW14+XSopXC8+L2dpLCBidCA9IC88KFtcdzpdKykvLCB4dCA9IC88dGJvZHkvaSwgd3Qg
PSAvPHwmIz9cdys7LywgVHQgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLCBOdCA9IC9eKD86
Y2hlY2tib3h8cmFkaW8pJC9pLCBDdCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQu
KS9pLCBrdCA9IC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSwgRXQgPSAvXnRydWVcLyguKikv
LCBTdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZywgQXQgPSB7
Ci0gICAgICAgIG9wdGlvbjogWzEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwv
c2VsZWN0PiJdLAotICAgICAgICBsZWdlbmQ6IFsxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0
PiJdLAotICAgICAgICBhcmVhOiBbMSwgIjxtYXA+IiwgIjwvbWFwPiJdLAotICAgICAgICBwYXJh
bTogWzEsICI8b2JqZWN0PiIsICI8L29iamVjdD4iXSwKLSAgICAgICAgdGhlYWQ6IFsxLCAiPHRh
YmxlPiIsICI8L3RhYmxlPiJdLAotICAgICAgICB0cjogWzIsICI8dGFibGU+PHRib2R5PiIsICI8
L3Rib2R5PjwvdGFibGU+Il0sCi0gICAgICAgIGNvbDogWzIsICI8dGFibGU+PHRib2R5PjwvdGJv
ZHk+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+Il0sCi0gICAgICAgIHRkOiBbMywg
Ijx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSwKLSAgICAgICAg
X2RlZmF1bHQ6IGIuc3VwcG9ydC5odG1sU2VyaWFsaXplID8gWzAsICIiLCAiIl06IFsxLCAiWDxk
aXY+IiwgIjwvZGl2PiJdCi0gICAgfSwganQgPSBkdChvKSwgRHQgPSBqdC5hcHBlbmRDaGlsZChv
LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKLSAgICBBdC5vcHRncm91cCA9IEF0Lm9wdGlvbiwgQXQu
dGJvZHkgPSBBdC50Zm9vdCA9IEF0LmNvbGdyb3VwID0gQXQuY2FwdGlvbiA9IEF0LnRoZWFkLCBB
dC50aCA9IEF0LnRkLCBiLmZuLmV4dGVuZCh7Ci0gICAgICAgIHRleHQ6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgIHJldHVybiBiLmFjY2Vzcyh0aGlzLCBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGUgPT09IHQgPyBiLnRleHQodGhpcykgOiB0aGlzLmVtcHR5KCkuYXBw
ZW5kKCh0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBvKS5jcmVhdGVUZXh0Tm9k
ZShlKSkKLSAgICAgICAgICAgIH0sIG51bGwsIGUsIGFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAg
IH0sCi0gICAgICAgIHdyYXBBbGw6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGlmIChiLmlz
RnVuY3Rpb24oZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGIodGhpcykud3JhcEFsbChlLmNhbGwodGhpcywgdCkp
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAodGhpc1swXSkgewotICAgICAg
ICAgICAgICAgIHZhciB0ID0gYihlLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25l
KCEwKTsKLSAgICAgICAgICAgICAgICB0aGlzWzBdLnBhcmVudE5vZGUgJiYgdC5pbnNlcnRCZWZv
cmUodGhpc1swXSksIHQubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
ZSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlLmZpcnN0Q2hpbGQgJiYgMSA9
PT0gZS5maXJzdENoaWxkLm5vZGVUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGUu
Zmlyc3RDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUKLSAgICAgICAgICAgICAg
ICB9KS5hcHBlbmQodGhpcykKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlz
Ci0gICAgICAgIH0sCi0gICAgICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgcmV0dXJuIGIuaXNGdW5jdGlvbihlKSA/IHRoaXMuZWFjaChmdW5jdGlvbih0KSB7Ci0gICAg
ICAgICAgICAgICAgYih0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsIHQpKQotICAgICAgICAg
ICAgfSkgOiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBi
KHRoaXMpLCBuID0gdC5jb250ZW50cygpOwotICAgICAgICAgICAgICAgIG4ubGVuZ3RoID8gbi53
cmFwQWxsKGUpIDogdC5hcHBlbmQoZSkKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAg
ICAgIHdyYXA6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0ID0gYi5pc0Z1bmN0aW9u
KGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKSB7Ci0gICAgICAg
ICAgICAgICAgYih0aGlzKS53cmFwQWxsKHQgPyBlLmNhbGwodGhpcywgbikgOiBlKQotICAgICAg
ICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgdW53cmFwOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgYi5ub2RlTmFtZSh0aGlzLCAiYm9keSIpIHx8IGIodGhpcykucmVwbGFjZVdpdGgodGhp
cy5jaGlsZE5vZGVzKQotICAgICAgICAgICAgfSkuZW5kKCkKLSAgICAgICAgfSwKLSAgICAgICAg
YXBwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFy
Z3VtZW50cywgITAsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAoMSA9PT0gdGhpcy5u
b2RlVHlwZSB8fCAxMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCA5ID09PSB0aGlzLm5vZGVUeXBlKSAm
JiB0aGlzLmFwcGVuZENoaWxkKGUpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAg
ICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlw
KGFyZ3VtZW50cywgITAsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAoMSA9PT0gdGhp
cy5ub2RlVHlwZSB8fCAxMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCA5ID09PSB0aGlzLm5vZGVUeXBl
KSAmJiB0aGlzLmluc2VydEJlZm9yZShlLCB0aGlzLmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICB9
KQotICAgICAgICB9LAotICAgICAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCAhMSwgZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgICAgIHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KGUsIHRoaXMpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBhZnRlcjogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsICEx
LCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlICYmIHRoaXMu
cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSwgdGhpcy5uZXh0U2libGluZykKLSAgICAgICAgICAg
IH0pCi0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oZSwgdCkgewotICAgICAg
ICAgICAgdmFyIG4sIHIgPSAwOwotICAgICAgICAgICAgZm9yICg7IG51bGwgIT0gKG4gPSB0aGlz
W3JdKTsgcisrKSghZSB8fCBiLmZpbHRlcihlLCBbbl0pLmxlbmd0aCA+IDApIAotICAgICAgICAg
ICAgICAgICYmICh0IHx8IDEgIT09IG4ubm9kZVR5cGUgfHwgYi5jbGVhbkRhdGEoT3QobikpLCBu
LnBhcmVudE5vZGUgJiYgKHQgJiYgYi5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsIG4pICYmIE10
KE90KG4sICJzY3JpcHQiKSksIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMKLSAgICAgICAgfSwKLSAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgdmFyIGUsIHQgPSAwOwotICAgICAgICAgICAgZm9yICg7IG51bGwgIT0g
KGUgPSB0aGlzW3RdKTsgdCsrKSB7Ci0gICAgICAgICAgICAgICAgMSA9PT0gZS5ub2RlVHlwZSAm
JiBiLmNsZWFuRGF0YShPdChlLCAhMSkpOwotICAgICAgICAgICAgICAgIHdoaWxlIChlLmZpcnN0
Q2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTsK
LSAgICAgICAgICAgICAgICBlLm9wdGlvbnMgJiYgYi5ub2RlTmFtZShlLCAic2VsZWN0IikgJiYg
KGUub3B0aW9ucy5sZW5ndGggPSAwKQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRoaXMKLSAgICAgICAgfSwKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAg
ICAgICAgIHJldHVybiBlID0gbnVsbCA9PSBlPyExIDogZSwgdCA9IG51bGwgPT0gdCA/IGUgOiB0
LCB0aGlzLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYi5jbG9uZSh0
aGlzLCBlLCB0KQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgaHRtbDogZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIuYWNjZXNzKHRoaXMsIGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXNbMF0gfHwge30sIHIgPSAwLCBpID0gdGhp
cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT09IHQpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAxID09PSBuLm5vZGVUeXBlID8gbi5pbm5lckhUTUwucmVwbGFjZShndCwgIiIp
IDogdDsKLSAgICAgICAgICAgICAgICBpZiAoISgic3RyaW5nIiAhPSB0eXBlb2YgZSB8fCBUdC50
ZXN0KGUpIHx8IWIuc3VwcG9ydC5odG1sU2VyaWFsaXplICYmIG10LnRlc3QoZSkgfHwhYi5zdXBw
b3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHl0LnRlc3QoZSkgfHwgQXRbKGJ0LmV4ZWMoZSkgfHwg
WyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNlKCldKSkgewotICAgICAgICAgICAgICAgICAgICBlID0g
ZS5yZXBsYWNlKHZ0LCAiPCQxPjwvJDI+Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA+IHI7IHIrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuID0gdGhpc1tyXSB8fCB7fSwgMSA9PT0gbi5ub2RlVHlwZSAmJiAoYi5j
bGVhbkRhdGEoT3QobiwgITEpKSwgbi5pbm5lckhUTUwgPSBlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG4gPSAwCi0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG8pIHt9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG4gJiYgdGhpcy5lbXB0eSgpLmFwcGVuZChlKQot
ICAgICAgICAgICAgfSwgbnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgfSwKLSAg
ICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0ID0gYi5p
c0Z1bmN0aW9uKGUpOwotICAgICAgICAgICAgcmV0dXJuIHQgfHwgInN0cmluZyIgPT0gdHlwZW9m
IGUgfHwgKGUgPSBiKGUpLm5vdCh0aGlzKS5kZXRhY2goKSksIHRoaXMuZG9tTWFuaXAoW2VdLCAh
MCwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5uZXh0U2libGlu
ZywgbiA9IHRoaXMucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICBuICYmIChiKHRoaXMpLnJl
bW92ZSgpLCBuLmluc2VydEJlZm9yZShlLCB0KSkKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0s
Ci0gICAgICAgIGRldGFjaDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cmVtb3ZlKGUsICEwKQotICAgICAgICB9LAotICAgICAgICBkb21NYW5pcDogZnVuY3Rpb24oZSwg
biwgcikgewotICAgICAgICAgICAgZSA9IGYuYXBwbHkoW10sIGUpOwotICAgICAgICAgICAgdmFy
IGksIG8sIGEsIHMsIHUsIGwsIGMgPSAwLCBwID0gdGhpcy5sZW5ndGgsIGQgPSB0aGlzLCBoID0g
cC0xLCBnID0gZVswXSwgbSA9IGIuaXNGdW5jdGlvbihnKTsKLSAgICAgICAgICAgIGlmIChtIHx8
ISgxID49IHAgfHwgInN0cmluZyIgIT0gdHlwZW9mIGcgfHwgYi5zdXBwb3J0LmNoZWNrQ2xvbmUp
ICYmIEN0LnRlc3QoZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bihpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvID0gZC5lcShpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbSAmJiAoZVswXSA9IGcuY2FsbCh0aGlzLCBpLCBuID8gby5odG1sKCkgOiB0KSks
IG8uZG9tTWFuaXAoZSwgbiwgcikKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlm
IChwICYmIChsID0gYi5idWlsZEZyYWdtZW50KGUsIHRoaXNbMF0ub3duZXJEb2N1bWVudCwgITEs
IHRoaXMpLCBpID0gbC5maXJzdENoaWxkLCAxID09PSBsLmNoaWxkTm9kZXMubGVuZ3RoICYmIChs
ID0gaSksIGkpCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChuID0g
biAmJiBiLm5vZGVOYW1lKGksICJ0ciIpLCBzID0gYi5tYXAoT3QobCwgInNjcmlwdCIpCi0gICAg
ICAgICAgICAgICAgICAgICwgSHQpLCBhID0gcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgcCA+
IGM7Ci0gICAgICAgICAgICAgICAgYysrKW8gPSBsLCBjICE9PSBoICYmIChvID0gYi5jbG9uZShv
LCAhMCwgITApLCBhICYmIGIubWVyZ2UocywgT3QobywgInNjcmlwdCIpKSksIHIuY2FsbChuICYm
IGIubm9kZU5hbWUodGhpc1tjXSwgInRhYmxlIikgPyBMdCh0aGlzW2NdLCAidGJvZHkiKSA6IHRo
aXNbY10sIG8sIGMpOwotICAgICAgICAgICAgICAgIGlmIChhKQotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHUgPSBzW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsIGIubWFwKHMsIHF0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgLCBjID0gMDsKLSAgICAgICAgICAgICAgICBhID4gYzsKLSAg
ICAgICAgICAgICAgICBjKyspbyA9IHNbY10sIGt0LnRlc3Qoby50eXBlIHx8ICIiKSYmIWIuX2Rh
dGEobywgImdsb2JhbEV2YWwiKSAmJiBiLmNvbnRhaW5zKHUsIG8pICYmIChvLnNyYyA/IGIuYWph
eCh7Ci0gICAgICAgICAgICAgICAgICAgIHVybDogby5zcmMsCi0gICAgICAgICAgICAgICAgICAg
IHR5cGU6ICJHRVQiLAotICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIsCi0g
ICAgICAgICAgICAgICAgICAgIGFzeW5jOiAhMSwKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFs
OiAhMSwKLSAgICAgICAgICAgICAgICAgICAgInRocm93cyI6ICEwCi0gICAgICAgICAgICAgICAg
fSkgOiBiLmdsb2JhbEV2YWwoKG8udGV4dCB8fCBvLnRleHRDb250ZW50IHx8IG8uaW5uZXJIVE1M
IHx8ICIiKS5yZXBsYWNlKFN0LCAiIikpKTsKLSAgICAgICAgICAgICAgICBsID0gaSA9IG51bGwK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzCi0gICAgICAgIH0KLSAgICB9
KTsKLSAgICBmdW5jdGlvbiBMdChlLCB0KSB7Ci0gICAgICAgIHJldHVybiBlLmdldEVsZW1lbnRz
QnlUYWdOYW1lKHQpWzBdIHx8IGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQodCkpCi0gICAgfQotICAgIGZ1bmN0aW9uIEh0KGUpIHsKLSAgICAgICAgdmFyIHQgPSBl
LmdldEF0dHJpYnV0ZU5vZGUoInR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGUudHlwZSA9ICh0ICYm
IHQuc3BlY2lmaWVkKSArICIvIiArIGUudHlwZSwgZQotICAgIH0KLSAgICBmdW5jdGlvbiBxdChl
KSB7Ci0gICAgICAgIHZhciB0ID0gRXQuZXhlYyhlLnR5cGUpOwotICAgICAgICByZXR1cm4gdCA/
IGUudHlwZSA9IHRbMV0gOiBlLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLCBlCi0gICAgfQotICAg
IGZ1bmN0aW9uIE10KGUsIHQpIHsKLSAgICAgICAgdmFyIG4sIHIgPSAwOwotICAgICAgICBmb3Ig
KDsgbnVsbCAhPSAobiA9IGVbcl0pOyByKyspCi0gICAgICAgICAgICBiLl9kYXRhKG4sICJnbG9i
YWxFdmFsIiwgIXQgfHwgYi5fZGF0YSh0W3JdLCAiZ2xvYmFsRXZhbCIpKQotICAgIH0KLSAgICBm
dW5jdGlvbiBfdChlLCB0KSB7Ci0gICAgICAgIGlmICgxID09PSB0Lm5vZGVUeXBlICYmIGIuaGFz
RGF0YShlKSkgewotICAgICAgICAgICAgdmFyIG4sIHIsIGksIG8gPSBiLl9kYXRhKGUpLCBhID0g
Yi5fZGF0YSh0LCBvKSwgcyA9IG8uZXZlbnRzOwotICAgICAgICAgICAgaWYgKHMpIHsKLSAgICAg
ICAgICAgICAgICBkZWxldGUgYS5oYW5kbGUsIGEuZXZlbnRzID0ge307Ci0gICAgICAgICAgICAg
ICAgZm9yIChuIGluIHMpCi0gICAgICAgICAgICAgICAgICAgIGZvciAociA9IDAsIGkgPSBzW25d
Lmxlbmd0aDsgaSA+IHI7IHIrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGIuZXZlbnQuYWRk
KHQsIG4sIHNbbl1bcl0pCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGEuZGF0
YSAmJiAoYS5kYXRhID0gYi5leHRlbmQoe30sIGEuZGF0YSkpCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZnVuY3Rpb24gRnQoZSwgdCkgewotICAgICAgICB2YXIgbiwgciwgaTsKLSAgICAgICAgaWYg
KDEgPT09IHQubm9kZVR5cGUpIHsKLSAgICAgICAgICAgIGlmIChuID0gdC5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpLCAhYi5zdXBwb3J0Lm5vQ2xvbmVFdmVudCAmJiB0W2IuZXhwYW5kb10pIHsKLSAg
ICAgICAgICAgICAgICBpID0gYi5fZGF0YSh0KTsKLSAgICAgICAgICAgICAgICBmb3IgKHIgaW4g
aS5ldmVudHMpCi0gICAgICAgICAgICAgICAgICAgIGIucmVtb3ZlRXZlbnQodCwgciwgaS5oYW5k
bGUpOwotICAgICAgICAgICAgICAgIHQucmVtb3ZlQXR0cmlidXRlKGIuZXhwYW5kbykKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICJzY3JpcHQiID09PSBuICYmIHQudGV4dCAhPT0gZS50ZXh0
ID8gKEh0KHQpLnRleHQgPSBlLnRleHQsIHF0KHQpKSA6ICJvYmplY3QiID09PSBuID8gKHQucGFy
ZW50Tm9kZSAmJiAodC5vdXRlckhUTUwgPSBlLm91dGVySFRNTCksIGIuc3VwcG9ydC5odG1sNUNs
b25lICYmIGUuaW5uZXJIVE1MJiYhYi50cmltKHQuaW5uZXJIVE1MKSAmJiAodC5pbm5lckhUTUwg
PSBlLmlubmVySFRNTCkpIDogImlucHV0IiA9PT0gbiAmJiBOdC50ZXN0KGUudHlwZSkgPyAodC5k
ZWZhdWx0Q2hlY2tlZCA9IHQuY2hlY2tlZCA9IGUuY2hlY2tlZCwgdC52YWx1ZSAhPT0gZS52YWx1
ZSAmJiAodC52YWx1ZSA9IGUudmFsdWUpKSA6ICJvcHRpb24iID09PSBuID8gdC5kZWZhdWx0U2Vs
ZWN0ZWQgPSB0LnNlbGVjdGVkID0gZS5kZWZhdWx0U2VsZWN0ZWQgOiAoImlucHV0IiA9PT0gbiB8
fCAidGV4dGFyZWEiID09PSBuKSAmJiAodC5kZWZhdWx0VmFsdWUgPSBlLmRlZmF1bHRWYWx1ZSkK
LSAgICAgICAgfQotICAgIH0KLSAgICBiLmVhY2goewotICAgICAgICBhcHBlbmRUbzogImFwcGVu
ZCIsCi0gICAgICAgIHByZXBlbmRUbzogInByZXBlbmQiLAotICAgICAgICBpbnNlcnRCZWZvcmU6
ICJiZWZvcmUiLAotICAgICAgICBpbnNlcnRBZnRlcjogImFmdGVyIiwKLSAgICAgICAgcmVwbGFj
ZUFsbDogInJlcGxhY2VXaXRoIgotICAgIH0sIGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgYi5m
bltlXSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciBuLCByID0gMCwgaSA9IFtdLCBv
ID0gYihlKSwgYSA9IG8ubGVuZ3RoLTE7Ci0gICAgICAgICAgICBmb3IgKDsgYSA+PSByOyByKysp
Ci0gICAgICAgICAgICAgICAgbiA9IHIgPT09IGEgPyB0aGlzIDogdGhpcy5jbG9uZSghMCksIGIo
b1tyXSlbdF0obiksIGQuYXBwbHkoaSwgbi5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soaSkKLSAgICAgICAgfQotICAgIH0pOwotICAgIGZ1bmN0aW9uIE90KGUsIG4p
IHsKLSAgICAgICAgdmFyIHIsIG8sIGEgPSAwLCBzID0gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRh
Z05hbWUgIT09IGkgPyBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKG4gfHwgIioiKTogdHlwZW9mIGUu
cXVlcnlTZWxlY3RvckFsbCAhPT0gaSA/IGUucXVlcnlTZWxlY3RvckFsbChuIHx8ICIqIik6IHQ7
Ci0gICAgICAgIGlmICghcykKLSAgICAgICAgICAgIGZvciAocyA9IFtdLCByID0gZS5jaGlsZE5v
ZGVzIHx8IGU7Ci0gICAgICAgICAgICBudWxsICE9IChvID0gclthXSk7IGErKykKLSAgICAgICAg
ICAgICAgICAhbiB8fCBiLm5vZGVOYW1lKG8sIG4pID8gcy5wdXNoKG8pIDogYi5tZXJnZShzLCBP
dChvLCBuKSk7Ci0gICAgICAgIHJldHVybiBuID09PSB0IHx8IG4gJiYgYi5ub2RlTmFtZShlLCBu
KSA/IGIubWVyZ2UoW2VdLCBzKSA6IHMKLSAgICB9Ci0gICAgZnVuY3Rpb24gQnQoZSkgewotICAg
ICAgICBOdC50ZXN0KGUudHlwZSkgJiYgKGUuZGVmYXVsdENoZWNrZWQgPSBlLmNoZWNrZWQpCi0g
ICAgfQotICAgIGIuZXh0ZW5kKHsKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKGUsIHQsIG4pIHsK
LSAgICAgICAgICAgIHZhciByLCBpLCBvLCBhLCBzLCB1ID0gYi5jb250YWlucyhlLm93bmVyRG9j
dW1lbnQsIGUpOwotICAgICAgICAgICAgaWYgKGIuc3VwcG9ydC5odG1sNUNsb25lIHx8IGIuaXNY
TUxEb2MoZSkgfHwhbXQudGVzdCgiPCIgKyBlLm5vZGVOYW1lICsgIj4iKSA/IG8gPSBlLmNsb25l
Tm9kZSghMCkgOiAoRHQuaW5uZXJIVE1MID0gZS5vdXRlckhUTUwsIER0LnJlbW92ZUNoaWxkKG8g
PSBEdC5maXJzdENoaWxkKSkKLSAgICAgICAgICAgICAgICAsICEoYi5zdXBwb3J0Lm5vQ2xvbmVF
dmVudCAmJiBiLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQgfHwgMSAhPT0gZS5ub2RlVHlwZSAmJiAx
MSAhPT0gZS5ub2RlVHlwZSB8fCBiLmlzWE1MRG9jKGUpKSlmb3IgKHIgPSBPdChvKSwgcyA9IE90
KGUpCi0gICAgICAgICAgICAgICAgLCBhID0gMDsKLSAgICAgICAgICAgIG51bGwgIT0gKGkgPSBz
W2FdKTsKLSAgICAgICAgICAgICsrYSlyW2FdICYmIEZ0KGksIHJbYV0pOwotICAgICAgICAgICAg
aWYgKHQpCi0gICAgICAgICAgICAgICAgaWYgKG4pCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
cyA9IHMgfHwgT3QoZSksIHIgPSByIHx8IE90KG8pCi0gICAgICAgICAgICAgICAgICAgICAgICAs
IGEgPSAwOwotICAgICAgICAgICAgbnVsbCAhPSAoaSA9IHNbYV0pOwotICAgICAgICAgICAgYSsr
KV90KGksIHJbYV0pOwotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBfdChlLCBv
KTsKLSAgICAgICAgICAgIHJldHVybiByID0gT3QobywgInNjcmlwdCIpLCByLmxlbmd0aCA+IDAg
JiYgTXQociwgIXUgJiYgT3QoZSwgInNjcmlwdCIpKSwgciA9IHMgPSBpID0gbnVsbCwgbwotICAg
ICAgICB9LAotICAgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbihlLCB0LCBuLCByKSB7Ci0g
ICAgICAgICAgICB2YXIgaSwgbywgYSwgcywgdSwgbCwgYywgcCA9IGUubGVuZ3RoLCBmID0gZHQo
dCksIGQgPSBbXSwgaCA9IDA7Ci0gICAgICAgICAgICBmb3IgKDsgcCA+IGg7IGgrKykKLSAgICAg
ICAgICAgICAgICBpZiAobyA9IGVbaF0sIG8gfHwgMCA9PT0gbykKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCJvYmplY3QiID09PSBiLnR5cGUobykpCi0gICAgICAgICAgICAgICAgICAgICAgICBi
Lm1lcmdlKGQsIG8ubm9kZVR5cGUgPyBbb10gOiBvKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAod3QudGVzdChvKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMgfHwgZi5h
cHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgdSA9IChidC5leGVjKG8pIHx8IFsi
IiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpLCBjID0gQXRbdV0gfHwgQXQuX2RlZmF1bHQsIHMuaW5u
ZXJIVE1MID0gY1sxXSArIG8ucmVwbGFjZSh2dCwgIjwkMT48LyQyPiIpICsgY1syXSwgaSA9IGNb
MF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHMgPSBzLmxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWIuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSAmJiB5dC50ZXN0KG8pICYmIGQucHVz
aCh0LmNyZWF0ZVRleHROb2RlKHl0LmV4ZWMobylbMF0pKSwgIWIuc3VwcG9ydC50Ym9keSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gInRhYmxlIiAhPT0gdSB8fCB4dC50
ZXN0KG8pID8gIjx0YWJsZT4iICE9PSBjWzFdIHx8IHh0LnRlc3QobykgPyAwIDogcyA6IHMuZmly
c3RDaGlsZCwgaSA9IG8gJiYgby5jaGlsZE5vZGVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKGktLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGIubm9kZU5hbWUobCA9IG8uY2hpbGROb2Rlc1tpXSwgInRib2R5IikmJiFsLmNoaWxk
Tm9kZXMubGVuZ3RoICYmIG8ucmVtb3ZlQ2hpbGQobCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLm1lcmdlKGQsIHMu
Y2hpbGROb2RlcyksIHMudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKHMuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMgPSBmLmxhc3RDaGlsZAotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh0LmNyZWF0ZVRl
eHROb2RlKG8pKTsKLSAgICAgICAgICAgIHMgJiYgZi5yZW1vdmVDaGlsZChzKSwgYi5zdXBwb3J0
LmFwcGVuZENoZWNrZWQgfHwgYi5ncmVwKE90KGQsICJpbnB1dCIpLCBCdCksIGggPSAwOwotICAg
ICAgICAgICAgd2hpbGUgKG8gPSBkW2grK10pCi0gICAgICAgICAgICAgICAgaWYgKCghcnx8LTEg
PT09IGIuaW5BcnJheShvLCByKSkgJiYgKGEgPSBiLmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCwg
byksIHMgPSBPdChmLmFwcGVuZENoaWxkKG8pLCAic2NyaXB0IikKLSAgICAgICAgICAgICAgICAg
ICAgLCBhICYmIE10KHMpLCBuKSkgewotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAg
ICAgICAgIHdoaWxlIChvID0gc1tpKytdKQotICAgICAgICAgICAgICAgICAgICBrdC50ZXN0KG8u
dHlwZSB8fCAiIikgJiYgbi5wdXNoKG8pCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBzID0gbnVsbCwgZgotICAgICAgICB9LAotICAgICAgICBjbGVhbkRhdGE6IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuLCByLCBvLCBhLCBzID0gMCwgdSA9IGIu
ZXhwYW5kbywgbCA9IGIuY2FjaGUsIHAgPSBiLnN1cHBvcnQuZGVsZXRlRXhwYW5kbywgZiA9IGIu
ZXZlbnQuc3BlY2lhbDsKLSAgICAgICAgICAgIGZvciAoOyBudWxsICE9IChuID0gZVtzXSk7IHMr
KykKLSAgICAgICAgICAgICAgICBpZiAoKHQgfHwgYi5hY2NlcHREYXRhKG4pKSAmJiAobyA9IG5b
dV0sIGEgPSBvICYmIGxbb10pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhLmV2ZW50cykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAociBpbiBhLmV2ZW50cykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmW3JdID8gYi5ldmVudC5yZW1vdmUobiwgcikgOiBiLnJlbW92ZUV2
ZW50KG4sIHIsIGEuaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsW29dICYm
IChkZWxldGUgbFtvXSwgcCA/IGRlbGV0ZSBuW3VdIDogdHlwZW9mIG4ucmVtb3ZlQXR0cmlidXRl
ICE9PSBpID8gbi5yZW1vdmVBdHRyaWJ1dGUodSkgOiBuW3VdID0gbnVsbCwgYy5wdXNoKG8pKQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotICAgIHZhciBQdCwgUnQsIFd0
LCAkdCA9IC9hbHBoYVwoW14pXSpcKS9pLCBJdCA9IC9vcGFjaXR5XHMqPVxzKihbXildKikvLCB6
dCA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLywgWHQgPSAvXihub25lfHRhYmxlKD8hLWNb
ZWFdKS4rKS8sIFV0ID0gL15tYXJnaW4vLCBWdCA9IFJlZ0V4cCgiXigiICsgeCArICIpKC4qKSQi
LCAiaSIpLCBZdCA9IFJlZ0V4cCgiXigiICsgeCArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIpLCBK
dCA9IFJlZ0V4cCgiXihbKy1dKT0oIiArIHggKyAiKSIsICJpIiksIEd0ID0gewotICAgICAgICBC
T0RZOiAiYmxvY2siCi0gICAgfSwgUXQgPSB7Ci0gICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUi
LAotICAgICAgICB2aXNpYmlsaXR5OiAiaGlkZGVuIiwKLSAgICAgICAgZGlzcGxheTogImJsb2Nr
IgotICAgIH0sIEt0ID0gewotICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAotICAgICAgICBmb250
V2VpZ2h0OiA0MDAKLSAgICB9LCBadCA9IFsiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0
Il0sIGVuID0gWyJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiXTsKLSAgICBmdW5jdGlvbiB0bihl
LCB0KSB7Ci0gICAgICAgIGlmICh0IGluIGUpCi0gICAgICAgICAgICByZXR1cm4gdDsKLSAgICAg
ICAgdmFyIG4gPSB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdC5zbGljZSgxKSwgciA9IHQs
IGkgPSBlbi5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICBpZiAodCA9
IGVuW2ldICsgbiwgdCBpbiBlKQotICAgICAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICBy
ZXR1cm4gcgotICAgIH0KLSAgICBmdW5jdGlvbiBubihlLCB0KSB7Ci0gICAgICAgIHJldHVybiBl
ID0gdCB8fCBlLCAibm9uZSIgPT09IGIuY3NzKGUsICJkaXNwbGF5IikgfHwhYi5jb250YWlucyhl
Lm93bmVyRG9jdW1lbnQsIGUpCi0gICAgfQotICAgIGZ1bmN0aW9uIHJuKGUsIHQpIHsKLSAgICAg
ICAgdmFyIG4sIHIsIGksIG8gPSBbXSwgYSA9IDAsIHMgPSBlLmxlbmd0aDsKLSAgICAgICAgZm9y
ICg7IHMgPiBhOyBhKyspCi0gICAgICAgICAgICByID0gZVthXSwgci5zdHlsZSAmJiAob1thXSA9
IGIuX2RhdGEociwgIm9sZGRpc3BsYXkiKSwgbiA9IHIuc3R5bGUuZGlzcGxheSwgdCA/IChvW2Fd
IHx8ICJub25lIiAhPT0gbiB8fCAoci5zdHlsZS5kaXNwbGF5ID0gIiIpLCAiIiA9PT0gci5zdHls
ZS5kaXNwbGF5ICYmIG5uKHIpICYmIChvW2FdID0gYi5fZGF0YShyLCAib2xkZGlzcGxheSIsIHVu
KHIubm9kZU5hbWUpKSkpIDogb1thXSB8fCAoaSA9IG5uKHIpLCAobiAmJiAibm9uZSIgIT09IG4g
fHwhaSkgJiYgYi5fZGF0YShyLCAib2xkZGlzcGxheSIsIGkgPyBuIDogYi5jc3MociwgImRpc3Bs
YXkiKSkpKTsKLSAgICAgICAgZm9yIChhID0gMDsgcyA+IGE7IGErKykKLSAgICAgICAgICAgIHIg
PSBlW2FdLCByLnN0eWxlICYmICh0ICYmICJub25lIiAhPT0gci5zdHlsZS5kaXNwbGF5ICYmICIi
ICE9PSByLnN0eWxlLmRpc3BsYXkgfHwgKHIuc3R5bGUuZGlzcGxheSA9IHQgPyBvW2FdIHx8ICIi
IDogIm5vbmUiKSk7Ci0gICAgICAgIHJldHVybiBlCi0gICAgfQotICAgIGIuZm4uZXh0ZW5kKHsK
LSAgICAgICAgY3NzOiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5hY2Nl
c3ModGhpcywgZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgICAgIHZhciBpLCBvLCBh
ID0ge30sIHMgPSAwOwotICAgICAgICAgICAgICAgIGlmIChiLmlzQXJyYXkobikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChvID0gUnQoZSksIGkgPSBuLmxlbmd0aDsgaSA+IHM7IHMrKykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFbbltzXV0gPSBiLmNzcyhlLCBuW3NdLCAhMSwgbyk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiByICE9PSB0ID8gYi5zdHlsZShlLCBuLCByKSA6IGIuY3NzKGUsIG4p
Ci0gICAgICAgICAgICB9LCBlLCBuLCBhcmd1bWVudHMubGVuZ3RoID4gMSkKLSAgICAgICAgfSwK
LSAgICAgICAgc2hvdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gcm4odGhpcywg
ITApCi0gICAgICAgIH0sCi0gICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
cmV0dXJuIHJuKHRoaXMpCi0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgdmFyIHQgPSAiYm9vbGVhbiIgPT0gdHlwZW9mIGU7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICh0ID8gZSA6
IG5uKHRoaXMpKSA/IGIodGhpcykuc2hvdygpIDogYih0aGlzKS5oaWRlKCkKLSAgICAgICAgICAg
IH0pCi0gICAgICAgIH0KLSAgICB9KSwgYi5leHRlbmQoewotICAgICAgICBjc3NIb29rczogewot
ICAgICAgICAgICAgb3BhY2l0eTogewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oZSwg
dCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG4gPSBXdChlLCAib3BhY2l0eSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICIiID09PSBuID8gIjEiIDogbgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBjc3NOdW1iZXI6IHsK
LSAgICAgICAgICAgIGNvbHVtbkNvdW50OiAhMCwKLSAgICAgICAgICAgIGZpbGxPcGFjaXR5OiAh
MCwKLSAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICEwLAotICAgICAgICAgICAgbGluZUhlaWdodDog
ITAsCi0gICAgICAgICAgICBvcGFjaXR5OiAhMCwKLSAgICAgICAgICAgIG9ycGhhbnM6ICEwLAot
ICAgICAgICAgICAgd2lkb3dzOiAhMCwKLSAgICAgICAgICAgIHpJbmRleDogITAsCi0gICAgICAg
ICAgICB6b29tOiAhMAotICAgICAgICB9LAotICAgICAgICBjc3NQcm9wczogewotICAgICAgICAg
ICAgImZsb2F0IjogYi5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IjogInN0eWxlRmxvYXQi
Ci0gICAgICAgIH0sCi0gICAgICAgIHN0eWxlOiBmdW5jdGlvbihlLCBuLCByLCBpKSB7Ci0gICAg
ICAgICAgICBpZiAoZSAmJiAzICE9PSBlLm5vZGVUeXBlICYmIDggIT09IGUubm9kZVR5cGUgJiYg
ZS5zdHlsZSkgewotICAgICAgICAgICAgICAgIHZhciBvLCBhLCBzLCB1ID0gYi5jYW1lbENhc2Uo
biksIGwgPSBlLnN0eWxlOwotICAgICAgICAgICAgICAgIGlmIChuID0gYi5jc3NQcm9wc1t1XSB8
fCAoYi5jc3NQcm9wc1t1XSA9IHRuKGwsIHUpKSwgcyA9IGIuY3NzSG9va3Nbbl0gfHwgYi5jc3NI
b29rc1t1XSwgciA9PT0gdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMgJiYgImdldCJp
biBzICYmIChvID0gcy5nZXQoZSwgITEsIGkpKSAhPT0gdCA/IG8gOiBsW25dOwotICAgICAgICAg
ICAgICAgIGlmIChhID0gdHlwZW9mIHIsICJzdHJpbmciID09PSBhICYmIChvID0gSnQuZXhlYyhy
KQotICAgICAgICAgICAgICAgICAgICApICYmIChyID0gKG9bMV0gKyAxKSAqIG9bMl0gKyBwYXJz
ZUZsb2F0KGIuY3NzKGUsIG4pKSwgYSA9ICJudW1iZXIiKSwgIShudWxsID09IHIgfHwgIm51bWJl
ciIgPT09IGEgJiYgaXNOYU4ocikgfHwgKCJudW1iZXIiICE9PSBhIHx8IGIuY3NzTnVtYmVyW3Vd
IHx8IChyICs9ICJweCIpLCBiLnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlIHx8ICIiICE9PSByIHx8
IDAgIT09IG4uaW5kZXhPZigiYmFja2dyb3VuZCIpIHx8IChsW25dID0gImluaGVyaXQiKSwgcyAm
JiAic2V0ImluIHMgJiYgKHIgPSBzLnNldChlLCByLCBpKSkgPT09IHQpKSl0cnkgewotICAgICAg
ICAgICAgICAgICAgICBsW25dID0gcgotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGMpIHt9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIGNzczogZnVuY3Rpb24oZSwgbiwgciwg
aSkgewotICAgICAgICAgICAgdmFyIG8sIGEsIHMsIHUgPSBiLmNhbWVsQ2FzZShuKTsKLSAgICAg
ICAgICAgIHJldHVybiBuID0gYi5jc3NQcm9wc1t1XSB8fCAoYi5jc3NQcm9wc1t1XSA9IHRuKGUu
c3R5bGUsIHUpKSwgcyA9IGIuY3NzSG9va3Nbbl0gfHwgYi5jc3NIb29rc1t1XSwgcyAmJiAiZ2V0
ImluIHMgJiYgKGEgPSBzLmdldChlLCAhMCwgcikpLCBhID09PSB0ICYmIChhID0gV3QoZSwgbiwg
aSkpLCAibm9ybWFsIiA9PT0gYSAmJiBuIGluIEt0ICYmIChhID0gS3Rbbl0pLCAiIiA9PT0gciB8
fCByID8gKG8gPSBwYXJzZUZsb2F0KGEpLCByPT09ITAgfHwgYi5pc051bWVyaWMobykgPyBvIHx8
IDAgOiBhKSA6IGEKLSAgICAgICAgfSwKLSAgICAgICAgc3dhcDogZnVuY3Rpb24oZSwgdCwgbiwg
cikgewotICAgICAgICAgICAgdmFyIGksIG8sIGEgPSB7fTsKLSAgICAgICAgICAgIGZvciAobyBp
biB0KQotICAgICAgICAgICAgICAgIGFbb10gPSBlLnN0eWxlW29dLCBlLnN0eWxlW29dID0gdFtv
XTsKLSAgICAgICAgICAgIGkgPSBuLmFwcGx5KGUsIHIgfHwgW10pOwotICAgICAgICAgICAgZm9y
IChvIGluIHQpCi0gICAgICAgICAgICAgICAgZS5zdHlsZVtvXSA9IGFbb107Ci0gICAgICAgICAg
ICByZXR1cm4gaQotICAgICAgICB9Ci0gICAgfSksIGUuZ2V0Q29tcHV0ZWRTdHlsZSA/IChSdCA9
IGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgcmV0dXJuIGUuZ2V0Q29tcHV0ZWRTdHlsZSh0LCBudWxs
KQotICAgIH0sIFd0ID0gZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICB2YXIgaSwgbywgYSwg
cyA9IHIgfHwgUnQoZSksIHUgPSBzID8gcy5nZXRQcm9wZXJ0eVZhbHVlKG4pIHx8IHNbbl0gOiB0
LCBsID0gZS5zdHlsZTsKLSAgICAgICAgcmV0dXJuIHMgJiYgKCIiICE9PSB1IHx8IGIuY29udGFp
bnMoZS5vd25lckRvY3VtZW50LCBlKSB8fCAodSA9IGIuc3R5bGUoZSwgbikpLCBZdC50ZXN0KHUp
ICYmIFV0LnRlc3QobikgJiYgKGkgPSBsLndpZHRoLCBvID0gbC5taW5XaWR0aCwgYSA9IGwubWF4
V2lkdGgsIGwubWluV2lkdGggPSBsLm1heFdpZHRoID0gbC53aWR0aCA9IHUsIHUgPSBzLndpZHRo
LCBsLndpZHRoID0gaSwgbC5taW5XaWR0aCA9IG8sIGwubWF4V2lkdGggPSBhKSksIHUKLSAgICB9
KSA6IG8uZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSAmJiAoUnQgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgIHJldHVybiBlLmN1cnJlbnRTdHlsZQotICAgIH0sIFd0ID0gZnVuY3Rpb24oZSwg
biwgcikgewotICAgICAgICB2YXIgaSwgbywgYSwgcyA9IHIgfHwgUnQoZSksIHUgPSBzID8gc1tu
XTogdCwgbCA9IGUuc3R5bGU7Ci0gICAgICAgIHJldHVybiBudWxsID09IHUgJiYgbCAmJiBsW25d
ICYmICh1ID0gbFtuXSksIFl0LnRlc3QodSkmJiF6dC50ZXN0KG4pICYmIChpID0gbC5sZWZ0LCBv
ID0gZS5ydW50aW1lU3R5bGUsIGEgPSBvICYmIG8ubGVmdCwgYSAmJiAoby5sZWZ0ID0gZS5jdXJy
ZW50U3R5bGUubGVmdCksIGwubGVmdCA9ICJmb250U2l6ZSIgPT09IG4gPyAiMWVtIiA6IHUsIHUg
PSBsLnBpeGVsTGVmdCArICJweCIsIGwubGVmdCA9IGksIGEgJiYgKG8ubGVmdCA9IGEpKSwgIiIg
PT09IHUgPyAiYXV0byIgOiB1Ci0gICAgfSk7Ci0gICAgZnVuY3Rpb24gb24oZSwgdCwgbikgewot
ICAgICAgICB2YXIgciA9IFZ0LmV4ZWModCk7Ci0gICAgICAgIHJldHVybiByID8gTWF0aC5tYXgo
MCwgclsxXSAtIChuIHx8IDApKSArIChyWzJdIHx8ICJweCIpIDogdAotICAgIH0KLSAgICBmdW5j
dGlvbiBhbihlLCB0LCBuLCByLCBpKSB7Ci0gICAgICAgIHZhciBvID0gbiA9PT0gKHIgPyAiYm9y
ZGVyIiA6ICJjb250ZW50IikgPyA0OiAid2lkdGgiID09PSB0ID8gMTogMCwgYSA9IDA7Ci0gICAg
ICAgIGZvciAoOyA0ID4gbzsgbyArPSAyKQotICAgICAgICAgICAgIm1hcmdpbiIgPT09IG4gJiYg
KGEgKz0gYi5jc3MoZSwgbiArIFp0W29dLCAhMCwgaSkpLCByID8gKCJjb250ZW50IiA9PT0gbiAm
JiAoYSAtPSBiLmNzcyhlLCAicGFkZGluZyIgKyBadFtvXSwgITAsIGkpKSwgIm1hcmdpbiIgIT09
IG4gJiYgKGEgLT0gYi5jc3MoZSwgImJvcmRlciIgKyBadFtvXSArICJXaWR0aCIsICEwLCBpKSkp
IDogKGEgKz0gYi5jc3MoZSwgInBhZGRpbmciICsgWnRbb10sICEwLCBpKSwgInBhZGRpbmciICE9
PSBuICYmIChhICs9IGIuY3NzKGUsICJib3JkZXIiICsgWnRbb10gKyAiV2lkdGgiLCAhMCwgaSkp
KTsKLSAgICAgICAgcmV0dXJuIGEKLSAgICB9Ci0gICAgZnVuY3Rpb24gc24oZSwgdCwgbikgewot
ICAgICAgICB2YXIgcj0hMCwgaSA9ICJ3aWR0aCIgPT09IHQgPyBlLm9mZnNldFdpZHRoIDogZS5v
ZmZzZXRIZWlnaHQsIG8gPSBSdChlKSwgYSA9IGIuc3VwcG9ydC5ib3hTaXppbmcgJiYgImJvcmRl
ci1ib3giID09PSBiLmNzcyhlLCAiYm94U2l6aW5nIiwgITEsIG8pOwotICAgICAgICBpZiAoMCA+
PSBpIHx8IG51bGwgPT0gaSkgewotICAgICAgICAgICAgaWYgKGkgPSBXdChlLCB0LCBvKSwgKDAg
PiBpIHx8IG51bGwgPT0gaSkgJiYgKGkgPSBlLnN0eWxlW3RdKQotICAgICAgICAgICAgICAgICwg
WXQudGVzdChpKSlyZXR1cm4gaTsKLSAgICAgICAgICAgIHIgPSBhICYmIChiLnN1cHBvcnQuYm94
U2l6aW5nUmVsaWFibGUgfHwgaSA9PT0gZS5zdHlsZVt0XSksIGkgPSBwYXJzZUZsb2F0KGkpIHx8
IDAKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaSArIGFuKGUsIHQsIG4gfHwgKGEgPyAiYm9y
ZGVyIiA6ICJjb250ZW50IiksIHIsIG8pICsgInB4IgotICAgIH0KLSAgICBmdW5jdGlvbiB1bihl
KSB7Ci0gICAgICAgIHZhciB0ID0gbywgbiA9IEd0W2VdOwotICAgICAgICByZXR1cm4gbiB8fCAo
biA9IGxuKGUsIHQpLCAibm9uZSIgIT09IG4gJiYgbiB8fCAoUHQgPSAoUHQgfHwgYigiPGlmcmFt
ZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIs
ICJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQp
LCB0ID0gKFB0WzBdLmNvbnRlbnRXaW5kb3cgfHwgUHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1
bWVudCwgdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksIHQuY2xvc2UoKSwg
biA9IGxuKGUsIHQpLCBQdC5kZXRhY2goKSksIEd0W2VdID0gbiksIG4KLSAgICB9Ci0gICAgZnVu
Y3Rpb24gbG4oZSwgdCkgewotICAgICAgICB2YXIgbiA9IGIodC5jcmVhdGVFbGVtZW50KGUpKS5h
cHBlbmRUbyh0LmJvZHkpLCByID0gYi5jc3MoblswXSwgImRpc3BsYXkiKTsKLSAgICAgICAgcmV0
dXJuIG4ucmVtb3ZlKCksIHIKLSAgICB9Ci0gICAgYi5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0s
IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgYi5jc3NIb29rc1tuXSA9IHsKLSAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oZSwgciwgaSkgewotICAgICAgICAgICAgICAgIHJldHVybiByID8gMCA9
PT0gZS5vZmZzZXRXaWR0aCAmJiBYdC50ZXN0KGIuY3NzKGUsICJkaXNwbGF5IikpID8gYi5zd2Fw
KGUsIFF0LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNuKGUsIG4s
IGkpCi0gICAgICAgICAgICAgICAgfSkgOiBzbihlLCBuLCBpKSA6IHQKLSAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQsIHIpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaSA9IHIgJiYgUnQoZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9uKGUsIHQsIHIgPyBh
bihlLCBuLCByLCBiLnN1cHBvcnQuYm94U2l6aW5nICYmICJib3JkZXItYm94IiA9PT0gYi5jc3Mo
ZSwgImJveFNpemluZyIsICExLCBpKSwgaSkgOiAwKQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSksIGIuc3VwcG9ydC5vcGFjaXR5IHx8IChiLmNzc0hvb2tzLm9wYWNpdHkgPSB7Ci0g
ICAgICAgIGdldDogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcmV0dXJuIEl0LnRlc3Qo
KHQgJiYgZS5jdXJyZW50U3R5bGUgPyBlLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBlLnN0eWxlLmZp
bHRlcikgfHwgIiIpID8gLjAxICogcGFyc2VGbG9hdChSZWdFeHAuJDEpICsgIiIgOiB0ID8gIjEi
IDogIiIKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAg
ICAgICB2YXIgbiA9IGUuc3R5bGUsIHIgPSBlLmN1cnJlbnRTdHlsZSwgaSA9IGIuaXNOdW1lcmlj
KHQpID8gImFscGhhKG9wYWNpdHk9IiArIDEwMCAqIHQgKyAiKSI6ICIiLCBvID0gciAmJiByLmZp
bHRlciB8fCBuLmZpbHRlciB8fCAiIjsKLSAgICAgICAgICAgIG4uem9vbSA9IDEsICh0ID49IDEg
fHwgIiIgPT09IHQpICYmICIiID09PSBiLnRyaW0oby5yZXBsYWNlKCR0LCAiIikpICYmIG4ucmVt
b3ZlQXR0cmlidXRlICYmIChuLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksICIiID09PSB0IHx8
IHImJiFyLmZpbHRlcikgfHwgKG4uZmlsdGVyID0gJHQudGVzdChvKSA/IG8ucmVwbGFjZSgkdCwg
aSkgOiBvICsgIiAiICsgaSkKLSAgICAgICAgfQotICAgIH0pLCBiKGZ1bmN0aW9uKCkgewotICAg
ICAgICBiLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCB8fCAoYi5jc3NIb29rcy5tYXJnaW5S
aWdodCA9IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAg
ICAgIHJldHVybiBuID8gYi5zd2FwKGUsIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzcGxheTog
ImlubGluZS1ibG9jayIKLSAgICAgICAgICAgICAgICB9LCBXdCwgW2UsICJtYXJnaW5SaWdodCJd
KSA6IHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSksICFiLnN1cHBvcnQucGl4ZWxQb3NpdGlv
biAmJiBiLmZuLnBvc2l0aW9uICYmIGIuZWFjaChbInRvcCIsICJsZWZ0Il0sIGZ1bmN0aW9uKGUs
IG4pIHsKLSAgICAgICAgICAgIGIuY3NzSG9va3Nbbl0gPSB7Ci0gICAgICAgICAgICAgICAgZ2V0
OiBmdW5jdGlvbihlLCByKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByID8gKHIgPSBX
dChlLCBuKSwgWXQudGVzdChyKSA/IGIoZSkucG9zaXRpb24oKVtuXSArICJweCIgOiByKSA6IHQK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAgfSksIGIu
ZXhwciAmJiBiLmV4cHIuZmlsdGVycyAmJiAoYi5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rp
b24oZSkgewotICAgICAgICByZXR1cm4gMCA+PSBlLm9mZnNldFdpZHRoICYmIDAgPj0gZS5vZmZz
ZXRIZWlnaHQgfHwhYi5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAibm9uZSIgPT09
IChlLnN0eWxlICYmIGUuc3R5bGUuZGlzcGxheSB8fCBiLmNzcyhlLCAiZGlzcGxheSIpKQotICAg
IH0sIGIuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHJldHVy
biAhYi5leHByLmZpbHRlcnMuaGlkZGVuKGUpCi0gICAgfSksIGIuZWFjaCh7Ci0gICAgICAgIG1h
cmdpbjogIiIsCi0gICAgICAgIHBhZGRpbmc6ICIiLAotICAgICAgICBib3JkZXI6ICJXaWR0aCIK
LSAgICB9LCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGIuY3NzSG9va3NbZSArIHRdID0gewot
ICAgICAgICAgICAgZXhwYW5kOiBmdW5jdGlvbihuKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHIg
PSAwLCBpID0ge30sIG8gPSAic3RyaW5nIiA9PSB0eXBlb2YgbiA/IG4uc3BsaXQoIiAiKTogW25d
OwotICAgICAgICAgICAgICAgIGZvciAoOyA0ID4gcjsgcisrKQotICAgICAgICAgICAgICAgICAg
ICBpW2UgKyBadFtyXSArIHRdID0gb1tyXSB8fCBvW3ItMl0gfHwgb1swXTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaQotICAgICAgICAgICAgfQotICAgICAgICB9LCBVdC50ZXN0KGUpIHx8IChi
LmNzc0hvb2tzW2UgKyB0XS5zZXQgPSBvbikKLSAgICB9KTsKLSAgICB2YXIgY24gPSAvJTIwL2cs
IHBuID0gL1xbXF0kLywgZm4gPSAvXHI/XG4vZywgZG4gPSAvXig/OnN1Ym1pdHxidXR0b258aW1h
Z2V8cmVzZXR8ZmlsZSkkL2ksIGhuID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2Vu
KS9pOwotICAgIGIuZm4uZXh0ZW5kKHsKLSAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHJldHVybiBiLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSkKLSAgICAg
ICAgfSwKLSAgICAgICAgc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBlID0gYi5w
cm9wKHRoaXMsICJlbGVtZW50cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlID8gYi5tYWtl
QXJyYXkoZSkgOiB0aGlzCi0gICAgICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGUgPSB0aGlzLnR5cGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMubmFtZSYmIWIodGhpcykuaXMoIjpkaXNhYmxlZCIpICYmIGhuLnRlc3QodGhpcy5ub2RlTmFt
ZSkmJiFkbi50ZXN0KGUpICYmICh0aGlzLmNoZWNrZWQgfHwhTnQudGVzdChlKSkKLSAgICAgICAg
ICAgIH0pLm1hcChmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG4gPSBiKHRo
aXMpLnZhbCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsID09IG4gPyBudWxsIDogYi5p
c0FycmF5KG4pID8gYi5tYXAobiwgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdC5uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IGUucmVwbGFjZShmbiwgIlxyXG4iKQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkgOiB7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWU6IHQubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG4ucmVwbGFjZShmbiwgIlxy
XG4iKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLmdldCgpCi0gICAgICAgIH0K
LSAgICB9KSwgYi5wYXJhbSA9IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgdmFyIHIsIGkgPSBb
XSwgbyA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHQgPSBiLmlzRnVuY3Rpb24odCkg
PyB0KCkgOiBudWxsID09IHQgPyAiIiA6IHQsIGlbaS5sZW5ndGhdID0gZW5jb2RlVVJJQ29tcG9u
ZW50KGUpICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHQpCi0gICAgICAgIH07Ci0gICAgICAg
IGlmIChuID09PSB0ICYmIChuID0gYi5hamF4U2V0dGluZ3MgJiYgYi5hamF4U2V0dGluZ3MudHJh
ZGl0aW9uYWwpLCBiLmlzQXJyYXkoZSkgfHwgZS5qcXVlcnkmJiFiLmlzUGxhaW5PYmplY3QoZSkK
LSAgICAgICAgICAgICliLmVhY2goZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBvKHRoaXMu
bmFtZSwgdGhpcy52YWx1ZSkKLSAgICAgICAgfSk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAg
ICBmb3IgKHIgaW4gZSkKLSAgICAgICAgICAgICAgICBnbihyLCBlW3JdLCBuLCBvKTsKLSAgICAg
ICAgcmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2UoY24sICIrIikKLSAgICB9OwotICAgIGZ1bmN0
aW9uIGduKGUsIHQsIG4sIHIpIHsKLSAgICAgICAgdmFyIGk7Ci0gICAgICAgIGlmIChiLmlzQXJy
YXkodCkpCi0gICAgICAgICAgICBiLmVhY2godCwgZnVuY3Rpb24odCwgaSkgewotICAgICAgICAg
ICAgICAgIG4gfHwgcG4udGVzdChlKSA/IHIoZSwgaSkgOiBnbihlICsgIlsiICsgKCJvYmplY3Qi
ID09IHR5cGVvZiBpID8gdCA6ICIiKSArICJdIiwgaSwgbiwgcikKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICBlbHNlIGlmIChuIHx8ICJvYmplY3QiICE9PSBiLnR5cGUodCkpCi0gICAgICAgICAg
ICByKGUsIHQpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgZm9yIChpIGluIHQpCi0gICAg
ICAgICAgICAgICAgZ24oZSArICJbIiArIGkgKyAiXSIsIHRbaV0sIG4sIHIpCi0gICAgfQotICAg
IGIuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1
bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3Zl
ciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5
ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSwgZnVuY3Rp
b24oZSwgdCkgewotICAgICAgICBiLmZuW3RdID0gZnVuY3Rpb24oZSwgbikgewotICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gdGhpcy5vbih0LCBudWxsLCBlLCBuKSA6
IHRoaXMudHJpZ2dlcih0KQotICAgICAgICB9Ci0gICAgfSksIGIuZm4uaG92ZXIgPSBmdW5jdGlv
bihlLCB0KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0
IHx8IGUpCi0gICAgfTsKLSAgICB2YXIgbW4sIHluLCB2biA9IGIubm93KCksIGJuID0gL1w/Lywg
eG4gPSAvIy4qJC8sIHduID0gLyhbPyZdKV89W14mXSovLCBUbiA9IC9eKC4qPyk6WyBcdF0qKFte
XHJcbl0qKVxyPyQvZ20sIE5uID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5z
aW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sIENuID0gL14oPzpHRVR8SEVBRCkkLywga24gPSAvXlwv
XC8vLCBFbiA9IC9eKFtcdy4rLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywg
U24gPSBiLmZuLmxvYWQsIEFuID0ge30sIGpuID0ge30sIERuID0gIiovIi5jb25jYXQoIioiKTsK
LSAgICB0cnkgewotICAgICAgICB5biA9IGEuaHJlZgotICAgIH0gY2F0Y2ggKExuKSB7Ci0gICAg
ICAgIHluID0gby5jcmVhdGVFbGVtZW50KCJhIiksIHluLmhyZWYgPSAiIiwgeW4gPSB5bi5ocmVm
Ci0gICAgfQotICAgIG1uID0gRW4uZXhlYyh5bi50b0xvd2VyQ2FzZSgpKSB8fCBbXTsKLSAgICBm
dW5jdGlvbiBIbihlKSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbih0LCBuKSB7Ci0gICAgICAg
ICAgICAic3RyaW5nIiAhPSB0eXBlb2YgdCAmJiAobiA9IHQsIHQgPSAiKiIpOwotICAgICAgICAg
ICAgdmFyIHIsIGkgPSAwLCBvID0gdC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpIHx8IFtdOwotICAg
ICAgICAgICAgaWYgKGIuaXNGdW5jdGlvbihuKSkKLSAgICAgICAgICAgICAgICB3aGlsZSAociA9
IG9baSsrXSkKLSAgICAgICAgICAgICAgICAgICAgIisiID09PSByWzBdID8gKHIgPSByLnNsaWNl
KDEpIHx8ICIqIiwgKGVbcl0gPSBlW3JdIHx8IFtdKS51bnNoaWZ0KG4pKSA6IChlW3JdID0gZVty
XSB8fCBbXSkucHVzaChuKQotICAgICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHFuKGUsIG4s
IHIsIGkpIHsKLSAgICAgICAgdmFyIG8gPSB7fSwgYSA9IGUgPT09IGpuOwotICAgICAgICBmdW5j
dGlvbiBzKHUpIHsKLSAgICAgICAgICAgIHZhciBsOwotICAgICAgICAgICAgcmV0dXJuIG9bdV09
ITAsIGIuZWFjaChlW3VdIHx8IFtdLCBmdW5jdGlvbihlLCB1KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGMgPSB1KG4sIHIsIGkpOwotICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiAhPSB0
eXBlb2YgYyB8fCBhIHx8IG9bY10gPyBhPyEobCA9IGMpIDogdCA6IChuLmRhdGFUeXBlcy51bnNo
aWZ0KGMpLCBzKGMpLCAhMSkKLSAgICAgICAgICAgIH0pLCBsCi0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHMobi5kYXRhVHlwZXNbMF0pIHx8IW9bIioiXSAmJiBzKCIqIikKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gTW4oZSwgbikgewotICAgICAgICB2YXIgciwgaSwgbyA9IGIuYWpheFNldHRpbmdz
LmZsYXRPcHRpb25zIHx8IHt9OwotICAgICAgICBmb3IgKGkgaW4gbikKLSAgICAgICAgICAgIG5b
aV0gIT09IHQgJiYgKChvW2ldID8gZSA6IHIgfHwgKHIgPSB7fSkpW2ldID0gbltpXSk7Ci0gICAg
ICAgIHJldHVybiByICYmIGIuZXh0ZW5kKCEwLCBlLCByKSwgZQotICAgIH0KLSAgICBiLmZuLmxv
YWQgPSBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAgIGlmICgic3RyaW5nIiAhPSB0eXBlb2Yg
ZSAmJiBTbikKLSAgICAgICAgICAgIHJldHVybiBTbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
ICAgICAgICB2YXIgaSwgbywgYSwgcyA9IHRoaXMsIHUgPSBlLmluZGV4T2YoIiAiKTsKLSAgICAg
ICAgcmV0dXJuIHUgPj0gMCAmJiAoaSA9IGUuc2xpY2UodSwgZS5sZW5ndGgpLCBlID0gZS5zbGlj
ZSgwLCB1KSksIGIuaXNGdW5jdGlvbihuKSA/IChyID0gbiwgbiA9IHQpIDogbiAmJiAib2JqZWN0
IiA9PSB0eXBlb2YgbiAmJiAoYSA9ICJQT1NUIiksIHMubGVuZ3RoID4gMCAmJiBiLmFqYXgoewot
ICAgICAgICAgICAgdXJsOiBlLAotICAgICAgICAgICAgdHlwZTogYSwKLSAgICAgICAgICAgIGRh
dGFUeXBlOiAiaHRtbCIsCi0gICAgICAgICAgICBkYXRhOiBuCi0gICAgICAgIH0pLmRvbmUoZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgbyA9IGFyZ3VtZW50cywgcy5odG1sKGkgPyBiKCI8ZGl2
PiIpLmFwcGVuZChiLnBhcnNlSFRNTChlKSkuZmluZChpKSA6IGUpCi0gICAgICAgIH0pLmNvbXBs
ZXRlKHIgJiYgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcy5lYWNoKHIsIG8gfHwgW2Uu
cmVzcG9uc2VUZXh0LCB0LCBlXSkKLSAgICAgICAgfSksIHRoaXMKLSAgICB9LCBiLmVhY2goWyJh
amF4U3RhcnQiLCAiYWpheFN0b3AiLCAiYWpheENvbXBsZXRlIiwgImFqYXhFcnJvciIsICJhamF4
U3VjY2VzcyIsICJhamF4U2VuZCJdLCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGIuZm5bdF0g
PSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5vbih0LCBlKQotICAgICAg
ICB9Ci0gICAgfSksIGIuZWFjaChbImdldCIsICJwb3N0Il0sIGZ1bmN0aW9uKGUsIG4pIHsKLSAg
ICAgICAgYltuXSA9IGZ1bmN0aW9uKGUsIHIsIGksIG8pIHsKLSAgICAgICAgICAgIHJldHVybiBi
LmlzRnVuY3Rpb24ocikgJiYgKG8gPSBvIHx8IGksIGkgPSByLCByID0gdCksIGIuYWpheCh7Ci0g
ICAgICAgICAgICAgICAgdXJsOiBlLAotICAgICAgICAgICAgICAgIHR5cGU6IG4sCi0gICAgICAg
ICAgICAgICAgZGF0YVR5cGU6IG8sCi0gICAgICAgICAgICAgICAgZGF0YTogciwKLSAgICAgICAg
ICAgICAgICBzdWNjZXNzOiBpCi0gICAgICAgICAgICB9KQotICAgICAgICB9Ci0gICAgfSksIGIu
ZXh0ZW5kKHsKLSAgICAgICAgYWN0aXZlOiAwLAotICAgICAgICBsYXN0TW9kaWZpZWQ6IHt9LAot
ICAgICAgICBldGFnOiB7fSwKLSAgICAgICAgYWpheFNldHRpbmdzOiB7Ci0gICAgICAgICAgICB1
cmw6IHluLAotICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgICAgICBpc0xvY2FsOiBO
bi50ZXN0KG1uWzFdKSwKLSAgICAgICAgICAgIGdsb2JhbDogITAsCi0gICAgICAgICAgICBwcm9j
ZXNzRGF0YTogITAsCi0gICAgICAgICAgICBhc3luYzogITAsCi0gICAgICAgICAgICBjb250ZW50
VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIs
Ci0gICAgICAgICAgICBhY2NlcHRzOiB7Ci0gICAgICAgICAgICAgICAgIioiOiBEbiwKLSAgICAg
ICAgICAgICAgICB0ZXh0OiAidGV4dC9wbGFpbiIsCi0gICAgICAgICAgICAgICAgaHRtbDogInRl
eHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3ht
bCIsCi0gICAgICAgICAgICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNj
cmlwdCIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBjb250ZW50czogewotICAgICAgICAg
ICAgICAgIHhtbDogL3htbC8sCi0gICAgICAgICAgICAgICAgaHRtbDogL2h0bWwvLAotICAgICAg
ICAgICAgICAgIGpzb246IC9qc29uLwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHJlc3Bv
bnNlRmllbGRzOiB7Ci0gICAgICAgICAgICAgICAgeG1sOiAicmVzcG9uc2VYTUwiLAotICAgICAg
ICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRleHQiCi0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgY29udmVydGVyczogewotICAgICAgICAgICAgICAgICIqIHRleHQiOiBlLlN0cmluZywKLSAg
ICAgICAgICAgICAgICAidGV4dCBodG1sIjogITAsCi0gICAgICAgICAgICAgICAgInRleHQganNv
biI6IGIucGFyc2VKU09OLAotICAgICAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGIucGFyc2VYTUwK
LSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmbGF0T3B0aW9uczogewotICAgICAgICAgICAg
ICAgIHVybDogITAsCi0gICAgICAgICAgICAgICAgY29udGV4dDogITAKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwKLSAgICAgICAgYWpheFNldHVwOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdCA/IE1uKE1uKGUsIGIuYWpheFNldHRpbmdzKSwgdCkgOiBNbihiLmFqYXhT
ZXR0aW5ncywgZSkKLSAgICAgICAgfSwKLSAgICAgICAgYWpheFByZWZpbHRlcjogSG4oQW4pLAot
ICAgICAgICBhamF4VHJhbnNwb3J0OiBIbihqbiksCi0gICAgICAgIGFqYXg6IGZ1bmN0aW9uKGUs
IG4pIHsKLSAgICAgICAgICAgICJvYmplY3QiID09IHR5cGVvZiBlICYmIChuID0gZSwgZSA9IHQp
LCBuID0gbiB8fCB7fTsKLSAgICAgICAgICAgIHZhciByLCBpLCBvLCBhLCBzLCB1LCBsLCBjLCBw
ID0gYi5hamF4U2V0dXAoe30sIG4pLCBmID0gcC5jb250ZXh0IHx8IHAsIGQgPSBwLmNvbnRleHQg
JiYgKGYubm9kZVR5cGUgfHwgZi5qcXVlcnkpID8gYihmKTogYi5ldmVudCwgaCA9IGIuRGVmZXJy
ZWQoKSwgZyA9IGIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCBtID0gcC5zdGF0dXNDb2RlIHx8
IHt9LCB5ID0ge30sIHYgPSB7fSwgeCA9IDAsIFQgPSAiY2FuY2VsZWQiLCBOID0gewotICAgICAg
ICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCi0gICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFk
ZXI6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICgyID09PSB4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0ge307Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKHQgPSBUbi5leGVjKGEpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjW3RbMV0udG9Mb3dlckNhc2UoKV0gPSB0WzJdCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ID0gY1tlLnRvTG93ZXJDYXNlKCld
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwg
PT0gdCA/IG51bGwgOiB0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBnZXRB
bGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMiA9PT0geCA/IGEgOiBudWxsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg
ICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBuID0gZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geCB8
fCAoZSA9IHZbbl0gPSB2W25dIHx8IGUsIHlbZV0gPSB0KSwgdGhpcwotICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oZSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geCB8fCAocC5taW1lVHlwZSA9IGUpLCB0aGlzCi0gICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0OwotICAgICAgICAgICAgICAgICAgICBpZiAoZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgyID4geCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHQgaW4gZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVt0
XSA9IFttW3RdLCBlW3RdXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTi5hbHdheXMoZVtOLnN0YXR1c10pOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
YWJvcnQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlIHx8IFQ7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsICYmIGwuYWJvcnQodCksIGsoMCwgdCksIHRo
aXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKGgu
cHJvbWlzZShOKS5jb21wbGV0ZSA9IGcuYWRkLCBOLnN1Y2Nlc3MgPSBOLmRvbmUsIE4uZXJyb3Ig
PSBOLmZhaWwsIHAudXJsID0gKChlIHx8IHAudXJsIHx8IHluKSArICIiKS5yZXBsYWNlKHhuLCAi
IikucmVwbGFjZShrbiwgbW5bMV0gKyAiLy8iKSwgcC50eXBlID0gbi5tZXRob2QgfHwgbi50eXBl
IHx8IHAubWV0aG9kIHx8IHAudHlwZSwgcC5kYXRhVHlwZXMgPSBiLnRyaW0ocC5kYXRhVHlwZSB8
fCAiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2godykgfHwgWyIiXSwgbnVsbCA9PSBwLmNyb3NzRG9t
YWluICYmIChyID0gRW4uZXhlYyhwLnVybC50b0xvd2VyQ2FzZSgpKSwgcC5jcm9zc0RvbWFpbj0h
KCFyIHx8IHJbMV0gPT09IG1uWzFdICYmIHJbMl0gPT09IG1uWzJdICYmIChyWzNdIHx8ICgiaHR0
cDoiID09PSByWzFdID8gODAgOiA0NDMpKSA9PSAobW5bM10gfHwgKCJodHRwOiIgPT09IG1uWzFd
ID8gODAgOiA0NDMpKSkpLCBwLmRhdGEgJiYgcC5wcm9jZXNzRGF0YSAmJiAic3RyaW5nIiAhPSB0
eXBlb2YgcC5kYXRhICYmIChwLmRhdGEgPSBiLnBhcmFtKHAuZGF0YSwgcC50cmFkaXRpb25hbCkp
LCBxbihBbiwgcCwgbiwgTiksIDIgPT09IHgpcmV0dXJuIE47Ci0gICAgICAgICAgICB1ID0gcC5n
bG9iYWwsIHUgJiYgMCA9PT0gYi5hY3RpdmUrKyYmYi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQi
KSwgcC50eXBlID0gcC50eXBlLnRvVXBwZXJDYXNlKCksIHAuaGFzQ29udGVudD0hQ24udGVzdChw
LnR5cGUpLCBvID0gcC51cmwsIHAuaGFzQ29udGVudCB8fCAocC5kYXRhICYmIChvID0gcC51cmwg
Kz0gKGJuLnRlc3QobykgPyAiJiIgOiAiPyIpICsgcC5kYXRhLCBkZWxldGUgcC5kYXRhKSwgcC5j
YWNoZT09PSExICYmIChwLnVybCA9IHduLnRlc3QobykgPyBvLnJlcGxhY2Uod24sICIkMV89IiAr
IHZuKyspIDogbyArIChibi50ZXN0KG8pID8gIiYiIDogIj8iKSArICJfPSIgKyB2bisrKSksIHAu
aWZNb2RpZmllZCAmJiAoYi5sYXN0TW9kaWZpZWRbb10gJiYgTi5zZXRSZXF1ZXN0SGVhZGVyKCJJ
Zi1Nb2RpZmllZC1TaW5jZSIsIGIubGFzdE1vZGlmaWVkW29dKSwgYi5ldGFnW29dICYmIE4uc2V0
UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsIGIuZXRhZ1tvXSkpLCAocC5kYXRhICYmIHAu
aGFzQ29udGVudCAmJiBwLmNvbnRlbnRUeXBlIT09ITEgfHwgbi5jb250ZW50VHlwZSkgJiYgTi5z
ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCBwLmNvbnRlbnRUeXBlKSwgTi5zZXRSZXF1
ZXN0SGVhZGVyKCJBY2NlcHQiLCBwLmRhdGFUeXBlc1swXSAmJiBwLmFjY2VwdHNbcC5kYXRhVHlw
ZXNbMF1dID8gcC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXSArICgiKiIgIT09IHAuZGF0YVR5cGVz
WzBdID8gIiwgIiArIERuICsgIjsgcT0wLjAxIiA6ICIiKSA6IHAuYWNjZXB0c1siKiJdKTsKLSAg
ICAgICAgICAgIGZvciAoaSBpbiBwLmhlYWRlcnMpCi0gICAgICAgICAgICAgICAgTi5zZXRSZXF1
ZXN0SGVhZGVyKGksIHAuaGVhZGVyc1tpXSk7Ci0gICAgICAgICAgICBpZiAocC5iZWZvcmVTZW5k
ICYmIChwLmJlZm9yZVNlbmQuY2FsbChmLCBOLCBwKT09PSExIHx8IDIgPT09IHgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBOLmFib3J0KCk7Ci0gICAgICAgICAgICBUID0gImFib3J0IjsKLSAg
ICAgICAgICAgIGZvciAoaSBpbnsKLSAgICAgICAgICAgICAgICBzdWNjZXNzOiAxLAotICAgICAg
ICAgICAgICAgIGVycm9yOiAxLAotICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAxCi0gICAgICAg
ICAgICB9KQotICAgICAgICAgICAgICAgIE5baV0ocFtpXSk7Ci0gICAgICAgICAgICBpZiAobCA9
IHFuKGpuLCBwLCBuLCBOKSkgewotICAgICAgICAgICAgICAgIE4ucmVhZHlTdGF0ZSA9IDEsIHUg
JiYgZC50cmlnZ2VyKCJhamF4U2VuZCIsIFtOLCBwXSksIHAuYXN5bmMgJiYgcC50aW1lb3V0ID4g
MCAmJiAocyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIE4u
YWJvcnQoInRpbWVvdXQiKQotICAgICAgICAgICAgICAgIH0sIHAudGltZW91dCkpOwotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxLCBsLnNlbmQoeSwgaykK
LSAgICAgICAgICAgICAgICB9IGNhdGNoIChDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
KDIgPiB4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEM7Ci0gICAgICAgICAgICAg
ICAgICAgIGsoLTEsIEMpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIAot
ICAgICAgICAgICAgICAgIGsoLTEsICJObyBUcmFuc3BvcnQiKTsKLSAgICAgICAgICAgIGZ1bmN0
aW9uIGsoZSwgbiwgciwgaSkgewotICAgICAgICAgICAgICAgIHZhciBjLCB5LCB2LCB3LCBULCBD
ID0gbjsKLSAgICAgICAgICAgICAgICAyICE9PSB4ICYmICh4ID0gMiwgcyAmJiBjbGVhclRpbWVv
dXQocyksIGwgPSB0LCBhID0gaSB8fCAiIiwgTi5yZWFkeVN0YXRlID0gZSA+IDAgPyA0IDogMCwg
ciAmJiAodyA9IF9uKHAsIE4sIHIpKSwgZSA+PSAyMDAgJiYgMzAwID4gZSB8fCAzMDQgPT09IGUg
PyAocC5pZk1vZGlmaWVkICYmIChUID0gTi5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmll
ZCIpLCBUICYmIChiLmxhc3RNb2RpZmllZFtvXSA9IFQpLCBUID0gTi5nZXRSZXNwb25zZUhlYWRl
cigiZXRhZyIpLCBUICYmIChiLmV0YWdbb10gPSBUKSksIDIwNCA9PT0gZSA/IChjPSEwLCBDID0g
Im5vY29udGVudCIpIDogMzA0ID09PSBlID8gKGM9ITAsIEMgPSAibm90bW9kaWZpZWQiKSA6IChj
ID0gRm4ocCwgdyksIEMgPSBjLnN0YXRlLCB5ID0gYy5kYXRhLCB2ID0gYy5lcnJvciwgYz0hdikp
IDogKHYgPSBDLCAoZSB8fCFDKSAmJiAoQyA9ICJlcnJvciIsIDAgPiBlICYmIChlID0gMCkpKSwg
Ti5zdGF0dXMgPSBlLCBOLnN0YXR1c1RleHQgPSAobiB8fCBDKSArICIiLCBjID8gaC5yZXNvbHZl
V2l0aChmLCBbeSwgQywgTl0pIDogaC5yZWplY3RXaXRoKGYsIFtOLCBDLCB2XSksIE4uc3RhdHVz
Q29kZShtKSwgbSA9IHQsIHUgJiYgZC50cmlnZ2VyKGMgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhF
cnJvciIsIFtOLCBwLCBjID8geTogdl0pLCBnLmZpcmVXaXRoKGYsIFtOLCBDXSksIHUgJiYgKGQu
dHJpZ2dlcigiYWpheENvbXBsZXRlIiwgW04sIHBdKSwgLS1iLmFjdGl2ZSB8fCBiLmV2ZW50LnRy
aWdnZXIoImFqYXhTdG9wIikpKQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE4K
LSAgICAgICAgfSwKLSAgICAgICAgZ2V0U2NyaXB0OiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gYi5nZXQoZSwgdCwgbiwgInNjcmlwdCIpCi0gICAgICAgIH0sCi0gICAgICAg
IGdldEpTT046IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHJldHVybiBiLmdldChl
LCB0LCBuLCAianNvbiIpCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBmdW5jdGlvbiBfbihlLCBu
LCByKSB7Ci0gICAgICAgIHZhciBpLCBvLCBhLCBzLCB1ID0gZS5jb250ZW50cywgbCA9IGUuZGF0
YVR5cGVzLCBjID0gZS5yZXNwb25zZUZpZWxkczsKLSAgICAgICAgZm9yIChzIGluIGMpCi0gICAg
ICAgICAgICBzIGluIHIgJiYgKG5bY1tzXV0gPSByW3NdKTsKLSAgICAgICAgd2hpbGUgKCIqIiA9
PT0gbFswXSkKLSAgICAgICAgICAgIGwuc2hpZnQoKSwgbyA9PT0gdCAmJiAobyA9IGUubWltZVR5
cGUgfHwgbi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOwotICAgICAgICBpZiAo
bykKLSAgICAgICAgICAgIGZvciAocyBpbiB1KQotICAgICAgICAgICAgICAgIGlmICh1W3NdICYm
IHVbc10udGVzdChvKSkgewotICAgICAgICAgICAgICAgICAgICBsLnVuc2hpZnQocyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgfQotICAgICAgICBpZiAobFsw
XWluIHIpCi0gICAgICAgICAgICBhID0gbFswXTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKHMgaW4gcikgewotICAgICAgICAgICAgICAgIGlmICghbFswXSB8fCBlLmNvbnZlcnRl
cnNbcyArICIgIiArIGxbMF1dKSB7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSBzOwotICAgICAg
ICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
IHx8IChpID0gcykKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGEgPSBhIHx8IGkKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gYSA/IChhICE9PSBsWzBdICYmIGwudW5zaGlmdChhKSwgclth
XSkgOiB0Ci0gICAgfQotICAgIGZ1bmN0aW9uIEZuKGUsIHQpIHsKLSAgICAgICAgdmFyIG4sIHIs
IGksIG8sIGEgPSB7fSwgcyA9IDAsIHUgPSBlLmRhdGFUeXBlcy5zbGljZSgpLCBsID0gdVswXTsK
LSAgICAgICAgaWYgKGUuZGF0YUZpbHRlciAmJiAodCA9IGUuZGF0YUZpbHRlcih0LCBlLmRhdGFU
eXBlKSksIHVbMV0pCi0gICAgICAgICAgICBmb3IgKGkgaW4gZS5jb252ZXJ0ZXJzKQotICAgICAg
ICAgICAgICAgIGFbaS50b0xvd2VyQ2FzZSgpXSA9IGUuY29udmVydGVyc1tpXTsKLSAgICAgICAg
Zm9yICg7IHIgPSB1Wysrc107KQotICAgICAgICAgICAgaWYgKCIqIiAhPT0gcikgewotICAgICAg
ICAgICAgICAgIGlmICgiKiIgIT09IGwgJiYgbCAhPT0gcikgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA9IGFbbCArICIgIiArIHJdIHx8IGFbIiogIiArIHJdLCAhaSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAobiBpbiBhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChvID0gbi5zcGxpdCgiICIpLCBvWzFdID09PSByICYmIChpID0gYVtsICsgIiAiICsgb1swXV0g
fHwgYVsiKiAiICsgb1swXV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaT09PSEwID8gaSA9IGFbbl0gOiBh
W25dIT09ITAgJiYgKHIgPSBvWzBdLCB1LnNwbGljZShzLS0sIDAsIHIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkhPT0hMCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICYmIGVbInRocm93cyJdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBpKHQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ID0gaSh0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlOiAicGFyc2VyZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGkgPyBjOiAiTm8gY29udmVyc2lvbiBmcm9t
ICIgKyBsICsgIiB0byAiICsgcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbCA9IHIKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHN0YXRlOiAic3VjY2VzcyIsCi0gICAgICAgICAgICBkYXRhOiB0Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgYi5hamF4U2V0dXAoewotICAgICAgICBhY2NlcHRzOiB7Ci0gICAgICAg
ICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFw
cGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKLSAgICAgICAg
fSwKLSAgICAgICAgY29udGVudHM6IHsKLSAgICAgICAgICAgIHNjcmlwdDogLyg/OmphdmF8ZWNt
YSlzY3JpcHQvCi0gICAgICAgIH0sCi0gICAgICAgIGNvbnZlcnRlcnM6IHsKLSAgICAgICAgICAg
ICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYi5n
bG9iYWxFdmFsKGUpLCBlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KSwgYi5hamF4
UHJlZmlsdGVyKCJzY3JpcHQiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGUuY2FjaGUgPT09IHQg
JiYgKGUuY2FjaGU9ITEpLCBlLmNyb3NzRG9tYWluICYmIChlLnR5cGUgPSAiR0VUIiwgZS5nbG9i
YWw9ITEpCi0gICAgfSksIGIuYWpheFRyYW5zcG9ydCgic2NyaXB0IiwgZnVuY3Rpb24oZSkgewot
ICAgICAgICBpZiAoZS5jcm9zc0RvbWFpbikgewotICAgICAgICAgICAgdmFyIG4sIHIgPSBvLmhl
YWQgfHwgYigiaGVhZCIpWzBdIHx8IG8uZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbih0LCBpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG4gPSBvLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLCBuLmFzeW5jPSEwLCBlLnNj
cmlwdENoYXJzZXQgJiYgKG4uY2hhcnNldCA9IGUuc2NyaXB0Q2hhcnNldCksIG4uc3JjID0gZS51
cmwsIG4ub25sb2FkID0gbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihlLCB0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAodCB8fCFuLnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21w
bGV0ZS8udGVzdChuLnJlYWR5U3RhdGUpKSAmJiAobi5vbmxvYWQgPSBuLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IG51bGwsIG4ucGFyZW50Tm9kZSAmJiBuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiks
IG4gPSBudWxsLCB0IHx8IGkoMjAwLCAic3VjY2VzcyIpKQotICAgICAgICAgICAgICAgICAgICB9
LCByLmluc2VydEJlZm9yZShuLCByLmZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIG4g
JiYgbi5vbmxvYWQodCwgITApCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgdmFyIE9uID0gW10sIEJuID0gLyg9KVw/KD89JnwkKXxcP1w/
LzsKLSAgICBiLmFqYXhTZXR1cCh7Ci0gICAgICAgIGpzb25wOiAiY2FsbGJhY2siLAotICAgICAg
ICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBlID0gT24ucG9w
KCkgfHwgYi5leHBhbmRvICsgIl8iICsgdm4rKzsKLSAgICAgICAgICAgIHJldHVybiB0aGlzW2Vd
PSEwLCBlCi0gICAgICAgIH0KLSAgICB9KSwgYi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIiwg
ZnVuY3Rpb24obiwgciwgaSkgewotICAgICAgICB2YXIgbywgYSwgcywgdSA9IG4uanNvbnAhPT0h
MSAmJiAoQm4udGVzdChuLnVybCkgPyAidXJsIiA6ICJzdHJpbmciID09IHR5cGVvZiBuLmRhdGEm
JiEobi5jb250ZW50VHlwZSB8fCAiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkIikgJiYgQm4udGVzdChuLmRhdGEpICYmICJkYXRhIik7Ci0gICAgICAgIHJldHVy
biB1IHx8ICJqc29ucCIgPT09IG4uZGF0YVR5cGVzWzBdID8gKG8gPSBuLmpzb25wQ2FsbGJhY2sg
PSBiLmlzRnVuY3Rpb24obi5qc29ucENhbGxiYWNrKSA/IG4uanNvbnBDYWxsYmFjaygpIDogbi5q
c29ucENhbGxiYWNrLCB1ID8gblt1XSA9IG5bdV0ucmVwbGFjZShCbiwgIiQxIiArIG8pIDogbi5q
c29ucCE9PSExICYmIChuLnVybCArPSAoYm4udGVzdChuLnVybCkgPyAiJiIgOiAiPyIpICsgbi5q
c29ucCArICI9IiArIG8pLCBuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHJldHVybiBzIHx8IGIuZXJyb3IobyArICIgd2FzIG5vdCBjYWxsZWQi
KSwgc1swXQotICAgICAgICB9LCBuLmRhdGFUeXBlc1swXSA9ICJqc29uIiwgYSA9IGVbb10sIGVb
b10gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHMgPSBhcmd1bWVudHMKLSAgICAgICAgfSwg
aS5hbHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBlW29dID0gYSwgbltvXSAmJiAobi5q
c29ucENhbGxiYWNrID0gci5qc29ucENhbGxiYWNrLCBPbi5wdXNoKG8pKSwgcyAmJiBiLmlzRnVu
Y3Rpb24oYSkgJiYgYShzWzBdKSwgcyA9IGEgPSB0Ci0gICAgICAgIH0pLCAic2NyaXB0IikgOiB0
Ci0gICAgfSk7Ci0gICAgdmFyIFBuLCBSbiwgV24gPSAwLCAkbiA9IGUuQWN0aXZlWE9iamVjdCAm
JiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGU7Ci0gICAgICAgIGZvciAoZSBpbiBQbikKLSAg
ICAgICAgICAgIFBuW2VdKHQsICEwKQotICAgIH07Ci0gICAgZnVuY3Rpb24gSW4oKSB7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3QKLSAgICAg
ICAgfSBjYXRjaCAodCkge30KLSAgICB9Ci0gICAgZnVuY3Rpb24gem4oKSB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IGUuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhN
TEhUVFAiKQotICAgICAgICB9IGNhdGNoICh0KSB7fQotICAgIH0KLSAgICBiLmFqYXhTZXR0aW5n
cy54aHIgPSBlLkFjdGl2ZVhPYmplY3QgPyBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuICF0
aGlzLmlzTG9jYWwgJiYgSW4oKSB8fCB6bigpCi0gICAgfSA6IEluLCBSbiA9IGIuYWpheFNldHRp
bmdzLnhocigpLCBiLnN1cHBvcnQuY29ycz0hIVJuICYmICJ3aXRoQ3JlZGVudGlhbHMiaW4gUm4s
IFJuID0gYi5zdXBwb3J0LmFqYXg9ISFSbiwgUm4gJiYgYi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9u
KG4pIHsKLSAgICAgICAgaWYgKCFuLmNyb3NzRG9tYWluIHx8IGIuc3VwcG9ydC5jb3JzKSB7Ci0g
ICAgICAgICAgICB2YXIgcjsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
c2VuZDogZnVuY3Rpb24oaSwgbykgewotICAgICAgICAgICAgICAgICAgICB2YXIgYSwgcywgdSA9
IG4ueGhyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLnVzZXJuYW1lID8gdS5vcGVuKG4u
dHlwZSwgbi51cmwsIG4uYXN5bmMsIG4udXNlcm5hbWUsIG4ucGFzc3dvcmQpIDogdS5vcGVuKG4u
dHlwZSwgbi51cmwsIG4uYXN5bmMpLCBuLnhockZpZWxkcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAocyBpbiBuLnhockZpZWxkcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
W3NdID0gbi54aHJGaWVsZHNbc107Ci0gICAgICAgICAgICAgICAgICAgIG4ubWltZVR5cGUgJiYg
dS5vdmVycmlkZU1pbWVUeXBlICYmIHUub3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSwgbi5j
cm9zc0RvbWFpbiB8fCBpWyJYLVJlcXVlc3RlZC1XaXRoIl0gfHwgKGlbIlgtUmVxdWVzdGVkLVdp
dGgiXSA9ICJYTUxIdHRwUmVxdWVzdCIpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChzIGluIGkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdS5zZXRSZXF1ZXN0SGVhZGVyKHMsIGlbc10pCi0gICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKGwpIHt9Ci0gICAgICAgICAgICAgICAgICAgIHUuc2VuZChuLmhhc0NvbnRlbnQgJiYg
bi5kYXRhIHx8IG51bGwpLCByID0gZnVuY3Rpb24oZSwgaSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHMsIGwsIGMsIHA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyICYmIChpIHx8IDQgPT09IHUucmVhZHlTdGF0
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gdCwgYSAmJiAodS5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBiLm5vb3AsICRuICYmIGRlbGV0ZSBQblthXSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaSk0ICE9PSB1LnJlYWR5U3RhdGUgJiYgdS5h
Ym9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwID0ge30sIHMgPSB1LnN0YXR1cywgbCA9IHUuZ2V0QWxsUmVz
cG9uc2VIZWFkZXJzKCksICJzdHJpbmciID09IHR5cGVvZiB1LnJlc3BvbnNlVGV4dCAmJiAocC50
ZXh0ID0gdS5yZXNwb25zZVRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHUuc3RhdHVzVGV4
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChmKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gIiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzIHx8IW4uaXNM
b2NhbCB8fCBuLmNyb3NzRG9tYWluID8gMTIyMyA9PT0gcyAmJiAocyA9IDIwNCkgOiBzID0gcC50
ZXh0ID8gMjAwIDogNDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkgfHwgbygtMSwgZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHAgJiYgbyhzLCBjLCBwLCBsKQotICAgICAgICAgICAgICAgICAgICB9LCBuLmFz
eW5jID8gNCA9PT0gdS5yZWFkeVN0YXRlID8gc2V0VGltZW91dChyKSA6IChhPSsrV24sICRuICYm
IChQbiB8fCAoUG4gPSB7fSwgYihlKS51bmxvYWQoJG4pKSwgUG5bYV0gPSByKSwgdS5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSByKSA6IHIoKQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg
ICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByICYmIHIodCwgITAp
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0g
ICAgdmFyIFhuLCBVbiwgVm4gPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sIFluID0gUmVnRXhw
KCJeKD86KFsrLV0pPXwpKCIgKyB4ICsgIikoW2EteiVdKikkIiwgImkiKSwgSm4gPSAvcXVldWVI
b29rcyQvLCBHbiA9IFtucl0sIFFuID0gewotICAgICAgICAiKiI6IFtmdW5jdGlvbihlLCB0KSB7
Ci0gICAgICAgICAgICB2YXIgbiwgciwgaSA9IHRoaXMuY3JlYXRlVHdlZW4oZSwgdCksIG8gPSBZ
bi5leGVjKHQpLCBhID0gaS5jdXIoKSwgcyA9KyBhIHx8IDAsIHUgPSAxLCBsID0gMjA7Ci0gICAg
ICAgICAgICBpZiAobykgewotICAgICAgICAgICAgICAgIGlmIChuID0rIG9bMl0sIHIgPSBvWzNd
IHx8IChiLmNzc051bWJlcltlXSA/ICIiIDogInB4IikKLSAgICAgICAgICAgICAgICAgICAgLCAi
cHgiICE9PSByICYmIHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcyA9IGIuY3NzKGkuZWxlbSwg
ZSwgITApIHx8IG4gfHwgMTsKLSAgICAgICAgICAgICAgICAgICAgZG8gCi0gICAgICAgICAgICAg
ICAgICAgICAgICB1ID0gdSB8fCAiLjUiLCBzLz11LCBiLnN0eWxlKGkuZWxlbSwgZSwgcyArIHIp
OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAodSAhPT0gKHUgPSBpLmN1cigpIC8gYSkgJiYg
MSAhPT0gdSYmLS1sKQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaS51
bml0ID0gciwgaS5zdGFydCA9IHMsIGkuZW5kID0gb1sxXSA/IHMgKyAob1sxXSArIDEpICogbiA6
IG4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIH0KLSAgICAg
ICAgXQotICAgIH07Ci0gICAgZnVuY3Rpb24gS24oKSB7Ci0gICAgICAgIHJldHVybiBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgWG4gPSB0Ci0gICAgICAgIH0pLCBYbiA9IGIu
bm93KCkKLSAgICB9Ci0gICAgZnVuY3Rpb24gWm4oZSwgdCkgewotICAgICAgICBiLmVhY2godCwg
ZnVuY3Rpb24odCwgbikgewotICAgICAgICAgICAgdmFyIHIgPSAoUW5bdF0gfHwgW10pLmNvbmNh
dChRblsiKiJdKSwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbyA9IHIubGVuZ3Ro
OwotICAgICAgICAgICAgZm9yICg7Ci0gICAgICAgICAgICBvID4gaTsKLSAgICAgICAgICAgIGkr
KylpZiAocltpXS5jYWxsKGUsCi0gICAgICAgICAgICB0LAotICAgICAgICAgICAgbikpcmV0dXJu
IAotICAgICAgICB9KQotICAgIH0KLSAgICBmdW5jdGlvbiBlcihlLCB0LCBuKSB7Ci0gICAgICAg
IHZhciByLCBpLCBvID0gMCwgYSA9IEduLmxlbmd0aCwgcyA9IGIuRGVmZXJyZWQoKS5hbHdheXMo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBkZWxldGUgdS5lbGVtCi0gICAgICAgIH0pLCB1ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ITE7Ci0gICAgICAgICAgICB2YXIgdCA9IFhuIHx8IEtuKCksIG4gPSBNYXRoLm1heCgwLCBsLnN0
YXJ0VGltZSArIGwuZHVyYXRpb24gLSB0KSwgciA9IG4gLyBsLmR1cmF0aW9uIHx8IDAsIG8gPSAx
IC0gciwgYSA9IDAsIHUgPSBsLnR3ZWVucy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKDsgdSA+
IGE7IGErKykKLSAgICAgICAgICAgICAgICBsLnR3ZWVuc1thXS5ydW4obyk7Ci0gICAgICAgICAg
ICByZXR1cm4gcy5ub3RpZnlXaXRoKGUsIFtsLCBvLCBuXSksIDEgPiBvICYmIHUgPyBuIDogKHMu
cmVzb2x2ZVdpdGgoZSwgW2xdKSwgITEpCi0gICAgICAgIH0sIGwgPSBzLnByb21pc2UoewotICAg
ICAgICAgICAgZWxlbTogZSwKLSAgICAgICAgICAgIHByb3BzOiBiLmV4dGVuZCh7fSwgdCksCi0g
ICAgICAgICAgICBvcHRzOiBiLmV4dGVuZCghMCwgewotICAgICAgICAgICAgICAgIHNwZWNpYWxF
YXNpbmc6IHt9Ci0gICAgICAgICAgICB9LCBuKSwKLSAgICAgICAgICAgIG9yaWdpbmFsUHJvcGVy
dGllczogdCwKLSAgICAgICAgICAgIG9yaWdpbmFsT3B0aW9uczogbiwKLSAgICAgICAgICAgIHN0
YXJ0VGltZTogWG4gfHwgS24oKSwKLSAgICAgICAgICAgIGR1cmF0aW9uOiBuLmR1cmF0aW9uLAot
ICAgICAgICAgICAgdHdlZW5zOiBbXSwKLSAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlv
bih0LCBuKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHIgPSBiLlR3ZWVuKGUsIGwub3B0cywgdCwg
biwgbC5vcHRzLnNwZWNpYWxFYXNpbmdbdF0gfHwgbC5vcHRzLmVhc2luZyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGwudHdlZW5zLnB1c2gociksIHIKLSAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICBzdG9wOiBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG4gPSAwLCByID0g
dCA/IGwudHdlZW5zLmxlbmd0aDogMDsKLSAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgZm9yIChpPSEwOyByID4g
bjsgbisrKQotICAgICAgICAgICAgICAgICAgICBsLnR3ZWVuc1tuXS5ydW4oMSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHQgPyBzLnJlc29sdmVXaXRoKGUsIFtsLCB0XSkgOiBzLnJlamVjdFdp
dGgoZSwgW2wsIHRdKSwgdGhpcwotICAgICAgICAgICAgfQotICAgICAgICB9KSwgYyA9IGwucHJv
cHM7Ci0gICAgICAgIGZvciAodHIoYywgbC5vcHRzLnNwZWNpYWxFYXNpbmcpOwotICAgICAgICBh
ID4gbzsKLSAgICAgICAgbysrKWlmIChyID0gR25bb10uY2FsbChsLCBlLCBjLCBsLm9wdHMpKQot
ICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIHJldHVybiBabihsLCBjKSwgYi5pc0Z1bmN0
aW9uKGwub3B0cy5zdGFydCkgJiYgbC5vcHRzLnN0YXJ0LmNhbGwoZSwgbCksIGIuZngudGltZXIo
Yi5leHRlbmQodSwgewotICAgICAgICAgICAgZWxlbTogZSwKLSAgICAgICAgICAgIGFuaW06IGws
Ci0gICAgICAgICAgICBxdWV1ZTogbC5vcHRzLnF1ZXVlCi0gICAgICAgIH0pKSwgbC5wcm9ncmVz
cyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsIGwub3B0cy5jb21wbGV0ZSkuZmFp
bChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpCi0gICAgfQotICAgIGZ1bmN0aW9u
IHRyKGUsIHQpIHsKLSAgICAgICAgdmFyIG4sIHIsIGksIG8sIGE7Ci0gICAgICAgIGZvciAoaSBp
biBlKQotICAgICAgICAgICAgaWYgKHIgPSBiLmNhbWVsQ2FzZShpKSwgbyA9IHRbcl0sIG4gPSBl
W2ldLCBiLmlzQXJyYXkobikgJiYgKG8gPSBuWzFdLCBuID0gZVtpXSA9IG5bMF0pCi0gICAgICAg
ICAgICAgICAgLCBpICE9PSByICYmIChlW3JdID0gbiwgZGVsZXRlIGVbaV0pLCBhID0gYi5jc3NI
b29rc1tyXSwgYSAmJiAiZXhwYW5kImluIGEpIHsKLSAgICAgICAgICAgIG4gPSBhLmV4cGFuZChu
KSwgZGVsZXRlIGVbcl07Ci0gICAgICAgICAgICBmb3IgKGkgaW4gbikKLSAgICAgICAgICAgICAg
ICBpIGluIGUgfHwgKGVbaV0gPSBuW2ldLCB0W2ldID0gbykKLSAgICAgICAgfSBlbHNlIAotICAg
ICAgICAgICAgdFtyXSA9IG8KLSAgICB9Ci0gICAgYi5BbmltYXRpb24gPSBiLmV4dGVuZChlciwg
ewotICAgICAgICB0d2VlbmVyOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICBiLmlzRnVu
Y3Rpb24oZSkgPyAodCA9IGUsIGUgPSBbIioiXSkgOiBlID0gZS5zcGxpdCgiICIpOwotICAgICAg
ICAgICAgdmFyIG4sIHIgPSAwLCBpID0gZS5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKDsgaSA+
IHI7IHIrKykKLSAgICAgICAgICAgICAgICBuID0gZVtyXSwgUW5bbl0gPSBRbltuXSB8fCBbXSwg
UW5bbl0udW5zaGlmdCh0KQotICAgICAgICB9LAotICAgICAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9u
KGUsIHQpIHsKLSAgICAgICAgICAgIHQgPyBHbi51bnNoaWZ0KGUpIDogR24ucHVzaChlKQotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgZnVuY3Rpb24gbnIoZSwgdCwgbikgewotICAgICAgICB2YXIg
ciwgaSwgbywgYSwgcywgdSwgbCwgYywgcCwgZiA9IHRoaXMsIGQgPSBlLnN0eWxlLCBoID0ge30s
IGcgPSBbXSwgbSA9IGUubm9kZVR5cGUgJiYgbm4oZSk7Ci0gICAgICAgIG4ucXVldWUgfHwgKGMg
PSBiLl9xdWV1ZUhvb2tzKGUsICJmeCIpLCBudWxsID09IGMudW5xdWV1ZWQgJiYgKGMudW5xdWV1
ZWQgPSAwLCBwID0gYy5lbXB0eS5maXJlLCBjLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIGMudW5xdWV1ZWQgfHwgcCgpCi0gICAgICAgIH0pLCBjLnVucXVldWVkKyssIGYu
YWx3YXlzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZi5hbHdheXMoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgYy51bnF1ZXVlZC0tLCBiLnF1ZXVlKGUsICJmeCIpLmxlbmd0aCB8fCBj
LmVtcHR5LmZpcmUoKQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSkpLCAxID09PSBlLm5vZGVU
eXBlICYmICgiaGVpZ2h0ImluIHQgfHwgIndpZHRoImluIHQpICYmIChuLm92ZXJmbG93ID0gW2Qu
b3ZlcmZsb3csIGQub3ZlcmZsb3dYLCBkLm92ZXJmbG93WV0sICJpbmxpbmUiID09PSBiLmNzcyhl
LCAiZGlzcGxheSIpICYmICJub25lIiA9PT0gYi5jc3MoZSwgImZsb2F0IikgJiYgKGIuc3VwcG9y
dC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ICYmICJpbmxpbmUiICE9PSB1bihlLm5vZGVOYW1lKSA/
IGQuem9vbSA9IDEgOiBkLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIikpLCBuLm92ZXJmbG93ICYm
IChkLm92ZXJmbG93ID0gImhpZGRlbiIsIGIuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzIHx8IGYu
YWx3YXlzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZC5vdmVyZmxvdyA9IG4ub3ZlcmZsb3db
MF0sIGQub3ZlcmZsb3dYID0gbi5vdmVyZmxvd1sxXSwgZC5vdmVyZmxvd1kgPSBuLm92ZXJmbG93
WzJdCi0gICAgICAgIH0pKTsKLSAgICAgICAgZm9yIChpIGluIHQpCi0gICAgICAgICAgICBpZiAo
YSA9IHRbaV0sIFZuLmV4ZWMoYSkKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGlm
IChkZWxldGUgdFtpXSwgdSA9IHUgfHwgInRvZ2dsZSIgPT09IGEsIGEgPT09IChtID8gImhpZGUi
IDogInNob3ciKQotICAgICAgICAgICAgICAgICljb250aW51ZTsKLSAgICAgICAgICAgIGcucHVz
aChpKQotICAgICAgICB9Ci0gICAgICAgIGlmIChvID0gZy5sZW5ndGgpIHsKLSAgICAgICAgICAg
IHMgPSBiLl9kYXRhKGUsICJmeHNob3ciKSB8fCBiLl9kYXRhKGUsICJmeHNob3ciLCB7fSksICJo
aWRkZW4iaW4gcyAmJiAobSA9IHMuaGlkZGVuKSwgdSAmJiAocy5oaWRkZW49IW0pLCBtID8gYihl
KS5zaG93KCkgOiBmLmRvbmUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYihlKS5oaWRl
KCkKLSAgICAgICAgICAgIH0pLCBmLmRvbmUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHQ7Ci0gICAgICAgICAgICAgICAgYi5fcmVtb3ZlRGF0YShlLCAiZnhzaG93Iik7Ci0gICAg
ICAgICAgICAgICAgZm9yICh0IGluIGgpCi0gICAgICAgICAgICAgICAgICAgIGIuc3R5bGUoZSwg
dCwgaFt0XSkKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgZm9yIChpID0gMDsgbyA+IGk7
IGkrKykKLSAgICAgICAgICAgICAgICByID0gZ1tpXSwgbCA9IGYuY3JlYXRlVHdlZW4ociwgbSA/
IHNbcl0gOiAwKSwgaFtyXSA9IHNbcl0gfHwgYi5zdHlsZShlLCByKSwgciBpbiBzIHx8IChzW3Jd
ID0gbC5zdGFydCwgbSAmJiAobC5lbmQgPSBsLnN0YXJ0LCBsLnN0YXJ0ID0gIndpZHRoIiA9PT0g
ciB8fCAiaGVpZ2h0IiA9PT0gciA/IDEgOiAwKSkKLSAgICAgICAgfQotICAgIH0KLSAgICBmdW5j
dGlvbiBycihlLCB0LCBuLCByLCBpKSB7Ci0gICAgICAgIHJldHVybiBuZXcgcnIucHJvdG90eXBl
LmluaXQoZSwgdCwgbiwgciwgaSkKLSAgICB9Ci0gICAgYi5Ud2VlbiA9IHJyLCByci5wcm90b3R5
cGUgPSB7Ci0gICAgICAgIGNvbnN0cnVjdG9yOiByciwKLSAgICAgICAgaW5pdDogZnVuY3Rpb24o
ZSwgdCwgbiwgciwgaSwgbykgewotICAgICAgICAgICAgdGhpcy5lbGVtID0gZSwgdGhpcy5wcm9w
ID0gbiwgdGhpcy5lYXNpbmcgPSBpIHx8ICJzd2luZyIsIHRoaXMub3B0aW9ucyA9IHQsIHRoaXMu
c3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCksIHRoaXMuZW5kID0gciwgdGhpcy51bml0ID0g
byB8fCAoYi5jc3NOdW1iZXJbbl0gPyAiIiA6ICJweCIpCi0gICAgICAgIH0sCi0gICAgICAgIGN1
cjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZSA9IHJyLnByb3BIb29rc1t0aGlzLnBy
b3BdOwotICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS5nZXQgPyBlLmdldCh0aGlzKSA6IHJyLnBy
b3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcykKLSAgICAgICAgfSwKLSAgICAgICAgcnVuOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCwgbiA9IHJyLnByb3BIb29rc1t0aGlzLnByb3Bd
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zID0gdCA9IHRoaXMub3B0aW9ucy5kdXJhdGlv
biA/IGIuZWFzaW5nW3RoaXMuZWFzaW5nXShlLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBlLCAw
LCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24pIDogZSwgdGhpcy5ub3cgPSAodGhpcy5lbmQgLSB0
aGlzLnN0YXJ0KSAqIHQgKyB0aGlzLnN0YXJ0LCB0aGlzLm9wdGlvbnMuc3RlcCAmJiB0aGlzLm9w
dGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMpLCBuICYmIG4uc2V0ID8g
bi5zZXQodGhpcykgOiByci5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLCB0aGlzCi0gICAg
ICAgIH0KLSAgICB9LCByci5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSByci5wcm90b3R5cGUs
IHJyLnByb3BIb29rcyA9IHsKLSAgICAgICAgX2RlZmF1bHQ6IHsKLSAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZhciB0OwotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsID09IGUuZWxlbVtlLnByb3BdIHx8IGUuZWxlbS5zdHlsZSAmJiBudWxsICE9IGUu
ZWxlbS5zdHlsZVtlLnByb3BdID8gKHQgPSBiLmNzcyhlLmVsZW0sIGUucHJvcCwgIiIpLCB0ICYm
ICJhdXRvIiAhPT0gdCA/IHQgOiAwKSA6IGUuZWxlbVtlLnByb3BdCi0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgYi5meC5zdGVw
W2UucHJvcF0gPyBiLmZ4LnN0ZXBbZS5wcm9wXShlKSA6IGUuZWxlbS5zdHlsZSAmJiAobnVsbCAh
PSBlLmVsZW0uc3R5bGVbYi5jc3NQcm9wc1tlLnByb3BdXSB8fCBiLmNzc0hvb2tzW2UucHJvcF0p
ID8gYi5zdHlsZShlLmVsZW0sIGUucHJvcCwgZS5ub3cgKyBlLnVuaXQpIDogZS5lbGVtW2UucHJv
cF0gPSBlLm5vdwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwgcnIucHJvcEhvb2tz
LnNjcm9sbFRvcCA9IHJyLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewotICAgICAgICBzZXQ6IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGUuZWxlbS5ub2RlVHlwZSAmJiBlLmVsZW0ucGFyZW50
Tm9kZSAmJiAoZS5lbGVtW2UucHJvcF0gPSBlLm5vdykKLSAgICAgICAgfQotICAgIH0sIGIuZWFj
aChbInRvZ2dsZSIsICJzaG93IiwgImhpZGUiXSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICB2
YXIgbiA9IGIuZm5bdF07Ci0gICAgICAgIGIuZm5bdF0gPSBmdW5jdGlvbihlLCByLCBpKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBlIHx8ICJib29sZWFuIiA9PSB0eXBlb2YgZSA/IG4u
YXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHRoaXMuYW5pbWF0ZShpcih0LCAhMCksIGUsIHIsIGkp
Ci0gICAgICAgIH0KLSAgICB9KSwgYi5mbi5leHRlbmQoewotICAgICAgICBmYWRlVG86IGZ1bmN0
aW9uKGUsIHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihubikuY3Nz
KCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoewotICAgICAgICAgICAgICAgIG9w
YWNpdHk6IHQKLSAgICAgICAgICAgIH0sIGUsIG4sIHIpCi0gICAgICAgIH0sCi0gICAgICAgIGFu
aW1hdGU6IGZ1bmN0aW9uKGUsIHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpID0gYi5pc0Vt
cHR5T2JqZWN0KGUpLCBvID0gYi5zcGVlZCh0LCBuLCByKSwgYSA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHZhciB0ID0gZXIodGhpcywgYi5leHRlbmQoe30sIGUpLCBvKTsKLSAgICAg
ICAgICAgICAgICBhLmZpbmlzaCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICB0
LnN0b3AoITApCi0gICAgICAgICAgICAgICAgfSwgKGkgfHwgYi5fZGF0YSh0aGlzLCAiZmluaXNo
IikpICYmIHQuc3RvcCghMCkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICByZXR1cm4gYS5m
aW5pc2ggPSBhLCBpIHx8IG8ucXVldWU9PT0hMSA/IHRoaXMuZWFjaChhKSA6IHRoaXMucXVldWUo
by5xdWV1ZSwgYSkKLSAgICAgICAgfSwKLSAgICAgICAgc3RvcDogZnVuY3Rpb24oZSwgbiwgcikg
ewotICAgICAgICAgICAgdmFyIGkgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHQgPSBlLnN0b3A7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGUuc3RvcCwgdChyKQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgZSAmJiAociA9
IG4sIG4gPSBlLCBlID0gdCksIG4gJiYgZSE9PSExICYmIHRoaXMucXVldWUoZSB8fCAiZngiLCBb
XSksIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdD0hMCwgbiA9
IG51bGwgIT0gZSAmJiBlICsgInF1ZXVlSG9va3MiLCBvID0gYi50aW1lcnMsIGEgPSBiLl9kYXRh
KHRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChuKQotICAgICAgICAgICAgICAgICAgICBhW25d
ICYmIGFbbl0uc3RvcCAmJiBpKGFbbl0pOwotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAobiBpbiBhKQotICAgICAgICAgICAgICAgICAgICAgICAgYVtuXSAm
JiBhW25dLnN0b3AgJiYgSm4udGVzdChuKSAmJiBpKGFbbl0pOwotICAgICAgICAgICAgICAgIGZv
ciAobiA9IG8ubGVuZ3RoOyBuLS07KQotICAgICAgICAgICAgICAgICAgICBvW25dLmVsZW0gIT09
IHRoaXMgfHwgbnVsbCAhPSBlICYmIG9bbl0ucXVldWUgIT09IGUgfHwgKG9bbl0uYW5pbS5zdG9w
KHIpLCB0PSExLCBvLnNwbGljZShuLCAxKSk7Ci0gICAgICAgICAgICAgICAgKHQgfHwhcikgJiYg
Yi5kZXF1ZXVlKHRoaXMsIGUpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBm
aW5pc2g6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlIT09ITEgJiYgKGUgPSBl
IHx8ICJmeCIpLCB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQs
IG4gPSBiLl9kYXRhKHRoaXMpLCByID0gbltlICsgInF1ZXVlIl0sIGkgPSBuW2UgKyAicXVldWVI
b29rcyJdLCBvID0gYi50aW1lcnMsIGEgPSByID8gci5sZW5ndGg6IDA7Ci0gICAgICAgICAgICAg
ICAgZm9yIChuLmZpbmlzaD0hMCwgYi5xdWV1ZSh0aGlzLCBlLCBbXSkKLSAgICAgICAgICAgICAg
ICAgICAgLCBpICYmIGkuY3VyICYmIGkuY3VyLmZpbmlzaCAmJiBpLmN1ci5maW5pc2guY2FsbCh0
aGlzKSwgdCA9IG8ubGVuZ3RoOwotICAgICAgICAgICAgICAgIHQtLTsKLSAgICAgICAgICAgICAg
ICApb1t0XS5lbGVtID09PSB0aGlzICYmIG9bdF0ucXVldWUgPT09IGUgJiYgKG9bdF0uYW5pbS5z
dG9wKCEwKSwgby5zcGxpY2UodCwgMSkpOwotICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IGEg
PiB0OyB0KyspCi0gICAgICAgICAgICAgICAgICAgIHJbdF0gJiYgclt0XS5maW5pc2ggJiYgclt0
XS5maW5pc2guY2FsbCh0aGlzKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgbi5maW5pc2gKLSAg
ICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBmdW5jdGlvbiBpcihlLCB0KSB7
Ci0gICAgICAgIHZhciBuLCByID0gewotICAgICAgICAgICAgaGVpZ2h0OiBlCi0gICAgICAgIH0s
IGkgPSAwOwotICAgICAgICBmb3IgKHQgPSB0ID8gMSA6IDA7IDQgPiBpOyBpICs9IDIgLSB0KQot
ICAgICAgICAgICAgbiA9IFp0W2ldLCByWyJtYXJnaW4iICsgbl0gPSByWyJwYWRkaW5nIiArIG5d
ID0gZTsKLSAgICAgICAgcmV0dXJuIHQgJiYgKHIub3BhY2l0eSA9IHIud2lkdGggPSBlKSwgcgot
ICAgIH0KLSAgICBiLmVhY2goewotICAgICAgICBzbGlkZURvd246IGlyKCJzaG93IiksCi0gICAg
ICAgIHNsaWRlVXA6IGlyKCJoaWRlIiksCi0gICAgICAgIHNsaWRlVG9nZ2xlOiBpcigidG9nZ2xl
IiksCi0gICAgICAgIGZhZGVJbjogewotICAgICAgICAgICAgb3BhY2l0eTogInNob3ciCi0gICAg
ICAgIH0sCi0gICAgICAgIGZhZGVPdXQ6IHsKLSAgICAgICAgICAgIG9wYWNpdHk6ICJoaWRlIgot
ICAgICAgICB9LAotICAgICAgICBmYWRlVG9nZ2xlOiB7Ci0gICAgICAgICAgICBvcGFjaXR5OiAi
dG9nZ2xlIgotICAgICAgICB9Ci0gICAgfSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICBiLmZu
W2VdID0gZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0
ZSh0LCBlLCBuLCByKQotICAgICAgICB9Ci0gICAgfSksIGIuc3BlZWQgPSBmdW5jdGlvbihlLCB0
LCBuKSB7Ci0gICAgICAgIHZhciByID0gZSAmJiAib2JqZWN0IiA9PSB0eXBlb2YgZSA/IGIuZXh0
ZW5kKHt9LCBlKTogewotICAgICAgICAgICAgY29tcGxldGU6IG4gfHwhbiAmJiB0IHx8IGIuaXNG
dW5jdGlvbihlKSAmJiBlLAotICAgICAgICAgICAgZHVyYXRpb246IGUsCi0gICAgICAgICAgICBl
YXNpbmc6IG4gJiYgdCB8fCB0JiYhYi5pc0Z1bmN0aW9uKHQpICYmIHQKLSAgICAgICAgfTsKLSAg
ICAgICAgcmV0dXJuIHIuZHVyYXRpb24gPSBiLmZ4Lm9mZiA/IDAgOiAibnVtYmVyIiA9PSB0eXBl
b2Ygci5kdXJhdGlvbiA/IHIuZHVyYXRpb24gOiByLmR1cmF0aW9uIGluIGIuZnguc3BlZWRzID8g
Yi5meC5zcGVlZHNbci5kdXJhdGlvbl0gOiBiLmZ4LnNwZWVkcy5fZGVmYXVsdCwgKG51bGwgPT0g
ci5xdWV1ZSB8fCByLnF1ZXVlPT09ITApICYmIChyLnF1ZXVlID0gImZ4IiksIHIub2xkID0gci5j
b21wbGV0ZSwgci5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgYi5pc0Z1bmN0
aW9uKHIub2xkKSAmJiByLm9sZC5jYWxsKHRoaXMpLCByLnF1ZXVlICYmIGIuZGVxdWV1ZSh0aGlz
LCByLnF1ZXVlKQotICAgICAgICB9LCByCi0gICAgfSwgYi5lYXNpbmcgPSB7Ci0gICAgICAgIGxp
bmVhcjogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGUKLSAgICAgICAgfSwKLSAg
ICAgICAgc3dpbmc6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiAuNSAtIE1hdGgu
Y29zKGUgKiBNYXRoLlBJKSAvIDIKLSAgICAgICAgfQotICAgIH0sIGIudGltZXJzID0gW10sIGIu
ZnggPSByci5wcm90b3R5cGUuaW5pdCwgYi5meC50aWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHZhciBlLCBuID0gYi50aW1lcnMsIHIgPSAwOwotICAgICAgICBmb3IgKFhuID0gYi5ub3coKTsg
bi5sZW5ndGggPiByOyByKyspCi0gICAgICAgICAgICBlID0gbltyXSwgZSgpIHx8IG5bcl0gIT09
IGUgfHwgbi5zcGxpY2Uoci0tLCAxKTsKLSAgICAgICAgbi5sZW5ndGggfHwgYi5meC5zdG9wKCks
IFhuID0gdAotICAgIH0sIGIuZngudGltZXIgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGUoKSAm
JiBiLnRpbWVycy5wdXNoKGUpICYmIGIuZnguc3RhcnQoKQotICAgIH0sIGIuZnguaW50ZXJ2YWwg
PSAxMywgYi5meC5zdGFydCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBVbiB8fCAoVW4gPSBzZXRJ
bnRlcnZhbChiLmZ4LnRpY2ssIGIuZnguaW50ZXJ2YWwpKQotICAgIH0sIGIuZnguc3RvcCA9IGZ1
bmN0aW9uKCkgewotICAgICAgICBjbGVhckludGVydmFsKFVuKSwgVW4gPSBudWxsCi0gICAgfSwg
Yi5meC5zcGVlZHMgPSB7Ci0gICAgICAgIHNsb3c6IDYwMCwKLSAgICAgICAgZmFzdDogMjAwLAot
ICAgICAgICBfZGVmYXVsdDogNDAwCi0gICAgfSwgYi5meC5zdGVwID0ge30sIGIuZXhwciAmJiBi
LmV4cHIuZmlsdGVycyAmJiAoYi5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgIHJldHVybiBiLmdyZXAoYi50aW1lcnMsIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAg
ICAgIHJldHVybiBlID09PSB0LmVsZW0KLSAgICAgICAgfSkubGVuZ3RoCi0gICAgfSksIGIuZm4u
b2Zmc2V0ID0gZnVuY3Rpb24oZSkgewotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiBlID09PSB0ID8gdGhpcyA6IHRoaXMuZWFjaChmdW5jdGlvbih0KSB7
Ci0gICAgICAgICAgICAgICAgYi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsIGUsIHQpCi0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgdmFyIG4sIHIsIG8gPSB7Ci0gICAgICAgICAgICB0b3A6IDAsCi0g
ICAgICAgICAgICBsZWZ0OiAwCi0gICAgICAgIH0sIGEgPSB0aGlzWzBdLCBzID0gYSAmJiBhLm93
bmVyRG9jdW1lbnQ7Ci0gICAgICAgIGlmIChzKQotICAgICAgICAgICAgcmV0dXJuIG4gPSBzLmRv
Y3VtZW50RWxlbWVudCwgYi5jb250YWlucyhuLCBhKSA/ICh0eXBlb2YgYS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QgIT09IGkgJiYgKG8gPSBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwgciA9IG9y
KHMpLCB7Ci0gICAgICAgICAgICB0b3AgOiBvLnRvcCArIChyLnBhZ2VZT2Zmc2V0IHx8IG4uc2Ny
b2xsVG9wKSAtIChuLmNsaWVudFRvcCB8fCAwKSwgbGVmdDogby5sZWZ0ICsgKHIucGFnZVhPZmZz
ZXQgfHwgbi5zY3JvbGxMZWZ0KSAtIChuLmNsaWVudExlZnQgfHwgMCkKLSAgICAgICAgfSkgOiBv
Ci0gICAgfSwgYi5vZmZzZXQgPSB7Ci0gICAgICAgIHNldE9mZnNldDogZnVuY3Rpb24oZSwgdCwg
bikgewotICAgICAgICAgICAgdmFyIHIgPSBiLmNzcyhlLCAicG9zaXRpb24iKTsKLSAgICAgICAg
ICAgICJzdGF0aWMiID09PSByICYmIChlLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIik7Ci0g
ICAgICAgICAgICB2YXIgaSA9IGIoZSksIG8gPSBpLm9mZnNldCgpLCBhID0gYi5jc3MoZSwgInRv
cCIpLCBzID0gYi5jc3MoZSwgImxlZnQiKSwgdSA9ICgiYWJzb2x1dGUiID09PSByIHx8ICJmaXhl
ZCIgPT09IHIpICYmIGIuaW5BcnJheSgiYXV0byIsIFthLCBzXSk+LTEsIGwgPSB7fSwgYyA9IHt9
LCBwLCBmOwotICAgICAgICAgICAgdSA/IChjID0gaS5wb3NpdGlvbigpLCBwID0gYy50b3AsIGYg
PSBjLmxlZnQpIDogKHAgPSBwYXJzZUZsb2F0KGEpIHx8IDAsIGYgPSBwYXJzZUZsb2F0KHMpIHx8
IDApLCBiLmlzRnVuY3Rpb24odCkgJiYgKHQgPSB0LmNhbGwoZSwgbiwgbykpLCBudWxsICE9IHQu
dG9wICYmIChsLnRvcCA9IHQudG9wIC0gby50b3AgKyBwKSwgbnVsbCAhPSB0LmxlZnQgJiYgKGwu
bGVmdCA9IHQubGVmdCAtIG8ubGVmdCArIGYpLCAidXNpbmciaW4gdCA/IHQudXNpbmcuY2FsbChl
LCBsKSA6IGkuY3NzKGwpCi0gICAgICAgIH0KLSAgICB9LCBiLmZuLmV4dGVuZCh7Ci0gICAgICAg
IHBvc2l0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmICh0aGlzWzBdKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGUsIHQsIG4gPSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvcDogMCwK
LSAgICAgICAgICAgICAgICAgICAgbGVmdDogMAotICAgICAgICAgICAgICAgIH0sIHIgPSB0aGlz
WzBdOwotICAgICAgICAgICAgICAgIHJldHVybiAiZml4ZWQiID09PSBiLmNzcyhyLCAicG9zaXRp
b24iKSA/IHQgPSByLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDogKGUgPSB0aGlzLm9mZnNldFBh
cmVudCgpLCB0ID0gdGhpcy5vZmZzZXQoKSwgYi5ub2RlTmFtZShlWzBdLCAiaHRtbCIpIHx8IChu
ID0gZS5vZmZzZXQoKSksIG4udG9wICs9IGIuY3NzKGVbMF0sICJib3JkZXJUb3BXaWR0aCIsICEw
KSwgbi5sZWZ0ICs9IGIuY3NzKGVbMF0sICJib3JkZXJMZWZ0V2lkdGgiLCAhMCkpLCB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvcDogdC50b3AgLSBuLnRvcCAtIGIuY3NzKHIsICJtYXJnaW5Ub3Ai
LCAhMCksIGxlZnQ6IHQubGVmdCAtIG4ubGVmdCAtIGIuY3NzKHIsICJtYXJnaW5MZWZ0IiwgITAp
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBv
ZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwg
by5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUmJiFiLm5vZGVOYW1l
KGUsICJodG1sIikgJiYgInN0YXRpYyIgPT09IGIuY3NzKGUsICJwb3NpdGlvbiIpKQotICAgICAg
ICAgICAgICAgICAgICBlID0gZS5vZmZzZXRQYXJlbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGUgfHwgby5kb2N1bWVudEVsZW1lbnQKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9
KSwgYi5lYWNoKHsKLSAgICAgICAgc2Nyb2xsTGVmdDogInBhZ2VYT2Zmc2V0IiwKLSAgICAgICAg
c2Nyb2xsVG9wOiAicGFnZVlPZmZzZXQiCi0gICAgfSwgZnVuY3Rpb24oZSwgbikgewotICAgICAg
ICB2YXIgciA9IC9ZLy50ZXN0KG4pOwotICAgICAgICBiLmZuW2VdID0gZnVuY3Rpb24oaSkgewot
ICAgICAgICAgICAgcmV0dXJuIGIuYWNjZXNzKHRoaXMsIGZ1bmN0aW9uKGUsIGksIG8pIHsKLSAg
ICAgICAgICAgICAgICB2YXIgYSA9IG9yKGUpOwotICAgICAgICAgICAgICAgIHJldHVybiBvID09
PSB0ID8gYSA/IG4gaW4gYSA/IGFbbl0gOiBhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXSA6
IGVbaV0gOiAoYSA/IGEuc2Nyb2xsVG8ociA/IGIoYSkuc2Nyb2xsTGVmdCgpIDogbywgciA/IG8g
OiBiKGEpLnNjcm9sbFRvcCgpKSA6IGVbaV0gPSBvLCB0KQotICAgICAgICAgICAgfSwgZSwgaSwg
YXJndW1lbnRzLmxlbmd0aCwgbnVsbCkKLSAgICAgICAgfQotICAgIH0pOwotICAgIGZ1bmN0aW9u
IG9yKGUpIHsKLSAgICAgICAgcmV0dXJuIGIuaXNXaW5kb3coZSkgPyBlIDogOSA9PT0gZS5ub2Rl
VHlwZSA/IGUuZGVmYXVsdFZpZXcgfHwgZS5wYXJlbnRXaW5kb3cgOiAhMQotICAgIH0KLSAgICBi
LmVhY2goewotICAgICAgICBIZWlnaHQ6ICJoZWlnaHQiLAotICAgICAgICBXaWR0aDogIndpZHRo
IgotICAgIH0sIGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgYi5lYWNoKHsKLSAgICAgICAgICAg
IHBhZGRpbmc6ICJpbm5lciIgKyBlLAotICAgICAgICAgICAgY29udGVudDogbiwKLSAgICAgICAg
ICAgICIiOiAib3V0ZXIiICsgZQotICAgICAgICB9LCBmdW5jdGlvbihyLCBpKSB7Ci0gICAgICAg
ICAgICBiLmZuW2ldID0gZnVuY3Rpb24oaSwgbykgewotICAgICAgICAgICAgICAgIHZhciBhID0g
YXJndW1lbnRzLmxlbmd0aCAmJiAociB8fCAiYm9vbGVhbiIgIT0gdHlwZW9mIGkpLCBzID0gciB8
fCAoaT09PSEwIHx8IG89PT0hMCA/ICJtYXJnaW4iIDogImJvcmRlciIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBiLmFjY2Vzcyh0aGlzLCBmdW5jdGlvbihuLCByLCBpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBvOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5pc1dpbmRvdyhu
KSA/IG4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiICsgZV0gOiA5ID09PSBuLm5v
ZGVUeXBlID8gKG8gPSBuLmRvY3VtZW50RWxlbWVudCwgTWF0aC5tYXgobi5ib2R5WyJzY3JvbGwi
ICsgZV0sIG9bInNjcm9sbCIgKyBlXSwgbi5ib2R5WyJvZmZzZXQiICsgZV0sIG9bIm9mZnNldCIg
KyBlXSwgb1siY2xpZW50IiArIGVdKSkgOiBpID09PSB0ID8gYi5jc3MobiwgciwgcykgOiBiLnN0
eWxlKG4sIHIsIGksIHMpCi0gICAgICAgICAgICAgICAgfSwgbiwgYSA/IGkgOiB0LCBhLCBudWxs
KQotICAgICAgICAgICAgfQotICAgICAgICB9KQotICAgIH0pLCBlLmpRdWVyeSA9IGUuJCA9IGIs
ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQu
alF1ZXJ5ICYmIGRlZmluZSgianF1ZXJ5IiwgW10sIGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1
cm4gYgotICAgIH0pCi19KSh3aW5kb3cpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92Mi9tYW5pZmVzdC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjIvbWFuaWZlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMDYz
ODI1OTU0ODdlYmRjMzlmZTczYjc1ZWIyZTY0MjJiMjdhZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92Mi9tYW5pZmVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDM5OSArMCwwIEBACi1BcHAuTW9k
ZWwgPSBEUy5Nb2RlbDsKLQotQXBwLk5hbWVMYWJlbE1vZGVsID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICBuYW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICBsYWJlbDogZnVuY3Rpb24gKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgnbmFtZScpOwotICAgIH0ucHJvcGVydHkoJ25h
bWUnKSwKLX0pOwotCi1BcHAuVGVzdCA9IEFwcC5OYW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAg
IHVybDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgcGFyZW50OiBEUy5iZWxvbmdzVG8oJ3Rlc3Qn
LCB7aW52ZXJzZTogJ2NoaWxkVGVzdHMnfSksCi0gICAgY2hpbGRUZXN0czogRFMuaGFzTWFueSgn
dGVzdCcsIHtpbnZlcnNlOiAncGFyZW50J30pLAotICAgIG1ldHJpY3M6IERTLmhhc01hbnkoJ21l
dHJpY3MnKSwKLX0pOwotCi1BcHAuTWV0cmljID0gQXBwLk5hbWVMYWJlbE1vZGVsLmV4dGVuZCh7
Ci0gICAgdGVzdDogRFMuYmVsb25nc1RvKCd0ZXN0JyksCi0gICAgYWdncmVnYXRvcjogRFMuYXR0
cignc3RyaW5nJyksCi0gICAgbGFiZWw6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5nZXQoJ25hbWUnKSArICh0aGlzLmdldCgnYWdncmVnYXRvcicpID8gJyA6ICcgKyB0
aGlzLmdldCgnYWdncmVnYXRvcicpIDogJycpOwotICAgIH0ucHJvcGVydHkoJ25hbWUnLCAnYWdn
cmVnYXRvcicpLAotICAgIHBhdGg6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgcGF0
aCA9IFtdOwotICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5nZXQoJ3Rlc3QnKTsKLSAgICAgICAg
d2hpbGUgKHBhcmVudCkgewotICAgICAgICAgICAgcGF0aC5wdXNoKHBhcmVudC5nZXQoJ25hbWUn
KSk7Ci0gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuZ2V0KCdwYXJlbnQnKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gcGF0aC5yZXZlcnNlKCk7Ci0gICAgfS5wcm9wZXJ0eSgnbmFtZScs
ICd0ZXN0JyksCi0gICAgZnVsbE5hbWU6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5nZXQoJ3BhdGgnKS5qb2luKCcgXHUyMjBiICcpIC8qICZuaTsgKi8KLSAgICAgICAg
ICAgICsgJyA6ICcgKyB0aGlzLmdldCgnbGFiZWwnKTsKLSAgICB9LnByb3BlcnR5KCdwYXRoJywg
J2xhYmVsJyksCi0gICAgY2hpbGRNZXRyaWNzOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAg
dmFyIHRlc3QgPSB0aGlzLmdldCgndGVzdCcpOwotICAgICAgICB2YXIgY2hpbGRNZXRyaWNzID0g
W107Ci0gICAgICAgIHRlc3QuZ2V0KCdjaGlsZFRlc3RzJykuZm9yRWFjaChmdW5jdGlvbiAoY2hp
bGRUZXN0KSB7Ci0gICAgICAgICAgICBjaGlsZFRlc3QuZ2V0KCdtZXRyaWNzJykuZm9yRWFjaChm
dW5jdGlvbiAobWV0cmljKSB7Ci0gICAgICAgICAgICAgICAgY2hpbGRNZXRyaWNzLnB1c2gobWV0
cmljKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGNoaWxk
TWV0cmljczsKLSAgICB9LnByb3BlcnR5KCd0ZXN0LmNoaWxkVGVzdHMnKSwKLX0pOwotCi1BcHAu
QnVpbGRlciA9IEFwcC5OYW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAgIGJ1aWxkVXJsOiBEUy5h
dHRyKCdzdHJpbmcnKSwKLSAgICB1cmxGcm9tQnVpbGROdW1iZXI6IGZ1bmN0aW9uIChidWlsZE51
bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuZ2V0KCdidWlsZFVybCcp
OwotICAgICAgICByZXR1cm4gdGVtcGxhdGUgPyB0ZW1wbGF0ZS5yZXBsYWNlKC9cJGJ1aWxkZXJO
YW1lL2csIHRoaXMuZ2V0KCduYW1lJykpLnJlcGxhY2UoL1wkYnVpbGROdW1iZXIvZywgYnVpbGRO
dW1iZXIpIDogbnVsbDsKLSAgICB9Ci19KTsKLQotQXBwLkJ1Z1RyYWNrZXIgPSBBcHAuTmFtZUxh
YmVsTW9kZWwuZXh0ZW5kKHsKLSAgICBidWdVcmw6IERTLmF0dHIoJ3N0cmluZycpLAotICAgIG5l
d0J1Z1VybDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgcmVwb3NpdG9yaWVzOiBEUy5oYXNNYW55
KCdyZXBvc2l0b3J5JyksCi0gICAgdXJsRnJvbUJ1Z051bWJlcjogZnVuY3Rpb24gKGJ1Z051bWJl
cikgewotICAgICAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLmdldCgnYnVnVXJsJyk7Ci0gICAgICAg
IHJldHVybiB0ZW1wbGF0ZSAmJiBidWdOdW1iZXIgPyB0ZW1wbGF0ZS5yZXBsYWNlKC9cJG51bWJl
ci9nLCBidWdOdW1iZXIpIDogbnVsbDsKLSAgICB9Ci19KTsKLQotQXBwLkRhdGVBcnJheVRyYW5z
Zm9ybSA9IERTLlRyYW5zZm9ybS5leHRlbmQoewotICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAo
c2VyaWFsaXplZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemVkLm1hcChmdW5jdGlv
biAodGltZSkgeyByZXR1cm4gbmV3IERhdGUodGltZSk7IH0pOwotICAgIH0KLX0pOwotCi1BcHAu
UGxhdGZvcm0gPSBBcHAuTmFtZUxhYmVsTW9kZWwuZXh0ZW5kKHsKLSAgICBfbWV0cmljU2V0OiBu
dWxsLAotICAgIF90ZXN0U2V0OiBudWxsLAotICAgIG1ldHJpY3M6IERTLmhhc01hbnkoJ21ldHJp
YycpLAotICAgIGxhc3RNb2RpZmllZDogRFMuYXR0cignZGF0ZUFycmF5JyksCi0gICAgY29udGFp
bnNNZXRyaWM6IGZ1bmN0aW9uIChtZXRyaWMpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX21l
dHJpY1NldCkKLSAgICAgICAgICAgIHRoaXMuX21ldHJpY1NldCA9IG5ldyBFbWJlci5TZXQodGhp
cy5nZXQoJ21ldHJpY3MnKSk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tZXRyaWNTZXQuY29udGFp
bnMobWV0cmljKTsKLSAgICB9LAotICAgIGxhc3RNb2RpZmllZFRpbWVGb3JNZXRyaWM6IGZ1bmN0
aW9uIChtZXRyaWMpCi0gICAgewotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldCgnbWV0cmlj
cycpLmluZGV4T2YobWV0cmljKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2xhc3RNb2RpZmllZCcpLm9i
amVjdEF0KGluZGV4KTsKLSAgICB9LAotICAgIGNvbnRhaW5zVGVzdDogZnVuY3Rpb24gKHRlc3Qp
Ci0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3Rlc3RTZXQpIHsKLSAgICAgICAgICAgIHZhciBz
ZXQgPSBuZXcgRW1iZXIuU2V0KCk7Ci0gICAgICAgICAgICB0aGlzLmdldCgnbWV0cmljcycpLmZv
ckVhY2goZnVuY3Rpb24gKG1ldHJpYykgewotICAgICAgICAgICAgICAgIGZvciAodmFyIHRlc3Qg
PSBtZXRyaWMuZ2V0KCd0ZXN0Jyk7IHRlc3Q7IHRlc3QgPSB0ZXN0LmdldCgncGFyZW50JykpCi0g
ICAgICAgICAgICAgICAgICAgIHNldC5wdXNoKHRlc3QpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB0aGlzLl90ZXN0U2V0ID0gc2V0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
aGlzLl90ZXN0U2V0LmNvbnRhaW5zKHRlc3QpOwotICAgIH0sCi19KTsKLQotQXBwLlJlcG9zaXRv
cnkgPSBBcHAuTmFtZUxhYmVsTW9kZWwuZXh0ZW5kKHsKLSAgICB1cmw6IERTLmF0dHIoJ3N0cmlu
ZycpLAotICAgIGJsYW1lVXJsOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICBoYXNSZXBvcnRlZENv
bW1pdHM6IERTLmF0dHIoJ2Jvb2xlYW4nKSwKLSAgICB1cmxGb3JSZXZpc2lvbjogZnVuY3Rpb24g
KGN1cnJlbnRSZXZpc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy5nZXQoJ3VybCcp
IHx8ICcnKS5yZXBsYWNlKC9cJDEvZywgY3VycmVudFJldmlzaW9uKTsKLSAgICB9LAotICAgIHVy
bEZvclJldmlzaW9uUmFuZ2U6IGZ1bmN0aW9uIChmcm9tLCB0bykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAodGhpcy5nZXQoJ2JsYW1lVXJsJykgfHwgJycpLnJlcGxhY2UoL1wkMS9nLCBmcm9tKS5y
ZXBsYWNlKC9cJDIvZywgdG8pOwotICAgIH0sCi19KTsKLQotQXBwLkRhc2hib2FyZCA9IEFwcC5O
YW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAgIHNlcmlhbGl6ZWQ6IERTLmF0dHIoJ3N0cmluZycp
LAotICAgIHRhYmxlOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIGpzb24gPSB0aGlz
LmdldCgnc2VyaWFsaXplZCcpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHBhcnNl
ZCA9IEpTT04ucGFyc2UoanNvbik7Ci0gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAg
ICAgICBjb25zb2xlLmxvZygiRmFpbGVkIHRvIHBhcnNlIHRoZSBncmlkOiIsIGVycm9yLCBqc29u
KTsKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXBhcnNl
ZCkKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX25vcm1hbGl6
ZVRhYmxlKHBhcnNlZCk7Ci0gICAgfS5wcm9wZXJ0eSgnc2VyaWFsaXplZCcpLAotCi0gICAgcm93
czogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgndGFibGUnKS5z
bGljZSgxKTsKLSAgICB9LnByb3BlcnR5KCd0YWJsZScpLAotCi0gICAgaGVhZGVyQ29sdW1uczog
ZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciB0YWJsZSA9IHRoaXMuZ2V0KCd0YWJsZScp
OwotICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gW107Ci0gICAgICAgIHJldHVybiB0YWJsZVswXS5tYXAoZnVuY3Rpb24gKG5hbWUsIGluZGV4
KSB7Ci0gICAgICAgICAgICByZXR1cm4ge2xhYmVsOm5hbWUsIGluZGV4OiBpbmRleH07Ci0gICAg
ICAgIH0pOwotICAgIH0ucHJvcGVydHkoJ3RhYmxlJyksCi0KLSAgICBfbm9ybWFsaXplVGFibGU6
IGZ1bmN0aW9uICh0YWJsZSkKLSAgICB7Ci0gICAgICAgIHZhciBtYXhDb2x1bW5Db3VudCA9IE1h
dGgubWF4KHRhYmxlLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7IHJldHVybiBjb2x1bW4ubGVuZ3Ro
OyB9KSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGFibGUubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgIHZhciByb3cgPSB0YWJsZVtpXTsKLSAgICAgICAgICAgIGZvciAodmFyIGog
PSAxOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJvd1tqXSAm
JiAhKHJvd1tqXSBpbnN0YW5jZW9mIEFycmF5KSkgewotICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLmxvZygnVW5yZWNvZ25pemVkIChwbGF0Zm9ybSwgbWV0cmljKSBwYWlyIGF0IGNvbHVtbiAn
ICsgaSArICcgcm93ICcgKyBqICsgJzonICsgcm93W2pdKTsKLSAgICAgICAgICAgICAgICAgICAg
cm93W2pdID0gW107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0YWJsZTsKLSAgICB9LAotfSk7Ci0KLUFwcC5NZXRyaWNTZXJpYWxp
emVyID0gQXBwLlBsYXRmb3JtU2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7
Ci0gICAgbm9ybWFsaXplUGF5bG9hZDogZnVuY3Rpb24gKHBheWxvYWQpCi0gICAgewotICAgICAg
ICB2YXIgcmVzdWx0cyA9IHsKLSAgICAgICAgICAgIHBsYXRmb3JtczogdGhpcy5fbm9ybWFsaXpl
SWRNYXAocGF5bG9hZFsnYWxsJ10pLAotICAgICAgICAgICAgYnVpbGRlcnM6IHRoaXMuX25vcm1h
bGl6ZUlkTWFwKHBheWxvYWRbJ2J1aWxkZXJzJ10pLAotICAgICAgICAgICAgdGVzdHM6IHRoaXMu
X25vcm1hbGl6ZUlkTWFwKHBheWxvYWRbJ3Rlc3RzJ10pLm1hcChmdW5jdGlvbiAodGVzdCkgewot
ICAgICAgICAgICAgICAgIHRlc3RbJ3BhcmVudCddID0gdGVzdFsncGFyZW50SWQnXTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGVzdDsKLSAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgbWV0
cmljczogdGhpcy5fbm9ybWFsaXplSWRNYXAocGF5bG9hZFsnbWV0cmljcyddKSwKLSAgICAgICAg
ICAgIHJlcG9zaXRvcmllczogdGhpcy5fbm9ybWFsaXplSWRNYXAocGF5bG9hZFsncmVwb3NpdG9y
aWVzJ10pLAotICAgICAgICAgICAgYnVnVHJhY2tlcnM6IHRoaXMuX25vcm1hbGl6ZUlkTWFwKHBh
eWxvYWRbJ2J1Z1RyYWNrZXJzJ10pLAotICAgICAgICAgICAgZGFzaGJvYXJkczogW10sCi0gICAg
ICAgIH07Ci0KLSAgICAgICAgZm9yICh2YXIgdGVzdElkIGluIHBheWxvYWRbJ3Rlc3RzJ10pIHsK
LSAgICAgICAgICAgIHZhciB0ZXN0ID0gcGF5bG9hZFsndGVzdHMnXVt0ZXN0SWRdOwotICAgICAg
ICAgICAgdmFyIHBhcmVudCA9IHBheWxvYWRbJ3Rlc3RzJ11bdGVzdFsncGFyZW50J11dOwotICAg
ICAgICAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBpZiAoIXBhcmVudFsnY2hpbGRUZXN0cyddKQotICAgICAgICAgICAgICAgIHBhcmVudFsn
Y2hpbGRUZXN0cyddID0gW107Ci0gICAgICAgICAgICBwYXJlbnRbJ2NoaWxkVGVzdHMnXS5wdXNo
KHRlc3RJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBtZXRyaWNJZCBpbiBwYXls
b2FkWydtZXRyaWNzJ10pIHsKLSAgICAgICAgICAgIHZhciBtZXRyaWMgPSBwYXlsb2FkWydtZXRy
aWNzJ11bbWV0cmljSWRdOwotICAgICAgICAgICAgdmFyIHRlc3QgPSBwYXlsb2FkWyd0ZXN0cydd
W21ldHJpY1sndGVzdCddXTsKLSAgICAgICAgICAgIGlmICghdGVzdFsnbWV0cmljcyddKQotICAg
ICAgICAgICAgICAgIHRlc3RbJ21ldHJpY3MnXSA9IFtdOwotICAgICAgICAgICAgdGVzdFsnbWV0
cmljcyddLnB1c2gobWV0cmljSWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGlkID0gMTsK
LSAgICAgICAgdmFyIGRhc2hib2FyZHNJblBheWxvYWQgPSBwYXlsb2FkWydkYXNoYm9hcmRzJ107
Ci0gICAgICAgIGZvciAodmFyIGRhc2hib2FyZE5hbWUgaW4gZGFzaGJvYXJkc0luUGF5bG9hZCkg
ewotICAgICAgICAgICAgcmVzdWx0c1snZGFzaGJvYXJkcyddLnB1c2goewotICAgICAgICAgICAg
ICAgIGlkOiBpZCwKLSAgICAgICAgICAgICAgICBuYW1lOiBkYXNoYm9hcmROYW1lLAotICAgICAg
ICAgICAgICAgIHNlcmlhbGl6ZWQ6IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZHNJblBheWxvYWRb
ZGFzaGJvYXJkTmFtZV0pCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlkKys7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgc2l0ZVRpdGxlID0gcGF5bG9hZFsnc2l0ZVRpdGxlJ107Ci0g
ICAgICAgIGlmIChzaXRlVGl0bGUpIHsKLSAgICAgICAgICAgIEFwcC5NYW5pZmVzdC5zZXQoJ3Np
dGVUaXRsZScsIHNpdGVUaXRsZSk7Ci0gICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IHNpdGVU
aXRsZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0gICAg
X25vcm1hbGl6ZUlkTWFwOiBmdW5jdGlvbiAoaWRNYXApCi0gICAgewotICAgICAgICB2YXIgcmVz
dWx0cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpZCBpbiBpZE1hcCkgewotICAgICAgICAgICAg
dmFyIGRlZmluaXRpb24gPSBpZE1hcFtpZF07Ci0gICAgICAgICAgICBkZWZpbml0aW9uWydpZCdd
ID0gaWQ7Ci0gICAgICAgICAgICByZXN1bHRzLnB1c2goZGVmaW5pdGlvbik7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotfSk7Ci0KLUFwcC5QbGF0Zm9ybUFkYXB0
ZXIgPSBEUy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgIGJ1aWxkVVJMOiBmdW5jdGlvbiAodHlw
ZSwgaWQpCi0gICAgewotICAgICAgICByZXR1cm4gJy4uL2RhdGEvbWFuaWZlc3QuanNvbic7Ci0g
ICAgfSwKLX0pOwotCi1BcHAuTWV0cmljQWRhcHRlciA9IERTLlJFU1RBZGFwdGVyLmV4dGVuZCh7
Ci0gICAgYnVpbGRVUkw6IGZ1bmN0aW9uICh0eXBlLCBpZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAnLi4vZGF0YS9tYW5pZmVzdC5qc29uJzsKLSAgICB9LAotfSk7Ci0KLUFwcC5NYW5pZmVzdCA9
IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICBwbGF0Zm9ybXM6IG51bGwsCi0gICAgdG9w
TGV2ZWxUZXN0czogbnVsbCwKLSAgICByZXBvc2l0b3JpZXM6IFtdLAotICAgIHJlcG9zaXRvcmll
c1dpdGhSZXBvcnRlZENvbW1pdHM6IFtdLAotICAgIGJ1Z1RyYWNrZXJzOiBbXSwKLSAgICBfcGxh
dGZvcm1CeUlkOiB7fSwKLSAgICBfbWV0cmljQnlJZDoge30sCi0gICAgX2J1aWxkZXJCeUlkOiB7
fSwKLSAgICBfcmVwb3NpdG9yeUJ5SWQ6IHt9LAotICAgIF9kYXNoYm9hcmRCeU5hbWU6IHt9LAot
ICAgIF9kZWZhdWx0RGFzaGJvYXJkTmFtZTogbnVsbCwKLSAgICBfZmV0Y2hQcm9taXNlOiBudWxs
LAotICAgIGZldGNoOiBmdW5jdGlvbiAoc3RvcmUpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X2ZldGNoUHJvbWlzZSkKLSAgICAgICAgICAgIHRoaXMuX2ZldGNoUHJvbWlzZSA9IHN0b3JlLmZp
bmRBbGwoJ3BsYXRmb3JtJykudGhlbih0aGlzLl9mZXRjaGVkTWFuaWZlc3QuYmluZCh0aGlzLCBz
dG9yZSkpOwotICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hQcm9taXNlOwotICAgIH0sCi0gICAg
aXNGZXRjaGVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIXRoaXMuZ2V0KCdwbGF0Zm9ybXMnKTsg
fS5wcm9wZXJ0eSgncGxhdGZvcm1zJyksCi0gICAgcGxhdGZvcm06IGZ1bmN0aW9uIChpZCkgeyBy
ZXR1cm4gdGhpcy5fcGxhdGZvcm1CeUlkW2lkXTsgfSwKLSAgICBtZXRyaWM6IGZ1bmN0aW9uIChp
ZCkgeyByZXR1cm4gdGhpcy5fbWV0cmljQnlJZFtpZF07IH0sCi0gICAgYnVpbGRlcjogZnVuY3Rp
b24gKGlkKSB7IHJldHVybiB0aGlzLl9idWlsZGVyQnlJZFtpZF07IH0sCi0gICAgcmVwb3NpdG9y
eTogZnVuY3Rpb24gKGlkKSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5QnlJZFtpZF07IH0sCi0g
ICAgZGFzaGJvYXJkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gdGhpcy5fZGFzaGJv
YXJkQnlOYW1lW25hbWVdOyB9LAotICAgIGRlZmF1bHREYXNoYm9hcmROYW1lOiBmdW5jdGlvbiAo
KSB7IHJldHVybiB0aGlzLl9kZWZhdWx0RGFzaGJvYXJkTmFtZTsgfSwKLSAgICBfZmV0Y2hlZE1h
bmlmZXN0OiBmdW5jdGlvbiAoc3RvcmUpCi0gICAgewotICAgICAgICB2YXIgc3RhcnRUaW1lID0g
RGF0ZS5ub3coKTsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAgICAgIHZhciB0b3BM
ZXZlbFRlc3RzID0gW107Ci0gICAgICAgIHN0b3JlLmFsbCgndGVzdCcpLmZvckVhY2goZnVuY3Rp
b24gKHRlc3QpIHsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0ZXN0LmdldCgncGFyZW50Jyk7
Ci0gICAgICAgICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgICAgICAgICB0b3BMZXZlbFRlc3Rz
LnB1c2godGVzdCk7Ci0gICAgICAgIH0pOwotICAgICAgICB0aGlzLnNldCgndG9wTGV2ZWxUZXN0
cycsIHRvcExldmVsVGVzdHMpOwotCi0gICAgICAgIHN0b3JlLmFsbCgnbWV0cmljJykuZm9yRWFj
aChmdW5jdGlvbiAobWV0cmljKSB7Ci0gICAgICAgICAgICBzZWxmLl9tZXRyaWNCeUlkW21ldHJp
Yy5nZXQoJ2lkJyldID0gbWV0cmljOwotICAgICAgICB9KTsKLSAgICAgICAgdmFyIHBsYXRmb3Jt
cyA9IHN0b3JlLmFsbCgncGxhdGZvcm0nKTsKLSAgICAgICAgcGxhdGZvcm1zLmZvckVhY2goZnVu
Y3Rpb24gKHBsYXRmb3JtKSB7Ci0gICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybUJ5SWRbcGxhdGZv
cm0uZ2V0KCdpZCcpXSA9IHBsYXRmb3JtOwotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5zZXQo
J3BsYXRmb3JtcycsIHBsYXRmb3Jtcyk7Ci0KLSAgICAgICAgc3RvcmUuYWxsKCdidWlsZGVyJyku
Zm9yRWFjaChmdW5jdGlvbiAoYnVpbGRlcikgewotICAgICAgICAgICAgc2VsZi5fYnVpbGRlckJ5
SWRbYnVpbGRlci5nZXQoJ2lkJyldID0gYnVpbGRlcjsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
dmFyIHJlcG9zaXRvcmllcyA9IHN0b3JlLmFsbCgncmVwb3NpdG9yeScpOwotICAgICAgICByZXBv
c2l0b3JpZXMuZm9yRWFjaChmdW5jdGlvbiAocmVwb3NpdG9yeSkgewotICAgICAgICAgICAgc2Vs
Zi5fcmVwb3NpdG9yeUJ5SWRbcmVwb3NpdG9yeS5nZXQoJ2lkJyldID0gcmVwb3NpdG9yeTsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIHRoaXMuc2V0KCdyZXBvc2l0b3JpZXMnLCByZXBvc2l0b3JpZXMu
c29ydEJ5KCdpZCcpKTsKLSAgICAgICAgdGhpcy5zZXQoJ3JlcG9zaXRvcmllc1dpdGhSZXBvcnRl
ZENvbW1pdHMnLAotICAgICAgICAgICAgcmVwb3NpdG9yaWVzLmZpbHRlcihmdW5jdGlvbiAocmVw
b3NpdG9yeSkgeyByZXR1cm4gcmVwb3NpdG9yeS5nZXQoJ2hhc1JlcG9ydGVkQ29tbWl0cycpOyB9
KSk7Ci0KLSAgICAgICAgdGhpcy5zZXQoJ2J1Z1RyYWNrZXJzJywgc3RvcmUuYWxsKCdidWdUcmFj
a2VyJykuc29ydEJ5KCduYW1lJykpOwotCi0gICAgICAgIHZhciBkYXNoYm9hcmRzID0gc3RvcmUu
YWxsKCdkYXNoYm9hcmQnKS50b0FycmF5KCk7Ci0gICAgICAgIHRoaXMuc2V0KCdkYXNoYm9hcmRz
JywgZGFzaGJvYXJkcyk7Ci0gICAgICAgIGRhc2hib2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoZGFz
aGJvYXJkKSB7IHNlbGYuX2Rhc2hib2FyZEJ5TmFtZVtkYXNoYm9hcmQuZ2V0KCduYW1lJyldID0g
ZGFzaGJvYXJkOyB9KTsKLSAgICAgICAgdGhpcy5fZGVmYXVsdERhc2hib2FyZE5hbWUgPSBkYXNo
Ym9hcmRzLmxlbmd0aCA/IGRhc2hib2FyZHNbMF0uZ2V0KCduYW1lJykgOiBudWxsOwotICAgIH0s
Ci0gICAgZmV0Y2hSdW5zV2l0aFBsYXRmb3JtQW5kTWV0cmljOiBmdW5jdGlvbiAoc3RvcmUsIHBs
YXRmb3JtSWQsIG1ldHJpY0lkLCB0ZXN0R3JvdXBJZCwgdXNlQ2FjaGUpCi0gICAgewotICAgICAg
ICBFbWJlci5hc3NlcnQoIkNhbid0IGNhY2hlIHJlc3VsdHMgZm9yIHRlc3QgZ3JvdXBzIiwgISh0
ZXN0R3JvdXBJZCAmJiB1c2VDYWNoZSkpOwotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAg
ICAgIHJldHVybiBFbWJlci5SU1ZQLmFsbChbCi0gICAgICAgICAgICBSdW5zRGF0YS5mZXRjaFJ1
bnMocGxhdGZvcm1JZCwgbWV0cmljSWQsIHRlc3RHcm91cElkLCB1c2VDYWNoZSksCi0gICAgICAg
ICAgICB0aGlzLmZldGNoKHN0b3JlKSwKLSAgICAgICAgXSkudGhlbihmdW5jdGlvbiAodmFsdWVz
KSB7Ci0gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB2YWx1ZXNbMF07Ci0KLSAgICAgICAgICAg
IHZhciBwbGF0Zm9ybSA9IEFwcC5NYW5pZmVzdC5wbGF0Zm9ybShwbGF0Zm9ybUlkKTsKLSAgICAg
ICAgICAgIHZhciBtZXRyaWMgPSBBcHAuTWFuaWZlc3QubWV0cmljKG1ldHJpY0lkKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybTogcGxhdGZvcm0sCi0g
ICAgICAgICAgICAgICAgbWV0cmljOiBtZXRyaWMsCi0gICAgICAgICAgICAgICAgZGF0YTogcmVz
cG9uc2UgPyBzZWxmLl9mb3JtYXRGZXRjaGVkRGF0YShtZXRyaWMuZ2V0KCduYW1lJyksIHJlc3Bv
bnNlLmNvbmZpZ3VyYXRpb25zKSA6IG51bGwsCi0gICAgICAgICAgICAgICAgc2hvdWxkUmVmZXRj
aDogIXJlc3BvbnNlIHx8ICtyZXNwb25zZS5sYXN0TW9kaWZpZWQgPCArcGxhdGZvcm0ubGFzdE1v
ZGlmaWVkVGltZUZvck1ldHJpYyhtZXRyaWMpLAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSk7
Ci0gICAgfSwKLSAgICBfbWFrZUZvcm1hdHRlcjogZnVuY3Rpb24gKHVuaXQsIHNpZ0ZpZywgYWx3
YXlzU2hvd1NpZ24pCi0gICAgewotICAgICAgICB2YXIgaXNNaWxpc2Vjb25kcyA9IGZhbHNlOwot
ICAgICAgICBpZiAodW5pdCA9PSAnbXMnKSB7Ci0gICAgICAgICAgICBpc01pbGlzZWNvbmRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIHVuaXQgPSAncyc7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGRp
dmlzb3IgPSB1bml0ID09ICdCJyA/IDEwMjQgOiAxMDAwOwotCi0gICAgICAgIHZhciBzdWZmaXgg
PSBbJ1x1MDNCQycsICdtJywgJycsICdLJywgJ00nLCAnRycsICdUJywgJ1AnLCAnRSddOwotICAg
ICAgICB2YXIgdGhyZXNob2xkID0gc2lnRmlnID49IDMgPyBkaXZpc29yIDogKGRpdmlzb3IgLyAx
MCk7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgIHZhciBp
OwotICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWx1ZSA+PSAwID8gKGFsd2F5c1Nob3dTaWduID8g
JysnIDogJycpIDogJy0nOwotICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7Ci0g
ICAgICAgICAgICBmb3IgKGkgPSBpc01pbGlzZWNvbmRzID8gMSA6IDI7IHZhbHVlIDwgMSAmJiBp
ID4gMDsgaS0tKQotICAgICAgICAgICAgICAgIHZhbHVlICo9IGRpdmlzb3I7Ci0gICAgICAgICAg
ICBmb3IgKDsgdmFsdWUgPj0gdGhyZXNob2xkOyBpKyspCi0gICAgICAgICAgICAgICAgdmFsdWUg
Lz0gZGl2aXNvcjsKLSAgICAgICAgICAgIHJldHVybiBzaWduICsgdmFsdWUudG9QcmVjaXNpb24o
TWF0aC5tYXgoMiwgc2lnRmlnKSkgKyAnICcgKyBzdWZmaXhbaV0gKyAodW5pdCB8fCAnJyk7Ci0g
ICAgICAgIH0KLSAgICB9LAotICAgIF9mb3JtYXRGZXRjaGVkRGF0YTogZnVuY3Rpb24gKG1ldHJp
Y05hbWUsIGNvbmZpZ3VyYXRpb25zKQotICAgIHsKLSAgICAgICAgdmFyIHVuaXQgPSBSdW5zRGF0
YS51bml0RnJvbU1ldHJpY05hbWUobWV0cmljTmFtZSk7Ci0gICAgICAgIHZhciBzbWFsbGVySXNC
ZXR0ZXIgPSBSdW5zRGF0YS5pc1NtYWxsZXJCZXR0ZXIodW5pdCk7Ci0gICAgICAgIHZhciBkZWx0
YUZvcm1hdHRlcldpdGhvdXRTaWduID0gdGhpcy5fbWFrZUZvcm1hdHRlcih1bml0LCAyLCBmYWxz
ZSk7Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRUaW1lU2VyaWVzID0gY29uZmlndXJhdGlvbnMuY3Vy
cmVudC50aW1lU2VyaWVzQnlDb21taXRUaW1lKGZhbHNlKTsKLSAgICAgICAgdmFyIGJhc2VsaW5l
VGltZVNlcmllcyA9IGNvbmZpZ3VyYXRpb25zLmJhc2VsaW5lID8gY29uZmlndXJhdGlvbnMuYmFz
ZWxpbmUudGltZVNlcmllc0J5Q29tbWl0VGltZShmYWxzZSwgdHJ1ZSkgOiBudWxsOwotICAgICAg
ICB2YXIgdGFyZ2V0VGltZVNlcmllcyA9IGNvbmZpZ3VyYXRpb25zLnRhcmdldCA/IGNvbmZpZ3Vy
YXRpb25zLnRhcmdldC50aW1lU2VyaWVzQnlDb21taXRUaW1lKGZhbHNlLCB0cnVlKSA6IG51bGw7
Ci0KLSAgICAgICAgdmFyIHVuZmlsdGVyZWRDdXJyZW50VGltZVNlcmllcyA9IGNvbmZpZ3VyYXRp
b25zLmN1cnJlbnQudGltZVNlcmllc0J5Q29tbWl0VGltZSh0cnVlKTsKLSAgICAgICAgdmFyIHVu
ZmlsdGVyZWRCYXNlbGluZVRpbWVTZXJpZXMgPSBjb25maWd1cmF0aW9ucy5iYXNlbGluZSA/IGNv
bmZpZ3VyYXRpb25zLmJhc2VsaW5lLnRpbWVTZXJpZXNCeUNvbW1pdFRpbWUodHJ1ZSwgdHJ1ZSkg
OiBudWxsOwotICAgICAgICB2YXIgdW5maWx0ZXJlZFRhcmdldFRpbWVTZXJpZXMgPSBjb25maWd1
cmF0aW9ucy50YXJnZXQgPyBjb25maWd1cmF0aW9ucy50YXJnZXQudGltZVNlcmllc0J5Q29tbWl0
VGltZSh0cnVlLCB0cnVlKSA6IG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
IGN1cnJlbnQ6IGN1cnJlbnRUaW1lU2VyaWVzLAotICAgICAgICAgICAgYmFzZWxpbmU6IGJhc2Vs
aW5lVGltZVNlcmllcywKLSAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0VGltZVNlcmllcywKLQot
ICAgICAgICAgICAgdW5maWx0ZXJlZEN1cnJlbnRUaW1lU2VyaWVzOiB1bmZpbHRlcmVkQ3VycmVu
dFRpbWVTZXJpZXMsCi0gICAgICAgICAgICB1bmZpbHRlcmVkQmFzZWxpbmVUaW1lU2VyaWVzOiB1
bmZpbHRlcmVkQmFzZWxpbmVUaW1lU2VyaWVzLAotICAgICAgICAgICAgdW5maWx0ZXJlZFRhcmdl
dFRpbWVTZXJpZXM6IHVuZmlsdGVyZWRUYXJnZXRUaW1lU2VyaWVzLAotCi0gICAgICAgICAgICBm
b3JtYXRXaXRoRGVsdGFBbmRVbml0OiBmdW5jdGlvbiAodmFsdWUsIGRlbHRhKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlcih2YWx1ZSkgKyAoZGVs
dGEgJiYgIWlzTmFOKGRlbHRhKSA/ICcgXHUwMGIxICcgKyBkZWx0YUZvcm1hdHRlcldpdGhvdXRT
aWduKGRlbHRhKSA6ICcnKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmb3JtYXR0ZXI6
IHRoaXMuX21ha2VGb3JtYXR0ZXIodW5pdCwgNCwgZmFsc2UpLAotICAgICAgICAgICAgZGVsdGFG
b3JtYXR0ZXI6IHRoaXMuX21ha2VGb3JtYXR0ZXIodW5pdCwgMiwgdHJ1ZSksCi0gICAgICAgICAg
ICBzbWFsbGVySXNCZXR0ZXI6IHNtYWxsZXJJc0JldHRlciwKLSAgICAgICAgICAgIHNob3dPdXRs
aWVyOiBmdW5jdGlvbiAoc2hvdykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlz
LmN1cnJlbnQgPSBzaG93ID8gdW5maWx0ZXJlZEN1cnJlbnRUaW1lU2VyaWVzIDogY3VycmVudFRp
bWVTZXJpZXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5iYXNlbGluZSA9IHNob3cgPyB1bmZpbHRl
cmVkQmFzZWxpbmVUaW1lU2VyaWVzIDogYmFzZWxpbmVUaW1lU2VyaWVzOwotICAgICAgICAgICAg
ICAgIHRoaXMudGFyZ2V0ID0gc2hvdyA/IHVuZmlsdGVyZWRUYXJnZXRUaW1lU2VyaWVzIDogdGFy
Z2V0VGltZVNlcmllczsKLSAgICAgICAgICAgIH0sCi0gICAgICAgIH07Ci0gICAgfQotfSkuY3Jl
YXRlKCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL3Bv
cHVwLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9wb3B1cC5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwZjI3NzA0YTYxZDdlZjM3MTBiMWMyNGRkNTgw
OTY4OWRlNGI4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL3BvcHVwLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMTE2ICswLDAgQEAKLUFwcC5Qb3B1cFZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7
Ci0gICAgdGVtcGxhdGVOYW1lOiAncG9wdXAnLAotICAgIGNsYXNzTmFtZXM6IFsncG9wdXAnXSwK
LSAgICBwb3B1cExpc3RDb250YWluZXJWaWV3OiBFbWJlci5Db250YWluZXJWaWV3LmV4dGVuZCgp
LAotICAgIGluaXQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLl9zdXBlcigpOwot
ICAgICAgICB0aGlzLl9saXN0VmlldyA9IG51bGw7Ci0gICAgfSwKLSAgICBzaG93UG9wdXA6IGZ1
bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLnVuc2NoZWR1bGVIaWRpbmcoKTsKLSAgICAg
ICAgaWYgKCF0aGlzLl9saXN0VmlldykgewotICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLmdl
dCgnbGlzdCcpOwotICAgICAgICAgICAgdGhpcy5fbGlzdFZpZXcgPSBBcHAuUG9wdXBMaXN0Vmll
dy5jcmVhdGUoe3RhZ05hbWU6ICd1bCcsIGxpc3Q6IGxpc3R9KTsKLSAgICAgICAgICAgIHRoaXMu
Z2V0KCdwb3B1cExpc3RDb250YWluZXJWaWV3SW5zdGFuY2UnKS5wdXNoT2JqZWN0KHRoaXMuX2xp
c3RWaWV3KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9saXN0Vmlldy5zaG93TGlzdCgpOwot
ICAgIH0sCi0gICAgc2NoZWR1bGVIaWRpbmc6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0
aGlzLl9oaWRpbmdUaW1lciA9IEVtYmVyLnJ1bi5sYXRlcih0aGlzLCB0aGlzLmhpZGVOb3csIDUw
MCk7Ci0gICAgfSwKLSAgICB1bnNjaGVkdWxlSGlkaW5nOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgRW1iZXIucnVuLmNhbmNlbCh0aGlzLl9oaWRpbmdUaW1lcik7Ci0gICAgICAgIHRoaXMu
X2hpZGluZ1RpbWVyID0gbnVsbDsKLSAgICB9LAotICAgIGhpZGVOb3c6IGZ1bmN0aW9uICgpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fbGlzdFZpZXcpCi0gICAgICAgICAgICB0aGlzLl9saXN0
Vmlldy5oaWRlTGlzdCgpOwotICAgIH0KLX0pOwotCi1BcHAuUG9wdXBCdXR0b25WaWV3ID0gRW1i
ZXIuVmlldy5leHRlbmQoewotICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUo
J3t7dmlldy5sYWJlbH19JyksCi0gICAgY2xhc3NOYW1lczogWydwb3B1cC1idXR0b24nXSwKLSAg
ICBhdHRyaWJ1dGVCaW5kaW5nczogWydocmVmJ10sCi0gICAgaHJlZjogJyMnLAotICAgIG1vdXNl
RW50ZXI6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLmdldCgncGFyZW50Vmlldycp
LnNob3dQb3B1cCgpOwotICAgIH0sCi0gICAgY2xpY2s6IGZ1bmN0aW9uIChldmVudCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuZ2V0KCdwYXJlbnRWaWV3Jykuc2hvd1BvcHVwKCk7Ci0gICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLSAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiAo
KQotICAgIHsKLSAgICAgICAgdGhpcy5nZXQoJ3BhcmVudFZpZXcnKS5zY2hlZHVsZUhpZGluZygp
OwotICAgIH0sCi19KTsKLQotQXBwLlBvcHVwTGlzdFZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7
Ci0gICAgdGVtcGxhdGVOYW1lOiAncG9wdXAtbGlzdCcsCi0gICAgaW5pdDogZnVuY3Rpb24gKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgIHRoaXMuX3Nob3VsZEhpZGUg
PSB0cnVlOwotICAgIH0sCi0gICAgX3BvdXBWaWV3OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgdmFyIGNvbnRhaW5lclZpZXcgPSB0aGlzLmdldCgncGFyZW50VmlldycpOwotICAgICAgICBy
ZXR1cm4gY29udGFpbmVyVmlldy5nZXQoJ3BhcmVudFZpZXcnKTsKLSAgICB9LAotICAgIGRpZElu
c2VydEVsZW1lbnQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2hvdWxk
SGlkZSkKLSAgICAgICAgICAgIHRoaXMuJCgpLmhpZGUoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdGhpcy5fc2hvd0xpc3RTeW5jSWZQb3NzaWJsZSgpOwotICAgICAgICB0aGlzLl9zdXBl
cigpOwotICAgIH0sCi0gICAgbW91c2VFbnRlcjogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3BvdXBWaWV3KCkudW5zY2hlZHVsZUhpZGluZygpOwotICAgIH0sCi0gICAgbW91c2VM
ZWF2ZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3BvdXBWaWV3KCkuc2NoZWR1
bGVIaWRpbmcoKTsKLSAgICB9LAotICAgIHNob3dMaXN0OiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fc2hvdWxkSGlkZSA9IGZhbHNlOwotICAgICAgICB0aGlzLl9zaG93TGlzdFN5
bmNJZlBvc3NpYmxlKCk7Ci0gICAgfSwKLSAgICBfc2hvd0xpc3RTeW5jSWZQb3NzaWJsZTogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy4kKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZhciBwb3B1cFZpZXcgPSB0aGlzLl9wb3VwVmlldygpOwotICAgICAgICBp
ZiAocG9wdXBWaWV3LmdldCgncGFyZW50VmlldycpIGluc3RhbmNlb2YgQXBwLlBvcHVwTGlzdFZp
ZXcpIHsKLSAgICAgICAgICAgIHZhciBwYXJlbnRMaXN0VmlldyA9IHBvcHVwVmlldy5nZXQoJ3Bh
cmVudFZpZXcnKTsKLSAgICAgICAgICAgIHBhcmVudExpc3RWaWV3LmdldCgnY2hpbGRWaWV3cycp
Lm1hcChmdW5jdGlvbiAoc2libGluZykgewotICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nICE9
IHBvcHVwVmlldykKLSAgICAgICAgICAgICAgICAgICAgc2libGluZy5oaWRlTm93KCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuJCgpLmNzcygnbGVmdCcsIHBhcmVudExpc3RW
aWV3LiQoKS5vdXRlcldpZHRoKCkgKyA1KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0
aGlzLiQoKS5jc3MoJ3RvcCcsIHBvcHVwVmlldy4kKCkuaGVpZ2h0KCkgLSA1KTsKLSAgICAgICAg
dGhpcy4kKCkuc2hvdygpOwotICAgIH0sCi0gICAgaGlkZUxpc3Q6IGZ1bmN0aW9uICgpCi0gICAg
ewotICAgICAgICB0aGlzLl9zaG91bGRIaWRlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5faGlkZUxp
c3RTeW5jSWZQb3NzaWJsZSgpOwotICAgIH0sCi0gICAgX2hpZGVMaXN0U3luY0lmUG9zc2libGU6
IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuJCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLiQoKS5oaWRlKCk7Ci0gICAgfQotfSk7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL3N0YXRpc3RpY3Mtc3RyYXRlZ2ll
cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvc3RhdGlzdGljcy1zdHJh
dGVnaWVzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2FlODY4NmUxMTIwMDE2
NjFhOGE5NzljYjJiNjk0N2Q4ZjNmMGM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvc3RhdGlz
dGljcy1zdHJhdGVnaWVzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLQotdmFy
IFN0YXRpc3RpY3NTdHJhdGVnaWVzID0ge307Ci0KLShmdW5jdGlvbiAoKSB7Ci0KLVN0YXRpc3Rp
Y3NTdHJhdGVnaWVzLk1vdmluZ0F2ZXJhZ2VTdHJhdGVnaWVzID0gWwotICAgIHsKLSAgICAgICAg
aWQ6IDEsCi0gICAgICAgIGxhYmVsOiAnU2ltcGxlIE1vdmluZyBBdmVyYWdlJywKLSAgICAgICAg
cGFyYW1ldGVyTGlzdDogWwotICAgICAgICAgICAge2xhYmVsOiAiQmFja3dhcmQgd2luZG93IHNp
emUiLCB2YWx1ZTogOCwgbWluOiAyLCBzdGVwOiAxfSwKLSAgICAgICAgICAgIHtsYWJlbDogIkZv
cndhcmQgd2luZG93IHNpemUiLCB2YWx1ZTogNCwgbWluOiAwLCBzdGVwOiAxfQotICAgICAgICBd
LAotICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAoYmFja3dhcmRXaW5kb3dTaXplLCBmb3J3YXJk
V2luZG93U2l6ZSwgdmFsdWVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdGlzdGljcy5tb3Zp
bmdBdmVyYWdlKHZhbHVlcywgYmFja3dhcmRXaW5kb3dTaXplLCBmb3J3YXJkV2luZG93U2l6ZSk7
Ci0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAgIGlkOiAyLAotICAgICAgICBsYWJl
bDogJ0N1bXVsYXRpdmUgTW92aW5nIEF2ZXJhZ2UnLAotICAgICAgICBleGVjdXRlOiBTdGF0aXN0
aWNzLmN1bXVsYXRpdmVNb3ZpbmdBdmVyYWdlLAotICAgIH0sCi0gICAgewotICAgICAgICBpZDog
MywKLSAgICAgICAgbGFiZWw6ICdFeHBvbmVudGlhbCBNb3ZpbmcgQXZlcmFnZScsCi0gICAgICAg
IHBhcmFtZXRlckxpc3Q6IFt7bGFiZWw6ICJTbW9vdGhpbmcgZmFjdG9yIiwgdmFsdWU6IDAuMSwg
bWluOiAwLjAwMSwgbWF4OiAwLjl9XSwKLSAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHNtb290
aGluZ0ZhY3RvciwgdmFsdWVzKSB7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGggfHwg
dHlwZW9mKHNtb290aGluZ0ZhY3RvcikgIT09ICJudW1iZXIiKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuZXhwb25lbnRpYWxNb3Zp
bmdBdmVyYWdlKHZhbHVlcywgc21vb3RoaW5nRmFjdG9yKTsKLSAgICAgICAgfQotICAgIH0sCi0g
ICAgewotICAgICAgICBpZDogNCwKLSAgICAgICAgaXNTZWdtZW50YXRpb246IHRydWUsCi0gICAg
ICAgIGxhYmVsOiAnU2VnbWVudGF0aW9uOiBSZWN1cnNpdmUgdC10ZXN0JywKLSAgICAgICAgZGVz
Y3JpcHRpb246ICJSZWN1cnNpdmVseSBzcGxpdCB2YWx1ZXMgaW50byB0d28gc2VnbWVudHMgaWYg
V2VsY2gncyB0LXRlc3QgZGV0ZWN0cyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVy
ZW5jZS4iLAotICAgICAgICBwYXJhbWV0ZXJMaXN0OiBbe2xhYmVsOiAiTWluaW11bSBzZWdtZW50
IGxlbmd0aCIsIHZhbHVlOiAyMCwgbWluOiA1fV0sCi0gICAgICAgIGV4ZWN1dGU6IGZ1bmN0aW9u
IChtaW5MZW5ndGgsIHZhbHVlcykgewotICAgICAgICAgICAgcmV0dXJuIGF2ZXJhZ2VzRnJvbVNl
Z21lbnRzKHZhbHVlcywgU3RhdGlzdGljcy5zZWdtZW50VGltZVNlcmllc0dyZWVkeVdpdGhTdHVk
ZW50c1RUZXN0KHZhbHVlcywgbWluTGVuZ3RoKSk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHsK
LSAgICAgICAgaWQ6IDUsCi0gICAgICAgIGlzU2VnbWVudGF0aW9uOiB0cnVlLAotICAgICAgICBs
YWJlbDogJ1NlZ21lbnRhdGlvbjogU2Nod2FyeiBjcml0ZXJpb24nLAotICAgICAgICBkZXNjcmlw
dGlvbjogJ0FkYXB0aXZlIGFsZ29yaXRobSB0aGF0IG1heGltaXplcyB0aGUgU2Nod2FyeiBjcml0
ZXJpb24gKEJJQykuJywKLSAgICAgICAgLy8gQmFzZWQgb24gRGV0ZWN0aW9uIG9mIE11bHRpcGxl
IENoYW5nZeKAk1BvaW50cyBpbiBNdWx0aXZhcmlhdGUgVGltZSBTZXJpZXMgYnkgTWFyYyBMYXZp
ZWxsZSAoSnVseSAyMDA2KS4KLSAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHZhbHVlcykgewot
ICAgICAgICAgICAgcmV0dXJuIGF2ZXJhZ2VzRnJvbVNlZ21lbnRzKHZhbHVlcywgU3RhdGlzdGlj
cy5zZWdtZW50VGltZVNlcmllc0J5TWF4aW1pemluZ1NjaHdhcnpDcml0ZXJpb24odmFsdWVzKSk7
Ci0gICAgICAgIH0KLSAgICB9LAotXTsKLQotZnVuY3Rpb24gYXZlcmFnZXNGcm9tU2VnbWVudHMo
dmFsdWVzLCBzZWdtZW50U3RhcnRJbmRpY2VzKSB7Ci0gICAgdmFyIGF2ZXJhZ2VzID0gbmV3IEFy
cmF5KHZhbHVlcy5sZW5ndGgpOwotICAgIHZhciBhdmVyYWdlSW5kZXggPSAwOwotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc2VnbWVudFN0YXJ0SW5kaWNlcy5sZW5ndGg7IGkrKykgewotICAgICAg
ICB2YXIgc2VnbWVudCA9IHZhbHVlcy5zbGljZShzZWdtZW50U3RhcnRJbmRpY2VzW2kgLSAxXSwg
c2VnbWVudFN0YXJ0SW5kaWNlc1tpXSk7Ci0gICAgICAgIHZhciBhdmVyYWdlID0gU3RhdGlzdGlj
cy5zdW0oc2VnbWVudCkgLyBzZWdtZW50Lmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBzZWdtZW50Lmxlbmd0aDsgaisrKQotICAgICAgICAgICAgYXZlcmFnZXNbYXZlcmFnZUlu
ZGV4KytdID0gYXZlcmFnZTsKLSAgICB9Ci0gICAgcmV0dXJuIGF2ZXJhZ2VzOwotfQotCi0KLVN0
YXRpc3RpY3NTdHJhdGVnaWVzLkVudmVsb3BpbmdTdHJhdGVnaWVzID0gWwotICAgIHsKLSAgICAg
ICAgaWQ6IDEwMCwKLSAgICAgICAgbGFiZWw6ICdBdmVyYWdlIERpZmZlcmVuY2UnLAotICAgICAg
ICBkZXNjcmlwdGlvbjogJ1RoZSBhdmVyYWdlIGRpZmZlcmVuY2UgYmV0d2VlbiBjb25zZWN1dGl2
ZSB2YWx1ZXMuJywKLSAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKHZhbHVlcywgbW92aW5nQXZl
cmFnZXMpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTmFOOwotCi0gICAgICAgICAgICB2YXIgZGlmZiA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAg
ICBkaWZmICs9IE1hdGguYWJzKHZhbHVlc1tpXSAtIHZhbHVlc1tpIC0gMV0pOwotCi0gICAgICAg
ICAgICByZXR1cm4gZGlmZiAvIHZhbHVlcy5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9LAotICAg
IHsKLSAgICAgICAgaWQ6IDEwMSwKLSAgICAgICAgbGFiZWw6ICdNb3ZpbmcgQXZlcmFnZSBTdGFu
ZGFyZCBEZXZpYXRpb24nLAotICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBzcXVhcmUgcm9vdCBv
ZiB0aGUgYXZlcmFnZSBkZXZpYXRpb24gZnJvbSB0aGUgbW92aW5nIGF2ZXJhZ2Ugd2l0aCBCZXNz
ZWxcJ3MgY29ycmVjdGlvbi4nLAotICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAodmFsdWVzLCBt
b3ZpbmdBdmVyYWdlcykgewotICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPCAxKQotICAg
ICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAgICAgICAgICAgIHZhciBkaWZmU3F1YXJlU3Vt
ID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSAodmFsdWVzW2ldIC0gbW92aW5nQXZlcmFn
ZXNbaV0pOwotICAgICAgICAgICAgICAgIGRpZmZTcXVhcmVTdW0gKz0gZGlmZiAqIGRpZmY7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoZGlmZlNxdWFyZVN1
bSAvICh2YWx1ZXMubGVuZ3RoIC0gMSkpOwotICAgICAgICB9Ci0gICAgfSwKLV07Ci0KLQotU3Rh
dGlzdGljc1N0cmF0ZWdpZXMuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ2llcyA9IFsKLSAgICB7
Ci0gICAgICAgIGlkOiAzMDEsCi0gICAgICAgIGxhYmVsOiAidC10ZXN0IDk5JSBzaWduaWZpY2Fu
Y2UiLAotICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAodmFsdWVzLCBzZWdtZW50ZWRWYWx1ZXMp
IHsKLSAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gW107Ci0KLSAgICAgICAgICAgIHZhciBwcmV2aW91c01lYW4gPSBzZWdtZW50ZWRWYWx1ZXNb
MF07Ci0gICAgICAgICAgICB2YXIgc2VsZWN0ZWRSYW5nZXMgPSBuZXcgQXJyYXk7Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNlZ21lbnRlZFZhbHVlcy5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TWVhbiA9IHNlZ21lbnRlZFZhbHVlc1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudE1lYW4gPT0gcHJldmlvdXNNZWFuKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBsZWZ0RWRnZSA9IGkgLSAyLCByaWdodEVkZ2UgPSBp
ICsgMjsgbGVmdEVkZ2UgPj0gMCAmJiByaWdodEVkZ2UgPD0gdmFsdWVzLmxlbmd0aDsgbGVmdEVk
Z2UtLSwgcmlnaHRFZGdlKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRlZFZh
bHVlc1tsZWZ0RWRnZV0gIT0gcHJldmlvdXNNZWFuIHx8IHNlZ21lbnRlZFZhbHVlc1tyaWdodEVk
Z2UgLSAxXSAhPSBjdXJyZW50TWVhbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU3RhdGlzdGljcy5jb21wdXRlV2VsY2hz
VCh2YWx1ZXMsIGxlZnRFZGdlLCBpIC0gbGVmdEVkZ2UsIHZhbHVlcywgaSwgcmlnaHRFZGdlIC0g
aSwgMC45OCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc2lnbmlmaWNhbnRseURp
ZmZlcmVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZXMucHVzaChb
bGVmdEVkZ2UsIHJpZ2h0RWRnZSAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYg
U3RhdGlzdGljcy5kZWJ1Z2dpbmdUZXN0aW5nUmFuZ2VOb21pbmF0aW9uKQotICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGZpbmQgYSB0ZXN0aW5nIHJhbmdlIGF0Jywg
aSwgJ2NoYW5naW5nIGZyb20nLCBwcmV2aW91c01lYW4sICd0bycsIGN1cnJlbnRNZWFuKTsKLSAg
ICAgICAgICAgICAgICBwcmV2aW91c01lYW4gPSBjdXJyZW50TWVhbjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFJhbmdlczsKLSAgICAgICAgfQotICAgIH0KLV07
Ci0KLQotCi1mdW5jdGlvbiBjcmVhdGVXZXN0ZXJuRWxlY3RyaWNSdWxlKHdpbmRvd1NpemUsIG1p
bk91dGxpbmVyQ291bnQsIGxpbWl0RmFjdG9yKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1
ZXMsIG1vdmluZ0F2ZXJhZ2VzLCBkZXZpYXRpb24pIHsKLSAgICAgICAgdmFyIHJlc3VsdHMgPSBu
ZXcgQXJyYXkodmFsdWVzLmxlbmd0aCk7Ci0gICAgICAgIHZhciBsaW1pdCA9IGxpbWl0RmFjdG9y
ICogZGV2aWF0aW9uOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7
IGkrKykKLSAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBjb3VudFZhbHVlc09uU2FtZVNpZGUodmFs
dWVzLCBtb3ZpbmdBdmVyYWdlcywgbGltaXQsIGksIHdpbmRvd1NpemUpID49IG1pbk91dGxpbmVy
Q291bnQgPyB3aW5kb3dTaXplIDogMDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQot
fQotCi1mdW5jdGlvbiBjb3VudFZhbHVlc09uU2FtZVNpZGUodmFsdWVzLCBtb3ZpbmdBdmVyYWdl
cywgbGltaXQsIHN0YXJ0SW5kZXgsIHdpbmRvd1NpemUpIHsKLSAgICB2YXIgdmFsdWVzQWJvdmVM
aW1pdCA9IDA7Ci0gICAgdmFyIHZhbHVlc0JlbG93TGltaXQgPSAwOwotICAgIHZhciBjZW50ZXIg
PSBtb3ZpbmdBdmVyYWdlc1tzdGFydEluZGV4XTsKLSAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRl
eDsgaSA8IHN0YXJ0SW5kZXggKyB3aW5kb3dTaXplICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgdmFyIGRpZmYgPSB2YWx1ZXNbaV0gLSBjZW50ZXI7Ci0gICAgICAgIHZhbHVl
c0Fib3ZlTGltaXQgKz0gKGRpZmYgPiBsaW1pdCk7Ci0gICAgICAgIHZhbHVlc0JlbG93TGltaXQg
Kz0gKGRpZmYgPCAtbGltaXQpOwotICAgIH0KLSAgICByZXR1cm4gTWF0aC5tYXgodmFsdWVzQWJv
dmVMaW1pdCwgdmFsdWVzQmVsb3dMaW1pdCk7Ci19Ci0KLVN0YXRpc3RpY3NTdHJhdGVnaWVzLkFu
b21hbHlEZXRlY3Rpb25TdHJhdGVneSA9IFsKLSAgICAvLyBXZXN0ZXJuIEVsZWN0cmljIHJ1bGVz
OiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlc3Rlcm5fRWxlY3RyaWNfcnVsZXMKLSAg
ICB7Ci0gICAgICAgIGlkOiAyMDAsCi0gICAgICAgIGxhYmVsOiAnV2VzdGVybiBFbGVjdHJpYzog
YW55IHBvaW50IGJleW9uZCAzz4MnLAotICAgICAgICBkZXNjcmlwdGlvbjogJ0FueSBzaW5nbGUg
cG9pbnQgZmFsbHMgb3V0c2lkZSAzz4MgbGltaXQgZnJvbSB0aGUgbW92aW5nIGF2ZXJhZ2UnLAot
ICAgICAgICBleGVjdXRlOiBjcmVhdGVXZXN0ZXJuRWxlY3RyaWNSdWxlKDEsIDEsIDMpLAotICAg
IH0sCi0gICAgewotICAgICAgICBpZDogMjAxLAotICAgICAgICBsYWJlbDogJ1dlc3Rlcm4gRWxl
Y3RyaWM6IDIvMyBwb2ludHMgYmV5b25kIDLPgycsCi0gICAgICAgIGRlc2NyaXB0aW9uOiAnVHdv
IG91dCBvZiB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMgZmFsbCBvdXRzaWRlIDLPgyBsaW1pdCBm
cm9tIHRoZSBtb3ZpbmcgYXZlcmFnZSBvbiB0aGUgc2FtZSBzaWRlJywKLSAgICAgICAgZXhlY3V0
ZTogY3JlYXRlV2VzdGVybkVsZWN0cmljUnVsZSgzLCAyLCAyKSwKLSAgICB9LAotICAgIHsKLSAg
ICAgICAgaWQ6IDIwMiwKLSAgICAgICAgbGFiZWw6ICdXZXN0ZXJuIEVsZWN0cmljOiA0LzUgcG9p
bnRzIGJleW9uZCDPgycsCi0gICAgICAgIGRlc2NyaXB0aW9uOiAnRm91ciBvdXQgb2YgZml2ZSBj
b25zZWN1dGl2ZSBwb2ludHMgZmFsbCBvdXRzaWRlIDLPgyBsaW1pdCBmcm9tIHRoZSBtb3Zpbmcg
YXZlcmFnZSBvbiB0aGUgc2FtZSBzaWRlJywKLSAgICAgICAgZXhlY3V0ZTogY3JlYXRlV2VzdGVy
bkVsZWN0cmljUnVsZSg1LCA0LCAxKSwKLSAgICB9LAotICAgIHsKLSAgICAgICAgaWQ6IDIwMywK
LSAgICAgICAgbGFiZWw6ICdXZXN0ZXJuIEVsZWN0cmljOiA5IHBvaW50cyBvbiBzYW1lIHNpZGUn
LAotICAgICAgICBkZXNjcmlwdGlvbjogJ05pbmUgY29uc2VjdXRpdmUgcG9pbnRzIG9uIHRoZSBz
YW1lIHNpZGUgb2YgdGhlIG1vdmluZyBhdmVyYWdlJywKLSAgICAgICAgZXhlY3V0ZTogY3JlYXRl
V2VzdGVybkVsZWN0cmljUnVsZSg5LCA5LCAwKSwKLSAgICB9LAotICAgIHsKLSAgICAgICAgaWQ6
IDIxMCwKLSAgICAgICAgbGFiZWw6ICdNb3ppbGxhOiB0LXRlc3QgNSB2cy4gMjAgYmVmb3JlIHRo
YXQnLAotICAgICAgICBkZXNjcmlwdGlvbjogIlVzZSBzdHVkZW50J3MgdC10ZXN0IHRvIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBtZWFuIG9mIHRoZSBsYXN0IGZpdmUgZGF0YSBwb2ludHMgZGlmZmVy
cyBmcm9tIHRoZSBtZWFuIG9mIHRoZSB0d2VudHkgdmFsdWVzIGJlZm9yZSB0aGF0IiwKLSAgICAg
ICAgZXhlY3V0ZTogZnVuY3Rpb24gKHZhbHVlcywgbW92aW5nQXZlcmFnZXMsIGRldmlhdGlvbikg
ewotICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkodmFsdWVzLmxlbmd0aCk7Ci0g
ICAgICAgICAgICB2YXIgcCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIwOyBp
IDwgdmFsdWVzLmxlbmd0aCAtIDU7IGkrKykKLSAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0g
U3RhdGlzdGljcy50ZXN0V2VsY2hzVCh2YWx1ZXMuc2xpY2UoaSAtIDIwLCBpKSwgdmFsdWVzLnNs
aWNlKGksIGkgKyA1KSwgMC45OCkgPyA1IDogMDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRz
OwotICAgICAgICB9Ci0gICAgfSwKLV0KLQotU3RhdGlzdGljc1N0cmF0ZWdpZXMuZXhlY3V0ZVN0
cmF0ZWd5ID0gZnVuY3Rpb24gKHN0cmF0ZWd5LCByYXdWYWx1ZXMsIGFkZGl0aW9uYWxBcmd1bWVu
dHMpCi17Ci0gICAgdmFyIHBhcmFtZXRlcnMgPSAoc3RyYXRlZ3kucGFyYW1ldGVyTGlzdCB8fCBb
XSkubWFwKGZ1bmN0aW9uIChwYXJhbSkgewotICAgICAgICB2YXIgcGFyc2VkID0gcGFyc2VGbG9h
dChwYXJhbS52YWx1ZSk7Ci0gICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJhbS5tYXggfHwgSW5m
aW5pdHksIE1hdGgubWF4KHBhcmFtLm1pbiB8fCAtSW5maW5pdHksIGlzTmFOKHBhcnNlZCkgPyAw
IDogcGFyc2VkKSk7Ci0gICAgfSk7Ci0gICAgcGFyYW1ldGVycy5wdXNoKHJhd1ZhbHVlcyk7Ci0g
ICAgcmV0dXJuIHN0cmF0ZWd5LmV4ZWN1dGUuYXBwbHkoc3RyYXRlZ3ksIHBhcmFtZXRlcnMuY29u
Y2F0KGFkZGl0aW9uYWxBcmd1bWVudHMpKTsKLX07Ci0KLX0pKCk7Ci0KLWlmICh0eXBlb2YgbW9k
dWxlICE9ICd1bmRlZmluZWQnKSB7Ci0gICAgZm9yICh2YXIga2V5IGluIFN0YXRpc3RpY3NTdHJh
dGVnaWVzKQotICAgICAgICBtb2R1bGUuZXhwb3J0c1trZXldID0gU3RhdGlzdGljc1N0cmF0ZWdp
ZXNba2V5XTsKLX0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9k
ZXRlY3QtY2hhbmdlcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9kZXRlY3Qt
Y2hhbmdlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWZiNjU5NWZmZTRiNjAy
YWUwODM5NzI1OTU4MzEzYjg5Mjc1OTE3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvZGV0ZWN0LWNo
YW5nZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDEgKzAsMCBAQAotIyEvdXNyL2xvY2FsL2Jp
bi9ub2RlCi0KLXZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Ci12YXIgaHR0cCA9IHJlcXVpcmUoJ2h0
dHAnKTsKLXZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7Ci12YXIgZGF0YSA9IHJlcXVpcmUo
Jy4uL3B1YmxpYy92Mi9kYXRhLmpzJyk7Ci12YXIgUnVuc0RhdGEgPSBkYXRhLlJ1bnNEYXRhOwot
dmFyIFN0YXRpc3RpY3MgPSByZXF1aXJlKCcuLi9wdWJsaWMvc2hhcmVkL3N0YXRpc3RpY3MuanMn
KTsKLXZhciBTdGF0aXN0aWNzU3RyYXRlZ2llcyA9IHJlcXVpcmUoJy4uL3B1YmxpYy92Mi9zdGF0
aXN0aWNzLXN0cmF0ZWdpZXMuanMnKTsKLXZhciBwYXJzZUFyZ3VtZW50cyA9IHJlcXVpcmUoJy4v
anMvcGFyc2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1bWVudHM7Ci0KLS8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgdXNlIGEgZ2xvYmFsIHZhcmlhYmxlIGxpa2UgdGhpcy4KLXZhciBzZXR0aW5nczsK
LWZ1bmN0aW9uIG1haW4oYXJndikKLXsKLSAgICB2YXIgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRz
KGFyZ3YsIFsKLSAgICAgICAge25hbWU6ICctLXNlcnZlci1jb25maWctanNvbicsIHJlcXVpcmVk
OiB0cnVlfSwKLSAgICAgICAge25hbWU6ICctLWNoYW5nZS1kZXRlY3Rpb24tY29uZmlnLWpzb24n
LCByZXF1aXJlZDogdHJ1ZX0sCi0gICAgICAgIHtuYW1lOiAnLS1zZWNvbmRzLXRvLXNsZWVwJywg
dHlwZTogcGFyc2VGbG9hdCwgZGVmYXVsdDogMTIwMH0sCi0gICAgXSk7Ci0gICAgaWYgKCFvcHRp
b25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXR0aW5ncyA9IEpTT04ucGFyc2UoZnMucmVh
ZEZpbGVTeW5jKG9wdGlvbnNbJy0tY2hhbmdlLWRldGVjdGlvbi1jb25maWctanNvbiddLCAndXRm
OCcpKTsKLSAgICBzZXR0aW5ncy5zZWNvbmRzVG9TbGVlcCA9IG9wdGlvbnNbJy0tc2Vjb25kcy10
by1zbGVlcCddOwotCi0gICAgZmV0Y2hNYW5pZmVzdEFuZEFuYWx5emVEYXRhKG9wdGlvbnNbJy0t
c2VydmVyLWNvbmZpZy1qc29uJ10pOwotfQotCi1mdW5jdGlvbiBmZXRjaE1hbmlmZXN0QW5kQW5h
bHl6ZURhdGEoc2VydmVyQ29uZmlnSlNPTikKLXsKLSAgICBsb2FkU2VydmVyQ29uZmlnKHNlcnZl
ckNvbmZpZ0pTT04pOwotCi0gICAgZ2V0SlNPTihzZXR0aW5ncy5wZXJmc2VydmVyLCAnL2RhdGEv
bWFuaWZlc3QuanNvbicpLnRoZW4oZnVuY3Rpb24gKG1hbmlmZXN0KSB7Ci0gICAgICAgIHJldHVy
biBtYXBJbk9yZGVyKGNvbmZpZ3VyYXRpb25zRm9yVGVzdGluZyhtYW5pZmVzdCksIGFuYWx5emVD
b25maWd1cmF0aW9uKTsKLSAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAg
IGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvYnRhaW4gdGhlIG1hbmlmZXN0IGZpbGUnLCByZWFz
b24pOwotICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICBjb25zb2xlLmxvZygnJyk7
Ci0gICAgICAgIGNvbnNvbGUubG9nKCdTbGVlaW5nIGZvcicsIHNldHRpbmdzLnNlY29uZHNUb1Ns
ZWVwLCAnc2Vjb25kcycpOwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIGZldGNoTWFuaWZlc3RBbmRBbmFseXplRGF0YShzZXJ2ZXJDb25maWdKU09OKTsKLSAg
ICAgICAgfSwgc2V0dGluZ3Muc2Vjb25kc1RvU2xlZXAgKiAxMDAwKTsKLSAgICB9KTsKLX0KLQot
ZnVuY3Rpb24gbG9hZFNlcnZlckNvbmZpZyhzZXJ2ZXJDb25maWdKU09OKQotewotICAgIHZhciBz
ZXJ2ZXJDb25maWcgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhzZXJ2ZXJDb25maWdKU09O
LCAndXRmOCcpKTsKLQotICAgIHZhciBzZXJ2ZXIgPSBzZXJ2ZXJDb25maWdbJ3NlcnZlciddOwot
ICAgIGlmICgnYXV0aCcgaW4gc2VydmVyKQotICAgICAgICBzZXJ2ZXJbJ2F1dGgnXSA9IHNlcnZl
clsnYXV0aCddWyd1c2VybmFtZSddICsgJzonICsgc2VydmVyWydhdXRoJ11bJ3Bhc3N3b3JkJ107
Ci0KLSAgICBzZXR0aW5ncy5wZXJmc2VydmVyID0gc2VydmVyOwotICAgIHNldHRpbmdzLndvcmtl
ciA9IHNlcnZlckNvbmZpZ1snd29ya2VyJ107Ci19Ci0KLWZ1bmN0aW9uIG1hcEluT3JkZXIoYXJy
YXksIGNhbGxiYWNrLCBzdGFydEluZGV4KQotewotICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRl
ZmluZWQpCi0gICAgICAgIHN0YXJ0SW5kZXggPSAwOwotICAgIGlmIChzdGFydEluZGV4ID49IGFy
cmF5Lmxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFyIG5leHQgPSBmdW5jdGlvbiAo
KSB7IHJldHVybiBtYXBJbk9yZGVyKGFycmF5LCBjYWxsYmFjaywgc3RhcnRJbmRleCArIDEpOyB9
OwotICAgIHZhciByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKGFycmF5W3N0YXJ0SW5kZXhdKTsKLSAg
ICBpZiAodHlwZW9mKHJldHVyblZhbHVlKSA9PT0gJ29iamVjdCcgJiYgcmV0dXJuVmFsdWUgaW5z
dGFuY2VvZiBQcm9taXNlKQotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudGhlbihuZXh0KS5j
YXRjaChuZXh0KTsKLSAgICByZXR1cm4gbmV4dCgpOwotfQotCi1mdW5jdGlvbiBjb25maWd1cmF0
aW9uc0ZvclRlc3RpbmcobWFuaWZlc3QpCi17Ci0gICAgdmFyIGNvbmZpZ3VyYXRpb25zID0gW107
Ci0gICAgZm9yICh2YXIgbmFtZSBpbiBtYW5pZmVzdC5kYXNoYm9hcmRzKSB7Ci0gICAgICAgIHZh
ciBkYXNoYm9hcmQgPSBtYW5pZmVzdC5kYXNoYm9hcmRzW25hbWVdOwotICAgICAgICBmb3IgKHZh
ciByb3cgb2YgZGFzaGJvYXJkKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBjZWxsIG9mIHJvdykg
ewotICAgICAgICAgICAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSBwYXJzZUludChjZWxsWzBdKTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG1ldHJpY0lkID0gcGFyc2VJbnQoY2VsbFsxXSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaXNOYU4ocGxhdGZvcm1JZCkgJiYgIWlzTmFOKG1ldHJpY0lkKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLnB1c2goe3BsYXRmb3JtSWQ6IHBs
YXRmb3JtSWQsIG1ldHJpY0lkOiBtZXRyaWNJZH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZhciBwbGF0Zm9ybXMgPSBtYW5pZmVz
dC5hbGw7Ci0gICAgZm9yICh2YXIgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb25zKSB7Ci0gICAgICAg
IHZhciBtZXRyaWMgPSBtYW5pZmVzdC5tZXRyaWNzW2NvbmZpZy5tZXRyaWNJZF07Ci0KLSAgICAg
ICAgdmFyIHRlc3RQYXRoID0gW107Ci0gICAgICAgIHZhciBpZCA9IG1ldHJpYy50ZXN0OwotICAg
ICAgICB3aGlsZSAoaWQpIHsKLSAgICAgICAgICAgIHZhciB0ZXN0ID0gbWFuaWZlc3QudGVzdHNb
aWRdOwotICAgICAgICAgICAgdGVzdFBhdGgucHVzaCh0ZXN0Lm5hbWUpOwotICAgICAgICAgICAg
aWQgPSB0ZXN0LnBhcmVudElkOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uZmlnLnVuaXQgPSBS
dW5zRGF0YS51bml0RnJvbU1ldHJpY05hbWUobWV0cmljLm5hbWUpOwotICAgICAgICBjb25maWcu
c21hbGxlcklzQmV0dGVyID0gUnVuc0RhdGEuaXNTbWFsbGVyQmV0dGVyKGNvbmZpZy51bml0KTsK
LSAgICAgICAgY29uZmlnLnBsYXRmb3JtTmFtZSA9IHBsYXRmb3Jtc1tjb25maWcucGxhdGZvcm1J
ZF0ubmFtZTsKLSAgICAgICAgY29uZmlnLnRlc3ROYW1lID0gdGVzdFBhdGgucmV2ZXJzZSgpLmpv
aW4oJyA+ICcpOwotICAgICAgICBjb25maWcuZnVsbFRlc3ROYW1lID0gY29uZmlnLnRlc3ROYW1l
ICsgJzonICsgbWV0cmljLm5hbWU7Ci0gICAgICAgIGNvbmZpZy5yZXBvc2l0b3JpZXMgPSBtYW5p
ZmVzdC5yZXBvc2l0b3JpZXM7Ci0gICAgICAgIGlmIChtZXRyaWMuYWdncmVnYXRvcikKLSAgICAg
ICAgICAgIGNvbmZpZy5mdWxsVGVzdE5hbWUgKz0gJzonICsgbWV0cmljLmFnZ3JlZ2F0b3I7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zOwotfQotCi1mdW5jdGlvbiBhbmFseXpl
Q29uZmlndXJhdGlvbihjb25maWcpCi17Ci0gICAgdmFyIG1pblRpbWUgPSBEYXRlLm5vdygpIC0g
c2V0dGluZ3MubWF4RGF5cyAqIDI0ICogMzYwMCAqIDEwMDA7Ci0KLSAgICBjb25zb2xlLmxvZygn
Jyk7Ci0gICAgY29uc29sZS5sb2coJz09IEFuYWx5emluZyB0aGUgbGFzdCcsIHNldHRpbmdzLm1h
eERheXMsICdkYXlzOicsIGNvbmZpZy5mdWxsVGVzdE5hbWUsICdvbicsIGNvbmZpZy5wbGF0Zm9y
bU5hbWUsICc9PScpOwotCi0gICAgcmV0dXJuIGNvbXB1dGVSYW5nZXNGb3JUZXN0aW5nKHNldHRp
bmdzLnBlcmZzZXJ2ZXIsIHNldHRpbmdzLnN0cmF0ZWdpZXMsIGNvbmZpZy5wbGF0Zm9ybUlkLCBj
b25maWcubWV0cmljSWQpLnRoZW4oZnVuY3Rpb24gKHJhbmdlcykgewotICAgICAgICB2YXIgZmls
dGVyZWRSYW5nZXMgPSByYW5nZXMuZmlsdGVyKGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gcmFu
Z2UuZW5kVGltZSA+PSBtaW5UaW1lICYmICFyYW5nZS5vdmVybGFwcGluZ0FuYWx5c2lzVGFza3Mu
bGVuZ3RoOyB9KQotICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEu
ZW5kVGltZSAtIGIuZW5kVGltZSB9KTsKLQotICAgICAgICB2YXIgc3VtbWFyeTsKLSAgICAgICAg
dmFyIHJhbmdlOwotICAgICAgICBmb3IgKHJhbmdlIG9mIGZpbHRlcmVkUmFuZ2VzKSB7Ci0gICAg
ICAgICAgICB2YXIgc3VtbWFyeSA9IHN1bW1hcml6ZVJhbmdlKGNvbmZpZywgcmFuZ2UpOwotICAg
ICAgICAgICAgY29uc29sZS5sb2coJ0RldGVjdGVkOicsIHN1bW1hcnkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFyYW5nZSkgewotICAgICAgICAgICAgY29uc29sZS5sb2coJ05vdGhpbmcg
dG8gYW5hbHl6ZScpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIGNyZWF0ZUFuYWx5c2lzVGFza0FuZE5vdGlmeShjb25maWcsIHJhbmdlLCBzdW1tYXJ5
KTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gY29tcHV0ZVJhbmdlc0ZvclRlc3Rpbmcoc2VydmVy
LCBzdHJhdGVnaWVzLCBwbGF0Zm9ybUlkLCBtZXRyaWNJZCkKLXsKLSAgICAvLyBGSVhNRTogU3Rv
cmUgdGhlIHNlZ21lbnRhdGlvbiBzdHJhdGVneSBvbiB0aGUgc2VydmVyIHNpZGUuCi0gICAgLy8g
RklYTUU6IENvbmZpZ3VyZSBlYWNoIHN0cmF0ZWd5LgotICAgIHZhciBzZWdtZW50YXRpb25TdHJh
dGVneSA9IGZpbmRTdHJhdGVneUJ5TGFiZWwoU3RhdGlzdGljc1N0cmF0ZWdpZXMuTW92aW5nQXZl
cmFnZVN0cmF0ZWdpZXMsIHN0cmF0ZWdpZXMuc2VnbWVudGF0aW9uLmxhYmVsKTsKLSAgICBpZiAo
IXNlZ21lbnRhdGlvblN0cmF0ZWd5KSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0
byBmaW5kIHRoZSBzZWdtZW50YXRpb24gc3RyYXRlZ3k6ICcgKyBzdHJhdGVnaWVzLnNlZ21lbnRh
dGlvbi5sYWJlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgdGVzdFJhbmdl
U3RyYXRlZ3kgPSBmaW5kU3RyYXRlZ3lCeUxhYmVsKFN0YXRpc3RpY3NTdHJhdGVnaWVzLlRlc3RS
YW5nZVNlbGVjdGlvblN0cmF0ZWdpZXMsIHN0cmF0ZWdpZXMudGVzdFJhbmdlLmxhYmVsKTsKLSAg
ICBpZiAoIXRlc3RSYW5nZVN0cmF0ZWd5KSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxl
ZCB0byBmaW5kIHRoZSB0ZXN0IHJhbmdlIHNlbGVjdGlvbiBzdHJhdGVneTogJyArIHN0cmF0ZWdp
ZXMudGVzdFJhbmdlLmxhYmVsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBj
dXJyZW50UHJvbWlzZSA9IGdldEpTT04oc2VydmVyLCBSdW5zRGF0YS5wYXRoRm9yRmV0Y2hpbmdS
dW5zKHBsYXRmb3JtSWQsIG1ldHJpY0lkKSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAg
ICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAnT0snKQotICAgICAgICAgICAgdGhyb3cgcmVz
cG9uc2U7Ci0gICAgICAgIHJldHVybiBSdW5zRGF0YS5jcmVhdGVSdW5zRGF0YUluUmVzcG9uc2Uo
cmVzcG9uc2UpLmNvbmZpZ3VyYXRpb25zLmN1cnJlbnQ7Ci0gICAgfSwgZnVuY3Rpb24gKHJlYXNv
bikgewotICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggdGhlIG1lYXN1cmVt
ZW50czonLCByZWFzb24pOwotICAgIH0pOwotCi0gICAgdmFyIGFuYWx5c2lzVGFza3NQcm9taXNl
ID0gZ2V0SlNPTihzZXJ2ZXIsICcvYXBpL2FuYWx5c2lzLXRhc2tzP3BsYXRmb3JtPScgKyBwbGF0
Zm9ybUlkICsgJyZtZXRyaWM9JyArIG1ldHJpY0lkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkg
ewotICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9ICdPSycpCi0gICAgICAgICAgICB0aHJv
dyByZXNwb25zZTsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFuYWx5c2lzVGFza3MuZmlsdGVy
KGZ1bmN0aW9uICh0YXNrKSB7IHJldHVybiB0YXNrLnN0YXJ0UnVuICYmIHRhc2suZW5kUnVuOyB9
KTsKLSAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Zh
aWxlZCB0byBmZXRjaCB0aGUgYW5hbHlzaXMgdGFza3M6JywgcmVhc29uKTsKLSAgICB9KTsKLQot
ICAgIHJldHVybiBQcm9taXNlLmFsbChbY3VycmVudFByb21pc2UsIGFuYWx5c2lzVGFza3NQcm9t
aXNlXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykgewotICAgICAgICB2YXIgY3VycmVudFRpbWVT
ZXJpZXMgPSByZXN1bHRzWzBdLnRpbWVTZXJpZXNCeUNvbW1pdFRpbWUoKTsKLSAgICAgICAgdmFy
IGFuYWx5c2lzVGFza3MgPSByZXN1bHRzWzFdOwotICAgICAgICB2YXIgcmF3VmFsdWVzID0gY3Vy
cmVudFRpbWVTZXJpZXMucmF3VmFsdWVzKCk7Ci0gICAgICAgIHZhciBzZWdtZW50ZWRWYWx1ZXMg
PSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5leGVjdXRlU3RyYXRlZ3koc2VnbWVudGF0aW9uU3RyYXRl
Z3ksIHJhd1ZhbHVlcyk7Ci0KLSAgICAgICAgdmFyIHJhbmdlcyA9IFN0YXRpc3RpY3NTdHJhdGVn
aWVzLmV4ZWN1dGVTdHJhdGVneSh0ZXN0UmFuZ2VTdHJhdGVneSwgcmF3VmFsdWVzLCBbc2VnbWVu
dGVkVmFsdWVzXSkubWFwKGZ1bmN0aW9uIChyYW5nZSkgewotICAgICAgICAgICAgdmFyIHN0YXJ0
UG9pbnQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeUluZGV4KHJhbmdlWzBdKTsKLSAg
ICAgICAgICAgIHZhciBlbmRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5SW5k
ZXgocmFuZ2VbMV0pOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBzdGFy
dEluZGV4OiByYW5nZVswXSwKLSAgICAgICAgICAgICAgICBlbmRJbmRleDogcmFuZ2VbMV0sCi0g
ICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdBbmFseXNpc1Rhc2tzOiBbXSwKLSAgICAgICAgICAg
ICAgICBzdGFydFRpbWU6IHN0YXJ0UG9pbnQudGltZSwKLSAgICAgICAgICAgICAgICBlbmRUaW1l
OiBlbmRQb2ludC50aW1lLAotICAgICAgICAgICAgICAgIHJlbGF0aXZlQ2hhbmdlSW5TZWdtZW50
ZWRWYWx1ZXM6IChzZWdtZW50ZWRWYWx1ZXNbcmFuZ2VbMV1dIC0gc2VnbWVudGVkVmFsdWVzW3Jh
bmdlWzBdXSkgLyBzZWdtZW50ZWRWYWx1ZXNbcmFuZ2VbMF1dLAotICAgICAgICAgICAgICAgIHN0
YXJ0TWVhc3VyZW1lbnQ6IHN0YXJ0UG9pbnQubWVhc3VyZW1lbnQsCi0gICAgICAgICAgICAgICAg
ZW5kTWVhc3VyZW1lbnQ6IGVuZFBvaW50Lm1lYXN1cmVtZW50LAotICAgICAgICAgICAgfTsKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgZm9yICh2YXIgdGFzayBvZiBhbmFseXNpc1Rhc2tzKSB7Ci0g
ICAgICAgICAgICB2YXIgdGFza1N0YXJ0UG9pbnQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kUG9p
bnRCeU1lYXN1cmVtZW50SWQodGFzay5zdGFydFJ1bik7Ci0gICAgICAgICAgICB2YXIgdGFza0Vu
ZFBvaW50ID0gY3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlNZWFzdXJlbWVudElkKHRhc2su
ZW5kUnVuKTsKLSAgICAgICAgICAgIGZvciAodmFyIHJhbmdlIG9mIHJhbmdlcykgewotICAgICAg
ICAgICAgICAgIHZhciBkaXNqb2ludCA9IHJhbmdlLmVuZEluZGV4IDwgdGFza1N0YXJ0UG9pbnQu
c2VyaWVzSW5kZXgKLSAgICAgICAgICAgICAgICAgICAgfHwgdGFza0VuZFBvaW50LnNlcmllc0lu
ZGV4IDwgcmFuZ2Uuc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICBpZiAoIWRpc2pvaW50KQot
ICAgICAgICAgICAgICAgICAgICByYW5nZS5vdmVybGFwcGluZ0FuYWx5c2lzVGFza3MucHVzaCh0
YXNrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByYW5nZXM7
Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUFuYWx5c2lzVGFza0FuZE5vdGlmeShjb25m
aWcsIHJhbmdlLCBzdW1tYXJ5KQotewotICAgIHZhciBzZWdtZW50YXRpb25TdHJhdGVneSA9IHNl
dHRpbmdzLnN0cmF0ZWdpZXMuc2VnbWVudGF0aW9uLmxhYmVsOwotICAgIHZhciB0ZXN0UmFuZ2VT
dHJhdGVneSA9IHNldHRpbmdzLnN0cmF0ZWdpZXMudGVzdFJhbmdlLmxhYmVsOwotCi0gICAgdmFy
IGFuYWx5c2lzVGFza0RhdGEgPSB7Ci0gICAgICAgIG5hbWU6IHN1bW1hcnksCi0gICAgICAgIHN0
YXJ0UnVuOiByYW5nZS5zdGFydE1lYXN1cmVtZW50LmlkKCksCi0gICAgICAgIGVuZFJ1bjogcmFu
Z2UuZW5kTWVhc3VyZW1lbnQuaWQoKSwKLSAgICAgICAgc2VnbWVudGF0aW9uU3RyYXRlZ3k6IHNl
Z21lbnRhdGlvblN0cmF0ZWd5LAotICAgICAgICB0ZXN0UmFuZ2VTdHJhdGVneTogdGVzdFJhbmdl
U3RyYXRlZ3ksCi0KLSAgICAgICAgd29ya2VyTmFtZTogc2V0dGluZ3Mud29ya2VyLm5hbWUsCi0g
ICAgICAgIHdvcmtlclBhc3N3b3JkOiBzZXR0aW5ncy53b3JrZXIucGFzc3dvcmQsCi0gICAgfTsK
LQotICAgIHJldHVybiBwb3N0SlNPTihzZXR0aW5ncy5wZXJmc2VydmVyLCAnL3ByaXZpbGVnZWQt
YXBpL2NyZWF0ZS1hbmFseXNpcy10YXNrJywgYW5hbHlzaXNUYXNrRGF0YSkudGhlbihmdW5jdGlv
biAocmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKHJlc3BvbnNlWydzdGF0dXMnXSAhPSAnT0snKQot
ICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7Ci0KLSAgICAgICAgdmFyIGFuYWx5c2lzVGFza0lk
ID0gcmVzcG9uc2VbJ3Rhc2tJZCddOwotCi0gICAgICAgIHZhciB0aXRsZSA9ICdbJyArIGNvbmZp
Zy50ZXN0TmFtZSArICddWycgKyBjb25maWcucGxhdGZvcm1OYW1lICsgJ10gJyArIHN1bW1hcnk7
Ci0gICAgICAgIHZhciBhbmFseXNpc1Rhc2tVUkwgPSBzZXR0aW5ncy5wZXJmc2VydmVyLnNjaGVt
ZSArICc6Ly8nICsgc2V0dGluZ3MucGVyZnNlcnZlci5ob3N0ICsgJy92Mi8jL2FuYWx5c2lzL3Rh
c2svJyArIGFuYWx5c2lzVGFza0lkOwotICAgICAgICB2YXIgY2hhbmdlVHlwZSA9IGNoYW5nZVR5
cGVGb3JSYW5nZShjb25maWcsIHJhbmdlKTsKLSAgICAgICAgLy8gRklYTUU6IFRlbXBsYXRpemUg
dGhpcy4KLSAgICAgICAgdmFyIG1lc3NhZ2UgPSAnPGI+JyArIHNldHRpbmdzLm5vdGlmaWNhdGlv
bi5zZXJ2aWNlTmFtZSArICc8L2I+IGRldGVjdGVkIGEgcG90ZW50aWFsICcgKyBjaGFuZ2VUeXBl
ICsgJzo8YnI+PGJyPicKLSAgICAgICAgICAgICsgJzx0YWJsZSBib3JkZXI9MT48Y2FwdGlvbj4n
ICsgc3VtbWFyeSArICc8L2NhcHRpb24+PHRib2R5PicKLSAgICAgICAgICAgICsgJzx0cj48dGg+
VGVzdDwvdGg+PHRkPicgKyBjb25maWcuZnVsbFRlc3ROYW1lICsgJzwvdGQ+PC90cj4nCi0gICAg
ICAgICAgICArICc8dHI+PHRoPlBsYXRmb3JtPC90aD48dGQ+JyArIGNvbmZpZy5wbGF0Zm9ybU5h
bWUgKyAnPC90ZD48L3RyPicKLSAgICAgICAgICAgICsgJzx0cj48dGg+QWxnb3JpdGhtPC90aD48
dGQ+JyArIHNlZ21lbnRhdGlvblN0cmF0ZWd5ICsgJzxicj4nICsgdGVzdFJhbmdlU3RyYXRlZ3kg
KyAnPC90ZD48L3RyPicKLSAgICAgICAgICAgICsgJzwvdGFibGU+PGJyPicKLSAgICAgICAgICAg
ICsgJzxhIGhyZWY9IicgKyBhbmFseXNpc1Rhc2tVUkwgKyAnIj5PcGVuIHRoZSBhbmFseXNpcyB0
YXNrPC9hPic7Ci0KLSAgICAgICAgcmV0dXJuIGdldEpTT04oc2V0dGluZ3MucGVyZnNlcnZlciwg
Jy9hcGkvdHJpZ2dlcmFibGVzP3Rhc2s9JyArIGFuYWx5c2lzVGFza0lkKS50aGVuKGZ1bmN0aW9u
IChyZXNwb25zZSkgewotICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlc3BvbnNlWydzdGF0dXMn
XTsKLSAgICAgICAgICAgIHZhciB0cmlnZ2VyYWJsZXMgPSByZXNwb25zZVsndHJpZ2dlcmFibGVz
J10gfHwgW107Ci0gICAgICAgICAgICBpZiAoc3RhdHVzID09ICdUcmlnZ2VyYWJsZU5vdEZvdW5k
Rm9yVGFzaycgfHwgdHJpZ2dlcmFibGVzLmxlbmd0aCAhPSAxKSB7Ci0gICAgICAgICAgICAgICAg
bWVzc2FnZSArPSAnIChBL0IgdGVzdGluZyB3YXMgbm90IGF2YWlsYWJsZSknOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0g
J09LJykKLSAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTsKLQotICAgICAgICAgICAgdmFy
IHRyaWdnZXJhYmxlID0gcmVzcG9uc2VbJ3RyaWdnZXJhYmxlcyddWzBdOwotICAgICAgICAgICAg
dmFyIGNvbW1pdFNldHMgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBv
ZiB0cmlnZ2VyYWJsZVsnYWNjZXB0ZWRSZXBvc2l0b3JpZXMnXSkgewotICAgICAgICAgICAgICAg
IHZhciBzdGFydFJldmlzaW9uID0gcmFuZ2Uuc3RhcnRNZWFzdXJlbWVudC5yZXZpc2lvbkZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeUlkKTsKLSAgICAgICAgICAgICAgICB2YXIgZW5kUmV2aXNpb24g
PSByYW5nZS5lbmRNZWFzdXJlbWVudC5yZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeUlk
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRSZXZpc2lvbiA9PSBudWxsIHx8IGVuZFJldmlz
aW9uID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGNvbW1pdFNldHNbY29uZmlnLnJlcG9zaXRvcmllc1tyZXBvc2l0b3J5SWRdLm5hbWVdID0g
W3N0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIHRlc3REYXRhID0gewotICAgICAgICAgICAgICAgIHRhc2s6IGFuYWx5c2lzVGFza0lk
LAotICAgICAgICAgICAgICAgIG5hbWU6ICdDb25maXJtaW5nIHRoZSAnICsgY2hhbmdlVHlwZSwK
LSAgICAgICAgICAgICAgICBjb21taXRTZXRzOiBjb21taXRTZXRzLAotICAgICAgICAgICAgICAg
IHJlcGV0aXRpb25Db3VudDogTWF0aC5tYXgoMiwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcigocmFu
Z2UuZW5kSW5kZXggLSByYW5nZS5zdGFydEluZGV4KSAvIDQpKSksCi0KLSAgICAgICAgICAgICAg
ICB3b3JrZXJOYW1lOiBzZXR0aW5ncy53b3JrZXIubmFtZSwKLSAgICAgICAgICAgICAgICB3b3Jr
ZXJQYXNzd29yZDogc2V0dGluZ3Mud29ya2VyLnBhc3N3b3JkLAotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgcmV0dXJuIHBvc3RKU09OKHNldHRpbmdzLnBlcmZzZXJ2ZXIsICcvcHJpdmls
ZWdlZC1hcGkvY3JlYXRlLXRlc3QtZ3JvdXAnLCB0ZXN0RGF0YSkudGhlbihmdW5jdGlvbiAocmVz
cG9uc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddICE9ICdPSycp
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlOwotICAgICAgICAgICAgICAgIG1l
c3NhZ2UgKz0gJyAodHJpZ2dlcmVkIGFuIEEvQiB0ZXN0aW5nKSc7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewotICAgICAgICAgICAgY29uc29s
ZS5lcnJvcihyZWFzb24pOwotICAgICAgICAgICAgbWVzc2FnZSArPSAnIChmYWlsZWQgdG8gY3Jl
YXRlIGEgbmV3IEEvQiB0ZXN0aW5nKSc7Ci0gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHBvc3ROb3RpZmljYXRpb24oc2V0dGluZ3Mubm90aWZpY2F0aW9u
LnNlcnZlciwgc2V0dGluZ3Mubm90aWZpY2F0aW9uLnRlbXBsYXRlLCB0aXRsZSwgbWVzc2FnZSku
dGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgU2VudCBh
IG5vdGlmaWNhdGlvbicpOwotICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewotICAg
ICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJyAgRmFpbGVkIHRvIHNlbmQgYSBub3RpZmljYXRp
b24nLCByZWFzb24pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pLmNhdGNo
KGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgY29uc29sZS5lcnJvcignICBGYWlsZWQgdG8g
Y3JlYXRlIGFuIGFuYWx5c2lzIHRhc2snLCByZWFzb24pOwotICAgIH0pOwotfQotCi1mdW5jdGlv
biBmaW5kU3RyYXRlZ3lCeUxhYmVsKGxpc3QsIGxhYmVsKQotewotICAgIGZvciAodmFyIHN0cmF0
ZWd5IG9mIGxpc3QpIHsKLSAgICAgICAgaWYgKHN0cmF0ZWd5LmxhYmVsID09IGxhYmVsKQotICAg
ICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLX0KLQot
ZnVuY3Rpb24gY2hhbmdlVHlwZUZvclJhbmdlKGNvbmZpZywgcmFuZ2UpCi17Ci0gICAgdmFyIGVu
ZFZhbHVlSXNMYXJnZXIgPSByYW5nZS5yZWxhdGl2ZUNoYW5nZUluU2VnbWVudGVkVmFsdWVzID4g
MDsKLSAgICByZXR1cm4gZW5kVmFsdWVJc0xhcmdlciA9PSBjb25maWcuc21hbGxlcklzQmV0dGVy
ID8gJ3JlZ3Jlc3Npb24nIDogJ3Byb2dyZXNzaW9uJzsKLX0KLQotZnVuY3Rpb24gc3VtbWFyaXpl
UmFuZ2UoY29uZmlnLCByYW5nZSkKLXsKLSAgICByZXR1cm4gJ1BvdGVudGlhbCAnICsgTWF0aC5h
YnMocmFuZ2UucmVsYXRpdmVDaGFuZ2VJblNlZ21lbnRlZFZhbHVlcyAqIDEwMCkudG9QcmVjaXNp
b24oMikgKyAnJSAnCi0gICAgICAgICsgY2hhbmdlVHlwZUZvclJhbmdlKGNvbmZpZywgcmFuZ2Up
ICsgJyBiZXR3ZWVuICcgKyBmb3JtYXRUaW1lUmFuZ2UocmFuZ2Uuc3RhcnRUaW1lLCByYW5nZS5l
bmRUaW1lKTsKLX0KLQotZnVuY3Rpb24gZm9ybWF0VGltZVJhbmdlKHN0YXJ0LCBlbmQpCi17Ci0g
ICAgdmFyIGZvcm1hdHRlciA9IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLnRvSVNPU3Ry
aW5nKCkucmVwbGFjZSgnVCcsICcgJykucmVwbGFjZSgvOlxkezJ9XC5cZCtaJC8sICcnKTsgfQot
ICAgIHZhciBmb3JtYXR0ZWRTdGFydCA9IGZvcm1hdHRlcihzdGFydCk7Ci0gICAgdmFyIGZvcm1h
dHRlZEVuZCA9IGZvcm1hdHRlcihlbmQpOwotICAgIGlmIChzdGFydC50b0RhdGVTdHJpbmcoKSA9
PSBlbmQudG9EYXRlU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdGFydCArICcg
YW5kICcgKyBmb3JtYXR0ZWRFbmQuc3Vic3RyaW5nKGZvcm1hdHRlZEVuZC5pbmRleE9mKCcgJykg
KyAxKTsKLSAgICBpZiAoc3RhcnQuZ2V0RnVsbFllYXIoKSA9PSBlbmQuZ2V0RnVsbFllYXIoKSkK
LSAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFN0YXJ0ICsgJyBhbmQgJyArIGZvcm1hdHRlZEVuZC5z
dWJzdHJpbmcoNSk7Ci0gICAgcmV0dXJuIGZvcm1hdHRlZFN0YXJ0ICsgJyBhbmQgJyArIGZvcm1h
dHRlZEVuZDsKLX0KLQotZnVuY3Rpb24gZ2V0SlNPTihzZXJ2ZXIsIHBhdGgsIGRhdGEpCi17Ci0g
ICAgcmV0dXJuIGZldGNoSlNPTihzZXJ2ZXIuc2NoZW1lLCB7Ci0gICAgICAgICdob3N0bmFtZSc6
IHNlcnZlci5ob3N0LAotICAgICAgICAncG9ydCc6IHNlcnZlci5wb3J0LAotICAgICAgICAnYXV0
aCc6IHNlcnZlci5hdXRoLAotICAgICAgICAncGF0aCc6IHBhdGgsCi0gICAgICAgICdtZXRob2Qn
OiAnR0VUJywKLSAgICB9LCAnYXBwbGljYXRpb24vanNvbicpOwotfQotCi1mdW5jdGlvbiBwb3N0
SlNPTihzZXJ2ZXIsIHBhdGgsIGRhdGEpCi17Ci0gICAgcmV0dXJuIGZldGNoSlNPTihzZXJ2ZXIu
c2NoZW1lLCB7Ci0gICAgICAgICdob3N0bmFtZSc6IHNlcnZlci5ob3N0LAotICAgICAgICAncG9y
dCc6IHNlcnZlci5wb3J0LAotICAgICAgICAnYXV0aCc6IHNlcnZlci5hdXRoLAotICAgICAgICAn
cGF0aCc6IHBhdGgsCi0gICAgICAgICdtZXRob2QnOiAnUE9TVCcsCi0gICAgfSwgJ2FwcGxpY2F0
aW9uL2pzb24nLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7Ci19Ci0KLWZ1bmN0aW9uIHBvc3ROb3Rp
ZmljYXRpb24oc2VydmVyLCB0ZW1wbGF0ZSwgdGl0bGUsIG1lc3NhZ2UpCi17Ci0gICAgdmFyIG5v
dGlmaWNhdGlvbiA9IGluc3RhbnRpYXRlTm90aWZpY2F0aW9uVGVtcGxhdGUodGVtcGxhdGUsIHRp
dGxlLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZmV0Y2hKU09OKHNlcnZlci5zY2hlbWUsIHsKLSAg
ICAgICAgJ2hvc3RuYW1lJzogc2VydmVyLmhvc3QsCi0gICAgICAgICdwb3J0Jzogc2VydmVyLnBv
cnQsCi0gICAgICAgICdhdXRoJzogc2VydmVyLmF1dGgsCi0gICAgICAgICdwYXRoJzogc2VydmVy
LnBhdGgsCi0gICAgICAgICdtZXRob2QnOiBzZXJ2ZXIubWV0aG9kLAotICAgIH0sICdhcHBsaWNh
dGlvbi9qc29uJywgSlNPTi5zdHJpbmdpZnkobm90aWZpY2F0aW9uKSk7Ci19Ci0KLWZ1bmN0aW9u
IGluc3RhbnRpYXRlTm90aWZpY2F0aW9uVGVtcGxhdGUodGVtcGxhdGUsIHRpdGxlLCBtZXNzYWdl
KQotewotICAgIHZhciBpbnN0YW5jZSA9IHt9OwotICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxh
dGUpIHsKLSAgICAgICAgdmFyIHZhbHVlID0gdGVtcGxhdGVbbmFtZV07Ci0gICAgICAgIGlmICh0
eXBlb2YodmFsdWUpID09PSAnc3RyaW5nJykKLSAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0g
dmFsdWUucmVwbGFjZSgvXCR0aXRsZS9nLCB0aXRsZSkucmVwbGFjZSgvXCRtZXNzYWdlL2csIG1l
c3NhZ2UpOwotICAgICAgICBlbHNlIGlmICh0eXBlb2YodGVtcGxhdGVbbmFtZV0pID09PSAnb2Jq
ZWN0JykKLSAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gaW5zdGFudGlhdGVOb3RpZmljYXRp
b25UZW1wbGF0ZSh2YWx1ZSwgdGl0bGUsIG1lc3NhZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBpbnN0YW5jZVtuYW1lXSA9IHZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7
Ci19Ci0KLWZ1bmN0aW9uIGZldGNoSlNPTihzY2hlbWVOYW1lLCBvcHRpb25zLCBjb250ZW50VHlw
ZSwgY29udGVudCkgewotICAgIHZhciByZXF1ZXN0ZXIgPSBzY2hlbWVOYW1lID09ICdodHRwcycg
PyBodHRwcyA6IGh0dHA7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZl
LCByZWplY3QpIHsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSByZXF1ZXN0ZXIucmVxdWVzdChvcHRp
b25zLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAgICAgICAgICAgIHZhciByZXNwb25zZVRleHQg
PSAnJzsKLSAgICAgICAgICAgIHJlc3BvbnNlLnNldEVuY29kaW5nKCd1dGY4Jyk7Ci0gICAgICAg
ICAgICByZXNwb25zZS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyByZXNwb25zZVRleHQg
Kz0gY2h1bms7IH0pOwotICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsIGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9
IEpTT04ucGFyc2UocmVzcG9uc2VUZXh0KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJv
cikgewotICAgICAgICAgICAgICAgICAgICByZWplY3Qoe2Vycm9yOiBlcnJvciwgcmVzcG9uc2VU
ZXh0OiByZXNwb25zZVRleHR9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmVzb2x2ZShqc29uKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICAgICAgcmVx
dWVzdC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfSk7Ci0g
ICAgICAgIGlmIChjb250ZW50VHlwZSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdD
b250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7Ci0gICAgICAgIGlmIChjb250ZW50KQotICAgICAg
ICAgICAgcmVxdWVzdC53cml0ZShjb250ZW50KTsKLSAgICAgICAgcmVxdWVzdC5lbmQoKTsKLSAg
ICB9KTsKLX0KLQotbWFpbihwcm9jZXNzLmFyZ3YpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423995</attachid>
            <date>2021-03-23 01:16:18 -0700</date>
            <delta_ts>2021-03-23 15:37:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223617-20210323011617.patch</filename>
            <type>text/plain</type>
            <size>3926398</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0ODAwCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAzOTllZmNlZmExMjQxMGZiOWQxZTE4NGU0ZjQyODVhMGQ1ZjNhNmUzLi45MmNkNTg0MWY1
ODIwY2YyOGFlNWM2MzY1MmQ0OWEzNjc0ZjJkNTFjIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAyMS0wMy0yMiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZiBkYXNoYm9hcmRdIFJlbW92ZSB2MSBhbmQgdjIg
Y29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzYxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSB2MSBhbmQgdjIgY29kZSBmcm9tIHBlcmYgZGFzaGJvYXJkLgorICAgICAgICBSZW1vdmUg
ZGV0ZWN0LWNoYW5nZXMuanMgc2NyaXB0IHNpbmNlIHJ1bi1hbmFseXNpcy5qcyBpcyB0aGUgdjMg
dmVyc2lvbiBlcXVpdmFsZW50LgorCisgICAgICAgICogcHVibGljL2luZGV4Lmh0bWw6IEtlZXAg
dGhlIHJlZGlyZWN0aW9uIHRvIHYzLgorICAgICAgICAqIHB1YmxpYy9qcy9oZWxwZXItY2xhc3Nl
cy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmNvbG9yaGVscGVycy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5lcnJvcmJhcnMuanM6
IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LmZpbGxiZXR3ZWVuLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBwdWJsaWMvanMvanF1ZXJ5LmZsb3QubmF2aWdhdGUuanM6IFJlbW92ZWQuCisg
ICAgICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LnBsdWdpbnMuanM6IFJlbW92ZWQuCisgICAg
ICAgICogcHVibGljL2pzL2pxdWVyeS5mbG90LnJlc2l6ZS5qczogUmVtb3ZlZC4KKyAgICAgICAg
KiBwdWJsaWMvanMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9uLmpzOiBSZW1vdmVkLgorICAgICAgICAq
IHB1YmxpYy9qcy9qcXVlcnkuZmxvdC5zdGFjay5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJs
aWMvanMvanF1ZXJ5LmZsb3Quc3ltYm9sLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9q
cy9qcXVlcnkuZmxvdC50aHJlc2hvbGQuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pz
L2pxdWVyeS5mbG90LnRpbWUuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL2pzL2pxdWVy
eS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvYW5hbHlzaXMuanM6IFJlbW92ZWQu
CisgICAgICAgICogcHVibGljL3YyL2FwcC5jc3M6IFJlbW92ZWQuCisgICAgICAgICogcHVibGlj
L3YyL2FwcC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvY2hhcnQtcGFuZS5jc3M6
IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL3YyL2NvbW1pdHMtdmlld2VyLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIHB1YmxpYy92Mi9kYXRhLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1Ymxp
Yy92Mi9pbmRleC5odG1sOiBLZWVwIHRoZSByZWRpcmVjdGlvbiB0byB2My4KKyAgICAgICAgKiBw
dWJsaWMvdjIvaW50ZXJhY3RpdmUtY2hhcnQuanM6IFJlbW92ZWQuCisgICAgICAgICogcHVibGlj
L3YyL2pzL2QzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogcHVibGljL3YyL2pzL2QzL2Qz
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9qcy9kMy9kMy5taW4uanM6IFJlbW92
ZWQuCisgICAgICAgICogcHVibGljL3YyL2pzL2VtYmVyLWRhdGEuanM6IFJlbW92ZWQuCisgICAg
ICAgICogcHVibGljL3YyL2pzL2VtYmVyLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92
Mi9qcy9oYW5kbGViYXJzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9qcy9qcXVl
cnkubWluLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy92Mi9tYW5pZmVzdC5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBwdWJsaWMvdjIvcG9wdXAuanM6IFJlbW92ZWQuCisgICAgICAgICog
cHVibGljL3YyL3N0YXRpc3RpY3Mtc3RyYXRlZ2llcy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiB0
b29scy9kZXRlY3QtY2hhbmdlcy5qczogUmVtb3ZlZC4KKwogMjAyMS0wMy0yMSAgRGV3ZWkgWmh1
ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBbcGVyZiBkYXNoYm9hcmRdIFJlbW92
ZSBub24taW5jbHVzaXZlIHdvcmRzIGZyb20gcGVyZiBkYXNoYm9hcmQuCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2luZGV4Lmh0bWwKaW5kZXggNTBjNTU2Yjk1Y2QzNGJlNDc0NWVl
MWVlODNkZWRhMjNjMTc4NWFiZC4uN2M0MTQ5MTZiODQxYTQ2Y2RlMjUwMGE3MWUxYzIxOTJkMzc1
MzQ1MiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmRleC5o
dG1sCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5kZXguaHRtbApAQCAt
NywxMjc3ICs3LDkgQEAKIGlmIChsb2NhdGlvbi5oYXNoLmluZGV4T2YoJyNtb2RlPWRhc2hib2Fy
ZCcpID49IDAgfHwgIWxvY2F0aW9uLmhhc2ggfHwgbG9jYXRpb24uaGFzaCA9PSAnIycpCiAgICAg
bG9jYXRpb24uaHJlZiA9ICcvdjMvJzsKIAotPC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1
ZXJ5LmpzIiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5qcyIg
ZGVmZXI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpz
IiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vl
bi5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ianMvanF1ZXJ5LmZsb3QucmVzaXpl
LmpzIiBkZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnkuZmxvdC5zZWxlY3Rp
b24uanMiIGRlZmVyPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5mbG90LnRpbWUu
anMiIGRlZmVyPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImpzL2hlbHBlci1jbGFzc2VzLmpzIiBk
ZWZlcj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzaGFyZWQvc3RhdGlzdGljcy5qcyIgZGVmZXI+
PC9zY3JpcHQ+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNvbW1vbi5jc3MiPgotPHN0
eWxlIHR5cGU9InRleHQvY3NzIj4KLQotI251bWJlck9mRGF5c1BpY2tlciB7Ci0gICAgY29sb3I6
ICM2NjY7Ci19Ci0KLSNudW1iZXJPZkRheXNQaWNrZXIgaW5wdXQgewotICAgIGhlaWdodDogMC45
ZW07Ci0gICAgbWFyZ2luLXJpZ2h0OiAxZW07Ci19Ci0KLXRkLCB0aCB7Ci0gICAgYm9yZGVyOiBu
b25lOwotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgcGFkZGluZy10b3A6IDAu
NWVtOwotfQotCi0jZGFzaGJvYXJkID4gdGJvZHkgPiB0ciA+IHRkIHsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogdG9wOwotfQotCi0jZGFzaGJvYXJkID4gdGhlYWQgdGggewotICAgIHRleHQtc2hhZG93
OiAjYmJiIDFweCAxcHggMnB4OwotICAgIGZvbnQtc2l6ZTogbGFyZ2U7Ci0gICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKLX0KLQotLmNoYXJ0IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAg
Ym9yZGVyOiBzb2xpZCAxcHggI2NjYzsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgbWFy
Z2luOiAwcHggMHB4IDEwcHggMHB4OwotfQotCi0uY2hhcnQud29yc2UgewotICAgIGJhY2tncm91
bmQ6ICNmY2M7Ci19Ci0KLS5jaGFydC5iZXR0ZXIgewotICAgIGJhY2tncm91bmQ6ICNjZmM7Ci19
Ci0KLSNjaGFydHMgLnBhbmUgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAx
MHB4OwotICAgIHRvcDogMTBweDsKLSAgICB3aWR0aDogMjMwcHg7Ci19Ci0KLS5jaGFydCBoZWFk
ZXIgewotICAgIGhlaWdodDogM2VtOwotICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7Ci0gICAgdmVy
dGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQotI2Rhc2hib2FyZCBoZWFkZXIgewotICAgIHBhZGRp
bmc6IDBweCAxMHB4OwotfQotCi0uY2hhcnQgaDIsIC5jaGFydCBoMyB7Ci0gICAgbWFyZ2luOiAw
IDAgMC4zZW0gMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGZvbnQtc2l6ZTogMWVtOwotICAgIGZv
bnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgd29yZC1icmVhazogYnJlYWstYWxsOwotfQotCi0uY2hh
cnQgaDIgewotICAgIGZvbnQtc2l6ZTogbm9ybWFsOwotfQotCi0uY2hhcnQgaDMgewotICAgIGZv
bnQtc2l6ZTogbm9ybWFsOwotfQotCi0jZGFzaGJvYXJkIC5jaGFydCBoMyB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotI2Rhc2hib2FyZCAuY2hhcnQgLnN0YXR1cyB7Ci0gICAgbWFyZ2luOiAw
cHggMTBweDsKLX0KLQotLmNoYXJ0IC5zdGF0dXMgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0g
ICAgY29sb3I6ICM2NjY7Ci19Ci0KLS5wbG90IHsKLSAgICBtYXJnaW46IDVweCA1cHggMTBweCA1
cHg7Ci19Ci0KLS5jbG9zZUJ1dHRvbiBzdmcgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICBsZWZ0OiA4cHg7Ci0gICAgYm90dG9tOiA4cHg7Ci0gICAgd2lkdGg6IDE1cHg7Ci0gICAgaGVp
Z2h0OiAxNXB4OwotfQotCi0jZGFzaGJvYXJkIC5jaGFydCB7Ci0gICAgd2lkdGg6IDQxMHB4Owot
fQotCi0jZGFzaGJvYXJkIC5wbG90IHsKLSAgICB3aWR0aDogNDAwcHg7Ci0gICAgaGVpZ2h0OiAx
MDBweDsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgY3Vyc29yOiBoYW5kOwotfQotCi0jY2hh
cnRzIC5wbG90IHsKLSAgICBoZWlnaHQ6IDMyMHB4OwotICAgIG1hcmdpbi1sZWZ0OiAyNTBweDsK
LX0KLQotI2Rhc2hib2FyZCAub3ZlcnZpZXdQbG90IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQot
Ci0jY2hhcnRzIC5vdmVydmlld1Bsb3QgewotICAgIG1hcmdpbjogMTBweCAwcHggMHB4IDBweDsK
LSAgICBwYWRkaW5nOiAwOwotICAgIGhlaWdodDogNzBweDsKLX0KLQotLmNoYXJ0IC5zdW1tYXJ5
VGFibGUgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0gICAgY29sb3I6ICM2NjY7Ci0gICAgYm9y
ZGVyOiAwOwotfQotCi0uY2hhcnQgLm1ldGEgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0K
LQotLmNoYXJ0IC5tZXRhIHRhYmxlLAotLmNoYXJ0IC5tZXRhIHRkLAotLnRvb2x0aXAgdGFibGUs
Ci0udG9vbHRpcCB0ZCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5j
aGFydCAubWV0YSB0aCwKLS50b29sdGlwIHRoIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGlu
ZzogMCAwLjJlbSAwIDA7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKLX0KLQotLmNoYXJ0IC5tZXRhIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOmJlZm9yZSwK
LS50b29sdGlwIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOmJlZm9yZSB7Ci0gICAgY29udGVudDogIjog
IjsKLX0KLQotI2Rhc2hib2FyZCAuY2hhcnQgLnN1bW1hcnlUYWJsZSB7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHJpZ2h0OiAxMHB4OwotICAgIHRvcDogMHB4OwotfQotCi0jY2hhcnRz
IC5zdW1tYXJ5VGFibGUgewotICAgIG1hcmdpbi10b3A6IDAuM2VtOwotfQotCi0jZGFzaGJvYXJk
IC5hcnJvdyB7Ci0gICAgd2lkdGg6IDIwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICBib3R0b206IDUwcHg7Ci0gICAgbGVmdDogNXB4OwotfQotCi0j
Y2hhcnRzIC5hcnJvdyB7Ci0gICAgd2lkdGg6IDIwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEwcHg7Ci0gICAgbGVmdDogMjQwcHg7Ci19
Ci0KLS5jaGFydCBzdmcgewotICAgIHN0cm9rZTogI2NjYzsKLSAgICBmaWxsOiAjY2NjOwotICAg
IGNvbG9yOiAjY2NjOwotfQotCi0uY2hhcnQud29yc2Ugc3ZnIHsKLSAgICBzdHJva2U6ICNjOTk7
Ci0gICAgZmlsbDogI2M5OTsKLSAgICBjb2xvcjogI2M5OTsKLX0KLQotLmNoYXJ0LmJldHRlciBz
dmcgewotICAgIHN0cm9rZTogIzljOTsKLSAgICBmaWxsOiAjOWM5OwotICAgIGNvbG9yOiAjOWM5
OwotfQotCi0uY2hhcnQgLnlheGlzdG9nZ2xlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGJvdHRvbTogMTBweDsKLSAgICBsZWZ0OiAyMjVweDsKLSAgICB3aWR0aDogMTBweDsKLSAg
ICBoZWlnaHQ6IDI1cHg7Ci19Ci0KLSNkYXNoYm9hcmQgIC55YXhpc3RvZ2dsZXIgewotICAgIGRp
c3BsYXk6IG5vbmU7Ci19Ci0KLS50b29sdGlwIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
ICAgYm9yZGVyLXJhZGl1czogNXB4OwotICAgIHBhZGRpbmc6IDVweDsKLSAgICBvcGFjaXR5OiAw
Ljg7Ci0gICAgYmFja2dyb3VuZDogIzMzMzsKLSAgICBjb2xvcjogI2VlZTsKLSAgICBmb250LXNp
emU6IHNtYWxsOwotICAgIGxpbmUtaGVpZ2h0OiAxMzAlOwotICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7Ci19Ci0KLS50b29sdGlwOmJlZm9yZSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAg
IHdpZHRoOiAwOwotICAgIGhlaWdodDogMDsKLSAgICBsZWZ0OiA1MCU7Ci0gICAgbWFyZ2luLWxl
ZnQ6IC05cHg7Ci0gICAgdG9wOiAtMTlweDsKLSAgICBjb250ZW50OiAiIjsKLSAgICBkaXNwbGF5
OiBub25lOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAxMHB4
OwotICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzMzMyB0cmFuc3Bh
cmVudDsKLX0KLQotLnRvb2x0aXAuaW52ZXJ0ZWQ6YmVmb3JlIHsKLSAgICBkaXNwbGF5OiBibG9j
azsKLX0KLQotLnRvb2x0aXAuaW52ZXJ0ZWQ6YWZ0ZXIgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19
Ci0KLS50b29sdGlwOmFmdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6
IDA7Ci0gICAgaGVpZ2h0OiAwOwotICAgIGxlZnQ6IDUwJTsKLSAgICBtYXJnaW4tbGVmdDogLTlw
eDsKLSAgICBib3R0b206IC0xOXB4OwotICAgIGNvbnRlbnQ6ICIiOwotICAgIGRpc3BsYXk6IGJs
b2NrOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAxMHB4Owot
ICAgIGJvcmRlci1jb2xvcjogIzMzMyB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVu
dDsKLX0KLQotLnRvb2x0aXAgYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0g
ICAgY29sb3I6ICNmZmY7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLS5jbGlja1Rvb2x0
aXAgewotICAgIG9wYWNpdHk6IDAuNjsKLX0KLQotLmhvdmVyVG9vbHRpcCB7Ci0gICAgei1pbmRl
eDogOTk5OTk7Ci19Ci0KLSN0ZXN0UGlja2VyIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
Ci0gICAgbWFyZ2luOiAxMHB4IDBweDsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOwotICAg
IGNvbG9yOiAjNjY2OwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLSAgICBwYWRkaW5nOiA1cHgg
OHB4OwotfQotCi08L3N0eWxlPgotPHNjcmlwdD4KLQotKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
Y2hhcnRzID0gW107Ci0gICAgdmFyIG1pblRpbWU7Ci0gICAgdmFyIGN1cnJlbnRab29tOwotICAg
IHZhciBzaGFyZWRQbG90T3B0aW9ucyA9IHsKLSAgICAgICAgbGluZXM6IHsgc2hvdzogdHJ1ZSwg
bGluZVdpZHRoOiAxIH0sCi0gICAgICAgIHhheGlzOiB7Ci0gICAgICAgICAgICBtb2RlOiAidGlt
ZSIsCi0gICAgICAgICAgICB0aW1lZm9ybWF0OiAiJW0vJWQiLAotICAgICAgICAgICAgbWluVGlj
a1NpemU6IFsxLCAnZGF5J10sCi0gICAgICAgICAgICBtYXg6IERhdGUubm93KCksIC8vIEZJWE1F
OiBUaGlzIGlzIGxpa2VseSBicm9rZW4gZm9yIG5vbi1QU1QKLSAgICAgICAgfSwKLSAgICAgICAg
eWF4aXM6IHsgdGlja0xlbmd0aDogMCB9LAotICAgICAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTog
MCB9LAotICAgICAgICBwb2ludHM6IHsgc2hvdzogZmFsc2UgfSwKLSAgICAgICAgZ3JpZDogewot
ICAgICAgICAgICAgaG92ZXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEs
Ci0gICAgICAgICAgICBib3JkZXJDb2xvcjogJyM5OTknLAotICAgICAgICAgICAgYmFja2dyb3Vu
ZENvbG9yOiAnI2ZmZicsCi0gICAgICAgIH0KLSAgICB9OwotCi0gICAgZnVuY3Rpb24gYWRqdXN0
ZWRJbnRlcnZhbEZvclJ1bihyZXN1bHRzLCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5BZGp1c3Rl
ZEludGVydmFsKSB7Ci0gICAgICAgIGlmICghcmVzdWx0cykKLSAgICAgICAgICAgIHJldHVybiB7
bWluOiBOdW1iZXIuTUFYX1ZBTFVFLCBtYXg6IE51bWJlci5NSU5fVkFMVUV9OwotICAgICAgICB2
YXIgZGVncmVlT2ZXZWlnaHRpbmdEZWNyZWFzZSA9IDAuMjsKLSAgICAgICAgdmFyIG1vdmluZ0F2
ZXJhZ2UgPSByZXN1bHRzLmV4cG9uZW50aWFsTW92aW5nQXJpdGhtZXRpY01lYW4obWluVGltZSwg
ZGVncmVlT2ZXZWlnaHRpbmdEZWNyZWFzZSk7Ci0gICAgICAgIHZhciByZXN1bHRzQ291bnQgPSBy
ZXN1bHRzLmNvdW50UmVzdWx0cyhtaW5UaW1lKTsKLSAgICAgICAgdmFyIGFkanVzdG1lbnREZWx0
YSA9IHJlc3VsdHMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24obWluVGltZSkgLyA0OwotICAgICAg
ICB2YXIgYWRqdXN0ZWRNaW4gPSBtb3ZpbmdBdmVyYWdlOwotICAgICAgICB2YXIgYWRqdXN0ZWRN
YXggPSBtb3ZpbmdBdmVyYWdlOwotICAgICAgICB2YXIgYWRqdXN0bWVudENvdW50OwotICAgICAg
ICBmb3IgKGFkanVzdG1lbnRDb3VudCA9IDA7IGFkanVzdG1lbnRDb3VudCA8IDQgKiA0OyBhZGp1
c3RtZW50Q291bnQrKykgeyAvLyBEb24ndCBleHBhbmQgYmV5b25kIDQgc3RhbmRhcmQgZGV2aWF0
aW9ucy4KLSAgICAgICAgICAgIGFkanVzdGVkTWluIC09IGFkanVzdG1lbnREZWx0YTsKLSAgICAg
ICAgICAgIGFkanVzdGVkTWF4ICs9IGFkanVzdG1lbnREZWx0YTsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHRzLmNvdW50UmVzdWx0c0luSW50ZXJ2YWwobWluVGltZSwgYWRqdXN0ZWRNaW4sIGFkanVz
dGVkTWF4KSAvIHJlc3VsdHNDb3VudCA+PSBtaW5SYXRpb1RvRml0SW5BZGp1c3RlZEludGVydmFs
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYWRqdXN0bWVudENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHRz
LmNvdW50UmVzdWx0c0luSW50ZXJ2YWwobWluVGltZSwgYWRqdXN0ZWRNaW4gKyBhZGp1c3RtZW50
RGVsdGEsIGFkanVzdGVkTWF4KSAvIHJlc3VsdHNDb3VudCA8IG1pblJhdGlvVG9GaXRJbkFkanVz
dGVkSW50ZXJ2YWwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhZGp1c3Rl
ZE1pbiArPSBhZGp1c3RtZW50RGVsdGE7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhZGp1c3RtZW50Q291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKHJlc3VsdHMu
Y291bnRSZXN1bHRzSW5JbnRlcnZhbChtaW5UaW1lLCBhZGp1c3RlZE1pbiwgYWRqdXN0ZWRNYXgg
LSBhZGp1c3RtZW50RGVsdGEpIC8gcmVzdWx0c0NvdW50IDwgbWluUmF0aW9Ub0ZpdEluQWRqdXN0
ZWRJbnRlcnZhbCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFkanVzdGVk
TWF4IC09IGFkanVzdG1lbnREZWx0YTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ge21pbjog
YWRqdXN0ZWRNaW4sIG1heDogYWRqdXN0ZWRNYXh9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNv
bXB1dGVZQXhpc0JvdW5kc1RvRml0TGluZXMobWluVGltZSwgcmVzdWx0cywgYmFzZWxpbmUsIHRh
cmdldCkgewotICAgICAgICB2YXIgbWluT2ZBbGxSdW5zID0gcmVzdWx0cy5taW4obWluVGltZSk7
Ci0gICAgICAgIHZhciBtYXhPZkFsbFJ1bnMgPSByZXN1bHRzLm1heChtaW5UaW1lKTsKLSAgICAg
ICAgaWYgKGJhc2VsaW5lKSB7Ci0gICAgICAgICAgICBtaW5PZkFsbFJ1bnMgPSBNYXRoLm1pbiht
aW5PZkFsbFJ1bnMsIGJhc2VsaW5lLm1pbihtaW5UaW1lKSk7Ci0gICAgICAgICAgICBtYXhPZkFs
bFJ1bnMgPSBNYXRoLm1heChtYXhPZkFsbFJ1bnMsIGJhc2VsaW5lLm1heChtaW5UaW1lKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHRhcmdldCkgewotICAgICAgICAgICAgbWluT2ZBbGxSdW5z
ID0gTWF0aC5taW4obWluT2ZBbGxSdW5zLCB0YXJnZXQubWluKG1pblRpbWUpKTsKLSAgICAgICAg
ICAgIG1heE9mQWxsUnVucyA9IE1hdGgubWF4KG1heE9mQWxsUnVucywgdGFyZ2V0Lm1heChtaW5U
aW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIG1hcmdpblNpemUgPSAobWF4T2ZBbGxSdW5z
IC0gbWluT2ZBbGxSdW5zKSAqIDAuMTsKLQotICAgICAgICB2YXIgbWluUmF0aW9Ub0ZpdEluQWRq
dXN0ZWRJbnRlcnZhbCA9IDAuOTsKLSAgICAgICAgdmFyIGludGVydmFsRm9yUmVzdWx0cyA9IGFk
anVzdGVkSW50ZXJ2YWxGb3JSdW4ocmVzdWx0cywgbWluVGltZSwgbWluUmF0aW9Ub0ZpdEluQWRq
dXN0ZWRJbnRlcnZhbCk7Ci0gICAgICAgIHZhciBpbnRlcnZhbEZvckJhc2VsaW5lID0gYWRqdXN0
ZWRJbnRlcnZhbEZvclJ1bihiYXNlbGluZSwgbWluVGltZSwgbWluUmF0aW9Ub0ZpdEluQWRqdXN0
ZWRJbnRlcnZhbCk7Ci0gICAgICAgIHZhciBpbnRlcnZhbEZvclRhcmdldCA9IGFkanVzdGVkSW50
ZXJ2YWxGb3JSdW4odGFyZ2V0LCBtaW5UaW1lLCBtaW5SYXRpb1RvRml0SW5BZGp1c3RlZEludGVy
dmFsKTsKLSAgICAgICAgdmFyIGFkanVzdGVkTWluID0gTWF0aC5taW4oaW50ZXJ2YWxGb3JSZXN1
bHRzLm1pbiwgaW50ZXJ2YWxGb3JCYXNlbGluZS5taW4sIGludGVydmFsRm9yVGFyZ2V0Lm1pbik7
Ci0gICAgICAgIHZhciBhZGp1c3RlZE1heCA9IE1hdGgubWF4KGludGVydmFsRm9yUmVzdWx0cy5t
YXgsIGludGVydmFsRm9yQmFzZWxpbmUubWF4LCBpbnRlcnZhbEZvclRhcmdldC5tYXgpOwotICAg
ICAgICB2YXIgYWRqc3V0ZWRNYXJnaW5TaXplID0gKGFkanVzdGVkTWF4IC0gYWRqdXN0ZWRNaW4p
ICogMC4xOwotICAgICAgICByZXR1cm4ge21pbjogbWluT2ZBbGxSdW5zIC0gbWFyZ2luU2l6ZSwg
bWF4OiBtYXhPZkFsbFJ1bnMgKyBtYXJnaW5TaXplLAotICAgICAgICAgICAgYWRqdXN0ZWRNaW46
IE1hdGgubWF4KG1pbk9mQWxsUnVucyAtIG1hcmdpblNpemUsIGFkanVzdGVkTWluIC0gYWRqc3V0
ZWRNYXJnaW5TaXplKSwKLSAgICAgICAgICAgIGFkanVzdGVkTWF4OiBNYXRoLm1pbihtYXhPZkFs
bFJ1bnMgKyBtYXJnaW5TaXplLCBhZGp1c3RlZE1heCArIGFkanN1dGVkTWFyZ2luU2l6ZSl9Owot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbXB1dGVTdGF0dXMoc21hbGxlcklzQmV0dGVyLCBsYXN0
UmVzdWx0LCBiYXNlbGluZSwgdGFyZ2V0KSB7Ci0gICAgICAgIHZhciByZWxhdGl2ZURpZmZlcmVu
Y2VXaXRoQmFzZWxpbmUgPSBiYXNlbGluZSA/IGxhc3RSZXN1bHQucmVsYXRpdmVEaWZmZXJlbmNl
KGJhc2VsaW5lLmxhc3RSZXN1bHQoKSkgOiAwOwotICAgICAgICB2YXIgcmVsYXRpdmVEaWZmZXJl
bmNlV2l0aFRhcmdldCA9IHRhcmdldCA/IGxhc3RSZXN1bHQucmVsYXRpdmVEaWZmZXJlbmNlKHRh
cmdldC5sYXN0UmVzdWx0KCkpIDogMDsKLSAgICAgICAgdmFyIHN0YXR1c1RleHQgPSAnJzsKLSAg
ICAgICAgdmFyIHN0YXR1cyA9ICcnOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZURpZmZlcmVuY2VX
aXRoQmFzZWxpbmUgJiYgcmVsYXRpdmVEaWZmZXJlbmNlV2l0aEJhc2VsaW5lID4gMCAhPSBzbWFs
bGVySXNCZXR0ZXIpIHsKLSAgICAgICAgICAgIHN0YXR1c1RleHQgPSBNYXRoLmFicyhyZWxhdGl2
ZURpZmZlcmVuY2VXaXRoQmFzZWxpbmUgKiAxMDApLnRvRml4ZWQoMikgKyAnJSAnICsgKHNtYWxs
ZXJJc0JldHRlciA/ICdhYm92ZScgOiAnYmVsb3cnKSArICcgYmFzZWxpbmUnOwotICAgICAgICAg
ICAgc3RhdHVzID0gJ3dvcnNlJzsKLSAgICAgICAgfSBlbHNlIGlmIChyZWxhdGl2ZURpZmZlcmVu
Y2VXaXRoVGFyZ2V0ICYmIHJlbGF0aXZlRGlmZmVyZW5jZVdpdGhUYXJnZXQgPiAwID09IHNtYWxs
ZXJJc0JldHRlcikgewotICAgICAgICAgICAgc3RhdHVzVGV4dCA9IE1hdGguYWJzKHJlbGF0aXZl
RGlmZmVyZW5jZVdpdGhUYXJnZXQgKiAxMDApLnRvRml4ZWQoMikgKyAnJSAnICsgKHNtYWxsZXJJ
c0JldHRlciA/ICdiZWxvdycgOiAnYWJvdmUnKSArICcgdGFyZ2V0JzsKLSAgICAgICAgICAgIHN0
YXR1cyA9ICdiZXR0ZXInOwotICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aXZlRGlmZmVyZW5jZVdp
dGhUYXJnZXQpCi0gICAgICAgICAgICBzdGF0dXNUZXh0ID0gTWF0aC5hYnMocmVsYXRpdmVEaWZm
ZXJlbmNlV2l0aFRhcmdldCAqIDEwMCkudG9GaXhlZCgyKSArICclIHVudGlsIHRhcmdldCc7Ci0K
LSAgICAgICAgcmV0dXJuIHtjbGFzczogc3RhdHVzLCB0ZXh0OiBzdGF0dXNUZXh0fTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgbmFtZSwgcnVucywg
Y29sb3IsIGludGVyYWN0aXZlKSB7Ci0gICAgICAgIHZhciBlbnRyeSA9IHtjb2xvcjogY29sb3Is
IGRhdGE6IHJ1bnMubWVhblBsb3REYXRhKCl9OwotICAgICAgICBpZiAoIWludGVyYWN0aXZlKSB7
Ci0gICAgICAgICAgICBlbnRyeS5jbGlja2FibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGVudHJ5
LmhvdmVyYWJsZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydW5zLmhhc0NvbmZp
ZGVuY2VJbnRlcnZhbCgpKSB7Ci0gICAgICAgICAgICB2YXIgbG93ZXJOYW1lID0gbmFtZS50b0xv
d2VyQ2FzZSgpOwotICAgICAgICAgICAgdmFyIGNvbmZpZW5jZUVudHJ5ID0gJC5leHRlbmQodHJ1
ZSwge30sIGVudHJ5LCB7bGluZXM6IHtsaW5lV2lkdGg6IDB9LCBjbGlja2FibGU6IGZhbHNlLCBo
b3ZlcmFibGU6IGZhbHNlfSk7Ci0gICAgICAgICAgICBwbG90RGF0YS5wdXNoKCQuZXh0ZW5kKHRy
dWUsIHt9LCBjb25maWVuY2VFbnRyeSwge2lkOiBsb3dlck5hbWUsIGRhdGE6IHJ1bnMudXBwZXJD
b25maWRlbmNlUGxvdERhdGEoKX0pKTsKLSAgICAgICAgICAgIHBsb3REYXRhLnB1c2goJC5leHRl
bmQodHJ1ZSwge30sIGNvbmZpZW5jZUVudHJ5LAotICAgICAgICAgICAgICAgIHtmaWxsQmV0d2Vl
bjogbG93ZXJOYW1lLCBsaW5lczoge2ZpbGw6IDAuM30sIGRhdGE6IHJ1bnMubG93ZXJDb25maWRl
bmNlUGxvdERhdGEoKX0pKTsKLSAgICAgICAgfQotICAgICAgICBwbG90RGF0YS5wdXNoKGVudHJ5
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKG5hbWUsIHJ1
bnMpIHsKLSAgICAgICAgcmV0dXJuICc8dHI+PHRoPicgKyBuYW1lICsgJzwvdGg+PHRkPicgKyBy
dW5zLmxhc3RSZXN1bHQoKS5sYWJlbCgpICsgJzwvdGQ+PC90cj4nOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGJ1aWxkTGFiZWxXaXRoTGlua3MoYnVpbGQsIHByZXZpb3VzQnVpbGQpIHsKLSAgICAg
ICAgZnVuY3Rpb24gbGlua2lmeUlmTm90TnVsbChsYWJlbCwgdXJsKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdXJsID8gJzxhIGhyZWY9IicgKyB1cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIGxh
YmVsICsgJzwvYT4nIDogbGFiZWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZm9ybWF0dGVk
UmV2aXNpb25zID0gYnVpbGQuZm9ybWF0dGVkUmV2aXNpb25zKHByZXZpb3VzQnVpbGQpOwotICAg
ICAgICB2YXIgYnVpbGRJbmZvID0gewotICAgICAgICAgICAgJ0NvbW1pdCc6IGJ1aWxkLmZvcm1h
dHRlZFRpbWUoKSwKLSAgICAgICAgICAgICdCdWlsZCc6IGxpbmtpZnlJZk5vdE51bGwoYnVpbGQu
YnVpbGROdW1iZXIoKSwgYnVpbGQuYnVpbGRVcmwoKSkgKyAnKCcgKyBidWlsZC5mb3JtYXR0ZWRC
dWlsZFRpbWUoKSArICcpJwotICAgICAgICB9OwotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5
TmFtZSBpbiBmb3JtYXR0ZWRSZXZpc2lvbnMpCi0gICAgICAgICAgICBidWlsZEluZm9bcmVwb3Np
dG9yeU5hbWVdID0gbGlua2lmeUlmTm90TnVsbChmb3JtYXR0ZWRSZXZpc2lvbnNbcmVwb3NpdG9y
eU5hbWVdLmxhYmVsLCBmb3JtYXR0ZWRSZXZpc2lvbnNbcmVwb3NpdG9yeU5hbWVdLnVybCk7Ci0g
ICAgICAgIHZhciBtYXJrdXAgPSAnJzsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIGJ1aWxkSW5m
bykKLSAgICAgICAgICAgIG1hcmt1cCArPSAnPHRyPjx0aD4nICsga2V5ICsgJzwvdGg+PHRkPicg
KyBidWlsZEluZm9ba2V5XSArICc8L3RkPic7Ci0gICAgICAgIHJldHVybiAnPHRyPicgKyBtYXJr
dXAgKyAnPC90cj4nOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIENoYXJ0KGNvbnRhaW5lciwgaXNE
YXNoYm9hcmQsIHBsYXRmb3JtLCBtZXRyaWMsIGJ1Z1RyYWNrZXJzLCBvbkNsb3NlKSB7Ci0gICAg
ICAgIHZhciBsaW5raWZpZWRGdWxsTmFtZSA9IG1ldHJpYy5mdWxsTmFtZTsKLSAgICAgICAgaWYg
KG1ldHJpYy50ZXN0LnVybCkKLSAgICAgICAgICAgIGxpbmtpZmllZEZ1bGxOYW1lID0gJzxhIGhy
ZWY9IicgKyBtZXRyaWMudGVzdC51cmwgKyAnIj4nICsgbGlua2lmaWVkRnVsbE5hbWUgKyAnPC9h
Pic7Ci0gICAgICAgIHZhciBzZWN0aW9uID0gJCgnPHNlY3Rpb24gY2xhc3M9ImNoYXJ0Ij48ZGl2
IGNsYXNzPSJwYW5lIj48aGVhZGVyPjxoMj4nICsgbGlua2lmaWVkRnVsbE5hbWUgKyAnPC9oMj4n
Ci0gICAgICAgICAgICArICc8aDMgY2xhc3M9InBsYXRmb3JtIj4nICsgcGxhdGZvcm0ubmFtZSAr
ICc8L2gzPjwvaGVhZGVyPicKLSAgICAgICAgICAgICsgJzxkaXYgY2xhc3M9Im1ldGEiPjx0YWJs
ZSBjbGFzcz0ic3RhdHVzIj48dGJvZHk+PC90Ym9keT48L3RhYmxlPjx0YWJsZSBjbGFzcz0ic3Vt
bWFyeVRhYmxlIj48dGJvZHk+PC90Ym9keT48L3RhYmxlPjwvZGl2PicKLSAgICAgICAgICAgICsg
JzxkaXYgY2xhc3M9Im92ZXJ2aWV3UGxvdCI+PC9kaXY+PC9kaXY+JwotICAgICAgICAgICAgKyAn
PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+JwotICAgICAgICAgICAgKyAnPGRpdiBjbGFzcz0idW5p
dCI+PC9kaXY+JwotICAgICAgICAgICAgKyAnPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTAwIiBjbGFz
cz0iYXJyb3ciPicKLSAgICAgICAgICAgICsgJzxnIHN0cm9rZS13aWR0aD0iMTAiPjxsaW5lIHgx
PSIxMCIgeTE9IjgiIHgyPSIxMCIgeTI9IjkyIiAvPicKLSAgICAgICAgICAgICsgJzxwb2x5Z29u
IHBvaW50cz0iNSw4NSAxNSw4NSAxMCw5MCIgY2xhc3M9ImRvd253YXJkQXJyb3dIZWFkIiAvPicK
LSAgICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0iNSwxNSAxNSwxNSAxMCwxMCIgY2xhc3M9
InVwd2FyZEFycm93SGVhZCIgLz4nCi0gICAgICAgICAgICArICc8L2c+PC9zdmc+JwotICAgICAg
ICAgICAgKyAnPGEgaHJlZj0iIyIgY2xhc3M9InRvZ2dsZVlBeGlzIj48c3ZnIHZpZXdCb3g9IjAg
MCA0MCAxMDAiIGNsYXNzPSJ5YXhpc3RvZ2dsZXIiPjxnIHN0cm9rZS13aWR0aD0iMTAiPicKLSAg
ICAgICAgICAgICsgJzxsaW5lIHgxPSIyMCIgeTE9IjgiIHgyPSIyMCIgeTI9IjgyIiAvPicKLSAg
ICAgICAgICAgICsgJzxwb2x5Z29uIHBvaW50cz0iMTUsMTUgMjUsMTUgMjAsMTAiIC8+JwotICAg
ICAgICAgICAgKyAnPHBvbHlnb24gcG9pbnRzPSIxNSw3NSAyNSw3NSAyMCw4MCIgLz4nCi0gICAg
ICAgICAgICArICc8bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iNDAiIHkyPSI5MiIgLz4nCi0gICAg
ICAgICAgICArICc8L2c+PC9zdmc+PC9hPicKLSAgICAgICAgICAgICsgJzxhIGhyZWY9IiMiIGNs
YXNzPSJjbG9zZUJ1dHRvbiI+PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+JwotICAgICAgICAg
ICAgKyAnPGcgc3Ryb2tlLXdpZHRoPSIxMCI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDUi
IGZpbGw9InRyYW5zcGFyZW50Ii8+PHBvbHlnb24gcG9pbnRzPSIzMCwzMCA3MCw3MCIgLz4nCi0g
ICAgICAgICAgICArICc8cG9seWdvbiBwb2ludHM9IjMwLDcwIDcwLDMwIiAvPjwvZz48L3N2Zz48
L2E+PC9zZWN0aW9uPicpOwotCi0gICAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoc2VjdGlvbik7
Ci0KLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBpZiAob25DbG9zZSkgewotICAg
ICAgICAgICAgc2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0
aW9uIChldmVudCkgewotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgICAgICAgICAgc2VjdGlvbi5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICBjaGFydHMu
c3BsaWNlKGNoYXJ0cy5pbmRleE9mKHNlbGYpLCAxKTsKLSAgICAgICAgICAgICAgICBvbkNsb3Nl
KHNlbGYpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNlY3Rpb24uZmluZCgnLmNsb3NlQnV0dG9uJyku
aGlkZSgpOwotCi0gICAgICAgIHNlY3Rpb24uZmluZCgnLnlheGlzdG9nZ2xlcicpLmJpbmQoJ2Ns
aWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICAgICAgICBzZWxmLnRvZ2dsZVlBeGlzKCk7
Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgcGxvdERhdGEgPSBbXTsKLSAgICAg
ICAgdmFyIHJlc3VsdHM7Ci0gICAgICAgIHZhciBiYXNlbGluZTsKLSAgICAgICAgdmFyIHRhcmdl
dDsKLQotICAgICAgICB2YXIgdG9vbHRpcCA9IG5ldyBUb29sdGlwKGNvbnRhaW5lciwgJ3Rvb2x0
aXAgaG92ZXJUb29sdGlwJyk7Ci0gICAgICAgIHZhciBib3VuZHM7Ci0gICAgICAgIHZhciBwbG90
Q29udGFpbmVyID0gc2VjdGlvbi5maW5kKCcucGxvdCcpOwotICAgICAgICB2YXIgbWFpblBsb3Q7
Ci0gICAgICAgIHZhciBvdmVydmlld1Bsb3Q7Ci0gICAgICAgIHZhciBjbGlja1Rvb2x0aXBzID0g
W107Ci0gICAgICAgIHZhciBzaG91bGRTaG93RW50aXJlWUF4aXMgPSBmYWxzZTsKLQotICAgICAg
ICB0aGlzLnBsYXRmb3JtID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxhdGZvcm07IH0KLSAgICAg
ICAgdGhpcy5tZXRyaWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWM7IH0KLQotICAgICAg
ICB0aGlzLnBvcHVsYXRlID0gZnVuY3Rpb24gKHBhc3NlZFJlc3VsdHMsIHBhc3NlZEJhc2VsaW5l
LCBwYXNzZWRUYXJnZXQpIHsKLSAgICAgICAgICAgIHJlc3VsdHMgPSBwYXNzZWRSZXN1bHRzOwot
ICAgICAgICAgICAgYmFzZWxpbmUgPSBwYXNzZWRCYXNlbGluZTsKLSAgICAgICAgICAgIHRhcmdl
dCA9IHBhc3NlZFRhcmdldDsKLQotICAgICAgICAgICAgdmFyIHN1bW1hcnlSb3dzID0gJyc7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JS
dW4ocGxvdERhdGEsICdUYXJnZXQnLCB0YXJnZXQsICcjMDM5Jyk7Ci0gICAgICAgICAgICAgICAg
c3VtbWFyeVJvd3MgPSBjcmVhdGVTdW1tYXJ5Um93TWFya3VwKCdUYXJnZXQnLCB0YXJnZXQpICsg
c3VtbWFyeVJvd3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZWxpbmUpIHsK
LSAgICAgICAgICAgICAgICBhZGRQbG90RGF0YUZvclJ1bihwbG90RGF0YSwgJ0Jhc2VsaW5lJywg
YmFzZWxpbmUsICcjOTMwJyk7Ci0gICAgICAgICAgICAgICAgc3VtbWFyeVJvd3MgPSBjcmVhdGVT
dW1tYXJ5Um93TWFya3VwKCdCYXNlbGluZScsIGJhc2VsaW5lKSArIHN1bW1hcnlSb3dzOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYWRkUGxvdERhdGFGb3JSdW4ocGxvdERhdGEsICdDdXJy
ZW50JywgcmVzdWx0cywgJyM2NjYnLCB0cnVlKTsKLSAgICAgICAgICAgIHN1bW1hcnlSb3dzID0g
Y3JlYXRlU3VtbWFyeVJvd01hcmt1cCgnQ3VycmVudCcsIHJlc3VsdHMpICsgc3VtbWFyeVJvd3M7
Ci0KLSAgICAgICAgICAgIHZhciBzdGF0dXMgPSBjb21wdXRlU3RhdHVzKHJlc3VsdHMuc21hbGxl
cklzQmV0dGVyKCksIHJlc3VsdHMubGFzdFJlc3VsdCgpLCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAg
ICAgICAgICAgIGlmIChzdGF0dXMudGV4dCkKLSAgICAgICAgICAgICAgICBzdW1tYXJ5Um93cyA9
ICc8dHI+PHRkIGNvbHNwYW49IjIiPicgKyBzdGF0dXMudGV4dCArICc8L3RkPjwvdHI+JyArIHN1
bW1hcnlSb3dzOwotICAgICAgICAgICAgc2VjdGlvbi5hZGRDbGFzcyhzdGF0dXMuY2xhc3MpOwot
ICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcuc3RhdHVzIHRib2R5JykuaHRtbChidWlsZExhYmVs
V2l0aExpbmtzKHJlc3VsdHMubGFzdFJlc3VsdCgpLmJ1aWxkKCkpKTsKLSAgICAgICAgICAgIHNl
Y3Rpb24uZmluZCgnLnN1bW1hcnlUYWJsZSB0Ym9keScpLmh0bWwoc3VtbWFyeVJvd3MpOwotICAg
ICAgICAgICAgaWYgKHJlc3VsdHMuc21hbGxlcklzQmV0dGVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBzZWN0aW9uLmZpbmQoJy5hcnJvdyAuZG93bndhcmRBcnJvd0hlYWQnKS5zaG93KCk7Ci0gICAg
ICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcuYXJyb3cgLnVwd2FyZEFycm93SGVhZCcpLmhpZGUo
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5maW5kKCcu
YXJyb3cgLmRvd253YXJkQXJyb3dIZWFkJykuaGlkZSgpOwotICAgICAgICAgICAgICAgIHNlY3Rp
b24uZmluZCgnLmFycm93IC51cHdhcmRBcnJvd0hlYWQnKS5zaG93KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmF0dGFjaE1haW5QbG90ID0gZnVuY3Rpb24gKHhN
aW4sIHhNYXgpIHsKLSAgICAgICAgICAgIGlmICghYm91bmRzKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgdmFyIG1haW5QbG90T3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUs
IHt9LCBzaGFyZWRQbG90T3B0aW9ucywgewotICAgICAgICAgICAgICAgIHhheGlzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1pbjogeE1pbiwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIHlheGlzOiB7Ci0gICAgICAgICAgICAgICAgICAgIHRpY2tMZW5ndGg6IG51bGwsCi0g
ICAgICAgICAgICAgICAgICAgIG1pbjogc2hvdWxkU2hvd0VudGlyZVlBeGlzID8gMCA6IGJvdW5k
cy5hZGp1c3RlZE1pbiwKLSAgICAgICAgICAgICAgICAgICAgbWF4OiBzaG91bGRTaG93RW50aXJl
WUF4aXMgPyBib3VuZHMubWF4IDogYm91bmRzLmFkanVzdGVkTWF4LAotICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgY3Jvc3NoYWlyOiB7J21vZGUnOiAneCcsIGNvbG9yOiAnI2M5
MCcsIGxpbmVXaWR0aDogMX0sCi0gICAgICAgICAgICAgICAgZ3JpZDoge2NsaWNrYWJsZTogdHJ1
ZX0sCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICh4TWF4KQotICAgICAgICAgICAg
ICAgIG1haW5QbG90T3B0aW9ucy54YXhpcy5tYXggPSB4TWF4OwotICAgICAgICAgICAgaWYgKGlz
RGFzaGJvYXJkKSB7Ci0gICAgICAgICAgICAgICAgbWFpblBsb3RPcHRpb25zLnlheGlzLmxhYmVs
V2lkdGggPSAyMDsKLSAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlvbnMueWF4aXMudGlja3Mg
PSBbbWFpblBsb3RPcHRpb25zLnlheGlzLm1pbiwgbWFpblBsb3RPcHRpb25zLnlheGlzLm1heF07
Ci0gICAgICAgICAgICAgICAgbWFpblBsb3RPcHRpb25zLmdyaWQuYXV0b0hpZ2hsaWdodCA9IGZh
bHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYWluUGxvdE9wdGlv
bnMueWF4aXMubGFiZWxXaWR0aCA9IDMwOwotICAgICAgICAgICAgICAgIG1haW5QbG90T3B0aW9u
cy5zZWxlY3Rpb24gPSB7bW9kZTogIngifTsKLSAgICAgICAgICAgICAgICBwbG90RGF0YVtwbG90
RGF0YS5sZW5ndGggLSAxXS5wb2ludHMgPSB7c2hvdzogdHJ1ZSwgcmFkaXVzOiAxfTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1haW5QbG90ID0gJC5wbG90KHBsb3RDb250YWluZXIsIHBs
b3REYXRhLCBtYWluUGxvdE9wdGlvbnMpOwotICAgICAgICAgICAgcGxvdERhdGFbcGxvdERhdGEu
bGVuZ3RoIC0gMV0ucG9pbnRzID0ge307Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2xpY2tUb29sdGlwcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChjbGlj
a1Rvb2x0aXBzW2ldKQotICAgICAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2ldLnJlbW92
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xpY2tUb29sdGlwcyA9IFtdOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy50b2dnbGVZQXhpcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHNob3VsZFNob3dFbnRpcmVZQXhpcyA9ICFzaG91bGRTaG93RW50aXJlWUF4aXM7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudFpvb20pCi0gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hN
YWluUGxvdChjdXJyZW50Wm9vbS5mcm9tLCBjdXJyZW50Wm9vbS50byk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hNYWluUGxvdChtaW5UaW1lKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMuem9vbSA9IGZ1bmN0aW9uIChmcm9tLCB0bykgewotICAgICAg
ICAgICAgdGhpcy5hdHRhY2hNYWluUGxvdChmcm9tLCB0byk7Ci0gICAgICAgICAgICBpZiAob3Zl
cnZpZXdQbG90KQotICAgICAgICAgICAgICAgIG92ZXJ2aWV3UGxvdC5zZXRTZWxlY3Rpb24oe3hh
eGlzOiB7ZnJvbTogZnJvbSwgdG86IHRvfX0sIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5jbGVhclpvb20gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLmF0dGFjaE1h
aW5QbG90KG1pblRpbWUpOwotICAgICAgICAgICAgaWYgKG92ZXJ2aWV3UGxvdCkKLSAgICAgICAg
ICAgICAgICBvdmVydmlld1Bsb3QuY2xlYXJTZWxlY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdGhpcy5zZXRDcm9zc2hhaXIgPSBmdW5jdGlvbiAocG9zKSB7Ci0gICAgICAg
ICAgICBpZiAobWFpblBsb3QpCi0gICAgICAgICAgICAgICAgbWFpblBsb3Quc2V0Q3Jvc3NoYWly
KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmNsZWFyQ3Jvc3NoYWlyID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgaWYgKG1haW5QbG90KQotICAgICAgICAgICAgICAgIG1haW5Q
bG90LmNsZWFyQ3Jvc3NoYWlyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmhpZGVUb29s
dGlwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAodG9vbHRpcCkKLSAgICAgICAgICAg
ICAgICB0b29sdGlwLmhpZGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHRvZ2ds
ZUNsaWNrVG9vbHRpcChpbmRleCwgcGFnZVgsIHBhZ2VZKSB7Ci0gICAgICAgICAgICBpZiAoY2xp
Y2tUb29sdGlwc1tpbmRleF0pCi0gICAgICAgICAgICAgICAgY2xpY2tUb29sdGlwc1tpbmRleF0u
dG9nZ2xlKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
UHV0IHRoaXMgb24gVVJMU3RhdGUuCi0gICAgICAgICAgICAgICAgdmFyIG5ld1Rvb2x0aXAgPSBu
ZXcgVG9vbHRpcChjb250YWluZXIsICd0b29sdGlwIGNsaWNrVG9vbHRpcCcpOwotICAgICAgICAg
ICAgICAgIHNob3dUb29sdGlwV2l0aFJlc3VsdHMobmV3VG9vbHRpcCwgcGFnZVgsIHBhZ2VZLCBy
ZXN1bHRzLnJlc3VsdEF0KGluZGV4KSwgcmVzdWx0cy5yZXN1bHRBdChpbmRleCAtIDEpKTsKLSAg
ICAgICAgICAgICAgICBuZXdUb29sdGlwLmJpbmRDbGljayhmdW5jdGlvbiAoKSB7IHRvZ2dsZUNs
aWNrVG9vbHRpcChpbmRleCwgcGFnZVgsIHBhZ2VZKTsgfSk7Ci0gICAgICAgICAgICAgICAgbmV3
VG9vbHRpcC5iaW5kTW91c2VFbnRlcihmdW5jdGlvbiAoKSB7IHRvb2x0aXAuaGlkZSgpOyB9KTsK
LSAgICAgICAgICAgICAgICBjbGlja1Rvb2x0aXBzW2luZGV4XSA9IG5ld1Rvb2x0aXA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB0b29sdGlwLmhpZGUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHNob3dUb29sdGlwV2l0aFJlc3VsdHModG9vbHRpcCwgeCwgeSwgcmVzdWx0
LCByZXN1bHRUb0NvbXBhcmUpIHsKLSAgICAgICAgICAgIHZhciBuZXdCdWdVcmxzID0gJyc7Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0VG9Db21wYXJlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRp
dGxlID0gKHJlc3VsdFRvQ29tcGFyZS5pc0JldHRlclRoYW4ocmVzdWx0KSA/ICdSRUdSRVNTSU9O
OiAnIDogJycpICsgcmVzdWx0Lm1ldHJpYygpLmZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAg
ICsgJyBnb3QgJyArIHJlc3VsdC5mb3JtYXR0ZWRQcm9ncmVzc2lvbk9yUmVncmVzc2lvbihyZXN1
bHRUb0NvbXBhcmUpCi0gICAgICAgICAgICAgICAgICAgICsgJyBhcm91bmQgJyArIHJlc3VsdC5i
dWlsZCgpLmZvcm1hdHRlZFRpbWUoKTsKLSAgICAgICAgICAgICAgICB2YXIgcmV2aXNpb25zID0g
cmVzdWx0LmJ1aWxkKCkuZm9ybWF0dGVkUmV2aXNpb25zKHJlc3VsdFRvQ29tcGFyZS5idWlsZCgp
KTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIHRyYWNrZXJJZCBpbiBidWdUcmFja2Vycykg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgdHJhY2tlciA9IGJ1Z1RyYWNrZXJzW3RyYWNrZXJJ
ZF07Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXBvc2l0b3JpZXMgPSB0cmFja2VyLnJlcG9z
aXRvcmllczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJ1BsYXRmb3Jt
OiAnICsgcmVzdWx0LmJ1aWxkKCkucGxhdGZvcm0oKS5uYW1lICsgJ1xuXG4nOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcG9zaXRvcmllcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnlOYW1lID0gcmVwb3NpdG9y
aWVzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldmlzaW9uID0gcmV2aXNpb25z
W3JlcG9zaXRvcnlOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV2aXNpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmV2aXNpb24udXJsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uICs9IHJlcG9zaXRvcnlOYW1lICsgJzogJyArIHJldmlzaW9uLnVybDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdGlvbiArPSByZXZpc2lvbi5sYWJlbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHVybCA9IHRyYWNrZXIubmV3QnVnVXJsCi0gICAgICAgICAgICAgICAgICAgICAgICAu
cmVwbGFjZSgvXCR0aXRsZS9nLCBlbmNvZGVVUklDb21wb25lbnQodGl0bGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgLnJlcGxhY2UoL1wkZGVzY3JpcHRpb24vZywgZW5jb2RlVVJJQ29tcG9u
ZW50KGRlc2NyaXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cJGxp
bmsvZywgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5ld0J1Z1VybHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdCdWdVcmxz
ICs9ICcsJzsKLSAgICAgICAgICAgICAgICAgICAgbmV3QnVnVXJscyArPSAnIDxhIGhyZWY9Iicg
KyB1cmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+JyArIHRyYWNrZXIubmFtZSArICc8L2E+JzsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV3QnVnVXJscyA9ICdGaWxlOicgKyBu
ZXdCdWdVcmxzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9vbHRpcC5zaG93KHgsIHks
IHJlc3VsdC5sYWJlbChyZXN1bHRUb0NvbXBhcmUpICsgJzx0YWJsZT4nCi0gICAgICAgICAgICAg
ICAgKyBidWlsZExhYmVsV2l0aExpbmtzKHJlc3VsdC5idWlsZCgpLCByZXN1bHRUb0NvbXBhcmUg
PyByZXN1bHRUb0NvbXBhcmUuYnVpbGQoKSA6IG51bGwpICsgJzwvdGFibGU+JwotICAgICAgICAg
ICAgICAgICsgbmV3QnVnVXJscyk7Ci0gICAgICAgIH0KLQotICAgICAgICB0b29sdGlwLmJpbmRD
bGljayhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAodG9vbHRpcC5jdXJyZW50SXRlbSkK
LSAgICAgICAgICAgICAgICB0b2dnbGVDbGlja1Rvb2x0aXAodG9vbHRpcC5jdXJyZW50SXRlbS5k
YXRhSW5kZXgsIHRvb2x0aXAuY3VycmVudEl0ZW0ucGFnZVgsIHRvb2x0aXAuY3VycmVudEl0ZW0u
cGFnZVkpOwotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlvbiBjbG9zZXN0SXRlbUZvclBh
Z2VYUmVzcGVjdGluZ1Bsb3RPZmZzZXQoaXRlbSwgcGxvdCwgc2VyaWVzLCBwYWdlWCkgewotICAg
ICAgICAgICAgaWYgKCFzZXJpZXMgfHwgIXNlcmllcy5kYXRhLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgdmFyIG9mZnNldCA9ICQocGxvdENvbnRh
aW5lcikub2Zmc2V0KCk7Ci0gICAgICAgICAgICB2YXIgcG9pbnRzID0gc2VyaWVzLmRhdGFwb2lu
dHMucG9pbnRzOwotICAgICAgICAgICAgdmFyIHNpemUgPSBzZXJpZXMuZGF0YXBvaW50cy5wb2lu
dHNpemU7Ci0gICAgICAgICAgICB2YXIgeEluUGxvdCA9IHBhZ2VYIC0gb2Zmc2V0LmxlZnQ7Ci0K
LSAgICAgICAgICAgIGlmICh4SW5QbG90IDwgcGxvdC5nZXRQbG90T2Zmc2V0KCkubGVmdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGlmIChpdGVtKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpdGVtOwotCi0gICAgICAgICAgICB2YXIgcHJldmlvdXNQb2ludDsK
LSAgICAgICAgICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgICAgIHZhciBjdXJyZW50UG9pbnQgPSBwbG90LnBvaW50T2Zmc2V0KHt4OiBwb2lu
dHNbaW5kZXggKiBzaXplXSwgeTogcG9pbnRzW2luZGV4ICogc2l6ZSArIDFdfSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHhJblBsb3QgPCBjdXJyZW50UG9pbnQubGVmdCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldmlvdXNQb2ludCAmJiB4SW5QbG90IDwgKHByZXZpb3VzUG9pbnQubGVm
dCArIGN1cnJlbnRQb2ludC5sZWZ0KSAvIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4IC09IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBwcmV2aW91
c1BvaW50OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyAxID49IHNl
cmllcy5kYXRhLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgcHJldmlvdXNQb2ludCA9IGN1cnJlbnRQb2ludDsKLSAgICAgICAgICAgICAgICBpbmRl
eCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdhbnQgdG8g
cmV0dXJuIGEgcmVhbCBpdGVtIG9iamVjdCBidXQgZmxvdCBkb2Vzbid0IHByb3ZpZGUgYW4gQVBJ
IHRvIG9idGFpbiBvbmUKLSAgICAgICAgICAgIC8vIHNvIGNyZWF0ZSBhbiBvYmplY3QgdGhhdCBj
b250YWluIHByb3BlcnRpZXMgd2UgdXNlLgotICAgICAgICAgICAgcmV0dXJuIHtkYXRhSW5kZXg6
IGluZGV4LCBwYWdlWDogb2Zmc2V0LmxlZnQgKyBjdXJyZW50UG9pbnQubGVmdCwgcGFnZVk6IG9m
ZnNldC50b3AgKyBjdXJyZW50UG9pbnQudG9wfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJl
dHVybiBhIHBsb3QgZ2VuZXJhdG9yLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIGNo
YW5nZSB0aGUgbnVtYmVyIG9mIGRheXMgdG8gc2hvdy4KLSAgICAgICAgdGhpcy5hdHRhY2ggPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBib3VuZHMgPSBjb21wdXRlWUF4aXNCb3VuZHNUb0ZpdExp
bmVzKG1pblRpbWUsIHJlc3VsdHMsIGJhc2VsaW5lLCB0YXJnZXQpOwotCi0gICAgICAgICAgICB2
YXIgb3ZlcnZpZXdDb250YWluZXIgPSBzZWN0aW9uLmZpbmQoJy5vdmVydmlld1Bsb3QnKTsKLSAg
ICAgICAgICAgIGlmICghaXNEYXNoYm9hcmQpIHsKLSAgICAgICAgICAgICAgICBvdmVydmlld1Bs
b3QgPSAkLnBsb3Qob3ZlcnZpZXdDb250YWluZXIsIHBsb3REYXRhLAotICAgICAgICAgICAgICAg
ICAgICAkLmV4dGVuZCh0cnVlLCB7fSwgc2hhcmVkUGxvdE9wdGlvbnMsIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHhheGlzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBt
aW5UaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiB0aWNrcyB3ZSBjYW4gZml0IG9uIHRoZSBvdmVyZmxvdyBwbG90IGlzIDQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGlja1NpemU6IFsoVGVzdEJ1aWxkLm5vdygpIC0gbWluVGlt
ZSkgLyA0IC8gMTAwMCwgJ3NlY29uZCddCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JpZDogeyBob3ZlcmFibGU6IGZhbHNlLCBjbGlja2FibGU6
IGZhbHNlIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHsgbW9kZTogIngi
IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB5YXhpczogewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNob3c6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjog
Ym91bmRzLm1pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IGJvdW5kcy5tYXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkpOwotCi0gICAg
ICAgICAgICAgICAgJChwbG90Q29udGFpbmVyKS5iaW5kKCJwbG90c2VsZWN0ZWQiLCBmdW5jdGlv
biAoZXZlbnQsIHJhbmdlcykgeyBDaGFydC56b29tKHJhbmdlcy54YXhpcy5mcm9tLCByYW5nZXMu
eGF4aXMudG8pOyB9KTsKLSAgICAgICAgICAgICAgICAkKG92ZXJ2aWV3Q29udGFpbmVyKS5iaW5k
KCJwbG90c2VsZWN0ZWQiLCBmdW5jdGlvbiAoZXZlbnQsIHJhbmdlcykgeyBDaGFydC56b29tKHJh
bmdlcy54YXhpcy5mcm9tLCByYW5nZXMueGF4aXMudG8pOyB9KTsKLSAgICAgICAgICAgICAgICAk
KG92ZXJ2aWV3Q29udGFpbmVyKS5iaW5kKCJwbG90dW5zZWxlY3RlZCIsIGZ1bmN0aW9uICgpIHsg
Q2hhcnQuY2xlYXJab29tKG1pblRpbWUpIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoY3VycmVudFpvb20pCi0gICAgICAgICAgICAgICAgdGhpcy56b29tKGN1cnJlbnRab29t
LmZyb20sIGN1cnJlbnRab29tLnRvKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB0aGlzLmF0dGFjaE1haW5QbG90KG1pblRpbWUpOwotCi0gICAgICAgICAgICBpZiAoYmluZFBs
b3RFdmVudEhhbmRsZXJzKQotICAgICAgICAgICAgICAgIGJpbmRQbG90RXZlbnRIYW5kbGVycyh0
aGlzKTsKLSAgICAgICAgICAgIGJpbmRQbG90RXZlbnRIYW5kbGVycyA9IG51bGw7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgZnVuY3Rpb24gYmluZFBsb3RFdmVudEhhbmRsZXJzKGNoYXJ0KSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQ3Jvc3NoYWlyIHNob3VsZCBzdGF5IHdoZXJlIGl0IHdhcyBi
ZXR3ZWVuIGNoYXJ0cy4KLSAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgicGxvdGhv
dmVyIiwgZnVuY3Rpb24gKGV2ZW50LCBwb3MsIGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNoYXJ0cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2hhcnRzW2ldICE9PSBjaGFydCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hh
cnRzW2ldLnNldENyb3NzaGFpcihwb3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRz
W2ldLmhpZGVUb29sdGlwKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzRGFzaGJvYXJkKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBtYWluUGxvdC5nZXREYXRhKCk7
Ci0gICAgICAgICAgICAgICAgaXRlbSA9IGNsb3Nlc3RJdGVtRm9yUGFnZVhSZXNwZWN0aW5nUGxv
dE9mZnNldChpdGVtLCBtYWluUGxvdCwgZGF0YVtkYXRhLmxlbmd0aCAtIDFdLCBwb3MucGFnZVgp
OwotICAgICAgICAgICAgICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgc2hvd1Rvb2x0aXBXaXRoUmVzdWx0cyh0b29sdGlwLCBpdGVt
LnBhZ2VYLCBpdGVtLnBhZ2VZLCByZXN1bHRzLnJlc3VsdEF0KGl0ZW0uZGF0YUluZGV4KSwgcmVz
dWx0cy5yZXN1bHRBdChpdGVtLmRhdGFJbmRleCAtIDEpKTsKLSAgICAgICAgICAgICAgICB0b29s
dGlwLmN1cnJlbnRJdGVtID0gaXRlbTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAk
KHBsb3RDb250YWluZXIpLmJpbmQoIm1vdXNlbGVhdmUiLCBmdW5jdGlvbiAoZXZlbnQpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJChwbG90Q29udGFpbmVyKS5vZmZzZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAob2Zmc2V0LmxlZnQgPD0gZXZlbnQucGFnZVggJiYgb2Zmc2V0LnRv
cCA8PSBldmVudC5wYWdlWSAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICQocGxvdENv
bnRhaW5lcikub3V0ZXJXaWR0aCgpCi0gICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LnBhZ2VZ
IDw9IG9mZnNldC50b3AgKyAkKHBsb3RDb250YWluZXIpLm91dGVySGVpZ2h0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hhcnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJ0c1tpXS5j
bGVhckNyb3NzaGFpcigpOwotICAgICAgICAgICAgICAgICAgICBjaGFydHNbaV0uaGlkZVRvb2x0
aXAoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICBpZiAoaXNEYXNoYm9hcmQpIHsgLy8gRklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IGJlbG9uZyBo
ZXJlLgotICAgICAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgnY2xpY2snLCBmdW5j
dGlvbiAoZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgb3BlbkNoYXJ0KHJlc3VsdHMucGxh
dGZvcm0oKSwgcmVzdWx0cy5tZXRyaWMoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICQocGxvdENvbnRhaW5lcikuYmluZCgicGxv
dGNsaWNrIiwgZnVuY3Rpb24gKGV2ZW50LCBwb3MsIGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRvb2x0aXAuY3VycmVudEl0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2dn
bGVDbGlja1Rvb2x0aXAodG9vbHRpcC5jdXJyZW50SXRlbS5kYXRhSW5kZXgsIHRvb2x0aXAuY3Vy
cmVudEl0ZW0ucGFnZVgsIHRvb2x0aXAuY3VycmVudEl0ZW0ucGFnZVkpOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY2hhcnRzLnB1c2go
dGhpcyk7Ci0gICAgfQotCi0gICAgQ2hhcnQuY2xlYXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGNoYXJ0cyA9IFtdOwotICAgIH0KLQotICAgIENoYXJ0LnNldE1pblRpbWUgPSBmdW5jdGlvbiAo
bmV3TWluVGltZSkgewotICAgICAgICBtaW5UaW1lID0gbmV3TWluVGltZTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGFydHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBjaGFydHNb
aV0uYXR0YWNoKCk7Ci0gICAgfQotCi0gICAgQ2hhcnQub256b29tY2hhbmdlID0gZnVuY3Rpb24g
KGZyb20sIHRvKSB7IH07Ci0KLSAgICBDaGFydC56b29tID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7
Ci0gICAgICAgIGN1cnJlbnRab29tID0ge2Zyb206IGZyb20sIHRvOiB0b307Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hhcnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgY2hhcnRz
W2ldLnpvb20oZnJvbSwgdG8pOwotICAgICAgICB0aGlzLm9uem9vbWNoYW5nZShmcm9tLCB0byk7
Ci0gICAgfQotCi0gICAgQ2hhcnQuY2xlYXJab29tID0gZnVuY3Rpb24gKG1pblRpbWUpIHsKLSAg
ICAgICAgY3VycmVudFpvb20gPSB1bmRlZmluZWQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY2hhcnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgY2hhcnRzW2ldLmNsZWFyWm9vbSgp
OwotICAgICAgICB0aGlzLm9uem9vbWNoYW5nZSgpOwotICAgIH0KLQotICAgIHdpbmRvdy5DaGFy
dCA9IENoYXJ0OwotfSkoKTsKLQotLy8gRklYTUU6IFdlIG5lZWQgdG8gZGV2aXNlIGEgd2F5IHRv
IGZldGNoIHJ1bnMgaW4gbXVsdGlwbGUgY2h1bmtzIHNvIHRoYXQKLS8vIHdlIGRvbid0IGhhdmUg
dG8gZmV0Y2ggdGhlIGVudGlyZSB0aW1lIHNlcmllcyB0byBqdXN0IHNob3cgdGhlIGxhc3QgMyBk
YXlzLgotLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhIG1hc3MtZmV0Y2ggd2hlcmUgd2UgZmV0Y2gg
SlNPTnMgZm9yIG11bHRpcGxlIHJ1bnMgYXQgb25jZS4KLWZ1bmN0aW9uIGZldGNoVGVzdChyZXBv
c2l0b3JpZXMsIGJ1aWxkZXJzLCBmaWxlbmFtZSwgcGxhdGZvcm0sIG1ldHJpYywgY2FsbGJhY2sp
IHsKLQotICAgIGZ1bmN0aW9uIGNyZWF0ZVJ1bkFuZFJlc3VsdHMocmF3UnVucykgewotICAgICAg
ICBpZiAoIXJhd1J1bnMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIg
cnVucyA9IG5ldyBQZXJmVGVzdFJ1bnMobWV0cmljLCBwbGF0Zm9ybSk7Ci0gICAgICAgIHZhciBy
ZXN1bHRzID0gcmF3UnVucy5tYXAoZnVuY3Rpb24gKHJhd1J1bikgewotICAgICAgICAgICAgLy8g
RklYTUU6IENyZWF0aW5nIFBlcmZUZXN0UmVzdWx0IGFuZCBrZWVwaW5nIHRoZW0gYWxpdmUgaW4g
bWVtb3J5IGFsbCB0aGUgdGltZSBzZWVtcyBsaWtlIGEgdGVycmlibGUgaWRlYS4KLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBjcmVhdGUgUGVyZlRlc3RSZXN1bHQgb24gZGVtYW5kLgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBQZXJmVGVzdFJlc3VsdChydW5zLCByYXdSdW4sIG5ldyBUZXN0QnVp
bGQocmVwb3NpdG9yaWVzLCBidWlsZGVycywgcGxhdGZvcm0sIHJhd1J1bikpOwotICAgICAgICB9
KTsKLSAgICAgICAgcnVucy5zZXRSZXN1bHRzKHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYS5idWlsZCgpLnRpbWUoKSAtIGIuYnVpbGQoKS50aW1lKCk7IH0pKTsKLSAgICAg
ICAgcmV0dXJuIHJ1bnM7Ci0gICAgfQotCi0gICAgJC5nZXRKU09OKCdhcGkvcnVucy8nICsgZmls
ZW5hbWUgKyAnP2NhY2hlPXRydWUnLCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAgICAgICAgdmFy
IGRhdGEgPSByZXNwb25zZS5jb25maWd1cmF0aW9uczsKLSAgICAgICAgY2FsbGJhY2soY3JlYXRl
UnVuQW5kUmVzdWx0cyhkYXRhLmN1cnJlbnQpLCBjcmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEuYmFz
ZWxpbmUpLCBjcmVhdGVSdW5BbmRSZXN1bHRzKGRhdGEudGFyZ2V0KSk7Ci0gICAgfSk7Ci19Ci0K
LWZ1bmN0aW9uIGZpbGVOYW1lRnJvbVBsYXRmb3JtQW5kVGVzdChwbGF0Zm9ybUlkLCB0ZXN0SWQp
IHsKLSAgICByZXR1cm4gcGxhdGZvcm1JZCArICctJyArIHRlc3RJZCArICcuanNvbic7Ci19Ci0K
LWZ1bmN0aW9uIGluaXQoKSB7Ci0gICAgdmFyIGFsbFBsYXRmb3JtczsKLSAgICB2YXIgdGVzdHMg
PSBbXTsKLSAgICB2YXIgZnVsbE5hbWVUb01ldHJpYzsKLSAgICB2YXIgZGFzaGJvYXJkUGxhdGZv
cm1zOwotICAgIHZhciBydW5zQ2FjaGUgPSB7fTsgLy8gRklYTUU6IFdlIG5lZWQgdG8gY2xlYXIg
dGhpcyBjYWNoZSBhdCBzb21lIHBvaW50LgotICAgIHZhciByZXBvc2l0b3JpZXM7Ci0gICAgdmFy
IGJ1aWxkZXJzOwotICAgIHZhciBidWdUcmFja2VyczsKLQotICAgIC8vIEZJWE1FOiBTaG93IHNv
bWUgZXJyb3IgbWVzc2FnZSB3aGVuIHdlIGdldCA0MDQuCi0gICAgZnVuY3Rpb24gZ2V0T3JGZXRj
aFRlc3QocGxhdGZvcm0sIG1ldHJpYywgY2FsbGJhY2spIHsKLSAgICAgICAgdmFyIGZpbGVuYW1l
ID0gZmlsZU5hbWVGcm9tUGxhdGZvcm1BbmRUZXN0KHBsYXRmb3JtLmlkLCBtZXRyaWMuaWQpOwot
ICAgICAgICB2YXIgY2FjaGVzID0gcnVuc0NhY2hlW2ZpbGVuYW1lXTsKLQotICAgICAgICBpZiAo
Y2FjaGVzKQotICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNhbGxiYWNrKGNh
Y2hlcy5jdXJyZW50LCBjYWNoZXMuYmFzZWxpbmUsIGNhY2hlcy50YXJnZXQpOyB9LCAwKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmZXRjaFRlc3QocmVwb3NpdG9yaWVzLCBidWlsZGVy
cywgZmlsZW5hbWUsIHBsYXRmb3JtLCBtZXRyaWMsIGZ1bmN0aW9uIChjdXJyZW50LCBiYXNlbGlu
ZSwgdGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgcnVuc0NhY2hlW2ZpbGVuYW1lXSA9IHtjdXJy
ZW50OmN1cnJlbnQsIGJhc2VsaW5lOmJhc2VsaW5lLCB0YXJnZXQ6dGFyZ2V0fTsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFjayhjdXJyZW50LCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd0Rhc2hib2FyZCgpIHsK
LSAgICAgICAgdmFyIGRhc2hib2FyZFRhYmxlID0gJCgnPHRhYmxlIGlkPSJkYXNoYm9hcmQiPjwv
dGFibGU+Jyk7Ci0gICAgICAgICQoJyNtYWluQ29udGVudHMnKS5odG1sKGRhc2hib2FyZFRhYmxl
KTsKLQotICAgICAgICAvLyBTcGxpdCBkYXNoYm9hcmQgcGxhdGZvcm1zIGludG8gZ3JvdXBzIG9m
IHRocmVlIHNvIHRoYXQgaXQgZG9lc24ndCBncm93IGhvcml6b250YWxseSB0b28gbXVjaC4KLSAg
ICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhZGFwdGl2ZS4KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBNYXRoLmNlaWwoZGFzaGJvYXJkUGxhdGZvcm1zLmxlbmd0aCAvIDMpOyBpKyspCi0g
ICAgICAgICAgICBhZGRQbGF0Zm9ybXNUb0Rhc2hib2FyZChkYXNoYm9hcmRUYWJsZSwgZGFzaGJv
YXJkUGxhdGZvcm1zLnNsaWNlKGkgKiAzLCAoaSArIDEpICogMykpOwotCi0gICAgICAgIFVSTFN0
YXRlLnJlbW92ZSgnY2hhcnRMaXN0Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkUGxhdGZv
cm1zVG9EYXNoYm9hcmQoZGFzaGJvYXJkVGFibGUsIHNlbGVjdGVkUGxhdGZvcm1zKSB7Ci0gICAg
ICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aGVhZCcpOwotICAgICAg
ICBzZWxlY3RlZFBsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uIChwbGF0Zm9ybSkgewotICAgICAg
ICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpOwotICAgICAgICAg
ICAgJChjZWxsKS50ZXh0KHBsYXRmb3JtLm5hbWUpOwotICAgICAgICAgICAgaGVhZGVyLmFwcGVu
ZENoaWxkKGNlbGwpOwotICAgICAgICB9KTsKLSAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5k
KGhlYWRlcik7Ci0KLSAgICAgICAgdmFyIHRib2R5ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0Ym9keScpKTsKLSAgICAgICAgZGFzaGJvYXJkVGFibGUuYXBwZW5kKHRib2R5KTsKLSAgICAg
ICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7Ci0gICAgICAgIHRib2R5
LmFwcGVuZChyb3cpOwotCi0gICAgICAgIHNlbGVjdGVkUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rp
b24gKHBsYXRmb3JtKSB7Ci0gICAgICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RkJyk7Ci0gICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoY2VsbCk7Ci0KLSAgICAg
ICAgICAgIHBsYXRmb3JtLm1ldHJpY3MuZm9yRWFjaChmdW5jdGlvbiAobWV0cmljKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNoYXJ0ID0gbmV3IENoYXJ0KGNlbGwsIHRydWUsIHBsYXRmb3JtLCBt
ZXRyaWMsIGJ1Z1RyYWNrZXJzKTsKLSAgICAgICAgICAgICAgICBnZXRPckZldGNoVGVzdChwbGF0
Zm9ybSwgbWV0cmljLCBmdW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHJlbHkgb24gdGhlIG9yZGVy
IGluIHdoaWNoIFhIUiBmaW5pc2hlcyB0byBvcmRlciBwbG90cy4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGRhc2hib2FyZFRhYmxlLnBhcmVudCgpLmxlbmd0aCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhcnQucG9wdWxhdGUocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGFydC5hdHRhY2goKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHNob3dDaGFydHMobGlzdHMpIHsKLSAgICAgICAgdmFyIGNoYXJ0
c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKLSAgICAgICAg
Y2hhcnRzQ29udGFpbmVyLmlkID0gJ2NoYXJ0cyc7Ci0gICAgICAgICQoJyNtYWluQ29udGVudHMn
KS5odG1sKGNoYXJ0c0NvbnRhaW5lcik7Ci0KLSAgICAgICAgdmFyIHRlc3RQaWNrZXIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7Ci0gICAgICAgIHRlc3RQaWNrZXIuaWQgPSAn
dGVzdFBpY2tlcic7Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRkT3B0aW9uKHNlbGVjdCwgbGFiZWws
IHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnb3B0aW9uJyk7Ci0gICAgICAgICAgICBvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGFiZWwpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAg
ICAgICBvcHRpb24udmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGls
ZChvcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRlc3RMaXN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7Ci0gICAgICAgIHRlc3RMaXN0LmlkID0gJ3Rlc3RMaXN0
JzsKLSAgICAgICAgdGVzdFBpY2tlci5hcHBlbmRDaGlsZCh0ZXN0TGlzdCk7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0
ZXN0c1tpXS5wYXJlbnRUZXN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYWRkT3B0aW9uKHRlc3RMaXN0LCB0ZXN0c1tpXS5mdWxsTmFtZSwgdGVzdHNbaV0uaWQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG1ldHJpY0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzZWxlY3QnKTsKLSAgICAgICAgbWV0cmljTGlzdC5pZCA9ICdtZXRyaWNMaXN0JzsKLSAg
ICAgICAgdGVzdFBpY2tlci5hcHBlbmRDaGlsZChtZXRyaWNMaXN0KTsKLQotICAgICAgICB2YXIg
cGxhdGZvcm1MaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7Ci0gICAgICAg
IHBsYXRmb3JtTGlzdC5pZCA9ICdwbGF0Zm9ybUxpc3QnOwotICAgICAgICB0ZXN0UGlja2VyLmFw
cGVuZENoaWxkKHBsYXRmb3JtTGlzdCk7Ci0gICAgICAgIGNvbnN0IE9QVElPTl9WQUxVRV9GT1Jf
QUxMID0gJy0nOwotICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1MaXN0LCAnQWxsIHBsYXRmb3Jt
cycsIE9QVElPTl9WQUxVRV9GT1JfQUxMKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
bGxQbGF0Zm9ybXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhZGRPcHRpb24ocGxhdGZvcm1M
aXN0LCBhbGxQbGF0Zm9ybXNbaV0ubmFtZSk7Ci0KLSAgICAgICAgdGVzdExpc3Qub25jaGFuZ2Ug
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB3aGlsZSAobWV0cmljTGlzdC5maXJzdENoaWxk
KQotICAgICAgICAgICAgICAgIG1ldHJpY0xpc3QucmVtb3ZlQ2hpbGQobWV0cmljTGlzdC5maXJz
dENoaWxkKTsKLQotICAgICAgICAgICAgdmFyIG1ldHJpY3NHcm91cCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ29wdGdyb3VwJyk7Ci0gICAgICAgICAgICBtZXRyaWNzR3JvdXAubGFiZWwgPSAn
TWV0cmljcyc7Ci0gICAgICAgICAgICBtZXRyaWNMaXN0LmFwcGVuZENoaWxkKG1ldHJpY3NHcm91
cCk7Ci0gICAgICAgICAgICBhZGRPcHRpb24obWV0cmljc0dyb3VwLCAnQWxsIG1ldHJpY3MnLCBP
UFRJT05fVkFMVUVfRk9SX0FMTCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRl
c3RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RzW2ldLmlkID09IHRl
c3RMaXN0LnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRlc3QgPSB0
ZXN0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxlY3Rl
ZFRlc3QubWV0cmljcy5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGZ1bGxOYW1lID0gc2VsZWN0ZWRUZXN0Lm1ldHJpY3Nbal0uZnVsbE5hbWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVOYW1lID0gZnVsbE5hbWUucmVwbGFjZShzZWxlY3Rl
ZFRlc3QuZnVsbE5hbWUsICcnKS5yZXBsYWNlKC9eWzovXS8sICcnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE9wdGlvbihtZXRyaWNzR3JvdXAsIHJlbGF0aXZlTmFtZSwgZnVsbE5hbWUp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIHN1YnRlc3RzR3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdvcHRncm91cCcpOwotICAgICAgICAgICAgc3VidGVzdHNHcm91cC5sYWJlbCA9ICdUZXN0cyc7
Ci0gICAgICAgICAgICBtZXRyaWNMaXN0LmFwcGVuZENoaWxkKHN1YnRlc3RzR3JvdXApOwotICAg
ICAgICAgICAgYWRkT3B0aW9uKHN1YnRlc3RzR3JvdXAsICdBbGwgc3VidGVzdHMnLCBPUFRJT05f
VkFMVUVfRk9SX0FMTCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXS5wYXJlbnRUZXN0IHx8
IHRlc3RzW2ldLnBhcmVudFRlc3QuaWQgIT0gdGVzdExpc3QudmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHZhciBzdWJ0ZXN0ID0gdGVzdHNbaV07
Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkVGVzdCA9IHN1YnRlc3QucGFyZW50VGVzdDsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YnRlc3QubWV0cmljcy5sZW5n
dGg7ICsraikgewotICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbE5hbWUgPSBzdWJ0ZXN0Lm1l
dHJpY3Nbal0uZnVsbE5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU5hbWUg
PSBmdWxsTmFtZS5yZXBsYWNlKHNlbGVjdGVkVGVzdC5mdWxsTmFtZSwgJycpLnJlcGxhY2UoL15b
Oi9dLywgJycpOwotICAgICAgICAgICAgICAgICAgICBhZGRPcHRpb24oc3VidGVzdHNHcm91cCwg
cmVsYXRpdmVOYW1lLCBmdWxsTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIG1ldHJpY0xpc3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgbWV0cmljID0gZnVsbE5hbWVUb01ldHJpY1ttZXRyaWNMaXN0LnZh
bHVlXTsKLSAgICAgICAgICAgIHZhciBzaG91bGRBZGRBbGxNZXRyaWNzID0gbWV0cmljTGlzdC52
YWx1ZSA9PT0gT1BUSU9OX1ZBTFVFX0ZPUl9BTEw7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBsYXRmb3JtTGlzdC5vcHRpb25zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG9wdGlvbiA9IHBsYXRmb3JtTGlzdC5vcHRpb25zW2ldOwotICAgICAgICAgICAgICAg
IGlmIChvcHRpb24udmFsdWUgPT09IE9QVElPTl9WQUxVRV9GT1JfQUxMKSAvLyBBZGRpbmcgYWxs
IG1ldHJpY3MgZm9yIGFsbCBwbGF0Zm9ybXMgd2lsbCBiZSB0b28gc2xvdy4KLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gc2hvdWxkQWRkQWxsTWV0cmljczsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmFtZVRv
UGxhdGZvcm1bb3B0aW9uLnZhbHVlXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3Jt
SGFzTWV0cmljID0gcGxhdGZvcm0ubWV0cmljcy5pbmRleE9mKG1ldHJpYykgPj0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gIXNob3VsZEFkZEFsbE1ldHJpY3MgJiYg
IXBsYXRmb3JtSGFzTWV0cmljOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICB0ZXN0TGlzdC5vbmNoYW5nZSgpOwotICAgICAgICBtZXRyaWNMaXN0
Lm9uY2hhbmdlKCk7Ci0KLSAgICAgICAgJCh0ZXN0UGlja2VyKS5hcHBlbmQoJyA8YSBocmVmPSIi
PkFkZCBDaGFydDwvYT4nKTsKLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVDaGFydChjaGFydCkg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFydExpc3QubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcnRMaXN0W2ldWzBdID09IGNoYXJ0LnBsYXRmb3Jt
KCkubmFtZSAmJiBjaGFydExpc3RbaV1bMV0gPT0gY2hhcnQubWV0cmljKCkuZnVsbE5hbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2hhcnRMaXN0LnNwbGljZShpLCAxKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgVVJMU3RhdGUuc2V0KCdjaGFydExpc3QnLCBKU09OLnN0cmluZ2lmeShjaGFydExpc3Qp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0RnJvbUxpc3RQYWly
KHBsYXRmb3JtTmFtZSwgbWV0cmljRnVsbE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBwbGF0Zm9y
bSA9IG5hbWVUb1BsYXRmb3JtW3BsYXRmb3JtTmFtZV07Ci0gICAgICAgICAgICB2YXIgbWV0cmlj
ID0gZnVsbE5hbWVUb01ldHJpY1ttZXRyaWNGdWxsTmFtZV0KLSAgICAgICAgICAgIHZhciBjaGFy
dCA9IG5ldyBDaGFydChjaGFydHNDb250YWluZXIsIGZhbHNlLCBwbGF0Zm9ybSwgbWV0cmljLCBi
dWdUcmFja2VycywgcmVtb3ZlQ2hhcnQpOwotCi0gICAgICAgICAgICBnZXRPckZldGNoVGVzdChw
bGF0Zm9ybSwgbWV0cmljLCBmdW5jdGlvbiAocmVzdWx0cywgYmFzZWxpbmUsIHRhcmdldCkgewot
ICAgICAgICAgICAgICAgIGlmICghY2hhcnRzQ29udGFpbmVyLnBhcmVudE5vZGUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjaGFydC5wb3B1bGF0ZShyZXN1
bHRzLCBiYXNlbGluZSwgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBjaGFydC5hdHRhY2goKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgJCh0ZXN0UGlja2VyKS5jaGls
ZHJlbignYScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotCi0gICAgICAgICAgICB2YXIgbmV3Q2hhcnRMaXN0ID0g
W107Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm1MaXN0LnZhbHVlID09PSBPUFRJT05fVkFMVUVf
Rk9SX0FMTCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUGxhdGZv
cm1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoYXJ0RnJvbUxp
c3RQYWlyKGFsbFBsYXRmb3Jtc1tpXS5uYW1lLCBtZXRyaWNMaXN0LnZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3Q2hhcnRMaXN0LnB1c2goW2FsbFBsYXRmb3Jtc1tpXS5uYW1lLCBtZXRy
aWNMaXN0LnZhbHVlXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlm
IChtZXRyaWNMaXN0LnZhbHVlID09PSBPUFRJT05fVkFMVUVfRk9SX0FMTCkgewotICAgICAgICAg
ICAgICAgIHZhciBncm91cCA9IG1ldHJpY0xpc3Quc2VsZWN0ZWRPcHRpb25zWzBdLnBhcmVudE5v
ZGU7Ci0gICAgICAgICAgICAgICAgdmFyIG1ldHJpY3NUb0FkZCA9IFtdOwotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IGdyb3VwLmNoaWxkcmVuW2ldLnZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobWV0cmljID09IE9QVElPTl9WQUxVRV9GT1JfQUxMKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZUNoYXJ0RnJvbUxpc3RQYWlyKHBsYXRmb3JtTGlzdC52YWx1ZSwgbWV0cmljKTsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q2hhcnRMaXN0LnB1c2goW3BsYXRmb3JtTGlzdC52YWx1ZSwgbWV0
cmljXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjcmVhdGVDaGFydEZyb21MaXN0UGFpcihwbGF0Zm9ybUxpc3QudmFsdWUsIG1ldHJp
Y0xpc3QudmFsdWUpOwotICAgICAgICAgICAgICAgIG5ld0NoYXJ0TGlzdC5wdXNoKFtwbGF0Zm9y
bUxpc3QudmFsdWUsIG1ldHJpY0xpc3QudmFsdWVdKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY2hhcnRMaXN0ID0gY2hhcnRMaXN0LmNvbmNhdChuZXdDaGFydExpc3QpOwotICAgICAg
ICAgICAgVVJMU3RhdGUuc2V0KCdjaGFydExpc3QnLCBKU09OLnN0cmluZ2lmeShjaGFydExpc3Qp
KTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICAk
KCcjbWFpbkNvbnRlbnRzJykuYXBwZW5kKHRlc3RQaWNrZXIpOwotCi0gICAgICAgIHZhciBjaGFy
dExpc3QgPSBbXTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNoYXJ0TGlzdCA9IEpTT04u
cGFyc2UoVVJMU3RhdGUuZ2V0KCdjaGFydExpc3QnLCAnJykpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSB2ZXJpZnkgdGhhdCBwbGF0Zm9ybSBhbmQgdGVzdCBuYW1lcyBhcmUgdmFs
aWQgaGVyZT8KLSAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJ
Z25vcmUgYW55IGV4Y2VwdGlvbiB0aHJvd24gYnkgcGFyc2UuCi0gICAgICAgIH0KLQotICAgICAg
ICByZWRpcmVjdENoYXJ0c1RvVjMoY2hhcnRMaXN0KTsKLQotICAgICAgICBjaGFydExpc3QuZm9y
RWFjaChmdW5jdGlvbiAoaXRlbSkgeyBjcmVhdGVDaGFydEZyb21MaXN0UGFpcihpdGVtWzBdLCBp
dGVtWzFdKTsgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVkaXJlY3RDaGFydHNUb1YzKGNo
YXJ0TGlzdCkKLSAgICB7Ci0gICAgICAgIHZhciB2M1VSTFBhcmFtcyA9IFtdOwotICAgICAgICB2
YXIgbnVtYmVyT2ZEYXlzID0gVVJMU3RhdGUuZ2V0KCdkYXlzJyk7Ci0gICAgICAgIGlmIChwYXJz
ZUludChudW1iZXJPZkRheXMpID09IG51bWJlck9mRGF5cykKLSAgICAgICAgICAgIHYzVVJMUGFy
YW1zLnB1c2goJ3NpbmNlPScgKyAoK0RhdGUubm93KCkgLSBudW1iZXJPZkRheXMgKiAyNCAqIDM2
MDAgKiAxMDAwKSk7Ci0KLSAgICAgICAgdmFyIHYzUGFuZUxpc3QgPSBbXTsKLSAgICAgICAgZm9y
ICh2YXIgaXRlbSBvZiBjaGFydExpc3QpIHsKLSAgICAgICAgICAgIHZhciBwbGF0Zm9ybSA9IG5h
bWVUb1BsYXRmb3JtW2l0ZW1bMF1dOwotICAgICAgICAgICAgdmFyIG1ldHJpYyA9IGZ1bGxOYW1l
VG9NZXRyaWNbaXRlbVsxXV07Ci0gICAgICAgICAgICBpZiAocGxhdGZvcm0gJiYgbWV0cmljKQot
ICAgICAgICAgICAgICAgIHYzUGFuZUxpc3QucHVzaChgKCR7cGxhdGZvcm0uaWR9LSR7bWV0cmlj
LmlkfSlgKTsKLSAgICAgICAgfQotICAgICAgICB2M1VSTFBhcmFtcy5wdXNoKGBwYW5lTGlzdD0o
JHt2M1BhbmVMaXN0LmpvaW4oJy0nKX0pYCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHZhciB6b29tVmFsdWVzID0gSlNPTi5wYXJzZShVUkxTdGF0ZS5nZXQoJ3pvb20nLCAnW10nKSk7
Ci0gICAgICAgICAgICBpZiAoem9vbVZhbHVlcy5sZW5ndGggPT0gMikKLSAgICAgICAgICAgICAg
ICB2M1VSTFBhcmFtcy5wdXNoKGB6b29tPSgke3pvb21WYWx1ZXNbMF19LSR7em9vbVZhbHVlc1sx
XX0pYCk7Ci0gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH0KLQotICAgICAgICBsb2NhdGlvbi5o
cmVmID0gJy92My8jL2NoYXJ0cz8nICsgdjNVUkxQYXJhbXMuam9pbignJicpOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIGV4cG9uZW50aWFsIHNsaWRlciBmb3IgY2hhcnRz
IHBhZ2Ugd2hlcmUgd2UgZXhwZWN0IHRvIGhhdmUKLSAgICAvLyB0aGUgZnVsbCBKU09OIGFzIG9w
cG9zZWQgdG8gdGhlIGRhc2hib2FyZCB3aGVyZSB3ZSBjYW4ndCBhZmZvcmQgbG9hZGluZyByZWFs
bHkgYmlnIEpTT04gZmlsZXMuCi0gICAgdmFyIGV4cG9uZW50aWFsID0gdHJ1ZTsKLSAgICAoZnVu
Y3Rpb24gKCkgewotICAgICAgICB2YXIgaW5wdXQgPSAkKCcjbnVtYmVyT2ZEYXlzJylbMF07Ci0g
ICAgICAgIHZhciB1cGRhdGluZyA9IDA7Ci0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNwYW5BbmRD
YWxsKG5ld051bWJlck9mRGF5cykgewotICAgICAgICAgICAgJCgnI251bWJlck9mRGF5cycpLm5l
eHQoKS50ZXh0KG5ld051bWJlck9mRGF5cyArICcgZGF5cycpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgbGlrZWx5IGJyb2tlbiBmb3Igbm9uLVBTVC4KLSAgICAgICAgICAgIENoYXJ0
LnNldE1pblRpbWUoRGF0ZS5ub3coKSAtIG5ld051bWJlck9mRGF5cyAqIDI0ICogMzYwMCAqIDEw
MDApOwotICAgICAgICB9Ci0gICAgICAgICQoJyNudW1iZXJPZkRheXMnKS5iaW5kKCdjaGFuZ2Un
LCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbmV3TnVtYmVyT2ZEYXlzID0gTWF0aC5y
b3VuZChleHBvbmVudGlhbCA/IE1hdGguZXhwKGlucHV0LnZhbHVlKSA6IGlucHV0LnZhbHVlKTsK
LSAgICAgICAgICAgIFVSTFN0YXRlLnJlbW92ZSgnem9vbScpOwotICAgICAgICAgICAgQ2hhcnQu
Y2xlYXJab29tKCk7Ci0gICAgICAgICAgICBVUkxTdGF0ZS5zZXQoJ2RheXMnLCBuZXdOdW1iZXJP
ZkRheXMpOwotICAgICAgICAgICAgdXBkYXRlU3BhbkFuZENhbGwobmV3TnVtYmVyT2ZEYXlzKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIGZ1bmN0aW9uIG9uY2hhbmdlKCkgewotICAgICAgICAgICAg
dmFyIG5ld051bWJlck9mRGF5cyA9IFVSTFN0YXRlLmdldCgnZGF5cycsIE1hdGgucm91bmQoZXhw
b25lbnRpYWwgPyBNYXRoLmV4cChpbnB1dC5kZWZhdWx0VmFsdWUpIDogaW5wdXQuZGVmYXVsdFZh
bHVlKSk7Ci0gICAgICAgICAgICAkKCcjbnVtYmVyT2ZEYXlzJykudmFsKGV4cG9uZW50aWFsID8g
TWF0aC5sb2cobmV3TnVtYmVyT2ZEYXlzKSA6IG5ld051bWJlck9mRGF5cyk7Ci0gICAgICAgICAg
ICB1cGRhdGVTcGFuQW5kQ2FsbChuZXdOdW1iZXJPZkRheXMpOwotICAgICAgICB9Ci0gICAgICAg
IFVSTFN0YXRlLndhdGNoKCdkYXlzJywgb25jaGFuZ2UpOwotICAgICAgICBvbmNoYW5nZSgpOwot
ICAgIH0pKCk7Ci0KLSAgICBVUkxTdGF0ZS53YXRjaCgnbW9kZScsIGZ1bmN0aW9uICgpIHsgc2V0
TW9kZShVUkxTdGF0ZS5nZXQoJ21vZGUnKSk7IH0pOwotICAgIFVSTFN0YXRlLndhdGNoKCdjaGFy
dExpc3QnLCBmdW5jdGlvbiAoY2hhbmdlZFN0YXRlcykgewotICAgICAgICB2YXIgbW9kZUNoYW5n
ZWQgPSBjaGFuZ2VkU3RhdGVzLmluZGV4T2YoJ21vZGUnKSA+PSAwOwotICAgICAgICBpZiAoVVJM
U3RhdGUuZ2V0KCdtb2RlJykgPT0gJ2NoYXJ0cycgJiYgIW1vZGVDaGFuZ2VkKQotICAgICAgICAg
ICAgc2V0TW9kZSgnY2hhcnRzJyk7Ci0gICAgfSk7Ci0KLSAgICBmdW5jdGlvbiB6b29tQ2hhcnRz
SWZQYXJzZWRDb3JyZWN0bHkoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB6b29tVmFs
dWVzID0gSlNPTi5wYXJzZShVUkxTdGF0ZS5nZXQoJ3pvb20nLCAnW10nKSk7Ci0gICAgICAgICAg
ICBpZiAoem9vbVZhbHVlcy5sZW5ndGggIT0gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDaGFydC56b29tKHBhcnNlRmxvYXQoem9vbVZhbHVlc1swXSksIHBh
cnNlRmxvYXQoem9vbVZhbHVlc1sxXSkpOwotICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsK
LSAgICAgICAgICAgIC8vIElnbm9yZSBhbGwgZXhjZXB0aW9ucyB0aHJvd24gYnkgSlNPTi5wYXJz
ZS4KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBVUkxTdGF0
ZS53YXRjaCgnem9vbScsIGZ1bmN0aW9uIChjaGFuZ2VkU3RhdGVzKSB7Ci0gICAgICAgIHZhciBt
b2RlQ2hhbmdlZCA9IGNoYW5nZWRTdGF0ZXMuaW5kZXhPZignbW9kZScpID49IDA7Ci0gICAgICAg
IGlmIChVUkxTdGF0ZS5nZXQoJ21vZGUnKSA9PSAnY2hhcnRzJyAmJiAhbW9kZUNoYW5nZWQpIHsK
LSAgICAgICAgICAgIGlmICghem9vbUNoYXJ0c0lmUGFyc2VkQ29ycmVjdGx5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENoYXJ0LmNsZWFyWm9vbSgpOwotICAgICAgICB9Ci0gICAgfSk7Ci0K
LSAgICBDaGFydC5vbnpvb21jaGFuZ2UgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKLSAgICAgICAg
aWYgKGZyb20gJiYgdG8pCi0gICAgICAgICAgICBVUkxTdGF0ZS5zZXQoJ3pvb20nLCBKU09OLnN0
cmluZ2lmeShbZnJvbSwgdG9dKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFVSTFN0YXRl
LnJlbW92ZSgnem9vbScpOwotICAgIH0KLQotICAgIHdpbmRvdy5vcGVuQ2hhcnQgPSBmdW5jdGlv
biAocGxhdGZvcm0sIG1ldHJpYykgewotICAgICAgICBVUkxTdGF0ZS5zZXQoJ2NoYXJ0TGlzdCcs
IEpTT04uc3RyaW5naWZ5KFtbcGxhdGZvcm0ubmFtZSwgbWV0cmljLmZ1bGxOYW1lXV0pKTsKLSAg
ICAgICAgc2V0TW9kZSgnY2hhcnRzJyk7Ci0gICAgfQotCi0gICAgd2luZG93LnNldE1vZGUgPSBm
dW5jdGlvbiAobmV3TW9kZSkgewotICAgICAgICBVUkxTdGF0ZS5zZXQoJ21vZGUnLCBuZXdNb2Rl
KTsKLQotICAgICAgICBDaGFydC5jbGVhcigpOwotICAgICAgICBpZiAobmV3TW9kZSA9PSAnZGFz
aGJvYXJkJykgewotICAgICAgICAgICAgVVJMU3RhdGUucmVtb3ZlKCd6b29tJyk7Ci0gICAgICAg
ICAgICBDaGFydC5jbGVhclpvb20oKTsKLSAgICAgICAgICAgIHNob3dEYXNoYm9hcmQoKTsKLSAg
ICAgICAgfSBlbHNlIHsgLy8gRklYTUU6IER5bmFtaWNhbGx5IG9idGFpbiB0aGUgbGlzdCBvZiB0
ZXN0cyB0byBzaG93LgotICAgICAgICAgICAgc2hvd0NoYXJ0cygpOwotICAgICAgICAgICAgem9v
bUNoYXJ0c0lmUGFyc2VkQ29ycmVjdGx5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBmdWxsTmFtZSh0ZXN0KSB7Ci0gICAgICAgIHZhciBuYW1lcyA9IFtdOwotICAgICAgICBk
byB7Ci0gICAgICAgICAgICBuYW1lcy5wdXNoKHRlc3QubmFtZSk7Ci0gICAgICAgICAgICB0ZXN0
ID0gdGVzdC5wYXJlbnRUZXN0OwotICAgICAgICB9IHdoaWxlICh0ZXN0KTsKLSAgICAgICAgbmFt
ZXMucmV2ZXJzZSgpOwotICAgICAgICByZXR1cm4gbmFtZXMuam9pbignLycpOwotICAgIH0KLQot
ICAgIC8vIFBlcmhhcHMgd2Ugd2FudCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGxhdGZvcm1zLgotICAg
ICQuZ2V0SlNPTignZGF0YS9tYW5pZmVzdC5qc29uJywgZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAg
ICAgdmFyIG1hbmlmZXN0ID0gZGF0YTsKLQotICAgICAgICBuYW1lVG9UZXN0ID0ge307Ci0gICAg
ICAgIGZvciAodmFyIHRlc3RJZCBpbiBtYW5pZmVzdC50ZXN0cykgewotICAgICAgICAgICAgdmFy
IHRlc3QgPSBtYW5pZmVzdC50ZXN0c1t0ZXN0SWRdOwotICAgICAgICAgICAgdGVzdC5wYXJlbnRU
ZXN0ID0gbWFuaWZlc3QudGVzdHNbbWFuaWZlc3QudGVzdHNbdGVzdElkXS5wYXJlbnRJZF07Ci0g
ICAgICAgICAgICB0ZXN0LmlkID0gdGVzdElkOwotICAgICAgICAgICAgdGVzdC5tZXRyaWNzID0g
W107Ci0gICAgICAgICAgICB0ZXN0cy5wdXNoKHRlc3QpOwotICAgICAgICB9Ci0gICAgICAgIHRl
c3RzLmZvckVhY2goZnVuY3Rpb24gKHRlc3QpIHsKLSAgICAgICAgICAgIHRlc3QuZnVsbE5hbWUg
PSBmdWxsTmFtZSh0ZXN0KTsKLSAgICAgICAgICAgIG5hbWVUb1Rlc3RbdGVzdC5mdWxsTmFtZV0g
PSB0ZXN0OwotICAgICAgICB9KTsKLSAgICAgICAgdGVzdHMuc29ydChmdW5jdGlvbiAoYSwgYikg
ewotICAgICAgICAgICAgaWYgKGEuZnVsbE5hbWUgPCBiLmZ1bGxOYW1lKQotICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChhLmZ1bGxOYW1lID4gYi5mdWxsTmFtZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9KTsKLQotICAgICAgICBmdWxsTmFtZVRvTWV0cmljID0ge307Ci0gICAgICAgIGZvciAodmFy
IG1ldHJpY0lkIGluIG1hbmlmZXN0Lm1ldHJpY3MpIHsKLSAgICAgICAgICAgIHZhciBlbnRyeSA9
IG1hbmlmZXN0Lm1ldHJpY3NbbWV0cmljSWRdOwotICAgICAgICAgICAgZW50cnkuaWQgPSBtZXRy
aWNJZDsKLSAgICAgICAgICAgIGVudHJ5LnRlc3QgPSBtYW5pZmVzdC50ZXN0c1tlbnRyeS50ZXN0
XTsKLSAgICAgICAgICAgIGVudHJ5LmZ1bGxOYW1lID0gZW50cnkudGVzdC5mdWxsTmFtZSArICc6
JyArIGVudHJ5Lm5hbWU7Ci0gICAgICAgICAgICBpZiAoZW50cnkuYWdncmVnYXRvcikKLSAgICAg
ICAgICAgICAgICBlbnRyeS5mdWxsTmFtZSArPSAnOicgKyBlbnRyeS5hZ2dyZWdhdG9yOwotICAg
ICAgICAgICAgZW50cnkudGVzdC5tZXRyaWNzLnB1c2goZW50cnkpOwotICAgICAgICAgICAgZnVs
bE5hbWVUb01ldHJpY1tlbnRyeS5mdWxsTmFtZV0gPSBlbnRyeTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRlc3RzLmZvckVhY2goZnVuY3Rpb24gKHRlc3QpIHsKLSAgICAgICAgICAgIHRlc3QubWV0
cmljcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA8
IGIubmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg
IGlmIChhLm5hbWUgPiBiLm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIGFsbFBsYXRmb3JtcyA9IFtdOwotICAgICAgICBuYW1lVG9QbGF0Zm9ybSA9IHt9Owot
ICAgICAgICBmb3IgKHZhciBwbGF0Zm9ybUlkIGluIG1hbmlmZXN0LmFsbCkgewotICAgICAgICAg
ICAgdmFyIHBsYXRmb3JtID0gbWFuaWZlc3QuYWxsW3BsYXRmb3JtSWRdOwotICAgICAgICAgICAg
cGxhdGZvcm0uaWQgPSBwbGF0Zm9ybUlkOwotICAgICAgICAgICAgYWxsUGxhdGZvcm1zLnB1c2go
cGxhdGZvcm0pOwotICAgICAgICAgICAgbmFtZVRvUGxhdGZvcm1bcGxhdGZvcm0ubmFtZV0gPSBw
bGF0Zm9ybTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb3J0IHRlc3RzCi0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBsYXRmb3JtLm1ldHJpY3MubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgcGxhdGZvcm0ubWV0cmljc1tpXSA9IG1hbmlmZXN0Lm1ldHJpY3NbcGxhdGZvcm0u
bWV0cmljc1tpXV07Ci0gICAgICAgIH0KLSAgICAgICAgYWxsUGxhdGZvcm1zLnNvcnQoZnVuY3Rp
b24gKGEsIGIpIHsgcmV0dXJuIGEubmFtZSA8IGIubmFtZSA/IC0xIDogKGEubmFtZSA+IGIubmFt
ZSA/IDEgOiAwKTsgfSk7Ci0KLSAgICAgICAgZGFzaGJvYXJkUGxhdGZvcm1zID0gW107Ci0gICAg
ICAgIGZvciAodmFyIHBsYXRmb3JtSWQgaW4gbWFuaWZlc3QuZGFzaGJvYXJkKSB7Ci0gICAgICAg
ICAgICB2YXIgcGxhdGZvcm0gPSBtYW5pZmVzdC5kYXNoYm9hcmRbcGxhdGZvcm1JZF07Ci0gICAg
ICAgICAgICBwbGF0Zm9ybS5pZCA9IHBsYXRmb3JtSWQ7Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBsYXRmb3JtLm1ldHJpY3MubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAg
cGxhdGZvcm0ubWV0cmljc1tpXSA9IG1hbmlmZXN0Lm1ldHJpY3NbcGxhdGZvcm0ubWV0cmljc1tp
XV07Ci0gICAgICAgICAgICBwbGF0Zm9ybS5tZXRyaWNzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEuZnVsbE5hbWUgPCBiLmZ1bGxOYW1lID8gLTEgOiAoYS5mdWxsTmFtZSA+IGIuZnVs
bE5hbWUgPyAxIDogMCk7IH0pOwotICAgICAgICAgICAgZGFzaGJvYXJkUGxhdGZvcm1zLnB1c2go
bWFuaWZlc3QuZGFzaGJvYXJkW3BsYXRmb3JtSWRdKTsKLSAgICAgICAgfQotICAgICAgICBkYXNo
Ym9hcmRQbGF0Zm9ybXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5uYW1lIDwgYi5u
YW1lID8gLTEgOiAoYS5uYW1lID4gYi5uYW1lID8gMSA6IDApOyB9KTsKLQotICAgICAgICByZXBv
c2l0b3JpZXMgPSBtYW5pZmVzdC5yZXBvc2l0b3JpZXM7Ci0gICAgICAgIGJ1aWxkZXJzID0gbWFu
aWZlc3QuYnVpbGRlcnM7Ci0gICAgICAgIGJ1Z1RyYWNrZXJzID0gbWFuaWZlc3QuYnVnVHJhY2tl
cnM7Ci0KLSAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBtYW5pZmVzdC5zaXRlVGl0bGU7Ci0gICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaXRlVGl0bGUnKS50ZXh0Q29udGVudCA9IG1h
bmlmZXN0LnNpdGVUaXRsZTsKLQotICAgICAgICBzZXRNb2RlKFVSTFN0YXRlLmdldCgnbW9kZScs
ICdkYXNoYm9hcmQnKSk7Ci0gICAgfSk7Ci19Ci0KLXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdE
T01Db250ZW50TG9hZGVkJywgaW5pdCwgZmFsc2UpOwotCiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxi
b2R5PgotCi08aGVhZGVyIGlkPSJ0aXRsZSI+Ci08aDE+PGEgaWQ9InNpdGVUaXRsZSIgaHJlZj0i
LyI+UGVyZiBNb25pdG9yPC9hPjwvaDE+Ci08dWw+Ci0gICAgPGxpIGlkPSJudW1iZXJPZkRheXNQ
aWNrZXIiPjxpbnB1dCBpZD0ibnVtYmVyT2ZEYXlzIiB0eXBlPSJyYW5nZSIgbWluPSIxIiBtYXg9
IjUuOSIgc3RlcD0iMC4wMDEiIHZhbHVlPSIyLjMiPjxzcGFuIGNsYXNzPSJvdXRwdXQiPjwvc3Bh
bj48L2xpPgotICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnNldE1vZGUoJ2Rhc2hib2FyZCcp
OyI+RGFzaGJvYXJkPC9hPjwvbGk+Ci0gICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0TW9k
ZSgnY2hhcnRzJyk7Ij5DaGFydHM8L2E+PC9saT4KLTwvdWw+Ci08L2hlYWRlcj4KLQotPGRpdiBp
ZD0ibWFpbkNvbnRlbnRzIj48L2Rpdj4KK1JlZGlyZWN0aW5nIHRvIHYzIFVJLi4uCiA8L2JvZHk+
CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pz
L2hlbHBlci1jbGFzc2VzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9o
ZWxwZXItY2xhc3Nlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU4OTllYmQx
ODQzYmJiMDdiYzMxMDdiYjlmZWU4NWJhMTVjOTNhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pz
L2hlbHBlci1jbGFzc2VzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLQotLy8g
QSBwb2ludCBpbiBhIHBsb3QuCi1mdW5jdGlvbiBQZXJmVGVzdFJlc3VsdChydW5zLCByZXN1bHQs
IGFzc29jaWF0ZWRCdWlsZCkgewotICAgIHRoaXMubWV0cmljID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcnVucy5tZXRyaWMoKTsgfQotICAgIHRoaXMudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1
cm4gcmVzdWx0LnZhbHVlcyA/IHJlc3VsdC52YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyBy
ZXR1cm4gcnVucy5zY2FsaW5nRmFjdG9yKCkgKiB2YWx1ZTsgfSkgOiB1bmRlZmluZWQ7IH0KLSAg
ICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBydW5zLnNjYWxpbmdGYWN0b3IoKSAq
IHJlc3VsdC5tZWFuOyB9Ci0gICAgdGhpcy51bnNjYWxlZE1lYW4gPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiByZXN1bHQubWVhbjsgfQotICAgIHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiBydW5zLnNjYWxpbmdGYWN0b3IoKSAqIHRoaXMu
dW5zY2FsZWRDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgpOwotICAgIH0KLSAgICB0aGlzLnVuc2Nh
bGVkQ29uZmlkZW5jZUludGVydmFsRGVsdGEgPSBmdW5jdGlvbiAoZGVmYXVsdFZhbHVlKSB7Ci0g
ICAgICAgIHZhciBkZWx0YSA9IFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVydmFsRGVsdGEoMC45
NSwgcmVzdWx0Lml0ZXJhdGlvbkNvdW50LCByZXN1bHQuc3VtLCByZXN1bHQuc3F1YXJlU3VtKTsK
LSAgICAgICAgaWYgKGlzTmFOKGRlbHRhKSAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkK
LSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgICAgIHJldHVybiBkZWx0YTsK
LSAgICB9Ci0gICAgdGhpcy5pc0luVW5zY2FsZWRJbnRlcnZhbCA9IGZ1bmN0aW9uIChtaW4sIG1h
eCkgewotICAgICAgICB2YXIgbWVhbiA9IHRoaXMudW5zY2FsZWRNZWFuKCk7Ci0gICAgICAgIHZh
ciBkZWx0YSA9IHRoaXMudW5zY2FsZWRDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwKTsKLSAgICAg
ICAgcmV0dXJuIG1pbiA8PSBtZWFuIC0gZGVsdGEgJiYgbWVhbiArIGRlbHRhIDw9IG1heDsKLSAg
ICB9Ci0gICAgdGhpcy5pc0JldHRlclRoYW4gPSBmdW5jdGlvbihvdGhlcikgeyByZXR1cm4gcnVu
cy5zbWFsbGVySXNCZXR0ZXIoKSA9PSAodGhpcy5tZWFuKCkgPCBvdGhlci5tZWFuKCkpOyB9Ci0g
ICAgdGhpcy5yZWxhdGl2ZURpZmZlcmVuY2UgPSBmdW5jdGlvbihvdGhlcikgeyByZXR1cm4gKG90
aGVyLm1lYW4oKSAtIHRoaXMubWVhbigpKSAvIHRoaXMubWVhbigpOyB9Ci0gICAgdGhpcy5mb3Jt
YXR0ZWRSZWxhdGl2ZURpZmZlcmVuY2UgPSBmdW5jdGlvbiAob3RoZXIpIHsgcmV0dXJuIE1hdGgu
YWJzKHRoaXMucmVsYXRpdmVEaWZmZXJlbmNlKG90aGVyKSAqIDEwMCkudG9GaXhlZCgyKSArICcl
JzsgfQotICAgIHRoaXMuZm9ybWF0dGVkUHJvZ3Jlc3Npb25PclJlZ3Jlc3Npb24gPSBmdW5jdGlv
biAocHJldmlvdXNSZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzUmVzdWx0LmZvcm1h
dHRlZFJlbGF0aXZlRGlmZmVyZW5jZSh0aGlzKSArICcgJyArICh0aGlzLmlzQmV0dGVyVGhhbihw
cmV2aW91c1Jlc3VsdCkgPyAnYmV0dGVyJyA6ICd3b3JzZScpOwotICAgIH0KLSAgICB0aGlzLmlz
U3RhdGlzdGljYWxseVNpZ25pZmljYW50ID0gZnVuY3Rpb24gKG90aGVyKSB7Ci0gICAgICAgIHZh
ciBkaWZmID0gTWF0aC5hYnMob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkpOwotICAgICAgICBy
ZXR1cm4gZGlmZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZmID4gb3Ro
ZXIuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKTsKLSAgICB9Ci0gICAgdGhpcy5idWlsZCA9IGZ1
bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRCdWlsZDsgfQotICAgIHRoaXMubGFiZWwgPSBm
dW5jdGlvbiAocHJldmlvdXNSZXN1bHQpIHsKLSAgICAgICAgdmFyIG1lYW4gPSB0aGlzLm1lYW4o
KTsKLSAgICAgICAgdmFyIGxhYmVsID0gbWVhbi50b1ByZWNpc2lvbig0KSArICcgJyArIHJ1bnMu
dW5pdCgpOwotCi0gICAgICAgIHZhciBkZWx0YSA9IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVs
dGEoKTsKLSAgICAgICAgaWYgKGRlbHRhKSB7Ci0gICAgICAgICAgICB2YXIgcGVyY2VudGFnZVN0
ZGV2ID0gZGVsdGEgKiAxMDAgLyBtZWFuOwotICAgICAgICAgICAgbGFiZWwgKz0gJyAmcGx1c21u
OyAnICsgcGVyY2VudGFnZVN0ZGV2LnRvRml4ZWQoMikgKyAnJSc7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocHJldmlvdXNSZXN1bHQpCi0gICAgICAgICAgICBsYWJlbCArPSAnICgnICsgdGhp
cy5mb3JtYXR0ZWRQcm9ncmVzc2lvbk9yUmVncmVzc2lvbihwcmV2aW91c1Jlc3VsdCkgKyAnKSc7
Ci0KLSAgICAgICAgcmV0dXJuIGxhYmVsOwotICAgIH0KLX0KLQotZnVuY3Rpb24gVGVzdEJ1aWxk
KHJlcG9zaXRvcmllcywgYnVpbGRlcnMsIHBsYXRmb3JtLCByYXdSdW4pIHsKLSAgICBjb25zdCBy
ZXZpc2lvbnMgPSByYXdSdW4ucmV2aXNpb25zOwotICAgIHZhciBtYXhUaW1lID0gMDsKLSAgICB2
YXIgcmV2aXNpb25Db3VudCA9IDA7Ci0gICAgZm9yICh2YXIgcmVwb3NpdG9yeUlkIGluIHJldmlz
aW9ucykgewotICAgICAgICBtYXhUaW1lID0gTWF0aC5tYXgobWF4VGltZSwgcmV2aXNpb25zW3Jl
cG9zaXRvcnlJZF1bMV0pOyAvLyBSZXZpc2lvbiBpcyBhbiBwYWlyIChyZXZpc2lvbiwgdGltZSkK
LSAgICAgICAgcmV2aXNpb25Db3VudCsrOwotICAgIH0KLSAgICBpZiAoIW1heFRpbWUpCi0gICAg
ICAgIG1heFRpbWUgPSByYXdSdW4uYnVpbGRUaW1lOwotICAgIG1heFRpbWUgPSBUZXN0QnVpbGQu
VVRDdG9QU1QobWF4VGltZSk7Ci0gICAgdmFyIG1heFRpbWVTdHJpbmc7Ci0gICAgdmFyIGJ1aWxk
VGltZSA9IFRlc3RCdWlsZC5VVEN0b1BTVChyYXdSdW4uYnVpbGRUaW1lKTsKLSAgICB2YXIgYnVp
bGRUaW1lU3RyaW5nOwotCi0gICAgdGhpcy50aW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF4
VGltZTsgfQotICAgIHRoaXMuZm9ybWF0dGVkVGltZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
aWYgKCFtYXhUaW1lU3RyaW5nKQotICAgICAgICAgICAgbWF4VGltZVN0cmluZyA9IG5ldyBEYXRl
KG1heFRpbWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnVCcsICcgJykucmVwbGFjZSgvXC5cZCta
JC8sICcnKTsKLSAgICAgICAgcmV0dXJuIG1heFRpbWVTdHJpbmc7Ci0gICAgfQotICAgIHRoaXMu
YnVpbGRUaW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVpbGRUaW1lOyB9Ci0gICAgdGhpcy5m
b3JtYXR0ZWRCdWlsZFRpbWUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICghYnVpbGRUaW1l
U3RyaW5nKQotICAgICAgICAgICAgYnVpbGRUaW1lU3RyaW5nID0gbmV3IERhdGUoYnVpbGRUaW1l
KS50b0lTT1N0cmluZygpLnJlcGxhY2UoJ1QnLCAnICcpLnJlcGxhY2UoL1wuXGQrWiQvLCAnJyk7
Ci0gICAgICAgIHJldHVybiBidWlsZFRpbWVTdHJpbmc7Ci0gICAgfQotICAgIHRoaXMuYnVpbGRl
ciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1aWxkZXJzW3Jhd1J1bi5idWlsZGVyXS5uYW1lOyB9
Ci0gICAgdGhpcy5idWlsZE51bWJlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJhd1J1bi5idWls
ZE51bWJlcjsgfQotICAgIHRoaXMuYnVpbGRVcmwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZh
ciBidWlsZGVyID0gYnVpbGRlcnNbcmF3UnVuLmJ1aWxkZXJdOwotICAgICAgICB2YXIgdGVtcGxh
dGUgPSBidWlsZGVyLmJ1aWxkVXJsOwotICAgICAgICBpZiAoIXRlbXBsYXRlKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cJGJ1aWxk
TnVtYmVyL2csIHRoaXMuYnVpbGROdW1iZXIoKSkucmVwbGFjZSgvXCRidWlsZGVyTmFtZS9nLCBi
dWlsZGVyLm5hbWUpOwotICAgIH0KLSAgICB0aGlzLnBsYXRmb3JtID0gZnVuY3Rpb24gKCkgeyBy
ZXR1cm4gcGxhdGZvcm07IH0KLSAgICB0aGlzLnJldmlzaW9uID0gZnVuY3Rpb24ocmVwb3NpdG9y
eUlkKSB7IHJldHVybiByZXZpc2lvbnNbcmVwb3NpdG9yeUlkXVswXTsgfQotICAgIHRoaXMuZm9y
bWF0dGVkUmV2aXNpb25zID0gZnVuY3Rpb24gKHByZXZpb3VzQnVpbGQpIHsKLSAgICAgICAgdmFy
IHJlc3VsdCA9IHt9OwotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5SWQgaW4gcmVwb3NpdG9y
aWVzKSB7Ci0gICAgICAgICAgICBpZiAoIXJldmlzaW9uc1tyZXBvc2l0b3J5SWRdKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzUmV2aXNpb24gPSBw
cmV2aW91c0J1aWxkID8gcHJldmlvdXNCdWlsZC5yZXZpc2lvbihyZXBvc2l0b3J5SWQpIDogdW5k
ZWZpbmVkOwotICAgICAgICAgICAgdmFyIGN1cnJlbnRSZXZpc2lvbiA9IHRoaXMucmV2aXNpb24o
cmVwb3NpdG9yeUlkKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uID09PSBjdXJy
ZW50UmV2aXNpb24pCi0gICAgICAgICAgICAgICAgcHJldmlvdXNSZXZpc2lvbiA9IHVuZGVmaW5l
ZDsKLQotICAgICAgICAgICAgdmFyIHJldmlzaW9uUHJlZml4ID0gJyc7Ci0gICAgICAgICAgICB2
YXIgcmV2aXNpb25EZWxpbWl0ZXIgPSAnLSc7Ci0gICAgICAgICAgICB2YXIgaXNIYXNoID0gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAocGFyc2VJbnQoY3VycmVudFJldmlzaW9uKSA9PSBjdXJyZW50
UmV2aXNpb24pIHsgLy8gZS5nLiByMTIzNDUuCi0gICAgICAgICAgICAgICAgcmV2aXNpb25QcmVm
aXggPSAncic7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUmV2aXNpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzUmV2aXNpb24gPSAocGFyc2VJbnQocHJldmlvdXNSZXZpc2lv
bikgKyAxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJldmlzaW9uLmluZGV4T2Yo
JyAnKSA+PSAwKSAvLyBlLmcuIDEwLjkgMTNDNjQuCi0gICAgICAgICAgICAgICAgcmV2aXNpb25E
ZWxpbWl0ZXIgPSAnIC0gJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZXZpc2lvbi5s
ZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKLSAgICAgICAgICAgICAgICBpc0hhc2ggPSB0
cnVlOwotCi0gICAgICAgICAgICB2YXIgbGFiZWxGb3JUaGlzUmVwb3NpdG9yeTsKLSAgICAgICAg
ICAgIGlmIChpc0hhc2gpIHsKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDdXJyZW50SGFzaCA9
IGN1cnJlbnRSZXZpc2lvbi5zdWJzdHJpbmcoMCwgOCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzUmV2aXNpb24pCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRv
cnkgPSBwcmV2aW91c1JldmlzaW9uLnN1YnN0cmluZygwLCA4KSArICcuLicgKyBmb3JtYXR0ZWRD
dXJyZW50SGFzaDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxh
YmVsRm9yVGhpc1JlcG9zaXRvcnkgPSAnQCAnICsgZm9ybWF0dGVkQ3VycmVudEhhc2g7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JldmlzaW9uKQot
ICAgICAgICAgICAgICAgICAgICBsYWJlbEZvclRoaXNSZXBvc2l0b3J5ID0gcmV2aXNpb25QcmVm
aXggKyBwcmV2aW91c1JldmlzaW9uICsgcmV2aXNpb25EZWxpbWl0ZXIgKyByZXZpc2lvblByZWZp
eCArIGN1cnJlbnRSZXZpc2lvbjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGxhYmVsRm9yVGhpc1JlcG9zaXRvcnkgPSAnQCAnICsgcmV2aXNpb25QcmVmaXggKyBj
dXJyZW50UmV2aXNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB1cmw7Ci0g
ICAgICAgICAgICB2YXIgcmVwb3NpdG9yeSA9IHJlcG9zaXRvcmllc1tyZXBvc2l0b3J5SWRdOwot
ICAgICAgICAgICAgaWYgKHJlcG9zaXRvcnkpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNSZXZpc2lvbikKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gKHJlcG9zaXRvcnlbJ2JsYW1l
VXJsJ10gfHwgJycpLnJlcGxhY2UoL1wkMS9nLCBwcmV2aW91c1JldmlzaW9uKS5yZXBsYWNlKC9c
JDIvZywgY3VycmVudFJldmlzaW9uKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHVybCA9IChyZXBvc2l0b3J5Wyd1cmwnXSB8fCAnJykucmVwbGFjZSgvXCQxL2cs
IGN1cnJlbnRSZXZpc2lvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlc3VsdFty
ZXBvc2l0b3J5Lm5hbWVdID0gewotICAgICAgICAgICAgICAgICdsYWJlbCc6IGxhYmVsRm9yVGhp
c1JlcG9zaXRvcnksCi0gICAgICAgICAgICAgICAgJ2N1cnJlbnRSZXZpc2lvbic6IGN1cnJlbnRS
ZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAncHJldmlvdXNSZXZpc2lvbic6IHByZXZpb3VzUmV2
aXNpb24sCi0gICAgICAgICAgICAgICAgJ3VybCc6IHVybCwKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Ci0KLVRlc3RCdWlsZC5VVEN0
b1BTVCA9IGZ1bmN0aW9uIChkYXRlKSB7Ci0gICAgLy8gUHJldGVuZCB0aGF0IFBTVCBpcyBVVEMg
c2luY2UgdmFuaWxsYSBmbG90IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSB0aW1lem9uZXMuCi0g
ICAgY29uc3QgUFNUT2Zmc2V0SW5NaWxsaXNlY29uZHMgPSA4ICogMzYwMCAqIDEwMDA7Ci0gICAg
cmV0dXJuIGRhdGUgLSBQU1RPZmZzZXRJbk1pbGxpc2Vjb25kczsKLX0KLVRlc3RCdWlsZC5ub3cg
PSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLlVUQ3RvUFNUKERhdGUubm93KCkpOyB9Ci0KLS8v
IEEgc2VxdWVuY2Ugb2YgdGVzdCByZXN1bHRzIGZvciBhIHNwZWNpZmljIHRlc3Qgb24gYSBzcGVj
aWZpYyBwbGF0Zm9ybQotZnVuY3Rpb24gUGVyZlRlc3RSdW5zKG1ldHJpYywgcGxhdGZvcm0pIHsK
LSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIHZhciBjYWNoZWRVbml0ID0gbnVsbDsKLSAgICB2
YXIgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IG51bGw7Ci0gICAgdmFyIGJhc2VsaW5lcyA9IHt9Owot
ICAgIHZhciBzdWZmaXggPSBtZXRyaWMubmFtZS5tYXRjaCgnKFtBLXpdW2Etel0rfEZyYW1lUmF0
ZSkkJylbMF07Ci0gICAgdmFyIHVuaXQgPSB7J0NvbWJpbmVkJzogJycsIC8vIEFzc3VtZSBzbWFs
bGVyIGlzIGJldHRlciBmb3Igbm93LgotICAgICAgICAnRnJhbWVSYXRlJzogJ2ZwcycsCi0gICAg
ICAgICdSdW5zJzogJy9zJywKLSAgICAgICAgJ1RpbWUnOiAnbXMnLAotICAgICAgICAnRHVyYXRp
b24nOiAnbXMnLAotICAgICAgICAnTWFsbG9jJzogJ0InLAotICAgICAgICAnSGVhcCc6ICdCJywK
LSAgICAgICAgJ0FsbG9jYXRpb25zJzogJ0InLAotICAgICAgICAnU2l6ZSc6ICdCJywKLSAgICAg
ICAgJ1Njb3JlJzogJ3B0JywKLSAgICAgICAgJ1Bvd2VyJzogJ1cnCi0gICAgfVtzdWZmaXhdOwot
Ci0gICAgLy8gV2UgY2FuJ3QgZG8gdGhpcyBpbiBQZXJmVGVzdFJlc3VsdCBiZWNhdXNlIGFsbCBy
ZXN1bHRzIGZvciBlYWNoIG1ldHJpYyBuZWVkIHRvIHNoYXJlIHRoZSBzYW1lIHVuaXQgYW5kIHRo
ZSBzYW1lIHNjYWxpbmcgZmFjdG9yLgotICAgIGZ1bmN0aW9uIGNvbXB1dGVTY2FsaW5nRmFjdG9y
SWZOZWVkZWQoKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgYWRqdXN0aW5n
IHVuaXRzIG9uIGV2ZXJ5IHRlc3QgcmVzdWx0LgotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0
aGlzIG9uIHRoZSBmaXJzdCB0ZXN0LgotICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IGNh
Y2hlZFVuaXQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG1lYW4gPSByZXN1
bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ugc2hvdWxkIGxvb2sgYXQgYWxsIHZh
bHVlcy4KLSAgICAgICAgdmFyIGtpbG8gPSB1bml0ID09ICdCJyA/IDEwMjQgOiAxMDAwOwotICAg
ICAgICBpZiAobWVhbiA+IDIgKiBraWxvICoga2lsbyAmJiB1bml0ICE9ICdtcycpIHsKLSAgICAg
ICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSAxIC8ga2lsbyAvIGtpbG87Ci0gICAgICAgICAg
ICB2YXIgdW5pdEZpcnN0Q2hhciA9IHVuaXQuY2hhckF0KDApOwotICAgICAgICAgICAgY2FjaGVk
VW5pdCA9ICdNJyArICh1bml0Rmlyc3RDaGFyLnRvVXBwZXJDYXNlKCkgPT0gdW5pdEZpcnN0Q2hh
ciA/ICcnIDogJyAnKSArIHVuaXQ7Ci0gICAgICAgIH0gZWxzZSBpZiAobWVhbiA+IDIgKiBraWxv
KSB7Ci0gICAgICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMSAvIGtpbG87Ci0gICAgICAg
ICAgICBjYWNoZWRVbml0ID0gdW5pdCA9PSAnbXMnID8gJ3MnIDogKCdLICcgKyB1bml0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSAxOwotICAg
ICAgICAgICAgY2FjaGVkVW5pdCA9IHVuaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlz
Lm1ldHJpYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1ldHJpYzsgfQotICAgIHRoaXMucGxhdGZv
cm0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbGF0Zm9ybTsgfQotICAgIHRoaXMuc2V0UmVzdWx0
cyA9IGZ1bmN0aW9uIChuZXdSZXN1bHRzKSB7Ci0gICAgICAgIHJlc3VsdHMgPSBuZXdSZXN1bHRz
OwotICAgICAgICBjYWNoZWRVbml0ID0gbnVsbDsKLSAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3Rv
ciA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMubGFzdFJlc3VsdCA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXTsgfQotICAgIHRoaXMucmVzdWx0QXQgPSBm
dW5jdGlvbiAoaSkgeyByZXR1cm4gcmVzdWx0c1tpXTsgfQotCi0gICAgdmFyIHJlc3VsdHNGaWx0
ZXJDYWNoZTsKLSAgICB2YXIgcmVzdWx0c0ZpbHRlckNhY2hlTWluVGltZTsKLSAgICBmdW5jdGlv
biBmaWx0ZXJlZFJlc3VsdHMobWluVGltZSkgewotICAgICAgICBpZiAoIW1pblRpbWUpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgaWYgKHJlc3VsdHNGaWx0ZXJDYWNoZU1p
blRpbWUgIT0gbWluVGltZSkgewotICAgICAgICAgICAgcmVzdWx0c0ZpbHRlckNhY2hlID0gcmVz
dWx0cy5maWx0ZXIoZnVuY3Rpb24gKHJlc3VsdCkgeyByZXR1cm4gIW1pblRpbWUgfHwgcmVzdWx0
LmJ1aWxkKCkudGltZSgpID49IG1pblRpbWU7IH0pOwotICAgICAgICAgICAgcmVzdWx0c0ZpbHRl
ckNhY2hlTWluVGltZSA9IG1pblRpbWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHNGaWx0ZXJDYWNoZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1bnNjYWxlZE1lYW5zRm9yQWxs
UmVzdWx0cyhtaW5UaW1lKSB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXJlZFJlc3VsdHMobWluVGlt
ZSkubWFwKGZ1bmN0aW9uIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC51bnNjYWxlZE1lYW4oKTsg
fSk7Ci0gICAgfQotCi0gICAgdGhpcy5taW4gPSBmdW5jdGlvbiAobWluVGltZSkgewotICAgICAg
ICByZXR1cm4gdGhpcy5zY2FsaW5nRmFjdG9yKCkgKiBmaWx0ZXJlZFJlc3VsdHMobWluVGltZSkK
LSAgICAgICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKG1pblNvRmFyLCByZXN1bHQpIHsgcmV0dXJu
IE1hdGgubWluKG1pblNvRmFyLCByZXN1bHQudW5zY2FsZWRNZWFuKCkgLSByZXN1bHQudW5zY2Fs
ZWRDb25maWRlbmNlSW50ZXJ2YWxEZWx0YSgwKSk7IH0sIE51bWJlci5NQVhfVkFMVUUpOwotICAg
IH0KLSAgICB0aGlzLm1heCA9IGZ1bmN0aW9uIChtaW5UaW1lLCBiYXNlbGluZU5hbWUpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuc2NhbGluZ0ZhY3RvcigpICogZmlsdGVyZWRSZXN1bHRzKG1pblRp
bWUpCi0gICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChtYXhTb0ZhciwgcmVzdWx0KSB7IHJl
dHVybiBNYXRoLm1heChtYXhTb0ZhciwgcmVzdWx0LnVuc2NhbGVkTWVhbigpICsgcmVzdWx0LnVu
c2NhbGVkQ29uZmlkZW5jZUludGVydmFsRGVsdGEoMCkpOyB9LCBOdW1iZXIuTUlOX1ZBTFVFKTsK
LSAgICB9Ci0gICAgdGhpcy5jb3VudFJlc3VsdHMgPSBmdW5jdGlvbiAobWluVGltZSkgewotICAg
ICAgICByZXR1cm4gdW5zY2FsZWRNZWFuc0ZvckFsbFJlc3VsdHMobWluVGltZSkubGVuZ3RoOwot
ICAgIH0KLSAgICB0aGlzLmNvdW50UmVzdWx0c0luSW50ZXJ2YWwgPSBmdW5jdGlvbiAobWluVGlt
ZSwgbWluLCBtYXgpIHsKLSAgICAgICAgdmFyIHVuc2NhbGVkTWluID0gbWluIC8gdGhpcy5zY2Fs
aW5nRmFjdG9yKCk7Ci0gICAgICAgIHZhciB1bnNjYWxlZE1heCA9IG1heCAvIHRoaXMuc2NhbGlu
Z0ZhY3RvcigpOwotICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzKG1pblRpbWUpLnJlZHVj
ZShmdW5jdGlvbiAoY291bnQsIGN1cnJlbnRSZXN1bHQpIHsKLSAgICAgICAgICAgIHJldHVybiBj
b3VudCArIChjdXJyZW50UmVzdWx0LmlzSW5VbnNjYWxlZEludGVydmFsKHVuc2NhbGVkTWluLCB1
bnNjYWxlZE1heCkgPyAxIDogMCk7IH0sIDApOwotICAgIH0KLSAgICB0aGlzLnNhbXBsZVN0YW5k
YXJkRGV2aWF0aW9uID0gZnVuY3Rpb24gKG1pblRpbWUpIHsKLSAgICAgICAgdmFyIHVuc2NhbGVk
TWVhbnMgPSB1bnNjYWxlZE1lYW5zRm9yQWxsUmVzdWx0cyhtaW5UaW1lKTsKLSAgICAgICAgcmV0
dXJuIHRoaXMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlzdGljcy5zYW1wbGVTdGFuZGFyZERldmlh
dGlvbih1bnNjYWxlZE1lYW5zLmxlbmd0aCwgU3RhdGlzdGljcy5zdW0odW5zY2FsZWRNZWFucyks
IFN0YXRpc3RpY3Muc3F1YXJlU3VtKHVuc2NhbGVkTWVhbnMpKTsKLSAgICB9Ci0gICAgdGhpcy5l
eHBvbmVudGlhbE1vdmluZ0FyaXRobWV0aWNNZWFuID0gZnVuY3Rpb24gKG1pblRpbWUsIGFscGhh
KSB7Ci0gICAgICAgIHZhciB1bnNjYWxlZE1lYW5zID0gdW5zY2FsZWRNZWFuc0ZvckFsbFJlc3Vs
dHMobWluVGltZSk7Ci0gICAgICAgIGlmICghdW5zY2FsZWRNZWFucy5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gTmFOOwotICAgICAgICByZXR1cm4gdGhpcy5zY2FsaW5nRmFjdG9yKCkgKiB1
bnNjYWxlZE1lYW5zLnJlZHVjZShmdW5jdGlvbiAobW92aW5nQXZlcmFnZSwgY3VycmVudE1lYW4p
IHsgcmV0dXJuIGFscGhhICogY3VycmVudE1lYW4gKyAoMSAtIGFscGhhKSAqIG1vdmluZ0F2ZXJh
Z2U7IH0pOwotICAgIH0KLSAgICB0aGlzLmhhc0NvbmZpZGVuY2VJbnRlcnZhbCA9IGZ1bmN0aW9u
ICgpIHsgcmV0dXJuICFpc05hTih0aGlzLmxhc3RSZXN1bHQoKS51bnNjYWxlZENvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhKCkpOyB9Ci0gICAgdmFyIG1lYW5QbG90Q2FjaGU7Ci0gICAgdGhpcy5tZWFu
UGxvdERhdGEgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICghbWVhblBsb3RDYWNoZSkKLSAg
ICAgICAgICAgIG1lYW5QbG90Q2FjaGUgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBp
bmRleCkgeyByZXR1cm4gW3Jlc3VsdC5idWlsZCgpLnRpbWUoKSwgcmVzdWx0Lm1lYW4oKV07IH0p
OwotICAgICAgICByZXR1cm4gbWVhblBsb3RDYWNoZTsKLSAgICB9Ci0gICAgdmFyIHVwcGVyQ29u
ZmlkZW5jZUNhY2hlOwotICAgIHRoaXMudXBwZXJDb25maWRlbmNlUGxvdERhdGEgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGlmICghdXBwZXJDb25maWRlbmNlQ2FjaGUpIC8vIEZJWE1FOiBVc2Ug
dGhlIGFjdHVhbCBjb25maWRlbmNlIGludGVydmFsCi0gICAgICAgICAgICB1cHBlckNvbmZpZGVu
Y2VDYWNoZSA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4KSB7IHJldHVybiBb
cmVzdWx0LmJ1aWxkKCkudGltZSgpLCByZXN1bHQubWVhbigpICsgcmVzdWx0LmNvbmZpZGVuY2VJ
bnRlcnZhbERlbHRhKCldOyB9KTsKLSAgICAgICAgcmV0dXJuIHVwcGVyQ29uZmlkZW5jZUNhY2hl
OwotICAgIH0KLSAgICB2YXIgbG93ZXJDb25maWRlbmNlQ2FjaGU7Ci0gICAgdGhpcy5sb3dlckNv
bmZpZGVuY2VQbG90RGF0YSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKCFsb3dlckNvbmZp
ZGVuY2VDYWNoZSkgLy8gRklYTUU6IFVzZSB0aGUgYWN0dWFsIGNvbmZpZGVuY2UgaW50ZXJ2YWwK
LSAgICAgICAgICAgIGxvd2VyQ29uZmlkZW5jZUNhY2hlID0gcmVzdWx0cy5tYXAoZnVuY3Rpb24g
KHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIFtyZXN1bHQuYnVpbGQoKS50aW1lKCksIHJlc3VsdC5t
ZWFuKCkgLSByZXN1bHQuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKV07IH0pOwotICAgICAgICBy
ZXR1cm4gbG93ZXJDb25maWRlbmNlQ2FjaGU7Ci0gICAgfQotICAgIHRoaXMuc2NhbGluZ0ZhY3Rv
ciA9IGZ1bmN0aW9uKCkgewotICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7
Ci0gICAgICAgIHJldHVybiBjYWNoZWRTY2FsaW5nRmFjdG9yOwotICAgIH0KLSAgICB0aGlzLnVu
aXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQo
KTsKLSAgICAgICAgcmV0dXJuIGNhY2hlZFVuaXQ7Ci0gICAgfQotICAgIHRoaXMuc21hbGxlcklz
QmV0dGVyID0gZnVuY3Rpb24oKSB7IHJldHVybiB1bml0ID09ICdtcycgfHwgdW5pdCA9PSAnQicg
fHwgdW5pdCA9PSAnJzsgfQotfQotCi12YXIgVVJMU3RhdGUgPSBuZXcgKGZ1bmN0aW9uICgpIHsK
LSAgICB2YXIgaGFzaDsKLSAgICB2YXIgcGFyYW1ldGVyczsKLSAgICB2YXIgdXBkYXRlVGltZXI7
Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUlmTmVlZGVkKCkgewotICAgICAgICBpZiAodXBkYXRlVGlt
ZXIgfHwgJyMnICsgaGFzaCA9PSBsb2NhdGlvbi5oYXNoKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBoYXNoID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMSkucmVwbGFjZSgvXC8rJC8sICcn
KTsKLSAgICAgICAgcGFyYW1ldGVycyA9IHt9OwotICAgICAgICBoYXNoLnNwbGl0KC9bJjtdLyku
Zm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IHRv
a2VuLnNwbGl0KCc9Jyk7Ci0gICAgICAgICAgICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50
KGtleVZhbHVlWzBdKTsKLSAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoKQotICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcnNba2V5XSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZS5zbGljZSgx
KS5qb2luKCc9JykpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1cGRhdGVI
YXNoKCkgewotICAgICAgICBpZiAobG9jYXRpb24uaGFzaCAhPSBoYXNoKQotICAgICAgICAgICAg
bG9jYXRpb24uaGFzaCA9IGhhc2g7Ci0gICAgfQotCi0gICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAo
a2V5LCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgcGFyc2VJZk5lZWRlZCgpOwotICAgICAgICBp
ZiAoa2V5IGluIHBhcmFtZXRlcnMpCi0gICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1trZXld
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHNjaGVkdWxlSGFzaFVwZGF0ZSgpIHsKLSAgICAgICAgdmFyIG5ld0hh
c2ggPSAnJzsKLSAgICAgICAgZm9yIChrZXkgaW4gcGFyYW1ldGVycykgewotICAgICAgICAgICAg
aWYgKG5ld0hhc2gubGVuZ3RoKQotICAgICAgICAgICAgICAgIG5ld0hhc2ggKz0gJyYnOwotICAg
ICAgICAgICAgbmV3SGFzaCArPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29k
ZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJzW2tleV0pOwotICAgICAgICB9Ci0gICAgICAgIGhhc2gg
PSBuZXdIYXNoOwotICAgICAgICBpZiAodXBkYXRlVGltZXIpCi0gICAgICAgICAgICBjbGVhclRp
bWVvdXQodXBkYXRlVGltZXIpOwotCi0gICAgICAgIHVwZGF0ZVRpbWVyID0gc2V0VGltZW91dChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB1cGRhdGVUaW1lciA9IHVuZGVmaW5lZDsKLSAgICAg
ICAgICAgIHVwZGF0ZUhhc2goKTsKLSAgICAgICAgfSwgNTAwKTsKLSAgICB9Ci0KLSAgICB0aGlz
LnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgIHBhcnNlSWZOZWVkZWQoKTsK
LSAgICAgICAgcGFyYW1ldGVyc1trZXldID0gdmFsdWU7Ci0gICAgICAgIHNjaGVkdWxlSGFzaFVw
ZGF0ZSgpOwotICAgIH0KLQotICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkgewotICAg
ICAgICBwYXJzZUlmTmVlZGVkKCk7Ci0gICAgICAgIGRlbGV0ZSBwYXJhbWV0ZXJzW2tleV07Ci0g
ICAgICAgIHNjaGVkdWxlSGFzaFVwZGF0ZSgpOwotICAgIH0KLQotICAgIHZhciB3YXRjaENhbGxi
YWNrcyA9IHt9OwotICAgIGZ1bmN0aW9uIG9uaGFzaGNoYW5nZSgpIHsKLSAgICAgICAgaWYgKCcj
JyArIGhhc2ggPT0gbG9jYXRpb24uaGFzaCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBSYWNlLiBJZiB0aGUgaGFzaCBoYWQgY2hhbmdlZCB3aGlsZSB3ZSdyZSB3YWl0aW5nIHRv
IHVwZGF0ZSwgaWdub3JlIHRoZSBjaGFuZ2UuCi0gICAgICAgIGlmICh1cGRhdGVUaW1lcikgewot
ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHVwZGF0ZVRpbWVyKTsKLSAgICAgICAgICAgIHVwZGF0
ZVRpbWVyID0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIGlnbm9yaW5nIFVSTFN0YXRlLnNldC9yZW1vdmUgd2hpbGUgbm90aWZ5aW5nIGNhbGxiYWNr
cy4KLSAgICAgICAgdmFyIG9sZFBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJz
ZUlmTmVlZGVkKCk7Ci0gICAgICAgIHZhciBjYWxsYmFja3MgPSBbXTsKLSAgICAgICAgdmFyIGNo
YW5nZWRTdGF0ZXMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHdhdGNoQ2FsbGJhY2tz
KSB7Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVyc1trZXldID09IG9sZFBhcmFtZXRlcnNba2V5
XSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNoYW5nZWRTdGF0ZXMu
cHVzaChrZXkpOwotICAgICAgICAgICAgY2FsbGJhY2tzLnB1c2god2F0Y2hDYWxsYmFja3Nba2V5
XSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5s
ZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGNhbGxiYWNrc1tpXShjaGFuZ2VkU3RhdGVzKTsKLSAg
ICB9Ci0gICAgJCh3aW5kb3cpLmJpbmQoJ2hhc2hjaGFuZ2UnLCBvbmhhc2hjaGFuZ2UpOwotCi0g
ICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgY2FsbGJhY2tzIG9uIGEgc2luZ2xlIGtleS4K
LSAgICB0aGlzLndhdGNoID0gZnVuY3Rpb24gKGtleSwgY2FsbGJhY2spIHsKLSAgICAgICAgcGFy
c2VJZk5lZWRlZCgpOwotICAgICAgICB3YXRjaENhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7Ci0g
ICAgfQotfSk7Ci0KLWZ1bmN0aW9uIFRvb2x0aXAoY29udGFpbmVyUGFyZW50LCBjbGFzc05hbWUp
IHsKLSAgICB2YXIgY29udGFpbmVyOwotICAgIHZhciBzZWxmID0gdGhpczsKLSAgICB2YXIgaGlk
ZVRpbWVyOyAvLyBVc2Ugc2V0VGltZW91dCh+LCAwKSB0byB3b3JrYXJvdW5kIHRoZSByYWNlIGNv
bmRpdGlvbiB0aGF0IGFyaXNlcyB3aGVuIG1vdmluZyBtb3VzZSBmYXN0LgotICAgIHZhciBwcmV2
aW91c0NvbnRlbnQ7Ci0KLSAgICBmdW5jdGlvbiBlbnN1cmVDb250YWluZXIoKSB7Ci0gICAgICAg
IGlmIChjb250YWluZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICAkKGNvbnRhaW5lclBhcmVu
dCkuYXBwZW5kKGNvbnRhaW5lcik7Ci0gICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBjbGFz
c05hbWU7Ci0gICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7Ci0g
ICAgICAgICQoY29udGFpbmVyKS5oaWRlKCk7Ci0gICAgfQotCi0gICAgdGhpcy5zaG93ID0gZnVu
Y3Rpb24gKHgsIHksIGNvbnRlbnQpIHsKLSAgICAgICAgaWYgKGhpZGVUaW1lcikgewotICAgICAg
ICAgICAgY2xlYXJUaW1lb3V0KGhpZGVUaW1lcik7Ci0gICAgICAgICAgICBoaWRlVGltZXIgPSB1
bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJldmlvdXNDb250ZW50ID09PSBj
b250ZW50KSB7Ci0gICAgICAgICAgICAkKGNvbnRhaW5lcikuc2hvdygpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7Ci0K
LSAgICAgICAgZW5zdXJlQ29udGFpbmVyKCk7Ci0gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwg
PSBjb250ZW50OwotICAgICAgICAkKGNvbnRhaW5lcikuc2hvdygpOwotICAgICAgICAvLyBGSVhN
RTogU3R5bGUgc3BlY2lmaWMgY29tcHV0YXRpb24gbGlrZSB0aGlzIG9uZSBzaG91bGRuJ3QgYmUg
aW4gVG9vbHRpcCBjbGFzcy4KLSAgICAgICAgdmFyIHRvcCA9IHkgLSAkKGNvbnRhaW5lcikub3V0
ZXJIZWlnaHQoKSAtIDE1OwotICAgICAgICBpZiAodG9wIDwgMCkgewotICAgICAgICAgICAgJChj
b250YWluZXIpLmFkZENsYXNzKCdpbnZlcnRlZCcpOwotICAgICAgICAgICAgdG9wID0geSArIDE1
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICQoY29udGFpbmVyKS5yZW1vdmVDbGFzcygn
aW52ZXJ0ZWQnKTsKLSAgICAgICAgJChjb250YWluZXIpLm9mZnNldCh7bGVmdDogeCAtICQoY29u
dGFpbmVyKS5vdXRlcldpZHRoKCkgLyAyLCB0b3A6IHRvcH0pOwotICAgIH0KLQotICAgIHRoaXMu
aGlkZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKCFjb250YWluZXIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGhpZGVUaW1lcikKLSAgICAgICAgICAgIGNsZWFyVGlt
ZW91dChoaWRlVGltZXIpOwotICAgICAgICBoaWRlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgICQoY29udGFpbmVyKS5mYWRlT3V0KDEwMCk7Ci0gICAgICAgICAg
ICBwcmV2aW91c1Jlc3VsdCA9IHVuZGVmaW5lZDsKLSAgICAgICAgfSwgMCk7Ci0gICAgfQotCi0g
ICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAoaW1tZWRpYXRlbHkpIHsKLSAgICAgICAgaWYgKCFj
b250YWluZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGhpZGVUaW1lcikK
LSAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWRlVGltZXIpOwotCi0gICAgICAgICQoY29udGFp
bmVyKS5yZW1vdmUoKTsKLSAgICAgICAgY29udGFpbmVyID0gdW5kZWZpbmVkOwotICAgICAgICBw
cmV2aW91c1Jlc3VsdCA9IHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICB0aGlzLnRvZ2dsZSA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgJChjb250YWluZXIpLnRvZ2dsZSgpOwotICAgICAgICBkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7IC8vIFRvZ2dsZWQgdG9vbHRpcCBzaG91
bGQgc2hvdyB1cCBhdCB0aGUgdG9wLgotICAgIH0KLQotICAgIHRoaXMuYmluZENsaWNrID0gZnVu
Y3Rpb24gKGNhbGxiYWNrKSB7Ci0gICAgICAgIGVuc3VyZUNvbnRhaW5lcigpOwotICAgICAgICAk
KGNvbnRhaW5lcikuYmluZCgnY2xpY2snLCBjYWxsYmFjayk7Ci0gICAgfQotICAgIHRoaXMuYmlu
ZE1vdXNlRW50ZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKLSAgICAgICAgZW5zdXJlQ29udGFp
bmVyKCk7Ci0gICAgICAgICQoY29udGFpbmVyKS5iaW5kKCdtb3VzZWVudGVyJywgY2FsbGJhY2sp
OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
anMvanF1ZXJ5LmNvbG9yaGVscGVycy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvanMvanF1ZXJ5LmNvbG9yaGVscGVycy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDM1MjRkNzg2ZjBhM2IwZDA0MWY0NzkwZTVlZjNkZTUyMzVjNWJjYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2pzL2pxdWVyeS5jb2xvcmhlbHBlcnMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzkgKzAsMCBAQAotLyogUGx1Z2luIGZvciBqUXVlcnkgZm9yIHdvcmtpbmcgd2l0aCBjb2xvcnMu
Ci0gKiAKLSAqIFZlcnNpb24gMS4xLgotICogCi0gKiBJbnNwaXJhdGlvbiBmcm9tIGpRdWVyeSBj
b2xvciBhbmltYXRpb24gcGx1Z2luIGJ5IEpvaG4gUmVzaWcuCi0gKgotICogUmVsZWFzZWQgdW5k
ZXIgdGhlIE1JVCBsaWNlbnNlIGJ5IE9sZSBMYXVyc2VuLCBPY3RvYmVyIDIwMDkuCi0gKgotICog
RXhhbXBsZXM6Ci0gKgotICogICAkLmNvbG9yLnBhcnNlKCIjZmZmIikuc2NhbGUoJ3JnYicsIDAu
MjUpLmFkZCgnYScsIC0wLjUpLnRvU3RyaW5nKCkKLSAqICAgdmFyIGMgPSAkLmNvbG9yLmV4dHJh
Y3QoJCgiI215ZGl2IiksICdiYWNrZ3JvdW5kLWNvbG9yJyk7Ci0gKiAgIGNvbnNvbGUubG9nKGMu
ciwgYy5nLCBjLmIsIGMuYSk7Ci0gKiAgICQuY29sb3IubWFrZSgxMDAsIDUwLCAyNSwgMC40KS50
b1N0cmluZygpIC8vIHJldHVybnMgInJnYmEoMTAwLDUwLDI1LDAuNCkiCi0gKgotICogTm90ZSB0
aGF0IC5zY2FsZSgpIGFuZCAuYWRkKCkgcmV0dXJuIHRoZSBzYW1lIG1vZGlmaWVkIG9iamVjdAot
ICogaW5zdGVhZCBvZiBtYWtpbmcgYSBuZXcgb25lLgotICoKLSAqIFYuIDEuMTogRml4IGVycm9y
IGhhbmRsaW5nIHNvIGUuZy4gcGFyc2luZyBhbiBlbXB0eSBzdHJpbmcgZG9lcwotICogcHJvZHVj
ZSBhIGNvbG9yIHJhdGhlciB0aGFuIGp1c3QgY3Jhc2hpbmcuCi0gKi8gCi0KLShmdW5jdGlvbigk
KSB7Ci0gICAgJC5jb2xvciA9IHt9OwotCi0gICAgLy8gY29uc3RydWN0IGNvbG9yIG9iamVjdCB3
aXRoIHNvbWUgY29udmVuaWVudCBjaGFpbmFibGUgaGVscGVycwotICAgICQuY29sb3IubWFrZSA9
IGZ1bmN0aW9uIChyLCBnLCBiLCBhKSB7Ci0gICAgICAgIHZhciBvID0ge307Ci0gICAgICAgIG8u
ciA9IHIgfHwgMDsKLSAgICAgICAgby5nID0gZyB8fCAwOwotICAgICAgICBvLmIgPSBiIHx8IDA7
Ci0gICAgICAgIG8uYSA9IGEgIT0gbnVsbCA/IGEgOiAxOwotCi0gICAgICAgIG8uYWRkID0gZnVu
Y3Rpb24gKGMsIGQpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYy5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgICAgICBvW2MuY2hhckF0KGkpXSArPSBkOwotICAgICAgICAgICAg
cmV0dXJuIG8ubm9ybWFsaXplKCk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBvLnNj
YWxlID0gZnVuY3Rpb24gKGMsIGYpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Yy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBvW2MuY2hhckF0KGkpXSAqPSBmOwotICAg
ICAgICAgICAgcmV0dXJuIG8ubm9ybWFsaXplKCk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAg
ICAgICBvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgaWYgKG8uYSA+PSAx
LjApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gInJnYigiK1tvLnIsIG8uZywgby5iXS5qb2lu
KCIsIikrIikiOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
InJnYmEoIitbby5yLCBvLmcsIG8uYiwgby5hXS5qb2luKCIsIikrIikiOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIG8ubm9ybWFsaXplID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgZnVuY3Rpb24gY2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgbWluID8gbWluOiAodmFsdWUgPiBtYXggPyBtYXg6IHZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgby5yID0gY2xhbXAoMCwg
cGFyc2VJbnQoby5yKSwgMjU1KTsKLSAgICAgICAgICAgIG8uZyA9IGNsYW1wKDAsIHBhcnNlSW50
KG8uZyksIDI1NSk7Ci0gICAgICAgICAgICBvLmIgPSBjbGFtcCgwLCBwYXJzZUludChvLmIpLCAy
NTUpOwotICAgICAgICAgICAgby5hID0gY2xhbXAoMCwgby5hLCAxKTsKLSAgICAgICAgICAgIHJl
dHVybiBvOwotICAgICAgICB9OwotCi0gICAgICAgIG8uY2xvbmUgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gJC5jb2xvci5tYWtlKG8uciwgby5iLCBvLmcsIG8uYSk7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgcmV0dXJuIG8ubm9ybWFsaXplKCk7Ci0gICAgfQotCi0gICAgLy8g
ZXh0cmFjdCBDU1MgY29sb3IgcHJvcGVydHkgZnJvbSBlbGVtZW50LCBnb2luZyB1cCBpbiB0aGUg
RE9NCi0gICAgLy8gaWYgaXQncyAidHJhbnNwYXJlbnQiCi0gICAgJC5jb2xvci5leHRyYWN0ID0g
ZnVuY3Rpb24gKGVsZW0sIGNzcykgewotICAgICAgICB2YXIgYzsKLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgYyA9IGVsZW0uY3NzKGNzcykudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgIC8v
IGtlZXAgZ29pbmcgdW50aWwgd2UgZmluZCBhbiBlbGVtZW50IHRoYXQgaGFzIGNvbG9yLCBvcgot
ICAgICAgICAgICAgLy8gd2UgaGl0IHRoZSBib2R5Ci0gICAgICAgICAgICBpZiAoYyAhPSAnJyAm
JiBjICE9ICd0cmFuc3BhcmVudCcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBlbGVtID0gZWxlbS5wYXJlbnQoKTsKLSAgICAgICAgfSB3aGlsZSAoISQubm9kZU5hbWUoZWxl
bS5nZXQoMCksICJib2R5IikpOwotCi0gICAgICAgIC8vIGNhdGNoIFNhZmFyaSdzIHdheSBvZiBz
aWduYWxsaW5nIHRyYW5zcGFyZW50Ci0gICAgICAgIGlmIChjID09ICJyZ2JhKDAsIDAsIDAsIDAp
IikKLSAgICAgICAgICAgIGMgPSAidHJhbnNwYXJlbnQiOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuICQuY29sb3IucGFyc2UoYyk7Ci0gICAgfQotICAgIAotICAgIC8vIHBhcnNlIENTUyBjb2xv
ciBzdHJpbmcgKGxpa2UgInJnYigxMCwgMzIsIDQzKSIgb3IgIiNmZmYiKSwKLSAgICAvLyByZXR1
cm5zIGNvbG9yIG9iamVjdCwgaWYgcGFyc2luZyBmYWlsZWQsIHlvdSBnZXQgYmxhY2sgKDAsIDAs
Ci0gICAgLy8gMCkgb3V0Ci0gICAgJC5jb2xvci5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHsKLSAg
ICAgICAgdmFyIHJlcywgbSA9ICQuY29sb3IubWFrZTsKLQotICAgICAgICAvLyBMb29rIGZvciBy
Z2IobnVtLG51bSxudW0pCi0gICAgICAgIGlmIChyZXMgPSAvcmdiXChccyooWzAtOV17MSwzfSlc
cyosXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsxLDN9KVxzKlwpLy5leGVjKHN0cikpCi0g
ICAgICAgICAgICByZXR1cm4gbShwYXJzZUludChyZXNbMV0sIDEwKSwgcGFyc2VJbnQocmVzWzJd
LCAxMCksIHBhcnNlSW50KHJlc1szXSwgMTApKTsKLSAgICAgICAgCi0gICAgICAgIC8vIExvb2sg
Zm9yIHJnYmEobnVtLG51bSxudW0sbnVtKQotICAgICAgICBpZiAocmVzID0gL3JnYmFcKFxzKihb
MC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMqLFxzKihb
MC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKHN0cikpCi0gICAgICAgICAgICByZXR1cm4g
bShwYXJzZUludChyZXNbMV0sIDEwKSwgcGFyc2VJbnQocmVzWzJdLCAxMCksIHBhcnNlSW50KHJl
c1szXSwgMTApLCBwYXJzZUZsb2F0KHJlc1s0XSkpOwotICAgICAgICAgICAgCi0gICAgICAgIC8v
IExvb2sgZm9yIHJnYihudW0lLG51bSUsbnVtJSkKLSAgICAgICAgaWYgKHJlcyA9IC9yZ2JcKFxz
KihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMq
LFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4ZWMoc3RyKSkKLSAgICAgICAgICAg
IHJldHVybiBtKHBhcnNlRmxvYXQocmVzWzFdKSoyLjU1LCBwYXJzZUZsb2F0KHJlc1syXSkqMi41
NSwgcGFyc2VGbG9hdChyZXNbM10pKjIuNTUpOwotCi0gICAgICAgIC8vIExvb2sgZm9yIHJnYmEo
bnVtJSxudW0lLG51bSUsbnVtKQotICAgICAgICBpZiAocmVzID0gL3JnYmFcKFxzKihbMC05XSso
PzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05
XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVj
KHN0cikpCi0gICAgICAgICAgICByZXR1cm4gbShwYXJzZUZsb2F0KHJlc1sxXSkqMi41NSwgcGFy
c2VGbG9hdChyZXNbMl0pKjIuNTUsIHBhcnNlRmxvYXQocmVzWzNdKSoyLjU1LCBwYXJzZUZsb2F0
KHJlc1s0XSkpOwotICAgICAgICAKLSAgICAgICAgLy8gTG9vayBmb3IgI2EwYjFjMgotICAgICAg
ICBpZiAocmVzID0gLyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05
XXsyfSkvLmV4ZWMoc3RyKSkKLSAgICAgICAgICAgIHJldHVybiBtKHBhcnNlSW50KHJlc1sxXSwg
MTYpLCBwYXJzZUludChyZXNbMl0sIDE2KSwgcGFyc2VJbnQocmVzWzNdLCAxNikpOwotCi0gICAg
ICAgIC8vIExvb2sgZm9yICNmZmYKLSAgICAgICAgaWYgKHJlcyA9IC8jKFthLWZBLUYwLTldKShb
YS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pLy5leGVjKHN0cikpCi0gICAgICAgICAgICByZXR1cm4g
bShwYXJzZUludChyZXNbMV0rcmVzWzFdLCAxNiksIHBhcnNlSW50KHJlc1syXStyZXNbMl0sIDE2
KSwgcGFyc2VJbnQocmVzWzNdK3Jlc1szXSwgMTYpKTsKLQotICAgICAgICAvLyBPdGhlcndpc2Us
IHdlJ3JlIG1vc3QgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG5hbWVkIGNvbG9yCi0gICAgICAgIHZh
ciBuYW1lID0gJC50cmltKHN0cikudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgaWYgKG5hbWUgPT0g
InRyYW5zcGFyZW50IikKLSAgICAgICAgICAgIHJldHVybiBtKDI1NSwgMjU1LCAyNTUsIDApOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmxhY2sKLSAgICAgICAg
ICAgIHJlcyA9IGxvb2t1cENvbG9yc1tuYW1lXSB8fCBbMCwgMCwgMF07Ci0gICAgICAgICAgICBy
ZXR1cm4gbShyZXNbMF0sIHJlc1sxXSwgcmVzWzJdKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB2YXIgbG9va3VwQ29sb3JzID0gewotICAgICAgICBhcXVhOlswLDI1NSwyNTVdLAotICAg
ICAgICBhenVyZTpbMjQwLDI1NSwyNTVdLAotICAgICAgICBiZWlnZTpbMjQ1LDI0NSwyMjBdLAot
ICAgICAgICBibGFjazpbMCwwLDBdLAotICAgICAgICBibHVlOlswLDAsMjU1XSwKLSAgICAgICAg
YnJvd246WzE2NSw0Miw0Ml0sCi0gICAgICAgIGN5YW46WzAsMjU1LDI1NV0sCi0gICAgICAgIGRh
cmtibHVlOlswLDAsMTM5XSwKLSAgICAgICAgZGFya2N5YW46WzAsMTM5LDEzOV0sCi0gICAgICAg
IGRhcmtncmV5OlsxNjksMTY5LDE2OV0sCi0gICAgICAgIGRhcmtncmVlbjpbMCwxMDAsMF0sCi0g
ICAgICAgIGRhcmtraGFraTpbMTg5LDE4MywxMDddLAotICAgICAgICBkYXJrbWFnZW50YTpbMTM5
LDAsMTM5XSwKLSAgICAgICAgZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sCi0gICAgICAgIGRh
cmtvcmFuZ2U6WzI1NSwxNDAsMF0sCi0gICAgICAgIGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLAot
ICAgICAgICBkYXJrcmVkOlsxMzksMCwwXSwKLSAgICAgICAgZGFya3NhbG1vbjpbMjMzLDE1MCwx
MjJdLAotICAgICAgICBkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLAotICAgICAgICBmdWNoc2lhOlsy
NTUsMCwyNTVdLAotICAgICAgICBnb2xkOlsyNTUsMjE1LDBdLAotICAgICAgICBncmVlbjpbMCwx
MjgsMF0sCi0gICAgICAgIGluZGlnbzpbNzUsMCwxMzBdLAotICAgICAgICBraGFraTpbMjQwLDIz
MCwxNDBdLAotICAgICAgICBsaWdodGJsdWU6WzE3MywyMTYsMjMwXSwKLSAgICAgICAgbGlnaHRj
eWFuOlsyMjQsMjU1LDI1NV0sCi0gICAgICAgIGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSwKLSAg
ICAgICAgbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sCi0gICAgICAgIGxpZ2h0cGluazpbMjU1LDE4
MiwxOTNdLAotICAgICAgICBsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLAotICAgICAgICBsaW1l
OlswLDI1NSwwXSwKLSAgICAgICAgbWFnZW50YTpbMjU1LDAsMjU1XSwKLSAgICAgICAgbWFyb29u
OlsxMjgsMCwwXSwKLSAgICAgICAgbmF2eTpbMCwwLDEyOF0sCi0gICAgICAgIG9saXZlOlsxMjgs
MTI4LDBdLAotICAgICAgICBvcmFuZ2U6WzI1NSwxNjUsMF0sCi0gICAgICAgIHBpbms6WzI1NSwx
OTIsMjAzXSwKLSAgICAgICAgcHVycGxlOlsxMjgsMCwxMjhdLAotICAgICAgICB2aW9sZXQ6WzEy
OCwwLDEyOF0sCi0gICAgICAgIHJlZDpbMjU1LDAsMF0sCi0gICAgICAgIHNpbHZlcjpbMTkyLDE5
MiwxOTJdLAotICAgICAgICB3aGl0ZTpbMjU1LDI1NSwyNTVdLAotICAgICAgICB5ZWxsb3c6WzI1
NSwyNTUsMF0KLSAgICB9OwotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuY2F0ZWdvcmllcy5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwNzc2ODEyNjlmYmUzN2M0MjllOTkxOWQwODQ1
Yjk2YjY5NWEyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmNhdGVnb3Jp
ZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyogRmxvdCBwbHVnaW4gZm9y
IHBsb3R0aW5nIHRleHR1YWwgZGF0YSBvciBjYXRlZ29yaWVzLgotCi1Db3B5cmlnaHQgKGMpIDIw
MDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGlj
ZW5zZS4KLQotQ29uc2lkZXIgYSBkYXRhc2V0IGxpa2UgW1siRmVicnVhcnkiLCAzNF0sIFsiTWFy
Y2giLCAyMF0sIC4uLl0uIFRoaXMgcGx1Z2luCi1hbGxvd3MgeW91IHRvIHBsb3Qgc3VjaCBhIGRh
dGFzZXQgZGlyZWN0bHkuCi0KLVRvIGVuYWJsZSBpdCwgeW91IG11c3Qgc3BlY2lmeSBtb2RlOiAi
Y2F0ZWdvcmllcyIgb24gdGhlIGF4aXMgd2l0aCB0aGUgdGV4dHVhbAotbGFiZWxzLCBlLmcuCi0K
LSAgICAkLnBsb3QoIiNwbGFjZWhvbGRlciIsIGRhdGEsIHsgeGF4aXM6IHsgbW9kZTogImNhdGVn
b3JpZXMiIH0gfSk7Ci0KLUJ5IGRlZmF1bHQsIHRoZSBsYWJlbHMgYXJlIG9yZGVyZWQgYXMgdGhl
eSBhcmUgbWV0IGluIHRoZSBkYXRhIHNlcmllcy4gSWYgeW91Ci1uZWVkIGEgZGlmZmVyZW50IG9y
ZGVyaW5nLCB5b3UgY2FuIHNwZWNpZnkgImNhdGVnb3JpZXMiIG9uIHRoZSBheGlzIG9wdGlvbnMK
LWFuZCBsaXN0IHRoZSBjYXRlZ29yaWVzIHRoZXJlOgotCi0gICAgeGF4aXM6IHsKLSAgICAgICAg
bW9kZTogImNhdGVnb3JpZXMiLAotICAgICAgICBjYXRlZ29yaWVzOiBbIkZlYnJ1YXJ5IiwgIk1h
cmNoIiwgIkFwcmlsIl0KLSAgICB9Ci0KLUlmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgZGlz
dGFuY2VzIGJldHdlZW4gdGhlIGNhdGVnb3JpZXMsIHlvdSBjYW4gc3BlY2lmeQotImNhdGVnb3Jp
ZXMiIGFzIGFuIG9iamVjdCBtYXBwaW5nIGxhYmVscyB0byB2YWx1ZXMKLQotICAgIHhheGlzOiB7
Ci0gICAgICAgIG1vZGU6ICJjYXRlZ29yaWVzIiwKLSAgICAgICAgY2F0ZWdvcmllczogeyAiRmVi
cnVhcnkiOiAxLCAiTWFyY2giOiAzLCAiQXByaWwiOiA0IH0KLSAgICB9Ci0KLUlmIHlvdSBkb24n
dCBzcGVjaWZ5IGFsbCBjYXRlZ29yaWVzLCB0aGUgcmVtYWluaW5nIGNhdGVnb3JpZXMgd2lsbCBi
ZSBudW1iZXJlZAotZnJvbSB0aGUgbWF4IHZhbHVlIHBsdXMgMSAod2l0aCBhIHNwYWNpbmcgb2Yg
MSBiZXR3ZWVuIGVhY2gpLgotCi1JbnRlcm5hbGx5LCB0aGUgcGx1Z2luIHdvcmtzIGJ5IHRyYW5z
Zm9ybWluZyB0aGUgaW5wdXQgZGF0YSB0aHJvdWdoIGFuIGF1dG8tCi1nZW5lcmF0ZWQgbWFwcGlu
ZyB3aGVyZSB0aGUgZmlyc3QgY2F0ZWdvcnkgYmVjb21lcyAwLCB0aGUgc2Vjb25kIDEsIGV0Yy4K
LUhlbmNlLCBhIHBvaW50IGxpa2UgWyJGZWJydWFyeSIsIDM0XSBiZWNvbWVzIFswLCAzNF0gaW50
ZXJuYWxseSBpbiBGbG90ICh0aGlzCi1pcyB2aXNpYmxlIGluIGhvdmVyIGFuZCBjbGljayBldmVu
dHMgdGhhdCByZXR1cm4gbnVtYmVycyByYXRoZXIgdGhhbiB0aGUKLWNhdGVnb3J5IGxhYmVscyku
IFRoZSBwbHVnaW4gYWxzbyBvdmVycmlkZXMgdGhlIHRpY2sgZ2VuZXJhdG9yIHRvIHNwaXQgb3V0
IHRoZQotY2F0ZWdvcmllcyBhcyB0aWNrcyBpbnN0ZWFkIG9mIHRoZSB2YWx1ZXMuCi0KLUlmIHlv
dSBuZWVkIHRvIG1hcCBhIHZhbHVlIGJhY2sgdG8gaXRzIGxhYmVsLCB0aGUgbWFwcGluZyBpcyBh
bHdheXMgYWNjZXNzaWJsZQotYXMgImNhdGVnb3JpZXMiIG9uIHRoZSBheGlzIG9iamVjdCwgZS5n
LiBwbG90LmdldEF4ZXMoKS54YXhpcy5jYXRlZ29yaWVzLgotCi0qLwotCi0oZnVuY3Rpb24gKCQp
IHsKLSAgICB2YXIgb3B0aW9ucyA9IHsKLSAgICAgICAgeGF4aXM6IHsKLSAgICAgICAgICAgIGNh
dGVnb3JpZXM6IG51bGwKLSAgICAgICAgfSwKLSAgICAgICAgeWF4aXM6IHsKLSAgICAgICAgICAg
IGNhdGVnb3JpZXM6IG51bGwKLSAgICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgZnVuY3Rpb24g
cHJvY2Vzc1Jhd0RhdGEocGxvdCwgc2VyaWVzLCBkYXRhLCBkYXRhcG9pbnRzKSB7Ci0gICAgICAg
IC8vIGlmIGNhdGVnb3JpZXMgYXJlIGVuYWJsZWQsIHdlIG5lZWQgdG8gZGlzYWJsZQotICAgICAg
ICAvLyBhdXRvLXRyYW5zZm9ybWF0aW9uIHRvIG51bWJlcnMgc28gdGhlIHN0cmluZ3MgYXJlIGlu
dGFjdAotICAgICAgICAvLyBmb3IgbGF0ZXIgcHJvY2Vzc2luZwotCi0gICAgICAgIHZhciB4Q2F0
ZWdvcmllcyA9IHNlcmllcy54YXhpcy5vcHRpb25zLm1vZGUgPT0gImNhdGVnb3JpZXMiLAotICAg
ICAgICAgICAgeUNhdGVnb3JpZXMgPSBzZXJpZXMueWF4aXMub3B0aW9ucy5tb2RlID09ICJjYXRl
Z29yaWVzIjsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHhDYXRlZ29yaWVzIHx8IHlDYXRlZ29y
aWVzKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZm9ybWF0ID0gZGF0YXBv
aW50cy5mb3JtYXQ7Ci0KLSAgICAgICAgaWYgKCFmb3JtYXQpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBhdXRvLWRldGVjdGlvbiBzaG91bGQgcmVhbGx5IG5vdCBiZSBkZWZpbmVkIGhlcmUKLSAg
ICAgICAgICAgIHZhciBzID0gc2VyaWVzOwotICAgICAgICAgICAgZm9ybWF0ID0gW107Ci0gICAg
ICAgICAgICBmb3JtYXQucHVzaCh7IHg6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRy
dWUgfSk7Ci0gICAgICAgICAgICBmb3JtYXQucHVzaCh7IHk6IHRydWUsIG51bWJlcjogdHJ1ZSwg
cmVxdWlyZWQ6IHRydWUgfSk7Ci0KLSAgICAgICAgICAgIGlmIChzLmJhcnMuc2hvdyB8fCAocy5s
aW5lcy5zaG93ICYmIHMubGluZXMuZmlsbCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXV0b3Nj
YWxlID0gISEoKHMuYmFycy5zaG93ICYmIHMuYmFycy56ZXJvKSB8fCAocy5saW5lcy5zaG93ICYm
IHMubGluZXMuemVybykpOwotICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwg
bnVtYmVyOiB0cnVlLCByZXF1aXJlZDogZmFsc2UsIGRlZmF1bHRWYWx1ZTogMCwgYXV0b3NjYWxl
OiBhdXRvc2NhbGUgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHMuYmFycy5ob3Jpem9udGFsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmb3JtYXRbZm9ybWF0Lmxlbmd0aCAtIDFdLnk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdFtmb3JtYXQubGVuZ3RoIC0gMV0ueCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkYXRhcG9pbnRzLmZvcm1hdCA9IGZvcm1hdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAodmFyIG0gPSAwOyBtIDwgZm9ybWF0Lmxlbmd0aDsgKyttKSB7Ci0gICAgICAgICAgICBpZiAo
Zm9ybWF0W21dLnggJiYgeENhdGVnb3JpZXMpCi0gICAgICAgICAgICAgICAgZm9ybWF0W21dLm51
bWJlciA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm9ybWF0W21dLnkg
JiYgeUNhdGVnb3JpZXMpCi0gICAgICAgICAgICAgICAgZm9ybWF0W21dLm51bWJlciA9IGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0TmV4dEluZGV4KGNhdGVnb3Jp
ZXMpIHsKLSAgICAgICAgdmFyIGluZGV4ID0gLTE7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHZh
ciB2IGluIGNhdGVnb3JpZXMpCi0gICAgICAgICAgICBpZiAoY2F0ZWdvcmllc1t2XSA+IGluZGV4
KQotICAgICAgICAgICAgICAgIGluZGV4ID0gY2F0ZWdvcmllc1t2XTsKLQotICAgICAgICByZXR1
cm4gaW5kZXggKyAxOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNhdGVnb3JpZXNUaWNrR2VuZXJh
dG9yKGF4aXMpIHsKLSAgICAgICAgdmFyIHJlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBsYWJl
bCBpbiBheGlzLmNhdGVnb3JpZXMpIHsKLSAgICAgICAgICAgIHZhciB2ID0gYXhpcy5jYXRlZ29y
aWVzW2xhYmVsXTsKLSAgICAgICAgICAgIGlmICh2ID49IGF4aXMubWluICYmIHYgPD0gYXhpcy5t
YXgpCi0gICAgICAgICAgICAgICAgcmVzLnB1c2goW3YsIGxhYmVsXSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYVswXSAtIGJbMF07IH0p
OwotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHNldHVw
Q2F0ZWdvcmllc0ZvckF4aXMoc2VyaWVzLCBheGlzLCBkYXRhcG9pbnRzKSB7Ci0gICAgICAgIGlm
IChzZXJpZXNbYXhpc10ub3B0aW9ucy5tb2RlICE9ICJjYXRlZ29yaWVzIikKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmICghc2VyaWVzW2F4aXNdLmNhdGVnb3JpZXMp
IHsKLSAgICAgICAgICAgIC8vIHBhcnNlIG9wdGlvbnMKLSAgICAgICAgICAgIHZhciBjID0ge30s
IG8gPSBzZXJpZXNbYXhpc10ub3B0aW9ucy5jYXRlZ29yaWVzIHx8IHt9OwotICAgICAgICAgICAg
aWYgKCQuaXNBcnJheShvKSkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
by5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgY1tvW2ldXSA9IGk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciB2IGlu
IG8pCi0gICAgICAgICAgICAgICAgICAgIGNbdl0gPSBvW3ZdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzZXJpZXNbYXhpc10uY2F0ZWdvcmllcyA9IGM7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBmaXggdGlja3MKLSAgICAgICAgaWYgKCFzZXJpZXNbYXhpc10u
b3B0aW9ucy50aWNrcykKLSAgICAgICAgICAgIHNlcmllc1theGlzXS5vcHRpb25zLnRpY2tzID0g
Y2F0ZWdvcmllc1RpY2tHZW5lcmF0b3I7Ci0KLSAgICAgICAgdHJhbnNmb3JtUG9pbnRzT25BeGlz
KGRhdGFwb2ludHMsIGF4aXMsIHNlcmllc1theGlzXS5jYXRlZ29yaWVzKTsKLSAgICB9Ci0gICAg
Ci0gICAgZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnRzT25BeGlzKGRhdGFwb2ludHMsIGF4aXMsIGNh
dGVnb3JpZXMpIHsKLSAgICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgcG9pbnRzLCB0cmFuc2Zvcm1p
bmcgdGhlbQotICAgICAgICB2YXIgcG9pbnRzID0gZGF0YXBvaW50cy5wb2ludHMsCi0gICAgICAg
ICAgICBwcyA9IGRhdGFwb2ludHMucG9pbnRzaXplLAotICAgICAgICAgICAgZm9ybWF0ID0gZGF0
YXBvaW50cy5mb3JtYXQsCi0gICAgICAgICAgICBmb3JtYXRDb2x1bW4gPSBheGlzLmNoYXJBdCgw
KSwKLSAgICAgICAgICAgIGluZGV4ID0gZ2V0TmV4dEluZGV4KGNhdGVnb3JpZXMpOwotCi0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSBwcykgewotICAgICAg
ICAgICAgaWYgKHBvaW50c1tpXSA9PSBudWxsKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IHBzOyArK20pIHsK
LSAgICAgICAgICAgICAgICB2YXIgdmFsID0gcG9pbnRzW2kgKyBtXTsKLQotICAgICAgICAgICAg
ICAgIGlmICh2YWwgPT0gbnVsbCB8fCAhZm9ybWF0W21dW2Zvcm1hdENvbHVtbl0pCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCEodmFsIGluIGNh
dGVnb3JpZXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXNbdmFsXSA9IGluZGV4
OwotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwb2ludHNbaSArIG1dID0gY2F0ZWdvcmllc1t2
YWxdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcHJv
Y2Vzc0RhdGFwb2ludHMocGxvdCwgc2VyaWVzLCBkYXRhcG9pbnRzKSB7Ci0gICAgICAgIHNldHVw
Q2F0ZWdvcmllc0ZvckF4aXMoc2VyaWVzLCAieGF4aXMiLCBkYXRhcG9pbnRzKTsKLSAgICAgICAg
c2V0dXBDYXRlZ29yaWVzRm9yQXhpcyhzZXJpZXMsICJ5YXhpcyIsIGRhdGFwb2ludHMpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGluaXQocGxvdCkgewotICAgICAgICBwbG90Lmhvb2tzLnByb2Nl
c3NSYXdEYXRhLnB1c2gocHJvY2Vzc1Jhd0RhdGEpOwotICAgICAgICBwbG90Lmhvb2tzLnByb2Nl
c3NEYXRhcG9pbnRzLnB1c2gocHJvY2Vzc0RhdGFwb2ludHMpOwotICAgIH0KLSAgICAKLSAgICAk
LnBsb3QucGx1Z2lucy5wdXNoKHsKLSAgICAgICAgaW5pdDogaW5pdCwKLSAgICAgICAgb3B0aW9u
czogb3B0aW9ucywKLSAgICAgICAgbmFtZTogJ2NhdGVnb3JpZXMnLAotICAgICAgICB2ZXJzaW9u
OiAnMS4wJwotICAgIH0pOwotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuY3Jvc3NoYWlyLmpzIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5jcm9zc2hhaXIuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YzU3MTY3MTc3MTY2OWIyZjI1OGI0NjMxNzgwMGYy
NzE2NWU2MTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5jcm9zc2hhaXIu
anMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyogRmxvdCBwbHVnaW4gZm9yIHNo
b3dpbmcgY3Jvc3NoYWlycyB3aGVuIHRoZSBtb3VzZSBob3ZlcnMgb3ZlciB0aGUgcGxvdC4KLQot
Q29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1
bmRlciB0aGUgTUlUIGxpY2Vuc2UuCi0KLVRoZSBwbHVnaW4gc3VwcG9ydHMgdGhlc2Ugb3B0aW9u
czoKLQotICAgIGNyb3NzaGFpcjogewotICAgICAgICBtb2RlOiBudWxsIG9yICJ4IiBvciAieSIg
b3IgInh5IgotICAgICAgICBjb2xvcjogY29sb3IKLSAgICAgICAgbGluZVdpZHRoOiBudW1iZXIK
LSAgICB9Ci0KLVNldCB0aGUgbW9kZSB0byBvbmUgb2YgIngiLCAieSIgb3IgInh5Ii4gVGhlICJ4
IiBtb2RlIGVuYWJsZXMgYSB2ZXJ0aWNhbAotY3Jvc3NoYWlyIHRoYXQgbGV0cyB5b3UgdHJhY2Ug
dGhlIHZhbHVlcyBvbiB0aGUgeCBheGlzLCAieSIgZW5hYmxlcyBhCi1ob3Jpem9udGFsIGNyb3Nz
aGFpciBhbmQgInh5IiBlbmFibGVzIHRoZW0gYm90aC4gImNvbG9yIiBpcyB0aGUgY29sb3Igb2Yg
dGhlCi1jcm9zc2hhaXIgKGRlZmF1bHQgaXMgInJnYmEoMTcwLCAwLCAwLCAwLjgwKSIpLCAibGlu
ZVdpZHRoIiBpcyB0aGUgd2lkdGggb2YKLXRoZSBkcmF3biBsaW5lcyAoZGVmYXVsdCBpcyAxKS4K
LQotVGhlIHBsdWdpbiBhbHNvIGFkZHMgZm91ciBwdWJsaWMgbWV0aG9kczoKLQotICAtIHNldENy
b3NzaGFpciggcG9zICkKLQotICAgIFNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGNyb3NzaGFpci4g
Tm90ZSB0aGF0IHRoaXMgaXMgY2xlYXJlZCBpZiB0aGUgdXNlcgotICAgIG1vdmVzIHRoZSBtb3Vz
ZS4gInBvcyIgaXMgaW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBsb3QgYW5kIHNob3VsZCBiZSBvbiB0
aGUKLSAgICBmb3JtIHsgeDogeHBvcywgeTogeXBvcyB9ICh5b3UgY2FuIHVzZSB4Mi94My8uLi4g
aWYgeW91J3JlIHVzaW5nIG11bHRpcGxlCi0gICAgYXhlcyksIHdoaWNoIGlzIGNvaW5jaWRlbnRh
bGx5IHRoZSBzYW1lIGZvcm1hdCBhcyB3aGF0IHlvdSBnZXQgZnJvbSBhCi0gICAgInBsb3Rob3Zl
ciIgZXZlbnQuIElmICJwb3MiIGlzIG51bGwsIHRoZSBjcm9zc2hhaXIgaXMgY2xlYXJlZC4KLQot
ICAtIGNsZWFyQ3Jvc3NoYWlyKCkKLQotICAgIENsZWFyIHRoZSBjcm9zc2hhaXIuCi0KLSAgLSBs
b2NrQ3Jvc3NoYWlyKHBvcykKLQotICAgIENhdXNlIHRoZSBjcm9zc2hhaXIgdG8gbG9jayB0byB0
aGUgY3VycmVudCBsb2NhdGlvbiwgbm8gbG9uZ2VyIHVwZGF0aW5nIGlmCi0gICAgdGhlIHVzZXIg
bW92ZXMgdGhlIG1vdXNlLiBPcHRpb25hbGx5IHN1cHBseSBhIHBvc2l0aW9uIChwYXNzZWQgb24g
dG8KLSAgICBzZXRDcm9zc2hhaXIoKSkgdG8gbW92ZSBpdCB0by4KLQotICAgIEV4YW1wbGUgdXNh
Z2U6Ci0KLSAgICB2YXIgbXlGbG90ID0gJC5wbG90KCAkKCIjZ3JhcGgiKSwgLi4uLCB7IGNyb3Nz
aGFpcjogeyBtb2RlOiAieCIgfSB9IH07Ci0gICAgJCgiI2dyYXBoIikuYmluZCggInBsb3Rob3Zl
ciIsIGZ1bmN0aW9uICggZXZ0LCBwb3NpdGlvbiwgaXRlbSApIHsKLSAgICAgICAgaWYgKCBpdGVt
ICkgewotICAgICAgICAgICAgLy8gTG9jayB0aGUgY3Jvc3NoYWlyIHRvIHRoZSBkYXRhIHBvaW50
IGJlaW5nIGhvdmVyZWQKLSAgICAgICAgICAgIG15RmxvdC5sb2NrQ3Jvc3NoYWlyKHsKLSAgICAg
ICAgICAgICAgICB4OiBpdGVtLmRhdGFwb2ludFsgMCBdLAotICAgICAgICAgICAgICAgIHk6IGl0
ZW0uZGF0YXBvaW50WyAxIF0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gUmV0dXJuIG5vcm1hbCBjcm9zc2hhaXIgb3BlcmF0aW9uCi0gICAgICAgICAg
ICBteUZsb3QudW5sb2NrQ3Jvc3NoYWlyKCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAtIHVu
bG9ja0Nyb3NzaGFpcigpCi0KLSAgICBGcmVlIHRoZSBjcm9zc2hhaXIgdG8gbW92ZSBhZ2FpbiBh
ZnRlciBsb2NraW5nIGl0LgotKi8KLQotKGZ1bmN0aW9uICgkKSB7Ci0gICAgdmFyIG9wdGlvbnMg
PSB7Ci0gICAgICAgIGNyb3NzaGFpcjogewotICAgICAgICAgICAgbW9kZTogbnVsbCwgLy8gb25l
IG9mIG51bGwsICJ4IiwgInkiIG9yICJ4eSIsCi0gICAgICAgICAgICBjb2xvcjogInJnYmEoMTcw
LCAwLCAwLCAwLjgwKSIsCi0gICAgICAgICAgICBsaW5lV2lkdGg6IDEKLSAgICAgICAgfQotICAg
IH07Ci0gICAgCi0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIC8vIHBvc2l0aW9u
IG9mIGNyb3NzaGFpciBpbiBwaXhlbHMKLSAgICAgICAgdmFyIGNyb3NzaGFpciA9IHsgeDogLTEs
IHk6IC0xLCBsb2NrZWQ6IGZhbHNlIH07Ci0KLSAgICAgICAgcGxvdC5zZXRDcm9zc2hhaXIgPSBm
dW5jdGlvbiBzZXRDcm9zc2hhaXIocG9zKSB7Ci0gICAgICAgICAgICBpZiAoIXBvcykKLSAgICAg
ICAgICAgICAgICBjcm9zc2hhaXIueCA9IC0xOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG8gPSBwbG90LnAyYyhwb3MpOwotICAgICAgICAgICAgICAgIGNyb3NzaGFp
ci54ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oby5sZWZ0LCBwbG90LndpZHRoKCkpKTsKLSAgICAg
ICAgICAgICAgICBjcm9zc2hhaXIueSA9IE1hdGgubWF4KDAsIE1hdGgubWluKG8udG9wLCBwbG90
LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBs
b3QudHJpZ2dlclJlZHJhd092ZXJsYXkoKTsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAg
IHBsb3QuY2xlYXJDcm9zc2hhaXIgPSBwbG90LnNldENyb3NzaGFpcjsgLy8gcGFzc2VzIG51bGwg
Zm9yIHBvcwotICAgICAgICAKLSAgICAgICAgcGxvdC5sb2NrQ3Jvc3NoYWlyID0gZnVuY3Rpb24g
bG9ja0Nyb3NzaGFpcihwb3MpIHsKLSAgICAgICAgICAgIGlmIChwb3MpCi0gICAgICAgICAgICAg
ICAgcGxvdC5zZXRDcm9zc2hhaXIocG9zKTsKLSAgICAgICAgICAgIGNyb3NzaGFpci5sb2NrZWQg
PSB0cnVlOwotICAgICAgICB9OwotCi0gICAgICAgIHBsb3QudW5sb2NrQ3Jvc3NoYWlyID0gZnVu
Y3Rpb24gdW5sb2NrQ3Jvc3NoYWlyKCkgewotICAgICAgICAgICAgY3Jvc3NoYWlyLmxvY2tlZCA9
IGZhbHNlOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdXQoZSkgewot
ICAgICAgICAgICAgaWYgKGNyb3NzaGFpci5sb2NrZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICBpZiAoY3Jvc3NoYWlyLnggIT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICBjcm9zc2hhaXIueCA9IC0xOwotICAgICAgICAgICAgICAgIHBsb3QudHJpZ2dlclJlZHJhd092
ZXJsYXkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG9u
TW91c2VNb3ZlKGUpIHsKLSAgICAgICAgICAgIGlmIChjcm9zc2hhaXIubG9ja2VkKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwbG90
LmdldFNlbGVjdGlvbiAmJiBwbG90LmdldFNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
Y3Jvc3NoYWlyLnggPSAtMTsgLy8gaGlkZSB0aGUgY3Jvc3NoYWlyIHdoaWxlIHNlbGVjdGluZwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwbG90Lm9mZnNldCgpOwotICAgICAgICAgICAgY3Jv
c3NoYWlyLnggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlLnBhZ2VYIC0gb2Zmc2V0LmxlZnQsIHBs
b3Qud2lkdGgoKSkpOwotICAgICAgICAgICAgY3Jvc3NoYWlyLnkgPSBNYXRoLm1heCgwLCBNYXRo
Lm1pbihlLnBhZ2VZIC0gb2Zmc2V0LnRvcCwgcGxvdC5oZWlnaHQoKSkpOwotICAgICAgICAgICAg
cGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBwbG90Lmhvb2tzLmJpbmRFdmVudHMucHVzaChmdW5jdGlvbiAocGxvdCwgZXZlbnRIb2xkZXIp
IHsKLSAgICAgICAgICAgIGlmICghcGxvdC5nZXRPcHRpb25zKCkuY3Jvc3NoYWlyLm1vZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBldmVudEhvbGRlci5tb3VzZW91
dChvbk1vdXNlT3V0KTsKLSAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlbW92ZShvbk1vdXNl
TW92ZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHBsb3QuaG9va3MuZHJhd092ZXJsYXkucHVz
aChmdW5jdGlvbiAocGxvdCwgY3R4KSB7Ci0gICAgICAgICAgICB2YXIgYyA9IHBsb3QuZ2V0T3B0
aW9ucygpLmNyb3NzaGFpcjsKLSAgICAgICAgICAgIGlmICghYy5tb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHBsb3RPZmZzZXQgPSBwbG90LmdldFBsb3RP
ZmZzZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAg
ICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7Ci0KLSAg
ICAgICAgICAgIGlmIChjcm9zc2hhaXIueCAhPSAtMSkgewotICAgICAgICAgICAgICAgIHZhciBh
ZGogPSBwbG90LmdldE9wdGlvbnMoKS5jcm9zc2hhaXIubGluZVdpZHRoICUgMiA9PT0gMCA/IDAg
OiAwLjU7Ci0KLSAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjLmNvbG9yOwotICAg
ICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBjLmxpbmVXaWR0aDsKLSAgICAgICAgICAgICAg
ICBjdHgubGluZUpvaW4gPSAicm91bmQiOwotCi0gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0
aCgpOwotICAgICAgICAgICAgICAgIGlmIChjLm1vZGUuaW5kZXhPZigieCIpICE9IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBkcmF3WCA9IE1hdGgucm91bmQoY3Jvc3NoYWlyLngpICsg
YWRqOwotICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGRyYXdYLCAwKTsKLSAgICAgICAg
ICAgICAgICAgICAgY3R4LmxpbmVUbyhkcmF3WCwgcGxvdC5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjLm1vZGUuaW5kZXhPZigieSIpICE9IC0xKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkcmF3WSA9IE1hdGgucm91bmQoY3Jvc3NoYWlyLnkp
ICsgYWRqOwotICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKDAsIGRyYXdZKTsKLSAgICAg
ICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhwbG90LndpZHRoKCksIGRyYXdZKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcGxvdC5o
b29rcy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uIChwbG90LCBldmVudEhvbGRlcikgewotICAgICAg
ICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW91dCIsIG9uTW91c2VPdXQpOwotICAgICAg
ICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW1vdmUiLCBvbk1vdXNlTW92ZSk7Ci0gICAg
ICAgIH0pOwotICAgIH0KLSAgICAKLSAgICAkLnBsb3QucGx1Z2lucy5wdXNoKHsKLSAgICAgICAg
aW5pdDogaW5pdCwKLSAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgbmFtZTogJ2Ny
b3NzaGFpcicsCi0gICAgICAgIHZlcnNpb246ICcxLjAnCi0gICAgfSk7Ci19KShqUXVlcnkpOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxv
dC5lcnJvcmJhcnMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVy
eS5mbG90LmVycm9yYmFycy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3NGEw
ZDk3ZGU3MzQ4YjNlNzM5OGE1ZWIwZDRhNTIzYmMxMTlhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L2pzL2pxdWVyeS5mbG90LmVycm9yYmFycy5qcworKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCww
IEBACi0vKiBGbG90IHBsdWdpbiBmb3IgcGxvdHRpbmcgZXJyb3IgYmFycy4KLQotQ29weXJpZ2h0
IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUg
TUlUIGxpY2Vuc2UuCi0KLUVycm9yIGJhcnMgYXJlIHVzZWQgdG8gc2hvdyBzdGFuZGFyZCBkZXZp
YXRpb24gYW5kIG90aGVyIHN0YXRpc3RpY2FsCi1wcm9wZXJ0aWVzIGluIGEgcGxvdC4KLQotKiBD
cmVhdGVkIGJ5IFJ1aSBQZXJlaXJhICAtICBydWkgKGRvdCkgcGVyZWlyYSAoYXQpIGdtYWlsIChk
b3QpIGNvbQotCi1UaGlzIHBsdWdpbiBhbGxvd3MgeW91IHRvIHBsb3QgZXJyb3ItYmFycyBvdmVy
IHBvaW50cy4gU2V0ICJlcnJvcmJhcnMiIGluc2lkZQotdGhlIHBvaW50cyBzZXJpZXMgdG8gdGhl
IGF4aXMgbmFtZSBvdmVyIHdoaWNoIHRoZXJlIHdpbGwgYmUgZXJyb3IgdmFsdWVzIGluCi15b3Vy
IGRhdGEgYXJyYXkgKCpldmVuKiBpZiB5b3UgZG8gbm90IGludGVuZCB0byBwbG90IHRoZW0gbGF0
ZXIsIGJ5IHNldHRpbmcKLSJzaG93OiBudWxsIiBvbiB4ZXJyL3llcnIpLgotCi1UaGUgcGx1Z2lu
IHN1cHBvcnRzIHRoZXNlIG9wdGlvbnM6Ci0KLSAgICBzZXJpZXM6IHsKLSAgICAgICAgcG9pbnRz
OiB7Ci0gICAgICAgICAgICBlcnJvcmJhcnM6ICJ4IiBvciAieSIgb3IgInh5IiwKLSAgICAgICAg
ICAgIHhlcnI6IHsKLSAgICAgICAgICAgICAgICBzaG93OiBudWxsL2ZhbHNlIG9yIHRydWUsCi0g
ICAgICAgICAgICAgICAgYXN5bW1ldHJpYzogbnVsbC9mYWxzZSBvciB0cnVlLAotICAgICAgICAg
ICAgICAgIHVwcGVyQ2FwOiBudWxsIG9yICItIiBvciBmdW5jdGlvbiwKLSAgICAgICAgICAgICAg
ICBsb3dlckNhcDogbnVsbCBvciAiLSIgb3IgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgY29s
b3I6IG51bGwgb3IgY29sb3IsCi0gICAgICAgICAgICAgICAgcmFkaXVzOiBudWxsIG9yIG51bWJl
cgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHllcnI6IHsgc2FtZSBvcHRpb25zIGFzIHhl
cnIgfQotICAgICAgICB9Ci0gICAgfQotCi1FYWNoIGRhdGEgcG9pbnQgYXJyYXkgaXMgZXhwZWN0
ZWQgdG8gYmUgb2YgdGhlIHR5cGU6Ci0KLSAgICAieCIgIFsgeCwgeSwgeGVyciBdCi0gICAgInki
ICBbIHgsIHksIHllcnIgXQotICAgICJ4eSIgWyB4LCB5LCB4ZXJyLCB5ZXJyIF0KLQotV2hlcmUg
eGVyciBiZWNvbWVzIHhlcnJfbG93ZXIseGVycl91cHBlciBmb3IgdGhlIGFzeW1tZXRyaWMgZXJy
b3IgY2FzZSwgYW5kCi1lcXVpdmFsZW50bHkgZm9yIHllcnIuIEVnLiwgYSBkYXRhcG9pbnQgZm9y
IHRoZSAieHkiIGNhc2Ugd2l0aCBzeW1tZXRyaWMKLWVycm9yLWJhcnMgb24gWCBhbmQgYXN5bW1l
dHJpYyBvbiBZIHdvdWxkIGJlOgotCi0gICAgWyB4LCB5LCB4ZXJyLCB5ZXJyX2xvd2VyLCB5ZXJy
X3VwcGVyIF0KLQotQnkgZGVmYXVsdCBubyBlbmQgY2FwcyBhcmUgZHJhd24uIFNldHRpbmcgdXBw
ZXJDYXAgYW5kL29yIGxvd2VyQ2FwIHRvICItIiB3aWxsCi1kcmF3IGEgc21hbGwgY2FwIHBlcnBl
bmRpY3VsYXIgdG8gdGhlIGVycm9yIGJhci4gVGhleSBjYW4gYWxzbyBiZSBzZXQgdG8gYQotdXNl
ci1kZWZpbmVkIGRyYXdpbmcgZnVuY3Rpb24sIHdpdGggKGN0eCwgeCwgeSwgcmFkaXVzKSBhcyBw
YXJhbWV0ZXJzLCBhcyBlZy4KLQotICAgIGZ1bmN0aW9uIGRyYXdTZW1pQ2lyY2xlKCBjdHgsIHgs
IHksIHJhZGl1cyApIHsKLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICBjdHguYXJj
KCB4LCB5LCByYWRpdXMsIDAsIE1hdGguUEksIGZhbHNlICk7Ci0gICAgICAgIGN0eC5tb3ZlVG8o
IHggLSByYWRpdXMsIHkgKTsKLSAgICAgICAgY3R4LmxpbmVUbyggeCArIHJhZGl1cywgeSApOwot
ICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgfQotCi1Db2xvciBhbmQgcmFkaXVzIGJvdGggZGVm
YXVsdCB0byB0aGUgc2FtZSBvbmVzIG9mIHRoZSBwb2ludHMgc2VyaWVzIGlmIG5vdAotc2V0LiBU
aGUgaW5kZXBlbmRlbnQgcmFkaXVzIHBhcmFtZXRlciBvbiB4ZXJyL3llcnIgaXMgdXNlZnVsIGZv
ciB0aGUgY2FzZSB3aGVuCi13ZSBtYXkgd2FudCB0byBhZGQgZXJyb3ItYmFycyB0byBhIGxpbmUs
IHdpdGhvdXQgc2hvd2luZyB0aGUgaW50ZXJjb25uZWN0aW5nCi1wb2ludHMgKHdpdGggcmFkaXVz
OiAwKSwgYW5kIHN0aWxsIHNob3dpbmcgZW5kIGNhcHMgb24gdGhlIGVycm9yLWJhcnMuCi1zaGFk
b3dTaXplIGFuZCBsaW5lV2lkdGggYXJlIGRlcml2ZWQgYXMgd2VsbCBmcm9tIHRoZSBwb2ludHMg
c2VyaWVzLgotCi0qLwotCi0oZnVuY3Rpb24gKCQpIHsKLSAgICB2YXIgb3B0aW9ucyA9IHsKLSAg
ICAgICAgc2VyaWVzOiB7Ci0gICAgICAgICAgICBwb2ludHM6IHsKLSAgICAgICAgICAgICAgICBl
cnJvcmJhcnM6IG51bGwsIC8vc2hvdWxkIGJlICd4JywgJ3knIG9yICd4eScKLSAgICAgICAgICAg
ICAgICB4ZXJyOiB7IGVycjogJ3gnLCBzaG93OiBudWxsLCBhc3ltbWV0cmljOiBudWxsLCB1cHBl
ckNhcDogbnVsbCwgbG93ZXJDYXA6IG51bGwsIGNvbG9yOiBudWxsLCByYWRpdXM6IG51bGx9LAot
ICAgICAgICAgICAgICAgIHllcnI6IHsgZXJyOiAneScsIHNob3c6IG51bGwsIGFzeW1tZXRyaWM6
IG51bGwsIHVwcGVyQ2FwOiBudWxsLCBsb3dlckNhcDogbnVsbCwgY29sb3I6IG51bGwsIHJhZGl1
czogbnVsbH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBmdW5jdGlv
biBwcm9jZXNzUmF3RGF0YShwbG90LCBzZXJpZXMsIGRhdGEsIGRhdGFwb2ludHMpewotICAgICAg
ICBpZiAoIXNlcmllcy5wb2ludHMuZXJyb3JiYXJzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIHgseSB2YWx1ZXMKLSAgICAgICAgdmFyIGZvcm1hdCA9IFsKLSAgICAgICAgICAg
IHsgeDogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9LAotICAgICAgICAgICAg
eyB5OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0KLSAgICAgICAgXTsKLQot
ICAgICAgICB2YXIgZXJyb3JzID0gc2VyaWVzLnBvaW50cy5lcnJvcmJhcnM7Ci0gICAgICAgIC8v
IGVycm9yIGJhcnMgLSBmaXJzdCBYIHRoZW4gWQotICAgICAgICBpZiAoZXJyb3JzID09ICd4JyB8
fCBlcnJvcnMgPT0gJ3h5JykgewotICAgICAgICAgICAgLy8gbG93ZXIgLyB1cHBlciBlcnJvcgot
ICAgICAgICAgICAgaWYgKHNlcmllcy5wb2ludHMueGVyci5hc3ltbWV0cmljKSB7Ci0gICAgICAg
ICAgICAgICAgZm9ybWF0LnB1c2goeyB4OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0
cnVlIH0pOwotICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeDogdHJ1ZSwgbnVtYmVyOiB0
cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGZvcm1hdC5wdXNoKHsgeDogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyb3JzID09ICd5JyB8fCBlcnJvcnMgPT0gJ3h5
JykgewotICAgICAgICAgICAgLy8gbG93ZXIgLyB1cHBlciBlcnJvcgotICAgICAgICAgICAgaWYg
KHNlcmllcy5wb2ludHMueWVyci5hc3ltbWV0cmljKSB7Ci0gICAgICAgICAgICAgICAgZm9ybWF0
LnB1c2goeyB5OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pOwotICAgICAg
ICAgICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDog
dHJ1ZSB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZvcm1hdC5wdXNo
KHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KTsKLSAgICAgICAgfQot
ICAgICAgICBkYXRhcG9pbnRzLmZvcm1hdCA9IGZvcm1hdDsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBwYXJzZUVycm9ycyhzZXJpZXMsIGkpewotCi0gICAgICAgIHZhciBwb2ludHMgPSBzZXJpZXMu
ZGF0YXBvaW50cy5wb2ludHM7Ci0KLSAgICAgICAgLy8gcmVhZCBlcnJvcnMgZnJvbSBwb2ludHMg
YXJyYXkKLSAgICAgICAgdmFyIGV4bCA9IG51bGwsCi0gICAgICAgICAgICAgICAgZXh1ID0gbnVs
bCwKLSAgICAgICAgICAgICAgICBleWwgPSBudWxsLAotICAgICAgICAgICAgICAgIGV5dSA9IG51
bGw7Ci0gICAgICAgIHZhciB4ZXJyID0gc2VyaWVzLnBvaW50cy54ZXJyLAotICAgICAgICAgICAg
ICAgIHllcnIgPSBzZXJpZXMucG9pbnRzLnllcnI7Ci0KLSAgICAgICAgdmFyIGViID0gc2VyaWVz
LnBvaW50cy5lcnJvcmJhcnM7Ci0gICAgICAgIC8vIGVycm9yIGJhcnMgLSBmaXJzdCBYCi0gICAg
ICAgIGlmIChlYiA9PSAneCcgfHwgZWIgPT0gJ3h5JykgewotICAgICAgICAgICAgaWYgKHhlcnIu
YXN5bW1ldHJpYykgewotICAgICAgICAgICAgICAgIGV4bCA9IHBvaW50c1tpICsgMl07Ci0gICAg
ICAgICAgICAgICAgZXh1ID0gcG9pbnRzW2kgKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoZWIg
PT0gJ3h5JykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHllcnIuYXN5bW1ldHJpYyl7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleWwgPSBwb2ludHNbaSArIDRdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZXl1ID0gcG9pbnRzW2kgKyA1XTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGV5bCA9IHBvaW50c1tpICsgNF07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGV4bCA9IHBvaW50c1tpICsgMl07Ci0gICAgICAgICAgICAgICAgaWYgKGViID09ICd4eScp
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ZXJyLmFzeW1tZXRyaWMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV5bCA9IHBvaW50c1tpICsgM107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBleXUgPSBwb2ludHNbaSArIDRdOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZXlsID0g
cG9pbnRzW2kgKyAzXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgLy8gb25seSBZCi0gICAgICAg
IH0gZWxzZSBpZiAoZWIgPT0gJ3knKQotICAgICAgICAgICAgaWYgKHllcnIuYXN5bW1ldHJpYykg
ewotICAgICAgICAgICAgICAgIGV5bCA9IHBvaW50c1tpICsgMl07Ci0gICAgICAgICAgICAgICAg
ZXl1ID0gcG9pbnRzW2kgKyAzXTsKLSAgICAgICAgICAgIH0gZWxzZSBleWwgPSBwb2ludHNbaSAr
IDJdOwotCi0gICAgICAgIC8vIHN5bW1ldHJpYyBlcnJvcnM/Ci0gICAgICAgIGlmIChleHUgPT0g
bnVsbCkgZXh1ID0gZXhsOwotICAgICAgICBpZiAoZXl1ID09IG51bGwpIGV5dSA9IGV5bDsKLQot
ICAgICAgICB2YXIgZXJyUmFuZ2VzID0gW2V4bCwgZXh1LCBleWwsIGV5dV07Ci0gICAgICAgIC8v
IG51bGxpZnkgaWYgbm90IHNob3dpbmcKLSAgICAgICAgaWYgKCF4ZXJyLnNob3cpewotICAgICAg
ICAgICAgZXJyUmFuZ2VzWzBdID0gbnVsbDsKLSAgICAgICAgICAgIGVyclJhbmdlc1sxXSA9IG51
bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF5ZXJyLnNob3cpewotICAgICAgICAgICAgZXJy
UmFuZ2VzWzJdID0gbnVsbDsKLSAgICAgICAgICAgIGVyclJhbmdlc1szXSA9IG51bGw7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGVyclJhbmdlczsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBk
cmF3U2VyaWVzRXJyb3JzKHBsb3QsIGN0eCwgcyl7Ci0KLSAgICAgICAgdmFyIHBvaW50cyA9IHMu
ZGF0YXBvaW50cy5wb2ludHMsCi0gICAgICAgICAgICAgICAgcHMgPSBzLmRhdGFwb2ludHMucG9p
bnRzaXplLAotICAgICAgICAgICAgICAgIGF4ID0gW3MueGF4aXMsIHMueWF4aXNdLAotICAgICAg
ICAgICAgICAgIHJhZGl1cyA9IHMucG9pbnRzLnJhZGl1cywKLSAgICAgICAgICAgICAgICBlcnIg
PSBbcy5wb2ludHMueGVyciwgcy5wb2ludHMueWVycl07Ci0KLSAgICAgICAgLy9zYW5pdHkgY2hl
Y2ssIGluIGNhc2Ugc29tZSBpbnZlcnRlZCBheGlzIGhhY2sgaXMgYXBwbGllZCB0byBmbG90Ci0g
ICAgICAgIHZhciBpbnZlcnRYID0gZmFsc2U7Ci0gICAgICAgIGlmIChheFswXS5wMmMoYXhbMF0u
bWF4KSA8IGF4WzBdLnAyYyhheFswXS5taW4pKSB7Ci0gICAgICAgICAgICBpbnZlcnRYID0gdHJ1
ZTsKLSAgICAgICAgICAgIHZhciB0bXAgPSBlcnJbMF0ubG93ZXJDYXA7Ci0gICAgICAgICAgICBl
cnJbMF0ubG93ZXJDYXAgPSBlcnJbMF0udXBwZXJDYXA7Ci0gICAgICAgICAgICBlcnJbMF0udXBw
ZXJDYXAgPSB0bXA7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaW52ZXJ0WSA9IGZhbHNlOwot
ICAgICAgICBpZiAoYXhbMV0ucDJjKGF4WzFdLm1pbikgPCBheFsxXS5wMmMoYXhbMV0ubWF4KSkg
ewotICAgICAgICAgICAgaW52ZXJ0WSA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgdG1wID0gZXJy
WzFdLmxvd2VyQ2FwOwotICAgICAgICAgICAgZXJyWzFdLmxvd2VyQ2FwID0gZXJyWzFdLnVwcGVy
Q2FwOwotICAgICAgICAgICAgZXJyWzFdLnVwcGVyQ2FwID0gdG1wOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmRhdGFwb2ludHMucG9pbnRzLmxlbmd0aDsgaSAr
PSBwcykgewotCi0gICAgICAgICAgICAvL3BhcnNlCi0gICAgICAgICAgICB2YXIgZXJyUmFuZ2Vz
ID0gcGFyc2VFcnJvcnMocywgaSk7Ci0KLSAgICAgICAgICAgIC8vY3ljbGUgeGVyciAmIHllcnIK
LSAgICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgZXJyLmxlbmd0aDsgZSsrKXsKLQotICAg
ICAgICAgICAgICAgIHZhciBtaW5tYXggPSBbYXhbZV0ubWluLCBheFtlXS5tYXhdOwotCi0gICAg
ICAgICAgICAgICAgLy9kcmF3IHRoaXMgZXJyb3I/Ci0gICAgICAgICAgICAgICAgaWYgKGVyclJh
bmdlc1tlICogZXJyLmxlbmd0aF0pewotCi0gICAgICAgICAgICAgICAgICAgIC8vZGF0YSBjb29y
ZGluYXRlcwotICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBvaW50c1tpXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbaSArIDFdOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vZXJyb3JiYXIgcmFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIHZhciB1cHBlciA9IFt4LCB5
XVtlXSArIGVyclJhbmdlc1tlICogZXJyLmxlbmd0aCArIDFdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbG93ZXIgPSBbeCwgeV1bZV0gLSBlcnJSYW5nZXNbZSAqIGVyci5sZW5ndGhdOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vcG9pbnRzIG91dHNpZGUgb2YgdGhlIGNhbnZhcwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZXJyW2VdLmVyciA9PSAneCcpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeSA+IGF4WzFdLm1heCB8fCB5IDwgYXhbMV0ubWluIHx8IHVwcGVyIDwgYXhbMF0u
bWluIHx8IGxvd2VyID4gYXhbMF0ubWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyW2VdLmVyciA9PSAneScpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IGF4WzBdLm1heCB8fCB4IDwgYXhbMF0ubWluIHx8
IHVwcGVyIDwgYXhbMV0ubWluIHx8IGxvd2VyID4gYXhbMV0ubWF4KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQg
ZXJyb3JiYXJzIGdldHRpbmcgb3V0IG9mIHRoZSBjYW52YXMKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGRyYXdVcHBlciA9IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3TG93ZXIg
PSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh1cHBlciA+IG1pbm1heFsxXSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1VwcGVyID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1cHBlciA9IG1pbm1heFsxXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBpZiAobG93ZXIgPCBtaW5tYXhbMF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRyYXdMb3dlciA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgbG93
ZXIgPSBtaW5tYXhbMF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAvL3Nhbml0eSBjaGVjaywgaW4gY2FzZSBzb21lIGludmVydGVkIGF4aXMgaGFjayBpcyBh
cHBsaWVkIHRvIGZsb3QKLSAgICAgICAgICAgICAgICAgICAgaWYgKChlcnJbZV0uZXJyID09ICd4
JyAmJiBpbnZlcnRYKSB8fCAoZXJyW2VdLmVyciA9PSAneScgJiYgaW52ZXJ0WSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vc3dhcCBjb29yZGluYXRlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHRtcCA9IGxvd2VyOwotICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXIgPSB1
cHBlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gdG1wOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gZHJhd0xvd2VyOwotICAgICAgICAgICAgICAgICAgICAgICAgZHJh
d0xvd2VyID0gZHJhd1VwcGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1VwcGVyID0g
dG1wOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbWlubWF4WzBdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbWlubWF4WzBdID0gbWlubWF4WzFdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbWlubWF4WzFdID0gdG1wOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gY29udmVydCB0byBwaXhlbHMKLSAgICAgICAgICAgICAgICAgICAgeCA9
IGF4WzBdLnAyYyh4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBheFsxXS5wMmMoeSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cHBlciA9IGF4W2VdLnAyYyh1cHBlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGxvd2VyID0gYXhbZV0ucDJjKGxvd2VyKTsKLSAgICAgICAgICAgICAg
ICAgICAgbWlubWF4WzBdID0gYXhbZV0ucDJjKG1pbm1heFswXSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1pbm1heFsxXSA9IGF4W2VdLnAyYyhtaW5tYXhbMV0pOwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vc2FtZSBzdHlsZSBhcyBwb2ludHMgYnkgZGVmYXVsdAotICAgICAgICAgICAgICAgICAg
ICB2YXIgbHcgPSBlcnJbZV0ubGluZVdpZHRoID8gZXJyW2VdLmxpbmVXaWR0aCA6IHMucG9pbnRz
LmxpbmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3ID0gcy5wb2ludHMuc2hhZG93
U2l6ZSAhPSBudWxsID8gcy5wb2ludHMuc2hhZG93U2l6ZSA6IHMuc2hhZG93U2l6ZTsKLQotICAg
ICAgICAgICAgICAgICAgICAvL3NoYWRvdyBhcyBmb3IgcG9pbnRzCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChsdyA+IDAgJiYgc3cgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dyA9IHN3IC8gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSB3Owot
ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMCwwLDAsMC4x
KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3RXJyb3IoY3R4LCBlcnJbZV0sIHgsIHks
IHVwcGVyLCBsb3dlciwgZHJhd1VwcGVyLCBkcmF3TG93ZXIsIHJhZGl1cywgdyArIHcvMiwgbWlu
bWF4KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEo
MCwwLDAsMC4yKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkcmF3RXJyb3IoY3R4LCBlcnJb
ZV0sIHgsIHksIHVwcGVyLCBsb3dlciwgZHJhd1VwcGVyLCBkcmF3TG93ZXIsIHJhZGl1cywgdy8y
LCBtaW5tYXgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y3R4LnN0cm9rZVN0eWxlID0gZXJyW2VdLmNvbG9yPyBlcnJbZV0uY29sb3I6IHMuY29sb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBsdzsKLSAgICAgICAgICAgICAgICAg
ICAgLy9kcmF3IGl0Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdFcnJvcihjdHgsIGVycltlXSwg
eCwgeSwgdXBwZXIsIGxvd2VyLCBkcmF3VXBwZXIsIGRyYXdMb3dlciwgcmFkaXVzLCAwLCBtaW5t
YXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZ1bmN0aW9uIGRyYXdFcnJvcihjdHgsZXJyLHgseSx1cHBlcixsb3dlcixkcmF3VXBw
ZXIsZHJhd0xvd2VyLHJhZGl1cyxvZmZzZXQsbWlubWF4KXsKLQotICAgICAgICAvL3NoYWRvdyBv
ZmZzZXQKLSAgICAgICAgeSArPSBvZmZzZXQ7Ci0gICAgICAgIHVwcGVyICs9IG9mZnNldDsKLSAg
ICAgICAgbG93ZXIgKz0gb2Zmc2V0OwotCi0gICAgICAgIC8vIGVycm9yIGJhciAtIGF2b2lkIHBs
b3R0aW5nIG92ZXIgY2lyY2xlcwotICAgICAgICBpZiAoZXJyLmVyciA9PSAneCcpewotICAgICAg
ICAgICAgaWYgKHVwcGVyID4geCArIHJhZGl1cykgZHJhd1BhdGgoY3R4LCBbW3VwcGVyLHldLFtN
YXRoLm1heCh4ICsgcmFkaXVzLG1pbm1heFswXSkseV1dKTsKLSAgICAgICAgICAgIGVsc2UgZHJh
d1VwcGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG93ZXIgPCB4IC0gcmFkaXVzKSBkcmF3
UGF0aChjdHgsIFtbTWF0aC5taW4oeCAtIHJhZGl1cyxtaW5tYXhbMV0pLHldLFtsb3dlcix5XV0g
KTsKLSAgICAgICAgICAgIGVsc2UgZHJhd0xvd2VyID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAodXBwZXIgPCB5IC0gcmFkaXVzKSBkcmF3UGF0aChj
dHgsIFtbeCx1cHBlcl0sW3gsTWF0aC5taW4oeSAtIHJhZGl1cyxtaW5tYXhbMF0pXV0gKTsKLSAg
ICAgICAgICAgIGVsc2UgZHJhd1VwcGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobG93ZXIg
PiB5ICsgcmFkaXVzKSBkcmF3UGF0aChjdHgsIFtbeCxNYXRoLm1heCh5ICsgcmFkaXVzLG1pbm1h
eFsxXSldLFt4LGxvd2VyXV0gKTsKLSAgICAgICAgICAgIGVsc2UgZHJhd0xvd2VyID0gZmFsc2U7
Ci0gICAgICAgIH0KLQotICAgICAgICAvL2ludGVybmFsIHJhZGl1cyB2YWx1ZSBpbiBlcnJvcmJh
ciwgYWxsb3dzIHRvIHBsb3QgcmFkaXVzIDAgcG9pbnRzIGFuZCBzdGlsbCBrZWVwIHByb3BlciBz
aXplZCBjYXBzCi0gICAgICAgIC8vdGhpcyBpcyBhIHdheSB0byBnZXQgZXJyb3JiYXJzIG9uIGxp
bmVzIHdpdGhvdXQgdmlzaWJsZSBjb25uZWN0aW5nIGRvdHMKLSAgICAgICAgcmFkaXVzID0gZXJy
LnJhZGl1cyAhPSBudWxsPyBlcnIucmFkaXVzOiByYWRpdXM7Ci0KLSAgICAgICAgLy8gdXBwZXIg
Y2FwCi0gICAgICAgIGlmIChkcmF3VXBwZXIpIHsKLSAgICAgICAgICAgIGlmIChlcnIudXBwZXJD
YXAgPT0gJy0nKXsKLSAgICAgICAgICAgICAgICBpZiAoZXJyLmVycj09J3gnKSBkcmF3UGF0aChj
dHgsIFtbdXBwZXIseSAtIHJhZGl1c10sW3VwcGVyLHkgKyByYWRpdXNdXSApOwotICAgICAgICAg
ICAgICAgIGVsc2UgZHJhd1BhdGgoY3R4LCBbW3ggLSByYWRpdXMsdXBwZXJdLFt4ICsgcmFkaXVz
LHVwcGVyXV0gKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pc0Z1bmN0aW9uKGVyci51cHBl
ckNhcCkpewotICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyPT0neCcpIGVyci51cHBlckNhcChj
dHgsIHVwcGVyLCB5LCByYWRpdXMpOwotICAgICAgICAgICAgICAgIGVsc2UgZXJyLnVwcGVyQ2Fw
KGN0eCwgeCwgdXBwZXIsIHJhZGl1cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gbG93ZXIgY2FwCi0gICAgICAgIGlmIChkcmF3TG93ZXIpIHsKLSAgICAgICAgICAgIGlm
IChlcnIubG93ZXJDYXAgPT0gJy0nKXsKLSAgICAgICAgICAgICAgICBpZiAoZXJyLmVycj09J3gn
KSBkcmF3UGF0aChjdHgsIFtbbG93ZXIseSAtIHJhZGl1c10sW2xvd2VyLHkgKyByYWRpdXNdXSAp
OwotICAgICAgICAgICAgICAgIGVsc2UgZHJhd1BhdGgoY3R4LCBbW3ggLSByYWRpdXMsbG93ZXJd
LFt4ICsgcmFkaXVzLGxvd2VyXV0gKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pc0Z1bmN0
aW9uKGVyci5sb3dlckNhcCkpewotICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyPT0neCcpIGVy
ci5sb3dlckNhcChjdHgsIGxvd2VyLCB5LCByYWRpdXMpOwotICAgICAgICAgICAgICAgIGVsc2Ug
ZXJyLmxvd2VyQ2FwKGN0eCwgeCwgbG93ZXIsIHJhZGl1cyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkcmF3UGF0aChjdHgsIHB0cyl7Ci0gICAgICAg
IGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgY3R4Lm1vdmVUbyhwdHNbMF1bMF0sIHB0c1swXVsx
XSk7Ci0gICAgICAgIGZvciAodmFyIHA9MTsgcCA8IHB0cy5sZW5ndGg7IHArKykKLSAgICAgICAg
ICAgIGN0eC5saW5lVG8ocHRzW3BdWzBdLCBwdHNbcF1bMV0pOwotICAgICAgICBjdHguc3Ryb2tl
KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZHJhdyhwbG90LCBjdHgpewotICAgICAgICB2YXIg
cGxvdE9mZnNldCA9IHBsb3QuZ2V0UGxvdE9mZnNldCgpOwotCi0gICAgICAgIGN0eC5zYXZlKCk7
Ci0gICAgICAgIGN0eC50cmFuc2xhdGUocGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7
Ci0gICAgICAgICQuZWFjaChwbG90LmdldERhdGEoKSwgZnVuY3Rpb24gKGksIHMpIHsKLSAgICAg
ICAgICAgIGlmIChzLnBvaW50cy5lcnJvcmJhcnMgJiYgKHMucG9pbnRzLnhlcnIuc2hvdyB8fCBz
LnBvaW50cy55ZXJyLnNob3cpKQotICAgICAgICAgICAgICAgIGRyYXdTZXJpZXNFcnJvcnMocGxv
dCwgY3R4LCBzKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIHBsb3QuaG9va3MucHJvY2Vzc1Jh
d0RhdGEucHVzaChwcm9jZXNzUmF3RGF0YSk7Ci0gICAgICAgIHBsb3QuaG9va3MuZHJhdy5wdXNo
KGRyYXcpOwotICAgIH0KLQotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICAgICAg
ICAgIGluaXQ6IGluaXQsCi0gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAg
ICAgICAgICAgICBuYW1lOiAnZXJyb3JiYXJzJywKLSAgICAgICAgICAgICAgICB2ZXJzaW9uOiAn
MS4wJwotICAgICAgICAgICAgfSk7Ci19KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5maWxsYmV0d2Vlbi5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuZmlsbGJldHdlZW4u
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2ZiNGY5ZWI4NDNhOTBkZWRiYWQw
OWUwNDk0M2ZhY2JhYTUzYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5m
aWxsYmV0d2Vlbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKiBGbG90IHBs
dWdpbiBmb3IgY29tcHV0aW5nIGJvdHRvbXMgZm9yIGZpbGxlZCBsaW5lIGFuZCBiYXIgY2hhcnRz
LgotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxpY2Vu
c2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQotVGhlIGNhc2U6IHlvdSd2ZSBnb3QgdHdvIHNl
cmllcyB0aGF0IHlvdSB3YW50IHRvIGZpbGwgdGhlIGFyZWEgYmV0d2Vlbi4gSW4gRmxvdAotdGVy
bXMsIHlvdSBuZWVkIHRvIHVzZSBvbmUgYXMgdGhlIGZpbGwgYm90dG9tIG9mIHRoZSBvdGhlci4g
WW91IGNhbiBzcGVjaWZ5IHRoZQotYm90dG9tIG9mIGVhY2ggZGF0YSBwb2ludCBhcyB0aGUgdGhp
cmQgY29vcmRpbmF0ZSBtYW51YWxseSwgb3IgeW91IGNhbiB1c2UgdGhpcwotcGx1Z2luIHRvIGNv
bXB1dGUgaXQgZm9yIHlvdS4KLQotSW4gb3JkZXIgdG8gbmFtZSB0aGUgb3RoZXIgc2VyaWVzLCB5
b3UgbmVlZCB0byBnaXZlIGl0IGFuIGlkLCBsaWtlIHRoaXM6Ci0KLSAgICB2YXIgZGF0YXNldCA9
IFsKLSAgICAgICAgeyBkYXRhOiBbIC4uLiBdLCBpZDogImZvbyIgfSAsICAgICAgICAgLy8gdXNl
IGRlZmF1bHQgYm90dG9tCi0gICAgICAgIHsgZGF0YTogWyAuLi4gXSwgZmlsbEJldHdlZW46ICJm
b28iIH0sIC8vIHVzZSBmaXJzdCBkYXRhc2V0IGFzIGJvdHRvbQotICAgIF07Ci0KLSAgICAkLnBs
b3QoJCgiI3BsYWNlaG9sZGVyIiksIGRhdGFzZXQsIHsgbGluZXM6IHsgc2hvdzogdHJ1ZSwgZmls
bDogdHJ1ZSB9fSk7Ci0KLUFzIGEgY29udmVuaWVuY2UsIGlmIHRoZSBpZCBnaXZlbiBpcyBhIG51
bWJlciB0aGF0IGRvZXNuJ3QgYXBwZWFyIGFzIGFuIGlkIGluCi10aGUgc2VyaWVzLCBpdCBpcyBp
bnRlcnByZXRlZCBhcyB0aGUgaW5kZXggaW4gdGhlIGFycmF5IGluc3RlYWQgKHNvIGZpbGxCZXR3
ZWVuOgotMCBjYW4gYWxzbyBtZWFuIHRoZSBmaXJzdCBzZXJpZXMpLgotCi1JbnRlcm5hbGx5LCB0
aGUgcGx1Z2luIG1vZGlmaWVzIHRoZSBkYXRhcG9pbnRzIGluIGVhY2ggc2VyaWVzLiBGb3IgbGlu
ZSBzZXJpZXMsCi1leHRyYSBkYXRhIHBvaW50cyBtaWdodCBiZSBpbnNlcnRlZCB0aHJvdWdoIGlu
dGVycG9sYXRpb24uIE5vdGUgdGhhdCBhdCBwb2ludHMKLXdoZXJlIHRoZSBib3R0b20gbGluZSBp
cyBub3QgZGVmaW5lZCAoZHVlIHRvIGEgbnVsbCBwb2ludCBvciBzdGFydC9lbmQgb2YgbGluZSks
Ci10aGUgY3VycmVudCBsaW5lIHdpbGwgc2hvdyBhIGdhcCB0b28uIFRoZSBhbGdvcml0aG0gY29t
ZXMgZnJvbSB0aGUKLWpxdWVyeS5mbG90LnN0YWNrLmpzIHBsdWdpbiwgcG9zc2libHkgc29tZSBj
b2RlIGNvdWxkIGJlIHNoYXJlZC4KLQotKi8KLQotKGZ1bmN0aW9uICggJCApIHsKLQotICAgIHZh
ciBvcHRpb25zID0gewotICAgICAgICBzZXJpZXM6IHsKLSAgICAgICAgICAgIGZpbGxCZXR3ZWVu
OiBudWxsICAgIC8vIG9yIG51bWJlcgotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGZ1bmN0aW9u
IGluaXQoIHBsb3QgKSB7Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluZEJvdHRvbVNlcmllcyggcywg
YWxsc2VyaWVzICkgewotCi0gICAgICAgICAgICB2YXIgaTsKLQotICAgICAgICAgICAgZm9yICgg
aSA9IDA7IGkgPCBhbGxzZXJpZXMubGVuZ3RoOyArK2kgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCBhbGxzZXJpZXNbIGkgXS5pZCA9PT0gcy5maWxsQmV0d2VlbiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGFsbHNlcmllc1sgaSBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCB0eXBlb2Ygcy5maWxsQmV0d2VlbiA9PT0gIm51bWJl
ciIgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzLmZpbGxCZXR3ZWVuIDwgMCB8fCBzLmZpbGxC
ZXR3ZWVuID49IGFsbHNlcmllcy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gYWxsc2Vy
aWVzWyBzLmZpbGxCZXR3ZWVuIF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUZpbGxCb3R0b21z
KCBwbG90LCBzLCBkYXRhcG9pbnRzICkgewotCi0gICAgICAgICAgICBpZiAoIHMuZmlsbEJldHdl
ZW4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHZhciBvdGhlciA9IGZpbmRCb3R0b21TZXJpZXMoIHMsIHBsb3QuZ2V0RGF0
YSgpICk7Ci0KLSAgICAgICAgICAgIGlmICggIW90aGVyICkgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHBzID0gZGF0YXBvaW50cy5w
b2ludHNpemUsCi0gICAgICAgICAgICAgICAgcG9pbnRzID0gZGF0YXBvaW50cy5wb2ludHMsCi0g
ICAgICAgICAgICAgICAgb3RoZXJwcyA9IG90aGVyLmRhdGFwb2ludHMucG9pbnRzaXplLAotICAg
ICAgICAgICAgICAgIG90aGVycG9pbnRzID0gb3RoZXIuZGF0YXBvaW50cy5wb2ludHMsCi0gICAg
ICAgICAgICAgICAgbmV3cG9pbnRzID0gW10sCi0gICAgICAgICAgICAgICAgcHgsIHB5LCBpbnRl
cnksIHF4LCBxeSwgYm90dG9tLAotICAgICAgICAgICAgICAgIHdpdGhsaW5lcyA9IHMubGluZXMu
c2hvdywKLSAgICAgICAgICAgICAgICB3aXRoYm90dG9tID0gcHMgPiAyICYmIGRhdGFwb2ludHMu
Zm9ybWF0WzJdLnksCi0gICAgICAgICAgICAgICAgd2l0aHN0ZXBzID0gd2l0aGxpbmVzICYmIHMu
bGluZXMuc3RlcHMsCi0gICAgICAgICAgICAgICAgZnJvbWdhcCA9IHRydWUsCi0gICAgICAgICAg
ICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgaiA9IDAsCi0gICAgICAgICAgICAgICAgbCwg
bTsKLQotICAgICAgICAgICAgd2hpbGUgKCB0cnVlICkgewotCi0gICAgICAgICAgICAgICAgaWYg
KCBpID49IHBvaW50cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGwgPSBuZXdwb2ludHMubGVuZ3RoOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCBwb2ludHNbIGkgXSA9PSBudWxsICkgewotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGNvcHkgZ2FwcwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIG0g
PSAwOyBtIDwgcHM7ICsrbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5w
dXNoKCBwb2ludHNbIGkgKyBtIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGkgKz0gcHM7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqID49
IG90aGVycG9pbnRzLmxlbmd0aCApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbGlu
ZXMsIHdlIGNhbid0IHVzZSB0aGUgcmVzdCBvZiB0aGUgcG9pbnRzCi0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhd2l0aGxpbmVzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
bSA9IDA7IG0gPCBwczsgKyttICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3Bv
aW50cy5wdXNoKCBwb2ludHNbIGkgKyBtIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGkgKz0gcHM7Ci0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBvdGhlcnBvaW50c1sgaiBdID09IG51bGwgKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb29wcywgZ290IGEgZ2FwCi0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yICggbSA9IDA7IG0gPCBwczsgKyttICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3cG9pbnRzLnB1c2goIG51bGwgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGZyb21nYXAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBq
ICs9IG90aGVycHM7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGdvdCB0d28gcG9pbnRzCi0KLSAgICAg
ICAgICAgICAgICAgICAgcHggPSBwb2ludHNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgcHkg
PSBwb2ludHNbIGkgKyAxIF07Ci0gICAgICAgICAgICAgICAgICAgIHF4ID0gb3RoZXJwb2ludHNb
IGogXTsKLSAgICAgICAgICAgICAgICAgICAgcXkgPSBvdGhlcnBvaW50c1sgaiArIDEgXTsKLSAg
ICAgICAgICAgICAgICAgICAgYm90dG9tID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
IHB4ID09PSBxeCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbSA9IDA7IG0g
PCBwczsgKyttICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNo
KCBwb2ludHNbIGkgKyBtIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy9uZXdwb2ludHNbIGwgKyAxIF0gKz0gcXk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBib3R0b20gPSBxeTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaSAr
PSBwczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKLQotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBweCA+IHF4ICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBnb3QgcGFzdCBwb2ludCBiZWxvdywgbWlnaHQgbmVlZCB0bwotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGludGVycG9sYXRlZCBleHRyYSBwb2ludAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHdpdGhsaW5lcyAmJiBpID4gMCAmJiBwb2ludHNbIGkg
LSBwcyBdICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ5ID0g
cHkgKyAoIHBvaW50c1sgaSAtIHBzICsgMSBdIC0gcHkgKSAqICggcXggLSBweCApIC8gKCBwb2lu
dHNbIGkgLSBwcyBdIC0gcHggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2lu
dHMucHVzaCggcXggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVz
aCggaW50ZXJ5ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbSA9IDI7IG0g
PCBwczsgKyttICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMu
cHVzaCggcG9pbnRzWyBpICsgbSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSA9IHF5OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBqICs9IG90aGVycHM7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHggPCBxeAotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiB3ZSBjb21lIGZyb20gYSBnYXAsIHdlIGp1c3Qgc2tpcCB0aGlzIHBvaW50
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZnJvbWdhcCAmJiB3aXRobGluZXMgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggbSA9IDA7IG0gPCBwczsgKyttICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5wdXNoKCBwb2ludHNbIGkgKyBtIF0gKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ug
bWlnaHQgYmUgYWJsZSB0byBpbnRlcnBvbGF0ZSBhIHBvaW50IGJlbG93LAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpcyBjYW4gZ2l2ZSB1cyBhIGJldHRlciB5Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggd2l0aGxpbmVzICYmIGogPiAwICYmIG90aGVycG9pbnRzWyBqIC0g
b3RoZXJwcyBdICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9t
ID0gcXkgKyAoIG90aGVycG9pbnRzWyBqIC0gb3RoZXJwcyArIDEgXSAtIHF5ICkgKiAoIHB4IC0g
cXggKSAvICggb3RoZXJwb2ludHNbIGogLSBvdGhlcnBzIF0gLSBxeCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL25ld3BvaW50c1tsICsg
MV0gKz0gYm90dG9tOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBzOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZnJvbWdhcCA9IGZhbHNlOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbCAhPT0gbmV3cG9pbnRzLmxlbmd0aCAmJiB3aXRo
Ym90dG9tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzWyBsICsgMiBdID0g
Ym90dG9tOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gbWFpbnRhaW4gdGhlIGxpbmUgc3RlcHMgaW52YXJpYW50Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIHdpdGhzdGVwcyAmJiBsICE9PSBuZXdwb2ludHMubGVuZ3RoICYmIGwg
PiAwICYmCi0gICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1sgbCBdICE9PSBudWxsICYmCi0g
ICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1sgbCBdICE9PSBuZXdwb2ludHNbIGwgLSBwcyBd
ICYmCi0gICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1sgbCArIDEgXSAhPT0gbmV3cG9pbnRz
WyBsIC0gcHMgKyAxIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBw
czsgKyttKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHNbIGwgKyBwcyArIG0g
XSA9IG5ld3BvaW50c1sgbCArIG0gXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBuZXdwb2ludHNbIGwgKyAxIF0gPSBuZXdwb2ludHNbIGwgLSBwcyArIDEgXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRhdGFwb2lu
dHMucG9pbnRzID0gbmV3cG9pbnRzOwotICAgICAgICB9Ci0KLSAgICAgICAgcGxvdC5ob29rcy5w
cm9jZXNzRGF0YXBvaW50cy5wdXNoKCBjb21wdXRlRmlsbEJvdHRvbXMgKTsKLSAgICB9Ci0KLSAg
ICAkLnBsb3QucGx1Z2lucy5wdXNoKHsKLSAgICAgICAgaW5pdDogaW5pdCwKLSAgICAgICAgb3B0
aW9uczogb3B0aW9ucywKLSAgICAgICAgbmFtZTogImZpbGxiZXR3ZWVuIiwKLSAgICAgICAgdmVy
c2lvbjogIjEuMCIKLSAgICB9KTsKLQotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3N2ViNDFmYjA0NDQ3OGU2MjM0NzgyYjhjMjhhM2QyYTI1MWIwNWJkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwy
NjkxICswLDAgQEAKLS8qIEphdmFzY3JpcHQgcGxvdHRpbmcgbGlicmFyeSBmb3IgalF1ZXJ5LCB2
ZXJzaW9uIDAuOCBhbHBoYS4KLQotQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xl
IExhdXJzZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCi0KLSovCi0KLS8vIGZp
cnN0IGFuIGlubGluZSBkZXBlbmRlbmN5LCBqcXVlcnkuY29sb3JoZWxwZXJzLmpzLCB3ZSBpbmxp
bmUgaXQgaGVyZQotLy8gZm9yIGNvbnZlbmllbmNlCi0KLS8qIFBsdWdpbiBmb3IgalF1ZXJ5IGZv
ciB3b3JraW5nIHdpdGggY29sb3JzLgotICoKLSAqIFZlcnNpb24gMS4xLgotICoKLSAqIEluc3Bp
cmF0aW9uIGZyb20galF1ZXJ5IGNvbG9yIGFuaW1hdGlvbiBwbHVnaW4gYnkgSm9obiBSZXNpZy4K
LSAqCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYnkgT2xlIExhdXJzZW4sIE9j
dG9iZXIgMjAwOS4KLSAqCi0gKiBFeGFtcGxlczoKLSAqCi0gKiAgICQuY29sb3IucGFyc2UoIiNm
ZmYiKS5zY2FsZSgncmdiJywgMC4yNSkuYWRkKCdhJywgLTAuNSkudG9TdHJpbmcoKQotICogICB2
YXIgYyA9ICQuY29sb3IuZXh0cmFjdCgkKCIjbXlkaXYiKSwgJ2JhY2tncm91bmQtY29sb3InKTsK
LSAqICAgY29uc29sZS5sb2coYy5yLCBjLmcsIGMuYiwgYy5hKTsKLSAqICAgJC5jb2xvci5tYWtl
KDEwMCwgNTAsIDI1LCAwLjQpLnRvU3RyaW5nKCkgLy8gcmV0dXJucyAicmdiYSgxMDAsNTAsMjUs
MC40KSIKLSAqCi0gKiBOb3RlIHRoYXQgLnNjYWxlKCkgYW5kIC5hZGQoKSByZXR1cm4gdGhlIHNh
bWUgbW9kaWZpZWQgb2JqZWN0Ci0gKiBpbnN0ZWFkIG9mIG1ha2luZyBhIG5ldyBvbmUuCi0gKgot
ICogVi4gMS4xOiBGaXggZXJyb3IgaGFuZGxpbmcgc28gZS5nLiBwYXJzaW5nIGFuIGVtcHR5IHN0
cmluZyBkb2VzCi0gKiBwcm9kdWNlIGEgY29sb3IgcmF0aGVyIHRoYW4ganVzdCBjcmFzaGluZy4K
LSAqLwotKGZ1bmN0aW9uKEIpe0IuY29sb3I9e307Qi5jb2xvci5tYWtlPWZ1bmN0aW9uKEYsRSxD
LEQpe3ZhciBHPXt9O0cucj1GfHwwO0cuZz1FfHwwO0cuYj1DfHwwO0cuYT1EIT1udWxsP0Q6MTtH
LmFkZD1mdW5jdGlvbihKLEkpe2Zvcih2YXIgSD0wO0g8Si5sZW5ndGg7KytIKXtHW0ouY2hhckF0
KEgpXSs9SX1yZXR1cm4gRy5ub3JtYWxpemUoKX07Ry5zY2FsZT1mdW5jdGlvbihKLEkpe2Zvcih2
YXIgSD0wO0g8Si5sZW5ndGg7KytIKXtHW0ouY2hhckF0KEgpXSo9SX1yZXR1cm4gRy5ub3JtYWxp
emUoKX07Ry50b1N0cmluZz1mdW5jdGlvbigpe2lmKEcuYT49MSl7cmV0dXJuInJnYigiK1tHLnIs
Ry5nLEcuYl0uam9pbigiLCIpKyIpIn1lbHNle3JldHVybiJyZ2JhKCIrW0cucixHLmcsRy5iLEcu
YV0uam9pbigiLCIpKyIpIn19O0cubm9ybWFsaXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSChKLEss
SSl7cmV0dXJuIEs8Sj9KOihLPkk/STpLKX1HLnI9SCgwLHBhcnNlSW50KEcuciksMjU1KTtHLmc9
SCgwLHBhcnNlSW50KEcuZyksMjU1KTtHLmI9SCgwLHBhcnNlSW50KEcuYiksMjU1KTtHLmE9SCgw
LEcuYSwxKTtyZXR1cm4gR307Ry5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBCLmNvbG9yLm1ha2Uo
Ry5yLEcuYixHLmcsRy5hKX07cmV0dXJuIEcubm9ybWFsaXplKCl9O0IuY29sb3IuZXh0cmFjdD1m
dW5jdGlvbihELEMpe3ZhciBFO2Rve0U9RC5jc3MoQykudG9Mb3dlckNhc2UoKTtpZihFIT0iIiYm
RSE9InRyYW5zcGFyZW50Iil7YnJlYWt9RD1ELnBhcmVudCgpfXdoaWxlKCFCLm5vZGVOYW1lKEQu
Z2V0KDApLCJib2R5IikpO2lmKEU9PSJyZ2JhKDAsIDAsIDAsIDApIil7RT0idHJhbnNwYXJlbnQi
fXJldHVybiBCLmNvbG9yLnBhcnNlKEUpfTtCLmNvbG9yLnBhcnNlPWZ1bmN0aW9uKEYpe3ZhciBF
LEM9Qi5jb2xvci5tYWtlO2lmKEU9L3JnYlwoXHMqKFswLTldezEsM30pXHMqLFxzKihbMC05XXsx
LDN9KVxzKixccyooWzAtOV17MSwzfSlccypcKS8uZXhlYyhGKSl7cmV0dXJuIEMocGFyc2VJbnQo
RVsxXSwxMCkscGFyc2VJbnQoRVsyXSwxMCkscGFyc2VJbnQoRVszXSwxMCkpfWlmKEU9L3JnYmFc
KFxzKihbMC05XXsxLDN9KVxzKixccyooWzAtOV17MSwzfSlccyosXHMqKFswLTldezEsM30pXHMq
LFxzKihbMC05XSsoPzpcLlswLTldKyk/KVxzKlwpLy5leGVjKEYpKXtyZXR1cm4gQyhwYXJzZUlu
dChFWzFdLDEwKSxwYXJzZUludChFWzJdLDEwKSxwYXJzZUludChFWzNdLDEwKSxwYXJzZUZsb2F0
KEVbNF0pKX1pZihFPS9yZ2JcKFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05
XSsoPzpcLlswLTldKyk/KVwlXHMqLFxzKihbMC05XSsoPzpcLlswLTldKyk/KVwlXHMqXCkvLmV4
ZWMoRikpe3JldHVybiBDKHBhcnNlRmxvYXQoRVsxXSkqMi41NSxwYXJzZUZsb2F0KEVbMl0pKjIu
NTUscGFyc2VGbG9hdChFWzNdKSoyLjU1KX1pZihFPS9yZ2JhXChccyooWzAtOV0rKD86XC5bMC05
XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5b
MC05XSspPylcJVxzKixccyooWzAtOV0rKD86XC5bMC05XSspPylccypcKS8uZXhlYyhGKSl7cmV0
dXJuIEMocGFyc2VGbG9hdChFWzFdKSoyLjU1LHBhcnNlRmxvYXQoRVsyXSkqMi41NSxwYXJzZUZs
b2F0KEVbM10pKjIuNTUscGFyc2VGbG9hdChFWzRdKSl9aWYoRT0vIyhbYS1mQS1GMC05XXsyfSko
W2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KS8uZXhlYyhGKSl7cmV0dXJuIEMocGFyc2VJ
bnQoRVsxXSwxNikscGFyc2VJbnQoRVsyXSwxNikscGFyc2VJbnQoRVszXSwxNikpfWlmKEU9LyMo
W2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkvLmV4ZWMoRikpe3JldHVybiBD
KHBhcnNlSW50KEVbMV0rRVsxXSwxNikscGFyc2VJbnQoRVsyXStFWzJdLDE2KSxwYXJzZUludChF
WzNdK0VbM10sMTYpKX12YXIgRD1CLnRyaW0oRikudG9Mb3dlckNhc2UoKTtpZihEPT0idHJhbnNw
YXJlbnQiKXtyZXR1cm4gQygyNTUsMjU1LDI1NSwwKX1lbHNle0U9QVtEXXx8WzAsMCwwXTtyZXR1
cm4gQyhFWzBdLEVbMV0sRVsyXSl9fTt2YXIgQT17YXF1YTpbMCwyNTUsMjU1XSxhenVyZTpbMjQw
LDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmxhY2s6WzAsMCwwXSxibHVlOlswLDAsMjU1
XSxicm93bjpbMTY1LDQyLDQyXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxk
YXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwx
MDAsMF0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sZGFy
a29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJrb3JjaGlk
OlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0s
ZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdvbGQ6WzI1NSwyMTUs
MF0sZ3JlZW46WzAsMTI4LDBdLGluZGlnbzpbNzUsMCwxMzBdLGtoYWtpOlsyNDAsMjMwLDE0MF0s
bGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRncmVl
bjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4
MiwxOTNdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbWFnZW50YTpb
MjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG5hdnk6WzAsMCwxMjhdLG9saXZlOlsxMjgsMTI4
LDBdLG9yYW5nZTpbMjU1LDE2NSwwXSxwaW5rOlsyNTUsMTkyLDIwM10scHVycGxlOlsxMjgsMCwx
MjhdLHZpb2xldDpbMTI4LDAsMTI4XSxyZWQ6WzI1NSwwLDBdLHNpbHZlcjpbMTkyLDE5MiwxOTJd
LHdoaXRlOlsyNTUsMjU1LDI1NV0seWVsbG93OlsyNTUsMjU1LDBdfX0pKGpRdWVyeSk7Ci0KLS8v
IHRoZSBhY3R1YWwgRmxvdCBjb2RlCi0oZnVuY3Rpb24oJCkgewotICAgIGZ1bmN0aW9uIFBsb3Qo
cGxhY2Vob2xkZXIsIGRhdGFfLCBvcHRpb25zXywgcGx1Z2lucykgewotICAgICAgICAvLyBkYXRh
IGlzIG9uIHRoZSBmb3JtOgotICAgICAgICAvLyAgIFsgc2VyaWVzMSwgc2VyaWVzMiAuLi4gXQot
ICAgICAgICAvLyB3aGVyZSBzZXJpZXMgaXMgZWl0aGVyIGp1c3QgdGhlIGRhdGEgYXMgWyBbeDEs
IHkxXSwgW3gyLCB5Ml0sIC4uLiBdCi0gICAgICAgIC8vIG9yIHsgZGF0YTogWyBbeDEsIHkxXSwg
W3gyLCB5Ml0sIC4uLiBdLCBsYWJlbDogInNvbWUgbGFiZWwiLCAuLi4gfQotCi0gICAgICAgIHZh
ciBzZXJpZXMgPSBbXSwKLSAgICAgICAgICAgIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAgICAg
Ly8gdGhlIGNvbG9yIHRoZW1lIHVzZWQgZm9yIGdyYXBocwotICAgICAgICAgICAgICAgIGNvbG9y
czogWyIjZWRjMjQwIiwgIiNhZmQ4ZjgiLCAiI2NiNGI0YiIsICIjNGRhNzRkIiwgIiM5NDQwZWQi
XSwKLSAgICAgICAgICAgICAgICBsZWdlbmQ6IHsKLSAgICAgICAgICAgICAgICAgICAgc2hvdzog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgbm9Db2x1bW5zOiAxLCAvLyBudW1iZXIgb2YgY29s
dW1zIGluIGxlZ2VuZCB0YWJsZQotICAgICAgICAgICAgICAgICAgICBsYWJlbEZvcm1hdHRlcjog
bnVsbCwgLy8gZm46IHN0cmluZyAtPiBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxC
b3hCb3JkZXJDb2xvcjogIiNjY2MiLCAvLyBib3JkZXIgY29sb3IgZm9yIHRoZSBsaXR0bGUgbGFi
ZWwgYm94ZXMKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBudWxsLCAvLyBjb250YWlu
ZXIgKGFzIGpRdWVyeSBvYmplY3QpIHRvIHB1dCBsZWdlbmQgaW4sIG51bGwgbWVhbnMgZGVmYXVs
dCBvbiB0b3Agb2YgZ3JhcGgKLSAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICJuZSIsIC8v
IHBvc2l0aW9uIG9mIGRlZmF1bHQgbGVnZW5kIGNvbnRhaW5lciB3aXRoaW4gcGxvdAotICAgICAg
ICAgICAgICAgICAgICBtYXJnaW46IDUsIC8vIGRpc3RhbmNlIGZyb20gZ3JpZCBlZGdlIHRvIGRl
ZmF1bHQgbGVnZW5kIGNvbnRhaW5lciB3aXRoaW4gcGxvdAotICAgICAgICAgICAgICAgICAgICBi
YWNrZ3JvdW5kQ29sb3I6IG51bGwsIC8vIG51bGwgbWVhbnMgYXV0by1kZXRlY3QKLSAgICAgICAg
ICAgICAgICAgICAgYmFja2dyb3VuZE9wYWNpdHk6IDAuODUsIC8vIHNldCB0byAwIHRvIGF2b2lk
IGJhY2tncm91bmQKLSAgICAgICAgICAgICAgICAgICAgc29ydGVkOiBudWxsICAgIC8vIGRlZmF1
bHQgdG8gbm8gbGVnZW5kIHNvcnRpbmcKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgIHhheGlzOiB7Ci0gICAgICAgICAgICAgICAgICAgIHNob3c6IG51bGwsIC8vIG51bGwgPSBh
dXRvLWRldGVjdCwgdHJ1ZSA9IGFsd2F5cywgZmFsc2UgPSBuZXZlcgotICAgICAgICAgICAgICAg
ICAgICBwb3NpdGlvbjogImJvdHRvbSIsIC8vIG9yICJ0b3AiCi0gICAgICAgICAgICAgICAgICAg
IG1vZGU6IG51bGwsIC8vIG51bGwgb3IgInRpbWUiCi0gICAgICAgICAgICAgICAgICAgIHRpbWV6
b25lOiBudWxsLCAvLyAiYnJvd3NlciIgZm9yIGxvY2FsIHRvIHRoZSBjbGllbnQgb3IgdGltZXpv
bmUgZm9yIHRpbWV6b25lLWpzCi0gICAgICAgICAgICAgICAgICAgIGZvbnQ6IG51bGwsIC8vIG51
bGwgKGRlcml2ZWQgZnJvbSBDU1MgaW4gcGxhY2Vob2xkZXIpIG9yIG9iamVjdCBsaWtlIHsgc2l6
ZTogMTEsIHN0eWxlOiAiaXRhbGljIiwgd2VpZ2h0OiAiYm9sZCIsIGZhbWlseTogInNhbnMtc2Vy
aWYiLCB2YXJpYW50OiAic21hbGwtY2FwcyIgfQotICAgICAgICAgICAgICAgICAgICBjb2xvcjog
bnVsbCwgLy8gYmFzZSBjb2xvciwgbGFiZWxzLCB0aWNrcwotICAgICAgICAgICAgICAgICAgICB0
aWNrQ29sb3I6IG51bGwsIC8vIHBvc3NpYmx5IGRpZmZlcmVudCBjb2xvciBvZiB0aWNrcywgZS5n
LiAicmdiYSgwLDAsMCwwLjE1KSIKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBudWxs
LCAvLyBudWxsIG9yIGY6IG51bWJlciAtPiBudW1iZXIgdG8gdHJhbnNmb3JtIGF4aXMKLSAgICAg
ICAgICAgICAgICAgICAgaW52ZXJzZVRyYW5zZm9ybTogbnVsbCwgLy8gaWYgdHJhbnNmb3JtIGlz
IHNldCwgdGhpcyBzaG91bGQgYmUgdGhlIGludmVyc2UgZnVuY3Rpb24KLSAgICAgICAgICAgICAg
ICAgICAgbWluOiBudWxsLCAvLyBtaW4uIHZhbHVlIHRvIHNob3csIG51bGwgbWVhbnMgc2V0IGF1
dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgbWF4OiBudWxsLCAvLyBtYXguIHZhbHVl
IHRvIHNob3csIG51bGwgbWVhbnMgc2V0IGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAg
ICAgYXV0b3NjYWxlTWFyZ2luOiBudWxsLCAvLyBtYXJnaW4gaW4gJSB0byBhZGQgaWYgYXV0by1z
ZXR0aW5nIG1pbi9tYXgKLSAgICAgICAgICAgICAgICAgICAgdGlja3M6IG51bGwsIC8vIGVpdGhl
ciBbMSwgM10gb3IgW1sxLCAiYSJdLCAzXSBvciAoZm46IGF4aXMgaW5mbyAtPiB0aWNrcykgb3Ig
YXBwLiBudW1iZXIgb2YgdGlja3MgZm9yIGF1dG8tdGlja3MKLSAgICAgICAgICAgICAgICAgICAg
dGlja0Zvcm1hdHRlcjogbnVsbCwgLy8gZm46IG51bWJlciAtPiBzdHJpbmcKLSAgICAgICAgICAg
ICAgICAgICAgbGFiZWxXaWR0aDogbnVsbCwgLy8gc2l6ZSBvZiB0aWNrIGxhYmVscyBpbiBwaXhl
bHMKLSAgICAgICAgICAgICAgICAgICAgbGFiZWxIZWlnaHQ6IG51bGwsCi0gICAgICAgICAgICAg
ICAgICAgIHJlc2VydmVTcGFjZTogbnVsbCwgLy8gd2hldGhlciB0byByZXNlcnZlIHNwYWNlIGV2
ZW4gaWYgYXhpcyBpc24ndCBzaG93bgotICAgICAgICAgICAgICAgICAgICB0aWNrTGVuZ3RoOiBu
dWxsLCAvLyBzaXplIGluIHBpeGVscyBvZiB0aWNrcywgb3IgImZ1bGwiIGZvciB3aG9sZSBsaW5l
Ci0gICAgICAgICAgICAgICAgICAgIGFsaWduVGlja3NXaXRoQXhpczogbnVsbCwgLy8gYXhpcyBu
dW1iZXIgb3IgbnVsbCBmb3Igbm8gc3luYwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG1vZGUg
c3BlY2lmaWMgb3B0aW9ucwotICAgICAgICAgICAgICAgICAgICB0aWNrRGVjaW1hbHM6IG51bGws
IC8vIG5vLiBvZiBkZWNpbWFscywgbnVsbCBtZWFucyBhdXRvCi0gICAgICAgICAgICAgICAgICAg
IHRpY2tTaXplOiBudWxsLCAvLyBudW1iZXIgb3IgW251bWJlciwgInVuaXQiXQotICAgICAgICAg
ICAgICAgICAgICBtaW5UaWNrU2l6ZTogbnVsbCwgLy8gbnVtYmVyIG9yIFtudW1iZXIsICJ1bml0
Il0KLSAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1lczogbnVsbCwgLy8gbGlzdCBvZiBuYW1l
cyBvZiBtb250aHMKLSAgICAgICAgICAgICAgICAgICAgdGltZWZvcm1hdDogbnVsbCwgLy8gZm9y
bWF0IHN0cmluZyB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgdHdlbHZlSG91ckNsb2NrOiBm
YWxzZSAvLyAxMiBvciAyNCB0aW1lIGluIHRpbWUgbW9kZQotICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgeWF4aXM6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0b3NjYWxlTWFy
Z2luOiAwLjAyLAotICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogImxlZnQiIC8vIG9yICJy
aWdodCIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHhheGVzOiBbXSwKLSAg
ICAgICAgICAgICAgICB5YXhlczogW10sCi0gICAgICAgICAgICAgICAgc2VyaWVzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBvaW50czogewotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdzog
ZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lV2lkdGg6IDIsIC8vIGluIHBpeGVscwotICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsbDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogIiNm
ZmZmZmYiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiAiY2lyY2xlIiAvLyBvciBj
YWxsYmFjawotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBsaW5l
czogewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgcHV0IGluIHNob3c6IGZh
bHNlIHNvIHdlIGNhbiBzZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgbGlu
ZXMgd2VyZSBhY3RpdmVseSBkaXNhYmxlZAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdp
ZHRoOiAyLCAvLyBpbiBwaXhlbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGZhbHNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiBudWxsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RlcHM6IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbWl0
ICd6ZXJvJywgc28gd2UgY2FuIGxhdGVyIGRlZmF1bHQgaXRzIHZhbHVlIHRvCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBtYXRjaCB0aGF0IG9mIHRoZSAnZmlsbCcgb3B0aW9uLgotICAgICAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBiYXJzOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzaG93OiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVX
aWR0aDogMiwgLy8gaW4gcGl4ZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXJXaWR0aDog
MSwgLy8gaW4gdW5pdHMgb2YgdGhlIHggYXhpcwotICAgICAgICAgICAgICAgICAgICAgICAgZmls
bDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogbnVsbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFsaWduOiAibGVmdCIsIC8vICJsZWZ0IiwgInJpZ2h0Iiwgb3Ig
ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IGZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgemVybzogdHJ1ZQotICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dTaXplOiAzLAotICAgICAgICAgICAgICAgICAgICBo
aWdobGlnaHRDb2xvcjogbnVsbAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
Z3JpZDogewotICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICBhYm92ZURhdGE6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBjb2xvcjogIiM1NDU0
NTQiLCAvLyBwcmltYXJ5IGNvbG9yIHVzZWQgZm9yIG91dGxpbmUgYW5kIGxhYmVscwotICAgICAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsIC8vIG51bGwgZm9yIHRyYW5zcGFy
ZW50LCBlbHNlIGNvbG9yCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBudWxsLCAv
LyBzZXQgaWYgZGlmZmVyZW50IGZyb20gdGhlIGdyaWQgY29sb3IKLSAgICAgICAgICAgICAgICAg
ICAgdGlja0NvbG9yOiBudWxsLCAvLyBjb2xvciBmb3IgdGhlIHRpY2tzLCBlLmcuICJyZ2JhKDAs
MCwwLDAuMTUpIgotICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsIC8vIGRpc3RhbmNlIGZy
b20gdGhlIGNhbnZhcyBlZGdlIHRvIHRoZSBncmlkCi0gICAgICAgICAgICAgICAgICAgIGxhYmVs
TWFyZ2luOiA1LCAvLyBpbiBwaXhlbHMKLSAgICAgICAgICAgICAgICAgICAgYXhpc01hcmdpbjog
OCwgLy8gaW4gcGl4ZWxzCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAyLCAvLyBp
biBwaXhlbHMKLSAgICAgICAgICAgICAgICAgICAgbWluQm9yZGVyTWFyZ2luOiBudWxsLCAvLyBp
biBwaXhlbHMsIG51bGwgbWVhbnMgdGFrZW4gZnJvbSBwb2ludHMgcmFkaXVzCi0gICAgICAgICAg
ICAgICAgICAgIG1hcmtpbmdzOiBudWxsLCAvLyBhcnJheSBvZiByYW5nZXMgb3IgZm46IGF4ZXMg
LT4gYXJyYXkgb2YgcmFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzQ29sb3I6ICIj
ZjRmNGY0IiwKLSAgICAgICAgICAgICAgICAgICAgbWFya2luZ3NMaW5lV2lkdGg6IDIsCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGludGVyYWN0aXZlIHN0dWZmCi0gICAgICAgICAgICAgICAgICAg
IGNsaWNrYWJsZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGhvdmVyYWJsZTogZmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IHRydWUsIC8vIGhpZ2hsaWdodCBp
biBjYXNlIG1vdXNlIGlzIG5lYXIKLSAgICAgICAgICAgICAgICAgICAgbW91c2VBY3RpdmVSYWRp
dXM6IDEwIC8vIGhvdyBmYXIgdGhlIG1vdXNlIGNhbiBiZSBhd2F5IHRvIGFjdGl2YXRlIGFuIGl0
ZW0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGludGVyYWN0aW9uOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlZHJhd092ZXJsYXlJbnRlcnZhbDogMTAwMC82MCAvLyB0aW1l
IGJldHdlZW4gdXBkYXRlcywgLTEgbWVhbnMgaW4gc2FtZSBmbG93Ci0gICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICBob29rczoge30KLSAgICAgICAgICAgIH0sCi0gICAgICAgIGNh
bnZhcyA9IG51bGwsICAgICAgLy8gdGhlIGNhbnZhcyBmb3IgdGhlIHBsb3QgaXRzZWxmCi0gICAg
ICAgIG92ZXJsYXkgPSBudWxsLCAgICAgLy8gY2FudmFzIGZvciBpbnRlcmFjdGl2ZSBzdHVmZiBv
biB0b3Agb2YgcGxvdAotICAgICAgICBldmVudEhvbGRlciA9IG51bGwsIC8vIGpRdWVyeSBvYmpl
Y3QgdGhhdCBldmVudHMgc2hvdWxkIGJlIGJvdW5kIHRvCi0gICAgICAgIGN0eCA9IG51bGwsIG9j
dHggPSBudWxsLAotICAgICAgICB4YXhlcyA9IFtdLCB5YXhlcyA9IFtdLAotICAgICAgICBwbG90
T2Zmc2V0ID0geyBsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9LAotICAgICAg
ICBjYW52YXNXaWR0aCA9IDAsIGNhbnZhc0hlaWdodCA9IDAsCi0gICAgICAgIHBsb3RXaWR0aCA9
IDAsIHBsb3RIZWlnaHQgPSAwLAotICAgICAgICBob29rcyA9IHsKLSAgICAgICAgICAgIHByb2Nl
c3NPcHRpb25zOiBbXSwKLSAgICAgICAgICAgIHByb2Nlc3NSYXdEYXRhOiBbXSwKLSAgICAgICAg
ICAgIHByb2Nlc3NEYXRhcG9pbnRzOiBbXSwKLSAgICAgICAgICAgIHByb2Nlc3NPZmZzZXQ6IFtd
LAotICAgICAgICAgICAgZHJhd0JhY2tncm91bmQ6IFtdLAotICAgICAgICAgICAgZHJhd1Nlcmll
czogW10sCi0gICAgICAgICAgICBkcmF3OiBbXSwKLSAgICAgICAgICAgIGJpbmRFdmVudHM6IFtd
LAotICAgICAgICAgICAgZHJhd092ZXJsYXk6IFtdLAotICAgICAgICAgICAgc2h1dGRvd246IFtd
Ci0gICAgICAgIH0sCi0gICAgICAgIHBsb3QgPSB0aGlzOwotCi0gICAgICAgIC8vIHB1YmxpYyBm
dW5jdGlvbnMKLSAgICAgICAgcGxvdC5zZXREYXRhID0gc2V0RGF0YTsKLSAgICAgICAgcGxvdC5z
ZXR1cEdyaWQgPSBzZXR1cEdyaWQ7Ci0gICAgICAgIHBsb3QuZHJhdyA9IGRyYXc7Ci0gICAgICAg
IHBsb3QuZ2V0UGxhY2Vob2xkZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBsYWNlaG9sZGVyOyB9
OwotICAgICAgICBwbG90LmdldENhbnZhcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2FudmFzOyB9
OwotICAgICAgICBwbG90LmdldFBsb3RPZmZzZXQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHBsb3RP
ZmZzZXQ7IH07Ci0gICAgICAgIHBsb3Qud2lkdGggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwbG90
V2lkdGg7IH07Ci0gICAgICAgIHBsb3QuaGVpZ2h0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGxv
dEhlaWdodDsgfTsKLSAgICAgICAgcGxvdC5vZmZzZXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgbyA9IGV2ZW50SG9sZGVyLm9mZnNldCgpOwotICAgICAgICAgICAgby5sZWZ0ICs9
IHBsb3RPZmZzZXQubGVmdDsKLSAgICAgICAgICAgIG8udG9wICs9IHBsb3RPZmZzZXQudG9wOwot
ICAgICAgICAgICAgcmV0dXJuIG87Ci0gICAgICAgIH07Ci0gICAgICAgIHBsb3QuZ2V0RGF0YSA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlcmllczsgfTsKLSAgICAgICAgcGxvdC5nZXRBeGVzID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHJlcyA9IHt9LCBpOwotICAgICAgICAgICAg
JC5lYWNoKHhheGVzLmNvbmNhdCh5YXhlcyksIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF4aXMpCi0gICAgICAgICAgICAgICAgICAgIHJlc1theGlzLmRpcmVjdGlv
biArIChheGlzLm4gIT0gMSA/IGF4aXMubiA6ICIiKSArICJheGlzIl0gPSBheGlzOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9OwotICAgICAgICBw
bG90LmdldFhBeGVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geGF4ZXM7IH07Ci0gICAgICAgIHBs
b3QuZ2V0WUF4ZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB5YXhlczsgfTsKLSAgICAgICAgcGxv
dC5jMnAgPSBjYW52YXNUb0F4aXNDb29yZHM7Ci0gICAgICAgIHBsb3QucDJjID0gYXhpc1RvQ2Fu
dmFzQ29vcmRzOwotICAgICAgICBwbG90LmdldE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7IHJldHVy
biBvcHRpb25zOyB9OwotICAgICAgICBwbG90LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKLSAgICAg
ICAgcGxvdC51bmhpZ2hsaWdodCA9IHVuaGlnaGxpZ2h0OwotICAgICAgICBwbG90LnRyaWdnZXJS
ZWRyYXdPdmVybGF5ID0gdHJpZ2dlclJlZHJhd092ZXJsYXk7Ci0gICAgICAgIHBsb3QucG9pbnRP
ZmZzZXQgPSBmdW5jdGlvbihwb2ludCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICBsZWZ0OiBwYXJzZUludCh4YXhlc1theGlzTnVtYmVyKHBvaW50LCAieCIpIC0gMV0u
cDJjKCtwb2ludC54KSArIHBsb3RPZmZzZXQubGVmdCwgMTApLAotICAgICAgICAgICAgICAgIHRv
cDogcGFyc2VJbnQoeWF4ZXNbYXhpc051bWJlcihwb2ludCwgInkiKSAtIDFdLnAyYygrcG9pbnQu
eSkgKyBwbG90T2Zmc2V0LnRvcCwgMTApCi0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAg
ICAgICBwbG90LnNodXRkb3duID0gc2h1dGRvd247Ci0gICAgICAgIHBsb3QucmVzaXplID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgZ2V0Q2FudmFzRGltZW5zaW9ucygpOwotICAgICAgICAg
ICAgcmVzaXplQ2FudmFzKGNhbnZhcyk7Ci0gICAgICAgICAgICByZXNpemVDYW52YXMob3Zlcmxh
eSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gcHVibGljIGF0dHJpYnV0ZXMKLSAgICAgICAg
cGxvdC5ob29rcyA9IGhvb2tzOwotCi0gICAgICAgIC8vIGluaXRpYWxpemUKLSAgICAgICAgaW5p
dFBsdWdpbnMocGxvdCk7Ci0gICAgICAgIHBhcnNlT3B0aW9ucyhvcHRpb25zXyk7Ci0gICAgICAg
IHNldHVwQ2FudmFzZXMoKTsKLSAgICAgICAgc2V0RGF0YShkYXRhXyk7Ci0gICAgICAgIHNldHVw
R3JpZCgpOwotICAgICAgICBkcmF3KCk7Ci0gICAgICAgIGJpbmRFdmVudHMoKTsKLQotCi0gICAg
ICAgIGZ1bmN0aW9uIGV4ZWN1dGVIb29rcyhob29rLCBhcmdzKSB7Ci0gICAgICAgICAgICBhcmdz
ID0gW3Bsb3RdLmNvbmNhdChhcmdzKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aG9vay5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBob29rW2ldLmFwcGx5KHRoaXMsIGFy
Z3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5pdFBsdWdpbnMoKSB7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgcCA9IHBsdWdpbnNbaV07Ci0gICAgICAgICAgICAgICAgcC5pbml0KHBs
b3QpOwotICAgICAgICAgICAgICAgIGlmIChwLm9wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAg
ICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMsIHAub3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0cykgewotICAgICAgICAg
ICAgdmFyIGk7Ci0KLSAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMsIG9wdHMpOwot
Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy54YXhpcy5jb2xvciA9PSBudWxsKQotICAgICAgICAg
ICAgICAgIG9wdGlvbnMueGF4aXMuY29sb3IgPSBvcHRpb25zLmdyaWQuY29sb3I7Ci0gICAgICAg
ICAgICBpZiAob3B0aW9ucy55YXhpcy5jb2xvciA9PSBudWxsKQotICAgICAgICAgICAgICAgIG9w
dGlvbnMueWF4aXMuY29sb3IgPSBvcHRpb25zLmdyaWQuY29sb3I7Ci0KLSAgICAgICAgICAgIGlm
IChvcHRpb25zLnhheGlzLnRpY2tDb2xvciA9PSBudWxsKSAvLyBiYWNrd2FyZHMtY29tcGF0aWJp
bGl0eQotICAgICAgICAgICAgICAgIG9wdGlvbnMueGF4aXMudGlja0NvbG9yID0gb3B0aW9ucy5n
cmlkLnRpY2tDb2xvcjsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLnlheGlzLnRpY2tDb2xvciA9
PSBudWxsKSAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eQotICAgICAgICAgICAgICAgIG9wdGlv
bnMueWF4aXMudGlja0NvbG9yID0gb3B0aW9ucy5ncmlkLnRpY2tDb2xvcjsKLQotICAgICAgICAg
ICAgaWYgKG9wdGlvbnMuZ3JpZC5ib3JkZXJDb2xvciA9PSBudWxsKQotICAgICAgICAgICAgICAg
IG9wdGlvbnMuZ3JpZC5ib3JkZXJDb2xvciA9IG9wdGlvbnMuZ3JpZC5jb2xvcjsKLSAgICAgICAg
ICAgIGlmIChvcHRpb25zLmdyaWQudGlja0NvbG9yID09IG51bGwpCi0gICAgICAgICAgICAgICAg
b3B0aW9ucy5ncmlkLnRpY2tDb2xvciA9ICQuY29sb3IucGFyc2Uob3B0aW9ucy5ncmlkLmNvbG9y
KS5zY2FsZSgnYScsIDAuMjIpLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIGZpbGwgaW4g
ZGVmYXVsdHMgaW4gYXhlcywgY29weSBhdCBsZWFzdCBhbHdheXMgdGhlCi0gICAgICAgICAgICAv
LyBmaXJzdCBhcyB0aGUgcmVzdCBvZiB0aGUgY29kZSBhc3N1bWVzIGl0J2xsIGJlIHRoZXJlCi0g
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5tYXgoMSwgb3B0aW9ucy54YXhlcy5sZW5n
dGgpOyArK2kpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy54YXhlc1tpXSA9ICQuZXh0ZW5kKHRy
dWUsIHt9LCBvcHRpb25zLnhheGlzLCBvcHRpb25zLnhheGVzW2ldKTsKLSAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBNYXRoLm1heCgxLCBvcHRpb25zLnlheGVzLmxlbmd0aCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBvcHRpb25zLnlheGVzW2ldID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlv
bnMueWF4aXMsIG9wdGlvbnMueWF4ZXNbaV0pOwotCi0gICAgICAgICAgICAvLyBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eSwgdG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUKLSAgICAgICAgICAgIGlmIChv
cHRpb25zLnhheGlzLm5vVGlja3MgJiYgb3B0aW9ucy54YXhpcy50aWNrcyA9PSBudWxsKQotICAg
ICAgICAgICAgICAgIG9wdGlvbnMueGF4aXMudGlja3MgPSBvcHRpb25zLnhheGlzLm5vVGlja3M7
Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy55YXhpcy5ub1RpY2tzICYmIG9wdGlvbnMueWF4aXMu
dGlja3MgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBvcHRpb25zLnlheGlzLnRpY2tzID0gb3B0
aW9ucy55YXhpcy5ub1RpY2tzOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMueDJheGlzKSB7Ci0g
ICAgICAgICAgICAgICAgb3B0aW9ucy54YXhlc1sxXSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRp
b25zLnhheGlzLCBvcHRpb25zLngyYXhpcyk7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy54YXhl
c1sxXS5wb3NpdGlvbiA9ICJ0b3AiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9w
dGlvbnMueTJheGlzKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy55YXhlc1sxXSA9ICQuZXh0
ZW5kKHRydWUsIHt9LCBvcHRpb25zLnlheGlzLCBvcHRpb25zLnkyYXhpcyk7Ci0gICAgICAgICAg
ICAgICAgb3B0aW9ucy55YXhlc1sxXS5wb3NpdGlvbiA9ICJyaWdodCI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5ncmlkLmNvbG9yZWRBcmVhcykKLSAgICAgICAgICAg
ICAgICBvcHRpb25zLmdyaWQubWFya2luZ3MgPSBvcHRpb25zLmdyaWQuY29sb3JlZEFyZWFzOwot
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5jb2xvcmVkQXJlYXNDb2xvcikKLSAgICAgICAg
ICAgICAgICBvcHRpb25zLmdyaWQubWFya2luZ3NDb2xvciA9IG9wdGlvbnMuZ3JpZC5jb2xvcmVk
QXJlYXNDb2xvcjsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbmVzKQotICAgICAgICAgICAg
ICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMuc2VyaWVzLmxpbmVzLCBvcHRpb25zLmxpbmVzKTsK
LSAgICAgICAgICAgIGlmIChvcHRpb25zLnBvaW50cykKLSAgICAgICAgICAgICAgICAkLmV4dGVu
ZCh0cnVlLCBvcHRpb25zLnNlcmllcy5wb2ludHMsIG9wdGlvbnMucG9pbnRzKTsKLSAgICAgICAg
ICAgIGlmIChvcHRpb25zLmJhcnMpCi0gICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgb3B0
aW9ucy5zZXJpZXMuYmFycywgb3B0aW9ucy5iYXJzKTsKLSAgICAgICAgICAgIGlmIChvcHRpb25z
LnNoYWRvd1NpemUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmllcy5zaGFk
b3dTaXplID0gb3B0aW9ucy5zaGFkb3dTaXplOwotICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGln
aGxpZ2h0Q29sb3IgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmllcy5oaWdo
bGlnaHRDb2xvciA9IG9wdGlvbnMuaGlnaGxpZ2h0Q29sb3I7Ci0KLSAgICAgICAgICAgIC8vIHNh
dmUgb3B0aW9ucyBvbiBheGVzIGZvciBmdXR1cmUgcmVmZXJlbmNlCi0gICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgb3B0aW9ucy54YXhlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBn
ZXRPckNyZWF0ZUF4aXMoeGF4ZXMsIGkgKyAxKS5vcHRpb25zID0gb3B0aW9ucy54YXhlc1tpXTsK
LSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnlheGVzLmxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlQXhpcyh5YXhlcywgaSArIDEpLm9wdGlvbnMgPSBv
cHRpb25zLnlheGVzW2ldOwotCi0gICAgICAgICAgICAvLyBhZGQgaG9va3MgZnJvbSBvcHRpb25z
Ci0gICAgICAgICAgICBmb3IgKHZhciBuIGluIGhvb2tzKQotICAgICAgICAgICAgICAgIGlmIChv
cHRpb25zLmhvb2tzW25dICYmIG9wdGlvbnMuaG9va3Nbbl0ubGVuZ3RoKQotICAgICAgICAgICAg
ICAgICAgICBob29rc1tuXSA9IGhvb2tzW25dLmNvbmNhdChvcHRpb25zLmhvb2tzW25dKTsKLQot
ICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhvb2tzLnByb2Nlc3NPcHRpb25zLCBbb3B0aW9uc10p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0RGF0YShkKSB7Ci0gICAgICAgICAg
ICBzZXJpZXMgPSBwYXJzZURhdGEoZCk7Ci0gICAgICAgICAgICBmaWxsSW5TZXJpZXNPcHRpb25z
KCk7Ci0gICAgICAgICAgICBwcm9jZXNzRGF0YSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gcGFyc2VEYXRhKGQpIHsKLSAgICAgICAgICAgIHZhciByZXMgPSBbXTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IHZhciBzID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMuc2VyaWVzKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChkW2ldLmRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzLmRh
dGEgPSBkW2ldLmRhdGE7IC8vIG1vdmUgdGhlIGRhdGEgaW5zdGVhZCBvZiBkZWVwLWNvcHkKLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGRbaV0uZGF0YTsKLQotICAgICAgICAgICAgICAgICAg
ICAkLmV4dGVuZCh0cnVlLCBzLCBkW2ldKTsKLQotICAgICAgICAgICAgICAgICAgICBkW2ldLmRh
dGEgPSBzLmRhdGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcy5kYXRhID0gZFtpXTsKLSAgICAgICAgICAgICAgICByZXMucHVz
aChzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGF4aXNOdW1iZXIob2JqLCBjb29yZCkgewotICAgICAgICAg
ICAgdmFyIGEgPSBvYmpbY29vcmQgKyAiYXhpcyJdOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBh
ID09ICJvYmplY3QiKSAvLyBpZiB3ZSBnb3QgYSByZWFsIGF4aXMsIGV4dHJhY3QgbnVtYmVyCi0g
ICAgICAgICAgICAgICAgYSA9IGEubjsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYSAhPSAibnVt
YmVyIikKLSAgICAgICAgICAgICAgICBhID0gMTsgLy8gZGVmYXVsdCB0byBmaXJzdCBheGlzCi0g
ICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGFsbEF4
ZXMoKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4gZmxhdCBhcnJheSB3aXRob3V0IGFubm95aW5n
IG51bGwgZW50cmllcwotICAgICAgICAgICAgcmV0dXJuICQuZ3JlcCh4YXhlcy5jb25jYXQoeWF4
ZXMpLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYTsgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBjYW52YXNUb0F4aXNDb29yZHMocG9zKSB7Ci0gICAgICAgICAgICAvLyByZXR1cm4g
YW4gb2JqZWN0IHdpdGggeC95IGNvcnJlc3BvbmRpbmcgdG8gYWxsIHVzZWQgYXhlcwotICAgICAg
ICAgICAgdmFyIHJlcyA9IHt9LCBpLCBheGlzOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IHhheGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXhpcyA9IHhheGVzW2ldOwot
ICAgICAgICAgICAgICAgIGlmIChheGlzICYmIGF4aXMudXNlZCkKLSAgICAgICAgICAgICAgICAg
ICAgcmVzWyJ4IiArIGF4aXMubl0gPSBheGlzLmMycChwb3MubGVmdCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB5YXhlcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIGF4aXMgPSB5YXhlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoYXhpcyAm
JiBheGlzLnVzZWQpCi0gICAgICAgICAgICAgICAgICAgIHJlc1sieSIgKyBheGlzLm5dID0gYXhp
cy5jMnAocG9zLnRvcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXMueDEg
IT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICByZXMueCA9IHJlcy54MTsKLSAgICAgICAg
ICAgIGlmIChyZXMueTEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICByZXMueSA9IHJl
cy55MTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGF4aXNUb0NhbnZhc0Nvb3Jkcyhwb3MpIHsKLSAgICAgICAgICAgIC8vIGdldCBjYW52
YXMgY29vcmRzIGZyb20gdGhlIGZpcnN0IHBhaXIgb2YgeC95IGZvdW5kIGluIHBvcwotICAgICAg
ICAgICAgdmFyIHJlcyA9IHt9LCBpLCBheGlzLCBrZXk7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCB4YXhlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGF4aXMgPSB4YXhl
c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoYXhpcyAmJiBheGlzLnVzZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAga2V5ID0gIngiICsgYXhpcy5uOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cG9zW2tleV0gPT0gbnVsbCAmJiBheGlzLm4gPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGtleSA9ICJ4IjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocG9zW2tleV0gIT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxlZnQgPSBheGlzLnAyYyhwb3Nba2V5XSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHlheGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXhpcyA9IHlheGVz
W2ldOwotICAgICAgICAgICAgICAgIGlmIChheGlzICYmIGF4aXMudXNlZCkgewotICAgICAgICAg
ICAgICAgICAgICBrZXkgPSAieSIgKyBheGlzLm47Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
b3Nba2V5XSA9PSBudWxsICYmIGF4aXMubiA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAg
a2V5ID0gInkiOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwb3Nba2V5XSAhPSBudWxsKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXMudG9wID0gYXhpcy5wMmMocG9zW2tleV0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRPckNyZWF0ZUF4aXMoYXhlcywgbnVt
YmVyKSB7Ci0gICAgICAgICAgICBpZiAoIWF4ZXNbbnVtYmVyIC0gMV0pCi0gICAgICAgICAgICAg
ICAgYXhlc1tudW1iZXIgLSAxXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbjogbnVtYmVyLCAv
LyBzYXZlIHRoZSBudW1iZXIgZm9yIGZ1dHVyZSByZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0aW9uOiBheGVzID09IHhheGVzID8gIngiIDogInkiLAotICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zOiAkLmV4dGVuZCh0cnVlLCB7fSwgYXhlcyA9PSB4YXhlcyA/IG9wdGlvbnMu
eGF4aXMgOiBvcHRpb25zLnlheGlzKQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IHJldHVybiBheGVzW251bWJlciAtIDFdOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
ZmlsbEluU2VyaWVzT3B0aW9ucygpIHsKLQotICAgICAgICAgICAgdmFyIG5lZWRlZENvbG9ycyA9
IHNlcmllcy5sZW5ndGgsIG1heEluZGV4ID0gLTEsIGk7Ci0KLSAgICAgICAgICAgIC8vIFN1YnRy
YWN0IHRoZSBudW1iZXIgb2Ygc2VyaWVzIHRoYXQgYWxyZWFkeSBoYXZlIGZpeGVkIGNvbG9ycyBv
cgotICAgICAgICAgICAgLy8gY29sb3IgaW5kZXhlcyBmcm9tIHRoZSBudW1iZXIgdGhhdCB3ZSBz
dGlsbCBuZWVkIHRvIGdlbmVyYXRlLgotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2Vy
aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNjID0gc2VyaWVzW2ldLmNv
bG9yOwotICAgICAgICAgICAgICAgIGlmIChzYyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG5lZWRlZENvbG9ycy0tOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjID09
ICJudW1iZXIiICYmIHNjID4gbWF4SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc2M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGFueSBvZiB0aGUgc2VyaWVzIGhhdmUg
Zml4ZWQgY29sb3IgaW5kZXhlcywgdGhlbiB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAvLyBnZW5l
cmF0ZSBhdCBsZWFzdCBhcyBtYW55IGNvbG9ycyBhcyB0aGUgaGlnaGVzdCBpbmRleC4KLQotICAg
ICAgICAgICAgaWYgKG5lZWRlZENvbG9ycyA8PSBtYXhJbmRleCkgewotICAgICAgICAgICAgICAg
IG5lZWRlZENvbG9ycyA9IG1heEluZGV4ICsgMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gR2VuZXJhdGUgYWxsIHRoZSBjb2xvcnMsIHVzaW5nIGZpcnN0IHRoZSBvcHRpb24gY29s
b3JzIGFuZCB0aGVuCi0gICAgICAgICAgICAvLyB2YXJpYXRpb25zIG9uIHRob3NlIGNvbG9ycyBv
bmNlIHRoZXkncmUgZXhoYXVzdGVkLgotCi0gICAgICAgICAgICB2YXIgYywgY29sb3JzID0gW10s
IGNvbG9yUG9vbCA9IG9wdGlvbnMuY29sb3JzLAotICAgICAgICAgICAgICAgIGNvbG9yUG9vbFNp
emUgPSBjb2xvclBvb2wubGVuZ3RoLCB2YXJpYXRpb24gPSAwOwotCi0gICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbmVlZGVkQ29sb3JzOyBpKyspIHsKLQotICAgICAgICAgICAgICAgIGMgPSAk
LmNvbG9yLnBhcnNlKGNvbG9yUG9vbFtpICUgY29sb3JQb29sU2l6ZV0gfHwgIiM2NjYiKTsKLQot
ICAgICAgICAgICAgICAgIC8vIEVhY2ggdGltZSB3ZSBleGhhdXN0IHRoZSBjb2xvcnMgaW4gdGhl
IHBvb2wgd2UgYWRqdXN0Ci0gICAgICAgICAgICAgICAgLy8gYSBzY2FsaW5nIGZhY3RvciB1c2Vk
IHRvIHByb2R1Y2UgbW9yZSB2YXJpYXRpb25zIG9uCi0gICAgICAgICAgICAgICAgLy8gdGhvc2Ug
Y29sb3JzLiBUaGUgZmFjdG9yIGFsdGVybmF0ZXMgbmVnYXRpdmUvcG9zaXRpdmUKLSAgICAgICAg
ICAgICAgICAvLyB0byBwcm9kdWNlIGxpZ2h0ZXIvZGFya2VyIGNvbG9ycy4KLQotICAgICAgICAg
ICAgICAgIC8vIFJlc2V0IHRoZSB2YXJpYXRpb24gYWZ0ZXIgZXZlcnkgZmV3IGN5Y2xlcywgb3Ig
ZWxzZQotICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgZW5kIHVwIHByb2R1Y2luZyBvbmx5IHdo
aXRlIG9yIGJsYWNrIGNvbG9ycy4KLQotICAgICAgICAgICAgICAgIGlmIChpICUgY29sb3JQb29s
U2l6ZSA9PSAwICYmIGkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhdGlvbiA+PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uIDwgMC41KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uID0gLXZhcmlhdGlvbiAtIDAuMjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB2YXJpYXRpb24gPSAwOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgdmFyaWF0aW9uID0gLXZhcmlhdGlvbjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBjb2xvcnNbaV0gPSBjLnNjYWxlKCdyZ2InLCAxICsgdmFyaWF0
aW9uKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRmluYWxpemUgdGhlIHNlcmll
cyBvcHRpb25zLCBmaWxsaW5nIGluIHRoZWlyIGNvbG9ycwotCi0gICAgICAgICAgICB2YXIgY29s
b3JpID0gMCwgczsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBzID0gc2VyaWVzW2ldOwotCi0gICAgICAgICAgICAgICAg
Ly8gYXNzaWduIGNvbG9ycwotICAgICAgICAgICAgICAgIGlmIChzLmNvbG9yID09IG51bGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgcy5jb2xvciA9IGNvbG9yc1tjb2xvcmldLnRvU3RyaW5nKCk7
Ci0gICAgICAgICAgICAgICAgICAgICsrY29sb3JpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygcy5jb2xvciA9PSAibnVtYmVyIikKLSAgICAgICAg
ICAgICAgICAgICAgcy5jb2xvciA9IGNvbG9yc1tzLmNvbG9yXS50b1N0cmluZygpOwotCi0gICAg
ICAgICAgICAgICAgLy8gdHVybiBvbiBsaW5lcyBhdXRvbWF0aWNhbGx5IGluIGNhc2Ugbm90aGlu
ZyBpcyBzZXQKLSAgICAgICAgICAgICAgICBpZiAocy5saW5lcy5zaG93ID09IG51bGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHYsIHNob3cgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHYgaW4gcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW3ZdICYmIHNbdl0u
c2hvdykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNob3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBz
LmxpbmVzLnNob3cgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIElmIG5vdGhpbmcgd2FzIHByb3ZpZGVkIGZvciBsaW5lcy56ZXJvLCBkZWZhdWx0IGl0IHRv
IG1hdGNoCi0gICAgICAgICAgICAgICAgLy8gbGluZXMuZmlsbCwgc2luY2UgYXJlYXMgYnkgZGVm
YXVsdCBzaG91bGQgZXh0ZW5kIHRvIHplcm8uCi0KLSAgICAgICAgICAgICAgICBpZiAocy5saW5l
cy56ZXJvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcy5saW5lcy56ZXJvID0gISFz
LmxpbmVzLmZpbGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gc2V0
dXAgYXhlcwotICAgICAgICAgICAgICAgIHMueGF4aXMgPSBnZXRPckNyZWF0ZUF4aXMoeGF4ZXMs
IGF4aXNOdW1iZXIocywgIngiKSk7Ci0gICAgICAgICAgICAgICAgcy55YXhpcyA9IGdldE9yQ3Jl
YXRlQXhpcyh5YXhlcywgYXhpc051bWJlcihzLCAieSIpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKCkgewotICAgICAgICAgICAgdmFy
IHRvcFNlbnRyeSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwKLSAgICAgICAgICAgICAgICBi
b3R0b21TZW50cnkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksCi0gICAgICAgICAgICAgICAg
ZmFrZUluZmluaXR5ID0gTnVtYmVyLk1BWF9WQUxVRSwKLSAgICAgICAgICAgICAgICBpLCBqLCBr
LCBtLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgcywgcG9pbnRzLCBwcywgeCwgeSwgYXhpcywg
dmFsLCBmLCBwLAotICAgICAgICAgICAgICAgIGRhdGEsIGZvcm1hdDsKLQotICAgICAgICAgICAg
ZnVuY3Rpb24gdXBkYXRlQXhpcyhheGlzLCBtaW4sIG1heCkgewotICAgICAgICAgICAgICAgIGlm
IChtaW4gPCBheGlzLmRhdGFtaW4gJiYgbWluICE9IC1mYWtlSW5maW5pdHkpCi0gICAgICAgICAg
ICAgICAgICAgIGF4aXMuZGF0YW1pbiA9IG1pbjsKLSAgICAgICAgICAgICAgICBpZiAobWF4ID4g
YXhpcy5kYXRhbWF4ICYmIG1heCAhPSBmYWtlSW5maW5pdHkpCi0gICAgICAgICAgICAgICAgICAg
IGF4aXMuZGF0YW1heCA9IG1heDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJC5lYWNo
KGFsbEF4ZXMoKSwgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAgICAgICAgICAgICAvLyBpbml0
IGF4aXMKLSAgICAgICAgICAgICAgICBheGlzLmRhdGFtaW4gPSB0b3BTZW50cnk7Ci0gICAgICAg
ICAgICAgICAgYXhpcy5kYXRhbWF4ID0gYm90dG9tU2VudHJ5OwotICAgICAgICAgICAgICAgIGF4
aXMudXNlZCA9IGZhbHNlOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBzID0gc2VyaWVz
W2ldOwotICAgICAgICAgICAgICAgIHMuZGF0YXBvaW50cyA9IHsgcG9pbnRzOiBbXSB9OwotCi0g
ICAgICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhvb2tzLnByb2Nlc3NSYXdEYXRhLCBbIHMsIHMu
ZGF0YSwgcy5kYXRhcG9pbnRzIF0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBm
aXJzdCBwYXNzOiBjbGVhbiBhbmQgY29weSBkYXRhCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgcyA9IHNlcmllc1tpXTsK
LQotICAgICAgICAgICAgICAgIGRhdGEgPSBzLmRhdGE7Ci0gICAgICAgICAgICAgICAgZm9ybWF0
ID0gcy5kYXRhcG9pbnRzLmZvcm1hdDsKLQotICAgICAgICAgICAgICAgIGlmICghZm9ybWF0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IFtdOwotICAgICAgICAgICAgICAgICAgICAv
LyBmaW5kIG91dCBob3cgdG8gY29weQotICAgICAgICAgICAgICAgICAgICBmb3JtYXQucHVzaCh7
IHg6IHRydWUsIG51bWJlcjogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcm1hdC5wdXNoKHsgeTogdHJ1ZSwgbnVtYmVyOiB0cnVlLCByZXF1aXJlZDogdHJ1
ZSB9KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocy5iYXJzLnNob3cgfHwgKHMubGluZXMu
c2hvdyAmJiBzLmxpbmVzLmZpbGwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0
b3NjYWxlID0gISEoKHMuYmFycy5zaG93ICYmIHMuYmFycy56ZXJvKSB8fCAocy5saW5lcy5zaG93
ICYmIHMubGluZXMuemVybykpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LnB1c2go
eyB5OiB0cnVlLCBudW1iZXI6IHRydWUsIHJlcXVpcmVkOiBmYWxzZSwgZGVmYXVsdFZhbHVlOiAw
LCBhdXRvc2NhbGU6IGF1dG9zY2FsZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
LmJhcnMuaG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBm
b3JtYXRbZm9ybWF0Lmxlbmd0aCAtIDFdLnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0W2Zvcm1hdC5sZW5ndGggLSAxXS54ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHMuZGF0
YXBvaW50cy5mb3JtYXQgPSBmb3JtYXQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHMuZGF0YXBvaW50cy5wb2ludHNpemUgIT0gbnVsbCkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7IC8vIGFscmVhZHkgZmlsbGVkIGluCi0KLSAgICAgICAgICAgICAgICBz
LmRhdGFwb2ludHMucG9pbnRzaXplID0gZm9ybWF0Lmxlbmd0aDsKLQotICAgICAgICAgICAgICAg
IHBzID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZTsKLSAgICAgICAgICAgICAgICBwb2ludHMgPSBz
LmRhdGFwb2ludHMucG9pbnRzOwotCi0gICAgICAgICAgICAgICAgdmFyIGluc2VydFN0ZXBzID0g
cy5saW5lcy5zaG93ICYmIHMubGluZXMuc3RlcHM7Ci0gICAgICAgICAgICAgICAgcy54YXhpcy51
c2VkID0gcy55YXhpcy51c2VkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaiA9IGsg
PSAwOyBqIDwgZGF0YS5sZW5ndGg7ICsraiwgayArPSBwcykgewotICAgICAgICAgICAgICAgICAg
ICBwID0gZGF0YVtqXTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgbnVsbGlmeSA9IHAgPT0g
bnVsbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFudWxsaWZ5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsrbSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbCA9IHBbbV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGZv
cm1hdFttXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLm51bWJlciAmJiB2YWwgIT0gbnVsbCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gK3ZhbDsgLy8gY29udmVy
dCB0byBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05h
Tih2YWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0g
SW5maW5pdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0g
ZmFrZUluZmluaXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodmFsID09IC1JbmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSAtZmFrZUluZmluaXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5yZXF1aXJlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsaWZ5ID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuZGVmYXVsdFZhbHVlICE9
IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gZi5k
ZWZhdWx0VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dHNbayArIG1dID0gdmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bGxpZnkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsID0gcG9pbnRzW2sgKyBtXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZiA9IGZvcm1hdFttXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXh0
cmFjdCBtaW4vbWF4IGluZm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYu
eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF4aXMocy54YXhp
cywgdmFsLCB2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi55KQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXhpcyhzLnlheGlzLCB2
YWwsIHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvaW50c1trICsgbV0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBsaXR0bGUgYml0IG9mIGxpbmUgc3BlY2lmaWMg
c3R1ZmYgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVyaGFwcyBzaG91bGRuJ3Qg
YmUgaGVyZSwgYnV0IGxhY2tpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHRlciBt
ZWFucy4uLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydFN0ZXBzICYmIGsgPiAw
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcG9pbnRzW2sgLSBwc10gIT0gbnVsbAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBvaW50c1trIC0gcHNdICE9IHBvaW50c1tr
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBvaW50c1trIC0gcHMgKyAxXSAhPSBw
b2ludHNbayArIDFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aGUg
cG9pbnQgdG8gbWFrZSByb29tIGZvciBhIG1pZGRsZSBwb2ludAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb2ludHNbayArIHBzICsgbV0gPSBwb2ludHNbayArIG1dOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbWlkZGxlIHBvaW50IGhhcyBzYW1lIHkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb2ludHNbayArIDFdID0gcG9pbnRzW2sgLSBwcyArIDFdOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UndmUgYWRkZWQgYSBwb2ludCwgYmV0
dGVyIHJlZmxlY3QgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gcHM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGdpdmUgdGhlIGhvb2tz
IGEgY2hhbmNlIHRvIHJ1bgotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlcmllcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbaV07Ci0KLSAgICAgICAgICAg
ICAgICBleGVjdXRlSG9va3MoaG9va3MucHJvY2Vzc0RhdGFwb2ludHMsIFsgcywgcy5kYXRhcG9p
bnRzXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNlY29uZCBwYXNzOiBmaW5k
IGRhdGFtYXgvZGF0YW1pbiBmb3IgYXV0by1zY2FsaW5nCi0gICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgcyA9IHNlcmllc1tp
XTsKLSAgICAgICAgICAgICAgICBwb2ludHMgPSBzLmRhdGFwb2ludHMucG9pbnRzLAotICAgICAg
ICAgICAgICAgIHBzID0gcy5kYXRhcG9pbnRzLnBvaW50c2l6ZTsKLSAgICAgICAgICAgICAgICBm
b3JtYXQgPSBzLmRhdGFwb2ludHMuZm9ybWF0OwotCi0gICAgICAgICAgICAgICAgdmFyIHhtaW4g
PSB0b3BTZW50cnksIHltaW4gPSB0b3BTZW50cnksCi0gICAgICAgICAgICAgICAgICAgIHhtYXgg
PSBib3R0b21TZW50cnksIHltYXggPSBib3R0b21TZW50cnk7Ci0KLSAgICAgICAgICAgICAgICBm
b3IgKGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaiArPSBwcykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAocG9pbnRzW2pdID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsrbSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcG9pbnRzW2ogKyBtXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGYgPSBmb3JtYXRbbV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWYgfHwgZi5hdXRvc2NhbGUgPT09IGZhbHNlIHx8IHZhbCA9PSBmYWtlSW5maW5pdHkgfHwgdmFs
ID09IC1mYWtlSW5maW5pdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLngpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsIDwgeG1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeG1pbiA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4geG1h
eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heCA9IHZhbDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLnkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsIDwgeW1pbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeW1pbiA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsID4geW1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW1heCA9
IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzLmJhcnMuc2hvdykgewot
ICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZ290IHJvb20gZm9yIHRoZSBiYXIg
b24gdGhlIGRhbmNpbmcgZmxvb3IKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhOwotCi0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocy5iYXJzLmFsaWduKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJsZWZ0IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0
YSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJyaWdodCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
dGEgPSAtcy5iYXJzLmJhcldpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2VudGVyIjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWx0YSA9IC1zLmJhcnMuYmFyV2lkdGggLyAyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFy
IGFsaWdubWVudDogIiArIHMuYmFycy5hbGlnbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAocy5iYXJzLmhvcml6b250YWwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHltaW4gKz0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5bWF4
ICs9IGRlbHRhICsgcy5iYXJzLmJhcldpZHRoOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgeG1pbiArPSBk
ZWx0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtYXggKz0gZGVsdGEgKyBzLmJhcnMuYmFy
V2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB1cGRhdGVBeGlzKHMueGF4aXMsIHhtaW4sIHhtYXgpOwotICAgICAgICAgICAg
ICAgIHVwZGF0ZUF4aXMocy55YXhpcywgeW1pbiwgeW1heCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF4aXMuZGF0YW1pbiA9PSB0b3BTZW50cnkpCi0gICAgICAgICAgICAgICAg
ICAgIGF4aXMuZGF0YW1pbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMuZGF0YW1h
eCA9PSBib3R0b21TZW50cnkpCi0gICAgICAgICAgICAgICAgICAgIGF4aXMuZGF0YW1heCA9IG51
bGw7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgZGlzcGxheSdzIHJhdGlvIGJldHdl
ZW4gcGh5c2ljYWwgYW5kIGRldmljZS1pbmRlcGVuZGVudCBwaXhlbHMuCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHdpZHRoIHRoYXQgdGhlIGJy
b3dzZXIgYWR2ZXJ0aXNlcyBhbmQgdGhlIG51bWJlcgotICAgICAgICAvLyBvZiBwaXhlbHMgYWN0
dWFsbHkgYXZhaWxhYmxlIGluIHRoYXQgc3BhY2UuICBUaGUgaVBob25lIDQsIGZvciBleGFtcGxl
LCBoYXMgYQotICAgICAgICAvLyBkZXZpY2UtaW5kZXBlbmRlbnQgd2lkdGggb2YgMzIwcHgsIGJ1
dCBpdHMgc2NyZWVuIGlzIGFjdHVhbGx5IDY0MHB4IHdpZGUuICBJdAotICAgICAgICAvLyB0aGVy
ZWZvcmUgaGFzIGEgcGl4ZWwgcmF0aW8gb2YgMiwgd2hpbGUgbW9zdCBub3JtYWwgZGV2aWNlcyBo
YXZlIGEgcmF0aW8gb2YgMS4KLQotICAgICAgICBmdW5jdGlvbiBnZXRQaXhlbFJhdGlvKGNjdHgp
IHsKLSAgICAgICAgICAgIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVs
UmF0aW8gfHwgMTsKLSAgICAgICAgICAgIHZhciBiYWNraW5nU3RvcmVSYXRpbyA9Ci0gICAgICAg
ICAgICAgICAgY2N0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8Ci0gICAgICAgICAg
ICAgICAgY2N0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8Ci0gICAgICAgICAgICAgICAg
Y2N0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHwKLSAgICAgICAgICAgICAgICBjY3R4Lm9C
YWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8Ci0gICAgICAgICAgICAgICAgY2N0eC5iYWNraW5nU3Rv
cmVQaXhlbFJhdGlvIHx8IDE7Ci0KLSAgICAgICAgICAgIHJldHVybiBkZXZpY2VQaXhlbFJhdGlv
IC8gYmFja2luZ1N0b3JlUmF0aW87Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYWtl
Q2FudmFzKGNscykgewotCi0gICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2NhbnZhcycpOwotICAgICAgICAgICAgYy5jbGFzc05hbWUgPSBjbHM7Ci0KLSAgICAgICAg
ICAgICQoYykuY3NzKHsgZGlyZWN0aW9uOiAibHRyIiwgcG9zaXRpb246ICJhYnNvbHV0ZSIsIGxl
ZnQ6IDAsIHRvcDogMCB9KQotICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhwbGFjZWhvbGRlcik7
Ci0KLSAgICAgICAgICAgIC8vIElmIEhUTUw1IENhbnZhcyBpc24ndCBhdmFpbGFibGUsIGZhbGwg
YmFjayB0byBFeGNhbnZhcwotCi0gICAgICAgICAgICBpZiAoIWMuZ2V0Q29udGV4dCkgewotICAg
ICAgICAgICAgICAgIGlmICh3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGMgPSB3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50KGMpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQ2FudmFzIGlzIG5vdCBhdmFpbGFibGUuIElmIHlvdSdyZSB1c2luZyBJRSB3aXRoIGEg
ZmFsbC1iYWNrIHN1Y2ggYXMgRXhjYW52YXMsIHRoZW4gdGhlcmUncyBlaXRoZXIgYSBtaXN0YWtl
IGluIHlvdXIgY29uZGl0aW9uYWwgaW5jbHVkZSwgb3IgdGhlIHBhZ2UgaGFzIG5vIERPQ1RZUEUg
YW5kIGlzIHJlbmRlcmluZyBpbiBRdWlya3MgTW9kZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBjY3R4ID0gYy5nZXRDb250ZXh0KCIyZCIp
OwotCi0gICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgY2FudmFzIGRlbnNpdHkgYmFzZWQgb24g
dGhlIGRpc3BsYXkncyBwaXhlbCByYXRpbzsgYmFzaWNhbGx5Ci0gICAgICAgICAgICAvLyBnaXZp
bmcgdGhlIGNhbnZhcyBtb3JlIHBpeGVscyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIHNpemUgb2Yg
aXRzIGVsZW1lbnQsCi0gICAgICAgICAgICAvLyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFj
dCB0aGF0IHJldGluYSBkaXNwbGF5cyBoYXZlIHRoYXQgbWFueSBtb3JlCi0gICAgICAgICAgICAv
LyBwaXhlbHMgdGhhbiB0aGV5IGFjdHVhbGx5IHVzZSBmb3IgcGFnZSAmIGVsZW1lbnQgd2lkdGhz
LgotCi0gICAgICAgICAgICB2YXIgcGl4ZWxSYXRpbyA9IGdldFBpeGVsUmF0aW8oY2N0eCk7Ci0K
LSAgICAgICAgICAgIGMud2lkdGggPSBjYW52YXNXaWR0aCAqIHBpeGVsUmF0aW87Ci0gICAgICAg
ICAgICBjLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHBpeGVsUmF0aW87Ci0gICAgICAgICAgICBj
LnN0eWxlLndpZHRoID0gY2FudmFzV2lkdGggKyAicHgiOwotICAgICAgICAgICAgYy5zdHlsZS5o
ZWlnaHQgPSBjYW52YXNIZWlnaHQgKyAicHgiOwotCi0gICAgICAgICAgICAvLyBTYXZlIHRoZSBj
b250ZXh0IHNvIHdlIGNhbiByZXNldCBpbiBjYXNlIHdlIGdldCByZXBsb3R0ZWQKLQotICAgICAg
ICAgICAgY2N0eC5zYXZlKCk7Ci0KLSAgICAgICAgICAgIC8vIFNjYWxlIHRoZSBjb29yZGluYXRl
IHNwYWNlIHRvIG1hdGNoIHRoZSBkaXNwbGF5IGRlbnNpdHk7IHNvIGV2ZW4gdGhvdWdoIHdlCi0g
ICAgICAgICAgICAvLyBtYXkgaGF2ZSB0d2ljZSBhcyBtYW55IHBpeGVscywgd2Ugc3RpbGwgd2Fu
dCBsaW5lcyBhbmQgb3RoZXIgZHJhd2luZyB0bwotICAgICAgICAgICAgLy8gYXBwZWFyIGF0IHRo
ZSBzYW1lIHNpemU7IHRoZSBleHRyYSBwaXhlbHMgd2lsbCBqdXN0IG1ha2UgdGhlbSBjcmlzcGVy
LgotCi0gICAgICAgICAgICBjY3R4LnNjYWxlKHBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pOwotCi0g
ICAgICAgICAgICByZXR1cm4gYzsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldENh
bnZhc0RpbWVuc2lvbnMoKSB7Ci0gICAgICAgICAgICBjYW52YXNXaWR0aCA9IHBsYWNlaG9sZGVy
LndpZHRoKCk7Ci0gICAgICAgICAgICBjYW52YXNIZWlnaHQgPSBwbGFjZWhvbGRlci5oZWlnaHQo
KTsKLQotICAgICAgICAgICAgaWYgKGNhbnZhc1dpZHRoIDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9
IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpbWVuc2lvbnMg
Zm9yIHBsb3QsIHdpZHRoID0gIiArIGNhbnZhc1dpZHRoICsgIiwgaGVpZ2h0ID0gIiArIGNhbnZh
c0hlaWdodCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZXNpemVDYW52YXMoYykg
ewotCi0gICAgICAgICAgICB2YXIgY2N0eCA9IGMuZ2V0Q29udGV4dCgiMmQiKTsKLQotICAgICAg
ICAgICAgLy8gSGFuZGxlIHBpeGVsIHJhdGlvcyA+IDEgZm9yIHJldGluYSBkaXNwbGF5cywgYXMg
ZXhwbGFpbmVkIGluIG1ha2VDYW52YXMKLQotICAgICAgICAgICAgdmFyIHBpeGVsUmF0aW8gPSBn
ZXRQaXhlbFJhdGlvKGNjdHgpOwotCi0gICAgICAgICAgICAvLyBSZXNpemluZyBzaG91bGQgcmVz
ZXQgdGhlIHN0YXRlIChleGNhbnZhcyBzZWVtcyB0byBiZSBidWdneSB0aG91Z2gpCi0KLSAgICAg
ICAgICAgIGlmIChjLnN0eWxlLndpZHRoICE9IGNhbnZhc1dpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgYy53aWR0aCA9IGNhbnZhc1dpZHRoICogcGl4ZWxSYXRpbzsKLSAgICAgICAgICAgICAgICBj
LnN0eWxlLndpZHRoID0gY2FudmFzV2lkdGggKyAicHgiOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoYy5zdHlsZS5oZWlnaHQgIT0gY2FudmFzSGVpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgYy5oZWlnaHQgPSBjYW52YXNIZWlnaHQgKiBwaXhlbFJhdGlvOwotICAgICAgICAgICAg
ICAgIGMuc3R5bGUuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gc28gdHJ5IHRvIGdldCBiYWNrIHRvIHRoZSBpbml0aWFsIHN0YXRl
IChldmVuIGlmIGl0J3MKLSAgICAgICAgICAgIC8vIGdvbmUgbm93LCB0aGlzIHNob3VsZCBiZSBz
YWZlIGFjY29yZGluZyB0byB0aGUgc3BlYykKLSAgICAgICAgICAgIGNjdHgucmVzdG9yZSgpOwot
Ci0gICAgICAgICAgICAvLyBhbmQgc2F2ZSBhZ2FpbgotICAgICAgICAgICAgY2N0eC5zYXZlKCk7
Ci0KLSAgICAgICAgICAgIC8vIEFwcGx5IHNjYWxpbmcgZm9yIHJldGluYSBkaXNwbGF5cywgYXMg
ZXhwbGFpbmVkIGluIG1ha2VDYW52YXMKLQotICAgICAgICAgICAgY2N0eC5zY2FsZShwaXhlbFJh
dGlvLCBwaXhlbFJhdGlvKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNldHVwQ2Fu
dmFzZXMoKSB7Ci0gICAgICAgICAgICB2YXIgcmV1c2VkLAotICAgICAgICAgICAgICAgIGV4aXN0
aW5nQ2FudmFzID0gcGxhY2Vob2xkZXIuY2hpbGRyZW4oImNhbnZhcy5mbG90LWJhc2UiKSwKLSAg
ICAgICAgICAgICAgICBleGlzdGluZ092ZXJsYXkgPSBwbGFjZWhvbGRlci5jaGlsZHJlbigiY2Fu
dmFzLmZsb3Qtb3ZlcmxheSIpOwotCi0gICAgICAgICAgICBpZiAoZXhpc3RpbmdDYW52YXMubGVu
Z3RoID09IDAgfHwgZXhpc3RpbmdPdmVybGF5ID09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBp
bml0IGV2ZXJ5dGhpbmcKLQotICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLmh0bWwoIiIpOyAv
LyBtYWtlIHN1cmUgcGxhY2Vob2xkZXIgaXMgY2xlYXIKLQotICAgICAgICAgICAgICAgIHBsYWNl
aG9sZGVyLmNzcyh7IHBhZGRpbmc6IDAgfSk7IC8vIHBhZGRpbmcgbWVzc2VzIHVwIHRoZSBwb3Np
dGlvbmluZwotCi0gICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmNzcygicG9zaXRpb24i
KSA9PSAnc3RhdGljJykKLSAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuY3NzKCJwb3Np
dGlvbiIsICJyZWxhdGl2ZSIpOyAvLyBmb3IgcG9zaXRpb25pbmcgbGFiZWxzIGFuZCBvdmVybGF5
Ci0KLSAgICAgICAgICAgICAgICBnZXRDYW52YXNEaW1lbnNpb25zKCk7Ci0KLSAgICAgICAgICAg
ICAgICBjYW52YXMgPSBtYWtlQ2FudmFzKCJmbG90LWJhc2UiKTsKLSAgICAgICAgICAgICAgICBv
dmVybGF5ID0gbWFrZUNhbnZhcygiZmxvdC1vdmVybGF5Iik7IC8vIG92ZXJsYXkgY2FudmFzIGZv
ciBpbnRlcmFjdGl2ZSBmZWF0dXJlcwotCi0gICAgICAgICAgICAgICAgcmV1c2VkID0gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBy
ZXVzZSBleGlzdGluZyBlbGVtZW50cwotCi0gICAgICAgICAgICAgICAgY2FudmFzID0gZXhpc3Rp
bmdDYW52YXMuZ2V0KDApOwotICAgICAgICAgICAgICAgIG92ZXJsYXkgPSBleGlzdGluZ092ZXJs
YXkuZ2V0KDApOwotCi0gICAgICAgICAgICAgICAgcmV1c2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAg
ICAgICBvY3R4ID0gb3ZlcmxheS5nZXRDb250ZXh0KCIyZCIpOwotCi0gICAgICAgICAgICAvLyBk
ZWZpbmUgd2hpY2ggZWxlbWVudCB3ZSdyZSBsaXN0ZW5pbmcgZm9yIGV2ZW50cyBvbgotICAgICAg
ICAgICAgZXZlbnRIb2xkZXIgPSAkKG92ZXJsYXkpOwotCi0gICAgICAgICAgICBpZiAocmV1c2Vk
KSB7Ci0gICAgICAgICAgICAgICAgLy8gcnVuIHNodXRkb3duIGluIHRoZSBvbGQgcGxvdCBvYmpl
Y3QKLSAgICAgICAgICAgICAgICBwbGFjZWhvbGRlci5kYXRhKCJwbG90Iikuc2h1dGRvd24oKTsK
LQotICAgICAgICAgICAgICAgIC8vIHJlc2V0IHJldXNlZCBjYW52YXNlcwotICAgICAgICAgICAg
ICAgIHBsb3QucmVzaXplKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgb3Zlcmxh
eSBwaXhlbHMgYXJlIGNsZWFyZWQgKGNhbnZhcyBpcyBjbGVhcmVkIHdoZW4gd2UgcmVkcmF3KQot
ICAgICAgICAgICAgICAgIG9jdHguY2xlYXJSZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNI
ZWlnaHQpOwotCi0gICAgICAgICAgICAgICAgLy8gdGhlbiB3aGFjayBhbnkgcmVtYWluaW5nIG9i
dmlvdXMgZ2FyYmFnZSBsZWZ0Ci0gICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCk7
Ci0gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuY2hpbGRyZW4oKS5ub3QoW2NhbnZhcywgb3Zl
cmxheV0pLnJlbW92ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzYXZlIGlu
IGNhc2Ugd2UgZ2V0IHJlcGxvdHRlZAotICAgICAgICAgICAgcGxhY2Vob2xkZXIuZGF0YSgicGxv
dCIsIHBsb3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHsK
LSAgICAgICAgICAgIC8vIGJpbmQgZXZlbnRzCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5ncmlk
LmhvdmVyYWJsZSkgewotICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVyLm1vdXNlbW92ZShvbk1v
dXNlTW92ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgYmluZCwgcmF0aGVyIHRoYW4gLm1v
dXNlbGVhdmUsIGJlY2F1c2Ugd2Ugb2ZmaWNpYWxseQotICAgICAgICAgICAgICAgIC8vIHN0aWxs
IHN1cHBvcnQgalF1ZXJ5IDEuMi42LCB3aGljaCBkb2Vzbid0IGRlZmluZSBhIHNob3J0Y3V0Ci0g
ICAgICAgICAgICAgICAgLy8gZm9yIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZS4gIFRoaXMgd2Fz
IGEgYnVnL292ZXJzaWdodCB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gd2FzIGZpeGVkIHNvbWV3
aGVyZSBhcm91bmQgMS4zLnguICBXZSBjYW4gcmV0dXJuIHRvIHVzaW5nCi0gICAgICAgICAgICAg
ICAgLy8gLm1vdXNlbGVhdmUgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIDEuMi42LgotCi0gICAg
ICAgICAgICAgICAgZXZlbnRIb2xkZXIuYmluZCgibW91c2VsZWF2ZSIsIG9uTW91c2VMZWF2ZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuY2xpY2thYmxl
KQotICAgICAgICAgICAgICAgIGV2ZW50SG9sZGVyLmNsaWNrKG9uQ2xpY2spOwotCi0gICAgICAg
ICAgICBleGVjdXRlSG9va3MoaG9va3MuYmluZEV2ZW50cywgW2V2ZW50SG9sZGVyXSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzaHV0ZG93bigpIHsKLSAgICAgICAgICAgIGlmIChy
ZWRyYXdUaW1lb3V0KQotICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZWRyYXdUaW1lb3V0
KTsKLQotICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJtb3VzZW1vdmUiLCBvbk1vdXNl
TW92ZSk7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoIm1vdXNlbGVhdmUiLCBvbk1v
dXNlTGVhdmUpOwotICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKCJjbGljayIsIG9uQ2xp
Y2spOwotCi0gICAgICAgICAgICBleGVjdXRlSG9va3MoaG9va3Muc2h1dGRvd24sIFtldmVudEhv
bGRlcl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0VHJhbnNmb3JtYXRpb25I
ZWxwZXJzKGF4aXMpIHsKLSAgICAgICAgICAgIC8vIHNldCBoZWxwZXIgZnVuY3Rpb25zIG9uIHRo
ZSBheGlzLCBhc3N1bWVzIHBsb3QgYXJlYQotICAgICAgICAgICAgLy8gaGFzIGJlZW4gY29tcHV0
ZWQgYWxyZWFkeQotCi0gICAgICAgICAgICBmdW5jdGlvbiBpZGVudGl0eSh4KSB7IHJldHVybiB4
OyB9Ci0KLSAgICAgICAgICAgIHZhciBzLCBtLCB0ID0gYXhpcy5vcHRpb25zLnRyYW5zZm9ybSB8
fCBpZGVudGl0eSwKLSAgICAgICAgICAgICAgICBpdCA9IGF4aXMub3B0aW9ucy5pbnZlcnNlVHJh
bnNmb3JtOwotCi0gICAgICAgICAgICAvLyBwcmVjb21wdXRlIGhvdyBtdWNoIHRoZSBheGlzIGlz
IHNjYWxpbmcgYSBwb2ludAotICAgICAgICAgICAgLy8gaW4gY2FudmFzIHNwYWNlCi0gICAgICAg
ICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7Ci0gICAgICAgICAgICAgICAgcyA9IGF4
aXMuc2NhbGUgPSBwbG90V2lkdGggLyBNYXRoLmFicyh0KGF4aXMubWF4KSAtIHQoYXhpcy5taW4p
KTsKLSAgICAgICAgICAgICAgICBtID0gTWF0aC5taW4odChheGlzLm1heCksIHQoYXhpcy5taW4p
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHMg
PSBheGlzLnNjYWxlID0gcGxvdEhlaWdodCAvIE1hdGguYWJzKHQoYXhpcy5tYXgpIC0gdChheGlz
Lm1pbikpOwotICAgICAgICAgICAgICAgIHMgPSAtczsKLSAgICAgICAgICAgICAgICBtID0gTWF0
aC5tYXgodChheGlzLm1heCksIHQoYXhpcy5taW4pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gZGF0YSBwb2ludCB0byBjYW52YXMgY29vcmRpbmF0ZQotICAgICAgICAgICAgaWYg
KHQgPT0gaWRlbnRpdHkpIC8vIHNsaWdodCBvcHRpbWl6YXRpb24KLSAgICAgICAgICAgICAgICBh
eGlzLnAyYyA9IGZ1bmN0aW9uIChwKSB7IHJldHVybiAocCAtIG0pICogczsgfTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBheGlzLnAyYyA9IGZ1bmN0aW9uIChwKSB7IHJldHVy
biAodChwKSAtIG0pICogczsgfTsKLSAgICAgICAgICAgIC8vIGNhbnZhcyBjb29yZGluYXRlIHRv
IGRhdGEgcG9pbnQKLSAgICAgICAgICAgIGlmICghaXQpCi0gICAgICAgICAgICAgICAgYXhpcy5j
MnAgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gbSArIGMgLyBzOyB9OwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGF4aXMuYzJwID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGl0KG0g
KyBjIC8gcyk7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtZWFzdXJlVGlja0xh
YmVscyhheGlzKSB7Ci0gICAgICAgICAgICB2YXIgb3B0cyA9IGF4aXMub3B0aW9ucywgdGlja3Mg
PSBheGlzLnRpY2tzIHx8IFtdLAotICAgICAgICAgICAgICAgIGF4aXN3ID0gb3B0cy5sYWJlbFdp
ZHRoIHx8IDAsIGF4aXNoID0gb3B0cy5sYWJlbEhlaWdodCB8fCAwLAotICAgICAgICAgICAgICAg
IGYgPSBheGlzLmZvbnQ7Ci0KLSAgICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgICAgICBj
dHguZm9udCA9IGYuc3R5bGUgKyAiICIgKyBmLnZhcmlhbnQgKyAiICIgKyBmLndlaWdodCArICIg
IiArIGYuc2l6ZSArICJweCAnIiArIGYuZmFtaWx5ICsgIiciOwotCi0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRpY2tzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHQgPSB0aWNrc1tpXTsKLQotICAgICAgICAgICAgICAgIHQubGluZXMgPSBbXTsKLSAgICAgICAg
ICAgICAgICB0LndpZHRoID0gdC5oZWlnaHQgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0
LmxhYmVsKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAg
IC8vIGFjY2VwdCB2YXJpb3VzIGtpbmRzIG9mIG5ld2xpbmVzLCBpbmNsdWRpbmcgSFRNTCBvbmVz
Ci0gICAgICAgICAgICAgICAgLy8gKHlvdSBjYW4gYWN0dWFsbHkgc3BsaXQgZGlyZWN0bHkgb24g
cmVnZXhwcyBpbiBKYXZhc2NyaXB0LAotICAgICAgICAgICAgICAgIC8vIGJ1dCBJRSA8IDkgaXMg
dW5mb3J0dW5hdGVseSBicm9rZW4pCi0gICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gKHQubGFi
ZWwgKyAiIikucmVwbGFjZSgvPGJyID9cLz8+fFxyXG58XHIvZywgIlxuIikuc3BsaXQoIlxuIik7
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lcy5sZW5ndGg7ICsraikg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHsgdGV4dDogbGluZXNbal0gfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG0gPSBjdHgubWVhc3VyZVRleHQobGluZS50ZXh0KTsKLQot
ICAgICAgICAgICAgICAgICAgICBsaW5lLndpZHRoID0gbS53aWR0aDsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gbS5oZWlnaHQgbWlnaHQgbm90IGJlIGRlZmluZWQsIG5vdCBpbiB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gc3RhbmRhcmQgeWV0Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUu
aGVpZ2h0ID0gbS5oZWlnaHQgIT0gbnVsbCA/IG0uaGVpZ2h0IDogZi5zaXplOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGFkZCBhIGJpdCBvZiBtYXJnaW4gc2luY2UgZm9udCByZW5kZXJpbmcg
aXMKLSAgICAgICAgICAgICAgICAgICAgLy8gbm90IHBpeGVsIHBlcmZlY3QgYW5kIGN1dCBvZmYg
bGV0dGVycyBsb29rCi0gICAgICAgICAgICAgICAgICAgIC8vIGJhZCwgdGhpcyBhbHNvIGRvdWJs
ZXMgYXMgc3BhY2luZyBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpbmVzCi0gICAg
ICAgICAgICAgICAgICAgIGxpbmUuaGVpZ2h0ICs9IE1hdGgucm91bmQoZi5zaXplICogMC4xNSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdC53aWR0aCA9IE1hdGgubWF4KGxpbmUud2lkdGgsIHQu
d2lkdGgpOwotICAgICAgICAgICAgICAgICAgICB0LmhlaWdodCArPSBsaW5lLmhlaWdodDsKLQot
ICAgICAgICAgICAgICAgICAgICB0LmxpbmVzLnB1c2gobGluZSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKG9wdHMubGFiZWxXaWR0aCA9PSBudWxsKQotICAgICAg
ICAgICAgICAgICAgICBheGlzdyA9IE1hdGgubWF4KGF4aXN3LCB0LndpZHRoKTsKLSAgICAgICAg
ICAgICAgICBpZiAob3B0cy5sYWJlbEhlaWdodCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAg
ICBheGlzaCA9IE1hdGgubWF4KGF4aXNoLCB0LmhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjdHgucmVzdG9yZSgpOwotCi0gICAgICAgICAgICBheGlzLmxhYmVsV2lkdGggPSBN
YXRoLmNlaWwoYXhpc3cpOwotICAgICAgICAgICAgYXhpcy5sYWJlbEhlaWdodCA9IE1hdGguY2Vp
bChheGlzaCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhbGxvY2F0ZUF4aXNCb3hG
aXJzdFBoYXNlKGF4aXMpIHsKLSAgICAgICAgICAgIC8vIGZpbmQgdGhlIGJvdW5kaW5nIGJveCBv
ZiB0aGUgYXhpcyBieSBsb29raW5nIGF0IGxhYmVsCi0gICAgICAgICAgICAvLyB3aWR0aHMvaGVp
Z2h0cyBhbmQgdGlja3MsIG1ha2Ugcm9vbSBieSBkaW1pbmlzaGluZyB0aGUKLSAgICAgICAgICAg
IC8vIHBsb3RPZmZzZXQ7IHRoaXMgZmlyc3QgcGhhc2Ugb25seSBsb29rcyBhdCBvbmUKLSAgICAg
ICAgICAgIC8vIGRpbWVuc2lvbiBwZXIgYXhpcywgdGhlIG90aGVyIGRpbWVuc2lvbiBkZXBlbmRz
IG9uIHRoZQotICAgICAgICAgICAgLy8gb3RoZXIgYXhlcyBzbyB3aWxsIGhhdmUgdG8gd2FpdAot
Ci0gICAgICAgICAgICB2YXIgbHcgPSBheGlzLmxhYmVsV2lkdGgsCi0gICAgICAgICAgICAgICAg
bGggPSBheGlzLmxhYmVsSGVpZ2h0LAotICAgICAgICAgICAgICAgIHBvcyA9IGF4aXMub3B0aW9u
cy5wb3NpdGlvbiwKLSAgICAgICAgICAgICAgICB0aWNrTGVuZ3RoID0gYXhpcy5vcHRpb25zLnRp
Y2tMZW5ndGgsCi0gICAgICAgICAgICAgICAgYXhpc01hcmdpbiA9IG9wdGlvbnMuZ3JpZC5heGlz
TWFyZ2luLAotICAgICAgICAgICAgICAgIHBhZGRpbmcgPSBvcHRpb25zLmdyaWQubGFiZWxNYXJn
aW4sCi0gICAgICAgICAgICAgICAgYWxsID0gYXhpcy5kaXJlY3Rpb24gPT0gIngiID8geGF4ZXMg
OiB5YXhlcywKLSAgICAgICAgICAgICAgICBpbmRleCwgaW5uZXJtb3N0OwotCi0gICAgICAgICAg
ICAvLyBkZXRlcm1pbmUgYXhpcyBtYXJnaW4KLSAgICAgICAgICAgIHZhciBzYW1lUG9zaXRpb24g
PSAkLmdyZXAoYWxsLCBmdW5jdGlvbiAoYSkgewotICAgICAgICAgICAgICAgIHJldHVybiBhICYm
IGEub3B0aW9ucy5wb3NpdGlvbiA9PSBwb3MgJiYgYS5yZXNlcnZlU3BhY2U7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIGlmICgkLmluQXJyYXkoYXhpcywgc2FtZVBvc2l0aW9uKSA9PSBz
YW1lUG9zaXRpb24ubGVuZ3RoIC0gMSkKLSAgICAgICAgICAgICAgICBheGlzTWFyZ2luID0gMDsg
Ly8gb3V0ZXJtb3N0Ci0KLSAgICAgICAgICAgIC8vIGRldGVybWluZSB0aWNrIGxlbmd0aCAtIGlm
IHdlJ3JlIGlubmVybW9zdCwgd2UgY2FuIHVzZSAiZnVsbCIKLSAgICAgICAgICAgIGlmICh0aWNr
TGVuZ3RoID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2FtZURpcmVjdGlvbiA9ICQu
Z3JlcChhbGwsIGZ1bmN0aW9uIChhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICYm
IGEucmVzZXJ2ZVNwYWNlOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAg
aW5uZXJtb3N0ID0gJC5pbkFycmF5KGF4aXMsIHNhbWVEaXJlY3Rpb24pID09IDA7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlubmVybW9zdCkKLSAgICAgICAgICAgICAgICAgICAgdGlja0xlbmd0aCA9
ICJmdWxsIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRpY2tM
ZW5ndGggPSA1OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWlzTmFOKCt0aWNr
TGVuZ3RoKSkKLSAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICt0aWNrTGVuZ3RoOwotCi0gICAg
ICAgICAgICAvLyBjb21wdXRlIGJveAotICAgICAgICAgICAgaWYgKGF4aXMuZGlyZWN0aW9uID09
ICJ4IikgewotICAgICAgICAgICAgICAgIGxoICs9IHBhZGRpbmc7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAocG9zID09ICJib3R0b20iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBsb3RPZmZzZXQu
Ym90dG9tICs9IGxoICsgYXhpc01hcmdpbjsKLSAgICAgICAgICAgICAgICAgICAgYXhpcy5ib3gg
PSB7IHRvcDogY2FudmFzSGVpZ2h0IC0gcGxvdE9mZnNldC5ib3R0b20sIGhlaWdodDogbGggfTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF4aXMuYm94ID0geyB0b3A6IHBsb3RPZmZzZXQudG9wICsgYXhpc01hcmdpbiwgaGVp
Z2h0OiBsaCB9OwotICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0LnRvcCArPSBsaCArIGF4
aXNNYXJnaW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgbHcgKz0gcGFkZGluZzsKLQotICAgICAgICAgICAgICAg
IGlmIChwb3MgPT0gImxlZnQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF4aXMuYm94ID0geyBs
ZWZ0OiBwbG90T2Zmc2V0LmxlZnQgKyBheGlzTWFyZ2luLCB3aWR0aDogbHcgfTsKLSAgICAgICAg
ICAgICAgICAgICAgcGxvdE9mZnNldC5sZWZ0ICs9IGx3ICsgYXhpc01hcmdpbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBs
b3RPZmZzZXQucmlnaHQgKz0gbHcgKyBheGlzTWFyZ2luOwotICAgICAgICAgICAgICAgICAgICBh
eGlzLmJveCA9IHsgbGVmdDogY2FudmFzV2lkdGggLSBwbG90T2Zmc2V0LnJpZ2h0LCB3aWR0aDog
bHcgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAv
LyBzYXZlIGZvciBmdXR1cmUgcmVmZXJlbmNlCi0gICAgICAgICAgICBheGlzLnBvc2l0aW9uID0g
cG9zOwotICAgICAgICAgICAgYXhpcy50aWNrTGVuZ3RoID0gdGlja0xlbmd0aDsKLSAgICAgICAg
ICAgIGF4aXMuYm94LnBhZGRpbmcgPSBwYWRkaW5nOwotICAgICAgICAgICAgYXhpcy5pbm5lcm1v
c3QgPSBpbm5lcm1vc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhbGxvY2F0ZUF4
aXNCb3hTZWNvbmRQaGFzZShheGlzKSB7Ci0gICAgICAgICAgICAvLyBub3cgdGhhdCBhbGwgYXhp
cyBib3hlcyBoYXZlIGJlZW4gcGxhY2VkIGluIG9uZQotICAgICAgICAgICAgLy8gZGltZW5zaW9u
LCB3ZSBjYW4gc2V0IHRoZSByZW1haW5pbmcgZGltZW5zaW9uIGNvb3JkaW5hdGVzCi0gICAgICAg
ICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7Ci0gICAgICAgICAgICAgICAgYXhpcy5i
b3gubGVmdCA9IHBsb3RPZmZzZXQubGVmdCAtIGF4aXMubGFiZWxXaWR0aCAvIDI7Ci0gICAgICAg
ICAgICAgICAgYXhpcy5ib3gud2lkdGggPSBjYW52YXNXaWR0aCAtIHBsb3RPZmZzZXQubGVmdCAt
IHBsb3RPZmZzZXQucmlnaHQgKyBheGlzLmxhYmVsV2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBheGlzLmJveC50b3AgPSBwbG90T2Zmc2V0
LnRvcCAtIGF4aXMubGFiZWxIZWlnaHQgLyAyOwotICAgICAgICAgICAgICAgIGF4aXMuYm94Lmhl
aWdodCA9IGNhbnZhc0hlaWdodCAtIHBsb3RPZmZzZXQuYm90dG9tIC0gcGxvdE9mZnNldC50b3Ag
KyBheGlzLmxhYmVsSGVpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gYWRqdXN0TGF5b3V0Rm9yVGhpbmdzU3RpY2tpbmdPdXQoKSB7Ci0gICAgICAgICAg
ICAvLyBwb3NzaWJseSBhZGp1c3QgcGxvdCBvZmZzZXQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgc3Rh
eXMKLSAgICAgICAgICAgIC8vIGluc2lkZSB0aGUgY2FudmFzIGFuZCBpc24ndCBjbGlwcGVkIG9m
ZgotCi0gICAgICAgICAgICB2YXIgbWluTWFyZ2luID0gb3B0aW9ucy5ncmlkLm1pbkJvcmRlck1h
cmdpbiwKLSAgICAgICAgICAgICAgICBtYXJnaW5zID0geyB4OiAwLCB5OiAwIH0sIGksIGF4aXM7
Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIHN0dWZmIGZyb20gdGhlIHBsb3QgKEZJWE1FOiB0aGlz
IHNob3VsZCBqdXN0IHJlYWQKLSAgICAgICAgICAgIC8vIGEgdmFsdWUgZnJvbSB0aGUgc2VyaWVz
LCBvdGhlcndpc2UgaXQncyBpbXBvc3NpYmxlIHRvCi0gICAgICAgICAgICAvLyBjdXN0b21pemUp
Ci0gICAgICAgICAgICBpZiAobWluTWFyZ2luID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBt
aW5NYXJnaW4gPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXJpZXMubGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWF4KG1pbk1h
cmdpbiwgMiAqIChzZXJpZXNbaV0ucG9pbnRzLnJhZGl1cyArIHNlcmllc1tpXS5wb2ludHMubGlu
ZVdpZHRoLzIpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWFyZ2lucy54ID0gbWFy
Z2lucy55ID0gTWF0aC5jZWlsKG1pbk1hcmdpbik7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGF4
aXMgbGFiZWxzLCBub3RlIHdlIGRvbid0IGNoZWNrIHRoZSBhY3R1YWwKLSAgICAgICAgICAgIC8v
IGxhYmVscyBidXQgaW5zdGVhZCB1c2UgdGhlIG92ZXJhbGwgd2lkdGgvaGVpZ2h0IHRvIG5vdAot
ICAgICAgICAgICAgLy8ganVtcCBhcyBtdWNoIGFyb3VuZCB3aXRoIHJlcGxvdHMKLSAgICAgICAg
ICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGRpciA9IGF4aXMuZGlyZWN0aW9uOwotICAgICAgICAgICAgICAgIGlmIChheGlzLnJl
c2VydmVTcGFjZSkKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luc1tkaXJdID0gTWF0aC5jZWls
KE1hdGgubWF4KG1hcmdpbnNbZGlyXSwgKGRpciA9PSAieCIgPyBheGlzLmxhYmVsV2lkdGggOiBh
eGlzLmxhYmVsSGVpZ2h0KSAvIDIpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBw
bG90T2Zmc2V0LmxlZnQgPSBNYXRoLm1heChtYXJnaW5zLngsIHBsb3RPZmZzZXQubGVmdCk7Ci0g
ICAgICAgICAgICBwbG90T2Zmc2V0LnJpZ2h0ID0gTWF0aC5tYXgobWFyZ2lucy54LCBwbG90T2Zm
c2V0LnJpZ2h0KTsKLSAgICAgICAgICAgIHBsb3RPZmZzZXQudG9wID0gTWF0aC5tYXgobWFyZ2lu
cy55LCBwbG90T2Zmc2V0LnRvcCk7Ci0gICAgICAgICAgICBwbG90T2Zmc2V0LmJvdHRvbSA9IE1h
dGgubWF4KG1hcmdpbnMueSwgcGxvdE9mZnNldC5ib3R0b20pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gc2V0dXBHcmlkKCkgewotICAgICAgICAgICAgdmFyIGksIGF4ZXMgPSBhbGxB
eGVzKCksIHNob3dHcmlkID0gb3B0aW9ucy5ncmlkLnNob3c7Ci0KLSAgICAgICAgICAgIC8vIElu
aXRpYWxpemUgdGhlIHBsb3QncyBvZmZzZXQgZnJvbSB0aGUgZWRnZSBvZiB0aGUgY2FudmFzCi0K
LSAgICAgICAgICAgIGZvciAodmFyIGEgaW4gcGxvdE9mZnNldCkgewotICAgICAgICAgICAgICAg
IHZhciBtYXJnaW4gPSBvcHRpb25zLmdyaWQubWFyZ2luIHx8IDA7Ci0gICAgICAgICAgICAgICAg
cGxvdE9mZnNldFthXSA9IHR5cGVvZiBtYXJnaW4gPT0gIm51bWJlciIgPyBtYXJnaW4gOiBtYXJn
aW5bYV0gfHwgMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXhlY3V0ZUhvb2tzKGhv
b2tzLnByb2Nlc3NPZmZzZXQsIFtwbG90T2Zmc2V0XSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRo
ZSBncmlkIGlzIHZpc2libGUsIGFkZCBpdHMgYm9yZGVyIHdpZHRoIHRvIHRoZSBvZmZzZXQKLQot
ICAgICAgICAgICAgZm9yICh2YXIgYSBpbiBwbG90T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAg
aWYodHlwZW9mKG9wdGlvbnMuZ3JpZC5ib3JkZXJXaWR0aCkgPT0gIm9iamVjdCIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcGxvdE9mZnNldFthXSArPSBzaG93R3JpZCA/IG9wdGlvbnMuZ3JpZC5i
b3JkZXJXaWR0aFthXSA6IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBwbG90T2Zmc2V0W2FdICs9IHNob3dHcmlkID8gb3B0
aW9ucy5ncmlkLmJvcmRlcldpZHRoIDogMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIGluaXQgYXhlcwotICAgICAgICAgICAgJC5lYWNoKGF4ZXMs
IGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAgICAgICAgICAgYXhpcy5zaG93ID0gYXhpcy5v
cHRpb25zLnNob3c7Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMuc2hvdyA9PSBudWxsKQotICAg
ICAgICAgICAgICAgICAgICBheGlzLnNob3cgPSBheGlzLnVzZWQ7IC8vIGJ5IGRlZmF1bHQgYW4g
YXhpcyBpcyB2aXNpYmxlIGlmIGl0J3MgZ290IGRhdGEKLQotICAgICAgICAgICAgICAgIGF4aXMu
cmVzZXJ2ZVNwYWNlID0gYXhpcy5zaG93IHx8IGF4aXMub3B0aW9ucy5yZXNlcnZlU3BhY2U7Ci0K
LSAgICAgICAgICAgICAgICBzZXRSYW5nZShheGlzKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICBpZiAoc2hvd0dyaWQpIHsKLSAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgZnJv
bSB0aGUgcGxhY2Vob2xkZXIgdGhlIGZvbnQgc2l6ZSB+IGhlaWdodCBvZiBmb250IH4gMSBlbQot
ICAgICAgICAgICAgICAgIHZhciBmb250RGVmYXVsdHMgPSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0eWxlOiBwbGFjZWhvbGRlci5jc3MoImZvbnQtc3R5bGUiKSwKLSAgICAgICAgICAgICAgICAg
ICAgc2l6ZTogTWF0aC5yb3VuZCgwLjggKiAoK3BsYWNlaG9sZGVyLmNzcygiZm9udC1zaXplIiku
cmVwbGFjZSgicHgiLCAiIikgfHwgMTMpKSwKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFudDog
cGxhY2Vob2xkZXIuY3NzKCJmb250LXZhcmlhbnQiKSwKLSAgICAgICAgICAgICAgICAgICAgd2Vp
Z2h0OiBwbGFjZWhvbGRlci5jc3MoImZvbnQtd2VpZ2h0IiksCi0gICAgICAgICAgICAgICAgICAg
IGZhbWlseTogcGxhY2Vob2xkZXIuY3NzKCJmb250LWZhbWlseSIpCi0gICAgICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgICAgIHZhciBhbGxvY2F0ZWRBeGVzID0gJC5ncmVwKGF4ZXMsIGZ1
bmN0aW9uIChheGlzKSB7IHJldHVybiBheGlzLnJlc2VydmVTcGFjZTsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAkLmVhY2goYWxsb2NhdGVkQXhlcywgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbWFrZSB0aGUgdGlja3MKLSAgICAgICAgICAgICAgICAgICAgc2V0
dXBUaWNrR2VuZXJhdGlvbihheGlzKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGlja3MoYXhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSYW5nZVRvVGlja3MoYXhpcywgYXhpcy50aWNr
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBsYWJlbFdpZHRoL0hlaWdodCBmb3Ig
YXhpcwotICAgICAgICAgICAgICAgICAgICBheGlzLmZvbnQgPSAkLmV4dGVuZCh7fSwgZm9udERl
ZmF1bHRzLCBheGlzLm9wdGlvbnMuZm9udCk7Ci0gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVU
aWNrTGFiZWxzKGF4aXMpOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAg
Ly8gd2l0aCBhbGwgZGltZW5zaW9ucyBjYWxjdWxhdGVkLCB3ZSBjYW4gY29tcHV0ZSB0aGUKLSAg
ICAgICAgICAgICAgICAvLyBheGlzIGJvdW5kaW5nIGJveGVzLCBzdGFydCBmcm9tIHRoZSBvdXRz
aWRlCi0gICAgICAgICAgICAgICAgLy8gKHJldmVyc2Ugb3JkZXIpCi0gICAgICAgICAgICAgICAg
Zm9yIChpID0gYWxsb2NhdGVkQXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAg
ICAgICAgICAgICAgYWxsb2NhdGVBeGlzQm94Rmlyc3RQaGFzZShhbGxvY2F0ZWRBeGVzW2ldKTsK
LQotICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgZW5vdWdoIHNwYWNlIGZv
ciB0aGluZ3MgdGhhdAotICAgICAgICAgICAgICAgIC8vIG1pZ2h0IHN0aWNrIG91dAotICAgICAg
ICAgICAgICAgIGFkanVzdExheW91dEZvclRoaW5nc1N0aWNraW5nT3V0KCk7Ci0KLSAgICAgICAg
ICAgICAgICAkLmVhY2goYWxsb2NhdGVkQXhlcywgZnVuY3Rpb24gKF8sIGF4aXMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdGVBeGlzQm94U2Vjb25kUGhhc2UoYXhpcyk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBsb3RXaWR0aCA9IGNh
bnZhc1dpZHRoIC0gcGxvdE9mZnNldC5sZWZ0IC0gcGxvdE9mZnNldC5yaWdodDsKLSAgICAgICAg
ICAgIHBsb3RIZWlnaHQgPSBjYW52YXNIZWlnaHQgLSBwbG90T2Zmc2V0LmJvdHRvbSAtIHBsb3RP
ZmZzZXQudG9wOwotCi0gICAgICAgICAgICAvLyBub3cgd2UgZ290IHRoZSBwcm9wZXIgcGxvdCBk
aW1lbnNpb25zLCB3ZSBjYW4gY29tcHV0ZSB0aGUgc2NhbGluZwotICAgICAgICAgICAgJC5lYWNo
KGF4ZXMsIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAgICAgICAgICAgc2V0VHJhbnNmb3Jt
YXRpb25IZWxwZXJzKGF4aXMpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGluc2Vy
dExlZ2VuZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0UmFuZ2UoYXhpcykg
ewotICAgICAgICAgICAgdmFyIG9wdHMgPSBheGlzLm9wdGlvbnMsCi0gICAgICAgICAgICAgICAg
bWluID0gKyhvcHRzLm1pbiAhPSBudWxsID8gb3B0cy5taW4gOiBheGlzLmRhdGFtaW4pLAotICAg
ICAgICAgICAgICAgIG1heCA9ICsob3B0cy5tYXggIT0gbnVsbCA/IG9wdHMubWF4IDogYXhpcy5k
YXRhbWF4KSwKLSAgICAgICAgICAgICAgICBkZWx0YSA9IG1heCAtIG1pbjsKLQotICAgICAgICAg
ICAgaWYgKGRlbHRhID09IDAuMCkgewotICAgICAgICAgICAgICAgIC8vIGRlZ2VuZXJhdGUgY2Fz
ZQotICAgICAgICAgICAgICAgIHZhciB3aWRlbiA9IG1heCA9PSAwID8gMSA6IDAuMDE7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAob3B0cy5taW4gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAg
bWluIC09IHdpZGVuOwotICAgICAgICAgICAgICAgIC8vIGFsd2F5cyB3aWRlbiBtYXggaWYgd2Ug
Y291bGRuJ3Qgd2lkZW4gbWluIHRvIGVuc3VyZSB3ZQotICAgICAgICAgICAgICAgIC8vIGRvbid0
IGZhbGwgaW50byBtaW4gPT0gbWF4IHdoaWNoIGRvZXNuJ3Qgd29yawotICAgICAgICAgICAgICAg
IGlmIChvcHRzLm1heCA9PSBudWxsIHx8IG9wdHMubWluICE9IG51bGwpCi0gICAgICAgICAgICAg
ICAgICAgIG1heCArPSB3aWRlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIGNvbnNpZGVyIGF1dG9zY2FsaW5nCi0gICAgICAgICAgICAgICAg
dmFyIG1hcmdpbiA9IG9wdHMuYXV0b3NjYWxlTWFyZ2luOwotICAgICAgICAgICAgICAgIGlmICht
YXJnaW4gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5taW4gPT0gbnVs
bCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWluIC09IGRlbHRhICogbWFyZ2luOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGdvIGJlbG93IHplcm8g
aWYgYWxsIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHBvc2l0aXZlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluIDwgMCAmJiBheGlzLmRhdGFtaW4gIT0gbnVs
bCAmJiBheGlzLmRhdGFtaW4gPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4g
PSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcHRz
Lm1heCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXggKz0gZGVsdGEgKiBt
YXJnaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4ID4gMCAmJiBheGlzLmRhdGFt
YXggIT0gbnVsbCAmJiBheGlzLmRhdGFtYXggPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXggPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYXhpcy5taW4gPSBtaW47Ci0gICAgICAgICAgICBh
eGlzLm1heCA9IG1heDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNldHVwVGlja0dl
bmVyYXRpb24oYXhpcykgewotICAgICAgICAgICAgdmFyIG9wdHMgPSBheGlzLm9wdGlvbnM7Ci0K
LSAgICAgICAgICAgIC8vIGVzdGltYXRlIG51bWJlciBvZiB0aWNrcwotICAgICAgICAgICAgdmFy
IG5vVGlja3M7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMudGlja3MgPT0gIm51bWJlciIg
JiYgb3B0cy50aWNrcyA+IDApCi0gICAgICAgICAgICAgICAgbm9UaWNrcyA9IG9wdHMudGlja3M7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLy8gaGV1cmlzdGljIGJhc2VkIG9u
IHRoZSBtb2RlbCBhKnNxcnQoeCkgZml0dGVkIHRvCi0gICAgICAgICAgICAgICAgLy8gc29tZSBk
YXRhIHBvaW50cyB0aGF0IHNlZW1lZCByZWFzb25hYmxlCi0gICAgICAgICAgICAgICAgbm9UaWNr
cyA9IDAuMyAqIE1hdGguc3FydChheGlzLmRpcmVjdGlvbiA9PSAieCIgPyBjYW52YXNXaWR0aCA6
IGNhbnZhc0hlaWdodCk7Ci0KLSAgICAgICAgICAgIGF4aXMuZGVsdGEgPSAoYXhpcy5tYXggLSBh
eGlzLm1pbikgLyBub1RpY2tzOwotCi0gICAgICAgICAgICAvLyBUaW1lIG1vZGUgd2FzIG1vdmVk
IHRvIGEgcGx1Zy1pbiBpbiAwLjgsIGJ1dCBzaW5jZSBzbyBtYW55IHBlb3BsZSB1c2UgdGhpcwot
ICAgICAgICAgICAgLy8gd2UnbGwgYWRkIGFuIGVzcGVjaWFsbHkgZnJpZW5kbHkgbWFrZSBzdXJl
IHRoZXkgcmVtZW1iZXJlZCB0byBpbmNsdWRlIGl0LgotCi0gICAgICAgICAgICBpZiAob3B0cy5t
b2RlID09ICJ0aW1lIiAmJiAhYXhpcy50aWNrR2VuZXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJUaW1lIG1vZGUgcmVxdWlyZXMgdGhlIGZsb3QudGltZSBwbHVnaW4u
Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZsb3Qgc3VwcG9ydHMgYmFzZS0x
MCBheGVzOyBhbnkgb3RoZXIgbW9kZSBlbHNlIGlzIGhhbmRsZWQgYnkgYSBwbHVnLWluLAotICAg
ICAgICAgICAgLy8gbGlrZSBmbG90LnRpbWUuanMuCi0KLSAgICAgICAgICAgIGlmICghYXhpcy50
aWNrR2VuZXJhdG9yKSB7Ci0KLSAgICAgICAgICAgICAgICBheGlzLnRpY2tHZW5lcmF0b3IgPSBm
dW5jdGlvbiAoYXhpcykgewotICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjID0gb3B0cy50
aWNrRGVjaW1hbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWMgPSAtTWF0aC5mbG9vcihN
YXRoLmxvZyhheGlzLmRlbHRhKSAvIE1hdGguTE4xMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1heERlYyAhPSBudWxsICYmIGRlYyA+IG1heERlYykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlYyA9IG1heERlYzsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgbWFnbiA9IE1hdGgu
cG93KDEwLCAtZGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0gPSBheGlzLmRlbHRh
IC8gbWFnbiwgLy8gbm9ybSBpcyBiZXR3ZWVuIDEuMCBhbmQgMTAuMAotICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgdGlja3MgPSBbXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gTnVtYmVyLk5hTiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXY7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm0gPCAxLjUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9ybSA8IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAyOwot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciAyLjUsIHJlcXVpcmVz
IGFuIGV4dHJhIGRlY2ltYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtID4gMi4y
NSAmJiAobWF4RGVjID09IG51bGwgfHwgZGVjICsgMSA8PSBtYXhEZWMpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZSA9IDIuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArK2RlYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub3JtIDwgNy41KQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZSA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugc2l6ZSA9IDEw
OwotCi0gICAgICAgICAgICAgICAgICAgIHNpemUgKj0gbWFnbjsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAob3B0cy5taW5UaWNrU2l6ZSAhPSBudWxsICYmIHNpemUgPCBvcHRzLm1pblRpY2tT
aXplKQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IG9wdHMubWluVGlja1NpemU7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYXhpcy50aWNrRGVjaW1hbHMgPSBNYXRoLm1heCgwLCBtYXhE
ZWMgIT0gbnVsbCA/IG1heERlYyA6IGRlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGF4aXMudGlj
a1NpemUgPSBvcHRzLnRpY2tTaXplIHx8IHNpemU7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3Rh
cnQgPSBmbG9vckluQmFzZShheGlzLm1pbiwgYXhpcy50aWNrU2l6ZSkKLQotICAgICAgICAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gdjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHYgPSBzdGFydCArIGkgKiBheGlzLnRpY2tTaXplOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdGlja3MucHVzaCh2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsr
aTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAodiA8IGF4aXMubWF4ICYmIHYgIT0gcHJl
dik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrczsKLSAgICAgICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICAgICAgYXhpcy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24gKHZhbHVl
LCBheGlzKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGZhY3RvciA9IGF4aXMudGlja0Rl
Y2ltYWxzID8gTWF0aC5wb3coMTAsIGF4aXMudGlja0RlY2ltYWxzKSA6IDE7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSAiIiArIE1hdGgucm91bmQodmFsdWUgKiBmYWN0b3Ip
IC8gZmFjdG9yOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRpY2tEZWNpbWFscyB3YXMg
c3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB3ZSBoYXZlIGV4YWN0bHkgdGhhdAotICAgICAgICAgICAg
ICAgICAgICAvLyBtdWNoIHByZWNpc2lvbjsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHZhbHVl
J3Mgb3duIHByZWNpc2lvbi4KLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy50aWNrRGVj
aW1hbHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2ltYWwgPSBm
b3JtYXR0ZWQuaW5kZXhPZigiLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNp
c2lvbiA9IGRlY2ltYWwgPT0gLTEgPyAwIDogZm9ybWF0dGVkLmxlbmd0aCAtIGRlY2ltYWwgLSAx
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA8IGF4aXMudGlja0RlY2lt
YWxzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwcmVjaXNpb24gPyBm
b3JtYXR0ZWQgOiBmb3JtYXR0ZWQgKyAiLiIpICsgKCIiICsgZmFjdG9yKS5zdWJzdHIoMSwgYXhp
cy50aWNrRGVjaW1hbHMgLSBwcmVjaXNpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1h
dHRlZDsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoJC5pc0Z1bmN0aW9uKG9wdHMudGlja0Zvcm1hdHRlcikpCi0gICAgICAgICAgICAgICAgYXhp
cy50aWNrRm9ybWF0dGVyID0gZnVuY3Rpb24gKHYsIGF4aXMpIHsgcmV0dXJuICIiICsgb3B0cy50
aWNrRm9ybWF0dGVyKHYsIGF4aXMpOyB9OwotCi0gICAgICAgICAgICBpZiAob3B0cy5hbGlnblRp
Y2tzV2l0aEF4aXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHZhciBvdGhlckF4aXMgPSAo
YXhpcy5kaXJlY3Rpb24gPT0gIngiID8geGF4ZXMgOiB5YXhlcylbb3B0cy5hbGlnblRpY2tzV2l0
aEF4aXMgLSAxXTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJBeGlzICYmIG90aGVyQXhpcy51
c2VkICYmIG90aGVyQXhpcyAhPSBheGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNp
ZGVyIHNuYXBwaW5nIG1pbi9tYXggdG8gb3V0ZXJtb3N0IG5pY2UgdGlja3MKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIG5pY2VUaWNrcyA9IGF4aXMudGlja0dlbmVyYXRvcihheGlzKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5pY2VUaWNrcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3B0cy5taW4gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBheGlzLm1pbiA9IE1hdGgubWluKGF4aXMubWluLCBuaWNlVGlja3NbMF0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wdHMubWF4ID09IG51bGwgJiYgbmljZVRpY2tzLmxlbmd0
aCA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5tYXggPSBNYXRoLm1heChh
eGlzLm1heCwgbmljZVRpY2tzW25pY2VUaWNrcy5sZW5ndGggLSAxXSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBheGlzLnRpY2tHZW5lcmF0b3IgPSBmdW5j
dGlvbiAoYXhpcykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29weSB0aWNrcywgc2Nh
bGVkIHRvIHRoaXMgYXhpcwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gW10s
IHYsIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3RoZXJBeGlz
LnRpY2tzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IChv
dGhlckF4aXMudGlja3NbaV0udiAtIG90aGVyQXhpcy5taW4pIC8gKG90aGVyQXhpcy5tYXggLSBv
dGhlckF4aXMubWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gYXhpcy5taW4g
KyB2ICogKGF4aXMubWF4IC0gYXhpcy5taW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpY2tzLnB1c2godik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGlja3M7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gd2UgbWlnaHQgbmVlZCBhbiBleHRyYSBkZWNpbWFsIHNpbmNlIGZv
cmNlZAotICAgICAgICAgICAgICAgICAgICAvLyB0aWNrcyBkb24ndCBuZWNlc3NhcmlseSBmaXQg
bmF0dXJhbGx5Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXhpcy5tb2RlICYmIG9wdHMudGlj
a0RlY2ltYWxzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYURl
YyA9IE1hdGgubWF4KDAsIC1NYXRoLmZsb29yKE1hdGgubG9nKGF4aXMuZGVsdGEpIC8gTWF0aC5M
TjEwKSArIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzID0gYXhpcy50aWNrR2Vu
ZXJhdG9yKGF4aXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHByb2NlZWQg
aWYgdGhlIHRpY2sgaW50ZXJ2YWwgcm91bmRlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2l0aCBhbiBleHRyYSBkZWNpbWFsIGRvZXNuJ3QgZ2l2ZSB1cyBhCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyB6ZXJvIGF0IGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHMu
bGVuZ3RoID4gMSAmJiAvXC4uKjAkLy50ZXN0KCh0c1sxXSAtIHRzWzBdKS50b0ZpeGVkKGV4dHJh
RGVjKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGlja0RlY2ltYWxzID0g
ZXh0cmFEZWM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzZXRUaWNrcyhheGlzKSB7
Ci0gICAgICAgICAgICB2YXIgb3RpY2tzID0gYXhpcy5vcHRpb25zLnRpY2tzLCB0aWNrcyA9IFtd
OwotICAgICAgICAgICAgaWYgKG90aWNrcyA9PSBudWxsIHx8ICh0eXBlb2Ygb3RpY2tzID09ICJu
dW1iZXIiICYmIG90aWNrcyA+IDApKQotICAgICAgICAgICAgICAgIHRpY2tzID0gYXhpcy50aWNr
R2VuZXJhdG9yKGF4aXMpOwotICAgICAgICAgICAgZWxzZSBpZiAob3RpY2tzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvdGlja3MpKQotICAgICAgICAgICAgICAgICAgICAv
LyBnZW5lcmF0ZSB0aGUgdGlja3MKLSAgICAgICAgICAgICAgICAgICAgdGlja3MgPSBvdGlja3Mo
YXhpcyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0aWNrcyA9
IG90aWNrczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2xlYW4gdXAvbGFiZWxp
ZnkgdGhlIHN1cHBsaWVkIHRpY2tzLCBjb3B5IHRoZW0gb3ZlcgotICAgICAgICAgICAgdmFyIGks
IHY7Ci0gICAgICAgICAgICBheGlzLnRpY2tzID0gW107Ci0gICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgdGlja3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBu
dWxsOwotICAgICAgICAgICAgICAgIHZhciB0ID0gdGlja3NbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiB0ID09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSArdFsw
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHQubGVuZ3RoID4gMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxhYmVsID0gdFsxXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2ID0gK3Q7Ci0gICAgICAgICAgICAgICAgaWYg
KGxhYmVsID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYXhpcy50aWNrRm9y
bWF0dGVyKHYsIGF4aXMpOwotICAgICAgICAgICAgICAgIGlmICghaXNOYU4odikpCi0gICAgICAg
ICAgICAgICAgICAgIGF4aXMudGlja3MucHVzaCh7IHY6IHYsIGxhYmVsOiBsYWJlbCB9KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNuYXBSYW5nZVRvVGlj
a3MoYXhpcywgdGlja3MpIHsKLSAgICAgICAgICAgIGlmIChheGlzLm9wdGlvbnMuYXV0b3NjYWxl
TWFyZ2luICYmIHRpY2tzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAvLyBzbmFwIHRv
IHRpY2tzCi0gICAgICAgICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5taW4gPT0gbnVsbCkKLSAg
ICAgICAgICAgICAgICAgICAgYXhpcy5taW4gPSBNYXRoLm1pbihheGlzLm1pbiwgdGlja3NbMF0u
dik7Ci0gICAgICAgICAgICAgICAgaWYgKGF4aXMub3B0aW9ucy5tYXggPT0gbnVsbCAmJiB0aWNr
cy5sZW5ndGggPiAxKQotICAgICAgICAgICAgICAgICAgICBheGlzLm1heCA9IE1hdGgubWF4KGF4
aXMubWF4LCB0aWNrc1t0aWNrcy5sZW5ndGggLSAxXS52KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXcoKSB7Ci0gICAgICAgICAgICBjdHguY2xlYXJS
ZWN0KDAsIDAsIGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpOwotCi0gICAgICAgICAgICBleGVj
dXRlSG9va3MoaG9va3MuZHJhd0JhY2tncm91bmQsIFtjdHhdKTsKLQotICAgICAgICAgICAgdmFy
IGdyaWQgPSBvcHRpb25zLmdyaWQ7Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgYmFja2dyb3VuZCwg
aWYgYW55Ci0gICAgICAgICAgICBpZiAoZ3JpZC5zaG93ICYmIGdyaWQuYmFja2dyb3VuZENvbG9y
KQotICAgICAgICAgICAgICAgIGRyYXdCYWNrZ3JvdW5kKCk7Ci0KLSAgICAgICAgICAgIGlmIChn
cmlkLnNob3cgJiYgIWdyaWQuYWJvdmVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0dyaWQo
KTsKLSAgICAgICAgICAgICAgICBkcmF3QXhpc0xhYmVscygpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3U2VyaWVzLCBbY3R4LCBzZXJpZXNb
aV1dKTsKLSAgICAgICAgICAgICAgICBkcmF3U2VyaWVzKHNlcmllc1tpXSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGV4ZWN1dGVIb29rcyhob29rcy5kcmF3LCBbY3R4XSk7Ci0KLSAg
ICAgICAgICAgIGlmIChncmlkLnNob3cgJiYgZ3JpZC5hYm92ZURhdGEpIHsKLSAgICAgICAgICAg
ICAgICBkcmF3R3JpZCgpOwotICAgICAgICAgICAgICAgIGRyYXdBeGlzTGFiZWxzKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBleHRyYWN0UmFuZ2UocmFu
Z2VzLCBjb29yZCkgewotICAgICAgICAgICAgdmFyIGF4aXMsIGZyb20sIHRvLCBrZXksIGF4ZXMg
PSBhbGxBeGVzKCk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhlcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIGF4aXMgPSBheGVzW2ldOwotICAgICAgICAgICAg
ICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSBjb29yZCkgewotICAgICAgICAgICAgICAgICAgICBr
ZXkgPSBjb29yZCArIGF4aXMubiArICJheGlzIjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFy
YW5nZXNba2V5XSAmJiBheGlzLm4gPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9
IGNvb3JkICsgImF4aXMiOyAvLyBzdXBwb3J0IHgxYXhpcyBhcyB4YXhpcwotICAgICAgICAgICAg
ICAgICAgICBpZiAocmFuZ2VzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20g
PSByYW5nZXNba2V5XS5mcm9tOwotICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSByYW5nZXNb
a2V5XS50bzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBiYWNrd2FyZHMtY29tcGF0IHN0dWZmIC0gdG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUKLSAgICAg
ICAgICAgIGlmICghcmFuZ2VzW2tleV0pIHsKLSAgICAgICAgICAgICAgICBheGlzID0gY29vcmQg
PT0gIngiID8geGF4ZXNbMF0gOiB5YXhlc1swXTsKLSAgICAgICAgICAgICAgICBmcm9tID0gcmFu
Z2VzW2Nvb3JkICsgIjEiXTsKLSAgICAgICAgICAgICAgICB0byA9IHJhbmdlc1tjb29yZCArICIy
Il07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGF1dG8tcmV2ZXJzZSBhcyBhbiBh
ZGRlZCBib251cwotICAgICAgICAgICAgaWYgKGZyb20gIT0gbnVsbCAmJiB0byAhPSBudWxsICYm
IGZyb20gPiB0bykgewotICAgICAgICAgICAgICAgIHZhciB0bXAgPSBmcm9tOwotICAgICAgICAg
ICAgICAgIGZyb20gPSB0bzsKLSAgICAgICAgICAgICAgICB0byA9IHRtcDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHsgZnJvbTogZnJvbSwgdG86IHRvLCBheGlzOiBheGlz
IH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkcmF3QmFja2dyb3VuZCgpIHsKLSAg
ICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZz
ZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOwotCi0gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0g
Z2V0Q29sb3JPckdyYWRpZW50KG9wdGlvbnMuZ3JpZC5iYWNrZ3JvdW5kQ29sb3IsIHBsb3RIZWln
aHQsIDAsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7Ci0gICAgICAgICAgICBjdHguZmlsbFJl
Y3QoMCwgMCwgcGxvdFdpZHRoLCBwbG90SGVpZ2h0KTsKLSAgICAgICAgICAgIGN0eC5yZXN0b3Jl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkcmF3R3JpZCgpIHsKLSAgICAgICAg
ICAgIHZhciBpLCBheGVzLCBidywgYmM7Ci0KLSAgICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAg
ICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOwot
Ci0gICAgICAgICAgICAvLyBkcmF3IG1hcmtpbmdzCi0gICAgICAgICAgICB2YXIgbWFya2luZ3Mg
PSBvcHRpb25zLmdyaWQubWFya2luZ3M7Ci0gICAgICAgICAgICBpZiAobWFya2luZ3MpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG1hcmtpbmdzKSkgewotICAgICAgICAgICAg
ICAgICAgICBheGVzID0gcGxvdC5nZXRBeGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHht
aW4gZXRjLiBpcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdG8gYmUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmVtb3ZlZCBpbiB0aGUgZnV0dXJlCi0gICAgICAgICAgICAgICAgICAgIGF4ZXMu
eG1pbiA9IGF4ZXMueGF4aXMubWluOwotICAgICAgICAgICAgICAgICAgICBheGVzLnhtYXggPSBh
eGVzLnhheGlzLm1heDsKLSAgICAgICAgICAgICAgICAgICAgYXhlcy55bWluID0gYXhlcy55YXhp
cy5taW47Ci0gICAgICAgICAgICAgICAgICAgIGF4ZXMueW1heCA9IGF4ZXMueWF4aXMubWF4Owot
Ci0gICAgICAgICAgICAgICAgICAgIG1hcmtpbmdzID0gbWFya2luZ3MoYXhlcyk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1hcmtpbmdzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtID0gbWFya2luZ3NbaV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UgPSBleHRyYWN0UmFuZ2UobSwgIngiKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHlyYW5nZSA9IGV4dHJhY3RSYW5nZShtLCAieSIpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGZpbGwgaW4gbWlzc2luZwotICAgICAgICAgICAgICAgICAg
ICBpZiAoeHJhbmdlLmZyb20gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHhyYW5n
ZS5mcm9tID0geHJhbmdlLmF4aXMubWluOwotICAgICAgICAgICAgICAgICAgICBpZiAoeHJhbmdl
LnRvID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UudG8gPSB4cmFuZ2Uu
YXhpcy5tYXg7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5cmFuZ2UuZnJvbSA9PSBudWxsKQot
ICAgICAgICAgICAgICAgICAgICAgICAgeXJhbmdlLmZyb20gPSB5cmFuZ2UuYXhpcy5taW47Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5cmFuZ2UudG8gPT0gbnVsbCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHlyYW5nZS50byA9IHlyYW5nZS5heGlzLm1heDsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBjbGlwCi0gICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UudG8gPCB4cmFuZ2Uu
YXhpcy5taW4gfHwgeHJhbmdlLmZyb20gPiB4cmFuZ2UuYXhpcy5tYXggfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHlyYW5nZS50byA8IHlyYW5nZS5heGlzLm1pbiB8fCB5cmFuZ2UuZnJvbSA+
IHlyYW5nZS5heGlzLm1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAgICAgICAgIHhyYW5nZS5mcm9tID0gTWF0aC5tYXgoeHJhbmdlLmZyb20sIHhy
YW5nZS5heGlzLm1pbik7Ci0gICAgICAgICAgICAgICAgICAgIHhyYW5nZS50byA9IE1hdGgubWlu
KHhyYW5nZS50bywgeHJhbmdlLmF4aXMubWF4KTsKLSAgICAgICAgICAgICAgICAgICAgeXJhbmdl
LmZyb20gPSBNYXRoLm1heCh5cmFuZ2UuZnJvbSwgeXJhbmdlLmF4aXMubWluKTsKLSAgICAgICAg
ICAgICAgICAgICAgeXJhbmdlLnRvID0gTWF0aC5taW4oeXJhbmdlLnRvLCB5cmFuZ2UuYXhpcy5t
YXgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh4cmFuZ2UuZnJvbSA9PSB4cmFuZ2UudG8g
JiYgeXJhbmdlLmZyb20gPT0geXJhbmdlLnRvKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBkcmF3Ci0gICAgICAgICAgICAg
ICAgICAgIHhyYW5nZS5mcm9tID0geHJhbmdlLmF4aXMucDJjKHhyYW5nZS5mcm9tKTsKLSAgICAg
ICAgICAgICAgICAgICAgeHJhbmdlLnRvID0geHJhbmdlLmF4aXMucDJjKHhyYW5nZS50byk7Ci0g
ICAgICAgICAgICAgICAgICAgIHlyYW5nZS5mcm9tID0geXJhbmdlLmF4aXMucDJjKHlyYW5nZS5m
cm9tKTsKLSAgICAgICAgICAgICAgICAgICAgeXJhbmdlLnRvID0geXJhbmdlLmF4aXMucDJjKHly
YW5nZS50byk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHhyYW5nZS5mcm9tID09IHhyYW5n
ZS50byB8fCB5cmFuZ2UuZnJvbSA9PSB5cmFuZ2UudG8pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGRyYXcgbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gbS5jb2xvciB8fCBv
cHRpb25zLmdyaWQubWFya2luZ3NDb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5s
aW5lV2lkdGggPSBtLmxpbmVXaWR0aCB8fCBvcHRpb25zLmdyaWQubWFya2luZ3NMaW5lV2lkdGg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHhyYW5nZS5mcm9tLCB5cmFuZ2Uu
ZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHhyYW5nZS50bywgeXJh
bmdlLnRvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGZpbGwgYXJlYQotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxT
dHlsZSA9IG0uY29sb3IgfHwgb3B0aW9ucy5ncmlkLm1hcmtpbmdzQ29sb3I7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoeHJhbmdlLmZyb20sIHlyYW5nZS50bywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmFuZ2UudG8gLSB4cmFuZ2UuZnJvbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cmFuZ2UuZnJvbSAtIHlyYW5n
ZS50byk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgdGhlIHRpY2tzCi0gICAgICAgICAgICBheGVz
ID0gYWxsQXhlcygpOwotICAgICAgICAgICAgYncgPSBvcHRpb25zLmdyaWQuYm9yZGVyV2lkdGg7
Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXhlcy5sZW5ndGg7ICsraikgewot
ICAgICAgICAgICAgICAgIHZhciBheGlzID0gYXhlc1tqXSwgYm94ID0gYXhpcy5ib3gsCi0gICAg
ICAgICAgICAgICAgICAgIHQgPSBheGlzLnRpY2tMZW5ndGgsIHgsIHksIHhvZmYsIHlvZmY7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFheGlzLnNob3cgfHwgYXhpcy50aWNrcy5sZW5ndGggPT0gMCkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBjdHguc3Ry
b2tlU3R5bGUgPSBheGlzLm9wdGlvbnMudGlja0NvbG9yIHx8ICQuY29sb3IucGFyc2UoYXhpcy5v
cHRpb25zLmNvbG9yKS5zY2FsZSgnYScsIDAuMjIpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgY3R4LmxpbmVXaWR0aCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBlZGdl
cwotICAgICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ID09ICJmdWxsIikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAoYXhpcy5wb3NpdGlvbiA9PSAidG9wIiA/IDAg
OiBwbG90SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgeSA9IGJveC50b3AgLSBwbG90T2Zmc2V0LnRvcCArIChheGlzLnBvc2l0aW9uID09
ICJ0b3AiID8gYm94LmhlaWdodCA6IDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh0ID09ICJmdWxsIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSAoYXhpcy5w
b3NpdGlvbiA9PSAibGVmdCIgPyAwIDogcGxvdFdpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGJveC5sZWZ0IC0gcGxvdE9mZnNldC5s
ZWZ0ICsgKGF4aXMucG9zaXRpb24gPT0gImxlZnQiID8gYm94LndpZHRoIDogMCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gZHJhdyB0aWNrIGJhcgotICAgICAgICAg
ICAgICAgIGlmICghYXhpcy5pbm5lcm1vc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LmJl
Z2luUGF0aCgpOwotICAgICAgICAgICAgICAgICAgICB4b2ZmID0geW9mZiA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChheGlzLmRpcmVjdGlvbiA9PSAieCIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB4b2ZmID0gcGxvdFdpZHRoOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB5b2ZmID0gcGxvdEhlaWdodDsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoY3R4LmxpbmVXaWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4
ID0gTWF0aC5mbG9vcih4KSArIDAuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBNYXRo
LmZsb29yKHkpICsgMC41OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY3R4Lm1vdmVUbyh4LCB5KTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4
ICsgeG9mZiwgeSArIHlvZmYpOwotICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gZHJhdyB0aWNrcwotICAgICAg
ICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgYXhpcy50aWNrcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdiA9
IGF4aXMudGlja3NbaV0udjsKLQotICAgICAgICAgICAgICAgICAgICB4b2ZmID0geW9mZiA9IDA7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCBheGlzLm1pbiB8fCB2ID4gYXhpcy5tYXgK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhvc2UgbHlpbmcgb24gdGhlIGF4ZXMg
aWYgd2UgZ290IGEgYm9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAodCA9PSAiZnVs
bCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHR5cGVvZiBidyA9PSAib2JqZWN0
IiAmJiBid1theGlzLnBvc2l0aW9uXSA+IDApIHx8IGJ3ID4gMCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAodiA9PSBheGlzLm1pbiB8fCB2ID09IGF4aXMubWF4KSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXhp
cy5kaXJlY3Rpb24gPT0gIngiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXhpcy5w
MmModik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5b2ZmID0gdCA9PSAiZnVsbCIgPyAtcGxv
dEhlaWdodCA6IHQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheGlzLnBvc2l0aW9u
ID09ICJ0b3AiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvZmYgPSAteW9mZjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHkgPSBheGlzLnAyYyh2KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHhvZmYgPSB0ID09ICJmdWxsIiA/IC1wbG90V2lkdGggOiB0OwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXhpcy5wb3NpdGlvbiA9PSAibGVmdCIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeG9mZiA9IC14b2ZmOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN0eC5saW5lV2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGF4aXMuZGlyZWN0aW9uID09ICJ4IikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4ID0gTWF0aC5mbG9vcih4KSArIDAuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTWF0aC5mbG9vcih5KSArIDAuNTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8o
eCwgeSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHhvZmYsIHkgKyB5b2Zm
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0g
ICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgLy8gZHJhdyBib3JkZXIKLSAgICAgICAgICAg
IGlmIChidykgewotICAgICAgICAgICAgICAgIC8vIElmIGVpdGhlciBib3JkZXJXaWR0aCBvciBi
b3JkZXJDb2xvciBpcyBhbiBvYmplY3QsIHRoZW4gZHJhdyB0aGUgYm9yZGVyCi0gICAgICAgICAg
ICAgICAgLy8gbGluZSBieSBsaW5lIGluc3RlYWQgb2YgYXMgb25lIHJlY3RhbmdsZQotICAgICAg
ICAgICAgICAgIGJjID0gb3B0aW9ucy5ncmlkLmJvcmRlckNvbG9yOwotICAgICAgICAgICAgICAg
IGlmKHR5cGVvZiBidyA9PSAib2JqZWN0IiB8fCB0eXBlb2YgYmMgPT0gIm9iamVjdCIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidyAhPT0gIm9iamVjdCIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJ3ID0ge3RvcDogYncsIHJpZ2h0OiBidywgYm90dG9tOiBidywgbGVm
dDogYnd9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0
eXBlb2YgYmMgIT09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiYyA9IHt0
b3A6IGJjLCByaWdodDogYmMsIGJvdHRvbTogYmMsIGxlZnQ6IGJjfTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChidy50b3AgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBiYy50b3A7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjdHgubGluZVdpZHRoID0gYncudG9wOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm1vdmVUbygw
IC0gYncubGVmdCwgMCAtIGJ3LnRvcC8yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5s
aW5lVG8ocGxvdFdpZHRoLCAwIC0gYncudG9wLzIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGJ3LnJpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9r
ZVN0eWxlID0gYmMucmlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRo
ID0gYncucmlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHBsb3RXaWR0aCArIGJ3LnJpZ2h0IC8g
MiwgMCAtIGJ3LnRvcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHBsb3RX
aWR0aCArIGJ3LnJpZ2h0IC8gMiwgcGxvdEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoYncuYm90dG9tID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0
cm9rZVN0eWxlID0gYmMuYm90dG9tOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVX
aWR0aCA9IGJ3LmJvdHRvbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8ocGxvdFdpZHRoICsgYncucmln
aHQsIHBsb3RIZWlnaHQgKyBidy5ib3R0b20gLyAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5saW5lVG8oMCwgcGxvdEhlaWdodCArIGJ3LmJvdHRvbSAvIDIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGJ3LmxlZnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdHguc3Ryb2tlU3R5bGUgPSBiYy5sZWZ0OwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4
LmxpbmVXaWR0aCA9IGJ3LmxlZnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5Q
YXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKDAgLSBidy5sZWZ0LzIs
IHBsb3RIZWlnaHQgKyBidy5ib3R0b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmxp
bmVUbygwLSBidy5sZWZ0LzIsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9r
ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gYnc7Ci0g
ICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IG9wdGlvbnMuZ3JpZC5ib3JkZXJD
b2xvcjsKLSAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVJlY3QoLWJ3LzIsIC1idy8yLCBw
bG90V2lkdGggKyBidywgcGxvdEhlaWdodCArIGJ3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBkcmF3QXhpc0xhYmVscygpIHsKLSAgICAgICAgICAgIGN0eC5zYXZlKCk7
Ci0KLSAgICAgICAgICAgICQuZWFjaChhbGxBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFheGlzLnNob3cgfHwgYXhpcy50aWNrcy5sZW5ndGggPT0gMCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgdmFyIGJveCA9
IGF4aXMuYm94LCBmID0gYXhpcy5mb250OwotICAgICAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVy
LmFwcGVuZCgnPGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowLjEwO2JhY2tn
cm91bmQtY29sb3I6cmVkO2xlZnQ6JyArIGJveC5sZWZ0ICsgJ3B4O3RvcDonICsgYm94LnRvcCAr
ICdweDt3aWR0aDonICsgYm94LndpZHRoICsgICdweDtoZWlnaHQ6JyArIGJveC5oZWlnaHQgKyAn
cHgiPjwvZGl2PicpIC8vIGRlYnVnCi0KLSAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0g
YXhpcy5vcHRpb25zLmNvbG9yOwotICAgICAgICAgICAgICAgIC8vIEltcG9ydGFudDogRG9uJ3Qg
dXNlIHF1b3RlcyBhcm91bmQgYXhpcy5mb250LmZhbWlseSEgSnVzdCBhcm91bmQgc2luZ2xlCi0g
ICAgICAgICAgICAgICAgLy8gZm9udCBuYW1lcyBsaWtlICdUaW1lcyBOZXcgUm9tYW4nIHRoYXQg
aGF2ZSBhIHNwYWNlIG9yIHNwZWNpYWwgY2hhcmFjdGVyIGluIGl0LgotICAgICAgICAgICAgICAg
IGN0eC5mb250ID0gZi5zdHlsZSArICIgIiArIGYudmFyaWFudCArICIgIiArIGYud2VpZ2h0ICsg
IiAiICsgZi5zaXplICsgInB4ICIgKyBmLmZhbWlseTsKLSAgICAgICAgICAgICAgICBjdHgudGV4
dEFsaWduID0gInN0YXJ0IjsKLSAgICAgICAgICAgICAgICAvLyBtaWRkbGUgYWxpZ24gdGhlIGxh
YmVscyAtIHRvcCB3b3VsZCBiZSBtb3JlCi0gICAgICAgICAgICAgICAgLy8gbmF0dXJhbCwgYnV0
IGJyb3dzZXJzIGNhbiBkaWZmZXIgYSBwaXhlbCBvciB0d28gaW4KLSAgICAgICAgICAgICAgICAv
LyB3aGVyZSB0aGV5IGNvbnNpZGVyIHRoZSB0b3AgdG8gYmUsIHNvIGluc3RlYWQgd2UKLSAgICAg
ICAgICAgICAgICAvLyBtaWRkbGUgYWxpZ24gdG8gbWluaW1pemUgdmFyaWF0aW9uIGJldHdlZW4g
YnJvd3NlcnMKLSAgICAgICAgICAgICAgICAvLyBhbmQgY29tcGVuc2F0ZSB3aGVuIGNhbGN1bGF0
aW5nIHRoZSBjb29yZGluYXRlcwotICAgICAgICAgICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAi
bWlkZGxlIjsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhpcy50aWNr
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgdGljayA9IGF4aXMudGlj
a3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGljay5sYWJlbCB8fCB0aWNrLnYgPCBh
eGlzLm1pbiB8fCB0aWNrLnYgPiBheGlzLm1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciB4LCB5LCBvZmZzZXQgPSAwLCBsaW5l
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpY2subGluZXMubGVu
Z3RoOyArK2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0aWNrLmxpbmVzW2td
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gIngiKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHBsb3RPZmZzZXQubGVmdCArIGF4aXMu
cDJjKHRpY2sudikgLSBsaW5lLndpZHRoLzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGF4aXMucG9zaXRpb24gPT0gImJvdHRvbSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHkgPSBib3gudG9wICsgYm94LnBhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYm94LnRvcCAr
IGJveC5oZWlnaHQgLSBib3gucGFkZGluZyAtIHRpY2suaGVpZ2h0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeSA9IHBsb3RPZmZzZXQudG9wICsgYXhpcy5wMmModGljay52KSAtIHRp
Y2suaGVpZ2h0LzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXMucG9zaXRp
b24gPT0gImxlZnQiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYm94Lmxl
ZnQgKyBib3gud2lkdGggLSBib3gucGFkZGluZyAtIGxpbmUud2lkdGg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0g
Ym94LmxlZnQgKyBib3gucGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3VudCBmb3IgbWlkZGxlIGFsaWduaW5nIGFuZCBs
aW5lIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBsaW5lLmhlaWdodC8yICsg
b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxpbmUuaGVpZ2h0Owot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEod2luZG93Lm9wZXJhICYmIHdpbmRvdy5v
cGVyYS52ZXJzaW9uKCkuc3BsaXQoJy4nKVswXSA8IDEyKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBMRUdBQ1kgQlJPV1NFUiBGSVgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBRkZFQ1RTOiBPcGVyYSA8IDEyLjAwCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByb3VuZCB0aGUgY29vcmRpbmF0ZXMgc2luY2UgT3BlcmEKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc3dpdGNoZXMgdG8gbW9yZSB1Z2x5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIChwcm9iYWJseSBub24taGlu
dGVkKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHkgY29v
cmRpbmF0ZXMgc2luY2UgaXQgc2VlbXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
byBiZSBvZmYgcHJldHR5IGNvbnNpc3RlbnRseSBjb21wYXJlZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRvIHRoZSBvdGhlciBicm93c2VycwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHggPSBNYXRoLmZsb29yKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkg
PSBNYXRoLmNlaWwoeSAtIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGxpbmUudGV4dCwgeCwgeSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdT
ZXJpZXMoc2VyaWVzKSB7Ci0gICAgICAgICAgICBpZiAoc2VyaWVzLmxpbmVzLnNob3cpCi0gICAg
ICAgICAgICAgICAgZHJhd1Nlcmllc0xpbmVzKHNlcmllcyk7Ci0gICAgICAgICAgICBpZiAoc2Vy
aWVzLmJhcnMuc2hvdykKLSAgICAgICAgICAgICAgICBkcmF3U2VyaWVzQmFycyhzZXJpZXMpOwot
ICAgICAgICAgICAgaWYgKHNlcmllcy5wb2ludHMuc2hvdykKLSAgICAgICAgICAgICAgICBkcmF3
U2VyaWVzUG9pbnRzKHNlcmllcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkcmF3
U2VyaWVzTGluZXMoc2VyaWVzKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBwbG90TGluZShkYXRh
cG9pbnRzLCB4b2Zmc2V0LCB5b2Zmc2V0LCBheGlzeCwgYXhpc3kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcG9pbnRzID0gZGF0YXBvaW50cy5wb2ludHMsCi0gICAgICAgICAgICAgICAgICAgIHBz
ID0gZGF0YXBvaW50cy5wb2ludHNpemUsCi0gICAgICAgICAgICAgICAgICAgIHByZXZ4ID0gbnVs
bCwgcHJldnkgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSBwczsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gcHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gcG9pbnRzW2kgLSBwc10sIHkxID0gcG9p
bnRzW2kgLSBwcyArIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBwb2ludHNbaV0s
IHkyID0gcG9pbnRzW2kgKyAxXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoeDEgPT0gbnVs
bCB8fCB4MiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHltaW4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHkxIDw9IHkyICYmIHkxIDwgYXhpc3kubWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeTIgPCBheGlzeS5taW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7ICAgLy8gbGluZSBzZWdtZW50IGlzIG91dHNpZGUKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNvbXB1dGUgbmV3IGludGVyc2VjdGlvbiBwb2ludAotICAgICAgICAgICAgICAgICAgICAg
ICAgeDEgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB5MSA9IGF4aXN5Lm1pbjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MiA8PSB5MSAmJiB5MiA8IGF4aXN5
Lm1pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkxIDwgYXhpc3kubWluKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgeDIgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGF4aXN5Lm1pbjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB5bWF4Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh5MSA+PSB5MiAmJiB5MSA+IGF4aXN5Lm1heCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHkyID4gYXhpc3kubWF4KQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSAoYXhpc3kubWF4IC0g
eTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB5MSA9IGF4aXN5Lm1heDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICh5MiA+PSB5MSAmJiB5MiA+IGF4aXN5Lm1heCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHkxID4gYXhpc3kubWF4KQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSAoYXhpc3kubWF4IC0g
eTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsgeDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB5MiA9IGF4aXN5Lm1heDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGNsaXAgd2l0aCB4bWluCi0gICAgICAgICAgICAgICAgICAgIGlmICh4MSA8PSB4
MiAmJiB4MSA8IGF4aXN4Lm1pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyIDwg
YXhpc3gubWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgeTEgPSAoYXhpc3gubWluIC0geDEpIC8gKHgyIC0geDEpICogKHky
IC0geTEpICsgeTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IGF4aXN4Lm1pbjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4MiA8PSB4
MSAmJiB4MiA8IGF4aXN4Lm1pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgxIDwg
YXhpc3gubWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgeTIgPSAoYXhpc3gubWluIC0geDEpIC8gKHgyIC0geDEpICogKHky
IC0geTEpICsgeTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGF4aXN4Lm1pbjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgd2l0aCB4
bWF4Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4MSA+PSB4MiAmJiB4MSA+IGF4aXN4Lm1heCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyID4gYXhpc3gubWF4KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgeTEg
PSAoYXhpc3gubWF4IC0geDEpIC8gKHgyIC0geDEpICogKHkyIC0geTEpICsgeTE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB4MSA9IGF4aXN4Lm1heDsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh4MiA+PSB4MSAmJiB4MiA+IGF4aXN4Lm1heCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgxID4gYXhpc3gubWF4KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgeTIg
PSAoYXhpc3gubWF4IC0geDEpIC8gKHgyIC0geDEpICogKHkyIC0geTEpICsgeTE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB4MiA9IGF4aXN4Lm1heDsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4MSAhPSBwcmV2eCB8fCB5MSAhPSBwcmV2eSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oYXhpc3gucDJjKHgxKSArIHhvZmZzZXQs
IGF4aXN5LnAyYyh5MSkgKyB5b2Zmc2V0KTsKLQotICAgICAgICAgICAgICAgICAgICBwcmV2eCA9
IHgyOwotICAgICAgICAgICAgICAgICAgICBwcmV2eSA9IHkyOwotICAgICAgICAgICAgICAgICAg
ICBjdHgubGluZVRvKGF4aXN4LnAyYyh4MikgKyB4b2Zmc2V0LCBheGlzeS5wMmMoeTIpICsgeW9m
ZnNldCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gcGxvdExpbmVBcmVhKGRhdGFw
b2ludHMsIGF4aXN4LCBheGlzeSkgewotICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBkYXRh
cG9pbnRzLnBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgcHMgPSBkYXRhcG9pbnRzLnBvaW50
c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgYm90dG9tID0gTWF0aC5taW4oTWF0aC5tYXgoMCwg
YXhpc3kubWluKSwgYXhpc3kubWF4KSwKLSAgICAgICAgICAgICAgICAgICAgaSA9IDAsIHRvcCwg
YXJlYU9wZW4gPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgeXBvcyA9IDEsIHNlZ21lbnRT
dGFydCA9IDAsIHNlZ21lbnRFbmQgPSAwOwotCi0gICAgICAgICAgICAgICAgLy8gd2UgcHJvY2Vz
cyBlYWNoIHNlZ21lbnQgaW4gdHdvIHR1cm5zLCBmaXJzdCBmb3J3YXJkCi0gICAgICAgICAgICAg
ICAgLy8gZGlyZWN0aW9uIHRvIHNrZXRjaCBvdXQgdG9wLCB0aGVuIG9uY2Ugd2UgaGl0IHRoZQot
ICAgICAgICAgICAgICAgIC8vIGVuZCB3ZSBnbyBiYWNrd2FyZHMgdG8gc2tldGNoIHRoZSBib3R0
b20KLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAocHMgPiAwICYmIGkgPiBwb2ludHMubGVuZ3RoICsgcHMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpICs9IHBzOyAvLyBwcyBpcyBuZWdh
dGl2ZSBpZiBnb2luZyBiYWNrd2FyZHMKLQotICAgICAgICAgICAgICAgICAgICB2YXIgeDEgPSBw
b2ludHNbaSAtIHBzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gcG9pbnRzW2kgLSBw
cyArIHlwb3NdLAotICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSBwb2ludHNbaV0sIHkyID0g
cG9pbnRzW2kgKyB5cG9zXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXJlYU9wZW4pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcyA+IDAgJiYgeDEgIT0gbnVsbCAmJiB4MiA9
PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdHVybmluZyBwb2lu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRFbmQgPSBpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBzID0gLXBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHlwb3MgPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHMgPCAw
ICYmIGkgPT0gc2VnbWVudFN0YXJ0ICsgcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkb25lIHdpdGggdGhlIHJldmVyc2Ugc3dlZXAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdHguZmlsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFPcGVuID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMgPSAtcHM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeXBvcyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IHNlZ21lbnRTdGFydCA9IHNlZ21lbnRFbmQgKyBwczsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh4MSA9PSBudWxsIHx8IHgyID09
IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBjbGlwIHggdmFsdWVzCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3
aXRoIHhtaW4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHgxIDw9IHgyICYmIHgxIDwgYXhpc3gu
bWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDIgPCBheGlzeC5taW4pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB5MSA9IChheGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHgxID0gYXhpc3gubWluOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHgyIDw9IHgxICYmIHgyIDwgYXhpc3gu
bWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeDEgPCBheGlzeC5taW4pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB5MiA9IChheGlzeC5taW4gLSB4MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHgyID0gYXhpc3gubWluOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY2xpcCB3aXRoIHhtYXgKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHgxID49IHgyICYmIHgxID4gYXhpc3gubWF4KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeDIgPiBheGlzeC5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IChheGlzeC5tYXggLSB4
MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHgxID0gYXhpc3gubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHgyID49IHgxICYmIHgyID4gYXhpc3gubWF4KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeDEgPiBheGlzeC5tYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IChheGlzeC5tYXggLSB4
MSkgLyAoeDIgLSB4MSkgKiAoeTIgLSB5MSkgKyB5MTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHgyID0gYXhpc3gubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhcmVhT3BlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlbiBh
cmVhCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjdHgubW92ZVRvKGF4aXN4LnAyYyh4MSksIGF4aXN5LnAyYyhib3R0b20p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZWFPcGVuID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyBmaXJzdCBjaGVjayB0aGUg
Y2FzZSB3aGVyZSBib3RoIGlzIG91dHNpZGUKLSAgICAgICAgICAgICAgICAgICAgaWYgKHkxID49
IGF4aXN5Lm1heCAmJiB5MiA+PSBheGlzeS5tYXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGN0eC5saW5lVG8oYXhpc3gucDJjKHgxKSwgYXhpc3kucDJjKGF4aXN5Lm1heCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDIpLCBheGlzeS5wMmMoYXhp
c3kubWF4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MSA8PSBheGlzeS5taW4g
JiYgeTIgPD0gYXhpc3kubWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRv
KGF4aXN4LnAyYyh4MSksIGF4aXN5LnAyYyhheGlzeS5taW4pKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgyKSwgYXhpc3kucDJjKGF4aXN5Lm1pbikpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGl0J3MgYSBiaXQgbW9yZSBjb21wbGljYXRl
ZCwgdGhlcmUgbWlnaHQKLSAgICAgICAgICAgICAgICAgICAgLy8gYmUgYSBmbGF0IG1heGVkIG91
dCByZWN0YW5nbGUgZmlyc3QsIHRoZW4gYQotICAgICAgICAgICAgICAgICAgICAvLyB0cmlhbmd1
bGFyIGN1dG91dCBvciByZXZlcnNlOyB0byBmaW5kIHRoZXNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgeCB2YWx1ZXMKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHgxb2xkID0geDEsIHgyb2xkID0geDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Y2xpcCB0aGUgeSB2YWx1ZXMsIHdpdGhvdXQgc2hvcnRjdXR0aW5nLCB3ZQotICAgICAgICAgICAg
ICAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCBjYXNlcyBpbiB0dXJuCi0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2xpcCB3aXRoIHltaW4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHkxIDw9IHky
ICYmIHkxIDwgYXhpc3kubWluICYmIHkyID49IGF4aXN5Lm1pbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgeDEgPSAoYXhpc3kubWluIC0geTEpIC8gKHkyIC0geTEpICogKHgyIC0geDEpICsg
eDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IGF4aXN5Lm1pbjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh5MiA8PSB5MSAmJiB5MiA8
IGF4aXN5Lm1pbiAmJiB5MSA+PSBheGlzeS5taW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHgyID0gKGF4aXN5Lm1pbiAtIHkxKSAvICh5MiAtIHkxKSAqICh4MiAtIHgxKSArIHgxOwotICAg
ICAgICAgICAgICAgICAgICAgICAgeTIgPSBheGlzeS5taW47Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIHdpdGggeW1heAotICAgICAgICAgICAg
ICAgICAgICBpZiAoeTEgPj0geTIgJiYgeTEgPiBheGlzeS5tYXggJiYgeTIgPD0gYXhpc3kubWF4
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IChheGlzeS5tYXggLSB5MSkgLyAoeTIg
LSB5MSkgKiAoeDIgLSB4MSkgKyB4MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gYXhp
c3kubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHkyID49IHkxICYmIHkyID4gYXhpc3kubWF4ICYmIHkxIDw9IGF4aXN5Lm1heCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgeDIgPSAoYXhpc3kubWF4IC0geTEpIC8gKHkyIC0geTEpICog
KHgyIC0geDEpICsgeDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGF4aXN5Lm1heDsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB4
IHZhbHVlIHdhcyBjaGFuZ2VkIHdlIGdvdCBhIHJlY3RhbmdsZQotICAgICAgICAgICAgICAgICAg
ICAvLyB0byBmaWxsCi0gICAgICAgICAgICAgICAgICAgIGlmICh4MSAhPSB4MW9sZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDFvbGQpLCBheGlzeS5w
MmMoeTEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGdvZXMgdG8gKHgxLCB5MSks
IGJ1dCB3ZSBmaWxsIHRoYXQgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGZpbGwgdHJpYW5ndWxhciBzZWN0aW9uLCB0aGlzIHNvbWV0aW1lcyBy
ZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gcmVkdW5kYW50IHBvaW50cyBpZiAoeDEs
IHkxKSBoYXNuJ3QgY2hhbmdlZAotICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHByZXZpb3Vz
IGxpbmUgdG8sIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGN0
eC5saW5lVG8oYXhpc3gucDJjKHgxKSwgYXhpc3kucDJjKHkxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGN0eC5saW5lVG8oYXhpc3gucDJjKHgyKSwgYXhpc3kucDJjKHkyKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gZmlsbCB0aGUgb3RoZXIgcmVjdGFuZ2xlIGlmIGl0J3MgdGhlcmUKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHgyICE9IHgyb2xkKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjdHgubGluZVRvKGF4aXN4LnAyYyh4MiksIGF4aXN5LnAyYyh5MikpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhheGlzeC5wMmMoeDJvbGQpLCBheGlzeS5wMmMoeTIp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgIGN0eC50cmFuc2xhdGUo
cGxvdE9mZnNldC5sZWZ0LCBwbG90T2Zmc2V0LnRvcCk7Ci0gICAgICAgICAgICBjdHgubGluZUpv
aW4gPSAicm91bmQiOwotCi0gICAgICAgICAgICB2YXIgbHcgPSBzZXJpZXMubGluZXMubGluZVdp
ZHRoLAotICAgICAgICAgICAgICAgIHN3ID0gc2VyaWVzLnNoYWRvd1NpemU7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogY29uc2lkZXIgYW5vdGhlciBmb3JtIG9mIHNoYWRvdyB3aGVuIGZpbGxpbmcg
aXMgdHVybmVkIG9uCi0gICAgICAgICAgICBpZiAobHcgPiAwICYmIHN3ID4gMCkgewotICAgICAg
ICAgICAgICAgIC8vIGRyYXcgc2hhZG93IGFzIGEgdGhpY2sgYW5kIHRoaW4gbGluZSB3aXRoIHRy
YW5zcGFyZW5jeQotICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBzdzsKLSAgICAgICAg
ICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjEpIjsKLSAgICAgICAgICAg
ICAgICAvLyBwb3NpdGlvbiBzaGFkb3cgYXQgYW5nbGUgZnJvbSB0aGUgbWlkIG9mIGxpbmUKLSAg
ICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLlBJLzE4OwotICAgICAgICAgICAgICAgIHBs
b3RMaW5lKHNlcmllcy5kYXRhcG9pbnRzLCBNYXRoLnNpbihhbmdsZSkgKiAobHcvMiArIHN3LzIp
LCBNYXRoLmNvcyhhbmdsZSkgKiAobHcvMiArIHN3LzIpLCBzZXJpZXMueGF4aXMsIHNlcmllcy55
YXhpcyk7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHN3LzI7Ci0gICAgICAgICAg
ICAgICAgcGxvdExpbmUoc2VyaWVzLmRhdGFwb2ludHMsIE1hdGguc2luKGFuZ2xlKSAqIChsdy8y
ICsgc3cvNCksIE1hdGguY29zKGFuZ2xlKSAqIChsdy8yICsgc3cvNCksIHNlcmllcy54YXhpcywg
c2VyaWVzLnlheGlzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LmxpbmVXaWR0
aCA9IGx3OwotICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc2VyaWVzLmNvbG9yOwotICAg
ICAgICAgICAgdmFyIGZpbGxTdHlsZSA9IGdldEZpbGxTdHlsZShzZXJpZXMubGluZXMsIHNlcmll
cy5jb2xvciwgMCwgcGxvdEhlaWdodCk7Ci0gICAgICAgICAgICBpZiAoZmlsbFN0eWxlKSB7Ci0g
ICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTsKLSAgICAgICAgICAgICAg
ICBwbG90TGluZUFyZWEoc2VyaWVzLmRhdGFwb2ludHMsIHNlcmllcy54YXhpcywgc2VyaWVzLnlh
eGlzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGx3ID4gMCkKLSAgICAgICAg
ICAgICAgICBwbG90TGluZShzZXJpZXMuZGF0YXBvaW50cywgMCwgMCwgc2VyaWVzLnhheGlzLCBz
ZXJpZXMueWF4aXMpOwotICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGRyYXdTZXJpZXNQb2ludHMoc2VyaWVzKSB7Ci0gICAgICAgICAgICBm
dW5jdGlvbiBwbG90UG9pbnRzKGRhdGFwb2ludHMsIHJhZGl1cywgZmlsbFN0eWxlLCBvZmZzZXQs
IHNoYWRvdywgYXhpc3gsIGF4aXN5LCBzeW1ib2wpIHsKLSAgICAgICAgICAgICAgICB2YXIgcG9p
bnRzID0gZGF0YXBvaW50cy5wb2ludHMsIHBzID0gZGF0YXBvaW50cy5wb2ludHNpemU7Ci0KLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gcHMp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBwb2ludHNbaV0sIHkgPSBwb2ludHNbaSAr
IDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBudWxsIHx8IHggPCBheGlzeC5taW4g
fHwgeCA+IGF4aXN4Lm1heCB8fCB5IDwgYXhpc3kubWluIHx8IHkgPiBheGlzeS5tYXgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICBjdHgu
YmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBheGlzeC5wMmMoeCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHkgPSBheGlzeS5wMmMoeSkgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChzeW1ib2wgPT0gImNpcmNsZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
dHguYXJjKHgsIHksIHJhZGl1cywgMCwgc2hhZG93ID8gTWF0aC5QSSA6IE1hdGguUEkgKiAyLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN5bWJvbChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KTsKLSAgICAgICAgICAgICAgICAgICAg
Y3R4LmNsb3NlUGF0aCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3R5bGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgICAgICBjdHgudHJh
bnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOwotCi0gICAgICAgICAgICB2
YXIgbHcgPSBzZXJpZXMucG9pbnRzLmxpbmVXaWR0aCwKLSAgICAgICAgICAgICAgICBzdyA9IHNl
cmllcy5zaGFkb3dTaXplLAotICAgICAgICAgICAgICAgIHJhZGl1cyA9IHNlcmllcy5wb2ludHMu
cmFkaXVzLAotICAgICAgICAgICAgICAgIHN5bWJvbCA9IHNlcmllcy5wb2ludHMuc3ltYm9sOwot
ICAgICAgICAgICAgaWYgKGx3ID4gMCAmJiBzdyA+IDApIHsKLSAgICAgICAgICAgICAgICAvLyBk
cmF3IHNoYWRvdyBpbiB0d28gc3RlcHMKLSAgICAgICAgICAgICAgICB2YXIgdyA9IHN3IC8gMjsK
LSAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gdzsKLSAgICAgICAgICAgICAgICBjdHgu
c3Ryb2tlU3R5bGUgPSAicmdiYSgwLDAsMCwwLjEpIjsKLSAgICAgICAgICAgICAgICBwbG90UG9p
bnRzKHNlcmllcy5kYXRhcG9pbnRzLCByYWRpdXMsIG51bGwsIHcgKyB3LzIsIHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcywgc3ltYm9s
KTsKLQotICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDAsMCwwLDAuMiki
OwotICAgICAgICAgICAgICAgIHBsb3RQb2ludHMoc2VyaWVzLmRhdGFwb2ludHMsIHJhZGl1cywg
bnVsbCwgdy8yLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzLnhheGlz
LCBzZXJpZXMueWF4aXMsIHN5bWJvbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN0
eC5saW5lV2lkdGggPSBsdzsKLSAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHNlcmllcy5j
b2xvcjsKLSAgICAgICAgICAgIHBsb3RQb2ludHMoc2VyaWVzLmRhdGFwb2ludHMsIHJhZGl1cywK
LSAgICAgICAgICAgICAgICAgICAgICAgZ2V0RmlsbFN0eWxlKHNlcmllcy5wb2ludHMsIHNlcmll
cy5jb2xvciksIDAsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXMueGF4aXMs
IHNlcmllcy55YXhpcywgc3ltYm9sKTsKLSAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkcmF3QmFyKHgsIHksIGIsIGJhckxlZnQsIGJhclJp
Z2h0LCBvZmZzZXQsIGZpbGxTdHlsZUNhbGxiYWNrLCBheGlzeCwgYXhpc3ksIGMsIGhvcml6b250
YWwsIGxpbmVXaWR0aCkgewotICAgICAgICAgICAgdmFyIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRv
cCwKLSAgICAgICAgICAgICAgICBkcmF3TGVmdCwgZHJhd1JpZ2h0LCBkcmF3VG9wLCBkcmF3Qm90
dG9tLAotICAgICAgICAgICAgICAgIHRtcDsKLQotICAgICAgICAgICAgLy8gaW4gaG9yaXpvbnRh
bCBtb2RlLCB3ZSBzdGFydCB0aGUgYmFyIGZyb20gdGhlIGxlZnQKLSAgICAgICAgICAgIC8vIGlu
c3RlYWQgb2YgZnJvbSB0aGUgYm90dG9tIHNvIGl0IGFwcGVhcnMgdG8gYmUKLSAgICAgICAgICAg
IC8vIGhvcml6b250YWwgcmF0aGVyIHRoYW4gdmVydGljYWwKLSAgICAgICAgICAgIGlmIChob3Jp
em9udGFsKSB7Ci0gICAgICAgICAgICAgICAgZHJhd0JvdHRvbSA9IGRyYXdSaWdodCA9IGRyYXdU
b3AgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRyYXdMZWZ0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgbGVmdCA9IGI7Ci0gICAgICAgICAgICAgICAgcmlnaHQgPSB4OwotICAgICAgICAgICAg
ICAgIHRvcCA9IHkgKyBiYXJMZWZ0OwotICAgICAgICAgICAgICAgIGJvdHRvbSA9IHkgKyBiYXJS
aWdodDsKLQotICAgICAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIG5lZ2F0aXZlIGJhcnMKLSAg
ICAgICAgICAgICAgICBpZiAocmlnaHQgPCBsZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRt
cCA9IHJpZ2h0OwotICAgICAgICAgICAgICAgICAgICByaWdodCA9IGxlZnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSB0bXA7Ci0gICAgICAgICAgICAgICAgICAgIGRyYXdMZWZ0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgZHJhd1JpZ2h0ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZHJhd0xlZnQgPSBkcmF3UmlnaHQgPSBkcmF3VG9wID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBk
cmF3Qm90dG9tID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IHggKyBiYXJMZWZ0Owot
ICAgICAgICAgICAgICAgIHJpZ2h0ID0geCArIGJhclJpZ2h0OwotICAgICAgICAgICAgICAgIGJv
dHRvbSA9IGI7Ci0gICAgICAgICAgICAgICAgdG9wID0geTsKLQotICAgICAgICAgICAgICAgIC8v
IGFjY291bnQgZm9yIG5lZ2F0aXZlIGJhcnMKLSAgICAgICAgICAgICAgICBpZiAodG9wIDwgYm90
dG9tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcCA9IHRvcDsKLSAgICAgICAgICAgICAgICAg
ICAgdG9wID0gYm90dG9tOwotICAgICAgICAgICAgICAgICAgICBib3R0b20gPSB0bXA7Ci0gICAg
ICAgICAgICAgICAgICAgIGRyYXdCb3R0b20gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBk
cmF3VG9wID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBjbGlwCi0gICAgICAgICAgICBpZiAocmlnaHQgPCBheGlzeC5taW4gfHwgbGVm
dCA+IGF4aXN4Lm1heCB8fAotICAgICAgICAgICAgICAgIHRvcCA8IGF4aXN5Lm1pbiB8fCBib3R0
b20gPiBheGlzeS5tYXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBp
ZiAobGVmdCA8IGF4aXN4Lm1pbikgewotICAgICAgICAgICAgICAgIGxlZnQgPSBheGlzeC5taW47
Ci0gICAgICAgICAgICAgICAgZHJhd0xlZnQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHJpZ2h0ID4gYXhpc3gubWF4KSB7Ci0gICAgICAgICAgICAgICAgcmlnaHQg
PSBheGlzeC5tYXg7Ci0gICAgICAgICAgICAgICAgZHJhd1JpZ2h0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChib3R0b20gPCBheGlzeS5taW4pIHsKLSAgICAgICAg
ICAgICAgICBib3R0b20gPSBheGlzeS5taW47Ci0gICAgICAgICAgICAgICAgZHJhd0JvdHRvbSA9
IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG9wID4gYXhpc3kubWF4
KSB7Ci0gICAgICAgICAgICAgICAgdG9wID0gYXhpc3kubWF4OwotICAgICAgICAgICAgICAgIGRy
YXdUb3AgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGVmdCA9IGF4aXN4
LnAyYyhsZWZ0KTsKLSAgICAgICAgICAgIGJvdHRvbSA9IGF4aXN5LnAyYyhib3R0b20pOwotICAg
ICAgICAgICAgcmlnaHQgPSBheGlzeC5wMmMocmlnaHQpOwotICAgICAgICAgICAgdG9wID0gYXhp
c3kucDJjKHRvcCk7Ci0KLSAgICAgICAgICAgIC8vIGZpbGwgdGhlIGJhcgotICAgICAgICAgICAg
aWYgKGZpbGxTdHlsZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgYy5iZWdpblBhdGgoKTsK
LSAgICAgICAgICAgICAgICBjLm1vdmVUbyhsZWZ0LCBib3R0b20pOwotICAgICAgICAgICAgICAg
IGMubGluZVRvKGxlZnQsIHRvcCk7Ci0gICAgICAgICAgICAgICAgYy5saW5lVG8ocmlnaHQsIHRv
cCk7Ci0gICAgICAgICAgICAgICAgYy5saW5lVG8ocmlnaHQsIGJvdHRvbSk7Ci0gICAgICAgICAg
ICAgICAgYy5maWxsU3R5bGUgPSBmaWxsU3R5bGVDYWxsYmFjayhib3R0b20sIHRvcCk7Ci0gICAg
ICAgICAgICAgICAgYy5maWxsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGRy
YXcgb3V0bGluZQotICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCA+IDAgJiYgKGRyYXdMZWZ0IHx8
IGRyYXdSaWdodCB8fCBkcmF3VG9wIHx8IGRyYXdCb3R0b20pKSB7Ci0gICAgICAgICAgICAgICAg
Yy5iZWdpblBhdGgoKTsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbmxpbmUgbW92ZVRv
IGlzIGJ1Z2d5IHdpdGggZXhjYW52YXMKLSAgICAgICAgICAgICAgICBjLm1vdmVUbyhsZWZ0LCBi
b3R0b20gKyBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmIChkcmF3TGVmdCkKLSAgICAgICAg
ICAgICAgICAgICAgYy5saW5lVG8obGVmdCwgdG9wICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGMubW92ZVRvKGxlZnQsIHRvcCArIG9mZnNldCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICAgICAgICAgIGMubGlu
ZVRvKHJpZ2h0LCB0b3AgKyBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgYy5tb3ZlVG8ocmlnaHQsIHRvcCArIG9mZnNldCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGRyYXdSaWdodCkKLSAgICAgICAgICAgICAgICAgICAgYy5saW5lVG8ocmlnaHQsIGJv
dHRvbSArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBjLm1vdmVUbyhyaWdodCwgYm90dG9tICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAo
ZHJhd0JvdHRvbSkKLSAgICAgICAgICAgICAgICAgICAgYy5saW5lVG8obGVmdCwgYm90dG9tICsg
b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGMubW92
ZVRvKGxlZnQsIGJvdHRvbSArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYy5zdHJva2UoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdTZXJpZXNC
YXJzKHNlcmllcykgewotICAgICAgICAgICAgZnVuY3Rpb24gcGxvdEJhcnMoZGF0YXBvaW50cywg
YmFyTGVmdCwgYmFyUmlnaHQsIG9mZnNldCwgZmlsbFN0eWxlQ2FsbGJhY2ssIGF4aXN4LCBheGlz
eSkgewotICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywgcHMg
PSBkYXRhcG9pbnRzLnBvaW50c2l6ZTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSBwcykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
cG9pbnRzW2ldID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgZHJhd0Jhcihwb2ludHNbaV0sIHBvaW50c1tpICsgMV0sIHBvaW50
c1tpICsgMl0sIGJhckxlZnQsIGJhclJpZ2h0LCBvZmZzZXQsIGZpbGxTdHlsZUNhbGxiYWNrLCBh
eGlzeCwgYXhpc3ksIGN0eCwgc2VyaWVzLmJhcnMuaG9yaXpvbnRhbCwgc2VyaWVzLmJhcnMubGlu
ZVdpZHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGN0eC5zYXZlKCk7Ci0gICAgICAgICAgICBjdHgudHJhbnNsYXRlKHBsb3RPZmZzZXQubGVmdCwg
cGxvdE9mZnNldC50b3ApOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBhIHdh
eSB0byBhZGQgc2hhZG93cyAoZm9yIGluc3RhbmNlIGFsb25nIHRoZSByaWdodCBlZGdlKQotICAg
ICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IHNlcmllcy5iYXJzLmxpbmVXaWR0aDsKLSAgICAgICAg
ICAgIGN0eC5zdHJva2VTdHlsZSA9IHNlcmllcy5jb2xvcjsKLQotICAgICAgICAgICAgdmFyIGJh
ckxlZnQ7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc2VyaWVzLmJhcnMuYWxpZ24pIHsKLSAgICAg
ICAgICAgICAgICBjYXNlICJsZWZ0IjoKLSAgICAgICAgICAgICAgICAgICAgYmFyTGVmdCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgInJpZ2h0
IjoKLSAgICAgICAgICAgICAgICAgICAgYmFyTGVmdCA9IC1zZXJpZXMuYmFycy5iYXJXaWR0aDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiY2VudGVy
IjoKLSAgICAgICAgICAgICAgICAgICAgYmFyTGVmdCA9IC1zZXJpZXMuYmFycy5iYXJXaWR0aCAv
IDI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXIgYWxpZ25t
ZW50OiAiICsgc2VyaWVzLmJhcnMuYWxpZ24pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgZmlsbFN0eWxlQ2FsbGJhY2sgPSBzZXJpZXMuYmFycy5maWxsID8gZnVuY3Rpb24gKGJv
dHRvbSwgdG9wKSB7IHJldHVybiBnZXRGaWxsU3R5bGUoc2VyaWVzLmJhcnMsIHNlcmllcy5jb2xv
ciwgYm90dG9tLCB0b3ApOyB9IDogbnVsbDsKLSAgICAgICAgICAgIHBsb3RCYXJzKHNlcmllcy5k
YXRhcG9pbnRzLCBiYXJMZWZ0LCBiYXJMZWZ0ICsgc2VyaWVzLmJhcnMuYmFyV2lkdGgsIDAsIGZp
bGxTdHlsZUNhbGxiYWNrLCBzZXJpZXMueGF4aXMsIHNlcmllcy55YXhpcyk7Ci0gICAgICAgICAg
ICBjdHgucmVzdG9yZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2V0RmlsbFN0
eWxlKGZpbGxvcHRpb25zLCBzZXJpZXNDb2xvciwgYm90dG9tLCB0b3ApIHsKLSAgICAgICAgICAg
IHZhciBmaWxsID0gZmlsbG9wdGlvbnMuZmlsbDsKLSAgICAgICAgICAgIGlmICghZmlsbCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKGZpbGxvcHRpb25z
LmZpbGxDb2xvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29sb3JPckdyYWRpZW50KGZp
bGxvcHRpb25zLmZpbGxDb2xvciwgYm90dG9tLCB0b3AsIHNlcmllc0NvbG9yKTsKLQotICAgICAg
ICAgICAgdmFyIGMgPSAkLmNvbG9yLnBhcnNlKHNlcmllc0NvbG9yKTsKLSAgICAgICAgICAgIGMu
YSA9IHR5cGVvZiBmaWxsID09ICJudW1iZXIiID8gZmlsbCA6IDAuNDsKLSAgICAgICAgICAgIGMu
bm9ybWFsaXplKCk7Ci0gICAgICAgICAgICByZXR1cm4gYy50b1N0cmluZygpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5zZXJ0TGVnZW5kKCkgewotCi0gICAgICAgICAgICBwbGFj
ZWhvbGRlci5maW5kKCIubGVnZW5kIikucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgIGlmICghb3B0
aW9ucy5sZWdlbmQuc2hvdykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IHZhciBmcmFnbWVudHMgPSBbXSwgZW50cmllcyA9IFtdLCByb3dTdGFydGVkID0gZmFsc2UsCi0g
ICAgICAgICAgICAgICAgbGYgPSBvcHRpb25zLmxlZ2VuZC5sYWJlbEZvcm1hdHRlciwgcywgbGFi
ZWw7Ci0KLSAgICAgICAgICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBsZWdlbmQgZW50cmllcywgd2l0
aCBlYWNoIGhhdmluZyBhIGxhYmVsIGFuZCBhIGNvbG9yCi0KLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgcyA9IHNl
cmllc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAocy5sYWJlbCkgewotICAgICAgICAgICAgICAg
ICAgICBsYWJlbCA9IGxmID8gbGYocy5sYWJlbCwgcykgOiBzLmxhYmVsOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobGFiZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMucHVz
aCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yOiBzLmNvbG9yCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gU29ydCB0aGUgbGVnZW5kIHVzaW5nIGVpdGhlciB0aGUg
ZGVmYXVsdCBvciBhIGN1c3RvbSBjb21wYXJhdG9yCi0KLSAgICAgICAgICAgIGlmIChvcHRpb25z
LmxlZ2VuZC5zb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdGlv
bnMubGVnZW5kLnNvcnRlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZW50cmllcy5zb3J0KG9w
dGlvbnMubGVnZW5kLnNvcnRlZCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGFzY2VuZGluZyA9IG9wdGlvbnMubGVnZW5kLnNvcnRlZCAhPSAiZGVz
Y2VuZGluZyI7Ci0gICAgICAgICAgICAgICAgICAgIGVudHJpZXMuc29ydChmdW5jdGlvbihhLCBi
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbCA9PSBiLmxhYmVsID8g
MCA6ICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYS5sYWJlbCA8IGIubGFiZWwpICE9
IGFzY2VuZGluZyA/IDEgOiAtMSAgIC8vIExvZ2ljYWwgWE9SCi0gICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEdlbmVyYXRlIG1hcmt1cCBmb3IgdGhlIGxpc3Qg
b2YgZW50cmllcywgaW4gdGhlaXIgZmluYWwgb3JkZXIKLQotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
ZW50cnkgPSBlbnRyaWVzW2ldOwotCi0gICAgICAgICAgICAgICAgaWYgKGkgJSBvcHRpb25zLmxl
Z2VuZC5ub0NvbHVtbnMgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93U3RhcnRl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cy5wdXNoKCc8L3RyPicpOwotICAg
ICAgICAgICAgICAgICAgICBmcmFnbWVudHMucHVzaCgnPHRyPicpOwotICAgICAgICAgICAgICAg
ICAgICByb3dTdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBmcmFnbWVudHMucHVzaCgKLSAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz0ibGVn
ZW5kQ29sb3JCb3giPjxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgJyArIG9wdGlvbnMubGVn
ZW5kLmxhYmVsQm94Qm9yZGVyQ29sb3IgKyAnO3BhZGRpbmc6MXB4Ij48ZGl2IHN0eWxlPSJ3aWR0
aDo0cHg7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCAnICsgZW50cnkuY29sb3IgKyAnO292ZXJm
bG93OmhpZGRlbiI+PC9kaXY+PC9kaXY+PC90ZD4nICsKLSAgICAgICAgICAgICAgICAgICAgJzx0
ZCBjbGFzcz0ibGVnZW5kTGFiZWwiPicgKyBlbnRyeS5sYWJlbCArICc8L3RkPicKLSAgICAgICAg
ICAgICAgICApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocm93U3RhcnRlZCkK
LSAgICAgICAgICAgICAgICBmcmFnbWVudHMucHVzaCgnPC90cj4nKTsKLQotICAgICAgICAgICAg
aWYgKGZyYWdtZW50cy5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHZhciB0YWJsZSA9ICc8dGFibGUgc3R5bGU9ImZvbnQtc2l6ZTpzbWFsbGVyO2Nv
bG9yOicgKyBvcHRpb25zLmdyaWQuY29sb3IgKyAnIj4nICsgZnJhZ21lbnRzLmpvaW4oIiIpICsg
JzwvdGFibGU+JzsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZC5jb250YWluZXIgIT0g
bnVsbCkKLSAgICAgICAgICAgICAgICAkKG9wdGlvbnMubGVnZW5kLmNvbnRhaW5lcikuaHRtbCh0
YWJsZSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgcG9zID0gIiIs
Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBvcHRpb25zLmxlZ2VuZC5wb3NpdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgbSA9IG9wdGlvbnMubGVnZW5kLm1hcmdpbjsKLSAgICAgICAgICAgICAg
ICBpZiAobVswXSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBtID0gW20sIG1dOwotICAg
ICAgICAgICAgICAgIGlmIChwLmNoYXJBdCgwKSA9PSAibiIpCi0gICAgICAgICAgICAgICAgICAg
IHBvcyArPSAndG9wOicgKyAobVsxXSArIHBsb3RPZmZzZXQudG9wKSArICdweDsnOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHAuY2hhckF0KDApID09ICJzIikKLSAgICAgICAgICAgICAgICAg
ICAgcG9zICs9ICdib3R0b206JyArIChtWzFdICsgcGxvdE9mZnNldC5ib3R0b20pICsgJ3B4Oyc7
Ci0gICAgICAgICAgICAgICAgaWYgKHAuY2hhckF0KDEpID09ICJlIikKLSAgICAgICAgICAgICAg
ICAgICAgcG9zICs9ICdyaWdodDonICsgKG1bMF0gKyBwbG90T2Zmc2V0LnJpZ2h0KSArICdweDsn
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAuY2hhckF0KDEpID09ICJ3IikKLSAgICAgICAg
ICAgICAgICAgICAgcG9zICs9ICdsZWZ0OicgKyAobVswXSArIHBsb3RPZmZzZXQubGVmdCkgKyAn
cHg7JzsKLSAgICAgICAgICAgICAgICB2YXIgbGVnZW5kID0gJCgnPGRpdiBjbGFzcz0ibGVnZW5k
Ij4nICsgdGFibGUucmVwbGFjZSgnc3R5bGU9IicsICdzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7
JyArIHBvcyArJzsnKSArICc8L2Rpdj4nKS5hcHBlbmRUbyhwbGFjZWhvbGRlcik7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9wdGlvbnMubGVnZW5kLmJhY2tncm91bmRPcGFjaXR5ICE9IDAuMCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBwdXQgaW4gdGhlIHRyYW5zcGFyZW50IGJhY2tncm91bmQK
LSAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVseSB0byBhdm9pZCBibGVuZGVkIGxhYmVs
cyBhbmQKLSAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWwgYm94ZXMKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGMgPSBvcHRpb25zLmxlZ2VuZC5iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBv
cHRpb25zLmdyaWQuYmFja2dyb3VuZENvbG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGMgJiYgdHlwZW9mIGMgPT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YyA9ICQuY29sb3IucGFyc2UoYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICQuY29sb3IuZXh0cmFjdChsZWdlbmQsICdiYWNr
Z3JvdW5kLWNvbG9yJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjLmEgPSAxOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYyA9IGMudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gbGVnZW5kLmNoaWxkcmVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICQoJzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOicg
KyBkaXYud2lkdGgoKSArICdweDtoZWlnaHQ6JyArIGRpdi5oZWlnaHQoKSArICdweDsnICsgcG9z
ICsnYmFja2dyb3VuZC1jb2xvcjonICsgYyArICc7Ij4gPC9kaXY+JykucHJlcGVuZFRvKGxlZ2Vu
ZCkuY3NzKCdvcGFjaXR5Jywgb3B0aW9ucy5sZWdlbmQuYmFja2dyb3VuZE9wYWNpdHkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8g
aW50ZXJhY3RpdmUgZmVhdHVyZXMKLQotICAgICAgICB2YXIgaGlnaGxpZ2h0cyA9IFtdLAotICAg
ICAgICAgICAgcmVkcmF3VGltZW91dCA9IG51bGw7Ci0KLSAgICAgICAgLy8gcmV0dXJucyB0aGUg
ZGF0YSBpdGVtIHRoZSBtb3VzZSBpcyBvdmVyLCBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQKLSAg
ICAgICAgZnVuY3Rpb24gZmluZE5lYXJieUl0ZW0obW91c2VYLCBtb3VzZVksIHNlcmllc0ZpbHRl
cikgewotICAgICAgICAgICAgdmFyIG1heERpc3RhbmNlID0gb3B0aW9ucy5ncmlkLm1vdXNlQWN0
aXZlUmFkaXVzLAotICAgICAgICAgICAgICAgIHNtYWxsZXN0RGlzdGFuY2UgPSBtYXhEaXN0YW5j
ZSAqIG1heERpc3RhbmNlICsgMSwKLSAgICAgICAgICAgICAgICBpdGVtID0gbnVsbCwgZm91bmRQ
b2ludCA9IGZhbHNlLCBpLCBqLCBwczsKLQotICAgICAgICAgICAgZm9yIChpID0gc2VyaWVzLmxl
bmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXJpZXNGaWx0
ZXIoc2VyaWVzW2ldKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgcyA9IHNlcmllc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgYXhpc3ggPSBz
LnhheGlzLAotICAgICAgICAgICAgICAgICAgICBheGlzeSA9IHMueWF4aXMsCi0gICAgICAgICAg
ICAgICAgICAgIHBvaW50cyA9IHMuZGF0YXBvaW50cy5wb2ludHMsCi0gICAgICAgICAgICAgICAg
ICAgIG14ID0gYXhpc3guYzJwKG1vdXNlWCksIC8vIHByZWNvbXB1dGUgc29tZSBzdHVmZiB0byBt
YWtlIHRoZSBsb29wIGZhc3RlcgotICAgICAgICAgICAgICAgICAgICBteSA9IGF4aXN5LmMycCht
b3VzZVkpLAotICAgICAgICAgICAgICAgICAgICBtYXh4ID0gbWF4RGlzdGFuY2UgLyBheGlzeC5z
Y2FsZSwKLSAgICAgICAgICAgICAgICAgICAgbWF4eSA9IG1heERpc3RhbmNlIC8gYXhpc3kuc2Nh
bGU7Ci0KLSAgICAgICAgICAgICAgICBwcyA9IHMuZGF0YXBvaW50cy5wb2ludHNpemU7Ci0gICAg
ICAgICAgICAgICAgLy8gd2l0aCBpbnZlcnNlIHRyYW5zZm9ybXMsIHdlIGNhbid0IHVzZSB0aGUg
bWF4eC9tYXh5Ci0gICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uLCBzYWRseQotICAgICAg
ICAgICAgICAgIGlmIChheGlzeC5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm0pCi0gICAgICAgICAg
ICAgICAgICAgIG1heHggPSBOdW1iZXIuTUFYX1ZBTFVFOwotICAgICAgICAgICAgICAgIGlmIChh
eGlzeS5vcHRpb25zLmludmVyc2VUcmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAgICAgIG1heHkg
PSBOdW1iZXIuTUFYX1ZBTFVFOwotCi0gICAgICAgICAgICAgICAgaWYgKHMubGluZXMuc2hvdyB8
fCBzLnBvaW50cy5zaG93KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBw
b2ludHMubGVuZ3RoOyBqICs9IHBzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9
IHBvaW50c1tqXSwgeSA9IHBvaW50c1tqICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcG9pbnRzIGFuZCBsaW5lcywgdGhlIGN1cnNv
ciBtdXN0IGJlIHdpdGhpbiBhCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjZXJ0YWluIGRp
c3RhbmNlIHRvIHRoZSBkYXRhIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAt
IG14ID4gbWF4eCB8fCB4IC0gbXggPCAtbWF4eCB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHkgLSBteSA+IG1heHkgfHwgeSAtIG15IDwgLW1heHkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gY2FsY3VsYXRlIGRpc3RhbmNlcyBpbiBwaXhlbHMsIG5vdCBpbgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGF0YSB1bml0cywgYmVjYXVzZSB0aGUgc2NhbGVzIG9mIHRoZSBheGVzIG1h
eSBiZSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkeCA9IE1hdGguYWJz
KGF4aXN4LnAyYyh4KSAtIG1vdXNlWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHkg
PSBNYXRoLmFicyhheGlzeS5wMmMoeSkgLSBtb3VzZVkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSBkeCAqIGR4ICsgZHkgKiBkeTsgLy8gd2Ugc2F2ZSB0aGUgc3FydAotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgPD0gdG8gZW5zdXJlIGxhc3QgcG9pbnQgdGFr
ZXMgcHJlY2VkZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGxhc3QgZ2VuZXJhbGx5
IG1lYW5zIG9uIHRvcCBvZikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgc21h
bGxlc3REaXN0YW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0RGlz
dGFuY2UgPSBkaXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBbaSwgaiAv
IHBzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzLmJhcnMuc2hvdyAmJiAh
aXRlbSkgeyAvLyBubyBvdGhlciBwb2ludCBjYW4gYmUgbmVhcmJ5Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBiYXJMZWZ0ID0gcy5iYXJzLmFsaWduID09ICJsZWZ0IiA/IDAgOiAtcy5iYXJzLmJh
cldpZHRoLzIsCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXJSaWdodCA9IGJhckxlZnQgKyBz
LmJhcnMuYmFyV2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBv
aW50cy5sZW5ndGg7IGogKz0gcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0g
cG9pbnRzW2pdLCB5ID0gcG9pbnRzW2ogKyAxXSwgYiA9IHBvaW50c1tqICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSBiYXIgZ3Jh
cGgsIHRoZSBjdXJzb3IgbXVzdCBiZSBpbnNpZGUgdGhlIGJhcgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlcmllc1tpXS5iYXJzLmhvcml6b250YWwgPwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChteCA8PSBNYXRoLm1heChiLCB4KSAmJiBteCA+PSBNYXRoLm1pbihiLCB4KSAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSA+PSB5ICsgYmFyTGVmdCAmJiBteSA8
PSB5ICsgYmFyUmlnaHQpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXggPj0geCAr
IGJhckxlZnQgJiYgbXggPD0geCArIGJhclJpZ2h0ICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ID49IE1hdGgubWluKGIsIHkpICYmIG15IDw9IE1hdGgubWF4KGIsIHkpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IFtpLCBqIC8gcHNdOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGkgPSBpdGVtWzBdOwotICAgICAg
ICAgICAgICAgIGogPSBpdGVtWzFdOwotICAgICAgICAgICAgICAgIHBzID0gc2VyaWVzW2ldLmRh
dGFwb2ludHMucG9pbnRzaXplOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YXBvaW50
OiBzZXJpZXNbaV0uZGF0YXBvaW50cy5wb2ludHMuc2xpY2UoaiAqIHBzLCAoaiArIDEpICogcHMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJbmRleDogaiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXJpZXM6IHNlcmllc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXJpZXNJbmRleDogaSB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHsKLSAgICAg
ICAgICAgIGlmIChvcHRpb25zLmdyaWQuaG92ZXJhYmxlKQotICAgICAgICAgICAgICAgIHRyaWdn
ZXJDbGlja0hvdmVyRXZlbnQoInBsb3Rob3ZlciIsIGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gc1siaG92ZXJhYmxlIl0gIT0g
ZmFsc2U7IH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZUxlYXZlKGUp
IHsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmdyaWQuaG92ZXJhYmxlKQotICAgICAgICAgICAg
ICAgIHRyaWdnZXJDbGlja0hvdmVyRXZlbnQoInBsb3Rob3ZlciIsIGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gZmFsc2U7IH0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25DbGljayhlKSB7Ci0gICAgICAgICAg
ICB0cmlnZ2VyQ2xpY2tIb3ZlckV2ZW50KCJwbG90Y2xpY2siLCBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocykgeyByZXR1cm4gc1siY2xpY2thYmxlIl0g
IT0gZmFsc2U7IH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdHJpZ2dlciBjbGljayBvciBo
b3ZlciBldmVudCAodGhleSBzZW5kIHRoZSBzYW1lIHBhcmFtZXRlcnMKLSAgICAgICAgLy8gc28g
d2Ugc2hhcmUgdGhlaXIgY29kZSkKLSAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckNsaWNrSG92ZXJF
dmVudChldmVudG5hbWUsIGV2ZW50LCBzZXJpZXNGaWx0ZXIpIHsKLSAgICAgICAgICAgIHZhciBv
ZmZzZXQgPSBldmVudEhvbGRlci5vZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBjYW52YXNYID0g
ZXZlbnQucGFnZVggLSBvZmZzZXQubGVmdCAtIHBsb3RPZmZzZXQubGVmdCwKLSAgICAgICAgICAg
ICAgICBjYW52YXNZID0gZXZlbnQucGFnZVkgLSBvZmZzZXQudG9wIC0gcGxvdE9mZnNldC50b3As
Ci0gICAgICAgICAgICBwb3MgPSBjYW52YXNUb0F4aXNDb29yZHMoeyBsZWZ0OiBjYW52YXNYLCB0
b3A6IGNhbnZhc1kgfSk7Ci0KLSAgICAgICAgICAgIHBvcy5wYWdlWCA9IGV2ZW50LnBhZ2VYOwot
ICAgICAgICAgICAgcG9zLnBhZ2VZID0gZXZlbnQucGFnZVk7Ci0KLSAgICAgICAgICAgIHZhciBp
dGVtID0gZmluZE5lYXJieUl0ZW0oY2FudmFzWCwgY2FudmFzWSwgc2VyaWVzRmlsdGVyKTsKLQot
ICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAvLyBmaWxsIGluIG1vdXNl
IHBvcyBmb3IgYW55IGxpc3RlbmVycyBvdXQgdGhlcmUKLSAgICAgICAgICAgICAgICBpdGVtLnBh
Z2VYID0gcGFyc2VJbnQoaXRlbS5zZXJpZXMueGF4aXMucDJjKGl0ZW0uZGF0YXBvaW50WzBdKSAr
IG9mZnNldC5sZWZ0ICsgcGxvdE9mZnNldC5sZWZ0LCAxMCk7Ci0gICAgICAgICAgICAgICAgaXRl
bS5wYWdlWSA9IHBhcnNlSW50KGl0ZW0uc2VyaWVzLnlheGlzLnAyYyhpdGVtLmRhdGFwb2ludFsx
XSkgKyBvZmZzZXQudG9wICsgcGxvdE9mZnNldC50b3AsIDEwKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ3JpZC5hdXRvSGlnaGxpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgLy8gY2xlYXIgYXV0by1oaWdobGlnaHRzCi0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBoaWdobGlnaHRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBoID0gaGlnaGxpZ2h0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGguYXV0byA9
PSBldmVudG5hbWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICEoaXRlbSAmJiBoLnNlcmll
cyA9PSBpdGVtLnNlcmllcyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICBoLnBvaW50WzBd
ID09IGl0ZW0uZGF0YXBvaW50WzBdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGgucG9p
bnRbMV0gPT0gaXRlbS5kYXRhcG9pbnRbMV0pKQotICAgICAgICAgICAgICAgICAgICAgICAgdW5o
aWdobGlnaHQoaC5zZXJpZXMsIGgucG9pbnQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChpdGVtKQotICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQoaXRlbS5z
ZXJpZXMsIGl0ZW0uZGF0YXBvaW50LCBldmVudG5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwbGFjZWhvbGRlci50cmlnZ2VyKGV2ZW50bmFtZSwgWyBwb3MsIGl0ZW0gXSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgpIHsKLSAg
ICAgICAgICAgIHZhciB0ID0gb3B0aW9ucy5pbnRlcmFjdGlvbi5yZWRyYXdPdmVybGF5SW50ZXJ2
YWw7Ci0gICAgICAgICAgICBpZiAodCA9PSAtMSkgeyAgICAgIC8vIHNraXAgZXZlbnQgcXVldWUK
LSAgICAgICAgICAgICAgICBkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFyZWRyYXdUaW1lb3V0KQotICAgICAg
ICAgICAgICAgIHJlZHJhd1RpbWVvdXQgPSBzZXRUaW1lb3V0KGRyYXdPdmVybGF5LCB0KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRyYXdPdmVybGF5KCkgewotICAgICAgICAgICAg
cmVkcmF3VGltZW91dCA9IG51bGw7Ci0KLSAgICAgICAgICAgIC8vIGRyYXcgaGlnaGxpZ2h0cwot
ICAgICAgICAgICAgb2N0eC5zYXZlKCk7Ci0gICAgICAgICAgICBvY3R4LmNsZWFyUmVjdCgwLCAw
LCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKLSAgICAgICAgICAgIG9jdHgudHJhbnNsYXRl
KHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOwotCi0gICAgICAgICAgICB2YXIgaSwg
aGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGlnaGxpZ2h0cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIGhpID0gaGlnaGxpZ2h0c1tpXTsKLQotICAgICAgICAgICAgICAg
IGlmIChoaS5zZXJpZXMuYmFycy5zaG93KQotICAgICAgICAgICAgICAgICAgICBkcmF3QmFySGln
aGxpZ2h0KGhpLnNlcmllcywgaGkucG9pbnQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZHJhd1BvaW50SGlnaGxpZ2h0KGhpLnNlcmllcywgaGkucG9pbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgb2N0eC5yZXN0b3JlKCk7Ci0KLSAgICAgICAgICAg
IGV4ZWN1dGVIb29rcyhob29rcy5kcmF3T3ZlcmxheSwgW29jdHhdKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGhpZ2hsaWdodChzLCBwb2ludCwgYXV0bykgewotICAgICAgICAgICAg
aWYgKHR5cGVvZiBzID09ICJudW1iZXIiKQotICAgICAgICAgICAgICAgIHMgPSBzZXJpZXNbc107
Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgcG9pbnQgPT0gIm51bWJlciIpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcHMgPSBzLmRhdGFwb2ludHMucG9pbnRzaXplOwotICAgICAgICAgICAgICAg
IHBvaW50ID0gcy5kYXRhcG9pbnRzLnBvaW50cy5zbGljZShwcyAqIHBvaW50LCBwcyAqIChwb2lu
dCArIDEpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGkgPSBpbmRleE9mSGln
aGxpZ2h0KHMsIHBvaW50KTsKLSAgICAgICAgICAgIGlmIChpID09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgaGlnaGxpZ2h0cy5wdXNoKHsgc2VyaWVzOiBzLCBwb2ludDogcG9pbnQsIGF1dG86IGF1
dG8gfSk7Ci0KLSAgICAgICAgICAgICAgICB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIWF1dG8pCi0gICAgICAgICAgICAgICAgaGln
aGxpZ2h0c1tpXS5hdXRvID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1
bmhpZ2hsaWdodChzLCBwb2ludCkgewotICAgICAgICAgICAgaWYgKHMgPT0gbnVsbCAmJiBwb2lu
dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaGlnaGxpZ2h0cyA9IFtdOwotICAgICAgICAg
ICAgICAgIHRyaWdnZXJSZWRyYXdPdmVybGF5KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgcyA9PSAibnVtYmVyIikKLSAgICAgICAgICAgICAgICBzID0gc2VyaWVz
W3NdOwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIHBvaW50ID09ICJudW1iZXIiKQotICAgICAg
ICAgICAgICAgIHBvaW50ID0gcy5kYXRhW3BvaW50XTsKLQotICAgICAgICAgICAgdmFyIGkgPSBp
bmRleE9mSGlnaGxpZ2h0KHMsIHBvaW50KTsKLSAgICAgICAgICAgIGlmIChpICE9IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7Ci0KLSAgICAgICAgICAgICAg
ICB0cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gaW5kZXhPZkhpZ2hsaWdodChzLCBwKSB7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaCA9IGhpZ2hsaWdodHNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGguc2VyaWVzID09
IHMgJiYgaC5wb2ludFswXSA9PSBwWzBdCi0gICAgICAgICAgICAgICAgICAgICYmIGgucG9pbnRb
MV0gPT0gcFsxXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBk
cmF3UG9pbnRIaWdobGlnaHQoc2VyaWVzLCBwb2ludCkgewotICAgICAgICAgICAgdmFyIHggPSBw
b2ludFswXSwgeSA9IHBvaW50WzFdLAotICAgICAgICAgICAgICAgIGF4aXN4ID0gc2VyaWVzLnhh
eGlzLCBheGlzeSA9IHNlcmllcy55YXhpcywKLSAgICAgICAgICAgICAgICBoaWdobGlnaHRDb2xv
ciA9ICh0eXBlb2Ygc2VyaWVzLmhpZ2hsaWdodENvbG9yID09PSAic3RyaW5nIikgPyBzZXJpZXMu
aGlnaGxpZ2h0Q29sb3IgOiAkLmNvbG9yLnBhcnNlKHNlcmllcy5jb2xvcikuc2NhbGUoJ2EnLCAw
LjUpLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgICAgIGlmICh4IDwgYXhpc3gubWluIHx8IHggPiBh
eGlzeC5tYXggfHwgeSA8IGF4aXN5Lm1pbiB8fCB5ID4gYXhpc3kubWF4KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgdmFyIHBvaW50UmFkaXVzID0gc2VyaWVzLnBvaW50
cy5yYWRpdXMgKyBzZXJpZXMucG9pbnRzLmxpbmVXaWR0aCAvIDI7Ci0gICAgICAgICAgICBvY3R4
LmxpbmVXaWR0aCA9IHBvaW50UmFkaXVzOwotICAgICAgICAgICAgb2N0eC5zdHJva2VTdHlsZSA9
IGhpZ2hsaWdodENvbG9yOwotICAgICAgICAgICAgdmFyIHJhZGl1cyA9IDEuNSAqIHBvaW50UmFk
aXVzOwotICAgICAgICAgICAgeCA9IGF4aXN4LnAyYyh4KTsKLSAgICAgICAgICAgIHkgPSBheGlz
eS5wMmMoeSk7Ci0KLSAgICAgICAgICAgIG9jdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBp
ZiAoc2VyaWVzLnBvaW50cy5zeW1ib2wgPT0gImNpcmNsZSIpCi0gICAgICAgICAgICAgICAgb2N0
eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHNlcmllcy5wb2ludHMuc3ltYm9sKG9jdHgsIHgsIHksIHJh
ZGl1cywgZmFsc2UpOwotICAgICAgICAgICAgb2N0eC5jbG9zZVBhdGgoKTsKLSAgICAgICAgICAg
IG9jdHguc3Ryb2tlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkcmF3QmFySGln
aGxpZ2h0KHNlcmllcywgcG9pbnQpIHsKLSAgICAgICAgICAgIHZhciBoaWdobGlnaHRDb2xvciA9
ICh0eXBlb2Ygc2VyaWVzLmhpZ2hsaWdodENvbG9yID09PSAic3RyaW5nIikgPyBzZXJpZXMuaGln
aGxpZ2h0Q29sb3IgOiAkLmNvbG9yLnBhcnNlKHNlcmllcy5jb2xvcikuc2NhbGUoJ2EnLCAwLjUp
LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgZmlsbFN0eWxlID0gaGlnaGxpZ2h0Q29sb3Is
Ci0gICAgICAgICAgICAgICAgYmFyTGVmdCA9IHNlcmllcy5iYXJzLmFsaWduID09ICJsZWZ0IiA/
IDAgOiAtc2VyaWVzLmJhcnMuYmFyV2lkdGgvMjsKLQotICAgICAgICAgICAgb2N0eC5saW5lV2lk
dGggPSBzZXJpZXMuYmFycy5saW5lV2lkdGg7Ci0gICAgICAgICAgICBvY3R4LnN0cm9rZVN0eWxl
ID0gaGlnaGxpZ2h0Q29sb3I7Ci0KLSAgICAgICAgICAgIGRyYXdCYXIocG9pbnRbMF0sIHBvaW50
WzFdLCBwb2ludFsyXSB8fCAwLCBiYXJMZWZ0LCBiYXJMZWZ0ICsgc2VyaWVzLmJhcnMuYmFyV2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgIDAsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbGxTdHls
ZTsgfSwgc2VyaWVzLnhheGlzLCBzZXJpZXMueWF4aXMsIG9jdHgsIHNlcmllcy5iYXJzLmhvcml6
b250YWwsIHNlcmllcy5iYXJzLmxpbmVXaWR0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBnZXRDb2xvck9yR3JhZGllbnQoc3BlYywgYm90dG9tLCB0b3AsIGRlZmF1bHRDb2xvcikg
ewotICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKQotICAgICAgICAgICAg
ICAgIHJldHVybiBzcGVjOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
YXNzdW1lIHRoaXMgaXMgYSBncmFkaWVudCBzcGVjOyBJRSBjdXJyZW50bHkgb25seQotICAgICAg
ICAgICAgICAgIC8vIHN1cHBvcnRzIGEgc2ltcGxlIHZlcnRpY2FsIGdyYWRpZW50IHByb3Blcmx5
LCBzbyB0aGF0J3MKLSAgICAgICAgICAgICAgICAvLyB3aGF0IHdlIHN1cHBvcnQgdG9vCi0gICAg
ICAgICAgICAgICAgdmFyIGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIHRv
cCwgMCwgYm90dG9tKTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Bl
Yy5jb2xvcnMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBj
ID0gc3BlYy5jb2xvcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyAhPSAi
c3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gJC5jb2xvci5wYXJz
ZShkZWZhdWx0Q29sb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuYnJpZ2h0bmVz
cyAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvID0gY28uc2NhbGUoJ3Jn
YicsIGMuYnJpZ2h0bmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5vcGFjaXR5
ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uYSAqPSBjLm9wYWNpdHk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gY28udG9TdHJpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoaSAv
IChsIC0gMSksIGMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biBncmFkaWVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgICQucGxv
dCA9IGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCBkYXRhLCBvcHRpb25zKSB7Ci0gICAgICAgIC8vdmFy
IHQwID0gbmV3IERhdGUoKTsKLSAgICAgICAgdmFyIHBsb3QgPSBuZXcgUGxvdCgkKHBsYWNlaG9s
ZGVyKSwgZGF0YSwgb3B0aW9ucywgJC5wbG90LnBsdWdpbnMpOwotICAgICAgICAvLyh3aW5kb3cu
Y29uc29sZSA/IGNvbnNvbGUubG9nIDogYWxlcnQpKCJ0aW1lIHVzZWQgKG1zZWNzKTogIiArICgo
bmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gdDAuZ2V0VGltZSgpKSk7Ci0gICAgICAgIHJldHVybiBw
bG90OwotICAgIH07Ci0KLSAgICAkLnBsb3QudmVyc2lvbiA9ICIwLjgtYWxwaGEiOwotCi0gICAg
JC5wbG90LnBsdWdpbnMgPSBbXTsKLQotICAgIC8vIHJvdW5kIHRvIG5lYXJieSBsb3dlciBtdWx0
aXBsZSBvZiBiYXNlCi0gICAgZnVuY3Rpb24gZmxvb3JJbkJhc2UobiwgYmFzZSkgewotICAgICAg
ICByZXR1cm4gYmFzZSAqIE1hdGguZmxvb3IobiAvIGJhc2UpOwotICAgIH0KLQotfSkoalF1ZXJ5
KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5
LmZsb3QubmF2aWdhdGUuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2px
dWVyeS5mbG90Lm5hdmlnYXRlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Zjcy
YWM0NjNlMTk1MWI1NzZmYjFhM2U3Y2Y2ZmVkY2JiODdkMTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvanMvanF1ZXJ5LmZsb3QubmF2aWdhdGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAs
MCBAQAotLyogRmxvdCBwbHVnaW4gZm9yIGFkZGluZyB0aGUgYWJpbGl0eSB0byBwYW4gYW5kIHpv
b20gdGhlIHBsb3QuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVy
c2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi1UaGUgZGVmYXVsdCBiZWhh
dmlvdXIgaXMgZG91YmxlIGNsaWNrIGFuZCBzY3JvbGx3aGVlbCB1cC9kb3duIHRvIHpvb20gaW4s
IGRyYWcKLXRvIHBhbi4gVGhlIHBsdWdpbiBkZWZpbmVzIHBsb3Quem9vbSh7IGNlbnRlciB9KSwg
cGxvdC56b29tT3V0KCkgYW5kCi1wbG90LnBhbiggb2Zmc2V0ICkgc28geW91IGVhc2lseSBjYW4g
YWRkIGN1c3RvbSBjb250cm9scy4gSXQgYWxzbyBmaXJlcwotInBsb3RwYW4iIGFuZCAicGxvdHpv
b20iIGV2ZW50cywgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHBsb3RzLgotCi1UaGUgcGx1Z2lu
IHN1cHBvcnRzIHRoZXNlIG9wdGlvbnM6Ci0KLSAgICB6b29tOiB7Ci0gICAgICAgIGludGVyYWN0
aXZlOiBmYWxzZQotICAgICAgICB0cmlnZ2VyOiAiZGJsY2xpY2siIC8vIG9yICJjbGljayIgZm9y
IHNpbmdsZSBjbGljawotICAgICAgICBhbW91bnQ6IDEuNSAgICAgICAgIC8vIDIgPSAyMDAlICh6
b29tIGluKSwgMC41ID0gNTAlICh6b29tIG91dCkKLSAgICB9Ci0KLSAgICBwYW46IHsKLSAgICAg
ICAgaW50ZXJhY3RpdmU6IGZhbHNlCi0gICAgICAgIGN1cnNvcjogIm1vdmUiICAgICAgLy8gQ1NT
IG1vdXNlIGN1cnNvciB2YWx1ZSB1c2VkIHdoZW4gZHJhZ2dpbmcsIGUuZy4gInBvaW50ZXIiCi0g
ICAgICAgIGZyYW1lUmF0ZTogMjAKLSAgICB9Ci0KLSAgICB4YXhpcywgeWF4aXMsIHgyYXhpcywg
eTJheGlzOiB7Ci0gICAgICAgIHpvb21SYW5nZTogbnVsbCAgLy8gb3IgWyBudW1iZXIsIG51bWJl
ciBdIChtaW4gcmFuZ2UsIG1heCByYW5nZSkgb3IgZmFsc2UKLSAgICAgICAgcGFuUmFuZ2U6IG51
bGwgICAvLyBvciBbIG51bWJlciwgbnVtYmVyIF0gKG1pbiwgbWF4KSBvciBmYWxzZQotICAgIH0K
LQotImludGVyYWN0aXZlIiBlbmFibGVzIHRoZSBidWlsdC1pbiBkcmFnL2NsaWNrIGJlaGF2aW91
ci4gSWYgeW91IGVuYWJsZQotaW50ZXJhY3RpdmUgZm9yIHBhbiwgdGhlbiB5b3UnbGwgaGF2ZSBh
IGJhc2ljIHBsb3QgdGhhdCBzdXBwb3J0cyBtb3ZpbmcKLWFyb3VuZDsgdGhlIHNhbWUgZm9yIHpv
b20uCi0KLSJhbW91bnQiIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBhbW91bnQgdG8gem9vbSBpbiAo
c28gMS41ID0gMTUwJSkgcmVsYXRpdmUgdG8KLXRoZSBjdXJyZW50IHZpZXdwb3J0LgotCi0iY3Vy
c29yIiBpcyBhIHN0YW5kYXJkIENTUyBtb3VzZSBjdXJzb3Igc3RyaW5nIHVzZWQgZm9yIHZpc3Vh
bCBmZWVkYmFjayB0byB0aGUKLXVzZXIgd2hlbiBkcmFnZ2luZy4KLQotImZyYW1lUmF0ZSIgc3Bl
Y2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyBwZXIgc2Vjb25kIHRoZSBwbG90IHdp
bGwKLXVwZGF0ZSBpdHNlbGYgd2hpbGUgdGhlIHVzZXIgaXMgcGFubmluZyBhcm91bmQgb24gaXQg
KHNldCB0byBudWxsIHRvIGRpc2FibGUKLWludGVybWVkaWF0ZSBwYW5zLCB0aGUgcGxvdCB3aWxs
IHRoZW4gbm90IHVwZGF0ZSB1bnRpbCB0aGUgbW91c2UgYnV0dG9uIGlzCi1yZWxlYXNlZCkuCi0K
LSJ6b29tUmFuZ2UiIGlzIHRoZSBpbnRlcnZhbCBpbiB3aGljaCB6b29taW5nIGNhbiBoYXBwZW4s
IGUuZy4gd2l0aCB6b29tUmFuZ2U6Ci1bMSwgMTAwXSB0aGUgem9vbSB3aWxsIG5ldmVyIHNjYWxl
IHRoZSBheGlzIHNvIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtaW4KLWFuZCBtYXggaXMg
c21hbGxlciB0aGFuIDEgb3IgbGFyZ2VyIHRoYW4gMTAwLiBZb3UgY2FuIHNldCBlaXRoZXIgZW5k
IHRvIG51bGwKLXRvIGlnbm9yZSwgZS5nLiBbMSwgbnVsbF0uIElmIHlvdSBzZXQgem9vbVJhbmdl
IHRvIGZhbHNlLCB6b29taW5nIG9uIHRoYXQgYXhpcwotd2lsbCBiZSBkaXNhYmxlZC4KLQotInBh
blJhbmdlIiBjb25maW5lcyB0aGUgcGFubmluZyB0byBzdGF5IHdpdGhpbiBhIHJhbmdlLCBlLmcu
IHdpdGggcGFuUmFuZ2U6Ci1bLTEwLCAyMF0gcGFubmluZyBzdG9wcyBhdCAtMTAgaW4gb25lIGVu
ZCBhbmQgYXQgMjAgaW4gdGhlIG90aGVyLiBFaXRoZXIgY2FuCi1iZSBudWxsLCBlLmcuIFstMTAs
IG51bGxdLiBJZiB5b3Ugc2V0IHBhblJhbmdlIHRvIGZhbHNlLCBwYW5uaW5nIG9uIHRoYXQgYXhp
cwotd2lsbCBiZSBkaXNhYmxlZC4KLQotRXhhbXBsZSBBUEkgdXNhZ2U6Ci0KLSAgICBwbG90ID0g
JC5wbG90KC4uLik7Ci0KLSAgICAvLyB6b29tIGRlZmF1bHQgYW1vdW50IGluIG9uIHRoZSBwaXhl
bCAoIDEwLCAyMCApCi0gICAgcGxvdC56b29tKHsgY2VudGVyOiB7IGxlZnQ6IDEwLCB0b3A6IDIw
IH0gfSk7Ci0KLSAgICAvLyB6b29tIG91dCBhZ2FpbgotICAgIHBsb3Quem9vbU91dCh7IGNlbnRl
cjogeyBsZWZ0OiAxMCwgdG9wOiAyMCB9IH0pOwotCi0gICAgLy8gem9vbSAyMDAlIGluIG9uIHRo
ZSBwaXhlbCAoMTAsIDIwKQotICAgIHBsb3Quem9vbSh7IGFtb3VudDogMiwgY2VudGVyOiB7IGxl
ZnQ6IDEwLCB0b3A6IDIwIH0gfSk7Ci0KLSAgICAvLyBwYW4gMTAwIHBpeGVscyB0byB0aGUgbGVm
dCBhbmQgMjAgZG93bgotICAgIHBsb3QucGFuKHsgbGVmdDogLTEwMCwgdG9wOiAyMCB9KQotCi1I
ZXJlLCAiY2VudGVyIiBzcGVjaWZpZXMgd2hlcmUgdGhlIGNlbnRlciBvZiB0aGUgem9vbWluZyBz
aG91bGQgaGFwcGVuLiBOb3RlCi10aGF0IHRoaXMgaXMgZGVmaW5lZCBpbiBwaXhlbCBzcGFjZSwg
bm90IHRoZSBzcGFjZSBvZiB0aGUgZGF0YSBwb2ludHMgKHlvdSBjYW4KLXVzZSB0aGUgcDJjIGhl
bHBlcnMgb24gdGhlIGF4ZXMgaW4gRmxvdCB0byBoZWxwIHlvdSBjb252ZXJ0IGJldHdlZW4gdGhl
c2UpLgotCi0iYW1vdW50IiBpcyB0aGUgYW1vdW50IHRvIHpvb20gdGhlIHZpZXdwb3J0IHJlbGF0
aXZlIHRvIHRoZSBjdXJyZW50IHJhbmdlLCBzbwotMSBpcyAxMDAlIChpLmUuIG5vIGNoYW5nZSks
IDEuNSBpcyAxNTAlICh6b29tIGluKSwgMC43IGlzIDcwJSAoem9vbSBvdXQpLiBZb3UKLWNhbiBz
ZXQgdGhlIGRlZmF1bHQgaW4gdGhlIG9wdGlvbnMuCi0KLSovCi0KLS8vIEZpcnN0IHR3byBkZXBl
bmRlbmNpZXMsIGpxdWVyeS5ldmVudC5kcmFnLmpzIGFuZAotLy8ganF1ZXJ5Lm1vdXNld2hlZWwu
anMsIHdlIHB1dCB0aGVtIGlubGluZSBoZXJlIHRvIHNhdmUgcGVvcGxlIHRoZQotLy8gZWZmb3J0
IG9mIGRvd25sb2FkaW5nIHRoZW0uCi0KLS8qCi1qcXVlcnkuZXZlbnQuZHJhZy5qcyB+IHYxLjUg
fiBDb3B5cmlnaHQgKGMpIDIwMDgsIFRocmVlIER1YiBNZWRpYSAoaHR0cDovL3RocmVlZHVibWVk
aWEuY29tKQotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIH4gaHR0cDovL3RocmVlZHVi
bWVkaWEuZ29vZ2xlY29kZS5jb20vZmlsZXMvTUlULUxJQ0VOU0UudHh0Ci0qLwotKGZ1bmN0aW9u
KEUpe0UuZm4uZHJhZz1mdW5jdGlvbihMLEssSil7aWYoSyl7dGhpcy5iaW5kKCJkcmFnc3RhcnQi
LEwpfWlmKEope3RoaXMuYmluZCgiZHJhZ2VuZCIsSil9cmV0dXJuICFMP3RoaXMudHJpZ2dlcigi
ZHJhZyIpOnRoaXMuYmluZCgiZHJhZyIsSz9LOkwpfTt2YXIgQT1FLmV2ZW50LEI9QS5zcGVjaWFs
LEY9Qi5kcmFnPXtub3Q6IjppbnB1dCIsZGlzdGFuY2U6MCx3aGljaDoxLGRyYWdnaW5nOmZhbHNl
LHNldHVwOmZ1bmN0aW9uKEope0o9RS5leHRlbmQoe2Rpc3RhbmNlOkYuZGlzdGFuY2Usd2hpY2g6
Ri53aGljaCxub3Q6Ri5ub3R9LEp8fHt9KTtKLmRpc3RhbmNlPUkoSi5kaXN0YW5jZSk7QS5hZGQo
dGhpcywibW91c2Vkb3duIixILEopO2lmKHRoaXMuYXR0YWNoRXZlbnQpe3RoaXMuYXR0YWNoRXZl
bnQoIm9uZHJhZ3N0YXJ0IixEKX19LHRlYXJkb3duOmZ1bmN0aW9uKCl7QS5yZW1vdmUodGhpcywi
bW91c2Vkb3duIixIKTtpZih0aGlzPT09Ri5kcmFnZ2luZyl7Ri5kcmFnZ2luZz1GLnByb3h5PWZh
bHNlfUcodGhpcyx0cnVlKTtpZih0aGlzLmRldGFjaEV2ZW50KXt0aGlzLmRldGFjaEV2ZW50KCJv
bmRyYWdzdGFydCIsRCl9fX07Qi5kcmFnc3RhcnQ9Qi5kcmFnZW5kPXtzZXR1cDpmdW5jdGlvbigp
e30sdGVhcmRvd246ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBIKEwpe3ZhciBLPXRoaXMsSixNPUwu
ZGF0YXx8e307aWYoTS5lbGVtKXtLPUwuZHJhZ1RhcmdldD1NLmVsZW07TC5kcmFnUHJveHk9Ri5w
cm94eXx8SztMLmN1cnNvck9mZnNldFg9TS5wYWdlWC1NLmxlZnQ7TC5jdXJzb3JPZmZzZXRZPU0u
cGFnZVktTS50b3A7TC5vZmZzZXRYPUwucGFnZVgtTC5jdXJzb3JPZmZzZXRYO0wub2Zmc2V0WT1M
LnBhZ2VZLUwuY3Vyc29yT2Zmc2V0WX1lbHNle2lmKEYuZHJhZ2dpbmd8fChNLndoaWNoPjAmJkwu
d2hpY2ghPU0ud2hpY2gpfHxFKEwudGFyZ2V0KS5pcyhNLm5vdCkpe3JldHVybiB9fXN3aXRjaChM
LnR5cGUpe2Nhc2UibW91c2Vkb3duIjpFLmV4dGVuZChNLEUoSykub2Zmc2V0KCkse2VsZW06Syx0
YXJnZXQ6TC50YXJnZXQscGFnZVg6TC5wYWdlWCxwYWdlWTpMLnBhZ2VZfSk7QS5hZGQoZG9jdW1l
bnQsIm1vdXNlbW92ZSBtb3VzZXVwIixILE0pO0coSyxmYWxzZSk7Ri5kcmFnZ2luZz1udWxsO3Jl
dHVybiBmYWxzZTtjYXNlICFGLmRyYWdnaW5nJiYibW91c2Vtb3ZlIjppZihJKEwucGFnZVgtTS5w
YWdlWCkrSShMLnBhZ2VZLU0ucGFnZVkpPE0uZGlzdGFuY2Upe2JyZWFrfUwudGFyZ2V0PU0udGFy
Z2V0O0o9QyhMLCJkcmFnc3RhcnQiLEspO2lmKEohPT1mYWxzZSl7Ri5kcmFnZ2luZz1LO0YucHJv
eHk9TC5kcmFnUHJveHk9RShKfHxLKVswXX1jYXNlIm1vdXNlbW92ZSI6aWYoRi5kcmFnZ2luZyl7
Sj1DKEwsImRyYWciLEspO2lmKEIuZHJvcCl7Qi5kcm9wLmFsbG93ZWQ9KEohPT1mYWxzZSk7Qi5k
cm9wLmhhbmRsZXIoTCl9aWYoSiE9PWZhbHNlKXticmVha31MLnR5cGU9Im1vdXNldXAifWNhc2Ui
bW91c2V1cCI6QS5yZW1vdmUoZG9jdW1lbnQsIm1vdXNlbW92ZSBtb3VzZXVwIixIKTtpZihGLmRy
YWdnaW5nKXtpZihCLmRyb3Ape0IuZHJvcC5oYW5kbGVyKEwpfUMoTCwiZHJhZ2VuZCIsSyl9RyhL
LHRydWUpO0YuZHJhZ2dpbmc9Ri5wcm94eT1NLmVsZW09ZmFsc2U7YnJlYWt9cmV0dXJuIHRydWV9
ZnVuY3Rpb24gQyhNLEssTCl7TS50eXBlPUs7dmFyIEo9RS5ldmVudC5oYW5kbGUuY2FsbChMLE0p
O3JldHVybiBKPT09ZmFsc2U/ZmFsc2U6Snx8TS5yZXN1bHR9ZnVuY3Rpb24gSShKKXtyZXR1cm4g
TWF0aC5wb3coSiwyKX1mdW5jdGlvbiBEKCl7cmV0dXJuKEYuZHJhZ2dpbmc9PT1mYWxzZSl9ZnVu
Y3Rpb24gRyhLLEope2lmKCFLKXtyZXR1cm4gfUsudW5zZWxlY3RhYmxlPUo/Im9mZiI6Im9uIjtL
Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSn07aWYoSy5zdHlsZSl7Sy5zdHlsZS5N
b3pVc2VyU2VsZWN0PUo/IiI6Im5vbmUifX19KShqUXVlcnkpOwotCi0vKiBqcXVlcnkubW91c2V3
aGVlbC5taW4uanMKLSAqIENvcHlyaWdodCAoYykgMjAxMSBCcmFuZG9uIEFhcm9uIChodHRwOi8v
YnJhbmRvbmFhcm9uLm5ldCkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTElD
RU5TRS50eHQpLgotICogVGhhbmtzIHRvOiBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1v
dXNlLXdoZWVsLyBmb3Igc29tZSBwb2ludGVycy4KLSAqIFRoYW5rcyB0bzogTWF0aGlhcyBCYW5r
KGh0dHA6Ly93d3cubWF0aGlhcy1iYW5rLmRlKSBmb3IgYSBzY29wZSBidWcgZml4LgotICogVGhh
bmtzIHRvOiBTZWFtdXMgTGVhaHkgZm9yIGFkZGluZyBkZWx0YVggYW5kIGRlbHRhWQotICoKLSAq
IFZlcnNpb246IDMuMC42Ci0gKgotICogUmVxdWlyZXM6IDEuMi4yKwotICovCi0oZnVuY3Rpb24o
ZCl7ZnVuY3Rpb24gZShhKXt2YXIgYj1hfHx3aW5kb3cuZXZlbnQsYz1bXS5zbGljZS5jYWxsKGFy
Z3VtZW50cywxKSxmPTAsZT0wLGc9MCxhPWQuZXZlbnQuZml4KGIpO2EudHlwZT0ibW91c2V3aGVl
bCI7Yi53aGVlbERlbHRhJiYoZj1iLndoZWVsRGVsdGEvMTIwKTtiLmRldGFpbCYmKGY9LWIuZGV0
YWlsLzMpO2c9Zjt2b2lkIDAhPT1iLmF4aXMmJmIuYXhpcz09PWIuSE9SSVpPTlRBTF9BWElTJiYo
Zz0wLGU9LTEqZik7dm9pZCAwIT09Yi53aGVlbERlbHRhWSYmKGc9Yi53aGVlbERlbHRhWS8xMjAp
O3ZvaWQgMCE9PWIud2hlZWxEZWx0YVgmJihlPS0xKmIud2hlZWxEZWx0YVgvMTIwKTtjLnVuc2hp
ZnQoYSxmLGUsZyk7cmV0dXJuKGQuZXZlbnQuZGlzcGF0Y2h8fGQuZXZlbnQuaGFuZGxlKS5hcHBs
eSh0aGlzLGMpfXZhciBjPVsiRE9NTW91c2VTY3JvbGwiLCJtb3VzZXdoZWVsIl07aWYoZC5ldmVu
dC5maXhIb29rcylmb3IodmFyIGg9Yy5sZW5ndGg7aDspZC5ldmVudC5maXhIb29rc1tjWy0taF1d
PWQuZXZlbnQubW91c2VIb29rcztkLmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbD17c2V0dXA6ZnVu
Y3Rpb24oKXtpZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpZm9yKHZhciBhPWMubGVuZ3RoO2E7KXRo
aXMuYWRkRXZlbnRMaXN0ZW5lcihjWy0tYV0sZSwhMSk7ZWxzZSB0aGlzLm9ubW91c2V3aGVlbD1l
fSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcilmb3IodmFy
IGE9Yy5sZW5ndGg7YTspdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGNbLS1hXSxlLCExKTtlbHNl
IHRoaXMub25tb3VzZXdoZWVsPW51bGx9fTtkLmZuLmV4dGVuZCh7bW91c2V3aGVlbDpmdW5jdGlv
bihhKXtyZXR1cm4gYT90aGlzLmJpbmQoIm1vdXNld2hlZWwiLGEpOnRoaXMudHJpZ2dlcigibW91
c2V3aGVlbCIpfSx1bm1vdXNld2hlZWw6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudW5iaW5kKCJt
b3VzZXdoZWVsIixhKX19KX0pKGpRdWVyeSk7Ci0KLQotCi0KLShmdW5jdGlvbiAoJCkgewotICAg
IHZhciBvcHRpb25zID0gewotICAgICAgICB4YXhpczogewotICAgICAgICAgICAgem9vbVJhbmdl
OiBudWxsLCAvLyBvciBbbnVtYmVyLCBudW1iZXJdIChtaW4gcmFuZ2UsIG1heCByYW5nZSkKLSAg
ICAgICAgICAgIHBhblJhbmdlOiBudWxsIC8vIG9yIFtudW1iZXIsIG51bWJlcl0gKG1pbiwgbWF4
KQotICAgICAgICB9LAotICAgICAgICB6b29tOiB7Ci0gICAgICAgICAgICBpbnRlcmFjdGl2ZTog
ZmFsc2UsCi0gICAgICAgICAgICB0cmlnZ2VyOiAiZGJsY2xpY2siLCAvLyBvciAiY2xpY2siIGZv
ciBzaW5nbGUgY2xpY2sKLSAgICAgICAgICAgIGFtb3VudDogMS41IC8vIGhvdyBtdWNoIHRvIHpv
b20gcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiwgMiA9IDIwMCUgKHpvb20gaW4pLCAwLjUg
PSA1MCUgKHpvb20gb3V0KQotICAgICAgICB9LAotICAgICAgICBwYW46IHsKLSAgICAgICAgICAg
IGludGVyYWN0aXZlOiBmYWxzZSwKLSAgICAgICAgICAgIGN1cnNvcjogIm1vdmUiLAotICAgICAg
ICAgICAgZnJhbWVSYXRlOiAyMAotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGZ1bmN0aW9uIGlu
aXQocGxvdCkgewotICAgICAgICBmdW5jdGlvbiBvblpvb21DbGljayhlLCB6b29tT3V0KSB7Ci0g
ICAgICAgICAgICB2YXIgYyA9IHBsb3Qub2Zmc2V0KCk7Ci0gICAgICAgICAgICBjLmxlZnQgPSBl
LnBhZ2VYIC0gYy5sZWZ0OwotICAgICAgICAgICAgYy50b3AgPSBlLnBhZ2VZIC0gYy50b3A7Ci0g
ICAgICAgICAgICBpZiAoem9vbU91dCkKLSAgICAgICAgICAgICAgICBwbG90Lnpvb21PdXQoeyBj
ZW50ZXI6IGMgfSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcGxvdC56b29t
KHsgY2VudGVyOiBjIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZVdo
ZWVsKGUsIGRlbHRhKSB7Ci0gICAgICAgICAgICBvblpvb21DbGljayhlLCBkZWx0YSA8IDApOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2
YXIgcHJldkN1cnNvciA9ICdkZWZhdWx0JywgcHJldlBhZ2VYID0gMCwgcHJldlBhZ2VZID0gMCwK
LSAgICAgICAgICAgIHBhblRpbWVvdXQgPSBudWxsOwotCi0gICAgICAgIGZ1bmN0aW9uIG9uRHJh
Z1N0YXJ0KGUpIHsKLSAgICAgICAgICAgIGlmIChlLndoaWNoICE9IDEpICAvLyBvbmx5IGFjY2Vw
dCBsZWZ0LWNsaWNrCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
dmFyIGMgPSBwbG90LmdldFBsYWNlaG9sZGVyKCkuY3NzKCdjdXJzb3InKTsKLSAgICAgICAgICAg
IGlmIChjKQotICAgICAgICAgICAgICAgIHByZXZDdXJzb3IgPSBjOwotICAgICAgICAgICAgcGxv
dC5nZXRQbGFjZWhvbGRlcigpLmNzcygnY3Vyc29yJywgcGxvdC5nZXRPcHRpb25zKCkucGFuLmN1
cnNvcik7Ci0gICAgICAgICAgICBwcmV2UGFnZVggPSBlLnBhZ2VYOwotICAgICAgICAgICAgcHJl
dlBhZ2VZID0gZS5wYWdlWTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24g
b25EcmFnKGUpIHsKLSAgICAgICAgICAgIHZhciBmcmFtZVJhdGUgPSBwbG90LmdldE9wdGlvbnMo
KS5wYW4uZnJhbWVSYXRlOwotICAgICAgICAgICAgaWYgKHBhblRpbWVvdXQgfHwgIWZyYW1lUmF0
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHBhblRpbWVvdXQgPSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICBwbG90LnBhbih7IGxlZnQ6
IHByZXZQYWdlWCAtIGUucGFnZVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHBy
ZXZQYWdlWSAtIGUucGFnZVkgfSk7Ci0gICAgICAgICAgICAgICAgcHJldlBhZ2VYID0gZS5wYWdl
WDsKLSAgICAgICAgICAgICAgICBwcmV2UGFnZVkgPSBlLnBhZ2VZOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBh
blRpbWVvdXQgPSBudWxsOwotICAgICAgICAgICAgfSwgMSAvIGZyYW1lUmF0ZSAqIDEwMDApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25EcmFnRW5kKGUpIHsKLSAgICAgICAgICAg
IGlmIChwYW5UaW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHBhblRpbWVv
dXQpOwotICAgICAgICAgICAgICAgIHBhblRpbWVvdXQgPSBudWxsOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS5j
c3MoJ2N1cnNvcicsIHByZXZDdXJzb3IpOwotICAgICAgICAgICAgcGxvdC5wYW4oeyBsZWZ0OiBw
cmV2UGFnZVggLSBlLnBhZ2VYLAotICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHByZXZQYWdl
WSAtIGUucGFnZVkgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZ1bmN0aW9uIGJp
bmRFdmVudHMocGxvdCwgZXZlbnRIb2xkZXIpIHsKLSAgICAgICAgICAgIHZhciBvID0gcGxvdC5n
ZXRPcHRpb25zKCk7Ci0gICAgICAgICAgICBpZiAoby56b29tLmludGVyYWN0aXZlKSB7Ci0gICAg
ICAgICAgICAgICAgZXZlbnRIb2xkZXJbby56b29tLnRyaWdnZXJdKG9uWm9vbUNsaWNrKTsKLSAg
ICAgICAgICAgICAgICBldmVudEhvbGRlci5tb3VzZXdoZWVsKG9uTW91c2VXaGVlbCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvLnBhbi5pbnRlcmFjdGl2ZSkgewotICAgICAg
ICAgICAgICAgIGV2ZW50SG9sZGVyLmJpbmQoImRyYWdzdGFydCIsIHsgZGlzdGFuY2U6IDEwIH0s
IG9uRHJhZ1N0YXJ0KTsKLSAgICAgICAgICAgICAgICBldmVudEhvbGRlci5iaW5kKCJkcmFnIiwg
b25EcmFnKTsKLSAgICAgICAgICAgICAgICBldmVudEhvbGRlci5iaW5kKCJkcmFnZW5kIiwgb25E
cmFnRW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHBsb3Quem9vbU91
dCA9IGZ1bmN0aW9uIChhcmdzKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ3MpCi0gICAgICAgICAg
ICAgICAgYXJncyA9IHt9OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWFyZ3MuYW1v
dW50KQotICAgICAgICAgICAgICAgIGFyZ3MuYW1vdW50ID0gcGxvdC5nZXRPcHRpb25zKCkuem9v
bS5hbW91bnQ7Ci0KLSAgICAgICAgICAgIGFyZ3MuYW1vdW50ID0gMSAvIGFyZ3MuYW1vdW50Owot
ICAgICAgICAgICAgcGxvdC56b29tKGFyZ3MpOwotICAgICAgICB9OwotICAgICAgICAKLSAgICAg
ICAgcGxvdC56b29tID0gZnVuY3Rpb24gKGFyZ3MpIHsKLSAgICAgICAgICAgIGlmICghYXJncykK
LSAgICAgICAgICAgICAgICBhcmdzID0ge307Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZh
ciBjID0gYXJncy5jZW50ZXIsCi0gICAgICAgICAgICAgICAgYW1vdW50ID0gYXJncy5hbW91bnQg
fHwgcGxvdC5nZXRPcHRpb25zKCkuem9vbS5hbW91bnQsCi0gICAgICAgICAgICAgICAgdyA9IHBs
b3Qud2lkdGgoKSwgaCA9IHBsb3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGlmICghYykKLSAg
ICAgICAgICAgICAgICBjID0geyBsZWZ0OiB3IC8gMiwgdG9wOiBoIC8gMiB9OwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgdmFyIHhmID0gYy5sZWZ0IC8gdywKLSAgICAgICAgICAgICAg
ICB5ZiA9IGMudG9wIC8gaCwKLSAgICAgICAgICAgICAgICBtaW5tYXggPSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHg6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogYy5sZWZ0IC0geGYg
KiB3IC8gYW1vdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBjLmxlZnQgKyAoMSAt
IHhmKSAqIHcgLyBhbW91bnQKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAg
ICAgICAgeTogewotICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBjLnRvcCAtIHlmICogaCAv
IGFtb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heDogYy50b3AgKyAoMSAtIHlmKSAq
IGggLyBhbW91bnQKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICQuZWFjaChwbG90LmdldEF4ZXMoKSwgZnVuY3Rpb24oXywgYXhpcykgewot
ICAgICAgICAgICAgICAgIHZhciBvcHRzID0gYXhpcy5vcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICBtaW4gPSBtaW5tYXhbYXhpcy5kaXJlY3Rpb25dLm1pbiwKLSAgICAgICAgICAgICAgICAg
ICAgbWF4ID0gbWlubWF4W2F4aXMuZGlyZWN0aW9uXS5tYXgsCi0gICAgICAgICAgICAgICAgICAg
IHpyID0gb3B0cy56b29tUmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgIHByID0gb3B0cy5wYW5S
YW5nZTsKLQotICAgICAgICAgICAgICAgIGlmICh6ciA9PT0gZmFsc2UpIC8vIG5vIHpvb21pbmcg
b24gdGhpcyBheGlzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbWluID0gYXhpcy5jMnAobWluKTsKLSAgICAgICAgICAg
ICAgICBtYXggPSBheGlzLmMycChtYXgpOwotICAgICAgICAgICAgICAgIGlmIChtaW4gPiBtYXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIG1pbiA8IG1heAotICAgICAgICAg
ICAgICAgICAgICB2YXIgdG1wID0gbWluOwotICAgICAgICAgICAgICAgICAgICBtaW4gPSBtYXg7
Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IHRtcDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvL0NoZWNrIHRoYXQgd2UgYXJlIGluIHBhblJhbmdlCi0gICAgICAgICAg
ICAgICAgaWYgKHByKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwclswXSAhPSBudWxsICYm
IG1pbiA8IHByWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBwclswXTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJbMV0gIT0gbnVs
bCAmJiBtYXggPiBwclsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcHJbMV07
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47Ci0gICAgICAgICAgICAgICAgaWYgKHpyICYmCi0g
ICAgICAgICAgICAgICAgICAgICgoenJbMF0gIT0gbnVsbCAmJiByYW5nZSA8IHpyWzBdKSB8fAot
ICAgICAgICAgICAgICAgICAgICAgKHpyWzFdICE9IG51bGwgJiYgcmFuZ2UgPiB6clsxXSkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBvcHRzLm1pbiA9IG1pbjsKLSAgICAgICAgICAgICAgICBvcHRzLm1heCA9IG1heDsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwbG90LnNldHVwR3JpZCgpOwot
ICAgICAgICAgICAgcGxvdC5kcmF3KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
YXJncy5wcmV2ZW50RXZlbnQpCi0gICAgICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigp
LnRyaWdnZXIoInBsb3R6b29tIiwgWyBwbG90LCBhcmdzIF0pOwotICAgICAgICB9OwotCi0gICAg
ICAgIHBsb3QucGFuID0gZnVuY3Rpb24gKGFyZ3MpIHsKLSAgICAgICAgICAgIHZhciBkZWx0YSA9
IHsKLSAgICAgICAgICAgICAgICB4OiArYXJncy5sZWZ0LAotICAgICAgICAgICAgICAgIHk6ICth
cmdzLnRvcAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgaWYgKGlzTmFOKGRlbHRhLngp
KQotICAgICAgICAgICAgICAgIGRlbHRhLnggPSAwOwotICAgICAgICAgICAgaWYgKGlzTmFOKGRl
bHRhLnkpKQotICAgICAgICAgICAgICAgIGRlbHRhLnkgPSAwOwotCi0gICAgICAgICAgICAkLmVh
Y2gocGxvdC5nZXRBeGVzKCksIGZ1bmN0aW9uIChfLCBheGlzKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIG9wdHMgPSBheGlzLm9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIG1pbiwgbWF4LCBk
ID0gZGVsdGFbYXhpcy5kaXJlY3Rpb25dOwotCi0gICAgICAgICAgICAgICAgbWluID0gYXhpcy5j
MnAoYXhpcy5wMmMoYXhpcy5taW4pICsgZCksCi0gICAgICAgICAgICAgICAgbWF4ID0gYXhpcy5j
MnAoYXhpcy5wMmMoYXhpcy5tYXgpICsgZCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcHIgPSBv
cHRzLnBhblJhbmdlOwotICAgICAgICAgICAgICAgIGlmIChwciA9PT0gZmFsc2UpIC8vIG5vIHBh
bm5pbmcgb24gdGhpcyBheGlzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocHIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY2hlY2sgd2hldGhlciB3ZSBoaXQgdGhlIHdhbGwKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHByWzBdICE9IG51bGwgJiYgcHJbMF0gPiBtaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGQgPSBwclswXSAtIG1pbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbiArPSBkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4ICs9IGQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChwclsxXSAhPSBudWxs
ICYmIHByWzFdIDwgbWF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gcHJbMV0gLSBt
YXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW4gKz0gZDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1heCArPSBkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG9wdHMubWluID0gbWluOwotICAg
ICAgICAgICAgICAgIG9wdHMubWF4ID0gbWF4OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHBsb3Quc2V0dXBHcmlkKCk7Ci0gICAgICAgICAgICBwbG90LmRyYXco
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhcmdzLnByZXZlbnRFdmVudCkKLSAg
ICAgICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHBhbiIsIFsg
cGxvdCwgYXJncyBdKTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBzaHV0ZG93bihw
bG90LCBldmVudEhvbGRlcikgewotICAgICAgICAgICAgZXZlbnRIb2xkZXIudW5iaW5kKHBsb3Qu
Z2V0T3B0aW9ucygpLnpvb20udHJpZ2dlciwgb25ab29tQ2xpY2spOwotICAgICAgICAgICAgZXZl
bnRIb2xkZXIudW5iaW5kKCJtb3VzZXdoZWVsIiwgb25Nb3VzZVdoZWVsKTsKLSAgICAgICAgICAg
IGV2ZW50SG9sZGVyLnVuYmluZCgiZHJhZ3N0YXJ0Iiwgb25EcmFnU3RhcnQpOwotICAgICAgICAg
ICAgZXZlbnRIb2xkZXIudW5iaW5kKCJkcmFnIiwgb25EcmFnKTsKLSAgICAgICAgICAgIGV2ZW50
SG9sZGVyLnVuYmluZCgiZHJhZ2VuZCIsIG9uRHJhZ0VuZCk7Ci0gICAgICAgICAgICBpZiAocGFu
VGltZW91dCkKLSAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocGFuVGltZW91dCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBsb3QuaG9va3MuYmluZEV2ZW50cy5wdXNoKGJpbmRF
dmVudHMpOwotICAgICAgICBwbG90Lmhvb2tzLnNodXRkb3duLnB1c2goc2h1dGRvd24pOwotICAg
IH0KLSAgICAKLSAgICAkLnBsb3QucGx1Z2lucy5wdXNoKHsKLSAgICAgICAgaW5pdDogaW5pdCwK
LSAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgbmFtZTogJ25hdmlnYXRlJywKLSAg
ICAgICAgdmVyc2lvbjogJzEuMycKLSAgICB9KTsKLX0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnBsdWdpbnMuanMg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnBsdWdpbnMu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMjg4ZTZhNGVlYzExMDBjZjQ5Nzk4
ZjAwYWM1MWQyY2RmY2UwZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5w
bHVnaW5zLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ3Jvc3NoYWlyCi0o
ZnVuY3Rpb24oaCl7aC5wbG90LnBsdWdpbnMucHVzaCh7aW5pdDpmdW5jdGlvbihhKXtmdW5jdGlv
biBlKCl7IWMubG9ja2VkJiYtMSE9Yy54JiYoYy54PS0xLGEudHJpZ2dlclJlZHJhd092ZXJsYXko
KSl9ZnVuY3Rpb24gZyhkKXtpZighYy5sb2NrZWQpaWYoYS5nZXRTZWxlY3Rpb24mJmEuZ2V0U2Vs
ZWN0aW9uKCkpYy54PS0xO2Vsc2V7dmFyIGI9YS5vZmZzZXQoKTtjLng9TWF0aC5tYXgoMCxNYXRo
Lm1pbihkLnBhZ2VYLWIubGVmdCxhLndpZHRoKCkpKTtjLnk9TWF0aC5tYXgoMCxNYXRoLm1pbihk
LnBhZ2VZLWIudG9wLGEuaGVpZ2h0KCkpKTthLnRyaWdnZXJSZWRyYXdPdmVybGF5KCl9fXZhciBj
PXt4Oi0xLHk6LTEsbG9ja2VkOiExfTthLnNldENyb3NzaGFpcj1mdW5jdGlvbihkKXtkPyhkPWEu
cDJjKGQpLGMueD1NYXRoLm1heCgwLE1hdGgubWluKGQubGVmdCxhLndpZHRoKCkpKSxjLnk9TWF0
aC5tYXgoMCxNYXRoLm1pbihkLnRvcCxhLmhlaWdodCgpKSkpOmMueD0tMTsKLWEudHJpZ2dlclJl
ZHJhd092ZXJsYXkoKX07YS5jbGVhckNyb3NzaGFpcj1hLnNldENyb3NzaGFpcjthLmxvY2tDcm9z
c2hhaXI9ZnVuY3Rpb24oZCl7ZCYmYS5zZXRDcm9zc2hhaXIoZCk7Yy5sb2NrZWQ9ITB9O2EudW5s
b2NrQ3Jvc3NoYWlyPWZ1bmN0aW9uKCl7Yy5sb2NrZWQ9ITF9O2EuaG9va3MuYmluZEV2ZW50cy5w
dXNoKGZ1bmN0aW9uKGEsYil7YS5nZXRPcHRpb25zKCkuY3Jvc3NoYWlyLm1vZGUmJihiLm1vdXNl
b3V0KGUpLGIubW91c2Vtb3ZlKGcpKX0pO2EuaG9va3MuZHJhd092ZXJsYXkucHVzaChmdW5jdGlv
bihhLGIpe3ZhciBmPWEuZ2V0T3B0aW9ucygpLmNyb3NzaGFpcjtpZihmLm1vZGUpe3ZhciBlPWEu
Z2V0UGxvdE9mZnNldCgpO2Iuc2F2ZSgpO2IudHJhbnNsYXRlKGUubGVmdCxlLnRvcCk7LTEhPWMu
eCYmKGIuc3Ryb2tlU3R5bGU9Zi5jb2xvcixiLmxpbmVXaWR0aD1mLmxpbmVXaWR0aCxiLmxpbmVK
b2luPSJyb3VuZCIsYi5iZWdpblBhdGgoKSwtMSE9Zi5tb2RlLmluZGV4T2YoIngiKSYmCi0oYi5t
b3ZlVG8oYy54LDApLGIubGluZVRvKGMueCxhLmhlaWdodCgpKSksLTEhPWYubW9kZS5pbmRleE9m
KCJ5IikmJihiLm1vdmVUbygwLGMueSksYi5saW5lVG8oYS53aWR0aCgpLGMueSkpLGIuc3Ryb2tl
KCkpO2IucmVzdG9yZSgpfX0pO2EuaG9va3Muc2h1dGRvd24ucHVzaChmdW5jdGlvbihhLGIpe2Iu
dW5iaW5kKCJtb3VzZW91dCIsZSk7Yi51bmJpbmQoIm1vdXNlbW92ZSIsZyl9KX0sb3B0aW9uczp7
Y3Jvc3NoYWlyOnttb2RlOm51bGwsY29sb3I6InJnYmEoMTcwLCAwLCAwLCAwLjgwKSIsbGluZVdp
ZHRoOjF9fSxuYW1lOiJjcm9zc2hhaXIiLHZlcnNpb246IjEuMCJ9KX0pKGpRdWVyeSk7Ci0KLS8v
IFJlc2l6ZQotKGZ1bmN0aW9uKGEsZixpKXtmdW5jdGlvbiBkKCl7az1mW2ddKGZ1bmN0aW9uKCl7
Yi5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMud2lkdGgoKSxmPWMuaGVpZ2h0KCks
Yj1hLmRhdGEodGhpcyxqKTtpZihkIT09Yi53fHxmIT09Yi5oKWMudHJpZ2dlcihoLFtiLnc9ZCxi
Lmg9Zl0pfSk7ZCgpfSxlW2xdKX12YXIgYj1hKFtdKSxlPWEucmVzaXplPWEuZXh0ZW5kKGEucmVz
aXplLHt9KSxrLGc9InNldFRpbWVvdXQiLGg9InJlc2l6ZSIsaj1oKyItc3BlY2lhbC1ldmVudCIs
bD0iZGVsYXkiO2VbbF09MjUwO2UudGhyb3R0bGVXaW5kb3c9ITA7YS5ldmVudC5zcGVjaWFsW2hd
PXtzZXR1cDpmdW5jdGlvbigpe2lmKCFlLnRocm90dGxlV2luZG93JiZ0aGlzW2ddKXJldHVybiEx
O3ZhciBjPWEodGhpcyk7Yj1iLmFkZChjKTthLmRhdGEodGhpcyxqLHt3OmMud2lkdGgoKSxoOmMu
aGVpZ2h0KCl9KTsxPT09Yi5sZW5ndGgmJmQoKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZighZS50
aHJvdHRsZVdpbmRvdyYmCi10aGlzW2ddKXJldHVybiExO3ZhciBjPWEodGhpcyk7Yj1iLm5vdChj
KTtjLnJlbW92ZURhdGEoaik7Yi5sZW5ndGh8fGNsZWFyVGltZW91dChrKX0sYWRkOmZ1bmN0aW9u
KGMpe2Z1bmN0aW9uIGQoYyxmLGUpe3ZhciBnPWEodGhpcyksaD1hLmRhdGEodGhpcyxqKTtoLnc9
ZiE9PWk/ZjpnLndpZHRoKCk7aC5oPWUhPT1pP2U6Zy5oZWlnaHQoKTtiLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKX1pZighZS50aHJvdHRsZVdpbmRvdyYmdGhpc1tnXSlyZXR1cm4hMTt2YXIgYjtpZihh
LmlzRnVuY3Rpb24oYykpcmV0dXJuIGI9YyxkO2I9Yy5oYW5kbGVyO2MuaGFuZGxlcj1kfX19KShq
UXVlcnksdGhpcyk7Ci0oZnVuY3Rpb24oYSl7YS5wbG90LnBsdWdpbnMucHVzaCh7aW5pdDpmdW5j
dGlvbihhKXtmdW5jdGlvbiBpKCl7dmFyIGQ9YS5nZXRQbGFjZWhvbGRlcigpOzA9PWQud2lkdGgo
KXx8MD09ZC5oZWlnaHQoKXx8KGEucmVzaXplKCksYS5zZXR1cEdyaWQoKSxhLmRyYXcoKSl9YS5o
b29rcy5iaW5kRXZlbnRzLnB1c2goZnVuY3Rpb24oYSl7YS5nZXRQbGFjZWhvbGRlcigpLnJlc2l6
ZShpKX0pO2EuaG9va3Muc2h1dGRvd24ucHVzaChmdW5jdGlvbihhKXthLmdldFBsYWNlaG9sZGVy
KCkudW5iaW5kKCJyZXNpemUiLGkpfSl9LG9wdGlvbnM6e30sbmFtZToicmVzaXplIix2ZXJzaW9u
OiIxLjAifSl9KShqUXVlcnkpOwotCi0vLyBTZWxlY3Rpb24KLShmdW5jdGlvbihrKXtrLnBsb3Qu
cGx1Z2lucy5wdXNoKHtpbml0OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIHAoYyl7Yi5hY3RpdmUmJihx
KGMpLGEuZ2V0UGxhY2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90c2VsZWN0aW5nIixbbigpXSkpfWZ1
bmN0aW9uIHIoYyl7MT09Yy53aGljaCYmKGRvY3VtZW50LmJvZHkuZm9jdXMoKSx2b2lkIDAhPT1k
b2N1bWVudC5vbnNlbGVjdHN0YXJ0JiZudWxsPT1oLm9uc2VsZWN0c3RhcnQmJihoLm9uc2VsZWN0
c3RhcnQ9ZG9jdW1lbnQub25zZWxlY3RzdGFydCxkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0
aW9uKCl7cmV0dXJuITF9KSx2b2lkIDAhPT1kb2N1bWVudC5vbmRyYWcmJm51bGw9PWgub25kcmFn
JiYoaC5vbmRyYWc9ZG9jdW1lbnQub25kcmFnLGRvY3VtZW50Lm9uZHJhZz1mdW5jdGlvbigpe3Jl
dHVybiExfSkscyhiLmZpcnN0LGMpLGIuYWN0aXZlPSEwLGw9ZnVuY3Rpb24oYyl7bD1udWxsO3Zv
aWQgMCE9PWRvY3VtZW50Lm9uc2VsZWN0c3RhcnQmJgotKGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9
aC5vbnNlbGVjdHN0YXJ0KTt2b2lkIDAhPT1kb2N1bWVudC5vbmRyYWcmJihkb2N1bWVudC5vbmRy
YWc9aC5vbmRyYWcpO2IuYWN0aXZlPSExO3EoYyk7bSgpP3QoKTooYS5nZXRQbGFjZWhvbGRlcigp
LnRyaWdnZXIoInBsb3R1bnNlbGVjdGVkIixbXSksYS5nZXRQbGFjZWhvbGRlcigpLnRyaWdnZXIo
InBsb3RzZWxlY3RpbmciLFtudWxsXSkpfSxrKGRvY3VtZW50KS5vbmUoIm1vdXNldXAiLGwpKX1m
dW5jdGlvbiBuKCl7aWYoIW0oKSlyZXR1cm4gbnVsbDt2YXIgYz17fSxqPWIuZmlyc3QsZD1iLnNl
Y29uZDtrLmVhY2goYS5nZXRBeGVzKCksZnVuY3Rpb24oYixhKXtpZihhLnVzZWQpe3ZhciBmPWEu
YzJwKGpbYS5kaXJlY3Rpb25dKSxpPWEuYzJwKGRbYS5kaXJlY3Rpb25dKTtjW2JdPXtmcm9tOk1h
dGgubWluKGYsaSksdG86TWF0aC5tYXgoZixpKX19fSk7cmV0dXJuIGN9ZnVuY3Rpb24gdCgpe3Zh
ciBjPW4oKTthLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHNlbGVjdGVkIiwKLVtjXSk7
Yy54YXhpcyYmYy55YXhpcyYmYS5nZXRQbGFjZWhvbGRlcigpLnRyaWdnZXIoInNlbGVjdGVkIixb
e3gxOmMueGF4aXMuZnJvbSx5MTpjLnlheGlzLmZyb20seDI6Yy54YXhpcy50byx5MjpjLnlheGlz
LnRvfV0pfWZ1bmN0aW9uIHMoYyxqKXt2YXIgZD1hLmdldE9wdGlvbnMoKSxlPWEuZ2V0UGxhY2Vo
b2xkZXIoKS5vZmZzZXQoKSxnPWEuZ2V0UGxvdE9mZnNldCgpLGY9ai5wYWdlWC1lLmxlZnQtZy5s
ZWZ0LGk9YS53aWR0aCgpO2MueD0wPmY/MDpmPmk/aTpmO2U9ai5wYWdlWS1lLnRvcC1nLnRvcDtn
PWEuaGVpZ2h0KCk7Yy55PTA+ZT8wOmU+Zz9nOmU7InkiPT1kLnNlbGVjdGlvbi5tb2RlJiYoYy54
PWM9PWIuZmlyc3Q/MDphLndpZHRoKCkpOyJ4Ij09ZC5zZWxlY3Rpb24ubW9kZSYmKGMueT1jPT1i
LmZpcnN0PzA6YS5oZWlnaHQoKSl9ZnVuY3Rpb24gcShjKXtudWxsIT1jLnBhZ2VYJiYocyhiLnNl
Y29uZCxjKSxtKCk/KGIuc2hvdz0hMCxhLnRyaWdnZXJSZWRyYXdPdmVybGF5KCkpOgotdSghMCkp
fWZ1bmN0aW9uIHUoYyl7Yi5zaG93JiYoYi5zaG93PSExLGEudHJpZ2dlclJlZHJhd092ZXJsYXko
KSxjfHxhLmdldFBsYWNlaG9sZGVyKCkudHJpZ2dlcigicGxvdHVuc2VsZWN0ZWQiLFtdKSl9ZnVu
Y3Rpb24gdihjLGIpe3ZhciBkLGUsZyxmLGk9YS5nZXRBeGVzKCksaDtmb3IoaCBpbiBpKWlmKGQ9
aVtoXSxkLmRpcmVjdGlvbj09YiYmKGY9YitkLm4rImF4aXMiLCFjW2ZdJiYxPT1kLm4mJihmPWIr
ImF4aXMiKSxjW2ZdKSl7ZT1jW2ZdLmZyb207Zz1jW2ZdLnRvO2JyZWFrfWNbZl18fChkPSJ4Ij09
Yj9hLmdldFhBeGVzKClbMF06YS5nZXRZQXhlcygpWzBdLGU9Y1tiKyIxIl0sZz1jW2IrIjIiXSk7
bnVsbCE9ZSYmKG51bGwhPWcmJmU+ZykmJihmPWUsZT1nLGc9Zik7cmV0dXJue2Zyb206ZSx0bzpn
LGF4aXM6ZH19ZnVuY3Rpb24gbSgpe3JldHVybiAwLjE8PU1hdGguYWJzKGIuc2Vjb25kLngtYi5m
aXJzdC54KSYmMC4xPD1NYXRoLmFicyhiLnNlY29uZC55LWIuZmlyc3QueSl9Ci12YXIgYj17Zmly
c3Q6e3g6LTEseTotMX0sc2Vjb25kOnt4Oi0xLHk6LTF9LHNob3c6ITEsYWN0aXZlOiExfSxoPXt9
LGw9bnVsbDthLmNsZWFyU2VsZWN0aW9uPXU7YS5zZXRTZWxlY3Rpb249ZnVuY3Rpb24oYyxqKXt2
YXIgZCxlPWEuZ2V0T3B0aW9ucygpOyJ5Ij09ZS5zZWxlY3Rpb24ubW9kZT8oYi5maXJzdC54PTAs
Yi5zZWNvbmQueD1hLndpZHRoKCkpOihkPXYoYywieCIpLGIuZmlyc3QueD1kLmF4aXMucDJjKGQu
ZnJvbSksYi5zZWNvbmQueD1kLmF4aXMucDJjKGQudG8pKTsieCI9PWUuc2VsZWN0aW9uLm1vZGU/
KGIuZmlyc3QueT0wLGIuc2Vjb25kLnk9YS5oZWlnaHQoKSk6KGQ9dihjLCJ5IiksYi5maXJzdC55
PWQuYXhpcy5wMmMoZC5mcm9tKSxiLnNlY29uZC55PWQuYXhpcy5wMmMoZC50bykpO2Iuc2hvdz0h
MDthLnRyaWdnZXJSZWRyYXdPdmVybGF5KCk7IWomJm0oKSYmdCgpfTthLmdldFNlbGVjdGlvbj1u
O2EuaG9va3MuYmluZEV2ZW50cy5wdXNoKGZ1bmN0aW9uKGMsCi1iKXtudWxsIT1jLmdldE9wdGlv
bnMoKS5zZWxlY3Rpb24ubW9kZSYmKGIubW91c2Vtb3ZlKHApLGIubW91c2Vkb3duKHIpKX0pO2Eu
aG9va3MuZHJhd092ZXJsYXkucHVzaChmdW5jdGlvbihjLGEpe2lmKGIuc2hvdyYmbSgpKXt2YXIg
ZD1jLmdldFBsb3RPZmZzZXQoKSxlPWMuZ2V0T3B0aW9ucygpO2Euc2F2ZSgpO2EudHJhbnNsYXRl
KGQubGVmdCxkLnRvcCk7ZD1rLmNvbG9yLnBhcnNlKGUuc2VsZWN0aW9uLmNvbG9yKTthLnN0cm9r
ZVN0eWxlPWQuc2NhbGUoImEiLDAuOCkudG9TdHJpbmcoKTthLmxpbmVXaWR0aD0xO2EubGluZUpv
aW49InJvdW5kIjthLmZpbGxTdHlsZT1kLnNjYWxlKCJhIiwwLjQpLnRvU3RyaW5nKCk7dmFyIGQ9
TWF0aC5taW4oYi5maXJzdC54LGIuc2Vjb25kLngpLGU9TWF0aC5taW4oYi5maXJzdC55LGIuc2Vj
b25kLnkpLGc9TWF0aC5hYnMoYi5zZWNvbmQueC1iLmZpcnN0LngpLGY9TWF0aC5hYnMoYi5zZWNv
bmQueS1iLmZpcnN0LnkpO2EuZmlsbFJlY3QoZCwKLWUsZyxmKTthLnN0cm9rZVJlY3QoZCxlLGcs
Zik7YS5yZXN0b3JlKCl9fSk7YS5ob29rcy5zaHV0ZG93bi5wdXNoKGZ1bmN0aW9uKGIsYSl7YS51
bmJpbmQoIm1vdXNlbW92ZSIscCk7YS51bmJpbmQoIm1vdXNlZG93biIscik7bCYmayhkb2N1bWVu
dCkudW5iaW5kKCJtb3VzZXVwIixsKX0pfSxvcHRpb25zOntzZWxlY3Rpb246e21vZGU6bnVsbCxj
b2xvcjoiI2U4Y2ZhYyJ9fSxuYW1lOiJzZWxlY3Rpb24iLHZlcnNpb246IjEuMSJ9KX0pKGpRdWVy
eSk7Ci0KLS8vIEZpbGxiZXR3ZWVuCi0oZnVuY3Rpb24oail7ai5wbG90LnBsdWdpbnMucHVzaCh7
aW5pdDpmdW5jdGlvbihqKXtqLmhvb2tzLnByb2Nlc3NEYXRhcG9pbnRzLnB1c2goZnVuY3Rpb24o
YSxoLHEpe2lmKG51bGwhPWguZmlsbEJldHdlZW4pe3ZhciBlO2E6e3ZhciBhPWEuZ2V0RGF0YSgp
LGM7Zm9yKGM9MDtjPGEubGVuZ3RoOysrYylpZihhW2NdLmlkPT1oLmZpbGxCZXR3ZWVuKXtlPWFb
Y107YnJlYWsgYX0ibnVtYmVyIj09dHlwZW9mIGguZmlsbEJldHdlZW4/KGM9aC5maWxsQmV0d2Vl
bixlPTA+Y3x8Yz49YS5sZW5ndGg/bnVsbDphW2NdKTplPW51bGx9aWYoZSl7YT1xLnBvaW50c2l6
ZTtjPXEucG9pbnRzO3ZhciBrPWUuZGF0YXBvaW50cy5wb2ludHNpemU7ZT1lLmRhdGFwb2ludHMu
cG9pbnRzO2Zvcih2YXIgZD1bXSxpLGosbCxuLHA9aC5saW5lcy5zaG93LHM9MjxhJiZxLmZvcm1h
dFsyXS55LHQ9cCYmaC5saW5lcy5zdGVwcyxyPSEwLGI9MCxmPTAsZzshKGI+PWMubGVuZ3RoKTsp
e2c9ZC5sZW5ndGg7Ci1pZihudWxsPT1jW2JdKXtmb3IobT0wO208YTsrK20pZC5wdXNoKGNbYitt
XSk7Yis9YX1lbHNlIGlmKGY+PWUubGVuZ3RoKXtpZighcClmb3IobT0wO208YTsrK20pZC5wdXNo
KGNbYittXSk7Yis9YX1lbHNlIGlmKG51bGw9PWVbZl0pe2ZvcihtPTA7bTxhOysrbSlkLnB1c2go
bnVsbCk7cj0hMDtmKz1rfWVsc2V7aT1jW2JdO2o9Y1tiKzFdO2g9ZVtmXTtsPWVbZisxXTtuPTA7
aWYoaT09aCl7Zm9yKG09MDttPGE7KyttKWQucHVzaChjW2IrbV0pO249bDtiKz1hO2YrPWt9ZWxz
ZSBpZihpPmgpe2lmKHAmJjA8YiYmbnVsbCE9Y1tiLWFdKXtpPWorKGNbYi1hKzFdLWopKihoLWkp
LyhjW2ItYV0taSk7ZC5wdXNoKGgpO2QucHVzaChpKTtmb3IobT0yO208YTsrK20pZC5wdXNoKGNb
YittXSk7bj1sfWYrPWt9ZWxzZXtpZihyJiZwKXtiKz1hO2NvbnRpbnVlfWZvcihtPTA7bTxhOysr
bSlkLnB1c2goY1tiK21dKTtwJiYoMDxmJiZudWxsIT1lW2Yta10pJiYobj1sKyhlW2YtaysxXS1s
KSoKLShpLWgpLyhlW2Yta10taCkpO2IrPWF9cj0hMTtnIT1kLmxlbmd0aCYmcyYmKGRbZysyXT1u
KX1pZih0JiZnIT1kLmxlbmd0aCYmMDxnJiZudWxsIT1kW2ddJiZkW2ddIT1kW2ctYV0mJmRbZysx
XSE9ZFtnLWErMV0pe2ZvcihtPTA7bTxhOysrbSlkW2crYSttXT1kW2crbV07ZFtnKzFdPWRbZy1h
KzFdfX1xLnBvaW50cz1kfX19KX0sb3B0aW9uczp7c2VyaWVzOntmaWxsQmV0d2VlbjpudWxsfX0s
bmFtZToiZmlsbGJldHdlZW4iLHZlcnNpb246IjEuMCJ9KX0pKGpRdWVyeSk7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnJlc2l6ZS5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QucmVzaXpl
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmNmOTNlZjlhNGQxM2NiYmI2OGFi
ZmE2ZmI5YTQ1ZGE5Y2EzNjRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Qu
cmVzaXplLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogRmxvdCBwbHVnaW4g
Zm9yIGF1dG9tYXRpY2FsbHkgcmVkcmF3aW5nIHBsb3RzIGFzIHRoZSBwbGFjZWhvbGRlciByZXNp
emVzLgotCi1Db3B5cmlnaHQgKGMpIDIwMDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxp
Y2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KLQotSXQgd29ya3MgYnkgbGlzdGVuaW5nIGZv
ciBjaGFuZ2VzIG9uIHRoZSBwbGFjZWhvbGRlciBkaXYgKHRocm91Z2ggdGhlIGpRdWVyeQotcmVz
aXplIGV2ZW50IHBsdWdpbikgLSBpZiB0aGUgc2l6ZSBjaGFuZ2VzLCBpdCB3aWxsIHJlZHJhdyB0
aGUgcGxvdC4KLQotVGhlcmUgYXJlIG5vIG9wdGlvbnMuIElmIHlvdSBuZWVkIHRvIGRpc2FibGUg
dGhlIHBsdWdpbiBmb3Igc29tZSBwbG90cywgeW91Ci1jYW4ganVzdCBmaXggdGhlIHNpemUgb2Yg
dGhlaXIgcGxhY2Vob2xkZXJzLgotCi0qLwotCi0vKiBJbmxpbmUgZGVwZW5kZW5jeToKLSAqIGpR
dWVyeSByZXNpemUgZXZlbnQgLSB2MS4xIC0gMy8xNC8yMDEwCi0gKiBodHRwOi8vYmVuYWxtYW4u
Y29tL3Byb2plY3RzL2pxdWVyeS1yZXNpemUtcGx1Z2luLwotICoKLSAqIENvcHlyaWdodCAoYykg
MjAxMCAiQ293Ym95IiBCZW4gQWxtYW4KLSAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBh
bmQgR1BMIGxpY2Vuc2VzLgotICogaHR0cDovL2JlbmFsbWFuLmNvbS9hYm91dC9saWNlbnNlLwot
ICovCi0KLShmdW5jdGlvbigkLGgsYyl7dmFyIGE9JChbXSksZT0kLnJlc2l6ZT0kLmV4dGVuZCgk
LnJlc2l6ZSx7fSksaSxrPSJzZXRUaW1lb3V0IixqPSJyZXNpemUiLGQ9aisiLXNwZWNpYWwtZXZl
bnQiLGI9ImRlbGF5IixmPSJ0aHJvdHRsZVdpbmRvdyI7ZVtiXT0yNTA7ZVtmXT10cnVlOyQuZXZl
bnQuc3BlY2lhbFtqXT17c2V0dXA6ZnVuY3Rpb24oKXtpZighZVtmXSYmdGhpc1trXSl7cmV0dXJu
IGZhbHNlfXZhciBsPSQodGhpcyk7YT1hLmFkZChsKTskLmRhdGEodGhpcyxkLHt3Omwud2lkdGgo
KSxoOmwuaGVpZ2h0KCl9KTtpZihhLmxlbmd0aD09PTEpe2coKX19LHRlYXJkb3duOmZ1bmN0aW9u
KCl7aWYoIWVbZl0mJnRoaXNba10pe3JldHVybiBmYWxzZX12YXIgbD0kKHRoaXMpO2E9YS5ub3Qo
bCk7bC5yZW1vdmVEYXRhKGQpO2lmKCFhLmxlbmd0aCl7Y2xlYXJUaW1lb3V0KGkpfX0sYWRkOmZ1
bmN0aW9uKGwpe2lmKCFlW2ZdJiZ0aGlzW2tdKXtyZXR1cm4gZmFsc2V9dmFyIG47ZnVuY3Rpb24g
bShzLG8scCl7dmFyIHE9JCh0aGlzKSxyPSQuZGF0YSh0aGlzLGQpO3Iudz1vIT09Yz9vOnEud2lk
dGgoKTtyLmg9cCE9PWM/cDpxLmhlaWdodCgpO24uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKCQu
aXNGdW5jdGlvbihsKSl7bj1sO3JldHVybiBtfWVsc2V7bj1sLmhhbmRsZXI7bC5oYW5kbGVyPW19
fX07ZnVuY3Rpb24gZygpe2k9aFtrXShmdW5jdGlvbigpe2EuZWFjaChmdW5jdGlvbigpe3ZhciBu
PSQodGhpcyksbT1uLndpZHRoKCksbD1uLmhlaWdodCgpLG89JC5kYXRhKHRoaXMsZCk7aWYobSE9
PW8ud3x8bCE9PW8uaCl7bi50cmlnZ2VyKGosW28udz1tLG8uaD1sXSl9fSk7ZygpfSxlW2JdKX19
KShqUXVlcnksdGhpcyk7Ci0KLShmdW5jdGlvbiAoJCkgewotICAgIHZhciBvcHRpb25zID0geyB9
OyAvLyBubyBvcHRpb25zCi0KLSAgICBmdW5jdGlvbiBpbml0KHBsb3QpIHsKLSAgICAgICAgZnVu
Y3Rpb24gb25SZXNpemUoKSB7Ci0gICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBwbG90Lmdl
dFBsYWNlaG9sZGVyKCk7Ci0KLSAgICAgICAgICAgIC8vIHNvbWVib2R5IG1pZ2h0IGhhdmUgaGlk
ZGVuIHVzIGFuZCB3ZSBjYW4ndCBwbG90Ci0gICAgICAgICAgICAvLyB3aGVuIHdlIGRvbid0IGhh
dmUgdGhlIGRpbWVuc2lvbnMKLSAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlci53aWR0aCgpID09
IDAgfHwgcGxhY2Vob2xkZXIuaGVpZ2h0KCkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgIHBsb3QucmVzaXplKCk7Ci0gICAgICAgICAgICBwbG90LnNldHVwR3Jp
ZCgpOwotICAgICAgICAgICAgcGxvdC5kcmF3KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMocGxvdCwgZXZlbnRIb2xkZXIpIHsKLSAgICAgICAgICAg
IHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS5yZXNpemUob25SZXNpemUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gc2h1dGRvd24ocGxvdCwgZXZlbnRIb2xkZXIpIHsKLSAgICAgICAgICAg
IHBsb3QuZ2V0UGxhY2Vob2xkZXIoKS51bmJpbmQoInJlc2l6ZSIsIG9uUmVzaXplKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgcGxvdC5ob29rcy5iaW5kRXZlbnRzLnB1c2goYmluZEV2
ZW50cyk7Ci0gICAgICAgIHBsb3QuaG9va3Muc2h1dGRvd24ucHVzaChzaHV0ZG93bik7Ci0gICAg
fQotICAgIAotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0LAot
ICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBuYW1lOiAncmVzaXplJywKLSAgICAg
ICAgdmVyc2lvbjogJzEuMCcKLSAgICB9KTsKLX0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnNlbGVjdGlvbi5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Quc2VsZWN0aW9u
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTk5YjkyOTJmNTQ3MDA5NTU2ZDM0
MjI4NTk3OTU4NjVkZmJmMDhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Qu
c2VsZWN0aW9uLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qIEZsb3QgcGx1
Z2luIGZvciBzZWxlY3RpbmcgcmVnaW9ucyBvZiBhIHBsb3QuCi0KLUNvcHlyaWdodCAoYykgMjAw
Ny0yMDEyIElPTEEgYW5kIE9sZSBMYXVyc2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNl
bnNlLgotCi1UaGUgcGx1Z2luIHN1cHBvcnRzIHRoZXNlIG9wdGlvbnM6Ci0KLXNlbGVjdGlvbjog
ewotICAgIG1vZGU6IG51bGwgb3IgIngiIG9yICJ5IiBvciAieHkiLAotICAgIGNvbG9yOiBjb2xv
cgotfQotCi1TZWxlY3Rpb24gc3VwcG9ydCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIG1vZGUg
dG8gb25lIG9mICJ4IiwgInkiIG9yICJ4eSIuCi1JbiAieCIgbW9kZSwgdGhlIHVzZXIgd2lsbCBv
bmx5IGJlIGFibGUgdG8gc3BlY2lmeSB0aGUgeCByYW5nZSwgc2ltaWxhcmx5IGZvcgotInkiIG1v
ZGUuIEZvciAieHkiLCB0aGUgc2VsZWN0aW9uIGJlY29tZXMgYSByZWN0YW5nbGUgd2hlcmUgYm90
aCByYW5nZXMgY2FuIGJlCi1zcGVjaWZpZWQuICJjb2xvciIgaXMgY29sb3Igb2YgdGhlIHNlbGVj
dGlvbiAoaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjb2xvcgotbGF0ZXIgb24sIHlvdSBjYW4g
Z2V0IHRvIGl0IHdpdGggcGxvdC5nZXRPcHRpb25zKCkuc2VsZWN0aW9uLmNvbG9yKS4KLQotV2hl
biBzZWxlY3Rpb24gc3VwcG9ydCBpcyBlbmFibGVkLCBhICJwbG90c2VsZWN0ZWQiIGV2ZW50IHdp
bGwgYmUgZW1pdHRlZCBvbgotdGhlIERPTSBlbGVtZW50IHlvdSBwYXNzZWQgaW50byB0aGUgcGxv
dCBmdW5jdGlvbi4gVGhlIGV2ZW50IGhhbmRsZXIgZ2V0cyBhCi1wYXJhbWV0ZXIgd2l0aCB0aGUg
cmFuZ2VzIHNlbGVjdGVkIG9uIHRoZSBheGVzLCBsaWtlIHRoaXM6Ci0KLSAgICBwbGFjZWhvbGRl
ci5iaW5kKCAicGxvdHNlbGVjdGVkIiwgZnVuY3Rpb24oIGV2ZW50LCByYW5nZXMgKSB7Ci0gICAg
ICAgIGFsZXJ0KCJZb3Ugc2VsZWN0ZWQgIiArIHJhbmdlcy54YXhpcy5mcm9tICsgIiB0byAiICsg
cmFuZ2VzLnhheGlzLnRvKQotICAgICAgICAvLyBzaW1pbGFyIGZvciB5YXhpcyAtIHdpdGggbXVs
dGlwbGUgYXhlcywgdGhlIGV4dHJhIG9uZXMgYXJlIGluCi0gICAgICAgIC8vIHgyYXhpcywgeDNh
eGlzLCAuLi4KLSAgICB9KTsKLQotVGhlICJwbG90c2VsZWN0ZWQiIGV2ZW50IGlzIG9ubHkgZmly
ZWQgd2hlbiB0aGUgdXNlciBoYXMgZmluaXNoZWQgbWFraW5nIHRoZQotc2VsZWN0aW9uLiBBICJw
bG90c2VsZWN0aW5nIiBldmVudCBpcyBmaXJlZCBkdXJpbmcgdGhlIHByb2Nlc3Mgd2l0aCB0aGUg
c2FtZQotcGFyYW1ldGVycyBhcyB0aGUgInBsb3RzZWxlY3RlZCIgZXZlbnQsIGluIGNhc2UgeW91
IHdhbnQgdG8ga25vdyB3aGF0J3MKLWhhcHBlbmluZyB3aGlsZSBpdCdzIGhhcHBlbmluZywKLQot
QSAicGxvdHVuc2VsZWN0ZWQiIGV2ZW50IHdpdGggbm8gYXJndW1lbnRzIGlzIGVtaXR0ZWQgd2hl
biB0aGUgdXNlciBjbGlja3MgdGhlCi1tb3VzZSB0byByZW1vdmUgdGhlIHNlbGVjdGlvbi4KLQot
VGhlIHBsdWdpbiBhbGxzbyBhZGRzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byB0aGUgcGxvdCBv
YmplY3Q6Ci0KLS0gc2V0U2VsZWN0aW9uKCByYW5nZXMsIHByZXZlbnRFdmVudCApCi0KLSAgU2V0
IHRoZSBzZWxlY3Rpb24gcmVjdGFuZ2xlLiBUaGUgcGFzc2VkIGluIHJhbmdlcyBpcyBvbiB0aGUg
c2FtZSBmb3JtIGFzCi0gIHJldHVybmVkIGluIHRoZSAicGxvdHNlbGVjdGVkIiBldmVudC4gSWYg
dGhlIHNlbGVjdGlvbiBtb2RlIGlzICJ4IiwgeW91Ci0gIHNob3VsZCBwdXQgaW4gZWl0aGVyIGFu
IHhheGlzIHJhbmdlLCBpZiB0aGUgbW9kZSBpcyAieSIgeW91IG5lZWQgdG8gcHV0IGluCi0gIGFu
IHlheGlzIHJhbmdlIGFuZCBib3RoIHhheGlzIGFuZCB5YXhpcyBpZiB0aGUgc2VsZWN0aW9uIG1v
ZGUgaXMgInh5IiwgbGlrZQotICB0aGlzOgotCi0gICAgc2V0U2VsZWN0aW9uKHsgeGF4aXM6IHsg
ZnJvbTogMCwgdG86IDEwIH0sIHlheGlzOiB7IGZyb206IDQwLCB0bzogNjAgfSB9KTsKLQotICBz
ZXRTZWxlY3Rpb24gd2lsbCB0cmlnZ2VyIHRoZSAicGxvdHNlbGVjdGVkIiBldmVudCB3aGVuIGNh
bGxlZC4gSWYgeW91IGRvbid0Ci0gIHdhbnQgdGhhdCB0byBoYXBwZW4sIGUuZy4gaWYgeW91J3Jl
IGluc2lkZSBhICJwbG90c2VsZWN0ZWQiIGhhbmRsZXIsIHBhc3MKLSAgdHJ1ZSBhcyB0aGUgc2Vj
b25kIHBhcmFtZXRlci4gSWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZSBheGVzLCB5b3UgY2FuCi0g
IHNwZWNpZnkgdGhlIHJhbmdlcyBvbiBhbnkgb2YgdGhvc2UsIGUuZy4gYXMgeDJheGlzL3gzYXhp
cy8uLi4gaW5zdGVhZCBvZgotICB4YXhpcywgdGhlIHBsdWdpbiBwaWNrcyB0aGUgZmlyc3Qgb25l
IGl0IHNlZXMuCi0KLS0gY2xlYXJTZWxlY3Rpb24oIHByZXZlbnRFdmVudCApCi0KLSAgQ2xlYXIg
dGhlIHNlbGVjdGlvbiByZWN0YW5nbGUuIFBhc3MgaW4gdHJ1ZSB0byBhdm9pZCBnZXR0aW5nIGEK
LSAgInBsb3R1bnNlbGVjdGVkIiBldmVudC4KLQotLSBnZXRTZWxlY3Rpb24oKQotCi0gIFJldHVy
bnMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgInBsb3Rz
ZWxlY3RlZCIKLSAgZXZlbnQuIElmIHRoZXJlJ3MgY3VycmVudGx5IG5vIHNlbGVjdGlvbiwgdGhl
IGZ1bmN0aW9uIHJldHVybnMgbnVsbC4KLQotKi8KLQotKGZ1bmN0aW9uICgkKSB7Ci0gICAgZnVu
Y3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB7Ci0gICAgICAgICAg
ICAgICAgZmlyc3Q6IHsgeDogLTEsIHk6IC0xfSwgc2Vjb25kOiB7IHg6IC0xLCB5OiAtMX0sCi0g
ICAgICAgICAgICAgICAgc2hvdzogZmFsc2UsCi0gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxz
ZQotICAgICAgICAgICAgfTsKLQotICAgICAgICAvLyBGSVhNRTogVGhlIGRyYWcgaGFuZGxpbmcg
aW1wbGVtZW50ZWQgaGVyZSBzaG91bGQgYmUKLSAgICAgICAgLy8gYWJzdHJhY3RlZCBvdXQsIHRo
ZXJlJ3Mgc29tZSBzaW1pbGFyIGNvZGUgZnJvbSBhIGxpYnJhcnkgaW4KLSAgICAgICAgLy8gdGhl
IG5hdmlnYXRpb24gcGx1Z2luLCB0aGlzIHNob3VsZCBiZSBtYXNzYWdlZCBhIGJpdCB0byBmaXQK
LSAgICAgICAgLy8gdGhlIEZsb3QgY2FzZXMgaGVyZSBiZXR0ZXIgYW5kIHJldXNlZC4gRG9pbmcg
dGhpcyB3b3VsZAotICAgICAgICAvLyBtYWtlIHRoaXMgcGx1Z2luIG11Y2ggc2xpbW1lci4KLSAg
ICAgICAgdmFyIHNhdmVkaGFuZGxlcnMgPSB7fTsKLQotICAgICAgICB2YXIgbW91c2VVcEhhbmRs
ZXIgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkgewot
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5hY3RpdmUpIHsKLSAgICAgICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb24oZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcGxvdC5n
ZXRQbGFjZWhvbGRlcigpLnRyaWdnZXIoInBsb3RzZWxlY3RpbmciLCBbIGdldFNlbGVjdGlvbigp
IF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25Nb3Vz
ZURvd24oZSkgewotICAgICAgICAgICAgaWYgKGUud2hpY2ggIT0gMSkgIC8vIG9ubHkgYWNjZXB0
IGxlZnQtY2xpY2sKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIGNhbmNlbCBvdXQgYW55IHRleHQgc2VsZWN0aW9ucwotICAgICAgICAgICAgZG9j
dW1lbnQuYm9keS5mb2N1cygpOwotCi0gICAgICAgICAgICAvLyBwcmV2ZW50IHRleHQgc2VsZWN0
aW9uIGFuZCBkcmFnIGluIG9sZC1zY2hvb2wgYnJvd3NlcnMKLSAgICAgICAgICAgIGlmIChkb2N1
bWVudC5vbnNlbGVjdHN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgc2F2ZWRoYW5kbGVycy5vbnNlbGVj
dHN0YXJ0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzYXZlZGhhbmRsZXJzLm9uc2VsZWN0
c3RhcnQgPSBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0OwotICAgICAgICAgICAgICAgIGRvY3VtZW50
Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChkb2N1bWVudC5vbmRyYWcgIT09IHVuZGVmaW5lZCAmJiBz
YXZlZGhhbmRsZXJzLm9uZHJhZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2F2ZWRoYW5k
bGVycy5vbmRyYWcgPSBkb2N1bWVudC5vbmRyYWc7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQu
b25kcmFnID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHNldFNlbGVjdGlvblBvcyhzZWxlY3Rpb24uZmlyc3QsIGUpOwotCi0gICAg
ICAgICAgICBzZWxlY3Rpb24uYWN0aXZlID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gdGhpcyBp
cyBhIGJpdCBzaWxseSwgYnV0IHdlIGhhdmUgdG8gdXNlIGEgY2xvc3VyZSB0byBiZQotICAgICAg
ICAgICAgLy8gYWJsZSB0byB3aGFjayB0aGUgc2FtZSBoYW5kbGVyIGFnYWluCi0gICAgICAgICAg
ICBtb3VzZVVwSGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7IG9uTW91c2VVcChlKTsgfTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgJChkb2N1bWVudCkub25lKCJtb3VzZXVwIiwgbW91c2VVcEhh
bmRsZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHsKLSAg
ICAgICAgICAgIG1vdXNlVXBIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gcmV2ZXJ0IGRyYWcgc3R1ZmYgZm9yIG9sZC1zY2hvb2wgYnJvd3NlcnMKLSAgICAgICAg
ICAgIGlmIChkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAg
ICAgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IHNhdmVkaGFuZGxlcnMub25zZWxlY3RzdGFy
dDsKLSAgICAgICAgICAgIGlmIChkb2N1bWVudC5vbmRyYWcgIT09IHVuZGVmaW5lZCkKLSAgICAg
ICAgICAgICAgICBkb2N1bWVudC5vbmRyYWcgPSBzYXZlZGhhbmRsZXJzLm9uZHJhZzsKLQotICAg
ICAgICAgICAgLy8gbm8gbW9yZSBkcmFnZ2luZwotICAgICAgICAgICAgc2VsZWN0aW9uLmFjdGl2
ZSA9IGZhbHNlOwotICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGUpOwotCi0gICAgICAgICAg
ICBpZiAoc2VsZWN0aW9uSXNTYW5lKCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dlclNlbGVjdGVk
RXZlbnQoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgY291
bnRzIGFzIGEgY2xlYXIKLSAgICAgICAgICAgICAgICBwbG90LmdldFBsYWNlaG9sZGVyKCkudHJp
Z2dlcigicGxvdHVuc2VsZWN0ZWQiLCBbIF0pOwotICAgICAgICAgICAgICAgIHBsb3QuZ2V0UGxh
Y2Vob2xkZXIoKS50cmlnZ2VyKCJwbG90c2VsZWN0aW5nIiwgWyBudWxsIF0pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBnZXRTZWxlY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoIXNlbGVjdGlvbklzU2Fu
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIXNlbGVjdGlvbi5zaG93KSByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgdmFy
IHIgPSB7fSwgYzEgPSBzZWxlY3Rpb24uZmlyc3QsIGMyID0gc2VsZWN0aW9uLnNlY29uZDsKLSAg
ICAgICAgICAgICQuZWFjaChwbG90LmdldEF4ZXMoKSwgZnVuY3Rpb24gKG5hbWUsIGF4aXMpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYXhpcy51c2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBwMSA9IGF4aXMuYzJwKGMxW2F4aXMuZGlyZWN0aW9uXSksIHAyID0gYXhpcy5jMnAoYzJbYXhp
cy5kaXJlY3Rpb25dKTsgCi0gICAgICAgICAgICAgICAgICAgIHJbbmFtZV0gPSB7IGZyb206IE1h
dGgubWluKHAxLCBwMiksIHRvOiBNYXRoLm1heChwMSwgcDIpIH07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJTZWxlY3RlZEV2ZW50KCkgewotICAgICAgICAgICAgdmFy
IHIgPSBnZXRTZWxlY3Rpb24oKTsKLQotICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigp
LnRyaWdnZXIoInBsb3RzZWxlY3RlZCIsIFsgciBdKTsKLQotICAgICAgICAgICAgLy8gYmFja3dh
cmRzLWNvbXBhdCBzdHVmZiwgdG8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUKLSAgICAgICAgICAgIGlm
IChyLnhheGlzICYmIHIueWF4aXMpCi0gICAgICAgICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRl
cigpLnRyaWdnZXIoInNlbGVjdGVkIiwgWyB7IHgxOiByLnhheGlzLmZyb20sIHkxOiByLnlheGlz
LmZyb20sIHgyOiByLnhheGlzLnRvLCB5Mjogci55YXhpcy50byB9IF0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gY2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPCBtaW4gPyBtaW46ICh2YWx1ZSA+IG1heCA/IG1heDogdmFsdWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uUG9zKHBvcywgZSkgewotICAg
ICAgICAgICAgdmFyIG8gPSBwbG90LmdldE9wdGlvbnMoKTsKLSAgICAgICAgICAgIHZhciBvZmZz
ZXQgPSBwbG90LmdldFBsYWNlaG9sZGVyKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICB2YXIgcGxv
dE9mZnNldCA9IHBsb3QuZ2V0UGxvdE9mZnNldCgpOwotICAgICAgICAgICAgcG9zLnggPSBjbGFt
cCgwLCBlLnBhZ2VYIC0gb2Zmc2V0LmxlZnQgLSBwbG90T2Zmc2V0LmxlZnQsIHBsb3Qud2lkdGgo
KSk7Ci0gICAgICAgICAgICBwb3MueSA9IGNsYW1wKDAsIGUucGFnZVkgLSBvZmZzZXQudG9wIC0g
cGxvdE9mZnNldC50b3AsIHBsb3QuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBpZiAoby5zZWxl
Y3Rpb24ubW9kZSA9PSAieSIpCi0gICAgICAgICAgICAgICAgcG9zLnggPSBwb3MgPT0gc2VsZWN0
aW9uLmZpcnN0ID8gMCA6IHBsb3Qud2lkdGgoKTsKLQotICAgICAgICAgICAgaWYgKG8uc2VsZWN0
aW9uLm1vZGUgPT0gIngiKQotICAgICAgICAgICAgICAgIHBvcy55ID0gcG9zID09IHNlbGVjdGlv
bi5maXJzdCA/IDAgOiBwbG90LmhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gdXBkYXRlU2VsZWN0aW9uKHBvcykgewotICAgICAgICAgICAgaWYgKHBvcy5wYWdlWCA9PSBu
dWxsKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgc2V0U2VsZWN0aW9u
UG9zKHNlbGVjdGlvbi5zZWNvbmQsIHBvcyk7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXNT
YW5lKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2hvdyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcGxvdC50cmlnZ2VyUmVkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKHRydWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24ocHJldmVudEV2ZW50KSB7
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnNob3cpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24uc2hvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHBsb3QudHJpZ2dlclJlZHJhd092
ZXJsYXkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXZlbnRFdmVudCkKLSAgICAgICAgICAg
ICAgICAgICAgcGxvdC5nZXRQbGFjZWhvbGRlcigpLnRyaWdnZXIoInBsb3R1bnNlbGVjdGVkIiwg
WyBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGZ1bmN0aW9uIHRh
a2VuIGZyb20gbWFya2luZ3Mgc3VwcG9ydCBpbiBGbG90Ci0gICAgICAgIGZ1bmN0aW9uIGV4dHJh
Y3RSYW5nZShyYW5nZXMsIGNvb3JkKSB7Ci0gICAgICAgICAgICB2YXIgYXhpcywgZnJvbSwgdG8s
IGtleSwgYXhlcyA9IHBsb3QuZ2V0QXhlcygpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBrIGlu
IGF4ZXMpIHsKLSAgICAgICAgICAgICAgICBheGlzID0gYXhlc1trXTsKLSAgICAgICAgICAgICAg
ICBpZiAoYXhpcy5kaXJlY3Rpb24gPT0gY29vcmQpIHsKLSAgICAgICAgICAgICAgICAgICAga2V5
ID0gY29vcmQgKyBheGlzLm4gKyAiYXhpcyI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmFu
Z2VzW2tleV0gJiYgYXhpcy5uID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBj
b29yZCArICJheGlzIjsgLy8gc3VwcG9ydCB4MWF4aXMgYXMgeGF4aXMKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJhbmdlc1trZXldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0g
cmFuZ2VzW2tleV0uZnJvbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvID0gcmFuZ2VzW2tl
eV0udG87Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
YmFja3dhcmRzLWNvbXBhdCBzdHVmZiAtIHRvIGJlIHJlbW92ZWQgaW4gZnV0dXJlCi0gICAgICAg
ICAgICBpZiAoIXJhbmdlc1trZXldKSB7Ci0gICAgICAgICAgICAgICAgYXhpcyA9IGNvb3JkID09
ICJ4IiA/IHBsb3QuZ2V0WEF4ZXMoKVswXSA6IHBsb3QuZ2V0WUF4ZXMoKVswXTsKLSAgICAgICAg
ICAgICAgICBmcm9tID0gcmFuZ2VzW2Nvb3JkICsgIjEiXTsKLSAgICAgICAgICAgICAgICB0byA9
IHJhbmdlc1tjb29yZCArICIyIl07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGF1
dG8tcmV2ZXJzZSBhcyBhbiBhZGRlZCBib251cwotICAgICAgICAgICAgaWYgKGZyb20gIT0gbnVs
bCAmJiB0byAhPSBudWxsICYmIGZyb20gPiB0bykgewotICAgICAgICAgICAgICAgIHZhciB0bXAg
PSBmcm9tOwotICAgICAgICAgICAgICAgIGZyb20gPSB0bzsKLSAgICAgICAgICAgICAgICB0byA9
IHRtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHsg
ZnJvbTogZnJvbSwgdG86IHRvLCBheGlzOiBheGlzIH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihyYW5nZXMsIHByZXZlbnRFdmVudCkgewotICAg
ICAgICAgICAgdmFyIGF4aXMsIHJhbmdlLCBvID0gcGxvdC5nZXRPcHRpb25zKCk7Ci0KLSAgICAg
ICAgICAgIGlmIChvLnNlbGVjdGlvbi5tb2RlID09ICJ5IikgewotICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5maXJzdC54ID0gMDsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2Vjb25kLngg
PSBwbG90LndpZHRoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICByYW5nZSA9IGV4dHJhY3RSYW5nZShyYW5nZXMsICJ4Iik7Ci0KLSAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24uZmlyc3QueCA9IHJhbmdlLmF4aXMucDJjKHJhbmdlLmZyb20pOwot
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZWNvbmQueCA9IHJhbmdlLmF4aXMucDJjKHJhbmdl
LnRvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG8uc2VsZWN0aW9uLm1vZGUg
PT0gIngiKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZpcnN0LnkgPSAwOwotICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZWNvbmQueSA9IHBsb3QuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByYW5nZSA9IGV4dHJhY3RS
YW5nZShyYW5nZXMsICJ5Iik7Ci0KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZmlyc3QueSA9
IHJhbmdlLmF4aXMucDJjKHJhbmdlLmZyb20pOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5z
ZWNvbmQueSA9IHJhbmdlLmF4aXMucDJjKHJhbmdlLnRvKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc2VsZWN0aW9uLnNob3cgPSB0cnVlOwotICAgICAgICAgICAgcGxvdC50cmlnZ2Vy
UmVkcmF3T3ZlcmxheSgpOwotICAgICAgICAgICAgaWYgKCFwcmV2ZW50RXZlbnQgJiYgc2VsZWN0
aW9uSXNTYW5lKCkpCi0gICAgICAgICAgICAgICAgdHJpZ2dlclNlbGVjdGVkRXZlbnQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlbGVjdGlvbklzU2FuZSgpIHsKLSAgICAgICAg
ICAgIHZhciBtaW5TaXplID0gNTsKLSAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhzZWxlY3Rp
b24uc2Vjb25kLnggLSBzZWxlY3Rpb24uZmlyc3QueCkgPj0gbWluU2l6ZSAmJgotICAgICAgICAg
ICAgICAgIE1hdGguYWJzKHNlbGVjdGlvbi5zZWNvbmQueSAtIHNlbGVjdGlvbi5maXJzdC55KSA+
PSBtaW5TaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgcGxvdC5jbGVhclNlbGVjdGlvbiA9IGNs
ZWFyU2VsZWN0aW9uOwotICAgICAgICBwbG90LnNldFNlbGVjdGlvbiA9IHNldFNlbGVjdGlvbjsK
LSAgICAgICAgcGxvdC5nZXRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb247Ci0KLSAgICAgICAgcGxv
dC5ob29rcy5iaW5kRXZlbnRzLnB1c2goZnVuY3Rpb24ocGxvdCwgZXZlbnRIb2xkZXIpIHsKLSAg
ICAgICAgICAgIHZhciBvID0gcGxvdC5nZXRPcHRpb25zKCk7Ci0gICAgICAgICAgICBpZiAoby5z
ZWxlY3Rpb24ubW9kZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRIb2xkZXIubW91
c2Vtb3ZlKG9uTW91c2VNb3ZlKTsKLSAgICAgICAgICAgICAgICBldmVudEhvbGRlci5tb3VzZWRv
d24ob25Nb3VzZURvd24pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotCi0gICAgICAg
IHBsb3QuaG9va3MuZHJhd092ZXJsYXkucHVzaChmdW5jdGlvbiAocGxvdCwgY3R4KSB7Ci0gICAg
ICAgICAgICAvLyBkcmF3IHNlbGVjdGlvbgotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5zaG93
ICYmIHNlbGVjdGlvbklzU2FuZSgpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBsb3RPZmZzZXQg
PSBwbG90LmdldFBsb3RPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICB2YXIgbyA9IHBsb3QuZ2V0
T3B0aW9ucygpOwotCi0gICAgICAgICAgICAgICAgY3R4LnNhdmUoKTsKLSAgICAgICAgICAgICAg
ICBjdHgudHJhbnNsYXRlKHBsb3RPZmZzZXQubGVmdCwgcGxvdE9mZnNldC50b3ApOwotCi0gICAg
ICAgICAgICAgICAgdmFyIGMgPSAkLmNvbG9yLnBhcnNlKG8uc2VsZWN0aW9uLmNvbG9yKTsKLQot
ICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGMuc2NhbGUoJ2EnLCAwLjgpLnRvU3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7Ci0gICAgICAgICAgICAg
ICAgY3R4LmxpbmVKb2luID0gInJvdW5kIjsKLSAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxl
ID0gYy5zY2FsZSgnYScsIDAuNCkudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgICAgIHZhciB4
ID0gTWF0aC5taW4oc2VsZWN0aW9uLmZpcnN0LngsIHNlbGVjdGlvbi5zZWNvbmQueCkgKyAwLjUs
Ci0gICAgICAgICAgICAgICAgICAgIHkgPSBNYXRoLm1pbihzZWxlY3Rpb24uZmlyc3QueSwgc2Vs
ZWN0aW9uLnNlY29uZC55KSArIDAuNSwKLSAgICAgICAgICAgICAgICAgICAgdyA9IE1hdGguYWJz
KHNlbGVjdGlvbi5zZWNvbmQueCAtIHNlbGVjdGlvbi5maXJzdC54KSAtIDEsCi0gICAgICAgICAg
ICAgICAgICAgIGggPSBNYXRoLmFicyhzZWxlY3Rpb24uc2Vjb25kLnkgLSBzZWxlY3Rpb24uZmly
c3QueSkgLSAxOwotCi0gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHgsIHksIHcsIGgpOwot
ICAgICAgICAgICAgICAgIGN0eC5zdHJva2VSZWN0KHgsIHksIHcsIGgpOwotCi0gICAgICAgICAg
ICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAg
IAotICAgICAgICBwbG90Lmhvb2tzLnNodXRkb3duLnB1c2goZnVuY3Rpb24gKHBsb3QsIGV2ZW50
SG9sZGVyKSB7Ci0gICAgICAgICAgICBldmVudEhvbGRlci51bmJpbmQoIm1vdXNlbW92ZSIsIG9u
TW91c2VNb3ZlKTsKLSAgICAgICAgICAgIGV2ZW50SG9sZGVyLnVuYmluZCgibW91c2Vkb3duIiwg
b25Nb3VzZURvd24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobW91c2VVcEhhbmRs
ZXIpCi0gICAgICAgICAgICAgICAgJChkb2N1bWVudCkudW5iaW5kKCJtb3VzZXVwIiwgbW91c2VV
cEhhbmRsZXIpOwotICAgICAgICB9KTsKLQotICAgIH0KLQotICAgICQucGxvdC5wbHVnaW5zLnB1
c2goewotICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRpb25zOiB7Ci0gICAgICAgICAg
ICBzZWxlY3Rpb246IHsKLSAgICAgICAgICAgICAgICBtb2RlOiBudWxsLCAvLyBvbmUgb2YgbnVs
bCwgIngiLCAieSIgb3IgInh5IgotICAgICAgICAgICAgICAgIGNvbG9yOiAiI2U4Y2ZhYyIKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgbmFtZTogJ3NlbGVjdGlvbicsCi0gICAg
ICAgIHZlcnNpb246ICcxLjEnCi0gICAgfSk7Ci19KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zdGFjay5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3Quc3RhY2suanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiY2IwNWUzNGVjOTIyYzEwZmE5OTI3NzJlZTc0
NmQzNDczZTEwMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zdGFjay5q
cworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKiBGbG90IHBsdWdpbiBmb3Igc3Rh
Y2tpbmcgZGF0YSBzZXRzIHJhdGhlciB0aGFuIG92ZXJseWFpbmcgdGhlbS4KLQotQ29weXJpZ2h0
IChjKSAyMDA3LTIwMTIgSU9MQSBhbmQgT2xlIExhdXJzZW4uCi1MaWNlbnNlZCB1bmRlciB0aGUg
TUlUIGxpY2Vuc2UuCi0KLVRoZSBwbHVnaW4gYXNzdW1lcyB0aGUgZGF0YSBpcyBzb3J0ZWQgb24g
eCAob3IgeSBpZiBzdGFja2luZyBob3Jpem9udGFsbHkpLgotRm9yIGxpbmUgY2hhcnRzLCBpdCBp
cyBhc3N1bWVkIHRoYXQgaWYgYSBsaW5lIGhhcyBhbiB1bmRlZmluZWQgZ2FwIChmcm9tIGEKLW51
bGwgcG9pbnQpLCB0aGVuIHRoZSBsaW5lIGFib3ZlIGl0IHNob3VsZCBoYXZlIHRoZSBzYW1lIGdh
cCAtIGluc2VydCB6ZXJvcwotaW5zdGVhZCBvZiAibnVsbCIgaWYgeW91IHdhbnQgYW5vdGhlciBi
ZWhhdmlvdXIuIFRoaXMgYWxzbyBob2xkcyBmb3IgdGhlIHN0YXJ0Ci1hbmQgZW5kIG9mIHRoZSBj
aGFydC4gTm90ZSB0aGF0IHN0YWNraW5nIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2
YWx1ZXMKLWluIG1vc3QgaW5zdGFuY2VzIGRvZXNuJ3QgbWFrZSBzZW5zZSAoc28gaXQgbG9va3Mg
d2VpcmQpLgotCi1Ud28gb3IgbW9yZSBzZXJpZXMgYXJlIHN0YWNrZWQgd2hlbiB0aGVpciAic3Rh
Y2siIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdGhlIHNhbWUKLWtleSAod2hpY2ggY2FuIGJlIGFueSBu
dW1iZXIgb3Igc3RyaW5nIG9yIGp1c3QgInRydWUiKS4gVG8gc3BlY2lmeSB0aGUgZGVmYXVsdAot
c3RhY2ssIHlvdSBjYW4gc2V0IHRoZSBzdGFjayBvcHRpb24gbGlrZSB0aGlzOgotCi0gICAgc2Vy
aWVzOiB7Ci0gICAgICAgIHN0YWNrOiBudWxsIG9yIHRydWUgb3Iga2V5IChudW1iZXIvc3RyaW5n
KQotICAgIH0KLQotWW91IGNhbiBhbHNvIHNwZWNpZnkgaXQgZm9yIGEgc2luZ2xlIHNlcmllcywg
bGlrZSB0aGlzOgotCi0gICAgJC5wbG90KCAkKCIjcGxhY2Vob2xkZXIiKSwgW3sKLSAgICAgICAg
ZGF0YTogWyAuLi4gXSwKLSAgICAgICAgc3RhY2s6IHRydWUKLSAgICB9XSkKLQotVGhlIHN0YWNr
aW5nIG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIG9mIHRoZSBkYXRhIHNlcmllcyBp
biB0aGUgYXJyYXkKLShsYXRlciBzZXJpZXMgZW5kIHVwIG9uIHRvcCBvZiB0aGUgcHJldmlvdXMp
LgotCi1JbnRlcm5hbGx5LCB0aGUgcGx1Z2luIG1vZGlmaWVzIHRoZSBkYXRhcG9pbnRzIGluIGVh
Y2ggc2VyaWVzLCBhZGRpbmcgYW4KLW9mZnNldCB0byB0aGUgeSB2YWx1ZS4gRm9yIGxpbmUgc2Vy
aWVzLCBleHRyYSBkYXRhIHBvaW50cyBhcmUgaW5zZXJ0ZWQgdGhyb3VnaAotaW50ZXJwb2xhdGlv
bi4gSWYgdGhlcmUncyBhIHNlY29uZCB5IHZhbHVlLCBpdCdzIGFsc28gYWRqdXN0ZWQgKGUuZyBm
b3IgYmFyCi1jaGFydHMgb3IgZmlsbGVkIGFyZWFzKS4KLQotKi8KLQotKGZ1bmN0aW9uICgkKSB7
Ci0gICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgIHNlcmllczogeyBzdGFjazogbnVsbCB9IC8v
IG9yIG51bWJlci9zdHJpbmcKLSAgICB9OwotICAgIAotICAgIGZ1bmN0aW9uIGluaXQocGxvdCkg
ewotICAgICAgICBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdTZXJpZXMocywgYWxsc2VyaWVzKSB7Ci0g
ICAgICAgICAgICB2YXIgcmVzID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYWxsc2VyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHMgPT0gYWxs
c2VyaWVzW2ldKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoYWxsc2VyaWVzW2ldLnN0YWNrID09IHMuc3RhY2spCi0gICAg
ICAgICAgICAgICAgICAgIHJlcyA9IGFsbHNlcmllc1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgZnVuY3Rpb24gc3RhY2tEYXRhKHBsb3QsIHMsIGRhdGFwb2ludHMpIHsKLSAgICAgICAg
ICAgIGlmIChzLnN0YWNrID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICB2YXIgb3RoZXIgPSBmaW5kTWF0Y2hpbmdTZXJpZXMocywgcGxvdC5nZXREYXRhKCkp
OwotICAgICAgICAgICAgaWYgKCFvdGhlcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHZhciBwcyA9IGRhdGFwb2ludHMucG9pbnRzaXplLAotICAgICAgICAgICAgICAg
IHBvaW50cyA9IGRhdGFwb2ludHMucG9pbnRzLAotICAgICAgICAgICAgICAgIG90aGVycHMgPSBv
dGhlci5kYXRhcG9pbnRzLnBvaW50c2l6ZSwKLSAgICAgICAgICAgICAgICBvdGhlcnBvaW50cyA9
IG90aGVyLmRhdGFwb2ludHMucG9pbnRzLAotICAgICAgICAgICAgICAgIG5ld3BvaW50cyA9IFtd
LAotICAgICAgICAgICAgICAgIHB4LCBweSwgaW50ZXJ5LCBxeCwgcXksIGJvdHRvbSwKLSAgICAg
ICAgICAgICAgICB3aXRobGluZXMgPSBzLmxpbmVzLnNob3csCi0gICAgICAgICAgICAgICAgaG9y
aXpvbnRhbCA9IHMuYmFycy5ob3Jpem9udGFsLAotICAgICAgICAgICAgICAgIHdpdGhib3R0b20g
PSBwcyA+IDIgJiYgKGhvcml6b250YWwgPyBkYXRhcG9pbnRzLmZvcm1hdFsyXS54IDogZGF0YXBv
aW50cy5mb3JtYXRbMl0ueSksCi0gICAgICAgICAgICAgICAgd2l0aHN0ZXBzID0gd2l0aGxpbmVz
ICYmIHMubGluZXMuc3RlcHMsCi0gICAgICAgICAgICAgICAgZnJvbWdhcCA9IHRydWUsCi0gICAg
ICAgICAgICAgICAga2V5T2Zmc2V0ID0gaG9yaXpvbnRhbCA/IDEgOiAwLAotICAgICAgICAgICAg
ICAgIGFjY3VtdWxhdGVPZmZzZXQgPSBob3Jpem9udGFsID8gMCA6IDEsCi0gICAgICAgICAgICAg
ICAgaSA9IDAsIGogPSAwLCBsLCBtOwotCi0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgICAgIGlmIChpID49IHBvaW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgbCA9IG5ld3BvaW50cy5sZW5ndGg7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAocG9pbnRzW2ldID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY29weSBnYXBzCi0gICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKytt
KQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2gocG9pbnRzW2kgKyBtXSk7
Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gcHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGogPj0gb3RoZXJwb2ludHMubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIGZvciBsaW5lcywgd2UgY2FuJ3QgdXNlIHRoZSByZXN0IG9mIHRoZSBwb2lu
dHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3aXRobGluZXMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBwczsgKyttKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld3BvaW50cy5wdXNoKHBvaW50c1tpICsgbV0pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gcHM7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVycG9pbnRzW2pdID09IG51bGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gb29wcywgZ290IGEgZ2FwCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
bSA9IDA7IG0gPCBwczsgKyttKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1
c2gobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGZyb21nYXAgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBqICs9IG90aGVycHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxs
eSBnb3QgdHdvIHBvaW50cwotICAgICAgICAgICAgICAgICAgICBweCA9IHBvaW50c1tpICsga2V5
T2Zmc2V0XTsKLSAgICAgICAgICAgICAgICAgICAgcHkgPSBwb2ludHNbaSArIGFjY3VtdWxhdGVP
ZmZzZXRdOwotICAgICAgICAgICAgICAgICAgICBxeCA9IG90aGVycG9pbnRzW2ogKyBrZXlPZmZz
ZXRdOwotICAgICAgICAgICAgICAgICAgICBxeSA9IG90aGVycG9pbnRzW2ogKyBhY2N1bXVsYXRl
T2Zmc2V0XTsKLSAgICAgICAgICAgICAgICAgICAgYm90dG9tID0gMDsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAocHggPT0gcXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobSA9
IDA7IG0gPCBwczsgKyttKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50cy5w
dXNoKHBvaW50c1tpICsgbV0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHNb
bCArIGFjY3VtdWxhdGVPZmZzZXRdICs9IHF5OwotICAgICAgICAgICAgICAgICAgICAgICAgYm90
dG9tID0gcXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGkgKz0gcHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqICs9IG90aGVycHM7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHggPiBxeCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZ290IHBhc3QgcG9pbnQgYmVsb3csIG1p
Z2h0IG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBpbnRlcnBvbGF0
ZWQgZXh0cmEgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXRobGluZXMgJiYg
aSA+IDAgJiYgcG9pbnRzW2kgLSBwc10gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludGVyeSA9IHB5ICsgKHBvaW50c1tpIC0gcHMgKyBhY2N1bXVsYXRlT2Zmc2V0XSAt
IHB5KSAqIChxeCAtIHB4KSAvIChwb2ludHNbaSAtIHBzICsga2V5T2Zmc2V0XSAtIHB4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVzaChxeCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3cG9pbnRzLnB1c2goaW50ZXJ5ICsgcXkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDI7IG0gPCBwczsgKyttKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdwb2ludHMucHVzaChwb2ludHNbaSArIG1dKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3R0b20gPSBxeTsgCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gb3RoZXJwczsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gcHggPCBxeAotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21nYXAgJiYgd2l0aGxpbmVzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY29tZSBmcm9tIGEgZ2FwLCB3ZSBqdXN0IHNr
aXAgdGhpcyBwb2ludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gcHM7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsrbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdwb2ludHMucHVzaChwb2ludHNbaSArIG1dKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbWlnaHQgYmUgYWJsZSB0byBpbnRlcnBvbGF0
ZSBhIHBvaW50IGJlbG93LAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjYW4gZ2l2
ZSB1cyBhIGJldHRlciB5Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2l0aGxpbmVzICYm
IGogPiAwICYmIG90aGVycG9pbnRzW2ogLSBvdGhlcnBzXSAhPSBudWxsKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvdHRvbSA9IHF5ICsgKG90aGVycG9pbnRzW2ogLSBvdGhlcnBzICsg
YWNjdW11bGF0ZU9mZnNldF0gLSBxeSkgKiAocHggLSBxeCkgLyAob3RoZXJwb2ludHNbaiAtIG90
aGVycHMgKyBrZXlPZmZzZXRdIC0gcXgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdw
b2ludHNbbCArIGFjY3VtdWxhdGVPZmZzZXRdICs9IGJvdHRvbTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwczsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGZyb21nYXAgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChsICE9IG5ld3BvaW50cy5sZW5n
dGggJiYgd2l0aGJvdHRvbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BvaW50c1tsICsg
Ml0gKz0gYm90dG9tOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIG1h
aW50YWluIHRoZSBsaW5lIHN0ZXBzIGludmFyaWFudAotICAgICAgICAgICAgICAgIGlmICh3aXRo
c3RlcHMgJiYgbCAhPSBuZXdwb2ludHMubGVuZ3RoICYmIGwgPiAwCi0gICAgICAgICAgICAgICAg
ICAgICYmIG5ld3BvaW50c1tsXSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmIG5ld3Bv
aW50c1tsXSAhPSBuZXdwb2ludHNbbCAtIHBzXQotICAgICAgICAgICAgICAgICAgICAmJiBuZXdw
b2ludHNbbCArIDFdICE9IG5ld3BvaW50c1tsIC0gcHMgKyAxXSkgewotICAgICAgICAgICAgICAg
ICAgICBmb3IgKG0gPSAwOyBtIDwgcHM7ICsrbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5l
d3BvaW50c1tsICsgcHMgKyBtXSA9IG5ld3BvaW50c1tsICsgbV07Ci0gICAgICAgICAgICAgICAg
ICAgIG5ld3BvaW50c1tsICsgMV0gPSBuZXdwb2ludHNbbCAtIHBzICsgMV07Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkYXRhcG9pbnRzLnBvaW50cyA9
IG5ld3BvaW50czsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGxvdC5ob29rcy5wcm9j
ZXNzRGF0YXBvaW50cy5wdXNoKHN0YWNrRGF0YSk7Ci0gICAgfQotICAgIAotICAgICQucGxvdC5w
bHVnaW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBvcHRpb25zOiBvcHRp
b25zLAotICAgICAgICBuYW1lOiAnc3RhY2snLAotICAgICAgICB2ZXJzaW9uOiAnMS4yJwotICAg
IH0pOwotfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvanMvanF1ZXJ5LmZsb3Quc3ltYm9sLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zeW1ib2wuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDVmMjhiZWJjYjg3NWZhZDM2OTk5YWY5M2NhMjExNDZjNGYyMDk4YTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC5zeW1ib2wuanMKKysrIC9kZXYvbnVsbApAQCAt
MSw3MSArMCwwIEBACi0vKiBGbG90IHBsdWdpbiB0aGF0IGFkZHMgc29tZSBleHRyYSBzeW1ib2xz
IGZvciBwbG90dGluZyBwb2ludHMuCi0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5k
IE9sZSBMYXVyc2VuLgotTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi1UaGUgc3lt
Ym9scyBhcmUgYWNjZXNzZWQgYXMgc3RyaW5ncyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBzeW1ib2wg
b3B0aW9uczoKLQotICAgIHNlcmllczogewotICAgICAgICBwb2ludHM6IHsKLSAgICAgICAgICAg
IHN5bWJvbDogInNxdWFyZSIgLy8gb3IgImRpYW1vbmQiLCAidHJpYW5nbGUiLCAiY3Jvc3MiCi0g
ICAgICAgIH0KLSAgICB9Ci0KLSovCi0KLShmdW5jdGlvbiAoJCkgewotICAgIGZ1bmN0aW9uIHBy
b2Nlc3NSYXdEYXRhKHBsb3QsIHNlcmllcywgZGF0YXBvaW50cykgewotICAgICAgICAvLyB3ZSBu
b3JtYWxpemUgdGhlIGFyZWEgb2YgZWFjaCBzeW1ib2wgc28gaXQgaXMgYXBwcm94aW1hdGVseSB0
aGUKLSAgICAgICAgLy8gc2FtZSBhcyBhIGNpcmNsZSBvZiB0aGUgZ2l2ZW4gcmFkaXVzCi0KLSAg
ICAgICAgdmFyIGhhbmRsZXJzID0gewotICAgICAgICAgICAgc3F1YXJlOiBmdW5jdGlvbiAoY3R4
LCB4LCB5LCByYWRpdXMsIHNoYWRvdykgewotICAgICAgICAgICAgICAgIC8vIHBpICogcl4yID0g
KDJzKV4yICA9PiAgcyA9IHIgKiBzcXJ0KHBpKS8yCi0gICAgICAgICAgICAgICAgdmFyIHNpemUg
PSByYWRpdXMgKiBNYXRoLnNxcnQoTWF0aC5QSSkgLyAyOwotICAgICAgICAgICAgICAgIGN0eC5y
ZWN0KHggLSBzaXplLCB5IC0gc2l6ZSwgc2l6ZSArIHNpemUsIHNpemUgKyBzaXplKTsKLSAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICBkaWFtb25kOiBmdW5jdGlvbiAoY3R4LCB4LCB5LCByYWRp
dXMsIHNoYWRvdykgewotICAgICAgICAgICAgICAgIC8vIHBpICogcl4yID0gMnNeMiAgPT4gIHMg
PSByICogc3FydChwaS8yKQotICAgICAgICAgICAgICAgIHZhciBzaXplID0gcmFkaXVzICogTWF0
aC5zcXJ0KE1hdGguUEkgLyAyKTsKLSAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHggLSBzaXpl
LCB5KTsKLSAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkgLSBzaXplKTsKLSAgICAgICAg
ICAgICAgICBjdHgubGluZVRvKHggKyBzaXplLCB5KTsKLSAgICAgICAgICAgICAgICBjdHgubGlu
ZVRvKHgsIHkgKyBzaXplKTsKLSAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggLSBzaXplLCB5
KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB0cmlhbmdsZTogZnVuY3Rpb24gKGN0eCwg
eCwgeSwgcmFkaXVzLCBzaGFkb3cpIHsKLSAgICAgICAgICAgICAgICAvLyBwaSAqIHJeMiA9IDEv
MiAqIHNeMiAqIHNpbiAocGkgLyAzKSAgPT4gIHMgPSByICogc3FydCgyICogcGkgLyBzaW4ocGkg
LyAzKSkKLSAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHJhZGl1cyAqIE1hdGguc3FydCgyICog
TWF0aC5QSSAvIE1hdGguc2luKE1hdGguUEkgLyAzKSk7Ci0gICAgICAgICAgICAgICAgdmFyIGhl
aWdodCA9IHNpemUgKiBNYXRoLnNpbihNYXRoLlBJIC8gMyk7Ci0gICAgICAgICAgICAgICAgY3R4
Lm1vdmVUbyh4IC0gc2l6ZS8yLCB5ICsgaGVpZ2h0LzIpOwotICAgICAgICAgICAgICAgIGN0eC5s
aW5lVG8oeCArIHNpemUvMiwgeSArIGhlaWdodC8yKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNo
YWRvdykgewotICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkgLSBoZWlnaHQvMik7
Ci0gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCAtIHNpemUvMiwgeSArIGhlaWdodC8y
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgY3Jvc3M6
IGZ1bmN0aW9uIChjdHgsIHgsIHksIHJhZGl1cywgc2hhZG93KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gcGkgKiByXjIgPSAoMnMpXjIgID0+ICBzID0gciAqIHNxcnQocGkpLzIKLSAgICAgICAgICAg
ICAgICB2YXIgc2l6ZSA9IHJhZGl1cyAqIE1hdGguc3FydChNYXRoLlBJKSAvIDI7Ci0gICAgICAg
ICAgICAgICAgY3R4Lm1vdmVUbyh4IC0gc2l6ZSwgeSAtIHNpemUpOwotICAgICAgICAgICAgICAg
IGN0eC5saW5lVG8oeCArIHNpemUsIHkgKyBzaXplKTsKLSAgICAgICAgICAgICAgICBjdHgubW92
ZVRvKHggLSBzaXplLCB5ICsgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4ICsg
c2l6ZSwgeSAtIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHZh
ciBzID0gc2VyaWVzLnBvaW50cy5zeW1ib2w7Ci0gICAgICAgIGlmIChoYW5kbGVyc1tzXSkKLSAg
ICAgICAgICAgIHNlcmllcy5wb2ludHMuc3ltYm9sID0gaGFuZGxlcnNbc107Ci0gICAgfQotICAg
IAotICAgIGZ1bmN0aW9uIGluaXQocGxvdCkgewotICAgICAgICBwbG90Lmhvb2tzLnByb2Nlc3NE
YXRhcG9pbnRzLnB1c2gocHJvY2Vzc1Jhd0RhdGEpOwotICAgIH0KLSAgICAKLSAgICAkLnBsb3Qu
cGx1Z2lucy5wdXNoKHsKLSAgICAgICAgaW5pdDogaW5pdCwKLSAgICAgICAgbmFtZTogJ3N5bWJv
bHMnLAotICAgICAgICB2ZXJzaW9uOiAnMS4wJwotICAgIH0pOwotfSkoalF1ZXJ5KTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmZsb3QudGhy
ZXNob2xkLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxv
dC50aHJlc2hvbGQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNjBjMmUwMzQy
NTdlZmM4MTdiZWE5ODIyZjM5Y2RlNjM3MTI5ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9q
cXVlcnkuZmxvdC50aHJlc2hvbGQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAot
LyogRmxvdCBwbHVnaW4gZm9yIHRocmVzaG9sZGluZyBkYXRhLgotCi1Db3B5cmlnaHQgKGMpIDIw
MDctMjAxMiBJT0xBIGFuZCBPbGUgTGF1cnNlbi4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGlj
ZW5zZS4KLQotVGhlIHBsdWdpbiBzdXBwb3J0cyB0aGVzZSBvcHRpb25zOgotCi0gICAgc2VyaWVz
OiB7Ci0gICAgICAgIHRocmVzaG9sZDogewotICAgICAgICAgICAgYmVsb3c6IG51bWJlcgotICAg
ICAgICAgICAgY29sb3I6IGNvbG9yc3BlYwotICAgICAgICB9Ci0gICAgfQotCi1JdCBjYW4gYWxz
byBiZSBhcHBsaWVkIHRvIGEgc2luZ2xlIHNlcmllcywgbGlrZSB0aGlzOgotCi0gICAgJC5wbG90
KCAkKCIjcGxhY2Vob2xkZXIiKSwgW3sKLSAgICAgICAgZGF0YTogWyAuLi4gXSwKLSAgICAgICAg
dGhyZXNob2xkOiB7IC4uLiB9Ci0gICAgfV0pCi0KLUFuIGFycmF5IGNhbiBiZSBwYXNzZWQgZm9y
IG11bHRpcGxlIHRocmVzaG9sZGluZywgbGlrZSB0aGlzOgotCi0gICAgdGhyZXNob2xkOiBbewot
ICAgICAgICBiZWxvdzogbnVtYmVyMQotICAgICAgICBjb2xvcjogY29sb3IxCi0gICAgfSx7Ci0g
ICAgICAgIGJlbG93OiBudW1iZXIyCi0gICAgICAgIGNvbG9yOiBjb2xvcjIKLSAgICB9XQotCi1U
aGVzZSBtdWx0aXBsZSB0aHJlc2hvbGQgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIGluIGFueSBvcmRl
ciBzaW5jZSB0aGV5IGFyZQotc29ydGVkIGJ5IHRoZSBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotCi1U
aGUgZGF0YSBwb2ludHMgYmVsb3cgImJlbG93IiBhcmUgZHJhd24gd2l0aCB0aGUgc3BlY2lmaWVk
IGNvbG9yLiBUaGlzIG1ha2VzCi1pdCBlYXN5IHRvIG1hcmsgcG9pbnRzIGJlbG93IDAsIGUuZy4g
Zm9yIGJ1ZGdldCBkYXRhLgotCi1JbnRlcm5hbGx5LCB0aGUgcGx1Z2luIHdvcmtzIGJ5IHNwbGl0
dGluZyB0aGUgZGF0YSBpbnRvIHR3byBzZXJpZXMsIGFib3ZlIGFuZAotYmVsb3cgdGhlIHRocmVz
aG9sZC4gVGhlIGV4dHJhIHNlcmllcyBiZWxvdyB0aGUgdGhyZXNob2xkIHdpbGwgaGF2ZSBpdHMg
bGFiZWwKLWNsZWFyZWQgYW5kIHRoZSBzcGVjaWFsICJvcmlnaW5TZXJpZXMiIGF0dHJpYnV0ZSBz
ZXQgdG8gdGhlIG9yaWdpbmFsIHNlcmllcy4KLVlvdSBtYXkgbmVlZCB0byBjaGVjayBmb3IgdGhp
cyBpbiBob3ZlciBldmVudHMuCi0KLSovCi0KLShmdW5jdGlvbiAoJCkgewotICAgIHZhciBvcHRp
b25zID0gewotICAgICAgICBzZXJpZXM6IHsgdGhyZXNob2xkOiBudWxsIH0gLy8gb3IgeyBiZWxv
dzogbnVtYmVyLCBjb2xvcjogY29sb3Igc3BlY30KLSAgICB9OwotICAgIAotICAgIGZ1bmN0aW9u
IGluaXQocGxvdCkgewotICAgICAgICBmdW5jdGlvbiB0aHJlc2hvbGREYXRhKHBsb3QsIHMsIGRh
dGFwb2ludHMsIGJlbG93LCBjb2xvcikgewotICAgICAgICAgICAgdmFyIHBzID0gZGF0YXBvaW50
cy5wb2ludHNpemUsIGksIHgsIHksIHAsIHByZXZwLAotICAgICAgICAgICAgICAgIHRocmVzaG9s
ZGVkID0gJC5leHRlbmQoe30sIHMpOyAvLyBub3RlOiBzaGFsbG93IGNvcHkKLQotICAgICAgICAg
ICAgdGhyZXNob2xkZWQuZGF0YXBvaW50cyA9IHsgcG9pbnRzOiBbXSwgcG9pbnRzaXplOiBwcywg
Zm9ybWF0OiBkYXRhcG9pbnRzLmZvcm1hdCB9OwotICAgICAgICAgICAgdGhyZXNob2xkZWQubGFi
ZWwgPSBudWxsOwotICAgICAgICAgICAgdGhyZXNob2xkZWQuY29sb3IgPSBjb2xvcjsKLSAgICAg
ICAgICAgIHRocmVzaG9sZGVkLnRocmVzaG9sZCA9IG51bGw7Ci0gICAgICAgICAgICB0aHJlc2hv
bGRlZC5vcmlnaW5TZXJpZXMgPSBzOwotICAgICAgICAgICAgdGhyZXNob2xkZWQuZGF0YSA9IFtd
OwotIAotICAgICAgICAgICAgdmFyIG9yaWdwb2ludHMgPSBkYXRhcG9pbnRzLnBvaW50cywKLSAg
ICAgICAgICAgICAgICBhZGRDcm9zc2luZ1BvaW50cyA9IHMubGluZXMuc2hvdzsKLQotICAgICAg
ICAgICAgdmFyIHRocmVzcG9pbnRzID0gW107Ci0gICAgICAgICAgICB2YXIgbmV3cG9pbnRzID0g
W107Ci0gICAgICAgICAgICB2YXIgbTsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9y
aWdwb2ludHMubGVuZ3RoOyBpICs9IHBzKSB7Ci0gICAgICAgICAgICAgICAgeCA9IG9yaWdwb2lu
dHNbaV07Ci0gICAgICAgICAgICAgICAgeSA9IG9yaWdwb2ludHNbaSArIDFdOwotCi0gICAgICAg
ICAgICAgICAgcHJldnAgPSBwOwotICAgICAgICAgICAgICAgIGlmICh5IDwgYmVsb3cpCi0gICAg
ICAgICAgICAgICAgICAgIHAgPSB0aHJlc3BvaW50czsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHAgPSBuZXdwb2ludHM7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
YWRkQ3Jvc3NpbmdQb2ludHMgJiYgcHJldnAgIT0gcCAmJiB4ICE9IG51bGwKLSAgICAgICAgICAg
ICAgICAgICAgJiYgaSA+IDAgJiYgb3JpZ3BvaW50c1tpIC0gcHNdICE9IG51bGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGludGVyeCA9ICh4IC0gb3JpZ3BvaW50c1tpIC0gcHNdKSAvICh5
IC0gb3JpZ3BvaW50c1tpIC0gcHMgKyAxXSkgKiAoYmVsb3cgLSB5KSArIHg7Ci0gICAgICAgICAg
ICAgICAgICAgIHByZXZwLnB1c2goaW50ZXJ4KTsKLSAgICAgICAgICAgICAgICAgICAgcHJldnAu
cHVzaChiZWxvdyk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobSA9IDI7IG0gPCBwczsgKytt
KQotICAgICAgICAgICAgICAgICAgICAgICAgcHJldnAucHVzaChvcmlncG9pbnRzW2kgKyBtXSk7
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwLnB1c2gobnVsbCk7
IC8vIHN0YXJ0IG5ldyBzZWdtZW50Ci0gICAgICAgICAgICAgICAgICAgIHAucHVzaChudWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMjsgbSA8IHBzOyArK20pCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwLnB1c2gob3JpZ3BvaW50c1tpICsgbV0pOwotICAgICAgICAgICAgICAg
ICAgICBwLnB1c2goaW50ZXJ4KTsKLSAgICAgICAgICAgICAgICAgICAgcC5wdXNoKGJlbG93KTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChtID0gMjsgbSA8IHBzOyArK20pCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwLnB1c2gob3JpZ3BvaW50c1tpICsgbV0pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHAucHVzaCh4KTsKLSAgICAgICAgICAgICAgICBwLnB1c2go
eSk7Ci0gICAgICAgICAgICAgICAgZm9yIChtID0gMjsgbSA8IHBzOyArK20pCi0gICAgICAgICAg
ICAgICAgICAgIHAucHVzaChvcmlncG9pbnRzW2kgKyBtXSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGRhdGFwb2ludHMucG9pbnRzID0gbmV3cG9pbnRzOwotICAgICAgICAgICAgdGhy
ZXNob2xkZWQuZGF0YXBvaW50cy5wb2ludHMgPSB0aHJlc3BvaW50czsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHRocmVzaG9sZGVkLmRhdGFwb2ludHMucG9pbnRzLmxlbmd0aCA+IDAp
IHsKLSAgICAgICAgICAgICAgICB2YXIgb3JpZ0luZGV4ID0gJC5pbkFycmF5KHMsIHBsb3QuZ2V0
RGF0YSgpKTsKLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQgbmV3bHktZ2VuZXJhdGVkIHNlcmll
cyByaWdodCBhZnRlciBvcmlnaW5hbCBvbmUgKHRvIHByZXZlbnQgaXQgZnJvbSBiZWNvbWluZyB0
b3AtbW9zdCkKLSAgICAgICAgICAgICAgICBwbG90LmdldERhdGEoKS5zcGxpY2Uob3JpZ0luZGV4
ICsgMSwgMCwgdGhyZXNob2xkZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gRklYTUU6IHRoZXJlIGFyZSBwcm9iYWJseSBzb21lIGVkZ2UgY2FzZXMg
bGVmdCBpbiBiYXJzCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nl
c3NUaHJlc2hvbGRzKHBsb3QsIHMsIGRhdGFwb2ludHMpIHsKLSAgICAgICAgICAgIGlmICghcy50
aHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAocy50aHJlc2hvbGQgaW5zdGFuY2VvZiBBcnJheSkgewotICAgICAgICAgICAgICAg
IHMudGhyZXNob2xkLnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYS5iZWxvdyAtIGIuYmVsb3c7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgJChzLnRocmVzaG9sZCkuZWFjaChmdW5jdGlvbihpLCB0
aCkgewotICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGREYXRhKHBsb3QsIHMsIGRhdGFwb2lu
dHMsIHRoLmJlbG93LCB0aC5jb2xvcik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJlc2hvbGREYXRhKHBs
b3QsIHMsIGRhdGFwb2ludHMsIHMudGhyZXNob2xkLmJlbG93LCBzLnRocmVzaG9sZC5jb2xvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBsb3QuaG9va3Mu
cHJvY2Vzc0RhdGFwb2ludHMucHVzaChwcm9jZXNzVGhyZXNob2xkcyk7Ci0gICAgfQotICAgIAot
ICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0LAotICAgICAgICBv
cHRpb25zOiBvcHRpb25zLAotICAgICAgICBuYW1lOiAndGhyZXNob2xkJywKLSAgICAgICAgdmVy
c2lvbjogJzEuMicKLSAgICB9KTsKLX0pKGpRdWVyeSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnRpbWUuanMgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5mbG90LnRpbWUuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMyMWMzNTc1MWFkYjAyYzljZDgzMDAzMDg2NzZmOGRmOWQ5ZWQx
YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9qcy9qcXVlcnkuZmxvdC50aW1lLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNDE3ICswLDAgQEAKLS8qIFByZXR0eSBoYW5kbGluZyBvZiB0aW1lIGF4ZXMu
Ci0KLUNvcHlyaWdodCAoYykgMjAwNy0yMDEyIElPTEEgYW5kIE9sZSBMYXVyc2VuLgotTGljZW5z
ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgotCi1TZXQgYXhpcy5tb2RlIHRvICJ0aW1lIiB0byBl
bmFibGUuIFNlZSB0aGUgc2VjdGlvbiAiVGltZSBzZXJpZXMgZGF0YSIgaW4KLUFQSS50eHQgZm9y
IGRldGFpbHMuCi0KLSovCi0KLShmdW5jdGlvbigkKSB7Ci0KLSAgICB2YXIgb3B0aW9ucyA9IHt9
OwotCi0gICAgLy8gcm91bmQgdG8gbmVhcmJ5IGxvd2VyIG11bHRpcGxlIG9mIGJhc2UKLQotICAg
IGZ1bmN0aW9uIGZsb29ySW5CYXNlKG4sIGJhc2UpIHsKLSAgICAgICAgcmV0dXJuIGJhc2UgKiBN
YXRoLmZsb29yKG4gLyBiYXNlKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgc3RyaW5nIHdp
dGggdGhlIGRhdGUgZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIGZtdC4KLSAgICAvLyBBIHN1YnNl
dCBvZiB0aGUgT3BlbiBHcm91cCdzIHN0cmZ0aW1lIGZvcm1hdCBpcyBzdXBwb3J0ZWQuCi0KLSAg
ICBmdW5jdGlvbiBmb3JtYXREYXRlKGQsIGZtdCwgbW9udGhOYW1lcywgZGF5TmFtZXMpIHsKLQot
ICAgICAgICBpZiAodHlwZW9mIGQuc3RyZnRpbWUgPT0gImZ1bmN0aW9uIikgewotICAgICAgICAg
ICAgcmV0dXJuIGQuc3RyZnRpbWUoZm10KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsZWZ0
UGFkID0gZnVuY3Rpb24obiwgcGFkKSB7Ci0gICAgICAgICAgICBuID0gIiIgKyBuOwotICAgICAg
ICAgICAgcGFkID0gIiIgKyAocGFkID09IG51bGwgPyAiMCIgOiBwYWQpOwotICAgICAgICAgICAg
cmV0dXJuIG4ubGVuZ3RoID09IDEgPyBwYWQgKyBuIDogbjsKLSAgICAgICAgfTsKLQotICAgICAg
ICB2YXIgciA9IFtdOwotICAgICAgICB2YXIgZXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIHZhciBo
b3VycyA9IGQuZ2V0SG91cnMoKTsKLSAgICAgICAgdmFyIGlzQU0gPSBob3VycyA8IDEyOwotCi0g
ICAgICAgIGlmIChtb250aE5hbWVzID09IG51bGwpIHsKLSAgICAgICAgICAgIG1vbnRoTmFtZXMg
PSBbIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWci
LCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIl07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZGF5TmFtZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgZGF5TmFtZXMgPSBbIlN1biIsICJNb24i
LCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIGhvdXJzMTI7Ci0KLSAgICAgICAgaWYgKGhvdXJzID4gMTIpIHsKLSAgICAgICAgICAg
IGhvdXJzMTIgPSBob3VycyAtIDEyOwotICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID09IDApIHsK
LSAgICAgICAgICAgIGhvdXJzMTIgPSAxMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGhvdXJzMTIgPSBob3VyczsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZm10Lmxlbmd0aDsgKytpKSB7Ci0KLSAgICAgICAgICAgIHZhciBjID0gZm10LmNoYXJBdChp
KTsKLQotICAgICAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAo
YykgewotICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogYyA9ICIiICsgZGF5TmFtZXNbZC5n
ZXREYXkoKV07IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzogYyA9ICIiICsg
bW9udGhOYW1lc1tkLmdldE1vbnRoKCldOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnZCc6IGMgPSBsZWZ0UGFkKGQuZ2V0RGF0ZSgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2UnOiBjID0gbGVmdFBhZChkLmdldERhdGUoKSwgIiAiKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ0gnOiBjID0gbGVmdFBhZChob3Vycyk7IGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlICdJJzogYyA9IGxlZnRQYWQoaG91cnMxMik7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlICdsJzogYyA9IGxlZnRQYWQoaG91cnMxMiwgIiAiKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ20nOiBjID0gbGVmdFBhZChkLmdldE1v
bnRoKCkgKyAxKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ00nOiBjID0gbGVm
dFBhZChkLmdldE1pbnV0ZXMoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvLyBxdWFy
dGVycyBub3QgaW4gT3BlbiBHcm91cCdzIHN0cmZ0aW1lIHNwZWNpZmljYXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gIiIgKyAo
TWF0aC5mbG9vcihkLmdldE1vbnRoKCkgLyAzKSArIDEpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnUyc6IGMgPSBsZWZ0UGFkKGQuZ2V0U2Vjb25kcygpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3knOiBjID0gbGVmdFBhZChkLmdldEZ1bGxZZWFyKCkgJSAx
MDApOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnWSc6IGMgPSAiIiArIGQuZ2V0
RnVsbFllYXIoKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3AnOiBjID0gKGlz
QU0pID8gKCIiICsgImFtIikgOiAoIiIgKyAicG0iKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ1AnOiBjID0gKGlzQU0pID8gKCIiICsgIkFNIikgOiAoIiIgKyAiUE0iKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOiBjID0gIiIgKyBkLmdldERheSgpOyBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgci5wdXNoKGMpOwotICAg
ICAgICAgICAgICAgIGVzY2FwZSA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYyA9PSAiJSIpIHsKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByLnB1
c2goYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHIuam9pbigiIik7Ci0gICAgfQotCi0gICAgLy8gVG8gaGF2ZSBhIGNvbnNp
c3RlbnQgdmlldyBvZiB0aW1lLWJhc2VkIGRhdGEgaW5kZXBlbmRlbnQgb2Ygd2hpY2ggdGltZQot
ICAgIC8vIHpvbmUgdGhlIGNsaWVudCBoYXBwZW5zIHRvIGJlIGluIHdlIG5lZWQgYSBkYXRlLWxp
a2Ugb2JqZWN0IGluZGVwZW5kZW50Ci0gICAgLy8gb2YgdGltZSB6b25lcy4gIFRoaXMgaXMgZG9u
ZSB0aHJvdWdoIGEgd3JhcHBlciB0aGF0IG9ubHkgY2FsbHMgdGhlIFVUQwotICAgIC8vIHZlcnNp
b25zIG9mIHRoZSBhY2Nlc3NvciBtZXRob2RzLgotCi0gICAgZnVuY3Rpb24gbWFrZVV0Y1dyYXBw
ZXIoZCkgewotCi0gICAgICAgIGZ1bmN0aW9uIGFkZFByb3h5TWV0aG9kKHNvdXJjZU9iaiwgc291
cmNlTWV0aG9kLCB0YXJnZXRPYmosIHRhcmdldE1ldGhvZCkgewotICAgICAgICAgICAgc291cmNl
T2JqW3NvdXJjZU1ldGhvZF0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0T2JqW3RhcmdldE1ldGhvZF0uYXBwbHkodGFyZ2V0T2JqLCBhcmd1bWVudHMpOwotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgdXRjID0gewotICAgICAgICAg
ICAgZGF0ZTogZAotICAgICAgICB9OwotCi0gICAgICAgIC8vIHN1cHBvcnQgc3RyZnRpbWUsIGlm
IGZvdW5kCi0KLSAgICAgICAgaWYgKGQuc3RyZnRpbWUgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAg
ICAgICBhZGRQcm94eU1ldGhvZCh1dGMsICJzdHJmdGltZSIsIGQsICJzdHJmdGltZSIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYWRkUHJveHlNZXRob2QodXRjLCAiZ2V0VGltZSIsIGQsICJnZXRU
aW1lIik7Ci0gICAgICAgIGFkZFByb3h5TWV0aG9kKHV0YywgInNldFRpbWUiLCBkLCAic2V0VGlt
ZSIpOwotCi0gICAgICAgIHZhciBwcm9wcyA9IFsiRGF0ZSIsICJEYXkiLCAiRnVsbFllYXIiLCAi
SG91cnMiLCAiTWlsbGlzZWNvbmRzIiwgIk1pbnV0ZXMiLCAiTW9udGgiLCAiU2Vjb25kcyJdOwot
Ci0gICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHsKLSAgICAg
ICAgICAgIGFkZFByb3h5TWV0aG9kKHV0YywgImdldCIgKyBwcm9wc1twXSwgZCwgImdldFVUQyIg
KyBwcm9wc1twXSk7Ci0gICAgICAgICAgICBhZGRQcm94eU1ldGhvZCh1dGMsICJzZXQiICsgcHJv
cHNbcF0sIGQsICJzZXRVVEMiICsgcHJvcHNbcF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHV0YzsKLSAgICB9OwotCi0gICAgLy8gc2VsZWN0IHRpbWUgem9uZSBzdHJhdGVneS4gIFRo
aXMgcmV0dXJucyBhIGRhdGUtbGlrZSBvYmplY3QgdGllZCB0byB0aGUKLSAgICAvLyBkZXNpcmVk
IHRpbWV6b25lCi0KLSAgICBmdW5jdGlvbiBkYXRlR2VuZXJhdG9yKHRzLCBvcHRzKSB7Ci0gICAg
ICAgIGlmIChvcHRzLnRpbWV6b25lID09ICJicm93c2VyIikgewotICAgICAgICAgICAgcmV0dXJu
IG5ldyBEYXRlKHRzKTsKLSAgICAgICAgfSBlbHNlIGlmICghb3B0cy50aW1lem9uZSB8fCBvcHRz
LnRpbWV6b25lID09ICJ1dGMiKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVV0Y1dyYXBwZXIo
bmV3IERhdGUodHMpKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGltZXpvbmVKUyAhPSAi
dW5kZWZpbmVkIiAmJiB0eXBlb2YgdGltZXpvbmVKUy5EYXRlICE9ICJ1bmRlZmluZWQiKSB7Ci0g
ICAgICAgICAgICB2YXIgZCA9IG5ldyB0aW1lem9uZUpTLkRhdGUoKTsKLSAgICAgICAgICAgIC8v
IHRpbWV6b25lLWpzIGlzIGZpY2tsZSwgc28gYmUgc3VyZSB0byBzZXQgdGhlIHRpbWUgem9uZSBi
ZWZvcmUKLSAgICAgICAgICAgIC8vIHNldHRpbmcgdGhlIHRpbWUuCi0gICAgICAgICAgICBkLnNl
dFRpbWV6b25lKG9wdHMudGltZXpvbmUpOwotICAgICAgICAgICAgZC5zZXRUaW1lKHRzKTsKLSAg
ICAgICAgICAgIHJldHVybiBkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJu
IG1ha2VVdGNXcmFwcGVyKG5ldyBEYXRlKHRzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgLy8gbWFwIG9mIGFwcC4gc2l6ZSBvZiB0aW1lIHVuaXRzIGluIG1pbGxpc2Vjb25kcwotCi0g
ICAgdmFyIHRpbWVVbml0U2l6ZSA9IHsKLSAgICAgICAgInNlY29uZCI6IDEwMDAsCi0gICAgICAg
ICJtaW51dGUiOiA2MCAqIDEwMDAsCi0gICAgICAgICJob3VyIjogNjAgKiA2MCAqIDEwMDAsCi0g
ICAgICAgICJkYXkiOiAyNCAqIDYwICogNjAgKiAxMDAwLAotICAgICAgICAibW9udGgiOiAzMCAq
IDI0ICogNjAgKiA2MCAqIDEwMDAsCi0gICAgICAgICJxdWFydGVyIjogMyAqIDMwICogMjQgKiA2
MCAqIDYwICogMTAwMCwKLSAgICAgICAgInllYXIiOiAzNjUuMjQyNSAqIDI0ICogNjAgKiA2MCAq
IDEwMDAKLSAgICB9OwotCi0gICAgLy8gdGhlIGFsbG93ZWQgdGljayBzaXplcywgYWZ0ZXIgMSB5
ZWFyIHdlIHVzZQotICAgIC8vIGFuIGludGVnZXIgYWxnb3JpdGhtCi0KLSAgICB2YXIgYmFzZVNw
ZWMgPSBbCi0gICAgICAgIFsxLCAic2Vjb25kIl0sIFsyLCAic2Vjb25kIl0sIFs1LCAic2Vjb25k
Il0sIFsxMCwgInNlY29uZCJdLAotICAgICAgICBbMzAsICJzZWNvbmQiXSwgCi0gICAgICAgIFsx
LCAibWludXRlIl0sIFsyLCAibWludXRlIl0sIFs1LCAibWludXRlIl0sIFsxMCwgIm1pbnV0ZSJd
LAotICAgICAgICBbMzAsICJtaW51dGUiXSwgCi0gICAgICAgIFsxLCAiaG91ciJdLCBbMiwgImhv
dXIiXSwgWzQsICJob3VyIl0sCi0gICAgICAgIFs4LCAiaG91ciJdLCBbMTIsICJob3VyIl0sCi0g
ICAgICAgIFsxLCAiZGF5Il0sIFsyLCAiZGF5Il0sIFszLCAiZGF5Il0sCi0gICAgICAgIFswLjI1
LCAibW9udGgiXSwgWzAuNSwgIm1vbnRoIl0sIFsxLCAibW9udGgiXSwKLSAgICAgICAgWzIsICJt
b250aCJdCi0gICAgXTsKLQotICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggdmFyaWFudChzKSB3
ZSdsbCBuZWVkIHlldCwgYnV0IGdlbmVyYXRpbmcgYm90aCBpcwotICAgIC8vIGNoZWFwCi0KLSAg
ICB2YXIgc3BlY01vbnRocyA9IGJhc2VTcGVjLmNvbmNhdChbWzMsICJtb250aCJdLCBbNiwgIm1v
bnRoIl0sCi0gICAgICAgIFsxLCAieWVhciJdXSk7Ci0gICAgdmFyIHNwZWNRdWFydGVycyA9IGJh
c2VTcGVjLmNvbmNhdChbWzEsICJxdWFydGVyIl0sIFsyLCAicXVhcnRlciJdLAotICAgICAgICBb
MSwgInllYXIiXV0pOwotCi0gICAgZnVuY3Rpb24gaW5pdChwbG90KSB7Ci0gICAgICAgIHBsb3Qu
aG9va3MucHJvY2Vzc0RhdGFwb2ludHMucHVzaChmdW5jdGlvbiAocGxvdCwgc2VyaWVzLCBkYXRh
cG9pbnRzKSB7Ci0gICAgICAgICAgICAkLmVhY2gocGxvdC5nZXRBeGVzKCksIGZ1bmN0aW9uKGF4
aXNOYW1lLCBheGlzKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IGF4aXMub3B0aW9u
czsKLQotICAgICAgICAgICAgICAgIGlmIChvcHRzLm1vZGUgPT0gInRpbWUiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF4aXMudGlja0dlbmVyYXRvciA9IGZ1bmN0aW9uKGF4aXMpIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gW107Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZCA9IGRhdGVHZW5lcmF0b3IoYXhpcy5taW4sIG9wdHMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1pblNpemUgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBtYWtlIHF1YXJ0ZXIgdXNlIGEgcG9zc2liaWxpdHkgaWYgcXVhcnRlcnMgYXJlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtZW50aW9uZWQgaW4gZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMK
LQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwZWMgPSAob3B0cy50aWNrU2l6ZSAmJiBv
cHRzLnRpY2tTaXplWzFdID09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxdWFydGVy
IikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5taW5UaWNrU2l6ZSAmJiBv
cHRzLm1pblRpY2tTaXplWzFdID09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJxdWFy
dGVyIikgPyBzcGVjUXVhcnRlcnMgOiBzcGVjTW9udGhzOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3B0cy5taW5UaWNrU2l6ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnRpY2tTaXplID09ICJudW1iZXIiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1pblNpemUgPSBvcHRzLnRpY2tTaXplOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1pblNpemUgPSBvcHRzLm1pblRpY2tTaXplWzBdICogdGltZVVuaXRTaXplW29wdHMu
bWluVGlja1NpemVbMV1dOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzcGVjLmxlbmd0aCAtIDE7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChheGlzLmRlbHRhIDwgKHNwZWNbaV1bMF0gKiB0aW1lVW5pdFNpemVbc3BlY1tpXVsx
XV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNwZWNb
aSArIDFdWzBdICogdGltZVVuaXRTaXplW3NwZWNbaSArIDFdWzFdXSkgLyAyCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHNwZWNbaV1bMF0gKiB0aW1lVW5pdFNpemVbc3BlY1tp
XVsxXV0gPj0gbWluU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gc3BlY1tpXVswXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB1bml0ID0gc3BlY1tpXVsxXTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlIHRoZSBwb3NzaWJpbGl0eSBvZiBzZXZlcmFs
IHllYXJzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bml0ID09ICJ5ZWFyIikgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZ2l2ZW4gYSBtaW5UaWNrU2l6ZSBp
biB5ZWFycywganVzdCB1c2UgaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5z
dXJpbmcgdGhhdCBpdCdzIGFuIGludGVnZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcHRzLm1pblRpY2tTaXplICE9IG51bGwgJiYgb3B0cy5taW5UaWNrU2l6ZVsxXSA9PSAi
eWVhciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE1hdGguZmxv
b3Iob3B0cy5taW5UaWNrU2l6ZVswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFnbiA9IE1hdGgu
cG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKGF4aXMuZGVsdGEgLyB0aW1lVW5pdFNpemUueWVh
cikgLyBNYXRoLkxOMTApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5v
cm0gPSAoYXhpcy5kZWx0YSAvIHRpbWVVbml0U2l6ZS55ZWFyKSAvIG1hZ247Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm0gPCAxLjUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG5vcm0gPCAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplID0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChub3JtIDwgNy41KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxMDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUgKj0gbWFnbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBtaW5pbXVtIHNpemUgZm9yIHllYXJzIGlzIDEKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplIDwgMSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGF4
aXMudGlja1NpemUgPSBvcHRzLnRpY2tTaXplIHx8IFtzaXplLCB1bml0XTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0aWNrU2l6ZSA9IGF4aXMudGlja1NpemVbMF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bml0ID0gYXhpcy50aWNrU2l6ZVsxXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHN0ZXAgPSB0aWNrU2l6ZSAqIHRpbWVVbml0U2l6ZVt1bml0XTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaXQgPT0gInNlY29uZCIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkLnNldFNlY29uZHMoZmxvb3JJbkJhc2UoZC5nZXRTZWNvbmRzKCks
IHRpY2tTaXplKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT0g
Im1pbnV0ZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1pbnV0ZXMoZmxv
b3JJbkJhc2UoZC5nZXRNaW51dGVzKCksIHRpY2tTaXplKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHVuaXQgPT0gImhvdXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZC5zZXRIb3VycyhmbG9vckluQmFzZShkLmdldEhvdXJzKCksIHRpY2tTaXplKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT0gIm1vbnRoIikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0TW9udGgoZmxvb3JJbkJhc2UoZC5nZXRNb250
aCgpLCB0aWNrU2l6ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bml0
ID09ICJxdWFydGVyIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0TW9udGgo
MyAqIGZsb29ySW5CYXNlKGQuZ2V0TW9udGgoKSAvIDMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpY2tTaXplKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVuaXQgPT0gInllYXIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRGdWxs
WWVhcihmbG9vckluQmFzZShkLmdldEZ1bGxZZWFyKCksIHRpY2tTaXplKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHNtYWxs
ZXIgY29tcG9uZW50cwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1pbGxpc2Vjb25k
cygwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAgPj0gdGltZVVuaXRTaXpl
Lm1pbnV0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0U2Vjb25kcygwKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUu
aG91cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0TWludXRlcygwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUuZGF5
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRIb3VycygwKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUuZGF5ICogNCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0RGF0ZSgxKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcCA+PSB0aW1lVW5pdFNpemUubW9udGggKiAyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRNb250aChmbG9vckluQmFzZShkLmdl
dE1vbnRoKCksIDMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcCA+
PSB0aW1lVW5pdFNpemUucXVhcnRlciAqIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkLnNldE1vbnRoKGZsb29ySW5CYXNlKGQuZ2V0TW9udGgoKSwgNikpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwID49IHRpbWVVbml0U2l6ZS55ZWFyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRNb250aCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcnJ5ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2ID0gTnVtYmVyLk5hTjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBwcmV2OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gdjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ID0gZC5nZXRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja3Mu
cHVzaCh2KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bml0ID09ICJtb250
aCIgfHwgdW5pdCA9PSAicXVhcnRlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRpY2tTaXplIDwgMSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhIGJpdCBjb21wbGljYXRlZCAtIHdlJ2xsIGRpdmlkZSB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vbnRoL3F1YXJ0ZXIgdXAgYnV0IHdlIG5lZWQg
dG8gdGFrZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FyZSBvZiBm
cmFjdGlvbnMgc28gd2UgZG9uJ3QgZW5kIHVwIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgZGF5Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGQuc2V0RGF0ZSgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzdGFydCA9IGQuZ2V0VGltZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZC5zZXRNb250aChkLmdldE1vbnRoKCkgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh1bml0ID09ICJxdWFydGVyIiA/IDMgOiAxKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gZC5nZXRUaW1lKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFRpbWUodiArIGNhcnJ5
ICogdGltZVVuaXRTaXplLmhvdXIgKyAoZW5kIC0gc3RhcnQpICogdGlja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycnkgPSBkLmdldEhvdXJzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldEhvdXJzKDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZC5zZXRNb250aChkLmdldE1vbnRoKCkgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpY2tTaXplICogKHVuaXQgPT0gInF1YXJ0ZXIiID8gMyA6
IDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PSAieWVhciIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgKyB0aWNrU2l6
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5zZXRUaW1lKHYgKyBzdGVwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICh2IDwgYXhpcy5t
YXggJiYgdiAhPSBwcmV2KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tz
OwotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIGF4aXMudGlj
a0Zvcm1hdHRlciA9IGZ1bmN0aW9uICh2LCBheGlzKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkID0gZGF0ZUdlbmVyYXRvcih2LCBheGlzLm9wdGlvbnMpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmaXJzdCBjaGVjayBnbG9iYWwgZm9ybWF0Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcHRzLnRpbWVmb3JtYXQgIT0gbnVsbCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKGQsIG9wdHMudGltZWZvcm1hdCwgb3B0
cy5tb250aE5hbWVzLCBvcHRzLmRheU5hbWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libHkgdXNlIHF1YXJ0ZXJzIGlmIHF1
YXJ0ZXJzIGFyZSBtZW50aW9uZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueSBv
ZiB0aGVzZSBwbGFjZXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZVF1YXJ0ZXJz
ID0gKGF4aXMub3B0aW9ucy50aWNrU2l6ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBheGlzLm9wdGlvbnMudGlja1NpemVbMV0gPT0gInF1YXJ0ZXIiKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChheGlzLm9wdGlvbnMubWluVGlja1NpemUgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy5vcHRpb25zLm1pblRpY2tTaXplWzFdID09ICJx
dWFydGVyIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gYXhpcy50aWNrU2l6
ZVswXSAqIHRpbWVVbml0U2l6ZVtheGlzLnRpY2tTaXplWzFdXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBzcGFuID0gYXhpcy5tYXggLSBheGlzLm1pbjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBzdWZmaXggPSAob3B0cy50d2VsdmVIb3VyQ2xvY2spID8gIiAlcCIgOiAiIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3VyQ29kZSA9IChvcHRzLnR3ZWx2ZUhvdXJD
bG9jaykgPyAiJUkiIDogIiVIIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbXQ7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IDwgdGltZVVuaXRTaXplLm1pbnV0ZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGhvdXJDb2RlICsgIjolTTolUyIgKyBz
dWZmaXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgPCB0aW1lVW5pdFNp
emUuZGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW4gPCAyICogdGlt
ZVVuaXRTaXplLmRheSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBo
b3VyQ29kZSArICI6JU0iICsgc3VmZml4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIlYiAlZCAiICsg
aG91ckNvZGUgKyAiOiVNIiArIHN1ZmZpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgPCB0aW1lVW5pdFNpemUubW9u
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiJWIgJWQiOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgodXNlUXVhcnRlcnMgJiYgdCA8IHRpbWVVbml0
U2l6ZS5xdWFydGVyKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdXNlUXVhcnRl
cnMgJiYgdCA8IHRpbWVVbml0U2l6ZS55ZWFyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzcGFuIDwgdGltZVVuaXRTaXplLnllYXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm10ID0gIiViIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiJWIgJVkiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodXNlUXVhcnRlcnMgJiYgdCA8IHRpbWVVbml0U2l6ZS55ZWFyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNwYW4gPCB0aW1lVW5pdFNpemUueWVhcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSAiUSVxIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQg
PSAiUSVxICVZIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICIl
WSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBydCA9IGZvcm1hdERhdGUoZCwgZm10LCBvcHRzLm1vbnRoTmFtZXMsIG9wdHMuZGF5TmFt
ZXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnQ7Ci0gICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0p
OwotICAgIH0KLQotICAgICQucGxvdC5wbHVnaW5zLnB1c2goewotICAgICAgICBpbml0OiBpbml0
LAotICAgICAgICBvcHRpb25zOiBvcHRpb25zLAotICAgICAgICBuYW1lOiAndGltZScsCi0gICAg
ICAgIHZlcnNpb246ICcxLjAnCi0gICAgfSk7Ci0KLSAgICAvLyBUaW1lLWF4aXMgc3VwcG9ydCB1
c2VkIHRvIGJlIGluIEZsb3QgY29yZSwgd2hpY2ggZXhwb3NlZCB0aGUKLSAgICAvLyBmb3JtYXRE
YXRlIGZ1bmN0aW9uIG9uIHRoZSBwbG90IG9iamVjdC4gIFZhcmlvdXMgcGx1Z2lucyBkZXBlbmQK
LSAgICAvLyBvbiB0aGUgZnVuY3Rpb24sIHNvIHdlIG5lZWQgdG8gcmUtZXhwb3NlIGl0IGhlcmUu
Ci0KLSAgICAkLnBsb3QuZm9ybWF0RGF0ZSA9IGZvcm1hdERhdGU7Ci0KLX0pKGpRdWVyeSk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2pzL2pxdWVyeS5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxZGRkOGViZDZjMTI5NWVhYWE3Njc4ODIxZDI0ZjZhZjBiMWYx
OGY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvanMvanF1ZXJ5LmpzCisrKyAvZGV2L251bGwKQEAg
LTEsOTQ3MiArMCwwIEBACi0vKiEKLSAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuOC4z
Ci0gKiBodHRwOi8vanF1ZXJ5LmNvbS8KLSAqCi0gKiBJbmNsdWRlcyBTaXp6bGUuanMKLSAqIGh0
dHA6Ly9zaXp6bGVqcy5jb20vCi0gKgotICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRp
b24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwotICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNl
bnNlCi0gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCi0gKgotICogRGF0ZTogVHVlIE5vdiAx
MyAyMDEyIDA4OjIwOjMzIEdNVC0wNTAwIChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpCi0gKi8KLShm
dW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7Ci12YXIKLSAgICAvLyBBIGNlbnRyYWwgcmVm
ZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKLSAgICByb290alF1ZXJ5LAotCi0g
ICAgLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Ci0gICAgcmVhZHlMaXN0LAotCi0g
ICAgLy8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFy
Z3VtZW50IChzYW5kYm94KQotICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAotICAgIGxv
Y2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAotICAgIG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0
b3IsCi0KLSAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLSAgICBf
alF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKLQotICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ug
b2Ygb3ZlcndyaXRlCi0gICAgXyQgPSB3aW5kb3cuJCwKLQotICAgIC8vIFNhdmUgYSByZWZlcmVu
Y2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKLSAgICBjb3JlX3B1c2ggPSBBcnJheS5wcm90b3R5cGUu
cHVzaCwKLSAgICBjb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAotICAgIGNvcmVf
aW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAotICAgIGNvcmVfdG9TdHJpbmcgPSBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAotICAgIGNvcmVfaGFzT3duID0gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eSwKLSAgICBjb3JlX3RyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRy
aW0sCi0KLSAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQotICAgIGpRdWVyeSA9
IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAgICAgLy8gVGhlIGpRdWVyeSBv
YmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCi0g
ICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290
alF1ZXJ5ICk7Ci0gICAgfSwKLQotICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKLSAg
ICBjb3JlX3BudW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291
cmNlLAotCi0gICAgLy8gVXNlZCBmb3IgZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNl
Ci0gICAgY29yZV9ybm90d2hpdGUgPSAvXFMvLAotICAgIGNvcmVfcnNwYWNlID0gL1xzKy8sCi0K
LSAgICAvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29raW5nIGF0
IHlvdSwgU2FmYXJpIDUuMCBhbmQgSUUpCi0gICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xb
XHNcdUZFRkZceEEwXSskL2csCi0KLSAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhU
TUwgc3RyaW5ncwotICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNT
IHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKLSAgICBycXVpY2tFeHByID0gL14oPzpbXiM8XSoo
PFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAotCi0gICAgLy8gTWF0Y2ggYSBzdGFuZGFs
b25lIHRhZwotICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLAot
Ci0gICAgLy8gSlNPTiBSZWdFeHAKLSAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywK
LSAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAotICAgIHJ2YWxpZGVz
Y2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZywKLSAgICBydmFsaWR0
b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCso
PzpbZUVdW1wtK10/XGQrfCkvZywKLQotICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3Ig
Y2FtZWxpemluZwotICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCi0gICAgcmRhc2hBbHBoYSA9IC8t
KFtcZGEtel0pL2dpLAotCi0gICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxi
YWNrIHRvIHJlcGxhY2UoKQotICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIg
KSB7Ci0gICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKLSAgICB9
LAotCi0gICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRo
b2QKLSAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICggZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2
ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2Ug
KTsKLSAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwotICAgICAgICB9IGVsc2UgaWYgKCBkb2N1
bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotICAgICAgICAgICAgLy8gd2UncmUg
aGVyZSBiZWNhdXNlIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaW4gb2xkSUUKLSAgICAgICAg
ICAgIC8vIHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkh
Ci0gICAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
IERPTUNvbnRlbnRMb2FkZWQgKTsKLSAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCi0gICAgY2xhc3My
dHlwZSA9IHt9OwotCi1qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewotICAgIGNvbnN0
cnVjdG9yOiBqUXVlcnksCi0gICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCBy
b290alF1ZXJ5ICkgewotICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOwotCi0gICAg
ICAgIC8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQotICAg
ICAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKLSAgICAgICAgaWYgKCBzZWxl
Y3Rvci5ub2RlVHlwZSApIHsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBz
ZWxlY3RvcjsKLSAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncwotICAg
ICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICBp
ZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0
b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0
aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKLSAgICAgICAgICAgICAgICBt
YXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKLQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8g
Y29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAotICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAo
bWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgewotCi0gICAgICAgICAgICAgICAgLy8gSEFORExFOiAk
KGh0bWwpIC0+ICQoYXJyYXkpCi0gICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBj
b250ZXh0WzBdIDogY29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgZG9jID0gKCBjb250ZXh0
ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6
IGRvY3VtZW50ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZv
ciBiYWNrLWNvbXBhdAotICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGpRdWVyeS5wYXJz
ZUhUTUwoIG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBy
c2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRl
eHQgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ci5jYWxsKCBzZWxlY3Rv
ciwgY29udGV4dCwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKLQotICAgICAg
ICAgICAgICAgIC8vIEhBTkRMRTogJCgjaWQpCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsy
XSApOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vZGVz
IHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1z
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5
IG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpc1swXSA9IGVsZW07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEhBTkRM
RTogJChleHByLCAkKC4uLikpCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBj
b250ZXh0LmpxdWVyeSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJv
b3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciApOwotCi0gICAgICAgICAgICAvLyBIQU5ETEU6ICQo
ZXhwciwgY29udGV4dCkKLSAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQg
dG86ICQoY29udGV4dCkuZmluZChleHByKQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9y
ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotICAg
ICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKLSAgICAgICAgfSBlbHNlIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gcm9v
dGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggc2Vs
ZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0
b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVj
dG9yLmNvbnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJh
eSggc2VsZWN0b3IsIHRoaXMgKTsKLSAgICB9LAotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0
eSBzZWxlY3RvcgotICAgIHNlbGVjdG9yOiAiIiwKLQotICAgIC8vIFRoZSBjdXJyZW50IHZlcnNp
b24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKLSAgICBqcXVlcnk6ICIxLjguMyIsCi0KLSAgICAvLyBU
aGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKLSAgICBsZW5ndGg6IDAs
Ci0KLSAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hl
ZCBlbGVtZW50IHNldAotICAgIHNpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5sZW5ndGg7Ci0gICAgfSwKLQotICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0aGlzICk7Ci0gICAgfSwKLQotICAgIC8vIEdldCB0aGUg
TnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKLSAgICAvLyBHZXQgdGhl
IHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQotICAgIGdldDogZnVu
Y3Rpb24oIG51bSApIHsKLSAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KLQotICAgICAgICAg
ICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQotICAgICAgICAgICAgdGhpcy50b0FycmF5KCkg
OgotCi0gICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAo
IG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKLSAg
ICB9LAotCi0gICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRv
IHRoZSBzdGFjawotICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0
KQotICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKLQot
ICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgICAg
ICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7Ci0K
LSAgICAgICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVy
ZW5jZSkKLSAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOwotCi0gICAgICAgIHJldC5jb250
ZXh0ID0gdGhpcy5jb250ZXh0OwotCi0gICAgICAgIGlmICggbmFtZSA9PT0gImZpbmQiICkgewot
ICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICggdGhpcy5zZWxlY3Rv
ciA/ICIgIiA6ICIiICkgKyBzZWxlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHsK
LSAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsg
IigiICsgc2VsZWN0b3IgKyAiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm4gdGhl
IG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0K
LSAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNo
ZWQgc2V0LgotICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5
IG9mIGFyZ3MsIGJ1dCB0aGlzIGlzCi0gICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQotICAg
IGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVy
eS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApOwotICAgIH0sCi0KLSAgICByZWFkeTogZnVu
Y3Rpb24oIGZuICkgewotICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCi0gICAgICAgIGpRdWVy
eS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKLQotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICB9LAotCi0gICAgZXE6IGZ1bmN0aW9uKCBpICkgewotICAgICAgICBpID0gK2k7Ci0gICAgICAg
IHJldHVybiBpID09PSAtMSA/Ci0gICAgICAgICAgICB0aGlzLnNsaWNlKCBpICkgOgotICAgICAg
ICAgICAgdGhpcy5zbGljZSggaSwgaSArIDEgKTsKLSAgICB9LAotCi0gICAgZmlyc3Q6IGZ1bmN0
aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOwotICAgIH0sCi0KLSAgICBsYXN0
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7Ci0gICAgfSwKLQot
ICAgIHNsaWNlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBj
b3JlX3NsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSwKLSAgICAgICAgICAgICJzbGljZSIs
IGNvcmVfc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSApOwotICAgIH0sCi0KLSAgICBt
YXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAgICAgICAgcmV0
dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKLSAgICAgICAgfSkpOwotICAgIH0s
Ci0KLSAgICBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0
IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7Ci0gICAgfSwKLQotICAgIC8vIEZvciBpbnRlcm5h
bCB1c2Ugb25seS4KLSAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBs
aWtlIGEgalF1ZXJ5IG1ldGhvZC4KLSAgICBwdXNoOiBjb3JlX3B1c2gsCi0gICAgc29ydDogW10u
c29ydCwKLSAgICBzcGxpY2U6IFtdLnNwbGljZQotfTsKLQotLy8gR2l2ZSB0aGUgaW5pdCBmdW5j
dGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgotalF1ZXJ5
LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOwotCi1qUXVlcnkuZXh0ZW5kID0galF1ZXJ5
LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNv
cHksIGNvcHlJc0FycmF5LCBjbG9uZSwKLSAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8
IHt9LAotICAgICAgICBpID0gMSwKLSAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwK
LSAgICAgICAgZGVlcCA9IGZhbHNlOwotCi0gICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVh
dGlvbgotICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewotICAgICAgICBk
ZWVwID0gdGFyZ2V0OwotICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307Ci0gICAg
ICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLSAgICAgICAgaSA9IDI7Ci0g
ICAgfQotCi0gICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29t
ZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCi0gICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9
PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKLSAgICAgICAgdGFy
Z2V0ID0ge307Ci0gICAgfQotCi0gICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBv
bmUgYXJndW1lbnQgaXMgcGFzc2VkCi0gICAgaWYgKCBsZW5ndGggPT09IGkgKSB7Ci0gICAgICAg
IHRhcmdldCA9IHRoaXM7Ci0gICAgICAgIC0taTsKLSAgICB9Ci0KLSAgICBmb3IgKCA7IGkgPCBs
ZW5ndGg7IGkrKyApIHsKLSAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZp
bmVkIHZhbHVlcwotICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51
bGwgKSB7Ci0gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Ci0gICAgICAgICAg
ICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0
WyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKLQotICAg
ICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKLSAgICAgICAgICAgICAg
ICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdy
ZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCi0gICAgICAgICAgICAgICAgaWYgKCBk
ZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJy
YXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBjb3B5SXNBcnJheSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNB
cnJheShzcmMpID8gc3JjIDogW107Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0
KHNyYykgPyBzcmMgOiB7fTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQotICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25l
LCBjb3B5ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQg
dmFsdWVzCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkg
ewotICAgICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJu
IHRoZSBtb2RpZmllZCBvYmplY3QKLSAgICByZXR1cm4gdGFyZ2V0OwotfTsKLQotalF1ZXJ5LmV4
dGVuZCh7Ci0gICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7Ci0gICAgICAgIGlmICgg
d2luZG93LiQgPT09IGpRdWVyeSApIHsKLSAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkg
ewotICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4galF1ZXJ5OwotICAgIH0sCi0KLSAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRv
IGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgotICAgIGlzUmVhZHk6IGZhbHNl
LAotCi0gICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9y
IGJlZm9yZQotICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCi0gICAgcmVh
ZHlXYWl0OiAxLAotCi0gICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50Ci0g
ICAgaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKLSAgICAgICAgaWYgKCBob2xkICkgewot
ICAgICAgICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLy8g
SGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQotICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCAp
IHsKLQotICAgICAgICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdy
ZSBhbHJlYWR5IHJlYWR5Ci0gICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJl
YWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2Fz
ZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgotICAgICAgICBp
ZiAoICFkb2N1bWVudC5ib2R5ICkgewotICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpR
dWVyeS5yZWFkeSwgMSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0
aGUgRE9NIGlzIHJlYWR5Ci0gICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKLQotICAgICAg
ICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdh
aXQgaWYgbmVlZCBiZQotICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVh
ZHlXYWl0ID4gMCApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKLSAgICAgICAgcmVh
ZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOwotCi0gICAgICAgIC8v
IFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cwotICAgICAgICBpZiAoIGpRdWVyeS5mbi50
cmlnZ2VyICkgewotICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5
Iikub2ZmKCJyZWFkeSIpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8vIFNlZSB0ZXN0L3Vu
aXQvY29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCi0gICAgLy8gU2lu
Y2UgdmVyc2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAotICAg
IC8vIGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCi0g
ICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS50
eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7Ci0gICAgfSwKLQotICAgIGlzQXJyYXk6IEFycmF5Lmlz
QXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9i
aikgPT09ICJhcnJheSI7Ci0gICAgfSwKLQotICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkg
ewotICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7Ci0gICAg
fSwKLQotICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgcmV0dXJuICFp
c05hTiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOwotICAgIH0sCi0KLSAg
ICB0eXBlOiBmdW5jdGlvbiggb2JqICkgewotICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPwot
ICAgICAgICAgICAgU3RyaW5nKCBvYmogKSA6Ci0gICAgICAgICAgICBjbGFzczJ0eXBlWyBjb3Jl
X3RvU3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOwotICAgIH0sCi0KLSAgICBpc1BsYWlu
T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4K
LSAgICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVz
ZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3
ZWxsCi0gICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8
fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAv
LyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0Ci0gICAgICAgICAg
ICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgotICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5j
YWxsKG9iaiwgImNvbnN0cnVjdG9yIikgJiYKLSAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24u
Y2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRj
aCAoIGUgKSB7Ci0gICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24g
Y2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0
bHksIHNvIHRvIHNwZWVkIHVwLAotICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4g
YWxsIHByb3BlcnRpZXMgYXJlIG93bi4KLQotICAgICAgICB2YXIga2V5OwotICAgICAgICBmb3Ig
KCBrZXkgaW4gb2JqICkge30KLQotICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwg
Y29yZV9oYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKLSAgICB9LAotCi0gICAgaXNFbXB0eU9iamVj
dDogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGZvciAoIG5h
bWUgaW4gb2JqICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsK
LSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKLSAgICB9LAotCi0gICAgLy8gZGF0YTog
c3RyaW5nIG9mIGh0bWwKLSAgICAvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwg
dGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRv
IGRvY3VtZW50Ci0gICAgLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1
ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCi0gICAgcGFyc2VIVE1MOiBmdW5j
dGlvbiggZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKLSAgICAgICAgdmFyIHBhcnNlZDsKLSAg
ICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0
ID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgICAgICAgICBzY3JpcHRzID0gY29udGV4dDsKLSAgICAg
ICAgICAgIGNvbnRleHQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0
IHx8IGRvY3VtZW50OwotCi0gICAgICAgIC8vIFNpbmdsZSB0YWcKLSAgICAgICAgaWYgKCAocGFy
c2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICkpICkgewotICAgICAgICAgICAgcmV0dXJuIFsg
Y29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcGFyc2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3Jp
cHRzID8gbnVsbCA6IFtdICk7Ci0gICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAotICAg
ICAgICAgICAgKHBhcnNlZC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUoIHBhcnNlZC5mcmFnbWVu
dCApIDogcGFyc2VkLmZyYWdtZW50KS5jaGlsZE5vZGVzICk7Ci0gICAgfSwKLQotICAgIHBhcnNl
SlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRh
dGEgIT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVt
b3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQotICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRh
dGEgKTsKLQotICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNP
TiBwYXJzZXIgZmlyc3QKLSAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5w
YXJzZSApIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFj
dHVhbCBKU09OCi0gICAgICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3Jn
L2pzb24yLmpzCi0gICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBy
dmFsaWRlc2NhcGUsICJAIiApCi0gICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAi
XSIgKQotICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKLQotICAg
ICAgICAgICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOwot
Ci0gICAgICAgIH0KLSAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0
YSApOwotICAgIH0sCi0KLSAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCi0gICAgcGFy
c2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgewotICAgICAgICB2YXIgeG1sLCB0bXA7Ci0gICAgICAg
IGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICgg
d2luZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKLSAgICAgICAgICAgICAgICB0bXAgPSBu
ZXcgRE9NUGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmlu
ZyggZGF0YSAsICJ0ZXh0L3htbCIgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCi0gICAg
ICAgICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiAp
OwotICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7Ci0gICAgICAgICAgICAgICAg
eG1sLmxvYWRYTUwoIGRhdGEgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCggZSAp
IHsKLSAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgewotICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAi
SW52YWxpZCBYTUw6ICIgKyBkYXRhICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHhtbDsK
LSAgICB9LAotCi0gICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKLQotICAgIC8vIEV2YWx1YXRlcyBh
IHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0Ci0gICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24g
ZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCi0gICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQv
YmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1j
b250ZXh0Ci0gICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgICAgIGlmICgg
ZGF0YSAmJiBjb3JlX3Jub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7Ci0gICAgICAgICAgICAvLyBX
ZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgotICAgICAgICAgICAgLy8gV2Ug
dXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93Ci0gICAg
ICAgICAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAotICAgICAgICAgICAgKCB3
aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgICAgICAgICB3
aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOwotICAgICAgICAgICAgfSApKCBk
YXRhICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2Ft
ZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwotICAgIC8vIE1pY3Jvc29m
dCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKLSAgICBjYW1lbENh
c2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7Ci0gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgg
cm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKLSAg
ICB9LAotCi0gICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICBy
ZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5h
bWUudG9Mb3dlckNhc2UoKTsKLSAgICB9LAotCi0gICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwg
dXNhZ2Ugb25seQotICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgewot
ICAgICAgICB2YXIgbmFtZSwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbGVuZ3Ro
ID0gb2JqLmxlbmd0aCwKLSAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQg
fHwgalF1ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOwotCi0gICAgICAgIGlmICggYXJncyApIHsKLSAg
ICAgICAgICAgIGlmICggaXNPYmogKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBv
YmogKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgbmFt
ZSBdLCBhcmdzICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgaSsrIF0sIGFyZ3MgKSA9PT0g
ZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAvLyBB
IHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFj
ay5jYWxsKCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICggOyBpIDwgbGVuZ3RoOyApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5j
YWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG9iajsKLSAg
ICB9LAotCi0gICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBw
b3NzaWJsZQotICAgIHRyaW06IGNvcmVfdHJpbSAmJiAhY29yZV90cmltLmNhbGwoIlx1RkVGRlx4
QTAiKSA/Ci0gICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICAgICAgcmV0dXJuIHRl
eHQgPT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgIiIgOgotICAgICAgICAgICAgICAgIGNvcmVf
dHJpbS5jYWxsKCB0ZXh0ICk7Ci0gICAgICAgIH0gOgotCi0gICAgICAgIC8vIE90aGVyd2lzZSB1
c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5Ci0gICAgICAgIGZ1bmN0aW9uKCB0ZXh0
ICkgewotICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAg
IiIgOgotICAgICAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7
Ci0gICAgICAgIH0sCi0KLSAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5
Ci0gICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgewotICAgICAgICB2YXIg
dHlwZSwKLSAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107Ci0KLSAgICAgICAgaWYgKCBh
cnIgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBm
dW5jdGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJwotICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dp
YyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAot
ICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIgKTsKLQotICAgICAgICAgICAgaWYg
KCBhcnIubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1
bmN0aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFyciApICkg
ewotICAgICAgICAgICAgICAgIGNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0K
LSAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgewotICAgICAgICB2YXIgbGVu
OwotCi0gICAgICAgIGlmICggYXJyICkgewotICAgICAgICAgICAgaWYgKCBjb3JlX2luZGV4T2Yg
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0s
IGkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDsKLSAg
ICAgICAgICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7
Ci0KLSAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAgICAg
IC8vIFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKLSAgICAgICAgICAgICAgICBpZiAo
IGkgaW4gYXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSwKLQotICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3Qs
IHNlY29uZCApIHsKLSAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3RoLAotICAgICAgICAgICAg
aSA9IGZpcnN0Lmxlbmd0aCwKLSAgICAgICAgICAgIGogPSAwOwotCi0gICAgICAgIGlmICggdHlw
ZW9mIGwgPT09ICJudW1iZXIiICkgewotICAgICAgICAgICAgZm9yICggOyBqIDwgbDsgaisrICkg
ewotICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAh
PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsg
aisrIF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmaXJzdC5sZW5ndGgg
PSBpOwotCi0gICAgICAgIHJldHVybiBmaXJzdDsKLSAgICB9LAotCi0gICAgZ3JlcDogZnVuY3Rp
b24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewotICAgICAgICB2YXIgcmV0VmFsLAotICAgICAg
ICAgICAgcmV0ID0gW10sCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIGxlbmd0aCA9
IGVsZW1zLmxlbmd0aDsKLSAgICAgICAgaW52ID0gISFpbnY7Ci0KLSAgICAgICAgLy8gR28gdGhy
b3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwotICAgICAgICAvLyB0aGF0IHBh
c3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgotICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkr
KyApIHsKLSAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsK
LSAgICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7Ci0gICAgICAgICAgICAgICAgcmV0
LnB1c2goIGVsZW1zWyBpIF0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ug
b25seQotICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgewotICAgICAg
ICB2YXIgdmFsdWUsIGtleSwKLSAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAgICAgaSA9
IDAsCi0gICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCi0gICAgICAgICAgICAvLyBq
cXVlcnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKLSAgICAgICAgICAgIGlzQXJyYXkg
PSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBl
b2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYm
IGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSgg
ZWxlbXMgKSApIDsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRp
bmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKLSAgICAgICAgaWYgKCBpc0FycmF5ICkgewot
ICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAg
dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxl
bmd0aCBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7Ci0gICAgICAgICAgICAgICAg
dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICByZXRbIHJl
dC5sZW5ndGggXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKLSAgICAgICAg
cmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKLSAgICB9LAotCi0gICAgLy8gQSBn
bG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCi0gICAgZ3VpZDogMSwKLQotICAgIC8vIEJp
bmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5n
IGFueQotICAgIC8vIGFyZ3VtZW50cy4KLSAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0
ICkgewotICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKLQotICAgICAgICBpZiAoIHR5cGVv
ZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0
IF07Ci0gICAgICAgICAgICBjb250ZXh0ID0gZm47Ci0gICAgICAgICAgICBmbiA9IHRtcDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQg
aXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCi0gICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVy
cm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCi0gICAgICAgIGlmICggIWpR
dWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewotICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCi0gICAgICAgIGFyZ3MgPSBj
b3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOwotICAgICAgICBwcm94eSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCgg
Y29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFs
IGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCi0gICAgICAgIHByb3h5Lmd1aWQgPSBmbi5n
dWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwotCi0gICAgICAgIHJldHVybiBwcm94eTsK
LSAgICB9LAotCi0gICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2
YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCi0gICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkg
YmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCi0gICAgYWNjZXNzOiBmdW5jdGlvbiggZWxl
bXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCBwYXNzICkgewotICAgICAg
ICB2YXIgZXhlYywKLSAgICAgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbCwKLSAgICAgICAgICAg
IGkgPSAwLAotICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwotCi0gICAgICAgIC8v
IFNldHMgbWFueSB2YWx1ZXMKLSAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9i
amVjdCIgKSB7Ci0gICAgICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICAgICAgICAgICAg
ICBqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgMSwgZW1wdHlHZXQsIHZhbHVl
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFpbmFibGUgPSAxOwotCi0gICAgICAg
IC8vIFNldHMgb25lIHZhbHVlCi0gICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMgZ2V0IGV4
ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQotICAgICAgICAgICAgZXhlYyA9IHBhc3MgPT09IHVuZGVm
aW5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKLQotICAgICAgICAgICAgaWYgKCBi
dWxrICkgewotICAgICAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUg
d2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCi0gICAgICAgICAgICAgICAgaWYgKCBleGVj
ICkgewotICAgICAgICAgICAgICAgICAgICBleGVjID0gZm47Ci0gICAgICAgICAgICAgICAgICAg
IGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKLSAgICAgICAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHJ1biBh
Z2FpbnN0IHRoZSBlbnRpcmUgc2V0Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAg
IGZuID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICggZm4gKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5j
YWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNoYWluYWJs
ZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2hhaW5hYmxlID8KLSAgICAgICAg
ICAgIGVsZW1zIDoKLQotICAgICAgICAgICAgLy8gR2V0cwotICAgICAgICAgICAgYnVsayA/Ci0g
ICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6Ci0gICAgICAgICAgICAgICAgbGVuZ3Ro
ID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OwotICAgIH0sCi0KLSAgICBub3c6IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOwotICAg
IH0KLX0pOwotCi1qUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAg
aWYgKCAhcmVhZHlMaXN0ICkgewotCi0gICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJl
ZCgpOwotCi0gICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkg
aXMgY2FsbGVkIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgot
ICAgICAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIg
aGVyZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCi0gICAgICAgIC8vIGRpc2Nv
dmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgy
I2NvbW1lbnQ6MTUKLSAgICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxl
dGUiICkgewotICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93
IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5Ci0gICAgICAgICAgICBzZXRU
aW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKLQotICAgICAgICAvLyBTdGFuZGFyZHMtYmFzZWQg
YnJvd3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCi0gICAgICAgIH0gZWxzZSBpZiAoIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5
IGV2ZW50IGNhbGxiYWNrCi0gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAi
RE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7Ci0KLSAgICAgICAg
ICAgIC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3Jr
Ci0gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVh
ZHksIGZhbHNlICk7Ci0KLSAgICAgICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2Fk
LCBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKLSAgICAgICAgICAgIGRvY3Vt
ZW50LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCAp
OwotCi0gICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2ls
bCBhbHdheXMgd29yawotICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwg
alF1ZXJ5LnJlYWR5ICk7Ci0KLSAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQot
ICAgICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBp
cyByZWFkeQotICAgICAgICAgICAgdmFyIHRvcCA9IGZhbHNlOwotCi0gICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgIHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHt9Ci0KLSAg
ICAgICAgICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKLSAgICAgICAgICAgICAgICAo
ZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5LmlzUmVhZHkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20v
SUVDb250ZW50TG9hZGVkLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5kb1Njcm9s
bCgibGVmdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDUw
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBy
ZWFkeUxpc3QucHJvbWlzZSggb2JqICk7Ci19OwotCi0vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlw
ZSBtYXAKLWpRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkg
RGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7Ci0gICAg
Y2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2Uo
KTsKLX0pOwotCi0vLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhl
c2UKLXJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOwotLy8gU3RyaW5nIHRvIE9iamVjdCBv
cHRpb25zIGZvcm1hdCBjYWNoZQotdmFyIG9wdGlvbnNDYWNoZSA9IHt9OwotCi0vLyBDb252ZXJ0
IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQg
c3RvcmUgaW4gY2FjaGUKLWZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7Ci0gICAg
dmFyIG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdID0ge307Ci0gICAgalF1ZXJ5LmVh
Y2goIG9wdGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgewot
ICAgICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2lu
ZyBwYXJhbWV0ZXJzOgotICoKLSAqICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3Bh
Y2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKLSAqICAgICAgICAgICAg
dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9i
amVjdAotICoKLSAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4g
ZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCi0gKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVz
LgotICoKLSAqIFBvc3NpYmxlIG9wdGlvbnM6Ci0gKgotICogICAgb25jZTogICAgICAgICAgICB3
aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtl
IGEgRGVmZXJyZWQpCi0gKgotICogICAgbWVtb3J5OiAgICAgICAgICAgIHdpbGwga2VlcCB0cmFj
ayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKLSAq
ICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBh
d2F5IHdpdGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgotICogICAgICAgICAgICAgICAgICAgIHZh
bHVlcyAobGlrZSBhIERlZmVycmVkKQotICoKLSAqICAgIHVuaXF1ZTogICAgICAgICAgICB3aWxs
IGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBp
biB0aGUgbGlzdCkKLSAqCi0gKiAgICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdz
IHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCi0gKgotICovCi1qUXVlcnkuQ2FsbGJhY2tz
ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0KLSAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBT
dHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCi0gICAgLy8gKHdl
IGNoZWNrIGluIGNhY2hlIGZpcnN0KQotICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0g
InN0cmluZyIgPwotICAgICAgICAoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9w
dGlvbnMoIG9wdGlvbnMgKSApIDoKLSAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMg
KTsKLQotICAgIHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlz
dHMpCi0gICAgICAgIG1lbW9yeSwKLSAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2Fz
IGFscmVhZHkgZmlyZWQKLSAgICAgICAgZmlyZWQsCi0gICAgICAgIC8vIEZsYWcgdG8ga25vdyBp
ZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKLSAgICAgICAgZmlyaW5nLAotICAgICAgICAvLyBG
aXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0
aCkKLSAgICAgICAgZmlyaW5nU3RhcnQsCi0gICAgICAgIC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVu
IGZpcmluZwotICAgICAgICBmaXJpbmdMZW5ndGgsCi0gICAgICAgIC8vIEluZGV4IG9mIGN1cnJl
bnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCi0gICAg
ICAgIGZpcmluZ0luZGV4LAotICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAotICAgICAg
ICBsaXN0ID0gW10sCi0gICAgICAgIC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFi
bGUgbGlzdHMKLSAgICAgICAgc3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLAotICAgICAgICAv
LyBGaXJlIGNhbGxiYWNrcwotICAgICAgICBmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAg
ICAgICAgICBtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhOwotICAgICAgICAgICAgZmly
ZWQgPSB0cnVlOwotICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOwot
ICAgICAgICAgICAgZmlyaW5nU3RhcnQgPSAwOwotICAgICAgICAgICAgZmlyaW5nTGVuZ3RoID0g
bGlzdC5sZW5ndGg7Ci0gICAgICAgICAgICBmaXJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZm9y
ICggOyBsaXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkg
ewotICAgICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsg
MCBdLCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBj
YWxscyB1c2luZyBhZGQKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmlyaW5nID0gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAoIGxpc3QgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzdGFjay5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmaXJlKCBzdGFjay5zaGlmdCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxp
c3QgPSBbXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBz
ZWxmLmRpc2FibGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0gICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0Ci0gICAgICAgIHNlbGYgPSB7
Ci0gICAgICAgICAgICAvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJh
Y2tzIHRvIHRoZSBsaXN0Ci0gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIGlmICggbGlzdCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHNh
dmUgdGhlIGN1cnJlbnQgbGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGxp
c3QubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBh
cmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlw
ZSggYXJnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZnVu
Y3Rpb24iICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25z
LnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBh
cmcubGVuZ3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZCggYXJnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pKCBhcmd1bWVu
dHMgKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxi
YWNrcyB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gd2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBtZW1vcnkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9
IHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggbWVtb3J5ICk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sg
ZnJvbSB0aGUgbGlzdAotICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIGxpc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBh
cmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVy
eS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZmlyaW5nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcmluZ0xlbmd0aC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5n
SW5kZXggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRl
eC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxi
YWNrIGlzIGluIHRoZSBsaXN0Ci0gICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBmbiApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTsKLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRo
ZSBsaXN0Ci0gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
bGlzdCA9IFtdOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCi0gICAgICAg
ICAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBsaXN0ID0gc3RhY2sg
PSBtZW1vcnkgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgLy8gSXMgaXQgZGlzYWJsZWQ/Ci0gICAgICAgICAgICBk
aXNhYmxlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQg
c3RhdGUKLSAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHN0
YWNrID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIElz
IGl0IGxvY2tlZD8KLSAgICAgICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICFzdGFjazsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBDYWxs
IGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCi0gICAg
ICAgICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7Ci0gICAgICAgICAg
ICAgICAgYXJncyA9IGFyZ3MgfHwgW107Ci0gICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4
dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKLSAgICAgICAgICAgICAgICBp
ZiAoIGxpc3QgJiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBhcmdz
ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJlKCBhcmdzICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKLSAg
ICAgICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdp
dGgoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZl
IGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQotICAgICAgICAgICAgZmlyZWQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19OwotalF1ZXJ5LmV4dGVuZCh7Ci0K
LSAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7Ci0gICAgICAgIHZhciB0dXBsZXMgPSBb
Ci0gICAgICAgICAgICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3Qs
IGZpbmFsIHN0YXRlCi0gICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5
LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIiBdLAotICAgICAgICAgICAgICAg
IFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJl
amVjdGVkIiBdLAotICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVy
eS5DYWxsYmFja3MoIm1lbW9yeSIpIF0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICBzdGF0
ZSA9ICJwZW5kaW5nIiwKLSAgICAgICAgICAgIHByb21pc2UgPSB7Ci0gICAgICAgICAgICAgICAg
c3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1
bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWws
IGZuUHJvZ3Jlc3MgKi8gKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVu
dHM7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24o
IG5ld0RlZmVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxl
cywgZnVuY3Rpb24oIGksIHR1cGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBhY3Rpb24gPSB0dXBsZVsgMCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
biA9IGZuc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkWyBk
b25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZl
cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVl
cnkuaXNGdW5jdGlvbiggZm4gKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVy
bmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJu
ZWQucHJvbWlzZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybmVkLnByb21pc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5v
dGlmeSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsg
IldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVk
IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0RlZmVyWyBhY3Rpb24gXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZucyA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKLSAgICAgICAgICAgICAgICB9
LAotICAgICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKLSAg
ICAgICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBp
cyBhZGRlZCB0byB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24o
IG9iaiApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5
LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICBkZWZlcnJlZCA9IHt9OwotCi0gICAgICAgIC8vIEtl
ZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKLSAgICAgICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50
aGVuOwotCi0gICAgICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKLSAgICAgICAgalF1
ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewotICAgICAgICAgICAgdmFy
IGxpc3QgPSB0dXBsZVsgMiBdLAotICAgICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVb
IDMgXTsKLQotICAgICAgICAgICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBd
ID0gbGlzdC5hZGQKLSAgICAgICAgICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDsK
LQotICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCi0gICAgICAgICAgICBpZiAoIHN0YXRlU3Ry
aW5nICkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7Ci0KLSAgICAgICAgICAgICAgICAvLyBbIHJl
amVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCi0g
ICAgICAgICAgICAgICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAy
IF1bIDIgXS5sb2NrICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGRlZmVycmVk
WyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmUKLSAgICAgICAgICAgIGRl
ZmVycmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlOwotICAgICAgICAgICAgZGVmZXJyZWRbIHR1
cGxlWzBdICsgIldpdGgiIF0gPSBsaXN0LmZpcmVXaXRoOwotICAgICAgICB9KTsKLQotICAgICAg
ICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKLSAgICAgICAgcHJvbWlzZS5wcm9taXNl
KCBkZWZlcnJlZCApOwotCi0gICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKLSAgICAg
ICAgaWYgKCBmdW5jICkgewotICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJy
ZWQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFsbCBkb25lIQotICAgICAgICByZXR1cm4g
ZGVmZXJyZWQ7Ci0gICAgfSwKLQotICAgIC8vIERlZmVycmVkIGhlbHBlcgotICAgIHdoZW46IGZ1
bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgewotICAgICAg
ICB2YXIgaSA9IDAsCi0gICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gY29yZV9zbGljZS5jYWxs
KCBhcmd1bWVudHMgKSwKLSAgICAgICAgICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3Ro
LAotCi0gICAgICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVz
Ci0gICAgICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAw
LAotCi0gICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVz
IGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KLSAgICAg
ICAgICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnku
RGVmZXJyZWQoKSwKLQotICAgICAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJl
c29sdmUgYW5kIHByb2dyZXNzIHZhbHVlcwotICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0
aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkgewotICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlz
OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICBpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVD
b250ZXh0czsKLQotICAgICAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGlu
YXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCi0gICAgICAgIGlmICggbGVuZ3RoID4gMSAp
IHsKLSAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAg
ICAgICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAg
ICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICAgICAgICAg
IGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgIGlmICggcmVzb2x2
ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJv
bWlzZSApICkgewotICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlz
ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2
ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgLmZh
aWwoIGRlZmVycmVkLnJlamVjdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3Mo
IHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBpZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCi0g
ICAgICAgIGlmICggIXJlbWFpbmluZyApIHsKLSAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7Ci0gICAgfQotfSk7Ci1qUXVlcnkuc3VwcG9y
dCA9IChmdW5jdGlvbigpIHsKLQotICAgIHZhciBzdXBwb3J0LAotICAgICAgICBhbGwsCi0gICAg
ICAgIGEsCi0gICAgICAgIHNlbGVjdCwKLSAgICAgICAgb3B0LAotICAgICAgICBpbnB1dCwKLSAg
ICAgICAgZnJhZ21lbnQsCi0gICAgICAgIGV2ZW50TmFtZSwKLSAgICAgICAgaSwKLSAgICAgICAg
aXNTdXBwb3J0ZWQsCi0gICAgICAgIGNsaWNrRm4sCi0gICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotCi0gICAgLy8gU2V0dXAKLSAgICBkaXYuc2V0QXR0cmlidXRl
KCAiY2xhc3NOYW1lIiwgInQiICk7Ci0gICAgZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFi
bGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOwot
Ci0gICAgLy8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1i
cm93c2VyIGVudmlyb25tZW50cwotICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
KiIpOwotICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOwotICAgIGlm
ICggIWFsbCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKLSAgICAgICAgcmV0dXJuIHt9OwotICAg
IH0KLQotICAgIC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCi0gICAgc2VsZWN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwotICAgIGlucHV0ID0gZGl2LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWyAwIF07Ci0KLSAgICBhLnN0eWxlLmNzc1RleHQgPSAi
dG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOwotICAgIHN1cHBvcnQgPSB7Ci0gICAgICAg
IC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQK
LSAgICAgICAgbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09
IDMgKSwKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3Qg
YXV0b21hdGljYWxseSBpbnNlcnRlZAotICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGlu
dG8gZW1wdHkgdGFibGVzCi0gICAgICAgIHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJ0Ym9keSIpLmxlbmd0aCwKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1l
bnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKLSAgICAgICAgLy8gVGhp
cyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQotICAgICAgICBodG1sU2VyaWFsaXpl
OiAhIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKLQotICAgICAgICAv
LyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCi0gICAgICAgIC8v
IChJRSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCi0gICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBh
LmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVS
THMgYXJlbid0IG1hbmlwdWxhdGVkCi0gICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRl
ZmF1bHQpCi0gICAgICAgIGhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikg
PT09ICIvYSIgKSwKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkg
ZXhpc3RzCi0gICAgICAgIC8vIChJRSB1c2VzIGZpbHRlciBpbnN0ZWFkKQotICAgICAgICAvLyBV
c2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1Ci0gICAg
ICAgIG9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKLQotICAgICAgICAv
LyBWZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCi0gICAgICAgIC8vIChJRSB1c2VzIHN0eWxl
RmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKLSAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5j
c3NGbG9hdCwKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVj
aWZpZWQgZm9yIGEgY2hlY2tib3gKLSAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24i
LgotICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCi0gICAgICAgIGNo
ZWNrT246ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwKLQotICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQg
cHJvcGVydHkuCi0gICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBv
ZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCi0gICAgICAgIG9wdFNlbGVj
dGVkOiBvcHQuc2VsZWN0ZWQsCi0KLSAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2Ft
ZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBn
ZXQvc2V0QXR0cmlidXRlIChpZTYvNykKLSAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xh
c3NOYW1lICE9PSAidCIsCi0KLSAgICAgICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBv
biBhIGZvcm0gKCM2NzQzKQotICAgICAgICBlbmN0eXBlOiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImZvcm0iKS5lbmN0eXBlLAotCi0gICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBo
dG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCi0gICAgICAgIC8vIFdoZXJlIG91
dGVySFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKLSAgICAgICAgaHRtbDVDbG9u
ZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJI
VE1MICE9PSAiPDpuYXY+PC86bmF2PiIsCi0KLSAgICAgICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94
TW9kZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9k
ZQotICAgICAgICBib3hNb2RlbDogKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBh
dCIgKSwKLQotICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKLSAgICAgICAgc3VibWl0
QnViYmxlczogdHJ1ZSwKLSAgICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKLSAgICAgICAgZm9j
dXNpbkJ1YmJsZXM6IGZhbHNlLAotICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAotICAgICAg
ICBub0Nsb25lRXZlbnQ6IHRydWUsCi0gICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZh
bHNlLAotICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKLSAgICAgICAgcmVsaWFibGVN
YXJnaW5SaWdodDogdHJ1ZSwKLSAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IHRydWUsCi0gICAg
ICAgIHBpeGVsUG9zaXRpb246IGZhbHNlCi0gICAgfTsKLQotICAgIC8vIE1ha2Ugc3VyZSBjaGVj
a2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKLSAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsK
LSAgICBzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hl
Y2tlZDsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxl
ZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKLSAgICAvLyAoV2ViS2l0IG1hcmtz
IHRoZW0gYXMgZGlzYWJsZWQpCi0gICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKLSAgICBzdXBw
b3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKLQotICAgIC8vIFRlc3QgdG8gc2VlIGlm
IGl0J3MgcG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50Ci0gICAg
Ly8gRmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKLSAgICB0cnkgewotICAgICAgICBkZWxldGUg
ZGl2LnRlc3Q7Ci0gICAgfSBjYXRjaCggZSApIHsKLSAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBh
bmRvID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYg
ZGl2LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7Ci0gICAgICAgIGRpdi5hdHRhY2hF
dmVudCggIm9uY2xpY2siLCBjbGlja0ZuID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyBD
bG9uaW5nIGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQotICAgICAgICAgICAgLy8gYm91
bmQgZXZlbnQgaGFuZGxlcnMgKElFIGRvZXMgdGhpcykKLSAgICAgICAgICAgIHN1cHBvcnQubm9D
bG9uZUV2ZW50ID0gZmFsc2U7Ci0gICAgICAgIH0pOwotICAgICAgICBkaXYuY2xvbmVOb2RlKCB0
cnVlICkuZmlyZUV2ZW50KCJvbmNsaWNrIik7Ci0gICAgICAgIGRpdi5kZXRhY2hFdmVudCggIm9u
Y2xpY2siLCBjbGlja0ZuICk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWlu
dGFpbnMgaXRzIHZhbHVlCi0gICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQot
ICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICBpbnB1dC52
YWx1ZSA9ICJ0IjsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOwot
ICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7Ci0KLSAgICBpbnB1
dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7Ci0KLSAgICAvLyAjMTEyMTcg
LSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hlY2tlZCBh
dHRyaWJ1dGUKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7Ci0KLSAgICBk
aXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7Ci0gICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7Ci0gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hp
bGQgKTsKLQotICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVj
dGx5IGluIGZyYWdtZW50cwotICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25l
Tm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOwotCi0gICAg
Ly8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNr
ZWQKLSAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83
KQotICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7Ci0KLSAgICBmcmFn
bWVudC5yZW1vdmVDaGlsZCggaW5wdXQgKTsKLSAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2
ICk7Ci0KLSAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2Ci0gICAgLy8gaHR0cDov
L3BlcmZlY3Rpb25raWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93
c2VyLXNuaWZmaW5nLwotICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBu
b24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcwotICAgIC8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUu
IFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bwotICAgIC8vIGF2b2lkIGFuIGV2YWwg
Y2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCi0gICAgLy8gdG8gZ28g
aGF5d2lyZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9D
U1AKLSAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKLSAgICAgICAgZm9yICggaSBpbiB7Ci0g
ICAgICAgICAgICBzdWJtaXQ6IHRydWUsCi0gICAgICAgICAgICBjaGFuZ2U6IHRydWUsCi0gICAg
ICAgICAgICBmb2N1c2luOiB0cnVlCi0gICAgICAgIH0pIHsKLSAgICAgICAgICAgIGV2ZW50TmFt
ZSA9ICJvbiIgKyBpOwotICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBk
aXYgKTsKLSAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgewotICAgICAgICAgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7Ci0gICAgICAgICAgICAg
ICAgaXNTdXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24i
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0g
PSBpc1N1cHBvcnRlZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJ1biB0ZXN0cyB0aGF0
IG5lZWQgYSBib2R5IGF0IGRvYyByZWFkeQotICAgIGpRdWVyeShmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIGNvbnRhaW5lciwgZGl2LCB0ZHMsIG1hcmdpbkRpdiwKLSAgICAgICAgICAgIGRpdlJl
c2V0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93
OmhpZGRlbjsiLAotICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF07Ci0KLSAgICAgICAgaWYgKCAhYm9keSApIHsKLSAgICAgICAgICAgIC8v
IFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAi
dmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0
aWM7dG9wOjA7bWFyZ2luLXRvcDoxcHgiOwotICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29u
dGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHRl
c3QgZWxlbWVudAotICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgICAgICAvLyBDaGVj
ayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkg
YXJlIHNldAotICAgICAgICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBv
dGhlciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKLSAgICAgICAgLy8gdGFibGUgcm93OyBpZiBz
bywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCi0gICAg
ICAgIC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5
IHVzaW5nCi0gICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ug
b2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCi0gICAgICAgIC8vIGhpZGRlbjsgZG9uIHNh
ZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KLSAg
ICAgICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCi0gICAgICAgIGRpdi5pbm5lckhU
TUwgPSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7Ci0gICAg
ICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgICAgdGRzWyAw
IF0uc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpu
b25lIjsKLSAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0g
MCApOwotCi0gICAgICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgdGRz
WyAxIF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQotICAgICAgICAvLyBDaGVjayBpZiBlbXB0
eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAotICAgICAgICAvLyAo
SUUgPD0gOCBmYWlsIHRoaXMgdGVzdCkKLSAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9m
ZnNldHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwot
Ci0gICAgICAgIC8vIENoZWNrIGJveC1zaXppbmcgYW5kIG1hcmdpbiBiZWhhdmlvcgotICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1z
aXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1z
aXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lk
dGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7Ci0gICAgICAg
IHN1cHBvcnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDQgKTsKLSAgICAgICAg
c3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRU
b3AgIT09IDEgKTsKLQotICAgICAgICAvLyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIs
IHdlJ3ZlIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCi0gICAgICAgIC8vIGJlY2F1c2UganNkb20g
b24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCi0gICAgICAgIGlmICggd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgICAgICAgICBzdXBwb3J0LnBpeGVsUG9zaXRpb24gPSAo
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7fSApLnRvcCAhPT0gIjEl
IjsKLSAgICAgICAgICAgIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09
ICI0cHgiOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0
aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5Ci0gICAgICAgICAgICAvLyBnZXRzIGNv
bXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3Jl
Ci0gICAgICAgICAgICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKLSAgICAgICAgICAgIC8vIEZhaWxz
IGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCi0gICAgICAgICAgICAvLyBXZWJL
aXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBt
YXJnaW4tcmlnaHQKLSAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5
bGUuY3NzVGV4dCA9IGRpdlJlc2V0OwotICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdp
blJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOwotICAgICAgICAgICAgZGl2LnN0
eWxlLndpZHRoID0gIjFweCI7Ci0gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRp
diApOwotICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KLSAgICAgICAg
ICAgICAgICAhcGFyc2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2
LCBudWxsICkgfHwge30gKS5tYXJnaW5SaWdodCApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5l
LWJsb2NrCi0gICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxh
eSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCi0gICAgICAgICAgICAvLyB0aGVtIGxheW91dAotICAg
ICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCi0gICAgICAgICAgICBkaXYuaW5uZXJIVE1M
ID0gIiI7Ci0gICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRo
OjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOwotICAgICAgICAgICAgc3Vw
cG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDMgKTsK
LQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdy
YXAgdGhlaXIgY2hpbGRyZW4KLSAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKLSAgICAg
ICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgICAgICAgIGRpdi5zdHls
ZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKLSAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRp
dj48L2Rpdj4iOwotICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4
IjsKLSAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdp
ZHRoICE9PSAzICk7Ci0KLSAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUK
LSAgICAgICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7Ci0gICAgICAgIGNvbnRhaW5l
ciA9IGRpdiA9IHRkcyA9IG1hcmdpbkRpdiA9IG51bGw7Ci0gICAgfSk7Ci0KLSAgICAvLyBOdWxs
IGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCi0gICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQo
IGRpdiApOwotICAgIGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0g
ZGl2ID0gbnVsbDsKLQotICAgIHJldHVybiBzdXBwb3J0OwotfSkoKTsKLXZhciByYnJhY2UgPSAv
KD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sCi0gICAgcm11bHRpRGFzaCA9IC8oW0EtWl0p
L2c7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgIGNhY2hlOiB7fSwKLQotICAgIGRlbGV0ZWRJZHM6
IFtdLAotCi0gICAgLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3IgcmVsZWFzZSAoMS45LzIuMCkKLSAg
ICB1dWlkOiAwLAotCi0gICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRo
ZSBwYWdlCi0gICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkK
LSAgICBleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKLSAgICAvLyBhdHRlbXB0IHRv
IGFkZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KLSAgICBub0RhdGE6IHsKLSAgICAgICAg
ImVtYmVkIjogdHJ1ZSwKLSAgICAgICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxh
c2ggKHdoaWNoIGhhbmRsZSBleHBhbmRvcykKLSAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdD
REI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAotICAgICAgICAiYXBwbGV0IjogdHJ1
ZQotICAgIH0sCi0KLSAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgZWxl
bSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0g
OiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwotICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0Vt
cHR5RGF0YU9iamVjdCggZWxlbSApOwotICAgIH0sCi0KLSAgICBkYXRhOiBmdW5jdGlvbiggZWxl
bSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewotICAgICAgICBp
ZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAotICAgICAgICAgICAgaW50
ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVv
ZiBuYW1lID09PSAic3RyaW5nIiwKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUg
RE9NIG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKLSAgICAg
ICAgICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUg
RE9NLUpTIGJvdW5kYXJ5Ci0gICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAotCi0g
ICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hl
OyBKUyBvYmplY3QgZGF0YSBpcwotICAgICAgICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8g
dGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQotICAgICAgICAgICAgY2Fj
aGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAotCi0gICAgICAgICAgICAvLyBPbmx5
IGRlZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0
cyBhbGxvd3MKLSAgICAgICAgICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1l
IHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCi0gICAgICAgICAgICBpZCA9IGlzTm9k
ZSA/IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFs
S2V5OwotCi0gICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVk
IHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCi0gICAgICAgIC8vIG9iamVjdCB0aGF0
IGhhcyBubyBkYXRhIGF0IGFsbAotICAgICAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAo
IXB2dCAmJiAhY2FjaGVbaWRdLmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZp
bmVkICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAh
aWQgKSB7Ci0gICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJ
RCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKLSAgICAgICAgICAgIC8vIGVuZHMg
dXAgaW4gdGhlIGdsb2JhbCBjYWNoZQotICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7Ci0gICAg
ICAgICAgICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMu
cG9wKCkgfHwgalF1ZXJ5Lmd1aWQrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWQgPSBpbnRlcm5hbEtleTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICggIWNhY2hlWyBpZCBdICkgewotICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsK
LQotICAgICAgICAgICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFp
biBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdAotICAgICAgICAgICAgLy8gaXMgc2VyaWFsaXpl
ZCB1c2luZyBKU09OLnN0cmluZ2lmeQotICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgewotICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8g
alF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKLSAgICAg
ICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQotICAgICAg
ICBpZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0
aW9uIiApIHsKLSAgICAgICAgICAgIGlmICggcHZ0ICkgewotICAgICAgICAgICAgICAgIGNhY2hl
WyBpZCBdID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0uZGF0YSA9IGpRdWVyeS5leHRl
bmQoIGNhY2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOwotCi0gICAgICAgIC8vIGpRdWVyeSBk
YXRhKCkgaXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3Mg
aW50ZXJuYWwgZGF0YQotICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29s
bGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAotICAgICAgICAv
LyBkYXRhLgotICAgICAgICBpZiAoICFwdnQgKSB7Ci0gICAgICAgICAgICBpZiAoICF0aGlzQ2Fj
aGUuZGF0YSApIHsKLSAgICAgICAgICAgICAgICB0aGlzQ2FjaGUuZGF0YSA9IHt9OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
dGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1j
b252ZXJ0ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcwotICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVy
dHkgd2FzIHNwZWNpZmllZAotICAgICAgICBpZiAoIGdldEJ5TmFtZSApIHsKLQotICAgICAgICAg
ICAgLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQotICAgICAgICAgICAg
cmV0ID0gdGhpc0NhY2hlWyBuYW1lIF07Ci0KLSAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8
dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKLSAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7
Ci0KLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0
eQotICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFt
ZSApIF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXQg
PSB0aGlzQ2FjaGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0K
LSAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVz
ZSBPbmx5ICovICkgewotICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRoaXNDYWNo
ZSwgaSwgbCwKLQotICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgICAg
ICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gICAgICAgICAg
ICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCi0gICAgICAgICAgICBpZCA9
IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKLQotICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVj
dCwgdGhlcmUgaXMgbm8KLSAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCi0gICAgICAg
IGlmICggIWNhY2hlWyBpZCBdICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCBuYW1lICkgewotCi0gICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQgPyBj
YWNoZVsgaWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAgICAgICAgICAgIGlmICggdGhpc0Nh
Y2hlICkgewotCi0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBh
cmF0ZWQgc3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKLSAgICAgICAgICAgICAgICBpZiAoICFq
UXVlcnkuaXNBcnJheSggbmFtZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0
aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCi0gICAgICAgICAgICAg
ICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNw
YWNlcyB1bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cwotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNDYWNoZVsg
bmFtZVtpXSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKLSAg
ICAgICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0
cm95ZWQKLSAgICAgICAgICAgICAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDog
alF1ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICAg
ICAgaWYgKCAhcHZ0ICkgewotICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7Ci0K
LSAgICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhl
IGludGVybmFsIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0
aGluZyBsZWZ0IGluIGl0Ci0gICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCggY2Fj
aGVbIGlkIF0gKSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQotICAgICAgICBpZiAoIGlz
Tm9kZSApIHsKLSAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7
Ci0KLSAgICAgICAgLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3Ig
YGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCi0gICAgICAgIH0g
ZWxzZSBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUu
d2luZG93ICkgewotICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgICAgIC8v
IFdoZW4gYWxsIGVsc2UgZmFpbHMsIG51bGwKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNhY2hlWyBpZCBdID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBGb3IgaW50
ZXJuYWwgdXNlIG9ubHkuCi0gICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkg
ewotICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsK
LSAgICB9LAotCi0gICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUg
Y2FuIGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCi0gICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0Rh
dGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0gICAgICAgIC8vIG5vZGVzIGFj
Y2VwdCBkYXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNv
bmRpdGlvbmFsCi0gICAgICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBl
bGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7Ci0gICAgfQotfSk7Ci0KLWpR
dWVyeS5mbi5leHRlbmQoewotICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAg
ICAgICB2YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsCi0gICAgICAgICAgICBlbGVtID0g
dGhpc1swXSwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgZGF0YSA9IG51bGw7Ci0K
LSAgICAgICAgLy8gR2V0cyBhbGwgdmFsdWVzCi0gICAgICAgIGlmICgga2V5ID09PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAg
IGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSApOwotCi0gICAgICAgICAgICAgICAgaWYgKCBlbGVt
Lm5vZGVUeXBlID09PSAxICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlczsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUp
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwg
ZGF0YVsgbmFtZSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2Vk
QXR0cnMiLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldHMgbXVsdGlw
bGUgdmFsdWVzCi0gICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpR
dWVyeS5kYXRhKCB0aGlzLCBrZXkgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOwotICAgICAgICBwYXJ0c1sxXSA9IHBh
cnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKLSAgICAgICAgcGFydCA9IHBhcnRzWzFdICsg
IiEiOwotCi0gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFs
dWUgKSB7Ci0KLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxlciggImdldERhdGEiICsgcGFydCwg
WyBwYXJ0c1swXSBdICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGlu
dGVybmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKLSAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09
IHVuZGVmaW5lZCAmJiBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5
LmRhdGEoIGVsZW0sIGtleSApOwotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIo
IGVsZW0sIGtleSwgZGF0YSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgotICAgICAgICAgICAgICAgICAgICBkYXRhOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJ0c1sxXSA9IHZhbHVlOwotICAgICAgICAg
ICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KCB0aGlzICk7Ci0KLSAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0
RGF0YSIgKyBwYXJ0LCBwYXJ0cyApOwotICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlz
LCBrZXksIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggImNo
YW5nZURhdGEiICsgcGFydCwgcGFydHMgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9LCBu
dWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIGZhbHNlICk7Ci0gICAgfSwK
LQotICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywg
a2V5ICk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBkYXRhQXR0ciggZWxl
bSwga2V5LCBkYXRhICkgewotICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHks
IHRyeSB0byBmZXRjaCBhbnkKLSAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRy
aWJ1dGUKLSAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAx
ICkgewotCi0gICAgICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlE
YXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0
cmlidXRlKCBuYW1lICk7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIg
KSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAi
dHJ1ZSIgPyB0cnVlIDoKLSAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2Ug
OgotICAgICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51bGwgOgotICAgICAgICAgICAg
ICAgIC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUg
c3RyaW5nCi0gICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKLSAg
ICAgICAgICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0
YSApIDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YTsKLSAgICAgICAgICAgIH0gY2F0Y2goIGUg
KSB7fQotCi0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlz
bid0IGNoYW5nZWQgbGF0ZXIKLSAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRh
dGEgKTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBkYXRhOwotfQotCi0vLyBjaGVja3MgYSBj
YWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcwotZnVuY3Rpb24gaXNFbXB0eURhdGFPYmplY3QoIG9i
aiApIHsKLSAgICB2YXIgbmFtZTsKLSAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLQotICAgICAg
ICAvLyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBpcyBz
dGlsbCBlbXB0eQotICAgICAgICBpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0
eU9iamVjdCggb2JqW25hbWVdICkgKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci1qUXVlcnku
ZXh0ZW5kKHsKLSAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7Ci0gICAg
ICAgIHZhciBxdWV1ZTsKLQotICAgICAgICBpZiAoIGVsZW0gKSB7Ci0gICAgICAgICAgICB0eXBl
ID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7Ci0gICAgICAgICAgICBxdWV1ZSA9IGpRdWVy
eS5fZGF0YSggZWxlbSwgdHlwZSApOwotCi0gICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVl
IGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCi0gICAgICAg
ICAgICBpZiAoIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5
LmlzQXJyYXkoZGF0YSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9k
YXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8
fCBbXTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwg
dHlwZSApIHsKLSAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgICAgICB2YXIgcXVl
dWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKLSAgICAgICAgICAgIHN0YXJ0TGVuZ3Ro
ID0gcXVldWUubGVuZ3RoLAotICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAotICAgICAg
ICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKLSAgICAgICAg
ICAgIG5leHQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSgg
ZWxlbSwgdHlwZSApOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAvLyBJZiB0aGUgZnggcXVl
dWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCi0gICAg
ICAgIGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKLSAgICAgICAgICAgIGZuID0gcXVldWUu
c2hpZnQoKTsKLSAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIGZuICkgewotCi0gICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0
byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCi0gICAgICAgICAgICAvLyBhdXRvbWF0
aWNhbGx5IGRlcXVldWVkCi0gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7Ci0gICAg
ICAgICAgICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIGNsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24K
LSAgICAgICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOwotICAgICAgICAgICAgZm4uY2FsbCggZWxl
bSwgbmV4dCwgaG9va3MgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIXN0YXJ0TGVuZ3Ro
ICYmIGhvb2tzICkgewotICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0g
Z2VuZXJhdGVzIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25l
Ci0gICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewotICAgICAgICB2YXIg
a2V5ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5fZGF0YSgg
ZWxlbSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIHsKLSAgICAgICAgICAgIGVt
cHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRy
dWUgKTsKLSAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVl
ICk7Ci0gICAgICAgICAgICB9KQotICAgICAgICB9KTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmZu
LmV4dGVuZCh7Ci0gICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgICAgICB2
YXIgc2V0dGVyID0gMjsKLQotICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiAp
IHsKLSAgICAgICAgICAgIGRhdGEgPSB0eXBlOwotICAgICAgICAgICAgdHlwZSA9ICJmeCI7Ci0g
ICAgICAgICAgICBzZXR0ZXItLTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggYXJndW1lbnRz
Lmxlbmd0aCA8IHNldHRlciApIHsKLSAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRo
aXNbMF0sIHR5cGUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkYXRhID09PSB1bmRl
ZmluZWQgPwotICAgICAgICAgICAgdGhpcyA6Ci0gICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0
eXBlLCBkYXRhICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhp
cyBxdWV1ZQotICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSAp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAi
aW5wcm9ncmVzcyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlz
LCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgfSwKLSAg
ICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0g
ICAgICAgIH0pOwotICAgIH0sCi0gICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xp
bnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgotICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMu
Y29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KLSAgICBkZWxheTogZnVuY3Rpb24o
IHRpbWUsIHR5cGUgKSB7Ci0gICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3Bl
ZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7Ci0gICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7
Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29r
cyApIHsKLSAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSAp
OwotICAgICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IGNsZWFyVGltZW91dCggdGltZW91dCApOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0g
ICAgfSwKLSAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKLSAgICB9LAotICAgIC8vIEdldCBhIHBy
b21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKLSAgICAvLyBhcmUg
ZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKLSAgICBwcm9taXNlOiBmdW5jdGlv
biggdHlwZSwgb2JqICkgewotICAgICAgICB2YXIgdG1wLAotICAgICAgICAgICAgY291bnQgPSAx
LAotICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKLSAgICAgICAgICAgIGVs
ZW1lbnRzID0gdGhpcywKLSAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKLSAgICAgICAgICAg
IHJlc29sdmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBb
IGVsZW1lbnRzIF0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAg
ICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgb2JqID0g
dHlwZTsKLSAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLSAgICAgICAg
dHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgICAgICB3aGlsZSggaS0tICkgewotICAgICAgICAg
ICAgdG1wID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3Mi
ICk7Ci0gICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7Ci0gICAgICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb2x2ZSgpOwotICAgICAgICByZXR1
cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Ci0gICAgfQotfSk7Ci12YXIgbm9kZUhvb2ssIGJvb2xI
b29rLCBmaXhTcGVjaWZpZWQsCi0gICAgcmNsYXNzID0gL1tcdFxyXG5dL2csCi0gICAgcnJldHVy
biA9IC9cci9nLAotICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAotICAgIHJmb2N1
c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKLSAg
ICByY2xpY2thYmxlID0gL15hKD86cmVhfCkkL2ksCi0gICAgcmJvb2xlYW4gPSAvXig/OmF1dG9m
b2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRl
bnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQv
aSwKLSAgICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7
Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSAp
IHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1l
LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlQXR0
cjogZnVuY3Rpb24oIG5hbWUgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOwotICAgICAg
ICB9KTsKLSAgICB9LAotCi0gICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAg
ICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVl
LCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVQcm9wOiBmdW5j
dGlvbiggbmFtZSApIHsKLSAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwg
bmFtZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IC8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92
aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXNbIG5hbWUgXTsKLSAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQotICAgICAgICB9KTsKLSAg
ICB9LAotCi0gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIGNs
YXNzTmFtZXMsIGksIGwsIGVsZW0sCi0gICAgICAgICAgICBzZXRDbGFzcywgYywgY2w7Ci0KLSAg
ICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggdmFsdWUgJiYgdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5z
cGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OwotCi0gICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxlbmd0aCA9
PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMr
KyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldENsYXNzLmluZGV4T2Yo
ICIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiApIDwgMCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNz
ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgcmVt
b3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIHJlbW92ZXMsIGNsYXNz
TmFtZSwgZWxlbSwgYywgY2wsIGksIGw7Ci0KLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKSApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGog
KSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNh
bGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2
YWx1ZSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgcmVtb3ZlcyA9ICggdmFsdWUgfHwg
IiIgKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAgZm9yICggaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBlbGVtID0gdGhp
c1sgaSBdOwotICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVt
LmNsYXNzTmFtZSApIHsKLQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsg
ZWxlbS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiB0aGUgcmVtb3ZhbCBsaXN0Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwg
Y2w7IGMrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVy
ZSBpcyBub3RoaW5nIHRvIHJlbW92ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
Y2xhc3NOYW1lLmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+PSAwICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAi
ICIgKyByZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNz
TmFtZSA9IHZhbHVlID8galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfSwKLQotICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkg
ewotICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKLSAgICAgICAgICAgIGlzQm9vbCA9
IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOwotCi0gICAgICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCBpICkgewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2
YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgewotICAg
ICAgICAgICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCi0gICAgICAgICAg
ICAgICAgdmFyIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBzdGF0ZVZhbCwKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVl
LnNwbGl0KCBjb3JlX3JzcGFjZSApOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xhc3NO
YW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewotICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05h
bWUgKTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJl
bW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFu
IiApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0Ci0gICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBjbGFz
c05hbWUKLSAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8
IHZhbHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVf
XyIgKSB8fCAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIGhh
c0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgIHZhciBjbGFzc05hbWUgPSAi
ICIgKyBzZWxlY3RvciArICIgIiwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbCA9
IHRoaXMubGVuZ3RoOwotICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAg
ICBpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1l
ICsgIiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICB2YWw6IGZ1bmN0aW9uKCB2
YWx1ZSApIHsKLSAgICAgICAgdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCi0gICAgICAgICAg
ICBlbGVtID0gdGhpc1swXTsKLQotICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewot
ICAgICAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5
LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSBdOwotCi0gICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBp
biBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKLQotICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAgICAgIC8v
IGhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKLSAgICAgICAgICAgICAgICAgICAgcmV0
LnJlcGxhY2UocnJldHVybiwgIiIpIDoKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNh
c2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCi0gICAgICAgICAgICAgICAg
ICAgIHJldCA9PSBudWxsID8gIiIgOiByZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5j
dGlvbiggdmFsdWUgKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkg
ewotICAgICAgICAgICAgdmFyIHZhbCwKLSAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KHRo
aXMpOwotCi0gICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIGlzRnVu
Y3Rpb24gKSB7Ci0gICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2Vs
Zi52YWwoKSApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWwgPSB2
YWx1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmlu
ZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKLSAgICAgICAgICAgIGlmICggdmFs
ID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgdmFsID0gIiI7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKLSAgICAgICAgICAgICAgICB2YWwg
Kz0gIiI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7
Ci0gICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICggdmFsdWUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1
ZSArICIiOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tz
WyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKLQotICAgICAgICAgICAgLy8gSWYgc2V0
IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKLSAgICAgICAg
ICAgIGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywg
dmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICB0aGlzLnZh
bHVlID0gdmFsOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci19KTsKLQotalF1
ZXJ5LmV4dGVuZCh7Ci0gICAgdmFsSG9va3M6IHsKLSAgICAgICAgb3B0aW9uOiB7Ci0gICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0
ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAotICAgICAgICAgICAg
ICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKLSAgICAgICAgICAgICAgICB2YXIgdmFsID0g
ZWxlbS5hdHRyaWJ1dGVzLnZhbHVlOwotICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZh
bC5zcGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OwotICAgICAgICAgICAgfQotICAg
ICAgICB9LAotICAgICAgICBzZWxlY3Q6IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCi0gICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gZWxlbS5zZWxlY3RlZEluZGV4LAotICAgICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5
cGUgPT09ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8g
aW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGkgPSBpbmRl
eCA8IDAgPwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9uZSA/IGluZGV4IDogMDsKLQotICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3Vn
aCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKLSAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBt
YXg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFm
dGVyIGZvcm0gcmVzZXQgKCMyNTUxKQotICAgICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9u
LnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2Fi
bGVkIG9wdGdyb3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9y
dC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJk
aXNhYmxlZCIpID09PSBudWxsICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFv
cHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFy
ZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggb25lICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
ICkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1
ZSApOwotCi0gICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2go
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnku
aW5BcnJheSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOwotICAgICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgLy8gVW51c2VkIGluIDEuOCwgbGVmdCBpbiBzbyBhdHRyRm4tc3Rh
YmJlcnMgd29uJ3QgZGllOyByZW1vdmUgaW4gMS45Ci0gICAgYXR0ckZuOiB7fSwKLQotICAgIGF0
dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKLSAgICAgICAgdmFyIHJl
dCwgaG9va3MsIG5vdHhtbCwKLSAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQot
ICAgICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQg
YXR0cmlidXRlIG5vZGVzCi0gICAgICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5
cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIHBhc3MgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5mblsg
bmFtZSBdICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSgg
dmFsdWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBh
dHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCi0gICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0
QXR0cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgIHJldHVybiBqUXVlcnku
cHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5vdHhtbCA9
IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKLQotICAgICAgICAvLyBB
bGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCi0gICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhv
b2sgaWYgb25lIGlzIGRlZmluZWQKLSAgICAgICAgaWYgKCBub3R4bWwgKSB7Ci0gICAgICAgICAg
ICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgaG9va3MgPSBqUXVlcnku
YXR0ckhvb2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6
IG5vZGVIb29rICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7Ci0KLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7Ci0gICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tz
ICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0g
dW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVl
ICsgIiIgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYm
IChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gcmV0OwotCi0gICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgIHJldCA9IGVs
ZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLSAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBh
dHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCi0gICAgICAg
ICAgICByZXR1cm4gcmV0ID09PSBudWxsID8KLSAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgot
ICAgICAgICAgICAgICAgIHJldDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZW1vdmVBdHRy
OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5h
bWVzLCBuYW1lLCBpc0Jvb2wsCi0gICAgICAgICAgICBpID0gMDsKLQotICAgICAgICBpZiAoIHZh
bHVlICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0KLSAgICAgICAgICAgIGF0dHJOYW1lcyA9
IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOwotCi0gICAgICAgICAgICBmb3IgKCA7IGkgPCBh
dHRyTmFtZXMubGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJOYW1l
c1sgaSBdOwotCi0gICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgewotICAgICAgICAgICAgICAg
ICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLSAgICAgICAg
ICAgICAgICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSApOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAo
c2V0dGluZyBmaXJzdCwgdGhlbiByZW1vdmFsKQotICAgICAgICAgICAgICAgICAgICAvLyBEbyBu
b3QgZG8gdGhpcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQotICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpc0Jvb2wgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuYXR0ciggZWxlbSwgbmFtZSwgIiIgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFt
ZSA6IHByb3BOYW1lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRp
bmcgcHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIGlzQm9vbCAmJiBwcm9wTmFtZSBpbiBlbGVtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIGF0dHJIb29rczogewotICAgICAgICB0eXBlOiB7Ci0gICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbGxv
dyB0aGUgdHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5jZSBpdCBjYXVzZXMgcHJvYmxl
bXMgaW4gSUUpCi0gICAgICAgICAgICAgICAgaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1l
ICkgJiYgZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJy
b3IoICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRp
byIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1
ZSByZXNldHMgdGhlIHZhbHVlIGluIElFNi05Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0
IHZhbHVlIHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
IGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICggdmFsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAv
LyBVc2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAotICAgICAgICAvLyBVc2Ug
dGhlIG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQotICAgICAg
ICB2YWx1ZTogewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxl
bSwgbmFtZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmFt
ZSBpbiBlbGVtID8KLSAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA6Ci0gICAgICAgICAg
ICAgICAgICAgIG51bGw7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAm
JiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0
dHJpYnV0ZSBpcyBhbHNvIHVzZWQKLSAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcHJvcEZpeDogewotICAg
ICAgICB0YWJpbmRleDogInRhYkluZGV4IiwKLSAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIs
Ci0gICAgICAgICJmb3IiOiAiaHRtbEZvciIsCi0gICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUi
LAotICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAotICAgICAgICBjZWxsc3BhY2luZzog
ImNlbGxTcGFjaW5nIiwKLSAgICAgICAgY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCi0gICAg
ICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKLSAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAotICAg
ICAgICB1c2VtYXA6ICJ1c2VNYXAiLAotICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVy
IiwKLSAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgotICAgIH0sCi0K
LSAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgIHZhciBy
ZXQsIGhvb2tzLCBub3R4bWwsCi0gICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0K
LSAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5k
IGF0dHJpYnV0ZSBub2RlcwotICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5U
eXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYygg
ZWxlbSApOwotCi0gICAgICAgIGlmICggbm90eG1sICkgewotICAgICAgICAgICAgLy8gRml4IG5h
bWUgYW5kIGF0dGFjaCBob29rcwotICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBu
YW1lIF0gfHwgbmFtZTsKLSAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFt
ZSBdOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewot
ICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Mu
c2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAo
cmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1bIG5hbWUgXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBwcm9wSG9va3M6IHsKLSAgICAgICAgdGFiSW5kZXg6IHsKLSAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vz
bid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBl
eHBsaWNpdGx5IHNldAotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3Jn
L2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZh
bHVlcy13aXRoLWphdmFzY3JpcHQvCi0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/Ci0gICAgICAg
ICAgICAgICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKLSAgICAg
ICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNr
YWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgIDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfSk7Ci0KLS8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0
cmlidXRlcwotYm9vbEhvb2sgPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsK
LSAgICAgICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBw
cm9wZXJ0aWVzCi0gICAgICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hl
cmUgc29tZSBib29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAotICAgICAgICB2YXIgYXR0ck5vZGUs
Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7Ci0gICAg
ICAgIHJldHVybiBwcm9wZXJ0eSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcHJvcGVydHkgIT09ICJib29s
ZWFuIiAmJiAoIGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpICkgJiYgYXR0
ck5vZGUubm9kZVZhbHVlICE9PSBmYWxzZSA/Ci0gICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNl
KCkgOgotICAgICAgICAgICAgdW5kZWZpbmVkOwotICAgIH0sCi0gICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgICAgIHZhciBwcm9wTmFtZTsKLSAgICAgICAgaWYg
KCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRy
aWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCi0gICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0cigg
ZWxlbSwgbmFtZSApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gdmFsdWUgaXMg
dHJ1ZSBzaW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5v
dCBmYWxzZQotICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2Ft
ZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQotICAgICAgICAgICAgcHJvcE5hbWUgPSBq
UXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgICAgICAgICBpZiAoIHByb3BOYW1l
IGluIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZp
Y2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAg
ICBlbGVtWyBwcm9wTmFtZSBdID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLX07Ci0KLS8vIElFNi83IGRvIG5vdCBzdXBw
b3J0IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0cmlidXRl
Ci1pZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7Ci0KLSAgICBmaXhTcGVjaWZpZWQgPSB7Ci0gICAg
ICAgIG5hbWU6IHRydWUsCi0gICAgICAgIGlkOiB0cnVlLAotICAgICAgICBjb29yZHM6IHRydWUK
LSAgICB9OwotCi0gICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKLSAg
ICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQotICAgIG5vZGVIb29rID0g
alF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwg
bmFtZSApIHsKLSAgICAgICAgICAgIHZhciByZXQ7Ci0gICAgICAgICAgICByZXQgPSBlbGVtLmdl
dEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICAgICAgICAgIHJldHVybiByZXQgJiYgKCBmaXhT
cGVjaWZpZWRbIG5hbWUgXSA/IHJldC52YWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPwot
ICAgICAgICAgICAgICAgIHJldC52YWx1ZSA6Ci0gICAgICAgICAgICAgICAgdW5kZWZpbmVkOwot
ICAgICAgICB9LAotICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsK
LSAgICAgICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IGF0dHJpYnV0
ZSBub2RlCi0gICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1l
ICk7Ci0gICAgICAgICAgICBpZiAoICFyZXQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gZG9j
dW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgZWxlbS5zZXRB
dHRyaWJ1dGVOb2RlKCByZXQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAo
IHJldC52YWx1ZSA9IHZhbHVlICsgIiIgKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBT
ZXQgd2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmco
IEJ1ZyAjODE1MCApCi0gICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKLSAgICBqUXVlcnkuZWFj
aChbICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgICAgICBq
UXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tz
WyBuYW1lIF0sIHsKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewot
ICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgewotICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotICAgIH0pOwotCi0gICAgLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiBy
ZW1vdmFscygjMTA0MjkpCi0gICAgLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFu
IGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKLSAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRl
ZGl0YWJsZSA9IHsKLSAgICAgICAgZ2V0OiBub2RlSG9vay5nZXQsCi0gICAgICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0g
IiIgKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAiZmFsc2UiOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwotICAgICAgICB9
Ci0gICAgfTsKLX0KLQotCi0vLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2Fs
bCBvbiBJRQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7Ci0gICAgalF1
ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKLSAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4
dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0
ZSggbmFtZSwgMiApOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRl
ZmluZWQgOiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1p
ZiAoICFqUXVlcnkuc3VwcG9ydC5zdHlsZSApIHsKLSAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxl
ID0gewotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgLy8gUmV0
dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKLSAgICAgICAgICAgIC8v
IE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkg
bmFtZXMKLSAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2Uo
KSB8fCB1bmRlZmluZWQ7Ci0gICAgICAgIH0sCi0gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgewotICAgICAgICAgICAgcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFs
dWUgKyAiIiApOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotLy8gU2FmYXJpIG1pcy1yZXBvcnRz
IHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgotLy8gQWNjZXNzaW5n
IHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0Ci1pZiAoICFqUXVl
cnkuc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKLSAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVk
ID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgewotICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFy
ZW50Tm9kZTsKLQotICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7Ci0gICAgICAgICAgICAgICAg
cGFyZW50LnNlbGVjdGVkSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKLSAgICAgICAgICAgICAg
ICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnQu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLS8v
IElFNi83IGNhbGwgZW5jdHlwZSBlbmNvZGluZwotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlw
ZSApIHsKLSAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKLX0KLQotLy8g
UmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKLWlmICggIWpRdWVyeS5zdXBwb3J0
LmNoZWNrT24gKSB7Ci0gICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1
bmN0aW9uKCkgewotICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKLSAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYg
YSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRB
dHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfTsKLSAgICB9KTsKLX0KLWpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNo
ZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpR
dWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7Ci0gICAgICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSgg
dmFsdWUgKSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVl
cnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0pOwotfSk7Ci12YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4
dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSwKLSAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwp
KD86XC4oLispfCkkLywKLSAgICByaG92ZXJIYWNrID0gLyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxi
LywKLSAgICBya2V5RXZlbnQgPSAvXmtleS8sCi0gICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNl
fGNvbnRleHRtZW51KXxjbGljay8sCi0gICAgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1
c3xmb2N1c291dGJsdXIpJC8sCi0gICAgaG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHsK
LSAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZl
bnRzLnJlcGxhY2UoIHJob3ZlckhhY2ssICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOwot
ICAgIH07Ci0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0g
bm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCi0gKiBQcm9wcyB0byBEZWFuIEVkd2Fy
ZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgotICovCi1qUXVlcnku
ZXZlbnQgPSB7Ci0KLSAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0
YSwgc2VsZWN0b3IgKSB7Ci0KLSAgICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZl
bnRzLAotICAgICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCi0g
ICAgICAgICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMsIHNwZWNpYWw7Ci0KLSAgICAgICAgLy8g
RG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChhbGxv
dyBwbGFpbiBvYmplY3RzIHRobykKLSAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEg
PSBqUXVlcnkuX2RhdGEoIGVsZW0gKSkgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBk
YXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKLSAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIg
KSB7Ci0gICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7Ci0gICAgICAgICAgICBoYW5k
bGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxl
T2JqSW4uc2VsZWN0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIK
LSAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgewotICAgICAgICAgICAgaGFuZGxlci5ndWlk
ID0galF1ZXJ5Lmd1aWQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluaXQgdGhlIGVsZW1l
bnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmly
c3QKLSAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOwotICAgICAgICBpZiAoICFldmVu
dHMgKSB7Ci0gICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKLSAgICAg
ICAgfQotICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKLSAgICAgICAgaWYg
KCAhZXZlbnRIYW5kbGUgKSB7Ci0gICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhh
bmRsZSA9IGZ1bmN0aW9uKCBlICkgewotICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNl
Y29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCi0gICAgICAgICAgICAg
ICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAot
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAo
IWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/Ci0gICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJn
dW1lbnRzICkgOgotICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9
OwotICAgICAgICAgICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZu
IHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRpdmUgZXZlbnRzCi0gICAg
ICAgICAgICBldmVudEhhbmRsZS5lbGVtID0gZWxlbTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKLSAgICAgICAgLy8g
alF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwotICAgICAgICB0eXBl
cyA9IGpRdWVyeS50cmltKCBob3ZlckhhY2sodHlwZXMpICkuc3BsaXQoICIgIiApOwotICAgICAg
ICBmb3IgKCB0ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgewotCi0gICAgICAgICAgICB0
bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwotICAgICAgICAgICAg
dHlwZSA9IHRuc1sxXTsKLSAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRuc1syXSB8fCAiIiAp
LnNwbGl0KCAiLiIgKS5zb3J0KCk7Ci0KLSAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5nZXMg
aXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQg
dHlwZQotICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0g
fHwge307Ci0KLSAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBz
cGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQotICAgICAgICAgICAg
dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5
cGUgKSB8fCB0eXBlOwotCi0gICAgICAgICAgICAvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBu
ZXdseSByZXNldCB0eXBlCi0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKLQotICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0
byBhbGwgZXZlbnQgaGFuZGxlcnMKLSAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5leHRl
bmQoewotICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgb3JpZ1R5
cGU6IHRuc1sxXSwKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAotICAgICAgICAgICAgICAg
IGhhbmRsZXI6IGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLAot
ICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKLSAgICAgICAgICAgICAgICBuZWVk
c0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0
KCBzZWxlY3RvciApLAotICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2lu
KCIuIikKLSAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7Ci0KLSAgICAgICAgICAgIC8vIElu
aXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0Ci0gICAgICAgICAg
ICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdOwotICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMg
KSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOwotICAg
ICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOwotCi0gICAgICAgICAgICAg
ICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lh
bCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCi0gICAgICAgICAgICAgICAgaWYgKCAhc3Bl
Y2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMs
IGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAvLyBCaW5k
IHRoZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVu
dEhhbmRsZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgewotICAgICAgICAg
ICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdz
IGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250Ci0gICAgICAgICAgICBpZiAoIHNlbGVj
dG9yICkgewotICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdh
dGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVz
ZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9i
YWxbIHR5cGUgXSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOdWxsaWZ5IGVsZW0g
dG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLSAgICAgICAgZWxlbSA9IG51bGw7Ci0gICAg
fSwKLQotICAgIGdsb2JhbDoge30sCi0KLSAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9m
IGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBl
cywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgewotCi0gICAgICAgIHZhciB0LCB0
bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCi0gICAgICAgICAgICBq
LCBldmVudHMsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLAotICAgICAgICAgICAgZWxl
bURhdGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOwot
Ci0gICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSAp
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE9uY2UgZm9y
IGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKLSAgICAg
ICAgdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQo
IiAiKTsKLSAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKLSAg
ICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107Ci0g
ICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07Ci0gICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gdG5zWzJdOwotCi0gICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhp
cyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKLSAgICAgICAgICAgIGlm
ICggIXR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBl
c1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Bl
Y2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAgICAgICAgICB0
eXBlID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBl
ICkgfHwgdHlwZTsKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtd
OwotICAgICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKLSAgICAgICAgICAg
IG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3Bh
Y2VzLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikg
OiBudWxsOwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCi0gICAgICAg
ICAgICBmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKLQotICAgICAgICAgICAgICAgIGlm
ICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYK
LSAgICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5k
bGVPYmouZ3VpZCApICYmCi0gICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5h
bWVzcGFjZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwg
c2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlLmRlbGVnYXRlQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhp
bmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKLSAgICAgICAgICAgIC8vIChhdm9pZHMgcG90
ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2
ZW50IGhhbmRsZXJzKQotICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwICYm
IG9yaWdDb3VudCAhPT0gZXZlbnRUeXBlLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICBpZiAo
ICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNw
YWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5k
byBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCi0gICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmpl
Y3QoIGV2ZW50cyApICkgewotICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKLQot
ICAgICAgICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBj
bGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKLSAgICAgICAgICAgIC8vIHNvIHVzZSBpdCBpbnN0
ZWFkIG9mIGRlbGV0ZQotICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJldmVu
dHMiLCB0cnVlICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gRXZlbnRzIHRoYXQgYXJl
IHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCi0gICAg
Ly8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBp
bmxpbmUgaGFuZGxlcnMuCi0gICAgY3VzdG9tRXZlbnQ6IHsKLSAgICAgICAgImdldERhdGEiOiB0
cnVlLAotICAgICAgICAic2V0RGF0YSI6IHRydWUsCi0gICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1
ZQotICAgIH0sCi0KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9u
bHlIYW5kbGVycyApIHsKLSAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNv
bW1lbnQgbm9kZXMKLSAgICAgICAgaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDgpICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKLSAgICAgICAgdmFyIGNh
Y2hlLCBleGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZl
bnRQYXRoLCBidWJibGVUeXBlLAotICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZl
bnQsCi0gICAgICAgICAgICBuYW1lc3BhY2VzID0gW107Ci0KLSAgICAgICAgLy8gZm9jdXMvYmx1
ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmln
aHQgbm93Ci0gICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVu
dC50cmlnZ2VyZWQgKSApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgewotICAgICAgICAgICAgLy8gRXhj
bHVzaXZlIGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNw
YWNlcykKLSAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKLSAgICAgICAgICAg
IGV4Y2x1c2l2ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHR5cGUuaW5kZXhP
ZiggIi4iICkgPj0gMCApIHsKLSAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3Jl
YXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKLSAgICAgICAgICAg
IG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICB0eXBlID0gbmFtZXNw
YWNlcy5zaGlmdCgpOwotICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUg
XSkgJiYgIWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKLSAgICAgICAgICAgIC8vIE5v
IGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBp
bmxpbmUgaGFuZGxlcnMKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50
IHR5cGUgc3RyaW5nCi0gICAgICAgIGV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/
Ci0gICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0Ci0gICAgICAgICAgICBldmVudFsg
alF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKLSAgICAgICAgICAgIC8vIE9iamVjdCBsaXRlcmFs
Ci0gICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKLSAgICAgICAg
ICAgIC8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKLSAgICAgICAgICAgIG5ldyBqUXVl
cnkuRXZlbnQoIHR5cGUgKTsKLQotICAgICAgICBldmVudC50eXBlID0gdHlwZTsKLSAgICAgICAg
ZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsKLSAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVz
aXZlOwotICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOwot
ICAgICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAo
IihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIp
IDogbnVsbDsKLSAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAib24i
ICsgdHlwZSA6ICIiOwotCi0gICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCi0gICAg
ICAgIGlmICggIWVsZW0gKSB7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcg
dGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRv
IGRvY3VtZW50Ci0gICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZTsKLSAgICAgICAgICAg
IGZvciAoIGkgaW4gY2FjaGUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2
ZW50cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgewotICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVs
ZW0sIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4g
Y2FzZSBpdCBpcyBiZWluZyByZXVzZWQKLSAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVk
OwotICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7Ci0gICAgICAgICAgICBldmVudC50YXJn
ZXQgPSBlbGVtOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRh
dGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAot
ICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDog
W107Ci0gICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKLQotICAgICAgICAvLyBBbGxvdyBz
cGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0gICAgICAgIHNwZWNpYWwg
PSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotICAgICAgICBpZiAoIHNwZWNp
YWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFs
c2UgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRl
cm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBz
cGVjICgjOTk1MSkKLSAgICAgICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdp
bmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKLSAgICAg
ICAgZXZlbnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOwotICAg
ICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5p
c1dpbmRvdyggZWxlbSApICkgewotCi0gICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5k
ZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKLSAgICAgICAgICAgIGN1ciA9IHJmb2N1c01vcnBoLnRlc3Qo
IGJ1YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOwotICAgICAgICAg
ICAgZm9yICggb2xkID0gZWxlbTsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKLSAgICAg
ICAgICAgICAgICBldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBdKTsKLSAgICAgICAg
ICAgICAgICBvbGQgPSBjdXI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE9ubHkg
YWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3Ig
ZGV0YWNoZWQgRE9NKQotICAgICAgICAgICAgaWYgKCBvbGQgPT09IChlbGVtLm93bmVyRG9jdW1l
bnQgfHwgZG9jdW1lbnQpICkgewotICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xk
LmRlZmF1bHRWaWV3IHx8IG9sZC5wYXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0p
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBv
biB0aGUgZXZlbnQgcGF0aAotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGV2ZW50UGF0aC5sZW5n
dGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKLQotICAgICAgICAg
ICAgY3VyID0gZXZlbnRQYXRoW2ldWzBdOwotICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50
UGF0aFtpXVsxXTsKLQotICAgICAgICAgICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwg
ImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJo
YW5kbGUiICk7Ci0gICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICBo
YW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgaXMgYSBiYXJlIEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFu
ZGxlcgotICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07Ci0gICAg
ICAgICAgICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxl
LmFwcGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewotICAgICAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7Ci0KLSAgICAgICAgLy8gSWYgbm9ib2R5IHBy
ZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdwotICAgICAgICBpZiAoICFvbmx5
SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotCi0gICAgICAgICAg
ICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVt
Lm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCi0gICAgICAgICAgICAgICAgISh0
eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVy
eS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0
aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0
aGUgZXZlbnQuCi0gICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkg
Y2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KLSAgICAgICAgICAgICAg
ICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xv
YmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCi0gICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9u
IGZvY3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQotICAgICAgICAgICAgICAgIGlm
ICggb250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09ICJmb2N1cyIgJiYgdHlwZSAh
PT0gImJsdXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggIT09IDApICYmICFqUXVlcnku
aXNXaW5kb3coIGVsZW0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10
cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggb2xkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0g
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
UHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5
IGJ1YmJsZWQgaXQgYWJvdmUKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdn
ZXJlZCA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOwotICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICggb2xkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgb250eXBlIF0gPSBvbGQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXZlbnQucmVz
dWx0OwotICAgIH0sCi0KLSAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAg
ICAgIC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50
IG9iamVjdAotICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRv
dy5ldmVudCApOwotCi0gICAgICAgIHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNo
ZWQsIG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAotICAgICAgICAgICAgaGFuZGxl
cnMgPSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlw
ZSBdIHx8IFtdKSwKLSAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0
ZUNvdW50LAotICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICks
Ci0gICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNw
YWNlLAotICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50
eXBlIF0gfHwge30sCi0gICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXTsKLQotICAgICAgICAv
LyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkp
IG5hdGl2ZSBldmVudAotICAgICAgICBhcmdzWzBdID0gZXZlbnQ7Ci0gICAgICAgIGV2ZW50LmRl
bGVnYXRlVGFyZ2V0ID0gdGhpczsKLQotICAgICAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBo
b29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCi0gICAg
ICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwo
IHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRoYXQgc2hvdWxkIHJ1biBpZiB0
aGVyZSBhcmUgZGVsZWdhdGVkIGV2ZW50cwotICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGlj
ayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKLSAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50
ICYmICEoZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIpICkgewotCi0gICAg
ICAgICAgICBmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIu
cGFyZW50Tm9kZSB8fCB0aGlzICkgewotCi0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2Vz
cyBjbGlja3MgKE9OTFkpIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4
MiwgIzExNzY0KQotICAgICAgICAgICAgICAgIGlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8
IGV2ZW50LnR5cGUgIT09ICJjbGljayIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbE1hdGNo
ID0ge307Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHNlbE1hdGNoWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQg
PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmlu
ZGV4KCBjdXIgKSA+PSAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBd
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2Jq
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVz
IH0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5
LWJvdW5kKSBoYW5kbGVycwotICAgICAgICBpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRl
Q291bnQgKSB7Ci0gICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIG1h
dGNoZXM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJv
cGFnYXRpb24gYmVuZWF0aCB1cwotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1
ZS5sZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKLSAgICAg
ICAgICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKLSAgICAgICAgICAgIGV2ZW50LmN1
cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07Ci0KLSAgICAgICAgICAgIGZvciAoIGogPSAwOyBq
IDwgbWF0Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQoKTsgaisrICkgewotICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG1hdGNoZWQu
bWF0Y2hlc1sgaiBdOwotCi0gICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3Qg
ZWl0aGVyIDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgotICAg
ICAgICAgICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRv
IHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgot
ICAgICAgICAgICAgICAgIGlmICggcnVuX2FsbCB8fCAoIWV2ZW50Lm5hbWVzcGFjZSAmJiAhaGFu
ZGxlT2JqLm5hbWVzcGFjZSkgfHwgZXZlbnQubmFtZXNwYWNlX3JlICYmIGV2ZW50Lm5hbWVzcGFj
ZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwotICAgICAgICAgICAgICAgICAgICBldmVu
dC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAo
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUg
fHwgaGFuZGxlT2JqLmhhbmRsZXIgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBs
eSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQg
IT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9
IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERp
c3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQotICAgICAgICBpZiAoIHNwZWNpYWwucG9z
dERpc3BhdGNoICkgewotICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhp
cywgZXZlbnQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7Ci0g
ICAgfSwKLQotICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2
ZW50IGFuZCBNb3VzZUV2ZW50Ci0gICAgLy8gKioqIGF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRl
ZE5vZGUgc3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVkLCBub24tVzNDLCBkZXByZWNhdGVk
LCB3aWxsIGJlIHJlbW92ZWQgaW4gMS44ICoqKgotICAgIHByb3BzOiAiYXR0ckNoYW5nZSBhdHRy
TmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3Ry
bEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0
S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKLQotICAgIGZpeEhv
b2tzOiB7fSwKLQotICAgIGtleUhvb2tzOiB7Ci0gICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29k
ZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKLSAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZl
bnQsIG9yaWdpbmFsICkgewotCi0gICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVu
dHMKLSAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHsKLSAgICAgICAgICAg
ICAgICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5j
aGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiBldmVudDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBtb3VzZUhvb2tzOiB7Ci0g
ICAgICAgIHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50
IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5z
cGxpdCgiICIpLAotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7
Ci0gICAgICAgICAgICB2YXIgZXZlbnREb2MsIGRvYywgYm9keSwKLSAgICAgICAgICAgICAgICBi
dXR0b24gPSBvcmlnaW5hbC5idXR0b24sCi0gICAgICAgICAgICAgICAgZnJvbUVsZW1lbnQgPSBv
cmlnaW5hbC5mcm9tRWxlbWVudDsKLQotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kg
aWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQotICAgICAgICAgICAgaWYgKCBldmVu
dC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKLSAgICAgICAg
ICAgICAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50
OwotICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKLSAgICAg
ICAgICAgICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKLQotICAgICAgICAgICAgICAgIGV2ZW50
LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJv
ZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8
IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKLSAgICAgICAgICAgICAgICBldmVudC5w
YWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5
ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBi
b2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgIGlmICgg
IWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAg
ZXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBvcmln
aW5hbC50b0VsZW1lbnQgOiBmcm9tRWxlbWVudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09
PSByaWdodAotICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBz
byBkb24ndCB1c2UgaXQKLSAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAh
PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24g
JiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50OwotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICBpZiAoIGV2ZW50
WyBqUXVlcnkuZXhwYW5kbyBdICkgewotICAgICAgICAgICAgcmV0dXJuIGV2ZW50OwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2Jq
ZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCi0gICAgICAgIHZhciBpLCBwcm9wLAot
ICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50LAotICAgICAgICAgICAgZml4SG9vayA9
IGpRdWVyeS5ldmVudC5maXhIb29rc1sgZXZlbnQudHlwZSBdIHx8IHt9LAotICAgICAgICAgICAg
Y29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyAp
IDogdGhpcy5wcm9wczsKLQotICAgICAgICBldmVudCA9IGpRdWVyeS5FdmVudCggb3JpZ2luYWxF
dmVudCApOwotCi0gICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7Ci0gICAgICAg
ICAgICBwcm9wID0gY29weVsgLS1pIF07Ci0gICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3Jp
Z2luYWxFdmVudFsgcHJvcCBdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRml4IHRhcmdldCBw
cm9wZXJ0eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwgSUUgNi83LzggJiBTYWZhcmkyKQotICAgICAg
ICBpZiAoICFldmVudC50YXJnZXQgKSB7Ci0gICAgICAgICAgICBldmVudC50YXJnZXQgPSBvcmln
aW5hbEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQotICAgICAg
ICBpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKLSAgICAgICAgICAgIGV2ZW50
LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRm9yIG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVk
ICgjMzM2OCwgIzExMzI4OyBJRTYvNy84KQotICAgICAgICBldmVudC5tZXRhS2V5ID0gISFldmVu
dC5tZXRhS2V5OwotCi0gICAgICAgIHJldHVybiBmaXhIb29rLmZpbHRlcj8gZml4SG9vay5maWx0
ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKLSAgICB9LAotCi0gICAgc3BlY2lh
bDogewotICAgICAgICBsb2FkOiB7Ci0gICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBp
bWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCi0gICAgICAgICAg
ICBub0J1YmJsZTogdHJ1ZQotICAgICAgICB9LAotCi0gICAgICAgIGZvY3VzOiB7Ci0gICAgICAg
ICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgotICAgICAgICB9LAotICAgICAgICBibHVyOiB7
Ci0gICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKLSAgICAgICAgfSwKLQotICAg
ICAgICBiZWZvcmV1bmxvYWQ6IHsKLSAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwg
bmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3
YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKLSAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc1dpbmRvdyggdGhpcyApICkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
Lm9uYmVmb3JldW5sb2FkID0gZXZlbnRIYW5kbGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBl
dmVudEhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQg
PT09IGV2ZW50SGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5s
b2FkID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCwgYnVi
YmxlICkgewotICAgICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0
ZSBhIGRpZmZlcmVudCBvbmUuCi0gICAgICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9p
ZCBkb25vcidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQotICAgICAgICAvLyBzaW11bGF0
ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25v
ci4KLSAgICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAotICAgICAgICAgICAgbmV3IGpRdWVy
eS5FdmVudCgpLAotICAgICAgICAgICAgZXZlbnQsCi0gICAgICAgICAgICB7IHR5cGU6IHR5cGUs
Ci0gICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUsCi0gICAgICAgICAgICAgICAgb3Jp
Z2luYWxFdmVudDoge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLSAgICAgICAgaWYgKCBi
dWJibGUgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxl
bSApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNo
LmNhbGwoIGVsZW0sIGUgKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJl
dmVudGVkKCkgKSB7Ci0gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg
ICB9Ci0gICAgfQotfTsKLQotLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywgYnV0IGl0J3MgdW5k
b2N1bWVudGVkL2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KLS8vIFRoZSAxLjcgc3Bl
Y2lhbCBldmVudCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBob29rcyBuZWVkZWQg
bm93LgotalF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKLQotalF1
ZXJ5LnJlbW92ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/Ci0gICAgZnVu
Y3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKLSAgICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2
ZW50TGlzdGVuZXIgKSB7Ci0gICAgICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5
cGUsIGhhbmRsZSwgZmFsc2UgKTsKLSAgICAgICAgfQotICAgIH0gOgotICAgIGZ1bmN0aW9uKCBl
bGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7Ci0K
LSAgICAgICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgewotCi0gICAgICAgICAgICAvLyAjODU0
NSwgIzcwNTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0b20gZXZlbnRzIGluIElF
Ni04Ci0gICAgICAgICAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVu
dCwgYnkgbmFtZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKLSAg
ICAgICAgICAgIGlmICggdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7Ci0g
ICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxlICk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi1qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKLSAgICAvLyBB
bGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKLSAgICBpZiAoICEo
dGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7Ci0gICAgICAgIHJldHVybiBuZXcgalF1
ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Ci0gICAgfQotCi0gICAgLy8gRXZlbnQgb2JqZWN0Ci0g
ICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7Ci0gICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9
IHNyYzsKLSAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7Ci0KLSAgICAgICAgLy8gRXZlbnRz
IGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50
ZWQKLSAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3Qg
dGhlIGNvcnJlY3QgdmFsdWUuCi0gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBz
cmMuZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8Ci0gICAg
ICAgICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkg
KSA/IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKLQotICAgIC8vIEV2ZW50IHR5cGUKLSAgICB9
IGVsc2UgewotICAgICAgICB0aGlzLnR5cGUgPSBzcmM7Ci0gICAgfQotCi0gICAgLy8gUHV0IGV4
cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKLSAgICBp
ZiAoIHByb3BzICkgewotICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOwotICAg
IH0KLQotICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0
IGhhdmUgb25lCi0gICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBq
UXVlcnkubm93KCk7Ci0KLSAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCi0gICAgdGhpc1sgalF1ZXJ5
LmV4cGFuZG8gXSA9IHRydWU7Ci19OwotCi1mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci1mdW5jdGlvbiByZXR1cm5UcnVlKCkgewotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lm
aWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLS8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJp
bmRpbmcuaHRtbAotalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKLSAgICBwcmV2ZW50RGVmYXVs
dDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJu
VHJ1ZTsKLQotICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKLSAgICAgICAgaWYg
KCAhZSApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlm
IHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50Ci0gICAg
ICAgIGlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKLSAgICAgICAgICAgIGUucHJldmVudERlZmF1
bHQoKTsKLQotICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0
eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSwKLSAg
ICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmlzUHJvcGFnYXRp
b25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKLQotICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxF
dmVudDsKLSAgICAgICAgaWYgKCAhZSApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3Jp
Z2luYWwgZXZlbnQKLSAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKLSAgICAgICAg
ICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gb3RoZXJ3aXNl
IHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0
cnVlIChJRSkKLSAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICAgIH0sCi0gICAgc3Rv
cEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5pc0ltbWVk
aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7Ci0gICAgICAgIHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCk7Ci0gICAgfSwKLSAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNl
LAotICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKLSAgICBpc0ltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKLX07Ci0KLS8vIENyZWF0ZSBtb3VzZWVu
dGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNr
cwotalF1ZXJ5LmVhY2goewotICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAotICAgIG1vdXNl
bGVhdmU6ICJtb3VzZW91dCIKLX0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0gICAgalF1ZXJ5
LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKLSAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCi0g
ICAgICAgIGJpbmRUeXBlOiBmaXgsCi0KLSAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQg
KSB7Ci0gICAgICAgICAgICB2YXIgcmV0LAotICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMs
Ci0gICAgICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCi0gICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqLAotICAgICAgICAgICAgICAgIHNl
bGVjdG9yID0gaGFuZGxlT2JqLnNlbGVjdG9yOwotCi0gICAgICAgICAgICAvLyBGb3IgbW91c2Vu
dGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJn
ZXQuCi0gICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVm
dC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwotICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8
fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRl
ZCApKSApIHsKLSAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBl
OwotICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotICAgIH07Ci19KTsKLQot
Ly8gSUUgc3VibWl0IGRlbGVnYXRpb24KLWlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJs
ZXMgKSB7Ci0KLSAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7Ci0gICAgICAgIHNl
dHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxl
Z2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCi0gICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFt
ZSggdGhpcywgImZvcm0iICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdo
ZW4gYSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAotICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1
Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotICAgICAgICAgICAgICAgIC8vIE5vZGUgbmFtZSBjaGVj
ayBhdm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCi0gICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSBlLnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBpZiAoIGZv
cm0gJiYgIWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiICkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIs
IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zdWJt
aXRfYnViYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAvLyByZXR1cm4g
dW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKLSAgICAgICAg
fSwKLQotICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAg
ICAgIC8vIElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVu
dCB1cCB0aGUgdHJlZQotICAgICAgICAgICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsK
LSAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnQuX3N1Ym1pdF9idWJibGU7Ci0gICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0IiwgdGhpcy5wYXJl
bnROb2RlLCBldmVudCwgdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwKLQotICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cwotICAg
ICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
UmVtb3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3Vi
bWl0IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCi0gICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVt
b3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi0vLyBJRSBj
aGFuZ2UgZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4Ci1pZiAoICFqUXVlcnkuc3Vw
cG9ydC5jaGFuZ2VCdWJibGVzICkgewotCi0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdl
ID0gewotCi0gICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLQotICAgICAgICAgICAgaWYgKCBy
Zm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKLSAgICAgICAgICAgICAgICAvLyBJ
RSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dl
ciBpdCBvbiBjbGljawotICAgICAgICAgICAgICAgIC8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2Uu
IEVhdCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgotICAgICAgICAg
ICAgICAgIC8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hl
Y2svcmFkaW8gYWZ0ZXIgYmx1ci4KLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0g
ImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVu
Y3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmln
aW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5fanVzdF9jaGFuZ2VkICYmICFl
dmVudC5pc1RyaWdnZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVz
dF9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBjaGFuZ2UgZXZlbnRz
ICgjMTE1MDApCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUo
ICJjaGFuZ2UiLCB0aGlzLCBldmVudCwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5n
ZSBoYW5kbGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCi0gICAgICAgICAgICBqUXVlcnkuZXZlbnQu
YWRkKCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgewotICAg
ICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IHJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0s
ICJfY2hhbmdlX2F0dGFjaGVkIiApICkgewotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11
bGF0ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50
LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0
dGFjaGVkIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9LAotCi0gICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAg
ICAgdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgbmF0
aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2Vy
ZWQgdGhlbSBhYm92ZQotICAgICAgICAgICAgaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50Lmlz
U2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYm
IGVsZW0udHlwZSAhPT0gImNoZWNrYm94IikgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV2
ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7Ci0gICAgICAg
IH0KLSAgICB9OwotfQotCi0vLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVu
dHMKLWlmICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJibGVzICkgewotICAgIGpRdWVyeS5l
YWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3Jp
ZywgZml4ICkgewotCi0gICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxl
ciB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKLSAgICAgICAgdmFyIGF0dGFj
aGVzID0gMCwKLSAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1
ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOwotICAgICAgICAgICAgfTsKLQotICAgICAg
ICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7Ci0gICAgICAgICAgICBzZXR1cDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgewotICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVy
LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMg
PT09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0gICAg
b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25l
ICkgewotICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlOwotCi0gICAgICAgIC8vIFR5cGVzIGNhbiBi
ZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycwotICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0g
Im9iamVjdCIgKSB7Ci0gICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRh
dGEgKQotICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAv
LyAmJiBzZWxlY3RvciAhPSBudWxsCi0gICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3Qs
IGRhdGEgKQotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOwotICAgICAg
ICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBl
LCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZGF0YSA9
PSBudWxsICYmIGZuID09IG51bGwgKSB7Ci0gICAgICAgICAgICAvLyAoIHR5cGVzLCBmbiApCi0g
ICAgICAgICAgICBmbiA9IHNlbGVjdG9yOwotICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0g
dW5kZWZpbmVkOwotICAgICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgewotICAgICAgICAg
ICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAg
IC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCi0gICAgICAgICAgICAgICAgZm4gPSBkYXRhOwot
ICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKLSAgICAgICAgICAgICAgICBm
biA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yOwotICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGlmICggZm4gPT09IGZhbHNlICkgewotICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsK
LSAgICAgICAgfSBlbHNlIGlmICggIWZuICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIG9uZSA9PT0gMSApIHsKLSAgICAgICAgICAgIG9yaWdG
biA9IGZuOwotICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBp
bmZvCi0gICAgICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOwotICAgICAgICAgICAg
ICAgIHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNp
bmcgb3JpZ0ZuCi0gICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4u
Z3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5
cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAgICBvbmU6
IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgewotICAgICAgICByZXR1cm4g
dGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOwotICAgIH0sCi0gICAgb2Zm
OiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKLSAgICAgICAgdmFyIGhhbmRsZU9i
aiwgdHlwZTsKLSAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0
eXBlcy5oYW5kbGVPYmogKSB7Ci0gICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQg
alF1ZXJ5LkV2ZW50Ci0gICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7Ci0g
ICAgICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAotICAgICAgICAg
ICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBo
YW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAotICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5zZWxlY3RvciwKLSAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgot
ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgIC8vICgg
dHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCi0gICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5
cGVzICkgewotICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNb
IHR5cGUgXSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9y
ID09PSAiZnVuY3Rpb24iICkgewotICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQotICAg
ICAgICAgICAgZm4gPSBzZWxlY3RvcjsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVk
OwotICAgICAgICB9Ci0gICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgewotICAgICAgICAgICAg
Zm4gPSByZXR1cm5GYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMs
IGZuLCBzZWxlY3RvciApOwotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgYmluZDogZnVuY3Rp
b24oIHR5cGVzLCBkYXRhLCBmbiApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBu
dWxsLCBkYXRhLCBmbiApOwotICAgIH0sCi0gICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZu
ICkgewotICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOwotICAgIH0s
Ci0KLSAgICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewotICAgICAgICBqUXVl
cnkoIHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTsK
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywg
Zm4gKSB7Ci0gICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5z
ZWxlY3RvciB8fCAiKioiLCBmbiApOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0g
ICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgewotICAg
ICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOwotICAgIH0s
Ci0gICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7Ci0gICAg
ICAgIC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKLSAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIq
KiIgKSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKLSAgICB9LAot
Ci0gICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigg
dHlwZSwgZGF0YSwgdGhpcyApOwotICAgICAgICB9KTsKLSAgICB9LAotICAgIHRyaWdnZXJIYW5k
bGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKLSAgICAgICAgaWYgKCB0aGlzWzBdICkgewot
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlz
WzBdLCB0cnVlICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgdG9nZ2xlOiBmdW5jdGlvbigg
Zm4gKSB7Ci0gICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNz
IGluIGNsb3N1cmUKLSAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCi0gICAgICAgICAgICBn
dWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAotICAgICAgICAgICAgaSA9IDAsCi0gICAg
ICAgICAgICB0b2dnbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAgIHZh
ciBsYXN0VG9nZ2xlID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1
aWQgKSB8fCAwICkgJSBpOwotICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgImxh
c3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKLQotICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCi0gICAgICAgICAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKLQotICAgICAgICAgICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBmdW5j
dGlvbgotICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRo
aXMsIGFyZ3VtZW50cyApIHx8IGZhbHNlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAvLyBs
aW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xp
Y2sgaGFuZGxlcgotICAgICAgICB0b2dnbGVyLmd1aWQgPSBndWlkOwotICAgICAgICB3aGlsZSAo
IGkgPCBhcmdzLmxlbmd0aCApIHsKLSAgICAgICAgICAgIGFyZ3NbIGkrKyBdLmd1aWQgPSBndWlk
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2dsZXIgKTsKLSAg
ICB9LAotCi0gICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92
ZXIgKTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZv
Y3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCi0gICAg
Im1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRl
ciBtb3VzZWxlYXZlICIgKwotICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXBy
ZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5h
bWUgKSB7Ci0KLSAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZwotICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewotICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7
Ci0gICAgICAgICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICBkYXRhID0gbnVsbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/Ci0gICAgICAgICAg
ICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKLSAgICAgICAgICAgIHRoaXMudHJp
Z2dlciggbmFtZSApOwotICAgIH07Ci0KLSAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkg
KSB7Ci0gICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50
LmtleUhvb2tzOwotICAgIH0KLQotICAgIGlmICggcm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkg
ewotICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5ldmVudC5t
b3VzZUhvb2tzOwotICAgIH0KLX0pOwotLyohCi0gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2lu
ZQotICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1
dG9ycwotICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCi0gKiBodHRwOi8vc2l6emxl
anMuY29tLwotICovCi0oZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewotCi12YXIgY2Fj
aGVkcnVucywKLSAgICBhc3NlcnRHZXRJZE5vdE5hbWUsCi0gICAgRXhwciwKLSAgICBnZXRUZXh0
LAotICAgIGlzWE1MLAotICAgIGNvbnRhaW5zLAotICAgIGNvbXBpbGUsCi0gICAgc29ydE9yZGVy
LAotICAgIGhhc0R1cGxpY2F0ZSwKLSAgICBvdXRlcm1vc3RDb250ZXh0LAotCi0gICAgYmFzZUhh
c0R1cGxpY2F0ZSA9IHRydWUsCi0gICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5lZCIsCi0KLSAg
ICBleHBhbmRvID0gKCAic2l6Y2FjaGUiICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoICIuIiwg
IiIgKSwKLQotICAgIFRva2VuID0gU3RyaW5nLAotICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3Vt
ZW50LAotICAgIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCi0gICAgZGlycnVu
cyA9IDAsCi0gICAgZG9uZSA9IDAsCi0gICAgcG9wID0gW10ucG9wLAotICAgIHB1c2ggPSBbXS5w
dXNoLAotICAgIHNsaWNlID0gW10uc2xpY2UsCi0gICAgLy8gVXNlIGEgc3RyaXBwZWQtZG93biBp
bmRleE9mIGlmIGEgbmF0aXZlIG9uZSBpcyB1bmF2YWlsYWJsZQotICAgIGluZGV4T2YgPSBbXS5p
bmRleE9mIHx8IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgaSA9IDAsCi0gICAgICAg
ICAgICBsZW4gPSB0aGlzLmxlbmd0aDsKLSAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7
Ci0gICAgICAgICAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgIH0sCi0KLSAgICAvLyBBdWdtZW50IGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNp
enpsZQotICAgIG1hcmtGdW5jdGlvbiA9IGZ1bmN0aW9uKCBmbiwgdmFsdWUgKSB7Ci0gICAgICAg
IGZuWyBleHBhbmRvIF0gPSB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlOwotICAgICAgICByZXR1cm4g
Zm47Ci0gICAgfSwKLQotICAgIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciBjYWNoZSA9IHt9LAotICAgICAgICAgICAga2V5cyA9IFtdOwotCi0gICAgICAgIHJldHVybiBt
YXJrRnVuY3Rpb24oZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAvLyBPbmx5
IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKLSAgICAgICAgICAgIGlmICgga2V5cy5wdXNo
KCBrZXkgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGNh
Y2hlWyBrZXlzLnNoaWZ0KCkgXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUmV0
cmlldmUgd2l0aCAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgT2Jq
ZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKLSAgICAgICAgICAgIHJl
dHVybiAoY2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOwotICAgICAgICB9LCBjYWNoZSApOwot
ICAgIH0sCi0KLSAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLSAgICB0b2tlbkNhY2hl
ID0gY3JlYXRlQ2FjaGUoKSwKLSAgICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLQot
ICAgIC8vIFJlZ2V4Ci0KLSAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3dy53
My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKLSAgICB3aGl0ZXNwYWNlID0gIltc
XHgyMFxcdFxcclxcblxcZl0iLAotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3lu
dGF4LyNjaGFyYWN0ZXJzCi0gICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58Wy1cXHdd
fFteXFx4MDAtXFx4YTBdKSsiLAotCi0gICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVu
dGlmaWVyIGNoYXJhY3RlcnMKLSAgICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBD
U1MgaWRlbnRpZmllciAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJp
YnV0ZS1zZWxlY3RvcnMpCi0gICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCi0gICAgaWRlbnRpZmll
ciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAotCi0gICAgLy8gQWNj
ZXB0YWJsZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1
dGUtc2VsZWN0b3JzCi0gICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCi0gICAgYXR0cmli
dXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIp
IiArIHdoaXRlc3BhY2UgKwotICAgICAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNl
ICsgIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciAr
ICIpfCl8KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAotCi0gICAgLy8gUHJlZmVyIGFyZ3VtZW50
cyBub3QgaW4gcGFyZW5zL2JyYWNrZXRzLAotICAgIC8vICAgdGhlbiBhdHRyaWJ1dGUgc2VsZWN0
b3JzIGFuZCBub24tcHNldWRvcyAoZGVub3RlZCBieSA6KSwKLSAgICAvLyAgIHRoZW4gYW55dGhp
bmcgZWxzZQotICAgIC8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUg
bnVtYmVyIG9mIHNlbGVjdG9ycwotICAgIC8vICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNF
VURPIHByZUZpbHRlcgotICAgIHBzZXVkb3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAi
KSg/OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86
KD86IiArIGF0dHJpYnV0ZXMgKyAiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIiwKLQotICAgIC8v
IEZvciBtYXRjaEV4cHIuUE9TIGFuZCBtYXRjaEV4cHIubmVlZHNDb250ZXh0Ci0gICAgcG9zID0g
IjooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2Ug
KwotICAgICAgICAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVte
LV18JCkiLAotCi0gICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVz
cGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcg
dGhlIGxhdHRlcgotICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIr
fCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAot
Ci0gICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0
ZXNwYWNlICsgIioiICksCi0gICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hp
dGVzcGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiArIHdoaXRlc3BhY2UgKyAiKiIg
KSwKLSAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAotCi0gICAgLy8gRWFzaWx5
LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCi0gICAg
cnF1aWNrRXhwciA9IC9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLywKLQotICAg
IHJub3QgPSAvXjpub3QvLAotICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAot
ICAgIHJlbmRzV2l0aE5vdCA9IC86bm90XCgkLywKLQotICAgIHJoZWFkZXIgPSAvaFxkL2ksCi0g
ICAgcmlucHV0cyA9IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksCi0KLSAgICByYmFj
a3NsYXNoID0gL1xcKD8hXFwpL2csCi0KLSAgICBtYXRjaEV4cHIgPSB7Ci0gICAgICAgICJJRCI6
IG5ldyBSZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAgICAg
IkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICks
Ci0gICAgICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFj
dGVyRW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKLSAgICAgICAgIlRBRyI6IG5ldyBSZWdFeHAo
ICJeKCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3KiIgKSArICIpIiApLAot
ICAgICAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKLSAgICAgICAg
IlBTRVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKLSAgICAgICAgIlBPUyI6IG5l
dyBSZWdFeHAoIHBvcywgImkiICksCi0gICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihv
bmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKLSAgICAgICAg
ICAgICIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/Oihb
Ky1dfCkiICsgd2hpdGVzcGFjZSArCi0gICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNw
YWNlICsgIipcXCl8KSIsICJpIiApLAotICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBp
bXBsZW1lbnRpbmcgLmlzKCkKLSAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJe
IiArIHdoaXRlc3BhY2UgKyAiKls+K35dfCIgKyBwb3MsICJpIiApCi0gICAgfSwKLQotICAgIC8v
IFN1cHBvcnQKLQotICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgc29tZXRoaW5nIG9uIGFuIGVsZW1l
bnQKLSAgICBhc3NlcnQgPSBmdW5jdGlvbiggZm4gKSB7Ci0gICAgICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAg
cmV0dXJuIGZuKCBkaXYgKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgLy8gcmVsZWFzZSBt
ZW1vcnkgaW4gSUUKLSAgICAgICAgICAgIGRpdiA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkg
ZWxlbWVudHMKLSAgICBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5jdGlvbigg
ZGl2ICkgewotICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQo
IiIpICk7Ci0gICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVu
Z3RoOwotICAgIH0pLAotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0QXR0cmlidXRlIHJldHVybnMgbm9y
bWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKLSAgICBhc3NlcnRIcmVmTm90Tm9ybWFsaXplZCA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9
JyMnPjwvYT4iOwotICAgICAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5m
aXJzdENoaWxkLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmCi0gICAgICAgICAgICBk
aXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOwotICAgIH0pLAotCi0g
ICAgLy8gQ2hlY2sgaWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0
ZSBub2RlcwotICAgIGFzc2VydEF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
LSAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7Ci0gICAgICAgIHZh
ciB0eXBlID0gdHlwZW9mIGRpdi5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOwot
ICAgICAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4g
d2hlbiBub3QgcHJlc2VudAotICAgICAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5
cGUgIT09ICJzdHJpbmciOwotICAgIH0pLAotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAotICAgIGFzc2VydFVzYWJsZUNsYXNzTmFtZSA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vj
b25kIGNsYXNzbmFtZSAoaW4gOS42KQotICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xh
c3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7Ci0gICAgICAg
IGlmICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgiZSIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFNhZmFyaSAzLjIgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5k
IGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcwotICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9
ICJlIjsKLSAgICAgICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVu
Z3RoID09PSAyOwotICAgIH0pLAotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0
dXJucyBlbGVtZW50cyBieSBuYW1lCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeU5hbWUg
cHJpdmlsZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJldHVybnMgZWxlbWVudHMgYnkgSUQKLSAgICBh
c3NlcnRVc2FibGVOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgIC8vIElu
amVjdCBjb250ZW50Ci0gICAgICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOwotICAgICAgICBkaXYu
aW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiAr
IGV4cGFuZG8gKyAiJz48L2Rpdj4iOwotICAgICAgICBkb2NFbGVtLmluc2VydEJlZm9yZSggZGl2
LCBkb2NFbGVtLmZpcnN0Q2hpbGQgKTsKLQotICAgICAgICAvLyBUZXN0Ci0gICAgICAgIHZhciBw
YXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgJiYKLSAgICAgICAgICAgIC8vIGJ1Z2d5
IGJyb3dzZXJzIHdpbGwgcmV0dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgotICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGggPT09IDIgKwot
ICAgICAgICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gbW9yZSB0aGFuIHRoZSBj
b3JyZWN0IDAKLSAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRv
ICsgMCApLmxlbmd0aDsKLSAgICAgICAgYXNzZXJ0R2V0SWROb3ROYW1lID0gIWRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCBleHBhbmRvICk7Ci0KLSAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICBk
b2NFbGVtLnJlbW92ZUNoaWxkKCBkaXYgKTsKLQotICAgICAgICByZXR1cm4gcGFzczsKLSAgICB9
KTsKLQotLy8gSWYgc2xpY2UgaXMgbm90IGF2YWlsYWJsZSwgcHJvdmlkZSBhIGJhY2t1cAotdHJ5
IHsKLSAgICBzbGljZS5jYWxsKCBkb2NFbGVtLmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlwZTsK
LX0gY2F0Y2ggKCBlICkgewotICAgIHNsaWNlID0gZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgIHZh
ciBlbGVtLAotICAgICAgICAgICAgcmVzdWx0cyA9IFtdOwotICAgICAgICBmb3IgKCA7IChlbGVt
ID0gdGhpc1tpXSk7IGkrKyApIHsKLSAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH07Ci19Ci0KLWZ1bmN0aW9u
IFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0gICAgcmVzdWx0
cyA9IHJlc3VsdHMgfHwgW107Ci0gICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0g
ICAgdmFyIG1hdGNoLCBlbGVtLCB4bWwsIG0sCi0gICAgICAgIG5vZGVUeXBlID0gY29udGV4dC5u
b2RlVHlwZTsKLQotICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0
cmluZyIgKSB7Ci0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0KLQotICAgIGlmICggbm9k
ZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7Ci0gICAgICAgIHJldHVybiBbXTsKLSAg
ICB9Ci0KLSAgICB4bWwgPSBpc1hNTCggY29udGV4dCApOwotCi0gICAgaWYgKCAheG1sICYmICFz
ZWVkICkgewotICAgICAgICBpZiAoIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3Ig
KSkgKSB7Ci0gICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQotICAgICAgICAg
ICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBl
ID09PSA5ICkgewotICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggbSApOwotICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNh
dGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwotICAgICAgICAgICAgICAgICAgICAvLyBu
b2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0
IHJldHVybiBpdGVtcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFk
IG9mIElECi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgaXMgbm90IGEgZG9j
dW1lbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYg
KGVsZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5p
ZCA9PT0gbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBT
aXp6bGUoIlRBRyIpCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKLSAgICAg
ICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0KLSAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCi0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBhc3NlcnRVc2FibGVDbGFz
c05hbWUgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgewotICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCBtICksIDApICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGwgb3RoZXJzCi0gICAg
cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwg
cmVzdWx0cywgc2VlZCwgeG1sICk7Ci19Ci0KLVNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4
cHIsIGVsZW1lbnRzICkgewotICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVs
ZW1lbnRzICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0s
IGV4cHIgKSB7Ci0gICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0g
KS5sZW5ndGggPiAwOwotfTsKLQotLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1
ZG9zIGZvciBpbnB1dCB0eXBlcwotZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIg
JiYgZWxlbS50eXBlID09PSB0eXBlOwotICAgIH07Ci19Ci0KLS8vIFJldHVybnMgYSBmdW5jdGlv
biB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucwotZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNl
dWRvKCB0eXBlICkgewotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgdmFy
IG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIHJldHVybiAobmFt
ZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBl
OwotICAgIH07Ci19Ci0KLS8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBm
b3IgcG9zaXRpb25hbHMKLWZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewot
ICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgewotICAgICAgICBh
cmd1bWVudCA9ICthcmd1bWVudDsKLSAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlv
biggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICAgICAgICAgIHZhciBqLAotICAgICAgICAgICAgICAg
IG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCi0gICAgICAg
ICAgICAgICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgIC8vIE1hdGNo
IGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcwotICAgICAgICAgICAgd2hp
bGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhl
c1tpXSkgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9
IHNlZWRbal0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0KLS8qKgotICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0
aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKLSAqIEBwYXJhbSB7QXJyYXl8
RWxlbWVudH0gZWxlbQotICovCi1nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICB2YXIgbm9kZSwKLSAgICAgICAgcmV0ID0gIiIsCi0gICAgICAgIGkgPSAw
LAotICAgICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLSAgICBpZiAoIG5vZGVUeXBl
ICkgewotICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5v
ZGVUeXBlID09PSAxMSApIHsKLSAgICAgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxl
bWVudHMKLSAgICAgICAgICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0
ZW5jeSBvZiBuZXcgbGluZXMgKHNlZSAjMTExNTMpCi0gICAgICAgICAgICBpZiAoIHR5cGVvZiBl
bGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS50ZXh0Q29udGVudDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVs
ZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2Rl
VHlwZSA9PT0gNCApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb24gbm9kZXMKLSAgICB9IGVsc2UgewotCi0gICAgICAgIC8vIElmIG5vIG5vZGVUeXBl
LCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5Ci0gICAgICAgIGZvciAoIDsgKG5vZGUg
PSBlbGVtW2ldKTsgaSsrICkgewotICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1l
bnQgbm9kZXMKLSAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX07Ci0KLWlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBj
YXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAotICAgIC8vIChzdWNoIGFzIGxvYWRpbmcg
aWZyYW1lcyBpbiBJRSAtICM0ODMzKQotICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYm
IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OwotICAgIHJldHVy
biBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6
IGZhbHNlOwotfTsKLQotLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCi1jb250YWlucyA9IFNp
enpsZS5jb250YWlucyA9IGRvY0VsZW0uY29udGFpbnMgPwotICAgIGZ1bmN0aW9uKCBhLCBiICkg
ewotICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1l
bnQgOiBhLAotICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7Ci0gICAgICAgIHJl
dHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgYWRvd24u
Y29udGFpbnMgJiYgYWRvd24uY29udGFpbnMoYnVwKSApOwotICAgIH0gOgotICAgIGRvY0VsZW0u
Y29tcGFyZURvY3VtZW50UG9zaXRpb24gPwotICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgICAg
ICByZXR1cm4gYiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApICYgMTYgKTsK
LSAgICB9IDoKLSAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICAgICAgd2hpbGUgKCAoYiA9IGIu
cGFyZW50Tm9kZSkgKSB7Ci0gICAgICAgICAgICBpZiAoIGIgPT09IGEgKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH07Ci0KLVNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUg
KSB7Ci0gICAgdmFyIHZhbCwKLSAgICAgICAgeG1sID0gaXNYTUwoIGVsZW0gKTsKLQotICAgIGlm
ICggIXhtbCApIHsKLSAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICB9Ci0g
ICAgaWYgKCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgewotICAgICAgICByZXR1
cm4gdmFsKCBlbGVtICk7Ci0gICAgfQotICAgIGlmICggeG1sIHx8IGFzc2VydEF0dHJpYnV0ZXMg
KSB7Ci0gICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwotICAgIH0KLSAg
ICB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICByZXR1cm4gdmFsID8K
LSAgICAgICAgdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gImJvb2xlYW4iID8KLSAgICAgICAgICAg
IGVsZW1bIG5hbWUgXSA/IG5hbWUgOiBudWxsIDoKLSAgICAgICAgICAgIHZhbC5zcGVjaWZpZWQg
PyB2YWwudmFsdWUgOiBudWxsIDoKLSAgICAgICAgbnVsbDsKLX07Ci0KLUV4cHIgPSBTaXp6bGUu
c2VsZWN0b3JzID0gewotCi0gICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCi0gICAg
Y2FjaGVMZW5ndGg6IDUwLAotCi0gICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCi0KLSAg
ICBtYXRjaDogbWF0Y2hFeHByLAotCi0gICAgLy8gSUU2LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJl
ZgotICAgIGF0dHJIYW5kbGU6IGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID8KLSAgICAgICAge30g
OgotICAgICAgICB7Ci0gICAgICAgICAgICAiaHJlZiI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7Ci0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKLQotICAgIGZpbmQ6IHsKLSAgICAgICAgIklEIjogYXNzZXJ0R2V0SWRO
b3ROYW1lID8KLSAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgewotICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVu
ZGVmaW5lZCAmJiAheG1sICkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQu
Z2V0RWxlbWVudEJ5SWQoIGlkICk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVu
dE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICBmdW5jdGlv
biggaWQsIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtID8KLSAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQg
PT09IGlkIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBt
LmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbbV0gOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICJUQUciOiBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA/Ci0gICAg
ICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
IHRhZyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gOgotICAgICAgICAgICAg
ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOwotCi0gICAgICAgICAgICAgICAg
Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cwotICAgICAgICAgICAgICAgIGlmICggdGFn
ID09PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKLQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggZWxlbSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICJOQU1FIjogYXNzZXJ0VXNhYmxl
TmFtZSAmJiBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgewotICAgICAgICAgICAgaWYgKCB0eXBl
b2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xh
c3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAg
ICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5k
ZWZpbmVkICYmICF4bWwgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgcmVsYXRpdmU6IHsKLSAgICAgICAgIj4iOiB7IGRpcjogInBhcmVudE5v
ZGUiLCBmaXJzdDogdHJ1ZSB9LAotICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwK
LSAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCi0g
ICAgICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KLSAgICB9LAotCi0gICAgcHJl
RmlsdGVyOiB7Ci0gICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgewotICAgICAgICAg
ICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOwotCi0gICAg
ICAgICAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3Rl
ZCBvciB1bnF1b3RlZAotICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8IG1hdGNo
WzVdIHx8ICIiICkucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKLQotICAgICAgICAgICAgaWYg
KCBtYXRjaFsyXSA9PT0gIn49IiApIHsKLSAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiAr
IG1hdGNoWzNdICsgIiAiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbWF0
Y2guc2xpY2UoIDAsIDQgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAiQ0hJTEQiOiBmdW5jdGlv
biggbWF0Y2ggKSB7Ci0gICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElM
RCJdCi0gICAgICAgICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCi0gICAgICAgICAgICAg
ICAgMiBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKLSAgICAgICAg
ICAgICAgICAzIHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQotICAg
ICAgICAgICAgICAgIDQgc2lnbiBvZiB4bi1jb21wb25lbnQKLSAgICAgICAgICAgICAgICA1IHgg
b2YgeG4tY29tcG9uZW50Ci0gICAgICAgICAgICAgICAgNiBzaWduIG9mIHktY29tcG9uZW50Ci0g
ICAgICAgICAgICAgICAgNyB5IG9mIHktY29tcG9uZW50Ci0gICAgICAgICAgICAqLwotICAgICAg
ICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgICAgICBp
ZiAoIG1hdGNoWzFdID09PSAibnRoIiApIHsKLSAgICAgICAgICAgICAgICAvLyBudGgtY2hpbGQg
cmVxdWlyZXMgYXJndW1lbnQKLSAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZv
ciBFeHByLmZpbHRlci5DSElMRAotICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFs
c2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKLSAgICAgICAgICAgICAgICBtYXRjaFsz
XSA9ICsoIG1hdGNoWzNdID8gbWF0Y2hbNF0gKyAobWF0Y2hbNV0gfHwgMSkgOiAyICogKCBtYXRj
aFsyXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzJdID09PSAib2RkIiApICk7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hbNF0gPSArKCAoIG1hdGNoWzZdICsgbWF0Y2hbN10gKSB8fCBtYXRjaFsyXSA9PT0g
Im9kZCIgKTsKLQotICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRz
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKLSAgICAgICAgICAgICAgICBT
aXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaDsKLSAgICAgICAgfSwKLQotICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1h
dGNoICkgewotICAgICAgICAgICAgdmFyIHVucXVvdGVkLCBleGNlc3M7Ci0gICAgICAgICAgICBp
ZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIG1hdGNo
WzNdICkgewotICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbM107Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCAodW5xdW90ZWQgPSBtYXRjaFs0XSkgKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gT25seSBjaGVjayBhcmd1bWVudHMgdGhhdCBjb250YWluIGEgcHNldWRvCi0gICAgICAgICAg
ICAgICAgaWYgKCBycHNldWRvLnRlc3QodW5xdW90ZWQpICYmCi0gICAgICAgICAgICAgICAgICAg
IC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCi0gICAgICAgICAgICAg
ICAgICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCi0g
ICAgICAgICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVv
dGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAotICAgICAgICAgICAgICAg
ICAgICB1bnF1b3RlZCA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKLSAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0
aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQotICAgICAgICAgICAg
cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZmls
dGVyOiB7Ci0gICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/Ci0gICAgICAgICAgICBm
dW5jdGlvbiggaWQgKSB7Ci0gICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3Ns
YXNoLCAiIiApOwotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBpZDsK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICBmdW5jdGlv
biggaWQgKSB7Ci0gICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAi
IiApOwotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBz
dHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZDsKLSAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1l
ICkgewotICAgICAgICAgICAgaWYgKCBub2RlTmFtZSA9PT0gIioiICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICku
dG9Mb3dlckNhc2UoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0g
ICAgICAgICJDTEFTUyI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7Ci0gICAgICAgICAgICB2YXIg
cGF0dGVybiA9IGNsYXNzQ2FjaGVbIGV4cGFuZG8gXVsgY2xhc3NOYW1lICsgIiAiIF07Ci0KLSAg
ICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8Ci0gICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBu
ZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3
aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKLSAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBjbGFz
c05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0
dGVybi50ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9
PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIiICk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkFUVFIiOiBmdW5jdGlv
biggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCBlbGVtLCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBTaXp6bGUu
YXR0ciggZWxlbSwgbmFtZSApOwotCi0gICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gbnVs
bCApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoICFvcGVyYXRvciApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICIiOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9y
ID09PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgPT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6
Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0
LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAiJD0iID8gY2hlY2sgJiYgcmVzdWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxl
bmd0aCApID09PSBjaGVjayA6Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0i
ID8gKCAiICIgKyByZXN1bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVz
dWx0LnN1YnN0ciggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6Ci0gICAg
ICAgICAgICAgICAgICAgIGZhbHNlOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAg
ICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgewot
Ci0gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudGgiICkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGRp
ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmYgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbm9kZSA9
IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYrKzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBub2RlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBJbmNv
cnBvcmF0ZSB0aGUgb2Zmc2V0IChvciBjYXN0IHRvIE5hTiksIHRoZW4gY2hlY2sgYWdhaW5zdCBj
eWNsZSBzaXplCi0gICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYm
IGRpZmYgLyBmaXJzdCA+PSAwICk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAg
IHZhciBub2RlID0gZWxlbTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgotICAgICAgICAgICAgICAgICAgICBjYXNl
ICJmaXJzdCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5w
cmV2aW91c1NpYmxpbmcpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9k
ZS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmly
c3QiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxl
bTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwotICAgICAg
ICAgICAgICAgICAgICBjYXNlICJsYXN0IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgewotICAgICAg
ICAgICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCi0gICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCi0g
ICAgICAgICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0
b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycwotICAgICAgICAgICAg
Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcwotICAgICAg
ICAgICAgdmFyIGFyZ3MsCi0gICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVk
byBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAotICAgICAg
ICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1
ZG8gKTsKLQotICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8g
aW5kaWNhdGUgdGhhdAotICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3Jl
YXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6emxlIGRv
ZXMKLSAgICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZm4oIGFyZ3VtZW50ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJ1
dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcwotICAgICAgICAgICAgaWYgKCBm
bi5sZW5ndGggPiAxICkgewotICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRv
LCAiIiwgYXJndW1lbnQgXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJz
Lmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KLSAgICAgICAgICAgICAg
ICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IG1hdGNoZWQubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVk
LCBtYXRjaGVkW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFsgaWR4IF0g
PSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkgOgotICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggZWxlbSwg
MCwgYXJncyApOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gZm47Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcHNldWRvczogewot
ICAgICAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAg
ICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCi0gICAgICAgICAg
ICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZwotICAgICAgICAgICAg
Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCi0gICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKLSAg
ICAgICAgICAgICAgICByZXN1bHRzID0gW10sCi0gICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNv
bXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKLQotICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/Ci0gICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9u
KGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0
Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IHNlZWQubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVu
bWF0Y2hlZCBieSBgbWF0Y2hlcmAKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxl
bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9KSA6Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRl
eHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOwotICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKLSAgICAgICAgICAgICAgICB9
OwotICAgICAgICB9KSwKLQotICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9KSwKLQotICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVu
Y3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVt
LmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKLSAgICAgICAgfSwKLQotICAg
ICAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgLy8gSW4gQ1NT
MywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1l
bnRzCi0gICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNl
bGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAotICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9
PT0gImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAm
JiAhIWVsZW0uc2VsZWN0ZWQpOwotICAgICAgICB9LAotCi0gICAgICAgICJzZWxlY3RlZCI6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkg
bWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAotICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZh
cmkgd29yayBwcm9wZXJseQotICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0g
ICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwotICAgICAg
ICB9LAotCi0gICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAg
IHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbwotICAgICAgICAgICAgLy8gOmVt
cHR5IGlzIG9ubHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2Rlcyhp
bmNsdWRpbmcgdGV4dCgzKSwgY2RhdGEoNCkpLAotICAgICAgICAgICAgLy8gICBub3QgY29tbWVu
dCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIG9yIG90aGVycwotICAgICAgICAgICAgLy8gVGhh
bmtzIHRvIERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0Y3V0Ci0gICAgICAgICAg
ICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEgY2hhcmFjdGVycyAoc3BlY2lmaWNh
bGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCi0gICAgICAgICAgICB2YXIgbm9kZVR5
cGU7Ci0gICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOwotICAgICAgICAgICAgd2hp
bGUgKCBlbGVtICkgewotICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8
fCAobm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlKSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbGVtID0gZWxlbS5uZXh0U2libGluZzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9LAotCi0gICAgICAgICJoZWFkZXIiOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0u
bm9kZU5hbWUgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgdmFyIHR5cGUsIGF0dHI7Ci0gICAgICAgICAgICAvLyBJRTYgYW5k
IDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFy
Y2gsIGV0YykKLSAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0
IHRoaXMgY2FzZQotICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSA9PT0gImlucHV0IiAmJgotICAgICAgICAgICAgICAgICh0eXBlID0gZWxlbS50eXBlKSA9PT0g
InRleHQiICYmCi0gICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0
eXBlIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB0eXBlICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgLy8gSW5wdXQgdHlwZXMKLSAgICAgICAgInJhZGlvIjogY3JlYXRlSW5w
dXRQc2V1ZG8oInJhZGlvIiksCi0gICAgICAgICJjaGVja2JveCI6IGNyZWF0ZUlucHV0UHNldWRv
KCJjaGVja2JveCIpLAotICAgICAgICAiZmlsZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJmaWxlIiks
Ci0gICAgICAgICJwYXNzd29yZCI6IGNyZWF0ZUlucHV0UHNldWRvKCJwYXNzd29yZCIpLAotICAg
ICAgICAiaW1hZ2UiOiBjcmVhdGVJbnB1dFBzZXVkbygiaW1hZ2UiKSwKLQotICAgICAgICAic3Vi
bWl0IjogY3JlYXRlQnV0dG9uUHNldWRvKCJzdWJtaXQiKSwKLSAgICAgICAgInJlc2V0IjogY3Jl
YXRlQnV0dG9uUHNldWRvKCJyZXNldCIpLAotCi0gICAgICAgICJidXR0b24iOiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09
PSAiYnV0dG9uIiB8fCBuYW1lID09PSAiYnV0dG9uIjsKLSAgICAgICAgfSwKLQotICAgICAgICAi
aW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAiZm9jdXMiOiBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7
Ci0gICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jLmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2Mu
aGFzRm9jdXMgfHwgZG9jLmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYg
fHwgfmVsZW0udGFiSW5kZXgpOwotICAgICAgICB9LAotCi0gICAgICAgICJhY3RpdmUiOiBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9j
dW1lbnQuYWN0aXZlRWxlbWVudDsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBQb3NpdGlvbmFs
IHR5cGVzCi0gICAgICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICByZXR1cm4gWyAwIF07Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJs
YXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5n
dGggKSB7Ci0gICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07Ci0gICAgICAgIH0pLAot
Ci0gICAgICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k
ZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKLSAgICAgICAgICAgIHJldHVybiBbIGFyZ3VtZW50
IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsKLSAgICAgICAgfSksCi0KLSAg
ICAgICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4
ZXMsIGxlbmd0aCApIHsKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSArPSAyICkgewotICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAgICB9KSwK
LQotICAgICAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ
bmRleGVzLCBsZW5ndGggKSB7Ci0gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsZW5n
dGg7IGkgKz0gMiApIHsKLSAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKLSAgICAgICAg
fSksCi0KLSAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0
Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgICAgICAgICAgZm9yICggdmFyIGkg
PSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsg
KSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgICAgIH0pLAotCi0gICAg
ICAgICJndCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoLCBhcmd1bWVudCApIHsKLSAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQg
PCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgKytpIDwgbGVuZ3RoOyApIHsKLSAg
ICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKLSAgICAgICAgfSkKLSAgICB9Ci19OwotCi1m
dW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIsIHJldCApIHsKLSAgICBpZiAoIGEgPT09IGIgKSB7
Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgdmFyIGN1ciA9IGEubmV4dFNpYmxp
bmc7Ci0KLSAgICB3aGlsZSAoIGN1ciApIHsKLSAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXIgPSBjdXIubmV4
dFNpYmxpbmc7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXNvcnRPcmRlciA9IGRvY0Vs
ZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gPwotICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAg
ICAgICBpZiAoIGEgPT09IGIgKSB7Ci0gICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKCAhYS5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Ci0g
ICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoKLSAgICAgICAgICAgIGEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0Ci0gICAgICAgICkgPyAtMSA6IDE7Ci0gICAgfSA6
Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRp
Y2FsLCB3ZSBjYW4gZXhpdCBlYXJseQotICAgICAgICBpZiAoIGEgPT09IGIgKSB7Ci0gICAgICAg
ICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWls
YWJsZSBvbiBib3RoIG5vZGVzCi0gICAgICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYg
Yi5zb3VyY2VJbmRleCApIHsKLSAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5z
b3VyY2VJbmRleDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBhbCwgYmwsCi0gICAgICAgICAg
ICBhcCA9IFtdLAotICAgICAgICAgICAgYnAgPSBbXSwKLSAgICAgICAgICAgIGF1cCA9IGEucGFy
ZW50Tm9kZSwKLSAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKLSAgICAgICAgICAgIGN1
ciA9IGF1cDsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVu
dGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCi0gICAgICAgIGlmICggYXVwID09PSBidXAg
KSB7Ci0gICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7Ci0KLSAgICAgICAg
Ly8gSWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0
ZWQKLSAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsK
LQotICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBp
biB0aGUgdHJlZSBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0
IG9mIHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgotICAgICAgICB3aGlsZSAoIGN1ciAp
IHsKLSAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOwotICAgICAgICAgICAgY3VyID0gY3Vy
LnBhcmVudE5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXIgPSBidXA7Ci0KLSAgICAgICAg
d2hpbGUgKCBjdXIgKSB7Ci0gICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKLSAgICAgICAg
ICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgYWwgPSBhcC5s
ZW5ndGg7Ci0gICAgICAgIGJsID0gYnAubGVuZ3RoOwotCi0gICAgICAgIC8vIFN0YXJ0IHdhbGtp
bmcgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5Ci0gICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCBh
cFtpXSAhPT0gYnBbaV0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjaygg
YXBbaV0sIGJwW2ldICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBlbmRlZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCi0gICAg
ICAgIHJldHVybiBpID09PSBhbCA/Ci0gICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ld
LCAtMSApIDoKLSAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKLSAgICB9
OwotCi0vLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQg
ZG9lc24ndAotLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChhcyBpbiBH
b29nbGUgQ2hyb21lKS4KLVswLCAwXS5zb3J0KCBzb3J0T3JkZXIgKTsKLWJhc2VIYXNEdXBsaWNh
dGUgPSAhaGFzRHVwbGljYXRlOwotCi0vLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBk
dXBsaWNhdGVzCi1TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgewotICAg
IHZhciBlbGVtLAotICAgICAgICBkdXBsaWNhdGVzID0gW10sCi0gICAgICAgIGkgPSAxLAotICAg
ICAgICBqID0gMDsKLQotICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7Ci0gICAg
cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKLQotICAgIGlmICggaGFzRHVwbGljYXRlICkgewot
ICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKLSAgICAgICAgICAg
IGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHsKLSAgICAgICAgICAgICAgICBqID0g
ZHVwbGljYXRlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
d2hpbGUgKCBqLS0gKSB7Ci0gICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sg
aiBdLCAxICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0czsKLX07Ci0K
LVNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCAi
U3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOwotfTsKLQot
ZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7Ci0gICAgdmFyIG1hdGNo
ZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCi0gICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRl
cnMsCi0gICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAi
ICIgXTsKLQotICAgIGlmICggY2FjaGVkICkgewotICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8g
MCA6IGNhY2hlZC5zbGljZSggMCApOwotICAgIH0KLQotICAgIHNvRmFyID0gc2VsZWN0b3I7Ci0g
ICAgZ3JvdXBzID0gW107Ci0gICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOwotCi0gICAg
d2hpbGUgKCBzb0ZhciApIHsKLQotICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCi0gICAg
ICAgIGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgewot
ICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25z
dW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAotICAgICAgICAgICAgICAgIHNvRmFyID0gc29G
YXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ29tYmluYXRvcnMKLSAgICAgICAgaWYg
KCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7Ci0gICAgICAgICAgICB0
b2tlbnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQoKSApICk7Ci0gICAg
ICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOwotCi0gICAgICAg
ICAgICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKLSAgICAgICAgICAg
IG1hdGNoZWQudHlwZSA9IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEZpbHRlcnMKLSAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRl
ciApIHsKLSAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYygg
c29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKLSAgICAgICAgICAgICAgICAobWF0
Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKLQotICAgICAgICAgICAgICAg
IHRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKLSAg
ICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOwotICAg
ICAgICAgICAgICAgIG1hdGNoZWQudHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgbWF0Y2hl
ZC5tYXRjaGVzID0gbWF0Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoICFtYXRjaGVkICkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAvLyBp
ZiB3ZSdyZSBqdXN0IHBhcnNpbmcKLSAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9y
IHJldHVybiB0b2tlbnMKLSAgICByZXR1cm4gcGFyc2VPbmx5ID8KLSAgICAgICAgc29GYXIubGVu
Z3RoIDoKLSAgICAgICAgc29GYXIgPwotICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3Rv
ciApIDoKLSAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKLSAgICAgICAgICAgIHRva2Vu
Q2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOwotfQotCi1mdW5jdGlvbiBhZGRD
b21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgewotICAgIHZhciBkaXIgPSBj
b21iaW5hdG9yLmRpciwKLSAgICAgICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgY29tYmlu
YXRvci5kaXIgPT09ICJwYXJlbnROb2RlIiwKLSAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7Ci0K
LSAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/Ci0gICAgICAgIC8vIENoZWNrIGFnYWluc3Qg
Y2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAotICAgICAgICBmdW5jdGlvbiggZWxl
bSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRp
ciBdKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gMSAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBl
bGVtLCBjb250ZXh0LCB4bWwgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gOgotCi0gICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNl
ZGluZyBlbGVtZW50cwotICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewot
ICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywg
c28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKLSAgICAgICAgICAgIGlmICgg
IXhtbCApIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAg
IGRpcmtleSA9IGRpcnJ1bnMgKyAiICIgKyBkb25lTmFtZSArICIgIiwKLSAgICAgICAgICAgICAg
ICAgICAgY2FjaGVka2V5ID0gZGlya2V5ICsgY2FjaGVkcnVuczsKLSAgICAgICAgICAgICAgICB3
aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggKGNhY2hlID0gZWxlbVsgZXhwYW5kbyBdKSA9PT0gY2FjaGVka2V5
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNpenNldDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmlu
ZyIgJiYgY2FjaGUuaW5kZXhPZihkaXJrZXkpID09PSAwICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5zaXpzZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgZXhwYW5kbyBdID0gY2FjaGVka2V5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0g
PSBlbGVtWyBkaXIgXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVt
ZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLX0KLQotZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgewotICAgIHJl
dHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KLSAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRl
eHQsIHhtbCApIHsKLSAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOwotICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0o
IGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0gOgotICAgICAgICBtYXRjaGVyc1swXTsKLX0KLQotZnVuY3Rpb24g
Y29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKLSAgICB2
YXIgZWxlbSwKLSAgICAgICAgbmV3VW5tYXRjaGVkID0gW10sCi0gICAgICAgIGkgPSAwLAotICAg
ICAgICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAotICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVs
bDsKLQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICBpZiAoIChlbGVtID0g
dW5tYXRjaGVkW2ldKSApIHsKLSAgICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVs
ZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNo
KCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBtYXBwZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKLX0KLQotZnVuY3Rp
b24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwg
cG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgewotICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9z
dEZpbHRlclsgZXhwYW5kbyBdICkgewotICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlcigg
cG9zdEZpbHRlciApOwotICAgIH0KLSAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJb
IGV4cGFuZG8gXSApIHsKLSAgICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5k
ZXIsIHBvc3RTZWxlY3RvciApOwotICAgIH0KLSAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgIHZhciB0ZW1wLCBp
LCBlbGVtLAotICAgICAgICAgICAgcHJlTWFwID0gW10sCi0gICAgICAgICAgICBwb3N0TWFwID0g
W10sCi0gICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAotCi0gICAgICAg
ICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAotICAgICAg
ICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwg
Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKLQotICAgICAg
ICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFw
IGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCi0gICAgICAgICAgICBtYXRjaGVySW4g
PSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KLSAgICAgICAgICAgICAgICBj
b25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6Ci0gICAg
ICAgICAgICAgICAgZWxlbXMsCi0KLSAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8K
LSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQg
c2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAotICAg
ICAgICAgICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3Rp
bmcgfHwgcG9zdEZpbHRlciApID8KLQotICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1l
ZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICAgICAgW10gOgot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3Rs
eQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzIDoKLSAgICAgICAgICAgICAgICBtYXRjaGVy
SW47Ci0KLSAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKLSAgICAgICAgaWYgKCBtYXRj
aGVyICkgewotICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250
ZXh0LCB4bWwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKLSAg
ICAgICAgaWYgKCBwb3N0RmlsdGVyICkgewotICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBt
YXRjaGVyT3V0LCBwb3N0TWFwICk7Ci0gICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwg
Y29udGV4dCwgeG1sICk7Ci0KLSAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVu
dHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KLSAgICAgICAgICAgIGkgPSB0ZW1w
Lmxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgIGlm
ICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsg
cG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggc2Vl
ZCApIHsKLSAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgewotICAgICAgICAgICAgICAgICAgICAvLyBH
ZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBp
bnRvIHBvc3RGaW5kZXIgY29udGV4dHMKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOwot
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IG1hdGNoZXJPdXRbaV0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
c3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVt
cCwgeG1sICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTW92ZSBt
YXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJv
bml6ZWQKLSAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBt
YXRjaGVyT3V0W2ldKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0Rmlu
ZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBl
bGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0
RmluZGVyIGlmIGRlZmluZWQKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1hdGNoZXJP
dXQgPSBjb25kZW5zZSgKLSAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8K
LSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRj
aGVyT3V0Lmxlbmd0aCApIDoKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAotICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKLSAgICAgICAgICAgICAg
ICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hl
ck91dCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9u
IG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7Ci0gICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0
Y2hlciwgaiwKLSAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKLSAgICAgICAgbGVhZGluZ1Jl
bGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKLSAgICAgICAgaW1wbGlj
aXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCi0gICAg
ICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKLQotICAgICAgICAvLyBUaGUgZm91bmRh
dGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0
b3AtbGV2ZWwgY29udGV4dChzKQotICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9y
KCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0Nv
bnRleHQ7Ci0gICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICAgICAgbWF0
Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwotICAg
ICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCi0gICAgICAgIG1hdGNoZXJzID0gWyBm
dW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgcmV0dXJuICggIWxl
YWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkg
KSB8fCAoCi0gICAgICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBl
ID8KLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwg
KSA6Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwg
eG1sICkgKTsKLSAgICAgICAgfSBdOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0g
ICAgICAgIGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSAp
IHsKLSAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hl
ciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRv
a2Vuc1tpXS5tYXRjaGVzICk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24g
c2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCi0gICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4
cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9w
ZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKLSAgICAgICAgICAgICAgICBqID0g
KytpOwotICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKLSAgICAgICAg
ICAgICAgICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCi0gICAgICAg
ICAgICAgICAgICAgIGkgPiAxICYmIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5qb2luKCIiKS5y
ZXBsYWNlKCBydHJpbSwgIiQxIiApLAotICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAotICAg
ICAgICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNl
KCBpLCBqICkgKSwKLSAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRv
a2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAotICAgICAgICAgICAgICAgICAg
ICBqIDwgbGVuICYmIHRva2Vucy5qb2luKCIiKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Ci19Ci0KLWZ1
bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRj
aGVycyApIHsKLSAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgICAg
ICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKLSAgICAgICAgc3VwZXJN
YXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29u
dGV4dCApIHsKLSAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAotICAgICAgICAgICAg
ICAgIHNldE1hdGNoZWQgPSBbXSwKLSAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAot
ICAgICAgICAgICAgICAgIGkgPSAiMCIsCi0gICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2Vl
ZCAmJiBbXSwKLSAgICAgICAgICAgICAgICBvdXRlcm1vc3QgPSBleHBhbmRDb250ZXh0ICE9IG51
bGwsCi0gICAgICAgICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCi0g
ICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50
cyBvciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAm
JiBFeHByLmZpbmRbIlRBRyJdKCAiKiIsIGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnRO
b2RlIHx8IGNvbnRleHQgKSwKLSAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgbWF0Y2hlcnMgc2hv
dWxkIHVzZSBub24taW50ZWdlciBkaXJydW5zCi0gICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1
ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOwotCi0g
ICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKLSAgICAgICAgICAgICAgICBvdXRlcm1vc3RD
b250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDsKLSAgICAgICAgICAgICAg
ICBjYWNoZWRydW5zID0gc3VwZXJNYXRjaGVyLmVsOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8g
cmVzdWx0cwotICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBp
KysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2pd
KTsgaisrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1
c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIG91dGVybW9zdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMg
PSBkaXJydW5zVW5pcXVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkcnVucyA9ICsr
c3VwZXJNYXRjaGVyLmVsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQg
ZmlsdGVycwotICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2
ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc2Vl
ZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cwot
ICAgICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7Ci0gICAgICAgICAgICBpZiAoIGJ5U2V0ICYm
IGkgIT09IG1hdGNoZWRDb3VudCApIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1h
dGNoZXIgPSBzZXRNYXRjaGVyc1tqXSk7IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQg
Zm9yIHNvcnRpbmcKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxs
KCByZXN1bHRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFs
IG1hdGNoZXMKLSAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRN
YXRjaGVkICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWRkIG1h
dGNoZXMgdG8gcmVzdWx0cwotICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNl
dE1hdGNoZWQgKTsKLQotICAgICAgICAgICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1
Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZwot
ICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVu
Z3RoID4gMCAmJgotICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNo
ZXJzLmxlbmd0aCApID4gMSApIHsKLQotICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVl
U29ydCggcmVzdWx0cyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1h
dGNoZXJzCi0gICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKLSAgICAgICAgICAgICAgICBk
aXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0
ID0gY29udGV4dEJhY2t1cDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHVu
bWF0Y2hlZDsKLSAgICAgICAgfTsKLQotICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7Ci0gICAgcmV0
dXJuIGJ5U2V0ID8KLSAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6Ci0gICAg
ICAgIHN1cGVyTWF0Y2hlcjsKLX0KLQotY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKLSAgICB2YXIg
aSwKLSAgICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwKLSAgICAgICAgZWxlbWVudE1hdGNoZXJzID0g
W10sCi0gICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3Ig
KyAiICIgXTsKLQotICAgIGlmICggIWNhY2hlZCApIHsKLSAgICAgICAgLy8gR2VuZXJhdGUgYSBm
dW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sg
ZWFjaCBlbGVtZW50Ci0gICAgICAgIGlmICggIWdyb3VwICkgewotICAgICAgICAgICAgZ3JvdXAg
PSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLSAgICAgICAgfQotICAgICAgICBpID0gZ3JvdXAubGVu
Z3RoOwotICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNo
ZXJGcm9tVG9rZW5zKCBncm91cFtpXSApOwotICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFu
ZG8gXSApIHsKLSAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2go
IGNhY2hlZCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2FjaGUg
dGhlIGNvbXBpbGVkIGZ1bmN0aW9uCi0gICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNl
bGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0
Y2hlcnMgKSApOwotICAgIH0KLSAgICByZXR1cm4gY2FjaGVkOwotfTsKLQotZnVuY3Rpb24gbXVs
dGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgewotICAgIHZhciBp
ID0gMCwKLSAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOwotICAgIGZvciAoIDsgaSA8IGxl
bjsgaSsrICkgewotICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0
cyApOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotZnVuY3Rpb24gc2VsZWN0KCBz
ZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgewotICAgIHZhciBpLCB0b2tl
bnMsIHRva2VuLCB0eXBlLCBmaW5kLAotICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3Rv
ciApLAotICAgICAgICBqID0gbWF0Y2gubGVuZ3RoOwotCi0gICAgaWYgKCAhc2VlZCApIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUg
Z3JvdXAKLSAgICAgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7Ci0KLSAgICAgICAgICAg
IC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVj
dG9yIGlzIGFuIElECi0gICAgICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNs
aWNlKCAwICk7Ci0gICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9
IHRva2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
Lm5vZGVUeXBlID09PSA5ICYmICF4bWwgJiYKLSAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxh
dGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHsKLQotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBF
eHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIg
KSwgY29udGV4dCwgeG1sIClbMF07Ci0gICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0
KCkubGVuZ3RoICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZldGNoIGEgc2Vl
ZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKLSAgICAgICAgICAgIGZvciAoIGkgPSBt
YXRjaEV4cHJbIlBPUyJdLnRlc3QoIHNlbGVjdG9yICkgPyAtMSA6IHRva2Vucy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKLQot
ICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKLSAgICAgICAg
ICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21i
aW5hdG9ycwotICAgICAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIg
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBl
ICkgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICB4bWwKLSAgICAgICAgICAgICAgICAgICAgKSkgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJl
dHVybiBlYXJseQotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b2tl
bnMuam9pbigiIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5j
YWxsKCBzZWVkLCAwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDb21waWxlIGFuZCBleGVjdXRl
IGEgZmlsdGVyaW5nIGZ1bmN0aW9uCi0gICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJl
dG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQotICAgIGNvbXBp
bGUoIHNlbGVjdG9yLCBtYXRjaCApKAotICAgICAgICBzZWVkLAotICAgICAgICBjb250ZXh0LAot
ICAgICAgICB4bWwsCi0gICAgICAgIHJlc3VsdHMsCi0gICAgICAgIHJzaWJsaW5nLnRlc3QoIHNl
bGVjdG9yICkKLSAgICApOwotICAgIHJldHVybiByZXN1bHRzOwotfQotCi1pZiAoIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7Ci0gICAgKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZGlz
Y29ubmVjdGVkTWF0Y2gsCi0gICAgICAgICAgICBvbGRTZWxlY3QgPSBzZWxlY3QsCi0gICAgICAg
ICAgICByZXNjYXBlID0gLyd8XFwvZywKLSAgICAgICAgICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAv
XD1bXHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywKLQotICAgICAg
ICAgICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSks
IG5vIG5lZWQgdG8gYWxzbyBhZGQgdG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tz
IGJ1Z2d5UVNBCi0gICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRv
byBtdWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0gICAgICAgICAgICBy
YnVnZ3lRU0EgPSBbICI6Zm9jdXMiIF0sCi0KLSAgICAgICAgICAgIC8vIG1hdGNoZXNTZWxlY3Rv
cig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCi0gICAg
ICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNoIGNvZGUgKHdv
dWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0gICAgICAgICAgICAvLyBqdXN0IHNraXAgbWF0
Y2hlc1NlbGVjdG9yIGZvciA6YWN0aXZlCi0gICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gWyAi
OmFjdGl2ZSIgXSwKLSAgICAgICAgICAgIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNTZWxlY3Rv
ciB8fAotICAgICAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAg
ICAgICAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAg
ICAgICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAgICAgICBkb2NFbGVt
Lm1zTWF0Y2hlc1NlbGVjdG9yOwotCi0gICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAotICAgICAg
ICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCi0gICAgICAgIGFz
c2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBl
bXB0eSBzdHJpbmcgb24gcHVycG9zZQotICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElF
J3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWN0bHkKLSAgICAgICAgICAgIC8vIHNldHRpbmcgYSBi
b29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLAotICAgICAgICAgICAgLy8gc2luY2UgaXRzIHByZXNl
bmNlIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5j
b20vdGlja2V0LzEyMzU5Ci0gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9w
dGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOwotCi0gICAgICAgICAgICAvLyBJ
RTggLSBTb21lIGJvb2xlYW4gYXR0cmlidXRlcyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5Ci0g
ICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0
aCApIHsKLSAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNl
ICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVk
fHZhbHVlKSIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Via2l0L09wZXJh
IC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKLSAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIw
MTEwOTI5LyNjaGVja2VkCi0gICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRv
IG5vdCBwdXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCi0gICAgICAgICAgICBpZiAoICFkaXYucXVl
cnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgcmJ1
Z2d5UVNBLnB1c2goIjpjaGVja2VkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotCi0gICAgICAgICAgICAvLyBPcGVyYSAx
MC0xMi9JRTkgLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCi0gICAgICAgICAgICAvLyBTaG91
bGQgbm90IHNlbGVjdCBhbnl0aGluZwotICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCB0
ZXN0PScnPjwvcD4iOwotICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Rl
c3RePScnXSIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsq
XiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxl
bWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKLSAgICAgICAgICAgIC8v
IElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkK
LSAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicvPiI7Ci0g
ICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgg
KSB7Ci0gICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxl
ZCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvLyByYnVnZ3lRU0Eg
YWx3YXlzIGNvbnRhaW5zIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKLSAg
ICAgICAgcmJ1Z2d5UVNBID0gLyogcmJ1Z2d5UVNBLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCBy
YnVnZ3lRU0Euam9pbigifCIpICk7Ci0KLSAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVj
dG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7Ci0gICAgICAgICAgICAvLyBPbmx5
IHVzZSBxdWVyeVNlbGVjdG9yQWxsIHdoZW4gbm90IGZpbHRlcmluZywKLSAgICAgICAgICAgIC8v
IHdoZW4gdGhpcyBpcyBub3QgeG1sLAotICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1
Z3MgYXBwbHkKLSAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAhcmJ1Z2d5UVNBLnRl
c3QoIHNlbGVjdG9yICkgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGdyb3VwcywgaSwKLSAgICAg
ICAgICAgICAgICAgICAgb2xkID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgbmlkID0gZXhw
YW5kbywKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0gY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxl
Y3RvcjsKLQotICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVu
dC1yb290ZWQgcXVlcmllcwotICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0
aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKLSAgICAgICAgICAgICAg
ICAvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBm
b3IgdGhlIHRlY2huaXF1ZSkKLSAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBv
biBvYmplY3QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUg
PT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsK
LSAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUs
ICJcXCQmIiApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10g
IjsKLQotICAgICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncm91cHNb
aV0gPSBuaWQgKyBncm91cHNbaV0uam9pbigiIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkg
JiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIG5l
d1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIG5ld1NlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2Fs
bCggbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1NlbGVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICApLCAwICkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKHFzYUVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBvbGRTZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0
LCByZXN1bHRzLCBzZWVkLCB4bWwgKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIG1hdGNo
ZXMgKSB7Ci0gICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0
b3IKLSAgICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQotICAg
ICAgICAgICAgICAgIGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYi
ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0
aW9uCi0gICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFs
c2UgaW5zdGVhZAotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMuY2FsbCggZGl2LCAiW3Rlc3QhPScnXTpzaXp6bGUiICk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOwotICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKCBlICkge30KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAvLyByYnVn
Z3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlIGFuZCA6Zm9jdXMsIHNvIG5vIG5lZWQg
Zm9yIGEgbGVuZ3RoIGNoZWNrCi0gICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gLyogcmJ1Z2d5
TWF0Y2hlcy5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8Iikg
KTsKLQotICAgICAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVt
LCBleHByICkgewotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBz
ZWxlY3RvcnMgYXJlIHF1b3RlZAotICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2Uo
IHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7Ci0KLSAgICAgICAgICAgICAgICAvLyByYnVn
Z3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlLCBzbyBubyBuZWVkIGZvciBhbiBleGlz
dGVuY2UgY2hlY2sKLSAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVn
Z3lNYXRjaGVzLnRlc3QoIGV4cHIgKSAmJiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQg
PSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBu
b2RlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwgZGlzY29ubmVjdGVkTWF0
Y2ggfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29u
bmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09
IDExICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBu
dWxsLCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7Ci0gICAgICAgICAgICB9OwotICAgICAg
ICB9Ci0gICAgfSkoKTsKLX0KLQotLy8gRGVwcmVjYXRlZAotRXhwci5wc2V1ZG9zWyJudGgiXSA9
IEV4cHIucHNldWRvc1siZXEiXTsKLQotLy8gQmFjay1jb21wYXQKLWZ1bmN0aW9uIHNldEZpbHRl
cnMoKSB7fQotRXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVk
b3M7Ci1FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOwotCi0vLyBPdmVycmlkZSBz
aXp6bGUgYXR0cmlidXRlIHJldHJpZXZhbAotU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKLWpR
dWVyeS5maW5kID0gU2l6emxlOwotalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwotalF1
ZXJ5LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7Ci1qUXVlcnkudW5pcXVlID0gU2l6
emxlLnVuaXF1ZVNvcnQ7Ci1qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OwotalF1ZXJ5Lmlz
WE1MRG9jID0gU2l6emxlLmlzWE1MOwotalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5z
OwotCi0KLX0pKCB3aW5kb3cgKTsKLXZhciBydW50aWwgPSAvVW50aWwkLywKLSAgICBycGFyZW50
c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKLSAgICBpc1NpbXBsZSA9
IC9eLlteOiNcW1wuLF0qJC8sCi0gICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNo
Lm5lZWRzQ29udGV4dCwKLSAgICAvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVu
aXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAotICAgIGd1YXJhbnRlZWRV
bmlxdWUgPSB7Ci0gICAgICAgIGNoaWxkcmVuOiB0cnVlLAotICAgICAgICBjb250ZW50czogdHJ1
ZSwKLSAgICAgICAgbmV4dDogdHJ1ZSwKLSAgICAgICAgcHJldjogdHJ1ZQotICAgIH07Ci0KLWpR
dWVyeS5mbi5leHRlbmQoewotICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAg
ICAgdmFyIGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAotICAgICAgICAgICAgc2VsZiA9IHRoaXM7
Ci0KLSAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewotICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhp
cyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxlY3RvciAp
OwotCi0gICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
Ci0gICAgICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOwotICAgICAgICAgICAgalF1ZXJ5LmZp
bmQoIHNlbGVjdG9yLCB0aGlzW2ldLCByZXQgKTsKLQotICAgICAgICAgICAgaWYgKCBpID4gMCAp
IHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5p
cXVlCi0gICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4r
KyApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0sIDEpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgaGFzOiBmdW5jdGlv
biggdGFyZ2V0ICkgewotICAgICAgICB2YXIgaSwKLSAgICAgICAgICAgIHRhcmdldHMgPSBqUXVl
cnkoIHRhcmdldCwgdGhpcyApLAotICAgICAgICAgICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7Ci0K
LSAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZm9y
ICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5j
b250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
ICAgIH0sCi0KLSAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNl
bGVjdG9yKTsKLSAgICB9LAotCi0gICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVl
KSwgImZpbHRlciIsIHNlbGVjdG9yICk7Ci0gICAgfSwKLQotICAgIGlzOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7Ci0gICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKLSAgICAgICAgICAgIHR5
cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRo
ZSByZXR1cm5lZCBzZXQKLSAgICAgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6
bGFzdCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCi0gICAgICAg
ICAgICAgICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KLSAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+
PSAwIDoKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMg
KS5sZW5ndGggPiAwIDoKLSAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5s
ZW5ndGggPiAwICk7Ci0gICAgfSwKLQotICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMs
IGNvbnRleHQgKSB7Ci0gICAgICAgIHZhciBjdXIsCi0gICAgICAgICAgICBpID0gMCwKLSAgICAg
ICAgICAgIGwgPSB0aGlzLmxlbmd0aCwKLSAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAg
ICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0
b3JzICE9PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNv
bnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgotICAgICAgICAgICAgICAgIDA7Ci0KLSAgICAgICAg
Zm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKLQotICAg
ICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250
ZXh0ICYmIGN1ci5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBwb3Mg
PyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwg
c2VsZWN0b3JzKSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY3VyID0gY3VyLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0Owot
Ci0gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9y
cyApOwotICAgIH0sCi0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1l
bnQgd2l0aGluCi0gICAgLy8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCi0gICAgaW5kZXg6
IGZ1bmN0aW9uKCBlbGVtICkgewotCi0gICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5k
ZXggaW4gcGFyZW50Ci0gICAgICAgIGlmICggIWVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4g
KCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCkubGVuZ3Ro
IDogLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgotICAgICAg
ICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAotICAg
ICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCi0gICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZl
cyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKLSAgICAgICAgICAg
IGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKLSAgICB9LAotCi0gICAgYWRk
OiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgICAgIHZhciBzZXQgPSB0eXBl
b2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KLSAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVj
dG9yLCBjb250ZXh0ICkgOgotICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVj
dG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwKLSAg
ICAgICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7Ci0KLSAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNE
aXNjb25uZWN0ZWQoIGFsbFswXSApID8KLSAgICAgICAgICAgIGFsbCA6Ci0gICAgICAgICAgICBq
UXVlcnkudW5pcXVlKCBhbGwgKSApOwotICAgIH0sCi0KLSAgICBhZGRCYWNrOiBmdW5jdGlvbigg
c2VsZWN0b3IgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/
Ci0gICAgICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNl
bGVjdG9yKQotICAgICAgICApOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uYW5kU2VsZiA9IGpR
dWVyeS5mbi5hZGRCYWNrOwotCi0vLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlm
IGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCi0vLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBi
ZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgotZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5v
ZGUgKSB7Ci0gICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJl
bnROb2RlLm5vZGVUeXBlID09PSAxMTsKLX0KLQotZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIg
KSB7Ci0gICAgZG8gewotICAgICAgICBjdXIgPSBjdXJbIGRpciBdOwotICAgIH0gd2hpbGUgKCBj
dXIgJiYgY3VyLm5vZGVUeXBlICE9PSAxICk7Ci0KLSAgICByZXR1cm4gY3VyOwotfQotCi1qUXVl
cnkuZWFjaCh7Ci0gICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgdmFyIHBh
cmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKLSAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQu
bm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKLSAgICB9LAotICAgIHBhcmVudHM6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVu
dE5vZGUiICk7Ci0gICAgfSwKLSAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1
bnRpbCApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwg
dW50aWwgKTsKLSAgICB9LAotICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICBy
ZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotICAgIH0sCi0gICAgcHJldjog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlv
dXNTaWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7Ci0gICAgfSwK
LSAgICBwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5k
aXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Ci0gICAgfSwKLSAgICBuZXh0VW50aWw6IGZ1
bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVs
ZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7Ci0gICAgfSwKLSAgICBwcmV2VW50aWw6IGZ1bmN0
aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0s
ICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOwotICAgIH0sCi0gICAgc2libGluZ3M6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJl
bnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOwotICAgIH0sCi0gICAgY2hpbGRyZW46
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0u
Zmlyc3RDaGlsZCApOwotICAgIH0sCi0gICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KLSAgICAg
ICAgICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVu
dCA6Ci0gICAgICAgICAgICBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKLSAg
ICB9Ci19LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7Ci0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBm
dW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgewotICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1h
cCggdGhpcywgZm4sIHVudGlsICk7Ci0KLSAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUg
KSApIHsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAg
ICAgICAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5h
bWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OwotCi0gICAgICAgIGlmICggdGhpcy5s
ZW5ndGggPiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICBy
ZXQgPSByZXQucmV2ZXJzZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQsIG5hbWUsIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkuam9pbigiLCIp
ICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICBmaWx0ZXI6IGZ1bmN0aW9u
KCBleHByLCBlbGVtcywgbm90ICkgewotICAgICAgICBpZiAoIG5vdCApIHsKLSAgICAgICAgICAg
IGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBlbGVtcy5sZW5ndGggPT09IDEgPwotICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1Nl
bGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKLSAgICAgICAgICAg
IGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOwotICAgIH0sCi0KLSAgICBkaXI6IGZ1
bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgewotICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdLAot
ICAgICAgICAgICAgY3VyID0gZWxlbVsgZGlyIF07Ci0KLSAgICAgICAgd2hpbGUgKCBjdXIgJiYg
Y3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlw
ZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7Ci0gICAgICAgICAgICBp
ZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2go
IGN1ciApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1hdGNoZWQ7Ci0gICAgfSwKLQotICAgIHNpYmxpbmc6IGZ1
bmN0aW9uKCBuLCBlbGVtICkgewotICAgICAgICB2YXIgciA9IFtdOwotCi0gICAgICAgIGZvciAo
IDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUg
PT09IDEgJiYgbiAhPT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICByLnB1c2goIG4gKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByOwotICAgIH0KLX0pOwot
Ci0vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5k
IG5vdAotZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgewotCi0g
ICAgLy8gQ2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3gg
NAotICAgIC8vIFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNoZWNrCi0gICAgcXVhbGlmaWVyID0g
cXVhbGlmaWVyIHx8IDA7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIg
KSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxl
bSwgaSApIHsKLSAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVt
LCBpLCBlbGVtICk7Ci0gICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOwotICAgICAg
ICB9KTsKLQotICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKLSAgICAgICAg
cmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKLSAgICAg
ICAgICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOwotICAgICAgICB9
KTsKLQotICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgewot
ICAgICAgICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKLSAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwgZmlsdGVyZWQsICFrZWVwKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIo
IHF1YWxpZmllciwgZmlsdGVyZWQgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBq
UXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgICAgIHJldHVy
biAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7Ci0g
ICAgfSk7Ci19Ci1mdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgewotICAg
IHZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKLSAgICBzYWZlRnJhZyA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmICggc2FmZUZyYWcuY3JlYXRl
RWxlbWVudCApIHsKLSAgICAgICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKLSAgICAgICAgICAg
IHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCi0gICAgICAgICAgICAgICAgbGlzdC5wb3AoKQotICAg
ICAgICAgICAgKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc2FmZUZyYWc7Ci19Ci0K
LXZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0
YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnwiICsKLSAgICAgICAg
ImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3Vt
bWFyeXx0aW1lfHZpZGVvIiwKLSAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51
bGx8XGQrKSIvZywKLSAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCi0gICAgcnhodG1s
VGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFt
KSgoW1x3Ol0rKVtePl0qKVwvPi9naSwKLSAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAotICAg
IHJ0Ym9keSA9IC88dGJvZHkvaSwKLSAgICByaHRtbCA9IC88fCYjP1x3KzsvLAotICAgIHJub0lu
bmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCi0gICAgcm5vY2FjaGUgPSAvPCg/
OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAotICAgIHJub3NoaW1jYWNoZSA9
IG5ldyBSZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKLSAgICBy
Y2hlY2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC8sCi0gICAgLy8gY2hlY2tlZD0i
Y2hlY2tlZCIgb3IgY2hlY2tlZAotICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1c
cyouY2hlY2tlZC4pL2ksCi0gICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9p
LAotICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9
PlxzKiQvZywKLSAgICB3cmFwTWFwID0gewotICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3Qg
bXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAotICAgICAgICBsZWdlbmQ6IFsg
MSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCi0gICAgICAgIHRoZWFkOiBbIDEsICI8
dGFibGU+IiwgIjwvdGFibGU+IiBdLAotICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4i
LCAiPC90Ym9keT48L3RhYmxlPiIgXSwKLSAgICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+
PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCi0gICAgICAgIGNvbDogWyAyLCAiPHRh
YmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwK
LSAgICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAotICAgICAgICBfZGVmYXVs
dDogWyAwLCAiIiwgIiIgXQotICAgIH0sCi0gICAgc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZy
YWdtZW50KCBkb2N1bWVudCApLAotICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVu
ZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOwotCi13cmFwTWFwLm9wdGdy
b3VwID0gd3JhcE1hcC5vcHRpb247Ci13cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdy
YXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOwotd3JhcE1h
cC50aCA9IHdyYXBNYXAudGQ7Ci0KLS8vIElFNi04IGNhbid0IHNlcmlhbGl6ZSBsaW5rLCBzY3Jp
cHQsIHN0eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRhZ3MsCi0vLyB1bmxlc3Mgd3JhcHBl
ZCBpbiBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250IG9mIGl0Lgot
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKLSAgICB3cmFwTWFwLl9kZWZh
dWx0ID0gWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7
Ci0gICAgdGV4dDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmFj
Y2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
ID09PSB1bmRlZmluZWQgPwotICAgICAgICAgICAgICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgot
ICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBd
Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOwot
ICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOwotICAgIH0sCi0KLSAg
ICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggaHRtbCApICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihp
KSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlz
LCBpKSApOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHRoaXNb
MF0gKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFy
b3VuZAotICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJE
b2N1bWVudCApLmVxKDApLmNsb25lKHRydWUpOwotCi0gICAgICAgICAgICBpZiAoIHRoaXNbMF0u
cGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1sw
XSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICB3aGls
ZSAoIGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAgICAgICAgICB9KS5h
cHBlbmQoIHRoaXMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0KLSAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewotICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1s
LmNhbGwodGhpcywgaSkgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KCB0aGlzICksCi0gICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7
Ci0KLSAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgICAg
IGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOwotICAgICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICB9LAotCi0gICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7Ci0gICAgICAgIHZhciBp
c0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKLQotICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBB
bGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7Ci0gICAgICAgIH0p
OwotICAgIH0sCi0KLSAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5v
ZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pLmVuZCgpOwotICAgIH0sCi0KLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09
IDExICkgewotICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMu
bm9kZVR5cGUgPT09IDExICkgewotICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBl
bGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
fSwKLQotICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICggIWlzRGlzY29ubmVj
dGVkKCB0aGlzWzBdICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1
bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB0aGlzLnBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKLSAgICAgICAgICAg
IHZhciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHNldCwgdGhpcyApLCAiYmVmb3JlIiwgdGhp
cy5zZWxlY3RvciApOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGFmdGVyOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0s
IHRoaXMubmV4dFNpYmxpbmcgKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVy
eS5jbGVhbiggYXJndW1lbnRzICk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IGpRdWVyeS5tZXJnZSggdGhpcywgc2V0ICksICJhZnRlciIsIHRoaXMuc2VsZWN0b3IgKTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9u
bHktLWRvIG5vdCBkb2N1bWVudAotICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVw
RGF0YSApIHsKLSAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICBpID0gMDsKLQotICAgICAg
ICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgICAgICAgICAg
aWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVu
Z3RoICkgewotICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xl
YW5EYXRhKCBbIGVsZW0gXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICggZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgZW1w
dHk6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgIGkgPSAwOwot
Ci0gICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAg
ICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MK
LSAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAg
ICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMK
LSAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgewotICAgICAgICAgICAgICAg
IGVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIGNsb25lOiBmdW5j
dGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0gICAgICAgIGRhdGFB
bmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7
Ci0gICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/
IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKLQotICAgICAgICByZXR1cm4gdGhp
cy5tYXAoIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRo
aXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7Ci0gICAgICAgIH0pOwotICAg
IH0sCi0KLSAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgIHJldHVybiBqUXVl
cnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICB2YXIgZWxl
bSA9IHRoaXNbMF0gfHwge30sCi0gICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAg
ICAgbCA9IHRoaXMubGVuZ3RoOwotCi0gICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPwotICAg
ICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAi
IiApIDoKLSAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2Ug
aW5uZXJIVE1MCi0gICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYg
IXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCi0gICAgICAgICAgICAgICAgKCBqUXVlcnku
c3VwcG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAm
JgotICAgICAgICAgICAgICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwg
IXJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKLSAgICAgICAgICAgICAgICAh
d3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dl
ckNhc2UoKSBdICkgewotCi0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCBy
eGh0bWxUYWcsICI8JDE+PC8kMj4iICk7Ci0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV0gfHwge307Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
IioiICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZh
bHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB1
c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRo
b2QKLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5k
KCB2YWx1ZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1l
bnRzLmxlbmd0aCApOwotICAgIH0sCi0KLSAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVl
ICkgewotICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgewotICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhl
IERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKLSAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhl
bHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCi0gICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc2Vs
ZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggdHlwZW9mIHZh
bHVlICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFs
dWUgKS5kZXRhY2goKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNp
YmxpbmcsCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKLQot
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCBuZXh0ICkgewotICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVmb3Jl
KCB2YWx1ZSApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGpRdWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/Ci0g
ICAgICAgICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVl
KSA/IHZhbHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgotICAgICAgICAg
ICAgdGhpczsKLSAgICB9LAotCi0gICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKLSAgICB9LAotCi0g
ICAgZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7Ci0KLSAgICAg
ICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICBhcmdzID0gW10uY29uY2F0
LmFwcGx5KCBbXSwgYXJncyApOwotCi0gICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21l
bnQsIGlOb0Nsb25lLAotICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICB2YWx1ZSA9IGFy
Z3NbMF0sCi0gICAgICAgICAgICBzY3JpcHRzID0gW10sCi0gICAgICAgICAgICBsID0gdGhpcy5s
ZW5ndGg7Ci0KLSAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNv
bnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0Ci0gICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmNo
ZWNrQ2xvbmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tl
ZC50ZXN0KCB2YWx1ZSApICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxl
LCBjYWxsYmFjayApOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oaSkgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMp
OwotICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/
IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkICk7Ci0gICAgICAgICAgICAgICAgc2VsZi5kb21NYW5p
cCggYXJncywgdGFibGUsIGNhbGxiYWNrICk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICggdGhpc1swXSApIHsKLSAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnku
YnVpbGRGcmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOwotICAgICAgICAgICAgZnJhZ21l
bnQgPSByZXN1bHRzLmZyYWdtZW50OwotICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJz
dENoaWxkOwotCi0gICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09
PSAxICkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAgICAgICAgICAgICAgdGFibGUgPSB0
YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQg
b2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAotICAgICAgICAgICAgICAgIC8vIGJl
aW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCi0g
ICAgICAgICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3Qg
YWx3YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZCBpbiBwbGFjZS4KLSAgICAgICAgICAgICAg
ICBmb3IgKCBpTm9DbG9uZSA9IHJlc3VsdHMuY2FjaGVhYmxlIHx8IGwgLSAxOyBpIDwgbDsgaSsr
ICkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKAotICAgICAgICAgICAgICAg
ICAgICAgICAgdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5
IiApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9PT0gaU5vQ2xvbmUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyYWdtZW50IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZy
YWdtZW50LCB0cnVlLCB0cnVlICkKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lk
IGxlYWtpbmcgbWVtb3J5Ci0gICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKLQot
ICAgICAgICAgICAgaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICBqUXVl
cnkuZWFjaCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbS5zcmMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5hamF4ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXN5bmM6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9i
YWw6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dzIjogdHJ1
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIm5v
IGFqYXgiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVs
ZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVw
bGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gZmluZE9y
QXBwZW5kKCBlbGVtLCB0YWcgKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoIHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVh
dGVFbGVtZW50KCB0YWcgKSApOwotfQotCi1mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBk
ZXN0ICkgewotCi0gICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0
YSggc3JjICkgKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgdHlwZSwgaSwg
bCwKLSAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5fZGF0YSggc3JjICksCi0gICAgICAgIGN1ckRh
dGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKLSAgICAgICAgZXZlbnRzID0gb2xk
RGF0YS5ldmVudHM7Ci0KLSAgICBpZiAoIGV2ZW50cyApIHsKLSAgICAgICAgZGVsZXRlIGN1ckRh
dGEuaGFuZGxlOwotICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OwotCi0gICAgICAgIGZvciAo
IHR5cGUgaW4gZXZlbnRzICkgewotICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNb
IHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRh
IG9iamVjdCBhIGNvcHkgZnJvbSB0aGUgb3JpZ2luYWwKLSAgICBpZiAoIGN1ckRhdGEuZGF0YSAp
IHsKLSAgICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0
YSApOwotICAgIH0KLX0KLQotZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3Qg
KSB7Ci0gICAgdmFyIG5vZGVOYW1lOwotCi0gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55
dGhpbmcgZm9yIG5vbi1FbGVtZW50cwotICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVz
IHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAotICAgIC8vIGJ1dCBhbHNvIHJl
bW92ZXMgdGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50Ci0gICAgaWYg
KCBkZXN0LmNsZWFyQXR0cmlidXRlcyApIHsKLSAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMo
KTsKLSAgICB9Ci0KLSAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1l
cmdlcyBiYWNrIG9uIHRoZQotICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZl
bnRzCi0gICAgaWYgKCBkZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKLSAgICAgICAgZGVzdC5tZXJn
ZUF0dHJpYnV0ZXMoIHNyYyApOwotICAgIH0KLQotICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7Ci0g
ICAgICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxl
bWVudHMgdXNpbmcgY2xhc3NpZC4KLSAgICAgICAgLy8gSUUxMCB0aHJvd3MgTm9Nb2RpZmljYXRp
b25BbGxvd2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMxMjEzMi4KLSAgICAgICAgaWYgKCBk
ZXN0LnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICBkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRl
ckhUTUw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lk
YWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0Ci0gICAgICAgIC8vIGVsZW1lbnQg
aW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50Lgot
ICAgICAgICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBk
b2VzIG5vdCwKLSAgICAgICAgLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0
LmlubmVySFRNTC4gIzEwMzI0Ci0gICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9u
ZSAmJiAoc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSApIHsK
LSAgICAgICAgICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKLSAgICAgICAgfQot
Ci0gICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUu
dGVzdCggc3JjLnR5cGUgKSApIHsKLSAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0
aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAotICAgICAgICAvLyBvciByYWRp
byBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50Ci0g
ICAgICAgIC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1
ZSBpc24ndCBhbHNvIHNldAotCi0gICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNo
ZWNrZWQgPSBzcmMuY2hlY2tlZDsKLQotICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5k
IGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAotICAgICAgICAvLyBjaGVja2Jv
eC9yYWRpbyBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgotICAgICAg
ICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKLSAgICAgICAgICAgIGRlc3QudmFs
dWUgPSBzcmMudmFsdWU7Ci0gICAgICAgIH0KLQotICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVy
biB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCi0gICAgLy8gc3Rh
dGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKLSAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9w
dGlvbiIgKSB7Ci0gICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwot
Ci0gICAgLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJl
Y3QgdmFsdWUgd2hlbgotICAgIC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRz
Ci0gICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0
ZXh0YXJlYSIgKSB7Ci0gICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1
ZTsKLQotICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cwotICAg
IH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAic2NyaXB0IiAmJiBkZXN0LnRleHQgIT09IHNyYy50
ZXh0ICkgewotICAgICAgICBkZXN0LnRleHQgPSBzcmMudGV4dDsKLSAgICB9Ci0KLSAgICAvLyBF
dmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5k
bwotICAgIC8vIGdldHMgY29waWVkIHRvbwotICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVl
cnkuZXhwYW5kbyApOwotfQotCi1qUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdz
LCBjb250ZXh0LCBzY3JpcHRzICkgewotICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNo
ZWhpdCwKLSAgICAgICAgZmlyc3QgPSBhcmdzWyAwIF07Ci0KLSAgICAvLyBTZXQgY29udGV4dCBm
cm9tIHdoYXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24g
b3IgYSBub2RlCi0gICAgLy8gVXBkYXRlZCB0byBmaXggIzEyMjY2IHdoZXJlIGFjY2Vzc2luZyBj
b250ZXh0WzBdIGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBJRTkvMTAgJgotICAgIC8vIGFs
c28gZG91YmxlcyBhcyBmaXggZm9yICM4OTUwIHdoZXJlIHBsYWluIG9iamVjdHMgY2F1c2VkIGNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQgZXhjZXB0aW9uCi0gICAgY29udGV4dCA9IGNvbnRleHQgfHwg
ZG9jdW1lbnQ7Ci0gICAgY29udGV4dCA9ICFjb250ZXh0Lm5vZGVUeXBlICYmIGNvbnRleHRbMF0g
fHwgY29udGV4dDsKLSAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRl
eHQ7Ci0KLSAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdzIHRo
YXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVudAotICAgIC8vIENsb25pbmcg
b3B0aW9ucyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KLSAg
ICAvLyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVk
PiBlbGVtZW50cyBpbiBhIGZyYWdtZW50Ci0gICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNs
b25lICdjaGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKLSAg
ICAvLyBMYXN0bHksIElFNiw3LDggd2lsbCBub3QgY29ycmVjdGx5IHJldXNlIGNhY2hlZCBmcmFn
bWVudHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSB1bmtub3duIGVsZW1zICMxMDUwMQotICAgIGlm
ICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJz
dC5sZW5ndGggPCA1MTIgJiYgY29udGV4dCA9PT0gZG9jdW1lbnQgJiYKLSAgICAgICAgZmlyc3Qu
Y2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiYKLSAgICAgICAg
KGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYm
Ci0gICAgICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVz
dCggZmlyc3QgKSkgKSB7Ci0KLSAgICAgICAgLy8gTWFyayBjYWNoZWFibGUgYW5kIGxvb2sgZm9y
IGEgaGl0Ci0gICAgICAgIGNhY2hlYWJsZSA9IHRydWU7Ci0gICAgICAgIGZyYWdtZW50ID0galF1
ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXTsKLSAgICAgICAgY2FjaGVoaXQgPSBmcmFnbWVudCAhPT0g
dW5kZWZpbmVkOwotICAgIH0KLQotICAgIGlmICggIWZyYWdtZW50ICkgewotICAgICAgICBmcmFn
bWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICBqUXVlcnku
Y2xlYW4oIGFyZ3MsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICk7Ci0KLSAgICAgICAgLy8g
VXBkYXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKLSAgICAgICAgLy8gdW5sZXNz
IHRoaXMgaXMgYSBzZWNvbmQgcGFyc2luZyBvZiB0aGUgc2FtZSBjb250ZW50Ci0gICAgICAgIGlm
ICggY2FjaGVhYmxlICkgewotICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9
IGNhY2hlaGl0ICYmIGZyYWdtZW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
ZnJhZ21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9OwotfTsKLQotalF1ZXJ5
LmZyYWdtZW50cyA9IHt9OwotCi1qUXVlcnkuZWFjaCh7Ci0gICAgYXBwZW5kVG86ICJhcHBlbmQi
LAotICAgIHByZXBlbmRUbzogInByZXBlbmQiLAotICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIs
Ci0gICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCi0gICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRo
IgotfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewotICAgIGpRdWVyeS5mblsgbmFtZSBd
ID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICB2YXIgZWxlbXMsCi0gICAgICAgICAg
ICBpID0gMCwKLSAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAgICAgaW5zZXJ0ID0galF1
ZXJ5KCBzZWxlY3RvciApLAotICAgICAgICAgICAgbCA9IGluc2VydC5sZW5ndGgsCi0gICAgICAg
ICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7Ci0K
LSAgICAgICAgaWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkg
ewotICAgICAgICAgICAgaW5zZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoIDsgaSA8
IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25l
KHRydWUpIDogdGhpcyApLmdldCgpOwotICAgICAgICAgICAgICAgIGpRdWVyeSggaW5zZXJ0W2ld
IClbIG9yaWdpbmFsIF0oIGVsZW1zICk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNh
dCggZWxlbXMgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOwotICAgICAgICB9Ci0gICAgfTsK
LX0pOwotCi1mdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7Ci0gICAgaWYgKCB0eXBlb2YgZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgIHJldHVybiBl
bGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKLQotICAgIH0gZWxzZSBpZiAoIHR5cGVv
ZiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICByZXR1
cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybiBbXTsKLSAgICB9Ci19Ci0KLS8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZh
dWx0Q2hlY2tlZCBwcm9wZXJ0eQotZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7
Ci0gICAgaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKLSAgICAgICAg
ZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKLSAgICB9Ci19Ci0KLWpRdWVyeS5l
eHRlbmQoewotICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERh
dGFBbmRFdmVudHMgKSB7Ci0gICAgICAgIHZhciBzcmNFbGVtZW50cywKLSAgICAgICAgICAgIGRl
c3RFbGVtZW50cywKLSAgICAgICAgICAgIGksCi0gICAgICAgICAgICBjbG9uZTsKLQotICAgICAg
ICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVsZW0p
IHx8ICFybm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkgewot
ICAgICAgICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOwotCi0gICAgICAgIC8v
IElFPD04IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1bmtub3duIGVsZW1lbnQg
bm9kZXMKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZyYWdtZW50RGl2LmlubmVySFRN
TCA9IGVsZW0ub3V0ZXJIVE1MOwotICAgICAgICAgICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQo
IGNsb25lID0gZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCAoIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9D
bG9uZUNoZWNrZWQpICYmCi0gICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7Ci0gICAg
ICAgICAgICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVz
aW5nIGNsb25lTm9kZS4KLSAgICAgICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhl
IGNsb25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cwotICAgICAgICAgICAgLy8gZnJvbSB0
aGUgb3JpZ2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKLSAg
ICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhh
bmtzIHRvIE1vb1Rvb2xzCi0gICAgICAgICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCi0K
LSAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKLQotICAgICAg
ICAgICAgLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVs
ZW1lbnRzQnlUYWdOYW1lIGluc3RlYWQKLSAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxs
KCBlbGVtICk7Ci0gICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7Ci0K
LSAgICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0
aGUgbGVuZ3RoIHByb3BlcnR5Ci0gICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91
IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCi0gICAgICAgICAgICAvLyBlbGVt
ZW50cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCi0gICAgICAgICAg
ICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKLSAgICAgICAgICAgICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1
ODcKLSAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRz
W2ldICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQot
ICAgICAgICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7Ci0gICAgICAgICAgICBjbG9uZUNvcHlFdmVu
dCggZWxlbSwgY2xvbmUgKTsKLQotICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyAp
IHsKLSAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOwotICAgICAg
ICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKLQotICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgewotICAgICAgICAgICAgICAg
ICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNy
Y0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKLQotICAgICAgICAvLyBSZXR1cm4gdGhl
IGNsb25lZCBzZXQKLSAgICAgICAgcmV0dXJuIGNsb25lOwotICAgIH0sCi0KLSAgICBjbGVhbjog
ZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKLSAgICAgICAg
dmFyIGksIGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxl
biwgaGFuZGxlU2NyaXB0LCBqc1RhZ3MsCi0gICAgICAgICAgICBzYWZlID0gY29udGV4dCA9PT0g
ZG9jdW1lbnQgJiYgc2FmZUZyYWdtZW50LAotICAgICAgICAgICAgcmV0ID0gW107Ci0KLSAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgY29udGV4dCBpcyBhIGRvY3VtZW50Ci0gICAgICAgIGlmICggIWNv
bnRleHQgfHwgdHlwZW9mIGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9PT0gInVuZGVm
aW5lZCIgKSB7Ci0gICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRl
eHQgcGVybWl0cwotICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVs
bDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7
Ci0gICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCAhZWxlbSApIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2Rlcwot
ICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewotICAgICAgICAgICAgICAgICAgICBl
bGVtID0gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhIHNhZmUgY29udGFpbmVyIGlu
IHdoaWNoIHRvIHJlbmRlciB0aGUgaHRtbAotICAgICAgICAgICAgICAgICAgICBzYWZlID0gc2Fm
ZSB8fCBjcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICAgICAg
c2FmZS5hcHBlbmRDaGlsZCggZGl2ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRml4ICJY
SFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBw
ZXJzCi0gICAgICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8
IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JhcCA9
IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7Ci0gICAgICAgICAgICAgICAgICAg
IGRlcHRoID0gd3JhcFswXTsKLSAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHdy
YXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRv
IHRoZSByaWdodCBkZXB0aAotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2lu
c2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9k
eSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRp
di5maXJzdENoaWxkLmNoaWxkTm9kZXMgOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0s
ICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KCB0Ym9keVsgaiBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5l
ckhUTUwgaXMgdXNlZAotICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5s
ZWFkaW5nV2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVU
ZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hp
bGQgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGVsZW0g
PSBkaXYuY2hpbGROb2RlczsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG91dCBvZiBm
cmFnbWVudCBjb250YWluZXIgKHdlIG5lZWQgYSBmcmVzaCBkaXYgZWFjaCB0aW1lKQotICAgICAg
ICAgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1l
bnRzIGZyb20gc2FmZUZyYWdtZW50Ci0gICAgICAgIGlmICggZGl2ICkgewotICAgICAgICAgICAg
ZWxlbSA9IGRpdiA9IHNhZmUgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzZXQg
ZGVmYXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKLSAgICAgICAgLy8g
YWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQotICAgICAg
ICBpZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgewotICAgICAgICAgICAgZm9y
ICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGVuZCBlbGVtZW50cyB0
byBhIHByb3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50Ci0gICAgICAgIGlmICggZnJhZ21lbnQgKSB7
Ci0gICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0IGVsZW1lbnQK
LSAgICAgICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGNvbnNpZGVyIGl0IGV4ZWN1dGFibGUKLSAgICAgICAgICAg
ICAgICBpZiAoICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBp
biB0aGUgc2NyaXB0cyBhcnJheSAoaWYgcHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAotICAgICAg
ICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJ1dGh5IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJl
ZW4gaGFuZGxlZAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0cyA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50Tm9kZSA/IGVsZW0ucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ld
KSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZG9u
ZSBhZnRlciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAotICAgICAgICAgICAgICAgIGlm
ICggISggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICYmIGhhbmRsZVNjcmlwdCgg
ZWxlbSApICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudCBh
bmQgaGFuZGxlIGVtYmVkZGVkIHNjcmlwdHMKLSAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQu
YXBwZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYW5kbGVTY3JpcHQgYWx0ZXJzIHRoZSBET00sIHNvIHVzZSBqUXVlcnku
bWVyZ2UgdG8gZW5zdXJlIHNuYXBzaG90IGl0ZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAg
ICAganNUYWdzID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTcGxpY2UgdGhlIHNjcmlwdHMgaW50byByZXQgYWZ0ZXIgdGhlaXIgZm9y
bWVyIGFuY2VzdG9yIGFuZCBhZHZhbmNlIG91ciBpbmRleCBiZXlvbmQgdGhlbQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgg
anNUYWdzICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0ganNUYWdzLmxlbmd0aDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIGNsZWFuRGF0
YTogZnVuY3Rpb24oIGVsZW1zLCAvKiBpbnRlcm5hbCAqLyBhY2NlcHREYXRhICkgewotICAgICAg
ICB2YXIgZGF0YSwgaWQsIGVsZW0sIHR5cGUsCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAg
ICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0gICAgICAgICAgICBjYWNoZSA9IGpR
dWVyeS5jYWNoZSwKLSAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5k
ZWxldGVFeHBhbmRvLAotICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFs
OwotCi0gICAgICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewot
Ci0gICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0g
KSApIHsKLQotICAgICAgICAgICAgICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKLSAgICAg
ICAgICAgICAgICBkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBl
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQg
dG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlm
IGl0IHdhcyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaWQgXSApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9k
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3Zl
QXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIGludGVybmFsS2V5IF0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVsZXRlZElkcy5wdXNoKCBpZCApOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfSk7Ci0vLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkg
ZGVwcmVjYXRlZCBBUEkKLShmdW5jdGlvbigpIHsKLQotdmFyIG1hdGNoZWQsIGJyb3dzZXI7Ci0K
LS8vIFVzZSBvZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCi0vLyBNb3JlIGRldGFp
bHM6IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgotLy8galF1ZXJ5LnVhTWF0
Y2ggbWFpbnRhaW5lZCBmb3IgYmFjay1jb21wYXQKLWpRdWVyeS51YU1hdGNoID0gZnVuY3Rpb24o
IHVhICkgewotICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTsKLQotICAgIHZhciBtYXRjaCA9IC8o
Y2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgLyh3ZWJraXQpWyBc
L10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAotICAgICAgICAvKG9wZXJhKSg/Oi4qdmVyc2lvbnwp
WyBcL10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAotICAgICAgICAvKG1zaWUpIChbXHcuXSspLy5l
eGVjKCB1YSApIHx8Ci0gICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgLyht
b3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8Ci0gICAgICAgIFtdOwot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgYnJvd3NlcjogbWF0Y2hbIDEgXSB8fCAiIiwKLSAgICAg
ICAgdmVyc2lvbjogbWF0Y2hbIDIgXSB8fCAiMCIKLSAgICB9OwotfTsKLQotbWF0Y2hlZCA9IGpR
dWVyeS51YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7Ci1icm93c2VyID0ge307Ci0KLWlm
ICggbWF0Y2hlZC5icm93c2VyICkgewotICAgIGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0g
dHJ1ZTsKLSAgICBicm93c2VyLnZlcnNpb24gPSBtYXRjaGVkLnZlcnNpb247Ci19Ci0KLS8vIENo
cm9tZSBpcyBXZWJraXQsIGJ1dCBXZWJraXQgaXMgYWxzbyBTYWZhcmkuCi1pZiAoIGJyb3dzZXIu
Y2hyb21lICkgewotICAgIGJyb3dzZXIud2Via2l0ID0gdHJ1ZTsKLX0gZWxzZSBpZiAoIGJyb3dz
ZXIud2Via2l0ICkgewotICAgIGJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKLX0KLQotalF1ZXJ5LmJy
b3dzZXIgPSBicm93c2VyOwotCi1qUXVlcnkuc3ViID0gZnVuY3Rpb24oKSB7Ci0gICAgZnVuY3Rp
b24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBq
UXVlcnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKLSAgICB9Ci0gICAgalF1ZXJ5
LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7Ci0gICAgalF1ZXJ5U3ViLnN1cGVyY2xh
c3MgPSB0aGlzOwotICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlz
KCk7Ci0gICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwotICAgIGpRdWVy
eVN1Yi5zdWIgPSB0aGlzLnN1YjsKLSAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGlu
aXQoIHNlbGVjdG9yLCBjb250ZXh0ICkgewotICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4
dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkg
ewotICAgICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBj
b250ZXh0LCByb290alF1ZXJ5U3ViICk7Ci0gICAgfTsKLSAgICBqUXVlcnlTdWIuZm4uaW5pdC5w
cm90b3R5cGUgPSBqUXVlcnlTdWIuZm47Ci0gICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlT
dWIoZG9jdW1lbnQpOwotICAgIHJldHVybiBqUXVlcnlTdWI7Ci19OwotCi19KSgpOwotdmFyIGN1
ckNTUywgaWZyYW1lLCBpZnJhbWVEb2MsCi0gICAgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ks
Ci0gICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKLSAgICBycG9zaXRpb24gPSAvXih0
b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sCi0gICAgLy8gc3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMg
bm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBv
ciAidGFibGUtY2FwdGlvbiIKLSAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKLSAgICBy
ZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCi0gICAgcm1hcmdpbiA9
IC9ebWFyZ2luLywKLSAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVt
ICsgIikoLiopJCIsICJpIiApLAotICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBj
b3JlX3BudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCi0gICAgcnJlbE51bSA9IG5ldyBS
ZWdFeHAoICJeKFstK10pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIgKSwKLSAgICBlbGVtZGlz
cGxheSA9IHsgQk9EWTogImJsb2NrIiB9LAotCi0gICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJh
YnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCi0gICAg
Y3NzTm9ybWFsVHJhbnNmb3JtID0gewotICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAotICAgICAg
ICBmb250V2VpZ2h0OiA0MDAKLSAgICB9LAotCi0gICAgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJp
Z2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdLAotICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0Iiwg
Ik8iLCAiTW96IiwgIm1zIiBdLAotCi0gICAgZXZlbnRzVG9nZ2xlID0galF1ZXJ5LmZuLnRvZ2ds
ZTsKLQotLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZl
bmRvciBwcmVmaXhlZCBwcm9wZXJ0eQotZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBu
YW1lICkgewotCi0gICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3Ig
cHJlZml4ZWQKLSAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Ci0gICAgICAgIHJldHVybiBuYW1l
OwotICAgIH0KLQotICAgIC8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKLSAgICB2
YXIgY2FwTmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEp
LAotICAgICAgICBvcmlnTmFtZSA9IG5hbWUsCi0gICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5n
dGg7Ci0KLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBp
IF0gKyBjYXBOYW1lOwotICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvcmlnTmFtZTsK
LX0KLQotZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgewotICAgIGVsZW0gPSBlbCB8fCBl
bGVtOwotICAgIHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUi
IHx8ICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwotfQotCi1m
dW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7Ci0gICAgdmFyIGVsZW0sIGRpc3Bs
YXksCi0gICAgICAgIHZhbHVlcyA9IFtdLAotICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KysgKSB7Ci0gICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICAgICAgaWYg
KCAhZWxlbS5zdHlsZSApIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIHZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7
Ci0gICAgICAgIGlmICggc2hvdyApIHsKLSAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUg
ZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKLSAgICAgICAgICAgIC8v
IGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKLSAgICAgICAgICAgIGlmICgg
IXZhbHVlc1sgaW5kZXggXSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiApIHsKLSAg
ICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdp
dGggZGlzcGxheTogbm9uZQotICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRl
dmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKLSAgICAgICAgICAgIC8vIGZvciBzdWNo
IGFuIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAm
JiBpc0hpZGRlbiggZWxlbSApICkgewotICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9
IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxl
bS5ub2RlTmFtZSkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOwotCi0gICAgICAgICAgICBp
ZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAhPT0gIm5vbmUiICkgewotICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2Yg
bW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAotICAgIC8vIHRvIGF2b2lkIHRo
ZSBjb25zdGFudCByZWZsb3cKLSAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgewotICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgICAgIGlm
ICggIWVsZW0uc3R5bGUgKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0u
c3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7Ci0gICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkg
PSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGVsZW1lbnRzOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBj
c3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nl
c3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUo
IGVsZW0sIG5hbWUsIHZhbHVlICkgOgotICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0s
IG5hbWUgKTsKLSAgICAgICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7
Ci0gICAgfSwKLSAgICBzaG93OiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHNob3dIaWRl
KCB0aGlzLCB0cnVlICk7Ci0gICAgfSwKLSAgICBoaWRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7Ci0gICAgfSwKLSAgICB0b2dnbGU6IGZ1bmN0aW9uKCBz
dGF0ZSwgZm4yICkgewotICAgICAgICB2YXIgYm9vbCA9IHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xl
YW4iOwotCi0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHN0YXRlICkgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIGZuMiApICkgewotICAgICAgICAgICAgcmV0dXJuIGV2ZW50c1RvZ2dsZS5h
cHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKCBib29sID8gc3RhdGUgOiBpc0hp
ZGRlbiggdGhpcyApICkgewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlk
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmV4
dGVuZCh7Ci0gICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5n
IHRoZSBkZWZhdWx0Ci0gICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0
eWxlIHByb3BlcnR5Ci0gICAgY3NzSG9va3M6IHsKLSAgICAgICAgb3BhY2l0eTogewotICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5
cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OwotCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2lu
ZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKLSAgICBjc3NOdW1iZXI6IHsKLSAgICAgICAgImZp
bGxPcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVlLAotICAgICAgICAi
bGluZUhlaWdodCI6IHRydWUsCi0gICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgIm9y
cGhhbnMiOiB0cnVlLAotICAgICAgICAid2lkb3dzIjogdHJ1ZSwKLSAgICAgICAgInpJbmRleCI6
IHRydWUsCi0gICAgICAgICJ6b29tIjogdHJ1ZQotICAgIH0sCi0KLSAgICAvLyBBZGQgaW4gcHJv
cGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCi0gICAgLy8gc2V0dGlu
ZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQotICAgIGNzc1Byb3BzOiB7Ci0gICAgICAgIC8vIG5vcm1h
bGl6ZSBmbG9hdCBjc3MgcHJvcGVydHkKLSAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQu
Y3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCi0gICAgfSwKLQotICAgIC8vIEdl
dCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCi0gICAgc3R5bGU6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7Ci0gICAgICAgIC8vIERvbid0IHNl
dCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgICAgICBpZiAoICFlbGVtIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHls
ZSApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotICAgICAgICB2YXIg
cmV0LCB0eXBlLCBob29rcywKLSAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggbmFtZSApLAotICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAgICAgIG5h
bWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9y
aWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgICAg
ICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCi0gICAgICAgIC8vIGZvbGxv
d2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KLSAgICAgICAgaG9va3MgPSBqUXVlcnkuY3Nz
SG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCi0gICAgICAgIGlmICggdmFsdWUgIT09
IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7Ci0KLSAgICAg
ICAgICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byBy
ZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQotICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5n
IiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcygg
ZWxlbSwgbmFtZSApICk7Ci0gICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3Ci0gICAg
ICAgICAgICAgICAgdHlwZSA9ICJudW1iZXIiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQuIFNlZTog
IzcxMTYKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVy
IiAmJiBpc05hTiggdmFsdWUgKSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAn
cHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQotICAgICAgICAg
ICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUg
XSApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSArPSAicHgiOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3Ro
ZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKLSAgICAgICAgICAgIGlmICggIWhv
b2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFs
dWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gV3JhcHBl
ZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVl
cyBhcmUgcHJvdmlkZWQKLSAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKLSAgICAg
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotICAgICAgICAgICAgfQotCi0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0
aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLSAgICAgICAgICAgIGlmICggaG9va3Mg
JiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJh
ICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBm
cm9tIHRoZSBzdHlsZSBvYmplY3QKLSAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIG51bWVy
aWMsIGV4dHJhICkgewotICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAotICAgICAgICAgICAg
b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7Ci0KLSAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCi0gICAgICAgIG5hbWUg
PSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdO
YW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOwotCi0gICAg
ICAgIC8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KLSAgICAgICAgLy8gZm9s
bG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgotICAgICAgICBob29rcyA9IGpRdWVyeS5j
c3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKLQotICAgICAg
ICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0
aGVyZQotICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgewotICAgICAgICAg
ICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4
aXN0cywgdXNlIHRoYXQKLSAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly9jb252ZXJ0ICJub3JtYWwiIHRvIGNvbXB1dGVkIHZhbHVlCi0gICAgICAgIGlmICggdmFsID09
PSAibm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKLSAgICAgICAgICAg
IHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIg
d2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYwotICAgICAgICBpZiAoIG51bWVyaWMg
fHwgZXh0cmEgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQo
IHZhbCApOwotICAgICAgICAgICAgcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJpYygg
bnVtICkgPyBudW0gfHwgMCA6IHZhbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsOwot
ICAgIH0sCi0KLSAgICAvLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NT
IHByb3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zCi0gICAgc3dhcDogZnVuY3Rp
b24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgewotICAgICAgICB2YXIgcmV0LCBuYW1lLAot
ICAgICAgICAgICAgb2xkID0ge307Ci0KLSAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1
ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCi0gICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9u
cyApIHsKLSAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotICAg
ICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApOwotCi0gICAgICAgIC8vIFJl
dmVydCB0aGUgb2xkIHZhbHVlcwotICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0g
ICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotfSk7Ci0KLS8vIE5PVEU6IFRvIGFueSBmdXR1
cmUgbWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKLS8vIGJlY2F1c2Ug
anNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCi1pZiAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlICkgewotICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewot
ICAgICAgICB2YXIgcmV0LCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAotICAgICAgICAgICAg
Y29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApLAotICAgICAg
ICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0K
LSAgICAgICAgICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3Mo
J2ZpbHRlcicpIGluIElFOSwgc2VlICMxMjUzNwotICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQu
Z2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07Ci0KLSAgICAgICAg
ICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1l
bnQsIGVsZW0gKSApIHsKLSAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0s
IG5hbWUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRo
ZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKLSAgICAgICAgICAgIC8vIENocm9tZSA8
IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBpbnN0ZWFkIG9mICJ1c2Vk
IHZhbHVlIiBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAgICAgICAgICAvLyBTYWZhcmkgNS4xLjcgKGF0
IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1
dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMKLSAgICAgICAgICAgIC8vIHRoaXMg
aXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cv
Y3Nzb20vI3Jlc29sdmVkLXZhbHVlcwotICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCgg
cmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBzdHlsZS53aWR0aDsKLSAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRo
OwotICAgICAgICAgICAgICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7Ci0KLSAgICAgICAg
ICAgICAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSBy
ZXQ7Ci0gICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7Ci0KLSAgICAgICAgICAg
ICAgICBzdHlsZS53aWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRo
ID0gbWluV2lkdGg7Ci0gICAgICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfTsK
LX0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0g
ICAgY3VyQ1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgIHZhciBsZWZ0LCBy
c0xlZnQsCi0gICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJl
bnRTdHlsZVsgbmFtZSBdLAotICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAg
ICAgIC8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVtcHR5IHN0cmluZyBoZXJlCi0gICAgICAgIC8v
IHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bwotICAgICAgICBpZiAoIHJldCA9PSBudWxsICYm
IHN0eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7Ci0gICAgICAgICAgICByZXQgPSBzdHlsZVsgbmFt
ZSBdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5IERl
YW4gRWR3YXJkcwotICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcv
MDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCi0KLSAgICAgICAgLy8gSWYgd2UncmUgbm90
IGRlYWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCi0gICAgICAgIC8vIGJ1dCBhIG51
bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBp
eGVscwotICAgICAgICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9z
ZSBhcmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCi0gICAgICAg
IC8vIGFuZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJlbnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1p
Z2h0IHRyaWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHByb2JsZW0KLSAgICAgICAgaWYgKCBybnVt
bm9ucHgudGVzdCggcmV0ICkgJiYgIXJwb3NpdGlvbi50ZXN0KCBuYW1lICkgKSB7Ci0KLSAgICAg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLSAgICAgICAgICAgIGxlZnQg
PSBzdHlsZS5sZWZ0OwotICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYg
ZWxlbS5ydW50aW1lU3R5bGUubGVmdDsKLQotICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcg
dmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAotICAgICAgICAgICAgaWYgKCByc0xl
ZnQgKSB7Ci0gICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3Vy
cmVudFN0eWxlLmxlZnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHlsZS5sZWZ0ID0g
bmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OwotICAgICAgICAgICAgcmV0ID0gc3R5
bGUucGl4ZWxMZWZ0ICsgInB4IjsKLQotICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2Vk
IHZhbHVlcwotICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICBpZiAo
IHJzTGVmdCApIHsKLSAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNM
ZWZ0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldCA9PT0g
IiIgPyAiYXV0byIgOiByZXQ7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1i
ZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKLSAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxp
dC5leGVjKCB2YWx1ZSApOwotICAgIHJldHVybiBtYXRjaGVzID8KLSAgICAgICAgICAgIE1hdGgu
bWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAy
IF0gfHwgInB4IiApIDoKLSAgICAgICAgICAgIHZhbHVlOwotfQotCi1mdW5jdGlvbiBhdWdtZW50
V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94ICkgewotICAgIHZh
ciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8K
LSAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZv
aWQgYXVnbWVudGF0aW9uCi0gICAgICAgIDQgOgotICAgICAgICAvLyBPdGhlcndpc2UgaW5pdGlh
bGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzCi0gICAgICAgIG5hbWUg
PT09ICJ3aWR0aCIgPyAxIDogMCwKLQotICAgICAgICB2YWwgPSAwOwotCi0gICAgZm9yICggOyBp
IDwgNDsgaSArPSAyICkgewotICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJn
aW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0Ci0gICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJn
aW4iICkgewotICAgICAgICAgICAgLy8gd2UgdXNlIGpRdWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJD
U1MgaGVyZQotICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgcmVsaWFibGVNYXJnaW5SaWdo
dCBDU1MgaG9vayEKLSAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSAr
IGNzc0V4cGFuZFsgaSBdLCB0cnVlICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGcm9tIHRo
aXMgcG9pbnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSAocmVsZXZh
bnQgaW4gYW5pbWF0aW9ucykKLSAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsKLSAgICAgICAg
ICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdh
bnQgY29udGVudAotICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgewotICAg
ICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiAr
IGNzc0V4cGFuZFsgaSBdICkgKSB8fCAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3Zl
IGJvcmRlcgotICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7Ci0gICAgICAg
ICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgImJvcmRlciIgKyBjc3NF
eHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50
LCBzbyBhZGQgcGFkZGluZwotICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUygg
ZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7Ci0KLSAgICAgICAgICAg
IC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFk
ZCBib3JkZXIKLSAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKLSAgICAg
ICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNz
c0V4cGFuZFsgaSBdICsgIldpZHRoIiApICkgfHwgMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB2YWw7Ci19Ci0KLWZ1bmN0aW9uIGdldFdpZHRoT3JIZWln
aHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgewotCi0gICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJv
cGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKLSAgICB2
YXIgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNl
dEhlaWdodCwKLSAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCi0gICAgICAgIGlzQm9y
ZGVyQm94ID0galF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJi
b3hTaXppbmciICkgPT09ICJib3JkZXItYm94IjsKLQotICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxl
bWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxs
L3VuZGVmaW5lZAotICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTI4NQotICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96
aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAotICAgIGlmICggdmFsIDw9IDAgfHwgdmFs
ID09IG51bGwgKSB7Ci0gICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29t
cHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQotICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUg
KTsKLSAgICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewotICAgICAgICAgICAg
dmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29tcHV0
ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KLSAgICAgICAgaWYg
KCBybnVtbm9ucHgudGVzdCh2YWwpICkgewotICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIHdlIG5lZWQgdGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEg
YnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCi0gICAgICAgIC8vIGZvciBn
ZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0u
c3R5bGUKLSAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICggalF1ZXJ5
LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0g
KTsKLQotICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRy
YQotICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwotICAgIH0KLQotICAgIC8v
IHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZh
bnQgc3R5bGVzCi0gICAgcmV0dXJuICggdmFsICsKLSAgICAgICAgYXVnbWVudFdpZHRoT3JIZWln
aHQoCi0gICAgICAgICAgICBlbGVtLAotICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgIGV4
dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAotICAgICAgICAg
ICAgdmFsdWVJc0JvcmRlckJveAotICAgICAgICApCi0gICAgKSArICJweCI7Ci19Ci0KLQotLy8g
VHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQK
LWZ1bmN0aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7Ci0gICAgaWYgKCBlbGVt
ZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKLSAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2Rl
TmFtZSBdOwotICAgIH0KLQotICAgIHZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSAr
ICI+IiApLmFwcGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCi0gICAgICAgIGRpc3BsYXkgPSBlbGVt
LmNzcygiZGlzcGxheSIpOwotICAgIGVsZW0ucmVtb3ZlKCk7Ci0KLSAgICAvLyBJZiB0aGUgc2lt
cGxlIHdheSBmYWlscywKLSAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5
IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCi0gICAgaWYgKCBkaXNwbGF5ID09PSAi
bm9uZSIgfHwgZGlzcGxheSA9PT0gIiIgKSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1j
cmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZQotICAgICAgICBpZnJhbWUgPSBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKAotICAgICAgICAgICAgaWZyYW1lIHx8IGpRdWVyeS5leHRlbmQoIGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7Ci0gICAgICAgICAgICAgICAgZnJhbWVCb3Jk
ZXI6IDAsCi0gICAgICAgICAgICAgICAgd2lkdGg6IDAsCi0gICAgICAgICAgICAgICAgaGVpZ2h0
OiAwCi0gICAgICAgICAgICB9KQotICAgICAgICApOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIGNh
Y2hlYWJsZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KLSAgICAg
ICAgLy8gSUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlmcmFtZURvYyB3
aXRob3V0IHJlLXdyaXRpbmcgdGhlIGZha2UgSFRNTAotICAgICAgICAvLyBkb2N1bWVudCB0byBp
dDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1l
bnQuCi0gICAgICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7
Ci0gICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFt
ZS5jb250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKLSAgICAgICAgICAgIGlmcmFtZURvYy53cml0
ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7Ci0gICAgICAgICAgICBpZnJhbWVEb2Mu
Y2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsZW0gPSBpZnJhbWVEb2MuYm9keS5hcHBl
bmRDaGlsZCggaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpICk7Ci0KLSAgICAgICAg
ZGlzcGxheSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7Ci0gICAgICAgIGRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOwotICAgIH0KLQotICAgIC8vIFN0b3JlIHRoZSBjb3Jy
ZWN0IGRlZmF1bHQgZGlzcGxheQotICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxh
eTsKLQotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1qUXVlcnkuZWFjaChbICJoZWlnaHQiLCAi
d2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sgbmFt
ZSBdID0gewotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7
Ci0gICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgIC8vIGNlcnRh
aW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cg
dGhlbQotICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQg
ZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCi0gICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJD
U1MoIGVsZW0sICJkaXNwbGF5IiApICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKLSAgICAgICAgICAgIHJldHVy
biBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KLSAgICAgICAgICAgICAg
ICBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICAgICAgICAgICAgICAgICAgZWxlbSwKLSAgICAg
ICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZXh0cmEsCi0gICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVt
LCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKLSAgICAgICAgICAgICAgICApIDogMAot
ICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgIH07Ci19KTsKLQotaWYgKCAhalF1ZXJ5LnN1
cHBvcnQub3BhY2l0eSApIHsKLSAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKLSAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAvLyBJRSB1
c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKLSAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0
KCAoY29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0
ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/Ci0gICAgICAgICAgICAgICAgKCAwLjAx
ICogcGFyc2VGbG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKLSAgICAgICAgICAgICAgICBjb21w
dXRlZCA/ICIxIiA6ICIiOwotICAgICAgICB9LAotCi0gICAgICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlICkgewotICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAgICAg
ICAgICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKLSAgICAgICAgICAg
ICAgICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5
PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAotICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1
cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsK
LQotICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMg
bm90IGhhdmUgbGF5b3V0Ci0gICAgICAgICAgICAvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6
b29tIGxldmVsCi0gICAgICAgICAgICBzdHlsZS56b29tID0gMTsKLQotICAgICAgICAgICAgLy8g
aWYgc2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0
ZW1wdCB0byByZW1vdmUgZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgotICAgICAgICAgICAgaWYgKCB2
YWx1ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkg
PT09ICIiICYmCi0gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgewotCi0g
ICAgICAgICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIg
c3RpbGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0gICAgICAgICAgICAgICAgLy8g
aWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdl
IHdhbnQgdG8gYXZvaWQgdGhpcwotICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgot
ICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKLQotICAg
ICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVk
IGluIGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCi0gICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50
U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCi0gICAgICAgICAgICBzdHlsZS5maWx0
ZXIgPSByYWxwaGEudGVzdCggZmlsdGVyICkgPwotICAgICAgICAgICAgICAgIGZpbHRlci5yZXBs
YWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6Ci0gICAgICAgICAgICAgICAgZmlsdGVyICsgIiAiICsg
b3BhY2l0eTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGNhbm5vdCBi
ZSBhZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0Ci0vLyBmb3Ig
aXQgaXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKLWpRdWVyeShmdW5jdGlvbigpIHsK
LSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewotICAgICAg
ICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEz
MzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmln
aHQKLSAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5n
IGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJDU1MoIGVsZW0sICJtYXJnaW5SaWdodCIgKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9OwotICAgIH0KLQotICAgIC8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAotICAgIC8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJu
cyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKLSAgICAv
LyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1v
ZHVsZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LnBpeGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkgewotICAgICAgICBqUXVlcnku
ZWFjaCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewotICAgICAgICAg
ICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBw
cm9wICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJj
ZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBybnVtbm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9w
IF0gKyAicHgiIDogcmV0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi19KTsKLQotaWYgKCBqUXVl
cnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotICAgIGpRdWVyeS5leHByLmZpbHRl
cnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiAoIGVsZW0ub2Zm
c2V0V2lkdGggPT09IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5z
dXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHls
ZS5kaXNwbGF5KSB8fCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKLSAg
ICB9OwotCi0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsK
LSAgICB9OwotfQotCi0vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFu
ZCBwcm9wZXJ0aWVzCi1qUXVlcnkuZWFjaCh7Ci0gICAgbWFyZ2luOiAiIiwKLSAgICBwYWRkaW5n
OiAiIiwKLSAgICBib3JkZXI6ICJXaWR0aCIKLX0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCAp
IHsKLSAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0gewotICAgICAgICBl
eHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHZhciBpLAotCi0gICAgICAg
ICAgICAgICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCi0gICAg
ICAgICAgICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3Bs
aXQoIiAiKSA6IFsgdmFsdWUgXSwKLSAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9OwotCi0g
ICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBl
eHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgIGpR
dWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7
Ci0gICAgfQotfSk7Ci12YXIgcjIwID0gLyUyMC9nLAotICAgIHJicmFja2V0ID0gL1xbXF0kLywK
LSAgICByQ1JMRiA9IC9ccj9cbi9nLAotICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRl
dGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJh
bmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKLSAgICByc2VsZWN0VGV4dGFy
ZWEgPSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAg
c2VyaWFsaXplOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhp
cy5zZXJpYWxpemVBcnJheSgpICk7Ci0gICAgfSwKLSAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkg
OiB0aGlzOwotICAgICAgICB9KQotICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCi0gICAgICAgICAgICAg
ICAgKCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUg
KSB8fAotICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKLSAg
ICAgICAgfSkKLSAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApewotICAgICAgICAgICAg
dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOwotCi0gICAgICAgICAgICByZXR1cm4gdmFs
ID09IG51bGwgPwotICAgICAgICAgICAgICAgIG51bGwgOgotICAgICAgICAgICAgICAgIGpRdWVy
eS5pc0FycmF5KCB2YWwgKSA/Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwg
ZnVuY3Rpb24oIHZhbCwgaSApewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFt
ZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwotICAg
ICAgICAgICAgICAgICAgICB9KSA6Ci0gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5u
YW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwotICAgICAgICB9KS5n
ZXQoKTsKLSAgICB9Ci19KTsKLQotLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50
cyBvciBhIHNldCBvZgotLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKLWpRdWVyeS5w
YXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKLSAgICB2YXIgcHJlZml4LAotICAg
ICAgICBzID0gW10sCi0gICAgICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAg
ICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4g
aXRzIHZhbHVlCi0gICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
ID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKLSAgICAgICAgICAg
IHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2Rl
VVJJQ29tcG9uZW50KCB2YWx1ZSApOwotICAgICAgICB9OwotCi0gICAgLy8gU2V0IHRyYWRpdGlv
bmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KLSAgICBpZiAoIHRyYWRp
dGlvbmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFq
YXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwotICAgIH0KLQot
ICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFy
cmF5IG9mIGZvcm0gZWxlbWVudHMuCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICgg
YS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKLSAgICAgICAgLy8g
U2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7Ci0gICAg
ICAgIH0pOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29k
ZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCi0gICAgICAgIC8vIGRpZCBp
dCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgotICAgICAgICBmb3IgKCBw
cmVmaXggaW4gYSApIHsKLSAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZp
eCBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1
cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCi0gICAgcmV0dXJuIHMuam9pbiggIiYiICku
cmVwbGFjZSggcjIwLCAiKyIgKTsKLX07Ci0KLWZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgs
IG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKLSAgICB2YXIgbmFtZTsKLQotICAgIGlmICggalF1
ZXJ5LmlzQXJyYXkoIG9iaiApICkgewotICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4K
LSAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7Ci0gICAgICAgICAg
ICBpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewotICAgICAg
ICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLSAgICAgICAg
ICAgICAgICBhZGQoIHByZWZpeCwgdiApOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0
KSwgZW5jb2RlIGl0cwotICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2
ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KLSAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQot
ICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5n
IHRvIGRvIHNvIG1heSBjYXVzZQotICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQ
b3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwotICAgICAgICAgICAgICAgIC8vIGRl
c2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwot
ICAgICAgICAgICAgICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hh
bGxvdy4KLSAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBl
b2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCAp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgIH0gZWxzZSBpZiAoICF0cmFkaXRp
b25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgewotICAgICAgICAvLyBT
ZXJpYWxpemUgb2JqZWN0IGl0ZW0uCi0gICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewotICAg
ICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFt
ZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KLSAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiAp
OwotICAgIH0KLX0KLXZhcgotICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCi0gICAgYWpheExvY1Bh
cnRzLAotICAgIGFqYXhMb2NhdGlvbiwKLQotICAgIHJoYXNoID0gLyMuKiQvLAotICAgIHJoZWFk
ZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxy
IGNoYXJhY3RlciBhdCBFT0wKLSAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90
b2NvbCBkZXRlY3Rpb24KLSAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwt
c3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCi0gICAgcm5vQ29udGVu
dCA9IC9eKD86R0VUfEhFQUQpJC8sCi0gICAgcnByb3RvY29sID0gL15cL1wvLywKLSAgICBycXVl
cnkgPSAvXD8vLAotICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+
KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKLSAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCi0gICAg
cnVybCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywK
LQotICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKLSAgICBfbG9hZCA9
IGpRdWVyeS5mbi5sb2FkLAotCi0gICAgLyogUHJlZmlsdGVycwotICAgICAqIDEpIFRoZXkgYXJl
IHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMg
Zm9yIGFuIGV4YW1wbGUpCi0gICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKLSAgICAgKiAgICAt
IEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0Ci0gICAgICogICAgLSBBRlRFUiBwYXJhbSBz
ZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVl
KQotICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAgICAgKiA0KSB0aGUgY2F0Y2hhbGwg
c3ltYm9sICIqIiBjYW4gYmUgdXNlZAotICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdp
dGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5l
ZWRlZAotICAgICAqLwotICAgIHByZWZpbHRlcnMgPSB7fSwKLQotICAgIC8qIFRyYW5zcG9ydHMg
YmluZGluZ3MKLSAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCi0gICAgICogMikgdGhlIGNh
dGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKLSAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBz
dGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVk
Ci0gICAgICovCi0gICAgdHJhbnNwb3J0cyA9IHt9LAotCi0gICAgLy8gQXZvaWQgY29tbWVudC1w
cm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRl
IGNvbXByZXNzaW9uCi0gICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKLQotLy8gIzgxMzgs
IElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLS8vIGEgZmllbGQgZnJv
bSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAotdHJ5IHsK
LSAgICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOwotfSBjYXRjaCggZSApIHsKLSAgICAv
LyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAotICAgIC8vIHNpbmNlIElF
IHdpbGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCi0gICAgYWpheExvY2F0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7Ci0gICAgYWpheExvY2F0aW9uLmhyZWYg
PSAiIjsKLSAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKLX0KLQotLy8gU2Vn
bWVudCBsb2NhdGlvbiBpbnRvIHBhcnRzCi1hamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhM
b2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107Ci0KLS8vIEJhc2UgImNvbnN0cnVjdG9yIiBm
b3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0Ci1mdW5jdGlv
biBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKLQotICAgIC8vIGRh
dGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCi0gICAgcmV0
dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7Ci0KLSAgICAgICAgaWYg
KCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAg
IGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247Ci0gICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Np
b24gPSAiKiI7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGF0YVR5cGUsIGxpc3QsIHBsYWNl
QmVmb3JlLAotICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93
ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICksCi0gICAgICAgICAgICBpID0gMCwKLSAgICAg
ICAgICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGg7Ci0KLSAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggZnVuYyApICkgewotICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUg
aW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgotICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3Ro
OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsKLSAg
ICAgICAgICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUK
LSAgICAgICAgICAgICAgICAvLyBhbnkgZXhpc3RpbmcgZWxlbWVudAotICAgICAgICAgICAgICAg
IHBsYWNlQmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIHBsYWNlQmVmb3JlICkgewotICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFU
eXBlLnN1YnN0ciggMSApIHx8ICIqIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8
fCBbXTsKLSAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFj
Y29yZGluZ2x5Ci0gICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIg
OiAicHVzaCIgXSggZnVuYyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX0K
LQotLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3Bv
cnRzCi1mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBv
cHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAotICAgICAgICBkYXRhVHlwZSAvKiBpbnRl
cm5hbCAqLywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgewotCi0gICAgZGF0YVR5cGUgPSBk
YXRhVHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOwotICAgIGluc3BlY3RlZCA9IGluc3Bl
Y3RlZCB8fCB7fTsKLQotICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7Ci0KLSAgICB2
YXIgc2VsZWN0aW9uLAotICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAotICAg
ICAgICBpID0gMCwKLSAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKLSAg
ICAgICAgZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOwotCi0gICAg
Zm9yICggOyBpIDwgbGVuZ3RoICYmICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysg
KSB7Ci0gICAgICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRp
b25zLCBqcVhIUiApOwotICAgICAgICAvLyBJZiB3ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVy
IGRhdGFUeXBlCi0gICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQg
bm90IGRvbmUgYWxyZWFkeQotICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJzdHJp
bmciICkgewotICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxl
Y3Rpb24gXSApIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hp
ZnQoIHNlbGVjdGlvbiApOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVm
aWx0ZXJzT3JUcmFuc3BvcnRzKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBv
cHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8vIElmIHdlJ3JlIG9ubHkgZXhl
Y3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCi0gICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFs
bCBkYXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5Ci0gICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8
ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKLSAgICAgICAgc2VsZWN0aW9u
ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOwot
ICAgIH0KLSAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJz
KQotICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIgaW4gdGhhdCBjYXNl
Ci0gICAgcmV0dXJuIHNlbGVjdGlvbjsKLX0KLQotLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWph
eCBvcHRpb25zCi0vLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBl
eHRlbmRlZCkKLS8vIEZpeGVzICM5ODg3Ci1mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNy
YyApIHsKLSAgICB2YXIga2V5LCBkZWVwLAotICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5h
amF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0gICAgZm9yICgga2V5IGluIHNyYyApIHsK
LSAgICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAo
IGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkg
KVsga2V5IF0gPSBzcmNbIGtleSBdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICggZGVlcCAp
IHsKLSAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7Ci0gICAgfQot
fQotCi1qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7
Ci0gICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKLSAgICAgICAg
cmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICB9Ci0KLSAgICAvLyBE
b24ndCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAotICAg
IGlmICggIXRoaXMubGVuZ3RoICkgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAg
ICB2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAotICAgICAgICBzZWxmID0gdGhpcywKLSAg
ICAgICAgb2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKLQotICAgIGlmICggb2ZmID49IDAgKSB7Ci0g
ICAgICAgIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKLSAgICAgICAg
dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBpdCdzIGEgZnVu
Y3Rpb24KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKLQotICAgICAg
ICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawotICAgICAgICBjYWxsYmFjayA9
IHBhcmFtczsKLSAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOwotCi0gICAgLy8gT3RoZXJ3aXNl
LCBidWlsZCBhIHBhcmFtIHN0cmluZwotICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2Yg
cGFyYW1zID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgdHlwZSA9ICJQT1NUIjsKLSAgICB9Ci0K
LSAgICAvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKLSAgICBqUXVlcnkuYWpheCh7Ci0g
ICAgICAgIHVybDogdXJsLAotCi0gICAgICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRl
ZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAotICAgICAgICB0eXBlOiB0eXBl
LAotICAgICAgICBkYXRhVHlwZTogImh0bWwiLAotICAgICAgICBkYXRhOiBwYXJhbXMsCi0gICAg
ICAgIGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKLSAgICAgICAgICAgIGlm
ICggY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVz
cG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkg
ewotCi0gICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFj
awotICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKLQotICAgICAgICAvLyBTZWUgaWYgYSBz
ZWxlY3RvciB3YXMgc3BlY2lmaWVkCi0gICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPwotCi0g
ICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cwotICAg
ICAgICAgICAgalF1ZXJ5KCI8ZGl2PiIpCi0KLSAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhl
IGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKLSAgICAg
ICAgICAgICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4g
SUUKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCByZXNwb25zZVRleHQucmVwbGFjZSggcnNjcmlw
dCwgIiIgKSApCi0KLSAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVt
ZW50cwotICAgICAgICAgICAgICAgIC5maW5kKCBzZWxlY3RvciApIDoKLQotICAgICAgICAgICAg
Ly8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKLSAgICAgICAgICAgIHJlc3Bv
bnNlVGV4dCApOwotCi0gICAgfSk7Ci0KLSAgICByZXR1cm4gdGhpczsKLX07Ci0KLS8vIEF0dGFj
aCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCi1q
UXVlcnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFq
YXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7Ci0gICAg
alF1ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApewotICAgICAgICByZXR1cm4gdGhpcy5vbigg
bywgZiApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBm
dW5jdGlvbiggaSwgbWV0aG9kICkgewotICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbigg
dXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLSAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRz
IGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggZGF0YSApICkgewotICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7Ci0g
ICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7Ci0gICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVk
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKLSAgICAgICAgICAg
IHR5cGU6IG1ldGhvZCwKLSAgICAgICAgICAgIHVybDogdXJsLAotICAgICAgICAgICAgZGF0YTog
ZGF0YSwKLSAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAotICAgICAgICAgICAgZGF0YVR5
cGU6IHR5cGUKLSAgICAgICAgfSk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLQot
ICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7Ci0gICAgICAgIHJldHVy
biBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7Ci0gICAg
fSwKLQotICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgewotICAg
ICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0g
ICAgfSwKLQotICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGlu
dG8gdGFyZ2V0Ci0gICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmll
bGRzLgotICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGlu
Z3MuCi0gICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKLSAgICAg
ICAgaWYgKCBzZXR0aW5ncyApIHsKLSAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mg
b2JqZWN0Ci0gICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGlu
Z3MgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0
dGluZ3MKLSAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OwotICAgICAgICAgICAgdGFyZ2V0
ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKLSAgICAgICAgfQotICAgICAgICBhamF4RXh0ZW5kKCB0
YXJnZXQsIHNldHRpbmdzICk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgfSwKLQotICAg
IGFqYXhTZXR0aW5nczogewotICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKLSAgICAgICAgaXNM
b2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKLSAgICAgICAg
Z2xvYmFsOiB0cnVlLAotICAgICAgICB0eXBlOiAiR0VUIiwKLSAgICAgICAgY29udGVudFR5cGU6
ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAotICAg
ICAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKLSAgICAgICAgYXN5bmM6IHRydWUsCi0gICAgICAgIC8q
Ci0gICAgICAgIHRpbWVvdXQ6IDAsCi0gICAgICAgIGRhdGE6IG51bGwsCi0gICAgICAgIGRhdGFU
eXBlOiBudWxsLAotICAgICAgICB1c2VybmFtZTogbnVsbCwKLSAgICAgICAgcGFzc3dvcmQ6IG51
bGwsCi0gICAgICAgIGNhY2hlOiBudWxsLAotICAgICAgICB0aHJvd3M6IGZhbHNlLAotICAgICAg
ICB0cmFkaXRpb25hbDogZmFsc2UsCi0gICAgICAgIGhlYWRlcnM6IHt9LAotICAgICAgICAqLwot
Ci0gICAgICAgIGFjY2VwdHM6IHsKLSAgICAgICAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwg
dGV4dC94bWwiLAotICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCi0gICAgICAgICAgICB0
ZXh0OiAidGV4dC9wbGFpbiIsCi0gICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwg
dGV4dC9qYXZhc2NyaXB0IiwKLSAgICAgICAgICAgICIqIjogYWxsVHlwZXMKLSAgICAgICAgfSwK
LQotICAgICAgICBjb250ZW50czogewotICAgICAgICAgICAgeG1sOiAveG1sLywKLSAgICAgICAg
ICAgIGh0bWw6IC9odG1sLywKLSAgICAgICAgICAgIGpzb246IC9qc29uLwotICAgICAgICB9LAot
Ci0gICAgICAgIHJlc3BvbnNlRmllbGRzOiB7Ci0gICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhN
TCIsCi0gICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgotICAgICAgICB9LAotCi0gICAg
ICAgIC8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCi0gICAgICAgIC8vIDEpIGtleSBmb3JtYXQg
aXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3
ZWVuKQotICAgICAgICAvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBm
b3Igc291cmNlX3R5cGUKLSAgICAgICAgY29udmVydGVyczogewotCi0gICAgICAgICAgICAvLyBD
b252ZXJ0IGFueXRoaW5nIHRvIHRleHQKLSAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cuU3Ry
aW5nLAotCi0gICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1h
dGlvbikKLSAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAotCi0gICAgICAgICAgICAvLyBF
dmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCi0gICAgICAgICAgICAidGV4dCBqc29u
IjogalF1ZXJ5LnBhcnNlSlNPTiwKLQotICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwK
LSAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAotICAgICAgICB9LAotCi0g
ICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6Ci0g
ICAgICAgIC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLSAg
ICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKLSAgICAg
ICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCi0gICAgICAgIGZsYXRPcHRpb25z
OiB7Ci0gICAgICAgICAgICBjb250ZXh0OiB0cnVlLAotICAgICAgICAgICAgdXJsOiB0cnVlCi0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCi0gICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0
ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCi0KLSAgICAvLyBNYWluIG1ldGhvZAotICAg
IGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7Ci0KLSAgICAgICAgLy8gSWYgdXJsIGlz
IGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLSAgICAgICAgaWYgKCB0eXBl
b2YgdXJsID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7Ci0gICAg
ICAgICAgICB1cmwgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3JjZSBv
cHRpb25zIHRvIGJlIGFuIG9iamVjdAotICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsK
LQotICAgICAgICB2YXIgLy8gaWZNb2RpZmllZCBrZXkKLSAgICAgICAgICAgIGlmTW9kaWZpZWRL
ZXksCi0gICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCi0gICAgICAgICAgICByZXNwb25z
ZUhlYWRlcnNTdHJpbmcsCi0gICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCi0gICAgICAgICAg
ICAvLyB0cmFuc3BvcnQKLSAgICAgICAgICAgIHRyYW5zcG9ydCwKLSAgICAgICAgICAgIC8vIHRp
bWVvdXQgaGFuZGxlCi0gICAgICAgICAgICB0aW1lb3V0VGltZXIsCi0gICAgICAgICAgICAvLyBD
cm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKLSAgICAgICAgICAgIHBhcnRzLAotICAgICAgICAg
ICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCi0gICAg
ICAgICAgICBmaXJlR2xvYmFscywKLSAgICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKLSAgICAg
ICAgICAgIGksCi0gICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0
Ci0gICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKLSAgICAg
ICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0Ci0gICAgICAgICAgICBjYWxsYmFja0NvbnRleHQg
PSBzLmNvbnRleHQgfHwgcywKLSAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVu
dHMKLSAgICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zCi0gICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhIERPTSBu
b2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KLSAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4
dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgotICAgICAgICAgICAgICAgICggY2FsbGJhY2tD
b250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8K
LSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVl
cnkuZXZlbnQsCi0gICAgICAgICAgICAvLyBEZWZlcnJlZHMKLSAgICAgICAgICAgIGRlZmVycmVk
ID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1
ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAotICAgICAgICAgICAgLy8gU3RhdHVzLWRl
cGVuZGVudCBjYWxsYmFja3MKLSAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUg
fHwge30sCi0gICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNl
KQotICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKLSAgICAgICAgICAgIHJlcXVlc3RI
ZWFkZXJzTmFtZXMgPSB7fSwKLSAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQotICAgICAg
ICAgICAgc3RhdGUgPSAwLAotICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCi0g
ICAgICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCi0gICAgICAgICAgICAvLyBGYWtlIHho
cgotICAgICAgICAgICAganFYSFIgPSB7Ci0KLSAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAw
LAotCi0gICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAg
ICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICggIXN0YXRlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxu
YW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFt
ZSBdIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFt
ZSBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIC8vIFJh
dyBzdHJpbmcKLSAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhl
YWRlcnNTdHJpbmcgOiBudWxsOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAg
ICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAg
Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBtYXRjaDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVh
ZGVyc1N0cmluZyApICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJD
YXNlKCkgXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBo
ZWFkZXIKLSAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzLm1pbWVUeXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0Ci0gICAgICAgICAgICAgICAgYWJvcnQ6IGZ1
bmN0aW9uKCBzdGF0dXNUZXh0ICkgewotICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
c3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3Bv
cnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1Rl
eHQgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkb25lKCAw
LCBzdGF0dXNUZXh0ICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdo
ZW4gZXZlcnl0aGluZyBpcyBkb25lCi0gICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNh
dXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKLSAgICAgICAgLy8gYXQgdGhl
IGVuZCBvZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVh
ZGFibGUpCi0gICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwg
cmVzcG9uc2VzLCBoZWFkZXJzICkgewotICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2Vz
cywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKLSAgICAgICAgICAgICAgICBzdGF0dXNUZXh0
ID0gbmF0aXZlU3RhdHVzVGV4dDsKLQotICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKLSAgICAg
ICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93Ci0gICAgICAg
ICAgICBzdGF0ZSA9IDI7Ci0KLSAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhp
c3RzCi0gICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKLSAgICAgICAgICAgICAgICBj
bGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgot
ICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwg
YmUgdXNlZCkKLSAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKLQotICAgICAgICAg
ICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycwotICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJz
U3RyaW5nID0gaGVhZGVycyB8fCAiIjsKLQotICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUK
LSAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7Ci0KLSAg
ICAgICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCi0gICAgICAgICAgICBpZiAoIHJlc3BvbnNl
cyApIHsKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMs
IGpxWEhSLCByZXNwb25zZXMgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYg
c3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKLSAgICAgICAgICAgIGlmICggc3RhdHVz
ID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNo
IGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgotICAgICAgICAgICAgICAgIGlmICggcy5p
Zk1vZGlmaWVkICkgewotCi0gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0
UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBtb2RpZmllZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZp
ZWRbIGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0
YWciKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIElmIG5vdCBtb2RpZmllZAotICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQg
KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGRhdGEKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAg
ICAgICAgICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwotICAgICAg
ICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOwotICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gaXNTdWNjZXNzLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGVy
cm9yID0gaXNTdWNjZXNzLmVycm9yOwotICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAh
ZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAotICAgICAgICAgICAg
ICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0
cwotICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKLSAgICAgICAgICAgICAgICBp
ZiAoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNl
dCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0Ci0gICAgICAgICAgICBqcVhIUi5zdGF0dXMg
PSBzdGF0dXM7Ci0gICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNU
ZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOwotCi0gICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9y
Ci0gICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKLSAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpx
WEhSIF0gKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVmZXJyZWQu
cmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBd
ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2Fs
bGJhY2tzCi0gICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7Ci0gICAg
ICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICBpZiAoIGZpcmVH
bG9iYWxzICkgewotICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAi
YWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENvbXBsZXRlCi0gICAgICAgICAgICBj
b21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1
c1RleHQgXSApOwotCi0gICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgICAgICAg
ICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhI
UiwgcyBdICk7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3Vu
dGVyCi0gICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBdHRh
Y2ggZGVmZXJyZWRzCi0gICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7Ci0gICAgICAg
IGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwotICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhS
LmZhaWw7Ci0gICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7Ci0K
LSAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICAgICAganFYSFIuc3Rh
dHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7Ci0gICAgICAgICAgICBpZiAoIG1hcCApIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdG1wOwotICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkg
ewotICAgICAgICAgICAgICAgICAgICBmb3IgKCB0bXAgaW4gbWFwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwgbWFwW3Rt
cF0gXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07Ci0gICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmFsd2F5cyggdG1wICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCi0g
ICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUg
d2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCi0gICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwg
cGFyYW1ldGVyIGlmIGF2YWlsYWJsZQotICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwg
KSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9j
UGFydHNbIDEgXSArICIvLyIgKTsKLQotICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0
Ci0gICAgICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICku
dG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAvLyBBIGNyb3Nz
LWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6
cG9ydCBtaXNtYXRjaAotICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKLSAg
ICAgICAgICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7Ci0gICAg
ICAgICAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCi0gICAgICAgICAgICAgICAgKCBw
YXJ0c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBhamF4TG9j
UGFydHNbIDIgXSB8fAotICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0
c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRw
OiIgPyA4MCA6IDQ0MyApICkgKQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwotICAgICAgICBpZiAoIHMu
ZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewot
ICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwg
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKLSAgICAgICAgaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhS
ICk7Ci0KLSAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0
ZXIsIHN0b3AgdGhlcmUKLSAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAgICAgICAgICAg
IHJldHVybiBqcVhIUjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2Jh
bCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCi0gICAgICAgIGZpcmVHbG9iYWxzID0gcy5n
bG9iYWw7Ci0KLSAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCi0gICAgICAgIHMudHlwZSA9
IHMudHlwZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0
IGhhcyBjb250ZW50Ci0gICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMu
dHlwZSApOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKLSAg
ICAgICAgaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7Ci0gICAg
ICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBj
b250ZW50Ci0gICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKLQotICAgICAgICAgICAgLy8g
SWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAotICAgICAgICAgICAgaWYg
KCBzLmRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51
cmwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhOwotICAgICAgICAgICAgICAgIC8vICM5NjgyOiBy
ZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKLSAg
ICAgICAgICAgICAgICBkZWxldGUgcy5kYXRhOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFt
ZXRlcgotICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IHMudXJsOwotCi0gICAgICAgICAgICAv
LyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCi0gICAgICAgICAgICBpZiAoIHMuY2Fj
aGUgPT09IGZhbHNlICkgewotCi0gICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygp
LAotICAgICAgICAgICAgICAgICAgICAvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJl
Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsg
dHMgKTsKLQotICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQg
dGltZXN0YW1wIHRvIHRoZSBlbmQKLSAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKCBy
ZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAi
Xz0iICsgdHMgOiAiIiApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
U2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50Ci0gICAgICAgIGlm
ICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBv
cHRpb25zLmNvbnRlbnRUeXBlICkgewotICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVy
LCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0gICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgewot
ICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7Ci0gICAg
ICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKLSAg
ICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2Ui
LCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKLSAgICAg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVy
eS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGlu
ZyBvbiB0aGUgZGF0YVR5cGUKLSAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKLSAgICAg
ICAgICAgICJBY2NlcHQiLAotICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2Vw
dHNbIHMuZGF0YVR5cGVzWzBdIF0gPwotICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRh
VHlwZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVz
ICsgIjsgcT0wLjAxIiA6ICIiICkgOgotICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0K
LSAgICAgICAgKTsKLQotICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KLSAgICAg
ICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7Ci0gICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxs
b3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAotICAgICAgICBpZiAo
IHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpx
WEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGpxWEhSLmFib3J0KCk7Ci0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFib3J0aW5n
IGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgotICAgICAgICBzdHJBYm9ydCA9ICJhYm9ydCI7
Ci0KLSAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCi0gICAgICAgIGZv
ciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKLSAgICAg
ICAgICAgIGpxWEhSWyBpIF0oIHNbIGkgXSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0
IHRyYW5zcG9ydAotICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNw
b3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKLQotICAgICAgICAvLyBJZiBu
byB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKLSAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgewot
ICAgICAgICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKLSAgICAgICAgICAgIC8vIFNlbmQg
Z2xvYmFsIGV2ZW50Ci0gICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgICAgICAg
ICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBz
IF0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRpbWVvdXQKLSAgICAgICAgICAg
IGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewotICAgICAgICAgICAgICAgIHRpbWVv
dXRUaW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgIGpx
WEhSLmFib3J0KCAidGltZW91dCIgKTsKLSAgICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdGF0
ZSA9IDE7Ci0gICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBk
b25lICk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgLy8gUHJv
cGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQotICAgICAgICAgICAgICAgIGlm
ICggc3RhdGUgPCAyICkgewotICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOwotICAg
ICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGpxWEhSOwotICAg
IH0sCi0KLSAgICAvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1
ZXJpZXMKLSAgICBhY3RpdmU6IDAsCi0KLSAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNo
ZSBmb3IgbmV4dCByZXF1ZXN0Ci0gICAgbGFzdE1vZGlmaWVkOiB7fSwKLSAgICBldGFnOiB7fQot
Ci19KTsKLQotLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgotICogLSBz
ZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKLSAqIC0gZmluZHMgdGhlIHJp
Z2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQg
ZGF0YVR5cGUpCi0gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKLSAqLwot
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKLQot
ICAgIHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKLSAgICAgICAg
Y29udGVudHMgPSBzLmNvbnRlbnRzLAotICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywK
LSAgICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOwotCi0gICAgLy8gRmls
bCByZXNwb25zZVhYWCBmaWVsZHMKLSAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkg
ewotICAgICAgICBpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewotICAgICAgICAgICAganFYSFJb
IHJlc3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBl
IGluIHRoZSBwcm9jZXNzCi0gICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7Ci0g
ICAgICAgIGRhdGFUeXBlcy5zaGlmdCgpOwotICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQg
KSB7Ci0gICAgICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFk
ZXIoICJjb250ZW50LXR5cGUiICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKLSAgICBpZiAoIGN0ICkg
ewotICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgewotICAgICAgICAgICAgaWYgKCBj
b250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKLSAgICAg
ICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCi0gICAg
aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7Ci0gICAgICAgIGZpbmFsRGF0YVR5
cGUgPSBkYXRhVHlwZXNbIDAgXTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUcnkgY29udmVy
dGlibGUgZGF0YVR5cGVzCi0gICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewotICAg
ICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAi
ICsgZGF0YVR5cGVzWzBdIF0gKSB7Ci0gICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5
cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoICFmaXJzdERhdGFUeXBlICkgewotICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0
eXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIE9yIGp1c3QgdXNlIGZp
cnN0IG9uZQotICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERh
dGFUeXBlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKLSAgICAvLyBX
ZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAotICAgIC8vIGFuZCByZXR1
cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKLSAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7
Ci0gICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7Ci0gICAg
ICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKLSAgICB9Ci19Ci0KLS8v
IENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVz
cG9uc2UKLWZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKLQotICAgIHZhciBj
b252LCBjb252MiwgY3VycmVudCwgdG1wLAotICAgICAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9m
IGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCi0g
ICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCi0gICAgICAgIHByZXYgPSBk
YXRhVHlwZXNbIDAgXSwKLSAgICAgICAgY29udmVydGVycyA9IHt9LAotICAgICAgICBpID0gMDsK
LQotICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCi0gICAgaWYgKCBzLmRh
dGFGaWx0ZXIgKSB7Ci0gICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwg
cy5kYXRhVHlwZSApOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRo
IGxvd2VyY2FzZWQga2V5cwotICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7Ci0gICAgICAgIGZv
ciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgewotICAgICAgICAgICAgY29udmVydGVyc1sgY29u
di50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0b2xlcmF0
aW5nIGxpc3QgbW9kaWZpY2F0aW9uCi0gICAgZm9yICggOyAoY3VycmVudCA9IGRhdGFUeXBlc1sr
K2ldKTsgKSB7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVu
dCBkYXRhVHlwZSBpcyBub24tYXV0bwotICAgICAgICBpZiAoIGN1cnJlbnQgIT09ICIqIiApIHsK
LQotICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5v
bi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAotICAgICAgICAgICAgaWYgKCBwcmV2ICE9
PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKLQotICAgICAgICAgICAgICAgIC8vIFNlZWsg
YSBkaXJlY3QgY29udmVydGVyCi0gICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHBy
ZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKLQot
ICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCi0gICAgICAgICAg
ICAgICAgaWYgKCAhY29udiApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIgaW4g
Y29udmVydGVycyApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29udjIgb3V0
cHV0cyBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgi
ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCAp
IHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZl
cnRlZCB0byBhY2NlcHRlZCBpbnB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYg
PSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGlu
dGVybWVkaWF0ZSBkYXRhVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnNwbGljZSggaS0tLCAwLCBjdXJyZW50ICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBl
cXVpdmFsZW5jZSkKLSAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUs
IGNhdGNoIGFuZCByZXR1cm4gdGhlbQotICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYg
c1sidGhyb3dzIl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYo
IHJlc3BvbnNlICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g
Y29udiggcmVzcG9uc2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiAicGFyc2VyZXJy
b3IiLCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0
byAiICsgY3VycmVudCB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBVcGRhdGUgcHJldiBmb3IgbmV4dCBpdGVyYXRpb24KLSAgICAgICAgICAgIHByZXYgPSBj
dXJyZW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNz
IiwgZGF0YTogcmVzcG9uc2UgfTsKLX0KLXZhciBvbGRDYWxsYmFja3MgPSBbXSwKLSAgICBycXVl
c3Rpb24gPSAvXD8vLAotICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy8sCi0gICAgbm9u
Y2UgPSBqUXVlcnkubm93KCk7Ci0KLS8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKLWpRdWVyeS5h
amF4U2V0dXAoewotICAgIGpzb25wOiAiY2FsbGJhY2siLAotICAgIGpzb25wQ2FsbGJhY2s6IGZ1
bmN0aW9uKCkgewotICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwg
KCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7Ci0gICAgICAgIHRoaXNbIGNh
bGxiYWNrIF0gPSB0cnVlOwotICAgICAgICByZXR1cm4gY2FsbGJhY2s7Ci0gICAgfQotfSk7Ci0K
LS8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBq
c29ucCByZXF1ZXN0cwotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rp
b24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgewotCi0gICAgdmFyIGNhbGxiYWNrTmFt
ZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAotICAgICAgICBkYXRhID0gcy5kYXRh
LAotICAgICAgICB1cmwgPSBzLnVybCwKLSAgICAgICAgaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9
PSBmYWxzZSwKLSAgICAgICAgcmVwbGFjZUluVXJsID0gaGFzQ2FsbGJhY2sgJiYgcmpzb25wLnRl
c3QoIHVybCApLAotICAgICAgICByZXBsYWNlSW5EYXRhID0gaGFzQ2FsbGJhY2sgJiYgIXJlcGxh
Y2VJblVybCAmJiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgJiYKLSAgICAgICAgICAgICEoIHMu
Y29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiKSAmJgotICAgICAgICAgICAgcmpzb25wLnRlc3QoIGRhdGEgKTsKLQotICAgIC8vIEhh
bmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBw
YXJhbWV0ZXIgdG8gc2V0Ci0gICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8
IHJlcGxhY2VJblVybCB8fCByZXBsYWNlSW5EYXRhICkgewotCi0gICAgICAgIC8vIEdldCBjYWxs
YmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgg
aXQKLSAgICAgICAgY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVu
Y3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8KLSAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygp
IDoKLSAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjazsKLSAgICAgICAgb3ZlcndyaXR0ZW4gPSB3
aW5kb3dbIGNhbGxiYWNrTmFtZSBdOwotCi0gICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRv
IHVybCBvciBmb3JtIGRhdGEKLSAgICAgICAgaWYgKCByZXBsYWNlSW5VcmwgKSB7Ci0gICAgICAg
ICAgICBzLnVybCA9IHVybC5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsK
LSAgICAgICAgfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKLSAgICAgICAgICAgIHMuZGF0
YSA9IGRhdGEucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoIGhhc0NhbGxiYWNrICkgewotICAgICAgICAgICAgcy51cmwgKz0gKCBycXVl
c3Rpb24udGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFj
a05hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0
cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCi0gICAgICAgIHMuY29udmVydGVyc1si
c2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VD
b250YWluZXIgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUg
KyAiIHdhcyBub3QgY2FsbGVkIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHJlc3BvbnNlQ29udGFpbmVyWyAwIF07Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gZm9yY2Ug
anNvbiBkYXRhVHlwZQotICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwotCi0gICAg
ICAgIC8vIEluc3RhbGwgY2FsbGJhY2sKLSAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVy
IGNvbnZlcnRlcnMpCi0gICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIC8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKLSAgICAgICAgICAgIHdpbmRvd1sgY2Fs
bGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKLQotICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFz
IGZyZWUKLSAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3Jl
dyB0aGluZ3MgYXJvdW5kCi0gICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2lu
YWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwotCi0gICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUg
Y2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQotICAgICAgICAgICAgICAgIG9sZENhbGxiYWNr
cy5wdXNoKCBjYWxsYmFja05hbWUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
Q2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCi0gICAgICAg
ICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3Jp
dHRlbiApICkgewotICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5l
clsgMCBdICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVy
ID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIERl
bGVnYXRlIHRvIHNjcmlwdAotICAgICAgICByZXR1cm4gInNjcmlwdCI7Ci0gICAgfQotfSk7Ci0v
LyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAgYWNjZXB0
czogewotICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIK
LSAgICB9LAotICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNt
YXNjcmlwdC8KLSAgICB9LAotICAgIGNvbnZlcnRlcnM6IHsKLSAgICAgICAgInRleHQgc2NyaXB0
IjogZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4
dCApOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19KTsKLQot
Ly8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4UHJl
ZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7Ci0gICAgaWYgKCBzLmNhY2hlID09PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCBz
LmNyb3NzRG9tYWluICkgewotICAgICAgICBzLnR5cGUgPSAiR0VUIjsKLSAgICAgICAgcy5nbG9i
YWwgPSBmYWxzZTsKLSAgICB9Ci19KTsKLQotLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNw
b3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKLQotICAg
IC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMK
LSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0KLSAgICAgICAgdmFyIHNjcmlwdCwKLSAgICAg
ICAgICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0KLSAgICAgICAg
cmV0dXJuIHsKLQotICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewot
Ci0gICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlw
dCIgKTsKLQotICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKLSAgICAgICAgICAgICAgICAgICAg
c2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOwotCi0gICAgICAgICAgICAgICAgLy8g
QXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICBzY3JpcHQu
b25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0
ICkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5
U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVu
dE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCgg
c2NyaXB0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdCA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJh
Y2sgaWYgbm90IGFib3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3Rl
YWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAj
NDM3OCkuCi0gICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5m
aXJzdENoaWxkICk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhYm9ydDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0gICAgfQotfSk7Ci12YXIgeGhyQ2FsbGJhY2tzLAotICAgIC8vICM1
MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2Ug
ZG9uJ3QgYWJvcnQgb24gdW5sb2FkCi0gICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3Rp
dmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJl
cXVlc3RzCi0gICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgewotICAgICAg
ICAgICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOwotICAgICAgICB9Ci0gICAgfSA6IGZh
bHNlLAotICAgIHhocklkID0gMDsKLQotLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCi1mdW5j
dGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKLSAgICB0cnkgewotICAgICAgICByZXR1cm4gbmV3
IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwotICAgIH0gY2F0Y2goIGUgKSB7fQotfQotCi1mdW5j
dGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyB3
aW5kb3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOwotICAgIH0gY2F0Y2go
IGUgKSB7fQotfQotCi0vLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci0vLyAoVGhpcyBpcyBz
dGlsbCBhdHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkp
Ci1qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KLSAgICAv
KiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5Ci0gICAgICogaW1wbGVtZW50IHRoZSBYTUxI
dHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAotICAgICAqIHNv
IHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQotICAgICAqIEFk
ZGl0aW9uYWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwot
ICAgICAqIHdlIG5lZWQgYSBmYWxsYmFjay4KLSAgICAgKi8KLSAgICBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVh
dGVBY3RpdmVYSFIoKTsKLSAgICB9IDoKLSAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1
c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAotICAgIGNyZWF0ZVN0YW5kYXJk
WEhSOwotCi0vLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCi0oZnVuY3Rpb24oIHhociAp
IHsKLSAgICBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuc3VwcG9ydCwgewotICAgICAgICBhamF4OiAh
IXhociwKLSAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIg
KQotICAgIH0pOwotfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKLQotLy8gQ3JlYXRl
IHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKLWlmICggalF1ZXJ5
LnN1cHBvcnQuYWpheCApIHsKLQotICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBz
ICkgewotICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0
aHJvdWdoIFhNTEh0dHBSZXF1ZXN0Ci0gICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1
ZXJ5LnN1cHBvcnQuY29ycyApIHsKLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrOwotCi0gICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJz
LCBjb21wbGV0ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGUsIGksCi0gICAgICAgICAgICAgICAgICAgICAg
ICB4aHIgPSBzLnhocigpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tl
dAotICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRl
cyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBzLnVzZXJuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlw
ZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5
cGUsIHMudXJsLCBzLmFzeW5jICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggcy54aHJGaWVsZHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpIGluIHMueGhyRmllbGRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
clsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1p
bWUgdHlwZSBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYm
IHhoci5vdmVycmlkZU1pbWVUeXBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92
ZXJyaWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCi0gICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRp
b25zIGZvciBhIHByZWZsaWdodCBhcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBh
IGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3Qg
YmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCi0gICAgICAgICAgICAgICAgICAgIC8vIEZv
ciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHBy
b3ZpZGVkLgotICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFk
ZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoZWFk
ZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9j
YXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMwotICAgICAgICAgICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJz
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBp
LCBoZWFkZXJzWyBpIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCggXyApIHt9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2Vu
ZCB0aGUgcmVxdWVzdAotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBl
eGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxl
ZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCi0gICAgICAgICAgICAgICAg
ICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1s
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25z
IHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9m
IGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25l
bnRfcmV0dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxB
QkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8
fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sg
aGFuZGxlIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBpdCdzIGFuIGFib3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFib3J0IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0
dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMg
PSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZXMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhtbCA9IHhoci5yZXNwb25zZVhNTDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5
NTggKi8gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VzLnhtbCA9IHhtbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXF1ZXN0aW5nIGJp
bmFyeSBkYXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNl
VGV4dCAoIzExNDI2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9
IHhoci5yZXNwb25zZVRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBl
eGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQg
Z2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRl
ciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUg
ZGF0YTogYXNzdW1lIGEgc3VjY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRo
ZSBiZXN0IHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8g
Z2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3Bv
bnNlcy50ZXh0ID8gMjAwIDogNDA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBi
ZSAyMDQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0
YXR1cyA9PT0gMTIyMyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSAyMDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhj
ZXB0aW9uICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFj
Y2Vzc0V4Y2VwdGlvbiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21w
bGV0ZSBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1Rl
eHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh
cy5hc3luYyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMg
bW9kZSB3ZSBmaXJlIHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09
IDQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGlu
IGNhY2hlIGFuZCBoYXMgYmVlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVk
IGRpcmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3Qg
aWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUg
dW5sb2FkIGhhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxs
YmFja3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrcyA9
IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVu
bG9hZCggeGhyT25VbmxvYWRBYm9ydCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhy
cyBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhh
bmRsZSBdID0gY2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgYWJv
cnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICB9
KTsKLX0KLXZhciBmeE5vdywgdGltZXJJZCwKLSAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNo
b3d8aGlkZSkkLywKLSAgICByZnhudW0gPSBuZXcgUmVnRXhwKCAiXig/OihbLStdKT18KSgiICsg
Y29yZV9wbnVtICsgIikoW2EteiVdKikkIiwgImkiICksCi0gICAgcnJ1biA9IC9xdWV1ZUhvb2tz
JC8sCi0gICAgYW5pbWF0aW9uUHJlZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAotICAg
IHR3ZWVuZXJzID0gewotICAgICAgICAiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7Ci0g
ICAgICAgICAgICB2YXIgZW5kLCB1bml0LAotICAgICAgICAgICAgICAgIHR3ZWVuID0gdGhpcy5j
cmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKSwKLSAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51
bS5leGVjKCB2YWx1ZSApLAotICAgICAgICAgICAgICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAot
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gK3RhcmdldCB8fCAwLAotICAgICAgICAgICAgICAgIHNj
YWxlID0gMSwKLSAgICAgICAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMjA7Ci0KLSAgICAgICAg
ICAgIGlmICggcGFydHMgKSB7Ci0gICAgICAgICAgICAgICAgZW5kID0gK3BhcnRzWzJdOwotICAg
ICAgICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3Ag
XSA/ICIiIDogInB4IiApOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRl
IHN0YXJ0aW5nIHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICYmIHN0
YXJ0ICkgewotICAgICAgICAgICAgICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBm
cm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAotICAgICAgICAgICAgICAgICAgICAvLyBQcmVm
ZXIgdGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBwcm9jZXNzIHdpbGwgYmUgdHJp
dmlhbCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCi0gICAgICAgICAgICAgICAgICAgIC8vIEZh
bGxiYWNrIHRvIGVuZCBvciBhIHNpbXBsZSBjb25zdGFudAotICAgICAgICAgICAgICAgICAgICBz
dGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsK
LQotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29t
ZXRoaW5nKgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgc3RyaW5nIGZvciBkb3Vi
bGluZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5n
ZWQgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBO
YU4gZnJvbSB0d2Vlbi5jdXIoKQotICAgICAgICAgICAgICAgICAgICAvLyBBbmQgYnJlYWtpbmcg
dGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1
c3QgaGFkIGVub3VnaAotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUgIT09IChz
Y2FsZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJh
dGlvbnMgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0d2Vlbi51bml0
ID0gdW5pdDsKLSAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OwotICAgICAgICAg
ICAgICAgIC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJl
bGF0aXZlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIHR3ZWVuLmVuZCA9IHBhcnRzWzFdID8g
c3RhcnQgKyAoIHBhcnRzWzFdICsgMSApICogZW5kIDogZW5kOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHR3ZWVuOwotICAgICAgICB9XQotICAgIH07Ci0KLS8vIEFuaW1hdGlv
bnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKLWZ1bmN0aW9u
IGNyZWF0ZUZ4Tm93KCkgewotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZ4
Tm93ID0gdW5kZWZpbmVkOwotICAgIH0sIDAgKTsKLSAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVy
eS5ub3coKSApOwotfQotCi1mdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMg
KSB7Ci0gICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7Ci0g
ICAgICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0
KCB0d2VlbmVyc1sgIioiIF0gKSwKLSAgICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICAg
IGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOwotICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrICkgewotICAgICAgICAgICAgaWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNh
bGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKLQotICAgICAgICAgICAgICAgIC8vIHdl
J3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIEFuaW1hdGlvbigg
ZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKLSAgICB2YXIgcmVzdWx0LAotICAgICAgICBp
bmRleCA9IDAsCi0gICAgICAgIHR3ZWVuZXJJbmRleCA9IDAsCi0gICAgICAgIGxlbmd0aCA9IGFu
aW1hdGlvblByZWZpbHRlcnMubGVuZ3RoLAotICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZl
cnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyBkb24ndCBtYXRjaCBl
bGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKLSAgICAgICAgICAgIGRlbGV0ZSB0aWNrLmVs
ZW07Ci0gICAgICAgIH0pLAotICAgICAgICB0aWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgICAgICAgICAg
ICAgIHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0
aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKLSAgICAgICAgICAgICAgICAvLyBhcmNoYWlj
IGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8IDAgKSAoIzEyNDk3
KQotICAgICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24g
fHwgMCwKLSAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCi0gICAgICAgICAgICAg
ICAgaW5kZXggPSAwLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMu
bGVuZ3RoOwotCi0gICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyAp
IHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2Vu
dCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pOwotCi0gICAgICAgICAgICBp
ZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVt
YWluaW5nOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgYW5pbWF0aW9uID0g
ZGVmZXJyZWQucHJvbWlzZSh7Ci0gICAgICAgICAgICBlbGVtOiBlbGVtLAotICAgICAgICAgICAg
cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCi0gICAgICAgICAgICBvcHRz
OiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwK
LSAgICAgICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKLSAgICAgICAgICAg
IG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cg
fHwgY3JlYXRlRnhOb3coKSwKLSAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9u
LAotICAgICAgICAgICAgdHdlZW5zOiBbXSwKLSAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5j
dGlvbiggcHJvcCwgZW5kLCBlYXNpbmcgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0g
alF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAotICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFu
aW1hdGlvbi5vcHRzLmVhc2luZyApOwotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMu
cHVzaCggdHdlZW4gKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47Ci0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdv
aW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAotICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOwotCi0g
ICAgICAgICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aGVuIHdlIHBsYXll
ZCB0aGUgbGFzdCBmcmFtZQotICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmVqZWN0Ci0g
ICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgewotICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdp
dGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pLAot
ICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKLQotICAgIHByb3BGaWx0ZXIoIHByb3Bz
LCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJlZmlsdGVy
c1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyAp
OwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKTsK
LQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7
Ci0gICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOwot
ICAgIH0KLQotICAgIGpRdWVyeS5meC50aW1lcigKLSAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGlj
aywgewotICAgICAgICAgICAgYW5pbTogYW5pbWF0aW9uLAotICAgICAgICAgICAgcXVldWU6IGFu
aW1hdGlvbi5vcHRzLnF1ZXVlLAotICAgICAgICAgICAgZWxlbTogZWxlbQotICAgICAgICB9KQot
ICAgICk7Ci0KLSAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9ucwotICAgIHJldHVy
biBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKLSAgICAgICAg
LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKLSAg
ICAgICAgLmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKQotICAgICAgICAuYWx3YXlzKCBhbmlt
YXRpb24ub3B0cy5hbHdheXMgKTsKLX0KLQotZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNw
ZWNpYWxFYXNpbmcgKSB7Ci0gICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29r
czsKLQotICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sg
cGFzcwotICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgewotICAgICAgICBuYW1lID0galF1ZXJ5
LmNhbWVsQ2FzZSggaW5kZXggKTsKLSAgICAgICAgZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFt
ZSBdOwotICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwotICAgICAgICBpZiAoIGpRdWVy
eS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsK
LSAgICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKLSAgICAgICAgICAgIHByb3Bz
WyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07Ci0gICAg
ICAgIGlmICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7Ci0gICAgICAgICAgICB2YWx1
ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKLSAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgbmFt
ZSBdOwotCi0gICAgICAgICAgICAvLyBub3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29udCBvdmVy
d3JpdGUga2V5cyBhbHJlYWR5IHByZXNlbnQuCi0gICAgICAgICAgICAvLyBhbHNvIC0gcmV1c2lu
ZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgot
ICAgICAgICAgICAgZm9yICggaW5kZXggaW4gdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCAhKCBpbmRleCBpbiBwcm9wcyApICkgewotICAgICAgICAgICAgICAgICAgICBwcm9wc1sgaW5k
ZXggXSA9IHZhbHVlWyBpbmRleCBdOwotICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5n
WyBpbmRleCBdID0gZWFzaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2lu
ZzsKLSAgICAgICAgfQotICAgIH0KLX0KLQotalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRl
bmQoIEFuaW1hdGlvbiwgewotCi0gICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFj
ayApIHsKLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvcHM7Ci0gICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KCIgIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgcHJvcCwKLSAgICAgICAgICAgIGluZGV4ID0gMCwKLSAg
ICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKLQotICAgICAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXgg
XTsKLSAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtd
OwotICAgICAgICAgICAgdHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVw
ZW5kICkgewotICAgICAgICBpZiAoIHByZXBlbmQgKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Q
cmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBhbmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19KTsKLQotZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMg
KSB7Ci0gICAgdmFyIGluZGV4LCBwcm9wLCB2YWx1ZSwgbGVuZ3RoLCBkYXRhU2hvdywgdG9nZ2xl
LCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsCi0gICAgICAgIGFuaW0gPSB0aGlzLAotICAgICAgICBz
dHlsZSA9IGVsZW0uc3R5bGUsCi0gICAgICAgIG9yaWcgPSB7fSwKLSAgICAgICAgaGFuZGxlZCA9
IFtdLAotICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7
Ci0KLSAgICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCi0gICAgaWYgKCAhb3B0cy5x
dWV1ZSApIHsKLSAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIg
KTsKLSAgICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgewotICAgICAgICAgICAg
aG9va3MudW5xdWV1ZWQgPSAwOwotICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZp
cmU7Ci0gICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9s
ZGZpcmUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0g
ICAgICAgIGhvb2tzLnVucXVldWVkKys7Ci0KLSAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxl
dGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZAotICAgICAgICAgICAgLy8gYmVmb3JlIHRoaXMgY29t
cGxldGVzCi0gICAgICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICBob29rcy51bnF1ZXVlZC0tOwotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1
ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1w
dHkuZmlyZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKLSAgICB9Ci0KLSAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcwotICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICJoZWlnaHQiIGluIHByb3BzIHx8ICJ3aWR0aCIgaW4g
cHJvcHMgKSApIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0
Ci0gICAgICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUg
ZG9lcyBub3QKLSAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBv
dmVyZmxvd1ggYW5kCi0gICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZh
bHVlCi0gICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVy
Zmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOwotCi0gICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3Bl
cnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCi0gICAgICAgIC8vIGFuaW1hdGlv
bnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0
ZWQKLSAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gImlubGlu
ZSIgJiYKLSAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJu
b25lIiApIHsKLQotICAgICAgICAgICAgLy8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBp
bmxpbmUtYmxvY2s7Ci0gICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRv
IGJlIGlubGluZSB3aXRoIGxheW91dAotICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
aW5saW5lQmxvY2tOZWVkc0xheW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5h
bWUgKSA9PT0gImlubGluZSIgKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJp
bmxpbmUtYmxvY2siOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0
eWxlLnpvb20gPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCBvcHRzLm92ZXJmbG93ICkgewotICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwot
ICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgewotICAgICAg
ICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJm
bG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOwotICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93
WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTsKLSAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kg
PSBvcHRzLm92ZXJmbG93WyAyIF07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0K
LQotCi0gICAgLy8gc2hvdy9oaWRlIHBhc3MKLSAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsK
LSAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICAgICAgaWYgKCByZnh0eXBlcy5l
eGVjKCB2YWx1ZSApICkgewotICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOwotICAg
ICAgICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKLSAgICAgICAg
ICAgIGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYW5kbGVk
LnB1c2goIGluZGV4ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBsZW5ndGggPSBoYW5kbGVk
Lmxlbmd0aDsKLSAgICBpZiAoIGxlbmd0aCApIHsKLSAgICAgICAgZGF0YVNob3cgPSBqUXVlcnku
X2RhdGEoIGVsZW0sICJmeHNob3ciICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwg
e30gKTsKLSAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKLSAgICAgICAgICAg
IGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN0b3Jl
IHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVy
c2UiCi0gICAgICAgIGlmICggdG9nZ2xlICkgewotICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVu
ID0gIWhpZGRlbjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGhpZGRlbiApIHsKLSAgICAgICAg
ICAgIGpRdWVyeSggZWxlbSApLnNob3coKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGFuaW0uZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5o
aWRlKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBhbmltLmRvbmUoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcDsKLSAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVEYXRhKCBlbGVtLCAiZnhzaG93IiwgdHJ1ZSApOwotICAgICAgICAgICAgZm9yICggcHJvcCBp
biBvcmlnICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3Jp
Z1sgcHJvcCBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBmb3IgKCBp
bmRleCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAgICAgICAgICBwcm9w
ID0gaGFuZGxlZFsgaW5kZXggXTsKLSAgICAgICAgICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVUd2Vl
biggcHJvcCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKLSAgICAgICAgICAgIG9y
aWdbIHByb3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9w
ICk7Ci0KLSAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgewotICAgICAg
ICAgICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKLSAgICAgICAgICAgICAg
ICBpZiAoIGhpZGRlbiApIHsKLSAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4u
c3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRo
IiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9w
dGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgewotICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90
eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Ci19Ci1qUXVlcnku
VHdlZW4gPSBUd2VlbjsKLQotVHdlZW4ucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBU
d2VlbiwKLSAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNp
bmcsIHVuaXQgKSB7Ci0gICAgICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgICAgIHRoaXMucHJv
cCA9IHByb3A7Ci0gICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJzd2luZyI7Ci0gICAg
ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5v
dyA9IHRoaXMuY3VyKCk7Ci0gICAgICAgIHRoaXMuZW5kID0gZW5kOwotICAgICAgICB0aGlzLnVu
aXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Ci0g
ICAgfSwKLSAgICBjdXI6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5w
cm9wSG9va3NbIHRoaXMucHJvcCBdOwotCi0gICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5n
ZXQgPwotICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgotICAgICAgICAgICAgVHdlZW4u
cHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOwotICAgIH0sCi0gICAgcnVuOiBmdW5jdGlv
biggcGVyY2VudCApIHsKLSAgICAgICAgdmFyIGVhc2VkLAotICAgICAgICAgICAgaG9va3MgPSBU
d2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwotCi0gICAgICAgIGlmICggdGhpcy5vcHRpb25z
LmR1cmF0aW9uICkgewotICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNp
bmdbIHRoaXMuZWFzaW5nIF0oCi0gICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25z
LmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCi0gICAgICAg
ICAgICApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9
IHBlcmNlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhp
cy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OwotCi0gICAgICAgIGlmICggdGhpcy5vcHRp
b25zLnN0ZXAgKSB7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVs
ZW0sIHRoaXMubm93LCB0aGlzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGhvb2tzICYm
IGhvb2tzLnNldCApIHsKLSAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyAp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLX07Ci0KLVR3ZWVuLnBy
b3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKLQotVHdlZW4ucHJvcEhv
b2tzID0gewotICAgIF9kZWZhdWx0OiB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkg
ewotICAgICAgICAgICAgdmFyIHJlc3VsdDsKLQotICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVt
WyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICghdHdlZW4uZWxlbS5z
dHlsZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gcGFzc2luZyBhbnkgdmFsdWUgYXMgYSA0dGggcGFyYW1ldGVy
IHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFy
c2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCi0gICAg
ICAgICAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRv
IEZsb2F0LgotICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFy
YWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMuCi0gICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3Nz
KCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBmYWxzZSwgIiIgKTsKLSAgICAgICAgICAgIC8vIEVt
cHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8g
MC4KLSAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6
IHJlc3VsdDsKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0g
ICAgICAgICAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NIb29r
IGlmIGl0cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCi0gICAgICAgICAgICAvLyBhdmFpbGFi
bGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQotICAgICAgICAgICAg
aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgewotICAgICAgICAgICAgICAgIGpR
dWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1By
b3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJv
cCBdICkgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vl
bi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07Ci0KLS8vIFJlbW92ZSBpbiAyLjAgLSB0
aGlzIHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCi0vLyB0byBzZXR0aW5nIHRo
aW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKLQotVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9
IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewotICAgIHNldDogZnVuY3Rpb24oIHR3ZWVu
ICkgewotICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJl
bnROb2RlICkgewotICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4u
bm93OwotICAgICAgICB9Ci0gICAgfQotfTsKLQotalF1ZXJ5LmVhY2goWyAidG9nZ2xlIiwgInNo
b3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgdmFyIGNzc0ZuID0galF1
ZXJ5LmZuWyBuYW1lIF07Ci0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQs
IGVhc2luZywgY2FsbGJhY2sgKSB7Ci0gICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5
cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iIHx8Ci0gICAgICAgICAgICAvLyBzcGVjaWFsIGNoZWNr
IGZvciAudG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQotICAgICAgICAgICAgKCAhaSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5n
ICkgKSA/Ci0gICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgotICAg
ICAgICAgICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgZmFk
ZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgewotCi0gICAgICAg
IC8vIHNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAot
ICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAg
KS5zaG93KCkKLQotICAgICAgICAgICAgLy8gYW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVk
Ci0gICAgICAgICAgICAuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNp
bmcsIGNhbGxiYWNrICk7Ci0gICAgfSwKLSAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0gICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0Vt
cHR5T2JqZWN0KCBwcm9wICksCi0gICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCi0gICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28g
cGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0Ci0gICAgICAgICAgICAgICAgdmFyIGFu
aW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCAp
OwotCi0gICAgICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucyByZXNvbHZlIGltbWVkaWF0
ZWx5Ci0gICAgICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKLSAgICAgICAgICAgICAgICAgICAg
YW5pbS5zdG9wKCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQot
ICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/Ci0gICAgICAg
ICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgotICAgICAgICAgICAgdGhpcy5xdWV1ZSgg
b3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOwotICAgIH0sCi0gICAgc3RvcDogZnVuY3Rpb24o
IHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7Ci0gICAgICAgIHZhciBzdG9wUXVldWUgPSBm
dW5jdGlvbiggaG9va3MgKSB7Ci0gICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7Ci0g
ICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQg
KTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiAp
IHsKLSAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOwotICAgICAgICAgICAgY2xlYXJR
dWV1ZSA9IHR5cGU7Ci0gICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKLSAgICAgICAgICAg
IHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRy
dWUsCi0gICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1
ZUhvb2tzIiwKLSAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAotICAgICAg
ICAgICAgICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKLQotICAgICAgICAgICAgaWYg
KCBpbmRleCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsg
aW5kZXggXS5zdG9wICkgewotICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGlu
ZGV4IF0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRl
eCApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBd
ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsg
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAm
JiAodHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICB0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRo
ZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAotICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRs
eSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUK
LSAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCi0gICAgICAgICAg
ICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmRl
cXVldWUoIHRoaXMsIHR5cGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQot
fSk7Ci0KLS8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0
aW9uCi1mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgewotICAgIHZhciB3aGlj
aCwKLSAgICAgICAgYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9LAotICAgICAgICBpID0gMDsKLQot
ICAgIC8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3Nz
RXhwYW5kIHZhbHVlcywKLSAgICAvLyBpZiB3ZSBkb24ndCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZh
bHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0Ci0gICAgaW5jbHVkZVdpZHRoID0g
aW5jbHVkZVdpZHRoPyAxIDogMDsKLSAgICBmb3IoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRl
V2lkdGggKSB7Ci0gICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07Ci0gICAgICAgIGF0dHJz
WyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7
Ci0gICAgfQotCi0gICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7Ci0gICAgICAgIGF0dHJzLm9wYWNp
dHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF0dHJzOwotfQot
Ci0vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCi1qUXVlcnkuZWFj
aCh7Ci0gICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAotICAgIHNsaWRlVXA6IGdlbkZ4KCJo
aWRlIiksCi0gICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKLSAgICBmYWRlSW46IHsg
b3BhY2l0eTogInNob3ciIH0sCi0gICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKLSAg
ICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KLX0sIGZ1bmN0aW9uKCBuYW1lLCBw
cm9wcyApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuc3BlZWQgPSBmdW5j
dGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7Ci0gICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVv
ZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKLSAg
ICAgICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKLSAgICAgICAgICAgIGpRdWVy
eS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAotICAgICAgICBkdXJhdGlvbjogc3BlZWQs
Ci0gICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVu
Y3Rpb24oIGVhc2luZyApICYmIGVhc2luZwotICAgIH07Ci0KLSAgICBvcHQuZHVyYXRpb24gPSBq
UXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0
LmR1cmF0aW9uIDoKLSAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBq
UXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1
bHQ7Ci0KLSAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAt
PiAiZngiCi0gICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUg
KSB7Ci0gICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7Ci0gICAgfQotCi0gICAgLy8gUXVldWVpbmcK
LSAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOwotCi0gICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKLSAg
ICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCBvcHQucXVldWUgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1
ZXVlICk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIG9wdDsKLX07Ci0KLWpRdWVy
eS5lYXNpbmcgPSB7Ci0gICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKLSAgICAgICAgcmV0dXJu
IHA7Ci0gICAgfSwKLSAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7Ci0gICAgICAgIHJldHVybiAw
LjUgLSBNYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOwotICAgIH0KLX07Ci0KLWpRdWVyeS50aW1l
cnMgPSBbXTsKLWpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OwotalF1ZXJ5LmZ4LnRp
Y2sgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgdGltZXIsCi0gICAgICAgIHRpbWVycyA9IGpRdWVy
eS50aW1lcnMsCi0gICAgICAgIGkgPSAwOwotCi0gICAgZnhOb3cgPSBqUXVlcnkubm93KCk7Ci0K
LSAgICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgIHRpbWVyID0g
dGltZXJzWyBpIF07Ci0gICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5
IGJlZW4gcmVtb3ZlZAotICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0
aW1lciApIHsKLSAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKLSAgICAgICAgalF1ZXJ5LmZ4
LnN0b3AoKTsKLSAgICB9Ci0gICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci19OwotCi1qUXVlcnkuZngu
dGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7Ci0gICAgaWYgKCB0aW1lcigpICYmIGpRdWVyeS50
aW1lcnMucHVzaCggdGltZXIgKSAmJiAhdGltZXJJZCApIHsKLSAgICAgICAgdGltZXJJZCA9IHNl
dEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7Ci0gICAgfQot
fTsKLQotalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7Ci0KLWpRdWVyeS5meC5zdG9wID0gZnVuY3Rp
b24oKSB7Ci0gICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOwotICAgIHRpbWVySWQgPSBudWxs
OwotfTsKLQotalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKLSAgICBzbG93OiA2MDAsCi0gICAgZmFzdDog
MjAwLAotICAgIC8vIERlZmF1bHQgc3BlZWQKLSAgICBfZGVmYXVsdDogNDAwCi19OwotCi0vLyBC
YWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAotalF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKLQot
aWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotICAgIGpRdWVyeS5l
eHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgcmV0dXJu
IGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtID09PSBmbi5lbGVtOwotICAgICAgICB9KS5sZW5ndGg7Ci0gICAgfTsKLX0K
LXZhciBycm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsKLQotalF1ZXJ5LmZuLm9mZnNldCA9IGZ1
bmN0aW9uKCBvcHRpb25zICkgewotICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKLSAgICAg
ICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICB0aGlzIDoKLSAg
ICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICAgICAgICAgICAgICBqUXVl
cnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwotICAgICAgICAgICAgfSk7
Ci0gICAgfQotCi0gICAgdmFyIGRvY0VsZW0sIGJvZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRM
ZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbExlZnQsCi0gICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0
OiAwIH0sCi0gICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCi0gICAgICAgIGRvYyA9IGVsZW0gJiYg
ZWxlbS5vd25lckRvY3VtZW50OwotCi0gICAgaWYgKCAhZG9jICkgewotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKLSAgICAg
ICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwotICAgIH0KLQotICAg
IGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgLy8gTWFrZSBzdXJlIGl0J3Mg
bm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCi0gICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBk
b2NFbGVtLCBlbGVtICkgKSB7Ci0gICAgICAgIHJldHVybiBib3g7Ci0gICAgfQotCi0gICAgLy8g
SWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKLSAg
ICAvLyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCi0gICAgaWYgKCB0eXBl
b2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICJ1bmRlZmluZWQiICkgewotICAgICAg
ICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgIH0KLSAgICB3aW4gPSBn
ZXRXaW5kb3coIGRvYyApOwotICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwg
Ym9keS5jbGllbnRUb3AgIHx8IDA7Ci0gICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVm
dCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDsKLSAgICBzY3JvbGxUb3AgID0gd2luLnBhZ2VZT2Zm
c2V0IHx8IGRvY0VsZW0uc2Nyb2xsVG9wOwotICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZz
ZXQgfHwgZG9jRWxlbS5zY3JvbGxMZWZ0OwotICAgIHJldHVybiB7Ci0gICAgICAgIHRvcDogYm94
LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAotICAgICAgICBsZWZ0OiBib3gubGVmdCAr
IHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0Ci0gICAgfTsKLX07Ci0KLWpRdWVyeS5vZmZzZXQgPSB7
Ci0KLSAgICBib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKLSAgICAgICAgdmFyIHRvcCA9
IGJvZHkub2Zmc2V0VG9wLAotICAgICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKLQot
ICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zm
c2V0ICkgewotICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHks
ICJtYXJnaW5Ub3AiKSApIHx8IDA7Ci0gICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwotICAgIH0sCi0KLSAgICBzZXRPZmZz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgewotICAgICAgICB2YXIgcG9zaXRpb24g
PSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7Ci0KLSAgICAgICAgLy8gc2V0IHBvc2l0
aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQot
ICAgICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKLSAgICAgICAgICAgIGVsZW0u
c3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1
ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKLSAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0u
b2Zmc2V0KCksCi0gICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9w
IiApLAotICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiAp
LAotICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1
dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBb
Y3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKLSAgICAgICAgICAgIHByb3BzID0ge30sIGN1
clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKLQotICAgICAgICAvLyBuZWVkIHRvIGJl
IGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRv
IGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKLSAgICAgICAgaWYgKCBj
YWxjdWxhdGVQb3NpdGlvbiApIHsKLSAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5w
b3NpdGlvbigpOwotICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwotICAgICAg
ICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwotICAgICAgICAg
ICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewotICAgICAgICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBw
cm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7Ci0gICAgICAgICAg
ICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVm
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgewotICAg
ICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7Ci0gICAgICAgIH0KLSAgICB9
Ci19OwotCi0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0gICAgcG9zaXRpb246IGZ1bmN0aW9uKCkg
ewotICAgICAgICBpZiAoICF0aGlzWzBdICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLAotCi0gICAgICAgIC8vIEdldCAqcmVh
bCogb2Zmc2V0UGFyZW50Ci0gICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50
KCksCi0KLSAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwotICAgICAgICBvZmZzZXQgICAg
ICAgPSB0aGlzLm9mZnNldCgpLAotICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9m
ZnNldFBhcmVudFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFy
ZW50Lm9mZnNldCgpOwotCi0gICAgICAgIC8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucwotICAg
ICAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0
TGVmdCBhbmQgbWFyZ2luTGVmdAotICAgICAgICAvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNh
dXNpbmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAotICAgICAgICBvZmZzZXQudG9w
ICAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7Ci0g
ICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdp
bkxlZnQiKSApIHx8IDA7Ci0KLSAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCi0g
ICAgICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0
UGFyZW50WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7Ci0gICAgICAgIHBhcmVudE9mZnNl
dC5sZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVy
TGVmdFdpZHRoIikgKSB8fCAwOwotCi0gICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0
cwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJl
bnRPZmZzZXQudG9wLAotICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZz
ZXQubGVmdAotICAgICAgICB9OwotICAgIH0sCi0KLSAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9u
KCkgewotICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKLSAg
ICAgICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJl
bnQubm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0g
InN0YXRpYyIpICkgewotICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dC5vZmZzZXRQYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2Zmc2V0
UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0pOwotCi0KLS8v
IENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcwotalF1ZXJ5LmVhY2goIHtz
Y3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5j
dGlvbiggbWV0aG9kLCBwcm9wICkgewotICAgIHZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOwot
Ci0gICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7Ci0gICAgICAgIHJl
dHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7
Ci0gICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7Ci0KLSAgICAgICAgICAg
IGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/
IChwcm9wIGluIHdpbikgPyB3aW5bIHByb3AgXSA6Ci0gICAgICAgICAgICAgICAgICAgIHdpbi5k
b2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKLSAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgbWV0aG9kIF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggd2luICkg
ewotICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKLSAgICAgICAgICAgICAgICAgICAgIXRv
cCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAotICAgICAgICAgICAgICAgICAg
ICAgdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQotICAgICAgICAgICAgICAg
ICk7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9k
IF0gPSB2YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVu
dHMubGVuZ3RoLCBudWxsICk7Ci0gICAgfTsKLX0pOwotCi1mdW5jdGlvbiBnZXRXaW5kb3coIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KLSAgICAgICAgZWxl
bSA6Ci0gICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPwotICAgICAgICAgICAgZWxlbS5kZWZh
dWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6Ci0gICAgICAgICAgICBmYWxzZTsKLX0KLS8v
IENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWln
aHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwotalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0
IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7Ci0gICAgalF1ZXJ5
LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0
ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKLSAgICAg
ICAgLy8gbWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCi0gICAgICAg
IGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgewotICAg
ICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0
cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCi0gICAgICAgICAgICAgICAgZXh0
cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUg
PyAibWFyZ2luIiA6ICJib3JkZXIiICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGRvYzsKLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVt
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5
aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwg
cmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiAr
IG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBHZXQgZG9j
dW1lbnQgd2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSA5ICkgewotICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVu
dDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0g
b3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZl
ciBpcyBncmVhdGVzdAotICAgICAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCB0aGlz
IGNhdXNlcyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBu
byBnb29kLCBzbWFsbCB3YXkgdG8gZml4IGl0LgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWF0aC5tYXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsg
bmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KLSAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBv
ciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNl
RmxvYXQKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFsdWUs
IGV4dHJhICkgOgotCi0gICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQg
b24gdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCB0
eXBlLCB2YWx1ZSwgZXh0cmEgKTsKLSAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1h
cmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7Ci0gICAgICAgIH07Ci0gICAgfSk7
Ci19KTsKLS8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKLXdpbmRvdy5qUXVl
cnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9k
dWxlLCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAotLy8gdW5kZXJzdGFuZCB0aGUgaXNz
dWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKLS8vIGluIGEgcGFn
ZSB0aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUK
LS8vIHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJz
aW9ucyBieQotLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVy
IGFzIGEgbmFtZWQgbW9kdWxlLAotLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQg
d2l0aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAotLy8gYnV0IG5vdCB1c2UgYSBw
cm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKLS8v
IEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0
byByZWdpc3Rlci4KLS8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1
bGUgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbQotLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBu
b3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgotLy8gRG8gdGhpcyBh
ZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0
byBjYWxsCi0vLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQg
d2lsbCB3b3JrLgotaWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5h
bWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7Ci0gICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1
bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwotfQotCi19KSggd2luZG93ICk7CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FuYWx5c2lzLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hbmFseXNpcy5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiODgwM2I1MGJiMmQ3MjA0N2M0YWE2N2JmMWZjMDYyYTUx
Mjc0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FuYWx5c2lzLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjQxICswLDAgQEAKLUFwcC5BbmFseXNpc1Rhc2sgPSBBcHAuTmFtZUxhYmVsTW9kZWwu
ZXh0ZW5kKHsKLSAgICBhdXRob3I6IERTLmF0dHIoJ3N0cmluZycpLAotICAgIGNyZWF0ZWRBdDog
RFMuYXR0cignZGF0ZScpLAotICAgIGZvcm1hdHRlZENyZWF0ZWRBdDogZnVuY3Rpb24gKCkgewot
ICAgICAgICB2YXIgZm9ybWF0ID0gZDMudGltZS5mb3JtYXQoIiVZLSVtLSVkIik7Ci0gICAgICAg
IHJldHVybiBmb3JtYXQodGhpcy5nZXQoJ2NyZWF0ZWRBdCcpKTsKLSAgICB9LnByb3BlcnR5KCdj
cmVhdGVkQXQnKSwKLSAgICBwbGF0Zm9ybTogRFMuYmVsb25nc1RvKCdwbGF0Zm9ybScpLAotICAg
IG1ldHJpYzogRFMuYmVsb25nc1RvKCdtZXRyaWMnKSwKLSAgICBzdGFydFJ1bjogRFMuYXR0cign
bnVtYmVyJyksCi0gICAgZW5kUnVuOiBEUy5hdHRyKCdudW1iZXInKSwKLSAgICBidWdzOiBEUy5o
YXNNYW55KCdidWdzJyksCi0gICAgYnVpbGRSZXF1ZXN0Q291bnQ6IERTLmF0dHIoJ251bWJlcicp
LAotICAgIGZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQ6IERTLmF0dHIoJ251bWJlcicpLAotICAg
IHJlc3VsdDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgbmVlZGVkOiBEUy5hdHRyKCdudW1iZXIn
KSwgLy8gRFMuYXR0cignYm9vbGVhbicpIHRyZWF0cyBudWxsIGFzIGZhbHNlLgotICAgIHNhdmVT
dGF0dXM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1cm4gUHJpdmlsZWdlZEFQSS5z
ZW5kUmVxdWVzdCgndXBkYXRlLWFuYWx5c2lzLXRhc2snLCB7Ci0gICAgICAgICAgICB0YXNrOiB0
aGlzLmdldCgnaWQnKSwKLSAgICAgICAgICAgIHJlc3VsdDogdGhpcy5nZXQoJ3Jlc3VsdCcpLAot
ICAgICAgICAgICAgbmVlZGVkOiB0aGlzLmdldCgnbmVlZGVkJyksCi0gICAgICAgIH0pOwotICAg
IH0sCi0gICAgc3RhdHVzTGFiZWw6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgdG90
YWwgPSB0aGlzLmdldCgnYnVpbGRSZXF1ZXN0Q291bnQnKTsKLSAgICAgICAgdmFyIGZpbmlzaGVk
ID0gdGhpcy5nZXQoJ2ZpbmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQnKTsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IHRoaXMuZ2V0KCdyZXN1bHQnKTsKLSAgICAgICAgaWYgKHJlc3VsdCAmJiB0b3RhbCA9
PSBmaW5pc2hlZCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuY2FwaXRhbGl6ZSgpOwotICAg
ICAgICBpZiAoIXRvdGFsKQotICAgICAgICAgICAgcmV0dXJuICdFbXB0eSc7Ci0gICAgICAgIGlm
ICh0b3RhbCAhPSBmaW5pc2hlZCkKLSAgICAgICAgICAgIHJldHVybiBmaW5pc2hlZCArICcgb3V0
IG9mICcgKyB0b3RhbDsKLSAgICAgICAgcmV0dXJuICdEb25lJzsKLSAgICB9LnByb3BlcnR5KCdi
dWlsZFJlcXVlc3RDb3VudCcsICdmaW5pc2hlZEJ1aWxkUmVxdWVzdENvdW50JyksCi0gICAgdGVz
dEdyb3VwczogZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9sZFZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuc3RvcmUuZmluZCgndGVzdEdyb3VwJywge3Rhc2s6IHRoaXMuZ2V0KCdpZCcp
fSk7Ci0gICAgfS5wcm9wZXJ0eSgpLAotICAgIHRyaWdnZXJhYmxlOiBmdW5jdGlvbiAoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZmluZCgndHJpZ2dlcmFibGUnLCB7dGFzazog
dGhpcy5nZXQoJ2lkJyl9KS50aGVuKGZ1bmN0aW9uICh0cmlnZ2VyYWJsZXMpIHsKLSAgICAgICAg
ICAgIHJldHVybiB0cmlnZ2VyYWJsZXMub2JqZWN0QXQoMCk7Ci0gICAgICAgIH0sIGZ1bmN0aW9u
IChlcnJvcikgewotICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBmZXRjaCB0cmln
Z2VyYWJsZXMnLCBlcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSk7
Ci0gICAgfS5wcm9wZXJ0eSgpLAotICAgIGxhYmVsOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgdmFyIGxhYmVsID0gdGhpcy5nZXQoJ25hbWUnKTsKLSAgICAgICAgdmFyIGJ1Z3MgPSB0aGlz
LmdldCgnYnVncycpLm1hcChmdW5jdGlvbiAoYnVnKSB7IHJldHVybiBidWcuZ2V0KCdsYWJlbCcp
OyB9KS5qb2luKCcgLyAnKTsKLSAgICAgICAgcmV0dXJuIGJ1Z3MgPyBsYWJlbCArICcgKCcgKyBi
dWdzICsgJyknIDogbGFiZWw7Ci0gICAgfS5wcm9wZXJ0eSgnbmFtZScsICdidWdzJyksCi19KTsK
LQotQXBwLkJ1ZyA9IEFwcC5Nb2RlbC5leHRlbmQoewotICAgIHRhc2s6IERTLmJlbG9uZ3NUbygn
QW5hbHlzaXNUYXNrJyksCi0gICAgYnVnVHJhY2tlcjogRFMuYmVsb25nc1RvKCdCdWdUcmFja2Vy
JyksCi0gICAgY3JlYXRlZEF0OiBEUy5hdHRyKCdkYXRlJyksCi0gICAgbnVtYmVyOiBEUy5hdHRy
KCdudW1iZXInKSwKLSAgICB1cmw6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
Z2V0KCdidWdUcmFja2VyJykudXJsRnJvbUJ1Z051bWJlcih0aGlzLmdldCgnbnVtYmVyJykpOwot
ICAgIH0ucHJvcGVydHkoJ2J1Z1RyYWNrZXIuYnVnVXJsJywgJ251bWJlcicpLAotICAgIGxhYmVs
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgnYnVnVHJhY2tlcicpLmdl
dCgnbGFiZWwnKSArICc6ICcgKyB0aGlzLmdldCgnbnVtYmVyJyk7Ci0gICAgfS5wcm9wZXJ0eSgn
bmFtZScsICdidWdUcmFja2VyJyksCi19KTsKLQotLy8gRklYTUU6IFVzZSBEUy5SRVNUQWRhcHRl
ciBpbnN0ZWFkLgotQXBwLkFuYWx5c2lzVGFzay5jcmVhdGUgPSBmdW5jdGlvbiAobmFtZSwgc3Rh
cnRNZWFzdXJlbWVudCwgZW5kTWVhc3VyZW1lbnQpCi17Ci0gICAgcmV0dXJuIFByaXZpbGVnZWRB
UEkuc2VuZFJlcXVlc3QoJ2NyZWF0ZS1hbmFseXNpcy10YXNrJywgewotICAgICAgICBuYW1lOiBu
YW1lLAotICAgICAgICBzdGFydFJ1bjogc3RhcnRNZWFzdXJlbWVudC5pZCgpLAotICAgICAgICBl
bmRSdW46IGVuZE1lYXN1cmVtZW50LmlkKCksCi0gICAgfSk7Ci19Ci0KLUFwcC5BbmFseXNpc1Rh
c2tBZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICBidWlsZFVSTDogZnVuY3Rp
b24gKHR5cGUsIGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuICcuLi9hcGkvYW5hbHlzaXMtdGFz
a3MvJyArIChpZCA/IGlkIDogJycpOwotICAgIH0sCi19KTsKLQotQXBwLkJ1Z0FkYXB0ZXIgPSBE
Uy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgIGNyZWF0ZVJlY29yZDogZnVuY3Rpb24gKHN0b3Jl
LCB0eXBlLCByZWNvcmQpCi0gICAgewotICAgICAgICB2YXIgcGFyYW0gPSB7Ci0gICAgICAgICAg
ICB0YXNrOiByZWNvcmQuZ2V0KCd0YXNrJykuZ2V0KCdpZCcpLAotICAgICAgICAgICAgYnVnVHJh
Y2tlcjogcmVjb3JkLmdldCgnYnVnVHJhY2tlcicpLmdldCgnaWQnKSwKLSAgICAgICAgICAgIG51
bWJlcjogcmVjb3JkLmdldCgnbnVtYmVyJyksCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBQ
cml2aWxlZ2VkQVBJLnNlbmRSZXF1ZXN0KCdhc3NvY2lhdGUtYnVnJywgcGFyYW0pLnRoZW4oZnVu
Y3Rpb24gKGRhdGEpIHsKLSAgICAgICAgICAgIHBhcmFtWydpZCddID0gZGF0YVsnYnVnSWQnXTsK
LSAgICAgICAgICAgIHJldHVybiB7J2J1Zyc6IHBhcmFtfTsKLSAgICAgICAgfSk7Ci0gICAgfSwK
LSAgICBkZWxldGVSZWNvcmQ6IGZ1bmN0aW9uIChzdG9yZSwgdHlwZSwgcmVjb3JkKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFByaXZpbGVnZWRBUEkuc2VuZFJlcXVlc3QoJ2Fzc29jaWF0ZS1idWcn
LCB7YnVnVG9EZWxldGU6IHJlY29yZC5nZXQoJ2lkJyl9KS50aGVuKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHJldHVybiB7fTsKLSAgICAgICAgfSk7Ci0gICAgfQotfSk7Ci0KLUFwcC5Sb290
ID0gQXBwLk1vZGVsLmV4dGVuZCh7Ci0gICAgcmVwb3NpdG9yeTogRFMuYmVsb25nc1RvKCdyZXBv
c2l0b3J5JyksCi0gICAgcmV2aXNpb246IERTLmF0dHIoJ3N0cmluZycpLAotfSk7Ci0KLUFwcC5S
b290U2V0ID0gQXBwLk1vZGVsLmV4dGVuZCh7Ci0gICAgcm9vdHM6IERTLmhhc01hbnkoJ3Jvb3Rz
JyksCi0gICAgcmV2aXNpb25Gb3JSZXBvc2l0b3J5OiBmdW5jdGlvbiAocmVwb3NpdG9yeSkKLSAg
ICB7Ci0gICAgICAgIHZhciByb290ID0gdGhpcy5nZXQoJ3Jvb3RzJykuZmluZEJ5KCdyZXBvc2l0
b3J5JywgcmVwb3NpdG9yeSk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICByZXR1cm4gcm9vdC5nZXQoJ3JldmlzaW9uJyk7Ci0gICAgfQotfSk7
Ci0KLUFwcC5UZXN0R3JvdXAgPSBBcHAuTmFtZUxhYmVsTW9kZWwuZXh0ZW5kKHsKLSAgICB0YXNr
OiBEUy5iZWxvbmdzVG8oJ2FuYWx5c2lzVGFzaycpLAotICAgIGF1dGhvcjogRFMuYXR0cignc3Ry
aW5nJyksCi0gICAgY3JlYXRlZEF0OiBEUy5hdHRyKCdkYXRlJyksCi0gICAgYnVpbGRSZXF1ZXN0
czogRFMuaGFzTWFueSgnYnVpbGRSZXF1ZXN0cycpLAotICAgIHJvb3RTZXRzOiBEUy5oYXNNYW55
KCdyb290U2V0cycpLAotICAgIHBsYXRmb3JtOiBEUy5iZWxvbmdzVG8oJ3BsYXRmb3JtJyksCi0g
ICAgX2ZldGNoVGVzdFJlc3VsdHM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgdGFz
ayA9IHRoaXMuZ2V0KCd0YXNrJyk7Ci0gICAgICAgIHZhciBwbGF0Zm9ybSA9IHRoaXMuZ2V0KCdw
bGF0Zm9ybScpIHx8ICh0YXNrID8gdGFzay5nZXQoJ3BsYXRmb3JtJykgOiBudWxsKQotICAgICAg
ICBpZiAoIXRhc2sgfHwgIXBsYXRmb3JtKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgcmV0dXJuIEFwcC5NYW5pZmVzdC5mZXRjaFJ1
bnNXaXRoUGxhdGZvcm1BbmRNZXRyaWModGhpcy5zdG9yZSwKLSAgICAgICAgICAgIHBsYXRmb3Jt
LmdldCgnaWQnKSwgdGFzay5nZXQoJ21ldHJpYycpLmdldCgnaWQnKSwgdGhpcy5nZXQoJ2lkJykp
LnRoZW4oCi0gICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0KSB7IHNlbGYuc2V0KCd0ZXN0UmVz
dWx0cycsIHJlc3VsdC5kYXRhKTsgfSwKLSAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTb21laG93IHRoaXMgbmV2ZXIgZ2V0cyBjYWxsZWQu
Ci0gICAgICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBmZXRjaCB0aGUgcmVzdWx0czonICsg
ZXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfSk7Ci0g
ICAgfS5vYnNlcnZlcygndGFzaycsICd0YXNrLnBsYXRmb3JtJywgJ3Rhc2subWV0cmljJywgJ3Bs
YXRmb3JtJykub24oJ2luaXQnKSwKLX0pOwotCi1BcHAuVGVzdEdyb3VwLmNyZWF0ZSA9IGZ1bmN0
aW9uIChhbmFseXNpc1Rhc2ssIG5hbWUsIHJvb3RTZXRzLCByZXBldGl0aW9uQ291bnQpCi17Ci0g
ICAgdmFyIHBhcmFtID0gewotICAgICAgICB0YXNrOiBhbmFseXNpc1Rhc2suZ2V0KCdpZCcpLAot
ICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICByb290U2V0czogcm9vdFNldHMsCi0gICAgICAg
IHJlcGV0aXRpb25Db3VudDogcmVwZXRpdGlvbkNvdW50LAotICAgIH07Ci0gICAgcmV0dXJuIFBy
aXZpbGVnZWRBUEkuc2VuZFJlcXVlc3QoJ2NyZWF0ZS10ZXN0LWdyb3VwJywgcGFyYW0pLnRoZW4o
ZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAgICAgYW5hbHlzaXNUYXNrLnNldCgndGVzdEdyb3Vwcycp
OyAvLyBSZWZldGNoIHRlc3QgZ3JvdXBzLgotICAgICAgICByZXR1cm4gYW5hbHlzaXNUYXNrLnN0
b3JlLmZpbmQoJ3Rlc3RHcm91cCcsIGRhdGFbJ3Rlc3RHcm91cElkJ10pOwotICAgIH0pOwotfQot
Ci1BcHAuVGVzdEdyb3VwQWRhcHRlciA9IERTLlJFU1RBZGFwdGVyLmV4dGVuZCh7Ci0gICAgYnVp
bGRVUkw6IGZ1bmN0aW9uICh0eXBlLCBpZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAnLi4vYXBp
L3Rlc3QtZ3JvdXBzLycgKyAoaWQgPyBpZCA6ICcnKTsKLSAgICB9LAotfSk7Ci0KLUFwcC5Ucmln
Z2VyYWJsZSA9IEFwcC5OYW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAgIGFjY2VwdGVkUmVwb3Np
dG9yaWVzOiBEUy5oYXNNYW55KCdyZXBvc2l0b3JpZXMnKSwKLX0pOwotCi1BcHAuVHJpZ2dlcmFi
bGVBZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICBidWlsZFVSTDogZnVuY3Rp
b24gKHR5cGUsIGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuICcuLi9hcGkvdHJpZ2dlcmFibGVz
LycgKyAoaWQgPyBpZCA6ICcnKTsKLSAgICB9LAotfSk7Ci0KLUFwcC5BbmFseXNpc1Rhc2tTZXJp
YWxpemVyID0gQXBwLlRlc3RHcm91cFNlcmlhbGl6ZXIgPSBBcHAuVHJpZ2dlcmFibGVTZXJpYWxp
emVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICBub3JtYWxpemVQYXlsb2FkOiBm
dW5jdGlvbiAocGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBwYXlsb2FkWydzdGF0dXMn
XTsKLSAgICAgICAgcmV0dXJuIHBheWxvYWQ7Ci0gICAgfQotfSk7Ci0KLUFwcC5CdWlsZFJlcXVl
c3QgPSBBcHAuTW9kZWwuZXh0ZW5kKHsKLSAgICB0ZXN0R3JvdXA6IERTLmJlbG9uZ3NUbygndGVz
dEdyb3VwJyksCi0gICAgb3JkZXI6IERTLmF0dHIoJ251bWJlcicpLAotICAgIG9yZGVyTGFiZWw6
IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ29yZGVyJykgKyAx
OwotICAgIH0ucHJvcGVydHkoJ29yZGVyJyksCi0gICAgcm9vdFNldDogRFMuYmVsb25nc1RvKCdy
b290U2V0JyksCi0gICAgc3RhdHVzOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICBzdGF0dXNMYWJl
bDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGhpcy5nZXQoJ3N0YXR1cycp
KSB7Ci0gICAgICAgIGNhc2UgJ3BlbmRpbmcnOgotICAgICAgICAgICAgcmV0dXJuICdXYWl0aW5n
IHRvIGJlIHNjaGVkdWxlZCc7Ci0gICAgICAgIGNhc2UgJ3NjaGVkdWxlZCc6Ci0gICAgICAgICAg
ICByZXR1cm4gJ1NjaGVkdWxlZCc7Ci0gICAgICAgIGNhc2UgJ3J1bm5pbmcnOgotICAgICAgICAg
ICAgcmV0dXJuICdSdW5uaW5nJzsKLSAgICAgICAgY2FzZSAnZmFpbGVkJzoKLSAgICAgICAgICAg
IHJldHVybiAnRmFpbGVkJzsKLSAgICAgICAgY2FzZSAnY29tcGxldGVkJzoKLSAgICAgICAgICAg
IHJldHVybiAnQ29tcGxldGVkJzsKLSAgICAgICAgfQotICAgIH0ucHJvcGVydHkoJ3N0YXR1cycp
LAotICAgIHVybDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgYnVpbGQ6IERTLmF0dHIoJ251bWJl
cicpLAotfSk7Ci0KLUFwcC5CdWlsZFJlcXVlc3QuYWdncmVnYXRlU3RhdHVzZXMgPSBmdW5jdGlv
biAocmVxdWVzdHMpCi17Ci0gICAgdmFyIGNvbXBsZXRlQ291bnQgPSAwOwotICAgIHZhciBmYWls
dXJlQ291bnQgPSAwOwotICAgIHJlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHsK
LSAgICAgICAgc3dpdGNoIChyZXF1ZXN0LmdldCgnc3RhdHVzJykpIHsKLSAgICAgICAgY2FzZSAn
ZmFpbGVkJzoKLSAgICAgICAgICAgIGZhaWx1cmVDb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6Ci0gICAgICAgICAgICBjb21wbGV0ZUNvdW50Kys7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0pOwotICAgIGlmIChjb21wbGV0
ZUNvdW50ID09IHJlcXVlc3RzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuICdEb25lJzsKLSAgICBp
ZiAoZmFpbHVyZUNvdW50ID09IHJlcXVlc3RzLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuICdBbGwg
ZmFpbGVkJzsKLSAgICB2YXIgc3RhdHVzID0gY29tcGxldGVDb3VudCArICcgb3V0IG9mICcgKyBy
ZXF1ZXN0cy5sZW5ndGggKyAnIGNvbXBsZXRlZCc7Ci0gICAgaWYgKGZhaWx1cmVDb3VudCkKLSAg
ICAgICAgc3RhdHVzICs9ICcsICcgKyBmYWlsdXJlQ291bnQgKyAnIGZhaWxlZCc7Ci0gICAgcmV0
dXJuIHN0YXR1czsKLX0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjIvYXBwLmNzcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvYXBwLmNz
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA3YjI3YWM1ZDBhYTNlY2M2NDU1Y2Y5
MGI4ZjBmMWFkMTljOGEwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FwcC5jc3MKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MDIgKzAsMCBAQAotaHRtbCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBh
ZGRpbmc6IDA7Ci19Ci1ib2R5IHsKLSAgICBmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywg
SGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBwYWRkaW5nOiAwOwotICAgIG1hcmdp
bjogMCAxcmVtOwotICAgIG1pbi13aWR0aDogNjByZW07Ci19Ci0KLQotLnBvcHVwIHsKLSAgICBt
YXJnaW46IDA7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKLX0KLQotLnBvcHVwIGgxIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAg
bWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5wb3B1cCAucG9wdXAtYnV0dG9uLAot
LmNvbnRyb2wtYnV0dG9uLAotLnN0YXJ0LXRpbWUtc2xpZGVyIHsKLSAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKLSAgICBjb2xvcjogIzY2NjsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotCi0gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTsKLSAg
ICBib3JkZXItcmFkaXVzOiAwLjNyZW07Ci0gICAgcGFkZGluZzogMC4ycmVtIDAuNXJlbTsKLX0K
LQotI2hlYWRlciB1bC5jb250cm9scyBsaTpub3QoOmZpcnN0LWNoaWxkKSAuY29udHJvbC1idXR0
b24gewotICAgIGJvcmRlci1sZWZ0OiBub25lOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6
IDA7Ci0gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKLX0KLSNoZWFkZXIgdWwuY29u
dHJvbHMgbGk6bm90KDpsYXN0LWNoaWxkKSAuY29udHJvbC1idXR0b24gewotICAgIGJvcmRlci10
b3AtcmlnaHQtcmFkaXVzOiAwOwotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwot
fQotCi0ucG9wdXAgLnBvcHVwLWJ1dHRvbjphZnRlciB7Ci0gICAgY29udGVudDogIiBcMjVCRSI7
Ci19Ci0KLS5wb3B1cCAucG9wdXAgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIG1hcmdpbjog
MDsKLX0KLQotLnBvcHVwIC5wb3B1cCAucG9wdXAtYnV0dG9uOmFmdGVyIHsKLSAgICBjb250ZW50
OiAiIFwyNUI4IjsKLX0KLQotLnBvcHVwIHVsIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgbGVmdDogMHJlbTsKLSAgICB0b3A6IDByZW07Ci0gICAg
ei1pbmRleDogOTk5OwotICAgIGJhY2tncm91bmQ6ICNmZmY7Ci0gICAgYm94LXNoYWRvdzogcmdi
YSgwLCAwLCAwLCAwLjAzKSAxcHggMXB4IDEwcHggM3B4OwotLyogICAgYm94LXNoYWRvdzogcmdi
YSgwLCAwLCAwLCAwLjAzKSAxcHggMXB4IDBweCAwcHg7Ki8KLSAgICBtYXJnaW46IDAuMnJlbSAw
OwotICAgIHBhZGRpbmc6IDAuNXJlbSAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgYm9y
ZGVyOiBzb2xpZCAxcHggIzk5OTsKLSAgICBib3JkZXItcmFkaXVzOiAwLjNyZW07Ci0gICAgd2hp
dGUtc3BhY2U6IG5vd3JhcDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotfQotCi0ucG9wdXAgLnBv
cHVwIHVsIHsKLSAgICB0b3A6IDByZW07Ci0gICAgbWFyZ2luOiAwOwotICAgIG1hcmdpbi10b3A6
IC0wLjVyZW07Ci0gICAgbWFyZ2luLWxlZnQ6IC0wLjdyZW07Ci19Ci0KLS5wb3B1cCBsaSAubGFi
ZWwgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGZvbnQtc2l6ZTogMC44cmVtOwotICAgIG1h
eC13aWR0aDogMTVyZW07Ci0gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ci0gICAgb3ZlcmZs
b3c6IGhpZGRlbjsKLX0KLQotLnBvcHVwIC5wb3B1cCBhIHsKLSAgICBkaXNwbGF5OiBibG9jazsK
LSAgICB3aWR0aDogYXV0bzsKLSAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtOwotICAgIGJvcmRl
cjogbm9uZTsKLX0KLQotLnBvcHVwIGEgewotICAgIGNvbG9yOiAjMzMzOwotICAgIHRleHQtZGVj
b3JhdGlvbjogbm9uZTsKLX0KLQotLnBvcHVwIGE6YWN0aXZlLAotLnBvcHVwIGE6Zm9jdXMgewot
ICAgIGJhY2tncm91bmQ6ICNlZWY7Ci19Ci0KLS5wb3B1cCBsaTpob3ZlciB7Ci0gICAgYmFja2dy
b3VuZDogI2VlZTsKLX0KLQotCi0uaWNvbi1idXR0b24gewotICAgIHdpZHRoOiAxcmVtOwotICAg
IGhlaWdodDogMXJlbTsKLX0KLS5pY29uLWJ1dHRvbiBnIHsKLSAgICBzdHJva2U6ICNjY2M7Ci0g
ICAgZmlsbDogI2NjYzsKLX0KLS5pY29uLWJ1dHRvbjpob3ZlciBnIHsKLSAgICBzdHJva2U6ICM2
NjY7Ci0gICAgZmlsbDogIzY2NjsKLX0KLS5kaXNhYmxlZCAuaWNvbi1idXR0b246aG92ZXIgZyB7
Ci0gICAgc3Ryb2tlOiAjY2NjOwotICAgIGZpbGw6ICNjY2M7Ci19Ci0KLQotI2hlYWRlciB7Ci0g
ICAgbWFyZ2luOiAwIDAgMXJlbSAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7Ci0gICAg
Ym9yZGVyLXJhZGl1czogMC4zcmVtOwotICAgIGJhY2tncm91bmQ6ICNmZmY7Ci0gICAgYm94LXNo
YWRvdzogcmdiYSgwLCAwLCAwLCAwLjA1KSAwcHggMXB4IDNweCAwcHg7Ci0gICAgYm9yZGVyLXRv
cDogbm9uZTsKLSAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwotICAgIGJvcmRlci10b3At
cmlnaHQtcmFkaXVzOiAwOwotICAgIGNvbG9yOiAjODg4OwotICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKLX0KLQotI25hdmlnYXRpb24gewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLX0KLQot
I25hdmlnYXRpb24gaDEsCi0jbmF2aWdhdGlvbiB1bCwKLSNuYXZpZ2F0aW9uIGxpLAotI2hlYWRl
ciB1bC5jb250cm9scyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgZm9u
dC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBsaW5lLWhlaWdodDogM3JlbTsKLX0KLSNuYXZpZ2F0aW9u
IGEgewotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0K
LSNuYXZpZ2F0aW9uIGgxIHsKLSAgICBmb250LXNpemU6IDEuM3JlbTsKLSAgICBtYXJnaW4tbGVm
dDogMC41cmVtOwotICAgIGRpc3BsYXk6IGlubGluZTsKLSAgICBjb2xvcjogI2M5MzsKLX0KLSNu
YXZpZ2F0aW9uIHVsLAotI2hlYWRlciB1bC5jb250cm9scyB7Ci0gICAgZGlzcGxheTogaW5saW5l
LWJsb2NrOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci0jbmF2aWdhdGlvbiB1bCB7Ci0gICAg
dmVydGljYWwtYWxpZ246IGJvdHRvbTsKLSAgICBtYXJnaW4tbGVmdDogNHJlbTsKLSAgICBtYXJn
aW4tcmlnaHQ6IDIuNXJlbTsKLX0KLSNoZWFkZXIgdWwuY29udHJvbHMgewotICAgIG1hcmdpbjog
MCAxLjVyZW07Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLSAgICBwYWRkaW5nLXRvcDogMC45
NXJlbTsKLSAgICBmb250LXNpemU6IDAuOHJlbTsKLSAgICBsaW5lLWhlaWdodDogMXJlbTsKLX0K
LSNuYXZpZ2F0aW9uIGxpLAotI2hlYWRlciB1bC5jb250cm9scyA+IGxpIHsKLSAgICBkaXNwbGF5
OiBibG9jazsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzog
MDsKLX0KLSNuYXZpZ2F0aW9uIGxpIGEgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIGJvcmRl
cjogc29saWQgMXB4ICM5OTk7Ci0gICAgYm9yZGVyLWJvdHRvbTogMHB4OwotICAgIGJvcmRlci1y
YWRpdXM6IDAuM3JlbTsKLSAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwotICAgIGJv
cmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwotICAgIHBhZGRpbmc6IDAuNXJlbTsKLSAgICBt
YXJnaW46IDA7Ci0gICAgbGluZS1oZWlnaHQ6IDFyZW07Ci19Ci0jbmF2aWdhdGlvbiBsaTpub3Qo
Omxhc3Qtb2YtdHlwZSkgYSB7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Ci0gICAg
Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7Ci0gICAgYm9yZGVyLXJpZ2h0OiAwOwotfQot
I25hdmlnYXRpb24gbGk6bm90KDpmaXJzdC1vZi10eXBlKSBhIHsKLSAgICBib3JkZXItdG9wLWxl
ZnQtcmFkaXVzOiAwOwotICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7Ci19Ci0jbmF2
aWdhdGlvbiBsaS5hY3RpdmUgYSwKLSNoZWFkZXIgdWwuY29udHJvbHMgbGkuYWN0aXZlIC5jb250
cm9sLWJ1dHRvbiB7Ci0gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0OwotICAgIGNvbG9yOiAjMDAw
OwotfQotCi0jbmF2aWdhdGlvbiBsaTpub3QoLmFjdGl2ZSkgYTpob3ZlciwKLSNuYXZpZ2F0aW9u
IGxpOm5vdCguYWN0aXZlKSBhOmFjdGl2ZSwKLSNoZWFkZXIgdWwuY29udHJvbHMgPiBsaTpub3Qo
LmFjdGl2ZSkgPiBhOmhvdmVyLAotI2hlYWRlciB1bC5jb250cm9scyA+IGxpOm5vdCguYWN0aXZl
KSA+IGE6YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIwNCwgMTUzLCA1MSwg
MC4xKTsKLX0KLQotCi0KLS5zdGFydC10aW1lLXNsaWRlciB7Ci0gICAgbGluZS1oZWlnaHQ6IDFl
bTsKLX0KLQotLnN0YXJ0LXRpbWUtc2xpZGVyIGxhYmVsIHsKLSAgICBkaXNwbGF5OiBibG9jazsK
LX0KLQotLnN0YXJ0LXRpbWUtc2xpZGVyIGlucHV0IHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlk
ZGxlOwotICAgIGhlaWdodDogMC44cmVtOwotfQotCi0uc3RhcnQtdGltZS1zbGlkZXIgLm51bWJl
ck9mRGF5cyB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHRleHQtYWxpZ246IHJp
Z2h0OwotICAgIHdpZHRoOiAxLjVyZW07Ci19Ci0KLQotCi0KLS5zcGlubmVyIHsKLSAgICB3aWR0
aDogMnJlbTsKLSAgICBoZWlnaHQ6IDJyZW07Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZVooMCk7Ci19Ci0uc3Bpbm5lciBsaW5lIHsKLSAgICBhbmltYXRpb246IHNwaW5uZXItYW5p
bWF0aW9uIDEuNnMgbGluZWFyIGluZmluaXRlOwotICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzcGlu
bmVyLWFuaW1hdGlvbiAxLjZzIGxpbmVhciBpbmZpbml0ZTsKLSAgICBvcGFjaXR5OiAwLjE7Ci19
Ci0uc3Bpbm5lciBsaW5lOm50aC1jaGlsZCgwKSB7Ci0gICAgLXdlYmtpdC1hbmltYXRpb24tZGVs
YXk6IDAuMHM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjBzOwotfQotLnNwaW5uZXIgbGluZTpu
dGgtY2hpbGQoMSkgewotICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjJzOwotICAgIGFu
aW1hdGlvbi1kZWxheTogMC4yczsKLX0KLS5zcGlubmVyIGxpbmU6bnRoLWNoaWxkKDIpIHsKLSAg
ICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC40czsKLSAgICBhbmltYXRpb24tZGVsYXk6IDAu
NHM7Ci19Ci0uc3Bpbm5lciBsaW5lOm50aC1jaGlsZCgzKSB7Ci0gICAgLXdlYmtpdC1hbmltYXRp
b24tZGVsYXk6IDAuNnM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjZzOwotfQotLnNwaW5uZXIg
bGluZTpudGgtY2hpbGQoNCkgewotICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjhzOwot
ICAgIGFuaW1hdGlvbi1kZWxheTogMC44czsKLX0KLS5zcGlubmVyIGxpbmU6bnRoLWNoaWxkKDUp
IHsKLSAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMXM7Ci0gICAgYW5pbWF0aW9uLWRlbGF5
OiAxczsKLX0KLS5zcGlubmVyIGxpbmU6bnRoLWNoaWxkKDYpIHsKLSAgICAtd2Via2l0LWFuaW1h
dGlvbi1kZWxheTogMS4yczsKLSAgICBhbmltYXRpb24tZGVsYXk6IDEuMnM7Ci19Ci0uc3Bpbm5l
ciBsaW5lOm50aC1jaGlsZCg3KSB7Ci0gICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDEuNHM7
Ci0gICAgYW5pbWF0aW9uLWRlbGF5OiAxLjRzOwotfQotLnNwaW5uZXIgbGluZTpudGgtY2hpbGQo
OCkgewotICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAxLjZzOwotICAgIGFuaW1hdGlvbi1k
ZWxheTogMS42czsKLX0KLUAtd2Via2l0LWtleWZyYW1lcyBzcGlubmVyLWFuaW1hdGlvbiB7Ci0g
ICAgMCUgeyBvcGFjaXR5OiAwLjk7IH0KLSAgICA1MCUgeyBvcGFjaXR5OiAwLjE7IH0KLSAgICAx
MDAlIHsgb3BhY2l0eTogMC4xOyB9Ci19Ci0KLQotdGFibGUuZGFzaGJvYXJkIHsKLSAgICBib3Jk
ZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIHRhYmxlLWxheW91dDogZml4ZWQ7Ci0gICAgY29s
b3I6ICM5OTk7Ci0gICAgd2lkdGg6IDEwMCU7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZCB0aCwKLXRh
YmxlLmRhc2hib2FyZCB0ZCB7Ci0gICAgYm9yZGVyOiBzb2xpZCAwcHggI2Q5ZDlkOTsKLSAgICBw
YWRkaW5nOiAwLjJyZW0gMC41cmVtOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBwb3Np
dGlvbjogcmVsYXRpdmU7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZCB0aGVhZCB0aCwKLXRhYmxlLmRh
c2hib2FyZCB0aGVhZCB0ZCB7Ci0gICAgcGFkZGluZzogMC41cmVtOwotfQotLyoKLXRhYmxlLmRh
c2hib2FyZCB0aGVhZCB0aDpudGgtY2hpbGQob2RkKSwKLXRhYmxlLmRhc2hib2FyZCB0Ym9keSB0
ZDpudGgtY2hpbGQoZXZlbikgewotfQotKi8KLXRhYmxlLmRhc2hib2FyZCBpbnB1dCB7Ci0gICAg
Zm9udC1zaXplOiAxcmVtOwotICAgIHdpZHRoOiAxMnJlbTsKLSAgICBoZWlnaHQ6IDFyZW07Ci0g
ICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIG1hcmdpbjogMC41cmVtIDAuM3JlbTsKLX0KLQot
dGFibGUuZGFzaGJvYXJkIHRoIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIGZvbnQt
c2l6ZTogMXJlbTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIGNvbG9yOiAjZjk2Owot
fQotCi10YWJsZS5kYXNoYm9hcmQgdGhlYWQgdGggewotICAgIGhlaWdodDogMXJlbTsKLX0KLQot
dGFibGUuZGFzaGJvYXJkLnJlYWRvbmx5IHRoZWFkIHRkLAotdGFibGUuZGFzaGJvYXJkLnJlYWRv
bmx5IHRib2R5IHRoIHsKLSAgICB3aWR0aDogMXJlbTsKLSAgICBwYWRkaW5nOiAwLjJyZW0gMC41
cmVtOwotfQotCi10YWJsZS5kYXNoYm9hcmQgdGJvZHkgdGggewotICAgIGhlaWdodDogMTJyZW07
Ci19Ci0KLXRhYmxlLmRhc2hib2FyZC5yZWFkb25seSB0Ym9keSB0aCAubGFiZWwgewotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGRpc3Bs
YXk6IGJsb2NrOwotICAgIHdpZHRoOiAxMi40cmVtOwotICAgIGhlaWdodDogMnJlbTsKLSAgICBs
aW5lLWhlaWdodDogMnJlbTsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotICAgIC13ZWJr
aXQtdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGUoLTUwJSwgMCk7Ci0gICAgLXdl
YmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7Ci0gICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVn
KSB0cmFuc2xhdGUoLTUwJSwgMCk7Ci0gICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwotfQotCi10
YWJsZS5kYXNoYm9hcmQuZWRpdE1vZGUgYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwot
ICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZC5lZGl0TW9k
ZSB0Ym9keSB0aCBhIHsKLSAgICBtYXJnaW4tbGVmdDogMC4zcmVtOwotfQotCi10YWJsZS5kYXNo
Ym9hcmQuZWRpdE1vZGUgaW5wdXQgewotICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMHB4
IHJnYmEoMCwgMCwgMCwgMC4wNSk7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggIzk5OTsKLSAgICBw
YWRkaW5nOiAwLjJyZW07Ci0gICAgYm9yZGVyLXJhZGl1czogMC4ycmVtOwotfQotCi10YWJsZS5k
YXNoYm9hcmQgdGJvZHkgdGQgYS5yZXNldCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAg
IHRvcDogMC41cmVtOwotICAgIGxlZnQ6IDAuNXJlbTsKLX0KLXRhYmxlLmRhc2hib2FyZC5lZGl0
TW9kZSB0Ym9keSB0ZCB7Ci0gICAgcGFkZGluZy1sZWZ0OiAycmVtOwotfQotdGFibGUuZGFzaGJv
YXJkIHRib2R5IHRkIGEucmVzZXQgc3ZnIHsKLSAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKLX0KLQot
dGFibGUuZGFzaGJvYXJkIHRib2R5IHRkIC5jaGFydCB7Ci0gICAgYm9yZGVyOiBzb2xpZCAwcHgg
I2RkZDsKLSAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07Ci0gICAgbWFyZ2luOiAwLjVyZW0gMC41
cmVtOwotfQotCi10YWJsZS5kYXNoYm9hcmQgdGJvZHkgdGQgLmNoYXJ0LAotdGFibGUuZGFzaGJv
YXJkIHRib2R5IHRkIC5wcm9ncmVzcyB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAg
IHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTJyZW07Ci0gICAgbGluZS1oZWlnaHQ6IDEycmVt
OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLXRhYmxlLmRhc2hib2FyZCB0Ym9k
eSB0ZCAuZmFpbHVyZSB7Ci0gICAgZGlzcGxheTogdGFibGUtY2VsbDsKLSAgICB3aWR0aDogMTAw
JTsKLSAgICBoZWlnaHQ6IDEycmVtOwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0K
LS5jaGFydC1wYW5lLAotLmFuYWx5c2lzLWdyb3VwIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAj
YmJiOwotICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTsKLSAgICBib3gtc2hhZG93OiByZ2JhKDAs
IDAsIDAsIDAuMDMpIDFweCAxcHggMHB4IDBweDsKLSAgICBwYWRkaW5nOiAwOwotICAgIG1hcmdp
bi1ib3R0b206IDFyZW07Ci0gICAgb3V0bGluZTogbm9uZTsKLSAgICBwb3NpdGlvbjogcmVsYXRp
dmU7Ci19Ci0KLWZvcm0gLmFuYWx5c2lzLWdyb3VwID4gKiB7Ci0gICAgbWFyZ2luOiAwLjVyZW07
Ci19Ci0KLWZvcm0gLmFuYWx5c2lzLWdyb3VwIFtuYW1lPWN1c3RvbVZhbHVlXSB7Ci0gICAgZGlz
cGxheTogYmxvY2s7Ci19Ci0KLSNhbmFseXNpcy10YXNrcywKLS5hbmFseXNpcy1ncm91cCB0YWJs
ZSB7Ci0gICAgYm9yZGVyOiBzb2xpZCAwcHggIzk5OTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNv
bGxhcHNlOwotfQotCi0jYW5hbHlzaXMtdGFza3MgdGhlYWQsCi0uYW5hbHlzaXMtZ3JvdXAgdGFi
bGUgdGhlYWQgewotICAgIGNvbG9yOiAjYzkzOwotfQotCi0jYW5hbHlzaXMtdGFza3MgdGgsCi0u
YW5hbHlzaXMtZ3JvdXAgdGFibGUgdGggewotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0K
LSNhbmFseXNpcy10YXNrcyB0ZCwKLSNhbmFseXNpcy10YXNrcyB0aCwKLS5hbmFseXNpcy1ncm91
cCB0YWJsZSB0ZCwKLS5hbmFseXNpcy1ncm91cCB0YWJsZSB0aCB7Ci0gICAgcGFkZGluZzogMC4y
cmVtIDAuNXJlbTsKLX0KLQotI2FuYWx5c2lzLXRhc2tzIC5zdGF0dXMsCi0jYW5hbHlzaXMtdGFz
a3MgLmF1dGhvciwKLSNhbmFseXNpcy10YXNrcyAuY3JlYXRlZC1hdCwKLSNhbmFseXNpcy10YXNr
cyAucGxhdGZvcm0tbmFtZSB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotI2FuYWx5
c2lzLXRhc2tzIC50ZXN0LW5hbWUgewotfQotCi0jYW5hbHlzaXMtdGFza3MgdGJvZHkgdGQsCi0j
YW5hbHlzaXMtdGFza3MgdGJvZHkgdGgsCi0uYW5hbHlzaXMtZ3JvdXAgdGFibGUgdGJvZHkgdGQs
Ci0uYW5hbHlzaXMtZ3JvdXAgdGFibGUgdGJvZHkgdGggewotICAgIGJvcmRlci10b3A6IHNvbGlk
IDFweCAjZGRkOwotfQotCi0uYW5hbHlzaXMtZ3JvdXAgdGFibGUgLnN1bW1hcnkgdGQgewotICAg
IHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLS5hbmFseXNpcy1ncm91cCB0YWJsZSB0aGVhZCB0
ZCB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0uYW5hbHlzaXMtZ3JvdXAgdGFibGUg
LmNvbmZpZy1sZXR0ZXIsCi0uYW5hbHlzaXMtZ3JvdXAgdGFibGUgLnN1bW1hcnkgewotICAgIGN1
cnNvcjogcG9pbnRlcjsKLX0KLQotLmFuYWx5c2lzLWdyb3VwIC5yZXN1bHRzIC5yZXF1ZXN0IC5j
b25maWctbGV0dGVyIHsKLSAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwotfQotCi0uYW5h
bHlzaXMtZ3JvdXAgLnJlc3VsdHMgLmhpZGVSZXF1ZXN0cyAucmVxdWVzdCB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotLmFuYWx5c2lzLWdyb3VwIC50YWJsZS1jb250YWluZXIgewotICAgIG1h
cmdpbjogMC41cmVtOwotICAgIG1hcmdpbi1yaWdodDogMTlyZW07Ci0gICAgb3ZlcmZsb3c6IHNj
cm9sbDsKLX0KLQotLmFuYWx5c2lzLWdyb3VwIC5yZWZlcmVuY2UtY2hhcnQgewotICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEuOHJlbTsKLSAgICByaWdodDogMHJlbTsKLSAgICB3
aWR0aDogMTlyZW07Ci0gICAgaGVpZ2h0OiA1cmVtOwotfQotCi0uYW5hbHlzaXMtZ3JvdXAgLnJl
ZmVyZW5jZS1jaGFydCAuY2hhcnQgewotICAgIHdpZHRoOiAxMDAlOwotICAgIGhlaWdodDogMTAw
JTsKLX0KLQotLmJveC1wbG90IHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgd2lk
dGg6IDEwMHB4OwotICAgIGhlaWdodDogMC42cmVtOwotICAgIGJvcmRlcjogc29saWQgMXB4ICNk
ZGQ7Ci0gICAgcGFkZGluZzogMXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0K
LS5ib3gtcGxvdCAucGVyY2VudGFnZSB7Ci0gICAgZmlsbDogI2NjYzsKLX0KLQotLmJveC1wbG90
IC5kZWx0YSB7Ci0gICAgZmlsbDogIzMzMzsKLSAgICBvcGFjaXR5OiAwLjU7Ci19Ci0KLS5ib3gt
cGxvdCBzdmcgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0jYW5hbHlzaXMtdGFzay10aXRs
ZSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBmb250LXNpemU6IDEuMnJlbTsKLSAg
ICBtYXJnaW46IDAgMCAwIDAuNXJlbTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0jYW5hbHlzaXMt
dGFzay10ZXN0bmFtZSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBmb250LXNpemU6
IDFyZW07Ci0gICAgbWFyZ2luOiAwIDAgMXJlbSAwLjVyZW07Ci0gICAgcGFkZGluZzogMDsKLSAg
ICBjb2xvcjogIzMzMzsKLX0KLQotLmFuYWx5c2lzLWdyb3VwID4gaDEgewotICAgIGZvbnQtc2l6
ZTogMS4xcmVtOwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgdGV4dC1hbGlnbjogbGVm
dDsKLSAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNv
bGlkICNiYmI7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07Ci19
Ci0KLS5hbmFseXNpcy1ncm91cCBoMSA+IGlucHV0IHsKLSAgICBmb250LXNpemU6IDFyZW07Ci0g
ICAgbWluLXdpZHRoOiAyMHJlbTsKLSAgICBtYXJnaW46IDAuMnJlbSAwOwotfQotCi0uYW5hbHlz
aXMtYnVncyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLS5hbmFseXNp
cy1idWdzIHRoIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHRleHQtYWxpZ246IHJp
Z2h0OwotICAgIHdpZHRoOiA4cmVtOwotfQotCi0uYW5hbHlzaXMtYnVncyB0ZCB7Ci0gICAgZm9u
dC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIGZvbnQtc2l6ZTog
MC45cmVtOwotfQotCi0uYW5hbHlzaXMtYnVncyAuaWNvbi1idXR0b24gewotICAgIG1hcmdpbi1s
ZWZ0OiAwLjJyZW07Ci0gICAgd2lkdGg6IDAuOHJlbTsKLSAgICBoZWlnaHQ6IDAuOHJlbTsKLX0K
LQotLmFuYWx5c2lzLWJ1Z3MgLmhpZGRlbiB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvYXBwLmpzIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk4N2U2YjZhNjU0ODYzMjcwYmNjNGZhMTNkNGFlZmExMjQ4MzBlNjMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQ4ICswLDAg
QEAKLXdpbmRvdy5BcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKLQotQXBwLlJvdXRl
ci5tYXAoZnVuY3Rpb24gKCkgewotICAgIHRoaXMucmVzb3VyY2UoJ2N1c3RvbURhc2hib2FyZCcs
IHtwYXRoOiAnZGFzaGJvYXJkL2N1c3RvbSd9KTsKLSAgICB0aGlzLnJlc291cmNlKCdkYXNoYm9h
cmQnLCB7cGF0aDogJ2Rhc2hib2FyZC86bmFtZSd9KTsKLSAgICB0aGlzLnJlc291cmNlKCdjaGFy
dHMnLCB7cGF0aDogJ2NoYXJ0cyd9KTsKLSAgICB0aGlzLnJlc291cmNlKCdhbmFseXNpcycsIHtw
YXRoOiAnYW5hbHlzaXMnfSk7Ci0gICAgdGhpcy5yZXNvdXJjZSgnYW5hbHlzaXNUYXNrJywge3Bh
dGg6ICdhbmFseXNpcy90YXNrLzp0YXNrSWQnfSk7Ci19KTsKLQotQXBwLkRhc2hib2FyZFJvdyA9
IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgIGhlYWRlcjogbnVsbCwKLSAgICBjZWxsczogW10s
Ci0KLSAgICBpbml0OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3VwZXIoKTsK
LQotICAgICAgICB2YXIgY2VsbHNJbmZvID0gdGhpcy5nZXQoJ2NlbGxzSW5mbycpIHx8IFtdOwot
ICAgICAgICB2YXIgY29sdW1uQ291bnQgPSB0aGlzLmdldCgnY29sdW1uQ291bnQnKTsKLSAgICAg
ICAgd2hpbGUgKGNlbGxzSW5mby5sZW5ndGggPCBjb2x1bW5Db3VudCkKLSAgICAgICAgICAgIGNl
bGxzSW5mby5wdXNoKFtdKTsKLQotICAgICAgICB0aGlzLnNldCgnY2VsbHMnLCBjZWxsc0luZm8u
bWFwKHRoaXMuX2NyZWF0ZVBhbmUuYmluZCh0aGlzKSkpOwotICAgIH0sCi0gICAgYWRkUGFuZTog
ZnVuY3Rpb24gKHBhbmVJbmZvKQotICAgIHsKLSAgICAgICAgdmFyIHBhbmUgPSB0aGlzLl9jcmVh
dGVQYW5lKHBhbmVJbmZvKTsKLSAgICAgICAgdGhpcy5nZXQoJ2NlbGxzJykucHVzaE9iamVjdChw
YW5lKTsKLSAgICAgICAgdGhpcy5zZXQoJ2NvbHVtbkNvdW50JywgdGhpcy5nZXQoJ2NvbHVtbkNv
dW50JykgKyAxKTsKLSAgICB9LAotICAgIF9jcmVhdGVQYW5lOiBmdW5jdGlvbiAocGFuZUluZm8p
Ci0gICAgewotICAgICAgICBpZiAoIXBhbmVJbmZvIHx8ICFwYW5lSW5mby5sZW5ndGggfHwgKCFw
YW5lSW5mb1swXSAmJiAhcGFuZUluZm9bMV0pKQotICAgICAgICAgICAgcGFuZUluZm8gPSBudWxs
OwotCi0gICAgICAgIHZhciBwYW5lID0gQXBwLlBhbmUuY3JlYXRlKHsKLSAgICAgICAgICAgIHN0
b3JlOiB0aGlzLmdldCgnc3RvcmUnKSwKLSAgICAgICAgICAgIHBsYXRmb3JtSWQ6IHBhbmVJbmZv
ID8gcGFuZUluZm9bMF0gOiBudWxsLAotICAgICAgICAgICAgbWV0cmljSWQ6IHBhbmVJbmZvID8g
cGFuZUluZm9bMV0gOiBudWxsLAotICAgICAgICAgICAgaW5EYXNoYm9hcmQ6IHRydWUKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIEFwcC5EYXNoYm9hcmRQYW5lUHJveHlGb3JQaWNrZXIu
Y3JlYXRlKHtjb250ZW50OiBwYW5lfSk7Ci0gICAgfSwKLX0pOwotCi1BcHAuRGFzaGJvYXJkUGFu
ZVByb3h5Rm9yUGlja2VyID0gRW1iZXIuT2JqZWN0UHJveHkuZXh0ZW5kKHsKLSAgICBfcGxhdGZv
cm1Pck1ldHJpY0lkQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxm
ID0gdGhpczsKLSAgICAgICAgQXBwLmJ1aWxkUG9wdXAodGhpcy5nZXQoJ3N0b3JlJyksICdjaG9v
c2VQYW5lJywgdGhpcykKLSAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChwbGF0Zm9ybXMpIHsg
c2VsZi5zZXQoJ3BpY2tlckRhdGEnLCBwbGF0Zm9ybXMpOyB9KTsKLSAgICB9Lm9ic2VydmVzKCdw
bGF0Zm9ybUlkJywgJ21ldHJpY0lkJykub24oJ2luaXQnKSwKLSAgICBwYW5lTGlzdDogZnVuY3Rp
b24gKCkgewotICAgICAgICByZXR1cm4gQXBwLmVuY29kZVByZXR0aWZpZWRKU09OKFtbdGhpcy5n
ZXQoJ3BsYXRmb3JtSWQnKSwgdGhpcy5nZXQoJ21ldHJpY0lkJyksIG51bGwsIG51bGwsIG51bGws
IG51bGwsIG51bGxdXSk7Ci0gICAgfS5wcm9wZXJ0eSgncGxhdGZvcm1JZCcsICdtZXRyaWNJZCcp
LAotfSk7Ci0KLUFwcC5JbmRleFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICBiZWZv
cmVNb2RlbDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAg
ICAgICAgQXBwLk1hbmlmZXN0LmZldGNoKHRoaXMuc3RvcmUpLnRoZW4oZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgc2VsZi50cmFuc2l0aW9uVG8oJ2Rhc2hib2FyZCcsIEFwcC5NYW5pZmVzdC5k
ZWZhdWx0RGFzaGJvYXJkTmFtZSgpIHx8ICcnKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLX0pOwot
Ci1BcHAuRGFzaGJvYXJkUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgIG1vZGVsOiBm
dW5jdGlvbiAocGFyYW0pCi0gICAgewotICAgICAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmZldGNo
KHRoaXMuc3RvcmUpLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIEFwcC5N
YW5pZmVzdC5kYXNoYm9hcmRCeU5hbWUocGFyYW0ubmFtZSk7Ci0gICAgICAgIH0pOwotICAgIH0s
Ci19KTsKLQotQXBwLkN1c3RvbURhc2hib2FyZFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICBjb250cm9sbGVyTmFtZTogJ2Rhc2hib2FyZCcsCi0gICAgbW9kZWw6IGZ1bmN0aW9uIChw
YXJhbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZVJlY29yZCgnZGFz
aGJvYXJkJywge3NlcmlhbGl6ZWQ6IHBhcmFtLmdyaWR9KTsKLSAgICB9LAotICAgIHJlbmRlclRl
bXBsYXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLnJlbmRlcignZGFzaGJvYXJk
Jyk7Ci0gICAgfQotfSk7Ci0KLUFwcC5EYXNoYm9hcmRDb250cm9sbGVyID0gRW1iZXIuQ29udHJv
bGxlci5leHRlbmQoewotICAgIHF1ZXJ5UGFyYW1zOiBbJ2dyaWQnLCAnbnVtYmVyT2ZEYXlzJ10s
Ci0gICAgaGVhZGVyQ29sdW1uczogW10sCi0gICAgcm93czogW10sCi0gICAgbnVtYmVyT2ZEYXlz
OiA3LAotICAgIGVkaXRNb2RlOiBmYWxzZSwKLQotICAgIG1vZGVsQ2hhbmdlZDogZnVuY3Rpb24g
KCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXNoYm9hcmQgPSB0aGlzLmdldCgnbW9kZWwnKTsKLSAg
ICAgICAgaWYgKCFkYXNoYm9hcmQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IGhlYWRlckNvbHVtbnMgPSBkYXNoYm9hcmQuZ2V0KCdoZWFkZXJDb2x1bW5zJyk7Ci0gICAgICAg
IHRoaXMuc2V0KCdoZWFkZXJDb2x1bW5zJywgaGVhZGVyQ29sdW1ucyk7Ci0gICAgICAgIHZhciBj
b2x1bW5Db3VudCA9IGhlYWRlckNvbHVtbnMubGVuZ3RoOwotICAgICAgICB0aGlzLnNldCgnY29s
dW1uQ291bnQnLCBjb2x1bW5Db3VudCk7Ci0KLSAgICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9y
ZTsKLSAgICAgICAgdGhpcy5zZXQoJ3Jvd3MnLCBkYXNoYm9hcmQuZ2V0KCdyb3dzJykubWFwKGZ1
bmN0aW9uIChyb3dQYXJhbSkgewotICAgICAgICAgICAgcmV0dXJuIEFwcC5EYXNoYm9hcmRSb3cu
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBzdG9yZTogc3RvcmUsCi0gICAgICAgICAgICAgICAg
aGVhZGVyOiByb3dQYXJhbVswXSwKLSAgICAgICAgICAgICAgICBjZWxsc0luZm86IHJvd1BhcmFt
LnNsaWNlKDEpLAotICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiBjb2x1bW5Db3VudCwKLSAg
ICAgICAgICAgIH0pCi0gICAgICAgIH0pKTsKLQotICAgICAgICB0aGlzLnNldCgnZW1wdHlSb3cn
LCBuZXcgQXJyYXkoY29sdW1uQ291bnQpKTsKLSAgICB9Lm9ic2VydmVzKCdtb2RlbCcpLm9uKCdp
bml0JyksCi0KLSAgICBjb21wdXRlR3JpZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IGhlYWRlcnMgPSB0aGlzLmdldCgnaGVhZGVyQ29sdW1ucycpLm1hcChmdW5jdGlvbiAoaGVhZGVy
KSB7IHJldHVybiBoZWFkZXIubGFiZWw7IH0pOwotICAgICAgICB2YXIgdGFibGUgPSBbaGVhZGVy
c10uY29uY2F0KHRoaXMuZ2V0KCdyb3dzJykubWFwKGZ1bmN0aW9uIChyb3cpIHsKLSAgICAgICAg
ICAgIHJldHVybiBbcm93LmdldCgnaGVhZGVyJyldLmNvbmNhdChyb3cuZ2V0KCdjZWxscycpLm1h
cChmdW5jdGlvbiAocGFuZSkgewotICAgICAgICAgICAgICAgIHZhciBwbGF0Zm9ybUFuZE1ldHJp
YyA9IFtwYW5lLmdldCgncGxhdGZvcm1JZCcpLCBwYW5lLmdldCgnbWV0cmljSWQnKV07Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3JtQW5kTWV0cmljWzBdIHx8IHBsYXRmb3JtQW5kTWV0
cmljWzFdID8gcGxhdGZvcm1BbmRNZXRyaWMgOiBbXTsKLSAgICAgICAgICAgIH0pKTsKLSAgICAg
ICAgfSkpOwotICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGFibGUpOwotICAgIH0sCi0K
LSAgICBfc2hhcmVkRG9tYWluQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBudW1iZXJPZkRheXMgPSB0aGlzLmdldCgnbnVtYmVyT2ZEYXlzJyk7Ci0gICAgICAgIGlmICgh
bnVtYmVyT2ZEYXlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG51bWJlck9mRGF5
cyA9IHBhcnNlSW50KG51bWJlck9mRGF5cyk7Ci0gICAgICAgIHZhciBwcmVzZW50ID0gRGF0ZS5u
b3coKTsKLSAgICAgICAgdmFyIHBhc3QgPSBwcmVzZW50IC0gbnVtYmVyT2ZEYXlzICogMjQgKiAz
NjAwICogMTAwMDsKLSAgICAgICAgdGhpcy5zZXQoJ3NpbmNlJywgcGFzdCk7Ci0gICAgICAgIHRo
aXMuc2V0KCdzaGFyZWREb21haW4nLCBbcGFzdCwgcHJlc2VudF0pOwotICAgIH0ub2JzZXJ2ZXMo
J251bWJlck9mRGF5cycpLm9uKCdpbml0JyksCi0KLSAgICBhY3Rpb25zOiB7Ci0gICAgICAgIHNl
dE51bWJlck9mRGF5czogZnVuY3Rpb24gKG51bWJlck9mRGF5cykKLSAgICAgICAgewotICAgICAg
ICAgICAgdGhpcy5zZXQoJ251bWJlck9mRGF5cycsIG51bWJlck9mRGF5cyk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIGNob29zZVBhbmU6IGZ1bmN0aW9uIChwYXJhbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFyIHBhbmUgPSBwYXJhbS5wb3NpdGlvbjsKLSAgICAgICAgICAgIHBhbmUuc2V0KCdw
bGF0Zm9ybUlkJywgcGFyYW0ucGxhdGZvcm0uZ2V0KCdpZCcpKTsKLSAgICAgICAgICAgIHBhbmUu
c2V0KCdtZXRyaWNJZCcsIHBhcmFtLm1ldHJpYy5nZXQoJ2lkJykpOwotICAgICAgICB9LAotICAg
ICAgICBhZGRDb2x1bW46IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMu
Z2V0KCdoZWFkZXJDb2x1bW5zJykucHVzaE9iamVjdCh7Ci0gICAgICAgICAgICAgICAgbGFiZWw6
IHRoaXMuZ2V0KCduZXdDb2x1bW5IZWFkZXInKSwKLSAgICAgICAgICAgICAgICBpbmRleDogdGhp
cy5nZXQoJ2hlYWRlckNvbHVtbnMnKS5sZW5ndGgsCi0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIHRoaXMuZ2V0KCdyb3dzJykuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7Ci0gICAgICAgICAg
ICAgICAgcm93LmFkZFBhbmUoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhpcy5z
ZXQoJ25ld0NvbHVtbkhlYWRlcicsIG51bGwpOwotICAgICAgICB9LAotICAgICAgICByZW1vdmVD
b2x1bW46IGZ1bmN0aW9uIChpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5nZXQo
J2hlYWRlckNvbHVtbnMnKS5yZW1vdmVBdChpbmRleCk7Ci0gICAgICAgICAgICB0aGlzLmdldCgn
cm93cycpLmZvckVhY2goZnVuY3Rpb24gKHJvdykgewotICAgICAgICAgICAgICAgIHJvdy5nZXQo
J2NlbGxzJykucmVtb3ZlQXQoaW5kZXgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIGFkZFJvdzogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5n
ZXQoJ3Jvd3MnKS5wdXNoT2JqZWN0KEFwcC5EYXNoYm9hcmRSb3cuY3JlYXRlKHsKLSAgICAgICAg
ICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSwKLSAgICAgICAgICAgICAgICBoZWFkZXI6IHRoaXMu
Z2V0KCduZXdSb3dIZWFkZXInKSwKLSAgICAgICAgICAgICAgICBjb2x1bW5Db3VudDogdGhpcy5n
ZXQoJ2NvbHVtbkNvdW50JyksCi0gICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICB0aGlzLnNl
dCgnbmV3Um93SGVhZGVyJywgbnVsbCk7Ci0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZVJvdzog
ZnVuY3Rpb24gKHJvdykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5nZXQoJ3Jvd3MnKS5y
ZW1vdmVPYmplY3Qocm93KTsKLSAgICAgICAgfSwKLSAgICAgICAgcmVzZXRQYW5lOiBmdW5jdGlv
biAocGFuZSkKLSAgICAgICAgewotICAgICAgICAgICAgcGFuZS5zZXQoJ3BsYXRmb3JtSWQnLCBu
dWxsKTsKLSAgICAgICAgICAgIHBhbmUuc2V0KCdtZXRyaWNJZCcsIG51bGwpOwotICAgICAgICB9
LAotICAgICAgICB0b2dnbGVFZGl0TW9kZTogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdGhpcy50b2dnbGVQcm9wZXJ0eSgnZWRpdE1vZGUnKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLmdldCgnZWRpdE1vZGUnKSkKLSAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ub1Jv
dXRlKCdkYXNoYm9hcmQnLCAnY3VzdG9tJywge25hbWU6IG51bGwsIHF1ZXJ5UGFyYW1zOiB7Z3Jp
ZDogdGhpcy5jb21wdXRlR3JpZCgpfX0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHRoaXMuc2V0KCdncmlkJywgdGhpcy5jb21wdXRlR3JpZCgpKTsKLSAgICAgICAgfSwKLSAg
ICB9LAotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1cGVy
KCk7Ci0gICAgICAgIEFwcC5NYW5pZmVzdC5mZXRjaCh0aGlzLmdldCgnc3RvcmUnKSk7Ci0gICAg
fQotfSk7Ci0KLUFwcC5OdW1iZXJPZkRheXNDb250cm9sVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICBjbGFzc05hbWVzOiBbJ2NvbnRyb2xzJ10sCi0gICAgdGVtcGxhdGVOYW1lOiAnbnVt
YmVyLW9mLWRheXMtY29udHJvbHMnLAotICAgIGRpZEluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB0aGlzLl9tYXRjaGluZ0VsZW1lbnRzKHRoaXMuX3ByZXZpb3VzTnVt
YmVyT2ZEYXlzQ2xhc3MpLmFkZENsYXNzKCdhY3RpdmUnKTsKLSAgICB9LAotICAgIF9udW1iZXJP
ZkRheXNDaGFuZ2VkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWF0Y2hpbmdF
bGVtZW50cyh0aGlzLl9wcmV2aW91c051bWJlck9mRGF5c0NsYXNzKS5yZW1vdmVDbGFzcygnYWN0
aXZlJyk7Ci0KLSAgICAgICAgdmFyIG5ld051bWJlck9mRGF5c0NsYXNzID0gJ251bWJlck9mRGF5
c0lzJyArIHRoaXMuZ2V0KCdudW1iZXJPZkRheXMnKTsKLSAgICAgICAgdGhpcy5fbWF0Y2hpbmdF
bGVtZW50cyh0aGlzLl9wcmV2aW91c051bWJlck9mRGF5c0NsYXNzKS5hZGRDbGFzcygnYWN0aXZl
Jyk7Ci0gICAgICAgIHRoaXMuX3ByZXZpb3VzTnVtYmVyT2ZEYXlzQ2xhc3MgPSBuZXdOdW1iZXJP
ZkRheXNDbGFzczsKLSAgICB9Lm9ic2VydmVzKCdudW1iZXJPZkRheXMnKS5vbignaW5pdCcpLAot
ICAgIF9tYXRjaGluZ0VsZW1lbnRzOiBmdW5jdGlvbiAoY2xhc3NOYW1lKQotICAgIHsKLSAgICAg
ICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldCgnZWxlbWVudCcpOwotICAgICAgICBpZiAoIWVsZW1l
bnQpCi0gICAgICAgICAgICByZXR1cm4gJChbXSk7Ci0gICAgICAgIHJldHVybiAkKGVsZW1lbnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpKTsKLSAgICB9Ci19KTsKLQotQXBwLlN0
YXJ0VGltZVNsaWRlclZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgdGVtcGxhdGVOYW1l
OiAnc3RhcnQtdGltZS1zbGlkZXInLAotICAgIGNsYXNzTmFtZXM6IFsnc3RhcnQtdGltZS1zbGlk
ZXInXSwKLSAgICBzdGFydFRpbWU6IERhdGUubm93KCkgLSA3ICogMjQgKiAzNjAwICogMTAwMCwK
LSAgICBvbGRlc3RTdGFydFRpbWU6IG51bGwsCi0gICAgX251bWJlck9mRGF5c1ZpZXc6IG51bGws
Ci0gICAgX3NsaWRlcjogbnVsbCwKLSAgICBfc3RhcnRUaW1lSW5TbGlkZXI6IG51bGwsCi0gICAg
X2N1cnJlbnROdW1iZXJPZkRheXM6IG51bGwsCi0gICAgX01JTExJU0VDT05EU19QRVJfREFZOiAy
NCAqIDM2MDAgKiAxMDAwLAotCi0gICAgZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rpb24gKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMub2xkZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKSAtIDM2NSAqIDI0
ICogMzYwMCAqIDEwMDA7Ci0gICAgICAgIHRoaXMuX3NsaWRlciA9ICQodGhpcy5nZXQoJ2VsZW1l
bnQnKSkuZmluZCgnaW5wdXQnKTsKLSAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzVmlldyA9ICQo
dGhpcy5nZXQoJ2VsZW1lbnQnKSkuZmluZCgnLm51bWJlck9mRGF5cycpOwotICAgICAgICB0aGlz
Ll9zbGlkZXJSYW5nZUNoYW5nZWQoKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLmNoYW5nZSh0aGlz
Ll9zbGlkZXJNb3ZlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotICAgIF9zbGlkZXJSYW5nZUNoYW5n
ZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgbWluaW11bU51bWJlck9mRGF5cyA9
IDE7Ci0gICAgICAgIHZhciBtYXhpbXVtTnVtYmVyT2ZEYXlzID0gdGhpcy5fdGltZUluUGFzdFRv
TnVtYmVyT2ZEYXlzKHRoaXMuZ2V0KCdvbGRlc3RTdGFydFRpbWUnKSk7Ci0gICAgICAgIHZhciBw
cmVjaXNpb24gPSAxMDAwOyAvLyBGSVhNRTogQ29tcHV0ZSB0aGlzIGZyb20gbWF4aW11bU51bWJl
ck9mRGF5cy4KLSAgICAgICAgdmFyIHNsaWRlciA9IHRoaXMuX3NsaWRlcjsKLSAgICAgICAgc2xp
ZGVyLmF0dHIoJ21pbicsIE1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5tYXgoMSwgbWluaW11bU51
bWJlck9mRGF5cykpICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbik7Ci0gICAgICAgIHNsaWRlci5h
dHRyKCdtYXgnLCBNYXRoLmNlaWwoTWF0aC5sb2cobWF4aW11bU51bWJlck9mRGF5cykgKiBwcmVj
aXNpb24pIC8gcHJlY2lzaW9uKTsKLSAgICAgICAgc2xpZGVyLmF0dHIoJ3N0ZXAnLCAxIC8gcHJl
Y2lzaW9uKTsKLSAgICAgICAgdGhpcy5fc3RhcnRUaW1lQ2hhbmdlZCgpOwotICAgIH0ub2JzZXJ2
ZXMoJ29sZGVzdFN0YXJ0VGltZScpLAotICAgIF9zbGlkZXJNb3ZlZDogZnVuY3Rpb24gKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnROdW1iZXJPZkRheXMgPSBNYXRoLnJvdW5kKE1hdGgu
ZXhwKHRoaXMuX3NsaWRlci52YWwoKSkpOwotICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNWaWV3
LnRleHQodGhpcy5fY3VycmVudE51bWJlck9mRGF5cyk7Ci0gICAgICAgIHRoaXMuX3N0YXJ0VGlt
ZUluU2xpZGVyID0gdGhpcy5fbnVtYmVyT2ZEYXlzVG9UaW1lSW5QYXN0KHRoaXMuX2N1cnJlbnRO
dW1iZXJPZkRheXMpOwotICAgICAgICB0aGlzLnNldCgnc3RhcnRUaW1lJywgdGhpcy5fc3RhcnRU
aW1lSW5TbGlkZXIpOwotICAgIH0sCi0gICAgX3N0YXJ0VGltZUNoYW5nZWQ6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5nZXQoJ3N0YXJ0VGltZScpOwot
ICAgICAgICBpZiAoc3RhcnRUaW1lID09IHRoaXMuX3N0YXJ0VGltZVNldEJ5U2xpZGVyKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9jdXJyZW50TnVtYmVyT2ZEYXlzID0gdGhp
cy5fdGltZUluUGFzdFRvTnVtYmVyT2ZEYXlzKHN0YXJ0VGltZSk7Ci0KLSAgICAgICAgaWYgKHRo
aXMuX3NsaWRlcikgewotICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzVmlldy50ZXh0KHRo
aXMuX2N1cnJlbnROdW1iZXJPZkRheXMpOwotICAgICAgICAgICAgdGhpcy5fc2xpZGVyLnZhbChN
YXRoLmxvZyh0aGlzLl9jdXJyZW50TnVtYmVyT2ZEYXlzKSk7Ci0gICAgICAgICAgICB0aGlzLl9z
dGFydFRpbWVJblNsaWRlciA9IHN0YXJ0VGltZTsKLSAgICAgICAgfQotICAgIH0ub2JzZXJ2ZXMo
J3N0YXJ0VGltZScpLm9uKCdpbml0JyksCi0gICAgX3RpbWVJblBhc3RUb051bWJlck9mRGF5czog
ZnVuY3Rpb24gKHRpbWVJblBhc3QpCi0gICAgewotICAgICAgICByZXR1cm4gTWF0aC5tYXgoMSwg
TWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHRpbWVJblBhc3QpIC8gdGhpcy5fTUlMTElTRUNPTkRT
X1BFUl9EQVkpKTsKLSAgICB9LAotICAgIF9udW1iZXJPZkRheXNUb1RpbWVJblBhc3Q6IGZ1bmN0
aW9uIChudW1iZXJPZkRheXMpCi0gICAgewotICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIG51
bWJlck9mRGF5cyAqIHRoaXMuX01JTExJU0VDT05EU19QRVJfREFZOwotICAgIH0sCi19KTsKLQot
QXBwLlBhbmUgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICBwbGF0Zm9ybUlkOiBudWxsLAot
ICAgIHBsYXRmb3JtOiBudWxsLAotICAgIG1ldHJpY0lkOiBudWxsLAotICAgIG1ldHJpYzogbnVs
bCwKLSAgICBzZWxlY3RlZEl0ZW06IG51bGwsCi0gICAgc2VsZWN0ZWRQb2ludHM6IG51bGwsCi0g
ICAgaG92ZXJlZE9yU2VsZWN0ZWRJdGVtOiBudWxsLAotICAgIHNob3dGdWxsWUF4aXM6IGZhbHNl
LAotICAgIGluRGFzaGJvYXJkOiBmYWxzZSwKLSAgICBzZWFyY2hDb21taXQ6IGZ1bmN0aW9uIChy
ZXBvc2l0b3J5LCBrZXl3b3JkKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAg
dmFyIHJlcG9zaXRvcnlJZCA9IHJlcG9zaXRvcnkuZ2V0KCdpZCcpOwotICAgICAgICBDb21taXRM
b2dzLmZldGNoQ29tbWl0cyhyZXBvc2l0b3J5SWQsIG51bGwsIG51bGwsIGtleXdvcmQpLnRoZW4o
ZnVuY3Rpb24gKGNvbW1pdHMpIHsKLSAgICAgICAgICAgIGlmIChzZWxmLmlzRGVzdHJveWVkIHx8
ICFzZWxmLmdldCgnY2hhcnREYXRhJykgfHwgIWNvbW1pdHMubGVuZ3RoKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBjdXJyZW50UnVucyA9IHNlbGYuZ2V0KCdjaGFy
dERhdGEnKS5jdXJyZW50LnNlcmllcygpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50UnVucy5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICB2YXIgaGlnaGxp
Z2h0ZWRJdGVtcyA9IHt9OwotICAgICAgICAgICAgdmFyIGNvbW1pdEluZGV4ID0gMDsKLSAgICAg
ICAgICAgIGZvciAodmFyIHJ1bkluZGV4ID0gMDsgcnVuSW5kZXggPCBjdXJyZW50UnVucy5sZW5n
dGggJiYgY29tbWl0SW5kZXggPCBjb21taXRzLmxlbmd0aDsgcnVuSW5kZXgrKykgewotICAgICAg
ICAgICAgICAgIHZhciBtZWFzdXJlbWVudCA9IGN1cnJlbnRSdW5zW3J1bkluZGV4XS5tZWFzdXJl
bWVudDsKLSAgICAgICAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IG1lYXN1cmVtZW50LmNvbW1p
dFRpbWVGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnlJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b21taXRUaW1lKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoY29tbWl0c1tjb21taXRJbmRleF0udGltZSA8PSBjb21taXRUaW1lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbXNbbWVhc3VyZW1lbnQuaWQoKV0gPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJ
bmRleCsrOwotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb21taXRJbmRleCA8IGNvbW1p
dHMubGVuZ3RoICYmIGNvbW1pdHNbY29tbWl0SW5kZXhdLnRpbWUgPD0gY29tbWl0VGltZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZWxmLnNldCgn
aGlnaGxpZ2h0ZWRJdGVtcycsIGhpZ2hsaWdodGVkSXRlbXMpOwotICAgICAgICB9LCBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGVycm9ycwotICAgICAgICAgICAg
dGhpcy5zZXQoJ2hpZ2hsaWdodGVkSXRlbXMnLCB7fSk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0g
ICAgX2ZldGNoOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBwbGF0Zm9ybUlkID0gdGhpcy5n
ZXQoJ3BsYXRmb3JtSWQnKTsKLSAgICAgICAgdmFyIG1ldHJpY0lkID0gdGhpcy5nZXQoJ21ldHJp
Y0lkJyk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1JZCAmJiAhbWV0cmljSWQpIHsKLSAgICAgICAg
ICAgIHRoaXMuc2V0KCdlbXB0eScsIHRydWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMuc2V0KCdlbXB0eScsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5zZXQo
J3BsYXRmb3JtJywgbnVsbCk7Ci0gICAgICAgIHRoaXMuc2V0KCdjaGFydERhdGEnLCBudWxsKTsK
LSAgICAgICAgdGhpcy5zZXQoJ21ldHJpYycsIG51bGwpOwotICAgICAgICB0aGlzLnNldCgnZmFp
bHVyZScsIG51bGwpOwotCi0gICAgICAgIGlmICghdGhpcy5faXNWYWxpZElkKHBsYXRmb3JtSWQp
KQotICAgICAgICAgICAgdGhpcy5zZXQoJ2ZhaWx1cmUnLCBwbGF0Zm9ybUlkID8gJ0ludmFsaWQg
cGxhdGZvcm0gaWQ6JyArIHBsYXRmb3JtSWQgOiAnUGxhdGZvcm0gaWQgd2FzIG5vdCBzcGVjaWZp
ZWQnKTsKLSAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2lzVmFsaWRJZChtZXRyaWNJZCkpCi0gICAg
ICAgICAgICB0aGlzLnNldCgnZmFpbHVyZScsIG1ldHJpY0lkID8gJ0ludmFsaWQgbWV0cmljIGlk
OicgKyBtZXRyaWNJZCA6ICdNZXRyaWMgaWQgd2FzIG5vdCBzcGVjaWZpZWQnKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICB2YXIgdXNl
Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAgQXBwLk1hbmlmZXN0LmZldGNoUnVuc1dpdGhQbGF0
Zm9ybUFuZE1ldHJpYyh0aGlzLmdldCgnc3RvcmUnKSwgcGxhdGZvcm1JZCwgbWV0cmljSWQsIG51
bGwsIHVzZUNhY2hlKQotICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8IHJlc3Vs
dC5zaG91bGRSZWZldGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZldGNoUnVu
cyhwbGF0Zm9ybUlkLCBtZXRyaWNJZCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2RpZEZldGNoUnVucyhyZXN1bHQpOwotICAgICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZldGNo
UnVucyhwbGF0Zm9ybUlkLCBtZXRyaWNJZCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMuZ2V0KCdpbkRhc2hib2FyZCcpKQotICAgICAgICAgICAgICAgIHRoaXMu
ZmV0Y2hBbmFseXRpY1JhbmdlcygpOwotICAgICAgICB9Ci0gICAgfS5vYnNlcnZlcygncGxhdGZv
cm1JZCcsICdtZXRyaWNJZCcpLm9uKCdpbml0JyksCi0gICAgcmVmZXRjaFJ1bnM6IGZ1bmN0aW9u
IChwbGF0Zm9ybUlkLCBtZXRyaWNJZCkgewotICAgICAgICBpZiAoIXBsYXRmb3JtSWQpCi0gICAg
ICAgICAgICBwbGF0Zm9ybUlkID0gdGhpcy5nZXQoJ3BsYXRmb3JtJykuZ2V0KCdpZCcpOwotICAg
ICAgICBpZiAoIW1ldHJpY0lkKQotICAgICAgICAgICAgbWV0cmljSWQgPSB0aGlzLmdldCgnbWV0
cmljJykuZ2V0KCdpZCcpOwotICAgICAgICBFbWJlci5hc3NlcnQoJ3JlZmV0Y2hSdW5zIHNob3Vs
ZCBiZSBjYWxsZWQgb25seSBhZnRlciBwbGF0Zm9ybSBhbmQgbWV0cmljIGFyZSByZXNvbHZlZCcs
IHBsYXRmb3JtSWQgJiYgbWV0cmljSWQpOwotCi0gICAgICAgIHZhciB1c2VDYWNoZSA9IGZhbHNl
OwotICAgICAgICBBcHAuTWFuaWZlc3QuZmV0Y2hSdW5zV2l0aFBsYXRmb3JtQW5kTWV0cmljKHRo
aXMuZ2V0KCdzdG9yZScpLCBwbGF0Zm9ybUlkLCBtZXRyaWNJZCwgbnVsbCwgdXNlQ2FjaGUpCi0g
ICAgICAgICAgICAudGhlbih0aGlzLl9kaWRGZXRjaFJ1bnMuYmluZCh0aGlzKSwgdGhpcy5faGFu
ZGxlRmV0Y2hFcnJvcnMuYmluZCh0aGlzLCBwbGF0Zm9ybUlkLCBtZXRyaWNJZCkpOwotICAgIH0s
Ci0gICAgX2RpZEZldGNoUnVuczogZnVuY3Rpb24gKHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuc2V0KCdwbGF0Zm9ybScsIHJlc3VsdC5wbGF0Zm9ybSk7Ci0gICAgICAgIHRoaXMuc2V0KCdt
ZXRyaWMnLCByZXN1bHQubWV0cmljKTsKLSAgICAgICAgdGhpcy5fc2V0TmV3Q2hhcnREYXRhKHJl
c3VsdC5kYXRhKTsKLSAgICB9LAotICAgIF9zaG93T3V0bGllckNoYW5nZWQ6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwot
ICAgICAgICBpZiAoY2hhcnREYXRhKQotICAgICAgICAgICAgdGhpcy5fc2V0TmV3Q2hhcnREYXRh
KGNoYXJ0RGF0YSk7Ci0gICAgfS5vYnNlcnZlcygnc2hvd091dGxpZXInKSwKLSAgICBfc2V0TmV3
Q2hhcnREYXRhOiBmdW5jdGlvbiAoY2hhcnREYXRhKQotICAgIHsKLSAgICAgICAgdmFyIG5ld0No
YXJ0RGF0YSA9IHt9OwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBjaGFydERhdGEpCi0g
ICAgICAgICAgICBuZXdDaGFydERhdGFbcHJvcGVydHldID0gY2hhcnREYXRhW3Byb3BlcnR5XTsK
LQotICAgICAgICB2YXIgc2hvd091dGxpZXIgPSB0aGlzLmdldCgnc2hvd091dGxpZXInKTsKLSAg
ICAgICAgbmV3Q2hhcnREYXRhLnNob3dPdXRsaWVyKHNob3dPdXRsaWVyKTsKLSAgICAgICAgdGhp
cy5zZXQoJ2NoYXJ0RGF0YScsIG5ld0NoYXJ0RGF0YSk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU1v
dmluZ0F2ZXJhZ2VBbmRFbnZlbG9wZSgpOwotCi0gICAgICAgIGlmICghdGhpcy5nZXQoJ2Fub21h
bHlEZXRlY3Rpb25TdHJhdGVnaWVzJykuZmlsdGVyQnkoJ2VuYWJsZWQnKS5sZW5ndGgpCi0gICAg
ICAgICAgICB0aGlzLl9oaWdobGlnaHRQb2ludHNNYXJrZWRBc091dGxpZXIobmV3Q2hhcnREYXRh
KTsKLSAgICB9LAotICAgIF9oaWdobGlnaHRQb2ludHNNYXJrZWRBc091dGxpZXI6IGZ1bmN0aW9u
IChuZXdDaGFydERhdGEpCi0gICAgewotICAgICAgICB2YXIgZGF0YSA9IG5ld0NoYXJ0RGF0YS5j
dXJyZW50LnNlcmllcygpOwotICAgICAgICB2YXIgaXRlbXMgPSB7fTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YVtp
XS5tZWFzdXJlbWVudC5tYXJrZWRPdXRsaWVyKCkpCi0gICAgICAgICAgICAgICAgaXRlbXNbZGF0
YVtpXS5tZWFzdXJlbWVudC5pZCgpXSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnNldCgnaGlnaGxpZ2h0ZWRJdGVtcycsIGl0ZW1zKTsKLSAgICB9LAotICAgIF9oYW5kbGVGZXRj
aEVycm9yczogZnVuY3Rpb24gKHBsYXRmb3JtSWQsIG1ldHJpY0lkLCByZXN1bHQpCi0gICAgewot
ICAgICAgICBpZiAoIXJlc3VsdCB8fCB0eXBlb2YocmVzdWx0KSA9PT0gInN0cmluZyIpCi0gICAg
ICAgICAgICB0aGlzLnNldCgnZmFpbHVyZScsICdGYWlsZWQgdG8gZmV0Y2ggdGhlIEpTT04gd2l0
aCBhbiBlcnJvcjogJyArIHJlc3VsdCk7Ci0gICAgICAgIGVsc2UgaWYgKCFyZXN1bHQucGxhdGZv
cm0pCi0gICAgICAgICAgICB0aGlzLnNldCgnZmFpbHVyZScsICdDb3VsZCBub3QgZmluZCB0aGUg
cGxhdGZvcm0gIicgKyBwbGF0Zm9ybUlkICsgJyInKTsKLSAgICAgICAgZWxzZSBpZiAoIXJlc3Vs
dC5tZXRyaWMpCi0gICAgICAgICAgICB0aGlzLnNldCgnZmFpbHVyZScsICdDb3VsZCBub3QgZmlu
ZCB0aGUgbWV0cmljICInICsgbWV0cmljSWQgKyAnIicpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0aGlzLnNldCgnZmFpbHVyZScsICdBbiBpbnRlcm5hbCBlcnJvcicpOwotICAgIH0sCi0g
ICAgZmV0Y2hBbmFseXRpY1JhbmdlczogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBw
bGF0Zm9ybUlkID0gdGhpcy5nZXQoJ3BsYXRmb3JtSWQnKTsKLSAgICAgICAgdmFyIG1ldHJpY0lk
ID0gdGhpcy5nZXQoJ21ldHJpY0lkJyk7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAg
ICAgdGhpcy5nZXQoJ3N0b3JlJykKLSAgICAgICAgICAgIC5maW5kQWxsKCdhbmFseXNpc1Rhc2sn
KSAvLyBGSVhNRTogRmV0Y2ggb25seSBhbmFseXNpcyB0YXNrcyByZWxldmFudCBmb3IgdGhpcyBw
YW5lLgotICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHRhc2tzKSB7Ci0gICAgICAgICAgICAg
ICAgc2VsZi5zZXQoJ2FuYWx5dGljUmFuZ2VzJywgdGFza3MuZmlsdGVyKGZ1bmN0aW9uICh0YXNr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrLmdldCgncGxhdGZvcm0nKS5nZXQo
J2lkJykgPT0gcGxhdGZvcm1JZAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGFzay5nZXQo
J21ldHJpYycpLmdldCgnaWQnKSA9PSBtZXRyaWNJZAotICAgICAgICAgICAgICAgICAgICAgICAg
JiYgdGFzay5nZXQoJ3N0YXJ0UnVuJykgJiYgdGFzay5nZXQoJ2VuZFJ1bicpOwotICAgICAgICAg
ICAgICAgIH0pKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0sCi0gICAgcmFuZ2VzOiBmdW5jdGlv
biAoKQotICAgIHsKLSAgICAgICAgdmFyIGNoYXJ0RGF0YSA9IHRoaXMuZ2V0KCdjaGFydERhdGEn
KTsKLSAgICAgICAgaWYgKCFjaGFydERhdGEgfHwgIWNoYXJ0RGF0YS51bmZpbHRlcmVkQ3VycmVu
dFRpbWVTZXJpZXMpCi0gICAgICAgICAgICByZXR1cm4gW107Ci0KLSAgICAgICAgZnVuY3Rpb24g
bWlkUG9pbnQoZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChmaXJz
dFBvaW50ICYmIHNlY29uZFBvaW50KQotICAgICAgICAgICAgICAgIHJldHVybiAoK2ZpcnN0UG9p
bnQudGltZSArICtzZWNvbmRQb2ludC50aW1lKSAvIDI7Ci0gICAgICAgICAgICBpZiAoZmlyc3RQ
b2ludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RQb2ludC50aW1lOwotICAgICAgICAg
ICAgcmV0dXJuIHNlY29uZFBvaW50LnRpbWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdGlt
ZVNlcmllcyA9IGNoYXJ0RGF0YS51bmZpbHRlcmVkQ3VycmVudFRpbWVTZXJpZXM7Ci0gICAgICAg
IHZhciByYW5nZXMgPSB0aGlzLmdldFdpdGhEZWZhdWx0KCdhbmFseXRpY1JhbmdlcycsIFtdKTsK
LSAgICAgICAgdmFyIHRlc3RyYW5nZXMgPSB0aGlzLmdldFdpdGhEZWZhdWx0KCd0ZXN0UmFuZ2VD
YW5kaWRhdGVzJywgW10pOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRXaXRoRGVmYXVsdCgnYW5h
bHl0aWNSYW5nZXMnLCBbXSkuY29uY2F0KHRoaXMuZ2V0V2l0aERlZmF1bHQoJ3Rlc3RSYW5nZUNh
bmRpZGF0ZXMnLCBbXSkpLm1hcChmdW5jdGlvbiAocmFuZ2UpIHsKLSAgICAgICAgICAgIHZhciBz
dGFydCA9IHRpbWVTZXJpZXMuZmluZFBvaW50QnlNZWFzdXJlbWVudElkKHJhbmdlLmdldCgnc3Rh
cnRSdW4nKSk7Ci0gICAgICAgICAgICB2YXIgZW5kID0gdGltZVNlcmllcy5maW5kUG9pbnRCeU1l
YXN1cmVtZW50SWQocmFuZ2UuZ2V0KCdlbmRSdW4nKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBF
bWJlci5PYmplY3RQcm94eS5jcmVhdGUoewotICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJhbmdl
LAotICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnQgPyBtaWRQb2ludCh0aW1lU2VyaWVz
LnByZXZpb3VzUG9pbnQoc3RhcnQpLCBzdGFydCkgOiBudWxsLAotICAgICAgICAgICAgICAgIGVu
ZFRpbWU6IGVuZCA/IG1pZFBvaW50KGVuZCwgdGltZVNlcmllcy5uZXh0UG9pbnQoZW5kKSkgOiBu
dWxsLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0ucHJvcGVydHkoJ2NoYXJ0
RGF0YScsICdhbmFseXRpY1JhbmdlcycsICd0ZXN0UmFuZ2VDYW5kaWRhdGVzJyksCi0gICAgX2lz
VmFsaWRJZDogZnVuY3Rpb24gKGlkKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZihpZCkgPT0g
Im51bWJlciIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHR5cGVvZihp
ZCkgPT0gInN0cmluZyIpCi0gICAgICAgICAgICByZXR1cm4gISFpZC5tYXRjaCgvXltBLVphLXow
LTlfXSskLyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotICAgIGNvbXB1dGVTdGF0
dXM6IGZ1bmN0aW9uIChjdXJyZW50UG9pbnQsIHByZXZpb3VzUG9pbnQpCi0gICAgewotICAgICAg
ICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICB2YXIgZGlm
ZkZyb21CYXNlbGluZSA9IHRoaXMuX3JlbGF0aXZlRGlmZmVyZW50VG9MYXRlclBvaW50SW5UaW1l
U2VyaWVzKGN1cnJlbnRQb2ludCwgY2hhcnREYXRhLmJhc2VsaW5lKTsKLSAgICAgICAgdmFyIGRp
ZmZGcm9tVGFyZ2V0ID0gdGhpcy5fcmVsYXRpdmVEaWZmZXJlbnRUb0xhdGVyUG9pbnRJblRpbWVT
ZXJpZXMoY3VycmVudFBvaW50LCBjaGFydERhdGEudGFyZ2V0KTsKLQotICAgICAgICB2YXIgbGFi
ZWwgPSAnJzsKLSAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICcnOwotICAgICAgICB2YXIgZm9ybWF0
dGVyID0gZDMuZm9ybWF0KCcuM3AnKTsKLQotICAgICAgICBmdW5jdGlvbiBsYWJlbEZvckRpZmYo
ZGlmZiwgbmFtZSkgeyByZXR1cm4gZm9ybWF0dGVyKE1hdGguYWJzKGRpZmYpKSArICcgJyArIChk
aWZmID4gMCA/ICdhYm92ZScgOiAnYmVsb3cnKSArICcgJyArIG5hbWU7IH0KLQotICAgICAgICB2
YXIgc21hbGxlcklzQmV0dGVyID0gY2hhcnREYXRhLnNtYWxsZXJJc0JldHRlcjsKLSAgICAgICAg
aWYgKGRpZmZGcm9tQmFzZWxpbmUgIT09IHVuZGVmaW5lZCAmJiBkaWZmRnJvbVRhcmdldCAhPT0g
dW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpZiAoZGlmZkZyb21CYXNlbGluZSA+IDAgPT0gc21h
bGxlcklzQmV0dGVyKSB7Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBsYWJlbEZvckRpZmYoZGlm
ZkZyb21CYXNlbGluZSwgJ2Jhc2VsaW5lJyk7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0g
J3dvcnNlJzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZkZyb21UYXJnZXQgPCAwID09IHNt
YWxsZXJJc0JldHRlcikgewotICAgICAgICAgICAgICAgIGxhYmVsID0gbGFiZWxGb3JEaWZmKGRp
ZmZGcm9tQmFzZWxpbmUsICd0YXJnZXQnKTsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAn
YmV0dGVyJzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxhYmVsID0gZm9y
bWF0dGVyKE1hdGguYWJzKGRpZmZGcm9tVGFyZ2V0KSkgKyAnIHVudGlsIHRhcmdldCc7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoZGlmZkZyb21CYXNlbGluZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAg
ICAgICBsYWJlbCA9IGxhYmVsRm9yRGlmZihkaWZmRnJvbUJhc2VsaW5lLCAnYmFzZWxpbmUnKTsK
LSAgICAgICAgICAgIGlmIChkaWZmRnJvbUJhc2VsaW5lID4gMCA9PSBzbWFsbGVySXNCZXR0ZXIp
Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3dvcnNlJzsKLSAgICAgICAgfSBlbHNlIGlm
IChkaWZmRnJvbVRhcmdldCAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBsYWJlbCA9IGxh
YmVsRm9yRGlmZihkaWZmRnJvbVRhcmdldCwgJ3RhcmdldCcpOwotICAgICAgICAgICAgaWYgKGRp
ZmZGcm9tVGFyZ2V0IDwgMCA9PSBzbWFsbGVySXNCZXR0ZXIpCi0gICAgICAgICAgICAgICAgY2xh
c3NOYW1lID0gJ2JldHRlcic7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdmFsdWVEZWx0YSA9
IG51bGw7Ci0gICAgICAgIHZhciByZWxhdGl2ZURlbHRhID0gbnVsbDsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzUG9pbnQpIHsKLSAgICAgICAgICAgIHZhbHVlRGVsdGEgPSBjaGFydERhdGEuZGVsdGFG
b3JtYXR0ZXIoY3VycmVudFBvaW50LnZhbHVlIC0gcHJldmlvdXNQb2ludC52YWx1ZSk7Ci0gICAg
ICAgICAgICByZWxhdGl2ZURlbHRhID0gZDMuZm9ybWF0KCcrLjJwJykoKGN1cnJlbnRQb2ludC52
YWx1ZSAtIHByZXZpb3VzUG9pbnQudmFsdWUpIC8gcHJldmlvdXNQb2ludC52YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1l
LAotICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAotICAgICAgICAgICAgY3VycmVudFZhbHVlOiBj
aGFydERhdGEuZm9ybWF0dGVyKGN1cnJlbnRQb2ludC52YWx1ZSksCi0gICAgICAgICAgICB2YWx1
ZURlbHRhOiB2YWx1ZURlbHRhLAotICAgICAgICAgICAgcmVsYXRpdmVEZWx0YTogcmVsYXRpdmVE
ZWx0YSwKLSAgICAgICAgfTsKLSAgICB9LAotICAgIF9yZWxhdGl2ZURpZmZlcmVudFRvTGF0ZXJQ
b2ludEluVGltZVNlcmllczogZnVuY3Rpb24gKGN1cnJlbnRQb2ludCwgdGltZVNlcmllcykKLSAg
ICB7Ci0gICAgICAgIGlmICghY3VycmVudFBvaW50IHx8ICF0aW1lU2VyaWVzKQotICAgICAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKLQotICAgICAgICB2YXIgcmVmZXJlbmNlUG9pbnQgPSB0aW1l
U2VyaWVzLmZpbmRQb2ludEFmdGVyVGltZShjdXJyZW50UG9pbnQudGltZSk7Ci0gICAgICAgIGlm
ICghcmVmZXJlbmNlUG9pbnQpCi0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotCi0gICAg
ICAgIHJldHVybiAoY3VycmVudFBvaW50LnZhbHVlIC0gcmVmZXJlbmNlUG9pbnQudmFsdWUpIC8g
cmVmZXJlbmNlUG9pbnQudmFsdWU7Ci0gICAgfSwKLSAgICBsYXRlc3RTdGF0dXM6IGZ1bmN0aW9u
ICgpCi0gICAgewotICAgICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScp
OwotICAgICAgICBpZiAoIWNoYXJ0RGF0YSB8fCAhY2hhcnREYXRhLmN1cnJlbnQpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB2YXIgbGFzdFBvaW50ID0gY2hhcnREYXRhLmN1
cnJlbnQubGFzdFBvaW50KCk7Ci0gICAgICAgIGlmICghbGFzdFBvaW50KQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZVN0YXR1cyhsYXN0UG9p
bnQsIGNoYXJ0RGF0YS5jdXJyZW50LnByZXZpb3VzUG9pbnQobGFzdFBvaW50KSk7Ci0gICAgfS5w
cm9wZXJ0eSgnY2hhcnREYXRhJyksCi0gICAgdXBkYXRlU3RhdGlzdGljc1Rvb2xzOiBmdW5jdGlv
biAoKQotICAgIHsKLSAgICAgICAgdmFyIG1vdmluZ0F2ZXJhZ2VTdHJhdGVnaWVzID0gU3RhdGlz
dGljc1N0cmF0ZWdpZXMuTW92aW5nQXZlcmFnZVN0cmF0ZWdpZXMubWFwKHRoaXMuX2Nsb25lU3Ry
YXRlZ3kuYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuc2V0KCdtb3ZpbmdBdmVyYWdlU3RyYXRl
Z2llcycsIFt7bGFiZWw6ICdOb25lJ31dLmNvbmNhdChtb3ZpbmdBdmVyYWdlU3RyYXRlZ2llcykp
OwotICAgICAgICB0aGlzLnNldCgnY2hvc2VuTW92aW5nQXZlcmFnZVN0cmF0ZWd5JywgdGhpcy5f
Y29uZmlndXJlU3RyYXRlZ3kobW92aW5nQXZlcmFnZVN0cmF0ZWdpZXMsIHRoaXMuZ2V0KCdtb3Zp
bmdBdmVyYWdlQ29uZmlnJykpKTsKLQotICAgICAgICB2YXIgZW52ZWxvcGluZ1N0cmF0ZWdpZXMg
PSBTdGF0aXN0aWNzU3RyYXRlZ2llcy5FbnZlbG9waW5nU3RyYXRlZ2llcy5tYXAodGhpcy5fY2xv
bmVTdHJhdGVneS5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5zZXQoJ2VudmVsb3BpbmdTdHJh
dGVnaWVzJywgW3tsYWJlbDogJ05vbmUnfV0uY29uY2F0KGVudmVsb3BpbmdTdHJhdGVnaWVzKSk7
Ci0gICAgICAgIHRoaXMuc2V0KCdjaG9zZW5FbnZlbG9waW5nU3RyYXRlZ3knLCB0aGlzLl9jb25m
aWd1cmVTdHJhdGVneShlbnZlbG9waW5nU3RyYXRlZ2llcywgdGhpcy5nZXQoJ2VudmVsb3BpbmdD
b25maWcnKSkpOwotCi0gICAgICAgIHZhciB0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVnaWVzID0g
U3RhdGlzdGljc1N0cmF0ZWdpZXMuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ2llcy5tYXAodGhp
cy5fY2xvbmVTdHJhdGVneS5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5zZXQoJ3Rlc3RSYW5n
ZVNlbGVjdGlvblN0cmF0ZWdpZXMnLCBbe2xhYmVsOiAnTm9uZSd9XS5jb25jYXQodGVzdFJhbmdl
U2VsZWN0aW9uU3RyYXRlZ2llcykpOwotICAgICAgICB0aGlzLnNldCgnY2hvc2VuVGVzdFJhbmdl
U2VsZWN0aW9uU3RyYXRlZ3knLCB0aGlzLl9jb25maWd1cmVTdHJhdGVneSh0ZXN0UmFuZ2VTZWxl
Y3Rpb25TdHJhdGVnaWVzLCB0aGlzLmdldCgndGVzdFJhbmdlU2VsZWN0aW9uQ29uZmlnJykpKTsK
LQotICAgICAgICB2YXIgYW5vbWFseURldGVjdGlvblN0cmF0ZWdpZXMgPSBTdGF0aXN0aWNzU3Ry
YXRlZ2llcy5Bbm9tYWx5RGV0ZWN0aW9uU3RyYXRlZ3kubWFwKHRoaXMuX2Nsb25lU3RyYXRlZ3ku
YmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuc2V0KCdhbm9tYWx5RGV0ZWN0aW9uU3RyYXRlZ2ll
cycsIGFub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzKTsKLSAgICB9Lm9uKCdpbml0JyksCi0gICAg
X2Nsb25lU3RyYXRlZ3k6IGZ1bmN0aW9uIChzdHJhdGVneSkKLSAgICB7Ci0gICAgICAgIHZhciBw
YXJhbWV0ZXJMaXN0ID0gKHN0cmF0ZWd5LnBhcmFtZXRlckxpc3QgfHwgW10pLm1hcChmdW5jdGlv
biAocGFyYW0pIHsgcmV0dXJuIEVtYmVyLk9iamVjdC5jcmVhdGUocGFyYW0pOyB9KTsKLSAgICAg
ICAgcmV0dXJuIEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgaWQ6IHN0cmF0ZWd5
LmlkLAotICAgICAgICAgICAgbGFiZWw6IHN0cmF0ZWd5LmxhYmVsLAotICAgICAgICAgICAgaXNT
ZWdtZW50YXRpb246IHN0cmF0ZWd5LmlzU2VnbWVudGF0aW9uLAotICAgICAgICAgICAgZGVzY3Jp
cHRpb246IHN0cmF0ZWd5LmRlc2NyaXB0aW9uLAotICAgICAgICAgICAgcGFyYW1ldGVyTGlzdDog
cGFyYW1ldGVyTGlzdCwKLSAgICAgICAgICAgIGV4ZWN1dGU6IHN0cmF0ZWd5LmV4ZWN1dGUsCi0g
ICAgICAgIH0pOwotICAgIH0sCi0gICAgX2NvbmZpZ3VyZVN0cmF0ZWd5OiBmdW5jdGlvbiAoc3Ry
YXRlZ2llcywgY29uZmlnKQotICAgIHsKLSAgICAgICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZ1sw
XSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBpZCA9IGNvbmZpZ1sw
XTsKLSAgICAgICAgdmFyIGNob3NlblN0cmF0ZWd5ID0gc3RyYXRlZ2llcy5maW5kKGZ1bmN0aW9u
IChzdHJhdGVneSkgeyByZXR1cm4gc3RyYXRlZ3kuaWQgPT0gaWQgfSk7Ci0gICAgICAgIGlmICgh
Y2hvc2VuU3RyYXRlZ3kpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAo
Y2hvc2VuU3RyYXRlZ3kucGFyYW1ldGVyTGlzdCkgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjaG9zZW5TdHJhdGVneS5wYXJhbWV0ZXJMaXN0Lmxlbmd0aDsgaSsrKQotICAgICAg
ICAgICAgICAgIGNob3NlblN0cmF0ZWd5LnBhcmFtZXRlckxpc3RbaV0udmFsdWUgPSBwYXJzZUZs
b2F0KGNvbmZpZ1tpICsgMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNob3NlblN0
cmF0ZWd5OwotICAgIH0sCi0gICAgX3VwZGF0ZU1vdmluZ0F2ZXJhZ2VBbmRFbnZlbG9wZTogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlzLmdldCgnY2hhcnRE
YXRhJyk7Ci0gICAgICAgIGlmICghY2hhcnREYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHZhciBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3kgPSB0aGlzLmdldCgnY2hvc2VuTW92aW5n
QXZlcmFnZVN0cmF0ZWd5Jyk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVN0cmF0ZWd5Q29uZmlnSWZO
ZWVkZWQobW92aW5nQXZlcmFnZVN0cmF0ZWd5LCAnbW92aW5nQXZlcmFnZUNvbmZpZycpOwotCi0g
ICAgICAgIHZhciBlbnZlbG9waW5nU3RyYXRlZ3kgPSB0aGlzLmdldCgnY2hvc2VuRW52ZWxvcGlu
Z1N0cmF0ZWd5Jyk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVN0cmF0ZWd5Q29uZmlnSWZOZWVkZWQo
ZW52ZWxvcGluZ1N0cmF0ZWd5LCAnZW52ZWxvcGluZ0NvbmZpZycpOwotCi0gICAgICAgIHZhciB0
ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneSA9IHRoaXMuZ2V0KCdjaG9zZW5UZXN0UmFuZ2VTZWxl
Y3Rpb25TdHJhdGVneScpOwotICAgICAgICB0aGlzLl91cGRhdGVTdHJhdGVneUNvbmZpZ0lmTmVl
ZGVkKHRlc3RSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LCAndGVzdFJhbmdlU2VsZWN0aW9uQ29uZmln
Jyk7Ci0KLSAgICAgICAgdmFyIGFub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzID0gdGhpcy5nZXQo
J2Fub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzJykuZmlsdGVyQnkoJ2VuYWJsZWQnKTsKLSAgICAg
ICAgdmFyIHJlc3VsdCA9IHRoaXMuX2NvbXB1dGVNb3ZpbmdBdmVyYWdlQW5kT3V0bGllcnMoY2hh
cnREYXRhLCBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3ksIGVudmVsb3BpbmdTdHJhdGVneSwgdGVzdFJh
bmdlU2VsZWN0aW9uU3RyYXRlZ3ksIGFub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzKTsKLSAgICAg
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2hhcnREYXRh
Lm1vdmluZ0F2ZXJhZ2UgPSByZXN1bHQubW92aW5nQXZlcmFnZTsKLSAgICAgICAgdGhpcy5zZXQo
J2hpZ2hsaWdodGVkSXRlbXMnLCByZXN1bHQuYW5vbWFsaWVzKTsKLSAgICAgICAgdmFyIGN1cnJl
bnRUaW1lU2VyaWVzRGF0YSA9IGNoYXJ0RGF0YS5jdXJyZW50LnNlcmllcygpOwotICAgICAgICB0
aGlzLnNldCgndGVzdFJhbmdlQ2FuZGlkYXRlcycsIHJlc3VsdC50ZXN0UmFuZ2VDYW5kaWRhdGVz
Lm1hcChmdW5jdGlvbiAocmFuZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiBFbWJlci5PYmplY3Qu
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBzdGFydFJ1bjogY3VycmVudFRpbWVTZXJpZXNEYXRh
W3JhbmdlWzBdXS5tZWFzdXJlbWVudC5pZCgpLAotICAgICAgICAgICAgICAgIGVuZFJ1bjogY3Vy
cmVudFRpbWVTZXJpZXNEYXRhW3JhbmdlWzFdXS5tZWFzdXJlbWVudC5pZCgpLAotICAgICAgICAg
ICAgICAgIHN0YXR1czogJ3Rlc3RpbmdSYW5nZScsCi0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSkpOwotICAgIH0sCi0gICAgX21vdmluZ0F2ZXJhZ2VPckVudmVsb3BlU3RyYXRlZ3lEaWRDaGFu
Z2U6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGNoYXJ0RGF0YSA9IHRoaXMuZ2V0KCdjaGFy
dERhdGEnKTsKLSAgICAgICAgaWYgKCFjaGFydERhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHRoaXMuX3NldE5ld0NoYXJ0RGF0YShjaGFydERhdGEpOwotICAgIH0ub2JzZXJ2ZXMo
J2Nob3Nlbk1vdmluZ0F2ZXJhZ2VTdHJhdGVneScsICdjaG9zZW5Nb3ZpbmdBdmVyYWdlU3RyYXRl
Z3kucGFyYW1ldGVyTGlzdC5AZWFjaC52YWx1ZScsCi0gICAgICAgICdjaG9zZW5FbnZlbG9waW5n
U3RyYXRlZ3knLCAnY2hvc2VuRW52ZWxvcGluZ1N0cmF0ZWd5LnBhcmFtZXRlckxpc3QuQGVhY2gu
dmFsdWUnLAotICAgICAgICAnY2hvc2VuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3knLCAnY2hv
c2VuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kucGFyYW1ldGVyTGlzdC5AZWFjaC52YWx1ZScs
Ci0gICAgICAgICdhbm9tYWx5RGV0ZWN0aW9uU3RyYXRlZ2llcy5AZWFjaC5lbmFibGVkJyksCi0g
ICAgX2NvbXB1dGVNb3ZpbmdBdmVyYWdlQW5kT3V0bGllcnM6IGZ1bmN0aW9uIChjaGFydERhdGEs
IG1vdmluZ0F2ZXJhZ2VTdHJhdGVneSwgZW52ZWxvcGluZ1N0cmF0ZWd5LCB0ZXN0UmFuZ2VTZWxl
Y3Rpb25TdHJhdGVneSwgYW5vbWFseURldGVjdGlvblN0cmF0ZWdpZXMpCi0gICAgewotICAgICAg
ICB2YXIgY3VycmVudFRpbWVTZXJpZXNEYXRhID0gY2hhcnREYXRhLmN1cnJlbnQuc2VyaWVzKCk7
Ci0KLSAgICAgICAgdmFyIHJhd1ZhbHVlcyA9IGNoYXJ0RGF0YS5jdXJyZW50LnJhd1ZhbHVlcygp
OwotICAgICAgICB2YXIgbW92aW5nQXZlcmFnZUlzU2V0QnlVc2VyID0gbW92aW5nQXZlcmFnZVN0
cmF0ZWd5ICYmIG1vdmluZ0F2ZXJhZ2VTdHJhdGVneS5leGVjdXRlOwotICAgICAgICBpZiAoIW1v
dmluZ0F2ZXJhZ2VJc1NldEJ5VXNlcikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAg
ICAgIHZhciBtb3ZpbmdBdmVyYWdlVmFsdWVzID0gU3RhdGlzdGljc1N0cmF0ZWdpZXMuZXhlY3V0
ZVN0cmF0ZWd5KG1vdmluZ0F2ZXJhZ2VTdHJhdGVneSwgcmF3VmFsdWVzKTsKLSAgICAgICAgaWYg
KCFtb3ZpbmdBdmVyYWdlVmFsdWVzKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAg
ICAgdmFyIHRlc3RSYW5nZUNhbmRpZGF0ZXMgPSBbXTsKLSAgICAgICAgaWYgKG1vdmluZ0F2ZXJh
Z2VTdHJhdGVneSAmJiBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3kuaXNTZWdtZW50YXRpb24gJiYgdGVz
dFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kgJiYgdGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kuZXhl
Y3V0ZSkKLSAgICAgICAgICAgIHRlc3RSYW5nZUNhbmRpZGF0ZXMgPSBTdGF0aXN0aWNzU3RyYXRl
Z2llcy5leGVjdXRlU3RyYXRlZ3kodGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIHJhd1ZhbHVl
cywgW21vdmluZ0F2ZXJhZ2VWYWx1ZXNdKTsKLQotICAgICAgICBpZiAoZW52ZWxvcGluZ1N0cmF0
ZWd5ICYmIGVudmVsb3BpbmdTdHJhdGVneS5leGVjdXRlKSB7Ci0gICAgICAgICAgICB2YXIgZW52
ZWxvcGVEZWx0YSA9IFN0YXRpc3RpY3NTdHJhdGVnaWVzLmV4ZWN1dGVTdHJhdGVneShlbnZlbG9w
aW5nU3RyYXRlZ3ksIHJhd1ZhbHVlcywgW21vdmluZ0F2ZXJhZ2VWYWx1ZXNdKTsKLSAgICAgICAg
ICAgIHZhciBhbm9tYWxpZXMgPSB7fTsKLSAgICAgICAgICAgIGlmIChhbm9tYWx5RGV0ZWN0aW9u
U3RyYXRlZ2llcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgaXNBbm9tYWx5QXJyYXkg
PSBuZXcgQXJyYXkoY3VycmVudFRpbWVTZXJpZXNEYXRhLmxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgc3RyYXRlZ3kgb2YgYW5vbWFseURldGVjdGlvblN0cmF0ZWdpZXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGFub21hbHlMZW5ndGhzID0gU3RhdGlzdGljc1N0cmF0ZWdp
ZXMuZXhlY3V0ZVN0cmF0ZWd5KHN0cmF0ZWd5LCByYXdWYWx1ZXMsIFttb3ZpbmdBdmVyYWdlVmFs
dWVzLCBlbnZlbG9wZURlbHRhXSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY3VycmVudFRpbWVTZXJpZXNEYXRhLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgaXNBbm9tYWx5QXJyYXlbaV0gPSBpc0Fub21hbHlBcnJheVtpXSB8fCBhbm9tYWx5
TGVuZ3Roc1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpc0Fub21hbHlBcnJheS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzQW5vbWFseUFycmF5W2ldKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGFub21hbGllc1tjdXJyZW50VGltZVNlcmllc0Rh
dGFbaV0ubWVhc3VyZW1lbnQuaWQoKV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoaXNBbm9tYWx5QXJyYXlbaV0gJiYgaSA8IGlzQW5vbWFseUFycmF5Lmxlbmd0aCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbW92aW5nQXZlcmFnZVRpbWVTZXJpZXMgPSBudWxs
OwotICAgICAgICBpZiAobW92aW5nQXZlcmFnZUlzU2V0QnlVc2VyKSB7Ci0gICAgICAgICAgICBt
b3ZpbmdBdmVyYWdlVGltZVNlcmllcyA9IG5ldyBUaW1lU2VyaWVzKGN1cnJlbnRUaW1lU2VyaWVz
RGF0YS5tYXAoZnVuY3Rpb24gKHBvaW50LCBpbmRleCkgewotICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IG1vdmluZ0F2ZXJhZ2VWYWx1ZXNbaW5kZXhdOwotICAgICAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50OiBwb2ludC5tZWFzdXJlbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgdGltZTogcG9pbnQudGltZSwKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbDogZW52ZWxvcGVE
ZWx0YSAhPT0gbnVsbCA/IFt2YWx1ZSAtIGVudmVsb3BlRGVsdGEsIHZhbHVlICsgZW52ZWxvcGVE
ZWx0YV0gOiBudWxsLAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtb3ZpbmdBdmVyYWdlOiBtb3Zp
bmdBdmVyYWdlVGltZVNlcmllcywKLSAgICAgICAgICAgIGFub21hbGllczogYW5vbWFsaWVzLAot
ICAgICAgICAgICAgdGVzdFJhbmdlQ2FuZGlkYXRlczogdGVzdFJhbmdlQ2FuZGlkYXRlcywKLSAg
ICAgICAgfTsKLSAgICB9LAotICAgIF91cGRhdGVTdHJhdGVneUNvbmZpZ0lmTmVlZGVkOiBmdW5j
dGlvbiAoc3RyYXRlZ3ksIGNvbmZpZ05hbWUpCi0gICAgewotICAgICAgICB2YXIgY29uZmlnID0g
bnVsbDsKLSAgICAgICAgaWYgKHN0cmF0ZWd5ICYmIHN0cmF0ZWd5LmV4ZWN1dGUpCi0gICAgICAg
ICAgICBjb25maWcgPSBbc3RyYXRlZ3kuaWRdLmNvbmNhdCgoc3RyYXRlZ3kucGFyYW1ldGVyTGlz
dCB8fCBbXSkubWFwKGZ1bmN0aW9uIChwYXJhbSkgeyByZXR1cm4gcGFyYW0udmFsdWU7IH0pKTsK
LQotICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY29uZmlnKSAhPSBKU09OLnN0cmluZ2lmeSh0
aGlzLmdldChjb25maWdOYW1lKSkpCi0gICAgICAgICAgICB0aGlzLnNldChjb25maWdOYW1lLCBj
b25maWcpOwotICAgIH0sCi0gICAgX3VwZGF0ZURldGFpbHM6IGZ1bmN0aW9uICgpCi0gICAgewot
ICAgICAgICB2YXIgc2VsZWN0ZWRQb2ludHMgPSB0aGlzLmdldCgnc2VsZWN0ZWRQb2ludHMnKTsK
LSAgICAgICAgdmFyIGN1cnJlbnRQb2ludCA9IHRoaXMuZ2V0KCdob3ZlcmVkT3JTZWxlY3RlZEl0
ZW0nKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFBvaW50cyAmJiAhY3VycmVudFBvaW50KSB7Ci0g
ICAgICAgICAgICB0aGlzLnNldCgnZGV0YWlscycsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRNZWFzdXJlbWVudDsKLSAgICAgICAg
dmFyIHByZXZpb3VzUG9pbnQ7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRQb2ludHMpCi0gICAgICAg
ICAgICBwcmV2aW91c1BvaW50ID0gY3VycmVudFBvaW50LnNlcmllcy5wcmV2aW91c1BvaW50KGN1
cnJlbnRQb2ludCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY3VycmVudFBvaW50ID0g
c2VsZWN0ZWRQb2ludHNbc2VsZWN0ZWRQb2ludHMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICBw
cmV2aW91c1BvaW50ID0gc2VsZWN0ZWRQb2ludHNbMF07Ci0gICAgICAgIH0KLSAgICAgICAgdmFy
IGN1cnJlbnRNZWFzdXJlbWVudCA9IGN1cnJlbnRQb2ludC5tZWFzdXJlbWVudDsKLSAgICAgICAg
dmFyIG9sZE1lYXN1cmVtZW50ID0gcHJldmlvdXNQb2ludCA/IHByZXZpb3VzUG9pbnQubWVhc3Vy
ZW1lbnQgOiBudWxsOwotCi0gICAgICAgIHZhciBmb3JtYXR0ZWRSZXZpc2lvbnMgPSBjdXJyZW50
TWVhc3VyZW1lbnQuZm9ybWF0dGVkUmV2aXNpb25zKG9sZE1lYXN1cmVtZW50KTsKLSAgICAgICAg
dmFyIHJldmlzaW9ucyA9IEFwcC5NYW5pZmVzdC5nZXQoJ3JlcG9zaXRvcmllcycpCi0gICAgICAg
ICAgICAuZmlsdGVyKGZ1bmN0aW9uIChyZXBvc2l0b3J5KSB7IHJldHVybiBmb3JtYXR0ZWRSZXZp
c2lvbnNbcmVwb3NpdG9yeS5nZXQoJ2lkJyldOyB9KQotICAgICAgICAgICAgLm1hcChmdW5jdGlv
biAocmVwb3NpdG9yeSkgewotICAgICAgICAgICAgdmFyIHJldmlzaW9uID0gRW1iZXIuT2JqZWN0
LmNyZWF0ZShmb3JtYXR0ZWRSZXZpc2lvbnNbcmVwb3NpdG9yeS5nZXQoJ2lkJyldKTsKLSAgICAg
ICAgICAgIHJldmlzaW9uWyd1cmwnXSA9IHJldmlzaW9uLnByZXZpb3VzUmV2aXNpb24KLSAgICAg
ICAgICAgICAgICA/IHJlcG9zaXRvcnkudXJsRm9yUmV2aXNpb25SYW5nZShyZXZpc2lvbi5wcmV2
aW91c1JldmlzaW9uLCByZXZpc2lvbi5jdXJyZW50UmV2aXNpb24pCi0gICAgICAgICAgICAgICAg
OiByZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKHJldmlzaW9uLmN1cnJlbnRSZXZpc2lvbik7Ci0g
ICAgICAgICAgICByZXZpc2lvblsnbmFtZSddID0gcmVwb3NpdG9yeS5nZXQoJ25hbWUnKTsKLSAg
ICAgICAgICAgIHJldmlzaW9uWydyZXBvc2l0b3J5J10gPSByZXBvc2l0b3J5OwotICAgICAgICAg
ICAgcmV0dXJuIHJldmlzaW9uOyAKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIGJ1aWxkTnVt
YmVyID0gbnVsbDsKLSAgICAgICAgdmFyIGJ1aWxkVVJMID0gbnVsbDsKLSAgICAgICAgaWYgKCFz
ZWxlY3RlZFBvaW50cykgewotICAgICAgICAgICAgYnVpbGROdW1iZXIgPSBjdXJyZW50TWVhc3Vy
ZW1lbnQuYnVpbGROdW1iZXIoKTsKLSAgICAgICAgICAgIHZhciBidWlsZGVyID0gQXBwLk1hbmlm
ZXN0LmJ1aWxkZXIoY3VycmVudE1lYXN1cmVtZW50LmJ1aWxkZXJJZCgpKTsKLSAgICAgICAgICAg
IGlmIChidWlsZGVyKQotICAgICAgICAgICAgICAgIGJ1aWxkVVJMID0gYnVpbGRlci51cmxGcm9t
QnVpbGROdW1iZXIoYnVpbGROdW1iZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5zZXQo
J2RldGFpbHMnLCBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgIHN0YXR1czogdGhp
cy5jb21wdXRlU3RhdHVzKGN1cnJlbnRQb2ludCwgcHJldmlvdXNQb2ludCksCi0gICAgICAgICAg
ICBidWlsZE51bWJlcjogYnVpbGROdW1iZXIsCi0gICAgICAgICAgICBidWlsZFVSTDogYnVpbGRV
UkwsCi0gICAgICAgICAgICBidWlsZFRpbWU6IGN1cnJlbnRNZWFzdXJlbWVudC5mb3JtYXR0ZWRC
dWlsZFRpbWUoKSwKLSAgICAgICAgICAgIHJldmlzaW9uczogcmV2aXNpb25zLAotICAgICAgICB9
KSk7Ci0gICAgfS5vYnNlcnZlcygnaG92ZXJlZE9yU2VsZWN0ZWRJdGVtJywgJ3NlbGVjdGVkUG9p
bnRzJyksCi19KTsKLQotQXBwLmVuY29kZVByZXR0aWZpZWRKU09OID0gZnVuY3Rpb24gKHBsYWlu
KQotewotICAgIGZ1bmN0aW9uIG51bWJlcklmUG9zc2libGUoc3RyaW5nKSB7Ci0gICAgICAgIHJl
dHVybiBzdHJpbmcgPT0gcGFyc2VJbnQoc3RyaW5nKSA/IHBhcnNlSW50KHN0cmluZykgOiBzdHJp
bmc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlDb252ZXJ0TnVtYmVySWZQb3Nz
aWJsZShpbnB1dCkgewotICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBBcnJheSkgewotICAg
ICAgICAgICAgcmV0dXJuIGlucHV0Lm1hcChyZWN1cnNpdmVseUNvbnZlcnROdW1iZXJJZlBvc3Np
YmxlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVtYmVySWZQb3NzaWJsZShpbnB1dCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlY3Vyc2l2ZWx5Q29udmVydE51
bWJlcklmUG9zc2libGUocGxhaW4pKQotICAgICAgICAucmVwbGFjZSgvXFsvZywgJygnKS5yZXBs
YWNlKC9cXS9nLCAnKScpLnJlcGxhY2UoL1wsL2csICctJyk7Ci19Ci0KLUFwcC5kZWNvZGVQcmV0
dGlmaWVkSlNPTiA9IGZ1bmN0aW9uIChlbmNvZGVkKQotewotICAgIHZhciBwYXJzZWQgPSBlbmNv
ZGVkLnJlcGxhY2UoL1woL2csICdbJykucmVwbGFjZSgvXCkvZywgJ10nKS5yZXBsYWNlKC9cLS9n
LCAnLCcpOwotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBhcnNlZCk7Ci0g
ICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLX0K
LQotQXBwLkNoYXJ0c0NvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAg
cXVlcnlQYXJhbXM6IFsncGFuZUxpc3QnLCAnem9vbScsICdzaW5jZSddLAotICAgIG5lZWRzOiBb
J3BhbmUnXSwKLSAgICBfY3VycmVudEVuY29kZWRQYW5lTGlzdDogbnVsbCwKLSAgICBwYW5lczog
W10sCi0gICAgcGxhdGZvcm1zOiBudWxsLAotICAgIHNoYXJlZFpvb206IG51bGwsCi0gICAgc3Rh
cnRUaW1lOiBudWxsLAotICAgIHByZXNlbnQ6IERhdGUubm93KCksCi0gICAgZGVmYXVsdFNpbmNl
OiBEYXRlLm5vdygpIC0gNyAqIDI0ICogMzYwMCAqIDEwMDAsCi0KLSAgICBhZGRQYW5lOiBmdW5j
dGlvbiAocGFuZSkKLSAgICB7Ci0gICAgICAgIHRoaXMucGFuZXMudW5zaGlmdE9iamVjdChwYW5l
KTsKLSAgICB9LAotCi0gICAgcmVtb3ZlUGFuZTogZnVuY3Rpb24gKHBhbmUpCi0gICAgewotICAg
ICAgICB0aGlzLnBhbmVzLnJlbW92ZU9iamVjdChwYW5lKTsKLSAgICB9LAotCi0gICAgcmVmcmVz
aFBhbmVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcGFuZUxpc3QgPSB0aGlzLmdl
dCgncGFuZUxpc3QnKTsKLSAgICAgICAgaWYgKHBhbmVMaXN0ID09PSB0aGlzLl9jdXJyZW50RW5j
b2RlZFBhbmVMaXN0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBwYW5lcyA9
IHRoaXMuX3BhcnNlUGFuZUxpc3QocGFuZUxpc3QgfHwgJ1tdJyk7Ci0gICAgICAgIGlmICghcGFu
ZXMpIHsKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gcGFyc2UnLCBqc29uUGFu
ZUxpc3QsIGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy5zZXQoJ3BhbmVzJywgcGFuZXMpOwotICAgICAgICB0aGlzLl9jdXJyZW50RW5jb2Rl
ZFBhbmVMaXN0ID0gcGFuZUxpc3Q7Ci0gICAgfS5vYnNlcnZlcygncGFuZUxpc3QnKS5vbignaW5p
dCcpLAotCi0gICAgcmVmcmVzaFpvb206IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB6
b29tID0gdGhpcy5nZXQoJ3pvb20nKTsKLSAgICAgICAgaWYgKCF6b29tKSB7Ci0gICAgICAgICAg
ICB0aGlzLnNldCgnc2hhcmVkWm9vbScsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgem9vbSA9IHpvb20uc3BsaXQoJy0nKTsKLSAgICAgICAgdmFyIHNl
bGVjdGlvbiA9IG5ldyBBcnJheSgyKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlbGVj
dGlvblswXSA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoem9vbVswXSkpOwotICAgICAgICAgICAgc2Vs
ZWN0aW9uWzFdID0gbmV3IERhdGUocGFyc2VGbG9hdCh6b29tWzFdKSk7Ci0gICAgICAgIH0gY2F0
Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHBhcnNlIHRo
ZSB6b29tJywgem9vbSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5zZXQoJ3NoYXJlZFpvb20n
LCBzZWxlY3Rpb24pOwotCi0gICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLmdldCgnc3RhcnRU
aW1lJyk7Ci0gICAgICAgIGlmIChzdGFydFRpbWUgJiYgc3RhcnRUaW1lID4gc2VsZWN0aW9uWzBd
KQotICAgICAgICAgICAgdGhpcy5zZXQoJ3N0YXJ0VGltZScsIHNlbGVjdGlvblswXSk7Ci0KLSAg
ICB9Lm9ic2VydmVzKCd6b29tJykub24oJ2luaXQnKSwKLQotICAgIF9zdGFydFRpbWVDaGFuZ2Vk
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHRoaXMuc2V0KCdzaGFyZWREb21haW4nLCBbdGhpcy5n
ZXQoJ3N0YXJ0VGltZScpLCB0aGlzLmdldCgncHJlc2VudCcpXSk7Ci0gICAgICAgIHRoaXMuX3Nj
aGVkdWxlUXVlcnlTdHJpbmdVcGRhdGUoKTsKLSAgICB9Lm9ic2VydmVzKCdzdGFydFRpbWUnKSwK
LQotICAgIF9zaW5jZUNoYW5nZWQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIHNpbmNlID0g
cGFyc2VJbnQodGhpcy5nZXQoJ3NpbmNlJykpOwotICAgICAgICBpZiAoaXNOYU4oc2luY2UpKQot
ICAgICAgICAgICAgc2luY2UgPSB0aGlzLmRlZmF1bHRTaW5jZTsKLSAgICAgICAgdGhpcy5zZXQo
J3N0YXJ0VGltZScsIG5ldyBEYXRlKHNpbmNlKSk7Ci0gICAgfS5vYnNlcnZlcygnc2luY2UnKS5v
bignaW5pdCcpLAotCi0gICAgX3BhcnNlUGFuZUxpc3Q6IGZ1bmN0aW9uIChlbmNvZGVkUGFuZUxp
c3QpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkUGFuZUxpc3QgPSBBcHAuZGVjb2RlUHJldHRp
ZmllZEpTT04oZW5jb2RlZFBhbmVMaXN0KTsKLSAgICAgICAgaWYgKCFwYXJzZWRQYW5lTGlzdCkK
LSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIC8vIEZJWE1FOiBEb24ndCByZS1j
cmVhdGUgYWxsIHBhbmVzLgotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIHJldHVy
biBwYXJzZWRQYW5lTGlzdC5tYXAoZnVuY3Rpb24gKHBhbmVJbmZvKSB7Ci0gICAgICAgICAgICB2
YXIgdGltZVJhbmdlID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBzZWxlY3RlZEl0ZW0gPSBudWxs
OwotICAgICAgICAgICAgaWYgKHBhbmVJbmZvWzJdIGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgdGltZVJhbmdlID0gcGFuZUluZm9bMl07Ci0gICAgICAgICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgdGltZVJhbmdlID0gW25ldyBEYXRlKHRpbWVSYW5n
ZVswXSksIG5ldyBEYXRlKHRpbWVSYW5nZVsxXSldOwotICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGYWlsZWQgdG8gcGFy
c2UgdGhlIHRpbWUgcmFuZ2U6IiwgdGltZVJhbmdlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gcGFu
ZUluZm9bMl07Ci0KLSAgICAgICAgICAgIHJldHVybiBBcHAuUGFuZS5jcmVhdGUoewotICAgICAg
ICAgICAgICAgIHN0b3JlOiBzZWxmLnN0b3JlLAotICAgICAgICAgICAgICAgIGluZm86IHBhbmVJ
bmZvLAotICAgICAgICAgICAgICAgIHBsYXRmb3JtSWQ6IHBhbmVJbmZvWzBdLAotICAgICAgICAg
ICAgICAgIG1ldHJpY0lkOiBwYW5lSW5mb1sxXSwKLSAgICAgICAgICAgICAgICBzZWxlY3RlZEl0
ZW06IHNlbGVjdGVkSXRlbSwKLSAgICAgICAgICAgICAgICB0aW1lUmFuZ2U6IHRpbWVSYW5nZSwK
LSAgICAgICAgICAgICAgICBzaG93RnVsbFlBeGlzOiBwYW5lSW5mb1szXSwKLSAgICAgICAgICAg
ICAgICBtb3ZpbmdBdmVyYWdlQ29uZmlnOiBwYW5lSW5mb1s0XSwKLSAgICAgICAgICAgICAgICBl
bnZlbG9waW5nQ29uZmlnOiBwYW5lSW5mb1s1XSwKLSAgICAgICAgICAgICAgICB0ZXN0UmFuZ2VT
ZWxlY3Rpb25Db25maWc6IHBhbmVJbmZvWzZdLAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0p
OwotICAgIH0sCi0KLSAgICBfc2VyaWFsaXplUGFuZUxpc3Q6IGZ1bmN0aW9uIChwYW5lcykKLSAg
ICB7Ci0gICAgICAgIGlmICghcGFuZXMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICByZXR1cm4gQXBwLmVuY29k
ZVByZXR0aWZpZWRKU09OKHBhbmVzLm1hcChmdW5jdGlvbiAocGFuZSkgewotICAgICAgICAgICAg
cmV0dXJuIFsKLSAgICAgICAgICAgICAgICBwYW5lLmdldCgncGxhdGZvcm1JZCcpLAotICAgICAg
ICAgICAgICAgIHBhbmUuZ2V0KCdtZXRyaWNJZCcpLAotICAgICAgICAgICAgICAgIHBhbmUuZ2V0
KCd0aW1lUmFuZ2UnKSA/IHBhbmUuZ2V0KCd0aW1lUmFuZ2UnKS5tYXAoZnVuY3Rpb24gKGRhdGUp
IHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIH0pIDogcGFuZS5nZXQoJ3NlbGVjdGVkSXRlbScpLAot
ICAgICAgICAgICAgICAgIHBhbmUuZ2V0KCdzaG93RnVsbFlBeGlzJyksCi0gICAgICAgICAgICAg
ICAgcGFuZS5nZXQoJ21vdmluZ0F2ZXJhZ2VDb25maWcnKSwKLSAgICAgICAgICAgICAgICBwYW5l
LmdldCgnZW52ZWxvcGluZ0NvbmZpZycpLAotICAgICAgICAgICAgICAgIHBhbmUuZ2V0KCd0ZXN0
UmFuZ2VTZWxlY3Rpb25Db25maWcnKSwKLSAgICAgICAgICAgIF07Ci0gICAgICAgIH0pKTsKLSAg
ICB9LAotCi0gICAgX3NjaGVkdWxlUXVlcnlTdHJpbmdVcGRhdGU6IGZ1bmN0aW9uICgpCi0gICAg
ewotICAgICAgICBFbWJlci5ydW4uZGVib3VuY2UodGhpcywgJ191cGRhdGVRdWVyeVN0cmluZycs
IDEwMDApOwotICAgIH0ub2JzZXJ2ZXMoJ3NoYXJlZFpvb20nLCAncGFuZXMuQGVhY2gucGxhdGZv
cm0nLCAncGFuZXMuQGVhY2gubWV0cmljJywgJ3BhbmVzLkBlYWNoLnNlbGVjdGVkSXRlbScsICdw
YW5lcy5AZWFjaC50aW1lUmFuZ2UnLAotICAgICAgICAncGFuZXMuQGVhY2guc2hvd0Z1bGxZQXhp
cycsICdwYW5lcy5AZWFjaC5tb3ZpbmdBdmVyYWdlQ29uZmlnJywgJ3BhbmVzLkBlYWNoLmVudmVs
b3BpbmdDb25maWcnLCAncGFuZXMuQGVhY2gudGVzdFJhbmdlU2VsZWN0aW9uQ29uZmlnJyksCi0K
LSAgICBfdXBkYXRlUXVlcnlTdHJpbmc6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlz
Ll9jdXJyZW50RW5jb2RlZFBhbmVMaXN0ID0gdGhpcy5fc2VyaWFsaXplUGFuZUxpc3QodGhpcy5n
ZXQoJ3BhbmVzJykpOwotICAgICAgICB0aGlzLnNldCgncGFuZUxpc3QnLCB0aGlzLl9jdXJyZW50
RW5jb2RlZFBhbmVMaXN0KTsKLQotICAgICAgICB2YXIgem9vbSA9IHVuZGVmaW5lZDsKLSAgICAg
ICAgdmFyIHNoYXJlZFpvb20gPSB0aGlzLmdldCgnc2hhcmVkWm9vbScpOwotICAgICAgICBpZiAo
c2hhcmVkWm9vbSAmJiAhQXBwLmRvbWFpbnNBcmVFcXVhbChzaGFyZWRab29tLCB0aGlzLmdldCgn
c2hhcmVkRG9tYWluJykpKQotICAgICAgICAgICAgem9vbSA9ICtzaGFyZWRab29tWzBdICsgJy0n
ICsgK3NoYXJlZFpvb21bMV07Ci0gICAgICAgIHRoaXMuc2V0KCd6b29tJywgem9vbSk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuZ2V0KCdzdGFydFRpbWUnKSAtIHRoaXMuZGVmYXVsdFNpbmNlKQotICAg
ICAgICAgICAgdGhpcy5zZXQoJ3NpbmNlJywgdGhpcy5nZXQoJ3N0YXJ0VGltZScpIC0gMCk7Ci0g
ICAgfSwKLQotICAgIGFjdGlvbnM6IHsKLSAgICAgICAgYWRkUGFuZUJ5TWV0cmljQW5kUGxhdGZv
cm06IGZ1bmN0aW9uIChwYXJhbSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5hZGRQYW5l
KEFwcC5QYW5lLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsCi0g
ICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogcGFyYW0ucGxhdGZvcm0uZ2V0KCdpZCcpLAotICAg
ICAgICAgICAgICAgIG1ldHJpY0lkOiBwYXJhbS5tZXRyaWMuZ2V0KCdpZCcpLAotICAgICAgICAg
ICAgICAgIHNob3dpbmdEZXRhaWxzOiBmYWxzZQotICAgICAgICAgICAgfSkpOwotICAgICAgICB9
LAotICAgICAgICBhZGRBbHRlcm5hdGl2ZVBhbmVzOiBmdW5jdGlvbiAocGFuZSwgcGxhdGZvcm0s
IG1ldHJpY3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBwYW5lcyA9IHRoaXMucGFuZXM7
Ci0gICAgICAgICAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlOwotICAgICAgICAgICAgdmFyIHN0
YXJ0aW5nSW5kZXggPSBwYW5lcy5pbmRleE9mKHBhbmUpICsgMTsKLSAgICAgICAgICAgIG1ldHJp
Y3MuZm9yRWFjaChmdW5jdGlvbiAobWV0cmljLCBpbmRleCkgewotICAgICAgICAgICAgICAgIHBh
bmVzLmluc2VydEF0KHN0YXJ0aW5nSW5kZXggKyBpbmRleCwgQXBwLlBhbmUuY3JlYXRlKHsKLSAg
ICAgICAgICAgICAgICAgICAgc3RvcmU6IHN0b3JlLAotICAgICAgICAgICAgICAgICAgICBwbGF0
Zm9ybUlkOiBwbGF0Zm9ybS5nZXQoJ2lkJyksCi0gICAgICAgICAgICAgICAgICAgIG1ldHJpY0lk
OiBtZXRyaWMuZ2V0KCdpZCcpLAotICAgICAgICAgICAgICAgICAgICBzaG93aW5nRGV0YWlsczog
ZmFsc2UKLSAgICAgICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICB9KQotICAgICAgICB9Ci0g
ICAgfSwKLQotICAgIGluaXQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLl9zdXBl
cigpOwotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIEFwcC5idWlsZFBvcHVwKHRo
aXMuc3RvcmUsICdhZGRQYW5lQnlNZXRyaWNBbmRQbGF0Zm9ybScpLnRoZW4oZnVuY3Rpb24gKHBs
YXRmb3JtcykgewotICAgICAgICAgICAgc2VsZi5zZXQoJ3BsYXRmb3JtcycsIHBsYXRmb3Jtcyk7
Ci0gICAgICAgIH0pOwotICAgIH0sCi19KTsKLQotQXBwLmJ1aWxkUG9wdXAgPSBmdW5jdGlvbihz
dG9yZSwgYWN0aW9uLCBwb3NpdGlvbikKLXsKLSAgICByZXR1cm4gQXBwLk1hbmlmZXN0LmZldGNo
KHN0b3JlKS50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIEFwcC5NYW5pZmVzdC5n
ZXQoJ3BsYXRmb3JtcycpLnNvcnRCeSgnbGFiZWwnKS5tYXAoZnVuY3Rpb24gKHBsYXRmb3JtKSB7
Ci0gICAgICAgICAgICByZXR1cm4gQXBwLlBsYXRmb3JtUHJveHlGb3JQb3B1cC5jcmVhdGUoe2Nv
bnRlbnQ6IHBsYXRmb3JtLAotICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLCBwb3NpdGlv
bjogcG9zaXRpb259KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLUFwcC5QbGF0Zm9ybVBy
b3h5Rm9yUG9wdXAgPSBFbWJlci5PYmplY3RQcm94eS5leHRlbmQoewotICAgIGNoaWxkcmVuOiBm
dW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHBsYXRmb3JtID0gdGhpcy5jb250ZW50Owot
ICAgICAgICB2YXIgY29udGFpbnNUZXN0ID0gdGhpcy5jb250ZW50LmNvbnRhaW5zVGVzdC5iaW5k
KHRoaXMuY29udGVudCk7Ci0gICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLmdldCgnYWN0aW9uJyk7
Ci0gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0KCdwb3NpdGlvbicpOwotICAgICAgICBy
ZXR1cm4gQXBwLk1hbmlmZXN0LmdldCgndG9wTGV2ZWxUZXN0cycpCi0gICAgICAgICAgICAuZmls
dGVyKGNvbnRhaW5zVGVzdCkKLSAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRlc3QpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQXBwLlRlc3RQcm94eUZvclBvcHVwLmNyZWF0ZSh7Y29udGVu
dDogdGVzdCwgcGxhdGZvcm06IHBsYXRmb3JtLCBhY3Rpb246IGFjdGlvbiwgcG9zaXRpb246IHBv
c2l0aW9ufSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9LnByb3BlcnR5KCdBcHAuTWFuaWZlc3Qu
dG9wTGV2ZWxUZXN0cycpLAotfSk7Ci0KLUFwcC5UZXN0UHJveHlGb3JQb3B1cCA9IEVtYmVyLk9i
amVjdFByb3h5LmV4dGVuZCh7Ci0gICAgcGxhdGZvcm06IG51bGwsCi0gICAgY2hpbGRyZW46IGZ1
bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVDaGlsZHJlbigpOwotICAgICAg
ICByZXR1cm4gdGhpcy5fY2hpbGRyZW47Ci0gICAgfS5wcm9wZXJ0eSgnY2hpbGRUZXN0cycsICdt
ZXRyaWNzJyksCi0gICAgYWN0aW9uTmFtZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3VwZGF0ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lOwot
ICAgIH0ucHJvcGVydHkoJ2NoaWxkVGVzdHMnLCAnbWV0cmljcycpLAotICAgIGFjdGlvbkFyZ3Vt
ZW50OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4oKTsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbkFyZ3VtZW50OwotICAgIH0ucHJvcGVydHkoJ2No
aWxkVGVzdHMnLCAnbWV0cmljcycpLAotICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24gKCkK
LSAgICB7Ci0gICAgICAgIHZhciBwbGF0Zm9ybSA9IHRoaXMuZ2V0KCdwbGF0Zm9ybScpOwotICAg
ICAgICB2YXIgYWN0aW9uID0gdGhpcy5nZXQoJ2FjdGlvbicpOwotICAgICAgICB2YXIgcG9zaXRp
b24gPSB0aGlzLmdldCgncG9zaXRpb24nKTsKLQotICAgICAgICB2YXIgY2hpbGRUZXN0cyA9IHRo
aXMuZ2V0KCdjaGlsZFRlc3RzJykKLSAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHRlc3Qp
IHsgcmV0dXJuIHBsYXRmb3JtLmNvbnRhaW5zVGVzdCh0ZXN0KTsgfSkKLSAgICAgICAgICAgIC5t
YXAoZnVuY3Rpb24gKHRlc3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQXBwLlRlc3RQcm94
eUZvclBvcHVwLmNyZWF0ZSh7Y29udGVudDogdGVzdCwgcGxhdGZvcm06IHBsYXRmb3JtLCBhY3Rp
b246IGFjdGlvbiwgcG9zaXRpb246IHBvc2l0aW9ufSk7Ci0gICAgICAgICAgICB9KTsKLQotICAg
ICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0KCdtZXRyaWNzJykKLSAgICAgICAgICAgIC5maWx0
ZXIoZnVuY3Rpb24gKG1ldHJpYykgeyByZXR1cm4gcGxhdGZvcm0uY29udGFpbnNNZXRyaWMobWV0
cmljKTsgfSkKLSAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKG1ldHJpYykgewotICAgICAgICAg
ICAgICAgIHZhciBhZ2dyZWdhdG9yID0gbWV0cmljLmdldCgnYWdncmVnYXRvcicpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5hbWU6IGFjdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uQXJndW1lbnQ6IHtwbGF0Zm9ybTogcGxhdGZv
cm0sIG1ldHJpYzogbWV0cmljLCBwb3NpdGlvbjpwb3NpdGlvbn0sCi0gICAgICAgICAgICAgICAg
ICAgIGxhYmVsOiBtZXRyaWMuZ2V0KCdsYWJlbCcpCi0gICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgIGlmIChjaGlsZFRlc3RzLmxlbmd0aCAmJiBtZXRyaWNzLmxl
bmd0aCkKLSAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7aXNTZXBhcmF0b3I6IHRydWV9KTsKLSAg
ICAgICAgZWxzZSBpZiAobWV0cmljcy5sZW5ndGggPT0gMSkgewotICAgICAgICAgICAgdGhpcy5f
YWN0aW9uTmFtZSA9IGFjdGlvbjsKLSAgICAgICAgICAgIHRoaXMuX2FjdGlvbkFyZ3VtZW50ID0g
bWV0cmljc1swXS5hY3Rpb25Bcmd1bWVudDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX2FjdGlvbk5hbWUgPSBudWxsOwotICAgICAgICB0aGlzLl9hY3Rp
b25Bcmd1bWVudCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gbWV0cmljcy5jb25j
YXQoY2hpbGRUZXN0cyk7Ci0gICAgfSwKLX0pOwotCi1BcHAuZG9tYWluc0FyZUVxdWFsID0gZnVu
Y3Rpb24gKGRvbWFpbjEsIGRvbWFpbjIpIHsKLSAgICByZXR1cm4gKCFkb21haW4xICYmICFkb21h
aW4yKSB8fCAoZG9tYWluMSAmJiBkb21haW4yICYmICEoZG9tYWluMVswXSAtIGRvbWFpbjJbMF0p
ICYmICEoZG9tYWluMVsxXSAtIGRvbWFpbjJbMV0pKTsKLX0KLQotQXBwLlBhbmVDb250cm9sbGVy
ID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5leHRlbmQoewotICAgIG5lZWRzOiBbJ2NoYXJ0cydd
LAotICAgIHNoYXJlZFRpbWU6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdwYXJlbnRDb250cm9sbGVy
LnNoYXJlZFRpbWUnKSwKLSAgICBzaGFyZWRTZWxlY3Rpb246IEVtYmVyLmNvbXB1dGVkLmFsaWFz
KCdwYXJlbnRDb250cm9sbGVyLnNoYXJlZFNlbGVjdGlvbicpLAotICAgIHNlbGVjdGlvbjogbnVs
bCwKLSAgICBhY3Rpb25zOiB7Ci0gICAgICAgIHRvZ2dsZURldGFpbHM6IGZ1bmN0aW9uKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdGhpcy50b2dnbGVQcm9wZXJ0eSgnc2hvd2luZ0RldGFpbHMn
KTsKLSAgICAgICAgfSwKLSAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbGxlci5yZW1vdmVQYW5lKHRoaXMuZ2V0KCdtb2Rl
bCcpKTsKLSAgICAgICAgfSwKLSAgICAgICAgdG9nZ2xlQnVnc1BhbmU6IGZ1bmN0aW9uICgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnRvZ2dsZVByb3BlcnR5KCdzaG93aW5nQW5h
bHlzaXNQYW5lJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldCgnc2hvd2luZ1NlYXJjaFBh
bmUnLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3Nob3dpbmdTdGF0UGFuZScs
IGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgdG9nZ2xlU2hvd091
dGxpZXI6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuZ2V0KCdtb2Rl
bCcpLnRvZ2dsZVByb3BlcnR5KCdzaG93T3V0bGllcicpOwotICAgICAgICB9LAotICAgICAgICBj
cmVhdGVBbmFseXNpc1Rhc2s6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciBuYW1lID0gdGhpcy5nZXQoJ25ld0FuYWx5c2lzVGFza05hbWUnKTsKLSAgICAgICAgICAgIHZh
ciBwb2ludHMgPSB0aGlzLmdldCgnc2VsZWN0ZWRQb2ludHMnKTsKLSAgICAgICAgICAgIEVtYmVy
LmFzc2VydCgnVGhlIGFuYWx5c2lzIG5hbWUgc2hvdWxkIG5vdCBiZSBlbXB0eScsIG5hbWUpOwot
ICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIHBv
aW50cyBpbiB0aGUgcmFuZ2UnLCBwb2ludHMgJiYgcG9pbnRzLmxlbmd0aCA+PSAyKTsKLQotICAg
ICAgICAgICAgdmFyIG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKCk7Ci0gICAgICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICBBcHAuQW5hbHlzaXNUYXNrLmNyZWF0ZShuYW1lLCBw
b2ludHNbMF0ubWVhc3VyZW1lbnQsIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0ubWVhc3VyZW1l
bnQpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXBk
YXRlIHRoZSBVSSB0byBzaG93IHRoZSBuZXcgYW5hbHlzaXMgdGFzay4KLSAgICAgICAgICAgICAg
ICB2YXIgdXJsID0gQXBwLlJvdXRlci5yb3V0ZXIuZ2VuZXJhdGUoJ2FuYWx5c2lzVGFzaycsIGRh
dGFbJ3Rhc2tJZCddKTsKLSAgICAgICAgICAgICAgICBuZXdXaW5kb3cubG9jYXRpb24uaHJlZiA9
ICcjJyArIHVybDsKLSAgICAgICAgICAgICAgICBzZWxmLmdldCgnbW9kZWwnKS5mZXRjaEFuYWx5
dGljUmFuZ2VzKCk7Ci0gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgICAgICBuZXdXaW5kb3cuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT09
ICdEdXBsaWNhdGVBbmFseXNpc1Rhc2snKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBEdXBsaWNhdGUgdGhpcyBlcnJvciBtb3JlIGdyYWNlZnVsbHkuCi0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9yKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9LAotICAgICAgICB0b2dnbGVTZWFyY2hQYW5lOiBmdW5jdGlvbiAoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIUFwcC5NYW5pZmVzdC5yZXBvc2l0b3JpZXNXaXRoUmVwb3J0ZWRDb21t
aXRzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBtb2RlbCA9IHRo
aXMuZ2V0KCdtb2RlbCcpOwotICAgICAgICAgICAgaWYgKCFtb2RlbC5nZXQoJ2NvbW1pdFNlYXJj
aFJlcG9zaXRvcnknKSkKLSAgICAgICAgICAgICAgICBtb2RlbC5zZXQoJ2NvbW1pdFNlYXJjaFJl
cG9zaXRvcnknLCBBcHAuTWFuaWZlc3QucmVwb3NpdG9yaWVzV2l0aFJlcG9ydGVkQ29tbWl0c1sw
XSk7Ci0gICAgICAgICAgICBpZiAodGhpcy50b2dnbGVQcm9wZXJ0eSgnc2hvd2luZ1NlYXJjaFBh
bmUnKSkgewotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdzaG93aW5nQW5hbHlzaXNQYW5lJywg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdzaG93aW5nU3RhdFBhbmUnLCBmYWxz
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHNlYXJjaENvbW1pdDogZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0g
ICAgICAgICAgICBtb2RlbC5zZWFyY2hDb21taXQobW9kZWwuZ2V0KCdjb21taXRTZWFyY2hSZXBv
c2l0b3J5JyksIG1vZGVsLmdldCgnY29tbWl0U2VhcmNoS2V5d29yZCcpKTsgICAgICAgICAgICAg
ICAgCi0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZVN0YXRQYW5lOiBmdW5jdGlvbiAoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcy50b2dnbGVQcm9wZXJ0eSgnc2hvd2luZ1N0YXRQ
YW5lJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldCgnc2hvd2luZ1NlYXJjaFBhbmUnLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3Nob3dpbmdBbmFseXNpc1BhbmUnLCBm
YWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHpvb21lZDogZnVuY3Rp
b24gKHNlbGVjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5zZXQoJ21haW5QbG90
RG9tYWluJywgc2VsZWN0aW9uID8gc2VsZWN0aW9uIDogdGhpcy5nZXQoJ292ZXJ2aWV3RG9tYWlu
JykpOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbikKLSAgICAgICAgICAgICAgICB0aGlzLnNl
dCgnb3ZlcnZpZXdTZWxlY3Rpb24nLCBzZWxlY3Rpb24pOwotICAgICAgICAgICAgRW1iZXIucnVu
LmRlYm91bmNlKHRoaXMsICdwcm9wYWdhdGVab29tJywgMTAwKTsKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIF9vdmVydmlld1NlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAg
ICAgICB2YXIgb3ZlcnZpZXdTZWxlY3Rpb24gPSB0aGlzLmdldCgnb3ZlcnZpZXdTZWxlY3Rpb24n
KTsKLSAgICAgICAgaWYgKEFwcC5kb21haW5zQXJlRXF1YWwob3ZlcnZpZXdTZWxlY3Rpb24sIHRo
aXMuZ2V0KCdtYWluUGxvdERvbWFpbicpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
dGhpcy5zZXQoJ21haW5QbG90RG9tYWluJywgb3ZlcnZpZXdTZWxlY3Rpb24gfHwgdGhpcy5nZXQo
J292ZXJ2aWV3RG9tYWluJykpOwotICAgICAgICBFbWJlci5ydW4uZGVib3VuY2UodGhpcywgJ3By
b3BhZ2F0ZVpvb20nLCAxMDApOwotICAgIH0ub2JzZXJ2ZXMoJ292ZXJ2aWV3U2VsZWN0aW9uJyks
Ci0gICAgX3NoYXJlZERvbWFpbkNoYW5nZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2
YXIgbmV3RG9tYWluID0gdGhpcy5nZXQoJ3BhcmVudENvbnRyb2xsZXInKS5nZXQoJ3NoYXJlZERv
bWFpbicpOwotICAgICAgICBpZiAoQXBwLmRvbWFpbnNBcmVFcXVhbChuZXdEb21haW4sIHRoaXMu
Z2V0KCdvdmVydmlld0RvbWFpbicpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhp
cy5zZXQoJ292ZXJ2aWV3RG9tYWluJywgbmV3RG9tYWluKTsKLSAgICAgICAgaWYgKCF0aGlzLmdl
dCgnb3ZlcnZpZXdTZWxlY3Rpb24nKSkKLSAgICAgICAgICAgIHRoaXMuc2V0KCdtYWluUGxvdERv
bWFpbicsIG5ld0RvbWFpbik7Ci0gICAgfS5vYnNlcnZlcygncGFyZW50Q29udHJvbGxlci5zaGFy
ZWREb21haW4nKS5vbignaW5pdCcpLAotICAgIHByb3BhZ2F0ZVpvb206IGZ1bmN0aW9uICgpCi0g
ICAgewotICAgICAgICB0aGlzLmdldCgncGFyZW50Q29udHJvbGxlcicpLnNldCgnc2hhcmVkWm9v
bScsIHRoaXMuZ2V0KCdtYWluUGxvdERvbWFpbicpKTsKLSAgICB9LAotICAgIF9zaGFyZWRab29t
Q2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBuZXdTZWxlY3Rpb24gPSB0
aGlzLmdldCgncGFyZW50Q29udHJvbGxlcicpLmdldCgnc2hhcmVkWm9vbScpOwotICAgICAgICBp
ZiAoQXBwLmRvbWFpbnNBcmVFcXVhbChuZXdTZWxlY3Rpb24sIHRoaXMuZ2V0KCdtYWluUGxvdERv
bWFpbicpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5zZXQoJ21haW5QbG90
RG9tYWluJywgbmV3U2VsZWN0aW9uIHx8IHRoaXMuZ2V0KCdvdmVydmlld0RvbWFpbicpKTsKLSAg
ICAgICAgdGhpcy5zZXQoJ292ZXJ2aWV3U2VsZWN0aW9uJywgbmV3U2VsZWN0aW9uKTsKLSAgICB9
Lm9ic2VydmVzKCdwYXJlbnRDb250cm9sbGVyLnNoYXJlZFpvb20nKS5vbignaW5pdCcpLAotICAg
IF91cGRhdGVDYW5BbmFseXplOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHBhbmUg
PSB0aGlzLmdldCgnbW9kZWwnKTsKLSAgICAgICAgdmFyIHBvaW50cyA9IHBhbmUuZ2V0KCdzZWxl
Y3RlZFBvaW50cycpOwotICAgICAgICB0aGlzLnNldCgnY2Fubm90QW5hbHl6ZScsICF0aGlzLmdl
dCgnbmV3QW5hbHlzaXNUYXNrTmFtZScpIHx8ICFwb2ludHMgfHwgcG9pbnRzLmxlbmd0aCA8IDIp
OwotICAgICAgICB0aGlzLnNldCgnY2Fubm90TWFya091dGxpZXInLCAhIXBvaW50cyB8fCAhdGhp
cy5nZXQoJ3NlbGVjdGVkSXRlbScpKTsKLQotICAgICAgICB2YXIgc2VsZWN0ZWRNZWFzdXJlbWVu
dCA9IHRoaXMuc2VsZWN0ZWRNZWFzdXJlbWVudCgpOwotICAgICAgICB0aGlzLnNldCgnc2VsZWN0
ZWRJdGVtSXNNYXJrZWRPdXRsaWVyJywgc2VsZWN0ZWRNZWFzdXJlbWVudCAmJiBzZWxlY3RlZE1l
YXN1cmVtZW50Lm1hcmtlZE91dGxpZXIoKSk7Ci0KLSAgICB9Lm9ic2VydmVzKCduZXdBbmFseXNp
c1Rhc2tOYW1lJywgJ21vZGVsLnNlbGVjdGVkUG9pbnRzJywgJ21vZGVsLnNlbGVjdGVkSXRlbScp
Lm9uKCdpbml0JyksCi0gICAgc2VsZWN0ZWRNZWFzdXJlbWVudDogZnVuY3Rpb24gKCkgewotICAg
ICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ21vZGVsJykuZ2V0KCdjaGFydERhdGEnKTsK
LSAgICAgICAgdmFyIHNlbGVjdGVkSXRlbSA9IHRoaXMuZ2V0KCdzZWxlY3RlZEl0ZW0nKTsKLSAg
ICAgICAgaWYgKCFjaGFydERhdGEgfHwgIXNlbGVjdGVkSXRlbSkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB2YXIgcG9pbnQgPSBjaGFydERhdGEuY3VycmVudC5maW5kUG9pbnRC
eU1lYXN1cmVtZW50SWQoc2VsZWN0ZWRJdGVtKTsKLSAgICAgICAgRW1iZXIuYXNzZXJ0KCdzZWxl
Y3RlZEl0ZW0gc2hvdWxkIGFsd2F5cyBiZSBpbiB0aGUgY3VycmVudCBjaGFydCBkYXRhJywgcG9p
bnQpOwotICAgICAgICByZXR1cm4gcG9pbnQubWVhc3VyZW1lbnQ7Ci0gICAgfSwKLSAgICBzaG93
T3V0bGllclRpdGxlOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0
KCdzaG93T3V0bGllcicpID8gJ0hpZGUgb3V0bGllcnMnIDogJ1Nob3cgb3V0bGllcnMnOwotICAg
IH0ucHJvcGVydHkoJ3Nob3dPdXRsaWVyJyksCi0gICAgX3NlbGVjdGVkSXRlbUlzTWFya2VkT3V0
bGllckRpZENoYW5nZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZE1l
YXN1cmVtZW50ID0gdGhpcy5zZWxlY3RlZE1lYXN1cmVtZW50KCk7Ci0gICAgICAgIGlmICghc2Vs
ZWN0ZWRNZWFzdXJlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHNlbGVj
dGVkSXRlbUlzTWFya2VkT3V0bGllciA9IHRoaXMuZ2V0KCdzZWxlY3RlZEl0ZW1Jc01hcmtlZE91
dGxpZXInKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkTWVhc3VyZW1lbnQubWFya2VkT3V0bGllcigp
ID09IHNlbGVjdGVkSXRlbUlzTWFya2VkT3V0bGllcikKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdmFyIHBhbmUgPSB0aGlzLmdldCgnbW9kZWwnKTsKLSAgICAgICAgc2VsZWN0ZWRNZWFz
dXJlbWVudC5zZXRNYXJrZWRPdXRsaWVyKCEhc2VsZWN0ZWRJdGVtSXNNYXJrZWRPdXRsaWVyKS50
aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGFsZXJ0KHNlbGVjdGVkSXRlbUlzTWFya2Vk
T3V0bGllciA/ICdNYXJrZWQgdGhlIHBvaW50IGFzIGFuIG91dGxpZXInIDogJ1RoZSBwb2ludCBp
cyBubyBsb25nZXIgbWFya2VkIGFzIGFuIG91dGxpZXInKTsKLSAgICAgICAgICAgIHBhbmUucmVm
ZXRjaFJ1bnMoKTsKLSAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAgICAgICAgICBh
bGVydCgnRmFpbGVkIHRvIHVwZGF0ZSB0aGUgc3RhdHVzOicgKyBlcnJvcik7Ci0gICAgICAgIH0p
OwotICAgIH0ub2JzZXJ2ZXMoJ3NlbGVjdGVkSXRlbUlzTWFya2VkT3V0bGllcicpLAotICAgIGFs
dGVybmF0aXZlUGFuZXM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgcGFuZSA9IHRo
aXMuZ2V0KCdtb2RlbCcpOwotICAgICAgICB2YXIgbWV0cmljID0gcGFuZS5nZXQoJ21ldHJpYycp
OwotICAgICAgICB2YXIgY3VycmVudFBsYXRmb3JtID0gcGFuZS5nZXQoJ3BsYXRmb3JtJyk7Ci0g
ICAgICAgIHZhciBwbGF0Zm9ybXMgPSBBcHAuTWFuaWZlc3QuZ2V0KCdwbGF0Zm9ybXMnKTsKLSAg
ICAgICAgaWYgKCFwbGF0Zm9ybXMgfHwgIW1ldHJpYykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgZXhpdGluZ1BsYXRmb3JtcyA9IHt9OwotICAgICAgICB0aGlzLmdldCgncGFy
ZW50Q29udHJvbGxlcicpLmdldCgncGFuZXMnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYW5lKSB7Ci0g
ICAgICAgICAgICBpZiAocGFuZS5nZXQoJ21ldHJpY0lkJykgPT0gbWV0cmljLmdldCgnaWQnKSkK
LSAgICAgICAgICAgICAgICBleGl0aW5nUGxhdGZvcm1zW3BhbmUuZ2V0KCdwbGF0Zm9ybUlkJyld
ID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIGFsdGVybmF0aXZlUGFuZXMgPSBw
bGF0Zm9ybXMuZmlsdGVyKGZ1bmN0aW9uIChwbGF0Zm9ybSkgewotICAgICAgICAgICAgcmV0dXJu
ICFleGl0aW5nUGxhdGZvcm1zW3BsYXRmb3JtLmdldCgnaWQnKV0gJiYgcGxhdGZvcm0uY29udGFp
bnNNZXRyaWMobWV0cmljKTsKLSAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChwbGF0Zm9ybSkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBwYW5lOiBwYW5lLAotICAgICAg
ICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICBtZXRyaWNzOiBb
bWV0cmljXSwKLSAgICAgICAgICAgICAgICBsYWJlbDogcGxhdGZvcm0uZ2V0KCdsYWJlbCcpCi0g
ICAgICAgICAgICB9OwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgY2hpbGRNZXRyaWNzID0g
bWV0cmljLmdldCgnY2hpbGRNZXRyaWNzJyk7Ci0gICAgICAgIGlmIChjaGlsZE1ldHJpY3MgJiYg
Y2hpbGRNZXRyaWNzLmxlbmd0aCkgewotICAgICAgICAgICAgYWx0ZXJuYXRpdmVQYW5lcy5wdXNo
KHsKLSAgICAgICAgICAgICAgICBwYW5lOiBwYW5lLAotICAgICAgICAgICAgICAgIHBsYXRmb3Jt
OiBjdXJyZW50UGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgbWV0cmljczogY2hpbGRNZXRyaWNz
LAotICAgICAgICAgICAgICAgIGxhYmVsOiAnQnJlYWtkb3duJywKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGFsdGVybmF0aXZlUGFuZXM7Ci0gICAgfS5wcm9w
ZXJ0eSgnbW9kZWwubWV0cmljJywgJ21vZGVsLnBsYXRmb3JtJywgJ0FwcC5NYW5pZmVzdC5wbGF0
Zm9ybXMnLAotICAgICAgICAncGFyZW50Q29udHJvbGxlci5wYW5lcy5AZWFjaC5wbGF0Zm9ybUlk
JywgJ3BhcmVudENvbnRyb2xsZXIucGFuZXMuQGVhY2gubWV0cmljSWQnKSwKLX0pOwotCi1BcHAu
QW5hbHlzaXNSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgbW9kZWw6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTsKLSAgICAgICAgcmV0dXJuIEFw
cC5NYW5pZmVzdC5mZXRjaChzdG9yZSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RvcmUuZmluZEFsbCgnYW5hbHlzaXNUYXNrJykudGhlbihmdW5jdGlvbiAodGFza3Mp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7J3Rhc2tzJzog
dGFza3Muc29ydEJ5KCdjcmVhdGVkQXQnKS50b0FycmF5KCkucmV2ZXJzZSgpfSk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLX0pOwotCi1BcHAuQW5hbHlzaXNUYXNrUm91
dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgIG1vZGVsOiBmdW5jdGlvbiAocGFyYW0pCi0g
ICAgewotICAgICAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlOwotICAgICAgICByZXR1cm4gQXBw
Lk1hbmlmZXN0LmZldGNoKHN0b3JlKS50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJl
dHVybiBzdG9yZS5maW5kKCdhbmFseXNpc1Rhc2snLCBwYXJhbS50YXNrSWQpOwotICAgICAgICB9
KTsKLSAgICB9LAotfSk7Ci0KLUFwcC5BbmFseXNpc1Rhc2tDb250cm9sbGVyID0gRW1iZXIuQ29u
dHJvbGxlci5leHRlbmQoewotICAgIGxhYmVsOiBFbWJlci5jb21wdXRlZC5hbGlhcygnbW9kZWwu
bmFtZScpLAotICAgIHBsYXRmb3JtOiBFbWJlci5jb21wdXRlZC5hbGlhcygnbW9kZWwucGxhdGZv
cm0nKSwKLSAgICBtZXRyaWM6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdtb2RlbC5tZXRyaWMnKSwK
LSAgICBkZXRhaWxzOiBFbWJlci5jb21wdXRlZC5hbGlhcygncGFuZS5kZXRhaWxzJyksCi0gICAg
cm9vdHM6IFtdLAotICAgIGJ1Z1RyYWNrZXJzOiBbXSwKLSAgICBwb3NzaWJsZVJlcGV0aXRpb25D
b3VudHM6IFsxLCAyLCAzLCA0LCA1LCA2XSwKLSAgICBhbmFseXNpc1Jlc3VsdE9wdGlvbnM6IFsK
LSAgICAgICAge2xhYmVsOiAnU3RpbGwgaW4gaW52ZXN0aWdhdGlvbicsIHJlc3VsdDogbnVsbH0s
Ci0gICAgICAgIHtsYWJlbDogJ0luY29uY2x1c2l2ZScsIHJlc3VsdDogJ2luY29uY2x1c2l2ZScs
IG5lZWRlZDogdHJ1ZX0sCi0gICAgICAgIHtsYWJlbDogJ0RlZmluaXRlIHByb2dyZXNzaW9uJywg
cmVzdWx0OiAncHJvZ3Jlc3Npb24nLCBuZWVkZWQ6IHRydWV9LAotICAgICAgICB7bGFiZWw6ICdE
ZWZpbml0ZSByZWdyZXNzaW9uJywgcmVzdWx0OiAncmVncmVzc2lvbicsIG5lZWRlZDogdHJ1ZX0s
Ci0gICAgICAgIHtsYWJlbDogJ05vIGNoYW5nZScsIHJlc3VsdDogJ3VuY2hhbmdlZCcsIG5lZWRz
RmVlZGJhY2s6IHRydWV9LAotICAgIF0sCi0gICAgc2hvdWxkTm90SGF2ZUJlZW5DcmVhdGVkOiBm
YWxzZSwKLSAgICBuZWVkc0ZlZWRiYWNrOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFy
IGNob3NlbiA9IHRoaXMuZ2V0KCdjaG9zZW5BbmFseXNpc1Jlc3VsdCcpOwotICAgICAgICByZXR1
cm4gY2hvc2VuICYmIGNob3Nlbi5uZWVkc0ZlZWRiYWNrOwotICAgIH0ucHJvcGVydHkoJ2Nob3Nl
bkFuYWx5c2lzUmVzdWx0JyksCi0gICAgX3VwZGF0ZUNob3NlbkFuYWx5c2lzUmVzdWx0OiBmdW5j
dGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIGFuYWx5c2lzVGFzayA9IHRoaXMuZ2V0KCdtb2Rl
bCcpOwotICAgICAgICBpZiAoIWFuYWx5c2lzVGFzaykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdmFyIGN1cnJlbnRSZXN1bHQgPSBhbmFseXNpc1Rhc2suZ2V0KCdyZXN1bHQnKTsKLSAg
ICAgICAgZm9yICh2YXIgb3B0aW9uIG9mIHRoaXMuYW5hbHlzaXNSZXN1bHRPcHRpb25zKSB7Ci0g
ICAgICAgICAgICBpZiAob3B0aW9uLnJlc3VsdCA9PSBjdXJyZW50UmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5zZXQoJ2Nob3NlbkFuYWx5c2lzUmVzdWx0Jywgb3B0aW9uKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Lm9ic2VydmVzKCdtb2RlbCcpLAotICAgIF90YXNrVXBkYXRlZDogZnVuY3Rpb24g
KCkKLSAgICB7Ci0gICAgICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0KCdtb2RlbCcpOwotICAgICAg
ICBpZiAoIW1vZGVsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFwcC5NYW5pZmVz
dC5mZXRjaCh0aGlzLnN0b3JlKS50aGVuKHRoaXMuX2ZldGNoZWRNYW5pZmVzdC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5zZXQoJ3BhbmUnLCBBcHAuUGFuZS5jcmVhdGUoewotICAgICAgICAg
ICAgc3RvcmU6IHRoaXMuc3RvcmUsCi0gICAgICAgICAgICBwbGF0Zm9ybUlkOiBtb2RlbC5nZXQo
J3BsYXRmb3JtJykuZ2V0KCdpZCcpLAotICAgICAgICAgICAgbWV0cmljSWQ6IG1vZGVsLmdldCgn
bWV0cmljJykuZ2V0KCdpZCcpLAotICAgICAgICB9KSk7Ci0KLSAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOwotICAgICAgICBtb2RlbC5nZXQoJ3Rlc3RHcm91cHMnKS50aGVuKGZ1bmN0aW9uIChncm91
cHMpIHsKLSAgICAgICAgICAgIHNlbGYuc2V0KCd0ZXN0R3JvdXBQYW5lcycsIGdyb3Vwcy5tYXAo
ZnVuY3Rpb24gKGdyb3VwKSB7IHJldHVybiBBcHAuVGVzdEdyb3VwUGFuZS5jcmVhdGUoe2NvbnRl
bnQ6IGdyb3VwfSk7IH0pKTsKLSAgICAgICAgfSk7Ci0gICAgfS5vYnNlcnZlcygnbW9kZWwnLCAn
bW9kZWwudGVzdEdyb3VwcycpLm9uKCdpbml0JyksCi0gICAgX2ZldGNoZWRNYW5pZmVzdDogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciB0cmFja2VySWRUb0J1Z051bWJlciA9IHt9Owot
ICAgICAgICB0aGlzLmdldCgnbW9kZWwnKS5nZXQoJ2J1Z3MnKS5mb3JFYWNoKGZ1bmN0aW9uIChi
dWcpIHsKLSAgICAgICAgICAgIHRyYWNrZXJJZFRvQnVnTnVtYmVyW2J1Zy5nZXQoJ2J1Z1RyYWNr
ZXInKS5nZXQoJ2lkJyldID0gYnVnLmdldCgnbnVtYmVyJyk7Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIHRoaXMuc2V0KCdidWdUcmFja2VycycsIEFwcC5NYW5pZmVzdC5nZXQoJ2J1Z1RyYWNrZXJz
JykubWFwKGZ1bmN0aW9uIChidWdUcmFja2VyKSB7Ci0gICAgICAgICAgICB2YXIgYnVnTnVtYmVy
ID0gdHJhY2tlcklkVG9CdWdOdW1iZXJbYnVnVHJhY2tlci5nZXQoJ2lkJyldOwotICAgICAgICAg
ICAgcmV0dXJuIEVtYmVyLk9iamVjdFByb3h5LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgZWxl
bWVudElkOiAnYnVnLScgKyBidWdUcmFja2VyLmdldCgnaWQnKSwKLSAgICAgICAgICAgICAgICBj
b250ZW50OiBidWdUcmFja2VyLAotICAgICAgICAgICAgICAgIGJ1Z051bWJlcjogYnVnTnVtYmVy
LAotICAgICAgICAgICAgICAgIGJ1Z1VybDogYnVnVHJhY2tlci51cmxGcm9tQnVnTnVtYmVyKGJ1
Z051bWJlciksCi0gICAgICAgICAgICAgICAgZWRpdGVkQnVnTnVtYmVyOiBidWdOdW1iZXIsCi0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSkpOwotICAgIH0sCi0gICAgX2NoYXJ0RGF0YUNoYW5n
ZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgcGFuZSA9IHRoaXMuZ2V0KCdwYW5l
Jyk7Ci0gICAgICAgIGlmICghcGFuZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgY2hhcnREYXRhID0gcGFuZS5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoIWNoYXJ0
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBjdXJyZW50VGlt
ZVNlcmllcyA9IGNoYXJ0RGF0YS5jdXJyZW50OwotICAgICAgICBFbWJlci5hc3NlcnQoJ2NoYXJ0
RGF0YS5jdXJyZW50IHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCcsIGN1cnJlbnRUaW1lU2VyaWVz
KTsKLQotICAgICAgICB2YXIgc3RhcnQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeU1l
YXN1cmVtZW50SWQodGhpcy5nZXQoJ21vZGVsJykuZ2V0KCdzdGFydFJ1bicpKTsKLSAgICAgICAg
dmFyIGVuZCA9IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZCh0aGlz
LmdldCgnbW9kZWwnKS5nZXQoJ2VuZFJ1bicpKTsKLSAgICAgICAgaWYgKCFzdGFydCB8fCAhZW5k
KSB7Ci0gICAgICAgICAgICBpZiAoIXBhbmUuZ2V0KCdzaG93T3V0bGllcicpKQotICAgICAgICAg
ICAgICAgIHBhbmUuc2V0KCdzaG93T3V0bGllcicsIHRydWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbXMgPSB7fTsKLSAgICAg
ICAgaGlnaGxpZ2h0ZWRJdGVtc1tzdGFydC5tZWFzdXJlbWVudC5pZCgpXSA9IHRydWU7Ci0gICAg
ICAgIGhpZ2hsaWdodGVkSXRlbXNbZW5kLm1lYXN1cmVtZW50LmlkKCldID0gdHJ1ZTsKLQotICAg
ICAgICB2YXIgZm9ybWF0ZWRQb2ludHMgPSBjdXJyZW50VGltZVNlcmllcy5zZXJpZXNCZXR3ZWVu
UG9pbnRzKHN0YXJ0LCBlbmQpLm1hcChmdW5jdGlvbiAocG9pbnQsIGluZGV4KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGlkOiBwb2ludC5tZWFzdXJlbWVudC5pZCgp
LAotICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50OiBwb2ludC5tZWFzdXJlbWVudCwKLSAgICAg
ICAgICAgICAgICBsYWJlbDogJ1BvaW50ICcgKyAoaW5kZXggKyAxKSwKLSAgICAgICAgICAgICAg
ICB2YWx1ZTogY2hhcnREYXRhLmZvcm1hdHRlcihwb2ludC52YWx1ZSksCi0gICAgICAgICAgICB9
OwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgbWFyZ2luID0gKGVuZC50aW1lIC0gc3RhcnQu
dGltZSkgKiAwLjE7Ci0gICAgICAgIHRoaXMuc2V0KCdoaWdobGlnaHRlZEl0ZW1zJywgaGlnaGxp
Z2h0ZWRJdGVtcyk7Ci0gICAgICAgIHRoaXMuc2V0KCdvdmVydmlld0VuZFBvaW50cycsIFtzdGFy
dCwgZW5kXSk7Ci0gICAgICAgIHRoaXMuc2V0KCdhbmFseXNpc1BvaW50cycsIGZvcm1hdGVkUG9p
bnRzKTsKLQotICAgICAgICB2YXIgb3ZlcnZpZXdEb21haW4gPSBbc3RhcnQudGltZSAtIG1hcmdp
biwgK2VuZC50aW1lICsgbWFyZ2luXTsKLQotICAgICAgICB2YXIgdGVzdEdyb3VwUGFuZXMgPSB0
aGlzLmdldCgndGVzdEdyb3VwUGFuZXMnKTsKLSAgICAgICAgaWYgKHRlc3RHcm91cFBhbmVzKSB7
Ci0gICAgICAgICAgICB0ZXN0R3JvdXBQYW5lcy5zZXRFYWNoKCdvdmVydmlld1BhbmUnLCBwYW5l
KTsKLSAgICAgICAgICAgIHRlc3RHcm91cFBhbmVzLnNldEVhY2goJ292ZXJ2aWV3RG9tYWluJywg
b3ZlcnZpZXdEb21haW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5zZXQoJ292ZXJ2aWV3
RG9tYWluJywgb3ZlcnZpZXdEb21haW4pOwotICAgIH0ub2JzZXJ2ZXMoJ3BhbmUuY2hhcnREYXRh
JyksCi0gICAgdXBkYXRlUm9vdENvbmZpZ3VyYXRpb25zOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgdmFyIGFuYWx5c2lzUG9pbnRzID0gdGhpcy5nZXQoJ2FuYWx5c2lzUG9pbnRzJyk7Ci0g
ICAgICAgIGlmICghYW5hbHlzaXNQb2ludHMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZhciByZXBvc2l0b3J5VG9SZXZpc2lvbnMgPSB7fTsKLSAgICAgICAgYW5hbHlzaXNQb2ludHMu
Zm9yRWFjaChmdW5jdGlvbiAocG9pbnQsIHBvaW50SW5kZXgpIHsKLSAgICAgICAgICAgIHZhciBy
ZXZpc2lvbnMgPSBwb2ludC5tZWFzdXJlbWVudC5mb3JtYXR0ZWRSZXZpc2lvbnMoKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiByZXZpc2lvbnMpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXJlcG9zaXRvcnlUb1JldmlzaW9uc1tyZXBvc2l0b3J5SWRdKQotICAgICAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5VG9SZXZpc2lvbnNbcmVwb3NpdG9yeUlkXSA9IG5ldyBBcnJh
eSgpOwotICAgICAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IHJldmlzaW9uc1tyZXBvc2l0b3J5
SWRdOwotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlUb1JldmlzaW9uc1tyZXBvc2l0b3J5SWRd
LnB1c2goe3RpbWU6IHBvaW50Lm1lYXN1cmVtZW50LmxhdGVzdENvbW1pdFRpbWUoKSwgdmFsdWU6
IHJldmlzaW9uLmN1cnJlbnRSZXZpc2lvbn0pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LQotICAgICAgICB2YXIgY29tbWl0c1Byb21pc2VzID0gW107Ci0gICAgICAgIHZhciByZXBvc2l0
b3J5VG9JbmRleCA9IHt9OwotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5SWQgaW4gcmVwb3Np
dG9yeVRvUmV2aXNpb25zKSB7Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb25zID0gcmVwb3NpdG9y
eVRvUmV2aXNpb25zW3JlcG9zaXRvcnlJZF0uc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4g
YS50aW1lIC0gYi50aW1lOyB9KTsKLSAgICAgICAgICAgIHJlcG9zaXRvcnlUb0luZGV4W3JlcG9z
aXRvcnlJZF0gPSBjb21taXRzUHJvbWlzZXMubGVuZ3RoOwotICAgICAgICAgICAgY29tbWl0c1By
b21pc2VzLnB1c2goQ29tbWl0TG9ncy5mZXRjaENvbW1pdHMocmVwb3NpdG9yeUlkLCByZXZpc2lv
bnNbMF0udmFsdWUsIHJldmlzaW9uc1tyZXZpc2lvbnMubGVuZ3RoIC0gMV0udmFsdWUpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgdGhpcy5nZXQoJ21v
ZGVsJykuZ2V0KCd0cmlnZ2VyYWJsZScpLnRoZW4oZnVuY3Rpb24gKHRyaWdnZXJhYmxlKSB7Ci0g
ICAgICAgICAgICBpZiAoIXRyaWdnZXJhYmxlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIEVtYmVyLlJTVlAuUHJvbWlzZS5hbGwoY29tbWl0c1Byb21pc2VzKS50aGVuKGZ1
bmN0aW9uIChjb21taXRzTGlzdCkgewotICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdjb25maWd1
cmF0aW9ucycsIFsnQScsICdCJ10pOwotICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdyb290Q29u
ZmlndXJhdGlvbnMnLCB0cmlnZ2VyYWJsZS5nZXQoJ2FjY2VwdGVkUmVwb3NpdG9yaWVzJykubWFw
KGZ1bmN0aW9uIChyZXBvc2l0b3J5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9jcmVhdGVDb25maWd1cmF0aW9uKHJlcG9zaXRvcnksIGNvbW1pdHNMaXN0W3JlcG9zaXRvcnlU
b0luZGV4W3JlcG9zaXRvcnkuZ2V0KCdpZCcpXV0sIGFuYWx5c2lzUG9pbnRzKTsKLSAgICAgICAg
ICAgICAgICB9KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfS5vYnNlcnZl
cygnYW5hbHlzaXNQb2ludHMnKSwKLSAgICBfY3JlYXRlQ29uZmlndXJhdGlvbjogZnVuY3Rpb24o
cmVwb3NpdG9yeSwgY29tbWl0cywgYW5hbHlzaXNQb2ludHMpIHsKLSAgICAgICAgdmFyIHJlcG9z
aXRvcnlJZCA9IHJlcG9zaXRvcnkuZ2V0KCdpZCcpOwotCi0gICAgICAgIHZhciByZXZpc2lvblRv
UG9pbnRzID0ge307Ci0gICAgICAgIHZhciBtaXNzaW5nUG9pbnRzID0gW107Ci0gICAgICAgIGFu
YWx5c2lzUG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKHBvaW50LCBwb2ludEluZGV4KSB7Ci0gICAg
ICAgICAgICB2YXIgcmV2aXNpb24gPSBwb2ludC5tZWFzdXJlbWVudC5yZXZpc2lvbkZvclJlcG9z
aXRvcnkocmVwb3NpdG9yeUlkKTsKLSAgICAgICAgICAgIGlmICghcmV2aXNpb24pIHsKLSAgICAg
ICAgICAgICAgICBtaXNzaW5nUG9pbnRzLnB1c2gocG9pbnRJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFyZXZpc2lvblRvUG9p
bnRzW3JldmlzaW9uXSkKLSAgICAgICAgICAgICAgICByZXZpc2lvblRvUG9pbnRzW3JldmlzaW9u
XSA9IFtdOwotICAgICAgICAgICAgcmV2aXNpb25Ub1BvaW50c1tyZXZpc2lvbl0ucHVzaChwb2lu
dEluZGV4KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKCFjb21taXRzIHx8ICFjb21taXRz
Lmxlbmd0aCkgewotICAgICAgICAgICAgY29tbWl0cyA9IFtdOwotICAgICAgICAgICAgZm9yICh2
YXIgcmV2aXNpb24gaW4gcmV2aXNpb25Ub1BvaW50cykKLSAgICAgICAgICAgICAgICBjb21taXRz
LnB1c2goe3JldmlzaW9uOiByZXZpc2lvbn0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG9w
dGlvbnMgPSBbe2xhYmVsOiAnTm9uZSd9LCB7bGFiZWw6ICdDdXN0b20nLCBpc0N1c3RvbTogdHJ1
ZX1dOwotICAgICAgICBpZiAobWlzc2luZ1BvaW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgIG9w
dGlvbnNbMF0ubGFiZWwgKz0gJyAnICsgdGhpcy5fbGFiZWxGb3JQb2ludHMobWlzc2luZ1BvaW50
cyk7Ci0gICAgICAgICAgICBvcHRpb25zWzBdLnBvaW50cyA9IG1pc3NpbmdQb2ludHM7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKHZhciBjb21taXQgb2YgY29tbWl0cykgewotICAgICAgICAg
ICAgdmFyIHJldmlzaW9uID0gY29tbWl0LnJldmlzaW9uOwotICAgICAgICAgICAgdmFyIHBvaW50
cyA9IHJldmlzaW9uVG9Qb2ludHNbcmV2aXNpb25dOwotICAgICAgICAgICAgdmFyIGxhYmVsID0g
TWVhc3VyZW1lbnQuZm9ybWF0UmV2aXNpb25SYW5nZShyZXZpc2lvbikubGFiZWw7Ci0gICAgICAg
ICAgICBpZiAocG9pbnRzKQotICAgICAgICAgICAgICAgIGxhYmVsICs9ICcgJyArIHRoaXMuX2xh
YmVsRm9yUG9pbnRzKHBvaW50cyk7Ci0gICAgICAgICAgICBvcHRpb25zLnB1c2goe3ZhbHVlOiBy
ZXZpc2lvbiwgbGFiZWw6IGxhYmVsLCBwb2ludHM6IHBvaW50c30pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIGZpcnN0T3B0aW9uID0gbnVsbDsKLSAgICAgICAgdmFyIGxhc3RPcHRpb24gPSBu
dWxsOwotICAgICAgICBmb3IgKHZhciBvcHRpb24gb2Ygb3B0aW9ucykgewotICAgICAgICAgICAg
dmFyIHBvaW50cyA9IG9wdGlvbi5wb2ludHM7Ci0gICAgICAgICAgICBpZiAoIXBvaW50cykKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChwb2ludHMuaW5kZXhPZigw
KSA+PSAwKQotICAgICAgICAgICAgICAgIGZpcnN0T3B0aW9uID0gb3B0aW9uOwotICAgICAgICAg
ICAgaWYgKHBvaW50cy5pbmRleE9mKGFuYWx5c2lzUG9pbnRzLmxlbmd0aCAtIDEpID49IDApCi0g
ICAgICAgICAgICAgICAgbGFzdE9wdGlvbiA9IG9wdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgIHJlcG9zaXRvcnk6IHJl
cG9zaXRvcnksCi0gICAgICAgICAgICBuYW1lOiByZXBvc2l0b3J5LmdldCgnbmFtZScpLAotICAg
ICAgICAgICAgc2V0czogWwotICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25h
bWU6ICdBWycgKyByZXBvc2l0b3J5SWQgKyAnXScsCi0gICAgICAgICAgICAgICAgICAgIG9wdGlv
bnM6IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmlyc3RPcHRpb259
KSwKLSAgICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtuYW1lOiAnQlsnICsgcmVw
b3NpdG9yeUlkICsgJ10nLAotICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLAot
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGxhc3RPcHRpb259KSwKLSAgICAgICAgICAg
IF19KTsKLSAgICB9LAotICAgIF9sYWJlbEZvclBvaW50czogZnVuY3Rpb24gKHBvaW50cykKLSAg
ICB7Ci0gICAgICAgIHZhciBzZXJpYWxpemVkUG9pbnRzID0gdGhpcy5fc2VyaWFsaXplTnVtYmVy
c1NraXBwaW5nQ29uc2VjdXRpdmVFbnRyaWVzKHBvaW50cyk7Ci0gICAgICAgIHJldHVybiBbJygn
LCBwb2ludHMubGVuZ3RoID4gMSA/ICdwb2ludHMnIDogJ3BvaW50Jywgc2VyaWFsaXplZFBvaW50
cywgJyknXS5qb2luKCcgJyk7Ci0gICAgfSwKLSAgICBfc2VyaWFsaXplTnVtYmVyc1NraXBwaW5n
Q29uc2VjdXRpdmVFbnRyaWVzOiBmdW5jdGlvbiAobnVtYmVycykgewotICAgICAgICB2YXIgcmVz
dWx0ID0gbnVtYmVyc1swXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBudW1iZXJzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobnVtYmVyc1tpIC0gMV0gKyAxID09IG51bWJl
cnNbaV0pIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAobnVtYmVyc1tpXSArIDEgPT0gbnVtYmVy
c1tpICsgMV0pCi0gICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gJy0nICsgbnVtYmVyc1tpXTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnLCAnICsgbnVtYmVyc1tpXQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLSAgICBhY3Rpb25zOiB7Ci0gICAg
ICAgIGFkZEJ1ZzogZnVuY3Rpb24gKGJ1Z1RyYWNrZXIsIGJ1Z051bWJlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXQoJ21vZGVsJyk7Ci0gICAgICAgICAgICBp
ZiAoIWJ1Z1RyYWNrZXIpCi0gICAgICAgICAgICAgICAgYnVnVHJhY2tlciA9IHRoaXMuZ2V0KCdi
dWdUcmFja2VycycpLm9iamVjdEF0KDApOwotICAgICAgICAgICAgdmFyIGJ1ZyA9IHt0YXNrOiB0
aGlzLmdldCgnbW9kZWwnKSwgYnVnVHJhY2tlcjogYnVnVHJhY2tlci5nZXQoJ2NvbnRlbnQnKSwg
bnVtYmVyOiBidWdOdW1iZXJ9OwotICAgICAgICAgICAgdGhpcy5zdG9yZS5jcmVhdGVSZWNvcmQo
J2J1ZycsIGJ1Zykuc2F2ZSgpLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIGFs
ZXJ0KCdBc3NvY2lhdGVkIHRoZSAnICsgYnVnVHJhY2tlci5nZXQoJ25hbWUnKSArICcgJyArIGJ1
Z051bWJlciArICcgd2l0aCB0aGlzIGFuYWx5c2lzLicpOwotICAgICAgICAgICAgfSwgZnVuY3Rp
b24gKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBhc3NvY2lhdGUg
dGhlIGJ1ZzogJyArIGVycm9yKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAg
ICBkZWxldGVCdWc6IGZ1bmN0aW9uIChidWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zy5k
ZXN0cm95UmVjb3JkKCkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgYWxlcnQo
J1N1Y2Nlc3NmdWxseSBkZWFzc29jaWF0ZWQgdGhlIGJ1Zy4nKTsKLSAgICAgICAgICAgIH0sIGZ1
bmN0aW9uIChlcnJvcikgewotICAgICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZGlzYXNz
b2NpYXRlIHRoZSBidWc6ICcgKyBlcnJvcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwK
LSAgICAgICAgc2F2ZVN0YXR1czogZnVuY3Rpb24gKCkKLSAgICAgICAgewotICAgICAgICAgICAg
dmFyIGNob3NlblJlc3VsdCA9IHRoaXMuZ2V0KCdjaG9zZW5BbmFseXNpc1Jlc3VsdCcpOwotICAg
ICAgICAgICAgdmFyIGFuYWx5c2lzVGFzayA9IHRoaXMuZ2V0KCdtb2RlbCcpOwotICAgICAgICAg
ICAgYW5hbHlzaXNUYXNrLnNldCgncmVzdWx0JywgY2hvc2VuUmVzdWx0LnJlc3VsdCk7Ci0gICAg
ICAgICAgICBpZiAoY2hvc2VuUmVzdWx0Lm5lZWRlZCkKLSAgICAgICAgICAgICAgICBhbmFseXNp
c1Rhc2suc2V0KCduZWVkZWQnLCB0cnVlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNob3NlblJl
c3VsdC5uZWVkc0ZlZWRiYWNrICYmIHRoaXMuZ2V0KCdub3ROZWVkZWQnKSkKLSAgICAgICAgICAg
ICAgICBhbmFseXNpc1Rhc2suc2V0KCduZWVkZWQnLCBmYWxzZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgYW5hbHlzaXNUYXNrLnNldCgnbmVlZGVkJywgbnVsbCk7Ci0KLSAg
ICAgICAgICAgIGFuYWx5c2lzVGFzay5zYXZlU3RhdHVzKCkudGhlbihmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICAgICAgYWxlcnQoJ1NhdmVkIHRoZSBzdGF0dXMnKTsKLSAgICAgICAgICAgIH0s
IGZ1bmN0aW9uIChlcnJvcikgewotICAgICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gc2F2
ZSB0aGUgc3RhdHVzOiAnICsgZXJyb3IpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIGNyZWF0ZVRlc3RHcm91cDogZnVuY3Rpb24gKG5hbWUsIHJlcGV0aXRpb25Db3VudCkK
LSAgICAgICAgewotICAgICAgICAgICAgdmFyIGFuYWx5c2lzVGFzayA9IHRoaXMuZ2V0KCdtb2Rl
bCcpOwotICAgICAgICAgICAgaWYgKGFuYWx5c2lzVGFzay5nZXQoJ3Rlc3RHcm91cHMnKS5pc0Fu
eSgnbmFtZScsIG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgYWxlcnQoJ0Nhbm5vdCBjcmVhdGUg
dHdvIHRlc3QgZ3JvdXBzIG9mIHRoZSBzYW1lIG5hbWUuJyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcm9vdHMgPSB7fTsKLSAgICAg
ICAgICAgIHZhciByb290Q29uZmlndXJhdGlvbnMgPSB0aGlzLmdldCgncm9vdENvbmZpZ3VyYXRp
b25zJykudG9BcnJheSgpOwotICAgICAgICAgICAgZm9yICh2YXIgcm9vdCBvZiByb290Q29uZmln
dXJhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2V0cyA9IHJvb3QuZ2V0KCdzZXRzJyk7
Ci0gICAgICAgICAgICAgICAgdmFyIGhhc1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChpdGVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBpdGVtLmdldCgnc2VsZWN0aW9uJyk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24udmFsdWUgfHwgKHNlbGVjdGlv
bi5pc0N1c3RvbSAmJiBpdGVtLmdldCgnY3VzdG9tVmFsdWUnKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICghc2V0cy5hbnkoaGFzU2VsZWN0aW9uKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRzLmV2ZXJ5KGhh
c1NlbGVjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ09ubHkgc29tZSBjb25m
aWd1cmF0aW9uIHNwZWNpZmllcyAnICsgcm9vdC5nZXQoJ25hbWUnKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm9vdHNb
cm9vdC5nZXQoJ25hbWUnKV0gPSBzZXRzLm1hcChmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gaXRlbS5nZXQoJ3NlbGVjdGlvbicpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmlzQ3VzdG9tID8gaXRlbS5nZXQoJ2N1c3Rv
bVZhbHVlJykgOiBzZWxlY3Rpb24udmFsdWU7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEFwcC5UZXN0R3JvdXAuY3JlYXRlKGFuYWx5c2lzVGFzaywg
bmFtZSwgcm9vdHMsIHJlcGV0aXRpb25Db3VudCkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBhbGVydCgnRmFpbGVk
IHRvIGNyZWF0ZSBhIG5ldyB0ZXN0IGdyb3VwOicgKyBlcnJvcik7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfSwKLSAgICAgICAgdG9nZ2xlU2hvd1JlcXVlc3RMaXN0OiBmdW5jdGlvbiAoY29u
ZmlndXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uZmlndXJhdGlvbi50b2dnbGVQ
cm9wZXJ0eSgnc2hvd1JlcXVlc3RMaXN0Jyk7Ci0gICAgICAgIH0KLSAgICB9LAotICAgIF91cGRh
dGVSb290c0J5U2VsZWN0ZWRQb2ludHM6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIg
cm9vdENvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXQoJ3Jvb3RDb25maWd1cmF0aW9ucycpOwotICAg
ICAgICB2YXIgcGFuZSA9IHRoaXMuZ2V0KCdwYW5lJyk7Ci0gICAgICAgIGlmICghcm9vdENvbmZp
Z3VyYXRpb25zIHx8ICFwYW5lKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBy
b290U2V0UG9pbnRzOwotICAgICAgICB2YXIgc2VsZWN0ZWRQb2ludHMgPSBwYW5lLmdldCgnc2Vs
ZWN0ZWRQb2ludHMnKTsKLSAgICAgICAgaWYgKHNlbGVjdGVkUG9pbnRzICYmIHNlbGVjdGVkUG9p
bnRzLmxlbmd0aCA+PSAyKQotICAgICAgICAgICAgcm9vdFNldFBvaW50cyA9IFtzZWxlY3RlZFBv
aW50c1swXSwgc2VsZWN0ZWRQb2ludHNbc2VsZWN0ZWRQb2ludHMubGVuZ3RoIC0gMV1dOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByb290U2V0UG9pbnRzID0gdGhpcy5nZXQoJ292ZXJ2aWV3
RW5kUG9pbnRzJyk7Ci0gICAgICAgIGlmICghcm9vdFNldFBvaW50cykKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICByb290Q29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocm9v
dCkgewotICAgICAgICAgICAgcm9vdC5nZXQoJ3NldHMnKS5mb3JFYWNoKGZ1bmN0aW9uIChzZXQs
IHNldEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldEluZGV4ID49IHJvb3RTZXRQb2lu
dHMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
dmFyIHRhcmdldFJldmlzaW9uID0gcm9vdFNldFBvaW50c1tzZXRJbmRleF0ubWVhc3VyZW1lbnQu
cmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJvb3QuZ2V0KCdyZXBvc2l0b3J5JykuZ2V0KCdpZCcpKTsK
LSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb247Ci0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldFJldmlzaW9uKQotICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IHNl
dC5nZXQoJ29wdGlvbnMnKS5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHsgcmV0dXJuIG9wdGlvbi52
YWx1ZSA9PSB0YXJnZXRSZXZpc2lvbjsgfSk7Ci0gICAgICAgICAgICAgICAgc2V0LnNldCgnc2Vs
ZWN0aW9uJywgc2VsZWN0ZWRPcHRpb24gfHwgc2V0LmdldCgnb3B0aW9ucycpWzBdKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgIH0ub2JzZXJ2ZXMoJ3BhbmUuc2VsZWN0ZWRQ
b2ludHMnKSwKLX0pOwotCi1BcHAuVGVzdEdyb3VwUGFuZSA9IEVtYmVyLk9iamVjdFByb3h5LmV4
dGVuZCh7Ci0gICAgX3BvcHVsYXRlOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIGJ1
aWxkUmVxdWVzdHMgPSB0aGlzLmdldCgnYnVpbGRSZXF1ZXN0cycpOwotICAgICAgICB2YXIgdGVz
dFJlc3VsdHMgPSB0aGlzLmdldCgndGVzdFJlc3VsdHMnKTsKLSAgICAgICAgaWYgKCFidWlsZFJl
cXVlc3RzIHx8ICF0ZXN0UmVzdWx0cykKLSAgICAgICAgICAgIHJldHVybiBbXTsKLQotICAgICAg
ICB2YXIgcmVwb3NpdG9yaWVzID0gdGhpcy5fY29tcHV0ZVJlcG9zaXRvcnlMaXN0KCk7Ci0gICAg
ICAgIHRoaXMuc2V0KCdyZXBvc2l0b3JpZXMnLCByZXBvc2l0b3JpZXMpOwotCi0gICAgICAgIHZh
ciByZXF1ZXN0c0J5Um9vU2V0ID0gdGhpcy5fZ3JvdXBSZXF1ZXN0c0J5Q29uZmlndXJhdGlvbnMo
YnVpbGRSZXF1ZXN0cyk7Ci0KLSAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb25zID0gW107Ci0gICAg
ICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAgIHZhciByYW5nZSA9IHttaW46IEluZmluaXR5LCBt
YXg6IC1JbmZpbml0eX07Ci0gICAgICAgIGZvciAodmFyIHJvb3RTZXRJZCBpbiByZXF1ZXN0c0J5
Um9vU2V0KSB7Ci0gICAgICAgICAgICB2YXIgY29uZmlnTGV0dGVyID0gU3RyaW5nLmZyb21DaGFy
Q29kZSgnQScuY2hhckNvZGVBdCgwKSArIGluZGV4KyspOwotICAgICAgICAgICAgY29uZmlndXJh
dGlvbnMucHVzaCh0aGlzLl9jcmVhdGVDb25maWd1cmF0aW9uU3VtbWFyeShyZXF1ZXN0c0J5Um9v
U2V0W3Jvb3RTZXRJZF0sIGNvbmZpZ0xldHRlciwgcmFuZ2UpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBtYXJnaW4gPSAwLjEgKiAocmFuZ2UubWF4IC0gcmFuZ2UubWluKTsKLSAgICAgICAg
cmFuZ2UubWF4ICs9IG1hcmdpbjsKLSAgICAgICAgcmFuZ2UubWluIC09IG1hcmdpbjsKLQotICAg
ICAgICB0aGlzLnNldCgnY29uZmlndXJhdGlvbnMnLCBjb25maWd1cmF0aW9ucyk7Ci0KLSAgICAg
ICAgdmFyIHByb2JhYmlsaXR5Rm9ybWF0dGVyID0gZDMuZm9ybWF0KCcuMnAnKTsKLSAgICAgICAg
dmFyIGNvbXBhcmlzb25zID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmln
dXJhdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgc3VtbWFyeTEgPSBj
b25maWd1cmF0aW9uc1tpXS5zdW1tYXJ5OwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IGkgKyAx
OyBqIDwgY29uZmlndXJhdGlvbnMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICB2YXIg
c3VtbWFyeTIgPSBjb25maWd1cmF0aW9uc1tqXS5zdW1tYXJ5OwotCi0gICAgICAgICAgICAgICAg
dmFyIHZhbHVlRGVsdGEgPSB0ZXN0UmVzdWx0cy5kZWx0YUZvcm1hdHRlcihzdW1tYXJ5Mi52YWx1
ZSAtIHN1bW1hcnkxLnZhbHVlKTsKLSAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVEZWx0YSA9
IGQzLmZvcm1hdCgnKy4ycCcpKChzdW1tYXJ5Mi52YWx1ZSAtIHN1bW1hcnkxLnZhbHVlKSAvIHN1
bW1hcnkxLnZhbHVlKTsKLQotICAgICAgICAgICAgICAgIHZhciBzdGF0ID0gdGhpcy5fY29tcHV0
ZVN0YXRpc3RpY2FsU2lnbmlmaWNhbmNlKHN1bW1hcnkxLm1lYXN1cmVkVmFsdWVzLCBzdW1tYXJ5
Mi5tZWFzdXJlZFZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgY29tcGFyaXNvbnMucHVzaCh7Ci0g
ICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdW1tYXJ5MS5jb25maWdMZXR0ZXIgKyAnIC8gJyAr
IHN1bW1hcnkyLmNvbmZpZ0xldHRlciwKLSAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZTog
aXNOYU4oc3VtbWFyeTEudmFsdWUpIHx8IGlzTmFOKHN1bW1hcnkyLnZhbHVlKSA/ICdOL0EnIDog
dmFsdWVEZWx0YSArICcgKCcgKyByZWxhdGl2ZURlbHRhICsgJykgJywKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0OiBzdGF0LAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuc2V0KCdjb21wYXJpc29ucycsIGNvbXBhcmlzb25zKTsK
LSAgICB9Lm9ic2VydmVzKCd0ZXN0UmVzdWx0cycsICdidWlsZFJlcXVlc3RzJyksCi0gICAgX2Nv
bXB1dGVTdGF0aXN0aWNhbFNpZ25pZmljYW5jZTogZnVuY3Rpb24gKHZhbHVlczEsIHZhbHVlczIp
Ci0gICAgewotICAgICAgICB2YXIgdEZvcm1hdHRlciA9IGQzLmZvcm1hdCgnLjNnJyk7Ci0gICAg
ICAgIHZhciBwcm9iYWJpbGl0eUZvcm1hdHRlciA9IGQzLmZvcm1hdCgnLjJwJyk7Ci0gICAgICAg
IHZhciBzdGF0aXN0aWNzID0gU3RhdGlzdGljcy5wcm9iYWJpbGl0eVJhbmdlRm9yV2VsY2hzVCh2
YWx1ZXMxLCB2YWx1ZXMyKTsKLSAgICAgICAgaWYgKGlzTmFOKHN0YXRpc3RpY3MudCkgfHwgaXNO
YU4oc3RhdGlzdGljcy5kZWdyZWVzT2ZGcmVlZG9tKSkKLSAgICAgICAgICAgIHJldHVybiAnTi9B
JzsKLQotICAgICAgICB2YXIgZGV0YWlscyA9ICcgKHQ9JyArIHRGb3JtYXR0ZXIoc3RhdGlzdGlj
cy50KSArICcgZGY9JyArIHRGb3JtYXR0ZXIoc3RhdGlzdGljcy5kZWdyZWVzT2ZGcmVlZG9tKSAr
ICcpJzsKLQotICAgICAgICBpZiAoIXN0YXRpc3RpY3MucmFuZ2VbMF0pCi0gICAgICAgICAgICBy
ZXR1cm4gJ05vdCBzaWduaWZpY2FudCcgKyBkZXRhaWxzOwotCi0gICAgICAgIHZhciBsb3dlckxp
bWl0ID0gcHJvYmFiaWxpdHlGb3JtYXR0ZXIoc3RhdGlzdGljcy5yYW5nZVswXSk7Ci0gICAgICAg
IGlmICghc3RhdGlzdGljcy5yYW5nZVsxXSkKLSAgICAgICAgICAgIHJldHVybiAnU2lnbmlmaWNh
bmNlID4gJyArIGxvd2VyTGltaXQgKyBkZXRhaWxzOwotCi0gICAgICAgIHJldHVybiBsb3dlckxp
bWl0ICsgJyA8IFNpZ25pZmljYW5jZSA8ICcgKyBwcm9iYWJpbGl0eUZvcm1hdHRlcihzdGF0aXN0
aWNzLnJhbmdlWzFdKSArIGRldGFpbHM7Ci0gICAgfSwKLSAgICBfdXBkYXRlUmVmZXJlbmNlQ2hh
cnQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgY29uZmlndXJhdGlvbnMgPSB0aGlz
LmdldCgnY29uZmlndXJhdGlvbnMnKTsKLSAgICAgICAgdmFyIGNoYXJ0RGF0YSA9IHRoaXMuZ2V0
KCdvdmVydmlld1BhbmUnKSA/IHRoaXMuZ2V0KCdvdmVydmlld1BhbmUnKS5nZXQoJ2NoYXJ0RGF0
YScpIDogbnVsbDsKLSAgICAgICAgaWYgKCFjb25maWd1cmF0aW9ucyB8fCAhY2hhcnREYXRhIHx8
IHRoaXMuZ2V0KCdyZWZlcmVuY2VDaGFydCcpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHZhciBjdXJyZW50VGltZVNlcmllcyA9IGNoYXJ0RGF0YS5jdXJyZW50OwotICAgICAgICBp
ZiAoIWN1cnJlbnRUaW1lU2VyaWVzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciByZXBvc2l0b3JpZXMgPSB0aGlzLmdldCgncmVwb3NpdG9yaWVzJyk7Ci0gICAgICAgIHZhciBo
aWdobGlnaHRlZEl0ZW1zID0ge307Ci0gICAgICAgIHZhciBmYWlsZWRUb0ZpbmRQb2ludCA9IGZh
bHNlOwotICAgICAgICBjb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWcpIHsK
LSAgICAgICAgICAgIHZhciByZXZpc2lvbnMgPSB7fTsKLSAgICAgICAgICAgIGNvbmZpZy5nZXQo
J3Jvb3RTZXQnKS5nZXQoJ3Jvb3RzJykuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkgewotICAgICAg
ICAgICAgICAgIHJldmlzaW9uc1tyb290LmdldCgncmVwb3NpdG9yeScpLmdldCgnaWQnKV0gPSBy
b290LmdldCgncmV2aXNpb24nKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdmFyIHBv
aW50ID0gY3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlSZXZpc2lvbnMocmV2aXNpb25zKTsK
LSAgICAgICAgICAgIGlmICghcG9pbnQpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWRUb0ZpbmRQ
b2ludCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtc1twb2ludC5tZWFzdXJlbWVudC5pZCgpXSA9IHRydWU7
Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAoZmFpbGVkVG9GaW5kUG9pbnQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5zZXQoJ3JlZmVyZW5jZUNoYXJ0JywgewotICAgICAg
ICAgICAgZGF0YTogY2hhcnREYXRhLAotICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJdGVtczogaGln
aGxpZ2h0ZWRJdGVtcywKLSAgICAgICAgfSk7Ci0gICAgfS5vYnNlcnZlcygnY29uZmlndXJhdGlv
bnMnLCAnb3ZlcnZpZXdQYW5lLmNoYXJ0RGF0YScpLAotICAgIF9jb21wdXRlUmVwb3NpdG9yeUxp
c3Q6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgc3BlY2lmaWVkUmVwb3NpdG9yaWVz
ID0gbmV3IEVtYmVyLlNldCgpOwotICAgICAgICAodGhpcy5nZXQoJ3Jvb3RTZXRzJykgfHwgW10p
LmZvckVhY2goZnVuY3Rpb24gKHJvb3RTZXQpIHsKLSAgICAgICAgICAgIChyb290U2V0LmdldCgn
cm9vdHMnKSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkgewotICAgICAgICAgICAgICAg
IHNwZWNpZmllZFJlcG9zaXRvcmllcy5hZGQocm9vdC5nZXQoJ3JlcG9zaXRvcnknKSk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHZhciByZXBvcnRlZFJlcG9zaXRvcmll
cyA9IG5ldyBFbWJlci5TZXQoKTsKLSAgICAgICAgdmFyIHRlc3RSZXN1bHRzID0gdGhpcy5nZXQo
J3Rlc3RSZXN1bHRzJyk7Ci0gICAgICAgICh0aGlzLmdldCgnYnVpbGRSZXF1ZXN0cycpIHx8IFtd
KS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7Ci0gICAgICAgICAgICB2YXIgcG9pbnQgPSB0
ZXN0UmVzdWx0cy5jdXJyZW50LmZpbmRQb2ludEJ5QnVpbGQocmVxdWVzdC5nZXQoJ2J1aWxkJykp
OwotICAgICAgICAgICAgaWYgKCFwb2ludCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHZhciByZXZpc2lvbkJ5UmVwb3NpdG9yeUlkID0gcG9pbnQubWVhc3VyZW1lbnQu
Zm9ybWF0dGVkUmV2aXNpb25zKCk7Ci0gICAgICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5SWQg
aW4gcmV2aXNpb25CeVJlcG9zaXRvcnlJZCkgewotICAgICAgICAgICAgICAgIHZhciByZXBvc2l0
b3J5ID0gQXBwLk1hbmlmZXN0LnJlcG9zaXRvcnkocmVwb3NpdG9yeUlkKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXNwZWNpZmllZFJlcG9zaXRvcmllcy5jb250YWlucyhyZXBvc2l0b3J5KSkKLSAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0ZWRSZXBvc2l0b3JpZXMuYWRkKHJlcG9zaXRvcnkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHNwZWNpZmllZFJlcG9z
aXRvcmllcy5zb3J0QnkoJ25hbWUnKS5jb25jYXQocmVwb3J0ZWRSZXBvc2l0b3JpZXMuc29ydEJ5
KCduYW1lJykpOwotICAgIH0sCi0gICAgX2dyb3VwUmVxdWVzdHNCeUNvbmZpZ3VyYXRpb25zOiBm
dW5jdGlvbiAocmVxdWVzdHMsIHJlcG9zaXRvcnlMaXN0KQotICAgIHsKLSAgICAgICAgdmFyIHJv
b3RTZXRJZFRvUmVxdWVzdHMgPSB7fTsKLSAgICAgICAgdmFyIHRlc3RHcm91cCA9IHRoaXM7Ci0g
ICAgICAgIHJlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHsKLSAgICAgICAgICAg
IHZhciByb290U2V0SWQgPSByZXF1ZXN0LmdldCgncm9vdFNldCcpLmdldCgnaWQnKTsKLSAgICAg
ICAgICAgIGlmICghcm9vdFNldElkVG9SZXF1ZXN0c1tyb290U2V0SWRdKQotICAgICAgICAgICAg
ICAgIHJvb3RTZXRJZFRvUmVxdWVzdHNbcm9vdFNldElkXSA9IFtdOwotICAgICAgICAgICAgcm9v
dFNldElkVG9SZXF1ZXN0c1tyb290U2V0SWRdLnB1c2gocmVxdWVzdCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm4gcm9vdFNldElkVG9SZXF1ZXN0czsKLSAgICB9LAotICAgIF9jcmVhdGVD
b25maWd1cmF0aW9uU3VtbWFyeTogZnVuY3Rpb24gKGJ1aWxkUmVxdWVzdHMsIGNvbmZpZ0xldHRl
ciwgcmFuZ2UpCi0gICAgewotICAgICAgICB2YXIgcmVwb3NpdG9yaWVzID0gdGhpcy5nZXQoJ3Jl
cG9zaXRvcmllcycpOwotICAgICAgICB2YXIgdGVzdFJlc3VsdHMgPSB0aGlzLmdldCgndGVzdFJl
c3VsdHMnKTsKLSAgICAgICAgdmFyIHJlcXVlc3RzID0gYnVpbGRSZXF1ZXN0cy5tYXAoZnVuY3Rp
b24gKG9yaWdpbmFsUmVxdWVzdCkgewotICAgICAgICAgICAgdmFyIHBvaW50ID0gdGVzdFJlc3Vs
dHMuY3VycmVudC5maW5kUG9pbnRCeUJ1aWxkKG9yaWdpbmFsUmVxdWVzdC5nZXQoJ2J1aWxkJykp
OwotICAgICAgICAgICAgdmFyIHJldmlzaW9uQnlSZXBvc2l0b3J5SWQgPSBwb2ludCA/IHBvaW50
Lm1lYXN1cmVtZW50LmZvcm1hdHRlZFJldmlzaW9ucygpIDoge307Ci0gICAgICAgICAgICByZXR1
cm4gRW1iZXIuT2JqZWN0UHJveHkuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjb250ZW50OiBv
cmlnaW5hbFJlcXVlc3QsCi0gICAgICAgICAgICAgICAgcmV2aXNpb25MaXN0OiByZXBvc2l0b3Jp
ZXMubWFwKGZ1bmN0aW9uIChyZXBvc2l0b3J5LCBpbmRleCkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKHJldmlzaW9uQnlSZXBvc2l0b3J5SWRbcmVwb3NpdG9yeS5nZXQoJ2lkJyldIHx8
IHtsYWJlbDpudWxsfSkubGFiZWw7Ci0gICAgICAgICAgICAgICAgfSksCi0gICAgICAgICAgICAg
ICAgdmFsdWU6IHBvaW50ID8gcG9pbnQudmFsdWUgOiBudWxsLAotICAgICAgICAgICAgICAgIHZh
bHVlUmFuZ2U6IHJhbmdlLAotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBwb2ludCA/
IHRlc3RSZXN1bHRzLmZvcm1hdHRlcihwb2ludC52YWx1ZSkgOiBudWxsLAotICAgICAgICAgICAg
ICAgIGJ1aWxkTGFiZWw6IHBvaW50ID8gJ0J1aWxkICcgKyBwb2ludC5tZWFzdXJlbWVudC5idWls
ZE51bWJlcigpIDogbnVsbCwKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAg
ICB2YXIgcm9vdFNldCA9IHJlcXVlc3RzID8gcmVxdWVzdHNbMF0uZ2V0KCdyb290U2V0JykgOiBu
dWxsOwotICAgICAgICB2YXIgc3VtbWFyeVJldmlzaW9ucyA9IHJlcG9zaXRvcmllcy5tYXAoZnVu
Y3Rpb24gKHJlcG9zaXRvcnksIGluZGV4KSB7Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBy
b290U2V0ID8gcm9vdFNldC5yZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgOiBudWxs
OwotICAgICAgICAgICAgaWYgKCFyZXZpc2lvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVx
dWVzdHNbMF0uZ2V0KCdyZXZpc2lvbkxpc3QnKVtpbmRleF07Ci0gICAgICAgICAgICByZXR1cm4g
TWVhc3VyZW1lbnQuZm9ybWF0UmV2aXNpb25SYW5nZShyZXZpc2lvbikubGFiZWw7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIHJlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHsKLSAg
ICAgICAgICAgIHZhciByZXZpc2lvbkxpc3QgPSByZXF1ZXN0LmdldCgncmV2aXNpb25MaXN0Jyk7
Ci0gICAgICAgICAgICByZXBvc2l0b3JpZXMuZm9yRWFjaChmdW5jdGlvbiAocmVwb3NpdG9yeSwg
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV2aXNpb25MaXN0W2luZGV4XSA9PSBzdW1t
YXJ5UmV2aXNpb25zW2luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25MaXN0W2lu
ZGV4XSA9IG51bGw7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFy
IHZhbHVlc0luQ29uZmlnID0gcmVxdWVzdHMubWFwQnkoJ3ZhbHVlJykuZmlsdGVyKGZ1bmN0aW9u
ICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZh
bHVlKTsgfSk7Ci0gICAgICAgIHZhciBzdW0gPSBTdGF0aXN0aWNzLnN1bSh2YWx1ZXNJbkNvbmZp
Zyk7Ci0gICAgICAgIHZhciBjaURlbHRhID0gU3RhdGlzdGljcy5jb25maWRlbmNlSW50ZXJ2YWxE
ZWx0YSgwLjk1LCB2YWx1ZXNJbkNvbmZpZy5sZW5ndGgsIHN1bSwgU3RhdGlzdGljcy5zcXVhcmVT
dW0odmFsdWVzSW5Db25maWcpKTsKLSAgICAgICAgdmFyIG1lYW4gPSBzdW0gLyB2YWx1ZXNJbkNv
bmZpZy5sZW5ndGg7Ci0KLSAgICAgICAgcmFuZ2UubWluID0gTWF0aC5taW4ocmFuZ2UubWluLCBT
dGF0aXN0aWNzLm1pbih2YWx1ZXNJbkNvbmZpZykpOwotICAgICAgICByYW5nZS5tYXggPSBNYXRo
Lm1heChyYW5nZS5tYXgsIFN0YXRpc3RpY3MubWF4KHZhbHVlc0luQ29uZmlnKSk7Ci0gICAgICAg
IGlmIChjaURlbHRhICYmICFpc05hTihjaURlbHRhKSkgewotICAgICAgICAgICAgcmFuZ2UubWlu
ID0gTWF0aC5taW4ocmFuZ2UubWluLCBtZWFuIC0gY2lEZWx0YSk7Ci0gICAgICAgICAgICByYW5n
ZS5tYXggPSBNYXRoLm1heChyYW5nZS5tYXgsIG1lYW4gKyBjaURlbHRhKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBzdW1tYXJ5ID0gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAg
ICBpc0F2ZXJhZ2U6IHRydWUsCi0gICAgICAgICAgICBjb25maWdMZXR0ZXI6IGNvbmZpZ0xldHRl
ciwKLSAgICAgICAgICAgIHJldmlzaW9uTGlzdDogc3VtbWFyeVJldmlzaW9ucywKLSAgICAgICAg
ICAgIGZvcm1hdHRlZFZhbHVlOiBpc05hTihtZWFuKSA/IG51bGwgOiB0ZXN0UmVzdWx0cy5mb3Jt
YXRXaXRoRGVsdGFBbmRVbml0KG1lYW4sIGNpRGVsdGEpLAotICAgICAgICAgICAgdmFsdWU6IG1l
YW4sCi0gICAgICAgICAgICBtZWFzdXJlZFZhbHVlczogdmFsdWVzSW5Db25maWcsCi0gICAgICAg
ICAgICBjb25maWRlbmNlSW50ZXJ2YWxEZWx0YTogY2lEZWx0YSwKLSAgICAgICAgICAgIHZhbHVl
UmFuZ2U6IHJhbmdlLAotICAgICAgICAgICAgc3RhdHVzTGFiZWw6IEFwcC5CdWlsZFJlcXVlc3Qu
YWdncmVnYXRlU3RhdHVzZXMocmVxdWVzdHMpLAotICAgICAgICB9KTsKLQotICAgICAgICByZXR1
cm4gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7c3VtbWFyeTogc3VtbWFyeSwgcmVxdWVzdHM6IHJlcXVl
c3RzLCByb290U2V0OiByb290U2V0fSk7Ci0gICAgfSwKLX0pOwotCi1BcHAuQm94UGxvdENvbXBv
bmVudCA9IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgIGNsYXNzTmFtZXM6IFsnYm94LXBs
b3QnXSwKLSAgICByYW5nZTogbnVsbCwKLSAgICB2YWx1ZTogbnVsbCwKLSAgICBkZWx0YTogbnVs
bCwKLSAgICBkaWRJbnNlcnRFbGVtZW50OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFy
IGVsZW1lbnQgPSB0aGlzLmdldCgnZWxlbWVudCcpOwotICAgICAgICB2YXIgc3ZnID0gZDMuc2Vs
ZWN0KGVsZW1lbnQpLmFwcGVuZCgnc3ZnJykKLSAgICAgICAgICAgIC5hdHRyKCd2aWV3Qm94Jywg
JzAgMCAxMDAgMjAnKQotICAgICAgICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAn
bm9uZScpCi0gICAgICAgICAgICAuc3R5bGUoe3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUn
fSk7Ci0KLSAgICAgICAgdGhpcy5fcGVyY2VudGFnZVJlY3QgPSBzdmcKLSAgICAgICAgICAgIC5h
cHBlbmQoJ3JlY3QnKQotICAgICAgICAgICAgLmF0dHIoJ3gnLCAwKQotICAgICAgICAgICAgLmF0
dHIoJ3knLCAwKQotICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgMCkKLSAgICAgICAgICAgIC5h
dHRyKCdoZWlnaHQnLCAyMCkKLSAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdwZXJjZW50YWdl
Jyk7Ci0KLSAgICAgICAgdGhpcy5fZGVsdGFSZWN0ID0gc3ZnCi0gICAgICAgICAgICAuYXBwZW5k
KCdyZWN0JykKLSAgICAgICAgICAgIC5hdHRyKCd4JywgMCkKLSAgICAgICAgICAgIC5hdHRyKCd5
JywgNSkKLSAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIDApCi0gICAgICAgICAgICAuYXR0cign
aGVpZ2h0JywgMTApCi0gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZGVsdGEnKQotICAgICAg
ICAgICAgLmF0dHIoJ29wYWNpdHknLCAwLjUpCi0gICAgICAgIHRoaXMuX3VwZGF0ZUJhcnMoKTsK
LSAgICB9LAotICAgIF91cGRhdGVCYXJzOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9wZXJjZW50YWdlUmVjdCB8fCB0eXBlb2YodGhpcy5fcGVyY2VudGFnZSkgIT09ICdu
dW1iZXInIHx8IGlzTmFOKHRoaXMuX3BlcmNlbnRhZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX3BlcmNlbnRhZ2VSZWN0LmF0dHIoJ3dpZHRoJywgdGhpcy5fcGVyY2Vu
dGFnZSk7Ci0gICAgICAgIGlmICh0eXBlb2YodGhpcy5fZGVsdGEpID09PSAnbnVtYmVyJyAmJiAh
aXNOYU4odGhpcy5fZGVsdGEpKSB7Ci0gICAgICAgICAgICB0aGlzLl9kZWx0YVJlY3QuYXR0cign
eCcsIHRoaXMuX3BlcmNlbnRhZ2UgLSB0aGlzLl9kZWx0YSk7Ci0gICAgICAgICAgICB0aGlzLl9k
ZWx0YVJlY3QuYXR0cignd2lkdGgnLCB0aGlzLl9kZWx0YSAqIDIpOwotICAgICAgICB9Ci0gICAg
fSwKLSAgICB2YWx1ZUNoYW5nZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgcmFu
Z2UgPSB0aGlzLmdldCgncmFuZ2UnKTsKLSAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoJ3Zh
bHVlJyk7Ci0gICAgICAgIGlmICghcmFuZ2UgfHwgIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB2YXIgc2NhbGluZ0ZhY3RvciA9IDEwMCAvIChyYW5nZS5tYXggLSByYW5nZS5t
aW4pOwotICAgICAgICB2YXIgcGVyY2VudGFnZSA9ICh2YWx1ZSAtIHJhbmdlLm1pbikgKiBzY2Fs
aW5nRmFjdG9yOwotICAgICAgICB0aGlzLl9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKLSAgICAg
ICAgdGhpcy5fZGVsdGEgPSB0aGlzLmdldCgnZGVsdGEnKSAqIHNjYWxpbmdGYWN0b3I7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZUJhcnMoKTsKLSAgICB9Lm9ic2VydmVzKCd2YWx1ZScsICdyYW5nZScp
Lm9uKCdpbml0JyksCi19KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjIvY2hhcnQtcGFuZS5jc3MgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YyL2NoYXJ0LXBhbmUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNhZWIz
YmUzOTYxY2VhY2EyMTY3YjFiNWRkNGM5ZTFkODEwNDg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djIvY2hhcnQtcGFuZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MDYgKzAsMCBAQAotLmNoYXJ0
LXBhbmUgaGVhZGVyIHsKLSAgICBiYWNrZ3JvdW5kOiAjZmZmOwotICAgIG1hcmdpbjogMDsKLSAg
ICBwYWRkaW5nOiAwLjVyZW07Ci0gICAgY29sb3I6ICMwMDA7Ci0gICAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkICNiYmI7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC41cmVtOwotICAg
IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjVyZW07Ci0gICAgcG9zaXRpb246IHJlbGF0aXZl
OwotfQotLmNoYXJ0LXBhbmUgaDEgewotICAgIGNvbG9yOiAjMzMzOwotICAgIGZvbnQtc2l6ZTog
MXJlbTsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIGxpbmUtaGVpZ2h0OiAxcmVtOwot
ICAgIG1hcmdpbjogMCAwIDAgMS41cmVtOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0uY2hhcnQtcGFu
ZTpmb2N1cyBoZWFkZXIgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjA0LCAxNTMsIDUx
LCAwLjEpOwotICAgIGNvbG9yOiAjMzMzOwotfQotCi0uY2hhcnQtcGFuZSAucHJvZ3Jlc3Mgewot
ICAgIGhlaWdodDogMTAwJTsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0KLS5jaGFydC1w
YW5lIC5wcm9ncmVzcyAuc3Bpbm5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxl
ZnQ6IDUwJTsKLSAgICB0b3A6IDUwJTsKLSAgICBtYXJnaW4tbGVmdDogLTFyZW07Ci0gICAgbWFy
Z2luLXRvcDogLTFyZW07Ci19Ci0KLS5jaGFydC1wYW5lIGEuY2xvc2UtYnV0dG9uIHsKLSAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxlZnQ6
IDAuNTVyZW07Ci0gICAgdG9wOiAwLjU1cmVtOwotfQotCi0uY2hhcnQtcGFuZSBhLnN0YXQtYnV0
dG9uIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgIHJpZ2h0OiA0LjQ1cmVtOwotICAgIHRvcDogMC41NXJlbTsKLX0KLQotLmNoYXJ0LXBh
bmUgYS5vdXRsaWVyLWJ1dHRvbiB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMy4yNXJlbTsgLyogU2hpZnRlZCB0byBsZWZ0
IGJ5IDAuMXJlbSBmb3IgYmV0dGVyIGFlc3RoZXRpY3MgKi8KLSAgICB0b3A6IDAuNTVyZW07Ci19
Ci0KLWEub3V0bGllci1idXR0b24uaGlkZSBnLnNob3ctb3V0bGllci1pY29uIHsKLSAgICBmaWxs
OiB0cmFuc3BhcmVudDsKLSAgICBzdHJva2U6IHRyYW5zcGFyZW50OwotfQotCi1hLm91dGxpZXIt
YnV0dG9uLnNob3cgZy5oaWRlLW91dGxpZXItaWNvbiB7Ci0gICAgZmlsbDogdHJhbnNwYXJlbnQ7
Ci0gICAgc3Ryb2tlOiB0cmFuc3BhcmVudDsKLX0KLQotLmNoYXJ0LXBhbmUgYS5hbmFseXNpcy1i
dXR0b24gewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgcmlnaHQ6IDEuODVyZW07Ci0gICAgdG9wOiAwLjU1cmVtOwotfQotCi0uY2hhcnQt
cGFuZSBhLnNlYXJjaC1idXR0b24gewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDAuNTVyZW07Ci0gICAgdG9wOiAwLjU1cmVt
OwotfQotCi0ucG9wdXAtcGFuZSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHotaW5k
ZXg6IDEwOwotICAgIHRvcDogMS43cmVtOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7Ci0g
ICAgZm9udC1zaXplOiAwLjhyZW07Ci0gICAgcGFkZGluZzogMC4ycmVtOwotICAgIGJvcmRlci1y
YWRpdXM6IDAuNXJlbTsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLSAgICBiYWNrZ3JvdW5kOiB3aGl0
ZTsKLX0KLQotLnBvcHVwLXBhbmUuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0u
c3RhdC1wYW5lLAotLmFuYWx5c2lzLXBhbmUgewotICAgIHJpZ2h0OiAyLjZyZW07Ci0gICAgcGFk
ZGluZzogMDsKLX0KLQotLnBvcHVwLXBhbmUgPiAuY2F1dGlvbiB7Ci0gICAgbWFyZ2luOiAwOwot
ICAgIHBhZGRpbmc6IDAuM3JlbSAwLjVyZW07Ci19Ci0KLS5wb3B1cC1wYW5lID4gc2VjdGlvbiB7
Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgZm9udC1zaXplOiAwLjhyZW07
Ci0gICAgbWF4LXdpZHRoOiAxN3JlbTsKLX0KLQotLnBvcHVwLXBhbmUgPiBzZWN0aW9uID4gaDEg
ewotICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKLSAgICBsaW5lLWhlaWdodDogMC44cmVtOwotICAg
IHBhZGRpbmc6IDAuM3JlbSAwLjVyZW07Ci0gICAgbWFyZ2luOiAwOwotICAgIGJvcmRlci10b3A6
IHNvbGlkIDFweCAjY2NjOwotICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjY2NjOwotfQot
Ci0ucG9wdXAtcGFuZSA+IHNlY3Rpb246Zmlyc3QtY2hpbGQgaDEgewotICAgIGJvcmRlci10b3A6
IG5vbmU7Ci19Ci0KLS5wb3B1cC1wYW5lID4gc2VjdGlvbiA+ICogewotICAgIGRpc3BsYXk6IGJs
b2NrOwotICAgIG1hcmdpbjogMC4xcmVtIDAuNXJlbSAwLjFyZW0gMXJlbTsKLX0KLQotLnN0YXQt
b3B0aW9uIGlucHV0W3R5cGU9bnVtYmVyXSB7Ci0gICAgd2lkdGg6IDRyZW07Ci19Ci0KLS5hbmFs
eXNpcy1wYW5lIHsKLSAgICByaWdodDogMS4zcmVtOwotfQotCi0uc2VhcmNoLXBhbmUgewotICAg
IHJpZ2h0OiAwcmVtOwotfQotCi0uc2VhcmNoLXBhbmUgaW5wdXQgewotICAgIGRpc3BsYXk6IHRh
YmxlLWNlbGw7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICBvdXRsaW5lOiBub25l
OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC41cmVt
OwotICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjVyZW07Ci0gICAgcGFkZGluZzog
MC4ycmVtOwotICAgIGZvbnQtc2l6ZTogMC44cmVtOwotICAgIG1hcmdpbjogMDsKLX0KLQotLnNl
YXJjaC1wYW5lIC5yZXBvc2l0b3JpZXMgewotICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7Ci0gICAg
dmVydGljYWwtYWxpZ246IG1pZGRsZTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0uc2VhcmNoLXBh
bmUgaW5wdXQ6Zm9jdXMgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDksIDI0MiwgMjI4
KTsKLX0KLQotLmNoYXJ0LXBhbmUgLmJvZHkgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAg
ICB3aWR0aDogMTAwJTsKLSAgICBoZWlnaHQ6IDE4cmVtOwotfQotLmNoYXJ0LXBhbmUgLnN2Zy1j
b250YWluZXIgewotICAgIHdpZHRoOiBhdXRvOwotICAgIGhlaWdodDogMTAwJTsKLX0KLS5jaGFy
dC1wYW5lIC5zdmctY29udGFpbmVyIHsKLSAgICBtYXJnaW4tcmlnaHQ6IDI1cmVtOwotfQotCi0u
c2VsZWN0aW9uLXRvb2xiYXIgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBiYWNr
Z3JvdW5kOiB3aGl0ZTsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjZDlkOWQ5OwotICAgIGJvcmRl
ci1yYWRpdXM6IDAuM3JlbTsKLSAgICB6LWluZGV4OiAxMDsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgbWFyZ2luLXRvcDogLTJyZW07Ci0gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbTsKLSAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotCi0uc2VsZWN0aW9uLXRvb2xiYXIgLmJ1dHRvbiB7
Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDFyZW07
Ci0gICAgaGVpZ2h0OiAxcmVtOwotICAgIHBhZGRpbmc6IDAuMnJlbTsKLSAgICBtYXJnaW46IDA7
Ci0gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAjYmJiOwotfQotCi0uc2VsZWN0aW9uLXRvb2xi
YXIgLmJ1dHRvbjpmaXJzdC1jaGlsZCB7Ci0gICAgYm9yZGVyLWxlZnQ6IG5vbmU7Ci19Ci0KLS5z
ZWxlY3Rpb24tdG9vbGJhciAuYnV0dG9uIHN2ZyB7Ci0gICAgc3Ryb2tlOiAjNjY2OwotICAgIGZp
bGw6ICM2NjY7Ci19Ci0KLS5jaGFydC1wYW5lIC5kZXRhaWxzIHsKLSAgICBwb3NpdGlvbjogYWJz
b2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAgIHdpZHRoOiAyNXJlbTsKLSAg
ICBoZWlnaHQ6IDEwMCU7Ci0gICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDFweCAjYmJiOwotfQotCi0u
YW5hbHlzaXMtY2hhcnQtcGFuZSB7Ci0gICAgaGVpZ2h0OiAxNXJlbTsKLX0KLQotLmFuYWx5c2lz
LWNoYXJ0LXBhbmUgdGFibGUgewotICAgIG1hcmdpbjogMC41cmVtOwotfQotCi0uY2hhcnQtcGFu
ZSAub3ZlcnZpZXcgewotICAgIGhlaWdodDogNXJlbTsKLSAgICBib3JkZXItYm90dG9tOiBzb2xp
ZCAwcHggI2VlZTsKLX0KLQotLmNoYXJ0LXBhbmUgLmRldGFpbHMtdGFibGUtY29udGFpbmVyIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiA1cmVtOwotICAgIHdpZHRoOiAxMDAl
OwotICAgIGhlaWdodDogMTNyZW07Ci0gICAgb3ZlcmZsb3c6IHNjcm9sbDsKLX0KLS5hbmFseXNp
cy1jaGFydC1wYW5lIC5kZXRhaWxzLXRhYmxlLWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IHN0
YXRpYzsKLSAgICBoZWlnaHQ6IDE1cmVtOwotfQotCi0uY2hhcnQtcGFuZSAuZGV0YWlscy10YWJs
ZSwKLS5jaGFydC1wYW5lIC5jb21taXRzLXZpZXdlciB7Ci0gICAgZm9udC1zaXplOiAwLjhyZW07
Ci0gICAgd2lkdGg6IGF1dG87Ci0gICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKLSAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwotfQotCi0uY2hhcnQtcGFuZSAuY29tbWl0cy12aWV3ZXIgewot
ICAgIHdpZHRoOiAxMDAlOwotfQotCi0uY2hhcnQtcGFuZSAuZGV0YWlscy10YWJsZSB0ZDpsYXN0
LWNoaWxkIHsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxcHg7Ci19Ci0KLS5jaGFydC1wYW5lIC5kZXRh
aWxzLXRhYmxlIHRoIHsKLSAgICB3aWR0aDogMzAlOwotICAgIHRleHQtYWxpZ246IHJpZ2h0Owot
ICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotLmNoYXJ0LXBh
bmUgLmRldGFpbHMtdGFibGUgdGQgewotICAgIHdpZHRoOiA3MCU7Ci19Ci0KLS5jaGFydC1wYW5l
IC5kZXRhaWxzLXRhYmxlIC5idWdzIHRoIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQot
LmNoYXJ0LXBhbmUgLmRldGFpbHMtdGFibGUgdGg6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICIgOiAi
OwotfQotCi0uY2hhcnQtcGFuZSAuZGV0YWlscy10YWJsZSAuc3RhdHVzIHRoIHsKLSAgICB2aXNp
YmlsaXR5OiBoaWRkZW47Ci19Ci0KLS5jaGFydC1wYW5lIC5kZXRhaWxzLXRhYmxlIC5zdGF0dXMg
dGQgewotICAgIGZvbnQtc2l6ZTogMXJlbTsKLX0KLQotLmNoYXJ0LXBhbmUgLmNvbW1pdHMtdmll
d2VyIGNhcHRpb24gewotICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAjY2NjOwotICAgIGZvbnQt
d2VpZ2h0OiBub3JtYWw7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLSAgICBwYWRkaW5nOiAwLjJy
ZW07Ci0gICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQot
Ci0uY2hhcnQtcGFuZSAuY29tbWl0cy12aWV3ZXIgY2FwdGlvbjpiZWZvcmUsCi0uYW5hbHlzaXMt
Z3JvdXAgLnJlc3VsdHMgLnN1bW1hcnkgLmNvbmZpZy1sZXR0ZXI6YmVmb3JlIHsKLSAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgd2lkdGg6IDAuOHJlbTsKLSAgICBjb250ZW50OiAiXDI1
QkUiOyAvKiBEb3duIGFycm93ICovCi19Ci0KLS5jaGFydC1wYW5lIC5jb21taXRzLXZpZXdlci5o
aWRkZW4gY2FwdGlvbjpiZWZvcmUsCi0uYW5hbHlzaXMtZ3JvdXAgLnJlc3VsdHMgLmhpZGVSZXF1
ZXN0cyAuc3VtbWFyeSAuY29uZmlnLWxldHRlcjpiZWZvcmUgewotICAgIGRpc3BsYXk6IGlubGlu
ZS1ibG9jazsKLSAgICB3aWR0aDogMC44cmVtOwotICAgIGNvbnRlbnQ6ICJcMjVCOCI7IC8qIFJp
Z2h0IGFycm93ICovCi19Ci0KLS5jaGFydC1wYW5lIC5jb21taXRzIHsKLSAgICBib3JkZXItYm90
dG9tOiBzb2xpZCAxcHggI2NjYzsKLSAgICBtYXJnaW4tYm90dG9tOiAwLjJyZW07Ci19Ci0KLS5j
aGFydC1wYW5lIC5jb21taXRzLXZpZXdlciB7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBz
ZTsKLX0KLQotLmNoYXJ0LXBhbmUgLmNvbW1pdHMtdmlld2VyIHRkLAotLmNoYXJ0LXBhbmUgLmNv
bW1pdHMtdmlld2VyIHRoIHsKLSAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwotICAgIGJvcmRl
ci10b3A6IHNvbGlkIDFweCAjY2NjOwotICAgIHBhZGRpbmc6IDAuMnJlbTsKLX0KLQotLmNoYXJ0
LXBhbmUgLmNvbW1pdHMtdmlld2VyIHRoIHsKLSAgICB3aWR0aDogMjAlOwotICAgIGZvbnQtd2Vp
Z2h0OiBub3JtYWw7Ci19Ci0KLS5jaGFydC1wYW5lIC5jb21taXRzLXZpZXdlciB0ZCB7Ci0gICAg
d2lkdGg6IDYwJTsKLX0KLQotLmNoYXJ0LXBhbmUgLmNoYXJ0IHsKLSAgICBoZWlnaHQ6IDEwMCU7
Ci19Ci0KLS5jaGFydC1wYW5lIC5jaGFydCBzdmcgewotICAgIGhlaWdodDogMTAwJTsKLX0KLQot
LmNoYXJ0IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0KLS5jaGFydCBzdmcgewotICAg
IHN0cm9rZTogIzY2NjsKLSAgICBmaWxsOiAjMDAwOwotICAgIGNvbG9yOiAjMDAwOwotICAgIGZv
bnQtc2l6ZTogMC43cmVtOwotfQotCi0uY2hhcnQgcGF0aCB7Ci0gICAgZmlsbDogbm9uZTsKLSAg
ICBzdHJva2Utd2lkdGg6IDEuNXB4OwotfQotCi0uY2hhcnQgLmRvdCB7Ci0gICAgZmlsbDogI2Nj
YzsKLSAgICBzdHJva2U6IG5vbmU7Ci0gICAgcjogMnB4OwotfQotCi0uY2hhcnQgLmRvdC5mb3Jl
Z3JvdW5kIHsKLSAgICBmaWxsOiAjNjY2OwotfQotCi0uY2hhcnQgcGF0aC5hcmVhIHsKLSAgICBz
dHJva2U6IG5vbmU7Ci0gICAgZmlsbDogI2NjYzsKLSAgICBvcGFjaXR5OiAwLjg7Ci19Ci0uY2hh
cnQgcGF0aC5hcmVhLmZvcmVncm91bmQgewotfQotCi0uY2hhcnQgcGF0aC5jdXJyZW50IHsKLSAg
ICBzdHJva2U6ICNjY2M7Ci19Ci0KLS5jaGFydCBwYXRoLmN1cnJlbnQuZm9yZWdyb3VuZCB7Ci0g
ICAgc3Ryb2tlOiAjOTk5OwotfQotCi0uY2hhcnQgcGF0aC5tb3ZpbmdBdmVyYWdlIHsKLSAgICBz
dHJva2U6ICMzNjM7Ci0gICAgZmlsbDogbm9uZTsKLSAgICBvcGFjaXR5OiAwLjg7Ci19Ci0KLS5j
aGFydCBwYXRoLmVudmVsb3BlIHsKLSAgICBzdHJva2U6IG5vbmU7Ci0gICAgZmlsbDogIzZjNjsK
LSAgICBvcGFjaXR5OiAwLjQ7Ci19Ci0KLS5jaGFydCBwYXRoLmJhc2VsaW5lIHsKLSAgICBzdHJv
a2U6ICNmNjY7Ci19Ci0uY2hhcnQtcGFuZSAuc3RhdHVzIC53b3JzZSwKLS5kYXNoYm9hcmQtc3Rh
dHVzIC53b3JzZSB7Ci0gICAgY29sb3I6ICNjMzM7Ci19Ci0KLS5jaGFydCBwYXRoLnRhcmdldCB7
Ci0gICAgc3Ryb2tlOiAjNjZmOwotfQotLmNoYXJ0LXBhbmUgLnN0YXR1cyAuYmV0dGVyLAotLmRh
c2hib2FyZC1zdGF0dXMgLmJldHRlciB7Ci0gICAgY29sb3I6ICMzM2M7Ci19Ci0KLS5kYXNoYm9h
cmQtc3RhdHVzIC5zdGF0dXMtbGFiZWwgewotICAgIG1hcmdpbi1sZWZ0OiAxcmVtOwotfQotCi0u
Y2hhcnQgLmF4aXMsCi0uY2hhcnQgLmRvbWFpbiB7Ci0gIGZpbGw6IG5vbmU7Ci0gIHN0cm9rZS13
aWR0aDogMXB4OwotICBzdHJva2U6ICNkZGQ7Ci0gIGNvbG9yOiAjMDAwOwotICBzaGFwZS1yZW5k
ZXJpbmc6IGNyaXNwRWRnZXM7Ci19Ci0KLS5jaGFydCAuZG9tYWluIHsKLSAgICBzdHJva2U6IG5v
bmU7Ci19Ci0KLS5jaGFydCAuY3VycmVudC1pdGVtIHsKLSAgICBzdHJva2U6ICNmOTM7Ci0gICAg
c3Ryb2tlLXdpZHRoOiAycHg7Ci0gICAgZmlsbDogI2Y5MzsKLX0KLQotLmNoYXJ0IC5oaWdobGln
aHQgewotICAgIHN0cm9rZTogI2Y5MzsKLSAgICBzdHJva2Utd2lkdGg6IDJweDsKLSAgICBmaWxs
OiBub25lOwotICAgIHI6IDMuNnB4OwotfQotCi0uY2hhcnQgLmV4dGVudCB7Ci0gICAgc3Ryb2tl
OiAjZjkzOwotICAgIHN0cm9rZS13aWR0aDogMXB4OwotICAgIGZpbGw6ICM5YzY7Ci0gICAgZmls
bC1vcGFjaXR5OiAuMTI1OwotICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKLX0KLQot
LmNoYXJ0IC5heGlzIHRleHQgewotICAgIGZpbGw6ICMzMzM7Ci0gICAgc3Ryb2tlOiBub25lOwot
fQotCi0uY2hhcnQgLmF4aXMuaW50ZXJhY3RpdmUgdGV4dCB7Ci0gICAgY3Vyc29yOiBwb2ludGVy
OwotfQotCi0uY2hhcnQgLnJhbmdlQmFyIHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiAjZmM2OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLX0KLQotLmNoYXJ0
IC5yYW5nZUJhci50ZXN0aW5nUmFuZ2UgewotICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7Ci19
Ci0KLS5jaGFydC1wYW5lLmluLWNoYXJ0cyB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMi41cmVtOwot
fQotCi0uYWx0ZXJuYXRpdmUtcGFuZS1hY3Rpb25zIHVsIHsKLSAgICBsaXN0LXN0eWxlOiBub25l
OwotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICBsZWZ0OiAwLjVyZW07Ci19Ci0KLS5hbHRlcm5hdGl2ZS1wYW5lLWFjdGlvbnMgbGkg
ewotICAgIGNvbG9yOiAjNjY2OwotICAgIGZvbnQtc2l6ZTogMC44cmVtOwotICAgIGJvcmRlcjog
c29saWQgMXB4ICNiYmI7Ci0gICAgYm9yZGVyLXRvcDogbm9uZTsKLSAgICBib3JkZXItYm90dG9t
LWxlZnQtcmFkaXVzOiAwLjNyZW07Ci0gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAu
M3JlbTsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotICAgIG1hcmdp
bjogMDsKLSAgICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTsKLSAgICBwYWRkaW5nOiAwLjJyZW0gMC40
cmVtOwotfQotCi0uYWx0ZXJuYXRpdmUtcGFuZS1hY3Rpb25zIGxpOmhvdmVyIHsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKLSAgICBwYWRkaW5nLXRvcDog
MC41cmVtOwotfQotCi0uYWx0ZXJuYXRpdmUtcGFuZS1hY3Rpb25zIGxpIGEgewotICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvY29tbWl0cy12aWV3ZXIuanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2NvbW1pdHMtdmlld2VyLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDA3MDcwYzY1YjAxZTYyYThkYWRlNmEwNWRjYmU5ZDc3
ZTc0NGUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvY29tbWl0cy12aWV3ZXIuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1BcHAuQ29tbWl0c1ZpZXdlckNvbXBvbmVudCA9IEVt
YmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgIHJlcG9zaXRvcnk6IG51bGwsCi0gICAgcmV2aXNp
b25JbmZvOiBudWxsLAotICAgIGNvbW1pdHM6IG51bGwsCi0gICAgdmlzaWJsZTogdHJ1ZSwKLSAg
ICBjb21taXRzQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciByZXZpc2lv
bkluZm8gPSB0aGlzLmdldCgncmV2aXNpb25JbmZvJyk7Ci0KLSAgICAgICAgdmFyIHRvID0gcmV2
aXNpb25JbmZvLmdldCgnY3VycmVudFJldmlzaW9uJyk7Ci0gICAgICAgIHZhciBmcm9tID0gcmV2
aXNpb25JbmZvLmdldCgncHJldmlvdXNSZXZpc2lvbicpOwotICAgICAgICB2YXIgcmVwb3NpdG9y
eSA9IHRoaXMuZ2V0KCdyZXBvc2l0b3J5Jyk7Ci0gICAgICAgIGlmICghZnJvbSB8fCAhcmVwb3Np
dG9yeSB8fCAhcmVwb3NpdG9yeS5nZXQoJ2hhc1JlcG9ydGVkQ29tbWl0cycpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgQ29tbWl0TG9n
cy5mZXRjaENvbW1pdHMocmVwb3NpdG9yeS5nZXQoJ2lkJyksIGZyb20sIHRvKS50aGVuKGZ1bmN0
aW9uIChjb21taXRzKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi5pc0Rlc3Ryb3llZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZWxmLnNldCgnY29tbWl0cycsIGNvbW1p
dHMubWFwKGZ1bmN0aW9uIChjb21taXQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIu
T2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IHJlcG9zaXRv
cnksCi0gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiBjb21taXQucmV2aXNpb24sCi0gICAg
ICAgICAgICAgICAgICAgIHVybDogcmVwb3NpdG9yeS51cmxGb3JSZXZpc2lvbihjb21taXQucmV2
aXNpb24pLAotICAgICAgICAgICAgICAgICAgICBhdXRob3I6IGNvbW1pdC5hdXRob3JOYW1lIHx8
IGNvbW1pdC5hdXRob3JFbWFpbCwKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY29tbWl0
Lm1lc3NhZ2UgPyBjb21taXQubWVzc2FnZS5zdWJzdHIoMCwgNzUpIDogbnVsbCwKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgfSwgZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgaWYgKCFzZWxmLmlzRGVzdHJveWVkKQotICAgICAgICAgICAgICAgIHNlbGYu
c2V0KCdjb21taXRzJywgW10pOwotICAgICAgICB9KQotICAgIH0ub2JzZXJ2ZXMoJ3JlcG9zaXRv
cnknKS5vYnNlcnZlcygncmV2aXNpb25JbmZvJykub24oJ2luaXQnKSwKLSAgICBhY3Rpb25zOiB7
Ci0gICAgICAgIHRvZ2dsZVZpc2liaWxpdHk6IGZ1bmN0aW9uICgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRoaXMudG9nZ2xlUHJvcGVydHkoJ3Zpc2libGUnKTsKLSAgICAgICAgfQotICAgIH0K
LX0pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9kYXRh
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9kYXRhLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGM5YWI4NjJkNjJkMjc5MjgxZjFkYjI4ZTM3ZmI0ZmUz
N2NmNmU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvZGF0YS5qcworKysgL2Rldi9udWxsCkBA
IC0xLDU2NiArMCwwIEBACi0vLyBXZSBkb24ndCB1c2UgRFMuTW9kZWwgZm9yIHRoZXNlIG9iamVj
dCB0eXBlcyBiZWNhdXNlIHdlIGNhbid0IGFmZm9yZCB0byBwcm9jZXNzIG1pbGxpb25zIG9mIHRo
ZW0uCi0KLWlmICghQXJyYXkucHJvdG90eXBlLmZpbmQpIHsKLSAgICBBcnJheS5wcm90b3R5cGUu
ZmluZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewotICAgICAgICBmb3IgKHZhciBpdGVtIG9mIHRo
aXMpIHsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaXRlbTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgIH0K
LX0KLQotdmFyIFByaXZpbGVnZWRBUEkgPSB7Ci0gICAgX3Rva2VuOiBudWxsLAotICAgIF9leHBp
cmF0aW9uOiBudWxsLAotICAgIF9tYXhOZXR3b3JrTGF0ZW5jeTogMyAqIDYwICogMTAwMCAvKiAz
IG1pbnV0ZXMgKi8sCi19OwotCi1Qcml2aWxlZ2VkQVBJLnNlbmRSZXF1ZXN0ID0gZnVuY3Rpb24g
KHVybCwgcGFyYW1ldGVycykKLXsKLSAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVUb2tlbkluU2Vy
dmVySWZOZWVkZWQoKS50aGVuKGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICByZXR1cm4gUHJp
dmlsZWdlZEFQSS5fcG9zdCh1cmwsICQuZXh0ZW5kKHt0b2tlbjogdG9rZW59LCBwYXJhbWV0ZXJz
KSk7Ci0gICAgfSk7Ci19Ci0KLVByaXZpbGVnZWRBUEkuX2dlbmVyYXRlVG9rZW5JblNlcnZlcklm
TmVlZGVkID0gZnVuY3Rpb24gKCkKLXsKLSAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgcmV0dXJu
IG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgICBpZiAoc2VsZi5fdG9rZW4gJiYgc2VsZi5fZXhwaXJhdGlvbiA+IERhdGUubm93KCkgKyBz
ZWxmLl9tYXhOZXR3b3JrTGF0ZW5jeSkKLSAgICAgICAgICAgIHJlc29sdmUoc2VsZi5fdG9rZW4p
OwotCi0gICAgICAgIFByaXZpbGVnZWRBUEkuX3Bvc3QoJ2dlbmVyYXRlLWNzcmYtdG9rZW4nKQot
ICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCwgcmVqZWN0KSB7Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fdG9rZW4gPSByZXN1bHRbJ3Rva2VuJ107Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fZXhwaXJhdGlvbiA9IG5ldyBEYXRlKHJlc3VsdFsnZXhwaXJhdGlvbiddKTsKLSAgICAgICAg
ICAgICAgICByZXNvbHZlKHNlbGYuX3Rva2VuKTsKLSAgICAgICAgICAgIH0pLmNhdGNoKHJlamVj
dCk7Ci0gICAgfSk7Ci19Ci0KLVByaXZpbGVnZWRBUEkuX3Bvc3QgPSBmdW5jdGlvbiAodXJsLCBw
YXJhbWV0ZXJzKQotewotICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9u
IChyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgIHVybDog
Jy4uL3ByaXZpbGVnZWQtYXBpLycgKyB1cmwsCi0gICAgICAgICAgICB0eXBlOiAnUE9TVCcsCi0g
ICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLAotICAgICAgICAgICAg
ZGF0YTogcGFyYW1ldGVycyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMpIDogJ3t9JywKLSAg
ICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCi0gICAgICAgIH0pLmRvbmUoZnVuY3Rpb24gKGRh
dGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLnN0YXR1cyAhPSAnT0snKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coJ1ByaXZpbGVnZWRBUEkgZmFpbGVkJywgZGF0YSk7Ci0gICAgICAg
ICAgICAgICAgcmVqZWN0KGRhdGEuc3RhdHVzKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIHJlc29sdmUoZGF0YSk7Ci0gICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKHhociwg
c3RhdHVzLCBlcnJvcikgewotICAgICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXMgKyAoZXJyb3Ig
PyAnLCAnICsgZXJyb3IgOiAnJykgKyAnXG5cbldpdGggcmVzcG9uc2U6XG4nICsgeGhyLnJlc3Bv
bnNlVGV4dCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12YXIgQ29tbWl0TG9ncyA9IHsK
LSAgICBfY2FjaGVkQ29tbWl0c0J5UmVwb3NpdG9yeToge30KLX07Ci0KLUNvbW1pdExvZ3MuZmV0
Y2hDb21taXRzID0gZnVuY3Rpb24gKHJlcG9zaXRvcnksIGZyb20sIHRvLCBrZXl3b3JkKQotewot
ICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICBpZiAoZnJvbSAmJiB0bykgewotICAgICAgICBwYXJh
bXMucHVzaChbJ2Zyb20nLCBmcm9tXSk7Ci0gICAgICAgIHBhcmFtcy5wdXNoKFsndG8nLCB0b10p
OwotICAgIH0KLSAgICBpZiAoa2V5d29yZCkKLSAgICAgICAgcGFyYW1zLnB1c2goWydrZXl3b3Jk
Jywga2V5d29yZF0pOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY2FjaGUgaWYgYWxsIGNvbW1pdHMgaW4gdGhlIHJhbmdlIGhhdmUgYmVlbiBjYWNoZWQuCi0g
ICAgdmFyIHVzZUNhY2hlID0gZnJvbSAmJiB0byAmJiAha2V5d29yZDsKLQotICAgIHZhciB1cmwg
PSAnLi4vYXBpL2NvbW1pdHMvJyArIHJlcG9zaXRvcnkgKyAnLz8nICsgcGFyYW1zLm1hcChmdW5j
dGlvbiAoa2V5VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXlW
YWx1ZVswXSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOwotICAgIH0p
LmpvaW4oJyYnKTsKLQotICAgIGlmICh1c2VDYWNoZSkgewotICAgICAgICB2YXIgY2FjaGVkQ29t
bWl0c0ZvclJhbmdlID0gQ29tbWl0TG9ncy5fY2FjaGVkQ29tbWl0c0JldHdlZW4ocmVwb3NpdG9y
eSwgZnJvbSwgdG8pOwotICAgICAgICBpZiAoY2FjaGVkQ29tbWl0c0ZvclJhbmdlKQotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsg
cmVzb2x2ZShjYWNoZWRDb21taXRzRm9yUmFuZ2UpOyB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAg
ICAgICQuZ2V0SlNPTih1cmwsIGZ1bmN0aW9uIChkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoZGF0
YS5zdGF0dXMgIT0gJ09LJykgewotICAgICAgICAgICAgICAgIHJlamVjdChkYXRhLnN0YXR1cyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgZmV0Y2hlZENvbW1pdHMgPSBkYXRhLmNvbW1pdHM7Ci0gICAgICAgICAgICBmZXRjaGVkQ29t
bWl0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXQpIHsgY29tbWl0LnRpbWUgPSBuZXcgRGF0ZShj
b21taXQudGltZSk7IH0pOwotCi0gICAgICAgICAgICBpZiAodXNlQ2FjaGUpCi0gICAgICAgICAg
ICAgICAgQ29tbWl0TG9ncy5fY2FjaGVDb25zZWN1dGl2ZUNvbW1pdHMocmVwb3NpdG9yeSwgZnJv
bSwgdG8sIGZldGNoZWRDb21taXRzKTsKLQotICAgICAgICAgICAgcmVzb2x2ZShmZXRjaGVkQ29t
bWl0cyk7Ci0gICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKHhociwgc3RhdHVzLCBlcnJvcikgewot
ICAgICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXMgKyAoZXJyb3IgPyAnLCAnICsgZXJyb3IgOiAn
JykpOwotICAgICAgICB9KQotICAgIH0pOwotfQotCi1Db21taXRMb2dzLl9jYWNoZWRDb21taXRz
QmV0d2VlbiA9IGZ1bmN0aW9uIChyZXBvc2l0b3J5LCBmcm9tLCB0bykKLXsKLSAgICB2YXIgY2Fj
aGVkQ29tbWl0cyA9IHRoaXMuX2NhY2hlZENvbW1pdHNCeVJlcG9zaXRvcnlbcmVwb3NpdG9yeV07
Ci0gICAgaWYgKCFjYWNoZWRDb21taXRzKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHZh
ciBzdGFydENvbW1pdCA9IGNhY2hlZENvbW1pdHMuY29tbWl0c0J5UmV2aXNpb25bZnJvbV07Ci0g
ICAgdmFyIGVuZENvbW1pdCA9IGNhY2hlZENvbW1pdHMuY29tbWl0c0J5UmV2aXNpb25bdG9dOwot
ICAgIGlmICghc3RhcnRDb21taXQgfHwgIWVuZENvbW1pdCkKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICByZXR1cm4gY2FjaGVkQ29tbWl0cy5jb21taXRzQnlUaW1lLnNsaWNlKHN0YXJ0Q29t
bWl0LmNhY2hlSW5kZXgsIGVuZENvbW1pdC5jYWNoZUluZGV4ICsgMSk7Ci19Ci0KLUNvbW1pdExv
Z3MuX2NhY2hlQ29uc2VjdXRpdmVDb21taXRzID0gZnVuY3Rpb24gKHJlcG9zaXRvcnksIGZyb20s
IHRvLCBjb25zZWN1dGl2ZUNvbW1pdHMpCi17Ci0gICAgdmFyIGNhY2hlZENvbW1pdHMgPSB0aGlz
Ll9jYWNoZWRDb21taXRzQnlSZXBvc2l0b3J5W3JlcG9zaXRvcnldOwotICAgIGlmICghY2FjaGVk
Q29tbWl0cykgewotICAgICAgICBjYWNoZWRDb21taXRzID0ge2NvbW1pdHNCeVJldmlzaW9uOiB7
fSwgY29tbWl0c0J5VGltZTogW119OwotICAgICAgICB0aGlzLl9jYWNoZWRDb21taXRzQnlSZXBv
c2l0b3J5W3JlcG9zaXRvcnldID0gY2FjaGVkQ29tbWl0czsKLSAgICB9Ci0KLSAgICBjb25zZWN1
dGl2ZUNvbW1pdHMuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0KSB7Ci0gICAgICAgIGlmIChjYWNo
ZWRDb21taXRzLmNvbW1pdHNCeVJldmlzaW9uW2NvbW1pdC5yZXZpc2lvbl0pCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGNhY2hlZENvbW1pdHMuY29tbWl0c0J5UmV2aXNpb25bY29tbWl0
LnJldmlzaW9uXSA9IGNvbW1pdDsKLSAgICAgICAgY2FjaGVkQ29tbWl0cy5jb21taXRzQnlUaW1l
LnB1c2goY29tbWl0KTsKLSAgICB9KTsKLQotICAgIGNhY2hlZENvbW1pdHMuY29tbWl0c0J5VGlt
ZS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnRpbWUgJiYgYi50aW1lID8gKGEudGlt
ZSAtIGIudGltZSkgOiAoYS5vcmRlciAtIGIub3JkZXIpOyB9KTsKLSAgICBjYWNoZWRDb21taXRz
LmNvbW1pdHNCeVRpbWUuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0LCBpbmRleCkgeyBjb21taXQu
Y2FjaGVJbmRleCA9IGluZGV4OyB9KTsKLX0KLQotCi1mdW5jdGlvbiBNZWFzdXJlbWVudChyYXdE
YXRhKQotewotICAgIHRoaXMuX3JhdyA9IHJhd0RhdGE7Ci0KLSAgICB2YXIgbGF0ZXN0VGltZSA9
IC0xOwotICAgIHZhciByZXZpc2lvbnMgPSB0aGlzLl9yYXdbJ3JldmlzaW9ucyddOwotICAgIC8v
IEZJWE1FOiBGaXggdGhpcyBpbiB0aGUgc2VydmVyIHNpZGUuCi0gICAgaWYgKEFycmF5LmlzQXJy
YXkocmV2aXNpb25zKSkKLSAgICAgICAgcmV2aXNpb25zID0ge307Ci0gICAgdGhpcy5fcmF3Wydy
ZXZpc2lvbnMnXSA9IHJldmlzaW9uczsKLQotICAgIGZvciAodmFyIHJlcG9zaXRvcnlJZCBpbiBy
ZXZpc2lvbnMpIHsKLSAgICAgICAgdmFyIGNvbW1pdFRpbWVPclVuZGVmaW5lZCA9IHJldmlzaW9u
c1tyZXBvc2l0b3J5SWRdWzFdOyAvLyBlLmcuIFsiMTYyMTkwIiwgMTM4OTk0NTA0NjAwMF0KLSAg
ICAgICAgaWYgKGNvbW1pdFRpbWVPclVuZGVmaW5lZCAmJiBsYXRlc3RUaW1lIDwgY29tbWl0VGlt
ZU9yVW5kZWZpbmVkKQotICAgICAgICAgICAgbGF0ZXN0VGltZSA9IGNvbW1pdFRpbWVPclVuZGVm
aW5lZDsKLSAgICB9Ci0gICAgdGhpcy5fbGF0ZXN0Q29tbWl0VGltZSA9IGxhdGVzdFRpbWUgIT09
IC0xID8gbmV3IERhdGUobGF0ZXN0VGltZSkgOiBudWxsOwotICAgIHRoaXMuX2J1aWxkVGltZSA9
IG5ldyBEYXRlKHRoaXMuX3Jhd1snYnVpbGRUaW1lJ10pOwotICAgIHRoaXMuX2NvbmZpZGVuY2VJ
bnRlcnZhbCA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRSZXZpc2lvbnMgPSB1bmRl
ZmluZWQ7Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5yZXZpc2lvbkZvclJlcG9zaXRvcnkg
PSBmdW5jdGlvbiAocmVwb3NpdG9yeUlkKQotewotICAgIHZhciByZXZpc2lvbnMgPSB0aGlzLl9y
YXdbJ3JldmlzaW9ucyddOwotICAgIHZhciByYXdEYXRhID0gcmV2aXNpb25zW3JlcG9zaXRvcnlJ
ZF07Ci0gICAgcmV0dXJuIHJhd0RhdGEgPyByYXdEYXRhWzBdIDogbnVsbDsKLX0KLQotTWVhc3Vy
ZW1lbnQucHJvdG90eXBlLmNvbW1pdFRpbWVGb3JSZXBvc2l0b3J5ID0gZnVuY3Rpb24gKHJlcG9z
aXRvcnlJZCkKLXsKLSAgICB2YXIgcmV2aXNpb25zID0gdGhpcy5fcmF3WydyZXZpc2lvbnMnXTsK
LSAgICB2YXIgcmF3RGF0YSA9IHJldmlzaW9uc1tyZXBvc2l0b3J5SWRdOwotICAgIHJldHVybiBy
YXdEYXRhID8gbmV3IERhdGUocmF3RGF0YVsxXSkgOiBudWxsOwotfQotCi1NZWFzdXJlbWVudC5w
cm90b3R5cGUuZm9ybWF0dGVkUmV2aXNpb25zID0gZnVuY3Rpb24gKHByZXZpb3VzTWVhc3VyZW1l
bnQpCi17Ci0gICAgdmFyIHJldmlzaW9ucyA9IHRoaXMuX3Jhd1sncmV2aXNpb25zJ107Ci0gICAg
dmFyIHByZXZpb3VzUmV2aXNpb25zID0gcHJldmlvdXNNZWFzdXJlbWVudCA/IHByZXZpb3VzTWVh
c3VyZW1lbnQuX3Jhd1sncmV2aXNpb25zJ10gOiBudWxsOwotICAgIHZhciBmb3JtYXR0ZWRSZXZp
c2lvbnMgPSB7fTsKLSAgICBmb3IgKHZhciByZXBvc2l0b3J5SWQgaW4gcmV2aXNpb25zKSB7Ci0g
ICAgICAgIHZhciBjdXJyZW50UmV2aXNpb24gPSByZXZpc2lvbnNbcmVwb3NpdG9yeUlkXVswXTsK
LSAgICAgICAgdmFyIHByZXZpb3VzUmV2aXNpb24gPSBwcmV2aW91c1JldmlzaW9ucyAmJiBwcmV2
aW91c1JldmlzaW9uc1tyZXBvc2l0b3J5SWRdID8gcHJldmlvdXNSZXZpc2lvbnNbcmVwb3NpdG9y
eUlkXVswXSA6IG51bGw7Ci0gICAgICAgIHZhciBmb3JtYXR0dGVkUmV2aXNpb24gPSBNZWFzdXJl
bWVudC5mb3JtYXRSZXZpc2lvblJhbmdlKGN1cnJlbnRSZXZpc2lvbiwgcHJldmlvdXNSZXZpc2lv
bik7Ci0gICAgICAgIGZvcm1hdHRlZFJldmlzaW9uc1tyZXBvc2l0b3J5SWRdID0gZm9ybWF0dHRl
ZFJldmlzaW9uOwotICAgIH0KLQotICAgIHJldHVybiBmb3JtYXR0ZWRSZXZpc2lvbnM7Ci19Ci0K
LU1lYXN1cmVtZW50LmZvcm1hdFJldmlzaW9uUmFuZ2UgPSBmdW5jdGlvbiAoY3VycmVudFJldmlz
aW9uLCBwcmV2aW91c1JldmlzaW9uKQotewotICAgIHZhciByZXZpc2lvbkNoYW5nZWQgPSBmYWxz
ZTsKLSAgICBpZiAocHJldmlvdXNSZXZpc2lvbiA9PSBjdXJyZW50UmV2aXNpb24pCi0gICAgICAg
IHByZXZpb3VzUmV2aXNpb24gPSBudWxsOwotICAgIGVsc2UKLSAgICAgICAgcmV2aXNpb25DaGFu
Z2VkID0gdHJ1ZTsKLQotICAgIHZhciByZXZpc2lvblByZWZpeCA9ICcnOwotICAgIHZhciByZXZp
c2lvbkRlbGltaXRlciA9ICctJzsKLSAgICB2YXIgbGFiZWwgPSAnJzsKLSAgICBpZiAocGFyc2VJ
bnQoY3VycmVudFJldmlzaW9uKSA9PSBjdXJyZW50UmV2aXNpb24pIHsgLy8gZS5nLiByMTIzNDUu
Ci0gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IHBhcnNlSW50KGN1cnJlbnRSZXZpc2lvbik7Ci0g
ICAgICAgIHJldmlzaW9uUHJlZml4ID0gJ3InOwotICAgICAgICBpZiAocHJldmlvdXNSZXZpc2lv
bikKLSAgICAgICAgICAgIHByZXZpb3VzUmV2aXNpb24gPSAocGFyc2VJbnQocHJldmlvdXNSZXZp
c2lvbikgKyAxKTsKLSAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZXZpc2lvbi5pbmRleE9mKCcgJykg
Pj0gMCkgLy8gZS5nLiAxMC45IDEzQzY0LgotICAgICAgICByZXZpc2lvbkRlbGltaXRlciA9ICcg
LSAnOwotICAgIGVsc2UgaWYgKGN1cnJlbnRSZXZpc2lvbi5sZW5ndGggPT0gNDApIHsgLy8gZS5n
LiBnaXQgaGFzaAotICAgICAgICB2YXIgZm9ybWF0dGVkQ3VycmVudEhhc2ggPSBjdXJyZW50UmV2
aXNpb24uc3Vic3RyaW5nKDAsIDgpOwotICAgICAgICBpZiAocHJldmlvdXNSZXZpc2lvbikKLSAg
ICAgICAgICAgIGxhYmVsID0gcHJldmlvdXNSZXZpc2lvbi5zdWJzdHJpbmcoMCwgOCkgKyAnLi4n
ICsgZm9ybWF0dGVkQ3VycmVudEhhc2g7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxhYmVs
ID0gZm9ybWF0dGVkQ3VycmVudEhhc2g7Ci0gICAgfQotCi0gICAgaWYgKCFsYWJlbCkgewotICAg
ICAgICBpZiAocHJldmlvdXNSZXZpc2lvbikKLSAgICAgICAgICAgIGxhYmVsID0gcmV2aXNpb25Q
cmVmaXggKyBwcmV2aW91c1JldmlzaW9uICsgcmV2aXNpb25EZWxpbWl0ZXIgKyByZXZpc2lvblBy
ZWZpeCArIGN1cnJlbnRSZXZpc2lvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGFiZWwg
PSByZXZpc2lvblByZWZpeCArIGN1cnJlbnRSZXZpc2lvbjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ewotICAgICAgICBsYWJlbDogbGFiZWwsCi0gICAgICAgIHByZXZpb3VzUmV2aXNpb246IHByZXZp
b3VzUmV2aXNpb24sCi0gICAgICAgIGN1cnJlbnRSZXZpc2lvbjogY3VycmVudFJldmlzaW9uLAot
ICAgICAgICByZXZpc2lvbkNoYW5nZWQ6IHJldmlzaW9uQ2hhbmdlZAotICAgIH07Ci19Ci0KLU1l
YXN1cmVtZW50LnByb3RvdHlwZS5pZCA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuIHRoaXMu
X3Jhd1snaWQnXTsKLX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLm1lYW4gPSBmdW5jdGlvbigp
Ci17Ci0gICAgcmV0dXJuIHRoaXMuX3Jhd1snbWVhbiddOwotfQotCi1NZWFzdXJlbWVudC5wcm90
b3R5cGUuY29uZmlkZW5jZUludGVydmFsID0gZnVuY3Rpb24oKQotewotICAgIGlmICh0aGlzLl9j
b25maWRlbmNlSW50ZXJ2YWwgPT09IHVuZGVmaW5lZCkgewotICAgICAgICB2YXIgZGVsdGEgPSBT
dGF0aXN0aWNzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKDAuOTUsIHRoaXMuX3Jhd1siaXRlcmF0
aW9uQ291bnQiXSwgdGhpcy5fcmF3WyJzdW0iXSwgdGhpcy5fcmF3WyJzcXVhcmVTdW0iXSk7Ci0g
ICAgICAgIHZhciBtZWFuID0gdGhpcy5tZWFuKCk7Ci0gICAgICAgIHRoaXMuX2NvbmZpZGVuY2VJ
bnRlcnZhbCA9IGlzTmFOKGRlbHRhKSA/IG51bGwgOiBbbWVhbiAtIGRlbHRhLCBtZWFuICsgZGVs
dGFdOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5fY29uZmlkZW5jZUludGVydmFsOwotfQotCi1N
ZWFzdXJlbWVudC5wcm90b3R5cGUubGF0ZXN0Q29tbWl0VGltZSA9IGZ1bmN0aW9uKCkKLXsKLSAg
ICByZXR1cm4gdGhpcy5fbGF0ZXN0Q29tbWl0VGltZSB8fCB0aGlzLl9idWlsZFRpbWU7Ci19Ci0K
LU1lYXN1cmVtZW50LnByb3RvdHlwZS5idWlsZElkID0gZnVuY3Rpb24oKQotewotICAgIHJldHVy
biB0aGlzLl9yYXdbJ2J1aWxkJ107Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5idWlsZE51
bWJlciA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuIHRoaXMuX3Jhd1snYnVpbGROdW1iZXIn
XTsKLX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLmJ1aWxkZXJJZCA9IGZ1bmN0aW9uICgpCi17
Ci0gICAgcmV0dXJuIHRoaXMuX3Jhd1snYnVpbGRlciddOwotfQotCi1NZWFzdXJlbWVudC5wcm90
b3R5cGUuYnVpbGRUaW1lID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLl9idWlsZFRp
bWU7Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5mb3JtYXR0ZWRCdWlsZFRpbWUgPSBmdW5j
dGlvbiAoKQotewotICAgIHJldHVybiBNZWFzdXJlbWVudC5fZm9ybWF0RGF0ZSh0aGlzLmJ1aWxk
VGltZSgpKTsKLX0KLQotTWVhc3VyZW1lbnQuX2Zvcm1hdERhdGUgPSBmdW5jdGlvbiAoZGF0ZSkK
LXsKLSAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpLnJlcGxhY2UoJ1QnLCAnICcpLnJlcGxh
Y2UoL1wuXGQrWiQvLCAnJyk7Ci19Ci0KLU1lYXN1cmVtZW50LnByb3RvdHlwZS5idWdzID0gZnVu
Y3Rpb24gKCkKLXsKLSAgICByZXR1cm4gdGhpcy5fcmF3WydidWdzJ107Ci19Ci0KLU1lYXN1cmVt
ZW50LnByb3RvdHlwZS5oYXNCdWdzID0gZnVuY3Rpb24gKCkKLXsKLSAgICB2YXIgYnVncyA9IHRo
aXMuYnVncygpOwotICAgIHJldHVybiBidWdzICYmIE9iamVjdC5rZXlzKGJ1Z3MpLmxlbmd0aDsK
LX0KLQotTWVhc3VyZW1lbnQucHJvdG90eXBlLm1hcmtlZE91dGxpZXIgPSBmdW5jdGlvbiAoKQot
ewotICAgIHJldHVybiB0aGlzLl9yYXdbJ21hcmtlZE91dGxpZXInXTsKLX0KLQotTWVhc3VyZW1l
bnQucHJvdG90eXBlLnNldE1hcmtlZE91dGxpZXIgPSBmdW5jdGlvbiAobWFya2VkT3V0bGllcikK
LXsKLSAgICB2YXIgcGFyYW1zID0geydydW4nOiB0aGlzLmlkKCksICdtYXJrZWRPdXRsaWVyJzog
bWFya2VkT3V0bGllcn07Ci0gICAgcmV0dXJuIFByaXZpbGVnZWRBUEkuc2VuZFJlcXVlc3QoJ3Vw
ZGF0ZS1ydW4tc3RhdHVzJywgcGFyYW1zKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7Ci0gICAgfSwg
ZnVuY3Rpb24gKGVycm9yKSB7Ci0gICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gdXBkYXRlIHRoZSBv
dXRsaWVyIHN0YXR1czogJyArIGVycm9yKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gUnVuc0Rh
dGEocmF3RGF0YSkKLXsKLSAgICB0aGlzLl9tZWFzdXJlbWVudHMgPSByYXdEYXRhLm1hcChmdW5j
dGlvbiAocnVuKSB7IHJldHVybiBuZXcgTWVhc3VyZW1lbnQocnVuKTsgfSk7Ci19Ci0KLVJ1bnNE
YXRhLnByb3RvdHlwZS5jb3VudCA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuIHRoaXMuX21l
YXN1cmVtZW50cy5sZW5ndGg7Ci19Ci0KLVJ1bnNEYXRhLnByb3RvdHlwZS50aW1lU2VyaWVzQnlD
b21taXRUaW1lID0gZnVuY3Rpb24gKGluY2x1ZGVPdXRsaWVycywgZXh0ZW5kVG9GdXR1cmUpCi17
Ci0gICAgcmV0dXJuIHRoaXMuX3RpbWVTZXJpZXNCeVRpbWVJbnRlcm5hbCh0cnVlLCBpbmNsdWRl
T3V0bGllcnMsIGV4dGVuZFRvRnV0dXJlKTsKLX0KLQotUnVuc0RhdGEucHJvdG90eXBlLnRpbWVT
ZXJpZXNCeUJ1aWxkVGltZSA9IGZ1bmN0aW9uIChpbmNsdWRlT3V0bGllcnMsIGV4dGVuZFRvRnV0
dXJlKQotewotICAgIHJldHVybiB0aGlzLl90aW1lU2VyaWVzQnlUaW1lSW50ZXJuYWwoZmFsc2Us
IGluY2x1ZGVPdXRsaWVycywgZXh0ZW5kVG9GdXR1cmUpOwotfQotCi1SdW5zRGF0YS5wcm90b3R5
cGUuX3RpbWVTZXJpZXNCeVRpbWVJbnRlcm5hbCA9IGZ1bmN0aW9uICh1c2VDb21taXRUeXBlLCBp
bmNsdWRlT3V0bGllcnMsIGV4dGVuZFRvRnV0dXJlKQotewotICAgIHZhciBzZXJpZXMgPSBuZXcg
QXJyYXkoKTsKLSAgICB2YXIgc2VyaWVzSW5kZXggPSAwOwotICAgIGZvciAodmFyIG1lYXN1cmVt
ZW50IG9mIHRoaXMuX21lYXN1cmVtZW50cykgewotICAgICAgICBpZiAobWVhc3VyZW1lbnQubWFy
a2VkT3V0bGllcigpICYmICFpbmNsdWRlT3V0bGllcnMpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgc2VyaWVzLnB1c2goewotICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IG1lYXN1cmVt
ZW50LAotICAgICAgICAgICAgdGltZTogdXNlQ29tbWl0VHlwZSA/IG1lYXN1cmVtZW50LmxhdGVz
dENvbW1pdFRpbWUoKSA6IG1lYXN1cmVtZW50LmJ1aWxkVGltZSgpLAotICAgICAgICAgICAgc2Vj
b25kYXJ5VGltZTogbWVhc3VyZW1lbnQuYnVpbGRUaW1lKCksCi0gICAgICAgICAgICB2YWx1ZTog
bWVhc3VyZW1lbnQubWVhbigpLAotICAgICAgICAgICAgaW50ZXJ2YWw6IG1lYXN1cmVtZW50LmNv
bmZpZGVuY2VJbnRlcnZhbCgpLAotICAgICAgICAgICAgbWFya2VkT3V0bGllcjogbWVhc3VyZW1l
bnQubWFya2VkT3V0bGllcigpLAotICAgICAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBU
aW1lU2VyaWVzKHNlcmllcywgZXh0ZW5kVG9GdXR1cmUpOwotfQotCi0vLyBGSVhNRTogV2UgbmVl
ZCB0byBkZXZpc2UgYSB3YXkgdG8gZmV0Y2ggcnVucyBpbiBtdWx0aXBsZSBjaHVua3Mgc28gdGhh
dAotLy8gd2UgZG9uJ3QgaGF2ZSB0byBmZXRjaCB0aGUgZW50aXJlIHRpbWUgc2VyaWVzIHRvIGp1
c3Qgc2hvdyB0aGUgbGFzdCAzIGRheXMuCi1SdW5zRGF0YS5mZXRjaFJ1bnMgPSBmdW5jdGlvbiAo
cGxhdGZvcm1JZCwgbWV0cmljSWQsIHRlc3RHcm91cElkLCB1c2VDYWNoZSkKLXsKLSAgICB2YXIg
dXJsID0gdGhpcy5wYXRoRm9yRmV0Y2hpbmdSdW5zKHBsYXRmb3JtSWQsIG1ldHJpY0lkLCB0ZXN0
R3JvdXBJZCwgdXNlQ2FjaGUpOwotICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1
bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgJC5nZXRKU09OKHVybCwgZnVuY3Rp
b24gKHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9ICdPSycp
IHsKLSAgICAgICAgICAgICAgICByZWplY3QocmVzcG9uc2Uuc3RhdHVzKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZlKFJ1bnNEYXRh
LmNyZWF0ZVJ1bnNEYXRhSW5SZXNwb25zZShyZXNwb25zZSkpOwotICAgICAgICB9KS5mYWlsKGZ1
bmN0aW9uICh4aHIsIHN0YXR1cywgZXJyb3IpIHsKLSAgICAgICAgICAgIGlmICh4aHIuc3RhdHVz
ID09IDQwNCAmJiB1c2VDYWNoZSkKLSAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlamVjdCh4aHIuc3RhdHVzICsgKGVycm9y
ID8gJywgJyArIGVycm9yIDogJycpKTsKLSAgICAgICAgfSkKLSAgICB9KTsKLX0KLQotUnVuc0Rh
dGEucGF0aEZvckZldGNoaW5nUnVucyA9IGZ1bmN0aW9uIChwbGF0Zm9ybUlkLCBtZXRyaWNJZCwg
dGVzdEdyb3VwSWQsIHVzZUNhY2hlKQotewotICAgIHZhciBwYXRoID0gdXNlQ2FjaGUgPyAnL2Rh
dGEvJyA6ICcvYXBpL3J1bnMvJzsKLQotICAgIHBhdGggKz0gcGxhdGZvcm1JZCArICctJyArIG1l
dHJpY0lkICsgJy5qc29uJzsKLSAgICBpZiAodGVzdEdyb3VwSWQpCi0gICAgICAgIHBhdGggKz0g
Jz90ZXN0R3JvdXA9JyArIHRlc3RHcm91cElkOwotCi0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVJ1
bnNEYXRhLmNyZWF0ZVJ1bnNEYXRhSW5SZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkKLXsK
LSAgICBkZWxldGUgcmVzcG9uc2Uuc3RhdHVzOwotCi0gICAgdmFyIGRhdGEgPSByZXNwb25zZS5j
b25maWd1cmF0aW9uczsKLSAgICBmb3IgKHZhciBjb25maWcgaW4gZGF0YSkKLSAgICAgICAgZGF0
YVtjb25maWddID0gbmV3IFJ1bnNEYXRhKGRhdGFbY29uZmlnXSk7Ci0KLSAgICBpZiAocmVzcG9u
c2UubGFzdE1vZGlmaWVkKQotICAgICAgICByZXNwb25zZS5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0
ZShyZXNwb25zZS5sYXN0TW9kaWZpZWQpOwotCi0gICAgcmV0dXJuIHJlc3BvbnNlOwotfQotCi0v
LyBGSVhNRTogSXQgd2FzIGEgbWlzdGFrZSB0byBwdXQgdGhpcyBpbiB0aGUgY2xpZW50IHNpZGUu
IFdlIHNob3VsZCBwdXQgdGhpcyBiYWNrIGluIHRoZSBKU09OLgotUnVuc0RhdGEudW5pdEZyb21N
ZXRyaWNOYW1lID0gZnVuY3Rpb24gKG1ldHJpY05hbWUpCi17Ci0gICAgdmFyIHN1ZmZpeCA9IG1l
dHJpY05hbWUubWF0Y2goJyhbQS16XVthLXpdK3xGcmFtZVJhdGUpJCcpWzBdOwotICAgIHZhciB1
bml0ID0gewotICAgICAgICAnRnJhbWVSYXRlJzogJ2ZwcycsCi0gICAgICAgICdSdW5zJzogJy9z
JywKLSAgICAgICAgJ1RpbWUnOiAnbXMnLAotICAgICAgICAnRHVyYXRpb24nOiAnbXMnLAotICAg
ICAgICAnTWFsbG9jJzogJ0InLAotICAgICAgICAnSGVhcCc6ICdCJywKLSAgICAgICAgJ0FsbG9j
YXRpb25zJzogJ0InLAotICAgICAgICAnU2l6ZSc6ICdCJywKLSAgICAgICAgJ1Njb3JlJzogJ3B0
JywKLSAgICAgICAgJ1Bvd2VyJzogJ1cnCi0gICAgfVtzdWZmaXhdOwotICAgIHJldHVybiB1bml0
OwotfQotCi1SdW5zRGF0YS5pc1NtYWxsZXJCZXR0ZXIgPSBmdW5jdGlvbiAodW5pdCkKLXsKLSAg
ICByZXR1cm4gdW5pdCAhPSAnZnBzJyAmJiB1bml0ICE9ICcvcycgJiYgdW5pdCAhPSAncHQnOwot
fQotCi0vLyBGSVhNRTogRXh0ZW5kaW5nIHRoZSBiYXNlbGluZS90YXJnZXQgdG8gdGhlIGZ1dHVy
ZSBzaG91bGQgYmUgYSBzZXJ2ZXItc2lkZSBjb25maWd1cmF0aW9uLgotZnVuY3Rpb24gVGltZVNl
cmllcyhzZXJpZXMsIGV4dGVuZFRvRnV0dXJlKQotewotICAgIHRoaXMuX3NlcmllcyA9IHNlcmll
cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Ci0gICAgICAgIHZhciBkaWZmID0gYS50aW1lIC0gYi50
aW1lOwotICAgICAgICByZXR1cm4gZGlmZiA/IGRpZmYgOiBhLnNlY29uZGFyeVRpbWUgLSBiLnNl
Y29uZGFyeVRpbWU7Ci0gICAgfSk7Ci0KLSAgICBpZiAoZXh0ZW5kVG9GdXR1cmUgJiYgdGhpcy5f
c2VyaWVzLmxlbmd0aCkgewotICAgICAgICB2YXIgbGFzdFBvaW50ID0gdGhpcy5fc2VyaWVzW3Ro
aXMuX3Nlcmllcy5sZW5ndGggLSAxXTsKLSAgICAgICAgdGhpcy5fc2VyaWVzLnB1c2goewotICAg
ICAgICAgICAgbWVhc3VyZW1lbnQ6IGxhc3RQb2ludC5tZWFzdXJlbWVudCwKLSAgICAgICAgICAg
IHRpbWU6IERhdGUubm93KCkgKyAyNCAqIDM2MDAgKiAxMDAwLAotICAgICAgICAgICAgc2Vjb25k
YXJ5VGltZTogRGF0ZS5ub3coKSArIDI0ICogMzYwMCAqIDEwMDAsCi0gICAgICAgICAgICB2YWx1
ZTogbGFzdFBvaW50LnZhbHVlLAotICAgICAgICAgICAgaW50ZXJ2YWw6IGxhc3RQb2ludC5pbnRl
cnZhbCwKLSAgICAgICAgICAgIG1hcmtlZE91dGxpZXI6IGxhc3RQb2ludC5tYXJrZWRPdXRsaWVy
LAotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgdmFyIG1p
biA9IHVuZGVmaW5lZDsKLSAgICB2YXIgbWF4ID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX3Nlcmll
cy5mb3JFYWNoKGZ1bmN0aW9uIChwb2ludCwgaW5kZXgpIHsKLSAgICAgICAgcG9pbnQuc2VyaWVz
ID0gc2VsZjsKLSAgICAgICAgcG9pbnQuc2VyaWVzSW5kZXggPSBpbmRleDsKLSAgICAgICAgaWYg
KG1pbiA9PT0gdW5kZWZpbmVkIHx8IG1pbiA+IHBvaW50LnZhbHVlKQotICAgICAgICAgICAgbWlu
ID0gcG9pbnQudmFsdWU7Ci0gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCB8fCBtYXggPCBw
b2ludC52YWx1ZSkKLSAgICAgICAgICAgIG1heCA9IHBvaW50LnZhbHVlOwotICAgIH0pOwotICAg
IHRoaXMuX21pbiA9IG1pbjsKLSAgICB0aGlzLl9tYXggPSBtYXg7Ci19Ci0KLVRpbWVTZXJpZXMu
cHJvdG90eXBlLmZpbmRQb2ludEJ5SW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpCi17Ci0gICAgaWYg
KCF0aGlzLl9zZXJpZXMgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuX3Nlcmllcy5sZW5n
dGgpCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIHJldHVybiB0aGlzLl9zZXJpZXNbaW5kZXhd
OwotfQotCi1UaW1lU2VyaWVzLnByb3RvdHlwZS5maW5kUG9pbnRCeUJ1aWxkID0gZnVuY3Rpb24g
KGJ1aWxkSWQpCi17Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllcy5maW5kKGZ1bmN0aW9uIChwb2lu
dCkgeyByZXR1cm4gcG9pbnQubWVhc3VyZW1lbnQuYnVpbGRJZCgpID09IGJ1aWxkSWQ7IH0pCi19
Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLmZpbmRQb2ludEJ5UmV2aXNpb25zID0gZnVuY3Rpb24g
KHJldmlzaW9ucykKLXsKLSAgICByZXR1cm4gdGhpcy5fc2VyaWVzLmZpbmQoZnVuY3Rpb24gKHBv
aW50LCBpbmRleCkgewotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5SWQgaW4gcmV2aXNpb25z
KSB7Ci0gICAgICAgICAgICBpZiAocG9pbnQubWVhc3VyZW1lbnQucmV2aXNpb25Gb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnlJZCkgIT0gcmV2aXNpb25zW3JlcG9zaXRvcnlJZF0pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0pOwotfQotCi1UaW1lU2VyaWVzLnByb3RvdHlwZS5maW5kUG9pbnRCeU1lYXN1cmVtZW50SWQg
PSBmdW5jdGlvbiAobWVhc3VyZW1lbnRJZCkKLXsKLSAgICByZXR1cm4gdGhpcy5fc2VyaWVzLmZp
bmQoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBwb2ludC5tZWFzdXJlbWVudC5pZCgpID09IG1l
YXN1cmVtZW50SWQ7IH0pOwotfQotCi1UaW1lU2VyaWVzLnByb3RvdHlwZS5maW5kUG9pbnRBZnRl
clRpbWUgPSBmdW5jdGlvbiAodGltZSkKLXsKLSAgICByZXR1cm4gdGhpcy5fc2VyaWVzLmZpbmQo
ZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBwb2ludC50aW1lID49IHRpbWU7IH0pOwotfQotCi1U
aW1lU2VyaWVzLnByb3RvdHlwZS5zZXJpZXNCZXR3ZWVuUG9pbnRzID0gZnVuY3Rpb24gKHN0YXJ0
UG9pbnQsIGVuZFBvaW50KQotewotICAgIGlmICh0eXBlb2Yoc3RhcnRQb2ludC5zZXJpZXNJbmRl
eCkgIT0gIm51bWJlciIgfHwgdHlwZW9mKGVuZFBvaW50LnNlcmllc0luZGV4KSAhPSAibnVtYmVy
IikKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHRoaXMuX3Nlcmllcy5zbGljZShz
dGFydFBvaW50LnNlcmllc0luZGV4LCBlbmRQb2ludC5zZXJpZXNJbmRleCArIDEpOwotfQotCi1U
aW1lU2VyaWVzLnByb3RvdHlwZS5taW5NYXhGb3JUaW1lUmFuZ2UgPSBmdW5jdGlvbiAoc3RhcnRU
aW1lLCBlbmRUaW1lLCBpZ25vcmVPdXRsaWVyKQotewotICAgIHZhciBkYXRhID0gdGhpcy5fc2Vy
aWVzOwotICAgIHZhciBpID0gMDsKLSAgICBpZiAoc3RhcnRUaW1lICE9PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IHZhciBwb2ludCA9IGRhdGFbaV07Ci0gICAgICAgICAgICBpZiAocG9pbnQudGltZSA+PSBzdGFy
dFRpbWUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkp
Ci0gICAgICAgICAgICBpLS07Ci0gICAgfQotICAgIHZhciBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVF
OwotICAgIHZhciBtYXggPSBOdW1iZXIuTUlOX1ZBTFVFOwotICAgIGZvciAoOyBpIDwgZGF0YS5s
ZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgcG9pbnQgPSBkYXRhW2ldOwotICAgICAgICBpZiAo
cG9pbnQuaXNPdXRsaWVyICYmIGlnbm9yZU91dGxpZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSBwb2ludC5pbnRlcnZhbCA/IHBvaW50LmludGVydmFs
WzBdIDogcG9pbnQudmFsdWU7Ci0gICAgICAgIHZhciBjdXJyZW50TWF4ID0gcG9pbnQuaW50ZXJ2
YWwgPyBwb2ludC5pbnRlcnZhbFsxXSA6IHBvaW50LnZhbHVlOwotCi0gICAgICAgIGlmIChjdXJy
ZW50TWluIDwgbWluKQotICAgICAgICAgICAgbWluID0gY3VycmVudE1pbjsKLSAgICAgICAgaWYg
KGN1cnJlbnRNYXggPiBtYXgpCi0gICAgICAgICAgICBtYXggPSBjdXJyZW50TWF4OwotCi0gICAg
ICAgIGlmIChwb2ludC50aW1lID49IGVuZFRpbWUpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIFttaW4sIG1heF07Ci19Ci0KLVRpbWVTZXJpZXMucHJvdG90eXBlLnNlcmll
cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NlcmllczsgfQotCi1UaW1lU2VyaWVzLnBy
b3RvdHlwZS5yYXdWYWx1ZXMgPSBmdW5jdGlvbiAoKQotewotICAgIHJldHVybiB0aGlzLl9zZXJp
ZXMubWFwKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1cm4gcG9pbnQudmFsdWUgfSk7Ci19Ci0KLVRp
bWVTZXJpZXMucHJvdG90eXBlLmxhc3RQb2ludCA9IGZ1bmN0aW9uICgpCi17Ci0gICAgaWYgKCF0
aGlzLl9zZXJpZXMgfHwgIXRoaXMuX3Nlcmllcy5sZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxs
OwotICAgIHJldHVybiB0aGlzLl9zZXJpZXNbdGhpcy5fc2VyaWVzLmxlbmd0aCAtIDFdOwotfQot
Ci1UaW1lU2VyaWVzLnByb3RvdHlwZS5wcmV2aW91c1BvaW50ID0gZnVuY3Rpb24gKHBvaW50KQot
ewotICAgIGlmICghcG9pbnQuc2VyaWVzSW5kZXgpCi0gICAgICAgIHJldHVybiBudWxsOwotICAg
IHJldHVybiB0aGlzLl9zZXJpZXNbcG9pbnQuc2VyaWVzSW5kZXggLSAxXTsKLX0KLQotVGltZVNl
cmllcy5wcm90b3R5cGUubmV4dFBvaW50ID0gZnVuY3Rpb24gKHBvaW50KQotewotICAgIGlmICgh
cG9pbnQuc2VyaWVzSW5kZXgpCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIHJldHVybiB0aGlz
Ll9zZXJpZXNbcG9pbnQuc2VyaWVzSW5kZXggKyAxXTsKLX0KLQotaWYgKHR5cGVvZiBtb2R1bGUg
IT0gJ3VuZGVmaW5lZCcpIHsKLSAgICBTdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vc2hhcmVkL3N0
YXRpc3RpY3MuanMnKTsKLSAgICBtb2R1bGUuZXhwb3J0cy5NZWFzdXJlbWVudCA9IE1lYXN1cmVt
ZW50OwotICAgIG1vZHVsZS5leHBvcnRzLlJ1bnNEYXRhID0gUnVuc0RhdGE7Ci0gICAgbW9kdWxl
LmV4cG9ydHMuVGltZVNlcmllcyA9IFRpbWVTZXJpZXM7Ci19CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YyL2luZGV4Lmh0bWwKaW5kZXggMWM4ZmMyNjE2Njc4ZGIzNWZhZjRi
MjZhZjgzODRlZDQzYWEwNjNlYi4uYTNiMmNlODkxYjUwOGQ5NmY5ZWMwMjZiMjM3NGQ1NjkxNTkz
NjA1ZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9pbmRl
eC5odG1sCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvaW5kZXguaHRt
bApAQCAtMyw4MDEgKzMsMjMgQEAKIDxoZWFkPgogICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
ICAgICA8dGl0bGU+UGVyZm9ybWFuY2UgRGFzaGJvYXJkIGlzIExvYWRpbmcuLi48L3RpdGxlPgot
Ci0gICAgPGxpbmsgcmVsPSJwcmVmZXRjaCIgaHJlZj0iLi4vZGF0YS9tYW5pZmVzdC5qc29uIj4K
LSAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iIHNyYz0iLi4vZGF0YS9tYW5pZmVz
dC5qc29uIj48L3NjcmlwdD4KICAgICA8c2NyaXB0PgogCiAgICAgICAgIGZ1bmN0aW9uIHJlZGly
ZWN0VG9WM0lmTmVlZGVkKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGhhc2ggPSB3aW5k
b3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRp
b24uaGFzaDsKICAgICAgICAgICAgIGlmIChoYXNoLnN0YXJ0c1dpdGgoJyMvYW5hbHlzaXMnKSB8
fCBoYXNoLnN0YXJ0c1dpdGgoJyMvZGFzaGJvYXJkJykpCiAgICAgICAgICAgICAgICAgd2luZG93
LmxvY2F0aW9uLnBhdGhuYW1lID0gJy92My8nOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy92My8nOwogICAgICAgICB9CiAKICAgICAg
ICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IHJlZGlyZWN0VG9WM0lmTmVlZGVkOwogICAgICAgICBy
ZWRpcmVjdFRvVjNJZk5lZWRlZCgpOwogCiAgICAgPC9zY3JpcHQ+Ci0KLSAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9ImFwcC5jc3MiPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iY2hhcnQtcGFuZS5jc3MiPgotCi0gICAgPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS5taW4u
anMiIGRlZmVyPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9qcXVlcnkubWluLmpzIiBk
ZWZlcj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ianMvaGFuZGxlYmFycy5qcyIgZGVmZXI+
PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL2VtYmVyLmpzIiBkZWZlcj48L3NjcmlwdD4K
LSAgICA8c2NyaXB0IHNyYz0ianMvZW1iZXItZGF0YS5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCBzcmM9ImpzL2QzL2QzLm1pbi5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9Ii4uL3NoYXJlZC9zdGF0aXN0aWNzLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHNyYz0ic3RhdGlzdGljcy1zdHJhdGVnaWVzLmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8
c2NyaXB0IHNyYz0iZGF0YS5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImFw
cC5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Im1hbmlmZXN0LmpzIiBkZWZl
cj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iYW5hbHlzaXMuanMiIGRlZmVyPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJwb3B1cC5qcyIgZGVmZXI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9ImludGVyYWN0aXZlLWNoYXJ0LmpzIiBkZWZlcj48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHNyYz0iY29tbWl0cy12aWV3ZXIuanMiIGRlZmVyPjwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJkYXNoYm9hcmQiPgot
ICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgotICAgICAgICAgICAge3twYXJ0aWFsICJuYXZi
YXIifX0KLSAgICAgICAgICAgIHt7dmlldyBBcHAuTnVtYmVyT2ZEYXlzQ29udHJvbFZpZXcgdGFn
TmFtZT0idWwiIG51bWJlck9mRGF5cz1udW1iZXJPZkRheXN9fQotICAgICAgICAgICAgPHVsIGNs
YXNzPSJjb250cm9scyI+Ci0gICAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgICAg
ICA8YSBocmVmPSJqYXZhc2NyaXB0OmZhbHNlIiBjbGFzcz0iY29udHJvbC1idXR0b24iIHt7YWN0
aW9uIHRvZ2dsZUVkaXRNb2RlfX0+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBjb250
cm9sbGVyLmVkaXRNb2RlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2ggZWRp
dGluZwotICAgICAgICAgICAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAg
ICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgPC91
bD4KLSAgICAgICAgPC9oZWFkZXI+Ci0KLSAgICAgICAgPHRhYmxlIHt7YmluZC1hdHRyIGNsYXNz
PSI6ZGFzaGJvYXJkIGVkaXRNb2RlOmVkaXRNb2RlOnJlYWRvbmx5In19PgotICAgICAgICA8dGhl
YWQ+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAg
ICAgICAgICAge3sjZWFjaCBoZWFkZXJDb2x1bW5zfX0KLSAgICAgICAgICAgICAgICAgICAge3sj
aWYgY29udHJvbGxlci5lZGl0TW9kZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGg+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgdGl0
bGU9IlJlbW92ZSBjb2x1bW4iIHt7YWN0aW9uICJyZW1vdmVDb2x1bW4iIGluZGV4fX0+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFydGlhbCAiY2xvc2UtYnV0dG9uIn19Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHt7aW5wdXQgdmFsdWU9bGFiZWx9fQotICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4K
LSAgICAgICAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0
aD57e2xhYmVsfX08L3RoPgotICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAg
ICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAge3sjaWYgY29udHJvbGxlci5lZGl0TW9k
ZX19Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD57e2lucHV0IHZhbHVlPW5ld0NvbHVtbkhlYWRl
ciBhY3Rpb249ImFkZENvbHVtbiIgcGxhY2Vob2xkZXI9IkFkZCBhIGNvbHVtbiJ9fTwvdGQ+Ci0g
ICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC90aGVh
ZD4KLSAgICAgICAgPHRib2R5PgotICAgICAgICAgICAge3sjZWFjaCByb3dzfX0KLSAgICAgICAg
ICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIGNvbnRyb2xsZXIuZWRpdE1v
ZGV9fQotICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIHRpdGxlPSJSZW1vdmUgcm93IiB7e2Fj
dGlvbiAicmVtb3ZlUm93IiB0aGlzfX0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7cGFydGlhbCAiY2xvc2UtYnV0dG9uIn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aW5wdXQgdmFsdWU9aGVhZGVyfX0K
LSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICAgICAgICAgIHt7ZWxz
ZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9ImxhYmVsIj57e2hl
YWRlcn19PC9zcGFuPjwvdGg+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAg
ICAgICAgICAgICAge3sjZWFjaCBjZWxsc319Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgZW1wdHl9fQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7eyNpZiBjb250cm9sbGVyLmVkaXRNb2RlfX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dmlldyBBcHAuUG9wdXBWaWV3IGxpc3Q9cGlj
a2VyRGF0YSBsYWJlbD0nQ2hvb3NlJ319Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7eyNpZiBjaGFydERhdGF9fQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGFzaGJvYXJkLXN0YXR1cyI+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgbGF0ZXN0U3RhdHVzfX0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYXRlc3RTdGF0
dXMuY3VycmVudFZhbHVlfX17e2NoYXJ0RGF0YS51bml0fX0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgbGF0ZXN0U3RhdHVzLmxhYmVsfX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHt7YmluZC1h
dHRyIGNsYXNzPSI6c3RhdHVzLWxhYmVsIGxhdGVzdFN0YXR1cy5jbGFzc05hbWUifX0+e3tsYXRl
c3RTdGF0dXMubGFiZWx9fTwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjbGluay10byAnY2hhcnRzJyAo
cXVlcnktcGFyYW1zIHBhbmVMaXN0PXBhbmVMaXN0IHNpbmNlPWNvbnRyb2xsZXIuc2luY2UpfX0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ludGVyYWN0aXZlLWNo
YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RGF0
YT1jaGFydERhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tYWluPWNvbnRyb2xsZXIuc2hhcmVkRG9tYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbj1mYWxzZX19Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7I2lmIGZhaWx1cmV9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxkaXYgY2xhc3M9ImZhaWx1cmUiPnt7ZmFpbHVyZX19PC9kaXY+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj57e3BhcnRpYWwgInNwaW5uZXIifX08
L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7eyNpZiBjb250cm9sbGVyLmVkaXRNb2RlfX0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIHRpdGxlPSJSZXNl
dCBwYW5lIiBjbGFzcz0icmVzZXQiIHt7YWN0aW9uICJyZXNldFBhbmUiIHRoaXN9fT4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BhcnRpYWwgImNsb3NlLWJ1dHRv
biJ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAg
ICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIGNvbnRyb2xsZXIuZWRp
dE1vZGV9fQotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAgICAgICAg
ICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAge3svZWFj
aH19Ci0gICAgICAgICAgICB7eyNpZiBjb250cm9sbGVyLmVkaXRNb2RlfX0KLSAgICAgICAgICAg
ICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD57e2lucHV0IHZhbHVlPW5ld1Jvd0hl
YWRlciBhY3Rpb249ImFkZFJvdyIgcGxhY2Vob2xkZXI9IkFkZCBhIHJvdyJ9fTwvdGQ+Ci0gICAg
ICAgICAgICAgICAgICAgIHt7I2VhY2ggZW1wdHlSb3d9fQotICAgICAgICAgICAgICAgICAgICAg
ICAgPHRkPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAg
ICAgICAgICA8dGQ+PC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAge3sv
aWZ9fQotICAgICAgICA8L3Rib2R5PgotICAgICAgICA8L3RhYmxlPgotICAgIDwvc2NyaXB0Pgot
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1l
PSJjaGFydHMiPgotICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgotICAgICAgICAgICAge3tw
YXJ0aWFsICJuYXZiYXIifX0KLSAgICAgICAgICAgIDx1bCBjbGFzcz0iY29udHJvbHMiPgotICAg
ICAgICAgICAgICAgIDxsaT57e3ZpZXcgQXBwLlBvcHVwVmlldyBsaXN0PXBsYXRmb3JtcyBsYWJl
bD0nQWRkIHBhbmUnfX08L2xpPgotICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgIDx1bCBj
bGFzcz0iY29udHJvbHMiPgotICAgICAgICAgICAgICAgIDxsaT57e3ZpZXcgQXBwLlN0YXJ0VGlt
ZVNsaWRlclZpZXcgc3RhcnRUaW1lPXN0YXJ0VGltZSBvbGRlc3RTdGFydFRpbWU9b2xkZXN0U3Rh
cnRUaW1lfX08L2xpPgotICAgICAgICAgICAgPC91bD4KLSAgICAgICAgPC9oZWFkZXI+Ci0KLSAg
ICAgICAge3sjZWFjaCBwYW5lcyBpdGVtQ29udHJvbGxlcj0icGFuZSJ9fQotICAgICAgICAgICAg
PHNlY3Rpb24gY2xhc3M9ImNoYXJ0LXBhbmUgaW4tY2hhcnRzIiB0YWJpbmRleD0iMCI+Ci0gICAg
ICAgICAgICAgICAgPGhlYWRlcj4KLSAgICAgICAgICAgICAgICAgICAgPGgxIHt7YWN0aW9uICJ0
b2dnbGVEZXRhaWxzIn19Pnt7bWV0cmljLmZ1bGxOYW1lfX0gLSB7e3BsYXRmb3JtLm5hbWV9fTwv
aDE+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIHRpdGxl
PSJDbG9zZSIgY2xhc3M9ImNsb3NlLWJ1dHRvbiIge3thY3Rpb24gImNsb3NlIn19Pnt7cGFydGlh
bCAiY2xvc2UtYnV0dG9uIn19PC9hPgotICAgICAgICAgICAgICAgICAgICB7eyNpZiBtb3ZpbmdB
dmVyYWdlU3RyYXRlZ2llc319Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZh
c2NyaXB0OmZhbHNlIiB0aXRsZT0iU3RhdGlzdGljYWwgVG9vbHMiIGNsYXNzPSJzdGF0LWJ1dHRv
biIge3thY3Rpb24gInRvZ2dsZVN0YXRQYW5lIn19Pnt7cGFydGlhbCAic3RhdC1idXR0b24ifX08
L2E+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgPGEg
aHJlZj0iamF2YXNjcmlwdDpmYWxzZSIge3tiaW5kLWF0dHIgdGl0bGU9c2hvd091dGxpZXJUaXRs
ZSBjbGFzcz0iOm91dGxpZXItYnV0dG9uIHNob3dPdXRsaWVyOnNob3c6aGlkZSJ9fQotICAgICAg
ICAgICAgICAgICAgICAgICAge3thY3Rpb24gInRvZ2dsZVNob3dPdXRsaWVyIn19PgotICAgICAg
ICAgICAgICAgICAgICAgICAge3twYXJ0aWFsICJvdXRsaWVyLWJ1dHRvbiJ9fQotICAgICAgICAg
ICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6
ZmFsc2UiIHRpdGxlPSJBbmFseXplIHRoZSBzZWxlY3RlZCByYW5nZSIgY2xhc3M9ImFuYWx5c2lz
LWJ1dHRvbiIge3thY3Rpb24gInRvZ2dsZUJ1Z3NQYW5lIn19PgotICAgICAgICAgICAgICAgICAg
ICAgICAge3twYXJ0aWFsICJhbmFseXNpcy1idXR0b24ifX0KLSAgICAgICAgICAgICAgICAgICAg
PC9hPgotICAgICAgICAgICAgICAgICAgICB7eyNpZiBBcHAuTWFuaWZlc3QucmVwb3NpdG9yaWVz
V2l0aFJlcG9ydGVkQ29tbWl0c319Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJq
YXZhc2NyaXB0OmZhbHNlIiB0aXRsZT0iU2VhcmNoIGNvbW1pdHMgYnkgYSBrZXl3b3JkIiBjbGFz
cz0ic2VhcmNoLWJ1dHRvbiIge3thY3Rpb24gInRvZ2dsZVNlYXJjaFBhbmUifX0+e3twYXJ0aWFs
ICJzZWFyY2gtYnV0dG9uIn19PC9hPgotICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAg
ICAgICAgICAgICAgPC9oZWFkZXI+Ci0KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5
Ij4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ZnLWNvbnRhaW5lciI+Ci0gICAg
ICAgICAgICAgICAgICAgIHt7I2lmIGNoYXJ0RGF0YX19Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB7e2ludGVyYWN0aXZlLWNoYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRE
YXRhPWNoYXJ0RGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcz1yYW5nZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW49bWFpblBsb3REb21haW4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZT10cnVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudEl0ZW09aG92ZXJlZE9yU2VsZWN0ZWRJdGVtCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWU9c2hhcmVkVGltZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGVkSXRlbT1zZWxlY3RlZEl0ZW0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoaWdobGlnaHRlZEl0ZW1zPWhpZ2hsaWdodGVkSXRlbXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYW5nZVJvdXRlPSJhbmFseXNpc1Rhc2siCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uPXRpbWVSYW5nZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGVkUG9pbnRzPXNlbGVjdGVkUG9pbnRzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvd0Z1bGxZQXhpcz1zaG93RnVsbFlBeGlzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgem9vbWFibGU9dHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb209
Inpvb21lZCJ9fQotICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAg
ICAgICAgICAge3sjaWYgZmFpbHVyZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0iZmFpbHVyZSI+e3tmYWlsdXJlfX08L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJv
Z3Jlc3MiPnt7cGFydGlhbCAic3Bpbm5lciJ9fTwvZGl2PgotICAgICAgICAgICAgICAgICAgICAg
ICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAg
ICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJ2aWV3Ij4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHt7I2lmIGNoYXJ0RGF0YX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3tpbnRlcmFjdGl2ZS1jaGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFydERhdGE9Y2hhcnREYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dZ
QXhpcz1mYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW49b3ZlcnZp
ZXdEb21haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPW92ZXJ2
aWV3U2VsZWN0aW9ufX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0iZGV0YWlscy10YWJsZS1jb250YWluZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7cGFydGlhbCAiY2hhcnQtZGV0YWlscyJ9fQotICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgIDwvZGl2Pgot
Ci0gICAgICAgICAgICAgICAgPGRpdiB7e2JpbmQtYXR0ciBjbGFzcz0iOnBvcHVwLXBhbmUgOmFu
YWx5c2lzLXBhbmUgc2hvd2luZ0FuYWx5c2lzUGFuZTo6aGlkZGVuIn19PgotICAgICAgICAgICAg
ICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYW5hbHlzaXMtb3B0aW9uLW9wdGlvbiI+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICA8aDE+U3RhcnQgQS9CIHRlc3Rpbmcgb3IgYXNzb2NpYXRlIGJ1Z3M8
L2gxPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk5hbWU6IHt7aW5wdXQgdHlwZT10
ZXh0IHZhbHVlPW5ld0FuYWx5c2lzVGFza05hbWV9fSA8YnV0dG9uIHt7YWN0aW9uICJjcmVhdGVB
bmFseXNpc1Rhc2sifX0ge3tiaW5kLWF0dHIgZGlzYWJsZWQ9Y2Fubm90QW5hbHl6ZX19PkFuYWx5
emU8L2J1dHRvbj48L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAg
ICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhbmFseXNpcy1vcHRpb24tb3B0aW9uIj4K
LSAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5NYXJraW5nIG91dGxpZXJzPC9oMT4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDxsYWJlbD57e2lucHV0IHR5cGU9Y2hlY2tib3ggY2hlY2tlZD1z
ZWxlY3RlZEl0ZW1Jc01hcmtlZE91dGxpZXIgZGlzYWJsZWQ9Y2Fubm90TWFya091dGxpZXJ9fSBN
YXJrIGFzIGFuIG91dGxpZXIgYW5kIGhpZGUgaXQuPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAg
ICAgPC9zZWN0aW9uPgotICAgICAgICAgICAgICAgIDwvZGl2PgotCi0gICAgICAgICAgICAgICAg
PGZvcm0ge3tiaW5kLWF0dHIgY2xhc3M9Ijpwb3B1cC1wYW5lIDpzZWFyY2gtcGFuZSBzaG93aW5n
U2VhcmNoUGFuZTo6aGlkZGVuIn19PgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0i
cmVwb3NpdG9yaWVzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7dmlldyBFbWJlci5TZWxl
Y3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PUFwcC5NYW5pZmVzdC5yZXBv
c2l0b3JpZXNXaXRoUmVwb3J0ZWRDb21taXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uVmFsdWVQYXRoPSdjb250ZW50LmlkJwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbkxhYmVsUGF0aD0nY29udGVudC5uYW1lJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbj1jb21taXRTZWFyY2hSZXBvc2l0b3J5fX0KLSAgICAgICAgICAgICAgICAg
ICAgPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICB7e2lucHV0IGFjdGlvbj0ic2VhcmNoQ29t
bWl0IiBwbGFjZWhvbGRlcj0iTmFtZSBvciBlbWFpbCIgdmFsdWU9Y29tbWl0U2VhcmNoS2V5d29y
ZH19Ci0gICAgICAgICAgICAgICAgPC9mb3JtPgotCi0gICAgICAgICAgICAgICAge3twYXJ0aWFs
ICJzdGF0LXBhbmUifX0KLQotICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9ImFsdGVybmF0aXZl
LXBhbmUtYWN0aW9ucyI+Ci0gICAgICAgICAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHt7I2VhY2ggYWx0ZXJuYXRpdmVQYW5lc319Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIHt7YWN0aW9uICJhZGRBbHRl
cm5hdGl2ZVBhbmVzIiBwYW5lIHBsYXRmb3JtIG1ldHJpY3N9fT57e2xhYmVsfX08L2E+PC9saT4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICAgICAgICA8
L3VsPgotICAgICAgICAgICAgICAgIDwvbmF2PgotICAgICAgICAgICAgPC9zZWN0aW9uPgotICAg
ICAgICB7ey9lYWNofX0KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94
LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0iY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1j
aGFydCI+Ci0gICAgICAgIHt7I2lmIGludGVyYWN0aXZlfX0KLSAgICAgICAgICAgIDxkaXYgY2xh
c3M9InNlbGVjdGlvbi10b29sYmFyIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgotICAgICAgICAg
ICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIGNsYXNzPSJidXR0b24iIHt7YWN0aW9u
ICJ6b29tIn19PgotICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ6b29tIiB2aWV3Qm94
PSIwIDAgMTAwIDEwMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9
IjAiIHN0cm9rZT0ibm9uZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24g
cG9pbnRzPSIyNSwyNSA1LDUwIDI1LDc1Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PHBvbHlnb24gcG9pbnRzPSI3NSwyNSA5NSw1MCA3NSw3NSIvPgotICAgICAgICAgICAgICAgICAg
ICAgICAgPC9nPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9IjIwIiB5MT0iNTAi
IHgyPSI4MCIgeTI9IjUwIiBzdHJva2Utd2lkdGg9IjEwIj48L2xpbmU+Ci0gICAgICAgICAgICAg
ICAgICAgIDwvc3ZnPgotICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgIDwvZGl2Pgot
ICAgICAgICB7ey9pZn19Ci0gICAgICAgIDxkaXYgY2xhc3M9InJhbmdlQmFyc0NvbnRhaW5lcklu
bGluZVN0eWxlIj4KLSAgICAgICAgICAgIHt7I2VhY2ggcmFuZ2VCYXJzfX0KLSAgICAgICAgICAg
ICAgICB7eyNsaW5rLXRvIGxpbmtSb3V0ZSBsaW5rSWQgdGl0bGU9bGFiZWx9fQotICAgICAgICAg
ICAgICAgICAgICA8c3BhbiB7e2JpbmQtYXR0ciBjbGFzcz0iOnJhbmdlQmFyIHN0YXR1cyIgc3R5
bGU9aW5saW5lU3R5bGV9fT48L3NwYW4+Ci0gICAgICAgICAgICAgICAge3svbGluay10b319Ci0g
ICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgPC9kaXY+Ci0gICAgPC9zY3JpcHQ+Ci0KLSAg
ICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9ImNo
YXJ0LWRldGFpbHMiPgotICAgIHt7I2lmIGRldGFpbHN9fQotICAgICAgICA8dGFibGUgY2xhc3M9
ImRldGFpbHMtdGFibGUiPgotICAgICAgICAgICAgPHRib2R5IGNsYXNzPSJidWdzIj4KLSAgICAg
ICAgICAgIHt7I2VhY2ggZGV0YWlscy5idWdUcmFja2Vyc319Ci0gICAgICAgICAgICAgICAge3sj
aWYgYnVnc319Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDx0aD57e2xhYmVsfX08L3RoPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAg
ICAgICAgICAgICAgICAgICAgICAgW3t7YnVnVXJsfX1dCi0gICAgICAgICAgICAgICAgICAgICAg
ICA8YSB7e2JpbmQtYXR0ciBocmVmPWJ1Z1VybH19IHRhcmdldD0iX2JsYW5rIj57e2J1Z051bWJl
cn19PC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAg
ICAgPC90cj4KLSAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICB7ey9lYWNofX0K
LSAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICA8dGJvZHkgY2xhc3M9InN0YXR1cyI+
Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGg+Q3VycmVudDwv
dGg+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7
ZGV0YWlscy5zdGF0dXMuY3VycmVudFZhbHVlfX0ge3tjaGFydERhdGEudW5pdH19Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB7eyNpZiBkZXRhaWxzLnN0YXR1cy52YWx1ZURlbHRhfX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoe3tkZXRhaWxzLnN0YXR1cy52YWx1ZURlbHRhfX0ge3tj
aGFydERhdGEudW5pdH19IC8ge3tkZXRhaWxzLnN0YXR1cy5yZWxhdGl2ZURlbHRhfX0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAgICAgICAgICB7eyNp
ZiBkZXRhaWxzLnN0YXR1cy5sYWJlbH19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJy
PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHt7YmluZC1hdHRyIGNsYXNzPWRl
dGFpbHMuc3RhdHVzLmNsYXNzTmFtZX19Pnt7ZGV0YWlscy5zdGF0dXMubGFiZWx9fTwvc3Bhbj4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAgPC90
ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAg
ICAgIDx0Ym9keT4KLSAgICAgICAgICAgIHt7I2lmIGRldGFpbHMuYnVpbGROdW1iZXJ9fQotICAg
ICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRoPkJ1aWxkPC90aD4KLSAg
ICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgZGV0
YWlscy5idWlsZFVSTH19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEge3tiaW5kLWF0
dHIgaHJlZj1kZXRhaWxzLmJ1aWxkVVJMfX0gdGFyZ2V0PSJfYmxhbmsiPnt7ZGV0YWlscy5idWls
ZE51bWJlcn19PC9hPgotICAgICAgICAgICAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7e2RldGFpbHMuYnVpbGROdW1iZXJ9fQotICAgICAgICAgICAg
ICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAgICAgICAgICAgICAgKHt7ZGV0YWlscy5i
dWlsZFRpbWV9fSkKLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8
L3RyPgotICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAge3sjZWFjaCBkZXRhaWxzLnJl
dmlzaW9uc319Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGg+
e3tuYW1lfX08L3RoPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB7eyNpZiB1cmx9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7Ymlu
ZC1hdHRyIGhyZWY9dXJsfX0gdGFyZ2V0PSJfYmxhbmsiPnt7bGFiZWx9fTwvYT4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3ts
YWJlbH19Ci0gICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgICAg
ICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIHt7L2VhY2h9fQot
ICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPGRpdiBjbGFz
cz0iY29tbWl0cyI+Ci0gICAgICAgICAgICB7eyNlYWNoIGRldGFpbHMucmV2aXNpb25zfX0KLSAg
ICAgICAgICAgICAgICB7e2NvbW1pdHMtdmlld2VyIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSByZXZp
c2lvbkluZm89dGhpcyBjYXB0aW9uPW5hbWV9fQotICAgICAgICAgICAge3svZWFjaH19Ci0gICAg
ICAgIDwvZGl2PgotICAgIHt7L2lmfX0KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0iY29tcG9uZW50cy9jb21t
aXRzLXZpZXdlciI+Ci0gICAge3sjaWYgY29tbWl0c319Ci0gICAgICAgIDx0YWJsZSB7e2JpbmQt
YXR0ciBjbGFzcz0iOmNvbW1pdHMtdmlld2VyIHZpc2libGU6OmhpZGRlbiJ9fT4KLSAgICAgICAg
ICAgIHt7I2lmIGNhcHRpb259fQotICAgICAgICAgICAgICAgIDxjYXB0aW9uIHt7YWN0aW9uIHRv
Z2dsZVZpc2liaWxpdHl9fT57e2NhcHRpb259fSBjb21taXRzPC9jYXB0aW9uPgotICAgICAgICAg
ICAge3svaWZ9fQotICAgICAgICAgICAge3sjaWYgdmlzaWJsZX19Ci0gICAgICAgICAgICAgICAg
PHRib2R5PgotICAgICAgICAgICAgICAgICAgICB7eyNlYWNoIGNvbW1pdHN9fQotICAgICAgICAg
ICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgdXJsfX0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxhIHt7YmluZC1hdHRyIGhyZWY9dXJsfX0gdGFyZ2V0PSJf
YmxhbmsiPnt7cmV2aXNpb259fTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmV2aXNpb259
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC90aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3th
dXRob3J9fTwvdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7bWVzc2FnZX19
PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAg
IHt7L2VhY2h9fQotICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICB7ey9pZn19
Ci0gICAgICAgIDwvdGFibGU+Ci0gICAge3svaWZ9fQotICAgIDwvc2NyaXB0PgotCi0gICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJjbG9zZS1i
dXR0b24iPgotICAgICAgICA8c3ZnIGNsYXNzPSJjbG9zZS1idXR0b24gaWNvbi1idXR0b24iIHZp
ZXdCb3g9IjAgMCAxMDAgMTAwIj4KLSAgICAgICAgICAgIDxnIHN0cm9rZT0iYmxhY2siIHN0cm9r
ZS13aWR0aD0iMTAiPgotICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9
IjQ1IiBmaWxsPSJ0cmFuc3BhcmVudCIvPgotICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50
cz0iMzAsMzAgNzAsNzAiIC8+Ci0gICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCw3
MCA3MCwzMCIgLz4KLSAgICAgICAgICAgIDwvZz4KLSAgICAgICAgPC9zdmc+Ci0gICAgPC9zY3Jp
cHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRl
LW5hbWU9InN0YXQtYnV0dG9uIj4KLSAgICAgICAgPHN2ZyBjbGFzcz0ic3RhdC1idXR0b24gaWNv
bi1idXR0b24iIHZpZXdCb3g9IjEwIDAgMTEwIDEwMCI+Ci0gICAgICAgICAgICA8ZyBzdHJva2U9
Im5vbmUiIHN0cm9rZS13aWR0aD0iMCIgZmlsbD0iYmxhY2siPgotICAgICAgICAgICAgICAgIDxw
YXRoIGlkPSJ1cHBlci1zaWdtYSIgZD0iTSA1IDUgSCA5NSBWIDQwIGggLTEwIGMgLTUgLTIwIC01
IC0yMCAtMjUgLTIwIEggMzUgTCA2MCA1MCBsIC0yMCAwIiAvPgotICAgICAgICAgICAgICAgIDx1
c2UgeGxpbms6aHJlZj0iI3VwcGVyLXNpZ21hIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAxMDAp
IHNjYWxlKDEsIC0xKSIgLz4KLSAgICAgICAgICAgIDwvZz4KLSAgICAgICAgPC9zdmc+Ci0gICAg
PC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRl
bXBsYXRlLW5hbWU9InN0YXQtcGFuZSI+Ci0gICAgICAgIDxzZWN0aW9uIHt7YmluZC1hdHRyIGNs
YXNzPSI6cG9wdXAtcGFuZSA6c3RhdC1wYW5lIHNob3dpbmdTdGF0UGFuZTo6aGlkZGVuIn19Pgot
ICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InN0YXQtb3B0aW9uIj4KLSAgICAgICAgICAgICAg
ICA8aDE+TW92aW5nIGF2ZXJhZ2U8L2gxPgotICAgICAgICAgICAgICAgIDxsYWJlbD5UeXBlOiB7
e3ZpZXcgRW1iZXIuU2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9bW92aW5nQXZl
cmFnZVN0cmF0ZWdpZXMKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSdjb250
ZW50JwotICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbFBhdGg9J2NvbnRlbnQubGFiZWwn
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj1jaG9zZW5Nb3ZpbmdBdmVyYWdlU3RyYXRl
Z3l9fTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIGNob3Nlbk1vdmluZ0F2ZXJh
Z2VTdHJhdGVneS5kZXNjcmlwdGlvbn19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFz
cz0iZGVzY3JpcHRpb24iPnt7Y2hvc2VuTW92aW5nQXZlcmFnZVN0cmF0ZWd5LmRlc2NyaXB0aW9u
fX08L3A+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICB7eyNl
YWNoIGNob3Nlbk1vdmluZ0F2ZXJhZ2VTdHJhdGVneS5wYXJhbWV0ZXJMaXN0fX0KLSAgICAgICAg
ICAgICAgICAgICAgPGxhYmVsPnt7bGFiZWx9fToge3tpbnB1dCB0eXBlPSJudW1iZXIiIHZhbHVl
PXZhbHVlIG1pbj1taW4gbWF4PW1heCBzdGVwPXN0ZXB9fTwvbGFiZWw+Ci0gICAgICAgICAgICAg
ICAge3svZWFjaH19Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICB7eyNpZiBj
aG9zZW5Nb3ZpbmdBdmVyYWdlU3RyYXRlZ3kuZXhlY3V0ZX19Ci0gICAgICAgICAgICAgICAgPHNl
Y3Rpb24gY2xhc3M9InN0YXQtb3B0aW9uIj4KLSAgICAgICAgICAgICAgICAgICAgPGgxPkVudmVs
b3BlPC9oMT4KLSAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlR5cGU6IHt7dmlldyBFbWJlci5T
ZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9ZW52ZWxvcGluZ1N0cmF0ZWdp
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlUGF0aD0nY29udGVudCcKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsUGF0aD0nY29udGVudC5sYWJlbCcKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj1jaG9zZW5FbnZlbG9waW5nU3RyYXRlZ3l9
fTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIGNob3NlbkVudmVsb3BpbmdTdHJh
dGVneS5kZXNjcmlwdGlvbn19Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVz
Y3JpcHRpb24iPnt7Y2hvc2VuRW52ZWxvcGluZ1N0cmF0ZWd5LmRlc2NyaXB0aW9ufX08L3A+Ci0g
ICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAgICAgICAge3sjZWFjaCBj
aG9zZW5FbnZlbG9waW5nU3RyYXRlZ3kucGFyYW1ldGVyTGlzdH19Ci0gICAgICAgICAgICAgICAg
ICAgICAgICA8bGFiZWw+e3tsYWJlbH19OiA8aW5wdXQgdHlwZT0ibnVtYmVyIiB7e2JpbmQtYXR0
ciB2YWx1ZT12YWx1ZSBtaW49bWluIG1heD1tYXggc3RlcD1zdGVwfX0+PC9sYWJlbD4KLSAgICAg
ICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotICAg
ICAgICAgICAge3svaWZ9fQotICAgICAgICAgICAge3sjaWYgY2hvc2VuTW92aW5nQXZlcmFnZVN0
cmF0ZWd5LmlzU2VnbWVudGF0aW9ufX0KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0i
c3RhdC1vcHRpb24iPgotICAgICAgICAgICAgICAgICAgICA8aDE+QS9CIFRlc3QgUmFuZ2UgU2Vs
ZWN0aW9uPC9oMT4KLSAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlR5cGU6IHt7dmlldyBFbWJl
ci5TZWxlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9dGVzdFJhbmdlU2VsZWN0
aW9uU3RyYXRlZ2llcwotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSdj
b250ZW50JwotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWxQYXRoPSdjb250ZW50
LmxhYmVsJwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPWNob3NlblRlc3RSYW5n
ZVNlbGVjdGlvblN0cmF0ZWd5fX08L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICB7eyNpZiBj
aG9zZW5UZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneS5kZXNjcmlwdGlvbn19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPnt7Y2hvc2VuVGVzdFJhbmdlU2Vs
ZWN0aW9uU3RyYXRlZ3kuZGVzY3JpcHRpb259fTwvcD4KLSAgICAgICAgICAgICAgICAgICAge3sv
aWZ9fQotICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgIHt7L2lmfX0KLSAg
ICAgICAgICAgIHt7I2lmIGNob3NlbkVudmVsb3BpbmdTdHJhdGVneS5leGVjdXRlfX0KLSAgICAg
ICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0ic3RhdC1vcHRpb24iPgotICAgICAgICAgICAgICAg
ICAgICA8aDE+QW5vbWFseSBEZXRlY3Rpb248L2gxPgotICAgICAgICAgICAgICAgICAgICB7eyNl
YWNoIGFub21hbHlEZXRlY3Rpb25TdHJhdGVnaWVzfX0KLSAgICAgICAgICAgICAgICAgICAgICAg
IDxsYWJlbCB7e2JpbmQtYXR0ciB0aXRsZT1kZXNjcmlwdGlvbn19Pnt7aW5wdXQgdHlwZT0iY2hl
Y2tib3giIG5hbWU9aWQgY2hlY2tlZD1lbmFibGVkfX17e2xhYmVsfX08L2xhYmVsPgotICAgICAg
ICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAg
ICAgICAgICB7ey9pZn19Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NjcmlwdD4KLQotICAg
IDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0ib3V0
bGllci1idXR0b24iPgotICAgICAgICA8c3ZnIGNsYXNzPSJvdXRsaWVyLWJ1dHRvbiBpY29uLWJ1
dHRvbiIgdmlld0JveD0iMCAwIDEwMCAxMDAiPgotICAgICAgICAgICAgPGcgc3Ryb2tlPSJibGFj
ayIgZmlsbD0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTUiPgotICAgICAgICAgICAgICAgIDxsaW5l
IHgxPSIwIiB5MT0iNzAiIHgyPSI0MCIgeTI9IjcwIi8+Ci0gICAgICAgICAgICAgICAgPGNpcmNs
ZSBjeD0iMTUiIGN5PSI3MCIgcj0iOCIvPgotICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQ1
IiBjeT0iNzAiIHI9IjgiLz4KLSAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI4NSIgY3k9Ijcw
IiByPSI4Ii8+Ci0gICAgICAgICAgICAgICAgPGxpbmUgeDE9Ijg1IiB5MT0iNzAiIHgyPSIxMDAi
IHkyPSI3MCIvPgotICAgICAgICAgICAgICAgIDxnIGNsYXNzPSJzaG93LW91dGxpZXItaWNvbiI+
Ci0gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI0NSIgeTE9IjcwIiB4Mj0iNjUiIHkyPSIy
MCIvPgotICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iNjUiIHkxPSIyMCIgeDI9Ijg1IiB5
Mj0iNzAiLz4KLSAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNjUiIGN5PSIyMCIgcj0i
OCIvPgotICAgICAgICAgICAgICAgIDwvZz4KLSAgICAgICAgICAgICAgICA8ZyBjbGFzcz0iaGlk
ZS1vdXRsaWVyLWljb24iPgotICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iNDUiIHkxPSI3
MCIgeDI9Ijg1IiB5Mj0iNzAiLz4KLSAgICAgICAgICAgICAgICA8L2c+Ci0gICAgICAgICAgICA8
L2c+Ci0gICAgICAgIDwvc3ZnPgotICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJhbmFseXNpcy1idXR0b24iPgot
ICAgICAgICA8c3ZnIGNsYXNzPSJhbmFseXNpcy1idXR0b24gaWNvbi1idXR0b24iIHZpZXdCb3g9
IjAgMCAxMDAgMTAwIj4KLSAgICAgICAgICAgIDxnIHN0cm9rZT0iYmxhY2siIGZpbGw9ImJsYWNr
IiBzdHJva2Utd2lkdGg9IjE1Ij4KLSAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI1MCIgY3k9
IjUwIiByPSI0MCIgZmlsbD0idHJhbnNwYXJlbnQiLz4KLSAgICAgICAgICAgICAgICA8bGluZSB4
MT0iNTAiIHkxPSIyNSIgeDI9IjUwIiB5Mj0iNTUiLz4KLSAgICAgICAgICAgICAgICA8Y2lyY2xl
IGN4PSI1MCIgY3k9IjY3LjUiIHI9IjEwIiBzdHJva2U9Im5vbmUiLz4KLSAgICAgICAgICAgIDwv
Zz4KLSAgICAgICAgPC9zdmc+Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9InNlYXJjaC1idXR0b24iPgotICAg
ICAgICA8c3ZnIGNsYXNzPSJzZWFyY2gtYnV0dG9uIGljb24tYnV0dG9uIiB2aWV3Qm94PSIwIDAg
MTAwIDEwMCI+Ci0gICAgICAgICAgICA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjE1
Ij4KLSAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI2MCIgY3k9IjQwIiByPSIzMCIgZmlsbD0i
dHJhbnNwYXJlbnQiLz4KLSAgICAgICAgICAgICAgICA8bGluZSB4MT0iMTAiIHkxPSI5MCIgeDI9
IjQwIiB5Mj0iNjAiLz4KLSAgICAgICAgICAgIDwvZz4KLSAgICAgICAgPC9zdmc+Ci0gICAgPC9z
Y3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBs
YXRlLW5hbWU9InNwaW5uZXIiPgotICAgICAgICA8c3ZnIGNsYXNzPSJzcGlubmVyIiB2aWV3Qm94
PSIwIDAgMTAwIDEwMCI+Ci0gICAgICAgICAgICA8bGluZSB4MT0iMTAiIHkxPSI1MCIgeDI9IjMw
IiB5Mj0iNTAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lY2Fw
PSJyb3VuZCIvPgotICAgICAgICAgICAgPGxpbmUgeDE9IjIxLjcyIiB5MT0iMjEuNzIiIHgyPSIz
NS44NiIgeTI9IjM1Ljg2IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2Ut
bGluZWNhcD0icm91bmQiLz4KLSAgICAgICAgICAgIDxsaW5lIHgxPSI1MCIgeTE9IjEwIiB4Mj0i
NTAiIHkyPSIzMCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVj
YXA9InJvdW5kIi8+Ci0gICAgICAgICAgICA8bGluZSB4MT0iNzguMjgiIHkxPSIyMS43MiIgeDI9
IjY0LjE0IiB5Mj0iMzUuODYiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9r
ZS1saW5lY2FwPSJyb3VuZCIvPgotICAgICAgICAgICAgPGxpbmUgeDE9IjcwIiB5MT0iNTAiIHgy
PSI5MCIgeTI9IjUwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGlu
ZWNhcD0icm91bmQiLz4KLSAgICAgICAgICAgIDxsaW5lIHgxPSI2NS44NiIgeTE9IjY1Ljg2IiB4
Mj0iNzguMjgiIHkyPSI3OC4yOCIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ry
b2tlLWxpbmVjYXA9InJvdW5kIi8+Ci0gICAgICAgICAgICA8bGluZSB4MT0iNTAiIHkxPSI3MCIg
eDI9IjUwIiB5Mj0iOTAiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1s
aW5lY2FwPSJyb3VuZCIvPgotICAgICAgICAgICAgPGxpbmUgeDE9IjIxLjcyIiB5MT0iNzguMjgi
IHgyPSIzNS44NiIgeTI9IjY1Ljg2IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBz
dHJva2UtbGluZWNhcD0icm91bmQiLz4KLSAgICAgICAgPC9zdmc+Ci0gICAgPC9zY3JpcHQ+Ci0K
LSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9
Im5hdmJhciI+Ci0gICAgICAgIDxuYXYgaWQ9Im5hdmlnYXRpb24iIHJvbGU9Im5hdmlnYXRpb24i
PgotICAgICAgICAgICAgPGgxPjxhIGhyZWY9IiMiPnt7QXBwLk1hbmlmZXN0LnNpdGVUaXRsZX19
PC9hPjwvaDE+Ci0gICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgICAge3sjZWFjaCBBcHAu
TWFuaWZlc3QuZGFzaGJvYXJkc319Ci0gICAgICAgICAgICAgICAgICAgIHt7I2lmIG5hbWV9fQot
ICAgICAgICAgICAgICAgICAgICAgICAge3sjbGluay10byAnZGFzaGJvYXJkJyBuYW1lIHRhZ05h
bWU9J2xpJ319Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjbGluay10byAnZGFzaGJv
YXJkJyBuYW1lfX17e2xhYmVsfX17ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHt7L2xpbmstdG99fQotICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAg
ICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAge3sjbGluay10byAnY2hhcnRzJyB0YWdOYW1l
PSdsaSd9fQotICAgICAgICAgICAgICAgICAgICB7eyNsaW5rLXRvICdjaGFydHMnfX1DaGFydHN7
ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAg
ICB7eyNsaW5rLXRvICdhbmFseXNpcycgdGFnTmFtZT0nbGknfX0KLSAgICAgICAgICAgICAgICAg
ICAge3sjbGluay10byAnYW5hbHlzaXMnfX1BbmFseXNpc3t7L2xpbmstdG99fQotICAgICAgICAg
ICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAgPC91bD4KLSAgICAgICAgPC9uYXY+Ci0g
ICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRh
LXRlbXBsYXRlLW5hbWU9Im51bWJlci1vZi1kYXlzLWNvbnRyb2xzIj4KLSAgICAgICAgPGxpIGNs
YXNzPSJudW1iZXJPZkRheXNJczEiPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpm
YWxzZSIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiB7e2FjdGlvbiAic2V0TnVtYmVyT2ZEYXlzIiAx
fX0+MUQ8L2E+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaSBjbGFzcz0ibnVtYmVyT2ZEYXlz
SXM3Ij4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIGNsYXNzPSJjb250
cm9sLWJ1dHRvbiIge3thY3Rpb24gInNldE51bWJlck9mRGF5cyIgN319PjFXPC9hPgotICAgICAg
ICA8L2xpPgotICAgICAgICA8bGkgY2xhc3M9Im51bWJlck9mRGF5c0lzMzAiPgotICAgICAgICAg
ICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiB7e2Fj
dGlvbiAic2V0TnVtYmVyT2ZEYXlzIiAzMH19PjFNPC9hPgotICAgICAgICA8L2xpPgotICAgICAg
ICA8bGkgY2xhc3M9Im51bWJlck9mRGF5c0lzOTAiPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2
YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiB7e2FjdGlvbiAic2V0TnVtYmVy
T2ZEYXlzIiA5MH19PjNNPC9hPgotICAgICAgICA8L2xpPgotICAgICAgICA8bGkgY2xhc3M9Im51
bWJlck9mRGF5c0lzMTgzIj4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2Ui
IGNsYXNzPSJjb250cm9sLWJ1dHRvbiIge3thY3Rpb24gInNldE51bWJlck9mRGF5cyIgMTgzfX0+
Nk08L2E+Ci0gICAgICAgIDwvbGk+Ci0gICAgICAgIDxsaSBjbGFzcz0ibnVtYmVyT2ZEYXlzSXMz
NjUiPgotICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImNvbnRy
b2wtYnV0dG9uIiB7e2FjdGlvbiAic2V0TnVtYmVyT2ZEYXlzIiAzNjV9fT4xWTwvYT4KLSAgICAg
ICAgPC9saT4KLSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRs
ZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0ic3RhcnQtdGltZS1zbGlkZXIiPgotICAgICAgICA8
bGFiZWw+PGlucHV0IHR5cGU9InJhbmdlIj4gPHNwYW4gY2xhc3M9Im51bWJlck9mRGF5cyI+WDwv
c3Bhbj4gZGF5czwvbGFiZWw+Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQveC1oYW5kbGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9InBvcHVwIj4KLSAgICAgICAgPHNw
YW4gY2xhc3M9ImxhYmVsIj57e3ZpZXcgQXBwLlBvcHVwQnV0dG9uVmlldyB0YWdOYW1lPSJhIiBs
YWJlbD12aWV3LmxhYmVsIH19PC9zcGFuPgotICAgICAgICB7e3ZpZXcgdmlldy5wb3B1cExpc3RD
b250YWluZXJWaWV3IHZpZXdOYW1lPSJwb3B1cExpc3RDb250YWluZXJWaWV3SW5zdGFuY2UifX0K
LSAgICA8L3NjcmlwdD4KLQotICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRh
dGEtdGVtcGxhdGUtbmFtZT0icG9wdXAtbGlzdCI+Ci0gICAgICAgIHt7I2VhY2ggdmlldy5saXN0
fX0KLSAgICAgICAgICAgIHt7I2lmIGlzU2VwYXJhdG9yfX0KLSAgICAgICAgICAgICAgICA8bGk+
PGhyPjwvbGk+Ci0gICAgICAgICAgICB7e2Vsc2UgfX0ge3sjaWYgY2hpbGRyZW59fQotICAgICAg
ICAgICAgICAgIDxsaT57e3ZpZXcgQXBwLlBvcHVwVmlldyBsaXN0PWNoaWxkcmVuIGxhYmVsPWxh
YmVsfX08L2xpPgotICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICA8bGk+Ci0g
ICAgICAgICAgICAgICAgICAgIHt7I2lmIGFjdGlvbk5hbWV9fQotICAgICAgICAgICAgICAgICAg
ICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpmYWxzZSIgY2xhc3M9ImxhYmVsIiB7e2FjdGlvbiBh
Y3Rpb25OYW1lIGFjdGlvbkFyZ3VtZW50fX0+e3tsYWJlbH19PC9hPgotICAgICAgICAgICAgICAg
ICAgICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxhYmVsIj57
e2xhYmVsfX08L2E+Ci0gICAgICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgICAg
ICA8L2xpPgotICAgICAgICAgICAge3svaWZ9fSB7ey9pZn19Ci0gICAgICAgIHt7L2VhY2h9fQot
ICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0
YS10ZW1wbGF0ZS1uYW1lPSJhbmFseXNpcyI+Ci0gICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+
Ci0gICAgICAgICAgICB7e3BhcnRpYWwgIm5hdmJhciJ9fQotICAgICAgICA8L2hlYWRlcj4KLQot
ICAgICAgICA8dGFibGUgaWQ9ImFuYWx5c2lzLXRhc2tzIj4KLSAgICAgICAgICAgIDx0aGVhZD4K
LSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5OYW1lPC90ZD4K
LSAgICAgICAgICAgICAgICAgICAgPHRkPlN0YXR1czwvdGQ+Ci0gICAgICAgICAgICAgICAgICAg
IDx0ZD5BdXRob3I8L3RkPgotICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRlZCBhdDwvdGQ+
Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD5QbGF0Zm9ybTwvdGQ+Ci0gICAgICAgICAgICAgICAg
ICAgIDx0ZD5UZXN0PC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90
aGVhZD4KLSAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICB7eyNlYWNoIG1vZGVs
LnRhc2tzfX0KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAg
ICAgPHRkIGNsYXNzPSJ0YXNrLW5hbWUiPnt7I2xpbmstdG8gJ2FuYWx5c2lzVGFzaycgaWR9fXt7
bmFtZX19e3svbGluay10b319PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFz
cz0ic3RhdHVzIj57e3N0YXR1c0xhYmVsfX08L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAg
PHRkIGNsYXNzPSJhdXRob3IiPnt7YXV0aG9yfX08L3RkPgotICAgICAgICAgICAgICAgICAgICAg
ICAgPHRkIGNsYXNzPSJjcmVhdGVkLWF0Ij57e2Zvcm1hdHRlZENyZWF0ZWRBdH19PC90ZD4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGxhdGZvcm0tbmFtZSI+e3twbGF0Zm9y
bS5sYWJlbH19PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGVzdC1u
YW1lIj57e21ldHJpYy5mdWxsTmFtZX19PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4K
LSAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAg
IDwvdGFibGU+Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5k
bGViYXJzIiBkYXRhLXRlbXBsYXRlLW5hbWU9ImFuYWx5c2lzVGFzayI+Ci0gICAgICAgIDxoZWFk
ZXIgaWQ9ImhlYWRlciI+Ci0gICAgICAgICAgICB7e3BhcnRpYWwgIm5hdmJhciJ9fQotICAgICAg
ICA8L2hlYWRlcj4KLQotICAgICAgICA8aDIgaWQ9ImFuYWx5c2lzLXRhc2stdGl0bGUiPnt7bGFi
ZWx9fTwvaDI+Ci0gICAgICAgIHt7I2lmIHBsYXRmb3JtLmxhYmVsfX0KLSAgICAgICAgICAgIDxo
MyBpZD0iYW5hbHlzaXMtdGFzay10ZXN0bmFtZSI+e3ttZXRyaWMuZnVsbE5hbWV9fSAtIHt7cGxh
dGZvcm0ubGFiZWx9fTwvaDM+Ci0gICAgICAgIHt7L2lmfX0KLQotICAgICAgICB7eyNpZiBwYW5l
fX0KLSAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJhbmFseXNpcy1jaGFydC1wYW5lIGNoYXJ0
LXBhbmUiIHRhYmluZGV4PSIwIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdmctY29u
dGFpbmVyIj4KLSAgICAgICAgICAgICAgICAgICAge3tpbnRlcmFjdGl2ZS1jaGFydAotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhcnREYXRhPXBhbmUuY2hhcnREYXRhCi0gICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZXM9cGFuZS5yYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
bWFpbj1vdmVydmlld0RvbWFpbgotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmU9
dHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEl0ZW09cGFuZS5ob3ZlcmVkT3JT
ZWxlY3RlZEl0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUG9pbnRzPXBhbmUu
c2VsZWN0ZWRQb2ludHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj10aW1lUmFu
Z2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbXM9aGlnaGxpZ2h0ZWRJ
dGVtcwotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VSb3V0ZT0iYW5hbHlzaXNUYXNrIn19
Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0
YWlscyI+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMtdGFibGUtY29u
dGFpbmVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7I2lmIGRldGFpbHN9fQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHt7cGFydGlhbCAiY2hhcnQtZGV0YWlscyJ9fQotICAgICAg
ICAgICAgICAgICAgICAgICAge3tlbHNlfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
e3BhcnRpYWwgImFuYWx5c2lzU3RhdHVzRm9ybSJ9fQotICAgICAgICAgICAgICAgICAgICAgICAg
e3svaWZ9fQotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rp
dj4KLSAgICAgICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAge3svaWZ9fQotCi0gICAgICAgIHt7
cGFydGlhbCAidGVzdEdyb3VwRm9ybSJ9fQotCi0gICAgICAgIHt7I2VhY2ggdGVzdEdyb3VwUGFu
ZXN9fQotICAgICAgICAgICAge3twYXJ0aWFsICJ0ZXN0R3JvdXAifX0KLSAgICAgICAge3svZWFj
aH19Ci0gICAgPC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJz
IiBkYXRhLXRlbXBsYXRlLW5hbWU9InRlc3RHcm91cCI+Ci0gICAgICAgIDxzZWN0aW9uIGNsYXNz
PSJhbmFseXNpcy1ncm91cCI+Ci0gICAgICAgICAgICA8aDE+e3tuYW1lfX08L2gxPgotICAgICAg
ICAgICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj4KLSAgICAgICAgICAgICAgICA8dGFi
bGUgY2xhc3M9InJlc3VsdHMiPgotICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+Ci0gICAgICAg
ICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNv
bHNwYW49IjIiPkNvbmZpZ3VyYXRpb248L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDx0ZD5SZXN1bHRzPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+U3RhdHVz
PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNlYWNoIHJlcG9zaXRvcmllc319
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e25hbWV9fTwvdGQ+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgICAgICAg
ICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgotICAgICAgICAgICAgICAgICAg
ICB7eyNlYWNoIGNvbmZpZ3VyYXRpb25zfX0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9k
eSB7e2JpbmQtYXR0ciBjbGFzcz0ic2hvd1JlcXVlc3RMaXN0OjpoaWRlUmVxdWVzdHMifX0+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzdW1tYXJ5IiB7e2FjdGlvbiB0
b2dnbGVTaG93UmVxdWVzdExpc3QgdGhpc319PgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dGQgY2xhc3M9ImNvbmZpZy1sZXR0ZXIiIGNvbHNwYW49IjIiPnt7c3VtbWFyeS5jb25m
aWdMZXR0ZXJ9fTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7I3dpdGgg
c3VtbWFyeX19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BhcnRpYWwg
InRlc3RHcm91cFJvdyJ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ey93aXRo
fX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHt7I2VhY2ggcmVxdWVzdHN9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dHIgY2xhc3M9InJlcXVlc3QiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge3sjd2l0aCAuLi90aGlzfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8dGQgY2xhc3M9ImNvbmZpZy1sZXR0ZXIiIHt7YWN0aW9uIHRvZ2dsZVNob3dSZXF1
ZXN0TGlzdCB0aGlzfX0+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHt7L3dpdGh9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlJ1biB7
e29yZGVyTGFiZWx9fTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
e3BhcnRpYWwgInRlc3RHcm91cFJvdyJ9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAg
ICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0g
ICAgICAgICAgICAgICAgICAgIHt7I2VhY2ggY29tcGFyaXNvbnN9fQotICAgICAgICAgICAgICAg
ICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPnt7bGFiZWx9fTwvdGQ+
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2RpZmZlcmVuY2V9fTwvdGQ+
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Jlc3VsdH19PC90ZD4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjd2l0aCAuLi90aGlzfX0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7I2VhY2ggcmVwb3NpdG9yaWVzfX0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ey93aXRofX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgot
ICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICAgICAge3sv
ZWFjaH19Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDwvZGl2PgotICAg
ICAgICAgICAgPGRpdiBjbGFzcz0icmVmZXJlbmNlLWNoYXJ0Ij4KLSAgICAgICAgICAgICAgICB7
eyNpZiByZWZlcmVuY2VDaGFydH19Ci0gICAgICAgICAgICAgICAgICAgIHt7aW50ZXJhY3RpdmUt
Y2hhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RGF0YT1yZWZlcmVuY2VDaGFydC5k
YXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21haW49b3ZlcnZpZXdEb21haW4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3dZQXhpcz1mYWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlU2VsZWN0aW9uPWZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGln
aHRlZEl0ZW1zPXJlZmVyZW5jZUNoYXJ0LmhpZ2hsaWdodGVkSXRlbXN9fQotICAgICAgICAgICAg
ICAgIHt7L2lmfX0KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAg
PC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0IHR5cGU9InRleHQveC1oYW5kbGViYXJzIiBkYXRhLXRl
bXBsYXRlLW5hbWU9InRlc3RHcm91cFJvdyI+Ci0gICAgICAgIDx0ZD4KLSAgICAgICAgICAgIHt7
I2lmIHZhbHVlfX0KLSAgICAgICAgICAgICAgICB7e2JveC1wbG90IHJhbmdlPXZhbHVlUmFuZ2Ug
dmFsdWU9dmFsdWUgZGVsdGE9ZGVsdGF9fQotICAgICAgICAgICAge3svaWZ9fQotICAgICAgICAg
ICAge3tmb3JtYXR0ZWRWYWx1ZX19Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZD4KLSAgICAg
ICAgICAgIDxhIHt7YmluZC1hdHRyIGhyZWY9dXJsIHRpdGxlPWJ1aWxkTGFiZWx9fT57e3N0YXR1
c0xhYmVsfX08L2E+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIHt7I2VhY2ggcmV2aXNpb25MaXN0
fX0KLSAgICAgICAgICAgIDx0ZD57e3RoaXN9fTwvdGQ+Ci0gICAgICAgIHt7L2VhY2h9fQotICAg
IDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10
ZW1wbGF0ZS1uYW1lPSJ0ZXN0R3JvdXBGb3JtIj4KLSAgICB7eyNpZiByb290Q29uZmlndXJhdGlv
bnN9fQotICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIHt7YWN0aW9uICJjcmVhdGVUZXN0R3Jv
dXAiIG5ld1Rlc3RHcm91cE5hbWUgcmVwZXRpdGlvbkNvdW50IG9uPSJzdWJtaXQifX0+Ci0gICAg
ICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYW5hbHlzaXMtZ3JvdXAiPgotICAgICAgICAgICAgICAg
IDxoMT57e2lucHV0IG5hbWU9Im5hbWUiIHZhbHVlPW5ld1Rlc3RHcm91cE5hbWUgcGxhY2Vob2xk
ZXI9IlRlc3QgZ3JvdXAgbmFtZSIgcmVxdWlyZWQ9dHJ1ZSB0eXBlPSJ0ZXh0In19PC9oMT4KLSAg
ICAgICAgICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+
Q29uZmlndXJhdGlvbjwvdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjZWFjaCBj
b25maWd1cmF0aW9uc319Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57e3Ro
aXN9fTwvdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAg
ICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgotICAg
ICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICB7eyNlYWNo
IHJvb3RDb25maWd1cmF0aW9uc319Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3tuYW1lfX08L3RoPgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7eyNlYWNoIHNldHN9fQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QgbmFtZT1uYW1lIGNvbnRlbnQ9b3B0aW9ucwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZVBh
dGg9ImNvbnRlbnQudmFsdWUiIG9wdGlvbkxhYmVsUGF0aD0iY29udGVudC5sYWJlbCIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPXNlbGVjdGlv
bn19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgc2VsZWN0
aW9uLmlzQ3VzdG9tfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge3tpbnB1dCBuYW1lPSJjdXN0b21WYWx1ZSIgdHlwZT10ZXh0IHZhbHVlPWN1c3RvbVZhbHVl
fX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ey9pZn19Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAgICAgICAgICAg
ICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAg
PGxhYmVsPk51bWJlciBvZiBydW5zIHt7dmlldyBFbWJlci5TZWxlY3QgY29udGVudD1wb3NzaWJs
ZVJlcGV0aXRpb25Db3VudHMgdmFsdWU9cmVwZXRpdGlvbkNvdW50fX08L2xhYmVsPgotICAgICAg
ICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5TdGFydCBBL0IgdGVzdGluZzwvYnV0dG9u
PgotICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8L2Zvcm0+Ci0gICAge3svaWZ9fQot
ICAgIDwvc2NyaXB0PgotCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0
YS10ZW1wbGF0ZS1uYW1lPSJhbmFseXNpc1N0YXR1c0Zvcm0iPgotICAgICAgICA8dGFibGUgY2xh
c3M9ImFuYWx5c2lzLWJ1Z3MiPgotICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAg
IHt7I2VhY2ggbW9kZWwuYnVnc319Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDx0aD57e2J1Z1RyYWNrZXIubmFtZX19PC90aD4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB7e2JpbmQt
YXR0ciBocmVmPXVybH19IHRhcmdldD0iX2JsYW5rIj57e251bWJlcn19PC9hPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFsc2UiIHt7YWN0aW9uICJk
ZWxldGVCdWciIHRoaXN9fT57e3BhcnRpYWwgImNsb3NlLWJ1dHRvbiJ9fTwvYT4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAg
ICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgICAge3sjaWYgYnVnVHJhY2tlcnN9fQot
ICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdCBjb250ZW50PWJ1
Z1RyYWNrZXJzIG9wdGlvblZhbHVlUGF0aD0iY29udGVudCIgb3B0aW9uTGFiZWxQYXRoPSJjb250
ZW50Lm5hbWUiIHZhbHVlPWNob3NlbkJ1Z1RyYWNrZXJ9fQotICAgICAgICAgICAgICAgICAgICAg
ICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7e2lucHV0IGlkPWVsZW1lbnRJZCB0eXBlPXRleHQgdmFsdWU9ZWRpdGVkQnVn
TnVtYmVyfX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHt7YWN0aW9uICJh
ZGRCdWciIGNob3NlbkJ1Z1RyYWNrZXIgZWRpdGVkQnVnTnVtYmVyfX0+QWRkPC9idXR0b24+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgot
ICAgICAgICAgICAgICAgIHt7L2lmfX0KLSAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAg
ICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGg+
PGxhYmVsIGZvcj0iYW5hbHlzaXMtc3RhdHVzIj5TdGF0dXM8bGFiZWw+PC90aD4KLSAgICAgICAg
ICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9ImFu
YWx5c2lzLWJ1Z3MiIHt7YWN0aW9uICJzYXZlU3RhdHVzIiBvbj0ic3VibWl0In19PgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHt7dmlldyBFbWJlci5TZWxlY3QgaWQ9ImFuYWx5c2lzLXN0
YXR1cyIgY29udGVudD1hbmFseXNpc1Jlc3VsdE9wdGlvbnMgb3B0aW9uVmFsdWVQYXRoPSJjb250
ZW50IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbFBhdGg9ImNv
bnRlbnQubGFiZWwiIHNlbGVjdGlvbj1jaG9zZW5BbmFseXNpc1Jlc3VsdH19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPjxicj4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwge3tiaW5kLWF0dHIgY2xhc3M9Im5l
ZWRzRmVlZGJhY2s6OmhpZGRlbiJ9fT57e2lucHV0IHR5cGU9Y2hlY2tib3ggY2hlY2tlZD1ub3RO
ZWVkZWR9fSBUaGlzIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQ8L2xhYmVsPgotICAgICAg
ICAgICAgICAgICAgICAgICAgPC9mb3JtPgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAg
ICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICA8L3RhYmxl
PgotICAgIDwvc2NyaXB0PgotCiA8L2hlYWQ+CiA8Ym9keT4KK1JlZGlyZWN0aW5nIHRvIHYzIFVJ
Li4uCiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YyL2ludGVyYWN0aXZlLWNoYXJ0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92Mi9pbnRlcmFjdGl2ZS1jaGFydC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTQzZGIzMTcyNjgyZDhhNGVlMDQ4OTI5ZGNhOTE0NjI5Nzg2NzUzNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YyL2ludGVyYWN0aXZlLWNoYXJ0LmpzCisrKyAvZGV2L251bGwKQEAg
LTEsNzcyICswLDAgQEAKLUFwcC5JbnRlcmFjdGl2ZUNoYXJ0Q29tcG9uZW50ID0gRW1iZXIuQ29t
cG9uZW50LmV4dGVuZCh7Ci0gICAgY2hhcnREYXRhOiBudWxsLAotICAgIHNob3dYQXhpczogdHJ1
ZSwKLSAgICBzaG93WUF4aXM6IHRydWUsCi0gICAgaW50ZXJhY3RpdmU6IGZhbHNlLAotICAgIGVu
YWJsZVNlbGVjdGlvbjogdHJ1ZSwKLSAgICBjbGFzc05hbWVzOiBbJ2NoYXJ0J10sCi0gICAgaW5p
dDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgIHRo
aXMuX25lZWRzQ29uc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVy
cyA9IFtdOwotICAgICAgICAkKHdpbmRvdykucmVzaXplKHRoaXMuX3VwZGF0ZURpbWVuc2lvbnNJ
Zk5lZWRlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotICAgIGNoYXJ0RGF0YURpZENoYW5nZTogZnVu
Y3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlzLmdldCgnY2hhcnRE
YXRhJyk7Ci0gICAgICAgIGlmICghY2hhcnREYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLl9uZWVkc0NvbnN0cnVjdGlvbiA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3RvdGFs
V2lkdGggPSB1bmRlZmluZWQ7Ci0gICAgICAgIHRoaXMuX3RvdGFsSGVpZ2h0ID0gdW5kZWZpbmVk
OwotICAgICAgICB0aGlzLl9jb25zdHJ1Y3RHcmFwaElmUG9zc2libGUoY2hhcnREYXRhKTsKLSAg
ICB9Lm9ic2VydmVzKCdjaGFydERhdGEnKS5vbignaW5pdCcpLAotICAgIGRpZEluc2VydEVsZW1l
bnQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQo
J2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoY2hhcnREYXRhKQotICAgICAgICAgICAgdGhpcy5f
Y29uc3RydWN0R3JhcGhJZlBvc3NpYmxlKGNoYXJ0RGF0YSk7Ci0KLSAgICAgICAgaWYgKHRoaXMu
Z2V0KCdpbnRlcmFjdGl2ZScpKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0
KCdlbGVtZW50Jyk7Ci0gICAgICAgICAgICB0aGlzLl9hdHRhY2hFdmVudExpc3RlbmVyKGVsZW1l
bnQsICJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmVkLmJpbmQodGhpcykpOwotICAgICAgICAg
ICAgdGhpcy5fYXR0YWNoRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAibW91c2VsZWF2ZSIsIHRoaXMu
X21vdXNlTGVmdC5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50TGlz
dGVuZXIoZWxlbWVudCwgIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpKTsK
LSAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50TGlzdGVuZXIoJChlbGVtZW50KS5wYXJlbnRz
KCJbdGFiaW5kZXhdIiksICJrZXlkb3duIiwgdGhpcy5fa2V5UHJlc3NlZC5iaW5kKHRoaXMpKTsK
LSAgICAgICAgfQotICAgIH0sCi0gICAgd2lsbENsZWFyUmVuZGVyOiBmdW5jdGlvbiAoKQotICAg
IHsKLSAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7
Ci0gICAgICAgICAgICAkKGl0ZW1bMF0pLm9mZihpdGVtWzFdLCBpdGVtWzJdKTsKLSAgICAgICAg
fSkKLSAgICB9LAotICAgIF9hdHRhY2hFdmVudExpc3RlbmVyOiBmdW5jdGlvbih0YXJnZXQsIGV2
ZW50TmFtZSwgbGlzdGVuZXIpCi0gICAgewotICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzLnB1
c2goW3RhcmdldCwgZXZlbnROYW1lLCBsaXN0ZW5lcl0pOwotICAgICAgICAkKHRhcmdldCkub24o
ZXZlbnROYW1lLCBsaXN0ZW5lcik7Ci0gICAgfSwKLSAgICBfY29uc3RydWN0R3JhcGhJZlBvc3Np
YmxlOiBmdW5jdGlvbiAoY2hhcnREYXRhKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9uZWVk
c0NvbnN0cnVjdGlvbiB8fCAhdGhpcy5nZXQoJ2VsZW1lbnQnKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0KCdlbGVtZW50Jyk7Ci0KLSAgICAg
ICAgdGhpcy5feCA9IGQzLnRpbWUuc2NhbGUoKTsKLSAgICAgICAgdGhpcy5feSA9IGQzLnNjYWxl
LmxpbmVhcigpOwotCi0gICAgICAgIGlmICh0aGlzLl9zdmdFbGVtZW50KQotICAgICAgICAgICAg
dGhpcy5fc3ZnRWxlbWVudC5yZW1vdmUoKTsKLSAgICAgICAgdGhpcy5fc3ZnRWxlbWVudCA9IGQz
LnNlbGVjdChlbGVtZW50KS5hcHBlbmQoInN2ZyIpCi0gICAgICAgICAgICAgICAgLmF0dHIoIndp
ZHRoIiwgIjEwMCUiKQotICAgICAgICAgICAgICAgIC5hdHRyKCJoZWlnaHQiLCAiMTAwJSIpOwot
Ci0gICAgICAgIHZhciBzdmcgPSB0aGlzLl9zdmcgPSB0aGlzLl9zdmdFbGVtZW50LmFwcGVuZCgi
ZyIpOwotCi0gICAgICAgIHZhciBjbGlwSWQgPSBlbGVtZW50LmlkICsgIi1jbGlwIjsKLSAgICAg
ICAgdGhpcy5fY2xpcFBhdGggPSBzdmcuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJjbGlwUGF0aCIp
Ci0gICAgICAgICAgICAuYXR0cigiaWQiLCBjbGlwSWQpCi0gICAgICAgICAgICAuYXBwZW5kKCJy
ZWN0Iik7Ci0KLSAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG93WEF4aXMnKSkgewotICAgICAgICAg
ICAgdGhpcy5feEF4aXMgPSBkMy5zdmcuYXhpcygpLnNjYWxlKHRoaXMuX3gpLm9yaWVudCgiYm90
dG9tIikudGlja3MoNik7Ci0gICAgICAgICAgICB0aGlzLl94QXhpc0xhYmVscyA9IHN2Zy5hcHBl
bmQoImciKQotICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IGF4aXMiKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBpc0ludGVyYWN0aXZlID0gdGhpcy5nZXQoJ2ludGVyYWN0aXZl
Jyk7Ci0gICAgICAgIGlmICh0aGlzLmdldCgnc2hvd1lBeGlzJykpIHsKLSAgICAgICAgICAgIHRo
aXMuX3lBeGlzID0gZDMuc3ZnLmF4aXMoKS5zY2FsZSh0aGlzLl95KS5vcmllbnQoImxlZnQiKS50
aWNrcyg2KS50aWNrRm9ybWF0KGNoYXJ0RGF0YS5mb3JtYXR0ZXIpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB0aGlzLl95QXhpc0xhYmVscyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFz
cycsICd5IGF4aXMnICsgKGlzSW50ZXJhY3RpdmUgPyAnIGludGVyYWN0aXZlJyA6ICcnKSk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSkgewotICAgICAgICAgICAgICAgIHZhciBzZWxm
ID0gdGhpczsKLSAgICAgICAgICAgICAgICB0aGlzLl95QXhpc0xhYmVscy5vbignY2xpY2snLCBm
dW5jdGlvbiAoKSB7IHNlbGYudG9nZ2xlUHJvcGVydHkoJ3Nob3dGdWxsWUF4aXMnKTsgfSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9jbGlwcGVkQ29udGFpbmVy
ID0gc3ZnLmFwcGVuZCgiZyIpCi0gICAgICAgICAgICAuYXR0cigiY2xpcC1wYXRoIiwgInVybCgj
IiArIGNsaXBJZCArICIpIik7Ci0KLSAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7Ci0gICAg
ICAgIHZhciB5U2NhbGUgPSB0aGlzLl95OwotICAgICAgICB0aGlzLl90aW1lTGluZSA9IGQzLnN2
Zy5saW5lKCkKLSAgICAgICAgICAgIC54KGZ1bmN0aW9uKHBvaW50KSB7IHJldHVybiB4U2NhbGUo
cG9pbnQudGltZSk7IH0pCi0gICAgICAgICAgICAueShmdW5jdGlvbihwb2ludCkgeyByZXR1cm4g
eVNjYWxlKHBvaW50LnZhbHVlKTsgfSk7Ci0KLSAgICAgICAgdGhpcy5fY29uZmlkZW5jZUFyZWEg
PSBkMy5zdmcuYXJlYSgpCi0vLyAgICAgICAgICAgIC5pbnRlcnBvbGF0ZSgiY2FyZGluYWwiKQot
ICAgICAgICAgICAgLngoZnVuY3Rpb24ocG9pbnQpIHsgcmV0dXJuIHhTY2FsZShwb2ludC50aW1l
KTsgfSkKLSAgICAgICAgICAgIC55MChmdW5jdGlvbihwb2ludCkgeyByZXR1cm4gcG9pbnQuaW50
ZXJ2YWwgPyB5U2NhbGUocG9pbnQuaW50ZXJ2YWxbMF0pIDogbnVsbDsgfSkKLSAgICAgICAgICAg
IC55MShmdW5jdGlvbihwb2ludCkgeyByZXR1cm4gcG9pbnQuaW50ZXJ2YWwgPyB5U2NhbGUocG9p
bnQuaW50ZXJ2YWxbMV0pIDogbnVsbDsgfSk7Ci0KLSAgICAgICAgdGhpcy5fcGF0aHMgPSBbXTsK
LSAgICAgICAgdGhpcy5fYXJlYXMgPSBbXTsKLSAgICAgICAgdGhpcy5fZG90cyA9IFtdOwotICAg
ICAgICB0aGlzLl9oaWdobGlnaHRzID0gbnVsbDsKLQotICAgICAgICB0aGlzLl9jdXJyZW50VGlt
ZVNlcmllcyA9IGNoYXJ0RGF0YS5jdXJyZW50OwotICAgICAgICB0aGlzLl9jdXJyZW50VGltZVNl
cmllc0RhdGEgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllcy5zZXJpZXMoKTsKLSAgICAgICAgdGhp
cy5fYmFzZWxpbmVUaW1lU2VyaWVzID0gY2hhcnREYXRhLmJhc2VsaW5lOwotICAgICAgICB0aGlz
Ll90YXJnZXRUaW1lU2VyaWVzID0gY2hhcnREYXRhLnRhcmdldDsKLSAgICAgICAgdGhpcy5fbW92
aW5nQXZlcmFnZVRpbWVTZXJpZXMgPSBjaGFydERhdGEubW92aW5nQXZlcmFnZTsKLQotICAgICAg
ICBpZiAodGhpcy5fYmFzZWxpbmVUaW1lU2VyaWVzKSB7Ci0gICAgICAgICAgICB0aGlzLl9wYXRo
cy5wdXNoKHRoaXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCJw
YXRoIikKLSAgICAgICAgICAgICAgICAuZGF0dW0odGhpcy5fYmFzZWxpbmVUaW1lU2VyaWVzLnNl
cmllcygpKQotICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJiYXNlbGluZSIpKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAodGhpcy5fdGFyZ2V0VGltZVNlcmllcykgewotICAgICAgICAg
ICAgdGhpcy5fcGF0aHMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAgICAgICAg
ICAgLmFwcGVuZCgicGF0aCIpCi0gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMuX3RhcmdldFRp
bWVTZXJpZXMuc2VyaWVzKCkpCi0gICAgICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgInRhcmdl
dCIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBtb3ZpbmdBdmVyYWdlSXNWaXNpYmxlID0g
dGhpcy5fbW92aW5nQXZlcmFnZVRpbWVTZXJpZXM7Ci0gICAgICAgIHZhciBmb3JlZ3JvdW5kQ2xh
c3MgPSBtb3ZpbmdBdmVyYWdlSXNWaXNpYmxlID8gJycgOiAnIGZvcmVncm91bmQnOwotICAgICAg
ICB0aGlzLl9hcmVhcy5wdXNoKHRoaXMuX2NsaXBwZWRDb250YWluZXIKLSAgICAgICAgICAgIC5h
cHBlbmQoInBhdGgiKQotICAgICAgICAgICAgLmRhdHVtKHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVz
RGF0YSkKLSAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJhcmVhIiArIGZvcmVncm91bmRDbGFz
cykpOwotCi0gICAgICAgIHRoaXMuX3BhdGhzLnB1c2godGhpcy5fY2xpcHBlZENvbnRhaW5lcgot
ICAgICAgICAgICAgLmFwcGVuZCgicGF0aCIpCi0gICAgICAgICAgICAuZGF0dW0odGhpcy5fY3Vy
cmVudFRpbWVTZXJpZXNEYXRhKQotICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImN1cnJlbnQi
ICsgZm9yZWdyb3VuZENsYXNzKSk7Ci0KLSAgICAgICAgdGhpcy5fZG90cy5wdXNoKHRoaXMuX2Ns
aXBwZWRDb250YWluZXIKLSAgICAgICAgICAgIC5zZWxlY3RBbGwoIi5kb3QiKQotICAgICAgICAg
ICAgICAgIC5kYXRhKHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzRGF0YSkKLSAgICAgICAgICAgIC5l
bnRlcigpLmFwcGVuZCgiY2lyY2xlIikKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAi
ZG90IiArIGZvcmVncm91bmRDbGFzcykpOwotCi0gICAgICAgIGlmIChtb3ZpbmdBdmVyYWdlSXNW
aXNpYmxlKSB7Ci0gICAgICAgICAgICB0aGlzLl9wYXRocy5wdXNoKHRoaXMuX2NsaXBwZWRDb250
YWluZXIKLSAgICAgICAgICAgICAgICAuYXBwZW5kKCJwYXRoIikKLSAgICAgICAgICAgICAgICAu
ZGF0dW0odGhpcy5fbW92aW5nQXZlcmFnZVRpbWVTZXJpZXMuc2VyaWVzKCkpCi0gICAgICAgICAg
ICAgICAgLmF0dHIoImNsYXNzIiwgIm1vdmluZ0F2ZXJhZ2UiKSk7Ci0KLSAgICAgICAgICAgIHRo
aXMuX2FyZWFzLnB1c2godGhpcy5fY2xpcHBlZENvbnRhaW5lcgotICAgICAgICAgICAgICAgIC5h
cHBlbmQoInBhdGgiKQotICAgICAgICAgICAgICAgIC5kYXR1bSh0aGlzLl9tb3ZpbmdBdmVyYWdl
VGltZVNlcmllcy5zZXJpZXMoKSkKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAiZW52
ZWxvcGUiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSkgewotICAg
ICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1MaW5lID0gdGhpcy5fY2xpcHBlZENvbnRhaW5lcgot
ICAgICAgICAgICAgICAgIC5hcHBlbmQoImxpbmUiKQotICAgICAgICAgICAgICAgIC5hdHRyKCJj
bGFzcyIsICJjdXJyZW50LWl0ZW0iKTsKLQotICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1D
aXJjbGUgPSB0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgi
Y2lyY2xlIikKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAiZG90IGN1cnJlbnQtaXRl
bSIpCi0gICAgICAgICAgICAgICAgLmF0dHIoInIiLCAzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMuX2JydXNoID0gbnVsbDsKLSAgICAgICAgaWYgKHRoaXMuZ2V0KCdlbmFibGVTZWxlY3Rp
b24nKSkgewotICAgICAgICAgICAgdGhpcy5fYnJ1c2ggPSBkMy5zdmcuYnJ1c2goKQotICAgICAg
ICAgICAgICAgIC54KHRoaXMuX3gpCi0gICAgICAgICAgICAgICAgLm9uKCJicnVzaCIsIHRoaXMu
X2JydXNoQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICAgICAgdGhpcy5fYnJ1c2hSZWN0
ID0gdGhpcy5fY2xpcHBlZENvbnRhaW5lcgotICAgICAgICAgICAgICAgIC5hcHBlbmQoImciKQot
ICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IGJydXNoIik7Ci0gICAgICAgIH0KLQot
ICAgICAgICB0aGlzLl91cGRhdGVEb21haW4oKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlRGltZW5z
aW9uc0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhlIGJy
dXNoIGlzbid0IHNldCBpZiB3ZSB1cGRhdGVkIGl0IHN5bmNocm9ub3VzbHkgaGVyZS4KLSAgICAg
ICAgc2V0VGltZW91dCh0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLmJpbmQodGhpcyksIDApOwotCi0g
ICAgICAgIHNldFRpbWVvdXQodGhpcy5fc2VsZWN0ZWRJdGVtQ2hhbmdlZC5iaW5kKHRoaXMpLCAw
KTsKLQotICAgICAgICB0aGlzLl9uZWVkc0NvbnN0cnVjdGlvbiA9IGZhbHNlOwotCi0gICAgICAg
IHRoaXMuX2hpZ2hsaWdodGVkSXRlbXNDaGFuZ2VkKCk7Ci0gICAgICAgIHRoaXMuX3Jhbmdlc0No
YW5nZWQoKTsKLSAgICB9LAotICAgIF91cGRhdGVEb21haW46IGZ1bmN0aW9uICgpCi0gICAgewot
ICAgICAgICB2YXIgeERvbWFpbiA9IHRoaXMuZ2V0KCdkb21haW4nKTsKLSAgICAgICAgaWYgKCF4
RG9tYWluIHx8ICF0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgdmFyIGludHJpbnNpY1hEb21haW4gPSB0aGlzLl9jb21wdXRlWEF4
aXNEb21haW4odGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhKTsKLSAgICAgICAgaWYgKCF4RG9t
YWluKQotICAgICAgICAgICAgeERvbWFpbiA9IGludHJpbnNpY1hEb21haW47Ci0gICAgICAgIHZh
ciB5RG9tYWluID0gdGhpcy5fY29tcHV0ZVlBeGlzRG9tYWluKHhEb21haW5bMF0sIHhEb21haW5b
MV0pOwotCi0gICAgICAgIHZhciBjdXJyZW50WERvbWFpbiA9IHRoaXMuX3guZG9tYWluKCk7Ci0g
ICAgICAgIHZhciBjdXJyZW50WURvbWFpbiA9IHRoaXMuX3kuZG9tYWluKCk7Ci0gICAgICAgIGlm
IChjdXJyZW50WERvbWFpbiAmJiBBcHAuZG9tYWluc0FyZUVxdWFsKGN1cnJlbnRYRG9tYWluLCB4
RG9tYWluKQotICAgICAgICAgICAgJiYgY3VycmVudFlEb21haW4gJiYgQXBwLmRvbWFpbnNBcmVF
cXVhbChjdXJyZW50WURvbWFpbiwgeURvbWFpbikpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVu
dFhEb21haW47Ci0KLSAgICAgICAgdGhpcy5feC5kb21haW4oeERvbWFpbik7Ci0gICAgICAgIHRo
aXMuX3kuZG9tYWluKHlEb21haW4pOwotICAgICAgICByZXR1cm4geERvbWFpbjsKLSAgICB9LAot
ICAgIF91cGRhdGVEaW1lbnNpb25zSWZOZWVkZWQ6IGZ1bmN0aW9uIChuZXdTZWxlY3Rpb24pCi0g
ICAgewotICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcy5nZXQoJ2VsZW1lbnQnKSk7Ci0KLSAg
ICAgICAgdmFyIG5ld1RvdGFsV2lkdGggPSBlbGVtZW50LndpZHRoKCk7Ci0gICAgICAgIHZhciBu
ZXdUb3RhbEhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0KCk7Ci0gICAgICAgIGlmICh0aGlzLl90b3Rh
bFdpZHRoID09IG5ld1RvdGFsV2lkdGggJiYgdGhpcy5fdG90YWxIZWlnaHQgPT0gbmV3VG90YWxI
ZWlnaHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdG90YWxXaWR0aCA9
IG5ld1RvdGFsV2lkdGg7Ci0gICAgICAgIHRoaXMuX3RvdGFsSGVpZ2h0ID0gbmV3VG90YWxIZWln
aHQ7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9yZW0pCi0gICAgICAgICAgICB0aGlzLl9yZW0gPSBw
YXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5mb250
U2l6ZSk7Ci0gICAgICAgIHZhciByZW0gPSB0aGlzLl9yZW07Ci0KLSAgICAgICAgdmFyIHBhZGRp
bmcgPSAwLjUgKiByZW07Ci0gICAgICAgIHZhciBtYXJnaW4gPSB7dG9wOiBwYWRkaW5nLCByaWdo
dDogcGFkZGluZywgYm90dG9tOiBwYWRkaW5nLCBsZWZ0OiBwYWRkaW5nfTsKLSAgICAgICAgaWYg
KHRoaXMuX3hBeGlzKQotICAgICAgICAgICAgbWFyZ2luLmJvdHRvbSArPSByZW07Ci0gICAgICAg
IGlmICh0aGlzLl95QXhpcykKLSAgICAgICAgICAgIG1hcmdpbi5sZWZ0ICs9IDMgKiByZW07Ci0K
LSAgICAgICAgdGhpcy5fbWFyZ2luID0gbWFyZ2luOwotICAgICAgICB0aGlzLl9jb250ZW50V2lk
dGggPSBNYXRoLm1heCgwLCB0aGlzLl90b3RhbFdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4u
cmlnaHQpOwotICAgICAgICB0aGlzLl9jb250ZW50SGVpZ2h0ID0gTWF0aC5tYXgoMCwgdGhpcy5f
dG90YWxIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSk7Ci0KLSAgICAgICAgdGhp
cy5fc3ZnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIG1hcmdpbi5sZWZ0ICsgIiwi
ICsgbWFyZ2luLnRvcCArICIpIik7Ci0KLSAgICAgICAgdGhpcy5fY2xpcFBhdGgKLSAgICAgICAg
ICAgIC5hdHRyKCJ3aWR0aCIsIHRoaXMuX2NvbnRlbnRXaWR0aCkKLSAgICAgICAgICAgIC5hdHRy
KCJoZWlnaHQiLCB0aGlzLl9jb250ZW50SGVpZ2h0KTsKLQotICAgICAgICB0aGlzLl94LnJhbmdl
KFswLCB0aGlzLl9jb250ZW50V2lkdGhdKTsKLSAgICAgICAgdGhpcy5feS5yYW5nZShbdGhpcy5f
Y29udGVudEhlaWdodCwgMF0pOwotCi0gICAgICAgIGlmICh0aGlzLl94QXhpcykgewotICAgICAg
ICAgICAgdGhpcy5feEF4aXMudGlja3MoTWF0aC5yb3VuZCh0aGlzLl9jb250ZW50V2lkdGggLyA0
IC8gcmVtKSk7Ci0gICAgICAgICAgICB0aGlzLl94QXhpcy50aWNrU2l6ZSgtdGhpcy5fY29udGVu
dEhlaWdodCk7Ci0gICAgICAgICAgICB0aGlzLl94QXhpc0xhYmVscy5hdHRyKCJ0cmFuc2Zvcm0i
LCAidHJhbnNsYXRlKDAsIiArIHRoaXMuX2NvbnRlbnRIZWlnaHQgKyAiKSIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRoaXMuX3lBeGlzKSB7Ci0gICAgICAgICAgICB0aGlzLl95QXhpcy50
aWNrcyhNYXRoLnJvdW5kKHRoaXMuX2NvbnRlbnRIZWlnaHQgLyAyIC8gcmVtKSk7Ci0gICAgICAg
ICAgICB0aGlzLl95QXhpcy50aWNrU2l6ZSgtdGhpcy5fY29udGVudFdpZHRoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbUxpbmUpIHsKLSAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRJdGVtTGluZQotICAgICAgICAgICAgICAgIC5hdHRyKCJ5MSIsIDApCi0gICAg
ICAgICAgICAgICAgLmF0dHIoInkyIiwgbWFyZ2luLnRvcCArIHRoaXMuX2NvbnRlbnRIZWlnaHQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcmVsYXlvdXREYXRhQW5kQXhlcyh0aGlzLl9j
dXJyZW50U2VsZWN0aW9uKCkpOwotICAgIH0sCi0gICAgX3VwZGF0ZUJydXNoOiBmdW5jdGlvbiAo
KQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJ1c2hSZWN0Ci0gICAgICAgICAgICAuY2FsbCh0aGlz
Ll9icnVzaCkKLSAgICAgICAgLnNlbGVjdEFsbCgicmVjdCIpCi0gICAgICAgICAgICAuYXR0cigi
eSIsIDEpCi0gICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgTWF0aC5tYXgoMCwgdGhpcy5fY29u
dGVudEhlaWdodCAtIDIpKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uVG9vbGJhcigp
OwotICAgIH0sCi0gICAgX3JlbGF5b3V0RGF0YUFuZEF4ZXM6IGZ1bmN0aW9uIChzZWxlY3Rpb24p
Ci0gICAgewotICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLl90aW1lTGluZTsKLSAgICAgICAg
dGhpcy5fcGF0aHMuZm9yRWFjaChmdW5jdGlvbiAocGF0aCkgeyBwYXRoLmF0dHIoImQiLCB0aW1l
bGluZSk7IH0pOwotCi0gICAgICAgIHZhciBjb25maWRlbmNlQXJlYSA9IHRoaXMuX2NvbmZpZGVu
Y2VBcmVhOwotICAgICAgICB0aGlzLl9hcmVhcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoKSB7IHBh
dGguYXR0cigiZCIsIGNvbmZpZGVuY2VBcmVhKTsgfSk7Ci0KLSAgICAgICAgdmFyIHhTY2FsZSA9
IHRoaXMuX3g7Ci0gICAgICAgIHZhciB5U2NhbGUgPSB0aGlzLl95OwotICAgICAgICB0aGlzLl9k
b3RzLmZvckVhY2goZnVuY3Rpb24gKGRvdCkgewotICAgICAgICAgICAgZG90Ci0gICAgICAgICAg
ICAgICAgLmF0dHIoImN4IiwgZnVuY3Rpb24obWVhc3VyZW1lbnQpIHsgcmV0dXJuIHhTY2FsZSht
ZWFzdXJlbWVudC50aW1lKTsgfSkKLSAgICAgICAgICAgICAgICAuYXR0cigiY3kiLCBmdW5jdGlv
bihtZWFzdXJlbWVudCkgeyByZXR1cm4geVNjYWxlKG1lYXN1cmVtZW50LnZhbHVlKTsgfSk7Ci0g
ICAgICAgIH0pOwotICAgICAgICB0aGlzLl91cGRhdGVIaWdobGlnaHRQb3NpdGlvbnMoKTsKLSAg
ICAgICAgdGhpcy5fdXBkYXRlUmFuZ2VCYXJSZWN0cygpOwotCi0gICAgICAgIGlmICh0aGlzLl9i
cnVzaCkgewotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbikKLSAgICAgICAgICAgICAgICB0aGlz
Ll9icnVzaC5leHRlbnQoc2VsZWN0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB0aGlzLl9icnVzaC5jbGVhcigpOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnJ1c2go
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRJdGVtSW5kaWNhdG9y
cygpOwotCi0gICAgICAgIGlmICh0aGlzLl94QXhpcykKLSAgICAgICAgICAgIHRoaXMuX3hBeGlz
TGFiZWxzLmNhbGwodGhpcy5feEF4aXMpOwotICAgICAgICBpZiAoIXRoaXMuX3lBeGlzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3lBeGlzTGFiZWxzLmNhbGwodGhpcy5f
eUF4aXMpOwotICAgICAgICB2YXIgeCA9IC0gMy4yICogdGhpcy5fcmVtOwotICAgICAgICB2YXIg
eSA9IHRoaXMuX2NvbnRlbnRIZWlnaHQgLyAyOwotICAgIH0sCi0gICAgX3VwZGF0ZUhpZ2hsaWdo
dFBvc2l0aW9uczogZnVuY3Rpb24gKCkgewotICAgICAgICBpZiAoIXRoaXMuX2hpZ2hsaWdodHMp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7Ci0g
ICAgICAgIHZhciB5U2NhbGUgPSB0aGlzLl95OwotICAgICAgICB0aGlzLl9oaWdobGlnaHRzCi0g
ICAgICAgICAgICAuYXR0cigiY3kiLCBmdW5jdGlvbihwb2ludCkgeyByZXR1cm4geVNjYWxlKHBv
aW50LnZhbHVlKTsgfSkKLSAgICAgICAgICAgIC5hdHRyKCJjeCIsIGZ1bmN0aW9uKHBvaW50KSB7
IHJldHVybiB4U2NhbGUocG9pbnQudGltZSk7IH0pOwotICAgIH0sCi0gICAgX2NvbXB1dGVYQXhp
c0RvbWFpbjogZnVuY3Rpb24gKHRpbWVTZXJpZXMpCi0gICAgewotICAgICAgICB2YXIgZXh0ZW50
ID0gZDMuZXh0ZW50KHRpbWVTZXJpZXMsIGZ1bmN0aW9uKHBvaW50KSB7IHJldHVybiBwb2ludC50
aW1lOyB9KTsKLSAgICAgICAgdmFyIG1hcmdpbiA9IDM2MDAgKiAxMDAwOyAvLyBVc2UgeC5pbnZl
cnNlIHRvIGNvbXB1dGUgdGhlIHJpZ2h0IGFtb3VudCBmcm9tIGEgbWFyZ2luLgotICAgICAgICBy
ZXR1cm4gWytleHRlbnRbMF0gLSBtYXJnaW4sICtleHRlbnRbMV0gKyBtYXJnaW5dOwotICAgIH0s
Ci0gICAgX2NvbXB1dGVZQXhpc0RvbWFpbjogZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSkK
LSAgICB7Ci0gICAgICAgIHZhciBzaG91bGRTaG93RnVsbFlBeGlzID0gdGhpcy5nZXQoJ3Nob3dG
dWxsWUF4aXMnKTsKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fbWluTWF4Rm9yQWxsVGltZVNl
cmllcyhzdGFydFRpbWUsIGVuZFRpbWUsICFzaG91bGRTaG93RnVsbFlBeGlzKTsKLSAgICAgICAg
dmFyIG1pbiA9IHJhbmdlWzBdOwotICAgICAgICB2YXIgbWF4ID0gcmFuZ2VbMV07Ci0KLSAgICAg
ICAgdmFyIGhpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLmdldCgnaGlnaGxpZ2h0ZWRJdGVtcycpOwot
ICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRJdGVtcykgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB0
aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEKLSAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0
aW9uIChwb2ludCkgeyByZXR1cm4gc3RhcnRUaW1lIDw9IHBvaW50LnRpbWUgJiYgcG9pbnQudGlt
ZSA8PSBlbmRUaW1lICYmIGhpZ2hsaWdodGVkSXRlbXNbcG9pbnQubWVhc3VyZW1lbnQuaWQoKV07
IH0pCi0gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50
LnZhbHVlIH0pOwotICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBTdGF0aXN0aWNzLm1p
bihkYXRhKSk7Ci0gICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIFN0YXRpc3RpY3MubWF4
KGRhdGEpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXggPCBtaW4pCi0gICAgICAgICAg
ICBtaW4gPSBtYXggPSAwOwotICAgICAgICBlbHNlIGlmIChzaG91bGRTaG93RnVsbFlBeGlzKQot
ICAgICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCAwKTsKLSAgICAgICAgdmFyIGRpZmYgPSBt
YXggLSBtaW47Ci0gICAgICAgIHZhciBtYXJnaW4gPSBkaWZmICogMC4wNTsKLQotICAgICAgICB5
RXh0ZW50ID0gW21pbiAtIG1hcmdpbiwgbWF4ICsgbWFyZ2luXTsKLSAgICAgICAgcmV0dXJuIHlF
eHRlbnQ7Ci0gICAgfSwKLSAgICBfbWluTWF4Rm9yQWxsVGltZVNlcmllczogZnVuY3Rpb24gKHN0
YXJ0VGltZSwgZW5kVGltZSwgaWdub3JlT3V0bGluZXJzKQotICAgIHsKLSAgICAgICAgdmFyIHNl
cmllc0xpc3QgPSBbdGhpcy5fY3VycmVudFRpbWVTZXJpZXMsIHRoaXMuX21vdmluZ0F2ZXJhZ2VU
aW1lU2VyaWVzLCB0aGlzLl9iYXNlbGluZVRpbWVTZXJpZXMsIHRoaXMuX3RhcmdldFRpbWVTZXJp
ZXNdOwotICAgICAgICB2YXIgbWluID0gSW5maW5pdHk7Ci0gICAgICAgIHZhciBtYXggPSAtSW5m
aW5pdHk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWVzTGlzdC5sZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgaWYgKHNlcmllc0xpc3RbaV0pIHsKLSAgICAgICAgICAgICAgICB2
YXIgbWluTWF4ID0gc2VyaWVzTGlzdFtpXS5taW5NYXhGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBl
bmRUaW1lLCBpZ25vcmVPdXRsaW5lcnMpOwotICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgubWlu
KG1pbiwgbWluTWF4WzBdKTsKLSAgICAgICAgICAgICAgICBtYXggPSBNYXRoLm1heChtYXgsIG1p
bk1heFsxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFttaW4s
IG1heF07Ci0gICAgfSwKLSAgICBfY3VycmVudFNlbGVjdGlvbjogZnVuY3Rpb24gKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9icnVzaCAmJiAhdGhpcy5fYnJ1c2guZW1wdHkoKSA/IHRo
aXMuX2JydXNoLmV4dGVudCgpIDogbnVsbDsKLSAgICB9LAotICAgIF9kb21haW5DaGFuZ2VkOiBm
dW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2N1cnJlbnRT
ZWxlY3Rpb24oKSB8fCB0aGlzLmdldCgnc2hhcmVkU2VsZWN0aW9uJyk7Ci0gICAgICAgIHZhciBu
ZXdYRG9tYWluID0gdGhpcy5fdXBkYXRlRG9tYWluKCk7Ci0gICAgICAgIGlmICghbmV3WERvbWFp
bikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoc2VsZWN0aW9uICYmIG5ld1hE
b21haW4gJiYgc2VsZWN0aW9uWzBdIDw9IG5ld1hEb21haW5bMF0gJiYgbmV3WERvbWFpblsxXSA8
PSBzZWxlY3Rpb25bMV0pCi0gICAgICAgICAgICBzZWxlY3Rpb24gPSBudWxsOyAvLyBPdGhlcndp
c2UgdGhlIHVzZXIgaGFzIG5vIHdheSBvZiBjbGVhcmluZyB0aGUgc2VsZWN0aW9uLgotCi0gICAg
ICAgIHRoaXMuX3JlbGF5b3V0RGF0YUFuZEF4ZXMoc2VsZWN0aW9uKTsKLSAgICB9Lm9ic2VydmVz
KCdkb21haW4nLCAnc2hvd0Z1bGxZQXhpcycpLAotICAgIF9zZWxlY3Rpb25DaGFuZ2VkOiBmdW5j
dGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKHRoaXMuZ2V0KCdz
ZWxlY3Rpb24nKSk7Ci0gICAgfS5vYnNlcnZlcygnc2VsZWN0aW9uJyksCi0gICAgX3VwZGF0ZVNl
bGVjdGlvbjogZnVuY3Rpb24gKG5ld1NlbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fYnJ1c2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRTZWxl
Y3Rpb24gPSB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rp
b24gJiYgY3VycmVudFNlbGVjdGlvbiAmJiBBcHAuZG9tYWluc0FyZUVxdWFsKG5ld1NlbGVjdGlv
biwgY3VycmVudFNlbGVjdGlvbikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IGRvbWFpbiA9IHRoaXMuX3guZG9tYWluKCk7Ci0gICAgICAgIGlmICghbmV3U2VsZWN0aW9uIHx8
IEFwcC5kb21haW5zQXJlRXF1YWwoZG9tYWluLCBuZXdTZWxlY3Rpb24pKQotICAgICAgICAgICAg
dGhpcy5fYnJ1c2guY2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fYnJ1
c2guZXh0ZW50KG5ld1NlbGVjdGlvbik7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUJydXNoKCk7Ci0K
LSAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwotICAgIH0s
Ci0gICAgX2JydXNoQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9icnVzaC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX2JydXNoRXh0ZW50KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNl
bGVjdGlvbih1bmRlZmluZWQpOwotCi0gICAgICAgICAgICAvLyBBdm9pZCBsb2NraW5nIHRoZSBp
bmRpY2F0b3IgaW4gX21vdXNlRG93biB3aGVuIHRoZSBicnVzaCB3YXMgY2xlYXJlZCBpbiB0aGUg
c2FtZSBtb3VzZWRvd24gZXZlbnQuCi0gICAgICAgICAgICB0aGlzLl9icnVzaEp1c3RDaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHNlbGYuX2JydXNoSnVzdENoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0sIDApOwotCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICB0aGlzLl9zZXRDdXJyZW50U2VsZWN0aW9uKHRoaXMuX2JydXNo
LmV4dGVudCgpKTsKLSAgICB9LAotICAgIF9rZXlQcmVzc2VkOiBmdW5jdGlvbiAoZXZlbnQpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRJdGVtSW5kZXggfHwgdGhpcy5fY3VycmVu
dFNlbGVjdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBuZXdJbmRl
eDsKLSAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgMzc6IC8v
IExlZnQKLSAgICAgICAgICAgIG5ld0luZGV4ID0gdGhpcy5fY3VycmVudEl0ZW1JbmRleCAtIDE7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOTogLy8gUmlnaHQKLSAgICAgICAg
ICAgIG5ld0luZGV4ID0gdGhpcy5fY3VycmVudEl0ZW1JbmRleCArIDE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAzODogLy8gVXAKLSAgICAgICAgY2FzZSA0MDogLy8gRG93bgot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVW5saWtlIG1vdXNlbW92ZSwga2V5ZG93biBzaG91bGRuJ3QgbW92ZSBvZmYgdGhlIGVk
Z2UuCi0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGFbbmV3SW5kZXhdKQot
ICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0obmV3SW5kZXgpOwotICAgIH0sCi0gICAg
X21vdXNlTW92ZWQ6IGZ1bmN0aW9uIChldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
bWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24oKSB8fCB0aGlzLl9jdXJyZW50SXRlbUxv
Y2tlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcG9pbnQgPSB0aGlzLl9t
b3VzZVBvaW50SW5HcmFwaChldmVudCk7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0Q2xvc2VzdFBv
aW50VG9Nb3VzZUFzQ3VycmVudEl0ZW0ocG9pbnQpOwotICAgIH0sCi0gICAgX21vdXNlTGVmdDog
ZnVuY3Rpb24gKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4gfHwgdGhp
cy5fY3VycmVudEl0ZW1Mb2NrZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhp
cy5fc2VsZWN0Q2xvc2VzdFBvaW50VG9Nb3VzZUFzQ3VycmVudEl0ZW0obnVsbCk7Ci0gICAgfSwK
LSAgICBfbW91c2VEb3duOiBmdW5jdGlvbiAoZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX21hcmdpbiB8fCB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkgfHwgdGhpcy5fYnJ1c2hKdXN0
Q2hhbmdlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcG9pbnQgPSB0aGlz
Ll9tb3VzZVBvaW50SW5HcmFwaChldmVudCk7Ci0gICAgICAgIGlmICghcG9pbnQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKSB7Ci0g
ICAgICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCA9IGZhbHNlOwotICAgICAgICAgICAg
dGhpcy5zZXQoJ3NlbGVjdGVkSXRlbScsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQgPSB0cnVlOwotICAgICAg
ICB0aGlzLl9zZWxlY3RDbG9zZXN0UG9pbnRUb01vdXNlQXNDdXJyZW50SXRlbShwb2ludCk7Ci0g
ICAgfSwKLSAgICBfbW91c2VQb2ludEluR3JhcGg6IGZ1bmN0aW9uIChldmVudCkKLSAgICB7Ci0g
ICAgICAgIHZhciBvZmZzZXQgPSAkKHRoaXMuZ2V0KCdlbGVtZW50JykpLm9mZnNldCgpOwotICAg
ICAgICBpZiAoIW9mZnNldCB8fCAhJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ3N2ZycpLmxlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBwb2ludCA9IHsKLSAg
ICAgICAgICAgIHg6IGV2ZW50LnBhZ2VYIC0gb2Zmc2V0LmxlZnQgLSB0aGlzLl9tYXJnaW4ubGVm
dCwKLSAgICAgICAgICAgIHk6IGV2ZW50LnBhZ2VZIC0gb2Zmc2V0LnRvcCAtIHRoaXMuX21hcmdp
bi50b3AKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgeFNjYWxlID0gdGhpcy5feDsKLSAgICAg
ICAgdmFyIHlTY2FsZSA9IHRoaXMuX3k7Ci0gICAgICAgIHZhciB4RG9tYWluID0geFNjYWxlLmRv
bWFpbigpOwotICAgICAgICB2YXIgeURvbWFpbiA9IHlTY2FsZS5kb21haW4oKTsKLSAgICAgICAg
aWYgKHBvaW50LnggPj0geFNjYWxlKHhEb21haW5bMF0pICYmIHBvaW50LnggPD0geFNjYWxlKHhE
b21haW5bMV0pCi0gICAgICAgICAgICAmJiBwb2ludC55IDw9IHlTY2FsZSh5RG9tYWluWzBdKSAm
JiBwb2ludC55ID49IHlTY2FsZSh5RG9tYWluWzFdKSkKLSAgICAgICAgICAgIHJldHVybiBwb2lu
dDsKLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotICAgIF9zZWxlY3RDbG9zZXN0UG9p
bnRUb01vdXNlQXNDdXJyZW50SXRlbTogZnVuY3Rpb24gKHBvaW50KQotICAgIHsKLSAgICAgICAg
dmFyIHhTY2FsZSA9IHRoaXMuX3g7Ci0gICAgICAgIHZhciB5U2NhbGUgPSB0aGlzLl95OwotICAg
ICAgICB2YXIgZGlzdGFuY2VIZXVyaXN0aWNzID0gZnVuY3Rpb24gKG0pIHsKLSAgICAgICAgICAg
IHZhciBtWCA9IHhTY2FsZShtLnRpbWUpOwotICAgICAgICAgICAgdmFyIG1ZID0geVNjYWxlKG0u
dmFsdWUpOwotICAgICAgICAgICAgdmFyIHhEaWZmID0gbVggLSBwb2ludC54OwotICAgICAgICAg
ICAgdmFyIHlEaWZmID0gbVkgLSBwb2ludC55OwotICAgICAgICAgICAgcmV0dXJuIHhEaWZmICog
eERpZmYgKyB5RGlmZiAqIHlEaWZmIC8gMTY7IC8vIEZhdm9yIGhvcml6b250YWwgYWZmaW5pdHku
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIG5ld0l0ZW1JbmRleDsKLSAgICAgICAgaWYgKHBv
aW50ICYmICF0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIHZhciBkaXN0
YW5jZXMgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEubWFwKGRpc3RhbmNlSGV1cmlzdGlj
cyk7Ci0gICAgICAgICAgICB2YXIgbWluRGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZBTFVFOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VzW2ldIDwgbWluRGlzdGFuY2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3SXRlbUluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgbWluRGlz
dGFuY2UgPSBkaXN0YW5jZXNbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0obmV3SXRlbUluZGV4KTsK
LSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uVG9vbGJhcigpOwotICAgIH0sCi0gICAgX2N1
cnJlbnRUaW1lQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
bWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24oKSB8fCB0aGlzLl9jdXJyZW50SXRlbUxv
Y2tlZCkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHZhciBjdXJyZW50VGltZSA9IHRo
aXMuZ2V0KCdjdXJyZW50VGltZScpOwotICAgICAgICBpZiAoY3VycmVudFRpbWUpIHsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5fY3VycmVudFRp
bWVTZXJpZXNEYXRhW2ldOwotICAgICAgICAgICAgICAgIGlmIChwb2ludC50aW1lID49IGN1cnJl
bnRUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRJdGVtKGksIC8q
IGRvTm90Tm90aWZ5ICovIHRydWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Nl
dEN1cnJlbnRJdGVtKHVuZGVmaW5lZCwgLyogZG9Ob3ROb3RpZnkgKi8gdHJ1ZSk7Ci0gICAgfS5v
YnNlcnZlcygnY3VycmVudFRpbWUnKSwKLSAgICBfc2V0Q3VycmVudEl0ZW06IGZ1bmN0aW9uIChu
ZXdJdGVtSW5kZXgsIGRvTm90Tm90aWZ5KQotICAgIHsKLSAgICAgICAgaWYgKG5ld0l0ZW1JbmRl
eCA9PT0gdGhpcy5fY3VycmVudEl0ZW1JbmRleCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX2N1
cnJlbnRJdGVtTG9ja2VkKQotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0ZW0n
LCB0aGlzLmdldCgnY3VycmVudEl0ZW0nKSA/IHRoaXMuZ2V0KCdjdXJyZW50SXRlbScpLm1lYXN1
cmVtZW50LmlkKCkgOiBudWxsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBuZXdJdGVtID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhW25ld0l0ZW1J
bmRleF07Ci0gICAgICAgIHRoaXMuX2JydXNoRXh0ZW50ID0gdW5kZWZpbmVkOwotICAgICAgICB0
aGlzLl9jdXJyZW50SXRlbUluZGV4ID0gbmV3SXRlbUluZGV4OwotCi0gICAgICAgIGlmICghbmV3
SXRlbSkgewotICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0ZW0nLCBudWxsKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRJdGVtSW5kaWNhdG9ycygpOwotCi0gICAgICAgIGlm
ICghZG9Ob3ROb3RpZnkpCi0gICAgICAgICAgICB0aGlzLnNldCgnY3VycmVudFRpbWUnLCBuZXdJ
dGVtID8gbmV3SXRlbS50aW1lIDogdW5kZWZpbmVkKTsKLQotICAgICAgICB0aGlzLnNldCgnY3Vy
cmVudEl0ZW0nLCBuZXdJdGVtKTsKLSAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJdGVtTG9ja2Vk
KQotICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGVkSXRlbScsIG5ld0l0ZW0gPyBuZXdJdGVt
Lm1lYXN1cmVtZW50LmlkKCkgOiBudWxsKTsKLSAgICB9LAotICAgIF9zZWxlY3RlZEl0ZW1DaGFu
Z2VkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4pCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNlbGVjdGVkSWQgPSB0aGlzLmdldCgnc2Vs
ZWN0ZWRJdGVtJyk7Ci0gICAgICAgIHZhciBjdXJyZW50SXRlbSA9IHRoaXMuZ2V0KCdjdXJyZW50
SXRlbScpOwotICAgICAgICBpZiAoY3VycmVudEl0ZW0gJiYgY3VycmVudEl0ZW0ubWVhc3VyZW1l
bnQuaWQoKSA9PSBzZWxlY3RlZElkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciBzZXJpZXMgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGE7Ci0gICAgICAgIHZhciBzZWxl
Y3RlZEl0ZW1JbmRleCA9IHVuZGVmaW5lZDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
ZXJpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzZXJpZXNbaV0ubWVhc3VyZW1l
bnQuaWQoKSA9PSBzZWxlY3RlZElkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2Vs
ZWN0aW9uKG51bGwpOwotICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50SXRlbShpKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25Ub29sYmFyKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfS5vYnNlcnZlcygnc2VsZWN0
ZWRJdGVtJykub24oJ2luaXQnKSwKLSAgICBfaGlnaGxpZ2h0ZWRJdGVtc0NoYW5nZWQ6IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgdmFyIGhpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLmdldCgnaGlnaGxp
Z2h0ZWRJdGVtcycpOwotCi0gICAgICAgIGlmICghdGhpcy5fY2xpcHBlZENvbnRhaW5lciB8fCAh
aGlnaGxpZ2h0ZWRJdGVtcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZGF0
YSA9IHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsg
cmV0dXJuIGhpZ2hsaWdodGVkSXRlbXNbaXRlbS5tZWFzdXJlbWVudC5pZCgpXTsgfSk7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2hpZ2hsaWdodHMpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRz
LnJlbW92ZSgpOwotICAgICAgICB0aGlzLl9oaWdobGlnaHRzID0gdGhpcy5fY2xpcHBlZENvbnRh
aW5lcgotICAgICAgICAgICAgLnNlbGVjdEFsbCgiLmhpZ2hsaWdodCIpCi0gICAgICAgICAgICAg
ICAgLmRhdGEoZGF0YSkKLSAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikKLSAg
ICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAiaGlnaGxpZ2h0Iik7Ci0KLSAgICAgICAgdGhp
cy5fZG9tYWluQ2hhbmdlZCgpOwotICAgIH0ub2JzZXJ2ZXMoJ2hpZ2hsaWdodGVkSXRlbXMnKSwK
LSAgICBfcmFuZ2VzQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBsaW5r
Um91dGUgPSB0aGlzLmdldCgncmFuZ2VSb3V0ZScpOwotICAgICAgICB0aGlzLnNldCgncmFuZ2VC
YXJzJywgKHRoaXMuZ2V0KCdyYW5nZXMnKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChyYW5nZSkgewot
ICAgICAgICAgICAgcmV0dXJuIEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgICAg
IHN0YXJ0VGltZTogcmFuZ2UuZ2V0KCdzdGFydFRpbWUnKSwKLSAgICAgICAgICAgICAgICBlbmRU
aW1lOiByYW5nZS5nZXQoJ2VuZFRpbWUnKSwKLSAgICAgICAgICAgICAgICByYW5nZTogcmFuZ2Us
Ci0gICAgICAgICAgICAgICAgbGVmdDogbnVsbCwKLSAgICAgICAgICAgICAgICByaWdodDogbnVs
bCwKLSAgICAgICAgICAgICAgICByb3dJbmRleDogbnVsbCwKLSAgICAgICAgICAgICAgICB0b3A6
IG51bGwsCi0gICAgICAgICAgICAgICAgYm90dG9tOiBudWxsLAotICAgICAgICAgICAgICAgIGxp
bmtSb3V0ZTogbGlua1JvdXRlLAotICAgICAgICAgICAgICAgIGxpbmtJZDogcmFuZ2UuZ2V0KCdp
ZCcpLAotICAgICAgICAgICAgICAgIGxhYmVsOiByYW5nZS5nZXQoJ2xhYmVsJyksCi0gICAgICAg
ICAgICAgICAgc3RhdHVzOiByYW5nZS5nZXQoJ3N0YXR1cycpLAotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pKTsKLQotICAgICAgICB0aGlzLl91cGRhdGVSYW5nZUJhclJlY3RzKCk7Ci0gICAg
fS5vYnNlcnZlcygncmFuZ2VzJyksCi0gICAgX3VwZGF0ZVJhbmdlQmFyUmVjdHM6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgdmFyIHJhbmdlQmFycyA9IHRoaXMuZ2V0KCdyYW5nZUJhcnMnKTsKLSAg
ICAgICAgaWYgKCFyYW5nZUJhcnMgfHwgIXJhbmdlQmFycy5sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7Ci0gICAgICAgIHZhciB5U2Nh
bGUgPSB0aGlzLl95OwotICAgICAgICBpZiAoIXhTY2FsZSB8fCAheVNjYWxlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIC8vIEV4cGFuZCB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSBh
cyBuZWVkZWQgYW5kIHNvcnQgcmFuZ2VzIGJ5IHRoZSBsZWZ0LWVkZ2Ugb2YgcmFuZ2VzLgotICAg
ICAgICB2YXIgbWluV2lkdGggPSAzOwotICAgICAgICB2YXIgc29ydGVkQmFycyA9IHJhbmdlQmFy
cy5tYXAoZnVuY3Rpb24gKGJhcikgewotICAgICAgICAgICAgdmFyIGxlZnQgPSB4U2NhbGUoYmFy
LmdldCgnc3RhcnRUaW1lJykpOwotICAgICAgICAgICAgdmFyIHJpZ2h0ID0geFNjYWxlKGJhci5n
ZXQoJ2VuZFRpbWUnKSk7Ci0gICAgICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDwgbWluV2lkdGgp
IHsKLSAgICAgICAgICAgICAgICBsZWZ0IC09IG1pbldpZHRoIC8gMjsKLSAgICAgICAgICAgICAg
ICByaWdodCArPSBtaW5XaWR0aCAvIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBiYXIu
c2V0KCdsZWZ0JywgbGVmdCk7Ci0gICAgICAgICAgICBiYXIuc2V0KCdyaWdodCcsIHJpZ2h0KTsK
LSAgICAgICAgICAgIHJldHVybiBiYXI7Ci0gICAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGZpcnN0
LCBzZWNvbmQpIHsgcmV0dXJuIGZpcnN0LmdldCgnbGVmdCcpIC0gc2Vjb25kLmdldCgnbGVmdCcp
OyB9KTsKLQotICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBsZWZ0IGVkZ2VzIG9mIGFsbCByYW5n
ZXMgcHJpb3IgdG8gYSByYW5nZSBSMSBpcyBvbiB0aGUgbGVmdCBvZiBSMS4KLSAgICAgICAgLy8g
UGxhY2UgUjEgaW50byBhIHJvdyBpbiB3aGljaCByaWdodCBlZGdlcyBvZiBhbGwgcmFuZ2VzIHBy
aW9yIHRvIFIxIGlzIG9uIHRoZSBsZWZ0IG9mIFIxIHRvIGF2b2lkIG92ZXJsYXBwaW5nIHJhbmdl
cy4KLSAgICAgICAgdmFyIHJvd3MgPSBbXTsKLSAgICAgICAgc29ydGVkQmFycy5mb3JFYWNoKGZ1
bmN0aW9uIChiYXIpIHsKLSAgICAgICAgICAgIHZhciByb3dJbmRleCA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKDsgcm93SW5kZXggPCByb3dzLmxlbmd0aDsgcm93SW5kZXgrKykgewotICAgICAgICAg
ICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93c1tyb3dJbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRSb3dbY3VycmVudFJvdy5sZW5ndGggLSAxXS5nZXQoJ3JpZ2h0JykgPCBiYXIu
Z2V0KCdsZWZ0JykpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFJvdy5wdXNoKGJhcik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkKLSAgICAgICAg
ICAgICAgICByb3dzLnB1c2goW2Jhcl0pOwotICAgICAgICAgICAgYmFyLnNldCgncm93SW5kZXgn
LCByb3dJbmRleCk7Ci0gICAgICAgIH0pOwotICAgICAgICB2YXIgcm93SGVpZ2h0ID0gMC42ICog
dGhpcy5fcmVtOwotICAgICAgICB2YXIgZmlyc3RSb3dUb3AgPSB0aGlzLl9jb250ZW50SGVpZ2h0
IC0gcm93cy5sZW5ndGggKiByb3dIZWlnaHQ7Ci0gICAgICAgIHZhciBiYXJIZWlnaHQgPSAwLjUg
KiB0aGlzLl9yZW07Ci0KLSAgICAgICAgJCh0aGlzLmdldCgnZWxlbWVudCcpKS5maW5kKCcucmFu
Z2VCYXJzQ29udGFpbmVySW5saW5lU3R5bGUnKS5jc3MoewotICAgICAgICAgICAgbGVmdDogdGhp
cy5fbWFyZ2luLmxlZnQgKyAncHgnLAotICAgICAgICAgICAgdG9wOiB0aGlzLl9tYXJnaW4udG9w
ICsgZmlyc3RSb3dUb3AgKyAncHgnLAotICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbnRlbnRX
aWR0aCArICdweCcsCi0gICAgICAgICAgICBoZWlnaHQ6IHJvd3MubGVuZ3RoICogYmFySGVpZ2h0
ICsgJ3B4JywKLSAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJywKLSAgICAgICAgICAgIHBv
c2l0aW9uOiAnYWJzb2x1dGUnLAotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgbWFyZ2luID0g
dGhpcy5fbWFyZ2luOwotICAgICAgICBzb3J0ZWRCYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhcikg
ewotICAgICAgICAgICAgdmFyIHRvcCA9IGJhci5nZXQoJ3Jvd0luZGV4JykgKiByb3dIZWlnaHQ7
Ci0gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYmFySGVpZ2h0OwotICAgICAgICAgICAgdmFyIGxl
ZnQgPSBiYXIuZ2V0KCdsZWZ0Jyk7Ci0gICAgICAgICAgICB2YXIgd2lkdGggPSBiYXIuZ2V0KCdy
aWdodCcpIC0gbGVmdDsKLSAgICAgICAgICAgIGJhci5zZXQoJ2lubGluZVN0eWxlJywgJ2xlZnQ6
ICcgKyBsZWZ0ICsgJ3B4OyB0b3A6ICcgKyB0b3AgKyAncHg7IHdpZHRoOiAnICsgd2lkdGggKyAn
cHg7IGhlaWdodDogJyArIGhlaWdodCArICdweDsnKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLSAg
ICBfdXBkYXRlQ3VycmVudEl0ZW1JbmRpY2F0b3JzOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9jdXJyZW50SXRlbUxpbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGFbdGhpcy5fY3VycmVu
dEl0ZW1JbmRleF07Ci0gICAgICAgIGlmICghaXRlbSkgewotICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudEl0ZW1MaW5lLmF0dHIoIngxIiwgLTEwMDApLmF0dHIoIngyIiwgLTEwMDApOwotICAgICAg
ICAgICAgdGhpcy5fY3VycmVudEl0ZW1DaXJjbGUuYXR0cigiY3giLCAtMTAwMCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgeCA9IHRoaXMuX3goaXRlbS50
aW1lKTsKLSAgICAgICAgdmFyIHkgPSB0aGlzLl95KGl0ZW0udmFsdWUpOwotCi0gICAgICAgIHRo
aXMuX2N1cnJlbnRJdGVtTGluZQotICAgICAgICAgICAgLmF0dHIoIngxIiwgeCkKLSAgICAgICAg
ICAgIC5hdHRyKCJ4MiIsIHgpOwotCi0gICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtQ2lyY2xlCi0g
ICAgICAgICAgICAuYXR0cigiY3giLCB4KQotICAgICAgICAgICAgLmF0dHIoImN5IiwgeSk7Ci0g
ICAgfSwKLSAgICBfc2V0Q3VycmVudFNlbGVjdGlvbjogZnVuY3Rpb24gKG5ld1NlbGVjdGlvbikK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9icnVzaEV4dGVudCA9PT0gbmV3U2VsZWN0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBwb2ludHMgPSBudWxsOwotICAgICAg
ICBpZiAobmV3U2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICBwb2ludHMgPSB0aGlzLl9jdXJyZW50
VGltZVNlcmllc0RhdGEKLSAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwb2ludCkg
eyByZXR1cm4gcG9pbnQudGltZSA+PSBuZXdTZWxlY3Rpb25bMF0gJiYgcG9pbnQudGltZSA8PSBu
ZXdTZWxlY3Rpb25bMV07IH0pOwotICAgICAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKQotICAg
ICAgICAgICAgICAgIHBvaW50cyA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9i
cnVzaEV4dGVudCA9IG5ld1NlbGVjdGlvbjsKLSAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0o
dW5kZWZpbmVkKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uVG9vbGJhcigpOwotCi0g
ICAgICAgIGlmICghQXBwLmRvbWFpbnNBcmVFcXVhbCh0aGlzLmdldCgnc2VsZWN0aW9uJyksIG5l
d1NlbGVjdGlvbikpCi0gICAgICAgICAgICB0aGlzLnNldCgnc2VsZWN0aW9uJywgbmV3U2VsZWN0
aW9uKTsKLSAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGVkUG9pbnRzJywgcG9pbnRzKTsKLSAgICB9
LAotICAgIF91cGRhdGVTZWxlY3Rpb25Ub29sYmFyOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLmdldCgnem9vbWFibGUnKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fY3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICB2
YXIgc2VsZWN0aW9uVG9vbGJhciA9ICQodGhpcy5nZXQoJ2VsZW1lbnQnKSkuY2hpbGRyZW4oJy5z
ZWxlY3Rpb24tdG9vbGJhcicpOwotICAgICAgICBpZiAoc2VsZWN0aW9uKSB7Ci0gICAgICAgICAg
ICB2YXIgbGVmdCA9IHRoaXMuX3goc2VsZWN0aW9uWzBdKTsKLSAgICAgICAgICAgIHZhciByaWdo
dCA9IHRoaXMuX3goc2VsZWN0aW9uWzFdKTsKLSAgICAgICAgICAgIHNlbGVjdGlvblRvb2xiYXIK
LSAgICAgICAgICAgICAgICAuY3NzKHtsZWZ0OiB0aGlzLl9tYXJnaW4ubGVmdCArIHJpZ2h0LCB0
b3A6IHRoaXMuX21hcmdpbi50b3AgKyB0aGlzLl9jb250ZW50SGVpZ2h0fSkKLSAgICAgICAgICAg
ICAgICAuc2hvdygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNlbGVjdGlvblRvb2xi
YXIuaGlkZSgpOwotICAgIH0sCi0gICAgYWN0aW9uczogewotICAgICAgICB6b29tOiBmdW5jdGlv
biAoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnNlbmRBY3Rpb24oJ3pvb20nLCB0aGlz
Ll9jdXJyZW50U2VsZWN0aW9uKCkpOwotICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGlvbics
IG51bGwpOwotICAgICAgICB9LAotICAgICAgICBvcGVuUmFuZ2U6IGZ1bmN0aW9uIChyYW5nZSkK
LSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCdvcGVuUmFuZ2UnLCByYW5n
ZSk7Ci0gICAgICAgIH0sCi0gICAgfSwKLX0pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9MSUNFTlNFIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92Mi9qcy9kMy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4MzAxMzQ2OWI5ODY4ZjJmYzJkMjMxMzRjNTc1YjZkNDM2ODk1MWU1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjIvanMvZDMvTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAK
LUNvcHlyaWdodCAoYykgMjAxMC0yMDE0LCBNaWNoYWVsIEJvc3RvY2sKLUFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzCi0gIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotKiBUaGUgbmFt
ZSBNaWNoYWVsIEJvc3RvY2sgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cwotICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi1BTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIE1JQ0hBRUwgQk9TVE9DSyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi1JTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywKLUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1P
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAotRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvZDMvZDMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YyL2pzL2QzL2QzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
MzUyYjhjM2RjM2I2OWM4OTdmODhlOTIzYzhiNjdmNWM2ZDlhODg1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjIvanMvZDMvZDMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MjMzICswLDAgQEAKLSFm
dW5jdGlvbigpIHsKLSAgdmFyIGQzID0gewotICAgIHZlcnNpb246ICIzLjQuMTEiCi0gIH07Ci0g
IGlmICghRGF0ZS5ub3cpIERhdGUubm93ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICtuZXcg
RGF0ZSgpOwotICB9OwotICB2YXIgZDNfYXJyYXlTbGljZSA9IFtdLnNsaWNlLCBkM19hcnJheSA9
IGZ1bmN0aW9uKGxpc3QpIHsKLSAgICByZXR1cm4gZDNfYXJyYXlTbGljZS5jYWxsKGxpc3QpOwot
ICB9OwotICB2YXIgZDNfZG9jdW1lbnQgPSBkb2N1bWVudCwgZDNfZG9jdW1lbnRFbGVtZW50ID0g
ZDNfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkM193aW5kb3cgPSB3aW5kb3c7Ci0gIHRyeSB7
Ci0gICAgZDNfYXJyYXkoZDNfZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBl
OwotICB9IGNhdGNoIChlKSB7Ci0gICAgZDNfYXJyYXkgPSBmdW5jdGlvbihsaXN0KSB7Ci0gICAg
ICB2YXIgaSA9IGxpc3QubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTsKLSAgICAgIHdoaWxl
IChpLS0pIGFycmF5W2ldID0gbGlzdFtpXTsKLSAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Owot
ICB9Ci0gIHRyeSB7Ci0gICAgZDNfZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUu
c2V0UHJvcGVydHkoIm9wYWNpdHkiLCAwLCAiIik7Ci0gIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAg
dmFyIGQzX2VsZW1lbnRfcHJvdG90eXBlID0gZDNfd2luZG93LkVsZW1lbnQucHJvdG90eXBlLCBk
M19lbGVtZW50X3NldEF0dHJpYnV0ZSA9IGQzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0dHJpYnV0
ZSwgZDNfZWxlbWVudF9zZXRBdHRyaWJ1dGVOUyA9IGQzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0
dHJpYnV0ZU5TLCBkM19zdHlsZV9wcm90b3R5cGUgPSBkM193aW5kb3cuQ1NTU3R5bGVEZWNsYXJh
dGlvbi5wcm90b3R5cGUsIGQzX3N0eWxlX3NldFByb3BlcnR5ID0gZDNfc3R5bGVfcHJvdG90eXBl
LnNldFByb3BlcnR5OwotICAgIGQzX2VsZW1lbnRfcHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1
bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICBkM19lbGVtZW50X3NldEF0dHJpYnV0ZS5jYWxs
KHRoaXMsIG5hbWUsIHZhbHVlICsgIiIpOwotICAgIH07Ci0gICAgZDNfZWxlbWVudF9wcm90b3R5
cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbihzcGFjZSwgbG9jYWwsIHZhbHVlKSB7Ci0gICAg
ICBkM19lbGVtZW50X3NldEF0dHJpYnV0ZU5TLmNhbGwodGhpcywgc3BhY2UsIGxvY2FsLCB2YWx1
ZSArICIiKTsKLSAgICB9OwotICAgIGQzX3N0eWxlX3Byb3RvdHlwZS5zZXRQcm9wZXJ0eSA9IGZ1
bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkgewotICAgICAgZDNfc3R5bGVfc2V0UHJvcGVy
dHkuY2FsbCh0aGlzLCBuYW1lLCB2YWx1ZSArICIiLCBwcmlvcml0eSk7Ci0gICAgfTsKLSAgfQot
ICBkMy5hc2NlbmRpbmcgPSBkM19hc2NlbmRpbmc7Ci0gIGZ1bmN0aW9uIGQzX2FzY2VuZGluZyhh
LCBiKSB7Ci0gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDog
TmFOOwotICB9Ci0gIGQzLmRlc2NlbmRpbmcgPSBmdW5jdGlvbihhLCBiKSB7Ci0gICAgcmV0dXJu
IGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOOwotICB9OwotICBkMy5t
aW4gPSBmdW5jdGlvbihhcnJheSwgZikgewotICAgIHZhciBpID0gLTEsIG4gPSBhcnJheS5sZW5n
dGgsIGEsIGI7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgIHdoaWxl
ICgrK2kgPCBuICYmICEoKGEgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhIDw9IGEpKSBhID0gdW5k
ZWZpbmVkOwotICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxs
ICYmIGEgPiBiKSBhID0gYjsKLSAgICB9IGVsc2UgewotICAgICAgd2hpbGUgKCsraSA8IG4gJiYg
ISgoYSA9IGYuY2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSAhPSBudWxsICYmIGEgPD0gYSkpIGEg
PSB1bmRlZmluZWQ7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZi5jYWxsKGFycmF5
LCBhcnJheVtpXSwgaSkpICE9IG51bGwgJiYgYSA+IGIpIGEgPSBiOwotICAgIH0KLSAgICByZXR1
cm4gYTsKLSAgfTsKLSAgZDMubWF4ID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKLSAgICB2YXIgaSA9
IC0xLCBuID0gYXJyYXkubGVuZ3RoLCBhLCBiOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09
PSAxKSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbiAmJiAhKChhID0gYXJyYXlbaV0pICE9IG51bGwg
JiYgYSA8PSBhKSkgYSA9IHVuZGVmaW5lZDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIg
PSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHdoaWxlICgrK2kgPCBuICYmICEoKGEgPSBmLmNhbGwoYXJyYXksIGFycmF5W2ldLCBpKSkgIT0g
bnVsbCAmJiBhIDw9IGEpKSBhID0gdW5kZWZpbmVkOwotICAgICAgd2hpbGUgKCsraSA8IG4pIGlm
ICgoYiA9IGYuY2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSAhPSBudWxsICYmIGIgPiBhKSBhID0g
YjsKLSAgICB9Ci0gICAgcmV0dXJuIGE7Ci0gIH07Ci0gIGQzLmV4dGVudCA9IGZ1bmN0aW9uKGFy
cmF5LCBmKSB7Ci0gICAgdmFyIGkgPSAtMSwgbiA9IGFycmF5Lmxlbmd0aCwgYSwgYiwgYzsKLSAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgd2hpbGUgKCsraSA8IG4gJiYg
ISgoYSA9IGMgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhIDw9IGEpKSBhID0gYyA9IHVuZGVmaW5l
ZDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCkgewot
ICAgICAgICBpZiAoYSA+IGIpIGEgPSBiOwotICAgICAgICBpZiAoYyA8IGIpIGMgPSBiOwotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbiAmJiAhKChhID0gYyA9IGYu
Y2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSAhPSBudWxsICYmIGEgPD0gYSkpIGEgPSB1bmRlZmlu
ZWQ7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZi5jYWxsKGFycmF5LCBhcnJheVtp
XSwgaSkpICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGEgPiBiKSBhID0gYjsKLSAgICAgICAgaWYg
KGMgPCBiKSBjID0gYjsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFsgYSwgYyBdOwotICB9
OwotICBkMy5zdW0gPSBmdW5jdGlvbihhcnJheSwgZikgewotICAgIHZhciBzID0gMCwgbiA9IGFy
cmF5Lmxlbmd0aCwgYSwgaSA9IC0xOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7
Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpc05hTihhID0gK2FycmF5W2ldKSkgcyArPSBh
OwotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpc05hTihhID0gK2Yu
Y2FsbChhcnJheSwgYXJyYXlbaV0sIGkpKSkgcyArPSBhOwotICAgIH0KLSAgICByZXR1cm4gczsK
LSAgfTsKLSAgZnVuY3Rpb24gZDNfbnVtYmVyKHgpIHsKLSAgICByZXR1cm4geCAhPSBudWxsICYm
ICFpc05hTih4KTsKLSAgfQotICBkMy5tZWFuID0gZnVuY3Rpb24oYXJyYXksIGYpIHsKLSAgICB2
YXIgcyA9IDAsIG4gPSBhcnJheS5sZW5ndGgsIGEsIGkgPSAtMSwgaiA9IG47Ci0gICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoZDNfbnVt
YmVyKGEgPSBhcnJheVtpXSkpIHMgKz0gYTsgZWxzZSAtLWo7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHdoaWxlICgrK2kgPCBuKSBpZiAoZDNfbnVtYmVyKGEgPSBmLmNhbGwoYXJyYXksIGFycmF5W2ld
LCBpKSkpIHMgKz0gYTsgZWxzZSAtLWo7Ci0gICAgfQotICAgIHJldHVybiBqID8gcyAvIGogOiB1
bmRlZmluZWQ7Ci0gIH07Ci0gIGQzLnF1YW50aWxlID0gZnVuY3Rpb24odmFsdWVzLCBwKSB7Ci0g
ICAgdmFyIEggPSAodmFsdWVzLmxlbmd0aCAtIDEpICogcCArIDEsIGggPSBNYXRoLmZsb29yKEgp
LCB2ID0gK3ZhbHVlc1toIC0gMV0sIGUgPSBIIC0gaDsKLSAgICByZXR1cm4gZSA/IHYgKyBlICog
KHZhbHVlc1toXSAtIHYpIDogdjsKLSAgfTsKLSAgZDMubWVkaWFuID0gZnVuY3Rpb24oYXJyYXks
IGYpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGFycmF5ID0gYXJyYXkubWFwKGYp
OwotICAgIGFycmF5ID0gYXJyYXkuZmlsdGVyKGQzX251bWJlcik7Ci0gICAgcmV0dXJuIGFycmF5
Lmxlbmd0aCA/IGQzLnF1YW50aWxlKGFycmF5LnNvcnQoZDNfYXNjZW5kaW5nKSwgLjUpIDogdW5k
ZWZpbmVkOwotICB9OwotICBmdW5jdGlvbiBkM19iaXNlY3Rvcihjb21wYXJlKSB7Ci0gICAgcmV0
dXJuIHsKLSAgICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkgewotICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA8IDMpIGxvID0gMDsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPCA0KSBoaSA9IGEubGVuZ3RoOwotICAgICAgICB3aGlsZSAobG8gPCBoaSkgewotICAgICAg
ICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxOwotICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlk
XSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7IGVsc2UgaGkgPSBtaWQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGxvOwotICAgICAgfSwKLSAgICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywg
aGkpIHsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBsbyA9IDA7Ci0gICAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNCkgaGkgPSBhLmxlbmd0aDsKLSAgICAgICAgd2hpbGUg
KGxvIDwgaGkpIHsKLSAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTsKLSAgICAgICAg
ICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7IGVsc2UgbG8gPSBtaWQgKyAx
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsbzsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0g
IHZhciBkM19iaXNlY3QgPSBkM19iaXNlY3RvcihkM19hc2NlbmRpbmcpOwotICBkMy5iaXNlY3RM
ZWZ0ID0gZDNfYmlzZWN0LmxlZnQ7Ci0gIGQzLmJpc2VjdCA9IGQzLmJpc2VjdFJpZ2h0ID0gZDNf
YmlzZWN0LnJpZ2h0OwotICBkMy5iaXNlY3RvciA9IGZ1bmN0aW9uKGYpIHsKLSAgICByZXR1cm4g
ZDNfYmlzZWN0b3IoZi5sZW5ndGggPT09IDEgPyBmdW5jdGlvbihkLCB4KSB7Ci0gICAgICByZXR1
cm4gZDNfYXNjZW5kaW5nKGYoZCksIHgpOwotICAgIH0gOiBmKTsKLSAgfTsKLSAgZDMuc2h1ZmZs
ZSA9IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgdmFyIG0gPSBhcnJheS5sZW5ndGgsIHQsIGk7Ci0g
ICAgd2hpbGUgKG0pIHsKLSAgICAgIGkgPSBNYXRoLnJhbmRvbSgpICogbS0tIHwgMDsKLSAgICAg
IHQgPSBhcnJheVttXSwgYXJyYXlbbV0gPSBhcnJheVtpXSwgYXJyYXlbaV0gPSB0OwotICAgIH0K
LSAgICByZXR1cm4gYXJyYXk7Ci0gIH07Ci0gIGQzLnBlcm11dGUgPSBmdW5jdGlvbihhcnJheSwg
aW5kZXhlcykgewotICAgIHZhciBpID0gaW5kZXhlcy5sZW5ndGgsIHBlcm11dGVzID0gbmV3IEFy
cmF5KGkpOwotICAgIHdoaWxlIChpLS0pIHBlcm11dGVzW2ldID0gYXJyYXlbaW5kZXhlc1tpXV07
Ci0gICAgcmV0dXJuIHBlcm11dGVzOwotICB9OwotICBkMy5wYWlycyA9IGZ1bmN0aW9uKGFycmF5
KSB7Ci0gICAgdmFyIGkgPSAwLCBuID0gYXJyYXkubGVuZ3RoIC0gMSwgcDAsIHAxID0gYXJyYXlb
MF0sIHBhaXJzID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pOwotICAgIHdoaWxlIChpIDwgbikg
cGFpcnNbaV0gPSBbIHAwID0gcDEsIHAxID0gYXJyYXlbKytpXSBdOwotICAgIHJldHVybiBwYWly
czsKLSAgfTsKLSAgZDMuemlwID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCEobiA9IGFyZ3VtZW50
cy5sZW5ndGgpKSByZXR1cm4gW107Ci0gICAgZm9yICh2YXIgaSA9IC0xLCBtID0gZDMubWluKGFy
Z3VtZW50cywgZDNfemlwTGVuZ3RoKSwgemlwcyA9IG5ldyBBcnJheShtKTsgKytpIDwgbTsgKSB7
Ci0gICAgICBmb3IgKHZhciBqID0gLTEsIG4sIHppcCA9IHppcHNbaV0gPSBuZXcgQXJyYXkobik7
ICsraiA8IG47ICkgewotICAgICAgICB6aXBbal0gPSBhcmd1bWVudHNbal1baV07Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB6aXBzOwotICB9OwotICBmdW5jdGlvbiBkM196aXBMZW5ndGgo
ZCkgewotICAgIHJldHVybiBkLmxlbmd0aDsKLSAgfQotICBkMy50cmFuc3Bvc2UgPSBmdW5jdGlv
bihtYXRyaXgpIHsKLSAgICByZXR1cm4gZDMuemlwLmFwcGx5KGQzLCBtYXRyaXgpOwotICB9Owot
ICBkMy5rZXlzID0gZnVuY3Rpb24obWFwKSB7Ci0gICAgdmFyIGtleXMgPSBbXTsKLSAgICBmb3Ig
KHZhciBrZXkgaW4gbWFwKSBrZXlzLnB1c2goa2V5KTsKLSAgICByZXR1cm4ga2V5czsKLSAgfTsK
LSAgZDMudmFsdWVzID0gZnVuY3Rpb24obWFwKSB7Ci0gICAgdmFyIHZhbHVlcyA9IFtdOwotICAg
IGZvciAodmFyIGtleSBpbiBtYXApIHZhbHVlcy5wdXNoKG1hcFtrZXldKTsKLSAgICByZXR1cm4g
dmFsdWVzOwotICB9OwotICBkMy5lbnRyaWVzID0gZnVuY3Rpb24obWFwKSB7Ci0gICAgdmFyIGVu
dHJpZXMgPSBbXTsKLSAgICBmb3IgKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goewotICAg
ICAga2V5OiBrZXksCi0gICAgICB2YWx1ZTogbWFwW2tleV0KLSAgICB9KTsKLSAgICByZXR1cm4g
ZW50cmllczsKLSAgfTsKLSAgZDMubWVyZ2UgPSBmdW5jdGlvbihhcnJheXMpIHsKLSAgICB2YXIg
biA9IGFycmF5cy5sZW5ndGgsIG0sIGkgPSAtMSwgaiA9IDAsIG1lcmdlZCwgYXJyYXk7Ci0gICAg
d2hpbGUgKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDsKLSAgICBtZXJnZWQgPSBuZXcg
QXJyYXkoaik7Ci0gICAgd2hpbGUgKC0tbiA+PSAwKSB7Ci0gICAgICBhcnJheSA9IGFycmF5c1tu
XTsKLSAgICAgIG0gPSBhcnJheS5sZW5ndGg7Ci0gICAgICB3aGlsZSAoLS1tID49IDApIHsKLSAg
ICAgICAgbWVyZ2VkWy0tal0gPSBhcnJheVttXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IG1lcmdlZDsKLSAgfTsKLSAgdmFyIGFicyA9IE1hdGguYWJzOwotICBkMy5yYW5nZSA9IGZ1bmN0
aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7
Ci0gICAgICBzdGVwID0gMTsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgewotICAg
ICAgICBzdG9wID0gc3RhcnQ7Ci0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKChzdG9wIC0gc3RhcnQpIC8gc3RlcCA9PT0gSW5maW5pdHkpIHRocm93IG5ldyBFcnJv
cigiaW5maW5pdGUgcmFuZ2UiKTsKLSAgICB2YXIgcmFuZ2UgPSBbXSwgayA9IGQzX3JhbmdlX2lu
dGVnZXJTY2FsZShhYnMoc3RlcCkpLCBpID0gLTEsIGo7Ci0gICAgc3RhcnQgKj0gaywgc3RvcCAq
PSBrLCBzdGVwICo9IGs7Ci0gICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKGogPSBzdGFydCArIHN0
ZXAgKiArK2kpID4gc3RvcCkgcmFuZ2UucHVzaChqIC8gayk7IGVsc2Ugd2hpbGUgKChqID0gc3Rh
cnQgKyBzdGVwICogKytpKSA8IHN0b3ApIHJhbmdlLnB1c2goaiAvIGspOwotICAgIHJldHVybiBy
YW5nZTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfcmFuZ2VfaW50ZWdlclNjYWxlKHgpIHsKLSAgICB2
YXIgayA9IDE7Ci0gICAgd2hpbGUgKHggKiBrICUgMSkgayAqPSAxMDsKLSAgICByZXR1cm4gazsK
LSAgfQotICBmdW5jdGlvbiBkM19jbGFzcyhjdG9yLCBwcm9wZXJ0aWVzKSB7Ci0gICAgdHJ5IHsK
LSAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShjdG9yLnByb3RvdHlwZSwga2V5LCB7Ci0gICAgICAgICAgdmFsdWU6IHByb3Bl
cnRpZXNba2V5XSwKLSAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZQotICAgICAgICB9KTsKLSAg
ICAgIH0KLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBjdG9yLnByb3RvdHlwZSA9IHByb3BlcnRp
ZXM7Ci0gICAgfQotICB9Ci0gIGQzLm1hcCA9IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIHZhciBt
YXAgPSBuZXcgZDNfTWFwKCk7Ci0gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIGQzX01hcCkgb2Jq
ZWN0LmZvckVhY2goZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgbWFwLnNldChrZXksIHZh
bHVlKTsKLSAgICB9KTsgZWxzZSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwg
b2JqZWN0W2tleV0pOwotICAgIHJldHVybiBtYXA7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX01hcCgp
IHt9Ci0gIGQzX2NsYXNzKGQzX01hcCwgewotICAgIGhhczogZDNfbWFwX2hhcywKLSAgICBnZXQ6
IGZ1bmN0aW9uKGtleSkgewotICAgICAgcmV0dXJuIHRoaXNbZDNfbWFwX3ByZWZpeCArIGtleV07
Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgIHJldHVybiB0
aGlzW2QzX21hcF9wcmVmaXggKyBrZXldID0gdmFsdWU7Ci0gICAgfSwKLSAgICByZW1vdmU6IGQz
X21hcF9yZW1vdmUsCi0gICAga2V5czogZDNfbWFwX2tleXMsCi0gICAgdmFsdWVzOiBmdW5jdGlv
bigpIHsKLSAgICAgIHZhciB2YWx1ZXMgPSBbXTsKLSAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlv
bihrZXksIHZhbHVlKSB7Ci0gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTsKLSAgICAgIH0pOwot
ICAgICAgcmV0dXJuIHZhbHVlczsKLSAgICB9LAotICAgIGVudHJpZXM6IGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIGVudHJpZXMgPSBbXTsKLSAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihrZXks
IHZhbHVlKSB7Ci0gICAgICAgIGVudHJpZXMucHVzaCh7Ci0gICAgICAgICAga2V5OiBrZXksCi0g
ICAgICAgICAgdmFsdWU6IHZhbHVlCi0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gZW50cmllczsKLSAgICB9LAotICAgIHNpemU6IGQzX21hcF9zaXplLAotICAgIGVtcHR5OiBk
M19tYXBfZW1wdHksCi0gICAgZm9yRWFjaDogZnVuY3Rpb24oZikgewotICAgICAgZm9yICh2YXIg
a2V5IGluIHRoaXMpIGlmIChrZXkuY2hhckNvZGVBdCgwKSA9PT0gZDNfbWFwX3ByZWZpeENvZGUp
IGYuY2FsbCh0aGlzLCBrZXkuc3Vic3RyaW5nKDEpLCB0aGlzW2tleV0pOwotICAgIH0KLSAgfSk7
Ci0gIHZhciBkM19tYXBfcHJlZml4ID0gIlx4MDAiLCBkM19tYXBfcHJlZml4Q29kZSA9IGQzX21h
cF9wcmVmaXguY2hhckNvZGVBdCgwKTsKLSAgZnVuY3Rpb24gZDNfbWFwX2hhcyhrZXkpIHsKLSAg
ICByZXR1cm4gZDNfbWFwX3ByZWZpeCArIGtleSBpbiB0aGlzOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X21hcF9yZW1vdmUoa2V5KSB7Ci0gICAga2V5ID0gZDNfbWFwX3ByZWZpeCArIGtleTsKLSAgICBy
ZXR1cm4ga2V5IGluIHRoaXMgJiYgZGVsZXRlIHRoaXNba2V5XTsKLSAgfQotICBmdW5jdGlvbiBk
M19tYXBfa2V5cygpIHsKLSAgICB2YXIga2V5cyA9IFtdOwotICAgIHRoaXMuZm9yRWFjaChmdW5j
dGlvbihrZXkpIHsKLSAgICAgIGtleXMucHVzaChrZXkpOwotICAgIH0pOwotICAgIHJldHVybiBr
ZXlzOwotICB9Ci0gIGZ1bmN0aW9uIGQzX21hcF9zaXplKCkgewotICAgIHZhciBzaXplID0gMDsK
LSAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykgaWYgKGtleS5jaGFyQ29kZUF0KDApID09PSBkM19t
YXBfcHJlZml4Q29kZSkgKytzaXplOwotICAgIHJldHVybiBzaXplOwotICB9Ci0gIGZ1bmN0aW9u
IGQzX21hcF9lbXB0eSgpIHsKLSAgICBmb3IgKHZhciBrZXkgaW4gdGhpcykgaWYgKGtleS5jaGFy
Q29kZUF0KDApID09PSBkM19tYXBfcHJlZml4Q29kZSkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biB0cnVlOwotICB9Ci0gIGQzLm5lc3QgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgbmVzdCA9IHt9
LCBrZXlzID0gW10sIHNvcnRLZXlzID0gW10sIHNvcnRWYWx1ZXMsIHJvbGx1cDsKLSAgICBmdW5j
dGlvbiBtYXAobWFwVHlwZSwgYXJyYXksIGRlcHRoKSB7Ci0gICAgICBpZiAoZGVwdGggPj0ga2V5
cy5sZW5ndGgpIHJldHVybiByb2xsdXAgPyByb2xsdXAuY2FsbChuZXN0LCBhcnJheSkgOiBzb3J0
VmFsdWVzID8gYXJyYXkuc29ydChzb3J0VmFsdWVzKSA6IGFycmF5OwotICAgICAgdmFyIGkgPSAt
MSwgbiA9IGFycmF5Lmxlbmd0aCwga2V5ID0ga2V5c1tkZXB0aCsrXSwga2V5VmFsdWUsIG9iamVj
dCwgc2V0dGVyLCB2YWx1ZXNCeUtleSA9IG5ldyBkM19NYXAoKSwgdmFsdWVzOwotICAgICAgd2hp
bGUgKCsraSA8IG4pIHsKLSAgICAgICAgaWYgKHZhbHVlcyA9IHZhbHVlc0J5S2V5LmdldChrZXlW
YWx1ZSA9IGtleShvYmplY3QgPSBhcnJheVtpXSkpKSB7Ci0gICAgICAgICAgdmFsdWVzLnB1c2go
b2JqZWN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5
VmFsdWUsIFsgb2JqZWN0IF0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAobWFwVHlw
ZSkgewotICAgICAgICBvYmplY3QgPSBtYXBUeXBlKCk7Ci0gICAgICAgIHNldHRlciA9IGZ1bmN0
aW9uKGtleVZhbHVlLCB2YWx1ZXMpIHsKLSAgICAgICAgICBvYmplY3Quc2V0KGtleVZhbHVlLCBt
YXAobWFwVHlwZSwgdmFsdWVzLCBkZXB0aCkpOwotICAgICAgICB9OwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgb2JqZWN0ID0ge307Ci0gICAgICAgIHNldHRlciA9IGZ1bmN0aW9uKGtleVZhbHVl
LCB2YWx1ZXMpIHsKLSAgICAgICAgICBvYmplY3Rba2V5VmFsdWVdID0gbWFwKG1hcFR5cGUsIHZh
bHVlcywgZGVwdGgpOwotICAgICAgICB9OwotICAgICAgfQotICAgICAgdmFsdWVzQnlLZXkuZm9y
RWFjaChzZXR0ZXIpOwotICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
ZW50cmllcyhtYXAsIGRlcHRoKSB7Ci0gICAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHJl
dHVybiBtYXA7Ci0gICAgICB2YXIgYXJyYXkgPSBbXSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRo
KytdOwotICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24oa2V5LCBrZXlNYXApIHsKLSAgICAgICAg
YXJyYXkucHVzaCh7Ci0gICAgICAgICAga2V5OiBrZXksCi0gICAgICAgICAgdmFsdWVzOiBlbnRy
aWVzKGtleU1hcCwgZGVwdGgpCi0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4g
c29ydEtleSA/IGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICByZXR1cm4gc29y
dEtleShhLmtleSwgYi5rZXkpOwotICAgICAgfSkgOiBhcnJheTsKLSAgICB9Ci0gICAgbmVzdC5t
YXAgPSBmdW5jdGlvbihhcnJheSwgbWFwVHlwZSkgewotICAgICAgcmV0dXJuIG1hcChtYXBUeXBl
LCBhcnJheSwgMCk7Ci0gICAgfTsKLSAgICBuZXN0LmVudHJpZXMgPSBmdW5jdGlvbihhcnJheSkg
ewotICAgICAgcmV0dXJuIGVudHJpZXMobWFwKGQzLm1hcCwgYXJyYXksIDApLCAwKTsKLSAgICB9
OwotICAgIG5lc3Qua2V5ID0gZnVuY3Rpb24oZCkgewotICAgICAga2V5cy5wdXNoKGQpOwotICAg
ICAgcmV0dXJuIG5lc3Q7Ci0gICAgfTsKLSAgICBuZXN0LnNvcnRLZXlzID0gZnVuY3Rpb24ob3Jk
ZXIpIHsKLSAgICAgIHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsKLSAgICAgIHJl
dHVybiBuZXN0OwotICAgIH07Ci0gICAgbmVzdC5zb3J0VmFsdWVzID0gZnVuY3Rpb24ob3JkZXIp
IHsKLSAgICAgIHNvcnRWYWx1ZXMgPSBvcmRlcjsKLSAgICAgIHJldHVybiBuZXN0OwotICAgIH07
Ci0gICAgbmVzdC5yb2xsdXAgPSBmdW5jdGlvbihmKSB7Ci0gICAgICByb2xsdXAgPSBmOwotICAg
ICAgcmV0dXJuIG5lc3Q7Ci0gICAgfTsKLSAgICByZXR1cm4gbmVzdDsKLSAgfTsKLSAgZDMuc2V0
ID0gZnVuY3Rpb24oYXJyYXkpIHsKLSAgICB2YXIgc2V0ID0gbmV3IGQzX1NldCgpOwotICAgIGlm
IChhcnJheSkgZm9yICh2YXIgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGg7IGkgPCBuOyArK2kpIHNl
dC5hZGQoYXJyYXlbaV0pOwotICAgIHJldHVybiBzZXQ7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX1Nl
dCgpIHt9Ci0gIGQzX2NsYXNzKGQzX1NldCwgewotICAgIGhhczogZDNfbWFwX2hhcywKLSAgICBh
ZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzW2QzX21hcF9wcmVmaXggKyB2YWx1ZV0g
PSB0cnVlOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0sCi0gICAgcmVtb3ZlOiBmdW5jdGlv
bih2YWx1ZSkgewotICAgICAgdmFsdWUgPSBkM19tYXBfcHJlZml4ICsgdmFsdWU7Ci0gICAgICBy
ZXR1cm4gdmFsdWUgaW4gdGhpcyAmJiBkZWxldGUgdGhpc1t2YWx1ZV07Ci0gICAgfSwKLSAgICB2
YWx1ZXM6IGQzX21hcF9rZXlzLAotICAgIHNpemU6IGQzX21hcF9zaXplLAotICAgIGVtcHR5OiBk
M19tYXBfZW1wdHksCi0gICAgZm9yRWFjaDogZnVuY3Rpb24oZikgewotICAgICAgZm9yICh2YXIg
dmFsdWUgaW4gdGhpcykgaWYgKHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IGQzX21hcF9wcmVmaXhD
b2RlKSBmLmNhbGwodGhpcywgdmFsdWUuc3Vic3RyaW5nKDEpKTsKLSAgICB9Ci0gIH0pOwotICBk
My5iZWhhdmlvciA9IHt9OwotICBkMy5yZWJpbmQgPSBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSkg
ewotICAgIHZhciBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1ldGhvZDsKLSAgICB3aGls
ZSAoKytpIDwgbikgdGFyZ2V0W21ldGhvZCA9IGFyZ3VtZW50c1tpXV0gPSBkM19yZWJpbmQodGFy
Z2V0LCBzb3VyY2UsIHNvdXJjZVttZXRob2RdKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotICB9Owot
ICBmdW5jdGlvbiBkM19yZWJpbmQodGFyZ2V0LCBzb3VyY2UsIG1ldGhvZCkgewotICAgIHJldHVy
biBmdW5jdGlvbigpIHsKLSAgICAgIHZhciB2YWx1ZSA9IG1ldGhvZC5hcHBseShzb3VyY2UsIGFy
Z3VtZW50cyk7Ci0gICAgICByZXR1cm4gdmFsdWUgPT09IHNvdXJjZSA/IHRhcmdldCA6IHZhbHVl
OwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdmVuZG9yU3ltYm9sKG9iamVjdCwgbmFtZSkg
ewotICAgIGlmIChuYW1lIGluIG9iamVjdCkgcmV0dXJuIG5hbWU7Ci0gICAgbmFtZSA9IG5hbWUu
Y2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTsKLSAgICBmb3IgKHZh
ciBpID0gMCwgbiA9IGQzX3ZlbmRvclByZWZpeGVzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAg
ICAgdmFyIHByZWZpeE5hbWUgPSBkM192ZW5kb3JQcmVmaXhlc1tpXSArIG5hbWU7Ci0gICAgICBp
ZiAocHJlZml4TmFtZSBpbiBvYmplY3QpIHJldHVybiBwcmVmaXhOYW1lOwotICAgIH0KLSAgfQot
ICB2YXIgZDNfdmVuZG9yUHJlZml4ZXMgPSBbICJ3ZWJraXQiLCAibXMiLCAibW96IiwgIk1veiIs
ICJvIiwgIk8iIF07Ci0gIGZ1bmN0aW9uIGQzX25vb3AoKSB7fQotICBkMy5kaXNwYXRjaCA9IGZ1
bmN0aW9uKCkgewotICAgIHZhciBkaXNwYXRjaCA9IG5ldyBkM19kaXNwYXRjaCgpLCBpID0gLTEs
IG4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAgIHdoaWxlICgrK2kgPCBuKSBkaXNwYXRjaFthcmd1
bWVudHNbaV1dID0gZDNfZGlzcGF0Y2hfZXZlbnQoZGlzcGF0Y2gpOwotICAgIHJldHVybiBkaXNw
YXRjaDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfZGlzcGF0Y2goKSB7fQotICBkM19kaXNwYXRjaC5w
cm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgewotICAgIHZhciBpID0gdHlw
ZS5pbmRleE9mKCIuIiksIG5hbWUgPSAiIjsKLSAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICBuYW1l
ID0gdHlwZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyaW5nKDAs
IGkpOwotICAgIH0KLSAgICBpZiAodHlwZSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8g
dGhpc1t0eXBlXS5vbihuYW1lKSA6IHRoaXNbdHlwZV0ub24obmFtZSwgbGlzdGVuZXIpOwotICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7Ci0gICAgICBpZiAobGlzdGVuZXIgPT0gbnVs
bCkgZm9yICh0eXBlIGluIHRoaXMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
dHlwZSkpIHRoaXNbdHlwZV0ub24obmFtZSwgbnVsbCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2Rpc3BhdGNoX2V2ZW50KGRpc3BhdGNo
KSB7Ci0gICAgdmFyIGxpc3RlbmVycyA9IFtdLCBsaXN0ZW5lckJ5TmFtZSA9IG5ldyBkM19NYXAo
KTsKLSAgICBmdW5jdGlvbiBldmVudCgpIHsKLSAgICAgIHZhciB6ID0gbGlzdGVuZXJzLCBpID0g
LTEsIG4gPSB6Lmxlbmd0aCwgbDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAobCA9IHpbaV0u
b24pIGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHJldHVybiBkaXNwYXRjaDsKLSAg
ICB9Ci0gICAgZXZlbnQub24gPSBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikgewotICAgICAgdmFy
IGwgPSBsaXN0ZW5lckJ5TmFtZS5nZXQobmFtZSksIGk7Ci0gICAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA8IDIpIHJldHVybiBsICYmIGwub247Ci0gICAgICBpZiAobCkgewotICAgICAgICBsLm9u
ID0gbnVsbDsKLSAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKDAsIGkgPSBsaXN0
ZW5lcnMuaW5kZXhPZihsKSkuY29uY2F0KGxpc3RlbmVycy5zbGljZShpICsgMSkpOwotICAgICAg
ICBsaXN0ZW5lckJ5TmFtZS5yZW1vdmUobmFtZSk7Ci0gICAgICB9Ci0gICAgICBpZiAobGlzdGVu
ZXIpIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyQnlOYW1lLnNldChuYW1lLCB7Ci0gICAgICAgIG9u
OiBsaXN0ZW5lcgotICAgICAgfSkpOwotICAgICAgcmV0dXJuIGRpc3BhdGNoOwotICAgIH07Ci0g
ICAgcmV0dXJuIGV2ZW50OwotICB9Ci0gIGQzLmV2ZW50ID0gbnVsbDsKLSAgZnVuY3Rpb24gZDNf
ZXZlbnRQcmV2ZW50RGVmYXVsdCgpIHsKLSAgICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX2V2ZW50U291cmNlKCkgewotICAgIHZhciBlID0gZDMuZXZlbnQs
IHM7Ci0gICAgd2hpbGUgKHMgPSBlLnNvdXJjZUV2ZW50KSBlID0gczsKLSAgICByZXR1cm4gZTsK
LSAgfQotICBmdW5jdGlvbiBkM19ldmVudERpc3BhdGNoKHRhcmdldCkgewotICAgIHZhciBkaXNw
YXRjaCA9IG5ldyBkM19kaXNwYXRjaCgpLCBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0g
ICAgd2hpbGUgKCsraSA8IG4pIGRpc3BhdGNoW2FyZ3VtZW50c1tpXV0gPSBkM19kaXNwYXRjaF9l
dmVudChkaXNwYXRjaCk7Ci0gICAgZGlzcGF0Y2gub2YgPSBmdW5jdGlvbih0aGl6LCBhcmd1bWVu
dHopIHsKLSAgICAgIHJldHVybiBmdW5jdGlvbihlMSkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgIHZhciBlMCA9IGUxLnNvdXJjZUV2ZW50ID0gZDMuZXZlbnQ7Ci0gICAgICAgICAgZTEudGFy
Z2V0ID0gdGFyZ2V0OwotICAgICAgICAgIGQzLmV2ZW50ID0gZTE7Ci0gICAgICAgICAgZGlzcGF0
Y2hbZTEudHlwZV0uYXBwbHkodGhpeiwgYXJndW1lbnR6KTsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICBkMy5ldmVudCA9IGUwOwotICAgICAgICB9Ci0gICAgICB9OwotICAgIH07Ci0g
ICAgcmV0dXJuIGRpc3BhdGNoOwotICB9Ci0gIGQzLnJlcXVvdGUgPSBmdW5jdGlvbihzKSB7Ci0g
ICAgcmV0dXJuIHMucmVwbGFjZShkM19yZXF1b3RlX3JlLCAiXFwkJiIpOwotICB9OwotICB2YXIg
ZDNfcmVxdW90ZV9yZSA9IC9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZzsKLSAgdmFy
IGQzX3N1YmNsYXNzID0ge30uX19wcm90b19fID8gZnVuY3Rpb24ob2JqZWN0LCBwcm90b3R5cGUp
IHsKLSAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwotICB9IDogZnVuY3Rpb24ob2Jq
ZWN0LCBwcm90b3R5cGUpIHsKLSAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm90b3R5cGUpIG9i
amVjdFtwcm9wZXJ0eV0gPSBwcm90b3R5cGVbcHJvcGVydHldOwotICB9OwotICBmdW5jdGlvbiBk
M19zZWxlY3Rpb24oZ3JvdXBzKSB7Ci0gICAgZDNfc3ViY2xhc3MoZ3JvdXBzLCBkM19zZWxlY3Rp
b25Qcm90b3R5cGUpOwotICAgIHJldHVybiBncm91cHM7Ci0gIH0KLSAgdmFyIGQzX3NlbGVjdCA9
IGZ1bmN0aW9uKHMsIG4pIHsKLSAgICByZXR1cm4gbi5xdWVyeVNlbGVjdG9yKHMpOwotICB9LCBk
M19zZWxlY3RBbGwgPSBmdW5jdGlvbihzLCBuKSB7Ci0gICAgcmV0dXJuIG4ucXVlcnlTZWxlY3Rv
ckFsbChzKTsKLSAgfSwgZDNfc2VsZWN0TWF0Y2hlciA9IGQzX2RvY3VtZW50RWxlbWVudC5tYXRj
aGVzIHx8IGQzX2RvY3VtZW50RWxlbWVudFtkM192ZW5kb3JTeW1ib2woZDNfZG9jdW1lbnRFbGVt
ZW50LCAibWF0Y2hlc1NlbGVjdG9yIildLCBkM19zZWxlY3RNYXRjaGVzID0gZnVuY3Rpb24obiwg
cykgewotICAgIHJldHVybiBkM19zZWxlY3RNYXRjaGVyLmNhbGwobiwgcyk7Ci0gIH07Ci0gIGlm
ICh0eXBlb2YgU2l6emxlID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgZDNfc2VsZWN0ID0gZnVuY3Rp
b24ocywgbikgewotICAgICAgcmV0dXJuIFNpenpsZShzLCBuKVswXSB8fCBudWxsOwotICAgIH07
Ci0gICAgZDNfc2VsZWN0QWxsID0gU2l6emxlOwotICAgIGQzX3NlbGVjdE1hdGNoZXMgPSBTaXp6
bGUubWF0Y2hlc1NlbGVjdG9yOwotICB9Ci0gIGQzLnNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBkM19zZWxlY3Rpb25Sb290OwotICB9OwotICB2YXIgZDNfc2VsZWN0aW9uUHJv
dG90eXBlID0gZDMuc2VsZWN0aW9uLnByb3RvdHlwZSA9IFtdOwotICBkM19zZWxlY3Rpb25Qcm90
b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKLSAgICB2YXIgc3ViZ3JvdXBzID0g
W10sIHN1Ymdyb3VwLCBzdWJub2RlLCBncm91cCwgbm9kZTsKLSAgICBzZWxlY3RvciA9IGQzX3Nl
bGVjdGlvbl9zZWxlY3RvcihzZWxlY3Rvcik7Ci0gICAgZm9yICh2YXIgaiA9IC0xLCBtID0gdGhp
cy5sZW5ndGg7ICsraiA8IG07ICkgewotICAgICAgc3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBb
XSk7Ci0gICAgICBzdWJncm91cC5wYXJlbnROb2RlID0gKGdyb3VwID0gdGhpc1tqXSkucGFyZW50
Tm9kZTsKLSAgICAgIGZvciAodmFyIGkgPSAtMSwgbiA9IGdyb3VwLmxlbmd0aDsgKytpIDwgbjsg
KSB7Ci0gICAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHsKLSAgICAgICAgICBzdWJncm91cC5w
dXNoKHN1Ym5vZGUgPSBzZWxlY3Rvci5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGopKTsK
LSAgICAgICAgICBpZiAoc3Vibm9kZSAmJiAiX19kYXRhX18iIGluIG5vZGUpIHN1Ym5vZGUuX19k
YXRhX18gPSBub2RlLl9fZGF0YV9fOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN1Ymdy
b3VwLnB1c2gobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGQz
X3NlbGVjdGlvbihzdWJncm91cHMpOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxlY3Rpb25fc2Vs
ZWN0b3Ioc2VsZWN0b3IpIHsKLSAgICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rp
b24iID8gc2VsZWN0b3IgOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19zZWxlY3Qoc2Vs
ZWN0b3IsIHRoaXMpOwotICAgIH07Ci0gIH0KLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNlbGVj
dEFsbCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7Ci0gICAgdmFyIHN1Ymdyb3VwcyA9IFtdLCBzdWJn
cm91cCwgbm9kZTsKLSAgICBzZWxlY3RvciA9IGQzX3NlbGVjdGlvbl9zZWxlY3RvckFsbChzZWxl
Y3Rvcik7Ci0gICAgZm9yICh2YXIgaiA9IC0xLCBtID0gdGhpcy5sZW5ndGg7ICsraiA8IG07ICkg
ewotICAgICAgZm9yICh2YXIgZ3JvdXAgPSB0aGlzW2pdLCBpID0gLTEsIG4gPSBncm91cC5sZW5n
dGg7ICsraSA8IG47ICkgewotICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7Ci0gICAgICAg
ICAgc3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBkM19hcnJheShzZWxlY3Rvci5jYWxsKG5vZGUs
IG5vZGUuX19kYXRhX18sIGksIGopKSk7Ci0gICAgICAgICAgc3ViZ3JvdXAucGFyZW50Tm9kZSA9
IG5vZGU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGQzX3NlbGVjdGlv
bihzdWJncm91cHMpOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxlY3Rpb25fc2VsZWN0b3JBbGwo
c2VsZWN0b3IpIHsKLSAgICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iID8g
c2VsZWN0b3IgOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19zZWxlY3RBbGwoc2VsZWN0
b3IsIHRoaXMpOwotICAgIH07Ci0gIH0KLSAgdmFyIGQzX25zUHJlZml4ID0gewotICAgIHN2Zzog
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwKLSAgICB4aHRtbDogImh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiLAotICAgIHhsaW5rOiAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu
ayIsCi0gICAgeG1sOiAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKLSAg
ICB4bWxuczogImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIgotICB9OwotICBkMy5ucyA9
IHsKLSAgICBwcmVmaXg6IGQzX25zUHJlZml4LAotICAgIHF1YWxpZnk6IGZ1bmN0aW9uKG5hbWUp
IHsKLSAgICAgIHZhciBpID0gbmFtZS5pbmRleE9mKCI6IiksIHByZWZpeCA9IG5hbWU7Ci0gICAg
ICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGkpOwot
ICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgfQotICAgICAgcmV0
dXJuIGQzX25zUHJlZml4Lmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7Ci0gICAgICAgIHNwYWNl
OiBkM19uc1ByZWZpeFtwcmVmaXhdLAotICAgICAgICBsb2NhbDogbmFtZQotICAgICAgfSA6IG5h
bWU7Ci0gICAgfQotICB9OwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9u
KG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7Ci0gICAgICBp
ZiAodHlwZW9mIG5hbWUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgIHZhciBub2RlID0gdGhpcy5u
b2RlKCk7Ci0gICAgICAgIG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpOwotICAgICAgICByZXR1
cm4gbmFtZS5sb2NhbCA/IG5vZGUuZ2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSwgbmFtZS5sb2Nh
bCkgOiBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTsKLSAgICAgIH0KLSAgICAgIGZvciAodmFsdWUg
aW4gbmFtZSkgdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9hdHRyKHZhbHVlLCBuYW1lW3ZhbHVlXSkp
OwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goZDNfc2Vs
ZWN0aW9uX2F0dHIobmFtZSwgdmFsdWUpKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9u
X2F0dHIobmFtZSwgdmFsdWUpIHsKLSAgICBuYW1lID0gZDMubnMucXVhbGlmeShuYW1lKTsKLSAg
ICBmdW5jdGlvbiBhdHRyTnVsbCgpIHsKLSAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUp
OwotICAgIH0KLSAgICBmdW5jdGlvbiBhdHRyTnVsbE5TKCkgewotICAgICAgdGhpcy5yZW1vdmVB
dHRyaWJ1dGVOUyhuYW1lLnNwYWNlLCBuYW1lLmxvY2FsKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
YXR0ckNvbnN0YW50KCkgewotICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwot
ICAgIH0KLSAgICBmdW5jdGlvbiBhdHRyQ29uc3RhbnROUygpIHsKLSAgICAgIHRoaXMuc2V0QXR0
cmlidXRlTlMobmFtZS5zcGFjZSwgbmFtZS5sb2NhbCwgdmFsdWUpOwotICAgIH0KLSAgICBmdW5j
dGlvbiBhdHRyRnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgeCA9IHZhbHVlLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7Ci0gICAgICBpZiAoeCA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1l
KTsgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB4KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
YXR0ckZ1bmN0aW9uTlMoKSB7Ci0gICAgICB2YXIgeCA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgICBpZiAoeCA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG5hbWUu
c3BhY2UsIG5hbWUubG9jYWwpOyBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSwg
bmFtZS5sb2NhbCwgeCk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbmFtZS5s
b2NhbCA/IGF0dHJOdWxsTlMgOiBhdHRyTnVsbCA6IHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9u
IiA/IG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbiA6IG5hbWUubG9j
YWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudDsKLSAgfQotICBmdW5jdGlvbiBkM19j
b2xsYXBzZShzKSB7Ci0gICAgcmV0dXJuIHMudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCAiICIpOwot
ICB9Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5jbGFzc2VkID0gZnVuY3Rpb24obmFtZSwgdmFs
dWUpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsKLSAgICAgIGlmICh0eXBlb2Yg
bmFtZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKSwgbiA9
IChuYW1lID0gZDNfc2VsZWN0aW9uX2NsYXNzZXMobmFtZSkpLmxlbmd0aCwgaSA9IC0xOwotICAg
ICAgICBpZiAodmFsdWUgPSBub2RlLmNsYXNzTGlzdCkgewotICAgICAgICAgIHdoaWxlICgrK2kg
PCBuKSBpZiAoIXZhbHVlLmNvbnRhaW5zKG5hbWVbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsK
LSAgICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFkM19zZWxlY3Rpb25fY2xhc3NlZFJlKG5h
bWVbaV0pLnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBmb3IgKHZhbHVlIGluIG5hbWUpIHRoaXMuZWFjaChk
M19zZWxlY3Rpb25fY2xhc3NlZCh2YWx1ZSwgbmFtZVt2YWx1ZV0pKTsKLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9jbGFzc2VkKG5h
bWUsIHZhbHVlKSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VkUmUobmFt
ZSkgewotICAgIHJldHVybiBuZXcgUmVnRXhwKCIoPzpefFxccyspIiArIGQzLnJlcXVvdGUobmFt
ZSkgKyAiKD86XFxzK3wkKSIsICJnIik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uX2Ns
YXNzZXMobmFtZSkgewotICAgIHJldHVybiAobmFtZSArICIiKS50cmltKCkuc3BsaXQoL158XHMr
Lyk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uX2NsYXNzZWQobmFtZSwgdmFsdWUpIHsK
LSAgICBuYW1lID0gZDNfc2VsZWN0aW9uX2NsYXNzZXMobmFtZSkubWFwKGQzX3NlbGVjdGlvbl9j
bGFzc2VkTmFtZSk7Ci0gICAgdmFyIG4gPSBuYW1lLmxlbmd0aDsKLSAgICBmdW5jdGlvbiBjbGFz
c2VkQ29uc3RhbnQoKSB7Ci0gICAgICB2YXIgaSA9IC0xOwotICAgICAgd2hpbGUgKCsraSA8IG4p
IG5hbWVbaV0odGhpcywgdmFsdWUpOwotICAgIH0KLSAgICBmdW5jdGlvbiBjbGFzc2VkRnVuY3Rp
b24oKSB7Ci0gICAgICB2YXIgaSA9IC0xLCB4ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBuYW1lW2ldKHRoaXMsIHgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iID8gY2xhc3NlZEZ1bmN0aW9uIDogY2xh
c3NlZENvbnN0YW50OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9jbGFzc2VkTmFtZShu
YW1lKSB7Ci0gICAgdmFyIHJlID0gZDNfc2VsZWN0aW9uX2NsYXNzZWRSZShuYW1lKTsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24obm9kZSwgdmFsdWUpIHsKLSAgICAgIGlmIChjID0gbm9kZS5jbGFzc0xp
c3QpIHJldHVybiB2YWx1ZSA/IGMuYWRkKG5hbWUpIDogYy5yZW1vdmUobmFtZSk7Ci0gICAgICB2
YXIgYyA9IG5vZGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpIHx8ICIiOwotICAgICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAgIHJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICAgIGlmICghcmUudGVzdChjKSkg
bm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgZDNfY29sbGFwc2UoYyArICIgIiArIG5hbWUpKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGQzX2Nv
bGxhcHNlKGMucmVwbGFjZShyZSwgIiAiKSkpOwotICAgICAgfQotICAgIH07Ci0gIH0KLSAgZDNf
c2VsZWN0aW9uUHJvdG90eXBlLnN0eWxlID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5
KSB7Ci0gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAgIGlmIChuIDwgMykgewotICAg
ICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5nIikgewotICAgICAgICBpZiAobiA8IDIpIHZh
bHVlID0gIiI7Ci0gICAgICAgIGZvciAocHJpb3JpdHkgaW4gbmFtZSkgdGhpcy5lYWNoKGQzX3Nl
bGVjdGlvbl9zdHlsZShwcmlvcml0eSwgbmFtZVtwcmlvcml0eV0sIHZhbHVlKSk7Ci0gICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgaWYgKG4gPCAyKSByZXR1cm4gZDNfd2luZG93
LmdldENvbXB1dGVkU3R5bGUodGhpcy5ub2RlKCksIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFt
ZSk7Ci0gICAgICBwcmlvcml0eSA9ICIiOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGQz
X3NlbGVjdGlvbl9zdHlsZShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpKTsKLSAgfTsKLSAgZnVuY3Rp
b24gZDNfc2VsZWN0aW9uX3N0eWxlKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkgewotICAgIGZ1bmN0
aW9uIHN0eWxlTnVsbCgpIHsKLSAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQoKSB7Ci0gICAgICB0aGlzLnN0eWxl
LnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7Ci0gICAgfQotICAgIGZ1bmN0aW9u
IHN0eWxlRnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgeCA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgICBpZiAoeCA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5h
bWUpOyBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgeCwgcHJpb3JpdHkpOwotICAg
IH0KLSAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHN0eWxlTnVsbCA6IHR5cGVvZiB2YWx1ZSA9
PT0gImZ1bmN0aW9uIiA/IHN0eWxlRnVuY3Rpb24gOiBzdHlsZUNvbnN0YW50OwotICB9Ci0gIGQz
X3NlbGVjdGlvblByb3RvdHlwZS5wcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0g
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7Ci0gICAgICBpZiAodHlwZW9mIG5hbWUgPT09
ICJzdHJpbmciKSByZXR1cm4gdGhpcy5ub2RlKClbbmFtZV07Ci0gICAgICBmb3IgKHZhbHVlIGlu
IG5hbWUpIHRoaXMuZWFjaChkM19zZWxlY3Rpb25fcHJvcGVydHkodmFsdWUsIG5hbWVbdmFsdWVd
KSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChkM19z
ZWxlY3Rpb25fcHJvcGVydHkobmFtZSwgdmFsdWUpKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2Vs
ZWN0aW9uX3Byb3BlcnR5KG5hbWUsIHZhbHVlKSB7Ci0gICAgZnVuY3Rpb24gcHJvcGVydHlOdWxs
KCkgewotICAgICAgZGVsZXRlIHRoaXNbbmFtZV07Ci0gICAgfQotICAgIGZ1bmN0aW9uIHByb3Bl
cnR5Q29uc3RhbnQoKSB7Ci0gICAgICB0aGlzW25hbWVdID0gdmFsdWU7Ci0gICAgfQotICAgIGZ1
bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgeCA9IHZhbHVlLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0gICAgICBpZiAoeCA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTsg
ZWxzZSB0aGlzW25hbWVdID0geDsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBw
cm9wZXJ0eU51bGwgOiB0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIgPyBwcm9wZXJ0eUZ1bmN0
aW9uIDogcHJvcGVydHlDb25zdGFudDsKLSAgfQotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUudGV4
dCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlz
LmVhY2godHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iID8gZnVuY3Rpb24oKSB7Ci0gICAgICB2
YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB0aGlzLnRleHRDb250
ZW50ID0gdiA9PSBudWxsID8gIiIgOiB2OwotICAgIH0gOiB2YWx1ZSA9PSBudWxsID8gZnVuY3Rp
b24oKSB7Ci0gICAgICB0aGlzLnRleHRDb250ZW50ID0gIiI7Ci0gICAgfSA6IGZ1bmN0aW9uKCkg
ewotICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlOwotICAgIH0pIDogdGhpcy5ub2RlKCku
dGV4dENvbnRlbnQ7Ci0gIH07Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5odG1sID0gZnVuY3Rp
b24odmFsdWUpIHsKLSAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMuZWFjaCh0eXBl
b2YgdmFsdWUgPT09ICJmdW5jdGlvbiIgPyBmdW5jdGlvbigpIHsKLSAgICAgIHZhciB2ID0gdmFs
dWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBu
dWxsID8gIiIgOiB2OwotICAgIH0gOiB2YWx1ZSA9PSBudWxsID8gZnVuY3Rpb24oKSB7Ci0gICAg
ICB0aGlzLmlubmVySFRNTCA9ICIiOwotICAgIH0gOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMu
aW5uZXJIVE1MID0gdmFsdWU7Ci0gICAgfSkgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7Ci0gIH07
Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAg
bmFtZSA9IGQzX3NlbGVjdGlvbl9jcmVhdG9yKG5hbWUpOwotICAgIHJldHVybiB0aGlzLnNlbGVj
dChmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKG5hbWUuYXBwbHko
dGhpcywgYXJndW1lbnRzKSk7Ci0gICAgfSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlv
bl9jcmVhdG9yKG5hbWUpIHsKLSAgICByZXR1cm4gdHlwZW9mIG5hbWUgPT09ICJmdW5jdGlvbiIg
PyBuYW1lIDogKG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWUpKS5sb2NhbCA/IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZS5z
cGFjZSwgbmFtZS5sb2NhbCk7Ci0gICAgfSA6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRo
aXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksIG5hbWUp
OwotICAgIH07Ci0gIH0KLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9u
KG5hbWUsIGJlZm9yZSkgewotICAgIG5hbWUgPSBkM19zZWxlY3Rpb25fY3JlYXRvcihuYW1lKTsK
LSAgICBiZWZvcmUgPSBkM19zZWxlY3Rpb25fc2VsZWN0b3IoYmVmb3JlKTsKLSAgICByZXR1cm4g
dGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUo
bmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBiZWZvcmUuYXBwbHkodGhpcywgYXJndW1lbnRz
KSB8fCBudWxsKTsKLSAgICB9KTsKLSAgfTsKLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLnJlbW92
ZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwotICAgICAgaWYgKHBhcmVudCkgcGFyZW50
LnJlbW92ZUNoaWxkKHRoaXMpOwotICAgIH0pOwotICB9OwotICBkM19zZWxlY3Rpb25Qcm90b3R5
cGUuZGF0YSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKLSAgICB2YXIgaSA9IC0xLCBuID0gdGhp
cy5sZW5ndGgsIGdyb3VwLCBub2RlOwotICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgewotICAg
ICAgdmFsdWUgPSBuZXcgQXJyYXkobiA9IChncm91cCA9IHRoaXNbMF0pLmxlbmd0aCk7Ci0gICAg
ICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7Ci0gICAg
ICAgICAgdmFsdWVbaV0gPSBub2RlLl9fZGF0YV9fOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGJpbmQoZ3JvdXAsIGdyb3VwRGF0
YSkgewotICAgICAgdmFyIGksIG4gPSBncm91cC5sZW5ndGgsIG0gPSBncm91cERhdGEubGVuZ3Ro
LCBuMCA9IE1hdGgubWluKG4sIG0pLCB1cGRhdGVOb2RlcyA9IG5ldyBBcnJheShtKSwgZW50ZXJO
b2RlcyA9IG5ldyBBcnJheShtKSwgZXhpdE5vZGVzID0gbmV3IEFycmF5KG4pLCBub2RlLCBub2Rl
RGF0YTsKLSAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgdmFyIG5vZGVCeUtleVZhbHVlID0gbmV3
IGQzX01hcCgpLCBkYXRhQnlLZXlWYWx1ZSA9IG5ldyBkM19NYXAoKSwga2V5VmFsdWVzID0gW10s
IGtleVZhbHVlOwotICAgICAgICBmb3IgKGkgPSAtMTsgKytpIDwgbjsgKSB7Ci0gICAgICAgICAg
a2V5VmFsdWUgPSBrZXkuY2FsbChub2RlID0gZ3JvdXBbaV0sIG5vZGUuX19kYXRhX18sIGkpOwot
ICAgICAgICAgIGlmIChub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUpKSB7Ci0gICAgICAgICAg
ICBleGl0Tm9kZXNbaV0gPSBub2RlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBu
b2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsIG5vZGUpOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBrZXlWYWx1ZXMucHVzaChrZXlWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0g
LTE7ICsraSA8IG07ICkgewotICAgICAgICAgIGtleVZhbHVlID0ga2V5LmNhbGwoZ3JvdXBEYXRh
LCBub2RlRGF0YSA9IGdyb3VwRGF0YVtpXSwgaSk7Ci0gICAgICAgICAgaWYgKG5vZGUgPSBub2Rl
QnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWUpKSB7Ci0gICAgICAgICAgICB1cGRhdGVOb2Rlc1tpXSA9
IG5vZGU7Ci0gICAgICAgICAgICBub2RlLl9fZGF0YV9fID0gbm9kZURhdGE7Ci0gICAgICAgICAg
fSBlbHNlIGlmICghZGF0YUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkgewotICAgICAgICAgICAg
ZW50ZXJOb2Rlc1tpXSA9IGQzX3NlbGVjdGlvbl9kYXRhTm9kZShub2RlRGF0YSk7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGRhdGFCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZURhdGEpOwot
ICAgICAgICAgIG5vZGVCeUtleVZhbHVlLnJlbW92ZShrZXlWYWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yIChpID0gLTE7ICsraSA8IG47ICkgewotICAgICAgICAgIGlmIChub2RlQnlLZXlW
YWx1ZS5oYXMoa2V5VmFsdWVzW2ldKSkgewotICAgICAgICAgICAgZXhpdE5vZGVzW2ldID0gZ3Jv
dXBbaV07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBm
b3IgKGkgPSAtMTsgKytpIDwgbjA7ICkgewotICAgICAgICAgIG5vZGUgPSBncm91cFtpXTsKLSAg
ICAgICAgICBub2RlRGF0YSA9IGdyb3VwRGF0YVtpXTsKLSAgICAgICAgICBpZiAobm9kZSkgewot
ICAgICAgICAgICAgbm9kZS5fX2RhdGFfXyA9IG5vZGVEYXRhOwotICAgICAgICAgICAgdXBkYXRl
Tm9kZXNbaV0gPSBub2RlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbnRlck5v
ZGVzW2ldID0gZDNfc2VsZWN0aW9uX2RhdGFOb2RlKG5vZGVEYXRhKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yICg7aSA8IG07ICsraSkgewotICAgICAgICAgIGVudGVyTm9k
ZXNbaV0gPSBkM19zZWxlY3Rpb25fZGF0YU5vZGUoZ3JvdXBEYXRhW2ldKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKDtpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgZXhpdE5vZGVzW2ldID0gZ3Jv
dXBbaV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVudGVyTm9kZXMudXBkYXRlID0gdXBk
YXRlTm9kZXM7Ci0gICAgICBlbnRlck5vZGVzLnBhcmVudE5vZGUgPSB1cGRhdGVOb2Rlcy5wYXJl
bnROb2RlID0gZXhpdE5vZGVzLnBhcmVudE5vZGUgPSBncm91cC5wYXJlbnROb2RlOwotICAgICAg
ZW50ZXIucHVzaChlbnRlck5vZGVzKTsKLSAgICAgIHVwZGF0ZS5wdXNoKHVwZGF0ZU5vZGVzKTsK
LSAgICAgIGV4aXQucHVzaChleGl0Tm9kZXMpOwotICAgIH0KLSAgICB2YXIgZW50ZXIgPSBkM19z
ZWxlY3Rpb25fZW50ZXIoW10pLCB1cGRhdGUgPSBkM19zZWxlY3Rpb24oW10pLCBleGl0ID0gZDNf
c2VsZWN0aW9uKFtdKTsKLSAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7Ci0g
ICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBiaW5kKGdyb3VwID0gdGhpc1tpXSwgdmFs
dWUuY2FsbChncm91cCwgZ3JvdXAucGFyZW50Tm9kZS5fX2RhdGFfXywgaSkpOwotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBiaW5kKGdyb3Vw
ID0gdGhpc1tpXSwgdmFsdWUpOwotICAgICAgfQotICAgIH0KLSAgICB1cGRhdGUuZW50ZXIgPSBm
dW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBlbnRlcjsKLSAgICB9OwotICAgIHVwZGF0ZS5leGl0
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZXhpdDsKLSAgICB9OwotICAgIHJldHVybiB1
cGRhdGU7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9kYXRhTm9kZShkYXRhKSB7Ci0g
ICAgcmV0dXJuIHsKLSAgICAgIF9fZGF0YV9fOiBkYXRhCi0gICAgfTsKLSAgfQotICBkM19zZWxl
Y3Rpb25Qcm90b3R5cGUuZGF0dW0gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHJldHVybiBhcmd1
bWVudHMubGVuZ3RoID8gdGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLCB2YWx1ZSkgOiB0aGlzLnBy
b3BlcnR5KCJfX2RhdGFfXyIpOwotICB9OwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUuZmlsdGVy
ID0gZnVuY3Rpb24oZmlsdGVyKSB7Ci0gICAgdmFyIHN1Ymdyb3VwcyA9IFtdLCBzdWJncm91cCwg
Z3JvdXAsIG5vZGU7Ci0gICAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICJmdW5jdGlvbiIpIGZpbHRl
ciA9IGQzX3NlbGVjdGlvbl9maWx0ZXIoZmlsdGVyKTsKLSAgICBmb3IgKHZhciBqID0gMCwgbSA9
IHRoaXMubGVuZ3RoOyBqIDwgbTsgaisrKSB7Ci0gICAgICBzdWJncm91cHMucHVzaChzdWJncm91
cCA9IFtdKTsKLSAgICAgIHN1Ymdyb3VwLnBhcmVudE5vZGUgPSAoZ3JvdXAgPSB0aGlzW2pdKS5w
YXJlbnROb2RlOwotICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBu
OyBpKyspIHsKLSAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIGZpbHRlci5jYWxsKG5v
ZGUsIG5vZGUuX19kYXRhX18sIGksIGopKSB7Ci0gICAgICAgICAgc3ViZ3JvdXAucHVzaChub2Rl
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uKHN1
Ymdyb3Vwcyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NlbGVjdGlvbl9maWx0ZXIoc2VsZWN0b3Ip
IHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfc2VsZWN0TWF0Y2hl
cyh0aGlzLCBzZWxlY3Rvcik7Ci0gICAgfTsKLSAgfQotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUu
b3JkZXIgPSBmdW5jdGlvbigpIHsKLSAgICBmb3IgKHZhciBqID0gLTEsIG0gPSB0aGlzLmxlbmd0
aDsgKytqIDwgbTsgKSB7Ci0gICAgICBmb3IgKHZhciBncm91cCA9IHRoaXNbal0sIGkgPSBncm91
cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOyApIHsKLSAgICAg
ICAgaWYgKG5vZGUgPSBncm91cFtpXSkgewotICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09
IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4
dCk7Ci0gICAgICAgICAgbmV4dCA9IG5vZGU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gIH07Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5zb3J0ID0gZnVu
Y3Rpb24oY29tcGFyYXRvcikgewotICAgIGNvbXBhcmF0b3IgPSBkM19zZWxlY3Rpb25fc29ydENv
bXBhcmF0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICBmb3IgKHZhciBqID0gLTEsIG0g
PSB0aGlzLmxlbmd0aDsgKytqIDwgbTsgKSB0aGlzW2pdLnNvcnQoY29tcGFyYXRvcik7Ci0gICAg
cmV0dXJuIHRoaXMub3JkZXIoKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uX3NvcnRD
b21wYXJhdG9yKGNvbXBhcmF0b3IpIHsKLSAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIGNvbXBh
cmF0b3IgPSBkM19hc2NlbmRpbmc7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAg
IHJldHVybiBhICYmIGIgPyBjb21wYXJhdG9yKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEg
LSAhYjsKLSAgICB9OwotICB9Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5lYWNoID0gZnVuY3Rp
b24oY2FsbGJhY2spIHsKLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcywgZnVuY3Rp
b24obm9kZSwgaSwgaikgewotICAgICAgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9f
LCBpLCBqKTsKLSAgICB9KTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uX2VhY2goZ3Jv
dXBzLCBjYWxsYmFjaykgewotICAgIGZvciAodmFyIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsg
aiA8IG07IGorKykgewotICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBu
ID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmIChub2RlID0g
Z3JvdXBbaV0pIGNhbGxiYWNrKG5vZGUsIGksIGopOwotICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gZ3JvdXBzOwotICB9Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24o
Y2FsbGJhY2spIHsKLSAgICB2YXIgYXJncyA9IGQzX2FycmF5KGFyZ3VtZW50cyk7Ci0gICAgY2Fs
bGJhY2suYXBwbHkoYXJnc1swXSA9IHRoaXMsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9
OwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gIXRoaXMubm9kZSgpOwotICB9OwotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUubm9kZSA9IGZ1
bmN0aW9uKCkgewotICAgIGZvciAodmFyIGogPSAwLCBtID0gdGhpcy5sZW5ndGg7IGogPCBtOyBq
KyspIHsKLSAgICAgIGZvciAodmFyIGdyb3VwID0gdGhpc1tqXSwgaSA9IDAsIG4gPSBncm91cC5s
ZW5ndGg7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTsKLSAgICAg
ICAgaWYgKG5vZGUpIHJldHVybiBub2RlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVs
bDsKLSAgfTsKLSAgZDNfc2VsZWN0aW9uUHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgbiA9IDA7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgKytuOwotICAg
IH0pOwotICAgIHJldHVybiBuOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxlY3Rpb25fZW50ZXIo
c2VsZWN0aW9uKSB7Ci0gICAgZDNfc3ViY2xhc3Moc2VsZWN0aW9uLCBkM19zZWxlY3Rpb25fZW50
ZXJQcm90b3R5cGUpOwotICAgIHJldHVybiBzZWxlY3Rpb247Ci0gIH0KLSAgdmFyIGQzX3NlbGVj
dGlvbl9lbnRlclByb3RvdHlwZSA9IFtdOwotICBkMy5zZWxlY3Rpb24uZW50ZXIgPSBkM19zZWxl
Y3Rpb25fZW50ZXI7Ci0gIGQzLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGUgPSBkM19zZWxlY3Rp
b25fZW50ZXJQcm90b3R5cGU7Ci0gIGQzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5hcHBlbmQg
PSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuYXBwZW5kOwotICBkM19zZWxlY3Rpb25fZW50ZXJQcm90
b3R5cGUuZW1wdHkgPSBkM19zZWxlY3Rpb25Qcm90b3R5cGUuZW1wdHk7Ci0gIGQzX3NlbGVjdGlv
bl9lbnRlclByb3RvdHlwZS5ub2RlID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLm5vZGU7Ci0gIGQz
X3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5jYWxsID0gZDNfc2VsZWN0aW9uUHJvdG90eXBlLmNh
bGw7Ci0gIGQzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5zaXplID0gZDNfc2VsZWN0aW9uUHJv
dG90eXBlLnNpemU7Ci0gIGQzX3NlbGVjdGlvbl9lbnRlclByb3RvdHlwZS5zZWxlY3QgPSBmdW5j
dGlvbihzZWxlY3RvcikgewotICAgIHZhciBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIHN1Ym5v
ZGUsIHVwZ3JvdXAsIGdyb3VwLCBub2RlOwotICAgIGZvciAodmFyIGogPSAtMSwgbSA9IHRoaXMu
bGVuZ3RoOyArK2ogPCBtOyApIHsKLSAgICAgIHVwZ3JvdXAgPSAoZ3JvdXAgPSB0aGlzW2pdKS51
cGRhdGU7Ci0gICAgICBzdWJncm91cHMucHVzaChzdWJncm91cCA9IFtdKTsKLSAgICAgIHN1Ymdy
b3VwLnBhcmVudE5vZGUgPSBncm91cC5wYXJlbnROb2RlOwotICAgICAgZm9yICh2YXIgaSA9IC0x
LCBuID0gZ3JvdXAubGVuZ3RoOyArK2kgPCBuOyApIHsKLSAgICAgICAgaWYgKG5vZGUgPSBncm91
cFtpXSkgewotICAgICAgICAgIHN1Ymdyb3VwLnB1c2godXBncm91cFtpXSA9IHN1Ym5vZGUgPSBz
ZWxlY3Rvci5jYWxsKGdyb3VwLnBhcmVudE5vZGUsIG5vZGUuX19kYXRhX18sIGksIGopKTsKLSAg
ICAgICAgICBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXzsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICBzdWJncm91cC5wdXNoKG51bGwpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBkM19zZWxlY3Rpb24oc3ViZ3JvdXBzKTsKLSAgfTsKLSAgZDNfc2Vs
ZWN0aW9uX2VudGVyUHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkgewot
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgYmVmb3JlID0gZDNfc2VsZWN0aW9uX2VudGVy
SW5zZXJ0QmVmb3JlKHRoaXMpOwotICAgIHJldHVybiBkM19zZWxlY3Rpb25Qcm90b3R5cGUuaW5z
ZXJ0LmNhbGwodGhpcywgbmFtZSwgYmVmb3JlKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0
aW9uX2VudGVySW5zZXJ0QmVmb3JlKGVudGVyKSB7Ci0gICAgdmFyIGkwLCBqMDsKLSAgICByZXR1
cm4gZnVuY3Rpb24oZCwgaSwgaikgewotICAgICAgdmFyIGdyb3VwID0gZW50ZXJbal0udXBkYXRl
LCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOwotICAgICAgaWYgKGogIT0gajApIGowID0gaiwgaTAg
PSAwOwotICAgICAgaWYgKGkgPj0gaTApIGkwID0gaSArIDE7Ci0gICAgICB3aGlsZSAoIShub2Rl
ID0gZ3JvdXBbaTBdKSAmJiArK2kwIDwgbikgOwotICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfTsK
LSAgfQotICBkM19zZWxlY3Rpb25Qcm90b3R5cGUudHJhbnNpdGlvbiA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciBpZCA9IGQzX3RyYW5zaXRpb25Jbmhlcml0SWQgfHwgKytkM190cmFuc2l0aW9uSWQs
IHN1Ymdyb3VwcyA9IFtdLCBzdWJncm91cCwgbm9kZSwgdHJhbnNpdGlvbiA9IGQzX3RyYW5zaXRp
b25Jbmhlcml0IHx8IHsKLSAgICAgIHRpbWU6IERhdGUubm93KCksCi0gICAgICBlYXNlOiBkM19l
YXNlX2N1YmljSW5PdXQsCi0gICAgICBkZWxheTogMCwKLSAgICAgIGR1cmF0aW9uOiAyNTAKLSAg
ICB9OwotICAgIGZvciAodmFyIGogPSAtMSwgbSA9IHRoaXMubGVuZ3RoOyArK2ogPCBtOyApIHsK
LSAgICAgIHN1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pOwotICAgICAgZm9yICh2YXIgZ3Jv
dXAgPSB0aGlzW2pdLCBpID0gLTEsIG4gPSBncm91cC5sZW5ndGg7ICsraSA8IG47ICkgewotICAg
ICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBkM190cmFuc2l0aW9uTm9kZShub2RlLCBpLCBpZCwg
dHJhbnNpdGlvbik7Ci0gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBkM190cmFuc2l0aW9uKHN1Ymdyb3VwcywgaWQpOwotICB9OwotICBkM19z
ZWxlY3Rpb25Qcm90b3R5cGUuaW50ZXJydXB0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRo
aXMuZWFjaChkM19zZWxlY3Rpb25faW50ZXJydXB0KTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2Vs
ZWN0aW9uX2ludGVycnVwdCgpIHsKLSAgICB2YXIgbG9jayA9IHRoaXMuX190cmFuc2l0aW9uX187
Ci0gICAgaWYgKGxvY2spICsrbG9jay5hY3RpdmU7Ci0gIH0KLSAgZDMuc2VsZWN0ID0gZnVuY3Rp
b24obm9kZSkgewotICAgIHZhciBncm91cCA9IFsgdHlwZW9mIG5vZGUgPT09ICJzdHJpbmciID8g
ZDNfc2VsZWN0KG5vZGUsIGQzX2RvY3VtZW50KSA6IG5vZGUgXTsKLSAgICBncm91cC5wYXJlbnRO
b2RlID0gZDNfZG9jdW1lbnRFbGVtZW50OwotICAgIHJldHVybiBkM19zZWxlY3Rpb24oWyBncm91
cCBdKTsKLSAgfTsKLSAgZDMuc2VsZWN0QWxsID0gZnVuY3Rpb24obm9kZXMpIHsKLSAgICB2YXIg
Z3JvdXAgPSBkM19hcnJheSh0eXBlb2Ygbm9kZXMgPT09ICJzdHJpbmciID8gZDNfc2VsZWN0QWxs
KG5vZGVzLCBkM19kb2N1bWVudCkgOiBub2Rlcyk7Ci0gICAgZ3JvdXAucGFyZW50Tm9kZSA9IGQz
X2RvY3VtZW50RWxlbWVudDsKLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uKFsgZ3JvdXAgXSk7Ci0g
IH07Ci0gIHZhciBkM19zZWxlY3Rpb25Sb290ID0gZDMuc2VsZWN0KGQzX2RvY3VtZW50RWxlbWVu
dCk7Ci0gIGQzX3NlbGVjdGlvblByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVy
LCBjYXB0dXJlKSB7Ci0gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAgIGlmIChuIDwg
MykgewotICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIikgewotICAgICAgICBpZiAo
biA8IDIpIGxpc3RlbmVyID0gZmFsc2U7Ci0gICAgICAgIGZvciAoY2FwdHVyZSBpbiB0eXBlKSB0
aGlzLmVhY2goZDNfc2VsZWN0aW9uX29uKGNhcHR1cmUsIHR5cGVbY2FwdHVyZV0sIGxpc3RlbmVy
KSk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgICAgaWYgKG4gPCAyKSByZXR1
cm4gKG4gPSB0aGlzLm5vZGUoKVsiX19vbiIgKyB0eXBlXSkgJiYgbi5fOwotICAgICAgY2FwdHVy
ZSA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGQzX3NlbGVjdGlvbl9vbih0
eXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpOwotICB9OwotICBmdW5jdGlvbiBkM19zZWxlY3Rpb25f
b24odHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpIHsKLSAgICB2YXIgbmFtZSA9ICJfX29uIiArIHR5
cGUsIGkgPSB0eXBlLmluZGV4T2YoIi4iKSwgd3JhcCA9IGQzX3NlbGVjdGlvbl9vbkxpc3RlbmVy
OwotICAgIGlmIChpID4gMCkgdHlwZSA9IHR5cGUuc3Vic3RyaW5nKDAsIGkpOwotICAgIHZhciBm
aWx0ZXIgPSBkM19zZWxlY3Rpb25fb25GaWx0ZXJzLmdldCh0eXBlKTsKLSAgICBpZiAoZmlsdGVy
KSB0eXBlID0gZmlsdGVyLCB3cmFwID0gZDNfc2VsZWN0aW9uX29uRmlsdGVyOwotICAgIGZ1bmN0
aW9uIG9uUmVtb3ZlKCkgewotICAgICAgdmFyIGwgPSB0aGlzW25hbWVdOwotICAgICAgaWYgKGwp
IHsKLSAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGwsIGwuJCk7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzW25hbWVdOwotICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiBvbkFk
ZCgpIHsKLSAgICAgIHZhciBsID0gd3JhcChsaXN0ZW5lciwgZDNfYXJyYXkoYXJndW1lbnRzKSk7
Ci0gICAgICBvblJlbW92ZS5jYWxsKHRoaXMpOwotICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVy
KHR5cGUsIHRoaXNbbmFtZV0gPSBsLCBsLiQgPSBjYXB0dXJlKTsKLSAgICAgIGwuXyA9IGxpc3Rl
bmVyOwotICAgIH0KLSAgICBmdW5jdGlvbiByZW1vdmVBbGwoKSB7Ci0gICAgICB2YXIgcmUgPSBu
ZXcgUmVnRXhwKCJeX19vbihbXi5dKykiICsgZDMucmVxdW90ZSh0eXBlKSArICIkIiksIG1hdGNo
OwotICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7Ci0gICAgICAgIGlmIChtYXRjaCA9IG5h
bWUubWF0Y2gocmUpKSB7Ci0gICAgICAgICAgdmFyIGwgPSB0aGlzW25hbWVdOwotICAgICAgICAg
IHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYXRjaFsxXSwgbCwgbC4kKTsKLSAgICAgICAgICBk
ZWxldGUgdGhpc1tuYW1lXTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
aSA/IGxpc3RlbmVyID8gb25BZGQgOiBvblJlbW92ZSA6IGxpc3RlbmVyID8gZDNfbm9vcCA6IHJl
bW92ZUFsbDsKLSAgfQotICB2YXIgZDNfc2VsZWN0aW9uX29uRmlsdGVycyA9IGQzLm1hcCh7Ci0g
ICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCi0gICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0Igot
ICB9KTsKLSAgZDNfc2VsZWN0aW9uX29uRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKLSAg
ICBpZiAoIm9uIiArIGsgaW4gZDNfZG9jdW1lbnQpIGQzX3NlbGVjdGlvbl9vbkZpbHRlcnMucmVt
b3ZlKGspOwotICB9KTsKLSAgZnVuY3Rpb24gZDNfc2VsZWN0aW9uX29uTGlzdGVuZXIobGlzdGVu
ZXIsIGFyZ3VtZW50eikgewotICAgIHJldHVybiBmdW5jdGlvbihlKSB7Ci0gICAgICB2YXIgbyA9
IGQzLmV2ZW50OwotICAgICAgZDMuZXZlbnQgPSBlOwotICAgICAgYXJndW1lbnR6WzBdID0gdGhp
cy5fX2RhdGFfXzsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFy
Z3VtZW50eik7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBkMy5ldmVudCA9IG87Ci0gICAg
ICB9Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19zZWxlY3Rpb25fb25GaWx0ZXIobGlzdGVu
ZXIsIGFyZ3VtZW50eikgewotICAgIHZhciBsID0gZDNfc2VsZWN0aW9uX29uTGlzdGVuZXIobGlz
dGVuZXIsIGFyZ3VtZW50eik7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKLSAgICAgIHZhciB0
YXJnZXQgPSB0aGlzLCByZWxhdGVkID0gZS5yZWxhdGVkVGFyZ2V0OwotICAgICAgaWYgKCFyZWxh
dGVkIHx8IHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9z
aXRpb24odGFyZ2V0KSAmIDgpKSB7Ci0gICAgICAgIGwuY2FsbCh0YXJnZXQsIGUpOwotICAgICAg
fQotICAgIH07Ci0gIH0KLSAgdmFyIGQzX2V2ZW50X2RyYWdTZWxlY3QgPSAib25zZWxlY3RzdGFy
dCIgaW4gZDNfZG9jdW1lbnQgPyBudWxsIDogZDNfdmVuZG9yU3ltYm9sKGQzX2RvY3VtZW50RWxl
bWVudC5zdHlsZSwgInVzZXJTZWxlY3QiKSwgZDNfZXZlbnRfZHJhZ0lkID0gMDsKLSAgZnVuY3Rp
b24gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKCkgewotICAgIHZhciBuYW1lID0gIi5kcmFnc3VwcHJl
c3MtIiArICsrZDNfZXZlbnRfZHJhZ0lkLCBjbGljayA9ICJjbGljayIgKyBuYW1lLCB3ID0gZDMu
c2VsZWN0KGQzX3dpbmRvdykub24oInRvdWNobW92ZSIgKyBuYW1lLCBkM19ldmVudFByZXZlbnRE
ZWZhdWx0KS5vbigiZHJhZ3N0YXJ0IiArIG5hbWUsIGQzX2V2ZW50UHJldmVudERlZmF1bHQpLm9u
KCJzZWxlY3RzdGFydCIgKyBuYW1lLCBkM19ldmVudFByZXZlbnREZWZhdWx0KTsKLSAgICBpZiAo
ZDNfZXZlbnRfZHJhZ1NlbGVjdCkgewotICAgICAgdmFyIHN0eWxlID0gZDNfZG9jdW1lbnRFbGVt
ZW50LnN0eWxlLCBzZWxlY3QgPSBzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XTsKLSAgICAgIHN0
eWxlW2QzX2V2ZW50X2RyYWdTZWxlY3RdID0gIm5vbmUiOwotICAgIH0KLSAgICByZXR1cm4gZnVu
Y3Rpb24oc3VwcHJlc3NDbGljaykgewotICAgICAgdy5vbihuYW1lLCBudWxsKTsKLSAgICAgIGlm
IChkM19ldmVudF9kcmFnU2VsZWN0KSBzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XSA9IHNlbGVj
dDsKLSAgICAgIGlmIChzdXBwcmVzc0NsaWNrKSB7Ci0gICAgICAgIGZ1bmN0aW9uIG9mZigpIHsK
LSAgICAgICAgICB3Lm9uKGNsaWNrLCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICB3Lm9uKGNs
aWNrLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICBkM19ldmVudFByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgICAgb2ZmKCk7Ci0gICAgICAgIH0sIHRydWUpOwotICAgICAgICBzZXRUaW1lb3V0KG9m
ZiwgMCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotICBkMy5tb3VzZSA9IGZ1bmN0aW9uKGNvbnRh
aW5lcikgewotICAgIHJldHVybiBkM19tb3VzZVBvaW50KGNvbnRhaW5lciwgZDNfZXZlbnRTb3Vy
Y2UoKSk7Ci0gIH07Ci0gIHZhciBkM19tb3VzZV9idWc0NDA4MyA9IC9XZWJLaXQvLnRlc3QoZDNf
d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpID8gLTEgOiAwOwotICBmdW5jdGlvbiBkM19tb3Vz
ZVBvaW50KGNvbnRhaW5lciwgZSkgewotICAgIGlmIChlLmNoYW5nZWRUb3VjaGVzKSBlID0gZS5j
aGFuZ2VkVG91Y2hlc1swXTsKLSAgICB2YXIgc3ZnID0gY29udGFpbmVyLm93bmVyU1ZHRWxlbWVu
dCB8fCBjb250YWluZXI7Ci0gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkgewotICAgICAgdmFy
IHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7Ci0gICAgICBpZiAoZDNfbW91c2VfYnVnNDQw
ODMgPCAwICYmIChkM193aW5kb3cuc2Nyb2xsWCB8fCBkM193aW5kb3cuc2Nyb2xsWSkpIHsKLSAg
ICAgICAgc3ZnID0gZDMuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7Ci0gICAg
ICAgICAgcG9zaXRpb246ICJhYnNvbHV0ZSIsCi0gICAgICAgICAgdG9wOiAwLAotICAgICAgICAg
IGxlZnQ6IDAsCi0gICAgICAgICAgbWFyZ2luOiAwLAotICAgICAgICAgIHBhZGRpbmc6IDAsCi0g
ICAgICAgICAgYm9yZGVyOiAibm9uZSIKLSAgICAgICAgfSwgImltcG9ydGFudCIpOwotICAgICAg
ICB2YXIgY3RtID0gc3ZnWzBdWzBdLmdldFNjcmVlbkNUTSgpOwotICAgICAgICBkM19tb3VzZV9i
dWc0NDA4MyA9ICEoY3RtLmYgfHwgY3RtLmUpOwotICAgICAgICBzdmcucmVtb3ZlKCk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoZDNfbW91c2VfYnVnNDQwODMpIHBvaW50LnggPSBlLnBhZ2VYLCBwb2lu
dC55ID0gZS5wYWdlWTsgZWxzZSBwb2ludC54ID0gZS5jbGllbnRYLCAKLSAgICAgIHBvaW50Lnkg
PSBlLmNsaWVudFk7Ci0gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShjb250YWlu
ZXIuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTsKLSAgICAgIHJldHVybiBbIHBvaW50LngsIHBv
aW50LnkgXTsKLSAgICB9Ci0gICAgdmFyIHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gICAgcmV0dXJuIFsgZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gY29udGFpbmVy
LmNsaWVudExlZnQsIGUuY2xpZW50WSAtIHJlY3QudG9wIC0gY29udGFpbmVyLmNsaWVudFRvcCBd
OwotICB9Ci0gIGQzLnRvdWNoZXMgPSBmdW5jdGlvbihjb250YWluZXIsIHRvdWNoZXMpIHsKLSAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHRvdWNoZXMgPSBkM19ldmVudFNvdXJjZSgpLnRv
dWNoZXM7Ci0gICAgcmV0dXJuIHRvdWNoZXMgPyBkM19hcnJheSh0b3VjaGVzKS5tYXAoZnVuY3Rp
b24odG91Y2gpIHsKLSAgICAgIHZhciBwb2ludCA9IGQzX21vdXNlUG9pbnQoY29udGFpbmVyLCB0
b3VjaCk7Ci0gICAgICBwb2ludC5pZGVudGlmaWVyID0gdG91Y2guaWRlbnRpZmllcjsKLSAgICAg
IHJldHVybiBwb2ludDsKLSAgICB9KSA6IFtdOwotICB9OwotICBkMy5iZWhhdmlvci5kcmFnID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGV2ZW50ID0gZDNfZXZlbnREaXNwYXRjaChkcmFnLCAiZHJh
ZyIsICJkcmFnc3RhcnQiLCAiZHJhZ2VuZCIpLCBvcmlnaW4gPSBudWxsLCBtb3VzZWRvd24gPSBk
cmFnc3RhcnQoZDNfbm9vcCwgZDMubW91c2UsIGQzX2JlaGF2aW9yX2RyYWdNb3VzZVN1YmplY3Qs
ICJtb3VzZW1vdmUiLCAibW91c2V1cCIpLCB0b3VjaHN0YXJ0ID0gZHJhZ3N0YXJ0KGQzX2JlaGF2
aW9yX2RyYWdUb3VjaElkLCBkMy50b3VjaCwgZDNfYmVoYXZpb3JfZHJhZ1RvdWNoU3ViamVjdCwg
InRvdWNobW92ZSIsICJ0b3VjaGVuZCIpOwotICAgIGZ1bmN0aW9uIGRyYWcoKSB7Ci0gICAgICB0
aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsIG1vdXNlZG93bikub24oInRvdWNoc3RhcnQuZHJhZyIs
IHRvdWNoc3RhcnQpOwotICAgIH0KLSAgICBmdW5jdGlvbiBkcmFnc3RhcnQoaWQsIHBvc2l0aW9u
LCBzdWJqZWN0LCBtb3ZlLCBlbmQpIHsKLSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIHRoYXQgPSB0aGlzLCB0YXJnZXQgPSBkMy5ldmVudC50YXJnZXQsIHBhcmVudCA9IHRo
YXQucGFyZW50Tm9kZSwgZGlzcGF0Y2ggPSBldmVudC5vZih0aGF0LCBhcmd1bWVudHMpLCBkcmFn
Z2VkID0gMCwgZHJhZ0lkID0gaWQoKSwgZHJhZ05hbWUgPSAiLmRyYWciICsgKGRyYWdJZCA9PSBu
dWxsID8gIiIgOiAiLSIgKyBkcmFnSWQpLCBkcmFnT2Zmc2V0LCBkcmFnU3ViamVjdCA9IGQzLnNl
bGVjdChzdWJqZWN0KCkpLm9uKG1vdmUgKyBkcmFnTmFtZSwgbW92ZWQpLm9uKGVuZCArIGRyYWdO
YW1lLCBlbmRlZCksIGRyYWdSZXN0b3JlID0gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKCksIHBvc2l0
aW9uMCA9IHBvc2l0aW9uKHBhcmVudCwgZHJhZ0lkKTsKLSAgICAgICAgaWYgKG9yaWdpbikgewot
ICAgICAgICAgIGRyYWdPZmZzZXQgPSBvcmlnaW4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTsKLSAg
ICAgICAgICBkcmFnT2Zmc2V0ID0gWyBkcmFnT2Zmc2V0LnggLSBwb3NpdGlvbjBbMF0sIGRyYWdP
ZmZzZXQueSAtIHBvc2l0aW9uMFsxXSBdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGRy
YWdPZmZzZXQgPSBbIDAsIDAgXTsKLSAgICAgICAgfQotICAgICAgICBkaXNwYXRjaCh7Ci0gICAg
ICAgICAgdHlwZTogImRyYWdzdGFydCIKLSAgICAgICAgfSk7Ci0gICAgICAgIGZ1bmN0aW9uIG1v
dmVkKCkgewotICAgICAgICAgIHZhciBwb3NpdGlvbjEgPSBwb3NpdGlvbihwYXJlbnQsIGRyYWdJ
ZCksIGR4LCBkeTsKLSAgICAgICAgICBpZiAoIXBvc2l0aW9uMSkgcmV0dXJuOwotICAgICAgICAg
IGR4ID0gcG9zaXRpb24xWzBdIC0gcG9zaXRpb24wWzBdOwotICAgICAgICAgIGR5ID0gcG9zaXRp
b24xWzFdIC0gcG9zaXRpb24wWzFdOwotICAgICAgICAgIGRyYWdnZWQgfD0gZHggfCBkeTsKLSAg
ICAgICAgICBwb3NpdGlvbjAgPSBwb3NpdGlvbjE7Ci0gICAgICAgICAgZGlzcGF0Y2goewotICAg
ICAgICAgICAgdHlwZTogImRyYWciLAotICAgICAgICAgICAgeDogcG9zaXRpb24xWzBdICsgZHJh
Z09mZnNldFswXSwKLSAgICAgICAgICAgIHk6IHBvc2l0aW9uMVsxXSArIGRyYWdPZmZzZXRbMV0s
Ci0gICAgICAgICAgICBkeDogZHgsCi0gICAgICAgICAgICBkeTogZHkKLSAgICAgICAgICB9KTsK
LSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBlbmRlZCgpIHsKLSAgICAgICAgICBpZiAoIXBv
c2l0aW9uKHBhcmVudCwgZHJhZ0lkKSkgcmV0dXJuOwotICAgICAgICAgIGRyYWdTdWJqZWN0Lm9u
KG1vdmUgKyBkcmFnTmFtZSwgbnVsbCkub24oZW5kICsgZHJhZ05hbWUsIG51bGwpOwotICAgICAg
ICAgIGRyYWdSZXN0b3JlKGRyYWdnZWQgJiYgZDMuZXZlbnQudGFyZ2V0ID09PSB0YXJnZXQpOwot
ICAgICAgICAgIGRpc3BhdGNoKHsKLSAgICAgICAgICAgIHR5cGU6ICJkcmFnZW5kIgotICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9OwotICAgIH0KLSAgICBkcmFnLm9yaWdpbiA9IGZ1
bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWdpbjsK
LSAgICAgIG9yaWdpbiA9IHg7Ci0gICAgICByZXR1cm4gZHJhZzsKLSAgICB9OwotICAgIHJldHVy
biBkMy5yZWJpbmQoZHJhZywgZXZlbnQsICJvbiIpOwotICB9OwotICBmdW5jdGlvbiBkM19iZWhh
dmlvcl9kcmFnVG91Y2hJZCgpIHsKLSAgICByZXR1cm4gZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXNb
MF0uaWRlbnRpZmllcjsKLSAgfQotICBmdW5jdGlvbiBkM19iZWhhdmlvcl9kcmFnVG91Y2hTdWJq
ZWN0KCkgewotICAgIHJldHVybiBkMy5ldmVudC50YXJnZXQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
YmVoYXZpb3JfZHJhZ01vdXNlU3ViamVjdCgpIHsKLSAgICByZXR1cm4gZDNfd2luZG93OwotICB9
Ci0gIHZhciDPgCA9IE1hdGguUEksIM+EID0gMiAqIM+ALCBoYWxmz4AgPSDPgCAvIDIsIM61ID0g
MWUtNiwgzrUyID0gzrUgKiDOtSwgZDNfcmFkaWFucyA9IM+AIC8gMTgwLCBkM19kZWdyZWVzID0g
MTgwIC8gz4A7Ci0gIGZ1bmN0aW9uIGQzX3Nnbih4KSB7Ci0gICAgcmV0dXJuIHggPiAwID8gMSA6
IHggPCAwID8gLTEgOiAwOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Nyb3NzMmQoYSwgYiwgYykgewot
ICAgIHJldHVybiAoYlswXSAtIGFbMF0pICogKGNbMV0gLSBhWzFdKSAtIChiWzFdIC0gYVsxXSkg
KiAoY1swXSAtIGFbMF0pOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Fjb3MoeCkgewotICAgIHJldHVy
biB4ID4gMSA/IDAgOiB4IDwgLTEgPyDPgCA6IE1hdGguYWNvcyh4KTsKLSAgfQotICBmdW5jdGlv
biBkM19hc2luKHgpIHsKLSAgICByZXR1cm4geCA+IDEgPyBoYWxmz4AgOiB4IDwgLTEgPyAtaGFs
Zs+AIDogTWF0aC5hc2luKHgpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NpbmgoeCkgewotICAgIHJl
dHVybiAoKHggPSBNYXRoLmV4cCh4KSkgLSAxIC8geCkgLyAyOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2Nvc2goeCkgewotICAgIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgKyAxIC8geCkgLyAyOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX3RhbmgoeCkgewotICAgIHJldHVybiAoKHggPSBNYXRoLmV4cCgy
ICogeCkpIC0gMSkgLyAoeCArIDEpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2hhdmVyc2luKHgpIHsK
LSAgICByZXR1cm4gKHggPSBNYXRoLnNpbih4IC8gMikpICogeDsKLSAgfQotICB2YXIgz4EgPSBN
YXRoLlNRUlQyLCDPgTIgPSAyLCDPgTQgPSA0OwotICBkMy5pbnRlcnBvbGF0ZVpvb20gPSBmdW5j
dGlvbihwMCwgcDEpIHsKLSAgICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAw
WzJdLCB1eDEgPSBwMVswXSwgdXkxID0gcDFbMV0sIHcxID0gcDFbMl07Ci0gICAgdmFyIGR4ID0g
dXgxIC0gdXgwLCBkeSA9IHV5MSAtIHV5MCwgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSwgZDEgPSBN
YXRoLnNxcnQoZDIpLCBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIM+BNCAqIGQyKSAvICgyICog
dzAgKiDPgTIgKiBkMSksIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gz4E0ICogZDIpIC8gKDIg
KiB3MSAqIM+BMiAqIGQxKSwgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0g
YjApLCByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSksIGRyID0gcjEg
LSByMCwgUyA9IChkciB8fCBNYXRoLmxvZyh3MSAvIHcwKSkgLyDPgTsKLSAgICBmdW5jdGlvbiBp
bnRlcnBvbGF0ZSh0KSB7Ci0gICAgICB2YXIgcyA9IHQgKiBTOwotICAgICAgaWYgKGRyKSB7Ci0g
ICAgICAgIHZhciBjb3NocjAgPSBkM19jb3NoKHIwKSwgdSA9IHcwIC8gKM+BMiAqIGQxKSAqIChj
b3NocjAgKiBkM190YW5oKM+BICogcyArIHIwKSAtIGQzX3NpbmgocjApKTsKLSAgICAgICAgcmV0
dXJuIFsgdXgwICsgdSAqIGR4LCB1eTAgKyB1ICogZHksIHcwICogY29zaHIwIC8gZDNfY29zaCjP
gSAqIHMgKyByMCkgXTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBbIHV4MCArIHQgKiBkeCwgdXkw
ICsgdCAqIGR5LCB3MCAqIE1hdGguZXhwKM+BICogcykgXTsKLSAgICB9Ci0gICAgaW50ZXJwb2xh
dGUuZHVyYXRpb24gPSBTICogMWUzOwotICAgIHJldHVybiBpbnRlcnBvbGF0ZTsKLSAgfTsKLSAg
ZDMuYmVoYXZpb3Iuem9vbSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB2aWV3ID0gewotICAgICAg
eDogMCwKLSAgICAgIHk6IDAsCi0gICAgICBrOiAxCi0gICAgfSwgdHJhbnNsYXRlMCwgY2VudGVy
MCwgY2VudGVyLCBzaXplID0gWyA5NjAsIDUwMCBdLCBzY2FsZUV4dGVudCA9IGQzX2JlaGF2aW9y
X3pvb21JbmZpbml0eSwgbW91c2Vkb3duID0gIm1vdXNlZG93bi56b29tIiwgbW91c2Vtb3ZlID0g
Im1vdXNlbW92ZS56b29tIiwgbW91c2V1cCA9ICJtb3VzZXVwLnpvb20iLCBtb3VzZXdoZWVsVGlt
ZXIsIHRvdWNoc3RhcnQgPSAidG91Y2hzdGFydC56b29tIiwgdG91Y2h0aW1lLCBldmVudCA9IGQz
X2V2ZW50RGlzcGF0Y2goem9vbSwgInpvb21zdGFydCIsICJ6b29tIiwgInpvb21lbmQiKSwgeDAs
IHgxLCB5MCwgeTE7Ci0gICAgZnVuY3Rpb24gem9vbShnKSB7Ci0gICAgICBnLm9uKG1vdXNlZG93
biwgbW91c2Vkb3duZWQpLm9uKGQzX2JlaGF2aW9yX3pvb21XaGVlbCArICIuem9vbSIsIG1vdXNl
d2hlZWxlZCkub24oImRibGNsaWNrLnpvb20iLCBkYmxjbGlja2VkKS5vbih0b3VjaHN0YXJ0LCB0
b3VjaHN0YXJ0ZWQpOwotICAgIH0KLSAgICB6b29tLmV2ZW50ID0gZnVuY3Rpb24oZykgewotICAg
ICAgZy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZGlzcGF0Y2ggPSBldmVudC5vZih0
aGlzLCBhcmd1bWVudHMpLCB2aWV3MSA9IHZpZXc7Ci0gICAgICAgIGlmIChkM190cmFuc2l0aW9u
SW5oZXJpdElkKSB7Ci0gICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNo
KCJzdGFydC56b29tIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2aWV3ID0gdGhpcy5fX2No
YXJ0X18gfHwgewotICAgICAgICAgICAgICB4OiAwLAotICAgICAgICAgICAgICB5OiAwLAotICAg
ICAgICAgICAgICBrOiAxCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgem9vbXN0YXJ0ZWQo
ZGlzcGF0Y2gpOwotICAgICAgICAgIH0pLnR3ZWVuKCJ6b29tOnpvb20iLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHZhciBkeCA9IHNpemVbMF0sIGR5ID0gc2l6ZVsxXSwgY3ggPSBkeCAvIDIs
IGN5ID0gZHkgLyAyLCBpID0gZDMuaW50ZXJwb2xhdGVab29tKFsgKGN4IC0gdmlldy54KSAvIHZp
ZXcuaywgKGN5IC0gdmlldy55KSAvIHZpZXcuaywgZHggLyB2aWV3LmsgXSwgWyAoY3ggLSB2aWV3
MS54KSAvIHZpZXcxLmssIChjeSAtIHZpZXcxLnkpIC8gdmlldzEuaywgZHggLyB2aWV3MS5rIF0p
OwotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgdmFyIGwg
PSBpKHQpLCBrID0gZHggLyBsWzJdOwotICAgICAgICAgICAgICB0aGlzLl9fY2hhcnRfXyA9IHZp
ZXcgPSB7Ci0gICAgICAgICAgICAgICAgeDogY3ggLSBsWzBdICogaywKLSAgICAgICAgICAgICAg
ICB5OiBjeSAtIGxbMV0gKiBrLAotICAgICAgICAgICAgICAgIGs6IGsKLSAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgem9vbWVkKGRpc3BhdGNoKTsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgfSkuZWFjaCgiZW5kLnpvb20iLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHpvb21l
bmRlZChkaXNwYXRjaCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgdGhpcy5fX2NoYXJ0X18gPSB2aWV3OwotICAgICAgICAgIHpvb21zdGFydGVkKGRpc3BhdGNo
KTsKLSAgICAgICAgICB6b29tZWQoZGlzcGF0Y2gpOwotICAgICAgICAgIHpvb21lbmRlZChkaXNw
YXRjaCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH07Ci0gICAgem9vbS50cmFuc2xhdGUg
PSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbIHZp
ZXcueCwgdmlldy55IF07Ci0gICAgICB2aWV3ID0gewotICAgICAgICB4OiArX1swXSwKLSAgICAg
ICAgeTogK19bMV0sCi0gICAgICAgIGs6IHZpZXcuawotICAgICAgfTsKLSAgICAgIHJlc2NhbGUo
KTsKLSAgICAgIHJldHVybiB6b29tOwotICAgIH07Ci0gICAgem9vbS5zY2FsZSA9IGZ1bmN0aW9u
KF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHZpZXcuazsKLSAgICAg
IHZpZXcgPSB7Ci0gICAgICAgIHg6IHZpZXcueCwKLSAgICAgICAgeTogdmlldy55LAotICAgICAg
ICBrOiArXwotICAgICAgfTsKLSAgICAgIHJlc2NhbGUoKTsKLSAgICAgIHJldHVybiB6b29tOwot
ICAgIH07Ci0gICAgem9vbS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICgh
YXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNjYWxlRXh0ZW50OwotICAgICAgc2NhbGVFeHRlbnQg
PSBfID09IG51bGwgPyBkM19iZWhhdmlvcl96b29tSW5maW5pdHkgOiBbICtfWzBdLCArX1sxXSBd
OwotICAgICAgcmV0dXJuIHpvb207Ci0gICAgfTsKLSAgICB6b29tLmNlbnRlciA9IGZ1bmN0aW9u
KF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNlbnRlcjsKLSAgICAg
IGNlbnRlciA9IF8gJiYgWyArX1swXSwgK19bMV0gXTsKLSAgICAgIHJldHVybiB6b29tOwotICAg
IH07Ci0gICAgem9vbS5zaXplID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMu
bGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAgICAgIHNpemUgPSBfICYmIFsgK19bMF0sICtfWzFdIF07
Ci0gICAgICByZXR1cm4gem9vbTsKLSAgICB9OwotICAgIHpvb20ueCA9IGZ1bmN0aW9uKHopIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHgxOwotICAgICAgeDEgPSB6Owot
ICAgICAgeDAgPSB6LmNvcHkoKTsKLSAgICAgIHZpZXcgPSB7Ci0gICAgICAgIHg6IDAsCi0gICAg
ICAgIHk6IDAsCi0gICAgICAgIGs6IDEKLSAgICAgIH07Ci0gICAgICByZXR1cm4gem9vbTsKLSAg
ICB9OwotICAgIHpvb20ueSA9IGZ1bmN0aW9uKHopIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxl
bmd0aCkgcmV0dXJuIHkxOwotICAgICAgeTEgPSB6OwotICAgICAgeTAgPSB6LmNvcHkoKTsKLSAg
ICAgIHZpZXcgPSB7Ci0gICAgICAgIHg6IDAsCi0gICAgICAgIHk6IDAsCi0gICAgICAgIGs6IDEK
LSAgICAgIH07Ci0gICAgICByZXR1cm4gem9vbTsKLSAgICB9OwotICAgIGZ1bmN0aW9uIGxvY2F0
aW9uKHApIHsKLSAgICAgIHJldHVybiBbIChwWzBdIC0gdmlldy54KSAvIHZpZXcuaywgKHBbMV0g
LSB2aWV3LnkpIC8gdmlldy5rIF07Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBvaW50KGwpIHsKLSAg
ICAgIHJldHVybiBbIGxbMF0gKiB2aWV3LmsgKyB2aWV3LngsIGxbMV0gKiB2aWV3LmsgKyB2aWV3
LnkgXTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc2NhbGVUbyhzKSB7Ci0gICAgICB2aWV3LmsgPSBN
YXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIHMpKTsKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gdHJhbnNsYXRlVG8ocCwgbCkgewotICAgICAgbCA9IHBvaW50KGwp
OwotICAgICAgdmlldy54ICs9IHBbMF0gLSBsWzBdOwotICAgICAgdmlldy55ICs9IHBbMV0gLSBs
WzFdOwotICAgIH0KLSAgICBmdW5jdGlvbiByZXNjYWxlKCkgewotICAgICAgaWYgKHgxKSB4MS5k
b21haW4oeDAucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeCkgewotICAgICAgICByZXR1cm4gKHggLSB2
aWV3LngpIC8gdmlldy5rOwotICAgICAgfSkubWFwKHgwLmludmVydCkpOwotICAgICAgaWYgKHkx
KSB5MS5kb21haW4oeTAucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeSkgewotICAgICAgICByZXR1cm4g
KHkgLSB2aWV3LnkpIC8gdmlldy5rOwotICAgICAgfSkubWFwKHkwLmludmVydCkpOwotICAgIH0K
LSAgICBmdW5jdGlvbiB6b29tc3RhcnRlZChkaXNwYXRjaCkgewotICAgICAgZGlzcGF0Y2goewot
ICAgICAgICB0eXBlOiAiem9vbXN0YXJ0IgotICAgICAgfSk7Ci0gICAgfQotICAgIGZ1bmN0aW9u
IHpvb21lZChkaXNwYXRjaCkgewotICAgICAgcmVzY2FsZSgpOwotICAgICAgZGlzcGF0Y2goewot
ICAgICAgICB0eXBlOiAiem9vbSIsCi0gICAgICAgIHNjYWxlOiB2aWV3LmssCi0gICAgICAgIHRy
YW5zbGF0ZTogWyB2aWV3LngsIHZpZXcueSBdCi0gICAgICB9KTsKLSAgICB9Ci0gICAgZnVuY3Rp
b24gem9vbWVuZGVkKGRpc3BhdGNoKSB7Ci0gICAgICBkaXNwYXRjaCh7Ci0gICAgICAgIHR5cGU6
ICJ6b29tZW5kIgotICAgICAgfSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIG1vdXNlZG93bmVkKCkg
ewotICAgICAgdmFyIHRoYXQgPSB0aGlzLCB0YXJnZXQgPSBkMy5ldmVudC50YXJnZXQsIGRpc3Bh
dGNoID0gZXZlbnQub2YodGhhdCwgYXJndW1lbnRzKSwgZHJhZ2dlZCA9IDAsIHN1YmplY3QgPSBk
My5zZWxlY3QoZDNfd2luZG93KS5vbihtb3VzZW1vdmUsIG1vdmVkKS5vbihtb3VzZXVwLCBlbmRl
ZCksIGxvY2F0aW9uMCA9IGxvY2F0aW9uKGQzLm1vdXNlKHRoYXQpKSwgZHJhZ1Jlc3RvcmUgPSBk
M19ldmVudF9kcmFnU3VwcHJlc3MoKTsKLSAgICAgIGQzX3NlbGVjdGlvbl9pbnRlcnJ1cHQuY2Fs
bCh0aGF0KTsKLSAgICAgIHpvb21zdGFydGVkKGRpc3BhdGNoKTsKLSAgICAgIGZ1bmN0aW9uIG1v
dmVkKCkgewotICAgICAgICBkcmFnZ2VkID0gMTsKLSAgICAgICAgdHJhbnNsYXRlVG8oZDMubW91
c2UodGhhdCksIGxvY2F0aW9uMCk7Ci0gICAgICAgIHpvb21lZChkaXNwYXRjaCk7Ci0gICAgICB9
Ci0gICAgICBmdW5jdGlvbiBlbmRlZCgpIHsKLSAgICAgICAgc3ViamVjdC5vbihtb3VzZW1vdmUs
IG51bGwpLm9uKG1vdXNldXAsIG51bGwpOwotICAgICAgICBkcmFnUmVzdG9yZShkcmFnZ2VkICYm
IGQzLmV2ZW50LnRhcmdldCA9PT0gdGFyZ2V0KTsKLSAgICAgICAgem9vbWVuZGVkKGRpc3BhdGNo
KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKCkgewotICAgICAg
dmFyIHRoYXQgPSB0aGlzLCBkaXNwYXRjaCA9IGV2ZW50Lm9mKHRoYXQsIGFyZ3VtZW50cyksIGxv
Y2F0aW9uczAgPSB7fSwgZGlzdGFuY2UwID0gMCwgc2NhbGUwLCB6b29tTmFtZSA9ICIuem9vbS0i
ICsgZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllciwgdG91Y2htb3ZlID0gInRv
dWNobW92ZSIgKyB6b29tTmFtZSwgdG91Y2hlbmQgPSAidG91Y2hlbmQiICsgem9vbU5hbWUsIHRh
cmdldHMgPSBbXSwgc3ViamVjdCA9IGQzLnNlbGVjdCh0aGF0KS5vbihtb3VzZWRvd24sIG51bGwp
Lm9uKHRvdWNoc3RhcnQsIHN0YXJ0ZWQpLCBkcmFnUmVzdG9yZSA9IGQzX2V2ZW50X2RyYWdTdXBw
cmVzcygpOwotICAgICAgZDNfc2VsZWN0aW9uX2ludGVycnVwdC5jYWxsKHRoYXQpOwotICAgICAg
c3RhcnRlZCgpOwotICAgICAgem9vbXN0YXJ0ZWQoZGlzcGF0Y2gpOwotICAgICAgZnVuY3Rpb24g
cmVsb2NhdGUoKSB7Ci0gICAgICAgIHZhciB0b3VjaGVzID0gZDMudG91Y2hlcyh0aGF0KTsKLSAg
ICAgICAgc2NhbGUwID0gdmlldy5rOwotICAgICAgICB0b3VjaGVzLmZvckVhY2goZnVuY3Rpb24o
dCkgewotICAgICAgICAgIGlmICh0LmlkZW50aWZpZXIgaW4gbG9jYXRpb25zMCkgbG9jYXRpb25z
MFt0LmlkZW50aWZpZXJdID0gbG9jYXRpb24odCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1
cm4gdG91Y2hlczsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7Ci0gICAgICAg
IHZhciB0YXJnZXQgPSBkMy5ldmVudC50YXJnZXQ7Ci0gICAgICAgIGQzLnNlbGVjdCh0YXJnZXQp
Lm9uKHRvdWNobW92ZSwgbW92ZWQpLm9uKHRvdWNoZW5kLCBlbmRlZCk7Ci0gICAgICAgIHRhcmdl
dHMucHVzaCh0YXJnZXQpOwotICAgICAgICB2YXIgY2hhbmdlZCA9IGQzLmV2ZW50LmNoYW5nZWRU
b3VjaGVzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNoYW5nZWQubGVuZ3RoOyBpIDwg
bjsgKytpKSB7Ci0gICAgICAgICAgbG9jYXRpb25zMFtjaGFuZ2VkW2ldLmlkZW50aWZpZXJdID0g
bnVsbDsKLSAgICAgICAgfQotICAgICAgICB2YXIgdG91Y2hlcyA9IHJlbG9jYXRlKCksIG5vdyA9
IERhdGUubm93KCk7Ci0gICAgICAgIGlmICh0b3VjaGVzLmxlbmd0aCA9PT0gMSkgewotICAgICAg
ICAgIGlmIChub3cgLSB0b3VjaHRpbWUgPCA1MDApIHsKLSAgICAgICAgICAgIHZhciBwID0gdG91
Y2hlc1swXSwgbCA9IGxvY2F0aW9uczBbcC5pZGVudGlmaWVyXTsKLSAgICAgICAgICAgIHNjYWxl
VG8odmlldy5rICogMik7Ci0gICAgICAgICAgICB0cmFuc2xhdGVUbyhwLCBsKTsKLSAgICAgICAg
ICAgIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIHpvb21lZChkaXNwYXRj
aCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRvdWNodGltZSA9IG5vdzsKLSAgICAgICAgfSBl
bHNlIGlmICh0b3VjaGVzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICB2YXIgcCA9IHRvdWNoZXNb
MF0sIHEgPSB0b3VjaGVzWzFdLCBkeCA9IHBbMF0gLSBxWzBdLCBkeSA9IHBbMV0gLSBxWzFdOwot
ICAgICAgICAgIGRpc3RhbmNlMCA9IGR4ICogZHggKyBkeSAqIGR5OwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBmdW5jdGlvbiBtb3ZlZCgpIHsKLSAgICAgICAgdmFyIHRvdWNoZXMgPSBkMy50
b3VjaGVzKHRoYXQpLCBwMCwgbDAsIHAxLCBsMTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSB0b3VjaGVzLmxlbmd0aDsgaSA8IG47ICsraSwgbDEgPSBudWxsKSB7Ci0gICAgICAgICAgcDEg
PSB0b3VjaGVzW2ldOwotICAgICAgICAgIGlmIChsMSA9IGxvY2F0aW9uczBbcDEuaWRlbnRpZmll
cl0pIHsKLSAgICAgICAgICAgIGlmIChsMCkgYnJlYWs7Ci0gICAgICAgICAgICBwMCA9IHAxLCBs
MCA9IGwxOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobDEpIHsKLSAgICAg
ICAgICB2YXIgZGlzdGFuY2UxID0gKGRpc3RhbmNlMSA9IHAxWzBdIC0gcDBbMF0pICogZGlzdGFu
Y2UxICsgKGRpc3RhbmNlMSA9IHAxWzFdIC0gcDBbMV0pICogZGlzdGFuY2UxLCBzY2FsZTEgPSBk
aXN0YW5jZTAgJiYgTWF0aC5zcXJ0KGRpc3RhbmNlMSAvIGRpc3RhbmNlMCk7Ci0gICAgICAgICAg
cDAgPSBbIChwMFswXSArIHAxWzBdKSAvIDIsIChwMFsxXSArIHAxWzFdKSAvIDIgXTsKLSAgICAg
ICAgICBsMCA9IFsgKGwwWzBdICsgbDFbMF0pIC8gMiwgKGwwWzFdICsgbDFbMV0pIC8gMiBdOwot
ICAgICAgICAgIHNjYWxlVG8oc2NhbGUxICogc2NhbGUwKTsKLSAgICAgICAgfQotICAgICAgICB0
b3VjaHRpbWUgPSBudWxsOwotICAgICAgICB0cmFuc2xhdGVUbyhwMCwgbDApOwotICAgICAgICB6
b29tZWQoZGlzcGF0Y2gpOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gZW5kZWQoKSB7Ci0gICAg
ICAgIGlmIChkMy5ldmVudC50b3VjaGVzLmxlbmd0aCkgewotICAgICAgICAgIHZhciBjaGFuZ2Vk
ID0gZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXM7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4g
PSBjaGFuZ2VkLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgZGVsZXRlIGxvY2F0
aW9uczBbY2hhbmdlZFtpXS5pZGVudGlmaWVyXTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZm9y
ICh2YXIgaWRlbnRpZmllciBpbiBsb2NhdGlvbnMwKSB7Ci0gICAgICAgICAgICByZXR1cm4gdm9p
ZCByZWxvY2F0ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkMy5zZWxlY3RB
bGwodGFyZ2V0cykub24oem9vbU5hbWUsIG51bGwpOwotICAgICAgICBzdWJqZWN0Lm9uKG1vdXNl
ZG93biwgbW91c2Vkb3duZWQpLm9uKHRvdWNoc3RhcnQsIHRvdWNoc3RhcnRlZCk7Ci0gICAgICAg
IGRyYWdSZXN0b3JlKCk7Ci0gICAgICAgIHpvb21lbmRlZChkaXNwYXRjaCk7Ci0gICAgICB9Ci0g
ICAgfQotICAgIGZ1bmN0aW9uIG1vdXNld2hlZWxlZCgpIHsKLSAgICAgIHZhciBkaXNwYXRjaCA9
IGV2ZW50Lm9mKHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICBpZiAobW91c2V3aGVlbFRpbWVyKSBj
bGVhclRpbWVvdXQobW91c2V3aGVlbFRpbWVyKTsgZWxzZSB0cmFuc2xhdGUwID0gbG9jYXRpb24o
Y2VudGVyMCA9IGNlbnRlciB8fCBkMy5tb3VzZSh0aGlzKSksIAotICAgICAgZDNfc2VsZWN0aW9u
X2ludGVycnVwdC5jYWxsKHRoaXMpLCB6b29tc3RhcnRlZChkaXNwYXRjaCk7Ci0gICAgICBtb3Vz
ZXdoZWVsVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBtb3VzZXdoZWVs
VGltZXIgPSBudWxsOwotICAgICAgICB6b29tZW5kZWQoZGlzcGF0Y2gpOwotICAgICAgfSwgNTAp
OwotICAgICAgZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCgpOwotICAgICAgc2NhbGVUbyhNYXRoLnBv
dygyLCBkM19iZWhhdmlvcl96b29tRGVsdGEoKSAqIC4wMDIpICogdmlldy5rKTsKLSAgICAgIHRy
YW5zbGF0ZVRvKGNlbnRlcjAsIHRyYW5zbGF0ZTApOwotICAgICAgem9vbWVkKGRpc3BhdGNoKTsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gZGJsY2xpY2tlZCgpIHsKLSAgICAgIHZhciBkaXNwYXRjaCA9
IGV2ZW50Lm9mKHRoaXMsIGFyZ3VtZW50cyksIHAgPSBkMy5tb3VzZSh0aGlzKSwgbCA9IGxvY2F0
aW9uKHApLCBrID0gTWF0aC5sb2codmlldy5rKSAvIE1hdGguTE4yOwotICAgICAgem9vbXN0YXJ0
ZWQoZGlzcGF0Y2gpOwotICAgICAgc2NhbGVUbyhNYXRoLnBvdygyLCBkMy5ldmVudC5zaGlmdEtl
eSA/IE1hdGguY2VpbChrKSAtIDEgOiBNYXRoLmZsb29yKGspICsgMSkpOwotICAgICAgdHJhbnNs
YXRlVG8ocCwgbCk7Ci0gICAgICB6b29tZWQoZGlzcGF0Y2gpOwotICAgICAgem9vbWVuZGVkKGRp
c3BhdGNoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGQzLnJlYmluZCh6b29tLCBldmVudCwgIm9uIik7
Ci0gIH07Ci0gIHZhciBkM19iZWhhdmlvcl96b29tSW5maW5pdHkgPSBbIDAsIEluZmluaXR5IF07
Ci0gIHZhciBkM19iZWhhdmlvcl96b29tRGVsdGEsIGQzX2JlaGF2aW9yX3pvb21XaGVlbCA9ICJv
bndoZWVsIiBpbiBkM19kb2N1bWVudCA/IChkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gLWQzLmV2ZW50LmRlbHRhWSAqIChkMy5ldmVudC5kZWx0YU1vZGUg
PyAxMjAgOiAxKTsKLSAgfSwgIndoZWVsIikgOiAib25tb3VzZXdoZWVsIiBpbiBkM19kb2N1bWVu
dCA/IChkM19iZWhhdmlvcl96b29tRGVsdGEgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDMu
ZXZlbnQud2hlZWxEZWx0YTsKLSAgfSwgIm1vdXNld2hlZWwiKSA6IChkM19iZWhhdmlvcl96b29t
RGVsdGEgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gLWQzLmV2ZW50LmRldGFpbDsKLSAgfSwg
Ik1vek1vdXNlUGl4ZWxTY3JvbGwiKTsKLSAgZDMuY29sb3IgPSBkM19jb2xvcjsKLSAgZnVuY3Rp
b24gZDNfY29sb3IoKSB7fQotICBkM19jb2xvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcy5yZ2IoKSArICIiOwotICB9OwotICBkMy5oc2wgPSBkM19o
c2w7Ci0gIGZ1bmN0aW9uIGQzX2hzbChoLCBzLCBsKSB7Ci0gICAgcmV0dXJuIHRoaXMgaW5zdGFu
Y2VvZiBkM19oc2wgPyB2b2lkICh0aGlzLmggPSAraCwgdGhpcy5zID0gK3MsIHRoaXMubCA9ICts
KSA6IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gaCBpbnN0YW5jZW9mIGQzX2hzbCA/IG5ldyBkM19o
c2woaC5oLCBoLnMsIGgubCkgOiBkM19yZ2JfcGFyc2UoIiIgKyBoLCBkM19yZ2JfaHNsLCBkM19o
c2wpIDogbmV3IGQzX2hzbChoLCBzLCBsKTsKLSAgfQotICB2YXIgZDNfaHNsUHJvdG90eXBlID0g
ZDNfaHNsLnByb3RvdHlwZSA9IG5ldyBkM19jb2xvcigpOwotICBkM19oc2xQcm90b3R5cGUuYnJp
Z2h0ZXIgPSBmdW5jdGlvbihrKSB7Ci0gICAgayA9IE1hdGgucG93KC43LCBhcmd1bWVudHMubGVu
Z3RoID8gayA6IDEpOwotICAgIHJldHVybiBuZXcgZDNfaHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlz
LmwgLyBrKTsKLSAgfTsKLSAgZDNfaHNsUHJvdG90eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspIHsK
LSAgICBrID0gTWF0aC5wb3coLjcsIGFyZ3VtZW50cy5sZW5ndGggPyBrIDogMSk7Ci0gICAgcmV0
dXJuIG5ldyBkM19oc2wodGhpcy5oLCB0aGlzLnMsIGsgKiB0aGlzLmwpOwotICB9OwotICBkM19o
c2xQcm90b3R5cGUucmdiID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzX2hzbF9yZ2IodGhp
cy5oLCB0aGlzLnMsIHRoaXMubCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2hzbF9yZ2IoaCwgcywg
bCkgewotICAgIHZhciBtMSwgbTI7Ci0gICAgaCA9IGlzTmFOKGgpID8gMCA6IChoICU9IDM2MCkg
PCAwID8gaCArIDM2MCA6IGg7Ci0gICAgcyA9IGlzTmFOKHMpID8gMCA6IHMgPCAwID8gMCA6IHMg
PiAxID8gMSA6IHM7Ci0gICAgbCA9IGwgPCAwID8gMCA6IGwgPiAxID8gMSA6IGw7Ci0gICAgbTIg
PSBsIDw9IC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzOwotICAgIG0xID0gMiAqIGwg
LSBtMjsKLSAgICBmdW5jdGlvbiB2KGgpIHsKLSAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDsg
ZWxzZSBpZiAoaCA8IDApIGggKz0gMzYwOwotICAgICAgaWYgKGggPCA2MCkgcmV0dXJuIG0xICsg
KG0yIC0gbTEpICogaCAvIDYwOwotICAgICAgaWYgKGggPCAxODApIHJldHVybiBtMjsKLSAgICAg
IGlmIChoIDwgMjQwKSByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MDsKLSAg
ICAgIHJldHVybiBtMTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gdnYoaCkgewotICAgICAgcmV0dXJu
IE1hdGgucm91bmQodihoKSAqIDI1NSk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgZDNfcmdiKHZ2
KGggKyAxMjApLCB2dihoKSwgdnYoaCAtIDEyMCkpOwotICB9Ci0gIGQzLmhjbCA9IGQzX2hjbDsK
LSAgZnVuY3Rpb24gZDNfaGNsKGgsIGMsIGwpIHsKLSAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9m
IGQzX2hjbCA/IHZvaWQgKHRoaXMuaCA9ICtoLCB0aGlzLmMgPSArYywgdGhpcy5sID0gK2wpIDog
YXJndW1lbnRzLmxlbmd0aCA8IDIgPyBoIGluc3RhbmNlb2YgZDNfaGNsID8gbmV3IGQzX2hjbCho
LmgsIGguYywgaC5sKSA6IGggaW5zdGFuY2VvZiBkM19sYWIgPyBkM19sYWJfaGNsKGgubCwgaC5h
LCBoLmIpIDogZDNfbGFiX2hjbCgoaCA9IGQzX3JnYl9sYWIoKGggPSBkMy5yZ2IoaCkpLnIsIGgu
ZywgaC5iKSkubCwgaC5hLCBoLmIpIDogbmV3IGQzX2hjbChoLCBjLCBsKTsKLSAgfQotICB2YXIg
ZDNfaGNsUHJvdG90eXBlID0gZDNfaGNsLnByb3RvdHlwZSA9IG5ldyBkM19jb2xvcigpOwotICBk
M19oY2xQcm90b3R5cGUuYnJpZ2h0ZXIgPSBmdW5jdGlvbihrKSB7Ci0gICAgcmV0dXJuIG5ldyBk
M19oY2wodGhpcy5oLCB0aGlzLmMsIE1hdGgubWluKDEwMCwgdGhpcy5sICsgZDNfbGFiX0sgKiAo
YXJndW1lbnRzLmxlbmd0aCA/IGsgOiAxKSkpOwotICB9OwotICBkM19oY2xQcm90b3R5cGUuZGFy
a2VyID0gZnVuY3Rpb24oaykgewotICAgIHJldHVybiBuZXcgZDNfaGNsKHRoaXMuaCwgdGhpcy5j
LCBNYXRoLm1heCgwLCB0aGlzLmwgLSBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoID8gayA6
IDEpKSk7Ci0gIH07Ci0gIGQzX2hjbFByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gZDNfaGNsX2xhYih0aGlzLmgsIHRoaXMuYywgdGhpcy5sKS5yZ2IoKTsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfaGNsX2xhYihoLCBjLCBsKSB7Ci0gICAgaWYgKGlzTmFOKGgpKSBoID0gMDsK
LSAgICBpZiAoaXNOYU4oYykpIGMgPSAwOwotICAgIHJldHVybiBuZXcgZDNfbGFiKGwsIE1hdGgu
Y29zKGggKj0gZDNfcmFkaWFucykgKiBjLCBNYXRoLnNpbihoKSAqIGMpOwotICB9Ci0gIGQzLmxh
YiA9IGQzX2xhYjsKLSAgZnVuY3Rpb24gZDNfbGFiKGwsIGEsIGIpIHsKLSAgICByZXR1cm4gdGhp
cyBpbnN0YW5jZW9mIGQzX2xhYiA/IHZvaWQgKHRoaXMubCA9ICtsLCB0aGlzLmEgPSArYSwgdGhp
cy5iID0gK2IpIDogYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBsIGluc3RhbmNlb2YgZDNfbGFiID8g
bmV3IGQzX2xhYihsLmwsIGwuYSwgbC5iKSA6IGwgaW5zdGFuY2VvZiBkM19oY2wgPyBkM19oY2xf
bGFiKGwubCwgbC5jLCBsLmgpIDogZDNfcmdiX2xhYigobCA9IGQzX3JnYihsKSkuciwgbC5nLCBs
LmIpIDogbmV3IGQzX2xhYihsLCBhLCBiKTsKLSAgfQotICB2YXIgZDNfbGFiX0sgPSAxODsKLSAg
dmFyIGQzX2xhYl9YID0gLjk1MDQ3LCBkM19sYWJfWSA9IDEsIGQzX2xhYl9aID0gMS4wODg4MzsK
LSAgdmFyIGQzX2xhYlByb3RvdHlwZSA9IGQzX2xhYi5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3Io
KTsKLSAgZDNfbGFiUHJvdG90eXBlLmJyaWdodGVyID0gZnVuY3Rpb24oaykgewotICAgIHJldHVy
biBuZXcgZDNfbGFiKE1hdGgubWluKDEwMCwgdGhpcy5sICsgZDNfbGFiX0sgKiAoYXJndW1lbnRz
Lmxlbmd0aCA/IGsgOiAxKSksIHRoaXMuYSwgdGhpcy5iKTsKLSAgfTsKLSAgZDNfbGFiUHJvdG90
eXBlLmRhcmtlciA9IGZ1bmN0aW9uKGspIHsKLSAgICByZXR1cm4gbmV3IGQzX2xhYihNYXRoLm1h
eCgwLCB0aGlzLmwgLSBkM19sYWJfSyAqIChhcmd1bWVudHMubGVuZ3RoID8gayA6IDEpKSwgdGhp
cy5hLCB0aGlzLmIpOwotICB9OwotICBkM19sYWJQcm90b3R5cGUucmdiID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIGQzX2xhYl9yZ2IodGhpcy5sLCB0aGlzLmEsIHRoaXMuYik7Ci0gIH07Ci0g
IGZ1bmN0aW9uIGQzX2xhYl9yZ2IobCwgYSwgYikgewotICAgIHZhciB5ID0gKGwgKyAxNikgLyAx
MTYsIHggPSB5ICsgYSAvIDUwMCwgeiA9IHkgLSBiIC8gMjAwOwotICAgIHggPSBkM19sYWJfeHl6
KHgpICogZDNfbGFiX1g7Ci0gICAgeSA9IGQzX2xhYl94eXooeSkgKiBkM19sYWJfWTsKLSAgICB6
ID0gZDNfbGFiX3h5eih6KSAqIGQzX2xhYl9aOwotICAgIHJldHVybiBuZXcgZDNfcmdiKGQzX3h5
el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAuNDk4NTMxNCAqIHopLCBkM194
eXpfcmdiKC0uOTY5MjY2ICogeCArIDEuODc2MDEwOCAqIHkgKyAuMDQxNTU2ICogeiksIGQzX3h5
el9yZ2IoLjA1NTY0MzQgKiB4IC0gLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeikpOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX2xhYl9oY2wobCwgYSwgYikgewotICAgIHJldHVybiBsID4gMCA/IG5l
dyBkM19oY2woTWF0aC5hdGFuMihiLCBhKSAqIGQzX2RlZ3JlZXMsIE1hdGguc3FydChhICogYSAr
IGIgKiBiKSwgbCkgOiBuZXcgZDNfaGNsKE5hTiwgTmFOLCBsKTsKLSAgfQotICBmdW5jdGlvbiBk
M19sYWJfeHl6KHgpIHsKLSAgICByZXR1cm4geCA+IC4yMDY4OTMwMzQgPyB4ICogeCAqIHggOiAo
eCAtIDQgLyAyOSkgLyA3Ljc4NzAzNzsKLSAgfQotICBmdW5jdGlvbiBkM194eXpfbGFiKHgpIHsK
LSAgICByZXR1cm4geCA+IC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxIC8gMykgOiA3Ljc4NzAzNyAq
IHggKyA0IC8gMjk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfeHl6X3JnYihyKSB7Ci0gICAgcmV0dXJu
IE1hdGgucm91bmQoMjU1ICogKHIgPD0gLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBNYXRo
LnBvdyhyLCAxIC8gMi40KSAtIC4wNTUpKTsKLSAgfQotICBkMy5yZ2IgPSBkM19yZ2I7Ci0gIGZ1
bmN0aW9uIGQzX3JnYihyLCBnLCBiKSB7Ci0gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkM19y
Z2IgPyB2b2lkICh0aGlzLnIgPSB+fnIsIHRoaXMuZyA9IH5+ZywgdGhpcy5iID0gfn5iKSA6IGFy
Z3VtZW50cy5sZW5ndGggPCAyID8gciBpbnN0YW5jZW9mIGQzX3JnYiA/IG5ldyBkM19yZ2Ioci5y
LCByLmcsIHIuYikgOiBkM19yZ2JfcGFyc2UoIiIgKyByLCBkM19yZ2IsIGQzX2hzbF9yZ2IpIDog
bmV3IGQzX3JnYihyLCBnLCBiKTsKLSAgfQotICBmdW5jdGlvbiBkM19yZ2JOdW1iZXIodmFsdWUp
IHsKLSAgICByZXR1cm4gbmV3IGQzX3JnYih2YWx1ZSA+PiAxNiwgdmFsdWUgPj4gOCAmIDI1NSwg
dmFsdWUgJiAyNTUpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3JnYlN0cmluZyh2YWx1ZSkgewotICAg
IHJldHVybiBkM19yZ2JOdW1iZXIodmFsdWUpICsgIiI7Ci0gIH0KLSAgdmFyIGQzX3JnYlByb3Rv
dHlwZSA9IGQzX3JnYi5wcm90b3R5cGUgPSBuZXcgZDNfY29sb3IoKTsKLSAgZDNfcmdiUHJvdG90
eXBlLmJyaWdodGVyID0gZnVuY3Rpb24oaykgewotICAgIGsgPSBNYXRoLnBvdyguNywgYXJndW1l
bnRzLmxlbmd0aCA/IGsgOiAxKTsKLSAgICB2YXIgciA9IHRoaXMuciwgZyA9IHRoaXMuZywgYiA9
IHRoaXMuYiwgaSA9IDMwOwotICAgIGlmICghciAmJiAhZyAmJiAhYikgcmV0dXJuIG5ldyBkM19y
Z2IoaSwgaSwgaSk7Ci0gICAgaWYgKHIgJiYgciA8IGkpIHIgPSBpOwotICAgIGlmIChnICYmIGcg
PCBpKSBnID0gaTsKLSAgICBpZiAoYiAmJiBiIDwgaSkgYiA9IGk7Ci0gICAgcmV0dXJuIG5ldyBk
M19yZ2IoTWF0aC5taW4oMjU1LCByIC8gayksIE1hdGgubWluKDI1NSwgZyAvIGspLCBNYXRoLm1p
bigyNTUsIGIgLyBrKSk7Ci0gIH07Ci0gIGQzX3JnYlByb3RvdHlwZS5kYXJrZXIgPSBmdW5jdGlv
bihrKSB7Ci0gICAgayA9IE1hdGgucG93KC43LCBhcmd1bWVudHMubGVuZ3RoID8gayA6IDEpOwot
ICAgIHJldHVybiBuZXcgZDNfcmdiKGsgKiB0aGlzLnIsIGsgKiB0aGlzLmcsIGsgKiB0aGlzLmIp
OwotICB9OwotICBkM19yZ2JQcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IGQzX3JnYl9oc2wodGhpcy5yLCB0aGlzLmcsIHRoaXMuYik7Ci0gIH07Ci0gIGQzX3JnYlByb3Rv
dHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAiIyIgKyBkM19yZ2JfaGV4
KHRoaXMucikgKyBkM19yZ2JfaGV4KHRoaXMuZykgKyBkM19yZ2JfaGV4KHRoaXMuYik7Ci0gIH07
Ci0gIGZ1bmN0aW9uIGQzX3JnYl9oZXgodikgewotICAgIHJldHVybiB2IDwgMTYgPyAiMCIgKyBN
YXRoLm1heCgwLCB2KS50b1N0cmluZygxNikgOiBNYXRoLm1pbigyNTUsIHYpLnRvU3RyaW5nKDE2
KTsKLSAgfQotICBmdW5jdGlvbiBkM19yZ2JfcGFyc2UoZm9ybWF0LCByZ2IsIGhzbCkgewotICAg
IHZhciByID0gMCwgZyA9IDAsIGIgPSAwLCBtMSwgbTIsIGNvbG9yOwotICAgIG0xID0gLyhbYS16
XSspXCgoLiopXCkvaS5leGVjKGZvcm1hdCk7Ci0gICAgaWYgKG0xKSB7Ci0gICAgICBtMiA9IG0x
WzJdLnNwbGl0KCIsIik7Ci0gICAgICBzd2l0Y2ggKG0xWzFdKSB7Ci0gICAgICAgY2FzZSAiaHNs
IjoKLSAgICAgICAgewotICAgICAgICAgIHJldHVybiBoc2wocGFyc2VGbG9hdChtMlswXSksIHBh
cnNlRmxvYXQobTJbMV0pIC8gMTAwLCBwYXJzZUZsb2F0KG0yWzJdKSAvIDEwMCk7Ci0gICAgICAg
IH0KLQotICAgICAgIGNhc2UgInJnYiI6Ci0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gcmdi
KGQzX3JnYl9wYXJzZU51bWJlcihtMlswXSksIGQzX3JnYl9wYXJzZU51bWJlcihtMlsxXSksIGQz
X3JnYl9wYXJzZU51bWJlcihtMlsyXSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAg
IGlmIChjb2xvciA9IGQzX3JnYl9uYW1lcy5nZXQoZm9ybWF0KSkgcmV0dXJuIHJnYihjb2xvci5y
LCBjb2xvci5nLCBjb2xvci5iKTsKLSAgICBpZiAoZm9ybWF0ICE9IG51bGwgJiYgZm9ybWF0LmNo
YXJBdCgwKSA9PT0gIiMiICYmICFpc05hTihjb2xvciA9IHBhcnNlSW50KGZvcm1hdC5zdWJzdHJp
bmcoMSksIDE2KSkpIHsKLSAgICAgIGlmIChmb3JtYXQubGVuZ3RoID09PSA0KSB7Ci0gICAgICAg
IHIgPSAoY29sb3IgJiAzODQwKSA+PiA0OwotICAgICAgICByID0gciA+PiA0IHwgcjsKLSAgICAg
ICAgZyA9IGNvbG9yICYgMjQwOwotICAgICAgICBnID0gZyA+PiA0IHwgZzsKLSAgICAgICAgYiA9
IGNvbG9yICYgMTU7Ci0gICAgICAgIGIgPSBiIDw8IDQgfCBiOwotICAgICAgfSBlbHNlIGlmIChm
b3JtYXQubGVuZ3RoID09PSA3KSB7Ci0gICAgICAgIHIgPSAoY29sb3IgJiAxNjcxMTY4MCkgPj4g
MTY7Ci0gICAgICAgIGcgPSAoY29sb3IgJiA2NTI4MCkgPj4gODsKLSAgICAgICAgYiA9IGNvbG9y
ICYgMjU1OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmdiKHIsIGcsIGIpOwotICB9Ci0g
IGZ1bmN0aW9uIGQzX3JnYl9oc2wociwgZywgYikgewotICAgIHZhciBtaW4gPSBNYXRoLm1pbihy
IC89IDI1NSwgZyAvPSAyNTUsIGIgLz0gMjU1KSwgbWF4ID0gTWF0aC5tYXgociwgZywgYiksIGQg
PSBtYXggLSBtaW4sIGgsIHMsIGwgPSAobWF4ICsgbWluKSAvIDI7Ci0gICAgaWYgKGQpIHsKLSAg
ICAgIHMgPSBsIDwgLjUgPyBkIC8gKG1heCArIG1pbikgOiBkIC8gKDIgLSBtYXggLSBtaW4pOwot
ICAgICAgaWYgKHIgPT0gbWF4KSBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7IGVs
c2UgaWYgKGcgPT0gbWF4KSBoID0gKGIgLSByKSAvIGQgKyAyOyBlbHNlIGggPSAociAtIGcpIC8g
ZCArIDQ7Ci0gICAgICBoICo9IDYwOwotICAgIH0gZWxzZSB7Ci0gICAgICBoID0gTmFOOwotICAg
ICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7Ci0gICAgfQotICAgIHJldHVybiBuZXcgZDNf
aHNsKGgsIHMsIGwpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3JnYl9sYWIociwgZywgYikgewotICAg
IHIgPSBkM19yZ2JfeHl6KHIpOwotICAgIGcgPSBkM19yZ2JfeHl6KGcpOwotICAgIGIgPSBkM19y
Z2JfeHl6KGIpOwotICAgIHZhciB4ID0gZDNfeHl6X2xhYigoLjQxMjQ1NjQgKiByICsgLjM1NzU3
NjEgKiBnICsgLjE4MDQzNzUgKiBiKSAvIGQzX2xhYl9YKSwgeSA9IGQzX3h5el9sYWIoKC4yMTI2
NzI5ICogciArIC43MTUxNTIyICogZyArIC4wNzIxNzUgKiBiKSAvIGQzX2xhYl9ZKSwgeiA9IGQz
X3h5el9sYWIoKC4wMTkzMzM5ICogciArIC4xMTkxOTIgKiBnICsgLjk1MDMwNDEgKiBiKSAvIGQz
X2xhYl9aKTsKLSAgICByZXR1cm4gZDNfbGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwg
MjAwICogKHkgLSB6KSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfcmdiX3h5eihyKSB7Ci0gICAgcmV0
dXJuIChyIC89IDI1NSkgPD0gLjA0MDQ1ID8gciAvIDEyLjkyIDogTWF0aC5wb3coKHIgKyAuMDU1
KSAvIDEuMDU1LCAyLjQpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3JnYl9wYXJzZU51bWJlcihjKSB7
Ci0gICAgdmFyIGYgPSBwYXJzZUZsb2F0KGMpOwotICAgIHJldHVybiBjLmNoYXJBdChjLmxlbmd0
aCAtIDEpID09PSAiJSIgPyBNYXRoLnJvdW5kKGYgKiAyLjU1KSA6IGY7Ci0gIH0KLSAgdmFyIGQz
X3JnYl9uYW1lcyA9IGQzLm1hcCh7Ci0gICAgYWxpY2VibHVlOiAxNTc5MjM4MywKLSAgICBhbnRp
cXVld2hpdGU6IDE2NDQ0Mzc1LAotICAgIGFxdWE6IDY1NTM1LAotICAgIGFxdWFtYXJpbmU6IDgz
ODg1NjQsCi0gICAgYXp1cmU6IDE1Nzk0MTc1LAotICAgIGJlaWdlOiAxNjExOTI2MCwKLSAgICBi
aXNxdWU6IDE2NzcwMjQ0LAotICAgIGJsYWNrOiAwLAotICAgIGJsYW5jaGVkYWxtb25kOiAxNjc3
MjA0NSwKLSAgICBibHVlOiAyNTUsCi0gICAgYmx1ZXZpb2xldDogOTA1NTIwMiwKLSAgICBicm93
bjogMTA4MjQyMzQsCi0gICAgYnVybHl3b29kOiAxNDU5NjIzMSwKLSAgICBjYWRldGJsdWU6IDYy
NjY1MjgsCi0gICAgY2hhcnRyZXVzZTogODM4ODM1MiwKLSAgICBjaG9jb2xhdGU6IDEzNzg5NDcw
LAotICAgIGNvcmFsOiAxNjc0NDI3MiwKLSAgICBjb3JuZmxvd2VyYmx1ZTogNjU5MTk4MSwKLSAg
ICBjb3Juc2lsazogMTY3NzUzODgsCi0gICAgY3JpbXNvbjogMTQ0MjMxMDAsCi0gICAgY3lhbjog
NjU1MzUsCi0gICAgZGFya2JsdWU6IDEzOSwKLSAgICBkYXJrY3lhbjogMzU3MjMsCi0gICAgZGFy
a2dvbGRlbnJvZDogMTIwOTI5MzksCi0gICAgZGFya2dyYXk6IDExMTE5MDE3LAotICAgIGRhcmtn
cmVlbjogMjU2MDAsCi0gICAgZGFya2dyZXk6IDExMTE5MDE3LAotICAgIGRhcmtraGFraTogMTI0
MzMyNTksCi0gICAgZGFya21hZ2VudGE6IDkxMDk2NDMsCi0gICAgZGFya29saXZlZ3JlZW46IDU1
OTc5OTksCi0gICAgZGFya29yYW5nZTogMTY3NDc1MjAsCi0gICAgZGFya29yY2hpZDogMTAwNDAw
MTIsCi0gICAgZGFya3JlZDogOTEwOTUwNCwKLSAgICBkYXJrc2FsbW9uOiAxNTMwODQxMCwKLSAg
ICBkYXJrc2VhZ3JlZW46IDk0MTk5MTksCi0gICAgZGFya3NsYXRlYmx1ZTogNDczNDM0NywKLSAg
ICBkYXJrc2xhdGVncmF5OiAzMTAwNDk1LAotICAgIGRhcmtzbGF0ZWdyZXk6IDMxMDA0OTUsCi0g
ICAgZGFya3R1cnF1b2lzZTogNTI5NDUsCi0gICAgZGFya3Zpb2xldDogOTY5OTUzOSwKLSAgICBk
ZWVwcGluazogMTY3MTY5NDcsCi0gICAgZGVlcHNreWJsdWU6IDQ5MTUxLAotICAgIGRpbWdyYXk6
IDY5MDgyNjUsCi0gICAgZGltZ3JleTogNjkwODI2NSwKLSAgICBkb2RnZXJibHVlOiAyMDAzMTk5
LAotICAgIGZpcmVicmljazogMTE2NzQxNDYsCi0gICAgZmxvcmFsd2hpdGU6IDE2Nzc1OTIwLAot
ICAgIGZvcmVzdGdyZWVuOiAyMjYzODQyLAotICAgIGZ1Y2hzaWE6IDE2NzExOTM1LAotICAgIGdh
aW5zYm9ybzogMTQ0NzQ0NjAsCi0gICAgZ2hvc3R3aGl0ZTogMTYzMTY2NzEsCi0gICAgZ29sZDog
MTY3NjY3MjAsCi0gICAgZ29sZGVucm9kOiAxNDMyOTEyMCwKLSAgICBncmF5OiA4NDIxNTA0LAot
ICAgIGdyZWVuOiAzMjc2OCwKLSAgICBncmVlbnllbGxvdzogMTE0MDMwNTUsCi0gICAgZ3JleTog
ODQyMTUwNCwKLSAgICBob25leWRldzogMTU3OTQxNjAsCi0gICAgaG90cGluazogMTY3Mzg3NDAs
Ci0gICAgaW5kaWFucmVkOiAxMzQ1ODUyNCwKLSAgICBpbmRpZ286IDQ5MTUzMzAsCi0gICAgaXZv
cnk6IDE2Nzc3MjAwLAotICAgIGtoYWtpOiAxNTc4NzY2MCwKLSAgICBsYXZlbmRlcjogMTUxMzI0
MTAsCi0gICAgbGF2ZW5kZXJibHVzaDogMTY3NzMzNjUsCi0gICAgbGF3bmdyZWVuOiA4MTkwOTc2
LAotICAgIGxlbW9uY2hpZmZvbjogMTY3NzU4ODUsCi0gICAgbGlnaHRibHVlOiAxMTM5MzI1NCwK
LSAgICBsaWdodGNvcmFsOiAxNTc2MTUzNiwKLSAgICBsaWdodGN5YW46IDE0NzQ1NTk5LAotICAg
IGxpZ2h0Z29sZGVucm9keWVsbG93OiAxNjQ0ODIxMCwKLSAgICBsaWdodGdyYXk6IDEzODgyMzIz
LAotICAgIGxpZ2h0Z3JlZW46IDk0OTgyNTYsCi0gICAgbGlnaHRncmV5OiAxMzg4MjMyMywKLSAg
ICBsaWdodHBpbms6IDE2NzU4NDY1LAotICAgIGxpZ2h0c2FsbW9uOiAxNjc1Mjc2MiwKLSAgICBs
aWdodHNlYWdyZWVuOiAyMTQyODkwLAotICAgIGxpZ2h0c2t5Ymx1ZTogODkwMDM0NiwKLSAgICBs
aWdodHNsYXRlZ3JheTogNzgzMzc1MywKLSAgICBsaWdodHNsYXRlZ3JleTogNzgzMzc1MywKLSAg
ICBsaWdodHN0ZWVsYmx1ZTogMTE1ODQ3MzQsCi0gICAgbGlnaHR5ZWxsb3c6IDE2Nzc3MTg0LAot
ICAgIGxpbWU6IDY1MjgwLAotICAgIGxpbWVncmVlbjogMzMyOTMzMCwKLSAgICBsaW5lbjogMTY0
NDU2NzAsCi0gICAgbWFnZW50YTogMTY3MTE5MzUsCi0gICAgbWFyb29uOiA4Mzg4NjA4LAotICAg
IG1lZGl1bWFxdWFtYXJpbmU6IDY3MzczMjIsCi0gICAgbWVkaXVtYmx1ZTogMjA1LAotICAgIG1l
ZGl1bW9yY2hpZDogMTIyMTE2NjcsCi0gICAgbWVkaXVtcHVycGxlOiA5NjYyNjgzLAotICAgIG1l
ZGl1bXNlYWdyZWVuOiAzOTc4MDk3LAotICAgIG1lZGl1bXNsYXRlYmx1ZTogODA4Nzc5MCwKLSAg
ICBtZWRpdW1zcHJpbmdncmVlbjogNjQxNTQsCi0gICAgbWVkaXVtdHVycXVvaXNlOiA0NzcyMzAw
LAotICAgIG1lZGl1bXZpb2xldHJlZDogMTMwNDcxNzMsCi0gICAgbWlkbmlnaHRibHVlOiAxNjQ0
OTEyLAotICAgIG1pbnRjcmVhbTogMTYxMjE4NTAsCi0gICAgbWlzdHlyb3NlOiAxNjc3MDI3MywK
LSAgICBtb2NjYXNpbjogMTY3NzAyMjksCi0gICAgbmF2YWpvd2hpdGU6IDE2NzY4Njg1LAotICAg
IG5hdnk6IDEyOCwKLSAgICBvbGRsYWNlOiAxNjY0MzU1OCwKLSAgICBvbGl2ZTogODQyMTM3NiwK
LSAgICBvbGl2ZWRyYWI6IDcwNDg3MzksCi0gICAgb3JhbmdlOiAxNjc1MzkyMCwKLSAgICBvcmFu
Z2VyZWQ6IDE2NzI5MzQ0LAotICAgIG9yY2hpZDogMTQzMTU3MzQsCi0gICAgcGFsZWdvbGRlbnJv
ZDogMTU2NTcxMzAsCi0gICAgcGFsZWdyZWVuOiAxMDAyNTg4MCwKLSAgICBwYWxldHVycXVvaXNl
OiAxMTUyOTk2NiwKLSAgICBwYWxldmlvbGV0cmVkOiAxNDM4MTIwMywKLSAgICBwYXBheWF3aGlw
OiAxNjc3MzA3NywKLSAgICBwZWFjaHB1ZmY6IDE2NzY3NjczLAotICAgIHBlcnU6IDEzNDY4OTkx
LAotICAgIHBpbms6IDE2NzYxMDM1LAotICAgIHBsdW06IDE0NTI0NjM3LAotICAgIHBvd2RlcmJs
dWU6IDExNTkxOTEwLAotICAgIHB1cnBsZTogODM4ODczNiwKLSAgICByZWQ6IDE2NzExNjgwLAot
ICAgIHJvc3licm93bjogMTIzNTc1MTksCi0gICAgcm95YWxibHVlOiA0Mjg2OTQ1LAotICAgIHNh
ZGRsZWJyb3duOiA5MTI3MTg3LAotICAgIHNhbG1vbjogMTY0MTY4ODIsCi0gICAgc2FuZHlicm93
bjogMTYwMzI4NjQsCi0gICAgc2VhZ3JlZW46IDMwNTAzMjcsCi0gICAgc2Vhc2hlbGw6IDE2Nzc0
NjM4LAotICAgIHNpZW5uYTogMTA1MDY3OTcsCi0gICAgc2lsdmVyOiAxMjYzMjI1NiwKLSAgICBz
a3libHVlOiA4OTAwMzMxLAotICAgIHNsYXRlYmx1ZTogNjk3MDA2MSwKLSAgICBzbGF0ZWdyYXk6
IDczNzI5NDQsCi0gICAgc2xhdGVncmV5OiA3MzcyOTQ0LAotICAgIHNub3c6IDE2Nzc1OTMwLAot
ICAgIHNwcmluZ2dyZWVuOiA2NTQwNywKLSAgICBzdGVlbGJsdWU6IDQ2MjA5ODAsCi0gICAgdGFu
OiAxMzgwODc4MCwKLSAgICB0ZWFsOiAzMjg5NiwKLSAgICB0aGlzdGxlOiAxNDIwNDg4OCwKLSAg
ICB0b21hdG86IDE2NzM3MDk1LAotICAgIHR1cnF1b2lzZTogNDI1MTg1NiwKLSAgICB2aW9sZXQ6
IDE1NjMxMDg2LAotICAgIHdoZWF0OiAxNjExMzMzMSwKLSAgICB3aGl0ZTogMTY3NzcyMTUsCi0g
ICAgd2hpdGVzbW9rZTogMTYxMTkyODUsCi0gICAgeWVsbG93OiAxNjc3Njk2MCwKLSAgICB5ZWxs
b3dncmVlbjogMTAxNDUwNzQKLSAgfSk7Ci0gIGQzX3JnYl9uYW1lcy5mb3JFYWNoKGZ1bmN0aW9u
KGtleSwgdmFsdWUpIHsKLSAgICBkM19yZ2JfbmFtZXMuc2V0KGtleSwgZDNfcmdiTnVtYmVyKHZh
bHVlKSk7Ci0gIH0pOwotICBmdW5jdGlvbiBkM19mdW5jdG9yKHYpIHsKLSAgICByZXR1cm4gdHlw
ZW9mIHYgPT09ICJmdW5jdGlvbiIgPyB2IDogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdjsK
LSAgICB9OwotICB9Ci0gIGQzLmZ1bmN0b3IgPSBkM19mdW5jdG9yOwotICBmdW5jdGlvbiBkM19p
ZGVudGl0eShkKSB7Ci0gICAgcmV0dXJuIGQ7Ci0gIH0KLSAgZDMueGhyID0gZDNfeGhyVHlwZShk
M19pZGVudGl0eSk7Ci0gIGZ1bmN0aW9uIGQzX3hoclR5cGUocmVzcG9uc2UpIHsKLSAgICByZXR1
cm4gZnVuY3Rpb24odXJsLCBtaW1lVHlwZSwgY2FsbGJhY2spIHsKLSAgICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBtaW1lVHlwZSA9PT0gImZ1bmN0aW9uIikgY2FsbGJh
Y2sgPSBtaW1lVHlwZSwgCi0gICAgICBtaW1lVHlwZSA9IG51bGw7Ci0gICAgICByZXR1cm4gZDNf
eGhyKHVybCwgbWltZVR5cGUsIHJlc3BvbnNlLCBjYWxsYmFjayk7Ci0gICAgfTsKLSAgfQotICBm
dW5jdGlvbiBkM194aHIodXJsLCBtaW1lVHlwZSwgcmVzcG9uc2UsIGNhbGxiYWNrKSB7Ci0gICAg
dmFyIHhociA9IHt9LCBkaXNwYXRjaCA9IGQzLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwgInByb2dy
ZXNzIiwgImxvYWQiLCAiZXJyb3IiKSwgaGVhZGVycyA9IHt9LCByZXF1ZXN0ID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCksIHJlc3BvbnNlVHlwZSA9IG51bGw7Ci0gICAgaWYgKGQzX3dpbmRvdy5YRG9t
YWluUmVxdWVzdCAmJiAhKCJ3aXRoQ3JlZGVudGlhbHMiIGluIHJlcXVlc3QpICYmIC9eKGh0dHAo
cyk/Oik/XC9cLy8udGVzdCh1cmwpKSByZXF1ZXN0ID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7Ci0g
ICAgIm9ubG9hZCIgaW4gcmVxdWVzdCA/IHJlcXVlc3Qub25sb2FkID0gcmVxdWVzdC5vbmVycm9y
ID0gcmVzcG9uZCA6IHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICByZXF1ZXN0LnJlYWR5U3RhdGUgPiAzICYmIHJlc3BvbmQoKTsKLSAgICB9OwotICAgIGZ1
bmN0aW9uIHJlc3BvbmQoKSB7Ci0gICAgICB2YXIgc3RhdHVzID0gcmVxdWVzdC5zdGF0dXMsIHJl
c3VsdDsKLSAgICAgIGlmICghc3RhdHVzICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0IHx8IHN0YXR1
cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0KSB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuY2FsbCh4aHIsIHJlcXVlc3QpOwotICAg
ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgZGlzcGF0Y2guZXJyb3IuY2FsbCh4aHIsIGUp
OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkaXNwYXRjaC5sb2FkLmNh
bGwoeGhyLCByZXN1bHQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlzcGF0Y2guZXJyb3Iu
Y2FsbCh4aHIsIHJlcXVlc3QpOwotICAgICAgfQotICAgIH0KLSAgICByZXF1ZXN0Lm9ucHJvZ3Jl
c3MgPSBmdW5jdGlvbihldmVudCkgewotICAgICAgdmFyIG8gPSBkMy5ldmVudDsKLSAgICAgIGQz
LmV2ZW50ID0gZXZlbnQ7Ci0gICAgICB0cnkgewotICAgICAgICBkaXNwYXRjaC5wcm9ncmVzcy5j
YWxsKHhociwgcmVxdWVzdCk7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBkMy5ldmVudCA9
IG87Ci0gICAgICB9Ci0gICAgfTsKLSAgICB4aHIuaGVhZGVyID0gZnVuY3Rpb24obmFtZSwgdmFs
dWUpIHsKLSAgICAgIG5hbWUgPSAobmFtZSArICIiKS50b0xvd2VyQ2FzZSgpOwotICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gaGVhZGVyc1tuYW1lXTsKLSAgICAgIGlmICh2
YWx1ZSA9PSBudWxsKSBkZWxldGUgaGVhZGVyc1tuYW1lXTsgZWxzZSBoZWFkZXJzW25hbWVdID0g
dmFsdWUgKyAiIjsKLSAgICAgIHJldHVybiB4aHI7Ci0gICAgfTsKLSAgICB4aHIubWltZVR5cGUg
PSBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4g
bWltZVR5cGU7Ci0gICAgICBtaW1lVHlwZSA9IHZhbHVlID09IG51bGwgPyBudWxsIDogdmFsdWUg
KyAiIjsKLSAgICAgIHJldHVybiB4aHI7Ci0gICAgfTsKLSAgICB4aHIucmVzcG9uc2VUeXBlID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJl
c3BvbnNlVHlwZTsKLSAgICAgIHJlc3BvbnNlVHlwZSA9IHZhbHVlOwotICAgICAgcmV0dXJuIHho
cjsKLSAgICB9OwotICAgIHhoci5yZXNwb25zZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICBy
ZXNwb25zZSA9IHZhbHVlOwotICAgICAgcmV0dXJuIHhocjsKLSAgICB9OwotICAgIFsgImdldCIs
ICJwb3N0IiBdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7Ci0gICAgICB4aHJbbWV0aG9kXSA9
IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4geGhyLnNlbmQuYXBwbHkoeGhyLCBbIG1ldGhv
ZCBdLmNvbmNhdChkM19hcnJheShhcmd1bWVudHMpKSk7Ci0gICAgICB9OwotICAgIH0pOwotICAg
IHhoci5zZW5kID0gZnVuY3Rpb24obWV0aG9kLCBkYXRhLCBjYWxsYmFjaykgewotICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGRhdGEgPT09ICJmdW5jdGlvbiIpIGNh
bGxiYWNrID0gZGF0YSwgZGF0YSA9IG51bGw7Ci0gICAgICByZXF1ZXN0Lm9wZW4obWV0aG9kLCB1
cmwsIHRydWUpOwotICAgICAgaWYgKG1pbWVUeXBlICE9IG51bGwgJiYgISgiYWNjZXB0IiBpbiBo
ZWFkZXJzKSkgaGVhZGVyc1siYWNjZXB0Il0gPSBtaW1lVHlwZSArICIsKi8qIjsKLSAgICAgIGlm
IChyZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIpIGZvciAodmFyIG5hbWUgaW4gaGVhZGVycykgcmVx
dWVzdC5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIGhlYWRlcnNbbmFtZV0pOwotICAgICAgaWYgKG1p
bWVUeXBlICE9IG51bGwgJiYgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlKSByZXF1ZXN0Lm92ZXJy
aWRlTWltZVR5cGUobWltZVR5cGUpOwotICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPSBudWxsKSBy
ZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTsKLSAgICAgIGlmIChjYWxsYmFjayAh
PSBudWxsKSB4aHIub24oImVycm9yIiwgY2FsbGJhY2spLm9uKCJsb2FkIiwgZnVuY3Rpb24ocmVx
dWVzdCkgewotICAgICAgICBjYWxsYmFjayhudWxsLCByZXF1ZXN0KTsKLSAgICAgIH0pOwotICAg
ICAgZGlzcGF0Y2guYmVmb3Jlc2VuZC5jYWxsKHhociwgcmVxdWVzdCk7Ci0gICAgICByZXF1ZXN0
LnNlbmQoZGF0YSA9PSBudWxsID8gbnVsbCA6IGRhdGEpOwotICAgICAgcmV0dXJuIHhocjsKLSAg
ICB9OwotICAgIHhoci5hYm9ydCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmVxdWVzdC5hYm9ydCgp
OwotICAgICAgcmV0dXJuIHhocjsKLSAgICB9OwotICAgIGQzLnJlYmluZCh4aHIsIGRpc3BhdGNo
LCAib24iKTsKLSAgICByZXR1cm4gY2FsbGJhY2sgPT0gbnVsbCA/IHhociA6IHhoci5nZXQoZDNf
eGhyX2ZpeENhbGxiYWNrKGNhbGxiYWNrKSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfeGhyX2ZpeENh
bGxiYWNrKGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJuIGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IGZ1
bmN0aW9uKGVycm9yLCByZXF1ZXN0KSB7Ci0gICAgICBjYWxsYmFjayhlcnJvciA9PSBudWxsID8g
cmVxdWVzdCA6IG51bGwpOwotICAgIH0gOiBjYWxsYmFjazsKLSAgfQotICBkMy5kc3YgPSBmdW5j
dGlvbihkZWxpbWl0ZXIsIG1pbWVUeXBlKSB7Ci0gICAgdmFyIHJlRm9ybWF0ID0gbmV3IFJlZ0V4
cCgnWyInICsgZGVsaW1pdGVyICsgIlxuXSIpLCBkZWxpbWl0ZXJDb2RlID0gZGVsaW1pdGVyLmNo
YXJDb2RlQXQoMCk7Ci0gICAgZnVuY3Rpb24gZHN2KHVybCwgcm93LCBjYWxsYmFjaykgewotICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBjYWxsYmFjayA9IHJvdywgcm93ID0gbnVsbDsK
LSAgICAgIHZhciB4aHIgPSBkM194aHIodXJsLCBtaW1lVHlwZSwgcm93ID09IG51bGwgPyByZXNw
b25zZSA6IHR5cGVkUmVzcG9uc2Uocm93KSwgY2FsbGJhY2spOwotICAgICAgeGhyLnJvdyA9IGZ1
bmN0aW9uKF8pIHsKLSAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB4aHIucmVzcG9u
c2UoKHJvdyA9IF8pID09IG51bGwgPyByZXNwb25zZSA6IHR5cGVkUmVzcG9uc2UoXykpIDogcm93
OwotICAgICAgfTsKLSAgICAgIHJldHVybiB4aHI7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJlc3Bv
bnNlKHJlcXVlc3QpIHsKLSAgICAgIHJldHVybiBkc3YucGFyc2UocmVxdWVzdC5yZXNwb25zZVRl
eHQpOwotICAgIH0KLSAgICBmdW5jdGlvbiB0eXBlZFJlc3BvbnNlKGYpIHsKLSAgICAgIHJldHVy
biBmdW5jdGlvbihyZXF1ZXN0KSB7Ci0gICAgICAgIHJldHVybiBkc3YucGFyc2UocmVxdWVzdC5y
ZXNwb25zZVRleHQsIGYpOwotICAgICAgfTsKLSAgICB9Ci0gICAgZHN2LnBhcnNlID0gZnVuY3Rp
b24odGV4dCwgZikgewotICAgICAgdmFyIG87Ci0gICAgICByZXR1cm4gZHN2LnBhcnNlUm93cyh0
ZXh0LCBmdW5jdGlvbihyb3csIGkpIHsKLSAgICAgICAgaWYgKG8pIHJldHVybiBvKHJvdywgaSAt
IDEpOwotICAgICAgICB2YXIgYSA9IG5ldyBGdW5jdGlvbigiZCIsICJyZXR1cm4geyIgKyByb3cu
bWFwKGZ1bmN0aW9uKG5hbWUsIGkpIHsKLSAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnko
bmFtZSkgKyAiOiBkWyIgKyBpICsgIl0iOwotICAgICAgICB9KS5qb2luKCIsIikgKyAifSIpOwot
ICAgICAgICBvID0gZiA/IGZ1bmN0aW9uKHJvdywgaSkgewotICAgICAgICAgIHJldHVybiBmKGEo
cm93KSwgaSk7Ci0gICAgICAgIH0gOiBhOwotICAgICAgfSk7Ci0gICAgfTsKLSAgICBkc3YucGFy
c2VSb3dzID0gZnVuY3Rpb24odGV4dCwgZikgewotICAgICAgdmFyIEVPTCA9IHt9LCBFT0YgPSB7
fSwgcm93cyA9IFtdLCBOID0gdGV4dC5sZW5ndGgsIEkgPSAwLCBuID0gMCwgdCwgZW9sOwotICAg
ICAgZnVuY3Rpb24gdG9rZW4oKSB7Ci0gICAgICAgIGlmIChJID49IE4pIHJldHVybiBFT0Y7Ci0g
ICAgICAgIGlmIChlb2wpIHJldHVybiBlb2wgPSBmYWxzZSwgRU9MOwotICAgICAgICB2YXIgaiA9
IEk7Ci0gICAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaikgPT09IDM0KSB7Ci0gICAgICAgICAg
dmFyIGkgPSBqOwotICAgICAgICAgIHdoaWxlIChpKysgPCBOKSB7Ci0gICAgICAgICAgICBpZiAo
dGV4dC5jaGFyQ29kZUF0KGkpID09PSAzNCkgewotICAgICAgICAgICAgICBpZiAodGV4dC5jaGFy
Q29kZUF0KGkgKyAxKSAhPT0gMzQpIGJyZWFrOwotICAgICAgICAgICAgICArK2k7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIEkgPSBpICsgMjsKLSAgICAgICAgICB2YXIg
YyA9IHRleHQuY2hhckNvZGVBdChpICsgMSk7Ci0gICAgICAgICAgaWYgKGMgPT09IDEzKSB7Ci0g
ICAgICAgICAgICBlb2wgPSB0cnVlOwotICAgICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChp
ICsgMikgPT09IDEwKSArK0k7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAxMCkgewotICAg
ICAgICAgICAgZW9sID0gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIHRleHQu
c3Vic3RyaW5nKGogKyAxLCBpKS5yZXBsYWNlKC8iIi9nLCAnIicpOwotICAgICAgICB9Ci0gICAg
ICAgIHdoaWxlIChJIDwgTikgewotICAgICAgICAgIHZhciBjID0gdGV4dC5jaGFyQ29kZUF0KEkr
KyksIGsgPSAxOwotICAgICAgICAgIGlmIChjID09PSAxMCkgZW9sID0gdHJ1ZTsgZWxzZSBpZiAo
YyA9PT0gMTMpIHsKLSAgICAgICAgICAgIGVvbCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGV4
dC5jaGFyQ29kZUF0KEkpID09PSAxMCkgKytJLCArK2s7Ci0gICAgICAgICAgfSBlbHNlIGlmIChj
ICE9PSBkZWxpbWl0ZXJDb2RlKSBjb250aW51ZTsKLSAgICAgICAgICByZXR1cm4gdGV4dC5zdWJz
dHJpbmcoaiwgSSAtIGspOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmlu
ZyhqKTsKLSAgICAgIH0KLSAgICAgIHdoaWxlICgodCA9IHRva2VuKCkpICE9PSBFT0YpIHsKLSAg
ICAgICAgdmFyIGEgPSBbXTsKLSAgICAgICAgd2hpbGUgKHQgIT09IEVPTCAmJiB0ICE9PSBFT0Yp
IHsKLSAgICAgICAgICBhLnB1c2godCk7Ci0gICAgICAgICAgdCA9IHRva2VuKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGYgJiYgIShhID0gZihhLCBuKyspKSkgY29udGludWU7Ci0gICAgICAg
IHJvd3MucHVzaChhKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByb3dzOwotICAgIH07Ci0gICAg
ZHN2LmZvcm1hdCA9IGZ1bmN0aW9uKHJvd3MpIHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KHJv
d3NbMF0pKSByZXR1cm4gZHN2LmZvcm1hdFJvd3Mocm93cyk7Ci0gICAgICB2YXIgZmllbGRTZXQg
PSBuZXcgZDNfU2V0KCksIGZpZWxkcyA9IFtdOwotICAgICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9u
KHJvdykgewotICAgICAgICBmb3IgKHZhciBmaWVsZCBpbiByb3cpIHsKLSAgICAgICAgICBpZiAo
IWZpZWxkU2V0LmhhcyhmaWVsZCkpIHsKLSAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkU2V0
LmFkZChmaWVsZCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBy
ZXR1cm4gWyBmaWVsZHMubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcikgXS5jb25jYXQo
cm93cy5tYXAoZnVuY3Rpb24ocm93KSB7Ci0gICAgICAgIHJldHVybiBmaWVsZHMubWFwKGZ1bmN0
aW9uKGZpZWxkKSB7Ci0gICAgICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKHJvd1tmaWVsZF0pOwot
ICAgICAgICB9KS5qb2luKGRlbGltaXRlcik7Ci0gICAgICB9KSkuam9pbigiXG4iKTsKLSAgICB9
OwotICAgIGRzdi5mb3JtYXRSb3dzID0gZnVuY3Rpb24ocm93cykgewotICAgICAgcmV0dXJuIHJv
d3MubWFwKGZvcm1hdFJvdykuam9pbigiXG4iKTsKLSAgICB9OwotICAgIGZ1bmN0aW9uIGZvcm1h
dFJvdyhyb3cpIHsKLSAgICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGlt
aXRlcik7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKHRleHQpIHsKLSAgICAgIHJl
dHVybiByZUZvcm1hdC50ZXN0KHRleHQpID8gJyInICsgdGV4dC5yZXBsYWNlKC9cIi9nLCAnIiIn
KSArICciJyA6IHRleHQ7Ci0gICAgfQotICAgIHJldHVybiBkc3Y7Ci0gIH07Ci0gIGQzLmNzdiA9
IGQzLmRzdigiLCIsICJ0ZXh0L2NzdiIpOwotICBkMy50c3YgPSBkMy5kc3YoIiAgICAiLCAidGV4
dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpOwotICBkMy50b3VjaCA9IGZ1bmN0aW9uKGNvbnRhaW5l
ciwgdG91Y2hlcywgaWRlbnRpZmllcikgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykg
aWRlbnRpZmllciA9IHRvdWNoZXMsIHRvdWNoZXMgPSBkM19ldmVudFNvdXJjZSgpLmNoYW5nZWRU
b3VjaGVzOwotICAgIGlmICh0b3VjaGVzKSBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMubGVu
Z3RoLCB0b3VjaDsgaSA8IG47ICsraSkgewotICAgICAgaWYgKCh0b3VjaCA9IHRvdWNoZXNbaV0p
LmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHsKLSAgICAgICAgcmV0dXJuIGQzX21vdXNlUG9p
bnQoY29udGFpbmVyLCB0b3VjaCk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotICB2YXIgZDNfdGlt
ZXJfcXVldWVIZWFkLCBkM190aW1lcl9xdWV1ZVRhaWwsIGQzX3RpbWVyX2ludGVydmFsLCBkM190
aW1lcl90aW1lb3V0LCBkM190aW1lcl9hY3RpdmUsIGQzX3RpbWVyX2ZyYW1lID0gZDNfd2luZG93
W2QzX3ZlbmRvclN5bWJvbChkM193aW5kb3csICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV0gfHwg
ZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAxNyk7Ci0gIH07
Ci0gIGQzLnRpbWVyID0gZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aGVuKSB7Ci0gICAgdmFy
IG4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAgIGlmIChuIDwgMikgZGVsYXkgPSAwOwotICAgIGlm
IChuIDwgMykgdGhlbiA9IERhdGUubm93KCk7Ci0gICAgdmFyIHRpbWUgPSB0aGVuICsgZGVsYXks
IHRpbWVyID0gewotICAgICAgYzogY2FsbGJhY2ssCi0gICAgICB0OiB0aW1lLAotICAgICAgZjog
ZmFsc2UsCi0gICAgICBuOiBudWxsCi0gICAgfTsKLSAgICBpZiAoZDNfdGltZXJfcXVldWVUYWls
KSBkM190aW1lcl9xdWV1ZVRhaWwubiA9IHRpbWVyOyBlbHNlIGQzX3RpbWVyX3F1ZXVlSGVhZCA9
IHRpbWVyOwotICAgIGQzX3RpbWVyX3F1ZXVlVGFpbCA9IHRpbWVyOwotICAgIGlmICghZDNfdGlt
ZXJfaW50ZXJ2YWwpIHsKLSAgICAgIGQzX3RpbWVyX3RpbWVvdXQgPSBjbGVhclRpbWVvdXQoZDNf
dGltZXJfdGltZW91dCk7Ci0gICAgICBkM190aW1lcl9pbnRlcnZhbCA9IDE7Ci0gICAgICBkM190
aW1lcl9mcmFtZShkM190aW1lcl9zdGVwKTsKLSAgICB9Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3Rp
bWVyX3N0ZXAoKSB7Ci0gICAgdmFyIG5vdyA9IGQzX3RpbWVyX21hcmsoKSwgZGVsYXkgPSBkM190
aW1lcl9zd2VlcCgpIC0gbm93OwotICAgIGlmIChkZWxheSA+IDI0KSB7Ci0gICAgICBpZiAoaXNG
aW5pdGUoZGVsYXkpKSB7Ci0gICAgICAgIGNsZWFyVGltZW91dChkM190aW1lcl90aW1lb3V0KTsK
LSAgICAgICAgZDNfdGltZXJfdGltZW91dCA9IHNldFRpbWVvdXQoZDNfdGltZXJfc3RlcCwgZGVs
YXkpOwotICAgICAgfQotICAgICAgZDNfdGltZXJfaW50ZXJ2YWwgPSAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICBkM190aW1lcl9pbnRlcnZhbCA9IDE7Ci0gICAgICBkM190aW1lcl9mcmFtZShkM190
aW1lcl9zdGVwKTsKLSAgICB9Ci0gIH0KLSAgZDMudGltZXIuZmx1c2ggPSBmdW5jdGlvbigpIHsK
LSAgICBkM190aW1lcl9tYXJrKCk7Ci0gICAgZDNfdGltZXJfc3dlZXAoKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gZDNfdGltZXJfbWFyaygpIHsKLSAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTsKLSAgICBk
M190aW1lcl9hY3RpdmUgPSBkM190aW1lcl9xdWV1ZUhlYWQ7Ci0gICAgd2hpbGUgKGQzX3RpbWVy
X2FjdGl2ZSkgewotICAgICAgaWYgKG5vdyA+PSBkM190aW1lcl9hY3RpdmUudCkgZDNfdGltZXJf
YWN0aXZlLmYgPSBkM190aW1lcl9hY3RpdmUuYyhub3cgLSBkM190aW1lcl9hY3RpdmUudCk7Ci0g
ICAgICBkM190aW1lcl9hY3RpdmUgPSBkM190aW1lcl9hY3RpdmUubjsKLSAgICB9Ci0gICAgcmV0
dXJuIG5vdzsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lcl9zd2VlcCgpIHsKLSAgICB2YXIgdDAs
IHQxID0gZDNfdGltZXJfcXVldWVIZWFkLCB0aW1lID0gSW5maW5pdHk7Ci0gICAgd2hpbGUgKHQx
KSB7Ci0gICAgICBpZiAodDEuZikgewotICAgICAgICB0MSA9IHQwID8gdDAubiA9IHQxLm4gOiBk
M190aW1lcl9xdWV1ZUhlYWQgPSB0MS5uOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHQx
LnQgPCB0aW1lKSB0aW1lID0gdDEudDsKLSAgICAgICAgdDEgPSAodDAgPSB0MSkubjsKLSAgICAg
IH0KLSAgICB9Ci0gICAgZDNfdGltZXJfcXVldWVUYWlsID0gdDA7Ci0gICAgcmV0dXJuIHRpbWU7
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZm9ybWF0X3ByZWNpc2lvbih4LCBwKSB7Ci0gICAgcmV0dXJu
IHAgLSAoeCA/IE1hdGguY2VpbChNYXRoLmxvZyh4KSAvIE1hdGguTE4xMCkgOiAxKTsKLSAgfQot
ICBkMy5yb3VuZCA9IGZ1bmN0aW9uKHgsIG4pIHsKLSAgICByZXR1cm4gbiA/IE1hdGgucm91bmQo
eCAqIChuID0gTWF0aC5wb3coMTAsIG4pKSkgLyBuIDogTWF0aC5yb3VuZCh4KTsKLSAgfTsKLSAg
dmFyIGQzX2Zvcm1hdFByZWZpeGVzID0gWyAieSIsICJ6IiwgImEiLCAiZiIsICJwIiwgIm4iLCAi
wrUiLCAibSIsICIiLCAiayIsICJNIiwgIkciLCAiVCIsICJQIiwgIkUiLCAiWiIsICJZIiBdLm1h
cChkM19mb3JtYXRQcmVmaXgpOwotICBkMy5mb3JtYXRQcmVmaXggPSBmdW5jdGlvbih2YWx1ZSwg
cHJlY2lzaW9uKSB7Ci0gICAgdmFyIGkgPSAwOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgaWYg
KHZhbHVlIDwgMCkgdmFsdWUgKj0gLTE7Ci0gICAgICBpZiAocHJlY2lzaW9uKSB2YWx1ZSA9IGQz
LnJvdW5kKHZhbHVlLCBkM19mb3JtYXRfcHJlY2lzaW9uKHZhbHVlLCBwcmVjaXNpb24pKTsKLSAg
ICAgIGkgPSAxICsgTWF0aC5mbG9vcigxZS0xMiArIE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4x
MCk7Ci0gICAgICBpID0gTWF0aC5tYXgoLTI0LCBNYXRoLm1pbigyNCwgTWF0aC5mbG9vcigoaSAt
IDEpIC8gMykgKiAzKSk7Ci0gICAgfQotICAgIHJldHVybiBkM19mb3JtYXRQcmVmaXhlc1s4ICsg
aSAvIDNdOwotICB9OwotICBmdW5jdGlvbiBkM19mb3JtYXRQcmVmaXgoZCwgaSkgewotICAgIHZh
ciBrID0gTWF0aC5wb3coMTAsIGFicyg4IC0gaSkgKiAzKTsKLSAgICByZXR1cm4gewotICAgICAg
c2NhbGU6IGkgPiA4ID8gZnVuY3Rpb24oZCkgewotICAgICAgICByZXR1cm4gZCAvIGs7Ci0gICAg
ICB9IDogZnVuY3Rpb24oZCkgewotICAgICAgICByZXR1cm4gZCAqIGs7Ci0gICAgICB9LAotICAg
ICAgc3ltYm9sOiBkCi0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19sb2NhbGVfbnVtYmVyRm9y
bWF0KGxvY2FsZSkgewotICAgIHZhciBsb2NhbGVfZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsLCBs
b2NhbGVfdGhvdXNhbmRzID0gbG9jYWxlLnRob3VzYW5kcywgbG9jYWxlX2dyb3VwaW5nID0gbG9j
YWxlLmdyb3VwaW5nLCBsb2NhbGVfY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksIGZvcm1hdEdy
b3VwID0gbG9jYWxlX2dyb3VwaW5nID8gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHZhciBpID0g
dmFsdWUubGVuZ3RoLCB0ID0gW10sIGogPSAwLCBnID0gbG9jYWxlX2dyb3VwaW5nWzBdOwotICAg
ICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7Ci0gICAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJp
bmcoaSAtPSBnLCBpICsgZykpOwotICAgICAgICBnID0gbG9jYWxlX2dyb3VwaW5nW2ogPSAoaiAr
IDEpICUgbG9jYWxlX2dyb3VwaW5nLmxlbmd0aF07Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdC5y
ZXZlcnNlKCkuam9pbihsb2NhbGVfdGhvdXNhbmRzKTsKLSAgICB9IDogZDNfaWRlbnRpdHk7Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uKHNwZWNpZmllcikgewotICAgICAgdmFyIG1hdGNoID0gZDNfZm9y
bWF0X3JlLmV4ZWMoc3BlY2lmaWVyKSwgZmlsbCA9IG1hdGNoWzFdIHx8ICIgIiwgYWxpZ24gPSBt
YXRjaFsyXSB8fCAiPiIsIHNpZ24gPSBtYXRjaFszXSB8fCAiIiwgc3ltYm9sID0gbWF0Y2hbNF0g
fHwgIiIsIHpmaWxsID0gbWF0Y2hbNV0sIHdpZHRoID0gK21hdGNoWzZdLCBjb21tYSA9IG1hdGNo
WzddLCBwcmVjaXNpb24gPSBtYXRjaFs4XSwgdHlwZSA9IG1hdGNoWzldLCBzY2FsZSA9IDEsIHBy
ZWZpeCA9ICIiLCBzdWZmaXggPSAiIiwgaW50ZWdlciA9IGZhbHNlOwotICAgICAgaWYgKHByZWNp
c2lvbikgcHJlY2lzaW9uID0gK3ByZWNpc2lvbi5zdWJzdHJpbmcoMSk7Ci0gICAgICBpZiAoemZp
bGwgfHwgZmlsbCA9PT0gIjAiICYmIGFsaWduID09PSAiPSIpIHsKLSAgICAgICAgemZpbGwgPSBm
aWxsID0gIjAiOwotICAgICAgICBhbGlnbiA9ICI9IjsKLSAgICAgICAgaWYgKGNvbW1hKSB3aWR0
aCAtPSBNYXRoLmZsb29yKCh3aWR0aCAtIDEpIC8gNCk7Ci0gICAgICB9Ci0gICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICBjYXNlICJuIjoKLSAgICAgICAgY29tbWEgPSB0cnVlOwotICAgICAg
ICB0eXBlID0gImciOwotICAgICAgICBicmVhazsKLQotICAgICAgIGNhc2UgIiUiOgotICAgICAg
ICBzY2FsZSA9IDEwMDsKLSAgICAgICAgc3VmZml4ID0gIiUiOwotICAgICAgICB0eXBlID0gImYi
OwotICAgICAgICBicmVhazsKLQotICAgICAgIGNhc2UgInAiOgotICAgICAgICBzY2FsZSA9IDEw
MDsKLSAgICAgICAgc3VmZml4ID0gIiUiOwotICAgICAgICB0eXBlID0gInIiOwotICAgICAgICBi
cmVhazsKLQotICAgICAgIGNhc2UgImIiOgotICAgICAgIGNhc2UgIm8iOgotICAgICAgIGNhc2Ug
IngiOgotICAgICAgIGNhc2UgIlgiOgotICAgICAgICBpZiAoc3ltYm9sID09PSAiIyIpIHByZWZp
eCA9ICIwIiArIHR5cGUudG9Mb3dlckNhc2UoKTsKLQotICAgICAgIGNhc2UgImMiOgotICAgICAg
IGNhc2UgImQiOgotICAgICAgICBpbnRlZ2VyID0gdHJ1ZTsKLSAgICAgICAgcHJlY2lzaW9uID0g
MDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICBjYXNlICJzIjoKLSAgICAgICAgc2NhbGUgPSAt
MTsKLSAgICAgICAgdHlwZSA9ICJyIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBp
ZiAoc3ltYm9sID09PSAiJCIpIHByZWZpeCA9IGxvY2FsZV9jdXJyZW5jeVswXSwgc3VmZml4ID0g
bG9jYWxlX2N1cnJlbmN5WzFdOwotICAgICAgaWYgKHR5cGUgPT0gInIiICYmICFwcmVjaXNpb24p
IHR5cGUgPSAiZyI7Ci0gICAgICBpZiAocHJlY2lzaW9uICE9IG51bGwpIHsKLSAgICAgICAgaWYg
KHR5cGUgPT0gImciKSBwcmVjaXNpb24gPSBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lz
aW9uKSk7IGVsc2UgaWYgKHR5cGUgPT0gImUiIHx8IHR5cGUgPT0gImYiKSBwcmVjaXNpb24gPSBN
YXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7Ci0gICAgICB9Ci0gICAgICB0eXBl
ID0gZDNfZm9ybWF0X3R5cGVzLmdldCh0eXBlKSB8fCBkM19mb3JtYXRfdHlwZURlZmF1bHQ7Ci0g
ICAgICB2YXIgemNvbW1hID0gemZpbGwgJiYgY29tbWE7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24o
dmFsdWUpIHsKLSAgICAgICAgdmFyIGZ1bGxTdWZmaXggPSBzdWZmaXg7Ci0gICAgICAgIGlmIChp
bnRlZ2VyICYmIHZhbHVlICUgMSkgcmV0dXJuICIiOwotICAgICAgICB2YXIgbmVnYXRpdmUgPSB2
YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/ICh2YWx1ZSA9IC12YWx1
ZSwgIi0iKSA6IHNpZ247Ci0gICAgICAgIGlmIChzY2FsZSA8IDApIHsKLSAgICAgICAgICB2YXIg
dW5pdCA9IGQzLmZvcm1hdFByZWZpeCh2YWx1ZSwgcHJlY2lzaW9uKTsKLSAgICAgICAgICB2YWx1
ZSA9IHVuaXQuc2NhbGUodmFsdWUpOwotICAgICAgICAgIGZ1bGxTdWZmaXggPSB1bml0LnN5bWJv
bCArIHN1ZmZpeDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YWx1ZSAqPSBzY2FsZTsK
LSAgICAgICAgfQotICAgICAgICB2YWx1ZSA9IHR5cGUodmFsdWUsIHByZWNpc2lvbik7Ci0gICAg
ICAgIHZhciBpID0gdmFsdWUubGFzdEluZGV4T2YoIi4iKSwgYmVmb3JlID0gaSA8IDAgPyB2YWx1
ZSA6IHZhbHVlLnN1YnN0cmluZygwLCBpKSwgYWZ0ZXIgPSBpIDwgMCA/ICIiIDogbG9jYWxlX2Rl
Y2ltYWwgKyB2YWx1ZS5zdWJzdHJpbmcoaSArIDEpOwotICAgICAgICBpZiAoIXpmaWxsICYmIGNv
bW1hKSBiZWZvcmUgPSBmb3JtYXRHcm91cChiZWZvcmUpOwotICAgICAgICB2YXIgbGVuZ3RoID0g
cHJlZml4Lmxlbmd0aCArIGJlZm9yZS5sZW5ndGggKyBhZnRlci5sZW5ndGggKyAoemNvbW1hID8g
MCA6IG5lZ2F0aXZlLmxlbmd0aCksIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJh
eShsZW5ndGggPSB3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiAiIjsKLSAgICAgICAg
aWYgKHpjb21tYSkgYmVmb3JlID0gZm9ybWF0R3JvdXAocGFkZGluZyArIGJlZm9yZSk7Ci0gICAg
ICAgIG5lZ2F0aXZlICs9IHByZWZpeDsKLSAgICAgICAgdmFsdWUgPSBiZWZvcmUgKyBhZnRlcjsK
LSAgICAgICAgcmV0dXJuIChhbGlnbiA9PT0gIjwiID8gbmVnYXRpdmUgKyB2YWx1ZSArIHBhZGRp
bmcgOiBhbGlnbiA9PT0gIj4iID8gcGFkZGluZyArIG5lZ2F0aXZlICsgdmFsdWUgOiBhbGlnbiA9
PT0gIl4iID8gcGFkZGluZy5zdWJzdHJpbmcoMCwgbGVuZ3RoID4+PSAxKSArIG5lZ2F0aXZlICsg
dmFsdWUgKyBwYWRkaW5nLnN1YnN0cmluZyhsZW5ndGgpIDogbmVnYXRpdmUgKyAoemNvbW1hID8g
dmFsdWUgOiBwYWRkaW5nICsgdmFsdWUpKSArIGZ1bGxTdWZmaXg7Ci0gICAgICB9OwotICAgIH07
Ci0gIH0KLSAgdmFyIGQzX2Zvcm1hdF9yZSA9IC8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0p
PyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaTsKLSAgdmFyIGQzX2Zv
cm1hdF90eXBlcyA9IGQzLm1hcCh7Ci0gICAgYjogZnVuY3Rpb24oeCkgewotICAgICAgcmV0dXJu
IHgudG9TdHJpbmcoMik7Ci0gICAgfSwKLSAgICBjOiBmdW5jdGlvbih4KSB7Ci0gICAgICByZXR1
cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KTsKLSAgICB9LAotICAgIG86IGZ1bmN0aW9uKHgpIHsK
LSAgICAgIHJldHVybiB4LnRvU3RyaW5nKDgpOwotICAgIH0sCi0gICAgeDogZnVuY3Rpb24oeCkg
ewotICAgICAgcmV0dXJuIHgudG9TdHJpbmcoMTYpOwotICAgIH0sCi0gICAgWDogZnVuY3Rpb24o
eCkgewotICAgICAgcmV0dXJuIHgudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Ci0gICAgfSwK
LSAgICBnOiBmdW5jdGlvbih4LCBwKSB7Ci0gICAgICByZXR1cm4geC50b1ByZWNpc2lvbihwKTsK
LSAgICB9LAotICAgIGU6IGZ1bmN0aW9uKHgsIHApIHsKLSAgICAgIHJldHVybiB4LnRvRXhwb25l
bnRpYWwocCk7Ci0gICAgfSwKLSAgICBmOiBmdW5jdGlvbih4LCBwKSB7Ci0gICAgICByZXR1cm4g
eC50b0ZpeGVkKHApOwotICAgIH0sCi0gICAgcjogZnVuY3Rpb24oeCwgcCkgewotICAgICAgcmV0
dXJuICh4ID0gZDMucm91bmQoeCwgZDNfZm9ybWF0X3ByZWNpc2lvbih4LCBwKSkpLnRvRml4ZWQo
TWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIGQzX2Zvcm1hdF9wcmVjaXNpb24oeCAqICgxICsgMWUt
MTUpLCBwKSkpKTsKLSAgICB9Ci0gIH0pOwotICBmdW5jdGlvbiBkM19mb3JtYXRfdHlwZURlZmF1
bHQoeCkgewotICAgIHJldHVybiB4ICsgIiI7Ci0gIH0KLSAgdmFyIGQzX3RpbWUgPSBkMy50aW1l
ID0ge30sIGQzX2RhdGUgPSBEYXRlOwotICBmdW5jdGlvbiBkM19kYXRlX3V0YygpIHsKLSAgICB0
aGlzLl8gPSBuZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoID4gMSA/IERhdGUuVVRDLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykgOiBhcmd1bWVudHNbMF0pOwotICB9Ci0gIGQzX2RhdGVfdXRjLnByb3Rv
dHlwZSA9IHsKLSAgICBnZXREYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLl8u
Z2V0VVRDRGF0ZSgpOwotICAgIH0sCi0gICAgZ2V0RGF5OiBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiB0aGlzLl8uZ2V0VVRDRGF5KCk7Ci0gICAgfSwKLSAgICBnZXRGdWxsWWVhcjogZnVuY3Rp
b24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCk7Ci0gICAgfSwKLSAg
ICBnZXRIb3VyczogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVUQ0hvdXJz
KCk7Ci0gICAgfSwKLSAgICBnZXRNaWxsaXNlY29uZHM6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0
dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKTsKLSAgICB9LAotICAgIGdldE1pbnV0ZXM6
IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCk7Ci0gICAg
fSwKLSAgICBnZXRNb250aDogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFVU
Q01vbnRoKCk7Ci0gICAgfSwKLSAgICBnZXRTZWNvbmRzOiBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpOwotICAgIH0sCi0gICAgZ2V0VGltZTogZnVuY3Rp
b24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLmdldFRpbWUoKTsKLSAgICB9LAotICAgIGdldFRp
bWV6b25lT2Zmc2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0sCi0gICAg
dmFsdWVPZjogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fLnZhbHVlT2YoKTsKLSAg
ICB9LAotICAgIHNldERhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgZDNfdGltZV9wcm90b3R5cGUu
c2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAgICBzZXREYXk6
IGZ1bmN0aW9uKCkgewotICAgICAgZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDRGF5LmFwcGx5KHRo
aXMuXywgYXJndW1lbnRzKTsKLSAgICB9LAotICAgIHNldEZ1bGxZZWFyOiBmdW5jdGlvbigpIHsK
LSAgICAgIGQzX3RpbWVfcHJvdG90eXBlLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXywgYXJn
dW1lbnRzKTsKLSAgICB9LAotICAgIHNldEhvdXJzOiBmdW5jdGlvbigpIHsKLSAgICAgIGQzX3Rp
bWVfcHJvdG90eXBlLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTsKLSAgICB9
LAotICAgIHNldE1pbGxpc2Vjb25kczogZnVuY3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3Byb3Rv
dHlwZS5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpOwotICAgIH0s
Ci0gICAgc2V0TWludXRlczogZnVuY3Rpb24oKSB7Ci0gICAgICBkM190aW1lX3Byb3RvdHlwZS5z
ZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTsKLSAgICB9LAotICAgIHNldE1v
bnRoOiBmdW5jdGlvbigpIHsKLSAgICAgIGQzX3RpbWVfcHJvdG90eXBlLnNldFVUQ01vbnRoLmFw
cGx5KHRoaXMuXywgYXJndW1lbnRzKTsKLSAgICB9LAotICAgIHNldFNlY29uZHM6IGZ1bmN0aW9u
KCkgewotICAgICAgZDNfdGltZV9wcm90b3R5cGUuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8s
IGFyZ3VtZW50cyk7Ci0gICAgfSwKLSAgICBzZXRUaW1lOiBmdW5jdGlvbigpIHsKLSAgICAgIGQz
X3RpbWVfcHJvdG90eXBlLnNldFRpbWUuYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpOwotICAgIH0K
LSAgfTsKLSAgdmFyIGQzX3RpbWVfcHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7Ci0gIGZ1bmN0
aW9uIGQzX3RpbWVfaW50ZXJ2YWwobG9jYWwsIHN0ZXAsIG51bWJlcikgewotICAgIGZ1bmN0aW9u
IHJvdW5kKGRhdGUpIHsKLSAgICAgIHZhciBkMCA9IGxvY2FsKGRhdGUpLCBkMSA9IG9mZnNldChk
MCwgMSk7Ci0gICAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTsKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gY2VpbChkYXRlKSB7Ci0gICAgICBzdGVwKGRhdGUgPSBsb2NhbChu
ZXcgZDNfZGF0ZShkYXRlIC0gMSkpLCAxKTsKLSAgICAgIHJldHVybiBkYXRlOwotICAgIH0KLSAg
ICBmdW5jdGlvbiBvZmZzZXQoZGF0ZSwgaykgewotICAgICAgc3RlcChkYXRlID0gbmV3IGQzX2Rh
dGUoK2RhdGUpLCBrKTsKLSAgICAgIHJldHVybiBkYXRlOwotICAgIH0KLSAgICBmdW5jdGlvbiBy
YW5nZSh0MCwgdDEsIGR0KSB7Ci0gICAgICB2YXIgdGltZSA9IGNlaWwodDApLCB0aW1lcyA9IFtd
OwotICAgICAgaWYgKGR0ID4gMSkgewotICAgICAgICB3aGlsZSAodGltZSA8IHQxKSB7Ci0gICAg
ICAgICAgaWYgKCEobnVtYmVyKHRpbWUpICUgZHQpKSB0aW1lcy5wdXNoKG5ldyBEYXRlKCt0aW1l
KSk7Ci0gICAgICAgICAgc3RlcCh0aW1lLCAxKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgd2hpbGUgKHRpbWUgPCB0MSkgdGltZXMucHVzaChuZXcgRGF0ZSgrdGltZSkpLCBz
dGVwKHRpbWUsIDEpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRpbWVzOwotICAgIH0KLSAgICBm
dW5jdGlvbiByYW5nZV91dGModDAsIHQxLCBkdCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgZDNf
ZGF0ZSA9IGQzX2RhdGVfdXRjOwotICAgICAgICB2YXIgdXRjID0gbmV3IGQzX2RhdGVfdXRjKCk7
Ci0gICAgICAgIHV0Yy5fID0gdDA7Ci0gICAgICAgIHJldHVybiByYW5nZSh1dGMsIHQxLCBkdCk7
Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBkM19kYXRlID0gRGF0ZTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgbG9jYWwuZmxvb3IgPSBsb2NhbDsKLSAgICBsb2NhbC5yb3VuZCA9IHJvdW5kOwot
ICAgIGxvY2FsLmNlaWwgPSBjZWlsOwotICAgIGxvY2FsLm9mZnNldCA9IG9mZnNldDsKLSAgICBs
b2NhbC5yYW5nZSA9IHJhbmdlOwotICAgIHZhciB1dGMgPSBsb2NhbC51dGMgPSBkM190aW1lX2lu
dGVydmFsX3V0Yyhsb2NhbCk7Ci0gICAgdXRjLmZsb29yID0gdXRjOwotICAgIHV0Yy5yb3VuZCA9
IGQzX3RpbWVfaW50ZXJ2YWxfdXRjKHJvdW5kKTsKLSAgICB1dGMuY2VpbCA9IGQzX3RpbWVfaW50
ZXJ2YWxfdXRjKGNlaWwpOwotICAgIHV0Yy5vZmZzZXQgPSBkM190aW1lX2ludGVydmFsX3V0Yyhv
ZmZzZXQpOwotICAgIHV0Yy5yYW5nZSA9IHJhbmdlX3V0YzsKLSAgICByZXR1cm4gbG9jYWw7Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfdGltZV9pbnRlcnZhbF91dGMobWV0aG9kKSB7Ci0gICAgcmV0dXJu
IGZ1bmN0aW9uKGRhdGUsIGspIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGQzX2RhdGUgPSBkM19k
YXRlX3V0YzsKLSAgICAgICAgdmFyIHV0YyA9IG5ldyBkM19kYXRlX3V0YygpOwotICAgICAgICB1
dGMuXyA9IGRhdGU7Ci0gICAgICAgIHJldHVybiBtZXRob2QodXRjLCBrKS5fOwotICAgICAgfSBm
aW5hbGx5IHsKLSAgICAgICAgZDNfZGF0ZSA9IERhdGU7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQot
ICBkM190aW1lLnllYXIgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHsKLSAgICBk
YXRlID0gZDNfdGltZS5kYXkoZGF0ZSk7Ci0gICAgZGF0ZS5zZXRNb250aCgwLCAxKTsKLSAgICBy
ZXR1cm4gZGF0ZTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0KSB7Ci0gICAgZGF0ZS5zZXRG
dWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBvZmZzZXQpOwotICB9LCBmdW5jdGlvbihkYXRl
KSB7Ci0gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTsKLSAgfSk7Ci0gIGQzX3RpbWUueWVh
cnMgPSBkM190aW1lLnllYXIucmFuZ2U7Ci0gIGQzX3RpbWUueWVhcnMudXRjID0gZDNfdGltZS55
ZWFyLnV0Yy5yYW5nZTsKLSAgZDNfdGltZS5kYXkgPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9u
KGRhdGUpIHsKLSAgICB2YXIgZGF5ID0gbmV3IGQzX2RhdGUoMmUzLCAwKTsKLSAgICBkYXkuc2V0
RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0
ZSgpKTsKLSAgICByZXR1cm4gZGF5OwotICB9LCBmdW5jdGlvbihkYXRlLCBvZmZzZXQpIHsKLSAg
ICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBvZmZzZXQpOwotICB9LCBmdW5jdGlvbihk
YXRlKSB7Ci0gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTsKLSAgfSk7Ci0gIGQzX3RpbWUu
ZGF5cyA9IGQzX3RpbWUuZGF5LnJhbmdlOwotICBkM190aW1lLmRheXMudXRjID0gZDNfdGltZS5k
YXkudXRjLnJhbmdlOwotICBkM190aW1lLmRheU9mWWVhciA9IGZ1bmN0aW9uKGRhdGUpIHsKLSAg
ICB2YXIgeWVhciA9IGQzX3RpbWUueWVhcihkYXRlKTsKLSAgICByZXR1cm4gTWF0aC5mbG9vcigo
ZGF0ZSAtIHllYXIgLSAoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpIC0geWVhci5nZXRUaW1lem9u
ZU9mZnNldCgpKSAqIDZlNCkgLyA4NjRlNSk7Ci0gIH07Ci0gIFsgInN1bmRheSIsICJtb25kYXki
LCAidHVlc2RheSIsICJ3ZWRuZXNkYXkiLCAidGh1cnNkYXkiLCAiZnJpZGF5IiwgInNhdHVyZGF5
IiBdLmZvckVhY2goZnVuY3Rpb24oZGF5LCBpKSB7Ci0gICAgaSA9IDcgLSBpOwotICAgIHZhciBp
bnRlcnZhbCA9IGQzX3RpbWVbZGF5XSA9IGQzX3RpbWVfaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkg
ewotICAgICAgKGRhdGUgPSBkM190aW1lLmRheShkYXRlKSkuc2V0RGF0ZShkYXRlLmdldERhdGUo
KSAtIChkYXRlLmdldERheSgpICsgaSkgJSA3KTsKLSAgICAgIHJldHVybiBkYXRlOwotICAgIH0s
IGZ1bmN0aW9uKGRhdGUsIG9mZnNldCkgewotICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0
ZSgpICsgTWF0aC5mbG9vcihvZmZzZXQpICogNyk7Ci0gICAgfSwgZnVuY3Rpb24oZGF0ZSkgewot
ICAgICAgdmFyIGRheSA9IGQzX3RpbWUueWVhcihkYXRlKS5nZXREYXkoKTsKLSAgICAgIHJldHVy
biBNYXRoLmZsb29yKChkM190aW1lLmRheU9mWWVhcihkYXRlKSArIChkYXkgKyBpKSAlIDcpIC8g
NykgLSAoZGF5ICE9PSBpKTsKLSAgICB9KTsKLSAgICBkM190aW1lW2RheSArICJzIl0gPSBpbnRl
cnZhbC5yYW5nZTsKLSAgICBkM190aW1lW2RheSArICJzIl0udXRjID0gaW50ZXJ2YWwudXRjLnJh
bmdlOwotICAgIGQzX3RpbWVbZGF5ICsgIk9mWWVhciJdID0gZnVuY3Rpb24oZGF0ZSkgewotICAg
ICAgdmFyIGRheSA9IGQzX3RpbWUueWVhcihkYXRlKS5nZXREYXkoKTsKLSAgICAgIHJldHVybiBN
YXRoLmZsb29yKChkM190aW1lLmRheU9mWWVhcihkYXRlKSArIChkYXkgKyBpKSAlIDcpIC8gNyk7
Ci0gICAgfTsKLSAgfSk7Ci0gIGQzX3RpbWUud2VlayA9IGQzX3RpbWUuc3VuZGF5OwotICBkM190
aW1lLndlZWtzID0gZDNfdGltZS5zdW5kYXkucmFuZ2U7Ci0gIGQzX3RpbWUud2Vla3MudXRjID0g
ZDNfdGltZS5zdW5kYXkudXRjLnJhbmdlOwotICBkM190aW1lLndlZWtPZlllYXIgPSBkM190aW1l
LnN1bmRheU9mWWVhcjsKLSAgZnVuY3Rpb24gZDNfbG9jYWxlX3RpbWVGb3JtYXQobG9jYWxlKSB7
Ci0gICAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSwgbG9jYWxlX2RhdGUg
PSBsb2NhbGUuZGF0ZSwgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSwgbG9jYWxlX3BlcmlvZHMg
PSBsb2NhbGUucGVyaW9kcywgbG9jYWxlX2RheXMgPSBsb2NhbGUuZGF5cywgbG9jYWxlX3Nob3J0
RGF5cyA9IGxvY2FsZS5zaG9ydERheXMsIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLCBs
b2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7Ci0gICAgZnVuY3Rpb24gZDNf
dGltZV9mb3JtYXQodGVtcGxhdGUpIHsKLSAgICAgIHZhciBuID0gdGVtcGxhdGUubGVuZ3RoOwot
ICAgICAgZnVuY3Rpb24gZm9ybWF0KGRhdGUpIHsKLSAgICAgICAgdmFyIHN0cmluZyA9IFtdLCBp
ID0gLTEsIGogPSAwLCBjLCBwLCBmOwotICAgICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAg
ICAgIGlmICh0ZW1wbGF0ZS5jaGFyQ29kZUF0KGkpID09PSAzNykgewotICAgICAgICAgICAgc3Ry
aW5nLnB1c2godGVtcGxhdGUuc3Vic3RyaW5nKGosIGkpKTsKLSAgICAgICAgICAgIGlmICgocCA9
IGQzX3RpbWVfZm9ybWF0UGFkc1tjID0gdGVtcGxhdGUuY2hhckF0KCsraSldKSAhPSBudWxsKSBj
ID0gdGVtcGxhdGUuY2hhckF0KCsraSk7Ci0gICAgICAgICAgICBpZiAoZiA9IGQzX3RpbWVfZm9y
bWF0c1tjXSkgYyA9IGYoZGF0ZSwgcCA9PSBudWxsID8gYyA9PT0gImUiID8gIiAiIDogIjAiIDog
cCk7Ci0gICAgICAgICAgICBzdHJpbmcucHVzaChjKTsKLSAgICAgICAgICAgIGogPSBpICsgMTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RyaW5nLnB1c2godGVtcGxhdGUuc3Vi
c3RyaW5nKGosIGkpKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKCIiKTsKLSAgICAgIH0K
LSAgICAgIGZvcm1hdC5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgICAgICB2YXIgZCA9
IHsKLSAgICAgICAgICB5OiAxOTAwLAotICAgICAgICAgIG06IDAsCi0gICAgICAgICAgZDogMSwK
LSAgICAgICAgICBIOiAwLAotICAgICAgICAgIE06IDAsCi0gICAgICAgICAgUzogMCwKLSAgICAg
ICAgICBMOiAwLAotICAgICAgICAgIFo6IG51bGwKLSAgICAgICAgfSwgaSA9IGQzX3RpbWVfcGFy
c2UoZCwgdGVtcGxhdGUsIHN0cmluZywgMCk7Ci0gICAgICAgIGlmIChpICE9IHN0cmluZy5sZW5n
dGgpIHJldHVybiBudWxsOwotICAgICAgICBpZiAoInAiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsg
ZC5wICogMTI7Ci0gICAgICAgIHZhciBsb2NhbFogPSBkLlogIT0gbnVsbCAmJiBkM19kYXRlICE9
PSBkM19kYXRlX3V0YywgZGF0ZSA9IG5ldyAobG9jYWxaID8gZDNfZGF0ZV91dGMgOiBkM19kYXRl
KSgpOwotICAgICAgICBpZiAoImoiIGluIGQpIGRhdGUuc2V0RnVsbFllYXIoZC55LCAwLCBkLmop
OyBlbHNlIGlmICgidyIgaW4gZCAmJiAoIlciIGluIGQgfHwgIlUiIGluIGQpKSB7Ci0gICAgICAg
ICAgZGF0ZS5zZXRGdWxsWWVhcihkLnksIDAsIDEpOwotICAgICAgICAgIGRhdGUuc2V0RnVsbFll
YXIoZC55LCAwLCAiVyIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRhdGUuZ2V0
RGF5KCkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcp
OwotICAgICAgICB9IGVsc2UgZGF0ZS5zZXRGdWxsWWVhcihkLnksIGQubSwgZC5kKTsKLSAgICAg
ICAgZGF0ZS5zZXRIb3VycyhkLkggKyBNYXRoLmZsb29yKGQuWiAvIDEwMCksIGQuTSArIGQuWiAl
IDEwMCwgZC5TLCBkLkwpOwotICAgICAgICByZXR1cm4gbG9jYWxaID8gZGF0ZS5fIDogZGF0ZTsK
LSAgICAgIH07Ci0gICAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHRlbXBsYXRlOwotICAgICAgfTsKLSAgICAgIHJldHVybiBmb3JtYXQ7Ci0gICAgfQot
ICAgIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2UoZGF0ZSwgdGVtcGxhdGUsIHN0cmluZywgaikgewot
ICAgICAgdmFyIGMsIHAsIHQsIGkgPSAwLCBuID0gdGVtcGxhdGUubGVuZ3RoLCBtID0gc3RyaW5n
Lmxlbmd0aDsKLSAgICAgIHdoaWxlIChpIDwgbikgewotICAgICAgICBpZiAoaiA+PSBtKSByZXR1
cm4gLTE7Ci0gICAgICAgIGMgPSB0ZW1wbGF0ZS5jaGFyQ29kZUF0KGkrKyk7Ci0gICAgICAgIGlm
IChjID09PSAzNykgewotICAgICAgICAgIHQgPSB0ZW1wbGF0ZS5jaGFyQXQoaSsrKTsKLSAgICAg
ICAgICBwID0gZDNfdGltZV9wYXJzZXJzW3QgaW4gZDNfdGltZV9mb3JtYXRQYWRzID8gdGVtcGxh
dGUuY2hhckF0KGkrKykgOiB0XTsKLSAgICAgICAgICBpZiAoIXAgfHwgKGogPSBwKGRhdGUsIHN0
cmluZywgaikpIDwgMCkgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5n
LmNoYXJDb2RlQXQoaisrKSkgewotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgICAgcmV0dXJuIGo7Ci0gICAgfQotICAgIGQzX3RpbWVfZm9ybWF0LnV0YyA9IGZ1
bmN0aW9uKHRlbXBsYXRlKSB7Ci0gICAgICB2YXIgbG9jYWwgPSBkM190aW1lX2Zvcm1hdCh0ZW1w
bGF0ZSk7Ci0gICAgICBmdW5jdGlvbiBmb3JtYXQoZGF0ZSkgewotICAgICAgICB0cnkgewotICAg
ICAgICAgIGQzX2RhdGUgPSBkM19kYXRlX3V0YzsKLSAgICAgICAgICB2YXIgdXRjID0gbmV3IGQz
X2RhdGUoKTsKLSAgICAgICAgICB1dGMuXyA9IGRhdGU7Ci0gICAgICAgICAgcmV0dXJuIGxvY2Fs
KHV0Yyk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgZDNfZGF0ZSA9IERhdGU7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZvcm1hdC5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZykg
ewotICAgICAgICB0cnkgewotICAgICAgICAgIGQzX2RhdGUgPSBkM19kYXRlX3V0YzsKLSAgICAg
ICAgICB2YXIgZGF0ZSA9IGxvY2FsLnBhcnNlKHN0cmluZyk7Ci0gICAgICAgICAgcmV0dXJuIGRh
dGUgJiYgZGF0ZS5fOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgIGQzX2RhdGUgPSBE
YXRlOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZm9ybWF0LnRvU3RyaW5nID0gbG9jYWwu
dG9TdHJpbmc7Ci0gICAgICByZXR1cm4gZm9ybWF0OwotICAgIH07Ci0gICAgZDNfdGltZV9mb3Jt
YXQubXVsdGkgPSBkM190aW1lX2Zvcm1hdC51dGMubXVsdGkgPSBkM190aW1lX2Zvcm1hdE11bHRp
OwotICAgIHZhciBkM190aW1lX3BlcmlvZExvb2t1cCA9IGQzLm1hcCgpLCBkM190aW1lX2RheVJl
ID0gZDNfdGltZV9mb3JtYXRSZShsb2NhbGVfZGF5cyksIGQzX3RpbWVfZGF5TG9va3VwID0gZDNf
dGltZV9mb3JtYXRMb29rdXAobG9jYWxlX2RheXMpLCBkM190aW1lX2RheUFiYnJldlJlID0gZDNf
dGltZV9mb3JtYXRSZShsb2NhbGVfc2hvcnREYXlzKSwgZDNfdGltZV9kYXlBYmJyZXZMb29rdXAg
PSBkM190aW1lX2Zvcm1hdExvb2t1cChsb2NhbGVfc2hvcnREYXlzKSwgZDNfdGltZV9tb250aFJl
ID0gZDNfdGltZV9mb3JtYXRSZShsb2NhbGVfbW9udGhzKSwgZDNfdGltZV9tb250aExvb2t1cCA9
IGQzX3RpbWVfZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLCBkM190aW1lX21vbnRoQWJicmV2
UmUgPSBkM190aW1lX2Zvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksIGQzX3RpbWVfbW9udGhB
YmJyZXZMb29rdXAgPSBkM190aW1lX2Zvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpOwot
ICAgIGxvY2FsZV9wZXJpb2RzLmZvckVhY2goZnVuY3Rpb24ocCwgaSkgewotICAgICAgZDNfdGlt
ZV9wZXJpb2RMb29rdXAuc2V0KHAudG9Mb3dlckNhc2UoKSwgaSk7Ci0gICAgfSk7Ci0gICAgdmFy
IGQzX3RpbWVfZm9ybWF0cyA9IHsKLSAgICAgIGE6IGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0
dXJuIGxvY2FsZV9zaG9ydERheXNbZC5nZXREYXkoKV07Ci0gICAgICB9LAotICAgICAgQTogZnVu
Y3Rpb24oZCkgewotICAgICAgICByZXR1cm4gbG9jYWxlX2RheXNbZC5nZXREYXkoKV07Ci0gICAg
ICB9LAotICAgICAgYjogZnVuY3Rpb24oZCkgewotICAgICAgICByZXR1cm4gbG9jYWxlX3Nob3J0
TW9udGhzW2QuZ2V0TW9udGgoKV07Ci0gICAgICB9LAotICAgICAgQjogZnVuY3Rpb24oZCkgewot
ICAgICAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldOwotICAgICAgfSwKLSAg
ICAgIGM6IGQzX3RpbWVfZm9ybWF0KGxvY2FsZV9kYXRlVGltZSksCi0gICAgICBkOiBmdW5jdGlv
bihkLCBwKSB7Ci0gICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZChkLmdldERhdGUoKSwg
cCwgMik7Ci0gICAgICB9LAotICAgICAgZTogZnVuY3Rpb24oZCwgcCkgewotICAgICAgICByZXR1
cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXREYXRlKCksIHAsIDIpOwotICAgICAgfSwKLSAgICAg
IEg6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQu
Z2V0SG91cnMoKSwgcCwgMik7Ci0gICAgICB9LAotICAgICAgSTogZnVuY3Rpb24oZCwgcCkgewot
ICAgICAgICByZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIs
IHAsIDIpOwotICAgICAgfSwKLSAgICAgIGo6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0
dXJuIGQzX3RpbWVfZm9ybWF0UGFkKDEgKyBkM190aW1lLmRheU9mWWVhcihkKSwgcCwgMyk7Ci0g
ICAgICB9LAotICAgICAgTDogZnVuY3Rpb24oZCwgcCkgewotICAgICAgICByZXR1cm4gZDNfdGlt
ZV9mb3JtYXRQYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7Ci0gICAgICB9LAotICAgICAg
bTogZnVuY3Rpb24oZCwgcCkgewotICAgICAgICByZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5n
ZXRNb250aCgpICsgMSwgcCwgMik7Ci0gICAgICB9LAotICAgICAgTTogZnVuY3Rpb24oZCwgcCkg
ewotICAgICAgICByZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRNaW51dGVzKCksIHAsIDIp
OwotICAgICAgfSwKLSAgICAgIHA6IGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0dXJuIGxvY2Fs
ZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07Ci0gICAgICB9LAotICAgICAgUzogZnVu
Y3Rpb24oZCwgcCkgewotICAgICAgICByZXR1cm4gZDNfdGltZV9mb3JtYXRQYWQoZC5nZXRTZWNv
bmRzKCksIHAsIDIpOwotICAgICAgfSwKLSAgICAgIFU6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAg
ICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQzX3RpbWUuc3VuZGF5T2ZZZWFyKGQpLCBwLCAy
KTsKLSAgICAgIH0sCi0gICAgICB3OiBmdW5jdGlvbihkKSB7Ci0gICAgICAgIHJldHVybiBkLmdl
dERheSgpOwotICAgICAgfSwKLSAgICAgIFc6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0
dXJuIGQzX3RpbWVfZm9ybWF0UGFkKGQzX3RpbWUubW9uZGF5T2ZZZWFyKGQpLCBwLCAyKTsKLSAg
ICAgIH0sCi0gICAgICB4OiBkM190aW1lX2Zvcm1hdChsb2NhbGVfZGF0ZSksCi0gICAgICBYOiBk
M190aW1lX2Zvcm1hdChsb2NhbGVfdGltZSksCi0gICAgICB5OiBmdW5jdGlvbihkLCBwKSB7Ci0g
ICAgICAgIHJldHVybiBkM190aW1lX2Zvcm1hdFBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAs
IDIpOwotICAgICAgfSwKLSAgICAgIFk6IGZ1bmN0aW9uKGQsIHApIHsKLSAgICAgICAgcmV0dXJu
IGQzX3RpbWVfZm9ybWF0UGFkKGQuZ2V0RnVsbFllYXIoKSAlIDFlNCwgcCwgNCk7Ci0gICAgICB9
LAotICAgICAgWjogZDNfdGltZV96b25lLAotICAgICAgIiUiOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgcmV0dXJuICIlIjsKLSAgICAgIH0KLSAgICB9OwotICAgIHZhciBkM190aW1lX3BhcnNlcnMg
PSB7Ci0gICAgICBhOiBkM190aW1lX3BhcnNlV2Vla2RheUFiYnJldiwKLSAgICAgIEE6IGQzX3Rp
bWVfcGFyc2VXZWVrZGF5LAotICAgICAgYjogZDNfdGltZV9wYXJzZU1vbnRoQWJicmV2LAotICAg
ICAgQjogZDNfdGltZV9wYXJzZU1vbnRoLAotICAgICAgYzogZDNfdGltZV9wYXJzZUxvY2FsZUZ1
bGwsCi0gICAgICBkOiBkM190aW1lX3BhcnNlRGF5LAotICAgICAgZTogZDNfdGltZV9wYXJzZURh
eSwKLSAgICAgIEg6IGQzX3RpbWVfcGFyc2VIb3VyMjQsCi0gICAgICBJOiBkM190aW1lX3BhcnNl
SG91cjI0LAotICAgICAgajogZDNfdGltZV9wYXJzZURheU9mWWVhciwKLSAgICAgIEw6IGQzX3Rp
bWVfcGFyc2VNaWxsaXNlY29uZHMsCi0gICAgICBtOiBkM190aW1lX3BhcnNlTW9udGhOdW1iZXIs
Ci0gICAgICBNOiBkM190aW1lX3BhcnNlTWludXRlcywKLSAgICAgIHA6IGQzX3RpbWVfcGFyc2VB
bVBtLAotICAgICAgUzogZDNfdGltZV9wYXJzZVNlY29uZHMsCi0gICAgICBVOiBkM190aW1lX3Bh
cnNlV2Vla051bWJlclN1bmRheSwKLSAgICAgIHc6IGQzX3RpbWVfcGFyc2VXZWVrZGF5TnVtYmVy
LAotICAgICAgVzogZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJNb25kYXksCi0gICAgICB4OiBkM190
aW1lX3BhcnNlTG9jYWxlRGF0ZSwKLSAgICAgIFg6IGQzX3RpbWVfcGFyc2VMb2NhbGVUaW1lLAot
ICAgICAgeTogZDNfdGltZV9wYXJzZVllYXIsCi0gICAgICBZOiBkM190aW1lX3BhcnNlRnVsbFll
YXIsCi0gICAgICBaOiBkM190aW1lX3BhcnNlWm9uZSwKLSAgICAgICIlIjogZDNfdGltZV9wYXJz
ZUxpdGVyYWxQZXJjZW50Ci0gICAgfTsKLSAgICBmdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla2Rh
eUFiYnJldihkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICAgIGQzX3RpbWVfZGF5QWJicmV2UmUubGFz
dEluZGV4ID0gMDsKLSAgICAgIHZhciBuID0gZDNfdGltZV9kYXlBYmJyZXZSZS5leGVjKHN0cmlu
Zy5zdWJzdHJpbmcoaSkpOwotICAgICAgcmV0dXJuIG4gPyAoZGF0ZS53ID0gZDNfdGltZV9kYXlB
YmJyZXZMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAt
MTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZVdlZWtkYXkoZGF0ZSwgc3RyaW5n
LCBpKSB7Ci0gICAgICBkM190aW1lX2RheVJlLmxhc3RJbmRleCA9IDA7Ci0gICAgICB2YXIgbiA9
IGQzX3RpbWVfZGF5UmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGkpKTsKLSAgICAgIHJldHVybiBu
ID8gKGRhdGUudyA9IGQzX3RpbWVfZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBp
ICsgblswXS5sZW5ndGgpIDogLTE7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VN
b250aEFiYnJldihkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICAgIGQzX3RpbWVfbW9udGhBYmJyZXZS
ZS5sYXN0SW5kZXggPSAwOwotICAgICAgdmFyIG4gPSBkM190aW1lX21vbnRoQWJicmV2UmUuZXhl
YyhzdHJpbmcuc3Vic3RyaW5nKGkpKTsKLSAgICAgIHJldHVybiBuID8gKGRhdGUubSA9IGQzX3Rp
bWVfbW9udGhBYmJyZXZMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxl
bmd0aCkgOiAtMTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZU1vbnRoKGRhdGUs
IHN0cmluZywgaSkgewotICAgICAgZDNfdGltZV9tb250aFJlLmxhc3RJbmRleCA9IDA7Ci0gICAg
ICB2YXIgbiA9IGQzX3RpbWVfbW9udGhSZS5leGVjKHN0cmluZy5zdWJzdHJpbmcoaSkpOwotICAg
ICAgcmV0dXJuIG4gPyAoZGF0ZS5tID0gZDNfdGltZV9tb250aExvb2t1cC5nZXQoblswXS50b0xv
d2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xOwotICAgIH0KLSAgICBmdW5jdGlvbiBk
M190aW1lX3BhcnNlTG9jYWxlRnVsbChkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICAgIHJldHVybiBk
M190aW1lX3BhcnNlKGRhdGUsIGQzX3RpbWVfZm9ybWF0cy5jLnRvU3RyaW5nKCksIHN0cmluZywg
aSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VMb2NhbGVEYXRlKGRhdGUsIHN0
cmluZywgaSkgewotICAgICAgcmV0dXJuIGQzX3RpbWVfcGFyc2UoZGF0ZSwgZDNfdGltZV9mb3Jt
YXRzLngudG9TdHJpbmcoKSwgc3RyaW5nLCBpKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZDNfdGlt
ZV9wYXJzZUxvY2FsZVRpbWUoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgICByZXR1cm4gZDNfdGlt
ZV9wYXJzZShkYXRlLCBkM190aW1lX2Zvcm1hdHMuWC50b1N0cmluZygpLCBzdHJpbmcsIGkpOwot
ICAgIH0KLSAgICBmdW5jdGlvbiBkM190aW1lX3BhcnNlQW1QbShkYXRlLCBzdHJpbmcsIGkpIHsK
LSAgICAgIHZhciBuID0gZDNfdGltZV9wZXJpb2RMb29rdXAuZ2V0KHN0cmluZy5zdWJzdHJpbmco
aSwgaSArPSAyKS50b0xvd2VyQ2FzZSgpKTsKLSAgICAgIHJldHVybiBuID09IG51bGwgPyAtMSA6
IChkYXRlLnAgPSBuLCBpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGQzX3RpbWVfZm9ybWF0OwotICB9
Ci0gIHZhciBkM190aW1lX2Zvcm1hdFBhZHMgPSB7Ci0gICAgIi0iOiAiIiwKLSAgICBfOiAiICIs
Ci0gICAgIjAiOiAiMCIKLSAgfSwgZDNfdGltZV9udW1iZXJSZSA9IC9eXHMqXGQrLywgZDNfdGlt
ZV9wZXJjZW50UmUgPSAvXiUvOwotICBmdW5jdGlvbiBkM190aW1lX2Zvcm1hdFBhZCh2YWx1ZSwg
ZmlsbCwgd2lkdGgpIHsKLSAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/ICItIiA6ICIiLCBzdHJp
bmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArICIiLCBsZW5ndGggPSBzdHJpbmcubGVuZ3Ro
OwotICAgIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0g
bGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfdGltZV9mb3JtYXRSZShuYW1lcykgewotICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86
IiArIG5hbWVzLm1hcChkMy5yZXF1b3RlKS5qb2luKCJ8IikgKyAiKSIsICJpIik7Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRMb29rdXAobmFtZXMpIHsKLSAgICB2YXIgbWFwID0gbmV3
IGQzX01hcCgpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7Ci0gICAgd2hpbGUgKCsraSA8IG4p
IG1hcC5zZXQobmFtZXNbaV0udG9Mb3dlckNhc2UoKSwgaSk7Ci0gICAgcmV0dXJuIG1hcDsKLSAg
fQotICBmdW5jdGlvbiBkM190aW1lX3BhcnNlV2Vla2RheU51bWJlcihkYXRlLCBzdHJpbmcsIGkp
IHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190
aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMSkpOwotICAgIHJldHVy
biBuID8gKGRhdGUudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfdGltZV9wYXJzZVdlZWtOdW1iZXJTdW5kYXkoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0g
ICAgZDNfdGltZV9udW1iZXJSZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9u
dW1iZXJSZS5leGVjKHN0cmluZy5zdWJzdHJpbmcoaSkpOwotICAgIHJldHVybiBuID8gKGRhdGUu
VSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGlt
ZV9wYXJzZVdlZWtOdW1iZXJNb25kYXkoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9u
dW1iZXJSZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVj
KHN0cmluZy5zdWJzdHJpbmcoaSkpOwotICAgIHJldHVybiBuID8gKGRhdGUuVyA9ICtuWzBdLCBp
ICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZUZ1bGxZ
ZWFyKGRhdGUsIHN0cmluZywgaSkgewotICAgIGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0g
MDsKLSAgICB2YXIgbiA9IGQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGks
IGkgKyA0KSk7Ci0gICAgcmV0dXJuIG4gPyAoZGF0ZS55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0
aCkgOiAtMTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX3BhcnNlWWVhcihkYXRlLCBzdHJpbmcs
IGkpIHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBk
M190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMikpOwotICAgIHJl
dHVybiBuID8gKGRhdGUueSA9IGQzX3RpbWVfZXhwYW5kWWVhcigrblswXSksIGkgKyBuWzBdLmxl
bmd0aCkgOiAtMTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX3BhcnNlWm9uZShkYXRlLCBzdHJp
bmcsIGkpIHsKLSAgICByZXR1cm4gL15bKy1dXGR7NH0kLy50ZXN0KHN0cmluZyA9IHN0cmluZy5z
dWJzdHJpbmcoaSwgaSArIDUpKSA/IChkYXRlLlogPSAtc3RyaW5nLCAKLSAgICBpICsgNSkgOiAt
MTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX2V4cGFuZFllYXIoZCkgewotICAgIHJldHVybiBk
ICsgKGQgPiA2OCA/IDE5MDAgOiAyZTMpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VN
b250aE51bWJlcihkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJ
bmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0
cmluZyhpLCBpICsgMikpOwotICAgIHJldHVybiBuID8gKGRhdGUubSA9IG5bMF0gLSAxLCBpICsg
blswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZURheShkYXRl
LCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAg
dmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMikp
OwotICAgIHJldHVybiBuID8gKGRhdGUuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9wYXJzZURheU9mWWVhcihkYXRlLCBzdHJpbmcsIGkp
IHsKLSAgICBkM190aW1lX251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190
aW1lX251bWJlclJlLmV4ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMykpOwotICAgIHJldHVy
biBuID8gKGRhdGUuaiA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfdGltZV9wYXJzZUhvdXIyNChkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1l
X251bWJlclJlLmxhc3RJbmRleCA9IDA7Ci0gICAgdmFyIG4gPSBkM190aW1lX251bWJlclJlLmV4
ZWMoc3RyaW5nLnN1YnN0cmluZyhpLCBpICsgMikpOwotICAgIHJldHVybiBuID8gKGRhdGUuSCA9
ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9w
YXJzZU1pbnV0ZXMoZGF0ZSwgc3RyaW5nLCBpKSB7Ci0gICAgZDNfdGltZV9udW1iZXJSZS5sYXN0
SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9udW1iZXJSZS5leGVjKHN0cmluZy5zdWJz
dHJpbmcoaSwgaSArIDIpKTsKLSAgICByZXR1cm4gbiA/IChkYXRlLk0gPSArblswXSwgaSArIG5b
MF0ubGVuZ3RoKSA6IC0xOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3RpbWVfcGFyc2VTZWNvbmRzKGRh
dGUsIHN0cmluZywgaSkgewotICAgIGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDsKLSAg
ICB2YXIgbiA9IGQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGksIGkgKyAy
KSk7Ci0gICAgcmV0dXJuIG4gPyAoZGF0ZS5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAt
MTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX3BhcnNlTWlsbGlzZWNvbmRzKGRhdGUsIHN0cmlu
ZywgaSkgewotICAgIGQzX3RpbWVfbnVtYmVyUmUubGFzdEluZGV4ID0gMDsKLSAgICB2YXIgbiA9
IGQzX3RpbWVfbnVtYmVyUmUuZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGksIGkgKyAzKSk7Ci0gICAg
cmV0dXJuIG4gPyAoZGF0ZS5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTsKLSAgfQot
ICBmdW5jdGlvbiBkM190aW1lX3pvbmUoZCkgewotICAgIHZhciB6ID0gZC5nZXRUaW1lem9uZU9m
ZnNldCgpLCB6cyA9IHogPiAwID8gIi0iIDogIisiLCB6aCA9IH5+KGFicyh6KSAvIDYwKSwgem0g
PSBhYnMoeikgJSA2MDsKLSAgICByZXR1cm4genMgKyBkM190aW1lX2Zvcm1hdFBhZCh6aCwgIjAi
LCAyKSArIGQzX3RpbWVfZm9ybWF0UGFkKHptLCAiMCIsIDIpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X3RpbWVfcGFyc2VMaXRlcmFsUGVyY2VudChkYXRlLCBzdHJpbmcsIGkpIHsKLSAgICBkM190aW1l
X3BlcmNlbnRSZS5sYXN0SW5kZXggPSAwOwotICAgIHZhciBuID0gZDNfdGltZV9wZXJjZW50UmUu
ZXhlYyhzdHJpbmcuc3Vic3RyaW5nKGksIGkgKyAxKSk7Ci0gICAgcmV0dXJuIG4gPyBpICsgblsw
XS5sZW5ndGggOiAtMTsKLSAgfQotICBmdW5jdGlvbiBkM190aW1lX2Zvcm1hdE11bHRpKGZvcm1h
dHMpIHsKLSAgICB2YXIgbiA9IGZvcm1hdHMubGVuZ3RoLCBpID0gLTE7Ci0gICAgd2hpbGUgKCsr
aSA8IG4pIGZvcm1hdHNbaV1bMF0gPSB0aGlzKGZvcm1hdHNbaV1bMF0pOwotICAgIHJldHVybiBm
dW5jdGlvbihkYXRlKSB7Ci0gICAgICB2YXIgaSA9IDAsIGYgPSBmb3JtYXRzW2ldOwotICAgICAg
d2hpbGUgKCFmWzFdKGRhdGUpKSBmID0gZm9ybWF0c1srK2ldOwotICAgICAgcmV0dXJuIGZbMF0o
ZGF0ZSk7Ci0gICAgfTsKLSAgfQotICBkMy5sb2NhbGUgPSBmdW5jdGlvbihsb2NhbGUpIHsKLSAg
ICByZXR1cm4gewotICAgICAgbnVtYmVyRm9ybWF0OiBkM19sb2NhbGVfbnVtYmVyRm9ybWF0KGxv
Y2FsZSksCi0gICAgICB0aW1lRm9ybWF0OiBkM19sb2NhbGVfdGltZUZvcm1hdChsb2NhbGUpCi0g
ICAgfTsKLSAgfTsKLSAgdmFyIGQzX2xvY2FsZV9lblVTID0gZDMubG9jYWxlKHsKLSAgICBkZWNp
bWFsOiAiLiIsCi0gICAgdGhvdXNhbmRzOiAiLCIsCi0gICAgZ3JvdXBpbmc6IFsgMyBdLAotICAg
IGN1cnJlbmN5OiBbICIkIiwgIiIgXSwKLSAgICBkYXRlVGltZTogIiVhICViICVlICVYICVZIiwK
LSAgICBkYXRlOiAiJW0vJWQvJVkiLAotICAgIHRpbWU6ICIlSDolTTolUyIsCi0gICAgcGVyaW9k
czogWyAiQU0iLCAiUE0iIF0sCi0gICAgZGF5czogWyAiU3VuZGF5IiwgIk1vbmRheSIsICJUdWVz
ZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiIF0sCi0g
ICAgc2hvcnREYXlzOiBbICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIs
ICJTYXQiIF0sCi0gICAgbW9udGhzOiBbICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwg
IkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJP
Y3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIiBdLAotICAgIHNob3J0TW9udGhzOiBbICJK
YW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNl
cCIsICJPY3QiLCAiTm92IiwgIkRlYyIgXQotICB9KTsKLSAgZDMuZm9ybWF0ID0gZDNfbG9jYWxl
X2VuVVMubnVtYmVyRm9ybWF0OwotICBkMy5nZW8gPSB7fTsKLSAgZnVuY3Rpb24gZDNfYWRkZXIo
KSB7fQotICBkM19hZGRlci5wcm90b3R5cGUgPSB7Ci0gICAgczogMCwKLSAgICB0OiAwLAotICAg
IGFkZDogZnVuY3Rpb24oeSkgewotICAgICAgZDNfYWRkZXJTdW0oeSwgdGhpcy50LCBkM19hZGRl
clRlbXApOwotICAgICAgZDNfYWRkZXJTdW0oZDNfYWRkZXJUZW1wLnMsIHRoaXMucywgdGhpcyk7
Ci0gICAgICBpZiAodGhpcy5zKSB0aGlzLnQgKz0gZDNfYWRkZXJUZW1wLnQ7IGVsc2UgdGhpcy5z
ID0gZDNfYWRkZXJUZW1wLnQ7Ci0gICAgfSwKLSAgICByZXNldDogZnVuY3Rpb24oKSB7Ci0gICAg
ICB0aGlzLnMgPSB0aGlzLnQgPSAwOwotICAgIH0sCi0gICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5zOwotICAgIH0KLSAgfTsKLSAgdmFyIGQzX2FkZGVyVGVtcCA9
IG5ldyBkM19hZGRlcigpOwotICBmdW5jdGlvbiBkM19hZGRlclN1bShhLCBiLCBvKSB7Ci0gICAg
dmFyIHggPSBvLnMgPSBhICsgYiwgYnYgPSB4IC0gYSwgYXYgPSB4IC0gYnY7Ci0gICAgby50ID0g
YSAtIGF2ICsgKGIgLSBidik7Ci0gIH0KLSAgZDMuZ2VvLnN0cmVhbSA9IGZ1bmN0aW9uKG9iamVj
dCwgbGlzdGVuZXIpIHsKLSAgICBpZiAob2JqZWN0ICYmIGQzX2dlb19zdHJlYW1PYmplY3RUeXBl
Lmhhc093blByb3BlcnR5KG9iamVjdC50eXBlKSkgewotICAgICAgZDNfZ2VvX3N0cmVhbU9iamVj
dFR5cGVbb2JqZWN0LnR5cGVdKG9iamVjdCwgbGlzdGVuZXIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBkM19nZW9fc3RyZWFtR2VvbWV0cnkob2JqZWN0LCBsaXN0ZW5lcik7Ci0gICAgfQotICB9Owot
ICBmdW5jdGlvbiBkM19nZW9fc3RyZWFtR2VvbWV0cnkoZ2VvbWV0cnksIGxpc3RlbmVyKSB7Ci0g
ICAgaWYgKGdlb21ldHJ5ICYmIGQzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGUuaGFzT3duUHJvcGVy
dHkoZ2VvbWV0cnkudHlwZSkpIHsKLSAgICAgIGQzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGVbZ2Vv
bWV0cnkudHlwZV0oZ2VvbWV0cnksIGxpc3RlbmVyKTsKLSAgICB9Ci0gIH0KLSAgdmFyIGQzX2dl
b19zdHJlYW1PYmplY3RUeXBlID0gewotICAgIEZlYXR1cmU6IGZ1bmN0aW9uKGZlYXR1cmUsIGxp
c3RlbmVyKSB7Ci0gICAgICBkM19nZW9fc3RyZWFtR2VvbWV0cnkoZmVhdHVyZS5nZW9tZXRyeSwg
bGlzdGVuZXIpOwotICAgIH0sCi0gICAgRmVhdHVyZUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVj
dCwgbGlzdGVuZXIpIHsKLSAgICAgIHZhciBmZWF0dXJlcyA9IG9iamVjdC5mZWF0dXJlcywgaSA9
IC0xLCBuID0gZmVhdHVyZXMubGVuZ3RoOwotICAgICAgd2hpbGUgKCsraSA8IG4pIGQzX2dlb19z
dHJlYW1HZW9tZXRyeShmZWF0dXJlc1tpXS5nZW9tZXRyeSwgbGlzdGVuZXIpOwotICAgIH0KLSAg
fTsKLSAgdmFyIGQzX2dlb19zdHJlYW1HZW9tZXRyeVR5cGUgPSB7Ci0gICAgU3BoZXJlOiBmdW5j
dGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICBsaXN0ZW5lci5zcGhlcmUoKTsKLSAgICB9
LAotICAgIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICBvYmplY3Qg
PSBvYmplY3QuY29vcmRpbmF0ZXM7Ci0gICAgICBsaXN0ZW5lci5wb2ludChvYmplY3RbMF0sIG9i
amVjdFsxXSwgb2JqZWN0WzJdKTsKLSAgICB9LAotICAgIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9i
amVjdCwgbGlzdGVuZXIpIHsKLSAgICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGlu
YXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoOwotICAgICAgd2hpbGUgKCsraSA8
IG4pIG9iamVjdCA9IGNvb3JkaW5hdGVzW2ldLCBsaXN0ZW5lci5wb2ludChvYmplY3RbMF0sIG9i
amVjdFsxXSwgb2JqZWN0WzJdKTsKLSAgICB9LAotICAgIExpbmVTdHJpbmc6IGZ1bmN0aW9uKG9i
amVjdCwgbGlzdGVuZXIpIHsKLSAgICAgIGQzX2dlb19zdHJlYW1MaW5lKG9iamVjdC5jb29yZGlu
YXRlcywgbGlzdGVuZXIsIDApOwotICAgIH0sCi0gICAgTXVsdGlMaW5lU3RyaW5nOiBmdW5jdGlv
bihvYmplY3QsIGxpc3RlbmVyKSB7Ci0gICAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29v
cmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDsKLSAgICAgIHdoaWxlICgr
K2kgPCBuKSBkM19nZW9fc3RyZWFtTGluZShjb29yZGluYXRlc1tpXSwgbGlzdGVuZXIsIDApOwot
ICAgIH0sCi0gICAgUG9seWdvbjogZnVuY3Rpb24ob2JqZWN0LCBsaXN0ZW5lcikgewotICAgICAg
ZDNfZ2VvX3N0cmVhbVBvbHlnb24ob2JqZWN0LmNvb3JkaW5hdGVzLCBsaXN0ZW5lcik7Ci0gICAg
fSwKLSAgICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgbGlzdGVuZXIpIHsKLSAgICAg
IHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRp
bmF0ZXMubGVuZ3RoOwotICAgICAgd2hpbGUgKCsraSA8IG4pIGQzX2dlb19zdHJlYW1Qb2x5Z29u
KGNvb3JkaW5hdGVzW2ldLCBsaXN0ZW5lcik7Ci0gICAgfSwKLSAgICBHZW9tZXRyeUNvbGxlY3Rp
b246IGZ1bmN0aW9uKG9iamVjdCwgbGlzdGVuZXIpIHsKLSAgICAgIHZhciBnZW9tZXRyaWVzID0g
b2JqZWN0Lmdlb21ldHJpZXMsIGkgPSAtMSwgbiA9IGdlb21ldHJpZXMubGVuZ3RoOwotICAgICAg
d2hpbGUgKCsraSA8IG4pIGQzX2dlb19zdHJlYW1HZW9tZXRyeShnZW9tZXRyaWVzW2ldLCBsaXN0
ZW5lcik7Ci0gICAgfQotICB9OwotICBmdW5jdGlvbiBkM19nZW9fc3RyZWFtTGluZShjb29yZGlu
YXRlcywgbGlzdGVuZXIsIGNsb3NlZCkgewotICAgIHZhciBpID0gLTEsIG4gPSBjb29yZGluYXRl
cy5sZW5ndGggLSBjbG9zZWQsIGNvb3JkaW5hdGU7Ci0gICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7
Ci0gICAgd2hpbGUgKCsraSA8IG4pIGNvb3JkaW5hdGUgPSBjb29yZGluYXRlc1tpXSwgbGlzdGVu
ZXIucG9pbnQoY29vcmRpbmF0ZVswXSwgY29vcmRpbmF0ZVsxXSwgY29vcmRpbmF0ZVsyXSk7Ci0g
ICAgbGlzdGVuZXIubGluZUVuZCgpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19zdHJlYW1Qb2x5
Z29uKGNvb3JkaW5hdGVzLCBsaXN0ZW5lcikgewotICAgIHZhciBpID0gLTEsIG4gPSBjb29yZGlu
YXRlcy5sZW5ndGg7Ci0gICAgbGlzdGVuZXIucG9seWdvblN0YXJ0KCk7Ci0gICAgd2hpbGUgKCsr
aSA8IG4pIGQzX2dlb19zdHJlYW1MaW5lKGNvb3JkaW5hdGVzW2ldLCBsaXN0ZW5lciwgMSk7Ci0g
ICAgbGlzdGVuZXIucG9seWdvbkVuZCgpOwotICB9Ci0gIGQzLmdlby5hcmVhID0gZnVuY3Rpb24o
b2JqZWN0KSB7Ci0gICAgZDNfZ2VvX2FyZWFTdW0gPSAwOwotICAgIGQzLmdlby5zdHJlYW0ob2Jq
ZWN0LCBkM19nZW9fYXJlYSk7Ci0gICAgcmV0dXJuIGQzX2dlb19hcmVhU3VtOwotICB9OwotICB2
YXIgZDNfZ2VvX2FyZWFTdW0sIGQzX2dlb19hcmVhUmluZ1N1bSA9IG5ldyBkM19hZGRlcigpOwot
ICB2YXIgZDNfZ2VvX2FyZWEgPSB7Ci0gICAgc3BoZXJlOiBmdW5jdGlvbigpIHsKLSAgICAgIGQz
X2dlb19hcmVhU3VtICs9IDQgKiDPgDsKLSAgICB9LAotICAgIHBvaW50OiBkM19ub29wLAotICAg
IGxpbmVTdGFydDogZDNfbm9vcCwKLSAgICBsaW5lRW5kOiBkM19ub29wLAotICAgIHBvbHlnb25T
dGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICBkM19nZW9fYXJlYVJpbmdTdW0ucmVzZXQoKTsKLSAg
ICAgIGQzX2dlb19hcmVhLmxpbmVTdGFydCA9IGQzX2dlb19hcmVhUmluZ1N0YXJ0OwotICAgIH0s
Ci0gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgYXJlYSA9IDIgKiBkM19n
ZW9fYXJlYVJpbmdTdW07Ci0gICAgICBkM19nZW9fYXJlYVN1bSArPSBhcmVhIDwgMCA/IDQgKiDP
gCArIGFyZWEgOiBhcmVhOwotICAgICAgZDNfZ2VvX2FyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX2Fy
ZWEubGluZUVuZCA9IGQzX2dlb19hcmVhLnBvaW50ID0gZDNfbm9vcDsKLSAgICB9Ci0gIH07Ci0g
IGZ1bmN0aW9uIGQzX2dlb19hcmVhUmluZ1N0YXJ0KCkgewotICAgIHZhciDOuzAwLCDPhjAwLCDO
uzAsIGNvc8+GMCwgc2luz4YwOwotICAgIGQzX2dlb19hcmVhLnBvaW50ID0gZnVuY3Rpb24ozrss
IM+GKSB7Ci0gICAgICBkM19nZW9fYXJlYS5wb2ludCA9IG5leHRQb2ludDsKLSAgICAgIM67MCA9
ICjOuzAwID0gzrspICogZDNfcmFkaWFucywgY29zz4YwID0gTWF0aC5jb3Moz4YgPSAoz4YwMCA9
IM+GKSAqIGQzX3JhZGlhbnMgLyAyICsgz4AgLyA0KSwgCi0gICAgICBzaW7PhjAgPSBNYXRoLnNp
bijPhik7Ci0gICAgfTsKLSAgICBmdW5jdGlvbiBuZXh0UG9pbnQozrssIM+GKSB7Ci0gICAgICDO
uyAqPSBkM19yYWRpYW5zOwotICAgICAgz4YgPSDPhiAqIGQzX3JhZGlhbnMgLyAyICsgz4AgLyA0
OwotICAgICAgdmFyIGTOuyA9IM67IC0gzrswLCBzZM67ID0gZM67ID49IDAgPyAxIDogLTEsIGFk
zrsgPSBzZM67ICogZM67LCBjb3PPhiA9IE1hdGguY29zKM+GKSwgc2luz4YgPSBNYXRoLnNpbijP
hiksIGsgPSBzaW7PhjAgKiBzaW7PhiwgdSA9IGNvc8+GMCAqIGNvc8+GICsgayAqIE1hdGguY29z
KGFkzrspLCB2ID0gayAqIHNkzrsgKiBNYXRoLnNpbihhZM67KTsKLSAgICAgIGQzX2dlb19hcmVh
UmluZ1N1bS5hZGQoTWF0aC5hdGFuMih2LCB1KSk7Ci0gICAgICDOuzAgPSDOuywgY29zz4YwID0g
Y29zz4YsIHNpbs+GMCA9IHNpbs+GOwotICAgIH0KLSAgICBkM19nZW9fYXJlYS5saW5lRW5kID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICBuZXh0UG9pbnQozrswMCwgz4YwMCk7Ci0gICAgfTsKLSAgfQot
ICBmdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuKHNwaGVyaWNhbCkgewotICAgIHZhciDOuyA9IHNw
aGVyaWNhbFswXSwgz4YgPSBzcGhlcmljYWxbMV0sIGNvc8+GID0gTWF0aC5jb3Moz4YpOwotICAg
IHJldHVybiBbIGNvc8+GICogTWF0aC5jb3MozrspLCBjb3PPhiAqIE1hdGguc2luKM67KSwgTWF0
aC5zaW4oz4YpIF07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NhcnRlc2lhbkRvdChhLCBiKSB7
Ci0gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTsKLSAg
fQotICBmdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuQ3Jvc3MoYSwgYikgewotICAgIHJldHVybiBb
IGFbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sIGFbMl0gKiBiWzBdIC0gYVswXSAqIGJbMl0sIGFb
MF0gKiBiWzFdIC0gYVsxXSAqIGJbMF0gXTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2FydGVz
aWFuQWRkKGEsIGIpIHsKLSAgICBhWzBdICs9IGJbMF07Ci0gICAgYVsxXSArPSBiWzFdOwotICAg
IGFbMl0gKz0gYlsyXTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2FydGVzaWFuU2NhbGUodmVj
dG9yLCBrKSB7Ci0gICAgcmV0dXJuIFsgdmVjdG9yWzBdICogaywgdmVjdG9yWzFdICogaywgdmVj
dG9yWzJdICogayBdOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jYXJ0ZXNpYW5Ob3JtYWxpemUo
ZCkgewotICAgIHZhciBsID0gTWF0aC5zcXJ0KGRbMF0gKiBkWzBdICsgZFsxXSAqIGRbMV0gKyBk
WzJdICogZFsyXSk7Ci0gICAgZFswXSAvPSBsOwotICAgIGRbMV0gLz0gbDsKLSAgICBkWzJdIC89
IGw7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3NwaGVyaWNhbChjYXJ0ZXNpYW4pIHsKLSAgICBy
ZXR1cm4gWyBNYXRoLmF0YW4yKGNhcnRlc2lhblsxXSwgY2FydGVzaWFuWzBdKSwgZDNfYXNpbihj
YXJ0ZXNpYW5bMl0pIF07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3NwaGVyaWNhbEVxdWFsKGEs
IGIpIHsKLSAgICByZXR1cm4gYWJzKGFbMF0gLSBiWzBdKSA8IM61ICYmIGFicyhhWzFdIC0gYlsx
XSkgPCDOtTsKLSAgfQotICBkMy5nZW8uYm91bmRzID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIM67
MCwgz4YwLCDOuzEsIM+GMSwgzrtfLCDOu19fLCDPhl9fLCBwMCwgZM67U3VtLCByYW5nZXMsIHJh
bmdlOwotICAgIHZhciBib3VuZCA9IHsKLSAgICAgIHBvaW50OiBwb2ludCwKLSAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAotICAgICAgbGluZUVuZDogbGluZUVuZCwKLSAgICAgIHBvbHlnb25T
dGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGJvdW5kLnBvaW50ID0gcmluZ1BvaW50OwotICAg
ICAgICBib3VuZC5saW5lU3RhcnQgPSByaW5nU3RhcnQ7Ci0gICAgICAgIGJvdW5kLmxpbmVFbmQg
PSByaW5nRW5kOwotICAgICAgICBkzrtTdW0gPSAwOwotICAgICAgICBkM19nZW9fYXJlYS5wb2x5
Z29uU3RhcnQoKTsKLSAgICAgIH0sCi0gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgZDNfZ2VvX2FyZWEucG9seWdvbkVuZCgpOwotICAgICAgICBib3VuZC5wb2ludCA9IHBv
aW50OwotICAgICAgICBib3VuZC5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ci0gICAgICAgIGJvdW5k
LmxpbmVFbmQgPSBsaW5lRW5kOwotICAgICAgICBpZiAoZDNfZ2VvX2FyZWFSaW5nU3VtIDwgMCkg
zrswID0gLSjOuzEgPSAxODApLCDPhjAgPSAtKM+GMSA9IDkwKTsgZWxzZSBpZiAoZM67U3VtID4g
zrUpIM+GMSA9IDkwOyBlbHNlIGlmIChkzrtTdW0gPCAtzrUpIM+GMCA9IC05MDsKLSAgICAgICAg
cmFuZ2VbMF0gPSDOuzAsIHJhbmdlWzFdID0gzrsxOwotICAgICAgfQotICAgIH07Ci0gICAgZnVu
Y3Rpb24gcG9pbnQozrssIM+GKSB7Ci0gICAgICByYW5nZXMucHVzaChyYW5nZSA9IFsgzrswID0g
zrssIM67MSA9IM67IF0pOwotICAgICAgaWYgKM+GIDwgz4YwKSDPhjAgPSDPhjsKLSAgICAgIGlm
ICjPhiA+IM+GMSkgz4YxID0gz4Y7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxpbmVQb2ludCjOuywg
z4YpIHsKLSAgICAgIHZhciBwID0gZDNfZ2VvX2NhcnRlc2lhbihbIM67ICogZDNfcmFkaWFucywg
z4YgKiBkM19yYWRpYW5zIF0pOwotICAgICAgaWYgKHAwKSB7Ci0gICAgICAgIHZhciBub3JtYWwg
PSBkM19nZW9fY2FydGVzaWFuQ3Jvc3MocDAsIHApLCBlcXVhdG9yaWFsID0gWyBub3JtYWxbMV0s
IC1ub3JtYWxbMF0sIDAgXSwgaW5mbGVjdGlvbiA9IGQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhlcXVh
dG9yaWFsLCBub3JtYWwpOwotICAgICAgICBkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGluZmxl
Y3Rpb24pOwotICAgICAgICBpbmZsZWN0aW9uID0gZDNfZ2VvX3NwaGVyaWNhbChpbmZsZWN0aW9u
KTsKLSAgICAgICAgdmFyIGTOuyA9IM67IC0gzrtfLCBzID0gZM67ID4gMCA/IDEgOiAtMSwgzrtp
ID0gaW5mbGVjdGlvblswXSAqIGQzX2RlZ3JlZXMgKiBzLCBhbnRpbWVyaWRpYW4gPSBhYnMoZM67
KSA+IDE4MDsKLSAgICAgICAgaWYgKGFudGltZXJpZGlhbiBeIChzICogzrtfIDwgzrtpICYmIM67
aSA8IHMgKiDOuykpIHsKLSAgICAgICAgICB2YXIgz4ZpID0gaW5mbGVjdGlvblsxXSAqIGQzX2Rl
Z3JlZXM7Ci0gICAgICAgICAgaWYgKM+GaSA+IM+GMSkgz4YxID0gz4ZpOwotICAgICAgICB9IGVs
c2UgaWYgKM67aSA9ICjOu2kgKyAzNjApICUgMzYwIC0gMTgwLCBhbnRpbWVyaWRpYW4gXiAocyAq
IM67XyA8IM67aSAmJiDOu2kgPCBzICogzrspKSB7Ci0gICAgICAgICAgdmFyIM+GaSA9IC1pbmZs
ZWN0aW9uWzFdICogZDNfZGVncmVlczsKLSAgICAgICAgICBpZiAoz4ZpIDwgz4YwKSDPhjAgPSDP
hmk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKM+GIDwgz4YwKSDPhjAgPSDPhjsK
LSAgICAgICAgICBpZiAoz4YgPiDPhjEpIM+GMSA9IM+GOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChhbnRpbWVyaWRpYW4pIHsKLSAgICAgICAgICBpZiAozrsgPCDOu18pIHsKLSAgICAgICAgICAg
IGlmIChhbmdsZSjOuzAsIM67KSA+IGFuZ2xlKM67MCwgzrsxKSkgzrsxID0gzrs7Ci0gICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhbmdsZSjOuywgzrsxKSA+IGFuZ2xlKM67MCwg
zrsxKSkgzrswID0gzrs7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGlmICjOuzEgPj0gzrswKSB7Ci0gICAgICAgICAgICBpZiAozrsgPCDOuzApIM67MCA9IM67Owot
ICAgICAgICAgICAgaWYgKM67ID4gzrsxKSDOuzEgPSDOuzsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKM67ID4gzrtfKSB7Ci0gICAgICAgICAgICAgIGlmIChhbmdsZSjOuzAs
IM67KSA+IGFuZ2xlKM67MCwgzrsxKSkgzrsxID0gzrs7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICBpZiAoYW5nbGUozrssIM67MSkgPiBhbmdsZSjOuzAsIM67MSkpIM67MCA9
IM67OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcG9pbnQozrssIM+GKTsKLSAgICAgIH0KLSAgICAgIHAwID0gcCwgzrtfID0g
zrs7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHsKLSAgICAgIGJvdW5kLnBvaW50
ID0gbGluZVBvaW50OwotICAgIH0KLSAgICBmdW5jdGlvbiBsaW5lRW5kKCkgewotICAgICAgcmFu
Z2VbMF0gPSDOuzAsIHJhbmdlWzFdID0gzrsxOwotICAgICAgYm91bmQucG9pbnQgPSBwb2ludDsK
LSAgICAgIHAwID0gbnVsbDsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmluZ1BvaW50KM67LCDPhikg
ewotICAgICAgaWYgKHAwKSB7Ci0gICAgICAgIHZhciBkzrsgPSDOuyAtIM67XzsKLSAgICAgICAg
ZM67U3VtICs9IGFicyhkzrspID4gMTgwID8gZM67ICsgKGTOuyA+IDAgPyAzNjAgOiAtMzYwKSA6
IGTOuzsKLSAgICAgIH0gZWxzZSDOu19fID0gzrssIM+GX18gPSDPhjsKLSAgICAgIGQzX2dlb19h
cmVhLnBvaW50KM67LCDPhik7Ci0gICAgICBsaW5lUG9pbnQozrssIM+GKTsKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gcmluZ1N0YXJ0KCkgewotICAgICAgZDNfZ2VvX2FyZWEubGluZVN0YXJ0KCk7Ci0g
ICAgfQotICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7Ci0gICAgICByaW5nUG9pbnQozrtfXywgz4Zf
Xyk7Ci0gICAgICBkM19nZW9fYXJlYS5saW5lRW5kKCk7Ci0gICAgICBpZiAoYWJzKGTOu1N1bSkg
PiDOtSkgzrswID0gLSjOuzEgPSAxODApOwotICAgICAgcmFuZ2VbMF0gPSDOuzAsIHJhbmdlWzFd
ID0gzrsxOwotICAgICAgcDAgPSBudWxsOwotICAgIH0KLSAgICBmdW5jdGlvbiBhbmdsZSjOuzAs
IM67MSkgewotICAgICAgcmV0dXJuICjOuzEgLT0gzrswKSA8IDAgPyDOuzEgKyAzNjAgOiDOuzE7
Ci0gICAgfQotICAgIGZ1bmN0aW9uIGNvbXBhcmVSYW5nZXMoYSwgYikgewotICAgICAgcmV0dXJu
IGFbMF0gLSBiWzBdOwotICAgIH0KLSAgICBmdW5jdGlvbiB3aXRoaW5SYW5nZSh4LCByYW5nZSkg
ewotICAgICAgcmV0dXJuIHJhbmdlWzBdIDw9IHJhbmdlWzFdID8gcmFuZ2VbMF0gPD0geCAmJiB4
IDw9IHJhbmdlWzFdIDogeCA8IHJhbmdlWzBdIHx8IHJhbmdlWzFdIDwgeDsKLSAgICB9Ci0gICAg
cmV0dXJuIGZ1bmN0aW9uKGZlYXR1cmUpIHsKLSAgICAgIM+GMSA9IM67MSA9IC0ozrswID0gz4Yw
ID0gSW5maW5pdHkpOwotICAgICAgcmFuZ2VzID0gW107Ci0gICAgICBkMy5nZW8uc3RyZWFtKGZl
YXR1cmUsIGJvdW5kKTsKLSAgICAgIHZhciBuID0gcmFuZ2VzLmxlbmd0aDsKLSAgICAgIGlmIChu
KSB7Ci0gICAgICAgIHJhbmdlcy5zb3J0KGNvbXBhcmVSYW5nZXMpOwotICAgICAgICBmb3IgKHZh
ciBpID0gMSwgYSA9IHJhbmdlc1swXSwgYiwgbWVyZ2VkID0gWyBhIF07IGkgPCBuOyArK2kpIHsK
LSAgICAgICAgICBiID0gcmFuZ2VzW2ldOwotICAgICAgICAgIGlmICh3aXRoaW5SYW5nZShiWzBd
LCBhKSB8fCB3aXRoaW5SYW5nZShiWzFdLCBhKSkgewotICAgICAgICAgICAgaWYgKGFuZ2xlKGFb
MF0sIGJbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMV0gPSBiWzFdOwotICAgICAgICAgICAg
aWYgKGFuZ2xlKGJbMF0sIGFbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMF0gPSBiWzBdOwot
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZXJnZWQucHVzaChhID0gYik7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZhciBiZXN0ID0gLUluZmluaXR5LCBkzrs7Ci0g
ICAgICAgIGZvciAodmFyIG4gPSBtZXJnZWQubGVuZ3RoIC0gMSwgaSA9IDAsIGEgPSBtZXJnZWRb
bl0sIGI7IGkgPD0gbjsgYSA9IGIsICsraSkgewotICAgICAgICAgIGIgPSBtZXJnZWRbaV07Ci0g
ICAgICAgICAgaWYgKChkzrsgPSBhbmdsZShhWzFdLCBiWzBdKSkgPiBiZXN0KSBiZXN0ID0gZM67
LCDOuzAgPSBiWzBdLCDOuzEgPSBhWzFdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByYW5n
ZXMgPSByYW5nZSA9IG51bGw7Ci0gICAgICByZXR1cm4gzrswID09PSBJbmZpbml0eSB8fCDPhjAg
PT09IEluZmluaXR5ID8gWyBbIE5hTiwgTmFOIF0sIFsgTmFOLCBOYU4gXSBdIDogWyBbIM67MCwg
z4YwIF0sIFsgzrsxLCDPhjEgXSBdOwotICAgIH07Ci0gIH0oKTsKLSAgZDMuZ2VvLmNlbnRyb2lk
ID0gZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgZDNfZ2VvX2NlbnRyb2lkVzAgPSBkM19nZW9fY2Vu
dHJvaWRXMSA9IGQzX2dlb19jZW50cm9pZFgwID0gZDNfZ2VvX2NlbnRyb2lkWTAgPSBkM19nZW9f
Y2VudHJvaWRaMCA9IGQzX2dlb19jZW50cm9pZFgxID0gZDNfZ2VvX2NlbnRyb2lkWTEgPSBkM19n
ZW9fY2VudHJvaWRaMSA9IGQzX2dlb19jZW50cm9pZFgyID0gZDNfZ2VvX2NlbnRyb2lkWTIgPSBk
M19nZW9fY2VudHJvaWRaMiA9IDA7Ci0gICAgZDMuZ2VvLnN0cmVhbShvYmplY3QsIGQzX2dlb19j
ZW50cm9pZCk7Ci0gICAgdmFyIHggPSBkM19nZW9fY2VudHJvaWRYMiwgeSA9IGQzX2dlb19jZW50
cm9pZFkyLCB6ID0gZDNfZ2VvX2NlbnRyb2lkWjIsIG0gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7
Ci0gICAgaWYgKG0gPCDOtTIpIHsKLSAgICAgIHggPSBkM19nZW9fY2VudHJvaWRYMSwgeSA9IGQz
X2dlb19jZW50cm9pZFkxLCB6ID0gZDNfZ2VvX2NlbnRyb2lkWjE7Ci0gICAgICBpZiAoZDNfZ2Vv
X2NlbnRyb2lkVzEgPCDOtSkgeCA9IGQzX2dlb19jZW50cm9pZFgwLCB5ID0gZDNfZ2VvX2NlbnRy
b2lkWTAsIHogPSBkM19nZW9fY2VudHJvaWRaMDsKLSAgICAgIG0gPSB4ICogeCArIHkgKiB5ICsg
eiAqIHo7Ci0gICAgICBpZiAobSA8IM61MikgcmV0dXJuIFsgTmFOLCBOYU4gXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFsgTWF0aC5hdGFuMih5LCB4KSAqIGQzX2RlZ3JlZXMsIGQzX2FzaW4oeiAvIE1h
dGguc3FydChtKSkgKiBkM19kZWdyZWVzIF07Ci0gIH07Ci0gIHZhciBkM19nZW9fY2VudHJvaWRX
MCwgZDNfZ2VvX2NlbnRyb2lkVzEsIGQzX2dlb19jZW50cm9pZFgwLCBkM19nZW9fY2VudHJvaWRZ
MCwgZDNfZ2VvX2NlbnRyb2lkWjAsIGQzX2dlb19jZW50cm9pZFgxLCBkM19nZW9fY2VudHJvaWRZ
MSwgZDNfZ2VvX2NlbnRyb2lkWjEsIGQzX2dlb19jZW50cm9pZFgyLCBkM19nZW9fY2VudHJvaWRZ
MiwgZDNfZ2VvX2NlbnRyb2lkWjI7Ci0gIHZhciBkM19nZW9fY2VudHJvaWQgPSB7Ci0gICAgc3Bo
ZXJlOiBkM19ub29wLAotICAgIHBvaW50OiBkM19nZW9fY2VudHJvaWRQb2ludCwKLSAgICBsaW5l
U3RhcnQ6IGQzX2dlb19jZW50cm9pZExpbmVTdGFydCwKLSAgICBsaW5lRW5kOiBkM19nZW9fY2Vu
dHJvaWRMaW5lRW5kLAotICAgIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICBkM19n
ZW9fY2VudHJvaWQubGluZVN0YXJ0ID0gZDNfZ2VvX2NlbnRyb2lkUmluZ1N0YXJ0OwotICAgIH0s
Ci0gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICBkM19nZW9fY2VudHJvaWQubGlu
ZVN0YXJ0ID0gZDNfZ2VvX2NlbnRyb2lkTGluZVN0YXJ0OwotICAgIH0KLSAgfTsKLSAgZnVuY3Rp
b24gZDNfZ2VvX2NlbnRyb2lkUG9pbnQozrssIM+GKSB7Ci0gICAgzrsgKj0gZDNfcmFkaWFuczsK
LSAgICB2YXIgY29zz4YgPSBNYXRoLmNvcyjPhiAqPSBkM19yYWRpYW5zKTsKLSAgICBkM19nZW9f
Y2VudHJvaWRQb2ludFhZWihjb3PPhiAqIE1hdGguY29zKM67KSwgY29zz4YgKiBNYXRoLnNpbijO
uyksIE1hdGguc2luKM+GKSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkUG9pbnRY
WVooeCwgeSwgeikgewotICAgICsrZDNfZ2VvX2NlbnRyb2lkVzA7Ci0gICAgZDNfZ2VvX2NlbnRy
b2lkWDAgKz0gKHggLSBkM19nZW9fY2VudHJvaWRYMCkgLyBkM19nZW9fY2VudHJvaWRXMDsKLSAg
ICBkM19nZW9fY2VudHJvaWRZMCArPSAoeSAtIGQzX2dlb19jZW50cm9pZFkwKSAvIGQzX2dlb19j
ZW50cm9pZFcwOwotICAgIGQzX2dlb19jZW50cm9pZFowICs9ICh6IC0gZDNfZ2VvX2NlbnRyb2lk
WjApIC8gZDNfZ2VvX2NlbnRyb2lkVzA7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lk
TGluZVN0YXJ0KCkgewotICAgIHZhciB4MCwgeTAsIHowOwotICAgIGQzX2dlb19jZW50cm9pZC5w
b2ludCA9IGZ1bmN0aW9uKM67LCDPhikgewotICAgICAgzrsgKj0gZDNfcmFkaWFuczsKLSAgICAg
IHZhciBjb3PPhiA9IE1hdGguY29zKM+GICo9IGQzX3JhZGlhbnMpOwotICAgICAgeDAgPSBjb3PP
hiAqIE1hdGguY29zKM67KTsKLSAgICAgIHkwID0gY29zz4YgKiBNYXRoLnNpbijOuyk7Ci0gICAg
ICB6MCA9IE1hdGguc2luKM+GKTsKLSAgICAgIGQzX2dlb19jZW50cm9pZC5wb2ludCA9IG5leHRQ
b2ludDsKLSAgICAgIGQzX2dlb19jZW50cm9pZFBvaW50WFlaKHgwLCB5MCwgejApOwotICAgIH07
Ci0gICAgZnVuY3Rpb24gbmV4dFBvaW50KM67LCDPhikgewotICAgICAgzrsgKj0gZDNfcmFkaWFu
czsKLSAgICAgIHZhciBjb3PPhiA9IE1hdGguY29zKM+GICo9IGQzX3JhZGlhbnMpLCB4ID0gY29z
z4YgKiBNYXRoLmNvcyjOuyksIHkgPSBjb3PPhiAqIE1hdGguc2luKM67KSwgeiA9IE1hdGguc2lu
KM+GKSwgdyA9IE1hdGguYXRhbjIoTWF0aC5zcXJ0KCh3ID0geTAgKiB6IC0gejAgKiB5KSAqIHcg
KyAodyA9IHowICogeCAtIHgwICogeikgKiB3ICsgKHcgPSB4MCAqIHkgLSB5MCAqIHgpICogdyks
IHgwICogeCArIHkwICogeSArIHowICogeik7Ci0gICAgICBkM19nZW9fY2VudHJvaWRXMSArPSB3
OwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTsKLSAgICAg
IGQzX2dlb19jZW50cm9pZFkxICs9IHcgKiAoeTAgKyAoeTAgPSB5KSk7Ci0gICAgICBkM19nZW9f
Y2VudHJvaWRaMSArPSB3ICogKHowICsgKHowID0geikpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lk
UG9pbnRYWVooeDAsIHkwLCB6MCk7Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jZW50
cm9pZExpbmVFbmQoKSB7Ci0gICAgZDNfZ2VvX2NlbnRyb2lkLnBvaW50ID0gZDNfZ2VvX2NlbnRy
b2lkUG9pbnQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NlbnRyb2lkUmluZ1N0YXJ0KCkgewot
ICAgIHZhciDOuzAwLCDPhjAwLCB4MCwgeTAsIHowOwotICAgIGQzX2dlb19jZW50cm9pZC5wb2lu
dCA9IGZ1bmN0aW9uKM67LCDPhikgewotICAgICAgzrswMCA9IM67LCDPhjAwID0gz4Y7Ci0gICAg
ICBkM19nZW9fY2VudHJvaWQucG9pbnQgPSBuZXh0UG9pbnQ7Ci0gICAgICDOuyAqPSBkM19yYWRp
YW5zOwotICAgICAgdmFyIGNvc8+GID0gTWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucyk7Ci0gICAg
ICB4MCA9IGNvc8+GICogTWF0aC5jb3MozrspOwotICAgICAgeTAgPSBjb3PPhiAqIE1hdGguc2lu
KM67KTsKLSAgICAgIHowID0gTWF0aC5zaW4oz4YpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkUG9p
bnRYWVooeDAsIHkwLCB6MCk7Ci0gICAgfTsKLSAgICBkM19nZW9fY2VudHJvaWQubGluZUVuZCA9
IGZ1bmN0aW9uKCkgewotICAgICAgbmV4dFBvaW50KM67MDAsIM+GMDApOwotICAgICAgZDNfZ2Vv
X2NlbnRyb2lkLmxpbmVFbmQgPSBkM19nZW9fY2VudHJvaWRMaW5lRW5kOwotICAgICAgZDNfZ2Vv
X2NlbnRyb2lkLnBvaW50ID0gZDNfZ2VvX2NlbnRyb2lkUG9pbnQ7Ci0gICAgfTsKLSAgICBmdW5j
dGlvbiBuZXh0UG9pbnQozrssIM+GKSB7Ci0gICAgICDOuyAqPSBkM19yYWRpYW5zOwotICAgICAg
dmFyIGNvc8+GID0gTWF0aC5jb3Moz4YgKj0gZDNfcmFkaWFucyksIHggPSBjb3PPhiAqIE1hdGgu
Y29zKM67KSwgeSA9IGNvc8+GICogTWF0aC5zaW4ozrspLCB6ID0gTWF0aC5zaW4oz4YpLCBjeCA9
IHkwICogeiAtIHowICogeSwgY3kgPSB6MCAqIHggLSB4MCAqIHosIGN6ID0geDAgKiB5IC0geTAg
KiB4LCBtID0gTWF0aC5zcXJ0KGN4ICogY3ggKyBjeSAqIGN5ICsgY3ogKiBjeiksIHUgPSB4MCAq
IHggKyB5MCAqIHkgKyB6MCAqIHosIHYgPSBtICYmIC1kM19hY29zKHUpIC8gbSwgdyA9IE1hdGgu
YXRhbjIobSwgdSk7Ci0gICAgICBkM19nZW9fY2VudHJvaWRYMiArPSB2ICogY3g7Ci0gICAgICBk
M19nZW9fY2VudHJvaWRZMiArPSB2ICogY3k7Ci0gICAgICBkM19nZW9fY2VudHJvaWRaMiArPSB2
ICogY3o7Ci0gICAgICBkM19nZW9fY2VudHJvaWRXMSArPSB3OwotICAgICAgZDNfZ2VvX2NlbnRy
b2lkWDEgKz0gdyAqICh4MCArICh4MCA9IHgpKTsKLSAgICAgIGQzX2dlb19jZW50cm9pZFkxICs9
IHcgKiAoeTAgKyAoeTAgPSB5KSk7Ci0gICAgICBkM19nZW9fY2VudHJvaWRaMSArPSB3ICogKHow
ICsgKHowID0geikpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkUG9pbnRYWVooeDAsIHkwLCB6MCk7
Ci0gICAgfQotICB9Ci0gIGZ1bmN0aW9uIGQzX3RydWUoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBQb2x5Z29uKHNlZ21lbnRzLCBjb21wYXJlLCBjbGlw
U3RhcnRJbnNpZGUsIGludGVycG9sYXRlLCBsaXN0ZW5lcikgewotICAgIHZhciBzdWJqZWN0ID0g
W10sIGNsaXAgPSBbXTsKLSAgICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNlZ21lbnQpIHsK
LSAgICAgIGlmICgobiA9IHNlZ21lbnQubGVuZ3RoIC0gMSkgPD0gMCkgcmV0dXJuOwotICAgICAg
dmFyIG4sIHAwID0gc2VnbWVudFswXSwgcDEgPSBzZWdtZW50W25dOwotICAgICAgaWYgKGQzX2dl
b19zcGhlcmljYWxFcXVhbChwMCwgcDEpKSB7Ci0gICAgICAgIGxpc3RlbmVyLmxpbmVTdGFydCgp
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbGlzdGVuZXIucG9pbnQoKHAw
ID0gc2VnbWVudFtpXSlbMF0sIHAwWzFdKTsKLSAgICAgICAgbGlzdGVuZXIubGluZUVuZCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICB2YXIgYSA9IG5ldyBkM19nZW9fY2xpcFBv
bHlnb25JbnRlcnNlY3Rpb24ocDAsIHNlZ21lbnQsIG51bGwsIHRydWUpLCBiID0gbmV3IGQzX2dl
b19jbGlwUG9seWdvbkludGVyc2VjdGlvbihwMCwgbnVsbCwgYSwgZmFsc2UpOwotICAgICAgYS5v
ID0gYjsKLSAgICAgIHN1YmplY3QucHVzaChhKTsKLSAgICAgIGNsaXAucHVzaChiKTsKLSAgICAg
IGEgPSBuZXcgZDNfZ2VvX2NsaXBQb2x5Z29uSW50ZXJzZWN0aW9uKHAxLCBzZWdtZW50LCBudWxs
LCBmYWxzZSk7Ci0gICAgICBiID0gbmV3IGQzX2dlb19jbGlwUG9seWdvbkludGVyc2VjdGlvbihw
MSwgbnVsbCwgYSwgdHJ1ZSk7Ci0gICAgICBhLm8gPSBiOwotICAgICAgc3ViamVjdC5wdXNoKGEp
OwotICAgICAgY2xpcC5wdXNoKGIpOwotICAgIH0pOwotICAgIGNsaXAuc29ydChjb21wYXJlKTsK
LSAgICBkM19nZW9fY2xpcFBvbHlnb25MaW5rQ2lyY3VsYXIoc3ViamVjdCk7Ci0gICAgZDNfZ2Vv
X2NsaXBQb2x5Z29uTGlua0NpcmN1bGFyKGNsaXApOwotICAgIGlmICghc3ViamVjdC5sZW5ndGgp
IHJldHVybjsKLSAgICBmb3IgKHZhciBpID0gMCwgZW50cnkgPSBjbGlwU3RhcnRJbnNpZGUsIG4g
PSBjbGlwLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgY2xpcFtpXS5lID0gZW50cnkgPSAh
ZW50cnk7Ci0gICAgfQotICAgIHZhciBzdGFydCA9IHN1YmplY3RbMF0sIHBvaW50cywgcG9pbnQ7
Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgIHZhciBjdXJyZW50ID0gc3RhcnQsIGlzU3ViamVjdCA9
IHRydWU7Ci0gICAgICB3aGlsZSAoY3VycmVudC52KSBpZiAoKGN1cnJlbnQgPSBjdXJyZW50Lm4p
ID09PSBzdGFydCkgcmV0dXJuOwotICAgICAgcG9pbnRzID0gY3VycmVudC56OwotICAgICAgbGlz
dGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICBkbyB7Ci0gICAgICAgIGN1cnJlbnQudiA9IGN1cnJl
bnQuby52ID0gdHJ1ZTsKLSAgICAgICAgaWYgKGN1cnJlbnQuZSkgewotICAgICAgICAgIGlmIChp
c1N1YmplY3QpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcG9pbnRzLmxlbmd0
aDsgaSA8IG47ICsraSkgbGlzdGVuZXIucG9pbnQoKHBvaW50ID0gcG9pbnRzW2ldKVswXSwgcG9p
bnRbMV0pOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJy
ZW50LngsIGN1cnJlbnQubi54LCAxLCBsaXN0ZW5lcik7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50Lm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGlz
U3ViamVjdCkgewotICAgICAgICAgICAgcG9pbnRzID0gY3VycmVudC5wLno7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBsaXN0ZW5lci5w
b2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLCBwb2ludFsxXSk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGludGVycG9sYXRlKGN1cnJlbnQueCwgY3VycmVudC5wLngsIC0xLCBs
aXN0ZW5lcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnA7Ci0g
ICAgICAgIH0KLSAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubzsKLSAgICAgICAgcG9pbnRzID0g
Y3VycmVudC56OwotICAgICAgICBpc1N1YmplY3QgPSAhaXNTdWJqZWN0OwotICAgICAgfSB3aGls
ZSAoIWN1cnJlbnQudik7Ci0gICAgICBsaXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgfQotICB9Ci0g
IGZ1bmN0aW9uIGQzX2dlb19jbGlwUG9seWdvbkxpbmtDaXJjdWxhcihhcnJheSkgewotICAgIGlm
ICghKG4gPSBhcnJheS5sZW5ndGgpKSByZXR1cm47Ci0gICAgdmFyIG4sIGkgPSAwLCBhID0gYXJy
YXlbMF0sIGI7Ci0gICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgIGEubiA9IGIgPSBhcnJheVtp
XTsKLSAgICAgIGIucCA9IGE7Ci0gICAgICBhID0gYjsKLSAgICB9Ci0gICAgYS5uID0gYiA9IGFy
cmF5WzBdOwotICAgIGIucCA9IGE7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBQb2x5Z29u
SW50ZXJzZWN0aW9uKHBvaW50LCBwb2ludHMsIG90aGVyLCBlbnRyeSkgewotICAgIHRoaXMueCA9
IHBvaW50OwotICAgIHRoaXMueiA9IHBvaW50czsKLSAgICB0aGlzLm8gPSBvdGhlcjsKLSAgICB0
aGlzLmUgPSBlbnRyeTsKLSAgICB0aGlzLnYgPSBmYWxzZTsKLSAgICB0aGlzLm4gPSB0aGlzLnAg
PSBudWxsOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jbGlwKHBvaW50VmlzaWJsZSwgY2xpcExp
bmUsIGludGVycG9sYXRlLCBjbGlwU3RhcnQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24ocm90YXRl
LCBsaXN0ZW5lcikgewotICAgICAgdmFyIGxpbmUgPSBjbGlwTGluZShsaXN0ZW5lciksIHJvdGF0
ZWRDbGlwU3RhcnQgPSByb3RhdGUuaW52ZXJ0KGNsaXBTdGFydFswXSwgY2xpcFN0YXJ0WzFdKTsK
LSAgICAgIHZhciBjbGlwID0gewotICAgICAgICBwb2ludDogcG9pbnQsCi0gICAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAotICAgICAgICBsaW5lRW5kOiBsaW5lRW5kLAotICAgICAgICBwb2x5
Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGNsaXAucG9pbnQgPSBwb2ludFJpbmc7
Ci0gICAgICAgICAgY2xpcC5saW5lU3RhcnQgPSByaW5nU3RhcnQ7Ci0gICAgICAgICAgY2xpcC5s
aW5lRW5kID0gcmluZ0VuZDsKLSAgICAgICAgICBzZWdtZW50cyA9IFtdOwotICAgICAgICAgIHBv
bHlnb24gPSBbXTsKLSAgICAgICAgfSwKLSAgICAgICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgY2xpcC5wb2ludCA9IHBvaW50OwotICAgICAgICAgIGNsaXAubGluZVN0YXJ0
ID0gbGluZVN0YXJ0OwotICAgICAgICAgIGNsaXAubGluZUVuZCA9IGxpbmVFbmQ7Ci0gICAgICAg
ICAgc2VnbWVudHMgPSBkMy5tZXJnZShzZWdtZW50cyk7Ci0gICAgICAgICAgdmFyIGNsaXBTdGFy
dEluc2lkZSA9IGQzX2dlb19wb2ludEluUG9seWdvbihyb3RhdGVkQ2xpcFN0YXJ0LCBwb2x5Z29u
KTsKLSAgICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIXBv
bHlnb25TdGFydGVkKSBsaXN0ZW5lci5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0
cnVlOwotICAgICAgICAgICAgZDNfZ2VvX2NsaXBQb2x5Z29uKHNlZ21lbnRzLCBkM19nZW9fY2xp
cFNvcnQsIGNsaXBTdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIGxpc3RlbmVyKTsKLSAgICAgICAg
ICB9IGVsc2UgaWYgKGNsaXBTdGFydEluc2lkZSkgewotICAgICAgICAgICAgaWYgKCFwb2x5Z29u
U3RhcnRlZCkgbGlzdGVuZXIucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIGxpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgICAgICAgICAgaW50ZXJwb2xh
dGUobnVsbCwgbnVsbCwgMSwgbGlzdGVuZXIpOwotICAgICAgICAgICAgbGlzdGVuZXIubGluZUVu
ZCgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocG9seWdvblN0YXJ0ZWQpIGxpc3RlbmVy
LnBvbHlnb25FbmQoKSwgcG9seWdvblN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICBzZWdtZW50
cyA9IHBvbHlnb24gPSBudWxsOwotICAgICAgICB9LAotICAgICAgICBzcGhlcmU6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgIGxpc3RlbmVyLnBvbHlnb25TdGFydCgpOwotICAgICAgICAgIGxpc3Rl
bmVyLmxpbmVTdGFydCgpOwotICAgICAgICAgIGludGVycG9sYXRlKG51bGwsIG51bGwsIDEsIGxp
c3RlbmVyKTsKLSAgICAgICAgICBsaXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgICAgICAgbGlzdGVu
ZXIucG9seWdvbkVuZCgpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZnVuY3Rpb24gcG9p
bnQozrssIM+GKSB7Ci0gICAgICAgIHZhciBwb2ludCA9IHJvdGF0ZSjOuywgz4YpOwotICAgICAg
ICBpZiAocG9pbnRWaXNpYmxlKM67ID0gcG9pbnRbMF0sIM+GID0gcG9pbnRbMV0pKSBsaXN0ZW5l
ci5wb2ludCjOuywgz4YpOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gcG9pbnRMaW5lKM67LCDP
hikgewotICAgICAgICB2YXIgcG9pbnQgPSByb3RhdGUozrssIM+GKTsKLSAgICAgICAgbGluZS5w
b2ludChwb2ludFswXSwgcG9pbnRbMV0pOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbGluZVN0
YXJ0KCkgewotICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnRMaW5lOwotICAgICAgICBsaW5lLmxp
bmVTdGFydCgpOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbGluZUVuZCgpIHsKLSAgICAgICAg
Y2xpcC5wb2ludCA9IHBvaW50OwotICAgICAgICBsaW5lLmxpbmVFbmQoKTsKLSAgICAgIH0KLSAg
ICAgIHZhciBzZWdtZW50czsKLSAgICAgIHZhciBidWZmZXIgPSBkM19nZW9fY2xpcEJ1ZmZlckxp
c3RlbmVyKCksIHJpbmdMaXN0ZW5lciA9IGNsaXBMaW5lKGJ1ZmZlciksIHBvbHlnb25TdGFydGVk
ID0gZmFsc2UsIHBvbHlnb24sIHJpbmc7Ci0gICAgICBmdW5jdGlvbiBwb2ludFJpbmcozrssIM+G
KSB7Ci0gICAgICAgIHJpbmcucHVzaChbIM67LCDPhiBdKTsKLSAgICAgICAgdmFyIHBvaW50ID0g
cm90YXRlKM67LCDPhik7Ci0gICAgICAgIHJpbmdMaXN0ZW5lci5wb2ludChwb2ludFswXSwgcG9p
bnRbMV0pOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gcmluZ1N0YXJ0KCkgewotICAgICAgICBy
aW5nTGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgIHJpbmcgPSBbXTsKLSAgICAgIH0KLSAg
ICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7Ci0gICAgICAgIHBvaW50UmluZyhyaW5nWzBdWzBdLCBy
aW5nWzBdWzFdKTsKLSAgICAgICAgcmluZ0xpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgdmFy
IGNsZWFuID0gcmluZ0xpc3RlbmVyLmNsZWFuKCksIHJpbmdTZWdtZW50cyA9IGJ1ZmZlci5idWZm
ZXIoKSwgc2VnbWVudCwgbiA9IHJpbmdTZWdtZW50cy5sZW5ndGg7Ci0gICAgICAgIHJpbmcucG9w
KCk7Ci0gICAgICAgIHBvbHlnb24ucHVzaChyaW5nKTsKLSAgICAgICAgcmluZyA9IG51bGw7Ci0g
ICAgICAgIGlmICghbikgcmV0dXJuOwotICAgICAgICBpZiAoY2xlYW4gJiAxKSB7Ci0gICAgICAg
ICAgc2VnbWVudCA9IHJpbmdTZWdtZW50c1swXTsKLSAgICAgICAgICB2YXIgbiA9IHNlZ21lbnQu
bGVuZ3RoIC0gMSwgaSA9IC0xLCBwb2ludDsKLSAgICAgICAgICBpZiAobiA+IDApIHsKLSAgICAg
ICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIGxpc3RlbmVyLnBvbHlnb25TdGFydCgpLCBwb2x5
Z29uU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAg
ICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBzZWdtZW50
W2ldKVswXSwgcG9pbnRbMV0pOwotICAgICAgICAgICAgbGlzdGVuZXIubGluZUVuZCgpOwotICAg
ICAgICAgIH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG4gPiAx
ICYmIGNsZWFuICYgMikgcmluZ1NlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLnBvcCgpLmNvbmNh
dChyaW5nU2VnbWVudHMuc2hpZnQoKSkpOwotICAgICAgICBzZWdtZW50cy5wdXNoKHJpbmdTZWdt
ZW50cy5maWx0ZXIoZDNfZ2VvX2NsaXBTZWdtZW50TGVuZ3RoMSkpOwotICAgICAgfQotICAgICAg
cmV0dXJuIGNsaXA7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fY2xpcFNlZ21lbnRM
ZW5ndGgxKHNlZ21lbnQpIHsKLSAgICByZXR1cm4gc2VnbWVudC5sZW5ndGggPiAxOwotICB9Ci0g
IGZ1bmN0aW9uIGQzX2dlb19jbGlwQnVmZmVyTGlzdGVuZXIoKSB7Ci0gICAgdmFyIGxpbmVzID0g
W10sIGxpbmU7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGxpbmVzLnB1c2gobGluZSA9IFtdKTsKLSAgICAgIH0sCi0gICAgICBwb2ludDogZnVu
Y3Rpb24ozrssIM+GKSB7Ci0gICAgICAgIGxpbmUucHVzaChbIM67LCDPhiBdKTsKLSAgICAgIH0s
Ci0gICAgICBsaW5lRW5kOiBkM19ub29wLAotICAgICAgYnVmZmVyOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdmFyIGJ1ZmZlciA9IGxpbmVzOwotICAgICAgICBsaW5lcyA9IFtdOwotICAgICAgICBs
aW5lID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICAgIH0sCi0gICAgICByZWpv
aW46IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkgbGluZXMucHVz
aChsaW5lcy5wb3AoKS5jb25jYXQobGluZXMuc2hpZnQoKSkpOwotICAgICAgfQotICAgIH07Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBTb3J0KGEsIGIpIHsKLSAgICByZXR1cm4gKChhID0g
YS54KVswXSA8IDAgPyBhWzFdIC0gaGFsZs+AIC0gzrUgOiBoYWxmz4AgLSBhWzFdKSAtICgoYiA9
IGIueClbMF0gPCAwID8gYlsxXSAtIGhhbGbPgCAtIM61IDogaGFsZs+AIC0gYlsxXSk7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfZ2VvX3BvaW50SW5Qb2x5Z29uKHBvaW50LCBwb2x5Z29uKSB7Ci0gICAg
dmFyIG1lcmlkaWFuID0gcG9pbnRbMF0sIHBhcmFsbGVsID0gcG9pbnRbMV0sIG1lcmlkaWFuTm9y
bWFsID0gWyBNYXRoLnNpbihtZXJpZGlhbiksIC1NYXRoLmNvcyhtZXJpZGlhbiksIDAgXSwgcG9s
YXJBbmdsZSA9IDAsIHdpbmRpbmcgPSAwOwotICAgIGQzX2dlb19hcmVhUmluZ1N1bS5yZXNldCgp
OwotICAgIGZvciAodmFyIGkgPSAwLCBuID0gcG9seWdvbi5sZW5ndGg7IGkgPCBuOyArK2kpIHsK
LSAgICAgIHZhciByaW5nID0gcG9seWdvbltpXSwgbSA9IHJpbmcubGVuZ3RoOwotICAgICAgaWYg
KCFtKSBjb250aW51ZTsKLSAgICAgIHZhciBwb2ludDAgPSByaW5nWzBdLCDOuzAgPSBwb2ludDBb
MF0sIM+GMCA9IHBvaW50MFsxXSAvIDIgKyDPgCAvIDQsIHNpbs+GMCA9IE1hdGguc2luKM+GMCks
IGNvc8+GMCA9IE1hdGguY29zKM+GMCksIGogPSAxOwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgaWYgKGogPT09IG0pIGogPSAwOwotICAgICAgICBwb2ludCA9IHJpbmdbal07Ci0gICAg
ICAgIHZhciDOuyA9IHBvaW50WzBdLCDPhiA9IHBvaW50WzFdIC8gMiArIM+AIC8gNCwgc2luz4Yg
PSBNYXRoLnNpbijPhiksIGNvc8+GID0gTWF0aC5jb3Moz4YpLCBkzrsgPSDOuyAtIM67MCwgc2TO
uyA9IGTOuyA+PSAwID8gMSA6IC0xLCBhZM67ID0gc2TOuyAqIGTOuywgYW50aW1lcmlkaWFuID0g
YWTOuyA+IM+ALCBrID0gc2luz4YwICogc2luz4Y7Ci0gICAgICAgIGQzX2dlb19hcmVhUmluZ1N1
bS5hZGQoTWF0aC5hdGFuMihrICogc2TOuyAqIE1hdGguc2luKGFkzrspLCBjb3PPhjAgKiBjb3PP
hiArIGsgKiBNYXRoLmNvcyhhZM67KSkpOwotICAgICAgICBwb2xhckFuZ2xlICs9IGFudGltZXJp
ZGlhbiA/IGTOuyArIHNkzrsgKiDPhCA6IGTOuzsKLSAgICAgICAgaWYgKGFudGltZXJpZGlhbiBe
IM67MCA+PSBtZXJpZGlhbiBeIM67ID49IG1lcmlkaWFuKSB7Ci0gICAgICAgICAgdmFyIGFyYyA9
IGQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhkM19nZW9fY2FydGVzaWFuKHBvaW50MCksIGQzX2dlb19j
YXJ0ZXNpYW4ocG9pbnQpKTsKLSAgICAgICAgICBkM19nZW9fY2FydGVzaWFuTm9ybWFsaXplKGFy
Yyk7Ci0gICAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyht
ZXJpZGlhbk5vcm1hbCwgYXJjKTsKLSAgICAgICAgICBkM19nZW9fY2FydGVzaWFuTm9ybWFsaXpl
KGludGVyc2VjdGlvbik7Ci0gICAgICAgICAgdmFyIM+GYXJjID0gKGFudGltZXJpZGlhbiBeIGTO
uyA+PSAwID8gLTEgOiAxKSAqIGQzX2FzaW4oaW50ZXJzZWN0aW9uWzJdKTsKLSAgICAgICAgICBp
ZiAocGFyYWxsZWwgPiDPhmFyYyB8fCBwYXJhbGxlbCA9PT0gz4ZhcmMgJiYgKGFyY1swXSB8fCBh
cmNbMV0pKSB7Ci0gICAgICAgICAgICB3aW5kaW5nICs9IGFudGltZXJpZGlhbiBeIGTOuyA+PSAw
ID8gMSA6IC0xOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWorKykgYnJl
YWs7Ci0gICAgICAgIM67MCA9IM67LCBzaW7PhjAgPSBzaW7PhiwgY29zz4YwID0gY29zz4YsIHBv
aW50MCA9IHBvaW50OwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKHBvbGFyQW5nbGUgPCAt
zrUgfHwgcG9sYXJBbmdsZSA8IM61ICYmIGQzX2dlb19hcmVhUmluZ1N1bSA8IDApIF4gd2luZGlu
ZyAmIDE7Ci0gIH0KLSAgdmFyIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuID0gZDNfZ2VvX2NsaXAo
ZDNfdHJ1ZSwgZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5MaW5lLCBkM19nZW9fY2xpcEFudGltZXJp
ZGlhbkludGVycG9sYXRlLCBbIC3PgCwgLc+AIC8gMiBdKTsKLSAgZnVuY3Rpb24gZDNfZ2VvX2Ns
aXBBbnRpbWVyaWRpYW5MaW5lKGxpc3RlbmVyKSB7Ci0gICAgdmFyIM67MCA9IE5hTiwgz4YwID0g
TmFOLCBzzrswID0gTmFOLCBjbGVhbjsKLSAgICByZXR1cm4gewotICAgICAgbGluZVN0YXJ0OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgIGNsZWFu
ID0gMTsKLSAgICAgIH0sCi0gICAgICBwb2ludDogZnVuY3Rpb24ozrsxLCDPhjEpIHsKLSAgICAg
ICAgdmFyIHPOuzEgPSDOuzEgPiAwID8gz4AgOiAtz4AsIGTOuyA9IGFicyjOuzEgLSDOuzApOwot
ICAgICAgICBpZiAoYWJzKGTOuyAtIM+AKSA8IM61KSB7Ci0gICAgICAgICAgbGlzdGVuZXIucG9p
bnQozrswLCDPhjAgPSAoz4YwICsgz4YxKSAvIDIgPiAwID8gaGFsZs+AIDogLWhhbGbPgCk7Ci0g
ICAgICAgICAgbGlzdGVuZXIucG9pbnQoc867MCwgz4YwKTsKLSAgICAgICAgICBsaXN0ZW5lci5s
aW5lRW5kKCk7Ci0gICAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgICAgbGlz
dGVuZXIucG9pbnQoc867MSwgz4YwKTsKLSAgICAgICAgICBsaXN0ZW5lci5wb2ludCjOuzEsIM+G
MCk7Ci0gICAgICAgICAgY2xlYW4gPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHPOuzAgIT09IHPO
uzEgJiYgZM67ID49IM+AKSB7Ci0gICAgICAgICAgaWYgKGFicyjOuzAgLSBzzrswKSA8IM61KSDO
uzAgLT0gc867MCAqIM61OwotICAgICAgICAgIGlmIChhYnMozrsxIC0gc867MSkgPCDOtSkgzrsx
IC09IHPOuzEgKiDOtTsKLSAgICAgICAgICDPhjAgPSBkM19nZW9fY2xpcEFudGltZXJpZGlhbklu
dGVyc2VjdCjOuzAsIM+GMCwgzrsxLCDPhjEpOwotICAgICAgICAgIGxpc3RlbmVyLnBvaW50KHPO
uzAsIM+GMCk7Ci0gICAgICAgICAgbGlzdGVuZXIubGluZUVuZCgpOwotICAgICAgICAgIGxpc3Rl
bmVyLmxpbmVTdGFydCgpOwotICAgICAgICAgIGxpc3RlbmVyLnBvaW50KHPOuzEsIM+GMCk7Ci0g
ICAgICAgICAgY2xlYW4gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGxpc3RlbmVyLnBvaW50KM67
MCA9IM67MSwgz4YwID0gz4YxKTsKLSAgICAgICAgc867MCA9IHPOuzE7Ci0gICAgICB9LAotICAg
ICAgbGluZUVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAg
ICAgICAgzrswID0gz4YwID0gTmFOOwotICAgICAgfSwKLSAgICAgIGNsZWFuOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIDIgLSBjbGVhbjsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0gIGZ1
bmN0aW9uIGQzX2dlb19jbGlwQW50aW1lcmlkaWFuSW50ZXJzZWN0KM67MCwgz4YwLCDOuzEsIM+G
MSkgewotICAgIHZhciBjb3PPhjAsIGNvc8+GMSwgc2luzrswX867MSA9IE1hdGguc2luKM67MCAt
IM67MSk7Ci0gICAgcmV0dXJuIGFicyhzaW7OuzBfzrsxKSA+IM61ID8gTWF0aC5hdGFuKChNYXRo
LnNpbijPhjApICogKGNvc8+GMSA9IE1hdGguY29zKM+GMSkpICogTWF0aC5zaW4ozrsxKSAtIE1h
dGguc2luKM+GMSkgKiAoY29zz4YwID0gTWF0aC5jb3Moz4YwKSkgKiBNYXRoLnNpbijOuzApKSAv
IChjb3PPhjAgKiBjb3PPhjEgKiBzaW7OuzBfzrsxKSkgOiAoz4YwICsgz4YxKSAvIDI7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZShmcm9tLCB0bywg
ZGlyZWN0aW9uLCBsaXN0ZW5lcikgewotICAgIHZhciDPhjsKLSAgICBpZiAoZnJvbSA9PSBudWxs
KSB7Ci0gICAgICDPhiA9IGRpcmVjdGlvbiAqIGhhbGbPgDsKLSAgICAgIGxpc3RlbmVyLnBvaW50
KC3PgCwgz4YpOwotICAgICAgbGlzdGVuZXIucG9pbnQoMCwgz4YpOwotICAgICAgbGlzdGVuZXIu
cG9pbnQoz4AsIM+GKTsKLSAgICAgIGxpc3RlbmVyLnBvaW50KM+ALCAwKTsKLSAgICAgIGxpc3Rl
bmVyLnBvaW50KM+ALCAtz4YpOwotICAgICAgbGlzdGVuZXIucG9pbnQoMCwgLc+GKTsKLSAgICAg
IGxpc3RlbmVyLnBvaW50KC3PgCwgLc+GKTsKLSAgICAgIGxpc3RlbmVyLnBvaW50KC3PgCwgMCk7
Ci0gICAgICBsaXN0ZW5lci5wb2ludCgtz4AsIM+GKTsKLSAgICB9IGVsc2UgaWYgKGFicyhmcm9t
WzBdIC0gdG9bMF0pID4gzrUpIHsKLSAgICAgIHZhciBzID0gZnJvbVswXSA8IHRvWzBdID8gz4Ag
OiAtz4A7Ci0gICAgICDPhiA9IGRpcmVjdGlvbiAqIHMgLyAyOwotICAgICAgbGlzdGVuZXIucG9p
bnQoLXMsIM+GKTsKLSAgICAgIGxpc3RlbmVyLnBvaW50KDAsIM+GKTsKLSAgICAgIGxpc3RlbmVy
LnBvaW50KHMsIM+GKTsKLSAgICB9IGVsc2UgewotICAgICAgbGlzdGVuZXIucG9pbnQodG9bMF0s
IHRvWzFdKTsKLSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NsaXBDaXJjbGUocmFkaXVz
KSB7Ci0gICAgdmFyIGNyID0gTWF0aC5jb3MocmFkaXVzKSwgc21hbGxSYWRpdXMgPSBjciA+IDAs
IG5vdEhlbWlzcGhlcmUgPSBhYnMoY3IpID4gzrUsIGludGVycG9sYXRlID0gZDNfZ2VvX2NpcmNs
ZUludGVycG9sYXRlKHJhZGl1cywgNiAqIGQzX3JhZGlhbnMpOwotICAgIHJldHVybiBkM19nZW9f
Y2xpcCh2aXNpYmxlLCBjbGlwTGluZSwgaW50ZXJwb2xhdGUsIHNtYWxsUmFkaXVzID8gWyAwLCAt
cmFkaXVzIF0gOiBbIC3PgCwgcmFkaXVzIC0gz4AgXSk7Ci0gICAgZnVuY3Rpb24gdmlzaWJsZSjO
uywgz4YpIHsKLSAgICAgIHJldHVybiBNYXRoLmNvcyjOuykgKiBNYXRoLmNvcyjPhikgPiBjcjsK
LSAgICB9Ci0gICAgZnVuY3Rpb24gY2xpcExpbmUobGlzdGVuZXIpIHsKLSAgICAgIHZhciBwb2lu
dDAsIGMwLCB2MCwgdjAwLCBjbGVhbjsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVTdGFy
dDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdjAwID0gdjAgPSBmYWxzZTsKLSAgICAgICAgICBj
bGVhbiA9IDE7Ci0gICAgICAgIH0sCi0gICAgICAgIHBvaW50OiBmdW5jdGlvbijOuywgz4YpIHsK
LSAgICAgICAgICB2YXIgcG9pbnQxID0gWyDOuywgz4YgXSwgcG9pbnQyLCB2ID0gdmlzaWJsZSjO
uywgz4YpLCBjID0gc21hbGxSYWRpdXMgPyB2ID8gMCA6IGNvZGUozrssIM+GKSA6IHYgPyBjb2Rl
KM67ICsgKM67IDwgMCA/IM+AIDogLc+AKSwgz4YpIDogMDsKLSAgICAgICAgICBpZiAoIXBvaW50
MCAmJiAodjAwID0gdjAgPSB2KSkgbGlzdGVuZXIubGluZVN0YXJ0KCk7Ci0gICAgICAgICAgaWYg
KHYgIT09IHYwKSB7Ci0gICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQwLCBwb2lu
dDEpOwotICAgICAgICAgICAgaWYgKGQzX2dlb19zcGhlcmljYWxFcXVhbChwb2ludDAsIHBvaW50
MikgfHwgZDNfZ2VvX3NwaGVyaWNhbEVxdWFsKHBvaW50MSwgcG9pbnQyKSkgewotICAgICAgICAg
ICAgICBwb2ludDFbMF0gKz0gzrU7Ci0gICAgICAgICAgICAgIHBvaW50MVsxXSArPSDOtTsKLSAg
ICAgICAgICAgICAgdiA9IHZpc2libGUocG9pbnQxWzBdLCBwb2ludDFbMV0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodiAhPT0gdjApIHsKLSAgICAgICAgICAg
IGNsZWFuID0gMDsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgIGxpc3RlbmVy
LmxpbmVTdGFydCgpOwotICAgICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNlY3QocG9pbnQxLCBw
b2ludDApOwotICAgICAgICAgICAgICBsaXN0ZW5lci5wb2ludChwb2ludDJbMF0sIHBvaW50Mlsx
XSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNl
Y3QocG9pbnQwLCBwb2ludDEpOwotICAgICAgICAgICAgICBsaXN0ZW5lci5wb2ludChwb2ludDJb
MF0sIHBvaW50MlsxXSk7Ci0gICAgICAgICAgICAgIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHBvaW50MCA9IHBvaW50MjsKLSAgICAgICAgICB9IGVsc2Ug
aWYgKG5vdEhlbWlzcGhlcmUgJiYgcG9pbnQwICYmIHNtYWxsUmFkaXVzIF4gdikgewotICAgICAg
ICAgICAgdmFyIHQ7Ci0gICAgICAgICAgICBpZiAoIShjICYgYzApICYmICh0ID0gaW50ZXJzZWN0
KHBvaW50MSwgcG9pbnQwLCB0cnVlKSkpIHsKLSAgICAgICAgICAgICAgY2xlYW4gPSAwOwotICAg
ICAgICAgICAgICBpZiAoc21hbGxSYWRpdXMpIHsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lci5s
aW5lU3RhcnQoKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lci5wb2ludCh0WzBdWzBdLCB0WzBd
WzFdKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lci5wb2ludCh0WzFdWzBdLCB0WzFdWzFdKTsK
LSAgICAgICAgICAgICAgICBsaXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXIucG9pbnQodFsxXVswXSwgdFsxXVsxXSk7Ci0g
ICAgICAgICAgICAgICAgbGlzdGVuZXIubGluZUVuZCgpOwotICAgICAgICAgICAgICAgIGxpc3Rl
bmVyLmxpbmVTdGFydCgpOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyLnBvaW50KHRbMF1bMF0s
IHRbMF1bMV0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGlmICh2ICYmICghcG9pbnQwIHx8ICFkM19nZW9fc3BoZXJpY2FsRXF1YWwocG9p
bnQwLCBwb2ludDEpKSkgewotICAgICAgICAgICAgbGlzdGVuZXIucG9pbnQocG9pbnQxWzBdLCBw
b2ludDFbMV0pOwotICAgICAgICAgIH0KLSAgICAgICAgICBwb2ludDAgPSBwb2ludDEsIHYwID0g
diwgYzAgPSBjOwotICAgICAgICB9LAotICAgICAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICBpZiAodjApIGxpc3RlbmVyLmxpbmVFbmQoKTsKLSAgICAgICAgICBwb2ludDAgPSBu
dWxsOwotICAgICAgICB9LAotICAgICAgICBjbGVhbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
cmV0dXJuIGNsZWFuIHwgKHYwMCAmJiB2MCkgPDwgMTsKLSAgICAgICAgfQotICAgICAgfTsKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gaW50ZXJzZWN0KGEsIGIsIHR3bykgewotICAgICAgdmFyIHBhID0g
ZDNfZ2VvX2NhcnRlc2lhbihhKSwgcGIgPSBkM19nZW9fY2FydGVzaWFuKGIpOwotICAgICAgdmFy
IG4xID0gWyAxLCAwLCAwIF0sIG4yID0gZDNfZ2VvX2NhcnRlc2lhbkNyb3NzKHBhLCBwYiksIG4y
bjIgPSBkM19nZW9fY2FydGVzaWFuRG90KG4yLCBuMiksIG4xbjIgPSBuMlswXSwgZGV0ZXJtaW5h
bnQgPSBuMm4yIC0gbjFuMiAqIG4xbjI7Ci0gICAgICBpZiAoIWRldGVybWluYW50KSByZXR1cm4g
IXR3byAmJiBhOwotICAgICAgdmFyIGMxID0gY3IgKiBuMm4yIC8gZGV0ZXJtaW5hbnQsIGMyID0g
LWNyICogbjFuMiAvIGRldGVybWluYW50LCBuMXhuMiA9IGQzX2dlb19jYXJ0ZXNpYW5Dcm9zcyhu
MSwgbjIpLCBBID0gZDNfZ2VvX2NhcnRlc2lhblNjYWxlKG4xLCBjMSksIEIgPSBkM19nZW9fY2Fy
dGVzaWFuU2NhbGUobjIsIGMyKTsKLSAgICAgIGQzX2dlb19jYXJ0ZXNpYW5BZGQoQSwgQik7Ci0g
ICAgICB2YXIgdSA9IG4xeG4yLCB3ID0gZDNfZ2VvX2NhcnRlc2lhbkRvdChBLCB1KSwgdXUgPSBk
M19nZW9fY2FydGVzaWFuRG90KHUsIHUpLCB0MiA9IHcgKiB3IC0gdXUgKiAoZDNfZ2VvX2NhcnRl
c2lhbkRvdChBLCBBKSAtIDEpOwotICAgICAgaWYgKHQyIDwgMCkgcmV0dXJuOwotICAgICAgdmFy
IHQgPSBNYXRoLnNxcnQodDIpLCBxID0gZDNfZ2VvX2NhcnRlc2lhblNjYWxlKHUsICgtdyAtIHQp
IC8gdXUpOwotICAgICAgZDNfZ2VvX2NhcnRlc2lhbkFkZChxLCBBKTsKLSAgICAgIHEgPSBkM19n
ZW9fc3BoZXJpY2FsKHEpOwotICAgICAgaWYgKCF0d28pIHJldHVybiBxOwotICAgICAgdmFyIM67
MCA9IGFbMF0sIM67MSA9IGJbMF0sIM+GMCA9IGFbMV0sIM+GMSA9IGJbMV0sIHo7Ci0gICAgICBp
ZiAozrsxIDwgzrswKSB6ID0gzrswLCDOuzAgPSDOuzEsIM67MSA9IHo7Ci0gICAgICB2YXIgzrTO
uyA9IM67MSAtIM67MCwgcG9sYXIgPSBhYnMozrTOuyAtIM+AKSA8IM61LCBtZXJpZGlhbiA9IHBv
bGFyIHx8IM60zrsgPCDOtTsKLSAgICAgIGlmICghcG9sYXIgJiYgz4YxIDwgz4YwKSB6ID0gz4Yw
LCDPhjAgPSDPhjEsIM+GMSA9IHo7Ci0gICAgICBpZiAobWVyaWRpYW4gPyBwb2xhciA/IM+GMCAr
IM+GMSA+IDAgXiBxWzFdIDwgKGFicyhxWzBdIC0gzrswKSA8IM61ID8gz4YwIDogz4YxKSA6IM+G
MCA8PSBxWzFdICYmIHFbMV0gPD0gz4YxIDogzrTOuyA+IM+AIF4gKM67MCA8PSBxWzBdICYmIHFb
MF0gPD0gzrsxKSkgewotICAgICAgICB2YXIgcTEgPSBkM19nZW9fY2FydGVzaWFuU2NhbGUodSwg
KC13ICsgdCkgLyB1dSk7Ci0gICAgICAgIGQzX2dlb19jYXJ0ZXNpYW5BZGQocTEsIEEpOwotICAg
ICAgICByZXR1cm4gWyBxLCBkM19nZW9fc3BoZXJpY2FsKHExKSBdOwotICAgICAgfQotICAgIH0K
LSAgICBmdW5jdGlvbiBjb2RlKM67LCDPhikgewotICAgICAgdmFyIHIgPSBzbWFsbFJhZGl1cyA/
IHJhZGl1cyA6IM+AIC0gcmFkaXVzLCBjb2RlID0gMDsKLSAgICAgIGlmICjOuyA8IC1yKSBjb2Rl
IHw9IDE7IGVsc2UgaWYgKM67ID4gcikgY29kZSB8PSAyOwotICAgICAgaWYgKM+GIDwgLXIpIGNv
ZGUgfD0gNDsgZWxzZSBpZiAoz4YgPiByKSBjb2RlIHw9IDg7Ci0gICAgICByZXR1cm4gY29kZTsK
LSAgICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV9jbGlwTGluZSh4MCwgeTAsIHgxLCB5MSkg
ewotICAgIHJldHVybiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgYSA9IGxpbmUuYSwgYiA9
IGxpbmUuYiwgYXggPSBhLngsIGF5ID0gYS55LCBieCA9IGIueCwgYnkgPSBiLnksIHQwID0gMCwg
dDEgPSAxLCBkeCA9IGJ4IC0gYXgsIGR5ID0gYnkgLSBheSwgcjsKLSAgICAgIHIgPSB4MCAtIGF4
OwotICAgICAgaWYgKCFkeCAmJiByID4gMCkgcmV0dXJuOwotICAgICAgciAvPSBkeDsKLSAgICAg
IGlmIChkeCA8IDApIHsKLSAgICAgICAgaWYgKHIgPCB0MCkgcmV0dXJuOwotICAgICAgICBpZiAo
ciA8IHQxKSB0MSA9IHI7Ci0gICAgICB9IGVsc2UgaWYgKGR4ID4gMCkgewotICAgICAgICBpZiAo
ciA+IHQxKSByZXR1cm47Ci0gICAgICAgIGlmIChyID4gdDApIHQwID0gcjsKLSAgICAgIH0KLSAg
ICAgIHIgPSB4MSAtIGF4OwotICAgICAgaWYgKCFkeCAmJiByIDwgMCkgcmV0dXJuOwotICAgICAg
ciAvPSBkeDsKLSAgICAgIGlmIChkeCA8IDApIHsKLSAgICAgICAgaWYgKHIgPiB0MSkgcmV0dXJu
OwotICAgICAgICBpZiAociA+IHQwKSB0MCA9IHI7Ci0gICAgICB9IGVsc2UgaWYgKGR4ID4gMCkg
ewotICAgICAgICBpZiAociA8IHQwKSByZXR1cm47Ci0gICAgICAgIGlmIChyIDwgdDEpIHQxID0g
cjsKLSAgICAgIH0KLSAgICAgIHIgPSB5MCAtIGF5OwotICAgICAgaWYgKCFkeSAmJiByID4gMCkg
cmV0dXJuOwotICAgICAgciAvPSBkeTsKLSAgICAgIGlmIChkeSA8IDApIHsKLSAgICAgICAgaWYg
KHIgPCB0MCkgcmV0dXJuOwotICAgICAgICBpZiAociA8IHQxKSB0MSA9IHI7Ci0gICAgICB9IGVs
c2UgaWYgKGR5ID4gMCkgewotICAgICAgICBpZiAociA+IHQxKSByZXR1cm47Ci0gICAgICAgIGlm
IChyID4gdDApIHQwID0gcjsKLSAgICAgIH0KLSAgICAgIHIgPSB5MSAtIGF5OwotICAgICAgaWYg
KCFkeSAmJiByIDwgMCkgcmV0dXJuOwotICAgICAgciAvPSBkeTsKLSAgICAgIGlmIChkeSA8IDAp
IHsKLSAgICAgICAgaWYgKHIgPiB0MSkgcmV0dXJuOwotICAgICAgICBpZiAociA+IHQwKSB0MCA9
IHI7Ci0gICAgICB9IGVsc2UgaWYgKGR5ID4gMCkgewotICAgICAgICBpZiAociA8IHQwKSByZXR1
cm47Ci0gICAgICAgIGlmIChyIDwgdDEpIHQxID0gcjsKLSAgICAgIH0KLSAgICAgIGlmICh0MCA+
IDApIGxpbmUuYSA9IHsKLSAgICAgICAgeDogYXggKyB0MCAqIGR4LAotICAgICAgICB5OiBheSAr
IHQwICogZHkKLSAgICAgIH07Ci0gICAgICBpZiAodDEgPCAxKSBsaW5lLmIgPSB7Ci0gICAgICAg
IHg6IGF4ICsgdDEgKiBkeCwKLSAgICAgICAgeTogYXkgKyB0MSAqIGR5Ci0gICAgICB9OwotICAg
ICAgcmV0dXJuIGxpbmU7Ci0gICAgfTsKLSAgfQotICB2YXIgZDNfZ2VvX2NsaXBFeHRlbnRNQVgg
PSAxZTk7Ci0gIGQzLmdlby5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHgwLCB5
MCwgeDEsIHkxLCBzdHJlYW0sIGNsaXAsIGNsaXBFeHRlbnQgPSB7Ci0gICAgICBzdHJlYW06IGZ1
bmN0aW9uKG91dHB1dCkgewotICAgICAgICBpZiAoc3RyZWFtKSBzdHJlYW0udmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgc3RyZWFtID0gY2xpcChvdXRwdXQpOwotICAgICAgICBzdHJlYW0udmFsaWQg
PSB0cnVlOwotICAgICAgICByZXR1cm4gc3RyZWFtOwotICAgICAgfSwKLSAgICAgIGV4dGVudDog
ZnVuY3Rpb24oXykgewotICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbIFsg
eDAsIHkwIF0sIFsgeDEsIHkxIF0gXTsKLSAgICAgICAgY2xpcCA9IGQzX2dlb19jbGlwRXh0ZW50
KHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1b
MV0pOwotICAgICAgICBpZiAoc3RyZWFtKSBzdHJlYW0udmFsaWQgPSBmYWxzZSwgc3RyZWFtID0g
bnVsbDsKLSAgICAgICAgcmV0dXJuIGNsaXBFeHRlbnQ7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBy
ZXR1cm4gY2xpcEV4dGVudC5leHRlbnQoWyBbIDAsIDAgXSwgWyA5NjAsIDUwMCBdIF0pOwotICB9
OwotICBmdW5jdGlvbiBkM19nZW9fY2xpcEV4dGVudCh4MCwgeTAsIHgxLCB5MSkgewotICAgIHJl
dHVybiBmdW5jdGlvbihsaXN0ZW5lcikgewotICAgICAgdmFyIGxpc3RlbmVyXyA9IGxpc3RlbmVy
LCBidWZmZXJMaXN0ZW5lciA9IGQzX2dlb19jbGlwQnVmZmVyTGlzdGVuZXIoKSwgY2xpcExpbmUg
PSBkM19nZW9tX2NsaXBMaW5lKHgwLCB5MCwgeDEsIHkxKSwgc2VnbWVudHMsIHBvbHlnb24sIHJp
bmc7Ci0gICAgICB2YXIgY2xpcCA9IHsKLSAgICAgICAgcG9pbnQ6IHBvaW50LAotICAgICAgICBs
aW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgbGluZUVuZDogbGluZUVuZCwKLSAgICAgICAg
cG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBsaXN0ZW5lciA9IGJ1ZmZlckxp
c3RlbmVyOwotICAgICAgICAgIHNlZ21lbnRzID0gW107Ci0gICAgICAgICAgcG9seWdvbiA9IFtd
OwotICAgICAgICAgIGNsZWFuID0gdHJ1ZTsKLSAgICAgICAgfSwKLSAgICAgICAgcG9seWdvbkVu
ZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lcl87Ci0gICAgICAg
ICAgc2VnbWVudHMgPSBkMy5tZXJnZShzZWdtZW50cyk7Ci0gICAgICAgICAgdmFyIGNsaXBTdGFy
dEluc2lkZSA9IGluc2lkZVBvbHlnb24oWyB4MCwgeTEgXSksIGluc2lkZSA9IGNsZWFuICYmIGNs
aXBTdGFydEluc2lkZSwgdmlzaWJsZSA9IHNlZ21lbnRzLmxlbmd0aDsKLSAgICAgICAgICBpZiAo
aW5zaWRlIHx8IHZpc2libGUpIHsKLSAgICAgICAgICAgIGxpc3RlbmVyLnBvbHlnb25TdGFydCgp
OwotICAgICAgICAgICAgaWYgKGluc2lkZSkgewotICAgICAgICAgICAgICBsaXN0ZW5lci5saW5l
U3RhcnQoKTsKLSAgICAgICAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgbGlzdGVu
ZXIpOwotICAgICAgICAgICAgICBsaXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAodmlzaWJsZSkgewotICAgICAgICAgICAgICBkM19nZW9fY2xpcFBvbHln
b24oc2VnbWVudHMsIGNvbXBhcmUsIGNsaXBTdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIGxpc3Rl
bmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpc3RlbmVyLnBvbHlnb25FbmQoKTsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gcmluZyA9IG51bGw7
Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBmdW5jdGlvbiBpbnNpZGVQb2x5Z29uKHApIHsK
LSAgICAgICAgdmFyIHduID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoLCB5ID0gcFsxXTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICBmb3IgKHZhciBqID0g
MSwgdiA9IHBvbHlnb25baV0sIG0gPSB2Lmxlbmd0aCwgYSA9IHZbMF0sIGI7IGogPCBtOyArK2op
IHsKLSAgICAgICAgICAgIGIgPSB2W2pdOwotICAgICAgICAgICAgaWYgKGFbMV0gPD0geSkgewot
ICAgICAgICAgICAgICBpZiAoYlsxXSA+IHkgJiYgZDNfY3Jvc3MyZChhLCBiLCBwKSA+IDApICsr
d247Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBpZiAoYlsxXSA8PSB5ICYm
IGQzX2Nyb3NzMmQoYSwgYiwgcCkgPCAwKSAtLXduOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYSA9IGI7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3biAhPT0g
MDsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIGludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rp
b24sIGxpc3RlbmVyKSB7Ci0gICAgICAgIHZhciBhID0gMCwgYTEgPSAwOwotICAgICAgICBpZiAo
ZnJvbSA9PSBudWxsIHx8IChhID0gY29ybmVyKGZyb20sIGRpcmVjdGlvbikpICE9PSAoYTEgPSBj
b3JuZXIodG8sIGRpcmVjdGlvbikpIHx8IGNvbXBhcmVQb2ludHMoZnJvbSwgdG8pIDwgMCBeIGRp
cmVjdGlvbiA+IDApIHsKLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBsaXN0ZW5lci5wb2lu
dChhID09PSAwIHx8IGEgPT09IDMgPyB4MCA6IHgxLCBhID4gMSA/IHkxIDogeTApOwotICAgICAg
ICAgIH0gd2hpbGUgKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbGlzdGVuZXIucG9pbnQodG9bMF0sIHRvWzFdKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgZnVuY3Rpb24gcG9pbnRWaXNpYmxlKHgsIHkpIHsKLSAg
ICAgICAgcmV0dXJuIHgwIDw9IHggJiYgeCA8PSB4MSAmJiB5MCA8PSB5ICYmIHkgPD0geTE7Ci0g
ICAgICB9Ci0gICAgICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7Ci0gICAgICAgIGlmIChwb2ludFZp
c2libGUoeCwgeSkpIGxpc3RlbmVyLnBvaW50KHgsIHkpOwotICAgICAgfQotICAgICAgdmFyIHhf
XywgeV9fLCB2X18sIHhfLCB5Xywgdl8sIGZpcnN0LCBjbGVhbjsKLSAgICAgIGZ1bmN0aW9uIGxp
bmVTdGFydCgpIHsKLSAgICAgICAgY2xpcC5wb2ludCA9IGxpbmVQb2ludDsKLSAgICAgICAgaWYg
KHBvbHlnb24pIHBvbHlnb24ucHVzaChyaW5nID0gW10pOwotICAgICAgICBmaXJzdCA9IHRydWU7
Ci0gICAgICAgIHZfID0gZmFsc2U7Ci0gICAgICAgIHhfID0geV8gPSBOYU47Ci0gICAgICB9Ci0g
ICAgICBmdW5jdGlvbiBsaW5lRW5kKCkgewotICAgICAgICBpZiAoc2VnbWVudHMpIHsKLSAgICAg
ICAgICBsaW5lUG9pbnQoeF9fLCB5X18pOwotICAgICAgICAgIGlmICh2X18gJiYgdl8pIGJ1ZmZl
ckxpc3RlbmVyLnJlam9pbigpOwotICAgICAgICAgIHNlZ21lbnRzLnB1c2goYnVmZmVyTGlzdGVu
ZXIuYnVmZmVyKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNsaXAucG9pbnQgPSBwb2ludDsKLSAg
ICAgICAgaWYgKHZfKSBsaXN0ZW5lci5saW5lRW5kKCk7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlv
biBsaW5lUG9pbnQoeCwgeSkgewotICAgICAgICB4ID0gTWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0
ZW50TUFYLCBNYXRoLm1pbihkM19nZW9fY2xpcEV4dGVudE1BWCwgeCkpOwotICAgICAgICB5ID0g
TWF0aC5tYXgoLWQzX2dlb19jbGlwRXh0ZW50TUFYLCBNYXRoLm1pbihkM19nZW9fY2xpcEV4dGVu
dE1BWCwgeSkpOwotICAgICAgICB2YXIgdiA9IHBvaW50VmlzaWJsZSh4LCB5KTsKLSAgICAgICAg
aWYgKHBvbHlnb24pIHJpbmcucHVzaChbIHgsIHkgXSk7Ci0gICAgICAgIGlmIChmaXJzdCkgewot
ICAgICAgICAgIHhfXyA9IHgsIHlfXyA9IHksIHZfXyA9IHY7Ci0gICAgICAgICAgZmlyc3QgPSBm
YWxzZTsKLSAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgbGlzdGVuZXIubGluZVN0YXJ0
KCk7Ci0gICAgICAgICAgICBsaXN0ZW5lci5wb2ludCh4LCB5KTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHYgJiYgdl8pIGxpc3RlbmVyLnBvaW50KHgsIHkp
OyBlbHNlIHsKLSAgICAgICAgICAgIHZhciBsID0gewotICAgICAgICAgICAgICBhOiB7Ci0gICAg
ICAgICAgICAgICAgeDogeF8sCi0gICAgICAgICAgICAgICAgeTogeV8KLSAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgYjogewotICAgICAgICAgICAgICAgIHg6IHgsCi0gICAgICAgICAg
ICAgICAgeTogeQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
aWYgKGNsaXBMaW5lKGwpKSB7Ci0gICAgICAgICAgICAgIGlmICghdl8pIHsKLSAgICAgICAgICAg
ICAgICBsaXN0ZW5lci5saW5lU3RhcnQoKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lci5wb2lu
dChsLmEueCwgbC5hLnkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGxpc3RlbmVy
LnBvaW50KGwuYi54LCBsLmIueSk7Ci0gICAgICAgICAgICAgIGlmICghdikgbGlzdGVuZXIubGlu
ZUVuZCgpOwotICAgICAgICAgICAgICBjbGVhbiA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
IGlmICh2KSB7Ci0gICAgICAgICAgICAgIGxpc3RlbmVyLmxpbmVTdGFydCgpOwotICAgICAgICAg
ICAgICBsaXN0ZW5lci5wb2ludCh4LCB5KTsKLSAgICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgeF8gPSB4LCB5
XyA9IHksIHZfID0gdjsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjbGlwOwotICAgIH07Ci0gICAg
ZnVuY3Rpb24gY29ybmVyKHAsIGRpcmVjdGlvbikgewotICAgICAgcmV0dXJuIGFicyhwWzBdIC0g
eDApIDwgzrUgPyBkaXJlY3Rpb24gPiAwID8gMCA6IDMgOiBhYnMocFswXSAtIHgxKSA8IM61ID8g
ZGlyZWN0aW9uID4gMCA/IDIgOiAxIDogYWJzKHBbMV0gLSB5MCkgPCDOtSA/IGRpcmVjdGlvbiA+
IDAgPyAxIDogMCA6IGRpcmVjdGlvbiA+IDAgPyAzIDogMjsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
Y29tcGFyZShhLCBiKSB7Ci0gICAgICByZXR1cm4gY29tcGFyZVBvaW50cyhhLngsIGIueCk7Ci0g
ICAgfQotICAgIGZ1bmN0aW9uIGNvbXBhcmVQb2ludHMoYSwgYikgewotICAgICAgdmFyIGNhID0g
Y29ybmVyKGEsIDEpLCBjYiA9IGNvcm5lcihiLCAxKTsKLSAgICAgIHJldHVybiBjYSAhPT0gY2Ig
PyBjYSAtIGNiIDogY2EgPT09IDAgPyBiWzFdIC0gYVsxXSA6IGNhID09PSAxID8gYVswXSAtIGJb
MF0gOiBjYSA9PT0gMiA/IGFbMV0gLSBiWzFdIDogYlswXSAtIGFbMF07Ci0gICAgfQotICB9Ci0g
IGZ1bmN0aW9uIGQzX2dlb19jb21wb3NlKGEsIGIpIHsKLSAgICBmdW5jdGlvbiBjb21wb3NlKHgs
IHkpIHsKLSAgICAgIHJldHVybiB4ID0gYSh4LCB5KSwgYih4WzBdLCB4WzFdKTsKLSAgICB9Ci0g
ICAgaWYgKGEuaW52ZXJ0ICYmIGIuaW52ZXJ0KSBjb21wb3NlLmludmVydCA9IGZ1bmN0aW9uKHgs
IHkpIHsKLSAgICAgIHJldHVybiB4ID0gYi5pbnZlcnQoeCwgeSksIHggJiYgYS5pbnZlcnQoeFsw
XSwgeFsxXSk7Ci0gICAgfTsKLSAgICByZXR1cm4gY29tcG9zZTsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9fY29uaWMocHJvamVjdEF0KSB7Ci0gICAgdmFyIM+GMCA9IDAsIM+GMSA9IM+AIC8gMywg
bSA9IGQzX2dlb19wcm9qZWN0aW9uTXV0YXRvcihwcm9qZWN0QXQpLCBwID0gbSjPhjAsIM+GMSk7
Ci0gICAgcC5wYXJhbGxlbHMgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBbIM+GMCAvIM+AICogMTgwLCDPhjEgLyDPgCAqIDE4MCBdOwotICAgICAg
cmV0dXJuIG0oz4YwID0gX1swXSAqIM+AIC8gMTgwLCDPhjEgPSBfWzFdICogz4AgLyAxODApOwot
ICAgIH07Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX2NvbmljRXF1YWxB
cmVhKM+GMCwgz4YxKSB7Ci0gICAgdmFyIHNpbs+GMCA9IE1hdGguc2luKM+GMCksIG4gPSAoc2lu
z4YwICsgTWF0aC5zaW4oz4YxKSkgLyAyLCBDID0gMSArIHNpbs+GMCAqICgyICogbiAtIHNpbs+G
MCksIM+BMCA9IE1hdGguc3FydChDKSAvIG47Ci0gICAgZnVuY3Rpb24gZm9yd2FyZCjOuywgz4Yp
IHsKLSAgICAgIHZhciDPgSA9IE1hdGguc3FydChDIC0gMiAqIG4gKiBNYXRoLnNpbijPhikpIC8g
bjsKLSAgICAgIHJldHVybiBbIM+BICogTWF0aC5zaW4ozrsgKj0gbiksIM+BMCAtIM+BICogTWF0
aC5jb3MozrspIF07Ci0gICAgfQotICAgIGZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkg
ewotICAgICAgdmFyIM+BMF95ID0gz4EwIC0geTsKLSAgICAgIHJldHVybiBbIE1hdGguYXRhbjIo
eCwgz4EwX3kpIC8gbiwgZDNfYXNpbigoQyAtICh4ICogeCArIM+BMF95ICogz4EwX3kpICogbiAq
IG4pIC8gKDIgKiBuKSkgXTsKLSAgICB9OwotICAgIHJldHVybiBmb3J3YXJkOwotICB9Ci0gIChk
My5nZW8uY29uaWNFcXVhbEFyZWEgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfZ2VvX2Nv
bmljKGQzX2dlb19jb25pY0VxdWFsQXJlYSk7Ci0gIH0pLnJhdyA9IGQzX2dlb19jb25pY0VxdWFs
QXJlYTsKLSAgZDMuZ2VvLmFsYmVycyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkMy5nZW8u
Y29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWyA5NiwgMCBdKS5jZW50ZXIoWyAtLjYsIDM4LjcgXSku
cGFyYWxsZWxzKFsgMjkuNSwgNDUuNSBdKS5zY2FsZSgxMDcwKTsKLSAgfTsKLSAgZDMuZ2VvLmFs
YmVyc1VzYSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBsb3dlcjQ4ID0gZDMuZ2VvLmFsYmVycygp
OwotICAgIHZhciBhbGFza2EgPSBkMy5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWyAxNTQs
IDAgXSkuY2VudGVyKFsgLTIsIDU4LjUgXSkucGFyYWxsZWxzKFsgNTUsIDY1IF0pOwotICAgIHZh
ciBoYXdhaWkgPSBkMy5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWyAxNTcsIDAgXSkuY2Vu
dGVyKFsgLTMsIDE5LjkgXSkucGFyYWxsZWxzKFsgOCwgMTggXSk7Ci0gICAgdmFyIHBvaW50LCBw
b2ludFN0cmVhbSA9IHsKLSAgICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7Ci0gICAgICAgIHBv
aW50ID0gWyB4LCB5IF07Ci0gICAgICB9Ci0gICAgfSwgbG93ZXI0OFBvaW50LCBhbGFza2FQb2lu
dCwgaGF3YWlpUG9pbnQ7Ci0gICAgZnVuY3Rpb24gYWxiZXJzVXNhKGNvb3JkaW5hdGVzKSB7Ci0g
ICAgICB2YXIgeCA9IGNvb3JkaW5hdGVzWzBdLCB5ID0gY29vcmRpbmF0ZXNbMV07Ci0gICAgICBw
b2ludCA9IG51bGw7Ci0gICAgICAobG93ZXI0OFBvaW50KHgsIHkpLCBwb2ludCkgfHwgKGFsYXNr
YVBvaW50KHgsIHkpLCBwb2ludCkgfHwgaGF3YWlpUG9pbnQoeCwgeSk7Ci0gICAgICByZXR1cm4g
cG9pbnQ7Ci0gICAgfQotICAgIGFsYmVyc1VzYS5pbnZlcnQgPSBmdW5jdGlvbihjb29yZGluYXRl
cykgewotICAgICAgdmFyIGsgPSBsb3dlcjQ4LnNjYWxlKCksIHQgPSBsb3dlcjQ4LnRyYW5zbGF0
ZSgpLCB4ID0gKGNvb3JkaW5hdGVzWzBdIC0gdFswXSkgLyBrLCB5ID0gKGNvb3JkaW5hdGVzWzFd
IC0gdFsxXSkgLyBrOwotICAgICAgcmV0dXJuICh5ID49IC4xMiAmJiB5IDwgLjIzNCAmJiB4ID49
IC0uNDI1ICYmIHggPCAtLjIxNCA/IGFsYXNrYSA6IHkgPj0gLjE2NiAmJiB5IDwgLjIzNCAmJiB4
ID49IC0uMjE0ICYmIHggPCAtLjExNSA/IGhhd2FpaSA6IGxvd2VyNDgpLmludmVydChjb29yZGlu
YXRlcyk7Ci0gICAgfTsKLSAgICBhbGJlcnNVc2Euc3RyZWFtID0gZnVuY3Rpb24oc3RyZWFtKSB7
Ci0gICAgICB2YXIgbG93ZXI0OFN0cmVhbSA9IGxvd2VyNDguc3RyZWFtKHN0cmVhbSksIGFsYXNr
YVN0cmVhbSA9IGFsYXNrYS5zdHJlYW0oc3RyZWFtKSwgaGF3YWlpU3RyZWFtID0gaGF3YWlpLnN0
cmVhbShzdHJlYW0pOwotICAgICAgcmV0dXJuIHsKLSAgICAgICAgcG9pbnQ6IGZ1bmN0aW9uKHgs
IHkpIHsKLSAgICAgICAgICBsb3dlcjQ4U3RyZWFtLnBvaW50KHgsIHkpOwotICAgICAgICAgIGFs
YXNrYVN0cmVhbS5wb2ludCh4LCB5KTsKLSAgICAgICAgICBoYXdhaWlTdHJlYW0ucG9pbnQoeCwg
eSk7Ci0gICAgICAgIH0sCi0gICAgICAgIHNwaGVyZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
bG93ZXI0OFN0cmVhbS5zcGhlcmUoKTsKLSAgICAgICAgICBhbGFza2FTdHJlYW0uc3BoZXJlKCk7
Ci0gICAgICAgICAgaGF3YWlpU3RyZWFtLnNwaGVyZSgpOwotICAgICAgICB9LAotICAgICAgICBs
aW5lU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGxvd2VyNDhTdHJlYW0ubGluZVN0YXJ0
KCk7Ci0gICAgICAgICAgYWxhc2thU3RyZWFtLmxpbmVTdGFydCgpOwotICAgICAgICAgIGhhd2Fp
aVN0cmVhbS5saW5lU3RhcnQoKTsKLSAgICAgICAgfSwKLSAgICAgICAgbGluZUVuZDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgbG93ZXI0OFN0cmVhbS5saW5lRW5kKCk7Ci0gICAgICAgICAgYWxh
c2thU3RyZWFtLmxpbmVFbmQoKTsKLSAgICAgICAgICBoYXdhaWlTdHJlYW0ubGluZUVuZCgpOwot
ICAgICAgICB9LAotICAgICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
IGxvd2VyNDhTdHJlYW0ucG9seWdvblN0YXJ0KCk7Ci0gICAgICAgICAgYWxhc2thU3RyZWFtLnBv
bHlnb25TdGFydCgpOwotICAgICAgICAgIGhhd2FpaVN0cmVhbS5wb2x5Z29uU3RhcnQoKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgbG93
ZXI0OFN0cmVhbS5wb2x5Z29uRW5kKCk7Ci0gICAgICAgICAgYWxhc2thU3RyZWFtLnBvbHlnb25F
bmQoKTsKLSAgICAgICAgICBoYXdhaWlTdHJlYW0ucG9seWdvbkVuZCgpOwotICAgICAgICB9Ci0g
ICAgICB9OwotICAgIH07Ci0gICAgYWxiZXJzVXNhLnByZWNpc2lvbiA9IGZ1bmN0aW9uKF8pIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDgucHJlY2lzaW9uKCk7
Ci0gICAgICBsb3dlcjQ4LnByZWNpc2lvbihfKTsKLSAgICAgIGFsYXNrYS5wcmVjaXNpb24oXyk7
Ci0gICAgICBoYXdhaWkucHJlY2lzaW9uKF8pOwotICAgICAgcmV0dXJuIGFsYmVyc1VzYTsKLSAg
ICB9OwotICAgIGFsYmVyc1VzYS5zY2FsZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDguc2NhbGUoKTsKLSAgICAgIGxvd2VyNDguc2Nh
bGUoXyk7Ci0gICAgICBhbGFza2Euc2NhbGUoXyAqIC4zNSk7Ci0gICAgICBoYXdhaWkuc2NhbGUo
Xyk7Ci0gICAgICByZXR1cm4gYWxiZXJzVXNhLnRyYW5zbGF0ZShsb3dlcjQ4LnRyYW5zbGF0ZSgp
KTsKLSAgICB9OwotICAgIGFsYmVyc1VzYS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnRyYW5zbGF0ZSgpOwotICAg
ICAgdmFyIGsgPSBsb3dlcjQ4LnNjYWxlKCksIHggPSArX1swXSwgeSA9ICtfWzFdOwotICAgICAg
bG93ZXI0OFBvaW50ID0gbG93ZXI0OC50cmFuc2xhdGUoXykuY2xpcEV4dGVudChbIFsgeCAtIC40
NTUgKiBrLCB5IC0gLjIzOCAqIGsgXSwgWyB4ICsgLjQ1NSAqIGssIHkgKyAuMjM4ICogayBdIF0p
LnN0cmVhbShwb2ludFN0cmVhbSkucG9pbnQ7Ci0gICAgICBhbGFza2FQb2ludCA9IGFsYXNrYS50
cmFuc2xhdGUoWyB4IC0gLjMwNyAqIGssIHkgKyAuMjAxICogayBdKS5jbGlwRXh0ZW50KFsgWyB4
IC0gLjQyNSAqIGsgKyDOtSwgeSArIC4xMiAqIGsgKyDOtSBdLCBbIHggLSAuMjE0ICogayAtIM61
LCB5ICsgLjIzNCAqIGsgLSDOtSBdIF0pLnN0cmVhbShwb2ludFN0cmVhbSkucG9pbnQ7Ci0gICAg
ICBoYXdhaWlQb2ludCA9IGhhd2FpaS50cmFuc2xhdGUoWyB4IC0gLjIwNSAqIGssIHkgKyAuMjEy
ICogayBdKS5jbGlwRXh0ZW50KFsgWyB4IC0gLjIxNCAqIGsgKyDOtSwgeSArIC4xNjYgKiBrICsg
zrUgXSwgWyB4IC0gLjExNSAqIGsgLSDOtSwgeSArIC4yMzQgKiBrIC0gzrUgXSBdKS5zdHJlYW0o
cG9pbnRTdHJlYW0pLnBvaW50OwotICAgICAgcmV0dXJuIGFsYmVyc1VzYTsKLSAgICB9OwotICAg
IHJldHVybiBhbGJlcnNVc2Euc2NhbGUoMTA3MCk7Ci0gIH07Ci0gIHZhciBkM19nZW9fcGF0aEFy
ZWFTdW0sIGQzX2dlb19wYXRoQXJlYVBvbHlnb24sIGQzX2dlb19wYXRoQXJlYSA9IHsKLSAgICBw
b2ludDogZDNfbm9vcCwKLSAgICBsaW5lU3RhcnQ6IGQzX25vb3AsCi0gICAgbGluZUVuZDogZDNf
bm9vcCwKLSAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgZDNfZ2VvX3BhdGhB
cmVhUG9seWdvbiA9IDA7Ci0gICAgICBkM19nZW9fcGF0aEFyZWEubGluZVN0YXJ0ID0gZDNfZ2Vv
X3BhdGhBcmVhUmluZ1N0YXJ0OwotICAgIH0sCi0gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7
Ci0gICAgICBkM19nZW9fcGF0aEFyZWEubGluZVN0YXJ0ID0gZDNfZ2VvX3BhdGhBcmVhLmxpbmVF
bmQgPSBkM19nZW9fcGF0aEFyZWEucG9pbnQgPSBkM19ub29wOwotICAgICAgZDNfZ2VvX3BhdGhB
cmVhU3VtICs9IGFicyhkM19nZW9fcGF0aEFyZWFQb2x5Z29uIC8gMik7Ci0gICAgfQotICB9Owot
ICBmdW5jdGlvbiBkM19nZW9fcGF0aEFyZWFSaW5nU3RhcnQoKSB7Ci0gICAgdmFyIHgwMCwgeTAw
LCB4MCwgeTA7Ci0gICAgZDNfZ2VvX3BhdGhBcmVhLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkgewot
ICAgICAgZDNfZ2VvX3BhdGhBcmVhLnBvaW50ID0gbmV4dFBvaW50OwotICAgICAgeDAwID0geDAg
PSB4LCB5MDAgPSB5MCA9IHk7Ci0gICAgfTsKLSAgICBmdW5jdGlvbiBuZXh0UG9pbnQoeCwgeSkg
ewotICAgICAgZDNfZ2VvX3BhdGhBcmVhUG9seWdvbiArPSB5MCAqIHggLSB4MCAqIHk7Ci0gICAg
ICB4MCA9IHgsIHkwID0geTsKLSAgICB9Ci0gICAgZDNfZ2VvX3BhdGhBcmVhLmxpbmVFbmQgPSBm
dW5jdGlvbigpIHsKLSAgICAgIG5leHRQb2ludCh4MDAsIHkwMCk7Ci0gICAgfTsKLSAgfQotICB2
YXIgZDNfZ2VvX3BhdGhCb3VuZHNYMCwgZDNfZ2VvX3BhdGhCb3VuZHNZMCwgZDNfZ2VvX3BhdGhC
b3VuZHNYMSwgZDNfZ2VvX3BhdGhCb3VuZHNZMTsKLSAgdmFyIGQzX2dlb19wYXRoQm91bmRzID0g
ewotICAgIHBvaW50OiBkM19nZW9fcGF0aEJvdW5kc1BvaW50LAotICAgIGxpbmVTdGFydDogZDNf
bm9vcCwKLSAgICBsaW5lRW5kOiBkM19ub29wLAotICAgIHBvbHlnb25TdGFydDogZDNfbm9vcCwK
LSAgICBwb2x5Z29uRW5kOiBkM19ub29wCi0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19wYXRoQm91
bmRzUG9pbnQoeCwgeSkgewotICAgIGlmICh4IDwgZDNfZ2VvX3BhdGhCb3VuZHNYMCkgZDNfZ2Vv
X3BhdGhCb3VuZHNYMCA9IHg7Ci0gICAgaWYgKHggPiBkM19nZW9fcGF0aEJvdW5kc1gxKSBkM19n
ZW9fcGF0aEJvdW5kc1gxID0geDsKLSAgICBpZiAoeSA8IGQzX2dlb19wYXRoQm91bmRzWTApIGQz
X2dlb19wYXRoQm91bmRzWTAgPSB5OwotICAgIGlmICh5ID4gZDNfZ2VvX3BhdGhCb3VuZHNZMSkg
ZDNfZ2VvX3BhdGhCb3VuZHNZMSA9IHk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3BhdGhCdWZm
ZXIoKSB7Ci0gICAgdmFyIHBvaW50Q2lyY2xlID0gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUoNC41
KSwgYnVmZmVyID0gW107Ci0gICAgdmFyIHN0cmVhbSA9IHsKLSAgICAgIHBvaW50OiBwb2ludCwK
LSAgICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHN0cmVhbS5wb2ludCA9IHBv
aW50TGluZVN0YXJ0OwotICAgICAgfSwKLSAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsCi0gICAgICBw
b2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJlYW0ubGluZUVuZCA9IGxpbmVF
bmRQb2x5Z29uOwotICAgICAgfSwKLSAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICBzdHJlYW0ubGluZUVuZCA9IGxpbmVFbmQ7Ci0gICAgICAgIHN0cmVhbS5wb2ludCA9IHBv
aW50OwotICAgICAgfSwKLSAgICAgIHBvaW50UmFkaXVzOiBmdW5jdGlvbihfKSB7Ci0gICAgICAg
IHBvaW50Q2lyY2xlID0gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUoXyk7Ci0gICAgICAgIHJldHVy
biBzdHJlYW07Ci0gICAgICB9LAotICAgICAgcmVzdWx0OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
aWYgKGJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVmZmVyLmpvaW4o
IiIpOwotICAgICAgICAgIGJ1ZmZlciA9IFtdOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotICAgIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHsKLSAg
ICAgIGJ1ZmZlci5wdXNoKCJNIiwgeCwgIiwiLCB5LCBwb2ludENpcmNsZSk7Ci0gICAgfQotICAg
IGZ1bmN0aW9uIHBvaW50TGluZVN0YXJ0KHgsIHkpIHsKLSAgICAgIGJ1ZmZlci5wdXNoKCJNIiwg
eCwgIiwiLCB5KTsKLSAgICAgIHN0cmVhbS5wb2ludCA9IHBvaW50TGluZTsKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gcG9pbnRMaW5lKHgsIHkpIHsKLSAgICAgIGJ1ZmZlci5wdXNoKCJMIiwgeCwgIiwi
LCB5KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gbGluZUVuZCgpIHsKLSAgICAgIHN0cmVhbS5wb2lu
dCA9IHBvaW50OwotICAgIH0KLSAgICBmdW5jdGlvbiBsaW5lRW5kUG9seWdvbigpIHsKLSAgICAg
IGJ1ZmZlci5wdXNoKCJaIik7Ci0gICAgfQotICAgIHJldHVybiBzdHJlYW07Ci0gIH0KLSAgZnVu
Y3Rpb24gZDNfZ2VvX3BhdGhCdWZmZXJDaXJjbGUocmFkaXVzKSB7Ci0gICAgcmV0dXJuICJtMCwi
ICsgcmFkaXVzICsgImEiICsgcmFkaXVzICsgIiwiICsgcmFkaXVzICsgIiAwIDEsMSAwLCIgKyAt
MiAqIHJhZGl1cyArICJhIiArIHJhZGl1cyArICIsIiArIHJhZGl1cyArICIgMCAxLDEgMCwiICsg
MiAqIHJhZGl1cyArICJ6IjsKLSAgfQotICB2YXIgZDNfZ2VvX3BhdGhDZW50cm9pZCA9IHsKLSAg
ICBwb2ludDogZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50LAotICAgIGxpbmVTdGFydDogZDNfZ2Vv
X3BhdGhDZW50cm9pZExpbmVTdGFydCwKLSAgICBsaW5lRW5kOiBkM19nZW9fcGF0aENlbnRyb2lk
TGluZUVuZCwKLSAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgZDNfZ2VvX3Bh
dGhDZW50cm9pZC5saW5lU3RhcnQgPSBkM19nZW9fcGF0aENlbnRyb2lkUmluZ1N0YXJ0OwotICAg
IH0sCi0gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICBkM19nZW9fcGF0aENlbnRy
b2lkLnBvaW50ID0gZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50OwotICAgICAgZDNfZ2VvX3BhdGhD
ZW50cm9pZC5saW5lU3RhcnQgPSBkM19nZW9fcGF0aENlbnRyb2lkTGluZVN0YXJ0OwotICAgICAg
ZDNfZ2VvX3BhdGhDZW50cm9pZC5saW5lRW5kID0gZDNfZ2VvX3BhdGhDZW50cm9pZExpbmVFbmQ7
Ci0gICAgfQotICB9OwotICBmdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeCwgeSkg
ewotICAgIGQzX2dlb19jZW50cm9pZFgwICs9IHg7Ci0gICAgZDNfZ2VvX2NlbnRyb2lkWTAgKz0g
eTsKLSAgICArK2QzX2dlb19jZW50cm9pZFowOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19wYXRo
Q2VudHJvaWRMaW5lU3RhcnQoKSB7Ci0gICAgdmFyIHgwLCB5MDsKLSAgICBkM19nZW9fcGF0aENl
bnRyb2lkLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkgewotICAgICAgZDNfZ2VvX3BhdGhDZW50cm9p
ZC5wb2ludCA9IG5leHRQb2ludDsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWRQb2ludCh4MCA9
IHgsIHkwID0geSk7Ci0gICAgfTsKLSAgICBmdW5jdGlvbiBuZXh0UG9pbnQoeCwgeSkgewotICAg
ICAgdmFyIGR4ID0geCAtIHgwLCBkeSA9IHkgLSB5MCwgeiA9IE1hdGguc3FydChkeCAqIGR4ICsg
ZHkgKiBkeSk7Ci0gICAgICBkM19nZW9fY2VudHJvaWRYMSArPSB6ICogKHgwICsgeCkgLyAyOwot
ICAgICAgZDNfZ2VvX2NlbnRyb2lkWTEgKz0geiAqICh5MCArIHkpIC8gMjsKLSAgICAgIGQzX2dl
b19jZW50cm9pZFoxICs9IHo7Ci0gICAgICBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeDAgPSB4
LCB5MCA9IHkpOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9fcGF0aENlbnRyb2lkTGlu
ZUVuZCgpIHsKLSAgICBkM19nZW9fcGF0aENlbnRyb2lkLnBvaW50ID0gZDNfZ2VvX3BhdGhDZW50
cm9pZFBvaW50OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19wYXRoQ2VudHJvaWRSaW5nU3RhcnQo
KSB7Ci0gICAgdmFyIHgwMCwgeTAwLCB4MCwgeTA7Ci0gICAgZDNfZ2VvX3BhdGhDZW50cm9pZC5w
b2ludCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIGQzX2dlb19wYXRoQ2VudHJvaWQucG9pbnQg
PSBuZXh0UG9pbnQ7Ci0gICAgICBkM19nZW9fcGF0aENlbnRyb2lkUG9pbnQoeDAwID0geDAgPSB4
LCB5MDAgPSB5MCA9IHkpOwotICAgIH07Ci0gICAgZnVuY3Rpb24gbmV4dFBvaW50KHgsIHkpIHsK
LSAgICAgIHZhciBkeCA9IHggLSB4MCwgZHkgPSB5IC0geTAsIHogPSBNYXRoLnNxcnQoZHggKiBk
eCArIGR5ICogZHkpOwotICAgICAgZDNfZ2VvX2NlbnRyb2lkWDEgKz0geiAqICh4MCArIHgpIC8g
MjsKLSAgICAgIGQzX2dlb19jZW50cm9pZFkxICs9IHogKiAoeTAgKyB5KSAvIDI7Ci0gICAgICBk
M19nZW9fY2VudHJvaWRaMSArPSB6OwotICAgICAgeiA9IHkwICogeCAtIHgwICogeTsKLSAgICAg
IGQzX2dlb19jZW50cm9pZFgyICs9IHogKiAoeDAgKyB4KTsKLSAgICAgIGQzX2dlb19jZW50cm9p
ZFkyICs9IHogKiAoeTAgKyB5KTsKLSAgICAgIGQzX2dlb19jZW50cm9pZFoyICs9IHogKiAzOwot
ICAgICAgZDNfZ2VvX3BhdGhDZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTsKLSAgICB9Ci0g
ICAgZDNfZ2VvX3BhdGhDZW50cm9pZC5saW5lRW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICBuZXh0
UG9pbnQoeDAwLCB5MDApOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3BhdGhDb250
ZXh0KGNvbnRleHQpIHsKLSAgICB2YXIgcG9pbnRSYWRpdXMgPSA0LjU7Ci0gICAgdmFyIHN0cmVh
bSA9IHsKLSAgICAgIHBvaW50OiBwb2ludCwKLSAgICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHN0cmVhbS5wb2ludCA9IHBvaW50TGluZVN0YXJ0OwotICAgICAgfSwKLSAgICAg
IGxpbmVFbmQ6IGxpbmVFbmQsCi0gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICBzdHJlYW0ubGluZUVuZCA9IGxpbmVFbmRQb2x5Z29uOwotICAgICAgfSwKLSAgICAgIHBv
bHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJlYW0ubGluZUVuZCA9IGxpbmVFbmQ7
Ci0gICAgICAgIHN0cmVhbS5wb2ludCA9IHBvaW50OwotICAgICAgfSwKLSAgICAgIHBvaW50UmFk
aXVzOiBmdW5jdGlvbihfKSB7Ci0gICAgICAgIHBvaW50UmFkaXVzID0gXzsKLSAgICAgICAgcmV0
dXJuIHN0cmVhbTsKLSAgICAgIH0sCi0gICAgICByZXN1bHQ6IGQzX25vb3AKLSAgICB9OwotICAg
IGZ1bmN0aW9uIHBvaW50KHgsIHkpIHsKLSAgICAgIGNvbnRleHQubW92ZVRvKHgsIHkpOwotICAg
ICAgY29udGV4dC5hcmMoeCwgeSwgcG9pbnRSYWRpdXMsIDAsIM+EKTsKLSAgICB9Ci0gICAgZnVu
Y3Rpb24gcG9pbnRMaW5lU3RhcnQoeCwgeSkgewotICAgICAgY29udGV4dC5tb3ZlVG8oeCwgeSk7
Ci0gICAgICBzdHJlYW0ucG9pbnQgPSBwb2ludExpbmU7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBv
aW50TGluZSh4LCB5KSB7Ci0gICAgICBjb250ZXh0LmxpbmVUbyh4LCB5KTsKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gbGluZUVuZCgpIHsKLSAgICAgIHN0cmVhbS5wb2ludCA9IHBvaW50OwotICAgIH0K
LSAgICBmdW5jdGlvbiBsaW5lRW5kUG9seWdvbigpIHsKLSAgICAgIGNvbnRleHQuY2xvc2VQYXRo
KCk7Ci0gICAgfQotICAgIHJldHVybiBzdHJlYW07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3Jl
c2FtcGxlKHByb2plY3QpIHsKLSAgICB2YXIgzrQyID0gLjUsIGNvc01pbkRpc3RhbmNlID0gTWF0
aC5jb3MoMzAgKiBkM19yYWRpYW5zKSwgbWF4RGVwdGggPSAxNjsKLSAgICBmdW5jdGlvbiByZXNh
bXBsZShzdHJlYW0pIHsKLSAgICAgIHJldHVybiAobWF4RGVwdGggPyByZXNhbXBsZVJlY3Vyc2l2
ZSA6IHJlc2FtcGxlTm9uZSkoc3RyZWFtKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVzYW1wbGVO
b25lKHN0cmVhbSkgewotICAgICAgcmV0dXJuIGQzX2dlb190cmFuc2Zvcm1Qb2ludChzdHJlYW0s
IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgICAgeCA9IHByb2plY3QoeCwgeSk7Ci0gICAgICAgIHN0
cmVhbS5wb2ludCh4WzBdLCB4WzFdKTsKLSAgICAgIH0pOwotICAgIH0KLSAgICBmdW5jdGlvbiBy
ZXNhbXBsZVJlY3Vyc2l2ZShzdHJlYW0pIHsKLSAgICAgIHZhciDOuzAwLCDPhjAwLCB4MDAsIHkw
MCwgYTAwLCBiMDAsIGMwMCwgzrswLCB4MCwgeTAsIGEwLCBiMCwgYzA7Ci0gICAgICB2YXIgcmVz
YW1wbGUgPSB7Ci0gICAgICAgIHBvaW50OiBwb2ludCwKLSAgICAgICAgbGluZVN0YXJ0OiBsaW5l
U3RhcnQsCi0gICAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsCi0gICAgICAgIHBvbHlnb25TdGFydDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgc3RyZWFtLnBvbHlnb25TdGFydCgpOwotICAgICAgICAg
IHJlc2FtcGxlLmxpbmVTdGFydCA9IHJpbmdTdGFydDsKLSAgICAgICAgfSwKLSAgICAgICAgcG9s
eWdvbkVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgc3RyZWFtLnBvbHlnb25FbmQoKTsKLSAg
ICAgICAgICByZXNhbXBsZS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ci0gICAgICAgIH0KLSAgICAg
IH07Ci0gICAgICBmdW5jdGlvbiBwb2ludCh4LCB5KSB7Ci0gICAgICAgIHggPSBwcm9qZWN0KHgs
IHkpOwotICAgICAgICBzdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7Ci0gICAgICB9Ci0gICAgICBm
dW5jdGlvbiBsaW5lU3RhcnQoKSB7Ci0gICAgICAgIHgwID0gTmFOOwotICAgICAgICByZXNhbXBs
ZS5wb2ludCA9IGxpbmVQb2ludDsKLSAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpOwotICAgICAg
fQotICAgICAgZnVuY3Rpb24gbGluZVBvaW50KM67LCDPhikgewotICAgICAgICB2YXIgYyA9IGQz
X2dlb19jYXJ0ZXNpYW4oWyDOuywgz4YgXSksIHAgPSBwcm9qZWN0KM67LCDPhik7Ci0gICAgICAg
IHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgzrswLCBhMCwgYjAsIGMwLCB4MCA9IHBbMF0sIHkwID0g
cFsxXSwgzrswID0gzrssIGEwID0gY1swXSwgYjAgPSBjWzFdLCBjMCA9IGNbMl0sIG1heERlcHRo
LCBzdHJlYW0pOwotICAgICAgICBzdHJlYW0ucG9pbnQoeDAsIHkwKTsKLSAgICAgIH0KLSAgICAg
IGZ1bmN0aW9uIGxpbmVFbmQoKSB7Ci0gICAgICAgIHJlc2FtcGxlLnBvaW50ID0gcG9pbnQ7Ci0g
ICAgICAgIHN0cmVhbS5saW5lRW5kKCk7Ci0gICAgICB9Ci0gICAgICBmdW5jdGlvbiByaW5nU3Rh
cnQoKSB7Ci0gICAgICAgIGxpbmVTdGFydCgpOwotICAgICAgICByZXNhbXBsZS5wb2ludCA9IHJp
bmdQb2ludDsKLSAgICAgICAgcmVzYW1wbGUubGluZUVuZCA9IHJpbmdFbmQ7Ci0gICAgICB9Ci0g
ICAgICBmdW5jdGlvbiByaW5nUG9pbnQozrssIM+GKSB7Ci0gICAgICAgIGxpbmVQb2ludCjOuzAw
ID0gzrssIM+GMDAgPSDPhiksIHgwMCA9IHgwLCB5MDAgPSB5MCwgYTAwID0gYTAsIGIwMCA9IGIw
LCBjMDAgPSBjMDsKLSAgICAgICAgcmVzYW1wbGUucG9pbnQgPSBsaW5lUG9pbnQ7Ci0gICAgICB9
Ci0gICAgICBmdW5jdGlvbiByaW5nRW5kKCkgewotICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwg
eTAsIM67MCwgYTAsIGIwLCBjMCwgeDAwLCB5MDAsIM67MDAsIGEwMCwgYjAwLCBjMDAsIG1heERl
cHRoLCBzdHJlYW0pOwotICAgICAgICByZXNhbXBsZS5saW5lRW5kID0gbGluZUVuZDsKLSAgICAg
ICAgbGluZUVuZCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc2FtcGxlOwotICAgIH0KLSAg
ICBmdW5jdGlvbiByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIM67MCwgYTAsIGIwLCBjMCwgeDEsIHkx
LCDOuzEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pIHsKLSAgICAgIHZhciBkeCA9IHgxIC0g
eDAsIGR5ID0geTEgLSB5MCwgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTsKLSAgICAgIGlmIChkMiA+
IDQgKiDOtDIgJiYgZGVwdGgtLSkgewotICAgICAgICB2YXIgYSA9IGEwICsgYTEsIGIgPSBiMCAr
IGIxLCBjID0gYzAgKyBjMSwgbSA9IE1hdGguc3FydChhICogYSArIGIgKiBiICsgYyAqIGMpLCDP
hjIgPSBNYXRoLmFzaW4oYyAvPSBtKSwgzrsyID0gYWJzKGFicyhjKSAtIDEpIDwgzrUgfHwgYWJz
KM67MCAtIM67MSkgPCDOtSA/ICjOuzAgKyDOuzEpIC8gMiA6IE1hdGguYXRhbjIoYiwgYSksIHAg
PSBwcm9qZWN0KM67Miwgz4YyKSwgeDIgPSBwWzBdLCB5MiA9IHBbMV0sIGR4MiA9IHgyIC0geDAs
IGR5MiA9IHkyIC0geTAsIGR6ID0gZHkgKiBkeDIgLSBkeCAqIGR5MjsKLSAgICAgICAgaWYgKGR6
ICogZHogLyBkMiA+IM60MiB8fCBhYnMoKGR4ICogZHgyICsgZHkgKiBkeTIpIC8gZDIgLSAuNSkg
PiAuMyB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSkgewot
ICAgICAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgzrswLCBhMCwgYjAsIGMwLCB4MiwgeTIs
IM67MiwgYSAvPSBtLCBiIC89IG0sIGMsIGRlcHRoLCBzdHJlYW0pOwotICAgICAgICAgIHN0cmVh
bS5wb2ludCh4MiwgeTIpOwotICAgICAgICAgIHJlc2FtcGxlTGluZVRvKHgyLCB5MiwgzrsyLCBh
LCBiLCBjLCB4MSwgeTEsIM67MSwgYTEsIGIxLCBjMSwgZGVwdGgsIHN0cmVhbSk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmVzYW1wbGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykg
ewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KM60Mik7Ci0g
ICAgICBtYXhEZXB0aCA9ICjOtDIgPSBfICogXykgPiAwICYmIDE2OwotICAgICAgcmV0dXJuIHJl
c2FtcGxlOwotICAgIH07Ci0gICAgcmV0dXJuIHJlc2FtcGxlOwotICB9Ci0gIGQzLmdlby5wYXRo
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBvaW50UmFkaXVzID0gNC41LCBwcm9qZWN0aW9uLCBj
b250ZXh0LCBwcm9qZWN0U3RyZWFtLCBjb250ZXh0U3RyZWFtLCBjYWNoZVN0cmVhbTsKLSAgICBm
dW5jdGlvbiBwYXRoKG9iamVjdCkgewotICAgICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAo
dHlwZW9mIHBvaW50UmFkaXVzID09PSAiZnVuY3Rpb24iKSBjb250ZXh0U3RyZWFtLnBvaW50UmFk
aXVzKCtwb2ludFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKLSAgICAgICAgaWYgKCFj
YWNoZVN0cmVhbSB8fCAhY2FjaGVTdHJlYW0udmFsaWQpIGNhY2hlU3RyZWFtID0gcHJvamVjdFN0
cmVhbShjb250ZXh0U3RyZWFtKTsKLSAgICAgICAgZDMuZ2VvLnN0cmVhbShvYmplY3QsIGNhY2hl
U3RyZWFtKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjb250ZXh0U3RyZWFtLnJlc3VsdCgpOwot
ICAgIH0KLSAgICBwYXRoLmFyZWEgPSBmdW5jdGlvbihvYmplY3QpIHsKLSAgICAgIGQzX2dlb19w
YXRoQXJlYVN1bSA9IDA7Ci0gICAgICBkMy5nZW8uc3RyZWFtKG9iamVjdCwgcHJvamVjdFN0cmVh
bShkM19nZW9fcGF0aEFyZWEpKTsKLSAgICAgIHJldHVybiBkM19nZW9fcGF0aEFyZWFTdW07Ci0g
ICAgfTsKLSAgICBwYXRoLmNlbnRyb2lkID0gZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgICBkM19n
ZW9fY2VudHJvaWRYMCA9IGQzX2dlb19jZW50cm9pZFkwID0gZDNfZ2VvX2NlbnRyb2lkWjAgPSBk
M19nZW9fY2VudHJvaWRYMSA9IGQzX2dlb19jZW50cm9pZFkxID0gZDNfZ2VvX2NlbnRyb2lkWjEg
PSBkM19nZW9fY2VudHJvaWRYMiA9IGQzX2dlb19jZW50cm9pZFkyID0gZDNfZ2VvX2NlbnRyb2lk
WjIgPSAwOwotICAgICAgZDMuZ2VvLnN0cmVhbShvYmplY3QsIHByb2plY3RTdHJlYW0oZDNfZ2Vv
X3BhdGhDZW50cm9pZCkpOwotICAgICAgcmV0dXJuIGQzX2dlb19jZW50cm9pZFoyID8gWyBkM19n
ZW9fY2VudHJvaWRYMiAvIGQzX2dlb19jZW50cm9pZFoyLCBkM19nZW9fY2VudHJvaWRZMiAvIGQz
X2dlb19jZW50cm9pZFoyIF0gOiBkM19nZW9fY2VudHJvaWRaMSA/IFsgZDNfZ2VvX2NlbnRyb2lk
WDEgLyBkM19nZW9fY2VudHJvaWRaMSwgZDNfZ2VvX2NlbnRyb2lkWTEgLyBkM19nZW9fY2VudHJv
aWRaMSBdIDogZDNfZ2VvX2NlbnRyb2lkWjAgPyBbIGQzX2dlb19jZW50cm9pZFgwIC8gZDNfZ2Vv
X2NlbnRyb2lkWjAsIGQzX2dlb19jZW50cm9pZFkwIC8gZDNfZ2VvX2NlbnRyb2lkWjAgXSA6IFsg
TmFOLCBOYU4gXTsKLSAgICB9OwotICAgIHBhdGguYm91bmRzID0gZnVuY3Rpb24ob2JqZWN0KSB7
Ci0gICAgICBkM19nZW9fcGF0aEJvdW5kc1gxID0gZDNfZ2VvX3BhdGhCb3VuZHNZMSA9IC0oZDNf
Z2VvX3BhdGhCb3VuZHNYMCA9IGQzX2dlb19wYXRoQm91bmRzWTAgPSBJbmZpbml0eSk7Ci0gICAg
ICBkMy5nZW8uc3RyZWFtKG9iamVjdCwgcHJvamVjdFN0cmVhbShkM19nZW9fcGF0aEJvdW5kcykp
OwotICAgICAgcmV0dXJuIFsgWyBkM19nZW9fcGF0aEJvdW5kc1gwLCBkM19nZW9fcGF0aEJvdW5k
c1kwIF0sIFsgZDNfZ2VvX3BhdGhCb3VuZHNYMSwgZDNfZ2VvX3BhdGhCb3VuZHNZMSBdIF07Ci0g
ICAgfTsKLSAgICBwYXRoLnByb2plY3Rpb24gPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFy
Z3VtZW50cy5sZW5ndGgpIHJldHVybiBwcm9qZWN0aW9uOwotICAgICAgcHJvamVjdFN0cmVhbSA9
IChwcm9qZWN0aW9uID0gXykgPyBfLnN0cmVhbSB8fCBkM19nZW9fcGF0aFByb2plY3RTdHJlYW0o
XykgOiBkM19pZGVudGl0eTsKLSAgICAgIHJldHVybiByZXNldCgpOwotICAgIH07Ci0gICAgcGF0
aC5jb250ZXh0ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSBy
ZXR1cm4gY29udGV4dDsKLSAgICAgIGNvbnRleHRTdHJlYW0gPSAoY29udGV4dCA9IF8pID09IG51
bGwgPyBuZXcgZDNfZ2VvX3BhdGhCdWZmZXIoKSA6IG5ldyBkM19nZW9fcGF0aENvbnRleHQoXyk7
Ci0gICAgICBpZiAodHlwZW9mIHBvaW50UmFkaXVzICE9PSAiZnVuY3Rpb24iKSBjb250ZXh0U3Ry
ZWFtLnBvaW50UmFkaXVzKHBvaW50UmFkaXVzKTsKLSAgICAgIHJldHVybiByZXNldCgpOwotICAg
IH07Ci0gICAgcGF0aC5wb2ludFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIHBvaW50UmFkaXVzOwotICAgICAgcG9pbnRSYWRpdXMgPSB0
eXBlb2YgXyA9PT0gImZ1bmN0aW9uIiA/IF8gOiAoY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cygr
XyksICtfKTsKLSAgICAgIHJldHVybiBwYXRoOwotICAgIH07Ci0gICAgZnVuY3Rpb24gcmVzZXQo
KSB7Ci0gICAgICBjYWNoZVN0cmVhbSA9IG51bGw7Ci0gICAgICByZXR1cm4gcGF0aDsKLSAgICB9
Ci0gICAgcmV0dXJuIHBhdGgucHJvamVjdGlvbihkMy5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQo
bnVsbCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19wYXRoUHJvamVjdFN0cmVhbShwcm9qZWN0
KSB7Ci0gICAgdmFyIHJlc2FtcGxlID0gZDNfZ2VvX3Jlc2FtcGxlKGZ1bmN0aW9uKHgsIHkpIHsK
LSAgICAgIHJldHVybiBwcm9qZWN0KFsgeCAqIGQzX2RlZ3JlZXMsIHkgKiBkM19kZWdyZWVzIF0p
OwotICAgIH0pOwotICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgIHJldHVybiBk
M19nZW9fcHJvamVjdGlvblJhZGlhbnMocmVzYW1wbGUoc3RyZWFtKSk7Ci0gICAgfTsKLSAgfQot
ICBkMy5nZW8udHJhbnNmb3JtID0gZnVuY3Rpb24obWV0aG9kcykgewotICAgIHJldHVybiB7Ci0g
ICAgICBzdHJlYW06IGZ1bmN0aW9uKHN0cmVhbSkgewotICAgICAgICB2YXIgdHJhbnNmb3JtID0g
bmV3IGQzX2dlb190cmFuc2Zvcm0oc3RyZWFtKTsKLSAgICAgICAgZm9yICh2YXIgayBpbiBtZXRo
b2RzKSB0cmFuc2Zvcm1ba10gPSBtZXRob2RzW2tdOwotICAgICAgICByZXR1cm4gdHJhbnNmb3Jt
OwotICAgICAgfQotICAgIH07Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb190cmFuc2Zvcm0oc3Ry
ZWFtKSB7Ci0gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07Ci0gIH0KLSAgZDNfZ2VvX3RyYW5zZm9y
bS5wcm90b3R5cGUgPSB7Ci0gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICAgIHRoaXMu
c3RyZWFtLnBvaW50KHgsIHkpOwotICAgIH0sCi0gICAgc3BoZXJlOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHRoaXMuc3RyZWFtLnNwaGVyZSgpOwotICAgIH0sCi0gICAgbGluZVN0YXJ0OiBmdW5jdGlv
bigpIHsKLSAgICAgIHRoaXMuc3RyZWFtLmxpbmVTdGFydCgpOwotICAgIH0sCi0gICAgbGluZUVu
ZDogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0cmVhbS5saW5lRW5kKCk7Ci0gICAgfSwKLSAg
ICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5zdHJlYW0ucG9seWdvblN0
YXJ0KCk7Ci0gICAgfSwKLSAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMu
c3RyZWFtLnBvbHlnb25FbmQoKTsKLSAgICB9Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb190cmFu
c2Zvcm1Qb2ludChzdHJlYW0sIHBvaW50KSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIHBvaW50OiBw
b2ludCwKLSAgICAgIHNwaGVyZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHN0cmVhbS5zcGhlcmUo
KTsKLSAgICAgIH0sCi0gICAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJl
YW0ubGluZVN0YXJ0KCk7Ci0gICAgICB9LAotICAgICAgbGluZUVuZDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHN0cmVhbS5saW5lRW5kKCk7Ci0gICAgICB9LAotICAgICAgcG9seWdvblN0YXJ0OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgc3RyZWFtLnBvbHlnb25TdGFydCgpOwotICAgICAgfSwKLSAg
ICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBzdHJlYW0ucG9seWdvbkVuZCgp
OwotICAgICAgfQotICAgIH07Ci0gIH0KLSAgZDMuZ2VvLnByb2plY3Rpb24gPSBkM19nZW9fcHJv
amVjdGlvbjsKLSAgZDMuZ2VvLnByb2plY3Rpb25NdXRhdG9yID0gZDNfZ2VvX3Byb2plY3Rpb25N
dXRhdG9yOwotICBmdW5jdGlvbiBkM19nZW9fcHJvamVjdGlvbihwcm9qZWN0KSB7Ci0gICAgcmV0
dXJuIGQzX2dlb19wcm9qZWN0aW9uTXV0YXRvcihmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBw
cm9qZWN0OwotICAgIH0pKCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvX3Byb2plY3Rpb25NdXRh
dG9yKHByb2plY3RBdCkgewotICAgIHZhciBwcm9qZWN0LCByb3RhdGUsIHByb2plY3RSb3RhdGUs
IHByb2plY3RSZXNhbXBsZSA9IGQzX2dlb19yZXNhbXBsZShmdW5jdGlvbih4LCB5KSB7Ci0gICAg
ICB4ID0gcHJvamVjdCh4LCB5KTsKLSAgICAgIHJldHVybiBbIHhbMF0gKiBrICsgzrR4LCDOtHkg
LSB4WzFdICogayBdOwotICAgIH0pLCBrID0gMTUwLCB4ID0gNDgwLCB5ID0gMjUwLCDOuyA9IDAs
IM+GID0gMCwgzrTOuyA9IDAsIM60z4YgPSAwLCDOtM6zID0gMCwgzrR4LCDOtHksIHByZWNsaXAg
PSBkM19nZW9fY2xpcEFudGltZXJpZGlhbiwgcG9zdGNsaXAgPSBkM19pZGVudGl0eSwgY2xpcEFu
Z2xlID0gbnVsbCwgY2xpcEV4dGVudCA9IG51bGwsIHN0cmVhbTsKLSAgICBmdW5jdGlvbiBwcm9q
ZWN0aW9uKHBvaW50KSB7Ci0gICAgICBwb2ludCA9IHByb2plY3RSb3RhdGUocG9pbnRbMF0gKiBk
M19yYWRpYW5zLCBwb2ludFsxXSAqIGQzX3JhZGlhbnMpOwotICAgICAgcmV0dXJuIFsgcG9pbnRb
MF0gKiBrICsgzrR4LCDOtHkgLSBwb2ludFsxXSAqIGsgXTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
aW52ZXJ0KHBvaW50KSB7Ci0gICAgICBwb2ludCA9IHByb2plY3RSb3RhdGUuaW52ZXJ0KChwb2lu
dFswXSAtIM60eCkgLyBrLCAozrR5IC0gcG9pbnRbMV0pIC8gayk7Ci0gICAgICByZXR1cm4gcG9p
bnQgJiYgWyBwb2ludFswXSAqIGQzX2RlZ3JlZXMsIHBvaW50WzFdICogZDNfZGVncmVlcyBdOwot
ICAgIH0KLSAgICBwcm9qZWN0aW9uLnN0cmVhbSA9IGZ1bmN0aW9uKG91dHB1dCkgewotICAgICAg
aWYgKHN0cmVhbSkgc3RyZWFtLnZhbGlkID0gZmFsc2U7Ci0gICAgICBzdHJlYW0gPSBkM19nZW9f
cHJvamVjdGlvblJhZGlhbnMocHJlY2xpcChyb3RhdGUsIHByb2plY3RSZXNhbXBsZShwb3N0Y2xp
cChvdXRwdXQpKSkpOwotICAgICAgc3RyZWFtLnZhbGlkID0gdHJ1ZTsKLSAgICAgIHJldHVybiBz
dHJlYW07Ci0gICAgfTsKLSAgICBwcm9qZWN0aW9uLmNsaXBBbmdsZSA9IGZ1bmN0aW9uKF8pIHsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsaXBBbmdsZTsKLSAgICAgIHBy
ZWNsaXAgPSBfID09IG51bGwgPyAoY2xpcEFuZ2xlID0gXywgZDNfZ2VvX2NsaXBBbnRpbWVyaWRp
YW4pIDogZDNfZ2VvX2NsaXBDaXJjbGUoKGNsaXBBbmdsZSA9ICtfKSAqIGQzX3JhZGlhbnMpOwot
ICAgICAgcmV0dXJuIGludmFsaWRhdGUoKTsKLSAgICB9OwotICAgIHByb2plY3Rpb24uY2xpcEV4
dGVudCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJu
IGNsaXBFeHRlbnQ7Ci0gICAgICBjbGlwRXh0ZW50ID0gXzsKLSAgICAgIHBvc3RjbGlwID0gXyA/
IGQzX2dlb19jbGlwRXh0ZW50KF9bMF1bMF0sIF9bMF1bMV0sIF9bMV1bMF0sIF9bMV1bMV0pIDog
ZDNfaWRlbnRpdHk7Ci0gICAgICByZXR1cm4gaW52YWxpZGF0ZSgpOwotICAgIH07Ci0gICAgcHJv
amVjdGlvbi5zY2FsZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIGs7Ci0gICAgICBrID0gK187Ci0gICAgICByZXR1cm4gcmVzZXQoKTsKLSAgICB9
OwotICAgIHByb2plY3Rpb24udHJhbnNsYXRlID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gWyB4LCB5IF07Ci0gICAgICB4ID0gK19bMF07Ci0gICAg
ICB5ID0gK19bMV07Ci0gICAgICByZXR1cm4gcmVzZXQoKTsKLSAgICB9OwotICAgIHByb2plY3Rp
b24uY2VudGVyID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSBy
ZXR1cm4gWyDOuyAqIGQzX2RlZ3JlZXMsIM+GICogZDNfZGVncmVlcyBdOwotICAgICAgzrsgPSBf
WzBdICUgMzYwICogZDNfcmFkaWFuczsKLSAgICAgIM+GID0gX1sxXSAlIDM2MCAqIGQzX3JhZGlh
bnM7Ci0gICAgICByZXR1cm4gcmVzZXQoKTsKLSAgICB9OwotICAgIHByb2plY3Rpb24ucm90YXRl
ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gWyDO
tM67ICogZDNfZGVncmVlcywgzrTPhiAqIGQzX2RlZ3JlZXMsIM60zrMgKiBkM19kZWdyZWVzIF07
Ci0gICAgICDOtM67ID0gX1swXSAlIDM2MCAqIGQzX3JhZGlhbnM7Ci0gICAgICDOtM+GID0gX1sx
XSAlIDM2MCAqIGQzX3JhZGlhbnM7Ci0gICAgICDOtM6zID0gXy5sZW5ndGggPiAyID8gX1syXSAl
IDM2MCAqIGQzX3JhZGlhbnMgOiAwOwotICAgICAgcmV0dXJuIHJlc2V0KCk7Ci0gICAgfTsKLSAg
ICBkMy5yZWJpbmQocHJvamVjdGlvbiwgcHJvamVjdFJlc2FtcGxlLCAicHJlY2lzaW9uIik7Ci0g
ICAgZnVuY3Rpb24gcmVzZXQoKSB7Ci0gICAgICBwcm9qZWN0Um90YXRlID0gZDNfZ2VvX2NvbXBv
c2Uocm90YXRlID0gZDNfZ2VvX3JvdGF0aW9uKM60zrssIM60z4YsIM60zrMpLCBwcm9qZWN0KTsK
LSAgICAgIHZhciBjZW50ZXIgPSBwcm9qZWN0KM67LCDPhik7Ci0gICAgICDOtHggPSB4IC0gY2Vu
dGVyWzBdICogazsKLSAgICAgIM60eSA9IHkgKyBjZW50ZXJbMV0gKiBrOwotICAgICAgcmV0dXJu
IGludmFsaWRhdGUoKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHsKLSAgICAg
IGlmIChzdHJlYW0pIHN0cmVhbS52YWxpZCA9IGZhbHNlLCBzdHJlYW0gPSBudWxsOwotICAgICAg
cmV0dXJuIHByb2plY3Rpb247Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAg
IHByb2plY3QgPSBwcm9qZWN0QXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHByb2pl
Y3Rpb24uaW52ZXJ0ID0gcHJvamVjdC5pbnZlcnQgJiYgaW52ZXJ0OwotICAgICAgcmV0dXJuIHJl
c2V0KCk7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9fcHJvamVjdGlvblJhZGlhbnMo
c3RyZWFtKSB7Ci0gICAgcmV0dXJuIGQzX2dlb190cmFuc2Zvcm1Qb2ludChzdHJlYW0sIGZ1bmN0
aW9uKHgsIHkpIHsKLSAgICAgIHN0cmVhbS5wb2ludCh4ICogZDNfcmFkaWFucywgeSAqIGQzX3Jh
ZGlhbnMpOwotICAgIH0pOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19lcXVpcmVjdGFuZ3VsYXIo
zrssIM+GKSB7Ci0gICAgcmV0dXJuIFsgzrssIM+GIF07Ci0gIH0KLSAgKGQzLmdlby5lcXVpcmVj
dGFuZ3VsYXIgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfZ2VvX3Byb2plY3Rpb24oZDNf
Z2VvX2VxdWlyZWN0YW5ndWxhcik7Ci0gIH0pLnJhdyA9IGQzX2dlb19lcXVpcmVjdGFuZ3VsYXIu
aW52ZXJ0ID0gZDNfZ2VvX2VxdWlyZWN0YW5ndWxhcjsKLSAgZDMuZ2VvLnJvdGF0aW9uID0gZnVu
Y3Rpb24ocm90YXRlKSB7Ci0gICAgcm90YXRlID0gZDNfZ2VvX3JvdGF0aW9uKHJvdGF0ZVswXSAl
IDM2MCAqIGQzX3JhZGlhbnMsIHJvdGF0ZVsxXSAqIGQzX3JhZGlhbnMsIHJvdGF0ZS5sZW5ndGgg
PiAyID8gcm90YXRlWzJdICogZDNfcmFkaWFucyA6IDApOwotICAgIGZ1bmN0aW9uIGZvcndhcmQo
Y29vcmRpbmF0ZXMpIHsKLSAgICAgIGNvb3JkaW5hdGVzID0gcm90YXRlKGNvb3JkaW5hdGVzWzBd
ICogZDNfcmFkaWFucywgY29vcmRpbmF0ZXNbMV0gKiBkM19yYWRpYW5zKTsKLSAgICAgIHJldHVy
biBjb29yZGluYXRlc1swXSAqPSBkM19kZWdyZWVzLCBjb29yZGluYXRlc1sxXSAqPSBkM19kZWdy
ZWVzLCBjb29yZGluYXRlczsKLSAgICB9Ci0gICAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbihj
b29yZGluYXRlcykgewotICAgICAgY29vcmRpbmF0ZXMgPSByb3RhdGUuaW52ZXJ0KGNvb3JkaW5h
dGVzWzBdICogZDNfcmFkaWFucywgY29vcmRpbmF0ZXNbMV0gKiBkM19yYWRpYW5zKTsKLSAgICAg
IHJldHVybiBjb29yZGluYXRlc1swXSAqPSBkM19kZWdyZWVzLCBjb29yZGluYXRlc1sxXSAqPSBk
M19kZWdyZWVzLCBjb29yZGluYXRlczsKLSAgICB9OwotICAgIHJldHVybiBmb3J3YXJkOwotICB9
OwotICBmdW5jdGlvbiBkM19nZW9faWRlbnRpdHlSb3RhdGlvbijOuywgz4YpIHsKLSAgICByZXR1
cm4gWyDOuyA+IM+AID8gzrsgLSDPhCA6IM67IDwgLc+AID8gzrsgKyDPhCA6IM67LCDPhiBdOwot
ICB9Ci0gIGQzX2dlb19pZGVudGl0eVJvdGF0aW9uLmludmVydCA9IGQzX2dlb19lcXVpcmVjdGFu
Z3VsYXI7Ci0gIGZ1bmN0aW9uIGQzX2dlb19yb3RhdGlvbijOtM67LCDOtM+GLCDOtM6zKSB7Ci0g
ICAgcmV0dXJuIM60zrsgPyDOtM+GIHx8IM60zrMgPyBkM19nZW9fY29tcG9zZShkM19nZW9fcm90
YXRpb27OuyjOtM67KSwgZDNfZ2VvX3JvdGF0aW9uz4bOsyjOtM+GLCDOtM6zKSkgOiBkM19nZW9f
cm90YXRpb27OuyjOtM67KSA6IM60z4YgfHwgzrTOsyA/IGQzX2dlb19yb3RhdGlvbs+GzrMozrTP
hiwgzrTOsykgOiBkM19nZW9faWRlbnRpdHlSb3RhdGlvbjsKLSAgfQotICBmdW5jdGlvbiBkM19n
ZW9fZm9yd2FyZFJvdGF0aW9uzrsozrTOuykgewotICAgIHJldHVybiBmdW5jdGlvbijOuywgz4Yp
IHsKLSAgICAgIHJldHVybiDOuyArPSDOtM67LCBbIM67ID4gz4AgPyDOuyAtIM+EIDogzrsgPCAt
z4AgPyDOuyArIM+EIDogzrssIM+GIF07Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9f
cm90YXRpb27OuyjOtM67KSB7Ci0gICAgdmFyIHJvdGF0aW9uID0gZDNfZ2VvX2ZvcndhcmRSb3Rh
dGlvbs67KM60zrspOwotICAgIHJvdGF0aW9uLmludmVydCA9IGQzX2dlb19mb3J3YXJkUm90YXRp
b27OuygtzrTOuyk7Ci0gICAgcmV0dXJuIHJvdGF0aW9uOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dl
b19yb3RhdGlvbs+GzrMozrTPhiwgzrTOsykgewotICAgIHZhciBjb3POtM+GID0gTWF0aC5jb3Mo
zrTPhiksIHNpbs60z4YgPSBNYXRoLnNpbijOtM+GKSwgY29zzrTOsyA9IE1hdGguY29zKM60zrMp
LCBzaW7OtM6zID0gTWF0aC5zaW4ozrTOsyk7Ci0gICAgZnVuY3Rpb24gcm90YXRpb24ozrssIM+G
KSB7Ci0gICAgICB2YXIgY29zz4YgPSBNYXRoLmNvcyjPhiksIHggPSBNYXRoLmNvcyjOuykgKiBj
b3PPhiwgeSA9IE1hdGguc2luKM67KSAqIGNvc8+GLCB6ID0gTWF0aC5zaW4oz4YpLCBrID0geiAq
IGNvc860z4YgKyB4ICogc2luzrTPhjsKLSAgICAgIHJldHVybiBbIE1hdGguYXRhbjIoeSAqIGNv
c860zrMgLSBrICogc2luzrTOsywgeCAqIGNvc860z4YgLSB6ICogc2luzrTPhiksIGQzX2FzaW4o
ayAqIGNvc860zrMgKyB5ICogc2luzrTOsykgXTsKLSAgICB9Ci0gICAgcm90YXRpb24uaW52ZXJ0
ID0gZnVuY3Rpb24ozrssIM+GKSB7Ci0gICAgICB2YXIgY29zz4YgPSBNYXRoLmNvcyjPhiksIHgg
PSBNYXRoLmNvcyjOuykgKiBjb3PPhiwgeSA9IE1hdGguc2luKM67KSAqIGNvc8+GLCB6ID0gTWF0
aC5zaW4oz4YpLCBrID0geiAqIGNvc860zrMgLSB5ICogc2luzrTOszsKLSAgICAgIHJldHVybiBb
IE1hdGguYXRhbjIoeSAqIGNvc860zrMgKyB6ICogc2luzrTOsywgeCAqIGNvc860z4YgKyBrICog
c2luzrTPhiksIGQzX2FzaW4oayAqIGNvc860z4YgLSB4ICogc2luzrTPhikgXTsKLSAgICB9Owot
ICAgIHJldHVybiByb3RhdGlvbjsKLSAgfQotICBkMy5nZW8uY2lyY2xlID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIG9yaWdpbiA9IFsgMCwgMCBdLCBhbmdsZSwgcHJlY2lzaW9uID0gNiwgaW50ZXJw
b2xhdGU7Ci0gICAgZnVuY3Rpb24gY2lyY2xlKCkgewotICAgICAgdmFyIGNlbnRlciA9IHR5cGVv
ZiBvcmlnaW4gPT09ICJmdW5jdGlvbiIgPyBvcmlnaW4uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6
IG9yaWdpbiwgcm90YXRlID0gZDNfZ2VvX3JvdGF0aW9uKC1jZW50ZXJbMF0gKiBkM19yYWRpYW5z
LCAtY2VudGVyWzFdICogZDNfcmFkaWFucywgMCkuaW52ZXJ0LCByaW5nID0gW107Ci0gICAgICBp
bnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCB7Ci0gICAgICAgIHBvaW50OiBmdW5jdGlvbih4LCB5
KSB7Ci0gICAgICAgICAgcmluZy5wdXNoKHggPSByb3RhdGUoeCwgeSkpOwotICAgICAgICAgIHhb
MF0gKj0gZDNfZGVncmVlcywgeFsxXSAqPSBkM19kZWdyZWVzOwotICAgICAgICB9Ci0gICAgICB9
KTsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHR5cGU6ICJQb2x5Z29uIiwKLSAgICAgICAgY29v
cmRpbmF0ZXM6IFsgcmluZyBdCi0gICAgICB9OwotICAgIH0KLSAgICBjaXJjbGUub3JpZ2luID0g
ZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3JpZ2lu
OwotICAgICAgb3JpZ2luID0geDsKLSAgICAgIHJldHVybiBjaXJjbGU7Ci0gICAgfTsKLSAgICBj
aXJjbGUuYW5nbGUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgp
IHJldHVybiBhbmdsZTsKLSAgICAgIGludGVycG9sYXRlID0gZDNfZ2VvX2NpcmNsZUludGVycG9s
YXRlKChhbmdsZSA9ICt4KSAqIGQzX3JhZGlhbnMsIHByZWNpc2lvbiAqIGQzX3JhZGlhbnMpOwot
ICAgICAgcmV0dXJuIGNpcmNsZTsKLSAgICB9OwotICAgIGNpcmNsZS5wcmVjaXNpb24gPSBmdW5j
dGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwcmVjaXNpb247
Ci0gICAgICBpbnRlcnBvbGF0ZSA9IGQzX2dlb19jaXJjbGVJbnRlcnBvbGF0ZShhbmdsZSAqIGQz
X3JhZGlhbnMsIChwcmVjaXNpb24gPSArXykgKiBkM19yYWRpYW5zKTsKLSAgICAgIHJldHVybiBj
aXJjbGU7Ci0gICAgfTsKLSAgICByZXR1cm4gY2lyY2xlLmFuZ2xlKDkwKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gZDNfZ2VvX2NpcmNsZUludGVycG9sYXRlKHJhZGl1cywgcHJlY2lzaW9uKSB7Ci0gICAg
dmFyIGNyID0gTWF0aC5jb3MocmFkaXVzKSwgc3IgPSBNYXRoLnNpbihyYWRpdXMpOwotICAgIHJl
dHVybiBmdW5jdGlvbihmcm9tLCB0bywgZGlyZWN0aW9uLCBsaXN0ZW5lcikgewotICAgICAgdmFy
IHN0ZXAgPSBkaXJlY3Rpb24gKiBwcmVjaXNpb247Ci0gICAgICBpZiAoZnJvbSAhPSBudWxsKSB7
Ci0gICAgICAgIGZyb20gPSBkM19nZW9fY2lyY2xlQW5nbGUoY3IsIGZyb20pOwotICAgICAgICB0
byA9IGQzX2dlb19jaXJjbGVBbmdsZShjciwgdG8pOwotICAgICAgICBpZiAoZGlyZWN0aW9uID4g
MCA/IGZyb20gPCB0byA6IGZyb20gPiB0bykgZnJvbSArPSBkaXJlY3Rpb24gKiDPhDsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZyb20gPSByYWRpdXMgKyBkaXJlY3Rpb24gKiDPhDsKLSAgICAg
ICAgdG8gPSByYWRpdXMgLSAuNSAqIHN0ZXA7Ci0gICAgICB9Ci0gICAgICBmb3IgKHZhciBwb2lu
dCwgdCA9IGZyb207IGRpcmVjdGlvbiA+IDAgPyB0ID4gdG8gOiB0IDwgdG87IHQgLT0gc3RlcCkg
ewotICAgICAgICBsaXN0ZW5lci5wb2ludCgocG9pbnQgPSBkM19nZW9fc3BoZXJpY2FsKFsgY3Is
IC1zciAqIE1hdGguY29zKHQpLCAtc3IgKiBNYXRoLnNpbih0KSBdKSlbMF0sIHBvaW50WzFdKTsK
LSAgICAgIH0KLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb19jaXJjbGVBbmdsZShjciwg
cG9pbnQpIHsKLSAgICB2YXIgYSA9IGQzX2dlb19jYXJ0ZXNpYW4ocG9pbnQpOwotICAgIGFbMF0g
LT0gY3I7Ci0gICAgZDNfZ2VvX2NhcnRlc2lhbk5vcm1hbGl6ZShhKTsKLSAgICB2YXIgYW5nbGUg
PSBkM19hY29zKC1hWzFdKTsKLSAgICByZXR1cm4gKCgtYVsyXSA8IDAgPyAtYW5nbGUgOiBhbmds
ZSkgKyAyICogTWF0aC5QSSAtIM61KSAlICgyICogTWF0aC5QSSk7Ci0gIH0KLSAgZDMuZ2VvLmRp
c3RhbmNlID0gZnVuY3Rpb24oYSwgYikgewotICAgIHZhciDOlM67ID0gKGJbMF0gLSBhWzBdKSAq
IGQzX3JhZGlhbnMsIM+GMCA9IGFbMV0gKiBkM19yYWRpYW5zLCDPhjEgPSBiWzFdICogZDNfcmFk
aWFucywgc2luzpTOuyA9IE1hdGguc2luKM6UzrspLCBjb3POlM67ID0gTWF0aC5jb3MozpTOuyks
IHNpbs+GMCA9IE1hdGguc2luKM+GMCksIGNvc8+GMCA9IE1hdGguY29zKM+GMCksIHNpbs+GMSA9
IE1hdGguc2luKM+GMSksIGNvc8+GMSA9IE1hdGguY29zKM+GMSksIHQ7Ci0gICAgcmV0dXJuIE1h
dGguYXRhbjIoTWF0aC5zcXJ0KCh0ID0gY29zz4YxICogc2luzpTOuykgKiB0ICsgKHQgPSBjb3PP
hjAgKiBzaW7PhjEgLSBzaW7PhjAgKiBjb3PPhjEgKiBjb3POlM67KSAqIHQpLCBzaW7PhjAgKiBz
aW7PhjEgKyBjb3PPhjAgKiBjb3PPhjEgKiBjb3POlM67KTsKLSAgfTsKLSAgZDMuZ2VvLmdyYXRp
Y3VsZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB4MSwgeDAsIFgxLCBYMCwgeTEsIHkwLCBZMSwg
WTAsIGR4ID0gMTAsIGR5ID0gZHgsIERYID0gOTAsIERZID0gMzYwLCB4LCB5LCBYLCBZLCBwcmVj
aXNpb24gPSAyLjU7Ci0gICAgZnVuY3Rpb24gZ3JhdGljdWxlKCkgewotICAgICAgcmV0dXJuIHsK
LSAgICAgICAgdHlwZTogIk11bHRpTGluZVN0cmluZyIsCi0gICAgICAgIGNvb3JkaW5hdGVzOiBs
aW5lcygpCi0gICAgICB9OwotICAgIH0KLSAgICBmdW5jdGlvbiBsaW5lcygpIHsKLSAgICAgIHJl
dHVybiBkMy5yYW5nZShNYXRoLmNlaWwoWDAgLyBEWCkgKiBEWCwgWDEsIERYKS5tYXAoWCkuY29u
Y2F0KGQzLnJhbmdlKE1hdGguY2VpbChZMCAvIERZKSAqIERZLCBZMSwgRFkpLm1hcChZKSkuY29u
Y2F0KGQzLnJhbmdlKE1hdGguY2VpbCh4MCAvIGR4KSAqIGR4LCB4MSwgZHgpLmZpbHRlcihmdW5j
dGlvbih4KSB7Ci0gICAgICAgIHJldHVybiBhYnMoeCAlIERYKSA+IM61OwotICAgICAgfSkubWFw
KHgpKS5jb25jYXQoZDMucmFuZ2UoTWF0aC5jZWlsKHkwIC8gZHkpICogZHksIHkxLCBkeSkuZmls
dGVyKGZ1bmN0aW9uKHkpIHsKLSAgICAgICAgcmV0dXJuIGFicyh5ICUgRFkpID4gzrU7Ci0gICAg
ICB9KS5tYXAoeSkpOwotICAgIH0KLSAgICBncmF0aWN1bGUubGluZXMgPSBmdW5jdGlvbigpIHsK
LSAgICAgIHJldHVybiBsaW5lcygpLm1hcChmdW5jdGlvbihjb29yZGluYXRlcykgewotICAgICAg
ICByZXR1cm4gewotICAgICAgICAgIHR5cGU6ICJMaW5lU3RyaW5nIiwKLSAgICAgICAgICBjb29y
ZGluYXRlczogY29vcmRpbmF0ZXMKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgIH07Ci0gICAg
Z3JhdGljdWxlLm91dGxpbmUgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAg
IHR5cGU6ICJQb2x5Z29uIiwKLSAgICAgICAgY29vcmRpbmF0ZXM6IFsgWChYMCkuY29uY2F0KFko
WTEpLnNsaWNlKDEpLCBYKFgxKS5yZXZlcnNlKCkuc2xpY2UoMSksIFkoWTApLnJldmVyc2UoKS5z
bGljZSgxKSkgXQotICAgICAgfTsKLSAgICB9OwotICAgIGdyYXRpY3VsZS5leHRlbnQgPSBmdW5j
dGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBncmF0aWN1bGUu
bWlub3JFeHRlbnQoKTsKLSAgICAgIHJldHVybiBncmF0aWN1bGUubWFqb3JFeHRlbnQoXykubWlu
b3JFeHRlbnQoXyk7Ci0gICAgfTsKLSAgICBncmF0aWN1bGUubWFqb3JFeHRlbnQgPSBmdW5jdGlv
bihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbIFsgWDAsIFkwIF0s
IFsgWDEsIFkxIF0gXTsKLSAgICAgIFgwID0gK19bMF1bMF0sIFgxID0gK19bMV1bMF07Ci0gICAg
ICBZMCA9ICtfWzBdWzFdLCBZMSA9ICtfWzFdWzFdOwotICAgICAgaWYgKFgwID4gWDEpIF8gPSBY
MCwgWDAgPSBYMSwgWDEgPSBfOwotICAgICAgaWYgKFkwID4gWTEpIF8gPSBZMCwgWTAgPSBZMSwg
WTEgPSBfOwotICAgICAgcmV0dXJuIGdyYXRpY3VsZS5wcmVjaXNpb24ocHJlY2lzaW9uKTsKLSAg
ICB9OwotICAgIGdyYXRpY3VsZS5taW5vckV4dGVudCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFsgWyB4MCwgeTAgXSwgWyB4MSwgeTEgXSBdOwot
ICAgICAgeDAgPSArX1swXVswXSwgeDEgPSArX1sxXVswXTsKLSAgICAgIHkwID0gK19bMF1bMV0s
IHkxID0gK19bMV1bMV07Ci0gICAgICBpZiAoeDAgPiB4MSkgXyA9IHgwLCB4MCA9IHgxLCB4MSA9
IF87Ci0gICAgICBpZiAoeTAgPiB5MSkgXyA9IHkwLCB5MCA9IHkxLCB5MSA9IF87Ci0gICAgICBy
ZXR1cm4gZ3JhdGljdWxlLnByZWNpc2lvbihwcmVjaXNpb24pOwotICAgIH07Ci0gICAgZ3JhdGlj
dWxlLnN0ZXAgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJl
dHVybiBncmF0aWN1bGUubWlub3JTdGVwKCk7Ci0gICAgICByZXR1cm4gZ3JhdGljdWxlLm1ham9y
U3RlcChfKS5taW5vclN0ZXAoXyk7Ci0gICAgfTsKLSAgICBncmF0aWN1bGUubWFqb3JTdGVwID0g
ZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gWyBEWCwg
RFkgXTsKLSAgICAgIERYID0gK19bMF0sIERZID0gK19bMV07Ci0gICAgICByZXR1cm4gZ3JhdGlj
dWxlOwotICAgIH07Ci0gICAgZ3JhdGljdWxlLm1pbm9yU3RlcCA9IGZ1bmN0aW9uKF8pIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFsgZHgsIGR5IF07Ci0gICAgICBkeCA9
ICtfWzBdLCBkeSA9ICtfWzFdOwotICAgICAgcmV0dXJuIGdyYXRpY3VsZTsKLSAgICB9OwotICAg
IGdyYXRpY3VsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50
cy5sZW5ndGgpIHJldHVybiBwcmVjaXNpb247Ci0gICAgICBwcmVjaXNpb24gPSArXzsKLSAgICAg
IHggPSBkM19nZW9fZ3JhdGljdWxlWCh5MCwgeTEsIDkwKTsKLSAgICAgIHkgPSBkM19nZW9fZ3Jh
dGljdWxlWSh4MCwgeDEsIHByZWNpc2lvbik7Ci0gICAgICBYID0gZDNfZ2VvX2dyYXRpY3VsZVgo
WTAsIFkxLCA5MCk7Ci0gICAgICBZID0gZDNfZ2VvX2dyYXRpY3VsZVkoWDAsIFgxLCBwcmVjaXNp
b24pOwotICAgICAgcmV0dXJuIGdyYXRpY3VsZTsKLSAgICB9OwotICAgIHJldHVybiBncmF0aWN1
bGUubWFqb3JFeHRlbnQoWyBbIC0xODAsIC05MCArIM61IF0sIFsgMTgwLCA5MCAtIM61IF0gXSku
bWlub3JFeHRlbnQoWyBbIC0xODAsIC04MCAtIM61IF0sIFsgMTgwLCA4MCArIM61IF0gXSk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIGQzX2dlb19ncmF0aWN1bGVYKHkwLCB5MSwgZHkpIHsKLSAgICB2YXIg
eSA9IGQzLnJhbmdlKHkwLCB5MSAtIM61LCBkeSkuY29uY2F0KHkxKTsKLSAgICByZXR1cm4gZnVu
Y3Rpb24oeCkgewotICAgICAgcmV0dXJuIHkubWFwKGZ1bmN0aW9uKHkpIHsKLSAgICAgICAgcmV0
dXJuIFsgeCwgeSBdOwotICAgICAgfSk7Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9f
Z3JhdGljdWxlWSh4MCwgeDEsIGR4KSB7Ci0gICAgdmFyIHggPSBkMy5yYW5nZSh4MCwgeDEgLSDO
tSwgZHgpLmNvbmNhdCh4MSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHsKLSAgICAgIHJldHVy
biB4Lm1hcChmdW5jdGlvbih4KSB7Ci0gICAgICAgIHJldHVybiBbIHgsIHkgXTsKLSAgICAgIH0p
OwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc291cmNlKGQpIHsKLSAgICByZXR1cm4gZC5z
b3VyY2U7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGFyZ2V0KGQpIHsKLSAgICByZXR1cm4gZC50YXJn
ZXQ7Ci0gIH0KLSAgZDMuZ2VvLmdyZWF0QXJjID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNvdXJj
ZSA9IGQzX3NvdXJjZSwgc291cmNlXywgdGFyZ2V0ID0gZDNfdGFyZ2V0LCB0YXJnZXRfOwotICAg
IGZ1bmN0aW9uIGdyZWF0QXJjKCkgewotICAgICAgcmV0dXJuIHsKLSAgICAgICAgdHlwZTogIkxp
bmVTdHJpbmciLAotICAgICAgICBjb29yZGluYXRlczogWyBzb3VyY2VfIHx8IHNvdXJjZS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpLCB0YXJnZXRfIHx8IHRhcmdldC5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpIF0KLSAgICAgIH07Ci0gICAgfQotICAgIGdyZWF0QXJjLmRpc3RhbmNlID0gZnVuY3Rpb24o
KSB7Ci0gICAgICByZXR1cm4gZDMuZ2VvLmRpc3RhbmNlKHNvdXJjZV8gfHwgc291cmNlLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyksIHRhcmdldF8gfHwgdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50
cykpOwotICAgIH07Ci0gICAgZ3JlYXRBcmMuc291cmNlID0gZnVuY3Rpb24oXykgewotICAgICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc291cmNlOwotICAgICAgc291cmNlID0gXywg
c291cmNlXyA9IHR5cGVvZiBfID09PSAiZnVuY3Rpb24iID8gbnVsbCA6IF87Ci0gICAgICByZXR1
cm4gZ3JlYXRBcmM7Ci0gICAgfTsKLSAgICBncmVhdEFyYy50YXJnZXQgPSBmdW5jdGlvbihfKSB7
Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0YXJnZXQ7Ci0gICAgICB0YXJn
ZXQgPSBfLCB0YXJnZXRfID0gdHlwZW9mIF8gPT09ICJmdW5jdGlvbiIgPyBudWxsIDogXzsKLSAg
ICAgIHJldHVybiBncmVhdEFyYzsKLSAgICB9OwotICAgIGdyZWF0QXJjLnByZWNpc2lvbiA9IGZ1
bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBncmVhdEFyYyA6IDA7
Ci0gICAgfTsKLSAgICByZXR1cm4gZ3JlYXRBcmM7Ci0gIH07Ci0gIGQzLmdlby5pbnRlcnBvbGF0
ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7Ci0gICAgcmV0dXJuIGQzX2dlb19pbnRlcnBv
bGF0ZShzb3VyY2VbMF0gKiBkM19yYWRpYW5zLCBzb3VyY2VbMV0gKiBkM19yYWRpYW5zLCB0YXJn
ZXRbMF0gKiBkM19yYWRpYW5zLCB0YXJnZXRbMV0gKiBkM19yYWRpYW5zKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gZDNfZ2VvX2ludGVycG9sYXRlKHgwLCB5MCwgeDEsIHkxKSB7Ci0gICAgdmFyIGN5MCA9
IE1hdGguY29zKHkwKSwgc3kwID0gTWF0aC5zaW4oeTApLCBjeTEgPSBNYXRoLmNvcyh5MSksIHN5
MSA9IE1hdGguc2luKHkxKSwga3gwID0gY3kwICogTWF0aC5jb3MoeDApLCBreTAgPSBjeTAgKiBN
YXRoLnNpbih4MCksIGt4MSA9IGN5MSAqIE1hdGguY29zKHgxKSwga3kxID0gY3kxICogTWF0aC5z
aW4oeDEpLCBkID0gMiAqIE1hdGguYXNpbihNYXRoLnNxcnQoZDNfaGF2ZXJzaW4oeTEgLSB5MCkg
KyBjeTAgKiBjeTEgKiBkM19oYXZlcnNpbih4MSAtIHgwKSkpLCBrID0gMSAvIE1hdGguc2luKGQp
OwotICAgIHZhciBpbnRlcnBvbGF0ZSA9IGQgPyBmdW5jdGlvbih0KSB7Ci0gICAgICB2YXIgQiA9
IE1hdGguc2luKHQgKj0gZCkgKiBrLCBBID0gTWF0aC5zaW4oZCAtIHQpICogaywgeCA9IEEgKiBr
eDAgKyBCICoga3gxLCB5ID0gQSAqIGt5MCArIEIgKiBreTEsIHogPSBBICogc3kwICsgQiAqIHN5
MTsKLSAgICAgIHJldHVybiBbIE1hdGguYXRhbjIoeSwgeCkgKiBkM19kZWdyZWVzLCBNYXRoLmF0
YW4yKHosIE1hdGguc3FydCh4ICogeCArIHkgKiB5KSkgKiBkM19kZWdyZWVzIF07Ci0gICAgfSA6
IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIFsgeDAgKiBkM19kZWdyZWVzLCB5MCAqIGQzX2Rl
Z3JlZXMgXTsKLSAgICB9OwotICAgIGludGVycG9sYXRlLmRpc3RhbmNlID0gZDsKLSAgICByZXR1
cm4gaW50ZXJwb2xhdGU7Ci0gIH0KLSAgZDMuZ2VvLmxlbmd0aCA9IGZ1bmN0aW9uKG9iamVjdCkg
ewotICAgIGQzX2dlb19sZW5ndGhTdW0gPSAwOwotICAgIGQzLmdlby5zdHJlYW0ob2JqZWN0LCBk
M19nZW9fbGVuZ3RoKTsKLSAgICByZXR1cm4gZDNfZ2VvX2xlbmd0aFN1bTsKLSAgfTsKLSAgdmFy
IGQzX2dlb19sZW5ndGhTdW07Ci0gIHZhciBkM19nZW9fbGVuZ3RoID0gewotICAgIHNwaGVyZTog
ZDNfbm9vcCwKLSAgICBwb2ludDogZDNfbm9vcCwKLSAgICBsaW5lU3RhcnQ6IGQzX2dlb19sZW5n
dGhMaW5lU3RhcnQsCi0gICAgbGluZUVuZDogZDNfbm9vcCwKLSAgICBwb2x5Z29uU3RhcnQ6IGQz
X25vb3AsCi0gICAgcG9seWdvbkVuZDogZDNfbm9vcAotICB9OwotICBmdW5jdGlvbiBkM19nZW9f
bGVuZ3RoTGluZVN0YXJ0KCkgewotICAgIHZhciDOuzAsIHNpbs+GMCwgY29zz4YwOwotICAgIGQz
X2dlb19sZW5ndGgucG9pbnQgPSBmdW5jdGlvbijOuywgz4YpIHsKLSAgICAgIM67MCA9IM67ICog
ZDNfcmFkaWFucywgc2luz4YwID0gTWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksIGNvc8+GMCA9
IE1hdGguY29zKM+GKTsKLSAgICAgIGQzX2dlb19sZW5ndGgucG9pbnQgPSBuZXh0UG9pbnQ7Ci0g
ICAgfTsKLSAgICBkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBmdW5jdGlvbigpIHsKLSAgICAgIGQz
X2dlb19sZW5ndGgucG9pbnQgPSBkM19nZW9fbGVuZ3RoLmxpbmVFbmQgPSBkM19ub29wOwotICAg
IH07Ci0gICAgZnVuY3Rpb24gbmV4dFBvaW50KM67LCDPhikgewotICAgICAgdmFyIHNpbs+GID0g
TWF0aC5zaW4oz4YgKj0gZDNfcmFkaWFucyksIGNvc8+GID0gTWF0aC5jb3Moz4YpLCB0ID0gYWJz
KCjOuyAqPSBkM19yYWRpYW5zKSAtIM67MCksIGNvc86UzrsgPSBNYXRoLmNvcyh0KTsKLSAgICAg
IGQzX2dlb19sZW5ndGhTdW0gKz0gTWF0aC5hdGFuMihNYXRoLnNxcnQoKHQgPSBjb3PPhiAqIE1h
dGguc2luKHQpKSAqIHQgKyAodCA9IGNvc8+GMCAqIHNpbs+GIC0gc2luz4YwICogY29zz4YgKiBj
b3POlM67KSAqIHQpLCBzaW7PhjAgKiBzaW7PhiArIGNvc8+GMCAqIGNvc8+GICogY29zzpTOuyk7
Ci0gICAgICDOuzAgPSDOuywgc2luz4YwID0gc2luz4YsIGNvc8+GMCA9IGNvc8+GOwotICAgIH0K
LSAgfQotICBmdW5jdGlvbiBkM19nZW9fYXppbXV0aGFsKHNjYWxlLCBhbmdsZSkgewotICAgIGZ1
bmN0aW9uIGF6aW11dGhhbCjOuywgz4YpIHsKLSAgICAgIHZhciBjb3POuyA9IE1hdGguY29zKM67
KSwgY29zz4YgPSBNYXRoLmNvcyjPhiksIGsgPSBzY2FsZShjb3POuyAqIGNvc8+GKTsKLSAgICAg
IHJldHVybiBbIGsgKiBjb3PPhiAqIE1hdGguc2luKM67KSwgayAqIE1hdGguc2luKM+GKSBdOwot
ICAgIH0KLSAgICBhemltdXRoYWwuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkgewotICAgICAgdmFy
IM+BID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjID0gYW5nbGUoz4EpLCBzaW5jID0gTWF0
aC5zaW4oYyksIGNvc2MgPSBNYXRoLmNvcyhjKTsKLSAgICAgIHJldHVybiBbIE1hdGguYXRhbjIo
eCAqIHNpbmMsIM+BICogY29zYyksIE1hdGguYXNpbijPgSAmJiB5ICogc2luYyAvIM+BKSBdOwot
ICAgIH07Ci0gICAgcmV0dXJuIGF6aW11dGhhbDsKLSAgfQotICB2YXIgZDNfZ2VvX2F6aW11dGhh
bEVxdWFsQXJlYSA9IGQzX2dlb19hemltdXRoYWwoZnVuY3Rpb24oY29zzrtjb3PPhikgewotICAg
IHJldHVybiBNYXRoLnNxcnQoMiAvICgxICsgY29zzrtjb3PPhikpOwotICB9LCBmdW5jdGlvbijP
gSkgewotICAgIHJldHVybiAyICogTWF0aC5hc2luKM+BIC8gMik7Ci0gIH0pOwotICAoZDMuZ2Vv
LmF6aW11dGhhbEVxdWFsQXJlYSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19nZW9fcHJv
amVjdGlvbihkM19nZW9fYXppbXV0aGFsRXF1YWxBcmVhKTsKLSAgfSkucmF3ID0gZDNfZ2VvX2F6
aW11dGhhbEVxdWFsQXJlYTsKLSAgdmFyIGQzX2dlb19hemltdXRoYWxFcXVpZGlzdGFudCA9IGQz
X2dlb19hemltdXRoYWwoZnVuY3Rpb24oY29zzrtjb3PPhikgewotICAgIHZhciBjID0gTWF0aC5h
Y29zKGNvc867Y29zz4YpOwotICAgIHJldHVybiBjICYmIGMgLyBNYXRoLnNpbihjKTsKLSAgfSwg
ZDNfaWRlbnRpdHkpOwotICAoZDMuZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50ID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19hemltdXRoYWxFcXVpZGlz
dGFudCk7Ci0gIH0pLnJhdyA9IGQzX2dlb19hemltdXRoYWxFcXVpZGlzdGFudDsKLSAgZnVuY3Rp
b24gZDNfZ2VvX2NvbmljQ29uZm9ybWFsKM+GMCwgz4YxKSB7Ci0gICAgdmFyIGNvc8+GMCA9IE1h
dGguY29zKM+GMCksIHQgPSBmdW5jdGlvbijPhikgewotICAgICAgcmV0dXJuIE1hdGgudGFuKM+A
IC8gNCArIM+GIC8gMik7Ci0gICAgfSwgbiA9IM+GMCA9PT0gz4YxID8gTWF0aC5zaW4oz4YwKSA6
IE1hdGgubG9nKGNvc8+GMCAvIE1hdGguY29zKM+GMSkpIC8gTWF0aC5sb2codCjPhjEpIC8gdCjP
hjApKSwgRiA9IGNvc8+GMCAqIE1hdGgucG93KHQoz4YwKSwgbikgLyBuOwotICAgIGlmICghbikg
cmV0dXJuIGQzX2dlb19tZXJjYXRvcjsKLSAgICBmdW5jdGlvbiBmb3J3YXJkKM67LCDPhikgewot
ICAgICAgaWYgKEYgPiAwKSB7Ci0gICAgICAgIGlmICjPhiA8IC1oYWxmz4AgKyDOtSkgz4YgPSAt
aGFsZs+AICsgzrU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoz4YgPiBoYWxmz4AgLSDO
tSkgz4YgPSBoYWxmz4AgLSDOtTsKLSAgICAgIH0KLSAgICAgIHZhciDPgSA9IEYgLyBNYXRoLnBv
dyh0KM+GKSwgbik7Ci0gICAgICByZXR1cm4gWyDPgSAqIE1hdGguc2luKG4gKiDOuyksIEYgLSDP
gSAqIE1hdGguY29zKG4gKiDOuykgXTsKLSAgICB9Ci0gICAgZm9yd2FyZC5pbnZlcnQgPSBmdW5j
dGlvbih4LCB5KSB7Ci0gICAgICB2YXIgz4EwX3kgPSBGIC0geSwgz4EgPSBkM19zZ24obikgKiBN
YXRoLnNxcnQoeCAqIHggKyDPgTBfeSAqIM+BMF95KTsKLSAgICAgIHJldHVybiBbIE1hdGguYXRh
bjIoeCwgz4EwX3kpIC8gbiwgMiAqIE1hdGguYXRhbihNYXRoLnBvdyhGIC8gz4EsIDEgLyBuKSkg
LSBoYWxmz4AgXTsKLSAgICB9OwotICAgIHJldHVybiBmb3J3YXJkOwotICB9Ci0gIChkMy5nZW8u
Y29uaWNDb25mb3JtYWwgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfZ2VvX2NvbmljKGQz
X2dlb19jb25pY0NvbmZvcm1hbCk7Ci0gIH0pLnJhdyA9IGQzX2dlb19jb25pY0NvbmZvcm1hbDsK
LSAgZnVuY3Rpb24gZDNfZ2VvX2NvbmljRXF1aWRpc3RhbnQoz4YwLCDPhjEpIHsKLSAgICB2YXIg
Y29zz4YwID0gTWF0aC5jb3Moz4YwKSwgbiA9IM+GMCA9PT0gz4YxID8gTWF0aC5zaW4oz4YwKSA6
IChjb3PPhjAgLSBNYXRoLmNvcyjPhjEpKSAvICjPhjEgLSDPhjApLCBHID0gY29zz4YwIC8gbiAr
IM+GMDsKLSAgICBpZiAoYWJzKG4pIDwgzrUpIHJldHVybiBkM19nZW9fZXF1aXJlY3Rhbmd1bGFy
OwotICAgIGZ1bmN0aW9uIGZvcndhcmQozrssIM+GKSB7Ci0gICAgICB2YXIgz4EgPSBHIC0gz4Y7
Ci0gICAgICByZXR1cm4gWyDPgSAqIE1hdGguc2luKG4gKiDOuyksIEcgLSDPgSAqIE1hdGguY29z
KG4gKiDOuykgXTsKLSAgICB9Ci0gICAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7
Ci0gICAgICB2YXIgz4EwX3kgPSBHIC0geTsKLSAgICAgIHJldHVybiBbIE1hdGguYXRhbjIoeCwg
z4EwX3kpIC8gbiwgRyAtIGQzX3NnbihuKSAqIE1hdGguc3FydCh4ICogeCArIM+BMF95ICogz4Ew
X3kpIF07Ci0gICAgfTsKLSAgICByZXR1cm4gZm9yd2FyZDsKLSAgfQotICAoZDMuZ2VvLmNvbmlj
RXF1aWRpc3RhbnQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfZ2VvX2NvbmljKGQzX2dl
b19jb25pY0VxdWlkaXN0YW50KTsKLSAgfSkucmF3ID0gZDNfZ2VvX2NvbmljRXF1aWRpc3RhbnQ7
Ci0gIHZhciBkM19nZW9fZ25vbW9uaWMgPSBkM19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKGNvc867
Y29zz4YpIHsKLSAgICByZXR1cm4gMSAvIGNvc867Y29zz4Y7Ci0gIH0sIE1hdGguYXRhbik7Ci0g
IChkMy5nZW8uZ25vbW9uaWMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfZ2VvX3Byb2pl
Y3Rpb24oZDNfZ2VvX2dub21vbmljKTsKLSAgfSkucmF3ID0gZDNfZ2VvX2dub21vbmljOwotICBm
dW5jdGlvbiBkM19nZW9fbWVyY2F0b3IozrssIM+GKSB7Ci0gICAgcmV0dXJuIFsgzrssIE1hdGgu
bG9nKE1hdGgudGFuKM+AIC8gNCArIM+GIC8gMikpIF07Ci0gIH0KLSAgZDNfZ2VvX21lcmNhdG9y
LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHsKLSAgICByZXR1cm4gWyB4LCAyICogTWF0aC5hdGFu
KE1hdGguZXhwKHkpKSAtIGhhbGbPgCBdOwotICB9OwotICBmdW5jdGlvbiBkM19nZW9fbWVyY2F0
b3JQcm9qZWN0aW9uKHByb2plY3QpIHsKLSAgICB2YXIgbSA9IGQzX2dlb19wcm9qZWN0aW9uKHBy
b2plY3QpLCBzY2FsZSA9IG0uc2NhbGUsIHRyYW5zbGF0ZSA9IG0udHJhbnNsYXRlLCBjbGlwRXh0
ZW50ID0gbS5jbGlwRXh0ZW50LCBjbGlwQXV0bzsKLSAgICBtLnNjYWxlID0gZnVuY3Rpb24oKSB7
Ci0gICAgICB2YXIgdiA9IHNjYWxlLmFwcGx5KG0sIGFyZ3VtZW50cyk7Ci0gICAgICByZXR1cm4g
diA9PT0gbSA/IGNsaXBBdXRvID8gbS5jbGlwRXh0ZW50KG51bGwpIDogbSA6IHY7Ci0gICAgfTsK
LSAgICBtLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHYgPSB0cmFuc2xhdGUu
YXBwbHkobSwgYXJndW1lbnRzKTsKLSAgICAgIHJldHVybiB2ID09PSBtID8gY2xpcEF1dG8gPyBt
LmNsaXBFeHRlbnQobnVsbCkgOiBtIDogdjsKLSAgICB9OwotICAgIG0uY2xpcEV4dGVudCA9IGZ1
bmN0aW9uKF8pIHsKLSAgICAgIHZhciB2ID0gY2xpcEV4dGVudC5hcHBseShtLCBhcmd1bWVudHMp
OwotICAgICAgaWYgKHYgPT09IG0pIHsKLSAgICAgICAgaWYgKGNsaXBBdXRvID0gXyA9PSBudWxs
KSB7Ci0gICAgICAgICAgdmFyIGsgPSDPgCAqIHNjYWxlKCksIHQgPSB0cmFuc2xhdGUoKTsKLSAg
ICAgICAgICBjbGlwRXh0ZW50KFsgWyB0WzBdIC0gaywgdFsxXSAtIGsgXSwgWyB0WzBdICsgaywg
dFsxXSArIGsgXSBdKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChjbGlwQXV0bykgewot
ICAgICAgICB2ID0gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2OwotICAgIH07Ci0gICAg
cmV0dXJuIG0uY2xpcEV4dGVudChudWxsKTsKLSAgfQotICAoZDMuZ2VvLm1lcmNhdG9yID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzX2dlb19tZXJjYXRvclByb2plY3Rpb24oZDNfZ2VvX21l
cmNhdG9yKTsKLSAgfSkucmF3ID0gZDNfZ2VvX21lcmNhdG9yOwotICB2YXIgZDNfZ2VvX29ydGhv
Z3JhcGhpYyA9IGQzX2dlb19hemltdXRoYWwoZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIDE7Ci0g
IH0sIE1hdGguYXNpbik7Ci0gIChkMy5nZW8ub3J0aG9ncmFwaGljID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19vcnRob2dyYXBoaWMpOwotICB9KS5y
YXcgPSBkM19nZW9fb3J0aG9ncmFwaGljOwotICB2YXIgZDNfZ2VvX3N0ZXJlb2dyYXBoaWMgPSBk
M19nZW9fYXppbXV0aGFsKGZ1bmN0aW9uKGNvc867Y29zz4YpIHsKLSAgICByZXR1cm4gMSAvICgx
ICsgY29zzrtjb3PPhik7Ci0gIH0sIGZ1bmN0aW9uKM+BKSB7Ci0gICAgcmV0dXJuIDIgKiBNYXRo
LmF0YW4oz4EpOwotICB9KTsKLSAgKGQzLmdlby5zdGVyZW9ncmFwaGljID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIGQzX2dlb19wcm9qZWN0aW9uKGQzX2dlb19zdGVyZW9ncmFwaGljKTsKLSAg
fSkucmF3ID0gZDNfZ2VvX3N0ZXJlb2dyYXBoaWM7Ci0gIGZ1bmN0aW9uIGQzX2dlb190cmFuc3Zl
cnNlTWVyY2F0b3IozrssIM+GKSB7Ci0gICAgcmV0dXJuIFsgTWF0aC5sb2coTWF0aC50YW4oz4Ag
LyA0ICsgz4YgLyAyKSksIC3OuyBdOwotICB9Ci0gIGQzX2dlb190cmFuc3ZlcnNlTWVyY2F0b3Iu
aW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkgewotICAgIHJldHVybiBbIC15LCAyICogTWF0aC5hdGFu
KE1hdGguZXhwKHgpKSAtIGhhbGbPgCBdOwotICB9OwotICAoZDMuZ2VvLnRyYW5zdmVyc2VNZXJj
YXRvciA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwcm9qZWN0aW9uID0gZDNfZ2VvX21lcmNhdG9y
UHJvamVjdGlvbihkM19nZW9fdHJhbnN2ZXJzZU1lcmNhdG9yKSwgY2VudGVyID0gcHJvamVjdGlv
bi5jZW50ZXIsIHJvdGF0ZSA9IHByb2plY3Rpb24ucm90YXRlOwotICAgIHByb2plY3Rpb24uY2Vu
dGVyID0gZnVuY3Rpb24oXykgewotICAgICAgcmV0dXJuIF8gPyBjZW50ZXIoWyAtX1sxXSwgX1sw
XSBdKSA6IChfID0gY2VudGVyKCksIFsgX1sxXSwgLV9bMF0gXSk7Ci0gICAgfTsKLSAgICBwcm9q
ZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVybiBfID8gcm90YXRlKFsg
X1swXSwgX1sxXSwgXy5sZW5ndGggPiAyID8gX1syXSArIDkwIDogOTAgXSkgOiAoXyA9IHJvdGF0
ZSgpLCAKLSAgICAgIFsgX1swXSwgX1sxXSwgX1syXSAtIDkwIF0pOwotICAgIH07Ci0gICAgcmV0
dXJuIHJvdGF0ZShbIDAsIDAsIDkwIF0pOwotICB9KS5yYXcgPSBkM19nZW9fdHJhbnN2ZXJzZU1l
cmNhdG9yOwotICBkMy5nZW9tID0ge307Ci0gIGZ1bmN0aW9uIGQzX2dlb21fcG9pbnRYKGQpIHsK
LSAgICByZXR1cm4gZFswXTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3BvaW50WShkKSB7Ci0g
ICAgcmV0dXJuIGRbMV07Ci0gIH0KLSAgZDMuZ2VvbS5odWxsID0gZnVuY3Rpb24odmVydGljZXMp
IHsKLSAgICB2YXIgeCA9IGQzX2dlb21fcG9pbnRYLCB5ID0gZDNfZ2VvbV9wb2ludFk7Ci0gICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBodWxsKHZlcnRpY2VzKTsKLSAgICBmdW5jdGlv
biBodWxsKGRhdGEpIHsKLSAgICAgIGlmIChkYXRhLmxlbmd0aCA8IDMpIHJldHVybiBbXTsKLSAg
ICAgIHZhciBmeCA9IGQzX2Z1bmN0b3IoeCksIGZ5ID0gZDNfZnVuY3Rvcih5KSwgaSwgbiA9IGRh
dGEubGVuZ3RoLCBwb2ludHMgPSBbXSwgZmxpcHBlZFBvaW50cyA9IFtdOwotICAgICAgZm9yIChp
ID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBwb2ludHMucHVzaChbICtmeC5jYWxsKHRoaXMs
IGRhdGFbaV0sIGkpLCArZnkuY2FsbCh0aGlzLCBkYXRhW2ldLCBpKSwgaSBdKTsKLSAgICAgIH0K
LSAgICAgIHBvaW50cy5zb3J0KGQzX2dlb21faHVsbE9yZGVyKTsKLSAgICAgIGZvciAoaSA9IDA7
IGkgPCBuOyBpKyspIGZsaXBwZWRQb2ludHMucHVzaChbIHBvaW50c1tpXVswXSwgLXBvaW50c1tp
XVsxXSBdKTsKLSAgICAgIHZhciB1cHBlciA9IGQzX2dlb21faHVsbFVwcGVyKHBvaW50cyksIGxv
d2VyID0gZDNfZ2VvbV9odWxsVXBwZXIoZmxpcHBlZFBvaW50cyk7Ci0gICAgICB2YXIgc2tpcExl
ZnQgPSBsb3dlclswXSA9PT0gdXBwZXJbMF0sIHNraXBSaWdodCA9IGxvd2VyW2xvd2VyLmxlbmd0
aCAtIDFdID09PSB1cHBlclt1cHBlci5sZW5ndGggLSAxXSwgcG9seWdvbiA9IFtdOwotICAgICAg
Zm9yIChpID0gdXBwZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHBvbHlnb24ucHVzaChkYXRh
W3BvaW50c1t1cHBlcltpXV1bMl1dKTsKLSAgICAgIGZvciAoaSA9ICtza2lwTGVmdDsgaSA8IGxv
d2VyLmxlbmd0aCAtIHNraXBSaWdodDsgKytpKSBwb2x5Z29uLnB1c2goZGF0YVtwb2ludHNbbG93
ZXJbaV1dWzJdXSk7Ci0gICAgICByZXR1cm4gcG9seWdvbjsKLSAgICB9Ci0gICAgaHVsbC54ID0g
ZnVuY3Rpb24oXykgewotICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IF8sIGh1
bGwpIDogeDsKLSAgICB9OwotICAgIGh1bGwueSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVy
biBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSBfLCBodWxsKSA6IHk7Ci0gICAgfTsKLSAgICByZXR1
cm4gaHVsbDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvbV9odWxsVXBwZXIocG9pbnRzKSB7Ci0g
ICAgdmFyIG4gPSBwb2ludHMubGVuZ3RoLCBodWxsID0gWyAwLCAxIF0sIGhzID0gMjsKLSAgICBm
b3IgKHZhciBpID0gMjsgaSA8IG47IGkrKykgewotICAgICAgd2hpbGUgKGhzID4gMSAmJiBkM19j
cm9zczJkKHBvaW50c1todWxsW2hzIC0gMl1dLCBwb2ludHNbaHVsbFtocyAtIDFdXSwgcG9pbnRz
W2ldKSA8PSAwKSAtLWhzOwotICAgICAgaHVsbFtocysrXSA9IGk7Ci0gICAgfQotICAgIHJldHVy
biBodWxsLnNsaWNlKDAsIGhzKTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX2h1bGxPcmRlcihh
LCBiKSB7Ci0gICAgcmV0dXJuIGFbMF0gLSBiWzBdIHx8IGFbMV0gLSBiWzFdOwotICB9Ci0gIGQz
Lmdlb20ucG9seWdvbiA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7Ci0gICAgZDNfc3ViY2xhc3Mo
Y29vcmRpbmF0ZXMsIGQzX2dlb21fcG9seWdvblByb3RvdHlwZSk7Ci0gICAgcmV0dXJuIGNvb3Jk
aW5hdGVzOwotICB9OwotICB2YXIgZDNfZ2VvbV9wb2x5Z29uUHJvdG90eXBlID0gZDMuZ2VvbS5w
b2x5Z29uLnByb3RvdHlwZSA9IFtdOwotICBkM19nZW9tX3BvbHlnb25Qcm90b3R5cGUuYXJlYSA9
IGZ1bmN0aW9uKCkgewotICAgIHZhciBpID0gLTEsIG4gPSB0aGlzLmxlbmd0aCwgYSwgYiA9IHRo
aXNbbiAtIDFdLCBhcmVhID0gMDsKLSAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgYSA9IGI7
Ci0gICAgICBiID0gdGhpc1tpXTsKLSAgICAgIGFyZWEgKz0gYVsxXSAqIGJbMF0gLSBhWzBdICog
YlsxXTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZWEgKiAuNTsKLSAgfTsKLSAgZDNfZ2VvbV9wb2x5
Z29uUHJvdG90eXBlLmNlbnRyb2lkID0gZnVuY3Rpb24oaykgewotICAgIHZhciBpID0gLTEsIG4g
PSB0aGlzLmxlbmd0aCwgeCA9IDAsIHkgPSAwLCBhLCBiID0gdGhpc1tuIC0gMV0sIGM7Ci0gICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSBrID0gLTEgLyAoNiAqIHRoaXMuYXJlYSgpKTsKLSAgICB3
aGlsZSAoKytpIDwgbikgewotICAgICAgYSA9IGI7Ci0gICAgICBiID0gdGhpc1tpXTsKLSAgICAg
IGMgPSBhWzBdICogYlsxXSAtIGJbMF0gKiBhWzFdOwotICAgICAgeCArPSAoYVswXSArIGJbMF0p
ICogYzsKLSAgICAgIHkgKz0gKGFbMV0gKyBiWzFdKSAqIGM7Ci0gICAgfQotICAgIHJldHVybiBb
IHggKiBrLCB5ICogayBdOwotICB9OwotICBkM19nZW9tX3BvbHlnb25Qcm90b3R5cGUuY2xpcCA9
IGZ1bmN0aW9uKHN1YmplY3QpIHsKLSAgICB2YXIgaW5wdXQsIGNsb3NlZCA9IGQzX2dlb21fcG9s
eWdvbkNsb3NlZChzdWJqZWN0KSwgaSA9IC0xLCBuID0gdGhpcy5sZW5ndGggLSBkM19nZW9tX3Bv
bHlnb25DbG9zZWQodGhpcyksIGosIG0sIGEgPSB0aGlzW24gLSAxXSwgYiwgYywgZDsKLSAgICB3
aGlsZSAoKytpIDwgbikgewotICAgICAgaW5wdXQgPSBzdWJqZWN0LnNsaWNlKCk7Ci0gICAgICBz
dWJqZWN0Lmxlbmd0aCA9IDA7Ci0gICAgICBiID0gdGhpc1tpXTsKLSAgICAgIGMgPSBpbnB1dFso
bSA9IGlucHV0Lmxlbmd0aCAtIGNsb3NlZCkgLSAxXTsKLSAgICAgIGogPSAtMTsKLSAgICAgIHdo
aWxlICgrK2ogPCBtKSB7Ci0gICAgICAgIGQgPSBpbnB1dFtqXTsKLSAgICAgICAgaWYgKGQzX2dl
b21fcG9seWdvbkluc2lkZShkLCBhLCBiKSkgewotICAgICAgICAgIGlmICghZDNfZ2VvbV9wb2x5
Z29uSW5zaWRlKGMsIGEsIGIpKSB7Ci0gICAgICAgICAgICBzdWJqZWN0LnB1c2goZDNfZ2VvbV9w
b2x5Z29uSW50ZXJzZWN0KGMsIGQsIGEsIGIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3Vi
amVjdC5wdXNoKGQpOwotICAgICAgICB9IGVsc2UgaWYgKGQzX2dlb21fcG9seWdvbkluc2lkZShj
LCBhLCBiKSkgewotICAgICAgICAgIHN1YmplY3QucHVzaChkM19nZW9tX3BvbHlnb25JbnRlcnNl
Y3QoYywgZCwgYSwgYikpOwotICAgICAgICB9Ci0gICAgICAgIGMgPSBkOwotICAgICAgfQotICAg
ICAgaWYgKGNsb3NlZCkgc3ViamVjdC5wdXNoKHN1YmplY3RbMF0pOwotICAgICAgYSA9IGI7Ci0g
ICAgfQotICAgIHJldHVybiBzdWJqZWN0OwotICB9OwotICBmdW5jdGlvbiBkM19nZW9tX3BvbHln
b25JbnNpZGUocCwgYSwgYikgewotICAgIHJldHVybiAoYlswXSAtIGFbMF0pICogKHBbMV0gLSBh
WzFdKSA8IChiWzFdIC0gYVsxXSkgKiAocFswXSAtIGFbMF0pOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2dlb21fcG9seWdvbkludGVyc2VjdChjLCBkLCBhLCBiKSB7Ci0gICAgdmFyIHgxID0gY1swXSwg
eDMgPSBhWzBdLCB4MjEgPSBkWzBdIC0geDEsIHg0MyA9IGJbMF0gLSB4MywgeTEgPSBjWzFdLCB5
MyA9IGFbMV0sIHkyMSA9IGRbMV0gLSB5MSwgeTQzID0gYlsxXSAtIHkzLCB1YSA9ICh4NDMgKiAo
eTEgLSB5MykgLSB5NDMgKiAoeDEgLSB4MykpIC8gKHk0MyAqIHgyMSAtIHg0MyAqIHkyMSk7Ci0g
ICAgcmV0dXJuIFsgeDEgKyB1YSAqIHgyMSwgeTEgKyB1YSAqIHkyMSBdOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2dlb21fcG9seWdvbkNsb3NlZChjb29yZGluYXRlcykgewotICAgIHZhciBhID0gY29v
cmRpbmF0ZXNbMF0sIGIgPSBjb29yZGluYXRlc1tjb29yZGluYXRlcy5sZW5ndGggLSAxXTsKLSAg
ICByZXR1cm4gIShhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXSk7Ci0gIH0KLSAgdmFyIGQzX2dl
b21fdm9yb25vaUVkZ2VzLCBkM19nZW9tX3Zvcm9ub2lDZWxscywgZDNfZ2VvbV92b3Jvbm9pQmVh
Y2hlcywgZDNfZ2VvbV92b3Jvbm9pQmVhY2hQb29sID0gW10sIGQzX2dlb21fdm9yb25vaUZpcnN0
Q2lyY2xlLCBkM19nZW9tX3Zvcm9ub2lDaXJjbGVzLCBkM19nZW9tX3Zvcm9ub2lDaXJjbGVQb29s
ID0gW107Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUJlYWNoKCkgewotICAgIGQzX2dlb21f
dm9yb25vaVJlZEJsYWNrTm9kZSh0aGlzKTsKLSAgICB0aGlzLmVkZ2UgPSB0aGlzLnNpdGUgPSB0
aGlzLmNpcmNsZSA9IG51bGw7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRl
QmVhY2goc2l0ZSkgewotICAgIHZhciBiZWFjaCA9IGQzX2dlb21fdm9yb25vaUJlYWNoUG9vbC5w
b3AoKSB8fCBuZXcgZDNfZ2VvbV92b3Jvbm9pQmVhY2goKTsKLSAgICBiZWFjaC5zaXRlID0gc2l0
ZTsKLSAgICByZXR1cm4gYmVhY2g7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pRGV0
YWNoQmVhY2goYmVhY2gpIHsKLSAgICBkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUoYmVhY2gp
OwotICAgIGQzX2dlb21fdm9yb25vaUJlYWNoZXMucmVtb3ZlKGJlYWNoKTsKLSAgICBkM19nZW9t
X3Zvcm9ub2lCZWFjaFBvb2wucHVzaChiZWFjaCk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxh
Y2tOb2RlKGJlYWNoKTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZW1vdmVCZWFj
aChiZWFjaCkgewotICAgIHZhciBjaXJjbGUgPSBiZWFjaC5jaXJjbGUsIHggPSBjaXJjbGUueCwg
eSA9IGNpcmNsZS5jeSwgdmVydGV4ID0gewotICAgICAgeDogeCwKLSAgICAgIHk6IHkKLSAgICB9
LCBwcmV2aW91cyA9IGJlYWNoLlAsIG5leHQgPSBiZWFjaC5OLCBkaXNhcHBlYXJpbmcgPSBbIGJl
YWNoIF07Ci0gICAgZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQmVhY2goYmVhY2gpOwotICAgIHZhciBs
QXJjID0gcHJldmlvdXM7Ci0gICAgd2hpbGUgKGxBcmMuY2lyY2xlICYmIGFicyh4IC0gbEFyYy5j
aXJjbGUueCkgPCDOtSAmJiBhYnMoeSAtIGxBcmMuY2lyY2xlLmN5KSA8IM61KSB7Ci0gICAgICBw
cmV2aW91cyA9IGxBcmMuUDsKLSAgICAgIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpOwotICAg
ICAgZDNfZ2VvbV92b3Jvbm9pRGV0YWNoQmVhY2gobEFyYyk7Ci0gICAgICBsQXJjID0gcHJldmlv
dXM7Ci0gICAgfQotICAgIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpOwotICAgIGQzX2dlb21f
dm9yb25vaURldGFjaENpcmNsZShsQXJjKTsKLSAgICB2YXIgckFyYyA9IG5leHQ7Ci0gICAgd2hp
bGUgKHJBcmMuY2lyY2xlICYmIGFicyh4IC0gckFyYy5jaXJjbGUueCkgPCDOtSAmJiBhYnMoeSAt
IHJBcmMuY2lyY2xlLmN5KSA8IM61KSB7Ci0gICAgICBuZXh0ID0gckFyYy5OOwotICAgICAgZGlz
YXBwZWFyaW5nLnB1c2gockFyYyk7Ci0gICAgICBkM19nZW9tX3Zvcm9ub2lEZXRhY2hCZWFjaChy
QXJjKTsKLSAgICAgIHJBcmMgPSBuZXh0OwotICAgIH0KLSAgICBkaXNhcHBlYXJpbmcucHVzaChy
QXJjKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUockFyYyk7Ci0gICAgdmFyIG5B
cmNzID0gZGlzYXBwZWFyaW5nLmxlbmd0aCwgaUFyYzsKLSAgICBmb3IgKGlBcmMgPSAxOyBpQXJj
IDwgbkFyY3M7ICsraUFyYykgewotICAgICAgckFyYyA9IGRpc2FwcGVhcmluZ1tpQXJjXTsKLSAg
ICAgIGxBcmMgPSBkaXNhcHBlYXJpbmdbaUFyYyAtIDFdOwotICAgICAgZDNfZ2VvbV92b3Jvbm9p
U2V0RWRnZUVuZChyQXJjLmVkZ2UsIGxBcmMuc2l0ZSwgckFyYy5zaXRlLCB2ZXJ0ZXgpOwotICAg
IH0KLSAgICBsQXJjID0gZGlzYXBwZWFyaW5nWzBdOwotICAgIHJBcmMgPSBkaXNhcHBlYXJpbmdb
bkFyY3MgLSAxXTsKLSAgICByQXJjLmVkZ2UgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVFZGdlKGxB
cmMuc2l0ZSwgckFyYy5zaXRlLCBudWxsLCB2ZXJ0ZXgpOwotICAgIGQzX2dlb21fdm9yb25vaUF0
dGFjaENpcmNsZShsQXJjKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUockFyYyk7
Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQWRkQmVhY2goc2l0ZSkgewotICAgIHZh
ciB4ID0gc2l0ZS54LCBkaXJlY3RyaXggPSBzaXRlLnksIGxBcmMsIHJBcmMsIGR4bCwgZHhyLCBu
b2RlID0gZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcy5fOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICBkeGwgPSBkM19nZW9tX3Zvcm9ub2lMZWZ0QnJlYWtQb2ludChub2RlLCBkaXJlY3RyaXgpIC0g
eDsKLSAgICAgIGlmIChkeGwgPiDOtSkgbm9kZSA9IG5vZGUuTDsgZWxzZSB7Ci0gICAgICAgIGR4
ciA9IHggLSBkM19nZW9tX3Zvcm9ub2lSaWdodEJyZWFrUG9pbnQobm9kZSwgZGlyZWN0cml4KTsK
LSAgICAgICAgaWYgKGR4ciA+IM61KSB7Ci0gICAgICAgICAgaWYgKCFub2RlLlIpIHsKLSAgICAg
ICAgICAgIGxBcmMgPSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIG5vZGUgPSBub2RlLlI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGR4
bCA+IC3OtSkgewotICAgICAgICAgICAgbEFyYyA9IG5vZGUuUDsKLSAgICAgICAgICAgIHJBcmMg
PSBub2RlOwotICAgICAgICAgIH0gZWxzZSBpZiAoZHhyID4gLc61KSB7Ci0gICAgICAgICAgICBs
QXJjID0gbm9kZTsKLSAgICAgICAgICAgIHJBcmMgPSBub2RlLk47Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGxBcmMgPSByQXJjID0gbm9kZTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgdmFyIG5ld0FyYyA9IGQz
X2dlb21fdm9yb25vaUNyZWF0ZUJlYWNoKHNpdGUpOwotICAgIGQzX2dlb21fdm9yb25vaUJlYWNo
ZXMuaW5zZXJ0KGxBcmMsIG5ld0FyYyk7Ci0gICAgaWYgKCFsQXJjICYmICFyQXJjKSByZXR1cm47
Ci0gICAgaWYgKGxBcmMgPT09IHJBcmMpIHsKLSAgICAgIGQzX2dlb21fdm9yb25vaURldGFjaENp
cmNsZShsQXJjKTsKLSAgICAgIHJBcmMgPSBkM19nZW9tX3Zvcm9ub2lDcmVhdGVCZWFjaChsQXJj
LnNpdGUpOwotICAgICAgZDNfZ2VvbV92b3Jvbm9pQmVhY2hlcy5pbnNlcnQobmV3QXJjLCByQXJj
KTsKLSAgICAgIG5ld0FyYy5lZGdlID0gckFyYy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRl
RWRnZShsQXJjLnNpdGUsIG5ld0FyYy5zaXRlKTsKLSAgICAgIGQzX2dlb21fdm9yb25vaUF0dGFj
aENpcmNsZShsQXJjKTsKLSAgICAgIGQzX2dlb21fdm9yb25vaUF0dGFjaENpcmNsZShyQXJjKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFyQXJjKSB7Ci0gICAgICBuZXdBcmMuZWRn
ZSA9IGQzX2dlb21fdm9yb25vaUNyZWF0ZUVkZ2UobEFyYy5zaXRlLCBuZXdBcmMuc2l0ZSk7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGQzX2dlb21fdm9yb25vaURldGFjaENpcmNsZShsQXJj
KTsKLSAgICBkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUockFyYyk7Ci0gICAgdmFyIGxTaXRl
ID0gbEFyYy5zaXRlLCBheCA9IGxTaXRlLngsIGF5ID0gbFNpdGUueSwgYnggPSBzaXRlLnggLSBh
eCwgYnkgPSBzaXRlLnkgLSBheSwgclNpdGUgPSByQXJjLnNpdGUsIGN4ID0gclNpdGUueCAtIGF4
LCBjeSA9IHJTaXRlLnkgLSBheSwgZCA9IDIgKiAoYnggKiBjeSAtIGJ5ICogY3gpLCBoYiA9IGJ4
ICogYnggKyBieSAqIGJ5LCBoYyA9IGN4ICogY3ggKyBjeSAqIGN5LCB2ZXJ0ZXggPSB7Ci0gICAg
ICB4OiAoY3kgKiBoYiAtIGJ5ICogaGMpIC8gZCArIGF4LAotICAgICAgeTogKGJ4ICogaGMgLSBj
eCAqIGhiKSAvIGQgKyBheQotICAgIH07Ci0gICAgZDNfZ2VvbV92b3Jvbm9pU2V0RWRnZUVuZChy
QXJjLmVkZ2UsIGxTaXRlLCByU2l0ZSwgdmVydGV4KTsKLSAgICBuZXdBcmMuZWRnZSA9IGQzX2dl
b21fdm9yb25vaUNyZWF0ZUVkZ2UobFNpdGUsIHNpdGUsIG51bGwsIHZlcnRleCk7Ci0gICAgckFy
Yy5lZGdlID0gZDNfZ2VvbV92b3Jvbm9pQ3JlYXRlRWRnZShzaXRlLCByU2l0ZSwgbnVsbCwgdmVy
dGV4KTsKLSAgICBkM19nZW9tX3Zvcm9ub2lBdHRhY2hDaXJjbGUobEFyYyk7Ci0gICAgZDNfZ2Vv
bV92b3Jvbm9pQXR0YWNoQ2lyY2xlKHJBcmMpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9y
b25vaUxlZnRCcmVha1BvaW50KGFyYywgZGlyZWN0cml4KSB7Ci0gICAgdmFyIHNpdGUgPSBhcmMu
c2l0ZSwgcmZvY3ggPSBzaXRlLngsIHJmb2N5ID0gc2l0ZS55LCBwYnkyID0gcmZvY3kgLSBkaXJl
Y3RyaXg7Ci0gICAgaWYgKCFwYnkyKSByZXR1cm4gcmZvY3g7Ci0gICAgdmFyIGxBcmMgPSBhcmMu
UDsKLSAgICBpZiAoIWxBcmMpIHJldHVybiAtSW5maW5pdHk7Ci0gICAgc2l0ZSA9IGxBcmMuc2l0
ZTsKLSAgICB2YXIgbGZvY3ggPSBzaXRlLngsIGxmb2N5ID0gc2l0ZS55LCBwbGJ5MiA9IGxmb2N5
IC0gZGlyZWN0cml4OwotICAgIGlmICghcGxieTIpIHJldHVybiBsZm9jeDsKLSAgICB2YXIgaGwg
PSBsZm9jeCAtIHJmb2N4LCBhYnkyID0gMSAvIHBieTIgLSAxIC8gcGxieTIsIGIgPSBobCAvIHBs
YnkyOwotICAgIGlmIChhYnkyKSByZXR1cm4gKC1iICsgTWF0aC5zcXJ0KGIgKiBiIC0gMiAqIGFi
eTIgKiAoaGwgKiBobCAvICgtMiAqIHBsYnkyKSAtIGxmb2N5ICsgcGxieTIgLyAyICsgcmZvY3kg
LSBwYnkyIC8gMikpKSAvIGFieTIgKyByZm9jeDsKLSAgICByZXR1cm4gKHJmb2N4ICsgbGZvY3gp
IC8gMjsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSaWdodEJyZWFrUG9pbnQoYXJj
LCBkaXJlY3RyaXgpIHsKLSAgICB2YXIgckFyYyA9IGFyYy5OOwotICAgIGlmIChyQXJjKSByZXR1
cm4gZDNfZ2VvbV92b3Jvbm9pTGVmdEJyZWFrUG9pbnQockFyYywgZGlyZWN0cml4KTsKLSAgICB2
YXIgc2l0ZSA9IGFyYy5zaXRlOwotICAgIHJldHVybiBzaXRlLnkgPT09IGRpcmVjdHJpeCA/IHNp
dGUueCA6IEluZmluaXR5OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNlbGwoc2l0
ZSkgewotICAgIHRoaXMuc2l0ZSA9IHNpdGU7Ci0gICAgdGhpcy5lZGdlcyA9IFtdOwotICB9Ci0g
IGQzX2dlb21fdm9yb25vaUNlbGwucHJvdG90eXBlLnByZXBhcmUgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgaGFsZkVkZ2VzID0gdGhpcy5lZGdlcywgaUhhbGZFZGdlID0gaGFsZkVkZ2VzLmxlbmd0
aCwgZWRnZTsKLSAgICB3aGlsZSAoaUhhbGZFZGdlLS0pIHsKLSAgICAgIGVkZ2UgPSBoYWxmRWRn
ZXNbaUhhbGZFZGdlXS5lZGdlOwotICAgICAgaWYgKCFlZGdlLmIgfHwgIWVkZ2UuYSkgaGFsZkVk
Z2VzLnNwbGljZShpSGFsZkVkZ2UsIDEpOwotICAgIH0KLSAgICBoYWxmRWRnZXMuc29ydChkM19n
ZW9tX3Zvcm9ub2lIYWxmRWRnZU9yZGVyKTsKLSAgICByZXR1cm4gaGFsZkVkZ2VzLmxlbmd0aDsK
LSAgfTsKLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQ2xvc2VDZWxscyhleHRlbnQpIHsKLSAg
ICB2YXIgeDAgPSBleHRlbnRbMF1bMF0sIHgxID0gZXh0ZW50WzFdWzBdLCB5MCA9IGV4dGVudFsw
XVsxXSwgeTEgPSBleHRlbnRbMV1bMV0sIHgyLCB5MiwgeDMsIHkzLCBjZWxscyA9IGQzX2dlb21f
dm9yb25vaUNlbGxzLCBpQ2VsbCA9IGNlbGxzLmxlbmd0aCwgY2VsbCwgaUhhbGZFZGdlLCBoYWxm
RWRnZXMsIG5IYWxmRWRnZXMsIHN0YXJ0LCBlbmQ7Ci0gICAgd2hpbGUgKGlDZWxsLS0pIHsKLSAg
ICAgIGNlbGwgPSBjZWxsc1tpQ2VsbF07Ci0gICAgICBpZiAoIWNlbGwgfHwgIWNlbGwucHJlcGFy
ZSgpKSBjb250aW51ZTsKLSAgICAgIGhhbGZFZGdlcyA9IGNlbGwuZWRnZXM7Ci0gICAgICBuSGFs
ZkVkZ2VzID0gaGFsZkVkZ2VzLmxlbmd0aDsKLSAgICAgIGlIYWxmRWRnZSA9IDA7Ci0gICAgICB3
aGlsZSAoaUhhbGZFZGdlIDwgbkhhbGZFZGdlcykgewotICAgICAgICBlbmQgPSBoYWxmRWRnZXNb
aUhhbGZFZGdlXS5lbmQoKSwgeDMgPSBlbmQueCwgeTMgPSBlbmQueTsKLSAgICAgICAgc3RhcnQg
PSBoYWxmRWRnZXNbKytpSGFsZkVkZ2UgJSBuSGFsZkVkZ2VzXS5zdGFydCgpLCB4MiA9IHN0YXJ0
LngsIHkyID0gc3RhcnQueTsKLSAgICAgICAgaWYgKGFicyh4MyAtIHgyKSA+IM61IHx8IGFicyh5
MyAtIHkyKSA+IM61KSB7Ci0gICAgICAgICAgaGFsZkVkZ2VzLnNwbGljZShpSGFsZkVkZ2UsIDAs
IG5ldyBkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZShkM19nZW9tX3Zvcm9ub2lDcmVhdGVCb3JkZXJF
ZGdlKGNlbGwuc2l0ZSwgZW5kLCBhYnMoeDMgLSB4MCkgPCDOtSAmJiB5MSAtIHkzID4gzrUgPyB7
Ci0gICAgICAgICAgICB4OiB4MCwKLSAgICAgICAgICAgIHk6IGFicyh4MiAtIHgwKSA8IM61ID8g
eTIgOiB5MQotICAgICAgICAgIH0gOiBhYnMoeTMgLSB5MSkgPCDOtSAmJiB4MSAtIHgzID4gzrUg
PyB7Ci0gICAgICAgICAgICB4OiBhYnMoeTIgLSB5MSkgPCDOtSA/IHgyIDogeDEsCi0gICAgICAg
ICAgICB5OiB5MQotICAgICAgICAgIH0gOiBhYnMoeDMgLSB4MSkgPCDOtSAmJiB5MyAtIHkwID4g
zrUgPyB7Ci0gICAgICAgICAgICB4OiB4MSwKLSAgICAgICAgICAgIHk6IGFicyh4MiAtIHgxKSA8
IM61ID8geTIgOiB5MAotICAgICAgICAgIH0gOiBhYnMoeTMgLSB5MCkgPCDOtSAmJiB4MyAtIHgw
ID4gzrUgPyB7Ci0gICAgICAgICAgICB4OiBhYnMoeTIgLSB5MCkgPCDOtSA/IHgyIDogeDAsCi0g
ICAgICAgICAgICB5OiB5MAotICAgICAgICAgIH0gOiBudWxsKSwgY2VsbC5zaXRlLCBudWxsKSk7
Ci0gICAgICAgICAgKytuSGFsZkVkZ2VzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUhhbGZFZGdlT3JkZXIoYSwgYikgewotICAgIHJl
dHVybiBiLmFuZ2xlIC0gYS5hbmdsZTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lD
aXJjbGUoKSB7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKHRoaXMpOwotICAgIHRo
aXMueCA9IHRoaXMueSA9IHRoaXMuYXJjID0gdGhpcy5zaXRlID0gdGhpcy5jeSA9IG51bGw7Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pQXR0YWNoQ2lyY2xlKGFyYykgewotICAgIHZh
ciBsQXJjID0gYXJjLlAsIHJBcmMgPSBhcmMuTjsKLSAgICBpZiAoIWxBcmMgfHwgIXJBcmMpIHJl
dHVybjsKLSAgICB2YXIgbFNpdGUgPSBsQXJjLnNpdGUsIGNTaXRlID0gYXJjLnNpdGUsIHJTaXRl
ID0gckFyYy5zaXRlOwotICAgIGlmIChsU2l0ZSA9PT0gclNpdGUpIHJldHVybjsKLSAgICB2YXIg
YnggPSBjU2l0ZS54LCBieSA9IGNTaXRlLnksIGF4ID0gbFNpdGUueCAtIGJ4LCBheSA9IGxTaXRl
LnkgLSBieSwgY3ggPSByU2l0ZS54IC0gYngsIGN5ID0gclNpdGUueSAtIGJ5OwotICAgIHZhciBk
ID0gMiAqIChheCAqIGN5IC0gYXkgKiBjeCk7Ci0gICAgaWYgKGQgPj0gLc61MikgcmV0dXJuOwot
ICAgIHZhciBoYSA9IGF4ICogYXggKyBheSAqIGF5LCBoYyA9IGN4ICogY3ggKyBjeSAqIGN5LCB4
ID0gKGN5ICogaGEgLSBheSAqIGhjKSAvIGQsIHkgPSAoYXggKiBoYyAtIGN4ICogaGEpIC8gZCwg
Y3kgPSB5ICsgYnk7Ci0gICAgdmFyIGNpcmNsZSA9IGQzX2dlb21fdm9yb25vaUNpcmNsZVBvb2wu
cG9wKCkgfHwgbmV3IGQzX2dlb21fdm9yb25vaUNpcmNsZSgpOwotICAgIGNpcmNsZS5hcmMgPSBh
cmM7Ci0gICAgY2lyY2xlLnNpdGUgPSBjU2l0ZTsKLSAgICBjaXJjbGUueCA9IHggKyBieDsKLSAg
ICBjaXJjbGUueSA9IGN5ICsgTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpOwotICAgIGNpcmNsZS5j
eSA9IGN5OwotICAgIGFyYy5jaXJjbGUgPSBjaXJjbGU7Ci0gICAgdmFyIGJlZm9yZSA9IG51bGws
IG5vZGUgPSBkM19nZW9tX3Zvcm9ub2lDaXJjbGVzLl87Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAg
ICAgIGlmIChjaXJjbGUueSA8IG5vZGUueSB8fCBjaXJjbGUueSA9PT0gbm9kZS55ICYmIGNpcmNs
ZS54IDw9IG5vZGUueCkgewotICAgICAgICBpZiAobm9kZS5MKSBub2RlID0gbm9kZS5MOyBlbHNl
IHsKLSAgICAgICAgICBiZWZvcmUgPSBub2RlLlA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChub2RlLlIpIG5vZGUgPSBub2RlLlI7IGVs
c2UgewotICAgICAgICAgIGJlZm9yZSA9IG5vZGU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcy5pbnNlcnQoYmVm
b3JlLCBjaXJjbGUpOwotICAgIGlmICghYmVmb3JlKSBkM19nZW9tX3Zvcm9ub2lGaXJzdENpcmNs
ZSA9IGNpcmNsZTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lEZXRhY2hDaXJjbGUo
YXJjKSB7Ci0gICAgdmFyIGNpcmNsZSA9IGFyYy5jaXJjbGU7Ci0gICAgaWYgKGNpcmNsZSkgewot
ICAgICAgaWYgKCFjaXJjbGUuUCkgZDNfZ2VvbV92b3Jvbm9pRmlyc3RDaXJjbGUgPSBjaXJjbGUu
TjsKLSAgICAgIGQzX2dlb21fdm9yb25vaUNpcmNsZXMucmVtb3ZlKGNpcmNsZSk7Ci0gICAgICBk
M19nZW9tX3Zvcm9ub2lDaXJjbGVQb29sLnB1c2goY2lyY2xlKTsKLSAgICAgIGQzX2dlb21fdm9y
b25vaVJlZEJsYWNrTm9kZShjaXJjbGUpOwotICAgICAgYXJjLmNpcmNsZSA9IG51bGw7Ci0gICAg
fQotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUNsaXBFZGdlcyhleHRlbnQpIHsKLSAg
ICB2YXIgZWRnZXMgPSBkM19nZW9tX3Zvcm9ub2lFZGdlcywgY2xpcCA9IGQzX2dlb21fY2xpcExp
bmUoZXh0ZW50WzBdWzBdLCBleHRlbnRbMF1bMV0sIGV4dGVudFsxXVswXSwgZXh0ZW50WzFdWzFd
KSwgaSA9IGVkZ2VzLmxlbmd0aCwgZTsKLSAgICB3aGlsZSAoaS0tKSB7Ci0gICAgICBlID0gZWRn
ZXNbaV07Ci0gICAgICBpZiAoIWQzX2dlb21fdm9yb25vaUNvbm5lY3RFZGdlKGUsIGV4dGVudCkg
fHwgIWNsaXAoZSkgfHwgYWJzKGUuYS54IC0gZS5iLngpIDwgzrUgJiYgYWJzKGUuYS55IC0gZS5i
LnkpIDwgzrUpIHsKLSAgICAgICAgZS5hID0gZS5iID0gbnVsbDsKLSAgICAgICAgZWRnZXMuc3Bs
aWNlKGksIDEpOwotICAgICAgfQotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9u
b2lDb25uZWN0RWRnZShlZGdlLCBleHRlbnQpIHsKLSAgICB2YXIgdmIgPSBlZGdlLmI7Ci0gICAg
aWYgKHZiKSByZXR1cm4gdHJ1ZTsKLSAgICB2YXIgdmEgPSBlZGdlLmEsIHgwID0gZXh0ZW50WzBd
WzBdLCB4MSA9IGV4dGVudFsxXVswXSwgeTAgPSBleHRlbnRbMF1bMV0sIHkxID0gZXh0ZW50WzFd
WzFdLCBsU2l0ZSA9IGVkZ2UubCwgclNpdGUgPSBlZGdlLnIsIGx4ID0gbFNpdGUueCwgbHkgPSBs
U2l0ZS55LCByeCA9IHJTaXRlLngsIHJ5ID0gclNpdGUueSwgZnggPSAobHggKyByeCkgLyAyLCBm
eSA9IChseSArIHJ5KSAvIDIsIGZtLCBmYjsKLSAgICBpZiAocnkgPT09IGx5KSB7Ci0gICAgICBp
ZiAoZnggPCB4MCB8fCBmeCA+PSB4MSkgcmV0dXJuOwotICAgICAgaWYgKGx4ID4gcngpIHsKLSAg
ICAgICAgaWYgKCF2YSkgdmEgPSB7Ci0gICAgICAgICAgeDogZngsCi0gICAgICAgICAgeTogeTAK
LSAgICAgICAgfTsgZWxzZSBpZiAodmEueSA+PSB5MSkgcmV0dXJuOwotICAgICAgICB2YiA9IHsK
LSAgICAgICAgICB4OiBmeCwKLSAgICAgICAgICB5OiB5MQotICAgICAgICB9OwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKCF2YSkgdmEgPSB7Ci0gICAgICAgICAgeDogZngsCi0gICAgICAg
ICAgeTogeTEKLSAgICAgICAgfTsgZWxzZSBpZiAodmEueSA8IHkwKSByZXR1cm47Ci0gICAgICAg
IHZiID0gewotICAgICAgICAgIHg6IGZ4LAotICAgICAgICAgIHk6IHkwCi0gICAgICAgIH07Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZtID0gKGx4IC0gcngpIC8gKHJ5IC0gbHkpOwot
ICAgICAgZmIgPSBmeSAtIGZtICogZng7Ci0gICAgICBpZiAoZm0gPCAtMSB8fCBmbSA+IDEpIHsK
LSAgICAgICAgaWYgKGx4ID4gcngpIHsKLSAgICAgICAgICBpZiAoIXZhKSB2YSA9IHsKLSAgICAg
ICAgICAgIHg6ICh5MCAtIGZiKSAvIGZtLAotICAgICAgICAgICAgeTogeTAKLSAgICAgICAgICB9
OyBlbHNlIGlmICh2YS55ID49IHkxKSByZXR1cm47Ci0gICAgICAgICAgdmIgPSB7Ci0gICAgICAg
ICAgICB4OiAoeTEgLSBmYikgLyBmbSwKLSAgICAgICAgICAgIHk6IHkxCi0gICAgICAgICAgfTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoIXZhKSB2YSA9IHsKLSAgICAgICAgICAg
IHg6ICh5MSAtIGZiKSAvIGZtLAotICAgICAgICAgICAgeTogeTEKLSAgICAgICAgICB9OyBlbHNl
IGlmICh2YS55IDwgeTApIHJldHVybjsKLSAgICAgICAgICB2YiA9IHsKLSAgICAgICAgICAgIHg6
ICh5MCAtIGZiKSAvIGZtLAotICAgICAgICAgICAgeTogeTAKLSAgICAgICAgICB9OwotICAgICAg
ICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobHkgPCByeSkgewotICAgICAgICAgIGlm
ICghdmEpIHZhID0gewotICAgICAgICAgICAgeDogeDAsCi0gICAgICAgICAgICB5OiBmbSAqIHgw
ICsgZmIKLSAgICAgICAgICB9OyBlbHNlIGlmICh2YS54ID49IHgxKSByZXR1cm47Ci0gICAgICAg
ICAgdmIgPSB7Ci0gICAgICAgICAgICB4OiB4MSwKLSAgICAgICAgICAgIHk6IGZtICogeDEgKyBm
YgotICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKCF2YSkgdmEg
PSB7Ci0gICAgICAgICAgICB4OiB4MSwKLSAgICAgICAgICAgIHk6IGZtICogeDEgKyBmYgotICAg
ICAgICAgIH07IGVsc2UgaWYgKHZhLnggPCB4MCkgcmV0dXJuOwotICAgICAgICAgIHZiID0gewot
ICAgICAgICAgICAgeDogeDAsCi0gICAgICAgICAgICB5OiBmbSAqIHgwICsgZmIKLSAgICAgICAg
ICB9OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGVkZ2UuYSA9IHZhOwotICAgIGVk
Z2UuYiA9IHZiOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9y
b25vaUVkZ2UobFNpdGUsIHJTaXRlKSB7Ci0gICAgdGhpcy5sID0gbFNpdGU7Ci0gICAgdGhpcy5y
ID0gclNpdGU7Ci0gICAgdGhpcy5hID0gdGhpcy5iID0gbnVsbDsKLSAgfQotICBmdW5jdGlvbiBk
M19nZW9tX3Zvcm9ub2lDcmVhdGVFZGdlKGxTaXRlLCByU2l0ZSwgdmEsIHZiKSB7Ci0gICAgdmFy
IGVkZ2UgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pRWRnZShsU2l0ZSwgclNpdGUpOwotICAgIGQzX2dl
b21fdm9yb25vaUVkZ2VzLnB1c2goZWRnZSk7Ci0gICAgaWYgKHZhKSBkM19nZW9tX3Zvcm9ub2lT
ZXRFZGdlRW5kKGVkZ2UsIGxTaXRlLCByU2l0ZSwgdmEpOwotICAgIGlmICh2YikgZDNfZ2VvbV92
b3Jvbm9pU2V0RWRnZUVuZChlZGdlLCByU2l0ZSwgbFNpdGUsIHZiKTsKLSAgICBkM19nZW9tX3Zv
cm9ub2lDZWxsc1tsU2l0ZS5pXS5lZGdlcy5wdXNoKG5ldyBkM19nZW9tX3Zvcm9ub2lIYWxmRWRn
ZShlZGdlLCBsU2l0ZSwgclNpdGUpKTsKLSAgICBkM19nZW9tX3Zvcm9ub2lDZWxsc1tyU2l0ZS5p
XS5lZGdlcy5wdXNoKG5ldyBkM19nZW9tX3Zvcm9ub2lIYWxmRWRnZShlZGdlLCByU2l0ZSwgbFNp
dGUpKTsKLSAgICByZXR1cm4gZWRnZTsKLSAgfQotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lD
cmVhdGVCb3JkZXJFZGdlKGxTaXRlLCB2YSwgdmIpIHsKLSAgICB2YXIgZWRnZSA9IG5ldyBkM19n
ZW9tX3Zvcm9ub2lFZGdlKGxTaXRlLCBudWxsKTsKLSAgICBlZGdlLmEgPSB2YTsKLSAgICBlZGdl
LmIgPSB2YjsKLSAgICBkM19nZW9tX3Zvcm9ub2lFZGdlcy5wdXNoKGVkZ2UpOwotICAgIHJldHVy
biBlZGdlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVNldEVkZ2VFbmQoZWRnZSwg
bFNpdGUsIHJTaXRlLCB2ZXJ0ZXgpIHsKLSAgICBpZiAoIWVkZ2UuYSAmJiAhZWRnZS5iKSB7Ci0g
ICAgICBlZGdlLmEgPSB2ZXJ0ZXg7Ci0gICAgICBlZGdlLmwgPSBsU2l0ZTsKLSAgICAgIGVkZ2Uu
ciA9IHJTaXRlOwotICAgIH0gZWxzZSBpZiAoZWRnZS5sID09PSByU2l0ZSkgewotICAgICAgZWRn
ZS5iID0gdmVydGV4OwotICAgIH0gZWxzZSB7Ci0gICAgICBlZGdlLmEgPSB2ZXJ0ZXg7Ci0gICAg
fQotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaUhhbGZFZGdlKGVkZ2UsIGxTaXRlLCBy
U2l0ZSkgewotICAgIHZhciB2YSA9IGVkZ2UuYSwgdmIgPSBlZGdlLmI7Ci0gICAgdGhpcy5lZGdl
ID0gZWRnZTsKLSAgICB0aGlzLnNpdGUgPSBsU2l0ZTsKLSAgICB0aGlzLmFuZ2xlID0gclNpdGUg
PyBNYXRoLmF0YW4yKHJTaXRlLnkgLSBsU2l0ZS55LCByU2l0ZS54IC0gbFNpdGUueCkgOiBlZGdl
LmwgPT09IGxTaXRlID8gTWF0aC5hdGFuMih2Yi54IC0gdmEueCwgdmEueSAtIHZiLnkpIDogTWF0
aC5hdGFuMih2YS54IC0gdmIueCwgdmIueSAtIHZhLnkpOwotICB9Ci0gIGQzX2dlb21fdm9yb25v
aUhhbGZFZGdlLnByb3RvdHlwZSA9IHsKLSAgICBzdGFydDogZnVuY3Rpb24oKSB7Ci0gICAgICBy
ZXR1cm4gdGhpcy5lZGdlLmwgPT09IHRoaXMuc2l0ZSA/IHRoaXMuZWRnZS5hIDogdGhpcy5lZGdl
LmI7Ci0gICAgfSwKLSAgICBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMuZWRn
ZS5sID09PSB0aGlzLnNpdGUgPyB0aGlzLmVkZ2UuYiA6IHRoaXMuZWRnZS5hOwotICAgIH0KLSAg
fTsKLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tUcmVlKCkgewotICAgIHRoaXMu
XyA9IG51bGw7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tOb2RlKG5v
ZGUpIHsKLSAgICBub2RlLlUgPSBub2RlLkMgPSBub2RlLkwgPSBub2RlLlIgPSBub2RlLlAgPSBu
b2RlLk4gPSBudWxsOwotICB9Ci0gIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrVHJlZS5wcm90b3R5
cGUgPSB7Ci0gICAgaW5zZXJ0OiBmdW5jdGlvbihhZnRlciwgbm9kZSkgewotICAgICAgdmFyIHBh
cmVudCwgZ3JhbmRwYSwgdW5jbGU7Ci0gICAgICBpZiAoYWZ0ZXIpIHsKLSAgICAgICAgbm9kZS5Q
ID0gYWZ0ZXI7Ci0gICAgICAgIG5vZGUuTiA9IGFmdGVyLk47Ci0gICAgICAgIGlmIChhZnRlci5O
KSBhZnRlci5OLlAgPSBub2RlOwotICAgICAgICBhZnRlci5OID0gbm9kZTsKLSAgICAgICAgaWYg
KGFmdGVyLlIpIHsKLSAgICAgICAgICBhZnRlciA9IGFmdGVyLlI7Ci0gICAgICAgICAgd2hpbGUg
KGFmdGVyLkwpIGFmdGVyID0gYWZ0ZXIuTDsKLSAgICAgICAgICBhZnRlci5MID0gbm9kZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhZnRlci5SID0gbm9kZTsKLSAgICAgICAgfQotICAg
ICAgICBwYXJlbnQgPSBhZnRlcjsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5fKSB7Ci0gICAgICAg
IGFmdGVyID0gZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tGaXJzdCh0aGlzLl8pOwotICAgICAgICBu
b2RlLlAgPSBudWxsOwotICAgICAgICBub2RlLk4gPSBhZnRlcjsKLSAgICAgICAgYWZ0ZXIuUCA9
IGFmdGVyLkwgPSBub2RlOwotICAgICAgICBwYXJlbnQgPSBhZnRlcjsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIG5vZGUuUCA9IG5vZGUuTiA9IG51bGw7Ci0gICAgICAgIHRoaXMuXyA9IG5vZGU7
Ci0gICAgICAgIHBhcmVudCA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBub2RlLkwgPSBub2RlLlIg
PSBudWxsOwotICAgICAgbm9kZS5VID0gcGFyZW50OwotICAgICAgbm9kZS5DID0gdHJ1ZTsKLSAg
ICAgIGFmdGVyID0gbm9kZTsKLSAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LkMpIHsKLSAg
ICAgICAgZ3JhbmRwYSA9IHBhcmVudC5VOwotICAgICAgICBpZiAocGFyZW50ID09PSBncmFuZHBh
LkwpIHsKLSAgICAgICAgICB1bmNsZSA9IGdyYW5kcGEuUjsKLSAgICAgICAgICBpZiAodW5jbGUg
JiYgdW5jbGUuQykgewotICAgICAgICAgICAgcGFyZW50LkMgPSB1bmNsZS5DID0gZmFsc2U7Ci0g
ICAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlOwotICAgICAgICAgICAgYWZ0ZXIgPSBncmFuZHBh
OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYWZ0ZXIgPT09IHBhcmVudC5S
KSB7Ci0gICAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlTGVmdCh0aGlz
LCBwYXJlbnQpOwotICAgICAgICAgICAgICBhZnRlciA9IHBhcmVudDsKLSAgICAgICAgICAgICAg
cGFyZW50ID0gYWZ0ZXIuVTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmVudC5DID0g
ZmFsc2U7Ci0gICAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlOwotICAgICAgICAgICAgZDNfZ2Vv
bV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBncmFuZHBhKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdW5jbGUgPSBncmFuZHBhLkw7Ci0gICAgICAg
ICAgaWYgKHVuY2xlICYmIHVuY2xlLkMpIHsKLSAgICAgICAgICAgIHBhcmVudC5DID0gdW5jbGUu
QyA9IGZhbHNlOwotICAgICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTsKLSAgICAgICAgICAgIGFm
dGVyID0gZ3JhbmRwYTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFmdGVy
ID09PSBwYXJlbnQuTCkgewotICAgICAgICAgICAgICBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1Jv
dGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7Ci0gICAgICAgICAgICAgIGFmdGVyID0gcGFyZW50Owot
ICAgICAgICAgICAgICBwYXJlbnQgPSBhZnRlci5VOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyZW50LkMgPSBmYWxzZTsKLSAgICAgICAgICAgIGdyYW5kcGEuQyA9IHRydWU7Ci0gICAg
ICAgICAgICBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgZ3JhbmRwYSk7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHBhcmVudCA9IGFmdGVyLlU7Ci0gICAg
ICB9Ci0gICAgICB0aGlzLl8uQyA9IGZhbHNlOwotICAgIH0sCi0gICAgcmVtb3ZlOiBmdW5jdGlv
bihub2RlKSB7Ci0gICAgICBpZiAobm9kZS5OKSBub2RlLk4uUCA9IG5vZGUuUDsKLSAgICAgIGlm
IChub2RlLlApIG5vZGUuUC5OID0gbm9kZS5OOwotICAgICAgbm9kZS5OID0gbm9kZS5QID0gbnVs
bDsKLSAgICAgIHZhciBwYXJlbnQgPSBub2RlLlUsIHNpYmxpbmcsIGxlZnQgPSBub2RlLkwsIHJp
Z2h0ID0gbm9kZS5SLCBuZXh0LCByZWQ7Ci0gICAgICBpZiAoIWxlZnQpIG5leHQgPSByaWdodDsg
ZWxzZSBpZiAoIXJpZ2h0KSBuZXh0ID0gbGVmdDsgZWxzZSBuZXh0ID0gZDNfZ2VvbV92b3Jvbm9p
UmVkQmxhY2tGaXJzdChyaWdodCk7Ci0gICAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgIGlmIChw
YXJlbnQuTCA9PT0gbm9kZSkgcGFyZW50LkwgPSBuZXh0OyBlbHNlIHBhcmVudC5SID0gbmV4dDsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuXyA9IG5leHQ7Ci0gICAgICB9Ci0gICAgICBp
ZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICByZWQgPSBuZXh0LkM7Ci0gICAgICAgIG5leHQu
QyA9IG5vZGUuQzsKLSAgICAgICAgbmV4dC5MID0gbGVmdDsKLSAgICAgICAgbGVmdC5VID0gbmV4
dDsKLSAgICAgICAgaWYgKG5leHQgIT09IHJpZ2h0KSB7Ci0gICAgICAgICAgcGFyZW50ID0gbmV4
dC5VOwotICAgICAgICAgIG5leHQuVSA9IG5vZGUuVTsKLSAgICAgICAgICBub2RlID0gbmV4dC5S
OwotICAgICAgICAgIHBhcmVudC5MID0gbm9kZTsKLSAgICAgICAgICBuZXh0LlIgPSByaWdodDsK
LSAgICAgICAgICByaWdodC5VID0gbmV4dDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBu
ZXh0LlUgPSBwYXJlbnQ7Ci0gICAgICAgICAgcGFyZW50ID0gbmV4dDsKLSAgICAgICAgICBub2Rl
ID0gbmV4dC5SOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZWQgPSBub2Rl
LkM7Ci0gICAgICAgIG5vZGUgPSBuZXh0OwotICAgICAgfQotICAgICAgaWYgKG5vZGUpIG5vZGUu
VSA9IHBhcmVudDsKLSAgICAgIGlmIChyZWQpIHJldHVybjsKLSAgICAgIGlmIChub2RlICYmIG5v
ZGUuQykgewotICAgICAgICBub2RlLkMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgICAgZG8gewotICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5fKSBicmVhazsKLSAgICAg
ICAgaWYgKG5vZGUgPT09IHBhcmVudC5MKSB7Ci0gICAgICAgICAgc2libGluZyA9IHBhcmVudC5S
OwotICAgICAgICAgIGlmIChzaWJsaW5nLkMpIHsKLSAgICAgICAgICAgIHNpYmxpbmcuQyA9IGZh
bHNlOwotICAgICAgICAgICAgcGFyZW50LkMgPSB0cnVlOwotICAgICAgICAgICAgZDNfZ2VvbV92
b3Jvbm9pUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7Ci0gICAgICAgICAgICBzaWJs
aW5nID0gcGFyZW50LlI7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzaWJsaW5nLkwgJiYg
c2libGluZy5MLkMgfHwgc2libGluZy5SICYmIHNpYmxpbmcuUi5DKSB7Ci0gICAgICAgICAgICBp
ZiAoIXNpYmxpbmcuUiB8fCAhc2libGluZy5SLkMpIHsKLSAgICAgICAgICAgICAgc2libGluZy5M
LkMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgc2libGluZy5DID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBzaWJsaW5nKTsKLSAg
ICAgICAgICAgICAgc2libGluZyA9IHBhcmVudC5SOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc2libGluZy5DID0gcGFyZW50LkM7Ci0gICAgICAgICAgICBwYXJlbnQuQyA9IHNpYmxpbmcu
Ui5DID0gZmFsc2U7Ci0gICAgICAgICAgICBkM19nZW9tX3Zvcm9ub2lSZWRCbGFja1JvdGF0ZUxl
ZnQodGhpcywgcGFyZW50KTsKLSAgICAgICAgICAgIG5vZGUgPSB0aGlzLl87Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc2libGlu
ZyA9IHBhcmVudC5MOwotICAgICAgICAgIGlmIChzaWJsaW5nLkMpIHsKLSAgICAgICAgICAgIHNp
YmxpbmcuQyA9IGZhbHNlOwotICAgICAgICAgICAgcGFyZW50LkMgPSB0cnVlOwotICAgICAgICAg
ICAgZDNfZ2VvbV92b3Jvbm9pUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpOwotICAg
ICAgICAgICAgc2libGluZyA9IHBhcmVudC5MOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAo
c2libGluZy5MICYmIHNpYmxpbmcuTC5DIHx8IHNpYmxpbmcuUiAmJiBzaWJsaW5nLlIuQykgewot
ICAgICAgICAgICAgaWYgKCFzaWJsaW5nLkwgfHwgIXNpYmxpbmcuTC5DKSB7Ci0gICAgICAgICAg
ICAgIHNpYmxpbmcuUi5DID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHNpYmxpbmcuQyA9IHRydWU7
Ci0gICAgICAgICAgICAgIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBz
aWJsaW5nKTsKLSAgICAgICAgICAgICAgc2libGluZyA9IHBhcmVudC5MOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc2libGluZy5DID0gcGFyZW50LkM7Ci0gICAgICAgICAgICBwYXJlbnQu
QyA9IHNpYmxpbmcuTC5DID0gZmFsc2U7Ci0gICAgICAgICAgICBkM19nZW9tX3Zvcm9ub2lSZWRC
bGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7Ci0gICAgICAgICAgICBub2RlID0gdGhpcy5f
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNp
YmxpbmcuQyA9IHRydWU7Ci0gICAgICAgIG5vZGUgPSBwYXJlbnQ7Ci0gICAgICAgIHBhcmVudCA9
IHBhcmVudC5VOwotICAgICAgfSB3aGlsZSAoIW5vZGUuQyk7Ci0gICAgICBpZiAobm9kZSkgbm9k
ZS5DID0gZmFsc2U7Ci0gICAgfQotICB9OwotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lSZWRC
bGFja1JvdGF0ZUxlZnQodHJlZSwgbm9kZSkgewotICAgIHZhciBwID0gbm9kZSwgcSA9IG5vZGUu
UiwgcGFyZW50ID0gcC5VOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgIGlmIChwYXJlbnQuTCA9
PT0gcCkgcGFyZW50LkwgPSBxOyBlbHNlIHBhcmVudC5SID0gcTsKLSAgICB9IGVsc2UgewotICAg
ICAgdHJlZS5fID0gcTsKLSAgICB9Ci0gICAgcS5VID0gcGFyZW50OwotICAgIHAuVSA9IHE7Ci0g
ICAgcC5SID0gcS5MOwotICAgIGlmIChwLlIpIHAuUi5VID0gcDsKLSAgICBxLkwgPSBwOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVJlZEJsYWNrUm90YXRlUmlnaHQodHJlZSwgbm9k
ZSkgewotICAgIHZhciBwID0gbm9kZSwgcSA9IG5vZGUuTCwgcGFyZW50ID0gcC5VOwotICAgIGlm
IChwYXJlbnQpIHsKLSAgICAgIGlmIChwYXJlbnQuTCA9PT0gcCkgcGFyZW50LkwgPSBxOyBlbHNl
IHBhcmVudC5SID0gcTsKLSAgICB9IGVsc2UgewotICAgICAgdHJlZS5fID0gcTsKLSAgICB9Ci0g
ICAgcS5VID0gcGFyZW50OwotICAgIHAuVSA9IHE7Ci0gICAgcC5MID0gcS5SOwotICAgIGlmIChw
LkwpIHAuTC5VID0gcDsKLSAgICBxLlIgPSBwOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9y
b25vaVJlZEJsYWNrRmlyc3Qobm9kZSkgewotICAgIHdoaWxlIChub2RlLkwpIG5vZGUgPSBub2Rl
Lkw7Ci0gICAgcmV0dXJuIG5vZGU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV92b3Jvbm9pKHNp
dGVzLCBiYm94KSB7Ci0gICAgdmFyIHNpdGUgPSBzaXRlcy5zb3J0KGQzX2dlb21fdm9yb25vaVZl
cnRleE9yZGVyKS5wb3AoKSwgeDAsIHkwLCBjaXJjbGU7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pRWRn
ZXMgPSBbXTsKLSAgICBkM19nZW9tX3Zvcm9ub2lDZWxscyA9IG5ldyBBcnJheShzaXRlcy5sZW5n
dGgpOwotICAgIGQzX2dlb21fdm9yb25vaUJlYWNoZXMgPSBuZXcgZDNfZ2VvbV92b3Jvbm9pUmVk
QmxhY2tUcmVlKCk7Ci0gICAgZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcyA9IG5ldyBkM19nZW9tX3Zv
cm9ub2lSZWRCbGFja1RyZWUoKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgY2lyY2xlID0g
ZDNfZ2VvbV92b3Jvbm9pRmlyc3RDaXJjbGU7Ci0gICAgICBpZiAoc2l0ZSAmJiAoIWNpcmNsZSB8
fCBzaXRlLnkgPCBjaXJjbGUueSB8fCBzaXRlLnkgPT09IGNpcmNsZS55ICYmIHNpdGUueCA8IGNp
cmNsZS54KSkgewotICAgICAgICBpZiAoc2l0ZS54ICE9PSB4MCB8fCBzaXRlLnkgIT09IHkwKSB7
Ci0gICAgICAgICAgZDNfZ2VvbV92b3Jvbm9pQ2VsbHNbc2l0ZS5pXSA9IG5ldyBkM19nZW9tX3Zv
cm9ub2lDZWxsKHNpdGUpOwotICAgICAgICAgIGQzX2dlb21fdm9yb25vaUFkZEJlYWNoKHNpdGUp
OwotICAgICAgICAgIHgwID0gc2l0ZS54LCB5MCA9IHNpdGUueTsKLSAgICAgICAgfQotICAgICAg
ICBzaXRlID0gc2l0ZXMucG9wKCk7Ci0gICAgICB9IGVsc2UgaWYgKGNpcmNsZSkgewotICAgICAg
ICBkM19nZW9tX3Zvcm9ub2lSZW1vdmVCZWFjaChjaXJjbGUuYXJjKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoYmJveCkgZDNfZ2VvbV92
b3Jvbm9pQ2xpcEVkZ2VzKGJib3gpLCBkM19nZW9tX3Zvcm9ub2lDbG9zZUNlbGxzKGJib3gpOwot
ICAgIHZhciBkaWFncmFtID0gewotICAgICAgY2VsbHM6IGQzX2dlb21fdm9yb25vaUNlbGxzLAot
ICAgICAgZWRnZXM6IGQzX2dlb21fdm9yb25vaUVkZ2VzCi0gICAgfTsKLSAgICBkM19nZW9tX3Zv
cm9ub2lCZWFjaGVzID0gZDNfZ2VvbV92b3Jvbm9pQ2lyY2xlcyA9IGQzX2dlb21fdm9yb25vaUVk
Z2VzID0gZDNfZ2VvbV92b3Jvbm9pQ2VsbHMgPSBudWxsOwotICAgIHJldHVybiBkaWFncmFtOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fdm9yb25vaVZlcnRleE9yZGVyKGEsIGIpIHsKLSAgICBy
ZXR1cm4gYi55IC0gYS55IHx8IGIueCAtIGEueDsKLSAgfQotICBkMy5nZW9tLnZvcm9ub2kgPSBm
dW5jdGlvbihwb2ludHMpIHsKLSAgICB2YXIgeCA9IGQzX2dlb21fcG9pbnRYLCB5ID0gZDNfZ2Vv
bV9wb2ludFksIGZ4ID0geCwgZnkgPSB5LCBjbGlwRXh0ZW50ID0gZDNfZ2VvbV92b3Jvbm9pQ2xp
cEV4dGVudDsKLSAgICBpZiAocG9pbnRzKSByZXR1cm4gdm9yb25vaShwb2ludHMpOwotICAgIGZ1
bmN0aW9uIHZvcm9ub2koZGF0YSkgewotICAgICAgdmFyIHBvbHlnb25zID0gbmV3IEFycmF5KGRh
dGEubGVuZ3RoKSwgeDAgPSBjbGlwRXh0ZW50WzBdWzBdLCB5MCA9IGNsaXBFeHRlbnRbMF1bMV0s
IHgxID0gY2xpcEV4dGVudFsxXVswXSwgeTEgPSBjbGlwRXh0ZW50WzFdWzFdOwotICAgICAgZDNf
Z2VvbV92b3Jvbm9pKHNpdGVzKGRhdGEpLCBjbGlwRXh0ZW50KS5jZWxscy5mb3JFYWNoKGZ1bmN0
aW9uKGNlbGwsIGkpIHsKLSAgICAgICAgdmFyIGVkZ2VzID0gY2VsbC5lZGdlcywgc2l0ZSA9IGNl
bGwuc2l0ZSwgcG9seWdvbiA9IHBvbHlnb25zW2ldID0gZWRnZXMubGVuZ3RoID8gZWRnZXMubWFw
KGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICB2YXIgcyA9IGUuc3RhcnQoKTsKLSAgICAgICAgICBy
ZXR1cm4gWyBzLngsIHMueSBdOwotICAgICAgICB9KSA6IHNpdGUueCA+PSB4MCAmJiBzaXRlLngg
PD0geDEgJiYgc2l0ZS55ID49IHkwICYmIHNpdGUueSA8PSB5MSA/IFsgWyB4MCwgeTEgXSwgWyB4
MSwgeTEgXSwgWyB4MSwgeTAgXSwgWyB4MCwgeTAgXSBdIDogW107Ci0gICAgICAgIHBvbHlnb24u
cG9pbnQgPSBkYXRhW2ldOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gcG9seWdvbnM7Ci0gICAg
fQotICAgIGZ1bmN0aW9uIHNpdGVzKGRhdGEpIHsKLSAgICAgIHJldHVybiBkYXRhLm1hcChmdW5j
dGlvbihkLCBpKSB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgeDogTWF0aC5yb3VuZChm
eChkLCBpKSAvIM61KSAqIM61LAotICAgICAgICAgIHk6IE1hdGgucm91bmQoZnkoZCwgaSkgLyDO
tSkgKiDOtSwKLSAgICAgICAgICBpOiBpCi0gICAgICAgIH07Ci0gICAgICB9KTsKLSAgICB9Ci0g
ICAgdm9yb25vaS5saW5rcyA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgIHJldHVybiBkM19nZW9t
X3Zvcm9ub2koc2l0ZXMoZGF0YSkpLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihlZGdlKSB7Ci0gICAg
ICAgIHJldHVybiBlZGdlLmwgJiYgZWRnZS5yOwotICAgICAgfSkubWFwKGZ1bmN0aW9uKGVkZ2Up
IHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBzb3VyY2U6IGRhdGFbZWRnZS5sLmldLAot
ICAgICAgICAgIHRhcmdldDogZGF0YVtlZGdlLnIuaV0KLSAgICAgICAgfTsKLSAgICAgIH0pOwot
ICAgIH07Ci0gICAgdm9yb25vaS50cmlhbmdsZXMgPSBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICB2
YXIgdHJpYW5nbGVzID0gW107Ci0gICAgICBkM19nZW9tX3Zvcm9ub2koc2l0ZXMoZGF0YSkpLmNl
bGxzLmZvckVhY2goZnVuY3Rpb24oY2VsbCwgaSkgewotICAgICAgICB2YXIgc2l0ZSA9IGNlbGwu
c2l0ZSwgZWRnZXMgPSBjZWxsLmVkZ2VzLnNvcnQoZDNfZ2VvbV92b3Jvbm9pSGFsZkVkZ2VPcmRl
ciksIGogPSAtMSwgbSA9IGVkZ2VzLmxlbmd0aCwgZTAsIHMwLCBlMSA9IGVkZ2VzW20gLSAxXS5l
ZGdlLCBzMSA9IGUxLmwgPT09IHNpdGUgPyBlMS5yIDogZTEubDsKLSAgICAgICAgd2hpbGUgKCsr
aiA8IG0pIHsKLSAgICAgICAgICBlMCA9IGUxOwotICAgICAgICAgIHMwID0gczE7Ci0gICAgICAg
ICAgZTEgPSBlZGdlc1tqXS5lZGdlOwotICAgICAgICAgIHMxID0gZTEubCA9PT0gc2l0ZSA/IGUx
LnIgOiBlMS5sOwotICAgICAgICAgIGlmIChpIDwgczAuaSAmJiBpIDwgczEuaSAmJiBkM19nZW9t
X3Zvcm9ub2lUcmlhbmdsZUFyZWEoc2l0ZSwgczAsIHMxKSA8IDApIHsKLSAgICAgICAgICAgIHRy
aWFuZ2xlcy5wdXNoKFsgZGF0YVtpXSwgZGF0YVtzMC5pXSwgZGF0YVtzMS5pXSBdKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRyaWFuZ2xlczsKLSAg
ICB9OwotICAgIHZvcm9ub2kueCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVybiBhcmd1bWVu
dHMubGVuZ3RoID8gKGZ4ID0gZDNfZnVuY3Rvcih4ID0gXyksIHZvcm9ub2kpIDogeDsKLSAgICB9
OwotICAgIHZvcm9ub2kueSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIHJldHVybiBhcmd1bWVudHMu
bGVuZ3RoID8gKGZ5ID0gZDNfZnVuY3Rvcih5ID0gXyksIHZvcm9ub2kpIDogeTsKLSAgICB9Owot
ICAgIHZvcm9ub2kuY2xpcEV4dGVudCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIGNsaXBFeHRlbnQgPT09IGQzX2dlb21fdm9yb25vaUNsaXBFeHRl
bnQgPyBudWxsIDogY2xpcEV4dGVudDsKLSAgICAgIGNsaXBFeHRlbnQgPSBfID09IG51bGwgPyBk
M19nZW9tX3Zvcm9ub2lDbGlwRXh0ZW50IDogXzsKLSAgICAgIHJldHVybiB2b3Jvbm9pOwotICAg
IH07Ci0gICAgdm9yb25vaS5zaXplID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVu
dHMubGVuZ3RoKSByZXR1cm4gY2xpcEV4dGVudCA9PT0gZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVu
dCA/IG51bGwgOiBjbGlwRXh0ZW50ICYmIGNsaXBFeHRlbnRbMV07Ci0gICAgICByZXR1cm4gdm9y
b25vaS5jbGlwRXh0ZW50KF8gJiYgWyBbIDAsIDAgXSwgXyBdKTsKLSAgICB9OwotICAgIHJldHVy
biB2b3Jvbm9pOwotICB9OwotICB2YXIgZDNfZ2VvbV92b3Jvbm9pQ2xpcEV4dGVudCA9IFsgWyAt
MWU2LCAtMWU2IF0sIFsgMWU2LCAxZTYgXSBdOwotICBmdW5jdGlvbiBkM19nZW9tX3Zvcm9ub2lU
cmlhbmdsZUFyZWEoYSwgYiwgYykgewotICAgIHJldHVybiAoYS54IC0gYy54KSAqIChiLnkgLSBh
LnkpIC0gKGEueCAtIGIueCkgKiAoYy55IC0gYS55KTsKLSAgfQotICBkMy5nZW9tLmRlbGF1bmF5
ID0gZnVuY3Rpb24odmVydGljZXMpIHsKLSAgICByZXR1cm4gZDMuZ2VvbS52b3Jvbm9pKCkudHJp
YW5nbGVzKHZlcnRpY2VzKTsKLSAgfTsKLSAgZDMuZ2VvbS5xdWFkdHJlZSA9IGZ1bmN0aW9uKHBv
aW50cywgeDEsIHkxLCB4MiwgeTIpIHsKLSAgICB2YXIgeCA9IGQzX2dlb21fcG9pbnRYLCB5ID0g
ZDNfZ2VvbV9wb2ludFksIGNvbXBhdDsKLSAgICBpZiAoY29tcGF0ID0gYXJndW1lbnRzLmxlbmd0
aCkgewotICAgICAgeCA9IGQzX2dlb21fcXVhZHRyZWVDb21wYXRYOwotICAgICAgeSA9IGQzX2dl
b21fcXVhZHRyZWVDb21wYXRZOwotICAgICAgaWYgKGNvbXBhdCA9PT0gMykgewotICAgICAgICB5
MiA9IHkxOwotICAgICAgICB4MiA9IHgxOwotICAgICAgICB5MSA9IHgxID0gMDsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBxdWFkdHJlZShwb2ludHMpOwotICAgIH0KLSAgICBmdW5jdGlvbiBxdWFk
dHJlZShkYXRhKSB7Ci0gICAgICB2YXIgZCwgZnggPSBkM19mdW5jdG9yKHgpLCBmeSA9IGQzX2Z1
bmN0b3IoeSksIHhzLCB5cywgaSwgbiwgeDFfLCB5MV8sIHgyXywgeTJfOwotICAgICAgaWYgKHgx
ICE9IG51bGwpIHsKLSAgICAgICAgeDFfID0geDEsIHkxXyA9IHkxLCB4Ml8gPSB4MiwgeTJfID0g
eTI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB4Ml8gPSB5Ml8gPSAtKHgxXyA9IHkxXyA9IElu
ZmluaXR5KTsKLSAgICAgICAgeHMgPSBbXSwgeXMgPSBbXTsKLSAgICAgICAgbiA9IGRhdGEubGVu
Z3RoOwotICAgICAgICBpZiAoY29tcGF0KSBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAg
ICAgICAgZCA9IGRhdGFbaV07Ci0gICAgICAgICAgaWYgKGQueCA8IHgxXykgeDFfID0gZC54Owot
ICAgICAgICAgIGlmIChkLnkgPCB5MV8pIHkxXyA9IGQueTsKLSAgICAgICAgICBpZiAoZC54ID4g
eDJfKSB4Ml8gPSBkLng7Ci0gICAgICAgICAgaWYgKGQueSA+IHkyXykgeTJfID0gZC55OwotICAg
ICAgICAgIHhzLnB1c2goZC54KTsKLSAgICAgICAgICB5cy5wdXNoKGQueSk7Ci0gICAgICAgIH0g
ZWxzZSBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgdmFyIHhfID0gK2Z4KGQg
PSBkYXRhW2ldLCBpKSwgeV8gPSArZnkoZCwgaSk7Ci0gICAgICAgICAgaWYgKHhfIDwgeDFfKSB4
MV8gPSB4XzsKLSAgICAgICAgICBpZiAoeV8gPCB5MV8pIHkxXyA9IHlfOwotICAgICAgICAgIGlm
ICh4XyA+IHgyXykgeDJfID0geF87Ci0gICAgICAgICAgaWYgKHlfID4geTJfKSB5Ml8gPSB5XzsK
LSAgICAgICAgICB4cy5wdXNoKHhfKTsKLSAgICAgICAgICB5cy5wdXNoKHlfKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgdmFyIGR4ID0geDJfIC0geDFfLCBkeSA9IHkyXyAtIHkxXzsKLSAg
ICAgIGlmIChkeCA+IGR5KSB5Ml8gPSB5MV8gKyBkeDsgZWxzZSB4Ml8gPSB4MV8gKyBkeTsKLSAg
ICAgIGZ1bmN0aW9uIGluc2VydChuLCBkLCB4LCB5LCB4MSwgeTEsIHgyLCB5MikgewotICAgICAg
ICBpZiAoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybjsKLSAgICAgICAgaWYgKG4ubGVhZikg
ewotICAgICAgICAgIHZhciBueCA9IG4ueCwgbnkgPSBuLnk7Ci0gICAgICAgICAgaWYgKG54ICE9
IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChhYnMobnggLSB4KSArIGFicyhueSAtIHkpIDwgLjAx
KSB7Ci0gICAgICAgICAgICAgIGluc2VydENoaWxkKG4sIGQsIHgsIHksIHgxLCB5MSwgeDIsIHky
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHZhciBuUG9pbnQgPSBuLnBv
aW50OwotICAgICAgICAgICAgICBuLnggPSBuLnkgPSBuLnBvaW50ID0gbnVsbDsKLSAgICAgICAg
ICAgICAgaW5zZXJ0Q2hpbGQobiwgblBvaW50LCBueCwgbnksIHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICAgICAgICAgICAgaW5zZXJ0Q2hpbGQobiwgZCwgeCwgeSwgeDEsIHkxLCB4MiwgeTIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuLnggPSB4LCBuLnkg
PSB5LCBuLnBvaW50ID0gZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgaW5zZXJ0Q2hpbGQobiwgZCwgeCwgeSwgeDEsIHkxLCB4MiwgeTIpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBmdW5jdGlvbiBpbnNlcnRDaGlsZChuLCBkLCB4LCB5LCB4MSwgeTEsIHgy
LCB5MikgewotICAgICAgICB2YXIgc3ggPSAoeDEgKyB4MikgKiAuNSwgc3kgPSAoeTEgKyB5Mikg
KiAuNSwgcmlnaHQgPSB4ID49IHN4LCBib3R0b20gPSB5ID49IHN5LCBpID0gKGJvdHRvbSA8PCAx
KSArIHJpZ2h0OwotICAgICAgICBuLmxlYWYgPSBmYWxzZTsKLSAgICAgICAgbiA9IG4ubm9kZXNb
aV0gfHwgKG4ubm9kZXNbaV0gPSBkM19nZW9tX3F1YWR0cmVlTm9kZSgpKTsKLSAgICAgICAgaWYg
KHJpZ2h0KSB4MSA9IHN4OyBlbHNlIHgyID0gc3g7Ci0gICAgICAgIGlmIChib3R0b20pIHkxID0g
c3k7IGVsc2UgeTIgPSBzeTsKLSAgICAgICAgaW5zZXJ0KG4sIGQsIHgsIHksIHgxLCB5MSwgeDIs
IHkyKTsKLSAgICAgIH0KLSAgICAgIHZhciByb290ID0gZDNfZ2VvbV9xdWFkdHJlZU5vZGUoKTsK
LSAgICAgIHJvb3QuYWRkID0gZnVuY3Rpb24oZCkgewotICAgICAgICBpbnNlcnQocm9vdCwgZCwg
K2Z4KGQsICsraSksICtmeShkLCBpKSwgeDFfLCB5MV8sIHgyXywgeTJfKTsKLSAgICAgIH07Ci0g
ICAgICByb290LnZpc2l0ID0gZnVuY3Rpb24oZikgewotICAgICAgICBkM19nZW9tX3F1YWR0cmVl
VmlzaXQoZiwgcm9vdCwgeDFfLCB5MV8sIHgyXywgeTJfKTsKLSAgICAgIH07Ci0gICAgICBpID0g
LTE7Ci0gICAgICBpZiAoeDEgPT0gbnVsbCkgewotICAgICAgICB3aGlsZSAoKytpIDwgbikgewot
ICAgICAgICAgIGluc2VydChyb290LCBkYXRhW2ldLCB4c1tpXSwgeXNbaV0sIHgxXywgeTFfLCB4
Ml8sIHkyXyk7Ci0gICAgICAgIH0KLSAgICAgICAgLS1pOwotICAgICAgfSBlbHNlIGRhdGEuZm9y
RWFjaChyb290LmFkZCk7Ci0gICAgICB4cyA9IHlzID0gZGF0YSA9IGQgPSBudWxsOwotICAgICAg
cmV0dXJuIHJvb3Q7Ci0gICAgfQotICAgIHF1YWR0cmVlLnggPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gXywgcXVhZHRyZWUpIDogeDsKLSAgICB9
OwotICAgIHF1YWR0cmVlLnkgPSBmdW5jdGlvbihfKSB7Ci0gICAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aCA/ICh5ID0gXywgcXVhZHRyZWUpIDogeTsKLSAgICB9OwotICAgIHF1YWR0cmVlLmV4
dGVudCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJu
IHgxID09IG51bGwgPyBudWxsIDogWyBbIHgxLCB5MSBdLCBbIHgyLCB5MiBdIF07Ci0gICAgICBp
ZiAoXyA9PSBudWxsKSB4MSA9IHkxID0geDIgPSB5MiA9IG51bGw7IGVsc2UgeDEgPSArX1swXVsw
XSwgeTEgPSArX1swXVsxXSwgeDIgPSArX1sxXVswXSwgCi0gICAgICB5MiA9ICtfWzFdWzFdOwot
ICAgICAgcmV0dXJuIHF1YWR0cmVlOwotICAgIH07Ci0gICAgcXVhZHRyZWUuc2l6ZSA9IGZ1bmN0
aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHgxID09IG51bGwg
PyBudWxsIDogWyB4MiAtIHgxLCB5MiAtIHkxIF07Ci0gICAgICBpZiAoXyA9PSBudWxsKSB4MSA9
IHkxID0geDIgPSB5MiA9IG51bGw7IGVsc2UgeDEgPSB5MSA9IDAsIHgyID0gK19bMF0sIHkyID0g
K19bMV07Ci0gICAgICByZXR1cm4gcXVhZHRyZWU7Ci0gICAgfTsKLSAgICByZXR1cm4gcXVhZHRy
ZWU7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2dlb21fcXVhZHRyZWVDb21wYXRYKGQpIHsKLSAgICBy
ZXR1cm4gZC54OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fcXVhZHRyZWVDb21wYXRZKGQpIHsK
LSAgICByZXR1cm4gZC55OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2dlb21fcXVhZHRyZWVOb2RlKCkg
ewotICAgIHJldHVybiB7Ci0gICAgICBsZWFmOiB0cnVlLAotICAgICAgbm9kZXM6IFtdLAotICAg
ICAgcG9pbnQ6IG51bGwsCi0gICAgICB4OiBudWxsLAotICAgICAgeTogbnVsbAotICAgIH07Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsIG5vZGUsIHgxLCB5MSwgeDIs
IHkyKSB7Ci0gICAgaWYgKCFmKG5vZGUsIHgxLCB5MSwgeDIsIHkyKSkgewotICAgICAgdmFyIHN4
ID0gKHgxICsgeDIpICogLjUsIHN5ID0gKHkxICsgeTIpICogLjUsIGNoaWxkcmVuID0gbm9kZS5u
b2RlczsKLSAgICAgIGlmIChjaGlsZHJlblswXSkgZDNfZ2VvbV9xdWFkdHJlZVZpc2l0KGYsIGNo
aWxkcmVuWzBdLCB4MSwgeTEsIHN4LCBzeSk7Ci0gICAgICBpZiAoY2hpbGRyZW5bMV0pIGQzX2dl
b21fcXVhZHRyZWVWaXNpdChmLCBjaGlsZHJlblsxXSwgc3gsIHkxLCB4Miwgc3kpOwotICAgICAg
aWYgKGNoaWxkcmVuWzJdKSBkM19nZW9tX3F1YWR0cmVlVmlzaXQoZiwgY2hpbGRyZW5bMl0sIHgx
LCBzeSwgc3gsIHkyKTsKLSAgICAgIGlmIChjaGlsZHJlblszXSkgZDNfZ2VvbV9xdWFkdHJlZVZp
c2l0KGYsIGNoaWxkcmVuWzNdLCBzeCwgc3ksIHgyLCB5Mik7Ci0gICAgfQotICB9Ci0gIGQzLmlu
dGVycG9sYXRlUmdiID0gZDNfaW50ZXJwb2xhdGVSZ2I7Ci0gIGZ1bmN0aW9uIGQzX2ludGVycG9s
YXRlUmdiKGEsIGIpIHsKLSAgICBhID0gZDMucmdiKGEpOwotICAgIGIgPSBkMy5yZ2IoYik7Ci0g
ICAgdmFyIGFyID0gYS5yLCBhZyA9IGEuZywgYWIgPSBhLmIsIGJyID0gYi5yIC0gYXIsIGJnID0g
Yi5nIC0gYWcsIGJiID0gYi5iIC0gYWI7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAg
IHJldHVybiAiIyIgKyBkM19yZ2JfaGV4KE1hdGgucm91bmQoYXIgKyBiciAqIHQpKSArIGQzX3Jn
Yl9oZXgoTWF0aC5yb3VuZChhZyArIGJnICogdCkpICsgZDNfcmdiX2hleChNYXRoLnJvdW5kKGFi
ICsgYmIgKiB0KSk7Ci0gICAgfTsKLSAgfQotICBkMy5pbnRlcnBvbGF0ZU9iamVjdCA9IGQzX2lu
dGVycG9sYXRlT2JqZWN0OwotICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZU9iamVjdChhLCBiKSB7
Ci0gICAgdmFyIGkgPSB7fSwgYyA9IHt9LCBrOwotICAgIGZvciAoayBpbiBhKSB7Ci0gICAgICBp
ZiAoayBpbiBiKSB7Ci0gICAgICAgIGlba10gPSBkM19pbnRlcnBvbGF0ZShhW2tdLCBiW2tdKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNba10gPSBhW2tdOwotICAgICAgfQotICAgIH0KLSAg
ICBmb3IgKGsgaW4gYikgewotICAgICAgaWYgKCEoayBpbiBhKSkgewotICAgICAgICBjW2tdID0g
YltrXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIGZv
ciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTsKLSAgICAgIHJldHVybiBjOwotICAgIH07Ci0gIH0K
LSAgZDMuaW50ZXJwb2xhdGVOdW1iZXIgPSBkM19pbnRlcnBvbGF0ZU51bWJlcjsKLSAgZnVuY3Rp
b24gZDNfaW50ZXJwb2xhdGVOdW1iZXIoYSwgYikgewotICAgIGIgLT0gYSA9ICthOwotICAgIHJl
dHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gYSArIGIgKiB0OwotICAgIH07Ci0gIH0K
LSAgZDMuaW50ZXJwb2xhdGVTdHJpbmcgPSBkM19pbnRlcnBvbGF0ZVN0cmluZzsKLSAgZnVuY3Rp
b24gZDNfaW50ZXJwb2xhdGVTdHJpbmcoYSwgYikgewotICAgIHZhciBiaSA9IGQzX2ludGVycG9s
YXRlX251bWJlckEubGFzdEluZGV4ID0gZDNfaW50ZXJwb2xhdGVfbnVtYmVyQi5sYXN0SW5kZXgg
PSAwLCBhbSwgYm0sIGJzLCBpID0gLTEsIHMgPSBbXSwgcSA9IFtdOwotICAgIGEgPSBhICsgIiIs
IGIgPSBiICsgIiI7Ci0gICAgd2hpbGUgKChhbSA9IGQzX2ludGVycG9sYXRlX251bWJlckEuZXhl
YyhhKSkgJiYgKGJtID0gZDNfaW50ZXJwb2xhdGVfbnVtYmVyQi5leGVjKGIpKSkgewotICAgICAg
aWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7Ci0gICAgICAgIGJzID0gYi5zdWJzdHJpbmcoYmks
IGJzKTsKLSAgICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IGVsc2Ugc1srK2ldID0gYnM7Ci0g
ICAgICB9Ci0gICAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsKLSAgICAg
ICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IGVsc2Ugc1srK2ldID0gYm07Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBzWysraV0gPSBudWxsOwotICAgICAgICBxLnB1c2goewotICAgICAgICAgIGk6
IGksCi0gICAgICAgICAgeDogZDNfaW50ZXJwb2xhdGVOdW1iZXIoYW0sIGJtKQotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICAgIGJpID0gZDNfaW50ZXJwb2xhdGVfbnVtYmVyQi5sYXN0SW5kZXg7
Ci0gICAgfQotICAgIGlmIChiaSA8IGIubGVuZ3RoKSB7Ci0gICAgICBicyA9IGIuc3Vic3RyaW5n
KGJpKTsKLSAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyBlbHNlIHNbKytpXSA9IGJzOwotICAg
IH0KLSAgICByZXR1cm4gcy5sZW5ndGggPCAyID8gcVswXSA/IChiID0gcVswXS54LCBmdW5jdGlv
bih0KSB7Ci0gICAgICByZXR1cm4gYih0KSArICIiOwotICAgIH0pIDogZnVuY3Rpb24oKSB7Ci0g
ICAgICByZXR1cm4gYjsKLSAgICB9IDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkgewotICAg
ICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0
KTsKLSAgICAgIHJldHVybiBzLmpvaW4oIiIpOwotICAgIH0pOwotICB9Ci0gIHZhciBkM19pbnRl
cnBvbGF0ZV9udW1iZXJBID0gL1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9c
ZCspPy9nLCBkM19pbnRlcnBvbGF0ZV9udW1iZXJCID0gbmV3IFJlZ0V4cChkM19pbnRlcnBvbGF0
ZV9udW1iZXJBLnNvdXJjZSwgImciKTsKLSAgZDMuaW50ZXJwb2xhdGUgPSBkM19pbnRlcnBvbGF0
ZTsKLSAgZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGUoYSwgYikgewotICAgIHZhciBpID0gZDMuaW50
ZXJwb2xhdG9ycy5sZW5ndGgsIGY7Ci0gICAgd2hpbGUgKC0taSA+PSAwICYmICEoZiA9IGQzLmlu
dGVycG9sYXRvcnNbaV0oYSwgYikpKSA7Ci0gICAgcmV0dXJuIGY7Ci0gIH0KLSAgZDMuaW50ZXJw
b2xhdG9ycyA9IFsgZnVuY3Rpb24oYSwgYikgewotICAgIHZhciB0ID0gdHlwZW9mIGI7Ci0gICAg
cmV0dXJuICh0ID09PSAic3RyaW5nIiA/IGQzX3JnYl9uYW1lcy5oYXMoYikgfHwgL14oI3xyZ2Jc
KHxoc2xcKCkvLnRlc3QoYikgPyBkM19pbnRlcnBvbGF0ZVJnYiA6IGQzX2ludGVycG9sYXRlU3Ry
aW5nIDogYiBpbnN0YW5jZW9mIGQzX2NvbG9yID8gZDNfaW50ZXJwb2xhdGVSZ2IgOiBBcnJheS5p
c0FycmF5KGIpID8gZDNfaW50ZXJwb2xhdGVBcnJheSA6IHQgPT09ICJvYmplY3QiICYmIGlzTmFO
KGIpID8gZDNfaW50ZXJwb2xhdGVPYmplY3QgOiBkM19pbnRlcnBvbGF0ZU51bWJlcikoYSwgYik7
Ci0gIH0gXTsKLSAgZDMuaW50ZXJwb2xhdGVBcnJheSA9IGQzX2ludGVycG9sYXRlQXJyYXk7Ci0g
IGZ1bmN0aW9uIGQzX2ludGVycG9sYXRlQXJyYXkoYSwgYikgewotICAgIHZhciB4ID0gW10sIGMg
PSBbXSwgbmEgPSBhLmxlbmd0aCwgbmIgPSBiLmxlbmd0aCwgbjAgPSBNYXRoLm1pbihhLmxlbmd0
aCwgYi5sZW5ndGgpLCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuMDsgKytpKSB4LnB1c2goZDNf
aW50ZXJwb2xhdGUoYVtpXSwgYltpXSkpOwotICAgIGZvciAoO2kgPCBuYTsgKytpKSBjW2ldID0g
YVtpXTsKLSAgICBmb3IgKDtpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKHQpIHsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuMDsgKytpKSBjW2ldID0geFtpXSh0
KTsKLSAgICAgIHJldHVybiBjOwotICAgIH07Ci0gIH0KLSAgdmFyIGQzX2Vhc2VfZGVmYXVsdCA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19pZGVudGl0eTsKLSAgfTsKLSAgdmFyIGQzX2Vh
c2UgPSBkMy5tYXAoewotICAgIGxpbmVhcjogZDNfZWFzZV9kZWZhdWx0LAotICAgIHBvbHk6IGQz
X2Vhc2VfcG9seSwKLSAgICBxdWFkOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBkM19lYXNl
X3F1YWQ7Ci0gICAgfSwKLSAgICBjdWJpYzogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNf
ZWFzZV9jdWJpYzsKLSAgICB9LAotICAgIHNpbjogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4g
ZDNfZWFzZV9zaW47Ci0gICAgfSwKLSAgICBleHA6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IGQzX2Vhc2VfZXhwOwotICAgIH0sCi0gICAgY2lyY2xlOiBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiBkM19lYXNlX2NpcmNsZTsKLSAgICB9LAotICAgIGVsYXN0aWM6IGQzX2Vhc2VfZWxhc3Rp
YywKLSAgICBiYWNrOiBkM19lYXNlX2JhY2ssCi0gICAgYm91bmNlOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHJldHVybiBkM19lYXNlX2JvdW5jZTsKLSAgICB9Ci0gIH0pOwotICB2YXIgZDNfZWFzZV9t
b2RlID0gZDMubWFwKHsKLSAgICAiaW4iOiBkM19pZGVudGl0eSwKLSAgICBvdXQ6IGQzX2Vhc2Vf
cmV2ZXJzZSwKLSAgICAiaW4tb3V0IjogZDNfZWFzZV9yZWZsZWN0LAotICAgICJvdXQtaW4iOiBm
dW5jdGlvbihmKSB7Ci0gICAgICByZXR1cm4gZDNfZWFzZV9yZWZsZWN0KGQzX2Vhc2VfcmV2ZXJz
ZShmKSk7Ci0gICAgfQotICB9KTsKLSAgZDMuZWFzZSA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICB2
YXIgaSA9IG5hbWUuaW5kZXhPZigiLSIpLCB0ID0gaSA+PSAwID8gbmFtZS5zdWJzdHJpbmcoMCwg
aSkgOiBuYW1lLCBtID0gaSA+PSAwID8gbmFtZS5zdWJzdHJpbmcoaSArIDEpIDogImluIjsKLSAg
ICB0ID0gZDNfZWFzZS5nZXQodCkgfHwgZDNfZWFzZV9kZWZhdWx0OwotICAgIG0gPSBkM19lYXNl
X21vZGUuZ2V0KG0pIHx8IGQzX2lkZW50aXR5OwotICAgIHJldHVybiBkM19lYXNlX2NsYW1wKG0o
dC5hcHBseShudWxsLCBkM19hcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSkpKTsKLSAgfTsK
LSAgZnVuY3Rpb24gZDNfZWFzZV9jbGFtcChmKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsK
LSAgICAgIHJldHVybiB0IDw9IDAgPyAwIDogdCA+PSAxID8gMSA6IGYodCk7Ci0gICAgfTsKLSAg
fQotICBmdW5jdGlvbiBkM19lYXNlX3JldmVyc2UoZikgewotICAgIHJldHVybiBmdW5jdGlvbih0
KSB7Ci0gICAgICByZXR1cm4gMSAtIGYoMSAtIHQpOwotICAgIH07Ci0gIH0KLSAgZnVuY3Rpb24g
ZDNfZWFzZV9yZWZsZWN0KGYpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0
dXJuIC41ICogKHQgPCAuNSA/IGYoMiAqIHQpIDogMiAtIGYoMiAtIDIgKiB0KSk7Ci0gICAgfTsK
LSAgfQotICBmdW5jdGlvbiBkM19lYXNlX3F1YWQodCkgewotICAgIHJldHVybiB0ICogdDsKLSAg
fQotICBmdW5jdGlvbiBkM19lYXNlX2N1YmljKHQpIHsKLSAgICByZXR1cm4gdCAqIHQgKiB0Owot
ICB9Ci0gIGZ1bmN0aW9uIGQzX2Vhc2VfY3ViaWNJbk91dCh0KSB7Ci0gICAgaWYgKHQgPD0gMCkg
cmV0dXJuIDA7Ci0gICAgaWYgKHQgPj0gMSkgcmV0dXJuIDE7Ci0gICAgdmFyIHQyID0gdCAqIHQs
IHQzID0gdDIgKiB0OwotICAgIHJldHVybiA0ICogKHQgPCAuNSA/IHQzIDogMyAqICh0IC0gdDIp
ICsgdDMgLSAuNzUpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Vhc2VfcG9seShlKSB7Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKHQpIHsKLSAgICAgIHJldHVybiBNYXRoLnBvdyh0LCBlKTsKLSAgICB9Owot
ICB9Ci0gIGZ1bmN0aW9uIGQzX2Vhc2Vfc2luKHQpIHsKLSAgICByZXR1cm4gMSAtIE1hdGguY29z
KHQgKiBoYWxmz4ApOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2Vhc2VfZXhwKHQpIHsKLSAgICByZXR1
cm4gTWF0aC5wb3coMiwgMTAgKiAodCAtIDEpKTsKLSAgfQotICBmdW5jdGlvbiBkM19lYXNlX2Np
cmNsZSh0KSB7Ci0gICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KTsKLSAgfQotICBm
dW5jdGlvbiBkM19lYXNlX2VsYXN0aWMoYSwgcCkgewotICAgIHZhciBzOwotICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoIDwgMikgcCA9IC40NTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkgcyA9
IHAgLyDPhCAqIE1hdGguYXNpbigxIC8gYSk7IGVsc2UgYSA9IDEsIHMgPSBwIC8gNDsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIDEgKyBhICogTWF0aC5wb3coMiwgLTEw
ICogdCkgKiBNYXRoLnNpbigodCAtIHMpICogz4QgLyBwKTsKLSAgICB9OwotICB9Ci0gIGZ1bmN0
aW9uIGQzX2Vhc2VfYmFjayhzKSB7Ci0gICAgaWYgKCFzKSBzID0gMS43MDE1ODsKLSAgICByZXR1
cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7
Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19lYXNlX2JvdW5jZSh0KSB7Ci0gICAgcmV0dXJu
IHQgPCAxIC8gMi43NSA/IDcuNTYyNSAqIHQgKiB0IDogdCA8IDIgLyAyLjc1ID8gNy41NjI1ICog
KHQgLT0gMS41IC8gMi43NSkgKiB0ICsgLjc1IDogdCA8IDIuNSAvIDIuNzUgPyA3LjU2MjUgKiAo
dCAtPSAyLjI1IC8gMi43NSkgKiB0ICsgLjkzNzUgOiA3LjU2MjUgKiAodCAtPSAyLjYyNSAvIDIu
NzUpICogdCArIC45ODQzNzU7Ci0gIH0KLSAgZDMuaW50ZXJwb2xhdGVIY2wgPSBkM19pbnRlcnBv
bGF0ZUhjbDsKLSAgZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVIY2woYSwgYikgewotICAgIGEgPSBk
My5oY2woYSk7Ci0gICAgYiA9IGQzLmhjbChiKTsKLSAgICB2YXIgYWggPSBhLmgsIGFjID0gYS5j
LCBhbCA9IGEubCwgYmggPSBiLmggLSBhaCwgYmMgPSBiLmMgLSBhYywgYmwgPSBiLmwgLSBhbDsK
LSAgICBpZiAoaXNOYU4oYmMpKSBiYyA9IDAsIGFjID0gaXNOYU4oYWMpID8gYi5jIDogYWM7Ci0g
ICAgaWYgKGlzTmFOKGJoKSkgYmggPSAwLCBhaCA9IGlzTmFOKGFoKSA/IGIuaCA6IGFoOyBlbHNl
IGlmIChiaCA+IDE4MCkgYmggLT0gMzYwOyBlbHNlIGlmIChiaCA8IC0xODApIGJoICs9IDM2MDsK
LSAgICByZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgcmV0dXJuIGQzX2hjbF9sYWIoYWggKyBi
aCAqIHQsIGFjICsgYmMgKiB0LCBhbCArIGJsICogdCkgKyAiIjsKLSAgICB9OwotICB9Ci0gIGQz
LmludGVycG9sYXRlSHNsID0gZDNfaW50ZXJwb2xhdGVIc2w7Ci0gIGZ1bmN0aW9uIGQzX2ludGVy
cG9sYXRlSHNsKGEsIGIpIHsKLSAgICBhID0gZDMuaHNsKGEpOwotICAgIGIgPSBkMy5oc2woYik7
Ci0gICAgdmFyIGFoID0gYS5oLCBhcyA9IGEucywgYWwgPSBhLmwsIGJoID0gYi5oIC0gYWgsIGJz
ID0gYi5zIC0gYXMsIGJsID0gYi5sIC0gYWw7Ci0gICAgaWYgKGlzTmFOKGJzKSkgYnMgPSAwLCBh
cyA9IGlzTmFOKGFzKSA/IGIucyA6IGFzOwotICAgIGlmIChpc05hTihiaCkpIGJoID0gMCwgYWgg
PSBpc05hTihhaCkgPyBiLmggOiBhaDsgZWxzZSBpZiAoYmggPiAxODApIGJoIC09IDM2MDsgZWxz
ZSBpZiAoYmggPCAtMTgwKSBiaCArPSAzNjA7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsKLSAg
ICAgIHJldHVybiBkM19oc2xfcmdiKGFoICsgYmggKiB0LCBhcyArIGJzICogdCwgYWwgKyBibCAq
IHQpICsgIiI7Ci0gICAgfTsKLSAgfQotICBkMy5pbnRlcnBvbGF0ZUxhYiA9IGQzX2ludGVycG9s
YXRlTGFiOwotICBmdW5jdGlvbiBkM19pbnRlcnBvbGF0ZUxhYihhLCBiKSB7Ci0gICAgYSA9IGQz
LmxhYihhKTsKLSAgICBiID0gZDMubGFiKGIpOwotICAgIHZhciBhbCA9IGEubCwgYWEgPSBhLmEs
IGFiID0gYS5iLCBibCA9IGIubCAtIGFsLCBiYSA9IGIuYSAtIGFhLCBiYiA9IGIuYiAtIGFiOwot
ICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICByZXR1cm4gZDNfbGFiX3JnYihhbCArIGJs
ICogdCwgYWEgKyBiYSAqIHQsIGFiICsgYmIgKiB0KSArICIiOwotICAgIH07Ci0gIH0KLSAgZDMu
aW50ZXJwb2xhdGVSb3VuZCA9IGQzX2ludGVycG9sYXRlUm91bmQ7Ci0gIGZ1bmN0aW9uIGQzX2lu
dGVycG9sYXRlUm91bmQoYSwgYikgewotICAgIGIgLT0gYTsKLSAgICByZXR1cm4gZnVuY3Rpb24o
dCkgewotICAgICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTsKLSAgICB9OwotICB9Ci0g
IGQzLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgIHZhciBnID0gZDNfZG9jdW1l
bnQuY3JlYXRlRWxlbWVudE5TKGQzLm5zLnByZWZpeC5zdmcsICJnIik7Ci0gICAgcmV0dXJuIChk
My50cmFuc2Zvcm0gPSBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgIGlmIChzdHJpbmcgIT0gbnVs
bCkgewotICAgICAgICBnLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgc3RyaW5nKTsKLSAgICAg
ICAgdmFyIHQgPSBnLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gbmV3IGQzX3RyYW5zZm9ybSh0ID8gdC5tYXRyaXggOiBkM190cmFuc2Zvcm1J
ZGVudGl0eSk7Ci0gICAgfSkoc3RyaW5nKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfdHJhbnNmb3Jt
KG0pIHsKLSAgICB2YXIgcjAgPSBbIG0uYSwgbS5iIF0sIHIxID0gWyBtLmMsIG0uZCBdLCBreCA9
IGQzX3RyYW5zZm9ybU5vcm1hbGl6ZShyMCksIGt6ID0gZDNfdHJhbnNmb3JtRG90KHIwLCByMSks
IGt5ID0gZDNfdHJhbnNmb3JtTm9ybWFsaXplKGQzX3RyYW5zZm9ybUNvbWJpbmUocjEsIHIwLCAt
a3opKSB8fCAwOwotICAgIGlmIChyMFswXSAqIHIxWzFdIDwgcjFbMF0gKiByMFsxXSkgewotICAg
ICAgcjBbMF0gKj0gLTE7Ci0gICAgICByMFsxXSAqPSAtMTsKLSAgICAgIGt4ICo9IC0xOwotICAg
ICAga3ogKj0gLTE7Ci0gICAgfQotICAgIHRoaXMucm90YXRlID0gKGt4ID8gTWF0aC5hdGFuMihy
MFsxXSwgcjBbMF0pIDogTWF0aC5hdGFuMigtcjFbMF0sIHIxWzFdKSkgKiBkM19kZWdyZWVzOwot
ICAgIHRoaXMudHJhbnNsYXRlID0gWyBtLmUsIG0uZiBdOwotICAgIHRoaXMuc2NhbGUgPSBbIGt4
LCBreSBdOwotICAgIHRoaXMuc2tldyA9IGt5ID8gTWF0aC5hdGFuMihreiwga3kpICogZDNfZGVn
cmVlcyA6IDA7Ci0gIH0KLSAgZDNfdHJhbnNmb3JtLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiAidHJhbnNsYXRlKCIgKyB0aGlzLnRyYW5zbGF0ZSArICIpcm90
YXRlKCIgKyB0aGlzLnJvdGF0ZSArICIpc2tld1goIiArIHRoaXMuc2tldyArICIpc2NhbGUoIiAr
IHRoaXMuc2NhbGUgKyAiKSI7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3RyYW5zZm9ybURvdChhLCBi
KSB7Ci0gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfdHJhbnNmb3JtTm9ybWFsaXplKGEpIHsKLSAgICB2YXIgayA9IE1hdGguc3FydChkM190
cmFuc2Zvcm1Eb3QoYSwgYSkpOwotICAgIGlmIChrKSB7Ci0gICAgICBhWzBdIC89IGs7Ci0gICAg
ICBhWzFdIC89IGs7Ci0gICAgfQotICAgIHJldHVybiBrOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3Ry
YW5zZm9ybUNvbWJpbmUoYSwgYiwgaykgewotICAgIGFbMF0gKz0gayAqIGJbMF07Ci0gICAgYVsx
XSArPSBrICogYlsxXTsKLSAgICByZXR1cm4gYTsKLSAgfQotICB2YXIgZDNfdHJhbnNmb3JtSWRl
bnRpdHkgPSB7Ci0gICAgYTogMSwKLSAgICBiOiAwLAotICAgIGM6IDAsCi0gICAgZDogMSwKLSAg
ICBlOiAwLAotICAgIGY6IDAKLSAgfTsKLSAgZDMuaW50ZXJwb2xhdGVUcmFuc2Zvcm0gPSBkM19p
bnRlcnBvbGF0ZVRyYW5zZm9ybTsKLSAgZnVuY3Rpb24gZDNfaW50ZXJwb2xhdGVUcmFuc2Zvcm0o
YSwgYikgewotICAgIHZhciBzID0gW10sIHEgPSBbXSwgbiwgQSA9IGQzLnRyYW5zZm9ybShhKSwg
QiA9IGQzLnRyYW5zZm9ybShiKSwgdGEgPSBBLnRyYW5zbGF0ZSwgdGIgPSBCLnRyYW5zbGF0ZSwg
cmEgPSBBLnJvdGF0ZSwgcmIgPSBCLnJvdGF0ZSwgd2EgPSBBLnNrZXcsIHdiID0gQi5za2V3LCBr
YSA9IEEuc2NhbGUsIGtiID0gQi5zY2FsZTsKLSAgICBpZiAodGFbMF0gIT0gdGJbMF0gfHwgdGFb
MV0gIT0gdGJbMV0pIHsKLSAgICAgIHMucHVzaCgidHJhbnNsYXRlKCIsIG51bGwsICIsIiwgbnVs
bCwgIikiKTsKLSAgICAgIHEucHVzaCh7Ci0gICAgICAgIGk6IDEsCi0gICAgICAgIHg6IGQzX2lu
dGVycG9sYXRlTnVtYmVyKHRhWzBdLCB0YlswXSkKLSAgICAgIH0sIHsKLSAgICAgICAgaTogMywK
LSAgICAgICAgeDogZDNfaW50ZXJwb2xhdGVOdW1iZXIodGFbMV0sIHRiWzFdKQotICAgICAgfSk7
Ci0gICAgfSBlbHNlIGlmICh0YlswXSB8fCB0YlsxXSkgewotICAgICAgcy5wdXNoKCJ0cmFuc2xh
dGUoIiArIHRiICsgIikiKTsKLSAgICB9IGVsc2UgewotICAgICAgcy5wdXNoKCIiKTsKLSAgICB9
Ci0gICAgaWYgKHJhICE9IHJiKSB7Ci0gICAgICBpZiAocmEgLSByYiA+IDE4MCkgcmIgKz0gMzYw
OyBlbHNlIGlmIChyYiAtIHJhID4gMTgwKSByYSArPSAzNjA7Ci0gICAgICBxLnB1c2goewotICAg
ICAgICBpOiBzLnB1c2gocy5wb3AoKSArICJyb3RhdGUoIiwgbnVsbCwgIikiKSAtIDIsCi0gICAg
ICAgIHg6IGQzX2ludGVycG9sYXRlTnVtYmVyKHJhLCByYikKLSAgICAgIH0pOwotICAgIH0gZWxz
ZSBpZiAocmIpIHsKLSAgICAgIHMucHVzaChzLnBvcCgpICsgInJvdGF0ZSgiICsgcmIgKyAiKSIp
OwotICAgIH0KLSAgICBpZiAod2EgIT0gd2IpIHsKLSAgICAgIHEucHVzaCh7Ci0gICAgICAgIGk6
IHMucHVzaChzLnBvcCgpICsgInNrZXdYKCIsIG51bGwsICIpIikgLSAyLAotICAgICAgICB4OiBk
M19pbnRlcnBvbGF0ZU51bWJlcih3YSwgd2IpCi0gICAgICB9KTsKLSAgICB9IGVsc2UgaWYgKHdi
KSB7Ci0gICAgICBzLnB1c2gocy5wb3AoKSArICJza2V3WCgiICsgd2IgKyAiKSIpOwotICAgIH0K
LSAgICBpZiAoa2FbMF0gIT0ga2JbMF0gfHwga2FbMV0gIT0ga2JbMV0pIHsKLSAgICAgIG4gPSBz
LnB1c2gocy5wb3AoKSArICJzY2FsZSgiLCBudWxsLCAiLCIsIG51bGwsICIpIik7Ci0gICAgICBx
LnB1c2goewotICAgICAgICBpOiBuIC0gNCwKLSAgICAgICAgeDogZDNfaW50ZXJwb2xhdGVOdW1i
ZXIoa2FbMF0sIGtiWzBdKQotICAgICAgfSwgewotICAgICAgICBpOiBuIC0gMiwKLSAgICAgICAg
eDogZDNfaW50ZXJwb2xhdGVOdW1iZXIoa2FbMV0sIGtiWzFdKQotICAgICAgfSk7Ci0gICAgfSBl
bHNlIGlmIChrYlswXSAhPSAxIHx8IGtiWzFdICE9IDEpIHsKLSAgICAgIHMucHVzaChzLnBvcCgp
ICsgInNjYWxlKCIgKyBrYiArICIpIik7Ci0gICAgfQotICAgIG4gPSBxLmxlbmd0aDsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24odCkgewotICAgICAgdmFyIGkgPSAtMSwgbzsKLSAgICAgIHdoaWxlICgr
K2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7Ci0gICAgICByZXR1cm4gcy5qb2luKCIi
KTsKLSAgICB9OwotICB9Ci0gIGZ1bmN0aW9uIGQzX3VuaW50ZXJwb2xhdGVOdW1iZXIoYSwgYikg
ewotICAgIGIgPSBiIC0gKGEgPSArYSkgPyAxIC8gKGIgLSBhKSA6IDA7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiAoeCAtIGEpICogYjsKLSAgICB9OwotICB9Ci0gIGZ1
bmN0aW9uIGQzX3VuaW50ZXJwb2xhdGVDbGFtcChhLCBiKSB7Ci0gICAgYiA9IGIgLSAoYSA9ICth
KSA/IDEgLyAoYiAtIGEpIDogMDsKLSAgICByZXR1cm4gZnVuY3Rpb24oeCkgewotICAgICAgcmV0
dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsICh4IC0gYSkgKiBiKSk7Ci0gICAgfTsKLSAgfQot
ICBkMy5sYXlvdXQgPSB7fTsKLSAgZDMubGF5b3V0LmJ1bmRsZSA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBmdW5jdGlvbihsaW5rcykgewotICAgICAgdmFyIHBhdGhzID0gW10sIGkgPSAtMSwg
biA9IGxpbmtzLmxlbmd0aDsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSBwYXRocy5wdXNoKGQzX2xh
eW91dF9idW5kbGVQYXRoKGxpbmtzW2ldKSk7Ci0gICAgICByZXR1cm4gcGF0aHM7Ci0gICAgfTsK
LSAgfTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2J1bmRsZVBhdGgobGluaykgewotICAgIHZhciBz
dGFydCA9IGxpbmsuc291cmNlLCBlbmQgPSBsaW5rLnRhcmdldCwgbGNhID0gZDNfbGF5b3V0X2J1
bmRsZUxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsIGVuZCksIHBvaW50cyA9IFsgc3RhcnQgXTsK
LSAgICB3aGlsZSAoc3RhcnQgIT09IGxjYSkgewotICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnQ7
Ci0gICAgICBwb2ludHMucHVzaChzdGFydCk7Ci0gICAgfQotICAgIHZhciBrID0gcG9pbnRzLmxl
bmd0aDsKLSAgICB3aGlsZSAoZW5kICE9PSBsY2EpIHsKLSAgICAgIHBvaW50cy5zcGxpY2Uoaywg
MCwgZW5kKTsKLSAgICAgIGVuZCA9IGVuZC5wYXJlbnQ7Ci0gICAgfQotICAgIHJldHVybiBwb2lu
dHM7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2J1bmRsZUFuY2VzdG9ycyhub2RlKSB7Ci0g
ICAgdmFyIGFuY2VzdG9ycyA9IFtdLCBwYXJlbnQgPSBub2RlLnBhcmVudDsKLSAgICB3aGlsZSAo
cGFyZW50ICE9IG51bGwpIHsKLSAgICAgIGFuY2VzdG9ycy5wdXNoKG5vZGUpOwotICAgICAgbm9k
ZSA9IHBhcmVudDsKLSAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7Ci0gICAgfQotICAgIGFu
Y2VzdG9ycy5wdXNoKG5vZGUpOwotICAgIHJldHVybiBhbmNlc3RvcnM7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfbGF5b3V0X2J1bmRsZUxlYXN0Q29tbW9uQW5jZXN0b3IoYSwgYikgewotICAgIGlmIChh
ID09PSBiKSByZXR1cm4gYTsKLSAgICB2YXIgYU5vZGVzID0gZDNfbGF5b3V0X2J1bmRsZUFuY2Vz
dG9ycyhhKSwgYk5vZGVzID0gZDNfbGF5b3V0X2J1bmRsZUFuY2VzdG9ycyhiKSwgYU5vZGUgPSBh
Tm9kZXMucG9wKCksIGJOb2RlID0gYk5vZGVzLnBvcCgpLCBzaGFyZWROb2RlID0gbnVsbDsKLSAg
ICB3aGlsZSAoYU5vZGUgPT09IGJOb2RlKSB7Ci0gICAgICBzaGFyZWROb2RlID0gYU5vZGU7Ci0g
ICAgICBhTm9kZSA9IGFOb2Rlcy5wb3AoKTsKLSAgICAgIGJOb2RlID0gYk5vZGVzLnBvcCgpOwot
ICAgIH0KLSAgICByZXR1cm4gc2hhcmVkTm9kZTsKLSAgfQotICBkMy5sYXlvdXQuY2hvcmQgPSBm
dW5jdGlvbigpIHsKLSAgICB2YXIgY2hvcmQgPSB7fSwgY2hvcmRzLCBncm91cHMsIG1hdHJpeCwg
biwgcGFkZGluZyA9IDAsIHNvcnRHcm91cHMsIHNvcnRTdWJncm91cHMsIHNvcnRDaG9yZHM7Ci0g
ICAgZnVuY3Rpb24gcmVsYXlvdXQoKSB7Ci0gICAgICB2YXIgc3ViZ3JvdXBzID0ge30sIGdyb3Vw
U3VtcyA9IFtdLCBncm91cEluZGV4ID0gZDMucmFuZ2UobiksIHN1Ymdyb3VwSW5kZXggPSBbXSwg
aywgeCwgeDAsIGksIGo7Ci0gICAgICBjaG9yZHMgPSBbXTsKLSAgICAgIGdyb3VwcyA9IFtdOwot
ICAgICAgayA9IDAsIGkgPSAtMTsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgIHgg
PSAwLCBqID0gLTE7Ci0gICAgICAgIHdoaWxlICgrK2ogPCBuKSB7Ci0gICAgICAgICAgeCArPSBt
YXRyaXhbaV1bal07Ci0gICAgICAgIH0KLSAgICAgICAgZ3JvdXBTdW1zLnB1c2goeCk7Ci0gICAg
ICAgIHN1Ymdyb3VwSW5kZXgucHVzaChkMy5yYW5nZShuKSk7Ci0gICAgICAgIGsgKz0geDsKLSAg
ICAgIH0KLSAgICAgIGlmIChzb3J0R3JvdXBzKSB7Ci0gICAgICAgIGdyb3VwSW5kZXguc29ydChm
dW5jdGlvbihhLCBiKSB7Ci0gICAgICAgICAgcmV0dXJuIHNvcnRHcm91cHMoZ3JvdXBTdW1zW2Fd
LCBncm91cFN1bXNbYl0pOwotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIGlmIChzb3J0U3Vi
Z3JvdXBzKSB7Ci0gICAgICAgIHN1Ymdyb3VwSW5kZXguZm9yRWFjaChmdW5jdGlvbihkLCBpKSB7
Ci0gICAgICAgICAgZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBz
b3J0U3ViZ3JvdXBzKG1hdHJpeFtpXVthXSwgbWF0cml4W2ldW2JdKTsKLSAgICAgICAgICB9KTsK
LSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBrID0gKM+EIC0gcGFkZGluZyAqIG4pIC8gazsK
LSAgICAgIHggPSAwLCBpID0gLTE7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICB4
MCA9IHgsIGogPSAtMTsKLSAgICAgICAgd2hpbGUgKCsraiA8IG4pIHsKLSAgICAgICAgICB2YXIg
ZGkgPSBncm91cEluZGV4W2ldLCBkaiA9IHN1Ymdyb3VwSW5kZXhbZGldW2pdLCB2ID0gbWF0cml4
W2RpXVtkal0sIGEwID0geCwgYTEgPSB4ICs9IHYgKiBrOwotICAgICAgICAgIHN1Ymdyb3Vwc1tk
aSArICItIiArIGRqXSA9IHsKLSAgICAgICAgICAgIGluZGV4OiBkaSwKLSAgICAgICAgICAgIHN1
YmluZGV4OiBkaiwKLSAgICAgICAgICAgIHN0YXJ0QW5nbGU6IGEwLAotICAgICAgICAgICAgZW5k
QW5nbGU6IGExLAotICAgICAgICAgICAgdmFsdWU6IHYKLSAgICAgICAgICB9OwotICAgICAgICB9
Ci0gICAgICAgIGdyb3Vwc1tkaV0gPSB7Ci0gICAgICAgICAgaW5kZXg6IGRpLAotICAgICAgICAg
IHN0YXJ0QW5nbGU6IHgwLAotICAgICAgICAgIGVuZEFuZ2xlOiB4LAotICAgICAgICAgIHZhbHVl
OiAoeCAtIHgwKSAvIGsKLSAgICAgICAgfTsKLSAgICAgICAgeCArPSBwYWRkaW5nOwotICAgICAg
fQotICAgICAgaSA9IC0xOwotICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgaiA9IGkg
LSAxOwotICAgICAgICB3aGlsZSAoKytqIDwgbikgewotICAgICAgICAgIHZhciBzb3VyY2UgPSBz
dWJncm91cHNbaSArICItIiArIGpdLCB0YXJnZXQgPSBzdWJncm91cHNbaiArICItIiArIGldOwot
ICAgICAgICAgIGlmIChzb3VyY2UudmFsdWUgfHwgdGFyZ2V0LnZhbHVlKSB7Ci0gICAgICAgICAg
ICBjaG9yZHMucHVzaChzb3VyY2UudmFsdWUgPCB0YXJnZXQudmFsdWUgPyB7Ci0gICAgICAgICAg
ICAgIHNvdXJjZTogdGFyZ2V0LAotICAgICAgICAgICAgICB0YXJnZXQ6IHNvdXJjZQotICAgICAg
ICAgICAgfSA6IHsKLSAgICAgICAgICAgICAgc291cmNlOiBzb3VyY2UsCi0gICAgICAgICAgICAg
IHRhcmdldDogdGFyZ2V0Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGlmIChzb3J0Q2hvcmRzKSByZXNvcnQoKTsKLSAgICB9Ci0gICAgZnVu
Y3Rpb24gcmVzb3J0KCkgewotICAgICAgY2hvcmRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAg
ICAgICByZXR1cm4gc29ydENob3JkcygoYS5zb3VyY2UudmFsdWUgKyBhLnRhcmdldC52YWx1ZSkg
LyAyLCAoYi5zb3VyY2UudmFsdWUgKyBiLnRhcmdldC52YWx1ZSkgLyAyKTsKLSAgICAgIH0pOwot
ICAgIH0KLSAgICBjaG9yZC5tYXRyaXggPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBtYXRyaXg7Ci0gICAgICBuID0gKG1hdHJpeCA9IHgpICYmIG1h
dHJpeC5sZW5ndGg7Ci0gICAgICBjaG9yZHMgPSBncm91cHMgPSBudWxsOwotICAgICAgcmV0dXJu
IGNob3JkOwotICAgIH07Ci0gICAgY2hvcmQucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHsKLSAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHBhZGRpbmc7Ci0gICAgICBwYWRkaW5nID0g
eDsKLSAgICAgIGNob3JkcyA9IGdyb3VwcyA9IG51bGw7Ci0gICAgICByZXR1cm4gY2hvcmQ7Ci0g
ICAgfTsKLSAgICBjaG9yZC5zb3J0R3JvdXBzID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc29ydEdyb3VwczsKLSAgICAgIHNvcnRHcm91cHMgPSB4
OwotICAgICAgY2hvcmRzID0gZ3JvdXBzID0gbnVsbDsKLSAgICAgIHJldHVybiBjaG9yZDsKLSAg
ICB9OwotICAgIGNob3JkLnNvcnRTdWJncm91cHMgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAo
IWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzb3J0U3ViZ3JvdXBzOwotICAgICAgc29ydFN1Ymdy
b3VwcyA9IHg7Ci0gICAgICBjaG9yZHMgPSBudWxsOwotICAgICAgcmV0dXJuIGNob3JkOwotICAg
IH07Ci0gICAgY2hvcmQuc29ydENob3JkcyA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNvcnRDaG9yZHM7Ci0gICAgICBzb3J0Q2hvcmRzID0geDsK
LSAgICAgIGlmIChjaG9yZHMpIHJlc29ydCgpOwotICAgICAgcmV0dXJuIGNob3JkOwotICAgIH07
Ci0gICAgY2hvcmQuY2hvcmRzID0gZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoIWNob3JkcykgcmVs
YXlvdXQoKTsKLSAgICAgIHJldHVybiBjaG9yZHM7Ci0gICAgfTsKLSAgICBjaG9yZC5ncm91cHMg
PSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghZ3JvdXBzKSByZWxheW91dCgpOwotICAgICAgcmV0
dXJuIGdyb3VwczsKLSAgICB9OwotICAgIHJldHVybiBjaG9yZDsKLSAgfTsKLSAgZDMubGF5b3V0
LmZvcmNlID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGZvcmNlID0ge30sIGV2ZW50ID0gZDMuZGlz
cGF0Y2goInN0YXJ0IiwgInRpY2siLCAiZW5kIiksIHNpemUgPSBbIDEsIDEgXSwgZHJhZywgYWxw
aGEsIGZyaWN0aW9uID0gLjksIGxpbmtEaXN0YW5jZSA9IGQzX2xheW91dF9mb3JjZUxpbmtEaXN0
YW5jZSwgbGlua1N0cmVuZ3RoID0gZDNfbGF5b3V0X2ZvcmNlTGlua1N0cmVuZ3RoLCBjaGFyZ2Ug
PSAtMzAsIGNoYXJnZURpc3RhbmNlMiA9IGQzX2xheW91dF9mb3JjZUNoYXJnZURpc3RhbmNlMiwg
Z3Jhdml0eSA9IC4xLCB0aGV0YTIgPSAuNjQsIG5vZGVzID0gW10sIGxpbmtzID0gW10sIGRpc3Rh
bmNlcywgc3RyZW5ndGhzLCBjaGFyZ2VzOwotICAgIGZ1bmN0aW9uIHJlcHVsc2Uobm9kZSkgewot
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKHF1YWQsIHgxLCBfLCB4MikgewotICAgICAgICBpZiAocXVh
ZC5wb2ludCAhPT0gbm9kZSkgewotICAgICAgICAgIHZhciBkeCA9IHF1YWQuY3ggLSBub2RlLngs
IGR5ID0gcXVhZC5jeSAtIG5vZGUueSwgZHcgPSB4MiAtIHgxLCBkbiA9IGR4ICogZHggKyBkeSAq
IGR5OwotICAgICAgICAgIGlmIChkdyAqIGR3IC8gdGhldGEyIDwgZG4pIHsKLSAgICAgICAgICAg
IGlmIChkbiA8IGNoYXJnZURpc3RhbmNlMikgewotICAgICAgICAgICAgICB2YXIgayA9IHF1YWQu
Y2hhcmdlIC8gZG47Ci0gICAgICAgICAgICAgIG5vZGUucHggLT0gZHggKiBrOwotICAgICAgICAg
ICAgICBub2RlLnB5IC09IGR5ICogazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocXVhZC5wb2ludCAmJiBkbiAmJiBk
biA8IGNoYXJnZURpc3RhbmNlMikgewotICAgICAgICAgICAgdmFyIGsgPSBxdWFkLnBvaW50Q2hh
cmdlIC8gZG47Ci0gICAgICAgICAgICBub2RlLnB4IC09IGR4ICogazsKLSAgICAgICAgICAgIG5v
ZGUucHkgLT0gZHkgKiBrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
IXF1YWQuY2hhcmdlOwotICAgICAgfTsKLSAgICB9Ci0gICAgZm9yY2UudGljayA9IGZ1bmN0aW9u
KCkgewotICAgICAgaWYgKChhbHBoYSAqPSAuOTkpIDwgLjAwNSkgewotICAgICAgICBldmVudC5l
bmQoewotICAgICAgICAgIHR5cGU6ICJlbmQiLAotICAgICAgICAgIGFscGhhOiBhbHBoYSA9IDAK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgdmFyIG4g
PSBub2Rlcy5sZW5ndGgsIG0gPSBsaW5rcy5sZW5ndGgsIHEsIGksIG8sIHMsIHQsIGwsIGssIHgs
IHk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgKytpKSB7Ci0gICAgICAgIG8gPSBsaW5rc1tp
XTsKLSAgICAgICAgcyA9IG8uc291cmNlOwotICAgICAgICB0ID0gby50YXJnZXQ7Ci0gICAgICAg
IHggPSB0LnggLSBzLng7Ci0gICAgICAgIHkgPSB0LnkgLSBzLnk7Ci0gICAgICAgIGlmIChsID0g
eCAqIHggKyB5ICogeSkgewotICAgICAgICAgIGwgPSBhbHBoYSAqIHN0cmVuZ3Roc1tpXSAqICgo
bCA9IE1hdGguc3FydChsKSkgLSBkaXN0YW5jZXNbaV0pIC8gbDsKLSAgICAgICAgICB4ICo9IGw7
Ci0gICAgICAgICAgeSAqPSBsOwotICAgICAgICAgIHQueCAtPSB4ICogKGsgPSBzLndlaWdodCAv
ICh0LndlaWdodCArIHMud2VpZ2h0KSk7Ci0gICAgICAgICAgdC55IC09IHkgKiBrOwotICAgICAg
ICAgIHMueCArPSB4ICogKGsgPSAxIC0gayk7Ci0gICAgICAgICAgcy55ICs9IHkgKiBrOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoayA9IGFscGhhICogZ3Jhdml0eSkgewotICAgICAg
ICB4ID0gc2l6ZVswXSAvIDI7Ci0gICAgICAgIHkgPSBzaXplWzFdIC8gMjsKLSAgICAgICAgaSA9
IC0xOwotICAgICAgICBpZiAoaykgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgICBvID0gbm9k
ZXNbaV07Ci0gICAgICAgICAgby54ICs9ICh4IC0gby54KSAqIGs7Ci0gICAgICAgICAgby55ICs9
ICh5IC0gby55KSAqIGs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChjaGFyZ2UpIHsK
LSAgICAgICAgZDNfbGF5b3V0X2ZvcmNlQWNjdW11bGF0ZShxID0gZDMuZ2VvbS5xdWFkdHJlZShu
b2RlcyksIGFscGhhLCBjaGFyZ2VzKTsKLSAgICAgICAgaSA9IC0xOwotICAgICAgICB3aGlsZSAo
KytpIDwgbikgewotICAgICAgICAgIGlmICghKG8gPSBub2Rlc1tpXSkuZml4ZWQpIHsKLSAgICAg
ICAgICAgIHEudmlzaXQocmVwdWxzZShvKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBpID0gLTE7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBvID0g
bm9kZXNbaV07Ci0gICAgICAgIGlmIChvLmZpeGVkKSB7Ci0gICAgICAgICAgby54ID0gby5weDsK
LSAgICAgICAgICBvLnkgPSBvLnB5OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG8ueCAt
PSAoby5weCAtIChvLnB4ID0gby54KSkgKiBmcmljdGlvbjsKLSAgICAgICAgICBvLnkgLT0gKG8u
cHkgLSAoby5weSA9IG8ueSkpICogZnJpY3Rpb247Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGV2ZW50LnRpY2soewotICAgICAgICB0eXBlOiAidGljayIsCi0gICAgICAgIGFscGhhOiBhbHBo
YQotICAgICAgfSk7Ci0gICAgfTsKLSAgICBmb3JjZS5ub2RlcyA9IGZ1bmN0aW9uKHgpIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG5vZGVzOwotICAgICAgbm9kZXMgPSB4
OwotICAgICAgcmV0dXJuIGZvcmNlOwotICAgIH07Ci0gICAgZm9yY2UubGlua3MgPSBmdW5jdGlv
bih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsaW5rczsKLSAgICAg
IGxpbmtzID0geDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAgIGZvcmNlLnNpemUg
PSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaXpl
OwotICAgICAgc2l6ZSA9IHg7Ci0gICAgICByZXR1cm4gZm9yY2U7Ci0gICAgfTsKLSAgICBmb3Jj
ZS5saW5rRGlzdGFuY2UgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiBsaW5rRGlzdGFuY2U7Ci0gICAgICBsaW5rRGlzdGFuY2UgPSB0eXBlb2YgeCA9
PT0gImZ1bmN0aW9uIiA/IHggOiAreDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAg
IGZvcmNlLmRpc3RhbmNlID0gZm9yY2UubGlua0Rpc3RhbmNlOwotICAgIGZvcmNlLmxpbmtTdHJl
bmd0aCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJu
IGxpbmtTdHJlbmd0aDsKLSAgICAgIGxpbmtTdHJlbmd0aCA9IHR5cGVvZiB4ID09PSAiZnVuY3Rp
b24iID8geCA6ICt4OwotICAgICAgcmV0dXJuIGZvcmNlOwotICAgIH07Ci0gICAgZm9yY2UuZnJp
Y3Rpb24gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biBmcmljdGlvbjsKLSAgICAgIGZyaWN0aW9uID0gK3g7Ci0gICAgICByZXR1cm4gZm9yY2U7Ci0g
ICAgfTsKLSAgICBmb3JjZS5jaGFyZ2UgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBjaGFyZ2U7Ci0gICAgICBjaGFyZ2UgPSB0eXBlb2YgeCA9PT0g
ImZ1bmN0aW9uIiA/IHggOiAreDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAgIGZv
cmNlLmNoYXJnZURpc3RhbmNlID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMu
bGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KGNoYXJnZURpc3RhbmNlMik7Ci0gICAgICBjaGFyZ2VE
aXN0YW5jZTIgPSB4ICogeDsKLSAgICAgIHJldHVybiBmb3JjZTsKLSAgICB9OwotICAgIGZvcmNl
LmdyYXZpdHkgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJl
dHVybiBncmF2aXR5OwotICAgICAgZ3Jhdml0eSA9ICt4OwotICAgICAgcmV0dXJuIGZvcmNlOwot
ICAgIH07Ci0gICAgZm9yY2UudGhldGEgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBNYXRoLnNxcnQodGhldGEyKTsKLSAgICAgIHRoZXRhMiA9IHgg
KiB4OwotICAgICAgcmV0dXJuIGZvcmNlOwotICAgIH07Ci0gICAgZm9yY2UuYWxwaGEgPSBmdW5j
dGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhbHBoYTsKLSAg
ICAgIHggPSAreDsKLSAgICAgIGlmIChhbHBoYSkgewotICAgICAgICBpZiAoeCA+IDApIGFscGhh
ID0geDsgZWxzZSBhbHBoYSA9IDA7Ci0gICAgICB9IGVsc2UgaWYgKHggPiAwKSB7Ci0gICAgICAg
IGV2ZW50LnN0YXJ0KHsKLSAgICAgICAgICB0eXBlOiAic3RhcnQiLAotICAgICAgICAgIGFscGhh
OiBhbHBoYSA9IHgKLSAgICAgICAgfSk7Ci0gICAgICAgIGQzLnRpbWVyKGZvcmNlLnRpY2spOwot
ICAgICAgfQotICAgICAgcmV0dXJuIGZvcmNlOwotICAgIH07Ci0gICAgZm9yY2Uuc3RhcnQgPSBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCBtID0gbGlua3MubGVu
Z3RoLCB3ID0gc2l6ZVswXSwgaCA9IHNpemVbMV0sIG5laWdoYm9ycywgbzsKLSAgICAgIGZvciAo
aSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgKG8gPSBub2Rlc1tpXSkuaW5kZXggPSBpOwot
ICAgICAgICBvLndlaWdodCA9IDA7Ci0gICAgICB9Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsg
KytpKSB7Ci0gICAgICAgIG8gPSBsaW5rc1tpXTsKLSAgICAgICAgaWYgKHR5cGVvZiBvLnNvdXJj
ZSA9PSAibnVtYmVyIikgby5zb3VyY2UgPSBub2Rlc1tvLnNvdXJjZV07Ci0gICAgICAgIGlmICh0
eXBlb2Ygby50YXJnZXQgPT0gIm51bWJlciIpIG8udGFyZ2V0ID0gbm9kZXNbby50YXJnZXRdOwot
ICAgICAgICArK28uc291cmNlLndlaWdodDsKLSAgICAgICAgKytvLnRhcmdldC53ZWlnaHQ7Ci0g
ICAgICB9Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIG8gPSBub2Rl
c1tpXTsKLSAgICAgICAgaWYgKGlzTmFOKG8ueCkpIG8ueCA9IHBvc2l0aW9uKCJ4Iiwgdyk7Ci0g
ICAgICAgIGlmIChpc05hTihvLnkpKSBvLnkgPSBwb3NpdGlvbigieSIsIGgpOwotICAgICAgICBp
ZiAoaXNOYU4oby5weCkpIG8ucHggPSBvLng7Ci0gICAgICAgIGlmIChpc05hTihvLnB5KSkgby5w
eSA9IG8ueTsKLSAgICAgIH0KLSAgICAgIGRpc3RhbmNlcyA9IFtdOwotICAgICAgaWYgKHR5cGVv
ZiBsaW5rRGlzdGFuY2UgPT09ICJmdW5jdGlvbiIpIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIGRp
c3RhbmNlc1tpXSA9ICtsaW5rRGlzdGFuY2UuY2FsbCh0aGlzLCBsaW5rc1tpXSwgaSk7IGVsc2Ug
Zm9yIChpID0gMDsgaSA8IG07ICsraSkgZGlzdGFuY2VzW2ldID0gbGlua0Rpc3RhbmNlOwotICAg
ICAgc3RyZW5ndGhzID0gW107Ci0gICAgICBpZiAodHlwZW9mIGxpbmtTdHJlbmd0aCA9PT0gImZ1
bmN0aW9uIikgZm9yIChpID0gMDsgaSA8IG07ICsraSkgc3RyZW5ndGhzW2ldID0gK2xpbmtTdHJl
bmd0aC5jYWxsKHRoaXMsIGxpbmtzW2ldLCBpKTsgZWxzZSBmb3IgKGkgPSAwOyBpIDwgbTsgKytp
KSBzdHJlbmd0aHNbaV0gPSBsaW5rU3RyZW5ndGg7Ci0gICAgICBjaGFyZ2VzID0gW107Ci0gICAg
ICBpZiAodHlwZW9mIGNoYXJnZSA9PT0gImZ1bmN0aW9uIikgZm9yIChpID0gMDsgaSA8IG47ICsr
aSkgY2hhcmdlc1tpXSA9ICtjaGFyZ2UuY2FsbCh0aGlzLCBub2Rlc1tpXSwgaSk7IGVsc2UgZm9y
IChpID0gMDsgaSA8IG47ICsraSkgY2hhcmdlc1tpXSA9IGNoYXJnZTsKLSAgICAgIGZ1bmN0aW9u
IHBvc2l0aW9uKGRpbWVuc2lvbiwgc2l6ZSkgewotICAgICAgICBpZiAoIW5laWdoYm9ycykgewot
ICAgICAgICAgIG5laWdoYm9ycyA9IG5ldyBBcnJheShuKTsKLSAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgbjsgKytqKSB7Ci0gICAgICAgICAgICBuZWlnaGJvcnNbal0gPSBbXTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgewotICAgICAgICAgICAgdmFy
IG8gPSBsaW5rc1tqXTsKLSAgICAgICAgICAgIG5laWdoYm9yc1tvLnNvdXJjZS5pbmRleF0ucHVz
aChvLnRhcmdldCk7Ci0gICAgICAgICAgICBuZWlnaGJvcnNbby50YXJnZXQuaW5kZXhdLnB1c2go
by5zb3VyY2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgY2FuZGlkYXRl
cyA9IG5laWdoYm9yc1tpXSwgaiA9IC0xLCBtID0gY2FuZGlkYXRlcy5sZW5ndGgsIHg7Ci0gICAg
ICAgIHdoaWxlICgrK2ogPCBtKSBpZiAoIWlzTmFOKHggPSBjYW5kaWRhdGVzW2pdW2RpbWVuc2lv
bl0pKSByZXR1cm4geDsKLSAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiBzaXplOwotICAg
ICAgfQotICAgICAgcmV0dXJuIGZvcmNlLnJlc3VtZSgpOwotICAgIH07Ci0gICAgZm9yY2UucmVz
dW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZm9yY2UuYWxwaGEoLjEpOwotICAgIH07
Ci0gICAgZm9yY2Uuc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGZvcmNlLmFscGhh
KDApOwotICAgIH07Ci0gICAgZm9yY2UuZHJhZyA9IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKCFk
cmFnKSBkcmFnID0gZDMuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihkM19pZGVudGl0eSkub24oImRy
YWdzdGFydC5mb3JjZSIsIGQzX2xheW91dF9mb3JjZURyYWdzdGFydCkub24oImRyYWcuZm9yY2Ui
LCBkcmFnbW92ZSkub24oImRyYWdlbmQuZm9yY2UiLCBkM19sYXlvdXRfZm9yY2VEcmFnZW5kKTsK
LSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRyYWc7Ci0gICAgICB0aGlzLm9u
KCJtb3VzZW92ZXIuZm9yY2UiLCBkM19sYXlvdXRfZm9yY2VNb3VzZW92ZXIpLm9uKCJtb3VzZW91
dC5mb3JjZSIsIGQzX2xheW91dF9mb3JjZU1vdXNlb3V0KS5jYWxsKGRyYWcpOwotICAgIH07Ci0g
ICAgZnVuY3Rpb24gZHJhZ21vdmUoZCkgewotICAgICAgZC5weCA9IGQzLmV2ZW50LngsIGQucHkg
PSBkMy5ldmVudC55OwotICAgICAgZm9yY2UucmVzdW1lKCk7Ci0gICAgfQotICAgIHJldHVybiBk
My5yZWJpbmQoZm9yY2UsIGV2ZW50LCAib24iKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0
X2ZvcmNlRHJhZ3N0YXJ0KGQpIHsKLSAgICBkLmZpeGVkIHw9IDI7Ci0gIH0KLSAgZnVuY3Rpb24g
ZDNfbGF5b3V0X2ZvcmNlRHJhZ2VuZChkKSB7Ci0gICAgZC5maXhlZCAmPSB+NjsKLSAgfQotICBm
dW5jdGlvbiBkM19sYXlvdXRfZm9yY2VNb3VzZW92ZXIoZCkgewotICAgIGQuZml4ZWQgfD0gNDsK
LSAgICBkLnB4ID0gZC54LCBkLnB5ID0gZC55OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9m
b3JjZU1vdXNlb3V0KGQpIHsKLSAgICBkLmZpeGVkICY9IH40OwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2xheW91dF9mb3JjZUFjY3VtdWxhdGUocXVhZCwgYWxwaGEsIGNoYXJnZXMpIHsKLSAgICB2YXIg
Y3ggPSAwLCBjeSA9IDA7Ci0gICAgcXVhZC5jaGFyZ2UgPSAwOwotICAgIGlmICghcXVhZC5sZWFm
KSB7Ci0gICAgICB2YXIgbm9kZXMgPSBxdWFkLm5vZGVzLCBuID0gbm9kZXMubGVuZ3RoLCBpID0g
LTEsIGM7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgewotICAgICAgICBjID0gbm9kZXNbaV07Ci0g
ICAgICAgIGlmIChjID09IG51bGwpIGNvbnRpbnVlOwotICAgICAgICBkM19sYXlvdXRfZm9yY2VB
Y2N1bXVsYXRlKGMsIGFscGhhLCBjaGFyZ2VzKTsKLSAgICAgICAgcXVhZC5jaGFyZ2UgKz0gYy5j
aGFyZ2U7Ci0gICAgICAgIGN4ICs9IGMuY2hhcmdlICogYy5jeDsKLSAgICAgICAgY3kgKz0gYy5j
aGFyZ2UgKiBjLmN5OwotICAgICAgfQotICAgIH0KLSAgICBpZiAocXVhZC5wb2ludCkgewotICAg
ICAgaWYgKCFxdWFkLmxlYWYpIHsKLSAgICAgICAgcXVhZC5wb2ludC54ICs9IE1hdGgucmFuZG9t
KCkgLSAuNTsKLSAgICAgICAgcXVhZC5wb2ludC55ICs9IE1hdGgucmFuZG9tKCkgLSAuNTsKLSAg
ICAgIH0KLSAgICAgIHZhciBrID0gYWxwaGEgKiBjaGFyZ2VzW3F1YWQucG9pbnQuaW5kZXhdOwot
ICAgICAgcXVhZC5jaGFyZ2UgKz0gcXVhZC5wb2ludENoYXJnZSA9IGs7Ci0gICAgICBjeCArPSBr
ICogcXVhZC5wb2ludC54OwotICAgICAgY3kgKz0gayAqIHF1YWQucG9pbnQueTsKLSAgICB9Ci0g
ICAgcXVhZC5jeCA9IGN4IC8gcXVhZC5jaGFyZ2U7Ci0gICAgcXVhZC5jeSA9IGN5IC8gcXVhZC5j
aGFyZ2U7Ci0gIH0KLSAgdmFyIGQzX2xheW91dF9mb3JjZUxpbmtEaXN0YW5jZSA9IDIwLCBkM19s
YXlvdXRfZm9yY2VMaW5rU3RyZW5ndGggPSAxLCBkM19sYXlvdXRfZm9yY2VDaGFyZ2VEaXN0YW5j
ZTIgPSBJbmZpbml0eTsKLSAgZDMubGF5b3V0LmhpZXJhcmNoeSA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciBzb3J0ID0gZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQsIGNoaWxkcmVuID0gZDNfbGF5b3V0
X2hpZXJhcmNoeUNoaWxkcmVuLCB2YWx1ZSA9IGQzX2xheW91dF9oaWVyYXJjaHlWYWx1ZTsKLSAg
ICBmdW5jdGlvbiBoaWVyYXJjaHkocm9vdCkgewotICAgICAgdmFyIHN0YWNrID0gWyByb290IF0s
IG5vZGVzID0gW10sIG5vZGU7Ci0gICAgICByb290LmRlcHRoID0gMDsKLSAgICAgIHdoaWxlICgo
bm9kZSA9IHN0YWNrLnBvcCgpKSAhPSBudWxsKSB7Ci0gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7
Ci0gICAgICAgIGlmICgoY2hpbGRzID0gY2hpbGRyZW4uY2FsbChoaWVyYXJjaHksIG5vZGUsIG5v
ZGUuZGVwdGgpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7Ci0gICAgICAgICAgdmFyIG4sIGNo
aWxkcywgY2hpbGQ7Ci0gICAgICAgICAgd2hpbGUgKC0tbiA+PSAwKSB7Ci0gICAgICAgICAgICBz
dGFjay5wdXNoKGNoaWxkID0gY2hpbGRzW25dKTsKLSAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9
IG5vZGU7Ci0gICAgICAgICAgICBjaGlsZC5kZXB0aCA9IG5vZGUuZGVwdGggKyAxOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBpZiAodmFsdWUpIG5vZGUudmFsdWUgPSAwOwotICAgICAgICAgIG5v
ZGUuY2hpbGRyZW4gPSBjaGlsZHM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHZh
bHVlKSBub2RlLnZhbHVlID0gK3ZhbHVlLmNhbGwoaGllcmFyY2h5LCBub2RlLCBub2RlLmRlcHRo
KSB8fCAwOwotICAgICAgICAgIGRlbGV0ZSBub2RlLmNoaWxkcmVuOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRlcihyb290LCBmdW5jdGlvbihu
b2RlKSB7Ci0gICAgICAgIHZhciBjaGlsZHMsIHBhcmVudDsKLSAgICAgICAgaWYgKHNvcnQgJiYg
KGNoaWxkcyA9IG5vZGUuY2hpbGRyZW4pKSBjaGlsZHMuc29ydChzb3J0KTsKLSAgICAgICAgaWYg
KHZhbHVlICYmIChwYXJlbnQgPSBub2RlLnBhcmVudCkpIHBhcmVudC52YWx1ZSArPSBub2RlLnZh
bHVlOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gbm9kZXM7Ci0gICAgfQotICAgIGhpZXJhcmNo
eS5zb3J0ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1
cm4gc29ydDsKLSAgICAgIHNvcnQgPSB4OwotICAgICAgcmV0dXJuIGhpZXJhcmNoeTsKLSAgICB9
OwotICAgIGhpZXJhcmNoeS5jaGlsZHJlbiA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNoaWxkcmVuOwotICAgICAgY2hpbGRyZW4gPSB4OwotICAg
ICAgcmV0dXJuIGhpZXJhcmNoeTsKLSAgICB9OwotICAgIGhpZXJhcmNoeS52YWx1ZSA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHZhbHVlOwotICAg
ICAgdmFsdWUgPSB4OwotICAgICAgcmV0dXJuIGhpZXJhcmNoeTsKLSAgICB9OwotICAgIGhpZXJh
cmNoeS5yZXZhbHVlID0gZnVuY3Rpb24ocm9vdCkgewotICAgICAgaWYgKHZhbHVlKSB7Ci0gICAg
ICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290LCBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIG5vZGUudmFsdWUgPSAwOwotICAgICAgICB9
KTsKLSAgICAgICAgZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgZnVuY3Rpb24o
bm9kZSkgewotICAgICAgICAgIHZhciBwYXJlbnQ7Ci0gICAgICAgICAgaWYgKCFub2RlLmNoaWxk
cmVuKSBub2RlLnZhbHVlID0gK3ZhbHVlLmNhbGwoaGllcmFyY2h5LCBub2RlLCBub2RlLmRlcHRo
KSB8fCAwOwotICAgICAgICAgIGlmIChwYXJlbnQgPSBub2RlLnBhcmVudCkgcGFyZW50LnZhbHVl
ICs9IG5vZGUudmFsdWU7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgcmV0dXJuIHJvb3Q7
Ci0gICAgfTsKLSAgICByZXR1cm4gaGllcmFyY2h5OwotICB9OwotICBmdW5jdGlvbiBkM19sYXlv
dXRfaGllcmFyY2h5UmViaW5kKG9iamVjdCwgaGllcmFyY2h5KSB7Ci0gICAgZDMucmViaW5kKG9i
amVjdCwgaGllcmFyY2h5LCAic29ydCIsICJjaGlsZHJlbiIsICJ2YWx1ZSIpOwotICAgIG9iamVj
dC5ub2RlcyA9IG9iamVjdDsKLSAgICBvYmplY3QubGlua3MgPSBkM19sYXlvdXRfaGllcmFyY2h5
TGlua3M7Ci0gICAgcmV0dXJuIG9iamVjdDsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfaGll
cmFyY2h5VmlzaXRCZWZvcmUobm9kZSwgY2FsbGJhY2spIHsKLSAgICB2YXIgbm9kZXMgPSBbIG5v
ZGUgXTsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2Rlcy5wb3AoKSkgIT0gbnVsbCkgewotICAgICAg
Y2FsbGJhY2sobm9kZSk7Ci0gICAgICBpZiAoKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikgJiYg
KG4gPSBjaGlsZHJlbi5sZW5ndGgpKSB7Ci0gICAgICAgIHZhciBuLCBjaGlsZHJlbjsKLSAgICAg
ICAgd2hpbGUgKC0tbiA+PSAwKSBub2Rlcy5wdXNoKGNoaWxkcmVuW25dKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QWZ0ZXIobm9kZSwg
Y2FsbGJhY2spIHsKLSAgICB2YXIgbm9kZXMgPSBbIG5vZGUgXSwgbm9kZXMyID0gW107Ci0gICAg
d2hpbGUgKChub2RlID0gbm9kZXMucG9wKCkpICE9IG51bGwpIHsKLSAgICAgIG5vZGVzMi5wdXNo
KG5vZGUpOwotICAgICAgaWYgKChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pICYmIChuID0gY2hp
bGRyZW4ubGVuZ3RoKSkgewotICAgICAgICB2YXIgaSA9IC0xLCBuLCBjaGlsZHJlbjsKLSAgICAg
ICAgd2hpbGUgKCsraSA8IG4pIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pOwotICAgICAgfQotICAg
IH0KLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlczIucG9wKCkpICE9IG51bGwpIHsKLSAgICAgIGNh
bGxiYWNrKG5vZGUpOwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5
Q2hpbGRyZW4oZCkgewotICAgIHJldHVybiBkLmNoaWxkcmVuOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2xheW91dF9oaWVyYXJjaHlWYWx1ZShkKSB7Ci0gICAgcmV0dXJuIGQudmFsdWU7Ci0gIH0KLSAg
ZnVuY3Rpb24gZDNfbGF5b3V0X2hpZXJhcmNoeVNvcnQoYSwgYikgewotICAgIHJldHVybiBiLnZh
bHVlIC0gYS52YWx1ZTsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfaGllcmFyY2h5TGlua3Mo
bm9kZXMpIHsKLSAgICByZXR1cm4gZDMubWVyZ2Uobm9kZXMubWFwKGZ1bmN0aW9uKHBhcmVudCkg
ewotICAgICAgcmV0dXJuIChwYXJlbnQuY2hpbGRyZW4gfHwgW10pLm1hcChmdW5jdGlvbihjaGls
ZCkgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgIHNvdXJjZTogcGFyZW50LAotICAgICAg
ICAgIHRhcmdldDogY2hpbGQKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgIH0pKTsKLSAgfQot
ICBkMy5sYXlvdXQucGFydGl0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhpZXJhcmNoeSA9
IGQzLmxheW91dC5oaWVyYXJjaHkoKSwgc2l6ZSA9IFsgMSwgMSBdOwotICAgIGZ1bmN0aW9uIHBv
c2l0aW9uKG5vZGUsIHgsIGR4LCBkeSkgewotICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGls
ZHJlbjsKLSAgICAgIG5vZGUueCA9IHg7Ci0gICAgICBub2RlLnkgPSBub2RlLmRlcHRoICogZHk7
Ci0gICAgICBub2RlLmR4ID0gZHg7Ci0gICAgICBub2RlLmR5ID0gZHk7Ci0gICAgICBpZiAoY2hp
bGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpKSB7Ci0gICAgICAgIHZhciBpID0gLTEsIG4s
IGMsIGQ7Ci0gICAgICAgIGR4ID0gbm9kZS52YWx1ZSA/IGR4IC8gbm9kZS52YWx1ZSA6IDA7Ci0g
ICAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgICAgcG9zaXRpb24oYyA9IGNoaWxkcmVu
W2ldLCB4LCBkID0gYy52YWx1ZSAqIGR4LCBkeSk7Ci0gICAgICAgICAgeCArPSBkOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIGRlcHRoKG5vZGUpIHsKLSAgICAgIHZh
ciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sIGQgPSAwOwotICAgICAgaWYgKGNoaWxkcmVuICYm
IChuID0gY2hpbGRyZW4ubGVuZ3RoKSkgewotICAgICAgICB2YXIgaSA9IC0xLCBuOwotICAgICAg
ICB3aGlsZSAoKytpIDwgbikgZCA9IE1hdGgubWF4KGQsIGRlcHRoKGNoaWxkcmVuW2ldKSk7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gMSArIGQ7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBhcnRpdGlv
bihkLCBpKSB7Ci0gICAgICB2YXIgbm9kZXMgPSBoaWVyYXJjaHkuY2FsbCh0aGlzLCBkLCBpKTsK
LSAgICAgIHBvc2l0aW9uKG5vZGVzWzBdLCAwLCBzaXplWzBdLCBzaXplWzFdIC8gZGVwdGgobm9k
ZXNbMF0pKTsKLSAgICAgIHJldHVybiBub2RlczsKLSAgICB9Ci0gICAgcGFydGl0aW9uLnNpemUg
PSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaXpl
OwotICAgICAgc2l6ZSA9IHg7Ci0gICAgICByZXR1cm4gcGFydGl0aW9uOwotICAgIH07Ci0gICAg
cmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQocGFydGl0aW9uLCBoaWVyYXJjaHkpOwot
ICB9OwotICBkMy5sYXlvdXQucGllID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHZhbHVlID0gTnVt
YmVyLCBzb3J0ID0gZDNfbGF5b3V0X3BpZVNvcnRCeVZhbHVlLCBzdGFydEFuZ2xlID0gMCwgZW5k
QW5nbGUgPSDPhDsKLSAgICBmdW5jdGlvbiBwaWUoZGF0YSkgewotICAgICAgdmFyIHZhbHVlcyA9
IGRhdGEubWFwKGZ1bmN0aW9uKGQsIGkpIHsKLSAgICAgICAgcmV0dXJuICt2YWx1ZS5jYWxsKHBp
ZSwgZCwgaSk7Ci0gICAgICB9KTsKLSAgICAgIHZhciBhID0gKyh0eXBlb2Ygc3RhcnRBbmdsZSA9
PT0gImZ1bmN0aW9uIiA/IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHN0YXJ0
QW5nbGUpOwotICAgICAgdmFyIGsgPSAoKHR5cGVvZiBlbmRBbmdsZSA9PT0gImZ1bmN0aW9uIiA/
IGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBlbmRBbmdsZSkgLSBhKSAvIGQzLnN1
bSh2YWx1ZXMpOwotICAgICAgdmFyIGluZGV4ID0gZDMucmFuZ2UoZGF0YS5sZW5ndGgpOwotICAg
ICAgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChzb3J0ID09PSBkM19sYXlvdXRfcGllU29y
dEJ5VmFsdWUgPyBmdW5jdGlvbihpLCBqKSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZXNbal0gLSB2
YWx1ZXNbaV07Ci0gICAgICB9IDogZnVuY3Rpb24oaSwgaikgewotICAgICAgICByZXR1cm4gc29y
dChkYXRhW2ldLCBkYXRhW2pdKTsKLSAgICAgIH0pOwotICAgICAgdmFyIGFyY3MgPSBbXTsKLSAg
ICAgIGluZGV4LmZvckVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICB2YXIgZDsKLSAgICAgICAg
YXJjc1tpXSA9IHsKLSAgICAgICAgICBkYXRhOiBkYXRhW2ldLAotICAgICAgICAgIHZhbHVlOiBk
ID0gdmFsdWVzW2ldLAotICAgICAgICAgIHN0YXJ0QW5nbGU6IGEsCi0gICAgICAgICAgZW5kQW5n
bGU6IGEgKz0gZCAqIGsKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIGFyY3M7
Ci0gICAgfQotICAgIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgcmV0dXJuIHZhbHVlOwotICAgICAgdmFsdWUgPSB4OwotICAgICAgcmV0dXJu
IHBpZTsKLSAgICB9OwotICAgIHBpZS5zb3J0ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc29ydDsKLSAgICAgIHNvcnQgPSB4OwotICAgICAgcmV0
dXJuIHBpZTsKLSAgICB9OwotICAgIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oeCkgewotICAg
ICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc3RhcnRBbmdsZTsKLSAgICAgIHN0YXJ0
QW5nbGUgPSB4OwotICAgICAgcmV0dXJuIHBpZTsKLSAgICB9OwotICAgIHBpZS5lbmRBbmdsZSA9
IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGVuZEFu
Z2xlOwotICAgICAgZW5kQW5nbGUgPSB4OwotICAgICAgcmV0dXJuIHBpZTsKLSAgICB9OwotICAg
IHJldHVybiBwaWU7Ci0gIH07Ci0gIHZhciBkM19sYXlvdXRfcGllU29ydEJ5VmFsdWUgPSB7fTsK
LSAgZDMubGF5b3V0LnN0YWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHZhbHVlcyA9IGQzX2lk
ZW50aXR5LCBvcmRlciA9IGQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdCwgb2Zmc2V0ID0gZDNf
bGF5b3V0X3N0YWNrT2Zmc2V0WmVybywgb3V0ID0gZDNfbGF5b3V0X3N0YWNrT3V0LCB4ID0gZDNf
bGF5b3V0X3N0YWNrWCwgeSA9IGQzX2xheW91dF9zdGFja1k7Ci0gICAgZnVuY3Rpb24gc3RhY2so
ZGF0YSwgaW5kZXgpIHsKLSAgICAgIHZhciBzZXJpZXMgPSBkYXRhLm1hcChmdW5jdGlvbihkLCBp
KSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZXMuY2FsbChzdGFjaywgZCwgaSk7Ci0gICAgICB9KTsK
LSAgICAgIHZhciBwb2ludHMgPSBzZXJpZXMubWFwKGZ1bmN0aW9uKGQpIHsKLSAgICAgICAgcmV0
dXJuIGQubWFwKGZ1bmN0aW9uKHYsIGkpIHsKLSAgICAgICAgICByZXR1cm4gWyB4LmNhbGwoc3Rh
Y2ssIHYsIGkpLCB5LmNhbGwoc3RhY2ssIHYsIGkpIF07Ci0gICAgICAgIH0pOwotICAgICAgfSk7
Ci0gICAgICB2YXIgb3JkZXJzID0gb3JkZXIuY2FsbChzdGFjaywgcG9pbnRzLCBpbmRleCk7Ci0g
ICAgICBzZXJpZXMgPSBkMy5wZXJtdXRlKHNlcmllcywgb3JkZXJzKTsKLSAgICAgIHBvaW50cyA9
IGQzLnBlcm11dGUocG9pbnRzLCBvcmRlcnMpOwotICAgICAgdmFyIG9mZnNldHMgPSBvZmZzZXQu
Y2FsbChzdGFjaywgcG9pbnRzLCBpbmRleCk7Ci0gICAgICB2YXIgbiA9IHNlcmllcy5sZW5ndGgs
IG0gPSBzZXJpZXNbMF0ubGVuZ3RoLCBpLCBqLCBvOwotICAgICAgZm9yIChqID0gMDsgaiA8IG07
ICsraikgewotICAgICAgICBvdXQuY2FsbChzdGFjaywgc2VyaWVzWzBdW2pdLCBvID0gb2Zmc2V0
c1tqXSwgcG9pbnRzWzBdW2pdWzFdKTsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IG47ICsraSkg
ewotICAgICAgICAgIG91dC5jYWxsKHN0YWNrLCBzZXJpZXNbaV1bal0sIG8gKz0gcG9pbnRzW2kg
LSAxXVtqXVsxXSwgcG9pbnRzW2ldW2pdWzFdKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAg
cmV0dXJuIGRhdGE7Ci0gICAgfQotICAgIHN0YWNrLnZhbHVlcyA9IGZ1bmN0aW9uKHgpIHsKLSAg
ICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHZhbHVlczsKLSAgICAgIHZhbHVlcyA9
IHg7Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAgfTsKLSAgICBzdGFjay5vcmRlciA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yZGVyOwotICAg
ICAgb3JkZXIgPSB0eXBlb2YgeCA9PT0gImZ1bmN0aW9uIiA/IHggOiBkM19sYXlvdXRfc3RhY2tP
cmRlcnMuZ2V0KHgpIHx8IGQzX2xheW91dF9zdGFja09yZGVyRGVmYXVsdDsKLSAgICAgIHJldHVy
biBzdGFjazsKLSAgICB9OwotICAgIHN0YWNrLm9mZnNldCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9mZnNldDsKLSAgICAgIG9mZnNldCA9IHR5
cGVvZiB4ID09PSAiZnVuY3Rpb24iID8geCA6IGQzX2xheW91dF9zdGFja09mZnNldHMuZ2V0KHgp
IHx8IGQzX2xheW91dF9zdGFja09mZnNldFplcm87Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAg
fTsKLSAgICBzdGFjay54ID0gZnVuY3Rpb24oeikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4geDsKLSAgICAgIHggPSB6OwotICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH07
Ci0gICAgc3RhY2sueSA9IGZ1bmN0aW9uKHopIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHk7Ci0gICAgICB5ID0gejsKLSAgICAgIHJldHVybiBzdGFjazsKLSAgICB9Owot
ICAgIHN0YWNrLm91dCA9IGZ1bmN0aW9uKHopIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIG91dDsKLSAgICAgIG91dCA9IHo7Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAg
fTsKLSAgICByZXR1cm4gc3RhY2s7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9zdGFja1go
ZCkgewotICAgIHJldHVybiBkLng7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrWShk
KSB7Ci0gICAgcmV0dXJuIGQueTsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tPdXQo
ZCwgeTAsIHkpIHsKLSAgICBkLnkwID0geTA7Ci0gICAgZC55ID0geTsKLSAgfQotICB2YXIgZDNf
bGF5b3V0X3N0YWNrT3JkZXJzID0gZDMubWFwKHsKLSAgICAiaW5zaWRlLW91dCI6IGZ1bmN0aW9u
KGRhdGEpIHsKLSAgICAgIHZhciBuID0gZGF0YS5sZW5ndGgsIGksIGosIG1heCA9IGRhdGEubWFw
KGQzX2xheW91dF9zdGFja01heEluZGV4KSwgc3VtcyA9IGRhdGEubWFwKGQzX2xheW91dF9zdGFj
a1JlZHVjZVN1bSksIGluZGV4ID0gZDMucmFuZ2Uobikuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0g
ICAgICAgIHJldHVybiBtYXhbYV0gLSBtYXhbYl07Ci0gICAgICB9KSwgdG9wID0gMCwgYm90dG9t
ID0gMCwgdG9wcyA9IFtdLCBib3R0b21zID0gW107Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgIGogPSBpbmRleFtpXTsKLSAgICAgICAgaWYgKHRvcCA8IGJvdHRvbSkg
ewotICAgICAgICAgIHRvcCArPSBzdW1zW2pdOwotICAgICAgICAgIHRvcHMucHVzaChqKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBib3R0b20gKz0gc3Vtc1tqXTsKLSAgICAgICAgICBi
b3R0b21zLnB1c2goaik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBib3R0b21z
LnJldmVyc2UoKS5jb25jYXQodG9wcyk7Ci0gICAgfSwKLSAgICByZXZlcnNlOiBmdW5jdGlvbihk
YXRhKSB7Ci0gICAgICByZXR1cm4gZDMucmFuZ2UoZGF0YS5sZW5ndGgpLnJldmVyc2UoKTsKLSAg
ICB9LAotICAgICJkZWZhdWx0IjogZDNfbGF5b3V0X3N0YWNrT3JkZXJEZWZhdWx0Ci0gIH0pOwot
ICB2YXIgZDNfbGF5b3V0X3N0YWNrT2Zmc2V0cyA9IGQzLm1hcCh7Ci0gICAgc2lsaG91ZXR0ZTog
ZnVuY3Rpb24oZGF0YSkgewotICAgICAgdmFyIG4gPSBkYXRhLmxlbmd0aCwgbSA9IGRhdGFbMF0u
bGVuZ3RoLCBzdW1zID0gW10sIG1heCA9IDAsIGksIGosIG8sIHkwID0gW107Ci0gICAgICBmb3Ig
KGogPSAwOyBqIDwgbTsgKytqKSB7Ci0gICAgICAgIGZvciAoaSA9IDAsIG8gPSAwOyBpIDwgbjsg
aSsrKSBvICs9IGRhdGFbaV1bal1bMV07Ci0gICAgICAgIGlmIChvID4gbWF4KSBtYXggPSBvOwot
ICAgICAgICBzdW1zLnB1c2gobyk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgbTsg
KytqKSB7Ci0gICAgICAgIHkwW2pdID0gKG1heCAtIHN1bXNbal0pIC8gMjsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiB5MDsKLSAgICB9LAotICAgIHdpZ2dsZTogZnVuY3Rpb24oZGF0YSkgewotICAg
ICAgdmFyIG4gPSBkYXRhLmxlbmd0aCwgeCA9IGRhdGFbMF0sIG0gPSB4Lmxlbmd0aCwgaSwgaiwg
aywgczEsIHMyLCBzMywgZHgsIG8sIG8wLCB5MCA9IFtdOwotICAgICAgeTBbMF0gPSBvID0gbzAg
PSAwOwotICAgICAgZm9yIChqID0gMTsgaiA8IG07ICsraikgewotICAgICAgICBmb3IgKGkgPSAw
LCBzMSA9IDA7IGkgPCBuOyArK2kpIHMxICs9IGRhdGFbaV1bal1bMV07Ci0gICAgICAgIGZvciAo
aSA9IDAsIHMyID0gMCwgZHggPSB4W2pdWzBdIC0geFtqIC0gMV1bMF07IGkgPCBuOyArK2kpIHsK
LSAgICAgICAgICBmb3IgKGsgPSAwLCBzMyA9IChkYXRhW2ldW2pdWzFdIC0gZGF0YVtpXVtqIC0g
MV1bMV0pIC8gKDIgKiBkeCk7IGsgPCBpOyArK2spIHsKLSAgICAgICAgICAgIHMzICs9IChkYXRh
W2tdW2pdWzFdIC0gZGF0YVtrXVtqIC0gMV1bMV0pIC8gZHg7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIHMyICs9IHMzICogZGF0YVtpXVtqXVsxXTsKLSAgICAgICAgfQotICAgICAgICB5MFtqXSA9
IG8gLT0gczEgPyBzMiAvIHMxICogZHggOiAwOwotICAgICAgICBpZiAobyA8IG8wKSBvMCA9IG87
Ci0gICAgICB9Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSB5MFtqXSAtPSBvMDsKLSAg
ICAgIHJldHVybiB5MDsKLSAgICB9LAotICAgIGV4cGFuZDogZnVuY3Rpb24oZGF0YSkgewotICAg
ICAgdmFyIG4gPSBkYXRhLmxlbmd0aCwgbSA9IGRhdGFbMF0ubGVuZ3RoLCBrID0gMSAvIG4sIGks
IGosIG8sIHkwID0gW107Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSB7Ci0gICAgICAg
IGZvciAoaSA9IDAsIG8gPSAwOyBpIDwgbjsgaSsrKSBvICs9IGRhdGFbaV1bal1bMV07Ci0gICAg
ICAgIGlmIChvKSBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBkYXRhW2ldW2pdWzFdIC89IG87IGVs
c2UgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZGF0YVtpXVtqXVsxXSA9IGs7Ci0gICAgICB9Ci0g
ICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSB5MFtqXSA9IDA7Ci0gICAgICByZXR1cm4geTA7
Ci0gICAgfSwKLSAgICB6ZXJvOiBkM19sYXlvdXRfc3RhY2tPZmZzZXRaZXJvCi0gIH0pOwotICBm
dW5jdGlvbiBkM19sYXlvdXRfc3RhY2tPcmRlckRlZmF1bHQoZGF0YSkgewotICAgIHJldHVybiBk
My5yYW5nZShkYXRhLmxlbmd0aCk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3N0YWNrT2Zm
c2V0WmVybyhkYXRhKSB7Ci0gICAgdmFyIGogPSAtMSwgbSA9IGRhdGFbMF0ubGVuZ3RoLCB5MCA9
IFtdOwotICAgIHdoaWxlICgrK2ogPCBtKSB5MFtqXSA9IDA7Ci0gICAgcmV0dXJuIHkwOwotICB9
Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9zdGFja01heEluZGV4KGFycmF5KSB7Ci0gICAgdmFyIGkg
PSAxLCBqID0gMCwgdiA9IGFycmF5WzBdWzFdLCBrLCBuID0gYXJyYXkubGVuZ3RoOwotICAgIGZv
ciAoO2kgPCBuOyArK2kpIHsKLSAgICAgIGlmICgoayA9IGFycmF5W2ldWzFdKSA+IHYpIHsKLSAg
ICAgICAgaiA9IGk7Ci0gICAgICAgIHYgPSBrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
ajsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfc3RhY2tSZWR1Y2VTdW0oZCkgewotICAgIHJl
dHVybiBkLnJlZHVjZShkM19sYXlvdXRfc3RhY2tTdW0sIDApOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2xheW91dF9zdGFja1N1bShwLCBkKSB7Ci0gICAgcmV0dXJuIHAgKyBkWzFdOwotICB9Ci0gIGQz
LmxheW91dC5oaXN0b2dyYW0gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgZnJlcXVlbmN5ID0gdHJ1
ZSwgdmFsdWVyID0gTnVtYmVyLCByYW5nZXIgPSBkM19sYXlvdXRfaGlzdG9ncmFtUmFuZ2UsIGJp
bm5lciA9IGQzX2xheW91dF9oaXN0b2dyYW1CaW5TdHVyZ2VzOwotICAgIGZ1bmN0aW9uIGhpc3Rv
Z3JhbShkYXRhLCBpKSB7Ci0gICAgICB2YXIgYmlucyA9IFtdLCB2YWx1ZXMgPSBkYXRhLm1hcCh2
YWx1ZXIsIHRoaXMpLCByYW5nZSA9IHJhbmdlci5jYWxsKHRoaXMsIHZhbHVlcywgaSksIHRocmVz
aG9sZHMgPSBiaW5uZXIuY2FsbCh0aGlzLCByYW5nZSwgdmFsdWVzLCBpKSwgYmluLCBpID0gLTEs
IG4gPSB2YWx1ZXMubGVuZ3RoLCBtID0gdGhyZXNob2xkcy5sZW5ndGggLSAxLCBrID0gZnJlcXVl
bmN5ID8gMSA6IDEgLyBuLCB4OwotICAgICAgd2hpbGUgKCsraSA8IG0pIHsKLSAgICAgICAgYmlu
ID0gYmluc1tpXSA9IFtdOwotICAgICAgICBiaW4uZHggPSB0aHJlc2hvbGRzW2kgKyAxXSAtIChi
aW4ueCA9IHRocmVzaG9sZHNbaV0pOwotICAgICAgICBiaW4ueSA9IDA7Ci0gICAgICB9Ci0gICAg
ICBpZiAobSA+IDApIHsKLSAgICAgICAgaSA9IC0xOwotICAgICAgICB3aGlsZSAoKytpIDwgbikg
ewotICAgICAgICAgIHggPSB2YWx1ZXNbaV07Ci0gICAgICAgICAgaWYgKHggPj0gcmFuZ2VbMF0g
JiYgeCA8PSByYW5nZVsxXSkgewotICAgICAgICAgICAgYmluID0gYmluc1tkMy5iaXNlY3QodGhy
ZXNob2xkcywgeCwgMSwgbSkgLSAxXTsKLSAgICAgICAgICAgIGJpbi55ICs9IGs7Ci0gICAgICAg
ICAgICBiaW4ucHVzaChkYXRhW2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICAgIHJldHVybiBiaW5zOwotICAgIH0KLSAgICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlv
bih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2YWx1ZXI7Ci0gICAg
ICB2YWx1ZXIgPSB4OwotICAgICAgcmV0dXJuIGhpc3RvZ3JhbTsKLSAgICB9OwotICAgIGhpc3Rv
Z3JhbS5yYW5nZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHJhbmdlcjsKLSAgICAgIHJhbmdlciA9IGQzX2Z1bmN0b3IoeCk7Ci0gICAgICByZXR1
cm4gaGlzdG9ncmFtOwotICAgIH07Ci0gICAgaGlzdG9ncmFtLmJpbnMgPSBmdW5jdGlvbih4KSB7
Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBiaW5uZXI7Ci0gICAgICBiaW5u
ZXIgPSB0eXBlb2YgeCA9PT0gIm51bWJlciIgPyBmdW5jdGlvbihyYW5nZSkgewotICAgICAgICBy
ZXR1cm4gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpbkZpeGVkKHJhbmdlLCB4KTsKLSAgICAgIH0gOiBk
M19mdW5jdG9yKHgpOwotICAgICAgcmV0dXJuIGhpc3RvZ3JhbTsKLSAgICB9OwotICAgIGhpc3Rv
Z3JhbS5mcmVxdWVuY3kgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiBmcmVxdWVuY3k7Ci0gICAgICBmcmVxdWVuY3kgPSAhIXg7Ci0gICAgICByZXR1
cm4gaGlzdG9ncmFtOwotICAgIH07Ci0gICAgcmV0dXJuIGhpc3RvZ3JhbTsKLSAgfTsKLSAgZnVu
Y3Rpb24gZDNfbGF5b3V0X2hpc3RvZ3JhbUJpblN0dXJnZXMocmFuZ2UsIHZhbHVlcykgewotICAg
IHJldHVybiBkM19sYXlvdXRfaGlzdG9ncmFtQmluRml4ZWQocmFuZ2UsIE1hdGguY2VpbChNYXRo
LmxvZyh2YWx1ZXMubGVuZ3RoKSAvIE1hdGguTE4yICsgMSkpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X2xheW91dF9oaXN0b2dyYW1CaW5GaXhlZChyYW5nZSwgbikgewotICAgIHZhciB4ID0gLTEsIGIg
PSArcmFuZ2VbMF0sIG0gPSAocmFuZ2VbMV0gLSBiKSAvIG4sIGYgPSBbXTsKLSAgICB3aGlsZSAo
Kyt4IDw9IG4pIGZbeF0gPSBtICogeCArIGI7Ci0gICAgcmV0dXJuIGY7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfbGF5b3V0X2hpc3RvZ3JhbVJhbmdlKHZhbHVlcykgewotICAgIHJldHVybiBbIGQzLm1p
bih2YWx1ZXMpLCBkMy5tYXgodmFsdWVzKSBdOwotICB9Ci0gIGQzLmxheW91dC5wYWNrID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIGhpZXJhcmNoeSA9IGQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0
KGQzX2xheW91dF9wYWNrU29ydCksIHBhZGRpbmcgPSAwLCBzaXplID0gWyAxLCAxIF0sIHJhZGl1
czsKLSAgICBmdW5jdGlvbiBwYWNrKGQsIGkpIHsKLSAgICAgIHZhciBub2RlcyA9IGhpZXJhcmNo
eS5jYWxsKHRoaXMsIGQsIGkpLCByb290ID0gbm9kZXNbMF0sIHcgPSBzaXplWzBdLCBoID0gc2l6
ZVsxXSwgciA9IHJhZGl1cyA9PSBudWxsID8gTWF0aC5zcXJ0IDogdHlwZW9mIHJhZGl1cyA9PT0g
ImZ1bmN0aW9uIiA/IHJhZGl1cyA6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gcmFkaXVz
OwotICAgICAgfTsKLSAgICAgIHJvb3QueCA9IHJvb3QueSA9IDA7Ci0gICAgICBkM19sYXlvdXRf
aGllcmFyY2h5VmlzaXRBZnRlcihyb290LCBmdW5jdGlvbihkKSB7Ci0gICAgICAgIGQuciA9ICty
KGQudmFsdWUpOwotICAgICAgfSk7Ci0gICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRBZnRl
cihyb290LCBkM19sYXlvdXRfcGFja1NpYmxpbmdzKTsKLSAgICAgIGlmIChwYWRkaW5nKSB7Ci0g
ICAgICAgIHZhciBkciA9IHBhZGRpbmcgKiAocmFkaXVzID8gMSA6IE1hdGgubWF4KDIgKiByb290
LnIgLyB3LCAyICogcm9vdC5yIC8gaCkpIC8gMjsKLSAgICAgICAgZDNfbGF5b3V0X2hpZXJhcmNo
eVZpc2l0QWZ0ZXIocm9vdCwgZnVuY3Rpb24oZCkgewotICAgICAgICAgIGQuciArPSBkcjsKLSAg
ICAgICAgfSk7Ci0gICAgICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFmdGVyKHJvb3QsIGQz
X2xheW91dF9wYWNrU2libGluZ3MpOwotICAgICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRB
ZnRlcihyb290LCBmdW5jdGlvbihkKSB7Ci0gICAgICAgICAgZC5yIC09IGRyOwotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICAgIGQzX2xheW91dF9wYWNrVHJhbnNmb3JtKHJvb3QsIHcgLyAyLCBo
IC8gMiwgcmFkaXVzID8gMSA6IDEgLyBNYXRoLm1heCgyICogcm9vdC5yIC8gdywgMiAqIHJvb3Qu
ciAvIGgpKTsKLSAgICAgIHJldHVybiBub2RlczsKLSAgICB9Ci0gICAgcGFjay5zaXplID0gZnVu
Y3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAg
ICAgIHNpemUgPSBfOwotICAgICAgcmV0dXJuIHBhY2s7Ci0gICAgfTsKLSAgICBwYWNrLnJhZGl1
cyA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJh
ZGl1czsKLSAgICAgIHJhZGl1cyA9IF8gPT0gbnVsbCB8fCB0eXBlb2YgXyA9PT0gImZ1bmN0aW9u
IiA/IF8gOiArXzsKLSAgICAgIHJldHVybiBwYWNrOwotICAgIH07Ci0gICAgcGFjay5wYWRkaW5n
ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcGFk
ZGluZzsKLSAgICAgIHBhZGRpbmcgPSArXzsKLSAgICAgIHJldHVybiBwYWNrOwotICAgIH07Ci0g
ICAgcmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQocGFjaywgaGllcmFyY2h5KTsKLSAg
fTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tTb3J0KGEsIGIpIHsKLSAgICByZXR1cm4gYS52
YWx1ZSAtIGIudmFsdWU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tJbnNlcnQoYSwg
YikgewotICAgIHZhciBjID0gYS5fcGFja19uZXh0OwotICAgIGEuX3BhY2tfbmV4dCA9IGI7Ci0g
ICAgYi5fcGFja19wcmV2ID0gYTsKLSAgICBiLl9wYWNrX25leHQgPSBjOwotICAgIGMuX3BhY2tf
cHJldiA9IGI7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tTcGxpY2UoYSwgYikgewot
ICAgIGEuX3BhY2tfbmV4dCA9IGI7Ci0gICAgYi5fcGFja19wcmV2ID0gYTsKLSAgfQotICBmdW5j
dGlvbiBkM19sYXlvdXRfcGFja0ludGVyc2VjdHMoYSwgYikgewotICAgIHZhciBkeCA9IGIueCAt
IGEueCwgZHkgPSBiLnkgLSBhLnksIGRyID0gYS5yICsgYi5yOwotICAgIHJldHVybiAuOTk5ICog
ZHIgKiBkciA+IGR4ICogZHggKyBkeSAqIGR5OwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9w
YWNrU2libGluZ3Mobm9kZSkgewotICAgIGlmICghKG5vZGVzID0gbm9kZS5jaGlsZHJlbikgfHwg
IShuID0gbm9kZXMubGVuZ3RoKSkgcmV0dXJuOwotICAgIHZhciBub2RlcywgeE1pbiA9IEluZmlu
aXR5LCB4TWF4ID0gLUluZmluaXR5LCB5TWluID0gSW5maW5pdHksIHlNYXggPSAtSW5maW5pdHks
IGEsIGIsIGMsIGksIGosIGssIG47Ci0gICAgZnVuY3Rpb24gYm91bmQobm9kZSkgewotICAgICAg
eE1pbiA9IE1hdGgubWluKG5vZGUueCAtIG5vZGUuciwgeE1pbik7Ci0gICAgICB4TWF4ID0gTWF0
aC5tYXgobm9kZS54ICsgbm9kZS5yLCB4TWF4KTsKLSAgICAgIHlNaW4gPSBNYXRoLm1pbihub2Rl
LnkgLSBub2RlLnIsIHlNaW4pOwotICAgICAgeU1heCA9IE1hdGgubWF4KG5vZGUueSArIG5vZGUu
ciwgeU1heCk7Ci0gICAgfQotICAgIG5vZGVzLmZvckVhY2goZDNfbGF5b3V0X3BhY2tMaW5rKTsK
LSAgICBhID0gbm9kZXNbMF07Ci0gICAgYS54ID0gLWEucjsKLSAgICBhLnkgPSAwOwotICAgIGJv
dW5kKGEpOwotICAgIGlmIChuID4gMSkgewotICAgICAgYiA9IG5vZGVzWzFdOwotICAgICAgYi54
ID0gYi5yOwotICAgICAgYi55ID0gMDsKLSAgICAgIGJvdW5kKGIpOwotICAgICAgaWYgKG4gPiAy
KSB7Ci0gICAgICAgIGMgPSBub2Rlc1syXTsKLSAgICAgICAgZDNfbGF5b3V0X3BhY2tQbGFjZShh
LCBiLCBjKTsKLSAgICAgICAgYm91bmQoYyk7Ci0gICAgICAgIGQzX2xheW91dF9wYWNrSW5zZXJ0
KGEsIGMpOwotICAgICAgICBhLl9wYWNrX3ByZXYgPSBjOwotICAgICAgICBkM19sYXlvdXRfcGFj
a0luc2VydChjLCBiKTsKLSAgICAgICAgYiA9IGEuX3BhY2tfbmV4dDsKLSAgICAgICAgZm9yIChp
ID0gMzsgaSA8IG47IGkrKykgewotICAgICAgICAgIGQzX2xheW91dF9wYWNrUGxhY2UoYSwgYiwg
YyA9IG5vZGVzW2ldKTsKLSAgICAgICAgICB2YXIgaXNlY3QgPSAwLCBzMSA9IDEsIHMyID0gMTsK
LSAgICAgICAgICBmb3IgKGogPSBiLl9wYWNrX25leHQ7IGogIT09IGI7IGogPSBqLl9wYWNrX25l
eHQsIHMxKyspIHsKLSAgICAgICAgICAgIGlmIChkM19sYXlvdXRfcGFja0ludGVyc2VjdHMoaiwg
YykpIHsKLSAgICAgICAgICAgICAgaXNlY3QgPSAxOwotICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzZWN0ID09IDEpIHsKLSAg
ICAgICAgICAgIGZvciAoayA9IGEuX3BhY2tfcHJldjsgayAhPT0gai5fcGFja19wcmV2OyBrID0g
ay5fcGFja19wcmV2LCBzMisrKSB7Ci0gICAgICAgICAgICAgIGlmIChkM19sYXlvdXRfcGFja0lu
dGVyc2VjdHMoaywgYykpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNlY3QpIHsKLSAg
ICAgICAgICAgIGlmIChzMSA8IHMyIHx8IHMxID09IHMyICYmIGIuciA8IGEucikgZDNfbGF5b3V0
X3BhY2tTcGxpY2UoYSwgYiA9IGopOyBlbHNlIGQzX2xheW91dF9wYWNrU3BsaWNlKGEgPSBrLCBi
KTsKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZDNf
bGF5b3V0X3BhY2tJbnNlcnQoYSwgYyk7Ci0gICAgICAgICAgICBiID0gYzsKLSAgICAgICAgICAg
IGJvdW5kKGMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICB2
YXIgY3ggPSAoeE1pbiArIHhNYXgpIC8gMiwgY3kgPSAoeU1pbiArIHlNYXgpIC8gMiwgY3IgPSAw
OwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGMgPSBub2Rlc1tpXTsKLSAg
ICAgIGMueCAtPSBjeDsKLSAgICAgIGMueSAtPSBjeTsKLSAgICAgIGNyID0gTWF0aC5tYXgoY3Is
IGMuciArIE1hdGguc3FydChjLnggKiBjLnggKyBjLnkgKiBjLnkpKTsKLSAgICB9Ci0gICAgbm9k
ZS5yID0gY3I7Ci0gICAgbm9kZXMuZm9yRWFjaChkM19sYXlvdXRfcGFja1VubGluayk7Ci0gIH0K
LSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tMaW5rKG5vZGUpIHsKLSAgICBub2RlLl9wYWNrX25l
eHQgPSBub2RlLl9wYWNrX3ByZXYgPSBub2RlOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9w
YWNrVW5saW5rKG5vZGUpIHsKLSAgICBkZWxldGUgbm9kZS5fcGFja19uZXh0OwotICAgIGRlbGV0
ZSBub2RlLl9wYWNrX3ByZXY7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3BhY2tUcmFuc2Zv
cm0obm9kZSwgeCwgeSwgaykgewotICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47Ci0g
ICAgbm9kZS54ID0geCArPSBrICogbm9kZS54OwotICAgIG5vZGUueSA9IHkgKz0gayAqIG5vZGUu
eTsKLSAgICBub2RlLnIgKj0gazsKLSAgICBpZiAoY2hpbGRyZW4pIHsKLSAgICAgIHZhciBpID0g
LTEsIG4gPSBjaGlsZHJlbi5sZW5ndGg7Ci0gICAgICB3aGlsZSAoKytpIDwgbikgZDNfbGF5b3V0
X3BhY2tUcmFuc2Zvcm0oY2hpbGRyZW5baV0sIHgsIHksIGspOwotICAgIH0KLSAgfQotICBmdW5j
dGlvbiBkM19sYXlvdXRfcGFja1BsYWNlKGEsIGIsIGMpIHsKLSAgICB2YXIgZGIgPSBhLnIgKyBj
LnIsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTsKLSAgICBpZiAoZGIgJiYgKGR4IHx8
IGR5KSkgewotICAgICAgdmFyIGRhID0gYi5yICsgYy5yLCBkYyA9IGR4ICogZHggKyBkeSAqIGR5
OwotICAgICAgZGEgKj0gZGE7Ci0gICAgICBkYiAqPSBkYjsKLSAgICAgIHZhciB4ID0gLjUgKyAo
ZGIgLSBkYSkgLyAoMiAqIGRjKSwgeSA9IE1hdGguc3FydChNYXRoLm1heCgwLCAyICogZGEgKiAo
ZGIgKyBkYykgLSAoZGIgLT0gZGMpICogZGIgLSBkYSAqIGRhKSkgLyAoMiAqIGRjKTsKLSAgICAg
IGMueCA9IGEueCArIHggKiBkeCArIHkgKiBkeTsKLSAgICAgIGMueSA9IGEueSArIHggKiBkeSAt
IHkgKiBkeDsKLSAgICB9IGVsc2UgewotICAgICAgYy54ID0gYS54ICsgZGI7Ci0gICAgICBjLnkg
PSBhLnk7Ci0gICAgfQotICB9Ci0gIGQzLmxheW91dC50cmVlID0gZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGhpZXJhcmNoeSA9IGQzLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51
bGwpLCBzZXBhcmF0aW9uID0gZDNfbGF5b3V0X3RyZWVTZXBhcmF0aW9uLCBzaXplID0gWyAxLCAx
IF0sIG5vZGVTaXplID0gbnVsbDsKLSAgICBmdW5jdGlvbiB0cmVlKGQsIGkpIHsKLSAgICAgIHZh
ciBub2RlcyA9IGhpZXJhcmNoeS5jYWxsKHRoaXMsIGQsIGkpLCByb290MCA9IG5vZGVzWzBdLCBy
b290MSA9IHdyYXBUcmVlKHJvb3QwKTsKLSAgICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEFm
dGVyKHJvb3QxLCBmaXJzdFdhbGspLCByb290MS5wYXJlbnQubSA9IC1yb290MS56OwotICAgICAg
ZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QxLCBzZWNvbmRXYWxrKTsKLSAgICAg
IGlmIChub2RlU2l6ZSkgZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJvb3QwLCBzaXpl
Tm9kZSk7IGVsc2UgewotICAgICAgICB2YXIgbGVmdCA9IHJvb3QwLCByaWdodCA9IHJvb3QwLCBi
b3R0b20gPSByb290MDsKLSAgICAgICAgZDNfbGF5b3V0X2hpZXJhcmNoeVZpc2l0QmVmb3JlKHJv
b3QwLCBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgaWYgKG5vZGUueCA8IGxlZnQueCkgbGVm
dCA9IG5vZGU7Ci0gICAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTsK
LSAgICAgICAgICBpZiAobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aCkgYm90dG9tID0gbm9kZTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHZhciB0eCA9IHNlcGFyYXRpb24obGVmdCwgcmlnaHQpIC8g
MiAtIGxlZnQueCwga3ggPSBzaXplWzBdIC8gKHJpZ2h0LnggKyBzZXBhcmF0aW9uKHJpZ2h0LCBs
ZWZ0KSAvIDIgKyB0eCksIGt5ID0gc2l6ZVsxXSAvIChib3R0b20uZGVwdGggfHwgMSk7Ci0gICAg
ICAgIGQzX2xheW91dF9oaWVyYXJjaHlWaXNpdEJlZm9yZShyb290MCwgZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgIG5vZGUueCA9IChub2RlLnggKyB0eCkgKiBreDsKLSAgICAgICAgICBub2Rl
LnkgPSBub2RlLmRlcHRoICoga3k7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgcmV0dXJu
IG5vZGVzOwotICAgIH0KLSAgICBmdW5jdGlvbiB3cmFwVHJlZShyb290MCkgewotICAgICAgdmFy
IHJvb3QxID0gewotICAgICAgICBBOiBudWxsLAotICAgICAgICBjaGlsZHJlbjogWyByb290MCBd
Ci0gICAgICB9LCBxdWV1ZSA9IFsgcm9vdDEgXSwgbm9kZTE7Ci0gICAgICB3aGlsZSAoKG5vZGUx
ID0gcXVldWUucG9wKCkpICE9IG51bGwpIHsKLSAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBu
b2RlMS5jaGlsZHJlbiwgY2hpbGQsIGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgICAgcXVldWUucHVzaCgoY2hpbGRyZW5baV0gPSBjaGlsZCA9IHsKLSAg
ICAgICAgICAgIF86IGNoaWxkcmVuW2ldLAotICAgICAgICAgICAgcGFyZW50OiBub2RlMSwKLSAg
ICAgICAgICAgIGNoaWxkcmVuOiAoY2hpbGQgPSBjaGlsZHJlbltpXS5jaGlsZHJlbikgJiYgY2hp
bGQuc2xpY2UoKSB8fCBbXSwKLSAgICAgICAgICAgIEE6IG51bGwsCi0gICAgICAgICAgICBhOiBu
dWxsLAotICAgICAgICAgICAgejogMCwKLSAgICAgICAgICAgIG06IDAsCi0gICAgICAgICAgICBj
OiAwLAotICAgICAgICAgICAgczogMCwKLSAgICAgICAgICAgIHQ6IG51bGwsCi0gICAgICAgICAg
ICBpOiBpCi0gICAgICAgICAgfSkuYSA9IGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgcmV0dXJuIHJvb3QxLmNoaWxkcmVuWzBdOwotICAgIH0KLSAgICBmdW5jdGlvbiBmaXJzdFdh
bGsodikgewotICAgICAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbiwgc2libGluZ3MgPSB2LnBh
cmVudC5jaGlsZHJlbiwgdyA9IHYuaSA/IHNpYmxpbmdzW3YuaSAtIDFdIDogbnVsbDsKLSAgICAg
IGlmIChjaGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgZDNfbGF5b3V0X3RyZWVTaGlmdCh2KTsK
LSAgICAgICAgdmFyIG1pZHBvaW50ID0gKGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJl
bi5sZW5ndGggLSAxXS56KSAvIDI7Ci0gICAgICAgIGlmICh3KSB7Ci0gICAgICAgICAgdi56ID0g
dy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7Ci0gICAgICAgICAgdi5tID0gdi56IC0gbWlkcG9p
bnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdi56ID0gbWlkcG9pbnQ7Ci0gICAgICAg
IH0KLSAgICAgIH0gZWxzZSBpZiAodykgewotICAgICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9u
KHYuXywgdy5fKTsKLSAgICAgIH0KLSAgICAgIHYucGFyZW50LkEgPSBhcHBvcnRpb24odiwgdywg
di5wYXJlbnQuQSB8fCBzaWJsaW5nc1swXSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHNlY29uZFdh
bGsodikgewotICAgICAgdi5fLnggPSB2LnogKyB2LnBhcmVudC5tOwotICAgICAgdi5tICs9IHYu
cGFyZW50Lm07Ci0gICAgfQotICAgIGZ1bmN0aW9uIGFwcG9ydGlvbih2LCB3LCBhbmNlc3Rvcikg
ewotICAgICAgaWYgKHcpIHsKLSAgICAgICAgdmFyIHZpcCA9IHYsIHZvcCA9IHYsIHZpbSA9IHcs
IHZvbSA9IHZpcC5wYXJlbnQuY2hpbGRyZW5bMF0sIHNpcCA9IHZpcC5tLCBzb3AgPSB2b3AubSwg
c2ltID0gdmltLm0sIHNvbSA9IHZvbS5tLCBzaGlmdDsKLSAgICAgICAgd2hpbGUgKHZpbSA9IGQz
X2xheW91dF90cmVlUmlnaHQodmltKSwgdmlwID0gZDNfbGF5b3V0X3RyZWVMZWZ0KHZpcCksIHZp
bSAmJiB2aXApIHsKLSAgICAgICAgICB2b20gPSBkM19sYXlvdXRfdHJlZUxlZnQodm9tKTsKLSAg
ICAgICAgICB2b3AgPSBkM19sYXlvdXRfdHJlZVJpZ2h0KHZvcCk7Ci0gICAgICAgICAgdm9wLmEg
PSB2OwotICAgICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFy
YXRpb24odmltLl8sIHZpcC5fKTsKLSAgICAgICAgICBpZiAoc2hpZnQgPiAwKSB7Ci0gICAgICAg
ICAgICBkM19sYXlvdXRfdHJlZU1vdmUoZDNfbGF5b3V0X3RyZWVBbmNlc3Rvcih2aW0sIHYsIGFu
Y2VzdG9yKSwgdiwgc2hpZnQpOwotICAgICAgICAgICAgc2lwICs9IHNoaWZ0OwotICAgICAgICAg
ICAgc29wICs9IHNoaWZ0OwotICAgICAgICAgIH0KLSAgICAgICAgICBzaW0gKz0gdmltLm07Ci0g
ICAgICAgICAgc2lwICs9IHZpcC5tOwotICAgICAgICAgIHNvbSArPSB2b20ubTsKLSAgICAgICAg
ICBzb3AgKz0gdm9wLm07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZpbSAmJiAhZDNfbGF5b3V0
X3RyZWVSaWdodCh2b3ApKSB7Ci0gICAgICAgICAgdm9wLnQgPSB2aW07Ci0gICAgICAgICAgdm9w
Lm0gKz0gc2ltIC0gc29wOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2aXAgJiYgIWQzX2xheW91
dF90cmVlTGVmdCh2b20pKSB7Ci0gICAgICAgICAgdm9tLnQgPSB2aXA7Ci0gICAgICAgICAgdm9t
Lm0gKz0gc2lwIC0gc29tOwotICAgICAgICAgIGFuY2VzdG9yID0gdjsKLSAgICAgICAgfQotICAg
ICAgfQotICAgICAgcmV0dXJuIGFuY2VzdG9yOwotICAgIH0KLSAgICBmdW5jdGlvbiBzaXplTm9k
ZShub2RlKSB7Ci0gICAgICBub2RlLnggKj0gc2l6ZVswXTsKLSAgICAgIG5vZGUueSA9IG5vZGUu
ZGVwdGggKiBzaXplWzFdOwotICAgIH0KLSAgICB0cmVlLnNlcGFyYXRpb24gPSBmdW5jdGlvbih4
KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzZXBhcmF0aW9uOwotICAg
ICAgc2VwYXJhdGlvbiA9IHg7Ci0gICAgICByZXR1cm4gdHJlZTsKLSAgICB9OwotICAgIHRyZWUu
c2l6ZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJu
IG5vZGVTaXplID8gbnVsbCA6IHNpemU7Ci0gICAgICBub2RlU2l6ZSA9IChzaXplID0geCkgPT0g
bnVsbCA/IHNpemVOb2RlIDogbnVsbDsKLSAgICAgIHJldHVybiB0cmVlOwotICAgIH07Ci0gICAg
dHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIG5vZGVTaXplID8gc2l6ZSA6IG51bGw7Ci0gICAgICBub2RlU2l6ZSA9IChzaXpl
ID0geCkgPT0gbnVsbCA/IG51bGwgOiBzaXplTm9kZTsKLSAgICAgIHJldHVybiB0cmVlOwotICAg
IH07Ci0gICAgcmV0dXJuIGQzX2xheW91dF9oaWVyYXJjaHlSZWJpbmQodHJlZSwgaGllcmFyY2h5
KTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfbGF5b3V0X3RyZWVTZXBhcmF0aW9uKGEsIGIpIHsKLSAg
ICByZXR1cm4gYS5wYXJlbnQgPT0gYi5wYXJlbnQgPyAxIDogMjsKLSAgfQotICBmdW5jdGlvbiBk
M19sYXlvdXRfdHJlZUxlZnQodikgewotICAgIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW47Ci0g
ICAgcmV0dXJuIGNoaWxkcmVuLmxlbmd0aCA/IGNoaWxkcmVuWzBdIDogdi50OwotICB9Ci0gIGZ1
bmN0aW9uIGQzX2xheW91dF90cmVlUmlnaHQodikgewotICAgIHZhciBjaGlsZHJlbiA9IHYuY2hp
bGRyZW4sIG47Ci0gICAgcmV0dXJuIChuID0gY2hpbGRyZW4ubGVuZ3RoKSA/IGNoaWxkcmVuW24g
LSAxXSA6IHYudDsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfdHJlZU1vdmUod20sIHdwLCBz
aGlmdCkgewotICAgIHZhciBjaGFuZ2UgPSBzaGlmdCAvICh3cC5pIC0gd20uaSk7Ci0gICAgd3Au
YyAtPSBjaGFuZ2U7Ci0gICAgd3AucyArPSBzaGlmdDsKLSAgICB3bS5jICs9IGNoYW5nZTsKLSAg
ICB3cC56ICs9IHNoaWZ0OwotICAgIHdwLm0gKz0gc2hpZnQ7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
bGF5b3V0X3RyZWVTaGlmdCh2KSB7Ci0gICAgdmFyIHNoaWZ0ID0gMCwgY2hhbmdlID0gMCwgY2hp
bGRyZW4gPSB2LmNoaWxkcmVuLCBpID0gY2hpbGRyZW4ubGVuZ3RoLCB3OwotICAgIHdoaWxlICgt
LWkgPj0gMCkgewotICAgICAgdyA9IGNoaWxkcmVuW2ldOwotICAgICAgdy56ICs9IHNoaWZ0Owot
ICAgICAgdy5tICs9IHNoaWZ0OwotICAgICAgc2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMp
OwotICAgIH0KLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfdHJlZUFuY2VzdG9yKHZpbSwgdiwg
YW5jZXN0b3IpIHsKLSAgICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5h
IDogYW5jZXN0b3I7Ci0gIH0KLSAgZDMubGF5b3V0LmNsdXN0ZXIgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgaGllcmFyY2h5ID0gZDMubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUo
bnVsbCksIHNlcGFyYXRpb24gPSBkM19sYXlvdXRfdHJlZVNlcGFyYXRpb24sIHNpemUgPSBbIDEs
IDEgXSwgbm9kZVNpemUgPSBmYWxzZTsKLSAgICBmdW5jdGlvbiBjbHVzdGVyKGQsIGkpIHsKLSAg
ICAgIHZhciBub2RlcyA9IGhpZXJhcmNoeS5jYWxsKHRoaXMsIGQsIGkpLCByb290ID0gbm9kZXNb
MF0sIHByZXZpb3VzTm9kZSwgeCA9IDA7Ci0gICAgICBkM19sYXlvdXRfaGllcmFyY2h5VmlzaXRB
ZnRlcihyb290LCBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUu
Y2hpbGRyZW47Ci0gICAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHsKLSAg
ICAgICAgICBub2RlLnggPSBkM19sYXlvdXRfY2x1c3RlclgoY2hpbGRyZW4pOwotICAgICAgICAg
IG5vZGUueSA9IGQzX2xheW91dF9jbHVzdGVyWShjaGlsZHJlbik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgbm9kZS54ID0gcHJldmlvdXNOb2RlID8geCArPSBzZXBhcmF0aW9uKG5vZGUs
IHByZXZpb3VzTm9kZSkgOiAwOwotICAgICAgICAgIG5vZGUueSA9IDA7Ci0gICAgICAgICAgcHJl
dmlvdXNOb2RlID0gbm9kZTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICB2YXIgbGVmdCA9
IGQzX2xheW91dF9jbHVzdGVyTGVmdChyb290KSwgcmlnaHQgPSBkM19sYXlvdXRfY2x1c3RlclJp
Z2h0KHJvb3QpLCB4MCA9IGxlZnQueCAtIHNlcGFyYXRpb24obGVmdCwgcmlnaHQpIC8gMiwgeDEg
PSByaWdodC54ICsgc2VwYXJhdGlvbihyaWdodCwgbGVmdCkgLyAyOwotICAgICAgZDNfbGF5b3V0
X2hpZXJhcmNoeVZpc2l0QWZ0ZXIocm9vdCwgbm9kZVNpemUgPyBmdW5jdGlvbihub2RlKSB7Ci0g
ICAgICAgIG5vZGUueCA9IChub2RlLnggLSByb290LngpICogc2l6ZVswXTsKLSAgICAgICAgbm9k
ZS55ID0gKHJvb3QueSAtIG5vZGUueSkgKiBzaXplWzFdOwotICAgICAgfSA6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgbm9kZS54ID0gKG5vZGUueCAtIHgwKSAvICh4MSAtIHgwKSAqIHNpemVb
MF07Ci0gICAgICAgIG5vZGUueSA9ICgxIC0gKHJvb3QueSA/IG5vZGUueSAvIHJvb3QueSA6IDEp
KSAqIHNpemVbMV07Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBub2RlczsKLSAgICB9Ci0gICAg
Y2x1c3Rlci5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMu
bGVuZ3RoKSByZXR1cm4gc2VwYXJhdGlvbjsKLSAgICAgIHNlcGFyYXRpb24gPSB4OwotICAgICAg
cmV0dXJuIGNsdXN0ZXI7Ci0gICAgfTsKLSAgICBjbHVzdGVyLnNpemUgPSBmdW5jdGlvbih4KSB7
Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlU2l6ZSA/IG51bGwgOiBz
aXplOwotICAgICAgbm9kZVNpemUgPSAoc2l6ZSA9IHgpID09IG51bGw7Ci0gICAgICByZXR1cm4g
Y2x1c3RlcjsKLSAgICB9OwotICAgIGNsdXN0ZXIubm9kZVNpemUgPSBmdW5jdGlvbih4KSB7Ci0g
ICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBub2RlU2l6ZSA/IHNpemUgOiBudWxs
OwotICAgICAgbm9kZVNpemUgPSAoc2l6ZSA9IHgpICE9IG51bGw7Ci0gICAgICByZXR1cm4gY2x1
c3RlcjsKLSAgICB9OwotICAgIHJldHVybiBkM19sYXlvdXRfaGllcmFyY2h5UmViaW5kKGNsdXN0
ZXIsIGhpZXJhcmNoeSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9jbHVzdGVyWShjaGls
ZHJlbikgewotICAgIHJldHVybiAxICsgZDMubWF4KGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkg
ewotICAgICAgcmV0dXJuIGNoaWxkLnk7Ci0gICAgfSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5
b3V0X2NsdXN0ZXJYKGNoaWxkcmVuKSB7Ci0gICAgcmV0dXJuIGNoaWxkcmVuLnJlZHVjZShmdW5j
dGlvbih4LCBjaGlsZCkgewotICAgICAgcmV0dXJuIHggKyBjaGlsZC54OwotICAgIH0sIDApIC8g
Y2hpbGRyZW4ubGVuZ3RoOwotICB9Ci0gIGZ1bmN0aW9uIGQzX2xheW91dF9jbHVzdGVyTGVmdChu
b2RlKSB7Ci0gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKLSAgICByZXR1cm4gY2hp
bGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID8gZDNfbGF5b3V0X2NsdXN0ZXJMZWZ0KGNoaWxkcmVu
WzBdKSA6IG5vZGU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChub2Rl
KSB7Ci0gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbiwgbjsKLSAgICByZXR1cm4gY2hp
bGRyZW4gJiYgKG4gPSBjaGlsZHJlbi5sZW5ndGgpID8gZDNfbGF5b3V0X2NsdXN0ZXJSaWdodChj
aGlsZHJlbltuIC0gMV0pIDogbm9kZTsKLSAgfQotICBkMy5sYXlvdXQudHJlZW1hcCA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciBoaWVyYXJjaHkgPSBkMy5sYXlvdXQuaGllcmFyY2h5KCksIHJvdW5k
ID0gTWF0aC5yb3VuZCwgc2l6ZSA9IFsgMSwgMSBdLCBwYWRkaW5nID0gbnVsbCwgcGFkID0gZDNf
bGF5b3V0X3RyZWVtYXBQYWROdWxsLCBzdGlja3kgPSBmYWxzZSwgc3RpY2tpZXMsIG1vZGUgPSAi
c3F1YXJpZnkiLCByYXRpbyA9IC41ICogKDEgKyBNYXRoLnNxcnQoNSkpOwotICAgIGZ1bmN0aW9u
IHNjYWxlKGNoaWxkcmVuLCBrKSB7Ci0gICAgICB2YXIgaSA9IC0xLCBuID0gY2hpbGRyZW4ubGVu
Z3RoLCBjaGlsZCwgYXJlYTsKLSAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAgIGFyZWEg
PSAoY2hpbGQgPSBjaGlsZHJlbltpXSkudmFsdWUgKiAoayA8IDAgPyAwIDogayk7Ci0gICAgICAg
IGNoaWxkLmFyZWEgPSBpc05hTihhcmVhKSB8fCBhcmVhIDw9IDAgPyAwIDogYXJlYTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gc3F1YXJpZnkobm9kZSkgewotICAgICAgdmFyIGNoaWxk
cmVuID0gbm9kZS5jaGlsZHJlbjsKLSAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5n
dGgpIHsKLSAgICAgICAgdmFyIHJlY3QgPSBwYWQobm9kZSksIHJvdyA9IFtdLCByZW1haW5pbmcg
PSBjaGlsZHJlbi5zbGljZSgpLCBjaGlsZCwgYmVzdCA9IEluZmluaXR5LCBzY29yZSwgdSA9IG1v
ZGUgPT09ICJzbGljZSIgPyByZWN0LmR4IDogbW9kZSA9PT0gImRpY2UiID8gcmVjdC5keSA6IG1v
ZGUgPT09ICJzbGljZS1kaWNlIiA/IG5vZGUuZGVwdGggJiAxID8gcmVjdC5keSA6IHJlY3QuZHgg
OiBNYXRoLm1pbihyZWN0LmR4LCByZWN0LmR5KSwgbjsKLSAgICAgICAgc2NhbGUocmVtYWluaW5n
LCByZWN0LmR4ICogcmVjdC5keSAvIG5vZGUudmFsdWUpOwotICAgICAgICByb3cuYXJlYSA9IDA7
Ci0gICAgICAgIHdoaWxlICgobiA9IHJlbWFpbmluZy5sZW5ndGgpID4gMCkgewotICAgICAgICAg
IHJvdy5wdXNoKGNoaWxkID0gcmVtYWluaW5nW24gLSAxXSk7Ci0gICAgICAgICAgcm93LmFyZWEg
Kz0gY2hpbGQuYXJlYTsKLSAgICAgICAgICBpZiAobW9kZSAhPT0gInNxdWFyaWZ5IiB8fCAoc2Nv
cmUgPSB3b3JzdChyb3csIHUpKSA8PSBiZXN0KSB7Ci0gICAgICAgICAgICByZW1haW5pbmcucG9w
KCk7Ci0gICAgICAgICAgICBiZXN0ID0gc2NvcmU7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHJvdy5hcmVhIC09IHJvdy5wb3AoKS5hcmVhOwotICAgICAgICAgICAgcG9zaXRpb24o
cm93LCB1LCByZWN0LCBmYWxzZSk7Ci0gICAgICAgICAgICB1ID0gTWF0aC5taW4ocmVjdC5keCwg
cmVjdC5keSk7Ci0gICAgICAgICAgICByb3cubGVuZ3RoID0gcm93LmFyZWEgPSAwOwotICAgICAg
ICAgICAgYmVzdCA9IEluZmluaXR5OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp
ZiAocm93Lmxlbmd0aCkgewotICAgICAgICAgIHBvc2l0aW9uKHJvdywgdSwgcmVjdCwgdHJ1ZSk7
Ci0gICAgICAgICAgcm93Lmxlbmd0aCA9IHJvdy5hcmVhID0gMDsKLSAgICAgICAgfQotICAgICAg
ICBjaGlsZHJlbi5mb3JFYWNoKHNxdWFyaWZ5KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rp
b24gc3RpY2tpZnkobm9kZSkgewotICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsK
LSAgICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGgpIHsKLSAgICAgICAgdmFyIHJl
Y3QgPSBwYWQobm9kZSksIHJlbWFpbmluZyA9IGNoaWxkcmVuLnNsaWNlKCksIGNoaWxkLCByb3cg
PSBbXTsKLSAgICAgICAgc2NhbGUocmVtYWluaW5nLCByZWN0LmR4ICogcmVjdC5keSAvIG5vZGUu
dmFsdWUpOwotICAgICAgICByb3cuYXJlYSA9IDA7Ci0gICAgICAgIHdoaWxlIChjaGlsZCA9IHJl
bWFpbmluZy5wb3AoKSkgewotICAgICAgICAgIHJvdy5wdXNoKGNoaWxkKTsKLSAgICAgICAgICBy
b3cuYXJlYSArPSBjaGlsZC5hcmVhOwotICAgICAgICAgIGlmIChjaGlsZC56ICE9IG51bGwpIHsK
LSAgICAgICAgICAgIHBvc2l0aW9uKHJvdywgY2hpbGQueiA/IHJlY3QuZHggOiByZWN0LmR5LCBy
ZWN0LCAhcmVtYWluaW5nLmxlbmd0aCk7Ci0gICAgICAgICAgICByb3cubGVuZ3RoID0gcm93LmFy
ZWEgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjaGlsZHJlbi5mb3JFYWNo
KHN0aWNraWZ5KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gd29yc3Qocm93LCB1KSB7
Ci0gICAgICB2YXIgcyA9IHJvdy5hcmVhLCByLCBybWF4ID0gMCwgcm1pbiA9IEluZmluaXR5LCBp
ID0gLTEsIG4gPSByb3cubGVuZ3RoOwotICAgICAgd2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAg
aWYgKCEociA9IHJvd1tpXS5hcmVhKSkgY29udGludWU7Ci0gICAgICAgIGlmIChyIDwgcm1pbikg
cm1pbiA9IHI7Ci0gICAgICAgIGlmIChyID4gcm1heCkgcm1heCA9IHI7Ci0gICAgICB9Ci0gICAg
ICBzICo9IHM7Ci0gICAgICB1ICo9IHU7Ci0gICAgICByZXR1cm4gcyA/IE1hdGgubWF4KHUgKiBy
bWF4ICogcmF0aW8gLyBzLCBzIC8gKHUgKiBybWluICogcmF0aW8pKSA6IEluZmluaXR5OwotICAg
IH0KLSAgICBmdW5jdGlvbiBwb3NpdGlvbihyb3csIHUsIHJlY3QsIGZsdXNoKSB7Ci0gICAgICB2
YXIgaSA9IC0xLCBuID0gcm93Lmxlbmd0aCwgeCA9IHJlY3QueCwgeSA9IHJlY3QueSwgdiA9IHUg
PyByb3VuZChyb3cuYXJlYSAvIHUpIDogMCwgbzsKLSAgICAgIGlmICh1ID09IHJlY3QuZHgpIHsK
LSAgICAgICAgaWYgKGZsdXNoIHx8IHYgPiByZWN0LmR5KSB2ID0gcmVjdC5keTsKLSAgICAgICAg
d2hpbGUgKCsraSA8IG4pIHsKLSAgICAgICAgICBvID0gcm93W2ldOwotICAgICAgICAgIG8ueCA9
IHg7Ci0gICAgICAgICAgby55ID0geTsKLSAgICAgICAgICBvLmR5ID0gdjsKLSAgICAgICAgICB4
ICs9IG8uZHggPSBNYXRoLm1pbihyZWN0LnggKyByZWN0LmR4IC0geCwgdiA/IHJvdW5kKG8uYXJl
YSAvIHYpIDogMCk7Ci0gICAgICAgIH0KLSAgICAgICAgby56ID0gdHJ1ZTsKLSAgICAgICAgby5k
eCArPSByZWN0LnggKyByZWN0LmR4IC0geDsKLSAgICAgICAgcmVjdC55ICs9IHY7Ci0gICAgICAg
IHJlY3QuZHkgLT0gdjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChmbHVzaCB8fCB2ID4g
cmVjdC5keCkgdiA9IHJlY3QuZHg7Ci0gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7Ci0gICAgICAg
ICAgbyA9IHJvd1tpXTsKLSAgICAgICAgICBvLnggPSB4OwotICAgICAgICAgIG8ueSA9IHk7Ci0g
ICAgICAgICAgby5keCA9IHY7Ci0gICAgICAgICAgeSArPSBvLmR5ID0gTWF0aC5taW4ocmVjdC55
ICsgcmVjdC5keSAtIHksIHYgPyByb3VuZChvLmFyZWEgLyB2KSA6IDApOwotICAgICAgICB9Ci0g
ICAgICAgIG8ueiA9IGZhbHNlOwotICAgICAgICBvLmR5ICs9IHJlY3QueSArIHJlY3QuZHkgLSB5
OwotICAgICAgICByZWN0LnggKz0gdjsKLSAgICAgICAgcmVjdC5keCAtPSB2OwotICAgICAgfQot
ICAgIH0KLSAgICBmdW5jdGlvbiB0cmVlbWFwKGQpIHsKLSAgICAgIHZhciBub2RlcyA9IHN0aWNr
aWVzIHx8IGhpZXJhcmNoeShkKSwgcm9vdCA9IG5vZGVzWzBdOwotICAgICAgcm9vdC54ID0gMDsK
LSAgICAgIHJvb3QueSA9IDA7Ci0gICAgICByb290LmR4ID0gc2l6ZVswXTsKLSAgICAgIHJvb3Qu
ZHkgPSBzaXplWzFdOwotICAgICAgaWYgKHN0aWNraWVzKSBoaWVyYXJjaHkucmV2YWx1ZShyb290
KTsKLSAgICAgIHNjYWxlKFsgcm9vdCBdLCByb290LmR4ICogcm9vdC5keSAvIHJvb3QudmFsdWUp
OwotICAgICAgKHN0aWNraWVzID8gc3RpY2tpZnkgOiBzcXVhcmlmeSkocm9vdCk7Ci0gICAgICBp
ZiAoc3RpY2t5KSBzdGlja2llcyA9IG5vZGVzOwotICAgICAgcmV0dXJuIG5vZGVzOwotICAgIH0K
LSAgICB0cmVlbWFwLnNpemUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBzaXplOwotICAgICAgc2l6ZSA9IHg7Ci0gICAgICByZXR1cm4gdHJlZW1h
cDsKLSAgICB9OwotICAgIHRyZWVtYXAucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHBhZGRpbmc7Ci0gICAgICBmdW5jdGlvbiBwYWRG
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBwID0geC5jYWxsKHRyZWVtYXAsIG5vZGUsIG5v
ZGUuZGVwdGgpOwotICAgICAgICByZXR1cm4gcCA9PSBudWxsID8gZDNfbGF5b3V0X3RyZWVtYXBQ
YWROdWxsKG5vZGUpIDogZDNfbGF5b3V0X3RyZWVtYXBQYWQobm9kZSwgdHlwZW9mIHAgPT09ICJu
dW1iZXIiID8gWyBwLCBwLCBwLCBwIF0gOiBwKTsKLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIHBh
ZENvbnN0YW50KG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIGQzX2xheW91dF90cmVlbWFwUGFkKG5v
ZGUsIHgpOwotICAgICAgfQotICAgICAgdmFyIHR5cGU7Ci0gICAgICBwYWQgPSAocGFkZGluZyA9
IHgpID09IG51bGwgPyBkM19sYXlvdXRfdHJlZW1hcFBhZE51bGwgOiAodHlwZSA9IHR5cGVvZiB4
KSA9PT0gImZ1bmN0aW9uIiA/IHBhZEZ1bmN0aW9uIDogdHlwZSA9PT0gIm51bWJlciIgPyAoeCA9
IFsgeCwgeCwgeCwgeCBdLCAKLSAgICAgIHBhZENvbnN0YW50KSA6IHBhZENvbnN0YW50OwotICAg
ICAgcmV0dXJuIHRyZWVtYXA7Ci0gICAgfTsKLSAgICB0cmVlbWFwLnJvdW5kID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcm91bmQgIT0gTnVtYmVy
OwotICAgICAgcm91bmQgPSB4ID8gTWF0aC5yb3VuZCA6IE51bWJlcjsKLSAgICAgIHJldHVybiB0
cmVlbWFwOwotICAgIH07Ci0gICAgdHJlZW1hcC5zdGlja3kgPSBmdW5jdGlvbih4KSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzdGlja3k7Ci0gICAgICBzdGlja3kgPSB4
OwotICAgICAgc3RpY2tpZXMgPSBudWxsOwotICAgICAgcmV0dXJuIHRyZWVtYXA7Ci0gICAgfTsK
LSAgICB0cmVlbWFwLnJhdGlvID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMu
bGVuZ3RoKSByZXR1cm4gcmF0aW87Ci0gICAgICByYXRpbyA9IHg7Ci0gICAgICByZXR1cm4gdHJl
ZW1hcDsKLSAgICB9OwotICAgIHRyZWVtYXAubW9kZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlm
ICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG1vZGU7Ci0gICAgICBtb2RlID0geCArICIiOwot
ICAgICAgcmV0dXJuIHRyZWVtYXA7Ci0gICAgfTsKLSAgICByZXR1cm4gZDNfbGF5b3V0X2hpZXJh
cmNoeVJlYmluZCh0cmVlbWFwLCBoaWVyYXJjaHkpOwotICB9OwotICBmdW5jdGlvbiBkM19sYXlv
dXRfdHJlZW1hcFBhZE51bGwobm9kZSkgewotICAgIHJldHVybiB7Ci0gICAgICB4OiBub2RlLngs
Ci0gICAgICB5OiBub2RlLnksCi0gICAgICBkeDogbm9kZS5keCwKLSAgICAgIGR5OiBub2RlLmR5
Ci0gICAgfTsKLSAgfQotICBmdW5jdGlvbiBkM19sYXlvdXRfdHJlZW1hcFBhZChub2RlLCBwYWRk
aW5nKSB7Ci0gICAgdmFyIHggPSBub2RlLnggKyBwYWRkaW5nWzNdLCB5ID0gbm9kZS55ICsgcGFk
ZGluZ1swXSwgZHggPSBub2RlLmR4IC0gcGFkZGluZ1sxXSAtIHBhZGRpbmdbM10sIGR5ID0gbm9k
ZS5keSAtIHBhZGRpbmdbMF0gLSBwYWRkaW5nWzJdOwotICAgIGlmIChkeCA8IDApIHsKLSAgICAg
IHggKz0gZHggLyAyOwotICAgICAgZHggPSAwOwotICAgIH0KLSAgICBpZiAoZHkgPCAwKSB7Ci0g
ICAgICB5ICs9IGR5IC8gMjsKLSAgICAgIGR5ID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHsKLSAg
ICAgIHg6IHgsCi0gICAgICB5OiB5LAotICAgICAgZHg6IGR4LAotICAgICAgZHk6IGR5Ci0gICAg
fTsKLSAgfQotICBkMy5yYW5kb20gPSB7Ci0gICAgbm9ybWFsOiBmdW5jdGlvbijCtSwgz4MpIHsK
LSAgICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgIGlmIChuIDwgMikgz4MgPSAx
OwotICAgICAgaWYgKG4gPCAxKSDCtSA9IDA7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciB4LCB5LCByOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgeCA9IE1hdGgucmFu
ZG9tKCkgKiAyIC0gMTsKLSAgICAgICAgICB5ID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxOwotICAg
ICAgICAgIHIgPSB4ICogeCArIHkgKiB5OwotICAgICAgICB9IHdoaWxlICghciB8fCByID4gMSk7
Ci0gICAgICAgIHJldHVybiDCtSArIM+DICogeCAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIp
IC8gcik7Ci0gICAgICB9OwotICAgIH0sCi0gICAgbG9nTm9ybWFsOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHZhciByYW5kb20gPSBkMy5yYW5kb20ubm9ybWFsLmFwcGx5KGQzLCBhcmd1bWVudHMpOwot
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gTWF0aC5leHAocmFuZG9t
KCkpOwotICAgICAgfTsKLSAgICB9LAotICAgIGJhdGVzOiBmdW5jdGlvbihtKSB7Ci0gICAgICB2
YXIgcmFuZG9tID0gZDMucmFuZG9tLmlyd2luSGFsbChtKTsKLSAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKLSAgICAgICAgcmV0dXJuIHJhbmRvbSgpIC8gbTsKLSAgICAgIH07Ci0gICAgfSwKLSAg
ICBpcndpbkhhbGw6IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgZm9yICh2YXIgcyA9IDAsIGogPSAwOyBqIDwgbTsgaisrKSBzICs9IE1hdGgucmFuZG9t
KCk7Ci0gICAgICAgIHJldHVybiBzOwotICAgICAgfTsKLSAgICB9Ci0gIH07Ci0gIGQzLnNjYWxl
ID0ge307Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlRXh0ZW50KGRvbWFpbikgewotICAgIHZhciBzdGFy
dCA9IGRvbWFpblswXSwgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV07Ci0gICAgcmV0
dXJuIHN0YXJ0IDwgc3RvcCA/IFsgc3RhcnQsIHN0b3AgXSA6IFsgc3RvcCwgc3RhcnQgXTsKLSAg
fQotICBmdW5jdGlvbiBkM19zY2FsZVJhbmdlKHNjYWxlKSB7Ci0gICAgcmV0dXJuIHNjYWxlLnJh
bmdlRXh0ZW50ID8gc2NhbGUucmFuZ2VFeHRlbnQoKSA6IGQzX3NjYWxlRXh0ZW50KHNjYWxlLnJh
bmdlKCkpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX2JpbGluZWFyKGRvbWFpbiwgcmFuZ2Us
IHVuaW50ZXJwb2xhdGUsIGludGVycG9sYXRlKSB7Ci0gICAgdmFyIHUgPSB1bmludGVycG9sYXRl
KGRvbWFpblswXSwgZG9tYWluWzFdKSwgaSA9IGludGVycG9sYXRlKHJhbmdlWzBdLCByYW5nZVsx
XSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBpKHUoeCkpOwotICAg
IH07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc2NhbGVfbmljZShkb21haW4sIG5pY2UpIHsKLSAgICB2
YXIgaTAgPSAwLCBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLCB4MCA9IGRvbWFpbltpMF0sIHgxID0g
ZG9tYWluW2kxXSwgZHg7Ci0gICAgaWYgKHgxIDwgeDApIHsKLSAgICAgIGR4ID0gaTAsIGkwID0g
aTEsIGkxID0gZHg7Ci0gICAgICBkeCA9IHgwLCB4MCA9IHgxLCB4MSA9IGR4OwotICAgIH0KLSAg
ICBkb21haW5baTBdID0gbmljZS5mbG9vcih4MCk7Ci0gICAgZG9tYWluW2kxXSA9IG5pY2UuY2Vp
bCh4MSk7Ci0gICAgcmV0dXJuIGRvbWFpbjsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9uaWNl
U3RlcChzdGVwKSB7Ci0gICAgcmV0dXJuIHN0ZXAgPyB7Ci0gICAgICBmbG9vcjogZnVuY3Rpb24o
eCkgewotICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih4IC8gc3RlcCkgKiBzdGVwOwotICAgICAg
fSwKLSAgICAgIGNlaWw6IGZ1bmN0aW9uKHgpIHsKLSAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh4
IC8gc3RlcCkgKiBzdGVwOwotICAgICAgfQotICAgIH0gOiBkM19zY2FsZV9uaWNlSWRlbnRpdHk7
Ci0gIH0KLSAgdmFyIGQzX3NjYWxlX25pY2VJZGVudGl0eSA9IHsKLSAgICBmbG9vcjogZDNfaWRl
bnRpdHksCi0gICAgY2VpbDogZDNfaWRlbnRpdHkKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2NhbGVf
cG9seWxpbmVhcihkb21haW4sIHJhbmdlLCB1bmludGVycG9sYXRlLCBpbnRlcnBvbGF0ZSkgewot
ICAgIHZhciB1ID0gW10sIGkgPSBbXSwgaiA9IDAsIGsgPSBNYXRoLm1pbihkb21haW4ubGVuZ3Ro
LCByYW5nZS5sZW5ndGgpIC0gMTsKLSAgICBpZiAoZG9tYWluW2tdIDwgZG9tYWluWzBdKSB7Ci0g
ICAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7Ci0gICAgICByYW5nZSA9IHJh
bmdlLnNsaWNlKCkucmV2ZXJzZSgpOwotICAgIH0KLSAgICB3aGlsZSAoKytqIDw9IGspIHsKLSAg
ICAgIHUucHVzaCh1bmludGVycG9sYXRlKGRvbWFpbltqIC0gMV0sIGRvbWFpbltqXSkpOwotICAg
ICAgaS5wdXNoKGludGVycG9sYXRlKHJhbmdlW2ogLSAxXSwgcmFuZ2Vbal0pKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsKLSAgICAgIHZhciBqID0gZDMuYmlzZWN0KGRvbWFpbiwg
eCwgMSwgaykgLSAxOwotICAgICAgcmV0dXJuIGlbal0odVtqXSh4KSk7Ci0gICAgfTsKLSAgfQot
ICBkMy5zY2FsZS5saW5lYXIgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc2NhbGVfbGlu
ZWFyKFsgMCwgMSBdLCBbIDAsIDEgXSwgZDNfaW50ZXJwb2xhdGUsIGZhbHNlKTsKLSAgfTsKLSAg
ZnVuY3Rpb24gZDNfc2NhbGVfbGluZWFyKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlLCBjbGFt
cCkgewotICAgIHZhciBvdXRwdXQsIGlucHV0OwotICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7Ci0g
ICAgICB2YXIgbGluZWFyID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+
IDIgPyBkM19zY2FsZV9wb2x5bGluZWFyIDogZDNfc2NhbGVfYmlsaW5lYXIsIHVuaW50ZXJwb2xh
dGUgPSBjbGFtcCA/IGQzX3VuaW50ZXJwb2xhdGVDbGFtcCA6IGQzX3VuaW50ZXJwb2xhdGVOdW1i
ZXI7Ci0gICAgICBvdXRwdXQgPSBsaW5lYXIoZG9tYWluLCByYW5nZSwgdW5pbnRlcnBvbGF0ZSwg
aW50ZXJwb2xhdGUpOwotICAgICAgaW5wdXQgPSBsaW5lYXIocmFuZ2UsIGRvbWFpbiwgdW5pbnRl
cnBvbGF0ZSwgZDNfaW50ZXJwb2xhdGUpOwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH0KLSAg
ICBmdW5jdGlvbiBzY2FsZSh4KSB7Ci0gICAgICByZXR1cm4gb3V0cHV0KHgpOwotICAgIH0KLSAg
ICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7Ci0gICAgICByZXR1cm4gaW5wdXQoeSk7Ci0g
ICAgfTsKLSAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBkb21haW47Ci0gICAgICBkb21haW4gPSB4Lm1hcChOdW1iZXIp
OwotICAgICAgcmV0dXJuIHJlc2NhbGUoKTsKLSAgICB9OwotICAgIHNjYWxlLnJhbmdlID0gZnVu
Y3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcmFuZ2U7Ci0g
ICAgICByYW5nZSA9IHg7Ci0gICAgICByZXR1cm4gcmVzY2FsZSgpOwotICAgIH07Ci0gICAgc2Nh
bGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBzY2FsZS5yYW5nZSh4
KS5pbnRlcnBvbGF0ZShkM19pbnRlcnBvbGF0ZVJvdW5kKTsKLSAgICB9OwotICAgIHNjYWxlLmNs
YW1wID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4g
Y2xhbXA7Ci0gICAgICBjbGFtcCA9IHg7Ci0gICAgICByZXR1cm4gcmVzY2FsZSgpOwotICAgIH07
Ci0gICAgc2NhbGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBpbnRlcnBvbGF0ZTsKLSAgICAgIGludGVycG9sYXRlID0geDsK
LSAgICAgIHJldHVybiByZXNjYWxlKCk7Ci0gICAgfTsKLSAgICBzY2FsZS50aWNrcyA9IGZ1bmN0
aW9uKG0pIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sIG0pOwot
ICAgIH07Ci0gICAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKG0sIGZvcm1hdCkgewotICAg
ICAgcmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQoZG9tYWluLCBtLCBmb3JtYXQpOwot
ICAgIH07Ci0gICAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKG0pIHsKLSAgICAgIGQzX3NjYWxlX2xp
bmVhck5pY2UoZG9tYWluLCBtKTsKLSAgICAgIHJldHVybiByZXNjYWxlKCk7Ci0gICAgfTsKLSAg
ICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfbGluZWFy
KGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlLCBjbGFtcCk7Ci0gICAgfTsKLSAgICByZXR1cm4g
cmVzY2FsZSgpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclJlYmluZChzY2FsZSwg
bGluZWFyKSB7Ci0gICAgcmV0dXJuIGQzLnJlYmluZChzY2FsZSwgbGluZWFyLCAicmFuZ2UiLCAi
cmFuZ2VSb3VuZCIsICJpbnRlcnBvbGF0ZSIsICJjbGFtcCIpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X3NjYWxlX2xpbmVhck5pY2UoZG9tYWluLCBtKSB7Ci0gICAgcmV0dXJuIGQzX3NjYWxlX25pY2Uo
ZG9tYWluLCBkM19zY2FsZV9uaWNlU3RlcChkM19zY2FsZV9saW5lYXJUaWNrUmFuZ2UoZG9tYWlu
LCBtKVsyXSkpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21h
aW4sIG0pIHsKLSAgICBpZiAobSA9PSBudWxsKSBtID0gMTA7Ci0gICAgdmFyIGV4dGVudCA9IGQz
X3NjYWxlRXh0ZW50KGRvbWFpbiksIHNwYW4gPSBleHRlbnRbMV0gLSBleHRlbnRbMF0sIHN0ZXAg
PSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzcGFuIC8gbSkgLyBNYXRoLkxOMTAp
KSwgZXJyID0gbSAvIHNwYW4gKiBzdGVwOwotICAgIGlmIChlcnIgPD0gLjE1KSBzdGVwICo9IDEw
OyBlbHNlIGlmIChlcnIgPD0gLjM1KSBzdGVwICo9IDU7IGVsc2UgaWYgKGVyciA8PSAuNzUpIHN0
ZXAgKj0gMjsKLSAgICBleHRlbnRbMF0gPSBNYXRoLmNlaWwoZXh0ZW50WzBdIC8gc3RlcCkgKiBz
dGVwOwotICAgIGV4dGVudFsxXSA9IE1hdGguZmxvb3IoZXh0ZW50WzFdIC8gc3RlcCkgKiBzdGVw
ICsgc3RlcCAqIC41OwotICAgIGV4dGVudFsyXSA9IHN0ZXA7Ci0gICAgcmV0dXJuIGV4dGVudDsK
LSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrcyhkb21haW4sIG0pIHsKLSAgICBy
ZXR1cm4gZDMucmFuZ2UuYXBwbHkoZDMsIGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShkb21haW4s
IG0pKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KGRvbWFpbiwg
bSwgZm9ybWF0KSB7Ci0gICAgdmFyIHJhbmdlID0gZDNfc2NhbGVfbGluZWFyVGlja1JhbmdlKGRv
bWFpbiwgbSk7Ci0gICAgaWYgKGZvcm1hdCkgewotICAgICAgdmFyIG1hdGNoID0gZDNfZm9ybWF0
X3JlLmV4ZWMoZm9ybWF0KTsKLSAgICAgIG1hdGNoLnNoaWZ0KCk7Ci0gICAgICBpZiAobWF0Y2hb
OF0gPT09ICJzIikgewotICAgICAgICB2YXIgcHJlZml4ID0gZDMuZm9ybWF0UHJlZml4KE1hdGgu
bWF4KGFicyhyYW5nZVswXSksIGFicyhyYW5nZVsxXSkpKTsKLSAgICAgICAgaWYgKCFtYXRjaFs3
XSkgbWF0Y2hbN10gPSAiLiIgKyBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocHJlZml4LnNjYWxl
KHJhbmdlWzJdKSk7Ci0gICAgICAgIG1hdGNoWzhdID0gImYiOwotICAgICAgICBmb3JtYXQgPSBk
My5mb3JtYXQobWF0Y2guam9pbigiIikpOwotICAgICAgICByZXR1cm4gZnVuY3Rpb24oZCkgewot
ICAgICAgICAgIHJldHVybiBmb3JtYXQocHJlZml4LnNjYWxlKGQpKSArIHByZWZpeC5zeW1ib2w7
Ci0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgICBpZiAoIW1hdGNoWzddKSBtYXRjaFs3XSA9ICIu
IiArIGQzX3NjYWxlX2xpbmVhckZvcm1hdFByZWNpc2lvbihtYXRjaFs4XSwgcmFuZ2UpOwotICAg
ICAgZm9ybWF0ID0gbWF0Y2guam9pbigiIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvcm1hdCA9
ICIsLiIgKyBkM19zY2FsZV9saW5lYXJQcmVjaXNpb24ocmFuZ2VbMl0pICsgImYiOwotICAgIH0K
LSAgICByZXR1cm4gZDMuZm9ybWF0KGZvcm1hdCk7Ci0gIH0KLSAgdmFyIGQzX3NjYWxlX2xpbmVh
ckZvcm1hdFNpZ25pZmljYW50ID0gewotICAgIHM6IDEsCi0gICAgZzogMSwKLSAgICBwOiAxLAot
ICAgIHI6IDEsCi0gICAgZTogMQotICB9OwotICBmdW5jdGlvbiBkM19zY2FsZV9saW5lYXJQcmVj
aXNpb24odmFsdWUpIHsKLSAgICByZXR1cm4gLU1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8g
TWF0aC5MTjEwICsgLjAxKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9saW5lYXJGb3JtYXRQ
cmVjaXNpb24odHlwZSwgcmFuZ2UpIHsKLSAgICB2YXIgcCA9IGQzX3NjYWxlX2xpbmVhclByZWNp
c2lvbihyYW5nZVsyXSk7Ci0gICAgcmV0dXJuIHR5cGUgaW4gZDNfc2NhbGVfbGluZWFyRm9ybWF0
U2lnbmlmaWNhbnQgPyBNYXRoLmFicyhwIC0gZDNfc2NhbGVfbGluZWFyUHJlY2lzaW9uKE1hdGgu
bWF4KGFicyhyYW5nZVswXSksIGFicyhyYW5nZVsxXSkpKSkgKyArKHR5cGUgIT09ICJlIikgOiBw
IC0gKHR5cGUgPT09ICIlIikgKiAyOwotICB9Ci0gIGQzLnNjYWxlLmxvZyA9IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiBkM19zY2FsZV9sb2coZDMuc2NhbGUubGluZWFyKCkuZG9tYWluKFsgMCwg
MSBdKSwgMTAsIHRydWUsIFsgMSwgMTAgXSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX2xv
ZyhsaW5lYXIsIGJhc2UsIHBvc2l0aXZlLCBkb21haW4pIHsKLSAgICBmdW5jdGlvbiBsb2coeCkg
ewotICAgICAgcmV0dXJuIChwb3NpdGl2ZSA/IE1hdGgubG9nKHggPCAwID8gMCA6IHgpIDogLU1h
dGgubG9nKHggPiAwID8gMCA6IC14KSkgLyBNYXRoLmxvZyhiYXNlKTsKLSAgICB9Ci0gICAgZnVu
Y3Rpb24gcG93KHgpIHsKLSAgICAgIHJldHVybiBwb3NpdGl2ZSA/IE1hdGgucG93KGJhc2UsIHgp
IDogLU1hdGgucG93KGJhc2UsIC14KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc2NhbGUoeCkgewot
ICAgICAgcmV0dXJuIGxpbmVhcihsb2coeCkpOwotICAgIH0KLSAgICBzY2FsZS5pbnZlcnQgPSBm
dW5jdGlvbih4KSB7Ci0gICAgICByZXR1cm4gcG93KGxpbmVhci5pbnZlcnQoeCkpOwotICAgIH07
Ci0gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMu
bGVuZ3RoKSByZXR1cm4gZG9tYWluOwotICAgICAgcG9zaXRpdmUgPSB4WzBdID49IDA7Ci0gICAg
ICBsaW5lYXIuZG9tYWluKChkb21haW4gPSB4Lm1hcChOdW1iZXIpKS5tYXAobG9nKSk7Ci0gICAg
ICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5iYXNlID0gZnVuY3Rpb24oXykgewot
ICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYmFzZTsKLSAgICAgIGJhc2UgPSAr
XzsKLSAgICAgIGxpbmVhci5kb21haW4oZG9tYWluLm1hcChsb2cpKTsKLSAgICAgIHJldHVybiBz
Y2FsZTsKLSAgICB9OwotICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBu
aWNlZCA9IGQzX3NjYWxlX25pY2UoZG9tYWluLm1hcChsb2cpLCBwb3NpdGl2ZSA/IE1hdGggOiBk
M19zY2FsZV9sb2dOaWNlTmVnYXRpdmUpOwotICAgICAgbGluZWFyLmRvbWFpbihuaWNlZCk7Ci0g
ICAgICBkb21haW4gPSBuaWNlZC5tYXAocG93KTsKLSAgICAgIHJldHVybiBzY2FsZTsKLSAgICB9
OwotICAgIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgZXh0ZW50ID0gZDNf
c2NhbGVFeHRlbnQoZG9tYWluKSwgdGlja3MgPSBbXSwgdSA9IGV4dGVudFswXSwgdiA9IGV4dGVu
dFsxXSwgaSA9IE1hdGguZmxvb3IobG9nKHUpKSwgaiA9IE1hdGguY2VpbChsb2codikpLCBuID0g
YmFzZSAlIDEgPyAyIDogYmFzZTsKLSAgICAgIGlmIChpc0Zpbml0ZShqIC0gaSkpIHsKLSAgICAg
ICAgaWYgKHBvc2l0aXZlKSB7Ci0gICAgICAgICAgZm9yICg7aSA8IGo7IGkrKykgZm9yICh2YXIg
ayA9IDE7IGsgPCBuOyBrKyspIHRpY2tzLnB1c2gocG93KGkpICogayk7Ci0gICAgICAgICAgdGlj
a3MucHVzaChwb3coaSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRpY2tzLnB1c2go
cG93KGkpKTsKLSAgICAgICAgICBmb3IgKDtpKysgPCBqOyApIGZvciAodmFyIGsgPSBuIC0gMTsg
ayA+IDA7IGstLSkgdGlja3MucHVzaChwb3coaSkgKiBrKTsKLSAgICAgICAgfQotICAgICAgICBm
b3IgKGkgPSAwOyB0aWNrc1tpXSA8IHU7IGkrKykge30KLSAgICAgICAgZm9yIChqID0gdGlja3Mu
bGVuZ3RoOyB0aWNrc1tqIC0gMV0gPiB2OyBqLS0pIHt9Ci0gICAgICAgIHRpY2tzID0gdGlja3Mu
c2xpY2UoaSwgaik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGlja3M7Ci0gICAgfTsKLSAgICBz
Y2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24obiwgZm9ybWF0KSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBkM19zY2FsZV9sb2dGb3JtYXQ7Ci0gICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA8IDIpIGZvcm1hdCA9IGQzX3NjYWxlX2xvZ0Zvcm1hdDsgZWxzZSBpZiAodHlw
ZW9mIGZvcm1hdCAhPT0gImZ1bmN0aW9uIikgZm9ybWF0ID0gZDMuZm9ybWF0KGZvcm1hdCk7Ci0g
ICAgICB2YXIgayA9IE1hdGgubWF4KC4xLCBuIC8gc2NhbGUudGlja3MoKS5sZW5ndGgpLCBmID0g
cG9zaXRpdmUgPyAoZSA9IDFlLTEyLCBNYXRoLmNlaWwpIDogKGUgPSAtMWUtMTIsIAotICAgICAg
TWF0aC5mbG9vciksIGU7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24oZCkgewotICAgICAgICByZXR1
cm4gZCAvIHBvdyhmKGxvZyhkKSArIGUpKSA8PSBrID8gZm9ybWF0KGQpIDogIiI7Ci0gICAgICB9
OwotICAgIH07Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQz
X3NjYWxlX2xvZyhsaW5lYXIuY29weSgpLCBiYXNlLCBwb3NpdGl2ZSwgZG9tYWluKTsKLSAgICB9
OwotICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJSZWJpbmQoc2NhbGUsIGxpbmVhcik7Ci0gIH0K
LSAgdmFyIGQzX3NjYWxlX2xvZ0Zvcm1hdCA9IGQzLmZvcm1hdCgiLjBlIiksIGQzX3NjYWxlX2xv
Z05pY2VOZWdhdGl2ZSA9IHsKLSAgICBmbG9vcjogZnVuY3Rpb24oeCkgewotICAgICAgcmV0dXJu
IC1NYXRoLmNlaWwoLXgpOwotICAgIH0sCi0gICAgY2VpbDogZnVuY3Rpb24oeCkgewotICAgICAg
cmV0dXJuIC1NYXRoLmZsb29yKC14KTsKLSAgICB9Ci0gIH07Ci0gIGQzLnNjYWxlLnBvdyA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBkM19zY2FsZV9wb3coZDMuc2NhbGUubGluZWFyKCksIDEs
IFsgMCwgMSBdKTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc2NhbGVfcG93KGxpbmVhciwgZXhwb25l
bnQsIGRvbWFpbikgewotICAgIHZhciBwb3dwID0gZDNfc2NhbGVfcG93UG93KGV4cG9uZW50KSwg
cG93YiA9IGQzX3NjYWxlX3Bvd1BvdygxIC8gZXhwb25lbnQpOwotICAgIGZ1bmN0aW9uIHNjYWxl
KHgpIHsKLSAgICAgIHJldHVybiBsaW5lYXIocG93cCh4KSk7Ci0gICAgfQotICAgIHNjYWxlLmlu
dmVydCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBwb3diKGxpbmVhci5pbnZlcnQoeCkp
OwotICAgIH07Ci0gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFh
cmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluOwotICAgICAgbGluZWFyLmRvbWFpbigoZG9t
YWluID0geC5tYXAoTnVtYmVyKSkubWFwKHBvd3ApKTsKLSAgICAgIHJldHVybiBzY2FsZTsKLSAg
ICB9OwotICAgIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24obSkgewotICAgICAgcmV0dXJuIGQzX3Nj
YWxlX2xpbmVhclRpY2tzKGRvbWFpbiwgbSk7Ci0gICAgfTsKLSAgICBzY2FsZS50aWNrRm9ybWF0
ID0gZnVuY3Rpb24obSwgZm9ybWF0KSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlj
a0Zvcm1hdChkb21haW4sIG0sIGZvcm1hdCk7Ci0gICAgfTsKLSAgICBzY2FsZS5uaWNlID0gZnVu
Y3Rpb24obSkgewotICAgICAgcmV0dXJuIHNjYWxlLmRvbWFpbihkM19zY2FsZV9saW5lYXJOaWNl
KGRvbWFpbiwgbSkpOwotICAgIH07Ci0gICAgc2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbih4KSB7
Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBleHBvbmVudDsKLSAgICAgIHBv
d3AgPSBkM19zY2FsZV9wb3dQb3coZXhwb25lbnQgPSB4KTsKLSAgICAgIHBvd2IgPSBkM19zY2Fs
ZV9wb3dQb3coMSAvIGV4cG9uZW50KTsKLSAgICAgIGxpbmVhci5kb21haW4oZG9tYWluLm1hcChw
b3dwKSk7Ci0gICAgICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5jb3B5ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfcG93KGxpbmVhci5jb3B5KCksIGV4cG9u
ZW50LCBkb21haW4pOwotICAgIH07Ci0gICAgcmV0dXJuIGQzX3NjYWxlX2xpbmVhclJlYmluZChz
Y2FsZSwgbGluZWFyKTsKLSAgfQotICBmdW5jdGlvbiBkM19zY2FsZV9wb3dQb3coZSkgewotICAg
IHJldHVybiBmdW5jdGlvbih4KSB7Ci0gICAgICByZXR1cm4geCA8IDAgPyAtTWF0aC5wb3coLXgs
IGUpIDogTWF0aC5wb3coeCwgZSk7Ci0gICAgfTsKLSAgfQotICBkMy5zY2FsZS5zcXJ0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzLnNjYWxlLnBvdygpLmV4cG9uZW50KC41KTsKLSAgfTsK
LSAgZDMuc2NhbGUub3JkaW5hbCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19zY2FsZV9v
cmRpbmFsKFtdLCB7Ci0gICAgICB0OiAicmFuZ2UiLAotICAgICAgYTogWyBbXSBdCi0gICAgfSk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX29yZGluYWwoZG9tYWluLCByYW5nZXIpIHsKLSAg
ICB2YXIgaW5kZXgsIHJhbmdlLCByYW5nZUJhbmQ7Ci0gICAgZnVuY3Rpb24gc2NhbGUoeCkgewot
ICAgICAgcmV0dXJuIHJhbmdlWygoaW5kZXguZ2V0KHgpIHx8IChyYW5nZXIudCA9PT0gInJhbmdl
IiA/IGluZGV4LnNldCh4LCBkb21haW4ucHVzaCh4KSkgOiBOYU4pKSAtIDEpICUgcmFuZ2UubGVu
Z3RoXTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc3RlcHMoc3RhcnQsIHN0ZXApIHsKLSAgICAgIHJl
dHVybiBkMy5yYW5nZShkb21haW4ubGVuZ3RoKS5tYXAoZnVuY3Rpb24oaSkgewotICAgICAgICBy
ZXR1cm4gc3RhcnQgKyBzdGVwICogaTsKLSAgICAgIH0pOwotICAgIH0KLSAgICBzY2FsZS5kb21h
aW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBk
b21haW47Ci0gICAgICBkb21haW4gPSBbXTsKLSAgICAgIGluZGV4ID0gbmV3IGQzX01hcCgpOwot
ICAgICAgdmFyIGkgPSAtMSwgbiA9IHgubGVuZ3RoLCB4aTsKLSAgICAgIHdoaWxlICgrK2kgPCBu
KSBpZiAoIWluZGV4Lmhhcyh4aSA9IHhbaV0pKSBpbmRleC5zZXQoeGksIGRvbWFpbi5wdXNoKHhp
KSk7Ci0gICAgICByZXR1cm4gc2NhbGVbcmFuZ2VyLnRdLmFwcGx5KHNjYWxlLCByYW5nZXIuYSk7
Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIHJhbmdlOwotICAgICAgcmFuZ2UgPSB4OwotICAgICAgcmFu
Z2VCYW5kID0gMDsKLSAgICAgIHJhbmdlciA9IHsKLSAgICAgICAgdDogInJhbmdlIiwKLSAgICAg
ICAgYTogYXJndW1lbnRzCi0gICAgICB9OwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH07Ci0g
ICAgc2NhbGUucmFuZ2VQb2ludHMgPSBmdW5jdGlvbih4LCBwYWRkaW5nKSB7Ci0gICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA8IDIpIHBhZGRpbmcgPSAwOwotICAgICAgdmFyIHN0YXJ0ID0geFsw
XSwgc3RvcCA9IHhbMV0sIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIChNYXRoLm1heCgxLCBkb21h
aW4ubGVuZ3RoIC0gMSkgKyBwYWRkaW5nKTsKLSAgICAgIHJhbmdlID0gc3RlcHMoZG9tYWluLmxl
bmd0aCA8IDIgPyAoc3RhcnQgKyBzdG9wKSAvIDIgOiBzdGFydCArIHN0ZXAgKiBwYWRkaW5nIC8g
Miwgc3RlcCk7Ci0gICAgICByYW5nZUJhbmQgPSAwOwotICAgICAgcmFuZ2VyID0gewotICAgICAg
ICB0OiAicmFuZ2VQb2ludHMiLAotICAgICAgICBhOiBhcmd1bWVudHMKLSAgICAgIH07Ci0gICAg
ICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZUJhbmRzID0gZnVuY3Rpb24o
eCwgcGFkZGluZywgb3V0ZXJQYWRkaW5nKSB7Ci0gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDIpIHBhZGRpbmcgPSAwOwotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSBvdXRlclBh
ZGRpbmcgPSBwYWRkaW5nOwotICAgICAgdmFyIHJldmVyc2UgPSB4WzFdIDwgeFswXSwgc3RhcnQg
PSB4W3JldmVyc2UgLSAwXSwgc3RvcCA9IHhbMSAtIHJldmVyc2VdLCBzdGVwID0gKHN0b3AgLSBz
dGFydCkgLyAoZG9tYWluLmxlbmd0aCAtIHBhZGRpbmcgKyAyICogb3V0ZXJQYWRkaW5nKTsKLSAg
ICAgIHJhbmdlID0gc3RlcHMoc3RhcnQgKyBzdGVwICogb3V0ZXJQYWRkaW5nLCBzdGVwKTsKLSAg
ICAgIGlmIChyZXZlcnNlKSByYW5nZS5yZXZlcnNlKCk7Ci0gICAgICByYW5nZUJhbmQgPSBzdGVw
ICogKDEgLSBwYWRkaW5nKTsKLSAgICAgIHJhbmdlciA9IHsKLSAgICAgICAgdDogInJhbmdlQmFu
ZHMiLAotICAgICAgICBhOiBhcmd1bWVudHMKLSAgICAgIH07Ci0gICAgICByZXR1cm4gc2NhbGU7
Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZVJvdW5kQmFuZHMgPSBmdW5jdGlvbih4LCBwYWRkaW5n
LCBvdXRlclBhZGRpbmcpIHsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcGFkZGlu
ZyA9IDA7Ci0gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIG91dGVyUGFkZGluZyA9IHBh
ZGRpbmc7Ci0gICAgICB2YXIgcmV2ZXJzZSA9IHhbMV0gPCB4WzBdLCBzdGFydCA9IHhbcmV2ZXJz
ZSAtIDBdLCBzdG9wID0geFsxIC0gcmV2ZXJzZV0sIHN0ZXAgPSBNYXRoLmZsb29yKChzdG9wIC0g
c3RhcnQpIC8gKGRvbWFpbi5sZW5ndGggLSBwYWRkaW5nICsgMiAqIG91dGVyUGFkZGluZykpLCBl
cnJvciA9IHN0b3AgLSBzdGFydCAtIChkb21haW4ubGVuZ3RoIC0gcGFkZGluZykgKiBzdGVwOwot
ICAgICAgcmFuZ2UgPSBzdGVwcyhzdGFydCArIE1hdGgucm91bmQoZXJyb3IgLyAyKSwgc3RlcCk7
Ci0gICAgICBpZiAocmV2ZXJzZSkgcmFuZ2UucmV2ZXJzZSgpOwotICAgICAgcmFuZ2VCYW5kID0g
TWF0aC5yb3VuZChzdGVwICogKDEgLSBwYWRkaW5nKSk7Ci0gICAgICByYW5nZXIgPSB7Ci0gICAg
ICAgIHQ6ICJyYW5nZVJvdW5kQmFuZHMiLAotICAgICAgICBhOiBhcmd1bWVudHMKLSAgICAgIH07
Ci0gICAgICByZXR1cm4gc2NhbGU7Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5nZUJhbmQgPSBmdW5j
dGlvbigpIHsKLSAgICAgIHJldHVybiByYW5nZUJhbmQ7Ci0gICAgfTsKLSAgICBzY2FsZS5yYW5n
ZUV4dGVudCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQzX3NjYWxlRXh0ZW50KHJhbmdl
ci5hWzBdKTsKLSAgICB9OwotICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiBkM19zY2FsZV9vcmRpbmFsKGRvbWFpbiwgcmFuZ2VyKTsKLSAgICB9OwotICAgIHJldHVy
biBzY2FsZS5kb21haW4oZG9tYWluKTsKLSAgfQotICBkMy5zY2FsZS5jYXRlZ29yeTEwID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzLnNjYWxlLm9yZGluYWwoKS5yYW5nZShkM19jYXRlZ29y
eTEwKTsKLSAgfTsKLSAgZDMuc2NhbGUuY2F0ZWdvcnkyMCA9IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiBkMy5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoZDNfY2F0ZWdvcnkyMCk7Ci0gIH07Ci0gIGQz
LnNjYWxlLmNhdGVnb3J5MjBiID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzLnNjYWxlLm9y
ZGluYWwoKS5yYW5nZShkM19jYXRlZ29yeTIwYik7Ci0gIH07Ci0gIGQzLnNjYWxlLmNhdGVnb3J5
MjBjID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIGQzLnNjYWxlLm9yZGluYWwoKS5yYW5nZShk
M19jYXRlZ29yeTIwYyk7Ci0gIH07Ci0gIHZhciBkM19jYXRlZ29yeTEwID0gWyAyMDYyMjYwLCAx
Njc0NDIwNiwgMjkyNDU4OCwgMTQwMzQ3MjgsIDk3MjU4ODUsIDkxOTcxMzEsIDE0OTA3MzMwLCA4
MzU1NzExLCAxMjM2OTE4NiwgMTU1NjE3NSBdLm1hcChkM19yZ2JTdHJpbmcpOwotICB2YXIgZDNf
Y2F0ZWdvcnkyMCA9IFsgMjA2MjI2MCwgMTE0NTQ0NDAsIDE2NzQ0MjA2LCAxNjc1OTY3MiwgMjky
NDU4OCwgMTAwMTg2OTgsIDE0MDM0NzI4LCAxNjc1MDc0MiwgOTcyNTg4NSwgMTI5NTU4NjEsIDkx
OTcxMzEsIDEyODg1MTQwLCAxNDkwNzMzMCwgMTYyMzQxOTQsIDgzNTU3MTEsIDEzMDkyODA3LCAx
MjM2OTE4NiwgMTQ0MDg1ODksIDE1NTYxNzUsIDEwNDEwNzI1IF0ubWFwKGQzX3JnYlN0cmluZyk7
Ci0gIHZhciBkM19jYXRlZ29yeTIwYiA9IFsgMzc1MDc3NywgNTM5NTYxOSwgNzA0MDcxOSwgMTAy
NjQyODYsIDY1MTkwOTcsIDkyMTY1OTQsIDExOTE1MTE1LCAxMzU1NjYzNiwgOTIwMjk5MywgMTI0
MjY4MDksIDE1MTg2NTE0LCAxNTE5MDkzMiwgODY2NjE2OSwgMTEzNTY0OTAsIDE0MDQ5NjQzLCAx
NTE3NzM3MiwgODA3NzY4MywgMTA4MzQzMjQsIDEzNTI4NTA5LCAxNDU4OTY1NCBdLm1hcChkM19y
Z2JTdHJpbmcpOwotICB2YXIgZDNfY2F0ZWdvcnkyMGMgPSBbIDMyNDQ3MzMsIDcwNTcxMTAsIDEw
NDA2NjI1LCAxMzAzMjQzMSwgMTUwOTUwNTMsIDE2NjE2NzY0LCAxNjYyNTI1OSwgMTY2MzQwMTgs
IDMyNTMwNzYsIDc2NTI0NzAsIDEwNjA3MDAzLCAxMzEwMTUwNCwgNzY5NTI4MSwgMTAzOTQzMTIs
IDEyMzY5MzcyLCAxNDM0Mjg5MSwgNjUxMzUwNywgOTg2ODk1MCwgMTI0MzQ4NzcsIDE0Mjc3MDgx
IF0ubWFwKGQzX3JnYlN0cmluZyk7Ci0gIGQzLnNjYWxlLnF1YW50aWxlID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIGQzX3NjYWxlX3F1YW50aWxlKFtdLCBbXSk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IGQzX3NjYWxlX3F1YW50aWxlKGRvbWFpbiwgcmFuZ2UpIHsKLSAgICB2YXIgdGhyZXNob2xkczsK
LSAgICBmdW5jdGlvbiByZXNjYWxlKCkgewotICAgICAgdmFyIGsgPSAwLCBxID0gcmFuZ2UubGVu
Z3RoOwotICAgICAgdGhyZXNob2xkcyA9IFtdOwotICAgICAgd2hpbGUgKCsrayA8IHEpIHRocmVz
aG9sZHNbayAtIDFdID0gZDMucXVhbnRpbGUoZG9tYWluLCBrIC8gcSk7Ci0gICAgICByZXR1cm4g
c2NhbGU7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHsKLSAgICAgIGlmICghaXNOYU4o
eCA9ICt4KSkgcmV0dXJuIHJhbmdlW2QzLmJpc2VjdCh0aHJlc2hvbGRzLCB4KV07Ci0gICAgfQot
ICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxl
bmd0aCkgcmV0dXJuIGRvbWFpbjsKLSAgICAgIGRvbWFpbiA9IHguZmlsdGVyKGQzX251bWJlciku
c29ydChkM19hc2NlbmRpbmcpOwotICAgICAgcmV0dXJuIHJlc2NhbGUoKTsKLSAgICB9OwotICAg
IHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4gcmFuZ2U7Ci0gICAgICByYW5nZSA9IHg7Ci0gICAgICByZXR1cm4gcmVzY2FsZSgp
OwotICAgIH07Ci0gICAgc2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1
cm4gdGhyZXNob2xkczsKLSAgICB9OwotICAgIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9u
KHkpIHsKLSAgICAgIHkgPSByYW5nZS5pbmRleE9mKHkpOwotICAgICAgcmV0dXJuIHkgPCAwID8g
WyBOYU4sIE5hTiBdIDogWyB5ID4gMCA/IHRocmVzaG9sZHNbeSAtIDFdIDogZG9tYWluWzBdLCB5
IDwgdGhyZXNob2xkcy5sZW5ndGggPyB0aHJlc2hvbGRzW3ldIDogZG9tYWluW2RvbWFpbi5sZW5n
dGggLSAxXSBdOwotICAgIH07Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIGQzX3NjYWxlX3F1YW50aWxlKGRvbWFpbiwgcmFuZ2UpOwotICAgIH07Ci0gICAgcmV0
dXJuIHJlc2NhbGUoKTsKLSAgfQotICBkMy5zY2FsZS5xdWFudGl6ZSA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBkM19zY2FsZV9xdWFudGl6ZSgwLCAxLCBbIDAsIDEgXSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIGQzX3NjYWxlX3F1YW50aXplKHgwLCB4MSwgcmFuZ2UpIHsKLSAgICB2YXIga3gsIGk7
Ci0gICAgZnVuY3Rpb24gc2NhbGUoeCkgewotICAgICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAs
IE1hdGgubWluKGksIE1hdGguZmxvb3Ioa3ggKiAoeCAtIHgwKSkpKV07Ci0gICAgfQotICAgIGZ1
bmN0aW9uIHJlc2NhbGUoKSB7Ci0gICAgICBreCA9IHJhbmdlLmxlbmd0aCAvICh4MSAtIHgwKTsK
LSAgICAgIGkgPSByYW5nZS5sZW5ndGggLSAxOwotICAgICAgcmV0dXJuIHNjYWxlOwotICAgIH0K
LSAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBbIHgwLCB4MSBdOwotICAgICAgeDAgPSAreFswXTsKLSAgICAgIHgxID0g
K3hbeC5sZW5ndGggLSAxXTsKLSAgICAgIHJldHVybiByZXNjYWxlKCk7Ci0gICAgfTsKLSAgICBz
Y2FsZS5yYW5nZSA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHJhbmdlOwotICAgICAgcmFuZ2UgPSB4OwotICAgICAgcmV0dXJuIHJlc2NhbGUoKTsK
LSAgICB9OwotICAgIHNjYWxlLmludmVydEV4dGVudCA9IGZ1bmN0aW9uKHkpIHsKLSAgICAgIHkg
PSByYW5nZS5pbmRleE9mKHkpOwotICAgICAgeSA9IHkgPCAwID8gTmFOIDogeSAvIGt4ICsgeDA7
Ci0gICAgICByZXR1cm4gWyB5LCB5ICsgMSAvIGt4IF07Ci0gICAgfTsKLSAgICBzY2FsZS5jb3B5
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZDNfc2NhbGVfcXVhbnRpemUoeDAsIHgxLCBy
YW5nZSk7Ci0gICAgfTsKLSAgICByZXR1cm4gcmVzY2FsZSgpOwotICB9Ci0gIGQzLnNjYWxlLnRo
cmVzaG9sZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19zY2FsZV90aHJlc2hvbGQoWyAu
NSBdLCBbIDAsIDEgXSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3NjYWxlX3RocmVzaG9sZChkb21h
aW4sIHJhbmdlKSB7Ci0gICAgZnVuY3Rpb24gc2NhbGUoeCkgewotICAgICAgaWYgKHggPD0geCkg
cmV0dXJuIHJhbmdlW2QzLmJpc2VjdChkb21haW4sIHgpXTsKLSAgICB9Ci0gICAgc2NhbGUuZG9t
YWluID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4g
ZG9tYWluOwotICAgICAgZG9tYWluID0gXzsKLSAgICAgIHJldHVybiBzY2FsZTsKLSAgICB9Owot
ICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gcmFuZ2U7Ci0gICAgICByYW5nZSA9IF87Ci0gICAgICByZXR1cm4gc2NhbGU7
Ci0gICAgfTsKLSAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7Ci0gICAgICB5
ID0gcmFuZ2UuaW5kZXhPZih5KTsKLSAgICAgIHJldHVybiBbIGRvbWFpblt5IC0gMV0sIGRvbWFp
blt5XSBdOwotICAgIH07Ci0gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0
dXJuIGQzX3NjYWxlX3RocmVzaG9sZChkb21haW4sIHJhbmdlKTsKLSAgICB9OwotICAgIHJldHVy
biBzY2FsZTsKLSAgfQotICBkMy5zY2FsZS5pZGVudGl0eSA9IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiBkM19zY2FsZV9pZGVudGl0eShbIDAsIDEgXSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3Nj
YWxlX2lkZW50aXR5KGRvbWFpbikgewotICAgIGZ1bmN0aW9uIGlkZW50aXR5KHgpIHsKLSAgICAg
IHJldHVybiAreDsKLSAgICB9Ci0gICAgaWRlbnRpdHkuaW52ZXJ0ID0gaWRlbnRpdHk7Ci0gICAg
aWRlbnRpdHkuZG9tYWluID0gaWRlbnRpdHkucmFuZ2UgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW47Ci0gICAgICBkb21haW4gPSB4Lm1h
cChpZGVudGl0eSk7Ci0gICAgICByZXR1cm4gaWRlbnRpdHk7Ci0gICAgfTsKLSAgICBpZGVudGl0
eS50aWNrcyA9IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJUaWNr
cyhkb21haW4sIG0pOwotICAgIH07Ci0gICAgaWRlbnRpdHkudGlja0Zvcm1hdCA9IGZ1bmN0aW9u
KG0sIGZvcm1hdCkgewotICAgICAgcmV0dXJuIGQzX3NjYWxlX2xpbmVhclRpY2tGb3JtYXQoZG9t
YWluLCBtLCBmb3JtYXQpOwotICAgIH07Ci0gICAgaWRlbnRpdHkuY29weSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuIGQzX3NjYWxlX2lkZW50aXR5KGRvbWFpbik7Ci0gICAgfTsKLSAgICBy
ZXR1cm4gaWRlbnRpdHk7Ci0gIH0KLSAgZDMuc3ZnID0ge307Ci0gIGQzLnN2Zy5hcmMgPSBmdW5j
dGlvbigpIHsKLSAgICB2YXIgaW5uZXJSYWRpdXMgPSBkM19zdmdfYXJjSW5uZXJSYWRpdXMsIG91
dGVyUmFkaXVzID0gZDNfc3ZnX2FyY091dGVyUmFkaXVzLCBzdGFydEFuZ2xlID0gZDNfc3ZnX2Fy
Y1N0YXJ0QW5nbGUsIGVuZEFuZ2xlID0gZDNfc3ZnX2FyY0VuZEFuZ2xlOwotICAgIGZ1bmN0aW9u
IGFyYygpIHsKLSAgICAgIHZhciByMCA9IGlubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyksIHIxID0gb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgYTAgPSBzdGFydEFu
Z2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyBkM19zdmdfYXJjT2Zmc2V0LCBhMSA9IGVuZEFu
Z2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyBkM19zdmdfYXJjT2Zmc2V0LCBkYSA9IChhMSA8
IGEwICYmIChkYSA9IGEwLCAKLSAgICAgIGEwID0gYTEsIGExID0gZGEpLCBhMSAtIGEwKSwgZGYg
PSBkYSA8IM+AID8gIjAiIDogIjEiLCBjMCA9IE1hdGguY29zKGEwKSwgczAgPSBNYXRoLnNpbihh
MCksIGMxID0gTWF0aC5jb3MoYTEpLCBzMSA9IE1hdGguc2luKGExKTsKLSAgICAgIHJldHVybiBk
YSA+PSBkM19zdmdfYXJjTWF4ID8gcjAgPyAiTTAsIiArIHIxICsgIkEiICsgcjEgKyAiLCIgKyBy
MSArICIgMCAxLDEgMCwiICsgLXIxICsgIkEiICsgcjEgKyAiLCIgKyByMSArICIgMCAxLDEgMCwi
ICsgcjEgKyAiTTAsIiArIHIwICsgIkEiICsgcjAgKyAiLCIgKyByMCArICIgMCAxLDAgMCwiICsg
LXIwICsgIkEiICsgcjAgKyAiLCIgKyByMCArICIgMCAxLDAgMCwiICsgcjAgKyAiWiIgOiAiTTAs
IiArIHIxICsgIkEiICsgcjEgKyAiLCIgKyByMSArICIgMCAxLDEgMCwiICsgLXIxICsgIkEiICsg
cjEgKyAiLCIgKyByMSArICIgMCAxLDEgMCwiICsgcjEgKyAiWiIgOiByMCA/ICJNIiArIHIxICog
YzAgKyAiLCIgKyByMSAqIHMwICsgIkEiICsgcjEgKyAiLCIgKyByMSArICIgMCAiICsgZGYgKyAi
LDEgIiArIHIxICogYzEgKyAiLCIgKyByMSAqIHMxICsgIkwiICsgcjAgKiBjMSArICIsIiArIHIw
ICogczEgKyAiQSIgKyByMCArICIsIiArIHIwICsgIiAwICIgKyBkZiArICIsMCAiICsgcjAgKiBj
MCArICIsIiArIHIwICogczAgKyAiWiIgOiAiTSIgKyByMSAqIGMwICsgIiwiICsgcjEgKiBzMCAr
ICJBIiArIHIxICsgIiwiICsgcjEgKyAiIDAgIiArIGRmICsgIiwxICIgKyByMSAqIGMxICsgIiwi
ICsgcjEgKiBzMSArICJMMCwwIiArICJaIjsKLSAgICB9Ci0gICAgYXJjLmlubmVyUmFkaXVzID0g
ZnVuY3Rpb24odikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gaW5uZXJS
YWRpdXM7Ci0gICAgICBpbm5lclJhZGl1cyA9IGQzX2Z1bmN0b3Iodik7Ci0gICAgICByZXR1cm4g
YXJjOwotICAgIH07Ci0gICAgYXJjLm91dGVyUmFkaXVzID0gZnVuY3Rpb24odikgewotICAgICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3V0ZXJSYWRpdXM7Ci0gICAgICBvdXRlclJh
ZGl1cyA9IGQzX2Z1bmN0b3Iodik7Ci0gICAgICByZXR1cm4gYXJjOwotICAgIH07Ci0gICAgYXJj
LnN0YXJ0QW5nbGUgPSBmdW5jdGlvbih2KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgp
IHJldHVybiBzdGFydEFuZ2xlOwotICAgICAgc3RhcnRBbmdsZSA9IGQzX2Z1bmN0b3Iodik7Ci0g
ICAgICByZXR1cm4gYXJjOwotICAgIH07Ci0gICAgYXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24odikg
ewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZW5kQW5nbGU7Ci0gICAgICBl
bmRBbmdsZSA9IGQzX2Z1bmN0b3Iodik7Ci0gICAgICByZXR1cm4gYXJjOwotICAgIH07Ci0gICAg
YXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgciA9IChpbm5lclJhZGl1cy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpICsgb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRz
KSkgLyAyLCBhID0gKHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSArIGVuZEFuZ2xl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiArIGQzX3N2Z19hcmNPZmZzZXQ7Ci0gICAgICBy
ZXR1cm4gWyBNYXRoLmNvcyhhKSAqIHIsIE1hdGguc2luKGEpICogciBdOwotICAgIH07Ci0gICAg
cmV0dXJuIGFyYzsKLSAgfTsKLSAgdmFyIGQzX3N2Z19hcmNPZmZzZXQgPSAtaGFsZs+ALCBkM19z
dmdfYXJjTWF4ID0gz4QgLSDOtTsKLSAgZnVuY3Rpb24gZDNfc3ZnX2FyY0lubmVyUmFkaXVzKGQp
IHsKLSAgICByZXR1cm4gZC5pbm5lclJhZGl1czsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfYXJj
T3V0ZXJSYWRpdXMoZCkgewotICAgIHJldHVybiBkLm91dGVyUmFkaXVzOwotICB9Ci0gIGZ1bmN0
aW9uIGQzX3N2Z19hcmNTdGFydEFuZ2xlKGQpIHsKLSAgICByZXR1cm4gZC5zdGFydEFuZ2xlOwot
ICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19hcmNFbmRBbmdsZShkKSB7Ci0gICAgcmV0dXJuIGQuZW5k
QW5nbGU7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmUocHJvamVjdGlvbikgewotICAgIHZh
ciB4ID0gZDNfZ2VvbV9wb2ludFgsIHkgPSBkM19nZW9tX3BvaW50WSwgZGVmaW5lZCA9IGQzX3Ry
dWUsIGludGVycG9sYXRlID0gZDNfc3ZnX2xpbmVMaW5lYXIsIGludGVycG9sYXRlS2V5ID0gaW50
ZXJwb2xhdGUua2V5LCB0ZW5zaW9uID0gLjc7Ci0gICAgZnVuY3Rpb24gbGluZShkYXRhKSB7Ci0g
ICAgICB2YXIgc2VnbWVudHMgPSBbXSwgcG9pbnRzID0gW10sIGkgPSAtMSwgbiA9IGRhdGEubGVu
Z3RoLCBkLCBmeCA9IGQzX2Z1bmN0b3IoeCksIGZ5ID0gZDNfZnVuY3Rvcih5KTsKLSAgICAgIGZ1
bmN0aW9uIHNlZ21lbnQoKSB7Ci0gICAgICAgIHNlZ21lbnRzLnB1c2goIk0iLCBpbnRlcnBvbGF0
ZShwcm9qZWN0aW9uKHBvaW50cyksIHRlbnNpb24pKTsKLSAgICAgIH0KLSAgICAgIHdoaWxlICgr
K2kgPCBuKSB7Ci0gICAgICAgIGlmIChkZWZpbmVkLmNhbGwodGhpcywgZCA9IGRhdGFbaV0sIGkp
KSB7Ci0gICAgICAgICAgcG9pbnRzLnB1c2goWyArZnguY2FsbCh0aGlzLCBkLCBpKSwgK2Z5LmNh
bGwodGhpcywgZCwgaSkgXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocG9pbnRzLmxlbmd0aCkgewot
ICAgICAgICAgIHNlZ21lbnQoKTsKLSAgICAgICAgICBwb2ludHMgPSBbXTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgaWYgKHBvaW50cy5sZW5ndGgpIHNlZ21lbnQoKTsKLSAgICAgIHJldHVy
biBzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2luKCIiKSA6IG51bGw7Ci0gICAgfQotICAg
IGxpbmUueCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0
dXJuIHg7Ci0gICAgICB4ID0gXzsKLSAgICAgIHJldHVybiBsaW5lOwotICAgIH07Ci0gICAgbGlu
ZS55ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4g
eTsKLSAgICAgIHkgPSBfOwotICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfTsKLSAgICBsaW5lLmRl
ZmluZWQgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVy
biBkZWZpbmVkOwotICAgICAgZGVmaW5lZCA9IF87Ci0gICAgICByZXR1cm4gbGluZTsKLSAgICB9
OwotICAgIGxpbmUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3Vt
ZW50cy5sZW5ndGgpIHJldHVybiBpbnRlcnBvbGF0ZUtleTsKLSAgICAgIGlmICh0eXBlb2YgXyA9
PT0gImZ1bmN0aW9uIikgaW50ZXJwb2xhdGVLZXkgPSBpbnRlcnBvbGF0ZSA9IF87IGVsc2UgaW50
ZXJwb2xhdGVLZXkgPSAoaW50ZXJwb2xhdGUgPSBkM19zdmdfbGluZUludGVycG9sYXRvcnMuZ2V0
KF8pIHx8IGQzX3N2Z19saW5lTGluZWFyKS5rZXk7Ci0gICAgICByZXR1cm4gbGluZTsKLSAgICB9
OwotICAgIGxpbmUudGVuc2lvbiA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRz
Lmxlbmd0aCkgcmV0dXJuIHRlbnNpb247Ci0gICAgICB0ZW5zaW9uID0gXzsKLSAgICAgIHJldHVy
biBsaW5lOwotICAgIH07Ci0gICAgcmV0dXJuIGxpbmU7Ci0gIH0KLSAgZDMuc3ZnLmxpbmUgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfc3ZnX2xpbmUoZDNfaWRlbnRpdHkpOwotICB9Owot
ICB2YXIgZDNfc3ZnX2xpbmVJbnRlcnBvbGF0b3JzID0gZDMubWFwKHsKLSAgICBsaW5lYXI6IGQz
X3N2Z19saW5lTGluZWFyLAotICAgICJsaW5lYXItY2xvc2VkIjogZDNfc3ZnX2xpbmVMaW5lYXJD
bG9zZWQsCi0gICAgc3RlcDogZDNfc3ZnX2xpbmVTdGVwLAotICAgICJzdGVwLWJlZm9yZSI6IGQz
X3N2Z19saW5lU3RlcEJlZm9yZSwKLSAgICAic3RlcC1hZnRlciI6IGQzX3N2Z19saW5lU3RlcEFm
dGVyLAotICAgIGJhc2lzOiBkM19zdmdfbGluZUJhc2lzLAotICAgICJiYXNpcy1vcGVuIjogZDNf
c3ZnX2xpbmVCYXNpc09wZW4sCi0gICAgImJhc2lzLWNsb3NlZCI6IGQzX3N2Z19saW5lQmFzaXND
bG9zZWQsCi0gICAgYnVuZGxlOiBkM19zdmdfbGluZUJ1bmRsZSwKLSAgICBjYXJkaW5hbDogZDNf
c3ZnX2xpbmVDYXJkaW5hbCwKLSAgICAiY2FyZGluYWwtb3BlbiI6IGQzX3N2Z19saW5lQ2FyZGlu
YWxPcGVuLAotICAgICJjYXJkaW5hbC1jbG9zZWQiOiBkM19zdmdfbGluZUNhcmRpbmFsQ2xvc2Vk
LAotICAgIG1vbm90b25lOiBkM19zdmdfbGluZU1vbm90b25lCi0gIH0pOwotICBkM19zdmdfbGlu
ZUludGVycG9sYXRvcnMuZm9yRWFjaChmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgdmFsdWUu
a2V5ID0ga2V5OwotICAgIHZhbHVlLmNsb3NlZCA9IC8tY2xvc2VkJC8udGVzdChrZXkpOwotICB9
KTsKLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKSB7Ci0gICAgcmV0dXJuIHBv
aW50cy5qb2luKCJMIik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVMaW5lYXJDbG9zZWQo
cG9pbnRzKSB7Ci0gICAgcmV0dXJuIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cykgKyAiWiI7Ci0g
IH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVTdGVwKHBvaW50cykgewotICAgIHZhciBpID0gMCwg
biA9IHBvaW50cy5sZW5ndGgsIHAgPSBwb2ludHNbMF0sIHBhdGggPSBbIHBbMF0sICIsIiwgcFsx
XSBdOwotICAgIHdoaWxlICgrK2kgPCBuKSBwYXRoLnB1c2goIkgiLCAocFswXSArIChwID0gcG9p
bnRzW2ldKVswXSkgLyAyLCAiViIsIHBbMV0pOwotICAgIGlmIChuID4gMSkgcGF0aC5wdXNoKCJI
IiwgcFswXSk7Ci0gICAgcmV0dXJuIHBhdGguam9pbigiIik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
c3ZnX2xpbmVTdGVwQmVmb3JlKHBvaW50cykgewotICAgIHZhciBpID0gMCwgbiA9IHBvaW50cy5s
ZW5ndGgsIHAgPSBwb2ludHNbMF0sIHBhdGggPSBbIHBbMF0sICIsIiwgcFsxXSBdOwotICAgIHdo
aWxlICgrK2kgPCBuKSBwYXRoLnB1c2goIlYiLCAocCA9IHBvaW50c1tpXSlbMV0sICJIIiwgcFsw
XSk7Ci0gICAgcmV0dXJuIHBhdGguam9pbigiIik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xp
bmVTdGVwQWZ0ZXIocG9pbnRzKSB7Ci0gICAgdmFyIGkgPSAwLCBuID0gcG9pbnRzLmxlbmd0aCwg
cCA9IHBvaW50c1swXSwgcGF0aCA9IFsgcFswXSwgIiwiLCBwWzFdIF07Ci0gICAgd2hpbGUgKCsr
aSA8IG4pIHBhdGgucHVzaCgiSCIsIChwID0gcG9pbnRzW2ldKVswXSwgIlYiLCBwWzFdKTsKLSAg
ICByZXR1cm4gcGF0aC5qb2luKCIiKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGluZUNhcmRp
bmFsT3Blbihwb2ludHMsIHRlbnNpb24pIHsKLSAgICByZXR1cm4gcG9pbnRzLmxlbmd0aCA8IDQg
PyBkM19zdmdfbGluZUxpbmVhcihwb2ludHMpIDogcG9pbnRzWzFdICsgZDNfc3ZnX2xpbmVIZXJt
aXRlKHBvaW50cy5zbGljZSgxLCBwb2ludHMubGVuZ3RoIC0gMSksIGQzX3N2Z19saW5lQ2FyZGlu
YWxUYW5nZW50cyhwb2ludHMsIHRlbnNpb24pKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGlu
ZUNhcmRpbmFsQ2xvc2VkKHBvaW50cywgdGVuc2lvbikgewotICAgIHJldHVybiBwb2ludHMubGVu
Z3RoIDwgMyA/IGQzX3N2Z19saW5lTGluZWFyKHBvaW50cykgOiBwb2ludHNbMF0gKyBkM19zdmdf
bGluZUhlcm1pdGUoKHBvaW50cy5wdXNoKHBvaW50c1swXSksIAotICAgIHBvaW50cyksIGQzX3N2
Z19saW5lQ2FyZGluYWxUYW5nZW50cyhbIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0gXS5jb25j
YXQocG9pbnRzLCBbIHBvaW50c1sxXSBdKSwgdGVuc2lvbikpOwotICB9Ci0gIGZ1bmN0aW9uIGQz
X3N2Z19saW5lQ2FyZGluYWwocG9pbnRzLCB0ZW5zaW9uKSB7Ci0gICAgcmV0dXJuIHBvaW50cy5s
ZW5ndGggPCAzID8gZDNfc3ZnX2xpbmVMaW5lYXIocG9pbnRzKSA6IHBvaW50c1swXSArIGQzX3N2
Z19saW5lSGVybWl0ZShwb2ludHMsIGQzX3N2Z19saW5lQ2FyZGluYWxUYW5nZW50cyhwb2ludHMs
IHRlbnNpb24pKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGluZUhlcm1pdGUocG9pbnRzLCB0
YW5nZW50cykgewotICAgIGlmICh0YW5nZW50cy5sZW5ndGggPCAxIHx8IHBvaW50cy5sZW5ndGgg
IT0gdGFuZ2VudHMubGVuZ3RoICYmIHBvaW50cy5sZW5ndGggIT0gdGFuZ2VudHMubGVuZ3RoICsg
MikgewotICAgICAgcmV0dXJuIGQzX3N2Z19saW5lTGluZWFyKHBvaW50cyk7Ci0gICAgfQotICAg
IHZhciBxdWFkID0gcG9pbnRzLmxlbmd0aCAhPSB0YW5nZW50cy5sZW5ndGgsIHBhdGggPSAiIiwg
cDAgPSBwb2ludHNbMF0sIHAgPSBwb2ludHNbMV0sIHQwID0gdGFuZ2VudHNbMF0sIHQgPSB0MCwg
cGkgPSAxOwotICAgIGlmIChxdWFkKSB7Ci0gICAgICBwYXRoICs9ICJRIiArIChwWzBdIC0gdDBb
MF0gKiAyIC8gMykgKyAiLCIgKyAocFsxXSAtIHQwWzFdICogMiAvIDMpICsgIiwiICsgcFswXSAr
ICIsIiArIHBbMV07Ci0gICAgICBwMCA9IHBvaW50c1sxXTsKLSAgICAgIHBpID0gMjsKLSAgICB9
Ci0gICAgaWYgKHRhbmdlbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAgIHQgPSB0YW5nZW50c1sxXTsK
LSAgICAgIHAgPSBwb2ludHNbcGldOwotICAgICAgcGkrKzsKLSAgICAgIHBhdGggKz0gIkMiICsg
KHAwWzBdICsgdDBbMF0pICsgIiwiICsgKHAwWzFdICsgdDBbMV0pICsgIiwiICsgKHBbMF0gLSB0
WzBdKSArICIsIiArIChwWzFdIC0gdFsxXSkgKyAiLCIgKyBwWzBdICsgIiwiICsgcFsxXTsKLSAg
ICAgIGZvciAodmFyIGkgPSAyOyBpIDwgdGFuZ2VudHMubGVuZ3RoOyBpKyssIHBpKyspIHsKLSAg
ICAgICAgcCA9IHBvaW50c1twaV07Ci0gICAgICAgIHQgPSB0YW5nZW50c1tpXTsKLSAgICAgICAg
cGF0aCArPSAiUyIgKyAocFswXSAtIHRbMF0pICsgIiwiICsgKHBbMV0gLSB0WzFdKSArICIsIiAr
IHBbMF0gKyAiLCIgKyBwWzFdOwotICAgICAgfQotICAgIH0KLSAgICBpZiAocXVhZCkgewotICAg
ICAgdmFyIGxwID0gcG9pbnRzW3BpXTsKLSAgICAgIHBhdGggKz0gIlEiICsgKHBbMF0gKyB0WzBd
ICogMiAvIDMpICsgIiwiICsgKHBbMV0gKyB0WzFdICogMiAvIDMpICsgIiwiICsgbHBbMF0gKyAi
LCIgKyBscFsxXTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdGg7Ci0gIH0KLSAgZnVuY3Rpb24gZDNf
c3ZnX2xpbmVDYXJkaW5hbFRhbmdlbnRzKHBvaW50cywgdGVuc2lvbikgewotICAgIHZhciB0YW5n
ZW50cyA9IFtdLCBhID0gKDEgLSB0ZW5zaW9uKSAvIDIsIHAwLCBwMSA9IHBvaW50c1swXSwgcDIg
PSBwb2ludHNbMV0sIGkgPSAxLCBuID0gcG9pbnRzLmxlbmd0aDsKLSAgICB3aGlsZSAoKytpIDwg
bikgewotICAgICAgcDAgPSBwMTsKLSAgICAgIHAxID0gcDI7Ci0gICAgICBwMiA9IHBvaW50c1tp
XTsKLSAgICAgIHRhbmdlbnRzLnB1c2goWyBhICogKHAyWzBdIC0gcDBbMF0pLCBhICogKHAyWzFd
IC0gcDBbMV0pIF0pOwotICAgIH0KLSAgICByZXR1cm4gdGFuZ2VudHM7Ci0gIH0KLSAgZnVuY3Rp
b24gZDNfc3ZnX2xpbmVCYXNpcyhwb2ludHMpIHsKLSAgICBpZiAocG9pbnRzLmxlbmd0aCA8IDMp
IHJldHVybiBkM19zdmdfbGluZUxpbmVhcihwb2ludHMpOwotICAgIHZhciBpID0gMSwgbiA9IHBv
aW50cy5sZW5ndGgsIHBpID0gcG9pbnRzWzBdLCB4MCA9IHBpWzBdLCB5MCA9IHBpWzFdLCBweCA9
IFsgeDAsIHgwLCB4MCwgKHBpID0gcG9pbnRzWzFdKVswXSBdLCBweSA9IFsgeTAsIHkwLCB5MCwg
cGlbMV0gXSwgcGF0aCA9IFsgeDAsICIsIiwgeTAsICJMIiwgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2
Z19saW5lQmFzaXNCZXppZXIzLCBweCksICIsIiwgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5l
QmFzaXNCZXppZXIzLCBweSkgXTsKLSAgICBwb2ludHMucHVzaChwb2ludHNbbiAtIDFdKTsKLSAg
ICB3aGlsZSAoKytpIDw9IG4pIHsKLSAgICAgIHBpID0gcG9pbnRzW2ldOwotICAgICAgcHguc2hp
ZnQoKTsKLSAgICAgIHB4LnB1c2gocGlbMF0pOwotICAgICAgcHkuc2hpZnQoKTsKLSAgICAgIHB5
LnB1c2gocGlbMV0pOwotICAgICAgZDNfc3ZnX2xpbmVCYXNpc0JlemllcihwYXRoLCBweCwgcHkp
OwotICAgIH0KLSAgICBwb2ludHMucG9wKCk7Ci0gICAgcGF0aC5wdXNoKCJMIiwgcGkpOwotICAg
IHJldHVybiBwYXRoLmpvaW4oIiIpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXNP
cGVuKHBvaW50cykgewotICAgIGlmIChwb2ludHMubGVuZ3RoIDwgNCkgcmV0dXJuIGQzX3N2Z19s
aW5lTGluZWFyKHBvaW50cyk7Ci0gICAgdmFyIHBhdGggPSBbXSwgaSA9IC0xLCBuID0gcG9pbnRz
Lmxlbmd0aCwgcGksIHB4ID0gWyAwIF0sIHB5ID0gWyAwIF07Ci0gICAgd2hpbGUgKCsraSA8IDMp
IHsKLSAgICAgIHBpID0gcG9pbnRzW2ldOwotICAgICAgcHgucHVzaChwaVswXSk7Ci0gICAgICBw
eS5wdXNoKHBpWzFdKTsKLSAgICB9Ci0gICAgcGF0aC5wdXNoKGQzX3N2Z19saW5lRG90NChkM19z
dmdfbGluZUJhc2lzQmV6aWVyMywgcHgpICsgIiwiICsgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19s
aW5lQmFzaXNCZXppZXIzLCBweSkpOwotICAgIC0taTsKLSAgICB3aGlsZSAoKytpIDwgbikgewot
ICAgICAgcGkgPSBwb2ludHNbaV07Ci0gICAgICBweC5zaGlmdCgpOwotICAgICAgcHgucHVzaChw
aVswXSk7Ci0gICAgICBweS5zaGlmdCgpOwotICAgICAgcHkucHVzaChwaVsxXSk7Ci0gICAgICBk
M19zdmdfbGluZUJhc2lzQmV6aWVyKHBhdGgsIHB4LCBweSk7Ci0gICAgfQotICAgIHJldHVybiBw
YXRoLmpvaW4oIiIpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXNDbG9zZWQocG9p
bnRzKSB7Ci0gICAgdmFyIHBhdGgsIGkgPSAtMSwgbiA9IHBvaW50cy5sZW5ndGgsIG0gPSBuICsg
NCwgcGksIHB4ID0gW10sIHB5ID0gW107Ci0gICAgd2hpbGUgKCsraSA8IDQpIHsKLSAgICAgIHBp
ID0gcG9pbnRzW2kgJSBuXTsKLSAgICAgIHB4LnB1c2gocGlbMF0pOwotICAgICAgcHkucHVzaChw
aVsxXSk7Ci0gICAgfQotICAgIHBhdGggPSBbIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJh
c2lzQmV6aWVyMywgcHgpLCAiLCIsIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6
aWVyMywgcHkpIF07Ci0gICAgLS1pOwotICAgIHdoaWxlICgrK2kgPCBtKSB7Ci0gICAgICBwaSA9
IHBvaW50c1tpICUgbl07Ci0gICAgICBweC5zaGlmdCgpOwotICAgICAgcHgucHVzaChwaVswXSk7
Ci0gICAgICBweS5zaGlmdCgpOwotICAgICAgcHkucHVzaChwaVsxXSk7Ci0gICAgICBkM19zdmdf
bGluZUJhc2lzQmV6aWVyKHBhdGgsIHB4LCBweSk7Ci0gICAgfQotICAgIHJldHVybiBwYXRoLmpv
aW4oIiIpOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQnVuZGxlKHBvaW50cywgdGVuc2lv
bikgewotICAgIHZhciBuID0gcG9pbnRzLmxlbmd0aCAtIDE7Ci0gICAgaWYgKG4pIHsKLSAgICAg
IHZhciB4MCA9IHBvaW50c1swXVswXSwgeTAgPSBwb2ludHNbMF1bMV0sIGR4ID0gcG9pbnRzW25d
WzBdIC0geDAsIGR5ID0gcG9pbnRzW25dWzFdIC0geTAsIGkgPSAtMSwgcCwgdDsKLSAgICAgIHdo
aWxlICgrK2kgPD0gbikgewotICAgICAgICBwID0gcG9pbnRzW2ldOwotICAgICAgICB0ID0gaSAv
IG47Ci0gICAgICAgIHBbMF0gPSB0ZW5zaW9uICogcFswXSArICgxIC0gdGVuc2lvbikgKiAoeDAg
KyB0ICogZHgpOwotICAgICAgICBwWzFdID0gdGVuc2lvbiAqIHBbMV0gKyAoMSAtIHRlbnNpb24p
ICogKHkwICsgdCAqIGR5KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGQzX3N2Z19saW5l
QmFzaXMocG9pbnRzKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGluZURvdDQoYSwgYikgewot
ICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl0gKyBhWzNd
ICogYlszXTsKLSAgfQotICB2YXIgZDNfc3ZnX2xpbmVCYXNpc0JlemllcjEgPSBbIDAsIDIgLyAz
LCAxIC8gMywgMCBdLCBkM19zdmdfbGluZUJhc2lzQmV6aWVyMiA9IFsgMCwgMSAvIDMsIDIgLyAz
LCAwIF0sIGQzX3N2Z19saW5lQmFzaXNCZXppZXIzID0gWyAwLCAxIC8gNiwgMiAvIDMsIDEgLyA2
IF07Ci0gIGZ1bmN0aW9uIGQzX3N2Z19saW5lQmFzaXNCZXppZXIocGF0aCwgeCwgeSkgewotICAg
IHBhdGgucHVzaCgiQyIsIGQzX3N2Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMSwg
eCksICIsIiwgZDNfc3ZnX2xpbmVEb3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIxLCB5KSwgIiwi
LCBkM19zdmdfbGluZURvdDQoZDNfc3ZnX2xpbmVCYXNpc0JlemllcjIsIHgpLCAiLCIsIGQzX3N2
Z19saW5lRG90NChkM19zdmdfbGluZUJhc2lzQmV6aWVyMiwgeSksICIsIiwgZDNfc3ZnX2xpbmVE
b3Q0KGQzX3N2Z19saW5lQmFzaXNCZXppZXIzLCB4KSwgIiwiLCBkM19zdmdfbGluZURvdDQoZDNf
c3ZnX2xpbmVCYXNpc0JlemllcjMsIHkpKTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfbGluZVNs
b3BlKHAwLCBwMSkgewotICAgIHJldHVybiAocDFbMV0gLSBwMFsxXSkgLyAocDFbMF0gLSBwMFsw
XSk7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVGaW5pdGVEaWZmZXJlbmNlcyhwb2ludHMp
IHsKLSAgICB2YXIgaSA9IDAsIGogPSBwb2ludHMubGVuZ3RoIC0gMSwgbSA9IFtdLCBwMCA9IHBv
aW50c1swXSwgcDEgPSBwb2ludHNbMV0sIGQgPSBtWzBdID0gZDNfc3ZnX2xpbmVTbG9wZShwMCwg
cDEpOwotICAgIHdoaWxlICgrK2kgPCBqKSB7Ci0gICAgICBtW2ldID0gKGQgKyAoZCA9IGQzX3N2
Z19saW5lU2xvcGUocDAgPSBwMSwgcDEgPSBwb2ludHNbaSArIDFdKSkpIC8gMjsKLSAgICB9Ci0g
ICAgbVtpXSA9IGQ7Ci0gICAgcmV0dXJuIG07Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVN
b25vdG9uZVRhbmdlbnRzKHBvaW50cykgewotICAgIHZhciB0YW5nZW50cyA9IFtdLCBkLCBhLCBi
LCBzLCBtID0gZDNfc3ZnX2xpbmVGaW5pdGVEaWZmZXJlbmNlcyhwb2ludHMpLCBpID0gLTEsIGog
PSBwb2ludHMubGVuZ3RoIC0gMTsKLSAgICB3aGlsZSAoKytpIDwgaikgewotICAgICAgZCA9IGQz
X3N2Z19saW5lU2xvcGUocG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKTsKLSAgICAgIGlmIChhYnMo
ZCkgPCDOtSkgewotICAgICAgICBtW2ldID0gbVtpICsgMV0gPSAwOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgYSA9IG1baV0gLyBkOwotICAgICAgICBiID0gbVtpICsgMV0gLyBkOwotICAgICAg
ICBzID0gYSAqIGEgKyBiICogYjsKLSAgICAgICAgaWYgKHMgPiA5KSB7Ci0gICAgICAgICAgcyA9
IGQgKiAzIC8gTWF0aC5zcXJ0KHMpOwotICAgICAgICAgIG1baV0gPSBzICogYTsKLSAgICAgICAg
ICBtW2kgKyAxXSA9IHMgKiBiOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGkgPSAt
MTsKLSAgICB3aGlsZSAoKytpIDw9IGopIHsKLSAgICAgIHMgPSAocG9pbnRzW01hdGgubWluKGos
IGkgKyAxKV1bMF0gLSBwb2ludHNbTWF0aC5tYXgoMCwgaSAtIDEpXVswXSkgLyAoNiAqICgxICsg
bVtpXSAqIG1baV0pKTsKLSAgICAgIHRhbmdlbnRzLnB1c2goWyBzIHx8IDAsIG1baV0gKiBzIHx8
IDAgXSk7Ci0gICAgfQotICAgIHJldHVybiB0YW5nZW50czsKLSAgfQotICBmdW5jdGlvbiBkM19z
dmdfbGluZU1vbm90b25lKHBvaW50cykgewotICAgIHJldHVybiBwb2ludHMubGVuZ3RoIDwgMyA/
IGQzX3N2Z19saW5lTGluZWFyKHBvaW50cykgOiBwb2ludHNbMF0gKyBkM19zdmdfbGluZUhlcm1p
dGUocG9pbnRzLCBkM19zdmdfbGluZU1vbm90b25lVGFuZ2VudHMocG9pbnRzKSk7Ci0gIH0KLSAg
ZDMuc3ZnLmxpbmUucmFkaWFsID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGxpbmUgPSBkM19zdmdf
bGluZShkM19zdmdfbGluZVJhZGlhbCk7Ci0gICAgbGluZS5yYWRpdXMgPSBsaW5lLngsIGRlbGV0
ZSBsaW5lLng7Ci0gICAgbGluZS5hbmdsZSA9IGxpbmUueSwgZGVsZXRlIGxpbmUueTsKLSAgICBy
ZXR1cm4gbGluZTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc3ZnX2xpbmVSYWRpYWwocG9pbnRzKSB7
Ci0gICAgdmFyIHBvaW50LCBpID0gLTEsIG4gPSBwb2ludHMubGVuZ3RoLCByLCBhOwotICAgIHdo
aWxlICgrK2kgPCBuKSB7Ci0gICAgICBwb2ludCA9IHBvaW50c1tpXTsKLSAgICAgIHIgPSBwb2lu
dFswXTsKLSAgICAgIGEgPSBwb2ludFsxXSArIGQzX3N2Z19hcmNPZmZzZXQ7Ci0gICAgICBwb2lu
dFswXSA9IHIgKiBNYXRoLmNvcyhhKTsKLSAgICAgIHBvaW50WzFdID0gciAqIE1hdGguc2luKGEp
OwotICAgIH0KLSAgICByZXR1cm4gcG9pbnRzOwotICB9Ci0gIGZ1bmN0aW9uIGQzX3N2Z19hcmVh
KHByb2plY3Rpb24pIHsKLSAgICB2YXIgeDAgPSBkM19nZW9tX3BvaW50WCwgeDEgPSBkM19nZW9t
X3BvaW50WCwgeTAgPSAwLCB5MSA9IGQzX2dlb21fcG9pbnRZLCBkZWZpbmVkID0gZDNfdHJ1ZSwg
aW50ZXJwb2xhdGUgPSBkM19zdmdfbGluZUxpbmVhciwgaW50ZXJwb2xhdGVLZXkgPSBpbnRlcnBv
bGF0ZS5rZXksIGludGVycG9sYXRlUmV2ZXJzZSA9IGludGVycG9sYXRlLCBMID0gIkwiLCB0ZW5z
aW9uID0gLjc7Ci0gICAgZnVuY3Rpb24gYXJlYShkYXRhKSB7Ci0gICAgICB2YXIgc2VnbWVudHMg
PSBbXSwgcG9pbnRzMCA9IFtdLCBwb2ludHMxID0gW10sIGkgPSAtMSwgbiA9IGRhdGEubGVuZ3Ro
LCBkLCBmeDAgPSBkM19mdW5jdG9yKHgwKSwgZnkwID0gZDNfZnVuY3Rvcih5MCksIGZ4MSA9IHgw
ID09PSB4MSA/IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4geDsKLSAgICAgIH0gOiBkM19m
dW5jdG9yKHgxKSwgZnkxID0geTAgPT09IHkxID8gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB5OwotICAgICAgfSA6IGQzX2Z1bmN0b3IoeTEpLCB4LCB5OwotICAgICAgZnVuY3Rpb24gc2Vn
bWVudCgpIHsKLSAgICAgICAgc2VnbWVudHMucHVzaCgiTSIsIGludGVycG9sYXRlKHByb2plY3Rp
b24ocG9pbnRzMSksIHRlbnNpb24pLCBMLCBpbnRlcnBvbGF0ZVJldmVyc2UocHJvamVjdGlvbihw
b2ludHMwLnJldmVyc2UoKSksIHRlbnNpb24pLCAiWiIpOwotICAgICAgfQotICAgICAgd2hpbGUg
KCsraSA8IG4pIHsKLSAgICAgICAgaWYgKGRlZmluZWQuY2FsbCh0aGlzLCBkID0gZGF0YVtpXSwg
aSkpIHsKLSAgICAgICAgICBwb2ludHMwLnB1c2goWyB4ID0gK2Z4MC5jYWxsKHRoaXMsIGQsIGkp
LCB5ID0gK2Z5MC5jYWxsKHRoaXMsIGQsIGkpIF0pOwotICAgICAgICAgIHBvaW50czEucHVzaChb
ICtmeDEuY2FsbCh0aGlzLCBkLCBpKSwgK2Z5MS5jYWxsKHRoaXMsIGQsIGkpIF0pOwotICAgICAg
ICB9IGVsc2UgaWYgKHBvaW50czAubGVuZ3RoKSB7Ci0gICAgICAgICAgc2VnbWVudCgpOwotICAg
ICAgICAgIHBvaW50czAgPSBbXTsKLSAgICAgICAgICBwb2ludHMxID0gW107Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGlmIChwb2ludHMwLmxlbmd0aCkgc2VnbWVudCgpOwotICAgICAgcmV0
dXJuIHNlZ21lbnRzLmxlbmd0aCA/IHNlZ21lbnRzLmpvaW4oIiIpIDogbnVsbDsKLSAgICB9Ci0g
ICAgYXJlYS54ID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSBy
ZXR1cm4geDE7Ci0gICAgICB4MCA9IHgxID0gXzsKLSAgICAgIHJldHVybiBhcmVhOwotICAgIH07
Ci0gICAgYXJlYS54MCA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHgwOwotICAgICAgeDAgPSBfOwotICAgICAgcmV0dXJuIGFyZWE7Ci0gICAgfTsK
LSAgICBhcmVhLngxID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4geDE7Ci0gICAgICB4MSA9IF87Ci0gICAgICByZXR1cm4gYXJlYTsKLSAgICB9Owot
ICAgIGFyZWEueSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHkxOwotICAgICAgeTAgPSB5MSA9IF87Ci0gICAgICByZXR1cm4gYXJlYTsKLSAgICB9
OwotICAgIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5n
dGgpIHJldHVybiB5MDsKLSAgICAgIHkwID0gXzsKLSAgICAgIHJldHVybiBhcmVhOwotICAgIH07
Ci0gICAgYXJlYS55MSA9IGZ1bmN0aW9uKF8pIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHkxOwotICAgICAgeTEgPSBfOwotICAgICAgcmV0dXJuIGFyZWE7Ci0gICAgfTsK
LSAgICBhcmVhLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBkZWZpbmVkOwotICAgICAgZGVmaW5lZCA9IF87Ci0gICAgICByZXR1cm4g
YXJlYTsKLSAgICB9OwotICAgIGFyZWEuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7Ci0gICAg
ICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBpbnRlcnBvbGF0ZUtleTsKLSAgICAgIGlm
ICh0eXBlb2YgXyA9PT0gImZ1bmN0aW9uIikgaW50ZXJwb2xhdGVLZXkgPSBpbnRlcnBvbGF0ZSA9
IF87IGVsc2UgaW50ZXJwb2xhdGVLZXkgPSAoaW50ZXJwb2xhdGUgPSBkM19zdmdfbGluZUludGVy
cG9sYXRvcnMuZ2V0KF8pIHx8IGQzX3N2Z19saW5lTGluZWFyKS5rZXk7Ci0gICAgICBpbnRlcnBv
bGF0ZVJldmVyc2UgPSBpbnRlcnBvbGF0ZS5yZXZlcnNlIHx8IGludGVycG9sYXRlOwotICAgICAg
TCA9IGludGVycG9sYXRlLmNsb3NlZCA/ICJNIiA6ICJMIjsKLSAgICAgIHJldHVybiBhcmVhOwot
ICAgIH07Ci0gICAgYXJlYS50ZW5zaW9uID0gZnVuY3Rpb24oXykgewotICAgICAgaWYgKCFhcmd1
bWVudHMubGVuZ3RoKSByZXR1cm4gdGVuc2lvbjsKLSAgICAgIHRlbnNpb24gPSBfOwotICAgICAg
cmV0dXJuIGFyZWE7Ci0gICAgfTsKLSAgICByZXR1cm4gYXJlYTsKLSAgfQotICBkM19zdmdfbGlu
ZVN0ZXBCZWZvcmUucmV2ZXJzZSA9IGQzX3N2Z19saW5lU3RlcEFmdGVyOwotICBkM19zdmdfbGlu
ZVN0ZXBBZnRlci5yZXZlcnNlID0gZDNfc3ZnX2xpbmVTdGVwQmVmb3JlOwotICBkMy5zdmcuYXJl
YSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBkM19zdmdfYXJlYShkM19pZGVudGl0eSk7Ci0g
IH07Ci0gIGQzLnN2Zy5hcmVhLnJhZGlhbCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcmVhID0g
ZDNfc3ZnX2FyZWEoZDNfc3ZnX2xpbmVSYWRpYWwpOwotICAgIGFyZWEucmFkaXVzID0gYXJlYS54
LCBkZWxldGUgYXJlYS54OwotICAgIGFyZWEuaW5uZXJSYWRpdXMgPSBhcmVhLngwLCBkZWxldGUg
YXJlYS54MDsKLSAgICBhcmVhLm91dGVyUmFkaXVzID0gYXJlYS54MSwgZGVsZXRlIGFyZWEueDE7
Ci0gICAgYXJlYS5hbmdsZSA9IGFyZWEueSwgZGVsZXRlIGFyZWEueTsKLSAgICBhcmVhLnN0YXJ0
QW5nbGUgPSBhcmVhLnkwLCBkZWxldGUgYXJlYS55MDsKLSAgICBhcmVhLmVuZEFuZ2xlID0gYXJl
YS55MSwgZGVsZXRlIGFyZWEueTE7Ci0gICAgcmV0dXJuIGFyZWE7Ci0gIH07Ci0gIGQzLnN2Zy5j
aG9yZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBzb3VyY2UgPSBkM19zb3VyY2UsIHRhcmdldCA9
IGQzX3RhcmdldCwgcmFkaXVzID0gZDNfc3ZnX2Nob3JkUmFkaXVzLCBzdGFydEFuZ2xlID0gZDNf
c3ZnX2FyY1N0YXJ0QW5nbGUsIGVuZEFuZ2xlID0gZDNfc3ZnX2FyY0VuZEFuZ2xlOwotICAgIGZ1
bmN0aW9uIGNob3JkKGQsIGkpIHsKLSAgICAgIHZhciBzID0gc3ViZ3JvdXAodGhpcywgc291cmNl
LCBkLCBpKSwgdCA9IHN1Ymdyb3VwKHRoaXMsIHRhcmdldCwgZCwgaSk7Ci0gICAgICByZXR1cm4g
Ik0iICsgcy5wMCArIGFyYyhzLnIsIHMucDEsIHMuYTEgLSBzLmEwKSArIChlcXVhbHMocywgdCkg
PyBjdXJ2ZShzLnIsIHMucDEsIHMuciwgcy5wMCkgOiBjdXJ2ZShzLnIsIHMucDEsIHQuciwgdC5w
MCkgKyBhcmModC5yLCB0LnAxLCB0LmExIC0gdC5hMCkgKyBjdXJ2ZSh0LnIsIHQucDEsIHMuciwg
cy5wMCkpICsgIloiOwotICAgIH0KLSAgICBmdW5jdGlvbiBzdWJncm91cChzZWxmLCBmLCBkLCBp
KSB7Ci0gICAgICB2YXIgc3ViZ3JvdXAgPSBmLmNhbGwoc2VsZiwgZCwgaSksIHIgPSByYWRpdXMu
Y2FsbChzZWxmLCBzdWJncm91cCwgaSksIGEwID0gc3RhcnRBbmdsZS5jYWxsKHNlbGYsIHN1Ymdy
b3VwLCBpKSArIGQzX3N2Z19hcmNPZmZzZXQsIGExID0gZW5kQW5nbGUuY2FsbChzZWxmLCBzdWJn
cm91cCwgaSkgKyBkM19zdmdfYXJjT2Zmc2V0OwotICAgICAgcmV0dXJuIHsKLSAgICAgICAgcjog
ciwKLSAgICAgICAgYTA6IGEwLAotICAgICAgICBhMTogYTEsCi0gICAgICAgIHAwOiBbIHIgKiBN
YXRoLmNvcyhhMCksIHIgKiBNYXRoLnNpbihhMCkgXSwKLSAgICAgICAgcDE6IFsgciAqIE1hdGgu
Y29zKGExKSwgciAqIE1hdGguc2luKGExKSBdCi0gICAgICB9OwotICAgIH0KLSAgICBmdW5jdGlv
biBlcXVhbHMoYSwgYikgewotICAgICAgcmV0dXJuIGEuYTAgPT0gYi5hMCAmJiBhLmExID09IGIu
YTE7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGFyYyhyLCBwLCBhKSB7Ci0gICAgICByZXR1cm4gIkEi
ICsgciArICIsIiArIHIgKyAiIDAgIiArICsoYSA+IM+AKSArICIsMSAiICsgcDsKLSAgICB9Ci0g
ICAgZnVuY3Rpb24gY3VydmUocjAsIHAwLCByMSwgcDEpIHsKLSAgICAgIHJldHVybiAiUSAwLDAg
IiArIHAxOwotICAgIH0KLSAgICBjaG9yZC5yYWRpdXMgPSBmdW5jdGlvbih2KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByYWRpdXM7Ci0gICAgICByYWRpdXMgPSBkM19m
dW5jdG9yKHYpOwotICAgICAgcmV0dXJuIGNob3JkOwotICAgIH07Ci0gICAgY2hvcmQuc291cmNl
ID0gZnVuY3Rpb24odikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc291
cmNlOwotICAgICAgc291cmNlID0gZDNfZnVuY3Rvcih2KTsKLSAgICAgIHJldHVybiBjaG9yZDsK
LSAgICB9OwotICAgIGNob3JkLnRhcmdldCA9IGZ1bmN0aW9uKHYpIHsKLSAgICAgIGlmICghYXJn
dW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRhcmdldDsKLSAgICAgIHRhcmdldCA9IGQzX2Z1bmN0b3Io
dik7Ci0gICAgICByZXR1cm4gY2hvcmQ7Ci0gICAgfTsKLSAgICBjaG9yZC5zdGFydEFuZ2xlID0g
ZnVuY3Rpb24odikgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc3RhcnRB
bmdsZTsKLSAgICAgIHN0YXJ0QW5nbGUgPSBkM19mdW5jdG9yKHYpOwotICAgICAgcmV0dXJuIGNo
b3JkOwotICAgIH07Ci0gICAgY2hvcmQuZW5kQW5nbGUgPSBmdW5jdGlvbih2KSB7Ci0gICAgICBp
ZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBlbmRBbmdsZTsKLSAgICAgIGVuZEFuZ2xlID0g
ZDNfZnVuY3Rvcih2KTsKLSAgICAgIHJldHVybiBjaG9yZDsKLSAgICB9OwotICAgIHJldHVybiBj
aG9yZDsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfc3ZnX2Nob3JkUmFkaXVzKGQpIHsKLSAgICByZXR1
cm4gZC5yYWRpdXM7Ci0gIH0KLSAgZDMuc3ZnLmRpYWdvbmFsID0gZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIHNvdXJjZSA9IGQzX3NvdXJjZSwgdGFyZ2V0ID0gZDNfdGFyZ2V0LCBwcm9qZWN0aW9uID0g
ZDNfc3ZnX2RpYWdvbmFsUHJvamVjdGlvbjsKLSAgICBmdW5jdGlvbiBkaWFnb25hbChkLCBpKSB7
Ci0gICAgICB2YXIgcDAgPSBzb3VyY2UuY2FsbCh0aGlzLCBkLCBpKSwgcDMgPSB0YXJnZXQuY2Fs
bCh0aGlzLCBkLCBpKSwgbSA9IChwMC55ICsgcDMueSkgLyAyLCBwID0gWyBwMCwgewotICAgICAg
ICB4OiBwMC54LAotICAgICAgICB5OiBtCi0gICAgICB9LCB7Ci0gICAgICAgIHg6IHAzLngsCi0g
ICAgICAgIHk6IG0KLSAgICAgIH0sIHAzIF07Ci0gICAgICBwID0gcC5tYXAocHJvamVjdGlvbik7
Ci0gICAgICByZXR1cm4gIk0iICsgcFswXSArICJDIiArIHBbMV0gKyAiICIgKyBwWzJdICsgIiAi
ICsgcFszXTsKLSAgICB9Ci0gICAgZGlhZ29uYWwuc291cmNlID0gZnVuY3Rpb24oeCkgewotICAg
ICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc291cmNlOwotICAgICAgc291cmNlID0g
ZDNfZnVuY3Rvcih4KTsKLSAgICAgIHJldHVybiBkaWFnb25hbDsKLSAgICB9OwotICAgIGRpYWdv
bmFsLnRhcmdldCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHRhcmdldDsKLSAgICAgIHRhcmdldCA9IGQzX2Z1bmN0b3IoeCk7Ci0gICAgICByZXR1
cm4gZGlhZ29uYWw7Ci0gICAgfTsKLSAgICBkaWFnb25hbC5wcm9qZWN0aW9uID0gZnVuY3Rpb24o
eCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gcHJvamVjdGlvbjsKLSAg
ICAgIHByb2plY3Rpb24gPSB4OwotICAgICAgcmV0dXJuIGRpYWdvbmFsOwotICAgIH07Ci0gICAg
cmV0dXJuIGRpYWdvbmFsOwotICB9OwotICBmdW5jdGlvbiBkM19zdmdfZGlhZ29uYWxQcm9qZWN0
aW9uKGQpIHsKLSAgICByZXR1cm4gWyBkLngsIGQueSBdOwotICB9Ci0gIGQzLnN2Zy5kaWFnb25h
bC5yYWRpYWwgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgZGlhZ29uYWwgPSBkMy5zdmcuZGlhZ29u
YWwoKSwgcHJvamVjdGlvbiA9IGQzX3N2Z19kaWFnb25hbFByb2plY3Rpb24sIHByb2plY3Rpb25f
ID0gZGlhZ29uYWwucHJvamVjdGlvbjsKLSAgICBkaWFnb25hbC5wcm9qZWN0aW9uID0gZnVuY3Rp
b24oeCkgewotICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBwcm9qZWN0aW9uXyhkM19z
dmdfZGlhZ29uYWxSYWRpYWxQcm9qZWN0aW9uKHByb2plY3Rpb24gPSB4KSkgOiBwcm9qZWN0aW9u
OwotICAgIH07Ci0gICAgcmV0dXJuIGRpYWdvbmFsOwotICB9OwotICBmdW5jdGlvbiBkM19zdmdf
ZGlhZ29uYWxSYWRpYWxQcm9qZWN0aW9uKHByb2plY3Rpb24pIHsKLSAgICByZXR1cm4gZnVuY3Rp
b24oKSB7Ci0gICAgICB2YXIgZCA9IHByb2plY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSwg
ciA9IGRbMF0sIGEgPSBkWzFdICsgZDNfc3ZnX2FyY09mZnNldDsKLSAgICAgIHJldHVybiBbIHIg
KiBNYXRoLmNvcyhhKSwgciAqIE1hdGguc2luKGEpIF07Ci0gICAgfTsKLSAgfQotICBkMy5zdmcu
c3ltYm9sID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHR5cGUgPSBkM19zdmdfc3ltYm9sVHlwZSwg
c2l6ZSA9IGQzX3N2Z19zeW1ib2xTaXplOwotICAgIGZ1bmN0aW9uIHN5bWJvbChkLCBpKSB7Ci0g
ICAgICByZXR1cm4gKGQzX3N2Z19zeW1ib2xzLmdldCh0eXBlLmNhbGwodGhpcywgZCwgaSkpIHx8
IGQzX3N2Z19zeW1ib2xDaXJjbGUpKHNpemUuY2FsbCh0aGlzLCBkLCBpKSk7Ci0gICAgfQotICAg
IHN5bWJvbC50eXBlID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3Ro
KSByZXR1cm4gdHlwZTsKLSAgICAgIHR5cGUgPSBkM19mdW5jdG9yKHgpOwotICAgICAgcmV0dXJu
IHN5bWJvbDsKLSAgICB9OwotICAgIHN5bWJvbC5zaXplID0gZnVuY3Rpb24oeCkgewotICAgICAg
aWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2l6ZTsKLSAgICAgIHNpemUgPSBkM19mdW5j
dG9yKHgpOwotICAgICAgcmV0dXJuIHN5bWJvbDsKLSAgICB9OwotICAgIHJldHVybiBzeW1ib2w7
Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3N2Z19zeW1ib2xTaXplKCkgewotICAgIHJldHVybiA2NDsK
LSAgfQotICBmdW5jdGlvbiBkM19zdmdfc3ltYm9sVHlwZSgpIHsKLSAgICByZXR1cm4gImNpcmNs
ZSI7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfc3ZnX3N5bWJvbENpcmNsZShzaXplKSB7Ci0gICAgdmFy
IHIgPSBNYXRoLnNxcnQoc2l6ZSAvIM+AKTsKLSAgICByZXR1cm4gIk0wLCIgKyByICsgIkEiICsg
ciArICIsIiArIHIgKyAiIDAgMSwxIDAsIiArIC1yICsgIkEiICsgciArICIsIiArIHIgKyAiIDAg
MSwxIDAsIiArIHIgKyAiWiI7Ci0gIH0KLSAgdmFyIGQzX3N2Z19zeW1ib2xzID0gZDMubWFwKHsK
LSAgICBjaXJjbGU6IGQzX3N2Z19zeW1ib2xDaXJjbGUsCi0gICAgY3Jvc3M6IGZ1bmN0aW9uKHNp
emUpIHsKLSAgICAgIHZhciByID0gTWF0aC5zcXJ0KHNpemUgLyA1KSAvIDI7Ci0gICAgICByZXR1
cm4gIk0iICsgLTMgKiByICsgIiwiICsgLXIgKyAiSCIgKyAtciArICJWIiArIC0zICogciArICJI
IiArIHIgKyAiViIgKyAtciArICJIIiArIDMgKiByICsgIlYiICsgciArICJIIiArIHIgKyAiViIg
KyAzICogciArICJIIiArIC1yICsgIlYiICsgciArICJIIiArIC0zICogciArICJaIjsKLSAgICB9
LAotICAgIGRpYW1vbmQ6IGZ1bmN0aW9uKHNpemUpIHsKLSAgICAgIHZhciByeSA9IE1hdGguc3Fy
dChzaXplIC8gKDIgKiBkM19zdmdfc3ltYm9sVGFuMzApKSwgcnggPSByeSAqIGQzX3N2Z19zeW1i
b2xUYW4zMDsKLSAgICAgIHJldHVybiAiTTAsIiArIC1yeSArICJMIiArIHJ4ICsgIiwwIiArICIg
MCwiICsgcnkgKyAiICIgKyAtcnggKyAiLDAiICsgIloiOwotICAgIH0sCi0gICAgc3F1YXJlOiBm
dW5jdGlvbihzaXplKSB7Ci0gICAgICB2YXIgciA9IE1hdGguc3FydChzaXplKSAvIDI7Ci0gICAg
ICByZXR1cm4gIk0iICsgLXIgKyAiLCIgKyAtciArICJMIiArIHIgKyAiLCIgKyAtciArICIgIiAr
IHIgKyAiLCIgKyByICsgIiAiICsgLXIgKyAiLCIgKyByICsgIloiOwotICAgIH0sCi0gICAgInRy
aWFuZ2xlLWRvd24iOiBmdW5jdGlvbihzaXplKSB7Ci0gICAgICB2YXIgcnggPSBNYXRoLnNxcnQo
c2l6ZSAvIGQzX3N2Z19zeW1ib2xTcXJ0MyksIHJ5ID0gcnggKiBkM19zdmdfc3ltYm9sU3FydDMg
LyAyOwotICAgICAgcmV0dXJuICJNMCwiICsgcnkgKyAiTCIgKyByeCArICIsIiArIC1yeSArICIg
IiArIC1yeCArICIsIiArIC1yeSArICJaIjsKLSAgICB9LAotICAgICJ0cmlhbmdsZS11cCI6IGZ1
bmN0aW9uKHNpemUpIHsKLSAgICAgIHZhciByeCA9IE1hdGguc3FydChzaXplIC8gZDNfc3ZnX3N5
bWJvbFNxcnQzKSwgcnkgPSByeCAqIGQzX3N2Z19zeW1ib2xTcXJ0MyAvIDI7Ci0gICAgICByZXR1
cm4gIk0wLCIgKyAtcnkgKyAiTCIgKyByeCArICIsIiArIHJ5ICsgIiAiICsgLXJ4ICsgIiwiICsg
cnkgKyAiWiI7Ci0gICAgfQotICB9KTsKLSAgZDMuc3ZnLnN5bWJvbFR5cGVzID0gZDNfc3ZnX3N5
bWJvbHMua2V5cygpOwotICB2YXIgZDNfc3ZnX3N5bWJvbFNxcnQzID0gTWF0aC5zcXJ0KDMpLCBk
M19zdmdfc3ltYm9sVGFuMzAgPSBNYXRoLnRhbigzMCAqIGQzX3JhZGlhbnMpOwotICBmdW5jdGlv
biBkM190cmFuc2l0aW9uKGdyb3VwcywgaWQpIHsKLSAgICBkM19zdWJjbGFzcyhncm91cHMsIGQz
X3RyYW5zaXRpb25Qcm90b3R5cGUpOwotICAgIGdyb3Vwcy5pZCA9IGlkOwotICAgIHJldHVybiBn
cm91cHM7Ci0gIH0KLSAgdmFyIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUgPSBbXSwgZDNfdHJhbnNp
dGlvbklkID0gMCwgZDNfdHJhbnNpdGlvbkluaGVyaXRJZCwgZDNfdHJhbnNpdGlvbkluaGVyaXQ7
Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUuY2FsbCA9IGQzX3NlbGVjdGlvblByb3RvdHlwZS5j
YWxsOwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLmVtcHR5ID0gZDNfc2VsZWN0aW9uUHJvdG90
eXBlLmVtcHR5OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLm5vZGUgPSBkM19zZWxlY3Rpb25Q
cm90b3R5cGUubm9kZTsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5zaXplID0gZDNfc2VsZWN0
aW9uUHJvdG90eXBlLnNpemU7Ci0gIGQzLnRyYW5zaXRpb24gPSBmdW5jdGlvbihzZWxlY3Rpb24p
IHsKLSAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGQzX3RyYW5zaXRpb25Jbmhlcml0SWQg
PyBzZWxlY3Rpb24udHJhbnNpdGlvbigpIDogc2VsZWN0aW9uIDogZDNfc2VsZWN0aW9uUm9vdC50
cmFuc2l0aW9uKCk7Ci0gIH07Ci0gIGQzLnRyYW5zaXRpb24ucHJvdG90eXBlID0gZDNfdHJhbnNp
dGlvblByb3RvdHlwZTsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlv
bihzZWxlY3RvcikgewotICAgIHZhciBpZCA9IHRoaXMuaWQsIHN1Ymdyb3VwcyA9IFtdLCBzdWJn
cm91cCwgc3Vibm9kZSwgbm9kZTsKLSAgICBzZWxlY3RvciA9IGQzX3NlbGVjdGlvbl9zZWxlY3Rv
cihzZWxlY3Rvcik7Ci0gICAgZm9yICh2YXIgaiA9IC0xLCBtID0gdGhpcy5sZW5ndGg7ICsraiA8
IG07ICkgewotICAgICAgc3ViZ3JvdXBzLnB1c2goc3ViZ3JvdXAgPSBbXSk7Ci0gICAgICBmb3Ig
KHZhciBncm91cCA9IHRoaXNbal0sIGkgPSAtMSwgbiA9IGdyb3VwLmxlbmd0aDsgKytpIDwgbjsg
KSB7Ci0gICAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdG9y
LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgaikpKSB7Ci0gICAgICAgICAgaWYgKCJfX2Rh
dGFfXyIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187Ci0gICAgICAg
ICAgZDNfdHJhbnNpdGlvbk5vZGUoc3Vibm9kZSwgaSwgaWQsIG5vZGUuX190cmFuc2l0aW9uX19b
aWRdKTsKLSAgICAgICAgICBzdWJncm91cC5wdXNoKHN1Ym5vZGUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHN1Ymdyb3VwLnB1c2gobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGQzX3RyYW5zaXRpb24oc3ViZ3JvdXBzLCBpZCk7Ci0gIH07Ci0gIGQz
X3RyYW5zaXRpb25Qcm90b3R5cGUuc2VsZWN0QWxsID0gZnVuY3Rpb24oc2VsZWN0b3IpIHsKLSAg
ICB2YXIgaWQgPSB0aGlzLmlkLCBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIHN1Ym5vZGVzLCBu
b2RlLCBzdWJub2RlLCB0cmFuc2l0aW9uOwotICAgIHNlbGVjdG9yID0gZDNfc2VsZWN0aW9uX3Nl
bGVjdG9yQWxsKHNlbGVjdG9yKTsKLSAgICBmb3IgKHZhciBqID0gLTEsIG0gPSB0aGlzLmxlbmd0
aDsgKytqIDwgbTsgKSB7Ci0gICAgICBmb3IgKHZhciBncm91cCA9IHRoaXNbal0sIGkgPSAtMSwg
biA9IGdyb3VwLmxlbmd0aDsgKytpIDwgbjsgKSB7Ci0gICAgICAgIGlmIChub2RlID0gZ3JvdXBb
aV0pIHsKLSAgICAgICAgICB0cmFuc2l0aW9uID0gbm9kZS5fX3RyYW5zaXRpb25fX1tpZF07Ci0g
ICAgICAgICAgc3Vibm9kZXMgPSBzZWxlY3Rvci5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGks
IGopOwotICAgICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pOwotICAgICAgICAg
IGZvciAodmFyIGsgPSAtMSwgbyA9IHN1Ym5vZGVzLmxlbmd0aDsgKytrIDwgbzsgKSB7Ci0gICAg
ICAgICAgICBpZiAoc3Vibm9kZSA9IHN1Ym5vZGVzW2tdKSBkM190cmFuc2l0aW9uTm9kZShzdWJu
b2RlLCBrLCBpZCwgdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICBzdWJncm91cC5wdXNoKHN1Ym5v
ZGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
ZDNfdHJhbnNpdGlvbihzdWJncm91cHMsIGlkKTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlvblByb3Rv
dHlwZS5maWx0ZXIgPSBmdW5jdGlvbihmaWx0ZXIpIHsKLSAgICB2YXIgc3ViZ3JvdXBzID0gW10s
IHN1Ymdyb3VwLCBncm91cCwgbm9kZTsKLSAgICBpZiAodHlwZW9mIGZpbHRlciAhPT0gImZ1bmN0
aW9uIikgZmlsdGVyID0gZDNfc2VsZWN0aW9uX2ZpbHRlcihmaWx0ZXIpOwotICAgIGZvciAodmFy
IGogPSAwLCBtID0gdGhpcy5sZW5ndGg7IGogPCBtOyBqKyspIHsKLSAgICAgIHN1Ymdyb3Vwcy5w
dXNoKHN1Ymdyb3VwID0gW10pOwotICAgICAgZm9yICh2YXIgZ3JvdXAgPSB0aGlzW2pdLCBpID0g
MCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47IGkrKykgewotICAgICAgICBpZiAoKG5vZGUgPSBn
cm91cFtpXSkgJiYgZmlsdGVyLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgaikpIHsKLSAg
ICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBkM190cmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5pZCk7Ci0gIH07Ci0gIGQz
X3RyYW5zaXRpb25Qcm90b3R5cGUudHdlZW4gPSBmdW5jdGlvbihuYW1lLCB0d2VlbikgewotICAg
IHZhciBpZCA9IHRoaXMuaWQ7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4g
dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19baWRdLnR3ZWVuLmdldChuYW1lKTsKLSAgICByZXR1
cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcywgdHdlZW4gPT0gbnVsbCA/IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgIG5vZGUuX190cmFuc2l0aW9uX19baWRdLnR3ZWVuLnJlbW92ZShuYW1lKTsKLSAg
ICB9IDogZnVuY3Rpb24obm9kZSkgewotICAgICAgbm9kZS5fX3RyYW5zaXRpb25fX1tpZF0udHdl
ZW4uc2V0KG5hbWUsIHR3ZWVuKTsKLSAgICB9KTsKLSAgfTsKLSAgZnVuY3Rpb24gZDNfdHJhbnNp
dGlvbl90d2Vlbihncm91cHMsIG5hbWUsIHZhbHVlLCB0d2VlbikgewotICAgIHZhciBpZCA9IGdy
b3Vwcy5pZDsKLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2goZ3JvdXBzLCB0eXBlb2YgdmFs
dWUgPT09ICJmdW5jdGlvbiIgPyBmdW5jdGlvbihub2RlLCBpLCBqKSB7Ci0gICAgICBub2RlLl9f
dHJhbnNpdGlvbl9fW2lkXS50d2Vlbi5zZXQobmFtZSwgdHdlZW4odmFsdWUuY2FsbChub2RlLCBu
b2RlLl9fZGF0YV9fLCBpLCBqKSkpOwotICAgIH0gOiAodmFsdWUgPSB0d2Vlbih2YWx1ZSksIGZ1
bmN0aW9uKG5vZGUpIHsKLSAgICAgIG5vZGUuX190cmFuc2l0aW9uX19baWRdLnR3ZWVuLnNldChu
YW1lLCB2YWx1ZSk7Ci0gICAgfSkpOwotICB9Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUuYXR0
ciA9IGZ1bmN0aW9uKG5hbWVOUywgdmFsdWUpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8
IDIpIHsKLSAgICAgIGZvciAodmFsdWUgaW4gbmFtZU5TKSB0aGlzLmF0dHIodmFsdWUsIG5hbWVO
U1t2YWx1ZV0pOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIHZhciBpbnRlcnBvbGF0
ZSA9IG5hbWVOUyA9PSAidHJhbnNmb3JtIiA/IGQzX2ludGVycG9sYXRlVHJhbnNmb3JtIDogZDNf
aW50ZXJwb2xhdGUsIG5hbWUgPSBkMy5ucy5xdWFsaWZ5KG5hbWVOUyk7Ci0gICAgZnVuY3Rpb24g
YXR0ck51bGwoKSB7Ci0gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKLSAgICB9Ci0g
ICAgZnVuY3Rpb24gYXR0ck51bGxOUygpIHsKLSAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMo
bmFtZS5zcGFjZSwgbmFtZS5sb2NhbCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGF0dHJUd2Vlbihi
KSB7Ci0gICAgICByZXR1cm4gYiA9PSBudWxsID8gYXR0ck51bGwgOiAoYiArPSAiIiwgZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHZhciBhID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSksIGk7Ci0gICAg
ICAgIHJldHVybiBhICE9PSBiICYmIChpID0gaW50ZXJwb2xhdGUoYSwgYiksIGZ1bmN0aW9uKHQp
IHsKLSAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBpKHQpKTsKLSAgICAgICAgfSk7
Ci0gICAgICB9KTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gYXR0clR3ZWVuTlMoYikgewotICAgICAg
cmV0dXJuIGIgPT0gbnVsbCA/IGF0dHJOdWxsTlMgOiAoYiArPSAiIiwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBhID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhuYW1lLnNwYWNlLCBuYW1lLmxvY2Fs
KSwgaTsKLSAgICAgICAgcmV0dXJuIGEgIT09IGIgJiYgKGkgPSBpbnRlcnBvbGF0ZShhLCBiKSwg
ZnVuY3Rpb24odCkgewotICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTlMobmFtZS5zcGFjZSwg
bmFtZS5sb2NhbCwgaSh0KSk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgfQotICAgIHJl
dHVybiBkM190cmFuc2l0aW9uX3R3ZWVuKHRoaXMsICJhdHRyLiIgKyBuYW1lTlMsIHZhbHVlLCBu
YW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pOwotICB9OwotICBkM190cmFuc2l0
aW9uUHJvdG90eXBlLmF0dHJUd2VlbiA9IGZ1bmN0aW9uKG5hbWVOUywgdHdlZW4pIHsKLSAgICB2
YXIgbmFtZSA9IGQzLm5zLnF1YWxpZnkobmFtZU5TKTsKLSAgICBmdW5jdGlvbiBhdHRyVHdlZW4o
ZCwgaSkgewotICAgICAgdmFyIGYgPSB0d2Vlbi5jYWxsKHRoaXMsIGQsIGksIHRoaXMuZ2V0QXR0
cmlidXRlKG5hbWUpKTsKLSAgICAgIHJldHVybiBmICYmIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAg
dGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgZih0KSk7Ci0gICAgICB9OwotICAgIH0KLSAgICBmdW5j
dGlvbiBhdHRyVHdlZW5OUyhkLCBpKSB7Ci0gICAgICB2YXIgZiA9IHR3ZWVuLmNhbGwodGhpcywg
ZCwgaSwgdGhpcy5nZXRBdHRyaWJ1dGVOUyhuYW1lLnNwYWNlLCBuYW1lLmxvY2FsKSk7Ci0gICAg
ICByZXR1cm4gZiAmJiBmdW5jdGlvbih0KSB7Ci0gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlTlMo
bmFtZS5zcGFjZSwgbmFtZS5sb2NhbCwgZih0KSk7Ci0gICAgICB9OwotICAgIH0KLSAgICByZXR1
cm4gdGhpcy50d2VlbigiYXR0ci4iICsgbmFtZU5TLCBuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMg
OiBhdHRyVHdlZW4pOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLnN0eWxlID0gZnVu
Y3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7Ci0gICAgdmFyIG4gPSBhcmd1bWVudHMubGVu
Z3RoOwotICAgIGlmIChuIDwgMykgewotICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5n
IikgewotICAgICAgICBpZiAobiA8IDIpIHZhbHVlID0gIiI7Ci0gICAgICAgIGZvciAocHJpb3Jp
dHkgaW4gbmFtZSkgdGhpcy5zdHlsZShwcmlvcml0eSwgbmFtZVtwcmlvcml0eV0sIHZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICBwcmlvcml0eSA9ICIiOwotICAg
IH0KLSAgICBmdW5jdGlvbiBzdHlsZU51bGwoKSB7Ci0gICAgICB0aGlzLnN0eWxlLnJlbW92ZVBy
b3BlcnR5KG5hbWUpOwotICAgIH0KLSAgICBmdW5jdGlvbiBzdHlsZVN0cmluZyhiKSB7Ci0gICAg
ICByZXR1cm4gYiA9PSBudWxsID8gc3R5bGVOdWxsIDogKGIgKz0gIiIsIGZ1bmN0aW9uKCkgewot
ICAgICAgICB2YXIgYSA9IGQzX3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUobmFtZSksIGk7Ci0gICAgICAgIHJldHVybiBhICE9PSBiICYmIChpID0g
ZDNfaW50ZXJwb2xhdGUoYSwgYiksIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICB0aGlzLnN0eWxl
LnNldFByb3BlcnR5KG5hbWUsIGkodCksIHByaW9yaXR5KTsKLSAgICAgICAgfSk7Ci0gICAgICB9
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGQzX3RyYW5zaXRpb25fdHdlZW4odGhpcywgInN0eWxlLiIg
KyBuYW1lLCB2YWx1ZSwgc3R5bGVTdHJpbmcpOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90
eXBlLnN0eWxlVHdlZW4gPSBmdW5jdGlvbihuYW1lLCB0d2VlbiwgcHJpb3JpdHkpIHsKLSAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHByaW9yaXR5ID0gIiI7Ci0gICAgZnVuY3Rpb24gc3R5
bGVUd2VlbihkLCBpKSB7Ci0gICAgICB2YXIgZiA9IHR3ZWVuLmNhbGwodGhpcywgZCwgaSwgZDNf
d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcywgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1l
KSk7Ci0gICAgICByZXR1cm4gZiAmJiBmdW5jdGlvbih0KSB7Ci0gICAgICAgIHRoaXMuc3R5bGUu
c2V0UHJvcGVydHkobmFtZSwgZih0KSwgcHJpb3JpdHkpOwotICAgICAgfTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRoaXMudHdlZW4oInN0eWxlLiIgKyBuYW1lLCBzdHlsZVR3ZWVuKTsKLSAgfTsKLSAg
ZDNfdHJhbnNpdGlvblByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1
cm4gZDNfdHJhbnNpdGlvbl90d2Vlbih0aGlzLCAidGV4dCIsIHZhbHVlLCBkM190cmFuc2l0aW9u
X3RleHQpOwotICB9OwotICBmdW5jdGlvbiBkM190cmFuc2l0aW9uX3RleHQoYikgewotICAgIGlm
IChiID09IG51bGwpIGIgPSAiIjsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlz
LnRleHRDb250ZW50ID0gYjsKLSAgICB9OwotICB9Ci0gIGQzX3RyYW5zaXRpb25Qcm90b3R5cGUu
cmVtb3ZlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRp
b24iLCBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBwOwotICAgICAgaWYgKHRoaXMuX190cmFuc2l0
aW9uX18uY291bnQgPCAyICYmIChwID0gdGhpcy5wYXJlbnROb2RlKSkgcC5yZW1vdmVDaGlsZCh0
aGlzKTsKLSAgICB9KTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlvblByb3RvdHlwZS5lYXNlID0gZnVu
Y3Rpb24odmFsdWUpIHsKLSAgICB2YXIgaWQgPSB0aGlzLmlkOwotICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoIDwgMSkgcmV0dXJuIHRoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW2lkXS5lYXNlOwot
ICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHZhbHVlID0gZDMuZWFzZS5hcHBs
eShkMywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcywgZnVu
Y3Rpb24obm9kZSkgewotICAgICAgbm9kZS5fX3RyYW5zaXRpb25fX1tpZF0uZWFzZSA9IHZhbHVl
OwotICAgIH0pOwotICB9OwotICBkM190cmFuc2l0aW9uUHJvdG90eXBlLmRlbGF5ID0gZnVuY3Rp
b24odmFsdWUpIHsKLSAgICB2YXIgaWQgPSB0aGlzLmlkOwotICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoIDwgMSkgcmV0dXJuIHRoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW2lkXS5kZWxheTsKLSAg
ICByZXR1cm4gZDNfc2VsZWN0aW9uX2VhY2godGhpcywgdHlwZW9mIHZhbHVlID09PSAiZnVuY3Rp
b24iID8gZnVuY3Rpb24obm9kZSwgaSwgaikgewotICAgICAgbm9kZS5fX3RyYW5zaXRpb25fX1tp
ZF0uZGVsYXkgPSArdmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKTsKLSAgICB9
IDogKHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbihub2RlKSB7Ci0gICAgICBub2RlLl9fdHJhbnNp
dGlvbl9fW2lkXS5kZWxheSA9IHZhbHVlOwotICAgIH0pKTsKLSAgfTsKLSAgZDNfdHJhbnNpdGlv
blByb3RvdHlwZS5kdXJhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdmFyIGlkID0gdGhp
cy5pZDsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiB0aGlzLm5vZGUoKS5f
X3RyYW5zaXRpb25fX1tpZF0uZHVyYXRpb247Ci0gICAgcmV0dXJuIGQzX3NlbGVjdGlvbl9lYWNo
KHRoaXMsIHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIiA/IGZ1bmN0aW9uKG5vZGUsIGksIGop
IHsKLSAgICAgIG5vZGUuX190cmFuc2l0aW9uX19baWRdLmR1cmF0aW9uID0gTWF0aC5tYXgoMSwg
dmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKSk7Ci0gICAgfSA6ICh2YWx1ZSA9
IE1hdGgubWF4KDEsIHZhbHVlKSwgZnVuY3Rpb24obm9kZSkgewotICAgICAgbm9kZS5fX3RyYW5z
aXRpb25fX1tpZF0uZHVyYXRpb24gPSB2YWx1ZTsKLSAgICB9KSk7Ci0gIH07Ci0gIGQzX3RyYW5z
aXRpb25Qcm90b3R5cGUuZWFjaCA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7Ci0gICAgdmFy
IGlkID0gdGhpcy5pZDsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsKLSAgICAgIHZh
ciBpbmhlcml0ID0gZDNfdHJhbnNpdGlvbkluaGVyaXQsIGluaGVyaXRJZCA9IGQzX3RyYW5zaXRp
b25Jbmhlcml0SWQ7Ci0gICAgICBkM190cmFuc2l0aW9uSW5oZXJpdElkID0gaWQ7Ci0gICAgICBk
M19zZWxlY3Rpb25fZWFjaCh0aGlzLCBmdW5jdGlvbihub2RlLCBpLCBqKSB7Ci0gICAgICAgIGQz
X3RyYW5zaXRpb25Jbmhlcml0ID0gbm9kZS5fX3RyYW5zaXRpb25fX1tpZF07Ci0gICAgICAgIHR5
cGUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBqKTsKLSAgICAgIH0pOwotICAgICAgZDNf
dHJhbnNpdGlvbkluaGVyaXQgPSBpbmhlcml0OwotICAgICAgZDNfdHJhbnNpdGlvbkluaGVyaXRJ
ZCA9IGluaGVyaXRJZDsKLSAgICB9IGVsc2UgewotICAgICAgZDNfc2VsZWN0aW9uX2VhY2godGhp
cywgZnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IG5vZGUuX190cmFu
c2l0aW9uX19baWRdOwotICAgICAgICAodHJhbnNpdGlvbi5ldmVudCB8fCAodHJhbnNpdGlvbi5l
dmVudCA9IGQzLmRpc3BhdGNoKCJzdGFydCIsICJlbmQiKSkpLm9uKHR5cGUsIGxpc3RlbmVyKTsK
LSAgICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgfTsKLSAgZDNfdHJhbnNpdGlv
blByb3RvdHlwZS50cmFuc2l0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGlkMCA9IHRoaXMu
aWQsIGlkMSA9ICsrZDNfdHJhbnNpdGlvbklkLCBzdWJncm91cHMgPSBbXSwgc3ViZ3JvdXAsIGdy
b3VwLCBub2RlLCB0cmFuc2l0aW9uOwotICAgIGZvciAodmFyIGogPSAwLCBtID0gdGhpcy5sZW5n
dGg7IGogPCBtOyBqKyspIHsKLSAgICAgIHN1Ymdyb3Vwcy5wdXNoKHN1Ymdyb3VwID0gW10pOwot
ICAgICAgZm9yICh2YXIgZ3JvdXAgPSB0aGlzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsg
aSA8IG47IGkrKykgewotICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7Ci0gICAgICAgICAg
dHJhbnNpdGlvbiA9IE9iamVjdC5jcmVhdGUobm9kZS5fX3RyYW5zaXRpb25fX1tpZDBdKTsKLSAg
ICAgICAgICB0cmFuc2l0aW9uLmRlbGF5ICs9IHRyYW5zaXRpb24uZHVyYXRpb247Ci0gICAgICAg
ICAgZDNfdHJhbnNpdGlvbk5vZGUobm9kZSwgaSwgaWQxLCB0cmFuc2l0aW9uKTsKLSAgICAgICAg
fQotICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gZDNfdHJhbnNpdGlvbihzdWJncm91cHMsIGlkMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX3Ry
YW5zaXRpb25Ob2RlKG5vZGUsIGksIGlkLCBpbmhlcml0KSB7Ci0gICAgdmFyIGxvY2sgPSBub2Rl
Ll9fdHJhbnNpdGlvbl9fIHx8IChub2RlLl9fdHJhbnNpdGlvbl9fID0gewotICAgICAgYWN0aXZl
OiAwLAotICAgICAgY291bnQ6IDAKLSAgICB9KSwgdHJhbnNpdGlvbiA9IGxvY2tbaWRdOwotICAg
IGlmICghdHJhbnNpdGlvbikgewotICAgICAgdmFyIHRpbWUgPSBpbmhlcml0LnRpbWU7Ci0gICAg
ICB0cmFuc2l0aW9uID0gbG9ja1tpZF0gPSB7Ci0gICAgICAgIHR3ZWVuOiBuZXcgZDNfTWFwKCks
Ci0gICAgICAgIHRpbWU6IHRpbWUsCi0gICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZSwKLSAgICAg
ICAgZGVsYXk6IGluaGVyaXQuZGVsYXksCi0gICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0
aW9uCi0gICAgICB9OwotICAgICAgKytsb2NrLmNvdW50OwotICAgICAgZDMudGltZXIoZnVuY3Rp
b24oZWxhcHNlZCkgewotICAgICAgICB2YXIgZCA9IG5vZGUuX19kYXRhX18sIGVhc2UgPSB0cmFu
c2l0aW9uLmVhc2UsIGRlbGF5ID0gdHJhbnNpdGlvbi5kZWxheSwgZHVyYXRpb24gPSB0cmFuc2l0
aW9uLmR1cmF0aW9uLCB0aW1lciA9IGQzX3RpbWVyX2FjdGl2ZSwgdHdlZW5lZCA9IFtdOwotICAg
ICAgICB0aW1lci50ID0gZGVsYXkgKyB0aW1lOwotICAgICAgICBpZiAoZGVsYXkgPD0gZWxhcHNl
ZCkgcmV0dXJuIHN0YXJ0KGVsYXBzZWQgLSBkZWxheSk7Ci0gICAgICAgIHRpbWVyLmMgPSBzdGFy
dDsKLSAgICAgICAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkgewotICAgICAgICAgIGlmIChsb2Nr
LmFjdGl2ZSA+IGlkKSByZXR1cm4gc3RvcCgpOwotICAgICAgICAgIGxvY2suYWN0aXZlID0gaWQ7
Ci0gICAgICAgICAgdHJhbnNpdGlvbi5ldmVudCAmJiB0cmFuc2l0aW9uLmV2ZW50LnN0YXJ0LmNh
bGwobm9kZSwgZCwgaSk7Ci0gICAgICAgICAgdHJhbnNpdGlvbi50d2Vlbi5mb3JFYWNoKGZ1bmN0
aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9IHZhbHVlLmNhbGwobm9k
ZSwgZCwgaSkpIHsKLSAgICAgICAgICAgICAgdHdlZW5lZC5wdXNoKHZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgICBkMy50aW1lcihmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIHRpbWVyLmMgPSB0aWNrKGVsYXBzZWQgfHwgMSkgPyBkM190cnVlIDogdGljazsK
LSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgIH0sIDAsIHRpbWUpOwotICAgICAgICB9
Ci0gICAgICAgIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkgewotICAgICAgICAgIGlmIChsb2NrLmFj
dGl2ZSAhPT0gaWQpIHJldHVybiBzdG9wKCk7Ci0gICAgICAgICAgdmFyIHQgPSBlbGFwc2VkIC8g
ZHVyYXRpb24sIGUgPSBlYXNlKHQpLCBuID0gdHdlZW5lZC5sZW5ndGg7Ci0gICAgICAgICAgd2hp
bGUgKG4gPiAwKSB7Ci0gICAgICAgICAgICB0d2VlbmVkWy0tbl0uY2FsbChub2RlLCBlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgaWYgKHQgPj0gMSkgewotICAgICAgICAgICAgdHJhbnNpdGlv
bi5ldmVudCAmJiB0cmFuc2l0aW9uLmV2ZW50LmVuZC5jYWxsKG5vZGUsIGQsIGkpOwotICAgICAg
ICAgICAgcmV0dXJuIHN0b3AoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnVu
Y3Rpb24gc3RvcCgpIHsKLSAgICAgICAgICBpZiAoLS1sb2NrLmNvdW50KSBkZWxldGUgbG9ja1tp
ZF07IGVsc2UgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uX187Ci0gICAgICAgICAgcmV0dXJuIDE7
Ci0gICAgICAgIH0KLSAgICAgIH0sIDAsIHRpbWUpOwotICAgIH0KLSAgfQotICBkMy5zdmcuYXhp
cyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBzY2FsZSA9IGQzLnNjYWxlLmxpbmVhcigpLCBvcmll
bnQgPSBkM19zdmdfYXhpc0RlZmF1bHRPcmllbnQsIGlubmVyVGlja1NpemUgPSA2LCBvdXRlclRp
Y2tTaXplID0gNiwgdGlja1BhZGRpbmcgPSAzLCB0aWNrQXJndW1lbnRzXyA9IFsgMTAgXSwgdGlj
a1ZhbHVlcyA9IG51bGwsIHRpY2tGb3JtYXRfOwotICAgIGZ1bmN0aW9uIGF4aXMoZykgewotICAg
ICAgZy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZyA9IGQzLnNlbGVjdCh0aGlzKTsK
LSAgICAgICAgdmFyIHNjYWxlMCA9IHRoaXMuX19jaGFydF9fIHx8IHNjYWxlLCBzY2FsZTEgPSB0
aGlzLl9fY2hhcnRfXyA9IHNjYWxlLmNvcHkoKTsKLSAgICAgICAgdmFyIHRpY2tzID0gdGlja1Zh
bHVlcyA9PSBudWxsID8gc2NhbGUxLnRpY2tzID8gc2NhbGUxLnRpY2tzLmFwcGx5KHNjYWxlMSwg
dGlja0FyZ3VtZW50c18pIDogc2NhbGUxLmRvbWFpbigpIDogdGlja1ZhbHVlcywgdGlja0Zvcm1h
dCA9IHRpY2tGb3JtYXRfID09IG51bGwgPyBzY2FsZTEudGlja0Zvcm1hdCA/IHNjYWxlMS50aWNr
Rm9ybWF0LmFwcGx5KHNjYWxlMSwgdGlja0FyZ3VtZW50c18pIDogZDNfaWRlbnRpdHkgOiB0aWNr
Rm9ybWF0XywgdGljayA9IGcuc2VsZWN0QWxsKCIudGljayIpLmRhdGEodGlja3MsIHNjYWxlMSks
IHRpY2tFbnRlciA9IHRpY2suZW50ZXIoKS5pbnNlcnQoImciLCAiLmRvbWFpbiIpLmF0dHIoImNs
YXNzIiwgInRpY2siKS5zdHlsZSgib3BhY2l0eSIsIM61KSwgdGlja0V4aXQgPSBkMy50cmFuc2l0
aW9uKHRpY2suZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsIM61KS5yZW1vdmUoKSwgdGlja1VwZGF0
ZSA9IGQzLnRyYW5zaXRpb24odGljay5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsIDEpLCB0aWNr
VHJhbnNmb3JtOwotICAgICAgICB2YXIgcmFuZ2UgPSBkM19zY2FsZVJhbmdlKHNjYWxlMSksIHBh
dGggPSBnLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWyAwIF0pLCBwYXRoVXBkYXRlID0gKHBh
dGguZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsICJkb21haW4iKSwgCi0gICAg
ICAgIGQzLnRyYW5zaXRpb24ocGF0aCkpOwotICAgICAgICB0aWNrRW50ZXIuYXBwZW5kKCJsaW5l
Iik7Ci0gICAgICAgIHRpY2tFbnRlci5hcHBlbmQoInRleHQiKTsKLSAgICAgICAgdmFyIGxpbmVF
bnRlciA9IHRpY2tFbnRlci5zZWxlY3QoImxpbmUiKSwgbGluZVVwZGF0ZSA9IHRpY2tVcGRhdGUu
c2VsZWN0KCJsaW5lIiksIHRleHQgPSB0aWNrLnNlbGVjdCgidGV4dCIpLnRleHQodGlja0Zvcm1h
dCksIHRleHRFbnRlciA9IHRpY2tFbnRlci5zZWxlY3QoInRleHQiKSwgdGV4dFVwZGF0ZSA9IHRp
Y2tVcGRhdGUuc2VsZWN0KCJ0ZXh0Iik7Ci0gICAgICAgIHN3aXRjaCAob3JpZW50KSB7Ci0gICAg
ICAgICBjYXNlICJib3R0b20iOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRpY2tUcmFuc2Zv
cm0gPSBkM19zdmdfYXhpc1g7Ci0gICAgICAgICAgICBsaW5lRW50ZXIuYXR0cigieTIiLCBpbm5l
clRpY2tTaXplKTsKLSAgICAgICAgICAgIHRleHRFbnRlci5hdHRyKCJ5IiwgTWF0aC5tYXgoaW5u
ZXJUaWNrU2l6ZSwgMCkgKyB0aWNrUGFkZGluZyk7Ci0gICAgICAgICAgICBsaW5lVXBkYXRlLmF0
dHIoIngyIiwgMCkuYXR0cigieTIiLCBpbm5lclRpY2tTaXplKTsKLSAgICAgICAgICAgIHRleHRV
cGRhdGUuYXR0cigieCIsIDApLmF0dHIoInkiLCBNYXRoLm1heChpbm5lclRpY2tTaXplLCAwKSAr
IHRpY2tQYWRkaW5nKTsKLSAgICAgICAgICAgIHRleHQuYXR0cigiZHkiLCAiLjcxZW0iKS5zdHls
ZSgidGV4dC1hbmNob3IiLCAibWlkZGxlIik7Ci0gICAgICAgICAgICBwYXRoVXBkYXRlLmF0dHIo
ImQiLCAiTSIgKyByYW5nZVswXSArICIsIiArIG91dGVyVGlja1NpemUgKyAiVjBIIiArIHJhbmdl
WzFdICsgIlYiICsgb3V0ZXJUaWNrU2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICB9Ci0KLSAgICAgICAgIGNhc2UgInRvcCI6Ci0gICAgICAgICAgewotICAgICAgICAgICAgdGlj
a1RyYW5zZm9ybSA9IGQzX3N2Z19heGlzWDsKLSAgICAgICAgICAgIGxpbmVFbnRlci5hdHRyKCJ5
MiIsIC1pbm5lclRpY2tTaXplKTsKLSAgICAgICAgICAgIHRleHRFbnRlci5hdHRyKCJ5IiwgLShN
YXRoLm1heChpbm5lclRpY2tTaXplLCAwKSArIHRpY2tQYWRkaW5nKSk7Ci0gICAgICAgICAgICBs
aW5lVXBkYXRlLmF0dHIoIngyIiwgMCkuYXR0cigieTIiLCAtaW5uZXJUaWNrU2l6ZSk7Ci0gICAg
ICAgICAgICB0ZXh0VXBkYXRlLmF0dHIoIngiLCAwKS5hdHRyKCJ5IiwgLShNYXRoLm1heChpbm5l
clRpY2tTaXplLCAwKSArIHRpY2tQYWRkaW5nKSk7Ci0gICAgICAgICAgICB0ZXh0LmF0dHIoImR5
IiwgIjBlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsICJtaWRkbGUiKTsKLSAgICAgICAgICAgIHBh
dGhVcGRhdGUuYXR0cigiZCIsICJNIiArIHJhbmdlWzBdICsgIiwiICsgLW91dGVyVGlja1NpemUg
KyAiVjBIIiArIHJhbmdlWzFdICsgIlYiICsgLW91dGVyVGlja1NpemUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICBjYXNlICJsZWZ0IjoKLSAgICAgICAgICB7
Ci0gICAgICAgICAgICB0aWNrVHJhbnNmb3JtID0gZDNfc3ZnX2F4aXNZOwotICAgICAgICAgICAg
bGluZUVudGVyLmF0dHIoIngyIiwgLWlubmVyVGlja1NpemUpOwotICAgICAgICAgICAgdGV4dEVu
dGVyLmF0dHIoIngiLCAtKE1hdGgubWF4KGlubmVyVGlja1NpemUsIDApICsgdGlja1BhZGRpbmcp
KTsKLSAgICAgICAgICAgIGxpbmVVcGRhdGUuYXR0cigieDIiLCAtaW5uZXJUaWNrU2l6ZSkuYXR0
cigieTIiLCAwKTsKLSAgICAgICAgICAgIHRleHRVcGRhdGUuYXR0cigieCIsIC0oTWF0aC5tYXgo
aW5uZXJUaWNrU2l6ZSwgMCkgKyB0aWNrUGFkZGluZykpLmF0dHIoInkiLCAwKTsKLSAgICAgICAg
ICAgIHRleHQuYXR0cigiZHkiLCAiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCAiZW5kIik7
Ci0gICAgICAgICAgICBwYXRoVXBkYXRlLmF0dHIoImQiLCAiTSIgKyAtb3V0ZXJUaWNrU2l6ZSAr
ICIsIiArIHJhbmdlWzBdICsgIkgwViIgKyByYW5nZVsxXSArICJIIiArIC1vdXRlclRpY2tTaXpl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgY2FzZSAicmln
aHQiOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIHRpY2tUcmFuc2Zvcm0gPSBkM19zdmdfYXhp
c1k7Ci0gICAgICAgICAgICBsaW5lRW50ZXIuYXR0cigieDIiLCBpbm5lclRpY2tTaXplKTsKLSAg
ICAgICAgICAgIHRleHRFbnRlci5hdHRyKCJ4IiwgTWF0aC5tYXgoaW5uZXJUaWNrU2l6ZSwgMCkg
KyB0aWNrUGFkZGluZyk7Ci0gICAgICAgICAgICBsaW5lVXBkYXRlLmF0dHIoIngyIiwgaW5uZXJU
aWNrU2l6ZSkuYXR0cigieTIiLCAwKTsKLSAgICAgICAgICAgIHRleHRVcGRhdGUuYXR0cigieCIs
IE1hdGgubWF4KGlubmVyVGlja1NpemUsIDApICsgdGlja1BhZGRpbmcpLmF0dHIoInkiLCAwKTsK
LSAgICAgICAgICAgIHRleHQuYXR0cigiZHkiLCAiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3Ii
LCAic3RhcnQiKTsKLSAgICAgICAgICAgIHBhdGhVcGRhdGUuYXR0cigiZCIsICJNIiArIG91dGVy
VGlja1NpemUgKyAiLCIgKyByYW5nZVswXSArICJIMFYiICsgcmFuZ2VbMV0gKyAiSCIgKyBvdXRl
clRpY2tTaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoc2NhbGUxLnJhbmdlQmFuZCkgewotICAgICAgICAgIHZhciB4ID0gc2NhbGUx
LCBkeCA9IHgucmFuZ2VCYW5kKCkgLyAyOwotICAgICAgICAgIHNjYWxlMCA9IHNjYWxlMSA9IGZ1
bmN0aW9uKGQpIHsKLSAgICAgICAgICAgIHJldHVybiB4KGQpICsgZHg7Ci0gICAgICAgICAgfTsK
LSAgICAgICAgfSBlbHNlIGlmIChzY2FsZTAucmFuZ2VCYW5kKSB7Ci0gICAgICAgICAgc2NhbGUw
ID0gc2NhbGUxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRpY2tFeGl0LmNhbGwodGlj
a1RyYW5zZm9ybSwgc2NhbGUxKTsKLSAgICAgICAgfQotICAgICAgICB0aWNrRW50ZXIuY2FsbCh0
aWNrVHJhbnNmb3JtLCBzY2FsZTApOwotICAgICAgICB0aWNrVXBkYXRlLmNhbGwodGlja1RyYW5z
Zm9ybSwgc2NhbGUxKTsKLSAgICAgIH0pOwotICAgIH0KLSAgICBheGlzLnNjYWxlID0gZnVuY3Rp
b24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2NhbGU7Ci0gICAg
ICBzY2FsZSA9IHg7Ci0gICAgICByZXR1cm4gYXhpczsKLSAgICB9OwotICAgIGF4aXMub3JpZW50
ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3Jp
ZW50OwotICAgICAgb3JpZW50ID0geCBpbiBkM19zdmdfYXhpc09yaWVudHMgPyB4ICsgIiIgOiBk
M19zdmdfYXhpc0RlZmF1bHRPcmllbnQ7Ci0gICAgICByZXR1cm4gYXhpczsKLSAgICB9OwotICAg
IGF4aXMudGlja3MgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHRpY2tBcmd1bWVudHNfOwotICAgICAgdGlja0FyZ3VtZW50c18gPSBhcmd1bWVudHM7
Ci0gICAgICByZXR1cm4gYXhpczsKLSAgICB9OwotICAgIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0
aW9uKHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpY2tWYWx1ZXM7
Ci0gICAgICB0aWNrVmFsdWVzID0geDsKLSAgICAgIHJldHVybiBheGlzOwotICAgIH07Ci0gICAg
YXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1bWVudHMubGVu
Z3RoKSByZXR1cm4gdGlja0Zvcm1hdF87Ci0gICAgICB0aWNrRm9ybWF0XyA9IHg7Ci0gICAgICBy
ZXR1cm4gYXhpczsKLSAgICB9OwotICAgIGF4aXMudGlja1NpemUgPSBmdW5jdGlvbih4KSB7Ci0g
ICAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICBpZiAoIW4pIHJldHVybiBpbm5l
clRpY2tTaXplOwotICAgICAgaW5uZXJUaWNrU2l6ZSA9ICt4OwotICAgICAgb3V0ZXJUaWNrU2l6
ZSA9ICthcmd1bWVudHNbbiAtIDFdOwotICAgICAgcmV0dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBh
eGlzLmlubmVyVGlja1NpemUgPSBmdW5jdGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5s
ZW5ndGgpIHJldHVybiBpbm5lclRpY2tTaXplOwotICAgICAgaW5uZXJUaWNrU2l6ZSA9ICt4Owot
ICAgICAgcmV0dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBheGlzLm91dGVyVGlja1NpemUgPSBmdW5j
dGlvbih4KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvdXRlclRpY2tT
aXplOwotICAgICAgb3V0ZXJUaWNrU2l6ZSA9ICt4OwotICAgICAgcmV0dXJuIGF4aXM7Ci0gICAg
fTsKLSAgICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oeCkgewotICAgICAgaWYgKCFhcmd1
bWVudHMubGVuZ3RoKSByZXR1cm4gdGlja1BhZGRpbmc7Ci0gICAgICB0aWNrUGFkZGluZyA9ICt4
OwotICAgICAgcmV0dXJuIGF4aXM7Ci0gICAgfTsKLSAgICBheGlzLnRpY2tTdWJkaXZpZGUgPSBm
dW5jdGlvbigpIHsKLSAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoICYmIGF4aXM7Ci0gICAg
fTsKLSAgICByZXR1cm4gYXhpczsKLSAgfTsKLSAgdmFyIGQzX3N2Z19heGlzRGVmYXVsdE9yaWVu
dCA9ICJib3R0b20iLCBkM19zdmdfYXhpc09yaWVudHMgPSB7Ci0gICAgdG9wOiAxLAotICAgIHJp
Z2h0OiAxLAotICAgIGJvdHRvbTogMSwKLSAgICBsZWZ0OiAxCi0gIH07Ci0gIGZ1bmN0aW9uIGQz
X3N2Z19heGlzWChzZWxlY3Rpb24sIHgpIHsKLSAgICBzZWxlY3Rpb24uYXR0cigidHJhbnNmb3Jt
IiwgZnVuY3Rpb24oZCkgewotICAgICAgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHgoZCkgKyAiLDAp
IjsKLSAgICB9KTsKLSAgfQotICBmdW5jdGlvbiBkM19zdmdfYXhpc1koc2VsZWN0aW9uLCB5KSB7
Ci0gICAgc2VsZWN0aW9uLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsKLSAgICAgIHJl
dHVybiAidHJhbnNsYXRlKDAsIiArIHkoZCkgKyAiKSI7Ci0gICAgfSk7Ci0gIH0KLSAgZDMuc3Zn
LmJydXNoID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGV2ZW50ID0gZDNfZXZlbnREaXNwYXRjaChi
cnVzaCwgImJydXNoc3RhcnQiLCAiYnJ1c2giLCAiYnJ1c2hlbmQiKSwgeCA9IG51bGwsIHkgPSBu
dWxsLCB4RXh0ZW50ID0gWyAwLCAwIF0sIHlFeHRlbnQgPSBbIDAsIDAgXSwgeEV4dGVudERvbWFp
biwgeUV4dGVudERvbWFpbiwgeENsYW1wID0gdHJ1ZSwgeUNsYW1wID0gdHJ1ZSwgcmVzaXplcyA9
IGQzX3N2Z19icnVzaFJlc2l6ZXNbMF07Ci0gICAgZnVuY3Rpb24gYnJ1c2goZykgewotICAgICAg
Zy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZyA9IGQzLnNlbGVjdCh0aGlzKS5zdHls
ZSgicG9pbnRlci1ldmVudHMiLCAiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1j
b2xvciIsICJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsIGJydXNoc3RhcnQp
Lm9uKCJ0b3VjaHN0YXJ0LmJydXNoIiwgYnJ1c2hzdGFydCk7Ci0gICAgICAgIHZhciBiYWNrZ3Jv
dW5kID0gZy5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbIDAgXSk7Ci0gICAgICAgIGJh
Y2tncm91bmQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsICJiYWNrZ3JvdW5k
Iikuc3R5bGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsICJjcm9zc2hh
aXIiKTsKLSAgICAgICAgZy5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFsgMCBdKS5lbnRlcigp
LmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwgImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCAi
bW92ZSIpOwotICAgICAgICB2YXIgcmVzaXplID0gZy5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRh
KHJlc2l6ZXMsIGQzX2lkZW50aXR5KTsKLSAgICAgICAgcmVzaXplLmV4aXQoKS5yZW1vdmUoKTsK
LSAgICAgICAgcmVzaXplLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCBmdW5jdGlv
bihkKSB7Ci0gICAgICAgICAgcmV0dXJuICJyZXNpemUgIiArIGQ7Ci0gICAgICAgIH0pLnN0eWxl
KCJjdXJzb3IiLCBmdW5jdGlvbihkKSB7Ci0gICAgICAgICAgcmV0dXJuIGQzX3N2Z19icnVzaEN1
cnNvcltkXTsKLSAgICAgICAgfSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsIGZ1bmN0aW9uKGQp
IHsKLSAgICAgICAgICByZXR1cm4gL1tld10kLy50ZXN0KGQpID8gLTMgOiBudWxsOwotICAgICAg
ICB9KS5hdHRyKCJ5IiwgZnVuY3Rpb24oZCkgewotICAgICAgICAgIHJldHVybiAvXltuc10vLnRl
c3QoZCkgPyAtMyA6IG51bGw7Ci0gICAgICAgIH0pLmF0dHIoIndpZHRoIiwgNikuYXR0cigiaGVp
Z2h0IiwgNikuc3R5bGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7Ci0gICAgICAgIHJlc2l6ZS5z
dHlsZSgiZGlzcGxheSIsIGJydXNoLmVtcHR5KCkgPyAibm9uZSIgOiBudWxsKTsKLSAgICAgICAg
dmFyIGdVcGRhdGUgPSBkMy50cmFuc2l0aW9uKGcpLCBiYWNrZ3JvdW5kVXBkYXRlID0gZDMudHJh
bnNpdGlvbihiYWNrZ3JvdW5kKSwgcmFuZ2U7Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAg
cmFuZ2UgPSBkM19zY2FsZVJhbmdlKHgpOwotICAgICAgICAgIGJhY2tncm91bmRVcGRhdGUuYXR0
cigieCIsIHJhbmdlWzBdKS5hdHRyKCJ3aWR0aCIsIHJhbmdlWzFdIC0gcmFuZ2VbMF0pOwotICAg
ICAgICAgIHJlZHJhd1goZ1VwZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkpIHsKLSAg
ICAgICAgICByYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeSk7Ci0gICAgICAgICAgYmFja2dyb3VuZFVw
ZGF0ZS5hdHRyKCJ5IiwgcmFuZ2VbMF0pLmF0dHIoImhlaWdodCIsIHJhbmdlWzFdIC0gcmFuZ2Vb
MF0pOwotICAgICAgICAgIHJlZHJhd1koZ1VwZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVk
cmF3KGdVcGRhdGUpOwotICAgICAgfSk7Ci0gICAgfQotICAgIGJydXNoLmV2ZW50ID0gZnVuY3Rp
b24oZykgewotICAgICAgZy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZXZlbnRfID0g
ZXZlbnQub2YodGhpcywgYXJndW1lbnRzKSwgZXh0ZW50MSA9IHsKLSAgICAgICAgICB4OiB4RXh0
ZW50LAotICAgICAgICAgIHk6IHlFeHRlbnQsCi0gICAgICAgICAgaTogeEV4dGVudERvbWFpbiwK
LSAgICAgICAgICBqOiB5RXh0ZW50RG9tYWluCi0gICAgICAgIH0sIGV4dGVudDAgPSB0aGlzLl9f
Y2hhcnRfXyB8fCBleHRlbnQxOwotICAgICAgICB0aGlzLl9fY2hhcnRfXyA9IGV4dGVudDE7Ci0g
ICAgICAgIGlmIChkM190cmFuc2l0aW9uSW5oZXJpdElkKSB7Ci0gICAgICAgICAgZDMuc2VsZWN0
KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgeEV4dGVudERvbWFpbiA9IGV4dGVudDAuaTsKLSAgICAgICAgICAgIHlFeHRlbnRE
b21haW4gPSBleHRlbnQwLmo7Ci0gICAgICAgICAgICB4RXh0ZW50ID0gZXh0ZW50MC54OwotICAg
ICAgICAgICAgeUV4dGVudCA9IGV4dGVudDAueTsKLSAgICAgICAgICAgIGV2ZW50Xyh7Ci0gICAg
ICAgICAgICAgIHR5cGU6ICJicnVzaHN0YXJ0IgotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
fSkudHdlZW4oImJydXNoOmJydXNoIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgeGkg
PSBkM19pbnRlcnBvbGF0ZUFycmF5KHhFeHRlbnQsIGV4dGVudDEueCksIHlpID0gZDNfaW50ZXJw
b2xhdGVBcnJheSh5RXh0ZW50LCBleHRlbnQxLnkpOwotICAgICAgICAgICAgeEV4dGVudERvbWFp
biA9IHlFeHRlbnREb21haW4gPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQp
IHsKLSAgICAgICAgICAgICAgeEV4dGVudCA9IGV4dGVudDEueCA9IHhpKHQpOwotICAgICAgICAg
ICAgICB5RXh0ZW50ID0gZXh0ZW50MS55ID0geWkodCk7Ci0gICAgICAgICAgICAgIGV2ZW50Xyh7
Ci0gICAgICAgICAgICAgICAgdHlwZTogImJydXNoIiwKLSAgICAgICAgICAgICAgICBtb2RlOiAi
cmVzaXplIgotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgfSku
ZWFjaCgiZW5kLmJydXNoIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB4RXh0ZW50RG9tYWlu
ID0gZXh0ZW50MS5pOwotICAgICAgICAgICAgeUV4dGVudERvbWFpbiA9IGV4dGVudDEuajsKLSAg
ICAgICAgICAgIGV2ZW50Xyh7Ci0gICAgICAgICAgICAgIHR5cGU6ICJicnVzaCIsCi0gICAgICAg
ICAgICAgIG1vZGU6ICJyZXNpemUiCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGV2ZW50
Xyh7Ci0gICAgICAgICAgICAgIHR5cGU6ICJicnVzaGVuZCIKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGV2ZW50Xyh7Ci0gICAgICAg
ICAgICB0eXBlOiAiYnJ1c2hzdGFydCIKLSAgICAgICAgICB9KTsKLSAgICAgICAgICBldmVudF8o
ewotICAgICAgICAgICAgdHlwZTogImJydXNoIiwKLSAgICAgICAgICAgIG1vZGU6ICJyZXNpemUi
Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgZXZlbnRfKHsKLSAgICAgICAgICAgIHR5cGU6ICJi
cnVzaGVuZCIKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfTsKLSAg
ICBmdW5jdGlvbiByZWRyYXcoZykgewotICAgICAgZy5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRy
KCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7Ci0gICAgICAgIHJldHVybiAidHJhbnNsYXRlKCIg
KyB4RXh0ZW50WysvZSQvLnRlc3QoZCldICsgIiwiICsgeUV4dGVudFsrL15zLy50ZXN0KGQpXSAr
ICIpIjsKLSAgICAgIH0pOwotICAgIH0KLSAgICBmdW5jdGlvbiByZWRyYXdYKGcpIHsKLSAgICAg
IGcuc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsIHhFeHRlbnRbMF0pOwotICAgICAgZy5zZWxl
Y3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLCB4RXh0ZW50WzFd
IC0geEV4dGVudFswXSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJlZHJhd1koZykgewotICAgICAg
Zy5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IiwgeUV4dGVudFswXSk7Ci0gICAgICBnLnNlbGVj
dEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLCB5RXh0ZW50WzFd
IC0geUV4dGVudFswXSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGJydXNoc3RhcnQoKSB7Ci0gICAg
ICB2YXIgdGFyZ2V0ID0gdGhpcywgZXZlbnRUYXJnZXQgPSBkMy5zZWxlY3QoZDMuZXZlbnQudGFy
Z2V0KSwgZXZlbnRfID0gZXZlbnQub2YodGFyZ2V0LCBhcmd1bWVudHMpLCBnID0gZDMuc2VsZWN0
KHRhcmdldCksIHJlc2l6aW5nID0gZXZlbnRUYXJnZXQuZGF0dW0oKSwgcmVzaXppbmdYID0gIS9e
KG58cykkLy50ZXN0KHJlc2l6aW5nKSAmJiB4LCByZXNpemluZ1kgPSAhL14oZXx3KSQvLnRlc3Qo
cmVzaXppbmcpICYmIHksIGRyYWdnaW5nID0gZXZlbnRUYXJnZXQuY2xhc3NlZCgiZXh0ZW50Iiks
IGRyYWdSZXN0b3JlID0gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKCksIGNlbnRlciwgb3JpZ2luID0g
ZDMubW91c2UodGFyZ2V0KSwgb2Zmc2V0OwotICAgICAgdmFyIHcgPSBkMy5zZWxlY3QoZDNfd2lu
ZG93KS5vbigia2V5ZG93bi5icnVzaCIsIGtleWRvd24pLm9uKCJrZXl1cC5icnVzaCIsIGtleXVw
KTsKLSAgICAgIGlmIChkMy5ldmVudC5jaGFuZ2VkVG91Y2hlcykgewotICAgICAgICB3Lm9uKCJ0
b3VjaG1vdmUuYnJ1c2giLCBicnVzaG1vdmUpLm9uKCJ0b3VjaGVuZC5icnVzaCIsIGJydXNoZW5k
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHcub24oIm1vdXNlbW92ZS5icnVzaCIsIGJydXNo
bW92ZSkub24oIm1vdXNldXAuYnJ1c2giLCBicnVzaGVuZCk7Ci0gICAgICB9Ci0gICAgICBnLmlu
dGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpOwotICAgICAgaWYgKGRyYWdnaW5n
KSB7Ci0gICAgICAgIG9yaWdpblswXSA9IHhFeHRlbnRbMF0gLSBvcmlnaW5bMF07Ci0gICAgICAg
IG9yaWdpblsxXSA9IHlFeHRlbnRbMF0gLSBvcmlnaW5bMV07Ci0gICAgICB9IGVsc2UgaWYgKHJl
c2l6aW5nKSB7Ci0gICAgICAgIHZhciBleCA9ICsvdyQvLnRlc3QocmVzaXppbmcpLCBleSA9ICsv
Xm4vLnRlc3QocmVzaXppbmcpOwotICAgICAgICBvZmZzZXQgPSBbIHhFeHRlbnRbMSAtIGV4XSAt
IG9yaWdpblswXSwgeUV4dGVudFsxIC0gZXldIC0gb3JpZ2luWzFdIF07Ci0gICAgICAgIG9yaWdp
blswXSA9IHhFeHRlbnRbZXhdOwotICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50W2V5XTsKLSAg
ICAgIH0gZWxzZSBpZiAoZDMuZXZlbnQuYWx0S2V5KSBjZW50ZXIgPSBvcmlnaW4uc2xpY2UoKTsK
LSAgICAgIGcuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwgIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNp
emUiKS5zdHlsZSgiZGlzcGxheSIsIG51bGwpOwotICAgICAgZDMuc2VsZWN0KCJib2R5Iikuc3R5
bGUoImN1cnNvciIsIGV2ZW50VGFyZ2V0LnN0eWxlKCJjdXJzb3IiKSk7Ci0gICAgICBldmVudF8o
ewotICAgICAgICB0eXBlOiAiYnJ1c2hzdGFydCIKLSAgICAgIH0pOwotICAgICAgYnJ1c2htb3Zl
KCk7Ci0gICAgICBmdW5jdGlvbiBrZXlkb3duKCkgewotICAgICAgICBpZiAoZDMuZXZlbnQua2V5
Q29kZSA9PSAzMikgewotICAgICAgICAgIGlmICghZHJhZ2dpbmcpIHsKLSAgICAgICAgICAgIGNl
bnRlciA9IG51bGw7Ci0gICAgICAgICAgICBvcmlnaW5bMF0gLT0geEV4dGVudFsxXTsKLSAgICAg
ICAgICAgIG9yaWdpblsxXSAtPSB5RXh0ZW50WzFdOwotICAgICAgICAgICAgZHJhZ2dpbmcgPSAy
OwotICAgICAgICAgIH0KLSAgICAgICAgICBkM19ldmVudFByZXZlbnREZWZhdWx0KCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIGtleXVwKCkgewotICAgICAgICBpZiAoZDMu
ZXZlbnQua2V5Q29kZSA9PSAzMiAmJiBkcmFnZ2luZyA9PSAyKSB7Ci0gICAgICAgICAgb3JpZ2lu
WzBdICs9IHhFeHRlbnRbMV07Ci0gICAgICAgICAgb3JpZ2luWzFdICs9IHlFeHRlbnRbMV07Ci0g
ICAgICAgICAgZHJhZ2dpbmcgPSAwOwotICAgICAgICAgIGQzX2V2ZW50UHJldmVudERlZmF1bHQo
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZnVuY3Rpb24gYnJ1c2htb3ZlKCkgewotICAg
ICAgICB2YXIgcG9pbnQgPSBkMy5tb3VzZSh0YXJnZXQpLCBtb3ZlZCA9IGZhbHNlOwotICAgICAg
ICBpZiAob2Zmc2V0KSB7Ci0gICAgICAgICAgcG9pbnRbMF0gKz0gb2Zmc2V0WzBdOwotICAgICAg
ICAgIHBvaW50WzFdICs9IG9mZnNldFsxXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWRyYWdn
aW5nKSB7Ci0gICAgICAgICAgaWYgKGQzLmV2ZW50LmFsdEtleSkgewotICAgICAgICAgICAgaWYg
KCFjZW50ZXIpIGNlbnRlciA9IFsgKHhFeHRlbnRbMF0gKyB4RXh0ZW50WzFdKSAvIDIsICh5RXh0
ZW50WzBdICsgeUV4dGVudFsxXSkgLyAyIF07Ci0gICAgICAgICAgICBvcmlnaW5bMF0gPSB4RXh0
ZW50WysocG9pbnRbMF0gPCBjZW50ZXJbMF0pXTsKLSAgICAgICAgICAgIG9yaWdpblsxXSA9IHlF
eHRlbnRbKyhwb2ludFsxXSA8IGNlbnRlclsxXSldOwotICAgICAgICAgIH0gZWxzZSBjZW50ZXIg
PSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNpemluZ1ggJiYgbW92ZTEocG9pbnQs
IHgsIDApKSB7Ci0gICAgICAgICAgcmVkcmF3WChnKTsKLSAgICAgICAgICBtb3ZlZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc2l6aW5nWSAmJiBtb3ZlMShwb2ludCwgeSwgMSkp
IHsKLSAgICAgICAgICByZWRyYXdZKGcpOwotICAgICAgICAgIG1vdmVkID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobW92ZWQpIHsKLSAgICAgICAgICByZWRyYXcoZyk7Ci0gICAgICAg
ICAgZXZlbnRfKHsKLSAgICAgICAgICAgIHR5cGU6ICJicnVzaCIsCi0gICAgICAgICAgICBtb2Rl
OiBkcmFnZ2luZyA/ICJtb3ZlIiA6ICJyZXNpemUiCi0gICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGZ1bmN0aW9uIG1vdmUxKHBvaW50LCBzY2FsZSwgaSkgewotICAgICAg
ICB2YXIgcmFuZ2UgPSBkM19zY2FsZVJhbmdlKHNjYWxlKSwgcjAgPSByYW5nZVswXSwgcjEgPSBy
YW5nZVsxXSwgcG9zaXRpb24gPSBvcmlnaW5baV0sIGV4dGVudCA9IGkgPyB5RXh0ZW50IDogeEV4
dGVudCwgc2l6ZSA9IGV4dGVudFsxXSAtIGV4dGVudFswXSwgbWluLCBtYXg7Ci0gICAgICAgIGlm
IChkcmFnZ2luZykgewotICAgICAgICAgIHIwIC09IHBvc2l0aW9uOwotICAgICAgICAgIHIxIC09
IHNpemUgKyBwb3NpdGlvbjsKLSAgICAgICAgfQotICAgICAgICBtaW4gPSAoaSA/IHlDbGFtcCA6
IHhDbGFtcCkgPyBNYXRoLm1heChyMCwgTWF0aC5taW4ocjEsIHBvaW50W2ldKSkgOiBwb2ludFtp
XTsKLSAgICAgICAgaWYgKGRyYWdnaW5nKSB7Ci0gICAgICAgICAgbWF4ID0gKG1pbiArPSBwb3Np
dGlvbikgKyBzaXplOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChjZW50ZXIpIHBv
c2l0aW9uID0gTWF0aC5tYXgocjAsIE1hdGgubWluKHIxLCAyICogY2VudGVyW2ldIC0gbWluKSk7
Ci0gICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluKSB7Ci0gICAgICAgICAgICBtYXggPSBtaW47
Ci0gICAgICAgICAgICBtaW4gPSBwb3NpdGlvbjsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbWF4ID0gcG9zaXRpb247Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChleHRlbnRbMF0gIT0gbWluIHx8IGV4dGVudFsxXSAhPSBtYXgpIHsKLSAgICAgICAgICBpZiAo
aSkgeUV4dGVudERvbWFpbiA9IG51bGw7IGVsc2UgeEV4dGVudERvbWFpbiA9IG51bGw7Ci0gICAg
ICAgICAgZXh0ZW50WzBdID0gbWluOwotICAgICAgICAgIGV4dGVudFsxXSA9IG1heDsKLSAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZnVuY3Rpb24gYnJ1
c2hlbmQoKSB7Ci0gICAgICAgIGJydXNobW92ZSgpOwotICAgICAgICBnLnN0eWxlKCJwb2ludGVy
LWV2ZW50cyIsICJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsIGJy
dXNoLmVtcHR5KCkgPyAibm9uZSIgOiBudWxsKTsKLSAgICAgICAgZDMuc2VsZWN0KCJib2R5Iiku
c3R5bGUoImN1cnNvciIsIG51bGwpOwotICAgICAgICB3Lm9uKCJtb3VzZW1vdmUuYnJ1c2giLCBu
dWxsKS5vbigibW91c2V1cC5icnVzaCIsIG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLCBudWxs
KS5vbigidG91Y2hlbmQuYnJ1c2giLCBudWxsKS5vbigia2V5ZG93bi5icnVzaCIsIG51bGwpLm9u
KCJrZXl1cC5icnVzaCIsIG51bGwpOwotICAgICAgICBkcmFnUmVzdG9yZSgpOwotICAgICAgICBl
dmVudF8oewotICAgICAgICAgIHR5cGU6ICJicnVzaGVuZCIKLSAgICAgICAgfSk7Ci0gICAgICB9
Ci0gICAgfQotICAgIGJydXNoLnggPSBmdW5jdGlvbih6KSB7Ci0gICAgICBpZiAoIWFyZ3VtZW50
cy5sZW5ndGgpIHJldHVybiB4OwotICAgICAgeCA9IHo7Ci0gICAgICByZXNpemVzID0gZDNfc3Zn
X2JydXNoUmVzaXplc1sheCA8PCAxIHwgIXldOwotICAgICAgcmV0dXJuIGJydXNoOwotICAgIH07
Ci0gICAgYnJ1c2gueSA9IGZ1bmN0aW9uKHopIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgcmV0dXJuIHk7Ci0gICAgICB5ID0gejsKLSAgICAgIHJlc2l6ZXMgPSBkM19zdmdfYnJ1c2hS
ZXNpemVzWyF4IDw8IDEgfCAheV07Ci0gICAgICByZXR1cm4gYnJ1c2g7Ci0gICAgfTsKLSAgICBi
cnVzaC5jbGFtcCA9IGZ1bmN0aW9uKHopIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkg
cmV0dXJuIHggJiYgeSA/IFsgeENsYW1wLCB5Q2xhbXAgXSA6IHggPyB4Q2xhbXAgOiB5ID8geUNs
YW1wIDogbnVsbDsKLSAgICAgIGlmICh4ICYmIHkpIHhDbGFtcCA9ICEhelswXSwgeUNsYW1wID0g
ISF6WzFdOyBlbHNlIGlmICh4KSB4Q2xhbXAgPSAhIXo7IGVsc2UgaWYgKHkpIHlDbGFtcCA9ICEh
ejsKLSAgICAgIHJldHVybiBicnVzaDsKLSAgICB9OwotICAgIGJydXNoLmV4dGVudCA9IGZ1bmN0
aW9uKHopIHsKLSAgICAgIHZhciB4MCwgeDEsIHkwLCB5MSwgdDsKLSAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgewotICAgICAgICBpZiAoeCkgewotICAgICAgICAgIGlmICh4RXh0ZW50RG9t
YWluKSB7Ci0gICAgICAgICAgICB4MCA9IHhFeHRlbnREb21haW5bMF0sIHgxID0geEV4dGVudERv
bWFpblsxXTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeDAgPSB4RXh0ZW50WzBd
LCB4MSA9IHhFeHRlbnRbMV07Ci0gICAgICAgICAgICBpZiAoeC5pbnZlcnQpIHgwID0geC5pbnZl
cnQoeDApLCB4MSA9IHguaW52ZXJ0KHgxKTsKLSAgICAgICAgICAgIGlmICh4MSA8IHgwKSB0ID0g
eDAsIHgwID0geDEsIHgxID0gdDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHkpIHsKLSAgICAgICAgICBpZiAoeUV4dGVudERvbWFpbikgewotICAgICAgICAgICAgeTAgPSB5
RXh0ZW50RG9tYWluWzBdLCB5MSA9IHlFeHRlbnREb21haW5bMV07Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHkwID0geUV4dGVudFswXSwgeTEgPSB5RXh0ZW50WzFdOwotICAgICAg
ICAgICAgaWYgKHkuaW52ZXJ0KSB5MCA9IHkuaW52ZXJ0KHkwKSwgeTEgPSB5LmludmVydCh5MSk7
Ci0gICAgICAgICAgICBpZiAoeTEgPCB5MCkgdCA9IHkwLCB5MCA9IHkxLCB5MSA9IHQ7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4ICYmIHkgPyBbIFsgeDAsIHkwIF0s
IFsgeDEsIHkxIF0gXSA6IHggPyBbIHgwLCB4MSBdIDogeSAmJiBbIHkwLCB5MSBdOwotICAgICAg
fQotICAgICAgaWYgKHgpIHsKLSAgICAgICAgeDAgPSB6WzBdLCB4MSA9IHpbMV07Ci0gICAgICAg
IGlmICh5KSB4MCA9IHgwWzBdLCB4MSA9IHgxWzBdOwotICAgICAgICB4RXh0ZW50RG9tYWluID0g
WyB4MCwgeDEgXTsKLSAgICAgICAgaWYgKHguaW52ZXJ0KSB4MCA9IHgoeDApLCB4MSA9IHgoeDEp
OwotICAgICAgICBpZiAoeDEgPCB4MCkgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7Ci0gICAgICAg
IGlmICh4MCAhPSB4RXh0ZW50WzBdIHx8IHgxICE9IHhFeHRlbnRbMV0pIHhFeHRlbnQgPSBbIHgw
LCB4MSBdOwotICAgICAgfQotICAgICAgaWYgKHkpIHsKLSAgICAgICAgeTAgPSB6WzBdLCB5MSA9
IHpbMV07Ci0gICAgICAgIGlmICh4KSB5MCA9IHkwWzFdLCB5MSA9IHkxWzFdOwotICAgICAgICB5
RXh0ZW50RG9tYWluID0gWyB5MCwgeTEgXTsKLSAgICAgICAgaWYgKHkuaW52ZXJ0KSB5MCA9IHko
eTApLCB5MSA9IHkoeTEpOwotICAgICAgICBpZiAoeTEgPCB5MCkgdCA9IHkwLCB5MCA9IHkxLCB5
MSA9IHQ7Ci0gICAgICAgIGlmICh5MCAhPSB5RXh0ZW50WzBdIHx8IHkxICE9IHlFeHRlbnRbMV0p
IHlFeHRlbnQgPSBbIHkwLCB5MSBdOwotICAgICAgfQotICAgICAgcmV0dXJuIGJydXNoOwotICAg
IH07Ci0gICAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICghYnJ1c2guZW1w
dHkoKSkgewotICAgICAgICB4RXh0ZW50ID0gWyAwLCAwIF0sIHlFeHRlbnQgPSBbIDAsIDAgXTsK
LSAgICAgICAgeEV4dGVudERvbWFpbiA9IHlFeHRlbnREb21haW4gPSBudWxsOwotICAgICAgfQot
ICAgICAgcmV0dXJuIGJydXNoOwotICAgIH07Ci0gICAgYnJ1c2guZW1wdHkgPSBmdW5jdGlvbigp
IHsKLSAgICAgIHJldHVybiAhIXggJiYgeEV4dGVudFswXSA9PSB4RXh0ZW50WzFdIHx8ICEheSAm
JiB5RXh0ZW50WzBdID09IHlFeHRlbnRbMV07Ci0gICAgfTsKLSAgICByZXR1cm4gZDMucmViaW5k
KGJydXNoLCBldmVudCwgIm9uIik7Ci0gIH07Ci0gIHZhciBkM19zdmdfYnJ1c2hDdXJzb3IgPSB7
Ci0gICAgbjogIm5zLXJlc2l6ZSIsCi0gICAgZTogImV3LXJlc2l6ZSIsCi0gICAgczogIm5zLXJl
c2l6ZSIsCi0gICAgdzogImV3LXJlc2l6ZSIsCi0gICAgbnc6ICJud3NlLXJlc2l6ZSIsCi0gICAg
bmU6ICJuZXN3LXJlc2l6ZSIsCi0gICAgc2U6ICJud3NlLXJlc2l6ZSIsCi0gICAgc3c6ICJuZXN3
LXJlc2l6ZSIKLSAgfTsKLSAgdmFyIGQzX3N2Z19icnVzaFJlc2l6ZXMgPSBbIFsgIm4iLCAiZSIs
ICJzIiwgInciLCAibnciLCAibmUiLCAic2UiLCAic3ciIF0sIFsgImUiLCAidyIgXSwgWyAibiIs
ICJzIiBdLCBbXSBdOwotICB2YXIgZDNfdGltZV9mb3JtYXQgPSBkM190aW1lLmZvcm1hdCA9IGQz
X2xvY2FsZV9lblVTLnRpbWVGb3JtYXQ7Ci0gIHZhciBkM190aW1lX2Zvcm1hdFV0YyA9IGQzX3Rp
bWVfZm9ybWF0LnV0YzsKLSAgdmFyIGQzX3RpbWVfZm9ybWF0SXNvID0gZDNfdGltZV9mb3JtYXRV
dGMoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpOwotICBkM190aW1lX2Zvcm1hdC5pc28gPSBEYXRl
LnByb3RvdHlwZS50b0lTT1N0cmluZyAmJiArbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAu
MDAwWiIpID8gZDNfdGltZV9mb3JtYXRJc29OYXRpdmUgOiBkM190aW1lX2Zvcm1hdElzbzsKLSAg
ZnVuY3Rpb24gZDNfdGltZV9mb3JtYXRJc29OYXRpdmUoZGF0ZSkgewotICAgIHJldHVybiBkYXRl
LnRvSVNPU3RyaW5nKCk7Ci0gIH0KLSAgZDNfdGltZV9mb3JtYXRJc29OYXRpdmUucGFyc2UgPSBm
dW5jdGlvbihzdHJpbmcpIHsKLSAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZyk7Ci0gICAg
cmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7Ci0gIH07Ci0gIGQzX3RpbWVfZm9ybWF0
SXNvTmF0aXZlLnRvU3RyaW5nID0gZDNfdGltZV9mb3JtYXRJc28udG9TdHJpbmc7Ci0gIGQzX3Rp
bWUuc2Vjb25kID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7Ci0gICAgcmV0dXJu
IG5ldyBkM19kYXRlKE1hdGguZmxvb3IoZGF0ZSAvIDFlMykgKiAxZTMpOwotICB9LCBmdW5jdGlv
bihkYXRlLCBvZmZzZXQpIHsKLSAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRo
LmZsb29yKG9mZnNldCkgKiAxZTMpOwotICB9LCBmdW5jdGlvbihkYXRlKSB7Ci0gICAgcmV0dXJu
IGRhdGUuZ2V0U2Vjb25kcygpOwotICB9KTsKLSAgZDNfdGltZS5zZWNvbmRzID0gZDNfdGltZS5z
ZWNvbmQucmFuZ2U7Ci0gIGQzX3RpbWUuc2Vjb25kcy51dGMgPSBkM190aW1lLnNlY29uZC51dGMu
cmFuZ2U7Ci0gIGQzX3RpbWUubWludXRlID0gZDNfdGltZV9pbnRlcnZhbChmdW5jdGlvbihkYXRl
KSB7Ci0gICAgcmV0dXJuIG5ldyBkM19kYXRlKE1hdGguZmxvb3IoZGF0ZSAvIDZlNCkgKiA2ZTQp
OwotICB9LCBmdW5jdGlvbihkYXRlLCBvZmZzZXQpIHsKLSAgICBkYXRlLnNldFRpbWUoZGF0ZS5n
ZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9mZnNldCkgKiA2ZTQpOwotICB9LCBmdW5jdGlvbihkYXRl
KSB7Ci0gICAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpOwotICB9KTsKLSAgZDNfdGltZS5taW51
dGVzID0gZDNfdGltZS5taW51dGUucmFuZ2U7Ci0gIGQzX3RpbWUubWludXRlcy51dGMgPSBkM190
aW1lLm1pbnV0ZS51dGMucmFuZ2U7Ci0gIGQzX3RpbWUuaG91ciA9IGQzX3RpbWVfaW50ZXJ2YWwo
ZnVuY3Rpb24oZGF0ZSkgewotICAgIHZhciB0aW1lem9uZSA9IGRhdGUuZ2V0VGltZXpvbmVPZmZz
ZXQoKSAvIDYwOwotICAgIHJldHVybiBuZXcgZDNfZGF0ZSgoTWF0aC5mbG9vcihkYXRlIC8gMzZl
NSAtIHRpbWV6b25lKSArIHRpbWV6b25lKSAqIDM2ZTUpOwotICB9LCBmdW5jdGlvbihkYXRlLCBv
ZmZzZXQpIHsKLSAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyBNYXRoLmZsb29yKG9m
ZnNldCkgKiAzNmU1KTsKLSAgfSwgZnVuY3Rpb24oZGF0ZSkgewotICAgIHJldHVybiBkYXRlLmdl
dEhvdXJzKCk7Ci0gIH0pOwotICBkM190aW1lLmhvdXJzID0gZDNfdGltZS5ob3VyLnJhbmdlOwot
ICBkM190aW1lLmhvdXJzLnV0YyA9IGQzX3RpbWUuaG91ci51dGMucmFuZ2U7Ci0gIGQzX3RpbWUu
bW9udGggPSBkM190aW1lX2ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHsKLSAgICBkYXRlID0gZDNf
dGltZS5kYXkoZGF0ZSk7Ci0gICAgZGF0ZS5zZXREYXRlKDEpOwotICAgIHJldHVybiBkYXRlOwot
ICB9LCBmdW5jdGlvbihkYXRlLCBvZmZzZXQpIHsKLSAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0
TW9udGgoKSArIG9mZnNldCk7Ci0gIH0sIGZ1bmN0aW9uKGRhdGUpIHsKLSAgICByZXR1cm4gZGF0
ZS5nZXRNb250aCgpOwotICB9KTsKLSAgZDNfdGltZS5tb250aHMgPSBkM190aW1lLm1vbnRoLnJh
bmdlOwotICBkM190aW1lLm1vbnRocy51dGMgPSBkM190aW1lLm1vbnRoLnV0Yy5yYW5nZTsKLSAg
ZnVuY3Rpb24gZDNfdGltZV9zY2FsZShsaW5lYXIsIG1ldGhvZHMsIGZvcm1hdCkgewotICAgIGZ1
bmN0aW9uIHNjYWxlKHgpIHsKLSAgICAgIHJldHVybiBsaW5lYXIoeCk7Ci0gICAgfQotICAgIHNj
YWxlLmludmVydCA9IGZ1bmN0aW9uKHgpIHsKLSAgICAgIHJldHVybiBkM190aW1lX3NjYWxlRGF0
ZShsaW5lYXIuaW52ZXJ0KHgpKTsKLSAgICB9OwotICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9u
KHgpIHsKLSAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxpbmVhci5kb21haW4o
KS5tYXAoZDNfdGltZV9zY2FsZURhdGUpOwotICAgICAgbGluZWFyLmRvbWFpbih4KTsKLSAgICAg
IHJldHVybiBzY2FsZTsKLSAgICB9OwotICAgIGZ1bmN0aW9uIHRpY2tNZXRob2QoZXh0ZW50LCBj
b3VudCkgewotICAgICAgdmFyIHNwYW4gPSBleHRlbnRbMV0gLSBleHRlbnRbMF0sIHRhcmdldCA9
IHNwYW4gLyBjb3VudCwgaSA9IGQzLmJpc2VjdChkM190aW1lX3NjYWxlU3RlcHMsIHRhcmdldCk7
Ci0gICAgICByZXR1cm4gaSA9PSBkM190aW1lX3NjYWxlU3RlcHMubGVuZ3RoID8gWyBtZXRob2Rz
LnllYXIsIGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShleHRlbnQubWFwKGZ1bmN0aW9uKGQpIHsK
LSAgICAgICAgcmV0dXJuIGQgLyAzMTUzNmU2OwotICAgICAgfSksIGNvdW50KVsyXSBdIDogIWkg
PyBbIGQzX3RpbWVfc2NhbGVNaWxsaXNlY29uZHMsIGQzX3NjYWxlX2xpbmVhclRpY2tSYW5nZShl
eHRlbnQsIGNvdW50KVsyXSBdIDogbWV0aG9kc1t0YXJnZXQgLyBkM190aW1lX3NjYWxlU3RlcHNb
aSAtIDFdIDwgZDNfdGltZV9zY2FsZVN0ZXBzW2ldIC8gdGFyZ2V0ID8gaSAtIDEgOiBpXTsKLSAg
ICB9Ci0gICAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBza2lwKSB7Ci0gICAgICB2
YXIgZG9tYWluID0gc2NhbGUuZG9tYWluKCksIGV4dGVudCA9IGQzX3NjYWxlRXh0ZW50KGRvbWFp
biksIG1ldGhvZCA9IGludGVydmFsID09IG51bGwgPyB0aWNrTWV0aG9kKGV4dGVudCwgMTApIDog
dHlwZW9mIGludGVydmFsID09PSAibnVtYmVyIiAmJiB0aWNrTWV0aG9kKGV4dGVudCwgaW50ZXJ2
YWwpOwotICAgICAgaWYgKG1ldGhvZCkgaW50ZXJ2YWwgPSBtZXRob2RbMF0sIHNraXAgPSBtZXRo
b2RbMV07Ci0gICAgICBmdW5jdGlvbiBza2lwcGVkKGRhdGUpIHsKLSAgICAgICAgcmV0dXJuICFp
c05hTihkYXRlKSAmJiAhaW50ZXJ2YWwucmFuZ2UoZGF0ZSwgZDNfdGltZV9zY2FsZURhdGUoK2Rh
dGUgKyAxKSwgc2tpcCkubGVuZ3RoOwotICAgICAgfQotICAgICAgcmV0dXJuIHNjYWxlLmRvbWFp
bihkM19zY2FsZV9uaWNlKGRvbWFpbiwgc2tpcCA+IDEgPyB7Ci0gICAgICAgIGZsb29yOiBmdW5j
dGlvbihkYXRlKSB7Ci0gICAgICAgICAgd2hpbGUgKHNraXBwZWQoZGF0ZSA9IGludGVydmFsLmZs
b29yKGRhdGUpKSkgZGF0ZSA9IGQzX3RpbWVfc2NhbGVEYXRlKGRhdGUgLSAxKTsKLSAgICAgICAg
ICByZXR1cm4gZGF0ZTsKLSAgICAgICAgfSwKLSAgICAgICAgY2VpbDogZnVuY3Rpb24oZGF0ZSkg
ewotICAgICAgICAgIHdoaWxlIChza2lwcGVkKGRhdGUgPSBpbnRlcnZhbC5jZWlsKGRhdGUpKSkg
ZGF0ZSA9IGQzX3RpbWVfc2NhbGVEYXRlKCtkYXRlICsgMSk7Ci0gICAgICAgICAgcmV0dXJuIGRh
dGU7Ci0gICAgICAgIH0KLSAgICAgIH0gOiBpbnRlcnZhbCkpOwotICAgIH07Ci0gICAgc2NhbGUu
dGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCwgc2tpcCkgewotICAgICAgdmFyIGV4dGVudCA9IGQz
X3NjYWxlRXh0ZW50KHNjYWxlLmRvbWFpbigpKSwgbWV0aG9kID0gaW50ZXJ2YWwgPT0gbnVsbCA/
IHRpY2tNZXRob2QoZXh0ZW50LCAxMCkgOiB0eXBlb2YgaW50ZXJ2YWwgPT09ICJudW1iZXIiID8g
dGlja01ldGhvZChleHRlbnQsIGludGVydmFsKSA6ICFpbnRlcnZhbC5yYW5nZSAmJiBbIHsKLSAg
ICAgICAgcmFuZ2U6IGludGVydmFsCi0gICAgICB9LCBza2lwIF07Ci0gICAgICBpZiAobWV0aG9k
KSBpbnRlcnZhbCA9IG1ldGhvZFswXSwgc2tpcCA9IG1ldGhvZFsxXTsKLSAgICAgIHJldHVybiBp
bnRlcnZhbC5yYW5nZShleHRlbnRbMF0sIGQzX3RpbWVfc2NhbGVEYXRlKCtleHRlbnRbMV0gKyAx
KSwgc2tpcCA8IDEgPyAxIDogc2tpcCk7Ci0gICAgfTsKLSAgICBzY2FsZS50aWNrRm9ybWF0ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gZm9ybWF0OwotICAgIH07Ci0gICAgc2NhbGUuY29w
eSA9IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIGQzX3RpbWVfc2NhbGUobGluZWFyLmNvcHko
KSwgbWV0aG9kcywgZm9ybWF0KTsKLSAgICB9OwotICAgIHJldHVybiBkM19zY2FsZV9saW5lYXJS
ZWJpbmQoc2NhbGUsIGxpbmVhcik7Ci0gIH0KLSAgZnVuY3Rpb24gZDNfdGltZV9zY2FsZURhdGUo
dCkgewotICAgIHJldHVybiBuZXcgRGF0ZSh0KTsKLSAgfQotICB2YXIgZDNfdGltZV9zY2FsZVN0
ZXBzID0gWyAxZTMsIDVlMywgMTVlMywgM2U0LCA2ZTQsIDNlNSwgOWU1LCAxOGU1LCAzNmU1LCAx
MDhlNSwgMjE2ZTUsIDQzMmU1LCA4NjRlNSwgMTcyOGU1LCA2MDQ4ZTUsIDI1OTJlNiwgNzc3NmU2
LCAzMTUzNmU2IF07Ci0gIHZhciBkM190aW1lX3NjYWxlTG9jYWxNZXRob2RzID0gWyBbIGQzX3Rp
bWUuc2Vjb25kLCAxIF0sIFsgZDNfdGltZS5zZWNvbmQsIDUgXSwgWyBkM190aW1lLnNlY29uZCwg
MTUgXSwgWyBkM190aW1lLnNlY29uZCwgMzAgXSwgWyBkM190aW1lLm1pbnV0ZSwgMSBdLCBbIGQz
X3RpbWUubWludXRlLCA1IF0sIFsgZDNfdGltZS5taW51dGUsIDE1IF0sIFsgZDNfdGltZS5taW51
dGUsIDMwIF0sIFsgZDNfdGltZS5ob3VyLCAxIF0sIFsgZDNfdGltZS5ob3VyLCAzIF0sIFsgZDNf
dGltZS5ob3VyLCA2IF0sIFsgZDNfdGltZS5ob3VyLCAxMiBdLCBbIGQzX3RpbWUuZGF5LCAxIF0s
IFsgZDNfdGltZS5kYXksIDIgXSwgWyBkM190aW1lLndlZWssIDEgXSwgWyBkM190aW1lLm1vbnRo
LCAxIF0sIFsgZDNfdGltZS5tb250aCwgMyBdLCBbIGQzX3RpbWUueWVhciwgMSBdIF07Ci0gIHZh
ciBkM190aW1lX3NjYWxlTG9jYWxGb3JtYXQgPSBkM190aW1lX2Zvcm1hdC5tdWx0aShbIFsgIi4l
TCIsIGZ1bmN0aW9uKGQpIHsKLSAgICByZXR1cm4gZC5nZXRNaWxsaXNlY29uZHMoKTsKLSAgfSBd
LCBbICI6JVMiLCBmdW5jdGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0U2Vjb25kcygpOwotICB9
IF0sIFsgIiVJOiVNIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldE1pbnV0ZXMoKTsK
LSAgfSBdLCBbICIlSSAlcCIsIGZ1bmN0aW9uKGQpIHsKLSAgICByZXR1cm4gZC5nZXRIb3Vycygp
OwotICB9IF0sIFsgIiVhICVkIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldERheSgp
ICYmIGQuZ2V0RGF0ZSgpICE9IDE7Ci0gIH0gXSwgWyAiJWIgJWQiLCBmdW5jdGlvbihkKSB7Ci0g
ICAgcmV0dXJuIGQuZ2V0RGF0ZSgpICE9IDE7Ci0gIH0gXSwgWyAiJUIiLCBmdW5jdGlvbihkKSB7
Ci0gICAgcmV0dXJuIGQuZ2V0TW9udGgoKTsKLSAgfSBdLCBbICIlWSIsIGQzX3RydWUgXSBdKTsK
LSAgdmFyIGQzX3RpbWVfc2NhbGVNaWxsaXNlY29uZHMgPSB7Ci0gICAgcmFuZ2U6IGZ1bmN0aW9u
KHN0YXJ0LCBzdG9wLCBzdGVwKSB7Ci0gICAgICByZXR1cm4gZDMucmFuZ2UoTWF0aC5jZWlsKHN0
YXJ0IC8gc3RlcCkgKiBzdGVwLCArc3RvcCwgc3RlcCkubWFwKGQzX3RpbWVfc2NhbGVEYXRlKTsK
LSAgICB9LAotICAgIGZsb29yOiBkM19pZGVudGl0eSwKLSAgICBjZWlsOiBkM19pZGVudGl0eQot
ICB9OwotICBkM190aW1lX3NjYWxlTG9jYWxNZXRob2RzLnllYXIgPSBkM190aW1lLnllYXI7Ci0g
IGQzX3RpbWUuc2NhbGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfdGltZV9zY2FsZShk
My5zY2FsZS5saW5lYXIoKSwgZDNfdGltZV9zY2FsZUxvY2FsTWV0aG9kcywgZDNfdGltZV9zY2Fs
ZUxvY2FsRm9ybWF0KTsKLSAgfTsKLSAgdmFyIGQzX3RpbWVfc2NhbGVVdGNNZXRob2RzID0gZDNf
dGltZV9zY2FsZUxvY2FsTWV0aG9kcy5tYXAoZnVuY3Rpb24obSkgewotICAgIHJldHVybiBbIG1b
MF0udXRjLCBtWzFdIF07Ci0gIH0pOwotICB2YXIgZDNfdGltZV9zY2FsZVV0Y0Zvcm1hdCA9IGQz
X3RpbWVfZm9ybWF0VXRjLm11bHRpKFsgWyAiLiVMIiwgZnVuY3Rpb24oZCkgewotICAgIHJldHVy
biBkLmdldFVUQ01pbGxpc2Vjb25kcygpOwotICB9IF0sIFsgIjolUyIsIGZ1bmN0aW9uKGQpIHsK
LSAgICByZXR1cm4gZC5nZXRVVENTZWNvbmRzKCk7Ci0gIH0gXSwgWyAiJUk6JU0iLCBmdW5jdGlv
bihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0VVRDTWludXRlcygpOwotICB9IF0sIFsgIiVJICVwIiwg
ZnVuY3Rpb24oZCkgewotICAgIHJldHVybiBkLmdldFVUQ0hvdXJzKCk7Ci0gIH0gXSwgWyAiJWEg
JWQiLCBmdW5jdGlvbihkKSB7Ci0gICAgcmV0dXJuIGQuZ2V0VVRDRGF5KCkgJiYgZC5nZXRVVENE
YXRlKCkgIT0gMTsKLSAgfSBdLCBbICIlYiAlZCIsIGZ1bmN0aW9uKGQpIHsKLSAgICByZXR1cm4g
ZC5nZXRVVENEYXRlKCkgIT0gMTsKLSAgfSBdLCBbICIlQiIsIGZ1bmN0aW9uKGQpIHsKLSAgICBy
ZXR1cm4gZC5nZXRVVENNb250aCgpOwotICB9IF0sIFsgIiVZIiwgZDNfdHJ1ZSBdIF0pOwotICBk
M190aW1lX3NjYWxlVXRjTWV0aG9kcy55ZWFyID0gZDNfdGltZS55ZWFyLnV0YzsKLSAgZDNfdGlt
ZS5zY2FsZS51dGMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZDNfdGltZV9zY2FsZShkMy5z
Y2FsZS5saW5lYXIoKSwgZDNfdGltZV9zY2FsZVV0Y01ldGhvZHMsIGQzX3RpbWVfc2NhbGVVdGNG
b3JtYXQpOwotICB9OwotICBkMy50ZXh0ID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KSB7
Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVzcG9uc2VUZXh0OwotICB9KTsKLSAgZDMuanNvbiA9IGZ1
bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKLSAgICByZXR1cm4gZDNfeGhyKHVybCwgImFwcGxpY2F0
aW9uL2pzb24iLCBkM19qc29uLCBjYWxsYmFjayk7Ci0gIH07Ci0gIGZ1bmN0aW9uIGQzX2pzb24o
cmVxdWVzdCkgewotICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTsK
LSAgfQotICBkMy5odG1sID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgewotICAgIHJldHVybiBk
M194aHIodXJsLCAidGV4dC9odG1sIiwgZDNfaHRtbCwgY2FsbGJhY2spOwotICB9OwotICBmdW5j
dGlvbiBkM19odG1sKHJlcXVlc3QpIHsKLSAgICB2YXIgcmFuZ2UgPSBkM19kb2N1bWVudC5jcmVh
dGVSYW5nZSgpOwotICAgIHJhbmdlLnNlbGVjdE5vZGUoZDNfZG9jdW1lbnQuYm9keSk7Ci0gICAg
cmV0dXJuIHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChyZXF1ZXN0LnJlc3BvbnNlVGV4
dCk7Ci0gIH0KLSAgZDMueG1sID0gZDNfeGhyVHlwZShmdW5jdGlvbihyZXF1ZXN0KSB7Ci0gICAg
cmV0dXJuIHJlcXVlc3QucmVzcG9uc2VYTUw7Ci0gIH0pOwotICBpZiAodHlwZW9mIGRlZmluZSA9
PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZDMpOyBlbHNlIGlmICh0eXBlb2Yg
bW9kdWxlID09PSAib2JqZWN0IiAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBk
MzsKLSAgdGhpcy5kMyA9IGQzOwotfSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvZDMvZDMubWlu
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9kMy5taW4uanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhN2FlOTAzNDIzMGU3MzZiYjYzNmMyYjgx
YTI1N2I3NmZhNzI5ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9kMy9kMy5taW4uanMK
KysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSFmdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0
KXtyZXR1cm4gdD5uPy0xOm4+dD8xOm4+PXQ/MDowLzB9ZnVuY3Rpb24gdChuKXtyZXR1cm4gbnVs
bCE9biYmIWlzTmFOKG4pfWZ1bmN0aW9uIGUobil7cmV0dXJue2xlZnQ6ZnVuY3Rpb24odCxlLHIs
dSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10
Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtuKHRbaV0sZSk8MD9yPWkrMTp1PWl9cmV0dXJu
IHJ9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxyLHUpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTAp
LGFyZ3VtZW50cy5sZW5ndGg8NCYmKHU9dC5sZW5ndGgpO3U+cjspe3ZhciBpPXIrdT4+PjE7bih0
W2ldLGUpPjA/dT1pOnI9aSsxfXJldHVybiByfX19ZnVuY3Rpb24gcihuKXtyZXR1cm4gbi5sZW5n
dGh9ZnVuY3Rpb24gdShuKXtmb3IodmFyIHQ9MTtuKnQlMTspdCo9MTA7cmV0dXJuIHR9ZnVuY3Rp
b24gaShuLHQpe3RyeXtmb3IodmFyIGUgaW4gdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90
b3R5cGUsZSx7dmFsdWU6dFtlXSxlbnVtZXJhYmxlOiExfSl9Y2F0Y2gocil7bi5wcm90b3R5cGU9
dH19ZnVuY3Rpb24gbygpe31mdW5jdGlvbiBhKG4pe3JldHVybiBpYStuIGluIHRoaXN9ZnVuY3Rp
b24gYyhuKXtyZXR1cm4gbj1pYStuLG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19ZnVuY3Rpb24g
cygpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7bi5wdXNoKHQpfSks
bn1mdW5jdGlvbiBsKCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9
PT1vYSYmKytuO3JldHVybiBufWZ1bmN0aW9uIGYoKXtmb3IodmFyIG4gaW4gdGhpcylpZihuLmNo
YXJDb2RlQXQoMCk9PT1vYSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoKCl7fWZ1bmN0aW9u
IGcobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodCxhcmd1bWVudHMpO3Jl
dHVybiByPT09dD9uOnJ9fWZ1bmN0aW9uIHAobix0KXtpZih0IGluIG4pcmV0dXJuIHQ7dD10LmNo
YXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyaW5nKDEpO2Zvcih2YXIgZT0wLHI9YWEubGVu
Z3RoO3I+ZTsrK2Upe3ZhciB1PWFhW2VdK3Q7aWYodSBpbiBuKXJldHVybiB1fX1mdW5jdGlvbiB2
KCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gbShuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9
ZSx1PS0xLGk9ci5sZW5ndGg7Kyt1PGk7KSh0PXJbdV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1l
bnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBvO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsdSl7
dmFyIGksbz1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihv
Lm9uPW51bGwsZT1lLnNsaWNlKDAsaT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGkrMSkp
LHIucmVtb3ZlKHQpKSx1JiZlLnB1c2goci5zZXQodCx7b246dX0pKSxuKX0sdH1mdW5jdGlvbiB5
KCl7Wm8uZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiB4KCl7Zm9yKHZhciBuLHQ9Wm8u
ZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gTShuKXtmb3IodmFy
IHQ9bmV3IGQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPW0o
dCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dHJ5e3ZhciBp
PXUuc291cmNlRXZlbnQ9Wm8uZXZlbnQ7dS50YXJnZXQ9bixaby5ldmVudD11LHRbdS50eXBlXS5h
cHBseShlLHIpfWZpbmFsbHl7Wm8uZXZlbnQ9aX19fSx0fWZ1bmN0aW9uIF8obil7cmV0dXJuIHNh
KG4scGEpLG59ZnVuY3Rpb24gYihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0
aW9uKCl7cmV0dXJuIGxhKG4sdGhpcyl9fWZ1bmN0aW9uIHcobil7cmV0dXJuImZ1bmN0aW9uIj09
dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiBmYShuLHRoaXMpfX1mdW5jdGlvbiBTKG4sdCl7
ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJl
bW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0
cmlidXRlKG4sdCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxv
Y2FsLHQpfWZ1bmN0aW9uIG8oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1l
P3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24g
YSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRy
aWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxv
Y2FsLGUpfXJldHVybiBuPVpvLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVu
Y3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP2E6bzpuLmxvY2FsP2k6dX1mdW5jdGlvbiBrKG4pe3Jl
dHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIEUobil7cmV0dXJuIG5l
dyBSZWdFeHAoIig/Ol58XFxzKykiK1pvLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVu
Y3Rpb24gQShuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEMo
bix0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPS0xOysrZTx1OyluW2VdKHRoaXMsdCl9ZnVuY3Rp
b24gcigpe2Zvcih2YXIgZT0tMSxyPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrZTx1OyluW2Vd
KHRoaXMscil9bj1BKG4pLm1hcChOKTt2YXIgdT1uLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10
eXBlb2YgdD9yOmV9ZnVuY3Rpb24gTihuKXt2YXIgdD1FKG4pO3JldHVybiBmdW5jdGlvbihlLHIp
e2lmKHU9ZS5jbGFzc0xpc3QpcmV0dXJuIHI/dS5hZGQobik6dS5yZW1vdmUobik7dmFyIHU9ZS5n
ZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO3I/KHQubGFzdEluZGV4PTAsdC50ZXN0KHUpfHxlLnNl
dEF0dHJpYnV0ZSgiY2xhc3MiLGsodSsiICIrbikpKTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGso
dS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiB6KG4sdCxlKXtmdW5jdGlvbiByKCl7dGhpcy5z
dHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiB1KCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0
eShuLHQsZSl9ZnVuY3Rpb24gaSgpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9
PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4s
cixlKX1yZXR1cm4gbnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2k6dX1mdW5jdGlvbiBM
KG4sdCl7ZnVuY3Rpb24gZSgpe2RlbGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHIoKXt0aGlzW25dPXR9
ZnVuY3Rpb24gdSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRl
IHRoaXNbbl06dGhpc1tuXT1lfXJldHVybiBudWxsPT10P2U6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/
dTpyfWZ1bmN0aW9uIFQobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjoobj1aby5ucy5x
dWFsaWZ5KG4pKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3Jl
YXRlRWxlbWVudE5TKG4uc3BhY2Usbi5sb2NhbCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3du
ZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksbil9fWZ1bmN0aW9u
IHEobil7cmV0dXJue19fZGF0YV9fOm59fWZ1bmN0aW9uIFIobil7cmV0dXJuIGZ1bmN0aW9uKCl7
cmV0dXJuIGdhKHRoaXMsbil9fWZ1bmN0aW9uIEQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGh8
fCh0PW4pLGZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4mJmU/dChuLl9fZGF0YV9fLGUuX19kYXRhX18p
OiFuLSFlfX1mdW5jdGlvbiBQKG4sdCl7Zm9yKHZhciBlPTAscj1uLmxlbmd0aDtyPmU7ZSsrKWZv
cih2YXIgdSxpPW5bZV0sbz0wLGE9aS5sZW5ndGg7YT5vO28rKykodT1pW29dKSYmdCh1LG8sZSk7
cmV0dXJuIG59ZnVuY3Rpb24gVShuKXtyZXR1cm4gc2EobixkYSksbn1mdW5jdGlvbiBqKG4pe3Zh
ciB0LGU7cmV0dXJuIGZ1bmN0aW9uKHIsdSxpKXt2YXIgbyxhPW5baV0udXBkYXRlLGM9YS5sZW5n
dGg7Zm9yKGkhPWUmJihlPWksdD0wKSx1Pj10JiYodD11KzEpOyEobz1hW3RdKSYmKyt0PGM7KTty
ZXR1cm4gb319ZnVuY3Rpb24gSCgpe3ZhciBuPXRoaXMuX190cmFuc2l0aW9uX187biYmKytuLmFj
dGl2ZX1mdW5jdGlvbiBGKG4sdCxlKXtmdW5jdGlvbiByKCl7dmFyIHQ9dGhpc1tvXTt0JiYodGhp
cy5yZW1vdmVFdmVudExpc3RlbmVyKG4sdCx0LiQpLGRlbGV0ZSB0aGlzW29dKX1mdW5jdGlvbiB1
KCl7dmFyIHU9Yyh0LFhvKGFyZ3VtZW50cykpO3IuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlz
dGVuZXIobix0aGlzW29dPXUsdS4kPWUpLHUuXz10fWZ1bmN0aW9uIGkoKXt2YXIgdCxlPW5ldyBS
ZWdFeHAoIl5fX29uKFteLl0rKSIrWm8ucmVxdW90ZShuKSsiJCIpO2Zvcih2YXIgciBpbiB0aGlz
KWlmKHQ9ci5tYXRjaChlKSl7dmFyIHU9dGhpc1tyXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIo
dFsxXSx1LHUuJCksZGVsZXRlIHRoaXNbcl19fXZhciBvPSJfX29uIituLGE9bi5pbmRleE9mKCIu
IiksYz1PO2E+MCYmKG49bi5zdWJzdHJpbmcoMCxhKSk7dmFyIHM9eWEuZ2V0KG4pO3JldHVybiBz
JiYobj1zLGM9WSksYT90P3U6cjp0P3Y6aX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIGZ1bmN0aW9u
KGUpe3ZhciByPVpvLmV2ZW50O1pvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFw
cGx5KHRoaXMsdCl9ZmluYWxseXtaby5ldmVudD1yfX19ZnVuY3Rpb24gWShuLHQpe3ZhciBlPU8o
bix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRlZFRhcmdldDtyJiYo
cj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl8fGUuY2FsbCh0LG4pfX1mdW5j
dGlvbiBJKCl7dmFyIG49Ii5kcmFnc3VwcHJlc3MtIisgKytNYSx0PSJjbGljayIrbixlPVpvLnNl
bGVjdChXbykub24oInRvdWNobW92ZSIrbix5KS5vbigiZHJhZ3N0YXJ0IituLHkpLm9uKCJzZWxl
Y3RzdGFydCIrbix5KTtpZih4YSl7dmFyIHI9Qm8uc3R5bGUsdT1yW3hhXTtyW3hhXT0ibm9uZSJ9
cmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5vbihuLG51bGwp
LHhhJiYoclt4YV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe3koKSxvKCl9LCEwKSxzZXRUaW1l
b3V0KG8sMCkpfX1mdW5jdGlvbiBaKG4sdCl7dC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2Vk
VG91Y2hlc1swXSk7dmFyIGU9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2lu
dCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO2lmKDA+X2EmJihXby5zY3JvbGxYfHxXby5zY3Jv
bGxZKSl7ZT1aby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoi
YWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0s
ImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7X2E9ISh1LmZ8fHUuZSks
ZS5yZW1vdmUoKX1yZXR1cm4gX2E/KHIueD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xp
ZW50WCxyLnk9dC5jbGllbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCku
aW52ZXJzZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1
cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLW4uY2xpZW50
VG9wXX1mdW5jdGlvbiBWKCl7cmV0dXJuIFpvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50
aWZpZXJ9ZnVuY3Rpb24gWCgpe3JldHVybiBaby5ldmVudC50YXJnZXR9ZnVuY3Rpb24gJCgpe3Jl
dHVybiBXb31mdW5jdGlvbiBCKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBXKG4s
dCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBd
KX1mdW5jdGlvbiBKKG4pe3JldHVybiBuPjE/MDotMT5uP2JhOk1hdGguYWNvcyhuKX1mdW5jdGlv
biBHKG4pe3JldHVybiBuPjE/U2E6LTE+bj8tU2E6TWF0aC5hc2luKG4pfWZ1bmN0aW9uIEsobil7
cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gUShuKXtyZXR1cm4oKG49TWF0
aC5leHAobikpKzEvbikvMn1mdW5jdGlvbiBudChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSkt
MSkvKG4rMSl9ZnVuY3Rpb24gdHQobil7cmV0dXJuKG49TWF0aC5zaW4obi8yKSkqbn1mdW5jdGlv
biBldCgpe31mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBydD8odGhp
cy5oPStuLHRoaXMucz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGlu
c3RhbmNlb2YgcnQ/bmV3IHJ0KG4uaCxuLnMsbi5sKTptdCgiIituLHl0LHJ0KTpuZXcgcnQobix0
LGUpfWZ1bmN0aW9uIHV0KG4sdCxlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6
MD5uJiYobis9MzYwKSw2MD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0
MC1uKS82MDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZhciBp
LG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1pc05hTih0KT8wOjA+
dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/ZSooMSt0KTplK3QtZSp0LGk9Mipl
LW8sbmV3IGd0KHUobisxMjApLHUobiksdShuLTEyMCkpfWZ1bmN0aW9uIGl0KG4sdCxlKXtyZXR1
cm4gdGhpcyBpbnN0YW5jZW9mIGl0Pyh0aGlzLmg9K24sdGhpcy5jPSt0LHZvaWQodGhpcy5sPStl
KSk6YXJndW1lbnRzLmxlbmd0aDwyP24gaW5zdGFuY2VvZiBpdD9uZXcgaXQobi5oLG4uYyxuLmwp
Om4gaW5zdGFuY2VvZiBhdD9zdChuLmwsbi5hLG4uYik6c3QoKG49eHQoKG49Wm8ucmdiKG4pKS5y
LG4uZyxuLmIpKS5sLG4uYSxuLmIpOm5ldyBpdChuLHQsZSl9ZnVuY3Rpb24gb3Qobix0LGUpe3Jl
dHVybiBpc05hTihuKSYmKG49MCksaXNOYU4odCkmJih0PTApLG5ldyBhdChlLE1hdGguY29zKG4q
PUFhKSp0LE1hdGguc2luKG4pKnQpfWZ1bmN0aW9uIGF0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0
YW5jZW9mIGF0Pyh0aGlzLmw9K24sdGhpcy5hPSt0LHZvaWQodGhpcy5iPStlKSk6YXJndW1lbnRz
Lmxlbmd0aDwyP24gaW5zdGFuY2VvZiBhdD9uZXcgYXQobi5sLG4uYSxuLmIpOm4gaW5zdGFuY2Vv
ZiBpdD9vdChuLmwsbi5jLG4uaCk6eHQoKG49Z3QobikpLnIsbi5nLG4uYik6bmV3IGF0KG4sdCxl
KX1mdW5jdGlvbiBjdChuLHQsZSl7dmFyIHI9KG4rMTYpLzExNix1PXIrdC81MDAsaT1yLWUvMjAw
O3JldHVybiB1PWx0KHUpKmphLHI9bHQocikqSGEsaT1sdChpKSpGYSxuZXcgZ3QoaHQoMy4yNDA0
NTQyKnUtMS41MzcxMzg1KnItLjQ5ODUzMTQqaSksaHQoLS45NjkyNjYqdSsxLjg3NjAxMDgqcisu
MDQxNTU2KmkpLGh0KC4wNTU2NDM0KnUtLjIwNDAyNTkqcisxLjA1NzIyNTIqaSkpfWZ1bmN0aW9u
IHN0KG4sdCxlKXtyZXR1cm4gbj4wP25ldyBpdChNYXRoLmF0YW4yKGUsdCkqQ2EsTWF0aC5zcXJ0
KHQqdCtlKmUpLG4pOm5ldyBpdCgwLzAsMC8wLG4pfWZ1bmN0aW9uIGx0KG4pe3JldHVybiBuPi4y
MDY4OTMwMzQ/bipuKm46KG4tNC8yOSkvNy43ODcwMzd9ZnVuY3Rpb24gZnQobil7cmV0dXJuIG4+
LjAwODg1Nj9NYXRoLnBvdyhuLDEvMyk6Ny43ODcwMzcqbis0LzI5fWZ1bmN0aW9uIGh0KG4pe3Jl
dHVybiBNYXRoLnJvdW5kKDI1NSooLjAwMzA0Pj1uPzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwx
LzIuNCktLjA1NSkpfWZ1bmN0aW9uIGd0KG4sdCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGd0
Pyh0aGlzLnI9fn5uLHRoaXMuZz1+fnQsdm9pZCh0aGlzLmI9fn5lKSk6YXJndW1lbnRzLmxlbmd0
aDwyP24gaW5zdGFuY2VvZiBndD9uZXcgZ3Qobi5yLG4uZyxuLmIpOm10KCIiK24sZ3QsdXQpOm5l
dyBndChuLHQsZSl9ZnVuY3Rpb24gcHQobil7cmV0dXJuIG5ldyBndChuPj4xNiwyNTUmbj4+OCwy
NTUmbil9ZnVuY3Rpb24gdnQobil7cmV0dXJuIHB0KG4pKyIifWZ1bmN0aW9uIGR0KG4pe3JldHVy
biAxNj5uPyIwIitNYXRoLm1heCgwLG4pLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUsbikudG9T
dHJpbmcoMTYpfWZ1bmN0aW9uIG10KG4sdCxlKXt2YXIgcix1LGksbz0wLGE9MCxjPTA7aWYocj0v
KFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNoKHU9clsyXS5zcGxpdCgiLCIpLHJbMV0p
e2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJzZUZsb2F0KHVbMF0pLHBhcnNlRmxvYXQodVsxXSkvMTAw
LHBhcnNlRmxvYXQodVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoX3QodVswXSksX3QodVsx
XSksX3QodVsyXSkpfXJldHVybihpPUlhLmdldChuKSk/dChpLnIsaS5nLGkuYik6KG51bGw9PW58
fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc3Vic3RyaW5nKDEpLDE2KSl8
fCg0PT09bi5sZW5ndGg/KG89KDM4NDAmaSk+PjQsbz1vPj40fG8sYT0yNDAmaSxhPWE+PjR8YSxj
PTE1JmksYz1jPDw0fGMpOjc9PT1uLmxlbmd0aCYmKG89KDE2NzExNjgwJmkpPj4xNixhPSg2NTI4
MCZpKT4+OCxjPTI1NSZpKSksdChvLGEsYykpfWZ1bmN0aW9uIHl0KG4sdCxlKXt2YXIgcix1LGk9
TWF0aC5taW4obi89MjU1LHQvPTI1NSxlLz0yNTUpLG89TWF0aC5tYXgobix0LGUpLGE9by1pLGM9
KG8raSkvMjtyZXR1cm4gYT8odT0uNT5jP2EvKG8raSk6YS8oMi1vLWkpLHI9bj09bz8odC1lKS9h
KyhlPnQ/NjowKTp0PT1vPyhlLW4pL2ErMjoobi10KS9hKzQscio9NjApOihyPTAvMCx1PWM+MCYm
MT5jPzA6ciksbmV3IHJ0KHIsdSxjKX1mdW5jdGlvbiB4dChuLHQsZSl7bj1NdChuKSx0PU10KHQp
LGU9TXQoZSk7dmFyIHI9ZnQoKC40MTI0NTY0Km4rLjM1NzU3NjEqdCsuMTgwNDM3NSplKS9qYSks
dT1mdCgoLjIxMjY3MjkqbisuNzE1MTUyMip0Ky4wNzIxNzUqZSkvSGEpLGk9ZnQoKC4wMTkzMzM5
Km4rLjExOTE5Mip0Ky45NTAzMDQxKmUpL0ZhKTtyZXR1cm4gYXQoMTE2KnUtMTYsNTAwKihyLXUp
LDIwMCoodS1pKSl9ZnVuY3Rpb24gTXQobil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjky
Ok1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gX3Qobil7dmFyIHQ9cGFyc2VG
bG9hdChuKTtyZXR1cm4iJSI9PT1uLmNoYXJBdChuLmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUq
dCk6dH1mdW5jdGlvbiBidChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9u
KCl7cmV0dXJuIG59fWZ1bmN0aW9uIHd0KG4pe3JldHVybiBufWZ1bmN0aW9uIFN0KG4pe3JldHVy
biBmdW5jdGlvbih0LGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24i
PT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLGt0KHQsZSxuLHIpfX1mdW5jdGlvbiBrdChuLHQsZSxy
KXtmdW5jdGlvbiB1KCl7dmFyIG4sdD1jLnN0YXR1cztpZighdCYmYy5yZXNwb25zZVRleHR8fHQ+
PTIwMCYmMzAwPnR8fDMwND09PXQpe3RyeXtuPWUuY2FsbChpLGMpfWNhdGNoKHIpe3JldHVybiBv
LmVycm9yLmNhbGwoaSxyKSx2b2lkIDB9by5sb2FkLmNhbGwoaSxuKX1lbHNlIG8uZXJyb3IuY2Fs
bChpLGMpfXZhciBpPXt9LG89Wm8uZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxv
YWQiLCJlcnJvciIpLGE9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsO3JldHVybiFXby5Y
RG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBjfHwhL14oaHR0cChzKT86KT9cL1wv
Ly50ZXN0KG4pfHwoYz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYz9jLm9ubG9hZD1j
Lm9uZXJyb3I9dTpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4z
JiZ1KCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbihuKXt2YXIgdD1aby5ldmVudDtaby5ldmVudD1u
O3RyeXtvLnByb2dyZXNzLmNhbGwoaSxjKX1maW5hbGx5e1pvLmV2ZW50PXR9fSxpLmhlYWRlcj1m
dW5jdGlvbihuLHQpe3JldHVybiBuPShuKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5n
dGg8Mj9hW25dOihudWxsPT10P2RlbGV0ZSBhW25dOmFbbl09dCsiIixpKX0saS5taW1lVHlwZT1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1uP251bGw6bisiIixp
KTp0fSxpLnJlc3BvbnNlVHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
cz1uLGkpOnN9LGkucmVzcG9uc2U9ZnVuY3Rpb24obil7cmV0dXJuIGU9bixpfSxbImdldCIsInBv
c3QiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lbbl09ZnVuY3Rpb24oKXtyZXR1cm4gaS5zZW5kLmFw
cGx5KGksW25dLmNvbmNhdChYbyhhcmd1bWVudHMpKSl9fSksaS5zZW5kPWZ1bmN0aW9uKGUscix1
KXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJih1PXIscj1u
dWxsKSxjLm9wZW4oZSxuLCEwKSxudWxsPT10fHwiYWNjZXB0ImluIGF8fChhLmFjY2VwdD10KyIs
Ki8qIiksYy5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgbCBpbiBhKWMuc2V0UmVxdWVzdEhlYWRl
cihsLGFbbF0pO3JldHVybiBudWxsIT10JiZjLm92ZXJyaWRlTWltZVR5cGUmJmMub3ZlcnJpZGVN
aW1lVHlwZSh0KSxudWxsIT1zJiYoYy5yZXNwb25zZVR5cGU9cyksbnVsbCE9dSYmaS5vbigiZXJy
b3IiLHUpLm9uKCJsb2FkIixmdW5jdGlvbihuKXt1KG51bGwsbil9KSxvLmJlZm9yZXNlbmQuY2Fs
bChpLGMpLGMuc2VuZChudWxsPT1yP251bGw6ciksaX0saS5hYm9ydD1mdW5jdGlvbigpe3JldHVy
biBjLmFib3J0KCksaX0sWm8ucmViaW5kKGksbywib24iKSxudWxsPT1yP2k6aS5nZXQoRXQocikp
fWZ1bmN0aW9uIEV0KG4pe3JldHVybiAxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxlKXtuKG51bGw9
PXQ/ZTpudWxsKX06bn1mdW5jdGlvbiBBdCgpe3ZhciBuPUN0KCksdD1OdCgpLW47dD4yND8oaXNG
aW5pdGUodCkmJihjbGVhclRpbWVvdXQoJGEpLCRhPXNldFRpbWVvdXQoQXQsdCkpLFhhPTApOihY
YT0xLFdhKEF0KSl9ZnVuY3Rpb24gQ3QoKXt2YXIgbj1EYXRlLm5vdygpO2ZvcihCYT1aYTtCYTsp
bj49QmEudCYmKEJhLmY9QmEuYyhuLUJhLnQpKSxCYT1CYS5uO3JldHVybiBufWZ1bmN0aW9uIE50
KCl7Zm9yKHZhciBuLHQ9WmEsZT0xLzA7dDspdC5mP3Q9bj9uLm49dC5uOlphPXQubjoodC50PGUm
JihlPXQudCksdD0obj10KS5uKTtyZXR1cm4gVmE9bixlfWZ1bmN0aW9uIHp0KG4sdCl7cmV0dXJu
IHQtKG4/TWF0aC5jZWlsKE1hdGgubG9nKG4pL01hdGguTE4xMCk6MSl9ZnVuY3Rpb24gTHQobix0
KXt2YXIgZT1NYXRoLnBvdygxMCwzKnVhKDgtdCkpO3JldHVybntzY2FsZTp0Pjg/ZnVuY3Rpb24o
bil7cmV0dXJuIG4vZX06ZnVuY3Rpb24obil7cmV0dXJuIG4qZX0sc3ltYm9sOm59fWZ1bmN0aW9u
IFR0KG4pe3ZhciB0PW4uZGVjaW1hbCxlPW4udGhvdXNhbmRzLHI9bi5ncm91cGluZyx1PW4uY3Vy
cmVuY3ksaT1yP2Z1bmN0aW9uKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCx1PVtdLGk9MCxvPXJbMF07
dD4wJiZvPjA7KXUucHVzaChuLnN1YnN0cmluZyh0LT1vLHQrbykpLG89cltpPShpKzEpJXIubGVu
Z3RoXTtyZXR1cm4gdS5yZXZlcnNlKCkuam9pbihlKX06d3Q7cmV0dXJuIGZ1bmN0aW9uKG4pe3Zh
ciBlPUdhLmV4ZWMobikscj1lWzFdfHwiICIsbz1lWzJdfHwiPiIsYT1lWzNdfHwiIixjPWVbNF18
fCIiLHM9ZVs1XSxsPStlWzZdLGY9ZVs3XSxoPWVbOF0sZz1lWzldLHA9MSx2PSIiLGQ9IiIsbT0h
MTtzd2l0Y2goaCYmKGg9K2guc3Vic3RyaW5nKDEpKSwoc3x8IjAiPT09ciYmIj0iPT09bykmJihz
PXI9IjAiLG89Ij0iLGYmJihsLT1NYXRoLmZsb29yKChsLTEpLzQpKSksZyl7Y2FzZSJuIjpmPSEw
LGc9ImciO2JyZWFrO2Nhc2UiJSI6cD0xMDAsZD0iJSIsZz0iZiI7YnJlYWs7Y2FzZSJwIjpwPTEw
MCxkPSIlIixnPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09
PWMmJih2PSIwIitnLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6Y2FzZSJkIjptPSEwLGg9MDticmVh
aztjYXNlInMiOnA9LTEsZz0iciJ9IiQiPT09YyYmKHY9dVswXSxkPXVbMV0pLCJyIiE9Z3x8aHx8
KGc9ImciKSxudWxsIT1oJiYoImciPT1nP2g9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxoKSk6KCJl
Ij09Z3x8ImYiPT1nKSYmKGg9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkpKSxnPUthLmdldChn
KXx8cXQ7dmFyIHk9cyYmZjtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9ZDtpZihtJiZuJTEpcmV0
dXJuIiI7dmFyIHU9MD5ufHwwPT09biYmMD4xL24/KG49LW4sIi0iKTphO2lmKDA+cCl7dmFyIGM9
Wm8uZm9ybWF0UHJlZml4KG4saCk7bj1jLnNjYWxlKG4pLGU9Yy5zeW1ib2wrZH1lbHNlIG4qPXA7
bj1nKG4saCk7dmFyIHg9bi5sYXN0SW5kZXhPZigiLiIpLE09MD54P246bi5zdWJzdHJpbmcoMCx4
KSxfPTA+eD8iIjp0K24uc3Vic3RyaW5nKHgrMSk7IXMmJmYmJihNPWkoTSkpO3ZhciBiPXYubGVu
Z3RoK00ubGVuZ3RoK18ubGVuZ3RoKyh5PzA6dS5sZW5ndGgpLHc9bD5iP25ldyBBcnJheShiPWwt
YisxKS5qb2luKHIpOiIiO3JldHVybiB5JiYoTT1pKHcrTSkpLHUrPXYsbj1NK18sKCI8Ij09PW8/
dStuK3c6Ij4iPT09bz93K3UrbjoiXiI9PT1vP3cuc3Vic3RyaW5nKDAsYj4+PTEpK3Urbit3LnN1
YnN0cmluZyhiKTp1Kyh5P246dytuKSkrZX19fWZ1bmN0aW9uIHF0KG4pe3JldHVybiBuKyIifWZ1
bmN0aW9uIFJ0KCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5h
cHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1mdW5jdGlvbiBEdChuLHQsZSl7ZnVu
Y3Rpb24gcih0KXt2YXIgZT1uKHQpLHI9aShlLDEpO3JldHVybiByLXQ+dC1lP2U6cn1mdW5jdGlv
biB1KGUpe3JldHVybiB0KGU9bihuZXcgbmMoZS0xKSksMSksZX1mdW5jdGlvbiBpKG4sZSl7cmV0
dXJuIHQobj1uZXcgbmMoK24pLGUpLG59ZnVuY3Rpb24gbyhuLHIsaSl7dmFyIG89dShuKSxhPVtd
O2lmKGk+MSlmb3IoO3I+bzspZShvKSVpfHxhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7ZWxz
ZSBmb3IoO3I+bzspYS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO3JldHVybiBhfWZ1bmN0aW9u
IGEobix0LGUpe3RyeXtuYz1SdDt2YXIgcj1uZXcgUnQ7cmV0dXJuIHIuXz1uLG8ocix0LGUpfWZp
bmFsbHl7bmM9RGF0ZX19bi5mbG9vcj1uLG4ucm91bmQ9cixuLmNlaWw9dSxuLm9mZnNldD1pLG4u
cmFuZ2U9bzt2YXIgYz1uLnV0Yz1QdChuKTtyZXR1cm4gYy5mbG9vcj1jLGMucm91bmQ9UHQociks
Yy5jZWlsPVB0KHUpLGMub2Zmc2V0PVB0KGkpLGMucmFuZ2U9YSxufWZ1bmN0aW9uIFB0KG4pe3Jl
dHVybiBmdW5jdGlvbih0LGUpe3RyeXtuYz1SdDt2YXIgcj1uZXcgUnQ7cmV0dXJuIHIuXz10LG4o
cixlKS5ffWZpbmFsbHl7bmM9RGF0ZX19fWZ1bmN0aW9uIFV0KG4pe2Z1bmN0aW9uIHQobil7ZnVu
Y3Rpb24gdCh0KXtmb3IodmFyIGUsdSxpLG89W10sYT0tMSxjPTA7KythPHI7KTM3PT09bi5jaGFy
Q29kZUF0KGEpJiYoby5wdXNoKG4uc3Vic3RyaW5nKGMsYSkpLG51bGwhPSh1PWVjW2U9bi5jaGFy
QXQoKythKV0pJiYoZT1uLmNoYXJBdCgrK2EpKSwoaT1DW2VdKSYmKGU9aSh0LG51bGw9PXU/ImUi
PT09ZT8iICI6IjAiOnUpKSxvLnB1c2goZSksYz1hKzEpO3JldHVybiBvLnB1c2gobi5zdWJzdHJp
bmcoYyxhKSksby5qb2luKCIiKX12YXIgcj1uLmxlbmd0aDtyZXR1cm4gdC5wYXJzZT1mdW5jdGlv
bih0KXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH0sdT1lKHIs
bix0LDApO2lmKHUhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEy
KnIucCk7dmFyIGk9bnVsbCE9ci5aJiZuYyE9PVJ0LG89bmV3KGk/UnQ6bmMpO3JldHVybiJqImlu
IHI/by5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJ3ImluIHImJigiVyJpbiByfHwiVSJpbiByKT8o
by5zZXRGdWxsWWVhcihyLnksMCwxKSxvLnNldEZ1bGxZZWFyKHIueSwwLCJXImluIHI/KHIudys2
KSU3Kzcqci5XLShvLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShvLmdldERheSgpKzYpJTcpKTpv
LnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxvLnNldEhvdXJzKHIuSCtNYXRoLmZsb29yKHIuWi8x
MDApLHIuTStyLlolMTAwLHIuUyxyLkwpLGk/by5fOm99LHQudG9TdHJpbmc9ZnVuY3Rpb24oKXty
ZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zvcih2YXIgdSxpLG8sYT0wLGM9dC5sZW5n
dGgscz1lLmxlbmd0aDtjPmE7KXtpZihyPj1zKXJldHVybi0xO2lmKHU9dC5jaGFyQ29kZUF0KGEr
KyksMzc9PT11KXtpZihvPXQuY2hhckF0KGErKyksaT1OW28gaW4gZWM/dC5jaGFyQXQoYSsrKTpv
XSwhaXx8KHI9aShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZih1IT1lLmNoYXJDb2RlQXQocisr
KSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtiLmxhc3RJbmRleD0wO3ZhciBy
PWIuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJuIHI/KG4udz13LmdldChyWzBdLnRvTG93ZXJD
YXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUobix0LGUpe00ubGFzdEluZGV4PTA7
dmFyIHI9TS5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi53PV8uZ2V0KHJbMF0udG9M
b3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaShuLHQsZSl7RS5sYXN0SW5k
ZXg9MDt2YXIgcj1FLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLm09QS5nZXQoclsw
XS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxlKXtTLmxh
c3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJuIHI/KG4ubT1rLmdl
dChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEobix0LHIp
e3JldHVybiBlKG4sQy5jLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKG4sdCxyKXtyZXR1cm4g
ZShuLEMueC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gcyhuLHQscil7cmV0dXJuIGUobixDLlgu
dG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIGwobix0LGUpe3ZhciByPXguZ2V0KHQuc3Vic3RyaW5n
KGUsZSs9MikudG9Mb3dlckNhc2UoKSk7cmV0dXJuIG51bGw9PXI/LTE6KG4ucD1yLGUpfXZhciBm
PW4uZGF0ZVRpbWUsaD1uLmRhdGUsZz1uLnRpbWUscD1uLnBlcmlvZHMsdj1uLmRheXMsZD1uLnNo
b3J0RGF5cyxtPW4ubW9udGhzLHk9bi5zaG9ydE1vbnRoczt0LnV0Yz1mdW5jdGlvbihuKXtmdW5j
dGlvbiBlKG4pe3RyeXtuYz1SdDt2YXIgdD1uZXcgbmM7cmV0dXJuIHQuXz1uLHIodCl9ZmluYWxs
eXtuYz1EYXRlfX12YXIgcj10KG4pO3JldHVybiBlLnBhcnNlPWZ1bmN0aW9uKG4pe3RyeXtuYz1S
dDt2YXIgdD1yLnBhcnNlKG4pO3JldHVybiB0JiZ0Ll99ZmluYWxseXtuYz1EYXRlfX0sZS50b1N0
cmluZz1yLnRvU3RyaW5nLGV9LHQubXVsdGk9dC51dGMubXVsdGk9cmU7dmFyIHg9Wm8ubWFwKCks
TT1IdCh2KSxfPUZ0KHYpLGI9SHQoZCksdz1GdChkKSxTPUh0KG0pLGs9RnQobSksRT1IdCh5KSxB
PUZ0KHkpO3AuZm9yRWFjaChmdW5jdGlvbihuLHQpe3guc2V0KG4udG9Mb3dlckNhc2UoKSx0KX0p
O3ZhciBDPXthOmZ1bmN0aW9uKG4pe3JldHVybiBkW24uZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKG4p
e3JldHVybiB2W24uZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKG4pe3JldHVybiB5W24uZ2V0TW9udGgo
KV19LEI6ZnVuY3Rpb24obil7cmV0dXJuIG1bbi5nZXRNb250aCgpXX0sYzp0KGYpLGQ6ZnVuY3Rp
b24obix0KXtyZXR1cm4ganQobi5nZXREYXRlKCksdCwyKX0sZTpmdW5jdGlvbihuLHQpe3JldHVy
biBqdChuLmdldERhdGUoKSx0LDIpfSxIOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0SG91
cnMoKSx0LDIpfSxJOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0SG91cnMoKSUxMnx8MTIs
dCwyKX0sajpmdW5jdGlvbihuLHQpe3JldHVybiBqdCgxK1FhLmRheU9mWWVhcihuKSx0LDMpfSxM
OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGp0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX0sbTpmdW5j
dGlvbihuLHQpe3JldHVybiBqdChuLmdldE1vbnRoKCkrMSx0LDIpfSxNOmZ1bmN0aW9uKG4sdCl7
cmV0dXJuIGp0KG4uZ2V0TWludXRlcygpLHQsMil9LHA6ZnVuY3Rpb24obil7cmV0dXJuIHBbKyhu
LmdldEhvdXJzKCk+PTEyKV19LFM6ZnVuY3Rpb24obix0KXtyZXR1cm4ganQobi5nZXRTZWNvbmRz
KCksdCwyKX0sVTpmdW5jdGlvbihuLHQpe3JldHVybiBqdChRYS5zdW5kYXlPZlllYXIobiksdCwy
KX0sdzpmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXkoKX0sVzpmdW5jdGlvbihuLHQpe3JldHVy
biBqdChRYS5tb25kYXlPZlllYXIobiksdCwyKX0seDp0KGgpLFg6dChnKSx5OmZ1bmN0aW9uKG4s
dCl7cmV0dXJuIGp0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX0sWTpmdW5jdGlvbihuLHQpe3Jl
dHVybiBqdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9LFo6dGUsIiUiOmZ1bmN0aW9uKCl7cmV0
dXJuIiUifX0sTj17YTpyLEE6dSxiOmksQjpvLGM6YSxkOld0LGU6V3QsSDpHdCxJOkd0LGo6SnQs
TDpuZSxtOkJ0LE06S3QscDpsLFM6UXQsVTpZdCx3Ok90LFc6SXQseDpjLFg6cyx5OlZ0LFk6WnQs
WjpYdCwiJSI6ZWV9O3JldHVybiB0fWZ1bmN0aW9uIGp0KG4sdCxlKXt2YXIgcj0wPm4/Ii0iOiIi
LHU9KHI/LW46bikrIiIsaT11Lmxlbmd0aDtyZXR1cm4gcisoZT5pP25ldyBBcnJheShlLWkrMSku
am9pbih0KSt1OnUpfWZ1bmN0aW9uIEh0KG4pe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IituLm1h
cChaby5yZXF1b3RlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gRnQobil7Zm9yKHZhciB0
PW5ldyBvLGU9LTEscj1uLmxlbmd0aDsrK2U8cjspdC5zZXQobltlXS50b0xvd2VyQ2FzZSgpLGUp
O3JldHVybiB0fWZ1bmN0aW9uIE90KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVj
KHQuc3Vic3RyaW5nKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0ubGVuZ3RoKTot
MX1mdW5jdGlvbiBZdChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0
cmluZyhlKSk7cmV0dXJuIHI/KG4uVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJ
dChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0
dXJuIHI/KG4uVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadChuLHQsZSl7cmMu
bGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrNCkpO3JldHVybiByPyhu
Lnk9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVnQobix0LGUpe3JjLmxhc3RJbmRl
eD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi55PSR0KCty
WzBdKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdChuLHQsZSl7cmV0dXJuL15bKy1dXGR7
NH0kLy50ZXN0KHQ9dC5zdWJzdHJpbmcoZSxlKzUpKT8obi5aPS10LGUrNSk6LTF9ZnVuY3Rpb24g
JHQobil7cmV0dXJuIG4rKG4+Njg/MTkwMDoyZTMpfWZ1bmN0aW9uIEJ0KG4sdCxlKXtyYy5sYXN0
SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1y
WzBdLTEsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV3Qobix0LGUpe3JjLmxhc3RJbmRleD0w
O3ZhciByPXJjLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5kPStyWzBdLGUr
clswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEp0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1y
Yy5leGVjKHQuc3Vic3RyaW5nKGUsZSszKSk7cmV0dXJuIHI/KG4uaj0rclswXSxlK3JbMF0ubGVu
Z3RoKTotMX1mdW5jdGlvbiBHdChuLHQsZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0
LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9
ZnVuY3Rpb24gS3Qobix0LGUpe3JjLmxhc3RJbmRleD0wO3ZhciByPXJjLmV4ZWModC5zdWJzdHJp
bmcoZSxlKzIpKTtyZXR1cm4gcj8obi5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9u
IFF0KG4sdCxlKXtyYy5sYXN0SW5kZXg9MDt2YXIgcj1yYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsy
KSk7cmV0dXJuIHI/KG4uUz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuZShuLHQs
ZSl7cmMubGFzdEluZGV4PTA7dmFyIHI9cmMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMykpO3JldHVy
biByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGUobil7dmFyIHQ9bi5n
ZXRUaW1lem9uZU9mZnNldCgpLGU9dD4wPyItIjoiKyIscj1+fih1YSh0KS82MCksdT11YSh0KSU2
MDtyZXR1cm4gZStqdChyLCIwIiwyKStqdCh1LCIwIiwyKX1mdW5jdGlvbiBlZShuLHQsZSl7dWMu
bGFzdEluZGV4PTA7dmFyIHI9dWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMSkpO3JldHVybiByP2Ur
clswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gcmUobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9LTE7Kytl
PHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAs
cj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4gclswXSh0KX19ZnVuY3Rpb24gdWUoKXt9
ZnVuY3Rpb24gaWUobix0LGUpe3ZhciByPWUucz1uK3QsdT1yLW4saT1yLXU7ZS50PW4taSsodC11
KX1mdW5jdGlvbiBvZShuLHQpe24mJmNjLmhhc093blByb3BlcnR5KG4udHlwZSkmJmNjW24udHlw
ZV0obix0KX1mdW5jdGlvbiBhZShuLHQsZSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoLWU7Zm9yKHQu
bGluZVN0YXJ0KCk7Kyt1PGk7KXI9blt1XSx0LnBvaW50KHJbMF0sclsxXSxyWzJdKTt0LmxpbmVF
bmQoKX1mdW5jdGlvbiBjZShuLHQpe3ZhciBlPS0xLHI9bi5sZW5ndGg7Zm9yKHQucG9seWdvblN0
YXJ0KCk7KytlPHI7KWFlKG5bZV0sdCwxKTt0LnBvbHlnb25FbmQoKX1mdW5jdGlvbiBzZSgpe2Z1
bmN0aW9uIG4obix0KXtuKj1BYSx0PXQqQWEvMitiYS80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxh
PW8qZSxjPU1hdGguY29zKHQpLHM9TWF0aC5zaW4odCksbD1pKnMsZj11KmMrbCpNYXRoLmNvcyhh
KSxoPWwqbypNYXRoLnNpbihhKTtsYy5hZGQoTWF0aC5hdGFuMihoLGYpKSxyPW4sdT1jLGk9c312
YXIgdCxlLHIsdSxpO2ZjLnBvaW50PWZ1bmN0aW9uKG8sYSl7ZmMucG9pbnQ9bixyPSh0PW8pKkFh
LHU9TWF0aC5jb3MoYT0oZT1hKSpBYS8yK2JhLzQpLGk9TWF0aC5zaW4oYSl9LGZjLmxpbmVFbmQ9
ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIGxlKG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0
aC5jb3MoZSk7cmV0dXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19
ZnVuY3Rpb24gZmUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRbMl19ZnVu
Y3Rpb24gaGUobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxuWzJdKnRbMF0tblswXSp0
WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9uIGdlKG4sdCl7blswXSs9dFswXSxuWzFd
Kz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rpb24gcGUobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxu
WzJdKnRdfWZ1bmN0aW9uIHZlKG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFd
K25bMl0qblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gZGUobil7cmV0dXJu
W01hdGguYXRhbjIoblsxXSxuWzBdKSxHKG5bMl0pXX1mdW5jdGlvbiBtZShuLHQpe3JldHVybiB1
YShuWzBdLXRbMF0pPGthJiZ1YShuWzFdLXRbMV0pPGthfWZ1bmN0aW9uIHllKG4sdCl7bio9QWE7
dmFyIGU9TWF0aC5jb3ModCo9QWEpO3hlKGUqTWF0aC5jb3MobiksZSpNYXRoLnNpbihuKSxNYXRo
LnNpbih0KSl9ZnVuY3Rpb24geGUobix0LGUpeysraGMscGMrPShuLXBjKS9oYyx2Yys9KHQtdmMp
L2hjLGRjKz0oZS1kYykvaGN9ZnVuY3Rpb24gTWUoKXtmdW5jdGlvbiBuKG4sdSl7bio9QWE7dmFy
IGk9TWF0aC5jb3ModSo9QWEpLG89aSpNYXRoLmNvcyhuKSxhPWkqTWF0aC5zaW4obiksYz1NYXRo
LnNpbih1KSxzPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChzPWUqYy1yKmEpKnMrKHM9cipvLXQqYykq
cysocz10KmEtZSpvKSpzKSx0Km8rZSphK3IqYyk7Z2MrPXMsbWMrPXMqKHQrKHQ9bykpLHljKz1z
KihlKyhlPWEpKSx4Yys9cyoocisocj1jKSkseGUodCxlLHIpfXZhciB0LGUscjt3Yy5wb2ludD1m
dW5jdGlvbih1LGkpe3UqPUFhO3ZhciBvPU1hdGguY29zKGkqPUFhKTt0PW8qTWF0aC5jb3ModSks
ZT1vKk1hdGguc2luKHUpLHI9TWF0aC5zaW4oaSksd2MucG9pbnQ9bix4ZSh0LGUscil9fWZ1bmN0
aW9uIF9lKCl7d2MucG9pbnQ9eWV9ZnVuY3Rpb24gYmUoKXtmdW5jdGlvbiBuKG4sdCl7bio9QWE7
dmFyIGU9TWF0aC5jb3ModCo9QWEpLG89ZSpNYXRoLmNvcyhuKSxhPWUqTWF0aC5zaW4obiksYz1N
YXRoLnNpbih0KSxzPXUqYy1pKmEsbD1pKm8tcipjLGY9ciphLXUqbyxoPU1hdGguc3FydChzKnMr
bCpsK2YqZiksZz1yKm8rdSphK2kqYyxwPWgmJi1KKGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7TWMr
PXAqcyxfYys9cCpsLGJjKz1wKmYsZ2MrPXYsbWMrPXYqKHIrKHI9bykpLHljKz12Kih1Kyh1PWEp
KSx4Yys9diooaSsoaT1jKSkseGUocix1LGkpfXZhciB0LGUscix1LGk7d2MucG9pbnQ9ZnVuY3Rp
b24obyxhKXt0PW8sZT1hLHdjLnBvaW50PW4sbyo9QWE7dmFyIGM9TWF0aC5jb3MoYSo9QWEpO3I9
YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4obyksaT1NYXRoLnNpbihhKSx4ZShyLHUsaSl9LHdj
LmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSksd2MubGluZUVuZD1fZSx3Yy5wb2ludD15ZX19ZnVu
Y3Rpb24gd2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBTZShuLHQsZSxyLHUpe3ZhciBpPVtdLG89W107
aWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTApKXt2YXIgdCxl
PW5bMF0scj1uW3RdO2lmKG1lKGUscikpe3UubGluZVN0YXJ0KCk7Zm9yKHZhciBhPTA7dD5hOysr
YSl1LnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3JldHVybiB1LmxpbmVFbmQoKSx2b2lkIDB9dmFy
IGM9bmV3IEVlKGUsbixudWxsLCEwKSxzPW5ldyBFZShlLG51bGwsYywhMSk7Yy5vPXMsaS5wdXNo
KGMpLG8ucHVzaChzKSxjPW5ldyBFZShyLG4sbnVsbCwhMSkscz1uZXcgRWUocixudWxsLGMsITAp
LGMubz1zLGkucHVzaChjKSxvLnB1c2gocyl9fSksby5zb3J0KHQpLGtlKGkpLGtlKG8pLGkubGVu
Z3RoKXtmb3IodmFyIGE9MCxjPWUscz1vLmxlbmd0aDtzPmE7KythKW9bYV0uZT1jPSFjO2Zvcih2
YXIgbCxmLGg9aVswXTs7KXtmb3IodmFyIGc9aCxwPSEwO2cudjspaWYoKGc9Zy5uKT09PWgpcmV0
dXJuO2w9Zy56LHUubGluZVN0YXJ0KCk7ZG97aWYoZy52PWcuby52PSEwLGcuZSl7aWYocClmb3Io
dmFyIGE9MCxzPWwubGVuZ3RoO3M+YTsrK2EpdS5wb2ludCgoZj1sW2FdKVswXSxmWzFdKTtlbHNl
IHIoZy54LGcubi54LDEsdSk7Zz1nLm59ZWxzZXtpZihwKXtsPWcucC56O2Zvcih2YXIgYT1sLmxl
bmd0aC0xO2E+PTA7LS1hKXUucG9pbnQoKGY9bFthXSlbMF0sZlsxXSl9ZWxzZSByKGcueCxnLnAu
eCwtMSx1KTtnPWcucH1nPWcubyxsPWcueixwPSFwfXdoaWxlKCFnLnYpO3UubGluZUVuZCgpfX19
ZnVuY3Rpb24ga2Uobil7aWYodD1uLmxlbmd0aCl7Zm9yKHZhciB0LGUscj0wLHU9blswXTsrK3I8
dDspdS5uPWU9bltyXSxlLnA9dSx1PWU7dS5uPWU9blswXSxlLnA9dX19ZnVuY3Rpb24gRWUobix0
LGUscil7dGhpcy54PW4sdGhpcy56PXQsdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMu
bj10aGlzLnA9bnVsbH1mdW5jdGlvbiBBZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSxpKXtm
dW5jdGlvbiBvKHQsZSl7dmFyIHI9dSh0LGUpO24odD1yWzBdLGU9clsxXSkmJmkucG9pbnQodCxl
KX1mdW5jdGlvbiBhKG4sdCl7dmFyIGU9dShuLHQpO2QucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlv
biBjKCl7eS5wb2ludD1hLGQubGluZVN0YXJ0KCl9ZnVuY3Rpb24gcygpe3kucG9pbnQ9byxkLmxp
bmVFbmQoKX1mdW5jdGlvbiBsKG4sdCl7di5wdXNoKFtuLHRdKTt2YXIgZT11KG4sdCk7TS5wb2lu
dChlWzBdLGVbMV0pfWZ1bmN0aW9uIGYoKXtNLmxpbmVTdGFydCgpLHY9W119ZnVuY3Rpb24gaCgp
e2wodlswXVswXSx2WzBdWzFdKSxNLmxpbmVFbmQoKTt2YXIgbix0PU0uY2xlYW4oKSxlPXguYnVm
ZmVyKCkscj1lLmxlbmd0aDtpZih2LnBvcCgpLHAucHVzaCh2KSx2PW51bGwscilpZigxJnQpe249
ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEsbz0tMTtpZihyPjApe2ZvcihffHwoaS5wb2x5Z29uU3Rh
cnQoKSxfPSEwKSxpLmxpbmVTdGFydCgpOysrbzxyOylpLnBvaW50KCh1PW5bb10pWzBdLHVbMV0p
O2kubGluZUVuZCgpfX1lbHNlIHI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlm
dCgpKSksZy5wdXNoKGUuZmlsdGVyKENlKSl9dmFyIGcscCx2LGQ9dChpKSxtPXUuaW52ZXJ0KHJb
MF0sclsxXSkseT17cG9pbnQ6byxsaW5lU3RhcnQ6YyxsaW5lRW5kOnMscG9seWdvblN0YXJ0OmZ1
bmN0aW9uKCl7eS5wb2ludD1sLHkubGluZVN0YXJ0PWYseS5saW5lRW5kPWgsZz1bXSxwPVtdfSxw
b2x5Z29uRW5kOmZ1bmN0aW9uKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPXMs
Zz1aby5tZXJnZShnKTt2YXIgbj1MZShtLHApO2cubGVuZ3RoPyhffHwoaS5wb2x5Z29uU3RhcnQo
KSxfPSEwKSxTZShnLHplLG4sZSxpKSk6biYmKF98fChpLnBvbHlnb25TdGFydCgpLF89ITApLGku
bGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksXyYmKGkucG9seWdvbkVu
ZCgpLF89ITEpLGc9cD1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGku
bGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19
LHg9TmUoKSxNPXQoeCksXz0hMTtyZXR1cm4geX19ZnVuY3Rpb24gQ2Uobil7cmV0dXJuIG4ubGVu
Z3RoPjF9ZnVuY3Rpb24gTmUoKXt2YXIgbix0PVtdO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24o
KXt0LnB1c2gobj1bXSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7bi5wdXNoKFt0LGVdKX0sbGluZUVu
ZDp2LGJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBlPXQ7cmV0dXJuIHQ9W10sbj1udWxsLGV9LHJlam9p
bjpmdW5jdGlvbigpe3QubGVuZ3RoPjEmJnQucHVzaCh0LnBvcCgpLmNvbmNhdCh0LnNoaWZ0KCkp
KX19fWZ1bmN0aW9uIHplKG4sdCl7cmV0dXJuKChuPW4ueClbMF08MD9uWzFdLVNhLWthOlNhLW5b
MV0pLSgodD10LngpWzBdPDA/dFsxXS1TYS1rYTpTYS10WzFdKX1mdW5jdGlvbiBMZShuLHQpe3Zh
ciBlPW5bMF0scj1uWzFdLHU9W01hdGguc2luKGUpLC1NYXRoLmNvcyhlKSwwXSxpPTAsbz0wO2xj
LnJlc2V0KCk7Zm9yKHZhciBhPTAsYz10Lmxlbmd0aDtjPmE7KythKXt2YXIgcz10W2FdLGw9cy5s
ZW5ndGg7aWYobClmb3IodmFyIGY9c1swXSxoPWZbMF0sZz1mWzFdLzIrYmEvNCxwPU1hdGguc2lu
KGcpLHY9TWF0aC5jb3MoZyksZD0xOzspe2Q9PT1sJiYoZD0wKSxuPXNbZF07dmFyIG09blswXSx5
PW5bMV0vMitiYS80LHg9TWF0aC5zaW4oeSksTT1NYXRoLmNvcyh5KSxfPW0taCxiPV8+PTA/MTot
MSx3PWIqXyxTPXc+YmEsaz1wKng7aWYobGMuYWRkKE1hdGguYXRhbjIoaypiKk1hdGguc2luKHcp
LHYqTStrKk1hdGguY29zKHcpKSksaSs9Uz9fK2Iqd2E6XyxTXmg+PWVebT49ZSl7dmFyIEU9aGUo
bGUoZiksbGUobikpO3ZlKEUpO3ZhciBBPWhlKHUsRSk7dmUoQSk7dmFyIEM9KFNeXz49MD8tMTox
KSpHKEFbMl0pOyhyPkN8fHI9PT1DJiYoRVswXXx8RVsxXSkpJiYobys9U15fPj0wPzE6LTEpfWlm
KCFkKyspYnJlYWs7aD1tLHA9eCx2PU0sZj1ufX1yZXR1cm4oLWthPml8fGthPmkmJjA+bGMpXjEm
b31mdW5jdGlvbiBUZShuKXt2YXIgdCxlPTAvMCxyPTAvMCx1PTAvMDtyZXR1cm57bGluZVN0YXJ0
OmZ1bmN0aW9uKCl7bi5saW5lU3RhcnQoKSx0PTF9LHBvaW50OmZ1bmN0aW9uKGksbyl7dmFyIGE9
aT4wP2JhOi1iYSxjPXVhKGktZSk7dWEoYy1iYSk8a2E/KG4ucG9pbnQoZSxyPShyK28pLzI+MD9T
YTotU2EpLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoYSxy
KSxuLnBvaW50KGksciksdD0wKTp1IT09YSYmYz49YmEmJih1YShlLXUpPGthJiYoZS09dSprYSks
dWEoaS1hKTxrYSYmKGktPWEqa2EpLHI9cWUoZSxyLGksbyksbi5wb2ludCh1LHIpLG4ubGluZUVu
ZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChhLHIpLHQ9MCksbi5wb2ludChlPWkscj1vKSx1PWF9
LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKSxlPXI9MC8wfSxjbGVhbjpmdW5jdGlvbigp
e3JldHVybiAyLXR9fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt2YXIgdSxpLG89TWF0aC5zaW4obi1l
KTtyZXR1cm4gdWEobyk+a2E/TWF0aC5hdGFuKChNYXRoLnNpbih0KSooaT1NYXRoLmNvcyhyKSkq
TWF0aC5zaW4oZSktTWF0aC5zaW4ocikqKHU9TWF0aC5jb3ModCkpKk1hdGguc2luKG4pKS8odSpp
Km8pKToodCtyKS8yfWZ1bmN0aW9uIFJlKG4sdCxlLHIpe3ZhciB1O2lmKG51bGw9PW4pdT1lKlNh
LHIucG9pbnQoLWJhLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KGJhLHUpLHIucG9pbnQoYmEsMCks
ci5wb2ludChiYSwtdSksci5wb2ludCgwLC11KSxyLnBvaW50KC1iYSwtdSksci5wb2ludCgtYmEs
MCksci5wb2ludCgtYmEsdSk7ZWxzZSBpZih1YShuWzBdLXRbMF0pPmthKXt2YXIgaT1uWzBdPHRb
MF0/YmE6LWJhO3U9ZSppLzIsci5wb2ludCgtaSx1KSxyLnBvaW50KDAsdSksci5wb2ludChpLHUp
fWVsc2Ugci5wb2ludCh0WzBdLHRbMV0pfWZ1bmN0aW9uIERlKG4pe2Z1bmN0aW9uIHQobix0KXty
ZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBlKG4pe3ZhciBlLGksYyxz
LGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3M9Yz0hMSxsPTF9LHBvaW50OmZ1bmN0aW9u
KGYsaCl7dmFyIGcscD1bZixoXSx2PXQoZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP2Jh
Oi1iYSksaCk6MDtpZighZSYmKHM9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHAp
LChtZShlLGcpfHxtZShwLGcpKSYmKHBbMF0rPWthLHBbMV0rPWthLHY9dChwWzBdLHBbMV0pKSks
diE9PWMpbD0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChnWzBdLGdbMV0pKToo
Zz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVuZCgpKSxlPWc7ZWxzZSBpZihhJiZl
JiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxlLCEwKSl8fChsPTAsbz8obi5saW5lU3RhcnQoKSxu
LnBvaW50KG1bMF1bMF0sbVswXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVu
ZCgpKToobi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCks
bi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJm1lKGUscCl8fG4ucG9pbnQocFswXSxw
WzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2MmJm4ubGluZUVuZCgpLGU9bnVs
bH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gbHwocyYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxl
KXt2YXIgcj1sZShuKSx1PWxlKHQpLG89WzEsMCwwXSxhPWhlKHIsdSksYz1mZShhLGEpLHM9YVsw
XSxsPWMtcypzO2lmKCFsKXJldHVybiFlJiZuO3ZhciBmPWkqYy9sLGg9LWkqcy9sLGc9aGUobyxh
KSxwPXBlKG8sZiksdj1wZShhLGgpO2dlKHAsdik7dmFyIGQ9ZyxtPWZlKHAsZCkseT1mZShkLGQp
LHg9bSptLXkqKGZlKHAscCktMSk7aWYoISgwPngpKXt2YXIgTT1NYXRoLnNxcnQoeCksXz1wZShk
LCgtbS1NKS95KTtpZihnZShfLHApLF89ZGUoXyksIWUpcmV0dXJuIF87dmFyIGIsdz1uWzBdLFM9
dFswXSxrPW5bMV0sRT10WzFdO3c+UyYmKGI9dyx3PVMsUz1iKTt2YXIgQT1TLXcsQz11YShBLWJh
KTxrYSxOPUN8fGthPkE7aWYoIUMmJms+RSYmKGI9ayxrPUUsRT1iKSxOP0M/aytFPjBeX1sxXTwo
dWEoX1swXS13KTxrYT9rOkUpOms8PV9bMV0mJl9bMV08PUU6QT5iYV4odzw9X1swXSYmX1swXTw9
Uykpe3ZhciB6PXBlKGQsKC1tK00pL3kpO3JldHVybiBnZSh6LHApLFtfLGRlKHopXX19fWZ1bmN0
aW9uIHUodCxlKXt2YXIgcj1vP246YmEtbix1PTA7cmV0dXJuLXI+dD91fD0xOnQ+ciYmKHV8PTIp
LC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZhciBpPU1hdGguY29zKG4pLG89aT4wLGE9dWEoaSk+
a2EsYz1zcihuLDYqQWEpO3JldHVybiBBZSh0LGUsYyxvP1swLC1uXTpbLWJhLG4tYmFdKX1mdW5j
dGlvbiBQZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1v
Lngscz1vLnksbD1hLngsZj1hLnksaD0wLGc9MSxwPWwtYyx2PWYtcztpZihpPW4tYyxwfHwhKGk+
MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZihwPjApe2lm
KGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUtYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtp
ZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYo
Zz1pKX1pZihpPXQtcyx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYm
KGc9aSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXItcyx2fHwh
KDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZih2PjAp
e2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4gaD4wJiYodS5hPXt4OmMraCpwLHk6cyto
KnZ9KSwxPmcmJih1LmI9e3g6YytnKnAseTpzK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBVZShuLHQs
ZSxyKXtmdW5jdGlvbiB1KHIsdSl7cmV0dXJuIHVhKHJbMF0tbik8a2E/dT4wPzA6Mzp1YShyWzBd
LWUpPGthP3U+MD8yOjE6dWEoclsxXS10KTxrYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gaShu
LHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11KG4sMSkscj11KHQs
MSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06MT09PWU/blswXS10WzBdOjI9PT1l
P25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJuIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9y
KHZhciB0PTAsZT1kLmxlbmd0aCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRb
dV0sYz1hLmxlbmd0aCxzPWFbMF07Yz5vOysrbylpPWFbb10sc1sxXTw9cj9pWzFdPnImJlcocyxp
LG4pPjAmJisrdDppWzFdPD1yJiZXKHMsaSxuKTwwJiYtLXQscz1pO3JldHVybiAwIT09dH1mdW5j
dGlvbiBzKGksYSxjLHMpe3ZhciBsPTAsZj0wO2lmKG51bGw9PWl8fChsPXUoaSxjKSkhPT0oZj11
KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIHMucG9pbnQoMD09PWx8fDM9PT1sP246ZSxsPjE/cjp0
KTt3aGlsZSgobD0obCtjKzQpJTQpIT09Zil9ZWxzZSBzLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rp
b24gbCh1LGkpe3JldHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXts
KG4sdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Ti5wb2ludD1wLGQmJmQucHVzaChtPVtd
KSxTPSEwLHc9ITEsXz1iPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSx4KSxNJiZ3JiZBLnJlam9p
bigpLHYucHVzaChBLmJ1ZmZlcigpKSksTi5wb2ludD1mLHcmJmEubGluZUVuZCgpfWZ1bmN0aW9u
IHAobix0KXtuPU1hdGgubWF4KC1rYyxNYXRoLm1pbihrYyxuKSksdD1NYXRoLm1heCgta2MsTWF0
aC5taW4oa2MsdCkpO3ZhciBlPWwobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLHg9dCxN
PWUsUz0hMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylhLnBv
aW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpfLHk6Yn0sYjp7eDpuLHk6dH19O0Mocik/KHd8fChh
LmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxhLnBvaW50KHIuYi54LHIuYi55KSxl
fHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9
Xz1uLGI9dCx3PWV9dmFyIHYsZCxtLHkseCxNLF8sYix3LFMsayxFPWEsQT1OZSgpLEM9UGUobix0
LGUsciksTj17cG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0
aW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YT1FLHY9Wm8u
bWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5ndGg7KGV8fHUpJiYoYS5wb2x5
Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxzKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgp
KSx1JiZTZSh2LGksdCxzLGEpLGEucG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIE59
fWZ1bmN0aW9uIGplKG4sdCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPW4oZSxyKSx0KGVbMF0s
ZVsxXSl9cmV0dXJuIG4uaW52ZXJ0JiZ0LmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7
cmV0dXJuIGU9dC5pbnZlcnQoZSxyKSxlJiZuLmludmVydChlWzBdLGVbMV0pfSksZX1mdW5jdGlv
biBIZShuKXt2YXIgdD0wLGU9YmEvMyxyPXRyKG4pLHU9cih0LGUpO3JldHVybiB1LnBhcmFsbGVs
cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9blswXSpiYS8xODAsZT1u
WzFdKmJhLzE4MCk6WzE4MCoodC9iYSksMTgwKihlL2JhKV19LHV9ZnVuY3Rpb24gRmUobix0KXtm
dW5jdGlvbiBlKG4sdCl7dmFyIGU9TWF0aC5zcXJ0KGktMip1Kk1hdGguc2luKHQpKS91O3JldHVy
bltlKk1hdGguc2luKG4qPXUpLG8tZSpNYXRoLmNvcyhuKV19dmFyIHI9TWF0aC5zaW4obiksdT0o
citNYXRoLnNpbih0KSkvMixpPTErciooMip1LXIpLG89TWF0aC5zcXJ0KGkpL3U7cmV0dXJuIGUu
aW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9by10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxH
KChpLShuKm4rZSplKSp1KnUpLygyKnUpKV19LGV9ZnVuY3Rpb24gT2UoKXtmdW5jdGlvbiBuKG4s
dCl7QWMrPXUqbi1yKnQscj1uLHU9dH12YXIgdCxlLHIsdTtUYy5wb2ludD1mdW5jdGlvbihpLG8p
e1RjLnBvaW50PW4sdD1yPWksZT11PW99LFRjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1
bmN0aW9uIFllKG4sdCl7Q2M+biYmKENjPW4pLG4+emMmJih6Yz1uKSxOYz50JiYoTmM9dCksdD5M
YyYmKExjPXQpfWZ1bmN0aW9uIEllKCl7ZnVuY3Rpb24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIs
dCxpKX1mdW5jdGlvbiB0KG4sdCl7by5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rp
b24gZShuLHQpe28ucHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5j
dGlvbiB1KCl7by5wdXNoKCJaIil9dmFyIGk9WmUoNC41KSxvPVtdLGE9e3BvaW50Om4sbGluZVN0
YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdvblN0YXJ0OmZ1bmN0aW9u
KCl7YS5saW5lRW5kPXV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9cixhLnBvaW50
PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBpPVplKG4pLGF9LHJlc3VsdDpmdW5j
dGlvbigpe2lmKG8ubGVuZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0
dXJuIGF9ZnVuY3Rpb24gWmUobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwxIDAs
IistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rpb24gVmUobix0KXtw
Yys9bix2Yys9dCwrK2RjfWZ1bmN0aW9uIFhlKCl7ZnVuY3Rpb24gbihuLHIpe3ZhciB1PW4tdCxp
PXItZSxvPU1hdGguc3FydCh1KnUraSppKTttYys9byoodCtuKS8yLHljKz1vKihlK3IpLzIseGMr
PW8sVmUodD1uLGU9cil9dmFyIHQsZTtSYy5wb2ludD1mdW5jdGlvbihyLHUpe1JjLnBvaW50PW4s
VmUodD1yLGU9dSl9fWZ1bmN0aW9uICRlKCl7UmMucG9pbnQ9VmV9ZnVuY3Rpb24gQmUoKXtmdW5j
dGlvbiBuKG4sdCl7dmFyIGU9bi1yLGk9dC11LG89TWF0aC5zcXJ0KGUqZStpKmkpO21jKz1vKihy
K24pLzIseWMrPW8qKHUrdCkvMix4Yys9byxvPXUqbi1yKnQsTWMrPW8qKHIrbiksX2MrPW8qKHUr
dCksYmMrPTMqbyxWZShyPW4sdT10KX12YXIgdCxlLHIsdTtSYy5wb2ludD1mdW5jdGlvbihpLG8p
e1JjLnBvaW50PW4sVmUodD1yPWksZT11PW8pfSxSYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUp
fX1mdW5jdGlvbiBXZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCxlKSxuLmFyYyh0LGUs
bywwLHdhKX1mdW5jdGlvbiBlKHQsZSl7bi5tb3ZlVG8odCxlKSxhLnBvaW50PXJ9ZnVuY3Rpb24g
cih0LGUpe24ubGluZVRvKHQsZSl9ZnVuY3Rpb24gdSgpe2EucG9pbnQ9dH1mdW5jdGlvbiBpKCl7
bi5jbG9zZVBhdGgoKX12YXIgbz00LjUsYT17cG9pbnQ6dCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXth
LnBvaW50PWV9LGxpbmVFbmQ6dSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9aX0s
cG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGluZUVuZD11LGEucG9pbnQ9dH0scG9pbnRSYWRpdXM6
ZnVuY3Rpb24obil7cmV0dXJuIG89bixhfSxyZXN1bHQ6dn07cmV0dXJuIGF9ZnVuY3Rpb24gSmUo
bil7ZnVuY3Rpb24gdChuKXtyZXR1cm4oYT9yOmUpKG4pfWZ1bmN0aW9uIGUodCl7cmV0dXJuIFFl
KHQsZnVuY3Rpb24oZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVbMF0sZVsxXSl9KX1mdW5jdGlvbiBy
KHQpe2Z1bmN0aW9uIGUoZSxyKXtlPW4oZSxyKSx0LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24g
cigpe3g9MC8wLFMucG9pbnQ9aSx0LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGkoZSxyKXt2YXIgaT1s
ZShbZSxyXSksbz1uKGUscik7dSh4LE0seSxfLGIsdyx4PW9bMF0sTT1vWzFdLHk9ZSxfPWlbMF0s
Yj1pWzFdLHc9aVsyXSxhLHQpLHQucG9pbnQoeCxNKX1mdW5jdGlvbiBvKCl7Uy5wb2ludD1lLHQu
bGluZUVuZCgpfWZ1bmN0aW9uIGMoKXtyKCksUy5wb2ludD1zLFMubGluZUVuZD1sfWZ1bmN0aW9u
IHMobix0KXtpKGY9bixoPXQpLGc9eCxwPU0sdj1fLGQ9YixtPXcsUy5wb2ludD1pfWZ1bmN0aW9u
IGwoKXt1KHgsTSx5LF8sYix3LGcscCxmLHYsZCxtLGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBm
LGgsZyxwLHYsZCxtLHkseCxNLF8sYix3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpv
LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3RhcnQ9Y30s
cG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGluZVN0YXJ0PXJ9fTtyZXR1
cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxzLGwsZixoLGcscCx2LGQsbSl7dmFyIHk9bC10LHg9
Zi1lLE09eSp5K3gqeDtpZihNPjQqaSYmZC0tKXt2YXIgXz1hK2csYj1jK3Asdz1zK3YsUz1NYXRo
LnNxcnQoXypfK2IqYit3KncpLGs9TWF0aC5hc2luKHcvPVMpLEU9dWEodWEodyktMSk8a2F8fHVh
KHItaCk8a2E/KHIraCkvMjpNYXRoLmF0YW4yKGIsXyksQT1uKEUsayksQz1BWzBdLE49QVsxXSx6
PUMtdCxMPU4tZSxUPXgqei15Kkw7KFQqVC9NPml8fHVhKCh5KnoreCpMKS9NLS41KT4uM3x8bz5h
KmcrYypwK3MqdikmJih1KHQsZSxyLGEsYyxzLEMsTixFLF8vPVMsYi89Uyx3LGQsbSksbS5wb2lu
dChDLE4pLHUoQyxOLEUsXyxiLHcsbCxmLGgsZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5j
b3MoMzAqQWEpLGE9MTY7Ci1yZXR1cm4gdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KGE9KGk9bipuKT4wJiYxNix0KTpNYXRoLnNxcnQoaSl9LHR9ZnVuY3Rp
b24gR2Uobil7dmFyIHQ9SmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihbdCpDYSxlKkNhXSl9KTty
ZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGVyKHQobikpfX1mdW5jdGlvbiBLZShuKXt0aGlzLnN0
cmVhbT1ufWZ1bmN0aW9uIFFlKG4sdCl7cmV0dXJue3BvaW50OnQsc3BoZXJlOmZ1bmN0aW9uKCl7
bi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bi5saW5lU3RhcnQoKX0sbGluZUVuZDpm
dW5jdGlvbigpe24ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25T
dGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBu
cihuKXtyZXR1cm4gdHIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKCl9ZnVuY3Rpb24gdHIobil7ZnVu
Y3Rpb24gdChuKXtyZXR1cm4gbj1hKG5bMF0qQWEsblsxXSpBYSksW25bMF0qaCtjLHMtblsxXSpo
XX1mdW5jdGlvbiBlKG4pe3JldHVybiBuPWEuaW52ZXJ0KChuWzBdLWMpL2gsKHMtblsxXSkvaCks
biYmW25bMF0qQ2EsblsxXSpDYV19ZnVuY3Rpb24gcigpe2E9amUobz1pcihtLHkseCksaSk7dmFy
IG49aSh2LGQpO3JldHVybiBjPWctblswXSpoLHM9cCtuWzFdKmgsdSgpfWZ1bmN0aW9uIHUoKXty
ZXR1cm4gbCYmKGwudmFsaWQ9ITEsbD1udWxsKSx0fXZhciBpLG8sYSxjLHMsbCxmPUplKGZ1bmN0
aW9uKG4sdCl7cmV0dXJuIG49aShuLHQpLFtuWzBdKmgrYyxzLW5bMV0qaF19KSxoPTE1MCxnPTQ4
MCxwPTI1MCx2PTAsZD0wLG09MCx5PTAseD0wLE09U2MsXz13dCxiPW51bGwsdz1udWxsO3JldHVy
biB0LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gbCYmKGwudmFsaWQ9ITEpLGw9ZXIoTShvLGYo
XyhuKSkpKSxsLnZhbGlkPSEwLGx9LHQuY2xpcEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhNPW51bGw9PW4/KGI9bixTYyk6RGUoKGI9K24pKkFhKSx1KCkpOmJ9LHQu
Y2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1uLF89bj9V
ZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKTp3dCx1KCkpOnd9LHQuc2NhbGU9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K24scigpKTpofSx0LnRyYW5zbGF0
ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rblswXSxwPStuWzFdLHIo
KSk6W2cscF19LHQuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2
PW5bMF0lMzYwKkFhLGQ9blsxXSUzNjAqQWEscigpKTpbdipDYSxkKkNhXX0sdC5yb3RhdGU9ZnVu
Y3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09blswXSUzNjAqQWEseT1uWzFdJTM2
MCpBYSx4PW4ubGVuZ3RoPjI/blsyXSUzNjAqQWE6MCxyKCkpOlttKkNhLHkqQ2EseCpDYV19LFpv
LnJlYmluZCh0LGYsInByZWNpc2lvbiIpLGZ1bmN0aW9uKCl7cmV0dXJuIGk9bi5hcHBseSh0aGlz
LGFyZ3VtZW50cyksdC5pbnZlcnQ9aS5pbnZlcnQmJmUscigpfX1mdW5jdGlvbiBlcihuKXtyZXR1
cm4gUWUobixmdW5jdGlvbih0LGUpe24ucG9pbnQodCpBYSxlKkFhKX0pfWZ1bmN0aW9uIHJyKG4s
dCl7cmV0dXJuW24sdF19ZnVuY3Rpb24gdXIobix0KXtyZXR1cm5bbj5iYT9uLXdhOi1iYT5uP24r
d2E6bix0XX1mdW5jdGlvbiBpcihuLHQsZSl7cmV0dXJuIG4/dHx8ZT9qZShhcihuKSxjcih0LGUp
KTphcihuKTp0fHxlP2NyKHQsZSk6dXJ9ZnVuY3Rpb24gb3Iobil7cmV0dXJuIGZ1bmN0aW9uKHQs
ZSl7cmV0dXJuIHQrPW4sW3Q+YmE/dC13YTotYmE+dD90K3dhOnQsZV19fWZ1bmN0aW9uIGFyKG4p
e3ZhciB0PW9yKG4pO3JldHVybiB0LmludmVydD1vcigtbiksdH1mdW5jdGlvbiBjcihuLHQpe2Z1
bmN0aW9uIGUobix0KXt2YXIgZT1NYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNp
bihuKSplLHM9TWF0aC5zaW4odCksbD1zKnIrYSp1O3JldHVybltNYXRoLmF0YW4yKGMqaS1sKm8s
YSpyLXMqdSksRyhsKmkrYypvKV19dmFyIHI9TWF0aC5jb3MobiksdT1NYXRoLnNpbihuKSxpPU1h
dGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFy
IGU9TWF0aC5jb3ModCksYT1NYXRoLmNvcyhuKSplLGM9TWF0aC5zaW4obikqZSxzPU1hdGguc2lu
KHQpLGw9cyppLWMqbztyZXR1cm5bTWF0aC5hdGFuMihjKmkrcypvLGEqcitsKnUpLEcobCpyLWEq
dSldfSxlfWZ1bmN0aW9uIHNyKG4sdCl7dmFyIGU9TWF0aC5jb3Mobikscj1NYXRoLnNpbihuKTty
ZXR1cm4gZnVuY3Rpb24odSxpLG8sYSl7dmFyIGM9byp0O251bGwhPXU/KHU9bHIoZSx1KSxpPWxy
KGUsaSksKG8+MD9pPnU6dT5pKSYmKHUrPW8qd2EpKToodT1uK28qd2EsaT1uLS41KmMpO2Zvcih2
YXIgcyxsPXU7bz4wP2w+aTppPmw7bC09YylhLnBvaW50KChzPWRlKFtlLC1yKk1hdGguY29zKGwp
LC1yKk1hdGguc2luKGwpXSkpWzBdLHNbMV0pfX1mdW5jdGlvbiBscihuLHQpe3ZhciBlPWxlKHQp
O2VbMF0tPW4sdmUoZSk7dmFyIHI9SigtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1yOnIpKzIqTWF0
aC5QSS1rYSklKDIqTWF0aC5QSSl9ZnVuY3Rpb24gZnIobix0LGUpe3ZhciByPVpvLnJhbmdlKG4s
dC1rYSxlKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiByLm1hcChmdW5jdGlv
bih0KXtyZXR1cm5bbix0XX0pfX1mdW5jdGlvbiBocihuLHQsZSl7dmFyIHI9Wm8ucmFuZ2Uobix0
LWthLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9u
KHQpe3JldHVyblt0LG5dfSl9fWZ1bmN0aW9uIGdyKG4pe3JldHVybiBuLnNvdXJjZX1mdW5jdGlv
biBwcihuKXtyZXR1cm4gbi50YXJnZXR9ZnVuY3Rpb24gdnIobix0LGUscil7dmFyIHU9TWF0aC5j
b3ModCksaT1NYXRoLnNpbih0KSxvPU1hdGguY29zKHIpLGE9TWF0aC5zaW4ociksYz11Kk1hdGgu
Y29zKG4pLHM9dSpNYXRoLnNpbihuKSxsPW8qTWF0aC5jb3MoZSksZj1vKk1hdGguc2luKGUpLGg9
MipNYXRoLmFzaW4oTWF0aC5zcXJ0KHR0KHItdCkrdSpvKnR0KGUtbikpKSxnPTEvTWF0aC5zaW4o
aCkscD1oP2Z1bmN0aW9uKG4pe3ZhciB0PU1hdGguc2luKG4qPWgpKmcsZT1NYXRoLnNpbihoLW4p
Kmcscj1lKmMrdCpsLHU9ZSpzK3QqZixvPWUqaSt0KmE7cmV0dXJuW01hdGguYXRhbjIodSxyKSpD
YSxNYXRoLmF0YW4yKG8sTWF0aC5zcXJ0KHIqcit1KnUpKSpDYV19OmZ1bmN0aW9uKCl7cmV0dXJu
W24qQ2EsdCpDYV19O3JldHVybiBwLmRpc3RhbmNlPWgscH1mdW5jdGlvbiBkcigpe2Z1bmN0aW9u
IG4obix1KXt2YXIgaT1NYXRoLnNpbih1Kj1BYSksbz1NYXRoLmNvcyh1KSxhPXVhKChuKj1BYSkt
dCksYz1NYXRoLmNvcyhhKTtEYys9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGE9bypNYXRoLnNpbihh
KSkqYSsoYT1yKmktZSpvKmMpKmEpLGUqaStyKm8qYyksdD1uLGU9aSxyPW99dmFyIHQsZSxyO1Bj
LnBvaW50PWZ1bmN0aW9uKHUsaSl7dD11KkFhLGU9TWF0aC5zaW4oaSo9QWEpLHI9TWF0aC5jb3Mo
aSksUGMucG9pbnQ9bn0sUGMubGluZUVuZD1mdW5jdGlvbigpe1BjLnBvaW50PVBjLmxpbmVFbmQ9
dn19ZnVuY3Rpb24gbXIobix0KXtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksdT1N
YXRoLmNvcyhlKSxpPW4ocip1KTtyZXR1cm5baSp1Kk1hdGguc2luKHQpLGkqTWF0aC5zaW4oZSld
fXJldHVybiBlLmludmVydD1mdW5jdGlvbihuLGUpe3ZhciByPU1hdGguc3FydChuKm4rZSplKSx1
PXQociksaT1NYXRoLnNpbih1KSxvPU1hdGguY29zKHUpO3JldHVybltNYXRoLmF0YW4yKG4qaSxy
Km8pLE1hdGguYXNpbihyJiZlKmkvcildfSxlfWZ1bmN0aW9uIHlyKG4sdCl7ZnVuY3Rpb24gZShu
LHQpe28+MD8tU2Era2E+dCYmKHQ9LVNhK2thKTp0PlNhLWthJiYodD1TYS1rYSk7dmFyIGU9by9N
YXRoLnBvdyh1KHQpLGkpO3JldHVybltlKk1hdGguc2luKGkqbiksby1lKk1hdGguY29zKGkqbild
fXZhciByPU1hdGguY29zKG4pLHU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgudGFuKGJhLzQrbi8y
KX0saT1uPT09dD9NYXRoLnNpbihuKTpNYXRoLmxvZyhyL01hdGguY29zKHQpKS9NYXRoLmxvZyh1
KHQpL3UobikpLG89cipNYXRoLnBvdyh1KG4pLGkpL2k7cmV0dXJuIGk/KGUuaW52ZXJ0PWZ1bmN0
aW9uKG4sdCl7dmFyIGU9by10LHI9QihpKSpNYXRoLnNxcnQobipuK2UqZSk7cmV0dXJuW01hdGgu
YXRhbjIobixlKS9pLDIqTWF0aC5hdGFuKE1hdGgucG93KG8vciwxL2kpKS1TYV19LGUpOk1yfWZ1
bmN0aW9uIHhyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPWktdDtyZXR1cm5bZSpNYXRoLnNp
bih1Km4pLGktZSpNYXRoLmNvcyh1Km4pXX12YXIgcj1NYXRoLmNvcyhuKSx1PW49PT10P01hdGgu
c2luKG4pOihyLU1hdGguY29zKHQpKS8odC1uKSxpPXIvdStuO3JldHVybiB1YSh1KTxrYT9ycjoo
ZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1pLXQ7cmV0dXJuW01hdGguYXRhbjIobixlKS91
LGktQih1KSpNYXRoLnNxcnQobipuK2UqZSldfSxlKX1mdW5jdGlvbiBNcihuLHQpe3JldHVybltu
LE1hdGgubG9nKE1hdGgudGFuKGJhLzQrdC8yKSldfWZ1bmN0aW9uIF9yKG4pe3ZhciB0LGU9bnIo
bikscj1lLnNjYWxlLHU9ZS50cmFuc2xhdGUsaT1lLmNsaXBFeHRlbnQ7cmV0dXJuIGUuc2NhbGU9
ZnVuY3Rpb24oKXt2YXIgbj1yLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNs
aXBFeHRlbnQobnVsbCk6ZTpufSxlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe3ZhciBuPXUuYXBwbHko
ZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUuY2xp
cEV4dGVudD1mdW5jdGlvbihuKXt2YXIgbz1pLmFwcGx5KGUsYXJndW1lbnRzKTtpZihvPT09ZSl7
aWYodD1udWxsPT1uKXt2YXIgYT1iYSpyKCksYz11KCk7aShbW2NbMF0tYSxjWzFdLWFdLFtjWzBd
K2EsY1sxXSthXV0pfX1lbHNlIHQmJihvPW51bGwpO3JldHVybiBvfSxlLmNsaXBFeHRlbnQobnVs
bCl9ZnVuY3Rpb24gYnIobix0KXtyZXR1cm5bTWF0aC5sb2coTWF0aC50YW4oYmEvNCt0LzIpKSwt
bl19ZnVuY3Rpb24gd3Iobil7cmV0dXJuIG5bMF19ZnVuY3Rpb24gU3Iobil7cmV0dXJuIG5bMV19
ZnVuY3Rpb24ga3Iobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9WzAsMV0scj0yLHU9Mjt0PnU7dSsr
KXtmb3IoO3I+MSYmVyhuW2Vbci0yXV0sbltlW3ItMV1dLG5bdV0pPD0wOyktLXI7ZVtyKytdPXV9
cmV0dXJuIGUuc2xpY2UoMCxyKX1mdW5jdGlvbiBFcihuLHQpe3JldHVybiBuWzBdLXRbMF18fG5b
MV0tdFsxXX1mdW5jdGlvbiBBcihuLHQsZSl7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk8
KGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9ZnVuY3Rpb24gQ3Iobix0LGUscil7dmFyIHU9blswXSxp
PWVbMF0sbz10WzBdLXUsYT1yWzBdLWksYz1uWzFdLHM9ZVsxXSxsPXRbMV0tYyxmPXJbMV0tcyxo
PShhKihjLXMpLWYqKHUtaSkpLyhmKm8tYSpsKTtyZXR1cm5bdStoKm8sYytoKmxdfWZ1bmN0aW9u
IE5yKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiEodFswXS1lWzBdfHx0WzFd
LWVbMV0pfWZ1bmN0aW9uIHpyKCl7R3IodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNp
cmNsZT1udWxsfWZ1bmN0aW9uIExyKG4pe3ZhciB0PUJjLnBvcCgpfHxuZXcgenI7cmV0dXJuIHQu
c2l0ZT1uLHR9ZnVuY3Rpb24gVHIobil7WXIobiksVmMucmVtb3ZlKG4pLEJjLnB1c2gobiksR3Io
bil9ZnVuY3Rpb24gcXIobil7dmFyIHQ9bi5jaXJjbGUsZT10Lngscj10LmN5LHU9e3g6ZSx5OnJ9
LGk9bi5QLG89bi5OLGE9W25dO1RyKG4pO2Zvcih2YXIgYz1pO2MuY2lyY2xlJiZ1YShlLWMuY2ly
Y2xlLngpPGthJiZ1YShyLWMuY2lyY2xlLmN5KTxrYTspaT1jLlAsYS51bnNoaWZ0KGMpLFRyKGMp
LGM9aTthLnVuc2hpZnQoYyksWXIoYyk7Zm9yKHZhciBzPW87cy5jaXJjbGUmJnVhKGUtcy5jaXJj
bGUueCk8a2EmJnVhKHItcy5jaXJjbGUuY3kpPGthOylvPXMuTixhLnB1c2gocyksVHIocykscz1v
O2EucHVzaChzKSxZcihzKTt2YXIgbCxmPWEubGVuZ3RoO2ZvcihsPTE7Zj5sOysrbClzPWFbbF0s
Yz1hW2wtMV0sQnIocy5lZGdlLGMuc2l0ZSxzLnNpdGUsdSk7Yz1hWzBdLHM9YVtmLTFdLHMuZWRn
ZT1YcihjLnNpdGUscy5zaXRlLG51bGwsdSksT3IoYyksT3Iocyl9ZnVuY3Rpb24gUnIobil7Zm9y
KHZhciB0LGUscix1LGk9bi54LG89bi55LGE9VmMuXzthOylpZihyPURyKGEsbyktaSxyPmthKWE9
YS5MO2Vsc2V7aWYodT1pLVByKGEsbyksISh1PmthKSl7cj4ta2E/KHQ9YS5QLGU9YSk6dT4ta2E/
KHQ9YSxlPWEuTik6dD1lPWE7YnJlYWt9aWYoIWEuUil7dD1hO2JyZWFrfWE9YS5SfXZhciBjPUxy
KG4pO2lmKFZjLmluc2VydCh0LGMpLHR8fGUpe2lmKHQ9PT1lKXJldHVybiBZcih0KSxlPUxyKHQu
c2l0ZSksVmMuaW5zZXJ0KGMsZSksYy5lZGdlPWUuZWRnZT1Ycih0LnNpdGUsYy5zaXRlKSxPcih0
KSxPcihlKSx2b2lkIDA7aWYoIWUpcmV0dXJuIGMuZWRnZT1Ycih0LnNpdGUsYy5zaXRlKSx2b2lk
IDA7WXIodCksWXIoZSk7dmFyIHM9dC5zaXRlLGw9cy54LGY9cy55LGg9bi54LWwsZz1uLnktZixw
PWUuc2l0ZSx2PXAueC1sLGQ9cC55LWYsbT0yKihoKmQtZyp2KSx5PWgqaCtnKmcseD12KnYrZCpk
LE09e3g6KGQqeS1nKngpL20rbCx5OihoKngtdip5KS9tK2Z9O0JyKGUuZWRnZSxzLHAsTSksYy5l
ZGdlPVhyKHMsbixudWxsLE0pLGUuZWRnZT1YcihuLHAsbnVsbCxNKSxPcih0KSxPcihlKX19ZnVu
Y3Rpb24gRHIobix0KXt2YXIgZT1uLnNpdGUscj1lLngsdT1lLnksaT11LXQ7aWYoIWkpcmV0dXJu
IHI7dmFyIG89bi5QO2lmKCFvKXJldHVybi0xLzA7ZT1vLnNpdGU7dmFyIGE9ZS54LGM9ZS55LHM9
Yy10O2lmKCFzKXJldHVybiBhO3ZhciBsPWEtcixmPTEvaS0xL3MsaD1sL3M7cmV0dXJuIGY/KC1o
K01hdGguc3FydChoKmgtMipmKihsKmwvKC0yKnMpLWMrcy8yK3UtaS8yKSkpL2YrcjoocithKS8y
fWZ1bmN0aW9uIFByKG4sdCl7dmFyIGU9bi5OO2lmKGUpcmV0dXJuIERyKGUsdCk7dmFyIHI9bi5z
aXRlO3JldHVybiByLnk9PT10P3IueDoxLzB9ZnVuY3Rpb24gVXIobil7dGhpcy5zaXRlPW4sdGhp
cy5lZGdlcz1bXX1mdW5jdGlvbiBqcihuKXtmb3IodmFyIHQsZSxyLHUsaSxvLGEsYyxzLGwsZj1u
WzBdWzBdLGg9blsxXVswXSxnPW5bMF1bMV0scD1uWzFdWzFdLHY9WmMsZD12Lmxlbmd0aDtkLS07
KWlmKGk9dltkXSxpJiZpLnByZXBhcmUoKSlmb3IoYT1pLmVkZ2VzLGM9YS5sZW5ndGgsbz0wO2M+
bzspbD1hW29dLmVuZCgpLHI9bC54LHU9bC55LHM9YVsrK28lY10uc3RhcnQoKSx0PXMueCxlPXMu
eSwodWEoci10KT5rYXx8dWEodS1lKT5rYSkmJihhLnNwbGljZShvLDAsbmV3IFdyKCRyKGkuc2l0
ZSxsLHVhKHItZik8a2EmJnAtdT5rYT97eDpmLHk6dWEodC1mKTxrYT9lOnB9OnVhKHUtcCk8a2Em
Jmgtcj5rYT97eDp1YShlLXApPGthP3Q6aCx5OnB9OnVhKHItaCk8a2EmJnUtZz5rYT97eDpoLHk6
dWEodC1oKTxrYT9lOmd9OnVhKHUtZyk8a2EmJnItZj5rYT97eDp1YShlLWcpPGthP3Q6Zix5Omd9
Om51bGwpLGkuc2l0ZSxudWxsKSksKytjKX1mdW5jdGlvbiBIcihuLHQpe3JldHVybiB0LmFuZ2xl
LW4uYW5nbGV9ZnVuY3Rpb24gRnIoKXtHcih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRo
aXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gT3Iobil7dmFyIHQ9bi5QLGU9bi5OO2lmKHQm
JmUpe3ZhciByPXQuc2l0ZSx1PW4uc2l0ZSxpPWUuc2l0ZTtpZihyIT09aSl7dmFyIG89dS54LGE9
dS55LGM9ci54LW8scz1yLnktYSxsPWkueC1vLGY9aS55LWEsaD0yKihjKmYtcypsKTtpZighKGg+
PS1FYSkpe3ZhciBnPWMqYytzKnMscD1sKmwrZipmLHY9KGYqZy1zKnApL2gsZD0oYypwLWwqZykv
aCxmPWQrYSxtPVdjLnBvcCgpfHxuZXcgRnI7bS5hcmM9bixtLnNpdGU9dSxtLng9ditvLG0ueT1m
K01hdGguc3FydCh2KnYrZCpkKSxtLmN5PWYsbi5jaXJjbGU9bTtmb3IodmFyIHk9bnVsbCx4PSRj
Ll87eDspaWYobS55PHgueXx8bS55PT09eC55JiZtLng8PXgueCl7aWYoIXguTCl7eT14LlA7YnJl
YWt9eD14Lkx9ZWxzZXtpZigheC5SKXt5PXg7YnJlYWt9eD14LlJ9JGMuaW5zZXJ0KHksbSkseXx8
KFhjPW0pfX19fWZ1bmN0aW9uIFlyKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChYYz10Lk4p
LCRjLnJlbW92ZSh0KSxXYy5wdXNoKHQpLEdyKHQpLG4uY2lyY2xlPW51bGwpfWZ1bmN0aW9uIEly
KG4pe2Zvcih2YXIgdCxlPUljLHI9UGUoblswXVswXSxuWzBdWzFdLG5bMV1bMF0sblsxXVsxXSks
dT1lLmxlbmd0aDt1LS07KXQ9ZVt1XSwoIVpyKHQsbil8fCFyKHQpfHx1YSh0LmEueC10LmIueCk8
a2EmJnVhKHQuYS55LXQuYi55KTxrYSkmJih0LmE9dC5iPW51bGwsZS5zcGxpY2UodSwxKSl9ZnVu
Y3Rpb24gWnIobix0KXt2YXIgZT1uLmI7aWYoZSlyZXR1cm4hMDt2YXIgcix1LGk9bi5hLG89dFsw
XVswXSxhPXRbMV1bMF0sYz10WzBdWzFdLHM9dFsxXVsxXSxsPW4ubCxmPW4ucixoPWwueCxnPWwu
eSxwPWYueCx2PWYueSxkPShoK3ApLzIsbT0oZyt2KS8yO2lmKHY9PT1nKXtpZihvPmR8fGQ+PWEp
cmV0dXJuO2lmKGg+cCl7aWYoaSl7aWYoaS55Pj1zKXJldHVybn1lbHNlIGk9e3g6ZCx5OmN9O2U9
e3g6ZCx5OnN9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDpkLHk6c307ZT17
eDpkLHk6Y319fWVsc2UgaWYocj0oaC1wKS8odi1nKSx1PW0tcipkLC0xPnJ8fHI+MSlpZihoPnAp
e2lmKGkpe2lmKGkueT49cylyZXR1cm59ZWxzZSBpPXt4OihjLXUpL3IseTpjfTtlPXt4OihzLXUp
L3IseTpzfX1lbHNle2lmKGkpe2lmKGkueTxjKXJldHVybn1lbHNlIGk9e3g6KHMtdSkvcix5OnN9
O2U9e3g6KGMtdSkvcix5OmN9fWVsc2UgaWYodj5nKXtpZihpKXtpZihpLng+PWEpcmV0dXJufWVs
c2UgaT17eDpvLHk6cipvK3V9O2U9e3g6YSx5OnIqYSt1fX1lbHNle2lmKGkpe2lmKGkueDxvKXJl
dHVybn1lbHNlIGk9e3g6YSx5OnIqYSt1fTtlPXt4Om8seTpyKm8rdX19cmV0dXJuIG4uYT1pLG4u
Yj1lLCEwfWZ1bmN0aW9uIFZyKG4sdCl7dGhpcy5sPW4sdGhpcy5yPXQsdGhpcy5hPXRoaXMuYj1u
dWxsfWZ1bmN0aW9uIFhyKG4sdCxlLHIpe3ZhciB1PW5ldyBWcihuLHQpO3JldHVybiBJYy5wdXNo
KHUpLGUmJkJyKHUsbix0LGUpLHImJkJyKHUsdCxuLHIpLFpjW24uaV0uZWRnZXMucHVzaChuZXcg
V3IodSxuLHQpKSxaY1t0LmldLmVkZ2VzLnB1c2gobmV3IFdyKHUsdCxuKSksdX1mdW5jdGlvbiAk
cihuLHQsZSl7dmFyIHI9bmV3IFZyKG4sbnVsbCk7cmV0dXJuIHIuYT10LHIuYj1lLEljLnB1c2go
cikscn1mdW5jdGlvbiBCcihuLHQsZSxyKXtuLmF8fG4uYj9uLmw9PT1lP24uYj1yOm4uYT1yOihu
LmE9cixuLmw9dCxuLnI9ZSl9ZnVuY3Rpb24gV3Iobix0LGUpe3ZhciByPW4uYSx1PW4uYjt0aGlz
LmVkZ2U9bix0aGlzLnNpdGU9dCx0aGlzLmFuZ2xlPWU/TWF0aC5hdGFuMihlLnktdC55LGUueC10
LngpOm4ubD09PXQ/TWF0aC5hdGFuMih1Lngtci54LHIueS11LnkpOk1hdGguYXRhbjIoci54LXUu
eCx1Lnktci55KX1mdW5jdGlvbiBKcigpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIEdyKG4pe24uVT1u
LkM9bi5MPW4uUj1uLlA9bi5OPW51bGx9ZnVuY3Rpb24gS3Iobix0KXt2YXIgZT10LHI9dC5SLHU9
ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixlLlI9ci5MLGUuUiYm
KGUuUi5VPWUpLHIuTD1lfWZ1bmN0aW9uIFFyKG4sdCl7dmFyIGU9dCxyPXQuTCx1PWUuVTt1P3Uu
TD09PWU/dS5MPXI6dS5SPXI6bi5fPXIsci5VPXUsZS5VPXIsZS5MPXIuUixlLkwmJihlLkwuVT1l
KSxyLlI9ZX1mdW5jdGlvbiBudShuKXtmb3IoO24uTDspbj1uLkw7cmV0dXJuIG59ZnVuY3Rpb24g
dHUobix0KXt2YXIgZSxyLHUsaT1uLnNvcnQoZXUpLnBvcCgpO2ZvcihJYz1bXSxaYz1uZXcgQXJy
YXkobi5sZW5ndGgpLFZjPW5ldyBKciwkYz1uZXcgSnI7OylpZih1PVhjLGkmJighdXx8aS55PHUu
eXx8aS55PT09dS55JiZpLng8dS54KSkoaS54IT09ZXx8aS55IT09cikmJihaY1tpLmldPW5ldyBV
cihpKSxScihpKSxlPWkueCxyPWkueSksaT1uLnBvcCgpO2Vsc2V7aWYoIXUpYnJlYWs7cXIodS5h
cmMpfXQmJihJcih0KSxqcih0KSk7dmFyIG89e2NlbGxzOlpjLGVkZ2VzOkljfTtyZXR1cm4gVmM9
JGM9SWM9WmM9bnVsbCxvfWZ1bmN0aW9uIGV1KG4sdCl7cmV0dXJuIHQueS1uLnl8fHQueC1uLnh9
ZnVuY3Rpb24gcnUobix0LGUpe3JldHVybihuLngtZS54KSoodC55LW4ueSktKG4ueC10LngpKihl
Lnktbi55KX1mdW5jdGlvbiB1dShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIGl1KG4pe3JldHVybiBu
Lnl9ZnVuY3Rpb24gb3UoKXtyZXR1cm57bGVhZjohMCxub2RlczpbXSxwb2ludDpudWxsLHg6bnVs
bCx5Om51bGx9fWZ1bmN0aW9uIGF1KG4sdCxlLHIsdSxpKXtpZighbih0LGUscix1LGkpKXt2YXIg
bz0uNSooZSt1KSxhPS41KihyK2kpLGM9dC5ub2RlcztjWzBdJiZhdShuLGNbMF0sZSxyLG8sYSks
Y1sxXSYmYXUobixjWzFdLG8scix1LGEpLGNbMl0mJmF1KG4sY1syXSxlLGEsbyxpKSxjWzNdJiZh
dShuLGNbM10sbyxhLHUsaSl9fWZ1bmN0aW9uIGN1KG4sdCl7bj1aby5yZ2IobiksdD1aby5yZ2Io
dCk7dmFyIGU9bi5yLHI9bi5nLHU9bi5iLGk9dC5yLWUsbz10LmctcixhPXQuYi11O3JldHVybiBm
dW5jdGlvbihuKXtyZXR1cm4iIyIrZHQoTWF0aC5yb3VuZChlK2kqbikpK2R0KE1hdGgucm91bmQo
citvKm4pKStkdChNYXRoLnJvdW5kKHUrYSpuKSl9fWZ1bmN0aW9uIHN1KG4sdCl7dmFyIGUscj17
fSx1PXt9O2ZvcihlIGluIG4pZSBpbiB0P3JbZV09aHUobltlXSx0W2VdKTp1W2VdPW5bZV07Zm9y
KGUgaW4gdCllIGluIG58fCh1W2VdPXRbZV0pO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZSBpbiBy
KXVbZV09cltlXShuKTtyZXR1cm4gdX19ZnVuY3Rpb24gbHUobix0KXtyZXR1cm4gdC09bj0rbixm
dW5jdGlvbihlKXtyZXR1cm4gbit0KmV9fWZ1bmN0aW9uIGZ1KG4sdCl7dmFyIGUscix1LGk9R2Mu
bGFzdEluZGV4PUtjLmxhc3RJbmRleD0wLG89LTEsYT1bXSxjPVtdO2ZvcihuKz0iIix0Kz0iIjso
ZT1HYy5leGVjKG4pKSYmKHI9S2MuZXhlYyh0KSk7KSh1PXIuaW5kZXgpPmkmJih1PXQuc3Vic3Ry
aW5nKGksdSksYVtvXT9hW29dKz11OmFbKytvXT11KSwoZT1lWzBdKT09PShyPXJbMF0pP2Fbb10/
YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsYy5wdXNoKHtpOm8seDpsdShlLHIpfSkpLGk9
S2MubGFzdEluZGV4O3JldHVybiBpPHQubGVuZ3RoJiYodT10LnN1YnN0cmluZyhpKSxhW29dP2Fb
b10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngsZnVuY3Rpb24obil7cmV0
dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0fToodD1jLmxlbmd0aCxmdW5jdGlvbihu
KXtmb3IodmFyIGUscj0wO3Q+cjsrK3IpYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9p
bigiIil9KX1mdW5jdGlvbiBodShuLHQpe2Zvcih2YXIgZSxyPVpvLmludGVycG9sYXRvcnMubGVu
Z3RoOy0tcj49MCYmIShlPVpvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1mdW5j
dGlvbiBndShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5sZW5ndGgsYT1NYXRo
Lm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7KytlKXIucHVzaChodShuW2VdLHRb
ZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2VdO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJu
IGZ1bmN0aW9uKG4pe2ZvcihlPTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0
aW9uIHB1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1m
dW5jdGlvbiB2dShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQpfX1mdW5jdGlv
biBkdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41PnQ/bigyKnQpOjItbigyLTIq
dCkpfX1mdW5jdGlvbiBtdShuKXtyZXR1cm4gbipufWZ1bmN0aW9uIHl1KG4pe3JldHVybiBuKm4q
bn1mdW5jdGlvbiB4dShuKXtpZigwPj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9
bipuLGU9dCpuO3JldHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24gTXUobil7
cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBfdShuKXty
ZXR1cm4gMS1NYXRoLmNvcyhuKlNhKX1mdW5jdGlvbiBidShuKXtyZXR1cm4gTWF0aC5wb3coMiwx
MCoobi0xKSl9ZnVuY3Rpb24gd3Uobil7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlv
biBTdShuLHQpe3ZhciBlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1l
bnRzLmxlbmd0aD9lPXQvd2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7
cmV0dXJuIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSp3YS90KX19ZnVuY3Rp
b24ga3Uobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChu
KzEpKnQtbil9fWZ1bmN0aW9uIEV1KG4pe3JldHVybiAxLzIuNzU+bj83LjU2MjUqbipuOjIvMi43
NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4rLjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1
LzIuNzUpKm4rLjkzNzU6Ny41NjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24g
QXUobix0KXtuPVpvLmhjbChuKSx0PVpvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10
LmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5j
OnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYm
KGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG90KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVu
Y3Rpb24gQ3Uobix0KXtuPVpvLmhzbChuKSx0PVpvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1u
LmwsaT10LmgtZSxvPXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4o
cik/dC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0x
ODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHV0KGUraSpuLHIrbypuLHUrYSpuKSsi
In19ZnVuY3Rpb24gTnUobix0KXtuPVpvLmxhYihuKSx0PVpvLmxhYih0KTt2YXIgZT1uLmwscj1u
LmEsdT1uLmIsaT10LmwtZSxvPXQuYS1yLGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVy
biBjdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIHp1KG4sdCl7cmV0dXJuIHQtPW4s
ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBMdShuKXt2YXIg
dD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1xdSh0KSx1PVR1KHQsZSksaT1xdShSdShlLHQsLXUp
KXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEsdFsxXSo9LTEscio9LTEsdSo9LTEp
LHRoaXMucm90YXRlPShyP01hdGguYXRhbjIodFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVb
MV0pKSpDYSx0aGlzLnRyYW5zbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNr
ZXc9aT9NYXRoLmF0YW4yKHUsaSkqQ2E6MH1mdW5jdGlvbiBUdShuLHQpe3JldHVybiBuWzBdKnRb
MF0rblsxXSp0WzFdfWZ1bmN0aW9uIHF1KG4pe3ZhciB0PU1hdGguc3FydChUdShuLG4pKTtyZXR1
cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBSdShuLHQsZSl7cmV0dXJuIG5bMF0r
PWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlvbiBEdShuLHQpe3ZhciBlLHI9W10sdT1bXSxp
PVpvLnRyYW5zZm9ybShuKSxvPVpvLnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFu
c2xhdGUscz1pLnJvdGF0ZSxsPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxw
PW8uc2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJhbnNsYXRl
KCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6bHUoYVswXSxjWzBdKX0se2k6Myx4
Omx1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1c2goInRyYW5zbGF0ZSgiK2MrIikiKTpy
LnB1c2goIiIpLHMhPWw/KHMtbD4xODA/bCs9MzYwOmwtcz4xODAmJihzKz0zNjApLHUucHVzaCh7
aTpyLnB1c2goci5wb3AoKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpsdShzLGwpfSkpOmwmJnIu
cHVzaChyLnBvcCgpKyJyb3RhdGUoIitsKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIucG9w
KCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpsdShmLGgpfSk6aCYmci5wdXNoKHIucG9wKCkrInNr
ZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/KGU9ci5wdXNoKHIucG9wKCkrInNj
YWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aTplLTQseDpsdShnWzBdLHBbMF0pfSx7
aTplLTIseDpsdShnWzFdLHBbMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9w
KCkrInNjYWxlKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7
KytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1mdW5jdGlvbiBQ
dShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4oZS1u
KSp0fX1mdW5jdGlvbiBVdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlv
bihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24ganUo
bil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1GdSh0LGUpLHU9W3RdO3QhPT1yOyl0
PXQucGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3BsaWNlKGks
MCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIEh1KG4pe2Zvcih2YXIgdD1bXSxlPW4u
cGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4p
LHR9ZnVuY3Rpb24gRnUobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9SHUobikscj1I
dSh0KSx1PWUucG9wKCksaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIu
cG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gT3Uobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBZdShuKXtu
LmZpeGVkJj0tN31mdW5jdGlvbiBJdShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1
bmN0aW9uIFp1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFZ1KG4sdCxlKXt2YXIgcj0wLHU9MDtp
ZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7
KytjPGE7KWk9b1tjXSxudWxsIT1pJiYoVnUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1p
LmNoYXJnZSppLmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9p
bnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBz
PXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1zLHIrPXMqbi5wb2lu
dC54LHUrPXMqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rp
b24gWHUobix0KXtyZXR1cm4gWm8ucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUi
KSxuLm5vZGVzPW4sbi5saW5rcz1LdSxufWZ1bmN0aW9uICR1KG4sdCl7Zm9yKHZhciBlPVtuXTtu
dWxsIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5ndGgpKWZv
cih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIEJ1KG4sdCl7Zm9yKHZhciBl
PVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihyLnB1c2gobiksKGk9bi5jaGlsZHJlbikm
Jih1PWkubGVuZ3RoKSlmb3IodmFyIHUsaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtu
dWxsIT0obj1yLnBvcCgpKTspdChuKX1mdW5jdGlvbiBXdShuKXtyZXR1cm4gbi5jaGlsZHJlbn1m
dW5jdGlvbiBKdShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBHdShuLHQpe3JldHVybiB0LnZh
bHVlLW4udmFsdWV9ZnVuY3Rpb24gS3Uobil7cmV0dXJuIFpvLm1lcmdlKG4ubWFwKGZ1bmN0aW9u
KG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6
bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBRdShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIG5pKG4p
e3JldHVybiBuLnl9ZnVuY3Rpb24gdGkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiBlaShu
KXtyZXR1cm4gWm8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHJpKG4pe2Zvcih2YXIgdD0tMSxl
PW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlvbiB1aShuKXtm
b3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtpPmU7KytlKSh0PW5bZV1bMV0p
PnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlvbiBpaShuKXtyZXR1cm4gbi5yZWR1Y2Uob2ks
MCl9ZnVuY3Rpb24gb2kobix0KXtyZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGFpKG4sdCl7cmV0dXJu
IGNpKG4sTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24g
Y2kobix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8PXQ7KWlb
ZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gc2kobil7cmV0dXJuW1pvLm1pbihuKSxaby5tYXgo
bildfWZ1bmN0aW9uIGxpKG4sdCl7cmV0dXJuIG4udmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBmaShu
LHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9w
YWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBoaShuLHQpe24uX3BhY2tfbmV4dD10
LHQuX3BhY2tfcHJldj1ufWZ1bmN0aW9uIGdpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1uLnks
dT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gcGkobil7ZnVuY3Rpb24g
dChuKXtsPU1hdGgubWluKG4ueC1uLnIsbCksZj1NYXRoLm1heChuLngrbi5yLGYpLGg9TWF0aC5t
aW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4ueStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihz
PWUubGVuZ3RoKSl7dmFyIGUscix1LGksbyxhLGMscyxsPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8w
O2lmKGUuZm9yRWFjaCh2aSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQocikscz4xJiYodT1lWzFd
LHUueD11LnIsdS55PTAsdCh1KSxzPjIpKWZvcihpPWVbMl0seWkocix1LGkpLHQoaSksZmkocixp
KSxyLl9wYWNrX3ByZXY9aSxmaShpLHUpLHU9ci5fcGFja19uZXh0LG89MztzPm87bysrKXt5aShy
LHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9yKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5f
cGFja19uZXh0LHYrKylpZihnaShhLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNr
X3ByZXY7YyE9PWEuX3BhY2tfcHJldiYmIWdpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhk
PnZ8fHY9PWQmJnUucjxyLnI/aGkocix1PWEpOmhpKHI9Yyx1KSxvLS0pOihmaShyLGkpLHU9aSx0
KGkpKX12YXIgbT0obCtmKS8yLHk9KGgrZykvMix4PTA7Zm9yKG89MDtzPm87bysrKWk9ZVtvXSxp
LngtPW0saS55LT15LHg9TWF0aC5tYXgoeCxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkp
O24ucj14LGUuZm9yRWFjaChkaSl9fWZ1bmN0aW9uIHZpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNr
X3ByZXY9bn1mdW5jdGlvbiBkaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNr
X3ByZXZ9ZnVuY3Rpb24gbWkobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9cipu
Lngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVuZ3RoOysraTxvOylt
aSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB5aShuLHQsZSl7dmFyIHI9bi5yK2Uucix1PXQueC1uLngs
aT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFyIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1y
O3ZhciBjPS41KyhyLW8pLygyKmEpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShy
LT1hKSpyLW8qbykpLygyKmEpO2UueD1uLngrYyp1K3MqaSxlLnk9bi55K2MqaS1zKnV9ZWxzZSBl
Lng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiB4aShuLHQpe3JldHVybiBuLnBhcmVudD09dC5wYXJl
bnQ/MToyfWZ1bmN0aW9uIE1pKG4pe3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQubGVuZ3RoP3Rb
MF06bi50fWZ1bmN0aW9uIF9pKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0
aCk/ZVt0LTFdOm4udH1mdW5jdGlvbiBiaShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1y
LHQucys9ZSxuLmMrPXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiB3aShuKXtmb3IodmFyIHQsZT0w
LHI9MCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUsdC5tKz1l
LGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBTaShuLHQsZSl7cmV0dXJuIG4uYS5wYXJlbnQ9PT10
LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiBraShuKXtyZXR1cm4gMStaby5tYXgobixmdW5jdGlvbihu
KXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24gRWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4s
dCl7cmV0dXJuIG4rdC54fSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBBaShuKXt2YXIgdD1uLmNoaWxk
cmVuO3JldHVybiB0JiZ0Lmxlbmd0aD9BaSh0WzBdKTpufWZ1bmN0aW9uIENpKG4pe3ZhciB0LGU9
bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP0NpKGVbdC0xXSk6bn1mdW5jdGlvbiBO
aShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpuLmR5fX1mdW5jdGlvbiB6aShuLHQp
e3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0sdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10
WzJdO3JldHVybiAwPnUmJihlKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixk
eDp1LGR5Oml9fWZ1bmN0aW9uIExpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVy
biBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gVGkobil7cmV0dXJuIG4ucmFuZ2VFeHRlbnQ/bi5y
YW5nZUV4dGVudCgpOkxpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gcWkobix0LGUscil7dmFyIHU9ZShu
WzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4p
KX19ZnVuY3Rpb24gUmkobix0KXt2YXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07
cmV0dXJuIGk+byYmKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1
XT10LmNlaWwobyksbn1mdW5jdGlvbiBEaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rpb24odCl7
cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNl
aWwodC9uKSpufX06c3N9ZnVuY3Rpb24gUGkobix0LGUscil7dmFyIHU9W10saT1bXSxvPTAsYT1N
YXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCku
cmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0s
bltvXSkpLGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPVpv
LmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5jdGlvbiBVaShuLHQs
ZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/UGk6
cWksYz1yP1V1OlB1O3JldHVybiBvPXUobix0LGMsZSksYT11KHQsbixjLGh1KSxpfWZ1bmN0aW9u
IGkobil7cmV0dXJuIG8obil9dmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0
dXJuIGEobil9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhu
PXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGku
cmFuZ2UobikuaW50ZXJwb2xhdGUoenUpfSxpLmNsYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhyPW4sdSgpKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVy
biBPaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWWkobix0LGUpfSxp
Lm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIEhpKG4sdCksdSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXty
ZXR1cm4gVWkobix0LGUscil9LHUoKX1mdW5jdGlvbiBqaShuLHQpe3JldHVybiBaby5yZWJpbmQo
bix0LCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24g
SGkobix0KXtyZXR1cm4gUmkobixEaShGaShuLHQpWzJdKSl9ZnVuY3Rpb24gRmkobix0KXtudWxs
PT10JiYodD0xMCk7dmFyIGU9TGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRoLmZs
b29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4uMTU+PWk/dSo9MTA6
LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRoLmNlaWwoZVswXS91KSp1LGVbMV09
TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxlWzJdPXUsZX1mdW5jdGlvbiBPaShuLHQpe3JldHVy
biBaby5yYW5nZS5hcHBseShabyxGaShuLHQpKX1mdW5jdGlvbiBZaShuLHQsZSl7dmFyIHI9Rmko
bix0KTtpZihlKXt2YXIgdT1HYS5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIg
aT1aby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgodWEoclswXSksdWEoclsxXSkpKTtyZXR1cm4gdVs3
XXx8KHVbN109Ii4iK0lpKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJmIixlPVpvLmZvcm1hdCh1Lmpv
aW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShpLnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8
KHVbN109Ii4iK1ppKHVbOF0scikpLGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitJaShyWzJdKSsi
ZiI7cmV0dXJuIFpvLmZvcm1hdChlKX1mdW5jdGlvbiBJaShuKXtyZXR1cm4tTWF0aC5mbG9vcihN
YXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBaaShuLHQpe3ZhciBlPUlpKHRbMl0p
O3JldHVybiBuIGluIGxzP01hdGguYWJzKGUtSWkoTWF0aC5tYXgodWEodFswXSksdWEodFsxXSkp
KSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiBWaShuLHQsZSxyKXtmdW5jdGlv
biB1KG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01h
dGgubG9nKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3co
dCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rp
b24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1h
cCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0
PStlLG4uZG9tYWluKHIubWFwKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1SaShy
Lm1hcCh1KSxlP01hdGg6aHMpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlj
a3M9ZnVuY3Rpb24oKXt2YXIgbj1MaShyKSxvPVtdLGE9blswXSxjPW5bMV0scz1NYXRoLmZsb29y
KHUoYSkpLGw9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihpc0Zpbml0ZShsLXMpKXtpZihl
KXtmb3IoO2w+cztzKyspZm9yKHZhciBoPTE7Zj5oO2grKylvLnB1c2goaShzKSpoKTtvLnB1c2go
aShzKSl9ZWxzZSBmb3Ioby5wdXNoKGkocykpO3MrKzxsOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0p
by5wdXNoKGkocykqaCk7Zm9yKHM9MDtvW3NdPGE7cysrKTtmb3IobD1vLmxlbmd0aDtvW2wtMV0+
YztsLS0pO289by5zbGljZShzLGwpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0
KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZnM7YXJndW1lbnRzLmxlbmd0aDwyP3Q9ZnM6
ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVpvLmZvcm1hdCh0KSk7dmFyIHIsYT1NYXRoLm1heCgu
MSxuL28udGlja3MoKS5sZW5ndGgpLGM9ZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixN
YXRoLmZsb29yKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qo
bik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVmkobi5jb3B5KCksdCxlLHIpfSxqaShv
LG4pfWZ1bmN0aW9uIFhpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHUodCkpfXZhciB1
PSRpKHQpLGk9JGkoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5p
bnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
bi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9u
KG4pe3JldHVybiBPaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gWWko
ZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEhpKGUsbikpfSxyLmV4
cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSRpKHQ9byksaT0k
aSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4g
WGkobi5jb3B5KCksdCxlKX0samkocixuKX1mdW5jdGlvbiAkaShuKXtyZXR1cm4gZnVuY3Rpb24o
dCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gQmko
bix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09dC50P3Uu
c2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rpb24gcih0LGUpe3JldHVy
biBaby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1
LGksYTtyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0
dXJuIG47bj1bXSx1PW5ldyBvO2Zvcih2YXIgaSxhPS0xLGM9ci5sZW5ndGg7KythPGM7KXUuaGFz
KGk9clthXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5hKX0s
ZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLGE9MCx0PXt0
OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQb2ludHM9ZnVuY3Rpb24odSxvKXth
cmd1bWVudHMubGVuZ3RoPDImJihvPTApO3ZhciBjPXVbMF0scz11WzFdLGw9KHMtYykvKE1hdGgu
bWF4KDEsbi5sZW5ndGgtMSkrbyk7cmV0dXJuIGk9cihuLmxlbmd0aDwyPyhjK3MpLzI6YytsKm8v
MixsKSxhPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9
ZnVuY3Rpb24odSxvLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKG89MCksYXJndW1lbnRzLmxlbmd0
aDwzJiYoYz1vKTt2YXIgcz11WzFdPHVbMF0sbD11W3MtMF0sZj11WzEtc10saD0oZi1sKS8obi5s
ZW5ndGgtbysyKmMpO3JldHVybiBpPXIobCtoKmMsaCkscyYmaS5yZXZlcnNlKCksYT1oKigxLW8p
LHQ9e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5j
dGlvbih1LG8sYyl7YXJndW1lbnRzLmxlbmd0aDwyJiYobz0wKSxhcmd1bWVudHMubGVuZ3RoPDMm
JihjPW8pO3ZhciBzPXVbMV08dVswXSxsPXVbcy0wXSxmPXVbMS1zXSxoPU1hdGguZmxvb3IoKGYt
bCkvKG4ubGVuZ3RoLW8rMipjKSksZz1mLWwtKG4ubGVuZ3RoLW8pKmg7cmV0dXJuIGk9cihsK01h
dGgucm91bmQoZy8yKSxoKSxzJiZpLnJldmVyc2UoKSxhPU1hdGgucm91bmQoaCooMS1vKSksdD17
dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmQ9ZnVuY3Rpb24o
KXtyZXR1cm4gYX0sZS5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBMaSh0LmFbMF0pfSxl
LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQmkobix0KX0sZS5kb21haW4obil9ZnVuY3Rpb24gV2ko
ZSxyKXtmdW5jdGlvbiB1KCl7dmFyIG49MCx0PXIubGVuZ3RoO2ZvcihvPVtdOysrbjx0OylvW24t
MV09Wm8ucXVhbnRpbGUoZSxuL3QpO3JldHVybiBpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGlzTmFO
KG49K24pP3ZvaWQgMDpyW1pvLmJpc2VjdChvLG4pXX12YXIgbztyZXR1cm4gaS5kb21haW49ZnVu
Y3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ci5maWx0ZXIodCkuc29ydChuKSx1
KCkpOmV9LGkucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1
KCkpOnJ9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGkuaW52ZXJ0RXh0ZW50PWZ1
bmN0aW9uKG4pe3JldHVybiBuPXIuaW5kZXhPZihuKSwwPm4/WzAvMCwwLzBdOltuPjA/b1tuLTFd
OmVbMF0sbjxvLmxlbmd0aD9vW25dOmVbZS5sZW5ndGgtMV1dfSxpLmNvcHk9ZnVuY3Rpb24oKXty
ZXR1cm4gV2koZSxyKX0sdSgpfWZ1bmN0aW9uIEppKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVy
biBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9u
IHUoKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxvO3JldHVy
biByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0
PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3Jl
dHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVu
Y3Rpb24oKXtyZXR1cm4gSmkobix0LGUpfSx1KCl9ZnVuY3Rpb24gR2kobix0KXtmdW5jdGlvbiBl
KGUpe3JldHVybiBlPj1lP3RbWm8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRl
bnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29w
eT1mdW5jdGlvbigpe3JldHVybiBHaShuLHQpfSxlfWZ1bmN0aW9uIEtpKG4pe2Z1bmN0aW9uIHQo
bil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihl
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0
aW9uKHQpe3JldHVybiBPaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4g
WWkobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS2kobil9LHR9ZnVuY3Rpb24gUWko
bil7cmV0dXJuIG4uaW5uZXJSYWRpdXN9ZnVuY3Rpb24gbm8obil7cmV0dXJuIG4ub3V0ZXJSYWRp
dXN9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiBlbyhuKXtyZXR1
cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiBybyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIG8oKXtz
LnB1c2goIk0iLGkobihsKSxhKSl9Zm9yKHZhciBjLHM9W10sbD1bXSxmPS0xLGg9dC5sZW5ndGgs
Zz1idChlKSxwPWJ0KHIpOysrZjxoOyl1LmNhbGwodGhpcyxjPXRbZl0sZik/bC5wdXNoKFsrZy5j
YWxsKHRoaXMsYyxmKSwrcC5jYWxsKHRoaXMsYyxmKV0pOmwubGVuZ3RoJiYobygpLGw9W10pO3Jl
dHVybiBsLmxlbmd0aCYmbygpLHMubGVuZ3RoP3Muam9pbigiIik6bnVsbH12YXIgZT13cixyPVNy
LHU9d2UsaT11byxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8odT1uLHQpOnV9LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPXhzLmdldChuKXx8dW8p
LmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
KGE9bix0KTphfSx0fWZ1bmN0aW9uIHVvKG4pe3JldHVybiBuLmpvaW4oIkwiKX1mdW5jdGlvbiBp
byhuKXtyZXR1cm4gdW8obikrIloifWZ1bmN0aW9uIG9vKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5n
dGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5b
dF0pWzBdKS8yLCJWIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigi
Iil9ZnVuY3Rpb24gYW8obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1bclswXSwi
LCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgiLHJbMF0pO3JldHVybiB1
LmpvaW4oIiIpfWZ1bmN0aW9uIGNvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9
W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTty
ZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiBzbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P3VvKG4p
Om5bMV0raG8obi5zbGljZSgxLG4ubGVuZ3RoLTEpLGdvKG4sdCkpfWZ1bmN0aW9uIGxvKG4sdCl7
cmV0dXJuIG4ubGVuZ3RoPDM/dW8obik6blswXStobygobi5wdXNoKG5bMF0pLG4pLGdvKFtuW24u
bGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5jdGlvbiBmbyhuLHQpe3JldHVybiBu
Lmxlbmd0aDwzP3VvKG4pOm5bMF0raG8obixnbyhuLHQpKX1mdW5jdGlvbiBobyhuLHQpe2lmKHQu
bGVuZ3RoPDF8fG4ubGVuZ3RoIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJu
IHVvKG4pO3ZhciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBd
LGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFdLTIqb1sxXS8z
KSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0aD4xKXthPXRbMV0saT1uW2Nd
LGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1WzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsi
LCIrKGlbMV0tYVsxXSkrIiwiK2lbMF0rIiwiK2lbMV07Zm9yKHZhciBzPTI7czx0Lmxlbmd0aDtz
KyssYysrKWk9bltjXSxhPXRbc10scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsi
LCIraVswXSsiLCIraVsxXX1pZihlKXt2YXIgbD1uW2NdO3IrPSJRIisoaVswXSsyKmFbMF0vMykr
IiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrbFswXSsiLCIrbFsxXX1yZXR1cm4gcn1mdW5jdGlvbiBn
byhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixpPW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVu
Z3RoOysrYTxjOyllPWksaT1vLG89blthXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1l
WzFdKV0pO3JldHVybiByfWZ1bmN0aW9uIHBvKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIHVvKG4p
O3ZhciB0PTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1uWzFd
KVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIseG8oYnMsbyksIiwiLHhvKGJzLGEp
XTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0sby5zaGlmdCgpLG8ucHVzaChyWzBd
KSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLE1vKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2go
IkwiLHIpLGMuam9pbigiIil9ZnVuY3Rpb24gdm8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gdW8o
bik7Zm9yKHZhciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5b
cl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKHhvKGJzLGkpKyIsIit4byhi
cyxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVzaCh0WzBdKSxvLnNoaWZ0KCks
by5wdXNoKHRbMV0pLE1vKGUsaSxvKTtyZXR1cm4gZS5qb2luKCIiKX1mdW5jdGlvbiBtbyhuKXtm
b3IodmFyIHQsZSxyPS0xLHU9bi5sZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1
XSxvLnB1c2goZVswXSksYS5wdXNoKGVbMV0pO2Zvcih0PVt4byhicyxvKSwiLCIseG8oYnMsYSld
LC0tcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0KCksYS5w
dXNoKGVbMV0pLE1vKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiB5byhuLHQpe3Zh
ciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxpPW5bMF1bMF0sbz1uWzBdWzFdLGE9bltl
XVswXS1pLGM9bltlXVsxXS1vLHM9LTE7KytzPD1lOylyPW5bc10sdT1zL2UsclswXT10KnJbMF0r
KDEtdCkqKGkrdSphKSxyWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiBwbyhuKX1mdW5j
dGlvbiB4byhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNdKnRb
M119ZnVuY3Rpb24gTW8obix0LGUpe24ucHVzaCgiQyIseG8oTXMsdCksIiwiLHhvKE1zLGUpLCIs
Iix4byhfcyx0KSwiLCIseG8oX3MsZSksIiwiLHhvKGJzLHQpLCIsIix4byhicyxlKSl9ZnVuY3Rp
b24gX28obix0KXtyZXR1cm4odFsxXS1uWzFdKS8odFswXS1uWzBdKX1mdW5jdGlvbiBibyhuKXtm
b3IodmFyIHQ9MCxlPW4ubGVuZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT1fbyh1LGkp
OysrdDxlOylyW3RdPShvKyhvPV9vKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1m
dW5jdGlvbiB3byhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPWJvKG4pLGE9LTEsYz1uLmxlbmd0
aC0xOysrYTxjOyl0PV9vKG5bYV0sblthKzFdKSx1YSh0KTxrYT9vW2FdPW9bYSsxXT0wOihlPW9b
YV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1PjkmJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11
KmUsb1thKzFdPXUqcikpO2ZvcihhPS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBd
LW5bTWF0aC5tYXgoMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9b
YV0qdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIFNvKG4pe3JldHVybiBuLmxlbmd0aDwzP3VvKG4p
Om5bMF0raG8obix3byhuKSl9ZnVuY3Rpb24ga28obil7Zm9yKHZhciB0LGUscix1PS0xLGk9bi5s
ZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFdK21zLHRbMF09ZSpNYXRoLmNvcyhyKSx0
WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJuIG59ZnVuY3Rpb24gRW8obil7ZnVuY3Rpb24gdCh0KXtm
dW5jdGlvbiBjKCl7di5wdXNoKCJNIixhKG4obSksZiksbCxzKG4oZC5yZXZlcnNlKCkpLGYpLCJa
Iil9Zm9yKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1idChlKSxf
PWJ0KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306YnQociksdz11PT09aT9mdW5jdGlv
bigpe3JldHVybiBwfTpidChpKTsrK3k8eDspby5jYWxsKHRoaXMsaD10W3ldLHkpPyhkLnB1c2go
W2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5jYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2Fs
bCh0aGlzLGgseSksK3cuY2FsbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtd
KTtyZXR1cm4gZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9d3Is
cj13cix1PTAsaT1TcixvPXdlLGE9dW8sYz1hLmtleSxzPWEsbD0iTCIsZj0uNztyZXR1cm4gdC54
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9bix0KTpyfSx0LngwPWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlv
bihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFy
Z3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT14cy5nZXQo
bil8fHVvKS5rZXkscz1hLnJldmVyc2V8fGEsbD1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVu
c2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9ZnVu
Y3Rpb24gQW8obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIENvKG4pe3JldHVybltuLngsbi55
XX1mdW5jdGlvbiBObyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKSxlPXRbMF0scj10WzFdK21zO3JldHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4o
cildfX1mdW5jdGlvbiB6bygpe3JldHVybiA2NH1mdW5jdGlvbiBMbygpe3JldHVybiJjaXJjbGUi
fWZ1bmN0aW9uIFRvKG4pe3ZhciB0PU1hdGguc3FydChuL2JhKTtyZXR1cm4iTTAsIit0KyJBIit0
KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWZ1bmN0
aW9uIHFvKG4sdCl7cmV0dXJuIHNhKG4sQ3MpLG4uaWQ9dCxufWZ1bmN0aW9uIFJvKG4sdCxlLHIp
e3ZhciB1PW4uaWQ7cmV0dXJuIFAobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGks
byl7bi5fX3RyYW5zaXRpb25fX1t1XS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18s
aSxvKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0
KHQsZSl9KSl9ZnVuY3Rpb24gRG8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigp
e3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUG8obix0LGUscil7dmFyIHU9bi5fX3RyYW5z
aXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2ZTowLGNvdW50OjB9KSxpPXVbZV07aWYo
IWkpe3ZhciBhPXIudGltZTtpPXVbZV09e3R3ZWVuOm5ldyBvLHRpbWU6YSxlYXNlOnIuZWFzZSxk
ZWxheTpyLmRlbGF5LGR1cmF0aW9uOnIuZHVyYXRpb259LCsrdS5jb3VudCxaby50aW1lcihmdW5j
dGlvbihyKXtmdW5jdGlvbiBvKHIpe3JldHVybiB1LmFjdGl2ZT5lP3MoKToodS5hY3RpdmU9ZSxp
LmV2ZW50JiZpLmV2ZW50LnN0YXJ0LmNhbGwobixsLHQpLGkudHdlZW4uZm9yRWFjaChmdW5jdGlv
bihlLHIpeyhyPXIuY2FsbChuLGwsdCkpJiZ2LnB1c2gocil9KSxaby50aW1lcihmdW5jdGlvbigp
e3JldHVybiBwLmM9YyhyfHwxKT93ZTpjLDF9LDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lm
KHUuYWN0aXZlIT09ZSlyZXR1cm4gcygpO2Zvcih2YXIgbz1yL2csYT1mKG8pLGM9di5sZW5ndGg7
Yz4wOyl2Wy0tY10uY2FsbChuLGEpOwotcmV0dXJuIG8+PTE/KGkuZXZlbnQmJmkuZXZlbnQuZW5k
LmNhbGwobixsLHQpLHMoKSk6dm9pZCAwfWZ1bmN0aW9uIHMoKXtyZXR1cm4tLXUuY291bnQ/ZGVs
ZXRlIHVbZV06ZGVsZXRlIG4uX190cmFuc2l0aW9uX18sMX12YXIgbD1uLl9fZGF0YV9fLGY9aS5l
YXNlLGg9aS5kZWxheSxnPWkuZHVyYXRpb24scD1CYSx2PVtdO3JldHVybiBwLnQ9aCthLHI+PWg/
byhyLWgpOihwLmM9byx2b2lkIDApfSwwLGEpfX1mdW5jdGlvbiBVbyhuLHQpe24uYXR0cigidHJh
bnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrdChuKSsiLDApIn0pfWZ1bmN0
aW9uIGpvKG4sdCl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3JldHVybiJ0cmFuc2xh
dGUoMCwiK3QobikrIikifSl9ZnVuY3Rpb24gSG8obil7cmV0dXJuIG4udG9JU09TdHJpbmcoKX1m
dW5jdGlvbiBGbyhuLHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiB1KG4s
ZSl7dmFyIHI9blsxXS1uWzBdLHU9ci9lLGk9Wm8uYmlzZWN0KFVzLHUpO3JldHVybiBpPT1Vcy5s
ZW5ndGg/W3QueWVhcixGaShuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi8zMTUzNmU2fSksZSlb
Ml1dOmk/dFt1L1VzW2ktMV08VXNbaV0vdT9pLTE6aV06W0ZzLEZpKG4sZSlbMl1dfXJldHVybiBy
LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gT28obi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5j
dGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4odCkscik6bi5kb21haW4o
KS5tYXAoT28pfSxyLm5pY2U9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiFpc05h
TihlKSYmIW4ucmFuZ2UoZSxPbygrZSsxKSx0KS5sZW5ndGh9dmFyIGk9ci5kb21haW4oKSxvPUxp
KGkpLGE9bnVsbD09bj91KG8sMTApOiJudW1iZXIiPT10eXBlb2YgbiYmdShvLG4pO3JldHVybiBh
JiYobj1hWzBdLHQ9YVsxXSksci5kb21haW4oUmkoaSx0PjE/e2Zsb29yOmZ1bmN0aW9uKHQpe2Zv
cig7ZSh0PW4uZmxvb3IodCkpOyl0PU9vKHQtMSk7cmV0dXJuIHR9LGNlaWw6ZnVuY3Rpb24odCl7
Zm9yKDtlKHQ9bi5jZWlsKHQpKTspdD1PbygrdCsxKTtyZXR1cm4gdH19Om4pKX0sci50aWNrcz1m
dW5jdGlvbihuLHQpe3ZhciBlPUxpKHIuZG9tYWluKCkpLGk9bnVsbD09bj91KGUsMTApOiJudW1i
ZXIiPT10eXBlb2Ygbj91KGUsbik6IW4ucmFuZ2UmJlt7cmFuZ2U6bn0sdF07cmV0dXJuIGkmJihu
PWlbMF0sdD1pWzFdKSxuLnJhbmdlKGVbMF0sT28oK2VbMV0rMSksMT50PzE6dCl9LHIudGlja0Zv
cm1hdD1mdW5jdGlvbigpe3JldHVybiBlfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRm8obi5j
b3B5KCksdCxlKX0samkocixuKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVu
Y3Rpb24gWW8obil7cmV0dXJuIEpTT04ucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIElv
KG4pe3ZhciB0PSRvLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIHQuc2VsZWN0Tm9kZSgkby5ib2R5KSx0
LmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChuLnJlc3BvbnNlVGV4dCl9dmFyIFpvPXt2ZXJzaW9u
OiIzLjQuMTEifTtEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRl
fSk7dmFyIFZvPVtdLnNsaWNlLFhvPWZ1bmN0aW9uKG4pe3JldHVybiBWby5jYWxsKG4pfSwkbz1k
b2N1bWVudCxCbz0kby5kb2N1bWVudEVsZW1lbnQsV289d2luZG93O3RyeXtYbyhCby5jaGlsZE5v
ZGVzKVswXS5ub2RlVHlwZX1jYXRjaChKbyl7WG89ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVu
Z3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1uW3RdO3JldHVybiBlfX10cnl7JG8uY3JlYXRl
RWxlbWVudCgiZGl2Iikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKEdv
KXt2YXIgS289V28uRWxlbWVudC5wcm90b3R5cGUsUW89S28uc2V0QXR0cmlidXRlLG5hPUtvLnNl
dEF0dHJpYnV0ZU5TLHRhPVdvLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLGVhPXRhLnNl
dFByb3BlcnR5O0tvLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe1FvLmNhbGwodGhpcyxuLHQr
IiIpfSxLby5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihuLHQsZSl7bmEuY2FsbCh0aGlzLG4sdCxl
KyIiKX0sdGEuc2V0UHJvcGVydHk9ZnVuY3Rpb24obix0LGUpe2VhLmNhbGwodGhpcyxuLHQrIiIs
ZSl9fVpvLmFzY2VuZGluZz1uLFpvLmRlc2NlbmRpbmc9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj50
Py0xOnQ+bj8xOnQ+PW4/MDowLzB9LFpvLm1pbj1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdT0tMSxp
PW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrdTxpJiYhKG51bGwhPShl
PW5bdV0pJiZlPj1lKTspZT12b2lkIDA7Zm9yKDsrK3U8aTspbnVsbCE9KHI9blt1XSkmJmU+ciYm
KGU9cil9ZWxzZXtmb3IoOysrdTxpJiYhKG51bGwhPShlPXQuY2FsbChuLG5bdV0sdSkpJiZlPj1l
KTspZT12b2lkIDA7Zm9yKDsrK3U8aTspbnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJmU+ciYm
KGU9cil9cmV0dXJuIGV9LFpvLm1heD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdT0tMSxpPW4ubGVu
Z3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrdTxpJiYhKG51bGwhPShlPW5bdV0p
JiZlPj1lKTspZT12b2lkIDA7Zm9yKDsrK3U8aTspbnVsbCE9KHI9blt1XSkmJnI+ZSYmKGU9cil9
ZWxzZXtmb3IoOysrdTxpJiYhKG51bGwhPShlPXQuY2FsbChuLG5bdV0sdSkpJiZlPj1lKTspZT12
b2lkIDA7Zm9yKDsrK3U8aTspbnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJnI+ZSYmKGU9cil9
cmV0dXJuIGV9LFpvLmV4dGVudD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdSxpPS0xLG89bi5sZW5n
dGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPG8mJiEobnVsbCE9KGU9dT1uW2ld
KSYmZT49ZSk7KWU9dT12b2lkIDA7Zm9yKDsrK2k8bzspbnVsbCE9KHI9bltpXSkmJihlPnImJihl
PXIpLHI+dSYmKHU9cikpfWVsc2V7Zm9yKDsrK2k8byYmIShudWxsIT0oZT11PXQuY2FsbChuLG5b
aV0saSkpJiZlPj1lKTspZT12b2lkIDA7Zm9yKDsrK2k8bzspbnVsbCE9KHI9dC5jYWxsKG4sbltp
XSxpKSkmJihlPnImJihlPXIpLHI+dSYmKHU9cikpfXJldHVybltlLHVdfSxaby5zdW09ZnVuY3Rp
b24obix0KXt2YXIgZSxyPTAsdT1uLmxlbmd0aCxpPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3Ro
KWZvcig7KytpPHU7KWlzTmFOKGU9K25baV0pfHwocis9ZSk7ZWxzZSBmb3IoOysraTx1Oylpc05h
TihlPSt0LmNhbGwobixuW2ldLGkpKXx8KHIrPWUpO3JldHVybiByfSxaby5tZWFuPWZ1bmN0aW9u
KG4sZSl7dmFyIHIsdT0wLGk9bi5sZW5ndGgsbz0tMSxhPWk7aWYoMT09PWFyZ3VtZW50cy5sZW5n
dGgpZm9yKDsrK288aTspdChyPW5bb10pP3UrPXI6LS1hO2Vsc2UgZm9yKDsrK288aTspdChyPWUu
Y2FsbChuLG5bb10sbykpP3UrPXI6LS1hO3JldHVybiBhP3UvYTp2b2lkIDB9LFpvLnF1YW50aWxl
PWZ1bmN0aW9uKG4sdCl7dmFyIGU9KG4ubGVuZ3RoLTEpKnQrMSxyPU1hdGguZmxvb3IoZSksdT0r
bltyLTFdLGk9ZS1yO3JldHVybiBpP3UraSoobltyXS11KTp1fSxaby5tZWRpYW49ZnVuY3Rpb24o
ZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoZT1lLm1hcChyKSksZT1lLmZpbHRlcih0
KSxlLmxlbmd0aD9aby5xdWFudGlsZShlLnNvcnQobiksLjUpOnZvaWQgMH07dmFyIHJhPWUobik7
Wm8uYmlzZWN0TGVmdD1yYS5sZWZ0LFpvLmJpc2VjdD1aby5iaXNlY3RSaWdodD1yYS5yaWdodCxa
by5iaXNlY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm4gZSgxPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSxy
KXtyZXR1cm4gbih0KGUpLHIpfTp0KX0sWm8uc2h1ZmZsZT1mdW5jdGlvbihuKXtmb3IodmFyIHQs
ZSxyPW4ubGVuZ3RoO3I7KWU9MHxNYXRoLnJhbmRvbSgpKnItLSx0PW5bcl0sbltyXT1uW2VdLG5b
ZV09dDtyZXR1cm4gbn0sWm8ucGVybXV0ZT1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZT10Lmxlbmd0
aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09blt0W2VdXTtyZXR1cm4gcn0sWm8ucGFpcnM9ZnVu
Y3Rpb24obil7Zm9yKHZhciB0LGU9MCxyPW4ubGVuZ3RoLTEsdT1uWzBdLGk9bmV3IEFycmF5KDA+
cj8wOnIpO3I+ZTspaVtlXT1bdD11LHU9blsrK2VdXTtyZXR1cm4gaX0sWm8uemlwPWZ1bmN0aW9u
KCl7aWYoISh1PWFyZ3VtZW50cy5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSx0PVpvLm1p
bihhcmd1bWVudHMsciksZT1uZXcgQXJyYXkodCk7KytuPHQ7KWZvcih2YXIgdSxpPS0xLG89ZVtu
XT1uZXcgQXJyYXkodSk7KytpPHU7KW9baV09YXJndW1lbnRzW2ldW25dO3JldHVybiBlfSxaby50
cmFuc3Bvc2U9ZnVuY3Rpb24obil7cmV0dXJuIFpvLnppcC5hcHBseShabyxuKX0sWm8ua2V5cz1m
dW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goZSk7cmV0dXJuIHR9LFpv
LnZhbHVlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2gobltlXSk7
cmV0dXJuIHR9LFpvLmVudHJpZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4p
dC5wdXNoKHtrZXk6ZSx2YWx1ZTpuW2VdfSk7cmV0dXJuIHR9LFpvLm1lcmdlPWZ1bmN0aW9uKG4p
e2Zvcih2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPS0xLG89MDsrK2k8dTspbys9bltpXS5sZW5ndGg7
Zm9yKGU9bmV3IEFycmF5KG8pOy0tdT49MDspZm9yKHI9blt1XSx0PXIubGVuZ3RoOy0tdD49MDsp
ZVstLW9dPXJbdF07cmV0dXJuIGV9O3ZhciB1YT1NYXRoLmFicztaby5yYW5nZT1mdW5jdGlvbihu
LHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYoZT0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9
bixuPTApKSwxLzA9PT0odC1uKS9lKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2
YXIgcixpPVtdLG89dSh1YShlKSksYT0tMTtpZihuKj1vLHQqPW8sZSo9bywwPmUpZm9yKDsocj1u
K2UqKythKT50OylpLnB1c2goci9vKTtlbHNlIGZvcig7KHI9bitlKisrYSk8dDspaS5wdXNoKHIv
byk7cmV0dXJuIGl9LFpvLm1hcD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgbztpZihuIGluc3RhbmNl
b2YgbyluLmZvckVhY2goZnVuY3Rpb24obixlKXt0LnNldChuLGUpfSk7ZWxzZSBmb3IodmFyIGUg
aW4gbil0LnNldChlLG5bZV0pO3JldHVybiB0fSxpKG8se2hhczphLGdldDpmdW5jdGlvbihuKXty
ZXR1cm4gdGhpc1tpYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNbaWErbl09dH0s
cmVtb3ZlOmMsa2V5czpzLHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZv
ckVhY2goZnVuY3Rpb24odCxlKXtuLnB1c2goZSl9KSxufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFy
IG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaCh7a2V5OnQsdmFs
dWU6ZX0pfSksbn0sc2l6ZTpsLGVtcHR5OmYsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQg
aW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1vYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSks
dGhpc1t0XSl9fSk7dmFyIGlhPSJceDAwIixvYT1pYS5jaGFyQ29kZUF0KDApO1pvLm5lc3Q9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBuKHQsYSxjKXtpZihjPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwo
dSxhKTplP2Euc29ydChlKTphO2Zvcih2YXIgcyxsLGYsaCxnPS0xLHA9YS5sZW5ndGgsdj1pW2Mr
K10sZD1uZXcgbzsrK2c8cDspKGg9ZC5nZXQocz12KGw9YVtnXSkpKT9oLnB1c2gobCk6ZC5zZXQo
cyxbbF0pO3JldHVybiB0PyhsPXQoKSxmPWZ1bmN0aW9uKGUscil7bC5zZXQoZSxuKHQscixjKSl9
KToobD17fSxmPWZ1bmN0aW9uKGUscil7bFtlXT1uKHQscixjKX0pLGQuZm9yRWFjaChmKSxsfWZ1
bmN0aW9uIHQobixlKXtpZihlPj1pLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1bXSx1PWFbZSsrXTty
ZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4sdSl7ci5wdXNoKHtrZXk6bix2YWx1ZXM6dCh1LGUp
fSl9KSx1P3Iuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1KG4ua2V5LHQua2V5KX0pOnJ9dmFy
IGUscix1PXt9LGk9W10sYT1bXTtyZXR1cm4gdS5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihl
LHQsMCl9LHUuZW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gdChuKFpvLm1hcCxlLDApLDApfSx1
LmtleT1mdW5jdGlvbihuKXtyZXR1cm4gaS5wdXNoKG4pLHV9LHUuc29ydEtleXM9ZnVuY3Rpb24o
bil7cmV0dXJuIGFbaS5sZW5ndGgtMV09bix1fSx1LnNvcnRWYWx1ZXM9ZnVuY3Rpb24obil7cmV0
dXJuIGU9bix1fSx1LnJvbGx1cD1mdW5jdGlvbihuKXtyZXR1cm4gcj1uLHV9LHV9LFpvLnNldD1m
dW5jdGlvbihuKXt2YXIgdD1uZXcgaDtpZihuKWZvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lOysr
ZSl0LmFkZChuW2VdKTtyZXR1cm4gdH0saShoLHtoYXM6YSxhZGQ6ZnVuY3Rpb24obil7cmV0dXJu
IHRoaXNbaWErbl09ITAsbn0scmVtb3ZlOmZ1bmN0aW9uKG4pe3JldHVybiBuPWlhK24sbiBpbiB0
aGlzJiZkZWxldGUgdGhpc1tuXX0sdmFsdWVzOnMsc2l6ZTpsLGVtcHR5OmYsZm9yRWFjaDpmdW5j
dGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1vYSYmbi5jYWxsKHRo
aXMsdC5zdWJzdHJpbmcoMSkpfX0pLFpvLmJlaGF2aW9yPXt9LFpvLnJlYmluZD1mdW5jdGlvbihu
LHQpe2Zvcih2YXIgZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRz
W3JdXT1nKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIGFhPVsid2Via2l0IiwibXMiLCJtb3oiLCJN
b3oiLCJvIiwiTyJdO1pvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBkLHQ9LTEs
ZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3VtZW50c1t0XV09bShuKTtyZXR1cm4gbn0s
ZC5wcm90b3R5cGUub249ZnVuY3Rpb24obix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lm
KGU+PTAmJihyPW4uc3Vic3RyaW5nKGUrMSksbj1uLnN1YnN0cmluZygwLGUpKSxuKXJldHVybiBh
cmd1bWVudHMubGVuZ3RoPDI/dGhpc1tuXS5vbihyKTp0aGlzW25dLm9uKHIsdCk7aWYoMj09PWFy
Z3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKG4gaW4gdGhpcyl0aGlzLmhhc093blByb3Bl
cnR5KG4pJiZ0aGlzW25dLm9uKHIsbnVsbCk7cmV0dXJuIHRoaXN9fSxaby5ldmVudD1udWxsLFpv
LnJlcXVvdGU9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShjYSwiXFwkJiIpfTt2YXIgY2E9
L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLHNhPXt9Ll9fcHJvdG9fXz9mdW5jdGlv
bihuLHQpe24uX19wcm90b19fPXR9OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10
W2VdfSxsYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3Iobil9LGZhPWZ1bmN0
aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChuKX0saGE9Qm8ubWF0Y2hlc3x8Qm9b
cChCbywibWF0Y2hlc1NlbGVjdG9yIildLGdhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGhhLmNhbGwo
bix0KX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKGxhPWZ1bmN0aW9uKG4sdCl7cmV0dXJu
IFNpenpsZShuLHQpWzBdfHxudWxsfSxmYT1TaXp6bGUsZ2E9U2l6emxlLm1hdGNoZXNTZWxlY3Rv
ciksWm8uc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG1hfTt2YXIgcGE9Wm8uc2VsZWN0aW9u
LnByb3RvdHlwZT1bXTtwYS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaT1bXTtuPWIo
bik7Zm9yKHZhciBvPS0xLGE9dGhpcy5sZW5ndGg7KytvPGE7KXtpLnB1c2godD1bXSksdC5wYXJl
bnROb2RlPShyPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHM9ci5sZW5ndGg7Kytj
PHM7KSh1PXJbY10pPyh0LnB1c2goZT1uLmNhbGwodSx1Ll9fZGF0YV9fLGMsbykpLGUmJiJfX2Rh
dGFfXyJpbiB1JiYoZS5fX2RhdGFfXz11Ll9fZGF0YV9fKSk6dC5wdXNoKG51bGwpfXJldHVybiBf
KGkpfSxwYS5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxyPVtdO249dyhuKTtmb3IodmFy
IHU9LTEsaT10aGlzLmxlbmd0aDsrK3U8aTspZm9yKHZhciBvPXRoaXNbdV0sYT0tMSxjPW8ubGVu
Z3RoOysrYTxjOykoZT1vW2FdKSYmKHIucHVzaCh0PVhvKG4uY2FsbChlLGUuX19kYXRhX18sYSx1
KSkpLHQucGFyZW50Tm9kZT1lKTtyZXR1cm4gXyhyKX07dmFyIHZhPXtzdmc6Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxp
bms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcv
WE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8i
fTtaby5ucz17cHJlZml4OnZhLHF1YWxpZnk6ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCI6
IiksZT1uO3JldHVybiB0Pj0wJiYoZT1uLnN1YnN0cmluZygwLHQpLG49bi5zdWJzdHJpbmcodCsx
KSksdmEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOnZhW2VdLGxvY2FsOm59Om59fSxwYS5hdHRy
PWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9m
IG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPVpvLm5zLnF1YWxpZnkobiksbi5sb2NhbD9l
LmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQg
aW4gbil0aGlzLmVhY2goUyh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFMo
bix0KSl9LHBhLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lm
KCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1BKG4pKS5sZW5ndGgs
dT0tMTtpZih0PWUuY2xhc3NMaXN0KXtmb3IoOysrdTxyOylpZighdC5jb250YWlucyhuW3VdKSly
ZXR1cm4hMX1lbHNlIGZvcih0PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrdTxyOylpZighRShu
W3VdKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIG4pdGhpcy5lYWNoKEModCxu
W3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChDKG4sdCkpfSxwYS5zdHlsZT1mdW5j
dGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10
eXBlb2Ygbil7Mj5yJiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLmVhY2goeihlLG5bZV0sdCkpO3Jl
dHVybiB0aGlzfWlmKDI+cilyZXR1cm4gV28uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5vZGUoKSxu
dWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO2U9IiJ9cmV0dXJuIHRoaXMuZWFjaCh6KG4sdCxlKSl9
LHBhLnByb3BlcnR5PWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3Ry
aW5nIj09dHlwZW9mIG4pcmV0dXJuIHRoaXMubm9kZSgpW25dO2Zvcih0IGluIG4pdGhpcy5lYWNo
KEwodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChMKG4sdCkpfSxwYS50ZXh0
PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24i
PT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMu
dGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fTpudWxsPT1uP2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29u
dGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59KTp0aGlzLm5vZGUoKS50ZXh0
Q29udGVudH0scGEuaHRtbD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlz
LmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMs
YXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24o
KXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1ufSk6dGhpcy5u
b2RlKCkuaW5uZXJIVE1MfSxwYS5hcHBlbmQ9ZnVuY3Rpb24obil7cmV0dXJuIG49VChuKSx0aGlz
LnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxh
cmd1bWVudHMpKX0pfSxwYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1UKG4pLHQ9Yih0
KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scGEucmVt
b3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFy
ZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSl9LHBhLmRhdGE9ZnVuY3Rpb24obix0KXtm
dW5jdGlvbiBlKG4sZSl7dmFyIHIsdSxpLGE9bi5sZW5ndGgsZj1lLmxlbmd0aCxoPU1hdGgubWlu
KGEsZiksZz1uZXcgQXJyYXkoZikscD1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoYSk7aWYodCl7
dmFyIGQsbT1uZXcgbyx5PW5ldyBvLHg9W107Zm9yKHI9LTE7KytyPGE7KWQ9dC5jYWxsKHU9blty
XSx1Ll9fZGF0YV9fLHIpLG0uaGFzKGQpP3Zbcl09dTptLnNldChkLHUpLHgucHVzaChkKTtmb3Io
cj0tMTsrK3I8ZjspZD10LmNhbGwoZSxpPWVbcl0sciksKHU9bS5nZXQoZCkpPyhnW3JdPXUsdS5f
X2RhdGFfXz1pKTp5LmhhcyhkKXx8KHBbcl09cShpKSkseS5zZXQoZCxpKSxtLnJlbW92ZShkKTtm
b3Iocj0tMTsrK3I8YTspbS5oYXMoeFtyXSkmJih2W3JdPW5bcl0pfWVsc2V7Zm9yKHI9LTE7Kyty
PGg7KXU9bltyXSxpPWVbcl0sdT8odS5fX2RhdGFfXz1pLGdbcl09dSk6cFtyXT1xKGkpO2Zvcig7
Zj5yOysrcilwW3JdPXEoZVtyXSk7Zm9yKDthPnI7KytyKXZbcl09bltyXX1wLnVwZGF0ZT1nLHAu
cGFyZW50Tm9kZT1nLnBhcmVudE5vZGU9di5wYXJlbnROb2RlPW4ucGFyZW50Tm9kZSxjLnB1c2go
cCkscy5wdXNoKGcpLGwucHVzaCh2KX12YXIgcix1LGk9LTEsYT10aGlzLmxlbmd0aDtpZighYXJn
dW1lbnRzLmxlbmd0aCl7Zm9yKG49bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2k8
YTspKHU9cltpXSkmJihuW2ldPXUuX19kYXRhX18pO3JldHVybiBufXZhciBjPVUoW10pLHM9Xyhb
XSksbD1fKFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbilmb3IoOysraTxhOyllKHI9dGhpc1tp
XSxuLmNhbGwocixyLnBhcmVudE5vZGUuX19kYXRhX18saSkpO2Vsc2UgZm9yKDsrK2k8YTspZShy
PXRoaXNbaV0sbik7cmV0dXJuIHMuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY30scy5leGl0PWZ1
bmN0aW9uKCl7cmV0dXJuIGx9LHN9LHBhLmRhdHVtPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLnByb3BlcnR5KCJfX2Rh
dGFfXyIpfSxwYS5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9W107ImZ1bmN0aW9uIiE9
dHlwZW9mIG4mJihuPVIobikpO2Zvcih2YXIgaT0wLG89dGhpcy5sZW5ndGg7bz5pO2krKyl7dS5w
dXNoKHQ9W10pLHQucGFyZW50Tm9kZT0oZT10aGlzW2ldKS5wYXJlbnROb2RlO2Zvcih2YXIgYT0w
LGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0
LnB1c2gocil9cmV0dXJuIF8odSl9LHBhLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHQ9
dGhpcy5sZW5ndGg7KytuPHQ7KWZvcih2YXIgZSxyPXRoaXNbbl0sdT1yLmxlbmd0aC0xLGk9clt1
XTstLXU+PTA7KShlPXJbdV0pJiYoaSYmaSE9PWUubmV4dFNpYmxpbmcmJmkucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUoZSxpKSxpPWUpO3JldHVybiB0aGlzfSxwYS5zb3J0PWZ1bmN0aW9uKG4pe249
RC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7
KXRoaXNbdF0uc29ydChuKTtyZXR1cm4gdGhpcy5vcmRlcigpfSxwYS5lYWNoPWZ1bmN0aW9uKG4p
e3JldHVybiBQKHRoaXMsZnVuY3Rpb24odCxlLHIpe24uY2FsbCh0LHQuX19kYXRhX18sZSxyKX0p
fSxwYS5jYWxsPWZ1bmN0aW9uKG4pe3ZhciB0PVhvKGFyZ3VtZW50cyk7cmV0dXJuIG4uYXBwbHko
dFswXT10aGlzLHQpLHRoaXN9LHBhLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgp
fSxwYS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsdD10aGlzLmxlbmd0aDt0Pm47bisrKWZv
cih2YXIgZT10aGlzW25dLHI9MCx1PWUubGVuZ3RoO3U+cjtyKyspe3ZhciBpPWVbcl07aWYoaSly
ZXR1cm4gaX1yZXR1cm4gbnVsbH0scGEuc2l6ZT1mdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59O3ZhciBkYT1bXTtaby5zZWxlY3Rpb24uZW50ZXI9
VSxaby5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWRhLGRhLmFwcGVuZD1wYS5hcHBlbmQsZGEu
ZW1wdHk9cGEuZW1wdHksZGEubm9kZT1wYS5ub2RlLGRhLmNhbGw9cGEuY2FsbCxkYS5zaXplPXBh
LnNpemUsZGEuc2VsZWN0PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG89W10sYT0tMSxj
PXRoaXMubGVuZ3RoOysrYTxjOyl7cj0odT10aGlzW2FdKS51cGRhdGUsby5wdXNoKHQ9W10pLHQu
cGFyZW50Tm9kZT11LnBhcmVudE5vZGU7Zm9yKHZhciBzPS0xLGw9dS5sZW5ndGg7KytzPGw7KShp
PXVbc10pPyh0LnB1c2gocltzXT1lPW4uY2FsbCh1LnBhcmVudE5vZGUsaS5fX2RhdGFfXyxzLGEp
KSxlLl9fZGF0YV9fPWkuX19kYXRhX18pOnQucHVzaChudWxsKX1yZXR1cm4gXyhvKX0sZGEuaW5z
ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9aih0aGlzKSks
cGEuaW5zZXJ0LmNhbGwodGhpcyxuLHQpfSxwYS50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZh
ciBuLHQsZT1Tc3x8KytOcyxyPVtdLHU9a3N8fHt0aW1lOkRhdGUubm93KCksZWFzZTp4dSxkZWxh
eTowLGR1cmF0aW9uOjI1MH0saT0tMSxvPXRoaXMubGVuZ3RoOysraTxvOyl7ci5wdXNoKG49W10p
O2Zvcih2YXIgYT10aGlzW2ldLGM9LTEscz1hLmxlbmd0aDsrK2M8czspKHQ9YVtjXSkmJlBvKHQs
YyxlLHUpLG4ucHVzaCh0KX1yZXR1cm4gcW8ocixlKX0scGEuaW50ZXJydXB0PWZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZWFjaChIKX0sWm8uc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0PVsic3RyaW5n
Ij09dHlwZW9mIG4/bGEobiwkbyk6bl07cmV0dXJuIHQucGFyZW50Tm9kZT1CbyxfKFt0XSl9LFpv
LnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdD1Ybygic3RyaW5nIj09dHlwZW9mIG4/ZmEobiwk
byk6bik7cmV0dXJuIHQucGFyZW50Tm9kZT1CbyxfKFt0XSl9O3ZhciBtYT1aby5zZWxlY3QoQm8p
O3BhLm9uPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7aWYo
InN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSExKTtmb3IoZSBpbiBuKXRoaXMuZWFjaChGKGUs
bltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybihyPXRoaXMubm9kZSgpWyJfX29uIitu
XSkmJnIuXztlPSExfXJldHVybiB0aGlzLmVhY2goRihuLHQsZSkpfTt2YXIgeWE9Wm8ubWFwKHtt
b3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO3lhLmZvckVhY2go
ZnVuY3Rpb24obil7Im9uIituIGluICRvJiZ5YS5yZW1vdmUobil9KTt2YXIgeGE9Im9uc2VsZWN0
c3RhcnQiaW4gJG8/bnVsbDpwKEJvLnN0eWxlLCJ1c2VyU2VsZWN0IiksTWE9MDtaby5tb3VzZT1m
dW5jdGlvbihuKXtyZXR1cm4gWihuLHgoKSl9O3ZhciBfYT0vV2ViS2l0Ly50ZXN0KFdvLm5hdmln
YXRvci51c2VyQWdlbnQpPy0xOjA7Wm8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPDImJih0PXgoKS50b3VjaGVzKSx0P1hvKHQpLm1hcChmdW5jdGlvbih0KXt2
YXIgZT1aKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0pOltdfSxaby5i
ZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMub24oIm1vdXNlZG93bi5k
cmFnIix1KS5vbigidG91Y2hzdGFydC5kcmFnIixpKX1mdW5jdGlvbiB0KG4sdCx1LGksbyl7cmV0
dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3ZhciBuLGUscj10KGgsdik7ciYmKG49clswXS14
WzBdLGU9clsxXS14WzFdLHB8PW58ZSx4PXIsZyh7dHlwZToiZHJhZyIseDpyWzBdK3NbMF0seTpy
WzFdK3NbMV0sZHg6bixkeTplfSkpfWZ1bmN0aW9uIGMoKXt0KGgsdikmJihtLm9uKGkrZCxudWxs
KS5vbihvK2QsbnVsbCkseShwJiZaby5ldmVudC50YXJnZXQ9PT1mKSxnKHt0eXBlOiJkcmFnZW5k
In0pKX12YXIgcyxsPXRoaXMsZj1aby5ldmVudC50YXJnZXQsaD1sLnBhcmVudE5vZGUsZz1lLm9m
KGwsYXJndW1lbnRzKSxwPTAsdj1uKCksZD0iLmRyYWciKyhudWxsPT12PyIiOiItIit2KSxtPVpv
LnNlbGVjdCh1KCkpLm9uKGkrZCxhKS5vbihvK2QsYykseT1JKCkseD10KGgsdik7cj8ocz1yLmFw
cGx5KGwsYXJndW1lbnRzKSxzPVtzLngteFswXSxzLnkteFsxXV0pOnM9WzAsMF0sZyh7dHlwZToi
ZHJhZ3N0YXJ0In0pfX12YXIgZT1NKG4sImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1u
dWxsLHU9dCh2LFpvLm1vdXNlLCQsIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxpPXQoVixaby50b3Vj
aCxYLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO3JldHVybiBuLm9yaWdpbj1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LFpvLnJlYmluZChuLGUsIm9uIil9O3Zh
ciBiYT1NYXRoLlBJLHdhPTIqYmEsU2E9YmEvMixrYT0xZS02LEVhPWthKmthLEFhPWJhLzE4MCxD
YT0xODAvYmEsTmE9TWF0aC5TUVJUMix6YT0yLExhPTQ7Wm8uaW50ZXJwb2xhdGVab29tPWZ1bmN0
aW9uKG4sdCl7ZnVuY3Rpb24gZShuKXt2YXIgdD1uKnk7aWYobSl7dmFyIGU9USh2KSxvPWkvKHph
KmgpKihlKm50KE5hKnQrdiktSyh2KSk7cmV0dXJuW3IrbypzLHUrbypsLGkqZS9RKE5hKnQrdild
fXJldHVybltyK24qcyx1K24qbCxpKk1hdGguZXhwKE5hKnQpXX12YXIgcj1uWzBdLHU9blsxXSxp
PW5bMl0sbz10WzBdLGE9dFsxXSxjPXRbMl0scz1vLXIsbD1hLXUsZj1zKnMrbCpsLGg9TWF0aC5z
cXJ0KGYpLGc9KGMqYy1pKmkrTGEqZikvKDIqaSp6YSpoKSxwPShjKmMtaSppLUxhKmYpLygyKmMq
emEqaCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpLGQ9TWF0aC5sb2coTWF0aC5zcXJ0
KHAqcCsxKS1wKSxtPWQtdix5PShtfHxNYXRoLmxvZyhjL2kpKS9OYTtyZXR1cm4gZS5kdXJhdGlv
bj0xZTMqeSxlfSxaby5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLm9u
KEEscykub24oUmErIi56b29tIixmKS5vbigiZGJsY2xpY2suem9vbSIsaCkub24oeixsKX1mdW5j
dGlvbiB0KG4pe3JldHVyblsoblswXS1TLngpL1MuaywoblsxXS1TLnkpL1Mua119ZnVuY3Rpb24g
ZShuKXtyZXR1cm5bblswXSpTLmsrUy54LG5bMV0qUy5rK1MueV19ZnVuY3Rpb24gcihuKXtTLms9
TWF0aC5tYXgoRVswXSxNYXRoLm1pbihFWzFdLG4pKX1mdW5jdGlvbiB1KG4sdCl7dD1lKHQpLFMu
eCs9blswXS10WzBdLFMueSs9blsxXS10WzFdfWZ1bmN0aW9uIGkoKXtfJiZfLmRvbWFpbih4LnJh
bmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLVMueCkvUy5rfSkubWFwKHguaW52ZXJ0KSks
dyYmdy5kb21haW4oYi5yYW5nZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1TLnkpL1Mua30p
Lm1hcChiLmludmVydCkpfWZ1bmN0aW9uIG8obil7bih7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0
aW9uIGEobil7aSgpLG4oe3R5cGU6Inpvb20iLHNjYWxlOlMuayx0cmFuc2xhdGU6W1MueCxTLnld
fSl9ZnVuY3Rpb24gYyhuKXtuKHt0eXBlOiJ6b29tZW5kIn0pfWZ1bmN0aW9uIHMoKXtmdW5jdGlv
biBuKCl7bD0xLHUoWm8ubW91c2UociksaCksYShzKX1mdW5jdGlvbiBlKCl7Zi5vbihDLG51bGwp
Lm9uKE4sbnVsbCksZyhsJiZaby5ldmVudC50YXJnZXQ9PT1pKSxjKHMpfXZhciByPXRoaXMsaT1a
by5ldmVudC50YXJnZXQscz1MLm9mKHIsYXJndW1lbnRzKSxsPTAsZj1aby5zZWxlY3QoV28pLm9u
KEMsbikub24oTixlKSxoPXQoWm8ubW91c2UocikpLGc9SSgpO0guY2FsbChyKSxvKHMpfWZ1bmN0
aW9uIGwoKXtmdW5jdGlvbiBuKCl7dmFyIG49Wm8udG91Y2hlcyhnKTtyZXR1cm4gaD1TLmssbi5m
b3JFYWNoKGZ1bmN0aW9uKG4pe24uaWRlbnRpZmllciBpbiB2JiYodltuLmlkZW50aWZpZXJdPXQo
bikpfSksbn1mdW5jdGlvbiBlKCl7dmFyIHQ9Wm8uZXZlbnQudGFyZ2V0O1pvLnNlbGVjdCh0KS5v
bihNLGkpLm9uKF8sZiksYi5wdXNoKHQpO2Zvcih2YXIgZT1aby5ldmVudC5jaGFuZ2VkVG91Y2hl
cyxvPTAsYz1lLmxlbmd0aDtjPm87KytvKXZbZVtvXS5pZGVudGlmaWVyXT1udWxsO3ZhciBzPW4o
KSxsPURhdGUubm93KCk7aWYoMT09PXMubGVuZ3RoKXtpZig1MDA+bC1tKXt2YXIgaD1zWzBdLGc9
dltoLmlkZW50aWZpZXJdO3IoMipTLmspLHUoaCxnKSx5KCksYShwKX1tPWx9ZWxzZSBpZihzLmxl
bmd0aD4xKXt2YXIgaD1zWzBdLHg9c1sxXSx3PWhbMF0teFswXSxrPWhbMV0teFsxXTtkPXcqdytr
Kmt9fWZ1bmN0aW9uIGkoKXtmb3IodmFyIG4sdCxlLGksbz1aby50b3VjaGVzKGcpLGM9MCxzPW8u
bGVuZ3RoO3M+YzsrK2MsaT1udWxsKWlmKGU9b1tjXSxpPXZbZS5pZGVudGlmaWVyXSl7aWYodCli
cmVhaztuPWUsdD1pfWlmKGkpe3ZhciBsPShsPWVbMF0tblswXSkqbCsobD1lWzFdLW5bMV0pKmws
Zj1kJiZNYXRoLnNxcnQobC9kKTtuPVsoblswXStlWzBdKS8yLChuWzFdK2VbMV0pLzJdLHQ9Wyh0
WzBdK2lbMF0pLzIsKHRbMV0raVsxXSkvMl0scihmKmgpfW09bnVsbCx1KG4sdCksYShwKX1mdW5j
dGlvbiBmKCl7aWYoWm8uZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgdD1aby5ldmVudC5j
aGFuZ2VkVG91Y2hlcyxlPTAscj10Lmxlbmd0aDtyPmU7KytlKWRlbGV0ZSB2W3RbZV0uaWRlbnRp
Zmllcl07Zm9yKHZhciB1IGluIHYpcmV0dXJuIHZvaWQgbigpfVpvLnNlbGVjdEFsbChiKS5vbih4
LG51bGwpLHcub24oQSxzKS5vbih6LGwpLGsoKSxjKHApfXZhciBoLGc9dGhpcyxwPUwub2YoZyxh
cmd1bWVudHMpLHY9e30sZD0wLHg9Ii56b29tLSIrWm8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0u
aWRlbnRpZmllcixNPSJ0b3VjaG1vdmUiK3gsXz0idG91Y2hlbmQiK3gsYj1bXSx3PVpvLnNlbGVj
dChnKS5vbihBLG51bGwpLm9uKHosZSksaz1JKCk7SC5jYWxsKGcpLGUoKSxvKHApfWZ1bmN0aW9u
IGYoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRzKTtkP2NsZWFyVGltZW91dChkKTooZz10KHA9
dnx8Wm8ubW91c2UodGhpcykpLEguY2FsbCh0aGlzKSxvKG4pKSxkPXNldFRpbWVvdXQoZnVuY3Rp
b24oKXtkPW51bGwsYyhuKX0sNTApLHkoKSxyKE1hdGgucG93KDIsLjAwMipUYSgpKSpTLmspLHUo
cCxnKSxhKG4pfWZ1bmN0aW9uIGgoKXt2YXIgbj1MLm9mKHRoaXMsYXJndW1lbnRzKSxlPVpvLm1v
dXNlKHRoaXMpLGk9dChlKSxzPU1hdGgubG9nKFMuaykvTWF0aC5MTjI7byhuKSxyKE1hdGgucG93
KDIsWm8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHMpLTE6TWF0aC5mbG9vcihzKSsxKSksdShl
LGkpLGEobiksYyhuKX12YXIgZyxwLHYsZCxtLHgsXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2
MCw1MDBdLEU9cWEsQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3Vz
ZXVwLnpvb20iLHo9InRvdWNoc3RhcnQuem9vbSIsTD1NKG4sInpvb21zdGFydCIsInpvb20iLCJ6
b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFy
IG49TC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO1NzP1pvLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9u
KCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6
MCxrOjF9LG8obil9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1r
WzFdLHU9ZS8yLGk9ci8yLG89Wm8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1TLnkp
L1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7cmV0dXJuIGZ1bmN0
aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2NoYXJ0X189Uz17eDp1LXJbMF0qYyx5
OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNoKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6
KHRoaXMuX19jaGFydF9fPVMsbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9u
KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGko
KSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4uc2NhbGVFeHRlbnQ9ZnVuY3Rp
b24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9bnVsbD09dD9xYTpbK3RbMF0sK3RbMV1d
LG4pOkV9LG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQm
JlsrdFswXSwrdFsxXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPyhfPXQseD10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6X30sbi55
PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4
OjAseTowLGs6MX0sbik6d30sWm8ucmViaW5kKG4sTCwib24iKX07dmFyIFRhLHFhPVswLDEvMF0s
UmE9Im9ud2hlZWwiaW4gJG8/KFRhPWZ1bmN0aW9uKCl7cmV0dXJuLVpvLmV2ZW50LmRlbHRhWSoo
Wm8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiAkbz8o
VGE9ZnVuY3Rpb24oKXtyZXR1cm4gWm8uZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKToo
VGE9ZnVuY3Rpb24oKXtyZXR1cm4tWm8uZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9s
bCIpO1pvLmNvbG9yPWV0LGV0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0
aGlzLnJnYigpKyIifSxaby5oc2w9cnQ7dmFyIERhPXJ0LnByb3RvdHlwZT1uZXcgZXQ7RGEuYnJp
Z2h0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9u
OjEpLG5ldyBydCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sRGEuZGFya2VyPWZ1bmN0aW9uKG4p
e3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxuZXcgcnQodGhpcy5o
LHRoaXMucyxuKnRoaXMubCl9LERhLnJnYj1mdW5jdGlvbigpe3JldHVybiB1dCh0aGlzLmgsdGhp
cy5zLHRoaXMubCl9LFpvLmhjbD1pdDt2YXIgUGE9aXQucHJvdG90eXBlPW5ldyBldDtQYS5icmln
aHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAw
LHRoaXMubCtVYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFBhLmRhcmtlcj1mdW5jdGlvbihu
KXtyZXR1cm4gbmV3IGl0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtVWEqKGFyZ3Vt
ZW50cy5sZW5ndGg/bjoxKSkpfSxQYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcy5oLHRo
aXMuYyx0aGlzLmwpLnJnYigpfSxaby5sYWI9YXQ7dmFyIFVhPTE4LGphPS45NTA0NyxIYT0xLEZh
PTEuMDg4ODMsT2E9YXQucHJvdG90eXBlPW5ldyBldDtPYS5icmlnaHRlcj1mdW5jdGlvbihuKXty
ZXR1cm4gbmV3IGF0KE1hdGgubWluKDEwMCx0aGlzLmwrVWEqKGFyZ3VtZW50cy5sZW5ndGg/bjox
KSksdGhpcy5hLHRoaXMuYil9LE9hLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGF0KE1h
dGgubWF4KDAsdGhpcy5sLVVhKihhcmd1bWVudHMubGVuZ3RoP246MSkpLHRoaXMuYSx0aGlzLmIp
fSxPYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gY3QodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSxaby5y
Z2I9Z3Q7dmFyIFlhPWd0LnByb3RvdHlwZT1uZXcgZXQ7WWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7
bj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5n
LHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYmdT5lJiYoZT11
KSxyJiZ1PnImJihyPXUpLG5ldyBndChNYXRoLm1pbigyNTUsdC9uKSxNYXRoLm1pbigyNTUsZS9u
KSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBndCh1LHUsdSl9LFlhLmRhcmtlcj1mdW5jdGlvbihu
KXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGd0KG4qdGhp
cy5yLG4qdGhpcy5nLG4qdGhpcy5iKX0sWWEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIHl0KHRoaXMu
cix0aGlzLmcsdGhpcy5iKX0sWWEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrZHQodGhp
cy5yKStkdCh0aGlzLmcpK2R0KHRoaXMuYil9O3ZhciBJYT1aby5tYXAoe2FsaWNlYmx1ZToxNTc5
MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQs
YXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxh
bmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEw
ODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgz
ODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1
OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmti
bHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjEx
MTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMy
NTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6
MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjox
NTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3Ns
YXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1
LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxk
aW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJp
Y2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNo
c2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6
MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVl
bnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazox
NjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAs
a2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxs
YXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0
LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVs
bG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRn
cmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdo
dHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6Nzgz
Mzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0
eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2
NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3Mzcz
MjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYy
NjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVt
c3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVk
OjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJv
c2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eTox
Mjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5n
ZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5y
b2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFs
ZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3
MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjEx
NTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95
YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHli
cm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYTox
MDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYx
LHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5n
Z3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhp
c3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1
NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUs
eWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7SWEuZm9yRWFjaChmdW5jdGlv
bihuLHQpe0lhLnNldChuLHB0KHQpKX0pLFpvLmZ1bmN0b3I9YnQsWm8ueGhyPVN0KHd0KSxaby5k
c3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxpKXthcmd1bWVudHMubGVuZ3RoPDMmJihp
PWUsZT1udWxsKTt2YXIgbz1rdChuLHQsbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1
bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/
cjp1KG4pKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRleHQp
fWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhcnNlKHQucmVzcG9u
c2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKG4pfWZ1bmN0aW9u
IG8obil7cmV0dXJuIGEudGVzdChuKT8nIicrbi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZh
ciBhPW5ldyBSZWdFeHAoJ1siJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5w
YXJzZT1mdW5jdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4s
ZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsi
K24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pKyI6IGRbIit0KyJd
In0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9
KX0sZS5wYXJzZVJvd3M9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7aWYobD49cylyZXR1cm4g
bztpZih1KXJldHVybiB1PSExLGk7dmFyIHQ9bDtpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9y
KHZhciBlPXQ7ZSsrPHM7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4uY2hhckNv
ZGVBdChlKzEpKWJyZWFrOysrZX1sPWUrMjt2YXIgcj1uLmNoYXJDb2RlQXQoZSsxKTtyZXR1cm4g
MTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUrMikmJisrbCk6MTA9PT1yJiYodT0hMCks
bi5zdWJzdHJpbmcodCsxLGUpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO3M+bDspe3ZhciByPW4u
Y2hhckNvZGVBdChsKyspLGE9MTtpZigxMD09PXIpdT0hMDtlbHNlIGlmKDEzPT09cil1PSEwLDEw
PT09bi5jaGFyQ29kZUF0KGwpJiYoKytsLCsrYSk7ZWxzZSBpZihyIT09Yyljb250aW51ZTtyZXR1
cm4gbi5zdWJzdHJpbmcodCxsLWEpfXJldHVybiBuLnN1YnN0cmluZyh0KX1mb3IodmFyIHIsdSxp
PXt9LG89e30sYT1bXSxzPW4ubGVuZ3RoLGw9MCxmPTA7KHI9ZSgpKSE9PW87KXtmb3IodmFyIGg9
W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwoaD10KGgsZisrKSkpJiZhLnB1
c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFsw
XSkpcmV0dXJuIGUuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgaCx1PVtdO3JldHVybiB0LmZvckVh
Y2goZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9
KSxbdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1Lm1h
cChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSkuam9pbigiXG4iKX0sZS5m
b3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1hcChpKS5qb2luKCJcbiIpfSxlfSxaby5j
c3Y9Wm8uZHN2KCIsIiwidGV4dC9jc3YiKSxaby50c3Y9Wm8uZHN2KCIgICAgIiwidGV4dC90YWIt
c2VwYXJhdGVkLXZhbHVlcyIpLFpvLnRvdWNoPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1bWVudHMu
bGVuZ3RoPDMmJihlPXQsdD14KCkuY2hhbmdlZFRvdWNoZXMpLHQpZm9yKHZhciByLHU9MCxpPXQu
bGVuZ3RoO2k+dTsrK3UpaWYoKHI9dFt1XSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIFoobixyKX07
dmFyIFphLFZhLFhhLCRhLEJhLFdhPVdvW3AoV28sInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8
ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07Wm8udGltZXI9ZnVuY3Rpb24obix0LGUpe3Zh
ciByPWFyZ3VtZW50cy5sZW5ndGg7Mj5yJiYodD0wKSwzPnImJihlPURhdGUubm93KCkpO3ZhciB1
PWUrdCxpPXtjOm4sdDp1LGY6ITEsbjpudWxsfTtWYT9WYS5uPWk6WmE9aSxWYT1pLFhhfHwoJGE9
Y2xlYXJUaW1lb3V0KCRhKSxYYT0xLFdhKEF0KSl9LFpvLnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7
Q3QoKSxOdCgpfSxaby5yb3VuZD1mdW5jdGlvbihuLHQpe3JldHVybiB0P01hdGgucm91bmQobioo
dD1NYXRoLnBvdygxMCx0KSkpL3Q6TWF0aC5yb3VuZChuKX07dmFyIEphPVsieSIsInoiLCJhIiwi
ZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJd
Lm1hcChMdCk7Wm8uZm9ybWF0UHJlZml4PWZ1bmN0aW9uKG4sdCl7dmFyIGU9MDtyZXR1cm4gbiYm
KDA+biYmKG4qPS0xKSx0JiYobj1aby5yb3VuZChuLHp0KG4sdCkpKSxlPTErTWF0aC5mbG9vcigx
ZS0xMitNYXRoLmxvZyhuKS9NYXRoLkxOMTApLGU9TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMq
TWF0aC5mbG9vcigoZS0xKS8zKSkpKSxKYVs4K2UvM119O3ZhciBHYT0vKD86KFtee10pPyhbPD49
Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFthLXolXSk/L2ks
S2E9Wm8ubWFwKHtiOmZ1bmN0aW9uKG4pe3JldHVybiBuLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9u
KG4pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSxvOmZ1bmN0aW9uKG4pe3JldHVybiBu
LnRvU3RyaW5nKDgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBuLnRvU3RyaW5nKDE2KX0sWDpmdW5j
dGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0sZzpmdW5jdGlvbihu
LHQpe3JldHVybiBuLnRvUHJlY2lzaW9uKHQpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9F
eHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRml4ZWQodCl9LHI6ZnVu
Y3Rpb24obix0KXtyZXR1cm4obj1aby5yb3VuZChuLHp0KG4sdCkpKS50b0ZpeGVkKE1hdGgubWF4
KDAsTWF0aC5taW4oMjAsenQobiooMSsxZS0xNSksdCkpKSl9fSksUWE9Wm8udGltZT17fSxuYz1E
YXRlO1J0LnByb3RvdHlwZT17Z2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRD
RGF0ZSgpfSxnZXREYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RheSgpfSxnZXRG
dWxsWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRnVsbFllYXIoKX0sZ2V0SG91
cnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0hvdXJzKCl9LGdldE1pbGxpc2Vjb25k
czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWlsbGlzZWNvbmRzKCl9LGdldE1pbnV0
ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbnV0ZXMoKX0sZ2V0TW9udGg6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01vbnRoKCl9LGdldFNlY29uZHM6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fLmdldFVUQ1NlY29uZHMoKX0sZ2V0VGltZTpmdW5jdGlvbigpe3JldHVy
biB0aGlzLl8uZ2V0VGltZSgpfSxnZXRUaW1lem9uZU9mZnNldDpmdW5jdGlvbigpe3JldHVybiAw
fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy52YWx1ZU9mKCl9LHNldERhdGU6ZnVu
Y3Rpb24oKXt0Yy5zZXRVVENEYXRlLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXREYXk6ZnVu
Y3Rpb24oKXt0Yy5zZXRVVENEYXkuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldEZ1bGxZZWFy
OmZ1bmN0aW9uKCl7dGMuc2V0VVRDRnVsbFllYXIuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNl
dEhvdXJzOmZ1bmN0aW9uKCl7dGMuc2V0VVRDSG91cnMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9
LHNldE1pbGxpc2Vjb25kczpmdW5jdGlvbigpe3RjLnNldFVUQ01pbGxpc2Vjb25kcy5hcHBseSh0
aGlzLl8sYXJndW1lbnRzKX0sc2V0TWludXRlczpmdW5jdGlvbigpe3RjLnNldFVUQ01pbnV0ZXMu
YXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1vbnRoOmZ1bmN0aW9uKCl7dGMuc2V0VVRDTW9u
dGguYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFNlY29uZHM6ZnVuY3Rpb24oKXt0Yy5zZXRV
VENTZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRUaW1lOmZ1bmN0aW9uKCl7dGMu
c2V0VGltZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX19O3ZhciB0Yz1EYXRlLnByb3RvdHlwZTtR
YS55ZWFyPUR0KGZ1bmN0aW9uKG4pe3JldHVybiBuPVFhLmRheShuKSxuLnNldE1vbnRoKDAsMSks
bn0sZnVuY3Rpb24obix0KXtuLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rp
b24obil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKX0pLFFhLnllYXJzPVFhLnllYXIucmFuZ2UsUWEu
eWVhcnMudXRjPVFhLnllYXIudXRjLnJhbmdlLFFhLmRheT1EdChmdW5jdGlvbihuKXt2YXIgdD1u
ZXcgbmMoMmUzLDApO3JldHVybiB0LnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1v
bnRoKCksbi5nZXREYXRlKCkpLHR9LGZ1bmN0aW9uKG4sdCl7bi5zZXREYXRlKG4uZ2V0RGF0ZSgp
K3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLFFhLmRheXM9UWEuZGF5LnJh
bmdlLFFhLmRheXMudXRjPVFhLmRheS51dGMucmFuZ2UsUWEuZGF5T2ZZZWFyPWZ1bmN0aW9uKG4p
e3ZhciB0PVFhLnllYXIobik7cmV0dXJuIE1hdGguZmxvb3IoKG4tdC02ZTQqKG4uZ2V0VGltZXpv
bmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFsic3VuZGF5IiwibW9u
ZGF5IiwidHVlc2RheSIsIndlZG5lc2RheSIsInRodXJzZGF5IiwiZnJpZGF5Iiwic2F0dXJkYXki
XS5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dD03LXQ7dmFyIGU9UWFbbl09RHQoZnVuY3Rpb24obil7
cmV0dXJuKG49UWEuZGF5KG4pKS5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpK3QpJTcp
LG59LGZ1bmN0aW9uKG4sdCl7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpKzcqTWF0aC5mbG9vcih0KSl9
LGZ1bmN0aW9uKG4pe3ZhciBlPVFhLnllYXIobikuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3Io
KFFhLmRheU9mWWVhcihuKSsoZSt0KSU3KS83KS0oZSE9PXQpfSk7UWFbbisicyJdPWUucmFuZ2Us
UWFbbisicyJdLnV0Yz1lLnV0Yy5yYW5nZSxRYVtuKyJPZlllYXIiXT1mdW5jdGlvbihuKXt2YXIg
ZT1RYS55ZWFyKG4pLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChRYS5kYXlPZlllYXIobikr
KGUrdCklNykvNyl9fSksUWEud2Vlaz1RYS5zdW5kYXksUWEud2Vla3M9UWEuc3VuZGF5LnJhbmdl
LFFhLndlZWtzLnV0Yz1RYS5zdW5kYXkudXRjLnJhbmdlLFFhLndlZWtPZlllYXI9UWEuc3VuZGF5
T2ZZZWFyO3ZhciBlYz17Ii0iOiIiLF86IiAiLDA6IjAifSxyYz0vXlxzKlxkKy8sdWM9L14lLzta
by5sb2NhbGU9ZnVuY3Rpb24obil7cmV0dXJue251bWJlckZvcm1hdDpUdChuKSx0aW1lRm9ybWF0
OlV0KG4pfX07dmFyIGljPVpvLmxvY2FsZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91
cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRl
OiIlbS8lZC8lWSIsdGltZToiJUg6JU06JVMiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1
bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIs
IlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJp
IiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1h
eSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVy
IiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIs
Ikp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7Wm8uZm9ybWF0PWlj
Lm51bWJlckZvcm1hdCxaby5nZW89e30sdWUucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlv
bihuKXtpZShuLHRoaXMudCxvYyksaWUob2Mucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9
b2MudDp0aGlzLnM9b2MudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVl
T2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIG9jPW5ldyB1ZTtaby5nZW8uc3RyZWFt
PWZ1bmN0aW9uKG4sdCl7biYmYWMuaGFzT3duUHJvcGVydHkobi50eXBlKT9hY1tuLnR5cGVdKG4s
dCk6b2Uobix0KX07dmFyIGFjPXtGZWF0dXJlOmZ1bmN0aW9uKG4sdCl7b2Uobi5nZW9tZXRyeSx0
KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5mZWF0dXJlcyxy
PS0xLHU9ZS5sZW5ndGg7KytyPHU7KW9lKGVbcl0uZ2VvbWV0cnksdCl9fSxjYz17U3BoZXJlOmZ1
bmN0aW9uKG4sdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24obix0KXtuPW4uY29vcmRpbmF0
ZXMsdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24obix0KXtmb3Io
dmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KW49ZVtyXSx0LnBvaW50
KG5bMF0sblsxXSxuWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2FlKG4uY29vcmRpbmF0
ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRp
bmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylhZShlW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rp
b24obix0KXtjZShuLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24obix0KXtm
b3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KWNlKGVbcl0sdCl9
LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmdlb21ldHJpZXMs
cj0tMSx1PWUubGVuZ3RoOysrcjx1OylvZShlW3JdLHQpfX07Wm8uZ2VvLmFyZWE9ZnVuY3Rpb24o
bil7cmV0dXJuIHNjPTAsWm8uZ2VvLnN0cmVhbShuLGZjKSxzY307dmFyIHNjLGxjPW5ldyB1ZSxm
Yz17c3BoZXJlOmZ1bmN0aW9uKCl7c2MrPTQqYmF9LHBvaW50OnYsbGluZVN0YXJ0OnYsbGluZUVu
ZDp2LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2xjLnJlc2V0KCksZmMubGluZVN0YXJ0PXNlfSxw
b2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49MipsYztzYys9MD5uPzQqYmErbjpuLGZjLmxpbmVT
dGFydD1mYy5saW5lRW5kPWZjLnBvaW50PXZ9fTtaby5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gbihuLHQpe3gucHVzaChNPVtsPW4saD1uXSksZj50JiYoZj10KSx0PmcmJihnPXQpfWZ1
bmN0aW9uIHQodCxlKXt2YXIgcj1sZShbdCpBYSxlKkFhXSk7aWYobSl7dmFyIHU9aGUobSxyKSxp
PVt1WzFdLC11WzBdLDBdLG89aGUoaSx1KTt2ZShvKSxvPWRlKG8pO3ZhciBjPXQtcCxzPWM+MD8x
Oi0xLHY9b1swXSpDYSpzLGQ9dWEoYyk+MTgwO2lmKGReKHY+cypwJiZzKnQ+dikpe3ZhciB5PW9b
MV0qQ2E7eT5nJiYoZz15KX1lbHNlIGlmKHY9KHYrMzYwKSUzNjAtMTgwLGReKHY+cypwJiZzKnQ+
dikpe3ZhciB5PS1vWzFdKkNhO2Y+eSYmKGY9eSl9ZWxzZSBmPmUmJihmPWUpLGU+ZyYmKGc9ZSk7
ZD9wPnQ/YShsLHQpPmEobCxoKSYmKGg9dCk6YSh0LGgpPmEobCxoKSYmKGw9dCk6aD49bD8obD50
JiYobD10KSx0PmgmJihoPXQpKTp0PnA/YShsLHQpPmEobCxoKSYmKGg9dCk6YSh0LGgpPmEobCxo
KSYmKGw9dCl9ZWxzZSBuKHQsZSk7bT1yLHA9dH1mdW5jdGlvbiBlKCl7Xy5wb2ludD10fWZ1bmN0
aW9uIHIoKXtNWzBdPWwsTVsxXT1oLF8ucG9pbnQ9bixtPW51bGx9ZnVuY3Rpb24gdShuLGUpe2lm
KG0pe3ZhciByPW4tcDt5Kz11YShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugdj1uLGQ9
ZTtmYy5wb2ludChuLGUpLHQobixlKX1mdW5jdGlvbiBpKCl7ZmMubGluZVN0YXJ0KCl9ZnVuY3Rp
b24gbygpe3UodixkKSxmYy5saW5lRW5kKCksdWEoeSk+a2EmJihsPS0oaD0xODApKSxNWzBdPWws
TVsxXT1oLG09bnVsbH1mdW5jdGlvbiBhKG4sdCl7cmV0dXJuKHQtPW4pPDA/dCszNjA6dH1mdW5j
dGlvbiBjKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBzKG4sdCl7cmV0dXJuIHRbMF08
PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgbCxmLGgsZyxwLHYsZCxt
LHkseCxNLF89e3BvaW50Om4sbGluZVN0YXJ0OmUsbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5j
dGlvbigpe18ucG9pbnQ9dSxfLmxpbmVTdGFydD1pLF8ubGluZUVuZD1vLHk9MCxmYy5wb2x5Z29u
U3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2ZjLnBvbHlnb25FbmQoKSxfLnBvaW50PW4s
Xy5saW5lU3RhcnQ9ZSxfLmxpbmVFbmQ9ciwwPmxjPyhsPS0oaD0xODApLGY9LShnPTkwKSk6eT5r
YT9nPTkwOi1rYT55JiYoZj0tOTApLE1bMF09bCxNWzFdPWh9fTtyZXR1cm4gZnVuY3Rpb24obil7
Zz1oPS0obD1mPTEvMCkseD1bXSxaby5nZW8uc3RyZWFtKG4sXyk7dmFyIHQ9eC5sZW5ndGg7aWYo
dCl7eC5zb3J0KGMpO2Zvcih2YXIgZSxyPTEsdT14WzBdLGk9W3VdO3Q+cjsrK3IpZT14W3JdLHMo
ZVswXSx1KXx8cyhlWzFdLHUpPyhhKHVbMF0sZVsxXSk+YSh1WzBdLHVbMV0pJiYodVsxXT1lWzFd
KSxhKGVbMF0sdVsxXSk+YSh1WzBdLHVbMV0pJiYodVswXT1lWzBdKSk6aS5wdXNoKHU9ZSk7Ci1m
b3IodmFyIG8sZSxwPS0xLzAsdD1pLmxlbmd0aC0xLHI9MCx1PWlbdF07dD49cjt1PWUsKytyKWU9
aVtyXSwobz1hKHVbMV0sZVswXSkpPnAmJihwPW8sbD1lWzBdLGg9dVsxXSl9cmV0dXJuIHg9TT1u
dWxsLDEvMD09PWx8fDEvMD09PWY/W1swLzAsMC8wXSxbMC8wLDAvMF1dOltbbCxmXSxbaCxnXV19
fSgpLFpvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtoYz1nYz1wYz12Yz1kYz1tYz15Yz14Yz1N
Yz1fYz1iYz0wLFpvLmdlby5zdHJlYW0obix3Yyk7dmFyIHQ9TWMsZT1fYyxyPWJjLHU9dCp0K2Uq
ZStyKnI7cmV0dXJuIEVhPnUmJih0PW1jLGU9eWMscj14YyxrYT5nYyYmKHQ9cGMsZT12YyxyPWRj
KSx1PXQqdCtlKmUrcipyLEVhPnUpP1swLzAsMC8wXTpbTWF0aC5hdGFuMihlLHQpKkNhLEcoci9N
YXRoLnNxcnQodSkpKkNhXX07dmFyIGhjLGdjLHBjLHZjLGRjLG1jLHljLHhjLE1jLF9jLGJjLHdj
PXtzcGhlcmU6dixwb2ludDp5ZSxsaW5lU3RhcnQ6TWUsbGluZUVuZDpfZSxwb2x5Z29uU3RhcnQ6
ZnVuY3Rpb24oKXt3Yy5saW5lU3RhcnQ9YmV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt3Yy5saW5l
U3RhcnQ9TWV9fSxTYz1BZSh3ZSxUZSxSZSxbLWJhLC1iYS8yXSksa2M9MWU5O1pvLmdlby5jbGlw
RXh0ZW50PWZ1bmN0aW9uKCl7dmFyIG4sdCxlLHIsdSxpLG89e3N0cmVhbTpmdW5jdGlvbihuKXty
ZXR1cm4gdSYmKHUudmFsaWQ9ITEpLHU9aShuKSx1LnZhbGlkPSEwLHV9LGV4dGVudDpmdW5jdGlv
bihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1VZShuPSthWzBdWzBdLHQ9K2FbMF1bMV0s
ZT0rYVsxXVswXSxyPSthWzFdWzFdKSx1JiYodS52YWxpZD0hMSx1PW51bGwpLG8pOltbbix0XSxb
ZSxyXV19fTtyZXR1cm4gby5leHRlbnQoW1swLDBdLFs5NjAsNTAwXV0pfSwoWm8uZ2VvLmNvbmlj
RXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEhlKEZlKX0pLnJhdz1GZSxaby5nZW8uYWxiZXJz
PWZ1bmN0aW9uKCl7cmV0dXJuIFpvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbOTYsMF0p
LmNlbnRlcihbLS42LDM4LjddKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApfSxa
by5nZW8uYWxiZXJzVXNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXt2YXIgaT1uWzBdLG89blsx
XTtyZXR1cm4gdD1udWxsLGUoaSxvKSx0fHwocihpLG8pLHQpfHx1KGksbyksdH12YXIgdCxlLHIs
dSxpPVpvLmdlby5hbGJlcnMoKSxvPVpvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0
LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYT1aby5nZW8uY29uaWNF
cXVhbEFyZWEoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4
LDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24obixlKXt0PVtuLGVdfX07cmV0dXJuIG4uaW52ZXJ0PWZ1
bmN0aW9uKG4pe3ZhciB0PWkuc2NhbGUoKSxlPWkudHJhbnNsYXRlKCkscj0oblswXS1lWzBdKS90
LHU9KG5bMV0tZVsxXSkvdDtyZXR1cm4odT49LjEyJiYuMjM0PnUmJnI+PS0uNDI1JiYtLjIxND5y
P286dT49LjE2NiYmLjIzND51JiZyPj0tLjIxNCYmLS4xMTU+cj9hOmkpLmludmVydChuKX0sbi5z
dHJlYW09ZnVuY3Rpb24obil7dmFyIHQ9aS5zdHJlYW0obiksZT1vLnN0cmVhbShuKSxyPWEuc3Ry
ZWFtKG4pO3JldHVybntwb2ludDpmdW5jdGlvbihuLHUpe3QucG9pbnQobix1KSxlLnBvaW50KG4s
dSksci5wb2ludChuLHUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0LnNwaGVyZSgpLGUuc3BoZXJlKCks
ci5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxlLmxpbmVTdGFy
dCgpLHIubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlLmxpbmVF
bmQoKSxyLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dC5wb2x5Z29uU3RhcnQo
KSxlLnBvbHlnb25TdGFydCgpLHIucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24o
KXt0LnBvbHlnb25FbmQoKSxlLnBvbHlnb25FbmQoKSxyLnBvbHlnb25FbmQoKX19fSxuLnByZWNp
c2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS5wcmVjaXNpb24odCks
by5wcmVjaXNpb24odCksYS5wcmVjaXNpb24odCksbik6aS5wcmVjaXNpb24oKX0sbi5zY2FsZT1m
dW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaS5zY2FsZSh0KSxvLnNjYWxlKC4z
NSp0KSxhLnNjYWxlKHQpLG4udHJhbnNsYXRlKGkudHJhbnNsYXRlKCkpKTppLnNjYWxlKCl9LG4u
dHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpLnRyYW5z
bGF0ZSgpO3ZhciBzPWkuc2NhbGUoKSxsPSt0WzBdLGY9K3RbMV07cmV0dXJuIGU9aS50cmFuc2xh
dGUodCkuY2xpcEV4dGVudChbW2wtLjQ1NSpzLGYtLjIzOCpzXSxbbCsuNDU1KnMsZisuMjM4KnNd
XSkuc3RyZWFtKGMpLnBvaW50LHI9by50cmFuc2xhdGUoW2wtLjMwNypzLGYrLjIwMSpzXSkuY2xp
cEV4dGVudChbW2wtLjQyNSpzK2thLGYrLjEyKnMra2FdLFtsLS4yMTQqcy1rYSxmKy4yMzQqcy1r
YV1dKS5zdHJlYW0oYykucG9pbnQsdT1hLnRyYW5zbGF0ZShbbC0uMjA1KnMsZisuMjEyKnNdKS5j
bGlwRXh0ZW50KFtbbC0uMjE0KnMra2EsZisuMTY2KnMra2FdLFtsLS4xMTUqcy1rYSxmKy4yMzQq
cy1rYV1dKS5zdHJlYW0oYykucG9pbnQsbn0sbi5zY2FsZSgxMDcwKX07dmFyIEVjLEFjLENjLE5j
LHpjLExjLFRjPXtwb2ludDp2LGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6ZnVu
Y3Rpb24oKXtBYz0wLFRjLmxpbmVTdGFydD1PZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1RjLmxp
bmVTdGFydD1UYy5saW5lRW5kPVRjLnBvaW50PXYsRWMrPXVhKEFjLzIpfX0scWM9e3BvaW50Olll
LGxpbmVTdGFydDp2LGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9LFJjPXtw
b2ludDpWZSxsaW5lU3RhcnQ6WGUsbGluZUVuZDokZSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtS
Yy5saW5lU3RhcnQ9QmV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtSYy5wb2ludD1WZSxSYy5saW5l
U3RhcnQ9WGUsUmMubGluZUVuZD0kZX19O1pvLmdlby5wYXRoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
bihuKXtyZXR1cm4gbiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKCthLmFw
cGx5KHRoaXMsYXJndW1lbnRzKSksbyYmby52YWxpZHx8KG89dShpKSksWm8uZ2VvLnN0cmVhbShu
LG8pKSxpLnJlc3VsdCgpfWZ1bmN0aW9uIHQoKXtyZXR1cm4gbz1udWxsLG59dmFyIGUscix1LGks
byxhPTQuNTtyZXR1cm4gbi5hcmVhPWZ1bmN0aW9uKG4pe3JldHVybiBFYz0wLFpvLmdlby5zdHJl
YW0obix1KFRjKSksRWN9LG4uY2VudHJvaWQ9ZnVuY3Rpb24obil7cmV0dXJuIHBjPXZjPWRjPW1j
PXljPXhjPU1jPV9jPWJjPTAsWm8uZ2VvLnN0cmVhbShuLHUoUmMpKSxiYz9bTWMvYmMsX2MvYmNd
OnhjP1ttYy94Yyx5Yy94Y106ZGM/W3BjL2RjLHZjL2RjXTpbMC8wLDAvMF19LG4uYm91bmRzPWZ1
bmN0aW9uKG4pe3JldHVybiB6Yz1MYz0tKENjPU5jPTEvMCksWm8uZ2VvLnN0cmVhbShuLHUocWMp
KSxbW0NjLE5jXSxbemMsTGNdXX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyh1PShlPW4pP24uc3RyZWFtfHxHZShuKTp3dCx0KCkpOmV9LG4uY29udGV4
dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0ocj1uKT9uZXcg
SWU6bmV3IFdlKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZpLnBvaW50UmFkaXVzKGEpLHQoKSk6
cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0i
ZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVzKCt0KSwrdCksbik6YX0sbi5wcm9q
ZWN0aW9uKFpvLmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sWm8uZ2VvLnRyYW5zZm9y
bT1mdW5jdGlvbihuKXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBLZSh0KTtm
b3IodmFyIHIgaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0sS2UucHJvdG90eXBlPXtwb2ludDpm
dW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5jdGlvbigpe3Ro
aXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5l
U3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdv
blN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6
ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxaby5nZW8ucHJvamVjdGlvbj1u
cixaby5nZW8ucHJvamVjdGlvbk11dGF0b3I9dHIsKFpvLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVu
Y3Rpb24oKXtyZXR1cm4gbnIocnIpfSkucmF3PXJyLmludmVydD1ycixaby5nZW8ucm90YXRpb249
ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdD1uKHRbMF0qQWEsdFsxXSpBYSksdFsw
XSo9Q2EsdFsxXSo9Q2EsdH1yZXR1cm4gbj1pcihuWzBdJTM2MCpBYSxuWzFdKkFhLG4ubGVuZ3Ro
PjI/blsyXSpBYTowKSx0LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBd
KkFhLHRbMV0qQWEpLHRbMF0qPUNhLHRbMV0qPUNhLHR9LHR9LHVyLmludmVydD1ycixaby5nZW8u
Y2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiBy
P3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1pcigtblswXSpBYSwtblsxXSpBYSwwKS5pbnZl
cnQsdT1bXTtyZXR1cm4gZShudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXt1LnB1c2go
bj10KG4sZSkpLG5bMF0qPUNhLG5bMV0qPUNhfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRl
czpbdV19fXZhciB0LGUscj1bMCwwXSx1PTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlvbihyKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcigodD0rcikqQWEsdSpBYSksbik6dH0sbi5wcmVjaXNp
b249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9c3IodCpBYSwodT0rcikq
QWEpLG4pOnV9LG4uYW5nbGUoOTApfSxaby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIg
ZSxyPSh0WzBdLW5bMF0pKkFhLHU9blsxXSpBYSxpPXRbMV0qQWEsbz1NYXRoLnNpbihyKSxhPU1h
dGguY29zKHIpLGM9TWF0aC5zaW4odSkscz1NYXRoLmNvcyh1KSxsPU1hdGguc2luKGkpLGY9TWF0
aC5jb3MoaSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPWYqbykqZSsoZT1zKmwtYypm
KmEpKmUpLGMqbCtzKmYqYSl9LFpvLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu
KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlv
biB0KCl7cmV0dXJuIFpvLnJhbmdlKE1hdGguY2VpbChpL2QpKmQsdSxkKS5tYXAoaCkuY29uY2F0
KFpvLnJhbmdlKE1hdGguY2VpbChzL20pKm0sYyxtKS5tYXAoZykpLmNvbmNhdChaby5yYW5nZShN
YXRoLmNlaWwoci9wKSpwLGUscCkuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiB1YShuJWQpPmth
fSkubWFwKGwpKS5jb25jYXQoWm8ucmFuZ2UoTWF0aC5jZWlsKGEvdikqdixvLHYpLmZpbHRlcihm
dW5jdGlvbihuKXtyZXR1cm4gdWEobiVtKT5rYX0pLm1hcChmKSl9dmFyIGUscix1LGksbyxhLGMs
cyxsLGYsaCxnLHA9MTAsdj1wLGQ9OTAsbT0zNjAseT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rp
b24oKXtyZXR1cm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIs
Y29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHln
b24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChnKGMpLnNsaWNlKDEpLGgodSkucmV2ZXJzZSgp
LnNsaWNlKDEpLGcocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0
KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQp
Om4ubWlub3JFeHRlbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1l
bnRzLmxlbmd0aD8oaT0rdFswXVswXSx1PSt0WzFdWzBdLHM9K3RbMF1bMV0sYz0rdFsxXVsxXSxp
PnUmJih0PWksaT11LHU9dCkscz5jJiYodD1zLHM9YyxjPXQpLG4ucHJlY2lzaW9uKHkpKTpbW2ks
c10sW3UsY11dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9
cixyPWUsZT10KSxhPm8mJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24oeSkpOltbcixhXSxbZSxv
XV19LG4uc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9yU3Rl
cCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0sbT0rdFsxXSxuKTpbZCxtXX0sbi5taW5v
clN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sdj0rdFsx
XSxuKTpbcCx2XX0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg/KHk9K3QsbD1mcihhLG8sOTApLGY9aHIocixlLHkpLGg9ZnIocyxjLDkwKSxnPWhyKGksdSx5
KSxuKTp5fSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTAra2FdLFsxODAsOTAta2FdXSkubWlub3JF
eHRlbnQoW1stMTgwLC04MC1rYV0sWzE4MCw4MCtrYV1dKX0sWm8uZ2VvLmdyZWF0QXJjPWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpb
dHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12
YXIgdCxlLHI9Z3IsdT1wcjtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBaby5n
ZW8uZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8dS5hcHBseSh0aGlzLGFy
Z3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
cj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9u
KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9u
dWxsOnQsbik6dX0sbi5wcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD9uOjB9LG59LFpvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiB2cihuWzBd
KkFhLG5bMV0qQWEsdFswXSpBYSx0WzFdKkFhKX0sWm8uZ2VvLmxlbmd0aD1mdW5jdGlvbihuKXty
ZXR1cm4gRGM9MCxaby5nZW8uc3RyZWFtKG4sUGMpLERjfTt2YXIgRGMsUGM9e3NwaGVyZTp2LHBv
aW50OnYsbGluZVN0YXJ0OmRyLGxpbmVFbmQ6dixwb2x5Z29uU3RhcnQ6dixwb2x5Z29uRW5kOnZ9
LFVjPW1yKGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4p
e3JldHVybiAyKk1hdGguYXNpbihuLzIpfSk7KFpvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVu
Y3Rpb24oKXtyZXR1cm4gbnIoVWMpfSkucmF3PVVjO3ZhciBqYz1tcihmdW5jdGlvbihuKXt2YXIg
dD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9LHd0KTsoWm8uZ2VvLmF6aW11
dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIG5yKGpjKX0pLnJhdz1qYywoWm8uZ2Vv
LmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIEhlKHlyKX0pLnJhdz15ciwoWm8uZ2Vv
LmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSGUoeHIpfSkucmF3PXhyO3ZhciBI
Yz1tcihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyhaby5nZW8uZ25vbW9uaWM9
ZnVuY3Rpb24oKXtyZXR1cm4gbnIoSGMpfSkucmF3PUhjLE1yLmludmVydD1mdW5jdGlvbihuLHQp
e3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1TYV19LChaby5nZW8ubWVyY2F0b3I9
ZnVuY3Rpb24oKXtyZXR1cm4gX3IoTXIpfSkucmF3PU1yO3ZhciBGYz1tcihmdW5jdGlvbigpe3Jl
dHVybiAxfSxNYXRoLmFzaW4pOyhaby5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJu
IG5yKEZjKX0pLnJhdz1GYzt2YXIgT2M9bXIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9LGZ1
bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyhaby5nZW8uc3RlcmVvZ3JhcGhpYz1m
dW5jdGlvbigpe3JldHVybiBucihPYyl9KS5yYXc9T2MsYnIuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7
cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGguZXhwKG4pKS1TYV19LChaby5nZW8udHJhbnN2ZXJz
ZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIG49X3IoYnIpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTty
ZXR1cm4gbi5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQo
KSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9lKFtuWzBdLG5b
MV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBdLG5bMV0sblsyXS05MF0pfSxl
KFswLDAsOTBdKX0pLnJhdz1icixaby5nZW9tPXt9LFpvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtm
dW5jdGlvbiB0KG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1idChlKSxpPWJ0KHIp
LG89bi5sZW5ndGgsYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhp
cyxuW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KEVyKSx0PTA7bz50
O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgcz1rcihhKSxsPWtyKGMpLGY9bFsw
XT09PXNbMF0saD1sW2wubGVuZ3RoLTFdPT09c1tzLmxlbmd0aC0xXSxnPVtdO2Zvcih0PXMubGVu
Z3RoLTE7dD49MDstLXQpZy5wdXNoKG5bYVtzW3RdXVsyXV0pO2Zvcih0PStmO3Q8bC5sZW5ndGgt
aDsrK3QpZy5wdXNoKG5bYVtsW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPXdyLHI9U3I7cmV0dXJu
IGFyZ3VtZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMu
bGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhyPW4sdCk6cn0sdCl9LFpvLmdlb20ucG9seWdvbj1mdW5jdGlvbihuKXtyZXR1cm4gc2EobixZ
Yyksbn07dmFyIFljPVpvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107WWMuYXJlYT1mdW5jdGlv
bigpe2Zvcih2YXIgbix0PS0xLGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOylu
PXIscj10aGlzW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sWWMuY2VudHJv
aWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89MCxhPXRoaXNb
dS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8dTsp
dD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBdKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0o
dFsxXSthWzFdKSplO3JldHVybltpKm4sbypuXX0sWWMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFy
IHQsZSxyLHUsaSxvLGE9TnIobiksYz0tMSxzPXRoaXMubGVuZ3RoLU5yKHRoaXMpLGw9dGhpc1tz
LTFdOysrYzxzOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9dFsocj10
Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sQXIobyxsLHUpPyhBcihpLGwsdSl8fG4u
cHVzaChDcihpLG8sbCx1KSksbi5wdXNoKG8pKTpBcihpLGwsdSkmJm4ucHVzaChDcihpLG8sbCx1
KSksaT1vO2EmJm4ucHVzaChuWzBdKSxsPXV9cmV0dXJuIG59O3ZhciBJYyxaYyxWYyxYYywkYyxC
Yz1bXSxXYz1bXTtVci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRo
aXMuZWRnZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGljZShl
LDEpO3JldHVybiB0LnNvcnQoSHIpLHQubGVuZ3RofSxXci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRn
ZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5l
ZGdlLmI6dGhpcy5lZGdlLmF9fSxKci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3Zh
ciBlLHIsdTtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7
Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49
bnUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRo
aXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzsp
cj1lLlUsZT09PXIuTD8odT1yLlIsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09
ZS5SJiYoS3IodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsUXIodGhpcyxyKSkpOih1
PXIuTCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihRcih0aGlzLGUp
LG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxLcih0aGlzLHIpKSksZT1uLlU7dGhpcy5fLkM9ITF9
LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5O
PW4uUD1udWxsO3ZhciB0LGUscix1PW4uVSxpPW4uTCxvPW4uUjtpZihlPWk/bz9udShvKTppOm8s
dT91Lkw9PT1uP3UuTD1lOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWks
aS5VPWUsZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihlLlU9
dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihuJiZuLkMpcmV0dXJu
IG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVhaztpZihuPT09dS5MKXtpZih0PXUu
Uix0LkMmJih0LkM9ITEsdS5DPSEwLEtyKHRoaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYm
dC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsUXIodGhpcyx0KSx0PXUuUiksdC5D
PXUuQyx1LkM9dC5SLkM9ITEsS3IodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUu
TCx0LkMmJih0LkM9ITEsdS5DPSEwLFFyKHRoaXMsdSksdD11LkwpLHQuTCYmdC5MLkN8fHQuUiYm
dC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsS3IodGhpcyx0KSx0PXUuTCksdC5D
PXUuQyx1LkM9dC5MLkM9ITEsUXIodGhpcyx1KSxuPXRoaXMuXzticmVha310LkM9ITAsbj11LHU9
dS5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19LFpvLmdlb20udm9yb25vaT1mdW5jdGlvbihu
KXtmdW5jdGlvbiB0KG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVsw
XVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiB0dShlKG4pLGEpLmNlbGxzLmZvckVhY2go
ZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLHM9ZS5zaXRlLGw9dFthXT1jLmxlbmd0aD9jLm1h
cChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0dXJuW3QueCx0LnldfSk6cy54Pj1yJiZz
Lng8PWkmJnMueT49dSYmcy55PD1vP1tbcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107bC5wb2lu
dD1uW2FdfSksdH1mdW5jdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVy
bnt4Ok1hdGgucm91bmQoaShuLHQpL2thKSprYSx5Ok1hdGgucm91bmQobyhuLHQpL2thKSprYSxp
OnR9fSl9dmFyIHI9d3IsdT1TcixpPXIsbz11LGE9SmM7cmV0dXJuIG4/dChuKToodC5saW5rcz1m
dW5jdGlvbihuKXtyZXR1cm4gdHUoZShuKSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVy
biBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdl
dDpuW3Quci5pXX19KX0sdC50cmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIHR1
KGUobikpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxh
PWUuZWRnZXMuc29ydChIciksYz0tMSxzPWEubGVuZ3RoLGw9YVtzLTFdLmVkZ2UsZj1sLmw9PT1v
P2wucjpsLmw7KytjPHM7KXU9bCxpPWYsbD1hW2NdLmVkZ2UsZj1sLmw9PT1vP2wucjpsLmwscjxp
LmkmJnI8Zi5pJiZydShvLGksZik8MCYmdC5wdXNoKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9
LHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idChyPW4pLHQpOnJ9
LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh1PW4pLHQpOnV9
LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxs
PT1uP0pjOm4sdCk6YT09PUpjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAsMF0sbl0pOmE9PT1KYz9udWxsOmEmJmFb
MV19LHQpfTt2YXIgSmM9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07Wm8uZ2VvbS5kZWxhdW5heT1m
dW5jdGlvbihuKXtyZXR1cm4gWm8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxaby5nZW9t
LnF1YWR0cmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBpKG4s
dCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5sZWFmKXt2YXIgYz1u
LngsbD1uLnk7aWYobnVsbCE9YylpZih1YShjLWUpK3VhKGwtcik8LjAxKXMobix0LGUscix1LGks
byxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54PW4ueT1uLnBvaW50PW51bGwscyhuLGYsYyxsLHUs
aSxvLGEpLHMobix0LGUscix1LGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNl
IHMobix0LGUscix1LGksbyxhKX1mdW5jdGlvbiBzKG4sdCxlLHIsdSxvLGEsYyl7dmFyIHM9LjUq
KHUrYSksbD0uNSoobytjKSxmPWU+PXMsaD1yPj1sLGc9KGg8PDEpK2Y7bi5sZWFmPSExLG49bi5u
b2Rlc1tnXXx8KG4ubm9kZXNbZ109b3UoKSksZj91PXM6YT1zLGg/bz1sOmM9bCxpKG4sdCxlLHIs
dSxvLGEsYyl9dmFyIGwsZixoLGcscCx2LGQsbSx5LHg9YnQoYSksTT1idChjKTtpZihudWxsIT10
KXY9dCxkPWUsbT1yLHk9dTtlbHNlIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVu
Z3RoLG8pZm9yKGc9MDtwPmc7KytnKWw9bltnXSxsLng8diYmKHY9bC54KSxsLnk8ZCYmKGQ9bC55
KSxsLng+bSYmKG09bC54KSxsLnk+eSYmKHk9bC55KSxmLnB1c2gobC54KSxoLnB1c2gobC55KTtl
bHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gobD1uW2ddLGcpLGI9K00obCxnKTt2Pl8mJih2
PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5PWIpLGYucHVzaChfKSxoLnB1c2goYil9
dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQrdzptPXYrUzt2YXIgaz1vdSgpO2lmKGsuYWRkPWZ1bmN0
aW9uKG4pe2koayxuLCt4KG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9u
KG4pe2F1KG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltnXSxm
W2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPW49
bD1udWxsLGt9dmFyIG8sYT13cixjPVNyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhhPXV1
LGM9aXUsMz09PW8mJih1PWUscj10LGU9dD0wKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9K25bMF1bMV0s
cj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6W1t0LGVdLFtyLHVdXX0saS5z
aXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9
bnVsbDoodD1lPTAscj0rblswXSx1PStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxp
KX0sWm8uaW50ZXJwb2xhdGVSZ2I9Y3UsWm8uaW50ZXJwb2xhdGVPYmplY3Q9c3UsWm8uaW50ZXJw
b2xhdGVOdW1iZXI9bHUsWm8uaW50ZXJwb2xhdGVTdHJpbmc9ZnU7dmFyIEdjPS9bLStdPyg/Olxk
K1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxLYz1uZXcgUmVnRXhwKEdjLnNvdXJj
ZSwiZyIpO1pvLmludGVycG9sYXRlPWh1LFpvLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7
dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJzdHJpbmciPT09ZT9JYS5oYXModCl8fC9eKCN8cmdiXCh8
aHNsXCgpLy50ZXN0KHQpP2N1OmZ1OnQgaW5zdGFuY2VvZiBldD9jdTpBcnJheS5pc0FycmF5KHQp
P2d1OiJvYmplY3QiPT09ZSYmaXNOYU4odCk/c3U6bHUpKG4sdCl9XSxaby5pbnRlcnBvbGF0ZUFy
cmF5PWd1O3ZhciBRYz1mdW5jdGlvbigpe3JldHVybiB3dH0sbnM9Wm8ubWFwKHtsaW5lYXI6UWMs
cG9seTpNdSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG11fSxjdWJpYzpmdW5jdGlvbigpe3JldHVy
biB5dX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIF91fSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gYnV9
LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiB3dX0sZWxhc3RpYzpTdSxiYWNrOmt1LGJvdW5jZTpm
dW5jdGlvbigpe3JldHVybiBFdX19KSx0cz1aby5tYXAoeyJpbiI6d3Qsb3V0OnZ1LCJpbi1vdXQi
OmR1LCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiBkdSh2dShuKSl9fSk7Wm8uZWFzZT1mdW5j
dGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5zdWJzdHJpbmcoMCx0KTpuLHI9
dD49MD9uLnN1YnN0cmluZyh0KzEpOiJpbiI7cmV0dXJuIGU9bnMuZ2V0KGUpfHxRYyxyPXRzLmdl
dChyKXx8d3QscHUocihlLmFwcGx5KG51bGwsVm8uY2FsbChhcmd1bWVudHMsMSkpKSl9LFpvLmlu
dGVycG9sYXRlSGNsPUF1LFpvLmludGVycG9sYXRlSHNsPUN1LFpvLmludGVycG9sYXRlTGFiPU51
LFpvLmludGVycG9sYXRlUm91bmQ9enUsWm8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe3ZhciB0PSRv
LmNyZWF0ZUVsZW1lbnROUyhaby5ucy5wcmVmaXguc3ZnLCJnIik7cmV0dXJuKFpvLnRyYW5zZm9y
bT1mdW5jdGlvbihuKXtpZihudWxsIT1uKXt0LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKTt2
YXIgZT10LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyBMdShlP2Uu
bWF0cml4OmVzKX0pKG4pfSxMdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4i
dHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdY
KCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIGVzPXthOjEsYjowLGM6
MCxkOjEsZTowLGY6MH07Wm8uaW50ZXJwb2xhdGVUcmFuc2Zvcm09RHUsWm8ubGF5b3V0PXt9LFpv
LmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciB0PVtd
LGU9LTEscj1uLmxlbmd0aDsrK2U8cjspdC5wdXNoKGp1KG5bZV0pKTtyZXR1cm4gdH19LFpvLmxh
eW91dC5jaG9yZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbixzLGYsaCxnLHA9e30sdj1b
XSxkPVpvLnJhbmdlKGkpLG09W107Zm9yKGU9W10scj1bXSxuPTAsaD0tMTsrK2g8aTspe2Zvcihz
PTAsZz0tMTsrK2c8aTspcys9dVtoXVtnXTt2LnB1c2gocyksbS5wdXNoKFpvLnJhbmdlKGkpKSxu
Kz1zfWZvcihvJiZkLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gbyh2W25dLHZbdF0pfSksYSYm
bS5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7bi5zb3J0KGZ1bmN0aW9uKG4sZSl7cmV0dXJuIGEodVt0
XVtuXSx1W3RdW2VdKX0pfSksbj0od2EtbCppKS9uLHM9MCxoPS0xOysraDxpOyl7Zm9yKGY9cyxn
PS0xOysrZzxpOyl7dmFyIHk9ZFtoXSx4PW1beV1bZ10sTT11W3ldW3hdLF89cyxiPXMrPU0qbjtw
W3krIi0iK3hdPXtpbmRleDp5LHN1YmluZGV4Ongsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOmIsdmFs
dWU6TX19clt5XT17aW5kZXg6eSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6cyx2YWx1ZToocy1mKS9u
fSxzKz1sfWZvcihoPS0xOysraDxpOylmb3IoZz1oLTE7KytnPGk7KXt2YXIgdz1wW2grIi0iK2dd
LFM9cFtnKyItIitoXTsody52YWx1ZXx8Uy52YWx1ZSkmJmUucHVzaCh3LnZhbHVlPFMudmFsdWU/
e3NvdXJjZTpTLHRhcmdldDp3fTp7c291cmNlOncsdGFyZ2V0OlN9KX1jJiZ0KCl9ZnVuY3Rpb24g
dCgpe2Uuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBjKChuLnNvdXJjZS52YWx1ZStuLnRhcmdl
dC52YWx1ZSkvMiwodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIpfSl9dmFyIGUscix1
LGksbyxhLGMscz17fSxsPTA7cmV0dXJuIHMubWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyhpPSh1PW4pJiZ1Lmxlbmd0aCxlPXI9bnVsbCxzKTp1fSxzLnBhZGRpbmc9
ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bixlPXI9bnVsbCxzKTpsfSxz
LnNvcnRHcm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixlPXI9
bnVsbCxzKTpvfSxzLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg/KGE9bixlPW51bGwscyk6YX0scy5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG4pe3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPyhjPW4sZSYmdCgpLHMpOmN9LHMuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0
dXJuIGV8fG4oKSxlfSxzLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHxuKCkscn0sc30sWm8u
bGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gZnVuY3Rpb24odCxl
LHIsdSl7aWYodC5wb2ludCE9PW4pe3ZhciBpPXQuY3gtbi54LG89dC5jeS1uLnksYT11LWUsYz1p
KmkrbypvO2lmKGM+YSphL2Qpe2lmKHA+Yyl7dmFyIHM9dC5jaGFyZ2UvYztuLnB4LT1pKnMsbi5w
eS09bypzfXJldHVybiEwfWlmKHQucG9pbnQmJmMmJnA+Yyl7dmFyIHM9dC5wb2ludENoYXJnZS9j
O24ucHgtPWkqcyxuLnB5LT1vKnN9fXJldHVybiF0LmNoYXJnZX19ZnVuY3Rpb24gdChuKXtuLnB4
PVpvLmV2ZW50Lngsbi5weT1aby5ldmVudC55LGEucmVzdW1lKCl9dmFyIGUscix1LGksbyxhPXt9
LGM9Wm8uZGlzcGF0Y2goInN0YXJ0IiwidGljayIsImVuZCIpLHM9WzEsMV0sbD0uOSxmPXJzLGg9
dXMsZz0tMzAscD1pcyx2PS4xLGQ9LjY0LG09W10seT1bXTtyZXR1cm4gYS50aWNrPWZ1bmN0aW9u
KCl7aWYoKHIqPS45OSk8LjAwNSlyZXR1cm4gYy5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6cj0wfSks
ITA7dmFyIHQsZSxhLGYsaCxwLGQseCxNLF89bS5sZW5ndGgsYj15Lmxlbmd0aDtmb3IoZT0wO2I+
ZTsrK2UpYT15W2VdLGY9YS5zb3VyY2UsaD1hLnRhcmdldCx4PWgueC1mLngsTT1oLnktZi55LChw
PXgqeCtNKk0pJiYocD1yKmlbZV0qKChwPU1hdGguc3FydChwKSktdVtlXSkvcCx4Kj1wLE0qPXAs
aC54LT14KihkPWYud2VpZ2h0LyhoLndlaWdodCtmLndlaWdodCkpLGgueS09TSpkLGYueCs9eCoo
ZD0xLWQpLGYueSs9TSpkKTtpZigoZD1yKnYpJiYoeD1zWzBdLzIsTT1zWzFdLzIsZT0tMSxkKSlm
b3IoOysrZTxfOylhPW1bZV0sYS54Kz0oeC1hLngpKmQsYS55Kz0oTS1hLnkpKmQ7aWYoZylmb3Io
VnUodD1aby5nZW9tLnF1YWR0cmVlKG0pLHIsbyksZT0tMTsrK2U8XzspKGE9bVtlXSkuZml4ZWR8
fHQudmlzaXQobihhKSk7Zm9yKGU9LTE7KytlPF87KWE9bVtlXSxhLmZpeGVkPyhhLng9YS5weCxh
Lnk9YS5weSk6KGEueC09KGEucHgtKGEucHg9YS54KSkqbCxhLnktPShhLnB5LShhLnB5PWEueSkp
KmwpO2MudGljayh7dHlwZToidGljayIsYWxwaGE6cn0pfSxhLm5vZGVzPWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPW4sYSk6bX0sYS5saW5rcz1mdW5jdGlvbihuKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1uLGEpOnl9LGEuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8ocz1uLGEpOnN9LGEubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6Zn0s
YS5kaXN0YW5jZT1hLmxpbmtEaXN0YW5jZSxhLmxpbmtTdHJlbmd0aD1mdW5jdGlvbihuKXtyZXR1
cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmh9LGEu
ZnJpY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K24sYSk6bH0s
YS5jaGFyZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9u
Ij09dHlwZW9mIG4/bjorbixhKTpnfSxhLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhwPW4qbixhKTpNYXRoLnNxcnQocCl9LGEuZ3Jhdml0eT1mdW5j
dGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0rbixhKTp2fSxhLnRoZXRhPWZ1bmN0
aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW4qbixhKTpNYXRoLnNxcnQoZCl9LGEu
YWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K24scj9yPW4+MD9u
OjA6bj4wJiYoYy5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOnI9bn0pLFpvLnRpbWVyKGEudGlj
aykpLGEpOnJ9LGEuc3RhcnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7aWYoIWUpe2Zvcihl
PW5ldyBBcnJheShjKSxhPTA7Yz5hOysrYSllW2FdPVtdO2ZvcihhPTA7cz5hOysrYSl7dmFyIHU9
eVthXTtlW3Uuc291cmNlLmluZGV4XS5wdXNoKHUudGFyZ2V0KSxlW3UudGFyZ2V0LmluZGV4XS5w
dXNoKHUuc291cmNlKX19Zm9yKHZhciBpLG89ZVt0XSxhPS0xLHM9by5sZW5ndGg7KythPHM7KWlm
KCFpc05hTihpPW9bYV1bbl0pKXJldHVybiBpO3JldHVybiBNYXRoLnJhbmRvbSgpKnJ9dmFyIHQs
ZSxyLGM9bS5sZW5ndGgsbD15Lmxlbmd0aCxwPXNbMF0sdj1zWzFdO2Zvcih0PTA7Yz50OysrdCko
cj1tW3RdKS5pbmRleD10LHIud2VpZ2h0PTA7Zm9yKHQ9MDtsPnQ7Kyt0KXI9eVt0XSwibnVtYmVy
Ij09dHlwZW9mIHIuc291cmNlJiYoci5zb3VyY2U9bVtyLnNvdXJjZV0pLCJudW1iZXIiPT10eXBl
b2Ygci50YXJnZXQmJihyLnRhcmdldD1tW3IudGFyZ2V0XSksKytyLnNvdXJjZS53ZWlnaHQsKyty
LnRhcmdldC53ZWlnaHQ7Zm9yKHQ9MDtjPnQ7Kyt0KXI9bVt0XSxpc05hTihyLngpJiYoci54PW4o
IngiLHApKSxpc05hTihyLnkpJiYoci55PW4oInkiLHYpKSxpc05hTihyLnB4KSYmKHIucHg9ci54
KSxpc05hTihyLnB5KSYmKHIucHk9ci55KTtpZih1PVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBmKWZv
cih0PTA7bD50OysrdCl1W3RdPStmLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDtsPnQ7
Kyt0KXVbdF09ZjtpZihpPVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBoKWZvcih0PTA7bD50OysrdClp
W3RdPStoLmNhbGwodGhpcyx5W3RdLHQpO2Vsc2UgZm9yKHQ9MDtsPnQ7Kyt0KWlbdF09aDtpZihv
PVtdLCJmdW5jdGlvbiI9PXR5cGVvZiBnKWZvcih0PTA7Yz50OysrdClvW3RdPStnLmNhbGwodGhp
cyxtW3RdLHQpO2Vsc2UgZm9yKHQ9MDtjPnQ7Kyt0KW9bdF09ZztyZXR1cm4gYS5yZXN1bWUoKX0s
YS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSguMSl9LGEuc3RvcD1mdW5jdGlvbigp
e3JldHVybiBhLmFscGhhKDApfSxhLmRyYWc9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8KGU9Wm8uYmVo
YXZpb3IuZHJhZygpLm9yaWdpbih3dCkub24oImRyYWdzdGFydC5mb3JjZSIsT3UpLm9uKCJkcmFn
LmZvcmNlIix0KS5vbigiZHJhZ2VuZC5mb3JjZSIsWXUpKSxhcmd1bWVudHMubGVuZ3RoPyh0aGlz
Lm9uKCJtb3VzZW92ZXIuZm9yY2UiLEl1KS5vbigibW91c2VvdXQuZm9yY2UiLFp1KS5jYWxsKGUp
LHZvaWQgMCk6ZX0sWm8ucmViaW5kKGEsYywib24iKX07dmFyIHJzPTIwLHVzPTEsaXM9MS8wO1pv
LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHUpe3ZhciBpLG89W3VdLGE9
W107Zm9yKHUuZGVwdGg9MDtudWxsIT0oaT1vLnBvcCgpKTspaWYoYS5wdXNoKGkpLChzPWUuY2Fs
bChuLGksaS5kZXB0aCkpJiYoYz1zLmxlbmd0aCkpe2Zvcih2YXIgYyxzLGw7LS1jPj0wOylvLnB1
c2gobD1zW2NdKSxsLnBhcmVudD1pLGwuZGVwdGg9aS5kZXB0aCsxO3ImJihpLnZhbHVlPTApLGku
Y2hpbGRyZW49c31lbHNlIHImJihpLnZhbHVlPStyLmNhbGwobixpLGkuZGVwdGgpfHwwKSxkZWxl
dGUgaS5jaGlsZHJlbjtyZXR1cm4gQnUodSxmdW5jdGlvbihuKXt2YXIgZSx1O3QmJihlPW4uY2hp
bGRyZW4pJiZlLnNvcnQodCksciYmKHU9bi5wYXJlbnQpJiYodS52YWx1ZSs9bi52YWx1ZSl9KSxh
fXZhciB0PUd1LGU9V3Uscj1KdTtyZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJigk
dSh0LGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJihuLnZhbHVlPTApfSksQnUodCxmdW5jdGlvbih0
KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9
dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSksdH0sbn0sWm8ubGF5b3V0LnBhcnRpdGlv
bj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxlLHIsdSl7dmFyIGk9dC5jaGlsZHJlbjtpZih0Lng9
ZSx0Lnk9dC5kZXB0aCp1LHQuZHg9cix0LmR5PXUsaSYmKG89aS5sZW5ndGgpKXt2YXIgbyxhLGMs
cz0tMTtmb3Iocj10LnZhbHVlP3IvdC52YWx1ZTowOysrczxvOyluKGE9aVtzXSxlLGM9YS52YWx1
ZSpyLHUpLGUrPWN9fWZ1bmN0aW9uIHQobil7dmFyIGU9bi5jaGlsZHJlbixyPTA7aWYoZSYmKHU9
ZS5sZW5ndGgpKWZvcih2YXIgdSxpPS0xOysraTx1OylyPU1hdGgubWF4KHIsdChlW2ldKSk7cmV0
dXJuIDErcn1mdW5jdGlvbiBlKGUsaSl7dmFyIG89ci5jYWxsKHRoaXMsZSxpKTtyZXR1cm4gbihv
WzBdLDAsdVswXSx1WzFdL3Qob1swXSkpLG99dmFyIHI9Wm8ubGF5b3V0LmhpZXJhcmNoeSgpLHU9
WzEsMV07cmV0dXJuIGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
dT1uLGUpOnV9LFh1KGUscil9LFpvLmxheW91dC5waWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGkp
e3ZhciBvPWkubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuK3QuY2FsbChuLGUscil9KSxhPSsoImZ1
bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksYz0oKCJmdW5jdGlv
biI9PXR5cGVvZiB1P3UuYXBwbHkodGhpcyxhcmd1bWVudHMpOnUpLWEpL1pvLnN1bShvKSxzPVpv
LnJhbmdlKGkubGVuZ3RoKTtudWxsIT1lJiZzLnNvcnQoZT09PW9zP2Z1bmN0aW9uKG4sdCl7cmV0
dXJuIG9bdF0tb1tuXX06ZnVuY3Rpb24obix0KXtyZXR1cm4gZShpW25dLGlbdF0pfSk7dmFyIGw9
W107cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgdDtsW25dPXtkYXRhOmlbbl0sdmFs
dWU6dD1vW25dLHN0YXJ0QW5nbGU6YSxlbmRBbmdsZTphKz10KmN9fSksbH12YXIgdD1OdW1iZXIs
ZT1vcyxyPTAsdT13YTtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8odD1lLG4pOnR9LG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8oZT10LG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8ocj10LG4pOnJ9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgb3M9e307Wm8ubGF5b3V0LnN0YWNrPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gbihhLGMpe3ZhciBzPWEubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2Fs
bChuLGUscil9KSxsPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUp
e3JldHVybltpLmNhbGwobix0LGUpLG8uY2FsbChuLHQsZSldfSl9KSxmPWUuY2FsbChuLGwsYyk7
cz1aby5wZXJtdXRlKHMsZiksbD1aby5wZXJtdXRlKGwsZik7dmFyIGgsZyxwLHY9ci5jYWxsKG4s
bCxjKSxkPXMubGVuZ3RoLG09c1swXS5sZW5ndGg7Zm9yKGc9MDttPmc7KytnKWZvcih1LmNhbGwo
bixzWzBdW2ddLHA9dltnXSxsWzBdW2ddWzFdKSxoPTE7ZD5oOysraCl1LmNhbGwobixzW2hdW2dd
LHArPWxbaC0xXVtnXVsxXSxsW2hdW2ddWzFdKTtyZXR1cm4gYX12YXIgdD13dCxlPWVpLHI9cmks
dT10aSxpPVF1LG89bmk7cmV0dXJuIG4udmFsdWVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyh0PWUsbik6dH0sbi5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmFzLmdldCh0KXx8ZWksbik6ZX0sbi5v
ZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09
dHlwZW9mIHQ/dDpjcy5nZXQodCl8fHJpLG4pOnJ9LG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD8oaT10LG4pOml9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8obz10LG4pOm99LG4ub3V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyh1PXQsbik6dX0sbn07dmFyIGFzPVpvLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKG4p
e3ZhciB0LGUscj1uLmxlbmd0aCx1PW4ubWFwKHVpKSxpPW4ubWFwKGlpKSxvPVpvLnJhbmdlKHIp
LnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gdVtuXS11W3RdfSksYT0wLGM9MCxzPVtdLGw9W107
Zm9yKHQ9MDtyPnQ7Kyt0KWU9b1t0XSxjPmE/KGErPWlbZV0scy5wdXNoKGUpKTooYys9aVtlXSxs
LnB1c2goZSkpO3JldHVybiBsLnJldmVyc2UoKS5jb25jYXQocyl9LHJldmVyc2U6ZnVuY3Rpb24o
bil7cmV0dXJuIFpvLnJhbmdlKG4ubGVuZ3RoKS5yZXZlcnNlKCl9LCJkZWZhdWx0IjplaX0pLGNz
PVpvLm1hcCh7c2lsaG91ZXR0ZTpmdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPW5b
MF0ubGVuZ3RoLG89W10sYT0wLGM9W107Zm9yKGU9MDtpPmU7KytlKXtmb3IodD0wLHI9MDt1PnQ7
dCsrKXIrPW5bdF1bZV1bMV07cj5hJiYoYT1yKSxvLnB1c2gocil9Zm9yKGU9MDtpPmU7KytlKWNb
ZV09KGEtb1tlXSkvMjtyZXR1cm4gY30sd2lnZ2xlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGks
byxhLGMscyxsPW4ubGVuZ3RoLGY9blswXSxoPWYubGVuZ3RoLGc9W107Zm9yKGdbMF09Yz1zPTAs
ZT0xO2g+ZTsrK2Upe2Zvcih0PTAsdT0wO2w+dDsrK3QpdSs9blt0XVtlXVsxXTtmb3IodD0wLGk9
MCxhPWZbZV1bMF0tZltlLTFdWzBdO2w+dDsrK3Qpe2ZvcihyPTAsbz0oblt0XVtlXVsxXS1uW3Rd
W2UtMV1bMV0pLygyKmEpO3Q+cjsrK3Ipbys9KG5bcl1bZV1bMV0tbltyXVtlLTFdWzFdKS9hO2kr
PW8qblt0XVtlXVsxXX1nW2VdPWMtPXU/aS91KmE6MCxzPmMmJihzPWMpfWZvcihlPTA7aD5lOysr
ZSlnW2VdLT1zO3JldHVybiBnfSxleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9bi5sZW5n
dGgsaT1uWzBdLmxlbmd0aCxvPTEvdSxhPVtdO2ZvcihlPTA7aT5lOysrZSl7Zm9yKHQ9MCxyPTA7
dT50O3QrKylyKz1uW3RdW2VdWzFdO2lmKHIpZm9yKHQ9MDt1PnQ7dCsrKW5bdF1bZV1bMV0vPXI7
ZWxzZSBmb3IodD0wO3U+dDt0Kyspblt0XVtlXVsxXT1vfWZvcihlPTA7aT5lOysrZSlhW2VdPTA7
cmV0dXJuIGF9LHplcm86cml9KTtaby5sYXlvdXQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gbihuLGkpe2Zvcih2YXIgbyxhLGM9W10scz1uLm1hcChlLHRoaXMpLGw9ci5jYWxsKHRoaXMs
cyxpKSxmPXUuY2FsbCh0aGlzLGwscyxpKSxpPS0xLGg9cy5sZW5ndGgsZz1mLmxlbmd0aC0xLHA9
dD8xOjEvaDsrK2k8Zzspbz1jW2ldPVtdLG8uZHg9ZltpKzFdLShvLng9ZltpXSksby55PTA7aWYo
Zz4wKWZvcihpPS0xOysraTxoOylhPXNbaV0sYT49bFswXSYmYTw9bFsxXSYmKG89Y1taby5iaXNl
Y3QoZixhLDEsZyktMV0sby55Kz1wLG8ucHVzaChuW2ldKSk7cmV0dXJuIGN9dmFyIHQ9ITAsZT1O
dW1iZXIscj1zaSx1PWFpO3JldHVybiBuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aD8ocj1idCh0KSxuKTpyfSxuLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHU9Im51bWJlciI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4pe3JldHVybiBjaShuLHQp
fTpidCh0KSxuKTp1fSxuLmZyZXF1ZW5jeT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aD8odD0hIWUsbik6dH0sbn0sWm8ubGF5b3V0LnBhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu
KG4saSl7dmFyIG89ZS5jYWxsKHRoaXMsbixpKSxhPW9bMF0sYz11WzBdLHM9dVsxXSxsPW51bGw9
PXQ/TWF0aC5zcXJ0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH07
aWYoYS54PWEueT0wLEJ1KGEsZnVuY3Rpb24obil7bi5yPStsKG4udmFsdWUpfSksQnUoYSxwaSks
cil7dmFyIGY9cioodD8xOk1hdGgubWF4KDIqYS5yL2MsMiphLnIvcykpLzI7QnUoYSxmdW5jdGlv
bihuKXtuLnIrPWZ9KSxCdShhLHBpKSxCdShhLGZ1bmN0aW9uKG4pe24uci09Zn0pfXJldHVybiBt
aShhLGMvMixzLzIsdD8xOjEvTWF0aC5tYXgoMiphLnIvYywyKmEuci9zKSksb312YXIgdCxlPVpv
LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KGxpKSxyPTAsdT1bMSwxXTtyZXR1cm4gbi5zaXplPWZ1
bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6dX0sbi5yYWRpdXM9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09ZXx8ImZ1bmN0aW9uIj09
dHlwZW9mIGU/ZTorZSxuKTp0fSxuLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHI9K3Qsbik6cn0sWHUobixlKX0sWm8ubGF5b3V0LnRyZWU9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBuKG4sdSl7dmFyIGw9by5jYWxsKHRoaXMsbix1KSxmPWxbMF0saD10KGYpO2lmKEJ1
KGgsZSksaC5wYXJlbnQubT0taC56LCR1KGgscikscykkdShmLGkpO2Vsc2V7dmFyIGc9ZixwPWYs
dj1mOyR1KGYsZnVuY3Rpb24obil7bi54PGcueCYmKGc9biksbi54PnAueCYmKHA9biksbi5kZXB0
aD52LmRlcHRoJiYodj1uKX0pO3ZhciBkPWEoZyxwKS8yLWcueCxtPWNbMF0vKHAueCthKHAsZykv
MitkKSx5PWNbMV0vKHYuZGVwdGh8fDEpOyR1KGYsZnVuY3Rpb24obil7bi54PShuLngrZCkqbSxu
Lnk9bi5kZXB0aCp5fSl9cmV0dXJuIGx9ZnVuY3Rpb24gdChuKXtmb3IodmFyIHQsZT17QTpudWxs
LGNoaWxkcmVuOltuXX0scj1bZV07bnVsbCE9KHQ9ci5wb3AoKSk7KWZvcih2YXIgdSxpPXQuY2hp
bGRyZW4sbz0wLGE9aS5sZW5ndGg7YT5vOysrbylyLnB1c2goKGlbb109dT17XzppW29dLHBhcmVu
dDp0LGNoaWxkcmVuOih1PWlbb10uY2hpbGRyZW4pJiZ1LnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51
bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPXUpO3JldHVybiBlLmNoaWxkcmVuWzBd
fWZ1bmN0aW9uIGUobil7dmFyIHQ9bi5jaGlsZHJlbixlPW4ucGFyZW50LmNoaWxkcmVuLHI9bi5p
P2Vbbi5pLTFdOm51bGw7aWYodC5sZW5ndGgpe3dpKG4pO3ZhciBpPSh0WzBdLnordFt0Lmxlbmd0
aC0xXS56KS8yO3I/KG4uej1yLnorYShuLl8sci5fKSxuLm09bi56LWkpOm4uej1pfWVsc2UgciYm
KG4uej1yLnorYShuLl8sci5fKSk7bi5wYXJlbnQuQT11KG4scixuLnBhcmVudC5BfHxlWzBdKX1m
dW5jdGlvbiByKG4pe24uXy54PW4ueituLnBhcmVudC5tLG4ubSs9bi5wYXJlbnQubX1mdW5jdGlv
biB1KG4sdCxlKXtpZih0KXtmb3IodmFyIHIsdT1uLGk9bixvPXQsYz11LnBhcmVudC5jaGlsZHJl
blswXSxzPXUubSxsPWkubSxmPW8ubSxoPWMubTtvPV9pKG8pLHU9TWkodSksbyYmdTspYz1NaShj
KSxpPV9pKGkpLGkuYT1uLHI9by56K2YtdS56LXMrYShvLl8sdS5fKSxyPjAmJihiaShTaShvLG4s
ZSksbixyKSxzKz1yLGwrPXIpLGYrPW8ubSxzKz11Lm0saCs9Yy5tLGwrPWkubTtvJiYhX2koaSkm
JihpLnQ9byxpLm0rPWYtbCksdSYmIU1pKGMpJiYoYy50PXUsYy5tKz1zLWgsZT1uKX1yZXR1cm4g
ZX1mdW5jdGlvbiBpKG4pe24ueCo9Y1swXSxuLnk9bi5kZXB0aCpjWzFdfXZhciBvPVpvLmxheW91
dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLGE9eGksYz1bMSwxXSxzPW51bGw7
cmV0dXJuIG4uc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
YT10LG4pOmF9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1u
dWxsPT0oYz10KT9pOm51bGwsbik6cz9udWxsOmN9LG4ubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09KGM9dCk/bnVsbDppLG4pOnM/YzpudWxsfSxY
dShuLG8pfSxaby5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIg
byxhPXQuY2FsbCh0aGlzLG4saSksYz1hWzBdLHM9MDtCdShjLGZ1bmN0aW9uKG4pe3ZhciB0PW4u
Y2hpbGRyZW47dCYmdC5sZW5ndGg/KG4ueD1FaSh0KSxuLnk9a2kodCkpOihuLng9bz9zKz1lKG4s
byk6MCxuLnk9MCxvPW4pfSk7dmFyIGw9QWkoYyksZj1DaShjKSxoPWwueC1lKGwsZikvMixnPWYu
eCtlKGYsbCkvMjtyZXR1cm4gQnUoYyx1P2Z1bmN0aW9uKG4pe24ueD0obi54LWMueCkqclswXSxu
Lnk9KGMueS1uLnkpKnJbMV19OmZ1bmN0aW9uKG4pe24ueD0obi54LWgpLyhnLWgpKnJbMF0sbi55
PSgxLShjLnk/bi55L2MueToxKSkqclsxXX0pLGF9dmFyIHQ9Wm8ubGF5b3V0LmhpZXJhcmNoeSgp
LnNvcnQobnVsbCkudmFsdWUobnVsbCksZT14aSxyPVsxLDFdLHU9ITE7cmV0dXJuIG4uc2VwYXJh
dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc2l6
ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT0ocj10KSxuKTp1
P251bGw6cn0sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
dT1udWxsIT0ocj10KSxuKTp1P3I6bnVsbH0sWHUobix0KX0sWm8ubGF5b3V0LnRyZWVtYXA9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBuKG4sdCl7Zm9yKHZhciBlLHIsdT0tMSxpPW4ubGVuZ3RoOysrdTxp
OylyPShlPW5bdV0pLnZhbHVlKigwPnQ/MDp0KSxlLmFyZWE9aXNOYU4ocil8fDA+PXI/MDpyfWZ1
bmN0aW9uIHQoZSl7dmFyIGk9ZS5jaGlsZHJlbjtpZihpJiZpLmxlbmd0aCl7dmFyIG8sYSxjLHM9
ZihlKSxsPVtdLGg9aS5zbGljZSgpLHA9MS8wLHY9InNsaWNlIj09PWc/cy5keDoiZGljZSI9PT1n
P3MuZHk6InNsaWNlLWRpY2UiPT09Zz8xJmUuZGVwdGg/cy5keTpzLmR4Ok1hdGgubWluKHMuZHgs
cy5keSk7Zm9yKG4oaCxzLmR4KnMuZHkvZS52YWx1ZSksbC5hcmVhPTA7KGM9aC5sZW5ndGgpPjA7
KWwucHVzaChvPWhbYy0xXSksbC5hcmVhKz1vLmFyZWEsInNxdWFyaWZ5IiE9PWd8fChhPXIobCx2
KSk8PXA/KGgucG9wKCkscD1hKToobC5hcmVhLT1sLnBvcCgpLmFyZWEsdShsLHYscywhMSksdj1N
YXRoLm1pbihzLmR4LHMuZHkpLGwubGVuZ3RoPWwuYXJlYT0wLHA9MS8wKTtsLmxlbmd0aCYmKHUo
bCx2LHMsITApLGwubGVuZ3RoPWwuYXJlYT0wKSxpLmZvckVhY2godCl9fWZ1bmN0aW9uIGUodCl7
dmFyIHI9dC5jaGlsZHJlbjtpZihyJiZyLmxlbmd0aCl7dmFyIGksbz1mKHQpLGE9ci5zbGljZSgp
LGM9W107Zm9yKG4oYSxvLmR4Km8uZHkvdC52YWx1ZSksYy5hcmVhPTA7aT1hLnBvcCgpOyljLnB1
c2goaSksYy5hcmVhKz1pLmFyZWEsbnVsbCE9aS56JiYodShjLGkuej9vLmR4Om8uZHksbywhYS5s
ZW5ndGgpLGMubGVuZ3RoPWMuYXJlYT0wKTtyLmZvckVhY2goZSl9fWZ1bmN0aW9uIHIobix0KXtm
b3IodmFyIGUscj1uLmFyZWEsdT0wLGk9MS8wLG89LTEsYT1uLmxlbmd0aDsrK288YTspKGU9bltv
XS5hcmVhKSYmKGk+ZSYmKGk9ZSksZT51JiYodT1lKSk7cmV0dXJuIHIqPXIsdCo9dCxyP01hdGgu
bWF4KHQqdSpwL3Isci8odCppKnApKToxLzB9ZnVuY3Rpb24gdShuLHQsZSxyKXt2YXIgdSxpPS0x
LG89bi5sZW5ndGgsYT1lLngscz1lLnksbD10P2Mobi5hcmVhL3QpOjA7aWYodD09ZS5keCl7Zm9y
KChyfHxsPmUuZHkpJiYobD1lLmR5KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1zLHUuZHk9bCxh
Kz11LmR4PU1hdGgubWluKGUueCtlLmR4LWEsbD9jKHUuYXJlYS9sKTowKTt1Lno9ITAsdS5keCs9
ZS54K2UuZHgtYSxlLnkrPWwsZS5keS09bH1lbHNle2Zvcigocnx8bD5lLmR4KSYmKGw9ZS5keCk7
KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9cyx1LmR4PWwscys9dS5keT1NYXRoLm1pbihlLnkrZS5k
eS1zLGw/Yyh1LmFyZWEvbCk6MCk7dS56PSExLHUuZHkrPWUueStlLmR5LXMsZS54Kz1sLGUuZHgt
PWx9fWZ1bmN0aW9uIGkocil7dmFyIHU9b3x8YShyKSxpPXVbMF07cmV0dXJuIGkueD0wLGkueT0w
LGkuZHg9c1swXSxpLmR5PXNbMV0sbyYmYS5yZXZhbHVlKGkpLG4oW2ldLGkuZHgqaS5keS9pLnZh
bHVlKSwobz9lOnQpKGkpLGgmJihvPXUpLHV9dmFyIG8sYT1aby5sYXlvdXQuaGllcmFyY2h5KCks
Yz1NYXRoLnJvdW5kLHM9WzEsMV0sbD1udWxsLGY9TmksaD0hMSxnPSJzcXVhcmlmeSIscD0uNSoo
MStNYXRoLnNxcnQoNSkpO3JldHVybiBpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHM9bixpKTpzfSxpLnBhZGRpbmc9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXt2
YXIgZT1uLmNhbGwoaSx0LHQuZGVwdGgpO3JldHVybiBudWxsPT1lP05pKHQpOnppKHQsIm51bWJl
ciI9PXR5cGVvZiBlP1tlLGUsZSxlXTplKX1mdW5jdGlvbiBlKHQpe3JldHVybiB6aSh0LG4pfWlm
KCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsO3ZhciByO3JldHVybiBmPW51bGw9PShsPW4pP05p
OiJmdW5jdGlvbiI9PShyPXR5cGVvZiBuKT90OiJudW1iZXIiPT09cj8obj1bbixuLG4sbl0sZSk6
ZSxpfSxpLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4/TWF0
aC5yb3VuZDpOdW1iZXIsaSk6YyE9TnVtYmVyfSxpLnN0aWNreT1mdW5jdGlvbihuKXtyZXR1cm4g
YXJndW1lbnRzLmxlbmd0aD8oaD1uLG89bnVsbCxpKTpofSxpLnJhdGlvPWZ1bmN0aW9uKG4pe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW4saSk6cH0saS5tb2RlPWZ1bmN0aW9uKG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPyhnPW4rIiIsaSk6Z30sWHUoaSxhKX0sWm8ucmFuZG9tPXtub3Jt
YWw6ZnVuY3Rpb24obix0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAyPmUmJih0PTEp
LDE+ZSYmKG49MCksZnVuY3Rpb24oKXt2YXIgZSxyLHU7ZG8gZT0yKk1hdGgucmFuZG9tKCktMSxy
PTIqTWF0aC5yYW5kb20oKS0xLHU9ZSplK3Iqcjt3aGlsZSghdXx8dT4xKTtyZXR1cm4gbit0KmUq
TWF0aC5zcXJ0KC0yKk1hdGgubG9nKHUpL3UpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIG49
Wm8ucmFuZG9tLm5vcm1hbC5hcHBseShabyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3Jl
dHVybiBNYXRoLmV4cChuKCkpfX0sYmF0ZXM6ZnVuY3Rpb24obil7dmFyIHQ9Wm8ucmFuZG9tLmly
d2luSGFsbChuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCgpL259fSxpcndpbkhhbGw6ZnVu
Y3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO24+ZTtlKyspdCs9TWF0
aC5yYW5kb20oKTtyZXR1cm4gdH19fSxaby5zY2FsZT17fTt2YXIgc3M9e2Zsb29yOnd0LGNlaWw6
d3R9O1pvLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBVaShbMCwxXSxbMCwxXSxodSwh
MSl9O3ZhciBscz17czoxLGc6MSxwOjEscjoxLGU6MX07Wm8uc2NhbGUubG9nPWZ1bmN0aW9uKCl7
cmV0dXJuIFZpKFpvLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07
dmFyIGZzPVpvLmZvcm1hdCgiLjBlIiksaHM9e2Zsb29yOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRo
LmNlaWwoLW4pfSxjZWlsOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmZsb29yKC1uKX19O1pvLnNj
YWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBYaShaby5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0s
Wm8uc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiBaby5zY2FsZS5wb3coKS5leHBvbmVudCgu
NSl9LFpvLnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQmkoW10se3Q6InJhbmdlIixh
OltbXV19KX0sWm8uc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiBaby5zY2FsZS5v
cmRpbmFsKCkucmFuZ2UoZ3MpfSxaby5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJu
IFpvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShwcyl9LFpvLnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0
aW9uKCl7cmV0dXJuIFpvLnNjYWxlLm9yZGluYWwoKS5yYW5nZSh2cyl9LFpvLnNjYWxlLmNhdGVn
b3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIFpvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShkcyl9O3Zh
ciBncz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwx
NDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcCh2dCkscHM9WzIwNjIyNjAsMTE0
NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0
Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1
NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAodnQp
LHZzPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5
MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5
LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1
ODk2NTRdLm1hcCh2dCksZHM9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5
NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMs
MTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5
NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcCh2dCk7Wm8uc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24o
KXtyZXR1cm4gV2koW10sW10pfSxaby5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBK
aSgwLDEsWzAsMV0pfSxaby5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gR2koWy41
XSxbMCwxXSl9LFpvLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIEtpKFswLDFdKX0s
Wm8uc3ZnPXt9LFpvLnN2Zy5hcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49dC5hcHBs
eSh0aGlzLGFyZ3VtZW50cyksaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXIuYXBwbHkodGhp
cyxhcmd1bWVudHMpK21zLGE9dS5hcHBseSh0aGlzLGFyZ3VtZW50cykrbXMsYz0obz5hJiYoYz1v
LG89YSxhPWMpLGEtbykscz1iYT5jPyIwIjoiMSIsbD1NYXRoLmNvcyhvKSxmPU1hdGguc2luKG8p
LGg9TWF0aC5jb3MoYSksZz1NYXRoLnNpbihhKTsKLXJldHVybiBjPj15cz9uPyJNMCwiK2krIkEi
K2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAwLCIraSsiTTAsIitu
KyJBIituKyIsIituKyIgMCAxLDAgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLDAgMCwiK24rIloi
OiJNMCwiK2krIkEiK2krIiwiK2krIiAwIDEsMSAwLCIrLWkrIkEiK2krIiwiK2krIiAwIDEsMSAw
LCIraSsiWiI6bj8iTSIraSpsKyIsIitpKmYrIkEiK2krIiwiK2krIiAwICIrcysiLDEgIitpKmgr
IiwiK2kqZysiTCIrbipoKyIsIituKmcrIkEiK24rIiwiK24rIiAwICIrcysiLDAgIituKmwrIiwi
K24qZisiWiI6Ik0iK2kqbCsiLCIraSpmKyJBIitpKyIsIitpKyIgMCAiK3MrIiwxICIraSpoKyIs
IitpKmcrIkwwLDAiKyJaIn12YXIgdD1RaSxlPW5vLHI9dG8sdT1lbztyZXR1cm4gbi5pbm5lclJh
ZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxu
Lm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWJ0KHQp
LG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o
cj1idCh0KSxuKTpyfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVu
Z3RoPyh1PWJ0KHQpLG4pOnV9LG4uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0odC5hcHBseSh0
aGlzLGFyZ3VtZW50cykrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oci5hcHBseSh0aGlz
LGFyZ3VtZW50cykrdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIrbXM7cmV0dXJuW01hdGguY29z
KGkpKm4sTWF0aC5zaW4oaSkqbl19LG59O3ZhciBtcz0tU2EseXM9d2Eta2E7Wm8uc3ZnLmxpbmU9
ZnVuY3Rpb24oKXtyZXR1cm4gcm8od3QpfTt2YXIgeHM9Wm8ubWFwKHtsaW5lYXI6dW8sImxpbmVh
ci1jbG9zZWQiOmlvLHN0ZXA6b28sInN0ZXAtYmVmb3JlIjphbywic3RlcC1hZnRlciI6Y28sYmFz
aXM6cG8sImJhc2lzLW9wZW4iOnZvLCJiYXNpcy1jbG9zZWQiOm1vLGJ1bmRsZTp5byxjYXJkaW5h
bDpmbywiY2FyZGluYWwtb3BlbiI6c28sImNhcmRpbmFsLWNsb3NlZCI6bG8sbW9ub3RvbmU6U299
KTt4cy5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNsb3NlZCQvLnRl
c3Qobil9KTt2YXIgTXM9WzAsMi8zLDEvMywwXSxfcz1bMCwxLzMsMi8zLDBdLGJzPVswLDEvNiwy
LzMsMS82XTtaby5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1ybyhrbyk7cmV0dXJu
IG4ucmFkaXVzPW4ueCxkZWxldGUgbi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sYW8ucmV2
ZXJzZT1jbyxjby5yZXZlcnNlPWFvLFpvLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEVvKHd0
KX0sWm8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49RW8oa28pO3JldHVybiBuLnJh
ZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVsZXRlIG4ueDAsbi5vdXRl
clJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbi5zdGFydEFu
Z2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5lbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LFpvLnN2
Zy5jaG9yZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixhKXt2YXIgYz10KHRoaXMsaSxuLGEpLHM9
dCh0aGlzLG8sbixhKTtyZXR1cm4iTSIrYy5wMCtyKGMucixjLnAxLGMuYTEtYy5hMCkrKGUoYyxz
KT91KGMucixjLnAxLGMucixjLnAwKTp1KGMucixjLnAxLHMucixzLnAwKStyKHMucixzLnAxLHMu
YTEtcy5hMCkrdShzLnIscy5wMSxjLnIsYy5wMCkpKyJaIn1mdW5jdGlvbiB0KG4sdCxlLHIpe3Zh
ciB1PXQuY2FsbChuLGUsciksaT1hLmNhbGwobix1LHIpLG89Yy5jYWxsKG4sdSxyKSttcyxsPXMu
Y2FsbChuLHUscikrbXM7cmV0dXJue3I6aSxhMDpvLGExOmwscDA6W2kqTWF0aC5jb3MobyksaSpN
YXRoLnNpbihvKV0scDE6W2kqTWF0aC5jb3MobCksaSpNYXRoLnNpbihsKV19fWZ1bmN0aW9uIGUo
bix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4sdCxlKXtyZXR1
cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPmJhKSsiLDEgIit0fWZ1bmN0aW9uIHUobix0LGUscil7
cmV0dXJuIlEgMCwwICIrcn12YXIgaT1ncixvPXByLGE9QW8sYz10byxzPWVvO3JldHVybiBuLnJh
ZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1idCh0KSxuKTphfSxu
LnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1idCh0KSxuKTpp
fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1idCh0KSxu
KTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9
YnQodCksbik6Y30sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0
aD8ocz1idCh0KSxuKTpzfSxufSxaby5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBu
KG4sdSl7dmFyIGk9dC5jYWxsKHRoaXMsbix1KSxvPWUuY2FsbCh0aGlzLG4sdSksYT0oaS55K28u
eSkvMixjPVtpLHt4OmkueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBjPWMubWFwKHIpLCJN
IitjWzBdKyJDIitjWzFdKyIgIitjWzJdKyIgIitjWzNdfXZhciB0PWdyLGU9cHIscj1DbztyZXR1
cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YnQoZSks
bik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQo
dCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3Ro
PyhyPXQsbik6cn0sbn0sWm8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPVpv
LnN2Zy5kaWFnb25hbCgpLHQ9Q28sZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJvamVjdGlvbj1m
dW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKE5vKHQ9bikpOnR9LG59LFpvLnN2
Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuKHdzLmdldCh0LmNhbGwo
dGhpcyxuLHIpKXx8VG8pKGUuY2FsbCh0aGlzLG4scikpfXZhciB0PUxvLGU9em87cmV0dXJuIG4u
dHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1idChlKSxuKTp0fSxu
LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YnQodCksbik6ZX0s
bn07dmFyIHdzPVpvLm1hcCh7Y2lyY2xlOlRvLGNyb3NzOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGgu
c3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10KyJIIistdCsiViIrLTMqdCsiSCIrdCsi
ViIrLXQrIkgiKzMqdCsiViIrdCsiSCIrdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsi
WiJ9LGRpYW1vbmQ6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqQXMpKSxlPXQqQXM7
cmV0dXJuIk0wLCIrLXQrIkwiK2UrIiwwIisiIDAsIit0KyIgIistZSsiLDAiKyJaIn0sc3F1YXJl
OmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIistdCsiLCIrLXQrIkwi
K3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsiWiJ9LCJ0cmlhbmdsZS1kb3duIjpm
dW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi9FcyksZT10KkVzLzI7cmV0dXJuIk0wLCIrZSsi
TCIrdCsiLCIrLWUrIiAiKy10KyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7
dmFyIHQ9TWF0aC5zcXJ0KG4vRXMpLGU9dCpFcy8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitl
KyIgIistdCsiLCIrZSsiWiJ9fSk7Wm8uc3ZnLnN5bWJvbFR5cGVzPXdzLmtleXMoKTt2YXIgU3Ms
a3MsRXM9TWF0aC5zcXJ0KDMpLEFzPU1hdGgudGFuKDMwKkFhKSxDcz1bXSxOcz0wO0NzLmNhbGw9
cGEuY2FsbCxDcy5lbXB0eT1wYS5lbXB0eSxDcy5ub2RlPXBhLm5vZGUsQ3Muc2l6ZT1wYS5zaXpl
LFpvLnRyYW5zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/U3M/bi50
cmFuc2l0aW9uKCk6bjptYS50cmFuc2l0aW9uKCl9LFpvLnRyYW5zaXRpb24ucHJvdG90eXBlPUNz
LENzLnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9W107bj1iKG4pO2Zv
cih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7aS5wdXNoKHQ9W10pO2Zvcih2YXIgYz10
aGlzW29dLHM9LTEsbD1jLmxlbmd0aDsrK3M8bDspKHI9Y1tzXSkmJihlPW4uY2FsbChyLHIuX19k
YXRhX18scyxvKSk/KCJfX2RhdGFfXyJpbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSxQbyhl
LHMsdSxyLl9fdHJhbnNpdGlvbl9fW3VdKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4g
cW8oaSx1KX0sQ3Muc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlzLmlk
LGE9W107bj13KG4pO2Zvcih2YXIgYz0tMSxzPXRoaXMubGVuZ3RoOysrYzxzOylmb3IodmFyIGw9
dGhpc1tjXSxmPS0xLGg9bC5sZW5ndGg7KytmPGg7KWlmKHI9bFtmXSl7aT1yLl9fdHJhbnNpdGlv
bl9fW29dLGU9bi5jYWxsKHIsci5fX2RhdGFfXyxmLGMpLGEucHVzaCh0PVtdKTtmb3IodmFyIGc9
LTEscD1lLmxlbmd0aDsrK2c8cDspKHU9ZVtnXSkmJlBvKHUsZyxvLGkpLHQucHVzaCh1KX1yZXR1
cm4gcW8oYSxvKX0sQ3MuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlv
biIhPXR5cGVvZiBuJiYobj1SKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3RoO28+aTtpKysp
e3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShy
PWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1cm4gcW8odSx0
aGlzLmlkKX0sQ3MudHdlZW49ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO3JldHVybiBhcmd1
bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bZV0udHdlZW4uZ2V0KG4p
OlAodGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3QuX190cmFuc2l0aW9uX19bZV0udHdlZW4ucmVt
b3ZlKG4pfTpmdW5jdGlvbihyKXtyLl9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLnNldChuLHQpfSl9
LENzLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUo
YSl9ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1m
dW5jdGlvbiB1KG4pe3JldHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10
aGlzLmdldEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihuKXt0
aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3JldHVybiBudWxsPT1u
P3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2Us
YS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRy
aWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7
Zm9yKHQgaW4gbil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3Jt
Ij09bj9EdTpodSxhPVpvLm5zLnF1YWxpZnkobik7cmV0dXJuIFJvKHRoaXMsImF0dHIuIituLHQs
YS5sb2NhbD9pOnUpfSxDcy5hdHRyVHdlZW49ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSl7
dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0QXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVu
Y3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciBy
PXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3Jl
dHVybiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCxy
KG4pKX19dmFyIHU9Wm8ubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK24s
dS5sb2NhbD9yOmUpfSxDcy5zdHlsZT1mdW5jdGlvbihuLHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMu
c3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dD9yOih0
Kz0iIixmdW5jdGlvbigpe3ZhciByLHU9V28uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdl
dFByb3BlcnR5VmFsdWUobik7cmV0dXJuIHUhPT10JiYocj1odSh1LHQpLGZ1bmN0aW9uKHQpe3Ro
aXMuc3R5bGUuc2V0UHJvcGVydHkobixyKHQpLGUpfSl9KX12YXIgaT1hcmd1bWVudHMubGVuZ3Ro
O2lmKDM+aSl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPmkmJih0PSIiKTtmb3IoZSBpbiBuKXRo
aXMuc3R5bGUoZSxuW2VdLHQpO3JldHVybiB0aGlzfWU9IiJ9cmV0dXJuIFJvKHRoaXMsInN0eWxl
LiIrbix0LHUpfSxDcy5zdHlsZVR3ZWVuPWZ1bmN0aW9uKG4sdCxlKXtmdW5jdGlvbiByKHIsdSl7
dmFyIGk9dC5jYWxsKHRoaXMscix1LFdvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQ
cm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9w
ZXJ0eShuLGkodCksZSl9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihlPSIiKSx0aGlzLnR3
ZWVuKCJzdHlsZS4iK24scil9LENzLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIFJvKHRoaXMsInRl
eHQiLG4sRG8pfSxDcy5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJh
bnNpdGlvbiIsZnVuY3Rpb24oKXt2YXIgbjt0aGlzLl9fdHJhbnNpdGlvbl9fLmNvdW50PDImJihu
PXRoaXMucGFyZW50Tm9kZSkmJm4ucmVtb3ZlQ2hpbGQodGhpcyl9KX0sQ3MuZWFzZT1mdW5jdGlv
bihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKCku
X190cmFuc2l0aW9uX19bdF0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVpvLmVhc2Uu
YXBwbHkoWm8sYXJndW1lbnRzKSksUCh0aGlzLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19b
dF0uZWFzZT1ufSkpfSxDcy5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkO3JldHVybiBh
cmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKCkuX190cmFuc2l0aW9uX19bdF0uZGVsYXk6UCh0
aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9f
W3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9OihuPStuLGZ1bmN0aW9uKGUpe2Uu
X190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0pKX0sQ3MuZHVyYXRpb249ZnVuY3Rpb24obil7dmFy
IHQ9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNp
dGlvbl9fW3RdLmR1cmF0aW9uOlAodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihl
LHIsdSl7ZS5fX3RyYW5zaXRpb25fX1t0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4uY2FsbChlLGUu
X19kYXRhX18scix1KSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rpb24oZSl7ZS5fX3RyYW5zaXRp
b25fX1t0XS5kdXJhdGlvbj1ufSkpfSxDcy5lYWNoPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5p
ZDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPWtzLHU9U3M7U3M9ZSxQKHRoaXMsZnVuY3Rp
b24odCxyLHUpe2tzPXQuX190cmFuc2l0aW9uX19bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyxyLHUp
fSksa3M9cixTcz11fWVsc2UgUCh0aGlzLGZ1bmN0aW9uKHIpe3ZhciB1PXIuX190cmFuc2l0aW9u
X19bZV07KHUuZXZlbnR8fCh1LmV2ZW50PVpvLmRpc3BhdGNoKCJzdGFydCIsImVuZCIpKSkub24o
bix0KX0pO3JldHVybiB0aGlzfSxDcy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQs
ZSxyLHU9dGhpcy5pZCxpPSsrTnMsbz1bXSxhPTAsYz10aGlzLmxlbmd0aDtjPmE7YSsrKXtvLnB1
c2gobj1bXSk7Zm9yKHZhciB0PXRoaXNbYV0scz0wLGw9dC5sZW5ndGg7bD5zO3MrKykoZT10W3Nd
KSYmKHI9T2JqZWN0LmNyZWF0ZShlLl9fdHJhbnNpdGlvbl9fW3VdKSxyLmRlbGF5Kz1yLmR1cmF0
aW9uLFBvKGUscyxpLHIpKSxuLnB1c2goZSl9cmV0dXJuIHFvKG8saSl9LFpvLnN2Zy5heGlzPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbixzPVpvLnNlbGVj
dCh0aGlzKSxsPXRoaXMuX19jaGFydF9ffHxlLGY9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1u
dWxsPT1jP2YudGlja3M/Zi50aWNrcy5hcHBseShmLGEpOmYuZG9tYWluKCk6YyxnPW51bGw9PXQ/
Zi50aWNrRm9ybWF0P2YudGlja0Zvcm1hdC5hcHBseShmLGEpOnd0OnQscD1zLnNlbGVjdEFsbCgi
LnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIo
ImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixrYSksZD1aby50cmFuc2l0aW9uKHAuZXhp
dCgpKS5zdHlsZSgib3BhY2l0eSIsa2EpLnJlbW92ZSgpLG09Wm8udHJhbnNpdGlvbihwLm9yZGVy
KCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx5PVRpKGYpLHg9cy5zZWxlY3RBbGwoIi5kb21haW4iKS5k
YXRhKFswXSksTT0oeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWlu
IiksWm8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4dCIpO3Zh
ciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9cC5zZWxlY3QoInRleHQi
KS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0uc2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIp
e2Nhc2UiYm90dG9tIjpuPVVvLF8uYXR0cigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSww
KStvKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixN
YXRoLm1heCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIs
Im1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsxXSsiViIraSk7YnJl
YWs7Y2FzZSJ0b3AiOm49VW8sXy5hdHRyKCJ5MiIsLXUpLFMuYXR0cigieSIsLShNYXRoLm1heCh1
LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigi
eSIsLShNYXRoLm1heCh1LDApK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5j
aG9yIiwibWlkZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIr
LWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1qbyxfLmF0dHIoIngyIiwtdSksUy5hdHRyKCJ4IiwtKE1h
dGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4Iiwt
KE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxl
KCJ0ZXh0LWFuY2hvciIsImVuZCIpLE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lb
MV0rIkgiKy1pKTticmVhaztjYXNlInJpZ2h0IjpuPWpvLF8uYXR0cigieDIiLHUpLFMuYXR0cigi
eCIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4
IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxl
KCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJkIiwiTSIraSsiLCIreVswXSsiSDBWIit5
WzFdKyJIIitpKX1pZihmLnJhbmdlQmFuZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtsPWY9
ZnVuY3Rpb24obil7cmV0dXJuIEUobikrQX19ZWxzZSBsLnJhbmdlQmFuZD9sPWY6ZC5jYWxsKG4s
Zik7di5jYWxsKG4sbCksbS5jYWxsKG4sZil9KX12YXIgdCxlPVpvLnNjYWxlLmxpbmVhcigpLHI9
enMsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1mdW5jdGlvbih0KXty
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ub3JpZW50PWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQgaW4gTHM/dCsiIjp6cyxuKTpyfSxuLnRpY2tzPWZ1
bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlj
a1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4u
dGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9
LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8o
dT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxuLmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0
aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9
ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50aWNrU3Vi
ZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJm59LG59O3ZhciB6cz0i
Ym90dG9tIixMcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O1pvLnN2Zy5icnVzaD1m
dW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9Wm8uc2VsZWN0
KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1o
aWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsdSku
b24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0
YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQi
KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIi
KSxpLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIp
LmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNl
bGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCx3dCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigp
LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0p
LnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBUc1tuXX0pLmFwcGVuZCgicmVjdCIp
LmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0
cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3
aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGEu
c3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIGwsZj1aby50cmFuc2l0
aW9uKGkpLGg9Wm8udHJhbnNpdGlvbihvKTtjJiYobD1UaShjKSxoLmF0dHIoIngiLGxbMF0pLmF0
dHIoIndpZHRoIixsWzFdLWxbMF0pLGUoZikpLHMmJihsPVRpKHMpLGguYXR0cigieSIsbFswXSku
YXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2Vs
ZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJh
bnNsYXRlKCIrbFsrL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4pXSsiKSJ9KX1mdW5j
dGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsbFswXSksbi5zZWxlY3RBbGwo
Ii5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLGxbMV0tbFswXSl9ZnVuY3Rp
b24gcihuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIu
ZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlv
biB1KCl7ZnVuY3Rpb24gdSgpezMyPT1aby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9bnVsbCx6WzBd
LT1sWzFdLHpbMV0tPWZbMV0sQz0yKSx5KCkpfWZ1bmN0aW9uIHAoKXszMj09Wm8uZXZlbnQua2V5
Q29kZSYmMj09QyYmKHpbMF0rPWxbMV0selsxXSs9ZlsxXSxDPTAseSgpKX1mdW5jdGlvbiB2KCl7
dmFyIG49Wm8ubW91c2UoXyksdT0hMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoWm8u
ZXZlbnQuYWx0S2V5Pyh4fHwoeD1bKGxbMF0rbFsxXSkvMiwoZlswXStmWzFdKS8yXSkselswXT1s
WysoblswXTx4WzBdKV0selsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmZChuLGMsMCkm
JihlKFMpLHU9ITApLEEmJmQobixzLDEpJiYocihTKSx1PSEwKSx1JiYodChTKSx3KHt0eXBlOiJi
cnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBkKG4sdCxlKXt2YXIgcix1
LGE9VGkodCksYz1hWzBdLHM9YVsxXSxwPXpbZV0sdj1lP2Y6bCxkPXZbMV0tdlswXTtyZXR1cm4g
QyYmKGMtPXAscy09ZCtwKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihzLG5bZV0pKTpu
W2VdLEM/dT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihzLDIqeFtlXS1yKSkp
LHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVsbDppPW51bGwsdlsw
XT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXt2KCksUy5zdHlsZSgicG9pbnRlci1l
dmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0
eSgpPyJub25lIjpudWxsKSxaby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxM
Lm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigi
dG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlk
b3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLE4oKSx3KHt0eXBlOiJicnVz
aGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVpvLnNlbGVjdChaby5ldmVudC50YXJnZXQpLHc9YS5v
ZihfLGFyZ3VtZW50cyksUz1aby5zZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRl
c3QoaykmJmMsQT0hL14oZXx3KSQvLnRlc3QoaykmJnMsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49
SSgpLHo9Wm8ubW91c2UoXyksTD1aby5zZWxlY3QoV28pLm9uKCJrZXlkb3duLmJydXNoIix1KS5v
bigia2V5dXAuYnJ1c2giLHApO2lmKFpvLmV2ZW50LmNoYW5nZWRUb3VjaGVzP0wub24oInRvdWNo
bW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNoIixtKTpMLm9uKCJtb3VzZW1vdmUuYnJ1
c2giLHYpLm9uKCJtb3VzZXVwLmJydXNoIixtKSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIp
LmludGVycnVwdCgpLEMpelswXT1sWzBdLXpbMF0selsxXT1mWzBdLXpbMV07ZWxzZSBpZihrKXt2
YXIgVD0rL3ckLy50ZXN0KGspLHE9Ky9ebi8udGVzdChrKTtNPVtsWzEtVF0telswXSxmWzEtcV0t
elsxXV0selswXT1sW1RdLHpbMV09ZltxXX1lbHNlIFpvLmV2ZW50LmFsdEtleSYmKHg9ei5zbGlj
ZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUi
KS5zdHlsZSgiZGlzcGxheSIsbnVsbCksWm8uc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIs
Yi5zdHlsZSgiY3Vyc29yIikpLHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT1N
KG4sImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLHM9bnVsbCxsPVswLDBd
LGY9WzAsMF0saD0hMCxnPSEwLHA9cXNbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5l
YWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50cyksdD17eDpsLHk6ZixpOmks
ajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMuX19jaGFydF9fPXQsU3M/Wm8uc2VsZWN0KHRo
aXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUu
aixsPWUueCxmPWUueSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNo
IixmdW5jdGlvbigpe3ZhciBlPWd1KGwsdC54KSxyPWd1KGYsdC55KTtyZXR1cm4gaT1vPW51bGws
ZnVuY3Rpb24odSl7bD10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6ImJydXNoIixtb2RlOiJy
ZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5jdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5
cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlw
ZToiYnJ1c2hzdGFydCJ9KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6
ImJydXNoZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/
KGM9dCxwPXFzWyFjPDwxfCFzXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg/KHM9dCxwPXFzWyFjPDwxfCFzXSxuKTpzfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3Jl
dHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZzPyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpz
JiYoZz0hIXQpLG4pOmMmJnM/W2gsZ106Yz9oOnM/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0
KXt2YXIgZSxyLHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsx
XSxzJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxyPWMocikpLGU+
ciYmKGg9ZSxlPXIscj1oKSwoZSE9bFswXXx8ciE9bFsxXSkmJihsPVtlLHJdKSkscyYmKHU9dFsw
XSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89W3UsYV0scy5pbnZlcnQmJih1PXModSksYT1z
KGEpKSx1PmEmJihoPXUsdT1hLGE9aCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4p
OihjJiYoaT8oZT1pWzBdLHI9aVsxXSk6KGU9bFswXSxyPWxbMV0sYy5pbnZlcnQmJihlPWMuaW52
ZXJ0KGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLHMmJihvPyh1PW9bMF0s
YT1vWzFdKToodT1mWzBdLGE9ZlsxXSxzLmludmVydCYmKHU9cy5pbnZlcnQodSksYT1zLmludmVy
dChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmcz9bW2UsdV0sW3IsYV1dOmM/W2Uscl06cyYm
W3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZW1wdHkoKXx8KGw9WzAsMF0sZj1b
MCwwXSxpPW89bnVsbCksbn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmbFswXT09bFsx
XXx8ISFzJiZmWzBdPT1mWzFdfSxaby5yZWJpbmQobixhLCJvbiIpfTt2YXIgVHM9e246Im5zLXJl
c2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2Ut
cmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXpl
In0scXM9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsi
biIsInMiXSxbXV0sUnM9UWEuZm9ybWF0PWljLnRpbWVGb3JtYXQsRHM9UnMudXRjLFBzPURzKCIl
WS0lbS0lZFQlSDolTTolUy4lTFoiKTtScy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcm
JituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/SG86UHMsSG8ucGFyc2U9ZnVu
Y3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sSG8udG9T
dHJpbmc9UHMudG9TdHJpbmcsUWEuc2Vjb25kPUR0KGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgbmMo
MWUzKk1hdGguZmxvb3Iobi8xZTMpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1l
KCkrMWUzKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9
KSxRYS5zZWNvbmRzPVFhLnNlY29uZC5yYW5nZSxRYS5zZWNvbmRzLnV0Yz1RYS5zZWNvbmQudXRj
LnJhbmdlLFFhLm1pbnV0ZT1EdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IG5jKDZlNCpNYXRoLmZs
b29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRo
LmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksUWEubWludXRl
cz1RYS5taW51dGUucmFuZ2UsUWEubWludXRlcy51dGM9UWEubWludXRlLnV0Yy5yYW5nZSxRYS5o
b3VyPUR0KGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4g
bmV3IG5jKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rpb24obix0KXtuLnNl
dFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJu
IG4uZ2V0SG91cnMoKX0pLFFhLmhvdXJzPVFhLmhvdXIucmFuZ2UsUWEuaG91cnMudXRjPVFhLmhv
dXIudXRjLnJhbmdlLFFhLm1vbnRoPUR0KGZ1bmN0aW9uKG4pe3JldHVybiBuPVFhLmRheShuKSxu
LnNldERhdGUoMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0s
ZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLFFhLm1vbnRocz1RYS5tb250aC5yYW5n
ZSxRYS5tb250aHMudXRjPVFhLm1vbnRoLnV0Yy5yYW5nZTt2YXIgVXM9WzFlMyw1ZTMsMTVlMywz
ZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2
MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxqcz1bW1FhLnNlY29uZCwxXSxbUWEuc2Vjb25k
LDVdLFtRYS5zZWNvbmQsMTVdLFtRYS5zZWNvbmQsMzBdLFtRYS5taW51dGUsMV0sW1FhLm1pbnV0
ZSw1XSxbUWEubWludXRlLDE1XSxbUWEubWludXRlLDMwXSxbUWEuaG91ciwxXSxbUWEuaG91ciwz
XSxbUWEuaG91ciw2XSxbUWEuaG91ciwxMl0sW1FhLmRheSwxXSxbUWEuZGF5LDJdLFtRYS53ZWVr
LDFdLFtRYS5tb250aCwxXSxbUWEubW9udGgsM10sW1FhLnllYXIsMV1dLEhzPVJzLm11bHRpKFtb
Ii4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVu
Y3Rpb24obil7cmV0dXJuIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0
dXJuIG4uZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91
cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpJiYxIT1uLmdldERh
dGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldERhdGUoKX1dLFsiJUIi
LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9XSxbIiVZIix3ZV1dKSxGcz17cmFuZ2U6
ZnVuY3Rpb24obix0LGUpe3JldHVybiBaby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1h
cChPbyl9LGZsb29yOnd0LGNlaWw6d3R9O2pzLnllYXI9UWEueWVhcixRYS5zY2FsZT1mdW5jdGlv
bigpe3JldHVybiBGbyhaby5zY2FsZS5saW5lYXIoKSxqcyxIcyl9O3ZhciBPcz1qcy5tYXAoZnVu
Y3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksWXM9RHMubXVsdGkoW1siLiVMIixmdW5j
dGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihu
KXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4g
bi5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENI
b3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkmJjEhPW4u
Z2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0VVRDRGF0
ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKX1dLFsiJVkiLHdl
XV0pO09zLnllYXI9UWEueWVhci51dGMsUWEuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIEZv
KFpvLnNjYWxlLmxpbmVhcigpLE9zLFlzKX0sWm8udGV4dD1TdChmdW5jdGlvbihuKXtyZXR1cm4g
bi5yZXNwb25zZVRleHR9KSxaby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sImFwcGxp
Y2F0aW9uL2pzb24iLFlvLHQpfSxaby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGt0KG4sInRl
eHQvaHRtbCIsSW8sdCl9LFpvLnhtbD1TdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVhN
TH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFpvKToib2Jq
ZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1abyks
dGhpcy5kMz1ab30oKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2VtYmVyLWRhdGEuanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2VtYmVyLWRhdGEuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjhmNDVmZmYzNzNmY2FkMTkyNjMxNTc5M2Y1MWVkZGQ3
NzRhMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9lbWJlci1kYXRhLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTIwNTMgKzAsMCBAQAotLyohCi0gKiBAb3ZlcnZpZXcgIEVtYmVyIERhdGEK
LSAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTEtMjAxNCBUaWxkZSBJbmMuIGFuZCBjb250cmli
dXRvcnMuCi0gKiAgICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCAyMDExIExpdmluZ1NvY2lh
bCBJbmMuCi0gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlIChzZWUgbGlj
ZW5zZS5qcykKLSAqIEB2ZXJzaW9uICAgMS4wLjAtYmV0YS44LjJhNjhjNjNhCi0gKi8KLShmdW5j
dGlvbihnbG9iYWwpIHsKLXZhciBkZWZpbmUsIHJlcXVpcmVNb2R1bGUsIHJlcXVpcmUsIHJlcXVp
cmVqczsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgcmVnaXN0cnkgPSB7fSwgc2VlbiA9IHt9Owot
Ci0gIGRlZmluZSA9IGZ1bmN0aW9uKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7Ci0gICAgcmVnaXN0
cnlbbmFtZV0gPSB7IGRlcHM6IGRlcHMsIGNhbGxiYWNrOiBjYWxsYmFjayB9OwotICB9OwotCi0g
IHJlcXVpcmVqcyA9IHJlcXVpcmUgPSByZXF1aXJlTW9kdWxlID0gZnVuY3Rpb24obmFtZSkgewot
ICByZXF1aXJlanMuX2Vha19zZWVuID0gcmVnaXN0cnk7Ci0KLSAgICBpZiAoc2VlbltuYW1lXSkg
eyByZXR1cm4gc2VlbltuYW1lXTsgfQotICAgIHNlZW5bbmFtZV0gPSB7fTsKLQotICAgIGlmICgh
cmVnaXN0cnlbbmFtZV0pIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQg
bW9kdWxlICIgKyBuYW1lKTsKLSAgICB9Ci0KLSAgICB2YXIgbW9kID0gcmVnaXN0cnlbbmFtZV0s
Ci0gICAgICAgIGRlcHMgPSBtb2QuZGVwcywKLSAgICAgICAgY2FsbGJhY2sgPSBtb2QuY2FsbGJh
Y2ssCi0gICAgICAgIHJlaWZpZWQgPSBbXSwKLSAgICAgICAgZXhwb3J0czsKLQotICAgIGZvciAo
dmFyIGk9MCwgbD1kZXBzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgIGlmIChkZXBzW2ldID09
PSAnZXhwb3J0cycpIHsKLSAgICAgICAgcmVpZmllZC5wdXNoKGV4cG9ydHMgPSB7fSk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZWlmaWVkLnB1c2gocmVxdWlyZU1vZHVsZShyZXNvbHZlKGRl
cHNbaV0pKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIHZhbHVlID0gY2FsbGJhY2suYXBw
bHkodGhpcywgcmVpZmllZCk7Ci0gICAgcmV0dXJuIHNlZW5bbmFtZV0gPSBleHBvcnRzIHx8IHZh
bHVlOwotCi0gICAgZnVuY3Rpb24gcmVzb2x2ZShjaGlsZCkgewotICAgICAgaWYgKGNoaWxkLmNo
YXJBdCgwKSAhPT0gJy4nKSB7IHJldHVybiBjaGlsZDsgfQotICAgICAgdmFyIHBhcnRzID0gY2hp
bGQuc3BsaXQoIi8iKTsKLSAgICAgIHZhciBwYXJlbnRCYXNlID0gbmFtZS5zcGxpdCgiLyIpLnNs
aWNlKDAsIC0xKTsKLQotICAgICAgZm9yICh2YXIgaT0wLCBsPXBhcnRzLmxlbmd0aDsgaTxsOyBp
KyspIHsKLSAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKLQotICAgICAgICBpZiAocGFydCA9
PT0gJy4uJykgeyBwYXJlbnRCYXNlLnBvcCgpOyB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcnQgPT09
ICcuJykgeyBjb250aW51ZTsgfQotICAgICAgICBlbHNlIHsgcGFyZW50QmFzZS5wdXNoKHBhcnQp
OyB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBwYXJlbnRCYXNlLmpvaW4oIi8iKTsKLSAgICB9
Ci0gIH07Ci19KSgpOwotCi1kZWZpbmUoImFjdGl2ZW1vZGVsLWFkYXB0ZXIvbGliL21haW4iLCAK
LSAgWyIuL3N5c3RlbSIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgQWN0aXZlTW9kZWxBZGFw
dGVyID0gX19kZXBlbmRlbmN5MV9fLkFjdGl2ZU1vZGVsQWRhcHRlcjsKLSAgICB2YXIgQWN0aXZl
TW9kZWxTZXJpYWxpemVyID0gX19kZXBlbmRlbmN5MV9fLkFjdGl2ZU1vZGVsU2VyaWFsaXplcjsK
LSAgICB2YXIgRW1iZWRkZWRSZWNvcmRzTWl4aW4gPSBfX2RlcGVuZGVuY3kxX18uRW1iZWRkZWRS
ZWNvcmRzTWl4aW47Ci0KLSAgICBfX2V4cG9ydHNfXy5BY3RpdmVNb2RlbEFkYXB0ZXIgPSBBY3Rp
dmVNb2RlbEFkYXB0ZXI7Ci0gICAgX19leHBvcnRzX18uQWN0aXZlTW9kZWxTZXJpYWxpemVyID0g
QWN0aXZlTW9kZWxTZXJpYWxpemVyOwotICAgIF9fZXhwb3J0c19fLkVtYmVkZGVkUmVjb3Jkc01p
eGluID0gRW1iZWRkZWRSZWNvcmRzTWl4aW47Ci0gIH0pOwotZGVmaW5lKCJhY3RpdmVtb2RlbC1h
ZGFwdGVyL2xpYi9zZXR1cC1jb250YWluZXIiLCAKLSAgWyIuLi8uLi9lbWJlci1kYXRhL2xpYi9z
eXN0ZW0vY29udGFpbmVyX3Byb3h5IiwiLi9zeXN0ZW0vYWN0aXZlX21vZGVsX3NlcmlhbGl6ZXIi
LCIuL3N5c3RlbS9hY3RpdmVfbW9kZWxfYWRhcHRlciIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBv
cnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIENvbnRhaW5lclByb3h5ID0gX19k
ZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIEFjdGl2ZU1vZGVsU2VyaWFsaXplciA9
IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgIHZhciBBY3RpdmVNb2RlbEFkYXB0ZXIg
PSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0
Il0gPSBmdW5jdGlvbiBzZXR1cEFjdGl2ZU1vZGVsQWRhcHRlcihjb250YWluZXIsIGFwcGxpY2F0
aW9uKXsKLSAgICAgIHZhciBwcm94eSA9IG5ldyBDb250YWluZXJQcm94eShjb250YWluZXIpOwot
ICAgICAgcHJveHkucmVnaXN0ZXJEZXByZWNhdGlvbnMoWwotICAgICAgICB7ZGVwcmVjYXRlZDog
J3NlcmlhbGl6ZXI6X2FtcycsICB2YWxpZDogJ3NlcmlhbGl6ZXI6LWFjdGl2ZS1tb2RlbCd9LAot
ICAgICAgICB7ZGVwcmVjYXRlZDogJ2FkYXB0ZXI6X2FtcycsICAgICB2YWxpZDogJ2FkYXB0ZXI6
LWFjdGl2ZS1tb2RlbCd9Ci0gICAgICBdKTsKLQotICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdz
ZXJpYWxpemVyOi1hY3RpdmUtbW9kZWwnLCBBY3RpdmVNb2RlbFNlcmlhbGl6ZXIpOwotICAgICAg
Y29udGFpbmVyLnJlZ2lzdGVyKCdhZGFwdGVyOi1hY3RpdmUtbW9kZWwnLCBBY3RpdmVNb2RlbEFk
YXB0ZXIpOwotICAgIH07Ci0gIH0pOwotZGVmaW5lKCJhY3RpdmVtb2RlbC1hZGFwdGVyL2xpYi9z
eXN0ZW0iLCAKLSAgWyIuL3N5c3RlbS9lbWJlZGRlZF9yZWNvcmRzX21peGluIiwiLi9zeXN0ZW0v
YWN0aXZlX21vZGVsX2FkYXB0ZXIiLCIuL3N5c3RlbS9hY3RpdmVfbW9kZWxfc2VyaWFsaXplciIs
ImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
dmFyIEVtYmVkZGVkUmVjb3Jkc01peGluID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0g
ICAgdmFyIEFjdGl2ZU1vZGVsQWRhcHRlciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwot
ICAgIHZhciBBY3RpdmVNb2RlbFNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQi
XTsKLQotICAgIF9fZXhwb3J0c19fLkVtYmVkZGVkUmVjb3Jkc01peGluID0gRW1iZWRkZWRSZWNv
cmRzTWl4aW47Ci0gICAgX19leHBvcnRzX18uQWN0aXZlTW9kZWxBZGFwdGVyID0gQWN0aXZlTW9k
ZWxBZGFwdGVyOwotICAgIF9fZXhwb3J0c19fLkFjdGl2ZU1vZGVsU2VyaWFsaXplciA9IEFjdGl2
ZU1vZGVsU2VyaWFsaXplcjsKLSAgfSk7Ci1kZWZpbmUoImFjdGl2ZW1vZGVsLWFkYXB0ZXIvbGli
L3N5c3RlbS9hY3RpdmVfbW9kZWxfYWRhcHRlciIsIAotICBbIi4uLy4uLy4uL2VtYmVyLWRhdGEv
bGliL2FkYXB0ZXJzIiwiLi4vLi4vLi4vZW1iZXItZGF0YS9saWIvc3lzdGVtL2FkYXB0ZXIiLCIu
Li8uLi8uLi9lbWJlci1pbmZsZWN0b3IvbGliL21haW4iLCIuL2FjdGl2ZV9tb2RlbF9zZXJpYWxp
emVyIiwiLi9lbWJlZGRlZF9yZWNvcmRzX21peGluIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVu
ZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmlj
dCI7Ci0gICAgdmFyIFJFU1RBZGFwdGVyID0gX19kZXBlbmRlbmN5MV9fLlJFU1RBZGFwdGVyOwot
ICAgIHZhciBJbnZhbGlkRXJyb3IgPSBfX2RlcGVuZGVuY3kyX18uSW52YWxpZEVycm9yOwotICAg
IHZhciBwbHVyYWxpemUgPSBfX2RlcGVuZGVuY3kzX18ucGx1cmFsaXplOwotICAgIHZhciBBY3Rp
dmVNb2RlbFNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICB2YXIg
RW1iZWRkZWRSZWNvcmRzTWl4aW4gPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAg
IC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBmb3JFYWNo
ID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLmZvckVhY2g7Ci0gICAgdmFyIGRlY2FtZWxpemUgPSBF
bWJlci5TdHJpbmcuZGVjYW1lbGl6ZSwKLSAgICAgICAgdW5kZXJzY29yZSA9IEVtYmVyLlN0cmlu
Zy51bmRlcnNjb3JlOwotCi0gICAgLyoqCi0gICAgICBUaGUgQWN0aXZlTW9kZWxBZGFwdGVyIGlz
IGEgc3ViY2xhc3Mgb2YgdGhlIFJFU1RBZGFwdGVyIGRlc2lnbmVkIHRvIGludGVncmF0ZQotICAg
ICAgd2l0aCBhIEpTT04gQVBJIHRoYXQgdXNlcyBhbiB1bmRlcnNjb3JlZCBuYW1pbmcgY29udmVu
dGlvbiBpbnN0ZWFkIG9mIGNhbWVsQ2FzaW5nLgotICAgICAgSXQgaGFzIGJlZW4gZGVzaWduZWQg
dG8gd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIHRoZQotICAgICAgW2FjdGl2ZV9tb2RlbF9zZXJp
YWxpemVyc10oaHR0cDovL2dpdGh1Yi5jb20vcmFpbHMtYXBpL2FjdGl2ZV9tb2RlbF9zZXJpYWxp
emVycykKLSAgICAgIFJ1YnkgZ2VtLiBUaGlzIEFkYXB0ZXIgZXhwZWN0cyBzcGVjaWZpYyBzZXR0
aW5ncyB1c2luZyBBY3RpdmVNb2RlbDo6U2VyaWFsaXplcnMsCi0gICAgICBgZW1iZWQgOmlkcywg
aW5jbHVkZTogdHJ1ZWAgd2hpY2ggc2lkZWxvYWRzIHRoZSByZWNvcmRzLgotCi0gICAgICBUaGlz
IGFkYXB0ZXIgZXh0ZW5kcyB0aGUgRFMuUkVTVEFkYXB0ZXIgYnkgbWFraW5nIGNvbnNpc3RlbnQg
dXNlIG9mIHRoZSBjYW1lbGl6YXRpb24sCi0gICAgICBkZWNhbWVsaXphdGlvbiBhbmQgcGx1cmFs
aXphdGlvbiBtZXRob2RzIHRvIG5vcm1hbGl6ZSB0aGUgc2VyaWFsaXplZCBKU09OIGludG8gYQot
ICAgICAgZm9ybWF0IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGEgY29udmVudGlvbmFsIFJhaWxz
IGJhY2tlbmQgYW5kIEVtYmVyIERhdGEuCi0KLSAgICAgICMjIEpTT04gU3RydWN0dXJlCi0KLSAg
ICAgIFRoZSBBY3RpdmVNb2RlbEFkYXB0ZXIgZXhwZWN0cyB0aGUgSlNPTiByZXR1cm5lZCBmcm9t
IHlvdXIgc2VydmVyIHRvIGZvbGxvdwotICAgICAgdGhlIFJFU1QgYWRhcHRlciBjb252ZW50aW9u
cyBzdWJzdGl0dXRpbmcgdW5kZXJzY29yZWQga2V5cyBmb3IgY2FtZWxjYXNlZCBvbmVzLgotCi0g
ICAgICAjIyMgQ29udmVudGlvbmFsIE5hbWVzCi0KLSAgICAgIEF0dHJpYnV0ZSBuYW1lcyBpbiB5
b3VyIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgdGhlIHVuZGVyc2NvcmVkIHZlcnNpb25zIG9mCi0g
ICAgICB0aGUgYXR0cmlidXRlcyBpbiB5b3VyIEVtYmVyLmpzIG1vZGVscy4KLQotICAgICAgRm9y
IGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgYFBlcnNvbmAgbW9kZWw6Ci0KLSAgICAgIGBgYGpzCi0g
ICAgICBBcHAuRmFtb3VzUGVyc29uID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgZmlyc3RO
YW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgbGFzdE5hbWU6IERTLmF0dHIoJ3N0cmlu
ZycpLAotICAgICAgICBvY2N1cGF0aW9uOiBEUy5hdHRyKCdzdHJpbmcnKQotICAgICAgfSk7Ci0g
ICAgICBgYGAKLQotICAgICAgVGhlIEpTT04gcmV0dXJuZWQgc2hvdWxkIGxvb2sgbGlrZSB0aGlz
OgotCi0gICAgICBgYGBqcwotICAgICAgewotICAgICAgICAiZmFtb3VzX3BlcnNvbiI6IHsKLSAg
ICAgICAgICAiZmlyc3RfbmFtZSI6ICJCYXJhY2siLAotICAgICAgICAgICJsYXN0X25hbWUiOiAi
T2JhbWEiLAotICAgICAgICAgICJvY2N1cGF0aW9uIjogIlByZXNpZGVudCIKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBBY3RpdmVNb2RlbEFkYXB0ZXIKLSAg
ICAgIEBjb25zdHJ1Y3RvcgotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRFMu
UkVTVEFkYXB0ZXIKLSAgICAqKi8KLQotICAgIHZhciBBY3RpdmVNb2RlbEFkYXB0ZXIgPSBSRVNU
QWRhcHRlci5leHRlbmQoewotICAgICAgZGVmYXVsdFNlcmlhbGl6ZXI6ICctYWN0aXZlLW1vZGVs
JywKLSAgICAgIC8qKgotICAgICAgICBUaGUgQWN0aXZlTW9kZWxBZGFwdGVyIG92ZXJyaWRlcyB0
aGUgYHBhdGhGb3JUeXBlYCBtZXRob2QgdG8gYnVpbGQKLSAgICAgICAgdW5kZXJzY29yZWQgVVJM
cyBieSBkZWNhbWVsaXppbmcgYW5kIHBsdXJhbGl6aW5nIHRoZSBvYmplY3QgdHlwZSBuYW1lLgot
Ci0gICAgICAgIGBgYGpzCi0gICAgICAgICAgdGhpcy5wYXRoRm9yVHlwZSgiZmFtb3VzUGVyc29u
Iik7Ci0gICAgICAgICAgLy89PiAiZmFtb3VzX3Blb3BsZSIKLSAgICAgICAgYGBgCi0KLSAgICAg
ICAgQG1ldGhvZCBwYXRoRm9yVHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAg
ICAgICBAcmV0dXJuIFN0cmluZwotICAgICAgKi8KLSAgICAgIHBhdGhGb3JUeXBlOiBmdW5jdGlv
bih0eXBlKSB7Ci0gICAgICAgIHZhciBkZWNhbWVsaXplZCA9IGRlY2FtZWxpemUodHlwZSk7Ci0g
ICAgICAgIHZhciB1bmRlcnNjb3JlZCA9IHVuZGVyc2NvcmUoZGVjYW1lbGl6ZWQpOwotICAgICAg
ICByZXR1cm4gcGx1cmFsaXplKHVuZGVyc2NvcmVkKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBUaGUgQWN0aXZlTW9kZWxBZGFwdGVyIG92ZXJyaWRlcyB0aGUgYGFqYXhFcnJvcmAg
bWV0aG9kCi0gICAgICAgIHRvIHJldHVybiBhIERTLkludmFsaWRFcnJvciBmb3IgYWxsIDQyMiBV
bnByb2Nlc3NhYmxlIEVudGl0eQotICAgICAgICByZXNwb25zZXMuCi0KLSAgICAgICAgQSA0MjIg
SFRUUCByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgZ2VuZXJhbGx5IGltcGxpZXMgdGhhdCB0aGUg
cmVxdWVzdAotICAgICAgICB3YXMgd2VsbCBmb3JtZWQgYnV0IHRoZSBBUEkgd2FzIHVuYWJsZSB0
byBwcm9jZXNzIGl0IGJlY2F1c2UgdGhlCi0gICAgICAgIGNvbnRlbnQgd2FzIG5vdCBzZW1hbnRp
Y2FsbHkgY29ycmVjdCBvciBtZWFuaW5nZnVsIHBlciB0aGUgQVBJLgotCi0gICAgICAgIEZvciBt
b3JlIGluZm9ybWF0aW9uIG9uIDQyMiBIVFRQIEVycm9yIGNvZGUgc2VlIDExLjIgV2ViREFWIFJG
QyA0OTE4Ci0gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTE4I3NlY3Rp
b24tMTEuMgotCi0gICAgICAgIEBtZXRob2QgYWpheEVycm9yCi0gICAgICAgIEBwYXJhbSBqcVhI
UgotICAgICAgICBAcmV0dXJuIGVycm9yCi0gICAgICAqLwotICAgICAgYWpheEVycm9yOiBmdW5j
dGlvbihqcVhIUikgewotICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9zdXBlcihqcVhIUik7Ci0K
LSAgICAgICAgaWYgKGpxWEhSICYmIGpxWEhSLnN0YXR1cyA9PT0gNDIyKSB7Ci0gICAgICAgICAg
dmFyIHJlc3BvbnNlID0gRW1iZXIuJC5wYXJzZUpTT04oanFYSFIucmVzcG9uc2VUZXh0KSwKLSAg
ICAgICAgICAgICAgZXJyb3JzID0ge307Ci0KLSAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3Jz
ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHZhciBqc29uRXJyb3JzID0gcmVzcG9uc2Uu
ZXJyb3JzOwotCi0gICAgICAgICAgICBmb3JFYWNoKEVtYmVyLmtleXMoanNvbkVycm9ycyksIGZ1
bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICBlcnJvcnNbRW1iZXIuU3RyaW5nLmNhbWVsaXpl
KGtleSldID0ganNvbkVycm9yc1trZXldOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkRXJyb3IoZXJyb3JzKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBBY3RpdmVNb2RlbEFkYXB0ZXI7Ci0g
IH0pOwotZGVmaW5lKCJhY3RpdmVtb2RlbC1hZGFwdGVyL2xpYi9zeXN0ZW0vYWN0aXZlX21vZGVs
X3NlcmlhbGl6ZXIiLCAKLSAgWyIuLi8uLi8uLi9lbWJlci1pbmZsZWN0b3IvbGliL21haW4iLCIu
Li8uLi8uLi9lbWJlci1kYXRhL2xpYi9zZXJpYWxpemVycy9yZXN0X3NlcmlhbGl6ZXIiLCJleHBv
cnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4
cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgc2luZ3VsYXJpemUgPSBfX2Rl
cGVuZGVuY3kxX18uc2luZ3VsYXJpemU7Ci0gICAgdmFyIFJFU1RTZXJpYWxpemVyID0gX19kZXBl
bmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEK
LSAgICAqLwotCi0gICAgdmFyIGdldCA9IEVtYmVyLmdldCwKLSAgICAgICAgZm9yRWFjaCA9IEVt
YmVyLkVudW1lcmFibGVVdGlscy5mb3JFYWNoLAotICAgICAgICBjYW1lbGl6ZSA9ICAgRW1iZXIu
U3RyaW5nLmNhbWVsaXplLAotICAgICAgICBjYXBpdGFsaXplID0gRW1iZXIuU3RyaW5nLmNhcGl0
YWxpemUsCi0gICAgICAgIGRlY2FtZWxpemUgPSBFbWJlci5TdHJpbmcuZGVjYW1lbGl6ZSwKLSAg
ICAgICAgdW5kZXJzY29yZSA9IEVtYmVyLlN0cmluZy51bmRlcnNjb3JlOwotICAgIC8qKgotICAg
ICAgVGhlIEFjdGl2ZU1vZGVsU2VyaWFsaXplciBpcyBhIHN1YmNsYXNzIG9mIHRoZSBSRVNUU2Vy
aWFsaXplciBkZXNpZ25lZCB0byBpbnRlZ3JhdGUKLSAgICAgIHdpdGggYSBKU09OIEFQSSB0aGF0
IHVzZXMgYW4gdW5kZXJzY29yZWQgbmFtaW5nIGNvbnZlbnRpb24gaW5zdGVhZCBvZiBjYW1lbENh
c2luZy4KLSAgICAgIEl0IGhhcyBiZWVuIGRlc2lnbmVkIHRvIHdvcmsgb3V0IG9mIHRoZSBib3gg
d2l0aCB0aGUKLSAgICAgIFthY3RpdmVfbW9kZWxfc2VyaWFsaXplcnNdKGh0dHA6Ly9naXRodWIu
Y29tL3JhaWxzLWFwaS9hY3RpdmVfbW9kZWxfc2VyaWFsaXplcnMpCi0gICAgICBSdWJ5IGdlbS4g
VGhpcyBTZXJpYWxpemVyIGV4cGVjdHMgc3BlY2lmaWMgc2V0dGluZ3MgdXNpbmcgQWN0aXZlTW9k
ZWw6OlNlcmlhbGl6ZXJzLAotICAgICAgYGVtYmVkIDppZHMsIGluY2x1ZGU6IHRydWVgIHdoaWNo
IHNpZGVsb2FkcyB0aGUgcmVjb3Jkcy4KLQotICAgICAgVGhpcyBzZXJpYWxpemVyIGV4dGVuZHMg
dGhlIERTLlJFU1RTZXJpYWxpemVyIGJ5IG1ha2luZyBjb25zaXN0ZW50Ci0gICAgICB1c2Ugb2Yg
dGhlIGNhbWVsaXphdGlvbiwgZGVjYW1lbGl6YXRpb24gYW5kIHBsdXJhbGl6YXRpb24gbWV0aG9k
cyB0bwotICAgICAgbm9ybWFsaXplIHRoZSBzZXJpYWxpemVkIEpTT04gaW50byBhIGZvcm1hdCB0
aGF0IGlzIGNvbXBhdGlibGUgd2l0aAotICAgICAgYSBjb252ZW50aW9uYWwgUmFpbHMgYmFja2Vu
ZCBhbmQgRW1iZXIgRGF0YS4KLQotICAgICAgIyMgSlNPTiBTdHJ1Y3R1cmUKLQotICAgICAgVGhl
IEFjdGl2ZU1vZGVsU2VyaWFsaXplciBleHBlY3RzIHRoZSBKU09OIHJldHVybmVkIGZyb20geW91
ciBzZXJ2ZXIKLSAgICAgIHRvIGZvbGxvdyB0aGUgUkVTVCBhZGFwdGVyIGNvbnZlbnRpb25zIHN1
YnN0aXR1dGluZyB1bmRlcnNjb3JlZCBrZXlzCi0gICAgICBmb3IgY2FtZWxjYXNlZCBvbmVzLgot
Ci0gICAgICAjIyMgQ29udmVudGlvbmFsIE5hbWVzCi0KLSAgICAgIEF0dHJpYnV0ZSBuYW1lcyBp
biB5b3VyIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgdGhlIHVuZGVyc2NvcmVkIHZlcnNpb25zIG9m
Ci0gICAgICB0aGUgYXR0cmlidXRlcyBpbiB5b3VyIEVtYmVyLmpzIG1vZGVscy4KLQotICAgICAg
Rm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgYFBlcnNvbmAgbW9kZWw6Ci0KLSAgICAgIGBgYGpz
Ci0gICAgICBBcHAuRmFtb3VzUGVyc29uID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgZmly
c3ROYW1lOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgbGFzdE5hbWU6IERTLmF0dHIoJ3N0
cmluZycpLAotICAgICAgICBvY2N1cGF0aW9uOiBEUy5hdHRyKCdzdHJpbmcnKQotICAgICAgfSk7
Ci0gICAgICBgYGAKLQotICAgICAgVGhlIEpTT04gcmV0dXJuZWQgc2hvdWxkIGxvb2sgbGlrZSB0
aGlzOgotCi0gICAgICBgYGBqcwotICAgICAgewotICAgICAgICAiZmFtb3VzX3BlcnNvbiI6IHsK
LSAgICAgICAgICAiZmlyc3RfbmFtZSI6ICJCYXJhY2siLAotICAgICAgICAgICJsYXN0X25hbWUi
OiAiT2JhbWEiLAotICAgICAgICAgICJvY2N1cGF0aW9uIjogIlByZXNpZGVudCIKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBBY3RpdmVNb2RlbFNlcmlhbGl6
ZXIKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIERTLlJFU1RTZXJpYWxpemVy
Ci0gICAgKi8KLSAgICB2YXIgQWN0aXZlTW9kZWxTZXJpYWxpemVyID0gUkVTVFNlcmlhbGl6ZXIu
ZXh0ZW5kKHsKLSAgICAgIC8vIFNFUklBTElaRQotCi0gICAgICAvKioKLSAgICAgICAgQ29udmVy
dHMgY2FtZWxDYXNlZCBhdHRyaWJ1dGVzIHRvIHVuZGVyc2NvcmVkIHdoZW4gc2VyaWFsaXppbmcu
Ci0KLSAgICAgICAgQG1ldGhvZCBrZXlGb3JBdHRyaWJ1dGUKLSAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGF0dHJpYnV0ZQotICAgICAgICBAcmV0dXJuIFN0cmluZwotICAgICAgKi8KLSAgICAgIGtl
eUZvckF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cikgewotICAgICAgICByZXR1cm4gZGVjYW1lbGl6
ZShhdHRyKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBVbmRlcnNjb3JlcyByZWxh
dGlvbnNoaXAgbmFtZXMgYW5kIGFwcGVuZHMgIl9pZCIgb3IgIl9pZHMiIHdoZW4gc2VyaWFsaXpp
bmcKLSAgICAgICAgcmVsYXRpb25zaGlwIGtleXMuCi0KLSAgICAgICAgQG1ldGhvZCBrZXlGb3JS
ZWxhdGlvbnNoaXAKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleQotICAgICAgICBAcGFyYW0g
e1N0cmluZ30ga2luZAotICAgICAgICBAcmV0dXJuIFN0cmluZwotICAgICAgKi8KLSAgICAgIGtl
eUZvclJlbGF0aW9uc2hpcDogZnVuY3Rpb24oa2V5LCBraW5kKSB7Ci0gICAgICAgIGtleSA9IGRl
Y2FtZWxpemUoa2V5KTsKLSAgICAgICAgaWYgKGtpbmQgPT09ICJiZWxvbmdzVG8iKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGtleSArICJfaWQiOwotICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICJo
YXNNYW55IikgewotICAgICAgICAgIHJldHVybiBzaW5ndWxhcml6ZShrZXkpICsgIl9pZHMiOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBrZXk7Ci0gICAgICAgIH0KLSAgICAg
IH0sCi0KLSAgICAgIC8qCi0gICAgICAgIERvZXMgbm90IHNlcmlhbGl6ZSBoYXNNYW55IHJlbGF0
aW9uc2hpcHMgYnkgZGVmYXVsdC4KLSAgICAgICovCi0gICAgICBzZXJpYWxpemVIYXNNYW55OiBF
bWJlci5LLAotCi0gICAgICAvKioKLSAgICAgICAgVW5kZXJzY29yZXMgdGhlIEpTT04gcm9vdCBr
ZXlzIHdoZW4gc2VyaWFsaXppbmcuCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemVJbnRvSGFz
aAotICAgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaAotICAgICAgICBAcGFyYW0ge3N1YmNsYXNz
IG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAg
ICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZUlu
dG9IYXNoOiBmdW5jdGlvbihkYXRhLCB0eXBlLCByZWNvcmQsIG9wdGlvbnMpIHsKLSAgICAgICAg
dmFyIHJvb3QgPSB1bmRlcnNjb3JlKGRlY2FtZWxpemUodHlwZS50eXBlS2V5KSk7Ci0gICAgICAg
IGRhdGFbcm9vdF0gPSB0aGlzLnNlcmlhbGl6ZShyZWNvcmQsIG9wdGlvbnMpOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIFNlcmlhbGl6ZXMgYSBwb2x5bW9ycGhpYyB0eXBlIGFzIGEg
ZnVsbHkgY2FwaXRhbGl6ZWQgbW9kZWwgbmFtZS4KLQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6
ZVBvbHltb3JwaGljVHlwZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IGpzb24KLSAgICAgICAgQHBhcmFtIHJlbGF0aW9uc2hpcAotICAg
ICAgKi8KLSAgICAgIHNlcmlhbGl6ZVBvbHltb3JwaGljVHlwZTogZnVuY3Rpb24ocmVjb3JkLCBq
c29uLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgdmFyIGtleSA9IHJlbGF0aW9uc2hpcC5rZXks
Ci0gICAgICAgICAgICBiZWxvbmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwotCi0gICAgICAgIGlm
IChiZWxvbmdzVG8pIHsKLSAgICAgICAgICBrZXkgPSB0aGlzLmtleUZvckF0dHJpYnV0ZShrZXkp
OwotICAgICAgICAgIGpzb25ba2V5ICsgIl90eXBlIl0gPSBjYXBpdGFsaXplKGJlbG9uZ3NUby5j
b25zdHJ1Y3Rvci50eXBlS2V5KTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLy8gRVhU
UkFDVAotCi0gICAgICAvKioKLSAgICAgICAgQWRkIGV4dHJhIHN0ZXAgdG8gYERTLlJFU1RTZXJp
YWxpemVyLm5vcm1hbGl6ZWAgc28gbGlua3MgYXJlIG5vcm1hbGl6ZWQuCi0KLSAgICAgICAgSWYg
eW91ciBwYXlsb2FkIGxvb2tzIGxpa2U6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAg
ICAgICAgICJwb3N0IjogewotICAgICAgICAgICAgImlkIjogMSwKLSAgICAgICAgICAgICJ0aXRs
ZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAgICJsaW5rcyI6IHsgImZsYWdnZWRf
Y29tbWVudHMiOiAiYXBpL2NvbW1lbnRzL2ZsYWdnZWQiIH0KLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgVGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiB3b3VsZCBs
b29rIGxpa2UgdGhpcwotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAgICAgICAgICAicG9z
dCI6IHsKLSAgICAgICAgICAgICJpZCI6IDEsCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMg
aXMgb21ha2FzZSIsCi0gICAgICAgICAgICAibGlua3MiOiB7ICJmbGFnZ2VkQ29tbWVudHMiOiAi
YXBpL2NvbW1lbnRzL2ZsYWdnZWQiIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
YGBgCi0KLSAgICAgICAgQG1ldGhvZCBub3JtYWxpemUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gaGFzaAotICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gcHJvcAotICAgICAgICBAcmV0dXJuIE9iamVjdAotICAgICAgKi8K
LQotICAgICAgbm9ybWFsaXplOiBmdW5jdGlvbih0eXBlLCBoYXNoLCBwcm9wKSB7Ci0gICAgICAg
IHRoaXMubm9ybWFsaXplTGlua3MoaGFzaCk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVy
KHR5cGUsIGhhc2gsIHByb3ApOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIENvbnZl
cnQgYHNuYWtlX2Nhc2VkYCBsaW5rcyAgdG8gYGNhbWVsQ2FzZWAKLQotICAgICAgICBAbWV0aG9k
IG5vcm1hbGl6ZUxpbmtzCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICAqLwot
Ci0gICAgICBub3JtYWxpemVMaW5rczogZnVuY3Rpb24oZGF0YSl7Ci0gICAgICAgIGlmIChkYXRh
LmxpbmtzKSB7Ci0gICAgICAgICAgdmFyIGxpbmtzID0gZGF0YS5saW5rczsKLQotICAgICAgICAg
IGZvciAodmFyIGxpbmsgaW4gbGlua3MpIHsKLSAgICAgICAgICAgIHZhciBjYW1lbGl6ZWRMaW5r
ID0gY2FtZWxpemUobGluayk7Ci0KLSAgICAgICAgICAgIGlmIChjYW1lbGl6ZWRMaW5rICE9PSBs
aW5rKSB7Ci0gICAgICAgICAgICAgIGxpbmtzW2NhbWVsaXplZExpbmtdID0gbGlua3NbbGlua107
Ci0gICAgICAgICAgICAgIGRlbGV0ZSBsaW5rc1tsaW5rXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBOb3JtYWxp
emUgdGhlIHBvbHltb3JwaGljIHR5cGUgZnJvbSB0aGUgSlNPTi4KLQotICAgICAgICBOb3JtYWxp
emU6Ci0gICAgICAgIGBgYGpzCi0gICAgICAgICAgewotICAgICAgICAgICAgaWQ6ICIxIgotICAg
ICAgICAgICAgbWluaW9uOiB7IHR5cGU6ICJldmlsX21pbmlvbiIsIGlkOiAiMTIifQotICAgICAg
ICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgVG86Ci0gICAgICAgIGBgYGpzCi0gICAgICAg
ICAgewotICAgICAgICAgICAgaWQ6ICIxIgotICAgICAgICAgICAgbWluaW9uOiB7IHR5cGU6ICJl
dmlsTWluaW9uIiwgaWQ6ICIxMiJ9Ci0gICAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAg
ICBAbWV0aG9kIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcHMKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICovCi0gICAgICBub3JtYWxpemVSZWxhdGlvbnNoaXBzOiBmdW5jdGlvbih0eXBlLCBoYXNoKSB7
Ci0gICAgICAgIHZhciBwYXlsb2FkS2V5LCBwYXlsb2FkOwotCi0gICAgICAgIGlmICh0aGlzLmtl
eUZvclJlbGF0aW9uc2hpcCkgewotICAgICAgICAgIHR5cGUuZWFjaFJlbGF0aW9uc2hpcChmdW5j
dGlvbihrZXksIHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5v
cHRpb25zLnBvbHltb3JwaGljKSB7Ci0gICAgICAgICAgICAgIHBheWxvYWRLZXkgPSB0aGlzLmtl
eUZvckF0dHJpYnV0ZShrZXkpOwotICAgICAgICAgICAgICBwYXlsb2FkID0gaGFzaFtwYXlsb2Fk
S2V5XTsKLSAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC50eXBlKSB7Ci0gICAg
ICAgICAgICAgICAgcGF5bG9hZC50eXBlID0gdGhpcy50eXBlRm9yUm9vdChwYXlsb2FkLnR5cGUp
OwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQgJiYgcmVsYXRpb25zaGlwLmtpbmQg
PT09ICJoYXNNYW55IikgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAg
ICAgICAgICAgICBmb3JFYWNoKHBheWxvYWQsIGZ1bmN0aW9uKHNpbmdsZSkgewotICAgICAgICAg
ICAgICAgICAgc2luZ2xlLnR5cGUgPSBzZWxmLnR5cGVGb3JSb290KHNpbmdsZS50eXBlKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgcGF5bG9hZEtleSA9IHRoaXMua2V5Rm9yUmVsYXRpb25zaGlwKGtleSwg
cmVsYXRpb25zaGlwLmtpbmQpOwotICAgICAgICAgICAgICBwYXlsb2FkID0gaGFzaFtwYXlsb2Fk
S2V5XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFzaFtrZXldID0gcGF5bG9hZDsK
LQotICAgICAgICAgICAgaWYgKGtleSAhPT0gcGF5bG9hZEtleSkgewotICAgICAgICAgICAgICBk
ZWxldGUgaGFzaFtwYXlsb2FkS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB0aGlz
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IEFjdGl2ZU1vZGVsU2VyaWFsaXplcjsKLSAgfSk7Ci1kZWZpbmUoImFjdGl2ZW1vZGVs
LWFkYXB0ZXIvbGliL3N5c3RlbS9lbWJlZGRlZF9yZWNvcmRzX21peGluIiwgCi0gIFsiLi4vLi4v
Li4vZW1iZXItaW5mbGVjdG9yL2xpYi9tYWluIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBn
ZXQgPSBFbWJlci5nZXQ7Ci0gICAgdmFyIGZvckVhY2ggPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMu
Zm9yRWFjaDsKLSAgICB2YXIgY2FtZWxpemUgPSBFbWJlci5TdHJpbmcuY2FtZWxpemU7Ci0KLSAg
ICB2YXIgcGx1cmFsaXplID0gX19kZXBlbmRlbmN5MV9fLnBsdXJhbGl6ZTsKLQotICAgIC8qKgot
ICAgICAgIyMgVXNpbmcgRW1iZWRkZWQgUmVjb3JkcwotCi0gICAgICBgRFMuRW1iZWRkZWRSZWNv
cmRzTWl4aW5gIHN1cHBvcnRzIHNlcmlhbGl6aW5nIGVtYmVkZGVkIHJlY29yZHMuCi0KLSAgICAg
IFRvIHNldCB1cCBlbWJlZGRlZCByZWNvcmRzLCBpbmNsdWRlIHRoZSBtaXhpbiB3aGVuIGV4dGVu
ZGluZyBhIHNlcmlhbGl6ZXIKLSAgICAgIHRoZW4gZGVmaW5lIGFuZCBjb25maWd1cmUgZW1iZWRk
ZWQgKG1vZGVsKSByZWxhdGlvbnNoaXBzLgotCi0gICAgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9m
IGEgcGVyLXR5cGUgc2VyaWFsaXplciAoJ3Bvc3QnIHR5cGUpLgotCi0gICAgICBgYGBqcwotICAg
ICAgQXBwLlBvc3RTZXJpYWxpemVyID0gRFMuQWN0aXZlTW9kZWxTZXJpYWxpemVyLmV4dGVuZChE
Uy5FbWJlZGRlZFJlY29yZHNNaXhpbiwgewotICAgICAgICBhdHRyczogewotICAgICAgICAgIGF1
dGhvcjoge2VtYmVkZGVkOiAnYWx3YXlzJ30sCi0gICAgICAgICAgY29tbWVudHM6IHtzZXJpYWxp
emU6ICdpZHMnfQotICAgICAgICB9Ci0gICAgICB9KQotICAgICAgYGBgCi0KLSAgICAgIFRoZSBg
YXR0cnNgIG9wdGlvbiBmb3IgYSByZXNvdXJjZSBge2VtYmVkZGVkOiAnYWx3YXlzJ31gIGlzIHNo
b3J0aGFuZCBmb3I6Ci0KLSAgICAgIGBgYGpzCi0gICAgICB7c2VyaWFsaXplOiAncmVjb3Jkcycs
IGRlc2VyaWFsaXplOiAncmVjb3Jkcyd9Ci0gICAgICBgYGAKLQotICAgICAgIyMjIENvbmZpZ3Vy
aW5nIEF0dHJzCi0KLSAgICAgIEEgcmVzb3VyY2UncyBgYXR0cnNgIG9wdGlvbiBtYXkgYmUgc2V0
IHRvIHVzZSBgaWRzYCwgYHJlY29yZHNgIG9yIGBub2AgZm9yIHRoZQotICAgICAgYHNlcmlhbGl6
ZWAgIGFuZCBgZGVzZXJpYWxpemVgIHNldHRpbmdzLgotCi0gICAgICBUaGUgYGF0dHJzYCBwcm9w
ZXJ0eSBjYW4gYmUgc2V0IG9uIHRoZSBBcHBsaWNhdGlvblNlcmlhbGl6ZXIgb3IgYSBwZXItdHlw
ZQotICAgICAgc2VyaWFsaXplci4KLQotICAgICAgSW4gdGhlIGNhc2Ugd2hlcmUgZW1iZWRkZWQg
SlNPTiBpcyBleHBlY3RlZCB3aGlsZSBleHRyYWN0aW5nIGEgcGF5b2FkIChyZWFkaW5nKQotICAg
ICAgdGhlIHNldHRpbmcgaXMgYGRlc2VyaWFsaXplOiAncmVjb3JkcydgLCB0aGVyZSBpcyBubyBu
ZWVkIHRvIHVzZSBgaWRzYCB3aGVuCi0gICAgICBleHRyYWN0aW5nIGFzIHRoYXQgaXMgdGhlIGRl
ZmF1bHQgYmVoYXZpb3Igd2l0aG91dCB0aGlzIG1peGluIGlmIHlvdSBhcmUgdXNpbmcKLSAgICAg
IHRoZSB2YW5pbGxhIEFjdGl2ZU1vZGVsQWRhcHRlci4gTGlrZXdpc2UsIHRvIGVtYmVkIEpTT04g
aW4gdGhlIHBheWxvYWQgd2hpbGUKLSAgICAgIHNlcmlhbGl6aW5nIGBzZXJpYWxpemU6ICdyZWNv
cmRzJ2AgaXMgdGhlIHNldHRpbmcgdG8gdXNlLiBUaGVyZSBpcyBhbiBvcHRpb24gb2YKLSAgICAg
IG5vdCBlbWJlZGRpbmcgSlNPTiBpbiB0aGUgc2VyaWFsaXplZCBwYXlsb2FkIGJ5IHVzaW5nIGBz
ZXJpYWxpemU6ICdpZHMnYC4gSWYgeW91Ci0gICAgICBkbyBub3Qgd2FudCB0aGUgcmVsYXRpb25z
aGlwIHNlbnQgYXQgYWxsLCB5b3UgY2FuIHVzZSBgc2VyaWFsaXplOiAnbm8nYC4KLQotCi0gICAg
ICAjIyMgQWN0aXZlTW9kZWxTZXJpYWxpemVyIGRlZmF1bHRzCi0gICAgICBJZiB5b3UgZG8gbm90
IG92ZXJ3cml0ZSBgYXR0cnNgIGZvciBhIHNwZWNpZmljIHJlbGF0aW9uc2hpcCwgdGhlIGBBY3Rp
dmVNb2RlbFNlcmlhbGl6ZXJgCi0gICAgICB3aWxsIGJlaGF2ZSBpbiB0aGUgZm9sbG93aW5nIHdh
eToKLQotICAgICAgQmVsb25nc1RvOiBge3NlcmlhbGl6ZTonaWQnLCBkZXNlcmlhbGl6ZTonaWQn
fWAKLSAgICAgIEhhc01hbnk6ICAgYHtzZXJpYWxpemU6bm8sICBkZXNlcmlhbGl6ZTonaWRzJ31g
Ci0KLSAgICAgICMjIyBNb2RlbCBSZWxhdGlvbnNoaXBzCi0KLSAgICAgIEVtYmVkZGVkIHJlY29y
ZHMgbXVzdCBoYXZlIGEgbW9kZWwgZGVmaW5lZCB0byBiZSBleHRyYWN0ZWQgYW5kIHNlcmlhbGl6
ZWQuCi0KLSAgICAgIFRvIHN1Y2Nlc3NmdWxseSBleHRyYWN0IGFuZCBzZXJpYWxpemUgZW1iZWRk
ZWQgcmVjb3JkcyB0aGUgbW9kZWwgcmVsYXRpb25zaGlwcwotICAgICAgbXVzdCBiZSBzZXR1cCBj
b3JyZWN0eSBTZWUgdGhlCi0gICAgICBbZGVmaW5pbmcgcmVsYXRpb25zaGlwc10oL2d1aWRlcy9t
b2RlbHMvZGVmaW5pbmctbW9kZWxzLyN0b2NfZGVmaW5pbmctcmVsYXRpb25zaGlwcykKLSAgICAg
IHNlY3Rpb24gb2YgdGhlICoqRGVmaW5pbmcgTW9kZWxzKiogZ3VpZGUgcGFnZS4KLQotICAgICAg
UmVjb3JkcyB3aXRob3V0IGFuIGBpZGAgcHJvcGVydHkgYXJlIG5vdCBjb25zaWRlcmVkIGVtYmVk
ZGVkIHJlY29yZHMsIG1vZGVsCi0gICAgICBpbnN0YW5jZXMgbXVzdCBoYXZlIGFuIGBpZGAgcHJv
cGVydHkgdG8gYmUgdXNlZCB3aXRoIEVtYmVyIERhdGEuCi0KLSAgICAgICMjIyBFeGFtcGxlIEpT
T04gcGF5bG9hZHMsIE1vZGVscyBhbmQgU2VyaWFsaXplcnMKLQotICAgICAgKipXaGVuIGN1c3Rv
bWl6aW5nIGEgc2VyaWFsaXplciBpdCBpcyBpbXBvcmFudCB0byBncm9rIHdoYXQgdGhlIGN1c29t
aXphdGlvbnMKLSAgICAgIGFyZSwgcGxlYXNlIHJlYWQgdGhlIGRvY3MgZm9yIHRoZSBtZXRob2Rz
IHRoaXMgbWl4aW4gcHJvdmlkZXMsIGluIGNhc2UgeW91IG5lZWQKLSAgICAgIHRvIG1vZGlmeSB0
byBmaXQgeW91ciBzcGVjaWZpYyBuZWVkcy4qKgotCi0gICAgICBGb3IgZXhhbXBsZSByZXZpZXcg
dGhlIGRvY3MgZm9yIGVhY2ggbWV0aG9kIG9mIHRoaXMgbWl4aW46Ci0KLSAgICAgICogW2V4dHJh
Y3RBcnJheV0oL2FwaS9kYXRhL2NsYXNzZXMvRFMuRW1iZWRkZWRSZWNvcmRzTWl4aW4uaHRtbCNt
ZXRob2RfZXh0cmFjdEFycmF5KQotICAgICAgKiBbZXh0cmFjdFNpbmdsZV0oL2FwaS9kYXRhL2Ns
YXNzZXMvRFMuRW1iZWRkZWRSZWNvcmRzTWl4aW4uaHRtbCNtZXRob2RfZXh0cmFjdFNpbmdsZSkK
LSAgICAgICogW3NlcmlhbGl6ZUJlbG9uZ3NUb10oL2FwaS9kYXRhL2NsYXNzZXMvRFMuRW1iZWRk
ZWRSZWNvcmRzTWl4aW4uaHRtbCNtZXRob2Rfc2VyaWFsaXplQmVsb25nc1RvKQotICAgICAgKiBb
c2VyaWFsaXplSGFzTWFueV0oL2FwaS9kYXRhL2NsYXNzZXMvRFMuRW1iZWRkZWRSZWNvcmRzTWl4
aW4uaHRtbCNtZXRob2Rfc2VyaWFsaXplSGFzTWFueSkKLQotICAgICAgQGNsYXNzIEVtYmVkZGVk
UmVjb3Jkc01peGluCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgKi8KLSAgICB2YXIgRW1iZWRk
ZWRSZWNvcmRzTWl4aW4gPSBFbWJlci5NaXhpbi5jcmVhdGUoewotCi0gICAgICAvKioKLSAgICAg
ICAgU2VyaWFsaXplIGBiZWxvbmdzVG9gIHJlbGF0aW9uc2hpcCB3aGVuIGl0IGlzIGNvbmZpZ3Vy
ZWQgYXMgYW4gZW1iZWRkZWQgb2JqZWN0LgotCi0gICAgICAgIFRoaXMgZXhhbXBsZSBvZiBhbiBh
dXRob3IgbW9kZWwgYmVsb25ncyB0byBhIHBvc3QgbW9kZWw6Ci0KLSAgICAgICAgYGBganMKLSAg
ICAgICAgUG9zdCA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgdGl0bGU6ICAgIERTLmF0
dHIoJ3N0cmluZycpLAotICAgICAgICAgIGJvZHk6ICAgICBEUy5hdHRyKCdzdHJpbmcnKSwKLSAg
ICAgICAgICBhdXRob3I6ICAgRFMuYmVsb25nc1RvKCdhdXRob3InKQotICAgICAgICB9KTsKLQot
ICAgICAgICBBdXRob3IgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIG5hbWU6ICAgICBE
Uy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBwb3N0OiAgICAgRFMuYmVsb25nc1RvKCdwb3N0
JykKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFVzZSBhIGN1c3RvbSAodHlw
ZSkgc2VyaWFsaXplciBmb3IgdGhlIHBvc3QgbW9kZWwgdG8gY29uZmlndXJlIGVtYmVkZGVkIGF1
dGhvcgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJF
U1RTZXJpYWxpemVyLmV4dGVuZChEUy5FbWJlZGRlZFJlY29yZHNNaXhpbiwgewotICAgICAgICAg
IGF0dHJzOiB7Ci0gICAgICAgICAgICBhdXRob3I6IHtlbWJlZGRlZDogJ2Fsd2F5cyd9Ci0gICAg
ICAgICAgfQotICAgICAgICB9KQotICAgICAgICBgYGAKLQotICAgICAgICBBIHBheWxvYWQgd2l0
aCBhbiBhdHRyaWJ1dGUgY29uZmlndXJlZCBmb3IgZW1iZWRkZWQgcmVjb3JkcyBjYW4gc2VyaWFs
aXplCi0gICAgICAgIHRoZSByZWNvcmRzIHRvZ2V0aGVyIHVuZGVyIHRoZSByb290IGF0dHJpYnV0
ZSdzIHBheWxvYWQ6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJwb3N0
IjogewotICAgICAgICAgICAgImlkIjogIjEiCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMg
aXMgb21ha2FzZSIsCi0gICAgICAgICAgICAiYXV0aG9yIjogewotICAgICAgICAgICAgICAiaWQi
OiAiMiIKLSAgICAgICAgICAgICAgIm5hbWUiOiAiZGhoIgotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6
ZUJlbG9uZ3NUbwotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBh
cmFtIHtPYmplY3R9IGpzb24KLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9uc2hpcAot
ICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZUJlbG9uZ3NUbzogZnVuY3Rpb24ocmVjb3JkLCBqc29u
LCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgdmFyIGF0dHIgPSByZWxhdGlvbnNoaXAua2V5Owot
ICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLmdldCgnYXR0cnMnKTsKLSAgICAgICAgaWYgKG5vU2Vy
aWFsaXplT3B0aW9uU3BlY2lmaWVkKGF0dHJzLCBhdHRyKSkgewotICAgICAgICAgIHRoaXMuX3N1
cGVyKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdmFyIGluY2x1ZGVJZHMgPSBoYXNTZXJpYWxpemVJZHNPcHRpb24oYXR0
cnMsIGF0dHIpOwotICAgICAgICB2YXIgaW5jbHVkZVJlY29yZHMgPSBoYXNTZXJpYWxpemVSZWNv
cmRzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgICAgdmFyIGVtYmVkZGVkUmVjb3JkID0gcmVj
b3JkLmdldChhdHRyKTsKLSAgICAgICAgaWYgKGluY2x1ZGVJZHMpIHsKLSAgICAgICAgICBrZXkg
PSB0aGlzLmtleUZvclJlbGF0aW9uc2hpcChhdHRyLCByZWxhdGlvbnNoaXAua2luZCk7Ci0gICAg
ICAgICAgaWYgKCFlbWJlZGRlZFJlY29yZCkgewotICAgICAgICAgICAganNvbltrZXldID0gbnVs
bDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAganNvbltrZXldID0gZ2V0KGVtYmVk
ZGVkUmVjb3JkLCAnaWQnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5jbHVk
ZVJlY29yZHMpIHsKLSAgICAgICAgICB2YXIga2V5ID0gdGhpcy5rZXlGb3JSZWxhdGlvbnNoaXAo
YXR0cik7Ci0gICAgICAgICAgaWYgKCFlbWJlZGRlZFJlY29yZCkgewotICAgICAgICAgICAganNv
bltrZXldID0gbnVsbDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAganNvbltrZXld
ID0gZW1iZWRkZWRSZWNvcmQuc2VyaWFsaXplKHtpbmNsdWRlSWQ6IHRydWV9KTsKLSAgICAgICAg
ICAgIHRoaXMucmVtb3ZlRW1iZWRkZWRGb3JlaWduS2V5KHJlY29yZCwgZW1iZWRkZWRSZWNvcmQs
IHJlbGF0aW9uc2hpcCwganNvbltrZXldKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBTZXJpYWxpemUgYGhhc01hbnlgIHJlbGF0aW9uc2hp
cCB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgYXMgZW1iZWRkZWQgb2JqZWN0cy4KLQotICAgICAgICBU
aGlzIGV4YW1wbGUgb2YgYSBwb3N0IG1vZGVsIGhhcyBtYW55IGNvbW1lbnRzOgotCi0gICAgICAg
IGBgYGpzCi0gICAgICAgIFBvc3QgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIHRpdGxl
OiAgICBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBib2R5OiAgICAgRFMuYXR0cignc3Ry
aW5nJyksCi0gICAgICAgICAgY29tbWVudHM6IERTLmhhc01hbnkoJ2NvbW1lbnQnKQotICAgICAg
ICB9KTsKLQotICAgICAgICBDb21tZW50ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBi
b2R5OiAgICAgRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgcG9zdDogICAgIERTLmJlbG9u
Z3NUbygncG9zdCcpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBVc2UgYSBj
dXN0b20gKHR5cGUpIHNlcmlhbGl6ZXIgZm9yIHRoZSBwb3N0IG1vZGVsIHRvIGNvbmZpZ3VyZSBl
bWJlZGRlZCBjb21tZW50cwotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFs
aXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZChEUy5FbWJlZGRlZFJlY29yZHNNaXhpbiwg
ewotICAgICAgICAgIGF0dHJzOiB7Ci0gICAgICAgICAgICBjb21tZW50czoge2VtYmVkZGVkOiAn
YWx3YXlzJ30KLSAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAgICAgIGBgYAotCi0gICAgICAg
IEEgcGF5bG9hZCB3aXRoIGFuIGF0dHJpYnV0ZSBjb25maWd1cmVkIGZvciBlbWJlZGRlZCByZWNv
cmRzIGNhbiBzZXJpYWxpemUKLSAgICAgICAgdGhlIHJlY29yZHMgdG9nZXRoZXIgdW5kZXIgdGhl
IHJvb3QgYXR0cmlidXRlJ3MgcGF5bG9hZDoKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0g
ICAgICAgICAgInBvc3QiOiB7Ci0gICAgICAgICAgICAiaWQiOiAiMSIKLSAgICAgICAgICAgICJ0
aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAgICJib2R5IjogIkkgd2FudCB0
aGlzIGZvciBteSBPUk0sIEkgd2FudCB0aGF0IGZvciBteSB0ZW1wbGF0ZSBsYW5ndWFnZS4uLiIK
LSAgICAgICAgICAgICJjb21tZW50cyI6IFt7Ci0gICAgICAgICAgICAgICJpZCI6ICIxIiwKLSAg
ICAgICAgICAgICAgImJvZHkiOiAiUmFpbHMgaXMgdW5hZ2kiCi0gICAgICAgICAgICB9LCB7Ci0g
ICAgICAgICAgICAgICJpZCI6ICIyIiwKLSAgICAgICAgICAgICAgImJvZHkiOiAiT21ha2FzZSBP
X28iCi0gICAgICAgICAgICB9XQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBgYGAK
LQotICAgICAgICBUaGUgYXR0cnMgb3B0aW9ucyBvYmplY3QgY2FuIHVzZSBtb3JlIHNwZWNpZmlj
IGluc3RydWN0aW9uIGZvciBleHRyYWN0aW5nIGFuZAotICAgICAgICBzZXJpYWxpemluZy4gV2hl
biBzZXJpYWxpemluZywgYW4gb3B0aW9uIHRvIGVtYmVkIGBpZHNgIG9yIGByZWNvcmRzYCBjYW4g
YmUgc2V0LgotICAgICAgICBXaGVuIGV4dHJhY3RpbmcgdGhlIG9ubHkgb3B0aW9uIGlzIGByZWNv
cmRzYC4KLQotICAgICAgICBTbyBge2VtYmVkZGVkOiAnYWx3YXlzJ31gIGlzIHNob3J0aGFuZCBm
b3I6Ci0gICAgICAgIGB7c2VyaWFsaXplOiAncmVjb3JkcycsIGRlc2VyaWFsaXplOiAncmVjb3Jk
cyd9YAotCi0gICAgICAgIFRvIGVtYmVkIHRoZSBgaWRzYCBmb3IgYSByZWxhdGVkIG9iamVjdCAo
dXNpbmcgYSBoYXNNYW55IHJlbGF0aW9uc2hpcCk6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAg
QXBwLlBvc3RTZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKERTLkVtYmVkZGVk
UmVjb3Jkc01peGluLCB7Ci0gICAgICAgICAgYXR0cnM6IHsKLSAgICAgICAgICAgIGNvbW1lbnRz
OiB7c2VyaWFsaXplOiAnaWRzJywgZGVzZXJpYWxpemU6ICdyZWNvcmRzJ30KLSAgICAgICAgICB9
Ci0gICAgICAgIH0pCi0gICAgICAgIGBgYAotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHsKLSAg
ICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6ICIxIgotICAgICAgICAgICAgInRp
dGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImJvZHkiOiAiSSB3YW50IHRo
aXMgZm9yIG15IE9STSwgSSB3YW50IHRoYXQgZm9yIG15IHRlbXBsYXRlIGxhbmd1YWdlLi4uIgot
ICAgICAgICAgICAgImNvbW1lbnRzIjogWyIxIiwgIjIiXQotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZUhhc01hbnkKLSAgICAg
ICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29u
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSByZWxhdGlvbnNoaXAKLSAgICAgICovCi0gICAgICBz
ZXJpYWxpemVIYXNNYW55OiBmdW5jdGlvbihyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCkgewot
ICAgICAgICB2YXIgYXR0ciA9IHJlbGF0aW9uc2hpcC5rZXk7Ci0gICAgICAgIHZhciBhdHRycyA9
IHRoaXMuZ2V0KCdhdHRycycpOwotICAgICAgICBpZiAobm9TZXJpYWxpemVPcHRpb25TcGVjaWZp
ZWQoYXR0cnMsIGF0dHIpKSB7Ci0gICAgICAgICAgdGhpcy5fc3VwZXIocmVjb3JkLCBqc29uLCBy
ZWxhdGlvbnNoaXApOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB2YXIg
aW5jbHVkZUlkcyA9IGhhc1NlcmlhbGl6ZUlkc09wdGlvbihhdHRycywgYXR0cik7Ci0gICAgICAg
IHZhciBpbmNsdWRlUmVjb3JkcyA9IGhhc1NlcmlhbGl6ZVJlY29yZHNPcHRpb24oYXR0cnMsIGF0
dHIpOwotICAgICAgICB2YXIga2V5OwotICAgICAgICBpZiAoaW5jbHVkZUlkcykgewotICAgICAg
ICAgIGtleSA9IHRoaXMua2V5Rm9yUmVsYXRpb25zaGlwKGF0dHIsIHJlbGF0aW9uc2hpcC5raW5k
KTsKLSAgICAgICAgICBqc29uW2tleV0gPSBnZXQocmVjb3JkLCBhdHRyKS5tYXBCeSgnaWQnKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlUmVjb3JkcykgewotICAgICAgICAgIGtleSA9IHRo
aXMua2V5Rm9yQXR0cmlidXRlKGF0dHIpOwotICAgICAgICAgIGpzb25ba2V5XSA9IGdldChyZWNv
cmQsIGF0dHIpLm1hcChmdW5jdGlvbihlbWJlZGRlZFJlY29yZCkgewotICAgICAgICAgICAgdmFy
IHNlcmlhbGl6ZWRFbWJlZGRlZFJlY29yZCA9IGVtYmVkZGVkUmVjb3JkLnNlcmlhbGl6ZSh7aW5j
bHVkZUlkOiB0cnVlfSk7Ci0gICAgICAgICAgICB0aGlzLnJlbW92ZUVtYmVkZGVkRm9yZWlnbktl
eShyZWNvcmQsIGVtYmVkZGVkUmVjb3JkLCByZWxhdGlvbnNoaXAsIHNlcmlhbGl6ZWRFbWJlZGRl
ZFJlY29yZCk7Ci0gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZEVtYmVkZGVkUmVjb3JkOwot
ICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgV2hlbiBzZXJpYWxpemluZyBhbiBlbWJlZGRlZCByZWNvcmQsIG1vZGlmeSB0aGUgcHJv
cGVydHkgKGluIHRoZSBqc29uIHBheWxvYWQpCi0gICAgICAgIHRoYXQgcmVmZXJzIHRvIHRoZSBw
YXJlbnQgcmVjb3JkIChmb3JlaWduIGtleSBmb3IgcmVsYXRpb25zaGlwKS4KLQotICAgICAgICBT
ZXJpYWxpemluZyBhIGBiZWxvbmdzVG9gIHJlbGF0aW9uc2hpcCByZW1vdmVzIHRoZSBwcm9wZXJ0
eSB0aGF0IHJlZmVycyB0byB0aGUKLSAgICAgICAgcGFyZW50IHJlY29yZAotCi0gICAgICAgIFNl
cmlhbGl6aW5nIGEgYGhhc01hbnlgIHJlbGF0aW9uc2hpcCBkb2VzIG5vdCByZW1vdmUgdGhlIHBy
b3BlcnR5IHRoYXQgcmVmZXJzIHRvCi0gICAgICAgIHRoZSBwYXJlbnQgcmVjb3JkLgotCi0gICAg
ICAgIEBtZXRob2QgcmVtb3ZlRW1iZWRkZWRGb3JlaWduS2V5Ci0gICAgICAgIEBwYXJhbSB7RFMu
TW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSBlbWJlZGRlZFJlY29yZAot
ICAgICAgICBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25zaGlwCi0gICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBqc29uCi0gICAgICAqLwotICAgICAgcmVtb3ZlRW1iZWRkZWRGb3JlaWduS2V5OiBmdW5j
dGlvbiAocmVjb3JkLCBlbWJlZGRlZFJlY29yZCwgcmVsYXRpb25zaGlwLCBqc29uKSB7Ci0gICAg
ICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2hhc01hbnknKSB7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5raW5kID09PSAnYmVsb25nc1Rv
JykgewotICAgICAgICAgIHZhciBwYXJlbnRSZWNvcmQgPSByZWNvcmQuY29uc3RydWN0b3IuaW52
ZXJzZUZvcihyZWxhdGlvbnNoaXAua2V5KTsKLSAgICAgICAgICBpZiAocGFyZW50UmVjb3JkKSB7
Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHBhcmVudFJlY29yZC5uYW1lOwotICAgICAgICAgICAg
dmFyIGVtYmVkZGVkU2VyaWFsaXplciA9IHRoaXMuc3RvcmUuc2VyaWFsaXplckZvcihlbWJlZGRl
ZFJlY29yZC5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICB2YXIgcGFyZW50S2V5ID0gZW1iZWRk
ZWRTZXJpYWxpemVyLmtleUZvclJlbGF0aW9uc2hpcChuYW1lLCBwYXJlbnRSZWNvcmQua2luZCk7
Ci0gICAgICAgICAgICBpZiAocGFyZW50S2V5KSB7Ci0gICAgICAgICAgICAgIGRlbGV0ZSBqc29u
W3BhcmVudEtleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9LAotCi0gICAgICAvKioKLSAgICAgICAgRXh0cmFjdCBhbiBlbWJlZGRlZCBvYmplY3QgZnJv
bSB0aGUgcGF5bG9hZCBmb3IgYSBzaW5nbGUgb2JqZWN0Ci0gICAgICAgIGFuZCBhZGQgdGhlIG9i
amVjdCBpbiB0aGUgY29tcG91bmQgZG9jdW1lbnQgKHNpZGUtbG9hZGVkKSBmb3JtYXQgaW5zdGVh
ZC4KLQotICAgICAgICBBIHBheWxvYWQgd2l0aCBhbiBhdHRyaWJ1dGUgY29uZmlndXJlZCBmb3Ig
ZW1iZWRkZWQgcmVjb3JkcyBuZWVkcyB0byBiZSBleHRyYWN0ZWQ6Ci0KLSAgICAgICAgYGBganMK
LSAgICAgICAgewotICAgICAgICAgICJwb3N0IjogewotICAgICAgICAgICAgImlkIjogMQotICAg
ICAgICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImF1dGhv
ciI6IHsKLSAgICAgICAgICAgICAgImlkIjogMgotICAgICAgICAgICAgICAibmFtZSI6ICJkaGgi
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAiY29tbWVudHMiOiBbXQotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBFbWJlciBEYXRhIGlzIGV4cGVjdGlu
ZyBhIHBheWxvYWQgd2l0aCBhIGNvbXBvdW5kIGRvY3VtZW50IChzaWRlLWxvYWRlZCkgbGlrZToK
LQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInBvc3QiOiB7Ci0gICAgICAg
ICAgICAiaWQiOiAiMSIKLSAgICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwK
LSAgICAgICAgICAgICJhdXRob3IiOiAiMiIKLSAgICAgICAgICAgICJjb21tZW50cyI6IFtdCi0g
ICAgICAgICAgfSwKLSAgICAgICAgICAiYXV0aG9ycyI6IFt7Ci0gICAgICAgICAgICAiaWQiOiAi
MiIKLSAgICAgICAgICAgICJwb3N0IjogIjEiCi0gICAgICAgICAgICAibmFtZSI6ICJkaGgiCi0g
ICAgICAgICAgfV0KLSAgICAgICAgICAiY29tbWVudHMiOiBbXQotICAgICAgICB9Ci0gICAgICAg
IGBgYAotCi0gICAgICAgIFRoZSBwYXlsb2FkJ3MgYGF1dGhvcmAgYXR0cmlidXRlIHJlcHJlc2Vu
dHMgYW4gb2JqZWN0IHdpdGggYSBgYmVsb25nc1RvYCByZWxhdGlvbnNoaXAuCi0gICAgICAgIFRo
ZSBgcG9zdGAgYXR0cmlidXRlIHVuZGVyIGBhdXRob3JgIGlzIHRoZSBmb3JlaWduIGtleSB3aXRo
IHRoZSBpZCBmb3IgdGhlIHBvc3QKLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RTaW5nbGUKLSAg
ICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBv
ZiBEUy5Nb2RlbH0gcHJpbWFyeVR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQK
LSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHJlY29yZElkCi0gICAgICAgIEByZXR1cm4gT2JqZWN0
IHRoZSBwcmltYXJ5IHJlc3BvbnNlIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0Ci0gICAgICAqLwot
ICAgICAgZXh0cmFjdFNpbmdsZTogZnVuY3Rpb24oc3RvcmUsIHByaW1hcnlUeXBlLCBwYXlsb2Fk
LCByZWNvcmRJZCkgewotICAgICAgICB2YXIgcm9vdCA9IHRoaXMua2V5Rm9yQXR0cmlidXRlKHBy
aW1hcnlUeXBlLnR5cGVLZXkpLAotICAgICAgICAgICAgcGFydGlhbCA9IHBheWxvYWRbcm9vdF07
Ci0KLSAgICAgICAgdXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRlZCh0aGlzLCBzdG9yZSwgcHJpbWFy
eVR5cGUsIHBheWxvYWQsIHBhcnRpYWwpOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihz
dG9yZSwgcHJpbWFyeVR5cGUsIHBheWxvYWQsIHJlY29yZElkKTsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgICBFeHRyYWN0IGVtYmVkZGVkIG9iamVjdHMgaW4gYW4gYXJyYXkgd2hlbiBh
biBhdHRyIGlzIGNvbmZpZ3VyZWQgZm9yIGVtYmVkZGVkLAotICAgICAgICBhbmQgYWRkIHRoZW0g
YXMgc2lkZS1sb2FkZWQgb2JqZWN0cyBpbnN0ZWFkLgotCi0gICAgICAgIEEgcGF5bG9hZCB3aXRo
IGFuIGF0dHIgY29uZmlndXJlZCBmb3IgZW1iZWRkZWQgcmVjb3JkcyBuZWVkcyB0byBiZSBleHRy
YWN0ZWQ6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJwb3N0Ijogewot
ICAgICAgICAgICAgImlkIjogIjEiCi0gICAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgb21h
a2FzZSIsCi0gICAgICAgICAgICAiY29tbWVudHMiOiBbewotICAgICAgICAgICAgICAiaWQiOiAi
MSIsCi0gICAgICAgICAgICAgICJib2R5IjogIlJhaWxzIGlzIHVuYWdpIgotICAgICAgICAgICAg
fSwgewotICAgICAgICAgICAgICAiaWQiOiAiMiIsCi0gICAgICAgICAgICAgICJib2R5IjogIk9t
YWthc2UgT19vIgotICAgICAgICAgICAgfV0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgRW1iZXIgRGF0YSBpcyBleHBlY3RpbmcgYSBwYXlsb2FkIHdpdGgg
Y29tcG91bmQgZG9jdW1lbnQgKHNpZGUtbG9hZGVkKSBsaWtlOgotCi0gICAgICAgIGBgYGpzCi0g
ICAgICAgIHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6ICIxIgotICAg
ICAgICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICAgImNvbW1l
bnRzIjogWyIxIiwgIjIiXQotICAgICAgICAgIH0sCi0gICAgICAgICAgImNvbW1lbnRzIjogW3sK
LSAgICAgICAgICAgICJpZCI6ICIxIiwKLSAgICAgICAgICAgICJib2R5IjogIlJhaWxzIGlzIHVu
YWdpIgotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJpZCI6ICIyIiwKLSAgICAgICAgICAg
ICJib2R5IjogIk9tYWthc2UgT19vIgotICAgICAgICAgIH1dCi0gICAgICAgIH0KLSAgICAgICAg
YGBgCi0KLSAgICAgICAgVGhlIHBheWxvYWQncyBgY29tbWVudHNgIGF0dHJpYnV0ZSByZXByZXNl
bnRzIHJlY29yZHMgaW4gYSBgaGFzTWFueWAgcmVsYXRpb25zaGlwCi0KLSAgICAgICAgQG1ldGhv
ZCBleHRyYWN0QXJyYXkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAg
QHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gcHJpbWFyeVR5cGUKLSAgICAgICAgQHBhcmFt
IHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gVGhlIHBy
aW1hcnkgYXJyYXkgdGhhdCB3YXMgcmV0dXJuZWQgaW4gcmVzcG9uc2UKLSAgICAgICAgICB0byB0
aGUgb3JpZ2luYWwgcXVlcnkuCi0gICAgICAqLwotICAgICAgZXh0cmFjdEFycmF5OiBmdW5jdGlv
bihzdG9yZSwgcHJpbWFyeVR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAgdmFyIHJvb3QgPSB0aGlz
LmtleUZvckF0dHJpYnV0ZShwcmltYXJ5VHlwZS50eXBlS2V5KSwKLSAgICAgICAgICAgIHBhcnRp
YWxzID0gcGF5bG9hZFtwbHVyYWxpemUocm9vdCldOwotCi0gICAgICAgIGZvckVhY2gocGFydGlh
bHMsIGZ1bmN0aW9uKHBhcnRpYWwpIHsKLSAgICAgICAgICB1cGRhdGVQYXlsb2FkV2l0aEVtYmVk
ZGVkKHRoaXMsIHN0b3JlLCBwcmltYXJ5VHlwZSwgcGF5bG9hZCwgcGFydGlhbCk7Ci0gICAgICAg
IH0sIHRoaXMpOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihzdG9yZSwgcHJpbWFyeVR5
cGUsIHBheWxvYWQpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgLy8gY2hlY2tzIGNvbmZpZyBm
b3IgYXR0cnMgb3B0aW9uIHRvIGVtYmVkZGVkIChhbHdheXMpIC0gc2VyaWFsaXplIGFuZCBkZXNl
cmlhbGl6ZQotICAgIGZ1bmN0aW9uIGhhc0VtYmVkZGVkQWx3YXlzT3B0aW9uKGF0dHJzLCBhdHRy
KSB7Ci0gICAgICB2YXIgb3B0aW9uID0gYXR0cnNPcHRpb24oYXR0cnMsIGF0dHIpOwotICAgICAg
cmV0dXJuIG9wdGlvbiAmJiBvcHRpb24uZW1iZWRkZWQgPT09ICdhbHdheXMnOwotICAgIH0KLQot
ICAgIC8vIGNoZWNrcyBjb25maWcgZm9yIGF0dHJzIG9wdGlvbiB0byBzZXJpYWxpemUgaWRzCi0g
ICAgZnVuY3Rpb24gaGFzU2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywgYXR0cikgewotICAg
ICAgdmFyIGFsd2F5c0VtYmVkID0gaGFzRW1iZWRkZWRBbHdheXNPcHRpb24oYXR0cnMsIGF0dHIp
OwotICAgICAgdmFyIG9wdGlvbiA9IGF0dHJzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgIHJl
dHVybiBhbHdheXNFbWJlZCB8fCAob3B0aW9uICYmIChvcHRpb24uc2VyaWFsaXplID09PSAncmVj
b3JkcycpKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVja3MgY29uZmlnIGZvciBhdHRycyBvcHRpb24g
dG8gc2VyaWFsaXplIHJlY29yZHMKLSAgICBmdW5jdGlvbiBoYXNTZXJpYWxpemVJZHNPcHRpb24o
YXR0cnMsIGF0dHIpIHsKLSAgICAgIHZhciBvcHRpb24gPSBhdHRyc09wdGlvbihhdHRycywgYXR0
cik7Ci0gICAgICByZXR1cm4gb3B0aW9uICYmIChvcHRpb24uc2VyaWFsaXplID09PSAnaWRzJyB8
fCBvcHRpb24uc2VyaWFsaXplID09PSAnaWQnKTsKLSAgICB9Ci0KLSAgICAvLyBjaGVja3MgY29u
ZmlnIGZvciBhdHRycyBvcHRpb24gdG8gc2VyaWFsaXplIHJlY29yZHMKLSAgICBmdW5jdGlvbiBu
b1NlcmlhbGl6ZU9wdGlvblNwZWNpZmllZChhdHRycywgYXR0cikgewotICAgICAgdmFyIG9wdGlv
biA9IGF0dHJzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgIHZhciBzZXJpYWxpemVSZWNvcmRz
ID0gaGFzU2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywgYXR0cik7Ci0gICAgICB2YXIgc2Vy
aWFsaXplSWRzID0gaGFzU2VyaWFsaXplSWRzT3B0aW9uKGF0dHJzLCBhdHRyKTsKLSAgICAgIHJl
dHVybiAhKG9wdGlvbiAmJiAob3B0aW9uLnNlcmlhbGl6ZSB8fCBvcHRpb24uZW1iZWRkZWQpKTsK
LSAgICB9Ci0KLSAgICAvLyBjaGVja3MgY29uZmlnIGZvciBhdHRycyBvcHRpb24gdG8gZGVzZXJp
YWxpemUgcmVjb3JkcwotICAgIC8vIGEgZGVmaW5lZCBvcHRpb24gb2JqZWN0IGZvciBhIHJlc291
cmNlIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMKLSAgICAvLyBgZGVzZXJpYWxpemU6ICdyZWNvcmRz
J2AKLSAgICBmdW5jdGlvbiBoYXNEZXNlcmlhbGl6ZVJlY29yZHNPcHRpb24oYXR0cnMsIGF0dHIp
IHsKLSAgICAgIHZhciBhbHdheXNFbWJlZCA9IGhhc0VtYmVkZGVkQWx3YXlzT3B0aW9uKGF0dHJz
LCBhdHRyKTsKLSAgICAgIHZhciBvcHRpb24gPSBhdHRyc09wdGlvbihhdHRycywgYXR0cik7Ci0g
ICAgICB2YXIgaGFzU2VyaWFsaXppbmdPcHRpb24gPSBvcHRpb24gJiYgKG9wdGlvbi5kZXNlcmlh
bGl6ZSB8fCBvcHRpb24uc2VyaWFsaXplKTsKLSAgICAgIHJldHVybiBhbHdheXNFbWJlZCB8fCBo
YXNTZXJpYWxpemluZ09wdGlvbiAvKiBvcHRpb24uZGVzZXJpYWxpemUgPT09ICdyZWNvcmRzJyAq
LzsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhdHRyc09wdGlvbihhdHRycywgYXR0cikgewotICAg
ICAgcmV0dXJuIGF0dHJzICYmIChhdHRyc1tFbWJlci5TdHJpbmcuY2FtZWxpemUoYXR0cildIHx8
IGF0dHJzW2F0dHJdKTsKLSAgICB9Ci0KLSAgICAvLyBjaG9vc2VzIGEgcmVsYXRpb25zaGlwIGtp
bmQgdG8gYnJhbmNoIHdoaWNoIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHBheWxvYWQKLSAg
ICAvLyBkb2VzIG5vdCBjaGFuZ2UgcGF5bG9hZCBpZiBhdHRyIGlzIG5vdCBlbWJlZGRlZAotICAg
IGZ1bmN0aW9uIHVwZGF0ZVBheWxvYWRXaXRoRW1iZWRkZWQoc2VyaWFsaXplciwgc3RvcmUsIHR5
cGUsIHBheWxvYWQsIHBhcnRpYWwpIHsKLSAgICAgIHZhciBhdHRycyA9IGdldChzZXJpYWxpemVy
LCAnYXR0cnMnKTsKLQotICAgICAgaWYgKCFhdHRycykgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICB0eXBlLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24oa2V5LCByZWxhdGlvbnNo
aXApIHsKLSAgICAgICAgaWYgKGhhc0Rlc2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywga2V5
KSkgewotICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCA9PT0gImhhc01hbnkiKSB7Ci0g
ICAgICAgICAgICB1cGRhdGVQYXlsb2FkV2l0aEVtYmVkZGVkSGFzTWFueShzZXJpYWxpemVyLCBz
dG9yZSwga2V5LCByZWxhdGlvbnNoaXAsIHBheWxvYWQsIHBhcnRpYWwpOwotICAgICAgICAgIH0K
LSAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQgPT09ICJiZWxvbmdzVG8iKSB7Ci0gICAg
ICAgICAgICB1cGRhdGVQYXlsb2FkV2l0aEVtYmVkZGVkQmVsb25nc1RvKHNlcmlhbGl6ZXIsIHN0
b3JlLCBrZXksIHJlbGF0aW9uc2hpcCwgcGF5bG9hZCwgcGFydGlhbCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBoYW5kbGVzIGVtYmVkZGluZyBm
b3IgYGhhc01hbnlgIHJlbGF0aW9uc2hpcAotICAgIGZ1bmN0aW9uIHVwZGF0ZVBheWxvYWRXaXRo
RW1iZWRkZWRIYXNNYW55KHNlcmlhbGl6ZXIsIHN0b3JlLCBwcmltYXJ5VHlwZSwgcmVsYXRpb25z
aGlwLCBwYXlsb2FkLCBwYXJ0aWFsKSB7Ci0gICAgICB2YXIgZW1iZWRkZWRTZXJpYWxpemVyID0g
c3RvcmUuc2VyaWFsaXplckZvcihyZWxhdGlvbnNoaXAudHlwZS50eXBlS2V5KTsKLSAgICAgIHZh
ciBwcmltYXJ5S2V5ID0gZ2V0KHNlcmlhbGl6ZXIsICdwcmltYXJ5S2V5Jyk7Ci0gICAgICB2YXIg
YXR0ciA9IHJlbGF0aW9uc2hpcC50eXBlLnR5cGVLZXk7Ci0gICAgICAvLyB1bmRlcnNjb3JlIGZv
cmNlcyB0aGUgZW1iZWRkZWQgcmVjb3JkcyB0byBiZSBzaWRlIGxvYWRlZC4KLSAgICAgIC8vIGl0
IGlzIG5lZWRlZCB3aGVuIG1haW4gdHlwZSA9PT0gcmVsYXRpb25zaGlwLnR5cGUKLSAgICAgIHZh
ciBlbWJlZGRlZFR5cGVLZXkgPSAnXycgKyBzZXJpYWxpemVyLnR5cGVGb3JSb290KHJlbGF0aW9u
c2hpcC50eXBlLnR5cGVLZXkpOwotICAgICAgdmFyIGV4cGFuZGVkS2V5ID0gc2VyaWFsaXplci5r
ZXlGb3JSZWxhdGlvbnNoaXAocHJpbWFyeVR5cGUsIHJlbGF0aW9uc2hpcC5raW5kKTsKLSAgICAg
IHZhciBhdHRyaWJ1dGUgID0gc2VyaWFsaXplci5rZXlGb3JBdHRyaWJ1dGUocHJpbWFyeVR5cGUp
OwotICAgICAgdmFyIGlkcyA9IFtdOwotCi0gICAgICBpZiAoIXBhcnRpYWxbYXR0cmlidXRlXSkg
ewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHBheWxvYWRbZW1iZWRkZWRUeXBl
S2V5XSA9IHBheWxvYWRbZW1iZWRkZWRUeXBlS2V5XSB8fCBbXTsKLQotICAgICAgZm9yRWFjaChw
YXJ0aWFsW2F0dHJpYnV0ZV0sIGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgdmFyIGVtYmVkZGVk
VHlwZSA9IHN0b3JlLm1vZGVsRm9yKGF0dHIpOwotICAgICAgICB1cGRhdGVQYXlsb2FkV2l0aEVt
YmVkZGVkKGVtYmVkZGVkU2VyaWFsaXplciwgc3RvcmUsIGVtYmVkZGVkVHlwZSwgcGF5bG9hZCwg
ZGF0YSk7Ci0gICAgICAgIGlkcy5wdXNoKGRhdGFbcHJpbWFyeUtleV0pOwotICAgICAgICBwYXls
b2FkW2VtYmVkZGVkVHlwZUtleV0ucHVzaChkYXRhKTsKLSAgICAgIH0pOwotCi0gICAgICBwYXJ0
aWFsW2V4cGFuZGVkS2V5XSA9IGlkczsKLSAgICAgIGRlbGV0ZSBwYXJ0aWFsW2F0dHJpYnV0ZV07
Ci0gICAgfQotCi0gICAgLy8gaGFuZGxlcyBlbWJlZGRpbmcgZm9yIGBiZWxvbmdzVG9gIHJlbGF0
aW9uc2hpcAotICAgIGZ1bmN0aW9uIHVwZGF0ZVBheWxvYWRXaXRoRW1iZWRkZWRCZWxvbmdzVG8o
c2VyaWFsaXplciwgc3RvcmUsIHByaW1hcnlUeXBlLCByZWxhdGlvbnNoaXAsIHBheWxvYWQsIHBh
cnRpYWwpIHsKLSAgICAgIHZhciBhdHRycyA9IHNlcmlhbGl6ZXIuZ2V0KCdhdHRycycpOwotCi0g
ICAgICBpZiAoIWF0dHJzIHx8Ci0gICAgICAgICEoaGFzRGVzZXJpYWxpemVSZWNvcmRzT3B0aW9u
KGF0dHJzLCBFbWJlci5TdHJpbmcuY2FtZWxpemUocHJpbWFyeVR5cGUpKSB8fAotICAgICAgICAg
IGhhc0Rlc2VyaWFsaXplUmVjb3Jkc09wdGlvbihhdHRycywgcHJpbWFyeVR5cGUpKSkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICB2YXIgYXR0ciA9IHJlbGF0aW9uc2hpcC50eXBl
LnR5cGVLZXk7Ci0gICAgICB2YXIgX3NlcmlhbGl6ZXIgPSBzdG9yZS5zZXJpYWxpemVyRm9yKHJl
bGF0aW9uc2hpcC50eXBlLnR5cGVLZXkpOwotICAgICAgdmFyIHByaW1hcnlLZXkgPSBnZXQoX3Nl
cmlhbGl6ZXIsICdwcmltYXJ5S2V5Jyk7Ci0gICAgICB2YXIgZW1iZWRkZWRUeXBlS2V5ID0gRW1i
ZXIuU3RyaW5nLnBsdXJhbGl6ZShhdHRyKTsgLy8gVE9ETyBkb24ndCB1c2UgcGx1cmFsaXplCi0g
ICAgICB2YXIgZXhwYW5kZWRLZXkgPSBfc2VyaWFsaXplci5rZXlGb3JSZWxhdGlvbnNoaXAocHJp
bWFyeVR5cGUsIHJlbGF0aW9uc2hpcC5raW5kKTsKLSAgICAgIHZhciBhdHRyaWJ1dGUgPSBfc2Vy
aWFsaXplci5rZXlGb3JBdHRyaWJ1dGUocHJpbWFyeVR5cGUpOwotCi0gICAgICBpZiAoIXBhcnRp
YWxbYXR0cmlidXRlXSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBwYXlsb2Fk
W2VtYmVkZGVkVHlwZUtleV0gPSBwYXlsb2FkW2VtYmVkZGVkVHlwZUtleV0gfHwgW107Ci0gICAg
ICB2YXIgZW1iZWRkZWRUeXBlID0gc3RvcmUubW9kZWxGb3IocmVsYXRpb25zaGlwLnR5cGUudHlw
ZUtleSk7Ci0gICAgICAvLyBSZWN1cnNpdmUgY2FsbCBmb3IgbmVzdGVkIHJlY29yZAotICAgICAg
dXBkYXRlUGF5bG9hZFdpdGhFbWJlZGRlZChfc2VyaWFsaXplciwgc3RvcmUsIGVtYmVkZGVkVHlw
ZSwgcGF5bG9hZCwgcGFydGlhbFthdHRyaWJ1dGVdKTsKLSAgICAgIHBhcnRpYWxbZXhwYW5kZWRL
ZXldID0gcGFydGlhbFthdHRyaWJ1dGVdLmlkOwotICAgICAgLy8gTmVlZCB0byBtb3ZlIGFuIGVt
YmVkZGVkIGBiZWxvbmdzVG9gIG9iamVjdCBpbnRvIGEgcGx1cmFsaXplZCBjb2xsZWN0aW9uCi0g
ICAgICBwYXlsb2FkW2VtYmVkZGVkVHlwZUtleV0ucHVzaChwYXJ0aWFsW2F0dHJpYnV0ZV0pOwot
ICAgICAgLy8gTmVlZCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHNvIHJlbGF0aW9uc2hpcCB3
b3JrcyBiZXR3ZWVuIGJvdGggYGJlbG9uZ3NUb2AgcmVjb3JkcwotICAgICAgcGFydGlhbFthdHRy
aWJ1dGVdW3JlbGF0aW9uc2hpcC5wYXJlbnRUeXBlLnR5cGVLZXkgKyAnX2lkJ10gPSBwYXJ0aWFs
LmlkOwotICAgICAgZGVsZXRlIHBhcnRpYWxbYXR0cmlidXRlXTsKLSAgICB9Ci0KLSAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZWRkZWRSZWNvcmRzTWl4aW47Ci0gIH0pOwotZGVmaW5l
KCJlbWJlci1kYXRhL2xpYi9hZGFwdGVycyIsIAotICBbIi4vYWRhcHRlcnMvZml4dHVyZV9hZGFw
dGVyIiwiLi9hZGFwdGVycy9yZXN0X2FkYXB0ZXIiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAg
ICB2YXIgRml4dHVyZUFkYXB0ZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICB2
YXIgUkVTVEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQotICAgIF9fZXhw
b3J0c19fLlJFU1RBZGFwdGVyID0gUkVTVEFkYXB0ZXI7Ci0gICAgX19leHBvcnRzX18uRml4dHVy
ZUFkYXB0ZXIgPSBGaXh0dXJlQWRhcHRlcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGli
L2FkYXB0ZXJzL2ZpeHR1cmVfYWRhcHRlciIsIAotICBbIi4uL3N5c3RlbS9hZGFwdGVyIiwiZXhw
b3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
InVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8K
LQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIGZtdCA9IEVtYmVyLlN0cmluZy5mbXQsCi0gICAg
ICAgIGluZGV4T2YgPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMuaW5kZXhPZjsKLQotICAgIHZhciBj
b3VudGVyID0gMDsKLQotICAgIHZhciBBZGFwdGVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0
Il07Ci0KLSAgICAvKioKLSAgICAgIGBEUy5GaXh0dXJlQWRhcHRlcmAgaXMgYW4gYWRhcHRlciB0
aGF0IGxvYWRzIHJlY29yZHMgZnJvbSBtZW1vcnkuCi0gICAgICBJdCdzIHByaW1hcmlseSB1c2Vk
IGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy4gWW91IGNhbiBhbHNvIHVzZQotICAgICAgYERT
LkZpeHR1cmVBZGFwdGVyYCB3aGlsZSB3b3JraW5nIG9uIHRoZSBBUEkgYnV0IGFyZSBub3QgcmVh
ZHkgdG8KLSAgICAgIGludGVncmF0ZSB5ZXQuIEl0IGlzIGEgZnVsbHkgZnVuY3Rpb25pbmcgYWRh
cHRlci4gQWxsIENSVUQgbWV0aG9kcwotICAgICAgYXJlIGltcGxlbWVudGVkLiBZb3UgY2FuIGFs
c28gaW1wbGVtZW50IHF1ZXJ5IGxvZ2ljIHRoYXQgYSByZW1vdGUKLSAgICAgIHN5c3RlbSB3b3Vs
ZCBkby4gSXQncyBwb3NzaWJsZSB0byBkZXZlbG9wIHlvdXIgZW50aXJlIGFwcGxpY2F0aW9uCi0g
ICAgICB3aXRoIGBEUy5GaXh0dXJlQWRhcHRlcmAuCi0KLSAgICAgIEZvciBpbmZvcm1hdGlvbiBv
biBob3cgdG8gdXNlIHRoZSBgRml4dHVyZUFkYXB0ZXJgIGluIHlvdXIKLSAgICAgIGFwcGxpY2F0
aW9uIHBsZWFzZSBzZWUgdGhlIFtGaXh0dXJlQWRhcHRlcgotICAgICAgZ3VpZGVdKC9ndWlkZXMv
bW9kZWxzL3RoZS1maXh0dXJlLWFkYXB0ZXIvKS4KLQotICAgICAgQGNsYXNzIEZpeHR1cmVBZGFw
dGVyCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBAZXh0ZW5kcyBEUy5BZGFwdGVyCi0gICAg
Ki8KLSAgICB2YXIgRml4dHVyZUFkYXB0ZXIgPSBBZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAvLyBi
eSBkZWZhdWx0LCBmaXh0dXJlcyBhcmUgYWxyZWFkeSBpbiBub3JtYWxpemVkIGZvcm0KLSAgICAg
IHNlcmlhbGl6ZXI6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBJZiBgc2ltdWxhdGVSZW1v
dGVSZXNwb25zZWAgaXMgYHRydWVgIHRoZSBgRml4dHVyZUFkYXB0ZXJgIHdpbGwKLSAgICAgICAg
d2FpdCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHJlc29sdmluZyBwcm9taXNlcyB3
aXRoIHRoZQotICAgICAgICBmaXh0dXJlIHZhbHVlcy4gVGhlIHdhaXQgdGltZSBjYW4gYmUgY29u
ZmlndXJlZCB2aWEgdGhlIGBsYXRlbmN5YAotICAgICAgICBwcm9wZXJ0eS4KLQotICAgICAgICBA
cHJvcGVydHkgc2ltdWxhdGVSZW1vdGVSZXNwb25zZQotICAgICAgICBAdHlwZSB7Qm9vbGVhbn0K
LSAgICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAgKi8KLSAgICAgIHNpbXVsYXRlUmVtb3RlUmVz
cG9uc2U6IHRydWUsCi0KLSAgICAgIC8qKgotICAgICAgICBCeSBkZWZhdWx0IHRoZSBgRml4dHVy
ZUFkYXB0ZXJgIHdpbGwgc2ltdWxhdGUgYSB3YWl0IG9mIHRoZQotICAgICAgICBgbGF0ZW5jeWAg
bWlsbGlzZWNvbmRzIGJlZm9yZSByZXNvbHZpbmcgcHJvbWlzZXMgd2l0aCB0aGUgZml4dHVyZQot
ICAgICAgICB2YWx1ZXMuIFRoaXMgYmVoYXZpb3IgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZQot
ICAgICAgICBgc2ltdWxhdGVSZW1vdGVSZXNwb25zZWAgcHJvcGVydHkuCi0KLSAgICAgICAgQHBy
b3BlcnR5IGxhdGVuY3kKLSAgICAgICAgQHR5cGUge051bWJlcn0KLSAgICAgICAgQGRlZmF1bHQg
NTAKLSAgICAgICovCi0gICAgICBsYXRlbmN5OiA1MCwKLQotICAgICAgLyoqCi0gICAgICAgIElt
cGxlbWVudCB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBwcm92aWRlIGRhdGEgYXNzb2NpYXRlZCB3
aXRoIGEgdHlwZQotCi0gICAgICAgIEBtZXRob2QgZml4dHVyZXNGb3JUeXBlCi0gICAgICAgIEBw
YXJhbSB7U3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHJldHVybiB7QXJyYXl9
Ci0gICAgICAqLwotICAgICAgZml4dHVyZXNGb3JUeXBlOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAg
ICAgIGlmICh0eXBlLkZJWFRVUkVTKSB7Ci0gICAgICAgICAgdmFyIGZpeHR1cmVzID0gRW1iZXIu
QSh0eXBlLkZJWFRVUkVTKTsKLSAgICAgICAgICByZXR1cm4gZml4dHVyZXMubWFwKGZ1bmN0aW9u
KGZpeHR1cmUpewotICAgICAgICAgICAgdmFyIGZpeHR1cmVJZFR5cGUgPSB0eXBlb2YgZml4dHVy
ZS5pZDsKLSAgICAgICAgICAgIGlmKGZpeHR1cmVJZFR5cGUgIT09ICJudW1iZXIiICYmIGZpeHR1
cmVJZFR5cGUgIT09ICJzdHJpbmciKXsKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZt
dCgndGhlIGlkIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCBhcyBhIG51bWJlciBvciBzdHJpbmcg
Zm9yIGZpeHR1cmUgJUAnLCBbZml4dHVyZV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGZpeHR1cmUuaWQgPSBmaXh0dXJlLmlkICsgJyc7Ci0gICAgICAgICAgICByZXR1cm4gZml4dHVy
ZTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gb3JkZXIg
dG8gcXVlcnkgZml4dHVyZXMgZGF0YQotCi0gICAgICAgIEBtZXRob2QgcXVlcnlGaXh0dXJlcwot
ICAgICAgICBAcGFyYW0ge0FycmF5fSBmaXh0dXJlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBx
dWVyeQotICAgICAgICBAcGFyYW0ge1N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAg
IEByZXR1cm4ge1Byb21pc2V8QXJyYXl9Ci0gICAgICAqLwotICAgICAgcXVlcnlGaXh0dXJlczog
ZnVuY3Rpb24oZml4dHVyZXMsIHF1ZXJ5LCB0eXBlKSB7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgn
Tm90IGltcGxlbWVudGVkOiBZb3UgbXVzdCBvdmVycmlkZSB0aGUgRFMuRml4dHVyZUFkYXB0ZXI6
OnF1ZXJ5Rml4dHVyZXMgbWV0aG9kIHRvIHN1cHBvcnQgcXVlcnlpbmcgdGhlIGZpeHR1cmUgc3Rv
cmUuJyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB1cGRhdGVGaXh0
dXJlcwotICAgICAgICBAcGFyYW0ge1N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAg
IEBwYXJhbSB7QXJyYXl9IGZpeHR1cmUKLSAgICAgICovCi0gICAgICB1cGRhdGVGaXh0dXJlczog
ZnVuY3Rpb24odHlwZSwgZml4dHVyZSkgewotICAgICAgICBpZighdHlwZS5GSVhUVVJFUykgewot
ICAgICAgICAgIHR5cGUuRklYVFVSRVMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBm
aXh0dXJlcyA9IHR5cGUuRklYVFVSRVM7Ci0KLSAgICAgICAgdGhpcy5kZWxldGVMb2FkZWRGaXh0
dXJlKHR5cGUsIGZpeHR1cmUpOwotCi0gICAgICAgIGZpeHR1cmVzLnB1c2goZml4dHVyZSk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIG9y
ZGVyIHRvIHByb3ZpZGUganNvbiBmb3IgQ1JVRCBtZXRob2RzCi0KLSAgICAgICAgQG1ldGhvZCBt
b2NrSlNPTgotICAgICAgICBAcGFyYW0ge1N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAg
ICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAgIG1vY2tKU09OOiBm
dW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0gICAgICAgIHJldHVybiBzdG9yZS5zZXJp
YWxpemVyRm9yKHR5cGUpLnNlcmlhbGl6ZShyZWNvcmQsIHsgaW5jbHVkZUlkOiB0cnVlIH0pOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgZ2VuZXJhdGVJZEZvclJlY29y
ZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge0RTLk1v
ZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVybiB7U3RyaW5nfSBpZAotICAgICAgKi8KLSAgICAg
IGdlbmVyYXRlSWRGb3JSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlKSB7Ci0gICAgICAgIHJldHVybiAi
Zml4dHVyZS0iICsgY291bnRlcisrOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBt
ZXRob2QgZmluZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBp
ZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgZmlu
ZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIGlkKSB7Ci0gICAgICAgIHZhciBmaXh0dXJlcyA9IHRo
aXMuZml4dHVyZXNGb3JUeXBlKHR5cGUpLAotICAgICAgICAgICAgZml4dHVyZTsKLQotICAgICAg
ICBFbWJlci5hc3NlcnQoIlVuYWJsZSB0byBmaW5kIGZpeHR1cmVzIGZvciBtb2RlbCB0eXBlICIr
dHlwZS50b1N0cmluZygpLCBmaXh0dXJlcyk7Ci0KLSAgICAgICAgaWYgKGZpeHR1cmVzKSB7Ci0g
ICAgICAgICAgZml4dHVyZSA9IEVtYmVyLkEoZml4dHVyZXMpLmZpbmRQcm9wZXJ0eSgnaWQnLCBp
ZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZml4dHVyZSkgewotICAgICAgICAgIHJldHVy
biB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVy
biBmaXh0dXJlOwotICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0g
ICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBmaW5kTWFueQotICAgICAgICBAcGFyYW0ge0RTLlN0
b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEBwYXJhbSB7QXJyYXl9IGlkcwotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9t
aXNlCi0gICAgICAqLwotICAgICAgZmluZE1hbnk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZHMp
IHsKLSAgICAgICAgdmFyIGZpeHR1cmVzID0gdGhpcy5maXh0dXJlc0ZvclR5cGUodHlwZSk7Ci0K
LSAgICAgICAgRW1iZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCBmaXh0dXJlcyBmb3IgbW9kZWwg
dHlwZSAiK3R5cGUudG9TdHJpbmcoKSwgZml4dHVyZXMpOwotCi0gICAgICAgIGlmIChmaXh0dXJl
cykgewotICAgICAgICAgIGZpeHR1cmVzID0gZml4dHVyZXMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0p
IHsKLSAgICAgICAgICAgIHJldHVybiBpbmRleE9mKGlkcywgaXRlbS5pZCkgIT09IC0xOwotICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpeHR1cmVzKSB7Ci0gICAgICAg
ICAgcmV0dXJuIHRoaXMuc2ltdWxhdGVSZW1vdGVDYWxsKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgcmV0dXJuIGZpeHR1cmVzOwotICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQG1ldGhvZCBmaW5k
QWxsCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3Vi
Y2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHNpbmNlVG9r
ZW4KLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZp
bmRBbGw6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlKSB7Ci0gICAgICAgIHZhciBmaXh0dXJlcyA9IHRo
aXMuZml4dHVyZXNGb3JUeXBlKHR5cGUpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiVW5hYmxl
IHRvIGZpbmQgZml4dHVyZXMgZm9yIG1vZGVsIHR5cGUgIit0eXBlLnRvU3RyaW5nKCksIGZpeHR1
cmVzKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5zaW11bGF0ZVJlbW90ZUNhbGwoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgcmV0dXJuIGZpeHR1cmVzOwotICAgICAgICB9LCB0aGlzKTsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAbWV0aG9kIGZpbmRR
dWVyeQotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1
YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBxdWVyeQot
ICAgICAgICBAcGFyYW0ge0RTLkFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheX0gcmVjb3JkQXJy
YXkKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZp
bmRRdWVyeTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHF1ZXJ5LCBhcnJheSkgewotICAgICAgICB2
YXIgZml4dHVyZXMgPSB0aGlzLmZpeHR1cmVzRm9yVHlwZSh0eXBlKTsKLQotICAgICAgICBFbWJl
ci5hc3NlcnQoIlVuYWJsZSB0byBmaW5kIGZpeHR1cmVzIGZvciBtb2RlbCB0eXBlICIgKyB0eXBl
LnRvU3RyaW5nKCksIGZpeHR1cmVzKTsKLQotICAgICAgICBmaXh0dXJlcyA9IHRoaXMucXVlcnlG
aXh0dXJlcyhmaXh0dXJlcywgcXVlcnksIHR5cGUpOwotCi0gICAgICAgIGlmIChmaXh0dXJlcykg
ewotICAgICAgICAgIHJldHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHJldHVybiBmaXh0dXJlczsKLSAgICAgICAgICB9LCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgY3JlYXRlUmVjb3Jk
Ci0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xh
c3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0g
ICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBjcmVhdGVS
ZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKLSAgICAgICAgdmFyIGZpeHR1
cmUgPSB0aGlzLm1vY2tKU09OKHN0b3JlLCB0eXBlLCByZWNvcmQpOwotCi0gICAgICAgIHRoaXMu
dXBkYXRlRml4dHVyZXModHlwZSwgZml4dHVyZSk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuc2lt
dWxhdGVSZW1vdGVDYWxsKGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJldHVybiBmaXh0dXJlOwot
ICAgICAgICB9LCB0aGlzKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9k
IHVwZGF0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBA
cGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9k
ZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwot
ICAgICAgdXBkYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0gICAg
ICAgIHZhciBmaXh0dXJlID0gdGhpcy5tb2NrSlNPTihzdG9yZSwgdHlwZSwgcmVjb3JkKTsKLQot
ICAgICAgICB0aGlzLnVwZGF0ZUZpeHR1cmVzKHR5cGUsIGZpeHR1cmUpOwotCi0gICAgICAgIHJl
dHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigpIHsKLSAgICAgICAgICByZXR1
cm4gZml4dHVyZTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgQG1ldGhvZCBkZWxldGVSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3Rv
cmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBA
cGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlz
ZQotICAgICAgKi8KLSAgICAgIGRlbGV0ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHJl
Y29yZCkgewotICAgICAgICB2YXIgZml4dHVyZSA9IHRoaXMubW9ja0pTT04oc3RvcmUsIHR5cGUs
IHJlY29yZCk7Ci0KLSAgICAgICAgdGhpcy5kZWxldGVMb2FkZWRGaXh0dXJlKHR5cGUsIGZpeHR1
cmUpOwotCi0gICAgICAgIHJldHVybiB0aGlzLnNpbXVsYXRlUmVtb3RlQ2FsbChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAvLyBubyBwYXlsb2FkIGluIGEgZGVsZXRpb24KLSAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKgotICAgICAgICBAbWV0
aG9kIGRlbGV0ZUxvYWRlZEZpeHR1cmUKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFt
IHR5cGUKLSAgICAgICAgQHBhcmFtIHJlY29yZAotICAgICAgKi8KLSAgICAgIGRlbGV0ZUxvYWRl
ZEZpeHR1cmU6IGZ1bmN0aW9uKHR5cGUsIHJlY29yZCkgewotICAgICAgICB2YXIgZXhpc3RpbmdG
aXh0dXJlID0gdGhpcy5maW5kRXhpc3RpbmdGaXh0dXJlKHR5cGUsIHJlY29yZCk7Ci0KLSAgICAg
ICAgaWYoZXhpc3RpbmdGaXh0dXJlKSB7Ci0gICAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhPZih0
eXBlLkZJWFRVUkVTLCBleGlzdGluZ0ZpeHR1cmUpOwotICAgICAgICAgIHR5cGUuRklYVFVSRVMu
c3BsaWNlKGluZGV4LCAxKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgfSwKLQotICAgICAgLyoKLSAgICAgICAgQG1ldGhvZCBmaW5kRXhpc3RpbmdGaXh0dXJlCi0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB0eXBlCi0gICAgICAgIEBwYXJhbSByZWNv
cmQKLSAgICAgICovCi0gICAgICBmaW5kRXhpc3RpbmdGaXh0dXJlOiBmdW5jdGlvbih0eXBlLCBy
ZWNvcmQpIHsKLSAgICAgICAgdmFyIGZpeHR1cmVzID0gdGhpcy5maXh0dXJlc0ZvclR5cGUodHlw
ZSk7Ci0gICAgICAgIHZhciBpZCA9IGdldChyZWNvcmQsICdpZCcpOwotCi0gICAgICAgIHJldHVy
biB0aGlzLmZpbmRGaXh0dXJlQnlJZChmaXh0dXJlcywgaWQpOwotICAgICAgfSwKLQotICAgICAg
LyoKLSAgICAgICAgQG1ldGhvZCBmaW5kRml4dHVyZUJ5SWQKLSAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgQHBhcmFtIGZpeHR1cmVzCi0gICAgICAgIEBwYXJhbSBpZAotICAgICAgKi8KLSAgICAg
IGZpbmRGaXh0dXJlQnlJZDogZnVuY3Rpb24oZml4dHVyZXMsIGlkKSB7Ci0gICAgICAgIHJldHVy
biBFbWJlci5BKGZpeHR1cmVzKS5maW5kKGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICBpZignJytn
ZXQociwgJ2lkJykgPT09ICcnK2lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKgotICAgICAgICBAbWV0aG9kIHNpbXVsYXRl
UmVtb3RlQ2FsbAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0gY2FsbGJhY2sKLSAg
ICAgICAgQHBhcmFtIGNvbnRleHQKLSAgICAgICovCi0gICAgICBzaW11bGF0ZVJlbW90ZUNhbGw6
IGZ1bmN0aW9uKGNhbGxiYWNrLCBjb250ZXh0KSB7Ci0gICAgICAgIHZhciBhZGFwdGVyID0gdGhp
czsKLQotICAgICAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlKSB7Ci0gICAgICAgICAgaWYgKGdldChhZGFwdGVyLCAnc2ltdWxhdGVSZW1vdGVSZXNwb25z
ZScpKSB7Ci0gICAgICAgICAgICAvLyBTY2hlZHVsZSB3aXRoIHNldFRpbWVvdXQKLSAgICAgICAg
ICAgIEVtYmVyLnJ1bi5sYXRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmVzb2x2ZShj
YWxsYmFjay5jYWxsKGNvbnRleHQpKTsKLSAgICAgICAgICAgIH0sIGdldChhZGFwdGVyLCAnbGF0
ZW5jeScpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQXN5bmNocm9ub3Vz
LCBidXQgYXQgdGhlIG9mIHRoZSBydW5sb29wIHdpdGggemVybyBsYXRlbmN5Ci0gICAgICAgICAg
ICBFbWJlci5ydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCBudWxsLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgcmVzb2x2ZShjYWxsYmFjay5jYWxsKGNvbnRleHQpKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgIH0KLSAgICAgICAgfSwgIkRTOiBGaXh0dXJlQWRhcHRlciNzaW11bGF0ZVJl
bW90ZUNhbGwiKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0
Il0gPSBGaXh0dXJlQWRhcHRlcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL2FkYXB0
ZXJzL3Jlc3RfYWRhcHRlciIsIAotICBbIi4uL3N5c3RlbS9hZGFwdGVyIiwiZXhwb3J0cyJdLAot
ICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJp
Y3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZh
ciBBZGFwdGVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIGdldCA9IEVt
YmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0OwotICAgIHZhciBmb3JFYWNoID0gRW1iZXIuQXJyYXlQ
b2x5ZmlsbHMuZm9yRWFjaDsKLQotICAgIC8qKgotICAgICAgVGhlIFJFU1QgYWRhcHRlciBhbGxv
d3MgeW91ciBzdG9yZSB0byBjb21tdW5pY2F0ZSB3aXRoIGFuIEhUVFAgc2VydmVyIGJ5Ci0gICAg
ICB0cmFuc21pdHRpbmcgSlNPTiB2aWEgWEhSLiBNb3N0IEVtYmVyLmpzIGFwcHMgdGhhdCBjb25z
dW1lIGEgSlNPTiBBUEkKLSAgICAgIHNob3VsZCB1c2UgdGhlIFJFU1QgYWRhcHRlci4KLQotICAg
ICAgVGhpcyBhZGFwdGVyIGlzIGRlc2lnbmVkIGFyb3VuZCB0aGUgaWRlYSB0aGF0IHRoZSBKU09O
IGV4Y2hhbmdlZCB3aXRoCi0gICAgICB0aGUgc2VydmVyIHNob3VsZCBiZSBjb252ZW50aW9uYWwu
Ci0KLSAgICAgICMjIEpTT04gU3RydWN0dXJlCi0KLSAgICAgIFRoZSBSRVNUIGFkYXB0ZXIgZXhw
ZWN0cyB0aGUgSlNPTiByZXR1cm5lZCBmcm9tIHlvdXIgc2VydmVyIHRvIGZvbGxvdwotICAgICAg
dGhlc2UgY29udmVudGlvbnMuCi0KLSAgICAgICMjIyBPYmplY3QgUm9vdAotCi0gICAgICBUaGUg
SlNPTiBwYXlsb2FkIHNob3VsZCBiZSBhbiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgcmVjb3Jk
IGluc2lkZSBhCi0gICAgICByb290IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgaW4gcmVzcG9uc2Ug
dG8gYSBgR0VUYCByZXF1ZXN0IGZvcgotICAgICAgYC9wb3N0cy8xYCwgdGhlIEpTT04gc2hvdWxk
IGxvb2sgbGlrZSB0aGlzOgotCi0gICAgICBgYGBqcwotICAgICAgewotICAgICAgICAicG9zdCI6
IHsKLSAgICAgICAgICAidGl0bGUiOiAiSSdtIFJ1bm5pbmcgdG8gUmVmb3JtIHRoZSBXM0MncyBU
YWciLAotICAgICAgICAgICJhdXRob3IiOiAiWWVodWRhIEthdHoiCi0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIGBgYAotCi0gICAgICAjIyMgQ29udmVudGlvbmFsIE5hbWVzCi0KLSAgICAgIEF0
dHJpYnV0ZSBuYW1lcyBpbiB5b3VyIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgdGhlIGNhbWVsQ2Fz
ZWQgdmVyc2lvbnMgb2YKLSAgICAgIHRoZSBhdHRyaWJ1dGVzIGluIHlvdXIgRW1iZXIuanMgbW9k
ZWxzLgotCi0gICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBgUGVyc29uYCBtb2RlbDoK
LQotICAgICAgYGBganMKLSAgICAgIEFwcC5QZXJzb24gPSBEUy5Nb2RlbC5leHRlbmQoewotICAg
ICAgICBmaXJzdE5hbWU6IERTLmF0dHIoJ3N0cmluZycpLAotICAgICAgICBsYXN0TmFtZTogRFMu
YXR0cignc3RyaW5nJyksCi0gICAgICAgIG9jY3VwYXRpb246IERTLmF0dHIoJ3N0cmluZycpCi0g
ICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBUaGUgSlNPTiByZXR1cm5lZCBzaG91bGQgbG9v
ayBsaWtlIHRoaXM6Ci0KLSAgICAgIGBgYGpzCi0gICAgICB7Ci0gICAgICAgICJwZXJzb24iOiB7
Ci0gICAgICAgICAgImZpcnN0TmFtZSI6ICJCYXJhY2siLAotICAgICAgICAgICJsYXN0TmFtZSI6
ICJPYmFtYSIsCi0gICAgICAgICAgIm9jY3VwYXRpb24iOiAiUHJlc2lkZW50IgotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICBgYGAKLQotICAgICAgIyMgQ3VzdG9taXphdGlvbgotCi0gICAgICAj
IyMgRW5kcG9pbnQgcGF0aCBjdXN0b21pemF0aW9uCi0KLSAgICAgIEVuZHBvaW50IHBhdGhzIGNh
biBiZSBwcmVmaXhlZCB3aXRoIGEgYG5hbWVzcGFjZWAgYnkgc2V0dGluZyB0aGUgbmFtZXNwYWNl
Ci0gICAgICBwcm9wZXJ0eSBvbiB0aGUgYWRhcHRlcjoKLQotICAgICAgYGBganMKLSAgICAgIERT
LlJFU1RBZGFwdGVyLnJlb3Blbih7Ci0gICAgICAgIG5hbWVzcGFjZTogJ2FwaS8xJwotICAgICAg
fSk7Ci0gICAgICBgYGAKLSAgICAgIFJlcXVlc3RzIGZvciBgQXBwLlBlcnNvbmAgd291bGQgbm93
IHRhcmdldCBgL2FwaS8xL3Blb3BsZS8xYC4KLQotICAgICAgIyMjIEhvc3QgY3VzdG9taXphdGlv
bgotCi0gICAgICBBbiBhZGFwdGVyIGNhbiB0YXJnZXQgb3RoZXIgaG9zdHMgYnkgc2V0dGluZyB0
aGUgYGhvc3RgIHByb3BlcnR5LgotCi0gICAgICBgYGBqcwotICAgICAgRFMuUkVTVEFkYXB0ZXIu
cmVvcGVuKHsKLSAgICAgICAgaG9zdDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJwotICAgICAg
fSk7Ci0gICAgICBgYGAKLQotICAgICAgIyMjIEhlYWRlcnMgY3VzdG9taXphdGlvbgotCi0gICAg
ICBTb21lIEFQSXMgcmVxdWlyZSBIVFRQIGhlYWRlcnMsIGUuZy4gdG8gcHJvdmlkZSBhbiBBUEkg
a2V5LiBBcmJpdHJhcnkKLSAgICAgIGhlYWRlcnMgY2FuIGJlIHNldCBhcyBrZXkvdmFsdWUgcGFp
cnMgb24gdGhlIGBSRVNUQWRhcHRlcmAncyBgaGVhZGVyc2AKLSAgICAgIG9iamVjdCBhbmQgRW1i
ZXIgRGF0YSB3aWxsIHNlbmQgdGhlbSBhbG9uZyB3aXRoIGVhY2ggYWpheCByZXF1ZXN0LgotCi0K
LSAgICAgIGBgYGpzCi0gICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMuUkVTVEFkYXB0
ZXIuZXh0ZW5kKHsKLSAgICAgICAgaGVhZGVyczogewotICAgICAgICAgICJBUElfS0VZIjogInNl
Y3JldCBrZXkiLAotICAgICAgICAgICJBTk9USEVSX0hFQURFUiI6ICJTb21lIGhlYWRlciB2YWx1
ZSIKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgYGhlYWRlcnNgIGNh
biBhbHNvIGJlIHVzZWQgYXMgYSBjb21wdXRlZCBwcm9wZXJ0eSB0byBzdXBwb3J0IGR5bmFtaWMK
LSAgICAgIGhlYWRlcnMuIEluIHRoZSBleGFtcGxlIGJlbG93LCB0aGUgYHNlc3Npb25gIG9iamVj
dCBoYXMgYmVlbgotICAgICAgaW5qZWN0ZWQgaW50byBhbiBhZGFwdGVyIGJ5IEVtYmVyJ3MgY29u
dGFpbmVyLgotCi0gICAgICBgYGBqcwotICAgICAgQXBwLkFwcGxpY2F0aW9uQWRhcHRlciA9IERT
LlJFU1RBZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgIGhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAiQVBJX0tFWSI6IHRoaXMuZ2V0KCJzZXNzaW9u
LmF1dGhUb2tlbiIpLAotICAgICAgICAgICAgIkFOT1RIRVJfSEVBREVSIjogIlNvbWUgaGVhZGVy
IHZhbHVlIgotICAgICAgICAgIH07Ci0gICAgICAgIH0ucHJvcGVydHkoInNlc3Npb24uYXV0aFRv
a2VuIikKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEluIHNvbWUgY2FzZXMsIHlvdXIg
ZHluYW1pYyBoZWFkZXJzIG1heSByZXF1aXJlIGRhdGEgZnJvbSBzb21lCi0gICAgICBvYmplY3Qg
b3V0c2lkZSBvZiBFbWJlcidzIG9ic2VydmVyIHN5c3RlbSAoZm9yIGV4YW1wbGUKLSAgICAgIGBk
b2N1bWVudC5jb29raWVgKS4gWW91IGNhbiB1c2UgdGhlCi0gICAgICBbdm9sYXRpbGVdKC9hcGkv
Y2xhc3Nlcy9FbWJlci5Db21wdXRlZFByb3BlcnR5Lmh0bWwjbWV0aG9kX3ZvbGF0aWxlKQotICAg
ICAgZnVuY3Rpb24gdG8gc2V0IHRoZSBwcm9wZXJ0eSBpbnRvIGEgbm9uLWNoYWNoZWQgbW9kZSBj
YXVzaW5nIHRoZSBoZWFkZXJzIHRvCi0gICAgICBiZSByZWNvbXB1dGVkIHdpdGggZXZlcnkgcmVx
dWVzdC4KLQotICAgICAgYGBganMKLSAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5S
RVNUQWRhcHRlci5leHRlbmQoewotICAgICAgICBoZWFkZXJzOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgIkFQSV9LRVkiOiBFbWJlci5nZXQoZG9jdW1lbnQu
Y29va2llLm1hdGNoKC9hcGlLZXlcPShbXjtdKikvKSwgIjEiKSwKLSAgICAgICAgICAgICJBTk9U
SEVSX0hFQURFUiI6ICJTb21lIGhlYWRlciB2YWx1ZSIKLSAgICAgICAgICB9OwotICAgICAgICB9
LnByb3BlcnR5KCkudm9sYXRpbGUoKTsKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEBj
bGFzcyBSRVNUQWRhcHRlcgotICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICBAbmFtZXNwYWNlIERT
Ci0gICAgICBAZXh0ZW5kcyBEUy5BZGFwdGVyCi0gICAgKi8KLSAgICB2YXIgUkVTVEFkYXB0ZXIg
PSBBZGFwdGVyLmV4dGVuZCh7Ci0gICAgICBkZWZhdWx0U2VyaWFsaXplcjogJy1yZXN0JywKLSAg
ICAgIC8qKgotICAgICAgICBFbmRwb2ludCBwYXRocyBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIGBu
YW1lc3BhY2VgIGJ5IHNldHRpbmcgdGhlIG5hbWVzcGFjZQotICAgICAgICBwcm9wZXJ0eSBvbiB0
aGUgYWRhcHRlcjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIERTLlJFU1RBZGFw
dGVyLnJlb3Blbih7Ci0gICAgICAgICAgbmFtZXNwYWNlOiAnYXBpLzEnCi0gICAgICAgIH0pOwot
ICAgICAgICBgYGAKLQotICAgICAgICBSZXF1ZXN0cyBmb3IgYEFwcC5Qb3N0YCB3b3VsZCBub3cg
dGFyZ2V0IGAvYXBpLzEvcG9zdC9gLgotCi0gICAgICAgIEBwcm9wZXJ0eSBuYW1lc3BhY2UKLSAg
ICAgICAgQHR5cGUge1N0cmluZ30KLSAgICAgICovCi0KLSAgICAgIC8qKgotICAgICAgICBBbiBh
ZGFwdGVyIGNhbiB0YXJnZXQgb3RoZXIgaG9zdHMgYnkgc2V0dGluZyB0aGUgYGhvc3RgIHByb3Bl
cnR5LgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgRFMuUkVTVEFkYXB0ZXIucmVv
cGVuKHsKLSAgICAgICAgICBob3N0OiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nCi0gICAgICAg
IH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBSZXF1ZXN0cyBmb3IgYEFwcC5Qb3N0YCB3b3Vs
ZCBub3cgdGFyZ2V0IGBodHRwczovL2FwaS5leGFtcGxlLmNvbS9wb3N0L2AuCi0KLSAgICAgICAg
QHByb3BlcnR5IGhvc3QKLSAgICAgICAgQHR5cGUge1N0cmluZ30KLSAgICAgICovCi0KLSAgICAg
IC8qKgotICAgICAgICBTb21lIEFQSXMgcmVxdWlyZSBIVFRQIGhlYWRlcnMsIGUuZy4gdG8gcHJv
dmlkZSBhbiBBUEkKLSAgICAgICAga2V5LiBBcmJpdHJhcnkgaGVhZGVycyBjYW4gYmUgc2V0IGFz
IGtleS92YWx1ZSBwYWlycyBvbiB0aGUKLSAgICAgICAgYFJFU1RBZGFwdGVyYCdzIGBoZWFkZXJz
YCBvYmplY3QgYW5kIEVtYmVyIERhdGEgd2lsbCBzZW5kIHRoZW0KLSAgICAgICAgYWxvbmcgd2l0
aCBlYWNoIGFqYXggcmVxdWVzdC4gRm9yIGR5bmFtaWMgaGVhZGVycyBzZWUgW2hlYWRlcnMKLSAg
ICAgICAgY3VzdG9taXphdGlvbl0oL2FwaS9kYXRhL2NsYXNzZXMvRFMuUkVTVEFkYXB0ZXIuaHRt
bCN0b2NfaGVhZGVycy1jdXN0b21pemF0aW9uKS4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5SRVNUQWRhcHRlci5leHRlbmQoewot
ICAgICAgICAgIGhlYWRlcnM6IHsKLSAgICAgICAgICAgICJBUElfS0VZIjogInNlY3JldCBrZXki
LAotICAgICAgICAgICAgIkFOT1RIRVJfSEVBREVSIjogIlNvbWUgaGVhZGVyIHZhbHVlIgotICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBo
ZWFkZXJzCi0gICAgICAgIEB0eXBlIHtPYmplY3R9Ci0gICAgICAqLwotCi0gICAgICAvKioKLSAg
ICAgICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSBpbiBvcmRlciB0byBmZXRjaCB0aGUgSlNPTiBmb3Ig
YSBnaXZlbgotICAgICAgICB0eXBlIGFuZCBJRC4KLQotICAgICAgICBUaGUgYGZpbmRgIG1ldGhv
ZCBtYWtlcyBhbiBBamF4IHJlcXVlc3QgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYCwg
YW5kIHJldHVybnMgYQotICAgICAgICBwcm9taXNlIGZvciB0aGUgcmVzdWx0aW5nIHBheWxvYWQu
Ci0KLSAgICAgICAgVGhpcyBtZXRob2QgcGVyZm9ybXMgYW4gSFRUUCBgR0VUYCByZXF1ZXN0IHdp
dGggdGhlIGlkIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZy4KLQotICAgICAg
ICBAbWV0aG9kIGZpbmQKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAg
QHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gaWQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAg
IGZpbmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZCkgewotICAgICAgICByZXR1cm4gdGhpcy5h
amF4KHRoaXMuYnVpbGRVUkwodHlwZS50eXBlS2V5LCBpZCksICdHRVQnKTsKLSAgICAgIH0sCi0K
LSAgICAgIC8qKgotICAgICAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIGluIG9yZGVyIHRvIGZldGNo
IGEgSlNPTiBhcnJheSBmb3IgYWxsCi0gICAgICAgIG9mIHRoZSByZWNvcmRzIGZvciBhIGdpdmVu
IHR5cGUuCi0KLSAgICAgICAgVGhlIGBmaW5kQWxsYCBtZXRob2QgbWFrZXMgYW4gQWpheCAoSFRU
UCBHRVQpIHJlcXVlc3QgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYCwgYW5kIHJldHVy
bnMgYQotICAgICAgICBwcm9taXNlIGZvciB0aGUgcmVzdWx0aW5nIHBheWxvYWQuCi0KLSAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgQG1ldGhvZCBmaW5kQWxsCi0gICAgICAgIEBwYXJhbSB7RFMu
U3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUK
LSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHNpbmNlVG9rZW4KLSAgICAgICAgQHJldHVybiB7UHJv
bWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRBbGw6IGZ1bmN0aW9uKHN0b3JlLCB0
eXBlLCBzaW5jZVRva2VuKSB7Ci0gICAgICAgIHZhciBxdWVyeTsKLQotICAgICAgICBpZiAoc2lu
Y2VUb2tlbikgewotICAgICAgICAgIHF1ZXJ5ID0geyBzaW5jZTogc2luY2VUb2tlbiB9OwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUudHlw
ZUtleSksICdHRVQnLCB7IGRhdGE6IHF1ZXJ5IH0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIENhbGxlZCBieSB0aGUgc3RvcmUgaW4gb3JkZXIgdG8gZmV0Y2ggYSBKU09OIGFycmF5
IGZvcgotICAgICAgICB0aGUgcmVjb3JkcyB0aGF0IG1hdGNoIGEgcGFydGljdWxhciBxdWVyeS4K
LQotICAgICAgICBUaGUgYGZpbmRRdWVyeWAgbWV0aG9kIG1ha2VzIGFuIEFqYXggKEhUVFAgR0VU
KSByZXF1ZXN0IHRvIGEgVVJMIGNvbXB1dGVkIGJ5IGBidWlsZFVSTGAsIGFuZCByZXR1cm5zIGEK
LSAgICAgICAgcHJvbWlzZSBmb3IgdGhlIHJlc3VsdGluZyBwYXlsb2FkLgotCi0gICAgICAgIFRo
ZSBgcXVlcnlgIGFyZ3VtZW50IGlzIGEgc2ltcGxlIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgd2ls
bCBiZSBwYXNzZWQgZGlyZWN0bHkKLSAgICAgICAgdG8gdGhlIHNlcnZlciBhcyBwYXJhbWV0ZXJz
LgotCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBtZXRob2QgZmluZFF1ZXJ5Ci0gICAgICAg
IEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMu
TW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHF1ZXJ5Ci0gICAgICAgIEByZXR1
cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kUXVlcnk6IGZ1bmN0aW9u
KHN0b3JlLCB0eXBlLCBxdWVyeSkgewotICAgICAgICByZXR1cm4gdGhpcy5hamF4KHRoaXMuYnVp
bGRVUkwodHlwZS50eXBlS2V5KSwgJ0dFVCcsIHsgZGF0YTogcXVlcnkgfSk7Ci0gICAgICB9LAot
Ci0gICAgICAvKioKLSAgICAgICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSBpbiBvcmRlciB0byBmZXRj
aCBhIEpTT04gYXJyYXkgZm9yCi0gICAgICAgIHRoZSB1bmxvYWRlZCByZWNvcmRzIGluIGEgaGFz
LW1hbnkgcmVsYXRpb25zaGlwIHRoYXQgd2VyZSBvcmlnaW5hbGx5Ci0gICAgICAgIHNwZWNpZmll
ZCBhcyBJRHMuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBvcmlnaW5hbCBwYXlsb2Fk
IGxvb2tzIGxpa2U6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJpZCI6
IDEsCi0gICAgICAgICAgInRpdGxlIjogIlJhaWxzIGlzIG9tYWthc2UiLAotICAgICAgICAgICJj
b21tZW50cyI6IFsgMSwgMiwgMyBdCi0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAg
VGhlIElEcyB3aWxsIGJlIHBhc3NlZCBhcyBhIFVSTC1lbmNvZGVkIEFycmF5IG9mIElEcywgaW4g
dGhpcyBmb3JtOgotCi0gICAgICAgIGBgYAotICAgICAgICBpZHNbXT0xJmlkc1tdPTImaWRzW109
MwotICAgICAgICBgYGAKLQotICAgICAgICBNYW55IHNlcnZlcnMsIHN1Y2ggYXMgUmFpbHMgYW5k
IFBIUCwgd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdGhpcyBVUkwtZW5jb2RlZCBhcnJheQot
ICAgICAgICBpbnRvIGFuIEFycmF5IGZvciB5b3Ugb24gdGhlIHNlcnZlci1zaWRlLiBJZiB5b3Ug
d2FudCB0byBlbmNvZGUgdGhlCi0gICAgICAgIElEcywgZGlmZmVyZW50bHksIGp1c3Qgb3ZlcnJp
ZGUgdGhpcyAob25lLWxpbmUpIG1ldGhvZC4KLQotICAgICAgICBUaGUgYGZpbmRNYW55YCBtZXRo
b2QgbWFrZXMgYW4gQWpheCAoSFRUUCBHRVQpIHJlcXVlc3QgdG8gYSBVUkwgY29tcHV0ZWQgYnkg
YGJ1aWxkVVJMYCwgYW5kIHJldHVybnMgYQotICAgICAgICBwcm9taXNlIGZvciB0aGUgcmVzdWx0
aW5nIHBheWxvYWQuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kTWFueQotICAgICAgICBAcGFyYW0g
e0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0
eXBlCi0gICAgICAgIEBwYXJhbSB7QXJyYXl9IGlkcwotICAgICAgICBAcmV0dXJuIHtQcm9taXNl
fSBwcm9taXNlCi0gICAgICAqLwotICAgICAgZmluZE1hbnk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBl
LCBpZHMpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLmJ1aWxkVVJMKHR5cGUudHlw
ZUtleSksICdHRVQnLCB7IGRhdGE6IHsgaWRzOiBpZHMgfSB9KTsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIGluIG9yZGVyIHRvIGZldGNoIGEgSlNP
TiBhcnJheSBmb3IKLSAgICAgICAgdGhlIHVubG9hZGVkIHJlY29yZHMgaW4gYSBoYXMtbWFueSBy
ZWxhdGlvbnNoaXAgdGhhdCB3ZXJlIG9yaWdpbmFsbHkKLSAgICAgICAgc3BlY2lmaWVkIGFzIGEg
VVJMIChpbnNpZGUgb2YgYGxpbmtzYCkuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIg
b3JpZ2luYWwgcGF5bG9hZCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgICAgICAgYGBganMKLSAgICAg
ICAgewotICAgICAgICAgICJwb3N0IjogewotICAgICAgICAgICAgImlkIjogMSwKLSAgICAgICAg
ICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAgICJsaW5rcyI6IHsg
ImNvbW1lbnRzIjogIi9wb3N0cy8xL2NvbW1lbnRzIiB9Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGgg
dGhlIHBhcmVudCByZWNvcmQgYW5kIGAvcG9zdHMvMS9jb21tZW50c2AuCi0KLSAgICAgICAgVGhl
IGBmaW5kSGFzTWFueWAgbWV0aG9kIHdpbGwgbWFrZSBhbiBBamF4IChIVFRQIEdFVCkgcmVxdWVz
dCB0byB0aGUgb3JpZ2luYWxseSBzcGVjaWZpZWQgVVJMLgotICAgICAgICBJZiB0aGUgVVJMIGlz
IGhvc3QtcmVsYXRpdmUgKHN0YXJ0aW5nIHdpdGggYSBzaW5nbGUgc2xhc2gpLCB0aGUKLSAgICAg
ICAgcmVxdWVzdCB3aWxsIHVzZSB0aGUgaG9zdCBzcGVjaWZpZWQgb24gdGhlIGFkYXB0ZXIgKGlm
IGFueSkuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kSGFzTWFueQotICAgICAgICBAcGFyYW0ge0RT
LlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHVybAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0g
ICAgICAqLwotICAgICAgZmluZEhhc01hbnk6IGZ1bmN0aW9uKHN0b3JlLCByZWNvcmQsIHVybCkg
ewotICAgICAgICB2YXIgaG9zdCA9IGdldCh0aGlzLCAnaG9zdCcpLAotICAgICAgICAgICAgaWQg
ICA9IGdldChyZWNvcmQsICdpZCcpLAotICAgICAgICAgICAgdHlwZSA9IHJlY29yZC5jb25zdHJ1
Y3Rvci50eXBlS2V5OwotCi0gICAgICAgIGlmIChob3N0ICYmIHVybC5jaGFyQXQoMCkgPT09ICcv
JyAmJiB1cmwuY2hhckF0KDEpICE9PSAnLycpIHsKLSAgICAgICAgICB1cmwgPSBob3N0ICsgdXJs
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuYWpheCh0aGlzLnVybFByZWZpeCh1
cmwsIHRoaXMuYnVpbGRVUkwodHlwZSwgaWQpKSwgJ0dFVCcpOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIENhbGxlZCBieSB0aGUgc3RvcmUgaW4gb3JkZXIgdG8gZmV0Y2ggYSBKU09O
IGFycmF5IGZvcgotICAgICAgICB0aGUgdW5sb2FkZWQgcmVjb3JkcyBpbiBhIGJlbG9uZ3MtdG8g
cmVsYXRpb25zaGlwIHRoYXQgd2VyZSBvcmlnaW5hbGx5Ci0gICAgICAgIHNwZWNpZmllZCBhcyBh
IFVSTCAoaW5zaWRlIG9mIGBsaW5rc2ApLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Vy
IG9yaWdpbmFsIHBheWxvYWQgbG9va3MgbGlrZSB0aGlzOgotCi0gICAgICAgIGBgYGpzCi0gICAg
ICAgIHsKLSAgICAgICAgICAicGVyc29uIjogewotICAgICAgICAgICAgImlkIjogMSwKLSAgICAg
ICAgICAgICJuYW1lIjogIlRvbSBEYWxlIiwKLSAgICAgICAgICAgICJsaW5rcyI6IHsgImdyb3Vw
IjogIi9wZW9wbGUvMS9ncm91cCIgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBg
YGAKLQotICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBwYXJlbnQg
cmVjb3JkIGFuZCBgL3Blb3BsZS8xL2dyb3VwYC4KLQotICAgICAgICBUaGUgYGZpbmRCZWxvbmdz
VG9gIG1ldGhvZCB3aWxsIG1ha2UgYW4gQWpheCAoSFRUUCBHRVQpIHJlcXVlc3QgdG8gdGhlIG9y
aWdpbmFsbHkgc3BlY2lmaWVkIFVSTC4KLQotICAgICAgICBAbWV0aG9kIGZpbmRCZWxvbmdzVG8K
LSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2Rl
bH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwKLSAgICAgICAgQHJldHVybiB7
UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRCZWxvbmdzVG86IGZ1bmN0aW9u
KHN0b3JlLCByZWNvcmQsIHVybCkgewotICAgICAgICB2YXIgaWQgICA9IGdldChyZWNvcmQsICdp
ZCcpLAotICAgICAgICAgICAgdHlwZSA9IHJlY29yZC5jb25zdHJ1Y3Rvci50eXBlS2V5OwotCi0g
ICAgICAgIHJldHVybiB0aGlzLmFqYXgodGhpcy51cmxQcmVmaXgodXJsLCB0aGlzLmJ1aWxkVVJM
KHR5cGUsIGlkKSksICdHRVQnKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDYWxs
ZWQgYnkgdGhlIHN0b3JlIHdoZW4gYSBuZXdseSBjcmVhdGVkIHJlY29yZCBpcwotICAgICAgICBz
YXZlZCB2aWEgdGhlIGBzYXZlYCBtZXRob2Qgb24gYSBtb2RlbCByZWNvcmQgaW5zdGFuY2UuCi0K
LSAgICAgICAgVGhlIGBjcmVhdGVSZWNvcmRgIG1ldGhvZCBzZXJpYWxpemVzIHRoZSByZWNvcmQg
YW5kIG1ha2VzIGFuIEFqYXggKEhUVFAgUE9TVCkgcmVxdWVzdAotICAgICAgICB0byBhIFVSTCBj
b21wdXRlZCBieSBgYnVpbGRVUkxgLgotCi0gICAgICAgIFNlZSBgc2VyaWFsaXplYCBmb3IgaW5m
b3JtYXRpb24gb24gaG93IHRvIGN1c3RvbWl6ZSB0aGUgc2VyaWFsaXplZCBmb3JtCi0gICAgICAg
IG9mIGEgcmVjb3JkLgotCi0gICAgICAgIEBtZXRob2QgY3JlYXRlUmVjb3JkCi0gICAgICAgIEBw
YXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9k
ZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEByZXR1
cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBjcmVhdGVSZWNvcmQ6IGZ1bmN0
aW9uKHN0b3JlLCB0eXBlLCByZWNvcmQpIHsKLSAgICAgICAgdmFyIGRhdGEgPSB7fTsKLSAgICAg
ICAgdmFyIHNlcmlhbGl6ZXIgPSBzdG9yZS5zZXJpYWxpemVyRm9yKHR5cGUudHlwZUtleSk7Ci0K
LSAgICAgICAgc2VyaWFsaXplci5zZXJpYWxpemVJbnRvSGFzaChkYXRhLCB0eXBlLCByZWNvcmQs
IHsgaW5jbHVkZUlkOiB0cnVlIH0pOwotCi0gICAgICAgIHJldHVybiB0aGlzLmFqYXgodGhpcy5i
dWlsZFVSTCh0eXBlLnR5cGVLZXkpLCAiUE9TVCIsIHsgZGF0YTogZGF0YSB9KTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgICBDYWxsZWQgYnkgdGhlIHN0b3JlIHdoZW4gYW4gZXhpc3Rp
bmcgcmVjb3JkIGlzIHNhdmVkCi0gICAgICAgIHZpYSB0aGUgYHNhdmVgIG1ldGhvZCBvbiBhIG1v
ZGVsIHJlY29yZCBpbnN0YW5jZS4KLQotICAgICAgICBUaGUgYHVwZGF0ZVJlY29yZGAgbWV0aG9k
IHNlcmlhbGl6ZXMgdGhlIHJlY29yZCBhbmQgbWFrZXMgYW4gQWpheCAoSFRUUCBQVVQpIHJlcXVl
c3QKLSAgICAgICAgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYC4KLQotICAgICAgICBT
ZWUgYHNlcmlhbGl6ZWAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjdXN0b21pemUgdGhlIHNl
cmlhbGl6ZWQgZm9ybQotICAgICAgICBvZiBhIHJlY29yZC4KLQotICAgICAgICBAbWV0aG9kIHVw
ZGF0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9
IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgdXBkYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0gICAgICAg
IHZhciBkYXRhID0ge307Ci0gICAgICAgIHZhciBzZXJpYWxpemVyID0gc3RvcmUuc2VyaWFsaXpl
ckZvcih0eXBlLnR5cGVLZXkpOwotCi0gICAgICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplSW50b0hh
c2goZGF0YSwgdHlwZSwgcmVjb3JkKTsKLQotICAgICAgICB2YXIgaWQgPSBnZXQocmVjb3JkLCAn
aWQnKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5hamF4KHRoaXMuYnVpbGRVUkwodHlwZS50eXBl
S2V5LCBpZCksICJQVVQiLCB7IGRhdGE6IGRhdGEgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgQ2FsbGVkIGJ5IHRoZSBzdG9yZSB3aGVuIGEgcmVjb3JkIGlzIGRlbGV0ZWQuCi0K
LSAgICAgICAgVGhlIGBkZWxldGVSZWNvcmRgIG1ldGhvZCAgbWFrZXMgYW4gQWpheCAoSFRUUCBE
RUxFVEUpIHJlcXVlc3QgdG8gYSBVUkwgY29tcHV0ZWQgYnkgYGJ1aWxkVVJMYC4KLQotICAgICAg
ICBAbWV0aG9kIGRlbGV0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQot
ICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJh
bSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0g
ICAgICAqLwotICAgICAgZGVsZXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3Jk
KSB7Ci0gICAgICAgIHZhciBpZCA9IGdldChyZWNvcmQsICdpZCcpOwotCi0gICAgICAgIHJldHVy
biB0aGlzLmFqYXgodGhpcy5idWlsZFVSTCh0eXBlLnR5cGVLZXksIGlkKSwgIkRFTEVURSIpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEJ1aWxkcyBhIFVSTCBmb3IgYSBnaXZlbiB0
eXBlIGFuZCBvcHRpb25hbCBJRC4KLQotICAgICAgICBCeSBkZWZhdWx0LCBpdCBwbHVyYWxpemVz
IHRoZSB0eXBlJ3MgbmFtZSAoZm9yIGV4YW1wbGUsICdwb3N0JwotICAgICAgICBiZWNvbWVzICdw
b3N0cycgYW5kICdwZXJzb24nIGJlY29tZXMgJ3Blb3BsZScpLiBUbyBvdmVycmlkZSB0aGUKLSAg
ICAgICAgcGx1cmFsaXphdGlvbiBzZWUgW3BhdGhGb3JUeXBlXSgjbWV0aG9kX3BhdGhGb3JUeXBl
KS4KLQotICAgICAgICBJZiBhbiBJRCBpcyBzcGVjaWZpZWQsIGl0IGFkZHMgdGhlIElEIHRvIHRo
ZSBwYXRoIGdlbmVyYXRlZAotICAgICAgICBmb3IgdGhlIHR5cGUsIHNlcGFyYXRlZCBieSBhIGAv
YC4KLQotICAgICAgICBAbWV0aG9kIGJ1aWxkVVJMCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0
eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBpZAotICAgICAgICBAcmV0dXJuIHtTdHJpbmd9
IHVybAotICAgICAgKi8KLSAgICAgIGJ1aWxkVVJMOiBmdW5jdGlvbih0eXBlLCBpZCkgewotICAg
ICAgICB2YXIgdXJsID0gW10sCi0gICAgICAgICAgICBob3N0ID0gZ2V0KHRoaXMsICdob3N0Jyks
Ci0gICAgICAgICAgICBwcmVmaXggPSB0aGlzLnVybFByZWZpeCgpOwotCi0gICAgICAgIGlmICh0
eXBlKSB7IHVybC5wdXNoKHRoaXMucGF0aEZvclR5cGUodHlwZSkpOyB9Ci0gICAgICAgIGlmIChp
ZCkgeyB1cmwucHVzaChpZCk7IH0KLQotICAgICAgICBpZiAocHJlZml4KSB7IHVybC51bnNoaWZ0
KHByZWZpeCk7IH0KLQotICAgICAgICB1cmwgPSB1cmwuam9pbignLycpOwotICAgICAgICBpZiAo
IWhvc3QgJiYgdXJsKSB7IHVybCA9ICcvJyArIHVybDsgfQotCi0gICAgICAgIHJldHVybiB1cmw7
Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB1cmxQcmVmaXgKLSAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IHBhcmVudFVybAotICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHVybFByZWZpeAot
ICAgICAgKi8KLSAgICAgIHVybFByZWZpeDogZnVuY3Rpb24ocGF0aCwgcGFyZW50VVJMKSB7Ci0g
ICAgICAgIHZhciBob3N0ID0gZ2V0KHRoaXMsICdob3N0JyksCi0gICAgICAgICAgICBuYW1lc3Bh
Y2UgPSBnZXQodGhpcywgJ25hbWVzcGFjZScpLAotICAgICAgICAgICAgdXJsID0gW107Ci0KLSAg
ICAgICAgaWYgKHBhdGgpIHsKLSAgICAgICAgICAvLyBBYnNvbHV0ZSBwYXRoCi0gICAgICAgICAg
aWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHsKLSAgICAgICAgICAgIGlmIChob3N0KSB7Ci0g
ICAgICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpOwotICAgICAgICAgICAgICB1cmwucHVz
aChob3N0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAvLyBSZWxhdGl2ZSBwYXRoCi0gICAg
ICAgICAgfSBlbHNlIGlmICghL15odHRwKHMpPzpcL1wvLy50ZXN0KHBhdGgpKSB7Ci0gICAgICAg
ICAgICB1cmwucHVzaChwYXJlbnRVUkwpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBpZiAoaG9zdCkgeyB1cmwucHVzaChob3N0KTsgfQotICAgICAgICAgIGlmIChu
YW1lc3BhY2UpIHsgdXJsLnB1c2gobmFtZXNwYWNlKTsgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHBhdGgpIHsKLSAgICAgICAgICB1cmwucHVzaChwYXRoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiB1cmwuam9pbignLycpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAg
IERldGVybWluZXMgdGhlIHBhdGhuYW1lIGZvciBhIGdpdmVuIHR5cGUuCi0KLSAgICAgICAgQnkg
ZGVmYXVsdCwgaXQgcGx1cmFsaXplcyB0aGUgdHlwZSdzIG5hbWUgKGZvciBleGFtcGxlLAotICAg
ICAgICAncG9zdCcgYmVjb21lcyAncG9zdHMnIGFuZCAncGVyc29uJyBiZWNvbWVzICdwZW9wbGUn
KS4KLQotICAgICAgICAjIyMgUGF0aG5hbWUgY3VzdG9taXphdGlvbgotCi0gICAgICAgIEZvciBl
eGFtcGxlIGlmIHlvdSBoYXZlIGFuIG9iamVjdCBMaW5lSXRlbSB3aXRoIGFuCi0gICAgICAgIGVu
ZHBvaW50IG9mICIvbGluZV9pdGVtcy8iLgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5B
cHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgICAgICAgIHBh
dGhGb3JUeXBlOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAgICAgICAgICB2YXIgZGVjYW1lbGl6ZWQg
PSBFbWJlci5TdHJpbmcuZGVjYW1lbGl6ZSh0eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBFbWJl
ci5TdHJpbmcucGx1cmFsaXplKGRlY2FtZWxpemVkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0p
OwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHBhdGhGb3JUeXBlCi0gICAgICAgIEBw
YXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgICAgIEByZXR1cm4ge1N0cmluZ30gcGF0aAotICAgICAg
KiovCi0gICAgICBwYXRoRm9yVHlwZTogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2YXIgY2Ft
ZWxpemVkID0gRW1iZXIuU3RyaW5nLmNhbWVsaXplKHR5cGUpOwotICAgICAgICByZXR1cm4gRW1i
ZXIuU3RyaW5nLnBsdXJhbGl6ZShjYW1lbGl6ZWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIFRha2VzIGFuIGFqYXggcmVzcG9uc2UsIGFuZCByZXR1cm5zIGEgcmVsZXZhbnQgZXJy
b3IuCi0KLSAgICAgICAgUmV0dXJuaW5nIGEgYERTLkludmFsaWRFcnJvcmAgZnJvbSB0aGlzIG1l
dGhvZCB3aWxsIGNhdXNlIHRoZQotICAgICAgICByZWNvcmQgdG8gdHJhbnNpdGlvbiBpbnRvIHRo
ZSBgaW52YWxpZGAgc3RhdGUgYW5kIG1ha2UgdGhlCi0gICAgICAgIGBlcnJvcnNgIG9iamVjdCBh
dmFpbGFibGUgb24gdGhlIHJlY29yZC4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
IEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgICAg
ICAgIGFqYXhFcnJvcjogZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAgICAgIHZhciBlcnJvciA9
IHRoaXMuX3N1cGVyKGpxWEhSKTsKLQotICAgICAgICAgICAgaWYgKGpxWEhSICYmIGpxWEhSLnN0
YXR1cyA9PT0gNDIyKSB7Ci0gICAgICAgICAgICAgIHZhciBqc29uRXJyb3JzID0gRW1iZXIuJC5w
YXJzZUpTT04oanFYSFIucmVzcG9uc2VUZXh0KVsiZXJyb3JzIl07Ci0KLSAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBEUy5JbnZhbGlkRXJyb3IoanNvbkVycm9ycyk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgTm90ZTogQXMgYSBjb3Jy
ZWN0bmVzcyBvcHRpbWl6YXRpb24sIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mCi0gICAg
ICAgIHRoZSBgYWpheEVycm9yYCBtZXRob2Qgc3RyaXBzIG91dCB0aGUgYHRoZW5gIG1ldGhvZCBm
cm9tIGpxdWVyeSdzCi0gICAgICAgIGFqYXggcmVzcG9uc2UgKGpxWEhSKS4gVGhpcyBpcyBpbXBv
cnRhbnQgYmVjYXVzZSB0aGUganFYSFIncwotICAgICAgICBgdGhlbmAgbWV0aG9kIGZ1bGZpbGxz
IHRoZSBwcm9taXNlIHdpdGggaXRzZWxmIHJlc3VsdGluZyBpbiBhCi0gICAgICAgIGNpcmN1bGFy
ICJ0aGVuYWJsZSIgY2hhaW4gd2hpY2ggbWF5IGNhdXNlIHByb2JsZW1zIGZvciBzb21lCi0gICAg
ICAgIHByb21pc2UgbGlicmFyaWVzLgotCi0gICAgICAgIEBtZXRob2QgYWpheEVycm9yCi0gICAg
ICAgIEBwYXJhbSAge09iamVjdH0ganFYSFIKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBqcVhI
UgotICAgICAgKi8KLSAgICAgIGFqYXhFcnJvcjogZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAg
aWYgKGpxWEhSICYmIHR5cGVvZiBqcVhIUiA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgICBqcVhI
Ui50aGVuID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBqcVhIUjsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUYWtlcyBhIFVSTCwgYW4gSFRUUCBtZXRob2QgYW5k
IGEgaGFzaCBvZiBkYXRhLCBhbmQgbWFrZXMgYW4KLSAgICAgICAgSFRUUCByZXF1ZXN0LgotCi0g
ICAgICAgIFdoZW4gdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIGEgcGF5bG9hZCwgRW1iZXIgRGF0
YSB3aWxsIGNhbGwgaW50byBgZXh0cmFjdFNpbmdsZWAKLSAgICAgICAgb3IgYGV4dHJhY3RBcnJh
eWAgKGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcmlnaW5hbCBxdWVyeSB3YXMgZm9yIG9uZSBy
ZWNvcmQgb3IKLSAgICAgICAgbWFueSByZWNvcmRzKS4KLQotICAgICAgICBCeSBkZWZhdWx0LCBg
YWpheGAgbWV0aG9kIGhhcyB0aGUgZm9sbG93aW5nIGJlaGF2aW9yOgotCi0gICAgICAgICogSXQg
c2V0cyB0aGUgcmVzcG9uc2UgYGRhdGFUeXBlYCB0byBgImpzb24iYAotICAgICAgICAqIElmIHRo
ZSBIVFRQIG1ldGhvZCBpcyBub3QgYCJHRVQiYCwgaXQgc2V0cyB0aGUgYENvbnRlbnQtVHlwZWAg
dG8gYmUKLSAgICAgICAgICBgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOGAKLSAgICAg
ICAgKiBJZiB0aGUgSFRUUCBtZXRob2QgaXMgbm90IGAiR0VUImAsIGl0IHN0cmluZ2lmaWVzIHRo
ZSBkYXRhIHBhc3NlZCBpbi4gVGhlCi0gICAgICAgICAgZGF0YSBpcyB0aGUgc2VyaWFsaXplZCBy
ZWNvcmQgaW4gdGhlIGNhc2Ugb2YgYSBzYXZlLgotICAgICAgICAqIFJlZ2lzdGVycyBzdWNjZXNz
IGFuZCBmYWlsdXJlIGhhbmRsZXJzLgotCi0gICAgICAgIEBtZXRob2QgYWpheAotICAgICAgICBA
cHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsCi0gICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSB0eXBlIFRoZSByZXF1ZXN0IHR5cGUgR0VULCBQT1NULCBQVVQsIERFTEVURSBldGMuCi0g
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHBy
b21pc2UKLSAgICAgICovCi0gICAgICBhamF4OiBmdW5jdGlvbih1cmwsIHR5cGUsIGhhc2gpIHsK
LSAgICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlzOwotCi0gICAgICAgIHJldHVybiBuZXcgRW1iZXIu
UlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgIGhhc2gg
PSBhZGFwdGVyLmFqYXhPcHRpb25zKHVybCwgdHlwZSwgaGFzaCk7Ci0KLSAgICAgICAgICBoYXNo
LnN1Y2Nlc3MgPSBmdW5jdGlvbihqc29uKSB7Ci0gICAgICAgICAgICBFbWJlci5ydW4obnVsbCwg
cmVzb2x2ZSwganNvbik7Ci0gICAgICAgICAgfTsKLQotICAgICAgICAgIGhhc2guZXJyb3IgPSBm
dW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsKLSAgICAgICAgICAgIEVt
YmVyLnJ1bihudWxsLCByZWplY3QsIGFkYXB0ZXIuYWpheEVycm9yKGpxWEhSKSk7Ci0gICAgICAg
ICAgfTsKLQotICAgICAgICAgIEVtYmVyLiQuYWpheChoYXNoKTsKLSAgICAgICAgfSwgIkRTOiBS
ZXN0QWRhcHRlciNhamF4ICIgKyB0eXBlICsgIiB0byAiICsgdXJsKTsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBAbWV0aG9kIGFqYXhPcHRpb25zCi0gICAgICAgIEBwcml2YXRlCi0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmwKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUg
VGhlIHJlcXVlc3QgdHlwZSBHRVQsIFBPU1QsIFBVVCwgREVMRVRFIGV0Yy4KLSAgICAgICAgQHBh
cmFtIHtPYmplY3R9IGhhc2gKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBoYXNoCi0gICAgICAq
LwotICAgICAgYWpheE9wdGlvbnM6IGZ1bmN0aW9uKHVybCwgdHlwZSwgaGFzaCkgewotICAgICAg
ICBoYXNoID0gaGFzaCB8fCB7fTsKLSAgICAgICAgaGFzaC51cmwgPSB1cmw7Ci0gICAgICAgIGhh
c2gudHlwZSA9IHR5cGU7Ci0gICAgICAgIGhhc2guZGF0YVR5cGUgPSAnanNvbic7Ci0gICAgICAg
IGhhc2guY29udGV4dCA9IHRoaXM7Ci0KLSAgICAgICAgaWYgKGhhc2guZGF0YSAmJiB0eXBlICE9
PSAnR0VUJykgewotICAgICAgICAgIGhhc2guY29udGVudFR5cGUgPSAnYXBwbGljYXRpb24vanNv
bjsgY2hhcnNldD11dGYtOCc7Ci0gICAgICAgICAgaGFzaC5kYXRhID0gSlNPTi5zdHJpbmdpZnko
aGFzaC5kYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBoZWFkZXJzID0gZ2V0KHRoaXMs
ICdoZWFkZXJzJyk7Ci0gICAgICAgIGlmIChoZWFkZXJzICE9PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgICBoYXNoLmJlZm9yZVNlbmQgPSBmdW5jdGlvbiAoeGhyKSB7Ci0gICAgICAgICAgICBmb3JF
YWNoLmNhbGwoRW1iZXIua2V5cyhoZWFkZXJzKSwgZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAg
ICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHJldHVybiBoYXNoOwot
ICAgICAgfQotCi0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gUkVTVEFk
YXB0ZXI7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9jb3JlIiwgCi0gIFsiZXhwb3J0
cyJdLAotICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAv
KioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICAvKioKLSAgICAgIEFs
bCBFbWJlciBEYXRhIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbnNpZGUgb2Yg
dGhpcyBuYW1lc3BhY2UuCi0KLSAgICAgIEBjbGFzcyBEUwotICAgICAgQHN0YXRpYwotICAgICov
Ci0gICAgdmFyIERTOwotICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIERTKSB7Ci0gICAg
ICAvKioKLSAgICAgICAgQHByb3BlcnR5IFZFUlNJT04KLSAgICAgICAgQHR5cGUgU3RyaW5nCi0g
ICAgICAgIEBkZWZhdWx0ICcxLjAuMC1iZXRhLjguMmE2OGM2M2EnCi0gICAgICAgIEBzdGF0aWMK
LSAgICAgICovCi0gICAgICBEUyA9IEVtYmVyLk5hbWVzcGFjZS5jcmVhdGUoewotICAgICAgICBW
RVJTSU9OOiAnMS4wLjAtYmV0YS44LjJhNjhjNjNhJwotICAgICAgfSk7Ci0KLSAgICAgIGlmIChF
bWJlci5saWJyYXJpZXMpIHsKLSAgICAgICAgRW1iZXIubGlicmFyaWVzLnJlZ2lzdGVyQ29yZUxp
YnJhcnkoJ0VtYmVyIERhdGEnLCBEUy5WRVJTSU9OKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRFM7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xp
Yi9lbWJlci1pbml0aWFsaXplciIsIAotICBbIi4vc2V0dXAtY29udGFpbmVyIl0sCi0gIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgc2V0dXBD
b250YWluZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgIHZhciBLID0gRW1i
ZXIuSzsKLQotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAg
IC8qKgotCi0gICAgICBUaGlzIGNvZGUgaW5pdGlhbGl6ZXMgRW1iZXItRGF0YSBvbnRvIGFuIEVt
YmVyIGFwcGxpY2F0aW9uLgotCi0gICAgICBJZiBhbiBFbWJlci5qcyBkZXZlbG9wZXIgZGVmaW5l
cyBhIHN1YmNsYXNzIG9mIERTLlN0b3JlIG9uIHRoZWlyIGFwcGxpY2F0aW9uLAotICAgICAgYXMg
YEFwcC5BcHBsaWNhdGlvblN0b3JlYCAob3IgdmlhIGEgbW9kdWxlIHN5c3RlbSB0aGF0IHJlc29s
dmVzIHRvIGBzdG9yZTphcHBsaWNhdGlvbmApCi0gICAgICB0aGlzIGNvZGUgd2lsbCBhdXRvbWF0
aWNhbGx5IGluc3RhbnRpYXRlIGl0IGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBvbiB0aGUKLSAgICAg
IHJvdXRlci4KLQotICAgICAgQWRkaXRpb25hbGx5LCBhZnRlciBhbiBhcHBsaWNhdGlvbidzIGNv
bnRyb2xsZXJzIGhhdmUgYmVlbiBpbmplY3RlZCwgdGhleSB3aWxsCi0gICAgICBlYWNoIGhhdmUg
dGhlIHN0b3JlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZW0uCi0KLSAgICAgIEZvciBleGFtcGxlLCBp
bWFnaW5lIGFuIEVtYmVyLmpzIGFwcGxpY2F0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjbGFzc2Vz
OgotCi0gICAgICBBcHAuQXBwbGljYXRpb25TdG9yZSA9IERTLlN0b3JlLmV4dGVuZCh7Ci0gICAg
ICAgIGFkYXB0ZXI6ICdjdXN0b20nCi0gICAgICB9KTsKLQotICAgICAgQXBwLlBvc3RzQ29udHJv
bGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5leHRlbmQoewotICAgICAgICAvLyAuLi4KLSAg
ICAgIH0pOwotCi0gICAgICBXaGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXplZCwgYEFw
cC5BcHBsaWNhdGlvblN0b3JlYCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKLSAgICAgIGluc3RhbnRp
YXRlZCwgYW5kIHRoZSBpbnN0YW5jZSBvZiBgQXBwLlBvc3RzQ29udHJvbGxlcmAgd2lsbCBoYXZl
IGl0cyBgc3RvcmVgCi0gICAgICBwcm9wZXJ0eSBzZXQgdG8gdGhhdCBpbnN0YW5jZS4KLQotICAg
ICAgTm90ZSB0aGF0IHRoaXMgY29kZSB3aWxsIG9ubHkgYmUgcnVuIGlmIHRoZSBgZW1iZXItYXBw
bGljYXRpb25gIHBhY2thZ2UgaXMKLSAgICAgIGxvYWRlZC4gSWYgRW1iZXIgRGF0YSBpcyBiZWlu
ZyB1c2VkIGluIGFuIGVudmlyb25tZW50IG90aGVyIHRoYW4gYQotICAgICAgdHlwaWNhbCBhcHBs
aWNhdGlvbiAoZS5nLiwgbm9kZS5qcyB3aGVyZSBvbmx5IGBlbWJlci1ydW50aW1lYCBpcyBhdmFp
bGFibGUpLAotICAgICAgdGhpcyBjb2RlIHdpbGwgYmUgaWdub3JlZC4KLSAgICAqLwotCi0gICAg
RW1iZXIub25Mb2FkKCdFbWJlci5BcHBsaWNhdGlvbicsIGZ1bmN0aW9uKEFwcGxpY2F0aW9uKSB7
Ci0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgbmFtZTogICAgICAg
ImVtYmVyLWRhdGEiLAotICAgICAgICBpbml0aWFsaXplOiBzZXR1cENvbnRhaW5lcgotICAgICAg
fSk7Ci0KLSAgICAgIC8vIERlcHJlY2F0ZWQgaW5pdGlhbGl6ZXJzIHRvIHNhdGlzZnkgb2xkIGNv
ZGUgdGhhdCBkZXBlbmRlZCBvbiB0aGVtCi0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVy
KHsKLSAgICAgICAgbmFtZTogICAgICAgInN0b3JlIiwKLSAgICAgICAgYWZ0ZXI6ICAgICAgImVt
YmVyLWRhdGEiLAotICAgICAgICBpbml0aWFsaXplOiBLCi0gICAgICB9KTsKLQotICAgICAgQXBw
bGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAgICAgICAiYWN0aXZlTW9kZWxB
ZGFwdGVyIiwKLSAgICAgICAgYmVmb3JlOiAgICAgInN0b3JlIiwKLSAgICAgICAgaW5pdGlhbGl6
ZTogSwotICAgICAgfSk7Ci0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAg
ICAgbmFtZTogICAgICAgInRyYW5zZm9ybXMiLAotICAgICAgICBiZWZvcmU6ICAgICAic3RvcmUi
LAotICAgICAgICBpbml0aWFsaXplOiBLCi0gICAgICB9KTsKLQotICAgICAgQXBwbGljYXRpb24u
aW5pdGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAgICAgICAiZGF0YS1hZGFwdGVyIiwKLSAgICAg
ICAgYmVmb3JlOiAgICAgInN0b3JlIiwKLSAgICAgICAgaW5pdGlhbGl6ZTogSwotICAgICAgfSk7
Ci0KLSAgICAgIEFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgbmFtZTogICAgICAg
ImluamVjdFN0b3JlIiwKLSAgICAgICAgYmVmb3JlOiAgICAgInN0b3JlIiwKLSAgICAgICAgaW5p
dGlhbGl6ZTogSwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRh
L2xpYi9leHQvZGF0ZSIsIAotICBbXSwKLSAgZnVuY3Rpb24oKSB7Ci0gICAgInVzZSBzdHJpY3Qi
OwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIC8qKgot
ICAgICAgRGF0ZS5wYXJzZSB3aXRoIHByb2dyZXNzaXZlIGVuaGFuY2VtZW50IGZvciBJU08gODYw
MSA8aHR0cHM6Ly9naXRodWIuY29tL2Nzbm92ZXIvanMtaXNvODYwMT4KLQotICAgICAgwqkgMjAx
MSBDb2xpbiBTbm92ZXIgPGh0dHA6Ly96ZXRhZmxlZXQuY29tPgotCi0gICAgICBSZWxlYXNlZCB1
bmRlciBNSVQgbGljZW5zZS4KLQotICAgICAgQGNsYXNzIERhdGUKLSAgICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICAgIEBzdGF0aWMKLSAgICAqLwotICAgIEVtYmVyLkRhdGUgPSBFbWJlci5EYXRl
IHx8IHt9OwotCi0gICAgdmFyIG9yaWdQYXJzZSA9IERhdGUucGFyc2UsIG51bWVyaWNLZXlzID0g
WyAxLCA0LCA1LCA2LCA3LCAxMCwgMTEgXTsKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCBwYXJz
ZQotICAgICAgQHBhcmFtIGRhdGUKLSAgICAqLwotICAgIEVtYmVyLkRhdGUucGFyc2UgPSBmdW5j
dGlvbiAoZGF0ZSkgewotICAgICAgICB2YXIgdGltZXN0YW1wLCBzdHJ1Y3QsIG1pbnV0ZXNPZmZz
ZXQgPSAwOwotCi0gICAgICAgIC8vIEVTNSDCpzE1LjkuNC4yIHN0YXRlcyB0aGF0IHRoZSBzdHJp
bmcgc2hvdWxkIGF0dGVtcHQgdG8gYmUgcGFyc2VkIGFzIGEgRGF0ZSBUaW1lIFN0cmluZyBGb3Jt
YXQgc3RyaW5nCi0gICAgICAgIC8vIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYW55IGltcGxlbWVu
dGF0aW9uLXNwZWNpZmljIGRhdGUgcGFyc2luZywgc28gdGhhdOKAmXMgd2hhdCB3ZSBkbywgZXZl
biBpZiBuYXRpdmUKLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb25zIGNvdWxkIGJlIGZhc3Rlcgot
ICAgICAgICAvLyAgICAgICAgICAgICAgMSBZWVlZICAgICAgICAgICAgICAgIDIgTU0gICAgICAg
MyBERCAgICAgICAgICAgNCBISCAgICA1IG1tICAgICAgIDYgc3MgICAgICAgIDcgbXNlYyAgICAg
ICAgOCBaIDkgwrEgICAgMTAgdHpISCAgICAxMSB0em1tCi0gICAgICAgIGlmICgoc3RydWN0ID0g
L14oXGR7NH18WytcLV1cZHs2fSkoPzotKFxkezJ9KSg/Oi0oXGR7Mn0pKT8pPyg/OlQoXGR7Mn0p
OihcZHsyfSkoPzo6KFxkezJ9KSg/OlwuKFxkezN9KSk/KT8oPzooWil8KFsrXC1dKShcZHsyfSko
Pzo6KFxkezJ9KSk/KT8pPyQvLmV4ZWMoZGF0ZSkpKSB7Ci0gICAgICAgICAgICAvLyBhdm9pZCBO
YU4gdGltZXN0YW1wcyBjYXVzZWQgYnkg4oCcdW5kZWZpbmVk4oCdIHZhbHVlcyBiZWluZyBwYXNz
ZWQgdG8gRGF0ZS5VVEMKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBrOyAoayA9IG51bWVy
aWNLZXlzW2ldKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0W2tdID0gK3N0cnVjdFtr
XSB8fCAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBhbGxvdyB1bmRlZmluZWQg
ZGF5cyBhbmQgbW9udGhzCi0gICAgICAgICAgICBzdHJ1Y3RbMl0gPSAoK3N0cnVjdFsyXSB8fCAx
KSAtIDE7Ci0gICAgICAgICAgICBzdHJ1Y3RbM10gPSArc3RydWN0WzNdIHx8IDE7Ci0KLSAgICAg
ICAgICAgIGlmIChzdHJ1Y3RbOF0gIT09ICdaJyAmJiBzdHJ1Y3RbOV0gIT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgICAgIG1pbnV0ZXNPZmZzZXQgPSBzdHJ1Y3RbMTBdICogNjAgKyBzdHJ1
Y3RbMTFdOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdFs5XSA9PT0gJysnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1pbnV0ZXNPZmZzZXQgPSAwIC0gbWludXRlc09mZnNldDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRpbWVzdGFtcCA9IERh
dGUuVVRDKHN0cnVjdFsxXSwgc3RydWN0WzJdLCBzdHJ1Y3RbM10sIHN0cnVjdFs0XSwgc3RydWN0
WzVdICsgbWludXRlc09mZnNldCwgc3RydWN0WzZdLCBzdHJ1Y3RbN10pOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGltZXN0YW1wID0gb3JpZ1BhcnNlID8gb3JpZ1Bh
cnNlKGRhdGUpIDogTmFOOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDsK
LSAgICB9OwotCi0gICAgaWYgKEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8IEVt
YmVyLkVYVEVORF9QUk9UT1RZUEVTLkRhdGUpIHsKLSAgICAgIERhdGUucGFyc2UgPSBFbWJlci5E
YXRlLnBhcnNlOwotICAgIH0KLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL2luaXRpYWxp
emVycy9kYXRhX2FkYXB0ZXIiLCAKLSAgWyIuLi9zeXN0ZW0vZGVidWcvZGVidWdfYWRhcHRlciIs
ImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgRGVidWdBZGFwdGVyID0gX19kZXBlbmRlbmN5MV9f
WyJkZWZhdWx0Il07Ci0KLSAgICAvKioKLSAgICAgIENvbmZpZ3VyZXMgYSBjb250YWluZXIgd2l0
aCBpbmplY3Rpb25zIG9uIEVtYmVyIGFwcGxpY2F0aW9ucwotICAgICAgZm9yIHRoZSBFbWJlci1E
YXRhIHN0b3JlLiBBY2NlcHRzIGFuIG9wdGlvbmFsIG5hbWVzcGFjZSBhcmd1bWVudC4KLQotICAg
ICAgQG1ldGhvZCBpbml0aWFsaXplU3RvcmVJbmplY3Rpb25zCi0gICAgICBAcGFyYW0ge0VtYmVy
LkNvbnRhaW5lcn0gY29udGFpbmVyCi0gICAgKi8KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gZnVuY3Rpb24gaW5pdGlhbGl6ZURlYnVnQWRhcHRlcihjb250YWluZXIpewotICAgICAgY29u
dGFpbmVyLnJlZ2lzdGVyKCdkYXRhLWFkYXB0ZXI6bWFpbicsIERlYnVnQWRhcHRlcik7Ci0gICAg
fTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL2luaXRpYWxpemVycy9zdG9yZSIsIAot
ICBbIi4uL3NlcmlhbGl6ZXJzIiwiLi4vYWRhcHRlcnMiLCIuLi9zeXN0ZW0vY29udGFpbmVyX3By
b3h5IiwiLi4vc3lzdGVtL3N0b3JlIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18s
IF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBKU09OU2VyaWFsaXpl
ciA9IF9fZGVwZW5kZW5jeTFfXy5KU09OU2VyaWFsaXplcjsKLSAgICB2YXIgUkVTVFNlcmlhbGl6
ZXIgPSBfX2RlcGVuZGVuY3kxX18uUkVTVFNlcmlhbGl6ZXI7Ci0gICAgdmFyIFJFU1RBZGFwdGVy
ID0gX19kZXBlbmRlbmN5Ml9fLlJFU1RBZGFwdGVyOwotICAgIHZhciBDb250YWluZXJQcm94eSA9
IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgIHZhciBTdG9yZSA9IF9fZGVwZW5kZW5j
eTRfX1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBDb25maWd1cmVzIGEgY29udGFpbmVy
IGZvciB1c2Ugd2l0aCBhbiBFbWJlci1EYXRhCi0gICAgICBzdG9yZS4gQWNjZXB0cyBhbiBvcHRp
b25hbCBuYW1lc3BhY2UgYXJndW1lbnQuCi0KLSAgICAgIEBtZXRob2QgaW5pdGlhbGl6ZVN0b3Jl
Ci0gICAgICBAcGFyYW0ge0VtYmVyLkNvbnRhaW5lcn0gY29udGFpbmVyCi0gICAgICBAcGFyYW0g
e09iamVjdH0gW2FwcGxpY2F0aW9uXSBhbiBhcHBsaWNhdGlvbiBuYW1lc3BhY2UKLSAgICAqLwot
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBpbml0aWFsaXplU3RvcmUoY29u
dGFpbmVyLCBhcHBsaWNhdGlvbil7Ci0gICAgICBFbWJlci5kZXByZWNhdGUoJ1NwZWNpZnlpbmcg
YSBjdXN0b20gU3RvcmUgZm9yIEVtYmVyIERhdGEgb24geW91ciBnbG9iYWwgbmFtZXNwYWNlIGFz
IGBBcHAuU3RvcmVgICcgKwotICAgICAgICAgICAgICAgICAgICAgICdoYXMgYmVlbiBkZXByZWNh
dGVkLiBQbGVhc2UgdXNlIGBBcHAuQXBwbGljYXRpb25TdG9yZWAgaW5zdGVhZC4nLCAhKGFwcGxp
Y2F0aW9uICYmIGFwcGxpY2F0aW9uLlN0b3JlKSk7Ci0KLSAgICAgIGNvbnRhaW5lci5yZWdpc3Rl
cignc3RvcmU6bWFpbicsIGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdzdG9yZTphcHBsaWNhdGlv
bicpIHx8IChhcHBsaWNhdGlvbiAmJiBhcHBsaWNhdGlvbi5TdG9yZSkgfHwgU3RvcmUpOwotCi0g
ICAgICAvLyBhbGxvdyBvbGRlciBuYW1lcyB0byBiZSBsb29rZWQgdXAKLQotICAgICAgdmFyIHBy
b3h5ID0gbmV3IENvbnRhaW5lclByb3h5KGNvbnRhaW5lcik7Ci0gICAgICBwcm94eS5yZWdpc3Rl
ckRlcHJlY2F0aW9ucyhbCi0gICAgICAgIHtkZXByZWNhdGVkOiAnc2VyaWFsaXplcjpfZGVmYXVs
dCcsICB2YWxpZDogJ3NlcmlhbGl6ZXI6LWRlZmF1bHQnfSwKLSAgICAgICAge2RlcHJlY2F0ZWQ6
ICdzZXJpYWxpemVyOl9yZXN0JywgICAgIHZhbGlkOiAnc2VyaWFsaXplcjotcmVzdCd9LAotICAg
ICAgICB7ZGVwcmVjYXRlZDogJ2FkYXB0ZXI6X3Jlc3QnLCAgICAgICAgdmFsaWQ6ICdhZGFwdGVy
Oi1yZXN0J30KLSAgICAgIF0pOwotCi0gICAgICAvLyBuZXcgZ28gZm9yd2FyZCBwYXRocwotICAg
ICAgY29udGFpbmVyLnJlZ2lzdGVyKCdzZXJpYWxpemVyOi1kZWZhdWx0JywgSlNPTlNlcmlhbGl6
ZXIpOwotICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdzZXJpYWxpemVyOi1yZXN0JywgUkVTVFNl
cmlhbGl6ZXIpOwotICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdhZGFwdGVyOi1yZXN0JywgUkVT
VEFkYXB0ZXIpOwotCi0gICAgICAvLyBFYWdlcmx5IGdlbmVyYXRlIHRoZSBzdG9yZSBzbyBkZWZh
dWx0U3RvcmUgaXMgcG9wdWxhdGVkLgotICAgICAgLy8gVE9ETzogRG8gdGhpcyBpbiBhIGZpbmlz
aGVyIGhvb2sKLSAgICAgIGNvbnRhaW5lci5sb29rdXAoJ3N0b3JlOm1haW4nKTsKLSAgICB9Owot
ICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvaW5pdGlhbGl6ZXJzL3N0b3JlX2luamVjdGlv
bnMiLCAKLSAgWyJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgInVz
ZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQ29uZmlndXJlcyBhIGNvbnRhaW5lciB3aXRoIGlu
amVjdGlvbnMgb24gRW1iZXIgYXBwbGljYXRpb25zCi0gICAgICBmb3IgdGhlIEVtYmVyLURhdGEg
c3RvcmUuIEFjY2VwdHMgYW4gb3B0aW9uYWwgbmFtZXNwYWNlIGFyZ3VtZW50LgotCi0gICAgICBA
bWV0aG9kIGluaXRpYWxpemVTdG9yZUluamVjdGlvbnMKLSAgICAgIEBwYXJhbSB7RW1iZXIuQ29u
dGFpbmVyfSBjb250YWluZXIKLSAgICAqLwotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBm
dW5jdGlvbiBpbml0aWFsaXplU3RvcmVJbmplY3Rpb25zKGNvbnRhaW5lcil7Ci0gICAgICBjb250
YWluZXIuaW5qZWN0aW9uKCdjb250cm9sbGVyJywgICAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOwot
ICAgICAgY29udGFpbmVyLmluamVjdGlvbigncm91dGUnLCAgICAgICAgJ3N0b3JlJywgJ3N0b3Jl
Om1haW4nKTsKLSAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3NlcmlhbGl6ZXInLCAgICdzdG9y
ZScsICdzdG9yZTptYWluJyk7Ci0gICAgICBjb250YWluZXIuaW5qZWN0aW9uKCdkYXRhLWFkYXB0
ZXInLCAnc3RvcmUnLCAnc3RvcmU6bWFpbicpOwotICAgIH07Ci0gIH0pOwotZGVmaW5lKCJlbWJl
ci1kYXRhL2xpYi9pbml0aWFsaXplcnMvdHJhbnNmb3JtcyIsIAotICBbIi4uL3RyYW5zZm9ybXMi
LCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsK
LSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIEJvb2xlYW5UcmFuc2Zvcm0gPSBfX2RlcGVuZGVu
Y3kxX18uQm9vbGVhblRyYW5zZm9ybTsKLSAgICB2YXIgRGF0ZVRyYW5zZm9ybSA9IF9fZGVwZW5k
ZW5jeTFfXy5EYXRlVHJhbnNmb3JtOwotICAgIHZhciBTdHJpbmdUcmFuc2Zvcm0gPSBfX2RlcGVu
ZGVuY3kxX18uU3RyaW5nVHJhbnNmb3JtOwotICAgIHZhciBOdW1iZXJUcmFuc2Zvcm0gPSBfX2Rl
cGVuZGVuY3kxX18uTnVtYmVyVHJhbnNmb3JtOwotCi0gICAgLyoqCi0gICAgICBDb25maWd1cmVz
IGEgY29udGFpbmVyIGZvciB1c2Ugd2l0aCBFbWJlci1EYXRhCi0gICAgICB0cmFuc2Zvcm1zLgot
Ci0gICAgICBAbWV0aG9kIGluaXRpYWxpemVUcmFuc2Zvcm1zCi0gICAgICBAcGFyYW0ge0VtYmVy
LkNvbnRhaW5lcn0gY29udGFpbmVyCi0gICAgKi8KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gZnVuY3Rpb24gaW5pdGlhbGl6ZVRyYW5zZm9ybXMoY29udGFpbmVyKXsKLSAgICAgIGNvbnRh
aW5lci5yZWdpc3RlcigndHJhbnNmb3JtOmJvb2xlYW4nLCBCb29sZWFuVHJhbnNmb3JtKTsKLSAg
ICAgIGNvbnRhaW5lci5yZWdpc3RlcigndHJhbnNmb3JtOmRhdGUnLCAgICBEYXRlVHJhbnNmb3Jt
KTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3RlcigndHJhbnNmb3JtOm51bWJlcicsICBOdW1iZXJU
cmFuc2Zvcm0pOwotICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCd0cmFuc2Zvcm06c3RyaW5nJywg
IFN0cmluZ1RyYW5zZm9ybSk7Ci0gICAgfTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGli
L21haW4iLCAKLSAgWyIuL2NvcmUiLCIuL2V4dC9kYXRlIiwiLi9zeXN0ZW0vc3RvcmUiLCIuL3N5
c3RlbS9tb2RlbCIsIi4vc3lzdGVtL2NoYW5nZXMiLCIuL3N5c3RlbS9hZGFwdGVyIiwiLi9zeXN0
ZW0vZGVidWciLCIuL3N5c3RlbS9yZWNvcmRfYXJyYXlzIiwiLi9zeXN0ZW0vcmVjb3JkX2FycmF5
X21hbmFnZXIiLCIuL2FkYXB0ZXJzIiwiLi9zZXJpYWxpemVycy9qc29uX3NlcmlhbGl6ZXIiLCIu
L3NlcmlhbGl6ZXJzL3Jlc3Rfc2VyaWFsaXplciIsIi4uLy4uL2VtYmVyLWluZmxlY3Rvci9saWIv
bWFpbiIsIi4uLy4uL2FjdGl2ZW1vZGVsLWFkYXB0ZXIvbGliL21haW4iLCIuL3RyYW5zZm9ybXMi
LCIuL3N5c3RlbS9yZWxhdGlvbnNoaXBzIiwiLi9lbWJlci1pbml0aWFsaXplciIsIi4vc2V0dXAt
Y29udGFpbmVyIiwiLi9zeXN0ZW0vY29udGFpbmVyX3Byb3h5IiwiZXhwb3J0cyJdLAotICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVu
ZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kx
MF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19f
LCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBf
X2RlcGVuZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2RlcGVuZGVuY3kxOV9fLCBfX2V4
cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEVtYmVyIERhdGEK
LQotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgICBAbWFpbiBlbWJlci1kYXRhCi0gICAg
Ki8KLQotICAgIC8vIHN1cHBvcnQgUlNWUCAyLnggdmlhIHJlc29sdmUsICBidXQgcHJlZmVyIFJT
VlAgMy54J3MgUHJvbWlzZS5jYXN0Ci0gICAgRW1iZXIuUlNWUC5Qcm9taXNlLmNhc3QgPSBFbWJl
ci5SU1ZQLlByb21pc2UuY2FzdCB8fCBFbWJlci5SU1ZQLnJlc29sdmU7Ci0KLSAgICB2YXIgRFMg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgIHZhciBTdG9yZSA9IF9fZGVwZW5k
ZW5jeTNfXy5TdG9yZTsKLSAgICB2YXIgUHJvbWlzZUFycmF5ID0gX19kZXBlbmRlbmN5M19fLlBy
b21pc2VBcnJheTsKLSAgICB2YXIgUHJvbWlzZU9iamVjdCA9IF9fZGVwZW5kZW5jeTNfXy5Qcm9t
aXNlT2JqZWN0OwotICAgIHZhciBNb2RlbCA9IF9fZGVwZW5kZW5jeTRfXy5Nb2RlbDsKLSAgICB2
YXIgRXJyb3JzID0gX19kZXBlbmRlbmN5NF9fLkVycm9yczsKLSAgICB2YXIgUm9vdFN0YXRlID0g
X19kZXBlbmRlbmN5NF9fLlJvb3RTdGF0ZTsKLSAgICB2YXIgYXR0ciA9IF9fZGVwZW5kZW5jeTRf
Xy5hdHRyOwotICAgIHZhciBBdHRyaWJ1dGVDaGFuZ2UgPSBfX2RlcGVuZGVuY3k1X18uQXR0cmli
dXRlQ2hhbmdlOwotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2UgPSBfX2RlcGVuZGVuY3k1X18u
UmVsYXRpb25zaGlwQ2hhbmdlOwotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBfX2Rl
cGVuZGVuY3k1X18uUmVsYXRpb25zaGlwQ2hhbmdlQWRkOwotICAgIHZhciBSZWxhdGlvbnNoaXBD
aGFuZ2VSZW1vdmUgPSBfX2RlcGVuZGVuY3k1X18uUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlOwot
ICAgIHZhciBPbmVUb01hbnlDaGFuZ2UgPSBfX2RlcGVuZGVuY3k1X18uT25lVG9NYW55Q2hhbmdl
OwotICAgIHZhciBNYW55VG9Ob25lQ2hhbmdlID0gX19kZXBlbmRlbmN5NV9fLk1hbnlUb05vbmVD
aGFuZ2U7Ci0gICAgdmFyIE9uZVRvT25lQ2hhbmdlID0gX19kZXBlbmRlbmN5NV9fLk9uZVRvT25l
Q2hhbmdlOwotICAgIHZhciBNYW55VG9NYW55Q2hhbmdlID0gX19kZXBlbmRlbmN5NV9fLk1hbnlU
b01hbnlDaGFuZ2U7Ci0gICAgdmFyIEludmFsaWRFcnJvciA9IF9fZGVwZW5kZW5jeTZfXy5JbnZh
bGlkRXJyb3I7Ci0gICAgdmFyIEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3k2X18uQWRhcHRlcjsKLSAg
ICB2YXIgRGVidWdBZGFwdGVyID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgdmFy
IFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5OF9fLlJlY29yZEFycmF5OwotICAgIHZhciBGaWx0
ZXJlZFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5OF9fLkZpbHRlcmVkUmVjb3JkQXJyYXk7Ci0g
ICAgdmFyIEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheSA9IF9fZGVwZW5kZW5jeThfXy5BZGFw
dGVyUG9wdWxhdGVkUmVjb3JkQXJyYXk7Ci0gICAgdmFyIE1hbnlBcnJheSA9IF9fZGVwZW5kZW5j
eThfXy5NYW55QXJyYXk7Ci0gICAgdmFyIFJlY29yZEFycmF5TWFuYWdlciA9IF9fZGVwZW5kZW5j
eTlfX1siZGVmYXVsdCJdOwotICAgIHZhciBSRVNUQWRhcHRlciA9IF9fZGVwZW5kZW5jeTEwX18u
UkVTVEFkYXB0ZXI7Ci0gICAgdmFyIEZpeHR1cmVBZGFwdGVyID0gX19kZXBlbmRlbmN5MTBfXy5G
aXh0dXJlQWRhcHRlcjsKLSAgICB2YXIgSlNPTlNlcmlhbGl6ZXIgPSBfX2RlcGVuZGVuY3kxMV9f
WyJkZWZhdWx0Il07Ci0gICAgdmFyIFJFU1RTZXJpYWxpemVyID0gX19kZXBlbmRlbmN5MTJfX1si
ZGVmYXVsdCJdOwotICAgIHZhciBBY3RpdmVNb2RlbEFkYXB0ZXIgPSBfX2RlcGVuZGVuY3kxNF9f
LkFjdGl2ZU1vZGVsQWRhcHRlcjsKLSAgICB2YXIgQWN0aXZlTW9kZWxTZXJpYWxpemVyID0gX19k
ZXBlbmRlbmN5MTRfXy5BY3RpdmVNb2RlbFNlcmlhbGl6ZXI7Ci0gICAgdmFyIEVtYmVkZGVkUmVj
b3Jkc01peGluID0gX19kZXBlbmRlbmN5MTRfXy5FbWJlZGRlZFJlY29yZHNNaXhpbjsKLQotICAg
IHZhciBUcmFuc2Zvcm0gPSBfX2RlcGVuZGVuY3kxNV9fLlRyYW5zZm9ybTsKLSAgICB2YXIgRGF0
ZVRyYW5zZm9ybSA9IF9fZGVwZW5kZW5jeTE1X18uRGF0ZVRyYW5zZm9ybTsKLSAgICB2YXIgTnVt
YmVyVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MTVfXy5OdW1iZXJUcmFuc2Zvcm07Ci0gICAgdmFy
IFN0cmluZ1RyYW5zZm9ybSA9IF9fZGVwZW5kZW5jeTE1X18uU3RyaW5nVHJhbnNmb3JtOwotICAg
IHZhciBCb29sZWFuVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MTVfXy5Cb29sZWFuVHJhbnNmb3Jt
OwotCi0gICAgdmFyIGhhc01hbnkgPSBfX2RlcGVuZGVuY3kxNl9fLmhhc01hbnk7Ci0gICAgdmFy
IGJlbG9uZ3NUbyA9IF9fZGVwZW5kZW5jeTE2X18uYmVsb25nc1RvOwotICAgIHZhciBzZXR1cENv
bnRhaW5lciA9IF9fZGVwZW5kZW5jeTE4X19bImRlZmF1bHQiXTsKLQotICAgIHZhciBDb250YWlu
ZXJQcm94eSA9IF9fZGVwZW5kZW5jeTE5X19bImRlZmF1bHQiXTsKLQotICAgIERTLlN0b3JlICAg
ICAgICAgPSBTdG9yZTsKLSAgICBEUy5Qcm9taXNlQXJyYXkgID0gUHJvbWlzZUFycmF5OwotICAg
IERTLlByb21pc2VPYmplY3QgPSBQcm9taXNlT2JqZWN0OwotCi0gICAgRFMuTW9kZWwgICAgID0g
TW9kZWw7Ci0gICAgRFMuUm9vdFN0YXRlID0gUm9vdFN0YXRlOwotICAgIERTLmF0dHIgICAgICA9
IGF0dHI7Ci0gICAgRFMuRXJyb3JzICAgID0gRXJyb3JzOwotCi0gICAgRFMuQXR0cmlidXRlQ2hh
bmdlICAgICAgID0gQXR0cmlidXRlQ2hhbmdlOwotICAgIERTLlJlbGF0aW9uc2hpcENoYW5nZSAg
ICA9IFJlbGF0aW9uc2hpcENoYW5nZTsKLSAgICBEUy5SZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBS
ZWxhdGlvbnNoaXBDaGFuZ2VBZGQ7Ci0gICAgRFMuT25lVG9NYW55Q2hhbmdlICAgICAgID0gT25l
VG9NYW55Q2hhbmdlOwotICAgIERTLk1hbnlUb05vbmVDaGFuZ2UgICAgICA9IE9uZVRvTWFueUNo
YW5nZTsKLSAgICBEUy5PbmVUb09uZUNoYW5nZSAgICAgICAgPSBPbmVUb09uZUNoYW5nZTsKLSAg
ICBEUy5NYW55VG9NYW55Q2hhbmdlICAgICAgPSBNYW55VG9NYW55Q2hhbmdlOwotCi0gICAgRFMu
QWRhcHRlciAgICAgID0gQWRhcHRlcjsKLSAgICBEUy5JbnZhbGlkRXJyb3IgPSBJbnZhbGlkRXJy
b3I7Ci0KLSAgICBEUy5EZWJ1Z0FkYXB0ZXIgPSBEZWJ1Z0FkYXB0ZXI7Ci0KLSAgICBEUy5SZWNv
cmRBcnJheSAgICAgICAgICAgICAgICAgPSBSZWNvcmRBcnJheTsKLSAgICBEUy5GaWx0ZXJlZFJl
Y29yZEFycmF5ICAgICAgICAgPSBGaWx0ZXJlZFJlY29yZEFycmF5OwotICAgIERTLkFkYXB0ZXJQ
b3B1bGF0ZWRSZWNvcmRBcnJheSA9IEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheTsKLSAgICBE
Uy5NYW55QXJyYXkgICAgICAgICAgICAgICAgICAgPSBNYW55QXJyYXk7Ci0KLSAgICBEUy5SZWNv
cmRBcnJheU1hbmFnZXIgPSBSZWNvcmRBcnJheU1hbmFnZXI7Ci0KLSAgICBEUy5SRVNUQWRhcHRl
ciAgICA9IFJFU1RBZGFwdGVyOwotICAgIERTLkZpeHR1cmVBZGFwdGVyID0gRml4dHVyZUFkYXB0
ZXI7Ci0KLSAgICBEUy5SRVNUU2VyaWFsaXplciA9IFJFU1RTZXJpYWxpemVyOwotICAgIERTLkpT
T05TZXJpYWxpemVyID0gSlNPTlNlcmlhbGl6ZXI7Ci0KLSAgICBEUy5UcmFuc2Zvcm0gICAgICAg
PSBUcmFuc2Zvcm07Ci0gICAgRFMuRGF0ZVRyYW5zZm9ybSAgID0gRGF0ZVRyYW5zZm9ybTsKLSAg
ICBEUy5TdHJpbmdUcmFuc2Zvcm0gPSBTdHJpbmdUcmFuc2Zvcm07Ci0gICAgRFMuTnVtYmVyVHJh
bnNmb3JtID0gTnVtYmVyVHJhbnNmb3JtOwotICAgIERTLkJvb2xlYW5UcmFuc2Zvcm0gPSBCb29s
ZWFuVHJhbnNmb3JtOwotCi0gICAgRFMuQWN0aXZlTW9kZWxBZGFwdGVyICAgID0gQWN0aXZlTW9k
ZWxBZGFwdGVyOwotICAgIERTLkFjdGl2ZU1vZGVsU2VyaWFsaXplciA9IEFjdGl2ZU1vZGVsU2Vy
aWFsaXplcjsKLSAgICBEUy5FbWJlZGRlZFJlY29yZHNNaXhpbiAgPSBFbWJlZGRlZFJlY29yZHNN
aXhpbjsKLQotICAgIERTLmJlbG9uZ3NUbyA9IGJlbG9uZ3NUbzsKLSAgICBEUy5oYXNNYW55ICAg
PSBoYXNNYW55OwotCi0gICAgRFMuQ29udGFpbmVyUHJveHkgPSBDb250YWluZXJQcm94eTsKLQot
ICAgIERTLl9zZXR1cENvbnRhaW5lciA9IHNldHVwQ29udGFpbmVyOwotCi0gICAgRW1iZXIubG9v
a3VwLkRTID0gRFM7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRFM7Ci0gIH0pOwot
ZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zZXJpYWxpemVycyIsIAotICBbIi4vc2VyaWFsaXplcnMv
anNvbl9zZXJpYWxpemVyIiwiLi9zZXJpYWxpemVycy9yZXN0X3NlcmlhbGl6ZXIiLCJleHBvcnRz
Il0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9y
dHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgSlNPTlNlcmlhbGl6ZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICB2YXIgUkVTVFNlcmlhbGl6ZXIgPSBfX2RlcGVu
ZGVuY3kyX19bImRlZmF1bHQiXTsKLQotICAgIF9fZXhwb3J0c19fLkpTT05TZXJpYWxpemVyID0g
SlNPTlNlcmlhbGl6ZXI7Ci0gICAgX19leHBvcnRzX18uUkVTVFNlcmlhbGl6ZXIgPSBSRVNUU2Vy
aWFsaXplcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3NlcmlhbGl6ZXJzL2pzb25f
c2VyaWFsaXplciIsIAotICBbIi4uL3N5c3RlbS9jaGFuZ2VzIiwiZXhwb3J0cyJdLAotICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwot
ICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2UgPSBfX2RlcGVuZGVuY3kxX18uUmVsYXRpb25zaGlw
Q2hhbmdlOwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldCwgaXNOb25l
ID0gRW1iZXIuaXNOb25lLAotICAgICAgICBtYXAgPSBFbWJlci5BcnJheVBvbHlmaWxscy5tYXA7
Ci0KLSAgICAvKioKLSAgICAgIEluIEVtYmVyIERhdGEgYSBTZXJpYWxpemVyIGlzIHVzZWQgdG8g
c2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZQotICAgICAgcmVjb3JkcyB3aGVuIHRoZXkgYXJlIHRy
YW5zZmVycmVkIGluIGFuZCBvdXQgb2YgYW4gZXh0ZXJuYWwgc291cmNlLgotICAgICAgVGhpcyBw
cm9jZXNzIGludm9sdmVzIG5vcm1hbGl6aW5nIHByb3BlcnR5IG5hbWVzLCB0cmFuc2Zvcm1pbmcK
LSAgICAgIGF0dHJpYnV0ZSB2YWx1ZXMgYW5kIHNlcmlhbGl6aW5nIHJlbGF0aW9uc2hpcHMuCi0K
LSAgICAgIEZvciBtYXhpbXVtIHBlcmZvcm1hbmNlIEVtYmVyIERhdGEgcmVjb21tZW5kcyB5b3Ug
dXNlIHRoZQotICAgICAgW1JFU1RTZXJpYWxpemVyXShEUy5SRVNUU2VyaWFsaXplci5odG1sKSBv
ciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi0KLSAgICAgIGBKU09OU2VyaWFsaXplcmAgaXMgdXNl
ZnVsIGZvciBzaW1wbGVyIG9yIGxlZ2FjeSBiYWNrZW5kcyB0aGF0IG1heQotICAgICAgbm90IHN1
cHBvcnQgdGhlIGh0dHA6Ly9qc29uYXBpLm9yZy8gc3BlYy4KLQotICAgICAgQGNsYXNzIEpTT05T
ZXJpYWxpemVyCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgKi8KLSAgICB2YXIgSlNPTlNlcmlh
bGl6ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIC8qKgotICAgICAgICBUaGUgcHJp
bWFyeUtleSBpcyB1c2VkIHdoZW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcKLSAgICAg
ICAgZGF0YS4gRW1iZXIgRGF0YSBhbHdheXMgdXNlcyB0aGUgYGlkYCBwcm9wZXJ0eSB0byBzdG9y
ZSB0aGUgaWQgb2YKLSAgICAgICAgdGhlIHJlY29yZC4gVGhlIGV4dGVybmFsIHNvdXJjZSBtYXkg
bm90IGFsd2F5cyBmb2xsb3cgdGhpcwotICAgICAgICBjb252ZW50aW9uLiBJbiB0aGVzZSBjYXNl
cyBpdCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlCi0gICAgICAgIHByaW1hcnlLZXkgcHJvcGVy
dHkgdG8gbWF0Y2ggdGhlIHByaW1hcnlLZXkgb2YgeW91ciBleHRlcm5hbAotICAgICAgICBzdG9y
ZS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBB
cHAuQXBwbGljYXRpb25TZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAg
ICAgICAgICBwcmltYXJ5S2V5OiAnX2lkJwotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgQHByb3BlcnR5IHByaW1hcnlLZXkKLSAgICAgICAgQHR5cGUge1N0cmluZ30KLSAgICAg
ICAgQGRlZmF1bHQgJ2lkJwotICAgICAgKi8KLSAgICAgIHByaW1hcnlLZXk6ICdpZCcsCi0KLSAg
ICAgIC8qKgotICAgICAgICBUaGUgYGF0dHJzYCBvYmplY3QgY2FuIGJlIHVzZWQgdG8gZGVjbGFy
ZSBhIHNpbXBsZSBtYXBwaW5nIGJldHdlZW4KLSAgICAgICAgcHJvcGVydHkgbmFtZXMgb24gYERT
Lk1vZGVsYCByZWNvcmRzIGFuZCBwYXlsb2FkIGtleXMgaW4gdGhlCi0gICAgICAgIHNlcmlhbGl6
ZWQgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZWNvcmQuIEFuIG9iamVjdCB3aXRoIHRo
ZQotICAgICAgICBwcm9wZXJ5IGBrZXlgIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGVzaWduYXRlIHRo
ZSBhdHRyaWJ1dGUncyBrZXkgb24KLSAgICAgICAgdGhlIHJlc3BvbnNlIHBheWxvYWQuCi0KLSAg
ICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLlBlcnNv
biA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgICAgZmlyc3ROYW1lOiBEUy5hdHRyKCdzdHJp
bmcnKSwKLSAgICAgICAgICBsYXN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAg
b2NjdXBhdGlvbjogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgYWRtaW46IERTLmF0dHIo
J2Jvb2xlYW4nKQotICAgICAgICB9KTsKLQotICAgICAgICBBcHAuUGVyc29uU2VyaWFsaXplciA9
IERTLkpTT05TZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgYXR0cnM6IHsKLSAgICAgICAg
ICAgIGFkbWluOiAnaXNfYWRtaW4nLAotICAgICAgICAgICAgb2NjdXBhdGlvbjoge2tleTogJ2Nh
cmVlcid9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAg
QHByb3BlcnR5IGF0dHJzCi0gICAgICAgIEB0eXBlIHtPYmplY3R9Ci0gICAgICAqLwotCi0gICAg
ICAvKioKLSAgICAgICBHaXZlbiBhIHN1YmNsYXNzIG9mIGBEUy5Nb2RlbGAgYW5kIGEgSlNPTiBv
YmplY3QgdGhpcyBtZXRob2Qgd2lsbAotICAgICAgIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGF0dHJp
YnV0ZSBvZiB0aGUgYERTLk1vZGVsYCBhbmQgaW52b2tlIHRoZQotICAgICAgIGBEUy5UcmFuc2Zv
cm0jZGVzZXJpYWxpemVgIG1ldGhvZCBvbiB0aGUgbWF0Y2hpbmcgcHJvcGVydHkgb2YgdGhlCi0g
ICAgICAgSlNPTiBvYmplY3QuICBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkIGFmdGVy
IHRoZQotICAgICAgIHNlcmlhbGl6ZXIncyBgbm9ybWFsaXplYCBtZXRob2QuCi0KLSAgICAgICBA
bWV0aG9kIGFwcGx5VHJhbnNmb3JtcwotICAgICAgIEBwcml2YXRlCi0gICAgICAgQHBhcmFtIHtz
dWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRo
ZSBkYXRhIHRvIHRyYW5zZm9ybQotICAgICAgIEByZXR1cm4ge09iamVjdH0gZGF0YSBUaGUgdHJh
bnNmb3JtZWQgZGF0YSBvYmplY3QKLSAgICAgICovCi0gICAgICBhcHBseVRyYW5zZm9ybXM6IGZ1
bmN0aW9uKHR5cGUsIGRhdGEpIHsKLSAgICAgICAgdHlwZS5lYWNoVHJhbnNmb3JtZWRBdHRyaWJ1
dGUoZnVuY3Rpb24oa2V5LCB0eXBlKSB7Ci0gICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMu
dHJhbnNmb3JtRm9yKHR5cGUpOwotICAgICAgICAgIGRhdGFba2V5XSA9IHRyYW5zZm9ybS5kZXNl
cmlhbGl6ZShkYXRhW2tleV0pOwotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4g
ZGF0YTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBOb3JtYWxpemVzIGEgcGFydCBv
ZiB0aGUgSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5Ci0gICAgICAgIHRoZSBzZXJ2ZXIuIFlvdSBz
aG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG11bmdlIHRoZSBoYXNoCi0gICAgICAgIGFuZCBj
YWxsIHN1cGVyIGlmIHlvdSBoYXZlIGdlbmVyaWMgbm9ybWFsaXphdGlvbiB0byBkby4KLQotICAg
ICAgICBJdCB0YWtlcyB0aGUgdHlwZSBvZiB0aGUgcmVjb3JkIHRoYXQgaXMgYmVpbmcgbm9ybWFs
aXplZAotICAgICAgICAoYXMgYSBEUy5Nb2RlbCBjbGFzcyksIHRoZSBwcm9wZXJ0eSB3aGVyZSB0
aGUgaGFzaCB3YXMKLSAgICAgICAgb3JpZ2luYWxseSBmb3VuZCwgYW5kIHRoZSBoYXNoIHRvIG5v
cm1hbGl6ZS4KLQotICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgZm9yIGV4YW1wbGUs
IHRvIG5vcm1hbGl6ZSB1bmRlcnNjb3JlZCBrZXlzIHRvIGNhbWVsaXplZAotICAgICAgICBvciBv
dGhlciBnZW5lcmFsLXB1cnBvc2Ugbm9ybWFsaXphdGlvbnMuCi0KLSAgICAgICAgRXhhbXBsZQot
Ci0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXpl
ciA9IERTLkpTT05TZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgbm9ybWFsaXplOiBmdW5j
dGlvbih0eXBlLCBoYXNoKSB7Ci0gICAgICAgICAgICB2YXIgZmllbGRzID0gRW1iZXIuZ2V0KHR5
cGUsICdmaWVsZHMnKTsKLSAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxk
KSB7Ci0gICAgICAgICAgICAgIHZhciBwYXlsb2FkRmllbGQgPSBFbWJlci5TdHJpbmcudW5kZXJz
Y29yZShmaWVsZCk7Ci0gICAgICAgICAgICAgIGlmIChmaWVsZCA9PT0gcGF5bG9hZEZpZWxkKSB7
IHJldHVybjsgfQotCi0gICAgICAgICAgICAgIGhhc2hbZmllbGRdID0gaGFzaFtwYXlsb2FkRmll
bGRdOwotICAgICAgICAgICAgICBkZWxldGUgaGFzaFtwYXlsb2FkRmllbGRdOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBA
bWV0aG9kIG5vcm1hbGl6ZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0
eXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoCi0gICAgICAgIEByZXR1cm4ge09iamVj
dH0KLSAgICAgICovCi0gICAgICBub3JtYWxpemU6IGZ1bmN0aW9uKHR5cGUsIGhhc2gpIHsKLSAg
ICAgICAgaWYgKCFoYXNoKSB7IHJldHVybiBoYXNoOyB9Ci0KLSAgICAgICAgdGhpcy5ub3JtYWxp
emVJZChoYXNoKTsKLSAgICAgICAgdGhpcy5ub3JtYWxpemVVc2luZ0RlY2xhcmVkTWFwcGluZyh0
eXBlLCBoYXNoKTsKLSAgICAgICAgdGhpcy5hcHBseVRyYW5zZm9ybXModHlwZSwgaGFzaCk7Ci0g
ICAgICAgIHJldHVybiBoYXNoOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRo
b2Qgbm9ybWFsaXplVXNpbmdEZWNsYXJlZE1hcHBpbmcKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICovCi0gICAgICBub3JtYWxpemVVc2luZ0RlY2xhcmVkTWFwcGluZzogZnVuY3Rpb24odHlwZSwg
aGFzaCkgewotICAgICAgICB2YXIgYXR0cnMgPSBnZXQodGhpcywgJ2F0dHJzJyksIHBheWxvYWRL
ZXksIGtleTsKLQotICAgICAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgICBmb3IgKGtleSBpbiBh
dHRycykgewotICAgICAgICAgICAgcGF5bG9hZEtleSA9IGF0dHJzW2tleV07Ci0gICAgICAgICAg
ICBpZiAocGF5bG9hZEtleSAmJiBwYXlsb2FkS2V5LmtleSkgewotICAgICAgICAgICAgICBwYXls
b2FkS2V5ID0gcGF5bG9hZEtleS5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIHBheWxvYWRLZXkgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgIGhhc2hba2V5
XSA9IGhhc2hbcGF5bG9hZEtleV07Ci0gICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW3BheWxvYWRL
ZXldOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSwKLSAg
ICAgIC8qKgotICAgICAgICBAbWV0aG9kIG5vcm1hbGl6ZUlkCi0gICAgICAgIEBwcml2YXRlCi0g
ICAgICAqLwotICAgICAgbm9ybWFsaXplSWQ6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgdmFy
IHByaW1hcnlLZXkgPSBnZXQodGhpcywgJ3ByaW1hcnlLZXknKTsKLQotICAgICAgICBpZiAocHJp
bWFyeUtleSA9PT0gJ2lkJykgeyByZXR1cm47IH0KLQotICAgICAgICBoYXNoLmlkID0gaGFzaFtw
cmltYXJ5S2V5XTsKLSAgICAgICAgZGVsZXRlIGhhc2hbcHJpbWFyeUtleV07Ci0gICAgICB9LAot
Ci0gICAgICAvLyBTRVJJQUxJWkUKLSAgICAgIC8qKgotICAgICAgICBDYWxsZWQgd2hlbiBhIHJl
Y29yZCBpcyBzYXZlZCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZQotICAgICAgICByZWNvcmQgaW50
byBKU09OLgotCi0gICAgICAgIEJ5IGRlZmF1bHQsIGl0IGNyZWF0ZXMgYSBKU09OIG9iamVjdCB3
aXRoIGEga2V5IGZvcgotICAgICAgICBlYWNoIGF0dHJpYnV0ZSBhbmQgYmVsb25nc1RvIHJlbGF0
aW9uc2hpcC4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBtb2RlbDoKLQot
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Db21tZW50ID0gRFMuTW9kZWwuZXh0
ZW5kKHsKLSAgICAgICAgICB0aXRsZTogRFMuYXR0cigpLAotICAgICAgICAgIGJvZHk6IERTLmF0
dHIoKSwKLQotICAgICAgICAgIGF1dGhvcjogRFMuYmVsb25nc1RvKCd1c2VyJykKLSAgICAgICAg
fSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBkZWZhdWx0IHNlcmlhbGl6YXRpb24gd291
bGQgY3JlYXRlIGEgSlNPTiBvYmplY3QgbGlrZToKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAidGl0bGUiOiAiUmFpbHMgaXMgdW5hZ2kiLAotICAgICAgICAg
ICJib2R5IjogIlJhaWxzPyBPbWFrYXNlPyBPX08iLAotICAgICAgICAgICJhdXRob3IiOiAxMgot
ICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEJ5IGRlZmF1bHQsIGF0dHJpYnV0ZXMg
YXJlIHBhc3NlZCB0aHJvdWdoIGFzLWlzLCB1bmxlc3MKLSAgICAgICAgeW91IHNwZWNpZmllZCBh
biBhdHRyaWJ1dGUgdHlwZSAoYERTLmF0dHIoJ2RhdGUnKWApLiBJZgotICAgICAgICB5b3Ugc3Bl
Y2lmeSBhIHRyYW5zZm9ybSwgdGhlIEphdmFTY3JpcHQgdmFsdWUgd2lsbCBiZQotICAgICAgICBz
ZXJpYWxpemVkIHdoZW4gaW5zZXJ0ZWQgaW50byB0aGUgSlNPTiBoYXNoLgotCi0gICAgICAgIEJ5
IGRlZmF1bHQsIGJlbG9uZ3MtdG8gcmVsYXRpb25zaGlwcyBhcmUgY29udmVydGVkIGludG8KLSAg
ICAgICAgSURzIHdoZW4gaW5zZXJ0ZWQgaW50byB0aGUgSlNPTiBoYXNoLgotCi0gICAgICAgICMj
IElEcwotCi0gICAgICAgIGBzZXJpYWxpemVgIHRha2VzIGFuIG9wdGlvbnMgaGFzaCB3aXRoIGEg
c2luZ2xlIG9wdGlvbjoKLSAgICAgICAgYGluY2x1ZGVJZGAuIElmIHRoaXMgb3B0aW9uIGlzIGB0
cnVlYCwgYHNlcmlhbGl6ZWAgd2lsbCwKLSAgICAgICAgYnkgZGVmYXVsdCBpbmNsdWRlIHRoZSBJ
RCBpbiB0aGUgSlNPTiBvYmplY3QgaXQgYnVpbGRzLgotCi0gICAgICAgIFRoZSBhZGFwdGVyIHBh
c3NlcyBpbiBgaW5jbHVkZUlkOiB0cnVlYCB3aGVuIHNlcmlhbGl6aW5nCi0gICAgICAgIGEgcmVj
b3JkIGZvciBgY3JlYXRlUmVjb3JkYCwgYnV0IG5vdCBmb3IgYHVwZGF0ZVJlY29yZGAuCi0KLSAg
ICAgICAgIyMgQ3VzdG9taXphdGlvbgotCi0gICAgICAgIFlvdXIgc2VydmVyIG1heSBleHBlY3Qg
YSBkaWZmZXJlbnQgSlNPTiBmb3JtYXQgdGhhbiB0aGUKLSAgICAgICAgYnVpbHQtaW4gc2VyaWFs
aXphdGlvbiBmb3JtYXQuCi0KLSAgICAgICAgSW4gdGhhdCBjYXNlLCB5b3UgY2FuIGltcGxlbWVu
dCBgc2VyaWFsaXplYCB5b3Vyc2VsZiBhbmQKLSAgICAgICAgcmV0dXJuIGEgSlNPTiBoYXNoIG9m
IHlvdXIgY2hvb3NpbmcuCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuUG9z
dFNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIHNlcmlh
bGl6ZTogZnVuY3Rpb24ocG9zdCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGpzb24gPSB7
Ci0gICAgICAgICAgICAgIFBPU1RfVFRMOiBwb3N0LmdldCgndGl0bGUnKSwKLSAgICAgICAgICAg
ICAgUE9TVF9CRFk6IHBvc3QuZ2V0KCdib2R5JyksCi0gICAgICAgICAgICAgIFBPU1RfQ01TOiBw
b3N0LmdldCgnY29tbWVudHMnKS5tYXBQcm9wZXJ0eSgnaWQnKQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlSWQpIHsKLSAgICAgICAgICAgICAganNvbi5Q
T1NUX0lEXyA9IHBvc3QuZ2V0KCdpZCcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4ganNvbjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAg
ICAgICAjIyBDdXN0b21pemluZyBhbiBBcHAtV2lkZSBTZXJpYWxpemVyCi0KLSAgICAgICAgSWYg
eW91IHdhbnQgdG8gZGVmaW5lIGEgc2VyaWFsaXplciBmb3IgeW91ciBlbnRpcmUKLSAgICAgICAg
YXBwbGljYXRpb24sIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZSBgZWFjaEF0dHJpYnV0ZWAK
LSAgICAgICAgYW5kIGBlYWNoUmVsYXRpb25zaGlwYCBvbiB0aGUgcmVjb3JkLgotCi0gICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9IERTLkpT
T05TZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbihyZWNv
cmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBqc29uID0ge307Ci0KLSAgICAgICAgICAg
IHJlY29yZC5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAganNv
bltzZXJ2ZXJBdHRyaWJ1dGVOYW1lKG5hbWUpXSA9IHJlY29yZC5nZXQobmFtZSk7Ci0gICAgICAg
ICAgICB9KQotCi0gICAgICAgICAgICByZWNvcmQuZWFjaFJlbGF0aW9uc2hpcChmdW5jdGlvbihu
YW1lLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5raW5k
ID09PSAnaGFzTWFueScpIHsKLSAgICAgICAgICAgICAgICBqc29uW3NlcnZlckhhc01hbnlOYW1l
KG5hbWUpXSA9IHJlY29yZC5nZXQobmFtZSkubWFwQnkoJ2lkJyk7Ci0gICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlSWQpIHsK
LSAgICAgICAgICAgICAganNvbi5JRF8gPSByZWNvcmQuZ2V0KCdpZCcpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4ganNvbjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHNlcnZlckF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZS51bmRlcnNjb3JlKCkudG9VcHBlckNhc2UoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlcnZlckhhc01hbnlOYW1lKG5hbWUpIHsKLSAgICAg
ICAgICByZXR1cm4gc2VydmVyQXR0cmlidXRlTmFtZShuYW1lLnNpbmd1bGFyaXplKCkpICsgIl9J
RFMiOwotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMgc2VyaWFsaXplciB3
aWxsIGdlbmVyYXRlIEpTT04gdGhhdCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICB7Ci0gICAgICAgICAgIlRJVExFIjogIlJhaWxzIGlzIG9tYWthc2Ui
LAotICAgICAgICAgICJCT0RZIjogIlllcC4gT21ha2FzZS4iLAotICAgICAgICAgICJDT01NRU5U
X0lEUyI6IFsgMSwgMiwgMyBdCi0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgIyMg
VHdlYWtpbmcgdGhlIERlZmF1bHQgSlNPTgotCi0gICAgICAgIElmIHlvdSBqdXN0IHdhbnQgdG8g
ZG8gc29tZSBzbWFsbCB0d2Vha3Mgb24gdGhlIGRlZmF1bHQgSlNPTiwKLSAgICAgICAgeW91IGNh
biBjYWxsIHN1cGVyIGZpcnN0IGFuZCBtYWtlIHRoZSB0d2Vha3Mgb24gdGhlIHJldHVybmVkCi0g
ICAgICAgIEpTT04uCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuUG9zdFNl
cmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgIHNlcmlhbGl6
ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIganNvbiA9IHRo
aXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAgIGpzb24uc3Vi
amVjdCA9IGpzb24udGl0bGU7Ci0gICAgICAgICAgICBkZWxldGUganNvbi50aXRsZTsKLQotICAg
ICAgICAgICAgcmV0dXJuIGpzb247Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAg
YGBgCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFz
cyBvZiBEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCi0g
ICAgICAgIEByZXR1cm4ge09iamVjdH0ganNvbgotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZTog
ZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0gICAgICAgIHZhciBqc29uID0ge307Ci0KLSAg
ICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pbmNsdWRlSWQpIHsKLSAgICAgICAgICB2YXIg
aWQgPSBnZXQocmVjb3JkLCAnaWQnKTsKLQotICAgICAgICAgIGlmIChpZCkgewotICAgICAgICAg
ICAganNvbltnZXQodGhpcywgJ3ByaW1hcnlLZXknKV0gPSBpZDsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXksIGF0dHJp
YnV0ZSkgewotICAgICAgICAgIHRoaXMuc2VyaWFsaXplQXR0cmlidXRlKHJlY29yZCwganNvbiwg
a2V5LCBhdHRyaWJ1dGUpOwotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICByZWNvcmQuZWFj
aFJlbGF0aW9uc2hpcChmdW5jdGlvbihrZXksIHJlbGF0aW9uc2hpcCkgewotICAgICAgICAgIGlm
IChyZWxhdGlvbnNoaXAua2luZCA9PT0gJ2JlbG9uZ3NUbycpIHsKLSAgICAgICAgICAgIHRoaXMu
c2VyaWFsaXplQmVsb25nc1RvKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKTsKLSAgICAgICAg
ICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5raW5kID09PSAnaGFzTWFueScpIHsKLSAgICAgICAg
ICAgIHRoaXMuc2VyaWFsaXplSGFzTWFueShyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4ganNvbjsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgIGBzZXJpYWxpemVBdHRyaWJ1dGVgIGNhbiBiZSB1
c2VkIHRvIGN1c3RvbWl6ZSBob3cgYERTLmF0dHJgCi0gICAgICAgcHJvcGVydGllcyBhcmUgc2Vy
aWFsaXplZAotCi0gICAgICAgRm9yIGV4YW1wbGUgaWYgeW91IHdhbnRlZCB0byBlbnN1cmUgYWxs
IHlvdXIgYXR0cmlidXRlcyB3ZXJlIGFsd2F5cwotICAgICAgIHNlcmlhbGl6ZWQgYXMgcHJvcGVy
dGllcyBvbiBhbiBgYXR0cmlidXRlc2Agb2JqZWN0IHlvdSBjb3VsZAotICAgICAgIHdyaXRlOgot
Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgIEFwcC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIg
PSBEUy5KU09OU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICAgc2VyaWFsaXplQXR0cmlidXRl
OiBmdW5jdGlvbihyZWNvcmQsIGpzb24sIGtleSwgYXR0cmlidXRlcykgewotICAgICAgICAgICBq
c29uLmF0dHJpYnV0ZXMgPSBqc29uLmF0dHJpYnV0ZXMgfHwge307Ci0gICAgICAgICAgIHRoaXMu
X3N1cGVyKHJlY29yZCwganNvbi5hdHRyaWJ1dGVzLCBrZXksIGF0dHJpYnV0ZXMpOwotICAgICAg
ICAgfQotICAgICAgIH0pOwotICAgICAgIGBgYAotCi0gICAgICAgQG1ldGhvZCBzZXJpYWxpemVB
dHRyaWJ1dGUKLSAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICBAcGFyYW0g
e09iamVjdH0ganNvbgotICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICBAcGFyYW0g
e09iamVjdH0gYXR0cmlidXRlCi0gICAgICAqLwotICAgICAgc2VyaWFsaXplQXR0cmlidXRlOiBm
dW5jdGlvbihyZWNvcmQsIGpzb24sIGtleSwgYXR0cmlidXRlKSB7Ci0gICAgICAgIHZhciBhdHRy
cyA9IGdldCh0aGlzLCAnYXR0cnMnKTsKLSAgICAgICAgdmFyIHZhbHVlID0gZ2V0KHJlY29yZCwg
a2V5KSwgdHlwZSA9IGF0dHJpYnV0ZS50eXBlOwotCi0gICAgICAgIGlmICh0eXBlKSB7Ci0gICAg
ICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtRm9yKHR5cGUpOwotICAgICAgICAg
IHZhbHVlID0gdHJhbnNmb3JtLnNlcmlhbGl6ZSh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBpZiBwcm92aWRlZCwgdXNlIHRoZSBtYXBwaW5nIHByb3ZpZGVkIGJ5IGBhdHRyc2AgaW4K
LSAgICAgICAgLy8gdGhlIHNlcmlhbGl6ZXIKLSAgICAgICAga2V5ID0gYXR0cnMgJiYgYXR0cnNb
a2V5XSB8fCAodGhpcy5rZXlGb3JBdHRyaWJ1dGUgPyB0aGlzLmtleUZvckF0dHJpYnV0ZShrZXkp
IDoga2V5KTsKLQotICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgIGBzZXJpYWxpemVCZWxvbmdzVG9gIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6
ZSBob3cgYERTLmJlbG9uZ3NUb2AKLSAgICAgICBwcm9wZXJ0aWVzIGFyZSBzZXJpYWxpemVkLgot
Ci0gICAgICAgRXhhbXBsZQotCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgIEFwcC5Qb3N0
U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICBzZXJpYWxp
emVCZWxvbmdzVG86IGZ1bmN0aW9uKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0gICAg
ICAgICAgIHZhciBrZXkgPSByZWxhdGlvbnNoaXAua2V5OwotCi0gICAgICAgICAgIHZhciBiZWxv
bmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwotCi0gICAgICAgICAgIGtleSA9IHRoaXMua2V5Rm9y
UmVsYXRpb25zaGlwID8gdGhpcy5rZXlGb3JSZWxhdGlvbnNoaXAoa2V5LCAiYmVsb25nc1RvIikg
OiBrZXk7Ci0KLSAgICAgICAgICAganNvbltrZXldID0gRW1iZXIuaXNOb25lKGJlbG9uZ3NUbykg
PyBiZWxvbmdzVG8gOiBiZWxvbmdzVG8udG9KU09OKCk7Ci0gICAgICAgICB9Ci0gICAgICAgfSk7
Ci0gICAgICAgYGBgCi0KLSAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZUJlbG9uZ3NUbwotICAgICAg
IEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29uCi0g
ICAgICAgQHBhcmFtIHtPYmplY3R9IHJlbGF0aW9uc2hpcAotICAgICAgKi8KLSAgICAgIHNlcmlh
bGl6ZUJlbG9uZ3NUbzogZnVuY3Rpb24ocmVjb3JkLCBqc29uLCByZWxhdGlvbnNoaXApIHsKLSAg
ICAgICAgdmFyIGtleSA9IHJlbGF0aW9uc2hpcC5rZXk7Ci0KLSAgICAgICAgdmFyIGJlbG9uZ3NU
byA9IGdldChyZWNvcmQsIGtleSk7Ci0KLSAgICAgICAga2V5ID0gdGhpcy5rZXlGb3JSZWxhdGlv
bnNoaXAgPyB0aGlzLmtleUZvclJlbGF0aW9uc2hpcChrZXksICJiZWxvbmdzVG8iKSA6IGtleTsK
LQotICAgICAgICBpZiAoaXNOb25lKGJlbG9uZ3NUbykpIHsKLSAgICAgICAgICBqc29uW2tleV0g
PSBiZWxvbmdzVG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAganNvbltrZXldID0gZ2V0
KGJlbG9uZ3NUbywgJ2lkJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVsYXRpb25zaGlw
Lm9wdGlvbnMucG9seW1vcnBoaWMpIHsKLSAgICAgICAgICB0aGlzLnNlcmlhbGl6ZVBvbHltb3Jw
aGljVHlwZShyZWNvcmQsIGpzb24sIHJlbGF0aW9uc2hpcCk7Ci0gICAgICAgIH0KLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgIGBzZXJpYWxpemVIYXNNYW55YCBjYW4gYmUgdXNlZCB0byBj
dXN0b21pemUgaG93IGBEUy5oYXNNYW55YAotICAgICAgIHByb3BlcnRpZXMgYXJlIHNlcmlhbGl6
ZWQuCi0KLSAgICAgICBFeGFtcGxlCi0KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgQXBw
LlBvc3RTZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAgICAgIHNl
cmlhbGl6ZUhhc01hbnk6IGZ1bmN0aW9uKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0g
ICAgICAgICAgIHZhciBrZXkgPSByZWxhdGlvbnNoaXAua2V5OwotICAgICAgICAgICBpZiAoa2V5
ID09PSAnY29tbWVudHMnKSB7Ci0gICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgICB9KTsKLSAgICAgICBgYGAKLQotICAgICAg
IEBtZXRob2Qgc2VyaWFsaXplSGFzTWFueQotICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29y
ZAotICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29uCi0gICAgICAgQHBhcmFtIHtPYmplY3R9IHJl
bGF0aW9uc2hpcAotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZUhhc01hbnk6IGZ1bmN0aW9uKHJl
Y29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgIHZhciBrZXkgPSByZWxhdGlvbnNo
aXAua2V5OwotICAgICAgICB2YXIgcGF5bG9hZEtleSA9IHRoaXMua2V5Rm9yUmVsYXRpb25zaGlw
ID8gdGhpcy5rZXlGb3JSZWxhdGlvbnNoaXAoa2V5LCAiaGFzTWFueSIpIDoga2V5OwotICAgICAg
ICB2YXIgcmVsYXRpb25zaGlwVHlwZSA9IFJlbGF0aW9uc2hpcENoYW5nZS5kZXRlcm1pbmVSZWxh
dGlvbnNoaXBUeXBlKHJlY29yZC5jb25zdHJ1Y3RvciwgcmVsYXRpb25zaGlwKTsKLQotICAgICAg
ICBpZiAocmVsYXRpb25zaGlwVHlwZSA9PT0gJ21hbnlUb05vbmUnIHx8IHJlbGF0aW9uc2hpcFR5
cGUgPT09ICdtYW55VG9NYW55JykgewotICAgICAgICAgIGpzb25bcGF5bG9hZEtleV0gPSBnZXQo
cmVjb3JkLCBrZXkpLm1hcEJ5KCdpZCcpOwotICAgICAgICAgIC8vIFRPRE8gc3VwcG9ydCBmb3Ig
cG9seW1vcnBoaWMgbWFueVRvTm9uZSBhbmQgbWFueVRvTWFueSByZWxhdGlvbnNoaXBzCi0gICAg
ICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIG1l
dGhvZCB0byBjdXN0b21pemUgaG93IHBvbHltb3JwaGljIG9iamVjdHMgYXJlCi0gICAgICAgIHNl
cmlhbGl6ZWQuIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcG9seW1vcnBoaWMgaWYKLSAg
ICAgICAgYHtwb2x5bW9ycGhpYzogdHJ1ZX1gIGlzIHBhc3MgYXMgdGhlIHNlY29uZCBhcmd1bWVu
dCB0byB0aGUKLSAgICAgICAgYERTLmJlbG9uZ3NUb2AgZnVuY3Rpb24uCi0KLSAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkNvbW1lbnRTZXJpYWxp
emVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBzZXJpYWxpemVQb2x5
bW9ycGhpY1R5cGU6IGZ1bmN0aW9uKHJlY29yZCwganNvbiwgcmVsYXRpb25zaGlwKSB7Ci0gICAg
ICAgICAgICB2YXIga2V5ID0gcmVsYXRpb25zaGlwLmtleSwKLSAgICAgICAgICAgICAgICBiZWxv
bmdzVG8gPSBnZXQocmVjb3JkLCBrZXkpOwotICAgICAgICAgICAga2V5ID0gdGhpcy5rZXlGb3JB
dHRyaWJ1dGUgPyB0aGlzLmtleUZvckF0dHJpYnV0ZShrZXkpIDoga2V5OwotICAgICAgICAgICAg
anNvbltrZXkgKyAiX3R5cGUiXSA9IGJlbG9uZ3NUby5jb25zdHJ1Y3Rvci50eXBlS2V5OwotICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBzZXJp
YWxpemVQb2x5bW9ycGhpY1R5cGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0g
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBqc29uCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSByZWxh
dGlvbnNoaXAKLSAgICAgICovCi0gICAgICBzZXJpYWxpemVQb2x5bW9ycGhpY1R5cGU6IEVtYmVy
LkssCi0KLSAgICAgIC8vIEVYVFJBQ1QKLQotICAgICAgLyoqCi0gICAgICAgIFRoZSBgZXh0cmFj
dGAgbWV0aG9kIGlzIHVzZWQgdG8gZGVzZXJpYWxpemUgcGF5bG9hZCBkYXRhIGZyb20gdGhlCi0g
ICAgICAgIHNlcnZlci4gQnkgZGVmYXVsdCB0aGUgYEpTT05TZXJpYWxpemVyYCBkb2VzIG5vdCBw
dXNoIHRoZSByZWNvcmRzCi0gICAgICAgIGludG8gdGhlIHN0b3JlLiBIb3dldmVyIHJlY29yZHMg
dGhhdCBzdWJjbGFzcyBgSlNPTlNlcmlhbGl6ZXJgCi0gICAgICAgIHN1Y2ggYXMgdGhlIGBSRVNU
U2VyaWFsaXplcmAgbWF5IHB1c2ggcmVjb3JkcyBpbnRvIHRoZSBzdG9yZSBhcwotICAgICAgICBw
YXJ0IG9mIHRoZSBleHRyYWN0IGNhbGwuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgZGVsZWdhdGVz
IHRvIGEgbW9yZSBzcGVjaWZpYyBleHRyYWN0IG1ldGhvZCBiYXNlZCBvbgotICAgICAgICB0aGUg
YHJlcXVlc3RUeXBlYC4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0OwotICAgICAgICBzb2NrZXQub24oJ21lc3Nh
Z2UnLCBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgICAgdmFyIG1vZGVsTmFtZSA9IG1lc3Nh
Z2UubW9kZWw7Ci0gICAgICAgICAgdmFyIGRhdGEgPSBtZXNzYWdlLmRhdGE7Ci0gICAgICAgICAg
dmFyIHR5cGUgPSBzdG9yZS5tb2RlbEZvcihtb2RlbE5hbWUpOwotICAgICAgICAgIHZhciBzZXJp
YWxpemVyID0gc3RvcmUuc2VyaWFsaXplckZvcih0eXBlLnR5cGVLZXkpOwotICAgICAgICAgIHZh
ciByZWNvcmQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUsIGRhdGEsIGdldChkYXRh
LCAnaWQnKSwgJ3NpbmdsZScpOwotICAgICAgICAgIHN0b3JlLnB1c2gobW9kZWxOYW1lLCByZWNv
cmQpOwotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0
Ci0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xh
c3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAg
ICAgICAgQHBhcmFtIHtTdHJpbmcgb3IgTnVtYmVyfSBpZAotICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gcmVxdWVzdFR5cGUKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBqc29uIFRoZSBkZXNlcmlh
bGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3Q6IGZ1bmN0aW9uKHN0b3JlLCB0
eXBlLCBwYXlsb2FkLCBpZCwgcmVxdWVzdFR5cGUpIHsKLSAgICAgICAgdGhpcy5leHRyYWN0TWV0
YShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0KLSAgICAgICAgdmFyIHNwZWNpZmljRXh0cmFjdCA9
ICJleHRyYWN0IiArIHJlcXVlc3RUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVxdWVz
dFR5cGUuc3Vic3RyKDEpOwotICAgICAgICByZXR1cm4gdGhpc1tzcGVjaWZpY0V4dHJhY3RdKHN0
b3JlLCB0eXBlLCBwYXlsb2FkLCBpZCwgcmVxdWVzdFR5cGUpOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIGBleHRyYWN0RmluZEFsbGAgaXMgYSBob29rIGludG8gdGhlIGV4dHJhY3Qg
bWV0aG9kIHVzZWQgd2hlbiBhCi0gICAgICAgIGNhbGwgaXMgbWFkZSB0byBgRFMuU3RvcmUjZmlu
ZEFsbGAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMgYW4KLSAgICAgICAgYWxpYXMgZm9yIFtl
eHRyYWN0QXJyYXldKCNtZXRob2RfZXh0cmFjdEFycmF5KS4KLQotICAgICAgICBAbWV0aG9kIGV4
dHJhY3RGaW5kQWxsCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBw
YXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9
IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7QXJyYXl9IGFycmF5IEFuIGFycmF5IG9mIGRlc2Vy
aWFsaXplZCBvYmplY3RzCi0gICAgICAqLwotICAgICAgZXh0cmFjdEZpbmRBbGw6IGZ1bmN0aW9u
KHN0b3JlLCB0eXBlLCBwYXlsb2FkKXsKLSAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEFycmF5
KHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0gICAgICAvKioKLSAgICAgICAgYGV4
dHJhY3RGaW5kUXVlcnlgIGlzIGEgaG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdo
ZW4gYQotICAgICAgICBjYWxsIGlzIG1hZGUgdG8gYERTLlN0b3JlI2ZpbmRRdWVyeWAuIEJ5IGRl
ZmF1bHQgdGhpcyBtZXRob2QgaXMgYW4KLSAgICAgICAgYWxpYXMgZm9yIFtleHRyYWN0QXJyYXld
KCNtZXRob2RfZXh0cmFjdEFycmF5KS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RGaW5kUXVl
cnkKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJj
bGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAot
ICAgICAgICBAcmV0dXJuIHtBcnJheX0gYXJyYXkgQW4gYXJyYXkgb2YgZGVzZXJpYWxpemVkIG9i
amVjdHMKLSAgICAgICovCi0gICAgICBleHRyYWN0RmluZFF1ZXJ5OiBmdW5jdGlvbihzdG9yZSwg
dHlwZSwgcGF5bG9hZCl7Ci0gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RBcnJheShzdG9yZSwg
dHlwZSwgcGF5bG9hZCk7Ci0gICAgICB9LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0Rmlu
ZE1hbnlgIGlzIGEgaG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4gYQotICAg
ICAgICBjYWxsIGlzIG1hZGUgdG8gYERTLlN0b3JlI2ZpbmRNYW55YC4gQnkgZGVmYXVsdCB0aGlz
IG1ldGhvZCBpcwotICAgICAgICBhbGlhcyBmb3IgW2V4dHJhY3RBcnJheV0oI21ldGhvZF9leHRy
YWN0QXJyYXkpLgotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdEZpbmRNYW55Ci0gICAgICAgIEBw
YXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9k
ZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVy
biB7QXJyYXl9IGFycmF5IEFuIGFycmF5IG9mIGRlc2VyaWFsaXplZCBvYmplY3RzCi0gICAgICAq
LwotICAgICAgZXh0cmFjdEZpbmRNYW55OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCl7
Ci0gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RBcnJheShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7
Ci0gICAgICB9LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0RmluZEhhc01hbnlgIGlzIGEg
aG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4gYQotICAgICAgICBjYWxsIGlz
IG1hZGUgdG8gYERTLlN0b3JlI2ZpbmRIYXNNYW55YC4gQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCBp
cwotICAgICAgICBhbGlhcyBmb3IgW2V4dHJhY3RBcnJheV0oI21ldGhvZF9leHRyYWN0QXJyYXkp
LgotCi0gICAgICAgIEBtZXRob2QgZXh0cmFjdEZpbmRIYXNNYW55Ci0gICAgICAgIEBwYXJhbSB7
RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5
cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7QXJy
YXl9IGFycmF5IEFuIGFycmF5IG9mIGRlc2VyaWFsaXplZCBvYmplY3RzCi0gICAgICAqLwotICAg
ICAgZXh0cmFjdEZpbmRIYXNNYW55OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCl7Ci0g
ICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RBcnJheShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgYGV4dHJhY3RDcmVhdGVSZWNvcmRgIGlzIGEg
aG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4gYQotICAgICAgICBjYWxsIGlz
IG1hZGUgdG8gYERTLlN0b3JlI2NyZWF0ZVJlY29yZGAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2Qg
aXMKLSAgICAgICAgYWxpYXMgZm9yIFtleHRyYWN0U2F2ZV0oI21ldGhvZF9leHRyYWN0U2F2ZSku
Ci0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0Q3JlYXRlUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7
RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5
cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7T2Jq
ZWN0fSBqc29uIFRoZSBkZXNlcmlhbGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJh
Y3RDcmVhdGVSZWNvcmQ6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLmV4dHJhY3RTYXZlKHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0s
Ci0gICAgICAvKioKLSAgICAgICAgYGV4dHJhY3RVcGRhdGVSZWNvcmRgIGlzIGEgaG9vayBpbnRv
IHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4KLSAgICAgICAgYSBjYWxsIGlzIG1hZGUgdG8g
YERTLlN0b3JlI3VwZGF0ZWAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMgYWxpYXMKLSAgICAg
ICAgZm9yIFtleHRyYWN0U2F2ZV0oI21ldGhvZF9leHRyYWN0U2F2ZSkuCi0KLSAgICAgICAgQG1l
dGhvZCBleHRyYWN0VXBkYXRlUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3Jl
Ci0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBh
cmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBqc29uIFRoZSBk
ZXNlcmlhbGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RVcGRhdGVSZWNvcmQ6
IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmV4
dHJhY3RTYXZlKHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0gICAgICAvKioKLSAg
ICAgICAgYGV4dHJhY3REZWxldGVSZWNvcmRgIGlzIGEgaG9vayBpbnRvIHRoZSBleHRyYWN0IG1l
dGhvZCB1c2VkIHdoZW4KLSAgICAgICAgYSBjYWxsIGlzIG1hZGUgdG8gYERTLlN0b3JlI2RlbGV0
ZVJlY29yZGAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMKLSAgICAgICAgYWxpYXMgZm9yIFtl
eHRyYWN0U2F2ZV0oI21ldGhvZF9leHRyYWN0U2F2ZSkuCi0KLSAgICAgICAgQG1ldGhvZCBleHRy
YWN0RGVsZXRlUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAg
IEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBqc29uIFRoZSBkZXNlcmlhbGl6
ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3REZWxldGVSZWNvcmQ6IGZ1bmN0aW9u
KHN0b3JlLCB0eXBlLCBwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RTYXZl
KHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBg
ZXh0cmFjdEZpbmRgIGlzIGEgaG9vayBpbnRvIHRoZSBleHRyYWN0IG1ldGhvZCB1c2VkIHdoZW4K
LSAgICAgICAgYSBjYWxsIGlzIG1hZGUgdG8gYERTLlN0b3JlI2ZpbmRgLiBCeSBkZWZhdWx0IHRo
aXMgbWV0aG9kIGlzCi0gICAgICAgIGFsaWFzIGZvciBbZXh0cmFjdFNpbmdsZV0oI21ldGhvZF9l
eHRyYWN0U2luZ2xlKS4KLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RGaW5kCi0gICAgICAgIEBw
YXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9k
ZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBheWxvYWQKLSAgICAgICAgQHJldHVy
biB7T2JqZWN0fSBqc29uIFRoZSBkZXNlcmlhbGl6ZWQgcGF5bG9hZAotICAgICAgKi8KLSAgICAg
IGV4dHJhY3RGaW5kOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5leHRyYWN0U2luZ2xlKHN0b3JlLCB0eXBlLCBwYXlsb2FkKTsKLSAgICAgIH0s
Ci0gICAgICAvKioKLSAgICAgICAgYGV4dHJhY3RGaW5kQmVsb25nc1RvYCBpcyBhIGhvb2sgaW50
byB0aGUgZXh0cmFjdCBtZXRob2QgdXNlZCB3aGVuCi0gICAgICAgIGEgY2FsbCBpcyBtYWRlIHRv
IGBEUy5TdG9yZSNmaW5kQmVsb25nc1RvYC4gQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCBpcwotICAg
ICAgICBhbGlhcyBmb3IgW2V4dHJhY3RTaW5nbGVdKCNtZXRob2RfZXh0cmFjdFNpbmdsZSkuCi0K
LSAgICAgICAgQG1ldGhvZCBleHRyYWN0RmluZEJlbG9uZ3NUbwotICAgICAgICBAcGFyYW0ge0RT
LlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4ge09iamVj
dH0ganNvbiBUaGUgZGVzZXJpYWxpemVkIHBheWxvYWQKLSAgICAgICovCi0gICAgICBleHRyYWN0
RmluZEJlbG9uZ3NUbzogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuZXh0cmFjdFNpbmdsZShzdG9yZSwgdHlwZSwgcGF5bG9hZCk7Ci0gICAgICB9
LAotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0U2F2ZWAgaXMgYSBob29rIGludG8gdGhlIGV4
dHJhY3QgbWV0aG9kIHVzZWQgd2hlbiBhIGNhbGwKLSAgICAgICAgaXMgbWFkZSB0byBgRFMuTW9k
ZWwjc2F2ZWAuIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2QgaXMgYWxpYXMKLSAgICAgICAgZm9yIFtl
eHRyYWN0U2luZ2xlXSgjbWV0aG9kX2V4dHJhY3RTaW5nbGUpLgotCi0gICAgICAgIEBtZXRob2Qg
ZXh0cmFjdFNhdmUKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBh
cmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0g
cGF5bG9hZAotICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGpzb24gVGhlIGRlc2VyaWFsaXplZCBw
YXlsb2FkCi0gICAgICAqLwotICAgICAgZXh0cmFjdFNhdmU6IGZ1bmN0aW9uKHN0b3JlLCB0eXBl
LCBwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RTaW5nbGUoc3RvcmUsIHR5
cGUsIHBheWxvYWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0U2lu
Z2xlYCBpcyB1c2VkIHRvIGRlc2VyaWFsaXplIGEgc2luZ2xlIHJlY29yZCByZXR1cm5lZAotICAg
ICAgICBmcm9tIHRoZSBhZGFwdGVyLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVy
LmV4dGVuZCh7Ci0gICAgICAgICAgZXh0cmFjdFNpbmdsZTogZnVuY3Rpb24oc3RvcmUsIHR5cGUs
IHBheWxvYWQpIHsKLSAgICAgICAgICAgIHBheWxvYWQuY29tbWVudHMgPSBwYXlsb2FkLl9lbWJl
ZGRlZC5jb21tZW50OwotICAgICAgICAgICAgZGVsZXRlIHBheWxvYWQuX2VtYmVkZGVkOwotCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIoc3RvcmUsIHR5cGUsIHBheWxvYWQpOwotICAg
ICAgICAgIH0sCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIGV4
dHJhY3RTaW5nbGUKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBh
cmFtIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0g
cGF5bG9hZAotICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGpzb24gVGhlIGRlc2VyaWFsaXplZCBw
YXlsb2FkCi0gICAgICAqLwotICAgICAgZXh0cmFjdFNpbmdsZTogZnVuY3Rpb24oc3RvcmUsIHR5
cGUsIHBheWxvYWQpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHR5cGUsIHBheWxv
YWQpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0QXJyYXlgIGlzIHVz
ZWQgdG8gZGVzZXJpYWxpemUgYW4gYXJyYXkgb2YgcmVjb3JkcwotICAgICAgICByZXR1cm5lZCBm
cm9tIHRoZSBhZGFwdGVyLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVyLmV4dGVu
ZCh7Ci0gICAgICAgICAgZXh0cmFjdEFycmF5OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9h
ZCkgewotICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQubWFwKGZ1bmN0aW9uKGpzb24pIHsKLSAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNpbmdsZShzdG9yZSwgdHlwZSwganNvbik7
Ci0gICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
ICBgYGAKLQotICAgICAgICBAbWV0aG9kIGV4dHJhY3RBcnJheQotICAgICAgICBAcGFyYW0ge0RT
LlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBl
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4ge0FycmF5
fSBhcnJheSBBbiBhcnJheSBvZiBkZXNlcmlhbGl6ZWQgb2JqZWN0cwotICAgICAgKi8KLSAgICAg
IGV4dHJhY3RBcnJheTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIGFycmF5UGF5bG9hZCkgewotICAg
ICAgICB2YXIgc2VyaWFsaXplciA9IHRoaXM7Ci0gICAgICAgIHJldHVybiBtYXAuY2FsbChhcnJh
eVBheWxvYWQsIGZ1bmN0aW9uKHNpbmdsZVBheWxvYWQpIHsKLSAgICAgICAgICByZXR1cm4gc2Vy
aWFsaXplci5ub3JtYWxpemUodHlwZSwgc2luZ2xlUGF5bG9hZCk7Ci0gICAgICAgIH0pOwotICAg
ICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIGBleHRyYWN0TWV0YWAgaXMgdXNlZCB0byBkZXNl
cmlhbGl6ZSBhbnkgbWV0YSBpbmZvcm1hdGlvbiBpbiB0aGUKLSAgICAgICAgYWRhcHRlciBwYXls
b2FkLiBCeSBkZWZhdWx0IEVtYmVyIERhdGEgZXhwZWN0cyBtZXRhIGluZm9ybWF0aW9uIHRvCi0g
ICAgICAgIGJlIGxvY2F0ZWQgb24gdGhlIGBtZXRhYCBwcm9wZXJ0eSBvZiB0aGUgcGF5bG9hZCBv
YmplY3QuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgQXBwLlBvc3RTZXJpYWxpemVyID0gRFMuSlNPTlNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAg
ICAgICBleHRyYWN0TWV0YTogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHBheWxvYWQpIHsKLSAgICAg
ICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuX3BhZ2luYXRpb24pIHsKLSAgICAgICAgICAg
ICAgc3RvcmUubWV0YUZvclR5cGUodHlwZSwgcGF5bG9hZC5fcGFnaW5hdGlvbik7Ci0gICAgICAg
ICAgICAgIGRlbGV0ZSBwYXlsb2FkLl9wYWdpbmF0aW9uOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZXh0cmFj
dE1ldGEKLSAgICAgICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtz
dWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9h
ZAotICAgICAgKi8KLSAgICAgIGV4dHJhY3RNZXRhOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5
bG9hZCkgewotICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLm1ldGEpIHsKLSAgICAgICAg
ICBzdG9yZS5tZXRhRm9yVHlwZSh0eXBlLCBwYXlsb2FkLm1ldGEpOwotICAgICAgICAgIGRlbGV0
ZSBwYXlsb2FkLm1ldGE7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
IGBrZXlGb3JBdHRyaWJ1dGVgIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBydWxlcyBmb3IgaG93IHRv
IGNvbnZlcnQgYW4KLSAgICAgICBhdHRyaWJ1dGUgbmFtZSBpbiB5b3VyIG1vZGVsIHRvIGEga2V5
IGluIHlvdXIgSlNPTi4KLQotICAgICAgIEV4YW1wbGUKLQotICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICBBcHAuQXBwbGljYXRpb25TZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0
ZW5kKHsKLSAgICAgICAgIGtleUZvckF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cikgewotICAgICAg
ICAgICByZXR1cm4gRW1iZXIuU3RyaW5nLnVuZGVyc2NvcmUoYXR0cikudG9VcHBlckNhc2UoKTsK
LSAgICAgICAgIH0KLSAgICAgICB9KTsKLSAgICAgICBgYGAKLQotICAgICAgIEBtZXRob2Qga2V5
Rm9yQXR0cmlidXRlCi0gICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleQotICAgICAgIEByZXR1cm4g
e1N0cmluZ30gbm9ybWFsaXplZCBrZXkKLSAgICAgICovCi0KLQotICAgICAgLyoqCi0gICAgICAg
YGtleUZvclJlbGF0aW9uc2hpcGAgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgY3VzdG9tIGtleSB3
aGVuCi0gICAgICAgc2VyaWFsaXppbmcgcmVsYXRpb25zaGlwIHByb3BlcnRpZXMuIEJ5IGRlZmF1
bHQgYEpTT05TZXJpYWxpemVyYAotICAgICAgIGRvZXMgbm90IHByb3ZpZGUgYW4gaW1wbGVtZW50
YXRpb24gb2YgdGhpcyBtZXRob2QuCi0KLSAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICBBcHAuUG9zdFNlcmlhbGl6ZXIgPSBEUy5KU09OU2VyaWFsaXplci5l
eHRlbmQoewotICAgICAgICAgIGtleUZvclJlbGF0aW9uc2hpcDogZnVuY3Rpb24oa2V5LCByZWxh
dGlvbnNoaXApIHsKLSAgICAgICAgICAgICByZXR1cm4gJ3JlbF8nICsgRW1iZXIuU3RyaW5nLnVu
ZGVyc2NvcmUoa2V5KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQot
ICAgICAgIEBtZXRob2Qga2V5Rm9yUmVsYXRpb25zaGlwCi0gICAgICAgQHBhcmFtIHtTdHJpbmd9
IGtleQotICAgICAgIEBwYXJhbSB7U3RyaW5nfSByZWxhdGlvbnNoaXAgdHlwZQotICAgICAgIEBy
ZXR1cm4ge1N0cmluZ30gbm9ybWFsaXplZCBrZXkKLSAgICAgICovCi0KLSAgICAgIC8vIEhFTFBF
UlMKLQotICAgICAgLyoqCi0gICAgICAgQG1ldGhvZCB0cmFuc2Zvcm1Gb3IKLSAgICAgICBAcHJp
dmF0ZQotICAgICAgIEBwYXJhbSB7U3RyaW5nfSBhdHRyaWJ1dGVUeXBlCi0gICAgICAgQHBhcmFt
IHtCb29sZWFufSBza2lwQXNzZXJ0aW9uCi0gICAgICAgQHJldHVybiB7RFMuVHJhbnNmb3JtfSB0
cmFuc2Zvcm0KLSAgICAgICovCi0gICAgICB0cmFuc2Zvcm1Gb3I6IGZ1bmN0aW9uKGF0dHJpYnV0
ZVR5cGUsIHNraXBBc3NlcnRpb24pIHsKLSAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHRoaXMuY29u
dGFpbmVyLmxvb2t1cCgndHJhbnNmb3JtOicgKyBhdHRyaWJ1dGVUeXBlKTsKLSAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCB0cmFuc2Zvcm0gZm9yICciICsgYXR0cmlidXRlVHlw
ZSArICInIiwgc2tpcEFzc2VydGlvbiB8fCAhIXRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybiB0
cmFuc2Zvcm07Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gSlNPTlNlcmlhbGl6ZXI7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zZXJpYWxp
emVycy9yZXN0X3NlcmlhbGl6ZXIiLCAKLSAgWyIuL2pzb25fc2VyaWFsaXplciIsImVtYmVyLWlu
ZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJp
Y3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZh
ciBKU09OU2VyaWFsaXplciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBn
ZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLSAgICB2YXIgZm9yRWFjaCA9IEVtYmVy
LkFycmF5UG9seWZpbGxzLmZvckVhY2g7Ci0gICAgdmFyIG1hcCA9IEVtYmVyLkFycmF5UG9seWZp
bGxzLm1hcDsKLQotICAgIHZhciBzaW5ndWxhcml6ZSA9IF9fZGVwZW5kZW5jeTJfXy5zaW5ndWxh
cml6ZTsKLSAgICB2YXIgY2FtZWxpemUgPSBFbWJlci5TdHJpbmcuY2FtZWxpemU7Ci0KLSAgICBm
dW5jdGlvbiBjb2VyY2VJZChpZCkgewotICAgICAgcmV0dXJuIGlkID09IG51bGwgPyBudWxsIDog
aWQrJyc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICBOb3JtYWxseSwgYXBwbGljYXRpb25zIHdp
bGwgdXNlIHRoZSBgUkVTVFNlcmlhbGl6ZXJgIGJ5IGltcGxlbWVudGluZwotICAgICAgdGhlIGBu
b3JtYWxpemVgIG1ldGhvZCBhbmQgaW5kaXZpZHVhbCBub3JtYWxpemF0aW9ucyB1bmRlcgotICAg
ICAgYG5vcm1hbGl6ZUhhc2hgLgotCi0gICAgICBUaGlzIGFsbG93cyB5b3UgdG8gZG8gd2hhdGV2
ZXIga2luZCBvZiBtdW5naW5nIHlvdSBuZWVkLCBhbmQgaXMKLSAgICAgIGVzcGVjaWFsbHkgdXNl
ZnVsIGlmIHlvdXIgc2VydmVyIGlzIGluY29uc2lzdGVudCBhbmQgeW91IG5lZWQgdG8KLSAgICAg
IGRvIG11bmdpbmcgZGlmZmVyZW50bHkgZm9yIG1hbnkgZGlmZmVyZW50IGtpbmRzIG9mIHJlc3Bv
bnNlcy4KLQotICAgICAgU2VlIHRoZSBgbm9ybWFsaXplYCBkb2N1bWVudGF0aW9uIGZvciBtb3Jl
IGluZm9ybWF0aW9uLgotCi0gICAgICAjIyBBY3Jvc3MgdGhlIEJvYXJkIE5vcm1hbGl6YXRpb24K
LQotICAgICAgVGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgaG9va3MgdGhhdCB5b3UgbWlnaHQg
ZmluZCB1c2VmdWwgdG8gZGVmaW5lZAotICAgICAgYWNyb3NzLXRoZS1ib2FyZCBydWxlcyBmb3Ig
eW91ciBwYXlsb2FkLiBUaGVzZSBydWxlcyB3aWxsIGJlIHVzZWZ1bAotICAgICAgaWYgeW91ciBz
ZXJ2ZXIgaXMgY29uc2lzdGVudCwgb3IgaWYgeW91J3JlIGJ1aWxkaW5nIGFuIGFkYXB0ZXIgZm9y
Ci0gICAgICBhbiBpbmZyYXN0cnVjdHVyZSBzZXJ2aWNlLCBsaWtlIFBhcnNlLCBhbmQgd2FudCB0
byBlbmNvZGUgc2VydmljZQotICAgICAgY29udmVudGlvbnMuCi0KLSAgICAgIEZvciBleGFtcGxl
LCBpZiBhbGwgb2YgeW91ciBrZXlzIGFyZSB1bmRlcnNjb3JlZCBhbmQgYWxsLWNhcHMsIGJ1dAot
ICAgICAgb3RoZXJ3aXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbmFtZXMgeW91IHVzZSBpbiB5b3Vy
IG1vZGVscywgeW91Ci0gICAgICBjYW4gaW1wbGVtZW50IGFjcm9zcy10aGUtYm9hcmQgcnVsZXMg
Zm9yIGhvdyB0byBjb252ZXJ0IGFuIGF0dHJpYnV0ZQotICAgICAgbmFtZSBpbiB5b3VyIG1vZGVs
IHRvIGEga2V5IGluIHlvdXIgSlNPTi4KLQotICAgICAgYGBganMKLSAgICAgIEFwcC5BcHBsaWNh
dGlvblNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5leHRlbmQoewotICAgICAgICBrZXlG
b3JBdHRyaWJ1dGU6IGZ1bmN0aW9uKGF0dHIpIHsKLSAgICAgICAgICByZXR1cm4gRW1iZXIuU3Ry
aW5nLnVuZGVyc2NvcmUoYXR0cikudG9VcHBlckNhc2UoKTsKLSAgICAgICAgfQotICAgICAgfSk7
Ci0gICAgICBgYGAKLQotICAgICAgWW91IGNhbiBhbHNvIGltcGxlbWVudCBga2V5Rm9yUmVsYXRp
b25zaGlwYCwgd2hpY2ggdGFrZXMgdGhlIG5hbWUKLSAgICAgIG9mIHRoZSByZWxhdGlvbnNoaXAg
YXMgdGhlIGZpcnN0IHBhcmFtZXRlciwgYW5kIHRoZSBraW5kIG9mCi0gICAgICByZWxhdGlvbnNo
aXAgKGBoYXNNYW55YCBvciBgYmVsb25nc1RvYCkgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCi0K
LSAgICAgIEBjbGFzcyBSRVNUU2VyaWFsaXplcgotICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAg
QGV4dGVuZHMgRFMuSlNPTlNlcmlhbGl6ZXIKLSAgICAqLwotICAgIHZhciBSRVNUU2VyaWFsaXpl
ciA9IEpTT05TZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAvKioKLSAgICAgICAgSWYgeW91IHdh
bnQgdG8gZG8gbm9ybWFsaXphdGlvbnMgc3BlY2lmaWMgdG8gc29tZSBwYXJ0IG9mIHRoZSBwYXls
b2FkLCB5b3UKLSAgICAgICAgY2FuIHNwZWNpZnkgdGhvc2UgdW5kZXIgYG5vcm1hbGl6ZUhhc2hg
LgotCi0gICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIGpzb24gd2hlcmUg
dGhlIHRoZSBgSURzYCB1bmRlcgotICAgICAgICBgImNvbW1lbnRzImAgYXJlIHByb3ZpZGVkIGFz
IGBfaWRgIGluc3RlYWQgb2YgYGlkYC4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
IHsKLSAgICAgICAgICAicG9zdCI6IHsKLSAgICAgICAgICAgICJpZCI6IDEsCi0gICAgICAgICAg
ICAidGl0bGUiOiAiUmFpbHMgaXMgb21ha2FzZSIsCi0gICAgICAgICAgICAiY29tbWVudHMiOiBb
IDEsIDIgXQotICAgICAgICAgIH0sCi0gICAgICAgICAgImNvbW1lbnRzIjogW3sKLSAgICAgICAg
ICAgICJfaWQiOiAxLAotICAgICAgICAgICAgImJvZHkiOiAiRklSU1QiCi0gICAgICAgICAgfSwg
ewotICAgICAgICAgICAgIl9pZCI6IDIsCi0gICAgICAgICAgICAiYm9keSI6ICJSYWlscyBpcyB1
bmFnaSIKLSAgICAgICAgICB9XQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFlv
dSB1c2UgYG5vcm1hbGl6ZUhhc2hgIHRvIG5vcm1hbGl6ZSBqdXN0IHRoZSBjb21tZW50czoKLQot
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJF
U1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgbm9ybWFsaXplSGFzaDogewotICAgICAg
ICAgICAgY29tbWVudHM6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgICAgICAgaGFzaC5pZCA9
IGhhc2guX2lkOwotICAgICAgICAgICAgICBkZWxldGUgaGFzaC5faWQ7Ci0gICAgICAgICAgICAg
IHJldHVybiBoYXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgICAgIGBgYAotCi0gICAgICAgIFRoZSBrZXkgdW5kZXIgYG5vcm1hbGl6ZUhhc2hgIGlzIHVz
dWFsbHkganVzdCB0aGUgb3JpZ2luYWwga2V5Ci0gICAgICAgIHRoYXQgd2FzIGluIHRoZSBvcmln
aW5hbCBwYXlsb2FkLiBIb3dldmVyLCBrZXkgbmFtZXMgd2lsbCBiZQotICAgICAgICBpbXBhY3Rl
ZCBieSBhbnkgbW9kaWZpY2F0aW9ucyBkb25lIGluIHRoZSBgbm9ybWFsaXplUGF5bG9hZGAKLSAg
ICAgICAgbWV0aG9kLiBUaGUgYERTLlJFU1RTZXJpYWxpemVyYCdzIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24gbWFrZXMgbm8KLSAgICAgICAgY2hhbmdlcyB0byB0aGUgcGF5bG9hZCBrZXlzLgotCi0g
ICAgICAgIEBwcm9wZXJ0eSBub3JtYWxpemVIYXNoCi0gICAgICAgIEB0eXBlIHtPYmplY3R9Ci0g
ICAgICAgIEBkZWZhdWx0IHVuZGVmaW5lZAotICAgICAgKi8KLQotICAgICAgLyoqCi0gICAgICAg
IE5vcm1hbGl6ZXMgYSBwYXJ0IG9mIHRoZSBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkKLSAgICAg
ICAgdGhlIHNlcnZlci4gWW91IHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCwgbXVuZ2UgdGhl
IGhhc2gKLSAgICAgICAgYW5kIGNhbGwgc3VwZXIgaWYgeW91IGhhdmUgZ2VuZXJpYyBub3JtYWxp
emF0aW9uIHRvIGRvLgotCi0gICAgICAgIEl0IHRha2VzIHRoZSB0eXBlIG9mIHRoZSByZWNvcmQg
dGhhdCBpcyBiZWluZyBub3JtYWxpemVkCi0gICAgICAgIChhcyBhIERTLk1vZGVsIGNsYXNzKSwg
dGhlIHByb3BlcnR5IHdoZXJlIHRoZSBoYXNoIHdhcwotICAgICAgICBvcmlnaW5hbGx5IGZvdW5k
LCBhbmQgdGhlIGhhc2ggdG8gbm9ybWFsaXplLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBpZiB5
b3UgaGF2ZSBhIHBheWxvYWQgdGhhdCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgICAgICAgYGBganMK
LSAgICAgICAgewotICAgICAgICAgICJwb3N0IjogewotICAgICAgICAgICAgImlkIjogMSwKLSAg
ICAgICAgICAgICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAgICJjb21t
ZW50cyI6IFsgMSwgMiBdCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiY29tbWVudHMiOiBbewot
ICAgICAgICAgICAgImlkIjogMSwKLSAgICAgICAgICAgICJib2R5IjogIkZJUlNUIgotICAgICAg
ICAgIH0sIHsKLSAgICAgICAgICAgICJpZCI6IDIsCi0gICAgICAgICAgICAiYm9keSI6ICJSYWls
cyBpcyB1bmFnaSIKLSAgICAgICAgICB9XQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAg
ICAgIFRoZSBgbm9ybWFsaXplYCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgdGhyZWUgdGltZXM6Ci0K
LSAgICAgICAgKiBXaXRoIGBBcHAuUG9zdGAsIGAicG9zdHMiYCBhbmQgYHsgaWQ6IDEsIHRpdGxl
OiAiUmFpbHMgaXMgb21ha2FzZSIsIC4uLiB9YAotICAgICAgICAqIFdpdGggYEFwcC5Db21tZW50
YCwgYCJjb21tZW50cyJgIGFuZCBgeyBpZDogMSwgYm9keTogIkZJUlNUIiB9YAotICAgICAgICAq
IFdpdGggYEFwcC5Db21tZW50YCwgYCJjb21tZW50cyJgIGFuZCBgeyBpZDogMiwgYm9keTogIlJh
aWxzIGlzIHVuYWdpIiB9YAotCi0gICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kLCBmb3Ig
ZXhhbXBsZSwgdG8gbm9ybWFsaXplIHVuZGVyc2NvcmVkIGtleXMgdG8gY2FtZWxpemVkCi0gICAg
ICAgIG9yIG90aGVyIGdlbmVyYWwtcHVycG9zZSBub3JtYWxpemF0aW9ucy4KLQotICAgICAgICBJ
ZiB5b3Ugd2FudCB0byBkbyBub3JtYWxpemF0aW9ucyBzcGVjaWZpYyB0byBzb21lIHBhcnQgb2Yg
dGhlIHBheWxvYWQsIHlvdQotICAgICAgICBjYW4gc3BlY2lmeSB0aG9zZSB1bmRlciBgbm9ybWFs
aXplSGFzaGAuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBgSURzYCB1bmRlciBgImNv
bW1lbnRzImAgYXJlIHByb3ZpZGVkIGFzIGBfaWRgIGluc3RlYWQgb2YKLSAgICAgICAgYGlkYCwg
eW91IGNhbiBzcGVjaWZ5IGhvdyB0byBub3JtYWxpemUganVzdCB0aGUgY29tbWVudHM6Ci0KLSAg
ICAgICAgYGBganMKLSAgICAgICAgQXBwLlBvc3RTZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6
ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBub3JtYWxpemVIYXNoOiB7Ci0gICAgICAgICAgICBjb21t
ZW50czogZnVuY3Rpb24oaGFzaCkgewotICAgICAgICAgICAgICBoYXNoLmlkID0gaGFzaC5faWQ7
Ci0gICAgICAgICAgICAgIGRlbGV0ZSBoYXNoLl9pZDsKLSAgICAgICAgICAgICAgcmV0dXJuIGhh
c2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBg
Ci0KLSAgICAgICAgVGhlIGtleSB1bmRlciBgbm9ybWFsaXplSGFzaGAgaXMganVzdCB0aGUgb3Jp
Z2luYWwga2V5IHRoYXQgd2FzIGluIHRoZSBvcmlnaW5hbAotICAgICAgICBwYXlsb2FkLgotCi0g
ICAgICAgIEBtZXRob2Qgbm9ybWFsaXplCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMu
TW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGhhc2gKLSAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IHByb3AKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fQotICAgICAgKi8KLSAgICAg
IG5vcm1hbGl6ZTogZnVuY3Rpb24odHlwZSwgaGFzaCwgcHJvcCkgewotICAgICAgICB0aGlzLm5v
cm1hbGl6ZUlkKGhhc2gpOwotICAgICAgICB0aGlzLm5vcm1hbGl6ZUF0dHJpYnV0ZXModHlwZSwg
aGFzaCk7Ci0gICAgICAgIHRoaXMubm9ybWFsaXplUmVsYXRpb25zaGlwcyh0eXBlLCBoYXNoKTsK
LQotICAgICAgICB0aGlzLm5vcm1hbGl6ZVVzaW5nRGVjbGFyZWRNYXBwaW5nKHR5cGUsIGhhc2gp
OwotCi0gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZUhhc2ggJiYgdGhpcy5ub3JtYWxpemVIYXNo
W3Byb3BdKSB7Ci0gICAgICAgICAgdGhpcy5ub3JtYWxpemVIYXNoW3Byb3BdKGhhc2gpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5hcHBseVRyYW5zZm9ybXModHlwZSwgaGFzaCk7Ci0gICAg
ICAgIHJldHVybiBoYXNoOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFlvdSBjYW4g
dXNlIHRoaXMgbWV0aG9kIHRvIG5vcm1hbGl6ZSBhbGwgcGF5bG9hZHMsIHJlZ2FyZGxlc3Mgb2Yg
d2hldGhlciB0aGV5Ci0gICAgICAgIHJlcHJlc2VudCBzaW5nbGUgcmVjb3JkcyBvciBhbiBhcnJh
eS4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgdG8gcmVtb3ZlIHNvbWUg
ZXh0cmFuZW91cyBkYXRhIGZyb20gdGhlIHBheWxvYWQ6Ci0KLSAgICAgICAgYGBganMKLSAgICAg
ICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7
Ci0gICAgICAgICAgbm9ybWFsaXplUGF5bG9hZDogZnVuY3Rpb24ocGF5bG9hZCkgewotICAgICAg
ICAgICAgZGVsZXRlIHBheWxvYWQudmVyc2lvbjsKLSAgICAgICAgICAgIGRlbGV0ZSBwYXlsb2Fk
LnN0YXR1czsKLSAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwotICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2Qgbm9ybWFsaXplUGF5bG9hZAot
ICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAotICAgICAgICBAcmV0dXJuIHtPYmplY3R9
IHRoZSBub3JtYWxpemVkIHBheWxvYWQKLSAgICAgICovCi0gICAgICBub3JtYWxpemVQYXlsb2Fk
OiBmdW5jdGlvbihwYXlsb2FkKSB7Ci0gICAgICAgIHJldHVybiBwYXlsb2FkOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2Qgbm9ybWFsaXplQXR0cmlidXRlcwotICAgICAg
ICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIG5vcm1hbGl6ZUF0dHJpYnV0ZXM6IGZ1bmN0aW9u
KHR5cGUsIGhhc2gpIHsKLSAgICAgICAgdmFyIHBheWxvYWRLZXksIGtleTsKLQotICAgICAgICBp
ZiAodGhpcy5rZXlGb3JBdHRyaWJ1dGUpIHsKLSAgICAgICAgICB0eXBlLmVhY2hBdHRyaWJ1dGUo
ZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICBwYXlsb2FkS2V5ID0gdGhpcy5rZXlGb3JBdHRy
aWJ1dGUoa2V5KTsKLSAgICAgICAgICAgIGlmIChrZXkgPT09IHBheWxvYWRLZXkpIHsgcmV0dXJu
OyB9Ci0KLSAgICAgICAgICAgIGhhc2hba2V5XSA9IGhhc2hbcGF5bG9hZEtleV07Ci0gICAgICAg
ICAgICBkZWxldGUgaGFzaFtwYXlsb2FkS2V5XTsKLSAgICAgICAgICB9LCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2Qgbm9ybWFsaXplUmVs
YXRpb25zaGlwcwotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIG5vcm1hbGl6ZVJl
bGF0aW9uc2hpcHM6IGZ1bmN0aW9uKHR5cGUsIGhhc2gpIHsKLSAgICAgICAgdmFyIHBheWxvYWRL
ZXksIGtleTsKLQotICAgICAgICBpZiAodGhpcy5rZXlGb3JSZWxhdGlvbnNoaXApIHsKLSAgICAg
ICAgICB0eXBlLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24oa2V5LCByZWxhdGlvbnNoaXApIHsK
LSAgICAgICAgICAgIHBheWxvYWRLZXkgPSB0aGlzLmtleUZvclJlbGF0aW9uc2hpcChrZXksIHJl
bGF0aW9uc2hpcC5raW5kKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT09IHBheWxvYWRLZXkpIHsg
cmV0dXJuOyB9Ci0KLSAgICAgICAgICAgIGhhc2hba2V5XSA9IGhhc2hbcGF5bG9hZEtleV07Ci0g
ICAgICAgICAgICBkZWxldGUgaGFzaFtwYXlsb2FkS2V5XTsKLSAgICAgICAgICB9LCB0aGlzKTsK
LSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIENhbGxlZCB3aGVuIHRo
ZSBzZXJ2ZXIgaGFzIHJldHVybmVkIGEgcGF5bG9hZCByZXByZXNlbnRpbmcKLSAgICAgICAgYSBz
aW5nbGUgcmVjb3JkLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgYGZpbmRgIG9yIGBzYXZlYC4K
LQotICAgICAgICBJdCBpcyB5b3VyIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHRoZSBzZXJ2ZXIn
cyByZXNwb25zZSBpbnRvIHRoZSBub3JtYWxpemVkCi0gICAgICAgIGZvcm0gZXhwZWN0ZWQgYnkg
RW1iZXIgRGF0YS4KLQotICAgICAgICBJZiB5b3Ugd2FudCwgeW91IGNhbiBqdXN0IHJlc3RydWN0
dXJlIHRoZSB0b3AtbGV2ZWwgb2YgeW91ciBwYXlsb2FkLCBhbmQKLSAgICAgICAgZG8gbW9yZSBm
aW5lLWdyYWluZWQgbm9ybWFsaXphdGlvbiBpbiB0aGUgYG5vcm1hbGl6ZWAgbWV0aG9kLgotCi0g
ICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIHBheWxvYWQgbGlrZSB0aGlzIGluIHJl
c3BvbnNlIHRvIGEgcmVxdWVzdCBmb3IKLSAgICAgICAgcG9zdCAxOgotCi0gICAgICAgIGBgYGpz
Ci0gICAgICAgIHsKLSAgICAgICAgICAiaWQiOiAxLAotICAgICAgICAgICJ0aXRsZSI6ICJSYWls
cyBpcyBvbWFrYXNlIiwKLQotICAgICAgICAgICJfZW1iZWRkZWQiOiB7Ci0gICAgICAgICAgICAi
Y29tbWVudCI6IFt7Ci0gICAgICAgICAgICAgICJfaWQiOiAxLAotICAgICAgICAgICAgICAiY29t
bWVudF90aXRsZSI6ICJGSVJTVCIKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIl9p
ZCI6IDIsCi0gICAgICAgICAgICAgICJjb21tZW50X3RpdGxlIjogIlJhaWxzIGlzIHVuYWdpIgot
ICAgICAgICAgICAgfV0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgWW91IGNvdWxkIGltcGxlbWVudCBhIHNlcmlhbGl6ZXIgdGhhdCBsb29rcyBsaWtlIHRo
aXMgdG8gZ2V0IHlvdXIgcGF5bG9hZAotICAgICAgICBpbnRvIHNoYXBlOgotCi0gICAgICAgIGBg
YGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVu
ZCh7Ci0gICAgICAgICAgLy8gRmlyc3QsIHJlc3RydWN0dXJlIHRoZSB0b3AtbGV2ZWwgc28gaXQn
cyBvcmdhbml6ZWQgYnkgdHlwZQotICAgICAgICAgIGV4dHJhY3RTaW5nbGU6IGZ1bmN0aW9uKHN0
b3JlLCB0eXBlLCBwYXlsb2FkLCBpZCkgewotICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gcGF5
bG9hZC5fZW1iZWRkZWQuY29tbWVudDsKLSAgICAgICAgICAgIGRlbGV0ZSBwYXlsb2FkLl9lbWJl
ZGRlZDsKLQotICAgICAgICAgICAgcGF5bG9hZCA9IHsgY29tbWVudHM6IGNvbW1lbnRzLCBwb3N0
OiBwYXlsb2FkIH07Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIoc3RvcmUsIHR5cGUs
IHBheWxvYWQsIGlkKTsKLSAgICAgICAgICB9LAotCi0gICAgICAgICAgbm9ybWFsaXplSGFzaDog
ewotICAgICAgICAgICAgLy8gTmV4dCwgbm9ybWFsaXplIGluZGl2aWR1YWwgY29tbWVudHMsIHdo
aWNoIChhZnRlciBgZXh0cmFjdGApCi0gICAgICAgICAgICAvLyBhcmUgbm93IGxvY2F0ZWQgdW5k
ZXIgYGNvbW1lbnRzYAotICAgICAgICAgICAgY29tbWVudHM6IGZ1bmN0aW9uKGhhc2gpIHsKLSAg
ICAgICAgICAgICAgaGFzaC5pZCA9IGhhc2guX2lkOwotICAgICAgICAgICAgICBoYXNoLnRpdGxl
ID0gaGFzaC5jb21tZW50X3RpdGxlOwotICAgICAgICAgICAgICBkZWxldGUgaGFzaC5faWQ7Ci0g
ICAgICAgICAgICAgIGRlbGV0ZSBoYXNoLmNvbW1lbnRfdGl0bGU7Ci0gICAgICAgICAgICAgIHJl
dHVybiBoYXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSkKLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgV2hlbiB5b3UgY2FsbCBzdXBlciBmcm9tIHlvdXIgb3duIGltcGxl
bWVudGF0aW9uIG9mIGBleHRyYWN0U2luZ2xlYCwgdGhlCi0gICAgICAgIGJ1aWx0LWluIGltcGxl
bWVudGF0aW9uIHdpbGwgZmluZCB0aGUgcHJpbWFyeSByZWNvcmQgaW4geW91ciBub3JtYWxpemVk
Ci0gICAgICAgIHBheWxvYWQgYW5kIHB1c2ggdGhlIHJlbWFpbmluZyByZWNvcmRzIGludG8gdGhl
IHN0b3JlLgotCi0gICAgICAgIFRoZSBwcmltYXJ5IHJlY29yZCBpcyB0aGUgc2luZ2xlIGhhc2gg
Zm91bmQgdW5kZXIgYHBvc3RgIG9yIHRoZSBmaXJzdAotICAgICAgICBlbGVtZW50IG9mIHRoZSBg
cG9zdHNgIGFycmF5LgotCi0gICAgICAgIFRoZSBwcmltYXJ5IHJlY29yZCBoYXMgc3BlY2lhbCBt
ZWFuaW5nIHdoZW4gdGhlIHJlY29yZCBpcyBiZWluZyBjcmVhdGVkCi0gICAgICAgIGZvciB0aGUg
Zmlyc3QgdGltZSBvciB1cGRhdGVkIChgY3JlYXRlUmVjb3JkYCBvciBgdXBkYXRlUmVjb3JkYCku
IEluCi0gICAgICAgIHBhcnRpY3VsYXIsIGl0IHdpbGwgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzIG9m
IHRoZSByZWNvcmQgdGhhdCB3YXMgc2F2ZWQuCi0KLSAgICAgICAgQG1ldGhvZCBleHRyYWN0U2lu
Z2xlCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3Vi
Y2xhc3Mgb2YgRFMuTW9kZWx9IHByaW1hcnlUeXBlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBw
YXlsb2FkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSByZWNvcmRJZAotICAgICAgICBAcmV0dXJu
IHtPYmplY3R9IHRoZSBwcmltYXJ5IHJlc3BvbnNlIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0Ci0g
ICAgICAqLwotICAgICAgZXh0cmFjdFNpbmdsZTogZnVuY3Rpb24oc3RvcmUsIHByaW1hcnlUeXBl
LCBwYXlsb2FkLCByZWNvcmRJZCkgewotICAgICAgICBwYXlsb2FkID0gdGhpcy5ub3JtYWxpemVQ
YXlsb2FkKHBheWxvYWQpOwotICAgICAgICB2YXIgcHJpbWFyeVR5cGVOYW1lID0gcHJpbWFyeVR5
cGUudHlwZUtleSwKLSAgICAgICAgICAgIHByaW1hcnlSZWNvcmQ7Ci0KLSAgICAgICAgZm9yICh2
YXIgcHJvcCBpbiBwYXlsb2FkKSB7Ci0gICAgICAgICAgdmFyIHR5cGVOYW1lICA9IHRoaXMudHlw
ZUZvclJvb3QocHJvcCksCi0gICAgICAgICAgICAgIHR5cGUgPSBzdG9yZS5tb2RlbEZvcih0eXBl
TmFtZSksCi0gICAgICAgICAgICAgIGlzUHJpbWFyeSA9IHR5cGUudHlwZUtleSA9PT0gcHJpbWFy
eVR5cGVOYW1lOwotCi0gICAgICAgICAgLy8gbGVnYWN5IHN1cHBvcnQgZm9yIHNpbmd1bGFyIHJl
c291cmNlcwotICAgICAgICAgIGlmIChpc1ByaW1hcnkgJiYgRW1iZXIudHlwZU9mKHBheWxvYWRb
cHJvcF0pICE9PSAiYXJyYXkiICkgewotICAgICAgICAgICAgcHJpbWFyeVJlY29yZCA9IHRoaXMu
bm9ybWFsaXplKHByaW1hcnlUeXBlLCBwYXlsb2FkW3Byb3BdLCBwcm9wKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qanNoaW50IGxvb3BmdW5jOnRy
dWUqLwotICAgICAgICAgIGZvckVhY2guY2FsbChwYXlsb2FkW3Byb3BdLCBmdW5jdGlvbihoYXNo
KSB7Ci0gICAgICAgICAgICB2YXIgdHlwZU5hbWUgPSB0aGlzLnR5cGVGb3JSb290KHByb3ApLAot
ICAgICAgICAgICAgICAgIHR5cGUgPSBzdG9yZS5tb2RlbEZvcih0eXBlTmFtZSksCi0gICAgICAg
ICAgICAgICAgdHlwZVNlcmlhbGl6ZXIgPSBzdG9yZS5zZXJpYWxpemVyRm9yKHR5cGUpOwotCi0g
ICAgICAgICAgICBoYXNoID0gdHlwZVNlcmlhbGl6ZXIubm9ybWFsaXplKHR5cGUsIGhhc2gsIHBy
b3ApOwotCi0gICAgICAgICAgICB2YXIgaXNGaXJzdENyZWF0ZWRSZWNvcmQgPSBpc1ByaW1hcnkg
JiYgIXJlY29yZElkICYmICFwcmltYXJ5UmVjb3JkLAotICAgICAgICAgICAgICAgIGlzVXBkYXRl
ZFJlY29yZCA9IGlzUHJpbWFyeSAmJiBjb2VyY2VJZChoYXNoLmlkKSA9PT0gcmVjb3JkSWQ7Ci0K
LSAgICAgICAgICAgIC8vIGZpbmQgdGhlIHByaW1hcnkgcmVjb3JkLgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIEl0J3MgZWl0aGVyOgotICAgICAgICAgICAgLy8gKiB0aGUgcmVjb3Jk
IHdpdGggdGhlIHNhbWUgSUQgYXMgdGhlIG9yaWdpbmFsIHJlcXVlc3QKLSAgICAgICAgICAgIC8v
ICogaW4gdGhlIGNhc2Ugb2YgYSBuZXdseSBjcmVhdGVkIHJlY29yZCB0aGF0IGRpZG4ndCBoYXZl
IGFuIElELCB0aGUgZmlyc3QKLSAgICAgICAgICAgIC8vICAgcmVjb3JkIGluIHRoZSBBcnJheQot
ICAgICAgICAgICAgaWYgKGlzRmlyc3RDcmVhdGVkUmVjb3JkIHx8IGlzVXBkYXRlZFJlY29yZCkg
ewotICAgICAgICAgICAgICBwcmltYXJ5UmVjb3JkID0gaGFzaDsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIHN0b3JlLnB1c2godHlwZU5hbWUsIGhhc2gpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHBy
aW1hcnlSZWNvcmQ7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQ2FsbGVkIHdoZW4g
dGhlIHNlcnZlciBoYXMgcmV0dXJuZWQgYSBwYXlsb2FkIHJlcHJlc2VudGluZwotICAgICAgICBt
dWx0aXBsZSByZWNvcmRzLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgYGZpbmRBbGxgIG9yIGBm
aW5kUXVlcnlgLgotCi0gICAgICAgIEl0IGlzIHlvdXIgb3Bwb3J0dW5pdHkgdG8gY2xlYW4gdXAg
dGhlIHNlcnZlcidzIHJlc3BvbnNlIGludG8gdGhlIG5vcm1hbGl6ZWQKLSAgICAgICAgZm9ybSBl
eHBlY3RlZCBieSBFbWJlciBEYXRhLgotCi0gICAgICAgIElmIHlvdSB3YW50LCB5b3UgY2FuIGp1
c3QgcmVzdHJ1Y3R1cmUgdGhlIHRvcC1sZXZlbCBvZiB5b3VyIHBheWxvYWQsIGFuZAotICAgICAg
ICBkbyBtb3JlIGZpbmUtZ3JhaW5lZCBub3JtYWxpemF0aW9uIGluIHRoZSBgbm9ybWFsaXplYCBt
ZXRob2QuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgcGF5bG9hZCBsaWtl
IHRoaXMgaW4gcmVzcG9uc2UgdG8gYSByZXF1ZXN0IGZvcgotICAgICAgICBhbGwgcG9zdHM6Ci0K
LSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJfZW1iZWRkZWQiOiB7Ci0gICAg
ICAgICAgICAicG9zdCI6IFt7Ci0gICAgICAgICAgICAgICJpZCI6IDEsCi0gICAgICAgICAgICAg
ICJ0aXRsZSI6ICJSYWlscyBpcyBvbWFrYXNlIgotICAgICAgICAgICAgfSwgewotICAgICAgICAg
ICAgICAiaWQiOiAyLAotICAgICAgICAgICAgICAidGl0bGUiOiAiVGhlIFBhcmxleSBMZXR0ZXIi
Ci0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICJjb21tZW50IjogW3sKLSAgICAgICAgICAg
ICAgIl9pZCI6IDEsCi0gICAgICAgICAgICAgICJjb21tZW50X3RpdGxlIjogIlJhaWxzIGlzIHVu
YWdpIgotICAgICAgICAgICAgICAicG9zdF9pZCI6IDEKLSAgICAgICAgICAgIH0sIHsKLSAgICAg
ICAgICAgICAgIl9pZCI6IDIsCi0gICAgICAgICAgICAgICJjb21tZW50X3RpdGxlIjogIkRvbid0
IHRyZWFkIG9uIG1lIiwKLSAgICAgICAgICAgICAgInBvc3RfaWQiOiAyCi0gICAgICAgICAgICB9
XQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBZb3UgY291
bGQgaW1wbGVtZW50IGEgc2VyaWFsaXplciB0aGF0IGxvb2tzIGxpa2UgdGhpcyB0byBnZXQgeW91
ciBwYXlsb2FkCi0gICAgICAgIGludG8gc2hhcGU6Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAg
QXBwLlBvc3RTZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICAgICAg
ICAvLyBGaXJzdCwgcmVzdHJ1Y3R1cmUgdGhlIHRvcC1sZXZlbCBzbyBpdCdzIG9yZ2FuaXplZCBi
eSB0eXBlCi0gICAgICAgICAgLy8gYW5kIHRoZSBjb21tZW50cyBhcmUgbGlzdGVkIHVuZGVyIGEg
cG9zdCdzIGBjb21tZW50c2Aga2V5LgotICAgICAgICAgIGV4dHJhY3RBcnJheTogZnVuY3Rpb24o
c3RvcmUsIHR5cGUsIHBheWxvYWQpIHsKLSAgICAgICAgICAgIHZhciBwb3N0cyA9IHBheWxvYWQu
X2VtYmVkZGVkLnBvc3Q7Ci0gICAgICAgICAgICB2YXIgY29tbWVudHMgPSBbXTsKLSAgICAgICAg
ICAgIHZhciBwb3N0Q2FjaGUgPSB7fTsKLQotICAgICAgICAgICAgcG9zdHMuZm9yRWFjaChmdW5j
dGlvbihwb3N0KSB7Ci0gICAgICAgICAgICAgIHBvc3QuY29tbWVudHMgPSBbXTsKLSAgICAgICAg
ICAgICAgcG9zdENhY2hlW3Bvc3QuaWRdID0gcG9zdDsKLSAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICBwYXlsb2FkLl9lbWJlZGRlZC5jb21tZW50LmZvckVhY2goZnVuY3Rpb24oY29tbWVu
dCkgewotICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGNvbW1lbnQpOwotICAgICAgICAgICAg
ICBwb3N0Q2FjaGVbY29tbWVudC5wb3N0X2lkXS5jb21tZW50cy5wdXNoKGNvbW1lbnQpOwotICAg
ICAgICAgICAgICBkZWxldGUgY29tbWVudC5wb3N0X2lkOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXlsb2FkID0geyBjb21tZW50czogY29tbWVudHMsIHBvc3RzOiBwYXlsb2FkIH07
Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihzdG9yZSwgdHlwZSwgcGF5bG9hZCk7
Ci0gICAgICAgICAgfSwKLQotICAgICAgICAgIG5vcm1hbGl6ZUhhc2g6IHsKLSAgICAgICAgICAg
IC8vIE5leHQsIG5vcm1hbGl6ZSBpbmRpdmlkdWFsIGNvbW1lbnRzLCB3aGljaCAoYWZ0ZXIgYGV4
dHJhY3RgKQotICAgICAgICAgICAgLy8gYXJlIG5vdyBsb2NhdGVkIHVuZGVyIGBjb21tZW50c2AK
LSAgICAgICAgICAgIGNvbW1lbnRzOiBmdW5jdGlvbihoYXNoKSB7Ci0gICAgICAgICAgICAgIGhh
c2guaWQgPSBoYXNoLl9pZDsKLSAgICAgICAgICAgICAgaGFzaC50aXRsZSA9IGhhc2guY29tbWVu
dF90aXRsZTsKLSAgICAgICAgICAgICAgZGVsZXRlIGhhc2guX2lkOwotICAgICAgICAgICAgICBk
ZWxldGUgaGFzaC5jb21tZW50X3RpdGxlOwotICAgICAgICAgICAgICByZXR1cm4gaGFzaDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAgICAgIGBgYAotCi0gICAg
ICAgIFdoZW4geW91IGNhbGwgc3VwZXIgZnJvbSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBg
ZXh0cmFjdEFycmF5YCwgdGhlCi0gICAgICAgIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIHdpbGwg
ZmluZCB0aGUgcHJpbWFyeSBhcnJheSBpbiB5b3VyIG5vcm1hbGl6ZWQKLSAgICAgICAgcGF5bG9h
ZCBhbmQgcHVzaCB0aGUgcmVtYWluaW5nIHJlY29yZHMgaW50byB0aGUgc3RvcmUuCi0KLSAgICAg
ICAgVGhlIHByaW1hcnkgYXJyYXkgaXMgdGhlIGFycmF5IGZvdW5kIHVuZGVyIGBwb3N0c2AuCi0K
LSAgICAgICAgVGhlIHByaW1hcnkgcmVjb3JkIGhhcyBzcGVjaWFsIG1lYW5pbmcgd2hlbiByZXNw
b25kaW5nIHRvIGBmaW5kUXVlcnlgCi0gICAgICAgIG9yIGBmaW5kSGFzTWFueWAuIEluIHBhcnRp
Y3VsYXIsIHRoZSBwcmltYXJ5IGFycmF5IHdpbGwgYmVjb21lIHRoZQotICAgICAgICBsaXN0IG9m
IHJlY29yZHMgaW4gdGhlIHJlY29yZCBhcnJheSB0aGF0IGtpY2tlZCBvZmYgdGhlIHJlcXVlc3Qu
Ci0KLSAgICAgICAgSWYgeW91ciBwcmltYXJ5IGFycmF5IGNvbnRhaW5zIHNlY29uZGFyeSAoZW1i
ZWRkZWQpIHJlY29yZHMgb2YgdGhlIHNhbWUgdHlwZSwKLSAgICAgICAgeW91IGNhbm5vdCBwbGFj
ZSB0aGVzZSBpbnRvIHRoZSBwcmltYXJ5IGFycmF5IGBwb3N0c2AuIEluc3RlYWQsIHBsYWNlIHRo
ZQotICAgICAgICBzZWNvbmRhcnkgaXRlbXMgaW50byBhbiB1bmRlcnNjb3JlIHByZWZpeGVkIHBy
b3BlcnR5IGBfcG9zdHNgLCB3aGljaCB3aWxsCi0gICAgICAgIHB1c2ggdGhlc2UgaXRlbXMgaW50
byB0aGUgc3RvcmUgYW5kIHdpbGwgbm90IGFmZmVjdCB0aGUgcmVzdWx0aW5nIHF1ZXJ5LgotCi0g
ICAgICAgIEBtZXRob2QgZXh0cmFjdEFycmF5Ci0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0
b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHByaW1hcnlUeXBlCi0g
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgIEByZXR1cm4ge0FycmF5fSBU
aGUgcHJpbWFyeSBhcnJheSB0aGF0IHdhcyByZXR1cm5lZCBpbiByZXNwb25zZQotICAgICAgICAg
IHRvIHRoZSBvcmlnaW5hbCBxdWVyeS4KLSAgICAgICovCi0gICAgICBleHRyYWN0QXJyYXk6IGZ1
bmN0aW9uKHN0b3JlLCBwcmltYXJ5VHlwZSwgcGF5bG9hZCkgewotICAgICAgICBwYXlsb2FkID0g
dGhpcy5ub3JtYWxpemVQYXlsb2FkKHBheWxvYWQpOwotCi0gICAgICAgIHZhciBwcmltYXJ5VHlw
ZU5hbWUgPSBwcmltYXJ5VHlwZS50eXBlS2V5LAotICAgICAgICAgICAgcHJpbWFyeUFycmF5Owot
Ci0gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGF5bG9hZCkgewotICAgICAgICAgIHZhciB0eXBl
S2V5ID0gcHJvcCwKLSAgICAgICAgICAgICAgZm9yY2VkU2Vjb25kYXJ5ID0gZmFsc2U7Ci0KLSAg
ICAgICAgICBpZiAocHJvcC5jaGFyQXQoMCkgPT09ICdfJykgewotICAgICAgICAgICAgZm9yY2Vk
U2Vjb25kYXJ5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHR5cGVLZXkgPSBwcm9wLnN1YnN0cigxKTsK
LSAgICAgICAgICB9Ci0KLSAgICAgICAgICB2YXIgdHlwZU5hbWUgPSB0aGlzLnR5cGVGb3JSb290
KHR5cGVLZXkpLAotICAgICAgICAgICAgICB0eXBlID0gc3RvcmUubW9kZWxGb3IodHlwZU5hbWUp
LAotICAgICAgICAgICAgICB0eXBlU2VyaWFsaXplciA9IHN0b3JlLnNlcmlhbGl6ZXJGb3IodHlw
ZSksCi0gICAgICAgICAgICAgIGlzUHJpbWFyeSA9ICghZm9yY2VkU2Vjb25kYXJ5ICYmICh0eXBl
LnR5cGVLZXkgPT09IHByaW1hcnlUeXBlTmFtZSkpOwotCi0gICAgICAgICAgLypqc2hpbnQgbG9v
cGZ1bmM6dHJ1ZSovCi0gICAgICAgICAgdmFyIG5vcm1hbGl6ZWRBcnJheSA9IG1hcC5jYWxsKHBh
eWxvYWRbcHJvcF0sIGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgICAgIHJldHVybiB0eXBlU2Vy
aWFsaXplci5ub3JtYWxpemUodHlwZSwgaGFzaCwgcHJvcCk7Ci0gICAgICAgICAgfSwgdGhpcyk7
Ci0KLSAgICAgICAgICBpZiAoaXNQcmltYXJ5KSB7Ci0gICAgICAgICAgICBwcmltYXJ5QXJyYXkg
PSBub3JtYWxpemVkQXJyYXk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0b3Jl
LnB1c2hNYW55KHR5cGVOYW1lLCBub3JtYWxpemVkQXJyYXkpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBwcmltYXJ5QXJyYXk7Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBwdXNoIGEgcGF5bG9hZCBjb250
YWluaW5nIHRvcC1sZXZlbAotICAgICAgICBjb2xsZWN0aW9ucyBvZiByZWNvcmRzIG9yZ2FuaXpl
ZCBwZXIgdHlwZS4KLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInBvc3Rz
IjogW3sKLSAgICAgICAgICAgICJpZCI6ICIxIiwKLSAgICAgICAgICAgICJ0aXRsZSI6ICJSYWls
cyBpcyBvbWFrYXNlIiwKLSAgICAgICAgICAgICJhdXRob3IiLCAiMSIsCi0gICAgICAgICAgICAi
Y29tbWVudHMiOiBbICIxIiBdCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgImNvbW1lbnRzIjog
W3sKLSAgICAgICAgICAgICJpZCI6ICIxIiwKLSAgICAgICAgICAgICJib2R5IjogIkZJUlNUIgot
ICAgICAgICAgIH1dLAotICAgICAgICAgICJ1c2VycyI6IFt7Ci0gICAgICAgICAgICAiaWQiOiAi
MSIsCi0gICAgICAgICAgICAibmFtZSI6ICJAZDJoIgotICAgICAgICAgIH1dCi0gICAgICAgIH0K
LSAgICAgICAgYGBgCi0KLSAgICAgICAgSXQgd2lsbCBmaXJzdCBub3JtYWxpemUgdGhlIHBheWxv
YWQsIHNvIHlvdSBjYW4gdXNlIHRoaXMgdG8gcHVzaAotICAgICAgICBpbiBkYXRhIHN0cmVhbWlu
ZyBpbiBmcm9tIHlvdXIgc2VydmVyIHN0cnVjdHVyZWQgdGhlIHNhbWUgd2F5Ci0gICAgICAgIHRo
YXQgZmV0Y2hlcyBhbmQgc2F2ZXMgYXJlIHN0cnVjdHVyZWQuCi0KLSAgICAgICAgQG1ldGhvZCBw
dXNoUGF5bG9hZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3JlfSBzdG9yZQotICAgICAgICBAcGFy
YW0ge09iamVjdH0gcGF5bG9hZAotICAgICAgKi8KLSAgICAgIHB1c2hQYXlsb2FkOiBmdW5jdGlv
bihzdG9yZSwgcGF5bG9hZCkgewotICAgICAgICBwYXlsb2FkID0gdGhpcy5ub3JtYWxpemVQYXls
b2FkKHBheWxvYWQpOwotCi0gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGF5bG9hZCkgewotICAg
ICAgICAgIHZhciB0eXBlTmFtZSA9IHRoaXMudHlwZUZvclJvb3QocHJvcCksCi0gICAgICAgICAg
ICAgIHR5cGUgPSBzdG9yZS5tb2RlbEZvcih0eXBlTmFtZSksCi0gICAgICAgICAgICAgIHR5cGVT
ZXJpYWxpemVyID0gc3RvcmUuc2VyaWFsaXplckZvcih0eXBlKTsKLQotICAgICAgICAgIC8qanNo
aW50IGxvb3BmdW5jOnRydWUqLwotICAgICAgICAgIHZhciBub3JtYWxpemVkQXJyYXkgPSBtYXAu
Y2FsbChFbWJlci5tYWtlQXJyYXkocGF5bG9hZFtwcm9wXSksIGZ1bmN0aW9uKGhhc2gpIHsKLSAg
ICAgICAgICAgIHJldHVybiB0eXBlU2VyaWFsaXplci5ub3JtYWxpemUodHlwZSwgaGFzaCwgcHJv
cCk7Ci0gICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgICBzdG9yZS5wdXNoTWFueSh0eXBl
TmFtZSwgbm9ybWFsaXplZEFycmF5KTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY29udmVydCBlYWNoIEpTT04gcm9vdCBr
ZXkgaW4gdGhlIHBheWxvYWQKLSAgICAgICAgaW50byBhIHR5cGVLZXkgdGhhdCBpdCBjYW4gdXNl
IHRvIGxvb2sgdXAgdGhlIGFwcHJvcHJpYXRlIG1vZGVsIGZvcgotICAgICAgICB0aGF0IHBhcnQg
b2YgdGhlIHBheWxvYWQuIEJ5IGRlZmF1bHQgdGhlIHR5cGVLZXkgZm9yIGEgbW9kZWwgaXMgaXRz
Ci0gICAgICAgIG5hbWUgaW4gY2FtZWxDYXNlLCBzbyBpZiB5b3VyIEpTT04gcm9vdCBrZXkgaXMg
J2Zhc3QtY2FyJyB5b3Ugd291bGQKLSAgICAgICAgdXNlIHR5cGVGb3JSb290IHRvIGNvbnZlcnQg
aXQgdG8gJ2Zhc3RDYXInIHNvIHRoYXQgRW1iZXIgRGF0YSBmaW5kcwotICAgICAgICB0aGUgYEZh
c3RDYXJgIG1vZGVsLgotCi0gICAgICAgIElmIHlvdSBkaXZlcmdlIGZyb20gdGhpcyBub3JtIHlv
dSBzaG91bGQgYWxzbyBjb25zaWRlciBjaGFuZ2VzIHRvCi0gICAgICAgIHN0b3JlLl9ub3JtYWxp
emVUeXBlS2V5IGFzIHdlbGwuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIHlvdXIgc2VydmVyIG1h
eSByZXR1cm4gcHJlZml4ZWQgcm9vdCBrZXlzIGxpa2Ugc286Ci0KLSAgICAgICAgYGBganMKLSAg
ICAgICAgewotICAgICAgICAgICJyZXNwb25zZS1mYXN0LWNhciI6IHsKLSAgICAgICAgICAgICJp
ZCI6ICIxIiwKLSAgICAgICAgICAgICJuYW1lIjogImNvcnZldHRlIgotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBgYGAKLQotICAgICAgICBJbiBvcmRlciBmb3IgRW1iZXIgRGF0YSB0
byBrbm93IHRoYXQgdGhlIG1vZGVsIGNvcnJlc3BvbmRpbmcgdG8KLSAgICAgICAgdGhlICdyZXNw
b25zZS1mYXN0LWNhcicgaGFzaCBpcyBgRmFzdENhcmAgKHR5cGVLZXk6ICdmYXN0Q2FyJyksCi0g
ICAgICAgIHlvdSBjYW4gb3ZlcnJpZGUgdHlwZUZvclJvb3QgdG8gY29udmVydCAncmVzcG9uc2Ut
ZmFzdC1jYXInIHRvCi0gICAgICAgICdmYXN0Q2FyJyBsaWtlIHNvOgotCi0gICAgICAgIGBgYGpz
Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIgPSBEUy5SRVNUU2VyaWFsaXplci5l
eHRlbmQoewotICAgICAgICAgIHR5cGVGb3JSb290OiBmdW5jdGlvbihyb290KSB7Ci0gICAgICAg
ICAgICAvLyAncmVzcG9uc2UtZmFzdC1jYXInIHNob3VsZCBiZWNvbWUgJ2Zhc3QtY2FyJwotICAg
ICAgICAgICAgdmFyIHN1YlJvb3QgPSByb290LnN1YnN0cmluZyg5KTsKLQotICAgICAgICAgICAg
Ly8gX3N1cGVyIG5vcm1hbGl6ZXMgJ2Zhc3QtY2FyJyB0byAnZmFzdENhcicKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zdXBlcihzdWJSb290KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
ICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHR5cGVGb3JSb290Ci0gICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBrZXkKLSAgICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgbW9kZWwncyB0eXBl
S2V5Ci0gICAgICAqLwotICAgICAgdHlwZUZvclJvb3Q6IGZ1bmN0aW9uKGtleSkgewotICAgICAg
ICByZXR1cm4gY2FtZWxpemUoc2luZ3VsYXJpemUoa2V5KSk7Ci0gICAgICB9LAotCi0gICAgICAv
LyBTRVJJQUxJWkUKLQotICAgICAgLyoqCi0gICAgICAgIENhbGxlZCB3aGVuIGEgcmVjb3JkIGlz
IHNhdmVkIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlCi0gICAgICAgIHJlY29yZCBpbnRvIEpTT04u
Ci0KLSAgICAgICAgQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIEpTT04gb2JqZWN0IHdpdGggYSBr
ZXkgZm9yCi0gICAgICAgIGVhY2ggYXR0cmlidXRlIGFuZCBiZWxvbmdzVG8gcmVsYXRpb25zaGlw
LgotCi0gICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIG1vZGVsOgotCi0gICAgICAg
IGBgYGpzCi0gICAgICAgIEFwcC5Db21tZW50ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAg
ICB0aXRsZTogRFMuYXR0cigpLAotICAgICAgICAgIGJvZHk6IERTLmF0dHIoKSwKLQotICAgICAg
ICAgIGF1dGhvcjogRFMuYmVsb25nc1RvKCd1c2VyJykKLSAgICAgICAgfSk7Ci0gICAgICAgIGBg
YAotCi0gICAgICAgIFRoZSBkZWZhdWx0IHNlcmlhbGl6YXRpb24gd291bGQgY3JlYXRlIGEgSlNP
TiBvYmplY3QgbGlrZToKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgInRp
dGxlIjogIlJhaWxzIGlzIHVuYWdpIiwKLSAgICAgICAgICAiYm9keSI6ICJSYWlscz8gT21ha2Fz
ZT8gT19PIiwKLSAgICAgICAgICAiYXV0aG9yIjogMTIKLSAgICAgICAgfQotICAgICAgICBgYGAK
LQotICAgICAgICBCeSBkZWZhdWx0LCBhdHRyaWJ1dGVzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcy1p
cywgdW5sZXNzCi0gICAgICAgIHlvdSBzcGVjaWZpZWQgYW4gYXR0cmlidXRlIHR5cGUgKGBEUy5h
dHRyKCdkYXRlJylgKS4gSWYKLSAgICAgICAgeW91IHNwZWNpZnkgYSB0cmFuc2Zvcm0sIHRoZSBK
YXZhU2NyaXB0IHZhbHVlIHdpbGwgYmUKLSAgICAgICAgc2VyaWFsaXplZCB3aGVuIGluc2VydGVk
IGludG8gdGhlIEpTT04gaGFzaC4KLQotICAgICAgICBCeSBkZWZhdWx0LCBiZWxvbmdzLXRvIHJl
bGF0aW9uc2hpcHMgYXJlIGNvbnZlcnRlZCBpbnRvCi0gICAgICAgIElEcyB3aGVuIGluc2VydGVk
IGludG8gdGhlIEpTT04gaGFzaC4KLQotICAgICAgICAjIyBJRHMKLQotICAgICAgICBgc2VyaWFs
aXplYCB0YWtlcyBhbiBvcHRpb25zIGhhc2ggd2l0aCBhIHNpbmdsZSBvcHRpb246Ci0gICAgICAg
IGBpbmNsdWRlSWRgLiBJZiB0aGlzIG9wdGlvbiBpcyBgdHJ1ZWAsIGBzZXJpYWxpemVgIHdpbGws
Ci0gICAgICAgIGJ5IGRlZmF1bHQgaW5jbHVkZSB0aGUgSUQgaW4gdGhlIEpTT04gb2JqZWN0IGl0
IGJ1aWxkcy4KLQotICAgICAgICBUaGUgYWRhcHRlciBwYXNzZXMgaW4gYGluY2x1ZGVJZDogdHJ1
ZWAgd2hlbiBzZXJpYWxpemluZwotICAgICAgICBhIHJlY29yZCBmb3IgYGNyZWF0ZVJlY29yZGAs
IGJ1dCBub3QgZm9yIGB1cGRhdGVSZWNvcmRgLgotCi0gICAgICAgICMjIEN1c3RvbWl6YXRpb24K
LQotICAgICAgICBZb3VyIHNlcnZlciBtYXkgZXhwZWN0IGEgZGlmZmVyZW50IEpTT04gZm9ybWF0
IHRoYW4gdGhlCi0gICAgICAgIGJ1aWx0LWluIHNlcmlhbGl6YXRpb24gZm9ybWF0LgotCi0gICAg
ICAgIEluIHRoYXQgY2FzZSwgeW91IGNhbiBpbXBsZW1lbnQgYHNlcmlhbGl6ZWAgeW91cnNlbGYg
YW5kCi0gICAgICAgIHJldHVybiBhIEpTT04gaGFzaCBvZiB5b3VyIGNob29zaW5nLgotCi0gICAg
ICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVy
LmV4dGVuZCh7Ci0gICAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbihwb3N0LCBvcHRpb25zKSB7
Ci0gICAgICAgICAgICB2YXIganNvbiA9IHsKLSAgICAgICAgICAgICAgUE9TVF9UVEw6IHBvc3Qu
Z2V0KCd0aXRsZScpLAotICAgICAgICAgICAgICBQT1NUX0JEWTogcG9zdC5nZXQoJ2JvZHknKSwK
LSAgICAgICAgICAgICAgUE9TVF9DTVM6IHBvc3QuZ2V0KCdjb21tZW50cycpLm1hcFByb3BlcnR5
KCdpZCcpCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVJ
ZCkgewotICAgICAgICAgICAgICBqc29uLlBPU1RfSURfID0gcG9zdC5nZXQoJ2lkJyk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBqc29uOwotICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgICMjIEN1c3RvbWl6aW5nIGFuIEFwcC1XaWRl
IFNlcmlhbGl6ZXIKLQotICAgICAgICBJZiB5b3Ugd2FudCB0byBkZWZpbmUgYSBzZXJpYWxpemVy
IGZvciB5b3VyIGVudGlyZQotICAgICAgICBhcHBsaWNhdGlvbiwgeW91J2xsIHByb2JhYmx5IHdh
bnQgdG8gdXNlIGBlYWNoQXR0cmlidXRlYAotICAgICAgICBhbmQgYGVhY2hSZWxhdGlvbnNoaXBg
IG9uIHRoZSByZWNvcmQuCi0KLSAgICAgICAgYGBganMKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9u
U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgc2VyaWFs
aXplOiBmdW5jdGlvbihyZWNvcmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBqc29uID0g
e307Ci0KLSAgICAgICAgICAgIHJlY29yZC5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKG5hbWUpIHsK
LSAgICAgICAgICAgICAganNvbltzZXJ2ZXJBdHRyaWJ1dGVOYW1lKG5hbWUpXSA9IHJlY29yZC5n
ZXQobmFtZSk7Ci0gICAgICAgICAgICB9KQotCi0gICAgICAgICAgICByZWNvcmQuZWFjaFJlbGF0
aW9uc2hpcChmdW5jdGlvbihuYW1lLCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgICAgICAgaWYg
KHJlbGF0aW9uc2hpcC5raW5kID09PSAnaGFzTWFueScpIHsKLSAgICAgICAgICAgICAgICBqc29u
W3NlcnZlckhhc01hbnlOYW1lKG5hbWUpXSA9IHJlY29yZC5nZXQobmFtZSkubWFwQnkoJ2lkJyk7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAob3B0
aW9ucy5pbmNsdWRlSWQpIHsKLSAgICAgICAgICAgICAganNvbi5JRF8gPSByZWNvcmQuZ2V0KCdp
ZCcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4ganNvbjsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGZ1bmN0aW9uIHNlcnZlckF0dHJpYnV0ZU5hbWUo
YXR0cmlidXRlKSB7Ci0gICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS51bmRlcnNjb3JlKCkudG9V
cHBlckNhc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlcnZlckhhc01hbnlO
YW1lKG5hbWUpIHsKLSAgICAgICAgICByZXR1cm4gc2VydmVyQXR0cmlidXRlTmFtZShuYW1lLnNp
bmd1bGFyaXplKCkpICsgIl9JRFMiOwotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAg
IFRoaXMgc2VyaWFsaXplciB3aWxsIGdlbmVyYXRlIEpTT04gdGhhdCBsb29rcyBsaWtlIHRoaXM6
Ci0KLSAgICAgICAgYGBganMKLSAgICAgICAgewotICAgICAgICAgICJUSVRMRSI6ICJSYWlscyBp
cyBvbWFrYXNlIiwKLSAgICAgICAgICAiQk9EWSI6ICJZZXAuIE9tYWthc2UuIiwKLSAgICAgICAg
ICAiQ09NTUVOVF9JRFMiOiBbIDEsIDIsIDMgXQotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0g
ICAgICAgICMjIFR3ZWFraW5nIHRoZSBEZWZhdWx0IEpTT04KLQotICAgICAgICBJZiB5b3UganVz
dCB3YW50IHRvIGRvIHNvbWUgc21hbGwgdHdlYWtzIG9uIHRoZSBkZWZhdWx0IEpTT04sCi0gICAg
ICAgIHlvdSBjYW4gY2FsbCBzdXBlciBmaXJzdCBhbmQgbWFrZSB0aGUgdHdlYWtzIG9uIHRoZSBy
ZXR1cm5lZAotICAgICAgICBKU09OLgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5Qb3N0
U2VyaWFsaXplciA9IERTLlJFU1RTZXJpYWxpemVyLmV4dGVuZCh7Ci0gICAgICAgICAgc2VyaWFs
aXplOiBmdW5jdGlvbihyZWNvcmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBqc29uID0g
dGhpcy5fc3VwZXIocmVjb3JkLCBvcHRpb25zKTsKLQotICAgICAgICAgICAganNvbi5zdWJqZWN0
ID0ganNvbi50aXRsZTsKLSAgICAgICAgICAgIGRlbGV0ZSBqc29uLnRpdGxlOwotCi0gICAgICAg
ICAgICByZXR1cm4ganNvbjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAK
LQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZQotICAgICAgICBAcGFyYW0gcmVjb3JkCi0gICAg
ICAgIEBwYXJhbSBvcHRpb25zCi0gICAgICAqLwotICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbihy
ZWNvcmQsIG9wdGlvbnMpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgWW91IGNhbiB1c2Ug
dGhpcyBtZXRob2QgdG8gY3VzdG9taXplIHRoZSByb290IGtleXMgc2VyaWFsaXplZCBpbnRvIHRo
ZSBKU09OLgotICAgICAgICBCeSBkZWZhdWx0IHRoZSBSRVNUIFNlcmlhbGl6ZXIgc2VuZHMgdGhl
IHR5cGVLZXkgb2YgYSBtb2RlbCwgd2hpaCBpcyBhIGNhbWVsaXplZAotICAgICAgICB2ZXJzaW9u
IG9mIHRoZSBuYW1lLgotCi0gICAgICAgIEZvciBleGFtcGxlLCB5b3VyIHNlcnZlciBtYXkgZXhw
ZWN0IHVuZGVyc2NvcmVkIHJvb3Qgb2JqZWN0cy4KLQotICAgICAgICBgYGBqcwotICAgICAgICBB
cHAuQXBwbGljYXRpb25TZXJpYWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAg
ICAgICAgICBzZXJpYWxpemVJbnRvSGFzaDogZnVuY3Rpb24oZGF0YSwgdHlwZSwgcmVjb3JkLCBv
cHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgcm9vdCA9IEVtYmVyLlN0cmluZy5kZWNhbWVsaXpl
KHR5cGUudHlwZUtleSk7Ci0gICAgICAgICAgICBkYXRhW3Jvb3RdID0gdGhpcy5zZXJpYWxpemUo
cmVjb3JkLCBvcHRpb25zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAK
LQotICAgICAgICBAbWV0aG9kIHNlcmlhbGl6ZUludG9IYXNoCi0gICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBoYXNoCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAg
ICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBv
cHRpb25zCi0gICAgICAqLwotICAgICAgc2VyaWFsaXplSW50b0hhc2g6IGZ1bmN0aW9uKGhhc2gs
IHR5cGUsIHJlY29yZCwgb3B0aW9ucykgewotICAgICAgICBoYXNoW3R5cGUudHlwZUtleV0gPSB0
aGlzLnNlcmlhbGl6ZShyZWNvcmQsIG9wdGlvbnMpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGN1c3RvbWl6ZSBob3cgcG9seW1vcnBo
aWMgb2JqZWN0cyBhcmUgc2VyaWFsaXplZC4KLSAgICAgICAgQnkgZGVmYXVsdCB0aGUgSlNPTiBT
ZXJpYWxpemVyIGNyZWF0ZXMgdGhlIGtleSBieSBhcHBlbmRpbmcgYFR5cGVgIHRvCi0gICAgICAg
IHRoZSBhdHRyaWJ1dGUgYW5kIHZhbHVlIGZyb20gdGhlIG1vZGVsJ3MgY2FtZWxjYXNlZCBtb2Rl
bCBuYW1lLgotCi0gICAgICAgIEBtZXRob2Qgc2VyaWFsaXplUG9seW1vcnBoaWNUeXBlCi0gICAg
ICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge09iamVjdH0ganNv
bgotICAgICAgICBAcGFyYW0ge09iamVjdH0gcmVsYXRpb25zaGlwCi0gICAgICAqLwotICAgICAg
c2VyaWFsaXplUG9seW1vcnBoaWNUeXBlOiBmdW5jdGlvbihyZWNvcmQsIGpzb24sIHJlbGF0aW9u
c2hpcCkgewotICAgICAgICB2YXIga2V5ID0gcmVsYXRpb25zaGlwLmtleSwKLSAgICAgICAgICAg
IGJlbG9uZ3NUbyA9IGdldChyZWNvcmQsIGtleSk7Ci0gICAgICAgIGtleSA9IHRoaXMua2V5Rm9y
QXR0cmlidXRlID8gdGhpcy5rZXlGb3JBdHRyaWJ1dGUoa2V5KSA6IGtleTsKLSAgICAgICAganNv
bltrZXkgKyAiVHlwZSJdID0gYmVsb25nc1RvLmNvbnN0cnVjdG9yLnR5cGVLZXk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gUkVTVFNlcmlhbGl6ZXI7
Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zZXR1cC1jb250YWluZXIiLCAKLSAgWyIu
L2luaXRpYWxpemVycy9zdG9yZSIsIi4vaW5pdGlhbGl6ZXJzL3RyYW5zZm9ybXMiLCIuL2luaXRp
YWxpemVycy9zdG9yZV9pbmplY3Rpb25zIiwiLi9pbml0aWFsaXplcnMvZGF0YV9hZGFwdGVyIiwi
Li4vLi4vLi4vYWN0aXZlbW9kZWwtYWRhcHRlci9saWIvc2V0dXAtY29udGFpbmVyIiwiZXhwb3J0
cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBl
bmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18p
IHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIGluaXRpYWxpemVTdG9yZSA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBpbml0aWFsaXplVHJhbnNmb3JtcyA9IF9fZGVw
ZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgIHZhciBpbml0aWFsaXplU3RvcmVJbmplY3Rpb25z
ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgdmFyIGluaXRpYWxpemVEYXRhQWRh
cHRlciA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgIHZhciBzZXR1cEFjdGl2ZU1v
ZGVsQ29udGFpbmVyID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0KLSAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gc2V0dXBDb250YWluZXIoY29udGFpbmVyLCBhcHBs
aWNhdGlvbil7Ci0gICAgICAvLyBhcHBsaWNhdGlvbiBpcyBub3QgYSByZXF1aXJlZCBhcmd1bWVu
dC4gVGhpcyBlbnN1cmVzCi0gICAgICAvLyB0ZXN0aW5nIHNldHVwcyBjYW4gc2V0dXAgYSBjb250
YWluZXIgd2l0aG91dCBib290aW5nIGFuCi0gICAgICAvLyBlbnRpcmUgZW1iZXIgYXBwbGljYXRp
b24uCi0KLSAgICAgIGluaXRpYWxpemVEYXRhQWRhcHRlcihjb250YWluZXIsIGFwcGxpY2F0aW9u
KTsKLSAgICAgIGluaXRpYWxpemVUcmFuc2Zvcm1zKGNvbnRhaW5lciwgYXBwbGljYXRpb24pOwot
ICAgICAgaW5pdGlhbGl6ZVN0b3JlSW5qZWN0aW9ucyhjb250YWluZXIsIGFwcGxpY2F0aW9uKTsK
LSAgICAgIGluaXRpYWxpemVTdG9yZShjb250YWluZXIsIGFwcGxpY2F0aW9uKTsKLSAgICAgIHNl
dHVwQWN0aXZlTW9kZWxDb250YWluZXIoY29udGFpbmVyLCBhcHBsaWNhdGlvbik7Ci0gICAgfTsK
LSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9hZGFwdGVyIiwgCi0gIFsiZXhw
b3J0cyJdLAotICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgZ2V0ID0g
RW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7Ci0gICAgdmFyIG1hcCA9IEVtYmVyLkFycmF5UG9s
eWZpbGxzLm1hcDsKLQotICAgIHZhciBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxl
TmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2sn
XTsKLQotICAgIC8qKgotICAgICAgQSBgRFMuSW52YWxpZEVycm9yYCBpcyB1c2VkIGJ5IGFuIGFk
YXB0ZXIgdG8gc2lnbmFsIHRoZSBleHRlcm5hbCBBUEkKLSAgICAgIHdhcyB1bmFibGUgdG8gcHJv
Y2VzcyBhIHJlcXVlc3QgYmVjYXVzZSB0aGUgY29udGVudCB3YXMgbm90Ci0gICAgICBzZW1hbnRp
Y2FsbHkgY29ycmVjdCBvciBtZWFuaW5nZnVsIHBlciB0aGUgQVBJLiBVc3VhbGx5IHRoaXMgbWVh
bnMgYQotICAgICAgcmVjb3JkIGZhaWxlZCBzb21lIGZvcm0gb2Ygc2VydmVyIHNpZGUgdmFsaWRh
dGlvbi4gV2hlbiBhIHByb21pc2UKLSAgICAgIGZyb20gYW4gYWRhcHRlciBpcyByZWplY3RlZCB3
aXRoIGEgYERTLkludmFsaWRFcnJvcmAgdGhlIHJlY29yZCB3aWxsCi0gICAgICB0cmFuc2l0aW9u
IHRvIHRoZSBgaW52YWxpZGAgc3RhdGUgYW5kIHRoZSBlcnJvcnMgd2lsbCBiZSBzZXQgdG8gdGhl
Ci0gICAgICBgZXJyb3JzYCBwcm9wZXJ0eSBvbiB0aGUgcmVjb3JkLgotCi0gICAgICBFeGFtcGxl
Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBE
Uy5SRVNUQWRhcHRlci5leHRlbmQoewotICAgICAgICBhamF4RXJyb3I6IGZ1bmN0aW9uKGpxWEhS
KSB7Ci0gICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fc3VwZXIoanFYSFIpOwotCi0gICAgICAg
ICAgaWYgKGpxWEhSICYmIGpxWEhSLnN0YXR1cyA9PT0gNDIyKSB7Ci0gICAgICAgICAgICB2YXIg
anNvbkVycm9ycyA9IEVtYmVyLiQucGFyc2VKU09OKGpxWEhSLnJlc3BvbnNlVGV4dClbImVycm9y
cyJdOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEUy5JbnZhbGlkRXJyb3IoanNvbkVycm9ycyk7
Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIFRoZSBgRFMuSW52
YWxpZEVycm9yYCBtdXN0IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBzaW5nbGUgb2JqZWN0IHdob3Nl
Ci0gICAgICBrZXlzIGFyZSB0aGUgaW52YWxpZCBtb2RlbCBwcm9wZXJ0aWVzLCBhbmQgd2hvc2Ug
dmFsdWVzIGFyZSB0aGUKLSAgICAgIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZXMuIEZvciBl
eGFtcGxlOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICByZXR1cm4gbmV3IERTLkludmFs
aWRFcnJvcih7Ci0gICAgICAgIGxlbmd0aDogJ011c3QgYmUgbGVzcyB0aGFuIDE1JywKLSAgICAg
ICAgbmFtZTogJ011c3Qgbm90IGJlIGJsYW5rCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAg
ICBAY2xhc3MgSW52YWxpZEVycm9yCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgKi8KLSAgICB2
YXIgSW52YWxpZEVycm9yID0gZnVuY3Rpb24oZXJyb3JzKSB7Ci0gICAgICB2YXIgdG1wID0gRXJy
b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgIlRoZSBiYWNrZW5kIHJlamVjdGVk
IHRoZSBjb21taXQgYmVjYXVzZSBpdCB3YXMgaW52YWxpZDogIiArIEVtYmVyLmluc3BlY3QoZXJy
b3JzKSk7Ci0gICAgICB0aGlzLmVycm9ycyA9IGVycm9yczsKLQotICAgICAgZm9yICh2YXIgaT0w
LCBsPWVycm9yUHJvcHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICB0aGlzW2Vycm9yUHJv
cHNbaV1dID0gdG1wW2Vycm9yUHJvcHNbaV1dOwotICAgICAgfQotICAgIH07Ci0gICAgSW52YWxp
ZEVycm9yLnByb3RvdHlwZSA9IEVtYmVyLmNyZWF0ZShFcnJvci5wcm90b3R5cGUpOwotCi0gICAg
LyoqCi0gICAgICBBbiBhZGFwdGVyIGlzIGFuIG9iamVjdCB0aGF0IHJlY2VpdmVzIHJlcXVlc3Rz
IGZyb20gYSBzdG9yZSBhbmQKLSAgICAgIHRyYW5zbGF0ZXMgdGhlbSBpbnRvIHRoZSBhcHByb3By
aWF0ZSBhY3Rpb24gdG8gdGFrZSBhZ2FpbnN0IHlvdXIKLSAgICAgIHBlcnNpc3RlbmNlIGxheWVy
LiBUaGUgcGVyc2lzdGVuY2UgbGF5ZXIgaXMgdXN1YWxseSBhbiBIVFRQIEFQSSwgYnV0Ci0gICAg
ICBtYXkgYmUgYW55dGhpbmcsIHN1Y2ggYXMgdGhlIGJyb3dzZXIncyBsb2NhbCBzdG9yYWdlLiBU
eXBpY2FsbHkgdGhlCi0gICAgICBhZGFwdGVyIGlzIG5vdCBpbnZva2VkIGRpcmVjdGx5IGluc3Rl
YWQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzZWQKLSAgICAgIHRocm91Z2ggdGhlIGBzdG9y
ZWAuCi0KLSAgICAgICMjIyBDcmVhdGluZyBhbiBBZGFwdGVyCi0KLSAgICAgIENyZWF0ZSBhIG5l
dyBzdWJjbGFzcyBvZiBgRFMuQWRhcHRlcmAsIHRoZW4gYXNzaWduCi0gICAgICBpdCB0byB0aGUg
YEFwcGxpY2F0aW9uQWRhcHRlcmAgcHJvcGVydHkgb2YgdGhlIGFwcGxpY2F0aW9uLgotCi0gICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgTXlBZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQo
ewotICAgICAgICAvLyAuLi55b3VyIGNvZGUgaGVyZQotICAgICAgfSk7Ci0KLSAgICAgIEFwcC5B
cHBsaWNhdGlvbkFkYXB0ZXIgPSBNeUFkYXB0ZXI7Ci0gICAgICBgYGAKLQotICAgICAgTW9kZWwt
c3BlY2lmaWMgYWRhcHRlcnMgY2FuIGJlIGNyZWF0ZWQgYnkgYXNzaWduaW5nIHlvdXIgYWRhcHRl
cgotICAgICAgY2xhc3MgdG8gdGhlIGBNb2RlbE5hbWVgICsgYEFkYXB0ZXJgIHByb3BlcnR5IG9m
IHRoZSBhcHBsaWNhdGlvbi4KLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIE15UG9z
dEFkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgIC8vIC4uLlBvc3Qtc3BlY2lm
aWMgYWRhcHRlciBjb2RlIGdvZXMgaGVyZQotICAgICAgfSk7Ci0KLSAgICAgIEFwcC5Qb3N0QWRh
cHRlciA9IE15UG9zdEFkYXB0ZXI7Ci0gICAgICBgYGAKLQotICAgICAgYERTLkFkYXB0ZXJgIGlz
IGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCB5b3Ugc2hvdWxkIG92ZXJyaWRlIGluIHlvdXIK
LSAgICAgIGFwcGxpY2F0aW9uIHRvIGN1c3RvbWl6ZSBpdCBmb3IgeW91ciBiYWNrZW5kLiBUaGUg
bWluaW11bSBzZXQgb2YgbWV0aG9kcwotICAgICAgdGhhdCB5b3Ugc2hvdWxkIGltcGxlbWVudCBp
czoKLQotICAgICAgICAqIGBmaW5kKClgCi0gICAgICAgICogYGNyZWF0ZVJlY29yZCgpYAotICAg
ICAgICAqIGB1cGRhdGVSZWNvcmQoKWAKLSAgICAgICAgKiBgZGVsZXRlUmVjb3JkKClgCi0gICAg
ICAgICogYGZpbmRBbGwoKWAKLSAgICAgICAgKiBgZmluZFF1ZXJ5KClgCi0KLSAgICAgIFRvIGlt
cHJvdmUgdGhlIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb2YgeW91ciBhcHBsaWNhdGlvbiwgeW91IGNh
biBvcHRpbWl6ZQotICAgICAgeW91ciBhZGFwdGVyIGJ5IG92ZXJyaWRpbmcgdGhlc2UgbG93ZXIt
bGV2ZWwgbWV0aG9kczoKLQotICAgICAgICAqIGBmaW5kTWFueSgpYAotCi0KLSAgICAgIEZvciBh
biBleGFtcGxlIGltcGxlbWVudGF0aW9uLCBzZWUgYERTLlJFU1RBZGFwdGVyYCwgdGhlCi0gICAg
ICBpbmNsdWRlZCBSRVNUIGFkYXB0ZXIuCi0KLSAgICAgIEBjbGFzcyBBZGFwdGVyCi0gICAgICBA
bmFtZXNwYWNlIERTCi0gICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAqLwotCi0gICAg
dmFyIEFkYXB0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLQotICAgICAgLyoqCi0gICAgICAg
IElmIHlvdSB3b3VsZCBsaWtlIHlvdXIgYWRhcHRlciB0byB1c2UgYSBjdXN0b20gc2VyaWFsaXpl
ciB5b3UgY2FuCi0gICAgICAgIHNldCB0aGUgYGRlZmF1bHRTZXJpYWxpemVyYCBwcm9wZXJ0eSB0
byBiZSB0aGUgbmFtZSBvZiB0aGUgY3VzdG9tCi0gICAgICAgIHNlcmlhbGl6ZXIuCi0KLSAgICAg
ICAgTm90ZSB0aGUgYGRlZmF1bHRTZXJpYWxpemVyYCBzZXJpYWxpemVyIGhhcyBhIGxvd2VyIHBy
aW9yaXR5IHRoZW4KLSAgICAgICAgYSBtb2RlbCBzcGVjaWZpYyBzZXJpYWxpemVyIChpLmUuIGBQ
b3N0U2VyaWFsaXplcmApIG9yIHRoZQotICAgICAgICBgYXBwbGljYXRpb25gIHNlcmlhbGl6ZXIu
Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgRGphbmdvQWRhcHRlciA9IERT
LkFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBkZWZhdWx0U2VyaWFsaXplcjogJ2RqYW5nbycK
LSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBkZWZhdWx0U2Vy
aWFsaXplcgotICAgICAgICBAdHlwZSB7U3RyaW5nfQotICAgICAgKi8KLQotICAgICAgLyoqCi0g
ICAgICAgIFRoZSBgZmluZCgpYCBtZXRob2QgaXMgaW52b2tlZCB3aGVuIHRoZSBzdG9yZSBpcyBh
c2tlZCBmb3IgYSByZWNvcmQgdGhhdAotICAgICAgICBoYXMgbm90IHByZXZpb3VzbHkgYmVlbiBs
b2FkZWQuIEluIHJlc3BvbnNlIHRvIGBmaW5kKClgIGJlaW5nIGNhbGxlZCwgeW91Ci0gICAgICAg
IHNob3VsZCBxdWVyeSB5b3VyIHBlcnNpc3RlbmNlIGxheWVyIGZvciBhIHJlY29yZCB3aXRoIHRo
ZSBnaXZlbiBJRC4gT25jZQotICAgICAgICBmb3VuZCwgeW91IGNhbiBhc3luY2hyb25vdXNseSBj
YWxsIHRoZSBzdG9yZSdzIGBwdXNoKClgIG1ldGhvZCB0byBwdXNoCi0gICAgICAgIHRoZSByZWNv
cmQgaW50byB0aGUgc3RvcmUuCi0KLSAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGBmaW5kYCBp
bXBsZW1lbnRhdGlvbjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5BcHBs
aWNhdGlvbkFkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgICAgZmluZDogZnVu
Y3Rpb24oc3RvcmUsIHR5cGUsIGlkKSB7Ci0gICAgICAgICAgICB2YXIgdXJsID0gW3R5cGUsIGlk
XS5qb2luKCcvJyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgRW1iZXIuUlNWUC5Qcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNP
Tih1cmwpLnRoZW4oZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihu
dWxsLCByZXNvbHZlLCBkYXRhKTsKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsK
LSAgICAgICAgICAgICAgICBqcVhIUi50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwg
bWFubmVyZWQgcHJvbWlzZXMKLSAgICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0
LCBqcVhIUik7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kCi0gICAg
ICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAgIEBwYXJhbSB7c3ViY2xhc3Mgb2Yg
RFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGlkCi0gICAgICAgIEByZXR1
cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kOiBFbWJlci5yZXF1aXJl
ZChGdW5jdGlvbiksCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgYGZpbmRBbGwoKWAgbWV0aG9k
IGlzIGNhbGxlZCB3aGVuIHlvdSBjYWxsIGBmaW5kYCBvbiB0aGUgc3RvcmUKLSAgICAgICAgd2l0
aG91dCBhbiBJRCAoaS5lLiBgc3RvcmUuZmluZCgncG9zdCcpYCkuCi0KLSAgICAgICAgRXhhbXBs
ZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uQWRhcHRl
ciA9IERTLkFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICBmaW5kQWxsOiBmdW5jdGlvbihzdG9y
ZSwgdHlwZSwgc2luY2VUb2tlbikgewotICAgICAgICAgICAgdmFyIHVybCA9IHR5cGU7Ci0gICAg
ICAgICAgICB2YXIgcXVlcnkgPSB7IHNpbmNlOiBzaW5jZVRva2VuIH07Ci0gICAgICAgICAgICBy
ZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
LSAgICAgICAgICAgICAgalF1ZXJ5LmdldEpTT04odXJsLCBxdWVyeSkudGhlbihmdW5jdGlvbihk
YXRhKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIucnVuKG51bGwsIHJlc29sdmUsIGRhdGEpOwot
ICAgICAgICAgICAgICB9LCBmdW5jdGlvbihqcVhIUikgewotICAgICAgICAgICAgICAgIGpxWEhS
LnRoZW4gPSBudWxsOyAvLyB0YW1lIGpRdWVyeSdzIGlsbCBtYW5uZXJlZCBwcm9taXNlcwotICAg
ICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCByZWplY3QsIGpxWEhSKTsKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
ICBgYGAKLQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAbWV0aG9kIGZpbmRBbGwKLSAgICAg
ICAgQHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBE
Uy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30gc2luY2VUb2tlbgotICAgICAg
ICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgZmluZEFsbDogbnVs
bCwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHlvdSBj
YWxsIGBmaW5kYCBvbiB0aGUgc3RvcmUgd2l0aCBhCi0gICAgICAgIHF1ZXJ5IG9iamVjdCBhcyB0
aGUgc2Vjb25kIHBhcmFtZXRlciAoaS5lLiBgc3RvcmUuZmluZCgncGVyc29uJywgewotICAgICAg
ICBwYWdlOiAxIH0pYCkuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uQWRhcHRlciA9IERTLkFkYXB0ZXIuZXh0ZW5kKHsK
LSAgICAgICAgICBmaW5kUXVlcnk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBxdWVyeSkgewotICAg
ICAgICAgICAgdmFyIHVybCA9IHR5cGU7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVtYmVyLlJT
VlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgalF1
ZXJ5LmdldEpTT04odXJsLCBxdWVyeSkudGhlbihmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgRW1iZXIucnVuKG51bGwsIHJlc29sdmUsIGRhdGEpOwotICAgICAgICAgICAgICB9LCBm
dW5jdGlvbihqcVhIUikgewotICAgICAgICAgICAgICAgIGpxWEhSLnRoZW4gPSBudWxsOyAvLyB0
YW1lIGpRdWVyeSdzIGlsbCBtYW5uZXJlZCBwcm9taXNlcwotICAgICAgICAgICAgICAgIEVtYmVy
LnJ1bihudWxsLCByZWplY3QsIGpxWEhSKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBA
cHJpdmF0ZQotICAgICAgICBAbWV0aG9kIGZpbmRRdWVyeQotICAgICAgICBAcGFyYW0ge0RTLlN0
b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEBwYXJhbSB7T2JqZWN0fSBxdWVyeQotICAgICAgICBAcGFyYW0ge0RTLkFkYXB0ZXJQ
b3B1bGF0ZWRSZWNvcmRBcnJheX0gcmVjb3JkQXJyYXkKLSAgICAgICAgQHJldHVybiB7UHJvbWlz
ZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRRdWVyeTogbnVsbCwKLQotICAgICAgLyoq
Ci0gICAgICAgIElmIHRoZSBnbG9iYWxseSB1bmlxdWUgSURzIGZvciB5b3VyIHJlY29yZHMgc2hv
dWxkIGJlIGdlbmVyYXRlZCBvbiB0aGUgY2xpZW50LAotICAgICAgICBpbXBsZW1lbnQgdGhlIGBn
ZW5lcmF0ZUlkRm9yUmVjb3JkKClgIG1ldGhvZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSBpbnZva2Vk
Ci0gICAgICAgIGVhY2ggdGltZSB5b3UgY3JlYXRlIGEgbmV3IHJlY29yZCwgYW5kIHRoZSB2YWx1
ZSByZXR1cm5lZCBmcm9tIGl0IHdpbGwgYmUKLSAgICAgICAgYXNzaWduZWQgdG8gdGhlIHJlY29y
ZCdzIGBwcmltYXJ5S2V5YC4KLQotICAgICAgICBNb3N0IHRyYWRpdGlvbmFsIFJFU1QtbGlrZSBI
VFRQIEFQSXMgd2lsbCBub3QgdXNlIHRoaXMgbWV0aG9kLiBJbnN0ZWFkLCB0aGUgSUQKLSAgICAg
ICAgb2YgdGhlIHJlY29yZCB3aWxsIGJlIHNldCBieSB0aGUgc2VydmVyLCBhbmQgeW91ciBhZGFw
dGVyIHdpbGwgdXBkYXRlIHRoZSBzdG9yZQotICAgICAgICB3aXRoIHRoZSBuZXcgSUQgd2hlbiBp
dCBjYWxscyBgZGlkQ3JlYXRlUmVjb3JkKClgLiBPbmx5IGltcGxlbWVudCB0aGlzIG1ldGhvZCBp
ZgotICAgICAgICB5b3UgaW50ZW5kIHRvIGdlbmVyYXRlIHJlY29yZCBJRHMgb24gdGhlIGNsaWVu
dC1zaWRlLgotCi0gICAgICAgIFRoZSBgZ2VuZXJhdGVJZEZvclJlY29yZCgpYCBtZXRob2Qgd2ls
bCBiZSBpbnZva2VkIHdpdGggdGhlIHJlcXVlc3Rpbmcgc3RvcmUgYXMKLSAgICAgICAgdGhlIGZp
cnN0IHBhcmFtZXRlciBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgcmVjb3JkIGFzIHRoZSBzZWNvbmQg
cGFyYW1ldGVyOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgZ2VuZXJhdGVJZEZv
clJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHJlY29yZCkgewotICAgICAgICAgIHZhciB1dWlkID0g
QXBwLmdlbmVyYXRlVVVJRFdpdGhTdGF0aXN0aWNhbGx5TG93T2Rkc09mQ29sbGlzaW9uKCk7Ci0g
ICAgICAgICAgcmV0dXJuIHV1aWQ7Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAg
QG1ldGhvZCBnZW5lcmF0ZUlkRm9yUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0
b3JlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtT
dHJpbmd8TnVtYmVyfSBpZAotICAgICAgKi8KLSAgICAgIGdlbmVyYXRlSWRGb3JSZWNvcmQ6IG51
bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBQcm94aWVzIHRvIHRoZSBzZXJpYWxpemVyJ3MgYHNl
cmlhbGl6ZWAgbWV0aG9kLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7
Ci0gICAgICAgICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7
Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXplKHJlY29yZCwgeyBpbmNsdWRl
SWQ6IHRydWUgfSk7Ci0gICAgICAgICAgICB2YXIgdXJsID0gdHlwZTsKLQotICAgICAgICAgICAg
Ly8gLi4uCi0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAg
QG1ldGhvZCBzZXJpYWxpemUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSAgIG9wdGlvbnMKLSAgICAgICAgQHJldHVybiB7T2JqZWN0fSBz
ZXJpYWxpemVkIHJlY29yZAotICAgICAgKi8KLSAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24ocmVj
b3JkLCBvcHRpb25zKSB7Ci0gICAgICAgIHJldHVybiBnZXQocmVjb3JkLCAnc3RvcmUnKS5zZXJp
YWxpemVyRm9yKHJlY29yZC5jb25zdHJ1Y3Rvci50eXBlS2V5KS5zZXJpYWxpemUocmVjb3JkLCBv
cHRpb25zKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QgaW4gYSBzdWJjbGFzcyB0byBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mCi0gICAgICAgIG5l
dyByZWNvcmRzLgotCi0gICAgICAgIFNlcmlhbGl6ZXMgdGhlIHJlY29yZCBhbmQgc2VuZCBpdCB0
byB0aGUgc2VydmVyLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIgPSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0g
ICAgICAgICAgY3JlYXRlUmVjb3JkOiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0g
ICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2VyaWFsaXplKHJlY29yZCwgeyBpbmNsdWRlSWQ6
IHRydWUgfSk7Ci0gICAgICAgICAgICB2YXIgdXJsID0gdHlwZTsKLQotICAgICAgICAgICAgcmV0
dXJuIG5ldyBFbWJlci5SU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0g
ICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKLSAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcs
Ci0gICAgICAgICAgICAgICAgdXJsOiB1cmwsCi0gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdq
c29uJywKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCi0gICAgICAgICAgICAgIH0pLnRoZW4o
ZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCByZXNvbHZl
LCBkYXRhKTsKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAgICAg
ICAgICBqcVhIUi50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwgbWFubmVyZWQgcHJv
bWlzZXMKLSAgICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0LCBqcVhIUik7Ci0g
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGVSZWNvcmQKLSAgICAgICAg
QHBhcmFtIHtEUy5TdG9yZX0gc3RvcmUKLSAgICAgICAgQHBhcmFtIHtzdWJjbGFzcyBvZiBEUy5N
b2RlbH0gdHlwZSAgIHRoZSBEUy5Nb2RlbCBjbGFzcyBvZiB0aGUgcmVjb3JkCi0gICAgICAgIEBw
YXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNl
Ci0gICAgICAqLwotICAgICAgY3JlYXRlUmVjb3JkOiBFbWJlci5yZXF1aXJlZChGdW5jdGlvbiks
Ci0KLSAgICAgIC8qKgotICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2QgaW4gYSBzdWJjbGFz
cyB0byBoYW5kbGUgdGhlIHVwZGF0aW5nIG9mCi0gICAgICAgIGEgcmVjb3JkLgotCi0gICAgICAg
IFNlcmlhbGl6ZXMgdGhlIHJlY29yZCB1cGRhdGUgYW5kIHNlbmQgaXQgdG8gdGhlIHNlcnZlci4K
LQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAu
QXBwbGljYXRpb25BZGFwdGVyID0gRFMuQWRhcHRlci5leHRlbmQoewotICAgICAgICAgIHVwZGF0
ZVJlY29yZDogZnVuY3Rpb24oc3RvcmUsIHR5cGUsIHJlY29yZCkgewotICAgICAgICAgICAgdmFy
IGRhdGEgPSB0aGlzLnNlcmlhbGl6ZShyZWNvcmQsIHsgaW5jbHVkZUlkOiB0cnVlIH0pOwotICAg
ICAgICAgICAgdmFyIGlkID0gcmVjb3JkLmdldCgnaWQnKTsKLSAgICAgICAgICAgIHZhciB1cmwg
PSBbdHlwZSwgaWRdLmpvaW4oJy8nKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBFbWJlci5S
U1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICAgIGpR
dWVyeS5hamF4KHsKLSAgICAgICAgICAgICAgICB0eXBlOiAnUFVUJywKLSAgICAgICAgICAgICAg
ICB1cmw6IHVybCwKLSAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAotICAgICAgICAg
ICAgICAgIGRhdGE6IGRhdGEKLSAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihkYXRhKSB7
Ci0gICAgICAgICAgICAgICAgRW1iZXIucnVuKG51bGwsIHJlc29sdmUsIGRhdGEpOwotICAgICAg
ICAgICAgICB9LCBmdW5jdGlvbihqcVhIUikgewotICAgICAgICAgICAgICAgIGpxWEhSLnRoZW4g
PSBudWxsOyAvLyB0YW1lIGpRdWVyeSdzIGlsbCBtYW5uZXJlZCBwcm9taXNlcwotICAgICAgICAg
ICAgICAgIEVtYmVyLnJ1bihudWxsLCByZWplY3QsIGpxWEhSKTsKLSAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAK
LQotICAgICAgICBAbWV0aG9kIHVwZGF0ZVJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLlN0b3Jl
fSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlICAgdGhl
IERTLk1vZGVsIGNsYXNzIG9mIHRoZSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0g
cmVjb3JkCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAg
ICB1cGRhdGVSZWNvcmQ6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKSwKLQotICAgICAgLyoqCi0g
ICAgICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhIHN1YmNsYXNzIHRvIGhhbmRsZSB0aGUg
ZGVsZXRpb24gb2YKLSAgICAgICAgYSByZWNvcmQuCi0KLSAgICAgICAgU2VuZHMgYSBkZWxldGUg
cmVxdWVzdCBmb3IgdGhlIHJlY29yZCB0byB0aGUgc2VydmVyLgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvbkFkYXB0ZXIg
PSBEUy5BZGFwdGVyLmV4dGVuZCh7Ci0gICAgICAgICAgZGVsZXRlUmVjb3JkOiBmdW5jdGlvbihz
dG9yZSwgdHlwZSwgcmVjb3JkKSB7Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2VyaWFs
aXplKHJlY29yZCwgeyBpbmNsdWRlSWQ6IHRydWUgfSk7Ci0gICAgICAgICAgICB2YXIgaWQgPSBy
ZWNvcmQuZ2V0KCdpZCcpOwotICAgICAgICAgICAgdmFyIHVybCA9IFt0eXBlLCBpZF0uam9pbign
LycpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IEVtYmVyLlJTVlAuUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoewotICAgICAg
ICAgICAgICAgIHR5cGU6ICdERUxFVEUnLAotICAgICAgICAgICAgICAgIHVybDogdXJsLAotICAg
ICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCi0gICAgICAgICAgICAgICAgZGF0YTogZGF0
YQotICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKLSAgICAgICAgICAgICAg
ICBFbWJlci5ydW4obnVsbCwgcmVzb2x2ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgIH0sIGZ1bmN0
aW9uKGpxWEhSKSB7Ci0gICAgICAgICAgICAgICAganFYSFIudGhlbiA9IG51bGw7IC8vIHRhbWUg
alF1ZXJ5J3MgaWxsIG1hbm5lcmVkIHByb21pc2VzCi0gICAgICAgICAgICAgICAgRW1iZXIucnVu
KG51bGwsIHJlamVjdCwganFYSFIpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRo
b2QgZGVsZXRlUmVjb3JkCi0gICAgICAgIEBwYXJhbSB7RFMuU3RvcmV9IHN0b3JlCi0gICAgICAg
IEBwYXJhbSB7c3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUgICB0aGUgRFMuTW9kZWwgY2xhc3Mg
b2YgdGhlIHJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAg
QHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGRlbGV0ZVJlY29yZDog
RW1iZXIucmVxdWlyZWQoRnVuY3Rpb24pLAotCi0gICAgICAvKioKLSAgICAgICAgRmluZCBtdWx0
aXBsZSByZWNvcmRzIGF0IG9uY2UuCi0KLSAgICAgICAgQnkgZGVmYXVsdCwgaXQgbG9vcHMgb3Zl
ciB0aGUgcHJvdmlkZWQgaWRzIGFuZCBjYWxscyBgZmluZGAgb24gZWFjaC4KLSAgICAgICAgTWF5
IGJlIG92ZXJ3cml0dGVuIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHJlZHVjZSB0aGUgbnVt
YmVyIG9mCi0gICAgICAgIHNlcnZlciByZXF1ZXN0cy4KLQotICAgICAgICBFeGFtcGxlCi0KLSAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuQXBwbGljYXRpb25BZGFwdGVyID0gRFMu
QWRhcHRlci5leHRlbmQoewotICAgICAgICAgIGZpbmRNYW55OiBmdW5jdGlvbihzdG9yZSwgdHlw
ZSwgaWRzKSB7Ci0gICAgICAgICAgICB2YXIgdXJsID0gdHlwZTsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgRW1iZXIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih1cmwsIHtpZHM6IGlkc30pLnRoZW4oZnVuY3Rpb24o
ZGF0YSkgewotICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihudWxsLCByZXNvbHZlLCBkYXRhKTsK
LSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oanFYSFIpIHsKLSAgICAgICAgICAgICAgICBqcVhI
Ui50aGVuID0gbnVsbDsgLy8gdGFtZSBqUXVlcnkncyBpbGwgbWFubmVyZWQgcHJvbWlzZXMKLSAg
ICAgICAgICAgICAgICBFbWJlci5ydW4obnVsbCwgcmVqZWN0LCBqcVhIUik7Ci0gICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kTWFueQotICAgICAgICBAcGFyYW0ge0RTLlN0
b3JlfSBzdG9yZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlICAg
dGhlIERTLk1vZGVsIGNsYXNzIG9mIHRoZSByZWNvcmRzCi0gICAgICAgIEBwYXJhbSB7QXJyYXl9
ICAgIGlkcwotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAg
ICAgZmluZE1hbnk6IGZ1bmN0aW9uKHN0b3JlLCB0eXBlLCBpZHMpIHsKLSAgICAgICAgdmFyIHBy
b21pc2VzID0gbWFwLmNhbGwoaWRzLCBmdW5jdGlvbihpZCkgewotICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmQoc3RvcmUsIHR5cGUsIGlkKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAg
cmV0dXJuIEVtYmVyLlJTVlAuYWxsKHByb21pc2VzKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAg
IF9fZXhwb3J0c19fLkludmFsaWRFcnJvciA9IEludmFsaWRFcnJvcjsKLSAgICBfX2V4cG9ydHNf
Xy5BZGFwdGVyID0gQWRhcHRlcjsKLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQWRhcHRl
cjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9jaGFuZ2VzIiwgCi0gIFsi
Li9jaGFuZ2VzL3JlbGF0aW9uc2hpcF9jaGFuZ2UiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoq
Ci0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIFJlbGF0aW9uc2hp
cENoYW5nZSA9IF9fZGVwZW5kZW5jeTFfXy5SZWxhdGlvbnNoaXBDaGFuZ2U7Ci0gICAgdmFyIFJl
bGF0aW9uc2hpcENoYW5nZUFkZCA9IF9fZGVwZW5kZW5jeTFfXy5SZWxhdGlvbnNoaXBDaGFuZ2VB
ZGQ7Ci0gICAgdmFyIFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZSA9IF9fZGVwZW5kZW5jeTFfXy5S
ZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmU7Ci0gICAgdmFyIE9uZVRvTWFueUNoYW5nZSA9IF9fZGVw
ZW5kZW5jeTFfXy5PbmVUb01hbnlDaGFuZ2U7Ci0gICAgdmFyIE1hbnlUb05vbmVDaGFuZ2UgPSBf
X2RlcGVuZGVuY3kxX18uTWFueVRvTm9uZUNoYW5nZTsKLSAgICB2YXIgT25lVG9PbmVDaGFuZ2Ug
PSBfX2RlcGVuZGVuY3kxX18uT25lVG9PbmVDaGFuZ2U7Ci0gICAgdmFyIE1hbnlUb01hbnlDaGFu
Z2UgPSBfX2RlcGVuZGVuY3kxX18uTWFueVRvTWFueUNoYW5nZTsKLQotICAgIF9fZXhwb3J0c19f
LlJlbGF0aW9uc2hpcENoYW5nZSA9IFJlbGF0aW9uc2hpcENoYW5nZTsKLSAgICBfX2V4cG9ydHNf
Xy5SZWxhdGlvbnNoaXBDaGFuZ2VBZGQgPSBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQ7Ci0gICAgX19l
eHBvcnRzX18uUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlID0gUmVsYXRpb25zaGlwQ2hhbmdlUmVt
b3ZlOwotICAgIF9fZXhwb3J0c19fLk9uZVRvTWFueUNoYW5nZSA9IE9uZVRvTWFueUNoYW5nZTsK
LSAgICBfX2V4cG9ydHNfXy5NYW55VG9Ob25lQ2hhbmdlID0gTWFueVRvTm9uZUNoYW5nZTsKLSAg
ICBfX2V4cG9ydHNfXy5PbmVUb09uZUNoYW5nZSA9IE9uZVRvT25lQ2hhbmdlOwotICAgIF9fZXhw
b3J0c19fLk1hbnlUb01hbnlDaGFuZ2UgPSBNYW55VG9NYW55Q2hhbmdlOwotICB9KTsKLWRlZmlu
ZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL2NoYW5nZXMvcmVsYXRpb25zaGlwX2NoYW5nZSIsIAot
ICBbIi4uL21vZGVsIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAgQG1vZHVsZSBl
bWJlci1kYXRhCi0gICAgKi8KLQotICAgIHZhciBNb2RlbCA9IF9fZGVwZW5kZW5jeTFfXy5Nb2Rl
bDsKLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLSAgICB2YXIg
Zm9yRWFjaCA9IEVtYmVyLkVudW1lcmFibGVVdGlscy5mb3JFYWNoOwotCi0gICAgLyoqCi0gICAg
ICBAY2xhc3MgUmVsYXRpb25zaGlwQ2hhbmdlCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICBA
cHJpdmF0ZQotICAgICAgQGNvbnN0cnVjdG9yCi0gICAgKi8KLSAgICB2YXIgUmVsYXRpb25zaGlw
Q2hhbmdlID0gZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgdGhpcy5wYXJlbnRSZWNvcmQgPSBv
cHRpb25zLnBhcmVudFJlY29yZDsKLSAgICAgIHRoaXMuY2hpbGRSZWNvcmQgPSBvcHRpb25zLmNo
aWxkUmVjb3JkOwotICAgICAgdGhpcy5maXJzdFJlY29yZCA9IG9wdGlvbnMuZmlyc3RSZWNvcmQ7
Ci0gICAgICB0aGlzLmZpcnN0UmVjb3JkS2luZCA9IG9wdGlvbnMuZmlyc3RSZWNvcmRLaW5kOwot
ICAgICAgdGhpcy5maXJzdFJlY29yZE5hbWUgPSBvcHRpb25zLmZpcnN0UmVjb3JkTmFtZTsKLSAg
ICAgIHRoaXMuc2Vjb25kUmVjb3JkID0gb3B0aW9ucy5zZWNvbmRSZWNvcmQ7Ci0gICAgICB0aGlz
LnNlY29uZFJlY29yZEtpbmQgPSBvcHRpb25zLnNlY29uZFJlY29yZEtpbmQ7Ci0gICAgICB0aGlz
LnNlY29uZFJlY29yZE5hbWUgPSBvcHRpb25zLnNlY29uZFJlY29yZE5hbWU7Ci0gICAgICB0aGlz
LmNoYW5nZVR5cGUgPSBvcHRpb25zLmNoYW5nZVR5cGU7Ci0gICAgICB0aGlzLnN0b3JlID0gb3B0
aW9ucy5zdG9yZTsKLQotICAgICAgdGhpcy5jb21taXR0ZWQgPSB7fTsKLSAgICB9OwotCi0gICAg
LyoqCi0gICAgICBAY2xhc3MgUmVsYXRpb25zaGlwQ2hhbmdlQWRkCi0gICAgICBAbmFtZXNwYWNl
IERTCi0gICAgICBAcHJpdmF0ZQotICAgICAgQGNvbnN0cnVjdG9yCi0gICAgKi8KLSAgICB2YXIg
UmVsYXRpb25zaGlwQ2hhbmdlQWRkID0gZnVuY3Rpb24ob3B0aW9ucyl7Ci0gICAgICBSZWxhdGlv
bnNoaXBDaGFuZ2UuY2FsbCh0aGlzLCBvcHRpb25zKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAg
ICBAY2xhc3MgUmVsYXRpb25zaGlwQ2hhbmdlUmVtb3ZlCi0gICAgICBAbmFtZXNwYWNlIERTCi0g
ICAgICBAcHJpdmF0ZQotICAgICAgQGNvbnN0cnVjdG9yCi0gICAgKi8KLSAgICB2YXIgUmVsYXRp
b25zaGlwQ2hhbmdlUmVtb3ZlID0gZnVuY3Rpb24ob3B0aW9ucyl7Ci0gICAgICBSZWxhdGlvbnNo
aXBDaGFuZ2UuY2FsbCh0aGlzLCBvcHRpb25zKTsKLSAgICB9OwotCi0gICAgUmVsYXRpb25zaGlw
Q2hhbmdlLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBuZXcgUmVs
YXRpb25zaGlwQ2hhbmdlKG9wdGlvbnMpOwotICAgIH07Ci0KLSAgICBSZWxhdGlvbnNoaXBDaGFu
Z2VBZGQuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewotICAgICAgcmV0dXJuIG5ldyBSZWxh
dGlvbnNoaXBDaGFuZ2VBZGQob3B0aW9ucyk7Ci0gICAgfTsKLQotICAgIFJlbGF0aW9uc2hpcENo
YW5nZVJlbW92ZS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICByZXR1cm4gbmV3
IFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZShvcHRpb25zKTsKLSAgICB9OwotCi0gICAgdmFyIE9u
ZVRvTWFueUNoYW5nZSA9IHt9OwotICAgIHZhciBPbmVUb05vbmVDaGFuZ2UgPSB7fTsKLSAgICB2
YXIgTWFueVRvTm9uZUNoYW5nZSA9IHt9OwotICAgIHZhciBPbmVUb09uZUNoYW5nZSA9IHt9Owot
ICAgIHZhciBNYW55VG9NYW55Q2hhbmdlID0ge307Ci0KLSAgICBSZWxhdGlvbnNoaXBDaGFuZ2Uu
X2NyZWF0ZUNoYW5nZSA9IGZ1bmN0aW9uKG9wdGlvbnMpewotICAgICAgaWYob3B0aW9ucy5jaGFu
Z2VUeXBlID09PSAiYWRkIil7Ci0gICAgICAgIHJldHVybiBSZWxhdGlvbnNoaXBDaGFuZ2VBZGQu
Y3JlYXRlKG9wdGlvbnMpOwotICAgICAgfQotICAgICAgaWYob3B0aW9ucy5jaGFuZ2VUeXBlID09
PSAicmVtb3ZlIil7Ci0gICAgICAgIHJldHVybiBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmUuY3Jl
YXRlKG9wdGlvbnMpOwotICAgICAgfQotICAgIH07Ci0KLQotICAgIFJlbGF0aW9uc2hpcENoYW5n
ZS5kZXRlcm1pbmVSZWxhdGlvbnNoaXBUeXBlID0gZnVuY3Rpb24ocmVjb3JkVHlwZSwga25vd25T
aWRlKXsKLSAgICAgIHZhciBrbm93bktleSA9IGtub3duU2lkZS5rZXksIGtleSwgb3RoZXJLaW5k
OwotICAgICAgdmFyIGtub3duS2luZCA9IGtub3duU2lkZS5raW5kOwotCi0gICAgICB2YXIgaW52
ZXJzZSA9IHJlY29yZFR5cGUuaW52ZXJzZUZvcihrbm93bktleSk7Ci0KLSAgICAgIGlmIChpbnZl
cnNlKXsKLSAgICAgICAga2V5ID0gaW52ZXJzZS5uYW1lOwotICAgICAgICBvdGhlcktpbmQgPSBp
bnZlcnNlLmtpbmQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghaW52ZXJzZSl7Ci0gICAgICAgIHJl
dHVybiBrbm93bktpbmQgPT09ICJiZWxvbmdzVG8iID8gIm9uZVRvTm9uZSIgOiAibWFueVRvTm9u
ZSI7Ci0gICAgICB9Ci0gICAgICBlbHNlewotICAgICAgICBpZihvdGhlcktpbmQgPT09ICJiZWxv
bmdzVG8iKXsKLSAgICAgICAgICByZXR1cm4ga25vd25LaW5kID09PSAiYmVsb25nc1RvIiA/ICJv
bmVUb09uZSIgOiAibWFueVRvT25lIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAg
ICAgIHJldHVybiBrbm93bktpbmQgPT09ICJiZWxvbmdzVG8iID8gIm9uZVRvTWFueSIgOiAibWFu
eVRvTWFueSI7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgIH07Ci0KLSAgICBSZWxhdGlvbnNo
aXBDaGFuZ2UuY3JlYXRlQ2hhbmdlID0gZnVuY3Rpb24oZmlyc3RSZWNvcmQsIHNlY29uZFJlY29y
ZCwgc3RvcmUsIG9wdGlvbnMpewotICAgICAgLy8gR2V0IHRoZSB0eXBlIG9mIHRoZSBjaGlsZCBi
YXNlZCBvbiB0aGUgY2hpbGQncyBjbGllbnQgSUQKLSAgICAgIHZhciBmaXJzdFJlY29yZFR5cGUg
PSBmaXJzdFJlY29yZC5jb25zdHJ1Y3RvciwgY2hhbmdlVHlwZTsKLSAgICAgIGNoYW5nZVR5cGUg
PSBSZWxhdGlvbnNoaXBDaGFuZ2UuZGV0ZXJtaW5lUmVsYXRpb25zaGlwVHlwZShmaXJzdFJlY29y
ZFR5cGUsIG9wdGlvbnMpOwotICAgICAgaWYgKGNoYW5nZVR5cGUgPT09ICJvbmVUb01hbnkiKXsK
LSAgICAgICAgcmV0dXJuIE9uZVRvTWFueUNoYW5nZS5jcmVhdGVDaGFuZ2UoZmlyc3RSZWNvcmQs
IHNlY29uZFJlY29yZCwgc3RvcmUsIG9wdGlvbnMpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAo
Y2hhbmdlVHlwZSA9PT0gIm1hbnlUb09uZSIpewotICAgICAgICByZXR1cm4gT25lVG9NYW55Q2hh
bmdlLmNyZWF0ZUNoYW5nZShzZWNvbmRSZWNvcmQsIGZpcnN0UmVjb3JkLCBzdG9yZSwgb3B0aW9u
cyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGFuZ2VUeXBlID09PSAib25lVG9Ob25lIil7
Ci0gICAgICAgIHJldHVybiBPbmVUb05vbmVDaGFuZ2UuY3JlYXRlQ2hhbmdlKGZpcnN0UmVjb3Jk
LCBzZWNvbmRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KGNoYW5nZVR5cGUgPT09ICJtYW55VG9Ob25lIil7Ci0gICAgICAgIHJldHVybiBNYW55VG9Ob25l
Q2hhbmdlLmNyZWF0ZUNoYW5nZShmaXJzdFJlY29yZCwgc2Vjb25kUmVjb3JkLCBzdG9yZSwgb3B0
aW9ucyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChjaGFuZ2VUeXBlID09PSAib25lVG9PbmUi
KXsKLSAgICAgICAgcmV0dXJuIE9uZVRvT25lQ2hhbmdlLmNyZWF0ZUNoYW5nZShmaXJzdFJlY29y
ZCwgc2Vjb25kUmVjb3JkLCBzdG9yZSwgb3B0aW9ucyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChjaGFuZ2VUeXBlID09PSAibWFueVRvTWFueSIpewotICAgICAgICByZXR1cm4gTWFueVRvTWFu
eUNoYW5nZS5jcmVhdGVDaGFuZ2UoZmlyc3RSZWNvcmQsIHNlY29uZFJlY29yZCwgc3RvcmUsIG9w
dGlvbnMpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBPbmVUb05vbmVDaGFuZ2UuY3JlYXRlQ2hh
bmdlID0gZnVuY3Rpb24oY2hpbGRSZWNvcmQsIHBhcmVudFJlY29yZCwgc3RvcmUsIG9wdGlvbnMp
IHsKLSAgICAgIHZhciBrZXkgPSBvcHRpb25zLmtleTsKLSAgICAgIHZhciBjaGFuZ2UgPSBSZWxh
dGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5nZSh7Ci0gICAgICAgICAgcGFyZW50UmVjb3JkOiBw
YXJlbnRSZWNvcmQsCi0gICAgICAgICAgY2hpbGRSZWNvcmQ6IGNoaWxkUmVjb3JkLAotICAgICAg
ICAgIGZpcnN0UmVjb3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBzdG9yZTogc3RvcmUsCi0g
ICAgICAgICAgY2hhbmdlVHlwZTogb3B0aW9ucy5jaGFuZ2VUeXBlLAotICAgICAgICAgIGZpcnN0
UmVjb3JkTmFtZToga2V5LAotICAgICAgICAgIGZpcnN0UmVjb3JkS2luZDogImJlbG9uZ3NUbyIK
LSAgICAgIH0pOwotCi0gICAgICBzdG9yZS5hZGRSZWxhdGlvbnNoaXBDaGFuZ2VGb3IoY2hpbGRS
ZWNvcmQsIGtleSwgcGFyZW50UmVjb3JkLCBudWxsLCBjaGFuZ2UpOwotCi0gICAgICByZXR1cm4g
Y2hhbmdlOwotICAgIH07Ci0KLSAgICBNYW55VG9Ob25lQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1
bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKSB7Ci0gICAg
ICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7Ci0gICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlw
Q2hhbmdlLl9jcmVhdGVDaGFuZ2UoewotICAgICAgICAgIHBhcmVudFJlY29yZDogY2hpbGRSZWNv
cmQsCi0gICAgICAgICAgY2hpbGRSZWNvcmQ6IHBhcmVudFJlY29yZCwKLSAgICAgICAgICBzZWNv
bmRSZWNvcmQ6IGNoaWxkUmVjb3JkLAotICAgICAgICAgIHN0b3JlOiBzdG9yZSwKLSAgICAgICAg
ICBjaGFuZ2VUeXBlOiBvcHRpb25zLmNoYW5nZVR5cGUsCi0gICAgICAgICAgc2Vjb25kUmVjb3Jk
TmFtZTogb3B0aW9ucy5rZXksCi0gICAgICAgICAgc2Vjb25kUmVjb3JkS2luZDogImhhc01hbnki
Ci0gICAgICB9KTsKLQotICAgICAgc3RvcmUuYWRkUmVsYXRpb25zaGlwQ2hhbmdlRm9yKGNoaWxk
UmVjb3JkLCBrZXksIHBhcmVudFJlY29yZCwgbnVsbCwgY2hhbmdlKTsKLSAgICAgIHJldHVybiBj
aGFuZ2U7Ci0gICAgfTsKLQotCi0gICAgTWFueVRvTWFueUNoYW5nZS5jcmVhdGVDaGFuZ2UgPSBm
dW5jdGlvbihjaGlsZFJlY29yZCwgcGFyZW50UmVjb3JkLCBzdG9yZSwgb3B0aW9ucykgewotICAg
ICAgLy8gSWYgdGhlIG5hbWUgb2YgdGhlIGJlbG9uZ3NUbyBzaWRlIG9mIHRoZSByZWxhdGlvbnNo
aXAgaXMgc3BlY2lmaWVkLAotICAgICAgLy8gdXNlIHRoYXQKLSAgICAgIC8vIElmIHRoZSB0eXBl
IG9mIHRoZSBwYXJlbnQgaXMgc3BlY2lmaWVkLCBsb29rIGl0IHVwIG9uIHRoZSBjaGlsZCdzIHR5
cGUKLSAgICAgIC8vIGRlZmluaXRpb24uCi0gICAgICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7Ci0K
LSAgICAgIHZhciBjaGFuZ2UgPSBSZWxhdGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5nZSh7Ci0g
ICAgICAgICAgcGFyZW50UmVjb3JkOiBwYXJlbnRSZWNvcmQsCi0gICAgICAgICAgY2hpbGRSZWNv
cmQ6IGNoaWxkUmVjb3JkLAotICAgICAgICAgIGZpcnN0UmVjb3JkOiBjaGlsZFJlY29yZCwKLSAg
ICAgICAgICBzZWNvbmRSZWNvcmQ6IHBhcmVudFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJlY29y
ZEtpbmQ6ICJoYXNNYW55IiwKLSAgICAgICAgICBzZWNvbmRSZWNvcmRLaW5kOiAiaGFzTWFueSIs
Ci0gICAgICAgICAgc3RvcmU6IHN0b3JlLAotICAgICAgICAgIGNoYW5nZVR5cGU6IG9wdGlvbnMu
Y2hhbmdlVHlwZSwKLSAgICAgICAgICBmaXJzdFJlY29yZE5hbWU6ICBrZXkKLSAgICAgIH0pOwot
Ci0gICAgICBzdG9yZS5hZGRSZWxhdGlvbnNoaXBDaGFuZ2VGb3IoY2hpbGRSZWNvcmQsIGtleSwg
cGFyZW50UmVjb3JkLCBudWxsLCBjaGFuZ2UpOwotCi0KLSAgICAgIHJldHVybiBjaGFuZ2U7Ci0g
ICAgfTsKLQotICAgIE9uZVRvT25lQ2hhbmdlLmNyZWF0ZUNoYW5nZSA9IGZ1bmN0aW9uKGNoaWxk
UmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0b3JlLCBvcHRpb25zKSB7Ci0gICAgICB2YXIga2V5Owot
Ci0gICAgICAvLyBJZiB0aGUgbmFtZSBvZiB0aGUgYmVsb25nc1RvIHNpZGUgb2YgdGhlIHJlbGF0
aW9uc2hpcCBpcyBzcGVjaWZpZWQsCi0gICAgICAvLyB1c2UgdGhhdAotICAgICAgLy8gSWYgdGhl
IHR5cGUgb2YgdGhlIHBhcmVudCBpcyBzcGVjaWZpZWQsIGxvb2sgaXQgdXAgb24gdGhlIGNoaWxk
J3MgdHlwZQotICAgICAgLy8gZGVmaW5pdGlvbi4KLSAgICAgIGlmIChvcHRpb25zLnBhcmVudFR5
cGUpIHsKLSAgICAgICAga2V5ID0gb3B0aW9ucy5wYXJlbnRUeXBlLmludmVyc2VGb3Iob3B0aW9u
cy5rZXkpLm5hbWU7Ci0gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua2V5KSB7Ci0gICAgICAgIGtl
eSA9IG9wdGlvbnMua2V5OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZ
b3UgbXVzdCBwYXNzIGVpdGhlciBhIHBhcmVudFR5cGUgb3IgYmVsb25nc1RvTmFtZSBvcHRpb24g
dG8gT25lVG9NYW55Q2hhbmdlLmZvckNoaWxkQW5kUGFyZW50IiwgZmFsc2UpOwotICAgICAgfQot
Ci0gICAgICB2YXIgY2hhbmdlID0gUmVsYXRpb25zaGlwQ2hhbmdlLl9jcmVhdGVDaGFuZ2Uoewot
ICAgICAgICAgIHBhcmVudFJlY29yZDogcGFyZW50UmVjb3JkLAotICAgICAgICAgIGNoaWxkUmVj
b3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJlY29yZDogY2hpbGRSZWNvcmQsCi0g
ICAgICAgICAgc2Vjb25kUmVjb3JkOiBwYXJlbnRSZWNvcmQsCi0gICAgICAgICAgZmlyc3RSZWNv
cmRLaW5kOiAiYmVsb25nc1RvIiwKLSAgICAgICAgICBzZWNvbmRSZWNvcmRLaW5kOiAiYmVsb25n
c1RvIiwKLSAgICAgICAgICBzdG9yZTogc3RvcmUsCi0gICAgICAgICAgY2hhbmdlVHlwZTogb3B0
aW9ucy5jaGFuZ2VUeXBlLAotICAgICAgICAgIGZpcnN0UmVjb3JkTmFtZTogIGtleQotICAgICAg
fSk7Ci0KLSAgICAgIHN0b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwg
a2V5LCBwYXJlbnRSZWNvcmQsIG51bGwsIGNoYW5nZSk7Ci0KLQotICAgICAgcmV0dXJuIGNoYW5n
ZTsKLSAgICB9OwotCi0gICAgT25lVG9PbmVDaGFuZ2UubWFpbnRhaW5JbnZhcmlhbnQgPSBmdW5j
dGlvbihvcHRpb25zLCBzdG9yZSwgY2hpbGRSZWNvcmQsIGtleSl7Ci0gICAgICBpZiAob3B0aW9u
cy5jaGFuZ2VUeXBlID09PSAiYWRkIiAmJiBzdG9yZS5yZWNvcmRJc01hdGVyaWFsaXplZChjaGls
ZFJlY29yZCkpIHsKLSAgICAgICAgdmFyIG9sZFBhcmVudCA9IGdldChjaGlsZFJlY29yZCwga2V5
KTsKLSAgICAgICAgaWYgKG9sZFBhcmVudCl7Ci0gICAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdD
aGFuZ2UgPSBPbmVUb09uZUNoYW5nZS5jcmVhdGVDaGFuZ2UoY2hpbGRSZWNvcmQsIG9sZFBhcmVu
dCwgc3RvcmUsIHsKLSAgICAgICAgICAgICAgcGFyZW50VHlwZTogb3B0aW9ucy5wYXJlbnRUeXBl
LAotICAgICAgICAgICAgICBoYXNNYW55TmFtZTogb3B0aW9ucy5oYXNNYW55TmFtZSwKLSAgICAg
ICAgICAgICAgY2hhbmdlVHlwZTogInJlbW92ZSIsCi0gICAgICAgICAgICAgIGtleTogb3B0aW9u
cy5rZXkKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIHN0b3JlLmFkZFJlbGF0aW9uc2hpcENo
YW5nZUZvcihjaGlsZFJlY29yZCwga2V5LCBvcHRpb25zLnBhcmVudFJlY29yZCAsIG51bGwsIGNv
cnJlc3BvbmRpbmdDaGFuZ2UpOwotICAgICAgICAgY29ycmVzcG9uZGluZ0NoYW5nZS5zeW5jKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0gICAgT25lVG9NYW55Q2hhbmdlLmNyZWF0
ZUNoYW5nZSA9IGZ1bmN0aW9uKGNoaWxkUmVjb3JkLCBwYXJlbnRSZWNvcmQsIHN0b3JlLCBvcHRp
b25zKSB7Ci0gICAgICB2YXIga2V5OwotCi0gICAgICAvLyBJZiB0aGUgbmFtZSBvZiB0aGUgYmVs
b25nc1RvIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcCBpcyBzcGVjaWZpZWQsCi0gICAgICAvLyB1
c2UgdGhhdAotICAgICAgLy8gSWYgdGhlIHR5cGUgb2YgdGhlIHBhcmVudCBpcyBzcGVjaWZpZWQs
IGxvb2sgaXQgdXAgb24gdGhlIGNoaWxkJ3MgdHlwZQotICAgICAgLy8gZGVmaW5pdGlvbi4KLSAg
ICAgIGlmIChvcHRpb25zLnBhcmVudFR5cGUpIHsKLSAgICAgICAga2V5ID0gb3B0aW9ucy5wYXJl
bnRUeXBlLmludmVyc2VGb3Iob3B0aW9ucy5rZXkpLm5hbWU7Ci0gICAgICAgIE9uZVRvTWFueUNo
YW5nZS5tYWludGFpbkludmFyaWFudCggb3B0aW9ucywgc3RvcmUsIGNoaWxkUmVjb3JkLCBrZXkg
KTsKLSAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rZXkpIHsKLSAgICAgICAga2V5ID0gb3B0aW9u
cy5rZXk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IHBh
c3MgZWl0aGVyIGEgcGFyZW50VHlwZSBvciBiZWxvbmdzVG9OYW1lIG9wdGlvbiB0byBPbmVUb01h
bnlDaGFuZ2UuZm9yQ2hpbGRBbmRQYXJlbnQiLCBmYWxzZSk7Ci0gICAgICB9Ci0KLSAgICAgIHZh
ciBjaGFuZ2UgPSBSZWxhdGlvbnNoaXBDaGFuZ2UuX2NyZWF0ZUNoYW5nZSh7Ci0gICAgICAgICAg
cGFyZW50UmVjb3JkOiBwYXJlbnRSZWNvcmQsCi0gICAgICAgICAgY2hpbGRSZWNvcmQ6IGNoaWxk
UmVjb3JkLAotICAgICAgICAgIGZpcnN0UmVjb3JkOiBjaGlsZFJlY29yZCwKLSAgICAgICAgICBz
ZWNvbmRSZWNvcmQ6IHBhcmVudFJlY29yZCwKLSAgICAgICAgICBmaXJzdFJlY29yZEtpbmQ6ICJi
ZWxvbmdzVG8iLAotICAgICAgICAgIHNlY29uZFJlY29yZEtpbmQ6ICJoYXNNYW55IiwKLSAgICAg
ICAgICBzdG9yZTogc3RvcmUsCi0gICAgICAgICAgY2hhbmdlVHlwZTogb3B0aW9ucy5jaGFuZ2VU
eXBlLAotICAgICAgICAgIGZpcnN0UmVjb3JkTmFtZTogIGtleQotICAgICAgfSk7Ci0KLSAgICAg
IHN0b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGlsZFJlY29yZCwga2V5LCBwYXJlbnRS
ZWNvcmQsIGNoYW5nZS5nZXRTZWNvbmRSZWNvcmROYW1lKCksIGNoYW5nZSk7Ci0KLQotICAgICAg
cmV0dXJuIGNoYW5nZTsKLSAgICB9OwotCi0KLSAgICBPbmVUb01hbnlDaGFuZ2UubWFpbnRhaW5J
bnZhcmlhbnQgPSBmdW5jdGlvbihvcHRpb25zLCBzdG9yZSwgY2hpbGRSZWNvcmQsIGtleSl7Ci0g
ICAgICBpZiAob3B0aW9ucy5jaGFuZ2VUeXBlID09PSAiYWRkIiAmJiBjaGlsZFJlY29yZCkgewot
ICAgICAgICB2YXIgb2xkUGFyZW50ID0gZ2V0KGNoaWxkUmVjb3JkLCBrZXkpOwotICAgICAgICBp
ZiAob2xkUGFyZW50KXsKLSAgICAgICAgICB2YXIgY29ycmVzcG9uZGluZ0NoYW5nZSA9IE9uZVRv
TWFueUNoYW5nZS5jcmVhdGVDaGFuZ2UoY2hpbGRSZWNvcmQsIG9sZFBhcmVudCwgc3RvcmUsIHsK
LSAgICAgICAgICAgICAgcGFyZW50VHlwZTogb3B0aW9ucy5wYXJlbnRUeXBlLAotICAgICAgICAg
ICAgICBoYXNNYW55TmFtZTogb3B0aW9ucy5oYXNNYW55TmFtZSwKLSAgICAgICAgICAgICAgY2hh
bmdlVHlwZTogInJlbW92ZSIsCi0gICAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXkKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgIHN0b3JlLmFkZFJlbGF0aW9uc2hpcENoYW5nZUZvcihjaGls
ZFJlY29yZCwga2V5LCBvcHRpb25zLnBhcmVudFJlY29yZCwgY29ycmVzcG9uZGluZ0NoYW5nZS5n
ZXRTZWNvbmRSZWNvcmROYW1lKCksIGNvcnJlc3BvbmRpbmdDaGFuZ2UpOwotICAgICAgICAgIGNv
cnJlc3BvbmRpbmdDaGFuZ2Uuc3luYygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qKgotICAgICAgQGNsYXNzIFJlbGF0aW9uc2hpcENoYW5nZQotICAgICAgQG5hbWVzcGFj
ZSBEUwotICAgICovCi0gICAgUmVsYXRpb25zaGlwQ2hhbmdlLnByb3RvdHlwZSA9IHsKLQotICAg
ICAgZ2V0U2Vjb25kUmVjb3JkTmFtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBuYW1lID0g
dGhpcy5zZWNvbmRSZWNvcmROYW1lLCBwYXJlbnQ7Ci0KLSAgICAgICAgaWYgKCFuYW1lKSB7Ci0g
ICAgICAgICAgcGFyZW50ID0gdGhpcy5zZWNvbmRSZWNvcmQ7Ci0gICAgICAgICAgaWYgKCFwYXJl
bnQpIHsgcmV0dXJuOyB9Ci0KLSAgICAgICAgICB2YXIgY2hpbGRUeXBlID0gdGhpcy5maXJzdFJl
Y29yZC5jb25zdHJ1Y3RvcjsKLSAgICAgICAgICB2YXIgaW52ZXJzZSA9IGNoaWxkVHlwZS5pbnZl
cnNlRm9yKHRoaXMuZmlyc3RSZWNvcmROYW1lKTsKLSAgICAgICAgICB0aGlzLnNlY29uZFJlY29y
ZE5hbWUgPSBpbnZlcnNlLm5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5z
ZWNvbmRSZWNvcmROYW1lOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEdldCB0aGUg
bmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwIG9uIHRoZSBiZWxvbmdzVG8gc2lkZS4KLQotICAgICAg
ICBAbWV0aG9kIGdldEZpcnN0UmVjb3JkTmFtZQotICAgICAgICBAcmV0dXJuIHtTdHJpbmd9Ci0g
ICAgICAqLwotICAgICAgZ2V0Rmlyc3RSZWNvcmROYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
dmFyIG5hbWUgPSB0aGlzLmZpcnN0UmVjb3JkTmFtZTsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICAgIEBw
cml2YXRlCi0gICAgICAqLwotICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciBjaGlsZFJlY29yZCA9IHRoaXMuY2hpbGRSZWNvcmQsCi0gICAgICAgICAgICBiZWxvbmdzVG9O
YW1lID0gdGhpcy5nZXRGaXJzdFJlY29yZE5hbWUoKSwKLSAgICAgICAgICAgIGhhc01hbnlOYW1l
ID0gdGhpcy5nZXRTZWNvbmRSZWNvcmROYW1lKCksCi0gICAgICAgICAgICBzdG9yZSA9IHRoaXMu
c3RvcmU7Ci0KLSAgICAgICAgc3RvcmUucmVtb3ZlUmVsYXRpb25zaGlwQ2hhbmdlRm9yKGNoaWxk
UmVjb3JkLCBiZWxvbmdzVG9OYW1lLCB0aGlzLnBhcmVudFJlY29yZCwgaGFzTWFueU5hbWUsIHRo
aXMuY2hhbmdlVHlwZSk7Ci0gICAgICB9LAotCi0gICAgICBnZXRTZWNvbmRSZWNvcmQ6IGZ1bmN0
aW9uKCl7Ci0gICAgICAgIHJldHVybiB0aGlzLnNlY29uZFJlY29yZDsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBAbWV0aG9kIGdldEZpcnN0UmVjb3JkCi0gICAgICAgIEBwcml2YXRl
Ci0gICAgICAqLwotICAgICAgZ2V0Rmlyc3RSZWNvcmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5maXJzdFJlY29yZDsKLSAgICAgIH0sCi0KLSAgICAgIGNvYWxlc2NlOiBmdW5j
dGlvbigpewotICAgICAgICB2YXIgcmVsYXRpb25zaGlwUGFpcnMgPSB0aGlzLnN0b3JlLnJlbGF0
aW9uc2hpcENoYW5nZVBhaXJzRm9yKHRoaXMuZmlyc3RSZWNvcmQpOwotICAgICAgICBmb3JFYWNo
KHJlbGF0aW9uc2hpcFBhaXJzLCBmdW5jdGlvbihwYWlyKXsKLSAgICAgICAgICB2YXIgYWRkZWRD
aGFuZ2UgPSBwYWlyWyJhZGQiXTsKLSAgICAgICAgICB2YXIgcmVtb3ZlZENoYW5nZSA9IHBhaXJb
InJlbW92ZSJdOwotICAgICAgICAgIGlmKGFkZGVkQ2hhbmdlICYmIHJlbW92ZWRDaGFuZ2UpIHsK
LSAgICAgICAgICAgIGFkZGVkQ2hhbmdlLmRlc3Ryb3koKTsKLSAgICAgICAgICAgIHJlbW92ZWRD
aGFuZ2UuZGVzdHJveSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAg
fTsKLQotICAgIFJlbGF0aW9uc2hpcENoYW5nZUFkZC5wcm90b3R5cGUgPSBFbWJlci5jcmVhdGUo
UmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZSh7fSkpOwotICAgIFJlbGF0aW9uc2hpcENoYW5nZVJl
bW92ZS5wcm90b3R5cGUgPSBFbWJlci5jcmVhdGUoUmVsYXRpb25zaGlwQ2hhbmdlLmNyZWF0ZSh7
fSkpOwotCi0gICAgLy8gdGhlIG9iamVjdCBpcyBhIHZhbHVlLCBhbmQgbm90IGEgcHJvbWlzZQot
ICAgIGZ1bmN0aW9uIGlzVmFsdWUob2JqZWN0KSB7Ci0gICAgICByZXR1cm4gdHlwZW9mIG9iamVj
dCA9PT0gJ29iamVjdCcgJiYgKCFvYmplY3QudGhlbiB8fCB0eXBlb2Ygb2JqZWN0LnRoZW4gIT09
ICdmdW5jdGlvbicpOwotICAgIH0KLQotICAgIFJlbGF0aW9uc2hpcENoYW5nZUFkZC5wcm90b3R5
cGUuY2hhbmdlVHlwZSA9ICJhZGQiOwotICAgIFJlbGF0aW9uc2hpcENoYW5nZUFkZC5wcm90b3R5
cGUuc3luYyA9IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHNlY29uZFJlY29yZE5hbWUgPSB0aGlz
LmdldFNlY29uZFJlY29yZE5hbWUoKSwKLSAgICAgICAgICBmaXJzdFJlY29yZE5hbWUgPSB0aGlz
LmdldEZpcnN0UmVjb3JkTmFtZSgpLAotICAgICAgICAgIGZpcnN0UmVjb3JkID0gdGhpcy5nZXRG
aXJzdFJlY29yZCgpLAotICAgICAgICAgIHNlY29uZFJlY29yZCA9IHRoaXMuZ2V0U2Vjb25kUmVj
b3JkKCk7Ci0KLSAgICAgIC8vRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEgaGFzTWFueSAo
IiArIGhhc01hbnlOYW1lICsgIikgb24gIiArICghYmVsb25nc1RvTmFtZSAmJiAobmV3UGFyZW50
IHx8IG9sZFBhcmVudCB8fCB0aGlzLmxhc3RQYXJlbnQpLmNvbnN0cnVjdG9yKSArICIgYnV0IGRp
ZCBub3Qgc3BlY2lmeSBhbiBpbnZlcnNlIGJlbG9uZ3NUbyBvbiAiICsgY2hpbGQuY29uc3RydWN0
b3IsIGJlbG9uZ3NUb05hbWUpOwotICAgICAgLy9FbWJlci5hc3NlcnQoIllvdSBzcGVjaWZpZWQg
YSBiZWxvbmdzVG8gKCIgKyBiZWxvbmdzVG9OYW1lICsgIikgb24gIiArIGNoaWxkLmNvbnN0cnVj
dG9yICsgIiBidXQgZGlkIG5vdCBzcGVjaWZ5IGFuIGludmVyc2UgaGFzTWFueSBvbiAiICsgKCFo
YXNNYW55TmFtZSAmJiAobmV3UGFyZW50IHx8IG9sZFBhcmVudCB8fCB0aGlzLmxhc3RQYXJlbnRS
ZWNvcmQpLmNvbnN0cnVjdG9yKSwgaGFzTWFueU5hbWUpOwotCi0gICAgICBpZiAoc2Vjb25kUmVj
b3JkIGluc3RhbmNlb2YgTW9kZWwgJiYgZmlyc3RSZWNvcmQgaW5zdGFuY2VvZiBNb2RlbCkgewot
ICAgICAgICBpZih0aGlzLnNlY29uZFJlY29yZEtpbmQgPT09ICJiZWxvbmdzVG8iKXsKLSAgICAg
ICAgICBzZWNvbmRSZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigp
ewotICAgICAgICAgICAgc2V0KHNlY29uZFJlY29yZCwgc2Vjb25kUmVjb3JkTmFtZSwgZmlyc3RS
ZWNvcmQpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICB9Ci0gICAgICAgICBlbHNlIGlmKHRo
aXMuc2Vjb25kUmVjb3JkS2luZCA9PT0gImhhc01hbnkiKXsKLSAgICAgICAgICBzZWNvbmRSZWNv
cmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpewotICAgICAgICAgICAg
dmFyIHJlbGF0aW9uc2hpcCA9IGdldChzZWNvbmRSZWNvcmQsIHNlY29uZFJlY29yZE5hbWUpOwot
ICAgICAgICAgICAgaWYgKGlzVmFsdWUocmVsYXRpb25zaGlwKSkgeyByZWxhdGlvbnNoaXAuYWRk
T2JqZWN0KGZpcnN0UmVjb3JkKTsgfQotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9
Ci0KLSAgICAgIGlmIChmaXJzdFJlY29yZCBpbnN0YW5jZW9mIE1vZGVsICYmIHNlY29uZFJlY29y
ZCBpbnN0YW5jZW9mIE1vZGVsICYmIGdldChmaXJzdFJlY29yZCwgZmlyc3RSZWNvcmROYW1lKSAh
PT0gc2Vjb25kUmVjb3JkKSB7Ci0gICAgICAgIGlmKHRoaXMuZmlyc3RSZWNvcmRLaW5kID09PSAi
YmVsb25nc1RvIil7Ci0gICAgICAgICAgZmlyc3RSZWNvcmQuc3VzcGVuZFJlbGF0aW9uc2hpcE9i
c2VydmVycyhmdW5jdGlvbigpewotICAgICAgICAgICAgc2V0KGZpcnN0UmVjb3JkLCBmaXJzdFJl
Y29yZE5hbWUsIHNlY29uZFJlY29yZCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZih0aGlzLmZpcnN0UmVjb3JkS2luZCA9PT0gImhhc01hbnkiKXsKLSAgICAgICAg
ICBmaXJzdFJlY29yZC5zdXNwZW5kUmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7Ci0g
ICAgICAgICAgICB2YXIgcmVsYXRpb25zaGlwID0gZ2V0KGZpcnN0UmVjb3JkLCBmaXJzdFJlY29y
ZE5hbWUpOwotICAgICAgICAgICAgaWYgKGlzVmFsdWUocmVsYXRpb25zaGlwKSkgeyByZWxhdGlv
bnNoaXAuYWRkT2JqZWN0KHNlY29uZFJlY29yZCk7IH0KLSAgICAgICAgICB9KTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICB0aGlzLmNvYWxlc2NlKCk7Ci0gICAgfTsKLQotICAgIFJlbGF0
aW9uc2hpcENoYW5nZVJlbW92ZS5wcm90b3R5cGUuY2hhbmdlVHlwZSA9ICJyZW1vdmUiOwotICAg
IFJlbGF0aW9uc2hpcENoYW5nZVJlbW92ZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIHNlY29uZFJlY29yZE5hbWUgPSB0aGlzLmdldFNlY29uZFJlY29yZE5hbWUoKSwK
LSAgICAgICAgICBmaXJzdFJlY29yZE5hbWUgPSB0aGlzLmdldEZpcnN0UmVjb3JkTmFtZSgpLAot
ICAgICAgICAgIGZpcnN0UmVjb3JkID0gdGhpcy5nZXRGaXJzdFJlY29yZCgpLAotICAgICAgICAg
IHNlY29uZFJlY29yZCA9IHRoaXMuZ2V0U2Vjb25kUmVjb3JkKCk7Ci0KLSAgICAgIC8vRW1iZXIu
YXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIGEgaGFzTWFueSAoIiArIGhhc01hbnlOYW1lICsgIikgb24g
IiArICghYmVsb25nc1RvTmFtZSAmJiAobmV3UGFyZW50IHx8IG9sZFBhcmVudCB8fCB0aGlzLmxh
c3RQYXJlbnQpLmNvbnN0cnVjdG9yKSArICIgYnV0IGRpZCBub3Qgc3BlY2lmeSBhbiBpbnZlcnNl
IGJlbG9uZ3NUbyBvbiAiICsgY2hpbGQuY29uc3RydWN0b3IsIGJlbG9uZ3NUb05hbWUpOwotICAg
ICAgLy9FbWJlci5hc3NlcnQoIllvdSBzcGVjaWZpZWQgYSBiZWxvbmdzVG8gKCIgKyBiZWxvbmdz
VG9OYW1lICsgIikgb24gIiArIGNoaWxkLmNvbnN0cnVjdG9yICsgIiBidXQgZGlkIG5vdCBzcGVj
aWZ5IGFuIGludmVyc2UgaGFzTWFueSBvbiAiICsgKCFoYXNNYW55TmFtZSAmJiAobmV3UGFyZW50
IHx8IG9sZFBhcmVudCB8fCB0aGlzLmxhc3RQYXJlbnRSZWNvcmQpLmNvbnN0cnVjdG9yKSwgaGFz
TWFueU5hbWUpOwotCi0gICAgICBpZiAoc2Vjb25kUmVjb3JkIGluc3RhbmNlb2YgTW9kZWwgJiYg
Zmlyc3RSZWNvcmQgaW5zdGFuY2VvZiBNb2RlbCkgewotICAgICAgICBpZih0aGlzLnNlY29uZFJl
Y29yZEtpbmQgPT09ICJiZWxvbmdzVG8iKXsKLSAgICAgICAgICBzZWNvbmRSZWNvcmQuc3VzcGVu
ZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpewotICAgICAgICAgICAgc2V0KHNlY29u
ZFJlY29yZCwgc2Vjb25kUmVjb3JkTmFtZSwgbnVsbCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZih0aGlzLnNlY29uZFJlY29yZEtpbmQgPT09ICJoYXNNYW55Iil7
Ci0gICAgICAgICAgc2Vjb25kUmVjb3JkLnN1c3BlbmRSZWxhdGlvbnNoaXBPYnNlcnZlcnMoZnVu
Y3Rpb24oKXsKLSAgICAgICAgICAgIHZhciByZWxhdGlvbnNoaXAgPSBnZXQoc2Vjb25kUmVjb3Jk
LCBzZWNvbmRSZWNvcmROYW1lKTsKLSAgICAgICAgICAgIGlmIChpc1ZhbHVlKHJlbGF0aW9uc2hp
cCkpIHsgcmVsYXRpb25zaGlwLnJlbW92ZU9iamVjdChmaXJzdFJlY29yZCk7IH0KLSAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZmlyc3RSZWNvcmQgaW5zdGFu
Y2VvZiBNb2RlbCAmJiBnZXQoZmlyc3RSZWNvcmQsIGZpcnN0UmVjb3JkTmFtZSkpIHsKLSAgICAg
ICAgaWYodGhpcy5maXJzdFJlY29yZEtpbmQgPT09ICJiZWxvbmdzVG8iKXsKLSAgICAgICAgICBm
aXJzdFJlY29yZC5zdXNwZW5kUmVsYXRpb25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7Ci0gICAg
ICAgICAgICBzZXQoZmlyc3RSZWNvcmQsIGZpcnN0UmVjb3JkTmFtZSwgbnVsbCk7Ci0gICAgICAg
ICAgfSk7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlIGlmKHRoaXMuZmlyc3RSZWNvcmRLaW5k
ID09PSAiaGFzTWFueSIpewotICAgICAgICAgICBmaXJzdFJlY29yZC5zdXNwZW5kUmVsYXRpb25z
aGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgdmFyIHJlbGF0aW9uc2hpcCA9
IGdldChmaXJzdFJlY29yZCwgZmlyc3RSZWNvcmROYW1lKTsKLSAgICAgICAgICAgICBpZiAoaXNW
YWx1ZShyZWxhdGlvbnNoaXApKSB7IHJlbGF0aW9uc2hpcC5yZW1vdmVPYmplY3Qoc2Vjb25kUmVj
b3JkKTsgfQotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMu
Y29hbGVzY2UoKTsKLSAgICB9OwotCi0gICAgX19leHBvcnRzX18uUmVsYXRpb25zaGlwQ2hhbmdl
ID0gUmVsYXRpb25zaGlwQ2hhbmdlOwotICAgIF9fZXhwb3J0c19fLlJlbGF0aW9uc2hpcENoYW5n
ZUFkZCA9IFJlbGF0aW9uc2hpcENoYW5nZUFkZDsKLSAgICBfX2V4cG9ydHNfXy5SZWxhdGlvbnNo
aXBDaGFuZ2VSZW1vdmUgPSBSZWxhdGlvbnNoaXBDaGFuZ2VSZW1vdmU7Ci0gICAgX19leHBvcnRz
X18uT25lVG9NYW55Q2hhbmdlID0gT25lVG9NYW55Q2hhbmdlOwotICAgIF9fZXhwb3J0c19fLk1h
bnlUb05vbmVDaGFuZ2UgPSBNYW55VG9Ob25lQ2hhbmdlOwotICAgIF9fZXhwb3J0c19fLk9uZVRv
T25lQ2hhbmdlID0gT25lVG9PbmVDaGFuZ2U7Ci0gICAgX19leHBvcnRzX18uTWFueVRvTWFueUNo
YW5nZSA9IE1hbnlUb01hbnlDaGFuZ2U7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9z
eXN0ZW0vY29udGFpbmVyX3Byb3h5IiwgCi0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2V4
cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIFRoaXMgaXMgdXNl
ZCBpbnRlcm5hbGx5IHRvIGVuYWJsZSBkZXByZWNhdGlvbiBvZiBjb250YWluZXIgcGF0aHMgYW5k
IHByb3ZpZGUKLSAgICAgIGEgZGVjZW50IG1lc3NhZ2UgdG8gdGhlIHVzZXIgaW5kaWNhdGluZyBo
b3cgdG8gZml4IHRoZSBpc3N1ZS4KLQotICAgICAgQGNsYXNzIENvbnRhaW5lclByb3h5Ci0gICAg
ICBAbmFtZXNwYWNlIERTCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgdmFyIENvbnRhaW5l
clByb3h5ID0gZnVuY3Rpb24gKGNvbnRhaW5lcil7Ci0gICAgICB0aGlzLmNvbnRhaW5lciA9IGNv
bnRhaW5lcjsKLSAgICB9OwotCi0gICAgQ29udGFpbmVyUHJveHkucHJvdG90eXBlLmFsaWFzZWRG
YWN0b3J5ID0gZnVuY3Rpb24ocGF0aCwgcHJlTG9va3VwKSB7Ci0gICAgICB2YXIgX3RoaXMgPSB0
aGlzOwotCi0gICAgICByZXR1cm4ge2NyZWF0ZTogZnVuY3Rpb24oKXsgCi0gICAgICAgIGlmIChw
cmVMb29rdXApIHsgcHJlTG9va3VwKCk7IH0KLQotICAgICAgICByZXR1cm4gX3RoaXMuY29udGFp
bmVyLmxvb2t1cChwYXRoKTsgCi0gICAgICB9fTsKLSAgICB9OwotCi0gICAgQ29udGFpbmVyUHJv
eHkucHJvdG90eXBlLnJlZ2lzdGVyQWxpYXMgPSBmdW5jdGlvbihzb3VyY2UsIGRlc3QsIHByZUxv
b2t1cCkgewotICAgICAgdmFyIGZhY3RvcnkgPSB0aGlzLmFsaWFzZWRGYWN0b3J5KGRlc3QsIHBy
ZUxvb2t1cCk7Ci0KLSAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5yZWdpc3Rlcihzb3VyY2Us
IGZhY3RvcnkpOwotICAgIH07Ci0KLSAgICBDb250YWluZXJQcm94eS5wcm90b3R5cGUucmVnaXN0
ZXJEZXByZWNhdGlvbiA9IGZ1bmN0aW9uKGRlcHJlY2F0ZWQsIHZhbGlkKSB7Ci0gICAgICB2YXIg
cHJlTG9va3VwQ2FsbGJhY2sgPSBmdW5jdGlvbigpewotICAgICAgICBFbWJlci5kZXByZWNhdGUo
IllvdSB0cmllZCB0byBsb29rIHVwICciICsgZGVwcmVjYXRlZCArICInLCAiICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJidXQgdGhpcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9m
ICciICsgdmFsaWQgKyAiJy4iLCBmYWxzZSk7Ci0gICAgICB9OwotCi0gICAgICByZXR1cm4gdGhp
cy5yZWdpc3RlckFsaWFzKGRlcHJlY2F0ZWQsIHZhbGlkLCBwcmVMb29rdXBDYWxsYmFjayk7Ci0g
ICAgfTsKLQotICAgIENvbnRhaW5lclByb3h5LnByb3RvdHlwZS5yZWdpc3RlckRlcHJlY2F0aW9u
cyA9IGZ1bmN0aW9uKHByb3h5UGFpcnMpIHsKLSAgICAgIGZvciAodmFyIGkgPSBwcm94eVBhaXJz
Lmxlbmd0aDsgaSA+IDA7IGktLSkgewotICAgICAgICB2YXIgcHJveHlQYWlyID0gcHJveHlQYWly
c1tpIC0gMV0sCi0gICAgICAgICAgICBkZXByZWNhdGVkID0gcHJveHlQYWlyWydkZXByZWNhdGVk
J10sCi0gICAgICAgICAgICB2YWxpZCA9IHByb3h5UGFpclsndmFsaWQnXTsKLQotICAgICAgICB0
aGlzLnJlZ2lzdGVyRGVwcmVjYXRpb24oZGVwcmVjYXRlZCwgdmFsaWQpOwotICAgICAgfQotICAg
IH07Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29udGFpbmVyUHJveHk7Ci0gIH0p
OwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0vZGVidWciLCAKLSAgWyIuL2RlYnVnL2Rl
YnVnX2luZm8iLCIuL2RlYnVnL2RlYnVnX2FkYXB0ZXIiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9u
KF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0K
LSAgICB2YXIgRGVidWdBZGFwdGVyID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0KLSAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRGVidWdBZGFwdGVyOwotICB9KTsKLWRlZmluZSgi
ZW1iZXItZGF0YS9saWIvc3lzdGVtL2RlYnVnL2RlYnVnX2FkYXB0ZXIiLCAKLSAgWyIuLi9tb2Rl
bCIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykg
ewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQot
ICAgICovCi0gICAgdmFyIE1vZGVsID0gX19kZXBlbmRlbmN5MV9fLk1vZGVsOwotICAgIHZhciBn
ZXQgPSBFbWJlci5nZXQsIGNhcGl0YWxpemUgPSBFbWJlci5TdHJpbmcuY2FwaXRhbGl6ZSwgdW5k
ZXJzY29yZSA9IEVtYmVyLlN0cmluZy51bmRlcnNjb3JlOwotCi0gICAgLyoqCi0gICAgICBFeHRl
bmQgYEVtYmVyLkRhdGFBZGFwdGVyYCB3aXRoIEVEIHNwZWNpZmljIGNvZGUuCi0KLSAgICAgIEBj
bGFzcyBEZWJ1Z0FkYXB0ZXIKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVt
YmVyLkRhdGFBZGFwdGVyCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgdmFyIERlYnVnQWRh
cHRlciA9IEVtYmVyLkRhdGFBZGFwdGVyLmV4dGVuZCh7Ci0gICAgICBnZXRGaWx0ZXJzOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICB7IG5hbWU6ICdpc05ldycsIGRl
c2M6ICdOZXcnIH0sCi0gICAgICAgICAgeyBuYW1lOiAnaXNNb2RpZmllZCcsIGRlc2M6ICdNb2Rp
ZmllZCcgfSwKLSAgICAgICAgICB7IG5hbWU6ICdpc0NsZWFuJywgZGVzYzogJ0NsZWFuJyB9Ci0g
ICAgICAgIF07Ci0gICAgICB9LAotCi0gICAgICBkZXRlY3Q6IGZ1bmN0aW9uKGtsYXNzKSB7Ci0g
ICAgICAgIHJldHVybiBrbGFzcyAhPT0gTW9kZWwgJiYgTW9kZWwuZGV0ZWN0KGtsYXNzKTsKLSAg
ICAgIH0sCi0KLSAgICAgIGNvbHVtbnNGb3JUeXBlOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAgICAg
IHZhciBjb2x1bW5zID0gW3sgbmFtZTogJ2lkJywgZGVzYzogJ0lkJyB9XSwgY291bnQgPSAwLCBz
ZWxmID0gdGhpczsKLSAgICAgICAgZ2V0KHR5cGUsICdhdHRyaWJ1dGVzJykuZm9yRWFjaChmdW5j
dGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgICBpZiAoY291bnQrKyA+IHNlbGYuYXR0cmli
dXRlTGltaXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgICAgICB2YXIgZGVzYyA9IGNhcGl0
YWxpemUodW5kZXJzY29yZShuYW1lKS5yZXBsYWNlKCdfJywgJyAnKSk7Ci0gICAgICAgICAgICBj
b2x1bW5zLnB1c2goeyBuYW1lOiBuYW1lLCBkZXNjOiBkZXNjIH0pOwotICAgICAgICB9KTsKLSAg
ICAgICAgcmV0dXJuIGNvbHVtbnM7Ci0gICAgICB9LAotCi0gICAgICBnZXRSZWNvcmRzOiBmdW5j
dGlvbih0eXBlKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgnc3RvcmUnKS5hbGwodHlwZSk7
Ci0gICAgICB9LAotCi0gICAgICBnZXRSZWNvcmRDb2x1bW5WYWx1ZXM6IGZ1bmN0aW9uKHJlY29y
ZCkgewotICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIGNvdW50ID0gMCwKLSAgICAgICAgICAgIGNv
bHVtblZhbHVlcyA9IHsgaWQ6IGdldChyZWNvcmQsICdpZCcpIH07Ci0KLSAgICAgICAgcmVjb3Jk
LmVhY2hBdHRyaWJ1dGUoZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgaWYgKGNvdW50KysgPiBz
ZWxmLmF0dHJpYnV0ZUxpbWl0KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIHZhciB2YWx1ZSA9IGdldChyZWNvcmQsIGtleSk7Ci0gICAgICAgICAg
Y29sdW1uVmFsdWVzW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBj
b2x1bW5WYWx1ZXM7Ci0gICAgICB9LAotCi0gICAgICBnZXRSZWNvcmRLZXl3b3JkczogZnVuY3Rp
b24ocmVjb3JkKSB7Ci0gICAgICAgIHZhciBrZXl3b3JkcyA9IFtdLCBrZXlzID0gRW1iZXIuQShb
J2lkJ10pOwotICAgICAgICByZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXkpIHsKLSAg
ICAgICAgICBrZXlzLnB1c2goa2V5KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGtleXMuZm9yRWFj
aChmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICBrZXl3b3Jkcy5wdXNoKGdldChyZWNvcmQsIGtl
eSkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGtleXdvcmRzOwotICAgICAgfSwKLQot
ICAgICAgZ2V0UmVjb3JkRmlsdGVyVmFsdWVzOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAg
cmV0dXJuIHsKLSAgICAgICAgICBpc05ldzogcmVjb3JkLmdldCgnaXNOZXcnKSwKLSAgICAgICAg
ICBpc01vZGlmaWVkOiByZWNvcmQuZ2V0KCdpc0RpcnR5JykgJiYgIXJlY29yZC5nZXQoJ2lzTmV3
JyksCi0gICAgICAgICAgaXNDbGVhbjogIXJlY29yZC5nZXQoJ2lzRGlydHknKQotICAgICAgICB9
OwotICAgICAgfSwKLQotICAgICAgZ2V0UmVjb3JkQ29sb3I6IGZ1bmN0aW9uKHJlY29yZCkgewot
ICAgICAgICB2YXIgY29sb3IgPSAnYmxhY2snOwotICAgICAgICBpZiAocmVjb3JkLmdldCgnaXNO
ZXcnKSkgewotICAgICAgICAgIGNvbG9yID0gJ2dyZWVuJzsKLSAgICAgICAgfSBlbHNlIGlmIChy
ZWNvcmQuZ2V0KCdpc0RpcnR5JykpIHsKLSAgICAgICAgICBjb2xvciA9ICdibHVlJzsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgICB9LAotCi0gICAgICBvYnNlcnZlUmVj
b3JkOiBmdW5jdGlvbihyZWNvcmQsIHJlY29yZFVwZGF0ZWQpIHsKLSAgICAgICAgdmFyIHJlbGVh
c2VNZXRob2RzID0gRW1iZXIuQSgpLCBzZWxmID0gdGhpcywKLSAgICAgICAgICAgIGtleXNUb09i
c2VydmUgPSBFbWJlci5BKFsnaWQnLCAnaXNOZXcnLCAnaXNEaXJ0eSddKTsKLQotICAgICAgICBy
ZWNvcmQuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICBrZXlzVG9PYnNl
cnZlLnB1c2goa2V5KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAga2V5c1RvT2JzZXJ2ZS5mb3JF
YWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICByZWNvcmRVcGRhdGVkKHNlbGYud3JhcFJlY29yZChyZWNvcmQpKTsKLSAg
ICAgICAgICB9OwotICAgICAgICAgIEVtYmVyLmFkZE9ic2VydmVyKHJlY29yZCwga2V5LCBoYW5k
bGVyKTsKLSAgICAgICAgICByZWxlYXNlTWV0aG9kcy5wdXNoKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgRW1iZXIucmVtb3ZlT2JzZXJ2ZXIocmVjb3JkLCBrZXksIGhhbmRsZXIpOwotICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgcmVsZWFzZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgIHJlbGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZm4pIHsgZm4oKTsg
fSApOwotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiByZWxlYXNlOwotICAgICAgfQotCi0g
ICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRGVidWdBZGFwdGVyOwotICB9
KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL2RlYnVnL2RlYnVnX2luZm8iLCAKLSAg
WyIuLi9tb2RlbCIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4
cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgTW9kZWwgPSBfX2RlcGVuZGVu
Y3kxX18uTW9kZWw7Ci0KLSAgICBNb2RlbC5yZW9wZW4oewotCi0gICAgICAvKioKLSAgICAgICAg
UHJvdmlkZXMgaW5mbyBhYm91dCB0aGUgbW9kZWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwotICAg
ICAgICBieSBncm91cGluZyB0aGUgcHJvcGVydGllcyBpbnRvIG1vcmUgc2VtYW50aWMgZ3JvdXBz
LgotCi0gICAgICAgIE1lYW50IHRvIGJlIHVzZWQgYnkgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMg
dGhlIENocm9tZSBFbWJlciBFeHRlbnNpb24uCi0KLSAgICAgICAgLSBHcm91cHMgYWxsIGF0dHJp
YnV0ZXMgaW4gIkF0dHJpYnV0ZXMiIGdyb3VwLgotICAgICAgICAtIEdyb3VwcyBhbGwgYmVsb25n
c1RvIHJlbGF0aW9uc2hpcHMgaW4gIkJlbG9uZ3MgVG8iIGdyb3VwLgotICAgICAgICAtIEdyb3Vw
cyBhbGwgaGFzTWFueSByZWxhdGlvbnNoaXBzIGluICJIYXMgTWFueSIgZ3JvdXAuCi0gICAgICAg
IC0gR3JvdXBzIGFsbCBmbGFncyBpbiAiRmxhZ3MiIGdyb3VwLgotICAgICAgICAtIEZsYWdzIHJl
bGF0aW9uc2hpcCBDUHMgYXMgZXhwZW5zaXZlIHByb3BlcnRpZXMuCi0KLSAgICAgICAgQG1ldGhv
ZCBfZGVidWdJbmZvCi0gICAgICAgIEBmb3IgRFMuTW9kZWwKLSAgICAgICAgQHByaXZhdGUKLSAg
ICAgICovCi0gICAgICBfZGVidWdJbmZvOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGF0dHJp
YnV0ZXMgPSBbJ2lkJ10sCi0gICAgICAgICAgICByZWxhdGlvbnNoaXBzID0geyBiZWxvbmdzVG86
IFtdLCBoYXNNYW55OiBbXSB9LAotICAgICAgICAgICAgZXhwZW5zaXZlUHJvcGVydGllcyA9IFtd
OwotCi0gICAgICAgIHRoaXMuZWFjaEF0dHJpYnV0ZShmdW5jdGlvbihuYW1lLCBtZXRhKSB7Ci0g
ICAgICAgICAgYXR0cmlidXRlcy5wdXNoKG5hbWUpOwotICAgICAgICB9LCB0aGlzKTsKLQotICAg
ICAgICB0aGlzLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7
Ci0gICAgICAgICAgcmVsYXRpb25zaGlwc1tyZWxhdGlvbnNoaXAua2luZF0ucHVzaChuYW1lKTsK
LSAgICAgICAgICBleHBlbnNpdmVQcm9wZXJ0aWVzLnB1c2gobmFtZSk7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIHZhciBncm91cHMgPSBbCi0gICAgICAgICAgewotICAgICAgICAgICAgbmFtZTog
J0F0dHJpYnV0ZXMnLAotICAgICAgICAgICAgcHJvcGVydGllczogYXR0cmlidXRlcywKLSAgICAg
ICAgICAgIGV4cGFuZDogdHJ1ZQotICAgICAgICAgIH0sCi0gICAgICAgICAgewotICAgICAgICAg
ICAgbmFtZTogJ0JlbG9uZ3MgVG8nLAotICAgICAgICAgICAgcHJvcGVydGllczogcmVsYXRpb25z
aGlwcy5iZWxvbmdzVG8sCi0gICAgICAgICAgICBleHBhbmQ6IHRydWUKLSAgICAgICAgICB9LAot
ICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWU6ICdIYXMgTWFueScsCi0gICAgICAgICAgICBw
cm9wZXJ0aWVzOiByZWxhdGlvbnNoaXBzLmhhc01hbnksCi0gICAgICAgICAgICBleHBhbmQ6IHRy
dWUKLSAgICAgICAgICB9LAotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWU6ICdGbGFncycs
Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbJ2lzTG9hZGVkJywgJ2lzRGlydHknLCAnaXNTYXZp
bmcnLCAnaXNEZWxldGVkJywgJ2lzRXJyb3InLCAnaXNOZXcnLCAnaXNWYWxpZCddCi0gICAgICAg
ICAgfQotICAgICAgICBdOwotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgcHJvcGVydHlJ
bmZvOiB7Ci0gICAgICAgICAgICAvLyBpbmNsdWRlIGFsbCBvdGhlciBtaXhpbnMgLyBwcm9wZXJ0
aWVzIChub3QganVzdCB0aGUgZ3JvdXBlZCBvbmVzKQotICAgICAgICAgICAgaW5jbHVkZU90aGVy
UHJvcGVydGllczogdHJ1ZSwKLSAgICAgICAgICAgIGdyb3VwczogZ3JvdXBzLAotICAgICAgICAg
ICAgLy8gZG9uJ3QgcHJlLWNhbGN1bGF0ZSB1bmxlc3MgY2FjaGVkCi0gICAgICAgICAgICBleHBl
bnNpdmVQcm9wZXJ0aWVzOiBleHBlbnNpdmVQcm9wZXJ0aWVzCi0gICAgICAgICAgfQotICAgICAg
ICB9OwotICAgICAgfQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1v
ZGVsOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL21vZGVsIiwgCi0gIFsi
Li9tb2RlbC9tb2RlbCIsIi4vbW9kZWwvYXR0cmlidXRlcyIsIi4vbW9kZWwvc3RhdGVzIiwiLi9t
b2RlbC9lcnJvcnMiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRz
X18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRh
dGEKLSAgICAqLwotCi0gICAgdmFyIE1vZGVsID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0gICAgdmFyIGF0dHIgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2YXIgUm9v
dFN0YXRlID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgdmFyIEVycm9ycyA9IF9f
ZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotCi0gICAgX19leHBvcnRzX18uTW9kZWwgPSBNb2Rl
bDsKLSAgICBfX2V4cG9ydHNfXy5Sb290U3RhdGUgPSBSb290U3RhdGU7Ci0gICAgX19leHBvcnRz
X18uYXR0ciA9IGF0dHI7Ci0gICAgX19leHBvcnRzX18uRXJyb3JzID0gRXJyb3JzOwotICB9KTsK
LWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL21vZGVsL2F0dHJpYnV0ZXMiLCAKLSAgWyIu
L21vZGVsIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBNb2RlbCA9IF9fZGVwZW5kZW5jeTFf
X1siZGVmYXVsdCJdOwotCi0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAq
LwotCi0gICAgdmFyIGdldCA9IEVtYmVyLmdldDsKLQotICAgIC8qKgotICAgICAgQGNsYXNzIE1v
ZGVsCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgKi8KLSAgICBNb2RlbC5yZW9wZW5DbGFzcyh7
Ci0gICAgICAvKioKLSAgICAgICAgQSBtYXAgd2hvc2Uga2V5cyBhcmUgdGhlIGF0dHJpYnV0ZXMg
b2YgdGhlIG1vZGVsIChwcm9wZXJ0aWVzCi0gICAgICAgIGRlc2NyaWJlZCBieSBEUy5hdHRyKSBh
bmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZQotICAgICAgICBwcm9w
ZXJ0eS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAg
ICAgIEFwcC5QZXJzb24gPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIGZpcnN0TmFtZTog
YXR0cignc3RyaW5nJyksCi0gICAgICAgICAgbGFzdE5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAg
ICAgICAgIGJpcnRoZGF5OiBhdHRyKCdkYXRlJykKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFy
IGF0dHJpYnV0ZXMgPSBFbWJlci5nZXQoQXBwLlBlcnNvbiwgJ2F0dHJpYnV0ZXMnKQotCi0gICAg
ICAgIGF0dHJpYnV0ZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAg
Y29uc29sZS5sb2cobmFtZSwgbWV0YSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIHByaW50
czoKLSAgICAgICAgLy8gZmlyc3ROYW1lIHt0eXBlOiAic3RyaW5nIiwgaXNBdHRyaWJ1dGU6IHRy
dWUsIG9wdGlvbnM6IE9iamVjdCwgcGFyZW50VHlwZTogZnVuY3Rpb24sIG5hbWU6ICJmaXJzdE5h
bWUifQotICAgICAgICAvLyBsYXN0TmFtZSB7dHlwZTogInN0cmluZyIsIGlzQXR0cmlidXRlOiB0
cnVlLCBvcHRpb25zOiBPYmplY3QsIHBhcmVudFR5cGU6IGZ1bmN0aW9uLCBuYW1lOiAibGFzdE5h
bWUifQotICAgICAgICAvLyBiaXJ0aGRheSB7dHlwZTogImRhdGUiLCBpc0F0dHJpYnV0ZTogdHJ1
ZSwgb3B0aW9uczogT2JqZWN0LCBwYXJlbnRUeXBlOiBmdW5jdGlvbiwgbmFtZTogImJpcnRoZGF5
In0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGF0dHJpYnV0ZXMKLSAgICAgICAg
QHN0YXRpYwotICAgICAgICBAdHlwZSB7RW1iZXIuTWFwfQotICAgICAgICBAcmVhZE9ubHkKLSAg
ICAgICovCi0gICAgICBhdHRyaWJ1dGVzOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsKLSAg
ICAgICAgdmFyIG1hcCA9IEVtYmVyLk1hcC5jcmVhdGUoKTsKLQotICAgICAgICB0aGlzLmVhY2hD
b21wdXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKLSAgICAgICAgICBpZiAobWV0
YS5pc0F0dHJpYnV0ZSkgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbWF5IG5vdCBz
ZXQgYGlkYCBhcyBhbiBhdHRyaWJ1dGUgb24geW91ciBtb2RlbC4gUGxlYXNlIHJlbW92ZSBhbnkg
bGluZXMgdGhhdCBsb29rIGxpa2U6IGBpZDogRFMuYXR0cignPHR5cGU+JylgIGZyb20gIiArIHRo
aXMudG9TdHJpbmcoKSwgbmFtZSAhPT0gJ2lkJyk7Ci0KLSAgICAgICAgICAgIG1ldGEubmFtZSA9
IG5hbWU7Ci0gICAgICAgICAgICBtYXAuc2V0KG5hbWUsIG1ldGEpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIG1hcDsKLSAgICAgIH0pLAotCi0gICAgICAvKioK
LSAgICAgICAgQSBtYXAgd2hvc2Uga2V5cyBhcmUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVs
IChwcm9wZXJ0aWVzCi0gICAgICAgIGRlc2NyaWJlZCBieSBEUy5hdHRyKSBhbmQgd2hvc2UgdmFs
dWVzIGFyZSB0eXBlIG9mIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgIGFwcGxpZWQgdG8gZWFjaCBh
dHRyaWJ1dGUuIFRoaXMgbWFwIGRvZXMgbm90IGluY2x1ZGUgYW55Ci0gICAgICAgIGF0dHJpYnV0
ZXMgdGhhdCBkbyBub3QgaGF2ZSBhbiB0cmFuc2Zvcm1hdGlvbiB0eXBlLgotCi0gICAgICAgIEV4
YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5QZXJzb24gPSBEUy5N
b2RlbC5leHRlbmQoewotICAgICAgICAgIGZpcnN0TmFtZTogYXR0cigpLAotICAgICAgICAgIGxh
c3ROYW1lOiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBiaXJ0aGRheTogYXR0cignZGF0ZScp
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciB0cmFuc2Zvcm1lZEF0dHJpYnV0ZXMgPSBFbWJl
ci5nZXQoQXBwLlBlcnNvbiwgJ3RyYW5zZm9ybWVkQXR0cmlidXRlcycpCi0KLSAgICAgICAgdHJh
bnNmb3JtZWRBdHRyaWJ1dGVzLmZvckVhY2goZnVuY3Rpb24oZmllbGQsIHR5cGUpIHsKLSAgICAg
ICAgICBjb25zb2xlLmxvZyhmaWVsZCwgdHlwZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8v
IHByaW50czoKLSAgICAgICAgLy8gbGFzdE5hbWUgc3RyaW5nCi0gICAgICAgIC8vIGJpcnRoZGF5
IGRhdGUKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IHRyYW5zZm9ybWVkQXR0cmli
dXRlcwotICAgICAgICBAc3RhdGljCi0gICAgICAgIEB0eXBlIHtFbWJlci5NYXB9Ci0gICAgICAg
IEByZWFkT25seQotICAgICAgKi8KLSAgICAgIHRyYW5zZm9ybWVkQXR0cmlidXRlczogRW1iZXIu
Y29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBtYXAgPSBFbWJlci5NYXAuY3JlYXRl
KCk7Ci0KLSAgICAgICAgdGhpcy5lYWNoQXR0cmlidXRlKGZ1bmN0aW9uKGtleSwgbWV0YSkgewot
ICAgICAgICAgIGlmIChtZXRhLnR5cGUpIHsKLSAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBtZXRh
LnR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIG1hcDsK
LSAgICAgIH0pLAotCi0gICAgICAvKioKLSAgICAgICAgSXRlcmF0ZXMgdGhyb3VnaCB0aGUgYXR0
cmlidXRlcyBvZiB0aGUgbW9kZWwsIGNhbGxpbmcgdGhlIHBhc3NlZCBmdW5jdGlvbiBvbiBlYWNo
Ci0gICAgICAgIGF0dHJpYnV0ZS4KLQotICAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBw
cm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgICAg
cGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgZnVuY3Rpb24obmFtZSwgbWV0YSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIC0gYG5hbWVg
IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb3BlcnR5IGluIHRoZSBpdGVyYXRpb24KLSAgICAg
ICAgLSBgbWV0YWAgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIHByb3BlcnR5IGlu
IHRoZSBpdGVyYXRpb24KLQotICAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxs
YmFjaywgeW91IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0Ci0gICAgICAgIG9iamVj
dCB0aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4KLQotICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBBcHAuUGVyc29uID0gRFMu
TW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBmaXJzdE5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAg
ICAgICAgIGxhc3ROYW1lOiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBiaXJ0aGRheTogYXR0
cignZGF0ZScpCi0gICAgICAgIH0pOwotCi0gICAgICAgIEFwcC5QZXJzb24uZWFjaEF0dHJpYnV0
ZShmdW5jdGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgY29uc29sZS5sb2cobmFtZSwgbWV0
YSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIHByaW50czoKLSAgICAgICAgLy8gZmlyc3RO
YW1lIHt0eXBlOiAic3RyaW5nIiwgaXNBdHRyaWJ1dGU6IHRydWUsIG9wdGlvbnM6IE9iamVjdCwg
cGFyZW50VHlwZTogZnVuY3Rpb24sIG5hbWU6ICJmaXJzdE5hbWUifQotICAgICAgICAvLyBsYXN0
TmFtZSB7dHlwZTogInN0cmluZyIsIGlzQXR0cmlidXRlOiB0cnVlLCBvcHRpb25zOiBPYmplY3Qs
IHBhcmVudFR5cGU6IGZ1bmN0aW9uLCBuYW1lOiAibGFzdE5hbWUifQotICAgICAgICAvLyBiaXJ0
aGRheSB7dHlwZTogImRhdGUiLCBpc0F0dHJpYnV0ZTogdHJ1ZSwgb3B0aW9uczogT2JqZWN0LCBw
YXJlbnRUeXBlOiBmdW5jdGlvbiwgbmFtZTogImJpcnRoZGF5In0KLSAgICAgICBgYGAKLQotICAg
ICAgICBAbWV0aG9kIGVhY2hBdHRyaWJ1dGUKLSAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2Fs
bGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0
YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHVzZQotICAgICAgICBAc3RhdGljCi0gICAgICAq
LwotICAgICAgZWFjaEF0dHJpYnV0ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAg
ICAgICAgZ2V0KHRoaXMsICdhdHRyaWJ1dGVzJykuZm9yRWFjaChmdW5jdGlvbihuYW1lLCBtZXRh
KSB7Ci0gICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCBuYW1lLCBtZXRhKTsKLSAgICAg
ICAgfSwgYmluZGluZyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgSXRlcmF0ZXMg
dGhyb3VnaCB0aGUgdHJhbnNmb3JtZWRBdHRyaWJ1dGVzIG9mIHRoZSBtb2RlbCwgY2FsbGluZwot
ICAgICAgICB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9uIGVhY2ggYXR0cmlidXRlLiBOb3RlIHRoZSBj
YWxsYmFjayB3aWxsIG5vdCBiZQotICAgICAgICBjYWxsZWQgZm9yIGFueSBhdHRyaWJ1dGVzIHRo
YXQgZG8gbm90IGhhdmUgYW4gdHJhbnNmb3JtYXRpb24gdHlwZS4KLQotICAgICAgICBUaGUgY2Fs
bGJhY2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0
dXJlIChhbGwKLSAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0gICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgZnVuY3Rpb24obmFtZSwgdHlwZSk7Ci0gICAgICAgIGBgYAot
Ci0gICAgICAgIC0gYG5hbWVgIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb3BlcnR5IGluIHRo
ZSBpdGVyYXRpb24KLSAgICAgICAgLSBgdHlwZWAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFt
ZSBvZiB0aGUgdHlwZSBvZiB0cmFuc2Zvcm1lZAotICAgICAgICAgIGFwcGxpZWQgdG8gdGhlIGF0
dHJpYnV0ZQotCi0gICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5
b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgICAgb2JqZWN0IHRoYXQg
d2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRoZSBjb250ZXh0LgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5QZXJzb24gPSBEUy5Nb2RlbC5l
eHRlbmQoewotICAgICAgICAgIGZpcnN0TmFtZTogYXR0cigpLAotICAgICAgICAgIGxhc3ROYW1l
OiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgICBiaXJ0aGRheTogYXR0cignZGF0ZScpCi0gICAg
ICAgIH0pOwotCi0gICAgICAgIEFwcC5QZXJzb24uZWFjaFRyYW5zZm9ybWVkQXR0cmlidXRlKGZ1
bmN0aW9uKG5hbWUsIHR5cGUpIHsKLSAgICAgICAgICBjb25zb2xlLmxvZyhuYW1lLCB0eXBlKTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gcHJpbnRzOgotICAgICAgICAvLyBsYXN0TmFtZSBz
dHJpbmcKLSAgICAgICAgLy8gYmlydGhkYXkgZGF0ZQotICAgICAgIGBgYAotCi0gICAgICAgIEBt
ZXRob2QgZWFjaFRyYW5zZm9ybWVkQXR0cmlidXRlCi0gICAgICAgIEBwYXJhbSB7RnVuY3Rpb259
IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgICAgQHN0YXRpYwotICAg
ICAgKi8KLSAgICAgIGVhY2hUcmFuc2Zvcm1lZEF0dHJpYnV0ZTogZnVuY3Rpb24oY2FsbGJhY2ss
IGJpbmRpbmcpIHsKLSAgICAgICAgZ2V0KHRoaXMsICd0cmFuc2Zvcm1lZEF0dHJpYnV0ZXMnKS5m
b3JFYWNoKGZ1bmN0aW9uKG5hbWUsIHR5cGUpIHsKLSAgICAgICAgICBjYWxsYmFjay5jYWxsKGJp
bmRpbmcsIG5hbWUsIHR5cGUpOwotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9KTsKLQotCi0g
ICAgTW9kZWwucmVvcGVuKHsKLSAgICAgIGVhY2hBdHRyaWJ1dGU6IGZ1bmN0aW9uKGNhbGxiYWNr
LCBiaW5kaW5nKSB7Ci0gICAgICAgIHRoaXMuY29uc3RydWN0b3IuZWFjaEF0dHJpYnV0ZShjYWxs
YmFjaywgYmluZGluZyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBmdW5jdGlvbiBnZXREZWZh
dWx0VmFsdWUocmVjb3JkLCBvcHRpb25zLCBrZXkpIHsKLSAgICAgIGlmICh0eXBlb2Ygb3B0aW9u
cy5kZWZhdWx0VmFsdWUgPT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgcmV0dXJuIG9wdGlvbnMu
ZGVmYXVsdFZhbHVlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gb3B0aW9ucy5kZWZhdWx0VmFsdWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gaGFzVmFsdWUocmVjb3JkLCBrZXkpIHsKLSAgICAgIHJldHVybiByZWNvcmQuX2F0
dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fAotICAgICAgICAgICAgIHJlY29yZC5faW5G
bGlnaHRBdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkgfHwKLSAgICAgICAgICAgICByZWNv
cmQuX2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRW
YWx1ZShyZWNvcmQsIGtleSkgewotICAgICAgaWYgKHJlY29yZC5fYXR0cmlidXRlcy5oYXNPd25Q
cm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgIHJldHVybiByZWNvcmQuX2F0dHJpYnV0ZXNba2V5XTsK
LSAgICAgIH0gZWxzZSBpZiAocmVjb3JkLl9pbkZsaWdodEF0dHJpYnV0ZXMuaGFzT3duUHJvcGVy
dHkoa2V5KSkgewotICAgICAgICByZXR1cm4gcmVjb3JkLl9pbkZsaWdodEF0dHJpYnV0ZXNba2V5
XTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiByZWNvcmQuX2RhdGFba2V5XTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgIGBEUy5hdHRyYCBkZWZpbmVzIGFuIGF0dHJp
YnV0ZSBvbiBhIFtEUy5Nb2RlbF0oL2FwaS9kYXRhL2NsYXNzZXMvRFMuTW9kZWwuaHRtbCkuCi0g
ICAgICBCeSBkZWZhdWx0LCBhdHRyaWJ1dGVzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcy1pcywgaG93
ZXZlciB5b3UgY2FuIHNwZWNpZnkgYW4KLSAgICAgIG9wdGlvbmFsIHR5cGUgdG8gaGF2ZSB0aGUg
dmFsdWUgYXV0b21hdGljYWxseSB0cmFuc2Zvcm1lZC4KLSAgICAgIEVtYmVyIERhdGEgc2hpcHMg
d2l0aCBmb3VyIGJhc2ljIHRyYW5zZm9ybSB0eXBlczogYHN0cmluZ2AsIGBudW1iZXJgLAotICAg
ICAgYGJvb2xlYW5gIGFuZCBgZGF0ZWAuIFlvdSBjYW4gZGVmaW5lIHlvdXIgb3duIHRyYW5zZm9y
bXMgYnkgc3ViY2xhc3NpbmcKLSAgICAgIFtEUy5UcmFuc2Zvcm1dKC9hcGkvZGF0YS9jbGFzc2Vz
L0RTLlRyYW5zZm9ybS5odG1sKS4KLQotICAgICAgTm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGBh
dHRyYCB0byBkZWZpbmUgYW4gYXR0cmlidXRlIG9mIGBpZGAuCi0KLSAgICAgIGBEUy5hdHRyYCB0
YWtlcyBhbiBvcHRpb25hbCBoYXNoIGFzIGEgc2Vjb25kIHBhcmFtZXRlciwgY3VycmVudGx5Ci0g
ICAgICBzdXBwb3J0ZWQgb3B0aW9ucyBhcmU6Ci0KLSAgICAgIC0gYGRlZmF1bHRWYWx1ZWA6IFBh
c3MgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1
dGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgZGVmYXVsdCB2YWx1ZSBpZiBub25lIGlz
IHN1cHBsaWVkLgotCi0gICAgICBFeGFtcGxlCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
IHZhciBhdHRyID0gRFMuYXR0cjsKLQotICAgICAgQXBwLlVzZXIgPSBEUy5Nb2RlbC5leHRlbmQo
ewotICAgICAgICB1c2VybmFtZTogYXR0cignc3RyaW5nJyksCi0gICAgICAgIGVtYWlsOiBhdHRy
KCdzdHJpbmcnKSwKLSAgICAgICAgdmVyaWZpZWQ6IGF0dHIoJ2Jvb2xlYW4nLCB7ZGVmYXVsdFZh
bHVlOiBmYWxzZX0pCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBAbmFtZXNwYWNlCi0g
ICAgICBAbWV0aG9kIGF0dHIKLSAgICAgIEBmb3IgRFMKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSB0
eXBlIHRoZSBhdHRyaWJ1dGUgdHlwZQotICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYSBo
YXNoIG9mIG9wdGlvbnMKLSAgICAgIEByZXR1cm4ge0F0dHJpYnV0ZX0KLSAgICAqLwotCi0gICAg
ZnVuY3Rpb24gYXR0cih0eXBlLCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9ucyB8
fCB7fTsKLQotICAgICAgdmFyIG1ldGEgPSB7Ci0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAg
IGlzQXR0cmlidXRlOiB0cnVlLAotICAgICAgICBvcHRpb25zOiBvcHRpb25zCi0gICAgICB9Owot
Ci0gICAgICByZXR1cm4gRW1iZXIuY29tcHV0ZWQoJ2RhdGEnLCBmdW5jdGlvbihrZXksIHZhbHVl
KSB7Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgICAgIEVtYmVy
LmFzc2VydCgiWW91IG1heSBub3Qgc2V0IGBpZGAgYXMgYW4gYXR0cmlidXRlIG9uIHlvdXIgbW9k
ZWwuIFBsZWFzZSByZW1vdmUgYW55IGxpbmVzIHRoYXQgbG9vayBsaWtlOiBgaWQ6IERTLmF0dHIo
Jzx0eXBlPicpYCBmcm9tICIgKyB0aGlzLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCksIGtleSAhPT0g
J2lkJyk7Ci0gICAgICAgICAgdmFyIG9sZFZhbHVlID0gZ2V0VmFsdWUodGhpcywga2V5KTsKLQot
ICAgICAgICAgIGlmICh2YWx1ZSAhPT0gb2xkVmFsdWUpIHsKLSAgICAgICAgICAgIC8vIEFkZCB0
aGUgbmV3IHZhbHVlIHRvIHRoZSBjaGFuZ2VkIGF0dHJpYnV0ZXMgaGFzaDsgaXQgd2lsbCBnZXQg
ZGVsZXRlZCBieQotICAgICAgICAgICAgLy8gdGhlICdkaWRTZXRQcm9wZXJ0eScgaGFuZGxlciBp
ZiBpdCBpcyBubyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmFsdWUKLSAgICAgICAgICAg
IHRoaXMuX2F0dHJpYnV0ZXNba2V5XSA9IHZhbHVlOwotCi0gICAgICAgICAgICB0aGlzLnNlbmQo
J2RpZFNldFByb3BlcnR5JywgewotICAgICAgICAgICAgICBuYW1lOiBrZXksCi0gICAgICAgICAg
ICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSwKLSAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZTogdGhp
cy5fZGF0YVtrZXldLAotICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfSBlbHNl
IGlmIChoYXNWYWx1ZSh0aGlzLCBrZXkpKSB7Ci0gICAgICAgICAgcmV0dXJuIGdldFZhbHVlKHRo
aXMsIGtleSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGdldERlZmF1bHRW
YWx1ZSh0aGlzLCBvcHRpb25zLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgIC8vIGBkYXRhYCBp
cyBuZXZlciBzZXQgZGlyZWN0bHkuIEhvd2V2ZXIsIGl0IG1heSBiZQotICAgICAgLy8gaW52YWxp
ZGF0ZWQgZnJvbSB0aGUgc3RhdGUgbWFuYWdlcidzIHNldERhdGEKLSAgICAgIC8vIGV2ZW50Lgot
ICAgICAgfSkubWV0YShtZXRhKTsKLSAgICB9Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gYXR0cjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9tb2RlbC9lcnJv
cnMiLCAKLSAgWyJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgInVz
ZSBzdHJpY3QiOwotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIGlzRW1wdHkgPSBFbWJlci5pc0Vt
cHR5OwotICAgIHZhciBtYXAgPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMubWFwOwotCi0gICAgLyoq
Ci0gICAgQG1vZHVsZSBlbWJlci1kYXRhCi0gICAgKi8KLQotICAgIC8qKgotICAgICAgSG9sZHMg
dmFsaWRhdGlvbiBlcnJvcnMgZm9yIGEgZ2l2ZW4gcmVjb3JkIG9yZ2FuaXplZCBieSBhdHRyaWJ1
dGUgbmFtZXMuCi0KLSAgICAgIEV2ZXJ5IERTLk1vZGVsIGhhcyBhbiBgZXJyb3JzYCBwcm9wZXJ0
eSB0aGF0IGlzIGFuIGluc3RhbmNlIG9mCi0gICAgICBgRFMuRXJyb3JzYC4gVGhpcyBjYW4gYmUg
dXNlZCB0byBkaXNwbGF5IHZhbGlkYXRpb24gZXJyb3IKLSAgICAgIG1lc3NhZ2VzIHJldHVybmVk
IGZyb20gdGhlIHNlcnZlciB3aGVuIGEgYHJlY29yZC5zYXZlKClgIHJlamVjdHMuCi0KLSAgICAg
IEZvciBFeGFtcGxlLCBpZiB5b3UgaGFkIGFuIGBVc2VyYCBtb2RlbCB0aGF0IGxvb2tlZCBsaWtl
IHRoaXM6Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Vc2VyID0gRFMuTW9kZWwu
ZXh0ZW5kKHsKLSAgICAgICAgdXNlcm5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAgICAgICBlbWFp
bDogYXR0cignc3RyaW5nJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICBBbmQgeW91IGF0
dGVtcHRlZCB0byBzYXZlIGEgcmVjb3JkIHRoYXQgZGlkIG5vdCB2YWxpZGF0ZSBvbiB0aGUgYmFj
a2VuZC4KLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIHVzZXIgPSBzdG9yZS5jcmVh
dGVSZWNvcmQoJ3VzZXInLCB7Ci0gICAgICAgIHVzZXJuYW1lOiAndG9tc3RlcicsCi0gICAgICAg
IGVtYWlsOiAnaW52YWxpZEVtYWlsJwotICAgICAgfSk7Ci0gICAgICB1c2VyLnNhdmUoKTsKLSAg
ICAgIGBgYAotCi0gICAgICBZb3VyIGJhY2tlbmQgZGF0YSBzdG9yZSBtaWdodCByZXR1cm4gYSBy
ZXNwb25zZSB0aGF0IGxvb2tzIGxpa2UKLSAgICAgIHRoaXMuIFRoaXMgcmVzcG9uc2Ugd2lsbCBi
ZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBlcnJvciBvYmplY3QuCi0KLSAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgIHsKLSAgICAgICAgImVycm9ycyI6IHsKLSAgICAgICAgICAidXNlcm5hbWUiOiBb
IlRoaXMgdXNlcm5hbWUgaXMgYWxyZWFkeSB0YWtlbiEiXSwKLSAgICAgICAgICAiZW1haWwiOiBb
IkRvZXNuJ3QgbG9vayBsaWtlIGEgdmFsaWQgZW1haWwuIl0KLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgYGBgCi0KLSAgICAgIEVycm9ycyBjYW4gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGJ5
IGFjY2Vzc2luZyB0aGVpciBwcm9wZXJ0eSBuYW1lCi0gICAgICBvciB1c2luZyB0aGUgYG1lc3Nh
Z2VzYCBwcm9wZXJ0eSB0byBnZXQgYW4gYXJyYXkgb2YgYWxsIGVycm9ycy4KLQotICAgICAgYGBg
aGFuZGxlYmFycwotICAgICAge3sjZWFjaCBlcnJvcnMubWVzc2FnZXN9fQotICAgICAgICA8ZGl2
IGNsYXNzPSJlcnJvciI+Ci0gICAgICAgICAge3ttZXNzYWdlfX0KLSAgICAgICAgPC9kaXY+Ci0g
ICAgICB7ey9lYWNofX0KLQotICAgICAgPGxhYmVsPlVzZXJuYW1lOiB7e2lucHV0IHZhbHVlPXVz
ZXJuYW1lfX0gPC9sYWJlbD4KLSAgICAgIHt7I2VhY2ggZXJyb3JzLnVzZXJuYW1lfX0KLSAgICAg
ICAgPGRpdiBjbGFzcz0iZXJyb3IiPgotICAgICAgICAgIHt7bWVzc2FnZX19Ci0gICAgICAgIDwv
ZGl2PgotICAgICAge3svZWFjaH19Ci0KLSAgICAgIDxsYWJlbD5FbWFpbDoge3tpbnB1dCB2YWx1
ZT1lbWFpbH19IDwvbGFiZWw+Ci0gICAgICB7eyNlYWNoIGVycm9ycy5lbWFpbH19Ci0gICAgICAg
IDxkaXYgY2xhc3M9ImVycm9yIj4KLSAgICAgICAgICB7e21lc3NhZ2V9fQotICAgICAgICA8L2Rp
dj4KLSAgICAgIHt7L2VhY2h9fQotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBFcnJvcnMKLSAg
ICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgICAgQHVz
ZXMgRW1iZXIuRW51bWVyYWJsZQotICAgICAgQHVzZXMgRW1iZXIuRXZlbnRlZAotICAgICAqLwot
ICAgIHZhciBFcnJvcnMgPSBFbWJlci5PYmplY3QuZXh0ZW5kKEVtYmVyLkVudW1lcmFibGUsIEVt
YmVyLkV2ZW50ZWQsIHsKLSAgICAgIC8qKgotICAgICAgICBSZWdpc3RlciB3aXRoIHRhcmdldCBo
YW5kbGVyCi0KLSAgICAgICAgQG1ldGhvZCByZWdpc3RlckhhbmRsZXJzCi0gICAgICAgIEBwYXJh
bSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gYmVjYW1lSW52YWxp
ZAotICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBiZWNhbWVWYWxpZAotICAgICAgKi8KLSAgICAg
IHJlZ2lzdGVySGFuZGxlcnM6IGZ1bmN0aW9uKHRhcmdldCwgYmVjYW1lSW52YWxpZCwgYmVjYW1l
VmFsaWQpIHsKLSAgICAgICAgdGhpcy5vbignYmVjYW1lSW52YWxpZCcsIHRhcmdldCwgYmVjYW1l
SW52YWxpZCk7Ci0gICAgICAgIHRoaXMub24oJ2JlY2FtZVZhbGlkJywgdGFyZ2V0LCBiZWNhbWVW
YWxpZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQHByb3BlcnR5IGVycm9yc0J5
QXR0cmlidXRlTmFtZQotICAgICAgICBAdHlwZSB7RW1iZXIuTWFwV2l0aERlZmF1bHR9Ci0gICAg
ICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgZXJyb3JzQnlBdHRyaWJ1dGVOYW1lOiBFbWJl
ci5yZWR1Y2VDb21wdXRlZCgiY29udGVudCIsIHsKLSAgICAgICAgaW5pdGlhbFZhbHVlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICByZXR1cm4gRW1iZXIuTWFwV2l0aERlZmF1bHQuY3JlYXRlKHsK
LSAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHJl
dHVybiBFbWJlci5BKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgYWRkZWRJdGVtOiBmdW5jdGlvbihlcnJvcnMsIGVycm9yKSB7Ci0gICAgICAg
ICAgZXJyb3JzLmdldChlcnJvci5hdHRyaWJ1dGUpLnB1c2hPYmplY3QoZXJyb3IpOwotCi0gICAg
ICAgICAgcmV0dXJuIGVycm9yczsKLSAgICAgICAgfSwKLQotICAgICAgICByZW1vdmVkSXRlbTog
ZnVuY3Rpb24oZXJyb3JzLCBlcnJvcikgewotICAgICAgICAgIGVycm9ycy5nZXQoZXJyb3IuYXR0
cmlidXRlKS5yZW1vdmVPYmplY3QoZXJyb3IpOwotCi0gICAgICAgICAgcmV0dXJuIGVycm9yczsK
LSAgICAgICAgfQotICAgICAgfSksCi0KLSAgICAgIC8qKgotICAgICAgICBSZXR1cm5zIGVycm9y
cyBmb3IgYSBnaXZlbiBhdHRyaWJ1dGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
IHZhciB1c2VyID0gc3RvcmUuY3JlYXRlUmVjb3JkKCd1c2VyJywgewotICAgICAgICAgIHVzZXJu
YW1lOiAndG9tc3RlcicsCi0gICAgICAgICAgZW1haWw6ICdpbnZhbGlkRW1haWwnCi0gICAgICAg
IH0pOwotICAgICAgICB1c2VyLnNhdmUoKS5jYXRjaChmdW5jdGlvbigpewotICAgICAgICAgIHVz
ZXIuZ2V0KCdlcnJvcnMnKS5lcnJvcnNGb3IoJ2VtYWlsJyk7IC8vIFsiRG9lc24ndCBsb29rIGxp
a2UgYSB2YWxpZCBlbWFpbC4iXQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAg
QG1ldGhvZCBlcnJvcnNGb3IKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGF0dHJpYnV0ZQotICAg
ICAgICBAcmV0dXJuIHtBcnJheX0KLSAgICAgICovCi0gICAgICBlcnJvcnNGb3I6IGZ1bmN0aW9u
KGF0dHJpYnV0ZSkgewotICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcnNCeUF0dHJpYnV0
ZU5hbWUnKS5nZXQoYXR0cmlidXRlKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBB
biBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgZm9yIHRoaXMKLSAg
ICAgICAgcmVjb3JkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzcGxheWluZyBhbGwgZXJyb3JzIHRv
IHRoZSB1c2VyLgotCi0gICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAge3sjZWFjaCBlcnJv
cnMubWVzc2FnZXN9fQotICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KLSAgICAgICAgICAg
IHt7bWVzc2FnZX19Ci0gICAgICAgICAgPC9kaXY+Ci0gICAgICAgIHt7L2VhY2h9fQotICAgICAg
ICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgbWVzc2FnZXMKLSAgICAgICAgQHR5cGUge0FycmF5
fQotICAgICAgKi8KLSAgICAgIG1lc3NhZ2VzOiBFbWJlci5jb21wdXRlZC5tYXBCeSgnY29udGVu
dCcsICdtZXNzYWdlJyksCi0KLSAgICAgIC8qKgotICAgICAgICBAcHJvcGVydHkgY29udGVudAot
ICAgICAgICBAdHlwZSB7QXJyYXl9Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAg
Y29udGVudDogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBFbWJl
ci5BKCk7Ci0gICAgICB9KSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgdW5rbm93blBy
b3BlcnR5Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgdW5rbm93blByb3BlcnR5
OiBmdW5jdGlvbihhdHRyaWJ1dGUpIHsKLSAgICAgICAgdmFyIGVycm9ycyA9IHRoaXMuZXJyb3Jz
Rm9yKGF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChpc0VtcHR5KGVycm9ycykpIHsgcmV0dXJuIG51
bGw7IH0KLSAgICAgICAgcmV0dXJuIGVycm9yczsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAg
ICAgICBAbWV0aG9kIG5leHRPYmplY3QKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAg
ICBuZXh0T2JqZWN0OiBmdW5jdGlvbihpbmRleCwgcHJldmlvdXNPYmplY3QsIGNvbnRleHQpIHsK
LSAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnY29udGVudCcpLm9iamVjdEF0KGluZGV4KTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUb3RhbCBudW1iZXIgb2YgZXJyb3JzLgotCi0g
ICAgICAgIEBwcm9wZXJ0eSBsZW5ndGgKLSAgICAgICAgQHR5cGUge051bWJlcn0KLSAgICAgICAg
QHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgbGVuZ3RoOiBFbWJlci5jb21wdXRlZC5vbmVXYXko
J2NvbnRlbnQubGVuZ3RoJykucmVhZE9ubHkoKSwKLQotICAgICAgLyoqCi0gICAgICAgIEBwcm9w
ZXJ0eSBpc0VtcHR5Ci0gICAgICAgIEB0eXBlIHtCb29sZWFufQotICAgICAgICBAcmVhZE9ubHkK
LSAgICAgICovCi0gICAgICBpc0VtcHR5OiBFbWJlci5jb21wdXRlZC5ub3QoJ2xlbmd0aCcpLnJl
YWRPbmx5KCksCi0KLSAgICAgIC8qKgotICAgICAgICBBZGRzIGVycm9yIG1lc3NhZ2VzIHRvIGEg
Z2l2ZW4gYXR0cmlidXRlIGFuZCBzZW5kcwotICAgICAgICBgYmVjYW1lSW52YWxpZGAgZXZlbnQg
dG8gdGhlIHJlY29yZC4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgaWYgKCF1c2VyLmdldCgndXNlcm5hbWUnKSB7Ci0gICAgICAgICAgdXNlci5n
ZXQoJ2Vycm9ycycpLmFkZCgndXNlcm5hbWUnLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcpOwot
ICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgYWRkCi0gICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBhdHRyaWJ1dGUKLSAgICAgICAgQHBhcmFtIHtBcnJheXxTdHJpbmd9IG1l
c3NhZ2VzCi0gICAgICAqLwotICAgICAgYWRkOiBmdW5jdGlvbihhdHRyaWJ1dGUsIG1lc3NhZ2Vz
KSB7Ci0gICAgICAgIHZhciB3YXNFbXB0eSA9IGdldCh0aGlzLCAnaXNFbXB0eScpOwotCi0gICAg
ICAgIG1lc3NhZ2VzID0gdGhpcy5fZmluZE9yQ3JlYXRlTWVzc2FnZXMoYXR0cmlidXRlLCBtZXNz
YWdlcyk7Ci0gICAgICAgIGdldCh0aGlzLCAnY29udGVudCcpLmFkZE9iamVjdHMobWVzc2FnZXMp
OwotCi0gICAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2UoYXR0cmlidXRlKTsKLSAgICAg
ICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudERpZENoYW5nZSgpOwotCi0gICAgICAgIGlmICh3YXNF
bXB0eSAmJiAhZ2V0KHRoaXMsICdpc0VtcHR5JykpIHsKLSAgICAgICAgICB0aGlzLnRyaWdnZXIo
J2JlY2FtZUludmFsaWQnKTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIEBtZXRob2QgX2ZpbmRPckNyZWF0ZU1lc3NhZ2VzCi0gICAgICAgIEBwcml2YXRlCi0gICAg
ICAqLwotICAgICAgX2ZpbmRPckNyZWF0ZU1lc3NhZ2VzOiBmdW5jdGlvbihhdHRyaWJ1dGUsIG1l
c3NhZ2VzKSB7Ci0gICAgICAgIHZhciBlcnJvcnMgPSB0aGlzLmVycm9yc0ZvcihhdHRyaWJ1dGUp
OwotCi0gICAgICAgIHJldHVybiBtYXAoRW1iZXIubWFrZUFycmF5KG1lc3NhZ2VzKSwgZnVuY3Rp
b24obWVzc2FnZSkgewotICAgICAgICAgIHJldHVybiBlcnJvcnMuZmluZEJ5KCdtZXNzYWdlJywg
bWVzc2FnZSkgfHwgewotICAgICAgICAgICAgYXR0cmlidXRlOiBhdHRyaWJ1dGUsCi0gICAgICAg
ICAgICBtZXNzYWdlOiBtZXNzYWdlCi0gICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgICB9
LAotCi0gICAgICAvKioKLSAgICAgICAgUmVtb3ZlcyBhbGwgZXJyb3IgbWVzc2FnZXMgZnJvbSB0
aGUgZ2l2ZW4gYXR0cmlidXRlIGFuZCBzZW5kcwotICAgICAgICBgYmVjYW1lVmFsaWRgIGV2ZW50
IHRvIHRoZSByZWNvcmQgaWYgdGhlcmUgbm8gbW9yZSBlcnJvcnMgbGVmdC4KLQotICAgICAgICBF
eGFtcGxlOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLlVzZXIgPSBEUy5N
b2RlbC5leHRlbmQoewotICAgICAgICAgIGVtYWlsOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICAg
ICAgICB0d29GYWN0b3JBdXRoOiBEUy5hdHRyKCdib29sZWFuJyksCi0gICAgICAgICAgcGhvbmU6
IERTLmF0dHIoJ3N0cmluZycpCi0gICAgICAgIH0pOwotCi0gICAgICAgIEFwcC5Vc2VyRWRpdFJv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAg
ICAgICBzYXZlOiBmdW5jdGlvbih1c2VyKSB7Ci0gICAgICAgICAgICAgICBpZiAoIXVzZXIuZ2V0
KCd0d29GYWN0b3JBdXRoJykpIHsKLSAgICAgICAgICAgICAgICAgdXNlci5nZXQoJ2Vycm9ycycp
LnJlbW92ZSgncGhvbmUnKTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIHVzZXIu
c2F2ZSgpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
ICBgYGAKLQotICAgICAgICBAbWV0aG9kIHJlbW92ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30g
YXR0cmlidXRlCi0gICAgICAqLwotICAgICAgcmVtb3ZlOiBmdW5jdGlvbihhdHRyaWJ1dGUpIHsK
LSAgICAgICAgaWYgKGdldCh0aGlzLCAnaXNFbXB0eScpKSB7IHJldHVybjsgfQotCi0gICAgICAg
IHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JykucmVqZWN0QnkoJ2F0dHJpYnV0ZScs
IGF0dHJpYnV0ZSk7Ci0gICAgICAgIGdldCh0aGlzLCAnY29udGVudCcpLnNldE9iamVjdHMoY29u
dGVudCk7Ci0KLSAgICAgICAgdGhpcy5ub3RpZnlQcm9wZXJ0eUNoYW5nZShhdHRyaWJ1dGUpOwot
ICAgICAgICB0aGlzLmVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdlKCk7Ci0KLSAgICAgICAgaWYg
KGdldCh0aGlzLCAnaXNFbXB0eScpKSB7Ci0gICAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWNhbWVW
YWxpZCcpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmVtb3Zl
cyBhbGwgZXJyb3IgbWVzc2FnZXMgYW5kIHNlbmRzIGBiZWNhbWVWYWxpZGAgZXZlbnQKLSAgICAg
ICAgdG8gdGhlIHJlY29yZC4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgQXBwLlVzZXJFZGl0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewot
ICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgIHJldHJ5U2F2ZTogZnVuY3Rpb24odXNl
cikgewotICAgICAgICAgICAgICAgdXNlci5nZXQoJ2Vycm9ycycpLmNsZWFyKCk7Ci0gICAgICAg
ICAgICAgICB1c2VyLnNhdmUoKTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg
ICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBjbGVhcgotICAgICAgKi8KLSAg
ICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKGdldCh0aGlzLCAnaXNFbXB0eScp
KSB7IHJldHVybjsgfQotCi0gICAgICAgIGdldCh0aGlzLCAnY29udGVudCcpLmNsZWFyKCk7Ci0g
ICAgICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UoKTsKLQotICAgICAgICB0aGlz
LnRyaWdnZXIoJ2JlY2FtZVZhbGlkJyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAg
Q2hlY2tzIGlmIHRoZXJlIGlzIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgZ2l2ZW4gYXR0cmlidXRl
LgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLlVzZXJFZGl0Um91dGUgPSBF
bWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgIHNh
dmU6IGZ1bmN0aW9uKHVzZXIpIHsKLSAgICAgICAgICAgICAgIGlmICh1c2VyLmdldCgnZXJyb3Jz
JykuaGFzKCdlbWFpbCcpKSB7Ci0gICAgICAgICAgICAgICAgIHJldHVybiBhbGVydCgnUGxlYXNl
IHVwZGF0ZSB5b3VyIGVtYWlsIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHNhdmUuJyk7Ci0gICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICB1c2VyLnNhdmUoKTsKLSAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBo
YXMKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGF0dHJpYnV0ZQotICAgICAgICBAcmV0dXJuIHtC
b29sZWFufSB0cnVlIGlmIHRoZXJlIHNvbWUgZXJyb3JzIG9uIGdpdmVuIGF0dHJpYnV0ZQotICAg
ICAgKi8KLSAgICAgIGhhczogZnVuY3Rpb24oYXR0cmlidXRlKSB7Ci0gICAgICAgIHJldHVybiAh
aXNFbXB0eSh0aGlzLmVycm9yc0ZvcihhdHRyaWJ1dGUpKTsKLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFcnJvcnM7Ci0gIH0pOwotZGVmaW5lKCJlbWJl
ci1kYXRhL2xpYi9zeXN0ZW0vbW9kZWwvbW9kZWwiLCAKLSAgWyIuL3N0YXRlcyIsIi4vZXJyb3Jz
IiwiLi4vc3RvcmUiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBz
dHJpY3QiOwotICAgIHZhciBSb290U3RhdGUgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LSAgICB2YXIgRXJyb3JzID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIFBy
b21pc2VPYmplY3QgPSBfX2RlcGVuZGVuY3kzX18uUHJvbWlzZU9iamVjdDsKLSAgICAvKioKLSAg
ICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0
LCBzZXQgPSBFbWJlci5zZXQsCi0gICAgICAgIG1lcmdlID0gRW1iZXIubWVyZ2UsCi0gICAgICAg
IFByb21pc2UgPSBFbWJlci5SU1ZQLlByb21pc2U7Ci0KLSAgICB2YXIgSlNPTlNlcmlhbGl6ZXI7
Ci0gICAgdmFyIHJldHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSA9IEVtYmVyLmNvbXB1dGVkKCdjdXJy
ZW50U3RhdGUnLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICByZXR1cm4gZ2V0KGdldCh0
aGlzLCAnY3VycmVudFN0YXRlJyksIGtleSk7Ci0gICAgfSkucmVhZE9ubHkoKTsKLQotICAgIC8q
KgotCi0gICAgICBUaGUgbW9kZWwgY2xhc3MgdGhhdCBhbGwgRW1iZXIgRGF0YSByZWNvcmRzIGRl
c2NlbmQgZnJvbS4KLQotICAgICAgQGNsYXNzIE1vZGVsCi0gICAgICBAbmFtZXNwYWNlIERTCi0g
ICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgIEB1c2VzIEVtYmVyLkV2ZW50ZWQKLSAg
ICAqLwotICAgIHZhciBNb2RlbCA9IEVtYmVyLk9iamVjdC5leHRlbmQoRW1iZXIuRXZlbnRlZCwg
ewotICAgICAgX3JlY29yZEFycmF5czogdW5kZWZpbmVkLAotICAgICAgX3JlbGF0aW9uc2hpcHM6
IHVuZGVmaW5lZCwKLSAgICAgIF9sb2FkaW5nUmVjb3JkQXJyYXlzOiB1bmRlZmluZWQsCi0gICAg
ICAvKioKLSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgdGhlIHJlY29yZCBpcyBp
biB0aGUgYGVtcHR5YAotICAgICAgICBzdGF0ZS4gRW1wdHkgaXMgdGhlIGZpcnN0IHN0YXRlIGFs
bCByZWNvcmRzIGVudGVyIGFmdGVyIHRoZXkgaGF2ZQotICAgICAgICBiZWVuIGNyZWF0ZWQuIE1v
c3QgcmVjb3JkcyBjcmVhdGVkIGJ5IHRoZSBzdG9yZSB3aWxsIHF1aWNrbHkKLSAgICAgICAgdHJh
bnNpdGlvbiB0byB0aGUgYGxvYWRpbmdgIHN0YXRlIGlmIGRhdGEgbmVlZHMgdG8gYmUgZmV0Y2hl
ZCBmcm9tCi0gICAgICAgIHRoZSBzZXJ2ZXIgb3IgdGhlIGBjcmVhdGVkYCBzdGF0ZSBpZiB0aGUg
cmVjb3JkIGlzIGNyZWF0ZWQgb24gdGhlCi0gICAgICAgIGNsaWVudC4gQSByZWNvcmQgY2FuIGFs
c28gZW50ZXIgdGhlIGVtcHR5IHN0YXRlIGlmIHRoZSBhZGFwdGVyIGlzCi0gICAgICAgIHVuYWJs
ZSB0byBsb2NhdGUgdGhlIHJlY29yZC4KLQotICAgICAgICBAcHJvcGVydHkgaXNFbXB0eQotICAg
ICAgICBAdHlwZSB7Qm9vbGVhbn0KLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAg
aXNFbXB0eTogcmV0cmlldmVGcm9tQ3VycmVudFN0YXRlLAotICAgICAgLyoqCi0gICAgICAgIElm
IHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBsb2FkaW5nYCBz
dGF0ZS4gQQotICAgICAgICByZWNvcmQgZW50ZXJzIHRoaXMgc3RhdGUgd2hlbiB0aGUgc3RvcmUg
YXNrcyB0aGUgYWRhcHRlciBmb3IgaXRzCi0gICAgICAgIGRhdGEuIEl0IHJlbWFpbnMgaW4gdGhp
cyBzdGF0ZSB1bnRpbCB0aGUgYWRhcHRlciBwcm92aWRlcyB0aGUKLSAgICAgICAgcmVxdWVzdGVk
IGRhdGEuCi0KLSAgICAgICAgQHByb3BlcnR5IGlzTG9hZGluZwotICAgICAgICBAdHlwZSB7Qm9v
bGVhbn0KLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgaXNMb2FkaW5nOiByZXRy
aWV2ZUZyb21DdXJyZW50U3RhdGUsCi0gICAgICAvKioKLSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0
eSBpcyBgdHJ1ZWAgdGhlIHJlY29yZCBpcyBpbiB0aGUgYGxvYWRlZGAgc3RhdGUuIEEKLSAgICAg
ICAgcmVjb3JkIGVudGVycyB0aGlzIHN0YXRlIHdoZW4gaXRzIGRhdGEgaXMgcG9wdWxhdGVkLiBN
b3N0IG9mIGEKLSAgICAgICAgcmVjb3JkJ3MgbGlmZWN5Y2xlIGlzIHNwZW50IGluc2lkZSBzdWJz
dGF0ZXMgb2YgdGhlIGBsb2FkZWRgCi0gICAgICAgIHN0YXRlLgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciByZWNvcmQgPSBzdG9yZS5jcmVh
dGVSZWNvcmQoJ21vZGVsJyk7Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lzTG9hZGVkJyk7IC8vIHRy
dWUKLQotICAgICAgICBzdG9yZS5maW5kKCdtb2RlbCcsIDEpLnRoZW4oZnVuY3Rpb24obW9kZWwp
IHsKLSAgICAgICAgICBtb2RlbC5nZXQoJ2lzTG9hZGVkJyk7IC8vIHRydWUKLSAgICAgICAgfSk7
Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBpc0xvYWRlZAotICAgICAgICBAdHlw
ZSB7Qm9vbGVhbn0KLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAqLwotICAgICAgaXNMb2FkZWQ6
IHJldHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSwKLSAgICAgIC8qKgotICAgICAgICBJZiB0aGlzIHBy
b3BlcnR5IGlzIGB0cnVlYCB0aGUgcmVjb3JkIGlzIGluIHRoZSBgZGlydHlgIHN0YXRlLiBUaGUK
LSAgICAgICAgcmVjb3JkIGhhcyBsb2NhbCBjaGFuZ2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4g
c2F2ZWQgYnkgdGhlCi0gICAgICAgIGFkYXB0ZXIuIFRoaXMgaW5jbHVkZXMgcmVjb3JkcyB0aGF0
IGhhdmUgYmVlbiBjcmVhdGVkIChidXQgbm90IHlldAotICAgICAgICBzYXZlZCkgb3IgZGVsZXRl
ZC4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2
YXIgcmVjb3JkID0gc3RvcmUuY3JlYXRlUmVjb3JkKCdtb2RlbCcpOwotICAgICAgICByZWNvcmQu
Z2V0KCdpc0RpcnR5Jyk7IC8vIHRydWUKLQotICAgICAgICBzdG9yZS5maW5kKCdtb2RlbCcsIDEp
LnRoZW4oZnVuY3Rpb24obW9kZWwpIHsKLSAgICAgICAgICBtb2RlbC5nZXQoJ2lzRGlydHknKTsg
Ly8gZmFsc2UKLSAgICAgICAgICBtb2RlbC5zZXQoJ2ZvbycsICdzb21lIHZhbHVlJyk7Ci0gICAg
ICAgICAgbW9kZWwuZ2V0KCdpc0RpcnR5Jyk7IC8vIHRydWUKLSAgICAgICAgfSk7Ci0gICAgICAg
IGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSBpc0RpcnR5Ci0gICAgICAgIEB0eXBlIHtCb29sZWFu
fQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0gICAgICBpc0RpcnR5OiByZXRyaWV2ZUZy
b21DdXJyZW50U3RhdGUsCi0gICAgICAvKioKLSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBg
dHJ1ZWAgdGhlIHJlY29yZCBpcyBpbiB0aGUgYHNhdmluZ2Agc3RhdGUuIEEKLSAgICAgICAgcmVj
b3JkIGVudGVycyB0aGUgc2F2aW5nIHN0YXRlIHdoZW4gYHNhdmVgIGlzIGNhbGxlZCwgYnV0IHRo
ZQotICAgICAgICBhZGFwdGVyIGhhcyBub3QgeWV0IGFja25vd2xlZGdlZCB0aGF0IHRoZSBjaGFu
Z2VzIGhhdmUgYmVlbgotICAgICAgICBwZXJzaXN0ZWQgdG8gdGhlIGJhY2tlbmQuCi0KLSAgICAg
ICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFyIHJlY29yZCA9
IHN0b3JlLmNyZWF0ZVJlY29yZCgnbW9kZWwnKTsKLSAgICAgICAgcmVjb3JkLmdldCgnaXNTYXZp
bmcnKTsgLy8gZmFsc2UKLSAgICAgICAgdmFyIHByb21pc2UgPSByZWNvcmQuc2F2ZSgpOwotICAg
ICAgICByZWNvcmQuZ2V0KCdpc1NhdmluZycpOyAvLyB0cnVlCi0gICAgICAgIHByb21pc2UudGhl
bihmdW5jdGlvbigpIHsKLSAgICAgICAgICByZWNvcmQuZ2V0KCdpc1NhdmluZycpOyAvLyBmYWxz
ZQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGlzU2F2aW5n
Ci0gICAgICAgIEB0eXBlIHtCb29sZWFufQotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICovCi0g
ICAgICBpc1NhdmluZzogcmV0cmlldmVGcm9tQ3VycmVudFN0YXRlLAotICAgICAgLyoqCi0gICAg
ICAgIElmIHRoaXMgcHJvcGVydHkgaXMgYHRydWVgIHRoZSByZWNvcmQgaXMgaW4gdGhlIGBkZWxl
dGVkYCBzdGF0ZQotICAgICAgICBhbmQgaGFzIGJlZW4gbWFya2VkIGZvciBkZWxldGlvbi4gV2hl
biBgaXNEZWxldGVkYCBpcyB0cnVlIGFuZAotICAgICAgICBgaXNEaXJ0eWAgaXMgdHJ1ZSwgdGhl
IHJlY29yZCBpcyBkZWxldGVkIGxvY2FsbHkgYnV0IHRoZSBkZWxldGlvbgotICAgICAgICB3YXMg
bm90IHlldCBwZXJzaXN0ZWQuIFdoZW4gYGlzU2F2aW5nYCBpcyB0cnVlLCB0aGUgY2hhbmdlIGlz
Ci0gICAgICAgIGluLWZsaWdodC4gV2hlbiBib3RoIGBpc0RpcnR5YCBhbmQgYGlzU2F2aW5nYCBh
cmUgZmFsc2UsIHRoZQotICAgICAgICBjaGFuZ2UgaGFzIHBlcnNpc3RlZC4KLQotICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcmVjb3JkID0gc3Rv
cmUuY3JlYXRlUmVjb3JkKCdtb2RlbCcpOwotICAgICAgICByZWNvcmQuZ2V0KCdpc0RlbGV0ZWQn
KTsgICAgLy8gZmFsc2UKLSAgICAgICAgcmVjb3JkLmRlbGV0ZVJlY29yZCgpOwotCi0gICAgICAg
IC8vIExvY2FsbHkgZGVsZXRlZAotICAgICAgICByZWNvcmQuZ2V0KCdpc0RlbGV0ZWQnKTsgICAg
Ly8gdHJ1ZQotICAgICAgICByZWNvcmQuZ2V0KCdpc0RpcnR5Jyk7ICAgICAgLy8gdHJ1ZQotICAg
ICAgICByZWNvcmQuZ2V0KCdpc1NhdmluZycpOyAgICAgLy8gZmFsc2UKLQotICAgICAgICAvLyBQ
ZXJzaXN0aW5nIHRoZSBkZWxldGlvbgotICAgICAgICB2YXIgcHJvbWlzZSA9IHJlY29yZC5zYXZl
KCk7Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lzRGVsZXRlZCcpOyAgICAvLyB0cnVlCi0gICAgICAg
IHJlY29yZC5nZXQoJ2lzU2F2aW5nJyk7ICAgICAvLyB0cnVlCi0KLSAgICAgICAgLy8gRGVsZXRp
b24gUGVyc2lzdGVkCi0gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
ICByZWNvcmQuZ2V0KCdpc0RlbGV0ZWQnKTsgIC8vIHRydWUKLSAgICAgICAgICByZWNvcmQuZ2V0
KCdpc1NhdmluZycpOyAgIC8vIGZhbHNlCi0gICAgICAgICAgcmVjb3JkLmdldCgnaXNEaXJ0eScp
OyAgICAvLyBmYWxzZQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3Bl
cnR5IGlzRGVsZXRlZAotICAgICAgICBAdHlwZSB7Qm9vbGVhbn0KLSAgICAgICAgQHJlYWRPbmx5
Ci0gICAgICAqLwotICAgICAgaXNEZWxldGVkOiByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUsCi0g
ICAgICAvKioKLSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgdGhlIHJlY29yZCBp
cyBpbiB0aGUgYG5ld2Agc3RhdGUuIEEKLSAgICAgICAgcmVjb3JkIHdpbGwgYmUgaW4gdGhlIGBu
ZXdgIHN0YXRlIHdoZW4gaXQgaGFzIGJlZW4gY3JlYXRlZCBvbiB0aGUKLSAgICAgICAgY2xpZW50
IGFuZCB0aGUgYWRhcHRlciBoYXMgbm90IHlldCByZXBvcnQgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1
bGx5Ci0gICAgICAgIHNhdmVkLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgIHZhciByZWNvcmQgPSBzdG9yZS5jcmVhdGVSZWNvcmQoJ21vZGVsJyk7
Ci0gICAgICAgIHJlY29yZC5nZXQoJ2lzTmV3Jyk7IC8vIHRydWUKLQotICAgICAgICByZWNvcmQu
c2F2ZSgpLnRoZW4oZnVuY3Rpb24obW9kZWwpIHsKLSAgICAgICAgICBtb2RlbC5nZXQoJ2lzTmV3
Jyk7IC8vIGZhbHNlCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVy
dHkgaXNOZXcKLSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFkT25seQotICAg
ICAgKi8KLSAgICAgIGlzTmV3OiByZXRyaWV2ZUZyb21DdXJyZW50U3RhdGUsCi0gICAgICAvKioK
LSAgICAgICAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgdGhlIHJlY29yZCBpcyBpbiB0aGUg
YHZhbGlkYCBzdGF0ZS4KLQotICAgICAgICBBIHJlY29yZCB3aWxsIGJlIGluIHRoZSBgdmFsaWRg
IHN0YXRlIHdoZW4gdGhlIGFkYXB0ZXIgZGlkIG5vdCByZXBvcnQgYW55Ci0gICAgICAgIHNlcnZl
ci1zaWRlIHZhbGlkYXRpb24gZmFpbHVyZXMuCi0KLSAgICAgICAgQHByb3BlcnR5IGlzVmFsaWQK
LSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8KLSAg
ICAgIGlzVmFsaWQ6IHJldHJpZXZlRnJvbUN1cnJlbnRTdGF0ZSwKLSAgICAgIC8qKgotICAgICAg
ICBJZiB0aGUgcmVjb3JkIGlzIGluIHRoZSBkaXJ0eSBzdGF0ZSB0aGlzIHByb3BlcnR5IHdpbGwg
cmVwb3J0IHdoYXQKLSAgICAgICAga2luZCBvZiBjaGFuZ2UgaGFzIGNhdXNlZCBpdCB0byBtb3Zl
IGludG8gdGhlIGRpcnR5Ci0gICAgICAgIHN0YXRlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgotCi0g
ICAgICAgIC0gYGNyZWF0ZWRgIFRoZSByZWNvcmQgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgY2xp
ZW50IGFuZCBub3QgeWV0IHNhdmVkIHRvIHRoZSBhZGFwdGVyLgotICAgICAgICAtIGB1cGRhdGVk
YCBUaGUgcmVjb3JkIGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGhlIGNsaWVudCBhbmQgbm90IHlldCBz
YXZlZCB0byB0aGUgYWRhcHRlci4KLSAgICAgICAgLSBgZGVsZXRlZGAgVGhlIHJlY29yZCBoYXMg
YmVlbiBkZWxldGVkIGJ5IHRoZSBjbGllbnQgYW5kIG5vdCB5ZXQgc2F2ZWQgdG8gdGhlIGFkYXB0
ZXIuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
dmFyIHJlY29yZCA9IHN0b3JlLmNyZWF0ZVJlY29yZCgnbW9kZWwnKTsKLSAgICAgICAgcmVjb3Jk
LmdldCgnZGlydHlUeXBlJyk7IC8vICdjcmVhdGVkJwotICAgICAgICBgYGAKLQotICAgICAgICBA
cHJvcGVydHkgZGlydHlUeXBlCi0gICAgICAgIEB0eXBlIHtTdHJpbmd9Ci0gICAgICAgIEByZWFk
T25seQotICAgICAgKi8KLSAgICAgIGRpcnR5VHlwZTogcmV0cmlldmVGcm9tQ3VycmVudFN0YXRl
LAotCi0gICAgICAvKioKLSAgICAgICAgSWYgYHRydWVgIHRoZSBhZGFwdGVyIHJlcG9ydGVkIHRo
YXQgaXQgd2FzIHVuYWJsZSB0byBzYXZlIGxvY2FsCi0gICAgICAgIGNoYW5nZXMgdG8gdGhlIGJh
Y2tlbmQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhIHNlcnZlci1zaWRlCi0gICAgICAgIHZh
bGlkYXRpb24gZXJyb3IuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgcmVjb3JkLmdldCgnaXNFcnJvcicpOyAvLyBmYWxzZQotICAgICAgICByZWNv
cmQuc2V0KCdmb28nLCAndmFsaWQgdmFsdWUnKTsKLSAgICAgICAgcmVjb3JkLnNhdmUoKS50aGVu
KG51bGwsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJlY29yZC5nZXQoJ2lzRXJyb3InKTsgLy8g
dHJ1ZQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGlzRXJy
b3IKLSAgICAgICAgQHR5cGUge0Jvb2xlYW59Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8K
LSAgICAgIGlzRXJyb3I6IGZhbHNlLAotICAgICAgLyoqCi0gICAgICAgIElmIGB0cnVlYCB0aGUg
c3RvcmUgaXMgYXR0ZW1wdGluZyB0byByZWxvYWQgdGhlIHJlY29yZCBmb3JtIHRoZSBhZGFwdGVy
LgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHJl
Y29yZC5nZXQoJ2lzUmVsb2FkaW5nJyk7IC8vIGZhbHNlCi0gICAgICAgIHJlY29yZC5yZWxvYWQo
KTsKLSAgICAgICAgcmVjb3JkLmdldCgnaXNSZWxvYWRpbmcnKTsgLy8gdHJ1ZQotICAgICAgICBg
YGAKLQotICAgICAgICBAcHJvcGVydHkgaXNSZWxvYWRpbmcKLSAgICAgICAgQHR5cGUge0Jvb2xl
YW59Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8KLSAgICAgIGlzUmVsb2FkaW5nOiBmYWxz
ZSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoZSBgY2xpZW50SWRgIHByb3BlcnR5IGlzIGEgdHJh
bnNpZW50IG51bWVyaWNhbCBpZGVudGlmaWVyCi0gICAgICAgIGdlbmVyYXRlZCBhdCBydW50aW1l
IGJ5IHRoZSBkYXRhIHN0b3JlLiBJdCBpcyBpbXBvcnRhbnQKLSAgICAgICAgcHJpbWFyaWx5IGJl
Y2F1c2UgbmV3bHkgY3JlYXRlZCBvYmplY3RzIG1heSBub3QgeWV0IGhhdmUgYW4KLSAgICAgICAg
ZXh0ZXJuYWxseSBnZW5lcmF0ZWQgaWQuCi0KLSAgICAgICAgQHByb3BlcnR5IGNsaWVudElkCi0g
ICAgICAgIEBwcml2YXRlCi0gICAgICAgIEB0eXBlIHtOdW1iZXJ8U3RyaW5nfQotICAgICAgKi8K
LSAgICAgIGNsaWVudElkOiBudWxsLAotICAgICAgLyoqCi0gICAgICAgIEFsbCBlbWJlciBtb2Rl
bHMgaGF2ZSBhbiBpZCBwcm9wZXJ0eS4gVGhpcyBpcyBhbiBpZGVudGlmaWVyCi0gICAgICAgIG1h
bmFnZWQgYnkgYW4gZXh0ZXJuYWwgc291cmNlLiBUaGVzZSBhcmUgYWx3YXlzIGNvZXJjZWQgdG8g
YmUKLSAgICAgICAgc3RyaW5ncyBiZWZvcmUgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LiBOb3RlIHdo
ZW4gZGVjbGFyaW5nIHRoZQotICAgICAgICBhdHRyaWJ1dGVzIGZvciBhIG1vZGVsIGl0IGlzIGFu
IGVycm9yIHRvIGRlY2xhcmUgYW4gaWQKLSAgICAgICAgYXR0cmlidXRlLgotCi0gICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgdmFyIHJlY29yZCA9IHN0b3JlLmNyZWF0ZVJlY29yZCgnbW9k
ZWwnKTsKLSAgICAgICAgcmVjb3JkLmdldCgnaWQnKTsgLy8gbnVsbAotCi0gICAgICAgIHN0b3Jl
LmZpbmQoJ21vZGVsJywgMSkudGhlbihmdW5jdGlvbihtb2RlbCkgewotICAgICAgICAgIG1vZGVs
LmdldCgnaWQnKTsgLy8gJzEnCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBA
cHJvcGVydHkgaWQKLSAgICAgICAgQHR5cGUge1N0cmluZ30KLSAgICAgICovCi0gICAgICBpZDog
bnVsbCwKLQotICAgICAgLyoqCi0gICAgICAgIEBwcm9wZXJ0eSBjdXJyZW50U3RhdGUKLSAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgQHR5cGUge09iamVjdH0KLSAgICAgICovCi0gICAgICBjdXJy
ZW50U3RhdGU6IFJvb3RTdGF0ZS5lbXB0eSwKLQotICAgICAgLyoqCi0gICAgICAgIFdoZW4gdGhl
IHJlY29yZCBpcyBpbiB0aGUgYGludmFsaWRgIHN0YXRlIHRoaXMgb2JqZWN0IHdpbGwgY29udGFp
bgotICAgICAgICBhbnkgZXJyb3JzIHJldHVybmVkIGJ5IHRoZSBhZGFwdGVyLiBXaGVuIHByZXNl
bnQgdGhlIGVycm9ycyBoYXNoCi0gICAgICAgIHR5cGljYWxseSBjb250YWlucyBrZXlzIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGludmFsaWQgcHJvcGVydHkgbmFtZXMKLSAgICAgICAgYW5kIHZhbHVl
cyB3aGljaCBhcmUgYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMuCi0KLSAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICByZWNvcmQuZ2V0KCdlcnJvcnMubGVuZ3RoJyk7IC8vIDAKLSAgICAg
ICAgcmVjb3JkLnNldCgnZm9vJywgJ2ludmFsaWQgdmFsdWUnKTsKLSAgICAgICAgcmVjb3JkLnNh
dmUoKS50aGVuKG51bGwsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHJlY29yZC5nZXQoJ2Vycm9y
cycpLmdldCgnZm9vJyk7IC8vIFsnZm9vIHNob3VsZCBiZSBhIG51bWJlci4nXQotICAgICAgICB9
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGVycm9ycwotICAgICAgICBAdHlw
ZSB7RFMuRXJyb3JzfQotICAgICAgKi8KLSAgICAgIGVycm9yczogRW1iZXIuY29tcHV0ZWQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHZhciBlcnJvcnMgPSBFcnJvcnMuY3JlYXRlKCk7Ci0KLSAgICAg
ICAgZXJyb3JzLnJlZ2lzdGVySGFuZGxlcnModGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
dGhpcy5zZW5kKCdiZWNhbWVJbnZhbGlkJyk7Ci0gICAgICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIHRoaXMuc2VuZCgnYmVjYW1lVmFsaWQnKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
cmV0dXJuIGVycm9yczsKLSAgICAgIH0pLnJlYWRPbmx5KCksCi0KLSAgICAgIC8qKgotICAgICAg
ICBDcmVhdGUgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZWNvcmQsIHVzaW5nIHRoZSBz
ZXJpYWxpemF0aW9uCi0gICAgICAgIHN0cmF0ZWd5IG9mIHRoZSBzdG9yZSdzIGFkYXB0ZXIuCi0K
LSAgICAgICBgc2VyaWFsaXplYCB0YWtlcyBhbiBvcHRpb25hbCBoYXNoIGFzIGEgcGFyYW1ldGVy
LCBjdXJyZW50bHkKLSAgICAgICAgc3VwcG9ydGVkIG9wdGlvbnMgYXJlOgotCi0gICAgICAgLSBg
aW5jbHVkZUlkYDogYHRydWVgIGlmIHRoZSByZWNvcmQncyBJRCBzaG91bGQgYmUgaW5jbHVkZWQg
aW4gdGhlCi0gICAgICAgICAgSlNPTiByZXByZXNlbnRhdGlvbi4KLQotICAgICAgICBAbWV0aG9k
IHNlcmlhbGl6ZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgICBAcmV0
dXJuIHtPYmplY3R9IGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHByaW1pdGl2ZSBKU09OIHZh
bHVlcyBvbmx5Ci0gICAgICAqLwotICAgICAgc2VyaWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7
Ci0gICAgICAgIHZhciBzdG9yZSA9IGdldCh0aGlzLCAnc3RvcmUnKTsKLSAgICAgICAgcmV0dXJu
IHN0b3JlLnNlcmlhbGl6ZSh0aGlzLCBvcHRpb25zKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBVc2UgW0RTLkpTT05TZXJpYWxpemVyXShEUy5KU09OU2VyaWFsaXplci5odG1sKSB0
bwotICAgICAgICBnZXQgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSByZWNvcmQuCi0KLSAg
ICAgICAgYHRvSlNPTmAgdGFrZXMgYW4gb3B0aW9uYWwgaGFzaCBhcyBhIHBhcmFtZXRlciwgY3Vy
cmVudGx5Ci0gICAgICAgIHN1cHBvcnRlZCBvcHRpb25zIGFyZToKLQotICAgICAgICAtIGBpbmNs
dWRlSWRgOiBgdHJ1ZWAgaWYgdGhlIHJlY29yZCdzIElEIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0
aGUKLSAgICAgICAgICBKU09OIHJlcHJlc2VudGF0aW9uLgotCi0gICAgICAgIEBtZXRob2QgdG9K
U09OCi0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCi0gICAgICAgIEByZXR1cm4ge09i
amVjdH0gQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QuCi0gICAgICAqLwotICAg
ICAgdG9KU09OOiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgIGlmICghSlNPTlNlcmlhbGl6
ZXIpIHsgSlNPTlNlcmlhbGl6ZXIgPSByZXF1aXJlTW9kdWxlKCJlbWJlci1kYXRhL2xpYi9zZXJp
YWxpemVycy9qc29uX3NlcmlhbGl6ZXIiKVsiZGVmYXVsdCJdOyB9Ci0gICAgICAgIC8vIGNvbnRh
aW5lciBpcyBmb3IgbGF6eSB0cmFuc2Zvcm0gbG9va3VwcwotICAgICAgICB2YXIgc2VyaWFsaXpl
ciA9IEpTT05TZXJpYWxpemVyLmNyZWF0ZSh7IGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIgfSk7
Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLCBvcHRpb25zKTsKLSAg
ICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBGaXJlZCB3aGVuIHRoZSByZWNvcmQgaXMgbG9h
ZGVkIGZyb20gdGhlIHNlcnZlci4KLQotICAgICAgICBAZXZlbnQgZGlkTG9hZAotICAgICAgKi8K
LSAgICAgIGRpZExvYWQ6IEVtYmVyLkssCi0KLSAgICAgIC8qKgotICAgICAgICBGaXJlZCB3aGVu
IHRoZSByZWNvcmQgaXMgdXBkYXRlZC4KLQotICAgICAgICBAZXZlbnQgZGlkVXBkYXRlCi0gICAg
ICAqLwotICAgICAgZGlkVXBkYXRlOiBFbWJlci5LLAotCi0gICAgICAvKioKLSAgICAgICAgRmly
ZWQgd2hlbiB0aGUgcmVjb3JkIGlzIGNyZWF0ZWQuCi0KLSAgICAgICAgQGV2ZW50IGRpZENyZWF0
ZQotICAgICAgKi8KLSAgICAgIGRpZENyZWF0ZTogRW1iZXIuSywKLQotICAgICAgLyoqCi0gICAg
ICAgIEZpcmVkIHdoZW4gdGhlIHJlY29yZCBpcyBkZWxldGVkLgotCi0gICAgICAgIEBldmVudCBk
aWREZWxldGUKLSAgICAgICovCi0gICAgICBkaWREZWxldGU6IEVtYmVyLkssCi0KLSAgICAgIC8q
KgotICAgICAgICBGaXJlZCB3aGVuIHRoZSByZWNvcmQgYmVjb21lcyBpbnZhbGlkLgotCi0gICAg
ICAgIEBldmVudCBiZWNhbWVJbnZhbGlkCi0gICAgICAqLwotICAgICAgYmVjYW1lSW52YWxpZDog
RW1iZXIuSywKLQotICAgICAgLyoqCi0gICAgICAgIEZpcmVkIHdoZW4gdGhlIHJlY29yZCBlbnRl
cnMgdGhlIGVycm9yIHN0YXRlLgotCi0gICAgICAgIEBldmVudCBiZWNhbWVFcnJvcgotICAgICAg
Ki8KLSAgICAgIGJlY2FtZUVycm9yOiBFbWJlci5LLAotCi0gICAgICAvKioKLSAgICAgICAgQHBy
b3BlcnR5IGRhdGEKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHR5cGUge09iamVjdH0KLSAg
ICAgICovCi0gICAgICBkYXRhOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwge307Ci0gICAgICAgIHJldHVybiB0aGlzLl9kYXRh
OwotICAgICAgfSkucmVhZE9ubHkoKSwKLQotICAgICAgX2RhdGE6IG51bGwsCi0KLSAgICAgIGlu
aXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICB0aGlzLl9z
ZXR1cCgpOwotICAgICAgfSwKLQotICAgICAgX3NldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
dGhpcy5fY2hhbmdlc1RvU3luYyA9IHt9OwotICAgICAgICB0aGlzLl9kZWZlcnJlZFRyaWdnZXJz
ID0gW107Ci0gICAgICAgIHRoaXMuX2RhdGEgPSB7fTsKLSAgICAgICAgdGhpcy5fYXR0cmlidXRl
cyA9IHt9OwotICAgICAgICB0aGlzLl9pbkZsaWdodEF0dHJpYnV0ZXMgPSB7fTsKLSAgICAgICAg
dGhpcy5fcmVsYXRpb25zaGlwcyA9IHt9OwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAg
IEBtZXRob2Qgc2VuZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30g
bmFtZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gY29udGV4dAotICAgICAgKi8KLSAgICAgIHNl
bmQ6IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQpIHsKLSAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9
IGdldCh0aGlzLCAnY3VycmVudFN0YXRlJyk7Ci0KLSAgICAgICAgaWYgKCFjdXJyZW50U3RhdGVb
bmFtZV0pIHsKLSAgICAgICAgICB0aGlzLl91bmhhbmRsZWRFdmVudChjdXJyZW50U3RhdGUsIG5h
bWUsIGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZVtu
YW1lXSh0aGlzLCBjb250ZXh0KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0
aG9kIHRyYW5zaXRpb25UbwotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gbmFtZQotICAgICAgKi8KLSAgICAgIHRyYW5zaXRpb25UbzogZnVuY3Rpb24obmFtZSkgewot
ICAgICAgICAvLyBQT1NTSUJMRSBUT0RPOiBSZW1vdmUgdGhpcyBjb2RlIGFuZCByZXBsYWNlIHdp
dGgKLSAgICAgICAgLy8gYWx3YXlzIGhhdmluZyBkaXJlY3QgcmVmZXJlbmNlcyB0byBzdGF0ZSBv
YmplY3RzCi0KLSAgICAgICAgdmFyIHBpdm90TmFtZSA9IG5hbWUuc3BsaXQoIi4iLCAxKSwKLSAg
ICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IGdldCh0aGlzLCAnY3VycmVudFN0YXRlJyksCi0gICAg
ICAgICAgICBzdGF0ZSA9IGN1cnJlbnRTdGF0ZTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAg
aWYgKHN0YXRlLmV4aXQpIHsgc3RhdGUuZXhpdCh0aGlzKTsgfQotICAgICAgICAgIHN0YXRlID0g
c3RhdGUucGFyZW50U3RhdGU7Ci0gICAgICAgIH0gd2hpbGUgKCFzdGF0ZS5oYXNPd25Qcm9wZXJ0
eShwaXZvdE5hbWUpKTsKLQotICAgICAgICB2YXIgcGF0aCA9IG5hbWUuc3BsaXQoIi4iKTsKLQot
ICAgICAgICB2YXIgc2V0dXBzID0gW10sIGVudGVycyA9IFtdLCBpLCBsOwotCi0gICAgICAgIGZv
ciAoaT0wLCBsPXBhdGgubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICAgIHN0YXRlID0gc3Rh
dGVbcGF0aFtpXV07Ci0KLSAgICAgICAgICBpZiAoc3RhdGUuZW50ZXIpIHsgZW50ZXJzLnB1c2go
c3RhdGUpOyB9Ci0gICAgICAgICAgaWYgKHN0YXRlLnNldHVwKSB7IHNldHVwcy5wdXNoKHN0YXRl
KTsgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpPTAsIGw9ZW50ZXJzLmxlbmd0aDsgaTxs
OyBpKyspIHsKLSAgICAgICAgICBlbnRlcnNbaV0uZW50ZXIodGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzZXQodGhpcywgJ2N1cnJlbnRTdGF0ZScsIHN0YXRlKTsKLQotICAgICAgICBmb3Ig
KGk9MCwgbD1zZXR1cHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICAgIHNldHVwc1tpXS5z
ZXR1cCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMudXBkYXRlUmVjb3JkQXJyYXlz
TGF0ZXIoKTsKLSAgICAgIH0sCi0KLSAgICAgIF91bmhhbmRsZWRFdmVudDogZnVuY3Rpb24oc3Rh
dGUsIG5hbWUsIGNvbnRleHQpIHsKLSAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9ICJBdHRlbXB0
ZWQgdG8gaGFuZGxlIGV2ZW50IGAiICsgbmFtZSArICJgICI7Ci0gICAgICAgIGVycm9yTWVzc2Fn
ZSAgICArPSAib24gIiArIFN0cmluZyh0aGlzKSArICIgd2hpbGUgaW4gc3RhdGUgIjsKLSAgICAg
ICAgZXJyb3JNZXNzYWdlICAgICs9IHN0YXRlLnN0YXRlTmFtZSArICIuICI7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIGVycm9yTWVzc2FnZSAgKz0g
IkNhbGxlZCB3aXRoICIgKyBFbWJlci5pbnNwZWN0KGNvbnRleHQpICsgIi4iOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhyb3cgbmV3IEVtYmVyLkVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICB9
LAotCi0gICAgICB3aXRoVHJhbnNhY3Rpb246IGZ1bmN0aW9uKGZuKSB7Ci0gICAgICAgIHZhciB0
cmFuc2FjdGlvbiA9IGdldCh0aGlzLCAndHJhbnNhY3Rpb24nKTsKLSAgICAgICAgaWYgKHRyYW5z
YWN0aW9uKSB7IGZuKHRyYW5zYWN0aW9uKTsgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIEBtZXRob2QgbG9hZGluZ0RhdGEKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFt
IHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgbG9hZGluZ0RhdGE6IGZ1bmN0aW9u
KHByb21pc2UpIHsKLSAgICAgICAgdGhpcy5zZW5kKCdsb2FkaW5nRGF0YScsIHByb21pc2UpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgbG9hZGVkRGF0YQotICAgICAg
ICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGxvYWRlZERhdGE6IGZ1bmN0aW9uKCkgewotICAg
ICAgICB0aGlzLnNlbmQoJ2xvYWRlZERhdGEnKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAg
ICAgICBAbWV0aG9kIG5vdEZvdW5kCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAg
bm90Rm91bmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnNlbmQoJ25vdEZvdW5kJyk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBwdXNoZWREYXRhCi0gICAgICAg
IEBwcml2YXRlCi0gICAgICAqLwotICAgICAgcHVzaGVkRGF0YTogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRoaXMuc2VuZCgncHVzaGVkRGF0YScpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIE1hcmtzIHRoZSByZWNvcmQgYXMgZGVsZXRlZCBidXQgZG9lcyBub3Qgc2F2ZSBpdC4gWW91
IG11c3QgY2FsbAotICAgICAgICBgc2F2ZWAgYWZ0ZXJ3YXJkcyBpZiB5b3Ugd2FudCB0byBwZXJz
aXN0IGl0LiBZb3UgbWlnaHQgdXNlIHRoaXMKLSAgICAgICAgbWV0aG9kIGlmIHlvdSB3YW50IHRv
IGFsbG93IHRoZSB1c2VyIHRvIHN0aWxsIGByb2xsYmFjaygpYCBhCi0gICAgICAgIGRlbGV0ZSBh
ZnRlciBpdCB3YXMgbWFkZS4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICBBcHAuTW9kZWxEZWxldGVSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgc29mdERlbGV0ZTogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgIHRoaXMuZ2V0KCdtb2RlbCcpLmRlbGV0ZVJlY29yZCgpOwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIGNvbmZpcm06IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICB0aGlzLmdldCgnbW9kZWwnKS5zYXZlKCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgdW5kbzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHRoaXMuZ2V0KCdtb2RlbCcpLnJv
bGxiYWNrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAg
ICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBkZWxldGVSZWNvcmQKLSAgICAgICovCi0gICAgICBk
ZWxldGVSZWNvcmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnNlbmQoJ2RlbGV0ZVJlY29y
ZCcpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFNhbWUgYXMgYGRlbGV0ZVJlY29y
ZGAsIGJ1dCBzYXZlcyB0aGUgcmVjb3JkIGltbWVkaWF0ZWx5LgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5Nb2RlbERlbGV0ZVJvdXRlID0g
RW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICBk
ZWxldGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHRoaXMu
Y29udHJvbGxlcjsKLSAgICAgICAgICAgICAgdGhpcy5nZXQoJ21vZGVsJykuZGVzdHJveVJlY29y
ZCgpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci50cmFuc2l0
aW9uVG9Sb3V0ZSgnbW9kZWwuaW5kZXgnKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1l
dGhvZCBkZXN0cm95UmVjb3JkCi0gICAgICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0
aGF0IHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgYWRhcHRlciByZXR1cm5zCi0gICAgICAgIHN1
Y2Nlc3NmdWxseSBvciByZWplY3RlZCBpZiB0aGUgYWRhcHRlciByZXR1cm5zIHdpdGggYW4gZXJy
b3IuCi0gICAgICAqLwotICAgICAgZGVzdHJveVJlY29yZDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHRoaXMuZGVsZXRlUmVjb3JkKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLnNhdmUoKTsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIHVubG9hZFJlY29yZAotICAgICAgICBA
cHJpdmF0ZQotICAgICAgKi8KLSAgICAgIHVubG9hZFJlY29yZDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7IHJldHVybjsgfQotCi0gICAgICAgIHRoaXMuc2Vu
ZCgndW5sb2FkUmVjb3JkJyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhv
ZCBjbGVhclJlbGF0aW9uc2hpcHMKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBj
bGVhclJlbGF0aW9uc2hpcHM6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmVhY2hSZWxhdGlv
bnNoaXAoZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgaWYgKHJlbGF0
aW9uc2hpcC5raW5kID09PSAnYmVsb25nc1RvJykgewotICAgICAgICAgICAgc2V0KHRoaXMsIG5h
bWUsIG51bGwpOwotICAgICAgICAgIH0gZWxzZSBpZiAocmVsYXRpb25zaGlwLmtpbmQgPT09ICdo
YXNNYW55JykgewotICAgICAgICAgICAgdmFyIGhhc01hbnkgPSB0aGlzLl9yZWxhdGlvbnNoaXBz
W25hbWVdOwotICAgICAgICAgICAgaWYgKGhhc01hbnkpIHsgLy8gcmVsYXRpb25zaGlwcyBhcmUg
Y3JlYXRlZCBsYXppbHkKLSAgICAgICAgICAgICAgaGFzTWFueS5kZXN0cm95KCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsKLSAgICAgIH0sCi0KLSAgICAg
IC8qKgotICAgICAgICBAbWV0aG9kIHVwZGF0ZVJlY29yZEFycmF5cwotICAgICAgICBAcHJpdmF0
ZQotICAgICAgKi8KLSAgICAgIHVwZGF0ZVJlY29yZEFycmF5czogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0aW5nUmVjb3JkQXJyYXlzTGF0ZXIgPSBmYWxzZTsKLSAgICAgICAgZ2V0
KHRoaXMsICdzdG9yZScpLmRhdGFXYXNVcGRhdGVkKHRoaXMuY29uc3RydWN0b3IsIHRoaXMpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFJldHVybnMgYW4gb2JqZWN0LCB3aG9zZSBr
ZXlzIGFyZSBjaGFuZ2VkIHByb3BlcnRpZXMsIGFuZCB2YWx1ZSBpcwotICAgICAgICBhbiBbb2xk
UHJvcCwgbmV3UHJvcF0gYXJyYXkuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgQXBwLk1hc2NvdCA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAg
ICAgbmFtZTogYXR0cignc3RyaW5nJykKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIHBlcnNv
biA9IHN0b3JlLmNyZWF0ZVJlY29yZCgncGVyc29uJyk7Ci0gICAgICAgIHBlcnNvbi5jaGFuZ2Vk
QXR0cmlidXRlcygpOyAvLyB7fQotICAgICAgICBwZXJzb24uc2V0KCduYW1lJywgJ1RvbXN0ZXIn
KTsKLSAgICAgICAgcGVyc29uLmNoYW5nZWRBdHRyaWJ1dGVzKCk7IC8vIHtuYW1lOiBbdW5kZWZp
bmVkLCAnVG9tc3RlciddfQotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIGNoYW5nZWRB
dHRyaWJ1dGVzCi0gICAgICAgIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0LCB3aG9zZSBrZXlz
IGFyZSBjaGFuZ2VkIHByb3BlcnRpZXMsCi0gICAgICAgICAgYW5kIHZhbHVlIGlzIGFuIFtvbGRQ
cm9wLCBuZXdQcm9wXSBhcnJheS4KLSAgICAgICovCi0gICAgICBjaGFuZ2VkQXR0cmlidXRlczog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBvbGREYXRhID0gZ2V0KHRoaXMsICdfZGF0YScpLAot
ICAgICAgICAgICAgbmV3RGF0YSA9IGdldCh0aGlzLCAnX2F0dHJpYnV0ZXMnKSwKLSAgICAgICAg
ICAgIGRpZmZEYXRhID0ge30sCi0gICAgICAgICAgICBwcm9wOwotCi0gICAgICAgIGZvciAocHJv
cCBpbiBuZXdEYXRhKSB7Ci0gICAgICAgICAgZGlmZkRhdGFbcHJvcF0gPSBbb2xkRGF0YVtwcm9w
XSwgbmV3RGF0YVtwcm9wXV07Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGlmZkRhdGE7
Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBhZGFwdGVyV2lsbENvbW1p
dAotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIGFkYXB0ZXJXaWxsQ29tbWl0OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5zZW5kKCd3aWxsQ29tbWl0Jyk7Ci0gICAgICB9LAot
Ci0gICAgICAvKioKLSAgICAgICAgSWYgdGhlIGFkYXB0ZXIgZGlkIG5vdCByZXR1cm4gYSBoYXNo
IGluIHJlc3BvbnNlIHRvIGEgY29tbWl0LAotICAgICAgICBtZXJnZSB0aGUgY2hhbmdlZCBhdHRy
aWJ1dGVzIGFuZCByZWxhdGlvbnNoaXBzIGludG8gdGhlIGV4aXN0aW5nCi0gICAgICAgIHNhdmVk
IGRhdGEuCi0KLSAgICAgICAgQG1ldGhvZCBhZGFwdGVyRGlkQ29tbWl0Ci0gICAgICAqLwotICAg
ICAgYWRhcHRlckRpZENvbW1pdDogZnVuY3Rpb24oZGF0YSkgewotICAgICAgICBzZXQodGhpcywg
J2lzRXJyb3InLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICB0aGlz
Ll9kYXRhID0gZGF0YTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBFbWJlci5taXhpbih0
aGlzLl9kYXRhLCB0aGlzLl9pbkZsaWdodEF0dHJpYnV0ZXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5faW5GbGlnaHRBdHRyaWJ1dGVzID0ge307Ci0KLSAgICAgICAgdGhpcy5zZW5kKCdk
aWRDb21taXQnKTsKLSAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRBcnJheXNMYXRlcigpOwotCi0g
ICAgICAgIGlmICghZGF0YSkgeyByZXR1cm47IH0KLQotICAgICAgICB0aGlzLnN1c3BlbmRSZWxh
dGlvbnNoaXBPYnNlcnZlcnMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdGhpcy5ub3RpZnlQcm9w
ZXJ0eUNoYW5nZSgnZGF0YScpOwotICAgICAgICB9KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgot
ICAgICAgICBAbWV0aG9kIGFkYXB0ZXJEaWREaXJ0eQotICAgICAgICBAcHJpdmF0ZQotICAgICAg
Ki8KLSAgICAgIGFkYXB0ZXJEaWREaXJ0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuc2Vu
ZCgnYmVjb21lRGlydHknKTsKLSAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRBcnJheXNMYXRlcigp
OwotICAgICAgfSwKLQotICAgICAgZGF0YURpZENoYW5nZTogRW1iZXIub2JzZXJ2ZXIoZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHRoaXMucmVsb2FkSGFzTWFueXMoKTsKLSAgICAgIH0sICdkYXRhJyks
Ci0KLSAgICAgIHJlbG9hZEhhc01hbnlzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHJlbGF0
aW9uc2hpcHMgPSBnZXQodGhpcy5jb25zdHJ1Y3RvciwgJ3JlbGF0aW9uc2hpcHNCeU5hbWUnKTsK
LSAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRBcnJheXNMYXRlcigpOwotICAgICAgICByZWxhdGlv
bnNoaXBzLmZvckVhY2goZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAg
aWYgKHRoaXMuX2RhdGEubGlua3MgJiYgdGhpcy5fZGF0YS5saW5rc1tuYW1lXSkgeyByZXR1cm47
IH0KLSAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQgPT09ICdoYXNNYW55JykgewotICAg
ICAgICAgICAgdGhpcy5oYXNNYW55RGlkQ2hhbmdlKHJlbGF0aW9uc2hpcC5rZXkpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAgICBoYXNNYW55RGlkQ2hh
bmdlOiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgdmFyIGhhc01hbnkgPSB0aGlzLl9yZWxhdGlv
bnNoaXBzW2tleV07Ci0KLSAgICAgICAgaWYgKGhhc01hbnkpIHsKLSAgICAgICAgICB2YXIgcmVj
b3JkcyA9IHRoaXMuX2RhdGFba2V5XSB8fCBbXTsKLQotICAgICAgICAgIHNldChoYXNNYW55LCAn
Y29udGVudCcsIEVtYmVyLkEocmVjb3JkcykpOwotICAgICAgICAgIHNldChoYXNNYW55LCAnaXNM
b2FkZWQnLCB0cnVlKTsKLSAgICAgICAgICBoYXNNYW55LnRyaWdnZXIoJ2RpZExvYWQnKTsKLSAg
ICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgdXBkYXRlUmVj
b3JkQXJyYXlzTGF0ZXIKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICB1cGRhdGVS
ZWNvcmRBcnJheXNMYXRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIHF1aWNrIGhhY2sgKHNv
bWV0aGluZyBsaWtlIHRoaXMgY291bGQgYmUgcHVzaGVkIGludG8gcnVuLm9uY2UKLSAgICAgICAg
aWYgKHRoaXMuX3VwZGF0aW5nUmVjb3JkQXJyYXlzTGF0ZXIpIHsgcmV0dXJuOyB9Ci0gICAgICAg
IHRoaXMuX3VwZGF0aW5nUmVjb3JkQXJyYXlzTGF0ZXIgPSB0cnVlOwotCi0gICAgICAgIEVtYmVy
LnJ1bi5zY2hlZHVsZSgnYWN0aW9ucycsIHRoaXMsIHRoaXMudXBkYXRlUmVjb3JkQXJyYXlzKTsK
LSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIHNldHVwRGF0YQotICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAgICBAcGFyYW0g
e0Jvb2xlYW59IHBhcnRpYWwgdGhlIGRhdGEgc2hvdWxkIGJlIG1lcmdlZCBpbnRvCi0gICAgICAg
ICAgdGhlIGV4aXN0aW5nIGRhdGEsIG5vdCByZXBsYWNlIGl0LgotICAgICAgKi8KLSAgICAgIHNl
dHVwRGF0YTogZnVuY3Rpb24oZGF0YSwgcGFydGlhbCkgewotICAgICAgICBpZiAocGFydGlhbCkg
ewotICAgICAgICAgIEVtYmVyLm1lcmdlKHRoaXMuX2RhdGEsIGRhdGEpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHJlbGF0aW9uc2hpcHMgPSB0aGlzLl9yZWxhdGlvbnNoaXBzOwotCi0gICAgICAgIHRoaXMu
ZWFjaFJlbGF0aW9uc2hpcChmdW5jdGlvbihuYW1lLCByZWwpIHsKLSAgICAgICAgICBpZiAoZGF0
YS5saW5rcyAmJiBkYXRhLmxpbmtzW25hbWVdKSB7IHJldHVybjsgfQotICAgICAgICAgIGlmIChy
ZWwub3B0aW9ucy5hc3luYykgeyByZWxhdGlvbnNoaXBzW25hbWVdID0gbnVsbDsgfQotICAgICAg
ICB9KTsKLQotICAgICAgICBpZiAoZGF0YSkgeyB0aGlzLnB1c2hlZERhdGEoKTsgfQotCi0gICAg
ICAgIHRoaXMuc3VzcGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycyhmdW5jdGlvbigpIHsKLSAgICAg
ICAgICB0aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKCdkYXRhJyk7Ci0gICAgICAgIH0pOwotICAg
ICAgfSwKLQotICAgICAgbWF0ZXJpYWxpemVJZDogZnVuY3Rpb24oaWQpIHsKLSAgICAgICAgc2V0
KHRoaXMsICdpZCcsIGlkKTsKLSAgICAgIH0sCi0KLSAgICAgIG1hdGVyaWFsaXplQXR0cmlidXRl
czogZnVuY3Rpb24oYXR0cmlidXRlcykgewotICAgICAgICBFbWJlci5hc3NlcnQoIk11c3QgcGFz
cyBhIGhhc2ggb2YgYXR0cmlidXRlcyB0byBtYXRlcmlhbGl6ZUF0dHJpYnV0ZXMiLCAhIWF0dHJp
YnV0ZXMpOwotICAgICAgICBtZXJnZSh0aGlzLl9kYXRhLCBhdHRyaWJ1dGVzKTsKLSAgICAgIH0s
Ci0KLSAgICAgIG1hdGVyaWFsaXplQXR0cmlidXRlOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewot
ICAgICAgICB0aGlzLl9kYXRhW25hbWVdID0gdmFsdWU7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgQG1ldGhvZCB1cGRhdGVIYXNNYW55Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgICAgIEBwYXJhbSB7QXJyYXl9IHJlY29yZHMKLSAg
ICAgICovCi0gICAgICB1cGRhdGVIYXNNYW55OiBmdW5jdGlvbihuYW1lLCByZWNvcmRzKSB7Ci0g
ICAgICAgIHRoaXMuX2RhdGFbbmFtZV0gPSByZWNvcmRzOwotICAgICAgICB0aGlzLmhhc01hbnlE
aWRDaGFuZ2UobmFtZSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCB1
cGRhdGVCZWxvbmdzVG8KLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IG5hbWUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAg
dXBkYXRlQmVsb25nc1RvOiBmdW5jdGlvbihuYW1lLCByZWNvcmQpIHsKLSAgICAgICAgdGhpcy5f
ZGF0YVtuYW1lXSA9IHJlY29yZDsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJZiB0
aGUgbW9kZWwgYGlzRGlydHlgIHRoaXMgZnVuY3Rpb24gd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVk
Ci0gICAgICAgIGNoYW5nZXMKLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICByZWNvcmQuZ2V0KCduYW1lJyk7IC8vICdVbnRpdGxlZCBEb2N1bWVudCcK
LSAgICAgICAgcmVjb3JkLnNldCgnbmFtZScsICdEb2MgMScpOwotICAgICAgICByZWNvcmQuZ2V0
KCduYW1lJyk7IC8vICdEb2MgMScKLSAgICAgICAgcmVjb3JkLnJvbGxiYWNrKCk7Ci0gICAgICAg
IHJlY29yZC5nZXQoJ25hbWUnKTsgLy8gJ1VudGl0bGVkIERvY3VtZW50JwotICAgICAgICBgYGAK
LQotICAgICAgICBAbWV0aG9kIHJvbGxiYWNrCi0gICAgICAqLwotICAgICAgcm9sbGJhY2s6IGZ1
bmN0aW9uKCkgewotICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0ge307Ci0KLSAgICAgICAgaWYg
KGdldCh0aGlzLCAnaXNFcnJvcicpKSB7Ci0gICAgICAgICAgdGhpcy5faW5GbGlnaHRBdHRyaWJ1
dGVzID0ge307Ci0gICAgICAgICAgc2V0KHRoaXMsICdpc0Vycm9yJywgZmFsc2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFnZXQodGhpcywgJ2lzVmFsaWQnKSkgewotICAgICAgICAgIHRo
aXMuX2luRmxpZ2h0QXR0cmlidXRlcyA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5z
ZW5kKCdyb2xsZWRCYWNrJyk7Ci0KLSAgICAgICAgdGhpcy5zdXNwZW5kUmVsYXRpb25zaGlwT2Jz
ZXJ2ZXJzKGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2Uo
J2RhdGEnKTsKLSAgICAgICAgfSk7Ci0gICAgICB9LAotCi0gICAgICB0b1N0cmluZ0V4dGVuc2lv
bjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBnZXQodGhpcywgJ2lkJyk7Ci0gICAgICB9
LAotCi0gICAgICAvKioKLSAgICAgICAgVGhlIGdvYWwgb2YgdGhpcyBtZXRob2QgaXMgdG8gdGVt
cG9yYXJpbHkgZGlzYWJsZSBzcGVjaWZpYyBvYnNlcnZlcnMKLSAgICAgICAgdGhhdCB0YWtlIGFj
dGlvbiBpbiByZXNwb25zZSB0byBhcHBsaWNhdGlvbiBjaGFuZ2VzLgotCi0gICAgICAgIFRoaXMg
YWxsb3dzIHRoZSBzeXN0ZW0gdG8gbWFrZSBjaGFuZ2VzIChzdWNoIGFzIG1hdGVyaWFsaXphdGlv
biBhbmQKLSAgICAgICAgcm9sbGJhY2spIHRoYXQgc2hvdWxkIG5vdCB0cmlnZ2VyIHNlY29uZGFy
eSBiZWhhdmlvciAoc3VjaCBhcyBzZXR0aW5nIGFuCi0gICAgICAgIGludmVyc2UgcmVsYXRpb25z
aGlwIG9yIG1hcmtpbmcgcmVjb3JkcyBhcyBkaXJ0eSkuCi0KLSAgICAgICAgVGhlIHNwZWNpZmlj
IGltcGxlbWVudGF0aW9uIHdpbGwgbGlrZWx5IGNoYW5nZSBhcyBFbWJlciBwcm9wZXIgcHJvdmlk
ZXMKLSAgICAgICAgYmV0dGVyIGluZnJhc3RydWN0dXJlIGZvciBzdXNwZW5kaW5nIGdyb3VwcyBv
ZiBvYnNlcnZlcnMsIGFuZCBpZiBBcnJheQotICAgICAgICBvYnNlcnZhdGlvbiBiZWNvbWVzIG1v
cmUgdW5pZmllZCB3aXRoIHJlZ3VsYXIgb2JzZXJ2ZXJzLgotCi0gICAgICAgIEBtZXRob2Qgc3Vz
cGVuZFJlbGF0aW9uc2hpcE9ic2VydmVycwotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFy
YW0gY2FsbGJhY2sKLSAgICAgICAgQHBhcmFtIGJpbmRpbmcKLSAgICAgICovCi0gICAgICBzdXNw
ZW5kUmVsYXRpb25zaGlwT2JzZXJ2ZXJzOiBmdW5jdGlvbihjYWxsYmFjaywgYmluZGluZykgewot
ICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gZ2V0KHRoaXMuY29uc3RydWN0b3IsICdyZWxhdGlvbnNo
aXBOYW1lcycpLmJlbG9uZ3NUbzsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgdGhpcy5fc3VzcGVuZGVkUmVsYXRpb25zaGlwcyA9IHRydWU7Ci0g
ICAgICAgICAgRW1iZXIuX3N1c3BlbmRPYnNlcnZlcnMoc2VsZiwgb2JzZXJ2ZXJzLCBudWxsLCAn
YmVsb25nc1RvRGlkQ2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBFbWJlci5fc3Vz
cGVuZEJlZm9yZU9ic2VydmVycyhzZWxmLCBvYnNlcnZlcnMsIG51bGwsICdiZWxvbmdzVG9XaWxs
Q2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGlu
ZyB8fCBzZWxmKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0pOwotICAgICAgICB9IGZp
bmFsbHkgewotICAgICAgICAgIHRoaXMuX3N1c3BlbmRlZFJlbGF0aW9uc2hpcHMgPSBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFNhdmUgdGhlIHJlY29y
ZCBhbmQgcGVyc2lzdCBhbnkgY2hhbmdlcyB0byB0aGUgcmVjb3JkIHRvIGFuCi0gICAgICAgIGV4
dGVuYWwgc291cmNlIHZpYSB0aGUgYWRhcHRlci4KLQotICAgICAgICBFeGFtcGxlCi0KLSAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICByZWNvcmQuc2V0KCduYW1lJywgJ1RvbXN0ZXInKTsK
LSAgICAgICAgcmVjb3JkLnNhdmUoKS50aGVuKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgLy8gU3Vj
Y2VzcyBjYWxsYmFjawotICAgICAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAvLyBFcnJv
ciBjYWxsYmFjawotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0gICAgICAgIEBtZXRob2Qgc2F2
ZQotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29s
dmVkIHdoZW4gdGhlIGFkYXB0ZXIgcmV0dXJucwotICAgICAgICBzdWNjZXNzZnVsbHkgb3IgcmVq
ZWN0ZWQgaWYgdGhlIGFkYXB0ZXIgcmV0dXJucyB3aXRoIGFuIGVycm9yLgotICAgICAgKi8KLSAg
ICAgIHNhdmU6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcHJvbWlzZUxhYmVsID0gIkRTOiBN
b2RlbCNzYXZlICIgKyB0aGlzOwotICAgICAgICB2YXIgcmVzb2x2ZXIgPSBFbWJlci5SU1ZQLmRl
ZmVyKHByb21pc2VMYWJlbCk7Ci0KLSAgICAgICAgdGhpcy5nZXQoJ3N0b3JlJykuc2NoZWR1bGVT
YXZlKHRoaXMsIHJlc29sdmVyKTsKLSAgICAgICAgdGhpcy5faW5GbGlnaHRBdHRyaWJ1dGVzID0g
dGhpcy5fYXR0cmlidXRlczsKLSAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9OwotCi0gICAg
ICAgIHJldHVybiBQcm9taXNlT2JqZWN0LmNyZWF0ZSh7IHByb21pc2U6IHJlc29sdmVyLnByb21p
c2UgfSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmVsb2FkIHRoZSByZWNvcmQg
ZnJvbSB0aGUgYWRhcHRlci4KLQotICAgICAgICBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBy
ZWNvcmQgaGFzIGFscmVhZHkgZmluaXNoZWQgbG9hZGluZwotICAgICAgICBhbmQgaGFzIG5vdCB5
ZXQgYmVlbiBtb2RpZmllZCAoYGlzTG9hZGVkYCBidXQgbm90IGBpc0RpcnR5YCwKLSAgICAgICAg
b3IgYGlzU2F2aW5nYCkuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgQXBwLk1vZGVsVmlld1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAg
ICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICByZWxvYWQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICB0aGlzLmdldCgnbW9kZWwnKS5yZWxvYWQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHJl
bG9hZAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJl
c29sdmVkIHdpdGggdGhlIHJlY29yZCB3aGVuIHRoZQotICAgICAgICBhZGFwdGVyIHJldHVybnMg
c3VjY2Vzc2Z1bGx5IG9yIHJlamVjdGVkIGlmIHRoZSBhZGFwdGVyIHJldHVybnMKLSAgICAgICAg
d2l0aCBhbiBlcnJvci4KLSAgICAgICovCi0gICAgICByZWxvYWQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICBzZXQodGhpcywgJ2lzUmVsb2FkaW5nJywgdHJ1ZSk7Ci0KLSAgICAgICAgdmFyICByZWNv
cmQgPSB0aGlzOwotCi0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSAiRFM6IE1vZGVsI3JlbG9h
ZCBvZiAiICsgdGhpczsKLSAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlKXsKLSAgICAgICAgICAgcmVjb3JkLnNlbmQoJ3JlbG9hZFJlY29yZCcsIHJlc29s
dmUpOwotICAgICAgICB9LCBwcm9taXNlTGFiZWwpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgcmVjb3JkLnNldCgnaXNSZWxvYWRpbmcnLCBmYWxzZSk7Ci0gICAgICAgICAgcmVjb3JkLnNl
dCgnaXNFcnJvcicsIGZhbHNlKTsKLSAgICAgICAgICByZXR1cm4gcmVjb3JkOwotICAgICAgICB9
LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgICAgICByZWNvcmQuc2V0KCdpc0Vycm9yJywgdHJ1
ZSk7Ci0gICAgICAgICAgdGhyb3cgcmVhc29uOwotICAgICAgICB9LCAiRFM6IE1vZGVsI3JlbG9h
ZCBjb21wbGV0ZSwgdXBkYXRlIGZsYWdzIik7Ci0KLSAgICAgICAgcmV0dXJuIFByb21pc2VPYmpl
Y3QuY3JlYXRlKHsgcHJvbWlzZTogcHJvbWlzZSB9KTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIEZP
UiBVU0UgRFVSSU5HIENPTU1JVCBQUk9DRVNTCi0KLSAgICAgIGFkYXB0ZXJEaWRVcGRhdGVBdHRy
aWJ1dGU6IGZ1bmN0aW9uKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKSB7Ci0KLSAgICAgICAgLy8gSWYg
YSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHVwZGF0ZSB0aGUgaW50ZXJuYWwgYXR0cmlidXRlcyBhbmQg
Y2xlYXIKLSAgICAgICAgLy8gdGhlIGF0dHJpYnV0ZSBjYWNoZSBzbyBpdCBwaWNrcyB1cCB0aGUg
bmV3IHZhbHVlLiBPdGhlcndpc2UsCi0gICAgICAgIC8vIGNvbGxhcHNlIHRoZSBjdXJyZW50IHZh
bHVlIGludG8gdGhlIGludGVybmFsIGF0dHJpYnV0ZXMgYmVjYXVzZQotICAgICAgICAvLyB0aGUg
YWRhcHRlciBoYXMgYWNrbm93bGVkZ2VkIGl0LgotICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVm
aW5lZCkgewotICAgICAgICAgIHRoaXMuX2RhdGFbYXR0cmlidXRlTmFtZV0gPSB2YWx1ZTsKLSAg
ICAgICAgICB0aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKGF0dHJpYnV0ZU5hbWUpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHRoaXMuX2RhdGFbYXR0cmlidXRlTmFtZV0gPSB0aGlzLl9p
bkZsaWdodEF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV07Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLnVwZGF0ZVJlY29yZEFycmF5c0xhdGVyKCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgQG1ldGhvZCBhZGFwdGVyRGlkSW52YWxpZGF0ZQotICAgICAgICBAcHJpdmF0ZQotICAg
ICAgKi8KLSAgICAgIGFkYXB0ZXJEaWRJbnZhbGlkYXRlOiBmdW5jdGlvbihlcnJvcnMpIHsKLSAg
ICAgICAgdmFyIHJlY29yZEVycm9ycyA9IGdldCh0aGlzLCAnZXJyb3JzJyk7Ci0gICAgICAgIGZ1
bmN0aW9uIGFkZEVycm9yKG5hbWUpIHsKLSAgICAgICAgICBpZiAoZXJyb3JzW25hbWVdKSB7Ci0g
ICAgICAgICAgICByZWNvcmRFcnJvcnMuYWRkKG5hbWUsIGVycm9yc1tuYW1lXSk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5lYWNoQXR0cmlidXRlKGFkZEVycm9yKTsK
LSAgICAgICAgdGhpcy5lYWNoUmVsYXRpb25zaGlwKGFkZEVycm9yKTsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBAbWV0aG9kIGFkYXB0ZXJEaWRFcnJvcgotICAgICAgICBAcHJpdmF0
ZQotICAgICAgKi8KLSAgICAgIGFkYXB0ZXJEaWRFcnJvcjogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHRoaXMuc2VuZCgnYmVjYW1lRXJyb3InKTsKLSAgICAgICAgc2V0KHRoaXMsICdpc0Vycm9yJywg
dHJ1ZSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgT3ZlcnJpZGUgdGhlIGRlZmF1
bHQgZXZlbnQgZmlyaW5nIGZyb20gRW1iZXIuRXZlbnRlZCB0bwotICAgICAgICBhbHNvIGNhbGwg
bWV0aG9kcyB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCi0gICAgICAgIEBtZXRob2QgdHJpZ2dlcgot
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0gbmFtZQotICAgICAgKi8KLSAgICAgIHRy
aWdnZXI6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgRW1iZXIudHJ5SW52b2tlKHRoaXMsIG5h
bWUsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgICAgIHRoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB9LAotCi0gICAgICB0cmlnZ2VyTGF0ZXI6IGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5fZGVmZXJyZWRUcmlnZ2Vycy5wdXNoKGFyZ3Vt
ZW50cykgIT09IDEpIHsgcmV0dXJuOyB9Ci0gICAgICAgIEVtYmVyLnJ1bi5zY2hlZHVsZSgnYWN0
aW9ucycsIHRoaXMsICdfdHJpZ2dlckRlZmVycmVkVHJpZ2dlcnMnKTsKLSAgICAgIH0sCi0KLSAg
ICAgIF90cmlnZ2VyRGVmZXJyZWRUcmlnZ2VyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGZvciAo
dmFyIGk9MCwgbD10aGlzLl9kZWZlcnJlZFRyaWdnZXJzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAg
ICAgICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgdGhpcy5fZGVmZXJyZWRUcmlnZ2Vyc1tp
XSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9kZWZlcnJlZFRyaWdnZXJzLmxlbmd0aCA9
IDA7Ci0gICAgICB9LAotCi0gICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgIHRoaXMuY2xlYXJSZWxhdGlvbnNoaXBzKCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICBNb2RlbC5yZW9wZW5DbGFzcyh7Ci0KLSAgICAgIC8qKgotICAg
ICAgICBBbGlhcyBEUy5Nb2RlbCdzIGBjcmVhdGVgIG1ldGhvZCB0byBgX2NyZWF0ZWAuIFRoaXMg
YWxsb3dzIHVzIHRvIGNyZWF0ZSBEUy5Nb2RlbAotICAgICAgICBpbnN0YW5jZXMgZnJvbSB3aXRo
aW4gdGhlIHN0b3JlLCBidXQgaWYgZW5kIHVzZXJzIGFjY2lkZW50YWxseSBjYWxsIGBjcmVhdGUo
KWAKLSAgICAgICAgKGluc3RlYWQgb2YgYGNyZWF0ZVJlY29yZCgpYCksIHdlIGNhbiByYWlzZSBh
biBlcnJvci4KLQotICAgICAgICBAbWV0aG9kIF9jcmVhdGUKLSAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgQHN0YXRpYwotICAgICAgKi8KLSAgICAgIF9jcmVhdGU6IE1vZGVsLmNyZWF0ZSwKLQot
ICAgICAgLyoqCi0gICAgICAgIE92ZXJyaWRlIHRoZSBjbGFzcycgYGNyZWF0ZSgpYCBtZXRob2Qg
dG8gcmFpc2UgYW4gZXJyb3IuIFRoaXMKLSAgICAgICAgcHJldmVudHMgZW5kIHVzZXJzIGZyb20g
aW5hZHZlcnRlbnRseSBjYWxsaW5nIGBjcmVhdGUoKWAgaW5zdGVhZAotICAgICAgICBvZiBgY3Jl
YXRlUmVjb3JkKClgLiBUaGUgc3RvcmUgaXMgc3RpbGwgYWJsZSB0byBjcmVhdGUgaW5zdGFuY2Vz
Ci0gICAgICAgIGJ5IGNhbGxpbmcgdGhlIGBfY3JlYXRlKClgIG1ldGhvZC4gVG8gY3JlYXRlIGFu
IGluc3RhbmNlIG9mIGEKLSAgICAgICAgYERTLk1vZGVsYCB1c2UgW3N0b3JlLmNyZWF0ZVJlY29y
ZF0oRFMuU3RvcmUuaHRtbCNtZXRob2RfY3JlYXRlUmVjb3JkKS4KLQotICAgICAgICBAbWV0aG9k
IGNyZWF0ZQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAc3RhdGljCi0gICAgICAqLwotICAg
ICAgY3JlYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVtYmVyLkVycm9yKCJZ
b3Ugc2hvdWxkIG5vdCBjYWxsIGBjcmVhdGVgIG9uIGEgbW9kZWwuIEluc3RlYWQsIGNhbGwgYHN0
b3JlLmNyZWF0ZVJlY29yZGAgd2l0aCB0aGUgYXR0cmlidXRlcyB5b3Ugd291bGQgbGlrZSB0byBz
ZXQuIik7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0g
TW9kZWw7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0vbW9kZWwvc3RhdGVz
IiwgCi0gIFsiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAg
ICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7Ci0gICAgLyoKLSAgICAgIFRo
aXMgZmlsZSBlbmNhcHN1bGF0ZXMgdGhlIHZhcmlvdXMgc3RhdGVzIHRoYXQgYSByZWNvcmQgY2Fu
IHRyYW5zaXRpb24KLSAgICAgIHRocm91Z2ggZHVyaW5nIGl0cyBsaWZlY3ljbGUuCi0gICAgKi8K
LSAgICAvKioKLSAgICAgICMjIyBTdGF0ZQotCi0gICAgICBFYWNoIHJlY29yZCBoYXMgYSBgY3Vy
cmVudFN0YXRlYCBwcm9wZXJ0eSB0aGF0IGV4cGxpY2l0bHkgdHJhY2tzIHdoYXQKLSAgICAgIHN0
YXRlIGEgcmVjb3JkIGlzIGluIGF0IGFueSBnaXZlbiB0aW1lLiBGb3IgaW5zdGFuY2UsIGlmIGEg
cmVjb3JkIGlzCi0gICAgICBuZXdseSBjcmVhdGVkIGFuZCBoYXMgbm90IHlldCBiZWVuIHNlbnQg
dG8gdGhlIGFkYXB0ZXIgdG8gYmUgc2F2ZWQsCi0gICAgICBpdCB3b3VsZCBiZSBpbiB0aGUgYHJv
b3QubG9hZGVkLmNyZWF0ZWQudW5jb21taXR0ZWRgIHN0YXRlLiAgSWYgYQotICAgICAgcmVjb3Jk
IGhhcyBoYWQgbG9jYWwgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIGl0IHRoYXQgYXJlIGluIHRoZQot
ICAgICAgcHJvY2VzcyBvZiBiZWluZyBzYXZlZCwgdGhlIHJlY29yZCB3b3VsZCBiZSBpbiB0aGUK
LSAgICAgIGByb290LmxvYWRlZC51cGRhdGVkLmluRmxpZ2h0YCBzdGF0ZS4gKFRoZXNlIHN0YXRl
IHBhdGhzIHdpbGwgYmUKLSAgICAgIGV4cGxhaW5lZCBpbiBtb3JlIGRldGFpbCBiZWxvdy4pCi0K
LSAgICAgIEV2ZW50cyBhcmUgc2VudCBieSB0aGUgcmVjb3JkIG9yIGl0cyBzdG9yZSB0byB0aGUg
cmVjb3JkJ3MKLSAgICAgIGBjdXJyZW50U3RhdGVgIHByb3BlcnR5LiBIb3cgdGhlIHN0YXRlIHJl
YWN0cyB0byB0aGVzZSBldmVudHMgaXMKLSAgICAgIGRlcGVuZGVudCBvbiB3aGljaCBzdGF0ZSBp
dCBpcyBpbi4gSW4gc29tZSBzdGF0ZXMsIGNlcnRhaW4gZXZlbnRzCi0gICAgICB3aWxsIGJlIGlu
dmFsaWQgYW5kIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KLQotICAgICAg
U3RhdGVzIGFyZSBoaWVyYXJjaGljYWwgYW5kIGV2ZXJ5IHN0YXRlIGlzIGEgc3Vic3RhdGUgb2Yg
dGhlCi0gICAgICBgUm9vdFN0YXRlYC4gRm9yIGV4YW1wbGUsIGEgcmVjb3JkIGNhbiBiZSBpbiB0
aGUKLSAgICAgIGByb290LmRlbGV0ZWQudW5jb21taXR0ZWRgIHN0YXRlLCB0aGVuIHRyYW5zaXRp
b24gaW50byB0aGUKLSAgICAgIGByb290LmRlbGV0ZWQuaW5GbGlnaHRgIHN0YXRlLiBJZiBhIGNo
aWxkIHN0YXRlIGRvZXMgbm90IGltcGxlbWVudAotICAgICAgYW4gZXZlbnQgaGFuZGxlciwgdGhl
IHN0YXRlIG1hbmFnZXIgd2lsbCBhdHRlbXB0IHRvIGludm9rZSB0aGUgZXZlbnQKLSAgICAgIG9u
IGFsbCBwYXJlbnQgc3RhdGVzIHVudGlsIHRoZSByb290IHN0YXRlIGlzIHJlYWNoZWQuIFRoZSBz
dGF0ZQotICAgICAgaGllcmFyY2h5IG9mIGEgcmVjb3JkIGlzIGRlc2NyaWJlZCBpbiB0ZXJtcyBv
ZiBhIHBhdGggc3RyaW5nLiBZb3UKLSAgICAgIGNhbiBkZXRlcm1pbmUgYSByZWNvcmQncyBjdXJy
ZW50IHN0YXRlIGJ5IGdldHRpbmcgdGhlIHN0YXRlJ3MKLSAgICAgIGBzdGF0ZU5hbWVgIHByb3Bl
cnR5OgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICByZWNvcmQuZ2V0KCdjdXJyZW50U3Rh
dGUuc3RhdGVOYW1lJyk7Ci0gICAgICAvLz0+ICJyb290LmNyZWF0ZWQudW5jb21taXR0ZWQiCi0g
ICAgICAgYGBgCi0KLSAgICAgIFRoZSBoaWVyYXJjaHkgb2YgdmFsaWQgc3RhdGVzIHRoYXQgc2hp
cCB3aXRoIGVtYmVyIGRhdGEgbG9va3MgbGlrZQotICAgICAgdGhpczoKLQotICAgICAgYGBgdGV4
dAotICAgICAgKiByb290Ci0gICAgICAgICogZGVsZXRlZAotICAgICAgICAgICogc2F2ZWQKLSAg
ICAgICAgICAqIHVuY29tbWl0dGVkCi0gICAgICAgICAgKiBpbkZsaWdodAotICAgICAgICAqIGVt
cHR5Ci0gICAgICAgICogbG9hZGVkCi0gICAgICAgICAgKiBjcmVhdGVkCi0gICAgICAgICAgICAq
IHVuY29tbWl0dGVkCi0gICAgICAgICAgICAqIGluRmxpZ2h0Ci0gICAgICAgICAgKiBzYXZlZAot
ICAgICAgICAgICogdXBkYXRlZAotICAgICAgICAgICAgKiB1bmNvbW1pdHRlZAotICAgICAgICAg
ICAgKiBpbkZsaWdodAotICAgICAgICAqIGxvYWRpbmcKLSAgICAgIGBgYAotCi0gICAgICBUaGUg
YERTLk1vZGVsYCBzdGF0ZXMgYXJlIHRoZW1zZWx2ZXMgc3RhdGVsZXNzLiBXaGF0IHdlIG1lYW4g
aXMKLSAgICAgIHRoYXQsIHRoZSBoaWVyYXJjaGljYWwgc3RhdGVzIHRoYXQgZWFjaCBvZiAqdGhv
c2UqIHBvaW50cyB0byBpcyBhCi0gICAgICBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUuIEZvciBwZXJm
b3JtYW5jZSByZWFzb25zLCBpbnN0ZWFkIG9mIGVhY2gKLSAgICAgIHJlY29yZCBnZXR0aW5nIGl0
cyBvd24gY29weSBvZiB0aGUgaGllcmFyY2h5IG9mIHN0YXRlcywgZWFjaCByZWNvcmQKLSAgICAg
IHBvaW50cyB0byB0aGlzIGdsb2JhbCwgaW1tdXRhYmxlIHNoYXJlZCBpbnN0YW5jZS4gSG93IGRv
ZXMgYSBzdGF0ZQotICAgICAga25vdyB3aGljaCByZWNvcmQgaXQgc2hvdWxkIGJlIGFjdGluZyBv
bj8gV2UgcGFzcyB0aGUgcmVjb3JkCi0gICAgICBpbnN0YW5jZSBpbnRvIHRoZSBzdGF0ZSdzIGV2
ZW50IGhhbmRsZXJzIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KLQotICAgICAgVGhlIHJlY29yZCBw
YXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyB3aGVyZSB5b3Ugc2hvdWxkIHN0YXNoCi0g
ICAgICBzdGF0ZSBhYm91dCB0aGUgcmVjb3JkIGlmIG5lZWRlZDsgeW91IHNob3VsZCBuZXZlciBz
dG9yZSBkYXRhIG9uIHRoZSBzdGF0ZQotICAgICAgb2JqZWN0IGl0c2VsZi4KLQotICAgICAgIyMj
IEV2ZW50cyBhbmQgRmxhZ3MKLQotICAgICAgQSBzdGF0ZSBtYXkgaW1wbGVtZW50IHplcm8gb3Ig
bW9yZSBldmVudHMgYW5kIGZsYWdzLgotCi0gICAgICAjIyMjIEV2ZW50cwotCi0gICAgICBFdmVu
dHMgYXJlIG5hbWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZva2VkIHdoZW4gc2VudCB0byBhIHJl
Y29yZC4gVGhlCi0gICAgICByZWNvcmQgd2lsbCBmaXJzdCBsb29rIGZvciBhIG1ldGhvZCB3aXRo
IHRoZSBnaXZlbiBuYW1lIG9uIHRoZQotICAgICAgY3VycmVudCBzdGF0ZS4gSWYgbm8gbWV0aG9k
IGlzIGZvdW5kLCBpdCB3aWxsIHNlYXJjaCB0aGUgY3VycmVudAotICAgICAgc3RhdGUncyBwYXJl
bnQsIGFuZCB0aGVuIGl0cyBncmFuZHBhcmVudCwgYW5kIHNvIG9uIHVudGlsIHJlYWNoaW5nCi0g
ICAgICB0aGUgdG9wIG9mIHRoZSBoaWVyYXJjaHkuIElmIHRoZSByb290IGlzIHJlYWNoZWQgd2l0
aG91dCBhbiBldmVudAotICAgICAgaGFuZGxlciBiZWluZyBmb3VuZCwgYW4gZXhjZXB0aW9uIHdp
bGwgYmUgcmFpc2VkLiBUaGlzIGNhbiBiZSB2ZXJ5Ci0gICAgICBoZWxwZnVsIHdoZW4gZGVidWdn
aW5nIG5ldyBmZWF0dXJlcy4KLQotICAgICAgSGVyZSdzIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRp
b24gb2YgYSBzdGF0ZSB3aXRoIGEgYG15RXZlbnRgIGV2ZW50IGhhbmRsZXI6Ci0KLSAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgIGFTdGF0ZTogRFMuU3RhdGUuY3JlYXRlKHsKLSAgICAgICAgbXlF
dmVudDogZnVuY3Rpb24obWFuYWdlciwgcGFyYW0pIHsKLSAgICAgICAgICBjb25zb2xlLmxvZygi
UmVjZWl2ZWQgbXlFdmVudCB3aXRoIiwgcGFyYW0pOwotICAgICAgICB9Ci0gICAgICB9KQotICAg
ICAgYGBgCi0KLSAgICAgIFRvIHRyaWdnZXIgdGhpcyBldmVudDoKLQotICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgcmVjb3JkLnNlbmQoJ215RXZlbnQnLCAnZm9vJyk7Ci0gICAgICAvLz0+ICJS
ZWNlaXZlZCBteUV2ZW50IHdpdGggZm9vIgotICAgICAgYGBgCi0KLSAgICAgIE5vdGUgdGhhdCBh
biBvcHRpb25hbCBwYXJhbWV0ZXIgY2FuIGJlIHNlbnQgdG8gYSByZWNvcmQncyBgc2VuZCgpYCBt
ZXRob2QsCi0gICAgICB3aGljaCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRl
ciB0byB0aGUgZXZlbnQgaGFuZGxlci4KLQotICAgICAgRXZlbnRzIHNob3VsZCB0cmFuc2l0aW9u
IHRvIGEgZGlmZmVyZW50IHN0YXRlIGlmIGFwcHJvcHJpYXRlLiBUaGlzIGNhbiBiZQotICAgICAg
ZG9uZSBieSBjYWxsaW5nIHRoZSByZWNvcmQncyBgdHJhbnNpdGlvblRvKClgIG1ldGhvZCB3aXRo
IGEgcGF0aCB0byB0aGUKLSAgICAgIGRlc2lyZWQgc3RhdGUuIFRoZSBzdGF0ZSBtYW5hZ2VyIHdp
bGwgYXR0ZW1wdCB0byByZXNvbHZlIHRoZSBzdGF0ZSBwYXRoCi0gICAgICByZWxhdGl2ZSB0byB0
aGUgY3VycmVudCBzdGF0ZS4gSWYgbm8gc3RhdGUgaXMgZm91bmQgYXQgdGhhdCBwYXRoLCBpdCB3
aWxsCi0gICAgICBhdHRlbXB0IHRvIHJlc29sdmUgaXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQg
c3RhdGUncyBwYXJlbnQsIGFuZCB0aGVuIGl0cwotICAgICAgcGFyZW50LCBhbmQgc28gb24gdW50
aWwgdGhlIHJvb3QgaXMgcmVhY2hlZC4gRm9yIGV4YW1wbGUsIGltYWdpbmUgYSBoaWVyYXJjaHkK
LSAgICAgIGxpa2UgdGhpczoKLQotICAgICAgICAgICogY3JlYXRlZAotICAgICAgICAgICAgKiB1
bmNvbW1pdHRlZCA8LS0gY3VycmVudFN0YXRlCi0gICAgICAgICAgICAqIGluRmxpZ2h0Ci0gICAg
ICAgICAgKiB1cGRhdGVkCi0gICAgICAgICAgICAqIGluRmxpZ2h0Ci0KLSAgICAgIElmIHdlIGFy
ZSBjdXJyZW50bHkgaW4gdGhlIGB1bmNvbW1pdHRlZGAgc3RhdGUsIGNhbGxpbmcKLSAgICAgIGB0
cmFuc2l0aW9uVG8oJ2luRmxpZ2h0JylgIHdvdWxkIHRyYW5zaXRpb24gdG8gdGhlIGBjcmVhdGVk
LmluRmxpZ2h0YCBzdGF0ZSwKLSAgICAgIHdoaWxlIGNhbGxpbmcgYHRyYW5zaXRpb25UbygndXBk
YXRlZC5pbkZsaWdodCcpYCB3b3VsZCB0cmFuc2l0aW9uIHRvCi0gICAgICB0aGUgYHVwZGF0ZWQu
aW5GbGlnaHRgIHN0YXRlLgotCi0gICAgICBSZW1lbWJlciB0aGF0ICpvbmx5IGV2ZW50cyogc2hv
dWxkIGV2ZXIgY2F1c2UgYSBzdGF0ZSB0cmFuc2l0aW9uLiBZb3Ugc2hvdWxkCi0gICAgICBuZXZl
ciBjYWxsIGB0cmFuc2l0aW9uVG8oKWAgZnJvbSBvdXRzaWRlIGEgc3RhdGUncyBldmVudCBoYW5k
bGVyLiBJZiB5b3UgYXJlCi0gICAgICB0ZW1wdGVkIHRvIGRvIHNvLCBjcmVhdGUgYSBuZXcgZXZl
bnQgYW5kIHNlbmQgdGhhdCB0byB0aGUgc3RhdGUgbWFuYWdlci4KLQotICAgICAgIyMjIyBGbGFn
cwotCi0gICAgICBGbGFncyBhcmUgQm9vbGVhbiB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBp
bnRyb3NwZWN0IGEgcmVjb3JkJ3MgY3VycmVudAotICAgICAgc3RhdGUgaW4gYSBtb3JlIHVzZXIt
ZnJpZW5kbHkgd2F5IHRoYW4gZXhhbWluaW5nIGl0cyBzdGF0ZSBwYXRoLiBGb3IgZXhhbXBsZSwK
LSAgICAgIGluc3RlYWQgb2YgZG9pbmcgdGhpczoKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgdmFyIHN0YXRlUGF0aCA9IHJlY29yZC5nZXQoJ3N0YXRlTWFuYWdlci5jdXJyZW50UGF0aCcp
OwotICAgICAgaWYgKHN0YXRlUGF0aCA9PT0gJ2NyZWF0ZWQuaW5GbGlnaHQnKSB7Ci0gICAgICAg
IGRvU29tZXRoaW5nKCk7Ci0gICAgICB9Ci0gICAgICBgYGAKLQotICAgICAgWW91IGNhbiBzYXk6
Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGlmIChyZWNvcmQuZ2V0KCdpc05ldycpICYm
IHJlY29yZC5nZXQoJ2lzU2F2aW5nJykpIHsKLSAgICAgICAgZG9Tb21ldGhpbmcoKTsKLSAgICAg
IH0KLSAgICAgIGBgYAotCi0gICAgICBJZiB5b3VyIHN0YXRlIGRvZXMgbm90IHNldCBhIHZhbHVl
IGZvciBhIGdpdmVuIGZsYWcsIHRoZSB2YWx1ZSB3aWxsCi0gICAgICBiZSBpbmhlcml0ZWQgZnJv
bSBpdHMgcGFyZW50IChvciB0aGUgZmlyc3QgcGxhY2UgaW4gdGhlIHN0YXRlIGhpZXJhcmNoeQot
ICAgICAgd2hlcmUgaXQgaXMgZGVmaW5lZCkuCi0KLSAgICAgIFRoZSBjdXJyZW50IHNldCBvZiBm
bGFncyBhcmUgZGVmaW5lZCBiZWxvdy4gSWYgeW91IHdhbnQgdG8gYWRkIGEgbmV3IGZsYWcsCi0g
ICAgICBpbiBhZGRpdGlvbiB0byB0aGUgYXJlYSBiZWxvdywgeW91IHdpbGwgYWxzbyBuZWVkIHRv
IGRlY2xhcmUgaXQgaW4gdGhlCi0gICAgICBgRFMuTW9kZWxgIGNsYXNzLgotCi0KLSAgICAgICAq
IFtpc0VtcHR5XShEUy5Nb2RlbC5odG1sI3Byb3BlcnR5X2lzRW1wdHkpCi0gICAgICAgKiBbaXNM
b2FkaW5nXShEUy5Nb2RlbC5odG1sI3Byb3BlcnR5X2lzTG9hZGluZykKLSAgICAgICAqIFtpc0xv
YWRlZF0oRFMuTW9kZWwuaHRtbCNwcm9wZXJ0eV9pc0xvYWRlZCkKLSAgICAgICAqIFtpc0RpcnR5
XShEUy5Nb2RlbC5odG1sI3Byb3BlcnR5X2lzRGlydHkpCi0gICAgICAgKiBbaXNTYXZpbmddKERT
Lk1vZGVsLmh0bWwjcHJvcGVydHlfaXNTYXZpbmcpCi0gICAgICAgKiBbaXNEZWxldGVkXShEUy5N
b2RlbC5odG1sI3Byb3BlcnR5X2lzRGVsZXRlZCkKLSAgICAgICAqIFtpc05ld10oRFMuTW9kZWwu
aHRtbCNwcm9wZXJ0eV9pc05ldykKLSAgICAgICAqIFtpc1ZhbGlkXShEUy5Nb2RlbC5odG1sI3By
b3BlcnR5X2lzVmFsaWQpCi0KLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBjbGFzcyBSb290
U3RhdGUKLSAgICAqLwotCi0gICAgZnVuY3Rpb24gaGFzRGVmaW5lZFByb3BlcnRpZXMob2JqZWN0
KSB7Ci0gICAgICAvLyBJZ25vcmUgaW50ZXJuYWwgcHJvcGVydHkgZGVmaW5lZCBieSBzaW11bGF0
ZWQgYEVtYmVyLmNyZWF0ZWAuCi0gICAgICB2YXIgbmFtZXMgPSBFbWJlci5rZXlzKG9iamVjdCk7
Ci0gICAgICB2YXIgaSwgbCwgbmFtZTsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSBuYW1lcy5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgIG5hbWUgPSBuYW1lc1tpXTsKLSAgICAgICAgaWYg
KG9iamVjdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBvYmplY3RbbmFtZV0pIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGRpZFNldFByb3BlcnR5KHJlY29yZCwgY29udGV4dCkgewotICAgICAgaWYgKGNvbnRleHQu
dmFsdWUgPT09IGNvbnRleHQub3JpZ2luYWxWYWx1ZSkgewotICAgICAgICBkZWxldGUgcmVjb3Jk
Ll9hdHRyaWJ1dGVzW2NvbnRleHQubmFtZV07Ci0gICAgICAgIHJlY29yZC5zZW5kKCdwcm9wZXJ0
eVdhc1Jlc2V0JywgY29udGV4dC5uYW1lKTsKLSAgICAgIH0gZWxzZSBpZiAoY29udGV4dC52YWx1
ZSAhPT0gY29udGV4dC5vbGRWYWx1ZSkgewotICAgICAgICByZWNvcmQuc2VuZCgnYmVjb21lRGly
dHknKTsKLSAgICAgIH0KLQotICAgICAgcmVjb3JkLnVwZGF0ZVJlY29yZEFycmF5c0xhdGVyKCk7
Ci0gICAgfQotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gbm90ZXM6Ci0gICAgLy8KLSAgICAvLyBF
YWNoIHN0YXRlIGhhcyBhIGJvb2xlYW4gdmFsdWUgZm9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGZs
YWdzOgotICAgIC8vCi0gICAgLy8gKiBpc0xvYWRlZDogVGhlIHJlY29yZCBoYXMgYSBwb3B1bGF0
ZWQgYGRhdGFgIHByb3BlcnR5LiBXaGVuIGEKLSAgICAvLyAgIHJlY29yZCBpcyBsb2FkZWQgdmlh
IGBzdG9yZS5maW5kYCwgYGlzTG9hZGVkYCBpcyBmYWxzZQotICAgIC8vICAgdW50aWwgdGhlIGFk
YXB0ZXIgc2V0cyBpdC4gV2hlbiBhIHJlY29yZCBpcyBjcmVhdGVkIGxvY2FsbHksCi0gICAgLy8g
ICBpdHMgYGlzTG9hZGVkYCBwcm9wZXJ0eSBpcyBhbHdheXMgdHJ1ZS4KLSAgICAvLyAqIGlzRGly
dHk6IFRoZSByZWNvcmQgaGFzIGxvY2FsIGNoYW5nZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgot
ICAgIC8vICAgc2F2ZWQgYnkgdGhlIGFkYXB0ZXIuIFRoaXMgaW5jbHVkZXMgcmVjb3JkcyB0aGF0
IGhhdmUgYmVlbgotICAgIC8vICAgY3JlYXRlZCAoYnV0IG5vdCB5ZXQgc2F2ZWQpIG9yIGRlbGV0
ZWQuCi0gICAgLy8gKiBpc1NhdmluZzogVGhlIHJlY29yZCBoYXMgYmVlbiBjb21taXR0ZWQsIGJ1
dAotICAgIC8vICAgdGhlIGFkYXB0ZXIgaGFzIG5vdCB5ZXQgYWNrbm93bGVkZ2VkIHRoYXQgdGhl
IGNoYW5nZXMgaGF2ZQotICAgIC8vICAgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIGJhY2tlbmQuCi0g
ICAgLy8gKiBpc0RlbGV0ZWQ6IFRoZSByZWNvcmQgd2FzIG1hcmtlZCBmb3IgZGVsZXRpb24uIFdo
ZW4gYGlzRGVsZXRlZGAKLSAgICAvLyAgIGlzIHRydWUgYW5kIGBpc0RpcnR5YCBpcyB0cnVlLCB0
aGUgcmVjb3JkIGlzIGRlbGV0ZWQgbG9jYWxseQotICAgIC8vICAgYnV0IHRoZSBkZWxldGlvbiB3
YXMgbm90IHlldCBwZXJzaXN0ZWQuIFdoZW4gYGlzU2F2aW5nYCBpcwotICAgIC8vICAgdHJ1ZSwg
dGhlIGNoYW5nZSBpcyBpbi1mbGlnaHQuIFdoZW4gYm90aCBgaXNEaXJ0eWAgYW5kCi0gICAgLy8g
ICBgaXNTYXZpbmdgIGFyZSBmYWxzZSwgdGhlIGNoYW5nZSBoYXMgcGVyc2lzdGVkLgotICAgIC8v
ICogaXNFcnJvcjogVGhlIGFkYXB0ZXIgcmVwb3J0ZWQgdGhhdCBpdCB3YXMgdW5hYmxlIHRvIHNh
dmUKLSAgICAvLyAgIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGJhY2tlbmQuIFRoaXMgbWF5IGFsc28g
cmVzdWx0IGluIHRoZQotICAgIC8vICAgcmVjb3JkIGhhdmluZyBpdHMgYGlzVmFsaWRgIHByb3Bl
cnR5IGJlY29tZSBmYWxzZSBpZiB0aGUKLSAgICAvLyAgIGFkYXB0ZXIgcmVwb3J0ZWQgdGhhdCBz
ZXJ2ZXItc2lkZSB2YWxpZGF0aW9ucyBmYWlsZWQuCi0gICAgLy8gKiBpc05ldzogVGhlIHJlY29y
ZCB3YXMgY3JlYXRlZCBvbiB0aGUgY2xpZW50IGFuZCB0aGUgYWRhcHRlcgotICAgIC8vICAgZGlk
IG5vdCB5ZXQgcmVwb3J0IHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZC4KLSAgICAvLyAq
IGlzVmFsaWQ6IFRoZSBhZGFwdGVyIGRpZCBub3QgcmVwb3J0IGFueSBzZXJ2ZXItc2lkZSB2YWxp
ZGF0aW9uCi0gICAgLy8gICBmYWlsdXJlcy4KLQotICAgIC8vIFRoZSBkaXJ0eSBzdGF0ZSBpcyBh
IGFic3RyYWN0IHN0YXRlIHdob3NlIGZ1bmN0aW9uYWxpdHkgaXMKLSAgICAvLyBzaGFyZWQgYmV0
d2VlbiB0aGUgYGNyZWF0ZWRgIGFuZCBgdXBkYXRlZGAgc3RhdGVzLgotICAgIC8vCi0gICAgLy8g
VGhlIGRlbGV0ZWQgc3RhdGUgc2hhcmVzIHRoZSBgaXNEaXJ0eWAgZmxhZyB3aXRoIHRoZQotICAg
IC8vIHN1YmNsYXNzZXMgb2YgYERpcnR5U3RhdGVgLCBidXQgd2l0aCBhIHZlcnkgZGlmZmVyZW50
Ci0gICAgLy8gaW1wbGVtZW50YXRpb24uCi0gICAgLy8KLSAgICAvLyBEaXJ0eSBzdGF0ZXMgaGF2
ZSB0aHJlZSBjaGlsZCBzdGF0ZXM6Ci0gICAgLy8KLSAgICAvLyBgdW5jb21taXR0ZWRgOiB0aGUg
c3RvcmUgaGFzIG5vdCB5ZXQgaGFuZGVkIG9mZiB0aGUgcmVjb3JkCi0gICAgLy8gICB0byBiZSBz
YXZlZC4KLSAgICAvLyBgaW5GbGlnaHRgOiB0aGUgc3RvcmUgaGFzIGhhbmRlZCBvZmYgdGhlIHJl
Y29yZCB0byBiZSBzYXZlZCwKLSAgICAvLyAgIGJ1dCB0aGUgYWRhcHRlciBoYXMgbm90IHlldCBh
Y2tub3dsZWRnZWQgc3VjY2Vzcy4KLSAgICAvLyBgaW52YWxpZGA6IHRoZSByZWNvcmQgaGFzIGlu
dmFsaWQgaW5mb3JtYXRpb24gYW5kIGNhbm5vdCBiZQotICAgIC8vICAgc2VuZCB0byB0aGUgYWRh
cHRlciB5ZXQuCi0gICAgdmFyIERpcnR5U3RhdGUgPSB7Ci0gICAgICBpbml0aWFsU3RhdGU6ICd1
bmNvbW1pdHRlZCcsCi0KLSAgICAgIC8vIEZMQUdTCi0gICAgICBpc0RpcnR5OiB0cnVlLAotCi0g
ICAgICAvLyBTVUJTVEFURVMKLQotICAgICAgLy8gV2hlbiBhIHJlY29yZCBmaXJzdCBiZWNvbWVz
IGRpcnR5LCBpdCBpcyBgdW5jb21taXR0ZWRgLgotICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRo
ZXJlIGFyZSBsb2NhbCBwZW5kaW5nIGNoYW5nZXMsIGJ1dCB0aGV5Ci0gICAgICAvLyBoYXZlIG5v
dCB5ZXQgYmVndW4gdG8gYmUgc2F2ZWQsIGFuZCBhcmUgbm90IGludmFsaWQuCi0gICAgICB1bmNv
bW1pdHRlZDogewotICAgICAgICAvLyBFVkVOVFMKLSAgICAgICAgZGlkU2V0UHJvcGVydHk6IGRp
ZFNldFByb3BlcnR5LAotCi0gICAgICAgIHByb3BlcnR5V2FzUmVzZXQ6IGZ1bmN0aW9uKHJlY29y
ZCwgbmFtZSkgewotICAgICAgICAgIHZhciBzdGlsbERpcnR5ID0gZmFsc2U7Ci0KLSAgICAgICAg
ICBmb3IgKHZhciBwcm9wIGluIHJlY29yZC5fYXR0cmlidXRlcykgewotICAgICAgICAgICAgc3Rp
bGxEaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAg
ICAgICBpZiAoIXN0aWxsRGlydHkpIHsgcmVjb3JkLnNlbmQoJ3JvbGxlZEJhY2snKTsgfQotICAg
ICAgICB9LAotCi0gICAgICAgIHB1c2hlZERhdGE6IEVtYmVyLkssCi0KLSAgICAgICAgYmVjb21l
RGlydHk6IEVtYmVyLkssCi0KLSAgICAgICAgd2lsbENvbW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnaW5GbGlnaHQnKTsKLSAgICAgICAgfSwK
LQotICAgICAgICByZWxvYWRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCwgcmVzb2x2ZSkgewotICAg
ICAgICAgIHJlc29sdmUoZ2V0KHJlY29yZCwgJ3N0b3JlJykucmVsb2FkUmVjb3JkKHJlY29yZCkp
OwotICAgICAgICB9LAotCi0gICAgICAgIHJvbGxlZEJhY2s6IGZ1bmN0aW9uKHJlY29yZCkgewot
ICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2xvYWRlZC5zYXZlZCcpOwotICAgICAgICB9
LAotCi0gICAgICAgIGJlY2FtZUludmFsaWQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAg
IHJlY29yZC50cmFuc2l0aW9uVG8oJ2ludmFsaWQnKTsKLSAgICAgICAgfSwKLQotICAgICAgICBy
b2xsYmFjazogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnJvbGxiYWNrKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8vIE9uY2UgYSByZWNvcmQgaGFzIGJlZW4g
aGFuZGVkIG9mZiB0byB0aGUgYWRhcHRlciB0byBiZQotICAgICAgLy8gc2F2ZWQsIGl0IGlzIGlu
IHRoZSAnaW4gZmxpZ2h0JyBzdGF0ZS4gQ2hhbmdlcyB0byB0aGUKLSAgICAgIC8vIHJlY29yZCBj
YW5ub3QgYmUgbWFkZSBkdXJpbmcgdGhpcyB3aW5kb3cuCi0gICAgICBpbkZsaWdodDogewotICAg
ICAgICAvLyBGTEFHUwotICAgICAgICBpc1NhdmluZzogdHJ1ZSwKLQotICAgICAgICAvLyBFVkVO
VFMKLSAgICAgICAgZGlkU2V0UHJvcGVydHk6IGRpZFNldFByb3BlcnR5LAotICAgICAgICBiZWNv
bWVEaXJ0eTogRW1iZXIuSywKLSAgICAgICAgcHVzaGVkRGF0YTogRW1iZXIuSywKLQotICAgICAg
ICB1bmxvYWRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgiWW91IGNhbiBvbmx5IHVubG9hZCBhIHJlY29yZCB3aGljaCBpcyBub3QgaW5GbGlnaHQuIGAi
ICsgRW1iZXIuaW5zcGVjdChyZWNvcmQpICsgIiBgIiwgZmFsc2UpOwotICAgICAgICB9LAotCi0g
ICAgICAgIC8vIFRPRE86IE1vcmUgcm9idXN0IHNlbWFudGljcyBhcm91bmQgc2F2ZS13aGlsZS1p
bi1mbGlnaHQKLSAgICAgICAgd2lsbENvbW1pdDogRW1iZXIuSywKLQotICAgICAgICBkaWRDb21t
aXQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHZhciBkaXJ0eVR5cGUgPSBnZXQodGhp
cywgJ2RpcnR5VHlwZScpOwotCi0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25Ubygnc2F2ZWQn
KTsKLSAgICAgICAgICByZWNvcmQuc2VuZCgnaW52b2tlTGlmZWN5Y2xlQ2FsbGJhY2tzJywgZGly
dHlUeXBlKTsKLSAgICAgICAgfSwKLQotICAgICAgICBiZWNhbWVJbnZhbGlkOiBmdW5jdGlvbihy
ZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCdpbnZhbGlkJyk7Ci0gICAg
ICAgICAgcmVjb3JkLnNlbmQoJ2ludm9rZUxpZmVjeWNsZUNhbGxiYWNrcycpOwotICAgICAgICB9
LAotCi0gICAgICAgIGJlY2FtZUVycm9yOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICBy
ZWNvcmQudHJhbnNpdGlvblRvKCd1bmNvbW1pdHRlZCcpOwotICAgICAgICAgIHJlY29yZC50cmln
Z2VyTGF0ZXIoJ2JlY2FtZUVycm9yJywgcmVjb3JkKTsKLSAgICAgICAgfQotICAgICAgfSwKLQot
ICAgICAgLy8gQSByZWNvcmQgaXMgaW4gdGhlIGBpbnZhbGlkYCBpZiB0aGUgYWRhcHRlciBoYXMg
aW5kaWNhdGVkCi0gICAgICAvLyB0aGUgdGhlIHJlY29yZCBmYWlsZWQgc2VydmVyLXNpZGUgaW52
YWxpZGF0aW9ucy4KLSAgICAgIGludmFsaWQ6IHsKLSAgICAgICAgLy8gRkxBR1MKLSAgICAgICAg
aXNWYWxpZDogZmFsc2UsCi0KLSAgICAgICAgLy8gRVZFTlRTCi0gICAgICAgIGRlbGV0ZVJlY29y
ZDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnZGVs
ZXRlZC51bmNvbW1pdHRlZCcpOwotICAgICAgICAgIHJlY29yZC5jbGVhclJlbGF0aW9uc2hpcHMo
KTsKLSAgICAgICAgfSwKLQotICAgICAgICBkaWRTZXRQcm9wZXJ0eTogZnVuY3Rpb24ocmVjb3Jk
LCBjb250ZXh0KSB7Ci0gICAgICAgICAgZ2V0KHJlY29yZCwgJ2Vycm9ycycpLnJlbW92ZShjb250
ZXh0Lm5hbWUpOwotCi0gICAgICAgICAgZGlkU2V0UHJvcGVydHkocmVjb3JkLCBjb250ZXh0KTsK
LSAgICAgICAgfSwKLQotICAgICAgICBiZWNvbWVEaXJ0eTogRW1iZXIuSywKLQotICAgICAgICB3
aWxsQ29tbWl0OiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICBnZXQocmVjb3JkLCAnZXJy
b3JzJykuY2xlYXIoKTsKLSAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCdpbkZsaWdodCcp
OwotICAgICAgICB9LAotCi0gICAgICAgIHJvbGxlZEJhY2s6IGZ1bmN0aW9uKHJlY29yZCkgewot
ICAgICAgICAgIGdldChyZWNvcmQsICdlcnJvcnMnKS5jbGVhcigpOwotICAgICAgICB9LAotCi0g
ICAgICAgIGJlY2FtZVZhbGlkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQu
dHJhbnNpdGlvblRvKCd1bmNvbW1pdHRlZCcpOwotICAgICAgICB9LAotCi0gICAgICAgIGludm9r
ZUxpZmVjeWNsZUNhbGxiYWNrczogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3Jk
LnRyaWdnZXJMYXRlcignYmVjYW1lSW52YWxpZCcsIHJlY29yZCk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgZXhpdDogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLl9pbkZsaWdo
dEF0dHJpYnV0ZXMgPSB7fTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBU
aGUgY3JlYXRlZCBhbmQgdXBkYXRlZCBzdGF0ZXMgYXJlIGNyZWF0ZWQgb3V0c2lkZSB0aGUgc3Rh
dGUKLSAgICAvLyBjaGFydCBzbyB3ZSBjYW4gcmVvcGVuIHRoZWlyIHN1YnN0YXRlcyBhbmQgYWRk
IG1peGlucyBhcwotICAgIC8vIG5lY2Vzc2FyeS4KLQotICAgIGZ1bmN0aW9uIGRlZXBDbG9uZShv
YmplY3QpIHsKLSAgICAgIHZhciBjbG9uZSA9IHt9LCB2YWx1ZTsKLQotICAgICAgZm9yICh2YXIg
cHJvcCBpbiBvYmplY3QpIHsKLSAgICAgICAgdmFsdWUgPSBvYmplY3RbcHJvcF07Ci0gICAgICAg
IGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgY2xv
bmVbcHJvcF0gPSBkZWVwQ2xvbmUodmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGNsb25lW3Byb3BdID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IGNsb25lOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1peGluKG9yaWdpbmFsLCBoYXNoKSB7Ci0g
ICAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKLSAgICAgICAgb3JpZ2luYWxbcHJvcF0gPSBo
YXNoW3Byb3BdOwotICAgICAgfQotCi0gICAgICByZXR1cm4gb3JpZ2luYWw7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gZGlydHlTdGF0ZShvcHRpb25zKSB7Ci0gICAgICB2YXIgbmV3U3RhdGUgPSBk
ZWVwQ2xvbmUoRGlydHlTdGF0ZSk7Ci0gICAgICByZXR1cm4gbWl4aW4obmV3U3RhdGUsIG9wdGlv
bnMpOwotICAgIH0KLQotICAgIHZhciBjcmVhdGVkU3RhdGUgPSBkaXJ0eVN0YXRlKHsKLSAgICAg
IGRpcnR5VHlwZTogJ2NyZWF0ZWQnLAotICAgICAgLy8gRkxBR1MKLSAgICAgIGlzTmV3OiB0cnVl
Ci0gICAgfSk7Ci0KLSAgICBjcmVhdGVkU3RhdGUudW5jb21taXR0ZWQucm9sbGVkQmFjayA9IGZ1
bmN0aW9uKHJlY29yZCkgewotICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnZGVsZXRlZC5zYXZl
ZCcpOwotICAgIH07Ci0KLSAgICB2YXIgdXBkYXRlZFN0YXRlID0gZGlydHlTdGF0ZSh7Ci0gICAg
ICBkaXJ0eVR5cGU6ICd1cGRhdGVkJwotICAgIH0pOwotCi0gICAgY3JlYXRlZFN0YXRlLnVuY29t
bWl0dGVkLmRlbGV0ZVJlY29yZCA9IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgcmVjb3JkLmNs
ZWFyUmVsYXRpb25zaGlwcygpOwotICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnZGVsZXRlZC5z
YXZlZCcpOwotICAgIH07Ci0KLSAgICBjcmVhdGVkU3RhdGUudW5jb21taXR0ZWQucm9sbGJhY2sg
PSBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgIERpcnR5U3RhdGUudW5jb21taXR0ZWQucm9sbGJh
Y2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2Rl
bGV0ZWQuc2F2ZWQnKTsKLSAgICB9OwotCi0gICAgY3JlYXRlZFN0YXRlLnVuY29tbWl0dGVkLnBy
b3BlcnR5V2FzUmVzZXQgPSBFbWJlci5LOwotCi0gICAgZnVuY3Rpb24gYXNzZXJ0QWdhaW5zdFVu
bG9hZFJlY29yZChyZWNvcmQpIHsKLSAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbiBvbmx5IHVu
bG9hZCBhIHJlY29yZCB3aGljaCBpcyBub3QgaW5GbGlnaHQuIGAiICsgRW1iZXIuaW5zcGVjdChy
ZWNvcmQpICsgImAiLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgdXBkYXRlZFN0YXRlLmluRmxpZ2h0
LnVubG9hZFJlY29yZCA9IGFzc2VydEFnYWluc3RVbmxvYWRSZWNvcmQ7Ci0KLSAgICB1cGRhdGVk
U3RhdGUudW5jb21taXR0ZWQuZGVsZXRlUmVjb3JkID0gZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAg
ICByZWNvcmQudHJhbnNpdGlvblRvKCdkZWxldGVkLnVuY29tbWl0dGVkJyk7Ci0gICAgICByZWNv
cmQuY2xlYXJSZWxhdGlvbnNoaXBzKCk7Ci0gICAgfTsKLQotICAgIHZhciBSb290U3RhdGUgPSB7
Ci0gICAgICAvLyBGTEFHUwotICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICBpc0xvYWRpbmc6
IGZhbHNlLAotICAgICAgaXNMb2FkZWQ6IGZhbHNlLAotICAgICAgaXNEaXJ0eTogZmFsc2UsCi0g
ICAgICBpc1NhdmluZzogZmFsc2UsCi0gICAgICBpc0RlbGV0ZWQ6IGZhbHNlLAotICAgICAgaXNO
ZXc6IGZhbHNlLAotICAgICAgaXNWYWxpZDogdHJ1ZSwKLQotICAgICAgLy8gREVGQVVMVCBFVkVO
VFMKLQotICAgICAgLy8gVHJ5aW5nIHRvIHJvbGwgYmFjayBpZiB5b3UncmUgbm90IGluIHRoZSBk
aXJ0eSBzdGF0ZQotICAgICAgLy8gZG9lc24ndCBjaGFuZ2UgeW91ciBzdGF0ZS4gRm9yIGV4YW1w
bGUsIGlmIHlvdSdyZSBpbiB0aGUKLSAgICAgIC8vIGluLWZsaWdodCBzdGF0ZSwgcm9sbGluZyBi
YWNrIHRoZSByZWNvcmQgZG9lc24ndCBtb3ZlCi0gICAgICAvLyB5b3Ugb3V0IG9mIHRoZSBpbi1m
bGlnaHQgc3RhdGUuCi0gICAgICByb2xsZWRCYWNrOiBFbWJlci5LLAotICAgICAgdW5sb2FkUmVj
b3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgLy8gY2xlYXIgcmVsYXRpb25zaGlwcyBi
ZWZvcmUgbW92aW5nIHRvIGRlbGV0ZWQgc3RhdGUKLSAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IGZh
aWxzCi0gICAgICAgIHJlY29yZC5jbGVhclJlbGF0aW9uc2hpcHMoKTsKLSAgICAgICAgcmVjb3Jk
LnRyYW5zaXRpb25UbygnZGVsZXRlZC5zYXZlZCcpOwotICAgICAgfSwKLQotCi0gICAgICBwcm9w
ZXJ0eVdhc1Jlc2V0OiBFbWJlci5LLAotCi0gICAgICAvLyBTVUJTVEFURVMKLQotICAgICAgLy8g
QSByZWNvcmQgYmVnaW5zIGl0cyBsaWZlY3ljbGUgaW4gdGhlIGBlbXB0eWAgc3RhdGUuCi0gICAg
ICAvLyBJZiBpdHMgZGF0YSB3aWxsIGNvbWUgZnJvbSB0aGUgYWRhcHRlciwgaXQgd2lsbAotICAg
ICAgLy8gdHJhbnNpdGlvbiBpbnRvIHRoZSBgbG9hZGluZ2Agc3RhdGUuIE90aGVyd2lzZSwgaWYK
LSAgICAgIC8vIHRoZSByZWNvcmQgaXMgYmVpbmcgY3JlYXRlZCBvbiB0aGUgY2xpZW50LCBpdCB3
aWxsCi0gICAgICAvLyB0cmFuc2l0aW9uIGludG8gdGhlIGBjcmVhdGVkYCBzdGF0ZS4KLSAgICAg
IGVtcHR5OiB7Ci0gICAgICAgIGlzRW1wdHk6IHRydWUsCi0KLSAgICAgICAgLy8gRVZFTlRTCi0g
ICAgICAgIGxvYWRpbmdEYXRhOiBmdW5jdGlvbihyZWNvcmQsIHByb21pc2UpIHsKLSAgICAgICAg
ICByZWNvcmQuX2xvYWRpbmdQcm9taXNlID0gcHJvbWlzZTsKLSAgICAgICAgICByZWNvcmQudHJh
bnNpdGlvblRvKCdsb2FkaW5nJyk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbG9hZGVkRGF0YTog
ZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGVk
LmNyZWF0ZWQudW5jb21taXR0ZWQnKTsKLQotICAgICAgICAgIHJlY29yZC5zdXNwZW5kUmVsYXRp
b25zaGlwT2JzZXJ2ZXJzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmVjb3JkLm5vdGlmeVBy
b3BlcnR5Q2hhbmdlKCdkYXRhJyk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgcHVzaGVkRGF0YTogZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5z
aXRpb25UbygnbG9hZGVkLnNhdmVkJyk7Ci0gICAgICAgICAgcmVjb3JkLnRyaWdnZXJMYXRlcign
ZGlkTG9hZCcpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvLyBBIHJlY29yZCBlbnRl
cnMgdGhpcyBzdGF0ZSB3aGVuIHRoZSBzdG9yZSBhc2tzCi0gICAgICAvLyB0aGUgYWRhcHRlciBm
b3IgaXRzIGRhdGEuIEl0IHJlbWFpbnMgaW4gdGhpcyBzdGF0ZQotICAgICAgLy8gdW50aWwgdGhl
IGFkYXB0ZXIgcHJvdmlkZXMgdGhlIHJlcXVlc3RlZCBkYXRhLgotICAgICAgLy8KLSAgICAgIC8v
IFVzdWFsbHksIHRoaXMgcHJvY2VzcyBpcyBhc3luY2hyb25vdXMsIHVzaW5nIGFuCi0gICAgICAv
LyBYSFIgdG8gcmV0cmlldmUgdGhlIGRhdGEuCi0gICAgICBsb2FkaW5nOiB7Ci0gICAgICAgIC8v
IEZMQUdTCi0gICAgICAgIGlzTG9hZGluZzogdHJ1ZSwKLQotICAgICAgICBleGl0OiBmdW5jdGlv
bihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQuX2xvYWRpbmdQcm9taXNlID0gbnVsbDsKLSAg
ICAgICAgfSwKLQotICAgICAgICAvLyBFVkVOVFMKLSAgICAgICAgcHVzaGVkRGF0YTogZnVuY3Rp
b24ocmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGVkLnNhdmVk
Jyk7Ci0gICAgICAgICAgcmVjb3JkLnRyaWdnZXJMYXRlcignZGlkTG9hZCcpOwotICAgICAgICAg
IHNldChyZWNvcmQsICdpc0Vycm9yJywgZmFsc2UpOwotICAgICAgICB9LAotCi0gICAgICAgIGJl
Y2FtZUVycm9yOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmQudHJpZ2dlckxh
dGVyKCdiZWNhbWVFcnJvcicsIHJlY29yZCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbm90Rm91
bmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ2Vt
cHR5Jyk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8vIEEgcmVjb3JkIGVudGVycyB0
aGlzIHN0YXRlIHdoZW4gaXRzIGRhdGEgaXMgcG9wdWxhdGVkLgotICAgICAgLy8gTW9zdCBvZiBh
IHJlY29yZCdzIGxpZmVjeWNsZSBpcyBzcGVudCBpbnNpZGUgc3Vic3RhdGVzCi0gICAgICAvLyBv
ZiB0aGUgYGxvYWRlZGAgc3RhdGUuCi0gICAgICBsb2FkZWQ6IHsKLSAgICAgICAgaW5pdGlhbFN0
YXRlOiAnc2F2ZWQnLAotCi0gICAgICAgIC8vIEZMQUdTCi0gICAgICAgIGlzTG9hZGVkOiB0cnVl
LAotCi0gICAgICAgIC8vIFNVQlNUQVRFUwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBs
b2NhbCBjaGFuZ2VzIHRvIGEgcmVjb3JkLCBpdCByZW1haW5zCi0gICAgICAgIC8vIGluIHRoZSBg
c2F2ZWRgIHN0YXRlLgotICAgICAgICBzYXZlZDogewotICAgICAgICAgIHNldHVwOiBmdW5jdGlv
bihyZWNvcmQpIHsKLSAgICAgICAgICAgIHZhciBhdHRycyA9IHJlY29yZC5fYXR0cmlidXRlcywK
LSAgICAgICAgICAgICAgICBpc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAodmFy
IHByb3AgaW4gYXR0cnMpIHsKLSAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5
KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgaXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGlzRGlydHkpIHsKLSAgICAgICAgICAgICAgcmVjb3JkLmFkYXB0ZXJEaWREaXJ0eSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0sCi0KLSAgICAgICAgICAvLyBFVkVOVFMKLSAgICAg
ICAgICBkaWRTZXRQcm9wZXJ0eTogZGlkU2V0UHJvcGVydHksCi0KLSAgICAgICAgICBwdXNoZWRE
YXRhOiBFbWJlci5LLAotCi0gICAgICAgICAgYmVjb21lRGlydHk6IGZ1bmN0aW9uKHJlY29yZCkg
ewotICAgICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygndXBkYXRlZC51bmNvbW1pdHRlZCcp
OwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICB3aWxsQ29tbWl0OiBmdW5jdGlvbihyZWNvcmQp
IHsKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2l0aW9uVG8oJ3VwZGF0ZWQuaW5GbGlnaHQnKTsK
LSAgICAgICAgICB9LAotCi0gICAgICAgICAgcmVsb2FkUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQs
IHJlc29sdmUpIHsKLSAgICAgICAgICAgIHJlc29sdmUoZ2V0KHJlY29yZCwgJ3N0b3JlJykucmVs
b2FkUmVjb3JkKHJlY29yZCkpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBkZWxldGVSZWNv
cmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25Ubygn
ZGVsZXRlZC51bmNvbW1pdHRlZCcpOwotICAgICAgICAgICAgcmVjb3JkLmNsZWFyUmVsYXRpb25z
aGlwcygpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICB1bmxvYWRSZWNvcmQ6IGZ1bmN0aW9u
KHJlY29yZCkgewotICAgICAgICAgICAgLy8gY2xlYXIgcmVsYXRpb25zaGlwcyBiZWZvcmUgbW92
aW5nIHRvIGRlbGV0ZWQgc3RhdGUKLSAgICAgICAgICAgIC8vIG90aGVyd2lzZSBpdCBmYWlscwot
ICAgICAgICAgICAgcmVjb3JkLmNsZWFyUmVsYXRpb25zaGlwcygpOwotICAgICAgICAgICAgcmVj
b3JkLnRyYW5zaXRpb25UbygnZGVsZXRlZC5zYXZlZCcpOwotICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICBkaWRDb21taXQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgcmVjb3JkLnNl
bmQoJ2ludm9rZUxpZmVjeWNsZUNhbGxiYWNrcycsIGdldChyZWNvcmQsICdsYXN0RGlydHlUeXBl
JykpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICAvLyBsb2FkZWQuc2F2ZWQubm90Rm91bmQg
d291bGQgYmUgdHJpZ2dlcmVkIGJ5IGEgZmFpbGVkCi0gICAgICAgICAgLy8gYHJlbG9hZCgpYCBv
biBhbiB1bmNoYW5nZWQgcmVjb3JkCi0gICAgICAgICAgbm90Rm91bmQ6IEVtYmVyLksKLQotICAg
ICAgICB9LAotCi0gICAgICAgIC8vIEEgcmVjb3JkIGlzIGluIHRoaXMgc3RhdGUgYWZ0ZXIgaXQg
aGFzIGJlZW4gbG9jYWxseQotICAgICAgICAvLyBjcmVhdGVkIGJ1dCBiZWZvcmUgdGhlIGFkYXB0
ZXIgaGFzIGluZGljYXRlZCB0aGF0Ci0gICAgICAgIC8vIGl0IGhhcyBiZWVuIHNhdmVkLgotICAg
ICAgICBjcmVhdGVkOiBjcmVhdGVkU3RhdGUsCi0KLSAgICAgICAgLy8gQSByZWNvcmQgaXMgaW4g
dGhpcyBzdGF0ZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuCi0gICAgICAgIC8vIHNhdmVkIHRvIHRo
ZSBzZXJ2ZXIsIGJ1dCB0aGVyZSBhcmUgbmV3IGxvY2FsIGNoYW5nZXMKLSAgICAgICAgLy8gdGhh
dCBoYXZlIG5vdCB5ZXQgYmVlbiBzYXZlZC4KLSAgICAgICAgdXBkYXRlZDogdXBkYXRlZFN0YXRl
Ci0gICAgICB9LAotCi0gICAgICAvLyBBIHJlY29yZCBpcyBpbiB0aGlzIHN0YXRlIGlmIGl0IHdh
cyBkZWxldGVkIGZyb20gdGhlIHN0b3JlLgotICAgICAgZGVsZXRlZDogewotICAgICAgICBpbml0
aWFsU3RhdGU6ICd1bmNvbW1pdHRlZCcsCi0gICAgICAgIGRpcnR5VHlwZTogJ2RlbGV0ZWQnLAot
Ci0gICAgICAgIC8vIEZMQUdTCi0gICAgICAgIGlzRGVsZXRlZDogdHJ1ZSwKLSAgICAgICAgaXNM
b2FkZWQ6IHRydWUsCi0gICAgICAgIGlzRGlydHk6IHRydWUsCi0KLSAgICAgICAgLy8gVFJBTlNJ
VElPTlMKLSAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHJlY29y
ZC51cGRhdGVSZWNvcmRBcnJheXMoKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBTVUJTVEFU
RVMKLQotICAgICAgICAvLyBXaGVuIGEgcmVjb3JkIGlzIGRlbGV0ZWQsIGl0IGVudGVycyB0aGUg
YHN0YXJ0YAotICAgICAgICAvLyBzdGF0ZS4gSXQgd2lsbCBleGl0IHRoaXMgc3RhdGUgd2hlbiB0
aGUgcmVjb3JkCi0gICAgICAgIC8vIHN0YXJ0cyB0byBjb21taXQuCi0gICAgICAgIHVuY29tbWl0
dGVkOiB7Ci0KLSAgICAgICAgICAvLyBFVkVOVFMKLQotICAgICAgICAgIHdpbGxDb21taXQ6IGZ1
bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnaW5GbGln
aHQnKTsKLSAgICAgICAgICB9LAotCi0gICAgICAgICAgcm9sbGJhY2s6IGZ1bmN0aW9uKHJlY29y
ZCkgewotICAgICAgICAgICAgcmVjb3JkLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgfSwKLQotICAg
ICAgICAgIGJlY29tZURpcnR5OiBFbWJlci5LLAotICAgICAgICAgIGRlbGV0ZVJlY29yZDogRW1i
ZXIuSywKLQotICAgICAgICAgIHJvbGxlZEJhY2s6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAg
ICAgICAgcmVjb3JkLnRyYW5zaXRpb25UbygnbG9hZGVkLnNhdmVkJyk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9LAotCi0gICAgICAgIC8vIEFmdGVyIGEgcmVjb3JkIHN0YXJ0cyBjb21taXR0aW5n
LCBidXQKLSAgICAgICAgLy8gYmVmb3JlIHRoZSBhZGFwdGVyIGluZGljYXRlcyB0aGF0IHRoZSBk
ZWxldGlvbgotICAgICAgICAvLyBoYXMgc2F2ZWQgdG8gdGhlIHNlcnZlciwgYSByZWNvcmQgaXMg
aW4gdGhlCi0gICAgICAgIC8vIGBpbkZsaWdodGAgc3Vic3RhdGUgb2YgYGRlbGV0ZWRgLgotICAg
ICAgICBpbkZsaWdodDogewotICAgICAgICAgIC8vIEZMQUdTCi0gICAgICAgICAgaXNTYXZpbmc6
IHRydWUsCi0KLSAgICAgICAgICAvLyBFVkVOVFMKLQotICAgICAgICAgIHVubG9hZFJlY29yZDog
YXNzZXJ0QWdhaW5zdFVubG9hZFJlY29yZCwKLQotICAgICAgICAgIC8vIFRPRE86IE1vcmUgcm9i
dXN0IHNlbWFudGljcyBhcm91bmQgc2F2ZS13aGlsZS1pbi1mbGlnaHQKLSAgICAgICAgICB3aWxs
Q29tbWl0OiBFbWJlci5LLAotICAgICAgICAgIGRpZENvbW1pdDogZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgICAgICByZWNvcmQudHJhbnNpdGlvblRvKCdzYXZlZCcpOwotCi0gICAgICAgICAg
ICByZWNvcmQuc2VuZCgnaW52b2tlTGlmZWN5Y2xlQ2FsbGJhY2tzJyk7Ci0gICAgICAgICAgfSwK
LQotICAgICAgICAgIGJlY2FtZUVycm9yOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAg
IHJlY29yZC50cmFuc2l0aW9uVG8oJ3VuY29tbWl0dGVkJyk7Ci0gICAgICAgICAgICByZWNvcmQu
dHJpZ2dlckxhdGVyKCdiZWNhbWVFcnJvcicsIHJlY29yZCk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9LAotCi0gICAgICAgIC8vIE9uY2UgdGhlIGFkYXB0ZXIgaW5kaWNhdGVzIHRoYXQgdGhlIGRl
bGV0aW9uIGhhcwotICAgICAgICAvLyBiZWVuIHNhdmVkLCB0aGUgcmVjb3JkIGVudGVycyB0aGUg
YHNhdmVkYCBzdWJzdGF0ZQotICAgICAgICAvLyBvZiBgZGVsZXRlZGAuCi0gICAgICAgIHNhdmVk
OiB7Ci0gICAgICAgICAgLy8gRkxBR1MKLSAgICAgICAgICBpc0RpcnR5OiBmYWxzZSwKLQotICAg
ICAgICAgIHNldHVwOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgIHZhciBzdG9yZSA9
IGdldChyZWNvcmQsICdzdG9yZScpOwotICAgICAgICAgICAgc3RvcmUuZGVtYXRlcmlhbGl6ZVJl
Y29yZChyZWNvcmQpOwotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBpbnZva2VMaWZlY3ljbGVD
YWxsYmFja3M6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAgcmVjb3JkLnRyaWdnZXJM
YXRlcignZGlkRGVsZXRlJywgcmVjb3JkKTsKLSAgICAgICAgICAgIHJlY29yZC50cmlnZ2VyTGF0
ZXIoJ2RpZENvbW1pdCcsIHJlY29yZCk7Ci0gICAgICAgICAgfSwKLQotICAgICAgICAgIHdpbGxD
b21taXQ6IEVtYmVyLkssCi0KLSAgICAgICAgICBkaWRDb21taXQ6IEVtYmVyLksKLSAgICAgICAg
fQotICAgICAgfSwKLQotICAgICAgaW52b2tlTGlmZWN5Y2xlQ2FsbGJhY2tzOiBmdW5jdGlvbihy
ZWNvcmQsIGRpcnR5VHlwZSkgewotICAgICAgICBpZiAoZGlydHlUeXBlID09PSAnY3JlYXRlZCcp
IHsKLSAgICAgICAgICByZWNvcmQudHJpZ2dlckxhdGVyKCdkaWRDcmVhdGUnLCByZWNvcmQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlY29yZC50cmlnZ2VyTGF0ZXIoJ2RpZFVwZGF0
ZScsIHJlY29yZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWNvcmQudHJpZ2dlckxhdGVyKCdk
aWRDb21taXQnLCByZWNvcmQpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBmdW5jdGlvbiB3aXJl
U3RhdGUob2JqZWN0LCBwYXJlbnQsIG5hbWUpIHsKLSAgICAgIC8qanNoaW50IHByb3RvOnRydWUq
LwotICAgICAgLy8gVE9ETzogVXNlIE9iamVjdC5jcmVhdGUgYW5kIGNvcHkgaW5zdGVhZAotICAg
ICAgb2JqZWN0ID0gbWl4aW4ocGFyZW50ID8gRW1iZXIuY3JlYXRlKHBhcmVudCkgOiB7fSwgb2Jq
ZWN0KTsKLSAgICAgIG9iamVjdC5wYXJlbnRTdGF0ZSA9IHBhcmVudDsKLSAgICAgIG9iamVjdC5z
dGF0ZU5hbWUgPSBuYW1lOwotCi0gICAgICBmb3IgKHZhciBwcm9wIGluIG9iamVjdCkgewotICAg
ICAgICBpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBwcm9wID09PSAncGFyZW50
U3RhdGUnIHx8IHByb3AgPT09ICdzdGF0ZU5hbWUnKSB7IGNvbnRpbnVlOyB9Ci0gICAgICAgIGlm
ICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSAnb2JqZWN0JykgewotICAgICAgICAgIG9iamVjdFtw
cm9wXSA9IHdpcmVTdGF0ZShvYmplY3RbcHJvcF0sIG9iamVjdCwgbmFtZSArICIuIiArIHByb3Ap
OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotCi0g
ICAgUm9vdFN0YXRlID0gd2lyZVN0YXRlKFJvb3RTdGF0ZSwgbnVsbCwgInJvb3QiKTsKLQotICAg
IF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBSb290U3RhdGU7Ci0gIH0pOwotZGVmaW5lKCJlbWJl
ci1kYXRhL2xpYi9zeXN0ZW0vcmVjb3JkX2FycmF5X21hbmFnZXIiLCAKLSAgWyIuL3JlY29yZF9h
cnJheXMiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRz
X18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRh
dGEKLSAgICAqLwotCi0gICAgdmFyIFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5MV9fLlJlY29y
ZEFycmF5OwotICAgIHZhciBGaWx0ZXJlZFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5MV9fLkZp
bHRlcmVkUmVjb3JkQXJyYXk7Ci0gICAgdmFyIEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheSA9
IF9fZGVwZW5kZW5jeTFfXy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXk7Ci0gICAgdmFyIE1h
bnlBcnJheSA9IF9fZGVwZW5kZW5jeTFfXy5NYW55QXJyYXk7Ci0gICAgdmFyIGdldCA9IEVtYmVy
LmdldCwgc2V0ID0gRW1iZXIuc2V0OwotICAgIHZhciBmb3JFYWNoID0gRW1iZXIuRW51bWVyYWJs
ZVV0aWxzLmZvckVhY2g7Ci0KLSAgICAvKioKLSAgICAgIEBjbGFzcyBSZWNvcmRBcnJheU1hbmFn
ZXIKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBwcml2YXRlCi0gICAgICBAZXh0ZW5kcyBF
bWJlci5PYmplY3QKLSAgICAqLwotICAgIHZhciBSZWNvcmRBcnJheU1hbmFnZXIgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmZp
bHRlcmVkUmVjb3JkQXJyYXlzID0gRW1iZXIuTWFwV2l0aERlZmF1bHQuY3JlYXRlKHsKLSAgICAg
ICAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgdGhpcy5jaGFuZ2VkUmVjb3JkcyA9IFtdOwotICAgICAgICB0aGlzLl9hZGFw
dGVyUG9wdWxhdGVkUmVjb3JkQXJyYXlzID0gW107Ci0gICAgICB9LAotCi0gICAgICByZWNvcmRE
aWRDaGFuZ2U6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICBpZiAodGhpcy5jaGFuZ2VkUmVj
b3Jkcy5wdXNoKHJlY29yZCkgIT09IDEpIHsgcmV0dXJuOyB9Ci0KLSAgICAgICAgRW1iZXIucnVu
LnNjaGVkdWxlKCdhY3Rpb25zJywgdGhpcywgdGhpcy51cGRhdGVSZWNvcmRBcnJheXMpOwotICAg
ICAgfSwKLQotICAgICAgcmVjb3JkQXJyYXlzRm9yUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsK
LSAgICAgICAgcmVjb3JkLl9yZWNvcmRBcnJheXMgPSByZWNvcmQuX3JlY29yZEFycmF5cyB8fCBF
bWJlci5PcmRlcmVkU2V0LmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4gcmVjb3JkLl9yZWNvcmRB
cnJheXM7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBtZXRob2QgaXMgaW52
b2tlZCB3aGVuZXZlciBkYXRhIGlzIGxvYWRlZCBpbnRvIHRoZSBzdG9yZSBieSB0aGUKLSAgICAg
ICAgYWRhcHRlciBvciB1cGRhdGVkIGJ5IHRoZSBhZGFwdGVyLCBvciB3aGVuIGEgcmVjb3JkIGhh
cyBjaGFuZ2VkLgotCi0gICAgICAgIEl0IHVwZGF0ZXMgYWxsIHJlY29yZCBhcnJheXMgdGhhdCBh
IHJlY29yZCBiZWxvbmdzIHRvLgotCi0gICAgICAgIFRvIGF2b2lkIHRocmFzaGluZywgaXQgb25s
eSBydW5zIGF0IG1vc3Qgb25jZSBwZXIgcnVuIGxvb3AuCi0KLSAgICAgICAgQG1ldGhvZCB1cGRh
dGVSZWNvcmRBcnJheXMKLSAgICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZQotICAgICAgICBAcGFy
YW0ge051bWJlcnxTdHJpbmd9IGNsaWVudElkCi0gICAgICAqLwotICAgICAgdXBkYXRlUmVjb3Jk
QXJyYXlzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgZm9yRWFjaCh0aGlzLmNoYW5nZWRSZWNvcmRz
LCBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICBpZiAoZ2V0KHJlY29yZCwgJ2lzRGVsZXRl
ZCcpKSB7Ci0gICAgICAgICAgICB0aGlzLl9yZWNvcmRXYXNEZWxldGVkKHJlY29yZCk7Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuX3JlY29yZFdhc0NoYW5nZWQocmVjb3Jk
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgIHRoaXMuY2hhbmdl
ZFJlY29yZHMubGVuZ3RoID0gMDsKLSAgICAgIH0sCi0KLSAgICAgIF9yZWNvcmRXYXNEZWxldGVk
OiBmdW5jdGlvbiAocmVjb3JkKSB7Ci0gICAgICAgIHZhciByZWNvcmRBcnJheXMgPSByZWNvcmQu
X3JlY29yZEFycmF5czsKLQotICAgICAgICBpZiAoIXJlY29yZEFycmF5cykgeyByZXR1cm47IH0K
LQotICAgICAgICBmb3JFYWNoKHJlY29yZEFycmF5cywgZnVuY3Rpb24oYXJyYXkpIHsKLSAgICAg
ICAgICBhcnJheS5yZW1vdmVSZWNvcmQocmVjb3JkKTsKLSAgICAgICAgfSk7Ci0gICAgICB9LAot
Ci0gICAgICBfcmVjb3JkV2FzQ2hhbmdlZDogZnVuY3Rpb24gKHJlY29yZCkgewotICAgICAgICB2
YXIgdHlwZSA9IHJlY29yZC5jb25zdHJ1Y3RvciwKLSAgICAgICAgICAgIHJlY29yZEFycmF5cyA9
IHRoaXMuZmlsdGVyZWRSZWNvcmRBcnJheXMuZ2V0KHR5cGUpLAotICAgICAgICAgICAgZmlsdGVy
OwotCi0gICAgICAgIGZvckVhY2gocmVjb3JkQXJyYXlzLCBmdW5jdGlvbihhcnJheSkgewotICAg
ICAgICAgIGZpbHRlciA9IGdldChhcnJheSwgJ2ZpbHRlckZ1bmN0aW9uJyk7Ci0gICAgICAgICAg
dGhpcy51cGRhdGVSZWNvcmRBcnJheShhcnJheSwgZmlsdGVyLCB0eXBlLCByZWNvcmQpOwotICAg
ICAgICB9LCB0aGlzKTsKLQotICAgICAgICAvLyBsb29wIHRocm91Z2ggYWxsIG1hbnlBcnJheXMg
Y29udGFpbmluZyBhbiB1bmxvYWRlZCBjb3B5IG9mIHRoaXMKLSAgICAgICAgLy8gY2xpZW50SWQg
YW5kIG5vdGlmeSB0aGVtIHRoYXQgdGhlIHJlY29yZCB3YXMgbG9hZGVkLgotICAgICAgICB2YXIg
bWFueUFycmF5cyA9IHJlY29yZC5fbG9hZGluZ1JlY29yZEFycmF5czsKLQotICAgICAgICBpZiAo
bWFueUFycmF5cykgewotICAgICAgICAgIGZvciAodmFyIGk9MCwgbD1tYW55QXJyYXlzLmxlbmd0
aDsgaTxsOyBpKyspIHsKLSAgICAgICAgICAgIG1hbnlBcnJheXNbaV0ubG9hZGVkUmVjb3JkKCk7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVjb3JkLl9sb2FkaW5nUmVjb3JkQXJyYXlzID0g
W107Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBVcGRhdGUgYW4g
aW5kaXZpZHVhbCBmaWx0ZXIuCi0KLSAgICAgICAgQG1ldGhvZCB1cGRhdGVSZWNvcmRBcnJheQot
ICAgICAgICBAcGFyYW0ge0RTLkZpbHRlcmVkUmVjb3JkQXJyYXl9IGFycmF5Ci0gICAgICAgIEBw
YXJhbSB7RnVuY3Rpb259IGZpbHRlcgotICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCi0gICAg
ICAgIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gY2xpZW50SWQKLSAgICAgICovCi0gICAgICB1cGRh
dGVSZWNvcmRBcnJheTogZnVuY3Rpb24oYXJyYXksIGZpbHRlciwgdHlwZSwgcmVjb3JkKSB7Ci0g
ICAgICAgIHZhciBzaG91bGRCZUluQXJyYXk7Ci0KLSAgICAgICAgaWYgKCFmaWx0ZXIpIHsKLSAg
ICAgICAgICBzaG91bGRCZUluQXJyYXkgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHNob3VsZEJlSW5BcnJheSA9IGZpbHRlcihyZWNvcmQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIHJlY29yZEFycmF5cyA9IHRoaXMucmVjb3JkQXJyYXlzRm9yUmVjb3JkKHJlY29yZCk7
Ci0KLSAgICAgICAgaWYgKHNob3VsZEJlSW5BcnJheSkgewotICAgICAgICAgIHJlY29yZEFycmF5
cy5hZGQoYXJyYXkpOwotICAgICAgICAgIGFycmF5LmFkZFJlY29yZChyZWNvcmQpOwotICAgICAg
ICB9IGVsc2UgaWYgKCFzaG91bGRCZUluQXJyYXkpIHsKLSAgICAgICAgICByZWNvcmRBcnJheXMu
cmVtb3ZlKGFycmF5KTsKLSAgICAgICAgICBhcnJheS5yZW1vdmVSZWNvcmQocmVjb3JkKTsKLSAg
ICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGlu
dm9rZWQgaWYgdGhlIGBmaWx0ZXJGdW5jdGlvbmAgcHJvcGVydHkgaXMKLSAgICAgICAgY2hhbmdl
ZCBvbiBhIGBEUy5GaWx0ZXJlZFJlY29yZEFycmF5YC4KLQotICAgICAgICBJdCBlc3NlbnRpYWxs
eSByZS1ydW5zIHRoZSBmaWx0ZXIgZnJvbSBzY3JhdGNoLiBUaGlzIHNhbWUKLSAgICAgICAgbWV0
aG9kIGlzIGludm9rZWQgd2hlbiB0aGUgZmlsdGVyIGlzIGNyZWF0ZWQgaW4gdGggZmlyc3QgcGxh
Y2UuCi0KLSAgICAgICAgQG1ldGhvZCB1cGRhdGVGaWx0ZXIKLSAgICAgICAgQHBhcmFtIGFycmF5
Ci0gICAgICAgIEBwYXJhbSB0eXBlCi0gICAgICAgIEBwYXJhbSBmaWx0ZXIKLSAgICAgICovCi0g
ICAgICB1cGRhdGVGaWx0ZXI6IGZ1bmN0aW9uKGFycmF5LCB0eXBlLCBmaWx0ZXIpIHsKLSAgICAg
ICAgdmFyIHR5cGVNYXAgPSB0aGlzLnN0b3JlLnR5cGVNYXBGb3IodHlwZSksCi0gICAgICAgICAg
ICByZWNvcmRzID0gdHlwZU1hcC5yZWNvcmRzLCByZWNvcmQ7Ci0KLSAgICAgICAgZm9yICh2YXIg
aT0wLCBsPXJlY29yZHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICAgIHJlY29yZCA9IHJl
Y29yZHNbaV07Ci0KLSAgICAgICAgICBpZiAoIWdldChyZWNvcmQsICdpc0RlbGV0ZWQnKSAmJiAh
Z2V0KHJlY29yZCwgJ2lzRW1wdHknKSkgewotICAgICAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRB
cnJheShhcnJheSwgZmlsdGVyLCB0eXBlLCByZWNvcmQpOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIENyZWF0ZSBhIGBEUy5NYW55QXJyYXlg
IGZvciBhIHR5cGUgYW5kIGxpc3Qgb2YgcmVjb3JkIHJlZmVyZW5jZXMsIGFuZCBpbmRleAotICAg
ICAgICB0aGUgYE1hbnlBcnJheWAgdW5kZXIgZWFjaCByZWZlcmVuY2UuIFRoaXMgYWxsb3dzIHVz
IHRvIGVmZmljaWVudGx5IHJlbW92ZQotICAgICAgICByZWNvcmRzIGZyb20gYE1hbnlBcnJheWBz
IHdoZW4gdGhleSBhcmUgZGVsZXRlZC4KLQotICAgICAgICBAbWV0aG9kIGNyZWF0ZU1hbnlBcnJh
eQotICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7QXJyYXl9IHJl
ZmVyZW5jZXMKLSAgICAgICAgQHJldHVybiB7RFMuTWFueUFycmF5fQotICAgICAgKi8KLSAgICAg
IGNyZWF0ZU1hbnlBcnJheTogZnVuY3Rpb24odHlwZSwgcmVjb3JkcykgewotICAgICAgICB2YXIg
bWFueUFycmF5ID0gTWFueUFycmF5LmNyZWF0ZSh7Ci0gICAgICAgICAgdHlwZTogdHlwZSwKLSAg
ICAgICAgICBjb250ZW50OiByZWNvcmRzLAotICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlCi0g
ICAgICAgIH0pOwotCi0gICAgICAgIGZvckVhY2gocmVjb3JkcywgZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgICAgdmFyIGFycmF5cyA9IHRoaXMucmVjb3JkQXJyYXlzRm9yUmVjb3JkKHJlY29y
ZCk7Ci0gICAgICAgICAgYXJyYXlzLmFkZChtYW55QXJyYXkpOwotICAgICAgICB9LCB0aGlzKTsK
LQotICAgICAgICByZXR1cm4gbWFueUFycmF5OwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIENyZWF0ZSBhIGBEUy5SZWNvcmRBcnJheWAgZm9yIGEgdHlwZSBhbmQgcmVnaXN0ZXIgaXQg
Zm9yIHVwZGF0ZXMuCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGVSZWNvcmRBcnJheQotICAgICAg
ICBAcGFyYW0ge0NsYXNzfSB0eXBlCi0gICAgICAgIEByZXR1cm4ge0RTLlJlY29yZEFycmF5fQot
ICAgICAgKi8KLSAgICAgIGNyZWF0ZVJlY29yZEFycmF5OiBmdW5jdGlvbih0eXBlKSB7Ci0gICAg
ICAgIHZhciBhcnJheSA9IFJlY29yZEFycmF5LmNyZWF0ZSh7Ci0gICAgICAgICAgdHlwZTogdHlw
ZSwKLSAgICAgICAgICBjb250ZW50OiBFbWJlci5BKCksCi0gICAgICAgICAgc3RvcmU6IHRoaXMu
c3RvcmUsCi0gICAgICAgICAgaXNMb2FkZWQ6IHRydWUKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
dGhpcy5yZWdpc3RlckZpbHRlcmVkUmVjb3JkQXJyYXkoYXJyYXksIHR5cGUpOwotCi0gICAgICAg
IHJldHVybiBhcnJheTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBDcmVhdGUgYSBg
RFMuRmlsdGVyZWRSZWNvcmRBcnJheWAgZm9yIGEgdHlwZSBhbmQgcmVnaXN0ZXIgaXQgZm9yIHVw
ZGF0ZXMuCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGVGaWx0ZXJlZFJlY29yZEFycmF5Ci0gICAg
ICAgIEBwYXJhbSB7Q2xhc3N9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVy
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBxdWVyeSAob3B0aW9uYWwKLSAgICAgICAgQHJldHVy
biB7RFMuRmlsdGVyZWRSZWNvcmRBcnJheX0KLSAgICAgICovCi0gICAgICBjcmVhdGVGaWx0ZXJl
ZFJlY29yZEFycmF5OiBmdW5jdGlvbih0eXBlLCBmaWx0ZXIsIHF1ZXJ5KSB7Ci0gICAgICAgIHZh
ciBhcnJheSA9IEZpbHRlcmVkUmVjb3JkQXJyYXkuY3JlYXRlKHsKLSAgICAgICAgICBxdWVyeTog
cXVlcnksCi0gICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICBjb250ZW50OiBFbWJlci5B
KCksCi0gICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsCi0gICAgICAgICAgbWFuYWdlcjogdGhp
cywKLSAgICAgICAgICBmaWx0ZXJGdW5jdGlvbjogZmlsdGVyCi0gICAgICAgIH0pOwotCi0gICAg
ICAgIHRoaXMucmVnaXN0ZXJGaWx0ZXJlZFJlY29yZEFycmF5KGFycmF5LCB0eXBlLCBmaWx0ZXIp
OwotCi0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAg
ICBDcmVhdGUgYSBgRFMuQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5YCBmb3IgYSB0eXBlIHdp
dGggZ2l2ZW4gcXVlcnkuCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGVBZGFwdGVyUG9wdWxhdGVk
UmVjb3JkQXJyYXkKLSAgICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZQotICAgICAgICBAcGFyYW0g
e09iamVjdH0gcXVlcnkKLSAgICAgICAgQHJldHVybiB7RFMuQWRhcHRlclBvcHVsYXRlZFJlY29y
ZEFycmF5fQotICAgICAgKi8KLSAgICAgIGNyZWF0ZUFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJh
eTogZnVuY3Rpb24odHlwZSwgcXVlcnkpIHsKLSAgICAgICAgdmFyIGFycmF5ID0gQWRhcHRlclBv
cHVsYXRlZFJlY29yZEFycmF5LmNyZWF0ZSh7Ci0gICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAg
ICAgICBxdWVyeTogcXVlcnksCi0gICAgICAgICAgY29udGVudDogRW1iZXIuQSgpLAotICAgICAg
ICAgIHN0b3JlOiB0aGlzLnN0b3JlLAotICAgICAgICAgIG1hbmFnZXI6IHRoaXMKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgdGhpcy5fYWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5cy5wdXNoKGFy
cmF5KTsKLQotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgUmVnaXN0ZXIgYSBSZWNvcmRBcnJheSBmb3IgYSBnaXZlbiB0eXBlIHRvIGJlIGJhY2tl
ZCBieQotICAgICAgICBhIGZpbHRlciBmdW5jdGlvbi4gVGhpcyB3aWxsIGNhdXNlIHRoZSBhcnJh
eSB0byB1cGRhdGUKLSAgICAgICAgYXV0b21hdGljYWxseSB3aGVuIHJlY29yZHMgb2YgdGhhdCB0
eXBlIGNoYW5nZSBhdHRyaWJ1dGUKLSAgICAgICAgdmFsdWVzIG9yIHN0YXRlcy4KLQotICAgICAg
ICBAbWV0aG9kIHJlZ2lzdGVyRmlsdGVyZWRSZWNvcmRBcnJheQotICAgICAgICBAcGFyYW0ge0RT
LlJlY29yZEFycmF5fSBhcnJheQotICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlCi0gICAgICAg
IEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlcgotICAgICAgKi8KLSAgICAgIHJlZ2lzdGVyRmlsdGVy
ZWRSZWNvcmRBcnJheTogZnVuY3Rpb24oYXJyYXksIHR5cGUsIGZpbHRlcikgewotICAgICAgICB2
YXIgcmVjb3JkQXJyYXlzID0gdGhpcy5maWx0ZXJlZFJlY29yZEFycmF5cy5nZXQodHlwZSk7Ci0g
ICAgICAgIHJlY29yZEFycmF5cy5wdXNoKGFycmF5KTsKLQotICAgICAgICB0aGlzLnVwZGF0ZUZp
bHRlcihhcnJheSwgdHlwZSwgZmlsdGVyKTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIEludGVybmFs
bHksIHdlIG1haW50YWluIGEgbWFwIG9mIGFsbCB1bmxvYWRlZCBJRHMgcmVxdWVzdGVkIGJ5Ci0g
ICAgICAvLyBhIE1hbnlBcnJheS4gQXMgdGhlIGFkYXB0ZXIgbG9hZHMgZGF0YSBpbnRvIHRoZSBz
dG9yZSwgdGhlCi0gICAgICAvLyBzdG9yZSBub3RpZmllcyBhbnkgaW50ZXJlc3RlZCBNYW55QXJy
YXlzLiBXaGVuIHRoZSBNYW55QXJyYXkncwotICAgICAgLy8gdG90YWwgbnVtYmVyIG9mIGxvYWRp
bmcgcmVjb3JkcyBkcm9wcyB0byB6ZXJvLCBpdCBiZWNvbWVzCi0gICAgICAvLyBgaXNMb2FkZWRg
IGFuZCBmaXJlcyBhIGBkaWRMb2FkYCBldmVudC4KLSAgICAgIHJlZ2lzdGVyV2FpdGluZ1JlY29y
ZEFycmF5OiBmdW5jdGlvbihyZWNvcmQsIGFycmF5KSB7Ci0gICAgICAgIHZhciBsb2FkaW5nUmVj
b3JkQXJyYXlzID0gcmVjb3JkLl9sb2FkaW5nUmVjb3JkQXJyYXlzIHx8IFtdOwotICAgICAgICBs
b2FkaW5nUmVjb3JkQXJyYXlzLnB1c2goYXJyYXkpOwotICAgICAgICByZWNvcmQuX2xvYWRpbmdS
ZWNvcmRBcnJheXMgPSBsb2FkaW5nUmVjb3JkQXJyYXlzOwotICAgICAgfSwKLQotICAgICAgd2ls
bERlc3Ryb3k6IGZ1bmN0aW9uKCl7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0KLSAgICAgICAg
Zm9yRWFjaChmbGF0dGVuKHZhbHVlcyh0aGlzLmZpbHRlcmVkUmVjb3JkQXJyYXlzLnZhbHVlcykp
LCBkZXN0cm95KTsKLSAgICAgICAgZm9yRWFjaCh0aGlzLl9hZGFwdGVyUG9wdWxhdGVkUmVjb3Jk
QXJyYXlzLCBkZXN0cm95KTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGZ1bmN0aW9uIHZhbHVl
cyhvYmopIHsKLSAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgIHZhciBrZXlzID0gRW1iZXIu
a2V5cyhvYmopOwotCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tleXNbaV1dKTsKLSAgICAgIH0KLQotICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkZXN0cm95KGVudHJ5KSB7Ci0g
ICAgICBlbnRyeS5kZXN0cm95KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmxhdHRlbihsaXN0
KSB7Ci0gICAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0gICAgICB2YXIgcmVzdWx0ID0g
RW1iZXIuQSgpOwotCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQobGlzdFtpXSk7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFJl
Y29yZEFycmF5TWFuYWdlcjsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9y
ZWNvcmRfYXJyYXlzIiwgCi0gIFsiLi9yZWNvcmRfYXJyYXlzL3JlY29yZF9hcnJheSIsIi4vcmVj
b3JkX2FycmF5cy9maWx0ZXJlZF9yZWNvcmRfYXJyYXkiLCIuL3JlY29yZF9hcnJheXMvYWRhcHRl
cl9wb3B1bGF0ZWRfcmVjb3JkX2FycmF5IiwiLi9yZWNvcmRfYXJyYXlzL21hbnlfYXJyYXkiLCJl
eHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNl
IHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0g
ICAgdmFyIFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFy
IEZpbHRlcmVkUmVjb3JkQXJyYXkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2
YXIgQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0
Il07Ci0gICAgdmFyIE1hbnlBcnJheSA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotCi0g
ICAgX19leHBvcnRzX18uUmVjb3JkQXJyYXkgPSBSZWNvcmRBcnJheTsKLSAgICBfX2V4cG9ydHNf
Xy5GaWx0ZXJlZFJlY29yZEFycmF5ID0gRmlsdGVyZWRSZWNvcmRBcnJheTsKLSAgICBfX2V4cG9y
dHNfXy5BZGFwdGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkgPSBBZGFwdGVyUG9wdWxhdGVkUmVjb3Jk
QXJyYXk7Ci0gICAgX19leHBvcnRzX18uTWFueUFycmF5ID0gTWFueUFycmF5OwotICB9KTsKLWRl
ZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlY29yZF9hcnJheXMvYWRhcHRlcl9wb3B1bGF0
ZWRfcmVjb3JkX2FycmF5IiwgCi0gIFsiLi9yZWNvcmRfYXJyYXkiLCJleHBvcnRzIl0sCi0gIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7
Ci0gICAgdmFyIFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
LyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIGdldCA9IEVt
YmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0OwotCi0gICAgLyoqCi0gICAgICBSZXByZXNlbnRzIGFu
IG9yZGVyZWQgbGlzdCBvZiByZWNvcmRzIHdob3NlIG9yZGVyIGFuZCBtZW1iZXJzaGlwIGlzCi0g
ICAgICBkZXRlcm1pbmVkIGJ5IHRoZSBhZGFwdGVyLiBGb3IgZXhhbXBsZSwgYSBxdWVyeSBzZW50
IHRvIHRoZSBhZGFwdGVyCi0gICAgICBtYXkgdHJpZ2dlciBhIHNlYXJjaCBvbiB0aGUgc2VydmVy
LCB3aG9zZSByZXN1bHRzIHdvdWxkIGJlIGxvYWRlZAotICAgICAgaW50byBhbiBpbnN0YW5jZSBv
ZiB0aGUgYEFkYXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheWAuCi0KLSAgICAgIEBjbGFzcyBBZGFw
dGVyUG9wdWxhdGVkUmVjb3JkQXJyYXkKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRl
bmRzIERTLlJlY29yZEFycmF5Ci0gICAgKi8KLSAgICB2YXIgQWRhcHRlclBvcHVsYXRlZFJlY29y
ZEFycmF5ID0gUmVjb3JkQXJyYXkuZXh0ZW5kKHsKLSAgICAgIHF1ZXJ5OiBudWxsLAotCi0gICAg
ICByZXBsYWNlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHR5cGUgPSBnZXQodGhpcywgJ3R5
cGUnKS50b1N0cmluZygpOwotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSByZXN1bHQgb2Yg
YSBzZXJ2ZXIgcXVlcnkgKG9uICIgKyB0eXBlICsgIikgaXMgaW1tdXRhYmxlLiIpOwotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgbG9hZAotICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICBAcGFyYW0ge0FycmF5fSBkYXRhCi0gICAgICAqLwotICAgICAgbG9hZDogZnVuY3Rp
b24oZGF0YSkgewotICAgICAgICB2YXIgc3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyksCi0gICAg
ICAgICAgICB0eXBlID0gZ2V0KHRoaXMsICd0eXBlJyksCi0gICAgICAgICAgICByZWNvcmRzID0g
c3RvcmUucHVzaE1hbnkodHlwZSwgZGF0YSksCi0gICAgICAgICAgICBtZXRhID0gc3RvcmUubWV0
YWRhdGFGb3IodHlwZSk7Ci0KLSAgICAgICAgdGhpcy5zZXRQcm9wZXJ0aWVzKHsKLSAgICAgICAg
ICBjb250ZW50OiBFbWJlci5BKHJlY29yZHMpLAotICAgICAgICAgIGlzTG9hZGVkOiB0cnVlLAot
ICAgICAgICAgIG1ldGE6IEVtYmVyLmNvcHkobWV0YSkKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
cmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgIHRoaXMubWFuYWdl
ci5yZWNvcmRBcnJheXNGb3JSZWNvcmQocmVjb3JkKS5hZGQodGhpcyk7Ci0gICAgICAgIH0sIHRo
aXMpOwotCi0gICAgICAgIC8vIFRPRE86IHNob3VsZCB0cmlnZ2VyaW5nIGRpZExvYWQgZXZlbnQg
YmUgdGhlIGxhc3QgYWN0aW9uIG9mIHRoZSBydW5Mb29wPwotICAgICAgICBFbWJlci5ydW4ub25j
ZSh0aGlzLCAndHJpZ2dlcicsICdkaWRMb2FkJyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQWRhcHRlclBvcHVsYXRlZFJlY29yZEFycmF5OwotICB9
KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlY29yZF9hcnJheXMvZmlsdGVyZWRf
cmVjb3JkX2FycmF5IiwgCi0gIFsiLi9yZWNvcmRfYXJyYXkiLCJleHBvcnRzIl0sCi0gIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0g
ICAgdmFyIFJlY29yZEFycmF5ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAv
KioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgZ2V0ID0gRW1i
ZXIuZ2V0OwotCi0gICAgLyoqCi0gICAgICBSZXByZXNlbnRzIGEgbGlzdCBvZiByZWNvcmRzIHdo
b3NlIG1lbWJlcnNoaXAgaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSAgICAgIHN0b3JlLiBBcyByZWNv
cmRzIGFyZSBjcmVhdGVkLCBsb2FkZWQsIG9yIG1vZGlmaWVkLCB0aGUgc3RvcmUKLSAgICAgIGV2
YWx1YXRlcyB0aGVtIHRvIGRldGVybWluZSBpZiB0aGV5IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBy
ZWNvcmQKLSAgICAgIGFycmF5LgotCi0gICAgICBAY2xhc3MgRmlsdGVyZWRSZWNvcmRBcnJheQot
ICAgICAgQG5hbWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRFMuUmVjb3JkQXJyYXkKLSAgICAq
LwotICAgIHZhciBGaWx0ZXJlZFJlY29yZEFycmF5ID0gUmVjb3JkQXJyYXkuZXh0ZW5kKHsKLSAg
ICAgIC8qKgotICAgICAgICBUaGUgZmlsdGVyRnVuY3Rpb24gaXMgYSBmdW5jdGlvbiB1c2VkIHRv
IHRlc3QgcmVjb3JkcyBmcm9tIHRoZSBzdG9yZSB0bwotICAgICAgICBkZXRlcm1pbmUgaWYgdGhl
eSBzaG91bGQgYmUgcGFydCBvZiB0aGUgcmVjb3JkIGFycmF5LgotCi0gICAgICAgIEV4YW1wbGUK
LQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciBhbGxQZW9wbGUgPSBzdG9yZS5h
bGwoJ3BlcnNvbicpOwotICAgICAgICBhbGxQZW9wbGUubWFwQnkoJ25hbWUnKTsgLy8gWyJUb20g
RGFsZSIsICJZZWh1ZGEgS2F0eiIsICJUcmVrIEdsb3dhY2tpIl0KLQotICAgICAgICB2YXIgcGVv
cGxlID0gc3RvcmUuZmlsdGVyKCdwZXJzb24nLCBmdW5jdGlvbihwZXJzb24pIHsKLSAgICAgICAg
ICBpZiAocGVyc29uLmdldCgnbmFtZScpLm1hdGNoKC9LYXR6JC8pKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgICAgIH0pOwotICAgICAgICBwZW9wbGUubWFwQnkoJ25hbWUnKTsgLy8gWyJZZWh1ZGEg
S2F0eiJdCi0KLSAgICAgICAgdmFyIG5vdEthdHpGaWx0ZXIgPSBmdW5jdGlvbihwZXJzb24pIHsK
LSAgICAgICAgICByZXR1cm4gIXBlcnNvbi5nZXQoJ25hbWUnKS5tYXRjaCgvS2F0eiQvKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgcGVvcGxlLnNldCgnZmlsdGVyRnVuY3Rpb24nLCBub3RLYXR6Rmls
dGVyKTsKLSAgICAgICAgcGVvcGxlLm1hcEJ5KCduYW1lJyk7IC8vIFsiVG9tIERhbGUiLCAiVHJl
ayBHbG93YWNraSJdCi0gICAgICAgIGBgYAotCi0gICAgICAgIEBtZXRob2QgZmlsdGVyRnVuY3Rp
b24KLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEByZXR1cm4ge0Jv
b2xlYW59IGB0cnVlYCBpZiB0aGUgcmVjb3JkIHNob3VsZCBiZSBpbiB0aGUgYXJyYXkKLSAgICAg
ICovCi0gICAgICBmaWx0ZXJGdW5jdGlvbjogbnVsbCwKLSAgICAgIGlzTG9hZGVkOiB0cnVlLAot
Ci0gICAgICByZXBsYWNlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHR5cGUgPSBnZXQodGhp
cywgJ3R5cGUnKS50b1N0cmluZygpOwotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSByZXN1
bHQgb2YgYSBjbGllbnQtc2lkZSBmaWx0ZXIgKG9uICIgKyB0eXBlICsgIikgaXMgaW1tdXRhYmxl
LiIpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgdXBkYXRlRmlsdGVy
Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgX3VwZGF0ZUZpbHRlcjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHZhciBtYW5hZ2VyID0gZ2V0KHRoaXMsICdtYW5hZ2VyJyk7Ci0gICAg
ICAgIG1hbmFnZXIudXBkYXRlRmlsdGVyKHRoaXMsIGdldCh0aGlzLCAndHlwZScpLCBnZXQodGhp
cywgJ2ZpbHRlckZ1bmN0aW9uJykpOwotICAgICAgfSwKLQotICAgICAgdXBkYXRlRmlsdGVyOiBF
bWJlci5vYnNlcnZlcihmdW5jdGlvbigpIHsKLSAgICAgICAgRW1iZXIucnVuLm9uY2UodGhpcywg
dGhpcy5fdXBkYXRlRmlsdGVyKTsKLSAgICAgIH0sICdmaWx0ZXJGdW5jdGlvbicpCi0gICAgfSk7
Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRmlsdGVyZWRSZWNvcmRBcnJheTsKLSAg
fSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9yZWNvcmRfYXJyYXlzL21hbnlfYXJy
YXkiLCAKLSAgWyIuL3JlY29yZF9hcnJheSIsIi4uL2NoYW5nZXMiLCJleHBvcnRzIl0sCi0gIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgUmVjb3JkQXJyYXkgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICB2YXIgUmVsYXRpb25zaGlwQ2hhbmdlID0gX19kZXBlbmRlbmN5Ml9f
LlJlbGF0aW9uc2hpcENoYW5nZTsKLQotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRh
Ci0gICAgKi8KLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQsIHNldCA9IEVtYmVyLnNldDsKLSAg
ICB2YXIgbWFwID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLm1hcDsKLQotICAgIGZ1bmN0aW9uIHN5
bmMoY2hhbmdlKSB7Ci0gICAgICBjaGFuZ2Uuc3luYygpOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAgQSBgTWFueUFycmF5YCBpcyBhIGBSZWNvcmRBcnJheWAgdGhhdCByZXByZXNlbnRzIHRoZSBj
b250ZW50cyBvZiBhIGhhcy1tYW55Ci0gICAgICByZWxhdGlvbnNoaXAuCi0KLSAgICAgIFRoZSBg
TWFueUFycmF5YCBpcyBpbnN0YW50aWF0ZWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIHRoZSByZWxh
dGlvbnNoaXAgaXMKLSAgICAgIHJlcXVlc3RlZC4KLQotICAgICAgIyMjIEludmVyc2VzCi0KLSAg
ICAgIE9mdGVuLCB0aGUgcmVsYXRpb25zaGlwcyBpbiBFbWJlciBEYXRhIGFwcGxpY2F0aW9ucyB3
aWxsIGhhdmUKLSAgICAgIGFuIGludmVyc2UuIEZvciBleGFtcGxlLCBpbWFnaW5lIHRoZSBmb2xs
b3dpbmcgbW9kZWxzIGFyZQotICAgICAgZGVmaW5lZDoKLQotICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgQXBwLlBvc3QgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBjb21tZW50czogRFMu
aGFzTWFueSgnY29tbWVudCcpCi0gICAgICB9KTsKLQotICAgICAgQXBwLkNvbW1lbnQgPSBEUy5N
b2RlbC5leHRlbmQoewotICAgICAgICBwb3N0OiBEUy5iZWxvbmdzVG8oJ3Bvc3QnKQotICAgICAg
fSk7Ci0gICAgICBgYGAKLQotICAgICAgSWYgeW91IGNyZWF0ZWQgYSBuZXcgaW5zdGFuY2Ugb2Yg
YEFwcC5Qb3N0YCBhbmQgYWRkZWQKLSAgICAgIGEgYEFwcC5Db21tZW50YCByZWNvcmQgdG8gaXRz
IGBjb21tZW50c2AgaGFzLW1hbnkKLSAgICAgIHJlbGF0aW9uc2hpcCwgeW91IHdvdWxkIGV4cGVj
dCB0aGUgY29tbWVudCdzIGBwb3N0YAotICAgICAgcHJvcGVydHkgdG8gYmUgc2V0IHRvIHRoZSBw
b3N0IHRoYXQgY29udGFpbmVkCi0gICAgICB0aGUgaGFzLW1hbnkuCi0KLSAgICAgIFdlIGNhbGwg
dGhlIHJlY29yZCB0byB3aGljaCBhIHJlbGF0aW9uc2hpcCBiZWxvbmdzIHRoZQotICAgICAgcmVs
YXRpb25zaGlwJ3MgX293bmVyXy4KLQotICAgICAgQGNsYXNzIE1hbnlBcnJheQotICAgICAgQG5h
bWVzcGFjZSBEUwotICAgICAgQGV4dGVuZHMgRFMuUmVjb3JkQXJyYXkKLSAgICAqLwotICAgIHZh
ciBNYW55QXJyYXkgPSBSZWNvcmRBcnJheS5leHRlbmQoewotICAgICAgaW5pdDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAg
IHRoaXMuX2NoYW5nZXNUb1N5bmMgPSBFbWJlci5PcmRlcmVkU2V0LmNyZWF0ZSgpOwotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSByZWxhdGlv
bnNoaXAKLQotICAgICAgICBAcHJvcGVydHkge1N0cmluZ30gbmFtZQotICAgICAgICBAcHJpdmF0
ZQotICAgICAgKi8KLSAgICAgIG5hbWU6IG51bGwsCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUg
cmVjb3JkIHRvIHdoaWNoIHRoaXMgcmVsYXRpb25zaGlwIGJlbG9uZ3MuCi0KLSAgICAgICAgQHBy
b3BlcnR5IHtEUy5Nb2RlbH0gb3duZXIKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAg
ICBvd25lcjogbnVsbCwKLQotICAgICAgLyoqCi0gICAgICAgIGB0cnVlYCBpZiB0aGUgcmVsYXRp
b25zaGlwIGlzIHBvbHltb3JwaGljLCBgZmFsc2VgIG90aGVyd2lzZS4KLQotICAgICAgICBAcHJv
cGVydHkge0Jvb2xlYW59IGlzUG9seW1vcnBoaWMKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICov
Ci0gICAgICBpc1BvbHltb3JwaGljOiBmYWxzZSwKLQotICAgICAgLy8gTE9BRElORyBTVEFURQot
Ci0gICAgICBpc0xvYWRlZDogZmFsc2UsCi0KLSAgICAgIC8qKgotICAgICAgICBVc2VkIGZvciBh
c3luYyBgaGFzTWFueWAgYXJyYXlzCi0gICAgICAgIHRvIGtlZXAgdHJhY2sgb2Ygd2hlbiB0aGV5
IHdpbGwgcmVzb2x2ZS4KLQotICAgICAgICBAcHJvcGVydHkge0VtYmVyLlJTVlAuUHJvbWlzZX0g
cHJvbWlzZQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAgICAgIHByb21pc2U6IG51bGws
Ci0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGxvYWRpbmdSZWNvcmRzQ291bnQKLSAgICAg
ICAgQHBhcmFtIHtOdW1iZXJ9IGNvdW50Ci0gICAgICAgIEBwcml2YXRlCi0gICAgICAqLwotICAg
ICAgbG9hZGluZ1JlY29yZHNDb3VudDogZnVuY3Rpb24oY291bnQpIHsKLSAgICAgICAgdGhpcy5s
b2FkaW5nUmVjb3Jkc0NvdW50ID0gY291bnQ7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAg
ICAgQG1ldGhvZCBsb2FkZWRSZWNvcmQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAg
ICBsb2FkZWRSZWNvcmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmxvYWRpbmdSZWNvcmRz
Q291bnQtLTsKLSAgICAgICAgaWYgKHRoaXMubG9hZGluZ1JlY29yZHNDb3VudCA9PT0gMCkgewot
ICAgICAgICAgIHNldCh0aGlzLCAnaXNMb2FkZWQnLCB0cnVlKTsKLSAgICAgICAgICB0aGlzLnRy
aWdnZXIoJ2RpZExvYWQnKTsKLSAgICAgICAgfQotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAg
ICAgIEBtZXRob2QgZmV0Y2gKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICovCi0gICAgICBmZXRj
aDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciByZWNvcmRzID0gZ2V0KHRoaXMsICdjb250ZW50
JyksCi0gICAgICAgICAgICBzdG9yZSA9IGdldCh0aGlzLCAnc3RvcmUnKSwKLSAgICAgICAgICAg
IG93bmVyID0gZ2V0KHRoaXMsICdvd25lcicpOwotCi0gICAgICAgIHZhciB1bmxvYWRlZFJlY29y
ZHMgPSByZWNvcmRzLmZpbHRlclByb3BlcnR5KCdpc0VtcHR5JywgdHJ1ZSk7Ci0gICAgICAgIHN0
b3JlLmZldGNoTWFueSh1bmxvYWRlZFJlY29yZHMsIG93bmVyKTsKLSAgICAgIH0sCi0KLSAgICAg
IC8vIE92ZXJyaWRlcyBFbWJlci5BcnJheSdzIHJlcGxhY2UgbWV0aG9kIHRvIGltcGxlbWVudAot
ICAgICAgcmVwbGFjZUNvbnRlbnQ6IGZ1bmN0aW9uKGluZGV4LCByZW1vdmVkLCBhZGRlZCkgewot
ICAgICAgICAvLyBNYXAgdGhlIGFycmF5IG9mIHJlY29yZCBvYmplY3RzIGludG8gYW4gYXJyYXkg
b2YgIGNsaWVudCBpZHMuCi0gICAgICAgIGFkZGVkID0gbWFwKGFkZGVkLCBmdW5jdGlvbihyZWNv
cmQpIHsKLSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgYWRkICciICsgcmVjb3Jk
LmNvbnN0cnVjdG9yLnR5cGVLZXkgKyAiJyByZWNvcmRzIHRvIHRoaXMgcmVsYXRpb25zaGlwIChv
bmx5ICciICsgdGhpcy50eXBlLnR5cGVLZXkgKyAiJyBhbGxvd2VkKSIsICF0aGlzLnR5cGUgfHwg
cmVjb3JkIGluc3RhbmNlb2YgdGhpcy50eXBlKTsKLSAgICAgICAgICByZXR1cm4gcmVjb3JkOwot
ICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICB0aGlzLl9zdXBlcihpbmRleCwgcmVtb3ZlZCwg
YWRkZWQpOwotICAgICAgfSwKLQotICAgICAgYXJyYW5nZWRDb250ZW50RGlkQ2hhbmdlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgRW1iZXIucnVuLm9uY2UodGhpcywgJ2ZldGNoJyk7Ci0gICAgICB9
LAotCi0gICAgICBhcnJheUNvbnRlbnRXaWxsQ2hhbmdlOiBmdW5jdGlvbihpbmRleCwgcmVtb3Zl
ZCwgYWRkZWQpIHsKLSAgICAgICAgdmFyIG93bmVyID0gZ2V0KHRoaXMsICdvd25lcicpLAotICAg
ICAgICAgICAgbmFtZSA9IGdldCh0aGlzLCAnbmFtZScpOwotCi0gICAgICAgIGlmICghb3duZXIu
X3N1c3BlbmRlZFJlbGF0aW9uc2hpcHMpIHsKLSAgICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdGhl
IGZpcnN0IGhhbGYgb2YgY29kZSB0aGF0IGNvbnRpbnVlcyBpbnNpZGUKLSAgICAgICAgICAvLyBv
ZiBhcnJheUNvbnRlbnREaWRDaGFuZ2UuIEl0IGdldHMgb3IgY3JlYXRlcyBhIGNoYW5nZSBmcm9t
Ci0gICAgICAgICAgLy8gdGhlIGNoaWxkIG9iamVjdCwgYWRkcyB0aGUgY3VycmVudCBvd25lciBh
cyB0aGUgb2xkCi0gICAgICAgICAgLy8gcGFyZW50IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUg
dGhlIG9iamVjdCB3YXMgcmVtb3ZlZAotICAgICAgICAgIC8vIGZyb20gYSBNYW55QXJyYXksIGFu
ZCBzZXRzIGBuZXdQYXJlbnRgIHRvIG51bGwuCi0gICAgICAgICAgLy8KLSAgICAgICAgICAvLyBM
YXRlciwgaWYgdGhlIG9iamVjdCBpcyBhZGRlZCB0byBhbm90aGVyIE1hbnlBcnJheSwKLSAgICAg
ICAgICAvLyB0aGUgYGFycmF5Q29udGVudERpZENoYW5nZWAgd2lsbCBzZXQgYG5ld1BhcmVudGAg
b24KLSAgICAgICAgICAvLyB0aGUgY2hhbmdlLgotICAgICAgICAgIGZvciAodmFyIGk9aW5kZXg7
IGk8aW5kZXgrcmVtb3ZlZDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcmVjb3JkID0gZ2V0KHRo
aXMsICdjb250ZW50Jykub2JqZWN0QXQoaSk7Ci0KLSAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBS
ZWxhdGlvbnNoaXBDaGFuZ2UuY3JlYXRlQ2hhbmdlKG93bmVyLCByZWNvcmQsIGdldCh0aGlzLCAn
c3RvcmUnKSwgewotICAgICAgICAgICAgICBwYXJlbnRUeXBlOiBvd25lci5jb25zdHJ1Y3RvciwK
LSAgICAgICAgICAgICAgY2hhbmdlVHlwZTogInJlbW92ZSIsCi0gICAgICAgICAgICAgIGtpbmQ6
ICJoYXNNYW55IiwKLSAgICAgICAgICAgICAga2V5OiBuYW1lCi0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgdGhpcy5fY2hhbmdlc1RvU3luYy5hZGQoY2hhbmdlKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgICAgIH0sCi0KLSAgICAgIGFycmF5Q29udGVudERpZENoYW5nZTogZnVuY3Rp
b24oaW5kZXgsIHJlbW92ZWQsIGFkZGVkKSB7Ci0gICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgdmFyIG93bmVyID0gZ2V0KHRoaXMsICdvd25lcicp
LAotICAgICAgICAgICAgbmFtZSA9IGdldCh0aGlzLCAnbmFtZScpLAotICAgICAgICAgICAgc3Rv
cmUgPSBnZXQodGhpcywgJ3N0b3JlJyk7Ci0KLSAgICAgICAgaWYgKCFvd25lci5fc3VzcGVuZGVk
UmVsYXRpb25zaGlwcykgewotICAgICAgICAgIC8vIFRoaXMgY29kZSBpcyB0aGUgc2Vjb25kIGhh
bGYgb2YgY29kZSB0aGF0IHN0YXJ0ZWQgaW4KLSAgICAgICAgICAvLyBgYXJyYXlDb250ZW50V2ls
bENoYW5nZWAuIEl0IGdldHMgb3IgY3JlYXRlcyBhIGNoYW5nZQotICAgICAgICAgIC8vIGZyb20g
dGhlIGNoaWxkIG9iamVjdCwgYW5kIGFkZHMgdGhlIGN1cnJlbnQgb3duZXIgYXMKLSAgICAgICAg
ICAvLyB0aGUgbmV3IHBhcmVudC4KLSAgICAgICAgICBmb3IgKHZhciBpPWluZGV4OyBpPGluZGV4
K2FkZGVkOyBpKyspIHsKLSAgICAgICAgICAgIHZhciByZWNvcmQgPSBnZXQodGhpcywgJ2NvbnRl
bnQnKS5vYmplY3RBdChpKTsKLQotICAgICAgICAgICAgdmFyIGNoYW5nZSA9IFJlbGF0aW9uc2hp
cENoYW5nZS5jcmVhdGVDaGFuZ2Uob3duZXIsIHJlY29yZCwgc3RvcmUsIHsKLSAgICAgICAgICAg
ICAgcGFyZW50VHlwZTogb3duZXIuY29uc3RydWN0b3IsCi0gICAgICAgICAgICAgIGNoYW5nZVR5
cGU6ICJhZGQiLAotICAgICAgICAgICAgICBraW5kOiJoYXNNYW55IiwKLSAgICAgICAgICAgICAg
a2V5OiBuYW1lCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNoYW5nZS5oYXNNYW55TmFt
ZSA9IG5hbWU7Ci0KLSAgICAgICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMuYWRkKGNoYW5nZSk7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLy8gV2Ugd2FpdCB1bnRpbCB0aGUgYXJyYXkgaGFz
IGZpbmlzaGVkIGJlaW5nCi0gICAgICAgICAgLy8gbXV0YXRlZCBiZWZvcmUgc3luY2luZyB0aGUg
T25lVG9NYW55Q2hhbmdlcyBjcmVhdGVkCi0gICAgICAgICAgLy8gaW4gYXJyYXlDb250ZW50V2ls
bENoYW5nZSwgc28gdGhhdCB0aGUgYXJyYXkKLSAgICAgICAgICAvLyBtZW1iZXJzaGlwIHRlc3Qg
aW4gdGhlIHN5bmMoKSBsb2dpYyBvcGVyYXRlcwotICAgICAgICAgIC8vIG9uIHRoZSBmaW5hbCBy
ZXN1bHRzLgotICAgICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMuZm9yRWFjaChzeW5jKTsKLQot
ICAgICAgICAgIHRoaXMuX2NoYW5nZXNUb1N5bmMuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIENyZWF0ZSBhIGNoaWxkIHJlY29yZCB3aXRoaW4gdGhl
IG93bmVyCi0KLSAgICAgICAgQG1ldGhvZCBjcmVhdGVSZWNvcmQKLSAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGhhc2gKLSAgICAgICAgQHJldHVybiB7RFMuTW9kZWx9
IHJlY29yZAotICAgICAgKi8KLSAgICAgIGNyZWF0ZVJlY29yZDogZnVuY3Rpb24oaGFzaCkgewot
ICAgICAgICB2YXIgb3duZXIgPSBnZXQodGhpcywgJ293bmVyJyksCi0gICAgICAgICAgICBzdG9y
ZSA9IGdldChvd25lciwgJ3N0b3JlJyksCi0gICAgICAgICAgICB0eXBlID0gZ2V0KHRoaXMsICd0
eXBlJyksCi0gICAgICAgICAgICByZWNvcmQ7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
Y2Fubm90IGFkZCAnIiArIHR5cGUudHlwZUtleSArICInIHJlY29yZHMgdG8gdGhpcyBwb2x5bW9y
cGhpYyByZWxhdGlvbnNoaXAuIiwgIWdldCh0aGlzLCAnaXNQb2x5bW9ycGhpYycpKTsKLQotICAg
ICAgICByZWNvcmQgPSBzdG9yZS5jcmVhdGVSZWNvcmQuY2FsbChzdG9yZSwgdHlwZSwgaGFzaCk7
Ci0gICAgICAgIHRoaXMucHVzaE9iamVjdChyZWNvcmQpOwotCi0gICAgICAgIHJldHVybiByZWNv
cmQ7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWFu
eUFycmF5OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlY29yZF9hcnJh
eXMvcmVjb3JkX2FycmF5IiwgCi0gIFsiLi4vc3RvcmUiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9u
KF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAg
LyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwotCi0gICAgdmFyIFByb21pc2VB
cnJheSA9IF9fZGVwZW5kZW5jeTFfXy5Qcm9taXNlQXJyYXk7Ci0gICAgdmFyIGdldCA9IEVtYmVy
LmdldCwgc2V0ID0gRW1iZXIuc2V0OwotCi0gICAgLyoqCi0gICAgICBBIHJlY29yZCBhcnJheSBp
cyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHJlY29yZHMgb2YgYSBjZXJ0YWluIHR5cGUuIFRoZSBy
ZWNvcmQKLSAgICAgIGFycmF5IG1hdGVyaWFsaXplcyByZWNvcmRzIGFzIG5lZWRlZCB3aGVuIHRo
ZXkgYXJlIHJldHJpZXZlZCBmb3IgdGhlIGZpcnN0Ci0gICAgICB0aW1lLiBZb3Ugc2hvdWxkIG5v
dCBjcmVhdGUgcmVjb3JkIGFycmF5cyB5b3Vyc2VsZi4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YK
LSAgICAgIGBEUy5SZWNvcmRBcnJheWAgb3IgaXRzIHN1YmNsYXNzZXMgd2lsbCBiZSByZXR1cm5l
ZCBieSB5b3VyIGFwcGxpY2F0aW9uJ3Mgc3RvcmUKLSAgICAgIGluIHJlc3BvbnNlIHRvIHF1ZXJp
ZXMuCi0KLSAgICAgIEBjbGFzcyBSZWNvcmRBcnJheQotICAgICAgQG5hbWVzcGFjZSBEUwotICAg
ICAgQGV4dGVuZHMgRW1iZXIuQXJyYXlQcm94eQotICAgICAgQHVzZXMgRW1iZXIuRXZlbnRlZAot
ICAgICovCi0KLSAgICB2YXIgUmVjb3JkQXJyYXkgPSBFbWJlci5BcnJheVByb3h5LmV4dGVuZChF
bWJlci5FdmVudGVkLCB7Ci0gICAgICAvKioKLSAgICAgICAgVGhlIG1vZGVsIHR5cGUgY29udGFp
bmVkIGJ5IHRoaXMgcmVjb3JkIGFycmF5LgotCi0gICAgICAgIEBwcm9wZXJ0eSB0eXBlCi0gICAg
ICAgIEB0eXBlIERTLk1vZGVsCi0gICAgICAqLwotICAgICAgdHlwZTogbnVsbCwKLQotICAgICAg
LyoqCi0gICAgICAgIFRoZSBhcnJheSBvZiBjbGllbnQgaWRzIGJhY2tpbmcgdGhlIHJlY29yZCBh
cnJheS4gV2hlbiBhCi0gICAgICAgIHJlY29yZCBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgcmVjb3Jk
IGFycmF5LCB0aGUgcmVjb3JkCi0gICAgICAgIGZvciB0aGUgY2xpZW50IGlkIGF0IHRoZSBzYW1l
IGluZGV4IGlzIG1hdGVyaWFsaXplZCwgaWYKLSAgICAgICAgbmVjZXNzYXJ5LCBieSB0aGUgc3Rv
cmUuCi0KLSAgICAgICAgQHByb3BlcnR5IGNvbnRlbnQKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgQHR5cGUgRW1iZXIuQXJyYXkKLSAgICAgICovCi0gICAgICBjb250ZW50OiBudWxsLAotCi0g
ICAgICAvKioKLSAgICAgICAgVGhlIGZsYWcgdG8gc2lnbmFsIGEgYFJlY29yZEFycmF5YCBpcyBj
dXJyZW50bHkgbG9hZGluZyBkYXRhLgotCi0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgIHZhciBwZW9wbGUgPSBzdG9yZS5hbGwoJ3BlcnNvbicpOwotICAg
ICAgICBwZW9wbGUuZ2V0KCdpc0xvYWRlZCcpOyAvLyB0cnVlCi0gICAgICAgIGBgYAotCi0gICAg
ICAgIEBwcm9wZXJ0eSBpc0xvYWRlZAotICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAqLwot
ICAgICAgaXNMb2FkZWQ6IGZhbHNlLAotICAgICAgLyoqCi0gICAgICAgIFRoZSBmbGFnIHRvIHNp
Z25hbCBhIGBSZWNvcmRBcnJheWAgaXMgY3VycmVudGx5IGxvYWRpbmcgZGF0YS4KLQotICAgICAg
ICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcGVvcGxlID0g
c3RvcmUuYWxsKCdwZXJzb24nKTsKLSAgICAgICAgcGVvcGxlLmdldCgnaXNVcGRhdGluZycpOyAv
LyBmYWxzZQotICAgICAgICBwZW9wbGUudXBkYXRlKCk7Ci0gICAgICAgIHBlb3BsZS5nZXQoJ2lz
VXBkYXRpbmcnKTsgLy8gdHJ1ZQotICAgICAgICBgYGAKLQotICAgICAgICBAcHJvcGVydHkgaXNV
cGRhdGluZwotICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAqLwotICAgICAgaXNVcGRhdGlu
ZzogZmFsc2UsCi0KLSAgICAgIC8qKgotICAgICAgICBUaGUgc3RvcmUgdGhhdCBjcmVhdGVkIHRo
aXMgcmVjb3JkIGFycmF5LgotCi0gICAgICAgIEBwcm9wZXJ0eSBzdG9yZQotICAgICAgICBAcHJp
dmF0ZQotICAgICAgICBAdHlwZSBEUy5TdG9yZQotICAgICAgKi8KLSAgICAgIHN0b3JlOiBudWxs
LAotCi0gICAgICAvKioKLSAgICAgICAgUmV0cmlldmVzIGFuIG9iamVjdCBmcm9tIHRoZSBjb250
ZW50IGJ5IGluZGV4LgotCi0gICAgICAgIEBtZXRob2Qgb2JqZWN0QXRDb250ZW50Ci0gICAgICAg
IEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7TnVtYmVyfSBpbmRleAotICAgICAgICBAcmV0dXJu
IHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgb2JqZWN0QXRDb250ZW50OiBmdW5j
dGlvbihpbmRleCkgewotICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcp
OwotCi0gICAgICAgIHJldHVybiBjb250ZW50Lm9iamVjdEF0KGluZGV4KTsKLSAgICAgIH0sCi0K
LSAgICAgIC8qKgotICAgICAgICBVc2VkIHRvIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYWxs
IG9mIHRoZSByZWNvcmRzIGluIHRoaXMgYXJyYXkKLSAgICAgICAgZnJvbSB0aGUgYWRhcHRlci4K
LQotICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIg
cGVvcGxlID0gc3RvcmUuYWxsKCdwZXJzb24nKTsKLSAgICAgICAgcGVvcGxlLmdldCgnaXNVcGRh
dGluZycpOyAvLyBmYWxzZQotICAgICAgICBwZW9wbGUudXBkYXRlKCk7Ci0gICAgICAgIHBlb3Bs
ZS5nZXQoJ2lzVXBkYXRpbmcnKTsgLy8gdHJ1ZQotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0
aG9kIHVwZGF0ZQotICAgICAgKi8KLSAgICAgIHVwZGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IGlmIChnZXQodGhpcywgJ2lzVXBkYXRpbmcnKSkgeyByZXR1cm47IH0KLQotICAgICAgICB2YXIg
c3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyksCi0gICAgICAgICAgICB0eXBlID0gZ2V0KHRoaXMs
ICd0eXBlJyk7Ci0KLSAgICAgICAgcmV0dXJuIHN0b3JlLmZldGNoQWxsKHR5cGUsIHRoaXMpOwot
ICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEFkZHMgYSByZWNvcmQgdG8gdGhlIGBSZWNv
cmRBcnJheWAuCi0KLSAgICAgICAgQG1ldGhvZCBhZGRSZWNvcmQKLSAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgYWRkUmVj
b3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgZ2V0KHRoaXMsICdjb250ZW50JykuYWRk
T2JqZWN0KHJlY29yZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmVtb3ZlcyBh
IHJlY29yZCB0byB0aGUgYFJlY29yZEFycmF5YC4KLQotICAgICAgICBAbWV0aG9kIHJlbW92ZVJl
Y29yZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQK
LSAgICAgICovCi0gICAgICByZW1vdmVSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAg
ICBnZXQodGhpcywgJ2NvbnRlbnQnKS5yZW1vdmVPYmplY3QocmVjb3JkKTsKLSAgICAgIH0sCi0K
LSAgICAgIC8qKgotICAgICAgICBTYXZlcyBhbGwgb2YgdGhlIHJlY29yZHMgaW4gdGhlIGBSZWNv
cmRBcnJheWAuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgdmFyIG1lc3NhZ2VzID0gc3RvcmUuYWxsKCdtZXNzYWdlJyk7Ci0gICAgICAgIG1lc3Nh
Z2VzLmZvckVhY2goZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICAgIG1lc3NhZ2Uuc2V0KCdo
YXNCZWVuU2VlbicsIHRydWUpOwotICAgICAgICB9KTsKLSAgICAgICAgbWVzc2FnZXMuc2F2ZSgp
OwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHNhdmUKLSAgICAgICAgQHJldHVybiB7
RFMuUHJvbWlzZUFycmF5fSBwcm9taXNlCi0gICAgICAqLwotICAgICAgc2F2ZTogZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSAiRFM6IFJlY29yZEFycmF5I3NhdmUgIiAr
IGdldCh0aGlzLCAndHlwZScpOwotICAgICAgICB2YXIgcHJvbWlzZSA9IEVtYmVyLlJTVlAuYWxs
KHRoaXMuaW52b2tlKCJzYXZlIiksIHByb21pc2VMYWJlbCkudGhlbihmdW5jdGlvbihhcnJheSkg
ewotICAgICAgICAgIHJldHVybiBFbWJlci5BKGFycmF5KTsKLSAgICAgICAgfSwgbnVsbCwgIkRT
OiBSZWNvcmRBcnJheSNzYXZlIGFwcGx5IEVtYmVyLk5hdGl2ZUFycmF5Iik7Ci0KLSAgICAgICAg
cmV0dXJuIFByb21pc2VBcnJheS5jcmVhdGUoeyBwcm9taXNlOiBwcm9taXNlIH0pOwotICAgICAg
fSwKLQotICAgICAgX2Rpc3NvY2lhdGVGcm9tT3duUmVjb3JkczogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciBhcnJheSA9IHRoaXM7Ci0KLSAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHJl
Y29yZCl7Ci0gICAgICAgICAgdmFyIHJlY29yZEFycmF5cyA9IHJlY29yZC5fcmVjb3JkQXJyYXlz
OwotCi0gICAgICAgICAgaWYgKHJlY29yZEFycmF5cykgewotICAgICAgICAgICAgcmVjb3JkQXJy
YXlzLnJlbW92ZShhcnJheSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0sCi0K
LSAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpewotICAgICAgICB0aGlzLl9kaXNzb2NpYXRl
RnJvbU93blJlY29yZHMoKTsKLSAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBSZWNvcmRBcnJheTsKLSAgfSk7Ci1k
ZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5c3RlbS9yZWxhdGlvbnNoaXAtbWV0YSIsIAotICBbIi4u
Ly4uLy4uL2VtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtIiwiZXhwb3J0cyJdLAotICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAg
IHZhciBzaW5ndWxhcml6ZSA9IF9fZGVwZW5kZW5jeTFfXy5zaW5ndWxhcml6ZTsKLQotICAgIGZ1
bmN0aW9uIHR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhKHN0b3JlLCBtZXRhKSB7Ci0gICAgICB2YXIg
dHlwZUtleSwgdHlwZTsKLQotICAgICAgdHlwZUtleSA9IG1ldGEudHlwZSB8fCBtZXRhLmtleTsK
LSAgICAgIGlmICh0eXBlb2YgdHlwZUtleSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgaWYgKG1l
dGEua2luZCA9PT0gJ2hhc01hbnknKSB7Ci0gICAgICAgICAgdHlwZUtleSA9IHNpbmd1bGFyaXpl
KHR5cGVLZXkpOwotICAgICAgICB9Ci0gICAgICAgIHR5cGUgPSBzdG9yZS5tb2RlbEZvcih0eXBl
S2V5KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHR5cGUgPSBtZXRhLnR5cGU7Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIF9fZXhwb3J0c19fLnR5cGVGb3JS
ZWxhdGlvbnNoaXBNZXRhID0gdHlwZUZvclJlbGF0aW9uc2hpcE1ldGE7ZnVuY3Rpb24gcmVsYXRp
b25zaGlwRnJvbU1ldGEoc3RvcmUsIG1ldGEpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIGtl
eTogIG1ldGEua2V5LAotICAgICAgICBraW5kOiBtZXRhLmtpbmQsCi0gICAgICAgIHR5cGU6IHR5
cGVGb3JSZWxhdGlvbnNoaXBNZXRhKHN0b3JlLCBtZXRhKSwKLSAgICAgICAgb3B0aW9uczogICAg
bWV0YS5vcHRpb25zLAotICAgICAgICBwYXJlbnRUeXBlOiBtZXRhLnBhcmVudFR5cGUsCi0gICAg
ICAgIGlzUmVsYXRpb25zaGlwOiB0cnVlCi0gICAgICB9OwotICAgIH0KLQotICAgIF9fZXhwb3J0
c19fLnJlbGF0aW9uc2hpcEZyb21NZXRhID0gcmVsYXRpb25zaGlwRnJvbU1ldGE7Ci0gIH0pOwot
ZGVmaW5lKCJlbWJlci1kYXRhL2xpYi9zeXN0ZW0vcmVsYXRpb25zaGlwcyIsIAotICBbIi4vcmVs
YXRpb25zaGlwcy9iZWxvbmdzX3RvIiwiLi9yZWxhdGlvbnNoaXBzL2hhc19tYW55IiwiLi4vc3lz
dGVtL3JlbGF0aW9uc2hpcHMvZXh0IiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAg
ICovCi0KLSAgICB2YXIgYmVsb25nc1RvID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0g
ICAgdmFyIGhhc01hbnkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQotCi0gICAgX19l
eHBvcnRzX18uYmVsb25nc1RvID0gYmVsb25nc1RvOwotICAgIF9fZXhwb3J0c19fLmhhc01hbnkg
PSBoYXNNYW55OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlbGF0aW9u
c2hpcHMvYmVsb25nc190byIsIAotICBbIi4uL21vZGVsIiwiLi4vc3RvcmUiLCIuLi9jaGFuZ2Vz
IiwiLi4vcmVsYXRpb25zaGlwLW1ldGEiLCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRf
XywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIGdldCA9IEVtYmVy
LmdldCwgc2V0ID0gRW1iZXIuc2V0LAotICAgICAgICBpc05vbmUgPSBFbWJlci5pc05vbmU7Ci0K
LSAgICB2YXIgUHJvbWlzZSA9IEVtYmVyLlJTVlAuUHJvbWlzZTsKLQotICAgIHZhciBNb2RlbCA9
IF9fZGVwZW5kZW5jeTFfXy5Nb2RlbDsKLSAgICB2YXIgUHJvbWlzZU9iamVjdCA9IF9fZGVwZW5k
ZW5jeTJfXy5Qcm9taXNlT2JqZWN0OwotICAgIHZhciBSZWxhdGlvbnNoaXBDaGFuZ2UgPSBfX2Rl
cGVuZGVuY3kzX18uUmVsYXRpb25zaGlwQ2hhbmdlOwotICAgIHZhciByZWxhdGlvbnNoaXBGcm9t
TWV0YSA9IF9fZGVwZW5kZW5jeTRfXy5yZWxhdGlvbnNoaXBGcm9tTWV0YTsKLSAgICB2YXIgdHlw
ZUZvclJlbGF0aW9uc2hpcE1ldGEgPSBfX2RlcGVuZGVuY3k0X18udHlwZUZvclJlbGF0aW9uc2hp
cE1ldGE7Ci0KLSAgICAvKioKLSAgICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAg
ICBmdW5jdGlvbiBhc3luY0JlbG9uZ3NUbyh0eXBlLCBvcHRpb25zLCBtZXRhKSB7Ci0gICAgICBy
ZXR1cm4gRW1iZXIuY29tcHV0ZWQoJ2RhdGEnLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAg
ICAgIHZhciBkYXRhID0gZ2V0KHRoaXMsICdkYXRhJyksCi0gICAgICAgICAgICBzdG9yZSA9IGdl
dCh0aGlzLCAnc3RvcmUnKSwKLSAgICAgICAgICAgIHByb21pc2VMYWJlbCA9ICJEUzogQXN5bmMg
YmVsb25nc1RvICIgKyB0aGlzICsgIiA6ICIgKyBrZXksCi0gICAgICAgICAgICBwcm9taXNlOwot
Ci0gICAgICAgIG1ldGEua2V5ID0ga2V5OwotCi0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09PSAyKSB7Ci0gICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkgYWRkIGEgJyIg
KyB0eXBlICsgIicgcmVjb3JkIHRvIHRoaXMgcmVsYXRpb25zaGlwIiwgIXZhbHVlIHx8IHZhbHVl
IGluc3RhbmNlb2YgdHlwZUZvclJlbGF0aW9uc2hpcE1ldGEoc3RvcmUsIG1ldGEpKTsKLSAgICAg
ICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBQcm9taXNlT2JqZWN0LmNy
ZWF0ZSh7Ci0gICAgICAgICAgICBwcm9taXNlOiBQcm9taXNlLmNhc3QodmFsdWUsIHByb21pc2VM
YWJlbCkKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBsaW5rID0gZGF0
YS5saW5rcyAmJiBkYXRhLmxpbmtzW2tleV0sCi0gICAgICAgICAgICBiZWxvbmdzVG8gPSBkYXRh
W2tleV07Ci0KLSAgICAgICAgaWYoIWlzTm9uZShiZWxvbmdzVG8pKSB7Ci0gICAgICAgICAgcHJv
bWlzZSA9IHN0b3JlLmZldGNoUmVjb3JkKGJlbG9uZ3NUbykgfHwgUHJvbWlzZS5jYXN0KGJlbG9u
Z3NUbywgcHJvbWlzZUxhYmVsKTsKLSAgICAgICAgICByZXR1cm4gUHJvbWlzZU9iamVjdC5jcmVh
dGUoewotICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZQotICAgICAgICAgIH0pOwotICAgICAg
ICB9IGVsc2UgaWYgKGxpbmspIHsKLSAgICAgICAgICBwcm9taXNlID0gc3RvcmUuZmluZEJlbG9u
Z3NUbyh0aGlzLCBsaW5rLCByZWxhdGlvbnNoaXBGcm9tTWV0YShzdG9yZSwgbWV0YSkpOwotICAg
ICAgICAgIHJldHVybiBQcm9taXNlT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICBwcm9taXNl
OiBwcm9taXNlCi0gICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0pLm1ldGEobWV0YSk7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICBgRFMuYmVsb25nc1RvYCBpcyB1c2VkIHRvIGRlZmluZSBPbmUtVG8tT25lIGFu
ZCBPbmUtVG8tTWFueQotICAgICAgcmVsYXRpb25zaGlwcyBvbiBhIFtEUy5Nb2RlbF0oL2FwaS9k
YXRhL2NsYXNzZXMvRFMuTW9kZWwuaHRtbCkuCi0KLQotICAgICAgYERTLmJlbG9uZ3NUb2AgdGFr
ZXMgYW4gb3B0aW9uYWwgaGFzaCBhcyBhIHNlY29uZCBwYXJhbWV0ZXIsIGN1cnJlbnRseQotICAg
ICAgc3VwcG9ydGVkIG9wdGlvbnMgYXJlOgotCi0gICAgICAtIGBhc3luY2A6IEEgYm9vbGVhbiB2
YWx1ZSB1c2VkIHRvIGV4cGxpY2l0bHkgZGVjbGFyZSB0aGlzIHRvIGJlIGFuIGFzeW5jIHJlbGF0
aW9uc2hpcC4KLSAgICAgIC0gYGludmVyc2VgOiBBIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRo
ZSBpbnZlcnNlIHByb3BlcnR5IG9uIGEKLSAgICAgICAgcmVsYXRlZCBtb2RlbCBpbiBhIE9uZS1U
by1NYW55IHJlbGF0aW9uc2hpcC4gU2VlIFtFeHBsaWNpdCBJbnZlcnNlc10oI3RvY19leHBsaWNp
dC1pbnZlcnNlcykKLQotICAgICAgIyMjIyBPbmUtVG8tT25lCi0gICAgICBUbyBkZWNsYXJlIGEg
b25lLXRvLW9uZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gbW9kZWxzLCB1c2UKLSAgICAgIGBE
Uy5iZWxvbmdzVG9gOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuVXNlciA9IERT
Lk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIHByb2ZpbGU6IERTLmJlbG9uZ3NUbygncHJvZmlsZScp
Ci0gICAgICB9KTsKLQotICAgICAgQXBwLlByb2ZpbGUgPSBEUy5Nb2RlbC5leHRlbmQoewotICAg
ICAgICB1c2VyOiBEUy5iZWxvbmdzVG8oJ3VzZXInKQotICAgICAgfSk7Ci0gICAgICBgYGAKLQot
ICAgICAgIyMjIyBPbmUtVG8tTWFueQotICAgICAgVG8gZGVjbGFyZSBhIG9uZS10by1tYW55IHJl
bGF0aW9uc2hpcCBiZXR3ZWVuIHR3byBtb2RlbHMsIHVzZQotICAgICAgYERTLmJlbG9uZ3NUb2Ag
aW4gY29tYmluYXRpb24gd2l0aCBgRFMuaGFzTWFueWAsIGxpa2UgdGhpczoKLQotICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgQXBwLlBvc3QgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBj
b21tZW50czogRFMuaGFzTWFueSgnY29tbWVudCcpCi0gICAgICB9KTsKLQotICAgICAgQXBwLkNv
bW1lbnQgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBwb3N0OiBEUy5iZWxvbmdzVG8oJ3Bv
c3QnKQotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgQG5hbWVzcGFjZQotICAgICAgQG1l
dGhvZCBiZWxvbmdzVG8KLSAgICAgIEBmb3IgRFMKLSAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIERT
Lk1vZGVsfSB0eXBlIHRoZSBtb2RlbCB0eXBlIG9mIHRoZSByZWxhdGlvbnNoaXAKLSAgICAgIEBw
YXJhbSB7T2JqZWN0fSBvcHRpb25zIGEgaGFzaCBvZiBvcHRpb25zCi0gICAgICBAcmV0dXJuIHtF
bWJlci5jb21wdXRlZH0gcmVsYXRpb25zaGlwCi0gICAgKi8KLSAgICBmdW5jdGlvbiBiZWxvbmdz
VG8odHlwZSwgb3B0aW9ucykgewotICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykg
ewotICAgICAgICBvcHRpb25zID0gdHlwZTsKLSAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIGZpcnN0IGFyZ3VtZW50IHRv
IERTLmJlbG9uZ3NUbyBtdXN0IGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG1vZGVsIHR5cGUg
a2V5LCBlLmcuIHVzZSBEUy5iZWxvbmdzVG8oJ3BlcnNvbicpIHRvIGRlZmluZSBhIHJlbGF0aW9u
IHRvIHRoZSBBcHAuUGVyc29uIG1vZGVsIiwgISF0eXBlICYmICh0eXBlb2YgdHlwZSA9PT0gJ3N0
cmluZycgfHwgTW9kZWwuZGV0ZWN0KHR5cGUpKSk7Ci0gICAgICB9Ci0KLSAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OwotCi0gICAgICB2YXIgbWV0YSA9IHsKLSAgICAgICAgdHlwZTogdHlw
ZSwKLSAgICAgICAgaXNSZWxhdGlvbnNoaXA6IHRydWUsCi0gICAgICAgIG9wdGlvbnM6IG9wdGlv
bnMsCi0gICAgICAgIGtpbmQ6ICdiZWxvbmdzVG8nLAotICAgICAgICBrZXk6IG51bGwKLSAgICAg
IH07Ci0KLSAgICAgIGlmIChvcHRpb25zLmFzeW5jKSB7Ci0gICAgICAgIHJldHVybiBhc3luY0Jl
bG9uZ3NUbyh0eXBlLCBvcHRpb25zLCBtZXRhKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIEVt
YmVyLmNvbXB1dGVkKCdkYXRhJywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIg
ZGF0YSA9IGdldCh0aGlzLCAnZGF0YScpLAotICAgICAgICAgICAgc3RvcmUgPSBnZXQodGhpcywg
J3N0b3JlJyksIGJlbG9uZ3NUbywgdHlwZUNsYXNzOwotCi0gICAgICAgIGlmICh0eXBlb2YgdHlw
ZSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICB0eXBlQ2xhc3MgPSBzdG9yZS5tb2RlbEZvcih0
eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0eXBlQ2xhc3MgPSB0eXBlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKLSAgICAgICAg
ICBFbWJlci5hc3NlcnQoIllvdSBjYW4gb25seSBhZGQgYSAnIiArIHR5cGUgKyAiJyByZWNvcmQg
dG8gdGhpcyByZWxhdGlvbnNoaXAiLCAhdmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiB0eXBlQ2xh
c3MpOwotICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYmVsb25nc1RvID0gZGF0YVtrZXldOwotCi0gICAgICAg
IGlmIChpc05vbmUoYmVsb25nc1RvKSkgeyByZXR1cm4gbnVsbDsgfQotCi0gICAgICAgIHN0b3Jl
LmZldGNoUmVjb3JkKGJlbG9uZ3NUbyk7Ci0KLSAgICAgICAgcmV0dXJuIGJlbG9uZ3NUbzsKLSAg
ICAgIH0pLm1ldGEobWV0YSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICBUaGVzZSBvYnNlcnZl
cnMgb2JzZXJ2ZSBhbGwgYGJlbG9uZ3NUb2AgcmVsYXRpb25zaGlwcyBvbiB0aGUgcmVjb3JkLiBT
ZWUKLSAgICAgIGByZWxhdGlvbnNoaXBzL2V4dGAgdG8gc2VlIGhvdyB0aGVzZSBvYnNlcnZlcnMg
Z2V0IHRoZWlyIGRlcGVuZGVuY2llcy4KLQotICAgICAgQGNsYXNzIE1vZGVsCi0gICAgICBAbmFt
ZXNwYWNlIERTCi0gICAgKi8KLSAgICBNb2RlbC5yZW9wZW4oewotCi0gICAgICAvKioKLSAgICAg
ICAgQG1ldGhvZCBiZWxvbmdzVG9XaWxsQ2hhbmdlCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAg
IEBzdGF0aWMKLSAgICAgICAgQHBhcmFtIHJlY29yZAotICAgICAgICBAcGFyYW0ga2V5Ci0gICAg
ICAqLwotICAgICAgYmVsb25nc1RvV2lsbENoYW5nZTogRW1iZXIuYmVmb3JlT2JzZXJ2ZXIoZnVu
Y3Rpb24ocmVjb3JkLCBrZXkpIHsKLSAgICAgICAgaWYgKGdldChyZWNvcmQsICdpc0xvYWRlZCcp
KSB7Ci0gICAgICAgICAgdmFyIG9sZFBhcmVudCA9IGdldChyZWNvcmQsIGtleSk7Ci0KLSAgICAg
ICAgICBpZiAob2xkUGFyZW50KSB7Ci0gICAgICAgICAgICB2YXIgc3RvcmUgPSBnZXQocmVjb3Jk
LCAnc3RvcmUnKSwKLSAgICAgICAgICAgICAgICBjaGFuZ2UgPSBSZWxhdGlvbnNoaXBDaGFuZ2Uu
Y3JlYXRlQ2hhbmdlKHJlY29yZCwgb2xkUGFyZW50LCBzdG9yZSwgeyBrZXk6IGtleSwga2luZDog
ImJlbG9uZ3NUbyIsIGNoYW5nZVR5cGU6ICJyZW1vdmUiIH0pOwotCi0gICAgICAgICAgICBjaGFu
Z2Uuc3luYygpOwotICAgICAgICAgICAgdGhpcy5fY2hhbmdlc1RvU3luY1trZXldID0gY2hhbmdl
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSksCi0KLSAgICAgIC8qKgotICAgICAg
ICBAbWV0aG9kIGJlbG9uZ3NUb0RpZENoYW5nZQotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBA
c3RhdGljCi0gICAgICAgIEBwYXJhbSByZWNvcmQKLSAgICAgICAgQHBhcmFtIGtleQotICAgICAg
Ki8KLSAgICAgIGJlbG9uZ3NUb0RpZENoYW5nZTogRW1iZXIuaW1tZWRpYXRlT2JzZXJ2ZXIoZnVu
Y3Rpb24ocmVjb3JkLCBrZXkpIHsKLSAgICAgICAgaWYgKGdldChyZWNvcmQsICdpc0xvYWRlZCcp
KSB7Ci0gICAgICAgICAgdmFyIG5ld1BhcmVudCA9IGdldChyZWNvcmQsIGtleSk7Ci0KLSAgICAg
ICAgICBpZiAobmV3UGFyZW50KSB7Ci0gICAgICAgICAgICB2YXIgc3RvcmUgPSBnZXQocmVjb3Jk
LCAnc3RvcmUnKSwKLSAgICAgICAgICAgICAgICBjaGFuZ2UgPSBSZWxhdGlvbnNoaXBDaGFuZ2Uu
Y3JlYXRlQ2hhbmdlKHJlY29yZCwgbmV3UGFyZW50LCBzdG9yZSwgeyBrZXk6IGtleSwga2luZDog
ImJlbG9uZ3NUbyIsIGNoYW5nZVR5cGU6ICJhZGQiIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2Uu
c3luYygpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9j
aGFuZ2VzVG9TeW5jW2tleV07Ci0gICAgICB9KQotICAgIH0pOwotCi0gICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IGJlbG9uZ3NUbzsKLSAgfSk7Ci1kZWZpbmUoImVtYmVyLWRhdGEvbGliL3N5
c3RlbS9yZWxhdGlvbnNoaXBzL2V4dCIsIAotICBbIi4uLy4uLy4uLy4uL2VtYmVyLWluZmxlY3Rv
ci9saWIvc3lzdGVtIiwiLi4vcmVsYXRpb25zaGlwLW1ldGEiLCIuLi9tb2RlbCJdLAotICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fKSB7
Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBzaW5ndWxhcml6ZSA9IF9fZGVwZW5kZW5jeTFf
Xy5zaW5ndWxhcml6ZTsKLSAgICB2YXIgdHlwZUZvclJlbGF0aW9uc2hpcE1ldGEgPSBfX2RlcGVu
ZGVuY3kyX18udHlwZUZvclJlbGF0aW9uc2hpcE1ldGE7Ci0gICAgdmFyIHJlbGF0aW9uc2hpcEZy
b21NZXRhID0gX19kZXBlbmRlbmN5Ml9fLnJlbGF0aW9uc2hpcEZyb21NZXRhOwotICAgIHZhciBN
b2RlbCA9IF9fZGVwZW5kZW5jeTNfXy5Nb2RlbDsKLQotICAgIHZhciBnZXQgPSBFbWJlci5nZXQs
IHNldCA9IEVtYmVyLnNldDsKLQotICAgIC8qKgotICAgICAgQG1vZHVsZSBlbWJlci1kYXRhCi0g
ICAgKi8KLQotICAgIC8qCi0gICAgICBUaGlzIGZpbGUgZGVmaW5lcyBzZXZlcmFsIGV4dGVuc2lv
bnMgdG8gdGhlIGJhc2UgYERTLk1vZGVsYCBjbGFzcyB0aGF0Ci0gICAgICBhZGQgc3VwcG9ydCBm
b3Igb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwcy4KLSAgICAqLwotCi0gICAgLyoqCi0gICAgICBA
Y2xhc3MgTW9kZWwKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAqLwotICAgIE1vZGVsLnJlb3Bl
bih7Ci0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIEVtYmVyLmpzIGhvb2sgYWxsb3dzIGFuIG9i
amVjdCB0byBiZSBub3RpZmllZCB3aGVuIGEgcHJvcGVydHkKLSAgICAgICAgaXMgZGVmaW5lZC4K
LQotICAgICAgICBJbiB0aGlzIGNhc2UsIHdlIHVzZSBpdCB0byBiZSBub3RpZmllZCB3aGVuIGFu
IEVtYmVyIERhdGEgdXNlciBkZWZpbmVzIGEKLSAgICAgICAgYmVsb25ncy10byByZWxhdGlvbnNo
aXAuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBzZXQgdXAgb2JzZXJ2ZXJzIGZvcgotICAgICAg
ICBlYWNoIG9uZSwgYWxsb3dpbmcgdXMgdG8gdHJhY2sgcmVsYXRpb25zaGlwIGNoYW5nZXMgYW5k
IGF1dG9tYXRpY2FsbHkKLSAgICAgICAgcmVmbGVjdCBjaGFuZ2VzIGluIHRoZSBpbnZlcnNlIGhh
cy1tYW55IGFycmF5LgotCi0gICAgICAgIFRoaXMgaG9vayBwYXNzZXMgdGhlIGNsYXNzIGJlaW5n
IHNldCB1cCwgYXMgd2VsbCBhcyB0aGUga2V5IGFuZCB2YWx1ZQotICAgICAgICBiZWluZyBkZWZp
bmVkLiBTbywgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHVzZXIgZG9lcyB0aGlzOgotCi0gICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgICBwYXJl
bnQ6IERTLmJlbG9uZ3NUbygndXNlcicpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAg
ICAgICBUaGlzIGhvb2sgd291bGQgYmUgY2FsbGVkIHdpdGggInBhcmVudCIgYXMgdGhlIGtleSBh
bmQgdGhlIGNvbXB1dGVkCi0gICAgICAgIHByb3BlcnR5IHJldHVybmVkIGJ5IGBEUy5iZWxvbmdz
VG9gIGFzIHRoZSB2YWx1ZS4KLQotICAgICAgICBAbWV0aG9kIGRpZERlZmluZVByb3BlcnR5Ci0g
ICAgICAgIEBwYXJhbSBwcm90bwotICAgICAgICBAcGFyYW0ga2V5Ci0gICAgICAgIEBwYXJhbSB2
YWx1ZQotICAgICAgKi8KLSAgICAgIGRpZERlZmluZVByb3BlcnR5OiBmdW5jdGlvbihwcm90bywg
a2V5LCB2YWx1ZSkgewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgYmVpbmcgc2V0IGlz
IGEgY29tcHV0ZWQgcHJvcGVydHkuCi0gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVtYmVy
LkRlc2NyaXB0b3IpIHsKLQotICAgICAgICAgIC8vIElmIGl0IGlzLCBnZXQgdGhlIG1ldGFkYXRh
IGZvciB0aGUgcmVsYXRpb25zaGlwLiBUaGlzIGlzCi0gICAgICAgICAgLy8gcG9wdWxhdGVkIGJ5
IHRoZSBgRFMuYmVsb25nc1RvYCBoZWxwZXIgd2hlbiBpdCBpcyBjcmVhdGluZwotICAgICAgICAg
IC8vIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS4KLSAgICAgICAgICB2YXIgbWV0YSA9IHZhbHVlLm1l
dGEoKTsKLQotICAgICAgICAgIGlmIChtZXRhLmlzUmVsYXRpb25zaGlwICYmIG1ldGEua2luZCA9
PT0gJ2JlbG9uZ3NUbycpIHsKLSAgICAgICAgICAgIEVtYmVyLmFkZE9ic2VydmVyKHByb3RvLCBr
ZXksIG51bGwsICdiZWxvbmdzVG9EaWRDaGFuZ2UnKTsKLSAgICAgICAgICAgIEVtYmVyLmFkZEJl
Zm9yZU9ic2VydmVyKHByb3RvLCBrZXksIG51bGwsICdiZWxvbmdzVG9XaWxsQ2hhbmdlJyk7Ci0g
ICAgICAgICAgfQotCi0gICAgICAgICAgbWV0YS5wYXJlbnRUeXBlID0gcHJvdG8uY29uc3RydWN0
b3I7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8qCi0gICAgICBUaGVzZSBE
Uy5Nb2RlbCBleHRlbnNpb25zIGFkZCBjbGFzcyBtZXRob2RzIHRoYXQgcHJvdmlkZSByZWxhdGlv
bnNoaXAKLSAgICAgIGludHJvc3BlY3Rpb24gYWJpbGl0aWVzIGFib3V0IHJlbGF0aW9uc2hpcHMu
Ci0KLSAgICAgIEEgbm90ZSBhYm91dCB0aGUgY29tcHV0ZWQgcHJvcGVydGllcyBjb250YWluZWQg
aGVyZToKLQotICAgICAgKipUaGVzZSBwcm9wZXJ0aWVzIGFyZSBlZmZlY3RpdmVseSBzZWFsZWQg
b25jZSBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLioqCi0gICAgICBUbyBhdm9pZCByZXBlYXRl
ZGx5IGRvaW5nIGV4cGVuc2l2ZSBpdGVyYXRpb24gb3ZlciBhIG1vZGVsJ3MgZmllbGRzLCB0aGVz
ZQotICAgICAgdmFsdWVzIGFyZSBjb21wdXRlZCBvbmNlIGFuZCB0aGVuIGNhY2hlZCBmb3IgdGhl
IHJlbWFpbmRlciBvZiB0aGUgcnVudGltZSBvZgotICAgICAgeW91ciBhcHBsaWNhdGlvbi4KLQot
ICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBtb2RpZnkgYSBjbGFzcyBhZnRlciBp
dHMgaW5pdGlhbCBkZWZpbml0aW9uCi0gICAgICAoZm9yIGV4YW1wbGUsIHVzaW5nIGByZW9wZW4o
KWAgdG8gYWRkIGFkZGl0aW9uYWwgYXR0cmlidXRlcyksIG1ha2Ugc3VyZSB5b3UKLSAgICAgIGRv
IGl0IGJlZm9yZSB1c2luZyB5b3VyIG1vZGVsIHdpdGggdGhlIHN0b3JlLCB3aGljaCB1c2VzIHRo
ZXNlIHByb3BlcnRpZXMKLSAgICAgIGV4dGVuc2l2ZWx5LgotICAgICovCi0KLSAgICBNb2RlbC5y
ZW9wZW5DbGFzcyh7Ci0gICAgICAvKioKLSAgICAgICAgRm9yIGEgZ2l2ZW4gcmVsYXRpb25zaGlw
IG5hbWUsIHJldHVybnMgdGhlIG1vZGVsIHR5cGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4KLQotICAg
ICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZSBhIG1vZGVsIGxpa2UgdGhpczoKLQotICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLlBvc3QgPSBEUy5Nb2RlbC5leHRlbmQoewot
ICAgICAgICAgIGNvbW1lbnRzOiBEUy5oYXNNYW55KCdjb21tZW50JykKLSAgICAgICAgfSk7Ci0g
ICAgICAgYGBgCi0KLSAgICAgICAgQ2FsbGluZyBgQXBwLlBvc3QudHlwZUZvclJlbGF0aW9uc2hp
cCgnY29tbWVudHMnKWAgd2lsbCByZXR1cm4gYEFwcC5Db21tZW50YC4KLQotICAgICAgICBAbWV0
aG9kIHR5cGVGb3JSZWxhdGlvbnNoaXAKLSAgICAgICAgQHN0YXRpYwotICAgICAgICBAcGFyYW0g
e1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwCi0gICAgICAgIEByZXR1
cm4ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0aGUgdHlwZSBvZiB0aGUgcmVsYXRpb25zaGlwLCBv
ciB1bmRlZmluZWQKLSAgICAgICovCi0gICAgICB0eXBlRm9yUmVsYXRpb25zaGlwOiBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgIHZhciByZWxhdGlvbnNoaXAgPSBnZXQodGhpcywgJ3JlbGF0aW9u
c2hpcHNCeU5hbWUnKS5nZXQobmFtZSk7Ci0gICAgICAgIHJldHVybiByZWxhdGlvbnNoaXAgJiYg
cmVsYXRpb25zaGlwLnR5cGU7Ci0gICAgICB9LAotCi0gICAgICBpbnZlcnNlRm9yOiBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgIHZhciBpbnZlcnNlVHlwZSA9IHRoaXMudHlwZUZvclJlbGF0aW9u
c2hpcChuYW1lKTsKLQotICAgICAgICBpZiAoIWludmVyc2VUeXBlKSB7IHJldHVybiBudWxsOyB9
Ci0KLSAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm1ldGFGb3JQcm9wZXJ0eShuYW1lKS5vcHRp
b25zOwotCi0gICAgICAgIGlmIChvcHRpb25zLmludmVyc2UgPT09IG51bGwpIHsgcmV0dXJuIG51
bGw7IH0KLQotICAgICAgICB2YXIgaW52ZXJzZU5hbWUsIGludmVyc2VLaW5kOwotCi0gICAgICAg
IGlmIChvcHRpb25zLmludmVyc2UpIHsKLSAgICAgICAgICBpbnZlcnNlTmFtZSA9IG9wdGlvbnMu
aW52ZXJzZTsKLSAgICAgICAgICBpbnZlcnNlS2luZCA9IEVtYmVyLmdldChpbnZlcnNlVHlwZSwg
J3JlbGF0aW9uc2hpcHNCeU5hbWUnKS5nZXQoaW52ZXJzZU5hbWUpLmtpbmQ7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgdmFyIHBvc3NpYmxlUmVsYXRpb25zaGlwcyA9IGZpbmRQb3NzaWJs
ZUludmVyc2VzKHRoaXMsIGludmVyc2VUeXBlKTsKLQotICAgICAgICAgIGlmIChwb3NzaWJsZVJl
bGF0aW9uc2hpcHMubGVuZ3RoID09PSAwKSB7IHJldHVybiBudWxsOyB9Ci0KLSAgICAgICAgICBF
bWJlci5hc3NlcnQoIllvdSBkZWZpbmVkIHRoZSAnIiArIG5hbWUgKyAiJyByZWxhdGlvbnNoaXAg
b24gIiArIHRoaXMgKyAiLCBidXQgbXVsdGlwbGUgcG9zc2libGUgaW52ZXJzZSByZWxhdGlvbnNo
aXBzIG9mIHR5cGUgIiArIHRoaXMgKyAiIHdlcmUgZm91bmQgb24gIiArIGludmVyc2VUeXBlICsg
Ii4gTG9vayBhdCBodHRwOi8vZW1iZXJqcy5jb20vZ3VpZGVzL21vZGVscy9kZWZpbmluZy1tb2Rl
bHMvI3RvY19leHBsaWNpdC1pbnZlcnNlcyBmb3IgaG93IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBp
bnZlcnNlcyIsIHBvc3NpYmxlUmVsYXRpb25zaGlwcy5sZW5ndGggPT09IDEpOwotCi0gICAgICAg
ICAgaW52ZXJzZU5hbWUgPSBwb3NzaWJsZVJlbGF0aW9uc2hpcHNbMF0ubmFtZTsKLSAgICAgICAg
ICBpbnZlcnNlS2luZCA9IHBvc3NpYmxlUmVsYXRpb25zaGlwc1swXS5raW5kOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluZFBvc3NpYmxlSW52ZXJzZXModHlwZSwgaW52ZXJzZVR5
cGUsIHBvc3NpYmxlUmVsYXRpb25zaGlwcykgewotICAgICAgICAgIHBvc3NpYmxlUmVsYXRpb25z
aGlwcyA9IHBvc3NpYmxlUmVsYXRpb25zaGlwcyB8fCBbXTsKLQotICAgICAgICAgIHZhciByZWxh
dGlvbnNoaXBNYXAgPSBnZXQoaW52ZXJzZVR5cGUsICdyZWxhdGlvbnNoaXBzJyk7Ci0gICAgICAg
ICAgaWYgKCFyZWxhdGlvbnNoaXBNYXApIHsgcmV0dXJuOyB9Ci0KLSAgICAgICAgICB2YXIgcmVs
YXRpb25zaGlwcyA9IHJlbGF0aW9uc2hpcE1hcC5nZXQodHlwZSk7Ci0gICAgICAgICAgaWYgKHJl
bGF0aW9uc2hpcHMpIHsKLSAgICAgICAgICAgIHBvc3NpYmxlUmVsYXRpb25zaGlwcy5wdXNoLmFw
cGx5KHBvc3NpYmxlUmVsYXRpb25zaGlwcywgcmVsYXRpb25zaGlwTWFwLmdldCh0eXBlKSk7Ci0g
ICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHR5cGUuc3VwZXJjbGFzcykgewotICAgICAgICAg
ICAgZmluZFBvc3NpYmxlSW52ZXJzZXModHlwZS5zdXBlcmNsYXNzLCBpbnZlcnNlVHlwZSwgcG9z
c2libGVSZWxhdGlvbnNoaXBzKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXR1cm4gcG9z
c2libGVSZWxhdGlvbnNoaXBzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICB0eXBlOiBpbnZlcnNlVHlwZSwKLSAgICAgICAgICBuYW1lOiBpbnZlcnNlTmFtZSwKLSAg
ICAgICAgICBraW5kOiBpbnZlcnNlS2luZAotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIFRoZSBtb2RlbCdzIHJlbGF0aW9uc2hpcHMgYXMgYSBtYXAsIGtleWVkIG9u
IHRoZSB0eXBlIG9mIHRoZQotICAgICAgICByZWxhdGlvbnNoaXAuIFRoZSB2YWx1ZSBvZiBlYWNo
IGVudHJ5IGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgYSBkZXNjcmlwdG9yCi0gICAgICAgIGZvciBl
YWNoIHJlbGF0aW9uc2hpcCB3aXRoIHRoYXQgdHlwZSwgZGVzY3JpYmluZyB0aGUgbmFtZSBvZiB0
aGUgcmVsYXRpb25zaGlwCi0gICAgICAgIGFzIHdlbGwgYXMgdGhlIHR5cGUuCi0KLSAgICAgICAg
Rm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgbW9kZWwgZGVmaW5pdGlvbjoKLQotICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwuZXh0ZW5kKHsK
LSAgICAgICAgICB1c2VyczogRFMuaGFzTWFueSgndXNlcicpLAotICAgICAgICAgIG93bmVyOiBE
Uy5iZWxvbmdzVG8oJ3VzZXInKSwKLSAgICAgICAgICBwb3N0czogRFMuaGFzTWFueSgncG9zdCcp
Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGlzIGNvbXB1dGVkIHByb3Bl
cnR5IHdvdWxkIHJldHVybiBhIG1hcCBkZXNjcmliaW5nIHRoZXNlCi0gICAgICAgIHJlbGF0aW9u
c2hpcHMsIGxpa2UgdGhpczoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHZhciBy
ZWxhdGlvbnNoaXBzID0gRW1iZXIuZ2V0KEFwcC5CbG9nLCAncmVsYXRpb25zaGlwcycpOwotICAg
ICAgICByZWxhdGlvbnNoaXBzLmdldChBcHAuVXNlcik7Ci0gICAgICAgIC8vPT4gWyB7IG5hbWU6
ICd1c2VycycsIGtpbmQ6ICdoYXNNYW55JyB9LAotICAgICAgICAvLyAgICAgeyBuYW1lOiAnb3du
ZXInLCBraW5kOiAnYmVsb25nc1RvJyB9IF0KLSAgICAgICAgcmVsYXRpb25zaGlwcy5nZXQoQXBw
LlBvc3QpOwotICAgICAgICAvLz0+IFsgeyBuYW1lOiAncG9zdHMnLCBraW5kOiAnaGFzTWFueScg
fSBdCi0gICAgICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSByZWxhdGlvbnNoaXBzCi0gICAg
ICAgIEBzdGF0aWMKLSAgICAgICAgQHR5cGUgRW1iZXIuTWFwCi0gICAgICAgIEByZWFkT25seQot
ICAgICAgKi8KLSAgICAgIHJlbGF0aW9uc2hpcHM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkg
ewotICAgICAgICB2YXIgbWFwID0gbmV3IEVtYmVyLk1hcFdpdGhEZWZhdWx0KHsKLSAgICAgICAg
ICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0KLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggY29tcHV0ZWQgcHJvcGVydHkgb24gdGhlIGNs
YXNzCi0gICAgICAgIHRoaXMuZWFjaENvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24obmFtZSwgbWV0
YSkgewotCi0gICAgICAgICAgLy8gSWYgdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIGEgcmVsYXRp
b25zaGlwLCBhZGQKLSAgICAgICAgICAvLyBpdCB0byB0aGUgbWFwLgotICAgICAgICAgIGlmICht
ZXRhLmlzUmVsYXRpb25zaGlwKSB7Ci0gICAgICAgICAgICBtZXRhLmtleSA9IG5hbWU7Ci0gICAg
ICAgICAgICB2YXIgcmVsYXRpb25zaGlwc0ZvclR5cGUgPSBtYXAuZ2V0KHR5cGVGb3JSZWxhdGlv
bnNoaXBNZXRhKHRoaXMuc3RvcmUsIG1ldGEpKTsKLQotICAgICAgICAgICAgcmVsYXRpb25zaGlw
c0ZvclR5cGUucHVzaCh7IG5hbWU6IG5hbWUsIGtpbmQ6IG1ldGEua2luZCB9KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBtYXA7Ci0gICAgICB9KS5jYWNoZWFi
bGUoZmFsc2UpLAotCi0gICAgICAvKioKLSAgICAgICAgQSBoYXNoIGNvbnRhaW5pbmcgbGlzdHMg
b2YgdGhlIG1vZGVsJ3MgcmVsYXRpb25zaGlwcywgZ3JvdXBlZAotICAgICAgICBieSB0aGUgcmVs
YXRpb25zaGlwIGtpbmQuIEZvciBleGFtcGxlLCBnaXZlbiBhIG1vZGVsIHdpdGggdGhpcwotICAg
ICAgICBkZWZpbml0aW9uOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgQXBwLkJs
b2cgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIHVzZXJzOiBEUy5oYXNNYW55KCd1c2Vy
JyksCi0gICAgICAgICAgb3duZXI6IERTLmJlbG9uZ3NUbygndXNlcicpLAotCi0gICAgICAgICAg
cG9zdHM6IERTLmhhc01hbnkoJ3Bvc3QnKQotICAgICAgICB9KTsKLSAgICAgICAgYGBgCi0KLSAg
ICAgICAgVGhpcyBwcm9wZXJ0eSB3b3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcmVsYXRpb25zaGlwTmFtZXMgPSBFbWJlci5n
ZXQoQXBwLkJsb2csICdyZWxhdGlvbnNoaXBOYW1lcycpOwotICAgICAgICByZWxhdGlvbnNoaXBO
YW1lcy5oYXNNYW55OwotICAgICAgICAvLz0+IFsndXNlcnMnLCAncG9zdHMnXQotICAgICAgICBy
ZWxhdGlvbnNoaXBOYW1lcy5iZWxvbmdzVG87Ci0gICAgICAgIC8vPT4gWydvd25lciddCi0gICAg
ICAgIGBgYAotCi0gICAgICAgIEBwcm9wZXJ0eSByZWxhdGlvbnNoaXBOYW1lcwotICAgICAgICBA
c3RhdGljCi0gICAgICAgIEB0eXBlIE9iamVjdAotICAgICAgICBAcmVhZE9ubHkKLSAgICAgICov
Ci0gICAgICByZWxhdGlvbnNoaXBOYW1lczogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBuYW1lcyA9IHsgaGFzTWFueTogW10sIGJlbG9uZ3NUbzogW10gfTsKLQotICAg
ICAgICB0aGlzLmVhY2hDb21wdXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5hbWUsIG1ldGEpIHsKLSAg
ICAgICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAgbmFtZXNbbWV0
YS5raW5kXS5wdXNoKG5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
cmV0dXJuIG5hbWVzOwotICAgICAgfSksCi0KLSAgICAgIC8qKgotICAgICAgICBBbiBhcnJheSBv
ZiB0eXBlcyBkaXJlY3RseSByZWxhdGVkIHRvIGEgbW9kZWwuIEVhY2ggdHlwZSB3aWxsIGJlCi0g
ICAgICAgIGluY2x1ZGVkIG9uY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiByZWxhdGlv
bnNoaXBzIGl0IGhhcyB3aXRoCi0gICAgICAgIHRoZSBtb2RlbC4KLQotICAgICAgICBGb3IgZXhh
bXBsZSwgZ2l2ZW4gYSBtb2RlbCB3aXRoIHRoaXMgZGVmaW5pdGlvbjoKLQotICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAg
ICB1c2VyczogRFMuaGFzTWFueSgndXNlcicpLAotICAgICAgICAgIG93bmVyOiBEUy5iZWxvbmdz
VG8oJ3VzZXInKSwKLQotICAgICAgICAgIHBvc3RzOiBEUy5oYXNNYW55KCdwb3N0JykKLSAgICAg
ICAgfSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMgcHJvcGVydHkgd291bGQgY29udGFp
biB0aGUgZm9sbG93aW5nOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFyIHJl
bGF0ZWRUeXBlcyA9IEVtYmVyLmdldChBcHAuQmxvZywgJ3JlbGF0ZWRUeXBlcycpOwotICAgICAg
ICAvLz0+IFsgQXBwLlVzZXIsIEFwcC5Qb3N0IF0KLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHBy
b3BlcnR5IHJlbGF0ZWRUeXBlcwotICAgICAgICBAc3RhdGljCi0gICAgICAgIEB0eXBlIEVtYmVy
LkFycmF5Ci0gICAgICAgIEByZWFkT25seQotICAgICAgKi8KLSAgICAgIHJlbGF0ZWRUeXBlczog
RW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciB0eXBlLAotICAgICAgICAg
ICAgdHlwZXMgPSBFbWJlci5BKCk7Ci0KLSAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggY29t
cHV0ZWQgcHJvcGVydHkgb24gdGhlIGNsYXNzLAotICAgICAgICAvLyBhbmQgY3JlYXRlIGFuIGFy
cmF5IG9mIHRoZSB1bmlxdWUgdHlwZXMgaW52b2x2ZWQKLSAgICAgICAgLy8gaW4gcmVsYXRpb25z
aGlwcwotICAgICAgICB0aGlzLmVhY2hDb21wdXRlZFByb3BlcnR5KGZ1bmN0aW9uKG5hbWUsIG1l
dGEpIHsKLSAgICAgICAgICBpZiAobWV0YS5pc1JlbGF0aW9uc2hpcCkgewotICAgICAgICAgICAg
bWV0YS5rZXkgPSBuYW1lOwotICAgICAgICAgICAgdHlwZSA9IHR5cGVGb3JSZWxhdGlvbnNoaXBN
ZXRhKHRoaXMuc3RvcmUsIG1ldGEpOwotCi0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBz
cGVjaWZpZWQgYSBoYXNNYW55ICgiICsgbWV0YS50eXBlICsgIikgb24gIiArIG1ldGEucGFyZW50
VHlwZSArICIgYnV0ICIgKyBtZXRhLnR5cGUgKyAiIHdhcyBub3QgZm91bmQuIiwgIHR5cGUpOwot
Ci0gICAgICAgICAgICBpZiAoIXR5cGVzLmNvbnRhaW5zKHR5cGUpKSB7Ci0gICAgICAgICAgICAg
IEVtYmVyLmFzc2VydCgiVHJ5aW5nIHRvIHNpZGVsb2FkICIgKyBuYW1lICsgIiBvbiAiICsgdGhp
cy50b1N0cmluZygpICsgIiBidXQgdGhlIHR5cGUgZG9lc24ndCBleGlzdC4iLCAhIXR5cGUpOwot
ICAgICAgICAgICAgICB0eXBlcy5wdXNoKHR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgICAgfSkuY2FjaGVh
YmxlKGZhbHNlKSwKLQotICAgICAgLyoqCi0gICAgICAgIEEgbWFwIHdob3NlIGtleXMgYXJlIHRo
ZSByZWxhdGlvbnNoaXBzIG9mIGEgbW9kZWwgYW5kIHdob3NlIHZhbHVlcyBhcmUKLSAgICAgICAg
cmVsYXRpb25zaGlwIGRlc2NyaXB0b3JzLgotCi0gICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiBh
IG1vZGVsIHdpdGggdGhpcwotICAgICAgICBkZWZpbml0aW9uOgotCi0gICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgQXBwLkJsb2cgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICAgIHVz
ZXJzOiBEUy5oYXNNYW55KCd1c2VyJyksCi0gICAgICAgICAgb3duZXI6IERTLmJlbG9uZ3NUbygn
dXNlcicpLAotCi0gICAgICAgICAgcG9zdHM6IERTLmhhc01hbnkoJ3Bvc3QnKQotICAgICAgICB9
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgVGhpcyBwcm9wZXJ0eSB3b3VsZCBjb250YWluIHRo
ZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcmVsYXRp
b25zaGlwc0J5TmFtZSA9IEVtYmVyLmdldChBcHAuQmxvZywgJ3JlbGF0aW9uc2hpcHNCeU5hbWUn
KTsKLSAgICAgICAgcmVsYXRpb25zaGlwc0J5TmFtZS5nZXQoJ3VzZXJzJyk7Ci0gICAgICAgIC8v
PT4geyBrZXk6ICd1c2VycycsIGtpbmQ6ICdoYXNNYW55JywgdHlwZTogQXBwLlVzZXIgfQotICAg
ICAgICByZWxhdGlvbnNoaXBzQnlOYW1lLmdldCgnb3duZXInKTsKLSAgICAgICAgLy89PiB7IGtl
eTogJ293bmVyJywga2luZDogJ2JlbG9uZ3NUbycsIHR5cGU6IEFwcC5Vc2VyIH0KLSAgICAgICAg
YGBgCi0KLSAgICAgICAgQHByb3BlcnR5IHJlbGF0aW9uc2hpcHNCeU5hbWUKLSAgICAgICAgQHN0
YXRpYwotICAgICAgICBAdHlwZSBFbWJlci5NYXAKLSAgICAgICAgQHJlYWRPbmx5Ci0gICAgICAq
LwotICAgICAgcmVsYXRpb25zaGlwc0J5TmFtZTogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHZhciBtYXAgPSBFbWJlci5NYXAuY3JlYXRlKCk7Ci0KLSAgICAgICAgdGhpcy5l
YWNoQ29tcHV0ZWRQcm9wZXJ0eShmdW5jdGlvbihuYW1lLCBtZXRhKSB7Ci0gICAgICAgICAgaWYg
KG1ldGEuaXNSZWxhdGlvbnNoaXApIHsKLSAgICAgICAgICAgIG1ldGEua2V5ID0gbmFtZTsKLSAg
ICAgICAgICAgIHZhciByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBGcm9tTWV0YSh0aGlzLnN0
b3JlLCBtZXRhKTsKLSAgICAgICAgICAgIHJlbGF0aW9uc2hpcC50eXBlID0gdHlwZUZvclJlbGF0
aW9uc2hpcE1ldGEodGhpcy5zdG9yZSwgbWV0YSk7Ci0gICAgICAgICAgICBtYXAuc2V0KG5hbWUs
IHJlbGF0aW9uc2hpcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1
cm4gbWFwOwotICAgICAgfSkuY2FjaGVhYmxlKGZhbHNlKSwKLQotICAgICAgLyoqCi0gICAgICAg
IEEgbWFwIHdob3NlIGtleXMgYXJlIHRoZSBmaWVsZHMgb2YgdGhlIG1vZGVsIGFuZCB3aG9zZSB2
YWx1ZXMgYXJlIHN0cmluZ3MKLSAgICAgICAgZGVzY3JpYmluZyB0aGUga2luZCBvZiB0aGUgZmll
bGQuIEEgbW9kZWwncyBmaWVsZHMgYXJlIHRoZSB1bmlvbiBvZiBhbGwgb2YgaXRzCi0gICAgICAg
IGF0dHJpYnV0ZXMgYW5kIHJlbGF0aW9uc2hpcHMuCi0KLSAgICAgICAgRm9yIGV4YW1wbGU6Ci0K
LSAgICAgICAgYGBgamF2YXNjcmlwdAotCi0gICAgICAgIEFwcC5CbG9nID0gRFMuTW9kZWwuZXh0
ZW5kKHsKLSAgICAgICAgICB1c2VyczogRFMuaGFzTWFueSgndXNlcicpLAotICAgICAgICAgIG93
bmVyOiBEUy5iZWxvbmdzVG8oJ3VzZXInKSwKLQotICAgICAgICAgIHBvc3RzOiBEUy5oYXNNYW55
KCdwb3N0JyksCi0KLSAgICAgICAgICB0aXRsZTogRFMuYXR0cignc3RyaW5nJykKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgdmFyIGZpZWxkcyA9IEVtYmVyLmdldChBcHAuQmxvZywgJ2ZpZWxkcycp
OwotICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCwga2luZCkgewotICAgICAg
ICAgIGNvbnNvbGUubG9nKGZpZWxkLCBraW5kKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8g
cHJpbnRzOgotICAgICAgICAvLyB1c2VycywgaGFzTWFueQotICAgICAgICAvLyBvd25lciwgYmVs
b25nc1RvCi0gICAgICAgIC8vIHBvc3RzLCBoYXNNYW55Ci0gICAgICAgIC8vIHRpdGxlLCBhdHRy
aWJ1dGUKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQHByb3BlcnR5IGZpZWxkcwotICAgICAgICBA
c3RhdGljCi0gICAgICAgIEB0eXBlIEVtYmVyLk1hcAotICAgICAgICBAcmVhZE9ubHkKLSAgICAg
ICovCi0gICAgICBmaWVsZHM6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICB2
YXIgbWFwID0gRW1iZXIuTWFwLmNyZWF0ZSgpOwotCi0gICAgICAgIHRoaXMuZWFjaENvbXB1dGVk
UHJvcGVydHkoZnVuY3Rpb24obmFtZSwgbWV0YSkgewotICAgICAgICAgIGlmIChtZXRhLmlzUmVs
YXRpb25zaGlwKSB7Ci0gICAgICAgICAgICBtYXAuc2V0KG5hbWUsIG1ldGEua2luZCk7Ci0gICAg
ICAgICAgfSBlbHNlIGlmIChtZXRhLmlzQXR0cmlidXRlKSB7Ci0gICAgICAgICAgICBtYXAuc2V0
KG5hbWUsICdhdHRyaWJ1dGUnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IHJldHVybiBtYXA7Ci0gICAgICB9KSwKLQotICAgICAgLyoqCi0gICAgICAgIEdpdmVuIGEgY2Fs
bGJhY2ssIGl0ZXJhdGVzIG92ZXIgZWFjaCBvZiB0aGUgcmVsYXRpb25zaGlwcyBpbiB0aGUgbW9k
ZWwsCi0gICAgICAgIGludm9raW5nIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBuYW1lIG9mIGVhY2gg
cmVsYXRpb25zaGlwIGFuZCBpdHMgcmVsYXRpb25zaGlwCi0gICAgICAgIGRlc2NyaXB0b3IuCi0K
LSAgICAgICAgQG1ldGhvZCBlYWNoUmVsYXRpb25zaGlwCi0gICAgICAgIEBzdGF0aWMKLSAgICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGludm9rZQotICAg
ICAgICBAcGFyYW0ge2FueX0gYmluZGluZyB0aGUgdmFsdWUgdG8gd2hpY2ggdGhlIGNhbGxiYWNr
J3MgYHRoaXNgIHNob3VsZCBiZSBib3VuZAotICAgICAgKi8KLSAgICAgIGVhY2hSZWxhdGlvbnNo
aXA6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgIGdldCh0aGlzLCAncmVs
YXRpb25zaGlwc0J5TmFtZScpLmZvckVhY2goZnVuY3Rpb24obmFtZSwgcmVsYXRpb25zaGlwKSB7
Ci0gICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCBuYW1lLCByZWxhdGlvbnNoaXApOwot
ICAgICAgICB9KTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBHaXZlbiBhIGNhbGxi
YWNrLCBpdGVyYXRlcyBvdmVyIGVhY2ggb2YgdGhlIHR5cGVzIHJlbGF0ZWQgdG8gYSBtb2RlbCwK
LSAgICAgICAgaW52b2tpbmcgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJlbGF0ZWQgdHlwZSdzIGNs
YXNzLiBFYWNoIHR5cGUgd2lsbCBiZQotICAgICAgICByZXR1cm5lZCBqdXN0IG9uY2UsIHJlZ2Fy
ZGxlc3Mgb2YgaG93IG1hbnkgZGlmZmVyZW50IHJlbGF0aW9uc2hpcHMgaXQgaGFzCi0gICAgICAg
IHdpdGggYSBtb2RlbC4KLQotICAgICAgICBAbWV0aG9kIGVhY2hSZWxhdGVkVHlwZQotICAgICAg
ICBAc3RhdGljCi0gICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIHRoZSBjYWxsYmFj
ayB0byBpbnZva2UKLSAgICAgICAgQHBhcmFtIHthbnl9IGJpbmRpbmcgdGhlIHZhbHVlIHRvIHdo
aWNoIHRoZSBjYWxsYmFjaydzIGB0aGlzYCBzaG91bGQgYmUgYm91bmQKLSAgICAgICovCi0gICAg
ICBlYWNoUmVsYXRlZFR5cGU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAg
IGdldCh0aGlzLCAncmVsYXRlZFR5cGVzJykuZm9yRWFjaChmdW5jdGlvbih0eXBlKSB7Ci0gICAg
ICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCB0eXBlKTsKLSAgICAgICAgfSk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0KLSAgICBNb2RlbC5yZW9wZW4oewotICAgICAgLyoqCi0gICAgICAgIEdpdmVu
IGEgY2FsbGJhY2ssIGl0ZXJhdGVzIG92ZXIgZWFjaCBvZiB0aGUgcmVsYXRpb25zaGlwcyBpbiB0
aGUgbW9kZWwsCi0gICAgICAgIGludm9raW5nIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBuYW1lIG9m
IGVhY2ggcmVsYXRpb25zaGlwIGFuZCBpdHMgcmVsYXRpb25zaGlwCi0gICAgICAgIGRlc2NyaXB0
b3IuCi0KLSAgICAgICAgQG1ldGhvZCBlYWNoUmVsYXRpb25zaGlwCi0gICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IGNhbGxiYWNrIHRoZSBjYWxsYmFjayB0byBpbnZva2UKLSAgICAgICAgQHBhcmFt
IHthbnl9IGJpbmRpbmcgdGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBjYWxsYmFjaydzIGB0aGlzYCBz
aG91bGQgYmUgYm91bmQKLSAgICAgICovCi0gICAgICBlYWNoUmVsYXRpb25zaGlwOiBmdW5jdGlv
bihjYWxsYmFjaywgYmluZGluZykgewotICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmVhY2hSZWxh
dGlvbnNoaXAoY2FsbGJhY2ssIGJpbmRpbmcpOwotICAgICAgfQotICAgIH0pOwotICB9KTsKLWRl
ZmluZSgiZW1iZXItZGF0YS9saWIvc3lzdGVtL3JlbGF0aW9uc2hpcHMvaGFzX21hbnkiLCAKLSAg
WyIuLi9zdG9yZSIsIi4uL3JlbGF0aW9uc2hpcC1tZXRhIiwiZXhwb3J0cyJdLAotICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAi
dXNlIHN0cmljdCI7Ci0gICAgLyoqCi0gICAgICBAbW9kdWxlIGVtYmVyLWRhdGEKLSAgICAqLwot
Ci0gICAgdmFyIFByb21pc2VBcnJheSA9IF9fZGVwZW5kZW5jeTFfXy5Qcm9taXNlQXJyYXk7Ci0g
ICAgdmFyIGdldCA9IEVtYmVyLmdldCwgc2V0ID0gRW1iZXIuc2V0LCBzZXRQcm9wZXJ0aWVzID0g
RW1iZXIuc2V0UHJvcGVydGllczsKLSAgICB2YXIgcmVsYXRpb25zaGlwRnJvbU1ldGEgPSBfX2Rl
cGVuZGVuY3kyX18ucmVsYXRpb25zaGlwRnJvbU1ldGE7Ci0gICAgdmFyIHR5cGVGb3JSZWxhdGlv
bnNoaXBNZXRhID0gX19kZXBlbmRlbmN5Ml9fLnR5cGVGb3JSZWxhdGlvbnNoaXBNZXRhOwotCi0g
ICAgZnVuY3Rpb24gYXN5bmNIYXNNYW55KHR5cGUsIG9wdGlvbnMsIG1ldGEpIHsKLSAgICAgIHJl
dHVybiBFbWJlci5jb21wdXRlZCgnZGF0YScsIGZ1bmN0aW9uKGtleSkgewotICAgICAgICB2YXIg
cmVsYXRpb25zaGlwID0gdGhpcy5fcmVsYXRpb25zaGlwc1trZXldLAotICAgICAgICAgICAgcHJv
bWlzZUxhYmVsID0gIkRTOiBBc3luYyBoYXNNYW55ICIgKyB0aGlzICsgIiA6ICIgKyBrZXk7Ci0K
LSAgICAgICAgbWV0YS5rZXkgPSBrZXk7Ci0KLSAgICAgICAgaWYgKCFyZWxhdGlvbnNoaXApIHsK
LSAgICAgICAgICB2YXIgcmVzb2x2ZXIgPSBFbWJlci5SU1ZQLmRlZmVyKHByb21pc2VMYWJlbCk7
Ci0gICAgICAgICAgcmVsYXRpb25zaGlwID0gYnVpbGRSZWxhdGlvbnNoaXAodGhpcywga2V5LCBv
cHRpb25zLCBmdW5jdGlvbihzdG9yZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIGxpbmsgPSBk
YXRhLmxpbmtzICYmIGRhdGEubGlua3Nba2V5XTsKLSAgICAgICAgICAgIHZhciByZWw7Ci0gICAg
ICAgICAgICBpZiAobGluaykgewotICAgICAgICAgICAgICByZWwgPSBzdG9yZS5maW5kSGFzTWFu
eSh0aGlzLCBsaW5rLCByZWxhdGlvbnNoaXBGcm9tTWV0YShzdG9yZSwgbWV0YSksIHJlc29sdmVy
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJlbCA9IHN0b3JlLmZpbmRN
YW55KHRoaXMsIGRhdGFba2V5XSwgdHlwZUZvclJlbGF0aW9uc2hpcE1ldGEoc3RvcmUsIG1ldGEp
LCByZXNvbHZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYWNoZSB0aGUgcHJv
bWlzZSBzbyB3ZSBjYW4gdXNlIGl0Ci0gICAgICAgICAgICAvLyB3aGVuIHdlIGNvbWUgYmFjayBh
bmQgZG9uJ3QgbmVlZCB0byByZWJ1aWxkCi0gICAgICAgICAgICAvLyB0aGUgcmVsYXRpb25zaGlw
LgotICAgICAgICAgICAgc2V0KHJlbCwgJ3Byb21pc2UnLCByZXNvbHZlci5wcm9taXNlKTsKLSAg
ICAgICAgICAgIHJldHVybiByZWw7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgcHJvbWlzZSA9IHJlbGF0aW9uc2hpcC5nZXQoJ3Byb21pc2UnKS50aGVuKGZ1bmN0aW9u
KCkgewotICAgICAgICAgIHJldHVybiByZWxhdGlvbnNoaXA7Ci0gICAgICAgIH0sIG51bGwsICJE
UzogQXN5bmMgaGFzTWFueSByZWNvcmRzIHJlY2VpdmVkIik7Ci0KLSAgICAgICAgcmV0dXJuIFBy
b21pc2VBcnJheS5jcmVhdGUoewotICAgICAgICAgIHByb21pc2U6IHByb21pc2UKLSAgICAgICAg
fSk7Ci0gICAgICB9KS5tZXRhKG1ldGEpLnJlYWRPbmx5KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gYnVpbGRSZWxhdGlvbnNoaXAocmVjb3JkLCBrZXksIG9wdGlvbnMsIGNhbGxiYWNrKSB7Ci0g
ICAgICB2YXIgcmVscyA9IHJlY29yZC5fcmVsYXRpb25zaGlwczsKLQotICAgICAgaWYgKHJlbHNb
a2V5XSkgeyByZXR1cm4gcmVsc1trZXldOyB9Ci0KLSAgICAgIHZhciBkYXRhID0gZ2V0KHJlY29y
ZCwgJ2RhdGEnKSwKLSAgICAgICAgICBzdG9yZSA9IGdldChyZWNvcmQsICdzdG9yZScpOwotCi0g
ICAgICB2YXIgcmVsYXRpb25zaGlwID0gcmVsc1trZXldID0gY2FsbGJhY2suY2FsbChyZWNvcmQs
IHN0b3JlLCBkYXRhKTsKLQotICAgICAgcmV0dXJuIHNldFByb3BlcnRpZXMocmVsYXRpb25zaGlw
LCB7Ci0gICAgICAgIG93bmVyOiByZWNvcmQsCi0gICAgICAgIG5hbWU6IGtleSwKLSAgICAgICAg
aXNQb2x5bW9ycGhpYzogb3B0aW9ucy5wb2x5bW9ycGhpYwotICAgICAgfSk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gaGFzUmVsYXRpb25zaGlwKHR5cGUsIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlv
bnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICB2YXIgbWV0YSA9IHsKLSAgICAgICAgdHlwZTog
dHlwZSwKLSAgICAgICAgaXNSZWxhdGlvbnNoaXA6IHRydWUsCi0gICAgICAgIG9wdGlvbnM6IG9w
dGlvbnMsCi0gICAgICAgIGtpbmQ6ICdoYXNNYW55JywKLSAgICAgICAga2V5OiBudWxsCi0gICAg
ICB9OwotCi0gICAgICBpZiAob3B0aW9ucy5hc3luYykgewotICAgICAgICByZXR1cm4gYXN5bmNI
YXNNYW55KHR5cGUsIG9wdGlvbnMsIG1ldGEpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gRW1i
ZXIuY29tcHV0ZWQoJ2RhdGEnLCBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgcmV0dXJuIGJ1aWxk
UmVsYXRpb25zaGlwKHRoaXMsIGtleSwgb3B0aW9ucywgZnVuY3Rpb24oc3RvcmUsIGRhdGEpIHsK
LSAgICAgICAgICB2YXIgcmVjb3JkcyA9IGRhdGFba2V5XTsKLSAgICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBsb29rZWQgdXAgdGhlICciICsga2V5ICsgIicgcmVsYXRpb25zaGlwIG9uICciICsg
dGhpcyArICInIGJ1dCBzb21lIG9mIHRoZSBhc3NvY2lhdGVkIHJlY29yZHMgd2VyZSBub3QgbG9h
ZGVkLiBFaXRoZXIgbWFrZSBzdXJlIHRoZXkgYXJlIGFsbCBsb2FkZWQgdG9nZXRoZXIgd2l0aCB0
aGUgcGFyZW50IHJlY29yZCwgb3Igc3BlY2lmeSB0aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgYXN5
bmMgKGBEUy5oYXNNYW55KHsgYXN5bmM6IHRydWUgfSlgKSIsIEVtYmVyLkEocmVjb3JkcykuZXZl
cnlQcm9wZXJ0eSgnaXNFbXB0eScsIGZhbHNlKSk7Ci0gICAgICAgICAgcmV0dXJuIHN0b3JlLmZp
bmRNYW55KHRoaXMsIGRhdGFba2V5XSwgdHlwZUZvclJlbGF0aW9uc2hpcE1ldGEoc3RvcmUsIG1l
dGEpKTsKLSAgICAgICAgfSk7Ci0gICAgICB9KS5tZXRhKG1ldGEpLnJlYWRPbmx5KCk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICBgRFMuaGFzTWFueWAgaXMgdXNlZCB0byBkZWZpbmUgT25lLVRv
LU1hbnkgYW5kIE1hbnktVG8tTWFueQotICAgICAgcmVsYXRpb25zaGlwcyBvbiBhIFtEUy5Nb2Rl
bF0oL2FwaS9kYXRhL2NsYXNzZXMvRFMuTW9kZWwuaHRtbCkuCi0KLSAgICAgIGBEUy5oYXNNYW55
YCB0YWtlcyBhbiBvcHRpb25hbCBoYXNoIGFzIGEgc2Vjb25kIHBhcmFtZXRlciwgY3VycmVudGx5
Ci0gICAgICBzdXBwb3J0ZWQgb3B0aW9ucyBhcmU6Ci0KLSAgICAgIC0gYGFzeW5jYDogQSBib29s
ZWFuIHZhbHVlIHVzZWQgdG8gZXhwbGljaXRseSBkZWNsYXJlIHRoaXMgdG8gYmUgYW4gYXN5bmMg
cmVsYXRpb25zaGlwLgotICAgICAgLSBgaW52ZXJzZWA6IEEgc3RyaW5nIHVzZWQgdG8gaWRlbnRp
ZnkgdGhlIGludmVyc2UgcHJvcGVydHkgb24gYSByZWxhdGVkIG1vZGVsLgotCi0gICAgICAjIyMj
IE9uZS1Uby1NYW55Ci0gICAgICBUbyBkZWNsYXJlIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlw
IGJldHdlZW4gdHdvIG1vZGVscywgdXNlCi0gICAgICBgRFMuYmVsb25nc1RvYCBpbiBjb21iaW5h
dGlvbiB3aXRoIGBEUy5oYXNNYW55YCwgbGlrZSB0aGlzOgotCi0gICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICBBcHAuUG9zdCA9IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIGNvbW1lbnRzOiBE
Uy5oYXNNYW55KCdjb21tZW50JykKLSAgICAgIH0pOwotCi0gICAgICBBcHAuQ29tbWVudCA9IERT
Lk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIHBvc3Q6IERTLmJlbG9uZ3NUbygncG9zdCcpCi0gICAg
ICB9KTsKLSAgICAgIGBgYAotCi0gICAgICAjIyMjIE1hbnktVG8tTWFueQotICAgICAgVG8gZGVj
bGFyZSBhIG1hbnktdG8tbWFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gbW9kZWxzLCB1c2UK
LSAgICAgIGBEUy5oYXNNYW55YDoKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLlBv
c3QgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICB0YWdzOiBEUy5oYXNNYW55KCd0YWcnKQot
ICAgICAgfSk7Ci0KLSAgICAgIEFwcC5UYWcgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBw
b3N0czogRFMuaGFzTWFueSgncG9zdCcpCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICAj
IyMjIEV4cGxpY2l0IEludmVyc2VzCi0KLSAgICAgIEVtYmVyIERhdGEgd2lsbCBkbyBpdHMgYmVz
dCB0byBkaXNjb3ZlciB3aGljaCByZWxhdGlvbnNoaXBzIG1hcCB0bwotICAgICAgb25lIGFub3Ro
ZXIuIEluIHRoZSBvbmUtdG8tbWFueSBjb2RlIGFib3ZlLCBmb3IgZXhhbXBsZSwgRW1iZXIgRGF0
YQotICAgICAgY2FuIGZpZ3VyZSBvdXQgdGhhdCBjaGFuZ2luZyB0aGUgYGNvbW1lbnRzYCByZWxh
dGlvbnNoaXAgc2hvdWxkIHVwZGF0ZQotICAgICAgdGhlIGBwb3N0YCByZWxhdGlvbnNoaXAgb24g
dGhlIGludmVyc2UgYmVjYXVzZSBwb3N0IGlzIHRoZSBvbmx5Ci0gICAgICByZWxhdGlvbnNoaXAg
dG8gdGhhdCBtb2RlbC4KLQotICAgICAgSG93ZXZlciwgc29tZXRpbWVzIHlvdSBtYXkgaGF2ZSBt
dWx0aXBsZSBgYmVsb25nc1RvYC9gaGFzTWFueXNgIGZvciB0aGUKLSAgICAgIHNhbWUgdHlwZS4g
WW91IGNhbiBzcGVjaWZ5IHdoaWNoIHByb3BlcnR5IG9uIHRoZSByZWxhdGVkIG1vZGVsIGlzCi0g
ICAgICB0aGUgaW52ZXJzZSB1c2luZyBgRFMuaGFzTWFueWAncyBgaW52ZXJzZWAgb3B0aW9uOgot
Ci0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYmVsb25nc1RvID0gRFMuYmVsb25nc1Rv
LAotICAgICAgICAgIGhhc01hbnkgPSBEUy5oYXNNYW55OwotCi0gICAgICBBcHAuQ29tbWVudCA9
IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIG9uZVBvc3Q6IGJlbG9uZ3NUbygncG9zdCcpLAot
ICAgICAgICB0d29Qb3N0OiBiZWxvbmdzVG8oJ3Bvc3QnKSwKLSAgICAgICAgcmVkUG9zdDogYmVs
b25nc1RvKCdwb3N0JyksCi0gICAgICAgIGJsdWVQb3N0OiBiZWxvbmdzVG8oJ3Bvc3QnKQotICAg
ICAgfSk7Ci0KLSAgICAgIEFwcC5Qb3N0ID0gRFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgY29t
bWVudHM6IGhhc01hbnkoJ2NvbW1lbnQnLCB7Ci0gICAgICAgICAgaW52ZXJzZTogJ3JlZFBvc3Qn
Ci0gICAgICAgIH0pCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBZb3UgY2FuIGFsc28g
c3BlY2lmeSBhbiBpbnZlcnNlIG9uIGEgYGJlbG9uZ3NUb2AsIHdoaWNoIHdvcmtzIGhvdwotICAg
ICAgeW91J2QgZXhwZWN0LgotCi0gICAgICBAbmFtZXNwYWNlCi0gICAgICBAbWV0aG9kIGhhc01h
bnkKLSAgICAgIEBmb3IgRFMKLSAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIERTLk1vZGVsfSB0eXBl
IHRoZSBtb2RlbCB0eXBlIG9mIHRoZSByZWxhdGlvbnNoaXAKLSAgICAgIEBwYXJhbSB7T2JqZWN0
fSBvcHRpb25zIGEgaGFzaCBvZiBvcHRpb25zCi0gICAgICBAcmV0dXJuIHtFbWJlci5jb21wdXRl
ZH0gcmVsYXRpb25zaGlwCi0gICAgKi8KLSAgICBmdW5jdGlvbiBoYXNNYW55KHR5cGUsIG9wdGlv
bnMpIHsKLSAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgb3B0
aW9ucyA9IHR5cGU7Ci0gICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gaGFzUmVsYXRpb25zaGlwKHR5cGUsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBoYXNNYW55OwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9s
aWIvc3lzdGVtL3N0b3JlIiwgCi0gIFsiLi9hZGFwdGVyIiwiZW1iZXItaW5mbGVjdG9yL2xpYi9z
eXN0ZW0vc3RyaW5nIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLypn
bG9iYWxzIEVtYmVyKi8KLSAgICAvKmpzaGludCBlcW51bGw6dHJ1ZSovCi0KLSAgICAvKioKLSAg
ICAgIEBtb2R1bGUgZW1iZXItZGF0YQotICAgICovCi0KLSAgICB2YXIgSW52YWxpZEVycm9yID0g
X19kZXBlbmRlbmN5MV9fLkludmFsaWRFcnJvcjsKLSAgICB2YXIgQWRhcHRlciA9IF9fZGVwZW5k
ZW5jeTFfXy5BZGFwdGVyOwotICAgIHZhciBzaW5ndWxhcml6ZSA9IF9fZGVwZW5kZW5jeTJfXy5z
aW5ndWxhcml6ZTsKLSAgICB2YXIgZ2V0ID0gRW1iZXIuZ2V0LCBzZXQgPSBFbWJlci5zZXQ7Ci0g
ICAgdmFyIG9uY2UgPSBFbWJlci5ydW4ub25jZTsKLSAgICB2YXIgaXNOb25lID0gRW1iZXIuaXNO
b25lOwotICAgIHZhciBmb3JFYWNoID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLmZvckVhY2g7Ci0g
ICAgdmFyIGluZGV4T2YgPSBFbWJlci5FbnVtZXJhYmxlVXRpbHMuaW5kZXhPZjsKLSAgICB2YXIg
bWFwID0gRW1iZXIuRW51bWVyYWJsZVV0aWxzLm1hcDsKLSAgICB2YXIgUHJvbWlzZSA9IEVtYmVy
LlJTVlAuUHJvbWlzZTsKLSAgICB2YXIgY29weSA9IEVtYmVyLmNvcHk7Ci0gICAgdmFyIFN0b3Jl
LCBQcm9taXNlT2JqZWN0LCBQcm9taXNlQXJyYXksIFJlY29yZEFycmF5TWFuYWdlciwgTW9kZWw7
Ci0KLSAgICB2YXIgY2FtZWxpemUgPSBFbWJlci5TdHJpbmcuY2FtZWxpemU7Ci0KLSAgICAvLyBJ
bXBsZW1lbnRvcnMgTm90ZToKLSAgICAvLwotICAgIC8vICAgVGhlIHZhcmlhYmxlcyBpbiB0aGlz
IGZpbGUgYXJlIGNvbnNpc3RlbnRseSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwot
ICAgIC8vICAgc2NoZW1lOgotICAgIC8vCi0gICAgLy8gICAqICtpZCsgbWVhbnMgYW4gaWRlbnRp
ZmllciBtYW5hZ2VkIGJ5IGFuIGV4dGVybmFsIHNvdXJjZSwgcHJvdmlkZWQgaW5zaWRlCi0gICAg
Ly8gICAgIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoYXQgc291cmNlLiBUaGVzZSBhcmUgYWx3YXlz
IGNvZXJjZWQgdG8gYmUgc3RyaW5ncwotICAgIC8vICAgICBiZWZvcmUgYmVpbmcgdXNlZCBpbnRl
cm5hbGx5LgotICAgIC8vICAgKiArY2xpZW50SWQrIG1lYW5zIGEgdHJhbnNpZW50IG51bWVyaWNh
bCBpZGVudGlmaWVyIGdlbmVyYXRlZCBhdCBydW50aW1lIGJ5Ci0gICAgLy8gICAgIHRoZSBkYXRh
IHN0b3JlLiBJdCBpcyBpbXBvcnRhbnQgcHJpbWFyaWx5IGJlY2F1c2UgbmV3bHkgY3JlYXRlZCBv
YmplY3RzIG1heQotICAgIC8vICAgICBub3QgeWV0IGhhdmUgYW4gZXh0ZXJuYWxseSBnZW5lcmF0
ZWQgaWQuCi0gICAgLy8gICAqICtyZWZlcmVuY2UrIG1lYW5zIGEgcmVjb3JkIHJlZmVyZW5jZSBv
YmplY3QsIHdoaWNoIGhvbGRzIG1ldGFkYXRhIGFib3V0IGEKLSAgICAvLyAgICAgcmVjb3JkLCBl
dmVuIGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gZnVsbHkgbWF0ZXJpYWxpemVkLgotICAgIC8vICAg
KiArdHlwZSsgbWVhbnMgYSBzdWJjbGFzcyBvZiBEUy5Nb2RlbC4KLQotICAgIC8vIFVzZWQgYnkg
dGhlIHN0b3JlIHRvIG5vcm1hbGl6ZSBJRHMgZW50ZXJpbmcgdGhlIHN0b3JlLiAgRGVzcGl0ZSB0
aGUgZmFjdAotICAgIC8vIHRoYXQgZGV2ZWxvcGVycyBtYXkgcHJvdmlkZSBJRHMgYXMgbnVtYmVy
cyAoZS5nLiwgYHN0b3JlLmZpbmQoUGVyc29uLCAxKWApLAotICAgIC8vIGl0IGlzIGltcG9ydGFu
dCB0aGF0IGludGVybmFsbHkgd2UgdXNlIHN0cmluZ3MsIHNpbmNlIElEcyBtYXkgYmUgc2VyaWFs
aXplZAotICAgIC8vIGFuZCBsb3NlIHR5cGUgaW5mb3JtYXRpb24uICBGb3IgZXhhbXBsZSwgRW1i
ZXIncyByb3V0ZXIgbWF5IHB1dCBhIHJlY29yZCdzCi0gICAgLy8gSUQgaW50byB0aGUgVVJMLCBh
bmQgaWYgd2UgbGF0ZXIgdHJ5IHRvIGRlc2VyaWFsaXplIHRoYXQgVVJMIGFuZCBmaW5kIHRoZQot
ICAgIC8vIGNvcnJlc3BvbmRpbmcgcmVjb3JkLCB3ZSB3aWxsIG5vdCBrbm93IGlmIGl0IGlzIGEg
c3RyaW5nIG9yIGEgbnVtYmVyLgotICAgIGZ1bmN0aW9uIGNvZXJjZUlkKGlkKSB7Ci0gICAgICBy
ZXR1cm4gaWQgPT0gbnVsbCA/IG51bGwgOiBpZCsnJzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
IFRoZSBzdG9yZSBjb250YWlucyBhbGwgb2YgdGhlIGRhdGEgZm9yIHJlY29yZHMgbG9hZGVkIGZy
b20gdGhlIHNlcnZlci4KLSAgICAgIEl0IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGNyZWF0aW5n
IGluc3RhbmNlcyBvZiBgRFMuTW9kZWxgIHRoYXQgd3JhcAotICAgICAgdGhlIGluZGl2aWR1YWwg
ZGF0YSBmb3IgYSByZWNvcmQsIHNvIHRoYXQgdGhleSBjYW4gYmUgYm91bmQgdG8gaW4geW91cgot
ICAgICAgSGFuZGxlYmFycyB0ZW1wbGF0ZXMuCi0KLSAgICAgIERlZmluZSB5b3VyIGFwcGxpY2F0
aW9uJ3Mgc3RvcmUgbGlrZSB0aGlzOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBNeUFw
cC5TdG9yZSA9IERTLlN0b3JlLmV4dGVuZCgpOwotICAgICAgYGBgCi0KLSAgICAgIE1vc3QgRW1i
ZXIuanMgYXBwbGljYXRpb25zIHdpbGwgb25seSBoYXZlIGEgc2luZ2xlIGBEUy5TdG9yZWAgdGhh
dCBpcwotICAgICAgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHRoZWlyIGBFbWJlci5BcHBsaWNh
dGlvbmAuCi0KLSAgICAgIFlvdSBjYW4gcmV0cmlldmUgbW9kZWxzIGZyb20gdGhlIHN0b3JlIGlu
IHNldmVyYWwgd2F5cy4gVG8gcmV0cmlldmUgYSByZWNvcmQKLSAgICAgIGZvciBhIHNwZWNpZmlj
IGlkLCB1c2UgYERTLlN0b3JlYCdzIGBmaW5kKClgIG1ldGhvZDoKLQotICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgdmFyIHBlcnNvbiA9IHN0b3JlLmZpbmQoJ3BlcnNvbicsIDEyMyk7Ci0gICAg
ICBgYGAKLQotICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBoYXMgbXVsdGlwbGUgYERTLlN0b3Jl
YCBpbnN0YW5jZXMgKGFuIHVudXN1YWwgY2FzZSksIHlvdSBjYW4KLSAgICAgIHNwZWNpZnkgd2hp
Y2ggc3RvcmUgc2hvdWxkIGJlIHVzZWQ6Ci0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZh
ciBwZXJzb24gPSBzdG9yZS5maW5kKCdwZXJzb24nLCAxMjMpOwotICAgICAgYGBgCi0KLSAgICAg
IEJ5IGRlZmF1bHQsIHRoZSBzdG9yZSB3aWxsIHRhbGsgdG8geW91ciBiYWNrZW5kIHVzaW5nIGEg
c3RhbmRhcmQKLSAgICAgIFJFU1QgbWVjaGFuaXNtLiBZb3UgY2FuIGN1c3RvbWl6ZSBob3cgdGhl
IHN0b3JlIHRhbGtzIHRvIHlvdXIKLSAgICAgIGJhY2tlbmQgYnkgc3BlY2lmeWluZyBhIGN1c3Rv
bSBhZGFwdGVyOgotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgTXlBcHAuc3RvcmUgPSBE
Uy5TdG9yZS5jcmVhdGUoewotICAgICAgICAgYWRhcHRlcjogJ015QXBwLkN1c3RvbUFkYXB0ZXIn
Ci0gICAgICAgfSk7Ci0gICAgICAgYGBgCi0KLSAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91
dCB3cml0aW5nIGEgY3VzdG9tIGFkYXB0ZXIgYnkgcmVhZGluZyB0aGUgYERTLkFkYXB0ZXJgCi0g
ICAgICBkb2N1bWVudGF0aW9uLgotCi0gICAgICAjIyMgU3RvcmUgY3JlYXRlUmVjb3JkKCkgdnMu
IHB1c2goKSB2cy4gcHVzaFBheWxvYWQoKSB2cy4gdXBkYXRlKCkKLQotICAgICAgVGhlIHN0b3Jl
IHByb3ZpZGVzIG11bHRpcGxlIHdheXMgdG8gY3JlYXRlIG5ldyByZWNvcmRzIG9iamVjdC4gVGhl
eSBoYXZlCi0gICAgICBzb21lIHN1YnRsZSBkaWZmZXJlbmNlcyBpbiB0aGVpciB1c2Ugd2hpY2gg
YXJlIGRldGFpbGVkIGJlbG93OgotCi0gICAgICBbY3JlYXRlUmVjb3JkXSgjbWV0aG9kX2NyZWF0
ZVJlY29yZCkgaXMgdXNlZCBmb3IgY3JlYXRpbmcgbmV3Ci0gICAgICByZWNvcmRzIG9uIHRoZSBj
bGllbnQgc2lkZS4gVGhpcyB3aWxsIHJldHVybiBhIG5ldyByZWNvcmQgaW4gdGhlCi0gICAgICBg
Y3JlYXRlZC51bmNvbW1pdHRlZGAgc3RhdGUuIEluIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyByZWNv
cmQgdG8gdGhlCi0gICAgICBiYWNrZW5kIHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBgcmVjb3JkLnNh
dmUoKWAuCi0KLSAgICAgIFtwdXNoXSgjbWV0aG9kX3B1c2gpIGlzIHVzZWQgdG8gbm90aWZ5IEVt
YmVyIERhdGEncyBzdG9yZSBvZiBuZXcgb3IKLSAgICAgIHVwZGF0ZWQgcmVjb3JkcyB0aGF0IGV4
aXN0IGluIHRoZSBiYWNrZW5kLiBUaGlzIHdpbGwgcmV0dXJuIGEgcmVjb3JkCi0gICAgICBpbiB0
aGUgYGxvYWRlZC5zYXZlZGAgc3RhdGUuIFRoZSBwcmltYXJ5IHVzZS1jYXNlIGZvciBgc3RvcmUj
cHVzaGAgaXMKLSAgICAgIHRvIG5vdGlmeSBFbWJlciBEYXRhIGFib3V0IHJlY29yZCB1cGRhdGVz
IHRoYXQgaGFwcGVuCi0gICAgICBvdXRzaWRlIG9mIHRoZSBub3JtYWwgYWRhcHRlciBtZXRob2Rz
IChmb3IgZXhhbXBsZQotICAgICAgW1NTRV0oaHR0cDovL2Rldi53My5vcmcvaHRtbDUvZXZlbnRz
b3VyY2UvKSBvciBbV2ViCi0gICAgICBTb2NrZXRzXShodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5
L1dELXdlYnNvY2tldHMtMjAwOTEyMjIvKSkuCi0KLSAgICAgIFtwdXNoUGF5bG9hZF0oI21ldGhv
ZF9wdXNoUGF5bG9hZCkgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvcgotICAgICAgYHN0b3Jl
I3B1c2hgIHRoYXQgd2lsbCBkZXNlcmlhbGl6ZSBwYXlsb2FkcyBpZiB0aGUKLSAgICAgIFNlcmlh
bGl6ZXIgaW1wbGVtZW50cyBhIGBwdXNoUGF5bG9hZGAgbWV0aG9kLgotCi0gICAgICBbdXBkYXRl
XSgjbWV0aG9kX3VwZGF0ZSkgd29ya3MgbGlrZSBgcHVzaGAsIGV4Y2VwdCBpdCBjYW4gaGFuZGxl
Ci0gICAgICBwYXJ0aWFsIGF0dHJpYnV0ZXMgd2l0aG91dCBvdmVyd3JpdGluZyB0aGUgZXhpc3Rp
bmcgcmVjb3JkCi0gICAgICBwcm9wZXJ0aWVzLgotCi0gICAgICBOb3RlOiBXaGVuIGNyZWF0aW5n
IGEgbmV3IHJlY29yZCB1c2luZyBhbnkgb2YgdGhlIGFib3ZlIG1ldGhvZHMKLSAgICAgIEVtYmVy
IERhdGEgd2lsbCB1cGRhdGUgYERTLlJlY29yZEFycmF5YHMgc3VjaCBhcyB0aG9zZSByZXR1cm5l
ZCBieQotICAgICAgYHN0b3JlI2FsbCgpYCwgYHN0b3JlI2ZpbmRBbGwoKWAgb3IgYHN0b3JlI2Zp
bHRlcigpYC4gVGhpcyBtZWFucyBhbnkKLSAgICAgIGRhdGEgYmluZGluZ3Mgb3IgY29tcHV0ZWQg
cHJvcGVydGllcyB0aGF0IGRlcGVuZCBvbiB0aGUgUmVjb3JkQXJyYXkKLSAgICAgIHdpbGwgYXV0
b21hdGljYWxseSBiZSBzeW5jZWQgdG8gaW5jbHVkZSB0aGUgbmV3IG9yIHVwZGF0ZWQgcmVjb3Jk
Ci0gICAgICB2YWx1ZXMuCi0KLSAgICAgIEBjbGFzcyBTdG9yZQotICAgICAgQG5hbWVzcGFjZSBE
UwotICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgKi8KLSAgICBTdG9yZSA9IEVtYmVy
Lk9iamVjdC5leHRlbmQoewotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBpbml0Ci0gICAg
ICAgIEBwcml2YXRlCi0gICAgICAqLwotICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
IC8vIGludGVybmFsIGJvb2trZWVwaW5nOyBub3Qgb2JzZXJ2YWJsZQotICAgICAgICBpZiAoIVJl
Y29yZEFycmF5TWFuYWdlcikgeyBSZWNvcmRBcnJheU1hbmFnZXIgPSByZXF1aXJlTW9kdWxlKCJl
bWJlci1kYXRhL2xpYi9zeXN0ZW0vcmVjb3JkX2FycmF5X21hbmFnZXIiKVsiZGVmYXVsdCJdOyB9
Ci0gICAgICAgIHRoaXMudHlwZU1hcHMgPSB7fTsKLSAgICAgICAgdGhpcy5yZWNvcmRBcnJheU1h
bmFnZXIgPSBSZWNvcmRBcnJheU1hbmFnZXIuY3JlYXRlKHsKLSAgICAgICAgICBzdG9yZTogdGhp
cwotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5fcmVsYXRpb25zaGlwQ2hhbmdlcyA9IHt9Owot
ICAgICAgICB0aGlzLl9wZW5kaW5nU2F2ZSA9IFtdOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIFRoZSBhZGFwdGVyIHRvIHVzZSB0byBjb21tdW5pY2F0ZSB0byBhIGJhY2tlbmQgc2Vy
dmVyIG9yIG90aGVyIHBlcnNpc3RlbmNlIGxheWVyLgotCi0gICAgICAgIFRoaXMgY2FuIGJlIHNw
ZWNpZmllZCBhcyBhbiBpbnN0YW5jZSwgY2xhc3MsIG9yIHN0cmluZy4KLQotICAgICAgICBJZiB5
b3Ugd2FudCB0byBzcGVjaWZ5IGBBcHAuQ3VzdG9tQWRhcHRlcmAgYXMgYSBzdHJpbmcsIGRvOgot
Ci0gICAgICAgIGBgYGpzCi0gICAgICAgIGFkYXB0ZXI6ICdjdXN0b20nCi0gICAgICAgIGBgYAot
Ci0gICAgICAgIEBwcm9wZXJ0eSBhZGFwdGVyCi0gICAgICAgIEBkZWZhdWx0IERTLlJFU1RBZGFw
dGVyCi0gICAgICAgIEB0eXBlIHtEUy5BZGFwdGVyfFN0cmluZ30KLSAgICAgICovCi0gICAgICBh
ZGFwdGVyOiAnLXJlc3QnLAotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyBhIEpTT04gcmVw
cmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCB1c2luZyBhIGN1c3RvbQotICAgICAgICB0eXBlLXNw
ZWNpZmljIHNlcmlhbGl6ZXIsIGlmIG9uZSBleGlzdHMuCi0KLSAgICAgICAgVGhlIGF2YWlsYWJs
ZSBvcHRpb25zIGFyZToKLQotICAgICAgICAqIGBpbmNsdWRlSWRgOiBgdHJ1ZWAgaWYgdGhlIHJl
Y29yZCdzIElEIHNob3VsZCBiZSBpbmNsdWRlZCBpbgotICAgICAgICAgIHRoZSBKU09OIHJlcHJl
c2VudGF0aW9uCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemUKLSAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkIHRoZSByZWNvcmQgdG8gc2VyaWFsaXpl
Ci0gICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFuIG9wdGlvbnMgaGFzaAotICAgICAg
Ki8KLSAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24ocmVjb3JkLCBvcHRpb25zKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLnNlcmlhbGl6ZXJGb3IocmVjb3JkLmNvbnN0cnVjdG9yLnR5cGVLZXkpLnNl
cmlhbGl6ZShyZWNvcmQsIG9wdGlvbnMpOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAg
IFRoaXMgcHJvcGVydHkgcmV0dXJucyB0aGUgYWRhcHRlciwgYWZ0ZXIgcmVzb2x2aW5nIGEgcG9z
c2libGUKLSAgICAgICAgc3RyaW5nIGtleS4KLQotICAgICAgICBJZiB0aGUgc3VwcGxpZWQgYGFk
YXB0ZXJgIHdhcyBhIGNsYXNzLCBvciBhIFN0cmluZyBwcm9wZXJ0eQotICAgICAgICBwYXRoIHJl
c29sdmVkIHRvIGEgY2xhc3MsIHRoaXMgcHJvcGVydHkgd2lsbCBpbnN0YW50aWF0ZSB0aGUKLSAg
ICAgICAgY2xhc3MuCi0KLSAgICAgICAgVGhpcyBwcm9wZXJ0eSBpcyBjYWNoZWFibGUsIHNvIHRo
ZSBzYW1lIGluc3RhbmNlIG9mIGEgc3BlY2lmaWVkCi0gICAgICAgIGFkYXB0ZXIgY2xhc3Mgc2hv
dWxkIGJlIHVzZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgc3RvcmUuCi0KLSAgICAgICAgQHBy
b3BlcnR5IGRlZmF1bHRBZGFwdGVyCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEByZXR1cm4g
RFMuQWRhcHRlcgotICAgICAgKi8KLSAgICAgIGRlZmF1bHRBZGFwdGVyOiBFbWJlci5jb21wdXRl
ZCgnYWRhcHRlcicsIGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgYWRhcHRlciA9IGdldCh0aGlz
LCAnYWRhcHRlcicpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgnWW91IHRyaWVkIHRvIHNldCBg
YWRhcHRlcmAgcHJvcGVydHkgdG8gYW4gaW5zdGFuY2Ugb2YgYERTLkFkYXB0ZXJgLCB3aGVyZSBp
dCBzaG91bGQgYmUgYSBuYW1lIG9yIGEgZmFjdG9yeScsICEoYWRhcHRlciBpbnN0YW5jZW9mIEFk
YXB0ZXIpKTsKLQotICAgICAgICBpZiAodHlwZW9mIGFkYXB0ZXIgPT09ICdzdHJpbmcnKSB7Ci0g
ICAgICAgICAgYWRhcHRlciA9IHRoaXMuY29udGFpbmVyLmxvb2t1cCgnYWRhcHRlcjonICsgYWRh
cHRlcikgfHwgdGhpcy5jb250YWluZXIubG9va3VwKCdhZGFwdGVyOmFwcGxpY2F0aW9uJykgfHwg
dGhpcy5jb250YWluZXIubG9va3VwKCdhZGFwdGVyOi1yZXN0Jyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoRFMuQWRhcHRlci5kZXRlY3QoYWRhcHRlcikpIHsKLSAgICAgICAgICBhZGFwdGVy
ID0gYWRhcHRlci5jcmVhdGUoewotICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5l
cgotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGFkYXB0ZXI7Ci0g
ICAgICB9KSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAvLyAuIENS
RUFURSBORVcgUkVDT1JEIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi0gICAg
ICAvKioKLSAgICAgICAgQ3JlYXRlIGEgbmV3IHJlY29yZCBpbiB0aGUgY3VycmVudCBzdG9yZS4g
VGhlIHByb3BlcnRpZXMgcGFzc2VkCi0gICAgICAgIHRvIHRoaXMgbWV0aG9kIGFyZSBzZXQgb24g
dGhlIG5ld2x5IGNyZWF0ZWQgcmVjb3JkLgotCi0gICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBpbnN0
YW5jZSBvZiBgQXBwLlBvc3RgOgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIHN0b3JlLmNyZWF0
ZVJlY29yZCgncG9zdCcsIHsKLSAgICAgICAgICB0aXRsZTogIlJhaWxzIGlzIG9tYWthc2UiCi0g
ICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIGNyZWF0ZVJlY29yZAot
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcHJv
cGVydGllcyBhIGhhc2ggb2YgcHJvcGVydGllcyB0byBzZXQgb24gdGhlCi0gICAgICAgICAgbmV3
bHkgY3JlYXRlZCByZWNvcmQuCi0gICAgICAgIEByZXR1cm4ge0RTLk1vZGVsfSByZWNvcmQKLSAg
ICAgICovCi0gICAgICBjcmVhdGVSZWNvcmQ6IGZ1bmN0aW9uKHR5cGUsIHByb3BlcnRpZXMpIHsK
LSAgICAgICAgdHlwZSA9IHRoaXMubW9kZWxGb3IodHlwZSk7Ci0KLSAgICAgICAgcHJvcGVydGll
cyA9IGNvcHkocHJvcGVydGllcykgfHwge307Ci0KLSAgICAgICAgLy8gSWYgdGhlIHBhc3NlZCBw
cm9wZXJ0aWVzIGRvIG5vdCBpbmNsdWRlIGEgcHJpbWFyeSBrZXksCi0gICAgICAgIC8vIGdpdmUg
dGhlIGFkYXB0ZXIgYW4gb3Bwb3J0dW5pdHkgdG8gZ2VuZXJhdGUgb25lLiBUeXBpY2FsbHksCi0g
ICAgICAgIC8vIGNsaWVudC1zaWRlIElEIGdlbmVyYXRvcnMgd2lsbCB1c2Ugc29tZXRoaW5nIGxp
a2UgdXVpZC5qcwotICAgICAgICAvLyB0byBhdm9pZCBjb25mbGljdHMuCi0KLSAgICAgICAgaWYg
KGlzTm9uZShwcm9wZXJ0aWVzLmlkKSkgewotICAgICAgICAgIHByb3BlcnRpZXMuaWQgPSB0aGlz
Ll9nZW5lcmF0ZUlkKHR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29lcmNlIElEIHRv
IGEgc3RyaW5nCi0gICAgICAgIHByb3BlcnRpZXMuaWQgPSBjb2VyY2VJZChwcm9wZXJ0aWVzLmlk
KTsKLQotICAgICAgICB2YXIgcmVjb3JkID0gdGhpcy5idWlsZFJlY29yZCh0eXBlLCBwcm9wZXJ0
aWVzLmlkKTsKLQotICAgICAgICAvLyBNb3ZlIHRoZSByZWNvcmQgb3V0IG9mIGl0cyBpbml0aWFs
IGBlbXB0eWAgc3RhdGUgaW50bwotICAgICAgICAvLyB0aGUgYGxvYWRlZGAgc3RhdGUuCi0gICAg
ICAgIHJlY29yZC5sb2FkZWREYXRhKCk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0aWVz
IHNwZWNpZmllZCBvbiB0aGUgcmVjb3JkLgotICAgICAgICByZWNvcmQuc2V0UHJvcGVydGllcyhw
cm9wZXJ0aWVzKTsKLQotICAgICAgICByZXR1cm4gcmVjb3JkOwotICAgICAgfSwKLQotICAgICAg
LyoqCi0gICAgICAgIElmIHBvc3NpYmxlLCB0aGlzIG1ldGhvZCBhc2tzIHRoZSBhZGFwdGVyIHRv
IGdlbmVyYXRlIGFuIElEIGZvcgotICAgICAgICBhIG5ld2x5IGNyZWF0ZWQgcmVjb3JkLgotCi0g
ICAgICAgIEBtZXRob2QgX2dlbmVyYXRlSWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgICAgQHJldHVybiB7U3RyaW5nfSBpZiB0aGUgYWRhcHRl
ciBjYW4gZ2VuZXJhdGUgb25lLCBhbiBJRAotICAgICAgKi8KLSAgICAgIF9nZW5lcmF0ZUlkOiBm
dW5jdGlvbih0eXBlKSB7Ci0gICAgICAgIHZhciBhZGFwdGVyID0gdGhpcy5hZGFwdGVyRm9yKHR5
cGUpOwotCi0gICAgICAgIGlmIChhZGFwdGVyICYmIGFkYXB0ZXIuZ2VuZXJhdGVJZEZvclJlY29y
ZCkgewotICAgICAgICAgIHJldHVybiBhZGFwdGVyLmdlbmVyYXRlSWRGb3JSZWNvcmQodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0sCi0KLSAgICAgIC8v
IC4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAvLyAuIERFTEVURSBSRUNPUkQgLgotICAgICAgLy8g
Li4uLi4uLi4uLi4uLi4uLi4KLQotICAgICAgLyoqCi0gICAgICAgIEZvciBzeW1tZXRyeSwgYSBy
ZWNvcmQgY2FuIGJlIGRlbGV0ZWQgdmlhIHRoZSBzdG9yZS4KLQotICAgICAgICBFeGFtcGxlCi0K
LSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICB2YXIgcG9zdCA9IHN0b3JlLmNyZWF0ZVJl
Y29yZCgncG9zdCcsIHsKLSAgICAgICAgICB0aXRsZTogIlJhaWxzIGlzIG9tYWthc2UiCi0gICAg
ICAgIH0pOwotCi0gICAgICAgIHN0b3JlLmRlbGV0ZVJlY29yZChwb3N0KTsKLSAgICAgICAgYGBg
Ci0KLSAgICAgICAgQG1ldGhvZCBkZWxldGVSZWNvcmQKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2Rl
bH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgZGVsZXRlUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQp
IHsKLSAgICAgICAgcmVjb3JkLmRlbGV0ZVJlY29yZCgpOwotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIEZvciBzeW1tZXRyeSwgYSByZWNvcmQgY2FuIGJlIHVubG9hZGVkIHZpYSB0aGUg
c3RvcmUuIE9ubHkKLSAgICAgICAgbm9uLWRpcnR5IHJlY29yZHMgY2FuIGJlIHVubG9hZGVkLgot
Ci0gICAgICAgIEV4YW1wbGUKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHN0b3Jl
LmZpbmQoJ3Bvc3QnLCAxKS50aGVuKGZ1bmN0aW9uKHBvc3QpIHsKLSAgICAgICAgICBzdG9yZS51
bmxvYWRSZWNvcmQocG9zdCk7Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBA
bWV0aG9kIHVubG9hZFJlY29yZAotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAg
ICAgICovCi0gICAgICB1bmxvYWRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICBy
ZWNvcmQudW5sb2FkUmVjb3JkKCk7Ci0gICAgICB9LAotCi0gICAgICAvLyAuLi4uLi4uLi4uLi4u
Li4uCi0gICAgICAvLyAuIEZJTkQgUkVDT1JEUyAuCi0gICAgICAvLyAuLi4uLi4uLi4uLi4uLi4u
Ci0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGludG8g
ZmluZGluZyByZWNvcmRzLiBUaGUgZmlyc3QgcGFyYW1ldGVyIHRvCi0gICAgICAgIHRoaXMgbWV0
aG9kIGlzIHRoZSBtb2RlbCdzIG5hbWUgYXMgYSBzdHJpbmcuCi0KLSAgICAgICAgLS0tCi0KLSAg
ICAgICAgVG8gZmluZCBhIHJlY29yZCBieSBJRCwgcGFzcyB0aGUgYGlkYCBhcyB0aGUgc2Vjb25k
IHBhcmFtZXRlcjoKLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHN0b3JlLmZpbmQo
J3BlcnNvbicsIDEpOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGUgYGZpbmRgIG1ldGhvZCB3
aWxsIGFsd2F5cyByZXR1cm4gYSAqKnByb21pc2UqKiB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQKLSAg
ICAgICAgd2l0aCB0aGUgcmVjb3JkLiBJZiB0aGUgcmVjb3JkIHdhcyBhbHJlYWR5IGluIHRoZSBz
dG9yZSwgdGhlIHByb21pc2Ugd2lsbAotICAgICAgICBiZSByZXNvbHZlZCBpbW1lZGlhdGVseS4g
T3RoZXJ3aXNlLCB0aGUgc3RvcmUgd2lsbCBhc2sgdGhlIGFkYXB0ZXIncyBgZmluZGAKLSAgICAg
ICAgbWV0aG9kIHRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBkYXRhLgotCi0gICAgICAgIFRoZSBgZmlu
ZGAgbWV0aG9kIHdpbGwgYWx3YXlzIHJlc29sdmUgaXRzIHByb21pc2Ugd2l0aCB0aGUgc2FtZSBv
YmplY3QgZm9yCi0gICAgICAgIGEgZ2l2ZW4gdHlwZSBhbmQgYGlkYC4KLQotICAgICAgICAtLS0K
LQotICAgICAgICBUbyBmaW5kIGFsbCByZWNvcmRzIGZvciBhIHR5cGUsIGNhbGwgYGZpbmRgIHdp
dGggbm8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgc3RvcmUuZmluZCgncGVyc29uJyk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIFRoaXMg
d2lsbCBhc2sgdGhlIGFkYXB0ZXIncyBgZmluZEFsbGAgbWV0aG9kIHRvIGZpbmQgdGhlIHJlY29y
ZHMgZm9yIHRoZQotICAgICAgICBnaXZlbiB0eXBlLCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0
IHdpbGwgYmUgcmVzb2x2ZWQgb25jZSB0aGUgc2VydmVyCi0gICAgICAgIHJldHVybnMgdGhlIHZh
bHVlcy4KLQotICAgICAgICAtLS0KLQotICAgICAgICBUbyBmaW5kIGEgcmVjb3JkIGJ5IGEgcXVl
cnksIGNhbGwgYGZpbmRgIHdpdGggYSBoYXNoIGFzIHRoZSBzZWNvbmQKLSAgICAgICAgcGFyYW1l
dGVyOgotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgc3RvcmUuZmluZCgncGVyc29u
JywgeyBwYWdlOiAxIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUaGlzIHdpbGwgYXNrIHRo
ZSBhZGFwdGVyJ3MgYGZpbmRRdWVyeWAgbWV0aG9kIHRvIGZpbmQgdGhlIHJlY29yZHMgZm9yCi0g
ICAgICAgIHRoZSBxdWVyeSwgYW5kIHJldHVybiBhIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29s
dmVkIG9uY2UgdGhlIHNlcnZlcgotICAgICAgICByZXNwb25kcy4KLQotICAgICAgICBAbWV0aG9k
IGZpbmQKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5
cGUKLSAgICAgICAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfEludGVnZXJ8bnVsbH0gaWQKLSAgICAg
ICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgKi8KLSAgICAgIGZpbmQ6IGZ1bmN0
aW9uKHR5cGUsIGlkKSB7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG5lZWQgdG8gcGFzcyBh
IHR5cGUgdG8gdGhlIHN0b3JlJ3MgZmluZCBtZXRob2QiLCBhcmd1bWVudHMubGVuZ3RoID49IDEp
OwotICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtYXkgbm90IHBhc3MgYCIgKyBpZCArICJgIGFz
IGlkIHRvIHRoZSBzdG9yZSdzIGZpbmQgbWV0aG9kIiwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSB8
fCAhRW1iZXIuaXNOb25lKGlkKSk7Ci0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDEpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5maW5kQWxsKHR5cGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gV2UgYXJlIHBhc3NlZCBhIHF1ZXJ5IGluc3RlYWQgb2YgYW4gaWQuCi0gICAg
ICAgIGlmIChFbWJlci50eXBlT2YoaWQpID09PSAnb2JqZWN0JykgewotICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmRRdWVyeSh0eXBlLCBpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
dGhpcy5maW5kQnlJZCh0eXBlLCBjb2VyY2VJZChpZCkpOwotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSByZWNvcmQgZm9yIGEgZ2l2ZW4gdHlwZSBh
bmQgaWQgY29tYmluYXRpb24uCi0KLSAgICAgICAgQG1ldGhvZCBmaW5kQnlJZAotICAgICAgICBA
cHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0g
dHlwZQotICAgICAgICBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpZAotICAgICAgICBAcmV0dXJu
IHtQcm9taXNlfSBwcm9taXNlCi0gICAgICAqLwotICAgICAgZmluZEJ5SWQ6IGZ1bmN0aW9uKHR5
cGUsIGlkKSB7Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUpOwotCi0gICAgICAg
IHZhciByZWNvcmQgPSB0aGlzLnJlY29yZEZvcklkKHR5cGUsIGlkKTsKLSAgICAgICAgdmFyIGZl
dGNoZWRSZWNvcmQgPSB0aGlzLmZldGNoUmVjb3JkKHJlY29yZCk7Ci0KLSAgICAgICAgcmV0dXJu
IHByb21pc2VPYmplY3QoZmV0Y2hlZFJlY29yZCB8fCByZWNvcmQsICJEUzogU3RvcmUjZmluZEJ5
SWQgIiArIHR5cGUgKyAiIHdpdGggaWQ6ICIgKyBpZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgVGhpcyBtZXRob2QgbWFrZXMgYSBzZXJpZXMgb2YgcmVxdWVzdHMgdG8gdGhlIGFk
YXB0ZXIncyBgZmluZGAgbWV0aG9kCi0gICAgICAgIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0
IHJlc29sdmVzIG9uY2UgdGhleSBhcmUgYWxsIGxvYWRlZC4KLQotICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICBAbWV0aG9kIGZpbmRCeUlkcwotICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQot
ICAgICAgICBAcGFyYW0ge0FycmF5fSBpZHMKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJv
bWlzZQotICAgICAgKi8KLSAgICAgIGZpbmRCeUlkczogZnVuY3Rpb24odHlwZSwgaWRzKSB7Ci0g
ICAgICAgIHZhciBzdG9yZSA9IHRoaXM7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSAiRFM6
IFN0b3JlI2ZpbmRCeUlkcyAiICsgdHlwZTsKLSAgICAgICAgcmV0dXJuIHByb21pc2VBcnJheShF
bWJlci5SU1ZQLmFsbChtYXAoaWRzLCBmdW5jdGlvbihpZCkgewotICAgICAgICAgIHJldHVybiBz
dG9yZS5maW5kQnlJZCh0eXBlLCBpZCk7Ci0gICAgICAgIH0pKS50aGVuKEVtYmVyLkEsIG51bGws
ICJEUzogU3RvcmUjZmluZEJ5SWRzIG9mICIgKyB0eXBlICsgIiBjb21wbGV0ZSIpKTsKLSAgICAg
IH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYGZpbmRC
eUlkYCBpZiBpdCBkaXNjb3ZlcnMgdGhhdCBhIHBhcnRpY3VsYXIKLSAgICAgICAgdHlwZS9pZCBw
YWlyIGhhc24ndCBiZWVuIGxvYWRlZCB5ZXQgdG8ga2ljayBvZmYgYSByZXF1ZXN0IHRvIHRoZQot
ICAgICAgICBhZGFwdGVyLgotCi0gICAgICAgIEBtZXRob2QgZmV0Y2hSZWNvcmQKLSAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAgIEByZXR1
cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmZXRjaFJlY29yZDogZnVuY3Rp
b24ocmVjb3JkKSB7Ci0gICAgICAgIGlmIChpc05vbmUocmVjb3JkKSkgeyByZXR1cm4gbnVsbDsg
fQotICAgICAgICBpZiAocmVjb3JkLl9sb2FkaW5nUHJvbWlzZSkgeyByZXR1cm4gcmVjb3JkLl9s
b2FkaW5nUHJvbWlzZTsgfQotICAgICAgICBpZiAoIWdldChyZWNvcmQsICdpc0VtcHR5JykpIHsg
cmV0dXJuIG51bGw7IH0KLQotICAgICAgICB2YXIgdHlwZSA9IHJlY29yZC5jb25zdHJ1Y3RvciwK
LSAgICAgICAgICAgIGlkID0gZ2V0KHJlY29yZCwgJ2lkJyk7Ci0KLSAgICAgICAgdmFyIGFkYXB0
ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
dHJpZWQgdG8gZmluZCBhIHJlY29yZCBidXQgeW91IGhhdmUgbm8gYWRhcHRlciAoZm9yICIgKyB0
eXBlICsgIikiLCBhZGFwdGVyKTsKLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8g
ZmluZCBhIHJlY29yZCBidXQgeW91ciBhZGFwdGVyIChmb3IgIiArIHR5cGUgKyAiKSBkb2VzIG5v
dCBpbXBsZW1lbnQgJ2ZpbmQnIiwgYWRhcHRlci5maW5kKTsKLQotICAgICAgICB2YXIgcHJvbWlz
ZSA9IF9maW5kKGFkYXB0ZXIsIHRoaXMsIHR5cGUsIGlkKTsKLSAgICAgICAgcmVjb3JkLmxvYWRp
bmdEYXRhKHByb21pc2UpOwotICAgICAgICByZXR1cm4gcHJvbWlzZTsKLSAgICAgIH0sCi0KLSAg
ICAgIC8qKgotICAgICAgICBHZXQgYSByZWNvcmQgYnkgYSBnaXZlbiB0eXBlIGFuZCBJRCB3aXRo
b3V0IHRyaWdnZXJpbmcgYSBmZXRjaC4KLQotICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIHN5bmNo
cm9ub3VzbHkgcmV0dXJuIHRoZSByZWNvcmQgaWYgaXQncyBhdmFpbGFibGUuCi0gICAgICAgIE90
aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gbnVsbC4KLQotICAgICAgICBgYGBqcwotICAgICAgICB2
YXIgcG9zdCA9IHN0b3JlLmdldEJ5SWQoJ3Bvc3QnLCAxKTsKLSAgICAgICAgYGBgCi0KLSAgICAg
ICAgQG1ldGhvZCBnZXRCeUlkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9m
IERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGlkCi0gICAg
ICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAgIGdldEJ5SWQ6IGZ1
bmN0aW9uKHR5cGUsIGlkKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc1JlY29yZEZvcklkKHR5cGUs
IGlkKSkgewotICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZEZvcklkKHR5cGUsIGlkKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgcmVj
b3JkJ3MgYHJlbG9hZGAgbWV0aG9kLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBh
ZGFwdGVyJ3MgYGZpbmRgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhIHByb21pc2UuIFdoZW4KLSAg
ICAgICAgKip0aGF0KiogcHJvbWlzZSByZXNvbHZlcywgYHJlbG9hZFJlY29yZGAgd2lsbCByZXNv
bHZlIHRoZSBwcm9taXNlIHJldHVybmVkCi0gICAgICAgIGJ5IHRoZSByZWNvcmQncyBgcmVsb2Fk
YC4KLQotICAgICAgICBAbWV0aG9kIHJlbG9hZFJlY29yZAotICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0g
cHJvbWlzZQotICAgICAgKi8KLSAgICAgIHJlbG9hZFJlY29yZDogZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgIHZhciB0eXBlID0gcmVjb3JkLmNvbnN0cnVjdG9yLAotICAgICAgICAgICAgYWRh
cHRlciA9IHRoaXMuYWRhcHRlckZvcih0eXBlKSwKLSAgICAgICAgICAgIGlkID0gZ2V0KHJlY29y
ZCwgJ2lkJyk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2Fubm90IHJlbG9hZCBhIHJl
Y29yZCB3aXRob3V0IGFuIElEIiwgaWQpOwotICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmll
ZCB0byByZWxvYWQgYSByZWNvcmQgYnV0IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZvciAiICsgdHlw
ZSArICIpIiwgYWRhcHRlcik7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIHJl
bG9hZCBhIHJlY29yZCBidXQgeW91ciBhZGFwdGVyIGRvZXMgbm90IGltcGxlbWVudCBgZmluZGAi
LCBhZGFwdGVyLmZpbmQpOwotCi0gICAgICAgIHJldHVybiBfZmluZChhZGFwdGVyLCB0aGlzLCB0
eXBlLCBpZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBtZXRob2QgdGFr
ZXMgYSBsaXN0IG9mIHJlY29yZHMsIGdyb3VwcyB0aGUgcmVjb3JkcyBieSB0eXBlLAotICAgICAg
ICBjb252ZXJ0cyB0aGUgcmVjb3JkcyBpbnRvIElEcywgYW5kIHRoZW4gaW52b2tlcyB0aGUgYWRh
cHRlcidzIGBmaW5kTWFueWAKLSAgICAgICAgbWV0aG9kLgotCi0gICAgICAgIFRoZSByZWNvcmRz
IGFyZSBncm91cGVkIGJ5IHR5cGUgdG8gaW52b2tlIGBmaW5kTWFueWAgb24gYWRhcHRlcnMKLSAg
ICAgICAgZm9yIGVhY2ggdW5pcXVlIHR5cGUgaW4gcmVjb3Jkcy4KLQotICAgICAgICBJdCBpcyB1
c2VkIGJvdGggYnkgYSBicmFuZCBuZXcgcmVsYXRpb25zaGlwICh2aWEgdGhlIGBmaW5kTWFueWAK
LSAgICAgICAgbWV0aG9kKSBvciB3aGVuIHRoZSBkYXRhIHVuZGVybHlpbmcgYW4gZXhpc3Rpbmcg
cmVsYXRpb25zaGlwCi0gICAgICAgIGNoYW5nZXMuCi0KLSAgICAgICAgQG1ldGhvZCBmZXRjaE1h
bnkKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtBcnJheX0gcmVjb3JkcwotICAg
ICAgICBAcGFyYW0ge0RTLk1vZGVsfSBvd25lcgotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBw
cm9taXNlCi0gICAgICAqLwotICAgICAgZmV0Y2hNYW55OiBmdW5jdGlvbihyZWNvcmRzLCBvd25l
cikgewotICAgICAgICBpZiAoIXJlY29yZHMubGVuZ3RoKSB7Ci0gICAgICAgICAgcmV0dXJuIEVt
YmVyLlJTVlAucmVzb2x2ZShyZWNvcmRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdyb3Vw
IEJ5IFR5cGUKLSAgICAgICAgdmFyIHJlY29yZHNCeVR5cGVNYXAgPSBFbWJlci5NYXBXaXRoRGVm
YXVsdC5jcmVhdGUoewotICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24oKSB7IHJldHVy
biBFbWJlci5BKCk7IH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZm9yRWFjaChyZWNvcmRzLCBm
dW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICByZWNvcmRzQnlUeXBlTWFwLmdldChyZWNvcmQu
Y29uc3RydWN0b3IpLnB1c2gocmVjb3JkKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIHBy
b21pc2VzID0gW107Ci0KLSAgICAgICAgZm9yRWFjaChyZWNvcmRzQnlUeXBlTWFwLCBmdW5jdGlv
bih0eXBlLCByZWNvcmRzKSB7Ci0gICAgICAgICAgdmFyIGlkcyA9IHJlY29yZHMubWFwUHJvcGVy
dHkoJ2lkJyksCi0gICAgICAgICAgICAgIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSk7
Ci0KLSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBsb2FkIG1hbnkgcmVjb3Jk
cyBidXQgeW91IGhhdmUgbm8gYWRhcHRlciAoZm9yICIgKyB0eXBlICsgIikiLCBhZGFwdGVyKTsK
LSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBsb2FkIG1hbnkgcmVjb3JkcyBi
dXQgeW91ciBhZGFwdGVyIGRvZXMgbm90IGltcGxlbWVudCBgZmluZE1hbnlgIiwgYWRhcHRlci5m
aW5kTWFueSk7Ci0KLSAgICAgICAgICBwcm9taXNlcy5wdXNoKF9maW5kTWFueShhZGFwdGVyLCB0
aGlzLCB0eXBlLCBpZHMsIG93bmVyKSk7Ci0gICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgIHJl
dHVybiBFbWJlci5SU1ZQLmFsbChwcm9taXNlcyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgUmV0dXJucyB0cnVlIGlmIGEgcmVjb3JkIGZvciBhIGdpdmVuIHR5cGUgYW5kIElEIGlz
IGFscmVhZHkgbG9hZGVkLgotCi0gICAgICAgIEBtZXRob2QgaGFzUmVjb3JkRm9ySWQKLSAgICAg
ICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAg
QHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaWQKLSAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAg
ICAgICovCi0gICAgICBoYXNSZWNvcmRGb3JJZDogZnVuY3Rpb24odHlwZSwgaWQpIHsKLSAgICAg
ICAgaWQgPSBjb2VyY2VJZChpZCk7Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUp
OwotICAgICAgICByZXR1cm4gISF0aGlzLnR5cGVNYXBGb3IodHlwZSkuaWRUb1JlY29yZFtpZF07
Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyBpZCByZWNvcmQgZm9yIGEg
Z2l2ZW4gdHlwZSBhbmQgSUQuIElmIG9uZSBpc24ndCBhbHJlYWR5IGxvYWRlZCwKLSAgICAgICAg
aXQgYnVpbGRzIGEgbmV3IHJlY29yZCBhbmQgbGVhdmVzIGl0IGluIHRoZSBgZW1wdHlgIHN0YXRl
LgotCi0gICAgICAgIEBtZXRob2QgcmVjb3JkRm9ySWQKLSAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAg
QHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaWQKLSAgICAgICAgQHJldHVybiB7RFMuTW9kZWx9IHJl
Y29yZAotICAgICAgKi8KLSAgICAgIHJlY29yZEZvcklkOiBmdW5jdGlvbih0eXBlLCBpZCkgewot
ICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLQotICAgICAgICBpZCA9IGNvZXJj
ZUlkKGlkKTsKLQotICAgICAgICB2YXIgcmVjb3JkID0gdGhpcy50eXBlTWFwRm9yKHR5cGUpLmlk
VG9SZWNvcmRbaWRdOwotCi0gICAgICAgIGlmICghcmVjb3JkKSB7Ci0gICAgICAgICAgcmVjb3Jk
ID0gdGhpcy5idWlsZFJlY29yZCh0eXBlLCBpZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcmVjb3JkOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgZmluZE1h
bnkKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gb3duZXIKLSAg
ICAgICAgQHBhcmFtIHtBcnJheX0gcmVjb3JkcwotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBz
dWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge1Jlc29sdmVyfSByZXNv
bHZlcgotICAgICAgICBAcmV0dXJuIHtEUy5NYW55QXJyYXl9IHJlY29yZHMKLSAgICAgICovCi0g
ICAgICBmaW5kTWFueTogZnVuY3Rpb24ob3duZXIsIHJlY29yZHMsIHR5cGUsIHJlc29sdmVyKSB7
Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUpOwotCi0gICAgICAgIHJlY29yZHMg
PSBFbWJlci5BKHJlY29yZHMpOwotCi0gICAgICAgIHZhciB1bmxvYWRlZFJlY29yZHMgPSByZWNv
cmRzLmZpbHRlclByb3BlcnR5KCdpc0VtcHR5JywgdHJ1ZSksCi0gICAgICAgICAgICBtYW55QXJy
YXkgPSB0aGlzLnJlY29yZEFycmF5TWFuYWdlci5jcmVhdGVNYW55QXJyYXkodHlwZSwgcmVjb3Jk
cyk7Ci0KLSAgICAgICAgZm9yRWFjaCh1bmxvYWRlZFJlY29yZHMsIGZ1bmN0aW9uKHJlY29yZCkg
ewotICAgICAgICAgIHJlY29yZC5sb2FkaW5nRGF0YSgpOwotICAgICAgICB9KTsKLQotICAgICAg
ICBtYW55QXJyYXkubG9hZGluZ1JlY29yZHNDb3VudCA9IHVubG9hZGVkUmVjb3Jkcy5sZW5ndGg7
Ci0KLSAgICAgICAgaWYgKHVubG9hZGVkUmVjb3Jkcy5sZW5ndGgpIHsKLSAgICAgICAgICBmb3JF
YWNoKHVubG9hZGVkUmVjb3JkcywgZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICB0aGlz
LnJlY29yZEFycmF5TWFuYWdlci5yZWdpc3RlcldhaXRpbmdSZWNvcmRBcnJheShyZWNvcmQsIG1h
bnlBcnJheSk7Ci0gICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgICByZXNvbHZlci5yZXNv
bHZlKHRoaXMuZmV0Y2hNYW55KHVubG9hZGVkUmVjb3Jkcywgb3duZXIpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBpZiAocmVzb2x2ZXIpIHsgcmVzb2x2ZXIucmVzb2x2ZSgpOyB9Ci0g
ICAgICAgICAgbWFueUFycmF5LnNldCgnaXNMb2FkZWQnLCB0cnVlKTsKLSAgICAgICAgICBvbmNl
KG1hbnlBcnJheSwgJ3RyaWdnZXInLCAnZGlkTG9hZCcpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIG1hbnlBcnJheTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJZiBhIHJl
bGF0aW9uc2hpcCB3YXMgb3JpZ2luYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGFkYXB0ZXIgYXMgYSBs
aW5rCi0gICAgICAgIChhcyBvcHBvc2VkIHRvIGEgbGlzdCBvZiBJRHMpLCB0aGlzIG1ldGhvZCBp
cyBjYWxsZWQgd2hlbiB0aGUKLSAgICAgICAgcmVsYXRpb25zaGlwIGlzIGZldGNoZWQuCi0KLSAg
ICAgICAgVGhlIGxpbmsgKHdoaWNoIGlzIHVzdWFsbHkgYSBVUkwpIGlzIHBhc3NlZCB0aHJvdWdo
IHVuY2hhbmdlZCwgc28gdGhlCi0gICAgICAgIGFkYXB0ZXIgY2FuIG1ha2Ugd2hhdGV2ZXIgcmVx
dWVzdCBpdCB3YW50cy4KLQotICAgICAgICBUaGUgdXN1YWwgdXNlLWNhc2UgaXMgZm9yIHRoZSBz
ZXJ2ZXIgdG8gcmVnaXN0ZXIgYSBVUkwgYXMgYSBsaW5rLCBhbmQKLSAgICAgICAgdGhlbiB1c2Ug
dGhhdCBVUkwgaW4gdGhlIGZ1dHVyZSB0byBtYWtlIGEgcmVxdWVzdCBmb3IgdGhlIHJlbGF0aW9u
c2hpcC4KLQotICAgICAgICBAbWV0aG9kIGZpbmRIYXNNYW55Ci0gICAgICAgIEBwcml2YXRlCi0g
ICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IG93bmVyCi0gICAgICAgIEBwYXJhbSB7YW55fSBsaW5r
Ci0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0g
ICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kSGFz
TWFueTogZnVuY3Rpb24ob3duZXIsIGxpbmssIHJlbGF0aW9uc2hpcCwgcmVzb2x2ZXIpIHsKLSAg
ICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3Iob3duZXIuY29uc3RydWN0b3IpOwot
Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGxvYWQgYSBoYXNNYW55IHJlbGF0
aW9uc2hpcCBidXQgeW91IGhhdmUgbm8gYWRhcHRlciAoZm9yICIgKyBvd25lci5jb25zdHJ1Y3Rv
ciArICIpIiwgYWRhcHRlcik7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRvIGxv
YWQgYSBoYXNNYW55IHJlbGF0aW9uc2hpcCBmcm9tIGEgc3BlY2lmaWVkIGBsaW5rYCBpbiB0aGUg
b3JpZ2luYWwgcGF5bG9hZCBidXQgeW91ciBhZGFwdGVyIGRvZXMgbm90IGltcGxlbWVudCBgZmlu
ZEhhc01hbnlgIiwgYWRhcHRlci5maW5kSGFzTWFueSk7Ci0KLSAgICAgICAgdmFyIHJlY29yZHMg
PSB0aGlzLnJlY29yZEFycmF5TWFuYWdlci5jcmVhdGVNYW55QXJyYXkocmVsYXRpb25zaGlwLnR5
cGUsIEVtYmVyLkEoW10pKTsKLSAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShfZmluZEhhc01hbnko
YWRhcHRlciwgdGhpcywgb3duZXIsIGxpbmssIHJlbGF0aW9uc2hpcCkpOwotICAgICAgICByZXR1
cm4gcmVjb3JkczsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGZpbmRC
ZWxvbmdzVG8KLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gb3du
ZXIKLSAgICAgICAgQHBhcmFtIHthbnl9IGxpbmsKLSAgICAgICAgQHBhcmFtIHtSZWxhdGlvbnNo
aXB9IHJlbGF0aW9uc2hpcAotICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlCi0gICAg
ICAqLwotICAgICAgZmluZEJlbG9uZ3NUbzogZnVuY3Rpb24ob3duZXIsIGxpbmssIHJlbGF0aW9u
c2hpcCkgewotICAgICAgICB2YXIgYWRhcHRlciA9IHRoaXMuYWRhcHRlckZvcihvd25lci5jb25z
dHJ1Y3Rvcik7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gbG9hZCBhIGJl
bG9uZ3NUbyByZWxhdGlvbnNoaXAgYnV0IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZvciAiICsgb3du
ZXIuY29uc3RydWN0b3IgKyAiKSIsIGFkYXB0ZXIpOwotICAgICAgICBFbWJlci5hc3NlcnQoIllv
dSB0cmllZCB0byBsb2FkIGEgYmVsb25nc1RvIHJlbGF0aW9uc2hpcCBmcm9tIGEgc3BlY2lmaWVk
IGBsaW5rYCBpbiB0aGUgb3JpZ2luYWwgcGF5bG9hZCBidXQgeW91ciBhZGFwdGVyIGRvZXMgbm90
IGltcGxlbWVudCBgZmluZEJlbG9uZ3NUb2AiLCBhZGFwdGVyLmZpbmRCZWxvbmdzVG8pOwotCi0g
ICAgICAgIHJldHVybiBfZmluZEJlbG9uZ3NUbyhhZGFwdGVyLCB0aGlzLCBvd25lciwgbGluaywg
cmVsYXRpb25zaGlwKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhv
ZCBkZWxlZ2F0ZXMgYSBxdWVyeSB0byB0aGUgYWRhcHRlci4gVGhpcyBpcyB0aGUgb25lIHBsYWNl
IHdoZXJlCi0gICAgICAgIGFkYXB0ZXItbGV2ZWwgc2VtYW50aWNzIGFyZSBleHBvc2VkIHRvIHRo
ZSBhcHBsaWNhdGlvbi4KLQotICAgICAgICBFeHBvc2luZyBxdWVyaWVzIHRoaXMgd2F5IHNlZW1z
IHByZWZlcmFibGUgdG8gY3JlYXRpbmcgYW4gYWJzdHJhY3QgcXVlcnkKLSAgICAgICAgbGFuZ3Vh
Z2UgZm9yIGFsbCBzZXJ2ZXItc2lkZSBxdWVyaWVzLCBhbmQgdGhlbiByZXF1aXJlIGFsbCBhZGFw
dGVycyB0bwotICAgICAgICBpbXBsZW1lbnQgdGhlbS4KLQotICAgICAgICBUaGlzIG1ldGhvZCBy
ZXR1cm5zIGEgcHJvbWlzZSwgd2hpY2ggaXMgcmVzb2x2ZWQgd2l0aCBhIGBSZWNvcmRBcnJheWAK
LSAgICAgICAgb25jZSB0aGUgc2VydmVyIHJldHVybnMuCi0KLSAgICAgICAgQG1ldGhvZCBmaW5k
UXVlcnkKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xh
c3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHthbnl9IHF1ZXJ5IGFuIG9wYXF1
ZSBxdWVyeSB0byBiZSB1c2VkIGJ5IHRoZSBhZGFwdGVyCi0gICAgICAgIEByZXR1cm4ge1Byb21p
c2V9IHByb21pc2UKLSAgICAgICovCi0gICAgICBmaW5kUXVlcnk6IGZ1bmN0aW9uKHR5cGUsIHF1
ZXJ5KSB7Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUpOwotCi0gICAgICAgIHZh
ciBhcnJheSA9IHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyCi0gICAgICAgICAgLmNyZWF0ZUFkYXB0
ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheSh0eXBlLCBxdWVyeSk7Ci0KLSAgICAgICAgdmFyIGFkYXB0
ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSk7Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ug
dHJpZWQgdG8gbG9hZCBhIHF1ZXJ5IGJ1dCB5b3UgaGF2ZSBubyBhZGFwdGVyIChmb3IgIiArIHR5
cGUgKyAiKSIsIGFkYXB0ZXIpOwotICAgICAgICBFbWJlci5hc3NlcnQoIllvdSB0cmllZCB0byBs
b2FkIGEgcXVlcnkgYnV0IHlvdXIgYWRhcHRlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGZpbmRRdWVy
eWAiLCBhZGFwdGVyLmZpbmRRdWVyeSk7Ci0KLSAgICAgICAgcmV0dXJuIHByb21pc2VBcnJheShf
ZmluZFF1ZXJ5KGFkYXB0ZXIsIHRoaXMsIHR5cGUsIHF1ZXJ5LCBhcnJheSkpOwotICAgICAgfSwK
LQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxs
IHJlY29yZHMgYWRhcHRlciBjYW4gZmluZC4KLSAgICAgICAgSXQgdHJpZ2dlcnMgdGhlIGFkYXB0
ZXIncyBgZmluZEFsbGAgbWV0aG9kIHRvIGdpdmUgaXQgYW4gb3Bwb3J0dW5pdHkgdG8gcG9wdWxh
dGUKLSAgICAgICAgdGhlIGFycmF5IHdpdGggcmVjb3JkcyBvZiB0aGF0IHR5cGUuCi0KLSAgICAg
ICAgQG1ldGhvZCBmaW5kQWxsCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7U3Ry
aW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEByZXR1cm4ge0RTLkFk
YXB0ZXJQb3B1bGF0ZWRSZWNvcmRBcnJheX0KLSAgICAgICovCi0gICAgICBmaW5kQWxsOiBmdW5j
dGlvbih0eXBlKSB7Ci0gICAgICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUpOwotCi0gICAg
ICAgIHJldHVybiB0aGlzLmZldGNoQWxsKHR5cGUsIHRoaXMuYWxsKHR5cGUpKTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGZldGNoQWxsCi0gICAgICAgIEBwcml2YXRl
Ci0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHBhcmFtIHtEUy5SZWNv
cmRBcnJheX0gYXJyYXkKLSAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAg
Ki8KLSAgICAgIGZldGNoQWxsOiBmdW5jdGlvbih0eXBlLCBhcnJheSkgewotICAgICAgICB2YXIg
YWRhcHRlciA9IHRoaXMuYWRhcHRlckZvcih0eXBlKSwKLSAgICAgICAgICAgIHNpbmNlVG9rZW4g
PSB0aGlzLnR5cGVNYXBGb3IodHlwZSkubWV0YWRhdGEuc2luY2U7Ci0KLSAgICAgICAgc2V0KGFy
cmF5LCAnaXNVcGRhdGluZycsIHRydWUpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRy
aWVkIHRvIGxvYWQgYWxsIHJlY29yZHMgYnV0IHlvdSBoYXZlIG5vIGFkYXB0ZXIgKGZvciAiICsg
dHlwZSArICIpIiwgYWRhcHRlcik7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHRyaWVkIHRv
IGxvYWQgYWxsIHJlY29yZHMgYnV0IHlvdXIgYWRhcHRlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGZp
bmRBbGxgIiwgYWRhcHRlci5maW5kQWxsKTsKLQotICAgICAgICByZXR1cm4gcHJvbWlzZUFycmF5
KF9maW5kQWxsKGFkYXB0ZXIsIHRoaXMsIHR5cGUsIHNpbmNlVG9rZW4pKTsKLSAgICAgIH0sCi0K
LSAgICAgIC8qKgotICAgICAgICBAbWV0aG9kIGRpZFVwZGF0ZUFsbAotICAgICAgICBAcGFyYW0g
e0RTLk1vZGVsfSB0eXBlCi0gICAgICAqLwotICAgICAgZGlkVXBkYXRlQWxsOiBmdW5jdGlvbih0
eXBlKSB7Ci0gICAgICAgIHZhciBmaW5kQWxsQ2FjaGUgPSB0aGlzLnR5cGVNYXBGb3IodHlwZSku
ZmluZEFsbENhY2hlOwotICAgICAgICBzZXQoZmluZEFsbENhY2hlLCAnaXNVcGRhdGluZycsIGZh
bHNlKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCByZXR1cm5z
IGEgZmlsdGVyZWQgYXJyYXkgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGtub3duIHJlY29yZHMK
LSAgICAgICAgZm9yIGEgZ2l2ZW4gdHlwZS4KLQotICAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSBp
dCdzIGp1c3QgYSBmaWx0ZXIsIGl0IHdpbGwgaGF2ZSBhbnkgbG9jYWxseQotICAgICAgICBjcmVh
dGVkIHJlY29yZHMgb2YgdGhlIHR5cGUuCi0KLSAgICAgICAgQWxzbyBub3RlIHRoYXQgbXVsdGlw
bGUgY2FsbHMgdG8gYGFsbGAgZm9yIGEgZ2l2ZW4gdHlwZSB3aWxsIGFsd2F5cwotICAgICAgICBy
ZXR1cm4gdGhlIHNhbWUgUmVjb3JkQXJyYXkuCi0KLSAgICAgICAgRXhhbXBsZQotCi0gICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgdmFyIGxvY2FsUG9zdHMgPSBzdG9yZS5hbGwoJ3Bvc3Qn
KTsKLSAgICAgICAgYGBgCi0KLSAgICAgICAgQG1ldGhvZCBhbGwKLSAgICAgICAgQHBhcmFtIHtT
dHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHJldHVybiB7RFMu
UmVjb3JkQXJyYXl9Ci0gICAgICAqLwotICAgICAgYWxsOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAg
ICAgIHR5cGUgPSB0aGlzLm1vZGVsRm9yKHR5cGUpOwotCi0gICAgICAgIHZhciB0eXBlTWFwID0g
dGhpcy50eXBlTWFwRm9yKHR5cGUpLAotICAgICAgICAgICAgZmluZEFsbENhY2hlID0gdHlwZU1h
cC5maW5kQWxsQ2FjaGU7Ci0KLSAgICAgICAgaWYgKGZpbmRBbGxDYWNoZSkgeyByZXR1cm4gZmlu
ZEFsbENhY2hlOyB9Ci0KLSAgICAgICAgdmFyIGFycmF5ID0gdGhpcy5yZWNvcmRBcnJheU1hbmFn
ZXIuY3JlYXRlUmVjb3JkQXJyYXkodHlwZSk7Ci0KLSAgICAgICAgdHlwZU1hcC5maW5kQWxsQ2Fj
aGUgPSBhcnJheTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgfSwKLQotCi0gICAgICAv
KioKLSAgICAgICAgVGhpcyBtZXRob2QgdW5sb2FkcyBhbGwgb2YgdGhlIGtub3duIHJlY29yZHMg
Zm9yIGEgZ2l2ZW4gdHlwZS4KLQotICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgIHN0b3Jl
LnVubG9hZEFsbCgncG9zdCcpOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0aG9kIHVubG9h
ZEFsbAotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlw
ZQotICAgICAgKi8KLSAgICAgIHVubG9hZEFsbDogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB2
YXIgbW9kZWxUeXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLSAgICAgICAgdmFyIHR5cGVNYXAg
PSB0aGlzLnR5cGVNYXBGb3IobW9kZWxUeXBlKTsKLSAgICAgICAgdmFyIHJlY29yZHMgPSB0eXBl
TWFwLnJlY29yZHMuc2xpY2UoKTsKLSAgICAgICAgdmFyIHJlY29yZDsKLQotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJlY29yZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICByZWNvcmQg
PSByZWNvcmRzW2ldOwotICAgICAgICAgIHJlY29yZC51bmxvYWRSZWNvcmQoKTsKLSAgICAgICAg
ICByZWNvcmQuZGVzdHJveSgpOyAvLyBtYXliZSB3aXRoaW4gdW5sb2FkUmVjb3JkCi0gICAgICAg
IH0KLQotICAgICAgICB0eXBlTWFwLmZpbmRBbGxDYWNoZSA9IG51bGw7Ci0gICAgICB9LAotCi0g
ICAgICAvKioKLSAgICAgICAgVGFrZXMgYSB0eXBlIGFuZCBmaWx0ZXIgZnVuY3Rpb24sIGFuZCBy
ZXR1cm5zIGEgbGl2ZSBSZWNvcmRBcnJheSB0aGF0Ci0gICAgICAgIHJlbWFpbnMgdXAgdG8gZGF0
ZSBhcyBuZXcgcmVjb3JkcyBhcmUgbG9hZGVkIGludG8gdGhlIHN0b3JlIG9yIGNyZWF0ZWQKLSAg
ICAgICAgbG9jYWxseS4KLQotICAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgYSBt
YXRlcmlhbGl6ZWQgcmVjb3JkLCBhbmQgcmV0dXJucyB0cnVlCi0gICAgICAgIGlmIHRoZSByZWNv
cmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBmaWx0ZXIgYW5kIGZhbHNlIGlmIGl0IHNob3Vs
ZAotICAgICAgICBub3QuCi0KLSAgICAgICAgVGhlIGZpbHRlciBmdW5jdGlvbiBpcyBjYWxsZWQg
b25jZSBvbiBhbGwgcmVjb3JkcyBmb3IgdGhlIHR5cGUgd2hlbgotICAgICAgICBpdCBpcyBjcmVh
dGVkLCBhbmQgdGhlbiBvbmNlIG9uIGVhY2ggbmV3bHkgbG9hZGVkIG9yIGNyZWF0ZWQgcmVjb3Jk
LgotCi0gICAgICAgIElmIGFueSBvZiBhIHJlY29yZCdzIHByb3BlcnRpZXMgY2hhbmdlLCBvciBp
ZiBpdCBjaGFuZ2VzIHN0YXRlLCB0aGUKLSAgICAgICAgZmlsdGVyIGZ1bmN0aW9uIHdpbGwgYmUg
aW52b2tlZCBhZ2FpbiB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGQKLSAgICAgICAgc3Rp
bGwgYmUgaW4gdGhlIGFycmF5LgotCi0gICAgICAgIE9wdGlvbmFsbHkgeW91IGNhbiBwYXNzIGEg
cXVlcnkgd2hpY2ggd2lsbCBiZSB0cmlnZ2VyZWQgYXQgZmlyc3QuIFRoZQotICAgICAgICByZXN1
bHRzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgY291bGQgdGhlbiBhcHBlYXIgaW4gdGhlIGZpbHRl
ciBpZiB0aGV5Ci0gICAgICAgIG1hdGNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24uCi0KLSAgICAgICAg
RXhhbXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgc3RvcmUuZmlsdGVyKCdw
b3N0Jywge3VucmVhZDogdHJ1ZX0sIGZ1bmN0aW9uKHBvc3QpIHsKLSAgICAgICAgICByZXR1cm4g
cG9zdC5nZXQoJ3VucmVhZCcpOwotICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHVucmVhZFBvc3Rz
KSB7Ci0gICAgICAgICAgdW5yZWFkUG9zdHMuZ2V0KCdsZW5ndGgnKTsgLy8gNQotICAgICAgICAg
IHZhciB1bnJlYWRQb3N0ID0gdW5yZWFkUG9zdHMub2JqZWN0QXQoMCk7Ci0gICAgICAgICAgdW5y
ZWFkUG9zdC5zZXQoJ3VucmVhZCcsIGZhbHNlKTsKLSAgICAgICAgICB1bnJlYWRQb3N0cy5nZXQo
J2xlbmd0aCcpOyAvLyA0Ci0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBAbWV0
aG9kIGZpbHRlcgotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2Rl
bH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gcXVlcnkgb3B0aW9uYWwgcXVlcnkKLSAg
ICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyCi0gICAgICAgIEByZXR1cm4ge0RTLlByb21p
c2VBcnJheX0KLSAgICAgICovCi0gICAgICBmaWx0ZXI6IGZ1bmN0aW9uKHR5cGUsIHF1ZXJ5LCBm
aWx0ZXIpIHsKLSAgICAgICAgdmFyIHByb21pc2U7Ci0gICAgICAgIHZhciBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoOwotICAgICAgICB2YXIgYXJyYXk7Ci0gICAgICAgIHZhciBoYXNRdWVyeSA9
IGxlbmd0aCA9PT0gMzsKLQotICAgICAgICAvLyBhbGxvdyBhbiBvcHRpb25hbCBzZXJ2ZXIgcXVl
cnkKLSAgICAgICAgaWYgKGhhc1F1ZXJ5KSB7Ci0gICAgICAgICAgcHJvbWlzZSA9IHRoaXMuZmlu
ZFF1ZXJ5KHR5cGUsIHF1ZXJ5KTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09PSAyKSB7Ci0gICAgICAgICAgZmlsdGVyID0gcXVlcnk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLQotICAgICAgICBpZiAoaGFzUXVlcnkpIHsK
LSAgICAgICAgICBhcnJheSA9IHRoaXMucmVjb3JkQXJyYXlNYW5hZ2VyLmNyZWF0ZUZpbHRlcmVk
UmVjb3JkQXJyYXkodHlwZSwgZmlsdGVyLCBxdWVyeSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgYXJyYXkgPSB0aGlzLnJlY29yZEFycmF5TWFuYWdlci5jcmVhdGVGaWx0ZXJlZFJlY29y
ZEFycmF5KHR5cGUsIGZpbHRlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm9taXNlID0gcHJv
bWlzZSB8fCBQcm9taXNlLmNhc3QoYXJyYXkpOwotCi0KLSAgICAgICAgcmV0dXJuIHByb21pc2VB
cnJheShwcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgICAgICB9LCBudWxsLCAiRFM6IFN0b3JlI2ZpbHRlciBvZiAiICsgdHlwZSkpOwotICAgICAg
fSwKLQotICAgICAgLyoqCi0gICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgYSBjZXJ0YWlu
IHJlY29yZCBpcyBhbHJlYWR5IGxvYWRlZAotICAgICAgICBpbiB0aGUgc3RvcmUuIFVzZSB0aGlz
IGZ1bmN0aW9uIHRvIGtub3cgYmVmb3JlaGFuZCBpZiBhIGZpbmQoKQotICAgICAgICB3aWxsIHJl
c3VsdCBpbiBhIHJlcXVlc3Qgb3IgdGhhdCBpdCB3aWxsIGJlIGEgY2FjaGUgaGl0LgotCi0gICAg
ICAgICBFeGFtcGxlCi0KLSAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICBzdG9yZS5yZWNv
cmRJc0xvYWRlZCgncG9zdCcsIDEpOyAvLyBmYWxzZQotICAgICAgICBzdG9yZS5maW5kKCdwb3N0
JywgMSkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICBzdG9yZS5yZWNvcmRJc0xvYWRlZCgn
cG9zdCcsIDEpOyAvLyB0cnVlCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBA
bWV0aG9kIHJlY29yZElzTG9hZGVkCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNz
IG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJhbSB7c3RyaW5nfSBpZAotICAgICAgICBA
cmV0dXJuIHtib29sZWFufQotICAgICAgKi8KLSAgICAgIHJlY29yZElzTG9hZGVkOiBmdW5jdGlv
bih0eXBlLCBpZCkgewotICAgICAgICBpZiAoIXRoaXMuaGFzUmVjb3JkRm9ySWQodHlwZSwgaWQp
KSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICByZXR1cm4gIWdldCh0aGlzLnJlY29yZEZvcklk
KHR5cGUsIGlkKSwgJ2lzRW1wdHknKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBU
aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBtZXRhZGF0YSBmb3IgYSBzcGVjaWZpYyB0eXBlLgotCi0g
ICAgICAgIEBtZXRob2QgbWV0YWRhdGFGb3IKLSAgICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3Vi
Y2xhc3Mgb2YgRFMuTW9kZWx9IHR5cGUKLSAgICAgICAgQHJldHVybiB7b2JqZWN0fQotICAgICAg
Ki8KLSAgICAgIG1ldGFkYXRhRm9yOiBmdW5jdGlvbih0eXBlKSB7Ci0gICAgICAgIHR5cGUgPSB0
aGlzLm1vZGVsRm9yKHR5cGUpOwotICAgICAgICByZXR1cm4gdGhpcy50eXBlTWFwRm9yKHR5cGUp
Lm1ldGFkYXRhOwotICAgICAgfSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uCi0gICAgICAvLyAu
IFVQREFUSU5HIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLgotCi0gICAgICAvKioKLSAgICAgICAg
SWYgdGhlIGFkYXB0ZXIgdXBkYXRlcyBhdHRyaWJ1dGVzIG9yIGFja25vd2xlZGdlcyBjcmVhdGlv
bgotICAgICAgICBvciBkZWxldGlvbiwgdGhlIHJlY29yZCB3aWxsIG5vdGlmeSB0aGUgc3RvcmUg
dG8gdXBkYXRlIGl0cwotICAgICAgICBtZW1iZXJzaGlwIGluIGFueSBmaWx0ZXJzLgotICAgICAg
ICBUbyBhdm9pZCB0aHJhc2hpbmcsIHRoaXMgbWV0aG9kIGlzIGludm9rZWQgb25seSBvbmNlIHBl
cgotCi0gICAgICAgIHJ1biBsb29wIHBlciByZWNvcmQuCi0KLSAgICAgICAgQG1ldGhvZCBkYXRh
V2FzVXBkYXRlZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBl
Ci0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgKi8KLSAgICAgIGRhdGFX
YXNVcGRhdGVkOiBmdW5jdGlvbih0eXBlLCByZWNvcmQpIHsKLSAgICAgICAgdGhpcy5yZWNvcmRB
cnJheU1hbmFnZXIucmVjb3JkRGlkQ2hhbmdlKHJlY29yZCk7Ci0gICAgICB9LAotCi0gICAgICAv
LyAuLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBQRVJTSVNUSU5HIC4KLSAgICAgIC8vIC4uLi4u
Li4uLi4uLi4uCi0KLSAgICAgIC8qKgotICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkg
YHJlY29yZC5zYXZlYCwgYW5kIGdldHMgcGFzc2VkIGEKLSAgICAgICAgcmVzb2x2ZXIgZm9yIHRo
ZSBwcm9taXNlIHRoYXQgYHJlY29yZC5zYXZlYCByZXR1cm5zLgotCi0gICAgICAgIEl0IHNjaGVk
dWxlcyBzYXZpbmcgdG8gaGFwcGVuIGF0IHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wLgotCi0gICAg
ICAgIEBtZXRob2Qgc2NoZWR1bGVTYXZlCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJh
bSB7RFMuTW9kZWx9IHJlY29yZAotICAgICAgICBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlcgot
ICAgICAgKi8KLSAgICAgIHNjaGVkdWxlU2F2ZTogZnVuY3Rpb24ocmVjb3JkLCByZXNvbHZlcikg
ewotICAgICAgICByZWNvcmQuYWRhcHRlcldpbGxDb21taXQoKTsKLSAgICAgICAgdGhpcy5fcGVu
ZGluZ1NhdmUucHVzaChbcmVjb3JkLCByZXNvbHZlcl0pOwotICAgICAgICBvbmNlKHRoaXMsICdm
bHVzaFBlbmRpbmdTYXZlJyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wLCBhbmQKLSAgICAgICAg
Zmx1c2hlcyBhbnkgcmVjb3JkcyBwYXNzZWQgaW50byBgc2NoZWR1bGVTYXZlYAotCi0gICAgICAg
IEBtZXRob2QgZmx1c2hQZW5kaW5nU2F2ZQotICAgICAgICBAcHJpdmF0ZQotICAgICAgKi8KLSAg
ICAgIGZsdXNoUGVuZGluZ1NhdmU6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgcGVuZGluZyA9
IHRoaXMuX3BlbmRpbmdTYXZlLnNsaWNlKCk7Ci0gICAgICAgIHRoaXMuX3BlbmRpbmdTYXZlID0g
W107Ci0KLSAgICAgICAgZm9yRWFjaChwZW5kaW5nLCBmdW5jdGlvbih0dXBsZSkgewotICAgICAg
ICAgIHZhciByZWNvcmQgPSB0dXBsZVswXSwgcmVzb2x2ZXIgPSB0dXBsZVsxXSwKLSAgICAgICAg
ICAgICAgYWRhcHRlciA9IHRoaXMuYWRhcHRlckZvcihyZWNvcmQuY29uc3RydWN0b3IpLAotICAg
ICAgICAgICAgICBvcGVyYXRpb247Ci0KLSAgICAgICAgICBpZiAoZ2V0KHJlY29yZCwgJ2N1cnJl
bnRTdGF0ZS5zdGF0ZU5hbWUnKSA9PT0gJ3Jvb3QuZGVsZXRlZC5zYXZlZCcpIHsKLSAgICAgICAg
ICAgIHJldHVybiByZXNvbHZlci5yZXNvbHZlKHJlY29yZCk7Ci0gICAgICAgICAgfSBlbHNlIGlm
IChnZXQocmVjb3JkLCAnaXNOZXcnKSkgewotICAgICAgICAgICAgb3BlcmF0aW9uID0gJ2NyZWF0
ZVJlY29yZCc7Ci0gICAgICAgICAgfSBlbHNlIGlmIChnZXQocmVjb3JkLCAnaXNEZWxldGVkJykp
IHsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9ICdkZWxldGVSZWNvcmQnOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBvcGVyYXRpb24gPSAndXBkYXRlUmVjb3JkJzsKLSAgICAgICAg
ICB9Ci0KLSAgICAgICAgICByZXNvbHZlci5yZXNvbHZlKF9jb21taXQoYWRhcHRlciwgdGhpcywg
b3BlcmF0aW9uLCByZWNvcmQpKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAg
ICAvKioKLSAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgdGhlIHByb21pc2UgcmV0
dXJuZWQgYnkgYW4KLSAgICAgICAgYWRhcHRlcidzIGBjcmVhdGVSZWNvcmRgLCBgdXBkYXRlUmVj
b3JkYCBvciBgZGVsZXRlUmVjb3JkYAotICAgICAgICBpcyByZXNvbHZlZC4KLQotICAgICAgICBJ
ZiB0aGUgZGF0YSBwcm92aWRlcyBhIHNlcnZlci1nZW5lcmF0ZWQgSUQsIGl0IHdpbGwKLSAgICAg
ICAgdXBkYXRlIHRoZSByZWNvcmQgYW5kIHRoZSBzdG9yZSdzIGluZGV4ZXMuCi0KLSAgICAgICAg
QG1ldGhvZCBkaWRTYXZlUmVjb3JkCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7
RFMuTW9kZWx9IHJlY29yZCB0aGUgaW4tZmxpZ2h0IHJlY29yZAotICAgICAgICBAcGFyYW0ge09i
amVjdH0gZGF0YSBvcHRpb25hbCBkYXRhIChzZWUgYWJvdmUpCi0gICAgICAqLwotICAgICAgZGlk
U2F2ZVJlY29yZDogZnVuY3Rpb24ocmVjb3JkLCBkYXRhKSB7Ci0gICAgICAgIGlmIChkYXRhKSB7
Ci0gICAgICAgICAgLy8gbm9ybWFsaXplIHJlbGF0aW9uc2hpcCBJRHMgaW50byByZWNvcmRzCi0g
ICAgICAgICAgZGF0YSA9IG5vcm1hbGl6ZVJlbGF0aW9uc2hpcHModGhpcywgcmVjb3JkLmNvbnN0
cnVjdG9yLCBkYXRhLCByZWNvcmQpOwotCi0gICAgICAgICAgdGhpcy51cGRhdGVJZChyZWNvcmQs
IGRhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVjb3JkLmFkYXB0ZXJEaWRDb21taXQoZGF0
YSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uY2UgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgYW4KLSAgICAgICAgYWRhcHRlcidzIGBjcmVh
dGVSZWNvcmRgLCBgdXBkYXRlUmVjb3JkYCBvciBgZGVsZXRlUmVjb3JkYAotICAgICAgICBpcyBy
ZWplY3RlZCB3aXRoIGEgYERTLkludmFsaWRFcnJvcmAuCi0KLSAgICAgICAgQG1ldGhvZCByZWNv
cmRXYXNJbnZhbGlkCi0gICAgICAgIEBwcml2YXRlCi0gICAgICAgIEBwYXJhbSB7RFMuTW9kZWx9
IHJlY29yZAotICAgICAgICBAcGFyYW0ge09iamVjdH0gZXJyb3JzCi0gICAgICAqLwotICAgICAg
cmVjb3JkV2FzSW52YWxpZDogZnVuY3Rpb24ocmVjb3JkLCBlcnJvcnMpIHsKLSAgICAgICAgcmVj
b3JkLmFkYXB0ZXJEaWRJbnZhbGlkYXRlKGVycm9ycyk7Ci0gICAgICB9LAotCi0gICAgICAvKioK
LSAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgdGhlIHByb21pc2UgcmV0dXJuZWQg
YnkgYW4KLSAgICAgICAgYWRhcHRlcidzIGBjcmVhdGVSZWNvcmRgLCBgdXBkYXRlUmVjb3JkYCBv
ciBgZGVsZXRlUmVjb3JkYAotICAgICAgICBpcyByZWplY3RlZCAod2l0aCBhbnl0aGluZyBvdGhl
ciB0aGFuIGEgYERTLkludmFsaWRFcnJvcmApLgotCi0gICAgICAgIEBtZXRob2QgcmVjb3JkV2Fz
RXJyb3IKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtEUy5Nb2RlbH0gcmVjb3Jk
Ci0gICAgICAqLwotICAgICAgcmVjb3JkV2FzRXJyb3I6IGZ1bmN0aW9uKHJlY29yZCkgewotICAg
ICAgICByZWNvcmQuYWRhcHRlckRpZEVycm9yKCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAg
ICAgICAgV2hlbiBhbiBhZGFwdGVyJ3MgYGNyZWF0ZVJlY29yZGAsIGB1cGRhdGVSZWNvcmRgIG9y
IGBkZWxldGVSZWNvcmRgCi0gICAgICAgIHJlc29sdmVzIHdpdGggZGF0YSwgdGhpcyBtZXRob2Qg
ZXh0cmFjdHMgdGhlIElEIGZyb20gdGhlIHN1cHBsaWVkCi0gICAgICAgIGRhdGEuCi0KLSAgICAg
ICAgQG1ldGhvZCB1cGRhdGVJZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge0RT
Lk1vZGVsfSByZWNvcmQKLSAgICAgICAgQHBhcmFtIHtPYmplY3R9IGRhdGEKLSAgICAgICovCi0g
ICAgICB1cGRhdGVJZDogZnVuY3Rpb24ocmVjb3JkLCBkYXRhKSB7Ci0gICAgICAgIHZhciBvbGRJ
ZCA9IGdldChyZWNvcmQsICdpZCcpLAotICAgICAgICAgICAgaWQgPSBjb2VyY2VJZChkYXRhLmlk
KTsKLQotICAgICAgICBFbWJlci5hc3NlcnQoIkFuIGFkYXB0ZXIgY2Fubm90IGFzc2lnbiBhIG5l
dyBpZCB0byBhIHJlY29yZCB0aGF0IGFscmVhZHkgaGFzIGFuIGlkLiAiICsgcmVjb3JkICsgIiBo
YWQgaWQ6ICIgKyBvbGRJZCArICIgYW5kIHlvdSB0cmllZCB0byB1cGRhdGUgaXQgd2l0aCAiICsg
aWQgKyAiLiBUaGlzIGxpa2VseSBoYXBwZW5lZCBiZWNhdXNlIHlvdXIgc2VydmVyIHJldHVybmVk
IGRhdGEgaW4gcmVzcG9uc2UgdG8gYSBmaW5kIG9yIHVwZGF0ZSB0aGF0IGhhZCBhIGRpZmZlcmVu
dCBpZCB0aGFuIHRoZSBvbmUgeW91IHNlbnQuIiwgb2xkSWQgPT09IG51bGwgfHwgaWQgPT09IG9s
ZElkKTsKLQotICAgICAgICB0aGlzLnR5cGVNYXBGb3IocmVjb3JkLmNvbnN0cnVjdG9yKS5pZFRv
UmVjb3JkW2lkXSA9IHJlY29yZDsKLQotICAgICAgICBzZXQocmVjb3JkLCAnaWQnLCBpZCk7Ci0g
ICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyBhIG1hcCBvZiBJRHMgdG8gY2xp
ZW50IElEcyBmb3IgYSBnaXZlbiB0eXBlLgotCi0gICAgICAgIEBtZXRob2QgdHlwZU1hcEZvcgot
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0gdHlwZQotICAgICAgICBAcmV0dXJuIHtP
YmplY3R9IHR5cGVNYXAKLSAgICAgICovCi0gICAgICB0eXBlTWFwRm9yOiBmdW5jdGlvbih0eXBl
KSB7Ci0gICAgICAgIHZhciB0eXBlTWFwcyA9IGdldCh0aGlzLCAndHlwZU1hcHMnKSwKLSAgICAg
ICAgICAgIGd1aWQgPSBFbWJlci5ndWlkRm9yKHR5cGUpLAotICAgICAgICAgICAgdHlwZU1hcDsK
LQotICAgICAgICB0eXBlTWFwID0gdHlwZU1hcHNbZ3VpZF07Ci0KLSAgICAgICAgaWYgKHR5cGVN
YXApIHsgcmV0dXJuIHR5cGVNYXA7IH0KLQotICAgICAgICB0eXBlTWFwID0gewotICAgICAgICAg
IGlkVG9SZWNvcmQ6IHt9LAotICAgICAgICAgIHJlY29yZHM6IFtdLAotICAgICAgICAgIG1ldGFk
YXRhOiB7fSwKLSAgICAgICAgICB0eXBlOiB0eXBlCi0gICAgICAgIH07Ci0KLSAgICAgICAgdHlw
ZU1hcHNbZ3VpZF0gPSB0eXBlTWFwOwotCi0gICAgICAgIHJldHVybiB0eXBlTWFwOwotICAgICAg
fSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBMT0FESU5HIERBVEEg
LgotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLgotCi0gICAgICAvKioKLSAgICAgICAgVGhpcyBp
bnRlcm5hbCBtZXRob2QgaXMgdXNlZCBieSBgcHVzaGAuCi0KLSAgICAgICAgQG1ldGhvZCBfbG9h
ZAotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBv
ZiBEUy5Nb2RlbH0gdHlwZQotICAgICAgICBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAgICBA
cGFyYW0ge0Jvb2xlYW59IHBhcnRpYWwgdGhlIGRhdGEgc2hvdWxkIGJlIG1lcmdlZCBpbnRvCi0g
ICAgICAgICAgdGhlIGV4aXN0aW5nIGRhdGEsIG5vdCByZXBsYWNlIGl0LgotICAgICAgKi8KLSAg
ICAgIF9sb2FkOiBmdW5jdGlvbih0eXBlLCBkYXRhLCBwYXJ0aWFsKSB7Ci0gICAgICAgIHZhciBp
ZCA9IGNvZXJjZUlkKGRhdGEuaWQpLAotICAgICAgICAgICAgcmVjb3JkID0gdGhpcy5yZWNvcmRG
b3JJZCh0eXBlLCBpZCk7Ci0KLSAgICAgICAgcmVjb3JkLnNldHVwRGF0YShkYXRhLCBwYXJ0aWFs
KTsKLSAgICAgICAgdGhpcy5yZWNvcmRBcnJheU1hbmFnZXIucmVjb3JkRGlkQ2hhbmdlKHJlY29y
ZCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAg
ICAgICBSZXR1cm5zIGEgbW9kZWwgY2xhc3MgZm9yIGEgcGFydGljdWxhciBrZXkuIFVzZWQgYnkK
LSAgICAgICAgbWV0aG9kcyB0aGF0IHRha2UgYSB0eXBlIGtleSAobGlrZSBgZmluZGAsIGBjcmVh
dGVSZWNvcmRgLAotICAgICAgICBldGMuKQotCi0gICAgICAgIEBtZXRob2QgbW9kZWxGb3IKLSAg
ICAgICAgQHBhcmFtIHtTdHJpbmcgb3Igc3ViY2xhc3Mgb2YgRFMuTW9kZWx9IGtleQotICAgICAg
ICBAcmV0dXJuIHtzdWJjbGFzcyBvZiBEUy5Nb2RlbH0KLSAgICAgICovCi0gICAgICBtb2RlbEZv
cjogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIHZhciBmYWN0b3J5OwotCi0KLSAgICAgICAgaWYg
KHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgdmFyIG5vcm1hbGl6ZWRLZXkg
PSB0aGlzLmNvbnRhaW5lci5ub3JtYWxpemUoJ21vZGVsOicgKyBrZXkpOwotCi0gICAgICAgICAg
ZmFjdG9yeSA9IHRoaXMuY29udGFpbmVyLmxvb2t1cEZhY3Rvcnkobm9ybWFsaXplZEtleSk7Ci0g
ICAgICAgICAgaWYgKCFmYWN0b3J5KSB7IHRocm93IG5ldyBFbWJlci5FcnJvcigiTm8gbW9kZWwg
d2FzIGZvdW5kIGZvciAnIiArIGtleSArICInIik7IH0KLSAgICAgICAgICBmYWN0b3J5LnR5cGVL
ZXkgPSB0aGlzLl9ub3JtYWxpemVUeXBlS2V5KG5vcm1hbGl6ZWRLZXkuc3BsaXQoJzonLCAyKVsx
XSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQSBmYWN0b3J5IGFscmVhZHkgc3Vw
cGxpZWQuIEVuc3VyZSBpdCBoYXMgYSBub3JtYWxpemVkIGtleS4KLSAgICAgICAgICBmYWN0b3J5
ID0ga2V5OwotICAgICAgICAgIGlmIChmYWN0b3J5LnR5cGVLZXkpIHsKLSAgICAgICAgICAgIGZh
Y3RvcnkudHlwZUtleSA9IHRoaXMuX25vcm1hbGl6ZVR5cGVLZXkoZmFjdG9yeS50eXBlS2V5KTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmYWN0b3J5LnN0b3JlID0gdGhpczsK
LSAgICAgICAgcmV0dXJuIGZhY3Rvcnk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAg
UHVzaCBzb21lIGRhdGEgZm9yIGEgZ2l2ZW4gdHlwZSBpbnRvIHRoZSBzdG9yZS4KLQotICAgICAg
ICBUaGlzIG1ldGhvZCBleHBlY3RzIG5vcm1hbGl6ZWQgZGF0YToKLQotICAgICAgICAqIFRoZSBJ
RCBpcyBhIGtleSBuYW1lZCBgaWRgIChhbiBJRCBpcyBtYW5kYXRvcnkpCi0gICAgICAgICogVGhl
IG5hbWVzIG9mIGF0dHJpYnV0ZXMgYXJlIHRoZSBvbmVzIHlvdSB1c2VkIGluCi0gICAgICAgICAg
eW91ciBtb2RlbCdzIGBEUy5hdHRyYHMuCi0gICAgICAgICogWW91ciByZWxhdGlvbnNoaXBzIG11
c3QgYmU6Ci0gICAgICAgICAgKiByZXByZXNlbnRlZCBhcyBJRHMgb3IgQXJyYXlzIG9mIElEcwot
ICAgICAgICAgICogcmVwcmVzZW50ZWQgYXMgbW9kZWwgaW5zdGFuY2VzCi0gICAgICAgICAgKiBy
ZXByZXNlbnRlZCBhcyBVUkxzLCB1bmRlciB0aGUgYGxpbmtzYCBrZXkKLQotICAgICAgICBGb3Ig
dGhpcyBtb2RlbDoKLQotICAgICAgICBgYGBqcwotICAgICAgICBBcHAuUGVyc29uID0gRFMuTW9k
ZWwuZXh0ZW5kKHsKLSAgICAgICAgICBmaXJzdE5hbWU6IERTLmF0dHIoKSwKLSAgICAgICAgICBs
YXN0TmFtZTogRFMuYXR0cigpLAotCi0gICAgICAgICAgY2hpbGRyZW46IERTLmhhc01hbnkoJ3Bl
cnNvbicpCi0gICAgICAgIH0pOwotICAgICAgICBgYGAKLQotICAgICAgICBUbyByZXByZXNlbnQg
dGhlIGNoaWxkcmVuIGFzIElEczoKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAg
ICAgaWQ6IDEsCi0gICAgICAgICAgZmlyc3ROYW1lOiAiVG9tIiwKLSAgICAgICAgICBsYXN0TmFt
ZTogIkRhbGUiLAotICAgICAgICAgIGNoaWxkcmVuOiBbMSwgMiwgM10KLSAgICAgICAgfQotICAg
ICAgICBgYGAKLQotICAgICAgICBUbyByZXByZXNlbnQgdGhlIGNoaWxkcmVuIHJlbGF0aW9uc2hp
cCBhcyBhIFVSTDoKLQotICAgICAgICBgYGBqcwotICAgICAgICB7Ci0gICAgICAgICAgaWQ6IDEs
Ci0gICAgICAgICAgZmlyc3ROYW1lOiAiVG9tIiwKLSAgICAgICAgICBsYXN0TmFtZTogIkRhbGUi
LAotICAgICAgICAgIGxpbmtzOiB7Ci0gICAgICAgICAgICBjaGlsZHJlbjogIi9wZW9wbGUvMS9j
aGlsZHJlbiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYGBgCi0KLSAgICAgICAg
SWYgeW91J3JlIHN0cmVhbWluZyBkYXRhIG9yIGltcGxlbWVudGluZyBhbiBhZGFwdGVyLAotICAg
ICAgICBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjb252ZXJ0ZWQgdGhlIGluY29taW5nIGRhdGEK
LSAgICAgICAgaW50byB0aGlzIGZvcm0uCi0KLSAgICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIHVz
ZWQgYm90aCB0byBwdXNoIGluIGJyYW5kIG5ldwotICAgICAgICByZWNvcmRzLCBhcyB3ZWxsIGFz
IHRvIHVwZGF0ZSBleGlzdGluZyByZWNvcmRzLgotCi0gICAgICAgIEBtZXRob2QgcHVzaAotICAg
ICAgICBAcGFyYW0ge1N0cmluZyBvciBzdWJjbGFzcyBvZiBEUy5Nb2RlbH0gdHlwZQotICAgICAg
ICBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAgICBAcmV0dXJuIHtEUy5Nb2RlbH0gdGhlIHJl
Y29yZCB0aGF0IHdhcyBjcmVhdGVkIG9yCi0gICAgICAgICAgdXBkYXRlZC4KLSAgICAgICovCi0g
ICAgICBwdXNoOiBmdW5jdGlvbih0eXBlLCBkYXRhLCBfcGFydGlhbCkgewotICAgICAgICAvLyBf
cGFydGlhbCBpcyBhbiBpbnRlcm5hbCBwYXJhbSB1c2VkIGJ5IGB1cGRhdGVgLgotICAgICAgICAv
LyBJZiBwYXNzZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlCi0gICAgICAgIC8v
IG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBkYXRhLCBub3QgcmVwbGFjZSBpdC4KLQotICAgICAg
ICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IGluY2x1ZGUgYW4gYGlkYCBmb3IgIiArIHR5cGUgKyAi
IGluIGEgaGFzaCBwYXNzZWQgdG8gYHB1c2hgIiwgZGF0YS5pZCAhPSBudWxsKTsKLQotICAgICAg
ICB0eXBlID0gdGhpcy5tb2RlbEZvcih0eXBlKTsKLQotICAgICAgICAvLyBub3JtYWxpemUgcmVs
YXRpb25zaGlwIElEcyBpbnRvIHJlY29yZHMKLSAgICAgICAgZGF0YSA9IG5vcm1hbGl6ZVJlbGF0
aW9uc2hpcHModGhpcywgdHlwZSwgZGF0YSk7Ci0KLSAgICAgICAgdGhpcy5fbG9hZCh0eXBlLCBk
YXRhLCBfcGFydGlhbCk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkRm9ySWQodHlwZSwg
ZGF0YS5pZCk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUHVzaCBzb21lIHJhdyBk
YXRhIGludG8gdGhlIHN0b3JlLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGJv
dGggdG8gcHVzaCBpbiBicmFuZCBuZXcKLSAgICAgICAgcmVjb3JkcywgYXMgd2VsbCBhcyB0byB1
cGRhdGUgZXhpc3RpbmcgcmVjb3Jkcy4gWW91Ci0gICAgICAgIGNhbiBwdXNoIGluIG1vcmUgdGhh
biBvbmUgdHlwZSBvZiBvYmplY3QgYXQgb25jZS4KLSAgICAgICAgQWxsIG9iamVjdHMgc2hvdWxk
IGJlIGluIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgdGhlCi0gICAgICAgIHNlcmlhbGl6ZXIuCi0K
LSAgICAgICAgYGBganMKLSAgICAgICAgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplciA9IERTLkFj
dGl2ZU1vZGVsU2VyaWFsaXplcjsKLQotICAgICAgICB2YXIgcHVzaERhdGEgPSB7Ci0gICAgICAg
ICAgcG9zdHM6IFsKLSAgICAgICAgICAgIHtpZDogMSwgcG9zdF90aXRsZTogIkdyZWF0IHBvc3Qi
LCBjb21tZW50X2lkczogWzJdfQotICAgICAgICAgIF0sCi0gICAgICAgICAgY29tbWVudHM6IFsK
LSAgICAgICAgICAgIHtpZDogMiwgY29tbWVudF9ib2R5OiAiSW5zaWdodGZ1bCBjb21tZW50In0K
LSAgICAgICAgICBdCi0gICAgICAgIH0KLQotICAgICAgICBzdG9yZS5wdXNoUGF5bG9hZChwdXNo
RGF0YSk7Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBkYXRhIHdpbGwg
YmUgZGVzZXJpYWxpemVkIHVzaW5nIGEgZGVmYXVsdAotICAgICAgICBzZXJpYWxpemVyICh0aGUg
YXBwbGljYXRpb24gc2VyaWFsaXplciBpZiBpdCBleGlzdHMpLgotCi0gICAgICAgIEFsdGVybmF0
aXZseSwgYHB1c2hQYXlsb2FkYCB3aWxsIGFjY2VwdCBhIG1vZGVsIHR5cGUgd2hpY2gKLSAgICAg
ICAgd2lsbCBkZXRlcm1pbmUgd2hpY2ggc2VyaWFsaXplciB3aWxsIHByb2Nlc3MgdGhlIHBheWxv
YWQuCi0gICAgICAgIEhvd2V2ZXIsIHRoZSBzZXJpYWxpemVyIGl0c2VsZiAocHJvY2Vzc2luZyB0
aGlzIGRhdGEgdmlhCi0gICAgICAgIGBub3JtYWxpemVQYXlsb2FkYCkgd2lsbCBub3Qga25vdyB3
aGljaCBtb2RlbCBpdCBpcwotICAgICAgICBkZXNlcmlhbGl6aW5nLgotCi0gICAgICAgIGBgYGpz
Ci0gICAgICAgIEFwcC5BcHBsaWNhdGlvblNlcmlhbGl6ZXIgPSBEUy5BY3RpdmVNb2RlbFNlcmlh
bGl6ZXI7Ci0gICAgICAgIEFwcC5Qb3N0U2VyaWFsaXplciA9IERTLkpTT05TZXJpYWxpemVyOwot
ICAgICAgICBzdG9yZS5wdXNoUGF5bG9hZCgnY29tbWVudCcsIHB1c2hEYXRhKTsgLy8gV2lsbCB1
c2UgdGhlIEFwcGxpY2F0aW9uU2VyaWFsaXplcgotICAgICAgICBzdG9yZS5wdXNoUGF5bG9hZCgn
cG9zdCcsIHB1c2hEYXRhKTsgLy8gV2lsbCB1c2UgdGhlIFBvc3RTZXJpYWxpemVyCi0gICAgICAg
IGBgYAotCi0gICAgICAgIEBtZXRob2QgcHVzaFBheWxvYWQKLSAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IHR5cGUgT3B0aW9uYWxseSwgYSBtb2RlbCB1c2VkIHRvIGRldGVybWluZSB3aGljaCBzZXJp
YWxpemVyIHdpbGwgYmUgdXNlZAotICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAotICAg
ICAgKi8KLSAgICAgIHB1c2hQYXlsb2FkOiBmdW5jdGlvbiAodHlwZSwgcGF5bG9hZCkgewotICAg
ICAgICB2YXIgc2VyaWFsaXplcjsKLSAgICAgICAgaWYgKCFwYXlsb2FkKSB7Ci0gICAgICAgICAg
cGF5bG9hZCA9IHR5cGU7Ci0gICAgICAgICAgc2VyaWFsaXplciA9IGRlZmF1bHRTZXJpYWxpemVy
KHRoaXMuY29udGFpbmVyKTsKLSAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgdXNl
IGBzdG9yZSNwdXNoUGF5bG9hZGAgd2l0aG91dCBhIHR5cGUgdW5sZXNzIHlvdXIgZGVmYXVsdCBz
ZXJpYWxpemVyIGRlZmluZXMgYHB1c2hQYXlsb2FkYCIsIHNlcmlhbGl6ZXIucHVzaFBheWxvYWQp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNlcmlhbGl6ZXIgPSB0aGlzLnNlcmlhbGl6
ZXJGb3IodHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2VyaWFsaXplci5wdXNoUGF5bG9hZCh0
aGlzLCBwYXlsb2FkKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBVcGRhdGUgZXhp
c3RpbmcgcmVjb3JkcyBpbiB0aGUgc3RvcmUuIFVubGlrZSBbcHVzaF0oI21ldGhvZF9wdXNoKSwK
LSAgICAgICAgdXBkYXRlIHdpbGwgbWVyZ2UgdGhlIG5ldyBkYXRhIHByb3BlcnRpZXMgd2l0aCB0
aGUgZXhpc3RpbmcKLSAgICAgICAgcHJvcGVydGllcy4gVGhpcyBtYWtlcyBpdCBzYWZlIHRvIHVz
ZSB3aXRoIGEgc3Vic2V0IG9mIHJlY29yZAotICAgICAgICBhdHRyaWJ1dGVzLiBUaGlzIG1ldGhv
ZCBleHBlY3RzIG5vcm1hbGl6ZWQgZGF0YS4KLQotICAgICAgICBgdXBkYXRlYCBpcyB1c2VmdWwg
aWYgeW91IGFwcCBicm9hZGNhc3RzIHBhcnRpYWwgdXBkYXRlcyB0bwotICAgICAgICByZWNvcmRz
LgotCi0gICAgICAgIGBgYGpzCi0gICAgICAgIEFwcC5QZXJzb24gPSBEUy5Nb2RlbC5leHRlbmQo
ewotICAgICAgICAgIGZpcnN0TmFtZTogRFMuYXR0cignc3RyaW5nJyksCi0gICAgICAgICAgbGFz
dE5hbWU6IERTLmF0dHIoJ3N0cmluZycpCi0gICAgICAgIH0pOwotCi0gICAgICAgIHN0b3JlLmdl
dCgncGVyc29uJywgMSkudGhlbihmdW5jdGlvbih0b20pIHsKLSAgICAgICAgICB0b20uZ2V0KCdm
aXJzdE5hbWUnKTsgLy8gVG9tCi0gICAgICAgICAgdG9tLmdldCgnbGFzdE5hbWUnKTsgLy8gRGFs
ZQotCi0gICAgICAgICAgdmFyIHVwZGF0ZUV2ZW50ID0ge2lkOiAxLCBmaXJzdE5hbWU6ICJUb21I
dWRhIn07Ci0gICAgICAgICAgc3RvcmUudXBkYXRlKCdwZXJzb24nLCB1cGRhdGVFdmVudCk7Ci0K
LSAgICAgICAgICB0b20uZ2V0KCdmaXJzdE5hbWUnKTsgLy8gVG9tSHVkYQotICAgICAgICAgIHRv
bS5nZXQoJ2xhc3ROYW1lJyk7IC8vIERhbGUKLSAgICAgICAgfSk7Ci0gICAgICAgIGBgYAotCi0g
ICAgICAgIEBtZXRob2QgdXBkYXRlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBkYXRhCi0gICAgICAgIEByZXR1cm4ge0RTLk1vZGVsfSB0aGUg
cmVjb3JkIHRoYXQgd2FzIHVwZGF0ZWQuCi0gICAgICAqLwotICAgICAgdXBkYXRlOiBmdW5jdGlv
bih0eXBlLCBkYXRhKSB7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3QgaW5jbHVkZSBh
biBgaWRgIGZvciAiICsgdHlwZSArICIgaW4gYSBoYXNoIHBhc3NlZCB0byBgdXBkYXRlYCIsIGRh
dGEuaWQgIT0gbnVsbCk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaCh0eXBlLCBkYXRhLCB0
cnVlKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBJZiB5b3UgaGF2ZSBhbiBBcnJh
eSBvZiBub3JtYWxpemVkIGRhdGEgdG8gcHVzaCwKLSAgICAgICAgeW91IGNhbiBjYWxsIGBwdXNo
TWFueWAgd2l0aCB0aGUgQXJyYXksIGFuZCBpdCB3aWxsCi0gICAgICAgIGNhbGwgYHB1c2hgIHJl
cGVhdGVkbHkgZm9yIHlvdS4KLQotICAgICAgICBAbWV0aG9kIHB1c2hNYW55Ci0gICAgICAgIEBw
YXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBwYXJh
bSB7QXJyYXl9IGRhdGFzCi0gICAgICAgIEByZXR1cm4ge0FycmF5fQotICAgICAgKi8KLSAgICAg
IHB1c2hNYW55OiBmdW5jdGlvbih0eXBlLCBkYXRhcykgewotICAgICAgICByZXR1cm4gbWFwKGRh
dGFzLCBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMucHVzaCh0eXBlLCBk
YXRhKTsKLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAg
SWYgeW91IGhhdmUgc29tZSBtZXRhZGF0YSB0byBzZXQgZm9yIGEgdHlwZQotICAgICAgICB5b3Ug
Y2FuIGNhbGwgYG1ldGFGb3JUeXBlYC4KLQotICAgICAgICBAbWV0aG9kIG1ldGFGb3JUeXBlCi0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nIG9yIHN1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBtZXRhZGF0YQotICAgICAgKi8KLSAgICAgIG1ldGFGb3JUeXBl
OiBmdW5jdGlvbih0eXBlLCBtZXRhZGF0YSkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZv
cih0eXBlKTsKLQotICAgICAgICBFbWJlci5tZXJnZSh0aGlzLnR5cGVNYXBGb3IodHlwZSkubWV0
YWRhdGEsIG1ldGFkYXRhKTsKLSAgICAgIH0sCi0KLSAgICAgIC8qKgotICAgICAgICBCdWlsZCBh
IGJyYW5kIG5ldyByZWNvcmQgZm9yIGEgZ2l2ZW4gdHlwZSwgSUQsIGFuZAotICAgICAgICBpbml0
aWFsIGRhdGEuCi0KLSAgICAgICAgQG1ldGhvZCBidWlsZFJlY29yZAotICAgICAgICBAcHJpdmF0
ZQotICAgICAgICBAcGFyYW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBpZAotICAgICAgICBAcGFyYW0ge09iamVjdH0gZGF0YQotICAgICAgICBA
cmV0dXJuIHtEUy5Nb2RlbH0gcmVjb3JkCi0gICAgICAqLwotICAgICAgYnVpbGRSZWNvcmQ6IGZ1
bmN0aW9uKHR5cGUsIGlkLCBkYXRhKSB7Ci0gICAgICAgIHZhciB0eXBlTWFwID0gdGhpcy50eXBl
TWFwRm9yKHR5cGUpLAotICAgICAgICAgICAgaWRUb1JlY29yZCA9IHR5cGVNYXAuaWRUb1JlY29y
ZDsKLQotICAgICAgICBFbWJlci5hc3NlcnQoJ1RoZSBpZCAnICsgaWQgKyAnIGhhcyBhbHJlYWR5
IGJlZW4gdXNlZCB3aXRoIGFub3RoZXIgcmVjb3JkIG9mIHR5cGUgJyArIHR5cGUudG9TdHJpbmco
KSArICcuJywgIWlkIHx8ICFpZFRvUmVjb3JkW2lkXSk7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgi
YCIgKyBFbWJlci5pbnNwZWN0KHR5cGUpKyAiYCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYW4gZW1i
ZXItZGF0YSBtb2RlbCIsICh0eXBlb2YgdHlwZS5fY3JlYXRlID09PSAnZnVuY3Rpb24nKSApOwot
Ci0gICAgICAgIC8vIGxvb2t1cEZhY3Rvcnkgc2hvdWxkIHJlYWxseSByZXR1cm4gYW4gb2JqZWN0
IHRoYXQgY3JlYXRlcwotICAgICAgICAvLyBpbnN0YW5jZXMgd2l0aCB0aGUgaW5qZWN0aW9ucyBh
cHBsaWVkCi0gICAgICAgIHZhciByZWNvcmQgPSB0eXBlLl9jcmVhdGUoewotICAgICAgICAgIGlk
OiBpZCwKLSAgICAgICAgICBzdG9yZTogdGhpcywKLSAgICAgICAgICBjb250YWluZXI6IHRoaXMu
Y29udGFpbmVyCi0gICAgICAgIH0pOwotCi0gICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAg
cmVjb3JkLnNldHVwRGF0YShkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlJ3Jl
IGNyZWF0aW5nIGFuIGl0ZW0sIHRoaXMgcHJvY2VzcyB3aWxsIGJlIGRvbmUKLSAgICAgICAgLy8g
bGF0ZXIsIG9uY2UgdGhlIG9iamVjdCBoYXMgYmVlbiBwZXJzaXN0ZWQuCi0gICAgICAgIGlmIChp
ZCkgewotICAgICAgICAgIGlkVG9SZWNvcmRbaWRdID0gcmVjb3JkOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdHlwZU1hcC5yZWNvcmRzLnB1c2gocmVjb3JkKTsKLQotICAgICAgICByZXR1cm4gcmVj
b3JkOwotICAgICAgfSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uCi0gICAgICAvLyAuIERF
U1RSVUNUSU9OIC4KLSAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLgotCi0gICAgICAvKioKLSAgICAg
ICAgV2hlbiBhIHJlY29yZCBpcyBkZXN0cm95ZWQsIHRoaXMgdW4taW5kZXhlcyBpdCBhbmQKLSAg
ICAgICAgcmVtb3ZlcyBpdCBmcm9tIGFueSByZWNvcmQgYXJyYXlzIHNvIGl0IGNhbiBiZSBHQ2Vk
LgotCi0gICAgICAgIEBtZXRob2QgZGVtYXRlcmlhbGl6ZVJlY29yZAotICAgICAgICBAcHJpdmF0
ZQotICAgICAgICBAcGFyYW0ge0RTLk1vZGVsfSByZWNvcmQKLSAgICAgICovCi0gICAgICBkZW1h
dGVyaWFsaXplUmVjb3JkOiBmdW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgdmFyIHR5cGUgPSBy
ZWNvcmQuY29uc3RydWN0b3IsCi0gICAgICAgICAgICB0eXBlTWFwID0gdGhpcy50eXBlTWFwRm9y
KHR5cGUpLAotICAgICAgICAgICAgaWQgPSBnZXQocmVjb3JkLCAnaWQnKTsKLQotICAgICAgICBy
ZWNvcmQudXBkYXRlUmVjb3JkQXJyYXlzKCk7Ci0KLSAgICAgICAgaWYgKGlkKSB7Ci0gICAgICAg
ICAgZGVsZXRlIHR5cGVNYXAuaWRUb1JlY29yZFtpZF07Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgbG9jID0gaW5kZXhPZih0eXBlTWFwLnJlY29yZHMsIHJlY29yZCk7Ci0gICAgICAgIHR5cGVN
YXAucmVjb3Jkcy5zcGxpY2UobG9jLCAxKTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBSRUxBVElPTlNISVAgQ0hBTkdFUyAuCi0gICAg
ICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotICAgICAgYWRkUmVsYXRpb25zaGlwQ2hh
bmdlRm9yOiBmdW5jdGlvbihjaGlsZFJlY29yZCwgY2hpbGRLZXksIHBhcmVudFJlY29yZCwgcGFy
ZW50S2V5LCBjaGFuZ2UpIHsKLSAgICAgICAgdmFyIGNsaWVudElkID0gY2hpbGRSZWNvcmQuY2xp
ZW50SWQsCi0gICAgICAgICAgICBwYXJlbnRDbGllbnRJZCA9IHBhcmVudFJlY29yZCA/IHBhcmVu
dFJlY29yZCA6IHBhcmVudFJlY29yZDsKLSAgICAgICAgdmFyIGtleSA9IGNoaWxkS2V5ICsgcGFy
ZW50S2V5OwotICAgICAgICB2YXIgY2hhbmdlcyA9IHRoaXMuX3JlbGF0aW9uc2hpcENoYW5nZXM7
Ci0gICAgICAgIGlmICghKGNsaWVudElkIGluIGNoYW5nZXMpKSB7Ci0gICAgICAgICAgY2hhbmdl
c1tjbGllbnRJZF0gPSB7fTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShwYXJlbnRDbGllbnRJ
ZCBpbiBjaGFuZ2VzW2NsaWVudElkXSkpIHsKLSAgICAgICAgICBjaGFuZ2VzW2NsaWVudElkXVtw
YXJlbnRDbGllbnRJZF0gPSB7fTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShrZXkgaW4gY2hh
bmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdKSkgewotICAgICAgICAgIGNoYW5nZXNbY2xp
ZW50SWRdW3BhcmVudENsaWVudElkXVtrZXldID0ge307Ci0gICAgICAgIH0KLSAgICAgICAgY2hh
bmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdW2tleV1bY2hhbmdlLmNoYW5nZVR5cGVdID0g
Y2hhbmdlOwotICAgICAgfSwKLQotICAgICAgcmVtb3ZlUmVsYXRpb25zaGlwQ2hhbmdlRm9yOiBm
dW5jdGlvbihjbGllbnRSZWNvcmQsIGNoaWxkS2V5LCBwYXJlbnRSZWNvcmQsIHBhcmVudEtleSwg
dHlwZSkgewotICAgICAgICB2YXIgY2xpZW50SWQgPSBjbGllbnRSZWNvcmQuY2xpZW50SWQsCi0g
ICAgICAgICAgICBwYXJlbnRDbGllbnRJZCA9IHBhcmVudFJlY29yZCA/IHBhcmVudFJlY29yZC5j
bGllbnRJZCA6IHBhcmVudFJlY29yZDsKLSAgICAgICAgdmFyIGNoYW5nZXMgPSB0aGlzLl9yZWxh
dGlvbnNoaXBDaGFuZ2VzOwotICAgICAgICB2YXIga2V5ID0gY2hpbGRLZXkgKyBwYXJlbnRLZXk7
Ci0gICAgICAgIGlmICghKGNsaWVudElkIGluIGNoYW5nZXMpIHx8ICEocGFyZW50Q2xpZW50SWQg
aW4gY2hhbmdlc1tjbGllbnRJZF0pIHx8ICEoa2V5IGluIGNoYW5nZXNbY2xpZW50SWRdW3BhcmVu
dENsaWVudElkXSkpewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWxl
dGUgY2hhbmdlc1tjbGllbnRJZF1bcGFyZW50Q2xpZW50SWRdW2tleV1bdHlwZV07Ci0gICAgICB9
LAotCi0gICAgICByZWxhdGlvbnNoaXBDaGFuZ2VQYWlyc0ZvcjogZnVuY3Rpb24ocmVjb3JkKXsK
LSAgICAgICAgdmFyIHRvUmV0dXJuID0gW107Ci0KLSAgICAgICAgaWYoICFyZWNvcmQgKSB7IHJl
dHVybiB0b1JldHVybjsgfQotCi0gICAgICAgIC8vVE9ETyhJZ29yKSBXaGF0IGFib3V0IHRoZSBv
dGhlciBzaWRlCi0gICAgICAgIHZhciBjaGFuZ2VzT2JqZWN0ID0gdGhpcy5fcmVsYXRpb25zaGlw
Q2hhbmdlc1tyZWNvcmQuY2xpZW50SWRdOwotICAgICAgICBmb3IgKHZhciBvYmpLZXkgaW4gY2hh
bmdlc09iamVjdCl7Ci0gICAgICAgICAgaWYoY2hhbmdlc09iamVjdC5oYXNPd25Qcm9wZXJ0eShv
YmpLZXkpKXsKLSAgICAgICAgICAgIGZvciAodmFyIGNoYW5nZUtleSBpbiBjaGFuZ2VzT2JqZWN0
W29iaktleV0pewotICAgICAgICAgICAgICBpZihjaGFuZ2VzT2JqZWN0W29iaktleV0uaGFzT3du
UHJvcGVydHkoY2hhbmdlS2V5KSl7Ci0gICAgICAgICAgICAgICAgdG9SZXR1cm4ucHVzaChjaGFu
Z2VzT2JqZWN0W29iaktleV1bY2hhbmdlS2V5XSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvUmV0dXJuOwot
ICAgICAgfSwKLQotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgLy8gLiBQ
RVItVFlQRSBBREFQVEVSUwotICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi0gICAg
ICAvKioKLSAgICAgICAgUmV0dXJucyB0aGUgYWRhcHRlciBmb3IgYSBnaXZlbiB0eXBlLgotCi0g
ICAgICAgIEBtZXRob2QgYWRhcHRlckZvcgotICAgICAgICBAcHJpdmF0ZQotICAgICAgICBAcGFy
YW0ge3N1YmNsYXNzIG9mIERTLk1vZGVsfSB0eXBlCi0gICAgICAgIEByZXR1cm4gRFMuQWRhcHRl
cgotICAgICAgKi8KLSAgICAgIGFkYXB0ZXJGb3I6IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAg
dmFyIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLCBhZGFwdGVyOwotCi0gICAgICAgIGlmIChj
b250YWluZXIpIHsKLSAgICAgICAgICBhZGFwdGVyID0gY29udGFpbmVyLmxvb2t1cCgnYWRhcHRl
cjonICsgdHlwZS50eXBlS2V5KSB8fCBjb250YWluZXIubG9va3VwKCdhZGFwdGVyOmFwcGxpY2F0
aW9uJyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYWRhcHRlciB8fCBnZXQodGhpcywg
J2RlZmF1bHRBZGFwdGVyJyk7Ci0gICAgICB9LAotCi0gICAgICAvLyAuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4KLSAgICAgIC8vIC4gUkVDT1JEIENIQU5HRSBOT1RJRklDQVRJT04gLgot
ICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLSAgICAgIC8qKgotICAg
ICAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBzZXJpYWxpemVyIGZvciBhIGdpdmVuIHR5
cGUuIEZvcgotICAgICAgICBleGFtcGxlLCBgc2VyaWFsaXplckZvcigncGVyc29uJylgIHdpbGwg
cmV0dXJuIGFuIGluc3RhbmNlIG9mCi0gICAgICAgIGBBcHAuUGVyc29uU2VyaWFsaXplcmAuCi0K
LSAgICAgICAgSWYgbm8gYEFwcC5QZXJzb25TZXJpYWxpemVyYCBpcyBmb3VuZCwgdGhpcyBtZXRo
b2Qgd2lsbCBsb29rCi0gICAgICAgIGZvciBhbiBgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplcmAg
KHRoZSBkZWZhdWx0IHNlcmlhbGl6ZXIgZm9yCi0gICAgICAgIHlvdXIgZW50aXJlIGFwcGxpY2F0
aW9uKS4KLQotICAgICAgICBJZiBubyBgQXBwLkFwcGxpY2F0aW9uU2VyaWFsaXplcmAgaXMgZm91
bmQsIGl0IHdpbGwgZmFsbCBiYWNrCi0gICAgICAgIHRvIGFuIGluc3RhbmNlIG9mIGBEUy5KU09O
U2VyaWFsaXplcmAuCi0KLSAgICAgICAgQG1ldGhvZCBzZXJpYWxpemVyRm9yCi0gICAgICAgIEBw
cml2YXRlCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlIHRoZSByZWNvcmQgdG8gc2VyaWFs
aXplCi0gICAgICAgIEByZXR1cm4ge0RTLlNlcmlhbGl6ZXJ9Ci0gICAgICAqLwotICAgICAgc2Vy
aWFsaXplckZvcjogZnVuY3Rpb24odHlwZSkgewotICAgICAgICB0eXBlID0gdGhpcy5tb2RlbEZv
cih0eXBlKTsKLSAgICAgICAgdmFyIGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJGb3IodHlwZSk7Ci0K
LSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXJGb3IodGhpcy5jb250YWluZXIsIHR5cGUudHlwZUtl
eSwgYWRhcHRlciAmJiBhZGFwdGVyLmRlZmF1bHRTZXJpYWxpemVyKTsKLSAgICAgIH0sCi0KLSAg
ICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHR5cGVNYXBzID0gdGhp
cy50eXBlTWFwczsKLSAgICAgICAgdmFyIGtleXMgPSBFbWJlci5rZXlzKHR5cGVNYXBzKTsKLSAg
ICAgICAgdmFyIHN0b3JlID0gdGhpczsKLQotICAgICAgICB2YXIgdHlwZXMgPSBtYXAoa2V5cywg
YnlUeXBlKTsKLQotICAgICAgICB0aGlzLnJlY29yZEFycmF5TWFuYWdlci5kZXN0cm95KCk7Ci0K
LSAgICAgICAgZm9yRWFjaCh0eXBlcywgdGhpcy51bmxvYWRBbGwsIHRoaXMpOwotCi0gICAgICAg
IGZ1bmN0aW9uIGJ5VHlwZShlbnRyeSkgewotICAgICAgICAgIHJldHVybiB0eXBlTWFwc1tlbnRy
eV1bJ3R5cGUnXTsKLSAgICAgICAgfQotCi0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAg
QWxsIHR5cGVLZXlzIGFyZSBjYW1lbENhc2UgaW50ZXJuYWxseS4gQ2hhbmdpbmcgdGhpcyBmdW5j
dGlvbiBtYXkKLSAgICAgICAgcmVxdWlyZSBjaGFuZ2VzIHRvIG90aGVyIG5vcm1hbGl6YXRpb24g
aG9va3MgKHN1Y2ggYXMgdHlwZUZvclJvb3QpLgotCi0gICAgICAgIEBtZXRob2QgX25vcm1hbGl6
ZVR5cGVLZXkKLSAgICAgICAgQHByaXZhdGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUK
LSAgICAgICAgQHJldHVybiB7U3RyaW5nfSBpZiB0aGUgYWRhcHRlciBjYW4gZ2VuZXJhdGUgb25l
LCBhbiBJRAotICAgICAgKi8KLSAgICAgIF9ub3JtYWxpemVUeXBlS2V5OiBmdW5jdGlvbihrZXkp
IHsKLSAgICAgICAgcmV0dXJuIGNhbWVsaXplKHNpbmd1bGFyaXplKGtleSkpOwotICAgICAgfQot
ICAgIH0pOwotCi0gICAgZnVuY3Rpb24gbm9ybWFsaXplUmVsYXRpb25zaGlwcyhzdG9yZSwgdHlw
ZSwgZGF0YSwgcmVjb3JkKSB7Ci0gICAgICB0eXBlLmVhY2hSZWxhdGlvbnNoaXAoZnVuY3Rpb24o
a2V5LCByZWxhdGlvbnNoaXApIHsKLSAgICAgICAgLy8gQSBsaW5rICh1c3VhbGx5IGEgVVJMKSB3
YXMgYWxyZWFkeSBwcm92aWRlZCBpbgotICAgICAgICAvLyBub3JtYWxpemVkIGZvcm0KLSAgICAg
ICAgaWYgKGRhdGEubGlua3MgJiYgZGF0YS5saW5rc1trZXldKSB7Ci0gICAgICAgICAgaWYgKHJl
Y29yZCAmJiByZWxhdGlvbnNoaXAub3B0aW9ucy5hc3luYykgeyByZWNvcmQuX3JlbGF0aW9uc2hp
cHNba2V5XSA9IG51bGw7IH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIga2luZCA9IHJlbGF0aW9uc2hpcC5raW5kLAotICAgICAgICAgICAgdmFsdWUgPSBkYXRh
W2tleV07Ci0KLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuOyB9Ci0KLSAgICAg
ICAgaWYgKGtpbmQgPT09ICdiZWxvbmdzVG8nKSB7Ci0gICAgICAgICAgZGVzZXJpYWxpemVSZWNv
cmRJZChzdG9yZSwgZGF0YSwga2V5LCByZWxhdGlvbnNoaXAsIHZhbHVlKTsKLSAgICAgICAgfSBl
bHNlIGlmIChraW5kID09PSAnaGFzTWFueScpIHsKLSAgICAgICAgICBkZXNlcmlhbGl6ZVJlY29y
ZElkcyhzdG9yZSwgZGF0YSwga2V5LCByZWxhdGlvbnNoaXAsIHZhbHVlKTsKLSAgICAgICAgICBh
ZGRVbnNhdmVkUmVjb3JkcyhyZWNvcmQsIGtleSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9
KTsKLQotICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZGVzZXJpYWxp
emVSZWNvcmRJZChzdG9yZSwgZGF0YSwga2V5LCByZWxhdGlvbnNoaXAsIGlkKSB7Ci0gICAgICBp
ZiAoIU1vZGVsKSB7IE1vZGVsID0gcmVxdWlyZU1vZHVsZSgiZW1iZXItZGF0YS9saWIvc3lzdGVt
L21vZGVsIilbIk1vZGVsIl07IH0KLSAgICAgIGlmIChpc05vbmUoaWQpIHx8IGlkIGluc3RhbmNl
b2YgTW9kZWwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgdHlwZTsK
LQotICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGlkID09PSAnc3Ry
aW5nJykgewotICAgICAgICB0eXBlID0gdHlwZUZvcihyZWxhdGlvbnNoaXAsIGtleSwgZGF0YSk7
Ci0gICAgICAgIGRhdGFba2V5XSA9IHN0b3JlLnJlY29yZEZvcklkKHR5cGUsIGlkKTsKLSAgICAg
IH0gZWxzZSBpZiAodHlwZW9mIGlkID09PSAnb2JqZWN0JykgewotICAgICAgICAvLyBwb2x5bW9y
cGhpYwotICAgICAgICBkYXRhW2tleV0gPSBzdG9yZS5yZWNvcmRGb3JJZChpZC50eXBlLCBpZC5p
ZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdHlwZUZvcihyZWxhdGlvbnNoaXAs
IGtleSwgZGF0YSkgewotICAgICAgaWYgKHJlbGF0aW9uc2hpcC5vcHRpb25zLnBvbHltb3JwaGlj
KSB7Ci0gICAgICAgIHJldHVybiBkYXRhW2tleSArICJUeXBlIl07Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICByZXR1cm4gcmVsYXRpb25zaGlwLnR5cGU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gZGVzZXJpYWxpemVSZWNvcmRJZHMoc3RvcmUsIGRhdGEsIGtleSwgcmVsYXRpb25z
aGlwLCBpZHMpIHsKLSAgICAgIGZvciAodmFyIGk9MCwgbD1pZHMubGVuZ3RoOyBpPGw7IGkrKykg
ewotICAgICAgICBkZXNlcmlhbGl6ZVJlY29yZElkKHN0b3JlLCBpZHMsIGksIHJlbGF0aW9uc2hp
cCwgaWRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHVu
c2F2ZWQgcmVjb3JkcyB0aGF0IGFyZSBpbiBhIGhhc01hbnkgdGhleSB3b24ndCBiZQotICAgIC8v
IGluIHRoZSBwYXlsb2FkLCBzbyBhZGQgdGhlbSBiYWNrIGluIG1hbnVhbGx5LgotICAgIGZ1bmN0
aW9uIGFkZFVuc2F2ZWRSZWNvcmRzKHJlY29yZCwga2V5LCBkYXRhKSB7Ci0gICAgICBpZihyZWNv
cmQpIHsKLSAgICAgICAgRW1iZXIuQShkYXRhKS5wdXNoT2JqZWN0cyhyZWNvcmQuZ2V0KGtleSku
ZmlsdGVyQnkoJ2lzTmV3JykpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIERlbGVnYXRpb24g
dG8gdGhlIGFkYXB0ZXIgYW5kIHByb21pc2UgbWFuYWdlbWVudAotICAgIC8qKgotICAgICAgQSBg
UHJvbWlzZUFycmF5YCBpcyBhbiBvYmplY3QgdGhhdCBhY3RzIGxpa2UgYm90aCBhbiBgRW1iZXIu
QXJyYXlgCi0gICAgICBhbmQgYSBwcm9taXNlLiBXaGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVk
IHRoZSByZXN1bHRpbmcgdmFsdWUKLSAgICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBgUHJvbWlzZUFy
cmF5YCdzIGBjb250ZW50YCBwcm9wZXJ0eS4gVGhpcyBtYWtlcwotICAgICAgaXQgZWFzeSB0byBj
cmVhdGUgZGF0YSBiaW5kaW5ncyB3aXRoIHRoZSBgUHJvbWlzZUFycmF5YCB0aGF0IHdpbGwgYmUK
LSAgICAgIHVwZGF0ZWQgd2hlbiB0aGUgcHJvbWlzZSByZXNvbHZlcy4KLQotICAgICAgRm9yIG1v
cmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4KLSAgICAgIGRv
Y3VtZW50YXRpb25dKC9hcGkvY2xhc3Nlcy9FbWJlci5Qcm9taXNlUHJveHlNaXhpbi5odG1sKS4K
LQotICAgICAgRXhhbXBsZQotCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgcHJvbWlz
ZUFycmF5ID0gRFMuUHJvbWlzZUFycmF5LmNyZWF0ZSh7Ci0gICAgICAgIHByb21pc2U6ICQuZ2V0
SlNPTignL3NvbWUvcmVtb3RlL2RhdGEuanNvbicpCi0gICAgICB9KTsKLQotICAgICAgcHJvbWlz
ZUFycmF5LmdldCgnbGVuZ3RoJyk7IC8vIDAKLQotICAgICAgcHJvbWlzZUFycmF5LnRoZW4oZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHByb21pc2VBcnJheS5nZXQoJ2xlbmd0aCcpOyAvLyAxMDAKLSAg
ICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBQcm9taXNlQXJyYXkKLSAgICAgIEBu
YW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVtYmVyLkFycmF5UHJveHkKLSAgICAgIEB1c2Vz
IEVtYmVyLlByb21pc2VQcm94eU1peGluCi0gICAgKi8KLSAgICBQcm9taXNlQXJyYXkgPSBFbWJl
ci5BcnJheVByb3h5LmV4dGVuZChFbWJlci5Qcm9taXNlUHJveHlNaXhpbik7Ci0gICAgLyoqCi0g
ICAgICBBIGBQcm9taXNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBhY3RzIGxpa2UgYm90aCBh
biBgRW1iZXIuT2JqZWN0YAotICAgICAgYW5kIGEgcHJvbWlzZS4gV2hlbiB0aGUgcHJvbWlzZSBp
cyByZXNvbHZlZCB0aGUgdGhlIHJlc3VsdGluZyB2YWx1ZQotICAgICAgd2lsbCBiZSBzZXQgdG8g
dGhlIGBQcm9taXNlT2JqZWN0YCdzIGBjb250ZW50YCBwcm9wZXJ0eS4gVGhpcyBtYWtlcwotICAg
ICAgaXQgZWFzeSB0byBjcmVhdGUgZGF0YSBiaW5kaW5ncyB3aXRoIHRoZSBgUHJvbWlzZU9iamVj
dGAgdGhhdCB3aWxsCi0gICAgICBiZSB1cGRhdGVkIHdoZW4gdGhlIHByb21pc2UgcmVzb2x2ZXMu
Ci0KLSAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW0VtYmVyLlByb21pc2VQcm94
eU1peGluCi0gICAgICBkb2N1bWVudGF0aW9uXSgvYXBpL2NsYXNzZXMvRW1iZXIuUHJvbWlzZVBy
b3h5TWl4aW4uaHRtbCkuCi0KLSAgICAgIEV4YW1wbGUKLQotICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgdmFyIHByb21pc2VPYmplY3QgPSBEUy5Qcm9taXNlT2JqZWN0LmNyZWF0ZSh7Ci0gICAg
ICAgIHByb21pc2U6ICQuZ2V0SlNPTignL3NvbWUvcmVtb3RlL2RhdGEuanNvbicpCi0gICAgICB9
KTsKLQotICAgICAgcHJvbWlzZU9iamVjdC5nZXQoJ25hbWUnKTsgLy8gbnVsbAotCi0gICAgICBw
cm9taXNlT2JqZWN0LnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIHByb21pc2VPYmplY3QuZ2V0
KCduYW1lJyk7IC8vICdUb21zdGVyJwotICAgICAgfSk7Ci0gICAgICBgYGAKLQotICAgICAgQGNs
YXNzIFByb21pc2VPYmplY3QKLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgIEBleHRlbmRzIEVt
YmVyLk9iamVjdFByb3h5Ci0gICAgICBAdXNlcyBFbWJlci5Qcm9taXNlUHJveHlNaXhpbgotICAg
ICovCi0gICAgUHJvbWlzZU9iamVjdCA9IEVtYmVyLk9iamVjdFByb3h5LmV4dGVuZChFbWJlci5Q
cm9taXNlUHJveHlNaXhpbik7Ci0KLSAgICBmdW5jdGlvbiBwcm9taXNlT2JqZWN0KHByb21pc2Us
IGxhYmVsKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZU9iamVjdC5jcmVhdGUoewotICAgICAgICBw
cm9taXNlOiBQcm9taXNlLmNhc3QocHJvbWlzZSwgbGFiZWwpCi0gICAgICB9KTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBwcm9taXNlQXJyYXkocHJvbWlzZSwgbGFiZWwpIHsKLSAgICAgIHJldHVy
biBQcm9taXNlQXJyYXkuY3JlYXRlKHsKLSAgICAgICAgcHJvbWlzZTogUHJvbWlzZS5jYXN0KHBy
b21pc2UsIGxhYmVsKQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNUaGVuYWJs
ZShvYmplY3QpIHsKLSAgICAgIHJldHVybiBvYmplY3QgJiYgdHlwZW9mIG9iamVjdC50aGVuID09
PSAnZnVuY3Rpb24nOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZXJGb3IoY29udGFp
bmVyLCB0eXBlLCBkZWZhdWx0U2VyaWFsaXplcikgewotICAgICAgcmV0dXJuIGNvbnRhaW5lci5s
b29rdXAoJ3NlcmlhbGl6ZXI6Jyt0eXBlKSB8fAotICAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyLmxvb2t1cCgnc2VyaWFsaXplcjphcHBsaWNhdGlvbicpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICBjb250YWluZXIubG9va3VwKCdzZXJpYWxpemVyOicgKyBkZWZhdWx0U2VyaWFsaXplcikg
fHwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5sb29rdXAoJ3NlcmlhbGl6ZXI6LWRl
ZmF1bHQnKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkZWZhdWx0U2VyaWFsaXplcihjb250YWlu
ZXIpIHsKLSAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwKCdzZXJpYWxpemVyOmFwcGxpY2F0
aW9uJykgfHwKLSAgICAgICAgICAgICBjb250YWluZXIubG9va3VwKCdzZXJpYWxpemVyOi1kZWZh
dWx0Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2VyaWFsaXplckZvckFkYXB0ZXIoYWRhcHRl
ciwgdHlwZSkgewotICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBhZGFwdGVyLnNlcmlhbGl6ZXIsCi0g
ICAgICAgICAgZGVmYXVsdFNlcmlhbGl6ZXIgPSBhZGFwdGVyLmRlZmF1bHRTZXJpYWxpemVyLAot
ICAgICAgICAgIGNvbnRhaW5lciA9IGFkYXB0ZXIuY29udGFpbmVyOwotCi0gICAgICBpZiAoY29u
dGFpbmVyICYmIHNlcmlhbGl6ZXIgPT09IHVuZGVmaW5lZCkgewotICAgICAgICBzZXJpYWxpemVy
ID0gc2VyaWFsaXplckZvcihjb250YWluZXIsIHR5cGUudHlwZUtleSwgZGVmYXVsdFNlcmlhbGl6
ZXIpOwotICAgICAgfQotCi0gICAgICBpZiAoc2VyaWFsaXplciA9PT0gbnVsbCB8fCBzZXJpYWxp
emVyID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgc2VyaWFsaXplciA9IHsKLSAgICAgICAgICBl
eHRyYWN0OiBmdW5jdGlvbihzdG9yZSwgdHlwZSwgcGF5bG9hZCkgeyByZXR1cm4gcGF5bG9hZDsg
fQotICAgICAgICB9OwotICAgICAgfQotCi0gICAgICByZXR1cm4gc2VyaWFsaXplcjsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBfZmluZChhZGFwdGVyLCBzdG9yZSwgdHlwZSwgaWQpIHsKLSAgICAg
IHZhciBwcm9taXNlID0gYWRhcHRlci5maW5kKHN0b3JlLCB0eXBlLCBpZCksCi0gICAgICAgICAg
c2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3JBZGFwdGVyKGFkYXB0ZXIsIHR5cGUpLAotICAgICAg
ICAgIGxhYmVsID0gIkRTOiBIYW5kbGUgQWRhcHRlciNmaW5kIG9mICIgKyB0eXBlICsgIiB3aXRo
IGlkOiAiICsgaWQ7Ci0KLSAgICAgIHJldHVybiBQcm9taXNlLmNhc3QocHJvbWlzZSwgbGFiZWwp
LnRoZW4oZnVuY3Rpb24oYWRhcHRlclBheWxvYWQpIHsKLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJZ
b3UgbWFkZSBhIHJlcXVlc3QgZm9yIGEgIiArIHR5cGUudHlwZUtleSArICIgd2l0aCBpZCAiICsg
aWQgKyAiLCBidXQgdGhlIGFkYXB0ZXIncyByZXNwb25zZSBkaWQgbm90IGhhdmUgYW55IGRhdGEi
LCBhZGFwdGVyUGF5bG9hZCk7Ci0gICAgICAgIHZhciBwYXlsb2FkID0gc2VyaWFsaXplci5leHRy
YWN0KHN0b3JlLCB0eXBlLCBhZGFwdGVyUGF5bG9hZCwgaWQsICdmaW5kJyk7Ci0KLSAgICAgICAg
cmV0dXJuIHN0b3JlLnB1c2godHlwZSwgcGF5bG9hZCk7Ci0gICAgICB9LCBmdW5jdGlvbihlcnJv
cikgewotICAgICAgICB2YXIgcmVjb3JkID0gc3RvcmUuZ2V0QnlJZCh0eXBlLCBpZCk7Ci0gICAg
ICAgIHJlY29yZC5ub3RGb3VuZCgpOwotICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICAgIH0sICJE
UzogRXh0cmFjdCBwYXlsb2FkIG9mICciICsgdHlwZSArICInIik7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gX2ZpbmRNYW55KGFkYXB0ZXIsIHN0b3JlLCB0eXBlLCBpZHMsIG93bmVyKSB7Ci0gICAg
ICB2YXIgcHJvbWlzZSA9IGFkYXB0ZXIuZmluZE1hbnkoc3RvcmUsIHR5cGUsIGlkcywgb3duZXIp
LAotICAgICAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRhcHRlcihhZGFwdGVyLCB0
eXBlKSwKLSAgICAgICAgICBsYWJlbCA9ICJEUzogSGFuZGxlIEFkYXB0ZXIjZmluZE1hbnkgb2Yg
IiArIHR5cGU7Ci0KLSAgICAgIHJldHVybiBQcm9taXNlLmNhc3QocHJvbWlzZSwgbGFiZWwpLnRo
ZW4oZnVuY3Rpb24oYWRhcHRlclBheWxvYWQpIHsKLSAgICAgICAgdmFyIHBheWxvYWQgPSBzZXJp
YWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUsIGFkYXB0ZXJQYXlsb2FkLCBudWxsLCAnZmluZE1h
bnknKTsKLQotICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSByZXNwb25zZSBmcm9tIGEgZmluZE1h
bnkgbXVzdCBiZSBhbiBBcnJheSwgbm90ICIgKyBFbWJlci5pbnNwZWN0KHBheWxvYWQpLCBFbWJl
ci50eXBlT2YocGF5bG9hZCkgPT09ICdhcnJheScpOwotCi0gICAgICAgIHN0b3JlLnB1c2hNYW55
KHR5cGUsIHBheWxvYWQpOwotICAgICAgfSwgbnVsbCwgIkRTOiBFeHRyYWN0IHBheWxvYWQgb2Yg
IiArIHR5cGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIF9maW5kSGFzTWFueShhZGFwdGVyLCBz
dG9yZSwgcmVjb3JkLCBsaW5rLCByZWxhdGlvbnNoaXApIHsKLSAgICAgIHZhciBwcm9taXNlID0g
YWRhcHRlci5maW5kSGFzTWFueShzdG9yZSwgcmVjb3JkLCBsaW5rLCByZWxhdGlvbnNoaXApLAot
ICAgICAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRhcHRlcihhZGFwdGVyLCByZWxh
dGlvbnNoaXAudHlwZSksCi0gICAgICAgICAgbGFiZWwgPSAiRFM6IEhhbmRsZSBBZGFwdGVyI2Zp
bmRIYXNNYW55IG9mICIgKyByZWNvcmQgKyAiIDogIiArIHJlbGF0aW9uc2hpcC50eXBlOwotCi0g
ICAgICByZXR1cm4gUHJvbWlzZS5jYXN0KHByb21pc2UsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGFk
YXB0ZXJQYXlsb2FkKSB7Ci0gICAgICAgIHZhciBwYXlsb2FkID0gc2VyaWFsaXplci5leHRyYWN0
KHN0b3JlLCByZWxhdGlvbnNoaXAudHlwZSwgYWRhcHRlclBheWxvYWQsIG51bGwsICdmaW5kSGFz
TWFueScpOwotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIHJlc3BvbnNlIGZyb20gYSBmaW5k
SGFzTWFueSBtdXN0IGJlIGFuIEFycmF5LCBub3QgIiArIEVtYmVyLmluc3BlY3QocGF5bG9hZCks
IEVtYmVyLnR5cGVPZihwYXlsb2FkKSA9PT0gJ2FycmF5Jyk7Ci0KLSAgICAgICAgdmFyIHJlY29y
ZHMgPSBzdG9yZS5wdXNoTWFueShyZWxhdGlvbnNoaXAudHlwZSwgcGF5bG9hZCk7Ci0gICAgICAg
IHJlY29yZC51cGRhdGVIYXNNYW55KHJlbGF0aW9uc2hpcC5rZXksIHJlY29yZHMpOwotICAgICAg
fSwgbnVsbCwgIkRTOiBFeHRyYWN0IHBheWxvYWQgb2YgIiArIHJlY29yZCArICIgOiBoYXNNYW55
ICIgKyByZWxhdGlvbnNoaXAudHlwZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gX2ZpbmRCZWxv
bmdzVG8oYWRhcHRlciwgc3RvcmUsIHJlY29yZCwgbGluaywgcmVsYXRpb25zaGlwKSB7Ci0gICAg
ICB2YXIgcHJvbWlzZSA9IGFkYXB0ZXIuZmluZEJlbG9uZ3NUbyhzdG9yZSwgcmVjb3JkLCBsaW5r
LCByZWxhdGlvbnNoaXApLAotICAgICAgICAgIHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRh
cHRlcihhZGFwdGVyLCByZWxhdGlvbnNoaXAudHlwZSksCi0gICAgICAgICAgbGFiZWwgPSAiRFM6
IEhhbmRsZSBBZGFwdGVyI2ZpbmRCZWxvbmdzVG8gb2YgIiArIHJlY29yZCArICIgOiAiICsgcmVs
YXRpb25zaGlwLnR5cGU7Ci0KLSAgICAgIHJldHVybiBQcm9taXNlLmNhc3QocHJvbWlzZSwgbGFi
ZWwpLnRoZW4oZnVuY3Rpb24oYWRhcHRlclBheWxvYWQpIHsKLSAgICAgICAgdmFyIHBheWxvYWQg
PSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHJlbGF0aW9uc2hpcC50eXBlLCBhZGFwdGVyUGF5
bG9hZCwgbnVsbCwgJ2ZpbmRCZWxvbmdzVG8nKTsKLSAgICAgICAgdmFyIHJlY29yZCA9IHN0b3Jl
LnB1c2gocmVsYXRpb25zaGlwLnR5cGUsIHBheWxvYWQpOwotCi0gICAgICAgIHJlY29yZC51cGRh
dGVCZWxvbmdzVG8ocmVsYXRpb25zaGlwLmtleSwgcmVjb3JkKTsKLSAgICAgICAgcmV0dXJuIHJl
Y29yZDsKLSAgICAgIH0sIG51bGwsICJEUzogRXh0cmFjdCBwYXlsb2FkIG9mICIgKyByZWNvcmQg
KyAiIDogIiArIHJlbGF0aW9uc2hpcC50eXBlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBfZmlu
ZEFsbChhZGFwdGVyLCBzdG9yZSwgdHlwZSwgc2luY2VUb2tlbikgewotICAgICAgdmFyIHByb21p
c2UgPSBhZGFwdGVyLmZpbmRBbGwoc3RvcmUsIHR5cGUsIHNpbmNlVG9rZW4pLAotICAgICAgICAg
IHNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyRm9yQWRhcHRlcihhZGFwdGVyLCB0eXBlKSwKLSAgICAg
ICAgICBsYWJlbCA9ICJEUzogSGFuZGxlIEFkYXB0ZXIjZmluZEFsbCBvZiAiICsgdHlwZTsKLQot
ICAgICAgcmV0dXJuIFByb21pc2UuY2FzdChwcm9taXNlLCBsYWJlbCkudGhlbihmdW5jdGlvbihh
ZGFwdGVyUGF5bG9hZCkgewotICAgICAgICB2YXIgcGF5bG9hZCA9IHNlcmlhbGl6ZXIuZXh0cmFj
dChzdG9yZSwgdHlwZSwgYWRhcHRlclBheWxvYWQsIG51bGwsICdmaW5kQWxsJyk7Ci0KLSAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJUaGUgcmVzcG9uc2UgZnJvbSBhIGZpbmRBbGwgbXVzdCBiZSBhbiBB
cnJheSwgbm90ICIgKyBFbWJlci5pbnNwZWN0KHBheWxvYWQpLCBFbWJlci50eXBlT2YocGF5bG9h
ZCkgPT09ICdhcnJheScpOwotCi0gICAgICAgIHN0b3JlLnB1c2hNYW55KHR5cGUsIHBheWxvYWQp
OwotICAgICAgICBzdG9yZS5kaWRVcGRhdGVBbGwodHlwZSk7Ci0gICAgICAgIHJldHVybiBzdG9y
ZS5hbGwodHlwZSk7Ci0gICAgICB9LCBudWxsLCAiRFM6IEV4dHJhY3QgcGF5bG9hZCBvZiBmaW5k
QWxsICIgKyB0eXBlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBfZmluZFF1ZXJ5KGFkYXB0ZXIs
IHN0b3JlLCB0eXBlLCBxdWVyeSwgcmVjb3JkQXJyYXkpIHsKLSAgICAgIHZhciBwcm9taXNlID0g
YWRhcHRlci5maW5kUXVlcnkoc3RvcmUsIHR5cGUsIHF1ZXJ5LCByZWNvcmRBcnJheSksCi0gICAg
ICAgICAgc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJGb3JBZGFwdGVyKGFkYXB0ZXIsIHR5cGUpLAot
ICAgICAgICAgIGxhYmVsID0gIkRTOiBIYW5kbGUgQWRhcHRlciNmaW5kUXVlcnkgb2YgIiArIHR5
cGU7Ci0KLSAgICAgIHJldHVybiBQcm9taXNlLmNhc3QocHJvbWlzZSwgbGFiZWwpLnRoZW4oZnVu
Y3Rpb24oYWRhcHRlclBheWxvYWQpIHsKLSAgICAgICAgdmFyIHBheWxvYWQgPSBzZXJpYWxpemVy
LmV4dHJhY3Qoc3RvcmUsIHR5cGUsIGFkYXB0ZXJQYXlsb2FkLCBudWxsLCAnZmluZFF1ZXJ5Jyk7
Ci0KLSAgICAgICAgRW1iZXIuYXNzZXJ0KCJUaGUgcmVzcG9uc2UgZnJvbSBhIGZpbmRRdWVyeSBt
dXN0IGJlIGFuIEFycmF5LCBub3QgIiArIEVtYmVyLmluc3BlY3QocGF5bG9hZCksIEVtYmVyLnR5
cGVPZihwYXlsb2FkKSA9PT0gJ2FycmF5Jyk7Ci0KLSAgICAgICAgcmVjb3JkQXJyYXkubG9hZChw
YXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIHJlY29yZEFycmF5OwotICAgICAgfSwgbnVsbCwgIkRT
OiBFeHRyYWN0IHBheWxvYWQgb2YgZmluZFF1ZXJ5ICIgKyB0eXBlKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBfY29tbWl0KGFkYXB0ZXIsIHN0b3JlLCBvcGVyYXRpb24sIHJlY29yZCkgewotICAg
ICAgdmFyIHR5cGUgPSByZWNvcmQuY29uc3RydWN0b3IsCi0gICAgICAgICAgcHJvbWlzZSA9IGFk
YXB0ZXJbb3BlcmF0aW9uXShzdG9yZSwgdHlwZSwgcmVjb3JkKSwKLSAgICAgICAgICBzZXJpYWxp
emVyID0gc2VyaWFsaXplckZvckFkYXB0ZXIoYWRhcHRlciwgdHlwZSksCi0gICAgICAgICAgbGFi
ZWwgPSAiRFM6IEV4dHJhY3QgYW5kIG5vdGlmeSBhYm91dCAiICsgb3BlcmF0aW9uICsgIiBjb21w
bGV0aW9uIG9mICIgKyByZWNvcmQ7Ci0KLSAgICAgIEVtYmVyLmFzc2VydCgiWW91ciBhZGFwdGVy
J3MgJyIgKyBvcGVyYXRpb24gKyAiJyBtZXRob2QgbXVzdCByZXR1cm4gYSBwcm9taXNlLCBidXQg
aXQgcmV0dXJuZWQgIiArIHByb21pc2UsIGlzVGhlbmFibGUocHJvbWlzZSkpOwotCi0gICAgICBy
ZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGFkYXB0ZXJQYXlsb2FkKSB7Ci0gICAgICAgIHZh
ciBwYXlsb2FkOwotCi0gICAgICAgIGlmIChhZGFwdGVyUGF5bG9hZCkgewotICAgICAgICAgIHBh
eWxvYWQgPSBzZXJpYWxpemVyLmV4dHJhY3Qoc3RvcmUsIHR5cGUsIGFkYXB0ZXJQYXlsb2FkLCBn
ZXQocmVjb3JkLCAnaWQnKSwgb3BlcmF0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBwYXlsb2FkID0gYWRhcHRlclBheWxvYWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdG9yZS5k
aWRTYXZlUmVjb3JkKHJlY29yZCwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybiByZWNvcmQ7Ci0g
ICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9m
IEludmFsaWRFcnJvcikgewotICAgICAgICAgIHN0b3JlLnJlY29yZFdhc0ludmFsaWQocmVjb3Jk
LCByZWFzb24uZXJyb3JzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdG9yZS5yZWNv
cmRXYXNFcnJvcihyZWNvcmQsIHJlYXNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBy
ZWFzb247Ci0gICAgICB9LCBsYWJlbCk7Ci0gICAgfQotCi0gICAgX19leHBvcnRzX18uU3RvcmUg
PSBTdG9yZTsKLSAgICBfX2V4cG9ydHNfXy5Qcm9taXNlQXJyYXkgPSBQcm9taXNlQXJyYXk7Ci0g
ICAgX19leHBvcnRzX18uUHJvbWlzZU9iamVjdCA9IFByb21pc2VPYmplY3Q7Ci0gICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IFN0b3JlOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0YS9saWIv
dHJhbnNmb3JtcyIsIAotICBbIi4vdHJhbnNmb3Jtcy9iYXNlIiwiLi90cmFuc2Zvcm1zL251bWJl
ciIsIi4vdHJhbnNmb3Jtcy9kYXRlIiwiLi90cmFuc2Zvcm1zL3N0cmluZyIsIi4vdHJhbnNmb3Jt
cy9ib29sZWFuIiwiZXhwb3J0cyJdLAotICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVw
ZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5j
eTVfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIFRyYW5zZm9y
bSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgIHZhciBOdW1iZXJUcmFuc2Zvcm0g
PSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICB2YXIgRGF0ZVRyYW5zZm9ybSA9IF9f
ZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgIHZhciBTdHJpbmdUcmFuc2Zvcm0gPSBfX2Rl
cGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICB2YXIgQm9vbGVhblRyYW5zZm9ybSA9IF9fZGVw
ZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotCi0gICAgX19leHBvcnRzX18uVHJhbnNmb3JtID0gVHJh
bnNmb3JtOwotICAgIF9fZXhwb3J0c19fLk51bWJlclRyYW5zZm9ybSA9IE51bWJlclRyYW5zZm9y
bTsKLSAgICBfX2V4cG9ydHNfXy5EYXRlVHJhbnNmb3JtID0gRGF0ZVRyYW5zZm9ybTsKLSAgICBf
X2V4cG9ydHNfXy5TdHJpbmdUcmFuc2Zvcm0gPSBTdHJpbmdUcmFuc2Zvcm07Ci0gICAgX19leHBv
cnRzX18uQm9vbGVhblRyYW5zZm9ybSA9IEJvb2xlYW5UcmFuc2Zvcm07Ci0gIH0pOwotZGVmaW5l
KCJlbWJlci1kYXRhL2xpYi90cmFuc2Zvcm1zL2Jhc2UiLCAKLSAgWyJleHBvcnRzIl0sCi0gIGZ1
bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIC8qKgotICAgICAg
VGhlIGBEUy5UcmFuc2Zvcm1gIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlh
bGl6ZSBtb2RlbAotICAgICAgYXR0cmlidXRlcyB3aGVuIHRoZXkgYXJlIHNhdmVkIG9yIGxvYWRl
ZCBmcm9tIGFuCi0gICAgICBhZGFwdGVyLiBTdWJjbGFzc2luZyBgRFMuVHJhbnNmb3JtYCBpcyB1
c2VmdWwgZm9yIGNyZWF0aW5nIGN1c3RvbQotICAgICAgYXR0cmlidXRlcy4gQWxsIHN1YmNsYXNz
ZXMgb2YgYERTLlRyYW5zZm9ybWAgbXVzdCBpbXBsZW1lbnQgYQotICAgICAgYHNlcmlhbGl6ZWAg
YW5kIGEgYGRlc2VyaWFsaXplYCBtZXRob2QuCi0KLSAgICAgIEV4YW1wbGUKLQotICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgLy8gQ29udmVydHMgY2VudGlncmFkZSBpbiB0aGUgSlNPTiB0byBm
YWhyZW5oZWl0IGluIHRoZSBhcHAKLSAgICAgIEFwcC5UZW1wZXJhdHVyZVRyYW5zZm9ybSA9IERT
LlRyYW5zZm9ybS5leHRlbmQoewotICAgICAgICBkZXNlcmlhbGl6ZTogZnVuY3Rpb24oc2VyaWFs
aXplZCkgewotICAgICAgICAgIHJldHVybiAoc2VyaWFsaXplZCAqICAxLjgpICsgMzI7Ci0gICAg
ICAgIH0sCi0gICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJpYWxpemVkKSB7Ci0gICAg
ICAgICAgcmV0dXJuIChkZXNlcmlhbGl6ZWQgLSAzMikgLyAxLjg7Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgICAgYGBgCi0KLSAgICAgIFVzYWdlCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgIHZhciBhdHRyID0gRFMuYXR0cjsKLSAgICAgIEFwcC5SZXF1aXJlbWVudCA9IERTLk1vZGVs
LmV4dGVuZCh7Ci0gICAgICAgIG5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAgICAgICBvcHRpb25z
QXJyYXk6IGF0dHIoJ3JhdycpCi0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBAY2xhc3Mg
VHJhbnNmb3JtCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICovCi0gICAgdmFyIFRyYW5zZm9y
bSA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgLyoqCi0gICAgICAgIFdoZW4gZ2l2ZW4g
YSBkZXNlcmlhbGl6ZWQgdmFsdWUgZnJvbSBhIHJlY29yZCBhdHRyaWJ1dGUgdGhpcwotICAgICAg
ICBtZXRob2QgbXVzdCByZXR1cm4gdGhlIHNlcmlhbGl6ZWQgdmFsdWUuCi0KLSAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgc2VyaWFsaXplOiBmdW5jdGlv
bihkZXNlcmlhbGl6ZWQpIHsKLSAgICAgICAgICByZXR1cm4gRW1iZXIuaXNFbXB0eShkZXNlcmlh
bGl6ZWQpID8gbnVsbCA6IE51bWJlcihkZXNlcmlhbGl6ZWQpOwotICAgICAgICB9Ci0gICAgICAg
IGBgYAotCi0gICAgICAgIEBtZXRob2Qgc2VyaWFsaXplCi0gICAgICAgIEBwYXJhbSBkZXNlcmlh
bGl6ZWQgVGhlIGRlc2VyaWFsaXplZCB2YWx1ZQotICAgICAgICBAcmV0dXJuIFRoZSBzZXJpYWxp
emVkIHZhbHVlCi0gICAgICAqLwotICAgICAgc2VyaWFsaXplOiBFbWJlci5yZXF1aXJlZCgpLAot
Ci0gICAgICAvKioKLSAgICAgICAgV2hlbiBnaXZlbiBhIHNlcmlhbGl6ZSB2YWx1ZSBmcm9tIGEg
SlNPTiBvYmplY3QgdGhpcyBtZXRob2QgbXVzdAotICAgICAgICByZXR1cm4gdGhlIGRlc2VyaWFs
aXplZCB2YWx1ZSBmb3IgdGhlIHJlY29yZCBhdHRyaWJ1dGUuCi0KLSAgICAgICAgRXhhbXBsZQot
Ci0gICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgZGVzZXJpYWxpemU6IGZ1bmN0aW9uKHNl
cmlhbGl6ZWQpIHsKLSAgICAgICAgICByZXR1cm4gZW1wdHkoc2VyaWFsaXplZCkgPyBudWxsIDog
TnVtYmVyKHNlcmlhbGl6ZWQpOwotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgICAgIEBt
ZXRob2QgZGVzZXJpYWxpemUKLSAgICAgICAgQHBhcmFtIHNlcmlhbGl6ZWQgVGhlIHNlcmlhbGl6
ZWQgdmFsdWUKLSAgICAgICAgQHJldHVybiBUaGUgZGVzZXJpYWxpemVkIHZhbHVlCi0gICAgICAq
LwotICAgICAgZGVzZXJpYWxpemU6IEVtYmVyLnJlcXVpcmVkKCkKLQotICAgIH0pOwotCi0gICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IFRyYW5zZm9ybTsKLSAgfSk7Ci1kZWZpbmUoImVtYmVy
LWRhdGEvbGliL3RyYW5zZm9ybXMvYm9vbGVhbiIsIAotICBbIi4vYmFzZSIsImV4cG9ydHMiXSwK
LSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICB2YXIgVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0K
LSAgICAvKioKLSAgICAgIFRoZSBgRFMuQm9vbGVhblRyYW5zZm9ybWAgY2xhc3MgaXMgdXNlZCB0
byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplCi0gICAgICBib29sZWFuIGF0dHJpYnV0ZXMgb24g
RW1iZXIgRGF0YSByZWNvcmQgb2JqZWN0cy4gVGhpcyB0cmFuc2Zvcm0gaXMKLSAgICAgIHVzZWQg
d2hlbiBgYm9vbGVhbmAgaXMgcGFzc2VkIGFzIHRoZSB0eXBlIHBhcmFtZXRlciB0byB0aGUKLSAg
ICAgIFtEUy5hdHRyXSguLi8uLi9kYXRhI21ldGhvZF9hdHRyKSBmdW5jdGlvbi4KLQotICAgICAg
VXNhZ2UKLQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGF0dHIgPSBEUy5hdHRyOwot
ICAgICAgQXBwLlVzZXIgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgICAgICBpc0FkbWluOiBhdHRy
KCdib29sZWFuJyksCi0gICAgICAgIG5hbWU6IGF0dHIoJ3N0cmluZycpLAotICAgICAgICBlbWFp
bDogYXR0cignc3RyaW5nJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBC
b29sZWFuVHJhbnNmb3JtCi0gICAgICBAZXh0ZW5kcyBEUy5UcmFuc2Zvcm0KLSAgICAgIEBuYW1l
c3BhY2UgRFMKLSAgICAgKi8KLSAgICB2YXIgQm9vbGVhblRyYW5zZm9ybSA9IFRyYW5zZm9ybS5l
eHRlbmQoewotICAgICAgZGVzZXJpYWxpemU6IGZ1bmN0aW9uKHNlcmlhbGl6ZWQpIHsKLSAgICAg
ICAgdmFyIHR5cGUgPSB0eXBlb2Ygc2VyaWFsaXplZDsKLQotICAgICAgICBpZiAodHlwZSA9PT0g
ImJvb2xlYW4iKSB7Ci0gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodHlwZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZC5t
YXRjaCgvXnRydWUkfF50JHxeMSQvaSkgIT09IG51bGw7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZCA9PT0gMTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
IH0sCi0KLSAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJpYWxpemVkKSB7Ci0gICAgICAg
IHJldHVybiBCb29sZWFuKGRlc2VyaWFsaXplZCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IEJvb2xlYW5UcmFuc2Zvcm07Ci0gIH0pOwotZGVmaW5lKCJl
bWJlci1kYXRhL2xpYi90cmFuc2Zvcm1zL2RhdGUiLCAKLSAgWyIuL2Jhc2UiLCJleHBvcnRzIl0s
Ci0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0
cmljdCI7Ci0gICAgLyoqCi0gICAgICBUaGUgYERTLkRhdGVUcmFuc2Zvcm1gIGNsYXNzIGlzIHVz
ZWQgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZQotICAgICAgZGF0ZSBhdHRyaWJ1dGVzIG9u
IEVtYmVyIERhdGEgcmVjb3JkIG9iamVjdHMuIFRoaXMgdHJhbnNmb3JtIGlzIHVzZWQKLSAgICAg
IHdoZW4gYGRhdGVgIGlzIHBhc3NlZCBhcyB0aGUgdHlwZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAg
ICBbRFMuYXR0cl0oLi4vLi4vZGF0YSNtZXRob2RfYXR0cikgZnVuY3Rpb24uCi0KLSAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgIHZhciBhdHRyID0gRFMuYXR0cjsKLSAgICAgIEFwcC5TY29yZSA9
IERTLk1vZGVsLmV4dGVuZCh7Ci0gICAgICAgIHZhbHVlOiBhdHRyKCdudW1iZXInKSwKLSAgICAg
ICAgcGxheWVyOiBEUy5iZWxvbmdzVG8oJ3BsYXllcicpLAotICAgICAgICBkYXRlOiBhdHRyKCdk
YXRlJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0KLSAgICAgIEBjbGFzcyBEYXRlVHJhbnNmb3Jt
Ci0gICAgICBAZXh0ZW5kcyBEUy5UcmFuc2Zvcm0KLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAg
Ki8KLSAgICB2YXIgVHJhbnNmb3JtID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
dmFyIERhdGVUcmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZXh0ZW5kKHsKLQotICAgICAgZGVzZXJpYWxp
emU6IGZ1bmN0aW9uKHNlcmlhbGl6ZWQpIHsKLSAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc2Vy
aWFsaXplZDsKLQotICAgICAgICBpZiAodHlwZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICBy
ZXR1cm4gbmV3IERhdGUoRW1iZXIuRGF0ZS5wYXJzZShzZXJpYWxpemVkKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICByZXR1cm4gbmV3IERhdGUo
c2VyaWFsaXplZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZCA9PT0gbnVsbCB8fCBz
ZXJpYWxpemVkID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMg
bm90IHByZXNlbnQgaW4gdGhlIGRhdGEsCi0gICAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCwg
bm90IG51bGwuCi0gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KLSAgICAgIHNl
cmlhbGl6ZTogZnVuY3Rpb24oZGF0ZSkgewotICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERh
dGUpIHsKLSAgICAgICAgICB2YXIgZGF5cyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwg
IlRodSIsICJGcmkiLCAiU2F0Il07Ci0gICAgICAgICAgdmFyIG1vbnRocyA9IFsiSmFuIiwgIkZl
YiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0
IiwgIk5vdiIsICJEZWMiXTsKLQotICAgICAgICAgIHZhciBwYWQgPSBmdW5jdGlvbihudW0pIHsK
LSAgICAgICAgICAgIHJldHVybiBudW0gPCAxMCA/ICIwIitudW0gOiAiIitudW07Ci0gICAgICAg
ICAgfTsKLQotICAgICAgICAgIHZhciB1dGNZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpLAot
ICAgICAgICAgICAgICB1dGNNb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKSwKLSAgICAgICAgICAg
ICAgdXRjRGF5T2ZNb250aCA9IGRhdGUuZ2V0VVRDRGF0ZSgpLAotICAgICAgICAgICAgICB1dGNE
YXkgPSBkYXRlLmdldFVUQ0RheSgpLAotICAgICAgICAgICAgICB1dGNIb3VycyA9IGRhdGUuZ2V0
VVRDSG91cnMoKSwKLSAgICAgICAgICAgICAgdXRjTWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRl
cygpLAotICAgICAgICAgICAgICB1dGNTZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCk7Ci0K
LQotICAgICAgICAgIHZhciBkYXlPZldlZWsgPSBkYXlzW3V0Y0RheV07Ci0gICAgICAgICAgdmFy
IGRheU9mTW9udGggPSBwYWQodXRjRGF5T2ZNb250aCk7Ci0gICAgICAgICAgdmFyIG1vbnRoID0g
bW9udGhzW3V0Y01vbnRoXTsKLQotICAgICAgICAgIHJldHVybiBkYXlPZldlZWsgKyAiLCAiICsg
ZGF5T2ZNb250aCArICIgIiArIG1vbnRoICsgIiAiICsgdXRjWWVhciArICIgIiArCi0gICAgICAg
ICAgICAgICAgIHBhZCh1dGNIb3VycykgKyAiOiIgKyBwYWQodXRjTWludXRlcykgKyAiOiIgKyBw
YWQodXRjU2Vjb25kcykgKyAiIEdNVCI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0gCi0KLSAgICB9KTsKLQotICAgIF9fZXhwb3J0
c19fWyJkZWZhdWx0Il0gPSBEYXRlVHJhbnNmb3JtOwotICB9KTsKLWRlZmluZSgiZW1iZXItZGF0
YS9saWIvdHJhbnNmb3Jtcy9udW1iZXIiLCAKLSAgWyIuL2Jhc2UiLCJleHBvcnRzIl0sCi0gIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7
Ci0gICAgdmFyIFRyYW5zZm9ybSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAg
dmFyIGVtcHR5ID0gRW1iZXIuaXNFbXB0eTsKLQotICAgIC8qKgotICAgICAgVGhlIGBEUy5OdW1i
ZXJUcmFuc2Zvcm1gIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZQot
ICAgICAgbnVtZXJpYyBhdHRyaWJ1dGVzIG9uIEVtYmVyIERhdGEgcmVjb3JkIG9iamVjdHMuIFRo
aXMgdHJhbnNmb3JtIGlzCi0gICAgICB1c2VkIHdoZW4gYG51bWJlcmAgaXMgcGFzc2VkIGFzIHRo
ZSB0eXBlIHBhcmFtZXRlciB0byB0aGUKLSAgICAgIFtEUy5hdHRyXSguLi8uLi9kYXRhI21ldGhv
ZF9hdHRyKSBmdW5jdGlvbi4KLQotICAgICAgVXNhZ2UKLQotICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgdmFyIGF0dHIgPSBEUy5hdHRyOwotICAgICAgQXBwLlNjb3JlID0gRFMuTW9kZWwuZXh0
ZW5kKHsKLSAgICAgICAgdmFsdWU6IGF0dHIoJ251bWJlcicpLAotICAgICAgICBwbGF5ZXI6IERT
LmJlbG9uZ3NUbygncGxheWVyJyksCi0gICAgICAgIGRhdGU6IGF0dHIoJ2RhdGUnKQotICAgICAg
fSk7Ci0gICAgICBgYGAKLQotICAgICAgQGNsYXNzIE51bWJlclRyYW5zZm9ybQotICAgICAgQGV4
dGVuZHMgRFMuVHJhbnNmb3JtCi0gICAgICBAbmFtZXNwYWNlIERTCi0gICAgICovCi0gICAgdmFy
IE51bWJlclRyYW5zZm9ybSA9IFRyYW5zZm9ybS5leHRlbmQoewotCi0gICAgICBkZXNlcmlhbGl6
ZTogZnVuY3Rpb24oc2VyaWFsaXplZCkgewotICAgICAgICByZXR1cm4gZW1wdHkoc2VyaWFsaXpl
ZCkgPyBudWxsIDogTnVtYmVyKHNlcmlhbGl6ZWQpOwotICAgICAgfSwKLQotICAgICAgc2VyaWFs
aXplOiBmdW5jdGlvbihkZXNlcmlhbGl6ZWQpIHsKLSAgICAgICAgcmV0dXJuIGVtcHR5KGRlc2Vy
aWFsaXplZCkgPyBudWxsIDogTnVtYmVyKGRlc2VyaWFsaXplZCk7Ci0gICAgICB9Ci0gICAgfSk7
Ci0KLSAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTnVtYmVyVHJhbnNmb3JtOwotICB9KTsK
LWRlZmluZSgiZW1iZXItZGF0YS9saWIvdHJhbnNmb3Jtcy9zdHJpbmciLCAKLSAgWyIuL2Jhc2Ui
LCJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsK
LSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIFRyYW5zZm9ybSA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgIHZhciBub25lID0gRW1iZXIuaXNOb25lOwotCi0gICAgLyoqCi0gICAg
ICBUaGUgYERTLlN0cmluZ1RyYW5zZm9ybWAgY2xhc3MgaXMgdXNlZCB0byBzZXJpYWxpemUgYW5k
IGRlc2VyaWFsaXplCi0gICAgICBzdHJpbmcgYXR0cmlidXRlcyBvbiBFbWJlciBEYXRhIHJlY29y
ZCBvYmplY3RzLiBUaGlzIHRyYW5zZm9ybSBpcwotICAgICAgdXNlZCB3aGVuIGBzdHJpbmdgIGlz
IHBhc3NlZCBhcyB0aGUgdHlwZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAgICBbRFMuYXR0cl0oLi4v
Li4vZGF0YSNtZXRob2RfYXR0cikgZnVuY3Rpb24uCi0KLSAgICAgIFVzYWdlCi0KLSAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgIHZhciBhdHRyID0gRFMuYXR0cjsKLSAgICAgIEFwcC5Vc2VyID0g
RFMuTW9kZWwuZXh0ZW5kKHsKLSAgICAgICAgaXNBZG1pbjogYXR0cignYm9vbGVhbicpLAotICAg
ICAgICBuYW1lOiBhdHRyKCdzdHJpbmcnKSwKLSAgICAgICAgZW1haWw6IGF0dHIoJ3N0cmluZycp
Ci0gICAgICB9KTsKLSAgICAgIGBgYAotCi0gICAgICBAY2xhc3MgU3RyaW5nVHJhbnNmb3JtCi0g
ICAgICBAZXh0ZW5kcyBEUy5UcmFuc2Zvcm0KLSAgICAgIEBuYW1lc3BhY2UgRFMKLSAgICAgKi8K
LSAgICB2YXIgU3RyaW5nVHJhbnNmb3JtID0gVHJhbnNmb3JtLmV4dGVuZCh7Ci0KLSAgICAgIGRl
c2VyaWFsaXplOiBmdW5jdGlvbihzZXJpYWxpemVkKSB7Ci0gICAgICAgIHJldHVybiBub25lKHNl
cmlhbGl6ZWQpID8gbnVsbCA6IFN0cmluZyhzZXJpYWxpemVkKTsKLSAgICAgIH0sCi0KLSAgICAg
IHNlcmlhbGl6ZTogZnVuY3Rpb24oZGVzZXJpYWxpemVkKSB7Ci0gICAgICAgIHJldHVybiBub25l
KGRlc2VyaWFsaXplZCkgPyBudWxsIDogU3RyaW5nKGRlc2VyaWFsaXplZCk7Ci0gICAgICB9Ci0K
LSAgICB9KTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBTdHJpbmdUcmFuc2Zvcm07
Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL2V4dC9zdHJpbmciLCAKLSAgWyIu
Li9zeXN0ZW0vc3RyaW5nIl0sCi0gIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXykgewotICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICB2YXIgcGx1cmFsaXplID0gX19kZXBlbmRlbmN5MV9fLnBsdXJhbGl6
ZTsKLSAgICB2YXIgc2luZ3VsYXJpemUgPSBfX2RlcGVuZGVuY3kxX18uc2luZ3VsYXJpemU7Ci0K
LSAgICBpZiAoRW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwgRW1iZXIuRVhURU5E
X1BST1RPVFlQRVMuU3RyaW5nKSB7Ci0gICAgICAvKioKLSAgICAgICAgU2VlIHt7I2Nyb3NzTGlu
ayAiRW1iZXIuU3RyaW5nL3BsdXJhbGl6ZSJ9fXt7L2Nyb3NzTGlua319Ci0KLSAgICAgICAgQG1l
dGhvZCBwbHVyYWxpemUKLSAgICAgICAgQGZvciBTdHJpbmcKLSAgICAgICovCi0gICAgICBTdHJp
bmcucHJvdG90eXBlLnBsdXJhbGl6ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gcGx1
cmFsaXplKHRoaXMpOwotICAgICAgfTsKLQotICAgICAgLyoqCi0gICAgICAgIFNlZSB7eyNjcm9z
c0xpbmsgIkVtYmVyLlN0cmluZy9zaW5ndWxhcml6ZSJ9fXt7L2Nyb3NzTGlua319Ci0KLSAgICAg
ICAgQG1ldGhvZCBzaW5ndWxhcml6ZQotICAgICAgICBAZm9yIFN0cmluZwotICAgICAgKi8KLSAg
ICAgIFN0cmluZy5wcm90b3R5cGUuc2luZ3VsYXJpemUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
cmV0dXJuIHNpbmd1bGFyaXplKHRoaXMpOwotICAgICAgfTsKLSAgICB9Ci0gIH0pOwotZGVmaW5l
KCJlbWJlci1pbmZsZWN0b3IvbGliL21haW4iLCAKLSAgWyIuL3N5c3RlbSIsIi4vZXh0L3N0cmlu
ZyIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBJbmZsZWN0b3Ig
PSBfX2RlcGVuZGVuY3kxX18uSW5mbGVjdG9yOwotICAgIHZhciBkZWZhdWx0UnVsZXMgPSBfX2Rl
cGVuZGVuY3kxX18uZGVmYXVsdFJ1bGVzOwotICAgIHZhciBwbHVyYWxpemUgPSBfX2RlcGVuZGVu
Y3kxX18ucGx1cmFsaXplOwotICAgIHZhciBzaW5ndWxhcml6ZSA9IF9fZGVwZW5kZW5jeTFfXy5z
aW5ndWxhcml6ZTsKLQotICAgIEluZmxlY3Rvci5kZWZhdWx0UnVsZXMgPSBkZWZhdWx0UnVsZXM7
Ci0gICAgRW1iZXIuSW5mbGVjdG9yICAgICAgICA9IEluZmxlY3RvcjsKLQotICAgIEVtYmVyLlN0
cmluZy5wbHVyYWxpemUgICA9IHBsdXJhbGl6ZTsKLSAgICBFbWJlci5TdHJpbmcuc2luZ3VsYXJp
emUgPSBzaW5ndWxhcml6ZTsKLQotCi0gICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEluZmxl
Y3RvcjsKLQotICAgIF9fZXhwb3J0c19fLnBsdXJhbGl6ZSA9IHBsdXJhbGl6ZTsKLSAgICBfX2V4
cG9ydHNfXy5zaW5ndWxhcml6ZSA9IHNpbmd1bGFyaXplOwotICB9KTsKLWRlZmluZSgiZW1iZXIt
aW5mbGVjdG9yL2xpYi9zeXN0ZW0iLCAKLSAgWyIuL3N5c3RlbS9pbmZsZWN0b3IiLCIuL3N5c3Rl
bS9zdHJpbmciLCIuL3N5c3RlbS9pbmZsZWN0aW9ucyIsImV4cG9ydHMiXSwKLSAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBv
cnRzX18pIHsKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIEluZmxlY3RvciA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgdmFyIHBsdXJhbGl6ZSA9IF9fZGVwZW5kZW5jeTJf
Xy5wbHVyYWxpemU7Ci0gICAgdmFyIHNpbmd1bGFyaXplID0gX19kZXBlbmRlbmN5Ml9fLnNpbmd1
bGFyaXplOwotCi0gICAgdmFyIGRlZmF1bHRSdWxlcyA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVs
dCJdOwotCi0gICAgCi0gICAgSW5mbGVjdG9yLmluZmxlY3RvciA9IG5ldyBJbmZsZWN0b3IoZGVm
YXVsdFJ1bGVzKTsKLSAgICAKLSAgICBfX2V4cG9ydHNfXy5JbmZsZWN0b3IgPSBJbmZsZWN0b3I7
Ci0gICAgX19leHBvcnRzX18uc2luZ3VsYXJpemUgPSBzaW5ndWxhcml6ZTsKLSAgICBfX2V4cG9y
dHNfXy5wbHVyYWxpemUgPSBwbHVyYWxpemU7Ci0gICAgX19leHBvcnRzX18uZGVmYXVsdFJ1bGVz
ID0gZGVmYXVsdFJ1bGVzOwotICB9KTsKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0
ZW0vaW5mbGVjdGlvbnMiLCAKLSAgWyJleHBvcnRzIl0sCi0gIGZ1bmN0aW9uKF9fZXhwb3J0c19f
KSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBkZWZhdWx0UnVsZXMgPSB7Ci0gICAgICBw
bHVyYWxzOiBbCi0gICAgICAgIFsvJC8sICdzJ10sCi0gICAgICAgIFsvcyQvaSwgJ3MnXSwKLSAg
ICAgICAgWy9eKGF4fHRlc3QpaXMkL2ksICckMWVzJ10sCi0gICAgICAgIFsvKG9jdG9wfHZpcil1
cyQvaSwgJyQxaSddLAotICAgICAgICBbLyhvY3RvcHx2aXIpaSQvaSwgJyQxaSddLAotICAgICAg
ICBbLyhhbGlhc3xzdGF0dXMpJC9pLCAnJDFlcyddLAotICAgICAgICBbLyhidSlzJC9pLCAnJDFz
ZXMnXSwKLSAgICAgICAgWy8oYnVmZmFsfHRvbWF0KW8kL2ksICckMW9lcyddLAotICAgICAgICBb
LyhbdGldKXVtJC9pLCAnJDFhJ10sCi0gICAgICAgIFsvKFt0aV0pYSQvaSwgJyQxYSddLAotICAg
ICAgICBbL3NpcyQvaSwgJ3NlcyddLAotICAgICAgICBbLyg/OihbXmZdKWZlfChbbHJdKWYpJC9p
LCAnJDEkMnZlcyddLAotICAgICAgICBbLyhoaXZlKSQvaSwgJyQxcyddLAotICAgICAgICBbLyhb
XmFlaW91eV18cXUpeSQvaSwgJyQxaWVzJ10sCi0gICAgICAgIFsvKHh8Y2h8c3N8c2gpJC9pLCAn
JDFlcyddLAotICAgICAgICBbLyhtYXRyfHZlcnR8aW5kKSg/Oml4fGV4KSQvaSwgJyQxaWNlcydd
LAotICAgICAgICBbL14obXxsKW91c2UkL2ksICckMWljZSddLAotICAgICAgICBbL14obXxsKWlj
ZSQvaSwgJyQxaWNlJ10sCi0gICAgICAgIFsvXihveCkkL2ksICckMWVuJ10sCi0gICAgICAgIFsv
XihveGVuKSQvaSwgJyQxJ10sCi0gICAgICAgIFsvKHF1aXopJC9pLCAnJDF6ZXMnXQotICAgICAg
XSwKLQotICAgICAgc2luZ3VsYXI6IFsKLSAgICAgICAgWy9zJC9pLCAnJ10sCi0gICAgICAgIFsv
KHNzKSQvaSwgJyQxJ10sCi0gICAgICAgIFsvKG4pZXdzJC9pLCAnJDFld3MnXSwKLSAgICAgICAg
Wy8oW3RpXSlhJC9pLCAnJDF1bSddLAotICAgICAgICBbLygoYSluYWx5fChiKWF8KGQpaWFnbm98
KHApYXJlbnRoZXwocClyb2dub3wocyl5bm9wfCh0KWhlKShzaXN8c2VzKSQvaSwgJyQxc2lzJ10s
Ci0gICAgICAgIFsvKF5hbmFseSkoc2lzfHNlcykkL2ksICckMXNpcyddLAotICAgICAgICBbLyhb
XmZdKXZlcyQvaSwgJyQxZmUnXSwKLSAgICAgICAgWy8oaGl2ZSlzJC9pLCAnJDEnXSwKLSAgICAg
ICAgWy8odGl2ZSlzJC9pLCAnJDEnXSwKLSAgICAgICAgWy8oW2xyXSl2ZXMkL2ksICckMWYnXSwK
LSAgICAgICAgWy8oW15hZWlvdXldfHF1KWllcyQvaSwgJyQxeSddLAotICAgICAgICBbLyhzKWVy
aWVzJC9pLCAnJDFlcmllcyddLAotICAgICAgICBbLyhtKW92aWVzJC9pLCAnJDFvdmllJ10sCi0g
ICAgICAgIFsvKHh8Y2h8c3N8c2gpZXMkL2ksICckMSddLAotICAgICAgICBbL14obXxsKWljZSQv
aSwgJyQxb3VzZSddLAotICAgICAgICBbLyhidXMpKGVzKT8kL2ksICckMSddLAotICAgICAgICBb
LyhvKWVzJC9pLCAnJDEnXSwKLSAgICAgICAgWy8oc2hvZSlzJC9pLCAnJDEnXSwKLSAgICAgICAg
Wy8oY3Jpc3x0ZXN0KShpc3xlcykkL2ksICckMWlzJ10sCi0gICAgICAgIFsvXihhKXhbaWVdcyQv
aSwgJyQxeGlzJ10sCi0gICAgICAgIFsvKG9jdG9wfHZpcikodXN8aSkkL2ksICckMXVzJ10sCi0g
ICAgICAgIFsvKGFsaWFzfHN0YXR1cykoZXMpPyQvaSwgJyQxJ10sCi0gICAgICAgIFsvXihveCll
bi9pLCAnJDEnXSwKLSAgICAgICAgWy8odmVydHxpbmQpaWNlcyQvaSwgJyQxZXgnXSwKLSAgICAg
ICAgWy8obWF0cilpY2VzJC9pLCAnJDFpeCddLAotICAgICAgICBbLyhxdWl6KXplcyQvaSwgJyQx
J10sCi0gICAgICAgIFsvKGRhdGFiYXNlKXMkL2ksICckMSddCi0gICAgICBdLAotCi0gICAgICBp
cnJlZ3VsYXJQYWlyczogWwotICAgICAgICBbJ3BlcnNvbicsICdwZW9wbGUnXSwKLSAgICAgICAg
WydtYW4nLCAnbWVuJ10sCi0gICAgICAgIFsnY2hpbGQnLCAnY2hpbGRyZW4nXSwKLSAgICAgICAg
WydzZXgnLCAnc2V4ZXMnXSwKLSAgICAgICAgWydtb3ZlJywgJ21vdmVzJ10sCi0gICAgICAgIFsn
Y293JywgJ2tpbmUnXSwKLSAgICAgICAgWyd6b21iaWUnLCAnem9tYmllcyddCi0gICAgICBdLAot
Ci0gICAgICB1bmNvdW50YWJsZTogWwotICAgICAgICAnZXF1aXBtZW50JywKLSAgICAgICAgJ2lu
Zm9ybWF0aW9uJywKLSAgICAgICAgJ3JpY2UnLAotICAgICAgICAnbW9uZXknLAotICAgICAgICAn
c3BlY2llcycsCi0gICAgICAgICdzZXJpZXMnLAotICAgICAgICAnZmlzaCcsCi0gICAgICAgICdz
aGVlcCcsCi0gICAgICAgICdqZWFucycsCi0gICAgICAgICdwb2xpY2UnCi0gICAgICBdCi0gICAg
fTsKLQotICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBkZWZhdWx0UnVsZXM7Ci0gIH0pOwot
ZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9pbmZsZWN0b3IiLCAKLSAgWyJleHBv
cnRzIl0sCi0gIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgInVzZSBzdHJpY3QiOwotICAg
IHZhciBCTEFOS19SRUdFWCA9IC9eXHMqJC87Ci0KLSAgICBmdW5jdGlvbiBsb2FkVW5jb3VudGFi
bGUocnVsZXMsIHVuY291bnRhYmxlKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
dW5jb3VudGFibGUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgcnVsZXMudW5j
b3VudGFibGVbdW5jb3VudGFibGVbaV0udG9Mb3dlckNhc2UoKV0gPSB0cnVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGxvYWRJcnJlZ3VsYXIocnVsZXMsIGlycmVndWxhclBhaXJz
KSB7Ci0gICAgICB2YXIgcGFpcjsKLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGly
cmVndWxhclBhaXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHBhaXIgPSBp
cnJlZ3VsYXJQYWlyc1tpXTsKLQotICAgICAgICBydWxlcy5pcnJlZ3VsYXJbcGFpclswXS50b0xv
d2VyQ2FzZSgpXSA9IHBhaXJbMV07Ci0gICAgICAgIHJ1bGVzLmlycmVndWxhckludmVyc2VbcGFp
clsxXS50b0xvd2VyQ2FzZSgpXSA9IHBhaXJbMF07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICBJbmZsZWN0b3IuRW1iZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHN1cHBseWlu
ZyBpbmZsZWN0aW9uIHJ1bGVzIGZvciB5b3VyCi0gICAgICBhcHBsaWNhdGlvbi4gRW1iZXIgaW5j
bHVkZXMgYSBkZWZhdWx0IHNldCBvZiBpbmZsZWN0aW9uIHJ1bGVzLCBhbmQgcHJvdmlkZXMgYW4K
LSAgICAgIEFQSSBmb3IgcHJvdmlkaW5nIGFkZGl0aW9uYWwgcnVsZXMuCi0KLSAgICAgIEV4YW1w
bGVzOgotCi0gICAgICBDcmVhdGluZyBhbiBpbmZsZWN0b3Igd2l0aCBubyBydWxlcy4KLQotICAg
ICAgYGBganMKLSAgICAgIHZhciBpbmZsZWN0b3IgPSBuZXcgRW1iZXIuSW5mbGVjdG9yKCk7Ci0g
ICAgICBgYGAKLQotICAgICAgQ3JlYXRpbmcgYW4gaW5mbGVjdG9yIHdpdGggdGhlIGRlZmF1bHQg
ZW1iZXIgcnVsZXNldC4KLQotICAgICAgYGBganMKLSAgICAgIHZhciBpbmZsZWN0b3IgPSBuZXcg
RW1iZXIuSW5mbGVjdG9yKEVtYmVyLkluZmxlY3Rvci5kZWZhdWx0UnVsZXMpOwotCi0gICAgICBp
bmZsZWN0b3IucGx1cmFsaXplKCdjb3cnKTsgLy89PiAna2luZScKLSAgICAgIGluZmxlY3Rvci5z
aW5ndWxhcml6ZSgna2luZScpOyAvLz0+ICdjb3cnCi0gICAgICBgYGAKLQotICAgICAgQ3JlYXRp
bmcgYW4gaW5mbGVjdG9yIGFuZCBhZGRpbmcgcnVsZXMgbGF0ZXIuCi0KLSAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIHZhciBpbmZsZWN0b3IgPSBFbWJlci5JbmZsZWN0b3IuaW5mbGVjdG9yOwot
Ci0gICAgICBpbmZsZWN0b3IucGx1cmFsaXplKCdhZHZpY2UnKTsgLy8gPT4gJ2FkdmljZXMnCi0g
ICAgICBpbmZsZWN0b3IudW5jb3VudGFibGUoJ2FkdmljZScpOwotICAgICAgaW5mbGVjdG9yLnBs
dXJhbGl6ZSgnYWR2aWNlJyk7IC8vID0+ICdhZHZpY2UnCi0KLSAgICAgIGluZmxlY3Rvci5wbHVy
YWxpemUoJ2Zvcm11bGEnKTsgLy8gPT4gJ2Zvcm11bGFzJwotICAgICAgaW5mbGVjdG9yLmlycmVn
dWxhcignZm9ybXVsYScsICdmb3JtdWxhZScpOwotICAgICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgn
Zm9ybXVsYScpOyAvLyA9PiAnZm9ybXVsYWUnCi0KLSAgICAgIC8vIHlvdSB3b3VsZCBub3QgbmVl
ZCB0byBhZGQgdGhlc2UgYXMgdGhleSBhcmUgdGhlIGRlZmF1bHQgcnVsZXMKLSAgICAgIGluZmxl
Y3Rvci5wbHVyYWwoLyQvLCAncycpOwotICAgICAgaW5mbGVjdG9yLnNpbmd1bGFyKC9zJC9pLCAn
Jyk7Ci0gICAgICBgYGAKLQotICAgICAgQ3JlYXRpbmcgYW4gaW5mbGVjdG9yIHdpdGggYSBub25k
ZWZhdWx0IHJ1bGVzZXQuCi0KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBydWxlcyA9
IHsKLSAgICAgICAgcGx1cmFsczogIFsgLyQvLCAncycgXSwKLSAgICAgICAgc2luZ3VsYXI6IFsg
L1xzJC8sICcnIF0sCi0gICAgICAgIGlycmVndWxhclBhaXJzOiBbCi0gICAgICAgICAgWyAnY293
JywgJ2tpbmUnIF0KLSAgICAgICAgXSwKLSAgICAgICAgdW5jb3VudGFibGU6IFsgJ2Zpc2gnIF0K
LSAgICAgIH07Ci0KLSAgICAgIHZhciBpbmZsZWN0b3IgPSBuZXcgRW1iZXIuSW5mbGVjdG9yKHJ1
bGVzKTsKLSAgICAgIGBgYAotCi0gICAgICBAY2xhc3MgSW5mbGVjdG9yCi0gICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgKi8KLSAgICBmdW5jdGlvbiBJbmZsZWN0b3IocnVsZVNldCkgewotICAg
ICAgcnVsZVNldCA9IHJ1bGVTZXQgfHwge307Ci0gICAgICBydWxlU2V0LnVuY291bnRhYmxlID0g
cnVsZVNldC51bmNvdW50YWJsZSB8fCB7fTsKLSAgICAgIHJ1bGVTZXQuaXJyZWd1bGFyUGFpcnMg
PSBydWxlU2V0LmlycmVndWxhclBhaXJzIHx8IHt9OwotCi0gICAgICB2YXIgcnVsZXMgPSB0aGlz
LnJ1bGVzID0gewotICAgICAgICBwbHVyYWxzOiAgcnVsZVNldC5wbHVyYWxzIHx8IFtdLAotICAg
ICAgICBzaW5ndWxhcjogcnVsZVNldC5zaW5ndWxhciB8fCBbXSwKLSAgICAgICAgaXJyZWd1bGFy
OiB7fSwKLSAgICAgICAgaXJyZWd1bGFySW52ZXJzZToge30sCi0gICAgICAgIHVuY291bnRhYmxl
OiB7fQotICAgICAgfTsKLQotICAgICAgbG9hZFVuY291bnRhYmxlKHJ1bGVzLCBydWxlU2V0LnVu
Y291bnRhYmxlKTsKLSAgICAgIGxvYWRJcnJlZ3VsYXIocnVsZXMsIHJ1bGVTZXQuaXJyZWd1bGFy
UGFpcnMpOwotICAgIH0KLQotICAgIEluZmxlY3Rvci5wcm90b3R5cGUgPSB7Ci0gICAgICAvKioK
LSAgICAgICAgQG1ldGhvZCBwbHVyYWwKLSAgICAgICAgQHBhcmFtIHtSZWdFeHB9IHJlZ2V4Ci0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcKLSAgICAgICovCi0gICAgICBwbHVyYWw6IGZ1
bmN0aW9uKHJlZ2V4LCBzdHJpbmcpIHsKLSAgICAgICAgdGhpcy5ydWxlcy5wbHVyYWxzLnB1c2go
W3JlZ2V4LCBzdHJpbmcudG9Mb3dlckNhc2UoKV0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0g
ICAgICAgIEBtZXRob2Qgc2luZ3VsYXIKLSAgICAgICAgQHBhcmFtIHtSZWdFeHB9IHJlZ2V4Ci0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcKLSAgICAgICovCi0gICAgICBzaW5ndWxhcjog
ZnVuY3Rpb24ocmVnZXgsIHN0cmluZykgewotICAgICAgICB0aGlzLnJ1bGVzLnNpbmd1bGFyLnB1
c2goW3JlZ2V4LCBzdHJpbmcudG9Mb3dlckNhc2UoKV0pOwotICAgICAgfSwKLQotICAgICAgLyoq
Ci0gICAgICAgIEBtZXRob2QgdW5jb3VudGFibGUKLSAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHJl
Z2V4Ci0gICAgICAqLwotICAgICAgdW5jb3VudGFibGU6IGZ1bmN0aW9uKHN0cmluZykgewotICAg
ICAgICBsb2FkVW5jb3VudGFibGUodGhpcy5ydWxlcywgW3N0cmluZy50b0xvd2VyQ2FzZSgpXSk7
Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgQG1ldGhvZCBpcnJlZ3VsYXIKLSAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IHNpbmd1bGFyCi0gICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwbHVy
YWwKLSAgICAgICovCi0gICAgICBpcnJlZ3VsYXI6IGZ1bmN0aW9uIChzaW5ndWxhciwgcGx1cmFs
KSB7Ci0gICAgICAgIGxvYWRJcnJlZ3VsYXIodGhpcy5ydWxlcywgW1tzaW5ndWxhciwgcGx1cmFs
XV0pOwotICAgICAgfSwKLQotICAgICAgLyoqCi0gICAgICAgIEBtZXRob2QgcGx1cmFsaXplCi0g
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSB3b3JkCi0gICAgICAqLwotICAgICAgcGx1cmFsaXplOiBm
dW5jdGlvbih3b3JkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmluZmxlY3Qod29yZCwgdGhpcy5y
dWxlcy5wbHVyYWxzLCB0aGlzLnJ1bGVzLmlycmVndWxhcik7Ci0gICAgICB9LAotCi0gICAgICAv
KioKLSAgICAgICAgQG1ldGhvZCBzaW5ndWxhcml6ZQotICAgICAgICBAcGFyYW0ge1N0cmluZ30g
d29yZAotICAgICAgKi8KLSAgICAgIHNpbmd1bGFyaXplOiBmdW5jdGlvbih3b3JkKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmluZmxlY3Qod29yZCwgdGhpcy5ydWxlcy5zaW5ndWxhciwgIHRoaXMu
cnVsZXMuaXJyZWd1bGFySW52ZXJzZSk7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAg
QHByb3RlY3RlZAotCi0gICAgICAgIEBtZXRob2QgaW5mbGVjdAotICAgICAgICBAcGFyYW0ge1N0
cmluZ30gd29yZAotICAgICAgICBAcGFyYW0ge09iamVjdH0gdHlwZVJ1bGVzCi0gICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBpcnJlZ3VsYXIKLSAgICAgICovCi0gICAgICBpbmZsZWN0OiBmdW5jdGlv
bih3b3JkLCB0eXBlUnVsZXMsIGlycmVndWxhcikgewotICAgICAgICB2YXIgaW5mbGVjdGlvbiwg
c3Vic3RpdHV0aW9uLCByZXN1bHQsIGxvd2VyY2FzZSwgaXNCbGFuaywKLSAgICAgICAgaXNVbmNv
dW50YWJsZSwgaXNJcnJlZ3VsYXIsIGlzSXJyZWd1bGFySW52ZXJzZSwgcnVsZTsKLQotICAgICAg
ICBpc0JsYW5rID0gQkxBTktfUkVHRVgudGVzdCh3b3JkKTsKLQotICAgICAgICBpZiAoaXNCbGFu
aykgewotICAgICAgICAgIHJldHVybiB3b3JkOwotICAgICAgICB9Ci0KLSAgICAgICAgbG93ZXJj
YXNlID0gd29yZC50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIGlzVW5jb3VudGFibGUgPSB0aGlz
LnJ1bGVzLnVuY291bnRhYmxlW2xvd2VyY2FzZV07Ci0KLSAgICAgICAgaWYgKGlzVW5jb3VudGFi
bGUpIHsKLSAgICAgICAgICByZXR1cm4gd29yZDsKLSAgICAgICAgfQotCi0gICAgICAgIGlzSXJy
ZWd1bGFyID0gaXJyZWd1bGFyICYmIGlycmVndWxhcltsb3dlcmNhc2VdOwotCi0gICAgICAgIGlm
IChpc0lycmVndWxhcikgewotICAgICAgICAgIHJldHVybiBpc0lycmVndWxhcjsKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAodmFyIGkgPSB0eXBlUnVsZXMubGVuZ3RoLCBtaW4gPSAwOyBpID4g
bWluOyBpLS0pIHsKLSAgICAgICAgICAgaW5mbGVjdGlvbiA9IHR5cGVSdWxlc1tpLTFdOwotICAg
ICAgICAgICBydWxlID0gaW5mbGVjdGlvblswXTsKLQotICAgICAgICAgIGlmIChydWxlLnRlc3Qo
d29yZCkpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGluZmxlY3Rpb24gPSBpbmZsZWN0aW9uIHx8IFtdOwotCi0gICAgICAgIHJ1bGUgPSBp
bmZsZWN0aW9uWzBdOwotICAgICAgICBzdWJzdGl0dXRpb24gPSBpbmZsZWN0aW9uWzFdOwotCi0g
ICAgICAgIHJlc3VsdCA9IHdvcmQucmVwbGFjZShydWxlLCBzdWJzdGl0dXRpb24pOwotCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIF9fZXhwb3J0c19fWyJk
ZWZhdWx0Il0gPSBJbmZsZWN0b3I7Ci0gIH0pOwotZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGli
L3N5c3RlbS9zdHJpbmciLCAKLSAgWyIuL2luZmxlY3RvciIsImV4cG9ydHMiXSwKLSAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICB2YXIgSW5mbGVjdG9yID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgdmFyIHBs
dXJhbGl6ZSA9IGZ1bmN0aW9uKHdvcmQpIHsKLSAgICAgIHJldHVybiBJbmZsZWN0b3IuaW5mbGVj
dG9yLnBsdXJhbGl6ZSh3b3JkKTsKLSAgICB9OwotCi0gICAgdmFyIHNpbmd1bGFyaXplID0gZnVu
Y3Rpb24od29yZCkgewotICAgICAgcmV0dXJuIEluZmxlY3Rvci5pbmZsZWN0b3Iuc2luZ3VsYXJp
emUod29yZCk7Ci0gICAgfTsKLQotICAgIF9fZXhwb3J0c19fLnBsdXJhbGl6ZSA9IHBsdXJhbGl6
ZTsKLSAgICBfX2V4cG9ydHNfXy5zaW5ndWxhcml6ZSA9IHNpbmd1bGFyaXplOwotICB9KTsKLWds
b2JhbC5EUyA9IHJlcXVpcmVNb2R1bGUoJ2VtYmVyLWRhdGEvbGliL21haW4nKVsnZGVmYXVsdCdd
OwotfShFbWJlci5sb29rdXApKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2VtYmVyLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9lbWJlci5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjdmNzU1YmVmMzYyODAzMjM1NDdjM2E0YjMyOTllMzVjMjM3YjNk
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2VtYmVyLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsNDg4ODYgKzAsMCBAQAotLyohCi0gKiBAb3ZlcnZpZXcgIEVtYmVyIC0gSmF2YVNjcmlwdCBB
cHBsaWNhdGlvbiBGcmFtZXdvcmsKLSAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTEtMjAxNCBU
aWxkZSBJbmMuIGFuZCBjb250cmlidXRvcnMKLSAqICAgICAgICAgICAgUG9ydGlvbnMgQ29weXJp
Z2h0IDIwMDYtMjAxMSBTdHJvYmUgSW5jLgotICogICAgICAgICAgICBQb3J0aW9ucyBDb3B5cmln
aHQgMjAwOC0yMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEBsaWNlbnNl
ICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UKLSAqICAgICAgICAgICAgU2VlIGh0dHBzOi8v
cmF3LmdpdGh1Yi5jb20vZW1iZXJqcy9lbWJlci5qcy9tYXN0ZXIvTElDRU5TRQotICogQHZlcnNp
b24gICAxLjcuMC1iZXRhLjQrcHJlLjRiNmZmMTQzCi0gKi8KLQotKGZ1bmN0aW9uKCkgewotICAg
IHZhciBkZWZpbmUsIHJlcXVpcmVNb2R1bGUsIHJlcXVpcmUsIHJlcXVpcmVqcywgRW1iZXI7Ci0K
LSAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgIEVtYmVyID0gdGhpcy5FbWJlciA9IHRoaXMuRW1i
ZXIgfHwge307Ci0gICAgICAgIGlmICh0eXBlb2YgRW1iZXIgPT09ICd1bmRlZmluZWQnKSB7Ci0g
ICAgICAgICAgICBFbWJlciA9IHt9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBF
bWJlci5fX2xvYWRlciA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgIHZhciByZWdpc3Ry
eSA9IHt9LCBzZWVuID0ge307Ci0KLSAgICAgICAgICAgIGRlZmluZSA9IGZ1bmN0aW9uKG5hbWUs
IGRlcHMsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0cnlbbmFtZV0gPSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlcHM6IGRlcHMsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrOiBjYWxsYmFjayAKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgcmVxdWlyZWpzID0gcmVxdWlyZSA9IHJlcXVpcmVNb2R1bGUgPSBmdW5jdGlvbihu
YW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZW5bbmFtZV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHNlZW5bbmFtZV0gPSB7fTsKLQotICAgICAgICAgICAgICAgIGlm
ICghcmVnaXN0cnlbbmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJDb3VsZCBub3QgZmluZCBtb2R1bGUgIiArIG5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHZhciBtb2QgPSByZWdpc3RyeVtuYW1lXSwKLSAgICAgICAgICAgICAg
ICBkZXBzID0gbW9kLmRlcHMsCi0gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBtb2QuY2FsbGJh
Y2ssCi0gICAgICAgICAgICAgICAgcmVpZmllZCA9IFtdLAotICAgICAgICAgICAgICAgIGV4cG9y
dHM7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGRlcHMubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXBzW2ldID09PSAnZXhwb3J0
cycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaWZpZWQucHVzaChleHBvcnRzID0ge30p
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVpZmllZC5wdXNoKHJlcXVpcmVNb2R1bGUocmVzb2x2ZShkZXBzW2ldKSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gY2FsbGJhY2suYXBwbHkodGhpcywgcmVpZmllZCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHNlZW5bbmFtZV0gPSBleHBvcnRzIHx8IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgZnVu
Y3Rpb24gcmVzb2x2ZShjaGlsZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hh
ckF0KDApICE9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBj
aGlsZC5zcGxpdCgiLyIpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50QmFzZSA9IG5h
bWUuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJ0ID09PSAnLi4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
QmFzZS5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0g
Jy4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dEJhc2UucHVzaChwYXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRCYXNlLmpvaW4o
Ii8iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmVx
dWlyZWpzLl9lYWtfc2VlbiA9IHJlZ2lzdHJ5OwotCi0gICAgICAgICAgICBFbWJlci5fX2xvYWRl
ciA9IHsKLSAgICAgICAgICAgICAgICBkZWZpbmU6IGRlZmluZSwKLSAgICAgICAgICAgICAgICBy
ZXF1aXJlOiByZXF1aXJlLAotICAgICAgICAgICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeQotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlZmluZSA9IEVtYmVy
Ll9fbG9hZGVyLmRlZmluZTsKLSAgICAgICAgICAgIHJlcXVpcmVqcyA9IHJlcXVpcmUgPSByZXF1
aXJlTW9kdWxlID0gRW1iZXIuX19sb2FkZXIucmVxdWlyZTsKLSAgICAgICAgfQotICAgIH0pKCk7
Ci0KLSAgICBkZWZpbmUoImJhY2tidXJuZXIiLAotICAgIFsiYmFja2J1cm5lci91dGlscyIsICJi
YWNrYnVybmVyL2RlZmVycmVkX2FjdGlvbl9xdWV1ZXMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBVdGlscyA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgRGVmZXJyZWRBY3Rpb25RdWV1ZXMgPSBfX2RlcGVuZGVu
Y3kyX18uRGVmZXJyZWRBY3Rpb25RdWV1ZXM7Ci0KLSAgICAgICAgdmFyIHNsaWNlID0gW10uc2xp
Y2UsCi0gICAgICAgIHBvcCA9IFtdLnBvcCwKLSAgICAgICAgZWFjaCA9IFV0aWxzLmVhY2gsCi0g
ICAgICAgIGlzU3RyaW5nID0gVXRpbHMuaXNTdHJpbmcsCi0gICAgICAgIGlzRnVuY3Rpb24gPSBV
dGlscy5pc0Z1bmN0aW9uLAotICAgICAgICBpc051bWJlciA9IFV0aWxzLmlzTnVtYmVyLAotICAg
ICAgICB0aW1lcnMgPSBbXSwKLSAgICAgICAgZ2xvYmFsID0gdGhpcywKLSAgICAgICAgTlVNQkVS
ID0gL1xkKy87Ci0KLSAgICAgICAgLy8gSW4gSUUgNi04LCB0cnkvZmluYWxseSBkb2Vzbid0IHdv
cmsgd2l0aG91dCBhIGNhdGNoLgotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGlt
cG9zc2libGUgdG8gdGVzdCBmb3Igc2luY2Ugd3JhcHBpbmcgaXQgaW4gYSBwYXJlbnQgdHJ5L2Nh
dGNoIGRvZXNuJ3QgdHJpZ2dlciB0aGUgYnVnLgotICAgICAgICAvLyBUaGlzIHRlc3RzIGZvciBh
bm90aGVyIGJyb2tlbiB0cnkvY2F0Y2ggYmVoYXZpb3IgdGhhdCBvbmx5IGV4aGliaXRzIGluIHRo
ZSBzYW1lIHZlcnNpb25zIG9mIElFLgotICAgICAgICB2YXIgbmVlZHNJRVRyeUNhdGNoRml4ID0g
KGZ1bmN0aW9uKGUsIHgpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgeCgp
OwotICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KLSAgICAgICAgICAgIC8vIGpzaGludCBpZ25v
cmU6bGluZQotICAgICAgICAgICAgcmV0dXJuICEhZTsKLSAgICAgICAgfSkoKTsKLQotICAgICAg
ICBmdW5jdGlvbiBpc0NvZXJjYWJsZU51bWJlcihudW1iZXIpIHsKLSAgICAgICAgICAgIHJldHVy
biBpc051bWJlcihudW1iZXIpIHx8IE5VTUJFUi50ZXN0KG51bWJlcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBCYWNrYnVybmVyKHF1ZXVlTmFtZXMsIG9wdGlvbnMpIHsKLSAgICAg
ICAgICAgIHRoaXMucXVldWVOYW1lcyA9IHF1ZXVlTmFtZXM7Ci0gICAgICAgICAgICB0aGlzLm9w
dGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZGVm
YXVsdFF1ZXVlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRlZmF1bHRRdWV1ZSA9
IHF1ZXVlTmFtZXNbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmluc3RhbmNl
U3RhY2sgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZXMgPSBbXTsKLSAgICAgICAg
ICAgIHRoaXMuX3Rocm90dGxlcnMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIEJhY2tidXJu
ZXIucHJvdG90eXBlID0gewotICAgICAgICAgICAgcXVldWVOYW1lczogbnVsbCwKLSAgICAgICAg
ICAgIG9wdGlvbnM6IG51bGwsCi0gICAgICAgICAgICBjdXJyZW50SW5zdGFuY2U6IG51bGwsCi0g
ICAgICAgICAgICBpbnN0YW5jZVN0YWNrOiBudWxsLAotCi0gICAgICAgICAgICBiZWdpbjogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCi0g
ICAgICAgICAgICAgICAgb25CZWdpbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vbkJlZ2luLAotICAg
ICAgICAgICAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSB0aGlzLmN1cnJlbnRJbnN0YW5jZTsKLQot
ICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0luc3RhbmNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuaW5zdGFuY2VTdGFjay5wdXNoKHByZXZpb3VzSW5zdGFuY2UpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluc3RhbmNlID0gbmV3IERl
ZmVycmVkQWN0aW9uUXVldWVzKHRoaXMucXVldWVOYW1lcywgb3B0aW9ucyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG9uQmVnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgb25CZWdpbih0aGlzLmN1
cnJlbnRJbnN0YW5jZSwgcHJldmlvdXNJbnN0YW5jZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKLSAgICAgICAgICAgICAgICBvbkVuZCA9
IG9wdGlvbnMgJiYgb3B0aW9ucy5vbkVuZCwKLSAgICAgICAgICAgICAgICBjdXJyZW50SW5zdGFu
Y2UgPSB0aGlzLmN1cnJlbnRJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICBuZXh0SW5zdGFuY2Ug
PSBudWxsOwotCi0gICAgICAgICAgICAgICAgLy8gUHJldmVudCBkb3VibGUtZmluYWxseSBidWcg
aW4gU2FmYXJpIDYuMC4yIGFuZCBpT1MgNgotICAgICAgICAgICAgICAgIC8vIFRoaXMgYnVnIGFw
cGVhcnMgdG8gYmUgcmVzb2x2ZWQgaW4gU2FmYXJpIDYuMC41IGFuZCBpT1MgNwotICAgICAgICAg
ICAgICAgIHZhciBmaW5hbGx5QWxyZWFkeUNhbGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbnN0YW5jZS5mbHVzaCgpOwotICAg
ICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZmluYWxs
eUFscmVhZHlDYWxsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHlBbHJlYWR5
Q2FsbGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5z
dGFuY2UgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5j
ZVN0YWNrLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnN0YW5j
ZSA9IHRoaXMuaW5zdGFuY2VTdGFjay5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmN1cnJlbnRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9uRW5kKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb25FbmQoY3VycmVudEluc3RhbmNlLCBuZXh0SW5zdGFuY2Up
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcnVuOiBmdW5jdGlv
bih0YXJnZXQsIG1ldGhvZCAvKiwgYXJncyAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIG9uRXJyb3IgPSBnZXRPbkVycm9yKHRoaXMub3B0aW9ucyk7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLmJlZ2luKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewot
ICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KGlzU3RyaW5nKG1ldGhvZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0
W21ldGhvZF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0KLSAgICAgICAgICAgICAgICAvLyBndWFyZCBh
Z2FpbnN0IFNhZmFyaSA2J3MgZG91YmxlLWZpbmFsbHkgYnVnCi0gICAgICAgICAgICAgICAgdmFy
IGRpZEZpbmFsbHkgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGlmIChvbkVycm9yKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWV0aG9kLmFwcGx5KHRhcmdldCwgYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZGlkRmluYWxseSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZpbmFsbHkgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAg
ICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRGaW5hbGx5KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRmluYWxseSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGRlZmVyOiBmdW5jdGlvbihxdWV1ZU5hbWUsIHRhcmdldCwgbWV0
aG9kIC8qICwgYXJncyAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFt
ZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChpc1N0cmluZyhtZXRob2QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhv
ZCA9IHRhcmdldFttZXRob2RdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHZhciBzdGFjayA9IHRoaXMuREVCVUcgPyBuZXcgRXJyb3IoKSA6IHVuZGVmaW5lZCwKLSAgICAg
ICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMykgOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRJ
bnN0YW5jZSkgewotICAgICAgICAgICAgICAgICAgICBjcmVhdGVBdXRvcnVuKHRoaXMpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5zdGFu
Y2Uuc2NoZWR1bGUocXVldWVOYW1lLCB0YXJnZXQsIG1ldGhvZCwgYXJncywgZmFsc2UsIHN0YWNr
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRlZmVyT25jZTogZnVuY3Rpb24ocXVl
dWVOYW1lLCB0YXJnZXQsIG1ldGhvZCAvKiAsIGFyZ3MgKi8KLSAgICAgICAgICAgICkgewotICAg
ICAgICAgICAgICAgIGlmICghbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9
IHRhcmdldDsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobWV0aG9kKSkgewotICAgICAg
ICAgICAgICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLkRFQlVHID8gbmV3IEVycm9yKCkg
OiB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAz
ID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpIDogdW5kZWZpbmVkOwotICAgICAgICAgICAgICAg
IGlmICghdGhpcy5jdXJyZW50SW5zdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRl
QXV0b3J1bih0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuY3VycmVudEluc3RhbmNlLnNjaGVkdWxlKHF1ZXVlTmFtZSwgdGFyZ2V0LCBtZXRob2Qs
IGFyZ3MsIHRydWUsIHN0YWNrKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldFRp
bWVvdXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2Fs
bChhcmd1bWVudHMpLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3MubGVuZ3RoLAotICAg
ICAgICAgICAgICAgIG1ldGhvZCwgd2FpdCwgdGFyZ2V0LAotICAgICAgICAgICAgICAgIG1ldGhv
ZE9yVGFyZ2V0LCBtZXRob2RPcldhaXQsIG1ldGhvZE9yQXJnczsKLQotICAgICAgICAgICAgICAg
IGlmIChsZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1ldGhvZCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgd2FpdCA9IDA7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPT09IDIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kT3JUYXJnZXQgPSBhcmdzWzBdOwotICAgICAgICAgICAgICAgICAgICBtZXRo
b2RPcldhaXQgPSBhcmdzWzFdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9u
KG1ldGhvZE9yV2FpdCkgfHwgaXNGdW5jdGlvbihtZXRob2RPclRhcmdldFttZXRob2RPcldhaXRd
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJncy5zaGlmdCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgd2FpdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXND
b2VyY2FibGVOdW1iZXIobWV0aG9kT3JXYWl0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bWV0aG9kID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCA9IGFy
Z3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldGhvZCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdhaXQgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29lcmNhYmxlTnVtYmVyKGxhc3QpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3YWl0ID0gYXJncy5wb3AoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQgPSAwOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kT3JUYXJnZXQgPSBh
cmdzWzBdOwotICAgICAgICAgICAgICAgICAgICBtZXRob2RPckFyZ3MgPSBhcmdzWzFdOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG1ldGhvZE9yQXJncykgfHwgKGlzU3Ry
aW5nKG1ldGhvZE9yQXJncykgJiYKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kT3JUYXJnZXQg
IT09IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kT3JBcmdzIGluIG1ldGhvZE9y
VGFyZ2V0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJncy5zaGlmdCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gYXJncy5zaGlmdCgpOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0g
YXJncy5zaGlmdCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdmFyIGV4ZWN1dGVBdCA9ICggKyBuZXcgRGF0ZSgpKSArIHBhcnNl
SW50KHdhaXQsIDEwKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhtZXRob2QpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRhcmdldFttZXRob2RdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBvbkVycm9yID0gZ2V0T25FcnJvcih0aGlz
Lm9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChvbkVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9uRXJyb3IoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuYXBw
bHkodGFyZ2V0LCBhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIGZpbmQgcG9zaXRpb24gdG8gaW5zZXJ0Ci0gICAgICAg
ICAgICAgICAgdmFyIGkgPSBzZWFyY2hUaW1lcihleGVjdXRlQXQsIHRpbWVycyk7Ci0KLSAgICAg
ICAgICAgICAgICB0aW1lcnMuc3BsaWNlKGksIDAsIGV4ZWN1dGVBdCwgZm4pOwotCi0gICAgICAg
ICAgICAgICAgdXBkYXRlTGF0ZXJUaW1lcih0aGlzLCBleGVjdXRlQXQsIHdhaXQpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZuOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdGhy
b3R0bGU6IGZ1bmN0aW9uKHRhcmdldCwgbWV0aG9kIC8qICwgYXJncywgd2FpdCwgW2ltbWVkaWF0
ZV0gKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywK
LSAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLAotICAgICAgICAgICAgICAgIGltbWVk
aWF0ZSA9IHBvcC5jYWxsKGFyZ3MpLAotICAgICAgICAgICAgICAgIHdhaXQsCi0gICAgICAgICAg
ICAgICAgdGhyb3R0bGVyLAotICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAg
IHRpbWVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGltbWVkaWF0ZSkgfHwgaXNT
dHJpbmcoaW1tZWRpYXRlKSkgewotICAgICAgICAgICAgICAgICAgICB3YWl0ID0gaW1tZWRpYXRl
OwotICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHdhaXQgPSBwb3AuY2FsbChhcmdzKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3YWl0ID0gcGFyc2VJbnQod2FpdCwg
MTApOwotCi0gICAgICAgICAgICAgICAgaW5kZXggPSBmaW5kVGhyb3R0bGVyKHRhcmdldCwgbWV0
aG9kLCB0aGlzLl90aHJvdHRsZXJzKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGhyb3R0bGVyc1tpbmRleF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHRocm90dGxlZAotCi0gICAgICAg
ICAgICAgICAgdGltZXIgPSBnbG9iYWwuc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYucnVuLmFwcGx5KHNlbGYsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBpbmRleCA9IGZpbmRUaHJvdHRsZXIodGFyZ2V0LCBtZXRob2QsIHNl
bGYuX3Rocm90dGxlcnMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGhyb3R0bGVycy5zcGxpY2UoaW5kZXgsIDEp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgd2FpdCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaW1tZWRpYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYu
cnVuLmFwcGx5KHNlbGYsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRocm90dGxlciA9IFt0YXJnZXQsIG1ldGhvZCwgdGltZXJdOwotCi0gICAgICAgICAgICAg
ICAgdGhpcy5fdGhyb3R0bGVycy5wdXNoKHRocm90dGxlcik7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3R0bGVyOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVib3VuY2U6
IGZ1bmN0aW9uKHRhcmdldCwgbWV0aG9kIC8qICwgYXJncywgd2FpdCwgW2ltbWVkaWF0ZV0gKi8K
LSAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAg
ICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLAotICAgICAgICAgICAgICAgIGltbWVkaWF0ZSA9
IHBvcC5jYWxsKGFyZ3MpLAotICAgICAgICAgICAgICAgIHdhaXQsCi0gICAgICAgICAgICAgICAg
aW5kZXgsCi0gICAgICAgICAgICAgICAgZGVib3VuY2VlLAotICAgICAgICAgICAgICAgIHRpbWVy
OwotCi0gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGltbWVkaWF0ZSkgfHwgaXNTdHJpbmco
aW1tZWRpYXRlKSkgewotICAgICAgICAgICAgICAgICAgICB3YWl0ID0gaW1tZWRpYXRlOwotICAg
ICAgICAgICAgICAgICAgICBpbW1lZGlhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB3YWl0ID0gcG9wLmNhbGwoYXJncyk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2FpdCA9IHBhcnNlSW50KHdhaXQsIDEwKTsK
LSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZGVib3VuY2VlCi0gICAgICAgICAgICAgICAgaW5k
ZXggPSBmaW5kRGVib3VuY2VlKHRhcmdldCwgbWV0aG9kLCB0aGlzLl9kZWJvdW5jZWVzKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
Ym91bmNlZSA9IHRoaXMuX2RlYm91bmNlZXNbaW5kZXhdOwotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9kZWJvdW5jZWVzLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNs
ZWFyVGltZW91dChkZWJvdW5jZWVbMl0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRpbWVyID0gZ2xvYmFsLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnJ1bi5hcHBseShzZWxmLCBhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB2YXIgaW5kZXggPSBmaW5kRGVib3VuY2VlKHRhcmdldCwgbWV0aG9kLCBzZWxm
Ll9kZWJvdW5jZWVzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZXMuc3BsaWNlKGluZGV4LCAxKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sIHdhaXQpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiBpbmRleCA9PT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2VsZi5ydW4uYXBwbHkoc2VsZiwgYXJncyk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgZGVib3VuY2VlID0gW3RhcmdldCwgbWV0aG9kLCB0aW1lcl07Ci0K
LSAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWVzLnB1c2goZGVib3VuY2VlKTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiBkZWJvdW5jZWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBjYW5jZWxUaW1lcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjbGVh
ckl0ZW1zID0gZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVv
dXQoaXRlbVsyXSk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGVhY2go
dGhpcy5fdGhyb3R0bGVycywgY2xlYXJJdGVtcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGhy
b3R0bGVycyA9IFtdOwotCi0gICAgICAgICAgICAgICAgZWFjaCh0aGlzLl9kZWJvdW5jZWVzLCBj
bGVhckl0ZW1zKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWVzID0gW107Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fbGF0ZXJUaW1lcikgewotICAgICAgICAgICAgICAgICAg
ICBjbGVhclRpbWVvdXQodGhpcy5fbGF0ZXJUaW1lcik7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX2xhdGVyVGltZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB0aW1lcnMgPSBbXTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvcnVuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9hdXRvcnVuKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fYXV0b3J1biA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgaGFzVGltZXJzOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gISF0aW1lcnMubGVuZ3RoIHx8ICEhdGhpcy5fZGVib3VuY2Vlcy5s
ZW5ndGggfHwgISF0aGlzLl90aHJvdHRsZXJzLmxlbmd0aCB8fCB0aGlzLl9hdXRvcnVuOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbih0aW1lcikgewotICAg
ICAgICAgICAgICAgIHZhciB0aW1lclR5cGUgPSB0eXBlb2YgdGltZXI7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodGltZXIgJiYgdGltZXJUeXBlID09PSAnb2JqZWN0JyAmJiB0aW1lci5xdWV1ZSAm
JiB0aW1lci5tZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgY2FuY2VsbGlu
ZyBhIGRlZmVyT25jZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZXIucXVldWUuY2Fu
Y2VsKHRpbWVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyVHlwZSA9PT0gJ2Z1
bmN0aW9uJykgewotICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBjYW5jZWxsaW5nIGEgc2V0
VGltZW91dAotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRpbWVycy5s
ZW5ndGg7IGkgPCBsOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1l
cnNbaSArIDFdID09PSB0aW1lcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVy
cy5zcGxpY2UoaSwgMik7IC8vIHJlbW92ZSB0aGUgdHdvIGVsZW1lbnRzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aW1lcikgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gd2UncmUgY2FuY2VsbGluZyBhIHRocm90dGxlIG9yIGRlYm91
bmNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWxJdGVtKGZpbmRUaHJv
dHRsZXIsIHRoaXMuX3Rocm90dGxlcnMsIHRpbWVyKSB8fAotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9jYW5jZWxJdGVtKGZpbmREZWJvdW5jZWUsIHRoaXMuX2RlYm91bmNlZXMsIHRpbWVyKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8v
IHRpbWVyIHdhcyBudWxsIG9yIG5vdCBhIHRpbWVyCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgX2NhbmNlbEl0ZW06IGZ1bmN0aW9uKGZpbmRNZXRob2Qs
IGFycmF5LCB0aW1lcikgewotICAgICAgICAgICAgICAgIHZhciBpdGVtLAotICAgICAgICAgICAg
ICAgIGluZGV4OwotCi0gICAgICAgICAgICAgICAgaWYgKHRpbWVyLmxlbmd0aCA8IDMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGluZGV4ID0gZmluZE1ldGhvZCh0aW1lclswXSwgdGltZXJbMV0sIGFycmF5
KTsKLQotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaXRlbSA9IGFycmF5W2luZGV4XTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
bVsyXSA9PT0gdGltZXJbMl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGlj
ZShpbmRleCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJb
Ml0pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQmFja2J1cm5lci5wcm90
b3R5cGUuc2NoZWR1bGUgPSBCYWNrYnVybmVyLnByb3RvdHlwZS5kZWZlcjsKLSAgICAgICAgQmFj
a2J1cm5lci5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gQmFja2J1cm5lci5wcm90b3R5cGUuZGVm
ZXJPbmNlOwotICAgICAgICBCYWNrYnVybmVyLnByb3RvdHlwZS5sYXRlciA9IEJhY2tidXJuZXIu
cHJvdG90eXBlLnNldFRpbWVvdXQ7Ci0KLSAgICAgICAgaWYgKG5lZWRzSUVUcnlDYXRjaEZpeCkg
ewotICAgICAgICAgICAgdmFyIG9yaWdpbmFsUnVuID0gQmFja2J1cm5lci5wcm90b3R5cGUucnVu
OwotICAgICAgICAgICAgQmFja2J1cm5lci5wcm90b3R5cGUucnVuID0gd3JhcEluVHJ5Q2F0Y2go
b3JpZ2luYWxSdW4pOwotCi0gICAgICAgICAgICB2YXIgb3JpZ2luYWxFbmQgPSBCYWNrYnVybmVy
LnByb3RvdHlwZS5lbmQ7Ci0gICAgICAgICAgICBCYWNrYnVybmVyLnByb3RvdHlwZS5lbmQgPSB3
cmFwSW5UcnlDYXRjaChvcmlnaW5hbEVuZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biB3cmFwSW5UcnlDYXRjaChmdW5jKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRPbkVycm9yKG9wdGlvbnMp
IHsKLSAgICAgICAgICAgIHJldHVybiBvcHRpb25zLm9uRXJyb3IgfHwgKG9wdGlvbnMub25FcnJv
clRhcmdldCAmJiBvcHRpb25zLm9uRXJyb3JUYXJnZXRbb3B0aW9ucy5vbkVycm9yTWV0aG9kXSk7
Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUF1dG9ydW4oYmFja2J1cm5l
cikgewotICAgICAgICAgICAgYmFja2J1cm5lci5iZWdpbigpOwotICAgICAgICAgICAgYmFja2J1
cm5lci5fYXV0b3J1biA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIGJhY2tidXJuZXIuX2F1dG9ydW4gPSBudWxsOwotICAgICAgICAgICAgICAgIGJhY2ti
dXJuZXIuZW5kKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIHVwZGF0ZUxhdGVyVGltZXIoc2VsZiwgZXhlY3V0ZUF0LCB3YWl0KSB7Ci0gICAgICAgICAg
ICBpZiAoIXNlbGYuX2xhdGVyVGltZXIgfHwgZXhlY3V0ZUF0IDwgc2VsZi5fbGF0ZXJUaW1lckV4
cGlyZXNBdCkgewotICAgICAgICAgICAgICAgIHNlbGYuX2xhdGVyVGltZXIgPSBnbG9iYWwuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGF0ZXJUaW1l
ciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhdGVyVGltZXJFeHBpcmVzQXQg
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICBleGVjdXRlVGltZXJzKHNlbGYpOwotICAgICAg
ICAgICAgICAgIH0sIHdhaXQpOwotICAgICAgICAgICAgICAgIHNlbGYuX2xhdGVyVGltZXJFeHBp
cmVzQXQgPSBleGVjdXRlQXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBleGVjdXRlVGltZXJzKHNlbGYpIHsKLSAgICAgICAgICAgIHZhciBub3cgPSArIG5l
dyBEYXRlKCksCi0gICAgICAgICAgICB0aW1lLCBmbnMsIGksIGw7Ci0KLSAgICAgICAgICAgIHNl
bGYucnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGkgPSBzZWFyY2hUaW1lcihub3cs
IHRpbWVycyk7Ci0KLSAgICAgICAgICAgICAgICBmbnMgPSB0aW1lcnMuc3BsaWNlKDAsIGkpOwot
Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgbCA9IGZucy5sZW5ndGg7IGkgPCBsOyBpICs9
IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zY2hlZHVsZShzZWxmLm9wdGlvbnMuZGVm
YXVsdFF1ZXVlLCBudWxsLCBmbnNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICBpZiAodGltZXJzLmxlbmd0aCkgewotICAgICAgICAgICAgICAg
IHVwZGF0ZUxhdGVyVGltZXIoc2VsZiwgdGltZXJzWzBdLCB0aW1lcnNbMF0gLSBub3cpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluZERlYm91bmNlZSh0
YXJnZXQsIG1ldGhvZCwgZGVib3VuY2VlcykgewotICAgICAgICAgICAgcmV0dXJuIGZpbmRJdGVt
KHRhcmdldCwgbWV0aG9kLCBkZWJvdW5jZWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGZpbmRUaHJvdHRsZXIodGFyZ2V0LCBtZXRob2QsIHRocm90dGxlcnMpIHsKLSAgICAgICAg
ICAgIHJldHVybiBmaW5kSXRlbSh0YXJnZXQsIG1ldGhvZCwgdGhyb3R0bGVycyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBmaW5kSXRlbSh0YXJnZXQsIG1ldGhvZCwgY29sbGVjdGlv
bikgewotICAgICAgICAgICAgdmFyIGl0ZW0sCi0gICAgICAgICAgICBpbmRleCA9IC0xOwotCi0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaXRlbSA9IGNvbGxlY3Rpb25baV07Ci0gICAgICAgICAg
ICAgICAgaWYgKGl0ZW1bMF0gPT09IHRhcmdldCAmJiBpdGVtWzFdID09PSBtZXRob2QpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXggPSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBp
bmRleDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlYXJjaFRpbWVyKHRpbWUsIHRp
bWVycykgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gMCwKLSAgICAgICAgICAgIGVuZCA9IHRp
bWVycy5sZW5ndGggLSAyLAotICAgICAgICAgICAgbWlkZGxlLCBsOwotCi0gICAgICAgICAgICB3
aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aW1lcnMgaXMg
YW4gYXJyYXkgb2YgcGFpcnMgJ2wnIHdpbGwgYWx3YXlzCi0gICAgICAgICAgICAgICAgLy8gYmUg
YW4gaW50ZWdlcgotICAgICAgICAgICAgICAgIGwgPSAoZW5kIC0gc3RhcnQpIC8gMjsKLQotICAg
ICAgICAgICAgICAgIC8vIGNvbXBlbnNhdGUgZm9yIHRoZSBpbmRleCBpbiBjYXNlIGV2ZW4gbnVt
YmVyCi0gICAgICAgICAgICAgICAgLy8gb2YgcGFpcnMgaW5zaWRlIHRpbWVycwotICAgICAgICAg
ICAgICAgIG1pZGRsZSA9IHN0YXJ0ICsgbCAtIChsICUgMik7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodGltZSA+PSB0aW1lcnNbbWlkZGxlXSkgewotICAgICAgICAgICAgICAgICAgICBzdGFydCA9
IG1pZGRsZSArIDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgZW5kID0gbWlkZGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuICh0aW1lID49IHRpbWVyc1tzdGFydF0pID8gc3RhcnQgKyAyIDogc3Rh
cnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5CYWNrYnVybmVyID0gQmFja2J1
cm5lcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImJhY2tidXJuZXIvZGVmZXJyZWRfYWN0aW9uX3F1
ZXVlcyIsCi0gICAgWyJiYWNrYnVybmVyL3V0aWxzIiwgImJhY2tidXJuZXIvcXVldWUiLCAiZXhw
b3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBVdGlscyA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgUXVldWUgPSBfX2RlcGVu
ZGVuY3kyX18uUXVldWU7Ci0KLSAgICAgICAgdmFyIGVhY2ggPSBVdGlscy5lYWNoLAotICAgICAg
ICBpc1N0cmluZyA9IFV0aWxzLmlzU3RyaW5nOwotCi0gICAgICAgIGZ1bmN0aW9uIERlZmVycmVk
QWN0aW9uUXVldWVzKHF1ZXVlTmFtZXMsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBxdWV1
ZXMgPSB0aGlzLnF1ZXVlcyA9IHt9OwotICAgICAgICAgICAgdGhpcy5xdWV1ZU5hbWVzID0gcXVl
dWVOYW1lcyA9IHF1ZXVlTmFtZXMgfHwgW107Ci0KLSAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9
IG9wdGlvbnM7Ci0KLSAgICAgICAgICAgIGVhY2gocXVldWVOYW1lcywgZnVuY3Rpb24ocXVldWVO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgcXVldWVzW3F1ZXVlTmFtZV0gPSBuZXcgUXVldWUodGhp
cywgcXVldWVOYW1lLCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgRGVmZXJyZWRBY3Rpb25RdWV1ZXMucHJvdG90eXBlID0gewotICAgICAgICAgICAgcXVl
dWVOYW1lczogbnVsbCwKLSAgICAgICAgICAgIHF1ZXVlczogbnVsbCwKLSAgICAgICAgICAgIG9w
dGlvbnM6IG51bGwsCi0KLSAgICAgICAgICAgIHNjaGVkdWxlOiBmdW5jdGlvbihxdWV1ZU5hbWUs
IHRhcmdldCwgbWV0aG9kLCBhcmdzLCBvbmNlRmxhZywgc3RhY2spIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcXVldWVzID0gdGhpcy5xdWV1ZXMsCi0gICAgICAgICAgICAgICAgcXVldWUgPSBxdWV1
ZXNbcXVldWVOYW1lXTsKLQotICAgICAgICAgICAgICAgIGlmICghcXVldWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgYXR0ZW1wdGVkIHRvIHNjaGVkdWxlIGFu
IGFjdGlvbiBpbiBhIHF1ZXVlICgiICsgcXVldWVOYW1lICsgIikgdGhhdCBkb2Vzbid0IGV4aXN0
Iik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG9uY2VGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5wdXNoVW5pcXVlKHRhcmdldCwgbWV0
aG9kLCBhcmdzLCBzdGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHF1ZXVlLnB1c2godGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBpbnZva2U6
IGZ1bmN0aW9uKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBfKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZC5h
cHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1ldGhvZC5jYWxsKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgaW52b2tlV2l0aE9uRXJyb3I6IGZ1bmN0aW9uKHRhcmdl
dCwgbWV0aG9kLCBhcmdzLCBvbkVycm9yKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdzKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5jYWxsKHRhcmdl
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJv
cikgewotICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBmbHVzaDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHF1ZXVlcyA9IHRoaXMucXVldWVzLAotICAgICAgICAgICAgICAg
IHF1ZXVlTmFtZXMgPSB0aGlzLnF1ZXVlTmFtZXMsCi0gICAgICAgICAgICAgICAgcXVldWVOYW1l
LCBxdWV1ZSwgcXVldWVJdGVtcywgcHJpb3JRdWV1ZU5hbWVJbmRleCwKLSAgICAgICAgICAgICAg
ICBxdWV1ZU5hbWVJbmRleCA9IDAsIG51bWJlck9mUXVldWVzID0gcXVldWVOYW1lcy5sZW5ndGgs
Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywKLSAgICAgICAgICAgICAg
ICBvbkVycm9yID0gb3B0aW9ucy5vbkVycm9yIHx8IChvcHRpb25zLm9uRXJyb3JUYXJnZXQgJiYg
b3B0aW9ucy5vbkVycm9yVGFyZ2V0W29wdGlvbnMub25FcnJvck1ldGhvZF0pLAotICAgICAgICAg
ICAgICAgIGludm9rZSA9IG9uRXJyb3IgPyB0aGlzLmludm9rZVdpdGhPbkVycm9yIDogdGhpcy5p
bnZva2U7Ci0KLSAgICAgICAgICAgICAgICBvdXRlcmxvb3A6Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKHF1ZXVlTmFtZUluZGV4IDwgbnVtYmVyT2ZRdWV1ZXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcXVldWVOYW1lID0gcXVldWVOYW1lc1txdWV1ZU5hbWVJbmRleF07Ci0gICAgICAgICAgICAg
ICAgICAgIHF1ZXVlID0gcXVldWVzW3F1ZXVlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIHF1
ZXVlSXRlbXMgPSBxdWV1ZS5fcXVldWVCZWluZ0ZsdXNoZWQgPSBxdWV1ZS5fcXVldWUuc2xpY2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgcXVldWUuX3F1ZXVlID0gW107Ci0KLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHF1ZXVlT3B0aW9ucyA9IHF1ZXVlLm9wdGlvbnMsIC8vIFRPRE86IHdyaXRl
IGEgdGVzdCBmb3IgdGhpcwotICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPSBxdWV1ZU9wdGlv
bnMgJiYgcXVldWVPcHRpb25zLmJlZm9yZSwKLSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSBx
dWV1ZU9wdGlvbnMgJiYgcXVldWVPcHRpb25zLmFmdGVyLAotICAgICAgICAgICAgICAgICAgICB0
YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgIHF1ZXVlSW5k
ZXggPSAwLCBudW1iZXJPZlF1ZXVlSXRlbXMgPSBxdWV1ZUl0ZW1zLmxlbmd0aDsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZRdWV1ZUl0ZW1zICYmIGJlZm9yZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYmVmb3JlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAocXVldWVJbmRleCA8IG51bWJlck9mUXVldWVJdGVtcykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gcXVldWVJdGVtc1txdWV1ZUluZGV4
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHF1ZXVlSXRlbXNbcXVldWVJbmRl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IHF1ZXVlSXRlbXNbcXVldWVJ
bmRleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBxdWV1ZUl0ZW1zW3F1
ZXVlSW5kZXggKyAzXTsgLy8gRGVidWdnaW5nIGFzc2lzdGFuY2UKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzU3RyaW5nKG1ldGhvZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kIGNvdWxkIGhhdmUgYmVlbiBudWxs
aWZpZWQgLyBjYW5jZWxlZCBkdXJpbmcgZmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UodGFyZ2V0LCBt
ZXRob2QsIGFyZ3MsIG9uRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBxdWV1ZUluZGV4ICs9IDQ7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBxdWV1ZS5fcXVldWVCZWluZ0ZsdXNoZWQgPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZRdWV1ZUl0ZW1zICYmIGFmdGVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZnRlcigpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChwcmlvclF1ZXVlTmFtZUluZGV4ID0gaW5kZXhP
ZlByaW9yUXVldWVXaXRoQWN0aW9ucyh0aGlzLCBxdWV1ZU5hbWVJbmRleCkpICE9PSAtMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVOYW1lSW5kZXggPSBwcmlvclF1ZXVlTmFtZUlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXJsb29wOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcXVldWVOYW1lSW5kZXgrKzsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
ZnVuY3Rpb24gaW5kZXhPZlByaW9yUXVldWVXaXRoQWN0aW9ucyhkYXEsIGN1cnJlbnRRdWV1ZUlu
ZGV4KSB7Ci0gICAgICAgICAgICB2YXIgcXVldWVOYW1lLCBxdWV1ZTsKLQotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBjdXJyZW50UXVldWVJbmRleDsgaSA8PSBsOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBxdWV1ZU5hbWUgPSBkYXEucXVldWVOYW1lc1tpXTsKLSAgICAgICAgICAg
ICAgICBxdWV1ZSA9IGRhcS5xdWV1ZXNbcXVldWVOYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAo
cXVldWUuX3F1ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLkRlZmVycmVkQWN0aW9uUXVldWVzID0g
RGVmZXJyZWRBY3Rpb25RdWV1ZXM7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJiYWNrYnVybmVyL3F1
ZXVlIiwKLSAgICBbImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIGZ1bmN0aW9uIFF1ZXVlKGRhcSwgbmFtZSwgb3B0
aW9ucykgewotICAgICAgICAgICAgdGhpcy5kYXEgPSBkYXE7Ci0gICAgICAgICAgICB0aGlzLm5h
bWUgPSBuYW1lOwotICAgICAgICAgICAgdGhpcy5nbG9iYWxPcHRpb25zID0gb3B0aW9uczsKLSAg
ICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNbbmFtZV07Ci0gICAgICAgICAgICB0aGlz
Ll9xdWV1ZSA9IFtdOwotICAgICAgICB9Ci0KLSAgICAgICAgUXVldWUucHJvdG90eXBlID0gewot
ICAgICAgICAgICAgZGFxOiBudWxsLAotICAgICAgICAgICAgbmFtZTogbnVsbCwKLSAgICAgICAg
ICAgIG9wdGlvbnM6IG51bGwsCi0gICAgICAgICAgICBvbkVycm9yOiBudWxsLAotICAgICAgICAg
ICAgX3F1ZXVlOiBudWxsLAotCi0gICAgICAgICAgICBwdXNoOiBmdW5jdGlvbih0YXJnZXQsIG1l
dGhvZCwgYXJncywgc3RhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSB0aGlzLl9x
dWV1ZTsKLSAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBz
dGFjayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgcXVl
dWU6IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LAotICAgICAgICAg
ICAgICAgICAgICBtZXRob2Q6IG1ldGhvZAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBwdXNoVW5pcXVlOiBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCwg
YXJncywgc3RhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSB0aGlzLl9xdWV1ZSwg
Y3VycmVudFRhcmdldCwgY3VycmVudE1ldGhvZCwgaSwgbDsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGwgPSBxdWV1ZS5sZW5ndGg7IGkgPCBsOyBpICs9IDQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFRhcmdldCA9IHF1ZXVlW2ldOwotICAgICAgICAgICAgICAgICAgICBj
dXJyZW50TWV0aG9kID0gcXVldWVbaSArIDFdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50VGFyZ2V0ID09PSB0YXJnZXQgJiYgY3VycmVudE1ldGhvZCA9PT0gbWV0aG9kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVtpICsgMl0gPSBhcmdzOyAvLyByZXBsYWNlIGFy
Z3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlW2kgKyAzXSA9IHN0YWNrOyAvLyByZXBs
YWNlIHN0YWNrCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHF1ZXVlOiB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRhcmdldDogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcXVldWUucHVzaCh0YXJnZXQsIG1l
dGhvZCwgYXJncywgc3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHF1ZXVlOiB0aGlzLAotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdl
dCwKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QKLSAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIG1lLCBvbmx5
IGJlaW5nIHVzZWQgZm9yIEVtYmVyLnJ1bi5zeW5jCi0gICAgICAgICAgICBmbHVzaDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWUsCi0gICAgICAg
ICAgICAgICAgZ2xvYmFsT3B0aW9ucyA9IHRoaXMuZ2xvYmFsT3B0aW9ucywKLSAgICAgICAgICAg
ICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLAotICAgICAgICAgICAgICAgIGJlZm9yZSA9IG9w
dGlvbnMgJiYgb3B0aW9ucy5iZWZvcmUsCi0gICAgICAgICAgICAgICAgYWZ0ZXIgPSBvcHRpb25z
ICYmIG9wdGlvbnMuYWZ0ZXIsCi0gICAgICAgICAgICAgICAgb25FcnJvciA9IGdsb2JhbE9wdGlv
bnMub25FcnJvciB8fCAoZ2xvYmFsT3B0aW9ucy5vbkVycm9yVGFyZ2V0ICYmIGdsb2JhbE9wdGlv
bnMub25FcnJvclRhcmdldFtnbG9iYWxPcHRpb25zLm9uRXJyb3JNZXRob2RdKSwKLSAgICAgICAg
ICAgICAgICB0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2ssIGksIGwgPSBxdWV1ZS5sZW5ndGg7
Ci0KLSAgICAgICAgICAgICAgICBpZiAobCAmJiBiZWZvcmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYmVmb3JlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBsOyBpICs9IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gcXVldWVb
aV07Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHF1ZXVlW2kgKyAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgYXJncyA9IHF1ZXVlW2kgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgc3Rh
Y2sgPSBxdWV1ZVtpICsgM107IC8vIERlYnVnZ2luZyBhc3Npc3RhbmNlCi0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gVE9ETzogZXJyb3IgaGFuZGxpbmcKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b25FcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb25FcnJvcihlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QuY2FsbCh0YXJnZXQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb25FcnJvcihlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1ldGhvZC5jYWxsKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGwg
JiYgYWZ0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBuZXcgaXRlbXMgaGF2ZSBiZWVuIGFk
ZGVkCi0gICAgICAgICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IGwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcXVldWUgPSBxdWV1ZS5zbGljZShsKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5mbHVzaCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3F1ZXVlLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihhY3Rpb25Ub0NhbmNlbCkg
ewotICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHRoaXMuX3F1ZXVlLCBjdXJyZW50VGFyZ2V0
LCBjdXJyZW50TWV0aG9kLCBpLCBsOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9
IHF1ZXVlLmxlbmd0aDsgaSA8IGw7IGkgKz0gNCkgewotICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50VGFyZ2V0ID0gcXVldWVbaV07Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNZXRob2Qg
PSBxdWV1ZVtpICsgMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQg
PT09IGFjdGlvblRvQ2FuY2VsLnRhcmdldCAmJiBjdXJyZW50TWV0aG9kID09PSBhY3Rpb25Ub0Nh
bmNlbC5tZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnNwbGljZShpLCA0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYgbm90IGZv
dW5kIGluIGN1cnJlbnQgcXVldWUKLSAgICAgICAgICAgICAgICAvLyBjb3VsZCBiZSBpbiB0aGUg
cXVldWUgdGhhdCBpcyBiZWluZyBmbHVzaGVkCi0gICAgICAgICAgICAgICAgcXVldWUgPSB0aGlz
Ll9xdWV1ZUJlaW5nRmx1c2hlZDsKLSAgICAgICAgICAgICAgICBpZiAoIXF1ZXVlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZm9yIChpID0gMCwgbCA9IHF1ZXVlLmxlbmd0aDsgaSA8IGw7IGkgKz0gNCkgewotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gcXVldWVbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRNZXRob2QgPSBxdWV1ZVtpICsgMV07Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRUYXJnZXQgPT09IGFjdGlvblRvQ2FuY2VsLnRhcmdldCAmJiBjdXJyZW50TWV0
aG9kID09PSBhY3Rpb25Ub0NhbmNlbC5tZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRvbid0IG1lc3Mgd2l0aCBhcnJheSBkdXJpbmcgZmx1c2gKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGp1c3QgbnVsbGlmeSB0aGUgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBxdWV1ZVtpICsgMV0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX18uUXVldWUgPSBRdWV1ZTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoImJhY2tidXJuZXIvdXRpbHMiLAotICAgIFsiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IHsKLSAgICAgICAgICAgIGVhY2g6IGZ1bmN0aW9u
KGNvbGxlY3Rpb24sIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKGNvbGxlY3Rpb25baV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbihzdXNwZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVvZiBzdXNwZWN0ID09PSAnc3RyaW5nJzsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGlzRnVuY3Rpb246IGZ1bmN0aW9uKHN1c3BlY3QpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHlwZW9mIHN1c3BlY3QgPT09ICdmdW5jdGlvbic7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBpc051bWJlcjogZnVuY3Rpb24oc3VzcGVjdCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlb2Ygc3VzcGVjdCA9PT0gJ251bWJlcic7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0KLSAgICBkZWZpbmUoImNvbnRhaW5lciIsCi0gICAgWyJj
b250YWluZXIvY29udGFpbmVyIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoK
LSAgICAgICAgICAgIFB1YmxpYyBhcGkgZm9yIHRoZSBjb250YWluZXIgaXMgc3RpbGwgaW4gZmx1
eC4KLSAgICAgICAgICAgIFRoZSBwdWJsaWMgYXBpLCBzcGVjaWZpZWQgb24gdGhlIGFwcGxpY2F0
aW9uIG5hbWVzcGFjZSBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgc3RhYmxlIGFwaS4KLSAgICAg
ICAgICAgIC8vIEBtb2R1bGUgY29udGFpbmVyCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAgICAgRmxhZyB0byBlbmFibGUvZGlz
YWJsZSBtb2RlbCBmYWN0b3J5IGluamVjdGlvbnMgKGRpc2FibGVkIGJ5IGRlZmF1bHQpCi0gICAg
ICAgICAgICAgSWYgbW9kZWwgZmFjdG9yeSBpbmplY3Rpb25zIGFyZSBlbmFibGVkLCBtb2RlbHMg
c2hvdWxkIG5vdCBiZQotICAgICAgICAgICAgIGFjY2Vzc2VkIGdsb2JhbGx5IChvbmx5IHRocm91
Z2ggYGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2RlbDptb2RlbE5hbWUnKSlgKTsKLSAgICAg
ICAgICAgICovCi0gICAgICAgIEVtYmVyLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUyA9IGZhbHNl
OwotCi0gICAgICAgIGlmIChFbWJlci5FTlYgJiYgdHlwZW9mIEVtYmVyLkVOVi5NT0RFTF9GQUNU
T1JZX0lOSkVDVElPTlMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICBFbWJlci5NT0RF
TF9GQUNUT1JZX0lOSkVDVElPTlMgPSAhIUVtYmVyLkVOVi5NT0RFTF9GQUNUT1JZX0lOSkVDVElP
TlM7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZhciBDb250YWluZXIgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29udGFp
bmVyOwotICAgIH0pOwotICAgIGRlZmluZSgiY29udGFpbmVyL2NvbnRhaW5lciIsCi0gICAgWyJj
b250YWluZXIvaW5oZXJpdGluZ19kaWN0IiwgImVtYmVyLW1ldGFsL2NvcmUiLCAiZXhwb3J0cyJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBJbmhlcml0aW5nRGlj
dCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2Rl
cGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0KLSAgICAg
ICAgLy8gQSBsaWdodHdlaWdodCBjb250YWluZXIgdGhhdCBoZWxwcyB0byBhc3NlbWJsZSBhbmQg
ZGVjb3VwbGUgY29tcG9uZW50cy4KLSAgICAgICAgLy8gUHVibGljIGFwaSBmb3IgdGhlIGNvbnRh
aW5lciBpcyBzdGlsbCBpbiBmbHV4LgotICAgICAgICAvLyBUaGUgcHVibGljIGFwaSwgc3BlY2lm
aWVkIG9uIHRoZSBhcHBsaWNhdGlvbiBuYW1lc3BhY2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhl
IHN0YWJsZSBhcGkuCi0gICAgICAgIGZ1bmN0aW9uIENvbnRhaW5lcihwYXJlbnQpIHsKLSAgICAg
ICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9
IFtdOwotCi0gICAgICAgICAgICB0aGlzLnJlc29sdmVyID0gcGFyZW50ICYmIHBhcmVudC5yZXNv
bHZlciB8fCBmdW5jdGlvbigpIHt9OwotCi0gICAgICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gbmV3
IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQucmVnaXN0cnkpOwotICAgICAgICAgICAg
dGhpcy5jYWNoZSA9IG5ldyBJbmhlcml0aW5nRGljdChwYXJlbnQgJiYgcGFyZW50LmNhY2hlKTsK
LSAgICAgICAgICAgIHRoaXMuZmFjdG9yeUNhY2hlID0gbmV3IEluaGVyaXRpbmdEaWN0KHBhcmVu
dCAmJiBwYXJlbnQuZmFjdG9yeUNhY2hlKTsKLSAgICAgICAgICAgIHRoaXMucmVzb2x2ZUNhY2hl
ID0gbmV3IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQucmVzb2x2ZUNhY2hlKTsKLSAg
ICAgICAgICAgIHRoaXMudHlwZUluamVjdGlvbnMgPSBuZXcgSW5oZXJpdGluZ0RpY3QocGFyZW50
ICYmIHBhcmVudC50eXBlSW5qZWN0aW9ucyk7Ci0gICAgICAgICAgICB0aGlzLmluamVjdGlvbnMg
PSB7fTsKLQotICAgICAgICAgICAgdGhpcy5mYWN0b3J5VHlwZUluamVjdGlvbnMgPSBuZXcgSW5o
ZXJpdGluZ0RpY3QocGFyZW50ICYmIHBhcmVudC5mYWN0b3J5VHlwZUluamVjdGlvbnMpOwotICAg
ICAgICAgICAgdGhpcy5mYWN0b3J5SW5qZWN0aW9ucyA9IHt9OwotCi0gICAgICAgICAgICB0aGlz
Ll9vcHRpb25zID0gbmV3IEluaGVyaXRpbmdEaWN0KHBhcmVudCAmJiBwYXJlbnQuX29wdGlvbnMp
OwotICAgICAgICAgICAgdGhpcy5fdHlwZU9wdGlvbnMgPSBuZXcgSW5oZXJpdGluZ0RpY3QocGFy
ZW50ICYmIHBhcmVudC5fdHlwZU9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGFp
bmVyLnByb3RvdHlwZSA9IHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQ29udGFpbmVyCi0g
ICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBwYXJlbnQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgY2hpbGRyZW4KLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQXJy
YXkKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgW10KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEBwcm9wZXJ0eSByZXNvbHZlcgotICAgICAgICAgICAgICAgICAgICBAdHlw
ZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVyOiBu
dWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJl
Z2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVnaXN0cnk6IG51bGwsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY2FjaGUKLSAgICAgICAgICAgICAg
ICAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBjYWNoZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSB0eXBlSW5qZWN0aW9ucwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBJbmhl
cml0aW5nRGljdAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHR5cGVJbmplY3Rp
b25zOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IGluamVjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICAg
ICAgICAgICAgICAgIEBkZWZhdWx0IHt9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgaW5qZWN0aW9uczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IF9vcHRpb25zCi0g
ICAgICAgICAgICAgICAgICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfb3B0
aW9uczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2
YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IF90eXBlT3B0aW9ucwotICAgICAg
ICAgICAgICAgICAgICBAdHlwZSBJbmhlcml0aW5nRGljdAotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF90eXBlT3B0aW9uczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHVybnMgYSBuZXcgY2hpbGQgb2YgdGhlIGN1cnJlbnQgY29udGFp
bmVyLiBUaGVzZSBjaGlsZHJlbiBhcmUgY29uZmlndXJlZAotICAgICAgICAgICAgICAgICAgICB0
byBjb3JyZWN0bHkgaW5oZXJpdCBmcm9tIHRoZSBjdXJyZW50IGNvbnRhaW5lci4KLQotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGNoaWxkCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e0NvbnRhaW5lcn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjaGlsZDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5ldyBDb250YWluZXIo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNvbnRhaW5lcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIGEga2V5LXZhbHVlIHBhaXIgb24g
dGhlIGN1cnJlbnQgY29udGFpbmVyLiBJZiBhIHBhcmVudCBjb250YWluZXIsCi0gICAgICAgICAg
ICAgICAgICAgIGhhcyB0aGUgc2FtZSBrZXksIG9uY2Ugc2V0IG9uIGEgY2hpbGQsIHRoZSBwYXJl
bnQgYW5kIGNoaWxkIHdpbGwgZGl2ZXJnZQotICAgICAgICAgICAgICAgICAgICBhcyBleHBlY3Rl
ZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldAotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHthbnl9IHZhbHVlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVycyBhIGZh
Y3RvcnkgZm9yIGxhdGVyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxl
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbnRhaW5lciA9IG5ldyBDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXIucmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBQZXJzb24sIHtzaW5nbGV0b246IGZh
bHNlIH0pOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2ZydWl0OmZh
dm9yaXRlJywgT3JhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVy
KCdjb21tdW5pY2F0aW9uOm1haW4nLCBFbWFpbCwge3NpbmdsZXRvbjogZmFsc2V9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZWdpc3Rl
cgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihmdWxsTmFtZSwgZmFjdG9yeSwgb3B0aW9ucykgewotICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxs
IG5hbWUnLCB2YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZmFjdG9yeSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYW4gdW5rbm93biBmYWN0b3J5OiBg
JyArIGZ1bGxOYW1lICsgJ2AnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5jYWNoZS5oYXMobm9ybWFsaXplZE5hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlLXJlZ2lzdGVyOiBgJyArIGZ1
bGxOYW1lICsgJ2AsIGFzIGl0IGhhcyBhbHJlYWR5IGJlZW4gbG9va2VkIHVwLicpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0cnkuc2V0KG5vcm1hbGl6
ZWROYW1lLCBmYWN0b3J5KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLnNldChub3Jt
YWxpemVkTmFtZSwgb3B0aW9ucyB8fCB7fSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgVW5yZWdpc3RlciBhIGZ1bGxOYW1lCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIu
cmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsKLQotICAgICAgICAgICAgICAgICAgICBjb250
YWluZXIubG9va3VwKCdtb2RlbDp1c2VyJykgaW5zdGFuY2VvZiBVc2VyIC8vPT4gdHJ1ZQotCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci51bnJlZ2lzdGVyKCdtb2RlbDp1c2VyJykKLSAg
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmxvb2t1cCgnbW9kZWw6dXNlcicpID09PSB1bmRl
ZmluZWQgLy89PiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgdW5yZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5yZWdp
c3RlcjogZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQo
J2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdmFsaWRhdGVGdWxsTmFtZShm
dWxsTmFtZSkpOwotCi0gICAgICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gdGhpcy5u
b3JtYWxpemUoZnVsbE5hbWUpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RyeS5yZW1v
dmUobm9ybWFsaXplZE5hbWUpOwotICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKG5v
cm1hbGl6ZWROYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnlDYWNoZS5yZW1vdmUo
bm9ybWFsaXplZE5hbWUpOwotICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUNhY2hlLnJlbW92
ZShub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5yZW1vdmUo
bm9ybWFsaXplZE5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIEdpdmVuIGEgZnVsbE5hbWUgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5n
IGZhY3RvcnkuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCBgcmVzb2x2ZWAgd2ls
bCByZXRyaWV2ZSB0aGUgZmFjdG9yeSBmcm9tCi0gICAgICAgICAgICAgICAgICAgIGl0cyBjb250
YWluZXIncyByZWdpc3RyeS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignYXBpOnR3aXR0ZXInLCBUd2l0dGVy
KTsKLQotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVzb2x2ZSgnYXBpOnR3aXR0ZXIn
KSAvLyA9PiBUd2l0dGVyCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIE9wdGlvbmFsbHkgdGhlIGNvbnRhaW5lciBjYW4gYmUgcHJvdmlkZWQgd2l0aCBhIGN1
c3RvbSByZXNvbHZlci4KLSAgICAgICAgICAgICAgICAgICAgSWYgcHJvdmlkZWQsIGByZXNvbHZl
YCB3aWxsIGZpcnN0IHByb3ZpZGUgdGhlIGN1c3RvbSByZXNvbHZlcgotICAgICAgICAgICAgICAg
ICAgICB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVzb2x2ZSB0aGUgZnVsbE5hbWUsIG90aGVyd2lzZSBp
dCB3aWxsIGZhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWdpc3RyeS4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5yZXNvbHZlciA9IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgLy8gbG9va3VwIHZpYSB0aGUgbW9kdWxlIHN5c3RlbSBvZiBjaG9pY2UKLSAgICAgICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHdpdHRlciBmYWN0b3J5
IGlzIGFkZGVkIHRvIHRoZSBtb2R1bGUgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5lci5yZXNvbHZlKCdhcGk6dHdpdHRlcicpIC8vID0+IFR3aXR0ZXIKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNvbHZlCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtGdW5jdGlvbn0gZnVsbE5hbWUncyBmYWN0b3J5Ci0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAg
ICAgICAgICBFbWJlci5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1l
JywgdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkpOwotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXNvbHZlKHRoaXMsIHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKSk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBob29rIHRoYXQgY2FuIGJl
IHVzZWQgdG8gZGVzY3JpYmUgaG93IHRoZSByZXNvbHZlciB3aWxsCi0gICAgICAgICAgICAgICAg
ICAgIGF0dGVtcHQgdG8gZmluZCB0aGUgZmFjdG9yeS4KLQotICAgICAgICAgICAgICAgICAgICBG
b3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgRW1iZXIgYC5kZXNjcmliZWAgcmV0dXJucyB0aGUgZnVs
bAotICAgICAgICAgICAgICAgICAgICBjbGFzcyBuYW1lIChpbmNsdWRpbmcgbmFtZXNwYWNlKSB3
aGVyZSBFbWJlcidzIHJlc29sdmVyIGV4cGVjdHMKLSAgICAgICAgICAgICAgICAgICAgdG8gZmlu
ZCB0aGUgYGZ1bGxOYW1lYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRlc2NyaWJl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtzdHJpbmd9IGRlc2NyaWJlZCBmdWxsTmFtZQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlc2NyaWJlOiBmdW5jdGlvbihmdWxsTmFtZSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBIGhvb2sgdG8gZW5hYmxlIGN1c3RvbSBm
dWxsTmFtZSBub3JtYWxpemF0aW9uIGJlaGF2aW91cgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2Qgbm9ybWFsaXplCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxs
TmFtZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtzdHJpbmd9IG5vcm1hbGl6ZWQgZnVs
bE5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBub3JtYWxpemU6IGZ1bmN0
aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxOYW1lOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
bWFrZVRvU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHthbnl9IGZhY3RvcnkK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtzdHJpbmd9IGZ1bGxOYW1lCi0gICAgICAgICAg
ICAgICAgICAgIEByZXR1cm4ge2Z1bmN0aW9ufSB0b1N0cmluZyBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIG1ha2VUb1N0cmluZzogZnVuY3Rpb24oZmFjdG9yeSwg
ZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeS50b1N0cmluZygpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEdp
dmVuIGEgZnVsbE5hbWUgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBpbnN0YW5jZS4KLQotICAgICAg
ICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgZm9yIGxvb2t1cCB0byByZXR1
cm4gYSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzaW5nbGV0
b24gaXMgc2NvcGVkIHRvIHRoZSBjb250YWluZXIsIGFsbG93aW5nIG11bHRpcGxlIGNvbnRhaW5l
cnMKLSAgICAgICAgICAgICAgICAgICAgdG8gYWxsIGhhdmUgdGhlaXIgb3duIGxvY2FsbHkgc2Nv
cGVkIHNpbmdsZXRvbnMuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gbmV3IENvbnRhaW5lcigpOwotICAgICAg
ICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2FwaTp0d2l0dGVyJywgVHdpdHRlcik7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHR3aXR0ZXIgPSBjb250YWluZXIubG9va3VwKCdh
cGk6dHdpdHRlcicpOwotCi0gICAgICAgICAgICAgICAgICAgIHR3aXR0ZXIgaW5zdGFuY2VvZiBU
d2l0dGVyOyAvLyA9PiB0cnVlCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCB0
aGUgY29udGFpbmVyIHdpbGwgcmV0dXJuIHNpbmdsZXRvbnMKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHR3aXR0ZXIyID0gY29udGFpbmVyLmxvb2t1cCgnYXBpOnR3aXR0ZXInKTsKLSAgICAgICAg
ICAgICAgICAgICAgdHdpdHRlcjIgaW5zdGFuY2VvZiBUd2l0dGVyOyAvLyA9PiB0cnVlCi0KLSAg
ICAgICAgICAgICAgICAgICAgdHdpdHRlciA9PT0gdHdpdHRlcjI7IC8vPT4gdHJ1ZQotICAgICAg
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJZiBzaW5nbGV0b25zIGFy
ZSBub3Qgd2FudGVkIGFuIG9wdGlvbmFsIGZsYWcgY2FuIGJlIHByb3ZpZGVkIGF0IGxvb2t1cC4K
LQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRhaW5lci5yZWdpc3RlcignYXBpOnR3aXR0ZXInLCBUd2l0dGVyKTsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgdHdpdHRlciA9IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVyJywgeyBz
aW5nbGV0b246IGZhbHNlIH0pOwotICAgICAgICAgICAgICAgICAgICB2YXIgdHdpdHRlcjIgPSBj
b250YWluZXIubG9va3VwKCdhcGk6dHdpdHRlcicsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLQot
ICAgICAgICAgICAgICAgICAgICB0d2l0dGVyID09PSB0d2l0dGVyMjsgLy89PiBmYWxzZQotICAg
ICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGxvb2t1
cAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiB7YW55fQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxvb2t1cDog
ZnVuY3Rpb24oZnVsbE5hbWUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdmFsaWRhdGVGdWxsTmFt
ZShmdWxsTmFtZSkpOwotICAgICAgICAgICAgICAgIHJldHVybiBsb29rdXAodGhpcywgdGhpcy5u
b3JtYWxpemUoZnVsbE5hbWUpLCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIGZ1bGxOYW1lIHJldHVybiB0aGUg
Y29ycmVzcG9uZGluZyBmYWN0b3J5LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgbG9v
a3VwRmFjdG9yeQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUK
LSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7YW55fQotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGxvb2t1cEZhY3Rvcnk6IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCdmdWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFt
ZScsIHZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFjdG9yeUZvcih0aGlzLCB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSkpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgZnVsbE5h
bWUgY2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpcyBhd2FyZSBvZiBpdHMgZmFjdG9yeQotICAgICAg
ICAgICAgICAgICAgICBvciBzaW5nbGV0b24gaW5zdGFuY2UuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBoYXMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxO
YW1lCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihmdWxsTmFtZSkgewotICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUn
LCB2YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhh
cyh0aGlzLCB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSkpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFsbG93IHJlZ2lzdGVyaW5nIG9wdGlv
bnMgZm9yIGFsbCBmYWN0b3JpZXMgb2YgYSB0eXBlLgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5ldyBDb250
YWluZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBpZiBhbGwgb2YgdHlwZSBgY29ubmVj
dGlvbmAgbXVzdCBub3QgYmUgc2luZ2xldG9ucwotICAgICAgICAgICAgICAgICAgICBjb250YWlu
ZXIub3B0aW9uc0ZvclR5cGUoJ2Nvbm5lY3Rpb24nLCB7IHNpbmdsZXRvbjogZmFsc2UgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdjb25uZWN0aW9uOnR3aXR0
ZXInLCBUd2l0dGVyQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5y
ZWdpc3RlcignY29ubmVjdGlvbjpmYWNlYm9vaycsIEZhY2Vib29rQ29ubmVjdGlvbik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHR3aXR0ZXIgPSBjb250YWluZXIubG9va3VwKCdjb25uZWN0
aW9uOnR3aXR0ZXInKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHR3aXR0ZXIyID0gY29udGFp
bmVyLmxvb2t1cCgnY29ubmVjdGlvbjp0d2l0dGVyJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
dHdpdHRlciA9PT0gdHdpdHRlcjI7IC8vID0+IGZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAg
dmFyIGZhY2Vib29rID0gY29udGFpbmVyLmxvb2t1cCgnY29ubmVjdGlvbjpmYWNlYm9vaycpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgZmFjZWJvb2syID0gY29udGFpbmVyLmxvb2t1cCgnY29u
bmVjdGlvbjpmYWNlYm9vaycpOwotCi0gICAgICAgICAgICAgICAgICAgIGZhY2Vib29rID09PSBm
YWNlYm9vazI7IC8vID0+IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2Qgb3B0aW9uc0ZvclR5cGUKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvcHRpb25zRm9yVHlw
ZTogZnVuY3Rpb24odHlwZSwgb3B0aW9ucykgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBh
cmVudCkgewotICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsQ2hpbGRPcGVyYXRpb24oJ29wdGlv
bnNGb3JUeXBlJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5f
dHlwZU9wdGlvbnMuc2V0KHR5cGUsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb3B0aW9ucwotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9w
dGlvbnM6IGZ1bmN0aW9uKHR5cGUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm9w
dGlvbnNGb3JUeXBlKHR5cGUsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVzZWQgb25seSB2aWEgYGluamVjdGlvbmAuCi0K
LSAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBzcGVjaWFsaXplZCBmb3JtIG9mIGluamVj
dGlvbiwgc3BlY2lmaWNhbGx5IGVuYWJsaW5nCi0gICAgICAgICAgICAgICAgICAgIGFsbCBvYmpl
Y3RzIG9mIG9uZSB0eXBlIHRvIGJlIGluamVjdGVkIHdpdGggYSByZWZlcmVuY2UgdG8gYW5vdGhl
cgotICAgICAgICAgICAgICAgICAgICBvYmplY3QuCi0KLSAgICAgICAgICAgICAgICAgICAgRm9y
IGV4YW1wbGUsIHByb3ZpZGVkIGVhY2ggb2JqZWN0IG9mIHR5cGUgYGNvbnRyb2xsZXJgIG5lZWRl
ZCBhIGByb3V0ZXJgLgotICAgICAgICAgICAgICAgICAgICBvbmUgd291bGQgZG8gdGhlIGZvbGxv
d2luZzoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdyb3V0ZXI6bWFpbicsIFJvdXRlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignY29udHJvbGxlcjp1c2VyJywgVXNlckNv
bnRyb2xsZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2NvbnRy
b2xsZXI6cG9zdCcsIFBvc3RDb250cm9sbGVyKTsKLQotICAgICAgICAgICAgICAgICAgICBjb250
YWluZXIudHlwZUluamVjdGlvbignY29udHJvbGxlcicsICdyb3V0ZXInLCAncm91dGVyOm1haW4n
KTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgdXNlciA9IGNvbnRhaW5lci5sb29rdXAoJ2Nv
bnRyb2xsZXI6dXNlcicpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcG9zdCA9IGNvbnRhaW5l
ci5sb29rdXAoJ2NvbnRyb2xsZXI6cG9zdCcpOwotCi0gICAgICAgICAgICAgICAgICAgIHVzZXIu
cm91dGVyIGluc3RhbmNlb2YgUm91dGVyOyAvLz0+IHRydWUKLSAgICAgICAgICAgICAgICAgICAg
cG9zdC5yb3V0ZXIgaW5zdGFuY2VvZiBSb3V0ZXI7IC8vPT4gdHJ1ZQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGJvdGggY29udHJvbGxlcnMgc2hhcmUgdGhlIHNhbWUgcm91dGVyCi0gICAgICAg
ICAgICAgICAgICAgIHVzZXIucm91dGVyID09PSBwb3N0LnJvdXRlcjsgLy89PiB0cnVlCi0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgdHlwZUluamVjdGlvbgotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1l
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHlwZUluamVjdGlvbjogZnVuY3Rp
b24odHlwZSwgcHJvcGVydHksIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCdmdWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHZhbGlkYXRlRnVsbE5h
bWUoZnVsbE5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWxsZWdhbENoaWxkT3BlcmF0aW9uKCd0eXBlSW5qZWN0aW9uJyk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGZ1bGxOYW1lVHlwZSA9IGZ1
bGxOYW1lLnNwbGl0KCc6JylbMF07Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bGxOYW1lVHlwZSA9
PT0gdHlwZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBp
bmplY3QgYSBgJyArIGZ1bGxOYW1lICsgJ2Agb24gb3RoZXIgJyArIHR5cGUgKyAnKHMpLiBSZWdp
c3RlciB0aGUgYCcgKyBmdWxsTmFtZSArICdgIGFzIGEgZGlmZmVyZW50IHR5cGUgYW5kIHBlcmZv
cm0gdGhlIHR5cGVJbmplY3Rpb24uJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFkZFR5cGVJbmplY3Rpb24odGhpcy50eXBlSW5qZWN0aW9ucywgdHlwZSwgcHJvcGVydHks
IGZ1bGxOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBEZWZpbmVzIGluamVjdGlvbiBydWxlcy4KLQotICAgICAgICAgICAgICAgICAg
ICBUaGVzZSBydWxlcyBhcmUgdXNlZCB0byBpbmplY3QgZGVwZW5kZW5jaWVzIG9udG8gb2JqZWN0
cyB3aGVuIHRoZXkKLSAgICAgICAgICAgICAgICAgICAgYXJlIGluc3RhbnRpYXRlZC4KLQotICAg
ICAgICAgICAgICAgICAgICBUd28gZm9ybXMgb2YgaW5qZWN0aW9ucyBhcmUgcG9zc2libGU6Ci0K
LSAgICAgICAgICAgICAgICAgICAgKiBJbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGFub3RoZXIg
ZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICAgKiBJbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9u
IGEgdHlwZQotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0g
bmV3IENvbnRhaW5lcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rl
cignc291cmNlOm1haW4nLCBTb3VyY2UpOwotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIu
cmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyLnJlZ2lzdGVyKCdtb2RlbDpwb3N0JywgUG9zdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90aGVyIGZ1bGxOYW1lCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGVnLiBlYWNoIHVzZXIgbW9kZWwgZ2V0cyBhIHBvc3QgbW9kZWwKLSAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbignbW9kZWw6dXNlcicsICdwb3N0Jywg
J21vZGVsOnBvc3QnKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBpbmplY3Rpbmcgb25lIGZ1
bGxOYW1lIG9uIGFub3RoZXIgdHlwZQotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaW5q
ZWN0aW9uKCdtb2RlbCcsICdzb3VyY2UnLCAnc291cmNlOm1haW4nKTsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgdXNlciA9IGNvbnRhaW5lci5sb29rdXAoJ21vZGVsOnVzZXInKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIHBvc3QgPSBjb250YWluZXIubG9va3VwKCdtb2RlbDpwb3N0Jyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdXNlci5zb3VyY2UgaW5zdGFuY2VvZiBTb3VyY2U7IC8v
PT4gdHJ1ZQotICAgICAgICAgICAgICAgICAgICBwb3N0LnNvdXJjZSBpbnN0YW5jZW9mIFNvdXJj
ZTsgLy89PiB0cnVlCi0KLSAgICAgICAgICAgICAgICAgICAgdXNlci5wb3N0IGluc3RhbmNlb2Yg
UG9zdDsgLy89PiB0cnVlCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGJvdGggbW9kZWxz
IHNoYXJlIHRoZSBzYW1lIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICB1c2VyLnNvdXJjZSA9
PT0gcG9zdC5zb3VyY2U7IC8vPT4gdHJ1ZQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGluamVjdGlvbgotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gZmFjdG9yeU5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBpbmpl
Y3Rpb25OYW1lCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5qZWN0aW9uOiBm
dW5jdGlvbihmdWxsTmFtZSwgcHJvcGVydHksIGluamVjdGlvbk5hbWUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWxsZWdhbENoaWxk
T3BlcmF0aW9uKCdpbmplY3Rpb24nKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YWxpZGF0ZUZ1bGxOYW1lKGluamVjdGlvbk5hbWUpOwotICAgICAgICAgICAgICAgIHZh
ciBub3JtYWxpemVkSW5qZWN0aW9uTmFtZSA9IHRoaXMubm9ybWFsaXplKGluamVjdGlvbk5hbWUp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGZ1bGxOYW1lLmluZGV4T2YoJzonKSA9PT0gLTEpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZUluamVjdGlvbihmdWxsTmFtZSwg
cHJvcGVydHksIG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIg
ZnVsbCBuYW1lJywgdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkpOwotICAgICAgICAgICAgICAg
IHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKTsKLQotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmNhY2hlLmhhcyhub3JtYWxpemVkTmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gcmVnaXN0ZXIgYW4gaW5q
ZWN0aW9uIGZvciBhIHR5cGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGxvb2tlZCB1cC4gKCciICsg
bm9ybWFsaXplZE5hbWUgKyAiJywgJyIgKyBwcm9wZXJ0eSArICInLCAnIiArIGluamVjdGlvbk5h
bWUgKyAiJykiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWRkSW5qZWN0
aW9uKHRoaXMuaW5qZWN0aW9ucywgbm9ybWFsaXplZE5hbWUsIHByb3BlcnR5LCBub3JtYWxpemVk
SW5qZWN0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBVc2VkIG9ubHkgdmlhIGBmYWN0b3J5SW5qZWN0aW9uYC4KLQotICAg
ICAgICAgICAgICAgICAgICBQcm92aWRlcyBhIHNwZWNpYWxpemVkIGZvcm0gb2YgaW5qZWN0aW9u
LCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcKLSAgICAgICAgICAgICAgICAgICAgYWxsIGZhY3Rvcnkg
b2Ygb25lIHR5cGUgdG8gYmUgaW5qZWN0ZWQgd2l0aCBhIHJlZmVyZW5jZSB0byBhbm90aGVyCi0g
ICAgICAgICAgICAgICAgICAgIG9iamVjdC4KLQotICAgICAgICAgICAgICAgICAgICBGb3IgZXhh
bXBsZSwgcHJvdmlkZWQgZWFjaCBmYWN0b3J5IG9mIHR5cGUgYG1vZGVsYCBuZWVkZWQgYSBgc3Rv
cmVgLgotICAgICAgICAgICAgICAgICAgICBvbmUgd291bGQgZG8gdGhlIGZvbGxvd2luZzoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmVyLnJlZ2lzdGVyKCdzdG9yZTptYWluJywgU29tZVN0b3JlKTsKLQotICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXIuZmFjdG9yeVR5cGVJbmplY3Rpb24oJ21vZGVsJywgJ3N0b3JlJywg
J3N0b3JlOm1haW4nKTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBjb250YWlu
ZXIubG9va3VwKCdzdG9yZTptYWluJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBVc2VyRmFj
dG9yeSA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2RlbDp1c2VyJyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgVXNlckZhY3Rvcnkuc3RvcmUgaW5zdGFuY2VvZiBTb21lU3RvcmU7IC8vPT4g
dHJ1ZQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZhY3RvcnlUeXBlSW5qZWN0aW9uCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZ30gZnVsbE5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmYWN0
b3J5VHlwZUluamVjdGlvbjogZnVuY3Rpb24odHlwZSwgcHJvcGVydHksIGZ1bGxOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGls
bGVnYWxDaGlsZE9wZXJhdGlvbignZmFjdG9yeVR5cGVJbmplY3Rpb24nKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhZGRUeXBlSW5qZWN0aW9uKHRoaXMuZmFjdG9yeVR5
cGVJbmplY3Rpb25zLCB0eXBlLCBwcm9wZXJ0eSwgdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBE
ZWZpbmVzIGZhY3RvcnkgaW5qZWN0aW9uIHJ1bGVzLgotCi0gICAgICAgICAgICAgICAgICAgIFNp
bWlsYXIgdG8gcmVndWxhciBpbmplY3Rpb24gcnVsZXMsIGJ1dCBhcmUgcnVuIGFnYWluc3QgZmFj
dG9yaWVzLCB2aWEKLSAgICAgICAgICAgICAgICAgICAgYENvbnRhaW5lciNsb29rdXBGYWN0b3J5
YC4KLQotICAgICAgICAgICAgICAgICAgICBUaGVzZSBydWxlcyBhcmUgdXNlZCB0byBpbmplY3Qg
b2JqZWN0cyBvbnRvIGZhY3RvcmllcyB3aGVuIHRoZXkKLSAgICAgICAgICAgICAgICAgICAgYXJl
IGxvb2tlZCB1cC4KLQotICAgICAgICAgICAgICAgICAgICBUd28gZm9ybXMgb2YgaW5qZWN0aW9u
cyBhcmUgcG9zc2libGU6Ci0KLSAgICAgICAgICAgICAgICAgICogSW5qZWN0aW5nIG9uZSBmdWxs
TmFtZSBvbiBhbm90aGVyIGZ1bGxOYW1lCi0gICAgICAgICAgICAgICAgICAqIEluamVjdGluZyBv
bmUgZnVsbE5hbWUgb24gYSB0eXBlCi0KLSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZToKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBjb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmVyLnJlZ2lzdGVyKCdzdG9yZTptYWluJywgU3RvcmUpOwotICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXIucmVnaXN0ZXIoJ3N0b3JlOnNlY29uZGFyeScsIE90aGVyU3RvcmUpOwotICAg
ICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsK
LSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdtb2RlbDpwb3N0JywgUG9z
dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBh
bm90aGVyIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmZhY3RvcnlJbmplY3Rp
b24oJ21vZGVsJywgJ3N0b3JlJywgJ3N0b3JlOm1haW4nKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBpbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGFub3RoZXIgZnVsbE5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyLmZhY3RvcnlJbmplY3Rpb24oJ21vZGVsOnBvc3QnLCAnc2Vj
b25kYXJ5U3RvcmUnLCAnc3RvcmU6c2Vjb25kYXJ5Jyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
dmFyIFVzZXJGYWN0b3J5ID0gY29udGFpbmVyLmxvb2t1cEZhY3RvcnkoJ21vZGVsOnVzZXInKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIFBvc3RGYWN0b3J5ID0gY29udGFpbmVyLmxvb2t1cEZh
Y3RvcnkoJ21vZGVsOnBvc3QnKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gY29u
dGFpbmVyLmxvb2t1cCgnc3RvcmU6bWFpbicpOwotCi0gICAgICAgICAgICAgICAgICAgIFVzZXJG
YWN0b3J5LnN0b3JlIGluc3RhbmNlb2YgU3RvcmU7IC8vPT4gdHJ1ZQotICAgICAgICAgICAgICAg
ICAgICBVc2VyRmFjdG9yeS5zZWNvbmRhcnlTdG9yZSBpbnN0YW5jZW9mIE90aGVyU3RvcmU7IC8v
PT4gZmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBQb3N0RmFjdG9yeS5zdG9yZSBpbnN0YW5j
ZW9mIFN0b3JlOyAvLz0+IHRydWUKLSAgICAgICAgICAgICAgICAgICAgUG9zdEZhY3Rvcnkuc2Vj
b25kYXJ5U3RvcmUgaW5zdGFuY2VvZiBPdGhlclN0b3JlOyAvLz0+IHRydWUKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBhbmQgYm90aCBtb2RlbHMgc2hhcmUgdGhlIHNhbWUgc291cmNlIGluc3Rh
bmNlCi0gICAgICAgICAgICAgICAgICAgIFVzZXJGYWN0b3J5LnN0b3JlID09PSBQb3N0RmFjdG9y
eS5zdG9yZTsgLy89PiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgZmFjdG9yeUluamVjdGlvbgotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gZmFjdG9yeU5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBpbmpl
Y3Rpb25OYW1lCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZmFjdG9yeUluamVj
dGlvbjogZnVuY3Rpb24oZnVsbE5hbWUsIHByb3BlcnR5LCBpbmplY3Rpb25OYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlsbGVn
YWxDaGlsZE9wZXJhdGlvbignaW5qZWN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUp
OwotICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkSW5qZWN0aW9uTmFtZSA9IHRoaXMubm9y
bWFsaXplKGluamVjdGlvbk5hbWUpOwotCi0gICAgICAgICAgICAgICAgdmFsaWRhdGVGdWxsTmFt
ZShpbmplY3Rpb25OYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChmdWxsTmFtZS5pbmRleE9m
KCc6JykgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhY3RvcnlU
eXBlSW5qZWN0aW9uKG5vcm1hbGl6ZWROYW1lLCBwcm9wZXJ0eSwgbm9ybWFsaXplZEluamVjdGlv
bk5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB2YWxpZGF0ZUZ1bGxOYW1l
KGZ1bGxOYW1lKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5mYWN0b3J5Q2FjaGUuaGFz
KG5vcm1hbGl6ZWROYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0F0dGVtcHRlZCB0byByZWdpc3RlciBhIGZhY3RvcnlJbmplY3Rpb24gZm9yIGEgdHlwZSB0aGF0
IGhhcyBhbHJlYWR5ICcgKwotICAgICAgICAgICAgICAgICAgICAnYmVlbiBsb29rZWQgdXAuIChc
JycgKyBub3JtYWxpemVkTmFtZSArICdcJywgXCcnICsgcHJvcGVydHkgKyAnXCcsIFwnJyArIGlu
amVjdGlvbk5hbWUgKyAnXCcpJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgYWRkSW5qZWN0aW9uKHRoaXMuZmFjdG9yeUluamVjdGlvbnMsIG5vcm1hbGl6ZWROYW1lLCBw
cm9wZXJ0eSwgbm9ybWFsaXplZEluamVjdGlvbk5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEEgZGVwdGggZmlyc3QgdHJhdmVyc2Fs
LCBkZXN0cm95aW5nIHRoZSBjb250YWluZXIsIGl0cyBkZXNjZW5kYW50IGNvbnRhaW5lcnMgYW5k
IGFsbAotICAgICAgICAgICAgICAgICAgICB0aGVpciBtYW5hZ2VkIG9iamVjdHMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kZXN0cm95KCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotCi0gICAg
ICAgICAgICAgICAgZWFjaERlc3Ryb3lhYmxlKHRoaXMsIGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaXRlbS5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB0
aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc2V0Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0Q2FjaGUodGhpcy5jaGlsZHJlbltpXSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVzZXRDYWNoZSh0aGlzKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiByZXNvbHZlKGNvbnRh
aW5lciwgbm9ybWFsaXplZE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBjYWNoZWQgPSBjb250YWlu
ZXIucmVzb2x2ZUNhY2hlLmdldChub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAgICBpZiAoY2Fj
aGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gY29udGFpbmVyLnJlc29sdmVyKG5vcm1hbGl6ZWRO
YW1lKSB8fCBjb250YWluZXIucmVnaXN0cnkuZ2V0KG5vcm1hbGl6ZWROYW1lKTsKLSAgICAgICAg
ICAgIGNvbnRhaW5lci5yZXNvbHZlQ2FjaGUuc2V0KG5vcm1hbGl6ZWROYW1lLCByZXNvbHZlZCk7
Ci0KLSAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGhhcyhjb250YWluZXIsIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICBpZiAoY29udGFp
bmVyLmNhY2hlLmhhcyhmdWxsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuICEhY29udGFpbmVyLnJlc29sdmUo
ZnVsbE5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbG9va3VwKGNvbnRhaW5l
ciwgZnVsbE5hbWUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OwotCi0gICAgICAgICAgICBpZiAoY29udGFpbmVyLmNhY2hlLmhhcyhmdWxsTmFtZSkgJiYg
b3B0aW9ucy5zaW5nbGV0b24gIT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnRhaW5lci5jYWNoZS5nZXQoZnVsbE5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgdmFsdWUgPSBpbnN0YW50aWF0ZShjb250YWluZXIsIGZ1bGxOYW1lKTsKLQotICAgICAg
ICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc1NpbmdsZXRvbihjb250YWluZXIs
IGZ1bGxOYW1lKSAmJiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gZmFsc2UpIHsKLSAgICAgICAgICAg
ICAgICBjb250YWluZXIuY2FjaGUuc2V0KGZ1bGxOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGlsbGVnYWxDaGlsZE9wZXJhdGlvbihvcGVyYXRpb24pIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcihvcGVyYXRpb24gKyAnIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIGNo
aWxkIGNvbnRhaW5lcnMnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGlzU2luZ2xl
dG9uKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBzaW5nbGV0b24gPSBv
cHRpb24oY29udGFpbmVyLCBmdWxsTmFtZSwgJ3NpbmdsZXRvbicpOwotCi0gICAgICAgICAgICBy
ZXR1cm4gc2luZ2xldG9uICE9PSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9u
IGJ1aWxkSW5qZWN0aW9ucyhjb250YWluZXIsIGluamVjdGlvbnMpIHsKLSAgICAgICAgICAgIHZh
ciBoYXNoID0ge307Ci0KLSAgICAgICAgICAgIGlmICghaW5qZWN0aW9ucykgewotICAgICAgICAg
ICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgaW5q
ZWN0aW9uLCBpbmplY3RhYmxlOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3Ro
ID0gaW5qZWN0aW9ucy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IGluamVjdGlvbiA9IGluamVjdGlvbnNbaV07Ci0gICAgICAgICAgICAgICAgaW5qZWN0YWJsZSA9
IGxvb2t1cChjb250YWluZXIsIGluamVjdGlvbi5mdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoaW5qZWN0YWJsZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhh
c2hbaW5qZWN0aW9uLnByb3BlcnR5XSA9IGluamVjdGFibGU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRv
IGluamVjdCBhbiB1bmtub3duIGluamVjdGlvbjogYCcgKyBpbmplY3Rpb24uZnVsbE5hbWUgKyAn
YCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIGhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBvcHRpb24oY29udGFpbmVy
LCBmdWxsTmFtZSwgb3B0aW9uTmFtZSkgewotICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBjb250
YWluZXIuX29wdGlvbnMuZ2V0KGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMg
JiYgb3B0aW9uc1tvcHRpb25OYW1lXSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG9wdGlvbnNbb3B0aW9uTmFtZV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZhciB0eXBlID0gZnVsbE5hbWUuc3BsaXQoJzonKVswXTsKLSAgICAgICAgICAgIG9wdGlvbnMg
PSBjb250YWluZXIuX3R5cGVPcHRpb25zLmdldCh0eXBlKTsKLQotICAgICAgICAgICAgaWYgKG9w
dGlvbnMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25OYW1lXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZhY3RvcnlGb3IoY29u
dGFpbmVyLCBmdWxsTmFtZSkgewotICAgICAgICAgICAgdmFyIGNhY2hlID0gY29udGFpbmVyLmZh
Y3RvcnlDYWNoZTsKLSAgICAgICAgICAgIGlmIChjYWNoZS5oYXMoZnVsbE5hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChmdWxsTmFtZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB2YXIgZmFjdG9yeSA9IGNvbnRhaW5lci5yZXNvbHZlKGZ1bGxOYW1lKTsKLSAg
ICAgICAgICAgIGlmIChmYWN0b3J5ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0eXBlID0gZnVsbE5hbWUu
c3BsaXQoJzonKVswXTsKLSAgICAgICAgICAgIGlmICghZmFjdG9yeSB8fCB0eXBlb2YgZmFjdG9y
eS5leHRlbmQgIT09ICdmdW5jdGlvbicgfHwgKCFFbWJlci5NT0RFTF9GQUNUT1JZX0lOSkVDVElP
TlMgJiYgdHlwZSA9PT0gJ21vZGVsJykpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiB0aGlu
ayBhYm91dCBhICdzYWZlJyBtZXJnZSBzdHlsZSBleHRlbnNpb24KLSAgICAgICAgICAgICAgICAv
LyBmb3Igbm93IGp1c3QgZmFsbGJhY2sgdG8gY3JlYXRlIHRpbWUgaW5qZWN0aW9uCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhY3Rvcnk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHZhciBpbmplY3Rpb25zID0gaW5qZWN0aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1l
KTsKLSAgICAgICAgICAgICAgICB2YXIgZmFjdG9yeUluamVjdGlvbnMgPSBmYWN0b3J5SW5qZWN0
aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgICAgIGZhY3RvcnlJ
bmplY3Rpb25zLl90b1N0cmluZyA9IGNvbnRhaW5lci5tYWtlVG9TdHJpbmcoZmFjdG9yeSwgZnVs
bE5hbWUpOwotCi0gICAgICAgICAgICAgICAgdmFyIGluamVjdGVkRmFjdG9yeSA9IGZhY3Rvcnku
ZXh0ZW5kKGluamVjdGlvbnMpOwotICAgICAgICAgICAgICAgIGluamVjdGVkRmFjdG9yeS5yZW9w
ZW5DbGFzcyhmYWN0b3J5SW5qZWN0aW9ucyk7Ci0KLSAgICAgICAgICAgICAgICBjYWNoZS5zZXQo
ZnVsbE5hbWUsIGluamVjdGVkRmFjdG9yeSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW5q
ZWN0ZWRGYWN0b3J5OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gaW5qZWN0aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1lKSB7Ci0gICAgICAgICAgICB2YXIg
c3BsaXROYW1lID0gZnVsbE5hbWUuc3BsaXQoJzonKSwKLSAgICAgICAgICAgIHR5cGUgPSBzcGxp
dE5hbWVbMF0sCi0gICAgICAgICAgICBpbmplY3Rpb25zID0gW107Ci0KLSAgICAgICAgICAgIGlu
amVjdGlvbnMgPSBpbmplY3Rpb25zLmNvbmNhdChjb250YWluZXIudHlwZUluamVjdGlvbnMuZ2V0
KHR5cGUpIHx8IFtdKTsKLSAgICAgICAgICAgIGluamVjdGlvbnMgPSBpbmplY3Rpb25zLmNvbmNh
dChjb250YWluZXIuaW5qZWN0aW9uc1tmdWxsTmFtZV0gfHwgW10pOwotCi0gICAgICAgICAgICBp
bmplY3Rpb25zID0gYnVpbGRJbmplY3Rpb25zKGNvbnRhaW5lciwgaW5qZWN0aW9ucyk7Ci0gICAg
ICAgICAgICBpbmplY3Rpb25zLl9kZWJ1Z0NvbnRhaW5lcktleSA9IGZ1bGxOYW1lOwotICAgICAg
ICAgICAgaW5qZWN0aW9ucy5jb250YWluZXIgPSBjb250YWluZXI7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBpbmplY3Rpb25zOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmFjdG9yeUlu
amVjdGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFtZSkgewotICAgICAgICAgICAgdmFyIHNwbGl0
TmFtZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JyksCi0gICAgICAgICAgICB0eXBlID0gc3BsaXROYW1l
WzBdLAotICAgICAgICAgICAgZmFjdG9yeUluamVjdGlvbnMgPSBbXTsKLQotICAgICAgICAgICAg
ZmFjdG9yeUluamVjdGlvbnMgPSBmYWN0b3J5SW5qZWN0aW9ucy5jb25jYXQoY29udGFpbmVyLmZh
Y3RvcnlUeXBlSW5qZWN0aW9ucy5nZXQodHlwZSkgfHwgW10pOwotICAgICAgICAgICAgZmFjdG9y
eUluamVjdGlvbnMgPSBmYWN0b3J5SW5qZWN0aW9ucy5jb25jYXQoY29udGFpbmVyLmZhY3RvcnlJ
bmplY3Rpb25zW2Z1bGxOYW1lXSB8fCBbXSk7Ci0KLSAgICAgICAgICAgIGZhY3RvcnlJbmplY3Rp
b25zID0gYnVpbGRJbmplY3Rpb25zKGNvbnRhaW5lciwgZmFjdG9yeUluamVjdGlvbnMpOwotICAg
ICAgICAgICAgZmFjdG9yeUluamVjdGlvbnMuX2RlYnVnQ29udGFpbmVyS2V5ID0gZnVsbE5hbWU7
Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWN0b3J5SW5qZWN0aW9uczsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsKLSAgICAg
ICAgICAgIHZhciBmYWN0b3J5ID0gZmFjdG9yeUZvcihjb250YWluZXIsIGZ1bGxOYW1lKTsKLQot
ICAgICAgICAgICAgaWYgKG9wdGlvbihjb250YWluZXIsIGZ1bGxOYW1lLCAnaW5zdGFudGlhdGUn
KSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGZhY3RvcnkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIGZhY3RvcnkuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBcJycg
KyBmdWxsTmFtZSArICdcJy4gJyArCi0gICAgICAgICAgICAgICAgICAgICdNb3N0IGxpa2VseSBh
biBpbXByb3Blcmx5IGRlZmluZWQgY2xhc3Mgb3IgYW4gaW52YWxpZCBtb2R1bGUgZXhwb3J0Licp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmFjdG9y
eS5leHRlbmQgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1l
IHRoZSBmYWN0b3J5IHdhcyBleHRlbmRhYmxlIGFuZCBpcyBhbHJlYWR5IGluamVjdGVkCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5LmNyZWF0ZSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGUgZmFjdG9yeSB3YXMg
ZXh0ZW5kYWJsZQotICAgICAgICAgICAgICAgICAgICAvLyB0byBjcmVhdGUgdGltZSBpbmplY3Rp
b25zCi0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgbmV3J2luZyBmb3IgaW5z
dGFudGlhdGlvbiBhbmQgbWVyZ2UgaW5qZWN0aW9ucyBmb3IgcHVyZSBKUyBGdW5jdGlvbnMKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKGluamVjdGlvbnNGb3IoY29u
dGFpbmVyLCBmdWxsTmFtZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGVhY2hEZXN0cm95YWJsZShjb250YWluZXIsIGNh
bGxiYWNrKSB7Ci0gICAgICAgICAgICBjb250YWluZXIuY2FjaGUuZWFjaExvY2FsKGZ1bmN0aW9u
KGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9uKGNvbnRhaW5lciwga2V5
LCAnaW5zdGFudGlhdGUnKSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJlc2V0Q2FjaGUo
Y29udGFpbmVyKSB7Ci0gICAgICAgICAgICBjb250YWluZXIuY2FjaGUuZWFjaExvY2FsKGZ1bmN0
aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9uKGNvbnRhaW5lciwg
a2V5LCAnaW5zdGFudGlhdGUnKSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YWx1ZS5kZXN0cm95KCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbnRhaW5lci5jYWNoZS5kaWN0ID0ge307
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhZGRUeXBlSW5qZWN0aW9uKHJ1bGVzLCB0
eXBlLCBwcm9wZXJ0eSwgZnVsbE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBpbmplY3Rpb25zID0g
cnVsZXMuZ2V0KHR5cGUpOwotCi0gICAgICAgICAgICBpZiAoIWluamVjdGlvbnMpIHsKLSAgICAg
ICAgICAgICAgICBpbmplY3Rpb25zID0gW107Ci0gICAgICAgICAgICAgICAgcnVsZXMuc2V0KHR5
cGUsIGluamVjdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmplY3Rpb25z
LnB1c2goewotICAgICAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSwKLSAgICAgICAgICAg
ICAgICBmdWxsTmFtZTogZnVsbE5hbWUKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIFZBTElEX0ZVTExfTkFNRV9SRUdFWFAgPSAvXlteOl0rLis6W146XSskLzsKLSAg
ICAgICAgZnVuY3Rpb24gdmFsaWRhdGVGdWxsTmFtZShmdWxsTmFtZSkgewotICAgICAgICAgICAg
aWYgKCFWQUxJRF9GVUxMX05BTUVfUkVHRVhQLnRlc3QoZnVsbE5hbWUpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBGdWxsbmFtZSwgZXhwZWN0ZWQ6IGB0
eXBlOm5hbWVgIGdvdDogJyArIGZ1bGxOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRkSW5qZWN0aW9u
KHJ1bGVzLCBmYWN0b3J5TmFtZSwgcHJvcGVydHksIGluamVjdGlvbk5hbWUpIHsKLSAgICAgICAg
ICAgIHZhciBpbmplY3Rpb25zID0gcnVsZXNbZmFjdG9yeU5hbWVdID0gcnVsZXNbZmFjdG9yeU5h
bWVdIHx8IFtdOwotICAgICAgICAgICAgaW5qZWN0aW9ucy5wdXNoKHsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eTogcHJvcGVydHksCi0gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGluamVjdGlv
bk5hbWUgCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBDb250YWluZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJjb250YWluZXIv
aW5oZXJpdGluZ19kaWN0IiwKLSAgICBbImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8vIEEgc2FmZSBhbmQgc2lt
cGxlIGluaGVyaXRpbmcgb2JqZWN0LgotICAgICAgICBmdW5jdGlvbiBJbmhlcml0aW5nRGljdChw
YXJlbnQpIHsKLSAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgICAgICAgICAg
dGhpcy5kaWN0ID0ge307Ci0gICAgICAgIH0KLQotICAgICAgICBJbmhlcml0aW5nRGljdC5wcm90
b3R5cGUgPSB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAg
ICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0KLSAg
ICAgICAgICAgIHBhcmVudDogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIE9iamVjdCB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IG5vZGVzIGRhdGEuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGRpY3QKLSAgICAgICAgICAgICAgICAgICAgQHR5
cGUgT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IE9iamVjdAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGRpY3Q6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZXRyaWV2ZSB0aGUgdmFsdWUgZ2l2ZW4gYSBrZXksIGlmIHRo
ZSB2YWx1ZSBpcyBwcmVzZW50IGF0IHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgIGxl
dmVsIHVzZSBpdCwgb3RoZXJ3aXNlIHdhbGsgdXAgdGhlIHBhcmVudCBoaWVyYXJjaHkgYW5kIHRy
eSBhZ2Fpbi4gSWYKLSAgICAgICAgICAgICAgICAgICAgbm8gbWF0Y2hpbmcga2V5IGlzIGZvdW5k
LCByZXR1cm4gdW5kZWZpbmVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0Ci0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7YW55fQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpY3QgPSB0aGlzLmRpY3Q7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkaWN0W2tleV07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnBhcmVudC5nZXQoa2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBnaXZlbiB2
YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSwgYXQgdGhlIGN1cnJlbnQgbGV2ZWwuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBzZXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGtleQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0FueX0gdmFsdWUKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLmRpY3Rba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIERlbGV0ZSB0aGUgZ2l2ZW4ga2V5
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmUKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGtleQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGlj
dFtrZXldOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIENoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGdpdmVuIGEga2V5LCBpZiB0aGUga2V5
IGlzIHByZXNlbnQgYXQgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgbGV2ZWwgcmV0
dXJuIHRydWUsIG90aGVyd2lzZSB3YWxrIHVwIHRoZSBwYXJlbnQgaGllcmFyY2h5IGFuZCB0cnkg
YWdhaW4uIElmCi0gICAgICAgICAgICAgICAgICAgIG5vIG1hdGNoaW5nIGtleSBpcyBmb3VuZCwg
cmV0dXJuIGZhbHNlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaGFzCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoYXM6IGZ1
bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gdGhpcy5kaWN0OwotCi0g
ICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cGFyZW50LmhhcyhrZXkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBJdGVyYXRlIGFuZCBpbnZva2UgYSBjYWxsYmFjayBmb3IgZWFjaCBsb2NhbCBr
ZXktdmFsdWUgcGFpci4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGVhY2hMb2NhbAot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gYmluZGluZwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGVhY2hMb2NhbDogZnVuY3Rpb24oY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZGljdCA9IHRoaXMuZGljdDsKLQotICAgICAgICAgICAgICAgIGZv
ciAodmFyIHByb3AgaW4gZGljdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXNP
d25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2Fs
bChiaW5kaW5nLCBwcm9wLCBkaWN0W3Byb3BdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gSW5oZXJpdGluZ0RpY3Q7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci1hcHBsaWNhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLXJ1
bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZGFnIiwg
ImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsICJlbWJlci1hcHBsaWNhdGlvbi9z
eXN0ZW0vYXBwbGljYXRpb24iLCAiZW1iZXItYXBwbGljYXRpb24vZXh0L2NvbnRyb2xsZXIiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRl
bmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBydW5Mb2FkSG9va3MgPSBfX2RlcGVuZGVu
Y3kyX18ucnVuTG9hZEhvb2tzOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgRW1iZXIgQXBw
bGljYXRpb24KLQotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1v
ZHVsZSBlbWJlci1hcHBsaWNhdGlvbgotICAgICAgICAgICAgQHJlcXVpcmVzIGVtYmVyLXZpZXdz
LCBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBEQUcgPSBfX2Rl
cGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJlc29sdmVyID0gX19kZXBlbmRl
bmN5NF9fLlJlc29sdmVyOwotICAgICAgICB2YXIgRGVmYXVsdFJlc29sdmVyID0gX19kZXBlbmRl
bmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBBcHBsaWNhdGlvbiA9IF9fZGVwZW5kZW5j
eTVfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBzaWRlIGVmZmVjdCBvZiBleHRlbmRpbmcgQ29u
dHJvbGxlck1peGluCi0KLSAgICAgICAgRW1iZXIuQXBwbGljYXRpb24gPSBBcHBsaWNhdGlvbjsK
LSAgICAgICAgRW1iZXIuREFHID0gREFHOwotICAgICAgICBFbWJlci5SZXNvbHZlciA9IFJlc29s
dmVyOwotICAgICAgICBFbWJlci5EZWZhdWx0UmVzb2x2ZXIgPSBEZWZhdWx0UmVzb2x2ZXI7Ci0K
LSAgICAgICAgcnVuTG9hZEhvb2tzKCdFbWJlci5BcHBsaWNhdGlvbicsIEFwcGxpY2F0aW9uKTsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWFwcGxpY2F0aW9uL2V4dC9jb250cm9sbGVyIiwK
LSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVt
YmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRh
bC91dGlscyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1ydW50aW1lL21peGlucy9j
b250cm9sbGVyIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL2NvbnRyb2xsZXJfZm9yIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRl
bmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUg
ZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5
Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAg
IHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBpbnNwZWN0ID0gX19kZXBlbmRlbmN5NV9fLmluc3BlY3Q7Ci0gICAgICAgIHZhciBjb21wdXRl
ZCA9IF9fZGVwZW5kZW5jeTZfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIENvbnRyb2xsZXJNaXhp
biA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVw
ZW5kZW5jeTVfXy5tZXRhOwotICAgICAgICB2YXIgY29udHJvbGxlckZvciA9IF9fZGVwZW5kZW5j
eThfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIGZ1bmN0aW9uIHZlcmlmeU5lZWRzRGVwZW5kZW5j
aWVzKGNvbnRyb2xsZXIsIGNvbnRhaW5lciwgbmVlZHMpIHsKLSAgICAgICAgICAgIHZhciBkZXBl
bmRlbmN5LCBpLCBsLCBtaXNzaW5nID0gW107Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGwg
PSBuZWVkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBkZXBlbmRlbmN5
ID0gbmVlZHNbaV07Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoaW5zcGVjdChjb250
cm9sbGVyKSArICIjbmVlZHMgbXVzdCBub3Qgc3BlY2lmeSBkZXBlbmRlbmNpZXMgd2l0aCBwZXJp
b2RzIGluIHRoZWlyIG5hbWVzICgiICsgZGVwZW5kZW5jeSArICIpIiwgZGVwZW5kZW5jeS5pbmRl
eE9mKCcuJykgPT09IC0xKTsKLQotICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmluZGV4
T2YoJzonKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9ICJjb250
cm9sbGVyOiIgKyBkZXBlbmRlbmN5OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIFN0cnVjdHVyZSBhc3NlcnQgdG8gc3RpbGwgZG8gdmVyaWZpY2F0aW9uIGJ1dCBub3Qg
c3RyaW5nIGNvbmNhdCBpbiBwcm9kdWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCFjb250YWlu
ZXIuaGFzKGRlcGVuZGVuY3kpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaChk
ZXBlbmRlbmN5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobWlzc2luZy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJF
cnJvcihpbnNwZWN0KGNvbnRyb2xsZXIpICsgIiBuZWVkcyBbICIgKyBtaXNzaW5nLmpvaW4oJywg
JykgKyAiIF0gYnV0ICIgKyAobWlzc2luZy5sZW5ndGggPiAxID8gJ3RoZXknIDogJ2l0JykgKyAi
IGNvdWxkIG5vdCBiZSBmb3VuZCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIGRlZmF1bHRDb250cm9sbGVyc0NvbXB1dGVkUHJvcGVydHkgPSBjb21wdXRlZChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdGhpczsKLQotICAgICAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBuZWVkczogZ2V0KGNvbnRyb2xsZXIsICduZWVk
cycpLAotICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogZ2V0KGNvbnRyb2xsZXIsICdjb250YWlu
ZXInKSwKLSAgICAgICAgICAgICAgICB1bmtub3duUHJvcGVydHk6IGZ1bmN0aW9uKGNvbnRyb2xs
ZXJOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuZWVkcyA9IHRoaXMubmVlZHMsCi0g
ICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3ksIGksIGw7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoaSA9IDAsIGwgPSBuZWVkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBuZWVkc1tpXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkZXBlbmRlbmN5ID09PSBjb250cm9sbGVyTmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5sb29rdXAoJ2NvbnRyb2xsZXI6JyAr
IGNvbnRyb2xsZXJOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBpbnNw
ZWN0KGNvbnRyb2xsZXIpICsgJyNuZWVkcyBkb2VzIG5vdCBpbmNsdWRlIGAnICsgY29udHJvbGxl
ck5hbWUgKyAnYC4gVG8gYWNjZXNzIHRoZSAnICsgY29udHJvbGxlck5hbWUgKyAnIGNvbnRyb2xs
ZXIgZnJvbSAnICsgaW5zcGVjdChjb250cm9sbGVyKSArICcsICcgKyBpbnNwZWN0KGNvbnRyb2xs
ZXIpICsgJyBzaG91bGQgaGF2ZSBhIGBuZWVkc2AgcHJvcGVydHkgdGhhdCBpcyBhbiBhcnJheSBv
ZiB0aGUgY29udHJvbGxlcnMgaXQgaGFzIGFjY2VzcyB0by4nOwotICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgICAgIHNldFVua25vd25Qcm9wZXJ0eTogZnVuY3Rpb24gKGtleSwg
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgY2Fubm90
IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgYGNvbnRyb2xsZXJzLiIgKyBrZXkgKyAiYCBvZiAiICsg
aW5zcGVjdChjb250cm9sbGVyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBjbGFzcyBDb250cm9s
bGVyTWl4aW4KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgKi8K
LSAgICAgICAgQ29udHJvbGxlck1peGluLnJlb3Blbih7Ci0gICAgICAgICAgICBjb25jYXRlbmF0
ZWRQcm9wZXJ0aWVzOiBbJ25lZWRzJ10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBBbiBhcnJheSBvZiBvdGhlciBjb250cm9sbGVyIG9iamVjdHMgYXZhaWxhYmxlIGlu
c2lkZQotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhpcyBjb250cm9sbGVyIHZp
YSB0aGUgYGNvbnRyb2xsZXJzYAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToKLQotICAg
ICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgZGVmaW5lIGEgY29udHJvbGxl
cjoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAg
ICAgIEFwcC5Db21tZW50c0NvbnRyb2xsZXIgPSBFbWJlci5BcnJheUNvbnRyb2xsZXIuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICAgICAgICBuZWVkczogWydwb3N0J10KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBhcHBsaWNhdGlvbidzIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGVzZSBvdGhlcgotICAgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVycyBhcmUgYWNjZXNzaWJsZSBieSBuYW1lIHRocm91Z2gg
dGhlCi0gICAgICAgICAgICAgICAgICAgIGBjb250cm9sbGVyc2AgcHJvcGVydHk6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB0aGlzLmdl
dCgnY29udHJvbGxlcnMucG9zdCcpOyAvLyBpbnN0YW5jZSBvZiBBcHAuUG9zdENvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgR2l2ZW4gdGhh
dCB5b3UgaGF2ZSBhIG5lc3RlZCBjb250cm9sbGVyIChuZXN0ZWQgcmVzb3VyY2UpOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLkNv
bW1lbnRzTmV3Q29udHJvbGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIFdoZW4geW91IGRlZmluZSBhIGNvbnRyb2xsZXIgdGhhdCByZXF1aXJlcyBh
Y2Nlc3MgdG8gYSBuZXN0ZWQgb25lOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLkluZGV4Q29udHJvbGxlciA9IEVtYmVyLk9iamVj
dENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBuZWVkczogWydjb21t
ZW50c05ldyddCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBiZSBhYmxlIHRvIGdldCBhY2Nlc3Mg
dG8gaXQ6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmdldCgnY29udHJvbGxlcnMuY29tbWVudHNOZXcnKTsgLy8gaW5zdGFuY2Ug
b2YgQXBwLkNvbW1lbnRzTmV3Q29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzaW5nbGV0b24g
Y29udHJvbGxlcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHtBcnJheX0gbmVl
ZHMKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgW10KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBuZWVkczogW10sCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBuZWVkcyA9IGdldCh0aGlzLCAnbmVlZHMnKTsKLSAgICAg
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0KG5lZWRzLCAnbGVuZ3RoJyk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAobGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3Nl
cnQoJyBgJyArIGluc3BlY3QodGhpcykgKyAnIHNwZWNpZmllcyBgbmVlZHNgLCBidXQgZG9lcyAn
ICsKLSAgICAgICAgICAgICAgICAgICAgIm5vdCBoYXZlIGEgY29udGFpbmVyLiBQbGVhc2UgZW5z
dXJlIHRoaXMgY29udHJvbGxlciB3YXMgIiArCi0gICAgICAgICAgICAgICAgICAgICJpbnN0YW50
aWF0ZWQgd2l0aCBhIGNvbnRhaW5lci4iLAotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRh
aW5lciB8fCBtZXRhKHRoaXMsIGZhbHNlKS5kZXNjcy5jb250cm9sbGVycyAhPT0gZGVmYXVsdENv
bnRyb2xsZXJzQ29tcHV0ZWRQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuY29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnlOZWVkc0RlcGVu
ZGVuY2llcyh0aGlzLCB0aGlzLmNvbnRhaW5lciwgbmVlZHMpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgbmVlZHMgdGhlbiBpbml0aWFsaXplIGNv
bnRyb2xsZXJzIHByb3h5Ci0gICAgICAgICAgICAgICAgICAgIGdldCh0aGlzLCAnY29udHJvbGxl
cnMnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlci5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29udHJvbGxlckZvcgotICAgICAgICAgICAg
ICAgICAgICBAc2VlIHtFbWJlci5Sb3V0ZSNjb250cm9sbGVyRm9yfQotICAgICAgICAgICAgICAg
ICAgICBAZGVwcmVjYXRlZCBVc2UgYG5lZWRzYCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgY29udHJvbGxlckZvcjogZnVuY3Rpb24oY29udHJvbGxlck5hbWUpIHsK
LSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIkNvbnRyb2xsZXIjY29udHJvbGxlckZv
ciBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIENvbnRyb2xsZXIjbmVlZHMgaW5zdGVhZCIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyRm9yKGdldCh0aGlzLCAnY29udGFpbmVy
JyksIGNvbnRyb2xsZXJOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBTdG9yZXMgdGhlIGluc3RhbmNlcyBvZiBvdGhlciBjb250cm9s
bGVycyBhdmFpbGFibGUgZnJvbSB3aXRoaW4KLSAgICAgICAgICAgICAgICAgICAgdGhpcyBjb250
cm9sbGVyLiBBbnkgY29udHJvbGxlciBsaXN0ZWQgYnkgbmFtZSBpbiB0aGUgYG5lZWRzYAotICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eSB3aWxsIGJlIGFjY2Vzc2libGUgYnkgbmFtZSB0aHJv
dWdoIHRoaXMgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICBBcHAuQ29tbWVudHNDb250cm9sbGVyID0gRW1iZXIuQXJyYXlD
b250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmVlZHM6IFsncG9zdCdd
LAotICAgICAgICAgICAgICAgICAgICAgIHBvc3RUaXRsZTogZnVuY3Rpb24oKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UG9zdCA9IHRoaXMuZ2V0KCdjb250cm9sbGVycy5w
b3N0Jyk7IC8vIGluc3RhbmNlIG9mIEFwcC5Qb3N0Q29udHJvbGxlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3N0LmdldCgndGl0bGUnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICB9LnByb3BlcnR5KCdjb250cm9sbGVycy5wb3N0LnRpdGxlJykKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgIEBzZWUge0VtYmVyLkNvbnRyb2xsZXJNaXhpbiNuZWVkc30KLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IHtPYmplY3R9IGNvbnRyb2xsZXJzCi0gICAgICAgICAgICAgICAgICAgIEBk
ZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250cm9sbGVy
czogZGVmYXVsdENvbnRyb2xsZXJzQ29tcHV0ZWRQcm9wZXJ0eQotICAgICAgICB9KTsKLQotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29udHJvbGxlck1peGluOwotICAgIH0pOwot
ICAgIGRlZmluZSgiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uIiwKLSAgICBb
ImVtYmVyLW1ldGFsIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkIiwgImVtYmVyLWFw
cGxpY2F0aW9uL3N5c3RlbS9kYWciLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNlIiwg
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2RlZmVycmVkIiwgImVtYmVyLWFwcGxpY2F0aW9uL3N5c3Rl
bS9yZXNvbHZlciIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9ydW5fbG9v
cCIsICJlbWJlci1tZXRhbC91dGlscyIsICJjb250YWluZXIvY29udGFpbmVyIiwgImVtYmVyLXJ1
bnRpbWUvY29udHJvbGxlcnMvY29udHJvbGxlciIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0
aWxzIiwgImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvb2JqZWN0X2NvbnRyb2xsZXIiLCAiZW1i
ZXItcnVudGltZS9jb250cm9sbGVycy9hcnJheV9jb250cm9sbGVyIiwgImVtYmVyLXZpZXdzL3N5
c3RlbS9ldmVudF9kaXNwYXRjaGVyIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1i
ZXItcm91dGluZy9zeXN0ZW0vcm91dGUiLCAiZW1iZXItcm91dGluZy9zeXN0ZW0vcm91dGVyIiwg
ImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIsICJlbWJlci1yb3V0aW5nL2xv
Y2F0aW9uL2hpc3RvcnlfbG9jYXRpb24iLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hdXRvX2xv
Y2F0aW9uIiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vbm9uZV9sb2NhdGlvbiIsICJlbWJlci1y
b3V0aW5nL3N5c3RlbS9jYWNoZSIsICJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLWhhbmRsZWJh
cnMtY29tcGlsZXIiLCAiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2RlcHJlY2F0ZWQtY29udGFp
bmVyIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19k
ZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVu
ZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVu
Y3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2RlcGVuZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kx
OF9fLCBfX2RlcGVuZGVuY3kxOV9fLCBfX2RlcGVuZGVuY3kyMF9fLCBfX2RlcGVuZGVuY3kyMV9f
LCBfX2RlcGVuZGVuY3kyMl9fLCBfX2RlcGVuZGVuY3kyM19fLCBfX2RlcGVuZGVuY3kyNF9fLCBf
X2RlcGVuZGVuY3kyNV9fLCBfX2RlcGVuZGVuY3kyNl9fLCBfX2RlcGVuZGVuY3kyN19fLCBfX2Rl
cGVuZGVuY3kyOF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1hcHBsaWNhdGlvbgotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuRkVBVFVSRVMs
IEVtYmVyLmRlcHJlY2F0ZSwgRW1iZXIuYXNzZXJ0LCBFbWJlci5saWJyYXJpZXMsIExPR19WRVJT
SU9OLCBOYW1lc3BhY2UsIEJPT1RFRAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9f
LmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZh
ciBydW5Mb2FkSG9va3MgPSBfX2RlcGVuZGVuY3k0X18ucnVuTG9hZEhvb2tzOwotICAgICAgICB2
YXIgREFHID0gX19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBOYW1lc3Bh
Y2UgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERlZmVycmVkTWl4
aW4gPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERlZmF1bHRSZXNv
bHZlciA9IF9fZGVwZW5kZW5jeThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY3JlYXRlID0g
X19kZXBlbmRlbmN5OV9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTEw
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNhbkludm9rZSA9IF9fZGVwZW5kZW5jeTExX18u
Y2FuSW52b2tlOwotICAgICAgICB2YXIgQ29udGFpbmVyID0gX19kZXBlbmRlbmN5MTJfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgQ29udHJvbGxlciA9IF9fZGVwZW5kZW5jeTEzX19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIEVudW1lcmFibGVVdGlscyA9IF9fZGVwZW5kZW5jeTE0X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIE9iamVjdENvbnRyb2xsZXIgPSBfX2RlcGVuZGVuY3kxNV9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBBcnJheUNvbnRyb2xsZXIgPSBfX2RlcGVuZGVuY3kx
Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFdmVudERpc3BhdGNoZXIgPSBfX2RlcGVuZGVu
Y3kxN19fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vaW1wb3J0IENvbnRhaW5lckRlYnVnQWRhcHRl
ciBmcm9tICJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlciI7
Ci0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3kxOF9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBSb3V0ZSA9IF9fZGVwZW5kZW5jeTE5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IFJvdXRlciA9IF9fZGVwZW5kZW5jeTIwX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEhhc2hM
b2NhdGlvbiA9IF9fZGVwZW5kZW5jeTIxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEhpc3Rv
cnlMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTIyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEF1
dG9Mb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTIzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE5v
bmVMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTI0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEJ1
Y2tldENhY2hlID0gX19kZXBlbmRlbmN5MjVfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBL
ID0gX19kZXBlbmRlbmN5MjZfXy5LOwotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19k
ZXBlbmRlbmN5MjdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRGVwcmVjYXRlZENvbnRhaW5l
ciA9IF9fZGVwZW5kZW5jeTI4X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgQ29udGFpbmVy
RGVidWdBZGFwdGVyOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBbiBpbnN0YW5jZSBv
ZiBgRW1iZXIuQXBwbGljYXRpb25gIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnkgRW1i
ZXIKLSAgICAgICAgICAgICAgYXBwbGljYXRpb24uIEl0IGhlbHBzIHRvIGluc3RhbnRpYXRlLCBp
bml0aWFsaXplIGFuZCBjb29yZGluYXRlIHRoZSBtYW55Ci0gICAgICAgICAgICAgIG9iamVjdHMg
dGhhdCBtYWtlIHVwIHlvdXIgYXBwLgotCi0gICAgICAgICAgICAgIEVhY2ggRW1iZXIgYXBwIGhh
cyBvbmUgYW5kIG9ubHkgb25lIGBFbWJlci5BcHBsaWNhdGlvbmAgb2JqZWN0LiBJbiBmYWN0LCB0
aGUKLSAgICAgICAgICAgICAgdmVyeSBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGRvIGluIHlvdXIg
YXBwbGljYXRpb24gaXMgY3JlYXRlIHRoZSBpbnN0YW5jZToKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHdpbmRvdy5BcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5j
cmVhdGUoKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0
aGUgYXBwbGljYXRpb24gb2JqZWN0IGlzIHRoZSBvbmx5IGdsb2JhbCB2YXJpYWJsZS4gQWxsIG90
aGVyCi0gICAgICAgICAgICAgIGNsYXNzZXMgaW4geW91ciBhcHAgc2hvdWxkIGJlIHByb3BlcnRp
ZXMgb24gdGhlIGBFbWJlci5BcHBsaWNhdGlvbmAgaW5zdGFuY2UsCi0gICAgICAgICAgICAgIHdo
aWNoIGhpZ2hsaWdodHMgaXRzIGZpcnN0IHJvbGU6IGEgZ2xvYmFsIG5hbWVzcGFjZS4KLQotICAg
ICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZSBhIHZpZXcgY2xhc3MsIGl0IG1p
Z2h0IGxvb2sgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgQXBwLk15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKCk7Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGNhbGxpbmcgYEVtYmVyLkFwcGxpY2F0
aW9uLmNyZWF0ZSgpYCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZQotICAgICAgICAgICAg
ICB5b3VyIGFwcGxpY2F0aW9uIGJ5IGNhbGxpbmcgdGhlIGBFbWJlci5BcHBsaWNhdGlvbi5pbml0
aWFsaXplKClgIG1ldGhvZC4gSWYKLSAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZGVsYXkgaW5p
dGlhbGl6YXRpb24sIHlvdSBjYW4gY2FsbCB5b3VyIGFwcCdzIGBkZWZlclJlYWRpbmVzcygpYAot
ICAgICAgICAgICAgICBtZXRob2QuIFdoZW4geW91IGFyZSByZWFkeSBmb3IgeW91ciBhcHAgdG8g
YmUgaW5pdGlhbGl6ZWQsIGNhbGwgaXRzCi0gICAgICAgICAgICAgIGBhZHZhbmNlUmVhZGluZXNz
KClgIG1ldGhvZC4KLQotICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSBhIGByZWFkeWAgbWV0
aG9kIG9uIHRoZSBgRW1iZXIuQXBwbGljYXRpb25gIGluc3RhbmNlLCB3aGljaAotICAgICAgICAg
ICAgICB3aWxsIGJlIHJ1biBieSBFbWJlciB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFs
aXplZC4KLQotICAgICAgICAgICAgICBCZWNhdXNlIGBFbWJlci5BcHBsaWNhdGlvbmAgaW5oZXJp
dHMgZnJvbSBgRW1iZXIuTmFtZXNwYWNlYCwgYW55IGNsYXNzZXMKLSAgICAgICAgICAgICAgeW91
IGNyZWF0ZSB3aWxsIGhhdmUgdXNlZnVsIHN0cmluZyByZXByZXNlbnRhdGlvbnMgd2hlbiBjYWxs
aW5nIGB0b1N0cmluZygpYC4KLSAgICAgICAgICAgICAgU2VlIHRoZSBgRW1iZXIuTmFtZXNwYWNl
YCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgIFdo
aWxlIHlvdSBjYW4gdGhpbmsgb2YgeW91ciBgRW1iZXIuQXBwbGljYXRpb25gIGFzIGEgY29udGFp
bmVyIHRoYXQgaG9sZHMgdGhlCi0gICAgICAgICAgICAgIG90aGVyIGNsYXNzZXMgaW4geW91ciBh
cHBsaWNhdGlvbiwgdGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgcmVzcG9uc2liaWxpdGllcwotICAg
ICAgICAgICAgICBnb2luZyBvbiB1bmRlci10aGUtaG9vZCB0aGF0IHlvdSBtYXkgd2FudCB0byB1
bmRlcnN0YW5kLgotCi0gICAgICAgICAgICAgICMjIyBFdmVudCBEZWxlZ2F0aW9uCi0KLSAgICAg
ICAgICAgICAgRW1iZXIgdXNlcyBhIHRlY2huaXF1ZSBjYWxsZWQgX2V2ZW50IGRlbGVnYXRpb25f
LiBUaGlzIGFsbG93cyB0aGUgZnJhbWV3b3JrCi0gICAgICAgICAgICAgIHRvIHNldCB1cCBhIGds
b2JhbCwgc2hhcmVkIGV2ZW50IGxpc3RlbmVyIGluc3RlYWQgb2YgcmVxdWlyaW5nIGVhY2ggdmll
dyB0bwotICAgICAgICAgICAgICBkbyBpdCBtYW51YWxseS4gRm9yIGV4YW1wbGUsIGluc3RlYWQg
b2YgZWFjaCB2aWV3IHJlZ2lzdGVyaW5nIGl0cyBvd24KLSAgICAgICAgICAgICAgYG1vdXNlZG93
bmAgbGlzdGVuZXIgb24gaXRzIGFzc29jaWF0ZWQgZWxlbWVudCwgRW1iZXIgc2V0cyB1cCBhIGBt
b3VzZWRvd25gCi0gICAgICAgICAgICAgIGxpc3RlbmVyIG9uIHRoZSBgYm9keWAuCi0KLSAgICAg
ICAgICAgICAgSWYgYSBgbW91c2Vkb3duYCBldmVudCBvY2N1cnMsIEVtYmVyIHdpbGwgbG9vayBh
dCB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCBhbmQKLSAgICAgICAgICAgICAgc3RhcnQgd2Fsa2lu
ZyB1cCB0aGUgRE9NIG5vZGUgdHJlZSwgZmluZGluZyBjb3JyZXNwb25kaW5nIHZpZXdzIGFuZCBp
bnZva2luZwotICAgICAgICAgICAgICB0aGVpciBgbW91c2VEb3duYCBtZXRob2QgYXMgaXQgZ29l
cy4KLQotICAgICAgICAgICAgICBgRW1iZXIuQXBwbGljYXRpb25gIGhhcyBhIG51bWJlciBvZiBk
ZWZhdWx0IGV2ZW50cyB0aGF0IGl0IGxpc3RlbnMgZm9yLCBhcwotICAgICAgICAgICAgICB3ZWxs
IGFzIGEgbWFwcGluZyBmcm9tIGxvd2VyY2FzZSBldmVudHMgdG8gY2FtZWwtY2FzZWQgdmlldyBt
ZXRob2QgbmFtZXMuIEZvcgotICAgICAgICAgICAgICBleGFtcGxlLCB0aGUgYGtleXByZXNzYCBl
dmVudCBjYXVzZXMgdGhlIGBrZXlQcmVzc2AgbWV0aG9kIG9uIHRoZSB2aWV3IHRvIGJlCi0gICAg
ICAgICAgICAgIGNhbGxlZCwgdGhlIGBkYmxjbGlja2AgZXZlbnQgY2F1c2VzIGBkb3VibGVDbGlj
a2AgdG8gYmUgY2FsbGVkLCBhbmQgc28gb24uCi0KLSAgICAgICAgICAgICAgSWYgdGhlcmUgaXMg
YSBidWJibGluZyBicm93c2VyIGV2ZW50IHRoYXQgRW1iZXIgZG9lcyBub3QgbGlzdGVuIGZvciBi
eQotICAgICAgICAgICAgICBkZWZhdWx0LCB5b3UgY2FuIHNwZWNpZnkgY3VzdG9tIGV2ZW50cyBh
bmQgdGhlaXIgY29ycmVzcG9uZGluZyB2aWV3IG1ldGhvZAotICAgICAgICAgICAgICBuYW1lcyBi
eSBzZXR0aW5nIHRoZSBhcHBsaWNhdGlvbidzIGBjdXN0b21FdmVudHNgIHByb3BlcnR5OgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwID0gRW1iZXIuQXBw
bGljYXRpb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjdXN0b21FdmVudHM6IHsKLSAgICAg
ICAgICAgICAgICAgIC8vIGFkZCBzdXBwb3J0IGZvciB0aGUgcGFzdGUgZXZlbnQKLSAgICAgICAg
ICAgICAgICAgIHBhc3RlOiAicGFzdGUiCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhl
IGFwcGxpY2F0aW9uIHNldHMgdXAgdGhlc2UgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBkb2N1bWVu
dAotICAgICAgICAgICAgICBib2R5LiBIb3dldmVyLCBpbiBjYXNlcyB3aGVyZSB5b3UgYXJlIGVt
YmVkZGluZyBhbiBFbWJlciBhcHBsaWNhdGlvbiBpbnNpZGUKLSAgICAgICAgICAgICAgYW4gZXhp
c3RpbmcgcGFnZSwgeW91IG1heSB3YW50IGl0IHRvIHNldCB1cCB0aGUgbGlzdGVuZXJzIG9uIGFu
IGVsZW1lbnQKLSAgICAgICAgICAgICAgaW5zaWRlIHRoZSBib2R5LgotCi0gICAgICAgICAgICAg
IEZvciBleGFtcGxlLCBpZiBvbmx5IGV2ZW50cyBpbnNpZGUgYSBET00gZWxlbWVudCB3aXRoIHRo
ZSBJRCBvZiBgZW1iZXItYXBwYAotICAgICAgICAgICAgICBzaG91bGQgYmUgZGVsZWdhdGVkLCBz
ZXQgeW91ciBhcHBsaWNhdGlvbidzIGByb290RWxlbWVudGAgcHJvcGVydHk6Ci0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB3aW5kb3cuQXBwID0gRW1iZXIuQXBw
bGljYXRpb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICByb290RWxlbWVudDogJyNlbWJlci1h
cHAnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBUaGUgYHJvb3RFbGVtZW50YCBjYW4gYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgYSBqUXVl
cnktY29tcGF0aWJsZSBzZWxlY3RvcgotICAgICAgICAgICAgICBzdHJpbmcuIE5vdGUgdGhhdCAq
dmlld3MgYXBwZW5kZWQgdG8gdGhlIERPTSBvdXRzaWRlIHRoZSByb290IGVsZW1lbnQgd2lsbAot
ICAgICAgICAgICAgICBub3QgcmVjZWl2ZSBldmVudHMuKiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3Rv
bSByb290IGVsZW1lbnQsIG1ha2Ugc3VyZSB5b3Ugb25seQotICAgICAgICAgICAgICBhcHBlbmQg
dmlld3MgaW5zaWRlIGl0IQotCi0gICAgICAgICAgICAgIFRvIGxlYXJuIG1vcmUgYWJvdXQgdGhl
IGFkdmFudGFnZXMgb2YgZXZlbnQgZGVsZWdhdGlvbiBhbmQgdGhlIEVtYmVyIHZpZXcKLSAgICAg
ICAgICAgICAgbGF5ZXIsIGFuZCBhIGxpc3Qgb2YgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IGFy
ZSBzZXR1cCBieSBkZWZhdWx0LCB2aXNpdCB0aGUKLSAgICAgICAgICAgICAgW0VtYmVyIFZpZXcg
TGF5ZXIgZ3VpZGVdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvdW5kZXJzdGFuZGluZy1lbWJl
ci90aGUtdmlldy1sYXllci8jdG9jX2V2ZW50LWRlbGVnYXRpb24pLgotCi0gICAgICAgICAgICAg
ICMjIyBJbml0aWFsaXplcnMKLQotICAgICAgICAgICAgICBMaWJyYXJpZXMgb24gdG9wIG9mIEVt
YmVyIGNhbiBhZGQgaW5pdGlhbGl6ZXJzLCBsaWtlIHNvOgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewot
ICAgICAgICAgICAgICAgIG5hbWU6ICdhcGktYWRhcHRlcicsCi0KLSAgICAgICAgICAgICAgICBp
bml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICBhcHBsaWNhdGlvbi5yZWdpc3RlcignYXBpLWFkYXB0ZXI6bWFpbicsIEFwaUFkYXB0
ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEluaXRpYWxpemVycyBwcm92aWRlIGFuIG9wcG9ydHVuaXR5
IHRvIGFjY2VzcyB0aGUgY29udGFpbmVyLCB3aGljaAotICAgICAgICAgICAgICBvcmdhbml6ZXMg
dGhlIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIGFuIEVtYmVyIGFwcGxpY2F0aW9uLiBBZGRpdGlv
bmFsbHkKLSAgICAgICAgICAgICAgdGhleSBwcm92aWRlIGEgY2hhbmNlIHRvIGFjY2VzcyB0aGUg
aW5zdGFudGlhdGVkIGFwcGxpY2F0aW9uLiBCZXlvbmQKLSAgICAgICAgICAgICAgYmVpbmcgdXNl
ZCBmb3IgbGlicmFyaWVzLCBpbml0aWFsaXplcnMgYXJlIGFsc28gYSBncmVhdCB3YXkgdG8gb3Jn
YW5pemUKLSAgICAgICAgICAgICAgZGVwZW5kZW5jeSBpbmplY3Rpb24gb3Igc2V0dXAgaW4geW91
ciBvd24gYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgIyMjIFJvdXRpbmcKLQotICAgICAg
ICAgICAgICBJbiBhZGRpdGlvbiB0byBjcmVhdGluZyB5b3VyIGFwcGxpY2F0aW9uJ3Mgcm91dGVy
LCBgRW1iZXIuQXBwbGljYXRpb25gIGlzCi0gICAgICAgICAgICAgIGFsc28gcmVzcG9uc2libGUg
Zm9yIHRlbGxpbmcgdGhlIHJvdXRlciB3aGVuIHRvIHN0YXJ0IHJvdXRpbmcuIFRyYW5zaXRpb25z
Ci0gICAgICAgICAgICAgIGJldHdlZW4gcm91dGVzIGNhbiBiZSBsb2dnZWQgd2l0aCB0aGUgYExP
R19UUkFOU0lUSU9OU2AgZmxhZywgYW5kIG1vcmUKLSAgICAgICAgICAgICAgZGV0YWlsZWQgaW50
cmEtdHJhbnNpdGlvbiBsb2dnaW5nIGNhbiBiZSBsb2dnZWQgd2l0aAotICAgICAgICAgICAgICB0
aGUgYExPR19UUkFOU0lUSU9OU19JTlRFUk5BTGAgZmxhZzoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHdpbmRvdy5BcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5j
cmVhdGUoewotICAgICAgICAgICAgICAgIExPR19UUkFOU0lUSU9OUzogdHJ1ZSwgLy8gYmFzaWMg
bG9nZ2luZyBvZiBzdWNjZXNzZnVsIHRyYW5zaXRpb25zCi0gICAgICAgICAgICAgICAgTE9HX1RS
QU5TSVRJT05TX0lOVEVSTkFMOiB0cnVlIC8vIGRldGFpbGVkIGxvZ2dpbmcgb2YgYWxsIHJvdXRp
bmcgc3RlcHMKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEJ5IGRlZmF1bHQsIHRoZSByb3V0ZXIgd2lsbCBiZWdpbiB0cnlpbmcgdG8gdHJhbnNs
YXRlIHRoZSBjdXJyZW50IFVSTCBpbnRvCi0gICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHN0YXRl
IG9uY2UgdGhlIGJyb3dzZXIgZW1pdHMgdGhlIGBET01Db250ZW50UmVhZHlgIGV2ZW50LiBJZiB5
b3UKLSAgICAgICAgICAgICAgbmVlZCB0byBkZWZlciByb3V0aW5nLCB5b3UgY2FuIGNhbGwgdGhl
IGFwcGxpY2F0aW9uJ3MgYGRlZmVyUmVhZGluZXNzKClgCi0gICAgICAgICAgICAgIG1ldGhvZC4g
T25jZSByb3V0aW5nIGNhbiBiZWdpbiwgY2FsbCB0aGUgYGFkdmFuY2VSZWFkaW5lc3MoKWAgbWV0
aG9kLgotCi0gICAgICAgICAgICAgIElmIHRoZXJlIGlzIGFueSBzZXR1cCByZXF1aXJlZCBiZWZv
cmUgcm91dGluZyBiZWdpbnMsIHlvdSBjYW4gaW1wbGVtZW50IGEKLSAgICAgICAgICAgICAgYHJl
YWR5KClgIG1ldGhvZCBvbiB5b3VyIGFwcCB0aGF0IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVs
eSBiZWZvcmUgcm91dGluZwotICAgICAgICAgICAgICBiZWdpbnMuCi0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEBjbGFzcyBBcHBsaWNhdGlvbgotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLk5hbWVzcGFjZQotICAg
ICAgICAgICAgKi8KLQotICAgICAgICB2YXIgQXBwbGljYXRpb24gPSBOYW1lc3BhY2UuZXh0ZW5k
KERlZmVycmVkTWl4aW4sIHsKLSAgICAgICAgICAgIF9zdXBwcmVzc0RlZmVycmVkRGVwcmVjYXRp
b246IHRydWUsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgcm9v
dCBET00gZWxlbWVudCBvZiB0aGUgQXBwbGljYXRpb24uIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBh
cyBhbgotICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9yIGEKLSAgICAgICAgICAgICAgICAg
ICAgW2pRdWVyeS1jb21wYXRpYmxlIHNlbGVjdG9yIHN0cmluZ10oaHR0cDovL2FwaS5qcXVlcnku
Y29tL2NhdGVnb3J5L3NlbGVjdG9ycy8pLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMg
dGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgQXBwbGljYXRpb24ncywKLSAg
ICAgICAgICAgICAgICAgICAgYGV2ZW50RGlzcGF0Y2hlcmAsIHdoaWNoIHNldHMgdXAgdGhlIGxp
c3RlbmVycyBmb3IgZXZlbnQgZGVsZWdhdGlvbi4gRXZlcnkKLSAgICAgICAgICAgICAgICAgICAg
dmlldyBpbiB5b3VyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBhIGNoaWxkIG9mIHRoZSBlbGVtZW50
IHlvdSBzcGVjaWZ5IGhlcmUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJvb3RF
bGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIERPTUVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgQGRlZmF1bHQgJ2JvZHknCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcm9vdEVsZW1lbnQ6ICdib2R5JywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFRoZSBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYCByZXNwb25zaWJsZSBmb3IgZGVsZWdh
dGluZyBldmVudHMgdG8gdGhpcwotICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbidzIHZp
ZXdzLgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBldmVudCBkaXNwYXRjaGVyIGlzIGNyZWF0
ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGF0IGluaXRpYWxpemF0aW9uIHRpbWUKLSAgICAgICAgICAg
ICAgICAgICAgYW5kIHNldHMgdXAgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBET00gZWxlbWVudCBk
ZXNjcmliZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uJ3MgYHJvb3RF
bGVtZW50YCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50
YXRpb24gZm9yIGBFbWJlci5FdmVudERpc3BhdGNoZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBldmVudERpc3BhdGNoZXIKLSAgICAgICAg
ICAgICAgICAgICAgQHR5cGUgRW1iZXIuRXZlbnREaXNwYXRjaGVyCi0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBldmVu
dERpc3BhdGNoZXI6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUaGUgRE9NIGV2ZW50cyBmb3Igd2hpY2ggdGhlIGV2ZW50IGRpc3BhdGNoZXIgc2hvdWxkIGxp
c3Rlbi4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYXBwbGljYXRpb24n
cyBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYCBsaXN0ZW5zCi0gICAgICAgICAgICAgICAgICAgIGZv
ciBhIHNldCBvZiBzdGFuZGFyZCBET00gZXZlbnRzLCBzdWNoIGFzIGBtb3VzZWRvd25gIGFuZAot
ICAgICAgICAgICAgICAgICAgICBga2V5dXBgLCBhbmQgZGVsZWdhdGVzIHRoZW0gdG8geW91ciBh
cHBsaWNhdGlvbidzIGBFbWJlci5WaWV3YAotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMu
Ci0KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgYWRkaXRpb25hbCBidWJi
bGluZyBldmVudHMgdG8gYmUgZGVsZWdhdGVkIHRvIHlvdXIKLSAgICAgICAgICAgICAgICAgICAg
dmlld3MsIHNldCB5b3VyIGBFbWJlci5BcHBsaWNhdGlvbmAncyBgY3VzdG9tRXZlbnRzYCBwcm9w
ZXJ0eQotICAgICAgICAgICAgICAgICAgICB0byBhIGhhc2ggY29udGFpbmluZyB0aGUgRE9NIGV2
ZW50IG5hbWUgYXMgdGhlIGtleSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgIGNvcnJlc3Bv
bmRpbmcgdmlldyBtZXRob2QgbmFtZSBhcyB0aGUgdmFsdWUuIEZvciBleGFtcGxlOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwID0g
RW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBjdXN0b21F
dmVudHM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBzdXBwb3J0IGZvciB0aGUg
cGFzdGUgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlOiAicGFzdGUiCi0gICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGN1c3RvbUV2ZW50
cwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBPYmplY3QKLSAgICAgICAgICAgICAgICAgICAg
QGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGN1c3RvbUV2
ZW50czogbnVsbCwKLQotICAgICAgICAgICAgLy8gU3RhcnQgb2ZmIHRoZSBudW1iZXIgb2YgZGVm
ZXJyYWxzIGF0IDEuIFRoaXMgd2lsbCBiZQotICAgICAgICAgICAgLy8gZGVjcmVtZW50ZWQgYnkg
dGhlIEFwcGxpY2F0aW9uJ3Mgb3duIGBpbml0aWFsaXplYCBtZXRob2QuCi0gICAgICAgICAgICBf
cmVhZGluZXNzRGVmZXJyYWxzOiAxLAotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuJCkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
LiQgPSBqUXVlcnk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX19j
b250YWluZXJfXyA9IHRoaXMuYnVpbGRDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgIHRo
aXMuUm91dGVyID0gdGhpcy5kZWZhdWx0Um91dGVyKCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdXBlcigpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUluaXRpYWxpemUoKTsK
LQotICAgICAgICAgICAgICAgIEVtYmVyLmxpYnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCdI
YW5kbGViYXJzJywgRW1iZXJIYW5kbGViYXJzLlZFUlNJT04pOwotICAgICAgICAgICAgICAgIEVt
YmVyLmxpYnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCdqUXVlcnknLCBqUXVlcnkoKS5qcXVl
cnkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCBFbWJlci5MT0dfVkVSU0lPTiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuTE9HX1ZFUlNJT04gPSBmYWxzZTsgLy8gd2Ugb25seSBuZWVk
IHRvIHNlZSB0aGlzIG9uY2UgcGVyIEFwcGxpY2F0aW9uI2luaXQKLQotICAgICAgICAgICAgICAg
ICAgICB2YXIgbmFtZUxlbmd0aHMgPSBFbnVtZXJhYmxlVXRpbHMubWFwKEVtYmVyLmxpYnJhcmll
cywgZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChp
dGVtLCAibmFtZS5sZW5ndGgiKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG1heE5hbWVMZW5ndGggPSBNYXRoLm1heC5hcHBseSh0aGlzLCBuYW1l
TGVuZ3Rocyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVidWcoJy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIubGlicmFy
aWVzLmVhY2goZnVuY3Rpb24obmFtZSwgdmVyc2lvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNwYWNlcyA9IG5ldyBBcnJheShtYXhOYW1lTGVuZ3RoIC0gbmFtZS5sZW5ndGggKyAx
KS5qb2luKCIgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5kZWJ1ZyhbbmFtZSwg
c3BhY2VzLCAnIDogJywgdmVyc2lvbl0uam9pbigiIikpOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVidWcoJy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0nKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIGNvbnRhaW5lciBmb3Ig
dGhlIGN1cnJlbnQgYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQWxzbyByZWdp
c3RlciBhIGRlZmF1bHQgYXBwbGljYXRpb24gdmlldyBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbgot
ICAgICAgICAgICAgICAgICAgICBpdHNlbGYgZG9lcyBub3QuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBidWlsZENvbnRhaW5lcgot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db250YWluZXJ9IHRoZSBjb25maWd1
cmVkIGNvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJ1aWxkQ29u
dGFpbmVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhp
cy5fX2NvbnRhaW5lcl9fID0gQXBwbGljYXRpb24uYnVpbGRDb250YWluZXIodGhpcyk7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm90
IG9wdGVkIG91dCBvZiByb3V0aW5nIGFuZCBoYXMgbm90IGV4cGxpY2l0bHkKLSAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lZCBhIHJvdXRlciwgc3VwcGx5IGEgZGVmYXVsdCByb3V0ZXIgZm9yIHRo
ZSBhcHBsaWNhdGlvbiBhdXRob3IKLSAgICAgICAgICAgICAgICAgICAgdG8gY29uZmlndXJlLgot
Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMg
dG8gZG86Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZXNvdXJjZSgncG9zdHMnKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGVmYXVsdFJvdXRlcgotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5Sb3V0ZXJ9IHRoZSBkZWZhdWx0IHJvdXRlcgotICAgICAgICAg
ICAgICAgICAgKi8KLQotICAgICAgICAgICAgZGVmYXVsdFJvdXRlcjogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMuUm91dGVyID09PSBmYWxzZSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBj
b250YWluZXIgPSB0aGlzLl9fY29udGFpbmVyX187Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5Sb3V0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnVucmVnaXN0ZXIoJ3Jv
dXRlcjptYWluJyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcigncm91
dGVyOm1haW4nLCB0aGlzLlJvdXRlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdyb3V0ZXI6bWFpbicpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEF1dG9t
YXRpY2FsbHkgaW5pdGlhbGl6ZSB0aGUgYXBwbGljYXRpb24gb25jZSB0aGUgRE9NIGhhcwotICAg
ICAgICAgICAgICAgICAgICBiZWNvbWUgcmVhZHkuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhl
IGluaXRpYWxpemF0aW9uIGl0c2VsZiBpcyBzY2hlZHVsZWQgb24gdGhlIGFjdGlvbnMgcXVldWUK
LSAgICAgICAgICAgICAgICAgICAgd2hpY2ggZW5zdXJlcyB0aGF0IGFwcGxpY2F0aW9uIGxvYWRp
bmcgZmluaXNoZXMgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgIGJvb3RpbmcuCi0KLSAgICAg
ICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhc3luY2hyb25vdXNseSBsb2FkaW5nIGNvZGUsIHlv
dSBzaG91bGQgY2FsbAotICAgICAgICAgICAgICAgICAgICBgZGVmZXJSZWFkaW5lc3MoKWAgdG8g
ZGVmZXIgYm9vdGluZywgYW5kIHRoZW4gY2FsbAotICAgICAgICAgICAgICAgICAgICBgYWR2YW5j
ZVJlYWRpbmVzcygpYCBvbmNlIGFsbCBvZiB5b3VyIGNvZGUgaGFzIGZpbmlzaGVkCi0gICAgICAg
ICAgICAgICAgICAgIGxvYWRpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzY2hlZHVsZUluaXRpYWxpemUKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBzY2hlZHVsZUluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGlmICgh
dGhpcy4kIHx8IHRoaXMuJC5pc1JlYWR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bi5zY2hl
ZHVsZSgnYWN0aW9ucycsIHNlbGYsICdfaW5pdGlhbGl6ZScpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuJCgpLnJlYWR5KGZ1bmN0aW9uIHJ1bklu
aXRpYWxpemUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydW4oc2VsZiwgJ19pbml0aWFs
aXplJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBVc2UgdGhp
cyB0byBkZWZlciByZWFkaW5lc3MgdW50aWwgc29tZSBjb25kaXRpb24gaXMgdHJ1ZS4KLQotICAg
ICAgICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5kZWZlclJlYWRpbmVzcygpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5nZXRKU09OKCIvYXV0aC10b2tlbiIsIGZ1bmN0aW9uKHRva2Vu
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgQXBwLnRva2VuID0gdG9rZW47Ci0gICAgICAgICAg
ICAgICAgICAgICAgQXBwLmFkdmFuY2VSZWFkaW5lc3MoKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMg
YWxsb3dzIHlvdSB0byBwZXJmb3JtIGFzeW5jaHJvbm91cyBzZXR1cCBsb2dpYyBhbmQgZGVmZXIK
LSAgICAgICAgICAgICAgICAgICAgYm9vdGluZyB5b3VyIGFwcGxpY2F0aW9uIHVudGlsIHRoZSBz
ZXR1cCBoYXMgZmluaXNoZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhl
IHNldHVwIHJlcXVpcmVzIGEgbG9hZGluZyBVSSwgaXQgbWlnaHQgYmUgYmV0dGVyCi0gICAgICAg
ICAgICAgICAgICAgIHRvIHVzZSB0aGUgcm91dGVyIGZvciB0aGlzIHB1cnBvc2UuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBkZWZlclJlYWRpbmVzcwotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGRlZmVyUmVhZGluZXNzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IGNhbGwgZGVmZXJSZWFkaW5lc3Mgb24gYW4gaW5z
dGFuY2Ugb2YgRW1iZXIuQXBwbGljYXRpb24iLCB0aGlzIGluc3RhbmNlb2YgQXBwbGljYXRpb24p
OwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbm5vdCBkZWZlciByZWFkaW5l
c3Mgc2luY2UgdGhlIGByZWFkeSgpYCBob29rIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLiIsIHRo
aXMuX3JlYWRpbmVzc0RlZmVycmFscyA+IDApOwotICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRp
bmVzc0RlZmVycmFscysrOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIENhbGwgYGFkdmFuY2VSZWFkaW5lc3NgIGFmdGVyIGFueSBhc3luY2hy
b25vdXMgc2V0dXAgbG9naWMgaGFzIGNvbXBsZXRlZC4KLSAgICAgICAgICAgICAgICAgICAgRWFj
aCBjYWxsIHRvIGBkZWZlclJlYWRpbmVzc2AgbXVzdCBiZSBtYXRjaGVkIGJ5IGEgY2FsbCB0byBg
YWR2YW5jZVJlYWRpbmVzc2AKLSAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGFwcGxpY2F0aW9u
IHdpbGwgbmV2ZXIgYmVjb21lIHJlYWR5IGFuZCByb3V0aW5nIHdpbGwgbm90IGJlZ2luLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWR2YW5jZVJlYWRpbmVzcwotICAgICAgICAgICAg
ICAgICAgICBAc2VlIHtFbWJlci5BcHBsaWNhdGlvbiNkZWZlclJlYWRpbmVzc30KLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBhZHZhbmNlUmVhZGluZXNzOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IGNhbGwgYWR2YW5jZVJlYWRp
bmVzcyBvbiBhbiBpbnN0YW5jZSBvZiBFbWJlci5BcHBsaWNhdGlvbiIsIHRoaXMgaW5zdGFuY2Vv
ZiBBcHBsaWNhdGlvbik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxz
LS07Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzID09PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bi5vbmNlKHRoaXMsIHRoaXMuZGlkQmVjb21lUmVh
ZHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcnMgYSBmYWN0b3J5IHRoYXQgY2FuIGJlIHVz
ZWQgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uICh3aXRoCi0gICAgICAgICAgICAgICAgICAgIGBB
cHAuaW5qZWN0YCkgb3IgZm9yIHNlcnZpY2UgbG9va3VwLiBFYWNoIGZhY3RvcnkgaXMgcmVnaXN0
ZXJlZCB3aXRoCi0gICAgICAgICAgICAgICAgICAgIGEgZnVsbCBuYW1lIGluY2x1ZGluZyB0d28g
cGFydHM6IGB0eXBlOm5hbWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEEgc2ltcGxlIGV4YW1w
bGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAg
ICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIEFwcC5PcmFuZ2UgID0gRW1iZXIuT2JqZWN0LmV4dGVuZCgpOwotICAgICAgICAgICAg
ICAgICAgICBBcHAucmVnaXN0ZXIoJ2ZydWl0OmZhdm9yaXRlJywgQXBwLk9yYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEVtYmVyIHdpbGwgcmVz
b2x2ZSBmYWN0b3JpZXMgZnJvbSB0aGUgYEFwcGAgbmFtZXNwYWNlIGF1dG9tYXRpY2FsbHkuCi0g
ICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGBBcHAuQ2Fyc0NvbnRyb2xsZXJgIHdpbGwg
YmUgZGlzY292ZXJlZCBhbmQgcmV0dXJuZWQgaWYKLSAgICAgICAgICAgICAgICAgICAgYW4gYXBw
bGljYXRpb24gcmVxdWVzdHMgYGNvbnRyb2xsZXI6Y2Fyc2AuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQW4gZXhhbXBsZSBvZiByZWdpc3RlcmluZyBhIGNvbnRyb2xsZXIgd2l0aCBhIG5vbi1zdGFu
ZGFyZCBuYW1lOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgU2Vzc2lvbiAgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCgpOwot
Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5yZWdpc3RlcignY29udHJvbGxlcjpzZXNzaW9uJywg
U2Vzc2lvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFNlc3Npb24gY29udHJvbGxl
ciBjYW4gbm93IGJlIHRyZWF0ZWQgbGlrZSBhIG5vcm1hbCBjb250cm9sbGVyLAotICAgICAgICAg
ICAgICAgICAgICAvLyBkZXNwaXRlIGl0cyBub24tc3RhbmRhcmQgbmFtZS4KLSAgICAgICAgICAg
ICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBuZWVkczogWydzZXNzaW9uJ10KLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyZWQgZmFjdG9yaWVzIGFyZSAqKmluc3RhbnRpYXRlZCoqIGJ5IGhhdmlu
ZyBgY3JlYXRlYAotICAgICAgICAgICAgICAgICAgICBjYWxsZWQgb24gdGhlbS4gQWRkaXRpb25h
bGx5IHRoZXkgYXJlICoqc2luZ2xldG9ucyoqLCBlYWNoIHRpbWUKLSAgICAgICAgICAgICAgICAg
ICAgdGhleSBhcmUgbG9va2VkIHVwIHRoZXkgcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlLgotCi0g
ICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXMgbW9kaWZ5aW5nIHRoYXQgZGVmYXVsdCBi
ZWhhdmlvcjoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKLQotICAgICAg
ICAgICAgICAgICAgICBBcHAuUGVyc29uICA9IEVtYmVyLk9iamVjdC5leHRlbmQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLk9yYW5nZSAgPSBFbWJlci5PYmplY3QuZXh0ZW5kKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcC5FbWFpbCAgID0gRW1iZXIuT2JqZWN0LmV4dGVuZCgpOwotICAg
ICAgICAgICAgICAgICAgICBBcHAuc2Vzc2lvbiA9IEVtYmVyLk9iamVjdC5jcmVhdGUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBBcHAucmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBBcHAuUGVyc29u
LCB7c2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgQXBwLnJlZ2lzdGVy
KCdmcnVpdDpmYXZvcml0ZScsIEFwcC5PcmFuZ2UpOwotICAgICAgICAgICAgICAgICAgICBBcHAu
cmVnaXN0ZXIoJ2NvbW11bmljYXRpb246bWFpbicsIEFwcC5FbWFpbCwge3NpbmdsZXRvbjogZmFs
c2V9KTsKLSAgICAgICAgICAgICAgICAgICAgQXBwLnJlZ2lzdGVyKCdzZXNzaW9uJywgQXBwLnNl
c3Npb24sIHtpbnN0YW50aWF0ZTogZmFsc2V9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZWdpc3RlcgotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0gIGZ1bGxOYW1lIHtTdHJpbmd9IHR5cGU6bmFtZSAoZS5nLiwgJ21vZGVsOnVzZXIn
KQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gIGZhY3Rvcnkge0Z1bmN0aW9ufSAoZS5nLiwg
QXBwLlBlcnNvbikKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtICBvcHRpb25zIHtPYmplY3R9
IChvcHRpb25hbCkgZGlzYWJsZSBpbnN0YW50aWF0aW9uIG9yIHNpbmdsZXRvbiB1c2FnZQotICAg
ICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICByZWdpc3RlcjogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX19jb250YWluZXJfXzsKLSAgICAg
ICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIuYXBwbHkoY29udGFpbmVyLCBhcmd1bWVudHMp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IERlZmluZSBhIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9udG8gYSBzcGVjaWZpYyBmYWN0b3J5IG9y
IGFsbCBmYWN0b3JpZXMKLSAgICAgICAgICAgICAgICAgICAgb2YgYSB0eXBlLgotCi0gICAgICAg
ICAgICAgICAgICAgIFdoZW4gRW1iZXIgaW5zdGFudGlhdGVzIGEgY29udHJvbGxlciwgdmlldywg
b3Igb3RoZXIgZnJhbWV3b3JrIGNvbXBvbmVudAotICAgICAgICAgICAgICAgICAgICBpdCBjYW4g
YXR0YWNoIGEgZGVwZW5kZW5jeSB0byB0aGF0IGNvbXBvbmVudC4gVGhpcyBpcyBvZnRlbiB1c2Vk
IHRvCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgc2VydmljZXMgdG8gYSBzZXQgb2YgZnJh
bWV3b3JrIGNvbXBvbmVudHMuCi0KLSAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiBw
cm92aWRpbmcgYSBzZXNzaW9uIG9iamVjdCB0byBhbGwgY29udHJvbGxlcnM6Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgQXBwID0g
RW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTZXNz
aW9uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7IGlzQXV0aGVudGljYXRlZDogZmFsc2UgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQSBmYWN0b3J5IG11c3QgYmUgcmVnaXN0ZXJlZCBiZWZv
cmUgaXQgY2FuIGJlIGluamVjdGVkCi0gICAgICAgICAgICAgICAgICAgIEFwcC5yZWdpc3Rlcign
c2Vzc2lvbjptYWluJywgU2Vzc2lvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW5qZWN0
ICdzZXNzaW9uOm1haW4nIG9udG8gYWxsIGZhY3RvcmllcyBvZiB0aGUgdHlwZSAnY29udHJvbGxl
cicKLSAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgbmFtZSAnc2Vzc2lvbicKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLmluamVjdCgnY29udHJvbGxlcicsICdzZXNzaW9uJywgJ3Nlc3Np
b246bWFpbicpOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5JbmRleENvbnRyb2xsZXIgPSBF
bWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgaXNMb2dnZWRJ
bjogRW1iZXIuY29tcHV0ZWQuYWxpYXMoJ3Nlc3Npb24uaXNBdXRoZW50aWNhdGVkJykKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEluamVjdGlvbnMgY2FuIGFsc28gYmUgcGVyZm9ybWVkIG9uIHNwZWNpZmljIGZh
Y3Rvcmllcy4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIEFwcC5pbmplY3QoPGZ1bGxfbmFtZSBvciB0eXBlPiwgPHByb3BlcnR5IG5hbWU+
LCA8ZnVsbF9uYW1lPikKLSAgICAgICAgICAgICAgICAgICAgQXBwLmluamVjdCgncm91dGUnLCAn
c291cmNlJywgJ3NvdXJjZTptYWluJykKLSAgICAgICAgICAgICAgICAgICAgQXBwLmluamVjdCgn
cm91dGU6YXBwbGljYXRpb24nLCAnZW1haWwnLCAnbW9kZWw6ZW1haWwnKQotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90
ZSB0aGF0IGluamVjdGlvbnMgY2FuIG9ubHkgYmUgcGVyZm9ybWVkIG9uCi0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzZXMgdGhhdCBhcmUgaW5zdGFudGlhdGVkIGJ5IEVtYmVyIGl0c2VsZi4gSW5z
dGFudGlhdGluZyBhIGNsYXNzCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5ICh2aWEgYGNy
ZWF0ZWAgb3IgYG5ld2ApIGJ5cGFzc2VzIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbgotICAgICAg
ICAgICAgICAgICAgICBzeXN0ZW0uCi0KLSAgICAgICAgICAgICAgICAgICAgRW1iZXItRGF0YSBp
bnN0YW50aWF0ZXMgaXRzIG1vZGVscyBpbiBhIHVuaXF1ZSBtYW5uZXIsIGFuZCBjb25zZXF1ZW50
bHkKLSAgICAgICAgICAgICAgICAgICAgaW5qZWN0aW9ucyBvbnRvIG1vZGVscyAob3IgYWxsIG1v
ZGVscykgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZC4gSW5qZWN0aW9ucwotICAgICAgICAgICAg
ICAgICAgICBvbiBtb2RlbHMgY2FuIGJlIGVuYWJsZWQgYnkgc2V0dGluZyBgRW1iZXIuTU9ERUxf
RkFDVE9SWV9JTkpFQ1RJT05TYAotICAgICAgICAgICAgICAgICAgICB0byBgdHJ1ZWAuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtICBmYWN0b3J5TmFtZU9yVHlwZSB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0gIHByb3BlcnR5IHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSAgaW5qZWN0
aW9uTmFtZSB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBpbmpl
Y3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9f
Y29udGFpbmVyX187Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbi5hcHBseShj
b250YWluZXIsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQ2FsbGluZyBpbml0aWFsaXplIG1hbnVhbGx5IGlzIG5vdCBz
dXBwb3J0ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSBFbWJlci5BcHBsaWNh
dGlvbiNhZHZhbmNlUmVhZGluZXNzIGFuZAotICAgICAgICAgICAgICAgICAgICBFbWJlci5BcHBs
aWNhdGlvbiNkZWZlclJlYWRpbmVzcy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGluaXRpYWxpemUKLSAgICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIGluaXRp
YWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnQ2Fs
bGluZyBpbml0aWFsaXplIG1hbnVhbGx5IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBzZWUgRW1i
ZXIuQXBwbGljYXRpb24jYWR2YW5jZVJlYWRpbmVzcyBhbmQgRW1iZXIuQXBwbGljYXRpb24jZGVm
ZXJSZWFkaW5lc3MnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBJbml0aWFsaXplIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBoYXBwZW5zIGF1
dG9tYXRpY2FsbHkuCi0KLSAgICAgICAgICAgICAgICAgICAgUnVuIGFueSBpbml0aWFsaXplcnMg
YW5kIHJ1biB0aGUgYXBwbGljYXRpb24gbG9hZCBob29rLiBUaGVzZSBob29rcyBtYXkKLSAgICAg
ICAgICAgICAgICAgICAgY2hvb3NlIHRvIGRlZmVyIHJlYWRpbmVzcy4gRm9yIGV4YW1wbGUsIGFu
IGF1dGhlbnRpY2F0aW9uIGhvb2sgbWlnaHQgd2FudAotICAgICAgICAgICAgICAgICAgICB0byBk
ZWZlciByZWFkaW5lc3MgdW50aWwgdGhlIGF1dGggdG9rZW4gaGFzIGJlZW4gcmV0cmlldmVkLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgX2luaXRpYWxpemUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfaW5pdGlh
bGl6ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBBcHAuUm91dGVyIG11c3QgYWxyZWFk
eSBiZSBhc3NpZ25lZAotICAgICAgICAgICAgICAgIGlmICh0aGlzLlJvdXRlcikgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fX2NvbnRhaW5lcl9fOwotICAgICAg
ICAgICAgICAgICAgICBjb250YWluZXIudW5yZWdpc3Rlcigncm91dGVyOm1haW4nKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdyb3V0ZXI6bWFpbicsIHRoaXMuUm91
dGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJ1bkluaXRp
YWxpemVycygpOwotICAgICAgICAgICAgICAgIHJ1bkxvYWRIb29rcygnYXBwbGljYXRpb24nLCB0
aGlzKTsKLQotICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFueSBpbml0aWFsaXpl
cnMgb3IgbG9hZCBob29rcyB0aGF0IHdvdWxkIGhhdmUgd2FudGVkCi0gICAgICAgICAgICAgICAg
Ly8gdG8gZGVmZXIgcmVhZGluZXNzIGhhdmUgZmlyZWQuIEluIGdlbmVyYWwsIGFkdmFuY2luZyBy
ZWFkaW5lc3MgaGVyZQotICAgICAgICAgICAgICAgIC8vIHdpbGwgcHJvY2VlZCB0byBkaWRCZWNv
bWVSZWFkeS4KLSAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2VSZWFkaW5lc3MoKTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJlc2V0IHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyB0
eXBpY2FsbHkgdXNlZCBvbmx5IGluIHRlc3RzLiBJdCBjbGVhbnMgdXAKLSAgICAgICAgICAgICAg
ICAgICAgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0KLSAgICAgICAg
ICAgICAgICAgICAgMS4gRGVhY3RpdmF0ZSBleGlzdGluZyByb3V0ZXMKLSAgICAgICAgICAgICAg
ICAgICAgMi4gRGVzdHJveSBhbGwgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyCi0gICAgICAgICAg
ICAgICAgICAgIDMuIENyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbiBjb250YWluZXIKLSAgICAgICAg
ICAgICAgICAgICAgNC4gUmUtcm91dGUgdG8gdGhlIGV4aXN0aW5nIHVybAotCi0gICAgICAgICAg
ICAgICAgICAgIFR5cGljYWwgRXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIEFwcDsKLQotICAgICAgICAgICAgICAg
ICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgQXBwID0gRW1iZXIu
QXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgICAgICAgIG1vZHVsZSgiYWNjZXB0YW5jZSB0ZXN0IiwgewotICAgICAgICAgICAgICAg
ICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFwcC5y
ZXNldCgpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgdGVzdCgiZmlyc3QgdGVzdCIsIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcCBpcyBmcmVzaGx5IHJlc2V0Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHRlc3QoImZpcnN0IHRlc3QiLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAvLyBBcHAgaXMgYWdhaW4gZnJlc2hs
eSByZXNldAotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgQWR2YW5jZWQgRXhhbXBsZToKLQotICAgICAgICAgICAg
ICAgICAgICBPY2Nhc2lvbmFsbHkgeW91IG1heSB3YW50IHRvIHByZXZlbnQgdGhlIGFwcCBmcm9t
IGluaXRpYWxpemluZyBkdXJpbmcKLSAgICAgICAgICAgICAgICAgICAgc2V0dXAuIFRoaXMgY291
bGQgZW5hYmxlIGV4dHJhIGNvbmZpZ3VyYXRpb24sIG9yIGVuYWJsZSBhc3NlcnRpbmcgcHJpb3IK
LSAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGFwcCBiZWNvbWluZyByZWFkeS4KLQotICAgICAg
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIEFw
cDsKLQotICAgICAgICAgICAgICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSgiYWNjZXB0YW5jZSB0ZXN0
IiwgewotICAgICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1bihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXBwLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEFwcC5kZWZlclJlYWRp
bmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICB0ZXN0
KCJmaXJzdCB0ZXN0IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgb2sodHJ1
ZSwgJ3NvbWV0aGluZyBiZWZvcmUgYXBwIGlzIGluaXRpYWxpemVkJyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcHAu
YWR2YW5jZVJlYWRpbmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICAgIG9rKHRydWUsICdzb21ldGhpbmcgYWZ0ZXIgYXBwIGlzIGluaXRpYWxpemVk
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc2V0Ci0gICAgICAgICAgICAgICAgICAqKi8K
LSAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9y
ZWFkaW5lc3NEZWZlcnJhbHMgPSAxOwotCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxl
UmVzZXQoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLl9fY29udGFp
bmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicpOwotICAgICAgICAgICAgICAgICAgICByb3V0ZXIu
cmVzZXQoKTsKLQotICAgICAgICAgICAgICAgICAgICBydW4odGhpcy5fX2NvbnRhaW5lcl9fLCAn
ZGVzdHJveScpOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRDb250YWluZXIoKTsK
LQotICAgICAgICAgICAgICAgICAgICBydW4uc2NoZWR1bGUoJ2FjdGlvbnMnLCB0aGlzLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcnVuLmpvaW4odGhpcywgaGFuZGxlUmVzZXQpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgcnVuSW5pdGlhbGl6ZXJzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgcnVuSW5pdGlhbGl6ZXJzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIg
aW5pdGlhbGl6ZXJzID0gZ2V0KHRoaXMuY29uc3RydWN0b3IsICdpbml0aWFsaXplcnMnKTsKLSAg
ICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5fX2NvbnRhaW5lcl9fOwotICAgICAg
ICAgICAgICAgIHZhciBncmFwaCA9IG5ldyBEQUcoKTsKLSAgICAgICAgICAgICAgICB2YXIgbmFt
ZXNwYWNlID0gdGhpczsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSwgaW5pdGlhbGl6ZXI7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKG5hbWUgaW4gaW5pdGlhbGl6ZXJzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJzW25hbWVdOwotICAgICAgICAgICAg
ICAgICAgICBncmFwaC5hZGRFZGdlcyhpbml0aWFsaXplci5uYW1lLCBpbml0aWFsaXplci5pbml0
aWFsaXplLCBpbml0aWFsaXplci5iZWZvcmUsIGluaXRpYWxpemVyLmFmdGVyKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBncmFwaC50b3Bzb3J0KGZ1bmN0aW9uICh2ZXJ0
ZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRpYWxpemVyID0gdmVydGV4LnZhbHVl
OwotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIk5vIGFwcGxpY2F0aW9uIGluaXRp
YWxpemVyIG5hbWVkICciICsgdmVydGV4Lm5hbWUgKyAiJyIsIGluaXRpYWxpemVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIoY29udGFpbmVyLCBuYW1lc3BhY2UpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGlkQmVj
b21lUmVhZHkKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkaWRCZWNvbWVSZWFk
eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEV2ZW50RGlzcGF0Y2hl
cigpOwotICAgICAgICAgICAgICAgIHRoaXMucmVhZHkoKTsgLy8gdXNlciBob29rCi0gICAgICAg
ICAgICAgICAgdGhpcy5zdGFydFJvdXRpbmcoKTsKLQotICAgICAgICAgICAgICAgIGlmICghRW1i
ZXIudGVzdGluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBFYWdlcmx5IG5hbWUgYWxsIGNs
YXNzZXMgdGhhdCBhcmUgYWxyZWFkeSBsb2FkZWQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIu
TmFtZXNwYWNlLnByb2Nlc3NBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuQk9PVEVE
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJlc29s
dmUodGhpcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgU2V0dXAgdXAgdGhlIGV2ZW50IGRpc3BhdGNoZXIgdG8gcmVjZWl2ZSBldmVudHMg
b24gdGhlCi0gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uJ3MgYHJvb3RFbGVtZW50YCB3
aXRoIGFueSByZWdpc3RlcmVkCi0gICAgICAgICAgICAgICAgICAgIGBjdXN0b21FdmVudHNgLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2Qgc2V0dXBFdmVudERpc3BhdGNoZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBzZXR1cEV2ZW50RGlzcGF0Y2hlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGN1c3RvbUV2ZW50cyA9IGdldCh0aGlzLCAnY3VzdG9tRXZlbnRzJyk7Ci0gICAgICAgICAgICAg
ICAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0KHRoaXMsICdyb290RWxlbWVudCcpOwotICAgICAgICAg
ICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgnZXZlbnRf
ZGlzcGF0Y2hlcjptYWluJyk7Ci0KLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ2V2ZW50RGlz
cGF0Y2hlcicsIGRpc3BhdGNoZXIpOwotICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuc2V0dXAo
Y3VzdG9tRXZlbnRzLCByb290RWxlbWVudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBhIHJvdXRl
ciwgdXNlIGl0IHRvIHJvdXRlIHRvIHRoZSBjdXJyZW50IFVSTCwgYW5kCi0gICAgICAgICAgICAg
ICAgICAgIHRyaWdnZXIgYSBuZXcgY2FsbCB0byBgcm91dGVgIHdoZW5ldmVyIHRoZSBVUkwgY2hh
bmdlcy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIHN0YXJ0Um91dGluZwotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcm91
dGVyIHtFbWJlci5Sb3V0ZXJ9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc3Rh
cnRSb3V0aW5nOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdGhp
cy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgncm91dGVyOm1haW4nKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJvdXRlcikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcm91dGVyLnN0YXJ0Um91dGluZygpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgaGFuZGxlVVJMOiBmdW5jdGlvbih1cmwpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgncm91dGVyOm1h
aW4nKTsKLQotICAgICAgICAgICAgICAgIHJvdXRlci5oYW5kbGVVUkwodXJsKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDYWxsZWQgd2hl
biB0aGUgQXBwbGljYXRpb24gaGFzIGJlY29tZSByZWFkeS4KLSAgICAgICAgICAgICAgICAgICAg
VGhlIGNhbGwgd2lsbCBiZSBkZWxheWVkIHVudGlsIHRoZSBET00gaGFzIGJlY29tZSByZWFkeS4K
LQotICAgICAgICAgICAgICAgICAgICBAZXZlbnQgcmVhZHkKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICByZWFkeTogSywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBkZXByZWNhdGVkIFVzZSAnUmVzb2x2ZXInIGluc3RlYWQKLSAgICAgICAgICAgICAg
ICAgICAgU2V0IHRoaXMgdG8gcHJvdmlkZSBhbiBhbHRlcm5hdGUgY2xhc3MgdG8gYEVtYmVyLkRl
ZmF1bHRSZXNvbHZlcmAKLQotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSByZXNvbHZl
cgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVyOiBudWxsLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdG8gcHJvdmlkZSBh
biBhbHRlcm5hdGUgY2xhc3MgdG8gYEVtYmVyLkRlZmF1bHRSZXNvbHZlcmAKLQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgcmVzb2x2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBSZXNvbHZlcjogbnVsbCwKLQotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVyLkJPT1RFRCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIC8vIEVuc3VyZSBkZWFjdGl2YXRpb24gb2Ygcm91dGVzIGJlZm9yZSBvYmplY3RzIGFy
ZSBkZXN0cm95ZWQKLSAgICAgICAgICAgICAgICB0aGlzLl9fY29udGFpbmVyX18ubG9va3VwKCdy
b3V0ZXI6bWFpbicpLnJlc2V0KCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9fY29udGFpbmVy
X18uZGVzdHJveSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW5pdGlhbGl6ZXI6
IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmlu
aXRpYWxpemVyKG9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdGhlbgotICAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVy
LmRlcHJlY2F0ZSgnRG8gbm90IHVzZSBgLnRoZW5gIG9uIGFuIGluc3RhbmNlIG9mIEVtYmVyLkFw
cGxpY2F0aW9uLiAgUGxlYXNlIHVzZSB0aGUgYC5yZWFkeWAgaG9vayBpbnN0ZWFkLicpOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQXBwbGljYXRpb24ucmVvcGVuQ2xhc3Mo
ewotICAgICAgICAgICAgaW5pdGlhbGl6ZXJzOiB7fSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIEluaXRpYWxpemVyIHJlY2VpdmVzIGFuIG9iamVjdCB3aGljaCBoYXMg
dGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgotICAgICAgICAgICAgICAgICAgICBgbmFtZWAsIGBi
ZWZvcmVgLCBgYWZ0ZXJgLCBgaW5pdGlhbGl6ZWAuIFRoZSBvbmx5IHJlcXVpcmVkIGF0dHJpYnV0
ZSBpcwotICAgICAgICAgICAgICAgICAgICBgaW5pdGlhbGl6ZSwgYWxsIG90aGVycyBhcmUgb3B0
aW9uYWwuCi0KLSAgICAgICAgICAgICAgICAgICAgKiBgbmFtZWAgYWxsb3dzIHlvdSB0byBzcGVj
aWZ5IHVuZGVyIHdoaWNoIG5hbWUgdGhlIGluaXRpYWxpemVyIGlzIHJlZ2lzdGVyZWQuCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBhIHVuaXF1ZSBuYW1lLCBhcyB0cnlpbmcgdG8g
cmVnaXN0ZXIgdHdvIGluaXRpYWxpemVycyB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICBz
YW1lIG5hbWUgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuCi0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0
aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ25hbWVkSW5pdGlhbGl6ZXIn
LAotICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwg
YXBwbGljYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmRlYnVnKCJSdW5u
aW5nIG5hbWVkSW5pdGlhbGl6ZXIhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgKiBgYmVmb3JlYCBhbmQgYGFmdGVyYCBhcmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0
aGlzIGluaXRpYWxpemVyIGlzIHJhbiBwcmlvcgotICAgICAgICAgICAgICAgICAgICBvciBhZnRl
ciB0aGUgb25lIGlkZW50aWZpZWQgYnkgdGhlIHZhbHVlLiBUaGlzIHZhbHVlIGNhbiBiZSBhIHNp
bmdsZSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncywg
cmVmZXJlbmNpbmcgdGhlIGBuYW1lYCBvZiBvdGhlciBpbml0aWFsaXplcnMuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiBvcmRlcmluZyBpbml0aWFsaXplcnMsIHdlIGNyZWF0
ZSBhbiBpbml0aWFsaXplciBuYW1lZCBgZmlyc3RgOgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlh
bGl6ZXIoewotICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmaXJzdCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCBhcHBsaWNhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuZGVidWcoIkZpcnN0IGluaXRpYWxpemVy
ISIpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gREVCVUc6IEZpcnN0IGluaXRpYWxpemVyIQotICAgICAg
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBXZSBhZGQgYW5vdGhlciBp
bml0aWFsaXplciBuYW1lZCBgc2Vjb25kYCwgc3BlY2lmeWluZyB0aGF0IGl0IHNob3VsZCBydW4K
LSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGluaXRpYWxpemVyIG5hbWVkIGBmaXJzdGA6
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgICAgICAg
bmFtZTogJ3NlY29uZCcsCi0gICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6ICdmaXJzdCcsCi0K
LSAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFw
cGxpY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5kZWJ1ZygiU2Vjb25k
IGluaXRpYWxpemVyISIpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gREVCVUc6IEZpcnN0IGluaXRpYWxp
emVyIQotICAgICAgICAgICAgICAgICAgICAvLyBERUJVRzogU2Vjb25kIGluaXRpYWxpemVyIQot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBBZnRlcndhcmRz
IHdlIGFkZCBhIGZ1cnRoZXIgaW5pdGlhbGl6ZXIgbmFtZWQgYHByZWAsIHRoaXMgdGltZSBzcGVj
aWZ5aW5nCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgaXQgc2hvdWxkIHJ1biBiZWZvcmUgdGhl
IGluaXRpYWxpemVyIG5hbWVkIGBmaXJzdGA6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXpl
cih7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ByZScsCi0gICAgICAgICAgICAgICAg
ICAgICAgYmVmb3JlOiAnZmlyc3QnLAotCi0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24oY29udGFpbmVyLCBhcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuZGVidWcoIlByZSBpbml0aWFsaXplciEiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IERFQlVHOiBQcmUgaW5pdGlhbGl6ZXIhCi0gICAgICAgICAgICAgICAgICAgIC8vIERFQlVHOiBG
aXJzdCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgLy8gREVCVUc6IFNlY29uZCBp
bml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAg
ICAgRmluYWxseSB3ZSBhZGQgYW4gaW5pdGlhbGl6ZXIgbmFtZWQgYHBvc3RgLCBzcGVjaWZ5aW5n
IGl0IHNob3VsZCBydW4gYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgYm90aCB0aGUgYGZpcnN0
YCBhbmQgdGhlIGBzZWNvbmRgIGluaXRpYWxpemVyczoKLQotICAgICAgICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLkFwcGxpY2F0aW9uLmluaXRp
YWxpemVyKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncG9zdCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgYWZ0ZXI6IFsnZmlyc3QnLCAnc2Vjb25kJ10sCi0KLSAgICAgICAgICAgICAg
ICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5kZWJ1ZygiUG9zdCBpbml0aWFsaXplciEiKTsK
LSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIERFQlVHOiBQcmUgaW5pdGlhbGl6ZXIhCi0gICAgICAgICAgICAg
ICAgICAgIC8vIERFQlVHOiBGaXJzdCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAg
Ly8gREVCVUc6IFNlY29uZCBpbml0aWFsaXplciEKLSAgICAgICAgICAgICAgICAgICAgLy8gREVC
VUc6IFBvc3QgaW5pdGlhbGl6ZXIhCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgICogYGluaXRpYWxpemVgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBy
ZWNlaXZlcyB0d28gYXJndW1lbnRzLCBgY29udGFpbmVyYAotICAgICAgICAgICAgICAgICAgICBh
bmQgYGFwcGxpY2F0aW9uYCBvbiB3aGljaCB5b3UgY2FuIG9wZXJhdGUuCi0KLSAgICAgICAgICAg
ICAgICAgICAgRXhhbXBsZSBvZiB1c2luZyBgY29udGFpbmVyYCB0byBwcmVsb2FkIGRhdGEgaW50
byB0aGUgc3RvcmU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAg
ICAgICAgICAgICAgbmFtZTogInByZWxvYWQtZGF0YSIsCi0KLSAgICAgICAgICAgICAgICAgICAg
ICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBjb250YWluZXIubG9va3VwKCdzdG9yZTptYWlu
Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5wdXNoUGF5bG9hZChwcmVsb2FkZWRE
YXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlIG9m
IHVzaW5nIGBhcHBsaWNhdGlvbmAgdG8gcmVnaXN0ZXIgYW4gYWRhcHRlcjoKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLkFwcGxp
Y2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXBpLWFk
YXB0ZXInLAotCi0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29u
dGFpbmVyLCBhcHBsaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRp
b24ucmVnaXN0ZXIoJ2FwaS1hZGFwdGVyOm1haW4nLCBBcGlBZGFwdGVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGluaXRpYWxpemVyCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSBpbml0aWFsaXplciB7T2JqZWN0fQotICAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBpbml0aWFsaXplcjogZnVuY3Rpb24oaW5pdGlhbGl6ZXIpIHsK
LSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXplciBiZWlu
ZyBhZGRlZCB0byBhIHN1YmNsYXNzLCB3ZSBhcmUgZ29pbmcgdG8gcmVvcGVuIHRoZSBjbGFzcwot
ICAgICAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgbmV3IGBpbml0aWFsaXpl
cnNgIG9iamVjdCwgd2hpY2ggZXh0ZW5kcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MnIHVzaW5nCi0g
ICAgICAgICAgICAgICAgLy8gcHJvdG90eXBhbCBpbmhlcml0YW5jZS4gV2l0aG91dCB0aGlzLCBh
dHRlbXB0aW5nIHRvIGFkZCBpbml0aWFsaXplcnMgdG8gdGhlIHN1YmNsYXNzIHdvdWxkCi0gICAg
ICAgICAgICAgICAgLy8gcG9sbHV0ZSB0aGUgcGFyZW50IGNsYXNzIGFzIHdlbGwgYXMgb3RoZXIg
c3ViY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zdXBlcmNsYXNzLmluaXRpYWxp
emVycyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc3VwZXJjbGFzcy5pbml0aWFsaXplcnMgPT09IHRo
aXMuaW5pdGlhbGl6ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVvcGVuQ2xhc3Mo
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzOiBjcmVhdGUodGhpcy5pbml0
aWFsaXplcnMpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhlIGluaXRpYWxpemVyICciICsgaW5pdGlh
bGl6ZXIubmFtZSArICInIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCIsICF0aGlzLmluaXRp
YWxpemVyc1tpbml0aWFsaXplci5uYW1lXSk7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJBbiBpbml0aWFsaXplciBjYW5ub3QgYmUgcmVnaXN0ZXJlZCB3aXRob3V0IGFuIGluaXRpYWxp
emUgZnVuY3Rpb24iLCBjYW5JbnZva2UoaW5pdGlhbGl6ZXIsICdpbml0aWFsaXplJykpOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplcnNbaW5pdGlhbGl6ZXIubmFtZV0gPSBpbml0
aWFsaXplcjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBUaGlzIGNyZWF0ZXMgYSBjb250YWluZXIgd2l0aCB0aGUgZGVmYXVsdCBFbWJlciBu
YW1pbmcgY29udmVudGlvbnMuCi0KLSAgICAgICAgICAgICAgICAgICAgSXQgYWxzbyBjb25maWd1
cmVzIHRoZSBjb250YWluZXI6Ci0KLSAgICAgICAgICAgICAgICAgICAgKiByZWdpc3RlcmVkIHZp
ZXdzIGFyZSBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhleSBhcmUgbG9va2VkIHVwICh0aGV5IGFyZQot
ICAgICAgICAgICAgICAgICAgICAgIG5vdCBzaW5nbGV0b25zKQotICAgICAgICAgICAgICAgICAg
ICAqIHJlZ2lzdGVyZWQgdGVtcGxhdGVzIGFyZSBub3QgZmFjdG9yaWVzOyB0aGUgcmVnaXN0ZXJl
ZCB2YWx1ZSBpcwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRpcmVjdGx5LgotICAg
ICAgICAgICAgICAgICAgICAqIHRoZSByb3V0ZXIgcmVjZWl2ZXMgdGhlIGFwcGxpY2F0aW9uIGFz
IGl0cyBgbmFtZXNwYWNlYCBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAqIGFsbCBjb250
cm9sbGVycyByZWNlaXZlIHRoZSByb3V0ZXIgYXMgdGhlaXIgYHRhcmdldGAgYW5kIGBjb250cm9s
bGVyc2AKLSAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAg
ICAgICogYWxsIGNvbnRyb2xsZXJzIHJlY2VpdmUgdGhlIGFwcGxpY2F0aW9uIGFzIHRoZWlyIGBu
YW1lc3BhY2VgIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICogdGhlIGFwcGxpY2F0aW9u
IHZpZXcgcmVjZWl2ZXMgdGhlIGFwcGxpY2F0aW9uIGNvbnRyb2xsZXIgYXMgaXRzCi0gICAgICAg
ICAgICAgICAgICAgICAgYGNvbnRyb2xsZXJgIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAg
ICogdGhlIGFwcGxpY2F0aW9uIHZpZXcgcmVjZWl2ZXMgdGhlIGFwcGxpY2F0aW9uIHRlbXBsYXRl
IGFzIGl0cwotICAgICAgICAgICAgICAgICAgICAgIGBkZWZhdWx0VGVtcGxhdGVgIHByb3BlcnR5
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBidWlsZENvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuQXBwbGljYXRpb259IG5hbWVzcGFjZSB0aGUgYXBw
bGljYXRpb24gdG8gYnVpbGQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyIGZv
ci4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29udGFpbmVyfSB0aGUgYnVp
bHQgY29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnVpbGRDb250
YWluZXI6IGZ1bmN0aW9uKG5hbWVzcGFjZSkgewotICAgICAgICAgICAgICAgIHZhciBjb250YWlu
ZXIgPSBuZXcgQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICBDb250YWluZXIuZGVmYXVs
dENvbnRhaW5lciA9IG5ldyBEZXByZWNhdGVkQ29udGFpbmVyKGNvbnRhaW5lcik7Ci0KLSAgICAg
ICAgICAgICAgICBjb250YWluZXIuc2V0ID0gc2V0OwotICAgICAgICAgICAgICAgIGNvbnRhaW5l
ci5yZXNvbHZlciA9IHJlc29sdmVyRm9yKG5hbWVzcGFjZSk7Ci0gICAgICAgICAgICAgICAgY29u
dGFpbmVyLm5vcm1hbGl6ZSA9IGNvbnRhaW5lci5yZXNvbHZlci5ub3JtYWxpemU7Ci0gICAgICAg
ICAgICAgICAgY29udGFpbmVyLmRlc2NyaWJlID0gY29udGFpbmVyLnJlc29sdmVyLmRlc2NyaWJl
OwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5tYWtlVG9TdHJpbmcgPSBjb250YWluZXIucmVz
b2x2ZXIubWFrZVRvU3RyaW5nOwotCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLm9wdGlvbnNG
b3JUeXBlKCdjb21wb25lbnQnLCB7Ci0gICAgICAgICAgICAgICAgICAgIHNpbmdsZXRvbjogZmFs
c2UgCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLm9wdGlv
bnNGb3JUeXBlKCd2aWV3JywgewotICAgICAgICAgICAgICAgICAgICBzaW5nbGV0b246IGZhbHNl
IAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5vcHRpb25z
Rm9yVHlwZSgndGVtcGxhdGUnLCB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlOiBm
YWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIub3B0
aW9uc0ZvclR5cGUoJ2hlbHBlcicsIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGU6
IGZhbHNlIAotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgY29udGFpbmVy
LnJlZ2lzdGVyKCdhcHBsaWNhdGlvbjptYWluJywgbmFtZXNwYWNlLCB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignY29udHJvbGxlcjpiYXNpYycsIENvbnRyb2xs
ZXIsIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGU6IGZhbHNlIAotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignY29udHJvbGxl
cjpvYmplY3QnLCBPYmplY3RDb250cm9sbGVyLCB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3Rh
bnRpYXRlOiBmYWxzZSAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb250
YWluZXIucmVnaXN0ZXIoJ2NvbnRyb2xsZXI6YXJyYXknLCBBcnJheUNvbnRyb2xsZXIsIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGU6IGZhbHNlIAotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcigncm91dGU6YmFzaWMnLCBSb3V0
ZSwgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZTogZmFsc2UgCi0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdldmVudF9kaXNw
YXRjaGVyOm1haW4nLCBFdmVudERpc3BhdGNoZXIpOwotCi0gICAgICAgICAgICAgICAgY29udGFp
bmVyLnJlZ2lzdGVyKCdyb3V0ZXI6bWFpbicsIFJvdXRlcik7Ci0gICAgICAgICAgICAgICAgY29u
dGFpbmVyLmluamVjdGlvbigncm91dGVyOm1haW4nLCAnbmFtZXNwYWNlJywgJ2FwcGxpY2F0aW9u
Om1haW4nKTsKLQotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignbG9jYXRpb246
YXV0bycsIEF1dG9Mb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVy
KCdsb2NhdGlvbjpoYXNoJywgSGFzaExvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBjb250YWlu
ZXIucmVnaXN0ZXIoJ2xvY2F0aW9uOmhpc3RvcnknLCBIaXN0b3J5TG9jYXRpb24pOwotICAgICAg
ICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignbG9jYXRpb246bm9uZScsIE5vbmVMb2NhdGlv
bik7Ci0KLSAgICAgICAgICAgICAgICBjb250YWluZXIuaW5qZWN0aW9uKCdjb250cm9sbGVyJywg
J3RhcmdldCcsICdyb3V0ZXI6bWFpbicpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmpl
Y3Rpb24oJ2NvbnRyb2xsZXInLCAnbmFtZXNwYWNlJywgJ2FwcGxpY2F0aW9uOm1haW4nKTsKLQot
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignLWJ1Y2tldC1jYWNoZTptYWluJywg
QnVja2V0Q2FjaGUpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ3JvdXRl
cicsICdfYnVja2V0Q2FjaGUnLCAnLWJ1Y2tldC1jYWNoZTptYWluJyk7Ci0gICAgICAgICAgICAg
ICAgY29udGFpbmVyLmluamVjdGlvbigncm91dGUnLCAnX2J1Y2tldENhY2hlJywgJy1idWNrZXQt
Y2FjaGU6bWFpbicpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ2NvbnRy
b2xsZXInLCAnX2J1Y2tldENhY2hlJywgJy1idWNrZXQtY2FjaGU6bWFpbicpOwotCi0gICAgICAg
ICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbigncm91dGUnLCAncm91dGVyJywgJ3JvdXRlcjpt
YWluJyk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbignbG9jYXRpb24nLCAn
cm9vdFVSTCcsICctbG9jYXRpb24tc2V0dGluZzpyb290LXVybCcpOwotCi0gICAgICAgICAgICAg
ICAgLy8gREVCVUdHSU5HCi0gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdyZXNv
bHZlci1mb3ItZGVidWdnaW5nOm1haW4nLCBjb250YWluZXIucmVzb2x2ZXIuX19yZXNvbHZlcl9f
LCB7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSAKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIuaW5qZWN0aW9uKCdjb250YWluZXIt
ZGVidWctYWRhcHRlcjptYWluJywgJ3Jlc29sdmVyJywgJ3Jlc29sdmVyLWZvci1kZWJ1Z2dpbmc6
bWFpbicpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbmplY3Rpb24oJ2RhdGEtYWRhcHRl
cjptYWluJywgJ2NvbnRhaW5lckRlYnVnQWRhcHRlcicsICdjb250YWluZXItZGVidWctYWRhcHRl
cjptYWluJyk7Ci0gICAgICAgICAgICAgICAgLy8gQ3VzdG9tIHJlc29sdmVyIGF1dGhvcnMgbWF5
IHdhbnQgdG8gcmVnaXN0ZXIgdGhlaXIgb3duIENvbnRhaW5lckRlYnVnQWRhcHRlciB3aXRoIHRo
aXMga2V5Ci0KLSAgICAgICAgICAgICAgICAvLyBFUzZUT0RPOiByZXNvbHZlIHRoaXMgdmlhIGlt
cG9ydCBvbmNlIGVtYmVyLWFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgRVM2J2VkCi0gICAgICAgICAg
ICAgICAgaWYgKCFDb250YWluZXJEZWJ1Z0FkYXB0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Q29udGFpbmVyRGVidWdBZGFwdGVyID0gcmVxdWlyZU1vZHVsZSgnZW1iZXItZXh0ZW5zaW9uLXN1
cHBvcnQvY29udGFpbmVyX2RlYnVnX2FkYXB0ZXInKVsnZGVmYXVsdCddOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoJ2NvbnRhaW5lci1kZWJ1
Zy1hZGFwdGVyOm1haW4nLCBDb250YWluZXJEZWJ1Z0FkYXB0ZXIpOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnRhaW5lcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZGVmaW5lcyB0aGUgZGVmYXVsdCBs
b29rdXAgcnVsZXMgZm9yIGNvbnRhaW5lciBsb29rdXBzOgotCi0gICAgICAgICAgICAgICogdGVt
cGxhdGVzIGFyZSBsb29rZWQgdXAgb24gYEVtYmVyLlRFTVBMQVRFU2AKLSAgICAgICAgICAgICAg
KiBvdGhlciBuYW1lcyBhcmUgbG9va2VkIHVwIG9uIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBjbGFz
c2lmeWluZyB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYGNvbnRyb2xs
ZXI6cG9zdGAgbG9va3MgdXAgYEFwcC5Qb3N0Q29udHJvbGxlcmAgYnkgZGVmYXVsdC4KLSAgICAg
ICAgICAgICAgKiBpZiB0aGUgZGVmYXVsdCBsb29rdXAgZmFpbHMsIGxvb2sgZm9yIHJlZ2lzdGVy
ZWQgY2xhc3NlcyBvbiB0aGUgY29udGFpbmVyCi0KLSAgICAgICAgICAgICAgVGhpcyBhbGxvd3Mg
dGhlIGFwcGxpY2F0aW9uIHRvIHJlZ2lzdGVyIGRlZmF1bHQgaW5qZWN0aW9ucyBpbiB0aGUgY29u
dGFpbmVyCi0gICAgICAgICAgICAgIHRoYXQgY291bGQgYmUgb3ZlcnJpZGRlbiBieSB0aGUgbm9y
bWFsIG5hbWluZyBjb252ZW50aW9uLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAg
ICAgICAgIEBtZXRob2QgcmVzb2x2ZXJGb3IKLSAgICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5O
YW1lc3BhY2V9IG5hbWVzcGFjZSB0aGUgbmFtZXNwYWNlIHRvIGxvb2sgZm9yIGNsYXNzZXMKLSAg
ICAgICAgICAgICAgQHJldHVybiB7Kn0gdGhlIHJlc29sdmVkIHZhbHVlIGZvciBhIGdpdmVuIGxv
b2t1cAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZXJGb3IobmFtZXNw
YWNlKSB7Ci0gICAgICAgICAgICBpZiAobmFtZXNwYWNlLmdldCgncmVzb2x2ZXInKSkgewotICAg
ICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnQXBwbGljYXRpb24ucmVzb2x2ZXIgaXMgZGVw
cmVjYXRlZCBpbiBmYXZvciBvZiBBcHBsaWNhdGlvbi5SZXNvbHZlcicsIGZhbHNlKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIFJlc29sdmVyQ2xhc3MgPSBuYW1lc3BhY2UuZ2V0
KCdyZXNvbHZlcicpIHx8IG5hbWVzcGFjZS5nZXQoJ1Jlc29sdmVyJykgfHwgRGVmYXVsdFJlc29s
dmVyOwotICAgICAgICAgICAgdmFyIHJlc29sdmVyID0gUmVzb2x2ZXJDbGFzcy5jcmVhdGUoewot
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlCi0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZShmdWxsTmFtZSkgewotICAgICAgICAgICAgICAg
IHJldHVybiByZXNvbHZlci5yZXNvbHZlKGZ1bGxOYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmVzb2x2ZS5kZXNjcmliZSA9IGZ1bmN0aW9uKGZ1bGxOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc29sdmVyLmxvb2t1cERlc2NyaXB0aW9uKGZ1bGxOYW1lKTsKLSAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHJlc29sdmUubWFrZVRvU3RyaW5nID0gZnVuY3Rp
b24oZmFjdG9yeSwgZnVsbE5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIu
bWFrZVRvU3RyaW5nKGZhY3RvcnksIGZ1bGxOYW1lKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIHJlc29sdmUubm9ybWFsaXplID0gZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzb2x2ZXIubm9ybWFsaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXNvbHZlci5ub3JtYWxpemUoZnVsbE5hbWUpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnVGhlIFJlc29sdmVyIHNo
b3VsZCBub3cgcHJvdmlkZSBhIFwnbm9ybWFsaXplXCcgZnVuY3Rpb24nLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICByZXNvbHZlLl9fcmVzb2x2ZXJfXyA9IHJlc29sdmVy
OwotCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZTsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBBcHBsaWNhdGlvbjsKLSAgICB9KTsKLSAgICBkZWZpbmUo
ImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9kYWciLAotICAgIFsiZW1iZXItbWV0YWwvZXJyb3Ii
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIGZ1bmN0aW9uIHZpc2l0KHZlcnRleCwg
Zm4sIHZpc2l0ZWQsIHBhdGgpIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gdmVydGV4Lm5hbWU7
Ci0gICAgICAgICAgICB2YXIgdmVydGljZXMgPSB2ZXJ0ZXguaW5jb21pbmc7Ci0gICAgICAgICAg
ICB2YXIgbmFtZXMgPSB2ZXJ0ZXguaW5jb21pbmdOYW1lczsKLSAgICAgICAgICAgIHZhciBsZW4g
PSBuYW1lcy5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgaTsKLQotICAgICAgICAgICAgaWYgKCF2
aXNpdGVkKSB7Ci0gICAgICAgICAgICAgICAgdmlzaXRlZCA9IHt9OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKCFwYXRoKSB7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IFtdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZpc2l0ZWQuaGFzT3duUHJvcGVydHkobmFtZSkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBw
YXRoLnB1c2gobmFtZSk7Ci0gICAgICAgICAgICB2aXNpdGVkW25hbWVdID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIHZpc2l0
KHZlcnRpY2VzW25hbWVzW2ldXSwgZm4sIHZpc2l0ZWQsIHBhdGgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZm4odmVydGV4LCBwYXRoKTsKLSAgICAgICAgICAgIHBhdGgucG9wKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBEQUcoKSB7Ci0gICAgICAgICAgICB0aGlzLm5h
bWVzID0gW107Ci0gICAgICAgICAgICB0aGlzLnZlcnRpY2VzID0ge307Ci0gICAgICAgIH0KLQot
ICAgICAgICBEQUcucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAg
IGlmICghbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh0aGlzLnZlcnRpY2VzLmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGljZXNbbmFtZV07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB2YXIgdmVydGV4ID0gewotICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0g
ICAgICAgICAgICAgICAgaW5jb21pbmc6IHt9LAotICAgICAgICAgICAgICAgIGluY29taW5nTmFt
ZXM6IFtdLAotICAgICAgICAgICAgICAgIGhhc091dGdvaW5nOiBmYWxzZSwKLSAgICAgICAgICAg
ICAgICB2YWx1ZTogbnVsbAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRoaXMudmVydGlj
ZXNbbmFtZV0gPSB2ZXJ0ZXg7Ci0gICAgICAgICAgICB0aGlzLm5hbWVzLnB1c2gobmFtZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdmVydGV4OwotICAgICAgICB9OwotCi0gICAgICAgIERBRy5wcm90
b3R5cGUubWFwID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMuYWRk
KG5hbWUpLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgREFHLnByb3RvdHlw
ZS5hZGRFZGdlID0gZnVuY3Rpb24oZnJvbU5hbWUsIHRvTmFtZSkgewotICAgICAgICAgICAgaWYg
KCFmcm9tTmFtZSB8fCAhdG9OYW1lIHx8IGZyb21OYW1lID09PSB0b05hbWUpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZnJvbSA9IHRo
aXMuYWRkKGZyb21OYW1lKSwgdG8gPSB0aGlzLmFkZCh0b05hbWUpOwotICAgICAgICAgICAgaWYg
KHRvLmluY29taW5nLmhhc093blByb3BlcnR5KGZyb21OYW1lKSkgewotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrQ3ljbGUo
dmVydGV4LCBwYXRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcnRleC5uYW1lID09PSB0b05h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoImN5Y2xlIGRl
dGVjdGVkOiAiICsgdG9OYW1lICsgIiA8LSAiICsgcGF0aC5qb2luKCIgPC0gIikpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpc2l0KGZyb20sIGNoZWNr
Q3ljbGUpOwotICAgICAgICAgICAgZnJvbS5oYXNPdXRnb2luZyA9IHRydWU7Ci0gICAgICAgICAg
ICB0by5pbmNvbWluZ1tmcm9tTmFtZV0gPSBmcm9tOwotICAgICAgICAgICAgdG8uaW5jb21pbmdO
YW1lcy5wdXNoKGZyb21OYW1lKTsKLSAgICAgICAgfTsKLQotICAgICAgICBEQUcucHJvdG90eXBl
LnRvcHNvcnQgPSBmdW5jdGlvbihmbikgewotICAgICAgICAgICAgdmFyIHZpc2l0ZWQgPSB7fTsK
LSAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7Ci0gICAgICAgICAgICB2
YXIgbmFtZXMgPSB0aGlzLm5hbWVzOwotICAgICAgICAgICAgdmFyIGxlbiA9IG5hbWVzLmxlbmd0
aDsKLSAgICAgICAgICAgIHZhciBpLCB2ZXJ0ZXg7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIHZlcnRleCA9IHZlcnRpY2VzW25hbWVz
W2ldXTsKLSAgICAgICAgICAgICAgICBpZiAoIXZlcnRleC5oYXNPdXRnb2luZykgewotICAgICAg
ICAgICAgICAgICAgICB2aXNpdCh2ZXJ0ZXgsIGZuLCB2aXNpdGVkKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgREFHLnByb3RvdHlwZS5h
ZGRFZGdlcyA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBiZWZvcmUsIGFmdGVyKSB7Ci0gICAgICAg
ICAgICB2YXIgaTsKLSAgICAgICAgICAgIHRoaXMubWFwKG5hbWUsIHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChiZWZvcmUpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJlZm9yZSA9PT0g
J3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFZGdlKG5hbWUsIGJlZm9y
ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGJlZm9yZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hZGRFZGdlKG5hbWUsIGJlZm9yZVtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWZ0ZXIpIHsK
LSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFmdGVyID09PSAnc3RyaW5nJykgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmFkZEVkZ2UoYWZ0ZXIsIG5hbWUpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlci5sZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFZGdlKGFmdGVyW2ld
LCBuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0g
REFHOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2RlcHJl
Y2F0ZWQtY29udGFpbmVyIiwKLSAgICBbImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIGZ1bmN0aW9uIERlcHJlY2F0
ZWRDb250YWluZXIoY29udGFpbmVyKSB7Ci0gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBj
b250YWluZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBEZXByZWNhdGVkQ29udGFpbmVyLmRlcHJl
Y2F0ZSA9IGZ1bmN0aW9uKG1ldGhvZCkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7Ci0KLSAg
ICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ1VzaW5nIHRoZSBkZWZhdWx0Q29udGFpbmVy
IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFtkZWZhdWx0Q29udGFpbmVyIycgKyBtZXRob2QgKyAn
XSBzZWU6IGh0dHA6Ly9naXQuaW8vRUtQcG5BJywgZmFsc2UpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBjb250YWluZXJbbWV0aG9kXS5hcHBseShjb250YWluZXIsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICB9OwotICAgICAgICB9OwotCi0gICAgICAgIERlcHJlY2F0ZWRDb250YWluZXIucHJv
dG90eXBlID0gewotICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCwKLSAgICAgICAgICAgIGxv
b2t1cDogRGVwcmVjYXRlZENvbnRhaW5lci5kZXByZWNhdGUoJ2xvb2t1cCcpLAotICAgICAgICAg
ICAgcmVzb2x2ZTogRGVwcmVjYXRlZENvbnRhaW5lci5kZXByZWNhdGUoJ3Jlc29sdmUnKSwKLSAg
ICAgICAgICAgIHJlZ2lzdGVyOiBEZXByZWNhdGVkQ29udGFpbmVyLmRlcHJlY2F0ZSgncmVnaXN0
ZXInKQotICAgICAgICB9OwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBEZXBy
ZWNhdGVkQ29udGFpbmVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItYXBwbGljYXRpb24v
c3lzdGVtL3Jlc29sdmVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL2xvZ2dlciIsICJlbWJlci1ydW50aW1lL3N5c3Rl
bS9zdHJpbmciLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRpbWUv
c3lzdGVtL25hbWVzcGFjZSIsICJlbWJlci1oYW5kbGViYXJzIiwgImV4cG9ydHMiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19f
LCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2Rl
cGVuZGVuY3k3X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLWFwcGxpY2F0aW9uCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5URU1QTEFURVMs
IEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAg
ICAgICAgdmFyIExvZ2dlciA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgY2xhc3NpZnkgPSBfX2RlcGVuZGVuY3k0X18uY2xhc3NpZnk7Ci0gICAgICAgIHZhciBjYXBp
dGFsaXplID0gX19kZXBlbmRlbmN5NF9fLmNhcGl0YWxpemU7Ci0gICAgICAgIHZhciBkZWNhbWVs
aXplID0gX19kZXBlbmRlbmN5NF9fLmRlY2FtZWxpemU7Ci0gICAgICAgIHZhciBFbWJlck9iamVj
dCA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTmFtZXNwYWNlID0g
X19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMg
PSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgUmVzb2x2ZXIgPSBF
bWJlck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIEFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZW4gaXQgaXMK
LSAgICAgICAgICAgICAgICAgICAgY3JlYXRlZC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgbmFtZXNwYWNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmFtZXNw
YWNlOiBudWxsLAotICAgICAgICAgICAgbm9ybWFsaXplOiBFbWJlci5yZXF1aXJlZChGdW5jdGlv
biksCi0gICAgICAgICAgICByZXNvbHZlOiBFbWJlci5yZXF1aXJlZChGdW5jdGlvbiksCi0gICAg
ICAgICAgICBwYXJzZU5hbWU6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKSwKLSAgICAgICAgICAg
IGxvb2t1cERlc2NyaXB0aW9uOiBFbWJlci5yZXF1aXJlZChGdW5jdGlvbiksCi0gICAgICAgICAg
ICBtYWtlVG9TdHJpbmc6IEVtYmVyLnJlcXVpcmVkKEZ1bmN0aW9uKSwKLSAgICAgICAgICAgIHJl
c29sdmVPdGhlcjogRW1iZXIucmVxdWlyZWQoRnVuY3Rpb24pLAotICAgICAgICAgICAgX2xvZ0xv
b2t1cDogRW1iZXIucmVxdWlyZWQoRnVuY3Rpb24pCi0gICAgICAgIH0pOwotICAgICAgICBfX2V4
cG9ydHNfXy5SZXNvbHZlciA9IFJlc29sdmVyOwotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
VGhlIERlZmF1bHRSZXNvbHZlciBkZWZpbmVzIHRoZSBkZWZhdWx0IGxvb2t1cCBydWxlcyB0byBy
ZXNvbHZlCi0gICAgICAgICAgICAgIGNvbnRhaW5lciBsb29rdXBzIGJlZm9yZSBjb25zdWx0aW5n
IHRoZSBjb250YWluZXIgZm9yIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgICAgaXRlbXM6Ci0KLSAg
ICAgICAgICAgICAgKiB0ZW1wbGF0ZXMgYXJlIGxvb2tlZCB1cCBvbiBgRW1iZXIuVEVNUExBVEVT
YAotICAgICAgICAgICAgICAqIG90aGVyIG5hbWVzIGFyZSBsb29rZWQgdXAgb24gdGhlIGFwcGxp
Y2F0aW9uIGFmdGVyIGNvbnZlcnRpbmcKLSAgICAgICAgICAgICAgICB0aGUgbmFtZS4gRm9yIGV4
YW1wbGUsIGBjb250cm9sbGVyOnBvc3RgIGxvb2tzIHVwCi0gICAgICAgICAgICAgICAgYEFwcC5Q
b3N0Q29udHJvbGxlcmAgYnkgZGVmYXVsdC4KLSAgICAgICAgICAgICAgKiB0aGVyZSBhcmUgc29t
ZSBudWFuY2VzIChzZWUgZXhhbXBsZXMgYmVsb3cpCi0KLSAgICAgICAgICAgICAgIyMjIEhvdyBS
ZXNvbHZpbmcgV29ya3MKLQotICAgICAgICAgICAgICBUaGUgY29udGFpbmVyIGNhbGxzIHRoaXMg
b2JqZWN0J3MgYHJlc29sdmVgIG1ldGhvZCB3aXRoIHRoZQotICAgICAgICAgICAgICBgZnVsbE5h
bWVgIGFyZ3VtZW50LgotCi0gICAgICAgICAgICAgIEl0IGZpcnN0IHBhcnNlcyB0aGUgZnVsbE5h
bWUgaW50byBhbiBvYmplY3QgdXNpbmcgYHBhcnNlTmFtZWAuCi0KLSAgICAgICAgICAgICAgVGhl
biBpdCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHR5cGUtc3BlY2lmaWMgaW5zdGFuY2UK
LSAgICAgICAgICAgICAgbWV0aG9kIG9mIHRoZSBmb3JtIGByZXNvbHZlW1R5cGVdYCBhbmQgY2Fs
bHMgaXQgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICBGb3IgZXhhbXBsZSBpZiBpdCB3YXMg
cmVzb2x2aW5nICd0ZW1wbGF0ZTpwb3N0JywgaXQgd291bGQgY2FsbAotICAgICAgICAgICAgICB0
aGUgYHJlc29sdmVUZW1wbGF0ZWAgbWV0aG9kLgotCi0gICAgICAgICAgICAgIEl0cyBsYXN0IHJl
c29ydCBpcyB0byBjYWxsIHRoZSBgcmVzb2x2ZU90aGVyYCBtZXRob2QuCi0KLSAgICAgICAgICAg
ICAgVGhlIG1ldGhvZHMgb2YgdGhpcyBvYmplY3QgYXJlIGRlc2lnbmVkIHRvIGJlIGVhc3kgdG8g
b3ZlcnJpZGUKLSAgICAgICAgICAgICAgaW4gYSBzdWJjbGFzcy4gRm9yIGV4YW1wbGUsIHlvdSBj
b3VsZCBlbmhhbmNlIGhvdyBhIHRlbXBsYXRlCi0gICAgICAgICAgICAgIGlzIHJlc29sdmVkIGxp
a2Ugc286Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAg
PSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoewotICAgICAgICAgICAgICAgIFJlc29sdmVyOiBF
bWJlci5EZWZhdWx0UmVzb2x2ZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgIHJlc29sdmVU
ZW1wbGF0ZTogZnVuY3Rpb24ocGFyc2VkTmFtZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
cmVzb2x2ZWRUZW1wbGF0ZSA9IHRoaXMuX3N1cGVyKHBhcnNlZE5hbWUpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzb2x2ZWRUZW1wbGF0ZSkgeyByZXR1cm4gcmVzb2x2ZWRUZW1wbGF0ZTsg
fQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuVEVNUExBVEVTWydub3RfZm91bmQn
XTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBv
ZiBob3cgbmFtZXMgYXJlIHJlc29sdmVkOgotCi0gICAgICAgICAgICAgIGBgYAotICAgICAgICAg
ICAgICAndGVtcGxhdGU6cG9zdCcgLy89PiBFbWJlci5URU1QTEFURVNbJ3Bvc3QnXQotICAgICAg
ICAgICAgICAndGVtcGxhdGU6cG9zdHMvYnlsaW5lJyAvLz0+IEVtYmVyLlRFTVBMQVRFU1sncG9z
dHMvYnlsaW5lJ10KLSAgICAgICAgICAgICAgJ3RlbXBsYXRlOnBvc3RzLmJ5bGluZScgLy89PiBF
bWJlci5URU1QTEFURVNbJ3Bvc3RzL2J5bGluZSddCi0gICAgICAgICAgICAgICd0ZW1wbGF0ZTpi
bG9nUG9zdCcgLy89PiBFbWJlci5URU1QTEFURVNbJ2Jsb2dQb3N0J10KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgIE9SCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gICBFbWJlci5URU1QTEFURVNbJ2Jsb2dfcG9zdCddCi0gICAgICAgICAgICAgICdj
b250cm9sbGVyOnBvc3QnIC8vPT4gQXBwLlBvc3RDb250cm9sbGVyCi0gICAgICAgICAgICAgICdj
b250cm9sbGVyOnBvc3RzLmluZGV4JyAvLz0+IEFwcC5Qb3N0c0luZGV4Q29udHJvbGxlcgotICAg
ICAgICAgICAgICAnY29udHJvbGxlcjpibG9nL3Bvc3QnIC8vPT4gQmxvZy5Qb3N0Q29udHJvbGxl
cgotICAgICAgICAgICAgICAnY29udHJvbGxlcjpiYXNpYycgLy89PiBFbWJlci5Db250cm9sbGVy
Ci0gICAgICAgICAgICAgICdyb3V0ZTpwb3N0JyAvLz0+IEFwcC5Qb3N0Um91dGUKLSAgICAgICAg
ICAgICAgJ3JvdXRlOnBvc3RzLmluZGV4JyAvLz0+IEFwcC5Qb3N0c0luZGV4Um91dGUKLSAgICAg
ICAgICAgICAgJ3JvdXRlOmJsb2cvcG9zdCcgLy89PiBCbG9nLlBvc3RSb3V0ZQotICAgICAgICAg
ICAgICAncm91dGU6YmFzaWMnIC8vPT4gRW1iZXIuUm91dGUKLSAgICAgICAgICAgICAgJ3ZpZXc6
cG9zdCcgLy89PiBBcHAuUG9zdFZpZXcKLSAgICAgICAgICAgICAgJ3ZpZXc6cG9zdHMuaW5kZXgn
IC8vPT4gQXBwLlBvc3RzSW5kZXhWaWV3Ci0gICAgICAgICAgICAgICd2aWV3OmJsb2cvcG9zdCcg
Ly89PiBCbG9nLlBvc3RWaWV3Ci0gICAgICAgICAgICAgICd2aWV3OmJhc2ljJyAvLz0+IEVtYmVy
LlZpZXcKLSAgICAgICAgICAgICAgJ2Zvbzpwb3N0JyAvLz0+IEFwcC5Qb3N0Rm9vCi0gICAgICAg
ICAgICAgICdtb2RlbDpwb3N0JyAvLz0+IEFwcC5Qb3N0Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIEBjbGFzcyBEZWZhdWx0UmVzb2x2ZXIKLSAgICAgICAgICAgICAgQG5hbWVz
cGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyT2JqZWN0LmV4
dGVuZCh7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIGJl
IHNldCB0byB0aGUgQXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlbiBpdCBpcwotICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBuYW1lc3Bh
Y2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBuYW1lc3BhY2U6IG51bGwsCi0K
LSAgICAgICAgICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc3BsaXQgPSBmdWxsTmFtZS5zcGxpdCgnOicsIDIpLAotICAgICAgICAgICAgICAg
IHR5cGUgPSBzcGxpdFswXSwKLSAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXRbMV07Ci0KLSAg
ICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRyaWVkIHRvIG5vcm1hbGl6ZSBhIGNvbnRhaW5l
ciBuYW1lIHdpdGhvdXQgYSBjb2xvbiAoOikgaW4gaXQuIFlvdSBwcm9iYWJseSB0cmllZCB0byBs
b29rdXAgYSBuYW1lIHRoYXQgZGlkIG5vdCBjb250YWluIGEgdHlwZSwgYSBjb2xvbiwgYW5kIGEg
bmFtZS4gQSBwcm9wZXIgbG9va3VwIG5hbWUgd291bGQgYmUgYHZpZXc6cG9zdGAuIiwgc3BsaXQu
bGVuZ3RoID09PSAyKTsKLQotICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSAndGVtcGxhdGUn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuYW1lOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZignLicpID4gLTEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cLiguKS9nLCBmdW5jdGlvbihtKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uY2hhckF0KDEpLnRvVXBwZXJD
YXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoJ18nKSA+IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXyguKS9nLCBm
dW5jdGlvbihtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uY2hhckF0
KDEpLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlICsgJzonICsg
cmVzdWx0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmdWxsTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
dmlhIHRoZSBjb250YWluZXIncyByZXNvbHZlciBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAg
IEl0IHBhcnNlcyB0aGUgcHJvdmlkZWQgYGZ1bGxOYW1lYCBhbmQgdGhlbiBsb29rcyB1cCBhbmQK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgdGVtcGxhdGUgb3Ig
Y2xhc3MuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNvbHZlCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZSB0aGUgbG9va3VwIHN0cmluZwotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSByZXNvbHZlZCBmYWN0b3J5Ci0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oZnVsbE5h
bWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyc2VkTmFtZSA9IHRoaXMucGFyc2VOYW1lKGZ1
bGxOYW1lKSwKLSAgICAgICAgICAgICAgICByZXNvbHZlTWV0aG9kTmFtZSA9IHBhcnNlZE5hbWUu
cmVzb2x2ZU1ldGhvZE5hbWUsCi0gICAgICAgICAgICAgICAgcmVzb2x2ZWQ7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIShwYXJzZWROYW1lLm5hbWUgJiYgcGFyc2VkTmFtZS50eXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGZ1bGxOYW1lOiBg
JyArIGZ1bGxOYW1lICsgJ2AsIG11c3QgYmUgb2YgdGhlIGZvcm0gYHR5cGU6bmFtZWAgJyk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXNbcmVzb2x2ZU1ldGhv
ZE5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gdGhpc1tyZXNvbHZlTWV0
aG9kTmFtZV0ocGFyc2VkTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKCFyZXNvbHZlZCkgewotICAgICAgICAgICAgICAgICAgICByZXNvbHZlZCA9IHRoaXMu
cmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChwYXJzZWROYW1lLnJvb3QgJiYgcGFyc2VkTmFtZS5yb290LkxPR19SRVNPTFZF
UikgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dMb29rdXAocmVzb2x2ZWQsIHBhcnNl
ZE5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXNv
bHZlZDsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQ29udmVydCB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGZvcm0gJ3R5cGU6bmFtZScgdG8KLSAg
ICAgICAgICAgICAgICAgICAgYSBKYXZhc2NyaXB0IG9iamVjdCB3aXRoIHRoZSBwYXJzZWQgYXNw
ZWN0cyBvZiB0aGUgbmFtZQotICAgICAgICAgICAgICAgICAgICBicm9rZW4gb3V0LgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGZ1bGxOYW1lIHRoZSBsb29rdXAgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgcGFyc2VOYW1lCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGFyc2VO
YW1lOiBmdW5jdGlvbihmdWxsTmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lUGFydHMg
PSBmdWxsTmFtZS5zcGxpdCgnOicpLAotICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lUGFydHNb
MF0sIGZ1bGxOYW1lV2l0aG91dFR5cGUgPSBuYW1lUGFydHNbMV0sCi0gICAgICAgICAgICAgICAg
bmFtZSA9IGZ1bGxOYW1lV2l0aG91dFR5cGUsCi0gICAgICAgICAgICAgICAgbmFtZXNwYWNlID0g
Z2V0KHRoaXMsICduYW1lc3BhY2UnKSwKLSAgICAgICAgICAgICAgICByb290ID0gbmFtZXNwYWNl
OwotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09ICd0ZW1wbGF0ZScgJiYgbmFtZS5pbmRl
eE9mKCcvJykgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IG5hbWUu
c3BsaXQoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0
aCAtIDFdOwotICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXNwYWNlTmFtZSA9IGNhcGl0YWxp
emUocGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJv
b3QgPSBOYW1lc3BhY2UuYnlOYW1lKG5hbWVzcGFjZU5hbWUpOwotCi0gICAgICAgICAgICAgICAg
ICAgIEVtYmVyLmFzc2VydCgnWW91IGFyZSBsb29raW5nIGZvciBhICcgKyBuYW1lICsgJyAnICsg
dHlwZSArICcgaW4gdGhlICcgKyBuYW1lc3BhY2VOYW1lICsgJyBuYW1lc3BhY2UsIGJ1dCB0aGUg
bmFtZXNwYWNlIGNvdWxkIG5vdCBiZSBmb3VuZCcsIHJvb3QpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1l
OiBmdWxsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgZnVsbE5hbWVXaXRob3V0VHlwZTogZnVsbE5hbWVXaXRob3V0VHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgcm9vdDogcm9v
dCwKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU1ldGhvZE5hbWU6ICdyZXNvbHZlJyArIGNs
YXNzaWZ5KHR5cGUpCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUg
ZGVzY3JpcHRpb24gZm9yIGEgZnVsbE5hbWUuIFVzZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAg
ICAgIEFwcGxpY2F0aW9uIG5hbWVzcGFjZSBpbiBhc3NlcnRpb25zIHRvIGRlc2NyaWJlIHRoZQot
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgRW1iZXIg
aXMgbG9va2luZyBmb3IsIHJhdGhlciB0aGFuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5l
ciBrZXlzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lIHRoZSBsb29rdXAgc3RyaW5nCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgbG9va3VwRGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBsb29rdXBEZXNjcmlwdGlvbjogZnVuY3Rpb24oZnVsbE5hbWUpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcGFyc2VkTmFtZSA9IHRoaXMucGFyc2VOYW1lKGZ1bGxOYW1l
KTsKLQotICAgICAgICAgICAgICAgIGlmIChwYXJzZWROYW1lLnR5cGUgPT09ICd0ZW1wbGF0ZScp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0ZW1wbGF0ZSBhdCAnICsgcGFyc2VkTmFt
ZS5mdWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2UoL1wuL2csICcvJyk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gcGFyc2VkTmFtZS5yb290
ICsgJy4nICsgY2xhc3NpZnkocGFyc2VkTmFtZS5uYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAo
cGFyc2VkTmFtZS50eXBlICE9PSAnbW9kZWwnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uICs9IGNsYXNzaWZ5KHBhcnNlZE5hbWUudHlwZSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgbWFrZVRvU3RyaW5nOiBmdW5jdGlvbihmYWN0b3J5LCBmdWxsTmFtZSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgcGFyc2VOYW1l
IG9iamVjdCAob3V0cHV0IGZyb20gYHBhcnNlTmFtZWApLCBhcHBseQotICAgICAgICAgICAgICAg
ICAgICB0aGUgY29udmVudGlvbnMgZXhwZWN0ZWQgYnkgYEVtYmVyLlJvdXRlcmAKLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQKLSAgICAg
ICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgdXNlUm91dGVyTmFtaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgdXNlUm91dGVyTmFtaW5nOiBmdW5jdGlvbihwYXJzZWROYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgcGFyc2VkTmFtZS5uYW1lID0gcGFyc2VkTmFtZS5uYW1lLnJlcGxhY2UoL1wuL2csICdf
Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZE5hbWUubmFtZSA9PT0gJ2Jhc2ljJykgewot
ICAgICAgICAgICAgICAgICAgICBwYXJzZWROYW1lLm5hbWUgPSAnJzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IExvb2sgdXAgdGhlIHRlbXBsYXRlIGluIEVtYmVyLlRFTVBMQVRFUwotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBh
cnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAgICAgICAg
ICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCByZXNvbHZlVGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBy
ZXNvbHZlVGVtcGxhdGU6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2
YXIgdGVtcGxhdGVOYW1lID0gcGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2Uo
L1wuL2csICcvJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoRW1iZXIuVEVNUExBVEVTW3RlbXBs
YXRlTmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLlRFTVBMQVRFU1t0
ZW1wbGF0ZU5hbWVdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRlbXBs
YXRlTmFtZSA9IGRlY2FtZWxpemUodGVtcGxhdGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAo
RW1iZXIuVEVNUExBVEVTW3RlbXBsYXRlTmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEVtYmVyLlRFTVBMQVRFU1t0ZW1wbGF0ZU5hbWVdOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTG9va3Vw
IHRoZSB2aWV3IHVzaW5nIGByZXNvbHZlT3RoZXJgCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
b3RlY3RlZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBh
IHBhcnNlTmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgICAgICAgICAgICAgICAg
ZnVsbE5hbWUgbG9va3VwIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc29s
dmVWaWV3Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVzb2x2ZVZpZXc6IGZ1
bmN0aW9uKHBhcnNlZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnVzZVJvdXRlck5hbWlu
ZyhwYXJzZWROYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3RoZXIo
cGFyc2VkTmFtZSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIExvb2t1cCB0aGUgY29udHJvbGxlciB1c2luZyBgcmVzb2x2ZU90aGVyYAotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAot
ICAgICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCByZXNvbHZlQ29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJlc29sdmVDb250cm9sbGVyOiBmdW5jdGlvbihwYXJzZWROYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy51c2VSb3V0ZXJOYW1pbmcocGFyc2VkTmFtZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUpOwotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBMb29rdXAgdGhlIHJv
dXRlIHVzaW5nIGByZXNvbHZlT3RoZXJgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3RlY3Rl
ZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNl
TmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgICAgICAgICAgICAgICAgZnVsbE5h
bWUgbG9va3VwIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmVSb3V0
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVSb3V0ZTogZnVuY3Rp
b24ocGFyc2VkTmFtZSkgewotICAgICAgICAgICAgICAgIHRoaXMudXNlUm91dGVyTmFtaW5nKHBh
cnNlZE5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihwYXJz
ZWROYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBMb29rdXAgdGhlIG1vZGVsIG9uIHRoZSBBcHBsaWNhdGlvbiBuYW1lc3BhY2UKLQot
ICAgICAgICAgICAgICAgICAgICBAcHJvdGVjdGVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQK
LSAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgcmVzb2x2ZU1vZGVsCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgcmVzb2x2ZU1vZGVsOiBmdW5jdGlvbihwYXJzZWROYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzaWZ5KHBhcnNlZE5hbWUubmFtZSk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGZhY3RvcnkgPSBnZXQocGFyc2VkTmFtZS5yb290LCBjbGFzc05hbWUpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGZhY3RvcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhY3Rvcnk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBMb29rIHVwIHRoZSBzcGVjaWZpZWQgb2JqZWN0
IChmcm9tIHBhcnNlZE5hbWUpIG9uIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAgICAgICAgICAg
ICBuYW1lc3BhY2UgKHVzdWFsbHkgb24gdGhlIEFwcGxpY2F0aW9uKQotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBh
cnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAgICAgICAg
ICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCByZXNvbHZlSGVscGVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVz
b2x2ZUhlbHBlcjogZnVuY3Rpb24ocGFyc2VkTmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKSB8fCBFbWJlckhhbmRsZWJhcnMuaGVscGVy
c1twYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91dFR5cGVdOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBMb29rIHVwIHRoZSBzcGVjaWZpZWQgb2Jq
ZWN0IChmcm9tIHBhcnNlZE5hbWUpIG9uIHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAgICAgICAg
ICAgICBuYW1lc3BhY2UgKHVzdWFsbHkgb24gdGhlIEFwcGxpY2F0aW9uKQotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAgICAg
ICAgICAgICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCByZXNvbHZlT3RoZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBy
ZXNvbHZlT3RoZXI6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIg
Y2xhc3NOYW1lID0gY2xhc3NpZnkocGFyc2VkTmFtZS5uYW1lKSArIGNsYXNzaWZ5KHBhcnNlZE5h
bWUudHlwZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGZhY3RvcnkgPSBnZXQocGFyc2VkTmFtZS5y
b290LCBjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2xv
Z0xvb2t1cAotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gZm91bmQKLSAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZQotICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2xvZ0xvb2t1
cDogZnVuY3Rpb24oZm91bmQsIHBhcnNlZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3lt
Ym9sLCBwYWRkaW5nOwotCi0gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bWJvbCA9ICdb4pyTXSc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3ltYm9sID0gJ1sgXSc7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHBhcnNlZE5hbWUuZnVsbE5hbWUubGVuZ3RoID4gNjApIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGFkZGluZyA9ICcuJzsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gbmV3IEFycmF5KDYwIC0gcGFyc2VkTmFt
ZS5mdWxsTmFtZS5sZW5ndGgpLmpvaW4oJy4nKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBMb2dnZXIuaW5mbyhzeW1ib2wsIHBhcnNlZE5hbWUuZnVsbE5hbWUsIHBhZGRp
bmcsIHRoaXMubG9va3VwRGVzY3JpcHRpb24ocGFyc2VkTmFtZS5mdWxsTmFtZSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWRlYnVnIiwK
LSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0
YWwvbG9nZ2VyIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3ky
X18sIF9fZGVwZW5kZW5jeTNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8q
Z2xvYmFsIF9fZmFpbF9fKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kyX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIExvZ2dlciA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJd
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgRW1iZXIgRGVidWcKLQotICAgICAgICAgICAg
QG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1kZWJ1ZwotICAgICAg
ICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBjbGFzcyBFbWJlcgotICAgICAg
ICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGVmaW5lIGFuIGFzc2VydGlv
biB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBjb25kaXRpb24gaXMgbm90Ci0g
ICAgICAgICAgICAgIG1ldC4gRW1iZXIgYnVpbGQgdG9vbHMgd2lsbCByZW1vdmUgYW55IGNhbGxz
IHRvIGBFbWJlci5hc3NlcnQoKWAgd2hlbgotICAgICAgICAgICAgICBkb2luZyBhIHByb2R1Y3Rp
b24gYnVpbGQuIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAvLyBUZXN0IGZvciB0cnV0aGluZXNzCi0gICAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgnTXVzdCBwYXNzIGEgdmFsaWQgb2JqZWN0Jywgb2JqKTsKLQotICAgICAgICAgICAgICAvLyBG
YWlsIHVuY29uZGl0aW9uYWxseQotICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1RoaXMgY29k
ZSBwYXRoIHNob3VsZCBuZXZlciBiZSBydW4nKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBhc3NlcnQKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRl
c2MgQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXNzZXJ0aW9uLiBUaGlzIHdpbGwgYmVjb21lCi0gICAg
ICAgICAgICAgICAgdGhlIHRleHQgb2YgdGhlIEVycm9yIHRocm93biBpZiB0aGUgYXNzZXJ0aW9u
IGZhaWxzLgotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IHRlc3QgTXVzdCBiZSB0cnV0
aHkgZm9yIHRoZSBhc3NlcnRpb24gdG8gcGFzcy4gSWYKLSAgICAgICAgICAgICAgICBmYWxzeSwg
YW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1i
ZXIuYXNzZXJ0ID0gZnVuY3Rpb24oZGVzYywgdGVzdCkgewotICAgICAgICAgICAgaWYgKCF0ZXN0
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIkFzc2VydGlvbiBGYWls
ZWQ6ICIgKyBkZXNjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBEaXNwbGF5IGEgd2FybmluZyB3aXRoIHRoZSBwcm92aWRlZCBtZXNz
YWdlLiBFbWJlciBidWlsZCB0b29scyB3aWxsCi0gICAgICAgICAgICAgIHJlbW92ZSBhbnkgY2Fs
bHMgdG8gYEVtYmVyLndhcm4oKWAgd2hlbiBkb2luZyBhIHByb2R1Y3Rpb24gYnVpbGQuCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCB3YXJuCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBt
ZXNzYWdlIEEgd2FybmluZyB0byBkaXNwbGF5LgotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xl
YW59IHRlc3QgQW4gb3B0aW9uYWwgYm9vbGVhbi4gSWYgZmFsc3ksIHRoZSB3YXJuaW5nCi0gICAg
ICAgICAgICAgICAgd2lsbCBiZSBkaXNwbGF5ZWQuCi0gICAgICAgICAgICAqLwotICAgICAgICBF
bWJlci53YXJuID0gZnVuY3Rpb24obWVzc2FnZSwgdGVzdCkgewotICAgICAgICAgICAgaWYgKCF0
ZXN0KSB7Ci0gICAgICAgICAgICAgICAgTG9nZ2VyLndhcm4oIldBUk5JTkc6ICIgKyBtZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICBpZiAoJ3RyYWNlJyBpbiBMb2dnZXIpIAotICAgICAgICAgICAg
ICAgICAgICBMb2dnZXIudHJhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgRGlzcGxheSBhIGRlYnVnIG5vdGljZS4gRW1iZXIgYnVp
bGQgdG9vbHMgd2lsbCByZW1vdmUgYW55IGNhbGxzIHRvCi0gICAgICAgICAgICAgIGBFbWJlci5k
ZWJ1ZygpYCB3aGVuIGRvaW5nIGEgcHJvZHVjdGlvbiBidWlsZC4KLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmRlYnVnKCdJXCdtIGEgZGVidWcgbm90
aWNlIScpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGRlYnVn
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIEEgZGVidWcgbWVzc2FnZSB0
byBkaXNwbGF5LgotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuZGVidWcgPSBmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgICAgICAgICBMb2dnZXIuZGVidWcoIkRFQlVHOiAiICsgbWVzc2Fn
ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIERpc3BsYXkgYSBk
ZXByZWNhdGlvbiB3YXJuaW5nIHdpdGggdGhlIHByb3ZpZGVkIG1lc3NhZ2UgYW5kIGEgc3RhY2sg
dHJhY2UKLSAgICAgICAgICAgICAgKENocm9tZSBhbmQgRmlyZWZveCBvbmx5KS4gRW1iZXIgYnVp
bGQgdG9vbHMgd2lsbCByZW1vdmUgYW55IGNhbGxzIHRvCi0gICAgICAgICAgICAgIGBFbWJlci5k
ZXByZWNhdGUoKWAgd2hlbiBkb2luZyBhIHByb2R1Y3Rpb24gYnVpbGQuCi0KLSAgICAgICAgICAg
ICAgQG1ldGhvZCBkZXByZWNhdGUKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG1lc3Nh
Z2UgQSBkZXNjcmlwdGlvbiBvZiB0aGUgZGVwcmVjYXRpb24uCi0gICAgICAgICAgICAgIEBwYXJh
bSB7Qm9vbGVhbn0gdGVzdCBBbiBvcHRpb25hbCBib29sZWFuLiBJZiBmYWxzeSwgdGhlIGRlcHJl
Y2F0aW9uCi0gICAgICAgICAgICAgICAgd2lsbCBiZSBkaXNwbGF5ZWQuCi0gICAgICAgICAgICAq
LwotICAgICAgICBFbWJlci5kZXByZWNhdGUgPSBmdW5jdGlvbihtZXNzYWdlLCB0ZXN0KSB7Ci0g
ICAgICAgICAgICBpZiAodGVzdCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKEVtYmVyLkVOVi5SQUlTRV9PTl9ERVBSRUNBVElPTikg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKG1lc3NhZ2UpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZXJyb3I7Ci0KLSAgICAgICAgICAgIC8vIFdoZW4g
dXNpbmcgbmV3IEVycm9yLCB3ZSBjYW4ndCBkbyB0aGUgYXJndW1lbnRzIGNoZWNrIGZvciBDaHJv
bWUuIEFsdGVybmF0aXZlcyBhcmUgd2VsY29tZQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICBfX2ZhaWxfXy5mYWlsKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgICAgICAgICAgZXJyb3IgPSBlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
RW1iZXIuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04gJiYgZXJyb3Iuc3RhY2spIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3RhY2ssIHN0YWNrU3RyID0gJyc7Ci0gICAgICAgICAgICAgICAg
aWYgKGVycm9yWydhcmd1bWVudHMnXSkgewotICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWUK
LSAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBlcnJvci5zdGFjay5yZXBsYWNlKC9eXHMrYXRc
cysvZ20sICcnKS4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSgvXihbXlwoXSs/KShbXG4k
XSkvZ20sICd7YW5vbnltb3VzfSgkMSkkMicpLgotICAgICAgICAgICAgICAgICAgICByZXBsYWNl
KC9eT2JqZWN0Ljxhbm9ueW1vdXM+XHMqXCgoW15cKV0rKVwpL2dtLCAne2Fub255bW91c30oJDEp
Jykuc3BsaXQoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveAotICAg
ICAgICAgICAgICAgICAgICBzdGFjayA9IGVycm9yLnN0YWNrLnJlcGxhY2UoLyg/OlxuQDowKT9c
cyskL20sICcnKS4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSgvXlwoL2dtLCAne2Fub255
bW91c30oJykuc3BsaXQoJ1xuJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgc3RhY2tTdHIgPSAiXG4gICAgIiArIHN0YWNrLnNsaWNlKDIpLmpvaW4oIlxuICAgICIpOwot
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgc3RhY2tTdHI7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIExvZ2dlci53YXJuKCJERVBSRUNBVElPTjogIiArIG1lc3NhZ2Up
OwotICAgICAgICB9OwotCi0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQWxpYXMgYW4g
b2xkLCBkZXByZWNhdGVkIG1ldGhvZCB3aXRoIGl0cyBuZXcgY291bnRlcnBhcnQuCi0KLSAgICAg
ICAgICAgICAgRGlzcGxheSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0aCB0aGUgcHJvdmlkZWQg
bWVzc2FnZSBhbmQgYSBzdGFjayB0cmFjZQotICAgICAgICAgICAgICAoQ2hyb21lIGFuZCBGaXJl
Zm94IG9ubHkpIHdoZW4gdGhlIGFzc2lnbmVkIG1ldGhvZCBpcyBjYWxsZWQuCi0KLSAgICAgICAg
ICAgICAgRW1iZXIgYnVpbGQgdG9vbHMgd2lsbCBub3QgcmVtb3ZlIGNhbGxzIHRvIGBFbWJlci5k
ZXByZWNhdGVGdW5jKClgLCB0aG91Z2gKLSAgICAgICAgICAgICAgbm8gd2FybmluZ3Mgd2lsbCBi
ZSBzaG93biBpbiBwcm9kdWN0aW9uLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgRW1iZXIub2xkTWV0aG9kID0gRW1iZXIuZGVwcmVjYXRlRnVuYygnUGxlYXNl
IHVzZSB0aGUgbmV3LCB1cGRhdGVkIG1ldGhvZCcsIEVtYmVyLm5ld01ldGhvZCk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgZGVwcmVjYXRlRnVuYwotICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBBIGRlc2NyaXB0aW9uIG9mIHRoZSBkZXBy
ZWNhdGlvbi4KLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgbmV3IGZ1
bmN0aW9uIGNhbGxlZCB0byByZXBsYWNlIGl0cyBkZXByZWNhdGVkIGNvdW50ZXJwYXJ0LgotICAg
ICAgICAgICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gYSBuZXcgZnVuY3Rpb24gdGhhdCB3cmFwcGVk
IHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZwotICAgICAg
ICAgICAgKi8KLSAgICAgICAgRW1iZXIuZGVwcmVjYXRlRnVuYyA9IGZ1bmN0aW9uKG1lc3NhZ2Us
IGZ1bmMpIHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBFbWJlci5kZXByZWNhdGUobWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0KLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgUnVuIGEgZnVuY3Rpb24gbWVhbnQgZm9yIGRlYnVn
Z2luZy4gRW1iZXIgYnVpbGQgdG9vbHMgd2lsbCByZW1vdmUgYW55IGNhbGxzIHRvCi0gICAgICAg
ICAgICAgIGBFbWJlci5ydW5JbkRlYnVnKClgIHdoZW4gZG9pbmcgYSBwcm9kdWN0aW9uIGJ1aWxk
LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIucnVu
SW5EZWJ1ZyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5IYW5kbGViYXJzLkVh
Y2hWaWV3LnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgICBkaWRJbnNlcnRFbGVtZW50OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0lcJ20gaGFwcHknKTsK
LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgcnVuSW5EZWJ1
ZwotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBi
ZSBleGVjdXRlZC4KLSAgICAgICAgICAgICAgQHNpbmNlIDEuNS4wCi0gICAgICAgICAgICAqLwot
ICAgICAgICBFbWJlci5ydW5JbkRlYnVnID0gZnVuY3Rpb24oZnVuYykgewotICAgICAgICAgICAg
ZnVuYygpOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIEluZm9ybSB0aGUgZGV2ZWxvcGVyIGFi
b3V0IHRoZSBFbWJlciBJbnNwZWN0b3IgaWYgbm90IGluc3RhbGxlZC4KLSAgICAgICAgaWYgKCFF
bWJlci50ZXN0aW5nKSB7Ci0gICAgICAgICAgICB2YXIgaXNGaXJlZm94ID0gdHlwZW9mIEluc3Rh
bGxUcmlnZ2VyICE9PSAndW5kZWZpbmVkJzsKLSAgICAgICAgICAgIHZhciBpc0Nocm9tZSA9ICEh
d2luZG93LmNocm9tZSAmJiAhd2luZG93Lm9wZXJhOwotCi0gICAgICAgICAgICBpZiAodHlwZW9m
IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKGlzRmlyZWZveCB8fCBpc0Nocm9tZSkgJiYgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0
ICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC5lbWJlckV4dGVuc2lvbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvd25sb2FkVVJMOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNDaHJvbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3dubG9hZFVSTCA9ICdodHRwczovL2Nocm9tZS5nb29nbGUuY29tL3dlYnN0b3JlL2RldGFpbC9l
bWJlci1pbnNwZWN0b3IvYm1kYmxuY2Vna2Vua2FjaWVpaGZocGpmcHBvY29uaGknOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ZpcmVmb3gpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3dubG9hZFVSTCA9ICdodHRwczovL2FkZG9ucy5tb3ppbGxhLm9yZy9l
bi1VUy9maXJlZm94L2FkZG9uL2VtYmVyLWluc3BlY3Rvci8nOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5kZWJ1ZygnRm9yIG1vcmUg
YWR2YW5jZWQgZGVidWdnaW5nLCBpbnN0YWxsIHRoZSBFbWJlciBJbnNwZWN0b3IgZnJvbSAnICsg
ZG93bmxvYWRVUkwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwg
ZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1leHRlbnNpb24tc3VwcG9ydCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVy
LWV4dGVuc2lvbi1zdXBwb3J0L2RhdGFfYWRhcHRlciIsICJlbWJlci1leHRlbnNpb24tc3VwcG9y
dC9jb250YWluZXJfZGVidWdfYWRhcHRlciJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyIEV4dGVuc2lvbiBTdXBwb3J0Ci0K
LSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXIt
ZXh0ZW5zaW9uLXN1cHBvcnQKLSAgICAgICAgICAgIEByZXF1aXJlcyBlbWJlci1hcHBsaWNhdGlv
bgotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERhdGFBZGFwdGVyID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb250YWluZXJEZWJ1Z0FkYXB0ZXIgPSBfX2RlcGVuZGVu
Y3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICBFbWJlci5EYXRhQWRhcHRlciA9IERhdGFBZGFw
dGVyOwotICAgICAgICBFbWJlci5Db250YWluZXJEZWJ1Z0FkYXB0ZXIgPSBDb250YWluZXJEZWJ1
Z0FkYXB0ZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9j
b250YWluZXJfZGVidWdfYWRhcHRlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJl
ci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNl
IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19k
ZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGVtYmVyQSA9IF9fZGVwZW5kZW5jeTJf
Xy5BOwotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5M19fLnR5cGVPZjsKLSAgICAg
ICAgdmFyIGRhc2hlcml6ZSA9IF9fZGVwZW5kZW5jeTRfXy5kYXNoZXJpemU7Ci0gICAgICAgIHZh
ciBjbGFzc2lmeSA9IF9fZGVwZW5kZW5jeTRfXy5jbGFzc2lmeTsKLSAgICAgICAgdmFyIE5hbWVz
cGFjZSA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJPYmpl
Y3QgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItZXh0ZW5zaW9u
LXN1cHBvcnQKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRo
ZSBgQ29udGFpbmVyRGVidWdBZGFwdGVyYCBoZWxwcyB0aGUgY29udGFpbmVyIGFuZCByZXNvbHZl
ciBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgd2l0aCB0b29scyB0aGF0IGRlYnVnIEVtYmVyIHN1
Y2ggYXMgdGhlCi0gICAgICAgICAgICAgIFtFbWJlciBFeHRlbnNpb25dKGh0dHBzOi8vZ2l0aHVi
LmNvbS90aWxkZWlvL2VtYmVyLWV4dGVuc2lvbikKLSAgICAgICAgICAgICAgZm9yIENocm9tZSBh
bmQgRmlyZWZveC4KLQotICAgICAgICAgICAgICBUaGlzIGNsYXNzIGNhbiBiZSBleHRlbmRlZCBi
eSBhIGN1c3RvbSByZXNvbHZlciBpbXBsZW1lbnRlcgotICAgICAgICAgICAgICB0byBvdmVycmlk
ZSBzb21lIG9mIHRoZSBtZXRob2RzIHdpdGggbGlicmFyeS1zcGVjaWZpYyBjb2RlLgotCi0gICAg
ICAgICAgICAgIFRoZSBtZXRob2RzIGxpa2VseSB0byBiZSBvdmVycmlkZGVuIGFyZToKLQotICAg
ICAgICAgICAgICAqIGBjYW5DYXRhbG9nRW50cmllc0J5VHlwZWAKLSAgICAgICAgICAgICAgKiBg
Y2F0YWxvZ0VudHJpZXNCeVR5cGVgCi0KLSAgICAgICAgICAgICAgVGhlIGFkYXB0ZXIgd2lsbCBu
ZWVkIHRvIGJlIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgICAgaW4gdGhlIGFwcGxpY2F0aW9uJ3Mg
Y29udGFpbmVyIGFzIGBjb250YWluZXItZGVidWctYWRhcHRlcjptYWluYAotCi0gICAgICAgICAg
ICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgbmFtZTogImNvbnRh
aW5lckRlYnVnQWRhcHRlciIsCi0KLSAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlv
bihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
bi5yZWdpc3RlcignY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbicsIHJlcXVpcmUoJ2FwcC9j
b250YWluZXItZGVidWctYWRhcHRlcicpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgQ29udGFp
bmVyRGVidWdBZGFwdGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAg
ICAgICAgQGV4dGVuZHMgRW1iZXJPYmplY3QKLSAgICAgICAgICAgICAgQHNpbmNlIDEuNS4wCi0g
ICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJPYmpl
Y3QuZXh0ZW5kKHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgY29u
dGFpbmVyIG9mIHRoZSBhcHBsaWNhdGlvbiBiZWluZyBkZWJ1Z2dlZC4KLSAgICAgICAgICAgICAg
ICAgICAgVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGluamVjdGVkCi0gICAgICAgICAgICAgICAgICAg
IG9uIGNyZWF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjb250YWluZXIK
LSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGNvbnRhaW5lcjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFRoZSByZXNvbHZlciBpbnN0YW5jZSBvZiB0aGUgYXBwbGljYXRpb24KLSAg
ICAgICAgICAgICAgICAgICAgYmVpbmcgZGVidWdnZWQuIFRoaXMgcHJvcGVydHkgd2lsbCBiZSBp
bmplY3RlZAotICAgICAgICAgICAgICAgICAgICBvbiBjcmVhdGlvbi4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgcmVzb2x2ZXIKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQg
bnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc29sdmVyOiBudWxsLAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIGlmIGl0
IGlzIHBvc3NpYmxlIHRvIGNhdGFsb2cgYSBsaXN0IG9mIGF2YWlsYWJsZQotICAgICAgICAgICAg
ICAgICAgICBjbGFzc2VzIGluIHRoZSByZXNvbHZlciBmb3IgYSBnaXZlbiB0eXBlLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGUKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUuIGUuZy4gIm1vZGVsIiwg
ImNvbnRyb2xsZXIiLCAicm91dGUiCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge2Jvb2xl
YW59IHdoZXRoZXIgYSBsaXN0IGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB0eXBlLgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlOiBmdW5jdGlv
bih0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdtb2RlbCcgfHwgdHlwZSA9
PT0gJ3RlbXBsYXRlJykgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBhdmFpbGFibGUgY2xhc3NlcyBhIGdp
dmVuIHR5cGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjYXRhbG9nRW50cmllc0J5
VHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgdHlwZS4g
ZS5nLiAibW9kZWwiLCAiY29udHJvbGxlciIsICJyb3V0ZSIKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3MuCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgY2F0YWxvZ0VudHJpZXNCeVR5cGU6IGZ1bmN0aW9uKHR5cGUpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbmFtZXNwYWNlcyA9IGVtYmVyQShOYW1lc3BhY2UuTkFNRVNQQUNF
UyksIHR5cGVzID0gZW1iZXJBKCksIHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgICAgIHZhciB0
eXBlU3VmZml4UmVnZXggPSBuZXcgUmVnRXhwKGNsYXNzaWZ5KHR5cGUpICsgIiQiKTsKLQotICAg
ICAgICAgICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lc3BhY2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gRW1iZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lc3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZVN1ZmZpeFJl
Z2V4LnRlc3Qoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2xh
c3MgPSBuYW1lc3BhY2Vba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGVPZihrbGFzcykgPT09ICdjbGFzcycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVzLnB1c2goZGFzaGVyaXplKGtleS5yZXBsYWNlKHR5cGVTdWZmaXhSZWdl
eCwgJycpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgi
ZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvZGF0YV9hZGFwdGVyIiwKLSAgICBbImVtYmVyLW1ldGFs
L2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3J1bl9sb29w
IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9u
YW1lc3BhY2UiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRpbWUv
c3lzdGVtL25hdGl2ZV9hcnJheSIsICJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRp
b24iLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9f
LCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9f
ZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5
Ml9fLmdldDsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgZGFzaGVyaXplID0gX19kZXBlbmRlbmN5NF9fLmRhc2hlcml6ZTsKLSAgICAg
ICAgdmFyIE5hbWVzcGFjZSA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IGVtYmVyQSA9IF9fZGVwZW5kZW5jeTdfXy5BOwotICAgICAgICB2YXIgQXBwbGljYXRpb24gPSBf
X2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItZXh0ZW5zaW9uLXN1cHBv
cnQKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBgRGF0
YUFkYXB0ZXJgIGhlbHBzIGEgZGF0YSBwZXJzaXN0ZW5jZSBsaWJyYXJ5Ci0gICAgICAgICAgICAg
IGludGVyZmFjZSB3aXRoIHRvb2xzIHRoYXQgZGVidWcgRW1iZXIgc3VjaAotICAgICAgICAgICAg
ICBhcyB0aGUgW0VtYmVyIEV4dGVuc2lvbl0oaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vZW1i
ZXItZXh0ZW5zaW9uKQotICAgICAgICAgICAgICBmb3IgQ2hyb21lIGFuZCBGaXJlZm94LgotCi0g
ICAgICAgICAgICAgIFRoaXMgY2xhc3Mgd2lsbCBiZSBleHRlbmRlZCBieSBhIHBlcnNpc3RlbmNl
IGxpYnJhcnkKLSAgICAgICAgICAgICAgd2hpY2ggd2lsbCBvdmVycmlkZSBzb21lIG9mIHRoZSBt
ZXRob2RzIHdpdGgKLSAgICAgICAgICAgICAgbGlicmFyeS1zcGVjaWZpYyBjb2RlLgotCi0gICAg
ICAgICAgICAgIFRoZSBtZXRob2RzIGxpa2VseSB0byBiZSBvdmVycmlkZGVuIGFyZToKLQotICAg
ICAgICAgICAgICAqIGBnZXRGaWx0ZXJzYAotICAgICAgICAgICAgICAqIGBkZXRlY3RgCi0gICAg
ICAgICAgICAgICogYGNvbHVtbnNGb3JUeXBlYAotICAgICAgICAgICAgICAqIGBnZXRSZWNvcmRz
YAotICAgICAgICAgICAgICAqIGBnZXRSZWNvcmRDb2x1bW5WYWx1ZXNgCi0gICAgICAgICAgICAg
ICogYGdldFJlY29yZEtleXdvcmRzYAotICAgICAgICAgICAgICAqIGBnZXRSZWNvcmRGaWx0ZXJW
YWx1ZXNgCi0gICAgICAgICAgICAgICogYGdldFJlY29yZENvbG9yYAotICAgICAgICAgICAgICAq
IGBvYnNlcnZlUmVjb3JkYAotCi0gICAgICAgICAgICAgIFRoZSBhZGFwdGVyIHdpbGwgbmVlZCB0
byBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAgIGluIHRoZSBhcHBsaWNhdGlvbidzIGNvbnRh
aW5lciBhcyBgZGF0YUFkYXB0ZXI6bWFpbmAKLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwbGljYXRpb24uaW5p
dGlhbGl6ZXIoewotICAgICAgICAgICAgICAgIG5hbWU6ICJkYXRhLWFkYXB0ZXIiLAotCi0gICAg
ICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCBhcHBsaWNhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2RhdGEtYWRhcHRlcjpt
YWluJywgRFMuRGF0YUFkYXB0ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBjbGFzcyBEYXRhQWRhcHRl
cgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRz
IEVtYmVyT2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVs
dCJdID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5y
ZWxlYXNlTWV0aG9kcyA9IGVtYmVyQSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjb250YWluZXIgb2YgdGhlIGFwcGxpY2F0aW9u
IGJlaW5nIGRlYnVnZ2VkLgotICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IHdpbGwg
YmUgaW5qZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgb24gY3JlYXRpb24uCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByb3BlcnR5IGNvbnRhaW5lcgotICAgICAgICAgICAgICAgICAgICBAZGVm
YXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjMuMAotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRhaW5lcjogbnVsbCwKLQotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIHdoaWNo
IGlzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gbGlzdCBhbGwgbW9kZWxzLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjb250YWluZXJEZWJ1Z0FkYXB0ZXIKLSAgICAgICAg
ICAgICAgICAgICAgQGRlZmF1bHQgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgIEBzaW5j
ZSAxLjUuMAotICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBjb250YWluZXJEZWJ1
Z0FkYXB0ZXI6IHVuZGVmaW5lZCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIE51bWJlciBvZiBhdHRyaWJ1dGVzIHRvIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgYXMg
Y29sdW1ucy4gKEVub3VnaCB0byBtYWtlIHRoZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgICAg
aWRlbnRpZmlhYmxlKS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgYXR0cmlidXRlTGltaXQKLSAgICAgICAgICAgICAgICAgICAg
QGRlZmF1bHQgMwotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBhdHRyaWJ1dGVMaW1pdDogMywKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFN0b3JlcyBhbGwgbWV0aG9kcyB0aGF0IGNsZWFyIG9i
c2VydmVycy4KLSAgICAgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyB3aWxsIGJlIGNhbGxl
ZCBvbiBkZXN0cnVjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgcmVsZWFzZU1ldGhvZHMKLSAgICAgICAgICAgICAgICAg
ICAgQHNpbmNlIDEuMy4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVsZWFz
ZU1ldGhvZHM6IGVtYmVyQSgpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgU3BlY2lmaWVzIGhvdyByZWNvcmRzIGNhbiBiZSBmaWx0ZXJlZC4KLSAgICAgICAgICAgICAg
ICAgICAgUmVjb3JkcyByZXR1cm5lZCB3aWxsIG5lZWQgdG8gaGF2ZSBhIGBmaWx0ZXJWYWx1ZXNg
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IHdpdGggYSBrZXkgZm9yIGV2ZXJ5IG5hbWUg
aW4gdGhlIHJldHVybmVkIGFycmF5LgotCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRGaWx0ZXJzCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0FycmF5fSBMaXN0IG9mIG9iamVjdHMgZGVmaW5pbmcgZmlsdGVycy4KLSAgICAg
ICAgICAgICAgICAgICAgIFRoZSBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmFtZWAgYW5kIGBkZXNj
YCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRGaWx0ZXJz
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1iZXJBKCk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRmV0Y2ggdGhl
IG1vZGVsIHR5cGVzIGFuZCBvYnNlcnZlIHRoZW0gZm9yIGNoYW5nZXMuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHdhdGNoTW9kZWxU
eXBlcwotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVzQWRkZWQg
Q2FsbGJhY2sgdG8gY2FsbCB0byBhZGQgdHlwZXMuCi0gICAgICAgICAgICAgICAgICAgIFRha2Vz
IGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB3cmFwcGVkIHR5cGVzIChyZXR1cm5lZCBm
cm9tIGB3cmFwTW9kZWxUeXBlYCkuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gdHlwZXNVcGRhdGVkIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIHR5cGUgaGFzIGNoYW5n
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFRha2VzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFp
bmluZyB3cmFwcGVkIHR5cGVzLgotCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Z1bmN0
aW9ufSBNZXRob2QgdG8gY2FsbCB0byByZW1vdmUgYWxsIG9ic2VydmVycwotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHdhdGNoTW9kZWxUeXBlczogZnVuY3Rpb24odHlwZXNBZGRl
ZCwgdHlwZXNVcGRhdGVkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1vZGVsVHlwZXMgPSB0aGlz
LmdldE1vZGVsVHlwZXMoKSwKLSAgICAgICAgICAgICAgICBzZWxmID0gdGhpcywgdHlwZXNUb1Nl
bmQsIHJlbGVhc2VNZXRob2RzID0gZW1iZXJBKCk7Ci0KLSAgICAgICAgICAgICAgICB0eXBlc1Rv
U2VuZCA9IG1vZGVsVHlwZXMubWFwKGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGtsYXNzID0gdHlwZS5rbGFzczsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBw
ZWQgPSBzZWxmLndyYXBNb2RlbFR5cGUoa2xhc3MsIHR5cGUubmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlbGVhc2VNZXRob2RzLnB1c2goc2VsZi5vYnNlcnZlTW9kZWxUeXBlKGtsYXNzLCB0
eXBlc1VwZGF0ZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICB0eXBlc0FkZGVkKHR5cGVzVG9TZW5k
KTsKLQotICAgICAgICAgICAgICAgIHZhciByZWxlYXNlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlbGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZm4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICBzZWxmLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVjdChyZWxlYXNlKTsK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHRoaXMucmVsZWFzZU1ldGhvZHMu
cHVzaE9iamVjdChyZWxlYXNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9uYW1lVG9DbGFzczogZnVuY3Rpb24odHlwZSkg
ewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IHRoaXMuY29udGFpbmVyLmxvb2t1cEZhY3RvcnkoJ21vZGVs
OicgKyB0eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5
cGU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgRmV0Y2ggdGhlIHJlY29yZHMgb2YgYSBnaXZlbiB0eXBlIGFuZCBvYnNlcnZlIHRoZW0gZm9y
IGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIHdhdGNoUmVjb3JkcwotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IHJlY29yZHNBZGRlZCBDYWxsYmFjayB0byBjYWxsIHRvIGFkZCByZWNvcmRzLgot
ICAgICAgICAgICAgICAgICAgICBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcg
d3JhcHBlZCByZWNvcmRzLgotICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHNob3VsZCBo
YXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICBjb2x1
bW5WYWx1ZXM6IHtPYmplY3R9IGtleSBhbmQgdmFsdWUgb2YgYSB0YWJsZSBjZWxsCi0gICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0OiB7T2JqZWN0fSB0aGUgYWN0dWFsIHJlY29yZCBvYmplY3QK
LQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSByZWNvcmRzVXBkYXRlZCBD
YWxsYmFjayB0byBjYWxsIHdoZW4gYSByZWNvcmQgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAg
ICAgICAgIFRha2VzIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB3cmFwcGVkIHJlY29y
ZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVjb3Jkc1JlbW92
ZWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgcmVjb3JkIGhhcyByZW1vdmVkLgotICAgICAgICAg
ICAgICAgICAgICBUYWtlcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgaW5kZXg6IHRoZSBhcnJheSBpbmRleCB3aGVyZSB0aGUgcmVjb3JkcyB3ZXJlIHJl
bW92ZWQKLSAgICAgICAgICAgICAgICAgICAgICBjb3VudDogdGhlIG51bWJlciBvZiByZWNvcmRz
IHJlbW92ZWQKLQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gTWV0aG9k
IHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBvYnNlcnZlcnMKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB3YXRjaFJlY29yZHM6IGZ1bmN0aW9uKHR5cGUsIHJlY29yZHNBZGRlZCwgcmVj
b3Jkc1VwZGF0ZWQsIHJlY29yZHNSZW1vdmVkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYg
PSB0aGlzLCByZWxlYXNlTWV0aG9kcyA9IGVtYmVyQSgpLCByZWNvcmRzID0gdGhpcy5nZXRSZWNv
cmRzKHR5cGUpLCByZWxlYXNlOwotCi0gICAgICAgICAgICAgICAgdmFyIHJlY29yZFVwZGF0ZWQg
PSBmdW5jdGlvbih1cGRhdGVkUmVjb3JkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZHNV
cGRhdGVkKFt1cGRhdGVkUmVjb3JkXSk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgICAgIHZhciByZWNvcmRzVG9TZW5kID0gcmVjb3Jkcy5tYXAoZnVuY3Rpb24ocmVjb3JkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VNZXRob2RzLnB1c2goc2VsZi5vYnNlcnZlUmVj
b3JkKHJlY29yZCwgcmVjb3JkVXBkYXRlZCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi53cmFwUmVjb3JkKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLQotICAgICAg
ICAgICAgICAgIHZhciBjb250ZW50RGlkQ2hhbmdlID0gZnVuY3Rpb24oYXJyYXksIGlkeCwgcmVt
b3ZlZENvdW50LCBhZGRlZENvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSBpZHg7IGkgPCBpZHggKyBhZGRlZENvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciByZWNvcmQgPSBhcnJheS5vYmplY3RBdChpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB3cmFwcGVkID0gc2VsZi53cmFwUmVjb3JkKHJlY29yZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZWxlYXNlTWV0aG9kcy5wdXNoKHNlbGYub2JzZXJ2ZVJlY29yZChyZWNvcmQs
IHJlY29yZFVwZGF0ZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNBZGRlZChb
d3JhcHBlZF0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHJlbW92ZWRDb3VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1JlbW92
ZWQoaWR4LCByZW1vdmVkQ291bnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IHsKLSAgICAgICAgICAg
ICAgICAgICAgZGlkQ2hhbmdlOiBjb250ZW50RGlkQ2hhbmdlLAotICAgICAgICAgICAgICAgICAg
ICB3aWxsQ2hhbmdlOiBFbWJlci5LIAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAg
ICAgcmVjb3Jkcy5hZGRBcnJheU9ic2VydmVyKHNlbGYsIG9ic2VydmVyKTsKLQotICAgICAgICAg
ICAgICAgIHJlbGVhc2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFz
ZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihmbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
Zm4oKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29y
ZHMucmVtb3ZlQXJyYXlPYnNlcnZlcihzZWxmLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYucmVsZWFzZU1ldGhvZHMucmVtb3ZlT2JqZWN0KHJlbGVhc2UpOwotICAgICAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICByZWNvcmRzQWRkZWQocmVjb3Jkc1RvU2VuZCk7
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJlbGVhc2VNZXRob2RzLnB1c2hPYmplY3QocmVsZWFz
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2xlYXIgYWxsIG9ic2VydmVycyBi
ZWZvcmUgZGVzdHJ1Y3Rpb24KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCB3aWxsRGVzdHJveQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdXBlcigpOwotICAgICAgICAgICAgICAgIHRoaXMucmVsZWFzZU1ldGhvZHMuZm9yRWFjaChm
dW5jdGlvbihmbikgewotICAgICAgICAgICAgICAgICAgICBmbigpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIERldGVjdCB3aGV0aGVyIGEgY2xhc3MgaXMgYSBtb2RlbC4KLQotICAgICAgICAgICAgICAg
ICAgICBUZXN0IHRoYXQgYWdhaW5zdCB0aGUgbW9kZWwgY2xhc3MKLSAgICAgICAgICAgICAgICAg
ICAgb2YgeW91ciBwZXJzaXN0ZW5jZSBsaWJyYXJ5Ci0KLSAgICAgICAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkZXRlY3QKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtDbGFzc30ga2xhc3MgVGhlIGNsYXNzIHRvIHRlc3QKLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiBib29sZWFuIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGEgbW9kZWwgY2xh
c3Mgb3Igbm90Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGV0ZWN0OiBmdW5j
dGlvbihrbGFzcykgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHZXQgdGhlIGNvbHVt
bnMgZm9yIGEgZ2l2ZW4gbW9kZWwgdHlwZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0
ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNvbHVtbnNGb3JUeXBlCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7Q2xhc3N9IHR5cGUgVGhlIG1vZGVsIHR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGNvbHVtbnMgb2YgdGhlIGZvbGxv
d2luZyBmb3JtYXQ6Ci0gICAgICAgICAgICAgICAgICAgICBuYW1lOiB7U3RyaW5nfSBuYW1lIG9m
IHRoZSBjb2x1bW4KLSAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHtTdHJpbmd9IEh1bWFuaXpl
ZCBkZXNjcmlwdGlvbiAod2hhdCB3b3VsZCBzaG93IGluIGEgdGFibGUgY29sdW1uIG5hbWUpCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29sdW1uc0ZvclR5cGU6IGZ1bmN0aW9u
KHR5cGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1iZXJBKCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyBvYnNlcnZlcnMg
dG8gYSBtb2RlbCB0eXBlIGNsYXNzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZU1vZGVsVHlwZQotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlIFRoZSBtb2RlbCB0eXBlIGNsYXNzCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVzVXBkYXRlZCBDYWxsZWQgd2hlbiBh
IHR5cGUgaXMgbW9kaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Z1bmN0aW9u
fSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB0byByZW1vdmUgb2JzZXJ2ZXJzCi0gICAgICAgICAgICAg
ICAgICAqLwotCi0gICAgICAgICAgICBvYnNlcnZlTW9kZWxUeXBlOiBmdW5jdGlvbih0eXBlLCB0
eXBlc1VwZGF0ZWQpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIHJlY29yZHMg
PSB0aGlzLmdldFJlY29yZHModHlwZSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgb25DaGFuZ2Ug
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZXNVcGRhdGVkKFtzZWxmLndy
YXBNb2RlbFR5cGUodHlwZSldKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
IHZhciBvYnNlcnZlciA9IHsKLSAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ2FjdGlvbnMn
LCB0aGlzLCBvbkNoYW5nZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg
ICAgICAgIHdpbGxDaGFuZ2U6IEVtYmVyLksKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgcmVjb3Jkcy5hZGRBcnJheU9ic2VydmVyKHRoaXMsIG9ic2VydmVyKTsKLQotICAg
ICAgICAgICAgICAgIHZhciByZWxlYXNlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlY29yZHMucmVtb3ZlQXJyYXlPYnNlcnZlcihzZWxmLCBvYnNlcnZlcik7Ci0gICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlOwotICAgICAgICAg
ICAgfSwKLQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgV3JhcHMgYSBn
aXZlbiBtb2RlbCB0eXBlIGFuZCBvYnNlcnZlcyBjaGFuZ2VzIHRvIGl0LgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd3JhcE1vZGVs
VHlwZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NsYXNzfSB0eXBlIEEgbW9kZWwgY2xh
c3MKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9ICBPcHRpb25hbCBuYW1lIG9m
IHRoZSBjbGFzcwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGNvbnRhaW5z
IHRoZSB3cmFwcGVkIHR5cGUgYW5kIHRoZSBmdW5jdGlvbiB0byByZW1vdmUgb2JzZXJ2ZXJzCi0g
ICAgICAgICAgICAgICAgICAgIEZvcm1hdDoKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7
T2JqZWN0fSB0aGUgd3JhcHBlZCB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICBUaGUgd3Jh
cHBlZCB0eXBlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZToge1N0cmluZ30gbmFtZSBvZiB0aGUgdHlwZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudDoge0ludGVnZXJ9IG51bWJlciBvZiByZWNvcmRzIGF2YWlsYWJsZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiB7Q29sdW1uc30gYXJyYXkgb2YgY29sdW1u
cyB0byBkZXNjcmliZSB0aGUgcmVjb3JkCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dDoge0NsYXNzfSB0aGUgYWN0dWFsIE1vZGVsIHR5cGUgY2xhc3MKLSAgICAgICAgICAgICAgICAg
ICAgICByZWxlYXNlOiB7RnVuY3Rpb259IFRoZSBmdW5jdGlvbiB0byByZW1vdmUgb2JzZXJ2ZXJz
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd3JhcE1vZGVsVHlwZTogZnVuY3Rp
b24odHlwZSwgbmFtZSkgewotICAgICAgICAgICAgICAgIHZhciByZWxlYXNlLCByZWNvcmRzID0g
dGhpcy5nZXRSZWNvcmRzKHR5cGUpLAotICAgICAgICAgICAgICAgIHR5cGVUb1NlbmQsIHNlbGYg
PSB0aGlzOwotCi0gICAgICAgICAgICAgICAgdHlwZVRvU2VuZCA9IHsKLSAgICAgICAgICAgICAg
ICAgICAgbmFtZTogbmFtZSB8fCB0eXBlLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAg
IGNvdW50OiBnZXQocmVjb3JkcywgJ2xlbmd0aCcpLAotICAgICAgICAgICAgICAgICAgICBjb2x1
bW5zOiB0aGlzLmNvbHVtbnNGb3JUeXBlKHR5cGUpLAotICAgICAgICAgICAgICAgICAgICBvYmpl
Y3Q6IHR5cGUKLSAgICAgICAgICAgICAgICB9OwotCi0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZVRvU2VuZDsKLSAgICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEZldGNoZXMgYWxsIG1vZGVscyBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlv
bi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGdldE1vZGVsVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9
IEFycmF5IG9mIG1vZGVsIHR5cGVzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Z2V0TW9kZWxUeXBlczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVzLCBz
ZWxmID0gdGhpcywKLSAgICAgICAgICAgICAgICBjb250YWluZXJEZWJ1Z0FkYXB0ZXIgPSB0aGlz
LmdldCgnY29udGFpbmVyRGVidWdBZGFwdGVyJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29u
dGFpbmVyRGVidWdBZGFwdGVyLmNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlKCdtb2RlbCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHR5cGVzID0gY29udGFpbmVyRGVidWdBZGFwdGVyLmNhdGFsb2dF
bnRyaWVzQnlUeXBlKCdtb2RlbCcpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHR5cGVzID0gdGhpcy5fZ2V0T2JqZWN0c09uTmFtZXNwYWNlcygpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE5ldyBhZGFwdGVycyByZXR1cm4g
c3RyaW5ncyBpbnN0ZWFkIG9mIGNsYXNzZXMKLSAgICAgICAgICAgICAgICB0eXBlcyA9IGVtYmVy
QSh0eXBlcykubWFwKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtsYXNzOiBzZWxmLl9uYW1lVG9DbGFzcyhuYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKLSAgICAgICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0eXBlcyA9IGVtYmVy
QSh0eXBlcykuZmlsdGVyKGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGYuZGV0ZWN0KHR5cGUua2xhc3MpOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVtYmVyQSh0eXBlcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTG9vcHMgb3ZlciBhbGwgbmFtZXNwYWNl
cyBhbmQgYWxsIG9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgYXR0YWNoZWQgdG8gdGhlbQot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgX2dldE9iamVjdHNPbk5hbWVzcGFjZXMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
QXJyYXl9IEFycmF5IG9mIG1vZGVsIHR5cGUgc3RyaW5ncwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF9nZXRPYmplY3RzT25OYW1lc3BhY2VzOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgbmFtZXNwYWNlcyA9IGVtYmVyQShOYW1lc3BhY2UuTkFNRVNQQUNFUyks
Ci0gICAgICAgICAgICAgICAgdHlwZXMgPSBlbWJlckEoKSwKLSAgICAgICAgICAgICAgICBzZWxm
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbihu
YW1lc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVzcGFj
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lc3BhY2UuaGFzT3duUHJvcGVy
dHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91
Z2ggd2Ugd2lsbCBmaWx0ZXIgYWdhaW4gaW4gYGdldE1vZGVsVHlwZXNgLAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIG5vdCBjYWxsIGBsb29rdXBDb250YWluZXJgIG9uIG5v
bi1tb2RlbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIChlc3BlY2lhbGx5IHdoZW4gYEVt
YmVyLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OU2AgaXMgYHRydWVgKQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzZWxmLmRldGVjdChuYW1lc3BhY2Vba2V5XSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZGFzaGVyaXplKGtleSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIShuYW1lc3BhY2UgaW5zdGFuY2VvZiBBcHBsaWNhdGlvbikg
JiYgbmFtZXNwYWNlLnRvU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gbmFtZXNwYWNlICsgJy8nICsgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2gobmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgRmV0Y2hlcyBhbGwgbG9hZGVkIHJlY29yZHMgZm9yIGEgZ2l2ZW4gdHlwZS4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdldFJl
Y29yZHMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJl
Y29yZHMuCi0gICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5IHdpbGwgYmUgb2JzZXJ2ZWQg
Zm9yIGNoYW5nZXMsCi0gICAgICAgICAgICAgICAgICAgICBzbyBpdCBzaG91bGQgdXBkYXRlIHdo
ZW4gbmV3IHJlY29yZHMgYXJlIGFkZGVkL3JlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgZ2V0UmVjb3JkczogZnVuY3Rpb24odHlwZSkgewotICAgICAgICAgICAgICAg
IHJldHVybiBlbWJlckEoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBXcmFwcyBhIHJlY29yZCBhbmQgb2JzZXJ2ZXJzIGNoYW5nZXMgdG8g
aXQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCB3cmFwUmVjb3JkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBy
ZWNvcmQgVGhlIHJlY29yZCBpbnN0YW5jZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
T2JqZWN0fSBUaGUgd3JhcHBlZCByZWNvcmQuIEZvcm1hdDoKLSAgICAgICAgICAgICAgICAgICAg
Y29sdW1uVmFsdWVzOiB7QXJyYXl9Ci0gICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmRz
OiB7QXJyYXl9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd3JhcFJlY29yZDog
ZnVuY3Rpb24ocmVjb3JkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlY29yZFRvU2VuZCA9IHsK
LSAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiByZWNvcmQgCi0gICAgICAgICAgICAgICAgfSwg
Y29sdW1uVmFsdWVzID0ge30sIHNlbGYgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgcmVjb3Jk
VG9TZW5kLmNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0UmVjb3JkQ29sdW1uVmFsdWVzKHJlY29yZCk7
Ci0gICAgICAgICAgICAgICAgcmVjb3JkVG9TZW5kLnNlYXJjaEtleXdvcmRzID0gdGhpcy5nZXRS
ZWNvcmRLZXl3b3JkcyhyZWNvcmQpOwotICAgICAgICAgICAgICAgIHJlY29yZFRvU2VuZC5maWx0
ZXJWYWx1ZXMgPSB0aGlzLmdldFJlY29yZEZpbHRlclZhbHVlcyhyZWNvcmQpOwotICAgICAgICAg
ICAgICAgIHJlY29yZFRvU2VuZC5jb2xvciA9IHRoaXMuZ2V0UmVjb3JkQ29sb3IocmVjb3JkKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmRUb1NlbmQ7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgR2V0cyB0aGUgdmFsdWVzIGZv
ciBlYWNoIGNvbHVtbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGdldFJlY29yZENvbHVtblZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtPYmplY3R9IEtleXMgc2hvdWxkIG1hdGNoIGNvbHVtbiBuYW1lcyBkZWZp
bmVkCi0gICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtb2RlbCB0eXBlLgotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGdldFJlY29yZENvbHVtblZhbHVlczogZnVuY3Rpb24ocmVj
b3JkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMga2V5d29yZHMgdG8gbWF0
Y2ggd2hlbiBzZWFyY2hpbmcgcmVjb3Jkcy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0
ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdldFJlY29yZEtleXdvcmRzCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBSZWxldmFudCBrZXl3b3JkcyBmb3Igc2VhcmNo
LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldFJlY29yZEtleXdvcmRzOiBm
dW5jdGlvbihyZWNvcmQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1iZXJBKCk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJu
cyB0aGUgdmFsdWVzIG9mIGZpbHRlcnMgZGVmaW5lZCBieSBgZ2V0RmlsdGVyc2AuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRS
ZWNvcmRGaWx0ZXJWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJl
Y29yZCBUaGUgcmVjb3JkIGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09i
amVjdH0gVGhlIGZpbHRlciB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBnZXRSZWNvcmRGaWx0ZXJWYWx1ZXM6IGZ1bmN0aW9uKHJlY29yZCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiB7fTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBFYWNoIHJlY29yZCBjYW4gaGF2ZSBhIGNvbG9yIHRoYXQgcmVwcmVzZW50
cyBpdHMgc3RhdGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBnZXRSZWNvcmRDb2xvcgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gcmVjb3JkIFRoZSByZWNvcmQgaW5zdGFuY2UKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7U3RyaW5nfSBUaGUgcmVjb3JkJ3MgY29sb3IKLSAgICAgICAgICAgICAgICAg
ICAgICBQb3NzaWJsZSBvcHRpb25zOiBibGFjaywgcmVkLCBibHVlLCBncmVlbgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldFJlY29yZENvbG9yOiBmdW5jdGlvbihyZWNvcmQp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBPYnNlcnZlcyBhbGwgcmVsZXZhbnQgcHJv
cGVydGllcyBhbmQgcmUtc2VuZHMgdGhlIHdyYXBwZWQgcmVjb3JkCi0gICAgICAgICAgICAgICAg
ICAgIHdoZW4gYSBjaGFuZ2Ugb2NjdXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXJSZWNvcmQKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJlY29yZCBUaGUgcmVjb3JkIGluc3RhbmNlCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHJlY29yZFVwZGF0ZWQgVGhlIGNhbGxi
YWNrIHRvIGNhbGwgd2hlbiBhIHJlY29yZCBpcyB1cGRhdGVkLgotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBv
YnNlcnZlcnMuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgb2JzZXJ2ZVJlY29y
ZDogZnVuY3Rpb24ocmVjb3JkLCByZWNvcmRVcGRhdGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkge307Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwot
ICAgIGRlZmluZSgiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvaW5pdGlhbGl6ZXJzIiwKLSAgICBb
XSwKLSAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotCi0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzLWNvbXBpbGVyIiwKLSAgICBbImVtYmVyLW1ldGFs
L2NvcmUiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBv
cnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKiBnbG9iYWwgSGFuZGxl
YmFyczp0cnVlICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0g
ICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0KLSAgICAgICAgLy8gRVM2VG9kbzogeW91J2xsIG5lZWQgdG8gaW1wb3J0IGRlYnVnZ2VyIG9u
Y2UgZGVidWdnZXIgaXMgZXM2J2QuCi0gICAgICAgIGlmICh0eXBlb2YgRW1iZXIuYXNzZXJ0ID09
PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0ID0gZnVuY3Rpb24oKSB7
fTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZW9mIEVtYmVyLkZFQVRVUkVTID09PSAndW5k
ZWZpbmVkJykgewotICAgICAgICAgICAgRW1iZXIuRkVBVFVSRVMgPSB7Ci0gICAgICAgICAgICAg
ICAgaXNFbmFibGVkOiBmdW5jdGlvbigpIHt9Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocGFy
ZW50KSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBGKCkge30KLSAgICAgICAgICAgIEYucHJvdG90
eXBlID0gcGFyZW50OwotICAgICAgICAgICAgcmV0dXJuIG5ldyBGKCk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gc2V0IHVwIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGxhdGVyCi0gICAgICAg
IHZhciBWaWV3LCBDb21wb25lbnQ7Ci0KLSAgICAgICAgLy8gRVM2VG9kbzogd2hlbiBlbWJlci1k
ZWJ1ZyBpcyBlczYnZWQgaW1wb3J0IHRoaXMuCi0gICAgICAgIC8vIHZhciBlbWJlckFzc2VydCA9
IEVtYmVyLmFzc2VydDsKLSAgICAgICAgdmFyIEhhbmRsZWJhcnMgPSAoRW1iZXIuaW1wb3J0cyAm
JiBFbWJlci5pbXBvcnRzLkhhbmRsZWJhcnMpIHx8ICh0aGlzICYmIHRoaXMuSGFuZGxlYmFycyk7
Ci0gICAgICAgIGlmICghSGFuZGxlYmFycyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9u
JykgewotICAgICAgICAgICAgSGFuZGxlYmFycyA9IHJlcXVpcmUoJ2hhbmRsZWJhcnMnKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEVtYmVyLmFzc2VydCgiRW1iZXIgSGFuZGxlYmFycyByZXF1aXJl
cyBIYW5kbGViYXJzIHZlcnNpb24gMS4wIG9yIDEuMS4gSW5jbHVkZSAiICsKLSAgICAgICAgImEg
U0NSSVBUIHRhZyBpbiB0aGUgSFRNTCBIRUFEIGxpbmtpbmcgdG8gdGhlIEhhbmRsZWJhcnMgZmls
ZSAiICsKLSAgICAgICAgImJlZm9yZSB5b3UgbGluayB0byBFbWJlci4iLCBIYW5kbGViYXJzKTsK
LQotICAgICAgICBFbWJlci5hc3NlcnQoIkVtYmVyIEhhbmRsZWJhcnMgcmVxdWlyZXMgSGFuZGxl
YmFycyB2ZXJzaW9uIDEuMCBvciAxLjEsICIgKwotICAgICAgICAiQ09NUElMRVJfUkVWSVNJT04g
ZXhwZWN0ZWQ6IDQsIGdvdDogIiArIEhhbmRsZWJhcnMuQ09NUElMRVJfUkVWSVNJT04gKwotICAg
ICAgICAiIC0gUGxlYXNlIG5vdGU6IEJ1aWxkcyBvZiBtYXN0ZXIgbWF5IGhhdmUgb3RoZXIgQ09N
UElMRVJfUkVWSVNJT04gdmFsdWVzLiIsCi0gICAgICAgIEhhbmRsZWJhcnMuQ09NUElMRVJfUkVW
SVNJT04gPT09IDQpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBQcmVwYXJlcyB0aGUg
SGFuZGxlYmFycyB0ZW1wbGF0aW5nIGxpYnJhcnkgZm9yIHVzZSBpbnNpZGUgRW1iZXIncyB2aWV3
Ci0gICAgICAgICAgICAgIHN5c3RlbS4KLQotICAgICAgICAgICAgICBUaGUgYEVtYmVyLkhhbmRs
ZWJhcnNgIG9iamVjdCBpcyB0aGUgc3RhbmRhcmQgSGFuZGxlYmFycyBsaWJyYXJ5LCBleHRlbmRl
ZCB0bwotICAgICAgICAgICAgICB1c2UgRW1iZXIncyBgZ2V0KClgIG1ldGhvZCBpbnN0ZWFkIG9m
IGRpcmVjdCBwcm9wZXJ0eSBhY2Nlc3MsIHdoaWNoIGFsbG93cwotICAgICAgICAgICAgICBjb21w
dXRlZCBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW5zaWRlIHRlbXBsYXRlcy4KLQotICAgICAgICAg
ICAgICBUbyBjcmVhdGUgYW4gYEVtYmVyLkhhbmRsZWJhcnNgIHRlbXBsYXRlLCBjYWxsIGBFbWJl
ci5IYW5kbGViYXJzLmNvbXBpbGUoKWAuCi0gICAgICAgICAgICAgIFRoaXMgd2lsbCByZXR1cm4g
YSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGJ5IGBFbWJlci5WaWV3YCBmb3IgcmVuZGVyaW5n
LgotCi0gICAgICAgICAgICAgIEBjbGFzcyBIYW5kbGViYXJzCi0gICAgICAgICAgICAgIEBuYW1l
c3BhY2UgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMg
PSBFbWJlci5IYW5kbGViYXJzID0gb2JqZWN0Q3JlYXRlKEhhbmRsZWJhcnMpOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBSZWdpc3RlciBhIGJvdW5kIGhlbHBlciBvciBjdXN0b20gdmll
dyBoZWxwZXIuCi0KLSAgICAgICAgICAgICAgIyMgU2ltcGxlIGJvdW5kIGhlbHBlciBleGFtcGxl
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5IYW5k
bGViYXJzLmhlbHBlcignY2FwaXRhbGl6ZScsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgYWJvdmUgYm91bmQgaGVscGVyIGNh
biBiZSB1c2VkIGluc2lkZSBvZiB0ZW1wbGF0ZXMgYXMgZm9sbG93czoKLQotICAgICAgICAgICAg
ICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7Y2FwaXRhbGl6ZSBuYW1lfX0KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB3aGVuIHRoZSBgbmFt
ZWAgcHJvcGVydHkgb2YgdGhlIHRlbXBsYXRlJ3MgY29udGV4dCBjaGFuZ2VzLAotICAgICAgICAg
ICAgICB0aGUgcmVuZGVyZWQgdmFsdWUgb2YgdGhlIGhlbHBlciB3aWxsIHVwZGF0ZSB0byByZWZs
ZWN0IHRoaXMgY2hhbmdlLgotCi0gICAgICAgICAgICAgIEZvciBtb3JlIGV4YW1wbGVzIG9mIGJv
dW5kIGhlbHBlcnMsIHNlZSBkb2N1bWVudGF0aW9uIGZvcgotICAgICAgICAgICAgICBgRW1iZXIu
SGFuZGxlYmFycy5yZWdpc3RlckJvdW5kSGVscGVyYC4KLQotICAgICAgICAgICAgICAjIyBDdXN0
b20gdmlldyBoZWxwZXIgZXhhbXBsZQotCi0gICAgICAgICAgICAgIEFzc3VtaW5nIGEgdmlldyBz
dWJjbGFzcyBuYW1lZCBgQXBwLkNhbGVuZGFyVmlld2Agd2VyZSBkZWZpbmVkLCBhIGhlbHBlcgot
ICAgICAgICAgICAgICBmb3IgcmVuZGVyaW5nIGluc3RhbmNlcyBvZiB0aGlzIHZpZXcgY291bGQg
YmUgcmVnaXN0ZXJlZCBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXIoJ2NhbGVuZGFyJywgQXBwLkNh
bGVuZGFyVmlldyk6Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSBhYm92
ZSBib3VuZCBoZWxwZXIgY2FuIGJlIHVzZWQgaW5zaWRlIG9mIHRlbXBsYXRlcyBhcyBmb2xsb3dz
OgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tjYWxlbmRh
cn19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdoaWNoIGlzIGZ1bmN0aW9u
YWxseSBlcXVpdmFsZW50IHRvOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAg
ICAgICAgICAge3t2aWV3IEFwcC5DYWxlbmRhclZpZXd9fQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBPcHRpb25zIGluIHRoZSBoZWxwZXIgd2lsbCBiZSBwYXNzZWQgdG8gdGhl
IHZpZXcgaW4gZXhhY3RseSB0aGUgc2FtZQotICAgICAgICAgICAgICBtYW5uZXIgYXMgd2l0aCB0
aGUgYHZpZXdgIGhlbHBlci4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGhlbHBlcgotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IG5hbWUKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxFbWJlci5WaWV3fSBmdW5j
dGlvbiBvciB2aWV3IGNsYXNzIGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBkZXBlbmRlbnRLZXlzKgotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXJIYW5kbGVi
YXJzLmhlbHBlciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoIVZp
ZXcpIHsKLSAgICAgICAgICAgICAgICBWaWV3ID0gcmVxdWlyZU1vZHVsZSgnZW1iZXItdmlld3Mv
dmlld3MvdmlldycpWydkZWZhdWx0J107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBF
UzZUT0RPOiBzdHVwaWQgY2lyY3VsYXIgZGVwCi0gICAgICAgICAgICBpZiAoIUNvbXBvbmVudCkg
ewotICAgICAgICAgICAgICAgIENvbXBvbmVudCA9IHJlcXVpcmVNb2R1bGUoJ2VtYmVyLXZpZXdz
L3ZpZXdzL2NvbXBvbmVudCcpWydkZWZhdWx0J107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvLyBFUzZUT0RPOiBzdHVwaWQgY2lyY3VsYXIgZGVwCi0KLSAgICAgICAgICAgIEVtYmVyLmFz
c2VydCgiWW91IHRyaWVkIHRvIHJlZ2lzdGVyIGEgY29tcG9uZW50IG5hbWVkICciICsgbmFtZSAr
ICInLCBidXQgY29tcG9uZW50IG5hbWVzIG11c3QgaW5jbHVkZSBhICctJyIsICFDb21wb25lbnQu
ZGV0ZWN0KHZhbHVlKSB8fCBuYW1lLm1hdGNoKC8tLykpOwotCi0gICAgICAgICAgICBpZiAoVmll
dy5kZXRlY3QodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lz
dGVySGVscGVyKG5hbWUsIEVtYmVySGFuZGxlYmFycy5tYWtlVmlld0hlbHBlcih2YWx1ZSkpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVn
aXN0ZXJCb3VuZEhlbHBlci5hcHBseShudWxsLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIGEgaGVscGVy
IGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgcHJvdmlkZWQgVmlld0NsYXNzLgotCi0gICAgICAg
ICAgICAgIFVzZWQgaW50ZXJuYWxseSBieSBFbWJlci5IYW5kbGViYXJzLmhlbHBlciBhbmQgb3Ro
ZXIgbWV0aG9kcwotICAgICAgICAgICAgICBpbnZvbHZpbmcgaGVscGVyL2NvbXBvbmVudCByZWdp
c3RyYXRpb24uCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhv
ZCBtYWtlVmlld0hlbHBlcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gVmlld0NsYXNzIHZpZXcgY2xhc3MgY29uc3Ry
dWN0b3IKLSAgICAgICAgICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAqLwotICAgICAg
ICBFbWJlckhhbmRsZWJhcnMubWFrZVZpZXdIZWxwZXIgPSBmdW5jdGlvbihWaWV3Q2xhc3MpIHsK
LSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkgcGFzcyBhdHRyaWJ1dGVzIChzdWNoIGFzIG5hbWU9
dmFsdWUpIG5vdCBiYXJlIHZhbHVlcyB0byBhIGhlbHBlciBmb3IgYSBWaWV3IGZvdW5kIGluICci
ICsgVmlld0NsYXNzLnRvU3RyaW5nKCkgKyAiJyIsIGFyZ3VtZW50cy5sZW5ndGggPCAyKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRW1iZXJIYW5kbGViYXJzLmhlbHBlcnMudmlldy5jYWxsKHRo
aXMsIFZpZXdDbGFzcywgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgQGNsYXNzIGhlbHBlcnMKLSAgICAgICAgICAgIEBuYW1l
c3BhY2UgRW1iZXIuSGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXJIYW5k
bGViYXJzLmhlbHBlcnMgPSBvYmplY3RDcmVhdGUoSGFuZGxlYmFycy5oZWxwZXJzKTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgT3ZlcnJpZGUgdGhlIHRoZSBvcGNvZGUgY29tcGlsZXIg
YW5kIEphdmFTY3JpcHQgY29tcGlsZXIgZm9yIEhhbmRsZWJhcnMuCi0KLSAgICAgICAgICAgICAg
QGNsYXNzIENvbXBpbGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIuSGFuZGxlYmFy
cwotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAg
ICAgICAgICAgICovCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5Db21waWxlciA9IGZ1bmN0aW9u
KCkge307Ci0KLSAgICAgICAgLy8gSGFuZGxlYmFycy5Db21waWxlciBkb2Vzbid0IGV4aXN0IGlu
IHJ1bnRpbWUtb25seQotICAgICAgICBpZiAoSGFuZGxlYmFycy5Db21waWxlcikgewotICAgICAg
ICAgICAgRW1iZXJIYW5kbGViYXJzLkNvbXBpbGVyLnByb3RvdHlwZSA9IG9iamVjdENyZWF0ZShI
YW5kbGViYXJzLkNvbXBpbGVyLnByb3RvdHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMuQ29tcGlsZXIucHJvdG90eXBlLmNvbXBpbGVyID0gRW1iZXJIYW5kbGViYXJz
LkNvbXBpbGVyOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAY2xhc3MgSmF2YVNjcmlw
dENvbXBpbGVyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIuSGFuZGxlYmFycwotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAgICAgICAg
ICAgICovCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIgPSBmdW5j
dGlvbigpIHt9OwotCi0gICAgICAgIC8vIEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyIGRv
ZXNuJ3QgZXhpc3QgaW4gcnVudGltZS1vbmx5Ci0gICAgICAgIGlmIChIYW5kbGViYXJzLkphdmFT
Y3JpcHRDb21waWxlcikgewotICAgICAgICAgICAgRW1iZXJIYW5kbGViYXJzLkphdmFTY3JpcHRD
b21waWxlci5wcm90b3R5cGUgPSBvYmplY3RDcmVhdGUoSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29t
cGlsZXIucHJvdG90eXBlKTsKLSAgICAgICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0
Q29tcGlsZXIucHJvdG90eXBlLmNvbXBpbGVyID0gRW1iZXJIYW5kbGViYXJzLkphdmFTY3JpcHRD
b21waWxlcjsKLSAgICAgICAgfQotCi0KLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLkphdmFTY3Jp
cHRDb21waWxlci5wcm90b3R5cGUubmFtZXNwYWNlID0gIkVtYmVyLkhhbmRsZWJhcnMiOwotCi0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlLmluaXRp
YWxpemVCdWZmZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiAiJyciOwotICAg
ICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBPdmVycmlkZSB0aGUgZGVmYXVs
dCBidWZmZXIgZm9yIEVtYmVyIEhhbmRsZWJhcnMuIEJ5IGRlZmF1bHQsIEhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAgY3JlYXRlcyBhbiBlbXB0eSBTdHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBl
YWNoIGludm9jYXRpb24gYW5kIGFwcGVuZHMgdG8KLSAgICAgICAgICAgICAgaXQuIEVtYmVyJ3Mg
SGFuZGxlYmFycyBvdmVycmlkZXMgdGhpcyB0byBhcHBlbmQgdG8gYSBzaW5nbGUgc2hhcmVkIGJ1
ZmZlci4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGFw
cGVuZFRvQnVmZmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBzdHJpbmcge1N0cmluZ30KLSAgICAg
ICAgICAgICovCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIucHJv
dG90eXBlLmFwcGVuZFRvQnVmZmVyID0gZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gImRhdGEuYnVmZmVyLnB1c2goIiArIHN0cmluZyArICIpOyI7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gSGFja3MgYWhlYWQ6Ci0gICAgICAgIC8vIEhhbmRsZWJhcnMgcHJlc2VudGx5
IGhhcyBhIGJ1ZyB3aGVyZSB0aGUgYGJsb2NrSGVscGVyTWlzc2luZ2AgaG9vawotICAgICAgICAv
LyBkb2Vzbid0IGdldCBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIG1pc3NpbmcgaGVscGVyIG5hbWUs
IGJ1dCByYXRoZXIKLSAgICAgICAgLy8gZ2V0cyBwYXNzZWQgdGhlIHZhbHVlIG9mIHRoYXQgbWlz
c2luZyBoZWxwZXIgZXZhbHVhdGVkIG9uIHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIGNvbnRleHQs
IHdoaWNoIGlzIG1vc3QgbGlrZWx5IGB1bmRlZmluZWRgIGFuZCB0b3RhbGx5IHVzZWxlc3MuCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIFNvIHdlIGFsdGVyIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBm
dW5jdGlvbiB0byBwYXNzIHRoZSBuYW1lIG9mIHRoZSBoZWxwZXIKLSAgICAgICAgLy8gaW5zdGVh
ZCwgYXMgZXhwZWN0ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgY2FuIGdvIGF3YXkg
b25jZSB0aGUgZm9sbG93aW5nIGlzIGNsb3NlZDoKLSAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIu
Y29tL3d5Y2F0cy9oYW5kbGViYXJzLmpzL2lzc3Vlcy82MzQKLQotICAgICAgICB2YXIgRE9UX0xP
T0tVUF9SRUdFWCA9IC9oZWxwZXJzXC4oLio/KVwpLywKLSAgICAgICAgQlJBQ0tFVF9TVFJJTkdf
TE9PS1VQX1JFR0VYID0gL2hlbHBlcnNcWycoLio/KScvLAotICAgICAgICBJTlZPQ0FUSU9OX1NQ
TElUVElOR19SRUdFWCA9IC8oLipibG9ja0hlbHBlck1pc3NpbmdcLmNhbGxcKC4qKShzdGFja1sw
LTldKykoLC4qKS87Ci0KLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLkphdmFTY3JpcHRDb21waWxl
ci5zdHJpbmdpZnlMYXN0QmxvY2tIZWxwZXJNaXNzaW5nSW52b2NhdGlvbiA9IGZ1bmN0aW9uKHNv
dXJjZSkgewotICAgICAgICAgICAgdmFyIGhlbHBlckludm9jYXRpb24gPSBzb3VyY2Vbc291cmNl
Lmxlbmd0aCAtIDFdLAotICAgICAgICAgICAgaGVscGVyTmFtZSA9IChET1RfTE9PS1VQX1JFR0VY
LmV4ZWMoaGVscGVySW52b2NhdGlvbikgfHwgQlJBQ0tFVF9TVFJJTkdfTE9PS1VQX1JFR0VYLmV4
ZWMoaGVscGVySW52b2NhdGlvbikpWzFdLAotICAgICAgICAgICAgbWF0Y2hlcyA9IElOVk9DQVRJ
T05fU1BMSVRUSU5HX1JFR0VYLmV4ZWMoaGVscGVySW52b2NhdGlvbik7Ci0KLSAgICAgICAgICAg
IHNvdXJjZVtzb3VyY2UubGVuZ3RoIC0gMV0gPSBtYXRjaGVzWzFdICsgIiciICsgaGVscGVyTmFt
ZSArICInIiArIG1hdGNoZXNbM107Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIHN0cmluZ2lm
eUJsb2NrSGVscGVyTWlzc2luZyA9IEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIu
c3RyaW5naWZ5TGFzdEJsb2NrSGVscGVyTWlzc2luZ0ludm9jYXRpb247Ci0KLSAgICAgICAgdmFy
IG9yaWdpbmFsQmxvY2tWYWx1ZSA9IEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIu
cHJvdG90eXBlLmJsb2NrVmFsdWU7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5KYXZhU2NyaXB0
Q29tcGlsZXIucHJvdG90eXBlLmJsb2NrVmFsdWUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IG9yaWdpbmFsQmxvY2tWYWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAg
c3RyaW5naWZ5QmxvY2tIZWxwZXJNaXNzaW5nKHRoaXMuc291cmNlKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICB2YXIgb3JpZ2luYWxBbWJpZ3VvdXNCbG9ja1ZhbHVlID0gRW1iZXJIYW5kbGViYXJz
LkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUuYW1iaWd1b3VzQmxvY2tWYWx1ZTsKLSAgICAg
ICAgRW1iZXJIYW5kbGViYXJzLkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUuYW1iaWd1b3Vz
QmxvY2tWYWx1ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgb3JpZ2luYWxBbWJpZ3VvdXNC
bG9ja1ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBzdHJpbmdpZnlC
bG9ja0hlbHBlck1pc3NpbmcodGhpcy5zb3VyY2UpOwotICAgICAgICB9OwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBSZXdyaXRlIHNpbXBsZSBtdXN0YWNoZXMgZnJvbSBge3tmb299fWAg
dG8gYHt7YmluZCAiZm9vIn19YC4gVGhpcyBtZWFucyB0aGF0Ci0gICAgICAgICAgICAgIGFsbCBz
aW1wbGUgbXVzdGFjaGVzIGluIEVtYmVyJ3MgSGFuZGxlYmFycyB3aWxsIGFsc28gc2V0IHVwIGFu
IG9ic2VydmVyIHRvCi0gICAgICAgICAgICAgIGtlZXAgdGhlIERPTSB1cCB0byBkYXRlIHdoZW4g
dGhlIHVuZGVybHlpbmcgcHJvcGVydHkgY2hhbmdlcy4KLQotICAgICAgICAgICAgICBAcHJpdmF0
ZQotICAgICAgICAgICAgICBAbWV0aG9kIG11c3RhY2hlCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIuSGFuZGxlYmFycy5Db21waWxlcgotICAgICAgICAgICAgICBAcGFyYW0gbXVzdGFjaGUKLSAg
ICAgICAgICAgICovCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5Db21waWxlci5wcm90b3R5cGUu
bXVzdGFjaGUgPSBmdW5jdGlvbihtdXN0YWNoZSkgewotICAgICAgICAgICAgaWYgKCEobXVzdGFj
aGUucGFyYW1zLmxlbmd0aCB8fCBtdXN0YWNoZS5oYXNoKSkgewotICAgICAgICAgICAgICAgIHZh
ciBpZCA9IG5ldyBIYW5kbGViYXJzLkFTVC5JZE5vZGUoW3sKLSAgICAgICAgICAgICAgICAgICAg
cGFydDogJ190cmlhZ2VNdXN0YWNoZScgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIF0pOwotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtdXN0YWNoZSBub2RlIHRv
IGluY2x1ZGUgYSBoYXNoIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgb3JpZ2luYWwgbm9k
ZQotICAgICAgICAgICAgICAgIC8vIHdhcyBlc2NhcGVkLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8g
cHJvcGVybHkgZXNjYXBlIHZhbHVlcyB3aGVuIHRoZSB1bmRlcmx5aW5nIHZhbHVlCi0gICAgICAg
ICAgICAgICAgLy8gY2hhbmdlcyBhbmQgd2UgbmVlZCB0byByZS1yZW5kZXIgdGhlIHZhbHVlLgot
ICAgICAgICAgICAgICAgIGlmICghbXVzdGFjaGUuZXNjYXBlZCkgewotICAgICAgICAgICAgICAg
ICAgICBtdXN0YWNoZS5oYXNoID0gbXVzdGFjaGUuaGFzaCB8fCBuZXcgSGFuZGxlYmFycy5BU1Qu
SGFzaE5vZGUoW10pOwotICAgICAgICAgICAgICAgICAgICBtdXN0YWNoZS5oYXNoLnBhaXJzLnB1
c2goWyJ1bmVzY2FwZWQiLCBuZXcgSGFuZGxlYmFycy5BU1QuU3RyaW5nTm9kZSgidHJ1ZSIpXSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG11c3RhY2hlID0gbmV3IEhhbmRs
ZWJhcnMuQVNULk11c3RhY2hlTm9kZShbaWRdLmNvbmNhdChbbXVzdGFjaGUuaWRdKSwgbXVzdGFj
aGUuaGFzaCwgIW11c3RhY2hlLmVzY2FwZWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gSGFuZGxlYmFycy5Db21waWxlci5wcm90b3R5cGUubXVzdGFjaGUuY2FsbCh0aGlz
LCBtdXN0YWNoZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFVz
ZWQgZm9yIHByZWNvbXBpbGF0aW9uIG9mIEVtYmVyIEhhbmRsZWJhcnMgdGVtcGxhdGVzLiBUaGlz
IHdpbGwgbm90IGJlIHVzZWQKLSAgICAgICAgICAgICAgZHVyaW5nIG5vcm1hbCBhcHAgZXhlY3V0
aW9uLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgcHJlY29tcGlsZQotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSB0ZW1wbGF0ZSB0byBwcmVjb21waWxlCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gYXNPYmplY3Qgb3B0aW9uYWwgcGFyYW1ldGVyLCBk
ZWZhdWx0aW5nIHRvIHRydWUsIG9mIHdoZXRoZXIgb3Igbm90IHRoZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkIHRlbXBsYXRlIHNob3VsZCBiZSByZXR1
cm5lZCBhcyBhbiBPYmplY3Qgb3IgYSBTdHJpbmcKLSAgICAgICAgICAgICovCi0gICAgICAgIEVt
YmVySGFuZGxlYmFycy5wcmVjb21waWxlID0gZnVuY3Rpb24oc3RyaW5nLCBhc09iamVjdCkgewot
ICAgICAgICAgICAgdmFyIGFzdCA9IEhhbmRsZWJhcnMucGFyc2Uoc3RyaW5nKTsKLQotICAgICAg
ICAgICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAgICAga25vd25IZWxwZXJzOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFjdGlvbjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgdW5i
b3VuZDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgJ2JpbmQtYXR0cic6IHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICB2aWV3
OiB0cnVlLAotICAgICAgICAgICAgICAgICAgICBfdHJpYWdlTXVzdGFjaGU6IHRydWUKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGRhdGE6IHRydWUsCi0gICAgICAgICAgICAg
ICAgc3RyaW5nUGFyYW1zOiB0cnVlCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBhc09i
amVjdCA9IGFzT2JqZWN0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYXNPYmplY3Q7Ci0KLSAgICAg
ICAgICAgIHZhciBlbnZpcm9ubWVudCA9IG5ldyBFbWJlckhhbmRsZWJhcnMuQ29tcGlsZXIoKS5j
b21waWxlKGFzdCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVtYmVySGFuZGxl
YmFycy5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1
bmRlZmluZWQsIGFzT2JqZWN0KTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IHRoaXMgZm9yIEhhbmRsZWJhcnMgcnVudGltZS1vbmx5Ci0gICAgICAgIGlmIChIYW5k
bGViYXJzLmNvbXBpbGUpIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBU
aGUgZW50cnkgcG9pbnQgZm9yIEVtYmVyIEhhbmRsZWJhcnMuIFRoaXMgcmVwbGFjZXMgdGhlIGRl
ZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgYEhhbmRsZWJhcnMuY29tcGlsZWAgYW5kIHR1cm5z
IG9uIHRlbXBsYXRlLWxvY2FsIGRhdGEgYW5kIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29tcGlsZQotICAgICAg
ICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpYwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSB0
ZW1wbGF0ZSB0byBjb21waWxlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Z1bmN0aW9u
fQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIEVtYmVySGFuZGxlYmFycy5jb21w
aWxlID0gZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFzdCA9IEhhbmRs
ZWJhcnMucGFyc2Uoc3RyaW5nKTsKLSAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5n
UGFyYW1zOiB0cnVlIAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgdmFyIGVu
dmlyb25tZW50ID0gbmV3IEVtYmVySGFuZGxlYmFycy5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBv
cHRpb25zKTsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVTcGVjID0gbmV3IEVtYmVySGFu
ZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25z
LCB1bmRlZmluZWQsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gRW1i
ZXJIYW5kbGViYXJzLnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7Ci0gICAgICAgICAgICAgICAgdGVt
cGxhdGUuaXNNZXRob2QgPSBmYWxzZTsgLy9NYWtlIHN1cmUgd2UgZG9uJ3Qgd3JhcCB0ZW1wbGF0
ZXMgd2l0aCAuX3N1cGVyCi0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7Ci0gICAg
ICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IEVtYmVySGFuZGxlYmFyczsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMi
LAotICAgIFsiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1tZXRhbC9jb3JlIiwg
ImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci1oYW5kbGViYXJzL2xvYWRl
ciIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJlbWJlci1oYW5kbGViYXJzL3N0cmluZyIsICJl
bWJlci1oYW5kbGViYXJzL2hlbHBlcnMvc2hhcmVkIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVy
cy9iaW5kaW5nIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9jb2xsZWN0aW9uIiwgImVtYmVy
LWhhbmRsZWJhcnMvaGVscGVycy92aWV3IiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy91bmJv
dW5kIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9kZWJ1ZyIsICJlbWJlci1oYW5kbGViYXJz
L2hlbHBlcnMvZWFjaCIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdGVtcGxhdGUiLCAiZW1i
ZXItaGFuZGxlYmFycy9oZWxwZXJzL3BhcnRpYWwiLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJz
L3lpZWxkIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9sb2MiLCAiZW1iZXItaGFuZGxlYmFy
cy9jb250cm9scy9jaGVja2JveCIsICJlbWJlci1oYW5kbGViYXJzL2NvbnRyb2xzL3NlbGVjdCIs
ICJlbWJlci1oYW5kbGViYXJzL2NvbnRyb2xzL3RleHRfYXJlYSIsICJlbWJlci1oYW5kbGViYXJz
L2NvbnRyb2xzL3RleHRfZmllbGQiLCAiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X3N1
cHBvcnQiLCAiZW1iZXItaGFuZGxlYmFycy9jb250cm9scyIsICJlbWJlci1oYW5kbGViYXJzL2Nv
bXBvbmVudF9sb29rdXAiLCAiZW1iZXItaGFuZGxlYmFycy92aWV3cy9oYW5kbGViYXJzX2JvdW5k
X3ZpZXciLCAiZW1iZXItaGFuZGxlYmFycy92aWV3cy9tZXRhbW9ycGhfdmlldyIsICJleHBvcnRz
Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVw
ZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5j
eTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywg
X19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19k
ZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBl
bmRlbmN5MTZfXywgX19kZXBlbmRlbmN5MTdfXywgX19kZXBlbmRlbmN5MThfXywgX19kZXBlbmRl
bmN5MTlfXywgX19kZXBlbmRlbmN5MjBfXywgX19kZXBlbmRlbmN5MjFfXywgX19kZXBlbmRlbmN5
MjJfXywgX19kZXBlbmRlbmN5MjNfXywgX19kZXBlbmRlbmN5MjRfXywgX19kZXBlbmRlbmN5MjVf
XywgX19kZXBlbmRlbmN5MjZfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyB0byBhZGQgdG8gZ2xvYmFscwotCi0gICAgICAgIHZhciBydW5Mb2FkSG9va3MgPSBf
X2RlcGVuZGVuY3kzX18ucnVuTG9hZEhvb2tzOwotICAgICAgICB2YXIgYm9vdHN0cmFwID0gX19k
ZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIG5vcm1hbGl6ZVBhdGggPSBf
X2RlcGVuZGVuY3k1X18ubm9ybWFsaXplUGF0aDsKLSAgICAgICAgdmFyIHRlbXBsYXRlID0gX19k
ZXBlbmRlbmN5NV9fLnRlbXBsYXRlOwotICAgICAgICB2YXIgbWFrZUJvdW5kSGVscGVyID0gX19k
ZXBlbmRlbmN5NV9fLm1ha2VCb3VuZEhlbHBlcjsKLSAgICAgICAgdmFyIHJlZ2lzdGVyQm91bmRI
ZWxwZXIgPSBfX2RlcGVuZGVuY3k1X18ucmVnaXN0ZXJCb3VuZEhlbHBlcjsKLSAgICAgICAgdmFy
IHJlc29sdmVIYXNoID0gX19kZXBlbmRlbmN5NV9fLnJlc29sdmVIYXNoOwotICAgICAgICB2YXIg
cmVzb2x2ZVBhcmFtcyA9IF9fZGVwZW5kZW5jeTVfXy5yZXNvbHZlUGFyYW1zOwotICAgICAgICB2
YXIgZ2V0RXNjYXBlZCA9IF9fZGVwZW5kZW5jeTVfXy5nZXRFc2NhcGVkOwotICAgICAgICB2YXIg
aGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTVfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2
YXIgZXZhbHVhdGVVbmJvdW5kSGVscGVyID0gX19kZXBlbmRlbmN5NV9fLmV2YWx1YXRlVW5ib3Vu
ZEhlbHBlcjsKLSAgICAgICAgdmFyIGhlbHBlck1pc3NpbmdIZWxwZXIgPSBfX2RlcGVuZGVuY3k1
X18uaGVscGVyTWlzc2luZ0hlbHBlcjsKLSAgICAgICAgdmFyIGJsb2NrSGVscGVyTWlzc2luZ0hl
bHBlciA9IF9fZGVwZW5kZW5jeTVfXy5ibG9ja0hlbHBlck1pc3NpbmdIZWxwZXI7Ci0KLQotICAg
ICAgICAvLyBzaWRlIGVmZmVjdCBvZiBleHRlbmRpbmcgU3RyaW5nVXRpbHMgb2YgaHRtbFNhZmUK
LQotICAgICAgICB2YXIgcmVzb2x2ZVBhdGhzID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBiaW5kID0gX19kZXBlbmRlbmN5OF9fLmJpbmQ7Ci0gICAgICAgIHZhciBf
dHJpYWdlTXVzdGFjaGVIZWxwZXIgPSBfX2RlcGVuZGVuY3k4X18uX3RyaWFnZU11c3RhY2hlSGVs
cGVyOwotICAgICAgICB2YXIgcmVzb2x2ZUhlbHBlciA9IF9fZGVwZW5kZW5jeThfXy5yZXNvbHZl
SGVscGVyOwotICAgICAgICB2YXIgYmluZEhlbHBlciA9IF9fZGVwZW5kZW5jeThfXy5iaW5kSGVs
cGVyOwotICAgICAgICB2YXIgYm91bmRJZkhlbHBlciA9IF9fZGVwZW5kZW5jeThfXy5ib3VuZElm
SGVscGVyOwotICAgICAgICB2YXIgdW5ib3VuZElmSGVscGVyID0gX19kZXBlbmRlbmN5OF9fLnVu
Ym91bmRJZkhlbHBlcjsKLSAgICAgICAgdmFyIHdpdGhIZWxwZXIgPSBfX2RlcGVuZGVuY3k4X18u
d2l0aEhlbHBlcjsKLSAgICAgICAgdmFyIGlmSGVscGVyID0gX19kZXBlbmRlbmN5OF9fLmlmSGVs
cGVyOwotICAgICAgICB2YXIgdW5sZXNzSGVscGVyID0gX19kZXBlbmRlbmN5OF9fLnVubGVzc0hl
bHBlcjsKLSAgICAgICAgdmFyIGJpbmRBdHRySGVscGVyID0gX19kZXBlbmRlbmN5OF9fLmJpbmRB
dHRySGVscGVyOwotICAgICAgICB2YXIgYmluZEF0dHJIZWxwZXJEZXByZWNhdGVkID0gX19kZXBl
bmRlbmN5OF9fLmJpbmRBdHRySGVscGVyRGVwcmVjYXRlZDsKLSAgICAgICAgdmFyIGJpbmRDbGFz
c2VzID0gX19kZXBlbmRlbmN5OF9fLmJpbmRDbGFzc2VzOwotCi0gICAgICAgIHZhciBjb2xsZWN0
aW9uSGVscGVyID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBWaWV3
SGVscGVyID0gX19kZXBlbmRlbmN5MTBfXy5WaWV3SGVscGVyOwotICAgICAgICB2YXIgdmlld0hl
bHBlciA9IF9fZGVwZW5kZW5jeTEwX18udmlld0hlbHBlcjsKLSAgICAgICAgdmFyIHVuYm91bmRI
ZWxwZXIgPSBfX2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBsb2dIZWxw
ZXIgPSBfX2RlcGVuZGVuY3kxMl9fLmxvZ0hlbHBlcjsKLSAgICAgICAgdmFyIGRlYnVnZ2VySGVs
cGVyID0gX19kZXBlbmRlbmN5MTJfXy5kZWJ1Z2dlckhlbHBlcjsKLSAgICAgICAgdmFyIEVhY2hW
aWV3ID0gX19kZXBlbmRlbmN5MTNfXy5FYWNoVmlldzsKLSAgICAgICAgdmFyIEdyb3VwZWRFYWNo
ID0gX19kZXBlbmRlbmN5MTNfXy5Hcm91cGVkRWFjaDsKLSAgICAgICAgdmFyIGVhY2hIZWxwZXIg
PSBfX2RlcGVuZGVuY3kxM19fLmVhY2hIZWxwZXI7Ci0gICAgICAgIHZhciB0ZW1wbGF0ZUhlbHBl
ciA9IF9fZGVwZW5kZW5jeTE0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHBhcnRpYWxIZWxw
ZXIgPSBfX2RlcGVuZGVuY3kxNV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciB5aWVsZEhlbHBl
ciA9IF9fZGVwZW5kZW5jeTE2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGxvY0hlbHBlciA9
IF9fZGVwZW5kZW5jeTE3X19bImRlZmF1bHQiXTsKLQotCi0gICAgICAgIHZhciBDaGVja2JveCA9
IF9fZGVwZW5kZW5jeTE4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFNlbGVjdCA9IF9fZGVw
ZW5kZW5jeTE5X18uU2VsZWN0OwotICAgICAgICB2YXIgU2VsZWN0T3B0aW9uID0gX19kZXBlbmRl
bmN5MTlfXy5TZWxlY3RPcHRpb247Ci0gICAgICAgIHZhciBTZWxlY3RPcHRncm91cCA9IF9fZGVw
ZW5kZW5jeTE5X18uU2VsZWN0T3B0Z3JvdXA7Ci0gICAgICAgIHZhciBUZXh0QXJlYSA9IF9fZGVw
ZW5kZW5jeTIwX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRleHRGaWVsZCA9IF9fZGVwZW5k
ZW5jeTIxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRleHRTdXBwb3J0ID0gX19kZXBlbmRl
bmN5MjJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaW5wdXRIZWxwZXIgPSBfX2RlcGVuZGVu
Y3kyM19fLmlucHV0SGVscGVyOwotICAgICAgICB2YXIgdGV4dGFyZWFIZWxwZXIgPSBfX2RlcGVu
ZGVuY3kyM19fLnRleHRhcmVhSGVscGVyOwotCi0KLSAgICAgICAgdmFyIENvbXBvbmVudExvb2t1
cCA9IF9fZGVwZW5kZW5jeTI0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIF9IYW5kbGViYXJz
Qm91bmRWaWV3ID0gX19kZXBlbmRlbmN5MjVfXy5fSGFuZGxlYmFyc0JvdW5kVmlldzsKLSAgICAg
ICAgdmFyIFNpbXBsZUhhbmRsZWJhcnNWaWV3ID0gX19kZXBlbmRlbmN5MjVfXy5TaW1wbGVIYW5k
bGViYXJzVmlldzsKLSAgICAgICAgdmFyIF93cmFwTWFwID0gX19kZXBlbmRlbmN5MjZfXy5fd3Jh
cE1hcDsKLSAgICAgICAgdmFyIF9TaW1wbGVNZXRhbW9ycGhWaWV3ID0gX19kZXBlbmRlbmN5MjZf
Xy5fU2ltcGxlTWV0YW1vcnBoVmlldzsKLSAgICAgICAgdmFyIF9NZXRhbW9ycGhWaWV3ID0gX19k
ZXBlbmRlbmN5MjZfXy5fTWV0YW1vcnBoVmlldzsKLSAgICAgICAgdmFyIF9NZXRhbW9ycGggPSBf
X2RlcGVuZGVuY3kyNl9fLl9NZXRhbW9ycGg7Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAg
IEVtYmVyIEhhbmRsZWJhcnMKLQotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICBAcmVxdWlyZXMgZW1i
ZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gRW1iZXIuSGFuZGxlYmFycy5H
bG9iYWxzCi0gICAgICAgIEVtYmVySGFuZGxlYmFycy5ib290c3RyYXAgPSBib290c3RyYXA7Ci0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy50ZW1wbGF0ZSA9IHRlbXBsYXRlOwotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMubWFrZUJvdW5kSGVscGVyID0gbWFrZUJvdW5kSGVscGVyOwotICAgICAgICBF
bWJlckhhbmRsZWJhcnMucmVnaXN0ZXJCb3VuZEhlbHBlciA9IHJlZ2lzdGVyQm91bmRIZWxwZXI7
Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZXNvbHZlSGFzaCA9IHJlc29sdmVIYXNoOwotICAg
ICAgICBFbWJlckhhbmRsZWJhcnMucmVzb2x2ZVBhcmFtcyA9IHJlc29sdmVQYXJhbXM7Ci0gICAg
ICAgIEVtYmVySGFuZGxlYmFycy5yZXNvbHZlSGVscGVyID0gcmVzb2x2ZUhlbHBlcjsKLSAgICAg
ICAgRW1iZXJIYW5kbGViYXJzLmdldCA9IGhhbmRsZWJhcnNHZXQ7Ci0gICAgICAgIEVtYmVySGFu
ZGxlYmFycy5nZXRFc2NhcGVkID0gZ2V0RXNjYXBlZDsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJz
LmV2YWx1YXRlVW5ib3VuZEhlbHBlciA9IGV2YWx1YXRlVW5ib3VuZEhlbHBlcjsKLSAgICAgICAg
RW1iZXJIYW5kbGViYXJzLmJpbmQgPSBiaW5kOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMuYmlu
ZENsYXNzZXMgPSBiaW5kQ2xhc3NlczsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLkVhY2hWaWV3
ID0gRWFjaFZpZXc7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5Hcm91cGVkRWFjaCA9IEdyb3Vw
ZWRFYWNoOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVzb2x2ZVBhdGhzID0gcmVzb2x2ZVBh
dGhzOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMuVmlld0hlbHBlciA9IFZpZXdIZWxwZXI7Ci0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy5ub3JtYWxpemVQYXRoID0gbm9ybWFsaXplUGF0aDsKLQot
Ci0gICAgICAgIC8vIEVtYmVyIEdsb2JhbHMKLSAgICAgICAgRW1iZXIuSGFuZGxlYmFycyA9IEVt
YmVySGFuZGxlYmFyczsKLSAgICAgICAgRW1iZXIuQ29tcG9uZW50TG9va3VwID0gQ29tcG9uZW50
TG9va3VwOwotICAgICAgICBFbWJlci5fU2ltcGxlSGFuZGxlYmFyc1ZpZXcgPSBTaW1wbGVIYW5k
bGViYXJzVmlldzsKLSAgICAgICAgRW1iZXIuX0hhbmRsZWJhcnNCb3VuZFZpZXcgPSBfSGFuZGxl
YmFyc0JvdW5kVmlldzsKLSAgICAgICAgRW1iZXIuX1NpbXBsZU1ldGFtb3JwaFZpZXcgPSBfU2lt
cGxlTWV0YW1vcnBoVmlldzsKLSAgICAgICAgRW1iZXIuX01ldGFtb3JwaFZpZXcgPSBfTWV0YW1v
cnBoVmlldzsKLSAgICAgICAgRW1iZXIuX01ldGFtb3JwaCA9IF9NZXRhbW9ycGg7Ci0gICAgICAg
IEVtYmVyLl9tZXRhbW9ycGhXcmFwTWFwID0gX3dyYXBNYXA7Ci0gICAgICAgIEVtYmVyLlRleHRT
dXBwb3J0ID0gVGV4dFN1cHBvcnQ7Ci0gICAgICAgIEVtYmVyLkNoZWNrYm94ID0gQ2hlY2tib3g7
Ci0gICAgICAgIEVtYmVyLlNlbGVjdCA9IFNlbGVjdDsKLSAgICAgICAgRW1iZXIuU2VsZWN0T3B0
aW9uID0gU2VsZWN0T3B0aW9uOwotICAgICAgICBFbWJlci5TZWxlY3RPcHRncm91cCA9IFNlbGVj
dE9wdGdyb3VwOwotICAgICAgICBFbWJlci5UZXh0QXJlYSA9IFRleHRBcmVhOwotICAgICAgICBF
bWJlci5UZXh0RmllbGQgPSBUZXh0RmllbGQ7Ci0gICAgICAgIEVtYmVyLlRleHRTdXBwb3J0ID0g
VGV4dFN1cHBvcnQ7Ci0KLSAgICAgICAgLy8gcmVnaXN0ZXIgaGVscGVycwotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBoZWxwZXJNaXNzaW5n
SGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdibG9ja0hl
bHBlck1pc3NpbmcnLCBibG9ja0hlbHBlck1pc3NpbmdIZWxwZXIpOwotICAgICAgICBFbWJlckhh
bmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2JpbmQnLCBiaW5kSGVscGVyKTsKLSAgICAgICAgRW1i
ZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdib3VuZElmJywgYm91bmRJZkhlbHBlcik7Ci0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignX3RyaWFnZU11c3RhY2hlJywg
X3RyaWFnZU11c3RhY2hlSGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVy
SGVscGVyKCd1bmJvdW5kSWYnLCB1bmJvdW5kSWZIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRs
ZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCB3aXRoSGVscGVyKTsKLSAgICAgICAgRW1iZXJI
YW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdpZicsIGlmSGVscGVyKTsKLSAgICAgICAgRW1iZXJI
YW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCd1bmxlc3MnLCB1bmxlc3NIZWxwZXIpOwotICAgICAg
ICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2JpbmQtYXR0cicsIGJpbmRBdHRySGVs
cGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdiaW5kQXR0cics
IGJpbmRBdHRySGVscGVyRGVwcmVjYXRlZCk7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdp
c3RlckhlbHBlcignY29sbGVjdGlvbicsIGNvbGxlY3Rpb25IZWxwZXIpOwotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImxvZyIsIGxvZ0hlbHBlcik7Ci0gICAgICAgIEVt
YmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigiZGVidWdnZXIiLCBkZWJ1Z2dlckhlbHBlcik7
Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigiZWFjaCIsIGVhY2hIZWxw
ZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImxvYyIsIGxvY0hl
bHBlcik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigicGFydGlhbCIs
IHBhcnRpYWxIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIo
InRlbXBsYXRlIiwgdGVtcGxhdGVIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJhcnMucmVn
aXN0ZXJIZWxwZXIoInlpZWxkIiwgeWllbGRIZWxwZXIpOwotICAgICAgICBFbWJlckhhbmRsZWJh
cnMucmVnaXN0ZXJIZWxwZXIoInZpZXciLCB2aWV3SGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5k
bGViYXJzLnJlZ2lzdGVySGVscGVyKCJ1bmJvdW5kIiwgdW5ib3VuZEhlbHBlcik7Ci0gICAgICAg
IEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigiaW5wdXQiLCBpbnB1dEhlbHBlcik7Ci0g
ICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigidGV4dGFyZWEiLCB0ZXh0YXJl
YUhlbHBlcik7Ci0KLSAgICAgICAgLy8gcnVuIGxvYWQgaG9va3MKLSAgICAgICAgcnVuTG9hZEhv
b2tzKCdFbWJlci5IYW5kbGViYXJzJywgRW1iZXJIYW5kbGViYXJzKTsKLQotICAgICAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJIYW5kbGViYXJzOwotICAgIH0pOwotICAgIGRlZmlu
ZSgiZW1iZXItaGFuZGxlYmFycy9jb21wb25lbnRfbG9va3VwIiwKLSAgICBbImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL29iamVjdCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5
MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBF
bWJlck9iamVjdCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBD
b21wb25lbnRMb29rdXAgPSBFbWJlck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgbG9va3Vw
RmFjdG9yeTogZnVuY3Rpb24obmFtZSwgY29udGFpbmVyKSB7Ci0KLSAgICAgICAgICAgICAgICBj
b250YWluZXIgPSBjb250YWluZXIgfHwgdGhpcy5jb250YWluZXI7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgZnVsbE5hbWUgPSAnY29tcG9uZW50OicgKyBuYW1lLAotICAgICAgICAgICAgICAgIHRl
bXBsYXRlRnVsbE5hbWUgPSAndGVtcGxhdGU6Y29tcG9uZW50cy8nICsgbmFtZSwKLSAgICAgICAg
ICAgICAgICB0ZW1wbGF0ZVJlZ2lzdGVyZWQgPSBjb250YWluZXIgJiYgY29udGFpbmVyLmhhcyh0
ZW1wbGF0ZUZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVJlZ2lzdGVy
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmluamVjdGlvbihmdWxsTmFtZSwg
J2xheW91dCcsIHRlbXBsYXRlRnVsbE5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBDb21wb25lbnQgPSBjb250YWluZXIubG9va3VwRmFjdG9yeShmdWxsTmFt
ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBPbmx5IHRyZWF0IGFzIGEgY29tcG9uZW50IGlmIGVp
dGhlciB0aGUgY29tcG9uZW50Ci0gICAgICAgICAgICAgICAgLy8gb3IgYSB0ZW1wbGF0ZSBoYXMg
YmVlbiByZWdpc3RlcmVkLgotICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVJlZ2lzdGVyZWQg
fHwgQ29tcG9uZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQ29tcG9uZW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIoZnVsbE5hbWUsIEVtYmVy
LkNvbXBvbmVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnQgPSBjb250YWlu
ZXIubG9va3VwRmFjdG9yeShmdWxsTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENvbXBvbmVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0g
PSBDb21wb25lbnRMb29rdXA7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJz
L2NvbnRyb2xzIiwKLSAgICBbImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvY2hlY2tib3giLCAi
ZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X2ZpZWxkIiwgImVtYmVyLWhhbmRsZWJhcnMv
Y29udHJvbHMvdGV4dF9hcmVhIiwgImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItaGFuZGxlYmFy
cy1jb21waWxlciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVu
ZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIENoZWNrYm94ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBU
ZXh0RmllbGQgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRleHRB
cmVhID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIEVtYmVyID0g
X19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAg
ICAgICAvLyB2YXIgZW1iZXJBc3NlcnQgPSBFbWJlci5hc3NlcnQ7Ci0KLSAgICAgICAgdmFyIEVt
YmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
aGVscGVycyA9IEVtYmVySGFuZGxlYmFycy5oZWxwZXJzOwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFy
cy1jb21waWxlcgotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLQotICAgICAgICAgICAg
ICBUaGUgYHt7aW5wdXR9fWAgaGVscGVyIGluc2VydHMgYW4gSFRNTCBgPGlucHV0PmAgdGFnIGlu
dG8gdGhlIHRlbXBsYXRlLAotICAgICAgICAgICAgICB3aXRoIGEgYHR5cGVgIHZhbHVlIG9mIGVp
dGhlciBgdGV4dGAgb3IgYGNoZWNrYm94YC4gSWYgbm8gYHR5cGVgIGlzIHByb3ZpZGVkLAotICAg
ICAgICAgICAgICBgdGV4dGAgd2lsbCBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBhcHBsaWVkLiBUaGUg
YXR0cmlidXRlcyBvZiBge3tpbnB1dH19YAotICAgICAgICAgICAgICBtYXRjaCB0aG9zZSBvZiB0
aGUgbmF0aXZlIEhUTUwgdGFnIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgZm9yIHRoZXNlIHR3byB0
eXBlcy4KLQotICAgICAgICAgICAgICAjIyBVc2UgYXMgdGV4dCBmaWVsZAotICAgICAgICAgICAg
ICBBbiBge3tpbnB1dH19YCB3aXRoIG5vIGB0eXBlYCBvciBhIGB0eXBlYCBvZiBgdGV4dGAgd2ls
bCByZW5kZXIgYW4gSFRNTCB0ZXh0IGlucHV0LgotICAgICAgICAgICAgICBUaGUgZm9sbG93aW5n
IEhUTUwgYXR0cmlidXRlcyBjYW4gYmUgc2V0IHZpYSB0aGUgaGVscGVyOgotCi0gICAgICAgICAg
ICAgPHRhYmxlPgotICAgICAgICAgICAgICA8dHI+PHRkPmByZWFkb25seWA8L3RkPjx0ZD5gcmVx
dWlyZWRgPC90ZD48dGQ+YGF1dG9mb2N1c2A8L3RkPjwvdHI+Ci0gICAgICAgICAgICAgIDx0cj48
dGQ+YHZhbHVlYDwvdGQ+PHRkPmBwbGFjZWhvbGRlcmA8L3RkPjx0ZD5gZGlzYWJsZWRgPC90ZD48
L3RyPgotICAgICAgICAgICAgICA8dHI+PHRkPmBzaXplYDwvdGQ+PHRkPmB0YWJpbmRleGA8L3Rk
Pjx0ZD5gbWF4bGVuZ3RoYDwvdGQ+PC90cj4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5gbmFtZWA8
L3RkPjx0ZD5gbWluYDwvdGQ+PHRkPmBtYXhgPC90ZD48L3RyPgotICAgICAgICAgICAgICA8dHI+
PHRkPmBwYXR0ZXJuYDwvdGQ+PHRkPmBhY2NlcHRgPC90ZD48dGQ+YGF1dG9jb21wbGV0ZWA8L3Rk
PjwvdHI+Ci0gICAgICAgICAgICAgIDx0cj48dGQ+YGF1dG9zYXZlYDwvdGQ+PHRkPmBmb3JtYWN0
aW9uYDwvdGQ+PHRkPmBmb3JtZW5jdHlwZWA8L3RkPjwvdHI+Ci0gICAgICAgICAgICAgIDx0cj48
dGQ+YGZvcm1tZXRob2RgPC90ZD48dGQ+YGZvcm1ub3ZhbGlkYXRlYDwvdGQ+PHRkPmBmb3JtdGFy
Z2V0YDwvdGQ+PC90cj4KLSAgICAgICAgICAgICAgPHRyPjx0ZD5gaGVpZ2h0YDwvdGQ+PHRkPmBp
bnB1dG1vZGVgPC90ZD48dGQ+YG11bHRpcGxlYDwvdGQ+PC90cj4KLSAgICAgICAgICAgICAgPHRy
Pjx0ZD5gc3RlcGA8L3RkPjx0ZD5gd2lkdGhgPC90ZD48dGQ+YGZvcm1gPC90ZD48L3RyPgotICAg
ICAgICAgICAgICA8dHI+PHRkPmBzZWxlY3Rpb25EaXJlY3Rpb25gPC90ZD48dGQ+YHNwZWxsY2hl
Y2tgPC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgotICAgICAgICAgICAgIDwvdGFibGU+Ci0KLQot
ICAgICAgICAgICAgICBXaGVuIHNldCB0byBhIHF1b3RlZCBzdHJpbmcsIHRoZXNlIHZhbHVlcyB3
aWxsIGJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gdGhlIEhUTUwKLSAgICAgICAgICAgICAgZWxlbWVu
dC4gV2hlbiBsZWZ0IHVucXVvdGVkLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBib3VuZCB0byBhIHBy
b3BlcnR5IG9uIHRoZQotICAgICAgICAgICAgICB0ZW1wbGF0ZSdzIGN1cnJlbnQgcmVuZGVyaW5n
IGNvbnRleHQgKG1vc3QgdHlwaWNhbGx5IGEgY29udHJvbGxlciBpbnN0YW5jZSkuCi0KLSAgICAg
ICAgICAgICAgIyMgVW5ib3VuZDoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIHt7aW5wdXQgdmFsdWU9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tIn19Ci0gICAg
ICAgICAgICAgIGBgYAotCi0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8
aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tIi8+Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEJvdW5kOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9
IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICJT
dGFubGV5IiwKLSAgICAgICAgICAgICAgICBlbnRyeU5vdEFsbG93ZWQ6IHRydWUKLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxl
YmFycwotICAgICAgICAgICAgICB7e2lucHV0IHR5cGU9InRleHQiIHZhbHVlPWZpcnN0TmFtZSBk
aXNhYmxlZD1lbnRyeU5vdEFsbG93ZWQgc2l6ZT0iNTAifX0KLSAgICAgICAgICAgICAgYGBgCi0K
LQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0
IiB2YWx1ZT0iU3RhbmxleSIgZGlzYWJsZWQ9ImRpc2FibGVkIiBzaXplPSI1MCIvPgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBBY3Rpb25zCi0KLSAgICAgICAgICAgICAg
VGhlIGhlbHBlciBjYW4gc2VuZCBtdWx0aXBsZSBhY3Rpb25zIGJhc2VkIG9uIHVzZXIgZXZlbnRz
LgotCi0gICAgICAgICAgICAgIFRoZSBhY3Rpb24gcHJvcGVydHkgZGVmaW5lcyB0aGUgYWN0aW9u
IHdoaWNoIGlzIHNlbmQgd2hlbgotICAgICAgICAgICAgICB0aGUgdXNlciBwcmVzc2VzIHRoZSBy
ZXR1cm4ga2V5LgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAg
e3tpbnB1dCBhY3Rpb249InN1Ym1pdCJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBUaGUgaGVscGVyIGFsbG93cyBzb21lIHVzZXIgZXZlbnRzIHRvIHNlbmQgYWN0aW9ucy4K
LQotICAgICAgICAgICAgKiBgZW50ZXJgCi0gICAgICAgICAgICAqIGBpbnNlcnQtbmV3bGluZWAK
LSAgICAgICAgICAgICogYGVzY2FwZS1wcmVzc2AKLSAgICAgICAgICAgICogYGZvY3VzLWluYAot
ICAgICAgICAgICAgKiBgZm9jdXMtb3V0YAotICAgICAgICAgICAgKiBga2V5LXByZXNzYAotCi0g
ICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgZGVzaXJlIGFuIGFjdGlvbiB0byBiZSBz
ZW50IHdoZW4gdGhlIGlucHV0IGlzIGJsdXJyZWQsCi0gICAgICAgICAgICAgIHlvdSBvbmx5IG5l
ZWQgdG8gc2V0dXAgdGhlIGFjdGlvbiBuYW1lIHRvIHRoZSBldmVudCBuYW1lIHByb3BlcnR5Lgot
Ci0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tpbnB1dCBmb2N1
cy1pbj0iYWxlcnRNZXNzYWdlIn19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IFNlZSBtb3JlIGFib3V0IFtUZXh0IFN1cHBvcnQgQWN0aW9uc10oYXBpL2NsYXNzZXMvRW1iZXIu
VGV4dEZpZWxkLmh0bWwpCi0KLSAgICAgICAgICAgICAgIyMgRXh0ZW5zaW9uCi0KLSAgICAgICAg
ICAgICAgSW50ZXJuYWxseSwgYHt7aW5wdXQgdHlwZT0idGV4dCJ9fWAgY3JlYXRlcyBhbiBpbnN0
YW5jZSBvZiBgRW1iZXIuVGV4dEZpZWxkYCwgcGFzc2luZwotICAgICAgICAgICAgICBhcmd1bWVu
dHMgZnJvbSB0aGUgaGVscGVyIHRvIGBFbWJlci5UZXh0RmllbGRgJ3MgYGNyZWF0ZWAgbWV0aG9k
LiBZb3UgY2FuIGV4dGVuZCB0aGUKLSAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzIG9mIHRleHQg
aW5wdXRzIGluIHlvdXIgYXBwbGljYXRpb25zIGJ5IHJlb3BlbmluZyB0aGlzIGNsYXNzLiBGb3Ig
ZXhhbXBsZSwKLSAgICAgICAgICAgICAgaWYgeW91IGFyZSBidWlsZGluZyBhIEJvb3RzdHJhcCBw
cm9qZWN0IHdoZXJlIGBkYXRhLSpgIGF0dHJpYnV0ZXMgYXJlIHVzZWQsIHlvdQotICAgICAgICAg
ICAgICBjYW4gYWRkIG9uZSB0byB0aGUgYFRleHRGaWVsZGAncyBgYXR0cmlidXRlQmluZGluZ3Ng
IHByb3BlcnR5OgotCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICBFbWJlci5UZXh0RmllbGQucmVvcGVuKHsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCaW5k
aW5nczogWydkYXRhLWVycm9yJ10KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEtlZXAgaW4gbWluZCB3aGVuIHdyaXRpbmcgYEVtYmVyLlRleHRG
aWVsZGAgc3ViY2xhc3NlcyB0aGF0IGBFbWJlci5UZXh0RmllbGRgCi0gICAgICAgICAgICAgIGl0
c2VsZiBleHRlbmRzIGBFbWJlci5Db21wb25lbnRgLCBtZWFuaW5nIHRoYXQgaXQgZG9lcyBOT1Qg
aW5oZXJpdAotICAgICAgICAgICAgICB0aGUgYGNvbnRyb2xsZXJgIG9mIHRoZSBwYXJlbnQgdmll
dy4KLQotICAgICAgICAgICAgICBTZWUgbW9yZSBhYm91dCBbRW1iZXIgY29tcG9uZW50c10oYXBp
L2NsYXNzZXMvRW1iZXIuQ29tcG9uZW50Lmh0bWwpCi0KLQotICAgICAgICAgICAgICAjIyBVc2Ug
YXMgY2hlY2tib3gKLQotICAgICAgICAgICAgICBBbiBge3tpbnB1dH19YCB3aXRoIGEgYHR5cGVg
IG9mIGBjaGVja2JveGAgd2lsbCByZW5kZXIgYW4gSFRNTCBjaGVja2JveCBpbnB1dC4KLSAgICAg
ICAgICAgICAgVGhlIGZvbGxvd2luZyBIVE1MIGF0dHJpYnV0ZXMgY2FuIGJlIHNldCB2aWEgdGhl
IGhlbHBlcjoKLQotICAgICAgICAgICAgKiBgY2hlY2tlZGAKLSAgICAgICAgICAgICogYGRpc2Fi
bGVkYAotICAgICAgICAgICAgKiBgdGFiaW5kZXhgCi0gICAgICAgICAgICAqIGBpbmRldGVybWlu
YXRlYAotICAgICAgICAgICAgKiBgbmFtZWAKLSAgICAgICAgICAgICogYGF1dG9mb2N1c2AKLSAg
ICAgICAgICAgICogYGZvcm1gCi0KLQotICAgICAgICAgICAgICBXaGVuIHNldCB0byBhIHF1b3Rl
ZCBzdHJpbmcsIHRoZXNlIHZhbHVlcyB3aWxsIGJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gdGhlIEhU
TUwKLSAgICAgICAgICAgICAgZWxlbWVudC4gV2hlbiBsZWZ0IHVucXVvdGVkLCB0aGVzZSB2YWx1
ZXMgd2lsbCBiZSBib3VuZCB0byBhIHByb3BlcnR5IG9uIHRoZQotICAgICAgICAgICAgICB0ZW1w
bGF0ZSdzIGN1cnJlbnQgcmVuZGVyaW5nIGNvbnRleHQgKG1vc3QgdHlwaWNhbGx5IGEgY29udHJv
bGxlciBpbnN0YW5jZSkuCi0KLSAgICAgICAgICAgICAgIyMgVW5ib3VuZDoKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7aW5wdXQgdHlwZT0iY2hlY2tib3gi
IG5hbWU9ImlzQWRtaW4ifX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImlzQWRtaW4i
IC8+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEJvdW5kOgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29u
dHJvbGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBpc0Fk
bWluOiB0cnVlCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tpbnB1dCB0eXBlPSJjaGVj
a2JveCIgY2hlY2tlZD1pc0FkbWluIH19Ci0gICAgICAgICAgICAgIGBgYAotCi0KLSAgICAgICAg
ICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNr
ZWQ9ImNoZWNrZWQiIC8+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEV4
dGVuc2lvbgotCi0gICAgICAgICAgICAgIEludGVybmFsbHksIGB7e2lucHV0IHR5cGU9ImNoZWNr
Ym94In19YCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBFbWJlci5DaGVja2JveGAsIHBhc3NpbmcK
LSAgICAgICAgICAgICAgYXJndW1lbnRzIGZyb20gdGhlIGhlbHBlciB0byBgRW1iZXIuQ2hlY2ti
b3hgJ3MgYGNyZWF0ZWAgbWV0aG9kLiBZb3UgY2FuIGV4dGVuZCB0aGUKLSAgICAgICAgICAgICAg
Y2FwYWJsaWx0aWVzIG9mIGNoZWNrYm94IGlucHV0cyBpbiB5b3VyIGFwcGxpY2F0aW9ucyBieSBy
ZW9wZW5pbmcgdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgIGlmIHlvdSB3
YW50ZWQgdG8gYWRkIGEgY3NzIGNsYXNzIHRvIGFsbCBjaGVja2JveGVzIGluIHlvdXIgYXBwbGlj
YXRpb246Ci0KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVt
YmVyLkNoZWNrYm94LnJlb3Blbih7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lczogWydteS1h
cHAtY2hlY2tib3gnXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLQot
ICAgICAgICAgICAgICBAbWV0aG9kIGlucHV0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFu
ZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAg
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW5wdXRIZWxwZXIob3B0aW9ucykgewotICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCdZb3UgY2FuIG9ubHkgcGFzcyBhdHRyaWJ1dGVzIHRvIHRo
ZSBgaW5wdXRgIGhlbHBlciwgbm90IGFyZ3VtZW50cycsIGFyZ3VtZW50cy5sZW5ndGggPCAyKTsK
LQotICAgICAgICAgICAgdmFyIGhhc2ggPSBvcHRpb25zLmhhc2gsCi0gICAgICAgICAgICB0eXBl
cyA9IG9wdGlvbnMuaGFzaFR5cGVzLAotICAgICAgICAgICAgaW5wdXRUeXBlID0gaGFzaC50eXBl
LAotICAgICAgICAgICAgb25FdmVudCA9IGhhc2gub247Ci0KLSAgICAgICAgICAgIGRlbGV0ZSBo
YXNoLnR5cGU7Ci0gICAgICAgICAgICBkZWxldGUgaGFzaC5vbjsKLQotICAgICAgICAgICAgaWYg
KGlucHV0VHlwZSA9PT0gJ2NoZWNrYm94JykgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgie3tpbnB1dCB0eXBlPSdjaGVja2JveCd9fSBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgYHZh
bHVlPXNvbWVCb29sZWFuVmFsdWVgOyB5b3UgbXVzdCB1c2UgYGNoZWNrZWQ9c29tZUJvb2xlYW5W
YWx1ZWAgaW5zdGVhZC4iLCBvcHRpb25zLmhhc2hUeXBlcy52YWx1ZSAhPT0gJ0lEJyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMudmlldy5jYWxsKHRoaXMsIENoZWNrYm94LCBvcHRp
b25zKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0VHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICBoYXNoLnR5cGUgPSBpbnB1dFR5cGU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGhhc2gub25FdmVudCA9IG9uRXZlbnQgfHwgJ2Vu
dGVyJzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVycy52aWV3LmNhbGwodGhpcywgVGV4
dEZpZWxkLCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLmlucHV0SGVscGVyID0gaW5wdXRIZWxwZXI7IC8qKgotICAgICAgICAgICAgICBg
e3t0ZXh0YXJlYX19YCBpbnNlcnRzIGEgbmV3IGluc3RhbmNlIG9mIGA8dGV4dGFyZWE+YCB0YWcg
aW50byB0aGUgdGVtcGxhdGUuCi0gICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIG9mIGB7e3Rl
eHRhcmVhfX1gIG1hdGNoIHRob3NlIG9mIHRoZSBuYXRpdmUgSFRNTCB0YWdzIGFzCi0gICAgICAg
ICAgICAgIGNsb3NlbHkgYXMgcG9zc2libGUuCi0KLSAgICAgICAgICAgICAgVGhlIGZvbGxvd2lu
ZyBIVE1MIGF0dHJpYnV0ZXMgY2FuIGJlIHNldDoKLQotICAgICAgICAgICAgICAgICogYHZhbHVl
YAotICAgICAgICAgICAgICAgICogYG5hbWVgCi0gICAgICAgICAgICAgICAgKiBgcm93c2AKLSAg
ICAgICAgICAgICAgICAqIGBjb2xzYAotICAgICAgICAgICAgICAgICogYHBsYWNlaG9sZGVyYAot
ICAgICAgICAgICAgICAgICogYGRpc2FibGVkYAotICAgICAgICAgICAgICAgICogYG1heGxlbmd0
aGAKLSAgICAgICAgICAgICAgICAqIGB0YWJpbmRleGAKLSAgICAgICAgICAgICAgICAqIGBzZWxl
Y3Rpb25FbmRgCi0gICAgICAgICAgICAgICAgKiBgc2VsZWN0aW9uU3RhcnRgCi0gICAgICAgICAg
ICAgICAgKiBgc2VsZWN0aW9uRGlyZWN0aW9uYAotICAgICAgICAgICAgICAgICogYHdyYXBgCi0g
ICAgICAgICAgICAgICAgKiBgcmVhZG9ubHlgCi0gICAgICAgICAgICAgICAgKiBgYXV0b2ZvY3Vz
YAotICAgICAgICAgICAgICAgICogYGZvcm1gCi0gICAgICAgICAgICAgICAgKiBgc3BlbGxjaGVj
a2AKLSAgICAgICAgICAgICAgICAqIGByZXF1aXJlZGAKLQotICAgICAgICAgICAgICBXaGVuIHNl
dCB0byBhIHF1b3RlZCBzdHJpbmcsIHRoZXNlIHZhbHVlIHdpbGwgYmUgZGlyZWN0bHkgYXBwbGll
ZCB0byB0aGUgSFRNTAotICAgICAgICAgICAgICBlbGVtZW50LiBXaGVuIGxlZnQgdW5xdW90ZWQs
IHRoZXNlIHZhbHVlcyB3aWxsIGJlIGJvdW5kIHRvIGEgcHJvcGVydHkgb24gdGhlCi0gICAgICAg
ICAgICAgIHRlbXBsYXRlJ3MgY3VycmVudCByZW5kZXJpbmcgY29udGV4dCAobW9zdCB0eXBpY2Fs
bHkgYSBjb250cm9sbGVyIGluc3RhbmNlKS4KLQotICAgICAgICAgICAgICBVbmJvdW5kOgotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3t0ZXh0YXJlYSB2YWx1
ZT0iTG90cyBvZiBzdGF0aWMgdGV4dCB0aGF0IElTTidUIGJvdW5kIn19Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFdvdWxkIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6
Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9
ImVtYmVyLXRleHQtYXJlYSI+Ci0gICAgICAgICAgICAgICAgTG90cyBvZiBzdGF0aWMgdGV4dCB0
aGF0IElTTidUIGJvdW5kCi0gICAgICAgICAgICAgIDwvdGV4dGFyZWE+Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEJvdW5kOgotCi0gICAgICAgICAgICAgIEluIHRoZSBmb2xs
b3dpbmcgZXhhbXBsZSwgdGhlIGB3cml0dGVuV29yZHNgIHByb3BlcnR5IG9uIGBBcHAuQXBwbGlj
YXRpb25Db250cm9sbGVyYAotICAgICAgICAgICAgICB3aWxsIGJlIHVwZGF0ZWQgbGl2ZSBhcyB0
aGUgdXNlciB0eXBlcyAnTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQnIGludG8KLSAgICAgICAg
ICAgICAgdGhlIHRleHQgYXJlYSBvZiB0aGVpciBicm93c2VyJ3Mgd2luZG93LgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJv
bGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB3cml0dGVu
V29yZHM6ICJMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZCIKLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAg
ICAgICAge3t0ZXh0YXJlYSB2YWx1ZT13cml0dGVuV29yZHN9fQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgV291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRNTDoKLQot
ICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iZW1i
ZXItdGV4dC1hcmVhIj4KLSAgICAgICAgICAgICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3Vu
ZAotICAgICAgICAgICAgICA8L3RleHRhcmVhPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBJZiB5b3Ugd2FudGVkIGEgb25lIHdheSBiaW5kaW5nIGJldHdlZW4gdGhlIHRleHQg
YXJlYSBhbmQgYSBkaXYgdGFnCi0gICAgICAgICAgICAgIHNvbWV3aGVyZSBlbHNlIG9uIHlvdXIg
c2NyZWVuLCB5b3UgY291bGQgdXNlIGBFbWJlci5jb21wdXRlZC5vbmVXYXlgOgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJv
bGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB3cml0dGVu
V29yZHM6ICJMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZCIsCi0gICAgICAgICAgICAgICAgb3V0
cHV0V3JpdHRlbldvcmRzOiBFbWJlci5jb21wdXRlZC5vbmVXYXkoIndyaXR0ZW5Xb3JkcyIpCi0g
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBo
YW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7dGV4dGFyZWEgdmFsdWU9d3JpdHRlbldvcmRzfX0K
LQotICAgICAgICAgICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIHt7b3V0cHV0V3JpdHRlbldv
cmRzfX0KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFdvdWxkIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6Ci0KLSAgICAgICAgICAg
ICAgYGBgaHRtbAotICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImVtYmVyLXRleHQtYXJl
YSI+Ci0gICAgICAgICAgICAgICAgTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQKLSAgICAgICAg
ICAgICAgPC90ZXh0YXJlYT4KLQotICAgICAgICAgICAgICA8LS0gdGhlIGZvbGxvd2luZyBkaXYg
d2lsbCBiZSB1cGRhdGVkIGluIHJlYWwgdGltZSBhcyB5b3UgdHlwZSAtLT4KLQotICAgICAgICAg
ICAgICA8ZGl2PgotICAgICAgICAgICAgICAgIExvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kCi0g
ICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBG
aW5hbGx5LCB0aGlzIGV4YW1wbGUgcmVhbGx5IHNob3dzIHRoZSBwb3dlciBhbmQgZWFzZSBvZiBF
bWJlciB3aGVuIHR3bwotICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGFyZSBib3VuZCB0byBlYWNo
b3RoZXIgdmlhIGBFbWJlci5jb21wdXRlZC5hbGlhc2AuIFR5cGUgaW50bwotICAgICAgICAgICAg
ICBlaXRoZXIgdGV4dCBhcmVhIGJveCBhbmQgdGhleSdsbCBib3RoIHN0YXkgaW4gc3luYy4gTm90
ZSB0aGF0Ci0gICAgICAgICAgICAgIGBFbWJlci5jb21wdXRlZC5hbGlhc2AgY29zdHMgbW9yZSBp
biB0ZXJtcyBvZiBwZXJmb3JtYW5jZSwgc28gb25seSB1c2UgaXQgd2hlbgotICAgICAgICAgICAg
ICB5b3VyIHJlYWxseSBiaW5kaW5nIGluIGJvdGggZGlyZWN0aW9uczoKLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIg
PSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgd3JpdHRlbldvcmRz
OiAiTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQiLAotICAgICAgICAgICAgICAgIHR3b1dheVdy
aXR0ZW5Xb3JkczogRW1iZXIuY29tcHV0ZWQuYWxpYXMoIndyaXR0ZW5Xb3JkcyIpCi0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGVi
YXJzCi0gICAgICAgICAgICAgIHt7dGV4dGFyZWEgdmFsdWU9d3JpdHRlbldvcmRzfX0KLSAgICAg
ICAgICAgICAge3t0ZXh0YXJlYSB2YWx1ZT10d29XYXlXcml0dGVuV29yZHN9fQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDx0ZXh0YXJl
YSBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdGV4dC1hcmVhIj4KLSAgICAgICAgICAgICAgICBM
b3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZAotICAgICAgICAgICAgICA8L3RleHRhcmVhPgotCi0g
ICAgICAgICAgICAgIDwtLSBib3RoIHVwZGF0ZWQgaW4gcmVhbCB0aW1lIC0tPgotCi0gICAgICAg
ICAgICAgIDx0ZXh0YXJlYSBpZD0iZW1iZXIyIiBjbGFzcz0iZW1iZXItdGV4dC1hcmVhIj4KLSAg
ICAgICAgICAgICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZAotICAgICAgICAgICAgICA8
L3RleHRhcmVhPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBBY3Rpb25z
Ci0KLSAgICAgICAgICAgICAgVGhlIGhlbHBlciBjYW4gc2VuZCBtdWx0aXBsZSBhY3Rpb25zIGJh
c2VkIG9uIHVzZXIgZXZlbnRzLgotCi0gICAgICAgICAgICAgIFRoZSBhY3Rpb24gcHJvcGVydHkg
ZGVmaW5lcyB0aGUgYWN0aW9uIHdoaWNoIGlzIHNlbmQgd2hlbgotICAgICAgICAgICAgICB0aGUg
dXNlciBwcmVzc2VzIHRoZSByZXR1cm4ga2V5LgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgICAgICAgICAge3tpbnB1dCBhY3Rpb249InN1Ym1pdCJ9fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBUaGUgaGVscGVyIGFsbG93cyBzb21lIHVzZXIgZXZlbnRz
IHRvIHNlbmQgYWN0aW9ucy4KLQotICAgICAgICAgICAgKiBgZW50ZXJgCi0gICAgICAgICAgICAq
IGBpbnNlcnQtbmV3bGluZWAKLSAgICAgICAgICAgICogYGVzY2FwZS1wcmVzc2AKLSAgICAgICAg
ICAgICogYGZvY3VzLWluYAotICAgICAgICAgICAgKiBgZm9jdXMtb3V0YAotICAgICAgICAgICAg
KiBga2V5LXByZXNzYAotCi0gICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgZGVzaXJl
IGFuIGFjdGlvbiB0byBiZSBzZW50IHdoZW4gdGhlIGlucHV0IGlzIGJsdXJyZWQsCi0gICAgICAg
ICAgICAgIHlvdSBvbmx5IG5lZWQgdG8gc2V0dXAgdGhlIGFjdGlvbiBuYW1lIHRvIHRoZSBldmVu
dCBuYW1lIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAg
ICAgICAge3t0ZXh0YXJlYSBmb2N1cy1pbj0iYWxlcnRNZXNzYWdlIn19Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIFNlZSBtb3JlIGFib3V0IFtUZXh0IFN1cHBvcnQgQWN0aW9u
c10oYXBpL2NsYXNzZXMvRW1iZXIuVGV4dEFyZWEuaHRtbCkKLQotICAgICAgICAgICAgICAjIyBF
eHRlbnNpb24KLQotICAgICAgICAgICAgICBJbnRlcm5hbGx5LCBge3t0ZXh0YXJlYX19YCBjcmVh
dGVzIGFuIGluc3RhbmNlIG9mIGBFbWJlci5UZXh0QXJlYWAsIHBhc3NpbmcKLSAgICAgICAgICAg
ICAgYXJndW1lbnRzIGZyb20gdGhlIGhlbHBlciB0byBgRW1iZXIuVGV4dEFyZWFgJ3MgYGNyZWF0
ZWAgbWV0aG9kLiBZb3UgY2FuCi0gICAgICAgICAgICAgIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVz
IG9mIHRleHQgYXJlYXMgaW4geW91ciBhcHBsaWNhdGlvbiBieSByZW9wZW5pbmcgdGhpcwotICAg
ICAgICAgICAgICBjbGFzcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBCb290
c3RyYXAgcHJvamVjdCB3aGVyZSBgZGF0YS0qYCAKLSAgICAgICAgICAgICAgYXR0cmlidXRlcyBh
cmUgdXNlZCwgeW91IGNhbiBnbG9iYWxseSBhZGQgc3VwcG9ydCBmb3IgYSBgZGF0YS0qYCBhdHRy
aWJ1dGUKLSAgICAgICAgICAgICAgb24gYWxsIGB7e3RleHRhcmVhfX1gcycgaW4geW91ciBhcHAg
YnkgcmVvcGVuaW5nIGBFbWJlci5UZXh0QXJlYWAgb3IKLSAgICAgICAgICAgICAgYEVtYmVyLlRl
eHRTdXBwb3J0YCBhbmQgYWRkaW5nIGl0IHRvIHRoZSBgYXR0cmlidXRlQmluZGluZ3NgIGNvbmNh
dGVuYXRlZAotICAgICAgICAgICAgICBwcm9wZXJ0eToKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLlRleHRBcmVhLnJlb3Blbih7Ci0gICAgICAgICAg
ICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnZGF0YS1lcnJvciddCi0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBLZWVwIGluIG1pbmQgd2hlbiB3
cml0aW5nIGBFbWJlci5UZXh0QXJlYWAgc3ViY2xhc3NlcyB0aGF0IGBFbWJlci5UZXh0QXJlYWAK
LSAgICAgICAgICAgICAgaXRzZWxmIGV4dGVuZHMgYEVtYmVyLkNvbXBvbmVudGAsIG1lYW5pbmcg
dGhhdCBpdCBkb2VzIE5PVCBpbmhlcml0Ci0gICAgICAgICAgICAgIHRoZSBgY29udHJvbGxlcmAg
b2YgdGhlIHBhcmVudCB2aWV3LgotCi0gICAgICAgICAgICAgIFNlZSBtb3JlIGFib3V0IFtFbWJl
ciBjb21wb25lbnRzXShhcGkvY2xhc3Nlcy9FbWJlci5Db21wb25lbnQuaHRtbCkKLQotICAgICAg
ICAgICAgICBAbWV0aG9kIHRleHRhcmVhCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxl
YmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAg
ICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gdGV4dGFyZWFIZWxwZXIob3B0aW9ucykgewotICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCdZb3UgY2FuIG9ubHkgcGFzcyBhdHRyaWJ1dGVzIHRvIHRo
ZSBgdGV4dGFyZWFgIGhlbHBlciwgbm90IGFyZ3VtZW50cycsIGFyZ3VtZW50cy5sZW5ndGggPCAy
KTsKLQotICAgICAgICAgICAgdmFyIGhhc2ggPSBvcHRpb25zLmhhc2gsCi0gICAgICAgICAgICB0
eXBlcyA9IG9wdGlvbnMuaGFzaFR5cGVzOwotCi0gICAgICAgICAgICByZXR1cm4gaGVscGVycy52
aWV3LmNhbGwodGhpcywgVGV4dEFyZWEsIG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
X19leHBvcnRzX18udGV4dGFyZWFIZWxwZXIgPSB0ZXh0YXJlYUhlbHBlcjsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvY2hlY2tib3giLAotICAgIFsiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci12aWV3cy92aWV3cy92aWV3IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewot
ICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kxX18u
Z2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Ml9fLnNldDsKLSAgICAgICAgdmFy
IFZpZXcgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxl
YmFycwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGlu
dGVybmFsIGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRleHQgaW5wdXRzIHdoZW4gdGhlIGB7e2lucHV0
fX1gCi0gICAgICAgICAgICAgIGhlbHBlciBpcyB1c2VkIHdpdGggYHR5cGVgIG9mIGBjaGVja2Jv
eGAuCi0KLSAgICAgICAgICAgICAgU2VlIFtoYW5kbGViYXJzLmhlbHBlcnMuaW5wdXRdKC9hcGkv
Y2xhc3Nlcy9FbWJlci5IYW5kbGViYXJzLmhlbHBlcnMuaHRtbCNtZXRob2RfaW5wdXQpICBmb3Ig
dXNhZ2UgZGV0YWlscy4KLQotICAgICAgICAgICAgICAjIyBEaXJlY3QgbWFuaXB1bGF0aW9uIG9m
IGBjaGVja2VkYAotCi0gICAgICAgICAgICAgIFRoZSBgY2hlY2tlZGAgYXR0cmlidXRlIG9mIGFu
IGBFbWJlci5DaGVja2JveGAgb2JqZWN0IHNob3VsZCBhbHdheXMgYmUgc2V0Ci0gICAgICAgICAg
ICAgIHRocm91Z2ggdGhlIEVtYmVyIG9iamVjdCBvciBieSBpbnRlcmFjdGluZyB3aXRoIGl0cyBy
ZW5kZXJlZCBlbGVtZW50Ci0gICAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uIHZpYSB0aGUgbW91
c2UsIGtleWJvYXJkLCBvciB0b3VjaC4gVXBkYXRpbmcgdGhlIHZhbHVlIG9mIHRoZQotICAgICAg
ICAgICAgICBjaGVja2JveCB2aWEgalF1ZXJ5IHdpbGwgcmVzdWx0IGluIHRoZSBjaGVja2VkIHZh
bHVlIG9mIHRoZSBvYmplY3QgYW5kIGl0cwotICAgICAgICAgICAgICBlbGVtZW50IGxvc2luZyBz
eW5jaHJvbml6YXRpb24uCi0KLSAgICAgICAgICAgICAgIyMgTGF5b3V0IGFuZCBMYXlvdXROYW1l
IHByb3BlcnRpZXMKLQotICAgICAgICAgICAgICBCZWNhdXNlIEhUTUwgYGlucHV0YCBlbGVtZW50
cyBhcmUgc2VsZiBjbG9zaW5nIGBsYXlvdXRgIGFuZCBgbGF5b3V0TmFtZWAKLSAgICAgICAgICAg
ICAgcHJvcGVydGllcyB3aWxsIG5vdCBiZSBhcHBsaWVkLiBTZWUgW0VtYmVyLlZpZXddKC9hcGkv
Y2xhc3Nlcy9FbWJlci5WaWV3Lmh0bWwpJ3MKLSAgICAgICAgICAgICAgbGF5b3V0IHNlY3Rpb24g
Zm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLSAgICAgICAgICAgICAgQGNsYXNzIENoZWNrYm94Ci0g
ICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1i
ZXIuVmlldwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IFZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgIGluc3RydW1lbnREaXNwbGF5OiAne3tpbnB1dCB0
eXBlPSJjaGVja2JveCJ9fScsCi0KLSAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnZW1iZXItY2hl
Y2tib3gnXSwKLQotICAgICAgICAgICAgdGFnTmFtZTogJ2lucHV0JywKLQotICAgICAgICAgICAg
YXR0cmlidXRlQmluZGluZ3M6IFsKLSAgICAgICAgICAgICd0eXBlJywKLSAgICAgICAgICAgICdj
aGVja2VkJywKLSAgICAgICAgICAgICdpbmRldGVybWluYXRlJywKLSAgICAgICAgICAgICdkaXNh
YmxlZCcsCi0gICAgICAgICAgICAndGFiaW5kZXgnLAotICAgICAgICAgICAgJ25hbWUnLAotICAg
ICAgICAgICAgJ2F1dG9mb2N1cycsCi0gICAgICAgICAgICAncmVxdWlyZWQnLAotICAgICAgICAg
ICAgJ2Zvcm0nCi0gICAgICAgICAgICBdLAotCi0gICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gn
LAotICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsCi0gICAgICAgICAgICBkaXNhYmxlZDogZmFs
c2UsCi0gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSwKLQotICAgICAgICAgICAgaW5p
dDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLm9uKCdjaGFuZ2UnLCB0aGlzLCB0aGlzLl91cGRhdGVFbGVtZW50VmFsdWUp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICBn
ZXQodGhpcywgJ2VsZW1lbnQnKS5pbmRldGVybWluYXRlID0gISFnZXQodGhpcywgJ2luZGV0ZXJt
aW5hdGUnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF91cGRhdGVFbGVtZW50VmFs
dWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnY2hlY2tlZCcsIHRo
aXMuJCgpLnByb3AoJ2NoZWNrZWQnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAg
IH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy9zZWxlY3QiLAotICAg
IFsiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0
aWxzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9z
ZXQiLCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJlbWJlci12aWV3cy92aWV3cy9jb2xsZWN0
aW9uX3ZpZXciLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvaXNfbm9uZSIsICJl
bWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXki
LCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJleHBvcnRz
Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVw
ZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5j
eTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywg
X19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFy
cwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVu
Y3kyX18uZm9yRWFjaDsKLSAgICAgICAgdmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3kyX18uaW5k
ZXhPZjsKLSAgICAgICAgdmFyIGluZGV4ZXNPZiA9IF9fZGVwZW5kZW5jeTJfXy5pbmRleGVzT2Y7
Ci0gICAgICAgIHZhciByZXBsYWNlID0gX19kZXBlbmRlbmN5Ml9fLnJlcGxhY2U7Ci0KLSAgICAg
ICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTNfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2Rl
cGVuZGVuY3k0X18uc2V0OwotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeTVfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgQ29sbGVjdGlvblZpZXcgPSBfX2RlcGVuZGVuY3k2X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3k3X18uaXNBcnJheTsK
LSAgICAgICAgdmFyIGlzTm9uZSA9IF9fZGVwZW5kZW5jeThfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k5X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBl
bWJlckEgPSBfX2RlcGVuZGVuY3kxMF9fLkE7Ci0gICAgICAgIHZhciBvYnNlcnZlciA9IF9fZGVw
ZW5kZW5jeTExX18ub2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVw
ZW5kZW5jeTEyX18uZGVmaW5lUHJvcGVydHk7Ci0KLSAgICAgICAgdmFyIHByZWNvbXBpbGVUZW1w
bGF0ZSA9IEVtYmVySGFuZGxlYmFycy5jb21waWxlOwotCi0gICAgICAgIHZhciBTZWxlY3RPcHRp
b24gPSBWaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICBpbnN0cnVtZW50RGlzcGxheTogJ0VtYmVy
LlNlbGVjdE9wdGlvbicsCi0KLSAgICAgICAgICAgIHRhZ05hbWU6ICdvcHRpb24nLAotICAgICAg
ICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsndmFsdWUnLCAnc2VsZWN0ZWQnXSwKLQotICAgICAg
ICAgICAgZGVmYXVsdFRlbXBsYXRlOiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAg
ICAgICAgICAgICAgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YTogb3B0aW9u
cy5kYXRhLAotICAgICAgICAgICAgICAgICAgICBoYXNoOiB7fQotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICAgICAgRW1iZXJIYW5kbGViYXJzLmhlbHBlcnMuYmluZC5jYWxsKGNvbnRl
eHQsICJ2aWV3LmxhYmVsIiwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmxhYmVsUGF0aERpZENo
YW5nZSgpOwotICAgICAgICAgICAgICAgIHRoaXMudmFsdWVQYXRoRGlkQ2hhbmdlKCk7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgc2VsZWN0ZWQ6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBj
b250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JyksCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
ID0gZ2V0KHRoaXMsICdwYXJlbnRWaWV3LnNlbGVjdGlvbicpOwotICAgICAgICAgICAgICAgIGlm
IChnZXQodGhpcywgJ3BhcmVudFZpZXcubXVsdGlwbGUnKSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uICYmIGluZGV4T2Yoc2VsZWN0aW9uLCBjb250ZW50LnZhbHVlT2Yo
KSkgPiAtMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBQcmltaXRpdmVzIGdldCBwYXNzZWQgdGhyb3VnaCBiaW5kaW5ncyBhcyBvYmplY3RzLi4uIHNp
bmNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGBuZXcgTnVtYmVyKDQpICE9PSA0YCwgd2UgdXNl
IGA9PWAgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQgPT0gc2VsZWN0
aW9uOyAvLyBqc2hpbnQgaWdub3JlOmxpbmUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KS5wcm9wZXJ0eSgnY29udGVudCcsICdwYXJlbnRWaWV3LnNlbGVjdGlvbicpLAotCi0gICAg
ICAgICAgICBsYWJlbFBhdGhEaWRDaGFuZ2U6IG9ic2VydmVyKCdwYXJlbnRWaWV3Lm9wdGlvbkxh
YmVsUGF0aCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBsYWJlbFBhdGggPSBn
ZXQodGhpcywgJ3BhcmVudFZpZXcub3B0aW9uTGFiZWxQYXRoJyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIWxhYmVsUGF0aCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2xhYmVs
JywgY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQo
dGhpcywgbGFiZWxQYXRoKTsKLSAgICAgICAgICAgICAgICB9KS5wcm9wZXJ0eShsYWJlbFBhdGgp
KTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICB2YWx1ZVBhdGhEaWRDaGFuZ2U6IG9i
c2VydmVyKCdwYXJlbnRWaWV3Lm9wdGlvblZhbHVlUGF0aCcsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZVBhdGggPSBnZXQodGhpcywgJ3BhcmVudFZpZXcub3B0aW9uVmFs
dWVQYXRoJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlUGF0aCkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ZGVmaW5lUHJvcGVydHkodGhpcywgJ3ZhbHVlJywgY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdmFsdWVQYXRoKTsKLSAgICAgICAgICAg
ICAgICB9KS5wcm9wZXJ0eSh2YWx1ZVBhdGgpKTsKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0p
OwotCi0gICAgICAgIHZhciBTZWxlY3RPcHRncm91cCA9IENvbGxlY3Rpb25WaWV3LmV4dGVuZCh7
Ci0gICAgICAgICAgICBpbnN0cnVtZW50RGlzcGxheTogJ0VtYmVyLlNlbGVjdE9wdGdyb3VwJywK
LQotICAgICAgICAgICAgdGFnTmFtZTogJ29wdGdyb3VwJywKLSAgICAgICAgICAgIGF0dHJpYnV0
ZUJpbmRpbmdzOiBbJ2xhYmVsJ10sCi0KLSAgICAgICAgICAgIHNlbGVjdGlvbkJpbmRpbmc6ICdw
YXJlbnRWaWV3LnNlbGVjdGlvbicsCi0gICAgICAgICAgICBtdWx0aXBsZUJpbmRpbmc6ICdwYXJl
bnRWaWV3Lm11bHRpcGxlJywKLSAgICAgICAgICAgIG9wdGlvbkxhYmVsUGF0aEJpbmRpbmc6ICdw
YXJlbnRWaWV3Lm9wdGlvbkxhYmVsUGF0aCcsCi0gICAgICAgICAgICBvcHRpb25WYWx1ZVBhdGhC
aW5kaW5nOiAncGFyZW50Vmlldy5vcHRpb25WYWx1ZVBhdGgnLAotCi0gICAgICAgICAgICBpdGVt
Vmlld0NsYXNzQmluZGluZzogJ3BhcmVudFZpZXcub3B0aW9uVmlldycKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBgRW1iZXIuU2VsZWN0YCB2aWV3IGNsYXNz
IHJlbmRlcnMgYQotICAgICAgICAgICAgICBbc2VsZWN0XShodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9IVE1ML0VsZW1lbnQvc2VsZWN0KSBIVE1MIGVsZW1lbnQsCi0gICAgICAgICAg
ICAgIGFsbG93aW5nIHRoZSB1c2VyIHRvIGNob29zZSBmcm9tIGEgbGlzdCBvZiBvcHRpb25zLgot
Ci0gICAgICAgICAgICAgIFRoZSB0ZXh0IGFuZCBgdmFsdWVgIHByb3BlcnR5IG9mIGVhY2ggYDxv
cHRpb24+YCBlbGVtZW50IHdpdGhpbiB0aGUKLSAgICAgICAgICAgICAgYDxzZWxlY3Q+YCBlbGVt
ZW50IGFyZSBwb3B1bGF0ZWQgZnJvbSB0aGUgb2JqZWN0cyBpbiB0aGUgYEVsZW1lbnQuU2VsZWN0
YCdzCi0gICAgICAgICAgICAgIGBjb250ZW50YCBwcm9wZXJ0eS4gVGhlIHVuZGVybHlpbmcgZGF0
YSBvYmplY3Qgb2YgdGhlIHNlbGVjdGVkIGA8b3B0aW9uPmAgaXMKLSAgICAgICAgICAgICAgc3Rv
cmVkIGluIHRoZSBgRWxlbWVudC5TZWxlY3RgJ3MgYHZhbHVlYCBwcm9wZXJ0eS4KLQotICAgICAg
ICAgICAgICAjIyBUaGUgQ29udGVudCBQcm9wZXJ0eSAoYXJyYXkgb2Ygc3RyaW5ncykKLQotICAg
ICAgICAgICAgICBUaGUgc2ltcGxlc3QgdmVyc2lvbiBvZiBhbiBgRW1iZXIuU2VsZWN0YCB0YWtl
cyBhbiBhcnJheSBvZiBzdHJpbmdzIGFzIGl0cwotICAgICAgICAgICAgICBgY29udGVudGAgcHJv
cGVydHkuIFRoZSBzdHJpbmcgd2lsbCBiZSB1c2VkIGFzIGJvdGggdGhlIGB2YWx1ZWAgcHJvcGVy
dHkgYW5kCi0gICAgICAgICAgICAgIHRoZSBpbm5lciB0ZXh0IG9mIGVhY2ggYDxvcHRpb24+YCBl
bGVtZW50IGluc2lkZSB0aGUgcmVuZGVyZWQgYDxzZWxlY3Q+YC4KLQotICAgICAgICAgICAgICBF
eGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBw
LkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICBuYW1lczogWyJZZWh1ZGEiLCAiVG9tIl0KLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdCBjb250ZW50PW5hbWVzfX0KLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcg
SFRNTDoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxzZWxlY3QgY2xh
c3M9ImVtYmVyLXNlbGVjdCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iWWVodWRh
Ij5ZZWh1ZGE8L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJUb20iPlRv
bTwvb3B0aW9uPgotICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgWW91IGNhbiBjb250cm9sIHdoaWNoIGA8b3B0aW9uPmAgaXMgc2VsZWN0
ZWQgdGhyb3VnaCB0aGUgYEVtYmVyLlNlbGVjdGAncwotICAgICAgICAgICAgICBgdmFsdWVgIHBy
b3BlcnR5OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBw
LkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICBzZWxlY3RlZE5hbWU6ICdUb20nLAotICAgICAgICAgICAgICAgIG5h
bWVzOiBbIlllaHVkYSIsICJUb20iXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3ZpZXcg
RW1iZXIuU2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICBjb250ZW50PW5hbWVzCi0gICAgICAg
ICAgICAgICAgICAgICB2YWx1ZT1zZWxlY3RlZE5hbWUKLSAgICAgICAgICAgICAgfX0KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dp
bmcgSFRNTCB3aXRoIHRoZSBgPG9wdGlvbj5gIGZvciAnVG9tJyBzZWxlY3RlZDoKLQotICAgICAg
ICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9ImVtYmVyLXNlbGVj
dCI+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iWWVodWRhIj5ZZWh1ZGE8L29wdGlv
bj4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJUb20iIHNlbGVjdGVkPSJzZWxlY3Rl
ZCI+VG9tPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBBIHVzZXIgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVuZGVyZWQg
YDxzZWxlY3Q+YCB0byBjaG9vc2UgIlllaHVkYSIgd291bGQKLSAgICAgICAgICAgICAgdXBkYXRl
IHRoZSB2YWx1ZSBvZiBgc2VsZWN0ZWROYW1lYCB0byAiWWVodWRhIi4KLQotICAgICAgICAgICAg
ICAjIyBUaGUgQ29udGVudCBQcm9wZXJ0eSAoYXJyYXkgb2YgT2JqZWN0cykKLQotICAgICAgICAg
ICAgICBBbiBgRW1iZXIuU2VsZWN0YCBjYW4gYWxzbyB0YWtlIGFuIGFycmF5IG9mIEphdmFTY3Jp
cHQgb3IgRW1iZXIgb2JqZWN0cyBhcwotICAgICAgICAgICAgICBpdHMgYGNvbnRlbnRgIHByb3Bl
cnR5LgotCi0gICAgICAgICAgICAgIFdoZW4gdXNpbmcgb2JqZWN0cyB5b3UgbmVlZCB0byB0ZWxs
IHRoZSBgRW1iZXIuU2VsZWN0YCB3aGljaCBwcm9wZXJ0eSBzaG91bGQKLSAgICAgICAgICAgICAg
YmUgYWNjZXNzZWQgb24gZWFjaCBvYmplY3QgdG8gc3VwcGx5IHRoZSBgdmFsdWVgIGF0dHJpYnV0
ZSBvZiB0aGUgYDxvcHRpb24+YAotICAgICAgICAgICAgICBhbmQgd2hpY2ggcHJvcGVydHkgc2hv
dWxkIGJlIHVzZWQgdG8gc3VwcGx5IHRoZSBlbGVtZW50IHRleHQuCi0KLSAgICAgICAgICAgICAg
VGhlIGBvcHRpb25WYWx1ZVBhdGhgIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGgg
b24gZWFjaCBvYmplY3QgdG8KLSAgICAgICAgICAgICAgdGhlIGRlc2lyZWQgcHJvcGVydHkgZm9y
IHRoZSBgdmFsdWVgIGF0dHJpYnV0ZS4gVGhlIGBvcHRpb25MYWJlbFBhdGhgCi0gICAgICAgICAg
ICAgIHNwZWNpZmllcyB0aGUgcGF0aCBvbiBlYWNoIG9iamVjdCB0byB0aGUgZGVzaXJlZCBwcm9w
ZXJ0eSBmb3IgdGhlCi0gICAgICAgICAgICAgIGVsZW1lbnQncyB0ZXh0LiBCb3RoIHBhdGhzIG11
c3QgcmVmZXJlbmNlIGVhY2ggb2JqZWN0IGl0c2VsZiBhcyBgY29udGVudGA6Ci0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAuQXBwbGljYXRpb25Db250cm9s
bGVyID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgIHBy
b2dyYW1tZXJzOiBbCi0gICAgICAgICAgICAgICAgICB7Zmlyc3ROYW1lOiAiWWVodWRhIiwgaWQ6
IDF9LAotICAgICAgICAgICAgICAgICAge2ZpcnN0TmFtZTogIlRvbSIsICAgIGlkOiAyfQotICAg
ICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNl
bGVjdAotICAgICAgICAgICAgICAgICAgICAgY29udGVudD1wcm9ncmFtbWVycwotICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoPSJjb250ZW50LmlkIgotICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uTGFiZWxQYXRoPSJjb250ZW50LmZpcnN0TmFtZSJ9fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBXb3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1M
OgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0i
ZW1iZXItc2VsZWN0Ij4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj5ZZWh1ZGE8
L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIj5Ub208L29wdGlvbj4K
LSAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIFRoZSBgdmFsdWVgIGF0dHJpYnV0ZSBvZiB0aGUgc2VsZWN0ZWQgYDxvcHRpb24+YCB3aXRo
aW4gYW4gYEVtYmVyLlNlbGVjdGAKLSAgICAgICAgICAgICAgY2FuIGJlIGJvdW5kIHRvIGEgcHJv
cGVydHkgb24gYW5vdGhlciBvYmplY3Q6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBBcHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29u
dHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgIHByb2dyYW1tZXJzOiBbCi0gICAgICAg
ICAgICAgICAgICB7Zmlyc3ROYW1lOiAiWWVodWRhIiwgaWQ6IDF9LAotICAgICAgICAgICAgICAg
ICAge2ZpcnN0TmFtZTogIlRvbSIsICAgIGlkOiAyfQotICAgICAgICAgICAgICAgIF0sCi0gICAg
ICAgICAgICAgICAgY3VycmVudFByb2dyYW1tZXI6IHsKLSAgICAgICAgICAgICAgICAgIGlkOiAy
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3ZpZXcgRW1i
ZXIuU2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICBjb250ZW50PXByb2dyYW1tZXJzCi0gICAg
ICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZVBhdGg9ImNvbnRlbnQuaWQiCi0gICAgICAgICAg
ICAgICAgICAgICBvcHRpb25MYWJlbFBhdGg9ImNvbnRlbnQuZmlyc3ROYW1lIgotICAgICAgICAg
ICAgICAgICAgICAgdmFsdWU9Y3VycmVudFByb2dyYW1tZXIuaWR9fQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBXb3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MIHdp
dGggYSBzZWxlY3RlZCBvcHRpb246Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAg
ICAgICA8c2VsZWN0IGNsYXNzPSJlbWJlci1zZWxlY3QiPgotICAgICAgICAgICAgICAgIDxvcHRp
b24gdmFsdWU9IjEiPlllaHVkYTwvb3B0aW9uPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFs
dWU9IjIiIHNlbGVjdGVkPSJzZWxlY3RlZCI+VG9tPC9vcHRpb24+Ci0gICAgICAgICAgICAgIDwv
c2VsZWN0PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbnRlcmFjdGluZyB3
aXRoIHRoZSByZW5kZXJlZCBlbGVtZW50IGJ5IHNlbGVjdGluZyB0aGUgZmlyc3Qgb3B0aW9uCi0g
ICAgICAgICAgICAgICgnWWVodWRhJykgd2lsbCB1cGRhdGUgdGhlIGBpZGAgb2YgYGN1cnJlbnRQ
cm9ncmFtbWVyYAotICAgICAgICAgICAgICB0byBtYXRjaCB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBv
ZiB0aGUgbmV3bHkgc2VsZWN0ZWQgYDxvcHRpb24+YC4KLQotICAgICAgICAgICAgICBBbHRlcm5h
dGl2ZWx5LCB5b3UgY2FuIGNvbnRyb2wgc2VsZWN0aW9uIHRocm91Z2ggdGhlIHVuZGVybHlpbmcg
b2JqZWN0cwotICAgICAgICAgICAgICB1c2VkIHRvIHJlbmRlciBlYWNoIG9iamVjdCBieSBiaW5k
aW5nIHRoZSBgc2VsZWN0aW9uYCBvcHRpb24uIFdoZW4gdGhlIHNlbGVjdGVkCi0gICAgICAgICAg
ICAgIGA8b3B0aW9uPmAgaXMgY2hhbmdlZCwgdGhlIHByb3BlcnR5IHBhdGggcHJvdmlkZWQgdG8g
YHNlbGVjdGlvbmAKLSAgICAgICAgICAgICAgd2lsbCBiZSB1cGRhdGVkIHRvIG1hdGNoIHRoZSBj
b250ZW50IG9iamVjdCBvZiB0aGUgcmVuZGVyZWQgYDxvcHRpb24+YAotICAgICAgICAgICAgICBl
bGVtZW50OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLQotICAgICAgICAgICAgICB2
YXIgeWVodWRhID0ge2ZpcnN0TmFtZTogIlllaHVkYSIsIGlkOiAxLCBiZmY0ZXZhOiAndG9tJ30K
LSAgICAgICAgICAgICAgdmFyIHRvbSA9IHtmaXJzdE5hbWU6ICJUb20iLCBpZDogMiwgYmZmNGV2
YTogJ3llaHVkYSd9OwotCi0gICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIg
PSBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgc2VsZWN0
ZWRQZXJzb246IHRvbSwKLSAgICAgICAgICAgICAgICBwcm9ncmFtbWVyczogWwotICAgICAgICAg
ICAgICAgICAgeWVodWRhLAotICAgICAgICAgICAgICAgICAgdG9tCi0gICAgICAgICAgICAgICAg
XQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
YGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7e3ZpZXcgRW1iZXIuU2VsZWN0Ci0gICAgICAg
ICAgICAgICAgICAgICBjb250ZW50PXByb2dyYW1tZXJzCi0gICAgICAgICAgICAgICAgICAgICBv
cHRpb25WYWx1ZVBhdGg9ImNvbnRlbnQuaWQiCi0gICAgICAgICAgICAgICAgICAgICBvcHRpb25M
YWJlbFBhdGg9ImNvbnRlbnQuZmlyc3ROYW1lIgotICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uPXNlbGVjdGVkUGVyc29ufX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
V291bGQgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRNTCB3aXRoIGEgc2VsZWN0ZWQgb3B0aW9u
OgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0i
ZW1iZXItc2VsZWN0Ij4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj5ZZWh1ZGE8
L29wdGlvbj4KLSAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyIiBzZWxlY3RlZD0ic2Vs
ZWN0ZWQiPlRvbTwvb3B0aW9uPgotICAgICAgICAgICAgICA8L3NlbGVjdD4KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgSW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVuZGVyZWQgZWxl
bWVudCBieSBzZWxlY3RpbmcgdGhlIGZpcnN0IG9wdGlvbgotICAgICAgICAgICAgICAoJ1llaHVk
YScpIHdpbGwgdXBkYXRlIHRoZSBgc2VsZWN0ZWRQZXJzb25gIHRvIG1hdGNoIHRoZSBvYmplY3Qg
b2YKLSAgICAgICAgICAgICAgdGhlIG5ld2x5IHNlbGVjdGVkIGA8b3B0aW9uPmAuIEluIHRoaXMg
Y2FzZSBpdCBpcyB0aGUgZmlyc3Qgb2JqZWN0Ci0gICAgICAgICAgICAgIGluIHRoZSBgcHJvZ3Jh
bW1lcnNgCi0KLSAgICAgICAgICAgICAgIyMgU3VwcGx5aW5nIGEgUHJvbXB0Ci0KLSAgICAgICAg
ICAgICAgQSBgbnVsbGAgdmFsdWUgZm9yIHRoZSBgRW1iZXIuU2VsZWN0YCdzIGB2YWx1ZWAgb3Ig
YHNlbGVjdGlvbmAgcHJvcGVydHkKLSAgICAgICAgICAgICAgcmVzdWx0cyBpbiB0aGVyZSBiZWlu
ZyBubyBgPG9wdGlvbj5gIHdpdGggYSBgc2VsZWN0ZWRgIGF0dHJpYnV0ZToKLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xs
ZXIgPSBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRQcm9ncmFtbWVyOiBudWxsLAotICAgICAgICAgICAgICAgIHByb2dyYW1tZXJzOiBbCi0g
ICAgICAgICAgICAgICAgICAiWWVodWRhIiwKLSAgICAgICAgICAgICAgICAgICJUb20iCi0gICAg
ICAgICAgICAgICAgXQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgYGBgIGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNl
bGVjdAotICAgICAgICAgICAgICAgICAgICAgY29udGVudD1wcm9ncmFtbWVycwotICAgICAgICAg
ICAgICAgICAgICAgdmFsdWU9c2VsZWN0ZWRQcm9ncmFtbWVyCi0gICAgICAgICAgICAgIH19Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdvdWxkIHJlc3VsdCBpbiB0aGUgZm9s
bG93aW5nIEhUTUw6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8c2Vs
ZWN0IGNsYXNzPSJlbWJlci1zZWxlY3QiPgotICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9
IlllaHVkYSI+WWVodWRhPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0i
VG9tIj5Ub208L29wdGlvbj4KLSAgICAgICAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIEFsdGhvdWdoIGBzZWxlY3RlZFByb2dyYW1tZXJgIGlzIGBu
dWxsYCBhbmQgbm8gYDxvcHRpb24+YAotICAgICAgICAgICAgICBoYXMgYSBgc2VsZWN0ZWRgIGF0
dHJpYnV0ZSB0aGUgcmVuZGVyZWQgSFRNTCB3aWxsIGRpc3BsYXkgdGhlCi0gICAgICAgICAgICAg
IGZpcnN0IGl0ZW0gYXMgdGhvdWdoIGl0IHdlcmUgc2VsZWN0ZWQuIFlvdSBjYW4gc3VwcGx5IGEg
c3RyaW5nCi0gICAgICAgICAgICAgIHZhbHVlIGZvciB0aGUgYEVtYmVyLlNlbGVjdGAgdG8gZGlz
cGxheSB3aGVuIHRoZXJlIGlzIG5vIHNlbGVjdGlvbgotICAgICAgICAgICAgICB3aXRoIHRoZSBg
cHJvbXB0YCBvcHRpb246Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBBcHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29udHJvbGxlci5l
eHRlbmQoewotICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvZ3JhbW1lcjogbnVsbCwKLSAgICAg
ICAgICAgICAgICBwcm9ncmFtbWVyczogWwotICAgICAgICAgICAgICAgICAgIlllaHVkYSIsCi0g
ICAgICAgICAgICAgICAgICAiVG9tIgotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3t2aWV3IEVtYmVyLlNlbGVjdAotICAgICAgICAgICAgICAgICAgICAgY29u
dGVudD1wcm9ncmFtbWVycwotICAgICAgICAgICAgICAgICAgICAgdmFsdWU9c2VsZWN0ZWRQcm9n
cmFtbWVyCi0gICAgICAgICAgICAgICAgICAgICBwcm9tcHQ9IlBsZWFzZSBzZWxlY3QgYSBuYW1l
IgotICAgICAgICAgICAgICB9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBX
b3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MOgotCi0gICAgICAgICAgICAgIGBgYGh0
bWwKLSAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZW1iZXItc2VsZWN0Ij4KLSAgICAgICAg
ICAgICAgICA8b3B0aW9uPlBsZWFzZSBzZWxlY3QgYSBuYW1lPC9vcHRpb24+Ci0gICAgICAgICAg
ICAgICAgPG9wdGlvbiB2YWx1ZT0iWWVodWRhIj5ZZWh1ZGE8L29wdGlvbj4KLSAgICAgICAgICAg
ICAgICA8b3B0aW9uIHZhbHVlPSJUb20iPlRvbTwvb3B0aW9uPgotICAgICAgICAgICAgICA8L3Nl
bGVjdD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFNlbGVjdAot
ICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVt
YmVyLlZpZXcKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBTZWxlY3QgPSBWaWV3LmV4dGVu
ZCh7Ci0gICAgICAgICAgICBpbnN0cnVtZW50RGlzcGxheTogJ0VtYmVyLlNlbGVjdCcsCi0KLSAg
ICAgICAgICAgIHRhZ05hbWU6ICdzZWxlY3QnLAotICAgICAgICAgICAgY2xhc3NOYW1lczogWydl
bWJlci1zZWxlY3QnXSwKLSAgICAgICAgICAgIGRlZmF1bHRUZW1wbGF0ZTogRW1iZXIuSGFuZGxl
YmFycy50ZW1wbGF0ZShmdW5jdGlvbiBhbm9ueW1vdXMoSGFuZGxlYmFycywgZGVwdGgwLCBoZWxw
ZXJzLCBwYXJ0aWFscywgZGF0YSkgewotICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZXJJbmZv
ID0gWzQsICc+PSAxLjAuMCddOwotICAgICAgICAgICAgICAgIGhlbHBlcnMgPSB0aGlzLm1lcmdl
KGhlbHBlcnMsIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycyk7Ci0gICAgICAgICAgICAgICAgZGF0
YSA9IGRhdGEgfHwge307Ci0gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9ICcnLCBzdGFjazEs
IGVzY2FwZUV4cHJlc3Npb24gPSB0aGlzLmVzY2FwZUV4cHJlc3Npb24sIHNlbGYgPSB0aGlzOwot
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvZ3JhbTEoZGVwdGgwLCBkYXRhKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9ICcnLCBzdGFjazE7Ci0gICAgICAgICAgICAg
ICAgICAgIGRhdGEuYnVmZmVyLnB1c2goIjxvcHRpb24gdmFsdWU9XCJcIj4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhY2sxID0gaGVscGVycy5fdHJpYWdlTXVzdGFjaGUuY2FsbChkZXB0aDAs
ICJ2aWV3LnByb21wdCIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IHt9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzaFR5cGVzOiB7fSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc2hDb250ZXh0czoge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0czog
W2RlcHRoMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlczogWyJJRCJdLAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2goc3RhY2sxKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkYXRhLmJ1ZmZlci5wdXNoKCI8L29wdGlvbj4i
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9ncmFtMyhkZXB0aDAsIGRhdGEpIHsKLQot
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2sxOwotICAgICAgICAgICAgICAgICAgICBzdGFj
azEgPSBoZWxwZXJzLmVhY2guY2FsbChkZXB0aDAsICJ2aWV3Lmdyb3VwZWRDb250ZW50Iiwgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDoge30sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBoYXNoVHlwZXM6IHt9LAotICAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvbnRleHRzOiB7
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc2U6IHNlbGYubm9vcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZuOiBzZWxmLnByb2dyYW0oNCwgcHJvZ3JhbTQsIGRhdGEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZXM6IFsiSUQiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRh
dGEKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFj
azEgfHwgc3RhY2sxID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmJ1ZmZl
ci5wdXNoKHN0YWNrMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLmJ1ZmZlci5wdXNoKCcnKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9ncmFtNChk
ZXB0aDAsIGRhdGEpIHsKLQotCi0gICAgICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2go
ZXNjYXBlRXhwcmVzc2lvbihoZWxwZXJzLnZpZXcuY2FsbChkZXB0aDAsICJ2aWV3Lmdyb3VwVmll
dyIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnY29udGVudCc6ICgiY29udGVudCIpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdsYWJlbCc6ICgibGFiZWwiKQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc2hUeXBlczogewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdjb250ZW50JzogIklEIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFi
ZWwnOiAiSUQiCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzaENvbnRleHRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRl
bnQnOiBkZXB0aDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogZGVwdGgw
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXM6IFsiSUQiXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKLSAgICAgICAgICAgICAgICAgICAg
fSkpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9n
cmFtNihkZXB0aDAsIGRhdGEpIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2sxOwot
ICAgICAgICAgICAgICAgICAgICBzdGFjazEgPSBoZWxwZXJzLmVhY2guY2FsbChkZXB0aDAsICJ2
aWV3LmNvbnRlbnQiLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiB7fSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc2hUeXBlczoge30sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBoYXNoQ29udGV4dHM6IHt9LAotICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTogc2Vs
Zi5ub29wLAotICAgICAgICAgICAgICAgICAgICAgICAgZm46IHNlbGYucHJvZ3JhbSg3LCBwcm9n
cmFtNywgZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0czogW2RlcHRoMF0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlczogWyJJRCJdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YTogZGF0YQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEuYnVmZmVyLnB1c2goc3RhY2sxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYnVmZmVyLnB1c2goJycpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZ1
bmN0aW9uIHByb2dyYW03KGRlcHRoMCwgZGF0YSkgewotCi0KLSAgICAgICAgICAgICAgICAgICAg
ZGF0YS5idWZmZXIucHVzaChlc2NhcGVFeHByZXNzaW9uKGhlbHBlcnMudmlldy5jYWxsKGRlcHRo
MCwgInZpZXcub3B0aW9uVmlldyIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCc6ICgiIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoVHlwZXM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCc6ICJJRCIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29udGV4dHM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCc6IGRlcHRoMAotICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzOiBbZGVwdGgw
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzOiBbIklEIl0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhOiBkYXRhCi0gICAgICAgICAgICAgICAgICAgIH0pKSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxs
KGRlcHRoMCwgInZpZXcucHJvbXB0IiwgewotICAgICAgICAgICAgICAgICAgICBoYXNoOiB7fSwK
LSAgICAgICAgICAgICAgICAgICAgaGFzaFR5cGVzOiB7fSwKLSAgICAgICAgICAgICAgICAgICAg
aGFzaENvbnRleHRzOiB7fSwKLSAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTogc2VsZi5ub29w
LAotICAgICAgICAgICAgICAgICAgICBmbjogc2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRh
KSwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAg
ICAgICAgICB0eXBlczogWyJJRCJdLAotICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCi0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrMSB8fCBzdGFjazEg
PT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5idWZmZXIucHVzaChzdGFjazEpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdGFjazEgPSBoZWxwZXJzWydpZidd
LmNhbGwoZGVwdGgwLCAidmlldy5vcHRpb25Hcm91cFBhdGgiLCB7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhc2g6IHt9LAotICAgICAgICAgICAgICAgICAgICBoYXNoVHlwZXM6IHt9LAotICAgICAg
ICAgICAgICAgICAgICBoYXNoQ29udGV4dHM6IHt9LAotICAgICAgICAgICAgICAgICAgICBpbnZl
cnNlOiBzZWxmLnByb2dyYW0oNiwgcHJvZ3JhbTYsIGRhdGEpLAotICAgICAgICAgICAgICAgICAg
ICBmbjogc2VsZi5wcm9ncmFtKDMsIHByb2dyYW0zLCBkYXRhKSwKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dHM6IFtkZXB0aDBdLAotICAgICAgICAgICAgICAgICAgICB0eXBlczogWyJJRCJd
LAotICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCi0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YS5idWZmZXIucHVzaChzdGFjazEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyOwotCi0gICAgICAgICAgICB9KSwKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ211bHRpcGxlJywgJ2Rpc2FibGVkJywgJ3RhYmluZGV4
JywgJ25hbWUnLCAncmVxdWlyZWQnLCAnYXV0b2ZvY3VzJywKLSAgICAgICAgICAgICdmb3JtJywg
J3NpemUnXSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgbXVs
dGlwbGVgIGF0dHJpYnV0ZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuIEluZGljYXRlcyB3aGV0aGVy
IG11bHRpcGxlCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBtdWx0aXBsZQotICAgICAgICAgICAgICAg
ICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGBkaXNhYmxlZGAgYXR0cmlidXRl
IG9mIHRoZSBzZWxlY3QgZWxlbWVudC4gSW5kaWNhdGVzIHdoZXRoZXIKLSAgICAgICAgICAgICAg
ICAgICAgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQgZnJvbSBpbnRlcmFjdGlvbnMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IGRpc2FibGVkCi0gICAgICAgICAgICAgICAgICAgIEB0
eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgb2YgdGhl
IHNlbGVjdCBlbGVtZW50LiBJbmRpY2F0ZXMgd2hldGhlcgotICAgICAgICAgICAgICAgICAgICBh
IHNlbGVjdGVkIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSByZXF1aXJlZAotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAg
ICAgICAgICAgICAgIEBzaW5jZSAxLjUuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHJlcXVpcmVkOiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFRoZSBsaXN0IG9mIG9wdGlvbnMuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgYG9wdGlv
bkxhYmVsUGF0aGAgYW5kIGBvcHRpb25WYWx1ZVBhdGhgIGFyZSBub3Qgb3ZlcnJpZGRlbiwgdGhp
cyBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgYmUgYSBsaXN0IG9mIHN0cmluZ3MsIHdoaWNo
IHdpbGwgc2VydmUgc2ltdWx0YW5lb3VzbHkgYXMgbGFiZWxzIGFuZCB2YWx1ZXMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGlzIHNob3VsZCBiZSBhIGxpc3Qgb2Ygb2JqZWN0
cy4gRm9yIGluc3RhbmNlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgICAgICAgRW1iZXIuU2VsZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAg
ICAgICAgY29udGVudDogRW1iZXIuQShbCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWQ6
IDEsIGZpcnN0TmFtZTogJ1llaHVkYScgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBp
ZDogMiwgZmlyc3ROYW1lOiAnVG9tJyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBdKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbFBhdGg6ICdjb250ZW50LmZpcnN0TmFtZScs
Ci0gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWVQYXRoOiAnY29udGVudC5pZCcKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcm9wZXJ0eSBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBl
IEFycmF5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBjb250ZW50OiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgV2hlbiBgbXVsdGlwbGVgIGlzIGBmYWxzZWAsIHRoZSBlbGVtZW50
IG9mIGBjb250ZW50YCB0aGF0IGlzIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzZWxl
Y3RlZCwgaWYgYW55LgotCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gYG11bHRpcGxlYCBpcyBg
dHJ1ZWAsIGFuIGFycmF5IG9mIHN1Y2ggZWxlbWVudHMuCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByb3BlcnR5IHNlbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBPYmplY3Qgb3Ig
QXJyYXkKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHNlbGVjdGlvbjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZSAod2hlbiBgbXVsdGlw
bGVgIGlzIGBmYWxzZWApLCB2YWx1ZSBjYW4gYmUgdXNlZCB0bwotICAgICAgICAgICAgICAgICAg
ICBnZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uJ3MgdmFsdWUgb3Igc2V0IHRoZSBzZWxlY3Rpb24g
YnkgaXQncyB2YWx1ZS4KLQotICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgY3VycmVudGx5
IHN1cHBvcnRlZCBpbiBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZS4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0g
ICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB2YWx1ZTogY29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFy
IHZhbHVlUGF0aCA9IGdldCh0aGlzLCAnb3B0aW9uVmFsdWVQYXRoJykucmVwbGFjZSgvXmNvbnRl
bnRcLj8vLCAnJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlUGF0aCA/IGdldCh0aGlz
LCAnc2VsZWN0aW9uLicgKyB2YWx1ZVBhdGgpIDogZ2V0KHRoaXMsICdzZWxlY3Rpb24nKTsKLSAg
ICAgICAgICAgIH0pLnByb3BlcnR5KCdzZWxlY3Rpb24nKSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIElmIGdpdmVuLCBhIHRvcC1tb3N0IGR1bW15IG9wdGlvbiB3aWxs
IGJlIHJlbmRlcmVkIHRvIHNlcnZlIGFzIGEgdXNlcgotICAgICAgICAgICAgICAgICAgICBwcm9t
cHQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHByb21wdAotICAgICAgICAgICAg
ICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb21wdDogbnVsbCwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIG9mIHRoZSBvcHRpb24gbGFi
ZWxzLiBTZWUgW2NvbnRlbnRdKC9hcGkvY2xhc3Nlcy9FbWJlci5TZWxlY3QuaHRtbCNwcm9wZXJ0
eV9jb250ZW50KS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgb3B0aW9uTGFiZWxQ
YXRoCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAg
ICBAZGVmYXVsdCAnY29udGVudCcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBv
cHRpb25MYWJlbFBhdGg6ICdjb250ZW50JywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFRoZSBwYXRoIG9mIHRoZSBvcHRpb24gdmFsdWVzLiBTZWUgW2NvbnRlbnRdKC9h
cGkvY2xhc3Nlcy9FbWJlci5TZWxlY3QuaHRtbCNwcm9wZXJ0eV9jb250ZW50KS4KLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgb3B0aW9uVmFsdWVQYXRoCi0gICAgICAgICAgICAgICAg
ICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCAnY29udGVudCcK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvcHRpb25WYWx1ZVBhdGg6ICdjb250
ZW50JywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIG9m
IHRoZSBvcHRpb24gZ3JvdXAuCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gdGhpcyBwcm9wZXJ0
eSBpcyB1c2VkLCBgY29udGVudGAgc2hvdWxkIGJlIHNvcnRlZCBieSBgb3B0aW9uR3JvdXBQYXRo
YC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgb3B0aW9uR3JvdXBQYXRoCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgb3B0aW9uR3JvdXBQYXRo
OiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIHZpZXcg
Y2xhc3MgZm9yIG9wdGdyb3VwLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBncm91
cFZpZXcKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRW1iZXIuVmlldwotICAgICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCBFbWJlci5TZWxlY3RPcHRncm91cAotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGdyb3VwVmlldzogU2VsZWN0T3B0Z3JvdXAsCi0KLSAgICAgICAgICAg
IGdyb3VwZWRDb250ZW50OiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZ3JvdXBQYXRoID0gZ2V0KHRoaXMsICdvcHRpb25Hcm91cFBhdGgnKTsKLSAgICAgICAgICAg
ICAgICB2YXIgZ3JvdXBlZENvbnRlbnQgPSBlbWJlckEoKTsKLSAgICAgICAgICAgICAgICB2YXIg
Y29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcpIHx8IFtdOwotCi0gICAgICAgICAgICAgICAg
Zm9yRWFjaChjb250ZW50LCBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBsYWJlbCA9IGdldChpdGVtLCBncm91cFBhdGgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChnZXQoZ3JvdXBlZENvbnRlbnQsICdsYXN0T2JqZWN0LmxhYmVsJykgIT09IGxhYmVsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkQ29udGVudC5wdXNoT2JqZWN0KHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGVudDogZW1iZXJBKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2V0KGdyb3VwZWRD
b250ZW50LCAnbGFzdE9iamVjdC5jb250ZW50JykucHVzaChpdGVtKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkQ29udGVudDsKLSAgICAgICAg
ICAgIH0pLnByb3BlcnR5KCdvcHRpb25Hcm91cFBhdGgnLCAnY29udGVudC5AZWFjaCcpLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIHZpZXcgY2xhc3MgZm9yIG9w
dGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgb3B0aW9uVmlldwotICAgICAg
ICAgICAgICAgICAgICBAdHlwZSBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZh
dWx0IEVtYmVyLlNlbGVjdE9wdGlvbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IG9wdGlvblZpZXc6IFNlbGVjdE9wdGlvbiwKLQotICAgICAgICAgICAgX2NoYW5nZTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnbXVsdGlwbGUnKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VNdWx0aXBsZSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNpbmdsZSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNlbGVjdGlvbkRp
ZENoYW5nZTogb2JzZXJ2ZXIoJ3NlbGVjdGlvbi5AZWFjaCcsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBnZXQodGhpcywgJ3NlbGVjdGlvbicpOwotICAgICAg
ICAgICAgICAgIGlmIChnZXQodGhpcywgJ211bHRpcGxlJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0FycmF5KHNlbGVjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
dCh0aGlzLCAnc2VsZWN0aW9uJywgZW1iZXJBKFtzZWxlY3Rpb25dKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fc2VsZWN0aW9uRGlkQ2hhbmdlTXVsdGlwbGUoKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25EaWRDaGFuZ2VT
aW5nbGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAg
ICAgdmFsdWVEaWRDaGFuZ2U6IG9ic2VydmVyKCd2YWx1ZScsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JyksCi0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBnZXQodGhpcywgJ3ZhbHVlJyksCi0gICAgICAgICAgICAgICAgdmFsdWVQ
YXRoID0gZ2V0KHRoaXMsICdvcHRpb25WYWx1ZVBhdGgnKS5yZXBsYWNlKC9eY29udGVudFwuPy8s
ICcnKSwKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlID0gKHZhbHVlUGF0aCA/IGdldCh0
aGlzLCAnc2VsZWN0aW9uLicgKyB2YWx1ZVBhdGgpIDogZ2V0KHRoaXMsICdzZWxlY3Rpb24nKSks
Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uOwotCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVl
ICE9PSBzZWxlY3RlZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGNv
bnRlbnQgPyBjb250ZW50LmZpbmQoZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZVBhdGggPyBnZXQob2JqLCB2YWx1ZVBhdGgpIDog
b2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsOwotCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuc2V0KCdzZWxlY3Rpb24nLCBzZWxlY3Rpb24pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0pLAotCi0KLSAgICAgICAgICAgIF90cmlnZ2VyQ2hhbmdlOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gZ2V0KHRoaXMsICdzZWxlY3Rp
b24nKTsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQodGhpcywgJ3ZhbHVlJyk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWlzTm9uZShzZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuc2VsZWN0aW9uRGlkQ2hhbmdlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICghaXNOb25lKHZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0
aGlzLnZhbHVlRGlkQ2hhbmdlKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGhpcy5fY2hhbmdlKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfY2hhbmdl
U2luZ2xlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9
IHRoaXMuJCgpWzBdLnNlbGVjdGVkSW5kZXgsCi0gICAgICAgICAgICAgICAgY29udGVudCA9IGdl
dCh0aGlzLCAnY29udGVudCcpLAotICAgICAgICAgICAgICAgIHByb21wdCA9IGdldCh0aGlzLCAn
cHJvbXB0Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnQgfHwgIWdldChjb250ZW50
LCAnbGVuZ3RoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJvbXB0ICYmIHNlbGVjdGVkSW5kZXggPT09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICdzZWxlY3Rpb24nLCBudWxsKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChwcm9tcHQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCAt
PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZXQodGhpcywgJ3NlbGVj
dGlvbicsIGNvbnRlbnQub2JqZWN0QXQoc2VsZWN0ZWRJbmRleCkpOwotICAgICAgICAgICAgfSwK
LQotCi0gICAgICAgICAgICBfY2hhbmdlTXVsdGlwbGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kKCdvcHRpb246c2VsZWN0ZWQnKSwKLSAgICAgICAg
ICAgICAgICBwcm9tcHQgPSBnZXQodGhpcywgJ3Byb21wdCcpLAotICAgICAgICAgICAgICAgIG9m
ZnNldCA9IHByb21wdCA/IDEgOiAwLAotICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBnZXQodGhp
cywgJ2NvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBnZXQodGhpcywgJ3Nl
bGVjdGlvbicpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXhlcyA9IG9w
dGlvbnMubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuaW5kZXggLSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIH0pLnRvQXJyYXkoKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG5ld1NlbGVjdGlvbiA9IGNvbnRlbnQub2JqZWN0c0F0KHNl
bGVjdGVkSW5kZXhlcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoc2VsZWN0
aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShzZWxlY3Rpb24sIDAsIGdl
dChzZWxlY3Rpb24sICdsZW5ndGgnKSwgbmV3U2VsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnc2VsZWN0aW9u
JywgbmV3U2VsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9zZWxlY3Rpb25EaWRDaGFuZ2VTaW5n
bGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuZ2V0KCdlbGVt
ZW50Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQg
PSBnZXQodGhpcywgJ2NvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBnZXQo
dGhpcywgJ3NlbGVjdGlvbicpLAotICAgICAgICAgICAgICAgIHNlbGVjdGlvbkluZGV4ID0gY29u
dGVudCA/IGluZGV4T2YoY29udGVudCwgc2VsZWN0aW9uKSA6IC0xLAotICAgICAgICAgICAgICAg
IHByb21wdCA9IGdldCh0aGlzLCAncHJvbXB0Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJv
bXB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkluZGV4ICs9IDE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlbCkgewotICAgICAgICAgICAgICAgICAg
ICBlbC5zZWxlY3RlZEluZGV4ID0gc2VsZWN0aW9uSW5kZXg7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3NlbGVjdGlvbkRpZENoYW5nZU11bHRpcGxl
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAn
Y29udGVudCcpLAotICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGdldCh0aGlzLCAnc2VsZWN0
aW9uJyksCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleGVzID0gY29udGVudCA/IGluZGV4
ZXNPZihjb250ZW50LCBzZWxlY3Rpb24pIDogWy0xXSwKLSAgICAgICAgICAgICAgICBwcm9tcHQg
PSBnZXQodGhpcywgJ3Byb21wdCcpLAotICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb21wdCA/
IDEgOiAwLAotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLiQoJ29wdGlvbicpLAotICAg
ICAgICAgICAgICAgIGFkanVzdGVkOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHsK
LSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRqdXN0ZWQgPSB0aGlzLmluZGV4ID4gLTEgPyB0aGlzLmluZGV4IC0g
b2Zmc2V0IDogLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gaW5k
ZXhPZihzZWxlY3RlZEluZGV4ZXMsIGFkanVzdGVkKSA+IC0xOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBp
bml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAg
ICAgICAgICAgIHRoaXMub24oImRpZEluc2VydEVsZW1lbnQiLCB0aGlzLCB0aGlzLl90cmlnZ2Vy
Q2hhbmdlKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJjaGFuZ2UiLCB0aGlzLCB0aGlzLl9j
aGFuZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gU2VsZWN0OwotICAgICAgICBfX2V4cG9ydHNfXy5TZWxlY3QgPSBTZWxl
Y3Q7Ci0gICAgICAgIF9fZXhwb3J0c19fLlNlbGVjdE9wdGlvbiA9IFNlbGVjdE9wdGlvbjsKLSAg
ICAgICAgX19leHBvcnRzX18uU2VsZWN0T3B0Z3JvdXAgPSBTZWxlY3RPcHRncm91cDsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvY29udHJvbHMvdGV4dF9hcmVhIiwKLSAg
ICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci12aWV3cy92aWV3cy9jb21wb25l
bnQiLCAiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X3N1cHBvcnQiLCAiZW1iZXItbWV0
YWwvbWl4aW4iLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
QG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0g
ICAgICAgICAgICAqLwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAg
ICAgICAgdmFyIENvbXBvbmVudCA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgVGV4dFN1cHBvcnQgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5NF9fLm9ic2VydmVyOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBUaGUgaW50ZXJuYWwgY2xhc3MgdXNlZCB0byBjcmVhdGUgdGV4dGFyZWEg
ZWxlbWVudCB3aGVuIHRoZSBge3t0ZXh0YXJlYX19YAotICAgICAgICAgICAgICBoZWxwZXIgaXMg
dXNlZC4KLQotICAgICAgICAgICAgICBTZWUgW2hhbmRsZWJhcnMuaGVscGVycy50ZXh0YXJlYV0o
L2FwaS9jbGFzc2VzL0VtYmVyLkhhbmRsZWJhcnMuaGVscGVycy5odG1sI21ldGhvZF90ZXh0YXJl
YSkgIGZvciB1c2FnZSBkZXRhaWxzLgotCi0gICAgICAgICAgICAgICMjIExheW91dCBhbmQgTGF5
b3V0TmFtZSBwcm9wZXJ0aWVzCi0KLSAgICAgICAgICAgICAgQmVjYXVzZSBIVE1MIGB0ZXh0YXJl
YWAgZWxlbWVudHMgZG8gbm90IGNvbnRhaW4gaW5uZXIgSFRNTCB0aGUgYGxheW91dGAgYW5kCi0g
ICAgICAgICAgICAgIGBsYXlvdXROYW1lYCBwcm9wZXJ0aWVzIHdpbGwgbm90IGJlIGFwcGxpZWQu
IFNlZSBbRW1iZXIuVmlld10oL2FwaS9jbGFzc2VzL0VtYmVyLlZpZXcuaHRtbCkncwotICAgICAg
ICAgICAgICBsYXlvdXQgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICAg
ICAgICBAY2xhc3MgVGV4dEFyZWEKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAg
ICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKLSAgICAgICAgICAgICAgQHVzZXMg
RW1iZXIuVGV4dFN1cHBvcnQKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJk
ZWZhdWx0Il0gPSBDb21wb25lbnQuZXh0ZW5kKFRleHRTdXBwb3J0LCB7Ci0gICAgICAgICAgICBp
bnN0cnVtZW50RGlzcGxheTogJ3t7dGV4dGFyZWF9fScsCi0KLSAgICAgICAgICAgIGNsYXNzTmFt
ZXM6IFsnZW1iZXItdGV4dC1hcmVhJ10sCi0KLSAgICAgICAgICAgIHRhZ05hbWU6ICJ0ZXh0YXJl
YSIsCi0gICAgICAgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydyb3dzJywgJ2NvbHMnLCAnbmFt
ZScsICdzZWxlY3Rpb25FbmQnLCAnc2VsZWN0aW9uU3RhcnQnLCAnd3JhcCddLAotICAgICAgICAg
ICAgcm93czogbnVsbCwKLSAgICAgICAgICAgIGNvbHM6IG51bGwsCi0KLSAgICAgICAgICAgIF91
cGRhdGVFbGVtZW50VmFsdWU6IG9ic2VydmVyKCd2YWx1ZScsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIC8vIFdlIGRvIHRoaXMgY2hlY2sgc28gY3Vyc29yIHBvc2l0aW9uIGRvZXNuJ3Qg
Z2V0IGFmZmVjdGVkIGluIElFCi0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KHRoaXMs
ICd2YWx1ZScpLAotICAgICAgICAgICAgICAgICRlbCA9IHRoaXMuJCgpOwotICAgICAgICAgICAg
ICAgIGlmICgkZWwgJiYgdmFsdWUgIT09ICRlbC52YWwoKSkgewotICAgICAgICAgICAgICAgICAg
ICAkZWwudmFsKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3Vw
ZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJkaWRJbnNlcnRFbGVtZW50IiwgdGhpcywg
dGhpcy5fdXBkYXRlRWxlbWVudFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2NvbnRyb2xzL3RleHRfZmllbGQi
LAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCIsICJlbWJlci12aWV3cy92aWV3cy9jb21wb25lbnQiLCAiZW1iZXItaGFuZGxlYmFycy9j
b250cm9scy90ZXh0X3N1cHBvcnQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAg
ICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFu
ZGxlYmFycwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5
MV9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTJfXy5zZXQ7Ci0gICAgICAg
IHZhciBDb21wb25lbnQgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IFRleHRTdXBwb3J0ID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoq
Ci0KLSAgICAgICAgICAgICAgVGhlIGludGVybmFsIGNsYXNzIHVzZWQgdG8gY3JlYXRlIHRleHQg
aW5wdXRzIHdoZW4gdGhlIGB7e2lucHV0fX1gCi0gICAgICAgICAgICAgIGhlbHBlciBpcyB1c2Vk
IHdpdGggYHR5cGVgIG9mIGB0ZXh0YC4KLQotICAgICAgICAgICAgICBTZWUgW0hhbmRsZWJhcnMu
aGVscGVycy5pbnB1dF0oL2FwaS9jbGFzc2VzL0VtYmVyLkhhbmRsZWJhcnMuaGVscGVycy5odG1s
I21ldGhvZF9pbnB1dCkgIGZvciB1c2FnZSBkZXRhaWxzLgotCi0gICAgICAgICAgICAgICMjIExh
eW91dCBhbmQgTGF5b3V0TmFtZSBwcm9wZXJ0aWVzCi0KLSAgICAgICAgICAgICAgQmVjYXVzZSBI
VE1MIGBpbnB1dGAgZWxlbWVudHMgYXJlIHNlbGYgY2xvc2luZyBgbGF5b3V0YCBhbmQgYGxheW91
dE5hbWVgCi0gICAgICAgICAgICAgIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgYXBwbGllZC4gU2Vl
IFtFbWJlci5WaWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIuVmlldy5odG1sKSdzCi0gICAgICAgICAg
ICAgIGxheW91dCBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAg
IEBjbGFzcyBUZXh0RmllbGQKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKLSAgICAgICAgICAgICAgQHVzZXMgRW1i
ZXIuVGV4dFN1cHBvcnQKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBDb21wb25lbnQuZXh0ZW5kKFRleHRTdXBwb3J0LCB7Ci0gICAgICAgICAgICBpbnN0
cnVtZW50RGlzcGxheTogJ3t7aW5wdXQgdHlwZT0idGV4dCJ9fScsCi0KLSAgICAgICAgICAgIGNs
YXNzTmFtZXM6IFsnZW1iZXItdGV4dC1maWVsZCddLAotICAgICAgICAgICAgdGFnTmFtZTogImlu
cHV0IiwKLSAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ3R5cGUnLCAndmFsdWUnLCAn
c2l6ZScsICdwYXR0ZXJuJywgJ25hbWUnLCAnbWluJywgJ21heCcsCi0gICAgICAgICAgICAnYWNj
ZXB0JywgJ2F1dG9jb21wbGV0ZScsICdhdXRvc2F2ZScsICdmb3JtYWN0aW9uJywKLSAgICAgICAg
ICAgICdmb3JtZW5jdHlwZScsICdmb3JtbWV0aG9kJywgJ2Zvcm1ub3ZhbGlkYXRlJywgJ2Zvcm10
YXJnZXQnLAotICAgICAgICAgICAgJ2hlaWdodCcsICdpbnB1dG1vZGUnLCAnbGlzdCcsICdtdWx0
aXBsZScsICdzdGVwJywKLSAgICAgICAgICAgICd3aWR0aCddLAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgVGhlIGB2YWx1ZWAgYXR0cmlidXRlIG9mIHRoZSBpbnB1dCBl
bGVtZW50LiBBcyB0aGUgdXNlciBpbnB1dHMgdGV4dCwgdGhpcwotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eSBpcyB1cGRhdGVkIGxpdmUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCAiIgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHZh
bHVlOiAiIiwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBgdHlw
ZWAgYXR0cmlidXRlIG9mIHRoZSBpbnB1dCBlbGVtZW50LgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSB0eXBlCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAg
ICAgICAgICAgICAgICBAZGVmYXVsdCAidGV4dCIKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICB0eXBlOiAidGV4dCIsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBUaGUgYHNpemVgIG9mIHRoZSB0ZXh0IGZpZWxkIGluIGNoYXJhY3RlcnMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IHNpemUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUg
U3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBzaXplOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVGhlIGBwYXR0ZXJuYCBhdHRyaWJ1dGUgb2YgaW5wdXQgZWxlbWVudC4K
LQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcGF0dGVybgotICAgICAgICAgICAgICAg
ICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBhdHRlcm46IG51bGwsCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgYG1pbmAgYXR0cmlidXRlIG9mIGlucHV0
IGVsZW1lbnQgdXNlZCB3aXRoIGB0eXBlPSJudW1iZXIiYCBvciBgdHlwZT0icmFuZ2UiYC4KLQot
ICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgbWluCi0gICAgICAgICAgICAgICAgICAgIEB0
eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAg
ICAgICAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IG1pbjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBg
bWF4YCBhdHRyaWJ1dGUgb2YgaW5wdXQgZWxlbWVudCB1c2VkIHdpdGggYHR5cGU9Im51bWJlciJg
IG9yIGB0eXBlPSJyYW5nZSJgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBtYXgK
LSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBk
ZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgbWF4OiBudWxsCi0gICAgICAgIH0pOwotICAgIH0pOwot
ICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9jb250cm9scy90ZXh0X3N1cHBvcnQiLAotICAg
IFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIs
ICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRfYWN0aW9u
X3N1cHBvcnQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAg
ICAgICAgICAgKi8KLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAg
ICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTJfXy5zZXQ7Ci0gICAgICAgIHZhciBNaXhpbiA9
IF9fZGVwZW5kZW5jeTNfXy5NaXhpbjsKLSAgICAgICAgdmFyIFRhcmdldEFjdGlvblN1cHBvcnQg
PSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgU2hhcmVkIG1peGluIHVzZWQgYnkgYEVtYmVyLlRleHRGaWVsZGAgYW5kIGBFbWJlci5UZXh0
QXJlYWAuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFRleHRTdXBwb3J0Ci0gICAgICAgICAgICAg
IEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuVGFyZ2V0QWN0aW9u
U3VwcG9ydAotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5NaXhpbgotICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIFRleHRTdXBwb3J0ID0gTWl4
aW4uY3JlYXRlKFRhcmdldEFjdGlvblN1cHBvcnQsIHsKLSAgICAgICAgICAgIHZhbHVlOiAiIiwK
LQotICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsncGxhY2Vob2xkZXInLCAnZGlzYWJs
ZWQnLCAnbWF4bGVuZ3RoJywgJ3RhYmluZGV4JywgJ3JlYWRvbmx5JywKLSAgICAgICAgICAgICdh
dXRvZm9jdXMnLCAnZm9ybScsICdzZWxlY3Rpb25EaXJlY3Rpb24nLCAnc3BlbGxjaGVjaycsICdy
ZXF1aXJlZCcsCi0gICAgICAgICAgICAndGl0bGUnLCAnYXV0b2NhcGl0YWxpemUnLCAnYXV0b2Nv
cnJlY3QnXSwKLSAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAotICAgICAgICAgICAgZGlz
YWJsZWQ6IGZhbHNlLAotICAgICAgICAgICAgbWF4bGVuZ3RoOiBudWxsLAotCi0gICAgICAgICAg
ICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAg
ICAgICAgICAgICAgIHRoaXMub24oImZvY3VzT3V0IiwgdGhpcywgdGhpcy5fZWxlbWVudFZhbHVl
RGlkQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJjaGFuZ2UiLCB0aGlzLCB0aGlz
Ll9lbGVtZW50VmFsdWVEaWRDaGFuZ2UpOwotICAgICAgICAgICAgICAgIHRoaXMub24oInBhc3Rl
IiwgdGhpcywgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICB0
aGlzLm9uKCJjdXQiLCB0aGlzLCB0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UpOwotICAgICAg
ICAgICAgICAgIHRoaXMub24oImlucHV0IiwgdGhpcywgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hh
bmdlKTsKLSAgICAgICAgICAgICAgICB0aGlzLm9uKCJrZXlVcCIsIHRoaXMsIHRoaXMuaW50ZXJw
cmV0S2V5RXZlbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBUaGUgYWN0aW9uIHRvIGJlIHNlbnQgd2hlbiB0aGUgdXNlciBwcmVzc2Vz
IHRoZSByZXR1cm4ga2V5LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0
byB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciwgYnV0IGlzIGZpcmVkIHdoZW4KLSAgICAgICAgICAg
ICAgICAgICAgdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmV0dXJuIGtleSB3aGVuIGVkaXRpbmcgYSB0
ZXh0IGZpZWxkLCBhbmQgc2VuZHMKLSAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRo
ZSBmaWVsZCBhcyB0aGUgY29udGV4dC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkg
YWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAg
ICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWN0
aW9uOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGV2
ZW50IHRoYXQgc2hvdWxkIHNlbmQgdGhlIGFjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBP
cHRpb25zIGFyZToKLQotICAgICAgICAgICAgICAgICAgICAqIGBlbnRlcmA6IHRoZSB1c2VyIHBy
ZXNzZWQgZW50ZXIKLSAgICAgICAgICAgICAgICAgICAgKiBga2V5UHJlc3NgOiB0aGUgdXNlciBw
cmVzc2VkIGEga2V5Ci0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IG9uRXZlbnQKLSAg
ICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZh
dWx0IGVudGVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgb25FdmVudDogJ2Vu
dGVyJywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdoZXRoZXIgdGhl
eSBga2V5VXBgIGV2ZW50IHRoYXQgdHJpZ2dlcnMgYW4gYGFjdGlvbmAgdG8gYmUgc2VudCBjb250
aW51ZXMKLSAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRpbmcgdG8gb3RoZXIgdmlld3MuCi0K
LSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRo
ZSByZXR1cm4ga2V5IG9uIHRoZWlyIGtleWJvYXJkIGFuZAotICAgICAgICAgICAgICAgICAgICB0
aGUgdGV4dCBmaWVsZCBoYXMgYW4gYGFjdGlvbmAgc2V0LCB0aGUgYWN0aW9uIHdpbGwgYmUgc2Vu
dCB0byB0aGUgdmlldydzCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgYW5kIHRoZSBr
ZXkgZXZlbnQgd2lsbCBzdG9wIHByb3BhZ2F0aW5nLgotCi0gICAgICAgICAgICAgICAgICAgIElm
IHlvdSB3b3VsZCBsaWtlIHBhcmVudCB2aWV3cyB0byByZWNlaXZlIHRoZSBga2V5VXBgIGV2ZW50
IGV2ZW4gYWZ0ZXIgYW4KLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uIGhhcyBiZWVuIGRpc3Bh
dGNoZWQsIHNldCBgYnViYmxlc2AgdG8gdHJ1ZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgYnViYmxlcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAg
ICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgYnViYmxlczogZmFsc2UsCi0KLSAgICAgICAgICAgIGludGVycHJldEtleUV2ZW50czog
ZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWFwID0gVGV4dFN1cHBvcnQu
S0VZX0VWRU5UUzsKLSAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWFwW2V2ZW50LmtleUNv
ZGVdOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpc1ttZXRob2RdKGV2ZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBfZWxlbWVudFZhbHVlRGlkQ2hhbmdlOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBzZXQodGhpcywgJ3ZhbHVlJywgdGhpcy4kKCkudmFsKCkpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVu
IHRoZSB1c2VyIGluc2VydHMgYSBuZXcgbGluZS4KLQotICAgICAgICAgICAgICAgICAgICBDYWxs
ZWQgYnkgdGhlIGBFbWJlci5UZXh0U3VwcG9ydGAgbWl4aW4gb24ga2V5VXAgaWYga2V5Y29kZSBt
YXRjaGVzIDEzLgotICAgICAgICAgICAgICAgICAgICBVc2VzIHNlbmRBY3Rpb24gdG8gc2VuZCB0
aGUgYGVudGVyYCBhY3Rpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbnNlcnRO
ZXdsaW5lCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5zZXJ0TmV3bGluZTogZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICAgICAgICAgICAgICBzZW5kQWN0aW9uKCdlbnRlcicsIHRoaXMsIGV2ZW50KTsKLSAg
ICAgICAgICAgICAgICBzZW5kQWN0aW9uKCdpbnNlcnQtbmV3bGluZScsIHRoaXMsIGV2ZW50KTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBD
YWxsZWQgd2hlbiB0aGUgdXNlciBoaXRzIGVzY2FwZS4KLQotICAgICAgICAgICAgICAgICAgICBD
YWxsZWQgYnkgdGhlIGBFbWJlci5UZXh0U3VwcG9ydGAgbWl4aW4gb24ga2V5VXAgaWYga2V5Y29k
ZSBtYXRjaGVzIDI3LgotICAgICAgICAgICAgICAgICAgICBVc2VzIHNlbmRBY3Rpb24gdG8gc2Vu
ZCB0aGUgYGVzY2FwZS1wcmVzc2AgYWN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgY2FuY2VsCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihldmVudCkgewot
ICAgICAgICAgICAgICAgIHNlbmRBY3Rpb24oJ2VzY2FwZS1wcmVzcycsIHRoaXMsIGV2ZW50KTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBD
YWxsZWQgd2hlbiB0aGUgdGV4dCBhcmVhIGlzIGZvY3VzZWQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgVXNlcyBzZW5kQWN0aW9uIHRvIHNlbmQgdGhlIGBmb2N1cy1pbmAgYWN0aW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgZm9jdXNJbgotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0V2ZW50fSBldmVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvY3Vz
SW46IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc2VuZEFjdGlvbignZm9jdXMt
aW4nLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRleHQgYXJlYSBpcyBibHVycmVkLiAK
LQotICAgICAgICAgICAgICAgICAgICBVc2VzIHNlbmRBY3Rpb24gdG8gc2VuZCB0aGUgYGZvY3Vz
LW91dGAgYWN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZm9jdXNPdXQKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBmb2N1c091dDogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAg
ICAgICBzZW5kQWN0aW9uKCdmb2N1cy1vdXQnLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhl
IHVzZXIgcHJlc3NlcyBhIGtleS4gRW5hYmxlZCBieSBzZXR0aW5nCi0gICAgICAgICAgICAgICAg
ICAgIHRoZSBgb25FdmVudGAgcHJvcGVydHkgdG8gYGtleVByZXNzYC4KLQotICAgICAgICAgICAg
ICAgICAgICBVc2VzIHNlbmRBY3Rpb24gdG8gc2VuZCB0aGUgYGtleS1wcmVzc2AgYWN0aW9uLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qga2V5UHJlc3MKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBrZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAgICBzZW5kQWN0aW9u
KCdrZXktcHJlc3MnLCB0aGlzLCBldmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgVGV4dFN1cHBvcnQuS0VZX0VWRU5UUyA9IHsKLSAgICAgICAgICAgIDEzOiAn
aW5zZXJ0TmV3bGluZScsCi0gICAgICAgICAgICAyNzogJ2NhbmNlbCcKLSAgICAgICAgfTsKLQot
ICAgICAgICAvLyBJbiBwcmluY2lwbGUsIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0
IHRoZSBsZWdhY3kKLSAgICAgICAgLy8gc2VuZEFjdGlvbiBzZW1hbnRpY3MgZm9yIFRleHRGaWVs
ZCBhcmUgZGlmZmVyZW50IGZyb20KLSAgICAgICAgLy8gdGhlIGNvbXBvbmVudCBzZW1hbnRpY3Mg
c28gdGhpcyBtZXRob2Qgbm9ybWFsaXplcyB0aGVtLgotICAgICAgICBmdW5jdGlvbiBzZW5kQWN0
aW9uKGV2ZW50TmFtZSwgdmlldywgZXZlbnQpIHsKLSAgICAgICAgICAgIHZhciBhY3Rpb24gPSBn
ZXQodmlldywgZXZlbnROYW1lKSwKLSAgICAgICAgICAgIG9uID0gZ2V0KHZpZXcsICdvbkV2ZW50
JyksCi0gICAgICAgICAgICB2YWx1ZSA9IGdldCh2aWV3LCAndmFsdWUnKTsKLQotICAgICAgICAg
ICAgLy8gYmFjay1jb21wYXQgc3VwcG9ydCBmb3Iga2V5UHJlc3MgYXMgYW4gZXZlbnQgbmFtZSBl
dmVuIHRob3VnaAotICAgICAgICAgICAgLy8gaXQncyBhbHNvIGEgbWV0aG9kIG5hbWUgdGhhdCBj
b25zdW1lcyB0aGUgZXZlbnQgKGFuZCB0aGVyZWZvcmUKLSAgICAgICAgICAgIC8vIGluY29tcGF0
aWJsZSB3aXRoIHNlbmRBY3Rpb24gc2VtYW50aWNzKS4KLSAgICAgICAgICAgIGlmIChvbiA9PT0g
ZXZlbnROYW1lIHx8IChvbiA9PT0gJ2tleVByZXNzJyAmJiBldmVudE5hbWUgPT09ICdrZXktcHJl
c3MnKSkgewotICAgICAgICAgICAgICAgIHZpZXcuc2VuZEFjdGlvbignYWN0aW9uJywgdmFsdWUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2aWV3LnNlbmRBY3Rpb24oZXZlbnROYW1l
LCB2YWx1ZSk7Ci0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gfHwgb24gPT09IGV2ZW50TmFtZSkg
ewotICAgICAgICAgICAgICAgIGlmICghZ2V0KHZpZXcsICdidWJibGVzJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQi
XSA9IFRleHRTdXBwb3J0OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9l
eHQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJp
bmciLCAiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9n
ZXQiLCAiZW1iZXItbWV0YWwvYmluZGluZyIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1t
ZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9pc19lbXB0eSIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywg
X19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBl
bmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIC8vIEVtYmVyLkZFQVRVUkVTLCBFbWJlci5hc3NlcnQsIEVtYmVyLkhhbmRsZWJh
cnMsIEVtYmVyLmxvb2t1cAotICAgICAgICAvLyB2YXIgZW1iZXJBc3NlcnQgPSBFbWJlci5hc3Nl
cnQ7Ci0KLSAgICAgICAgdmFyIGZtdCA9IF9fZGVwZW5kZW5jeTJfXy5mbXQ7Ci0KLSAgICAgICAg
dmFyIEVtYmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgaGVscGVycyA9IEVtYmVySGFuZGxlYmFycy5oZWxwZXJzOwotCi0gICAgICAgIHZhciBn
ZXQgPSBfX2RlcGVuZGVuY3k0X18uZ2V0OwotICAgICAgICB2YXIgaXNHbG9iYWxQYXRoID0gX19k
ZXBlbmRlbmN5NV9fLmlzR2xvYmFsUGF0aDsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2Rl
cGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIElTX0JJTkRJTkcgPSBfX2RlcGVu
ZGVuY3k3X18uSVNfQklORElORzsKLQotICAgICAgICAvLyBsYXRlIGJvdW5kIHZpYSByZXF1aXJl
TW9kdWxlIGJlY2F1c2Ugb2YgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgotICAgICAgICB2YXIgcmVz
b2x2ZUhlbHBlciwKLSAgICAgICAgU2ltcGxlSGFuZGxlYmFyc1ZpZXc7Ci0KLSAgICAgICAgdmFy
IGlzRW1wdHkgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgc2xp
Y2UgPSBbXS5zbGljZSwgb3JpZ2luYWxUZW1wbGF0ZSA9IEVtYmVySGFuZGxlYmFycy50ZW1wbGF0
ZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgSWYgYSBwYXRoIHN0YXJ0cyB3aXRoIGEg
cmVzZXJ2ZWQga2V5d29yZCwgcmV0dXJucyB0aGUgcm9vdAotICAgICAgICAgICAgICB0aGF0IHNo
b3VsZCBiZSB1c2VkLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBt
ZXRob2Qgbm9ybWFsaXplUGF0aAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSByb290IHtPYmplY3R9Ci0gICAgICAgICAgICAgIEBwYXJhbSBwYXRoIHtTdHJp
bmd9Ci0gICAgICAgICAgICAgIEBwYXJhbSBkYXRhIHtIYXNofQotICAgICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChyb290LCBwYXRoLCBkYXRhKSB7Ci0gICAgICAg
ICAgICB2YXIga2V5d29yZHMgPSAoZGF0YSAmJiBkYXRhLmtleXdvcmRzKSB8fCB7fSwKLSAgICAg
ICAgICAgIGtleXdvcmQsIGlzS2V5d29yZDsKLQotICAgICAgICAgICAgLy8gR2V0IHRoZSBmaXJz
dCBzZWdtZW50IG9mIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgdGhlCi0gICAgICAgICAgICAv
LyBwYXRoIGlzICJmb28uYmFyLmJheiIsIHJldHVybnMgImZvbyIuCi0gICAgICAgICAgICBrZXl3
b3JkID0gcGF0aC5zcGxpdCgnLicsIDEpWzBdOwotCi0gICAgICAgICAgICAvLyBUZXN0IHRvIHNl
ZSBpZiB0aGUgZmlyc3QgcGF0aCBpcyBhIGtleXdvcmQgdGhhdCBoYXMgYmVlbgotICAgICAgICAg
ICAgLy8gcGFzc2VkIGFsb25nIGluIHRoZSB2aWV3J3MgZGF0YSBoYXNoLiBJZiBzbywgd2Ugd2ls
bCB0cmVhdAotICAgICAgICAgICAgLy8gdGhhdCBvYmplY3QgYXMgdGhlIG5ldyByb290LgotICAg
ICAgICAgICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gTG9vayB1cCB0aGUgdmFsdWUgaW4gdGhlIHRlbXBsYXRlJ3MgZGF0YSBoYXNo
LgotICAgICAgICAgICAgICAgIHJvb3QgPSBrZXl3b3Jkc1trZXl3b3JkXTsKLSAgICAgICAgICAg
ICAgICBpc0tleXdvcmQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2Vz
IHdoZXJlIHRoZSBlbnRpcmUgcGF0aCBpcyB0aGUgcmVzZXJ2ZWQKLSAgICAgICAgICAgICAgICAv
LyB3b3JkLiBJbiB0aGF0IGNhc2UsIHJldHVybiB0aGUgb2JqZWN0IGl0c2VsZi4KLSAgICAgICAg
ICAgICAgICBpZiAocGF0aCA9PT0ga2V5d29yZCkgewotICAgICAgICAgICAgICAgICAgICBwYXRo
ID0gJyc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
U3RyaXAgdGhlIGtleXdvcmQgZnJvbSB0aGUgcGF0aCBhbmQgbG9vayB1cAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgcmVtYWluZGVyIGZyb20gdGhlIG5ld2x5IGZvdW5kIHJvb3QuCi0gICAg
ICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihrZXl3b3JkLmxlbmd0aCArIDEpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICByb290OiByb290LAotICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgs
Ci0gICAgICAgICAgICAgICAgaXNLZXl3b3JkOiBpc0tleXdvcmQgCi0gICAgICAgICAgICB9Owot
ICAgICAgICB9Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgTG9va3VwIGJvdGggb24g
cm9vdCBhbmQgb24gd2luZG93LiBJZiB0aGUgcGF0aCBzdGFydHMgd2l0aAotICAgICAgICAgICAg
ICBhIGtleXdvcmQsIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdCB3aWxsIGJlIGxvb2tlZCB1cCBp
biB0aGUKLSAgICAgICAgICAgICAgdGVtcGxhdGUncyBkYXRhIGhhc2ggYW5kIHVzZWQgdG8gcmVz
b2x2ZSB0aGUgcGF0aC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGdldAotICAgICAgICAgICAg
ICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHJv
b3QgVGhlIG9iamVjdCB0byBsb29rIHVwIHRoZSBwcm9wZXJ0eSBvbgotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBiZSBsb29rZWR1cAotICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgdGVtcGxhdGUncyBvcHRpb24gaGFzaAotICAg
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaGFuZGxlYmFyc0dldChyb290LCBwYXRoLCBv
cHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kYXRh
LAotICAgICAgICAgICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHJvb3QsIHBhdGgs
IGRhdGEpLAotICAgICAgICAgICAgdmFsdWU7Ci0KLQotICAgICAgICAgICAgcm9vdCA9IG5vcm1h
bGl6ZWRQYXRoLnJvb3Q7Ci0gICAgICAgICAgICBwYXRoID0gbm9ybWFsaXplZFBhdGgucGF0aDsK
LQotICAgICAgICAgICAgdmFsdWUgPSBnZXQocm9vdCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGlm
ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHJvb3QgIT09IEVtYmVyLmxvb2t1cCAmJiBpc0dsb2Jh
bFBhdGgocGF0aCkpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldChFbWJlci5sb29rdXAs
IHBhdGgpOwotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIGBF
bWJlci5IYW5kbGViYXJzLmdldGAgdG8gbG9va3VwIGEgdmFsdWUsIHRoZW4gZW5zdXJlcwotICAg
ICAgICAgICAgICB0aGF0IHRoZSB2YWx1ZSBpcyBlc2NhcGVkIHByb3Blcmx5LgotCi0gICAgICAg
ICAgICAgIElmIGB1bmVzY2FwZWRgIGlzIGEgdHJ1dGh5IHZhbHVlIHRoZW4gdGhlIGVzY2FwaW5n
IHdpbGwgbm90IGJlIHBlcmZvcm1lZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGdldEVzY2Fw
ZWQKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzCi0gICAgICAgICAgICAgIEBw
YXJhbSB7T2JqZWN0fSByb290IFRoZSBvYmplY3QgdG8gbG9vayB1cCB0aGUgcHJvcGVydHkgb24K
LSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gYmUgbG9va2Vk
dXAKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIHRlbXBsYXRlJ3Mg
b3B0aW9uIGhhc2gKLSAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAqLwot
ICAgICAgICBmdW5jdGlvbiBnZXRFc2NhcGVkKHJvb3QsIHBhdGgsIG9wdGlvbnMpIHsKLSAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGViYXJzR2V0KHJvb3QsIHBhdGgsIG9wdGlvbnMpOwot
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gIiI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KCEocmVzdWx0IGluc3RhbmNlb2YgSGFuZGxlYmFycy5TYWZlU3RyaW5nKSkgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFN0cmluZyhyZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFvcHRpb25zLmhhc2gudW5lc2NhcGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gSGFuZGxlYmFycy5VdGlscy5lc2NhcGVFeHByZXNzaW9uKHJlc3VsdCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBf
X2V4cG9ydHNfXy5nZXRFc2NhcGVkID0gZ2V0RXNjYXBlZDsKLSAgICAgICAgZnVuY3Rpb24gcmVz
b2x2ZVBhcmFtcyhjb250ZXh0LCBwYXJhbXMsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBy
ZXNvbHZlZFBhcmFtcyA9IFtdLCB0eXBlcyA9IG9wdGlvbnMudHlwZXMsIHBhcmFtLCB0eXBlOwot
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBwYXJhbSA9IHBhcmFtc1tpXTsKLSAgICAgICAgICAgICAg
ICB0eXBlID0gdHlwZXNbaV07Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ0lEJykg
ewotICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFBhcmFtcy5wdXNoKGhhbmRsZWJhcnNHZXQo
Y29udGV4dCwgcGFyYW0sIG9wdGlvbnMpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICByZXNvbHZlZFBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFBhcmFt
czsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJlc29sdmVQYXJhbXMgPSByZXNv
bHZlUGFyYW1zOwotICAgICAgICBmdW5jdGlvbiByZXNvbHZlSGFzaChjb250ZXh0LCBoYXNoLCBv
cHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgcmVzb2x2ZWRIYXNoID0ge30sIHR5cGVzID0gb3B0
aW9ucy5oYXNoVHlwZXMsIHR5cGU7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBoYXNo
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNoLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdHlwZSA9IHR5cGVzW2tleV07Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9
PT0gJ0lEJykgewotICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEhhc2hba2V5XSA9IGhhbmRs
ZWJhcnNHZXQoY29udGV4dCwgaGFzaFtrZXldLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEhhc2hba2V5XSA9IGhhc2hba2V5
XTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biByZXNvbHZlZEhhc2g7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZl
SGFzaCA9IHJlc29sdmVIYXNoOyAvKioKLSAgICAgICAgICAgICAgUmVnaXN0ZXJzIGEgaGVscGVy
IGluIEhhbmRsZWJhcnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBpZiBubyBwcm9wZXJ0eSB3aXRoIHRo
ZQotICAgICAgICAgICAgICBnaXZlbiBuYW1lIGNhbiBiZSBmb3VuZCBvbiB0aGUgY3VycmVudCBj
b250ZXh0IG9iamVjdCwgYW5kIG5vIGhlbHBlciB3aXRoCi0gICAgICAgICAgICAgIHRoYXQgbmFt
ZSBpcyByZWdpc3RlcmVkLgotCi0gICAgICAgICAgICAgIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlv
biB3aXRoIGEgbW9yZSBoZWxwZnVsIGVycm9yIG1lc3NhZ2Ugc28gdGhlIHVzZXIgY2FuCi0gICAg
ICAgICAgICAgIHRyYWNrIGRvd24gd2hlcmUgdGhlIHByb2JsZW0gaXMgaGFwcGVuaW5nLgotCi0g
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgaGVscGVyTWlzc2lu
ZwotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9w
dGlvbnMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGhlbHBlck1pc3NpbmdIZWxw
ZXIocGF0aCkgewotICAgICAgICAgICAgaWYgKCFyZXNvbHZlSGVscGVyKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzb2x2ZUhlbHBlciA9IHJlcXVpcmVNb2R1bGUoJ2VtYmVyLWhhbmRsZWJhcnMvaGVs
cGVycy9iaW5kaW5nJylbJ3Jlc29sdmVIZWxwZXInXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIEVTNlRPRE86IHN0dXBpZCBjaXJjdWxhciBkZXAKLQotICAgICAgICAgICAgdmFyIGVy
cm9yLCB2aWV3ID0gIiI7Ci0KLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzW2Fy
Z3VtZW50cy5sZW5ndGggLSAxXTsKLQotICAgICAgICAgICAgdmFyIGhlbHBlciA9IHJlc29sdmVI
ZWxwZXIob3B0aW9ucy5kYXRhLnZpZXcuY29udGFpbmVyLCBwYXRoKTsKLQotICAgICAgICAgICAg
aWYgKGhlbHBlcikgewotICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywg
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZXJyb3IgPSAiJUAgSGFuZGxlYmFycyBlcnJvcjogQ291bGQgbm90IGZpbmQgcHJvcGVydHkgJyVA
JyBvbiBvYmplY3QgJUAuIjsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmRhdGEpIHsKLSAgICAg
ICAgICAgICAgICB2aWV3ID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihmbXQoZXJyb3IsIFt2aWV3LCBwYXRoLCB0aGlz
XSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uaGVscGVyTWlzc2luZ0hlbHBl
ciA9IGhlbHBlck1pc3NpbmdIZWxwZXI7IC8qKgotICAgICAgICAgICAgICBSZWdpc3RlcnMgYSBo
ZWxwZXIgaW4gSGFuZGxlYmFycyB0aGF0IHdpbGwgYmUgY2FsbGVkIGlmIG5vIHByb3BlcnR5IHdp
dGggdGhlCi0gICAgICAgICAgICAgIGdpdmVuIG5hbWUgY2FuIGJlIGZvdW5kIG9uIHRoZSBjdXJy
ZW50IGNvbnRleHQgb2JqZWN0LCBhbmQgbm8gaGVscGVyIHdpdGgKLSAgICAgICAgICAgICAgdGhh
dCBuYW1lIGlzIHJlZ2lzdGVyZWQuCi0KLSAgICAgICAgICAgICAgVGhpcyB0aHJvd3MgYW4gZXhj
ZXB0aW9uIHdpdGggYSBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSBzbyB0aGUgdXNlciBjYW4K
LSAgICAgICAgICAgICAgdHJhY2sgZG93biB3aGVyZSB0aGUgcHJvYmxlbSBpcyBoYXBwZW5pbmcu
Ci0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBoZWxwZXJN
aXNzaW5nCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgICAgICAgICAgIEBwYXJhbSB7SGFz
aH0gb3B0aW9ucwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYmxvY2tIZWxwZXJN
aXNzaW5nSGVscGVyKHBhdGgpIHsKLSAgICAgICAgICAgIGlmICghcmVzb2x2ZUhlbHBlcikgewot
ICAgICAgICAgICAgICAgIHJlc29sdmVIZWxwZXIgPSByZXF1aXJlTW9kdWxlKCdlbWJlci1oYW5k
bGViYXJzL2hlbHBlcnMvYmluZGluZycpWydyZXNvbHZlSGVscGVyJ107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBFUzZUT0RPOiBzdHVwaWQgY2lyY3VsYXIgZGVwCi0KLSAgICAgICAg
ICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTsKLQotICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCJgYmxvY2tIZWxwZXJNaXNzaW5nYCB3YXMgaW52b2tlZCB3
aXRob3V0IGEgaGVscGVyIG5hbWUsIHdoaWNoICIgKwotICAgICAgICAgICAgImlzIG1vc3QgbGlr
ZWx5IGR1ZSB0byBhIG1pc21hdGNoIGJldHdlZW4gdGhlIHZlcnNpb24gb2YgIiArCi0gICAgICAg
ICAgICAiRW1iZXIuanMgeW91J3JlIHJ1bm5pbmcgbm93IGFuZCB0aGUgb25lIHVzZWQgdG8gcHJl
Y29tcGlsZSB5b3VyICIgKwotICAgICAgICAgICAgInRlbXBsYXRlcy4gUGxlYXNlIG1ha2Ugc3Vy
ZSB0aGUgdmVyc2lvbiBvZiAiICsKLSAgICAgICAgICAgICJgZW1iZXItaGFuZGxlYmFycy1jb21w
aWxlcmAgeW91J3JlIHVzaW5nIGlzIHVwIHRvIGRhdGUuIiwgcGF0aCk7Ci0KLSAgICAgICAgICAg
IHZhciBoZWxwZXIgPSByZXNvbHZlSGVscGVyKG9wdGlvbnMuZGF0YS52aWV3LmNvbnRhaW5lciwg
cGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChoZWxwZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVyLmFwcGx5KHRoaXMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLmhlbHBlck1pc3Np
bmcuY2FsbCh0aGlzLCBwYXRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fLmJsb2NrSGVscGVyTWlzc2luZ0hlbHBlciA9IGJsb2NrSGVscGVyTWlzc2lu
Z0hlbHBlcjsgLyoqCi0gICAgICAgICAgICAgIFJlZ2lzdGVyIGEgYm91bmQgaGFuZGxlYmFycyBo
ZWxwZXIuIEJvdW5kIGhlbHBlcnMgYmVoYXZlIHNpbWlsYXJseSB0byByZWd1bGFyCi0gICAgICAg
ICAgICAgIGhhbmRsZWJhcnMgaGVscGVycywgd2l0aCB0aGUgYWRkZWQgYWJpbGl0eSB0byByZS1y
ZW5kZXIgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhCi0gICAgICAgICAgICAgIGNoYW5nZXMuCi0K
LSAgICAgICAgICAgICAgIyMgU2ltcGxlIGV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkhhbmRsZWJhcnMucmVnaXN0ZXJCb3VuZEhlbHBl
cignY2FwaXRhbGl6ZScsIGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEVtYmVyLlN0cmluZy5jYXBpdGFsaXplKHZhbHVlKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSBhYm92ZSBib3VuZCBoZWxwZXIgY2Fu
IGJlIHVzZWQgaW5zaWRlIG9mIHRlbXBsYXRlcyBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAg
IGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tjYXBpdGFsaXplIG5hbWV9fQotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlIGBuYW1l
YCBwcm9wZXJ0eSBvZiB0aGUgdGVtcGxhdGUncyBjb250ZXh0IGNoYW5nZXMsCi0gICAgICAgICAg
ICAgIHRoZSByZW5kZXJlZCB2YWx1ZSBvZiB0aGUgaGVscGVyIHdpbGwgdXBkYXRlIHRvIHJlZmxl
Y3QgdGhpcyBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgIyMgRXhhbXBsZSB3aXRoIG9wdGlvbnMK
LQotICAgICAgICAgICAgICBMaWtlIG5vcm1hbCBoYW5kbGViYXJzIGhlbHBlcnMsIGJvdW5kIGhl
bHBlcnMgaGF2ZSBhY2Nlc3MgdG8gdGhlIG9wdGlvbnMKLSAgICAgICAgICAgICAgcGFzc2VkIGlu
dG8gdGhlIGhlbHBlciBjYWxsLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5yZWdpc3RlckJvdW5kSGVscGVyKCdyZXBlYXQnLCBm
dW5jdGlvbih2YWx1ZSwgb3B0aW9ucykgewotICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IG9w
dGlvbnMuaGFzaC5jb3VudDsKLSAgICAgICAgICAgICAgICB2YXIgYSA9IFtdOwotICAgICAgICAg
ICAgICAgIHdoaWxlKGEubGVuZ3RoIDwgY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgYS5w
dXNoKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEu
am9pbignJyk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBUaGlzIGhlbHBlciBjb3VsZCBiZSB1c2VkIGluIGEgdGVtcGxhdGUgYXMgZm9sbG93
czoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7cmVwZWF0
IHRleHQgY291bnQ9M319Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIEV4
YW1wbGUgd2l0aCBib3VuZCBvcHRpb25zCi0KLSAgICAgICAgICAgICAgQm91bmQgaGFzaCBvcHRp
b25zIGFyZSBhbHNvIHN1cHBvcnRlZC4gRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBoYW5k
bGViYXJzCi0gICAgICAgICAgICAgIHt7cmVwZWF0IHRleHQgY291bnQ9bnVtUmVwZWF0c319Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgY291bnQg
d2lsbCBiZSBib3VuZCB0byB0aGUgdmFsdWUgb2YKLSAgICAgICAgICAgICAgdGhlIGBudW1SZXBl
YXRzYCBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dC4gSWYgdGhhdCBwcm9wZXJ0eQotICAgICAgICAg
ICAgICBjaGFuZ2VzLCB0aGUgaGVscGVyIHdpbGwgYmUgcmUtcmVuZGVyZWQuCi0KLSAgICAgICAg
ICAgICAgIyMgRXhhbXBsZSB3aXRoIGV4dHJhIGRlcGVuZGVuY2llcwotCi0gICAgICAgICAgICAg
IFRoZSBgRW1iZXIuSGFuZGxlYmFycy5yZWdpc3RlckJvdW5kSGVscGVyYCBtZXRob2QgdGFrZXMg
YSB2YXJpYWJsZSBsZW5ndGgKLSAgICAgICAgICAgICAgdGhpcmQgcGFyYW1ldGVyIHdoaWNoIGlu
ZGljYXRlcyBleHRyYSBkZXBlbmRlbmNpZXMgb24gdGhlIHBhc3NlZCBpbiB2YWx1ZS4KLSAgICAg
ICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGhhbmRsZWJhcnMgaGVscGVyIHRvIHVwZGF0ZSB3aGVu
IHRoZXNlIGRlcGVuZGVuY2llcyBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBFbWJlci5IYW5kbGViYXJzLnJlZ2lzdGVyQm91bmRIZWxwZXIoJ2Nh
cGl0YWxpemVOYW1lJywgZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuZ2V0KCduYW1lJykudG9VcHBlckNhc2UoKTsKLSAgICAgICAgICAgICAgfSwgJ25hbWUn
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMgRXhhbXBsZSB3aXRoIG11
bHRpcGxlIGJvdW5kIHByb3BlcnRpZXMKLQotICAgICAgICAgICAgICBgRW1iZXIuSGFuZGxlYmFy
cy5yZWdpc3RlckJvdW5kSGVscGVyYCBzdXBwb3J0cyBiaW5kaW5nIHRvCi0gICAgICAgICAgICAg
IG11bHRpcGxlIHByb3BlcnRpZXMsIGUuZy46Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBFbWJlci5IYW5kbGViYXJzLnJlZ2lzdGVyQm91bmRIZWxwZXIoJ2Nv
bmNhdGVuYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZXMuam9pbignfHwnKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdoaWNoIGFsbG93cyBmb3IgdGVtcGxhdGUgc3lu
dGF4IHN1Y2ggYXMgYHt7Y29uY2F0ZW5hdGUgcHJvcDEgcHJvcDJ9fWAgb3IKLSAgICAgICAgICAg
ICAgYHt7Y29uY2F0ZW5hdGUgcHJvcDEgcHJvcDIgcHJvcDN9fWAuIElmIGFueSBvZiB0aGUgcHJv
cGVydGllcyBjaGFuZ2UsCi0gICAgICAgICAgICAgIHRoZSBoZWxwZXIgd2lsbCByZS1yZW5kZXIu
ICBOb3RlIHRoYXQgZGVwZW5kZW5jeSBrZXlzIGNhbm5vdCBiZQotICAgICAgICAgICAgICB1c2lu
ZyBpbiBjb25qdW5jdGlvbiB3aXRoIG11bHRpLXByb3BlcnR5IGhlbHBlcnMsIHNpbmNlIGl0IGlz
IGFtYmlndW91cwotICAgICAgICAgICAgICB3aGljaCBwcm9wZXJ0eSB0aGUgZGVwZW5kZW50IGtl
eXMgd291bGQgYmVsb25nIHRvLgotCi0gICAgICAgICAgICAgICMjIFVzZSB3aXRoIHVuYm91bmQg
aGVscGVyCi0KLSAgICAgICAgICAgICAgVGhlIGB7e3VuYm91bmR9fWAgaGVscGVyIGNhbiBiZSB1
c2VkIHdpdGggYm91bmQgaGVscGVyIGludm9jYXRpb25zCi0gICAgICAgICAgICAgIHRvIHJlbmRl
ciB0aGVtIGluIHRoZWlyIHVuYm91bmQgZm9ybSwgZS5nLgotCi0gICAgICAgICAgICAgIGBgYGhh
bmRsZWJhcnMKLSAgICAgICAgICAgICAge3t1bmJvdW5kIGNhcGl0YWxpemUgbmFtZX19Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgaWYgdGhlIG5h
bWUgcHJvcGVydHkgY2hhbmdlcywgdGhlIGhlbHBlcgotICAgICAgICAgICAgICB3aWxsIG5vdCBy
ZS1yZW5kZXIuCi0KLSAgICAgICAgICAgICAgIyMgVXNlIHdpdGggYmxvY2tzIG5vdCBzdXBwb3J0
ZWQKLQotICAgICAgICAgICAgICBCb3VuZCBoZWxwZXJzIGRvIG5vdCBzdXBwb3J0IHVzZSB3aXRo
IEhhbmRsZWJhcnMgYmxvY2tzIG9yCi0gICAgICAgICAgICAgIHRoZSBhZGRpdGlvbiBvZiBjaGls
ZCB2aWV3cyBvZiBhbnkga2luZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlZ2lzdGVyQm91
bmRIZWxwZXIKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259
IGZ1bmN0aW9uCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXlzKgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXJCb3VuZEhlbHBlcihuYW1l
LCBmbikgewotICAgICAgICAgICAgdmFyIGJvdW5kSGVscGVyQXJncyA9IHNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKSwKLSAgICAgICAgICAgIGJvdW5kRm4gPSBtYWtlQm91bmRIZWxwZXIuYXBwbHko
dGhpcywgYm91bmRIZWxwZXJBcmdzKTsKLSAgICAgICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdp
c3RlckhlbHBlcihuYW1lLCBib3VuZEZuKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLnJlZ2lzdGVyQm91bmRIZWxwZXIgPSByZWdpc3RlckJvdW5kSGVscGVyOyAvKioKLSAgICAg
ICAgICAgICAgQSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBgcmVnaXN0ZXJCb3VuZEhlbHBlcmAu
IFRha2VzIHRoZQotICAgICAgICAgICAgICBwcm92aWRlZCBIYW5kbGViYXJzIGhlbHBlciBmdW5j
dGlvbiBmbiBhbmQgcmV0dXJucyBpdCBpbiB3cmFwcGVkCi0gICAgICAgICAgICAgIGJvdW5kIGhl
bHBlciBmb3JtLgotCi0gICAgICAgICAgICAgIFRoZSBtYWluIHVzZSBjYXNlIGZvciB1c2luZyB0
aGlzIG91dHNpZGUgb2YgYHJlZ2lzdGVyQm91bmRIZWxwZXJgCi0gICAgICAgICAgICAgIGlzIGZv
ciByZWdpc3RlcmluZyBoZWxwZXJzIG9uIHRoZSBjb250YWluZXI6Ci0KLSAgICAgICAgICAgICAg
YGBganMKLSAgICAgICAgICAgICAgdmFyIGJvdW5kSGVscGVyRm4gPSBFbWJlci5IYW5kbGViYXJz
Lm1ha2VCb3VuZEhlbHBlcihmdW5jdGlvbih3b3JkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHdvcmQudG9VcHBlckNhc2UoKTsKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
Y29udGFpbmVyLnJlZ2lzdGVyKCdoZWxwZXI6bXktYm91bmQtaGVscGVyJywgYm91bmRIZWxwZXJG
bik7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFt
cGxlLCBpZiB0aGUgaGVscGVyIGZ1bmN0aW9uIGhhZG4ndCBiZWVuIHdyYXBwZWQgaW4KLSAgICAg
ICAgICAgICAgYG1ha2VCb3VuZEhlbHBlcmAsIHRoZSByZWdpc3RlcmVkIGhlbHBlciB3b3VsZCBi
ZSB1bmJvdW5kLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgbWFrZUJvdW5kSGVscGVyCi0gICAg
ICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycwotICAgICAgICAgICAgICBAcGFyYW0ge0Z1
bmN0aW9ufSBmdW5jdGlvbgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50
S2V5cyoKLSAgICAgICAgICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBtYWtlQm91bmRIZWxwZXIoZm4pIHsKLSAgICAgICAgICAgIGlmICghU2ltcGxl
SGFuZGxlYmFyc1ZpZXcpIHsKLSAgICAgICAgICAgICAgICBTaW1wbGVIYW5kbGViYXJzVmlldyA9
IHJlcXVpcmVNb2R1bGUoJ2VtYmVyLWhhbmRsZWJhcnMvdmlld3MvaGFuZGxlYmFyc19ib3VuZF92
aWV3JylbJ1NpbXBsZUhhbmRsZWJhcnNWaWV3J107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvLyBFUzZUT0RPOiBzdHVwaWQgY2lyY3VsYXIgZGVwCi0KLSAgICAgICAgICAgIHZhciBkZXBl
bmRlbnRLZXlzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotCi0gICAgICAgICAgICBmdW5j
dGlvbiBoZWxwZXIoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cywgMCwgLTEpLAotICAgICAgICAgICAgICAgIG51bVByb3BlcnRpZXMgPSBw
cm9wZXJ0aWVzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2Fy
Z3VtZW50cy5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcGVydGll
cyA9IFtdLAotICAgICAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGEsCi0gICAgICAgICAg
ICAgICAgdHlwZXMgPSBkYXRhLmlzVW5ib3VuZCA/IHNsaWNlLmNhbGwob3B0aW9ucy50eXBlcywg
MSkgOiBvcHRpb25zLnR5cGVzLAotICAgICAgICAgICAgICAgIGhhc2ggPSBvcHRpb25zLmhhc2gs
Ci0gICAgICAgICAgICAgICAgdmlldyA9IGRhdGEudmlldywKLSAgICAgICAgICAgICAgICBjb250
ZXh0cyA9IG9wdGlvbnMuY29udGV4dHMsCi0gICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQg
PSAoY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoKSA/IGNvbnRleHRzWzBdIDogdGhpcywKLSAg
ICAgICAgICAgICAgICBwcmVmaXhQYXRoRm9yRGVwZW5kZW50S2V5cyA9ICcnLAotICAgICAgICAg
ICAgICAgIGxvYywgbGVuLCBoYXNoT3B0aW9uLAotICAgICAgICAgICAgICAgIGJvdW5kT3B0aW9u
LCBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBTaW1wbGVIYW5k
bGViYXJzVmlldy5wcm90b3R5cGUubm9ybWFsaXplZFZhbHVlOwotCi0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJyZWdpc3RlckJvdW5kSGVscGVyLWdlbmVyYXRlZCBoZWxwZXJzIGRvIG5v
dCBzdXBwb3J0IHVzZSB3aXRoIEhhbmRsZWJhcnMgYmxvY2tzLiIsICFvcHRpb25zLmZuKTsKLQot
ICAgICAgICAgICAgICAgIC8vIERldGVjdCBib3VuZCBvcHRpb25zIChlLmcuIGNvdW50QmluZGlu
Zz0ib3RoZXJDb3VudCIpCi0gICAgICAgICAgICAgICAgdmFyIGJvdW5kT3B0aW9ucyA9IGhhc2gu
Ym91bmRPcHRpb25zID0ge307Ci0gICAgICAgICAgICAgICAgZm9yIChoYXNoT3B0aW9uIGluIGhh
c2gpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKElTX0JJTkRJTkcudGVzdChoYXNoT3B0aW9u
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9wIG9mZiAnQmluZGluZycgc3VmZml4
LgotICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRPcHRpb25zW2hhc2hPcHRpb24uc2xpY2Uo
MCwgLTcpXSA9IGhhc2hbaGFzaE9wdGlvbl07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBFeHBvc2UgcHJvcGVydHkgbmFtZXMg
b24gZGF0YS5wcm9wZXJ0aWVzIG9iamVjdC4KLSAgICAgICAgICAgICAgICB2YXIgd2F0Y2hlZFBy
b3BlcnRpZXMgPSBbXTsKLSAgICAgICAgICAgICAgICBkYXRhLnByb3BlcnRpZXMgPSBbXTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGxvYyA9IDA7IGxvYyA8IG51bVByb3BlcnRpZXM7ICsrbG9jKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEucHJvcGVydGllcy5wdXNoKHByb3BlcnRpZXNbbG9j
XSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlc1tsb2NdID09PSAnSUQnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVQYXRoKGN1
cnJlbnRDb250ZXh0LCBwcm9wZXJ0aWVzW2xvY10sIGRhdGEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZFByb3BlcnRpZXMucHVzaChub3JtYWxpemVkUHJvcCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3YXRjaGVkUHJvcGVydGllcy5wdXNoKG5vcm1hbGl6ZWRQcm9wKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkYXRhLmlzVW5ib3VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6
ZWRQcm9wZXJ0aWVzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
OiBwcm9wZXJ0aWVzW2xvY10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZFByb3BlcnRpZXMucHVzaChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gaGVscGVyIGludm9jYXRpb24gaXMgcHJlY2VkZWQg
YnkgYHVuYm91bmRgLCBlLmcuCi0gICAgICAgICAgICAgICAgLy8ge3t1bmJvdW5kIG15SGVscGVy
IGZvb319Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNVbmJvdW5kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBldmFsdWF0ZVVuYm91bmRIZWxwZXIodGhpcywgZm4sIG5vcm1hbGl6
ZWRQcm9wZXJ0aWVzLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgYmluZFZpZXcgPSBuZXcgU2ltcGxlSGFuZGxlYmFyc1ZpZXcobnVsbCwgbnVsbCwg
IW9wdGlvbnMuaGFzaC51bmVzY2FwZWQsIG9wdGlvbnMuZGF0YSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBPdmVycmlkZSBTaW1wbGVIYW5kbGViYXJzVmlldydzIG1ldGhvZCBmb3IgZ2VuZXJhdGlu
ZyB0aGUgdmlldydzIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgYmluZFZpZXcubm9ybWFsaXpl
ZFZhbHVlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10s
IGJvdW5kT3B0aW9uOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIENvcHkgb3ZlciBib3VuZCBo
YXNoIG9wdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIGZvciAoYm91bmRPcHRpb24gaW4gYm91
bmRPcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJvdW5kT3B0aW9ucy5o
YXNPd25Qcm9wZXJ0eShib3VuZE9wdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5ID0gbm9ybWFsaXplUGF0aChjdXJyZW50Q29udGV4dCwgYm91bmRPcHRp
b25zW2JvdW5kT3B0aW9uXSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaW5kVmll
dy5wYXRoID0gcHJvcGVydHkucGF0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWaWV3
LnBhdGhSb290ID0gcHJvcGVydHkucm9vdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hb
Ym91bmRPcHRpb25dID0gbm9ybWFsaXplZFZhbHVlLmNhbGwoYmluZFZpZXcpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChsb2MgPSAwOyBsb2MgPCBu
dW1Qcm9wZXJ0aWVzOyArK2xvYykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkg
PSBub3JtYWxpemVkUHJvcGVydGllc1tsb2NdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZpZXcucGF0aCA9
IHByb3BlcnR5LnBhdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZpZXcucGF0
aFJvb3QgPSBwcm9wZXJ0eS5yb290OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mu
cHVzaChub3JtYWxpemVkVmFsdWUuY2FsbChiaW5kVmlldykpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gocHJv
cGVydGllc1tsb2NdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gob3B0aW9ucyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gUnVuIHRoZSBzdXBwbGllZCBoZWxwZXIgZnVuY3Rpb24uCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShjdXJyZW50Q29udGV4dCwgYXJncyk7Ci0g
ICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHZpZXcuYXBwZW5kQ2hpbGQoYmlu
ZFZpZXcpOwotCi0gICAgICAgICAgICAgICAgLy8gQXNzZW1ibGUgbGlzdCBvZiB3YXRjaGVkIHBy
b3BlcnRpZXMgdGhhdCdsbCByZS1yZW5kZXIgdGhpcyBoZWxwZXIuCi0gICAgICAgICAgICAgICAg
Zm9yIChib3VuZE9wdGlvbiBpbiBib3VuZE9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGJvdW5kT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShib3VuZE9wdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdhdGNoZWRQcm9wZXJ0aWVzLnB1c2gobm9ybWFsaXplUGF0aChjdXJy
ZW50Q29udGV4dCwgYm91bmRPcHRpb25zW2JvdW5kT3B0aW9uXSwgZGF0YSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gT2Jz
ZXJ2ZSBlYWNoIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIGZvciAobG9jID0gMCwgbGVuID0g
d2F0Y2hlZFByb3BlcnRpZXMubGVuZ3RoOyBsb2MgPCBsZW47ICsrbG9jKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5ID0gd2F0Y2hlZFByb3BlcnRpZXNbbG9jXTsKLSAgICAgICAgICAg
ICAgICAgICAgdmlldy5yZWdpc3Rlck9ic2VydmVyKHByb3BlcnR5LnJvb3QsIHByb3BlcnR5LnBh
dGgsIGJpbmRWaWV3LCBiaW5kVmlldy5yZXJlbmRlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHR5cGVzWzBdICE9PSAnSUQnIHx8IG5vcm1hbGl6ZWRQcm9wZXJ0
aWVzLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGRlcGVuZGVudCBrZXkgb2JzZXJ2
ZXJzIHRvIHRoZSBmaXJzdCBwYXJhbQotICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkID0g
bm9ybWFsaXplZFByb3BlcnRpZXNbMF0sCi0gICAgICAgICAgICAgICAgcGF0aFJvb3QgPSBub3Jt
YWxpemVkLnJvb3QsCi0gICAgICAgICAgICAgICAgcGF0aCA9IG5vcm1hbGl6ZWQucGF0aDsKLQot
ICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShwYXRoKSkgewotICAgICAgICAgICAgICAgICAg
ICBwcmVmaXhQYXRoRm9yRGVwZW5kZW50S2V5cyA9IHBhdGggKyAnLic7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGVwZW5kZW50S2V5cy5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5yZWdpc3Rlck9i
c2VydmVyKHBhdGhSb290LCBwcmVmaXhQYXRoRm9yRGVwZW5kZW50S2V5cyArIGRlcGVuZGVudEtl
eXNbaV0sIGJpbmRWaWV3LCBiaW5kVmlldy5yZXJlbmRlcik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoZWxwZXIuX3Jhd0Z1bmN0aW9uID0gZm47Ci0g
ICAgICAgICAgICByZXR1cm4gaGVscGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIFJlbmRlcnMgdGhlIHVuYm91bmQgZm9ybSBvZiBhbiBvdGhlcndpc2UgYm91bmQg
aGVscGVyIGZ1bmN0aW9uLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
IEBtZXRob2QgZXZhbHVhdGVVbmJvdW5kSGVscGVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVu
Y3Rpb259IGZuCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0Ci0gICAgICAg
ICAgICAgIEBwYXJhbSB7QXJyYXl9IG5vcm1hbGl6ZWRQcm9wZXJ0aWVzCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBldmFsdWF0ZVVuYm91bmRIZWxwZXIoY29udGV4dCwgZm4sIG5vcm1hbGl6ZWRQcm9wZXJ0aWVz
LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IFtdLAotICAgICAgICAgICAgaGFz
aCA9IG9wdGlvbnMuaGFzaCwKLSAgICAgICAgICAgIGJvdW5kT3B0aW9ucyA9IGhhc2guYm91bmRP
cHRpb25zLAotICAgICAgICAgICAgdHlwZXMgPSBzbGljZS5jYWxsKG9wdGlvbnMudHlwZXMsIDEp
LAotICAgICAgICAgICAgbG9jLAotICAgICAgICAgICAgbGVuLAotICAgICAgICAgICAgcHJvcGVy
dHksCi0gICAgICAgICAgICBwcm9wZXJ0eVR5cGUsCi0gICAgICAgICAgICBib3VuZE9wdGlvbjsK
LQotICAgICAgICAgICAgZm9yIChib3VuZE9wdGlvbiBpbiBib3VuZE9wdGlvbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWJvdW5kT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShib3VuZE9wdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGhhc2hbYm91bmRPcHRpb25dID0gaGFuZGxlYmFyc0dldChjb250ZXh0LCBi
b3VuZE9wdGlvbnNbYm91bmRPcHRpb25dLCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yIChsb2MgPSAwLCBsZW4gPSBub3JtYWxpemVkUHJvcGVydGllcy5sZW5ndGg7
IGxvYyA8IGxlbjsgKytsb2MpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IG5vcm1hbGl6
ZWRQcm9wZXJ0aWVzW2xvY107Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlUeXBlID0gdHlwZXNb
bG9jXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlUeXBlID09PSAiSUQiKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFyZ3MucHVzaChoYW5kbGViYXJzR2V0KHByb3BlcnR5LnJvb3QsIHBy
b3BlcnR5LnBhdGgsIG9wdGlvbnMpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBhcmdzLnB1c2gocHJvcGVydHkucGF0aCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncy5wdXNoKG9wdGlvbnMpOwotICAgICAg
ICAgICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIE92ZXJyaWRlcyBIYW5kbGViYXJzLnRlbXBsYXRlIHNvIHRo
YXQgd2UgY2FuIGRpc3Rpbmd1aXNoCi0gICAgICAgICAgICAgIHVzZXItY3JlYXRlZCwgdG9wLWxl
dmVsIHRlbXBsYXRlcyBmcm9tIGlubmVyIGNvbnRleHRzLgotCi0gICAgICAgICAgICAgIEBwcml2
YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgdGVtcGxhdGUKLSAgICAgICAgICAgICAgQGZvciBF
bWJlci5IYW5kbGViYXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzcGVjCi0gICAg
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzcGVjKSB7Ci0gICAgICAgICAg
ICB2YXIgdCA9IG9yaWdpbmFsVGVtcGxhdGUoc3BlYyk7Ci0gICAgICAgICAgICB0LmlzVG9wID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18udGVtcGxhdGUgPSB0ZW1wbGF0ZTsKLSAgICAgICAgX19leHBvcnRzX18ubm9ybWFsaXpl
UGF0aCA9IG5vcm1hbGl6ZVBhdGg7Ci0gICAgICAgIF9fZXhwb3J0c19fLm1ha2VCb3VuZEhlbHBl
ciA9IG1ha2VCb3VuZEhlbHBlcjsKLSAgICAgICAgX19leHBvcnRzX18uaGFuZGxlYmFyc0dldCA9
IGhhbmRsZWJhcnNHZXQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLmV2YWx1YXRlVW5ib3VuZEhlbHBl
ciA9IGV2YWx1YXRlVW5ib3VuZEhlbHBlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhh
bmRsZWJhcnMvaGVscGVycy9iaW5kaW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9p
c19ub25lIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvYXJy
YXkiLCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJl
bWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9iaW5kaW5nIiwgImVtYmVyLXZpZXdz
L3N5c3RlbS9qcXVlcnkiLCAiZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZW1iZXItcnVudGltZS9r
ZXlzIiwgImVtYmVyLWhhbmRsZWJhcnMvdmlld3MvaGFuZGxlYmFyc19ib3VuZF92aWV3IiwgImV4
cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywg
X19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBl
bmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5
OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9f
LCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBf
X2RlcGVuZGVuY3kxNl9fLCBfX2RlcGVuZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAg
ICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJz
Ci0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQsIEVtYmVyLndhcm4sIHV1aWQKLSAg
ICAgICAgLy8gdmFyIGVtYmVyQXNzZXJ0ID0gRW1iZXIuYXNzZXJ0LCBFbWJlci53YXJuID0gRW1i
ZXIud2FybjsKLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5Ml9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kzX18uZ2V0OwotICAg
ICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5NF9fLnNldDsKLSAgICAgICAgdmFyIGFwcGx5ID0g
X19kZXBlbmRlbmN5NV9fLmFwcGx5OwotICAgICAgICB2YXIgdXVpZCA9IF9fZGVwZW5kZW5jeTVf
Xy51dWlkOwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5Nl9fLmZtdDsKLSAgICAgICAg
dmFyIG9fY3JlYXRlID0gX19kZXBlbmRlbmN5N19fLmNyZWF0ZTsKLSAgICAgICAgdmFyIGlzTm9u
ZSA9IF9fZGVwZW5kZW5jeThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW51bWVyYWJsZVV0
aWxzID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBmb3JFYWNoID0g
X19kZXBlbmRlbmN5MTBfXy5mb3JFYWNoOwotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5j
eTExX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTEyX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTNfXy5y
ZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIGlzR2xvYmFsUGF0aCA9IF9fZGVwZW5kZW5jeTE0
X18uaXNHbG9iYWxQYXRoOwotICAgICAgICB2YXIgZW1iZXJCaW5kID0gX19kZXBlbmRlbmN5MTRf
Xy5iaW5kOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19kZXBlbmRlbmN5MTVfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5jeTVfXy5pc0FycmF5OwotICAgICAg
ICB2YXIgaGFuZGxlYmFyc0dldEVzY2FwZWQgPSBfX2RlcGVuZGVuY3kxNl9fLmdldEVzY2FwZWQ7
Ci0gICAgICAgIHZhciBrZXlzID0gX19kZXBlbmRlbmN5MTdfX1siZGVmYXVsdCJdOwotCi0gICAg
ICAgIHZhciBfSGFuZGxlYmFyc0JvdW5kVmlldyA9IF9fZGVwZW5kZW5jeTE4X18uX0hhbmRsZWJh
cnNCb3VuZFZpZXc7Ci0gICAgICAgIHZhciBTaW1wbGVIYW5kbGViYXJzVmlldyA9IF9fZGVwZW5k
ZW5jeTE4X18uU2ltcGxlSGFuZGxlYmFyc1ZpZXc7Ci0KLSAgICAgICAgdmFyIG5vcm1hbGl6ZVBh
dGggPSBfX2RlcGVuZGVuY3kxNl9fLm5vcm1hbGl6ZVBhdGg7Ci0gICAgICAgIHZhciBoYW5kbGVi
YXJzR2V0ID0gX19kZXBlbmRlbmN5MTZfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIgZ2V0
RXNjYXBlZCA9IF9fZGVwZW5kZW5jeTE2X18uZ2V0RXNjYXBlZDsKLQotICAgICAgICB2YXIgZ3Vp
ZEZvciA9IF9fZGVwZW5kZW5jeTVfXy5ndWlkRm9yOwotICAgICAgICB2YXIgdHlwZU9mID0gX19k
ZXBlbmRlbmN5NV9fLnR5cGVPZjsKLQotICAgICAgICB2YXIgaGVscGVycyA9IEVtYmVySGFuZGxl
YmFycy5oZWxwZXJzOwotICAgICAgICB2YXIgU2FmZVN0cmluZyA9IEVtYmVySGFuZGxlYmFycy5T
YWZlU3RyaW5nOwotCi0gICAgICAgIGZ1bmN0aW9uIGV4aXN0cyh2YWx1ZSkgewotICAgICAgICAg
ICAgcmV0dXJuICFpc05vbmUodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIFdpdGhW
aWV3ID0gX0hhbmRsZWJhcnNCb3VuZFZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgIGluaXQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyOwotCi0gICAgICAgICAg
ICAgICAgYXBwbHkodGhpcywgdGhpcy5fc3VwZXIsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAg
ICAgICB2YXIga2V5d29yZHMgPSB0aGlzLnRlbXBsYXRlRGF0YS5rZXl3b3JkczsKLSAgICAgICAg
ICAgICAgICB2YXIga2V5d29yZE5hbWUgPSB0aGlzLnRlbXBsYXRlSGFzaC5rZXl3b3JkTmFtZTsK
LSAgICAgICAgICAgICAgICB2YXIga2V5d29yZFBhdGggPSB0aGlzLnRlbXBsYXRlSGFzaC5rZXl3
b3JkUGF0aDsKLSAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlck5hbWUgPSB0aGlzLnRlbXBs
YXRlSGFzaC5jb250cm9sbGVyOwotICAgICAgICAgICAgICAgIHZhciBwcmVzZXJ2ZUNvbnRleHQg
PSB0aGlzLnByZXNlcnZlQ29udGV4dDsKLQotICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVy
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5w
cmV2aW91c0NvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0aGlzLmNv
bnRhaW5lci5sb29rdXBGYWN0b3J5KCdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZSkuY3Jl
YXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXI6IHByZXZpb3Vz
Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogcHJldmlvdXNDb250ZXh0
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dl
bmVyYXRlZENvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgn
Y29udHJvbGxlcicsIGNvbnRyb2xsZXIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnZhbHVlTm9ybWFsaXplckZ1bmMgPSBmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVyLnNldCgnbW9kZWwnLCByZXN1bHQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjb250cm9sbGVyUGF0aCA9IGpRdWVyeS5leHBhbmRvICsgZ3VpZEZvcihjb250
cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzW2NvbnRyb2xsZXJQYXRo
XSA9IGNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWJlckJpbmQoa2V5d29y
ZHMsIGNvbnRyb2xsZXJQYXRoICsgJy5tb2RlbCcsIGtleXdvcmRQYXRoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGtleXdvcmRQYXRoID0gY29udHJvbGxlclBhdGg7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJlc2Vy
dmVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtYmVyQmluZChrZXl3b3Jkcywga2V5
d29yZE5hbWUsIGtleXdvcmRQYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fc3VwZXIoKTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZW5lcmF0ZWRD
b250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlZENvbnRyb2xs
ZXIuZGVzdHJveSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgLy8gQmluZHMgYSBwcm9wZXJ0eSBpbnRvIHRoZSBET00uIFRoaXMgd2ls
bCBjcmVhdGUgYSBob29rIGluIERPTSB0aGF0IHRoZQotICAgICAgICAvLyBLVk8gc3lzdGVtIHdp
bGwgbG9vayBmb3IgYW5kIHVwZGF0ZSBpZiB0aGUgcHJvcGVydHkgY2hhbmdlcy4KLSAgICAgICAg
ZnVuY3Rpb24gYmluZChwcm9wZXJ0eSwgb3B0aW9ucywgcHJlc2VydmVDb250ZXh0LCBzaG91bGRE
aXNwbGF5LCB2YWx1ZU5vcm1hbGl6ZXIsIGNoaWxkUHJvcGVydGllcykgewotICAgICAgICAgICAg
dmFyIGRhdGEgPSBvcHRpb25zLmRhdGEsCi0gICAgICAgICAgICBmbiA9IG9wdGlvbnMuZm4sCi0g
ICAgICAgICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLAotICAgICAgICAgICAgdmlldyA9
IGRhdGEudmlldywKLSAgICAgICAgICAgIG5vcm1hbGl6ZWQsIG9ic2VydmVyLCBpOwotCi0gICAg
ICAgICAgICAvLyB3ZSByZWxpZWQgb24gdGhlIGJlaGF2aW9yIG9mIGNhbGxpbmcgd2l0aG91dAot
ICAgICAgICAgICAgLy8gY29udGV4dCB0byBtZWFuIHRoaXMgPT09IHdpbmRvdywgYnV0IHdoZW4g
cnVubmluZwotICAgICAgICAgICAgLy8gInVzZSBzdHJpY3QiLCBpdCdzIHBvc3NpYmxlIGZvciB0
aGlzIHRvID09PSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB2YXIgY3VycmVudENvbnRleHQgPSB0
aGlzIHx8IHdpbmRvdzsKLQotICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgo
Y3VycmVudENvbnRleHQsIHByb3BlcnR5LCBkYXRhKTsKLQotICAgICAgICAgICAgLy8gU2V0IHVw
IG9ic2VydmVycyBmb3Igb2JzZXJ2YWJsZSBvYmplY3RzCi0gICAgICAgICAgICBpZiAoJ29iamVj
dCcgPT09IHR5cGVvZiB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuaW5zaWRlR3Jv
dXApIHsKLSAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh2aWV3Ll9jb250ZXh0VmlldykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpZXcgPSB2aWV3Ll9jb250ZXh0VmlldzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5vbmNlKHZpZXcsICdy
ZXJlbmRlcicpOwotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAg
IHZhciB0ZW1wbGF0ZSwgY29udGV4dCwgcmVzdWx0ID0gaGFuZGxlYmFyc0dldChjdXJyZW50Q29u
dGV4dCwgcHJvcGVydHksIG9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHZhbHVlTm9ybWFsaXplciA/IHZhbHVlTm9ybWFsaXplcihyZXN1bHQpIDogcmVzdWx0OwotCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwcmVzZXJ2ZUNvbnRleHQgPyBjdXJyZW50Q29u
dGV4dCA6IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZERpc3BsYXkocmVz
dWx0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBmbjsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpbnZlcnNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZSA9IGludmVyc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICB0ZW1wbGF0ZShjb250ZXh0LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
YXRhOiBvcHRpb25zLmRhdGEgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3Q2xhc3MgPSBfSGFuZGxl
YmFyc0JvdW5kVmlldzsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXdPcHRpb25zID0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVDb250ZXh0OiBwcmVzZXJ2ZUNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5RnVuYzogc2hvdWxkRGlzcGxh
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTm9ybWFsaXplckZ1bmM6IHZhbHVlTm9y
bWFsaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlUZW1wbGF0ZTogZm4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlVGVtcGxhdGU6IGludmVyc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoOiBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGhSb290OiBjdXJyZW50Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzQ29udGV4dDogY3VycmVudENvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpc0Vz
Y2FwZWQ6ICFvcHRpb25zLmhhc2gudW5lc2NhcGVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcGxhdGVEYXRhOiBvcHRpb25zLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
bGF0ZUhhc2g6IG9wdGlvbnMuaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlck5h
bWU6IG9wdGlvbnMuaGVscGVyTmFtZQotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChvcHRpb25zLmlzV2l0aEhlbHBlcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlld0NsYXNzID0gV2l0aFZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHZpZXcgdGhhdCB3aWxsIHdyYXAgdGhl
IG91dHB1dCBvZiB0aGlzIHRlbXBsYXRlL3Byb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIC8v
IGFuZCBhZGQgaXQgdG8gdGhlIG5lYXJlc3QgdmlldydzIGNoaWxkVmlld3MgYXJyYXkuCi0gICAg
ICAgICAgICAgICAgICAgIC8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBFbWJlci5fSGFuZGxl
YmFyc0JvdW5kVmlldyBmb3IgbW9yZS4KLSAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRWaWV3
ID0gdmlldy5jcmVhdGVDaGlsZFZpZXcodmlld0NsYXNzLCB2aWV3T3B0aW9ucyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgdmlldy5hcHBlbmRDaGlsZChiaW5kVmlldyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bi5zY2hlZHVsZU9uY2UoJ3JlbmRlcicsIGJpbmRWaWV3LCAncmVyZW5kZXJJZk5lZWRlZCcp
OwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIE9ic2VydmVzIHRoZSBnaXZlbiBwcm9wZXJ0eSBvbiB0aGUgY29udGV4dCBhbmQK
LSAgICAgICAgICAgICAgICAvLyB0ZWxscyB0aGUgRW1iZXIuX0hhbmRsZWJhcnNCb3VuZFZpZXcg
dG8gcmUtcmVuZGVyLiBJZiBwcm9wZXJ0eQotICAgICAgICAgICAgICAgIC8vIGlzIGFuIGVtcHR5
IHN0cmluZywgd2UgYXJlIHByaW50aW5nIHRoZSBjdXJyZW50IGNvbnRleHQKLSAgICAgICAgICAg
ICAgICAvLyBvYmplY3QgKHt7dGhpc319KSBzbyB1cGRhdGluZyBpdCBpcyBub3Qgb3VyIHJlc3Bv
bnNpYmlsaXR5LgotICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkLnBhdGggIT09ICcnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihub3JtYWxpemVkLnJv
b3QsIG5vcm1hbGl6ZWQucGF0aCwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgY2hpbGRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlldy5yZWdpc3Rlck9ic2VydmVyKG5vcm1hbGl6ZWQucm9vdCwgbm9ybWFsaXplZC5w
YXRoICsgJy4nICsgY2hpbGRQcm9wZXJ0aWVzW2ldLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgbm90
IG9ic2VydmFibGUsIHNvIGp1c3QgcmVuZGVyIGl0IG91dCBhbmQKLSAgICAgICAgICAgICAgICAv
LyBiZSBkb25lIHdpdGggaXQuCi0gICAgICAgICAgICAgICAgZGF0YS5idWZmZXIucHVzaChoYW5k
bGViYXJzR2V0RXNjYXBlZChjdXJyZW50Q29udGV4dCwgcHJvcGVydHksIG9wdGlvbnMpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNpbXBsZUJpbmQoY3Vy
cmVudENvbnRleHQsIHByb3BlcnR5LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgZGF0YSA9
IG9wdGlvbnMuZGF0YSwKLSAgICAgICAgICAgIHZpZXcgPSBkYXRhLnZpZXcsCi0gICAgICAgICAg
ICBub3JtYWxpemVkLCBvYnNlcnZlciwgcGF0aFJvb3QsIG91dHB1dDsKLQotICAgICAgICAgICAg
bm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoY3VycmVudENvbnRleHQsIHByb3BlcnR5LCBkYXRh
KTsKLSAgICAgICAgICAgIHBhdGhSb290ID0gbm9ybWFsaXplZC5yb290OwotCi0gICAgICAgICAg
ICAvLyBTZXQgdXAgb2JzZXJ2ZXJzIGZvciBvYnNlcnZhYmxlIG9iamVjdHMKLSAgICAgICAgICAg
IGlmIChwYXRoUm9vdCAmJiAoJ29iamVjdCcgPT09IHR5cGVvZiBwYXRoUm9vdCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5pbnNpZGVHcm91cCkgewotICAgICAgICAgICAgICAgICAgICBv
YnNlcnZlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHZp
ZXcuX2NvbnRleHRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IHZp
ZXcuX2NvbnRleHRWaWV3OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuLm9uY2UodmlldywgJ3JlcmVuZGVyJyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gaGFuZGxlYmFyc0dldEVzY2Fw
ZWQoY3VycmVudENvbnRleHQsIHByb3BlcnR5LCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAg
ICAgICBkYXRhLmJ1ZmZlci5wdXNoKG91dHB1dCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRWaWV3ID0gbmV3IFNpbXBsZUhhbmRsZWJhcnNW
aWV3KAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSwgY3VycmVudENvbnRleHQsICFvcHRp
b25zLmhhc2gudW5lc2NhcGVkLCBvcHRpb25zLmRhdGEKLSAgICAgICAgICAgICAgICAgICAgKTsK
LQotICAgICAgICAgICAgICAgICAgICBiaW5kVmlldy5fcGFyZW50VmlldyA9IHZpZXc7Ci0gICAg
ICAgICAgICAgICAgICAgIHZpZXcuYXBwZW5kQ2hpbGQoYmluZFZpZXcpOwotCi0gICAgICAgICAg
ICAgICAgICAgIG9ic2VydmVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBydW4uc2NoZWR1bGVPbmNlKCdyZW5kZXInLCBiaW5kVmlldywgJ3JlcmVuZGVyJyk7Ci0gICAg
ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gT2JzZXJ2ZXMgdGhlIGdpdmVuIHByb3BlcnR5IG9uIHRoZSBjb250ZXh0IGFuZAotICAgICAg
ICAgICAgICAgIC8vIHRlbGxzIHRoZSBFbWJlci5fSGFuZGxlYmFyc0JvdW5kVmlldyB0byByZS1y
ZW5kZXIuIElmIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgLy8gaXMgYW4gZW1wdHkgc3RyaW5n
LCB3ZSBhcmUgcHJpbnRpbmcgdGhlIGN1cnJlbnQgY29udGV4dAotICAgICAgICAgICAgICAgIC8v
IG9iamVjdCAoe3t0aGlzfX0pIHNvIHVwZGF0aW5nIGl0IGlzIG5vdCBvdXIgcmVzcG9uc2liaWxp
dHkuCi0gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQucGF0aCAhPT0gJycpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmlldy5yZWdpc3Rlck9ic2VydmVyKG5vcm1hbGl6ZWQucm9vdCwgbm9y
bWFsaXplZC5wYXRoLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIG5vdCBvYnNlcnZhYmxl
LCBzbyBqdXN0IHJlbmRlciBpdCBvdXQgYW5kCi0gICAgICAgICAgICAgICAgLy8gYmUgZG9uZSB3
aXRoIGl0LgotICAgICAgICAgICAgICAgIG91dHB1dCA9IGhhbmRsZWJhcnNHZXRFc2NhcGVkKGN1
cnJlbnRDb250ZXh0LCBwcm9wZXJ0eSwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgZGF0YS5i
dWZmZXIucHVzaChvdXRwdXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gc2hvdWxkRGlzcGxheUlmSGVscGVyQ29udGVudChyZXN1bHQpIHsKLSAgICAgICAg
ICAgIHZhciB0cnV0aHkgPSByZXN1bHQgJiYgZ2V0KHJlc3VsdCwgJ2lzVHJ1dGh5Jyk7Ci0gICAg
ICAgICAgICBpZiAodHlwZW9mIHRydXRoeSA9PT0gJ2Jvb2xlYW4nKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydXRoeTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzQXJy
YXkocmVzdWx0KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXQocmVzdWx0LCAnbGVuZ3Ro
JykgIT09IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAh
IXJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICAnX3RyaWFnZU11c3RhY2hlJyBpcyB1c2VkIGludGVybmFsbHkgc2VsZWN0IGJldHdl
ZW4gYSBiaW5kaW5nLCBoZWxwZXIsIG9yIGNvbXBvbmVudCBmb3IKLSAgICAgICAgICAgICAgdGhl
IGdpdmVuIGNvbnRleHQuIFVudGlsIHRoaXMgcG9pbnQsIGl0IHdvdWxkIGJlIGhhcmQgdG8gZGV0
ZXJtaW5lIGlmIHRoZQotICAgICAgICAgICAgICBtdXN0YWNoZSBpcyBhIHByb3BlcnR5IHJlZmVy
ZW5jZSBvciBhIHJlZ3VsYXIgaGVscGVyIHJlZmVyZW5jZS4gVGhpcyB0cmlhZ2UKLSAgICAgICAg
ICAgICAgaGVscGVyIHJlc29sdmVzIHRoYXQuCi0KLSAgICAgICAgICAgICAgVGhpcyB3b3VsZCBu
b3QgYmUgdHlwaWNhbGx5IGludm9rZWQgYnkgZGlyZWN0bHkuCi0KLSAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBfdHJpYWdlTXVzdGFjaGUKLSAgICAgICAgICAg
ICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHByb3BlcnR5IFByb3BlcnR5L2hlbHBlcklEIHRvIHRyaWFnZQotICAgICAgICAgICAg
ICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBoYXNoIG9mIHRlbXBsYXRlL3JlbmRlcmluZyBvcHRp
b25zCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIF90cmlhZ2VNdXN0YWNoZUhlbHBlcihwcm9wZXJ0eSwg
b3B0aW9ucykgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2Fubm90IHBhc3MgbW9y
ZSB0aGFuIG9uZSBhcmd1bWVudCB0byB0aGUgX3RyaWFnZU11c3RhY2hlIGhlbHBlciIsIGFyZ3Vt
ZW50cy5sZW5ndGggPD0gMik7Ci0KLSAgICAgICAgICAgIHZhciBoZWxwZXIgPSBFbWJlckhhbmRs
ZWJhcnMucmVzb2x2ZUhlbHBlcihvcHRpb25zLmRhdGEudmlldy5jb250YWluZXIsIHByb3BlcnR5
KTsKLSAgICAgICAgICAgIGlmIChoZWxwZXIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGVs
cGVyLmNhbGwodGhpcywgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBoZWxwZXJzLmJpbmQuY2FsbCh0aGlzLCBwcm9wZXJ0eSwgb3B0aW9ucyk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVXNlZCB0byBsb29rdXAvcmVzb2x2ZSBo
YW5kbGViYXJzIGhlbHBlcnMuIFRoZSBsb29rdXAgb3JkZXIgaXM6Ci0KLSAgICAgICAgICAgICAg
KiBMb29rIGZvciBhIHJlZ2lzdGVyZWQgaGVscGVyCi0gICAgICAgICAgICAgICogSWYgYSBkYXNo
IGV4aXN0cyBpbiB0aGUgbmFtZToKLSAgICAgICAgICAgICAgICAqIExvb2sgZm9yIGEgaGVscGVy
IHJlZ2lzdGVkIGluIHRoZSBjb250YWluZXIKLSAgICAgICAgICAgICAgICAqIFVzZSBFbWJlci5D
b21wb25lbnRMb29rdXAgdG8gZmluZCBhbiBFbWJlci5Db21wb25lbnQgdGhhdCByZXNvbHZlcwot
ICAgICAgICAgICAgICAgICAgdG8gdGhlIGdpdmVuIG5hbWUKLQotICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmVIZWxwZXIKLSAgICAgICAgICAgICAg
QHBhcmFtIHtDb250YWluZXJ9IGNvbnRhaW5lcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgaGVscGVyIHRvIGxvb2t1cAotICAgICAgICAgICAgICBA
cmV0dXJuIHtIYW5kbGViYXJzIEhlbHBlcn0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHJlc29sdmVIZWxwZXIoY29udGFpbmVyLCBuYW1lKSB7Ci0gICAgICAgICAgICBpZiAoaGVs
cGVyc1tuYW1lXSkgewotICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzW25hbWVdOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCBuYW1lLmluZGV4T2Yo
Jy0nKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHZhciBoZWxwZXIgPSBjb250YWluZXIubG9va3VwKCdoZWxwZXI6JyArIG5h
bWUpOwotICAgICAgICAgICAgaWYgKCFoZWxwZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29t
cG9uZW50TG9va3VwID0gY29udGFpbmVyLmxvb2t1cCgnY29tcG9uZW50LWxvb2t1cDptYWluJyk7
Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJDb3VsZCBub3QgZmluZCAnY29tcG9uZW50
LWxvb2t1cDptYWluJyBvbiB0aGUgcHJvdmlkZWQgY29udGFpbmVyLCB3aGljaCBpcyBuZWNlc3Nh
cnkgZm9yIHBlcmZvcm1pbmcgY29tcG9uZW50IGxvb2t1cHMiLCBjb21wb25lbnRMb29rdXApOwot
Ci0gICAgICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudExvb2t1cC5sb29rdXBG
YWN0b3J5KG5hbWUsIGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgICAgaWYgKENvbXBvbmVudCkg
ewotICAgICAgICAgICAgICAgICAgICBoZWxwZXIgPSBFbWJlckhhbmRsZWJhcnMubWFrZVZpZXdI
ZWxwZXIoQ29tcG9uZW50KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVy
KCdoZWxwZXI6JyArIG5hbWUsIGhlbHBlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGhlbHBlcjsKLSAgICAgICAgfQotCi0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIGBiaW5kYCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGEgdmFsdWUs
IHRoZW4gdXBkYXRlIHRoYXQgdmFsdWUgaWYgaXQKLSAgICAgICAgICAgICAgY2hhbmdlcy4gRm9y
IGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8gcHJpbnQgdGhlIGB0aXRsZWAgcHJvcGVydHkgb2YK
LSAgICAgICAgICAgICAgYGNvbnRlbnRgOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgICAgICAgICAge3tiaW5kICJjb250ZW50LnRpdGxlIn19Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIFRoaXMgd2lsbCByZXR1cm4gdGhlIGB0aXRsZWAgcHJvcGVydHkg
YXMgYSBzdHJpbmcsIHRoZW4gY3JlYXRlIGEgbmV3IG9ic2VydmVyCi0gICAgICAgICAgICAgIGF0
IHRoZSBzcGVjaWZpZWQgcGF0aC4gSWYgaXQgY2hhbmdlcywgaXQgd2lsbCB1cGRhdGUgdGhlIHZh
bHVlIGluIERPTS4gTm90ZQotICAgICAgICAgICAgICB0aGF0IGlmIHlvdSBuZWVkIHRvIHN1cHBv
cnQgSUU3IGFuZCBJRTggeW91IG11c3QgbW9kaWZ5IHRoZSBtb2RlbCBvYmplY3RzCi0gICAgICAg
ICAgICAgIHByb3BlcnRpZXMgdXNpbmcgYEVtYmVyLmdldCgpYCBhbmQgYEVtYmVyLnNldCgpYCBm
b3IgdGhpcyB0byB3b3JrIGFzIGl0Ci0gICAgICAgICAgICAgIHJlbGllcyBvbiBFbWJlcidzIEtW
TyBzeXN0ZW0uIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMgdGhpcyB3aWxsIGJlIGhhbmRsZWQgZm9y
Ci0gICAgICAgICAgICAgIHlvdSBhdXRvbWF0aWNhbGx5LgotCi0gICAgICAgICAgICAgIEBwcml2
YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgYmluZAotICAgICAgICAgICAgICBAZm9yIEVtYmVy
LkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVy
dHkgUHJvcGVydHkgdG8gYmluZAotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBD
b250ZXh0IHRvIHByb3ZpZGUgZm9yIHJlbmRlcmluZwotICAgICAgICAgICAgICBAcmV0dXJuIHtT
dHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBiaW5k
SGVscGVyKHByb3BlcnR5LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllv
dSBjYW5ub3QgcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIHRoZSBiaW5kIGhlbHBlciIs
IGFyZ3VtZW50cy5sZW5ndGggPD0gMik7Ci0KLSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gKG9w
dGlvbnMuY29udGV4dHMgJiYgb3B0aW9ucy5jb250ZXh0cy5sZW5ndGgpID8gb3B0aW9ucy5jb250
ZXh0c1swXSA6IHRoaXM7Ci0KLSAgICAgICAgICAgIGlmICghb3B0aW9ucy5mbikgewotICAgICAg
ICAgICAgICAgIHJldHVybiBzaW1wbGVCaW5kKGNvbnRleHQsIHByb3BlcnR5LCBvcHRpb25zKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3B0aW9ucy5oZWxwZXJOYW1lID0gJ2JpbmQn
OwotCi0gICAgICAgICAgICByZXR1cm4gYmluZC5jYWxsKGNvbnRleHQsIHByb3BlcnR5LCBvcHRp
b25zLCBmYWxzZSwgZXhpc3RzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgICBVc2UgdGhlIGBib3VuZElmYCBoZWxwZXIgdG8gY3JlYXRlIGEgY29uZGl0aW9uYWwgdGhh
dCByZS1ldmFsdWF0ZXMKLSAgICAgICAgICAgICAgd2hlbmV2ZXIgdGhlIHRydXRoaW5lc3Mgb2Yg
dGhlIGJvdW5kIHZhbHVlIGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwot
ICAgICAgICAgICAgICB7eyNib3VuZElmICJjb250ZW50LnNob3VsZERpc3BsYXlUaXRsZSJ9fQot
ICAgICAgICAgICAgICAgIHt7Y29udGVudC50aXRsZX19Ci0gICAgICAgICAgICAgIHt7L2JvdW5k
SWZ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICBAbWV0aG9kIGJvdW5kSWYKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGVi
YXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IFByb3Bl
cnR5IHRvIGJpbmQKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gQ29udGV4dCB0
byBwcm92aWRlIGZvciByZW5kZXJpbmcKLSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBI
VE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYm91bmRJZkhlbHBl
cihwcm9wZXJ0eSwgZm4pIHsKLSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gKGZuLmNvbnRleHRz
ICYmIGZuLmNvbnRleHRzLmxlbmd0aCkgPyBmbi5jb250ZXh0c1swXSA6IHRoaXM7Ci0KLSAgICAg
ICAgICAgIGZuLmhlbHBlck5hbWUgPSBmbi5oZWxwZXJOYW1lIHx8ICdib3VuZElmJzsKLQotICAg
ICAgICAgICAgcmV0dXJuIGJpbmQuY2FsbChjb250ZXh0LCBwcm9wZXJ0eSwgZm4sIHRydWUsIHNo
b3VsZERpc3BsYXlJZkhlbHBlckNvbnRlbnQsIHNob3VsZERpc3BsYXlJZkhlbHBlckNvbnRlbnQs
IFsnaXNUcnV0aHknLCAnbGVuZ3RoJ10pOwotICAgICAgICB9Ci0KLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBVc2UgdGhlIGB1bmJvdW5kSWZg
IGhlbHBlciB0byBjcmVhdGUgYSBjb25kaXRpb25hbCB0aGF0IGV2YWx1YXRlcyBvbmNlLgotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjdW5ib3VuZElmICJj
b250ZW50LnNob3VsZERpc3BsYXlUaXRsZSJ9fQotICAgICAgICAgICAgICAgIHt7Y29udGVudC50
aXRsZX19Ci0gICAgICAgICAgICAgIHt7L3VuYm91bmRJZn19Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgdW5ib3VuZElmCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9w
ZXJ0eSBQcm9wZXJ0eSB0byBiaW5kCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZu
IENvbnRleHQgdG8gcHJvdmlkZSBmb3IgcmVuZGVyaW5nCi0gICAgICAgICAgICAgIEByZXR1cm4g
e1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAg
ICAgICAqLwotICAgICAgICBmdW5jdGlvbiB1bmJvdW5kSWZIZWxwZXIocHJvcGVydHksIGZuKSB7
Ci0gICAgICAgICAgICB2YXIgY29udGV4dCA9IChmbi5jb250ZXh0cyAmJiBmbi5jb250ZXh0cy5s
ZW5ndGgpID8gZm4uY29udGV4dHNbMF0gOiB0aGlzLAotICAgICAgICAgICAgZGF0YSA9IGZuLmRh
dGEsCi0gICAgICAgICAgICB0ZW1wbGF0ZSA9IGZuLmZuLAotICAgICAgICAgICAgaW52ZXJzZSA9
IGZuLmludmVyc2UsCi0gICAgICAgICAgICBub3JtYWxpemVkLCBwcm9wZXJ0eVZhbHVlLCByZXN1
bHQ7Ci0KLSAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGNvbnRleHQsIHBy
b3BlcnR5LCBkYXRhKTsKLSAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBoYW5kbGViYXJzR2V0
KGNvbnRleHQsIHByb3BlcnR5LCBmbik7Ci0KLSAgICAgICAgICAgIGlmICghc2hvdWxkRGlzcGxh
eUlmSGVscGVyQ29udGVudChwcm9wZXJ0eVZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRlbXBs
YXRlID0gaW52ZXJzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVtcGxhdGUoY29u
dGV4dCwgewotICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgCi0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBVc2UgdGhlIGB7e3dpdGh9fWAg
aGVscGVyIHdoZW4geW91IHdhbnQgdG8gc2NvcGUgY29udGV4dC4gVGFrZSB0aGUgZm9sbG93aW5n
IGNvZGUgYXMgYW4gZXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIDxoNT57e3VzZXIubmFtZX19PC9oNT4KLQotICAgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJyb2xlIj4KLSAgICAgICAgICAgICAgICA8aDY+e3t1c2VyLnJvbGUubGFiZWx9fTwvaDY+
Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJvbGUtaWQiPnt7dXNlci5yb2xlLmlkfX08
L3NwYW4+Ci0KLSAgICAgICAgICAgICAgICA8cCBjbGFzcz0icm9sZS1kZXNjIj57e3VzZXIucm9s
ZS5kZXNjcmlwdGlvbn19PC9wPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgYHt7d2l0aH19YCBjYW4gYmUgb3VyIGJlc3QgZnJpZW5kIGlu
IHRoZXNlIGNhc2VzLAotICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHdyaXRpbmcgYHVzZXIucm9s
ZS4qYCBvdmVyIGFuZCBvdmVyLCB3ZSB1c2UgYHt7I3dpdGggdXNlci5yb2xlfX1gLgotICAgICAg
ICAgICAgICBOb3cgdGhlIGNvbnRleHQgd2l0aGluIHRoZSBge3sjd2l0aH19IC4uIHt7L3dpdGh9
fWAgYmxvY2sgaXMgYHVzZXIucm9sZWAgc28geW91IGNhbiBkbyB0aGUgZm9sbG93aW5nOgotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGg1Pnt7dXNlci5uYW1l
fX08L2g1PgotCi0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvbGUiPgotICAgICAgICAgICAg
ICAgIHt7I3dpdGggdXNlci5yb2xlfX0KLSAgICAgICAgICAgICAgICAgIDxoNj57e2xhYmVsfX08
L2g2PgotICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJvbGUtaWQiPnt7aWR9fTwvc3Bh
bj4KLQotICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InJvbGUtZGVzYyI+e3tkZXNjcmlwdGlv
bn19PC9wPgotICAgICAgICAgICAgICAgIHt7L3dpdGh9fQotICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIGBhc2Agb3BlcmF0b3IKLQot
ICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGFsaWFzZXMgdGhlIHNjb3BlIHRvIGEgbmV3IG5h
bWUuIEl0J3MgaGVscGZ1bCBmb3Igc2VtYW50aWMgY2xhcml0eSBhbmQgdG8gcmV0YWluCi0gICAg
ICAgICAgICAgIGRlZmF1bHQgc2NvcGUgb3IgdG8gcmVmZXJlbmNlIGZyb20gYW5vdGhlciBge3t3
aXRofX1gIGJsb2NrLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAg
ICAgLy8gcG9zdHMgbWlnaHQgbm90IGJlCi0gICAgICAgICAgICAgIHt7I3dpdGggdXNlci5wb3N0
cyBhcyBibG9nUG9zdHN9fQotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSI+Ci0g
ICAgICAgICAgICAgICAgICBUaGVyZSBhcmUge3tibG9nUG9zdHMubGVuZ3RofX0gYmxvZyBwb3N0
cyB3cml0dGVuIGJ5IHt7dXNlci5uYW1lfX0uCi0gICAgICAgICAgICAgICAgPC9kaXY+Ci0KLSAg
ICAgICAgICAgICAgICB7eyNlYWNoIHBvc3QgaW4gYmxvZ1Bvc3RzfX0KLSAgICAgICAgICAgICAg
ICAgIDxsaT57e3Bvc3QudGl0bGV9fTwvbGk+Ci0gICAgICAgICAgICAgICAge3svZWFjaH19Ci0g
ICAgICAgICAgICAgIHt7L3dpdGh9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBXaXRob3V0IHRoZSBgYXNgIG9wZXJhdG9yLCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHJl
ZmVyZW5jZSBgdXNlci5uYW1lYCBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KLQotICAgICAgICAgICAg
ICBOT1RFOiBUaGUgYWxpYXMgc2hvdWxkIG5vdCByZXVzZSBhIG5hbWUgZnJvbSB0aGUgYm91bmQg
cHJvcGVydHkgcGF0aC4KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6IGB7eyN3aXRoIGZvby5i
YXIgYXMgZm9vfX1gIGlzIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSBpdCBhdHRlbXB0cyB0byBhbGlh
cyB1c2luZwotICAgICAgICAgICAgICB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcHJvcGVydHkgcGF0
aCwgYGZvb2AuIEluc3RlYWQsIHVzZSBge3sjd2l0aCBmb28uYmFyIGFzIGJhen19YC4KLQotICAg
ICAgICAgICAgICAjIyMgYGNvbnRyb2xsZXJgIG9wdGlvbgotCi0gICAgICAgICAgICAgIEFkZGlu
ZyBgY29udHJvbGxlcj0nc29tZXRoaW5nJ2AgaW5zdHJ1Y3RzIHRoZSBge3t3aXRofX1gIGhlbHBl
ciB0byBjcmVhdGUgYW5kIHVzZSBhbiBpbnN0YW5jZSBvZgotICAgICAgICAgICAgICB0aGUgc3Bl
Y2lmaWVkIGNvbnRyb2xsZXIgd2l0aCB0aGUgbmV3IGNvbnRleHQgYXMgaXRzIGNvbnRlbnQuCi0K
LSAgICAgICAgICAgICAgVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdXNpbmcgYW4gYGl0ZW1Db250
cm9sbGVyYCBvcHRpb24gd2l0aCB0aGUgYHt7ZWFjaH19YCBoZWxwZXIuCi0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyN3aXRoIHVzZXJzLnBvc3RzIGNvbnRy
b2xsZXI9J3VzZXJCbG9nUG9zdHMnfX0KLSAgICAgICAgICAgICAgICB7eyEtIFRoZSBjdXJyZW50
IGNvbnRleHQgaXMgd3JhcHBlZCBpbiBvdXIgY29udHJvbGxlciBpbnN0YW5jZSB9fQotICAgICAg
ICAgICAgICB7ey93aXRofX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4g
dGhlIGFib3ZlIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZSBwcm92aWRlZCB0byB0aGUgYHt7d2l0aH19
YCBibG9jayBpcyBub3cgd3JhcHBlZCBpbiB0aGUKLSAgICAgICAgICAgICAgYHVzZXJCbG9nUG9z
dGAgY29udHJvbGxlciwgd2hpY2ggcHJvdmlkZXMgYSB2ZXJ5IGVsZWdhbnQgd2F5IHRvIGRlY29y
YXRlIHRoZSBjb250ZXh0IHdpdGggY3VzdG9tCi0gICAgICAgICAgICAgIGZ1bmN0aW9ucy9wcm9w
ZXJ0aWVzLgotCi0gICAgICAgICAgICAgIEBtZXRob2Qgd2l0aAotICAgICAgICAgICAgICBAZm9y
IEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fSBjb250ZXh0Ci0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAgICAg
ICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiB3aXRoSGVscGVyKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZh
ciBiaW5kQ29udGV4dCwgcHJlc2VydmVDb250ZXh0LCBjb250cm9sbGVyLCBoZWxwZXJOYW1lID0g
J3dpdGgnOwotCi0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkgewotICAg
ICAgICAgICAgICAgIHZhciBrZXl3b3JkTmFtZSwgcGF0aCwgcm9vdFBhdGgsIG5vcm1hbGl6ZWQs
IGNvbnRleHRQYXRoOwotCi0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJJZiB5b3UgcGFz
cyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIHRoZSB3aXRoIGhlbHBlciwgaXQgbXVzdCBiZSBp
biB0aGUgZm9ybSAjd2l0aCBmb28gYXMgYmFyIiwgYXJndW1lbnRzWzFdID09PSAiYXMiKTsKLSAg
ICAgICAgICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzWzNdOwotICAgICAgICAgICAgICAgIGtl
eXdvcmROYW1lID0gYXJndW1lbnRzWzJdOwotICAgICAgICAgICAgICAgIHBhdGggPSBhcmd1bWVu
dHNbMF07Ci0KLSAgICAgICAgICAgICAgICBpZiAocGF0aCkgewotICAgICAgICAgICAgICAgICAg
ICBoZWxwZXJOYW1lICs9ICcgJyArIHBhdGggKyAnIGFzICcgKyBrZXl3b3JkTmFtZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IHBh
c3MgYSBibG9jayB0byB0aGUgd2l0aCBoZWxwZXIiLCBvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4g
IT09IEhhbmRsZWJhcnMuVk0ubm9vcCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbG9jYWxpemVk
T3B0aW9ucyA9IG9fY3JlYXRlKG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGxvY2FsaXplZE9w
dGlvbnMuZGF0YSA9IG9fY3JlYXRlKG9wdGlvbnMuZGF0YSk7Ci0gICAgICAgICAgICAgICAgbG9j
YWxpemVkT3B0aW9ucy5kYXRhLmtleXdvcmRzID0gb19jcmVhdGUob3B0aW9ucy5kYXRhLmtleXdv
cmRzIHx8IHt9KTsKLQotICAgICAgICAgICAgICAgIGlmIChpc0dsb2JhbFBhdGgocGF0aCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dFBhdGggPSBwYXRoOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRo
KHRoaXMsIHBhdGgsIG9wdGlvbnMuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBu
b3JtYWxpemVkLnBhdGg7Ci0gICAgICAgICAgICAgICAgICAgIHJvb3RQYXRoID0gbm9ybWFsaXpl
ZC5yb290OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciB0aGUgZmFjdCB0aGF0IHlvdSBjYW5ub3QgYmluZCBzZXBhcmF0ZSBvYmplY3RzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHRvZ2V0aGVyLiBXaGVuIHdlIGltcGxlbWVudCB0aGF0IGZ1bmN0aW9u
YWxpdHksIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgdmFyIGNv
bnRleHRLZXkgPSBqUXVlcnkuZXhwYW5kbyArIGd1aWRGb3Iocm9vdFBhdGgpOwotICAgICAgICAg
ICAgICAgICAgICBsb2NhbGl6ZWRPcHRpb25zLmRhdGEua2V5d29yZHNbY29udGV4dEtleV0gPSBy
b290UGF0aDsKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBhdGggaXMgJycgKCJ0aGlz
IiksIGp1c3QgYmluZCBkaXJlY3RseSB0byB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHRQYXRoID0gcGF0aCA/IGNvbnRleHRLZXkgKyAnLicgKyBwYXRoIDog
Y29udGV4dEtleTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsb2NhbGl6
ZWRPcHRpb25zLmhhc2gua2V5d29yZE5hbWUgPSBrZXl3b3JkTmFtZTsKLSAgICAgICAgICAgICAg
ICBsb2NhbGl6ZWRPcHRpb25zLmhhc2gua2V5d29yZFBhdGggPSBjb250ZXh0UGF0aDsKLQotICAg
ICAgICAgICAgICAgIGJpbmRDb250ZXh0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBjb250ZXh0
ID0gY29udGV4dFBhdGg7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IGxvY2FsaXplZE9wdGlv
bnM7Ci0gICAgICAgICAgICAgICAgcHJlc2VydmVDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGV4
YWN0bHkgb25lIGFyZ3VtZW50IHRvIHRoZSB3aXRoIGhlbHBlciIsIGFyZ3VtZW50cy5sZW5ndGgg
PT09IDIpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3QgcGFzcyBhIGJs
b2NrIHRvIHRoZSB3aXRoIGhlbHBlciIsIG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gSGFu
ZGxlYmFycy5WTS5ub29wKTsKLQotICAgICAgICAgICAgICAgIGhlbHBlck5hbWUgKz0gJyAnICsg
Y29udGV4dDsKLSAgICAgICAgICAgICAgICBiaW5kQ29udGV4dCA9IG9wdGlvbnMuY29udGV4dHNb
MF07Ci0gICAgICAgICAgICAgICAgcHJlc2VydmVDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IGhlbHBlck5hbWU7Ci0gICAg
ICAgICAgICBvcHRpb25zLmlzV2l0aEhlbHBlciA9IHRydWU7Ci0KLSAgICAgICAgICAgIHJldHVy
biBiaW5kLmNhbGwoYmluZENvbnRleHQsIGNvbnRleHQsIG9wdGlvbnMsIHByZXNlcnZlQ29udGV4
dCwgZXhpc3RzKTsKLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU2VlIFti
b3VuZElmXSgvYXBpL2NsYXNzZXMvRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0bWwjbWV0aG9k
X2JvdW5kSWYpCi0gICAgICAgICAgICAgIGFuZCBbdW5ib3VuZElmXSgvYXBpL2NsYXNzZXMvRW1i
ZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0bWwjbWV0aG9kX3VuYm91bmRJZikKLQotICAgICAgICAg
ICAgICBAbWV0aG9kIGlmCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxw
ZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNvbnRleHQKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtIYXNofSBvcHRpb25zCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30g
SFRNTCBzdHJpbmcKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGlmSGVscGVyKGNv
bnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3QgcGFz
cyBleGFjdGx5IG9uZSBhcmd1bWVudCB0byB0aGUgaWYgaGVscGVyIiwgYXJndW1lbnRzLmxlbmd0
aCA9PT0gMik7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IHBhc3MgYSBibG9j
ayB0byB0aGUgaWYgaGVscGVyIiwgb3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBIYW5kbGVi
YXJzLlZNLm5vb3ApOwotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25z
LmhlbHBlck5hbWUgfHwgKCdpZiAnICsgY29udGV4dCk7Ci0KLSAgICAgICAgICAgIGlmIChvcHRp
b25zLmRhdGEuaXNVbmJvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMudW5i
b3VuZElmLmNhbGwob3B0aW9ucy5jb250ZXh0c1swXSwgY29udGV4dCwgb3B0aW9ucyk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXJzLmJvdW5kSWYu
Y2FsbChvcHRpb25zLmNvbnRleHRzWzBdLCBjb250ZXh0LCBvcHRpb25zKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIHVubGVz
cwotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjb250ZXh0Ci0gICAgICAgICAgICAgIEBwYXJhbSB7SGFz
aH0gb3B0aW9ucwotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB1bmxlc3NIZWxwZXIoY29udGV4dCwgb3B0
aW9ucykgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGV4YWN0bHkg
b25lIGFyZ3VtZW50IHRvIHRoZSB1bmxlc3MgaGVscGVyIiwgYXJndW1lbnRzLmxlbmd0aCA9PT0g
Mik7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBtdXN0IHBhc3MgYSBibG9jayB0byB0
aGUgdW5sZXNzIGhlbHBlciIsIG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gSGFuZGxlYmFy
cy5WTS5ub29wKTsKLQotICAgICAgICAgICAgdmFyIGZuID0gb3B0aW9ucy5mbiwgaW52ZXJzZSA9
IG9wdGlvbnMuaW52ZXJzZSwgaGVscGVyTmFtZSA9ICd1bmxlc3MnOwotCi0gICAgICAgICAgICBp
ZiAoY29udGV4dCkgewotICAgICAgICAgICAgICAgIGhlbHBlck5hbWUgKz0gJyAnICsgY29udGV4
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3B0aW9ucy5mbiA9IGludmVyc2U7Ci0g
ICAgICAgICAgICBvcHRpb25zLmludmVyc2UgPSBmbjsKLQotICAgICAgICAgICAgb3B0aW9ucy5o
ZWxwZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8IGhlbHBlck5hbWU7Ci0KLSAgICAgICAg
ICAgIGlmIChvcHRpb25zLmRhdGEuaXNVbmJvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGhlbHBlcnMudW5ib3VuZElmLmNhbGwob3B0aW9ucy5jb250ZXh0c1swXSwgY29udGV4dCwgb3B0
aW9ucyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBoZWxw
ZXJzLmJvdW5kSWYuY2FsbChvcHRpb25zLmNvbnRleHRzWzBdLCBjb250ZXh0LCBvcHRpb25zKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBg
YmluZC1hdHRyYCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIGJpbmRpbmcgYmV0d2VlbiBET00gZWxl
bWVudCBhdHRyaWJ1dGVzIGFuZAotICAgICAgICAgICAgICBFbWJlciBvYmplY3RzLiBGb3IgZXhh
bXBsZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDxpbWcg
e3tiaW5kLWF0dHIgc3JjPSJpbWFnZVVybCIgYWx0PSJpbWFnZVRpdGxlIn19PgotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgYWJvdmUgaGFuZGxlYmFycyB0ZW1wbGF0ZSB3
aWxsIGZpbGwgdGhlIGA8aW1nPmAncyBgc3JjYCBhdHRyaWJ1dGUgd2lsbAotICAgICAgICAgICAg
ICB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHJlZmVyZW5jZWQgd2l0aCBgImltYWdlVXJsImAg
YW5kIGl0cyBgYWx0YAotICAgICAgICAgICAgICBhdHRyaWJ1dGUgd2l0aCB0aGUgdmFsdWUgb2Yg
dGhlIHByb3BlcnR5IHJlZmVyZW5jZWQgd2l0aCBgImltYWdlVGl0bGUiYC4KLQotICAgICAgICAg
ICAgICBJZiB0aGUgcmVuZGVyaW5nIGNvbnRleHQgb2YgdGhpcyB0ZW1wbGF0ZSBpcyB0aGUgZm9s
bG93aW5nIG9iamVjdDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbWFnZVVybDogJ2h0dHA6Ly9sb2xjYXRzLmluZm8vaGF6
LWEtZnVubnknLAotICAgICAgICAgICAgICAgIGltYWdlVGl0bGU6ICdBIGh1bW9yb3VzIGltYWdl
IG9mIGEgY2F0JwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFRoZSByZXN1bHRpbmcgSFRNTCBvdXRwdXQgd2lsbCBiZToKLQotICAgICAgICAgICAg
ICBgYGBodG1sCi0gICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwOi8vbG9sY2F0cy5pbmZvL2hh
ei1hLWZ1bm55IiBhbHQ9IkEgaHVtb3JvdXMgaW1hZ2Ugb2YgYSBjYXQiPgotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBgYmluZC1hdHRyYCBjYW5ub3QgcmVkZWNsYXJlIGV4aXN0
aW5nIERPTSBlbGVtZW50IGF0dHJpYnV0ZXMuIFRoZSB1c2Ugb2YgYHNyY2AKLSAgICAgICAgICAg
ICAgaW4gdGhlIGZvbGxvd2luZyBgYmluZC1hdHRyYCBleGFtcGxlIHdpbGwgYmUgaWdub3JlZCBh
bmQgdGhlIGhhcmQgY29kZWQgdmFsdWUKLSAgICAgICAgICAgICAgb2YgYHNyYz0iL2ZhaWx3aGFs
ZS5naWYiYCB3aWxsIHRha2UgcHJlY2VkZW5jZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGVi
YXJzCi0gICAgICAgICAgICAgIDxpbWcgc3JjPSIvZmFpbHdoYWxlLmdpZiIge3tiaW5kLWF0dHIg
c3JjPSJpbWFnZVVybCIgYWx0PSJpbWFnZVRpdGxlIn19PgotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAjIyMgYGJpbmQtYXR0cmAgYW5kIHRoZSBgY2xhc3NgIGF0dHJpYnV0ZQot
Ci0gICAgICAgICAgICAgIGBiaW5kLWF0dHJgIHN1cHBvcnRzIGEgc3BlY2lhbCBzeW50YXggZm9y
IGhhbmRsaW5nIGEgbnVtYmVyIG9mIGNhc2VzIHVuaXF1ZQotICAgICAgICAgICAgICB0byB0aGUg
YGNsYXNzYCBET00gZWxlbWVudCBhdHRyaWJ1dGUuIFRoZSBgY2xhc3NgIGF0dHJpYnV0ZSBjb21i
aW5lcwotICAgICAgICAgICAgICBtdWx0aXBsZSBkaXNjcmV0ZSB2YWx1ZXMgaW50byBhIHNpbmds
ZSBhdHRyaWJ1dGUgYXMgYSBzcGFjZS1kZWxpbWl0ZWQKLSAgICAgICAgICAgICAgbGlzdCBvZiBz
dHJpbmdzLiBFYWNoIHN0cmluZyBjYW4gYmU6Ci0KLSAgICAgICAgICAgICAgKiBhIHN0cmluZyBy
ZXR1cm4gdmFsdWUgb2YgYW4gb2JqZWN0J3MgcHJvcGVydHkuCi0gICAgICAgICAgICAgICogYSBi
b29sZWFuIHJldHVybiB2YWx1ZSBvZiBhbiBvYmplY3QncyBwcm9wZXJ0eQotICAgICAgICAgICAg
ICAqIGEgaGFyZC1jb2RlZCB2YWx1ZQotCi0gICAgICAgICAgICAgIEEgc3RyaW5nIHJldHVybiB2
YWx1ZSB3b3JrcyBpZGVudGljYWxseSB0byBvdGhlciB1c2VzIG9mIGBiaW5kLWF0dHJgLiBUaGUK
LSAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB3aWxsIGJlY29tZSB0
aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gRm9yCi0gICAgICAgICAgICAgIGV4YW1wbGUsIHRo
ZSBmb2xsb3dpbmcgdmlldyBhbmQgdGVtcGxhdGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICAgIEFWaWV3ID0gVmlldy5leHRlbmQoewotICAgICAgICAgICAg
ICAgICAgc29tZVByb3BlcnR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJhVmFsdWUiOwotICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpCi0gICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFy
cwotICAgICAgICAgICAgICA8aW1nIHt7YmluZC1hdHRyIGNsYXNzPSJ2aWV3LnNvbWVQcm9wZXJ0
eX19PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBSZXN1bHQgaW4gdGhlIGZv
bGxvd2luZyByZW5kZXJlZCBvdXRwdXQ6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAg
ICAgICAgICA8aW1nIGNsYXNzPSJhVmFsdWUiPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBBIGJvb2xlYW4gcmV0dXJuIHZhbHVlIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIGNs
YXNzIG5hbWUgaWYgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgIHJldHVybnMgYHRydWVgIGFu
ZCByZW1vdmUgdGhlIGNsYXNzIG5hbWUgaWYgdGhlIHByb3BlcnR5IHJldHVybnMgYGZhbHNlYC4K
LQotICAgICAgICAgICAgICBBIGNsYXNzIG5hbWUgaXMgcHJvdmlkZWQgdmlhIHRoZSBzeW50YXgK
LSAgICAgICAgICAgICAgYHNvbWVQcm9wZXJ0eU5hbWU6Y2xhc3MtbmFtZS1pZi10cnVlYC4KLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0gVmlldy5l
eHRlbmQoewotICAgICAgICAgICAgICAgIHNvbWVCb29sOiB0cnVlCi0gICAgICAgICAgICAgIH0p
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAg
ICAgICAgICAgPGltZyB7e2JpbmQtYXR0ciBjbGFzcz0idmlldy5zb21lQm9vbDpjbGFzcy1uYW1l
LWlmLXRydWUifX0+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFJlc3VsdCBp
biB0aGUgZm9sbG93aW5nIHJlbmRlcmVkIG91dHB1dDoKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImNsYXNzLW5hbWUtaWYtdHJ1ZSI+Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgc2VjdGlvbiBvZiB0aGUg
YmluZGluZyBjYW4gYmUgcHJvdmlkZWQgaWYgeW91IHdhbnQgdG8KLSAgICAgICAgICAgICAgcmVw
bGFjZSB0aGUgZXhpc3RpbmcgY2xhc3MgaW5zdGVhZCBvZiByZW1vdmluZyBpdCB3aGVuIHRoZSBi
b29sZWFuCi0gICAgICAgICAgICAgIHZhbHVlIGNoYW5nZXM6Ci0KLSAgICAgICAgICAgICAgYGBg
aGFuZGxlYmFycwotICAgICAgICAgICAgICA8aW1nIHt7YmluZC1hdHRyIGNsYXNzPSJ2aWV3LnNv
bWVCb29sOmNsYXNzLW5hbWUtaWYtdHJ1ZTpjbGFzcy1uYW1lLWlmLWZhbHNlIn19PgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBIGhhcmQtY29kZWQgdmFsdWUgY2FuIGJlIHVz
ZWQgYnkgcHJlcGVuZGluZyBgOmAgdG8gdGhlIGRlc2lyZWQKLSAgICAgICAgICAgICAgY2xhc3Mg
bmFtZTogYDpjbGFzcy1uYW1lLXRvLWFsd2F5cy1hcHBseWAuCi0KLSAgICAgICAgICAgICAgYGBg
aGFuZGxlYmFycwotICAgICAgICAgICAgICA8aW1nIHt7YmluZC1hdHRyIGNsYXNzPSI6Y2xhc3Mt
bmFtZS10by1hbHdheXMtYXBwbHkifX0+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIFJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZyByZW5kZXJlZCBvdXRwdXQ6Ci0KLSAgICAgICAg
ICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjbGFzcy1uYW1lLXRvLWFs
d2F5cy1hcHBseSI+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFsbCB0aHJl
ZSBzdHJhdGVnaWVzIC0gc3RyaW5nIHJldHVybiB2YWx1ZSwgYm9vbGVhbiByZXR1cm4gdmFsdWUs
IGFuZAotICAgICAgICAgICAgICBoYXJkLWNvZGVkIHZhbHVlIOKAkyBjYW4gYmUgY29tYmluZWQg
aW4gYSBzaW5nbGUgZGVjbGFyYXRpb246Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwot
ICAgICAgICAgICAgICA8aW1nIHt7YmluZC1hdHRyIGNsYXNzPSI6Y2xhc3MtbmFtZS10by1hbHdh
eXMtYXBwbHkgdmlldy5zb21lQm9vbDpjbGFzcy1uYW1lLWlmLXRydWUgdmlldy5zb21lUHJvcGVy
dHkifX0+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgYmluZC1h
dHRyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJp
bmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBiaW5kQXR0
ckhlbHBlcihvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgYXR0cnMgPSBvcHRpb25zLmhhc2g7
Ci0KLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBv
bmUgaGFzaCBhcmd1bWVudCB0byBiaW5kLWF0dHIiLCAhIWtleXMoYXR0cnMpLmxlbmd0aCk7Ci0K
LSAgICAgICAgICAgIHZhciB2aWV3ID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0gICAgICAgICAgICB2
YXIgcmV0ID0gW107Ci0KLSAgICAgICAgICAgIC8vIHdlIHJlbGllZCBvbiB0aGUgYmVoYXZpb3Ig
b2YgY2FsbGluZyB3aXRob3V0Ci0gICAgICAgICAgICAvLyBjb250ZXh0IHRvIG1lYW4gdGhpcyA9
PT0gd2luZG93LCBidXQgd2hlbiBydW5uaW5nCi0gICAgICAgICAgICAvLyAidXNlIHN0cmljdCIs
IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgdG8gPT09IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIHZh
ciBjdHggPSB0aGlzIHx8IHdpbmRvdzsKLQotICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSB1bmlx
dWUgaWQgZm9yIHRoaXMgZWxlbWVudC4gVGhpcyB3aWxsIGJlIGFkZGVkIGFzIGEKLSAgICAgICAg
ICAgIC8vIGRhdGEgYXR0cmlidXRlIHRvIHRoZSBlbGVtZW50IHNvIGl0IGNhbiBiZSBsb29rZWQg
dXAgd2hlbgotICAgICAgICAgICAgLy8gdGhlIGJvdW5kIHByb3BlcnR5IGNoYW5nZXMuCi0gICAg
ICAgICAgICB2YXIgZGF0YUlkID0gdXVpZCgpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUgY2xh
c3NlcyBkaWZmZXJlbnRseSwgYXMgd2UgY2FuIGJpbmQgbXVsdGlwbGUgY2xhc3NlcwotICAgICAg
ICAgICAgdmFyIGNsYXNzQmluZGluZ3MgPSBhdHRyc1snY2xhc3MnXTsKLSAgICAgICAgICAgIGlm
IChjbGFzc0JpbmRpbmdzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NSZXN1
bHRzID0gYmluZENsYXNzZXMoY3R4LCBjbGFzc0JpbmRpbmdzLCB2aWV3LCBkYXRhSWQsIG9wdGlv
bnMpOwotCi0gICAgICAgICAgICAgICAgcmV0LnB1c2goJ2NsYXNzPSInICsgSGFuZGxlYmFycy5V
dGlscy5lc2NhcGVFeHByZXNzaW9uKGNsYXNzUmVzdWx0cy5qb2luKCcgJykpICsgJyInKTsKLSAg
ICAgICAgICAgICAgICBkZWxldGUgYXR0cnNbJ2NsYXNzJ107Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciBhdHRyS2V5cyA9IGtleXMoYXR0cnMpOwotCi0gICAgICAgICAgICAvLyBG
b3IgZWFjaCBhdHRyaWJ1dGUgcGFzc2VkLCBjcmVhdGUgYW4gb2JzZXJ2ZXIgYW5kIGVtaXQgdGhl
Ci0gICAgICAgICAgICAvLyBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBhbiBhdHRy
aWJ1dGUuCi0gICAgICAgICAgICBmb3JFYWNoLmNhbGwoYXR0cktleXMsIGZ1bmN0aW9uKGF0dHIp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGF0dHJzW2F0dHJdLAotICAgICAgICAgICAg
ICAgIG5vcm1hbGl6ZWQ7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZm10KCJZb3Ug
bXVzdCBwcm92aWRlIGFuIGV4cHJlc3Npb24gYXMgdGhlIHZhbHVlIG9mIGJvdW5kIGF0dHJpYnV0
ZS4gWW91IHNwZWNpZmllZDogJUA9JUAiLCBbYXR0ciwgcGF0aF0pLCB0eXBlb2YgcGF0aCA9PT0g
J3N0cmluZycpOwotCi0gICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgo
Y3R4LCBwYXRoLCBvcHRpb25zLmRhdGEpOwotCi0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0g
KHBhdGggPT09ICd0aGlzJykgPyBub3JtYWxpemVkLnJvb3QgOiBoYW5kbGViYXJzR2V0KGN0eCwg
cGF0aCwgb3B0aW9ucyksCi0gICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVPZih2YWx1ZSk7Ci0K
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZm10KCJBdHRyaWJ1dGVzIG11c3QgYmUgbnVt
YmVycywgc3RyaW5ncyBvciBib29sZWFucywgbm90ICVAIiwgW3ZhbHVlXSksIHZhbHVlID09PSBu
dWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9
PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKTsKLQotICAgICAgICAgICAgICAgIHZh
ciBvYnNlcnZlcjsKLQotICAgICAgICAgICAgICAgIG9ic2VydmVyID0gZnVuY3Rpb24gb2JzZXJ2
ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGViYXJzR2V0KGN0
eCwgcGF0aCwgb3B0aW9ucyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZt
dCgiQXR0cmlidXRlcyBtdXN0IGJlIG51bWJlcnMsIHN0cmluZ3Mgb3IgYm9vbGVhbnMsIG5vdCAl
QCIsIFtyZXN1bHRdKSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID09PSBudWxsIHx8IHJl
c3VsdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInIHx8Ci0gICAg
ICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByZXN1
bHQgPT09ICdib29sZWFuJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB2aWV3
LiQoIltkYXRhLWJpbmRhdHRyLSIgKyBkYXRhSWQgKyAiPSciICsgZGF0YUlkICsgIiddIik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlbid0IGFibGUgdG8gZmluZCB0aGUgZWxl
bWVudCwgaXQgbWVhbnMgdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gd2hp
Y2ggd2Ugd2VyZSBib3VuZCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHZpZXcuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgY2FuIGFzc3VtZSB0aGUgdGVtcGxhdGUg
aGFzIGJlZW4gcmUtcmVuZGVyZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIG5lZWQg
dG8gY2xlYW4gdXAgdGhlIG9ic2VydmVyLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW0g
fHwgZWxlbS5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU9i
c2VydmVyKG5vcm1hbGl6ZWQucm9vdCwgbm9ybWFsaXplZC5wYXRoLCBvYnNlcnZlcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBWaWV3LmFwcGx5QXR0cmlidXRlQmluZGluZ3MoZWxlbSwgYXR0ciwg
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGFu
IG9ic2VydmVyIHRvIHRoZSB2aWV3IGZvciB3aGVuIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLgotICAg
ICAgICAgICAgICAgIC8vIFdoZW4gdGhlIG9ic2VydmVyIGZpcmVzLCBmaW5kIHRoZSBlbGVtZW50
IHVzaW5nIHRoZQotICAgICAgICAgICAgICAgIC8vIHVuaXF1ZSBkYXRhIGlkIGFuZCB1cGRhdGUg
dGhlIGF0dHJpYnV0ZSB0byB0aGUgbmV3IHZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6
IGRvbid0IGFkZCBvYnNlcnZlciB3aGVuIHBhdGggaXMgJ3RoaXMnIG9yIHBhdGgKLSAgICAgICAg
ICAgICAgICAvLyBpcyB3aG9sZSBrZXl3b3JkIGUuZy4ge3sjZWFjaCB4IGluIGxpc3R9fSAuLi4g
e3tiaW5kLWF0dHIgYXR0cj0ieCJ9fQotICAgICAgICAgICAgICAgIGlmIChwYXRoICE9PSAndGhp
cycgJiYgIShub3JtYWxpemVkLmlzS2V5d29yZCAmJiBub3JtYWxpemVkLnBhdGggPT09ICcnICkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5yZWdpc3Rlck9ic2VydmVyKG5vcm1hbGl6ZWQu
cm9vdCwgbm9ybWFsaXplZC5wYXRoLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBjaGFuZ2VzLCBhbHNvIGNoYW5nZSB0aGUgbG9naWMg
aW4gZW1iZXItdmlld3MvbGliL3ZpZXdzL3ZpZXcuanMKLSAgICAgICAgICAgICAgICBpZiAoKHR5
cGUgPT09ICdzdHJpbmcnIHx8ICh0eXBlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goYXR0ciArICc9IicgKyBIYW5kbGViYXJz
LlV0aWxzLmVzY2FwZUV4cHJlc3Npb24odmFsdWUpICsgJyInKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHZhbHVlICYmIHR5cGUgPT09ICdib29sZWFuJykgewotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZGV2ZWxvcGVyIGNvbnRyb2xzIHRoZSBhdHRyIG5hbWUsIHNvIGl0IHNob3Vs
ZCBhbHdheXMgYmUgc2FmZQotICAgICAgICAgICAgICAgICAgICByZXQucHVzaChhdHRyICsgJz0i
JyArIGF0dHIgKyAnIicpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIHRoaXMp
OwotCi0gICAgICAgICAgICAvLyBBZGQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyCi0gICAgICAgICAg
ICAvLyBOT1RFOiBXZSB1c2UgYWxsIGxvd2VyLWNhc2Ugc2luY2UgRmlyZWZveCBoYXMgcHJvYmxl
bXMgd2l0aCBtaXhlZCBjYXNlIGluIFNWRwotICAgICAgICAgICAgcmV0LnB1c2goJ2RhdGEtYmlu
ZGF0dHItJyArIGRhdGFJZCArICc9IicgKyBkYXRhSWQgKyAnIicpOwotICAgICAgICAgICAgcmV0
dXJuIG5ldyBTYWZlU3RyaW5nKHJldC5qb2luKCcgJykpOwotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIFNlZSBgYmluZC1hdHRyYAotCi0gICAgICAgICAgICAgIEBtZXRo
b2QgYmluZEF0dHIKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMK
LSAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bn0gY29udGV4dAotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAg
ICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gYmluZEF0dHJIZWxwZXJEZXByZWNhdGVkKCkgewotICAgICAgICAgICAgRW1i
ZXIud2FybigiVGhlICdiaW5kQXR0cicgdmlldyBoZWxwZXIgaXMgZGVwcmVjYXRlZCBpbiBmYXZv
ciBvZiAnYmluZC1hdHRyJyIpOwotICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnNbJ2JpbmQtYXR0
ciddLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgSGVscGVyIHRoYXQsIGdpdmVuIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBv
ZiBwcm9wZXJ0eSBwYXRocyBhbmQgYSBjb250ZXh0LAotICAgICAgICAgICAgICByZXR1cm5zIGFu
IGFycmF5IG9mIGNsYXNzIG5hbWVzLiBDYWxsaW5nIHRoaXMgbWV0aG9kIGFsc28gaGFzIHRoZSBz
aWRlCi0gICAgICAgICAgICAgIGVmZmVjdCBvZiBzZXR0aW5nIHVwIG9ic2VydmVycyBhdCB0aG9z
ZSBwcm9wZXJ0eSBwYXRocywgc3VjaCB0aGF0IGlmIHRoZXkKLSAgICAgICAgICAgICAgY2hhbmdl
LCB0aGUgY29ycmVjdCBjbGFzcyBuYW1lIHdpbGwgYmUgcmVhcHBsaWVkIHRvIHRoZSBET00gZWxl
bWVudC4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHBhc3MgdGhlIHN0cmlu
ZyAiZm9vQmFyIiwgaXQgd2lsbCBmaXJzdCBsb29rIHVwIHRoZQotICAgICAgICAgICAgICAiZm9v
QmFyIiB2YWx1ZSBvZiB0aGUgY29udGV4dC4gSWYgdGhhdCB2YWx1ZSBpcyB0cnVlLCBpdCB3aWxs
IGFkZCB0aGUKLSAgICAgICAgICAgICAgImZvby1iYXIiIGNsYXNzIHRvIHRoZSBjdXJyZW50IGVs
ZW1lbnQgKGkuZS4sIHRoZSBkYXNoZXJpemVkIGZvcm0gb2YKLSAgICAgICAgICAgICAgImZvb0Jh
ciIpLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYWRkIHRoYXQgc3RyaW5nIGFz
IHRoZSBjbGFzcy4KLSAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBpdCB3aWxsIG5vdCBhZGQgYW55
IG5ldyBjbGFzcyBuYW1lLgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
IEBtZXRob2QgYmluZENsYXNzZXMKLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJz
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuT2JqZWN0fSBjb250ZXh0IFRoZSBjb250ZXh0
IGZyb20gd2hpY2ggdG8gbG9va3VwIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGNsYXNzQmluZGluZ3MgQSBzdHJpbmcsIHNwYWNlLXNlcGFyYXRlZCwgb2YgY2xhc3Mg
YmluZGluZ3MKLSAgICAgICAgICAgICAgICB0byB1c2UKLSAgICAgICAgICAgICAgQHBhcmFtIHtW
aWV3fSB2aWV3IFRoZSB2aWV3IGluIHdoaWNoIG9ic2VydmVycyBzaG91bGQgbG9vayBmb3IgdGhl
Ci0gICAgICAgICAgICAgICAgZWxlbWVudCB0byB1cGRhdGUKLSAgICAgICAgICAgICAgQHBhcmFt
IHtTcnRpbmd9IGJpbmRBdHRySWQgT3B0aW9uYWwgYmluZEF0dHIgaWQgdXNlZCB0byBsb29rdXAg
ZWxlbWVudHMKLSAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGNsYXNz
IG5hbWVzIHRvIGFkZAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYmluZENsYXNz
ZXMoY29udGV4dCwgY2xhc3NCaW5kaW5ncywgdmlldywgYmluZEF0dHJJZCwgb3B0aW9ucykgewot
ICAgICAgICAgICAgdmFyIHJldCA9IFtdLCBuZXdDbGFzcywgdmFsdWUsIGVsZW07Ci0KLSAgICAg
ICAgICAgIC8vIEhlbHBlciBtZXRob2QgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IGZyb20gdGhl
IGNvbnRleHQgYW5kCi0gICAgICAgICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggY2xhc3Mgc3RyaW5n
IHRvIHJldHVybiwgYmFzZWQgb24gd2hldGhlciBpdCBpcwotICAgICAgICAgICAgLy8gYSBCb29s
ZWFuIG9yIG5vdC4KLSAgICAgICAgICAgIHZhciBjbGFzc1N0cmluZ0ZvclBhdGggPSBmdW5jdGlv
bihyb290LCBwYXJzZWRQYXRoLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbCwK
LSAgICAgICAgICAgICAgICBwYXRoID0gcGFyc2VkUGF0aC5wYXRoOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHBhdGggPT09ICd0aGlzJykgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSByb290
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0aCA9PT0gJycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB2YWwgPSBoYW5kbGViYXJzR2V0KHJvb3QsIHBhdGgsIG9wdGlvbnMpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBWaWV3Ll9jbGFzc1N0cmlu
Z0ZvclZhbHVlKHBhdGgsIHZhbCwgcGFyc2VkUGF0aC5jbGFzc05hbWUsIHBhcnNlZFBhdGguZmFs
c3lDbGFzc05hbWUpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLy8gRm9yIGVhY2gg
cHJvcGVydHkgcGFzc2VkLCBsb29wIHRocm91Z2ggYW5kIHNldHVwCi0gICAgICAgICAgICAvLyBh
biBvYnNlcnZlci4KLSAgICAgICAgICAgIGZvckVhY2guY2FsbChjbGFzc0JpbmRpbmdzLnNwbGl0
KCcgJyksIGZ1bmN0aW9uKGJpbmRpbmcpIHsKLQotICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxl
IGluIHdoaWNoIHRoZSBvbGQgY2xhc3MgdmFsdWUgaXMgc2F2ZWQuIFRoZSBvYnNlcnZlciBmdW5j
dGlvbgotICAgICAgICAgICAgICAgIC8vIGNsb3NlcyBvdmVyIHRoaXMgdmFyaWFibGUsIHNvIGl0
IGtub3dzIHdoaWNoIHN0cmluZyB0byByZW1vdmUgd2hlbgotICAgICAgICAgICAgICAgIC8vIHRo
ZSBwcm9wZXJ0eSBjaGFuZ2VzLgotICAgICAgICAgICAgICAgIHZhciBvbGRDbGFzczsKLQotICAg
ICAgICAgICAgICAgIHZhciBvYnNlcnZlcjsKLQotICAgICAgICAgICAgICAgIHZhciBwYXJzZWRQ
YXRoID0gVmlldy5fcGFyc2VQcm9wZXJ0eVBhdGgoYmluZGluZyksCi0gICAgICAgICAgICAgICAg
cGF0aCA9IHBhcnNlZFBhdGgucGF0aCwKLSAgICAgICAgICAgICAgICBwYXRoUm9vdCA9IGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgbm9ybWFsaXplZDsKLQotICAgICAgICAgICAgICAgIGlmIChw
YXRoICE9PSAnJyAmJiBwYXRoICE9PSAndGhpcycpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9y
bWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoY29udGV4dCwgcGF0aCwgb3B0aW9ucy5kYXRhKTsKLQot
ICAgICAgICAgICAgICAgICAgICBwYXRoUm9vdCA9IG5vcm1hbGl6ZWQucm9vdDsKLSAgICAgICAg
ICAgICAgICAgICAgcGF0aCA9IG5vcm1hbGl6ZWQucGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBTZXQgdXAgYW4gb2JzZXJ2ZXIgb24gdGhlIGNvbnRleHQuIElm
IHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLCB0b2dnbGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gY2xh
c3MgbmFtZS4KLSAgICAgICAgICAgICAgICBvYnNlcnZlciA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0NsYXNzID0gY2xhc3NTdHJpbmdGb3JQYXRoKGNvbnRleHQs
IHBhcnNlZFBhdGgsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICBlbGVtID0gYmluZEF0
dHJJZCA/IHZpZXcuJCgiW2RhdGEtYmluZGF0dHItIiArIGJpbmRBdHRySWQgKyAiPSciICsgYmlu
ZEF0dHJJZCArICInXSIpIDogdmlldy4kKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UgY2FuJ3QgZmluZCB0aGUgZWxlbWVudCBhbnltb3JlLCBhIHBhcmVudCB0ZW1wbGF0ZSBoYXMg
YmVlbgotICAgICAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXJlZCBhbmQgd2UndmUgYmVlbiBu
dWtlZC4gUmVtb3ZlIHRoZSBvYnNlcnZlci4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVt
IHx8IGVsZW0ubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVP
YnNlcnZlcihwYXRoUm9vdCwgcGF0aCwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGFkIHByZXZpb3VzbHkg
YWRkZWQgYSBjbGFzcyB0byB0aGUgZWxlbWVudCwgcmVtb3ZlIGl0LgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9sZENsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5yZW1vdmVDbGFzcyhvbGRDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgYWRkIGEgbmV3IGNsYXNzLiBN
YWtlIHN1cmUgd2Uga2VlcCB0cmFjayBvZiBpdCBzbwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaXQgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChuZXdDbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRk
Q2xhc3MobmV3Q2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZENsYXNzID0g
bmV3Q2xhc3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZENsYXNzID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgICAgICBpZiAocGF0aCAhPT0gJycgJiYgcGF0aCAhPT0gJ3RoaXMnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihwYXRoUm9vdCwgcGF0aCwgb2JzZXJ2ZXIp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
c2V0dXAgdGhlIG9ic2VydmVyOyBub3cgd2UganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlCi0g
ICAgICAgICAgICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciByaWdodCBub3cgb24gdGhlIGZpcnN0
IHBhc3MgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGNsYXNzU3RyaW5nRm9yUGF0
aChjb250ZXh0LCBwYXJzZWRQYXRoLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh2YWx1ZSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgc28gdGhh
dCBpdCBjYW4gYmUgcmVtb3ZlZCBpZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2
ZXIgZmlyZXMuCi0gICAgICAgICAgICAgICAgICAgIG9sZENsYXNzID0gdmFsdWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5iaW5kID0gYmluZDsKLSAgICAgICAgX19l
eHBvcnRzX18uX3RyaWFnZU11c3RhY2hlSGVscGVyID0gX3RyaWFnZU11c3RhY2hlSGVscGVyOwot
ICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZlSGVscGVyID0gcmVzb2x2ZUhlbHBlcjsKLSAgICAg
ICAgX19leHBvcnRzX18uYmluZEhlbHBlciA9IGJpbmRIZWxwZXI7Ci0gICAgICAgIF9fZXhwb3J0
c19fLmJvdW5kSWZIZWxwZXIgPSBib3VuZElmSGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy51
bmJvdW5kSWZIZWxwZXIgPSB1bmJvdW5kSWZIZWxwZXI7Ci0gICAgICAgIF9fZXhwb3J0c19fLndp
dGhIZWxwZXIgPSB3aXRoSGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5pZkhlbHBlciA9IGlm
SGVscGVyOwotICAgICAgICBfX2V4cG9ydHNfXy51bmxlc3NIZWxwZXIgPSB1bmxlc3NIZWxwZXI7
Ci0gICAgICAgIF9fZXhwb3J0c19fLmJpbmRBdHRySGVscGVyID0gYmluZEF0dHJIZWxwZXI7Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmJpbmRBdHRySGVscGVyRGVwcmVjYXRlZCA9IGJpbmRBdHRySGVs
cGVyRGVwcmVjYXRlZDsKLSAgICAgICAgX19leHBvcnRzX18uYmluZENsYXNzZXMgPSBiaW5kQ2xh
c3NlczsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9jb2xs
ZWN0aW9uIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAi
ZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmci
LCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLWhhbmRsZWJhcnMvZXh0IiwgImVt
YmVyLWhhbmRsZWJhcnMvaGVscGVycy92aWV3IiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVt
YmVyLXZpZXdzL3ZpZXdzL2NvbGxlY3Rpb25fdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19k
ZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRl
bmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUg
ZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItaGFuZGxlYmFycwotICAgICAgICAg
ICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0LCBFbWJlci5kZXByZWNhdGUKLSAgICAgICAgdmFyIGlu
c3BlY3QgPSBfX2RlcGVuZGVuY3kyX18uaW5zcGVjdDsKLQotICAgICAgICAvLyB2YXIgZW1iZXJB
c3NlcnQgPSBFbWJlci5hc3NlcnQ7Ci0gICAgICAgIC8vIGVtYmVyRGVwcmVjYXRlID0gRW1iZXIu
ZGVwcmVjYXRlOwotCi0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3kz
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVs
cGVyczsKLQotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5NF9fLmZtdDsKLSAgICAgICAg
dmFyIGdldCA9IF9fZGVwZW5kZW5jeTVfXy5nZXQ7Ci0gICAgICAgIHZhciBoYW5kbGViYXJzR2V0
ID0gX19kZXBlbmRlbmN5Nl9fLmhhbmRsZWJhcnNHZXQ7Ci0gICAgICAgIHZhciBWaWV3SGVscGVy
ID0gX19kZXBlbmRlbmN5N19fLlZpZXdIZWxwZXI7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9f
ZGVwZW5kZW5jeThfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIENvbGxlY3Rpb25WaWV3ID0gX19k
ZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIGFsaWFzID0gY29tcHV0ZWQu
YWxpYXM7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBge3tjb2xsZWN0aW9ufX1gIGlzIGEg
YEVtYmVyLkhhbmRsZWJhcnNgIGhlbHBlciBmb3IgYWRkaW5nIGluc3RhbmNlcyBvZgotICAgICAg
ICAgICAgICBgRW1iZXIuQ29sbGVjdGlvblZpZXdgIHRvIGEgdGVtcGxhdGUuIFNlZSBbRW1iZXIu
Q29sbGVjdGlvblZpZXddKC9hcGkvY2xhc3Nlcy9FbWJlci5Db2xsZWN0aW9uVmlldy5odG1sKQot
ICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IGEgYENvbGxl
Y3Rpb25WaWV3YCBmdW5jdGlvbnMuCi0KLSAgICAgICAgICAgICAgYHt7Y29sbGVjdGlvbn19YCdz
IHByaW1hcnkgdXNlIGlzIGFzIGEgYmxvY2sgaGVscGVyIHdpdGggYSBgY29udGVudEJpbmRpbmdg
Ci0gICAgICAgICAgICAgIG9wdGlvbiBwb2ludGluZyB0b3dhcmRzIGFuIGBFbWJlci5BcnJheWAt
Y29tcGF0aWJsZSBvYmplY3QuIEFuIGBFbWJlci5WaWV3YAotICAgICAgICAgICAgICBpbnN0YW5j
ZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggaXRlbSBpbiBpdHMgYGNvbnRlbnRgIHByb3BlcnR5
LiBFYWNoIHZpZXcKLSAgICAgICAgICAgICAgd2lsbCBoYXZlIGl0cyBvd24gYGNvbnRlbnRgIHBy
b3BlcnR5IHNldCB0byB0aGUgYXBwcm9wcmlhdGUgaXRlbSBpbiB0aGUKLSAgICAgICAgICAgICAg
Y29sbGVjdGlvbi4KLQotICAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgYmxvY2sgd2lsbCBiZSBh
cHBsaWVkIGFzIHRoZSB0ZW1wbGF0ZSBmb3IgZWFjaCBpdGVtJ3Mgdmlldy4KLQotICAgICAgICAg
ICAgICBHaXZlbiBhbiBlbXB0eSBgPGJvZHk+YCB0aGUgZm9sbG93aW5nIHRlbXBsYXRlOgotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjY29sbGVjdGlvbiBj
b250ZW50QmluZGluZz0iQXBwLml0ZW1zIn19Ci0gICAgICAgICAgICAgICAgSGkge3t2aWV3LmNv
bnRlbnQubmFtZX19Ci0gICAgICAgICAgICAgIHt7L2NvbGxlY3Rpb259fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBBbmQgdGhlIGZvbGxvd2luZyBhcHBsaWNhdGlvbiBjb2Rl
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAgPSBFbWJl
ci5BcHBsaWNhdGlvbi5jcmVhdGUoKQotICAgICAgICAgICAgICBBcHAuaXRlbXMgPSBbCi0gICAg
ICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7bmFtZTogJ0RhdmUnfSksCi0gICAgICAg
ICAgICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7bmFtZTogJ01hcnknfSksCi0gICAgICAgICAg
ICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7bmFtZTogJ1NhcmEnfSkKLSAgICAgICAgICAgICAg
XQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB0aGUg
SFRNTCBzdHJ1Y3R1cmUgYmVsb3cKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
ImVtYmVyLXZpZXciPkhpIERhdmU8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJl
bWJlci12aWV3Ij5IaSBNYXJ5PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1i
ZXItdmlldyI+SGkgU2FyYTwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIEJsb2NrbGVzcyB1c2UgaW4gYSBjb2xsZWN0aW9u
Ci0KLSAgICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYW4gYGl0ZW1WaWV3Q2xhc3NgIG9wdGlv
biB0aGF0IGhhcyBpdHMgb3duIGB0ZW1wbGF0ZWAgeW91IGNhbgotICAgICAgICAgICAgICBvbWl0
IHRoZSBibG9jay4KLQotICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHRlbXBsYXRlOgotCi0g
ICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tjb2xsZWN0aW9uIGNv
bnRlbnRCaW5kaW5nPSJBcHAuaXRlbXMiIGl0ZW1WaWV3Q2xhc3M9IkFwcC5Bbkl0ZW1WaWV3In19
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFuZCBhcHBsaWNhdGlvbiBjb2Rl
Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAgPSBFbWJl
ci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgQXBwLml0ZW1zID0gWwotICAg
ICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6ICdEYXZlJ30pLAotICAgICAg
ICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6ICdNYXJ5J30pLAotICAgICAgICAg
ICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6ICdTYXJhJ30pCi0gICAgICAgICAgICAg
IF07Ci0KLSAgICAgICAgICAgICAgQXBwLkFuSXRlbVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgiR3Jl
ZXRpbmdzIHt7dmlldy5jb250ZW50Lm5hbWV9fSIpCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB0aGUgSFRNTCBzdHJ1
Y3R1cmUgYmVsb3cKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZp
ZXciPkdyZWV0aW5ncyBEYXZlPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1i
ZXItdmlldyI+R3JlZXRpbmdzIE1hcnk8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJlbWJlci12aWV3Ij5HcmVldGluZ3MgU2FyYTwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIFNwZWNpZnlpbmcgYSBDb2xs
ZWN0aW9uVmlldyBzdWJjbGFzcwotCi0gICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGB7e2Nv
bGxlY3Rpb259fWAgaGVscGVyIHdpbGwgY3JlYXRlIGFuIGluc3RhbmNlIG9mCi0gICAgICAgICAg
ICAgIGBFbWJlci5Db2xsZWN0aW9uVmlld2AuIFlvdSBjYW4gc3VwcGx5IGEgYEVtYmVyLkNvbGxl
Y3Rpb25WaWV3YCBzdWJjbGFzcyB0bwotICAgICAgICAgICAgICB0aGUgaGVscGVyIGJ5IHBhc3Np
bmcgaXQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgICAgICAgICAge3sjY29sbGVjdGlvbiBBcHAuTXlDdXN0b21Db2xsZWN0aW9uQ2xh
c3MgY29udGVudEJpbmRpbmc9IkFwcC5pdGVtcyJ9fQotICAgICAgICAgICAgICAgIEhpIHt7dmll
dy5jb250ZW50Lm5hbWV9fQotICAgICAgICAgICAgICB7ey9jb2xsZWN0aW9ufX0KLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIEZvcndhcmRlZCBgaXRlbS4qYC1uYW1lZCBP
cHRpb25zCi0KLSAgICAgICAgICAgICAgQXMgd2l0aCB0aGUgYHt7dmlld319YCwgaGVscGVyIG9w
dGlvbnMgcGFzc2VkIHRvIHRoZSBge3tjb2xsZWN0aW9ufX1gIHdpbGwgYmUKLSAgICAgICAgICAg
ICAgc2V0IG9uIHRoZSByZXN1bHRpbmcgYEVtYmVyLkNvbGxlY3Rpb25WaWV3YCBhcyBwcm9wZXJ0
aWVzLiBBZGRpdGlvbmFsbHksCi0gICAgICAgICAgICAgIG9wdGlvbnMgcHJlZml4ZWQgd2l0aCBg
aXRlbWAgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSB2aWV3cyByZW5kZXJlZCBmb3IgZWFjaAotICAg
ICAgICAgICAgICBpdGVtIChub3RlIHRoZSBjYW1lbGNhc2luZyk6Ci0KLSAgICAgICAgICAgICAg
YGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNjb2xsZWN0aW9uIGNvbnRlbnRCaW5kaW5n
PSJBcHAuaXRlbXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRhZ05hbWU9InAi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNsYXNzTmFtZXM9ImdyZWV0aW5nIn19
Ci0gICAgICAgICAgICAgICAgSG93ZHkge3t2aWV3LmNvbnRlbnQubmFtZX19Ci0gICAgICAgICAg
ICAgIHt7L2NvbGxlY3Rpb259fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBX
aWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlOgotCi0gICAgICAgICAg
ICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAg
ICAgICAgICAgICAgPHAgY2xhc3M9ImVtYmVyLXZpZXcgZ3JlZXRpbmciPkhvd2R5IERhdmU8L3A+
Ci0gICAgICAgICAgICAgICAgPHAgY2xhc3M9ImVtYmVyLXZpZXcgZ3JlZXRpbmciPkhvd2R5IE1h
cnk8L3A+Ci0gICAgICAgICAgICAgICAgPHAgY2xhc3M9ImVtYmVyLXZpZXcgZ3JlZXRpbmciPkhv
d2R5IFNhcmE8L3A+Ci0gICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAbWV0aG9kIGNvbGxlY3Rpb24KLSAgICAgICAgICAgICAgQGZvciBFbWJl
ci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgK
LSAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBvcHRpb25zCi0gICAgICAgICAgICAgIEByZXR1
cm4ge1N0cmluZ30gSFRNTCBzdHJpbmcKLSAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGB7
e2VhY2h9fWAgaGVscGVyIGluc3RlYWQuCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBjb2xsZWN0aW9uSGVscGVyKHBhdGgsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmRl
cHJlY2F0ZSgiVXNpbmcgdGhlIHt7Y29sbGVjdGlvbn19IGhlbHBlciB3aXRob3V0IHNwZWNpZnlp
bmcgYSBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIHRoZSB7e2VhY2h9fSBoZWxwZXIgbm93
IHN1cHBvcnRzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuIiwgcGF0aCAhPT0gJ2NvbGxlY3Rpb24n
KTsKLQotICAgICAgICAgICAgLy8gSWYgbm8gcGF0aCBpcyBwcm92aWRlZCwgdHJlYXQgcGF0aCBw
YXJhbSBhcyBvcHRpb25zLgotICAgICAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5kYXRhICYmIHBh
dGguZGF0YS5pc1JlbmRlckRhdGEpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gcGF0aDsK
LSAgICAgICAgICAgICAgICBwYXRoID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIEVtYmVy
LmFzc2VydCgiWW91IGNhbm5vdCBwYXNzIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgdG8gdGhlIGNv
bGxlY3Rpb24gaGVscGVyIiwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbm5vdCBwYXNzIG1v
cmUgdGhhbiBvbmUgYXJndW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24gaGVscGVyIiwgYXJndW1lbnRz
Lmxlbmd0aCA9PT0gMik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBmbiA9IG9w
dGlvbnMuZm47Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YTsKLSAgICAgICAg
ICAgIHZhciBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlOwotICAgICAgICAgICAgdmFyIHZpZXcg
PSBvcHRpb25zLmRhdGEudmlldzsKLQotCi0gICAgICAgICAgICB2YXIgY29udHJvbGxlciwgY29u
dGFpbmVyOwotICAgICAgICAgICAgLy8gSWYgcGFzc2VkIGEgcGF0aCBzdHJpbmcsIGNvbnZlcnQg
dGhhdCBpbnRvIGFuIG9iamVjdC4KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwganVzdCBkZWZh
dWx0IHRvIHRoZSBzdGFuZGFyZCBjbGFzcy4KLSAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uQ2xh
c3M7Ci0gICAgICAgICAgICBpZiAocGF0aCkgewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIg
PSBkYXRhLmtleXdvcmRzLmNvbnRyb2xsZXI7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyID0g
Y29udHJvbGxlciAmJiBjb250cm9sbGVyLmNvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICBjb2xs
ZWN0aW9uQ2xhc3MgPSBoYW5kbGViYXJzR2V0KHRoaXMsIHBhdGgsIG9wdGlvbnMpIHx8IGNvbnRh
aW5lci5sb29rdXBGYWN0b3J5KCd2aWV3OicgKyBwYXRoKTsKLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoZm10KCIlQCAjY29sbGVjdGlvbjogQ291bGQgbm90IGZpbmQgY29sbGVjdGlvbiBj
bGFzcyAlQCIsIFtkYXRhLnZpZXcsIHBhdGhdKSwgISFjb2xsZWN0aW9uQ2xhc3MpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb2xsZWN0aW9uQ2xhc3MgPSBDb2xsZWN0
aW9uVmlldzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGhhc2ggPSBvcHRpb25z
Lmhhc2gsIGl0ZW1IYXNoID0ge30sIG1hdGNoOwotCi0gICAgICAgICAgICAvLyBFeHRyYWN0IGl0
ZW0gdmlldyBjbGFzcyBpZiBwcm92aWRlZCBlbHNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIGNs
YXNzCi0gICAgICAgICAgICB2YXIgY29sbGVjdGlvblByb3RvdHlwZSA9IGNvbGxlY3Rpb25DbGFz
cy5wcm90bygpLCBpdGVtVmlld0NsYXNzOwotCi0gICAgICAgICAgICBpZiAoaGFzaC5pdGVtVmll
dykgewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBkYXRhLmtleXdvcmRzLmNvbnRyb2xs
ZXI7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdZb3Ugc3BlY2lmaWVkIGFuIGl0ZW1W
aWV3LCBidXQgdGhlIGN1cnJlbnQgY29udGV4dCBoYXMgbm8gJyArCi0gICAgICAgICAgICAgICAg
J2NvbnRhaW5lciB0byBsb29rIHRoZSBpdGVtVmlldyB1cCBpbi4gVGhpcyBwcm9iYWJseSBtZWFu
cyAnICsKLSAgICAgICAgICAgICAgICAndGhhdCB5b3UgY3JlYXRlZCBhIHZpZXcgbWFudWFsbHks
IGluc3RlYWQgb2YgdGhyb3VnaCB0aGUgJyArCi0gICAgICAgICAgICAgICAgJ2NvbnRhaW5lci4g
SW5zdGVhZCwgdXNlIGNvbnRhaW5lci5sb29rdXAoInZpZXc6dmlld05hbWUiKSwgJyArCi0gICAg
ICAgICAgICAgICAgJ3doaWNoIHdpbGwgcHJvcGVybHkgaW5zdGFudGlhdGUgeW91ciB2aWV3Lics
Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlciAmJiBjb250cm9sbGVyLmNvbnRhaW5lcik7Ci0g
ICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udHJvbGxlci5jb250YWluZXI7Ci0gICAgICAg
ICAgICAgICAgaXRlbVZpZXdDbGFzcyA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCd2aWV3Oicg
KyBoYXNoLml0ZW1WaWV3KTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1lvdSBzcGVj
aWZpZWQgdGhlIGl0ZW1WaWV3ICcgKyBoYXNoLml0ZW1WaWV3ICsgIiwgYnV0IGl0IHdhcyAiICsK
LSAgICAgICAgICAgICAgICAibm90IGZvdW5kIGF0ICIgKyBjb250YWluZXIuZGVzY3JpYmUoInZp
ZXc6IiArIGhhc2guaXRlbVZpZXcpICsKLSAgICAgICAgICAgICAgICAiIChhbmQgaXQgd2FzIG5v
dCByZWdpc3RlcmVkIGluIHRoZSBjb250YWluZXIpIiwgISFpdGVtVmlld0NsYXNzKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaGFzaC5pdGVtVmlld0NsYXNzKSB7Ci0gICAgICAgICAgICAgICAg
aXRlbVZpZXdDbGFzcyA9IGhhbmRsZWJhcnNHZXQoY29sbGVjdGlvblByb3RvdHlwZSwgaGFzaC5p
dGVtVmlld0NsYXNzLCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaXRlbVZpZXdDbGFzcyA9IGNvbGxlY3Rpb25Qcm90b3R5cGUuaXRlbVZpZXdDbGFzczsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiJUAgI2NvbGxl
Y3Rpb246IENvdWxkIG5vdCBmaW5kIGl0ZW1WaWV3Q2xhc3MgJUAiLCBbZGF0YS52aWV3LCBpdGVt
Vmlld0NsYXNzXSksICEhaXRlbVZpZXdDbGFzcyk7Ci0KLSAgICAgICAgICAgIGRlbGV0ZSBoYXNo
Lml0ZW1WaWV3Q2xhc3M7Ci0gICAgICAgICAgICBkZWxldGUgaGFzaC5pdGVtVmlldzsKLQotICAg
ICAgICAgICAgLy8gR28gdGhyb3VnaCBvcHRpb25zIHBhc3NlZCB0byB0aGUge3tjb2xsZWN0aW9u
fX0gaGVscGVyIGFuZCBleHRyYWN0IG9wdGlvbnMKLSAgICAgICAgICAgIC8vIHRoYXQgY29uZmln
dXJlIGl0ZW0gdmlld3MgaW5zdGVhZCBvZiB0aGUgY29sbGVjdGlvbiBpdHNlbGYuCi0gICAgICAg
ICAgICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKLSAgICAgICAgICAgICAgICBpZiAoaGFzaC5o
YXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHByb3Au
bWF0Y2goL15pdGVtKC4pKC4qKSQvKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gg
JiYgcHJvcCAhPT0gJ2l0ZW1Db250cm9sbGVyJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ29udmVydCBpdGVtU2hvdWxkRm9vIC0+IHNob3VsZEZvbwotICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbUhhc2hbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSArIG1hdGNoWzJdXSA9IGhhc2hb
cHJvcF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgZnJvbSBoYXNoIGFzIHRo
aXMgd2lsbCBlbmQgdXAgZ2V0dGluZyBwYXNzZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB7e3ZpZXd9fSBoZWxwZXIgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGhhc2hbcHJvcF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmbikgewotICAgICAgICAgICAg
ICAgIGl0ZW1IYXNoLnRlbXBsYXRlID0gZm47Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlv
bnMuZm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBlbXB0eVZpZXdDbGFzczsK
LSAgICAgICAgICAgIGlmIChpbnZlcnNlICYmIGludmVyc2UgIT09IEVtYmVySGFuZGxlYmFycy5W
TS5ub29wKSB7Ci0gICAgICAgICAgICAgICAgZW1wdHlWaWV3Q2xhc3MgPSBnZXQoY29sbGVjdGlv
blByb3RvdHlwZSwgJ2VtcHR5Vmlld0NsYXNzJyk7Ci0gICAgICAgICAgICAgICAgZW1wdHlWaWV3
Q2xhc3MgPSBlbXB0eVZpZXdDbGFzcy5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICB0ZW1w
bGF0ZTogaW52ZXJzZSwKLSAgICAgICAgICAgICAgICAgICAgdGFnTmFtZTogaXRlbUhhc2gudGFn
TmFtZQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNoLmVt
cHR5Vmlld0NsYXNzKSB7Ci0gICAgICAgICAgICAgICAgZW1wdHlWaWV3Q2xhc3MgPSBoYW5kbGVi
YXJzR2V0KHRoaXMsIGhhc2guZW1wdHlWaWV3Q2xhc3MsIG9wdGlvbnMpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGVtcHR5Vmlld0NsYXNzKSB7Ci0gICAgICAgICAgICAgICAgaGFz
aC5lbXB0eVZpZXcgPSBlbXB0eVZpZXdDbGFzczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGhhc2gua2V5d29yZCkgewotICAgICAgICAgICAgICAgIGl0ZW1IYXNoLl9jb250ZXh0
ID0gdGhpczsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaXRlbUhhc2gu
X2NvbnRleHQgPSBhbGlhcygnY29udGVudCcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgdmlld09wdGlvbnMgPSBWaWV3SGVscGVyLnByb3BlcnRpZXNGcm9tSFRNTE9wdGlvbnMo
ewotICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAgICAgaGFzaDogaXRl
bUhhc2ggCi0gICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgIGhhc2guaXRlbVZpZXdD
bGFzcyA9IGl0ZW1WaWV3Q2xhc3MuZXh0ZW5kKHZpZXdPcHRpb25zKTsKLQotICAgICAgICAgICAg
b3B0aW9ucy5oZWxwZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8ICdjb2xsZWN0aW9uJzsK
LQotICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMudmlldy5jYWxsKHRoaXMsIGNvbGxlY3Rpb25D
bGFzcywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVs
dCJdID0gY29sbGVjdGlvbkhlbHBlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRs
ZWJhcnMvaGVscGVycy9kZWJ1ZyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1l
dGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2xvZ2dlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9n
ZXQiLCAiZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qanNoaW50IGRlYnVnOnRydWUqLwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5k
bGViYXJzCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuRkVBVFVSRVMsCi0gICAgICAgIHZhciBp
bnNwZWN0ID0gX19kZXBlbmRlbmN5Ml9fLmluc3BlY3Q7Ci0gICAgICAgIHZhciBMb2dnZXIgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRl
bmN5NF9fLmdldDsKLSAgICAgICAgdmFyIG5vcm1hbGl6ZVBhdGggPSBfX2RlcGVuZGVuY3k1X18u
bm9ybWFsaXplUGF0aDsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVuY3k1
X18uaGFuZGxlYmFyc0dldDsKLQotICAgICAgICB2YXIgYV9zbGljZSA9IFtdLnNsaWNlOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBgbG9nYCBhbGxvd3MgeW91IHRvIG91dHB1dCB0aGUg
dmFsdWUgb2YgdmFyaWFibGVzIGluIHRoZSBjdXJyZW50IHJlbmRlcmluZwotICAgICAgICAgICAg
ICBjb250ZXh0LiBgbG9nYCBhbHNvIGFjY2VwdHMgcHJpbWl0aXZlIHR5cGVzIHN1Y2ggYXMgc3Ry
aW5ncyBvciBudW1iZXJzLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAg
ICAgICAge3tsb2cgIm15VmFyaWFibGU6IiBteVZhcmlhYmxlIH19Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEBtZXRob2QgbG9nCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIu
SGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0
eQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbG9nSGVscGVyKCkgewotICAgICAg
ICAgICAgdmFyIHBhcmFtcyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKSwKLSAgICAg
ICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLAotICAgICAg
ICAgICAgbG9nZ2VyID0gTG9nZ2VyLmxvZywKLSAgICAgICAgICAgIHZhbHVlcyA9IFtdLAotICAg
ICAgICAgICAgYWxsb3dQcmltaXRpdmVzID0gdHJ1ZTsKLQotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgdHlw
ZSA9IG9wdGlvbnMudHlwZXNbaV07Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ0lE
JyB8fCAhYWxsb3dQcmltaXRpdmVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0
ID0gKG9wdGlvbnMuY29udGV4dHMgJiYgb3B0aW9ucy5jb250ZXh0c1tpXSkgfHwgdGhpcywKLSAg
ICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgoY29udGV4dCwgcGFy
YW1zW2ldLCBvcHRpb25zLmRhdGEpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxp
emVkLnBhdGggPT09ICd0aGlzJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1
c2gobm9ybWFsaXplZC5yb290KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGhhbmRsZWJhcnNHZXQobm9ybWFsaXplZC5y
b290LCBub3JtYWxpemVkLnBhdGgsIG9wdGlvbnMpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNo
KHBhcmFtc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBsb2dnZXIuYXBwbHkobG9nZ2VyLCB2YWx1ZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIGBkZWJ1Z2dlcmAgc3RhdGVtZW50IGluIHRo
ZSBjdXJyZW50IGNvbnRleHQuCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICB7e2RlYnVnZ2VyfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QmVmb3JlIGludm9raW5nIHRoZSBgZGVidWdnZXJgIHN0YXRlbWVudCwgdGhlcmUKLSAgICAgICAg
ICAgICAgYXJlIGEgZmV3IGhlbHBmdWwgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlCi0gICAgICAg
ICAgICAgIGJvZHkgb2YgdGhpcyBoZWxwZXIgdGhhdCB5b3UgY2FuIGluc3BlY3Qgd2hpbGUKLSAg
ICAgICAgICAgICAgZGVidWdnaW5nIHRoYXQgZGVzY3JpYmUgaG93IGFuZCB3aGVyZSB0aGlzCi0g
ICAgICAgICAgICAgIGhlbHBlciB3YXMgaW52b2tlZDoKLQotICAgICAgICAgICAgICAtIHRlbXBs
YXRlQ29udGV4dDogdGhpcyBpcyBtb3N0IGxpa2VseSBhIGNvbnRyb2xsZXIKLSAgICAgICAgICAg
ICAgICBmcm9tIHdoaWNoIHRoaXMgdGVtcGxhdGUgbG9va3MgdXAgLyBkaXNwbGF5cyBwcm9wZXJ0
aWVzCi0gICAgICAgICAgICAgIC0gdHlwZU9mVGVtcGxhdGVDb250ZXh0OiBhIHN0cmluZyBkZXNj
cmlwdGlvbiBvZgotICAgICAgICAgICAgICAgIHdoYXQgdGhlIHRlbXBsYXRlQ29udGV4dCBpcwot
Ci0gICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UncmUgd29uZGVyaW5nIHdoeSBhIHZh
bHVlIGB7e2Zvb319YAotICAgICAgICAgICAgICBpc24ndCByZW5kZXJpbmcgYXMgZXhwZWN0ZWQg
d2l0aGluIGEgdGVtcGxhdGUsIHlvdQotICAgICAgICAgICAgICBjb3VsZCBwbGFjZSBhIGB7e2Rl
YnVnZ2VyfX1gIHN0YXRlbWVudCwgYW5kIHdoZW4KLSAgICAgICAgICAgICAgdGhlIGBkZWJ1Z2dl
cjtgIGJyZWFrcG9pbnQgaXMgaGl0LCB5b3UgY2FuIGluc3BlY3QKLSAgICAgICAgICAgICAgYHRl
bXBsYXRlQ29udGV4dGAsIGRldGVybWluZSBpZiBpdCdzIHRoZSBvYmplY3QgeW91Ci0gICAgICAg
ICAgICAgIGV4cGVjdCwgYW5kL29yIGV2YWx1YXRlIGV4cHJlc3Npb25zIGluIHRoZSBjb25zb2xl
Ci0gICAgICAgICAgICAgIHRvIHBlcmZvcm0gcHJvcGVydHkgbG9va3VwcyBvbiB0aGUgYHRlbXBs
YXRlQ29udGV4dGA6Ci0KLSAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgICAgPiB0ZW1w
bGF0ZUNvbnRleHQuZ2V0KCdmb28nKSAvLyAtPiAiPHZhbHVlIG9mIHt7Zm9vfX0+IgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGRlYnVnZ2VyCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBwcm9wZXJ0eQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGVidWdn
ZXJIZWxwZXIob3B0aW9ucykgewotCi0gICAgICAgICAgICAvLyBUaGVzZSBhcmUgaGVscGZ1bCB2
YWx1ZXMgeW91IGNhbiBpbnNwZWN0IHdoaWxlIGRlYnVnZ2luZy4KLSAgICAgICAgICAgIHZhciB0
ZW1wbGF0ZUNvbnRleHQgPSB0aGlzOwotICAgICAgICAgICAgdmFyIHR5cGVPZlRlbXBsYXRlQ29u
dGV4dCA9IGluc3BlY3QodGVtcGxhdGVDb250ZXh0KTsKLSAgICAgICAgICAgIEVtYmVyLkxvZ2dl
ci5pbmZvKCdVc2UgYHRoaXNgIHRvIGFjY2VzcyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyB0
ZW1wbGF0ZS4nKTsKLQotICAgICAgICAgICAgZGVidWdnZXI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBfX2V4cG9ydHNfXy5sb2dIZWxwZXIgPSBsb2dIZWxwZXI7Ci0gICAgICAgIF9fZXhwb3J0c19f
LmRlYnVnZ2VySGVscGVyID0gZGVidWdnZXJIZWxwZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1oYW5kbGViYXJzL2hlbHBlcnMvZWFjaCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwg
ImVtYmVyLWhhbmRsZWJhcnMtY29tcGlsZXIiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQi
LCAiZW1iZXItdmlld3Mvdmlld3MvY29sbGVjdGlvbl92aWV3IiwgImVtYmVyLW1ldGFsL2JpbmRp
bmciLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsICJlbWJlci1ydW50aW1lL2Nv
bnRyb2xsZXJzL2FycmF5X2NvbnRyb2xsZXIiLCAiZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXki
LCAiZW1iZXItcnVudGltZS9jb3B5IiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLW1l
dGFsL2V2ZW50cyIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJlbWJlci1tZXRhbC9jb21wdXRl
ZCIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1oYW5kbGViYXJzL3ZpZXdzL21ldGFt
b3JwaF92aWV3IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5k
ZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThf
XywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBf
X2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2Rl
cGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2RlcGVuZGVuY3kxN19fLCBfX2V4cG9y
dHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMK
LSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQ7LCBFbWJlci5LCi0gICAgICAgIC8vIHZh
ciBlbWJlckFzc2VydCA9IEVtYmVyLmFzc2VydCwKLSAgICAgICAgdmFyIEsgPSBFbWJlci5LOwot
Ci0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSBFbWJlckhhbmRsZWJhcnMuaGVscGVyczsKLQotICAg
ICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5M19fLmZtdDsKLSAgICAgICAgdmFyIGdldCA9IF9f
ZGVwZW5kZW5jeTRfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k1X18uc2V0
OwotICAgICAgICB2YXIgQ29sbGVjdGlvblZpZXcgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIEJpbmRpbmcgPSBfX2RlcGVuZGVuY3k3X18uQmluZGluZzsKLSAgICAg
ICAgdmFyIENvbnRyb2xsZXJNaXhpbiA9IF9fZGVwZW5kZW5jeThfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgQXJyYXlDb250cm9sbGVyID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBFbWJlckFycmF5ID0gX19kZXBlbmRlbmN5MTBfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgY29weSA9IF9fZGVwZW5kZW5jeTExX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IHJ1biA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIG9uID0gX19k
ZXBlbmRlbmN5MTNfXy5vbjsKLSAgICAgICAgdmFyIGhhbmRsZWJhcnNHZXQgPSBfX2RlcGVuZGVu
Y3kxNF9fLmhhbmRsZWJhcnNHZXQ7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5j
eTE1X18uY29tcHV0ZWQ7Ci0KLSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5
MTZfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRl
bmN5MTZfXy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIGFkZEJlZm9yZU9ic2VydmVyID0g
X19kZXBlbmRlbmN5MTZfXy5hZGRCZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZUJl
Zm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTZfXy5yZW1vdmVCZWZvcmVPYnNlcnZlcjsKLQot
ICAgICAgICB2YXIgX01ldGFtb3JwaCA9IF9fZGVwZW5kZW5jeTE3X18uX01ldGFtb3JwaDsKLSAg
ICAgICAgdmFyIF9NZXRhbW9ycGhWaWV3ID0gX19kZXBlbmRlbmN5MTdfXy5fTWV0YW1vcnBoVmll
dzsKLQotICAgICAgICB2YXIgRWFjaFZpZXcgPSBDb2xsZWN0aW9uVmlldy5leHRlbmQoX01ldGFt
b3JwaCwgewotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaXRlbUNvbnRyb2xsZXIgPSBnZXQodGhpcywgJ2l0ZW1Db250cm9sbGVyJyk7Ci0gICAg
ICAgICAgICAgICAgdmFyIGJpbmRpbmc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXRlbUNvbnRy
b2xsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBnZXQodGhpcywg
J2NvbnRyb2xsZXIuY29udGFpbmVyJykubG9va3VwRmFjdG9yeSgnY29udHJvbGxlcjphcnJheScp
LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfaXNWaXJ0dWFsOiB0cnVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udHJvbGxlcjogZ2V0KHRoaXMsICdjb250cm9s
bGVyJyksCi0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29udHJvbGxlcjogaXRlbUNvbnRy
b2xsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGdldCh0aGlzLCAnY29udHJv
bGxlcicpLAotICAgICAgICAgICAgICAgICAgICAgICAgX2VhY2hWaWV3OiB0aGlzCi0gICAgICAg
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUNvbnRl
bnRPYnNlcnZlcnMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQodGhp
cywgJ2NvbnRlbnQnLCBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcgPSBuZXcgQmluZGluZygnY29udGVudCcsICdfZWFjaFZpZXcuZGF0YVNvdXJjZScpLm9uZVdh
eSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5jb25uZWN0KGNvbnRyb2xsZXIp
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBzZXQodGhp
cywgJ19hcnJheUNvbnRyb2xsZXInLCBjb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVDb250ZW50T2JzZXJ2ZXJzKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZyA9IG5ldyBCaW5kaW5n
KCdjb250ZW50JywgJ2RhdGFTb3VyY2UnKS5vbmVXYXkoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJpbmRpbmcuY29ubmVjdCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKCk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfYXNzZXJ0QXJyYXlMaWtlOiBmdW5jdGlvbihj
b250ZW50KSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiVGhlIHZhbHVlIHRo
YXQgI2VhY2ggbG9vcHMgb3ZlciBtdXN0IGJlIGFuIEFycmF5LiBZb3UgIiArCi0gICAgICAgICAg
ICAgICAgInBhc3NlZCAlQCwgYnV0IGl0IHNob3VsZCBoYXZlIGJlZW4gYW4gQXJyYXlDb250cm9s
bGVyIiwKLSAgICAgICAgICAgICAgICBbY29udGVudC5jb25zdHJ1Y3Rvcl0pLAotICAgICAgICAg
ICAgICAgICFDb250cm9sbGVyTWl4aW4uZGV0ZWN0KGNvbnRlbnQpIHx8Ci0gICAgICAgICAgICAg
ICAgKGNvbnRlbnQgJiYgY29udGVudC5pc0dlbmVyYXRlZCkgfHwKLSAgICAgICAgICAgICAgICBj
b250ZW50IGluc3RhbmNlb2YgQXJyYXlDb250cm9sbGVyKTsKLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoZm10KCJUaGUgdmFsdWUgdGhhdCAjZWFjaCBsb29wcyBvdmVyIG11c3QgYmUgYW4g
QXJyYXkuIFlvdSBwYXNzZWQgJUAiLCBbKENvbnRyb2xsZXJNaXhpbi5kZXRlY3QoY29udGVudCkg
JiYgY29udGVudC5nZXQoJ21vZGVsJykgIT09IHVuZGVmaW5lZCkgPyBmbXQoIiclQCcgKHdyYXBw
ZWQgaW4gJUApIiwgW2NvbnRlbnQuZ2V0KCdtb2RlbCcpLCBjb250ZW50XSkgOiBjb250ZW50XSks
IEVtYmVyQXJyYXkuZGV0ZWN0KGNvbnRlbnQpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGRpc2FibGVDb250ZW50T2JzZXJ2ZXJzOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgIHJlbW92ZUJlZm9yZU9ic2VydmVyKHRoaXMsICdjb250ZW50JywgbnVsbCwgJ19j
b250ZW50V2lsbENoYW5nZScpOwotICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyKHRoaXMs
ICdjb250ZW50JywgbnVsbCwgJ19jb250ZW50RGlkQ2hhbmdlJyk7Ci0KLSAgICAgICAgICAgICAg
ICBjYWxsYmFjay5jYWxsKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgYWRkQmVmb3JlT2JzZXJ2
ZXIodGhpcywgJ2NvbnRlbnQnLCBudWxsLCAnX2NvbnRlbnRXaWxsQ2hhbmdlJyk7Ci0gICAgICAg
ICAgICAgICAgYWRkT2JzZXJ2ZXIodGhpcywgJ2NvbnRlbnQnLCBudWxsLCAnX2NvbnRlbnREaWRD
aGFuZ2UnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3M6IF9N
ZXRhbW9ycGhWaWV3LAotICAgICAgICAgICAgZW1wdHlWaWV3Q2xhc3M6IF9NZXRhbW9ycGhWaWV3
LAotCi0gICAgICAgICAgICBjcmVhdGVDaGlsZFZpZXc6IGZ1bmN0aW9uKHZpZXcsIGF0dHJzKSB7
Ci0gICAgICAgICAgICAgICAgdmlldyA9IHRoaXMuX3N1cGVyKHZpZXcsIGF0dHJzKTsKLQotICAg
ICAgICAgICAgICAgIC8vIEF0IHRoZSBtb21lbnQsIGlmIGEgY29udGFpbmVyIHZpZXcgc3ViY2xh
c3Mgd2FudHMKLSAgICAgICAgICAgICAgICAvLyB0byBpbnNlcnQga2V5d29yZHMsIGl0IGlzIHJl
c3BvbnNpYmxlIGZvciBjbG9uaW5nCi0gICAgICAgICAgICAgICAgLy8gdGhlIGtleXdvcmRzIGhh
c2guIFRoaXMgd2lsbCBiZSBmaXhlZCBtb21lbnRhcmlseS4KLSAgICAgICAgICAgICAgICB2YXIg
a2V5d29yZCA9IGdldCh0aGlzLCAna2V5d29yZCcpOwotICAgICAgICAgICAgICAgIHZhciBjb250
ZW50ID0gZ2V0KHZpZXcsICdjb250ZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoa2V5d29y
ZCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldCh2aWV3LCAndGVtcGxhdGVE
YXRhJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGNvcHkoZGF0YSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGEua2V5d29yZHMgPSB2aWV3LmNsb25lS2V5d29yZHMoKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0KHZpZXcsICd0ZW1wbGF0ZURhdGEnLCBkYXRhKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRvIG5vdCBiaW5kLCBiZWNhdXNlIHRo
ZSBgY29udGVudGAgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gYSAjZWFjaCBpdGVtIGNhbm5v
dCBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGRhdGEua2V5d29yZHNba2V5d29yZF0gPSBj
b250ZW50OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIHt7I2Vh
Y2h9fSBpcyBsb29waW5nIG92ZXIgYW4gYXJyYXkgb2YgY29udHJvbGxlcnMsCi0gICAgICAgICAg
ICAgICAgLy8gcG9pbnQgZWFjaCBjaGlsZCB2aWV3IGF0IHRoZWlyIHJlc3BlY3RpdmUgY29udHJv
bGxlci4KLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmlzQ29udHJvbGxl
cikgewotICAgICAgICAgICAgICAgICAgICBzZXQodmlldywgJ2NvbnRyb2xsZXInLCBjb250ZW50
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5fc3VwZXIoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGFycmF5Q29udHJv
bGxlciA9IGdldCh0aGlzLCAnX2FycmF5Q29udHJvbGxlcicpOwotCi0gICAgICAgICAgICAgICAg
aWYgKGFycmF5Q29udHJvbGxlcikgewotICAgICAgICAgICAgICAgICAgICBhcnJheUNvbnRyb2xs
ZXIuZGVzdHJveSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvLyBEZWZlYXR1
cmVpZnkgZG9lc24ndCBzZWVtIHRvIGxpa2UgbmVzdGVkIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8g
YmUgcmVtb3ZlZAotICAgICAgICBmdW5jdGlvbiBfYWRkTWV0YW1vcnBoQ2hlY2soKSB7Ci0gICAg
ICAgICAgICBFYWNoVmlldy5yZW9wZW4oewotICAgICAgICAgICAgICAgIF9jaGVja01ldGFtb3Jw
aDogb24oJ2RpZEluc2VydEVsZW1lbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJUaGUgbWV0YW1vcnBoIHRhZ3MsICIgKwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLm1vcnBoLnN0YXJ0ICsgIiBhbmQgIiArIHRoaXMubW9ycGguZW5kICsKLSAgICAg
ICAgICAgICAgICAgICAgIiwgaGF2ZSBkaWZmZXJlbnQgcGFyZW50cy5cblRoZSBicm93c2VyIGhh
cyBmaXhlZCB5b3VyIHRlbXBsYXRlIHRvIG91dHB1dCB2YWxpZCBIVE1MIChmb3IgZXhhbXBsZSwg
Y2hlY2sgdGhhdCB5b3UgaGF2ZSBwcm9wZXJseSBjbG9zZWQgYWxsIHRhZ3MgYW5kIGhhdmUgdXNl
ZCBhIFRCT0RZIHRhZyB3aGVuIGNyZWF0aW5nIGEgdGFibGUgd2l0aCAne3sjZWFjaH19JykiLAot
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggdGhpcy5tb3JwaC5z
dGFydCApLnBhcmVudE5vZGUgPT09Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCB0aGlzLm1vcnBoLmVuZCApLnBhcmVudE5vZGUKLSAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyB1bnRpbCBlbWJlci1kZWJ1ZyBpcyBlczZlZAotICAgICAgICB2YXIgcnVuSW5E
ZWJ1ZyA9IGZ1bmN0aW9uKGYpIHsKLSAgICAgICAgICAgIGYoKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgcnVuSW5EZWJ1ZyggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBfYWRkTWV0YW1vcnBoQ2hl
Y2soKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIEdyb3VwZWRFYWNoID0gRW1iZXJIYW5k
bGViYXJzLkdyb3VwZWRFYWNoID0gZnVuY3Rpb24oY29udGV4dCwgcGF0aCwgb3B0aW9ucykgewot
ICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgbm9ybWFsaXplZCA9IEVt
YmVySGFuZGxlYmFycy5ub3JtYWxpemVQYXRoKGNvbnRleHQsIHBhdGgsIG9wdGlvbnMuZGF0YSk7
Ci0KLSAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICB0aGlz
LnBhdGggPSBwYXRoOwotICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICAg
ICAgICAgIHRoaXMudGVtcGxhdGUgPSBvcHRpb25zLmZuOwotICAgICAgICAgICAgdGhpcy5jb250
YWluaW5nVmlldyA9IG9wdGlvbnMuZGF0YS52aWV3OwotICAgICAgICAgICAgdGhpcy5ub3JtYWxp
emVkUm9vdCA9IG5vcm1hbGl6ZWQucm9vdDsKLSAgICAgICAgICAgIHRoaXMubm9ybWFsaXplZFBh
dGggPSBub3JtYWxpemVkLnBhdGg7Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmxv
b2t1cENvbnRlbnQoKTsKLQotICAgICAgICAgICAgdGhpcy5hZGRDb250ZW50T2JzZXJ2ZXJzKCk7
Ci0gICAgICAgICAgICB0aGlzLmFkZEFycmF5T2JzZXJ2ZXJzKCk7Ci0KLSAgICAgICAgICAgIHRo
aXMuY29udGFpbmluZ1ZpZXcub24oJ3dpbGxDbGVhclJlbmRlcicsIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHNlbGYuZGVzdHJveSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgR3JvdXBlZEVhY2gucHJvdG90eXBlID0gewotICAgICAgICAgICAgY29udGVu
dFdpbGxDaGFuZ2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQXJy
YXlPYnNlcnZlcnMoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNvbnRlbnREaWRD
aGFuZ2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMu
bG9va3VwQ29udGVudCgpOwotICAgICAgICAgICAgICAgIHRoaXMuYWRkQXJyYXlPYnNlcnZlcnMo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlcmVuZGVyQ29udGFpbmluZ1ZpZXcoKTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNvbnRlbnRBcnJheVdpbGxDaGFuZ2U6IEssCi0KLSAg
ICAgICAgICAgIGNvbnRlbnRBcnJheURpZENoYW5nZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5yZXJlbmRlckNvbnRhaW5pbmdWaWV3KCk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBsb29rdXBDb250ZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlYmFyc0dldCh0aGlzLm5vcm1hbGl6ZWRSb290LCB0aGlzLm5vcm1hbGl6ZWRQ
YXRoLCB0aGlzLm9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgYWRkQXJy
YXlPYnNlcnZlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250
ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQuYWRkQXJyYXlPYnNlcnZlcih0aGlzLCB7Ci0g
ICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICdjb250ZW50QXJyYXlXaWxsQ2hhbmdlJywK
LSAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlOiAnY29udGVudEFycmF5RGlkQ2hhbmdlJwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVtb3Zl
QXJyYXlPYnNlcnZlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5j
b250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQucmVtb3ZlQXJyYXlPYnNlcnZlcih0aGlz
LCB7Ci0gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICdjb250ZW50QXJyYXlXaWxsQ2hh
bmdlJywKLSAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlOiAnY29udGVudEFycmF5RGlkQ2hh
bmdlJwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
YWRkQ29udGVudE9ic2VydmVyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYWRkQmVm
b3JlT2JzZXJ2ZXIodGhpcy5ub3JtYWxpemVkUm9vdCwgdGhpcy5ub3JtYWxpemVkUGF0aCwgdGhp
cywgdGhpcy5jb250ZW50V2lsbENoYW5nZSk7Ci0gICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIo
dGhpcy5ub3JtYWxpemVkUm9vdCwgdGhpcy5ub3JtYWxpemVkUGF0aCwgdGhpcywgdGhpcy5jb250
ZW50RGlkQ2hhbmdlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlbW92ZUNvbnRl
bnRPYnNlcnZlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJlbW92ZUJlZm9yZU9i
c2VydmVyKHRoaXMubm9ybWFsaXplZFJvb3QsIHRoaXMubm9ybWFsaXplZFBhdGgsIHRoaXMuY29u
dGVudFdpbGxDaGFuZ2UpOwotICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyKHRoaXMubm9y
bWFsaXplZFJvb3QsIHRoaXMubm9ybWFsaXplZFBhdGgsIHRoaXMuY29udGVudERpZENoYW5nZSk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9
IHRoaXMuY29udGVudCwKLSAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoID0gZ2V0KGNvbnRl
bnQsICdsZW5ndGgnKSwKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLAot
ICAgICAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLmRhdGEsCi0gICAgICAgICAgICAgICAgdGVt
cGxhdGUgPSB0aGlzLnRlbXBsYXRlOwotCi0gICAgICAgICAgICAgICAgZGF0YS5pbnNpZGVFYWNo
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnRMZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNvbnRlbnQub2Jq
ZWN0QXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YS5rZXl3b3Jkc1tvcHRp
b25zLmhhc2gua2V5d29yZF0gPSBjb250ZXh0OwotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0
ZShjb250ZXh0LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIAotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICByZXJlbmRlckNvbnRhaW5pbmdWaWV3OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlT25j
ZSgncmVuZGVyJywgdGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEl0
J3MgcG9zc2libGUgaXQncyBiZWVuIGRlc3Ryb3llZCBhZnRlciB3ZSBlbnF1ZXVlZCBhIHJlLXJl
bmRlciBjYWxsLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuZGVzdHJveWVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5pbmdWaWV3LnJlcmVuZGVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRo
aXMucmVtb3ZlQ29udGVudE9ic2VydmVycygpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmNv
bnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBcnJheU9ic2VydmVycygp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFRoZSBge3sjZWFjaH19YCBoZWxwZXIgbG9vcHMgb3ZlciBlbGVtZW50cyBpbiBhIGNvbGxl
Y3Rpb24sIHJlbmRlcmluZyBpdHMKLSAgICAgICAgICAgICAgYmxvY2sgb25jZSBmb3IgZWFjaCBp
dGVtLiBJdCBpcyBhbiBleHRlbnNpb24gb2YgdGhlIGJhc2UgSGFuZGxlYmFycyBge3sjZWFjaH19
YAotICAgICAgICAgICAgICBoZWxwZXI6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBEZXZlbG9wZXJzID0gW3tuYW1lOiAnWWVodWRhJ30se25hbWU6ICdUb20n
fSwge25hbWU6ICdQYXVsJ31dOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2VhY2ggRGV2ZWxvcGVyc319Ci0gICAgICAg
ICAgICAgICAge3tuYW1lfX0KLSAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgIGB7e2VhY2h9fWAgc3VwcG9ydHMgYW4gYWx0ZXJuYXRpdmUg
c3ludGF4IHdpdGggZWxlbWVudCBuYW1pbmc6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFy
cwotICAgICAgICAgICAgICB7eyNlYWNoIHBlcnNvbiBpbiBEZXZlbG9wZXJzfX0KLSAgICAgICAg
ICAgICAgICB7e3BlcnNvbi5uYW1lfX0KLSAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdoZW4gbG9vcGluZyBvdmVyIG9iamVjdHMgdGhh
dCBkbyBub3QgaGF2ZSBwcm9wZXJ0aWVzLCBge3t0aGlzfX1gIGNhbiBiZSB1c2VkCi0gICAgICAg
ICAgICAgIHRvIHJlbmRlciB0aGUgb2JqZWN0OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgRGV2ZWxvcGVyTmFtZXMgPSBbJ1llaHVkYScsICdUb20nLCAnUGF1
bCddCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3sjZWFjaCBEZXZlbG9wZXJOYW1lc319Ci0gICAgICAgICAgICAgICAge3t0
aGlzfX0KLSAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgIGBgYAotICAgICAg
ICAgICAgICAjIyMge3tlbHNlfX0gY29uZGl0aW9uCi0gICAgICAgICAgICAgIGB7eyNlYWNofX1g
IGNhbiBoYXZlIGEgbWF0Y2hpbmcgYHt7ZWxzZX19YC4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYmxv
Y2sgd2lsbCByZW5kZXIKLSAgICAgICAgICAgICAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHku
Ci0KLSAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgIHt7I2VhY2ggcGVyc29uIGluIERl
dmVsb3BlcnN9fQotICAgICAgICAgICAgICAgIHt7cGVyc29uLm5hbWV9fQotICAgICAgICAgICAg
ICB7e2Vsc2V9fQotICAgICAgICAgICAgICAgIDxwPlNvcnJ5LCBub2JvZHkgaXMgYXZhaWxhYmxl
IGZvciB0aGlzIHRhc2suPC9wPgotICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAg
ICAgYGBgCi0gICAgICAgICAgICAgICMjIyBTcGVjaWZ5aW5nIGEgVmlldyBjbGFzcyBmb3IgaXRl
bXMKLSAgICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYW4gYGl0ZW1WaWV3Q2xhc3NgIG9wdGlv
biB0aGF0IHJlZmVyZW5jZXMgYSB2aWV3IGNsYXNzCi0gICAgICAgICAgICAgIHdpdGggaXRzIG93
biBgdGVtcGxhdGVgIHlvdSBjYW4gb21pdCB0aGUgYmxvY2suCi0KLSAgICAgICAgICAgICAgVGhl
IGZvbGxvd2luZyB0ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIHt7I3ZpZXcgQXBwLk15VmlldyB9fQotICAgICAgICAgICAgICAgIHt7ZWFjaCB2
aWV3Lml0ZW1zIGl0ZW1WaWV3Q2xhc3M9IkFwcC5Bbkl0ZW1WaWV3In19Ci0gICAgICAgICAgICAg
IHt7L3ZpZXd9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbmQgYXBwbGlj
YXRpb24gY29kZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
QXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBNeVZpZXc6
IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbCi0gICAgICAg
ICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5jcmVhdGUoe25hbWU6ICdEYXZlJ30pLAotICAgICAg
ICAgICAgICAgICAgICBFbWJlci5PYmplY3QuY3JlYXRlKHtuYW1lOiAnTWFyeSd9KSwKLSAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmNyZWF0ZSh7bmFtZTogJ1NhcmEnfSkKLSAgICAg
ICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICBBcHAuQW5JdGVtVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAg
ICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJHcmVldGluZ3Mg
e3tuYW1lfX0iKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIEhUTUwgc3RydWN0dXJlIGJlbG93Ci0KLSAgICAg
ICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4K
LSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5HcmVldGluZ3MgRGF2ZTwv
ZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPkdyZWV0aW5ncyBN
YXJ5PC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+R3JlZXRp
bmdzIFNhcmE8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIElmIGFuIGBpdGVtVmlld0NsYXNzYCBpcyBkZWZpbmVkIG9uIHRoZSBo
ZWxwZXIsIGFuZCB0aGVyZWZvcmUgdGhlIGhlbHBlciBpcyBub3QKLSAgICAgICAgICAgICAgYmVp
bmcgdXNlZCBhcyBhIGJsb2NrLCBhbiBgZW1wdHlWaWV3Q2xhc3NgIGNhbiBhbHNvIGJlIHByb3Zp
ZGVkIG9wdGlvbmFsbHkuCi0gICAgICAgICAgICAgIFRoZSBgZW1wdHlWaWV3Q2xhc3NgIHdpbGwg
bWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBge3tlbHNlfX1gIGNvbmRpdGlvbgotICAgICAgICAg
ICAgICBkZXNjcmliZWQgYWJvdmUuIFRoYXQgaXMsIHRoZSBgZW1wdHlWaWV3Q2xhc3NgIHdpbGwg
cmVuZGVyIGlmIHRoZSBjb2xsZWN0aW9uCi0gICAgICAgICAgICAgIGlzIGVtcHR5LgotCi0gICAg
ICAgICAgICAgICMjIyBSZXByZXNlbnRpbmcgZWFjaCBpdGVtIHdpdGggYSBDb250cm9sbGVyLgot
ICAgICAgICAgICAgICBCeSBkZWZhdWx0IHRoZSBjb250cm9sbGVyIGxvb2t1cCB3aXRoaW4gYW4g
YHt7I2VhY2h9fWAgYmxvY2sgd2lsbCBiZQotICAgICAgICAgICAgICB0aGUgY29udHJvbGxlciBv
ZiB0aGUgdGVtcGxhdGUgd2hlcmUgdGhlIGB7eyNlYWNofX1gIHdhcyB1c2VkLiBJZiBlYWNoCi0g
ICAgICAgICAgICAgIGl0ZW0gbmVlZHMgdG8gYmUgcHJlc2VudGVkIGJ5IGEgY3VzdG9tIGNvbnRy
b2xsZXIgeW91IGNhbiBwcm92aWRlIGEKLSAgICAgICAgICAgICAgYGl0ZW1Db250cm9sbGVyYCBv
cHRpb24gd2hpY2ggcmVmZXJlbmNlcyBhIGNvbnRyb2xsZXIgYnkgbG9va3VwIG5hbWUuCi0gICAg
ICAgICAgICAgIEVhY2ggaXRlbSBpbiB0aGUgbG9vcCB3aWxsIGJlIHdyYXBwZWQgaW4gYW4gaW5z
dGFuY2Ugb2YgdGhpcyBjb250cm9sbGVyCi0gICAgICAgICAgICAgIGFuZCB0aGUgaXRlbSBpdHNl
bGYgd2lsbCBiZSBzZXQgdG8gdGhlIGBtb2RlbGAgcHJvcGVydHkgb2YgdGhhdCBjb250cm9sbGVy
LgotCi0gICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHByb3BlcnRp
ZXMgb2YgbW9kZWwgb2JqZWN0cyBuZWVkIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgICAgICAgIG9y
IHN5bnRoZXNpcyBmb3IgZGlzcGxheToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIEFwcC5EZXZlbG9wZXJDb250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29udHJv
bGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgIGlzQXZhaWxhYmxlRm9ySGlyZTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuZ2V0KCdtb2RlbC5pc0VtcGxv
eWVkJykgJiYgdGhpcy5nZXQoJ21vZGVsLmlzU2Vla2luZ1dvcmsnKTsKLSAgICAgICAgICAgICAg
ICB9LnByb3BlcnR5KCdpc0VtcGxveWVkJywgJ2lzU2Vla2luZ1dvcmsnKQotICAgICAgICAgICAg
ICB9KQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIHt7I2VhY2ggcGVyc29uIGluIGRldmVsb3BlcnMgaXRlbUNvbnRyb2xsZXI9
ImRldmVsb3BlciJ9fQotICAgICAgICAgICAgICAgIHt7cGVyc29uLm5hbWV9fSB7eyNpZiBwZXJz
b24uaXNBdmFpbGFibGVGb3JIaXJlfX1IaXJlIG1lIXt7L2lmfX0KLSAgICAgICAgICAgICAge3sv
ZWFjaH19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEVhY2ggaXRlbUNvbnRy
b2xsZXIgd2lsbCByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIg
YXMKLSAgICAgICAgICAgICAgYSBgcGFyZW50Q29udHJvbGxlcmAgcHJvcGVydHkuCi0KLSAgICAg
ICAgICAgICAgIyMjIChFeHBlcmltZW50YWwpIEdyb3VwZWQgRWFjaAotCi0gICAgICAgICAgICAg
IFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleHBlcmltZW50YWwgW2dyb3VwIGhl
bHBlcl0oaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvZ3JvdXAtaGVscGVyKSwKLSAgICAgICAg
ICAgICAgeW91IGNhbiBpbmZvcm0gSGFuZGxlYmFycyB0byByZS1yZW5kZXIgYW4gZW50aXJlIGdy
b3VwIG9mIGl0ZW1zIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgcmUtcmVuZGVyaW5nIHRoZW0g
b25lIGF0IGEgdGltZSAoaW4gdGhlIGV2ZW50IHRoYXQgdGhleSBhcmUgY2hhbmdlZCBlbiBtYXNz
ZQotICAgICAgICAgICAgICBvciBhbiBpdGVtIGlzIGFkZGVkL3JlbW92ZWQpLgotCi0gICAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjZ3JvdXB9fQotICAgICAgICAg
ICAgICAgIHt7I2VhY2ggcGVvcGxlfX0KLSAgICAgICAgICAgICAgICAgIHt7Zmlyc3ROYW1lfX0g
e3tsYXN0TmFtZX19Ci0gICAgICAgICAgICAgICAge3svZWFjaH19Ci0gICAgICAgICAgICAgIHt7
L2dyb3VwfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyBjYW4gYmUg
ZmFzdGVyIHRoYW4gdGhlIG5vcm1hbCB3YXkgdGhhdCBIYW5kbGViYXJzIHJlLXJlbmRlcnMgaXRl
bXMKLSAgICAgICAgICAgICAgaW4gc29tZSBjYXNlcy4KLQotICAgICAgICAgICAgICBJZiBmb3Ig
c29tZSByZWFzb24geW91IGhhdmUgYSBncm91cCB3aXRoIG1vcmUgdGhhbiBvbmUgYCNlYWNoYCwg
eW91IGNhbiBtYWtlCi0gICAgICAgICAgICAgIG9uZSBvZiB0aGUgY29sbGVjdGlvbnMgYmUgdXBk
YXRlZCBpbiBub3JtYWwgKG5vbi1ncm91cGVkKSBmYXNoaW9uIGJ5IHNldHRpbmcKLSAgICAgICAg
ICAgICAgdGhlIG9wdGlvbiBgZ3JvdXBlZFJvd3M9dHJ1ZWAgKGNvdW50ZXItaW50dWl0aXZlLCBJ
IGtub3cpLgotCi0gICAgICAgICAgICAgIEZvciBleGFtcGxlLAotCi0gICAgICAgICAgICAgIGBg
YGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tkZWFsZXJzaGlwTmFtZX19Ci0KLSAgICAgICAg
ICAgICAge3sjZ3JvdXB9fQotICAgICAgICAgICAgICAgIHt7I2VhY2ggZGVhbGVyc319Ci0gICAg
ICAgICAgICAgICAgICB7e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fQotICAgICAgICAgICAgICAg
IHt7L2VhY2h9fQotCi0gICAgICAgICAgICAgICAge3sjZWFjaCBjYXIgaW4gY2FycyBncm91cGVk
Um93cz10cnVlfX0KLSAgICAgICAgICAgICAgICAgIHt7Y2FyLm1ha2V9fSB7e2Nhci5tb2RlbH19
IHt7Y2FyLmNvbG9yfX0KLSAgICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAgICAgICAgICAg
e3svZ3JvdXB9fQotICAgICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAgQW55IGNoYW5nZSB0
byBgZGVhbGVyc2hpcE5hbWVgIG9yIHRoZSBgZGVhbGVyc2AgY29sbGVjdGlvbiB3aWxsIGNhdXNl
IHRoZQotICAgICAgICAgICAgICBlbnRpcmUgZ3JvdXAgdG8gYmUgcmUtcmVuZGVyZWQuIEhvd2V2
ZXIsIGNoYW5nZXMgdG8gdGhlIGBjYXJzYCBjb2xsZWN0aW9uCi0gICAgICAgICAgICAgIHdpbGwg
YmUgcmUtcmVuZGVyZWQgaW5kaXZpZHVhbGx5IChhcyBub3JtYWwpLgotCi0gICAgICAgICAgICAg
IE5vdGUgdGhhdCBgZ3JvdXBgIGJlaGF2aW9yIGlzIGFsc28gZGlzYWJsZWQgYnkgc3BlY2lmeWlu
ZyBhbiBgaXRlbVZpZXdDbGFzc2AuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBlYWNoCi0gICAg
ICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBw
YXJhbSBbbmFtZV0ge1N0cmluZ30gbmFtZSBmb3IgaXRlbSAodXNlZCB3aXRoIGBpbmApCi0gICAg
ICAgICAgICAgIEBwYXJhbSBbcGF0aF0ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICBAcGFy
YW0gW29wdGlvbnNdIHtPYmplY3R9IEhhbmRsZWJhcnMga2V5L3ZhbHVlIHBhaXJzIG9mIG9wdGlv
bnMKLSAgICAgICAgICAgICAgQHBhcmFtIFtvcHRpb25zLml0ZW1WaWV3Q2xhc3NdIHtTdHJpbmd9
IGEgcGF0aCB0byBhIHZpZXcgY2xhc3MgdXNlZCBmb3IgZWFjaCBpdGVtCi0gICAgICAgICAgICAg
IEBwYXJhbSBbb3B0aW9ucy5pdGVtQ29udHJvbGxlcl0ge1N0cmluZ30gbmFtZSBvZiBhIGNvbnRy
b2xsZXIgdG8gYmUgY3JlYXRlZCBmb3IgZWFjaCBpdGVtCi0gICAgICAgICAgICAgIEBwYXJhbSBb
b3B0aW9ucy5ncm91cGVkUm93c10ge2Jvb2xlYW59IGVuYWJsZSBub3JtYWwgaXRlbS1ieS1pdGVt
IHJlbmRlcmluZyB3aGVuIGluc2lkZSBhIGAjZ3JvdXBgIGhlbHBlcgotICAgICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gZWFjaEhlbHBlcihwYXRoLCBvcHRpb25zKSB7Ci0gICAgICAgICAg
ICB2YXIgY3R4LCBoZWxwZXJOYW1lID0gJ2VhY2gnOwotCi0gICAgICAgICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gNCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiSWYgeW91
IHBhc3MgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCB0byB0aGUgZWFjaCBoZWxwZXIsIGl0IG11c3Qg
YmUgaW4gdGhlIGZvcm0gI2VhY2ggZm9vIGluIGJhciIsIGFyZ3VtZW50c1sxXSA9PT0gImluIik7
Ci0KLSAgICAgICAgICAgICAgICB2YXIga2V5d29yZE5hbWUgPSBhcmd1bWVudHNbMF07Ci0KLQot
ICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbM107Ci0gICAgICAgICAgICAgICAg
cGF0aCA9IGFyZ3VtZW50c1syXTsKLQotICAgICAgICAgICAgICAgIGhlbHBlck5hbWUgKz0gJyAn
ICsga2V5d29yZE5hbWUgKyAnIGluICcgKyBwYXRoOwotCi0gICAgICAgICAgICAgICAgaWYgKHBh
dGggPT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSAidGhpcyI7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5oYXNoLmtleXdvcmQgPSBrZXl3
b3JkTmFtZTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAx
KSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgcGF0
aCA9ICd0aGlzJzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGVscGVy
TmFtZSArPSAnICcgKyBwYXRoOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25z
Lmhhc2guZGF0YVNvdXJjZUJpbmRpbmcgPSBwYXRoOwotICAgICAgICAgICAgLy8gU2V0IHVwIGVt
cHR5VmlldyBhcyBhIG1ldGFtb3JwaCB3aXRoIG5vIHRhZwotICAgICAgICAgICAgLy9vcHRpb25z
Lmhhc2guZW1wdHlWaWV3Q2xhc3MgPSBFbWJlci5fTWV0YW1vcnBoVmlldzsKLQotICAgICAgICAg
ICAgLy8gY2FuJ3QgcmVseSBvbiB0aGlzIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiB1c2Ugc3RyaWN0
Ci0gICAgICAgICAgICBjdHggPSB0aGlzIHx8IHdpbmRvdzsKLQotICAgICAgICAgICAgb3B0aW9u
cy5oZWxwZXJOYW1lID0gb3B0aW9ucy5oZWxwZXJOYW1lIHx8IGhlbHBlck5hbWU7Ci0KLSAgICAg
ICAgICAgIGlmIChvcHRpb25zLmRhdGEuaW5zaWRlR3JvdXAgJiYgIW9wdGlvbnMuaGFzaC5ncm91
cGVkUm93cyAmJiAhb3B0aW9ucy5oYXNoLml0ZW1WaWV3Q2xhc3MpIHsKLSAgICAgICAgICAgICAg
ICBuZXcgR3JvdXBlZEVhY2goY3R4LCBwYXRoLCBvcHRpb25zKS5yZW5kZXIoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRVM2VE9ETzogZmlndXJlIG91dCBob3cg
dG8gZG8gdGhpcyB3aXRob3V0IGdsb2JhbCBsb29rdXAuCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGhlbHBlcnMuY29sbGVjdGlvbi5jYWxsKGN0eCwgJ0VtYmVyLkhhbmRsZWJhcnMuRWFjaFZpZXcn
LCBvcHRpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLkVhY2hWaWV3ID0gRWFjaFZpZXc7Ci0gICAgICAgIF9fZXhwb3J0c19fLkdyb3VwZWRFYWNo
ID0gR3JvdXBlZEVhY2g7Ci0gICAgICAgIF9fZXhwb3J0c19fLmVhY2hIZWxwZXIgPSBlYWNoSGVs
cGVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL2xvYyIs
Ci0gICAgWyJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgbG9jID0gX19kZXBlbmRlbmN5MV9fLmxvYzsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1i
ZXItaGFuZGxlYmFycwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvLyBFUzZUT0RPOgotICAg
ICAgICAvLyBQcmV0dHkgc3VyZSB0aGlzIGNhbiBiZSBleHByZXNzZWQgYXMKLSAgICAgICAgLy8g
dmFyIGxvY0hlbHBlciBFbWJlclN0cmluZ1V0aWxzLmxvYyA/Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIENhbGxzIFtFbWJlci5TdHJpbmcubG9jXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3Ry
aW5nLmh0bWwjbWV0aG9kX2xvYykgd2l0aCB0aGUKLSAgICAgICAgICAgICAgcHJvdmlkZWQgc3Ry
aW5nLgotCi0gICAgICAgICAgICAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHdheSB0byBsb2NhbGl6
ZSB0ZXh0LiBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAg
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMiIGRhdGEtdGVtcGxhdGUtbmFtZT0i
aG9tZSI+Ci0gICAgICAgICAgICAgICAge3tsb2MgIndlbGNvbWUifX0KLSAgICAgICAgICAgICAg
PC9zY3JpcHQ+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRha2Ugbm90ZSB0
aGF0IGAid2VsY29tZSJgIGlzIGEgc3RyaW5nIGFuZCBub3QgYW4gb2JqZWN0Ci0gICAgICAgICAg
ICAgIHJlZmVyZW5jZS4KLQotICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5sb2NdKC9h
cGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfbG9jKSBmb3IgaG93IHRvIAotICAg
ICAgICAgICAgICBzZXQgdXAgbG9jYWxpemVkIHN0cmluZyByZWZlcmVuY2VzLgotCi0gICAgICAg
ICAgICAgIEBtZXRob2QgbG9jCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5o
ZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBm
b3JtYXQKLSAgICAgICAgICAgICAgQHNlZSB7RW1iZXIuU3RyaW5nI2xvY30KLSAgICAgICAgICAg
ICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBsb2NIZWxwZXIo
c3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jKHN0cik7Ci0gICAgICAgIH0KLSAgICB9KTsK
LSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9wYXJ0aWFsIiwKLSAgICBbImVt
YmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvaXNfbm9uZSIsICJlbWJlci1oYW5kbGViYXJz
L2V4dCIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvYmluZGluZyIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyBFbWJlci5hc3NlcnQKLSAgICAgICAgLy8gdmFyIGVtYmVyQXNzZXJ0ID0gRW1iZXIu
YXNzZXJ0OwotCi0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3kyX18uaXNOb25lOwot
ICAgICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTNfXy5oYW5kbGViYXJzR2V0
OwotICAgICAgICB2YXIgYmluZCA9IF9fZGVwZW5kZW5jeTRfXy5iaW5kOwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJl
ci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBUaGUgYHBhcnRpYWxgIGhlbHBlciByZW5kZXJzIGFub3RoZXIgdGVtcGxhdGUgd2l0aG91dAot
ICAgICAgICAgICAgICBjaGFuZ2luZyB0aGUgdGVtcGxhdGUgY29udGV4dDoKLQotICAgICAgICAg
ICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7Zm9vfX0KLSAgICAgICAgICAgICAg
e3twYXJ0aWFsICJuYXYifX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhl
IGFib3ZlIGV4YW1wbGUgdGVtcGxhdGUgd2lsbCByZW5kZXIgYSB0ZW1wbGF0ZSBuYW1lZAotICAg
ICAgICAgICAgICAiX25hdiIsIHdoaWNoIGhhcyB0aGUgc2FtZSBjb250ZXh0IGFzIHRoZSBwYXJl
bnQgdGVtcGxhdGUKLSAgICAgICAgICAgICAgaXQncyByZW5kZXJlZCBpbnRvLCBzbyBpZiB0aGUg
Il9uYXYiIHRlbXBsYXRlIGFsc28gcmVmZXJlbmNlZAotICAgICAgICAgICAgICBge3tmb299fWAs
IGl0IHdvdWxkIHByaW50IHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBge3tmb299fWAKLSAgICAgICAg
ICAgICAgaW4gdGhlIGFib3ZlIGV4YW1wbGUuCi0KLSAgICAgICAgICAgICAgSWYgYSAiX25hdiIg
dGVtcGxhdGUgaXNuJ3QgZm91bmQsIHRoZSBgcGFydGlhbGAgaGVscGVyIHdpbGwKLSAgICAgICAg
ICAgICAgZmFsbCBiYWNrIHRvIGEgdGVtcGxhdGUgbmFtZWQgIm5hdiIuCi0KLSAgICAgICAgICAg
ICAgIyMgQm91bmQgdGVtcGxhdGUgbmFtZXMKLQotICAgICAgICAgICAgICBUaGUgcGFyYW1ldGVy
IHN1cHBsaWVkIHRvIGBwYXJ0aWFsYCBjYW4gYWxzbyBiZSBhIHBhdGgKLSAgICAgICAgICAgICAg
dG8gYSBwcm9wZXJ0eSBjb250YWluaW5nIGEgdGVtcGxhdGUgbmFtZSwgZS5nLjoKLQotICAgICAg
ICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7cGFydGlhbCBzb21lVGVtcGxh
dGVOYW1lfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGFib3ZlIGV4
YW1wbGUgd2lsbCBsb29rIHVwIHRoZSB2YWx1ZSBvZiBgc29tZVRlbXBsYXRlTmFtZWAKLSAgICAg
ICAgICAgICAgb24gdGhlIHRlbXBsYXRlIGNvbnRleHQgKGUuZy4gYSBjb250cm9sbGVyKSBhbmQg
dXNlIHRoYXQKLSAgICAgICAgICAgICAgdmFsdWUgYXMgdGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRl
IHRvIHJlbmRlci4gSWYgdGhlIHJlc29sdmVkCi0gICAgICAgICAgICAgIHZhbHVlIGlzIGZhbHN5
LCBub3RoaW5nIHdpbGwgYmUgcmVuZGVyZWQuIElmIGBzb21lVGVtcGxhdGVOYW1lYAotICAgICAg
ICAgICAgICBjaGFuZ2VzLCB0aGUgcGFydGlhbCB3aWxsIGJlIHJlLXJlbmRlcmVkIHVzaW5nIHRo
ZSBuZXcgdGVtcGxhdGUKLSAgICAgICAgICAgICAgbmFtZS4KLQotICAgICAgICAgICAgICAjIyBT
ZXR0aW5nIHRoZSBwYXJ0aWFsJ3MgY29udGV4dCB3aXRoIGB3aXRoYAotCi0gICAgICAgICAgICAg
IFRoZSBgcGFydGlhbGAgaGVscGVyIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhl
IGB3aXRoYAotICAgICAgICAgICAgICBoZWxwZXIgdG8gc2V0IGEgY29udGV4dCB0aGF0IHdpbGwg
YmUgdXNlZCBieSB0aGUgcGFydGlhbDoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIHt7I3dpdGggY3VycmVudFVzZXJ9fQotICAgICAgICAgICAgICAgIHt7cGFy
dGlhbCAidXNlcl9pbmZvIn19Ci0gICAgICAgICAgICAgIHt7L3dpdGh9fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHBhcnRpYWwKLSAgICAgICAgICAgICAgQGZv
ciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IHBhcnRpYWxOYW1lIHRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIgbWludXMgdGhl
IGxlYWRpbmcgdW5kZXJzY29yZQotICAgICAgICAgICAgKi8KLQotICAgICAgICBfX2V4cG9ydHNf
X1siZGVmYXVsdCJdID0gZnVuY3Rpb24gcGFydGlhbEhlbHBlcihuYW1lLCBvcHRpb25zKSB7Ci0K
LSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gKG9wdGlvbnMuY29udGV4dHMgJiYgb3B0aW9ucy5j
b250ZXh0cy5sZW5ndGgpID8gb3B0aW9ucy5jb250ZXh0c1swXSA6IHRoaXM7Ci0KLSAgICAgICAg
ICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IG9wdGlvbnMuaGVscGVyTmFtZSB8fCAncGFydGlhbCc7
Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25zLnR5cGVzWzBdID09PSAiSUQiKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSGVscGVyIHdhcyBwYXNzZWQgYSBwcm9wZXJ0eSBwYXRoOyB3ZSBuZWVkIHRv
Ci0gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgYmluZGluZyB0aGF0IHdpbGwgcmUtcmVuZGVy
IHdoZW5ldmVyCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBwcm9wZXJ0eSBjaGFuZ2VzLgotICAg
ICAgICAgICAgICAgIG9wdGlvbnMuZm4gPSBmdW5jdGlvbihjb250ZXh0LCBmbk9wdGlvbnMpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRpYWxOYW1lID0gaGFuZGxlYmFyc0dldChjb250
ZXh0LCBuYW1lLCBmbk9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICByZW5kZXJQYXJ0aWFs
KGNvbnRleHQsIHBhcnRpYWxOYW1lLCBmbk9wdGlvbnMpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gYmluZC5jYWxsKGNvbnRleHQsIG5hbWUsIG9wdGlvbnMs
IHRydWUsIGV4aXN0cyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IFJlbmRlciB0aGUgcGFydGlhbCByaWdodCBpbnRvIHBhcmVudCB0ZW1wbGF0ZS4KLSAgICAgICAg
ICAgICAgICByZW5kZXJQYXJ0aWFsKGNvbnRleHQsIG5hbWUsIG9wdGlvbnMpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZXhpc3RzKHZhbHVlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gIWlzTm9uZSh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiByZW5kZXJQYXJ0aWFsKGNvbnRleHQsIG5hbWUsIG9wdGlvbnMpIHsKLSAgICAgICAgICAg
IHZhciBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCIvIik7Ci0gICAgICAgICAgICB2YXIgbGFzdFBh
cnQgPSBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdOwotCi0gICAgICAgICAgICBuYW1l
UGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdID0gIl8iICsgbGFzdFBhcnQ7Ci0KLSAgICAgICAg
ICAgIHZhciB2aWV3ID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0gICAgICAgICAgICB2YXIgdW5kZXJz
Y29yZWROYW1lID0gbmFtZVBhcnRzLmpvaW4oIi8iKTsKLSAgICAgICAgICAgIHZhciB0ZW1wbGF0
ZSA9IHZpZXcudGVtcGxhdGVGb3JOYW1lKHVuZGVyc2NvcmVkTmFtZSk7Ci0gICAgICAgICAgICB2
YXIgZGVwcmVjYXRlZFRlbXBsYXRlID0gIXRlbXBsYXRlICYmIHZpZXcudGVtcGxhdGVGb3JOYW1l
KG5hbWUpOwotCi0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIlVuYWJsZSB0byBmaW5kIHBhcnRp
YWwgd2l0aCBuYW1lICciICsgbmFtZSArICInLiIsIHRlbXBsYXRlIHx8IGRlcHJlY2F0ZWRUZW1w
bGF0ZSk7Ci0KLSAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgfHwgZGVwcmVjYXRlZFRl
bXBsYXRlOwotCi0gICAgICAgICAgICB0ZW1wbGF0ZShjb250ZXh0LCB7Ci0gICAgICAgICAgICAg
ICAgZGF0YTogb3B0aW9ucy5kYXRhIAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9zaGFyZWQiLAotICAgIFsi
ZW1iZXItaGFuZGxlYmFycy9leHQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2
YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5kZW5jeTFfXy5oYW5kbGViYXJzR2V0OwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiByZXNvbHZlUGF0aHMob3B0aW9u
cykgewotICAgICAgICAgICAgdmFyIHJldCA9IFtdLAotICAgICAgICAgICAgY29udGV4dHMgPSBv
cHRpb25zLmNvbnRleHRzLAotICAgICAgICAgICAgcm9vdHMgPSBvcHRpb25zLnJvb3RzLAotICAg
ICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBjb250ZXh0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBy
ZXQucHVzaChoYW5kbGViYXJzR2V0KHJvb3RzW2ldLCBjb250ZXh0c1tpXSwgewotICAgICAgICAg
ICAgICAgICAgICBkYXRhOiBkYXRhIAotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotICAgIH0pOwotICAgIGRl
ZmluZSgiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL3RlbXBsYXRlIiwKLSAgICBbImVtYmVyLW1l
dGFsL2NvcmUiLCAiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJleHBvcnRzIl0sCi0gICAg
ZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIHZhciBlbWJlckRlcHJlY2F0ZSA9IEVtYmVyLmRl
cHJlY2F0ZTsKLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5Ml9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoZWxwZXJzID0gRW1iZXJIYW5kbGViYXJzLmhlbHBl
cnM7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAg
QHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBgdGVtcGxhdGVgIGFsbG93cyB5b3UgdG8gcmVuZGVyIGEgdGVtcGxh
dGUgZnJvbSBpbnNpZGUgYW5vdGhlciB0ZW1wbGF0ZS4KLSAgICAgICAgICAgICAgVGhpcyBhbGxv
d3MgeW91IHRvIHJlLXVzZSB0aGUgc2FtZSB0ZW1wbGF0ZSBpbiBtdWx0aXBsZSBwbGFjZXMuIEZv
ciBleGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJsb2dnZWRfaW5f
dXNlciI+Ci0gICAgICAgICAgICAgICAge3sjd2l0aCBsb2dnZWRJblVzZXJ9fQotICAgICAgICAg
ICAgICAgICAgTGFzdCBMb2dpbjoge3tsYXN0TG9naW59fQotICAgICAgICAgICAgICAgICAgVXNl
ciBJbmZvOiB7e3RlbXBsYXRlICJ1c2VyX2luZm8ifX0KLSAgICAgICAgICAgICAgICB7ey93aXRo
fX0KLSAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtaGFuZGxl
YmFycyIgZGF0YS10ZW1wbGF0ZS1uYW1lPSJ1c2VyX2luZm8iPgotICAgICAgICAgICAgICAgIE5h
bWU6IDxlbT57e25hbWV9fTwvZW0+Ci0gICAgICAgICAgICAgICAgS2FybWE6IDxlbT57e2thcm1h
fX08L2VtPgotICAgICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNpZiBpc1VzZXJ9fQot
ICAgICAgICAgICAgICAgIHt7dGVtcGxhdGUgInVzZXJfaW5mbyJ9fQotICAgICAgICAgICAgICB7
e2Vsc2V9fQotICAgICAgICAgICAgICAgIHt7dGVtcGxhdGUgInVubG9nZ2VkX3VzZXJfaW5mbyJ9
fQotICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIFRoaXMgaGVscGVyIGxvb2tzIGZvciB0ZW1wbGF0ZXMgaW4gdGhlIGdsb2JhbCBgRW1iZXIu
VEVNUExBVEVTYCBoYXNoLiBJZiB5b3UKLSAgICAgICAgICAgICAgYWRkIGA8c2NyaXB0PmAgdGFn
cyB0byB5b3VyIHBhZ2Ugd2l0aCB0aGUgYGRhdGEtdGVtcGxhdGUtbmFtZWAgYXR0cmlidXRlIHNl
dCwKLSAgICAgICAgICAgICAgdGhleSB3aWxsIGJlIGNvbXBpbGVkIGFuZCBwbGFjZWQgaW4gdGhp
cyBoYXNoIGF1dG9tYXRpY2FsbHkuCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIG1hbnVh
bGx5IHJlZ2lzdGVyIHRlbXBsYXRlcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgaGFzaDoKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLlRFTVBMQVRFU1si
bXlfY29vbF90ZW1wbGF0ZSJdID0gRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCc8Yj57e3VzZXJ9
fTwvYj4nKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQK
LSAgICAgICAgICAgICAgQG1ldGhvZCB0ZW1wbGF0ZQotICAgICAgICAgICAgICBAZm9yIEVtYmVy
LkhhbmRsZWJhcnMuaGVscGVycwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gdGVtcGxh
dGVOYW1lIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiB0ZW1wbGF0ZUhlbHBlcihuYW1lLCBvcHRp
b25zKSB7Ci0gICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIlRoZSBgdGVtcGxhdGVgIGhlbHBl
ciBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgcGFydGlhbGAgaGVscGVyLiBQ
bGVhc2UgdXNlIGBwYXJ0aWFsYCBpbnN0ZWFkLCB3aGljaCB3aWxsIHdvcmsgdGhlIHNhbWUgd2F5
LiIpOwotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25zLmhlbHBlck5h
bWUgfHwgJ3RlbXBsYXRlJzsKLQotICAgICAgICAgICAgcmV0dXJuIGhlbHBlcnMucGFydGlhbC5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdW5ib3VuZCIsCi0gICAgWyJlbWJlci1oYW5kbGViYXJz
LWNvbXBpbGVyIiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy9iaW5kaW5nIiwgImVtYmVyLWhh
bmRsZWJhcnMvZXh0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qZ2xvYmFscyBIYW5kbGViYXJzICovCi0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxl
IGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVySGFu
ZGxlYmFycyA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGVscGVy
cyA9IEVtYmVySGFuZGxlYmFycy5oZWxwZXJzOwotCi0gICAgICAgIHZhciByZXNvbHZlSGVscGVy
ID0gX19kZXBlbmRlbmN5Ml9fLnJlc29sdmVIZWxwZXI7Ci0gICAgICAgIHZhciBoYW5kbGViYXJz
R2V0ID0gX19kZXBlbmRlbmN5M19fLmhhbmRsZWJhcnNHZXQ7Ci0KLSAgICAgICAgdmFyIHNsaWNl
ID0gW10uc2xpY2U7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGB1bmJvdW5kYCBhbGxv
d3MgeW91IHRvIG91dHB1dCBhIHByb3BlcnR5IHdpdGhvdXQgYmluZGluZy4gKkltcG9ydGFudDoq
IFRoZQotICAgICAgICAgICAgICBvdXRwdXQgd2lsbCBub3QgYmUgdXBkYXRlZCBpZiB0aGUgcHJv
cGVydHkgY2hhbmdlcy4gVXNlIHdpdGggY2F1dGlvbi4KLQotICAgICAgICAgICAgICBgYGBoYW5k
bGViYXJzCi0gICAgICAgICAgICAgIDxkaXY+e3t1bmJvdW5kIHNvbWVQcm9wZXJ0eVRoYXREb2Vz
bnRDaGFuZ2V9fTwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgdW5i
b3VuZGAgY2FuIGFsc28gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgYm91bmQgaGVscGVy
IHRvCi0gICAgICAgICAgICAgIHJlbmRlciBpdCBpbiBpdHMgdW5ib3VuZCBmb3JtOgotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPGRpdj57e3VuYm91bmQgaGVs
cGVyTmFtZSBzb21lUHJvcGVydHlUaGF0RG9lc250Q2hhbmdlfX08L2Rpdj4KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCB1bmJvdW5kCi0gICAgICAgICAgICAgIEBm
b3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBwcm9wZXJ0eQotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0g
ICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24g
dW5ib3VuZEhlbHBlcihwcm9wZXJ0eSwgZm4pIHsKLSAgICAgICAgICAgIHZhciBvcHRpb25zID0g
YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGNvbnRhaW5lciA9
IG9wdGlvbnMuZGF0YS52aWV3LmNvbnRhaW5lciwKLSAgICAgICAgICAgIGhlbHBlciwgY29udGV4
dCwgb3V0LCBjdHg7Ci0KLSAgICAgICAgICAgIGN0eCA9IHRoaXM7Ci0gICAgICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKLSAgICAgICAgICAgICAgICAvLyBVbmJvdW5kIGhlbHBl
ciBjYWxsLgotICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YS5pc1VuYm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGhlbHBlciA9IHJlc29sdmVIZWxwZXIoY29udGFpbmVyLCBwcm9wZXJ0
eSkgfHwgaGVscGVycy5oZWxwZXJNaXNzaW5nOwotICAgICAgICAgICAgICAgIG91dCA9IGhlbHBl
ci5hcHBseShjdHgsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIG9wdGlvbnMuZGF0YS5pc1VuYm91bmQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG91
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dCA9IChmbi5jb250ZXh0cyAm
JiBmbi5jb250ZXh0cy5sZW5ndGgpID8gZm4uY29udGV4dHNbMF0gOiBjdHg7Ci0gICAgICAgICAg
ICByZXR1cm4gaGFuZGxlYmFyc0dldChjb250ZXh0LCBwcm9wZXJ0eSwgZm4pOwotICAgICAgICB9
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdmlldyIsCi0g
ICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVt
YmVyLW1ldGFsL21peGluIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1iZXItdmll
d3Mvdmlld3MvdmlldyIsICJlbWJlci1tZXRhbC9iaW5kaW5nIiwgImVtYmVyLWhhbmRsZWJhcnMv
ZXh0IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywg
X19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBl
bmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5
MTBfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKmds
b2JhbHMgSGFuZGxlYmFycyAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBl
bWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAg
ICAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICAvLyBFbWJlci53YXJuLCBFbWJlci5hc3NlcnQKLSAgICAgICAgLy8gdmFyIGVtYmVy
V2FybiA9IEVtYmVyLndhcm4sIGVtYmVyQXNzZXJ0ID0gRW1iZXIuYXNzZXJ0OwotCi0gICAgICAg
IHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgZ2V0ID0gX19kZXBlbmRlbmN5M19fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5k
ZW5jeTRfXy5zZXQ7Ci0gICAgICAgIHZhciBJU19CSU5ESU5HID0gX19kZXBlbmRlbmN5NV9fLklT
X0JJTkRJTkc7Ci0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIFZpZXcgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIGlzR2xvYmFsUGF0aCA9IF9fZGVwZW5kZW5jeThfXy5pc0dsb2JhbFBhdGg7Ci0gICAg
ICAgIHZhciBub3JtYWxpemVQYXRoID0gX19kZXBlbmRlbmN5OV9fLm5vcm1hbGl6ZVBhdGg7Ci0g
ICAgICAgIHZhciBoYW5kbGViYXJzR2V0ID0gX19kZXBlbmRlbmN5OV9fLmhhbmRsZWJhcnNHZXQ7
Ci0gICAgICAgIHZhciBFbWJlclN0cmluZyA9IF9fZGVwZW5kZW5jeTEwX19bImRlZmF1bHQiXTsK
LQotCi0gICAgICAgIHZhciBMT1dFUkNBU0VfQV9aID0gL15bYS16XS8sCi0gICAgICAgIFZJRVdf
UFJFRklYID0gL152aWV3XC4vOwotCi0gICAgICAgIGZ1bmN0aW9uIG1ha2VCaW5kaW5ncyh0aGlz
Q29udGV4dCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGhhc2ggPSBvcHRpb25zLmhhc2gs
Ci0gICAgICAgICAgICBoYXNoVHlwZSA9IG9wdGlvbnMuaGFzaFR5cGVzOwotCi0gICAgICAgICAg
ICBmb3IgKHZhciBwcm9wIGluIGhhc2gpIHsKLSAgICAgICAgICAgICAgICBpZiAoaGFzaFR5cGVb
cHJvcF0gPT09ICdJRCcpIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBoYXNo
W3Byb3BdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChJU19CSU5ESU5HLnRlc3QocHJvcCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLndhcm4oIllvdSdyZSBhdHRlbXB0aW5n
IHRvIHJlbmRlciBhIHZpZXcgYnkgcGFzc2luZyAiICsgcHJvcCArICI9IiArIHZhbHVlICsgIiB0
byBhIHZpZXcgaGVscGVyLCBidXQgdGhpcyBzeW50YXggaXMgYW1iaWd1b3VzLiBZb3Ugc2hvdWxk
IGVpdGhlciBzdXJyb3VuZCAiICsgdmFsdWUgKyAiIGluIHF1b3RlcyBvciByZW1vdmUgYEJpbmRp
bmdgIGZyb20gIiArIHByb3AgKyAiLiIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFtwcm9wICsgJ0JpbmRpbmcnXSA9IHZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFR5cGVbcHJvcCArICdCaW5kaW5nJ10gPSAnU1RS
SU5HJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW3Byb3BdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGhhc2hUeXBlW3Byb3BdOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoaGFzaC5oYXNPd25Qcm9wZXJ0eSgnaWRCaW5kaW5nJykpIHsKLSAgICAgICAgICAgICAgICAv
LyBpZCBjYW4ndCBiZSBib3VuZCwgc28ganVzdCBwZXJmb3JtIG9uZS10aW1lIGxvb2t1cC4KLSAg
ICAgICAgICAgICAgICBoYXNoLmlkID0gaGFuZGxlYmFyc0dldCh0aGlzQ29udGV4dCwgaGFzaC5p
ZEJpbmRpbmcsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGhhc2hUeXBlLmlkID0gJ1NUUklO
Ryc7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGhhc2guaWRCaW5kaW5nOwotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBoYXNoVHlwZS5pZEJpbmRpbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2YXIgVmlld0hlbHBlciA9IEVtYmVyT2JqZWN0LmNyZWF0ZSh7Ci0KLSAgICAg
ICAgICAgIHByb3BlcnRpZXNGcm9tSFRNTE9wdGlvbnM6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgaGFzaCA9IG9wdGlvbnMuaGFzaCwgZGF0YSA9IG9wdGlvbnMuZGF0
YTsKLSAgICAgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9LAotICAgICAgICAgICAgICAg
IGNsYXNzZXMgPSBoYXNoWydjbGFzcyddLAotICAgICAgICAgICAgICAgIGR1cCA9IGZhbHNlOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc2guaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0
ZW5zaW9ucy5lbGVtZW50SWQgPSBoYXNoLmlkOwotICAgICAgICAgICAgICAgICAgICBkdXAgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYXNoLnRhZykg
ewotICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnRhZ05hbWUgPSBoYXNoLnRhZzsKLSAg
ICAgICAgICAgICAgICAgICAgZHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoY2xhc3NlcykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc2VzID0g
Y2xhc3Nlcy5zcGxpdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNsYXNz
TmFtZXMgPSBjbGFzc2VzOwotICAgICAgICAgICAgICAgICAgICBkdXAgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYXNoLmNsYXNzQmluZGluZykgewot
ICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNsYXNzTmFtZUJpbmRpbmdzID0gaGFzaC5j
bGFzc0JpbmRpbmcuc3BsaXQoJyAnKTsKLSAgICAgICAgICAgICAgICAgICAgZHVwID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGFzaC5jbGFzc05hbWVC
aW5kaW5ncykgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9ucy5jbGFzc05hbWVC
aW5kaW5ncyA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lv
bnMuY2xhc3NOYW1lQmluZGluZ3MgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9u
cy5jbGFzc05hbWVCaW5kaW5ncyA9IGV4dGVuc2lvbnMuY2xhc3NOYW1lQmluZGluZ3MuY29uY2F0
KGhhc2guY2xhc3NOYW1lQmluZGluZ3Muc3BsaXQoJyAnKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGR1cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhh
c2guYXR0cmlidXRlQmluZGluZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJTZXR0aW5nICdhdHRyaWJ1dGVCaW5kaW5ncycgdmlhIEhhbmRsZWJhcnMgaXMgbm90IGFsbG93
ZWQuIFBsZWFzZSBzdWJjbGFzcyBFbWJlci5WaWV3IGFuZCBzZXQgaXQgdGhlcmUgaW5zdGVhZC4i
KTsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5hdHRyaWJ1dGVCaW5kaW5ncyA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgIGR1cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGR1cCkgewotICAgICAgICAgICAgICAgICAgICBoYXNoID0g
alF1ZXJ5LmV4dGVuZCh7fSwgaGFzaCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNo
LmlkOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgaGFzaC50YWc7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBoYXNoWydjbGFzcyddOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUg
aGFzaC5jbGFzc0JpbmRpbmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gU2V0IHRoZSBwcm9wZXIgY29udGV4dCBmb3IgYWxsIGJpbmRpbmdzIHBhc3NlZCB0byB0aGUg
aGVscGVyLiBUaGlzIGFwcGxpZXMgdG8gcmVndWxhciBhdHRyaWJ1dGUgYmluZGluZ3MKLSAgICAg
ICAgICAgICAgICAvLyBhcyB3ZWxsIGFzIGNsYXNzIG5hbWUgYmluZGluZ3MuIElmIHRoZSBiaW5k
aW5ncyBhcmUgbG9jYWwsIG1ha2UgdGhlbSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjb250ZXh0
Ci0gICAgICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgdmlldy4KLSAgICAgICAgICAgICAg
ICB2YXIgcGF0aDsKLQotICAgICAgICAgICAgICAgIC8vIEV2YWx1YXRlIHRoZSBjb250ZXh0IG9m
IHJlZ3VsYXIgYXR0cmlidXRlIGJpbmRpbmdzOgotICAgICAgICAgICAgICAgIGZvciAodmFyIHBy
b3AgaW4gaGFzaCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc2guaGFzT3duUHJvcGVy
dHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBpZiB0aGUgcHJvcGVy
dHkgZW5kcyBpbiAiQmluZGluZyIKLSAgICAgICAgICAgICAgICAgICAgaWYgKElTX0JJTkRJTkcu
dGVzdChwcm9wKSAmJiB0eXBlb2YgaGFzaFtwcm9wXSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmNvbnRleHR1YWxpemVCaW5kaW5nUGF0aChoYXNo
W3Byb3BdLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzaFtwcm9wXSA9IHBhdGg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSB0aGUgY29udGV4dCBvZiBjbGFzcyBuYW1lIGJp
bmRpbmdzOgotICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zLmNsYXNzTmFtZUJpbmRpbmdz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGIgaW4gZXh0ZW5zaW9ucy5jbGFzc05h
bWVCaW5kaW5ncykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGwgPSBleHRlbnNp
b25zLmNsYXNzTmFtZUJpbmRpbmdzW2JdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiBmdWxsID09PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENvbnRleHR1YWxpemUgdGhlIHBhdGggb2YgY2xhc3NOYW1lQmluZGluZyBzbyB0aGlzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIGNsYXNzTmFtZUJpbmRpbmc9ImlzR3JlZW46Z3JlZW4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBjb252ZXJ0
ZWQgdG8gdGhpczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICAgICBjbGFzc05hbWVCaW5kaW5nPSJfcGFyZW50Vmlldy5jb250
ZXh0LmlzR3JlZW46Z3JlZW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNl
ZFBhdGggPSBWaWV3Ll9wYXJzZVByb3BlcnR5UGF0aChmdWxsKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoID0gdGhpcy5jb250ZXh0dWFsaXplQmluZGluZ1BhdGgocGFyc2VkUGF0
aC5wYXRoLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmNsYXNzTmFtZUJpbmRp
bmdzW2JdID0gcGF0aCArIHBhcnNlZFBhdGguY2xhc3NOYW1lczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LmV4dGVuZChoYXNoLCBleHRlbnNpb25zKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8vIFRyYW5zZm9ybSBiaW5kaW5ncyBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gYSBjb250
ZXh0IHRoYXQgY2FuIGJlIGV2YWx1YXRlZCB3aXRoaW4gdGhlIHZpZXcuCi0gICAgICAgICAgICAv
LyBSZXR1cm5zIG51bGwgaWYgdGhlIHBhdGggc2hvdWxkbid0IGJlIGNoYW5nZWQuCi0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgLy8gVE9ETzogY29uc2lkZXIgdGhlIGFkZGl0aW9uIG9mIGEg
cHJlZml4IHRoYXQgd291bGQgYWxsb3cgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGBwYXRoYC4KLSAg
ICAgICAgICAgIGNvbnRleHR1YWxpemVCaW5kaW5nUGF0aDogZnVuY3Rpb24ocGF0aCwgZGF0YSkg
ewotICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChudWxsLCBw
YXRoLCBkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZC5pc0tleXdvcmQpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0ZW1wbGF0ZURhdGEua2V5d29yZHMuJyArIHBh
dGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0dsb2JhbFBhdGgocGF0aCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChwYXRoID09PSAndGhpcycgfHwgcGF0aCA9PT0gJycpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICdfcGFyZW50Vmlldy5jb250ZXh0JzsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ19wYXJlbnRWaWV3LmNvbnRleHQuJyArIHBhdGg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaGVscGVy
OiBmdW5jdGlvbih0aGlzQ29udGV4dCwgcGF0aCwgb3B0aW9ucykgewotICAgICAgICAgICAgICAg
IHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLAotICAgICAgICAgICAgICAgIGZuID0gb3B0aW9ucy5m
biwKLSAgICAgICAgICAgICAgICBuZXdWaWV3OwotCi0gICAgICAgICAgICAgICAgbWFrZUJpbmRp
bmdzKHRoaXNDb250ZXh0LCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgIGlmICgnc3RyaW5n
JyA9PT0gdHlwZW9mIHBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cDsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBhIGxhbWUgY29uZGl0aW9uYWwsIHRo
aXMgc2hvdWxkIGxpa2VseSBjaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHNvbWV0
aGluZyBhbG9uZyB0aGVzZSBsaW5lcyB3aWxsIGxpa2VseSBuZWVkIHRvIGJlIGFkZGVkCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFzIGRlcHJlY2F0aW9uIHdhcm5pbmdzCi0gICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnR5cGVzWzBdID09PSAn
U1RSSU5HJyAmJiBMT1dFUkNBU0VfQV9aLnRlc3QocGF0aCkgJiYgIVZJRVdfUFJFRklYLnRlc3Qo
cGF0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IHBhdGg7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdWaWV3ID0g
aGFuZGxlYmFyc0dldCh0aGlzQ29udGV4dCwgcGF0aCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIG5ld1ZpZXcgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9va3VwID0gbmV3VmlldzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChs
b29rdXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVmlldyByZXF1
aXJlcyBhIGNvbnRhaW5lciIsICEhZGF0YS52aWV3LmNvbnRhaW5lcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuZXdWaWV3ID0gZGF0YS52aWV3LmNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCd2
aWV3OicgKyBsb29rdXApOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJVbmFibGUgdG8gZmluZCB2aWV3IGF0IHBhdGggJyIgKyBwYXRo
ICsgIiciLCAhIW5ld1ZpZXcpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG5ld1ZpZXcgPSBwYXRoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydChFbWJlclN0cmluZy5mbXQoJ1lvdSBtdXN0IHBhc3MgYSB2aWV3
IHRvIHRoZSAjdmlldyBoZWxwZXIsIG5vdCAlQCAoJUApJywgW3BhdGgsIG5ld1ZpZXddKSwgVmll
dy5kZXRlY3QobmV3VmlldykgfHwgVmlldy5kZXRlY3RJbnN0YW5jZShuZXdWaWV3KSk7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgdmlld09wdGlvbnMgPSB0aGlzLnByb3BlcnRpZXNGcm9tSFRNTE9w
dGlvbnMob3B0aW9ucywgdGhpc0NvbnRleHQpOwotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50
VmlldyA9IGRhdGEudmlldzsKLSAgICAgICAgICAgICAgICB2aWV3T3B0aW9ucy50ZW1wbGF0ZURh
dGEgPSBkYXRhOwotICAgICAgICAgICAgICAgIHZhciBuZXdWaWV3UHJvdG8gPSBuZXdWaWV3LnBy
b3RvID8gbmV3Vmlldy5wcm90bygpIDogbmV3VmlldzsKLQotICAgICAgICAgICAgICAgIGlmIChm
bikgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgcHJvdmlk
ZSBhIHRlbXBsYXRlIGJsb2NrIGlmIHlvdSBhbHNvIHNwZWNpZmllZCBhIHRlbXBsYXRlTmFtZSIs
ICFnZXQodmlld09wdGlvbnMsICd0ZW1wbGF0ZU5hbWUnKSAmJiAhZ2V0KG5ld1ZpZXdQcm90bywg
J3RlbXBsYXRlTmFtZScpKTsKLSAgICAgICAgICAgICAgICAgICAgdmlld09wdGlvbnMudGVtcGxh
dGUgPSBmbjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGBfY29udGV4dGAgY29tcHV0ZWQgcHJvcGVydHkgaWYgdGhl
cmUgaXMKLSAgICAgICAgICAgICAgICAvLyBubyBzcGVjaWZpZWQgY29udHJvbGxlci4gU2VlIFZp
ZXcjX2NvbnRleHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKCFu
ZXdWaWV3UHJvdG8uY29udHJvbGxlciAmJiAhbmV3Vmlld1Byb3RvLmNvbnRyb2xsZXJCaW5kaW5n
ICYmICF2aWV3T3B0aW9ucy5jb250cm9sbGVyICYmICF2aWV3T3B0aW9ucy5jb250cm9sbGVyQmlu
ZGluZykgewotICAgICAgICAgICAgICAgICAgICB2aWV3T3B0aW9ucy5fY29udGV4dCA9IHRoaXND
b250ZXh0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGZvciBpbnN0
cnVtZW50YXRpb24KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWxwZXJOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZpZXdPcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25zLmhlbHBl
ck5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY3VycmVudFZpZXcu
YXBwZW5kQ2hpbGQobmV3Vmlldywgdmlld09wdGlvbnMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLSAgICAgICAgX19leHBvcnRzX18uVmlld0hlbHBlciA9IFZpZXdIZWxwZXI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBge3t2aWV3fX1gIGluc2VydHMgYSBuZXcgaW5zdGFuY2Ug
b2YgYW4gYEVtYmVyLlZpZXdgIGludG8gYSB0ZW1wbGF0ZSBwYXNzaW5nIGl0cwotICAgICAgICAg
ICAgICBvcHRpb25zIHRvIHRoZSBgRW1iZXIuVmlld2AncyBgY3JlYXRlYCBtZXRob2QgYW5kIHVz
aW5nIHRoZSBzdXBwbGllZCBibG9jayBhcwotICAgICAgICAgICAgICB0aGUgdmlldydzIG93biB0
ZW1wbGF0ZS4KLQotICAgICAgICAgICAgICBBbiBlbXB0eSBgPGJvZHk+YCBhbmQgdGhlIGZvbGxv
d2luZyB0ZW1wbGF0ZToKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAg
ICAgIEEgc3BhbjoKLSAgICAgICAgICAgICAge3sjdmlldyB0YWdOYW1lPSJzcGFuIn19Ci0gICAg
ICAgICAgICAgICAgaGVsbG8uCi0gICAgICAgICAgICAgIHt7L3ZpZXd9fQotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiBIVE1MIHN0cnVjdHVyZToKLQot
ICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxib2R5PgotICAgICAgICAgICAg
ICAgIDwhLS0gTm90ZTogdGhlIGhhbmRsZWJhcnMgdGVtcGxhdGUgc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgICBhbHNvIHJlc3VsdHMgaW4gYSByZW5kZXJlZCBFbWJlci5WaWV3Ci0gICAgICAg
ICAgICAgICAgICAgICB3aGljaCBpcyB0aGUgb3V0ZXIgPGRpdj4gaGVyZSAtLT4KLQotICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgICAgQSBz
cGFuOgotICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZp
ZXciPgotICAgICAgICAgICAgICAgICAgICBIZWxsby4KLSAgICAgICAgICAgICAgICAgIDwvc3Bh
bj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9ib2R5PgotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgYHBhcmVudFZpZXdgIHNldHRpbmcKLQot
ICAgICAgICAgICAgICBUaGUgYHBhcmVudFZpZXdgIHByb3BlcnR5IG9mIHRoZSBuZXcgYEVtYmVy
LlZpZXdgIGluc3RhbmNlIGNyZWF0ZWQgdGhyb3VnaAotICAgICAgICAgICAgICBge3t2aWV3fX1g
IHdpbGwgYmUgc2V0IHRvIHRoZSBgRW1iZXIuVmlld2AgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRl
IHdoZXJlCi0gICAgICAgICAgICAgIGB7e3ZpZXd9fWAgd2FzIGNhbGxlZC4KLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFWaWV3ID0gRW1iZXIuVmlldy5jcmVh
dGUoewotICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUo
Int7I3ZpZXd9fSBteSBwYXJlbnQ6IHt7cGFyZW50Vmlldy5lbGVtZW50SWR9fSB7ey92aWV3fX0i
KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBhVmlldy5hcHBlbmRUbygnYm9k
eScpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiBI
VE1MIHN0cnVjdHVyZToKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxk
aXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgIDxkaXYg
aWQ9ImVtYmVyMiIgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgICAgbXkgcGFy
ZW50OiBlbWJlcjEKLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBTZXR0aW5nIENTUyBpZCBh
bmQgY2xhc3MgYXR0cmlidXRlcwotCi0gICAgICAgICAgICAgIFRoZSBIVE1MIGBpZGAgYXR0cmli
dXRlIGNhbiBiZSBzZXQgb24gdGhlIGB7e3ZpZXd9fWAncyByZXN1bHRpbmcgZWxlbWVudCB3aXRo
Ci0gICAgICAgICAgICAgIHRoZSBgaWRgIG9wdGlvbi4gVGhpcyBvcHRpb24gd2lsbCBfbm90XyBi
ZSBwYXNzZWQgdG8gYEVtYmVyLlZpZXcuY3JlYXRlYC4KLQotICAgICAgICAgICAgICBgYGBoYW5k
bGViYXJzCi0gICAgICAgICAgICAgIHt7I3ZpZXcgdGFnTmFtZT0ic3BhbiIgaWQ9ImEtY3VzdG9t
LWlkIn19Ci0gICAgICAgICAgICAgICAgaGVsbG8uCi0gICAgICAgICAgICAgIHt7L3ZpZXd9fQot
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBSZXN1bHRzIGluIHRoZSBmb2xsb3dp
bmcgSFRNTCBzdHJ1Y3R1cmU6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAgICA8c3BhbiBpZD0iYS1j
dXN0b20taWQiIGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICAgICAgICAgIGhlbGxvLgot
ICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSBIVE1MIGBjbGFzc2AgYXR0cmlidXRlIGNhbiBi
ZSBzZXQgb24gdGhlIGB7e3ZpZXd9fWAncyByZXN1bHRpbmcgZWxlbWVudAotICAgICAgICAgICAg
ICB3aXRoIHRoZSBgY2xhc3NgIG9yIGBjbGFzc05hbWVCaW5kaW5nc2Agb3B0aW9ucy4gVGhlIGBj
bGFzc2Agb3B0aW9uIHdpbGwKLSAgICAgICAgICAgICAgZGlyZWN0bHkgc2V0IHRoZSBDU1MgYGNs
YXNzYCBhdHRyaWJ1dGUgYW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0bwotICAgICAgICAgICAgICBg
RW1iZXIuVmlldy5jcmVhdGVgLiBgY2xhc3NOYW1lQmluZGluZ3NgIHdpbGwgYmUgcGFzc2VkIHRv
IGBjcmVhdGVgIGFuZCB1c2UKLSAgICAgICAgICAgICAgYEVtYmVyLlZpZXdgJ3MgY2xhc3MgbmFt
ZSBiaW5kaW5nIGZ1bmN0aW9uYWxpdHk6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwot
ICAgICAgICAgICAgICB7eyN2aWV3IHRhZ05hbWU9InNwYW4iIGNsYXNzPSJhLWN1c3RvbS1jbGFz
cyJ9fQotICAgICAgICAgICAgICAgIGhlbGxvLgotICAgICAgICAgICAgICB7ey92aWV3fX0KLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgUmVzdWx0cyBpbiB0aGUgZm9sbG93aW5n
IEhUTUwgc3RydWN0dXJlOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAg
PGRpdiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImVtYmVy
MiIgY2xhc3M9ImVtYmVyLXZpZXcgYS1jdXN0b20tY2xhc3MiPgotICAgICAgICAgICAgICAgICAg
aGVsbG8uCi0gICAgICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICAgICAgICA8L2Rpdj4KLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIFN1cHBseWluZyBhIGRpZmZlcmVu
dCB2aWV3IGNsYXNzCi0KLSAgICAgICAgICAgICAgYHt7dmlld319YCBjYW4gdGFrZSBhbiBvcHRp
b25hbCBmaXJzdCBhcmd1bWVudCBiZWZvcmUgaXRzIHN1cHBsaWVkIG9wdGlvbnMgdG8KLSAgICAg
ICAgICAgICAgc3BlY2lmeSBhIHBhdGggdG8gYSBjdXN0b20gdmlldyBjbGFzcy4KLQotICAgICAg
ICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I3ZpZXcgIk15QXBwLkN1c3Rv
bVZpZXcifX0KLSAgICAgICAgICAgICAgICBoZWxsby4KLSAgICAgICAgICAgICAge3svdmlld319
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBj
YW4gYWxzbyBiZSBhIHJlbGF0aXZlIHBhdGggYWNjZXNzaWJsZSBmcm9tIHRoZSBjdXJyZW50Ci0g
ICAgICAgICAgICAgIGNvbnRleHQuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBNeUFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSh7fSk7Ci0gICAgICAg
ICAgICAgIE15QXBwLk91dGVyVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAg
ICAgICBpbm5lclZpZXdDbGFzczogRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAg
ICAgY2xhc3NOYW1lczogWydhLWN1c3RvbS12aWV3LWNsYXNzLWFzLXByb3BlcnR5J10KLSAgICAg
ICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFy
cy5jb21waWxlKCd7eyN2aWV3ICJ2aWV3LmlubmVyVmlld0NsYXNzIn19IGhpIHt7L3ZpZXd9fScp
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIE15QXBwLk91dGVyVmlldy5jcmVh
dGUoKS5hcHBlbmRUbygnYm9keScpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6Ci0KLSAgICAgICAgICAgICAgYGBg
aHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4K
LSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjIiIGNsYXNzPSJlbWJlci12aWV3IGEtY3Vz
dG9tLXZpZXctY2xhc3MtYXMtcHJvcGVydHkiPgotICAgICAgICAgICAgICAgICAgaGkKLSAgICAg
ICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICMjIyBCbG9ja2xlc3MgdXNlCi0KLSAgICAgICAgICAgICAgSWYg
eW91IHN1cHBseSBhIGN1c3RvbSBgRW1iZXIuVmlld2Agc3ViY2xhc3MgdGhhdCBzcGVjaWZpZXMg
aXRzIG93biB0ZW1wbGF0ZQotICAgICAgICAgICAgICBvciBwcm92aWRlIGEgYHRlbXBsYXRlTmFt
ZWAgb3B0aW9uIHRvIGB7e3ZpZXd9fWAgaXQgY2FuIGJlIHVzZWQgd2l0aG91dAotICAgICAgICAg
ICAgICBzdXBwbHlpbmcgYSBibG9jay4gQXR0ZW1wdHMgdG8gdXNlIGJvdGggYSBgdGVtcGxhdGVO
YW1lYCBvcHRpb24gYW5kIHN1cHBseSBhCi0gICAgICAgICAgICAgIGJsb2NrIHdpbGwgdGhyb3cg
YW4gZXJyb3IuCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7
e3ZpZXcgIk15QXBwLlZpZXdXaXRoQVRlbXBsYXRlRGVmaW5lZCJ9fQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAjIyMgYHZpZXdOYW1lYCBwcm9wZXJ0eQotCi0gICAgICAgICAg
ICAgIFlvdSBjYW4gc3VwcGx5IGEgYHZpZXdOYW1lYCBvcHRpb24gdG8gYHt7dmlld319YC4gVGhl
IGBFbWJlci5WaWV3YCBpbnN0YW5jZQotICAgICAgICAgICAgICB3aWxsIGJlIHJlZmVyZW5jZWQg
YXMgYSBwcm9wZXJ0eSBvZiBpdHMgcGFyZW50IHZpZXcgYnkgdGhpcyBuYW1lLgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgYVZpZXcgPSBFbWJlci5WaWV3LmNy
ZWF0ZSh7Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGls
ZSgne3sjdmlldyB2aWV3TmFtZT0iYUNoaWxkQnlOYW1lIn19IGhpIHt7L3ZpZXd9fScpCi0gICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGFWaWV3LmFwcGVuZFRvKCdib2R5Jyk7Ci0g
ICAgICAgICAgICAgIGFWaWV3LmdldCgnYUNoaWxkQnlOYW1lJykgLy8gdGhlIGluc3RhbmNlIG9m
IEVtYmVyLlZpZXcgY3JlYXRlZCBieSB7e3ZpZXd9fSBoZWxwZXIKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgQG1ldGhvZCB2aWV3Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIu
SGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAgICAgICAgICBAcmV0dXJu
IHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB2
aWV3SGVscGVyKHBhdGgsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhl
IHZpZXcgaGVscGVyIG9ubHkgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQiLCBhcmd1bWVudHMubGVu
Z3RoIDw9IDIpOwotCi0gICAgICAgICAgICAvLyBJZiBubyBwYXRoIGlzIHByb3ZpZGVkLCB0cmVh
dCBwYXRoIHBhcmFtIGFzIG9wdGlvbnMKLSAgICAgICAgICAgIC8vIGFuZCBnZXQgYW4gaW5zdGFu
Y2Ugb2YgdGhlIHJlZ2lzdGVyZWQgYHZpZXc6dG9wbGV2ZWxgCi0gICAgICAgICAgICBpZiAocGF0
aCAmJiBwYXRoLmRhdGEgJiYgcGF0aC5kYXRhLmlzUmVuZGVyRGF0YSkgewotICAgICAgICAgICAg
ICAgIG9wdGlvbnMgPSBwYXRoOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgne3t2aWV3
fX0gaGVscGVyIHJlcXVpcmVzIHBhcmVudCB2aWV3IHRvIGhhdmUgYSBjb250YWluZXIgYnV0IG5v
bmUgd2FzIGZvdW5kLiBUaGlzIHVzdWFsbHkgaGFwcGVucyB3aGVuIHlvdSBhcmUgbWFudWFsbHkt
bWFuYWdpbmcgdmlld3MuJywgISFvcHRpb25zLmRhdGEudmlldy5jb250YWluZXIpOwotICAgICAg
ICAgICAgICAgIHBhdGggPSBvcHRpb25zLmRhdGEudmlldy5jb250YWluZXIubG9va3VwRmFjdG9y
eSgndmlldzp0b3BsZXZlbCcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25z
LmhlbHBlck5hbWUgPSBvcHRpb25zLmhlbHBlck5hbWUgfHwgJ3ZpZXcnOwotCi0gICAgICAgICAg
ICByZXR1cm4gVmlld0hlbHBlci5oZWxwZXIodGhpcywgcGF0aCwgb3B0aW9ucyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy52aWV3SGVscGVyID0gdmlld0hlbHBlcjsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy95aWVsZCIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIC8vIHZhciBlbWJlckFzc2VydCA9IEVtYmVyLmFzc2VydDsKLQotICAg
ICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgYHt7eWllbGR9fWAgZGVub3RlcyBhbiBhcmVhIG9mIGEgdGVtcGxhdGUgdGhhdCB3
aWxsIGJlIHJlbmRlcmVkIGluc2lkZQotICAgICAgICAgICAgICBvZiBhbm90aGVyIHRlbXBsYXRl
LiBJdCBoYXMgdHdvIG1haW4gdXNlczoKLQotICAgICAgICAgICAgICAjIyMgVXNlIHdpdGggYGxh
eW91dGAKLSAgICAgICAgICAgICAgV2hlbiB1c2VkIGluIGEgSGFuZGxlYmFycyB0ZW1wbGF0ZSB0
aGF0IGlzIGFzc2lnbmVkIHRvIGFuIGBFbWJlci5WaWV3YAotICAgICAgICAgICAgICBpbnN0YW5j
ZSdzIGBsYXlvdXRgIHByb3BlcnR5IEVtYmVyIHdpbGwgcmVuZGVyIHRoZSBsYXlvdXQgdGVtcGxh
dGUgZmlyc3QsCi0gICAgICAgICAgICAgIGluc2VydGluZyB0aGUgdmlldydzIG93biByZW5kZXJl
ZCBvdXRwdXQgYXQgdGhlIGB7e3lpZWxkfX1gIGxvY2F0aW9uLgotCi0gICAgICAgICAgICAgIEFu
IGVtcHR5IGA8Ym9keT5gIGFuZCB0aGUgZm9sbG93aW5nIGFwcGxpY2F0aW9uIGNvZGU6Ci0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVtYmVyLlZp
ZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ2Etdmlldy13aXRoLWxh
eW91dCddLAotICAgICAgICAgICAgICAgIGxheW91dDogRW1iZXIuSGFuZGxlYmFycy5jb21waWxl
KCc8ZGl2IGNsYXNzPSJ3cmFwcGVyIj57e3lpZWxkfX08L2Rpdj4nKSwKLSAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCc8c3Bhbj5JIGFtIHdyYXBwZWQ8
L3NwYW4+JykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgYVZpZXcgPSBBVmll
dy5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgYVZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2lu
ZyBIVE1MIG91dHB1dDoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxi
b2R5PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2VtYmVyLXZpZXcgYS12aWV3LXdpdGgt
bGF5b3V0Jz4KLSAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IndyYXBwZXIiPgotICAgICAg
ICAgICAgICAgICAgICA8c3Bhbj5JIGFtIHdyYXBwZWQ8L3NwYW4+Ci0gICAgICAgICAgICAgICAg
ICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9ib2R5Pgot
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGUgYHlpZWxkYCBoZWxwZXIgY2Fu
bm90IGJlIHVzZWQgb3V0c2lkZSBvZiBhIHRlbXBsYXRlIGFzc2lnbmVkIHRvIGFuCi0gICAgICAg
ICAgICAgIGBFbWJlci5WaWV3YCdzIGBsYXlvdXRgIHByb3BlcnR5IGFuZCB3aWxsIHRocm93IGFu
IGVycm9yIGlmIGF0dGVtcHRlZC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIEJWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGNs
YXNzTmFtZXM6IFsnYS12aWV3LXdpdGgtbGF5b3V0J10sCi0gICAgICAgICAgICAgICAgdGVtcGxh
dGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgne3t5aWVsZH19JykKLSAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgYlZpZXcgPSBCVmlldy5jcmVhdGUoKTsKLSAgICAgICAgICAg
ICAgYlZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKLQotICAgICAgICAgICAgICAvLyB0aHJvd3MKLSAg
ICAgICAgICAgICAgLy8gVW5jYXVnaHQgRXJyb3I6IGFzc2VydGlvbiBmYWlsZWQ6Ci0gICAgICAg
ICAgICAgIC8vIFlvdSBjYWxsZWQgeWllbGQgaW4gYSB0ZW1wbGF0ZSB0aGF0IHdhcyBub3QgYSBs
YXlvdXQKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMjIFVzZSB3aXRoIEVt
YmVyLkNvbXBvbmVudAotICAgICAgICAgICAgICBXaGVuIGRlc2lnbmluZyBjb21wb25lbnRzIGB7
e3lpZWxkfX1gIGlzIHVzZWQgdG8gZGVub3RlIHdoZXJlLCBpbnNpZGUgdGhlIGNvbXBvbmVudCdz
Ci0gICAgICAgICAgICAgIHRlbXBsYXRlLCBhbiBvcHRpb25hbCBibG9jayBwYXNzZWQgdG8gdGhl
IGNvbXBvbmVudCBzaG91bGQgcmVuZGVyOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgICAgICAgICAgPCEtLSBhcHBsaWNhdGlvbi5oYnMgLS0+Ci0gICAgICAgICAgICAgIHt7
I2xhYmVsZWQtdGV4dGZpZWxkIHZhbHVlPXNvbWVQcm9wZXJ0eX19Ci0gICAgICAgICAgICAgICAg
Rmlyc3QgbmFtZToKLSAgICAgICAgICAgICAge3svbGFiZWxlZC10ZXh0ZmllbGR9fQotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAg
IDwhLS0gY29tcG9uZW50cy9sYWJlbGVkLXRleHRmaWVsZC5oYnMgLS0+Ci0gICAgICAgICAgICAg
IDxsYWJlbD4KLSAgICAgICAgICAgICAgICB7e3lpZWxkfX0ge3tpbnB1dCB2YWx1ZT12YWx1ZX19
Ci0gICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIFJlc3VsdDoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxsYWJl
bD4KLSAgICAgICAgICAgICAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgLz4KLSAg
ICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCB5aWVsZAotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVy
cwotICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG9wdGlvbnMKLSAgICAgICAgICAgICAgQHJl
dHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIHlpZWxkSGVscGVyKG9wdGlvbnMpIHsKLSAgICAg
ICAgICAgIHZhciB2aWV3ID0gb3B0aW9ucy5kYXRhLnZpZXc7Ci0KLSAgICAgICAgICAgIHdoaWxl
ICh2aWV3ICYmICFnZXQodmlldywgJ2xheW91dCcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZp
ZXcuX2NvbnRleHRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcgPSB2aWV3Ll9jb250
ZXh0VmlldzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2
aWV3ID0gZ2V0KHZpZXcsICdfcGFyZW50VmlldycpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FsbGVkIHlpZWxkIGlu
IGEgdGVtcGxhdGUgdGhhdCB3YXMgbm90IGEgbGF5b3V0IiwgISF2aWV3KTsKLQotICAgICAgICAg
ICAgdmlldy5feWllbGQodGhpcywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLWhhbmRsZWJhcnMvbG9hZGVyIiwKLSAgICBbImVtYmVyLWhhbmRsZWJhcnMv
Y29tcG9uZW50X2xvb2t1cCIsICJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5IiwgImVtYmVyLW1l
dGFsL2Vycm9yIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCIsICJlbWJlci1oYW5k
bGViYXJzLWNvbXBpbGVyIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kx
X18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9f
ZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICAvKmdsb2JhbHMgSGFuZGxlYmFycyAqLwotCi0gICAgICAgIHZhciBDb21wb25lbnRMb29r
dXAgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9f
ZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVw
ZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgb25Mb2FkID0gX19kZXBlbmRlbmN5
NF9fLm9uTG9hZDsKLQotICAgICAgICB2YXIgRW1iZXJIYW5kbGViYXJzID0gX19kZXBlbmRlbmN5
NV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVy
Ci0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLWhhbmRsZWJhcnMKLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEZpbmQgdGVtcGxhdGVzIHN0b3JlZCBpbiB0
aGUgaGVhZCB0YWcgYXMgc2NyaXB0IHRhZ3MgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUKLSAgICAg
ICAgICAgICAgdG8gYEVtYmVyLkNvcmVWaWV3YCBpbiB0aGUgZ2xvYmFsIGBFbWJlci5URU1QTEFU
RVNgIG9iamVjdC4gVGhpcyB3aWxsIGJlIHJ1bgotICAgICAgICAgICAgICBhcyBhcyBqUXVlcnkg
RE9NLXJlYWR5IGNhbGxiYWNrLgotCi0gICAgICAgICAgICAgIFNjcmlwdCB0YWdzIHdpdGggYHRl
eHQveC1oYW5kbGViYXJzYCB3aWxsIGJlIGNvbXBpbGVkCi0gICAgICAgICAgICAgIHdpdGggRW1i
ZXIncyBIYW5kbGViYXJzIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBhIHZpZXcncyB0ZW1w
bGF0ZS4KLSAgICAgICAgICAgICAgVGhvc2Ugd2l0aCB0eXBlIGB0ZXh0L3gtcmF3LWhhbmRsZWJh
cnNgIHdpbGwgYmUgY29tcGlsZWQgd2l0aCByZWd1bGFyCi0gICAgICAgICAgICAgIEhhbmRsZWJh
cnMgYW5kIGFyZSBzdWl0YWJsZSBmb3IgdXNlIGluIHZpZXdzJyBjb21wdXRlZCBwcm9wZXJ0aWVz
LgotCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEBtZXRob2QgYm9vdHN0
cmFwCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycwotICAgICAgICAgICAgICBA
c3RhdGljCi0gICAgICAgICAgICAgIEBwYXJhbSBjdHgKLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGJvb3RzdHJhcChjdHgpIHsKLSAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSAn
c2NyaXB0W3R5cGU9InRleHQveC1oYW5kbGViYXJzIl0sIHNjcmlwdFt0eXBlPSJ0ZXh0L3gtcmF3
LWhhbmRsZWJhcnMiXSc7Ci0KLSAgICAgICAgICAgIGpRdWVyeShzZWxlY3RvcnMsIGN0eCkKLSAg
ICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIEdldCBhIHJl
ZmVyZW5jZSB0byB0aGUgc2NyaXB0IHRhZwotICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPSBq
UXVlcnkodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29tcGlsZSA9IChzY3JpcHQuYXR0
cigndHlwZScpID09PSAndGV4dC94LXJhdy1oYW5kbGViYXJzJykgPwotICAgICAgICAgICAgICAg
IGpRdWVyeS5wcm94eShIYW5kbGViYXJzLmNvbXBpbGUsIEhhbmRsZWJhcnMpIDoKLSAgICAgICAg
ICAgICAgICBqUXVlcnkucHJveHkoRW1iZXJIYW5kbGViYXJzLmNvbXBpbGUsIEVtYmVySGFuZGxl
YmFycyksCi0gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQsIHVz
ZWQgYnkgRW1iZXIuVmlldydzIHRlbXBsYXRlTmFtZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAg
ICAvLyBGaXJzdCBsb29rIGZvciBkYXRhLXRlbXBsYXRlLW5hbWUgYXR0cmlidXRlLCB0aGVuIGZh
bGwgYmFjayB0byBpdHMKLSAgICAgICAgICAgICAgICAvLyBpZCBpZiBubyBuYW1lIGlzIGZvdW5k
LgotICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZSA9IHNjcmlwdC5hdHRyKCdkYXRhLXRlbXBs
YXRlLW5hbWUnKSB8fCBzY3JpcHQuYXR0cignaWQnKSB8fCAnYXBwbGljYXRpb24nLAotICAgICAg
ICAgICAgICAgIHRlbXBsYXRlID0gY29tcGlsZShzY3JpcHQuaHRtbCgpKTsKLQotICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHRlbXBsYXRlIG9mIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cwot
ICAgICAgICAgICAgICAgIGlmIChFbWJlci5URU1QTEFURVNbdGVtcGxhdGVOYW1lXSAhPT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCdUZW1w
bGF0ZSBuYW1lZCAiJyArIHRlbXBsYXRlTmFtZSArICciIGFscmVhZHkgZXhpc3RzLicpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZvciB0ZW1wbGF0ZXMgd2hpY2gg
aGF2ZSBhIG5hbWUsIHdlIHNhdmUgdGhlbSBhbmQgdGhlbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBE
T00KLSAgICAgICAgICAgICAgICBFbWJlci5URU1QTEFURVNbdGVtcGxhdGVOYW1lXSA9IHRlbXBs
YXRlOwotCi0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHNjcmlwdCB0YWcgZnJvbSBET00KLSAg
ICAgICAgICAgICAgICBzY3JpcHQucmVtb3ZlKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIF9ib290c3RyYXAoKSB7Ci0gICAgICAgICAgICBib290c3Ry
YXAoIGpRdWVyeShkb2N1bWVudCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJl
Z2lzdGVyQ29tcG9uZW50TG9va3VwKGNvbnRhaW5lcikgewotICAgICAgICAgICAgY29udGFpbmVy
LnJlZ2lzdGVyKCdjb21wb25lbnQtbG9va3VwOm1haW4nLCBDb21wb25lbnRMb29rdXApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICAgICAgV2UgdGllIHRoaXMgdG8gYXBwbGlj
YXRpb24ubG9hZCB0byBlbnN1cmUgdGhhdCB3ZSd2ZSBhdCBsZWFzdAotICAgICAgICAgICAgICBh
dHRlbXB0ZWQgdG8gYm9vdHN0cmFwIGF0IHRoZSBwb2ludCB0aGF0IHRoZSBhcHBsaWNhdGlvbiBp
cyBsb2FkZWQuCi0KLSAgICAgICAgICAgICAgV2UgYWxzbyB0aWUgdGhpcyB0byBkb2N1bWVudCBy
ZWFkeSBzaW5jZSB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgYWxsCi0gICAgICAgICAgICAgIHRoZSBp
bmxpbmUgdGVtcGxhdGVzIGFyZSBwcmVzZW50IGF0IHRoaXMgcG9pbnQuCi0KLSAgICAgICAgICAg
ICAgVGhlcmUncyBubyBoYXJtIHRvIHJ1bm5pbmcgdGhpcyB0d2ljZSwgc2luY2Ugd2UgcmVtb3Zl
IHRoZSB0ZW1wbGF0ZXMKLSAgICAgICAgICAgICAgZnJvbSB0aGUgRE9NIGFmdGVyIHByb2Nlc3Np
bmcuCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIG9uTG9hZCgnRW1iZXIuQXBwbGljYXRpb24n
LCBmdW5jdGlvbihBcHBsaWNhdGlvbikgewotICAgICAgICAgICAgQXBwbGljYXRpb24uaW5pdGlh
bGl6ZXIoewotICAgICAgICAgICAgICAgIG5hbWU6ICdkb21UZW1wbGF0ZXMnLAotICAgICAgICAg
ICAgICAgIGluaXRpYWxpemU6IF9ib290c3RyYXAKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgbmFtZTogJ3Jl
Z2lzdGVyQ29tcG9uZW50TG9va3VwJywKLSAgICAgICAgICAgICAgICBhZnRlcjogJ2RvbVRlbXBs
YXRlcycsCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogcmVnaXN0ZXJDb21wb25lbnRMb29r
dXAKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9ydHNfX1si
ZGVmYXVsdCJdID0gYm9vdHN0cmFwOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxl
YmFycy9zdHJpbmciLAotICAgIFsiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLy8gcmVxdWlyZWQgc28gd2UgY2FuIGV4dGVuZCB0
aGlzIG9iamVjdC4KLSAgICAgICAgdmFyIEVtYmVyU3RyaW5nVXRpbHMgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgTWFyayBhIHN0cmlu
ZyBhcyBzYWZlIGZvciB1bmVzY2FwZWQgb3V0cHV0IHdpdGggSGFuZGxlYmFycy4gSWYgeW91Ci0g
ICAgICAgICAgICAgIHJldHVybiBIVE1MIGZyb20gYSBIYW5kbGViYXJzIGhlbHBlciwgdXNlIHRo
aXMgZnVuY3Rpb24gdG8KLSAgICAgICAgICAgICAgZW5zdXJlIEhhbmRsZWJhcnMgZG9lcyBub3Qg
ZXNjYXBlIHRoZSBIVE1MLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgRW1iZXIuU3RyaW5nLmh0bWxTYWZlKCc8ZGl2PnNvbWVTdHJpbmc8L2Rpdj4nKQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGh0bWxTYWZlCi0gICAgICAg
ICAgICAgIEBmb3IgRW1iZXIuU3RyaW5nCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAg
ICAgICAgQHJldHVybiB7SGFuZGxlYmFycy5TYWZlU3RyaW5nfSBhIHN0cmluZyB0aGF0IHdpbGwg
bm90IGJlIGh0bWwgZXNjYXBlZCBieSBIYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBodG1sU2FmZShzdHIpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSGFuZGxl
YmFycy5TYWZlU3RyaW5nKHN0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBFbWJlclN0cmluZ1V0
aWxzLmh0bWxTYWZlID0gaHRtbFNhZmU7Ci0gICAgICAgIGlmIChFbWJlci5FWFRFTkRfUFJPVE9U
WVBFUyA9PT0gdHJ1ZSB8fCBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmcpIHsKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIE1hcmsgYSBzdHJpbmcgYXMgYmVpbmcg
c2FmZSBmb3IgdW5lc2NhcGVkIG91dHB1dCB3aXRoIEhhbmRsZWJhcnMuCi0KLSAgICAgICAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICAnPGRpdj5zb21lU3Ry
aW5nPC9kaXY+Jy5odG1sU2FmZSgpCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIFNlZSBbRW1iZXIuU3RyaW5nLmh0bWxTYWZlXSgvYXBpL2NsYXNzZXMvRW1i
ZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2h0bWxTYWZlKS4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGh0bWxTYWZlCi0gICAgICAgICAgICAgICAgICAgIEBmb3IgU3RyaW5nCi0gICAgICAg
ICAgICAgICAgICAgIEByZXR1cm4ge0hhbmRsZWJhcnMuU2FmZVN0cmluZ30gYSBzdHJpbmcgdGhh
dCB3aWxsIG5vdCBiZSBodG1sIGVzY2FwZWQgYnkgSGFuZGxlYmFycwotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUuaHRtbFNhZmUgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFNhZmUodGhpcyk7Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGh0bWxTYWZl
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItaGFuZGxlYmFycy92aWV3cy9oYW5kbGViYXJz
X2JvdW5kX3ZpZXciLAotICAgIFsiZW1iZXItaGFuZGxlYmFycy1jb21waWxlciIsICJlbWJlci1t
ZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dl
dCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1i
ZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItdmlld3Mv
dmlld3MvdmlldyIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMiLCAiZW1iZXItaGFuZGxlYmFy
cy92aWV3cy9tZXRhbW9ycGhfdmlldyIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJleHBvcnRz
Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVw
ZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5j
eTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywg
X19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKmdsb2JhbHMgSGFu
ZGxlYmFycywgTWV0YW1vcnBoOnRydWUgKi8KLSAgICAgICAgLypqc2hpbnQgbmV3Y2FwOmZhbHNl
Ki8KLQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAg
IHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXJIYW5kbGViYXJzLlNhZmVTdHJpbmc7Ci0gICAgICAgIHZhciBTYWZlU3RyaW5n
ID0gRW1iZXJIYW5kbGViYXJzLlNhZmVTdHJpbmc7Ci0KLSAgICAgICAgdmFyIEVtYmVyID0gX19k
ZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLksKLSAgICAgICAgdmFy
IEsgPSBFbWJlci5LOwotCi0gICAgICAgIHZhciBNZXRhbW9ycGggPSByZXF1aXJlTW9kdWxlKCdt
ZXRhbW9ycGgnKTsKLQotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTNfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5NF9fLmdldDsKLSAgICAg
ICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTVfXy5zZXQ7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9f
ZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5
N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeThfXy5j
b21wdXRlZDsKLSAgICAgICAgdmFyIFZpZXcgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIGNsb25lU3RhdGVzID0gX19kZXBlbmRlbmN5MTBfXy5jbG9uZVN0YXRlczsK
LSAgICAgICAgdmFyIHN0YXRlcyA9IF9fZGVwZW5kZW5jeTEwX18uc3RhdGVzOwotICAgICAgICB2
YXIgdmlld1N0YXRlcyA9IHN0YXRlczsKLQotICAgICAgICB2YXIgX01ldGFtb3JwaFZpZXcgPSBf
X2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoYW5kbGViYXJzR2V0ID0g
X19kZXBlbmRlbmN5MTJfXy5oYW5kbGViYXJzR2V0OwotCi0gICAgICAgIGZ1bmN0aW9uIFNpbXBs
ZUhhbmRsZWJhcnNWaWV3KHBhdGgsIHBhdGhSb290LCBpc0VzY2FwZWQsIHRlbXBsYXRlRGF0YSkg
ewotICAgICAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKLSAgICAgICAgICAgIHRoaXMucGF0aFJv
b3QgPSBwYXRoUm9vdDsKLSAgICAgICAgICAgIHRoaXMuaXNFc2NhcGVkID0gaXNFc2NhcGVkOwot
ICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZURhdGE7Ci0KLSAgICAgICAg
ICAgIHRoaXMuX2xhc3ROb3JtYWxpemVkVmFsdWUgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB0
aGlzLm1vcnBoID0gTWV0YW1vcnBoKCk7Ci0gICAgICAgICAgICB0aGlzLnN0YXRlID0gJ3ByZVJl
bmRlcic7Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZUlkID0gbnVsbDsKLSAgICAgICAgICAgIHRo
aXMuX3BhcmVudFZpZXcgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBudWxsOwot
ICAgICAgICB9Ci0KLSAgICAgICAgU2ltcGxlSGFuZGxlYmFyc1ZpZXcucHJvdG90eXBlID0gewot
ICAgICAgICAgICAgaXNWaXJ0dWFsOiB0cnVlLAotICAgICAgICAgICAgaXNWaWV3OiB0cnVlLAot
Ci0gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMudXBkYXRlSWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuLmNhbmNlbCh0aGlzLnVw
ZGF0ZUlkKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJZCA9IG51bGw7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnRWaWV3KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudFZpZXcucmVtb3ZlQ2hpbGQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMubW9ycGggPSBudWxsOwotICAg
ICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZGVzdHJveWVkJzsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZTogSywKLQotICAgICAgICAgICAgcHJvcGVy
dHlEaWRDaGFuZ2U6IEssCi0KLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZTogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7Ci0gICAgICAgICAgICAg
ICAgdmFyIHBhdGhSb290ID0gdGhpcy5wYXRoUm9vdDsKLSAgICAgICAgICAgICAgICB2YXIgcmVz
dWx0LCB0ZW1wbGF0ZURhdGE7Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHBhdGhSb290
IGFzIHRoZSByZXN1bHQgaWYgbm8gcGF0aCBpcyBwcm92aWRlZC4gVGhpcwotICAgICAgICAgICAg
ICAgIC8vIGhhcHBlbnMgaWYgdGhlIHBhdGggaXMgYHRoaXNgLCB3aGljaCBnZXRzIG5vcm1hbGl6
ZWQgaW50bwotICAgICAgICAgICAgICAgIC8vIGEgYHBhdGhSb290YCBvZiB0aGUgY3VycmVudCBI
YW5kbGViYXJzIGNvbnRleHQgYW5kIGEgcGF0aAotICAgICAgICAgICAgICAgIC8vIG9mIGAnJ2Au
Ci0gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHBhdGhSb290OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBsYXRlRGF0YSA9IHRoaXMudGVtcGxhdGVEYXRhOwotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBoYW5kbGViYXJzR2V0KHBhdGhSb290LCBwYXRoLCB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhOiB0ZW1wbGF0ZURhdGEgCi0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW5kZXJUb0J1ZmZlcjogZnVuY3Rpb24o
YnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0cmluZyA9ICcnOwotCi0gICAgICAgICAg
ICAgICAgc3RyaW5nICs9IHRoaXMubW9ycGguc3RhcnRUYWcoKTsKLSAgICAgICAgICAgICAgICBz
dHJpbmcgKz0gdGhpcy5yZW5kZXIoKTsKLSAgICAgICAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5t
b3JwaC5lbmRUYWcoKTsKLQotICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHN0cmluZyk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSWYgbm90IGludm9rZWQgdmlhIGEgdHJpcGxlLW11c3RhY2hlICh7
e3tmb299fX0pLCBlc2NhcGUKLSAgICAgICAgICAgICAgICAvLyB0aGUgY29udGVudCBvZiB0aGUg
dGVtcGxhdGUuCi0gICAgICAgICAgICAgICAgdmFyIGVzY2FwZSA9IHRoaXMuaXNFc2NhcGVkOwot
ICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSB8fCB0aGlzLm5vcm1hbGl6ZWRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuX2xhc3ROb3JtYWxpemVkVmFsdWUgPSByZXN1bHQ7
Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVm
aW5lZCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiIjsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgU2FmZVN0cmluZykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBIYW5kbGViYXJzLlV0aWxzLmVzY2FwZUV4cHJlc3Npb24ocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHJlcmVuZGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRoaXMuc3RhdGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICdwcmVSZW5kZXInOgot
ICAgICAgICAgICAgICAgIGNhc2UgJ2Rlc3Ryb3llZCc6Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ2luQnVmZmVyJzoKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIlNvbWV0aGluZyB5b3UgZGlkIHRyaWVkIHRvIHJlcGxh
Y2UgYW4ge3tleHByZXNzaW9ufX0gYmVmb3JlIGl0IHdhcyBpbnNlcnRlZCBpbnRvIHRoZSBET00u
Iik7Ci0gICAgICAgICAgICAgICAgY2FzZSAnaGFzRWxlbWVudCc6Ci0gICAgICAgICAgICAgICAg
Y2FzZSAnaW5ET00nOgotICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlkID0gcnVuLnNj
aGVkdWxlT25jZSgncmVuZGVyJywgdGhpcywgJ3VwZGF0ZScpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSWQgPSBudWxsOwotICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IHRoaXMubm9ybWFsaXplZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlICE9PSB0aGlzLl9sYXN0Tm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMubW9ycGguaHRtbCh0aGlzLnJlbmRlcih2YWx1ZSkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF90cmFuc2l0aW9uVG86IGZ1bmN0aW9uKHN0
YXRlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRlcyA9IGNsb25lU3RhdGVzKHZpZXdTdGF0ZXMp
OwotCi0gICAgICAgIG1lcmdlKHN0YXRlcy5fZGVmYXVsdCwgewotICAgICAgICAgICAgcmVyZW5k
ZXJJZk5lZWRlZDogSwotICAgICAgICB9KTsKLQotICAgICAgICBtZXJnZShzdGF0ZXMuaW5ET00s
IHsKLSAgICAgICAgICAgIHJlcmVuZGVySWZOZWVkZWQ6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodmlldy5ub3JtYWxpemVkVmFsdWUoKSAhPT0gdmlldy5fbGFzdE5vcm1h
bGl6ZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICB2aWV3LnJlcmVuZGVyKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgYEVtYmVyLl9IYW5kbGViYXJzQm91bmRWaWV3YCBpcyBhIHByaXZhdGUg
dmlldyBjcmVhdGVkIGJ5IHRoZSBIYW5kbGViYXJzCi0gICAgICAgICAgICAgIGB7e2JpbmR9fWAg
aGVscGVycyB0aGF0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBib3VuZCBwcm9wZXJ0aWVzLgot
Ci0gICAgICAgICAgICAgIEV2ZXJ5IHRpbWUgYSBwcm9wZXJ0eSBpcyBib3VuZCB1c2luZyBhIGB7
e211c3RhY2hlfX1gLCBhbiBhbm9ueW1vdXMgc3ViY2xhc3MKLSAgICAgICAgICAgICAgb2YgYEVt
YmVyLl9IYW5kbGViYXJzQm91bmRWaWV3YCBpcyBjcmVhdGVkIHdpdGggdGhlIGFwcHJvcHJpYXRl
IHN1Yi10ZW1wbGF0ZQotICAgICAgICAgICAgICBhbmQgY29udGV4dCBzZXQgdXAuIFdoZW4gdGhl
IGFzc29jaWF0ZWQgcHJvcGVydHkgY2hhbmdlcywganVzdCB0aGUgdGVtcGxhdGUKLSAgICAgICAg
ICAgICAgZm9yIHRoaXMgdmlldyB3aWxsIHJlLXJlbmRlci4KLQotICAgICAgICAgICAgICBAY2xh
c3MgX0hhbmRsZWJhcnNCb3VuZFZpZXcKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5fTWV0YW1vcnBoVmlldwotICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIF9IYW5kbGViYXJzQm91bmRW
aWV3ID0gX01ldGFtb3JwaFZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgIGluc3RydW1lbnROYW1l
OiAnYm91bmRIYW5kbGViYXJzJywKLQotICAgICAgICAgICAgX3N0YXRlczogc3RhdGVzLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHVzZWQgdG8g
ZGV0ZXJtaW5lIGlmIHRoZSBgZGlzcGxheVRlbXBsYXRlYCBvcgotICAgICAgICAgICAgICAgICAg
ICBgaW52ZXJzZVRlbXBsYXRlYCBzaG91bGQgYmUgcmVuZGVyZWQuIFRoaXMgc2hvdWxkIGJlIGEg
ZnVuY3Rpb24gdGhhdCB0YWtlcwotICAgICAgICAgICAgICAgICAgICBhIHZhbHVlIGFuZCByZXR1
cm5zIGEgQm9vbGVhbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgc2hvdWxkRGlz
cGxheUZ1bmMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRnVuY3Rpb24KLSAgICAgICAgICAg
ICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHNob3VsZERpc3BsYXlGdW5jOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgV2hldGhlciB0aGUgdGVtcGxhdGUgcmVuZGVyZWQgYnkgdGhpcyB2aWV3IGdldHMg
cGFzc2VkIHRoZSBjb250ZXh0IG9iamVjdAotICAgICAgICAgICAgICAgICAgICBvZiBpdHMgcGFy
ZW50IHRlbXBsYXRlLCBvciBnZXRzIHBhc3NlZCB0aGUgdmFsdWUgb2YgcmV0cmlldmluZyBgcGF0
aGAKLSAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYHBhdGhSb290YC4KLQotICAgICAgICAg
ICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBpcyB0cnVlIHdoZW4gdXNpbmcgdGhlIGB7eyNp
Zn19YCBoZWxwZXIsIGJlY2F1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIGlu
c2lkZSB0aGUgaGVscGVyIHNob3VsZCBsb29rIHVwIHByb3BlcnRpZXMgcmVsYXRpdmUgdG8gdGhl
IHNhbWUKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGFzIG91dHNpZGUgdGhlIGJsb2NrLiBU
aGlzIHdvdWxkIGJlIGBmYWxzZWAgd2hlbiB1c2VkIHdpdGggYHt7I3dpdGgKLSAgICAgICAgICAg
ICAgICAgICAgZm9vfX1gIGJlY2F1c2UgdGhlIHRlbXBsYXRlIHNob3VsZCByZWNlaXZlIHRoZSBv
YmplY3QgZm91bmQgYnkgZXZhbHVhdGluZwotICAgICAgICAgICAgICAgICAgICBgZm9vYC4KLQot
ICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcHJlc2VydmVDb250ZXh0Ci0gICAgICAgICAg
ICAgICAgICAgIEB0eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgZmFs
c2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcmVzZXJ2ZUNvbnRleHQ6IGZh
bHNlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSWYgYHByZXNlcnZl
Q29udGV4dGAgaXMgdHJ1ZSwgdGhpcyBpcyB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB1c2VkCi0g
ICAgICAgICAgICAgICAgICAgIHRvIHJlbmRlciB0aGUgdGVtcGxhdGUuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByb3BlcnR5IHByZXZpb3VzQ29udGV4dAotICAgICAgICAgICAgICAgICAgICBA
dHlwZSBPYmplY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcmV2aW91c0Nv
bnRleHQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUg
dGVtcGxhdGUgdG8gcmVuZGVyIHdoZW4gYHNob3VsZERpc3BsYXlGdW5jYCBldmFsdWF0ZXMgdG8g
YHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBkaXNwbGF5VGVtcGxhdGUK
LSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAg
QGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRpc3BsYXlU
ZW1wbGF0ZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRo
ZSB0ZW1wbGF0ZSB0byByZW5kZXIgd2hlbiBgc2hvdWxkRGlzcGxheUZ1bmNgIGV2YWx1YXRlcyB0
byBgZmFsc2VgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpbnZlcnNlVGVtcGxh
dGUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludmVy
c2VUZW1wbGF0ZTogbnVsbCwKLQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgVGhlIHBhdGggdG8gbG9vayB1cCBvbiBgcGF0aFJvb3RgIHRoYXQgaXMgcGFzc2VkIHRvCi0g
ICAgICAgICAgICAgICAgICAgIGBzaG91bGREaXNwbGF5RnVuY2AgdG8gZGV0ZXJtaW5lIHdoaWNo
IHRlbXBsYXRlIHRvIHJlbmRlci4KLQotICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwg
aWYgYHByZXNlcnZlQ29udGV4dGAgaXMgYGZhbHNlLGAgdGhlIG9iamVjdCBhdCB0aGlzIHBhdGgg
d2lsbAotICAgICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlIHdoZW4g
cmVuZGVyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBwYXRoCi0gICAgICAg
ICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBu
dWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGF0aDogbnVsbCwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0
aGUgYHBhdGhgIHdpbGwgYmUgbG9va2VkIHVwLiBTb21ldGltZXMgdGhpcyBpcyB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUgYHByZXZpb3VzQ29udGV4dGAsIGJ1dCBpbiBjYXNl
cyB3aGVyZSB0aGlzIHZpZXcgaGFzIGJlZW4KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVk
IGZvciBwYXRocyB0aGF0IHN0YXJ0IHdpdGggYSBrZXl3b3JkIHN1Y2ggYXMgYHZpZXdgIG9yCi0g
ICAgICAgICAgICAgICAgICAgIGBjb250cm9sbGVyYCwgdGhlIHBhdGggcm9vdCB3aWxsIGJlIHRo
YXQgcmVzb2x2ZWQgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBwYXRo
Um9vdAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBPYmplY3QKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBwYXRoUm9vdDogbnVsbCwKLQotICAgICAgICAgICAgbm9ybWFsaXpl
ZFZhbHVlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGdldCh0aGlz
LCAncGF0aCcpLAotICAgICAgICAgICAgICAgIHBhdGhSb290ID0gZ2V0KHRoaXMsICdwYXRoUm9v
dCcpLAotICAgICAgICAgICAgICAgIHZhbHVlTm9ybWFsaXplciA9IGdldCh0aGlzLCAndmFsdWVO
b3JtYWxpemVyRnVuYycpLAotICAgICAgICAgICAgICAgIHJlc3VsdCwgdGVtcGxhdGVEYXRhOwot
Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBwYXRoUm9vdCBhcyB0aGUgcmVzdWx0IGlmIG5v
IHBhdGggaXMgcHJvdmlkZWQuIFRoaXMKLSAgICAgICAgICAgICAgICAvLyBoYXBwZW5zIGlmIHRo
ZSBwYXRoIGlzIGB0aGlzYCwgd2hpY2ggZ2V0cyBub3JtYWxpemVkIGludG8KLSAgICAgICAgICAg
ICAgICAvLyBhIGBwYXRoUm9vdGAgb2YgdGhlIGN1cnJlbnQgSGFuZGxlYmFycyBjb250ZXh0IGFu
ZCBhIHBhdGgKLSAgICAgICAgICAgICAgICAvLyBvZiBgJydgLgotICAgICAgICAgICAgICAgIGlm
IChwYXRoID09PSAnJykgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXRoUm9vdDsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURh
dGEgPSBnZXQodGhpcywgJ3RlbXBsYXRlRGF0YScpOwotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBoYW5kbGViYXJzR2V0KHBhdGhSb290LCBwYXRoLCB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhOiB0ZW1wbGF0ZURhdGEgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZU5vcm1hbGl6ZXIgPyB2
YWx1ZU5vcm1hbGl6ZXIocmVzdWx0KSA6IHJlc3VsdDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIHJlcmVuZGVySWZOZWVkZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRo
aXMuY3VycmVudFN0YXRlLnJlcmVuZGVySWZOZWVkZWQodGhpcyk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGljaCB0
ZW1wbGF0ZSB0byBpbnZva2UsIHNldHMgdXAgdGhlIGNvcnJlY3Qgc3RhdGUgYmFzZWQgb24KLSAg
ICAgICAgICAgICAgICAgICAgdGhhdCBsb2dpYywgdGhlbiBpbnZva2VzIHRoZSBkZWZhdWx0IGBF
bWJlci5WaWV3YCBgcmVuZGVyYCBpbXBsZW1lbnRhdGlvbi4KLQotICAgICAgICAgICAgICAgICAg
ICBUaGlzIG1ldGhvZCB3aWxsIGZpcnN0IGxvb2sgdXAgdGhlIGBwYXRoYCBrZXkgb24gYHBhdGhS
b290YCwKLSAgICAgICAgICAgICAgICAgICAgdGhlbiBwYXNzIHRoYXQgdmFsdWUgdG8gdGhlIGBz
aG91bGREaXNwbGF5RnVuY2AgZnVuY3Rpb24uIElmIHRoYXQgcmV0dXJucwotICAgICAgICAgICAg
ICAgICAgICBgdHJ1ZSxgIHRoZSBgZGlzcGxheVRlbXBsYXRlYCBmdW5jdGlvbiB3aWxsIGJlIHJl
bmRlcmVkIHRvIERPTS4gT3RoZXJ3aXNlLAotICAgICAgICAgICAgICAgICAgICBgaW52ZXJzZVRl
bXBsYXRlYCwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIHJlbmRlcmVkLgotCi0gICAgICAgICAgICAg
ICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGlzIGBFbWJlci5fSGFuZGxlYmFyc0JvdW5kVmlld2Ag
cmVwcmVzZW50ZWQgdGhlIGB7eyN3aXRoCi0gICAgICAgICAgICAgICAgICAgIGZvb319YCBoZWxw
ZXIsIGl0IHdvdWxkIGxvb2sgdXAgdGhlIGBmb29gIHByb3BlcnR5IG9mIGl0cyBjb250ZXh0LCBh
bmQKLSAgICAgICAgICAgICAgICAgICAgYHNob3VsZERpc3BsYXlGdW5jYCB3b3VsZCBhbHdheXMg
cmV0dXJuIHRydWUuIFRoZSBvYmplY3QgZm91bmQgYnkgbG9va2luZwotICAgICAgICAgICAgICAg
ICAgICB1cCBgZm9vYCB3b3VsZCBiZSBwYXNzZWQgdG8gYGRpc3BsYXlUZW1wbGF0ZWAuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW5kZXIKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtFbWJlci5SZW5kZXJCdWZmZXJ9IGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24oYnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgLy8g
SWYgbm90IGludm9rZWQgdmlhIGEgdHJpcGxlLW11c3RhY2hlICh7e3tmb299fX0pLCBlc2NhcGUK
LSAgICAgICAgICAgICAgICAvLyB0aGUgY29udGVudCBvZiB0aGUgdGVtcGxhdGUuCi0gICAgICAg
ICAgICAgICAgdmFyIGVzY2FwZSA9IGdldCh0aGlzLCAnaXNFc2NhcGVkJyk7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgc2hvdWxkRGlzcGxheSA9IGdldCh0aGlzLCAnc2hvdWxkRGlzcGxheUZ1bmMn
KSwKLSAgICAgICAgICAgICAgICBwcmVzZXJ2ZUNvbnRleHQgPSBnZXQodGhpcywgJ3ByZXNlcnZl
Q29udGV4dCcpLAotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXQodGhpcywgJ3ByZXZpb3Vz
Q29udGV4dCcpOwotCi0gICAgICAgICAgICAgICAgdmFyIGludmVyc2VUZW1wbGF0ZSA9IGdldCh0
aGlzLCAnaW52ZXJzZVRlbXBsYXRlJyksCi0gICAgICAgICAgICAgICAgZGlzcGxheVRlbXBsYXRl
ID0gZ2V0KHRoaXMsICdkaXNwbGF5VGVtcGxhdGUnKTsKLQotICAgICAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSB0aGlzLm5vcm1hbGl6ZWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuX2xh
c3ROb3JtYWxpemVkVmFsdWUgPSByZXN1bHQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBGaXJzdCwg
dGVzdCB0aGUgY29uZGl0aW9uYWwgdG8gc2VlIGlmIHdlIHNob3VsZAotICAgICAgICAgICAgICAg
IC8vIHJlbmRlciB0aGUgdGVtcGxhdGUgb3Igbm90LgotICAgICAgICAgICAgICAgIGlmIChzaG91
bGREaXNwbGF5KHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICd0ZW1w
bGF0ZScsIGRpc3BsYXlUZW1wbGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIHByZXNlcnZpbmcgdGhlIGNvbnRleHQgKGZvciBleGFtcGxlLCBpZiB0aGlzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGlzIGFuICNpZiBibG9jaywgY2FsbCB0aGUgdGVtcGxhdGUgd2l0aCB0
aGUgc2FtZSBvYmplY3QuCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUNvbnRleHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnX2NvbnRleHQnLCBjb250ZXh0
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSwgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBibG9jayBiaW5kIG9yIG5vdC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHNvLCBwYXNzIHRoZSBzcGVjaWZpZWQgb2Jq
ZWN0IHRvIHRoZSB0ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXlU
ZW1wbGF0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnX2NvbnRl
eHQnLCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIGJpbmQgYmxvY2ssIGp1c3QgcHVz
aCB0aGUgcmVzdWx0IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cHJl
c3Npb24gdG8gdGhlIHJlbmRlciBjb250ZXh0IGFuZCByZXR1cm4uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiIjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgU2FmZVN0
cmluZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5n
KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBIYW5kbGViYXJzLlV0aWxzLmVzY2FwZUV4cHJlc3Npb24ocmVzdWx0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLnB1c2gocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGludmVyc2VUZW1wbGF0ZSkgewotICAgICAgICAgICAg
ICAgICAgICBzZXQodGhpcywgJ3RlbXBsYXRlJywgaW52ZXJzZVRlbXBsYXRlKTsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAocHJlc2VydmVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzZXQodGhpcywgJ19jb250ZXh0JywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQodGhpcywgJ19jb250ZXh0Jywg
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCAndGVtcGxhdGUnLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1
cGVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhw
b3J0c19fLl9IYW5kbGViYXJzQm91bmRWaWV3ID0gX0hhbmRsZWJhcnNCb3VuZFZpZXc7Ci0gICAg
ICAgIF9fZXhwb3J0c19fLlNpbXBsZUhhbmRsZWJhcnNWaWV3ID0gU2ltcGxlSGFuZGxlYmFyc1Zp
ZXc7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1oYW5kbGViYXJzL3ZpZXdzL21ldGFtb3Jw
aF92aWV3IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlf
Z2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci12aWV3cy92aWV3cy9jb3Jl
X3ZpZXciLCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJlbWJlci1tZXRhbC9taXhpbiIsICJl
bWJlci1tZXRhbC9ydW5fbG9vcCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9f
LCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qIGdsb2JhbCBNZXRh
bW9ycGg6dHJ1ZSAqLwotCi0gICAgICAgIC8qanNoaW50IG5ld2NhcDpmYWxzZSovCi0gICAgICAg
IHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJl
ci5kZXByZWNhdGUKLSAgICAgICAgLy8gdmFyIGVtYmVyRGVwcmVjYXRlID0gRW1iZXIuZGVwcmVj
YXRlOwotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2
YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIENvcmVW
aWV3ID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBWaWV3ID0gX19k
ZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5j
eTZfXy5NaXhpbjsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJd
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAg
QHN1Ym1vZHVsZSBlbWJlci1oYW5kbGViYXJzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZh
ciBNZXRhbW9ycGggPSByZXF1aXJlTW9kdWxlKCdtZXRhbW9ycGgnKTsKLQotICAgICAgICBmdW5j
dGlvbiBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpIHsKLSAgICAgICAgICAgIHJ1bi5vbmNlKFZp
ZXcsICdub3RpZnlNdXRhdGlvbkxpc3RlbmVycycpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RE9NTWFuYWdlciBzaG91bGQganVzdCBhYnN0cmFjdCBkb20gbWFuaXB1bGF0aW9uIGJldHdlZW4g
anF1ZXJ5IGFuZCBtZXRhbW9ycGgKLSAgICAgICAgdmFyIERPTU1hbmFnZXIgPSB7Ci0gICAgICAg
ICAgICByZW1vdmU6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3Lm1vcnBo
LnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBwcmVwZW5kOiBmdW5jdGlvbih2aWV3LCBodG1s
KSB7Ci0gICAgICAgICAgICAgICAgdmlldy5tb3JwaC5wcmVwZW5kKGh0bWwpOwotICAgICAgICAg
ICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBhZnRlcjogZnVuY3Rpb24odmlldywgaHRtbCkgewotICAgICAgICAgICAgICAgIHZp
ZXcubW9ycGguYWZ0ZXIoaHRtbCk7Ci0gICAgICAgICAgICAgICAgbm90aWZ5TXV0YXRpb25MaXN0
ZW5lcnMoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGh0bWw6IGZ1bmN0aW9uKHZp
ZXcsIGh0bWwpIHsKLSAgICAgICAgICAgICAgICB2aWV3Lm1vcnBoLmh0bWwoaHRtbCk7Ci0gICAg
ICAgICAgICAgICAgbm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMoKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgbWVzc2VkIHVwLgotICAgICAgICAgICAgcmVwbGFjZTog
ZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgIHZhciBtb3JwaCA9IHZpZXcubW9ycGg7
Ci0KLSAgICAgICAgICAgICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ3ByZVJlbmRlcicpOwotCi0g
ICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlKCdyZW5kZXInLCB0aGlzLCBmdW5jdGlvbiByZW5k
ZXJNZXRhbW9ycGhWaWV3KCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmlldy5pc0Rlc3Ry
b3lpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZpZXcuY2xlYXJSZW5kZXJlZENoaWxkcmVu
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB2aWV3LnJlbmRlclRvQnVmZmVy
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmlldy5pbnZva2VSZWN1cnNpdmVseShmdW5jdGlv
bih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnByb3BlcnR5V2lsbENoYW5n
ZSgnZWxlbWVudCcpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgdmlldy50cmlnZ2VyUmVjdXJzaXZlbHkoJ3dpbGxJbnNlcnRFbGVtZW50Jyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgbW9ycGgucmVwbGFjZVdpdGgoYnVmZmVyLnN0cmluZygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmlldy5fdHJhbnNpdGlvblRvKCdpbkRPTScpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHZpZXcuaW52b2tlUmVjdXJzaXZlbHkoZnVuY3Rpb24odmlldykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmlldy5wcm9wZXJ0eURpZENoYW5nZSgnZWxlbWVudCcpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgdmlldy50cmlnZ2VyUmVj
dXJzaXZlbHkoJ2RpZEluc2VydEVsZW1lbnQnKTsKLQotICAgICAgICAgICAgICAgICAgICBub3Rp
ZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAg
ICB2aWV3Lm1vcnBoLmh0bWwoIiIpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlz
dGVuZXJzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gVGhlIGBt
b3JwaGAgYW5kIGBvdXRlckhUTUxgIHByb3BlcnRpZXMgYXJlIGludGVybmFsIG9ubHkKLSAgICAg
ICAgLy8gYW5kIG5vdCBvYnNlcnZhYmxlLgotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBA
Y2xhc3MgX01ldGFtb3JwaAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAg
ICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgX01ldGFtb3JwaCA9
IE1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAgICBpc1ZpcnR1YWw6IHRydWUsCi0gICAgICAgICAg
ICB0YWdOYW1lOiAnJywKLQotICAgICAgICAgICAgaW5zdHJ1bWVudE5hbWU6ICdtZXRhbW9ycGgn
LAotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9zdXBlcigpOwotICAgICAgICAgICAgICAgIHRoaXMubW9ycGggPSBNZXRhbW9ycGgoKTsKLSAg
ICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ1N1cHBseWluZyBhIHRhZ05hbWUgdG8gTWV0
YW1vcnBoIHZpZXdzIGlzIHVucmVsaWFibGUgYW5kIGlzIGRlcHJlY2F0ZWQuIFlvdSBtYXkgYmUg
c2V0dGluZyB0aGUgdGFnTmFtZSBvbiBhIEhhbmRsZWJhcnMgaGVscGVyIHRoYXQgY3JlYXRlcyBh
IE1ldGFtb3JwaC4nLCAhdGhpcy50YWdOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24oYnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyLnB1c2godGhpcy5tb3JwaC5zdGFydFRhZygpKTsKLSAgICAgICAgICAgICAgICBidWZmZXIu
cHVzaE9wZW5pbmdUYWcoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFmdGVyUmVu
ZGVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICBidWZmZXIucHVzaENsb3Np
bmdUYWcoKTsKLSAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh0aGlzLm1vcnBoLmVuZFRhZygp
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLnJlbmRlclRvQnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5vdXRlckhUTUwgPSBidWZmZXIuc3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcigpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgZG9tTWFuYWdlcjogRE9NTWFuYWdlcgotICAgICAgICB9KTsKLSAgICAgICAgX19leHBv
cnRzX18uX01ldGFtb3JwaCA9IF9NZXRhbW9ycGg7Ci0gICAgICAgIHZhciBfd3JhcE1hcCA9IE1l
dGFtb3JwaC5fd3JhcE1hcDsKLSAgICAgICAgX19leHBvcnRzX18uX3dyYXBNYXAgPSBfd3JhcE1h
cDsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBjbGFzcyBfTWV0YW1vcnBoVmlldwotICAg
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVy
LlZpZXcKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuX01ldGFtb3JwaAotICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIF9NZXRhbW9ycGhWaWV3ID0g
Vmlldy5leHRlbmQoX01ldGFtb3JwaCk7Ci0gICAgICAgIF9fZXhwb3J0c19fLl9NZXRhbW9ycGhW
aWV3ID0gX01ldGFtb3JwaFZpZXc7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAY2xhc3Mg
X1NpbXBsZU1ldGFtb3JwaFZpZXcKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAg
ICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5Db3JlVmlldwotICAgICAgICAgICAgICBAdXNlcyBF
bWJlci5fTWV0YW1vcnBoCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAqLwot
ICAgICAgICB2YXIgX1NpbXBsZU1ldGFtb3JwaFZpZXcgPSBDb3JlVmlldy5leHRlbmQoX01ldGFt
b3JwaCk7Ci0gICAgICAgIF9fZXhwb3J0c19fLl9TaW1wbGVNZXRhbW9ycGhWaWV3ID0gX1NpbXBs
ZU1ldGFtb3JwaFZpZXc7Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBWaWV3LmV4
dGVuZChfTWV0YW1vcnBoKTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItbWV0YWwv
aW5zdHJ1bWVudGF0aW9uIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2Vycm9y
IiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0i
LCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXItbWV0YWwvbG9nZ2VyIiwgImVtYmVyLW1ldGFs
L3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZW1iZXItbWV0YWwvb2JzZXJ2
ZXJfc2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0aWVzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9tYXAiLCAi
ZW1iZXItbWV0YWwvZ2V0X3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvc2V0X3Byb3BlcnRpZXMi
LCAiZW1iZXItbWV0YWwvd2F0Y2hfa2V5IiwgImVtYmVyLW1ldGFsL2NoYWlucyIsICJlbWJlci1t
ZXRhbC93YXRjaF9wYXRoIiwgImVtYmVyLW1ldGFsL3dhdGNoaW5nIiwgImVtYmVyLW1ldGFsL2V4
cGFuZF9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL2Nv
bXB1dGVkX21hY3JvcyIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9taXhp
biIsICJlbWJlci1tZXRhbC9iaW5kaW5nIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVy
LW1ldGFsL2xpYnJhcmllcyIsICJlbWJlci1tZXRhbC9pc19ub25lIiwgImVtYmVyLW1ldGFsL2lz
X2VtcHR5IiwgImVtYmVyLW1ldGFsL2lzX2JsYW5rIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVu
Y3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9f
LCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBf
X2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2Rl
cGVuZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2RlcGVuZGVuY3kxOV9fLCBfX2RlcGVu
ZGVuY3kyMF9fLCBfX2RlcGVuZGVuY3kyMV9fLCBfX2RlcGVuZGVuY3kyMl9fLCBfX2RlcGVuZGVu
Y3kyM19fLCBfX2RlcGVuZGVuY3kyNF9fLCBfX2RlcGVuZGVuY3kyNV9fLCBfX2RlcGVuZGVuY3ky
Nl9fLCBfX2RlcGVuZGVuY3kyN19fLCBfX2RlcGVuZGVuY3kyOF9fLCBfX2RlcGVuZGVuY3kyOV9f
LCBfX2RlcGVuZGVuY3kzMF9fLCBfX2RlcGVuZGVuY3kzMV9fLCBfX2RlcGVuZGVuY3kzMl9fLCBf
X2RlcGVuZGVuY3kzM19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0g
ICAgICAgIC8qKgotICAgICAgICAgICAgRW1iZXIgTWV0YWwKLQotICAgICAgICAgICAgQG1vZHVs
ZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAg
Ki8KLQotICAgICAgICAvLyBCRUdJTiBJTVBPUlRTCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVw
ZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3ky
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGluc3RydW1lbnQgPSBfX2RlcGVuZGVuY3kzX18u
aW5zdHJ1bWVudDsKLSAgICAgICAgdmFyIHN1YnNjcmliZSA9IF9fZGVwZW5kZW5jeTNfXy5zdWJz
Y3JpYmU7Ci0gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IF9fZGVwZW5kZW5jeTNfXy51bnN1YnNj
cmliZTsKLSAgICAgICAgdmFyIHJlc2V0ID0gX19kZXBlbmRlbmN5M19fLnJlc2V0OwotICAgICAg
ICB2YXIgZ2VuZXJhdGVHdWlkID0gX19kZXBlbmRlbmN5NF9fLmdlbmVyYXRlR3VpZDsKLSAgICAg
ICAgdmFyIEdVSURfS0VZID0gX19kZXBlbmRlbmN5NF9fLkdVSURfS0VZOwotICAgICAgICB2YXIg
R1VJRF9QUkVGSVggPSBfX2RlcGVuZGVuY3k0X18uR1VJRF9QUkVGSVg7Ci0gICAgICAgIHZhciBn
dWlkRm9yID0gX19kZXBlbmRlbmN5NF9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBNRVRBX0RFU0Mg
PSBfX2RlcGVuZGVuY3k0X18uTUVUQV9ERVNDOwotICAgICAgICB2YXIgRU1QVFlfTUVUQSA9IF9f
ZGVwZW5kZW5jeTRfXy5FTVBUWV9NRVRBOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVwZW5kZW5j
eTRfXy5tZXRhOwotICAgICAgICB2YXIgZ2V0TWV0YSA9IF9fZGVwZW5kZW5jeTRfXy5nZXRNZXRh
OwotICAgICAgICB2YXIgc2V0TWV0YSA9IF9fZGVwZW5kZW5jeTRfXy5zZXRNZXRhOwotICAgICAg
ICB2YXIgbWV0YVBhdGggPSBfX2RlcGVuZGVuY3k0X18ubWV0YVBhdGg7Ci0gICAgICAgIHZhciBp
bnNwZWN0ID0gX19kZXBlbmRlbmN5NF9fLmluc3BlY3Q7Ci0gICAgICAgIHZhciB0eXBlT2YgPSBf
X2RlcGVuZGVuY3k0X18udHlwZU9mOwotICAgICAgICB2YXIgdHJ5Q2F0Y2hGaW5hbGx5ID0gX19k
ZXBlbmRlbmN5NF9fLnRyeUNhdGNoRmluYWxseTsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2Rl
cGVuZGVuY3k0X18uaXNBcnJheTsKLSAgICAgICAgdmFyIG1ha2VBcnJheSA9IF9fZGVwZW5kZW5j
eTRfXy5tYWtlQXJyYXk7Ci0gICAgICAgIHZhciBjYW5JbnZva2UgPSBfX2RlcGVuZGVuY3k0X18u
Y2FuSW52b2tlOwotICAgICAgICB2YXIgdHJ5SW52b2tlID0gX19kZXBlbmRlbmN5NF9fLnRyeUlu
dm9rZTsKLSAgICAgICAgdmFyIHRyeUZpbmFsbHkgPSBfX2RlcGVuZGVuY3k0X18udHJ5RmluYWxs
eTsKLSAgICAgICAgdmFyIHdyYXAgPSBfX2RlcGVuZGVuY3k0X18ud3JhcDsKLSAgICAgICAgdmFy
IGFwcGx5ID0gX19kZXBlbmRlbmN5NF9fLmFwcGx5OwotICAgICAgICB2YXIgYXBwbHlTdHIgPSBf
X2RlcGVuZGVuY3k0X18uYXBwbHlTdHI7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBl
bmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbnVtZXJhYmxlVXRpbHMgPSBfX2Rl
cGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRl
bmN5N19fLmNyZWF0ZTsKLSAgICAgICAgdmFyIHBsYXRmb3JtID0gX19kZXBlbmRlbmN5N19fLnBs
YXRmb3JtOwotICAgICAgICB2YXIgbWFwID0gX19kZXBlbmRlbmN5OF9fLm1hcDsKLSAgICAgICAg
dmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3k4X18uZm9yRWFjaDsKLSAgICAgICAgdmFyIGZpbHRl
ciA9IF9fZGVwZW5kZW5jeThfXy5maWx0ZXI7Ci0gICAgICAgIHZhciBpbmRleE9mID0gX19kZXBl
bmRlbmN5OF9fLmluZGV4T2Y7Ci0gICAgICAgIHZhciBMb2dnZXIgPSBfX2RlcGVuZGVuY3k5X19b
ImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MTBfXy5nZXQ7Ci0g
ICAgICAgIHZhciBnZXRXaXRoRGVmYXVsdCA9IF9fZGVwZW5kZW5jeTEwX18uZ2V0V2l0aERlZmF1
bHQ7Ci0gICAgICAgIHZhciBub3JtYWxpemVUdXBsZSA9IF9fZGVwZW5kZW5jeTEwX18ubm9ybWFs
aXplVHVwbGU7Ci0gICAgICAgIHZhciBfZ2V0UGF0aCA9IF9fZGVwZW5kZW5jeTEwX18uX2dldFBh
dGg7Ci0KLSAgICAgICAgdmFyIG9uID0gX19kZXBlbmRlbmN5MTFfXy5vbjsKLSAgICAgICAgdmFy
IGFkZExpc3RlbmVyID0gX19kZXBlbmRlbmN5MTFfXy5hZGRMaXN0ZW5lcjsKLSAgICAgICAgdmFy
IHJlbW92ZUxpc3RlbmVyID0gX19kZXBlbmRlbmN5MTFfXy5yZW1vdmVMaXN0ZW5lcjsKLSAgICAg
ICAgdmFyIHN1c3BlbmRMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTExX18uc3VzcGVuZExpc3RlbmVy
OwotICAgICAgICB2YXIgc3VzcGVuZExpc3RlbmVycyA9IF9fZGVwZW5kZW5jeTExX18uc3VzcGVu
ZExpc3RlbmVyczsKLSAgICAgICAgdmFyIHNlbmRFdmVudCA9IF9fZGVwZW5kZW5jeTExX18uc2Vu
ZEV2ZW50OwotICAgICAgICB2YXIgaGFzTGlzdGVuZXJzID0gX19kZXBlbmRlbmN5MTFfXy5oYXNM
aXN0ZW5lcnM7Ci0gICAgICAgIHZhciB3YXRjaGVkRXZlbnRzID0gX19kZXBlbmRlbmN5MTFfXy53
YXRjaGVkRXZlbnRzOwotICAgICAgICB2YXIgbGlzdGVuZXJzRm9yID0gX19kZXBlbmRlbmN5MTFf
Xy5saXN0ZW5lcnNGb3I7Ci0gICAgICAgIHZhciBsaXN0ZW5lcnNEaWZmID0gX19kZXBlbmRlbmN5
MTFfXy5saXN0ZW5lcnNEaWZmOwotICAgICAgICB2YXIgbGlzdGVuZXJzVW5pb24gPSBfX2RlcGVu
ZGVuY3kxMV9fLmxpc3RlbmVyc1VuaW9uOwotCi0gICAgICAgIHZhciBPYnNlcnZlclNldCA9IF9f
ZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgcHJvcGVydHlXaWxsQ2hh
bmdlID0gX19kZXBlbmRlbmN5MTNfXy5wcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0gICAgICAgIHZhciBw
cm9wZXJ0eURpZENoYW5nZSA9IF9fZGVwZW5kZW5jeTEzX18ucHJvcGVydHlEaWRDaGFuZ2U7Ci0g
ICAgICAgIHZhciBvdmVycmlkZUNoYWlucyA9IF9fZGVwZW5kZW5jeTEzX18ub3ZlcnJpZGVDaGFp
bnM7Ci0gICAgICAgIHZhciBiZWdpblByb3BlcnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTEzX18u
YmVnaW5Qcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIHZhciBlbmRQcm9wZXJ0eUNoYW5nZXMgPSBf
X2RlcGVuZGVuY3kxM19fLmVuZFByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgdmFyIGNoYW5nZVBy
b3BlcnRpZXMgPSBfX2RlcGVuZGVuY3kxM19fLmNoYW5nZVByb3BlcnRpZXM7Ci0KLSAgICAgICAg
dmFyIERlc2NyaXB0b3IgPSBfX2RlcGVuZGVuY3kxNF9fLkRlc2NyaXB0b3I7Ci0gICAgICAgIHZh
ciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeTE0X18uZGVmaW5lUHJvcGVydHk7Ci0gICAg
ICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kxNV9fLnNldDsKLSAgICAgICAgdmFyIHRyeVNldCA9
IF9fZGVwZW5kZW5jeTE1X18udHJ5U2V0OwotCi0gICAgICAgIHZhciBPcmRlcmVkU2V0ID0gX19k
ZXBlbmRlbmN5MTZfXy5PcmRlcmVkU2V0OwotICAgICAgICB2YXIgTWFwID0gX19kZXBlbmRlbmN5
MTZfXy5NYXA7Ci0gICAgICAgIHZhciBNYXBXaXRoRGVmYXVsdCA9IF9fZGVwZW5kZW5jeTE2X18u
TWFwV2l0aERlZmF1bHQ7Ci0gICAgICAgIHZhciBnZXRQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5
MTdfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgc2V0UHJvcGVydGllcyA9IF9fZGVwZW5kZW5j
eTE4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHdhdGNoS2V5ID0gX19kZXBlbmRlbmN5MTlf
Xy53YXRjaEtleTsKLSAgICAgICAgdmFyIHVud2F0Y2hLZXkgPSBfX2RlcGVuZGVuY3kxOV9fLnVu
d2F0Y2hLZXk7Ci0gICAgICAgIHZhciBmbHVzaFBlbmRpbmdDaGFpbnMgPSBfX2RlcGVuZGVuY3ky
MF9fLmZsdXNoUGVuZGluZ0NoYWluczsKLSAgICAgICAgdmFyIHJlbW92ZUNoYWluV2F0Y2hlciA9
IF9fZGVwZW5kZW5jeTIwX18ucmVtb3ZlQ2hhaW5XYXRjaGVyOwotICAgICAgICB2YXIgQ2hhaW5O
b2RlID0gX19kZXBlbmRlbmN5MjBfXy5DaGFpbk5vZGU7Ci0gICAgICAgIHZhciBmaW5pc2hDaGFp
bnMgPSBfX2RlcGVuZGVuY3kyMF9fLmZpbmlzaENoYWluczsKLSAgICAgICAgdmFyIHdhdGNoUGF0
aCA9IF9fZGVwZW5kZW5jeTIxX18ud2F0Y2hQYXRoOwotICAgICAgICB2YXIgdW53YXRjaFBhdGgg
PSBfX2RlcGVuZGVuY3kyMV9fLnVud2F0Y2hQYXRoOwotICAgICAgICB2YXIgd2F0Y2ggPSBfX2Rl
cGVuZGVuY3kyMl9fLndhdGNoOwotICAgICAgICB2YXIgaXNXYXRjaGluZyA9IF9fZGVwZW5kZW5j
eTIyX18uaXNXYXRjaGluZzsKLSAgICAgICAgdmFyIHVud2F0Y2ggPSBfX2RlcGVuZGVuY3kyMl9f
LnVud2F0Y2g7Ci0gICAgICAgIHZhciByZXdhdGNoID0gX19kZXBlbmRlbmN5MjJfXy5yZXdhdGNo
OwotICAgICAgICB2YXIgZGVzdHJveSA9IF9fZGVwZW5kZW5jeTIyX18uZGVzdHJveTsKLSAgICAg
ICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3kyM19fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBDb21wdXRlZFByb3BlcnR5ID0gX19kZXBlbmRlbmN5MjRfXy5Db21wdXRlZFBy
b3BlcnR5OwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kyNF9fLmNvbXB1dGVk
OwotICAgICAgICB2YXIgY2FjaGVGb3IgPSBfX2RlcGVuZGVuY3kyNF9fLmNhY2hlRm9yOwotCi0g
ICAgICAgIC8vIHNpZGUgZWZmZWN0IG9mIGRlZmluaW5nIHRoZSBjb21wdXRlZC4qIG1hY3Jvcwot
Ci0gICAgICAgIHZhciBhZGRPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTI2X18uYWRkT2JzZXJ2ZXI7
Ci0gICAgICAgIHZhciBvYnNlcnZlcnNGb3IgPSBfX2RlcGVuZGVuY3kyNl9fLm9ic2VydmVyc0Zv
cjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MjZfXy5yZW1vdmVP
YnNlcnZlcjsKLSAgICAgICAgdmFyIGFkZEJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MjZf
Xy5hZGRCZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIF9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXIg
PSBfX2RlcGVuZGVuY3kyNl9fLl9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBf
c3VzcGVuZE9ic2VydmVyID0gX19kZXBlbmRlbmN5MjZfXy5fc3VzcGVuZE9ic2VydmVyOwotICAg
ICAgICB2YXIgX3N1c3BlbmRCZWZvcmVPYnNlcnZlcnMgPSBfX2RlcGVuZGVuY3kyNl9fLl9zdXNw
ZW5kQmVmb3JlT2JzZXJ2ZXJzOwotICAgICAgICB2YXIgX3N1c3BlbmRPYnNlcnZlcnMgPSBfX2Rl
cGVuZGVuY3kyNl9fLl9zdXNwZW5kT2JzZXJ2ZXJzOwotICAgICAgICB2YXIgYmVmb3JlT2JzZXJ2
ZXJzRm9yID0gX19kZXBlbmRlbmN5MjZfXy5iZWZvcmVPYnNlcnZlcnNGb3I7Ci0gICAgICAgIHZh
ciByZW1vdmVCZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTI2X18ucmVtb3ZlQmVmb3JlT2Jz
ZXJ2ZXI7Ci0gICAgICAgIHZhciBJU19CSU5ESU5HID0gX19kZXBlbmRlbmN5MjdfXy5JU19CSU5E
SU5HOwotICAgICAgICB2YXIgbWl4aW4gPSBfX2RlcGVuZGVuY3kyN19fLm1peGluOwotICAgICAg
ICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3kyN19fLk1peGluOwotICAgICAgICB2YXIgcmVxdWly
ZWQgPSBfX2RlcGVuZGVuY3kyN19fLnJlcXVpcmVkOwotICAgICAgICB2YXIgYWxpYXNNZXRob2Qg
PSBfX2RlcGVuZGVuY3kyN19fLmFsaWFzTWV0aG9kOwotICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBf
X2RlcGVuZGVuY3kyN19fLm9ic2VydmVyOwotICAgICAgICB2YXIgaW1tZWRpYXRlT2JzZXJ2ZXIg
PSBfX2RlcGVuZGVuY3kyN19fLmltbWVkaWF0ZU9ic2VydmVyOwotICAgICAgICB2YXIgYmVmb3Jl
T2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kyN19fLmJlZm9yZU9ic2VydmVyOwotICAgICAgICB2YXIg
QmluZGluZyA9IF9fZGVwZW5kZW5jeTI4X18uQmluZGluZzsKLSAgICAgICAgdmFyIGlzR2xvYmFs
UGF0aCA9IF9fZGVwZW5kZW5jeTI4X18uaXNHbG9iYWxQYXRoOwotICAgICAgICB2YXIgYmluZCA9
IF9fZGVwZW5kZW5jeTI4X18uYmluZDsKLSAgICAgICAgdmFyIG9uZVdheSA9IF9fZGVwZW5kZW5j
eTI4X18ub25lV2F5OwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5MjlfX1siZGVmYXVs
dCJdOwotICAgICAgICB2YXIgbGlicmFyaWVzID0gX19kZXBlbmRlbmN5MzBfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgaXNOb25lID0gX19kZXBlbmRlbmN5MzFfXy5pc05vbmU7Ci0gICAgICAg
IHZhciBub25lID0gX19kZXBlbmRlbmN5MzFfXy5ub25lOwotICAgICAgICB2YXIgaXNFbXB0eSA9
IF9fZGVwZW5kZW5jeTMyX18uaXNFbXB0eTsKLSAgICAgICAgdmFyIGVtcHR5ID0gX19kZXBlbmRl
bmN5MzJfXy5lbXB0eTsKLSAgICAgICAgdmFyIGlzQmxhbmsgPSBfX2RlcGVuZGVuY3kzM19fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIC8vIEVORCBJTVBPUlRTCi0KLSAgICAgICAgLy8gQkVHSU4gRVhQ
T1JUUwotICAgICAgICB2YXIgRW1iZXJJbnN0cnVtZW50YXRpb24gPSBFbWJlci5JbnN0cnVtZW50
YXRpb24gPSB7fTsKLSAgICAgICAgRW1iZXJJbnN0cnVtZW50YXRpb24uaW5zdHJ1bWVudCA9IGlu
c3RydW1lbnQ7Ci0gICAgICAgIEVtYmVySW5zdHJ1bWVudGF0aW9uLnN1YnNjcmliZSA9IHN1YnNj
cmliZTsKLSAgICAgICAgRW1iZXJJbnN0cnVtZW50YXRpb24udW5zdWJzY3JpYmUgPSB1bnN1YnNj
cmliZTsKLSAgICAgICAgRW1iZXJJbnN0cnVtZW50YXRpb24ucmVzZXQgPSByZXNldDsKLQotICAg
ICAgICBFbWJlci5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLSAgICAgICAgRW1iZXIuc3Vic2Ny
aWJlID0gc3Vic2NyaWJlOwotCi0gICAgICAgIEVtYmVyLmdlbmVyYXRlR3VpZCA9IGdlbmVyYXRl
R3VpZDsKLSAgICAgICAgRW1iZXIuR1VJRF9LRVkgPSBHVUlEX0tFWTsKLSAgICAgICAgRW1iZXIu
R1VJRF9QUkVGSVggPSBHVUlEX1BSRUZJWDsKLSAgICAgICAgRW1iZXIuY3JlYXRlID0gY3JlYXRl
OwotICAgICAgICBFbWJlci5wbGF0Zm9ybSA9IHBsYXRmb3JtOwotCi0gICAgICAgIHZhciBFbWJl
ckFycmF5UG9seWZpbGxzID0gRW1iZXIuQXJyYXlQb2x5ZmlsbHMgPSB7fTsKLQotICAgICAgICBF
bWJlckFycmF5UG9seWZpbGxzLm1hcCA9IG1hcDsKLSAgICAgICAgRW1iZXJBcnJheVBvbHlmaWxs
cy5mb3JFYWNoID0gZm9yRWFjaDsKLSAgICAgICAgRW1iZXJBcnJheVBvbHlmaWxscy5maWx0ZXIg
PSBmaWx0ZXI7Ci0gICAgICAgIEVtYmVyQXJyYXlQb2x5ZmlsbHMuaW5kZXhPZiA9IGluZGV4T2Y7
Ci0KLSAgICAgICAgRW1iZXIuRXJyb3IgPSBFbWJlckVycm9yOwotICAgICAgICBFbWJlci5ndWlk
Rm9yID0gZ3VpZEZvcjsKLSAgICAgICAgRW1iZXIuTUVUQV9ERVNDID0gTUVUQV9ERVNDOwotICAg
ICAgICBFbWJlci5FTVBUWV9NRVRBID0gRU1QVFlfTUVUQTsKLSAgICAgICAgRW1iZXIubWV0YSA9
IG1ldGE7Ci0gICAgICAgIEVtYmVyLmdldE1ldGEgPSBnZXRNZXRhOwotICAgICAgICBFbWJlci5z
ZXRNZXRhID0gc2V0TWV0YTsKLSAgICAgICAgRW1iZXIubWV0YVBhdGggPSBtZXRhUGF0aDsKLSAg
ICAgICAgRW1iZXIuaW5zcGVjdCA9IGluc3BlY3Q7Ci0gICAgICAgIEVtYmVyLnR5cGVPZiA9IHR5
cGVPZjsKLSAgICAgICAgRW1iZXIudHJ5Q2F0Y2hGaW5hbGx5ID0gdHJ5Q2F0Y2hGaW5hbGx5Owot
ICAgICAgICBFbWJlci5pc0FycmF5ID0gaXNBcnJheTsKLSAgICAgICAgRW1iZXIubWFrZUFycmF5
ID0gbWFrZUFycmF5OwotICAgICAgICBFbWJlci5jYW5JbnZva2UgPSBjYW5JbnZva2U7Ci0gICAg
ICAgIEVtYmVyLnRyeUludm9rZSA9IHRyeUludm9rZTsKLSAgICAgICAgRW1iZXIudHJ5RmluYWxs
eSA9IHRyeUZpbmFsbHk7Ci0gICAgICAgIEVtYmVyLndyYXAgPSB3cmFwOwotICAgICAgICBFbWJl
ci5hcHBseSA9IGFwcGx5OwotICAgICAgICBFbWJlci5hcHBseVN0ciA9IGFwcGx5U3RyOwotCi0g
ICAgICAgIEVtYmVyLkxvZ2dlciA9IExvZ2dlcjsKLQotICAgICAgICBFbWJlci5nZXQgPSBnZXQ7
Ci0gICAgICAgIEVtYmVyLmdldFdpdGhEZWZhdWx0ID0gZ2V0V2l0aERlZmF1bHQ7Ci0gICAgICAg
IEVtYmVyLm5vcm1hbGl6ZVR1cGxlID0gbm9ybWFsaXplVHVwbGU7Ci0gICAgICAgIEVtYmVyLl9n
ZXRQYXRoID0gX2dldFBhdGg7Ci0KLSAgICAgICAgRW1iZXIuRW51bWVyYWJsZVV0aWxzID0gRW51
bWVyYWJsZVV0aWxzOwotCi0gICAgICAgIEVtYmVyLm9uID0gb247Ci0gICAgICAgIEVtYmVyLmFk
ZExpc3RlbmVyID0gYWRkTGlzdGVuZXI7Ci0gICAgICAgIEVtYmVyLnJlbW92ZUxpc3RlbmVyID0g
cmVtb3ZlTGlzdGVuZXI7Ci0gICAgICAgIEVtYmVyLl9zdXNwZW5kTGlzdGVuZXIgPSBzdXNwZW5k
TGlzdGVuZXI7Ci0gICAgICAgIEVtYmVyLl9zdXNwZW5kTGlzdGVuZXJzID0gc3VzcGVuZExpc3Rl
bmVyczsKLSAgICAgICAgRW1iZXIuc2VuZEV2ZW50ID0gc2VuZEV2ZW50OwotICAgICAgICBFbWJl
ci5oYXNMaXN0ZW5lcnMgPSBoYXNMaXN0ZW5lcnM7Ci0gICAgICAgIEVtYmVyLndhdGNoZWRFdmVu
dHMgPSB3YXRjaGVkRXZlbnRzOwotICAgICAgICBFbWJlci5saXN0ZW5lcnNGb3IgPSBsaXN0ZW5l
cnNGb3I7Ci0gICAgICAgIEVtYmVyLmxpc3RlbmVyc0RpZmYgPSBsaXN0ZW5lcnNEaWZmOwotICAg
ICAgICBFbWJlci5saXN0ZW5lcnNVbmlvbiA9IGxpc3RlbmVyc1VuaW9uOwotCi0gICAgICAgIEVt
YmVyLl9PYnNlcnZlclNldCA9IE9ic2VydmVyU2V0OwotCi0gICAgICAgIEVtYmVyLnByb3BlcnR5
V2lsbENoYW5nZSA9IHByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgRW1iZXIucHJvcGVydHlE
aWRDaGFuZ2UgPSBwcm9wZXJ0eURpZENoYW5nZTsKLSAgICAgICAgRW1iZXIub3ZlcnJpZGVDaGFp
bnMgPSBvdmVycmlkZUNoYWluczsKLSAgICAgICAgRW1iZXIuYmVnaW5Qcm9wZXJ0eUNoYW5nZXMg
PSBiZWdpblByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgRW1iZXIuZW5kUHJvcGVydHlDaGFuZ2Vz
ID0gZW5kUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICBFbWJlci5jaGFuZ2VQcm9wZXJ0aWVzID0g
Y2hhbmdlUHJvcGVydGllczsKLQotICAgICAgICBFbWJlci5EZXNjcmlwdG9yID0gRGVzY3JpcHRv
cjsKLSAgICAgICAgRW1iZXIuZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eTsKLQotICAg
ICAgICBFbWJlci5zZXQgPSBzZXQ7Ci0gICAgICAgIEVtYmVyLnRyeVNldCA9IHRyeVNldDsKLQot
ICAgICAgICBFbWJlci5PcmRlcmVkU2V0ID0gT3JkZXJlZFNldDsKLSAgICAgICAgRW1iZXIuTWFw
ID0gTWFwOwotICAgICAgICBFbWJlci5NYXBXaXRoRGVmYXVsdCA9IE1hcFdpdGhEZWZhdWx0Owot
Ci0gICAgICAgIEVtYmVyLmdldFByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzOwotICAgICAgICBF
bWJlci5zZXRQcm9wZXJ0aWVzID0gc2V0UHJvcGVydGllczsKLQotICAgICAgICBFbWJlci53YXRj
aEtleSA9IHdhdGNoS2V5OwotICAgICAgICBFbWJlci51bndhdGNoS2V5ID0gdW53YXRjaEtleTsK
LQotICAgICAgICBFbWJlci5mbHVzaFBlbmRpbmdDaGFpbnMgPSBmbHVzaFBlbmRpbmdDaGFpbnM7
Ci0gICAgICAgIEVtYmVyLnJlbW92ZUNoYWluV2F0Y2hlciA9IHJlbW92ZUNoYWluV2F0Y2hlcjsK
LSAgICAgICAgRW1iZXIuX0NoYWluTm9kZSA9IENoYWluTm9kZTsKLSAgICAgICAgRW1iZXIuZmlu
aXNoQ2hhaW5zID0gZmluaXNoQ2hhaW5zOwotCi0gICAgICAgIEVtYmVyLndhdGNoUGF0aCA9IHdh
dGNoUGF0aDsKLSAgICAgICAgRW1iZXIudW53YXRjaFBhdGggPSB1bndhdGNoUGF0aDsKLQotICAg
ICAgICBFbWJlci53YXRjaCA9IHdhdGNoOwotICAgICAgICBFbWJlci5pc1dhdGNoaW5nID0gaXNX
YXRjaGluZzsKLSAgICAgICAgRW1iZXIudW53YXRjaCA9IHVud2F0Y2g7Ci0gICAgICAgIEVtYmVy
LnJld2F0Y2ggPSByZXdhdGNoOwotICAgICAgICBFbWJlci5kZXN0cm95ID0gZGVzdHJveTsKLQot
ICAgICAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzID0gZXhwYW5kUHJvcGVydGllczsKLQotICAg
ICAgICBFbWJlci5Db21wdXRlZFByb3BlcnR5ID0gQ29tcHV0ZWRQcm9wZXJ0eTsKLSAgICAgICAg
RW1iZXIuY29tcHV0ZWQgPSBjb21wdXRlZDsKLSAgICAgICAgRW1iZXIuY2FjaGVGb3IgPSBjYWNo
ZUZvcjsKLQotICAgICAgICBFbWJlci5hZGRPYnNlcnZlciA9IGFkZE9ic2VydmVyOwotICAgICAg
ICBFbWJlci5vYnNlcnZlcnNGb3IgPSBvYnNlcnZlcnNGb3I7Ci0gICAgICAgIEVtYmVyLnJlbW92
ZU9ic2VydmVyID0gcmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIEVtYmVyLmFkZEJlZm9yZU9ic2Vy
dmVyID0gYWRkQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIEVtYmVyLl9zdXNwZW5kQmVmb3JlT2Jz
ZXJ2ZXIgPSBfc3VzcGVuZEJlZm9yZU9ic2VydmVyOwotICAgICAgICBFbWJlci5fc3VzcGVuZEJl
Zm9yZU9ic2VydmVycyA9IF9zdXNwZW5kQmVmb3JlT2JzZXJ2ZXJzOwotICAgICAgICBFbWJlci5f
c3VzcGVuZE9ic2VydmVyID0gX3N1c3BlbmRPYnNlcnZlcjsKLSAgICAgICAgRW1iZXIuX3N1c3Bl
bmRPYnNlcnZlcnMgPSBfc3VzcGVuZE9ic2VydmVyczsKLSAgICAgICAgRW1iZXIuYmVmb3JlT2Jz
ZXJ2ZXJzRm9yID0gYmVmb3JlT2JzZXJ2ZXJzRm9yOwotICAgICAgICBFbWJlci5yZW1vdmVCZWZv
cmVPYnNlcnZlciA9IHJlbW92ZUJlZm9yZU9ic2VydmVyOwotCi0gICAgICAgIEVtYmVyLklTX0JJ
TkRJTkcgPSBJU19CSU5ESU5HOwotICAgICAgICBFbWJlci5yZXF1aXJlZCA9IHJlcXVpcmVkOwot
ICAgICAgICBFbWJlci5hbGlhc01ldGhvZCA9IGFsaWFzTWV0aG9kOwotICAgICAgICBFbWJlci5v
YnNlcnZlciA9IG9ic2VydmVyOwotICAgICAgICBFbWJlci5pbW1lZGlhdGVPYnNlcnZlciA9IGlt
bWVkaWF0ZU9ic2VydmVyOwotICAgICAgICBFbWJlci5iZWZvcmVPYnNlcnZlciA9IGJlZm9yZU9i
c2VydmVyOwotICAgICAgICBFbWJlci5taXhpbiA9IG1peGluOwotICAgICAgICBFbWJlci5NaXhp
biA9IE1peGluOwotCi0gICAgICAgIEVtYmVyLm9uZVdheSA9IG9uZVdheTsKLSAgICAgICAgRW1i
ZXIuYmluZCA9IGJpbmQ7Ci0gICAgICAgIEVtYmVyLkJpbmRpbmcgPSBCaW5kaW5nOwotICAgICAg
ICBFbWJlci5pc0dsb2JhbFBhdGggPSBpc0dsb2JhbFBhdGg7Ci0KLSAgICAgICAgRW1iZXIucnVu
ID0gcnVuOwotCi0gICAgICAgIEVtYmVyLmxpYnJhcmllcyA9IGxpYnJhcmllczsKLSAgICAgICAg
RW1iZXIubGlicmFyaWVzLnJlZ2lzdGVyQ29yZUxpYnJhcnkoJ0VtYmVyJywgRW1iZXIuVkVSU0lP
Tik7Ci0KLSAgICAgICAgRW1iZXIuaXNOb25lID0gaXNOb25lOwotICAgICAgICBFbWJlci5ub25l
ID0gbm9uZTsKLQotICAgICAgICBFbWJlci5pc0VtcHR5ID0gaXNFbXB0eTsKLSAgICAgICAgRW1i
ZXIuZW1wdHkgPSBlbXB0eTsKLQotICAgICAgICBFbWJlci5pc0JsYW5rID0gaXNCbGFuazsKLQot
ICAgICAgICBFbWJlci5tZXJnZSA9IG1lcmdlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBBIGZ1bmN0aW9uIG1heSBiZSBhc3NpZ25lZCB0byBgRW1iZXIub25lcnJvcmAgdG8gYmUgY2Fs
bGVkIHdoZW4gRW1iZXIKLSAgICAgICAgICAgICAgaW50ZXJuYWxzIGVuY291bnRlciBhbiBlcnJv
ci4gVGhpcyBpcyB1c2VmdWwgZm9yIHNwZWNpYWxpemVkIGVycm9yIGhhbmRsaW5nCi0gICAgICAg
ICAgICAgIGFuZCByZXBvcnRpbmcgY29kZS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIEVtYmVyLm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvcikgewotICAgICAg
ICAgICAgICAgIEVtLiQuYWpheCgnL3JlcG9ydC1lcnJvcicsICdQT1NUJywgewotICAgICAgICAg
ICAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLAotICAgICAgICAgICAgICAgICAgb3RoZXJJbmZv
cm1hdGlvbjogJ3doYXRldmVyIGFwcCBzdGF0ZSB5b3Ugd2FudCB0byBwcm92aWRlJwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBJbnRlcm5hbGx5LCBgRW1iZXIub25lcnJvcmAgaXMgdXNlZCBhcyBCYWNrYnVy
bmVyJ3MgZXJyb3IgaGFuZGxlci4KLQotICAgICAgICAgICAgICBAZXZlbnQgb25lcnJvcgotICAg
ICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7RXhjZXB0aW9ufSBl
cnJvciB0aGUgZXJyb3Igb2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAgICBFbWJlci5vbmVy
cm9yID0gbnVsbDsKLSAgICAgICAgLy8gRU5EIEVYUE9SVFMKLQotICAgICAgICAvLyBkbyB0aGlz
IGZvciBzaWRlLWVmZmVjdHMgb2YgdXBkYXRpbmcgRW1iZXIuYXNzZXJ0LCB3YXJuLCBldGMgd2hl
bgotICAgICAgICAvLyBlbWJlci1kZWJ1ZyBpcyBwcmVzZW50Ci0gICAgICAgIGlmIChFbWJlci5f
X2xvYWRlci5yZWdpc3RyeVsnZW1iZXItZGVidWcnXSkgewotICAgICAgICAgICAgcmVxdWlyZU1v
ZHVsZSgnZW1iZXItZGVidWcnKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fWyJk
ZWZhdWx0Il0gPSBFbWJlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2FsaWFz
IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0
eV9zZXQiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIsICJl
bWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRh
bC91dGlscyIsICJlbWJlci1tZXRhbC9kZXBlbmRlbnRfa2V5cyIsICJleHBvcnRzIl0sCi0gICAg
ZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNf
XywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19k
ZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1
c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAg
ICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAgICAgICB2YXIgRW1iZXJFcnJv
ciA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRGVzY3JpcHRvciA9
IF9fZGVwZW5kZW5jeTRfXy5EZXNjcmlwdG9yOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkg
PSBfX2RlcGVuZGVuY3k0X18uZGVmaW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBDb21wdXRlZFBy
b3BlcnR5ID0gX19kZXBlbmRlbmN5NV9fLkNvbXB1dGVkUHJvcGVydHk7Ci0gICAgICAgIHZhciBj
cmVhdGUgPSBfX2RlcGVuZGVuY3k2X18uY3JlYXRlOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVw
ZW5kZW5jeTdfXy5tZXRhOwotICAgICAgICB2YXIgaW5zcGVjdCA9IF9fZGVwZW5kZW5jeTdfXy5p
bnNwZWN0OwotICAgICAgICB2YXIgYWRkRGVwZW5kZW50S2V5cyA9IF9fZGVwZW5kZW5jeThfXy5h
ZGREZXBlbmRlbnRLZXlzOwotICAgICAgICB2YXIgcmVtb3ZlRGVwZW5kZW50S2V5cyA9IF9fZGVw
ZW5kZW5jeThfXy5yZW1vdmVEZXBlbmRlbnRLZXlzOwotCi0gICAgICAgIGZ1bmN0aW9uIGFsaWFz
KGFsdEtleSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkUHJvcGVydHkoYWx0S2V5
KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFsaWFzID0gYWxpYXM7Ci0gICAg
ICAgIGZ1bmN0aW9uIEFsaWFzZWRQcm9wZXJ0eShhbHRLZXkpIHsKLSAgICAgICAgICAgIHRoaXMu
YWx0S2V5ID0gYWx0S2V5OwotICAgICAgICAgICAgdGhpcy5fZGVwZW5kZW50S2V5cyA9IFsgYWx0
S2V5IF07Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5BbGlhc2VkUHJvcGVydHkg
PSBBbGlhc2VkUHJvcGVydHk7Ci0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUgPSBj
cmVhdGUoRGVzY3JpcHRvci5wcm90b3R5cGUpOwotCi0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5w
cm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gQWxpYXNlZFByb3BlcnR5X2dldChvYmosIGtleU5hbWUp
IHsKLSAgICAgICAgICAgIHJldHVybiBnZXQob2JqLCB0aGlzLmFsdEtleSk7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBBbGlh
c2VkUHJvcGVydHlfc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVy
biBzZXQob2JqLCB0aGlzLmFsdEtleSwgdmFsdWUpOwotICAgICAgICB9OwotCi0gICAgICAgIEFs
aWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUud2lsbFdhdGNoID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1l
KSB7Ci0gICAgICAgICAgICBhZGREZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbWV0
YShvYmopKTsKLSAgICAgICAgfTsKLQotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBl
LmRpZFVud2F0Y2ggPSBmdW5jdGlvbihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgIHJlbW92
ZURlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBtZXRhKG9iaikpOwotICAgICAgICB9
OwotCi0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihv
YmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgIHZhciBtID0gbWV0YShvYmopOwotICAgICAgICAg
ICAgaWYgKG0ud2F0Y2hpbmdba2V5TmFtZV0pIHsKLSAgICAgICAgICAgICAgICBhZGREZXBlbmRl
bnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9u
KG9iaiwga2V5TmFtZSkgewotICAgICAgICAgICAgdmFyIG0gPSBtZXRhKG9iaik7Ci0gICAgICAg
ICAgICBpZiAobS53YXRjaGluZ1trZXlOYW1lXSkgewotICAgICAgICAgICAgICAgIHJlbW92ZURl
cGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBtKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLQotICAgICAgICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLnJlYWRPbmx5ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLnNldCA9IEFsaWFzZWRQcm9wZXJ0eV9yZWFkT25s
eVNldDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9OwotCi0gICAgICAgIGZ1
bmN0aW9uIEFsaWFzZWRQcm9wZXJ0eV9yZWFkT25seVNldChvYmosIGtleU5hbWUsIHZhbHVlKSB7
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcignQ2Fubm90IHNldCByZWFkLW9ubHkg
cHJvcGVydHkgIicgKyBrZXlOYW1lICsgJyIgb24gb2JqZWN0OiAnICsgaW5zcGVjdChvYmopKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUub25lV2F5ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLnNldCA9IEFsaWFzZWRQcm9wZXJ0eV9vbmVX
YXlTZXQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfTsKLQotICAgICAgICBm
dW5jdGlvbiBBbGlhc2VkUHJvcGVydHlfb25lV2F5U2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpIHsK
LSAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgbnVsbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBFbWJlciBEYXRhCi0gICAgICAgIEFs
aWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUuX21ldGEgPSB1bmRlZmluZWQ7Ci0gICAgICAgIEFsaWFz
ZWRQcm9wZXJ0eS5wcm90b3R5cGUubWV0YSA9IENvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLm1l
dGE7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9hcnJheSIsCi0gICAgWyJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgdmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlOwot
Ci0gICAgICAgIC8vIFRlc3RpbmcgdGhpcyBpcyBub3QgaWRlYWwsIGJ1dCB3ZSB3YW50IHRvIHVz
ZSBuYXRpdmUgZnVuY3Rpb25zCi0gICAgICAgIC8vIGlmIGF2YWlsYWJsZSwgYnV0IG5vdCB0byB1
c2UgdmVyc2lvbnMgY3JlYXRlZCBieSBsaWJyYXJpZXMgbGlrZSBQcm90b3R5cGUKLSAgICAgICAg
dmFyIGlzTmF0aXZlRnVuYyA9IGZ1bmN0aW9uKGZ1bmMpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
c2hvdWxkIHByb2JhYmx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzIGxpa2VseSB0byBoYXZlIEVTNSBh
cnJheSBtZXRob2RzCi0gICAgICAgICAgICByZXR1cm4gZnVuYyAmJiBGdW5jdGlvbi5wcm90b3R5
cGUudG9TdHJpbmcuY2FsbChmdW5jKS5pbmRleE9mKCdbbmF0aXZlIGNvZGVdJykgPiAtMTsKLSAg
ICAgICAgfTsKLQotICAgICAgICAvLyBGcm9tOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9hcnJheS9tYXAKLSAgICAg
ICAgdmFyIG1hcCA9IGlzTmF0aXZlRnVuYyhBcnJheVByb3RvdHlwZS5tYXApID8gQXJyYXlQcm90
b3R5cGUubWFwIDogZnVuY3Rpb24oZnVuIC8qLCB0aGlzcCAqLwotICAgICAgICApIHsKLSAgICAg
ICAgICAgIC8vInVzZSBzdHJpY3QiOwotCi0gICAgICAgICAgICBpZiAodGhpcyA9PT0gdm9pZCAw
IHx8IHRoaXMgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpOwot
ICAgICAgICAgICAgdmFyIGxlbiA9IHQubGVuZ3RoID4+PiAwOwotICAgICAgICAgICAgaWYgKHR5
cGVvZiBmdW4gIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByZXMgPSBuZXcgQXJy
YXkobGVuKTsKLSAgICAgICAgICAgIHZhciB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo
aSBpbiB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc1tpXSA9IGZ1bi5jYWxsKHRoaXNwLCB0
W2ldLCBpLCB0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiByZXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gRnJvbTogaHR0cHM6Ly9k
ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVj
dHMvYXJyYXkvZm9yZWFjaAotICAgICAgICB2YXIgZm9yRWFjaCA9IGlzTmF0aXZlRnVuYyhBcnJh
eVByb3RvdHlwZS5mb3JFYWNoKSA/IEFycmF5UHJvdG90eXBlLmZvckVhY2ggOiBmdW5jdGlvbihm
dW4gLyosIHRoaXNwICovCi0gICAgICAgICkgewotICAgICAgICAgICAgLy8idXNlIHN0cmljdCI7
Ci0KLSAgICAgICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkgewot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyk7Ci0gICAgICAgICAgICB2YXIgbGVuID0g
dC5sZW5ndGggPj4+IDA7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGZ1biAhPT0gImZ1bmN0aW9u
IikgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIHRoaXNwID0gYXJndW1lbnRzWzFdOwotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpIGlu
IHQpIHsKLSAgICAgICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHRbaV0sIGksIHQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB2
YXIgaW5kZXhPZiA9IGlzTmF0aXZlRnVuYyhBcnJheVByb3RvdHlwZS5pbmRleE9mKSA/IEFycmF5
UHJvdG90eXBlLmluZGV4T2YgOiBmdW5jdGlvbiAob2JqLCBmcm9tSW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmIChmcm9tSW5kZXggPT09IG51bGwgfHwgZnJvbUluZGV4ID09PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgICAgICAgICBmcm9tSW5kZXggPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChm
cm9tSW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gTWF0aC5tYXgoMCwg
dGhpcy5sZW5ndGggKyBmcm9tSW5kZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IGZyb21JbmRleCwgaiA9IHRoaXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG9iaikgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIGZpbHRlciA9IGlzTmF0aXZlRnVu
YyhBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gQXJyYXlQcm90b3R5cGUuZmlsdGVyIDogZnVuY3Rp
b24gKGZuLCBjb250ZXh0KSB7Ci0gICAgICAgICAgICB2YXIgaSwKLSAgICAgICAgICAgIHZhbHVl
LAotICAgICAgICAgICAgcmVzdWx0ID0gW10sCi0gICAgICAgICAgICBsZW5ndGggPSB0aGlzLmxl
bmd0aDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB0aGlzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbChj
b250ZXh0LCB2YWx1ZSwgaSwgdGhpcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5wdXNoKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0K
LQotICAgICAgICBpZiAoRW1iZXIuU0hJTV9FUzUpIHsKLSAgICAgICAgICAgIGlmICghQXJyYXlQ
cm90b3R5cGUubWFwKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUubWFwID0gbWFw
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIUFycmF5UHJvdG90eXBlLmZvckVh
Y2gpIHsKLSAgICAgICAgICAgICAgICBBcnJheVByb3RvdHlwZS5mb3JFYWNoID0gZm9yRWFjaDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFBcnJheVByb3RvdHlwZS5maWx0ZXIp
IHsKLSAgICAgICAgICAgICAgICBBcnJheVByb3RvdHlwZS5maWx0ZXIgPSBmaWx0ZXI7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghQXJyYXlQcm90b3R5cGUuaW5kZXhPZikgewot
ICAgICAgICAgICAgICAgIEFycmF5UHJvdG90eXBlLmluZGV4T2YgPSBpbmRleE9mOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFycmF5IHBv
bHlmaWxscyB0byBzdXBwb3J0IEVTNSBmZWF0dXJlcyBpbiBvbGRlciBicm93c2Vycy4KLQotICAg
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBBcnJh
eVBvbHlmaWxscwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX18ubWFwID0gbWFw
OwotICAgICAgICBfX2V4cG9ydHNfXy5mb3JFYWNoID0gZm9yRWFjaDsKLSAgICAgICAgX19leHBv
cnRzX18uZmlsdGVyID0gZmlsdGVyOwotICAgICAgICBfX2V4cG9ydHNfXy5pbmRleE9mID0gaW5k
ZXhPZjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2JpbmRpbmciLAotICAgIFsi
ZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0
YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL21hcCIs
ICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJleHBvcnRz
Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVw
ZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5j
eTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyBFbWJlci5Mb2dnZXIsIEVtYmVyLkxPR19CSU5ESU5HUywgYXNzZXJ0Ci0gICAgICAg
IHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBl
bmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIHRyeVNldCA9IF9fZGVwZW5kZW5jeTNfXy50cnlT
ZXQ7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRlbmN5NF9fLmd1aWRGb3I7Ci0gICAg
ICAgIHZhciBNYXAgPSBfX2RlcGVuZGVuY3k1X18uTWFwOwotICAgICAgICB2YXIgYWRkT2JzZXJ2
ZXIgPSBfX2RlcGVuZGVuY3k2X18uYWRkT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1vdmVPYnNl
cnZlciA9IF9fZGVwZW5kZW5jeTZfXy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIF9zdXNw
ZW5kT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k2X18uX3N1c3BlbmRPYnNlcnZlcjsKLSAgICAgICAg
dmFyIHJ1biA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8vIEVTNlRP
RE86IHdoZXJlIGlzIEVtYmVyLmxvb2t1cCBkZWZpbmVkPwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgot
ICAgICAgICAvLyBDT05TVEFOVFMKLSAgICAgICAgLy8KLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgRGVidWcgcGFyYW1ldGVyIHlvdSBjYW4gdHVybiBvbi4gVGhpcyB3aWxsIGxvZyBhbGwg
YmluZGluZ3MgdGhhdCBmaXJlIHRvCi0gICAgICAgICAgICAgIHRoZSBjb25zb2xlLiBUaGlzIHNo
b3VsZCBiZSBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGNvZGUuIE5vdGUgdGhhdCB5b3UKLSAgICAg
ICAgICAgICAgY2FuIGFsc28gZW5hYmxlIHRoaXMgZnJvbSB0aGUgY29uc29sZSBvciB0ZW1wb3Jh
cmlseS4KLQotICAgICAgICAgICAgICBAcHJvcGVydHkgTE9HX0JJTkRJTkdTCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAg
ICBAZGVmYXVsdCBmYWxzZQotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuTE9HX0JJTkRJ
TkdTID0gZmFsc2UgfHwgISFFbWJlci5FTlYuTE9HX0JJTkRJTkdTOwotCi0gICAgICAgIHZhciBJ
U19HTE9CQUwgPSAvXihbQS1aJF18KFswLTldW0EtWiRdKSkvOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggaXMgZ2xvYmFsIChl
LmcuLCBgTXlBcHAuZm9vQ29udHJvbGxlci5iYXJgKQotICAgICAgICAgICAgICBpbnN0ZWFkIG9m
IGxvY2FsIChgZm9vLmJhci5iYXpgKS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGlzR2xvYmFs
UGF0aAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgICAgICAgICAgIEByZXR1cm4g
Qm9vbGVhbgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaXNHbG9iYWxQYXRoKHBh
dGgpIHsKLSAgICAgICAgICAgIHJldHVybiBJU19HTE9CQUwudGVzdChwYXRoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIGdldFdpdGhHbG9iYWxzKG9iaiwgcGF0aCkgewotICAgICAg
ICAgICAgcmV0dXJuIGdldChpc0dsb2JhbFBhdGgocGF0aCkgPyBFbWJlci5sb29rdXAgOiBvYmos
IHBhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAvLyBCSU5ESU5HCi0g
ICAgICAgIC8vCi0KLSAgICAgICAgZnVuY3Rpb24gQmluZGluZyh0b1BhdGgsIGZyb21QYXRoKSB7
Ci0gICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSAnZndkJzsKLSAgICAgICAgICAgIHRoaXMu
X2Zyb20gPSBmcm9tUGF0aDsKLSAgICAgICAgICAgIHRoaXMuX3RvID0gdG9QYXRoOwotICAgICAg
ICAgICAgdGhpcy5fZGlyZWN0aW9uTWFwID0gTWFwLmNyZWF0ZSgpOwotICAgICAgICAgICAgdGhp
cy5fcmVhZHlUb1N5bmMgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB0aGlzLl9vbmVXYXkgPSB1
bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBjbGFzcyBC
aW5kaW5nCi0gICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotCi0g
ICAgICAgIEJpbmRpbmcucHJvdG90eXBlID0gewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFRoaXMgY29waWVzIHRoZSBCaW5kaW5nIHNvIGl0IGNhbiBiZSBjb25uZWN0ZWQg
dG8gYW5vdGhlciBvYmplY3QuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb3B5Ci0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvcHk6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgY29weSA9IG5ldyBCaW5kaW5nKHRoaXMuX3RvLCB0aGlzLl9mcm9tKTsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5fb25lV2F5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
cHkuX29uZVdheSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiBjb3B5OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAg
ICAgLy8gQ09ORklHCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVGhpcyB3aWxsIHNldCBgZnJvbWAgcHJvcGVydHkgcGF0aCB0byB0aGUgc3Bl
Y2lmaWVkIHZhbHVlLiBJdCB3aWxsIG5vdAotICAgICAgICAgICAgICAgICAgICBhdHRlbXB0IHRv
IHJlc29sdmUgdGhpcyBwcm9wZXJ0eSBwYXRoIHRvIGFuIGFjdHVhbCBvYmplY3QgdW50aWwgeW91
Ci0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3QgdGhlIGJpbmRpbmcuCi0KLSAgICAgICAgICAg
ICAgICAgICAgVGhlIGJpbmRpbmcgd2lsbCBzZWFyY2ggZm9yIHRoZSBwcm9wZXJ0eSBwYXRoIHN0
YXJ0aW5nIGF0IHRoZSByb290IG9iamVjdAotICAgICAgICAgICAgICAgICAgICB5b3UgcGFzcyB3
aGVuIHlvdSBgY29ubmVjdCgpYCB0aGUgYmluZGluZy4gSXQgZm9sbG93cyB0aGUgc2FtZSBydWxl
cyBhcwotICAgICAgICAgICAgICAgICAgICBgZ2V0KClgIC0gc2VlIHRoYXQgbWV0aG9kIGZvciBt
b3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZnJvbQotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aCB0aGUgcHJvcGVydHkgcGF0aCB0
byBjb25uZWN0IHRvCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9
IGB0aGlzYAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZyb206IGZ1bmN0aW9u
KHBhdGgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9mcm9tID0gcGF0aDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgc2V0IHRoZSBgdG9gIHByb3BlcnR5IHBhdGggdG8g
dGhlIHNwZWNpZmllZCB2YWx1ZS4gSXQgd2lsbCBub3QKLSAgICAgICAgICAgICAgICAgICAgYXR0
ZW1wdCB0byByZXNvbHZlIHRoaXMgcHJvcGVydHkgcGF0aCB0byBhbiBhY3R1YWwgb2JqZWN0IHVu
dGlsIHlvdQotICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRoZSBiaW5kaW5nLgotCi0gICAg
ICAgICAgICAgICAgICAgIFRoZSBiaW5kaW5nIHdpbGwgc2VhcmNoIGZvciB0aGUgcHJvcGVydHkg
cGF0aCBzdGFydGluZyBhdCB0aGUgcm9vdCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgeW91
IHBhc3Mgd2hlbiB5b3UgYGNvbm5lY3QoKWAgdGhlIGJpbmRpbmcuIEl0IGZvbGxvd3MgdGhlIHNh
bWUgcnVsZXMgYXMKLSAgICAgICAgICAgICAgICAgICAgYGdldCgpYCAtIHNlZSB0aGF0IG1ldGhv
ZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRv
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfFR1cGxlfSBwYXRoIEEgcHJvcGVy
dHkgcGF0aCBvciB0dXBsZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5CaW5k
aW5nfSBgdGhpc2AKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0bzogZnVuY3Rp
b24ocGF0aCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3RvID0gcGF0aDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBiaW5kaW5nIGFzIG9uZSB3YXkuIEEgb25l
LXdheSBiaW5kaW5nIHdpbGwgcmVsYXkgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICBvbiB0
aGUgYGZyb21gIHNpZGUgdG8gdGhlIGB0b2Agc2lkZSwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFy
b3VuZC4gVGhpcwotICAgICAgICAgICAgICAgICAgICBtZWFucyB0aGF0IGlmIHlvdSBjaGFuZ2Ug
dGhlIGB0b2Agc2lkZSBkaXJlY3RseSwgdGhlIGBmcm9tYCBzaWRlIG1heSBoYXZlCi0gICAgICAg
ICAgICAgICAgICAgIGEgZGlmZmVyZW50IHZhbHVlLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2Qgb25lV2F5Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9
IGB0aGlzYAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9uZVdheTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fb25lV2F5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHRvU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJpbmRpbmcKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG9uZVdheSA9IHRoaXMuX29uZVdheSA/ICdbb25lV2F5XScgOiAnJzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIkVtYmVyLkJpbmRpbmc8IiArIGd1aWRGb3IodGhpcykgKyAi
PigiICsgdGhpcy5fZnJvbSArICIgLT4gIiArIHRoaXMuX3RvICsgIikiICsgb25lV2F5OwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gQ09OTkVDVCBB
TkQgU1lOQwotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEF0dGVtcHRzIHRvIGNvbm5lY3QgdGhpcyBiaW5kaW5nIGluc3RhbmNlIHNvIHRoYXQg
aXQgY2FuIHJlY2VpdmUgYW5kIHJlbGF5Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuIFRo
aXMgbWV0aG9kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHlvdSBoYXZlIG5vdCBzZXQgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIGZyb20vdG8gcHJvcGVydGllcyB5ZXQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBjb25uZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBvYmogVGhlIHJvb3Qgb2JqZWN0IGZvciB0aGlzIGJpbmRpbmcuCi0gICAgICAgICAg
ICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGNvbm5lY3Q6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAg
ICAgIEVtYmVyLmFzc2VydCgnTXVzdCBwYXNzIGEgdmFsaWQgb2JqZWN0IHRvIEVtYmVyLkJpbmRp
bmcuY29ubmVjdCgpJywgISFvYmopOwotCi0gICAgICAgICAgICAgICAgdmFyIGZyb21QYXRoID0g
dGhpcy5fZnJvbSwgdG9QYXRoID0gdGhpcy5fdG87Ci0gICAgICAgICAgICAgICAgdHJ5U2V0KG9i
aiwgdG9QYXRoLCBnZXRXaXRoR2xvYmFscyhvYmosIGZyb21QYXRoKSk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBhZGQgYW4gb2JzZXJ2ZXIgb24gdGhlIG9iamVjdCB0byBiZSBub3RpZmllZCB3aGVu
IHRoZSBiaW5kaW5nIHNob3VsZCBiZSB1cGRhdGVkCi0gICAgICAgICAgICAgICAgYWRkT2JzZXJ2
ZXIob2JqLCBmcm9tUGF0aCwgdGhpcywgdGhpcy5mcm9tRGlkQ2hhbmdlKTsKLQotICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZSBiaW5kaW5nIGlzIGEgdHdvLXdheSBiaW5kaW5nLCBhbHNvIHNldCB1
cCBhbiBvYnNlcnZlciBvbiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9v
bmVXYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIob2JqLCB0b1BhdGgsIHRo
aXMsIHRoaXMudG9EaWRDaGFuZ2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRoaXMuX3JlYWR5VG9TeW5jID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIERpc2Nvbm5lY3RzIHRoZSBiaW5kaW5nIGluc3RhbmNlLiBDaGFuZ2VzIHdpbGwgbm8gbG9u
Z2VyIGJlIHJlbGF5ZWQuIFlvdQotICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCB1c3VhbGx5
IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGRpc2Nvbm5lY3QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUg
cm9vdCBvYmplY3QgeW91IHBhc3NlZCB3aGVuIGNvbm5lY3RpbmcgdGhlIGJpbmRpbmcuCi0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGRpc2Nvbm5lY3Q6IGZ1bmN0aW9uKG9iaikgewotICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnTXVzdCBwYXNzIGEgdmFsaWQgb2JqZWN0IHRvIEVt
YmVyLkJpbmRpbmcuZGlzY29ubmVjdCgpJywgISFvYmopOwotCi0gICAgICAgICAgICAgICAgdmFy
IHR3b1dheSA9ICF0aGlzLl9vbmVXYXk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgYW4g
b2JzZXJ2ZXIgb24gdGhlIG9iamVjdCBzbyB3ZSdyZSBubyBsb25nZXIgbm90aWZpZWQgb2YKLSAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHRoYXQgc2hvdWxkIHVwZGF0ZSBiaW5kaW5ncy4KLSAg
ICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcihvYmosIHRoaXMuX2Zyb20sIHRoaXMsIHRoaXMu
ZnJvbURpZENoYW5nZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB0aGUgYmluZGluZyBpcyB0
d28td2F5LCByZW1vdmUgdGhlIG9ic2VydmVyIGZyb20gdGhlIHRhcmdldCBhcyB3ZWxsCi0gICAg
ICAgICAgICAgICAgaWYgKHR3b1dheSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVPYnNl
cnZlcihvYmosIHRoaXMuX3RvLCB0aGlzLCB0aGlzLnRvRGlkQ2hhbmdlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVRvU3luYyA9IGZhbHNlOyAvLyBk
aXNhYmxlIHNjaGVkdWxlZCBzeW5jcy4uLgotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gUFJJVkFU
RQotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyogY2FsbGVkIHdoZW4gdGhlIGZyb20g
c2lkZSBjaGFuZ2VzICovCi0gICAgICAgICAgICBmcm9tRGlkQ2hhbmdlOiBmdW5jdGlvbih0YXJn
ZXQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZVN5bmModGFyZ2V0LCAnZndkJyk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKiBjYWxsZWQgd2hlbiB0aGUgdG8gc2lk
ZSBjaGFuZ2VzICovCi0gICAgICAgICAgICB0b0RpZENoYW5nZTogZnVuY3Rpb24odGFyZ2V0KSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVTeW5jKHRhcmdldCwgJ2JhY2snKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9zY2hlZHVsZVN5bmM6IGZ1bmN0aW9uKG9iaiwg
ZGlyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbk1hcCA9IHRoaXMuX2RpcmVjdGlv
bk1hcDsKLSAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdEaXIgPSBkaXJlY3Rpb25NYXAuZ2V0
KG9iaik7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlbid0IHNjaGVkdWxlZCB0aGUg
YmluZGluZyB5ZXQsIHNjaGVkdWxlIGl0Ci0gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0Rp
cikgewotICAgICAgICAgICAgICAgICAgICBydW4uc2NoZWR1bGUoJ3N5bmMnLCB0aGlzLCB0aGlz
Ll9zeW5jLCBvYmopOwotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25NYXAuc2V0KG9iaiwg
ZGlyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBib3RoIGEg
J2JhY2snIGFuZCAnZndkJyBzeW5jIGhhdmUgYmVlbiBzY2hlZHVsZWQgb24gdGhlIHNhbWUgb2Jq
ZWN0LAotICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYSAnZndkJyBzeW5jIHNvIHRoYXQg
aXQgcmVtYWlucyBkZXRlcm1pbmlzdGljLgotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0Rp
ciA9PT0gJ2JhY2snICYmIGRpciA9PT0gJ2Z3ZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aW9uTWFwLnNldChvYmosICdmd2QnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICBfc3luYzogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGxvZyA9IEVtYmVyLkxPR19CSU5ESU5HUzsKLQotICAgICAgICAgICAgICAgIC8vIGRv
bid0IHN5bmNocm9uaXplIGRlc3Ryb3llZCBvYmplY3RzIG9yIGRpc2Nvbm5lY3RlZCBiaW5kaW5n
cwotICAgICAgICAgICAgICAgIGlmIChvYmouaXNEZXN0cm95ZWQgfHwgIXRoaXMuX3JlYWR5VG9T
eW5jKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYmluZGluZyBmb3Ig
dGhlIG9iamVjdCB3ZSBhcmUKLSAgICAgICAgICAgICAgICAvLyBzeW5jaHJvbml6aW5nIGZyb20K
LSAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uTWFwID0gdGhpcy5fZGlyZWN0aW9uTWFwOwot
ICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25NYXAuZ2V0KG9iaik7Ci0K
LSAgICAgICAgICAgICAgICB2YXIgZnJvbVBhdGggPSB0aGlzLl9mcm9tLCB0b1BhdGggPSB0aGlz
Ll90bzsKLQotICAgICAgICAgICAgICAgIGRpcmVjdGlvbk1hcC5yZW1vdmUob2JqKTsKLQotICAg
ICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIHN5bmNocm9uaXppbmcgZnJvbSB0aGUgcmVtb3RlIG9i
amVjdC4uLgotICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdmd2QnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBmcm9tVmFsdWUgPSBnZXRXaXRoR2xvYmFscyhvYmosIHRoaXMu
X2Zyb20pOwotICAgICAgICAgICAgICAgICAgICBpZiAobG9nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBFbWJlci5Mb2dnZXIubG9nKCcgJywgdGhpcy50b1N0cmluZygpLCAnLT4nLCBmcm9t
VmFsdWUsIG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX29uZVdheSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5U2V0KG9iaiwg
dG9QYXRoLCBmcm9tVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgX3N1c3BlbmRPYnNlcnZlcihvYmosIHRvUGF0aCwgdGhpcywgdGhp
cy50b0RpZENoYW5nZSwgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeVNldChvYmosIHRvUGF0aCwgZnJvbVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHdl
J3JlIHN5bmNocm9uaXppbmcgKnRvKiB0aGUgcmVtb3RlIG9iamVjdAotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnYmFjaycpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHRvVmFsdWUgPSBnZXQob2JqLCB0aGlzLl90byk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5sb2coJyAnLCB0
aGlzLnRvU3RyaW5nKCksICc8LScsIHRvVmFsdWUsIG9iaik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgX3N1c3BlbmRPYnNlcnZlcihvYmosIGZyb21QYXRoLCB0
aGlzLCB0aGlzLmZyb21EaWRDaGFuZ2UsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeVNldChpc0dsb2JhbFBhdGgoZnJvbVBhdGgpID8gRW1iZXIubG9va3VwIDogb2Jq
LCBmcm9tUGF0aCwgdG9WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9u
IG1peGluUHJvcGVydGllcyh0bywgZnJvbSkgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IGZyb20pIHsKLSAgICAgICAgICAgICAgICBpZiAoZnJvbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWl4aW5Qcm9wZXJ0aWVz
KEJpbmRpbmcsIHsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgU2VlIGBF
bWJlci5CaW5kaW5nLmZyb21gLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZnJvbQot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZnJvbTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIEMgPSB0aGlzLCBi
aW5kaW5nID0gbmV3IEMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZy5mcm9tLmFw
cGx5KGJpbmRpbmcsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KgotICAgICAgICAgICAgICAgICAgICBTZWUgYEVtYmVyLkJpbmRpbmcudG9gLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgdG8KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpYwotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRvOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgQyA9IHRoaXMsIGJpbmRpbmcgPSBuZXcgQygpOwotICAgICAgICAgICAgICAg
IHJldHVybiBiaW5kaW5nLnRvLmFwcGx5KGJpbmRpbmcsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5l
dyBCaW5kaW5nIGluc3RhbmNlIGFuZCBtYWtlcyBpdCBhcHBseSBpbiBhIHNpbmdsZSBkaXJlY3Rp
b24uCi0gICAgICAgICAgICAgICAgICAgIEEgb25lLXdheSBiaW5kaW5nIHdpbGwgcmVsYXkgY2hh
bmdlcyBvbiB0aGUgYGZyb21gIHNpZGUgb2JqZWN0IChzdXBwbGllZAotICAgICAgICAgICAgICAg
ICAgICBhcyB0aGUgYGZyb21gIGFyZ3VtZW50KSB0aGUgYHRvYCBzaWRlLCBidXQgbm90IHRoZSBv
dGhlciB3YXkgYXJvdW5kLgotICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoYXQgaWYg
eW91IGNoYW5nZSB0aGUgInRvIiBzaWRlIGRpcmVjdGx5LCB0aGUgImZyb20iIHNpZGUgbWF5IGhh
dmUKLSAgICAgICAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgdmFsdWUuCi0KLSAgICAgICAgICAg
ICAgICAgICAgU2VlIGBCaW5kaW5nLm9uZVdheWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBvbmVXYXkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZyb20gZnJv
bSBwYXRoLgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IFtmbGFnXSAoT3B0
aW9uYWwpIHBhc3Npbmcgbm90aGluZyBoZXJlIHdpbGwgbWFrZSB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgICBiaW5kaW5nIGBvbmVXYXlgLiBZb3UgY2FuIGluc3RlYWQgcGFzcyBgZmFsc2VgIHRv
IGRpc2FibGUgYG9uZVdheWAsIG1ha2luZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICBiaW5k
aW5nIHR3byB3YXkgYWdhaW4uCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJp
bmRpbmd9IGB0aGlzYAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9uZVdheTog
ZnVuY3Rpb24oZnJvbSwgZmxhZykgewotICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcywgYmlu
ZGluZyA9IG5ldyBDKG51bGwsIGZyb20pOwotICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5n
Lm9uZVdheShmbGFnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9KTsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIEFuIGBFbWJlci5CaW5kaW5nYCBjb25uZWN0cyB0aGUgcHJvcGVydGll
cyBvZiB0d28gb2JqZWN0cyBzbyB0aGF0IHdoZW5ldmVyCi0gICAgICAgICAgICAgIHRoZSB2YWx1
ZSBvZiBvbmUgcHJvcGVydHkgY2hhbmdlcywgdGhlIG90aGVyIHByb3BlcnR5IHdpbGwgYmUgY2hh
bmdlZCBhbHNvLgotCi0gICAgICAgICAgICAgICMjIEF1dG9tYXRpYyBDcmVhdGlvbiBvZiBCaW5k
aW5ncyB3aXRoIGAvXipCaW5kaW5nL2AtbmFtZWQgUHJvcGVydGllcwotCi0gICAgICAgICAgICAg
IFlvdSBkbyBub3QgdXN1YWxseSBjcmVhdGUgQmluZGluZyBvYmplY3RzIGRpcmVjdGx5IGJ1dCBp
bnN0ZWFkIGRlc2NyaWJlCi0gICAgICAgICAgICAgIGJpbmRpbmdzIGluIHlvdXIgY2xhc3Mgb3Ig
b2JqZWN0IGRlZmluaXRpb24gdXNpbmcgYXV0b21hdGljIGJpbmRpbmcKLSAgICAgICAgICAgICAg
ZGV0ZWN0aW9uLgotCi0gICAgICAgICAgICAgIFByb3BlcnRpZXMgZW5kaW5nIGluIGEgYEJpbmRp
bmdgIHN1ZmZpeCB3aWxsIGJlIGNvbnZlcnRlZCB0byBgRW1iZXIuQmluZGluZ2AKLSAgICAgICAg
ICAgICAgaW5zdGFuY2VzLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgYSBz
dHJpbmcgcmVwcmVzZW50aW5nIGEgcGF0aAotICAgICAgICAgICAgICB0byBhbm90aGVyIG9iamVj
dCBvciBhIGN1c3RvbSBiaW5kaW5nIGluc3RhbmNlZCBjcmVhdGVkIHVzaW5nIEJpbmRpbmcgaGVs
cGVycwotICAgICAgICAgICAgICAoc2VlICJPbmUgV2F5IEJpbmRpbmdzIik6Ci0KLSAgICAgICAg
ICAgICAgYGBgCi0gICAgICAgICAgICAgIHZhbHVlQmluZGluZzogIk15QXBwLnNvbWVDb250cm9s
bGVyLnRpdGxlIgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIHdpbGwg
Y3JlYXRlIGEgYmluZGluZyBmcm9tIGBNeUFwcC5zb21lQ29udHJvbGxlci50aXRsZWAgdG8gdGhl
IGB2YWx1ZWAKLSAgICAgICAgICAgICAgcHJvcGVydHkgb2YgeW91ciBvYmplY3QgaW5zdGFuY2Ug
YXV0b21hdGljYWxseS4gTm93IHRoZSB0d28gdmFsdWVzIHdpbGwgYmUKLSAgICAgICAgICAgICAg
a2VwdCBpbiBzeW5jLgotCi0gICAgICAgICAgICAgICMjIE9uZSBXYXkgQmluZGluZ3MKLQotICAg
ICAgICAgICAgICBPbmUgZXNwZWNpYWxseSB1c2VmdWwgYmluZGluZyBjdXN0b21pemF0aW9uIHlv
dSBjYW4gdXNlIGlzIHRoZSBgb25lV2F5KClgCi0gICAgICAgICAgICAgIGhlbHBlci4gVGhpcyBo
ZWxwZXIgdGVsbHMgRW1iZXIgdGhhdCB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbgotICAgICAg
ICAgICAgICByZWNlaXZpbmcgY2hhbmdlcyBvbiB0aGUgb2JqZWN0IHlvdSBhcmUgYmluZGluZyBm
cm9tLiBGb3IgZXhhbXBsZSwgaWYgeW91Ci0gICAgICAgICAgICAgIGFyZSBiaW5kaW5nIHRvIGEg
cHJlZmVyZW5jZSBhbmQgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgaWYgdGhlIHByZWZlcmVuY2UK
LSAgICAgICAgICAgICAgaGFzIGNoYW5nZWQsIGJ1dCB5b3VyIG9iamVjdCB3aWxsIG5vdCBiZSBj
aGFuZ2luZyB0aGUgcHJlZmVyZW5jZSBpdHNlbGYsIHlvdQotICAgICAgICAgICAgICBjb3VsZCBk
bzoKLQotICAgICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAgYmlnVGl0bGVzQmluZGluZzog
RW1iZXIuQmluZGluZy5vbmVXYXkoIk15QXBwLnByZWZlcmVuY2VzQ29udHJvbGxlci5iaWdUaXRs
ZXMiKQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIHdheSBpZiB0aGUg
dmFsdWUgb2YgYE15QXBwLnByZWZlcmVuY2VzQ29udHJvbGxlci5iaWdUaXRsZXNgIGNoYW5nZXMg
dGhlCi0gICAgICAgICAgICAgIGBiaWdUaXRsZXNgIHByb3BlcnR5IG9mIHlvdXIgb2JqZWN0IHdp
bGwgY2hhbmdlIGFsc28uIEhvd2V2ZXIsIGlmIHlvdQotICAgICAgICAgICAgICBjaGFuZ2UgdGhl
IHZhbHVlIG9mIHlvdXIgYGJpZ1RpdGxlc2AgcHJvcGVydHksIGl0IHdpbGwgbm90IHVwZGF0ZSB0
aGUKLSAgICAgICAgICAgICAgYHByZWZlcmVuY2VzQ29udHJvbGxlcmAuCi0KLSAgICAgICAgICAg
ICAgT25lIHdheSBiaW5kaW5ncyBhcmUgYWxtb3N0IHR3aWNlIGFzIGZhc3QgdG8gc2V0dXAgYW5k
IHR3aWNlIGFzIGZhc3QgdG8KLSAgICAgICAgICAgICAgZXhlY3V0ZSBiZWNhdXNlIHRoZSBiaW5k
aW5nIG9ubHkgaGFzIHRvIHdvcnJ5IGFib3V0IGNoYW5nZXMgdG8gb25lIHNpZGUuCi0KLSAgICAg
ICAgICAgICAgWW91IHNob3VsZCBjb25zaWRlciB1c2luZyBvbmUgd2F5IGJpbmRpbmdzIGFueXRp
bWUgeW91IGhhdmUgYW4gb2JqZWN0IHRoYXQKLSAgICAgICAgICAgICAgbWF5IGJlIGNyZWF0ZWQg
ZnJlcXVlbnRseSBhbmQgeW91IGRvIG5vdCBpbnRlbmQgdG8gY2hhbmdlIGEgcHJvcGVydHk7IG9u
bHkKLSAgICAgICAgICAgICAgdG8gbW9uaXRvciBpdCBmb3IgY2hhbmdlcyAoc3VjaCBhcyBpbiB0
aGUgZXhhbXBsZSBhYm92ZSkuCi0KLSAgICAgICAgICAgICAgIyMgQWRkaW5nIEJpbmRpbmdzIE1h
bnVhbGx5Ci0KLSAgICAgICAgICAgICAgQWxsIG9mIHRoZSBleGFtcGxlcyBhYm92ZSBzaG93IHlv
dSBob3cgdG8gY29uZmlndXJlIGEgY3VzdG9tIGJpbmRpbmcsIGJ1dCB0aGUKLSAgICAgICAgICAg
ICAgcmVzdWx0IG9mIHRoZXNlIGN1c3RvbWl6YXRpb25zIHdpbGwgYmUgYSBiaW5kaW5nIHRlbXBs
YXRlLCBub3QgYSBmdWxseSBhY3RpdmUKLSAgICAgICAgICAgICAgQmluZGluZyBpbnN0YW5jZS4g
VGhlIGJpbmRpbmcgd2lsbCBhY3R1YWxseSBiZWNvbWUgYWN0aXZlIG9ubHkgd2hlbiB5b3UKLSAg
ICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIG9iamVjdCB0aGUgYmluZGluZyBiZWxvbmdzIHRv
LiBJdCBpcyB1c2VmdWwgaG93ZXZlciwgdG8KLSAgICAgICAgICAgICAgdW5kZXJzdGFuZCB3aGF0
IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiB0aGUgYmluZGluZyBpcyBhY3RpdmF0ZWQuCi0KLSAgICAg
ICAgICAgICAgRm9yIGEgYmluZGluZyB0byBmdW5jdGlvbiBpdCBtdXN0IGhhdmUgYXQgbGVhc3Qg
YSBgZnJvbWAgcHJvcGVydHkgYW5kIGEgYHRvYAotICAgICAgICAgICAgICBwcm9wZXJ0eS4gVGhl
IGBmcm9tYCBwcm9wZXJ0eSBwYXRoIHBvaW50cyB0byB0aGUgb2JqZWN0L2tleSB0aGF0IHlvdSB3
YW50IHRvCi0gICAgICAgICAgICAgIGJpbmQgZnJvbSB3aGlsZSB0aGUgYHRvYCBwYXRoIHBvaW50
cyB0byB0aGUgb2JqZWN0L2tleSB5b3Ugd2FudCB0byBiaW5kIHRvLgotCi0gICAgICAgICAgICAg
IFdoZW4geW91IGRlZmluZSBhIGN1c3RvbSBiaW5kaW5nLCB5b3UgYXJlIHVzdWFsbHkgZGVzY3Jp
YmluZyB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgeW91IHdhbnQgdG8gYmluZCBmcm9tIChz
dWNoIGFzIGBNeUFwcC5zb21lQ29udHJvbGxlci52YWx1ZWAgaW4gdGhlIGV4YW1wbGVzCi0gICAg
ICAgICAgICAgIGFib3ZlKS4gV2hlbiB5b3VyIG9iamVjdCBpcyBjcmVhdGVkLCBpdCB3aWxsIGF1
dG9tYXRpY2FsbHkgYXNzaWduIHRoZSB2YWx1ZQotICAgICAgICAgICAgICB5b3Ugd2FudCB0byBi
aW5kIGB0b2AgYmFzZWQgb24gdGhlIG5hbWUgb2YgeW91ciBiaW5kaW5nIGtleS4gSW4gdGhlCi0g
ICAgICAgICAgICAgIGV4YW1wbGVzIGFib3ZlLCBkdXJpbmcgaW5pdCwgRW1iZXIgb2JqZWN0cyB3
aWxsIGVmZmVjdGl2ZWx5IGNhbGwKLSAgICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhpcyBv
biB5b3VyIGJpbmRpbmc6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBiaW5kaW5nID0gRW1iZXIuQmluZGluZy5mcm9tKHRoaXMudmFsdWVCaW5kaW5nKS50bygi
dmFsdWUiKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyBjcmVhdGVz
IGEgbmV3IGJpbmRpbmcgaW5zdGFuY2UgYmFzZWQgb24gdGhlIHRlbXBsYXRlIHlvdSBwcm92aWRl
LCBhbmQKLSAgICAgICAgICAgICAgc2V0cyB0aGUgdG8gcGF0aCB0byB0aGUgYHZhbHVlYCBwcm9w
ZXJ0eSBvZiB0aGUgbmV3IG9iamVjdC4gTm93IHRoYXQgdGhlCi0gICAgICAgICAgICAgIGJpbmRp
bmcgaXMgZnVsbHkgY29uZmlndXJlZCB3aXRoIGEgYGZyb21gIGFuZCBhIGB0b2AsIGl0IHNpbXBs
eSBuZWVkcyB0byBiZQotICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gYmVjb21lIGFjdGl2ZS4g
VGhpcyBpcyBkb25lIHRocm91Z2ggdGhlIGBjb25uZWN0KClgIG1ldGhvZDoKLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGJpbmRpbmcuY29ubmVjdCh0aGlzKTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgTm90ZSB0aGF0IHdoZW4geW91IGNv
bm5lY3QgYSBiaW5kaW5nIHlvdSBwYXNzIHRoZSBvYmplY3QgeW91IHdhbnQgaXQgdG8gYmUKLSAg
ICAgICAgICAgICAgY29ubmVjdGVkIHRvLiBUaGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhl
IHJvb3QgZm9yIGJvdGggdGhlIGZyb20gYW5kCi0gICAgICAgICAgICAgIHRvIHNpZGUgb2YgdGhl
IGJpbmRpbmcgd2hlbiBpbnNwZWN0aW5nIHJlbGF0aXZlIHBhdGhzLiBUaGlzIGFsbG93cyB0aGUK
LSAgICAgICAgICAgICAgYmluZGluZyB0byBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBieSBz
dWJjbGFzc2VkIG9iamVjdHMgYXMgd2VsbC4KLQotICAgICAgICAgICAgICBOb3cgdGhhdCB0aGUg
YmluZGluZyBpcyBjb25uZWN0ZWQsIGl0IHdpbGwgb2JzZXJ2ZSBib3RoIHRoZSBmcm9tIGFuZCB0
byBzaWRlCi0gICAgICAgICAgICAgIGFuZCByZWxheSBjaGFuZ2VzLgotCi0gICAgICAgICAgICAg
IElmIHlvdSBldmVyIG5lZWRlZCB0byBkbyBzbyAoeW91IGFsbW9zdCBuZXZlciB3aWxsLCBidXQg
aXQgaXMgdXNlZnVsIHRvCi0gICAgICAgICAgICAgIHVuZGVyc3RhbmQgdGhpcyBhbnl3YXkpLCB5
b3UgY291bGQgbWFudWFsbHkgY3JlYXRlIGFuIGFjdGl2ZSBiaW5kaW5nIGJ5Ci0gICAgICAgICAg
ICAgIHVzaW5nIHRoZSBgRW1iZXIuYmluZCgpYCBoZWxwZXIgbWV0aG9kLiAoVGhpcyBpcyB0aGUg
c2FtZSBtZXRob2QgdXNlZCBieQotICAgICAgICAgICAgICB0byBzZXR1cCB5b3VyIGJpbmRpbmdz
IG9uIG9iamVjdHMpOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgRW1iZXIuYmluZChNeUFwcC5hbm90aGVyT2JqZWN0LCAidmFsdWUiLCAiTXlBcHAuc29tZUNv
bnRyb2xsZXIudmFsdWUiKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQm90
aCBvZiB0aGVzZSBjb2RlIGZyYWdtZW50cyBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBkb2luZyB0
aGUgbW9zdCBmcmllbmRseQotICAgICAgICAgICAgICBmb3JtIG9mIGJpbmRpbmcgY3JlYXRpb24g
bGlrZSBzbzoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIE15
QXBwLmFub3RoZXJPYmplY3QgPSBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgICAg
ICB2YWx1ZUJpbmRpbmc6ICJNeUFwcC5zb21lQ29udHJvbGxlci52YWx1ZSIsCi0KLSAgICAgICAg
ICAgICAgICAvLyBPVEhFUiBDT0RFIEZPUiBUSElTIE9CSkVDVC4uLgotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgRW1iZXIncyBidWlsdCBpbiBi
aW5kaW5nIGNyZWF0aW9uIG1ldGhvZCBtYWtlcyBpdCBlYXN5IHRvIGF1dG9tYXRpY2FsbHkKLSAg
ICAgICAgICAgICAgY3JlYXRlIGJpbmRpbmdzIGZvciB5b3UuIFlvdSBzaG91bGQgYWx3YXlzIHVz
ZSB0aGUgaGlnaGVzdC1sZXZlbCBBUElzCi0gICAgICAgICAgICAgIGF2YWlsYWJsZSwgZXZlbiBp
ZiB5b3UgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgdW5kZXJuZWF0aC4KLQotICAgICAgICAgICAg
ICBAY2xhc3MgQmluZGluZwotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAg
ICAgICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICAgICAgICAgICovCi0gICAgICAgIC8vIEVtYmVy
LkJpbmRpbmcgPSBCaW5kaW5nOyBFUzZUT0RPOiB3aGVyZSB0byBwdXQgdGhpcz8KLQotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBHbG9iYWwgaGVscGVyIG1ldGhvZCB0byBjcmVhdGUgYSBu
ZXcgYmluZGluZy4gSnVzdCBwYXNzIHRoZSByb290IG9iamVjdAotICAgICAgICAgICAgICBhbG9u
ZyB3aXRoIGEgYHRvYCBhbmQgYGZyb21gIHBhdGggdG8gY3JlYXRlIGFuZCBjb25uZWN0IHRoZSBi
aW5kaW5nLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgYmluZAotICAgICAgICAgICAgICBAZm9y
IEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIHJvb3Qgb2JqZWN0
IG9mIHRoZSB0cmFuc2Zvcm0uCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB0byBUaGUg
cGF0aCB0byB0aGUgJ3RvJyBzaWRlIG9mIHRoZSBiaW5kaW5nLgotICAgICAgICAgICAgICAgIE11
c3QgYmUgcmVsYXRpdmUgdG8gb2JqLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZnJv
bSBUaGUgcGF0aCB0byB0aGUgJ2Zyb20nIHNpZGUgb2YgdGhlIGJpbmRpbmcuCi0gICAgICAgICAg
ICAgICAgTXVzdCBiZSByZWxhdGl2ZSB0byBvYmogb3IgYSBnbG9iYWwgcGF0aC4KLSAgICAgICAg
ICAgICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYmluZGluZyBpbnN0YW5jZQotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYmluZChvYmosIHRvLCBmcm9tKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IEJpbmRpbmcodG8sIGZyb20pLmNvbm5lY3Qob2JqKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIF9fZXhwb3J0c19fLmJpbmQgPSBiaW5kOyAvKioKLSAgICAgICAgICAgICAgQG1l
dGhvZCBvbmVXYXkKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gb2JqIFRoZSByb290IG9iamVjdCBvZiB0aGUgdHJhbnNmb3JtLgotICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gdG8gVGhlIHBhdGggdG8gdGhlICd0bycgc2lkZSBvZiB0
aGUgYmluZGluZy4KLSAgICAgICAgICAgICAgICBNdXN0IGJlIHJlbGF0aXZlIHRvIG9iai4KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGZyb20gVGhlIHBhdGggdG8gdGhlICdmcm9tJyBz
aWRlIG9mIHRoZSBiaW5kaW5nLgotICAgICAgICAgICAgICAgIE11c3QgYmUgcmVsYXRpdmUgdG8g
b2JqIG9yIGEgZ2xvYmFsIHBhdGguCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRp
bmd9IGJpbmRpbmcgaW5zdGFuY2UKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9u
ZVdheShvYmosIHRvLCBmcm9tKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmcodG8s
IGZyb20pLm9uZVdheSgpLmNvbm5lY3Qob2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhw
b3J0c19fLm9uZVdheSA9IG9uZVdheTsKLSAgICAgICAgX19leHBvcnRzX18uQmluZGluZyA9IEJp
bmRpbmc7Ci0gICAgICAgIF9fZXhwb3J0c19fLmlzR2xvYmFsUGF0aCA9IGlzR2xvYmFsUGF0aDsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2NoYWlucyIsCi0gICAgWyJlbWJlci1t
ZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC91dGls
cyIsICJlbWJlci1tZXRhbC9hcnJheSIsICJlbWJlci1tZXRhbC93YXRjaF9rZXkiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyB3YXJuLCBhc3NlcnQsIGV0YzsKLSAgICAg
ICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBub3JtYWxpemVU
dXBsZSA9IF9fZGVwZW5kZW5jeTJfXy5ub3JtYWxpemVUdXBsZTsKLSAgICAgICAgdmFyIG1ldGEg
PSBfX2RlcGVuZGVuY3kzX18ubWV0YTsKLSAgICAgICAgdmFyIE1FVEFfS0VZID0gX19kZXBlbmRl
bmN5M19fLk1FVEFfS0VZOwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTRfXy5m
b3JFYWNoOwotICAgICAgICB2YXIgd2F0Y2hLZXkgPSBfX2RlcGVuZGVuY3k1X18ud2F0Y2hLZXk7
Ci0gICAgICAgIHZhciB1bndhdGNoS2V5ID0gX19kZXBlbmRlbmN5NV9fLnVud2F0Y2hLZXk7Ci0K
LSAgICAgICAgdmFyIG1ldGFGb3IgPSBtZXRhLAotICAgICAgICB3YXJuID0gRW1iZXIud2FybiwK
LSAgICAgICAgRklSU1RfS0VZID0gL14oW15cLl0rKS87Ci0KLSAgICAgICAgZnVuY3Rpb24gZmly
c3RLZXkocGF0aCkgewotICAgICAgICAgICAgcmV0dXJuIHBhdGgubWF0Y2goRklSU1RfS0VZKVsw
XTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTsKLQotICAgICAg
ICAvLyBhdHRlbXB0cyB0byBhZGQgdGhlIHBlbmRpbmdRdWV1ZSBjaGFpbnMgYWdhaW4uIElmIHNv
bWUgb2YgdGhlbSBlbmQgdXAKLSAgICAgICAgLy8gYmFjayBpbiB0aGUgcXVldWUgYW5kIHJlc2No
ZWR1bGUgaXMgdHJ1ZSwgc2NoZWR1bGVzIGEgdGltZW91dCB0byB0cnkKLSAgICAgICAgLy8gYWdh
aW4uCi0gICAgICAgIGZ1bmN0aW9uIGZsdXNoUGVuZGluZ0NoYWlucygpIHsKLSAgICAgICAgICAg
IGlmIChwZW5kaW5nUXVldWUubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbm90aGluZyB0byBkbwotCi0gICAgICAg
ICAgICB2YXIgcXVldWUgPSBwZW5kaW5nUXVldWU7Ci0gICAgICAgICAgICBwZW5kaW5nUXVldWUg
PSBbXTsKLQotICAgICAgICAgICAgZm9yRWFjaC5jYWxsKHF1ZXVlLCBmdW5jdGlvbihxKSB7Ci0g
ICAgICAgICAgICAgICAgcVswXS5hZGQocVsxXSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgd2FybignV2F0Y2hpbmcgYW4gdW5kZWZpbmVkIGdsb2JhbCwgRW1iZXIgZXhwZWN0cyB3
YXRjaGVkIGdsb2JhbHMgdG8gYmUgc2V0dXAgYnkgdGhlIHRpbWUgdGhlIHJ1biBsb29wIGlzIGZs
dXNoZWQsIGNoZWNrIGZvciB0eXBvcycsIHBlbmRpbmdRdWV1ZS5sZW5ndGggPT09IDApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZmx1c2hQZW5kaW5nQ2hhaW5zID0gZmx1c2hQ
ZW5kaW5nQ2hhaW5zOwotICAgICAgICBmdW5jdGlvbiBhZGRDaGFpbldhdGNoZXIob2JqLCBrZXlO
YW1lLCBub2RlKSB7Ci0gICAgICAgICAgICBpZiAoIW9iaiB8fCAoJ29iamVjdCcgIT09IHR5cGVv
ZiBvYmopKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gbm90aGluZyB0byBkbwotCi0gICAgICAgICAgICB2YXIgbSA9IG1ldGFGb3Iob2Jq
KSwgbm9kZXMgPSBtLmNoYWluV2F0Y2hlcnM7Ci0KLSAgICAgICAgICAgIGlmICghbS5oYXNPd25Q
cm9wZXJ0eSgnY2hhaW5XYXRjaGVycycpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZXMgPSBtLmNo
YWluV2F0Y2hlcnMgPSB7fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFub2Rl
c1trZXlOYW1lXSkgewotICAgICAgICAgICAgICAgIG5vZGVzW2tleU5hbWVdID0gW107Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBub2Rlc1trZXlOYW1lXS5wdXNoKG5vZGUpOwotICAgICAg
ICAgICAgd2F0Y2hLZXkob2JqLCBrZXlOYW1lLCBtKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIHJlbW92ZUNoYWluV2F0Y2hlcihvYmosIGtleU5hbWUsIG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmICghb2JqIHx8ICdvYmplY3QnICE9PSB0eXBlb2Ygb2JqKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbm90aGluZyB0byBkbwot
Ci0gICAgICAgICAgICB2YXIgbSA9IG9ialtNRVRBX0tFWV07Ci0gICAgICAgICAgICBpZiAobSAm
JiAhbS5oYXNPd25Qcm9wZXJ0eSgnY2hhaW5XYXRjaGVycycpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gbm90aGluZyB0byBkbwotCi0g
ICAgICAgICAgICB2YXIgbm9kZXMgPSBtICYmIG0uY2hhaW5XYXRjaGVyczsKLQotICAgICAgICAg
ICAgaWYgKG5vZGVzICYmIG5vZGVzW2tleU5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgbm9kZXMg
PSBub2Rlc1trZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5v
ZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXNb
aV0gPT09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShpLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW53YXRjaEtl
eShvYmosIGtleU5hbWUsIG0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSBDaGFpbk5vZGUg
d2F0Y2hlcyBhIHNpbmdsZSBrZXkgb24gYW4gb2JqZWN0LiBJZiB5b3UgcHJvdmlkZSBhIHN0YXJ0
aW5nCi0gICAgICAgIC8vIHZhbHVlIGZvciB0aGUga2V5IHRoZW4gdGhlIG5vZGUgd29uJ3QgYWN0
dWFsbHkgd2F0Y2ggaXQuIEZvciBhIHJvb3Qgbm9kZQotICAgICAgICAvLyBwYXNzIG51bGwgZm9y
IHBhcmVudCBhbmQga2V5IGFuZCBvYmplY3QgZm9yIHZhbHVlLgotICAgICAgICBmdW5jdGlvbiBD
aGFpbk5vZGUocGFyZW50LCBrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICB0aGlzLl9wYXJlbnQg
PSBwYXJlbnQ7Ci0gICAgICAgICAgICB0aGlzLl9rZXkgPSBrZXk7Ci0KLSAgICAgICAgICAgIC8v
IF93YXRjaGluZyBpcyB0cnVlIHdoZW4gY2FsbGluZyBnZXQodGhpcy5fcGFyZW50LCB0aGlzLl9r
ZXkpIHdpbGwKLSAgICAgICAgICAgIC8vIHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBub2RlLgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEl0IGlzIGZhbHNlIGZvciB0aGUgcm9vdCBv
ZiBhIGNoYWluIChiZWNhdXNlIHdlIGhhdmUgbm8gcGFyZW50KQotICAgICAgICAgICAgLy8gYW5k
IGZvciBnbG9iYWwgcGF0aHMgKGJlY2F1c2UgdGhlIHBhcmVudCBub2RlIGlzIHRoZSBvYmplY3Qg
d2l0aAotICAgICAgICAgICAgLy8gdGhlIG9ic2VydmVyIG9uIGl0KQotICAgICAgICAgICAgdGhp
cy5fd2F0Y2hpbmcgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICB0aGlzLl92
YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdGhpcy5fcGF0aHMgPSB7fTsKLSAgICAgICAgICAg
IGlmICh0aGlzLl93YXRjaGluZykgewotICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdCA9IHBh
cmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vYmplY3QpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkQ2hhaW5XYXRjaGVyKHRoaXMuX29iamVjdCwgdGhpcy5fa2V5LCB0
aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFNwZWNpYWwtY2FzZTogdGhlIEVhY2hQcm94eSByZWxpZXMgb24gaW1tZWRpYXRlIGV2YWx1YXRp
b24gdG8KLSAgICAgICAgICAgIC8vIGVzdGFibGlzaCBpdHMgb2JzZXJ2ZXJzLgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoIGFuIGVmZmljaWVu
dCBjYWxsYmFjayB0aGF0IHRoZSBFYWNoUHJveHkKLSAgICAgICAgICAgIC8vIGNhbiBpbXBsZW1l
bnQuCi0gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50ICYmIHRoaXMuX3BhcmVudC5fa2V5ID09
PSAnQGVhY2gnKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIENoYWluTm9kZVByb3RvdHlwZSA9IENoYWluTm9k
ZS5wcm90b3R5cGU7Ci0KLSAgICAgICAgZnVuY3Rpb24gbGF6eUdldChvYmosIGtleSkgewotICAg
ICAgICAgICAgaWYgKCFvYmopIAotICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0K
LSAgICAgICAgICAgIHZhciBtZXRhID0gb2JqW01FVEFfS0VZXTsKLSAgICAgICAgICAgIC8vIGNo
ZWNrIGlmIG9iamVjdCBtZWFudCBvbmx5IHRvIGJlIGEgcHJvdG90eXBlCi0gICAgICAgICAgICBp
ZiAobWV0YSAmJiBtZXRhLnByb3RvID09PSBvYmopIAotICAgICAgICAgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgIGlmIChrZXkgPT09ICJAZWFjaCIpIAotICAgICAgICAg
ICAgICAgIHJldHVybiBnZXQob2JqLCBrZXkpOwotCi0gICAgICAgICAgICAvLyBpZiBhIENQIG9u
bHkgcmV0dXJuIGNhY2hlZCB2YWx1ZQotICAgICAgICAgICAgdmFyIGRlc2MgPSBtZXRhICYmIG1l
dGEuZGVzY3Nba2V5XTsKLSAgICAgICAgICAgIGlmIChkZXNjICYmIGRlc2MuX2NhY2hlYWJsZSkg
ewotICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbWV0YS5jYWNoZSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWV0YS5jYWNoZVtrZXldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZ2V0KG9iaiwga2V5KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIENoYWluTm9kZVByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09PSB1bmRlZmluZWQgJiYgdGhpcy5fd2F0
Y2hpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyZW50LnZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBsYXp5R2V0KG9iaiwgdGhpcy5fa2V5KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTsKLSAgICAgICAg
fTsKLQotICAgICAgICBDaGFpbk5vZGVQcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgaWYgKHRoaXMuX3dhdGNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9i
aiA9IHRoaXMuX29iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlbW92ZUNoYWluV2F0Y2hlcihvYmosIHRoaXMuX2tleSwgdGhpcyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoaW5nID0gZmFsc2U7IC8v
IHNvIGZ1dHVyZSBjYWxscyBkbyBub3RoaW5nCi0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgLy8gY29waWVzIGEgdG9wIGxldmVsIG9iamVjdCBvbmx5Ci0gICAgICAgIENoYWlu
Tm9kZVByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICB2YXIgcmV0
ID0gbmV3IENoYWluTm9kZShudWxsLCBudWxsLCBvYmopLAotICAgICAgICAgICAgcGF0aHMgPSB0
aGlzLl9wYXRocywgcGF0aDsKLSAgICAgICAgICAgIGZvciAocGF0aCBpbiBwYXRocykgewotICAg
ICAgICAgICAgICAgIGlmIChwYXRoc1twYXRoXSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyB0aGlzIGNo
ZWNrIHdpbGwgYWxzbyBjYXRjaCBub24tbnVtYmVyIHZhbHMuCi0gICAgICAgICAgICAgICAgcmV0
LmFkZChwYXRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgLy8gY2FsbGVkIG9uIHRoZSByb290IG5vZGUgb2YgYSBjaGFpbiB0
byBzZXR1cCB3YXRjaGVycyBvbiB0aGUgc3BlY2lmaWVkCi0gICAgICAgIC8vIHBhdGguCi0gICAg
ICAgIENoYWluTm9kZVByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAg
ICB2YXIgb2JqLCB0dXBsZSwga2V5LCBzcmMsIHBhdGhzOwotCi0gICAgICAgICAgICBwYXRocyA9
IHRoaXMuX3BhdGhzOwotICAgICAgICAgICAgcGF0aHNbcGF0aF0gPSAocGF0aHNbcGF0aF0gfHwg
MCkgKyAxOwotCi0gICAgICAgICAgICBvYmogPSB0aGlzLnZhbHVlKCk7Ci0gICAgICAgICAgICB0
dXBsZSA9IG5vcm1hbGl6ZVR1cGxlKG9iaiwgcGF0aCk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBw
YXRoIHdhcyBhIGxvY2FsIHBhdGgKLSAgICAgICAgICAgIGlmICh0dXBsZVswXSAmJiB0dXBsZVsw
XSA9PT0gb2JqKSB7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHR1cGxlWzFdOwotICAgICAgICAg
ICAgICAgIGtleSA9IGZpcnN0S2V5KHBhdGgpOwotICAgICAgICAgICAgICAgIHBhdGggPSBwYXRo
LnNsaWNlKGtleS5sZW5ndGggKyAxKTsKLQotICAgICAgICAgICAgICAgIC8vIGdsb2JhbCBwYXRo
LCBidXQgb2JqZWN0IGRvZXMgbm90IGV4aXN0IHlldC4KLSAgICAgICAgICAgICAgICAvLyBwdXQg
aW50byBhIHF1ZXVlIGFuZCB0cnkgdG8gY29ubmVjdCBsYXRlci4KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIXR1cGxlWzBdKSB7Ci0gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlLnB1c2goW3Ro
aXMsIHBhdGhdKTsKLSAgICAgICAgICAgICAgICB0dXBsZS5sZW5ndGggPSAwOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIGdsb2JhbCBwYXRoLCBhbmQgb2Jq
ZWN0IGFscmVhZHkgZXhpc3RzCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHNyYyA9IHR1cGxlWzBdOwotICAgICAgICAgICAgICAgIGtleSA9IHBhdGguc2xpY2UoMCwgMCAt
ICh0dXBsZVsxXS5sZW5ndGggKyAxKSk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHR1cGxlWzFd
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0dXBsZS5sZW5ndGggPSAwOwotICAgICAg
ICAgICAgdGhpcy5jaGFpbihrZXksIHBhdGgsIHNyYyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gY2FsbGVkIG9uIHRoZSByb290IG5vZGUgb2YgYSBjaGFpbiB0byB0ZWFyZG93biB3YXRjaGVy
IG9uIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgLy8gcGF0aAotICAgICAgICBDaGFpbk5vZGVQcm90
b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgdmFyIG9iaiwgdHVw
bGUsIGtleSwgc3JjLCBwYXRoczsKLQotICAgICAgICAgICAgcGF0aHMgPSB0aGlzLl9wYXRoczsK
LSAgICAgICAgICAgIGlmIChwYXRoc1twYXRoXSA+IDApIHsKLSAgICAgICAgICAgICAgICBwYXRo
c1twYXRoXS0tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvYmogPSB0aGlzLnZhbHVl
KCk7Ci0gICAgICAgICAgICB0dXBsZSA9IG5vcm1hbGl6ZVR1cGxlKG9iaiwgcGF0aCk7Ci0gICAg
ICAgICAgICBpZiAodHVwbGVbMF0gPT09IG9iaikgewotICAgICAgICAgICAgICAgIHBhdGggPSB0
dXBsZVsxXTsKLSAgICAgICAgICAgICAgICBrZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAgICAg
ICAgICAgICBwYXRoID0gcGF0aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHNyYyA9IHR1cGxlWzBdOwotICAgICAgICAgICAgICAg
IGtleSA9IHBhdGguc2xpY2UoMCwgMCAtICh0dXBsZVsxXS5sZW5ndGggKyAxKSk7Ci0gICAgICAg
ICAgICAgICAgcGF0aCA9IHR1cGxlWzFdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0
dXBsZS5sZW5ndGggPSAwOwotICAgICAgICAgICAgdGhpcy51bmNoYWluKGtleSwgcGF0aCk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLmNvdW50ID0gMDsKLQotICAg
ICAgICBDaGFpbk5vZGVQcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbihrZXksIHBhdGgsIHNyYykg
ewotICAgICAgICAgICAgdmFyIGNoYWlucyA9IHRoaXMuX2NoYWlucywgbm9kZTsKLSAgICAgICAg
ICAgIGlmICghY2hhaW5zKSB7Ci0gICAgICAgICAgICAgICAgY2hhaW5zID0gdGhpcy5fY2hhaW5z
ID0ge307Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5vZGUgPSBjaGFpbnNba2V5XTsK
LSAgICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBjaGFpbnNb
a2V5XSA9IG5ldyBDaGFpbk5vZGUodGhpcywga2V5LCBzcmMpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbm9kZS5jb3VudCsrOyAvLyBjb3VudCBjaGFpbnMuLi4KLQotICAgICAgICAgICAg
Ly8gY2hhaW4gcmVzdCBvZiBwYXRoIGlmIHRoZXJlIGlzIG9uZQotICAgICAgICAgICAgaWYgKHBh
dGgpIHsKLSAgICAgICAgICAgICAgICBrZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAgICAgICAg
ICAgICBwYXRoID0gcGF0aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICAgICAg
bm9kZS5jaGFpbihrZXksIHBhdGgpOyAvLyBOT1RFOiBubyBzcmMgbWVhbnMgaXQgd2lsbCBvYnNl
cnZlIGNoYW5nZXMuLi4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBDaGFp
bk5vZGVQcm90b3R5cGUudW5jaGFpbiA9IGZ1bmN0aW9uKGtleSwgcGF0aCkgewotICAgICAgICAg
ICAgdmFyIGNoYWlucyA9IHRoaXMuX2NoYWlucywgbm9kZSA9IGNoYWluc1trZXldOwotCi0gICAg
ICAgICAgICAvLyB1bmNoYWluIHJlc3Qgb2YgcGF0aCBmaXJzdC4uLgotICAgICAgICAgICAgaWYg
KHBhdGggJiYgcGF0aC5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAga2V5ID0gZmlyc3RL
ZXkocGF0aCk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2Uoa2V5Lmxlbmd0aCAr
IDEpOwotICAgICAgICAgICAgICAgIG5vZGUudW5jaGFpbihrZXksIHBhdGgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBkZWxldGUgbm9kZSBpZiBuZWVkZWQuCi0gICAgICAgICAg
ICBub2RlLmNvdW50LS07Ci0gICAgICAgICAgICBpZiAobm9kZS5jb3VudCA8PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgZGVsZXRlIGNoYWluc1tub2RlLl9rZXldOwotICAgICAgICAgICAgICAgIG5v
ZGUuZGVzdHJveSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH07Ci0KLSAgICAgICAgQ2hh
aW5Ob2RlUHJvdG90eXBlLndpbGxDaGFuZ2UgPSBmdW5jdGlvbihldmVudHMpIHsKLSAgICAgICAg
ICAgIHZhciBjaGFpbnMgPSB0aGlzLl9jaGFpbnM7Ci0gICAgICAgICAgICBpZiAoY2hhaW5zKSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGNoYWlucykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNoYWlucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBjaGFpbnNba2V5XS53aWxsQ2hhbmdlKGV2ZW50cyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fcGFyZW50LmNoYWluV2lsbENoYW5nZSh0aGlzLCB0aGlzLl9rZXks
IDEsIGV2ZW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQ2hhaW5O
b2RlUHJvdG90eXBlLmNoYWluV2lsbENoYW5nZSA9IGZ1bmN0aW9uKGNoYWluLCBwYXRoLCBkZXB0
aCwgZXZlbnRzKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fa2V5KSB7Ci0gICAgICAgICAgICAg
ICAgcGF0aCA9IHRoaXMuX2tleSArICcuJyArIHBhdGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQu
Y2hhaW5XaWxsQ2hhbmdlKHRoaXMsIHBhdGgsIGRlcHRoICsgMSwgZXZlbnRzKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlcHRoID4gMSkgewotICAgICAgICAg
ICAgICAgICAgICBldmVudHMucHVzaCh0aGlzLnZhbHVlKCksIHBhdGgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBwYXRoID0gJ3RoaXMuJyArIHBhdGg7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3BhdGhzW3BhdGhdID4gMCkgewotICAgICAgICAgICAgICAgICAgICBl
dmVudHMucHVzaCh0aGlzLnZhbHVlKCksIHBhdGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBDaGFpbk5vZGVQcm90b3R5cGUuY2hhaW5E
aWRDaGFuZ2UgPSBmdW5jdGlvbihjaGFpbiwgcGF0aCwgZGVwdGgsIGV2ZW50cykgewotICAgICAg
ICAgICAgaWYgKHRoaXMuX2tleSkgewotICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLl9rZXkg
KyAnLicgKyBwYXRoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVu
dCkgewotICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudC5jaGFpbkRpZENoYW5nZSh0aGlzLCBw
YXRoLCBkZXB0aCArIDEsIGV2ZW50cyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChkZXB0aCA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2go
dGhpcy52YWx1ZSgpLCBwYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cGF0aCA9ICd0aGlzLicgKyBwYXRoOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXRoc1tw
YXRoXSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2godGhpcy52YWx1ZSgp
LCBwYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgQ2hhaW5Ob2RlUHJvdG90eXBlLmRpZENoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50cykg
ewotICAgICAgICAgICAgLy8gaW52YWxpZGF0ZSBteSBvd24gdmFsdWUgZmlyc3QuCi0gICAgICAg
ICAgICBpZiAodGhpcy5fd2F0Y2hpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhp
cy5fcGFyZW50LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaiAhPT0gdGhpcy5fb2Jq
ZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoYWluV2F0Y2hlcih0aGlzLl9vYmpl
Y3QsIHRoaXMuX2tleSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdCA9
IG9iajsKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hhaW5XYXRjaGVyKG9iaiwgdGhpcy5fa2V5
LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUg
PSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2U6IHRoZSBFYWNo
UHJveHkgcmVsaWVzIG9uIGltbWVkaWF0ZSBldmFsdWF0aW9uIHRvCi0gICAgICAgICAgICAgICAg
Ly8gZXN0YWJsaXNoIGl0cyBvYnNlcnZlcnMuCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bh
cmVudCAmJiB0aGlzLl9wYXJlbnQuX2tleSA9PT0gJ0BlYWNoJykKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy52YWx1ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVuIG5v
dGlmeSBjaGFpbnMuLi4KLSAgICAgICAgICAgIHZhciBjaGFpbnMgPSB0aGlzLl9jaGFpbnM7Ci0g
ICAgICAgICAgICBpZiAoY2hhaW5zKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IGNoYWlucykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYWlucy5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjaGFpbnNba2V5XS5kaWRDaGFuZ2UoZXZl
bnRzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IGlmIG5vIGV2ZW50cyBhcmUgcGFzc2VkIGluIHRoZW4gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBh
Ym92ZSB3aXJpbmcgdXBkYXRlCi0gICAgICAgICAgICBpZiAoZXZlbnRzID09PSBudWxsKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBh
bmQgZmluYWxseSB0ZWxsIHBhcmVudCBhYm91dCBteSBwYXRoIGNoYW5naW5nLi4uCi0gICAgICAg
ICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LmNo
YWluRGlkQ2hhbmdlKHRoaXMsIHRoaXMuX2tleSwgMSwgZXZlbnRzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBmaW5pc2hDaGFpbnMob2JqKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBvbmx5IGNyZWF0ZSBtZXRhIGlmIHdlIHJlYWxseSBoYXZlIHRvCi0gICAg
ICAgICAgICB2YXIgbSA9IG9ialtNRVRBX0tFWV0sIGNoYWlucyA9IG0gJiYgbS5jaGFpbnM7Ci0g
ICAgICAgICAgICBpZiAoY2hhaW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYWlucy52YWx1
ZSgpICE9PSBvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0YUZvcihvYmopLmNoYWlucyA9
IGNoYWlucyA9IGNoYWlucy5jb3B5KG9iaik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2hhaW5zLmRpZENoYW5nZShudWxsKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5maW5p
c2hDaGFpbnMgPSBmaW5pc2hDaGFpbnM7Ci0gICAgICAgIF9fZXhwb3J0c19fLnJlbW92ZUNoYWlu
V2F0Y2hlciA9IHJlbW92ZUNoYWluV2F0Y2hlcjsKLSAgICAgICAgX19leHBvcnRzX18uQ2hhaW5O
b2RlID0gQ2hhaW5Ob2RlOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvY29tcHV0
ZWQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQi
LCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVy
LW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1l
dGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1l
dGFsL2RlcGVuZGVudF9rZXlzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18s
IF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVw
ZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNl
dCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5
NF9fLm1ldGE7Ci0gICAgICAgIHZhciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5jeTRfXy5NRVRBX0tF
WTsKLSAgICAgICAgdmFyIGluc3BlY3QgPSBfX2RlcGVuZGVuY3k0X18uaW5zcGVjdDsKLSAgICAg
ICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIERlc2NyaXB0b3IgPSBfX2RlcGVuZGVuY3k3X18uRGVzY3JpcHRvcjsKLSAgICAgICAg
dmFyIGRlZmluZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5N19fLmRlZmluZVByb3BlcnR5OwotICAg
ICAgICB2YXIgcHJvcGVydHlXaWxsQ2hhbmdlID0gX19kZXBlbmRlbmN5OF9fLnByb3BlcnR5V2ls
bENoYW5nZTsKLSAgICAgICAgdmFyIHByb3BlcnR5RGlkQ2hhbmdlID0gX19kZXBlbmRlbmN5OF9f
LnByb3BlcnR5RGlkQ2hhbmdlOwotICAgICAgICB2YXIgYWRkRGVwZW5kZW50S2V5cyA9IF9fZGVw
ZW5kZW5jeTlfXy5hZGREZXBlbmRlbnRLZXlzOwotICAgICAgICB2YXIgcmVtb3ZlRGVwZW5kZW50
S2V5cyA9IF9fZGVwZW5kZW5jeTlfXy5yZW1vdmVEZXBlbmRlbnRLZXlzOwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8KLQotICAg
ICAgICBFbWJlci53YXJuKCJUaGUgQ1BfREVGQVVMVF9DQUNIRUFCTEUgZmxhZyBoYXMgYmVlbiBy
ZW1vdmVkIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgY2FjaGVkIGJ5IGRlZmF1
bHQuIFVzZSBgdm9sYXRpbGVgIGlmIHlvdSBkb24ndCB3YW50IGNhY2hpbmcuIiwgRW1iZXIuRU5W
LkNQX0RFRkFVTFRfQ0FDSEVBQkxFICE9PSBmYWxzZSk7Ci0KLQotICAgICAgICB2YXIgbWV0YUZv
ciA9IG1ldGEsCi0gICAgICAgIGFfc2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICBmdW5jdGlv
biBVTkRFRklORUQoKSB7fQotCi0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gQ09NUFVURUQgUFJP
UEVSVFkKLSAgICAgICAgLy8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBjb21wdXRl
ZCBwcm9wZXJ0eSB0cmFuc2Zvcm1zIGFuIG9iamVjdHMgZnVuY3Rpb24gaW50byBhIHByb3BlcnR5
LgotCi0gICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGZ1bmN0aW9uIGJhY2tpbmcgdGhlIGNv
bXB1dGVkIHByb3BlcnR5IHdpbGwgb25seSBiZSBjYWxsZWQKLSAgICAgICAgICAgICAgb25jZSBh
bmQgdGhlIHJlc3VsdCB3aWxsIGJlIGNhY2hlZC4gWW91IGNhbiBzcGVjaWZ5IHZhcmlvdXMgcHJv
cGVydGllcwotICAgICAgICAgICAgICB0aGF0IHlvdXIgY29tcHV0ZWQgcHJvcGVydHkgaXMgZGVw
ZW5kZW50IG9uLiBUaGlzIHdpbGwgZm9yY2UgdGhlIGNhY2hlZAotICAgICAgICAgICAgICByZXN1
bHQgdG8gYmUgcmVjb21wdXRlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtb2RpZmllZC4KLQot
ICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgd2UgZGVjbGFyZSBhIGNvbXB1
dGVkIHByb3BlcnR5IChieSBjYWxsaW5nCi0gICAgICAgICAgICAgIGAucHJvcGVydHkoKWAgb24g
dGhlIGZ1bGxOYW1lIGZ1bmN0aW9uKSBhbmQgc2V0dXAgdGhlIHByb3BlcnRpZXMKLSAgICAgICAg
ICAgICAgZGVwZW5kZW5jaWVzIChkZXBlbmRpbmcgb24gZmlyc3ROYW1lIGFuZCBsYXN0TmFtZSku
IFRoZSBmdWxsTmFtZSBmdW5jdGlvbgotICAgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBvbmNl
IChyZWdhcmRsZXNzIG9mIGhvdyBtYW55IHRpbWVzIGl0IGlzIGFjY2Vzc2VkKSBhcyBsb25nCi0g
ICAgICAgICAgICAgIGFzIGl0J3MgZGVwZW5kZW5jaWVzIGhhdmUgbm90IGJlZW4gY2hhbmdlZC4g
T25jZSBmaXJzdE5hbWUgb3IgbGFzdE5hbWUgYXJlIHVwZGF0ZWQKLSAgICAgICAgICAgICAgYW55
IGZ1dHVyZSBjYWxscyAob3IgYW55dGhpbmcgYm91bmQpIHRvIGZ1bGxOYW1lIHdpbGwgaW5jb3Jw
b3JhdGUgdGhlIG5ldwotICAgICAgICAgICAgICB2YWx1ZXMuCi0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgLy8gdGhlc2Ugd2lsbCBiZSBzdXBwbGllZCBieSBgY3JlYXRl
YAotICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogbnVsbCwKLSAgICAgICAgICAgICAgICBsYXN0
TmFtZTogbnVsbCwKLQotICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgIHZhciBmaXJzdE5hbWUgPSB0aGlzLmdldCgnZmlyc3ROYW1lJyk7Ci0g
ICAgICAgICAgICAgICAgICB2YXIgbGFzdE5hbWUgPSB0aGlzLmdldCgnbGFzdE5hbWUnKTsKLQot
ICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3ROYW1lICsgJyAnICsgbGFzdE5hbWU7Ci0gICAg
ICAgICAgICAgICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykKLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHRvbSA9IFBlcnNvbi5jcmVhdGUoewotICAg
ICAgICAgICAgICAgIGZpcnN0TmFtZTogJ1RvbScsCi0gICAgICAgICAgICAgICAgbGFzdE5hbWU6
ICdEYWxlJwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB0b20uZ2V0KCdmdWxs
TmFtZScpIC8vICdUb20gRGFsZScKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
WW91IGNhbiBhbHNvIGRlZmluZSB3aGF0IEVtYmVyIHNob3VsZCBkbyB3aGVuIHNldHRpbmcgYSBj
b21wdXRlZCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgSWYgeW91IHRyeSB0byBzZXQgYSBjb21w
dXRlZCBwcm9wZXJ0eSwgaXQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGtleSBhbmQKLSAgICAg
ICAgICAgICAgdmFsdWUgeW91IHdhbnQgdG8gc2V0IGl0IHRvLiBZb3UgY2FuIGFsc28gYWNjZXB0
IHRoZSBwcmV2aW91cyB2YWx1ZSBhcyB0aGUKLSAgICAgICAgICAgICAgdGhpcmQgcGFyYW1ldGVy
LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFBlcnNv
biA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIC8vIHRoZXNlIHdpbGwg
YmUgc3VwcGxpZWQgYnkgYGNyZWF0ZWAKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IG51bGws
Ci0gICAgICAgICAgICAgICAgbGFzdE5hbWU6IG51bGwsCi0KLSAgICAgICAgICAgICAgICBmdWxs
TmFtZTogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgb2xkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAg
IC8vIGdldHRlcgotICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHRoaXMuZ2V0KCdmaXJzdE5h
bWUnKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3ROYW1lID0gdGhpcy5nZXQoJ2xhc3RO
YW1lJyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSArICcgJyArIGxh
c3ROYW1lOwotCi0gICAgICAgICAgICAgICAgICAvLyBzZXR0ZXIKLSAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gdmFsdWUuc3BsaXQoJyAn
KTsKLQotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgnZmlyc3ROYW1lJywgbmFtZVswXSk7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdsYXN0TmFtZScsIG5hbWVbMV0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9LnByb3BlcnR5KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQotICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgcGVyc29uID0gUGVyc29uLmNyZWF0ZSgp
OwotCi0gICAgICAgICAgICAgIHBlcnNvbi5zZXQoJ2Z1bGxOYW1lJywgJ1BldGVyIFdhZ2VuZXQn
KTsKLSAgICAgICAgICAgICAgcGVyc29uLmdldCgnZmlyc3ROYW1lJyk7IC8vICdQZXRlcicKLSAg
ICAgICAgICAgICAgcGVyc29uLmdldCgnbGFzdE5hbWUnKTsgIC8vICdXYWdlbmV0JwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAY2xhc3MgQ29tcHV0ZWRQcm9wZXJ0eQotICAg
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVy
LkRlc2NyaXB0b3IKLSAgICAgICAgICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAqLwot
ICAgICAgICBmdW5jdGlvbiBDb21wdXRlZFByb3BlcnR5KGZ1bmMsIG9wdHMpIHsKLSAgICAgICAg
ICAgIGZ1bmMuX19lbWJlcl9hcml0eV9fID0gZnVuYy5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlz
LmZ1bmMgPSBmdW5jOwotCi0gICAgICAgICAgICB0aGlzLl9jYWNoZWFibGUgPSAob3B0cyAmJiBv
cHRzLmNhY2hlYWJsZSAhPT0gdW5kZWZpbmVkKSA/IG9wdHMuY2FjaGVhYmxlIDogdHJ1ZTsKLSAg
ICAgICAgICAgIHRoaXMuX2RlcGVuZGVudEtleXMgPSBvcHRzICYmIG9wdHMuZGVwZW5kZW50S2V5
czsKLSAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gb3B0cyAmJiAob3B0cy5yZWFkT25seSAh
PT0gdW5kZWZpbmVkIHx8ICEhb3B0cy5yZWFkT25seSkgfHwgZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZSA9IG5ldyBEZXNjcmlwdG9yKCk7Ci0K
LSAgICAgICAgdmFyIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUgPSBDb21wdXRlZFByb3BlcnR5
LnByb3RvdHlwZTsKLSAgICAgICAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5fZGVwZW5kZW50
S2V5cyA9IHVuZGVmaW5lZDsKLSAgICAgICAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5fc3Vz
cGVuZGVkID0gdW5kZWZpbmVkOwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLl9t
ZXRhID0gdW5kZWZpbmVkOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBQcm9wZXJ0aWVz
IGFyZSBjYWNoZWFibGUgYnkgZGVmYXVsdC4gQ29tcHV0ZWQgcHJvcGVydHkgd2lsbCBhdXRvbWF0
aWNhbGx5Ci0gICAgICAgICAgICAgIGNhY2hlIHRoZSByZXR1cm4gdmFsdWUgb2YgeW91ciBmdW5j
dGlvbiB1bnRpbCBvbmUgb2YgdGhlIGRlcGVuZGVudCBrZXlzIGNoYW5nZXMuCi0KLSAgICAgICAg
ICAgICAgQ2FsbCBgdm9sYXRpbGUoKWAgdG8gc2V0IGl0IGludG8gbm9uLWNhY2hlZCBtb2RlLiBX
aGVuIGluIHRoaXMgbW9kZQotICAgICAgICAgICAgICB0aGUgY29tcHV0ZWQgcHJvcGVydHkgd2ls
bCBub3QgYXV0b21hdGljYWxseSBjYWNoZSB0aGUgcmV0dXJuIHZhbHVlLgotCi0gICAgICAgICAg
ICAgIEhvd2V2ZXIsIGlmIGEgcHJvcGVydHkgaXMgcHJvcGVybHkgb2JzZXJ2YWJsZSwgdGhlcmUg
aXMgbm8gcmVhc29uIHRvIGRpc2FibGUKLSAgICAgICAgICAgICAgY2FjaGluZy4KLQotICAgICAg
ICAgICAgICBAbWV0aG9kIGNhY2hlYWJsZQotICAgICAgICAgICAgICBAcGFyYW0ge0Jvb2xlYW59
IGFGbGFnIG9wdGlvbmFsIHNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgY2FjaGluZwotICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSB0aGlzCi0gICAgICAgICAg
ICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAgICovCi0gICAgICAgIENvbXB1dGVkUHJvcGVydHlQ
cm90b3R5cGUuY2FjaGVhYmxlID0gZnVuY3Rpb24oYUZsYWcpIHsKLSAgICAgICAgICAgIHRoaXMu
X2NhY2hlYWJsZSA9IGFGbGFnICE9PSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBDYWxsIG9uIGEgY29tcHV0
ZWQgcHJvcGVydHkgdG8gc2V0IGl0IGludG8gbm9uLWNhY2hlZCBtb2RlLiBXaGVuIGluIHRoaXMK
LSAgICAgICAgICAgICAgbW9kZSB0aGUgY29tcHV0ZWQgcHJvcGVydHkgd2lsbCBub3QgYXV0b21h
dGljYWxseSBjYWNoZSB0aGUgcmV0dXJuIHZhbHVlLgotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgdmFyIG91dHNpZGVTZXJ2aWNlID0gRW1iZXIuT2JqZWN0LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE91dHNpZGVTZXJ2aWNlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
fS5wcm9wZXJ0eSgpLnZvbGF0aWxlKCkKLSAgICAgICAgICAgICAgfSkuY3JlYXRlKCk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2Qgdm9sYXRpbGUKLSAgICAgICAg
ICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gdGhpcwotICAgICAgICAgICAg
ICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAqLwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJv
dG90eXBlWyJ2b2xhdGlsZSJdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5jYWNoZWFibGUoZmFsc2UpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgICBDYWxsIG9uIGEgY29tcHV0ZWQgcHJvcGVydHkgdG8gc2V0IGl0IGludG8gcmVhZC1vbmx5
IG1vZGUuIFdoZW4gaW4gdGhpcwotICAgICAgICAgICAgICBtb2RlIHRoZSBjb21wdXRlZCBwcm9w
ZXJ0eSB3aWxsIHRocm93IGFuIGVycm9yIHdoZW4gc2V0LgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQo
ewotICAgICAgICAgICAgICAgIGd1aWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
cmV0dXJuICdndWlkLWd1aWQtZ3VpZCc7Ci0gICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpLnJl
YWRPbmx5KCkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHBlcnNvbiA9
IFBlcnNvbi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBwZXJzb24uc2V0KCdndWlkJywgJ25l
dy1ndWlkJyk7IC8vIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgcmVhZE9ubHkKLSAgICAgICAgICAgICAgQHJldHVybiB7
RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gdGhpcwotICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0g
ICAgICAgICAgICAqLwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnJlYWRPbmx5
ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKLSAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVh
ZE9ubHkgPT09IHVuZGVmaW5lZCB8fCAhIXJlYWRPbmx5OwotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNldHMgdGhlIGRl
cGVuZGVudCBrZXlzIG9uIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkuIFBhc3MgYW55IG51bWJlciBv
ZgotICAgICAgICAgICAgICBhcmd1bWVudHMgY29udGFpbmluZyBrZXkgcGF0aHMgdGhhdCB0aGlz
IGNvbXB1dGVkIHByb3BlcnR5IGRlcGVuZHMgb24uCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICB2YXIgUHJlc2lkZW50ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgZnVsbE5hbWU6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0
KCdsYXN0TmFtZScpOwotCi0gICAgICAgICAgICAgICAgICAvLyBUZWxsIEVtYmVyIHRoYXQgdGhp
cyBjb21wdXRlZCBwcm9wZXJ0eSBkZXBlbmRzIG9uIGZpcnN0TmFtZQotICAgICAgICAgICAgICAg
ICAgLy8gYW5kIGxhc3ROYW1lCi0gICAgICAgICAgICAgICAgfSkucHJvcGVydHkoJ2ZpcnN0TmFt
ZScsICdsYXN0TmFtZScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBw
cmVzaWRlbnQgPSBQcmVzaWRlbnQuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6
ICdCYXJhY2snLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiAnT2JhbWEnCi0gICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgIHByZXNpZGVudC5nZXQoJ2Z1bGxOYW1lJyk7IC8vICdC
YXJhY2sgT2JhbWEnCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2Qg
cHJvcGVydHkKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgqIHplcm8gb3IgbW9y
ZSBwcm9wZXJ0eSBwYXRocwotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSB0aGlzCi0gICAgICAgICAgICAgIEBjaGFpbmFibGUKLSAgICAgICAgICAgICovCi0g
ICAgICAgIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUucHJvcGVydHkgPSBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHZhciBhcmdzOwotCi0gICAgICAgICAgICB2YXIgYWRkQXJnID0gZnVuY3Rp
b24gKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgYXJncy5wdXNoKHByb3BlcnR5KTsKLSAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGFyZ3MgPSBbXTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAg
ICAgICAgIGV4cGFuZFByb3BlcnRpZXMoYXJndW1lbnRzW2ldLCBhZGRBcmcpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB0aGlzLl9kZXBlbmRlbnRLZXlzID0gYXJnczsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gYW5ub3RhdGUgY29tcHV0ZWQgcHJvcGVy
dGllcyB3aXRoIGFkZGl0aW9uYWwKLSAgICAgICAgICAgICAgbWV0YWRhdGEgYWJvdXQgaG93IHRo
ZXkgZnVuY3Rpb24gb3Igd2hhdCB2YWx1ZXMgdGhleSBvcGVyYXRlIG9uLiBGb3IgZXhhbXBsZSwK
LSAgICAgICAgICAgICAgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb25zIG1heSBjbG9zZSBvdmVy
IHZhcmlhYmxlcyB0aGF0IGFyZSB0aGVuIG5vIGxvbmdlcgotICAgICAgICAgICAgICBhdmFpbGFi
bGUgZm9yIGludHJvc3BlY3Rpb24uCi0KLSAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGEgaGFz
aCBvZiB0aGVzZSB2YWx1ZXMgdG8gYSBjb21wdXRlZCBwcm9wZXJ0eSBsaWtlIHRoaXM6Ci0KLSAg
ICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgIHBlcnNvbjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHBlcnNvbklkID0gdGhpcy5nZXQoJ3BlcnNvbklkJyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEFwcC5QZXJzb24uY3JlYXRlKHsgaWQ6IHBlcnNvbklkIH0pOwotICAg
ICAgICAgICAgICB9LnByb3BlcnR5KCkubWV0YSh7IHR5cGU6IEFwcC5QZXJzb24gfSkKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlIGhhc2ggdGhhdCB5b3UgcGFzcyB0byB0
aGUgYG1ldGEoKWAgZnVuY3Rpb24gd2lsbCBiZSBzYXZlZCBvbiB0aGUKLSAgICAgICAgICAgICAg
Y29tcHV0ZWQgcHJvcGVydHkgZGVzY3JpcHRvciB1bmRlciB0aGUgYF9tZXRhYCBrZXkuIEVtYmVy
IHJ1bnRpbWUKLSAgICAgICAgICAgICAgZXhwb3NlcyBhIHB1YmxpYyBBUEkgZm9yIHJldHJpZXZp
bmcgdGhlc2UgdmFsdWVzIGZyb20gY2xhc3NlcywKLSAgICAgICAgICAgICAgdmlhIHRoZSBgbWV0
YUZvclByb3BlcnR5KClgIGZ1bmN0aW9uLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgbWV0YQot
ICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IG1ldGEKLSAgICAgICAgICAgICAgQGNoYWluYWJs
ZQotICAgICAgICAgICAgKi8KLQotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLm1l
dGEgPSBmdW5jdGlvbihtZXRhKSB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9
PT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhIHx8IHt9OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9tZXRhID0gbWV0YTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAg
ICAgICAvKiBpbXBsIGRlc2NyaXB0b3IgQVBJICovCi0gICAgICAgIENvbXB1dGVkUHJvcGVydHlQ
cm90b3R5cGUuZGlkQ2hhbmdlID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAg
ICAvLyBfc3VzcGVuZGVkIGlzIHNldCB2aWEgYSBDUC5zZXQgdG8gZW5zdXJlIHdlIGRvbid0IGNs
ZWFyCi0gICAgICAgICAgICAvLyB0aGUgY2FjaGVkIHZhbHVlIHNldCBieSB0aGUgc2V0dGVyCi0g
ICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVhYmxlICYmIHRoaXMuX3N1c3BlbmRlZCAhPT0gb2Jq
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBtZXRhRm9yKG9iaik7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1ldGEuY2FjaGVba2V5TmFtZV0gIT09IHVuZGVmaW5lZCkgewotICAgICAgICAg
ICAgICAgICAgICBtZXRhLmNhY2hlW2tleU5hbWVdID0gdW5kZWZpbmVkOwotICAgICAgICAgICAg
ICAgICAgICByZW1vdmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbWV0YSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1
bmN0aW9uIGZpbmlzaENoYWlucyhjaGFpbk5vZGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IGNoYWluTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgY2hhaW5Ob2Rlc1tpXS5kaWRDaGFuZ2UobnVsbCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQWNjZXNzIHRoZSB2YWx1
ZSBvZiB0aGUgZnVuY3Rpb24gYmFja2luZyB0aGUgY29tcHV0ZWQgcHJvcGVydHkuCi0gICAgICAg
ICAgICAgIElmIHRoaXMgcHJvcGVydHkgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQsIHJldHVybiB0
aGUgY2FjaGVkIHJlc3VsdC4KLSAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBjYWxsIHRoZSBmdW5j
dGlvbiBwYXNzaW5nIHRoZSBwcm9wZXJ0eSBuYW1lIGFzIGFuIGFyZ3VtZW50LgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFBlcnNvbiA9IEVtYmVyLk9i
amVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBmdW5jdGlvbihrZXlOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAvLyB0aGUga2V5TmFtZSBwYXJhbWV0ZXIgaXMgJ2Z1bGxO
YW1lJyBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2Zp
cnN0TmFtZScpICsgJyAnICsgdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gICAgICAgICAgICAgICAg
fS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykKLSAgICAgICAgICAgICAgfSk7Ci0K
LQotICAgICAgICAgICAgICB2YXIgdG9tID0gUGVyc29uLmNyZWF0ZSh7Ci0gICAgICAgICAgICAg
ICAgZmlyc3ROYW1lOiAnVG9tJywKLSAgICAgICAgICAgICAgICBsYXN0TmFtZTogJ0RhbGUnCi0g
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHRvbS5nZXQoJ2Z1bGxOYW1lJykgLy8g
J1RvbSBEYWxlJwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGdl
dAotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUga2V5IGJlaW5nIGFj
Y2Vzc2VkLgotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXR1cm4gdmFsdWUg
b2YgdGhlIGZ1bmN0aW9uIGJhY2tpbmcgdGhlIENQLgotICAgICAgICAgICAgKi8KLSAgICAgICAg
Q29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvYmosIGtleU5hbWUpIHsK
LSAgICAgICAgICAgIHZhciByZXQsIGNhY2hlLCBtZXRhLCBjaGFpbk5vZGVzOwotICAgICAgICAg
ICAgaWYgKHRoaXMuX2NhY2hlYWJsZSkgewotICAgICAgICAgICAgICAgIG1ldGEgPSBtZXRhRm9y
KG9iaik7Ci0gICAgICAgICAgICAgICAgY2FjaGUgPSBtZXRhLmNhY2hlOwotCi0gICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IGNhY2hlW2tleU5hbWVdOwotCi0gICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PT0gVU5ERUZJTkVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuZnVuYy5jYWxsKG9iaiwga2V5TmFtZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhY2hlW2tleU5hbWVdID0gVU5ERUZJTkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlW2tleU5hbWVdID0gcmV0OwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGNoYWluTm9kZXMgPSBtZXRhLmNoYWluV2F0Y2hlcnMg
JiYgbWV0YS5jaGFpbldhdGNoZXJzW2tleU5hbWVdOwotICAgICAgICAgICAgICAgIGlmIChjaGFp
bk5vZGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmlzaENoYWlucyhjaGFpbk5vZGVzKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWRkRGVwZW5kZW50S2V5cyh0aGlz
LCBvYmosIGtleU5hbWUsIG1ldGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICByZXQgPSB0aGlzLmZ1bmMuY2FsbChvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiBhIGNvbXB1dGVkIHByb3BlcnR5LiBJZiB0aGUgZnVu
Y3Rpb24gdGhhdCBiYWNrcyB5b3VyCi0gICAgICAgICAgICAgIGNvbXB1dGVkIHByb3BlcnR5IGRv
ZXMgbm90IGFjY2VwdCBhcmd1bWVudHMgdGhlbiB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yCi0gICAg
ICAgICAgICAgIHNldHRpbmcgd291bGQgYmUgdG8gZGVmaW5lIHRoZSBwcm9wZXJ0eSBvbiB0aGUg
Y3VycmVudCBvYmplY3QsIGFuZCBzZXQKLSAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBw
cm9wZXJ0eSB0byB0aGUgdmFsdWUgYmVpbmcgc2V0LgotCi0gICAgICAgICAgICAgIEdlbmVyYWxs
eSBzcGVha2luZyBpZiB5b3UgaW50ZW5kIGZvciB5b3VyIGNvbXB1dGVkIHByb3BlcnR5IHRvIGJl
IHNldAotICAgICAgICAgICAgICB5b3VyIGJhY2tpbmcgZnVuY3Rpb24gc2hvdWxkIGFjY2VwdCBl
aXRoZXIgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHNl
dAotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUga2V5IGJlaW5nIGFj
Y2Vzc2VkLgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gbmV3VmFsdWUgVGhlIG5ldyB2
YWx1ZSBiZWluZyBhc3NpZ25lZC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG9sZFZh
bHVlIFRoZSBvbGQgdmFsdWUgYmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgIEByZXR1cm4g
e09iamVjdH0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gYmFja2luZyB0aGUgQ1Au
Ci0gICAgICAgICAgICAqLwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnNldCA9
IGZ1bmN0aW9uKG9iaiwga2V5TmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHZhciBjYWNoZWFi
bGUgPSB0aGlzLl9jYWNoZWFibGUsCi0gICAgICAgICAgICBmdW5jID0gdGhpcy5mdW5jLAotICAg
ICAgICAgICAgbWV0YSA9IG1ldGFGb3Iob2JqLCBjYWNoZWFibGUpLAotICAgICAgICAgICAgb2xk
U3VzcGVuZGVkID0gdGhpcy5fc3VzcGVuZGVkLAotICAgICAgICAgICAgaGFkQ2FjaGVkVmFsdWUg
PSBmYWxzZSwKLSAgICAgICAgICAgIGNhY2hlID0gbWV0YS5jYWNoZSwKLSAgICAgICAgICAgIGZ1
bmNBcmdMZW5ndGgsIGNhY2hlZFZhbHVlLCByZXQ7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9y
ZWFkT25seSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCdDYW5ub3Qg
c2V0IHJlYWQtb25seSBwcm9wZXJ0eSAiJyArIGtleU5hbWUgKyAnIiBvbiBvYmplY3Q6ICcgKyBp
bnNwZWN0KG9iaikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9zdXNwZW5k
ZWQgPSBvYmo7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVhYmxlICYmIGNhY2hlW2tleU5hbWVdICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlW2tleU5hbWVdICE9PSBVTkRFRklORUQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhY2hlZFZhbHVlID0gY2FjaGVba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBoYWRDYWNoZWRWYWx1ZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIENQIGhhcyBi
ZWVuIHdyYXBwZWQuIElmIGl0IGhhcywgdXNlIHRoZQotICAgICAgICAgICAgICAgIC8vIGxlbmd0
aCBmcm9tIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLgotCi0gICAgICAgICAgICAgICAgZnVuY0FyZ0xl
bmd0aCA9IGZ1bmMud3JhcHBlZEZ1bmN0aW9uID8gZnVuYy53cmFwcGVkRnVuY3Rpb24uX19lbWJl
cl9hcml0eV9fIDogZnVuYy5fX2VtYmVyX2FyaXR5X187Ci0KLSAgICAgICAgICAgICAgICAvLyBG
b3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBjb21wdXRlZCBwcm9wZXJ0aWVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBjaGVjayBmb3IgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiB0byBk
ZXRlcm1pbmUgaWYKLSAgICAgICAgICAgICAgICAvLyB0aGV5IGFyZSBiZWluZyBnZXQgb3Igc2V0
LCBvbmx5IHBhc3MgdGhlIG9sZCBjYWNoZWQKLSAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpZiB0
aGUgY29tcHV0ZWQgcHJvcGVydHkgb3B0cyBpbnRvIGEgdGhpcmQKLSAgICAgICAgICAgICAgICAv
LyBhcmd1bWVudC4KLSAgICAgICAgICAgICAgICBpZiAoZnVuY0FyZ0xlbmd0aCA9PT0gMykgewot
ICAgICAgICAgICAgICAgICAgICByZXQgPSBmdW5jLmNhbGwob2JqLCBrZXlOYW1lLCB2YWx1ZSwg
Y2FjaGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnVuY0FyZ0xlbmd0aCA9
PT0gMikgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBmdW5jLmNhbGwob2JqLCBrZXlOYW1l
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBudWxsLCBjYWNoZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNldChvYmosIGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYWRD
YWNoZWRWYWx1ZSAmJiBjYWNoZWRWYWx1ZSA9PT0gcmV0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgd2F0Y2hl
ZCA9IG1ldGEud2F0Y2hpbmdba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgaWYgKHdhdGNoZWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKG9iaiwga2V5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhhZENhY2hlZFZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlW2tleU5hbWVdID0gdW5kZWZpbmVkOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjYWNoZWFibGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFoYWRDYWNoZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG1ldGEpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5TmFtZV0gPSBVTkRFRklORUQ7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YWNoZVtrZXlOYW1lXSA9IHJldDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3YXRjaGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5RGlkQ2hhbmdlKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXNwZW5kZWQg
PSBvbGRTdXNwZW5kZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0Owot
ICAgICAgICB9OwotCi0gICAgICAgIC8qIGNhbGxlZCBiZWZvcmUgcHJvcGVydHkgaXMgb3ZlcnJp
ZGRlbiAqLwotICAgICAgICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnRlYXJkb3duID0gZnVu
Y3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbWV0YSA9IG1ldGFGb3Iob2Jq
KTsKLQotICAgICAgICAgICAgaWYgKGtleU5hbWUgaW4gbWV0YS5jYWNoZSkgewotICAgICAgICAg
ICAgICAgIHJlbW92ZURlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1lLCBtZXRhKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlYWJsZSkgewotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBtZXRhLmNhY2hlW2tleU5hbWVdOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbm8gdmFsdWUgdG8gcmVzdG9yZQotICAgICAgICB9
OwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgaGVscGVyIHJldHVybnMgYSBu
ZXcgcHJvcGVydHkgZGVzY3JpcHRvciB0aGF0IHdyYXBzIHRoZSBwYXNzZWQKLSAgICAgICAgICAg
ICAgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb24uIFlvdSBjYW4gdXNlIHRoaXMgaGVscGVyIHRv
IGRlZmluZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIHdpdGggbWl4aW5zIG9yIHZpYSBgRW1i
ZXIuZGVmaW5lUHJvcGVydHkoKWAuCi0KLSAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHlvdSBw
YXNzIHdpbGwgYmUgdXNlZCB0byBib3RoIGdldCBhbmQgc2V0IHByb3BlcnR5IHZhbHVlcy4KLSAg
ICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgdHdvIHBhcmFtZXRlcnMsIGtl
eSBhbmQgdmFsdWUuIElmIHZhbHVlIGlzIG5vdAotICAgICAgICAgICAgICB1bmRlZmluZWQgeW91
IHNob3VsZCBzZXQgdGhlIHZhbHVlIGZpcnN0LiBJbiBlaXRoZXIgY2FzZSByZXR1cm4gdGhlCi0g
ICAgICAgICAgICAgIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LgotCi0gICAgICAgICAg
ICAgIEBtZXRob2QgY29tcHV0ZWQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBjb21wdXRlZCBwcm9wZXJ0eSBmdW5jdGlv
bi4KLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gcHJvcGVy
dHkgZGVzY3JpcHRvciBpbnN0YW5jZQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
Y29tcHV0ZWQoZnVuYykgewotICAgICAgICAgICAgdmFyIGFyZ3M7Ci0KLSAgICAgICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAgIGFyZ3MgPSBhX3NsaWNl
LmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBmdW5jID0gYXJncy5wb3AoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rpb24i
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIkNvbXB1dGVkIFByb3Bl
cnR5IGRlY2xhcmVkIHdpdGhvdXQgYSBwcm9wZXJ0eSBmdW5jdGlvbiIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YXIgY3AgPSBuZXcgQ29tcHV0ZWRQcm9wZXJ0eShmdW5jKTsKLQot
ICAgICAgICAgICAgaWYgKGFyZ3MpIHsKLSAgICAgICAgICAgICAgICBjcC5wcm9wZXJ0eS5hcHBs
eShjcCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjcDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjYWNoZWQg
dmFsdWUgZm9yIGEgcHJvcGVydHksIGlmIG9uZSBleGlzdHMuCi0gICAgICAgICAgICAgIFRoaXMg
Y2FuIGJlIHVzZWZ1bCBmb3IgcGVla2luZyBhdCB0aGUgdmFsdWUgb2YgYSBjb21wdXRlZAotICAg
ICAgICAgICAgICBwcm9wZXJ0eSB0aGF0IGlzIGdlbmVyYXRlZCBsYXppbHksIHdpdGhvdXQgYWNj
aWRlbnRhbGx5IGNhdXNpbmcKLSAgICAgICAgICAgICAgaXQgdG8gYmUgY3JlYXRlZC4KLQotICAg
ICAgICAgICAgICBAbWV0aG9kIGNhY2hlRm9yCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiB0aGUgb2JqZWN0IHdob3NlIHByb3BlcnR5
IHlvdSB3YW50IHRvIGNoZWNrCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhl
IG5hbWUgb2YgdGhlIHByb3BlcnR5IHdob3NlIGNhY2hlZCB2YWx1ZSB5b3Ugd2FudAotICAgICAg
ICAgICAgICAgIHRvIHJldHVybgotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBj
YWNoZWQgdmFsdWUKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhY2hlRm9yKG9i
aiwga2V5KSB7Ci0gICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV0sCi0gICAgICAg
ICAgICBjYWNoZSA9IG1ldGEgJiYgbWV0YS5jYWNoZSwKLSAgICAgICAgICAgIHJldCA9IGNhY2hl
ICYmIGNhY2hlW2tleV07Ci0KLSAgICAgICAgICAgIGlmIChyZXQgPT09IFVOREVGSU5FRCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FjaGVGb3Iuc2V0ID0gZnVu
Y3Rpb24oY2FjaGUsIGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IFVOREVGSU5FRDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IHZhbHVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGNhY2hlRm9yLmdldCA9IGZ1bmN0aW9u
KGNhY2hlLCBrZXkpIHsKLSAgICAgICAgICAgIHZhciByZXQgPSBjYWNoZVtrZXldOwotICAgICAg
ICAgICAgaWYgKHJldCA9PT0gVU5ERUZJTkVEKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgY2FjaGVGb3IucmVtb3ZlID0gZnVuY3Rpb24oY2FjaGUsIGtleSkgewot
ICAgICAgICAgICAgY2FjaGVba2V5XSA9IHVuZGVmaW5lZDsKLSAgICAgICAgfTsKLQotICAgICAg
ICBfX2V4cG9ydHNfXy5Db21wdXRlZFByb3BlcnR5ID0gQ29tcHV0ZWRQcm9wZXJ0eTsKLSAgICAg
ICAgX19leHBvcnRzX18uY29tcHV0ZWQgPSBjb21wdXRlZDsKLSAgICAgICAgX19leHBvcnRzX18u
Y2FjaGVGb3IgPSBjYWNoZUZvcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2Nv
bXB1dGVkX21hY3JvcyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvY29t
cHV0ZWQiLCAiZW1iZXItbWV0YWwvaXNfZW1wdHkiLCAiZW1iZXItbWV0YWwvaXNfbm9uZSIsICJl
bWJlci1tZXRhbC9hbGlhcyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5
NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9
IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5j
eTRfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIGlzRW1wdHkgPSBfX2RlcGVuZGVuY3k1X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIGlzTm9uZSA9IF9fZGVwZW5kZW5jeTZfXy5pc05vbmU7Ci0g
ICAgICAgIHZhciBhbGlhcyA9IF9fZGVwZW5kZW5jeTdfXy5hbGlhczsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgdmFyIGFfc2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0
aWVzKHNlbGYsIHByb3BlcnR5TmFtZXMpIHsKLSAgICAgICAgICAgIHZhciByZXQgPSB7fTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIHJldFtwcm9wZXJ0eU5hbWVzW2ldXSA9IGdldChzZWxmLCBwcm9w
ZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZWdpc3RlckNvbXB1dGVkKG5hbWUsIG1hY3Jv
KSB7Ci0gICAgICAgICAgICBjb21wdXRlZFtuYW1lXSA9IGZ1bmN0aW9uKGRlcGVuZGVudEtleSkg
ewotICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWNyby5hcHBseSh0aGlzLCBhcmdzKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiByZWdpc3RlckNvbXB1dGVkV2l0aFByb3BlcnRpZXMobmFtZSwgbWFjcm8pIHsKLSAg
ICAgICAgICAgIGNvbXB1dGVkW25hbWVdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHByb3BlcnRpZXMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzKTsKLQotICAgICAgICAgICAg
ICAgIHZhciBjb21wdXRlZEZ1bmMgPSBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hY3JvLmFwcGx5KHRoaXMsIFtnZXRQcm9wZXJ0aWVzKHRoaXMsIHBy
b3BlcnRpZXMpXSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gY29tcHV0ZWRGdW5jLnByb3BlcnR5LmFwcGx5KGNvbXB1dGVkRnVuYywgcHJvcGVydGllcyk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRo
ZSBkZXBlbmRlbnQKLSAgICAgICAgICAgICAgcHJvcGVydHkgaXMgbnVsbCwgYW4gZW1wdHkgc3Ry
aW5nLCBlbXB0eSBhcnJheSwgb3IgZW1wdHkgZnVuY3Rpb24uCi0KLSAgICAgICAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFRv
RG9MaXN0ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgZG9uZTogRW1i
ZXIuY29tcHV0ZWQuZW1wdHkoJ3RvZG9zJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgdmFyIHRvZG9MaXN0ID0gVG9Eb0xpc3QuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICB0
b2RvczogWydVbml0IFRlc3QnLCAnRG9jdW1lbnRhdGlvbicsICdSZWxlYXNlJ10KLSAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdG9kb0xpc3QuZ2V0KCdkb25lJyk7IC8vIGZhbHNl
Ci0gICAgICAgICAgICAgIHRvZG9MaXN0LmdldCgndG9kb3MnKS5jbGVhcigpOwotICAgICAgICAg
ICAgICB0b2RvTGlzdC5nZXQoJ2RvbmUnKTsgLy8gdHJ1ZQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAc2luY2UgMS42LjAKLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRl
ZC5lbXB0eQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7
U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0
ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggbmVnYXRlCi0gICAgICAgICAgICAg
IHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkKLSAgICAgICAgICAgICovCi0gICAgICAg
IGNvbXB1dGVkLmVtcHR5ID0gZnVuY3Rpb24gKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAg
cmV0dXJuIGNvbXB1dGVkKGRlcGVuZGVudEtleSArICcubGVuZ3RoJywgZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBpc0VtcHR5KGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0
aGUgZGVwZW5kZW50Ci0gICAgICAgICAgICAgIHByb3BlcnR5IGlzIE5PVCBudWxsLCBhbiBlbXB0
eSBzdHJpbmcsIGVtcHR5IGFycmF5LCBvciBlbXB0eSBmdW5jdGlvbi4KLQotICAgICAgICAgICAg
ICBOb3RlOiBXaGVuIHVzaW5nIGBjb21wdXRlZC5ub3RFbXB0eWAgdG8gd2F0Y2ggYW4gYXJyYXkg
bWFrZSBzdXJlIHRvCi0gICAgICAgICAgICAgIHVzZSB0aGUgYGFycmF5LltdYCBzeW50YXggc28g
dGhlIGNvbXB1dGVkIGNhbiBzdWJzY3JpYmUgdG8gdHJhbnNpdGlvbnMKLSAgICAgICAgICAgICAg
ZnJvbSBlbXB0eSB0byBub24tZW1wdHkgc3RhdGVzLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVy
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgaGFzU3R1ZmY6IEVtYmVy
LmNvbXB1dGVkLm5vdEVtcHR5KCdiYWNrcGFjay5bXScpCi0gICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeyBiYWNrcGFjazogWydG
b29kJywgJ1NsZWVwaW5nIEJhZycsICdUZW50J10gfSk7Ci0KLSAgICAgICAgICAgICAgaGFtc3Rl
ci5nZXQoJ2hhc1N0dWZmJyk7ICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBoYW1zdGVy
LmdldCgnYmFja3BhY2snKS5jbGVhcigpOyAvLyBbXQotICAgICAgICAgICAgICBoYW1zdGVyLmdl
dCgnaGFzU3R1ZmYnKTsgICAgICAgICAvLyBmYWxzZQotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLm5vdEVtcHR5Ci0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0
eSB3aGljaCByZXR1cm5zIHRydWUgaWYKLSAgICAgICAgICAgICAgb3JpZ2luYWwgdmFsdWUgZm9y
IHByb3BlcnR5IGlzIG5vdCBlbXB0eS4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJlZ2lzdGVy
Q29tcHV0ZWQoJ25vdEVtcHR5JywgZnVuY3Rpb24oZGVwZW5kZW50S2V5KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gIWlzRW1wdHkoZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkpOwotICAgICAgICB9KTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJl
dHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGRlcGVuZGVudAotICAgICAgICAgICAgICBw
cm9wZXJ0eSBpcyBudWxsIG9yIHVuZGVmaW5lZC4gVGhpcyBhdm9pZHMgZXJyb3JzIGZyb20gSlNM
aW50IGNvbXBsYWluaW5nCi0gICAgICAgICAgICAgIGFib3V0IHVzZSBvZiA9PSwgd2hpY2ggY2Fu
IGJlIHRlY2huaWNhbGx5IGNvbmZ1c2luZy4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVt
YmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGlzSHVuZ3J5OiBFbWJlci5jb21w
dXRlZC5ub25lKCdmb29kJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFy
IGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0
KCdpc0h1bmdyeScpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdmb29kJywg
J0JhbmFuYScpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaXNIdW5ncnknKTsgLy8gZmFs
c2UKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ2Zvb2QnLCBudWxsKTsKLSAgICAgICAgICAg
ICAgaGFtc3Rlci5nZXQoJ2lzSHVuZ3J5Jyk7IC8vIHRydWUKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5ub25lCi0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0
eSB3aGljaAotICAgICAgICAgICAgICByZXR1cm5zIHRydWUgaWYgb3JpZ2luYWwgdmFsdWUgZm9y
IHByb3BlcnR5IGlzIG51bGwgb3IgdW5kZWZpbmVkLgotICAgICAgICAgICAgKi8KLSAgICAgICAg
cmVnaXN0ZXJDb21wdXRlZCgnbm9uZScsIGZ1bmN0aW9uKGRlcGVuZGVudEtleSkgewotICAgICAg
ICAgICAgcmV0dXJuIGlzTm9uZShnZXQodGhpcywgZGVwZW5kZW50S2V5KSk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQg
cmV0dXJucyB0aGUgaW52ZXJzZSBib29sZWFuIHZhbHVlCi0gICAgICAgICAgICAgIG9mIHRoZSBv
cmlnaW5hbCB2YWx1ZSBmb3IgdGhlIGRlcGVuZGVudCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAg
ICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2
YXIgVXNlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGlzQW5vbnlt
b3VzOiBFbWJlci5jb21wdXRlZC5ub3QoJ2xvZ2dlZEluJykKLSAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgdmFyIHVzZXIgPSBVc2VyLmNyZWF0ZSh7bG9nZ2VkSW46IGZhbHNlfSk7
Ci0KLSAgICAgICAgICAgICAgdXNlci5nZXQoJ2lzQW5vbnltb3VzJyk7IC8vIHRydWUKLSAgICAg
ICAgICAgICAgdXNlci5zZXQoJ2xvZ2dlZEluJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgIHVzZXIu
Z2V0KCdpc0Fub255bW91cycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLm5vdAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAg
QHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2gg
cmV0dXJucwotICAgICAgICAgICAgICBpbnZlcnNlIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3Ig
cHJvcGVydHkKLSAgICAgICAgICAgICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQoJ25vdCcs
IGZ1bmN0aW9uKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgcmV0dXJuICFnZXQodGhpcywg
ZGVwZW5kZW50S2V5KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjb252ZXJ0cyB0aGUgcHJvdmlkZWQgZGVwZW5kZW50
IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGludG8gYSBib29sZWFuIHZhbHVlLgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBoYXNCYW5hbmFzOiBFbWJlci5jb21wdXRl
ZC5ib29sKCdudW1CYW5hbmFzJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
dmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIu
Z2V0KCdoYXNCYW5hbmFzJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdu
dW1CYW5hbmFzJywgMCk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNCYW5hbmFzJyk7
IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMSk7Ci0g
ICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNCYW5hbmFzJyk7IC8vIHRydWUKLSAgICAgICAg
ICAgICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCBudWxsKTsKLSAgICAgICAgICAgICAgaGFt
c3Rlci5nZXQoJ2hhc0JhbmFuYXMnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5ib29sCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3
aGljaCBjb252ZXJ0cwotICAgICAgICAgICAgICB0byBib29sZWFuIHRoZSBvcmlnaW5hbCB2YWx1
ZSBmb3IgcHJvcGVydHkKLSAgICAgICAgICAgICovCi0gICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQo
J2Jvb2wnLCBmdW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiAhIWdl
dCh0aGlzLCBkZXBlbmRlbnRLZXkpOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBtYXRjaGVzIHRoZSBvcmlnaW5hbCB2
YWx1ZSBmb3IgdGhlCi0gICAgICAgICAgICAgIGRlcGVuZGVudCBwcm9wZXJ0eSBhZ2FpbnN0IGEg
Z2l2ZW4gUmVnRXhwLCByZXR1cm5pbmcgYHRydWVgCi0gICAgICAgICAgICAgIGlmIHRoZXkgdmFs
dWVzIG1hdGNoZXMgdGhlIFJlZ0V4cCBhbmQgYGZhbHNlYCBpZiBpdCBkb2VzIG5vdC4KLQotICAg
ICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgVXNlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAg
IGhhc1ZhbGlkRW1haWw6IEVtYmVyLmNvbXB1dGVkLm1hdGNoKCdlbWFpbCcsIC9eLitALitcLi4r
JC8pCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciB1c2VyID0gVXNlci5j
cmVhdGUoe2xvZ2dlZEluOiBmYWxzZX0pOwotCi0gICAgICAgICAgICAgIHVzZXIuZ2V0KCdoYXNW
YWxpZEVtYWlsJyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIHVzZXIuc2V0KCdlbWFpbCcsICcn
KTsKLSAgICAgICAgICAgICAgdXNlci5nZXQoJ2hhc1ZhbGlkRW1haWwnKTsgLy8gZmFsc2UKLSAg
ICAgICAgICAgICAgdXNlci5zZXQoJ2VtYWlsJywgJ2VtYmVyX2hhbXN0ZXJAZXhhbXBsZS5jb20n
KTsKLSAgICAgICAgICAgICAgdXNlci5nZXQoJ2hhc1ZhbGlkRW1haWwnKTsgLy8gdHJ1ZQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLm1hdGNoCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRl
cGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIG1hdGNoCi0gICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVy
dHkgYWdhaW5zdCBhIGdpdmVuIFJlZ0V4cAotICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0
ZXJDb21wdXRlZCgnbWF0Y2gnLCBmdW5jdGlvbihkZXBlbmRlbnRLZXksIHJlZ2V4cCkgewotICAg
ICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHJlZ2V4cC50ZXN0KHZhbHVlKSA6
IGZhbHNlOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBjb21w
dXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVwZW5kZW50
IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGlzIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAg
ICAgICAgIG5hcFRpbWU6IEVtYmVyLmNvbXB1dGVkLmVxdWFsKCdzdGF0ZScsICdzbGVlcHknKQot
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIu
Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ25hcFRpbWUnKTsgLy8gZmFs
c2UKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ3N0YXRlJywgJ3NsZWVweScpOwotICAgICAg
ICAgICAgICBoYW1zdGVyLmdldCgnbmFwVGltZScpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGhh
bXN0ZXIuc2V0KCdzdGF0ZScsICdodW5ncnknKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQo
J25hcFRpbWUnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBjb21wdXRlZC5lcXVhbAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd8TnVtYmVyfE9iamVjdH0gdmFsdWUKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1i
ZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVl
IGlmCi0gICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkgaXMgZXF1
YWwgdG8gdGhlIGdpdmVuIHZhbHVlLgotICAgICAgICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJD
b21wdXRlZCgnZXF1YWwnLCBmdW5jdGlvbihkZXBlbmRlbnRLZXksIHZhbHVlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkgPT09IHZhbHVlOwotICAgICAgICB9
KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0
IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmllZCBkZXBlbmRlbnQgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcm92aWRlZCB2YWx1ZS4KLQotICAgICAgICAgICAg
ICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2
YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGhhc1Rv
b01hbnlCYW5hbmFzOiBFbWJlci5jb21wdXRlZC5ndCgnbnVtQmFuYW5hcycsIDEwKQotICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRl
KCk7Ci0KLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ2hhc1Rvb01hbnlCYW5hbmFzJyk7IC8v
IGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMyk7Ci0gICAg
ICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycpOyAvLyBmYWxzZQotICAg
ICAgICAgICAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDExKTsKLSAgICAgICAgICAgICAg
aGFtc3Rlci5nZXQoJ2hhc1Rvb01hbnlCYW5hbmFzJyk7IC8vIHRydWUKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5ndAotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHZhbHVlCi0gICAgICAgICAgICAgIEByZXR1cm4g
e0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMg
dHJ1ZSBpZgotICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGlz
IGdyZWF0ZXIgdGhlbiBnaXZlbiB2YWx1ZS4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJlZ2lz
dGVyQ29tcHV0ZWQoJ2d0JywgZnVuY3Rpb24oZGVwZW5kZW50S2V5LCB2YWx1ZSkgewotICAgICAg
ICAgICAgcmV0dXJuIGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpID4gdmFsdWU7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQg
cmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcm92aWRlZCB2YWx1ZS4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAg
ICAgICAgIGhhc1Rvb01hbnlCYW5hbmFzOiBFbWJlci5jb21wdXRlZC5ndGUoJ251bUJhbmFuYXMn
LCAxMCkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGhhbXN0ZXIgPSBI
YW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55
QmFuYW5hcycpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5h
cycsIDMpOwotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnaGFzVG9vTWFueUJhbmFuYXMnKTsg
Ly8gZmFsc2UKLSAgICAgICAgICAgICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCAxMCk7Ci0g
ICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycpOyAvLyB0cnVlCi0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZ3RlCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRl
cGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gdmFsdWUKLSAgICAgICAg
ICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkg
d2hpY2ggcmV0dXJucyB0cnVlIGlmCi0gICAgICAgICAgICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBm
b3IgcHJvcGVydHkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGVuIGdpdmVuIHZhbHVlLgotICAgICAg
ICAgICAgKi8KLSAgICAgICAgcmVnaXN0ZXJDb21wdXRlZCgnZ3RlJywgZnVuY3Rpb24oZGVwZW5k
ZW50S2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBkZXBlbmRlbnRL
ZXkpID49IHZhbHVlOwotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
QSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGVw
ZW5kZW50IHByb3BlcnR5Ci0gICAgICAgICAgICAgIGlzIGxlc3MgdGhhbiB0aGUgcHJvdmlkZWQg
dmFsdWUuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICBuZWVkc01vcmVCYW5hbmFzOiBFbWJlci5jb21wdXRlZC5sdCgnbnVt
QmFuYW5hcycsIDMpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1z
dGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnbmVl
ZHNNb3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1C
YW5hbmFzJywgMyk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFz
Jyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMik7
Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFzJyk7IC8vIHRydWUK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5sdAot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHZhbHVlCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIHJldHVybnMgdHJ1ZSBpZgotICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmFsdWUg
Zm9yIHByb3BlcnR5IGlzIGxlc3MgdGhlbiBnaXZlbiB2YWx1ZS4KLSAgICAgICAgICAgICovCi0g
ICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQoJ2x0JywgZnVuY3Rpb24oZGVwZW5kZW50S2V5LCB2YWx1
ZSkgewotICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpIDwgdmFsdWU7
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHBy
b3BlcnR5IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVy
dHkKLSAgICAgICAgICAgICAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcm92aWRlZCB2
YWx1ZS4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewot
ICAgICAgICAgICAgICAgIG5lZWRzTW9yZUJhbmFuYXM6IEVtYmVyLmNvbXB1dGVkLmx0ZSgnbnVt
QmFuYW5hcycsIDMpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1z
dGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnbmVl
ZHNNb3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1C
YW5hbmFzJywgNSk7Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFz
Jyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMyk7
Ci0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFzJyk7IC8vIHRydWUK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5sdGUK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
ZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZQotICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0
eSB3aGljaCByZXR1cm5zIHRydWUgaWYKLSAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIHZhbHVl
IGZvciBwcm9wZXJ0eSBpcyBsZXNzIG9yIGVxdWFsIHRoZW4gZ2l2ZW4gdmFsdWUuCi0gICAgICAg
ICAgICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVkKCdsdGUnLCBmdW5jdGlvbihkZXBlbmRl
bnRLZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGRlcGVuZGVudEtl
eSkgPD0gdmFsdWU7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBB
IGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcGVyZm9ybXMgYSBsb2dpY2FsIGBhbmRgIG9uIHRoZQot
ICAgICAgICAgICAgICBvcmlnaW5hbCB2YWx1ZXMgZm9yIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQg
cHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRl
bmQoewotICAgICAgICAgICAgICAgIHJlYWR5Rm9yQ2FtcDogRW1iZXIuY29tcHV0ZWQuYW5kKCdo
YXNUZW50JywgJ2hhc0JhY2twYWNrJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGhhbXN0
ZXIuZ2V0KCdyZWFkeUZvckNhbXAnKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgaGFtc3Rlci5z
ZXQoJ2hhc1RlbnQnLCB0cnVlKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ3JlYWR5Rm9y
Q2FtcCcpOyAvLyBmYWxzZQotICAgICAgICAgICAgICBoYW1zdGVyLnNldCgnaGFzQmFja3BhY2sn
LCB0cnVlKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ3JlYWR5Rm9yQ2FtcCcpOyAvLyB0
cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQu
YW5kCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IGRlcGVuZGVudEtleSoKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQ
cm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcGVyZm9ybXMKLSAgICAgICAgICAgICAg
YSBsb2dpY2FsIGBhbmRgIG9uIHRoZSB2YWx1ZXMgb2YgYWxsIHRoZSBvcmlnaW5hbCB2YWx1ZXMg
Zm9yIHByb3BlcnRpZXMuCi0gICAgICAgICAgICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVk
V2l0aFByb3BlcnRpZXMoJ2FuZCcsIGZ1bmN0aW9uKHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAg
IGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhcHJvcGVydGllc1trZXldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcGVyZm9ybXMgYSBsb2dp
Y2FsIGBvcmAgb24gdGhlCi0gICAgICAgICAgICAgIG9yaWdpbmFsIHZhbHVlcyBmb3IgdGhlIHBy
b3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgcmVhZHlGb3JSYWluOiBFbWJl
ci5jb21wdXRlZC5vcignaGFzSmFja2V0JywgJ2hhc1VtYnJlbGxhJykKLSAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgpOwotCi0g
ICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCdyZWFkeUZvclJhaW4nKTsgLy8gZmFsc2UKLSAgICAg
ICAgICAgICAgaGFtc3Rlci5zZXQoJ2hhc0phY2tldCcsIHRydWUpOwotICAgICAgICAgICAgICBo
YW1zdGVyLmdldCgncmVhZHlGb3JSYWluJyk7IC8vIHRydWUKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5vcgotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkqCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIHBlcmZvcm1zCi0gICAgICAgICAgICAgIGEgbG9naWNhbCBgb3JgIG9uIHRoZSB2YWx1
ZXMgb2YgYWxsIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMuCi0gICAgICAgICAg
ICAqLwotICAgICAgICByZWdpc3RlckNvbXB1dGVkV2l0aFByb3BlcnRpZXMoJ29yJywgZnVuY3Rp
b24ocHJvcGVydGllcykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMp
IHsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYm
IHByb3BlcnRpZXNba2V5XSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1dGVkIHBy
b3BlcnR5IHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgdHJ1dGh5IHZhbHVlCi0gICAgICAgICAgICAg
IGZyb20gYSBsaXN0IG9mIGRlcGVuZGVudCBwcm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgIEV4
YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBI
YW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgaGFzQ2xvdGhl
czogRW1iZXIuY29tcHV0ZWQuYW55KCdoYXQnLCAnc2hpcnQnKQotICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgaGFtc3Rlci5nZXQoJ2hhc0Nsb3RoZXMnKTsgLy8gbnVsbAotICAgICAgICAgICAg
ICBoYW1zdGVyLnNldCgnc2hpcnQnLCAnSGF3YWlpYW4gU2hpcnQnKTsKLSAgICAgICAgICAgICAg
aGFtc3Rlci5nZXQoJ2hhc0Nsb3RoZXMnKTsgLy8gJ0hhd2FpaWFuIFNoaXJ0JwotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLmFueQotICAgICAgICAg
ICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRL
ZXkqCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1
dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMKLSAgICAgICAgICAgICAgdGhlIGZpcnN0IHRydXRo
eSB2YWx1ZSBvZiBnaXZlbiBsaXN0IG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICAqLwotICAg
ICAgICByZWdpc3RlckNvbXB1dGVkV2l0aFByb3BlcnRpZXMoJ2FueScsIGZ1bmN0aW9uKHByb3Bl
cnRpZXMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcm9wZXJ0
aWVzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNba2V5XTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQg
cHJvcGVydHkgdGhhdCByZXR1cm5zIHRoZSBhcnJheSBvZiB2YWx1ZXMKLSAgICAgICAgICAgICAg
Zm9yIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIg
SGFtc3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIGNsb3RoZXM6
IEVtYmVyLmNvbXB1dGVkLmNvbGxlY3QoJ2hhdCcsICdzaGlydCcpCi0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoKTsKLQotICAg
ICAgICAgICAgICBoYW1zdGVyLmdldCgnY2xvdGhlcycpOyAvLyBbbnVsbCwgbnVsbF0KLSAgICAg
ICAgICAgICAgaGFtc3Rlci5zZXQoJ2hhdCcsICdDYW1wIEhhdCcpOwotICAgICAgICAgICAgICBo
YW1zdGVyLnNldCgnc2hpcnQnLCAnQ2FtcCBTaGlydCcpOwotICAgICAgICAgICAgICBoYW1zdGVy
LmdldCgnY2xvdGhlcycpOyAvLyBbJ0NhbXAgSGF0JywgJ0NhbXAgU2hpcnQnXQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLmNvbGxlY3QKLSAgICAg
ICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5k
ZW50S2V5KgotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBj
b21wdXRlZCBwcm9wZXJ0eSB3aGljaCBtYXBzCi0gICAgICAgICAgICAgIHZhbHVlcyBvZiBhbGwg
cGFzc2VkIHByb3BlcnRpZXMgaW4gdG8gYW4gYXJyYXkuCi0gICAgICAgICAgICAqLwotICAgICAg
ICByZWdpc3RlckNvbXB1dGVkV2l0aFByb3BlcnRpZXMoJ2NvbGxlY3QnLCBmdW5jdGlvbihwcm9w
ZXJ0aWVzKSB7Ci0gICAgICAgICAgICB2YXIgcmVzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gcHJvcGVydGllcykgewotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhh
c093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uZShwcm9w
ZXJ0aWVzW2tleV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChudWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
cy5wdXNoKHByb3BlcnRpZXNba2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAg
ICB9KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBwcm9wZXJ0
eSB0aGF0IGlzIGFuIGFsaWFzIGZvciBhbm90aGVyIHByb3BlcnR5Ci0gICAgICAgICAgICAgIG9u
IGFuIG9iamVjdC4gQ2FsbHMgdG8gYGdldGAgb3IgYHNldGAgdGhpcyBwcm9wZXJ0eSBiZWhhdmUg
YXMKLSAgICAgICAgICAgICAgdGhvdWdoIHRoZXkgd2VyZSBjYWxsZWQgb24gdGhlIG9yaWdpbmFs
IHByb3BlcnR5LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
dmFyIFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIG5hbWU6
ICdBbGV4IE1hdGNobmVlcicsCi0gICAgICAgICAgICAgICAgbm9tZW46IEVtYmVyLmNvbXB1dGVk
LmFsaWFzKCduYW1lJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGFs
ZXggPSBQZXJzb24uY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgYWxleC5nZXQoJ25vbWVuJyk7
IC8vICdBbGV4IE1hdGNobmVlcicKLSAgICAgICAgICAgICAgYWxleC5nZXQoJ25hbWUnKTsgIC8v
ICdBbGV4IE1hdGNobmVlcicKLQotICAgICAgICAgICAgICBhbGV4LnNldCgnbm9tZW4nLCAnQG1h
Y2h0eScpOwotICAgICAgICAgICAgICBhbGV4LmdldCgnbmFtZScpOyAgLy8gJ0BtYWNodHknCi0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuYWxpYXMK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
ZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVy
dHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNyZWF0ZXMgYW4KLSAgICAgICAgICAgICAgYWxp
YXMgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eS4KLSAgICAgICAgICAgICovCi0g
ICAgICAgIGNvbXB1dGVkLmFsaWFzID0gYWxpYXM7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFdoZXJlIGBjb21wdXRlZC5hbGlhc2AgYWxpYXNlcyBgZ2V0YCBhbmQgYHNldGAsIGFuZCBh
bGxvd3MgZm9yIGJpZGlyZWN0aW9uYWwKLSAgICAgICAgICAgICAgZGF0YSBmbG93LCBgY29tcHV0
ZWQub25lV2F5YCBvbmx5IHByb3ZpZGVzIGFuIGFsaWFzZWQgYGdldGAuIFRoZSBgc2V0YCB3aWxs
Ci0gICAgICAgICAgICAgIG5vdCBtdXRhdGUgdGhlIHVwc3RyZWFtIHByb3BlcnR5LCByYXRoZXIg
Y2F1c2VzIHRoZSBjdXJyZW50IHByb3BlcnR5IHRvCi0gICAgICAgICAgICAgIGJlY29tZSB0aGUg
dmFsdWUgc2V0LiBUaGlzIGNhdXNlcyB0aGUgZG93bnN0cmVhbSBwcm9wZXJ0eSB0byBwZXJtYW5l
bnRseQotICAgICAgICAgICAgICBkaXZlcmdlIGZyb20gdGhlIHVwc3RyZWFtIHByb3BlcnR5Lgot
Ci0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIHZhciBVc2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAg
ICAgICAgZmlyc3ROYW1lOiBudWxsLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBudWxsLAot
ICAgICAgICAgICAgICAgIG5pY2tOYW1lOiBFbWJlci5jb21wdXRlZC5vbmVXYXkoJ2ZpcnN0TmFt
ZScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciB0ZWRkeSA9IFVzZXIu
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICdUZWRkeScsCi0gICAgICAgICAg
ICAgICAgbGFzdE5hbWU6ICAnWmVlbm55JwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICB0ZWRkeS5nZXQoJ25pY2tOYW1lJyk7ICAgICAgICAgICAgICAvLyAnVGVkZHknCi0gICAg
ICAgICAgICAgIHRlZGR5LnNldCgnbmlja05hbWUnLCAnVGVkZHlCZWFyJyk7IC8vICdUZWRkeUJl
YXInCi0gICAgICAgICAgICAgIHRlZGR5LmdldCgnZmlyc3ROYW1lJyk7ICAgICAgICAgICAgIC8v
ICdUZWRkeScKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21w
dXRlZC5vbmVXYXkKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNv
bXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIGNyZWF0ZXMgYQotICAgICAg
ICAgICAgICBvbmUgd2F5IGNvbXB1dGVkIHByb3BlcnR5IHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBm
b3IgcHJvcGVydHkuCi0gICAgICAgICAgICAqLwotICAgICAgICBjb21wdXRlZC5vbmVXYXkgPSBm
dW5jdGlvbihkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBhbGlhcyhkZXBlbmRl
bnRLZXkpLm9uZVdheSgpOwotICAgICAgICB9OwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgVGhpcyBpcyBhIG1vcmUgc2VtYW50aWNhbGx5IG1lYW5pbmdmdWwgYWxpYXMgb2YgYGNv
bXB1dGVkLm9uZVdheWAsCi0gICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBpcyBzb21ld2hhdCBh
bWJpZ3VvdXMgYXMgdG8gd2hpY2ggZGlyZWN0aW9uIHRoZSBkYXRhIGZsb3dzLgotCi0gICAgICAg
ICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5yZWFkcwotICAgICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAg
ICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVy
dHkgd2hpY2ggY3JlYXRlcyBhCi0gICAgICAgICAgICAgICAgICBvbmUgd2F5IGNvbXB1dGVkIHBy
b3BlcnR5IHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkuCi0gICAgICAgICAgICAg
ICAqLwotICAgICAgICBjb21wdXRlZC5yZWFkcyA9IGNvbXB1dGVkLm9uZVdheTsKLQotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBXaGVyZSBgY29tcHV0ZWQub25lV2F5YCBwcm92aWRlcyBv
bmVXYXkgYmluZGluZ3MsIGBjb21wdXRlZC5yZWFkT25seWAgcHJvdmlkZXMKLSAgICAgICAgICAg
ICAgYSByZWFkT25seSBvbmUgd2F5IGJpbmRpbmcuIFZlcnkgb2Z0ZW4gd2hlbiB1c2luZyBgY29t
cHV0ZWQub25lV2F5YCBvbmUgZG9lcwotICAgICAgICAgICAgICBub3QgYWxzbyB3YW50IGNoYW5n
ZXMgdG8gcHJvcG9nYXRlIGJhY2sgdXAsIGFzIHRoZXkgd2lsbCByZXBsYWNlIHRoZSB2YWx1ZS4K
LQotICAgICAgICAgICAgICBUaGlzIHByZXZlbnRzIHRoZSByZXZlcnNlIGZsb3csIGFuZCBhbHNv
IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBpdCBvY2N1cnMuCi0KLSAgICAgICAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIFVz
ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IG51
bGwsCi0gICAgICAgICAgICAgICAgbGFzdE5hbWU6IG51bGwsCi0gICAgICAgICAgICAgICAgbmlj
a05hbWU6IEVtYmVyLmNvbXB1dGVkLnJlYWRPbmx5KCdmaXJzdE5hbWUnKQotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICB2YXIgdGVkZHkgPSBVc2VyLmNyZWF0ZSh7Ci0gICAgICAg
ICAgICAgICAgZmlyc3ROYW1lOiAnVGVkZHknLAotICAgICAgICAgICAgICAgIGxhc3ROYW1lOiAg
J1plZW5ueScKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdGVkZHkuZ2V0KCdu
aWNrTmFtZScpOyAgICAgICAgICAgICAgLy8gJ1RlZGR5JwotICAgICAgICAgICAgICB0ZWRkeS5z
ZXQoJ25pY2tOYW1lJywgJ1RlZGR5QmVhcicpOyAvLyB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICAg
ICAgICAgIC8vIHRocm93IG5ldyBFbWJlci5FcnJvcignQ2Fubm90IFNldDogbmlja05hbWUgb246
IDxVc2VyOmVtYmVyMjcyODg+JyApO2AKLSAgICAgICAgICAgICAgdGVkZHkuZ2V0KCdmaXJzdE5h
bWUnKTsgICAgICAgICAgICAgLy8gJ1RlZGR5JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLnJlYWRPbmx5Ci0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3
aGljaCBjcmVhdGVzIGEKLSAgICAgICAgICAgICAgb25lIHdheSBjb21wdXRlZCBwcm9wZXJ0eSB0
byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5LgotICAgICAgICAgICAgICBAc2luY2Ug
MS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGNvbXB1dGVkLnJlYWRPbmx5ID0gZnVuY3Rp
b24oZGVwZW5kZW50S2V5KSB7Ci0gICAgICAgICAgICByZXR1cm4gYWxpYXMoZGVwZW5kZW50S2V5
KS5yZWFkT25seSgpOwotICAgICAgICB9OwotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQSBj
b21wdXRlZCBwcm9wZXJ0eSB0aGF0IGFjdHMgbGlrZSBhIHN0YW5kYXJkIGdldHRlciBhbmQgc2V0
dGVyLAotICAgICAgICAgICAgICBidXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHByb3ZpZGVk
IGBkZWZhdWx0UGF0aGAgaWYgdGhlCi0gICAgICAgICAgICAgIHByb3BlcnR5IGl0c2VsZiBoYXMg
bm90IGJlZW4gc2V0IHRvIGEgdmFsdWUKLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVy
Lk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgIHdpc2hMaXN0OiBFbWJlci5jb21wdXRl
ZC5kZWZhdWx0VG8oJ2Zhdm9yaXRlRm9vZCcpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeyBmYXZvcml0ZUZvb2Q6ICdCYW5h
bmEnIH0pOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCd3aXNoTGlzdCcpOyAgICAgICAg
ICAgICAgICAgICAgIC8vICdCYW5hbmEnCi0gICAgICAgICAgICAgIGhhbXN0ZXIuc2V0KCd3aXNo
TGlzdCcsICdNb3JlIFVuaXQgVGVzdHMnKTsKLSAgICAgICAgICAgICAgaGFtc3Rlci5nZXQoJ3dp
c2hMaXN0Jyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ01vcmUgVW5pdCBUZXN0cycKLSAgICAg
ICAgICAgICAgaGFtc3Rlci5nZXQoJ2Zhdm9yaXRlRm9vZCcpOyAgICAgICAgICAgICAgICAgLy8g
J0JhbmFuYScKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21w
dXRlZC5kZWZhdWx0VG8KLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gZGVmYXVsdFBhdGgKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIu
Q29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggYWN0cyBsaWtlCi0gICAg
ICAgICAgICAgIGEgc3RhbmRhcmQgZ2V0dGVyIGFuZCBzZXR0ZXIsIGJ1dCBkZWZhdWx0cyB0byB0
aGUgdmFsdWUgZnJvbSBgZGVmYXVsdFBhdGhgLgotICAgICAgICAgICAgKi8KLSAgICAgICAgLy8g
RVM2VE9ETzogY29tcHV0ZWQgc2hvdWxkIGhhdmUgaXRzIG93biBleHBvcnQgcGF0aCBzbyB5b3Ug
Y2FuIGRvIGltcG9ydCB7ZGVmYXVsdFRvfSBmcm9tIGNvbXB1dGVkCi0gICAgICAgIGNvbXB1dGVk
LmRlZmF1bHRUbyA9IGZ1bmN0aW9uKGRlZmF1bHRQYXRoKSB7Ci0gICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZWQoZnVuY3Rpb24oa2V5LCBuZXdWYWx1ZSwgY2FjaGVkVmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0KHRoaXMsIGRlZmF1bHRQYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlICE9IG51bGwgPyBuZXdWYWx1ZSA6IGdldCh0aGlz
LCBkZWZhdWx0UGF0aCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgQ3JlYXRlcyBhIG5ldyBwcm9wZXJ0eSB0aGF0IGlzIGFuIGFsaWFz
IGZvciBhbm90aGVyIHByb3BlcnR5Ci0gICAgICAgICAgICAgIG9uIGFuIG9iamVjdC4gQ2FsbHMg
dG8gYGdldGAgb3IgYHNldGAgdGhpcyBwcm9wZXJ0eSBiZWhhdmUgYXMKLSAgICAgICAgICAgICAg
dGhvdWdoIHRoZXkgd2VyZSBjYWxsZWQgb24gdGhlIG9yaWdpbmFsIHByb3BlcnR5LCBidXQgYWxz
bwotICAgICAgICAgICAgICBwcmludCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCBjb21wdXRlZC5kZXByZWNhdGluZ0FsaWFzCi0gICAgICAgICAgICAgIEBm
b3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAg
ICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9w
ZXJ0eSB3aGljaCBjcmVhdGVzIGFuCi0gICAgICAgICAgICAgIGFsaWFzIHdpdGggYSBkZXByZWNh
dGlvbiB0byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5LgotICAgICAgICAgICAgKi8K
LSAgICAgICAgY29tcHV0ZWQuZGVwcmVjYXRpbmdBbGlhcyA9IGZ1bmN0aW9uKGRlcGVuZGVudEtl
eSkgewotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVuY3Rpb24o
a2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnVXNhZ2Ugb2Yg
YCcgKyBrZXkgKyAnYCBpcyBkZXByZWNhdGVkLCB1c2UgYCcgKyBkZXBlbmRlbnRLZXkgKyAnYCBp
bnN0ZWFkLicpOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCBkZXBlbmRlbnRLZXksIHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgZGVwZW5kZW50S2V5KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLW1ldGFsL2NvcmUiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLypnbG9i
YWxzIEVtYmVyOnRydWUsRW06dHJ1ZSxFTlYsRW1iZXJFTlYsTWV0YW1vcnBoRU5WOnRydWUgKi8K
LQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBz
dWJtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIEFsbCBFbWJlciBtZXRob2RzIGFuZCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW5z
aWRlIG9mIHRoaXMgbmFtZXNwYWNlLiBZb3UKLSAgICAgICAgICAgICAgZ2VuZXJhbGx5IHNob3Vs
ZCBub3QgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoaXMgbmFtZXNwYWNlIGFzIGl0IG1heSBiZQot
ICAgICAgICAgICAgICBvdmVyd3JpdHRlbiBieSBmdXR1cmUgdmVyc2lvbnMgb2YgRW1iZXIuCi0K
LSAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgc2hvcnRoYW5kIGBFbWAgaW5zdGVh
ZCBvZiBgRW1iZXJgLgotCi0gICAgICAgICAgICAgIEVtYmVyLVJ1bnRpbWUgaXMgYSBmcmFtZXdv
cmsgdGhhdCBwcm92aWRlcyBjb3JlIGZ1bmN0aW9ucyBmb3IgRW1iZXIgaW5jbHVkaW5nCi0gICAg
ICAgICAgICAgIGNyb3NzLXBsYXRmb3JtIGZ1bmN0aW9ucywgc3VwcG9ydCBmb3IgcHJvcGVydHkg
b2JzZXJ2aW5nIGFuZCBvYmplY3RzLiBJdHMKLSAgICAgICAgICAgICAgZm9jdXMgaXMgb24gc21h
bGwgc2l6ZSBhbmQgcGVyZm9ybWFuY2UuIFlvdSBjYW4gdXNlIHRoaXMgaW4gcGxhY2Ugb2Ygb3IK
LSAgICAgICAgICAgICAgYWxvbmctc2lkZSBvdGhlciBjcm9zcy1wbGF0Zm9ybSBsaWJyYXJpZXMg
c3VjaCBhcyBqUXVlcnkuCi0KLSAgICAgICAgICAgICAgVGhlIGNvcmUgUnVudGltZSBmcmFtZXdv
cmsgaXMgYmFzZWQgb24gdGhlIGpRdWVyeSBBUEkgd2l0aCBhIG51bWJlciBvZgotICAgICAgICAg
ICAgICBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBF
bWJlcgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEB2ZXJzaW9uIDEuNy4w
LWJldGEuNCtwcmUuNGI2ZmYxNDMKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgaWYgKCd1bmRl
ZmluZWQnID09PSB0eXBlb2YgRW1iZXIpIHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBjb3JlIG9i
amVjdC4gTWFrZSBpdCBhY3QgbGlrZSBhbiBpbnN0YW5jZSBvZiBFbWJlci5OYW1lc3BhY2Ugc28g
dGhhdAotICAgICAgICAgICAgLy8gb2JqZWN0cyBhc3NpZ25lZCB0byBpdCBhcmUgZ2l2ZW4gYSBz
YW5lIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgICAgIEVtYmVyID0ge307Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBEZWZhdWx0IGltcG9ydHMsIGV4cG9ydHMgYW5kIGxvb2t1cCB0
byB0aGUgZ2xvYmFsIG9iamVjdDsKLSAgICAgICAgdmFyIGltcG9ydHMgPSBFbWJlci5pbXBvcnRz
ID0gRW1iZXIuaW1wb3J0cyB8fCB0aGlzOwotICAgICAgICB2YXIgZXhwb3J0cyA9IEVtYmVyLmV4
cG9ydHMgPSBFbWJlci5leHBvcnRzIHx8IHRoaXM7Ci0gICAgICAgIHZhciBsb29rdXAgPSBFbWJl
ci5sb29rdXAgPSBFbWJlci5sb29rdXAgfHwgdGhpczsKLQotICAgICAgICAvLyBhbGlhc2VzIG5l
ZWRlZCB0byBrZWVwIG1pbmlmaWVycyBmcm9tIHJlbW92aW5nIHRoZSBnbG9iYWwgY29udGV4dAot
ICAgICAgICBleHBvcnRzLkVtID0gZXhwb3J0cy5FbWJlciA9IEVtYmVyOwotCi0gICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGVzZSBhcmUgc2V0IHdoZXRoZXIgRW1iZXIgd2FzIGFscmVhZHkgZGVmaW5l
ZCBvciBub3QKLQotICAgICAgICBFbWJlci5pc05hbWVzcGFjZSA9IHRydWU7Ci0KLSAgICAgICAg
RW1iZXIudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiAiRW1iZXIi
OwotICAgICAgICB9OwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBW
RVJTSU9OCi0gICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICBAZGVmYXVs
dCAnMS43LjAtYmV0YS40K3ByZS40YjZmZjE0MycKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAg
ICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuVkVSU0lPTiA9ICcxLjcuMC1iZXRhLjQrcHJlLjRi
NmZmMTQzJzsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU3RhbmRhcmQgZW52aXJvbm1l
bnRhbCB2YXJpYWJsZXMuIFlvdSBjYW4gZGVmaW5lIHRoZXNlIGluIGEgZ2xvYmFsIGBFbWJlckVO
VmAKLSAgICAgICAgICAgICAgdmFyaWFibGUgYmVmb3JlIGxvYWRpbmcgRW1iZXIgdG8gY29udHJv
bCB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCi0KLSAgICAgICAgICAgICAgRm9yIGJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBFbWJlciB0aGUg
Z2xvYmFsIGBFTlZgCi0gICAgICAgICAgICAgIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBpZiBgRW1i
ZXJFTlZgIGlzIG5vdCBkZWZpbmVkLgotCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBFTlYKLSAg
ICAgICAgICAgICAgQHR5cGUgSGFzaAotICAgICAgICAgICAgKi8KLQotICAgICAgICBpZiAoRW1i
ZXIuRU5WKSB7Ci0gICAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIEVtYmVyLkVOViBpcyBhbHJl
YWR5IHNldHVwCi0gICAgICAgIH0gZWxzZSBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBFbWJl
ckVOVikgewotICAgICAgICAgICAgRW1iZXIuRU5WID0gRW1iZXJFTlY7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBFTlYpIHsKLSAgICAgICAgICAgIEVtYmVyLkVO
ViA9IEVOVjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEVtYmVyLkVOViA9IHt9Owot
ICAgICAgICB9Ci0KLSAgICAgICAgRW1iZXIuY29uZmlnID0gRW1iZXIuY29uZmlnIHx8IHt9Owot
Ci0gICAgICAgIC8vIFdlIGRpc2FibGUgdGhlIFJBTkdFIEFQSSBieSBkZWZhdWx0IGZvciBwZXJm
b3JtYW5jZSByZWFzb25zCi0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVy
LkVOVi5ESVNBQkxFX1JBTkdFX0FQSSkgewotICAgICAgICAgICAgRW1iZXIuRU5WLkRJU0FCTEVf
UkFOR0VfQVBJID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgidW5kZWZpbmVkIiA9
PT0gdHlwZW9mIE1ldGFtb3JwaEVOVikgewotICAgICAgICAgICAgZXhwb3J0cy5NZXRhbW9ycGhF
TlYgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIE1ldGFtb3JwaEVOVi5ESVNBQkxFX1JBTkdF
X0FQSSA9IEVtYmVyLkVOVi5ESVNBQkxFX1JBTkdFX0FQSTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgSGFzaCBvZiBlbmFibGVkIENhbmFyeSBmZWF0dXJlcy4gQWRkIHRvIGJlZm9yZSBj
cmVhdGluZyB5b3VyIGFwcGxpY2F0aW9uLgotCi0gICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBk
ZWZpbmUgYEVOVi5GRUFUVVJFU2AgaWYgeW91IG5lZWQgdG8gZW5hYmxlIGZlYXR1cmVzIGZsYWdn
ZWQgYXQgcnVudGltZS4KLQotICAgICAgICAgICAgICBAY2xhc3MgRkVBVFVSRVMKLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAg
ICAgIEBzaW5jZSAxLjEuMAotICAgICAgICAgICAgKi8KLQotICAgICAgICBFbWJlci5GRUFUVVJF
UyA9IEVtYmVyLkVOVi5GRUFUVVJFUyB8fCB7fTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgVGVzdCB0aGF0IGEgZmVhdHVyZSBpcyBlbmFibGVkLiBQYXJzZWQgYnkgRW1iZXIncyBidWls
ZCB0b29scyB0byBsZWF2ZQotICAgICAgICAgICAgICBleHBlcmltZW50YWwgZmVhdHVyZXMgb3V0
IG9mIGJldGEvc3RhYmxlIGJ1aWxkcy4KLQotICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSB0
aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKLQotICAgICAgICAgICAgICAqIGBF
TlYuRU5BQkxFX0FMTF9GRUFUVVJFU2AgLSBmb3JjZSBhbGwgZmVhdHVyZXMgdG8gYmUgZW5hYmxl
ZC4KLSAgICAgICAgICAgICAgKiBgRU5WLkVOQUJMRV9PUFRJT05BTF9GRUFUVVJFU2AgLSBlbmFi
bGUgYW55IGZlYXR1cmVzIHRoYXQgaGF2ZSBub3QgYmVlbiBleHBsaWNpdGx5Ci0gICAgICAgICAg
ICAgICAgZW5hYmxlZC9kaXNhYmxlZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIGlzRW5hYmxl
ZAotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZmVhdHVyZQotICAgICAgICAgICAgICBA
cmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkZFQVRVUkVTCi0gICAg
ICAgICAgICAgIEBzaW5jZSAxLjEuMAotICAgICAgICAgICAgKi8KLQotICAgICAgICBFbWJlci5G
RUFUVVJFUy5pc0VuYWJsZWQgPSBmdW5jdGlvbihmZWF0dXJlKSB7Ci0gICAgICAgICAgICB2YXIg
ZmVhdHVyZVZhbHVlID0gRW1iZXIuRkVBVFVSRVNbZmVhdHVyZV07Ci0KLSAgICAgICAgICAgIGlm
IChFbWJlci5FTlYuRU5BQkxFX0FMTF9GRUFUVVJFUykgewotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZWF0dXJlVmFsdWUgPT09IHRydWUgfHwg
ZmVhdHVyZVZhbHVlID09PSBmYWxzZSB8fCBmZWF0dXJlVmFsdWUgPT09IHVuZGVmaW5lZCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKEVtYmVyLkVOVi5FTkFCTEVfT1BUSU9OQUxfRkVBVFVSRVMpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8vIC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAg
ICAgICAgLy8gQk9PVFNUUkFQCi0gICAgICAgIC8vCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIERldGVybWluZXMgd2hldGhlciBFbWJlciBzaG91bGQgZW5oYW5jZSBzb21lIGJ1aWx0LWlu
IG9iamVjdCBwcm90b3R5cGVzIHRvCi0gICAgICAgICAgICAgIHByb3ZpZGUgYSBtb3JlIGZyaWVu
ZGx5IEFQSS4gSWYgZW5hYmxlZCwgYSBmZXcgbWV0aG9kcyB3aWxsIGJlIGFkZGVkIHRvCi0gICAg
ICAgICAgICAgIGBGdW5jdGlvbmAsIGBTdHJpbmdgLCBhbmQgYEFycmF5YC4gYE9iamVjdC5wcm90
b3R5cGVgIHdpbGwgbm90IGJlIGVuaGFuY2VkLAotICAgICAgICAgICAgICB3aGljaCBpcyB0aGUg
b25lIHRoYXQgY2F1c2VzIG1vc3QgdHJvdWJsZSBmb3IgcGVvcGxlLgotCi0gICAgICAgICAgICAg
IEluIGdlbmVyYWwgd2UgcmVjb21tZW5kIGxlYXZpbmcgdGhpcyBvcHRpb24gc2V0IHRvIHRydWUg
c2luY2UgaXQgcmFyZWx5Ci0gICAgICAgICAgICAgIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNvZGUu
IElmIHlvdSBuZWVkIHRvIHR1cm4gaXQgb2ZmIGhvd2V2ZXIsIHlvdSBjYW4KLSAgICAgICAgICAg
ICAgZGVmaW5lIGFuIGBFTlYuRVhURU5EX1BST1RPVFlQRVNgIGNvbmZpZyB0byBkaXNhYmxlIGl0
LgotCi0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBFWFRFTkRfUFJPVE9UWVBFUwotICAgICAgICAg
ICAgICBAdHlwZSBCb29sZWFuCi0gICAgICAgICAgICAgIEBkZWZhdWx0IHRydWUKLSAgICAgICAg
ICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuRVhURU5EX1BS
T1RPVFlQRVMgPSBFbWJlci5FTlYuRVhURU5EX1BST1RPVFlQRVM7Ci0KLSAgICAgICAgaWYgKHR5
cGVvZiBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAg
ICAgIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgRW1iZXIgbG9ncyBhIGZ1bGwg
c3RhY2sgdHJhY2UgZHVyaW5nIGRlcHJlY2F0aW9uIHdhcm5pbmdzCi0KLSAgICAgICAgICAgICAg
QHByb3BlcnR5IExPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OCi0gICAgICAgICAgICAgIEB0
eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAgICAgICAgKi8K
LSAgICAgICAgRW1iZXIuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04gPSAoRW1iZXIuRU5W
LkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OICE9PSBmYWxzZSk7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIERldGVybWluZXMgd2hldGhlciBFbWJlciBzaG91bGQgYWRkIEVDTUFT
Y3JpcHQgNSBzaGltcyB0byBvbGRlciBicm93c2Vycy4KLQotICAgICAgICAgICAgICBAcHJvcGVy
dHkgU0hJTV9FUzUKLSAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICBA
ZGVmYXVsdCBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUwotICAgICAgICAgICAgKi8KLSAgICAgICAg
RW1iZXIuU0hJTV9FUzUgPSAoRW1iZXIuRU5WLlNISU1fRVM1ID09PSBmYWxzZSkgPyBmYWxzZSA6
IEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBE
ZXRlcm1pbmVzIHdoZXRoZXIgRW1iZXIgbG9ncyBpbmZvIGFib3V0IHZlcnNpb24gb2YgdXNlZCBs
aWJyYXJpZXMKLQotICAgICAgICAgICAgICBAcHJvcGVydHkgTE9HX1ZFUlNJT04KLSAgICAgICAg
ICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICBAZGVmYXVsdCB0cnVlCi0gICAgICAg
ICAgICAqLwotICAgICAgICBFbWJlci5MT0dfVkVSU0lPTiA9IChFbWJlci5FTlYuTE9HX1ZFUlNJ
T04gPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgRW1wdHkgZnVuY3Rpb24uIFVzZWZ1bCBmb3Igc29tZSBvcGVyYXRpb25zLiBBbHdheXMgcmV0
dXJucyBgdGhpc2AuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBLCi0gICAgICAgICAgICAgIEBw
cml2YXRlCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0KLSAgICAgICAgICAgICovCi0g
ICAgICAgIHZhciBLID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfTsKLSAgICAgICAgdmFyIEsgPSBLOwotICAgICAgICBfX2V4cG9ydHNfXy5LID0gSzsK
LSAgICAgICAgRW1iZXIuSyA9IEs7Ci0gICAgICAgIC8vVE9ETzogRVM2IEdMT0JMIFRPRE8KLQot
ICAgICAgICAvLyBTdHViIG91dCB0aGUgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoZSBlbWJlci1kZWJ1
ZyBwYWNrYWdlIGluIGNhc2UgaXQncyBub3QgbG9hZGVkCi0KLSAgICAgICAgaWYgKCd1bmRlZmlu
ZWQnID09PSB0eXBlb2YgRW1iZXIuYXNzZXJ0KSB7Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQg
PSBFbWJlci5LOwotICAgICAgICB9Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9m
IEVtYmVyLndhcm4pIHsKLSAgICAgICAgICAgIEVtYmVyLndhcm4gPSBFbWJlci5LOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIEVtYmVyLmRlYnVnKSB7Ci0g
ICAgICAgICAgICBFbWJlci5kZWJ1ZyA9IEVtYmVyLks7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCd1bmRlZmluZWQnID09PSB0eXBlb2YgRW1iZXIucnVuSW5EZWJ1ZykgewotICAgICAgICAgICAg
RW1iZXIucnVuSW5EZWJ1ZyA9IEVtYmVyLks7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCd1bmRl
ZmluZWQnID09PSB0eXBlb2YgRW1iZXIuZGVwcmVjYXRlKSB7Ci0gICAgICAgICAgICBFbWJlci5k
ZXByZWNhdGUgPSBFbWJlci5LOwotICAgICAgICB9Ci0gICAgICAgIGlmICgndW5kZWZpbmVkJyA9
PT0gdHlwZW9mIEVtYmVyLmRlcHJlY2F0ZUZ1bmMpIHsKLSAgICAgICAgICAgIEVtYmVyLmRlcHJl
Y2F0ZUZ1bmMgPSBmdW5jdGlvbihfLCBmdW5jKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmM7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRl
ZmF1bHQiXSA9IEVtYmVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvZGVwZW5k
ZW50X2tleXMiLAotICAgIFsiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvd2F0
Y2hpbmciLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3kxX18uY3JlYXRlOwotICAgICAgICB2YXIgd2F0Y2gg
PSBfX2RlcGVuZGVuY3kyX18ud2F0Y2g7Ci0gICAgICAgIHZhciB1bndhdGNoID0gX19kZXBlbmRl
bmN5Ml9fLnVud2F0Y2g7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVy
LW1ldGFsCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBvX2NyZWF0ZSA9IGNyZWF0ZTsK
LQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIERFUEVOREVOVCBLRVlTCi0gICAgICAgIC8vCi0K
LSAgICAgICAgLy8gZGF0YSBzdHJ1Y3R1cmU6Ci0gICAgICAgIC8vICBtZXRhLmRlcHMgPSB7Ci0g
ICAgICAgIC8vICAgICdkZXBLZXknOiB7Ci0gICAgICAgIC8vICAgICAgJ2tleU5hbWUnOiBjb3Vu
dCwKLSAgICAgICAgLy8gICAgfQotICAgICAgICAvLyAgfQotCi0gICAgICAgIC8qCi0gICAgICAg
ICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG1hcCBvZiB1bmlxdWUgZGVwZW5kZW5jaWVz
IGZvciBhCi0gICAgICAgICAgICAgIGdpdmVuIG9iamVjdCBhbmQga2V5LgotICAgICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24ga2V5c0ZvckRlcChkZXBzTWV0YSwgZGVwS2V5KSB7Ci0gICAg
ICAgICAgICB2YXIga2V5cyA9IGRlcHNNZXRhW2RlcEtleV07Ci0gICAgICAgICAgICBpZiAoIWtl
eXMpIHsKLSAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jaWVzIHll
dCBmb3IgYSB0aGUgZ2l2ZW4ga2V5Ci0gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGVt
cHR5IGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB0aGUga2V5Ci0gICAgICAgICAgICAgICAga2V5
cyA9IGRlcHNNZXRhW2RlcEtleV0gPSB7fTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRlcHNN
ZXRhLmhhc093blByb3BlcnR5KGRlcEtleSkpIHsKLSAgICAgICAgICAgICAgICAvLyBvdGhlcndp
c2UgaWYgdGhlIGRlcGVuZGVuY3kgbGlzdCBpcyBpbmhlcml0ZWQgZnJvbQotICAgICAgICAgICAg
ICAgIC8vIGEgc3VwZXJjbGFzcywgY2xvbmUgdGhlIGhhc2gKLSAgICAgICAgICAgICAgICBrZXlz
ID0gZGVwc01ldGFbZGVwS2V5XSA9IG9fY3JlYXRlKGtleXMpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGtleXM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtZXRh
Rm9yRGVwcyhtZXRhKSB7Ci0gICAgICAgICAgICByZXR1cm4ga2V5c0ZvckRlcChtZXRhLCAnZGVw
cycpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWRkRGVwZW5kZW50S2V5cyhkZXNj
LCBvYmosIGtleU5hbWUsIG1ldGEpIHsKLSAgICAgICAgICAgIC8vIHRoZSBkZXNjcmlwdG9yIGhh
cyBhIGxpc3Qgb2YgZGVwZW5kZW50IGtleXMsIHNvCi0gICAgICAgICAgICAvLyBhZGQgYWxsIG9m
IGl0cyBkZXBlbmRlbnQga2V5cy4KLSAgICAgICAgICAgIHZhciBkZXBLZXlzID0gZGVzYy5fZGVw
ZW5kZW50S2V5cywgZGVwc01ldGEsIGlkeCwgbGVuLCBkZXBLZXksIGtleXM7Ci0gICAgICAgICAg
ICBpZiAoIWRlcEtleXMpIAotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ZGVwc01ldGEgPSBtZXRhRm9yRGVwcyhtZXRhKTsKLQotICAgICAgICAgICAgZm9yIChpZHggPSAw
LCBsZW4gPSBkZXBLZXlzLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAg
ICAgIGRlcEtleSA9IGRlcEtleXNbaWR4XTsKLSAgICAgICAgICAgICAgICAvLyBMb29rdXAga2V5
cyBtZXRhIGZvciBkZXBLZXkKLSAgICAgICAgICAgICAgICBrZXlzID0ga2V5c0ZvckRlcChkZXBz
TWV0YSwgZGVwS2V5KTsKLSAgICAgICAgICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIG51bWJlciBv
ZiB0aW1lcyBkZXBLZXkgZGVwZW5kcyBvbiBrZXlOYW1lLgotICAgICAgICAgICAgICAgIGtleXNb
a2V5TmFtZV0gPSAoa2V5c1trZXlOYW1lXSB8fCAwKSArIDE7Ci0gICAgICAgICAgICAgICAgLy8g
V2F0Y2ggdGhlIGRlcEtleQotICAgICAgICAgICAgICAgIHdhdGNoKG9iaiwgZGVwS2V5LCBtZXRh
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFkZERl
cGVuZGVudEtleXMgPSBhZGREZXBlbmRlbnRLZXlzOwotICAgICAgICBmdW5jdGlvbiByZW1vdmVE
ZXBlbmRlbnRLZXlzKGRlc2MsIG9iaiwga2V5TmFtZSwgbWV0YSkgewotICAgICAgICAgICAgLy8g
dGhlIGRlc2NyaXB0b3IgaGFzIGEgbGlzdCBvZiBkZXBlbmRlbnQga2V5cywgc28KLSAgICAgICAg
ICAgIC8vIHJlbW92ZSBhbGwgb2YgaXRzIGRlcGVuZGVudCBrZXlzLgotICAgICAgICAgICAgdmFy
IGRlcEtleXMgPSBkZXNjLl9kZXBlbmRlbnRLZXlzLCBkZXBzTWV0YSwgaWR4LCBsZW4sIGRlcEtl
eSwga2V5czsKLSAgICAgICAgICAgIGlmICghZGVwS2V5cykgCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICBkZXBzTWV0YSA9IG1ldGFGb3JEZXBzKG1ldGEpOwotCi0gICAg
ICAgICAgICBmb3IgKGlkeCA9IDAsIGxlbiA9IGRlcEtleXMubGVuZ3RoOyBpZHggPCBsZW47IGlk
eCsrKSB7Ci0gICAgICAgICAgICAgICAgZGVwS2V5ID0gZGVwS2V5c1tpZHhdOwotICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCBrZXlzIG1ldGEgZm9yIGRlcEtleQotICAgICAgICAgICAgICAgIGtl
eXMgPSBrZXlzRm9yRGVwKGRlcHNNZXRhLCBkZXBLZXkpOwotICAgICAgICAgICAgICAgIC8vIERl
Y3JlbWVudCB0aGUgbnVtYmVyIG9mIHRpbWVzIGRlcEtleSBkZXBlbmRzIG9uIGtleU5hbWUuCi0g
ICAgICAgICAgICAgICAga2V5c1trZXlOYW1lXSA9IChrZXlzW2tleU5hbWVdIHx8IDApIC0gMTsK
LSAgICAgICAgICAgICAgICAvLyBVbndhdGNoIHRoZSBkZXBLZXkKLSAgICAgICAgICAgICAgICB1
bndhdGNoKG9iaiwgZGVwS2V5LCBtZXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBfX2V4cG9ydHNfXy5yZW1vdmVEZXBlbmRlbnRLZXlzID0gcmVtb3ZlRGVwZW5kZW50S2V5
czsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLAot
ICAgIFsiZW1iZXItbWV0YWwvYXJyYXkiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVw
ZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICB2YXIgX2ZpbHRlciA9IF9fZGVwZW5kZW5jeTFfXy5maWx0ZXI7Ci0gICAgICAgIHZhciBhX2Zv
ckVhY2ggPSBfX2RlcGVuZGVuY3kxX18uZm9yRWFjaDsKLSAgICAgICAgdmFyIF9pbmRleE9mID0g
X19kZXBlbmRlbmN5MV9fLmluZGV4T2Y7Ci0gICAgICAgIHZhciBfbWFwID0gX19kZXBlbmRlbmN5
MV9fLm1hcDsKLQotICAgICAgICB2YXIgc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAqIERlZmluZXMgc29tZSBjb252ZW5pZW5jZSBt
ZXRob2RzIGZvciB3b3JraW5nIHdpdGggRW51bWVyYWJsZXMuCi0gICAgICAgICAgICAgKiBgRW1i
ZXIuRW51bWVyYWJsZVV0aWxzYCB1c2VzIGBFbWJlci5BcnJheVBvbHlmaWxsc2Agd2hlbiBuZWNl
c3NhcnkuCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQGNsYXNzIEVudW1lcmFibGVV
dGlscwotICAgICAgICAgICAgICogQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICogQHN0
YXRpYwotICAgICAgICAgICAgICogKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENh
bGxzIHRoZSBtYXAgZnVuY3Rpb24gb24gdGhlIHBhc3NlZCBvYmplY3Qgd2l0aCBhIHNwZWNpZmll
ZCBjYWxsYmFjay4gVGhpcwotICAgICAgICAgICAgICogdXNlcyBgRW1iZXIuQXJyYXlQb2x5Zmls
bGAncy1tYXAgbWV0aG9kIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICoKLSAgICAgICAg
ICAgICAqIEBtZXRob2QgbWFwCi0gICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRo
ZSBvYmplY3QgdGhhdCBzaG91bGQgYmUgbWFwcGVkCi0gICAgICAgICAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAgICAgICog
QHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVmFsdWUgdG8gdXNlIGFzIHRoaXMgd2hlbiBleGVjdXRp
bmcgKmNhbGxiYWNrKgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEByZXR1cm4ge0Fy
cmF5fSBBbiBhcnJheSBvZiBtYXBwZWQgdmFsdWVzLgotICAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIG1hcChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKSB7Ci0gICAgICAgICAgICByZXR1
cm4gb2JqLm1hcCA/IG9iai5tYXAuY2FsbChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKSA6IF9tYXAu
Y2FsbChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhw
b3J0c19fLm1hcCA9IG1hcDsgLyoqCi0gICAgICAgICAgICAgKiBDYWxscyB0aGUgZm9yRWFjaCBm
dW5jdGlvbiBvbiB0aGUgcGFzc2VkIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGNhbGxiYWNrLiBU
aGlzCi0gICAgICAgICAgICAgKiB1c2VzIGBFbWJlci5BcnJheVBvbHlmaWxsYCdzLWZvckVhY2gg
bWV0aG9kIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBt
ZXRob2QgZm9yRWFjaAotICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2Jq
ZWN0IHRvIGNhbGwgZm9yRWFjaCBvbgotICAgICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
Y2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAqIEBwYXJhbSB7
T2JqZWN0fSB0aGlzQXJnIFZhbHVlIHRvIHVzZSBhcyB0aGlzIHdoZW4gZXhlY3V0aW5nICpjYWxs
YmFjayoKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
Zm9yRWFjaChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKSB7Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
LmZvckVhY2ggPyBvYmouZm9yRWFjaC5jYWxsKG9iaiwgY2FsbGJhY2ssIHRoaXNBcmcpIDogYV9m
b3JFYWNoLmNhbGwob2JqLCBjYWxsYmFjaywgdGhpc0FyZyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBfX2V4cG9ydHNfXy5mb3JFYWNoID0gZm9yRWFjaDsgLyoqCi0gICAgICAgICAgICAgKiBDYWxs
cyB0aGUgZmlsdGVyIGZ1bmN0aW9uIG9uIHRoZSBwYXNzZWQgb2JqZWN0IHdpdGggYSBzcGVjaWZp
ZWQgY2FsbGJhY2suIFRoaXMKLSAgICAgICAgICAgICAqIHVzZXMgYEVtYmVyLkFycmF5UG9seWZp
bGxgJ3MtZmlsdGVyIG1ldGhvZCB3aGVuIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAqCi0gICAg
ICAgICAgICAgKiBAbWV0aG9kIGZpbHRlcgotICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9
IG9iaiBUaGUgb2JqZWN0IHRvIGNhbGwgZmlsdGVyIG9uCi0gICAgICAgICAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAgICAg
ICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVmFsdWUgdG8gdXNlIGFzIHRoaXMgd2hlbiBleGVj
dXRpbmcgKmNhbGxiYWNrKgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEByZXR1cm4g
e0FycmF5fSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBmaWx0ZXJlZCB2YWx1ZXMKLSAgICAgICAg
ICAgICAqIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZp
bHRlcihvYmosIGNhbGxiYWNrLCB0aGlzQXJnKSB7Ci0gICAgICAgICAgICByZXR1cm4gb2JqLmZp
bHRlciA/IG9iai5maWx0ZXIuY2FsbChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKSA6IF9maWx0ZXIu
Y2FsbChvYmosIGNhbGxiYWNrLCB0aGlzQXJnKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhw
b3J0c19fLmZpbHRlciA9IGZpbHRlcjsgLyoqCi0gICAgICAgICAgICAgKiBDYWxscyB0aGUgaW5k
ZXhPZiBmdW5jdGlvbiBvbiB0aGUgcGFzc2VkIG9iamVjdCB3aXRoIGEgc3BlY2lmaWVkIGNhbGxi
YWNrLiBUaGlzCi0gICAgICAgICAgICAgKiB1c2VzIGBFbWJlci5BcnJheVBvbHlmaWxsYCdzLWlu
ZGV4T2YgbWV0aG9kIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICoKLSAgICAgICAgICAg
ICAqIEBtZXRob2QgaW5kZXhPZgotICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBU
aGUgb2JqZWN0IHRvIGNhbGwgaW5kZXhPbiBvbgotICAgICAgICAgICAgICogQHBhcmFtIHtGdW5j
dGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBpbmRleCBUaGUgaW5kZXggdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20KLSAg
ICAgICAgICAgICAqCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW5kZXhPZihv
YmosIGVsZW1lbnQsIGluZGV4KSB7Ci0gICAgICAgICAgICByZXR1cm4gb2JqLmluZGV4T2YgPyBv
YmouaW5kZXhPZi5jYWxsKG9iaiwgZWxlbWVudCwgaW5kZXgpIDogX2luZGV4T2YuY2FsbChvYmos
IGVsZW1lbnQsIGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmluZGV4
T2YgPSBpbmRleE9mOyAvKioKLSAgICAgICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5k
ZXhlcyBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZXMgb2YgdGhlIHBhc3NlZCBlbGVtZW50cwotICAg
ICAgICAgICAgICogb24gdGhlIHBhc3NlZCBvYmplY3QuCi0gICAgICAgICAgICAgKgotICAgICAg
ICAgICAgICogYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICogIHZhciBhcnJheSA9IFsxLCAy
LCAzLCA0LCA1XTsKLSAgICAgICAgICAgICAqICBFbWJlci5FbnVtZXJhYmxlVXRpbHMuaW5kZXhl
c09mKGFycmF5LCBbMiwgNV0pOyAvLyBbMSwgNF0KLSAgICAgICAgICAgICAqCi0gICAgICAgICAg
ICAgKiAgdmFyIGZ1YmFyID0gIkZ1YmFyciI7Ci0gICAgICAgICAgICAgKiAgRW1iZXIuRW51bWVy
YWJsZVV0aWxzLmluZGV4ZXNPZihmdWJhciwgWydiJywgJ3InXSk7IC8vIFsyLCA0XQotICAgICAg
ICAgICAgICogYGBgCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQG1ldGhvZCBpbmRl
eGVzT2YKLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBj
aGVjayBmb3IgZWxlbWVudCBpbmRleGVzCi0gICAgICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBl
bGVtZW50cyBUaGUgZWxlbWVudHMgdG8gc2VhcmNoIGZvciBvbiAqb2JqKgotICAgICAgICAgICAg
ICoKLSAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBpbmRleGVzLgot
ICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpbmRleGVz
T2Yob2JqLCBlbGVtZW50cykgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzID09PSB1bmRl
ZmluZWQgPyBbXSA6IG1hcChlbGVtZW50cywgZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleE9mKG9iaiwgaXRlbSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fQotCi0gICAgICAgIF9fZXhwb3J0c19fLmluZGV4ZXNPZiA9IGluZGV4ZXNPZjsgLyoqCi0gICAg
ICAgICAgICAgKiBBZGRzIGFuIG9iamVjdCB0byBhbiBhcnJheS4gSWYgdGhlIGFycmF5IGFscmVh
ZHkgaW5jbHVkZXMgdGhlIG9iamVjdCB0aGlzCi0gICAgICAgICAgICAgKiBtZXRob2QgaGFzIG5v
IGVmZmVjdC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIGFkZE9iamVj
dAotICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRoZSBwYXNz
ZWQgaXRlbSBzaG91bGQgYmUgYWRkZWQgdG8KLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBpdGVtIFRoZSBpdGVtIHRvIGFkZCB0byB0aGUgcGFzc2VkIGFycmF5Ci0gICAgICAgICAgICAg
KgotICAgICAgICAgICAgICogQHJldHVybiAndW5kZWZpbmVkJwotICAgICAgICAgICAgICovCi0g
ICAgICAgIGZ1bmN0aW9uIGFkZE9iamVjdChhcnJheSwgaXRlbSkgewotICAgICAgICAgICAgdmFy
IGluZGV4ID0gaW5kZXhPZihhcnJheSwgaXRlbSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT09
IC0xKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXkucHVzaChpdGVtKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFkZE9iamVjdCA9IGFkZE9iamVjdDsg
LyoqCi0gICAgICAgICAgICAgKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGFycmF5LiBJZiB0
aGUgYXJyYXkgZG9lcyBub3QgY29udGFpbiB0aGUgcGFzc2VkCi0gICAgICAgICAgICAgKiBvYmpl
Y3QgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAg
ICAgKiBAbWV0aG9kIHJlbW92ZU9iamVjdAotICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0g
YXJyYXkgVGhlIGFycmF5IHRvIHJlbW92ZSB0aGUgaXRlbSBmcm9tLgotICAgICAgICAgICAgICog
QHBhcmFtIHtPYmplY3R9IGl0ZW0gVGhlIGl0ZW0gdG8gcmVtb3ZlIGZyb20gdGhlIHBhc3NlZCBh
cnJheS4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAcmV0dXJuICd1bmRlZmluZWQn
Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVtb3ZlT2JqZWN0KGFycmF5LCBp
dGVtKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSBpbmRleE9mKGFycmF5LCBpdGVtKTsKLSAg
ICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBhcnJheS5zcGxp
Y2UoaW5kZXgsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18ucmVtb3ZlT2JqZWN0ID0gcmVtb3ZlT2JqZWN0OwotICAgICAgICBmdW5jdGlvbiBfcmVw
bGFjZShhcnJheSwgaWR4LCBhbXQsIG9iamVjdHMpIHsKLSAgICAgICAgICAgIHZhciBhcmdzID0g
W10uY29uY2F0KG9iamVjdHMpLCBjaHVuaywgcmV0ID0gW10sCi0gICAgICAgICAgICAvLyBodHRw
czovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTY1ODgKLSAg
ICAgICAgICAgIHNpemUgPSA2MDAwMCwgc3RhcnQgPSBpZHgsIGVuZHMgPSBhbXQsIGNvdW50Owot
Ci0gICAgICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBjb3Vu
dCA9IGVuZHMgPiBzaXplID8gc2l6ZSA6IGVuZHM7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50
IDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGNodW5rID0gYXJncy5zcGxpY2UoMCwgc2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgY2h1bmsgPSBbc3RhcnQsIGNvdW50XS5jb25jYXQoY2h1bmspOwotCi0gICAg
ICAgICAgICAgICAgc3RhcnQgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBlbmRzIC09IGNvdW50
OwotCi0gICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdChzcGxpY2UuYXBwbHkoYXJyYXks
IGNodW5rKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uX3JlcGxhY2UgPSBfcmVwbGFjZTsgLyoqCi0gICAg
ICAgICAgICAgKiBSZXBsYWNlcyBvYmplY3RzIGluIGFuIGFycmF5IHdpdGggdGhlIHBhc3NlZCBv
YmplY3RzLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAqICAgdmFyIGFycmF5ID0gWzEsMiwzXTsKLSAgICAgICAgICAgICAqICAgRW1i
ZXIuRW51bWVyYWJsZVV0aWxzLnJlcGxhY2UoYXJyYXksIDEsIDIsIFs0LCA1XSk7IC8vIFsxLCA0
LCA1XQotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqICAgdmFyIGFycmF5ID0gWzEsMiwz
XTsKLSAgICAgICAgICAgICAqICAgRW1iZXIuRW51bWVyYWJsZVV0aWxzLnJlcGxhY2UoYXJyYXks
IDEsIDEsIFs0LCA1XSk7IC8vIFsxLCA0LCA1LCAzXQotICAgICAgICAgICAgICoKLSAgICAgICAg
ICAgICAqICAgdmFyIGFycmF5ID0gWzEsMiwzXTsKLSAgICAgICAgICAgICAqICAgRW1iZXIuRW51
bWVyYWJsZVV0aWxzLnJlcGxhY2UoYXJyYXksIDEwLCAxLCBbNCwgNV0pOyAvLyBbMSwgMiwgMywg
NCwgNV0KLSAgICAgICAgICAgICAqIGBgYAotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAq
IEBtZXRob2QgcmVwbGFjZQotICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhl
IGFycmF5IHRoZSBvYmplY3RzIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvLgotICAgICAgICAgICAg
ICogQHBhcmFtIHtOdW1iZXJ9IGlkeCBTdGFydGluZyBpbmRleCBpbiB0aGUgYXJyYXkgdG8gcmVw
bGFjZS4gSWYgKmlkeCogPj0KLSAgICAgICAgICAgICAqIGxlbmd0aCwgdGhlbiBhcHBlbmQgdG8g
dGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gYW10
IE51bWJlciBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGFycmF5
LAotICAgICAgICAgICAgICogc3RhcnRpbmcgYXQgKmlkeCoKLSAgICAgICAgICAgICAqIEBwYXJh
bSB7QXJyYXl9IG9iamVjdHMgQW4gYXJyYXkgb2YgemVybyBvciBtb3JlIG9iamVjdHMgdGhhdCBz
aG91bGQgYmUKLSAgICAgICAgICAgICAqIGluc2VydGVkIGludG8gdGhlIGFycmF5IGF0ICppZHgq
Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogQHJldHVybiB7QXJyYXl9IFRoZSBtb2Rp
ZmllZCBhcnJheS4KLSAgICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZXBsYWNlKGFy
cmF5LCBpZHgsIGFtdCwgb2JqZWN0cykgewotICAgICAgICAgICAgaWYgKGFycmF5LnJlcGxhY2Up
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkucmVwbGFjZShpZHgsIGFtdCwgb2JqZWN0
cyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBfcmVwbGFj
ZShhcnJheSwgaWR4LCBhbXQsIG9iamVjdHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgX19leHBvcnRzX18ucmVwbGFjZSA9IHJlcGxhY2U7IC8qKgotICAgICAgICAgICAg
ICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBhcnJheXMuIFRoaXMgbWV0aG9k
IHJldHVybnMgYSBuZXcgYXJyYXkKLSAgICAgICAgICAgICAqIGZpbGxlZCB3aXRoIHRoZSByZWNv
cmRzIHRoYXQgdGhlIHR3byBwYXNzZWQgYXJyYXlzIHNoYXJlIHdpdGggZWFjaCBvdGhlci4KLSAg
ICAgICAgICAgICAqIElmIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgYW4gZW1wdHkgYXJyYXkg
d2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgKiB2YXIgYXJyYXkxID0gWzEsIDIsIDMsIDQsIDVdOwotICAg
ICAgICAgICAgICogdmFyIGFycmF5MiA9IFsxLCAzLCA1LCA2LCA3XTsKLSAgICAgICAgICAgICAq
Ci0gICAgICAgICAgICAgKiBFbWJlci5FbnVtZXJhYmxlVXRpbHMuaW50ZXJzZWN0aW9uKGFycmF5
MSwgYXJyYXkyKTsgLy8gWzEsIDMsIDVdCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICog
dmFyIGFycmF5MSA9IFsxLCAyLCAzXTsKLSAgICAgICAgICAgICAqIHZhciBhcnJheTIgPSBbNCwg
NSwgNl07Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogRW1iZXIuRW51bWVyYWJsZVV0
aWxzLmludGVyc2VjdGlvbihhcnJheTEsIGFycmF5Mik7IC8vIFtdCi0gICAgICAgICAgICAgKiBg
YGAKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBAbWV0aG9kIGludGVyc2VjdGlvbgot
ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkxIFRoZSBmaXJzdCBhcnJheQotICAg
ICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkyIFRoZSBzZWNvbmQgYXJyYXkKLSAgICAg
ICAgICAgICAqCi0gICAgICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gVGhlIGludGVyc2VjdGlv
biBvZiB0aGUgdHdvIHBhc3NlZCBhcnJheXMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gaW50ZXJzZWN0aW9uKGFycmF5MSwgYXJyYXkyKSB7Ci0gICAgICAgICAgICB2YXIgcmVz
dWx0ID0gW107Ci0gICAgICAgICAgICBmb3JFYWNoKGFycmF5MSwgZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGFycmF5MiwgZWxlbWVudCkgPj0gMCkgewot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlbGVtZW50KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbjsg
Ly8gVE9ETzogdGhpcyBvbmx5IGV4aXN0cyB0byBtYWludGFpbiB0aGUgZXhpc3RpbmcgYXBpLCBh
cyB3ZSBtb3ZlIGZvcndhcmQgaXQKLSAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgcGFydCBvZiB0
aGUgImdsb2JhbCBidWlsZCIgdmlhIHNvbWUgc2hpbQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gewotICAgICAgICAgICAgX3JlcGxhY2U6IF9yZXBsYWNlLAotICAgICAgICAgICAg
YWRkT2JqZWN0OiBhZGRPYmplY3QsCi0gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlciwKLSAgICAg
ICAgICAgIGZvckVhY2g6IGZvckVhY2gsCi0gICAgICAgICAgICBpbmRleE9mOiBpbmRleE9mLAot
ICAgICAgICAgICAgaW5kZXhlc09mOiBpbmRleGVzT2YsCi0gICAgICAgICAgICBpbnRlcnNlY3Rp
b246IGludGVyc2VjdGlvbiwKLSAgICAgICAgICAgIG1hcDogbWFwLAotICAgICAgICAgICAgcmVt
b3ZlT2JqZWN0OiByZW1vdmVPYmplY3QsCi0gICAgICAgICAgICByZXBsYWNlOiByZXBsYWNlCi0g
ICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9lcnJvciIsCi0gICAg
WyJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3kxX18uY3JlYXRlOwotCi0gICAgICAgIHZhciBlcnJv
clByb3BzID0gWwotICAgICAgICAnZGVzY3JpcHRpb24nLAotICAgICAgICAnZmlsZU5hbWUnLAot
ICAgICAgICAnbGluZU51bWJlcicsCi0gICAgICAgICdtZXNzYWdlJywKLSAgICAgICAgJ25hbWUn
LAotICAgICAgICAnbnVtYmVyJywKLSAgICAgICAgJ3N0YWNrJwotICAgICAgICBdOwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBBIHN1YmNsYXNzIG9mIHRoZSBKYXZhU2NyaXB0IEVycm9y
IG9iamVjdCBmb3IgdXNlIGluIEVtYmVyLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBFcnJvcgot
ICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVy
cm9yCi0gICAgICAgICAgICAgIEBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gRW1iZXJFcnJvcigpIHsKLSAgICAgICAgICAgIHZhciB0bXAgPSBFcnJvci5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICAgICAgICAvLyBBZGRzIGEgYHN0YWNrYCBwcm9w
ZXJ0eSB0byB0aGUgZ2l2ZW4gZXJyb3Igb2JqZWN0IHRoYXQgd2lsbCB5aWVsZCB0aGUKLSAgICAg
ICAgICAgIC8vIHN0YWNrIHRyYWNlIGF0IHRoZSB0aW1lIGNhcHR1cmVTdGFja1RyYWNlIHdhcyBj
YWxsZWQuCi0gICAgICAgICAgICAvLyBXaGVuIGNvbGxlY3RpbmcgdGhlIHN0YWNrIHRyYWNlIGFs
bCBmcmFtZXMgYWJvdmUgdGhlIHRvcG1vc3QgY2FsbAotICAgICAgICAgICAgLy8gdG8gdGhpcyBm
dW5jdGlvbiwgaW5jbHVkaW5nIHRoYXQgY2FsbCwgd2lsbCBiZSBsZWZ0IG91dCBvZiB0aGUKLSAg
ICAgICAgICAgIC8vIHN0YWNrIHRyYWNlLgotICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwg
YmVjYXVzZSB3ZSBjYW4gaGlkZSBFbWJlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzCi0gICAgICAg
ICAgICAvLyB0aGF0IGFyZSBub3QgdmVyeSBoZWxwZnVsIGZvciB0aGUgdXNlci4KLSAgICAgICAg
ICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgewotICAgICAgICAgICAgICAgIEVycm9y
LmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEVtYmVyLkVycm9yKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBD
aHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLgotICAg
ICAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsr
KSB7Ci0gICAgICAgICAgICAgICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJv
cHNbaWR4XV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBFbWJlckVycm9y
LnByb3RvdHlwZSA9IGNyZWF0ZShFcnJvci5wcm90b3R5cGUpOwotCi0gICAgICAgIF9fZXhwb3J0
c19fWyJkZWZhdWx0Il0gPSBFbWJlckVycm9yOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXIt
bWV0YWwvZXZlbnRzIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvdXRp
bHMiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIgPSBf
X2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVu
Y3kyX18ubWV0YTsKLSAgICAgICAgdmFyIE1FVEFfS0VZID0gX19kZXBlbmRlbmN5Ml9fLk1FVEFf
S0VZOwotICAgICAgICB2YXIgdHJ5RmluYWxseSA9IF9fZGVwZW5kZW5jeTJfXy50cnlGaW5hbGx5
OwotICAgICAgICB2YXIgYXBwbHkgPSBfX2RlcGVuZGVuY3kyX18uYXBwbHk7Ci0gICAgICAgIHZh
ciBhcHBseVN0ciA9IF9fZGVwZW5kZW5jeTJfXy5hcHBseVN0cjsKLSAgICAgICAgdmFyIGNyZWF0
ZSA9IF9fZGVwZW5kZW5jeTNfXy5jcmVhdGU7Ci0KLSAgICAgICAgdmFyIGFfc2xpY2UgPSBbXS5z
bGljZSwKLSAgICAgICAgbWV0YUZvciA9IG1ldGEsCi0gICAgICAgIC8qIGxpc3RlbmVyIGZsYWdz
ICovCi0gICAgICAgIE9OQ0UgPSAxLCBTVVNQRU5ERUQgPSAyOwotCi0KLSAgICAgICAgLyoKLSAg
ICAgICAgICAgICAgVGhlIGV2ZW50IHN5c3RlbSB1c2VzIGEgc2VyaWVzIG9mIG5lc3RlZCBoYXNo
ZXMgdG8gc3RvcmUgbGlzdGVuZXJzIG9uIGFuCi0gICAgICAgICAgICAgIG9iamVjdC4gV2hlbiBh
IGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQsIG9yIHdoZW4gYW4gZXZlbnQgYXJyaXZlcywgdGhlc2UK
LSAgICAgICAgICAgICAgaGFzaGVzIGFyZSBjb25zdWx0ZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHRh
cmdldCBhbmQgYWN0aW9uIHBhaXIgdG8gaW52b2tlLgotCi0gICAgICAgICAgICAgIFRoZSBoYXNo
ZXMgYXJlIHN0b3JlZCBpbiB0aGUgb2JqZWN0J3MgbWV0YSBoYXNoLCBhbmQgbG9vayBsaWtlIHRo
aXM6Ci0KLSAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCdzIG1ldGEgaGFzaAotICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IHsgICAgICAgLy8gdmFy
aWFibGUgbmFtZTogYGxpc3RlbmVyU2V0YAotICAgICAgICAgICAgICAgICAgICAgICJmb286Y2hh
bmdlZCI6IFsgLy8gdmFyaWFibGUgbmFtZTogYGFjdGlvbnNgCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0YXJnZXQsIG1ldGhvZCwgZmxhZ3MKLSAgICAgICAgICAgICAgICAgICAgICBdCi0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKi8K
LQotICAgICAgICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB0YXJnZXQsIG1ldGhvZCkgewotICAg
ICAgICAgICAgdmFyIGluZGV4ID0gLTE7Ci0gICAgICAgICAgICAvLyBoYXNoZXMgYXJlIGFkZGVk
IHRvIHRoZSBlbmQgb2YgdGhlIGV2ZW50IGFycmF5Ci0gICAgICAgICAgICAvLyBzbyBpdCBtYWtl
cyBzZW5zZSB0byBzdGFydCBzZWFyY2hpbmcgYXQgdGhlIGVuZAotICAgICAgICAgICAgLy8gb2Yg
dGhlIGFycmF5IGFuZCBzZWFyY2ggaW4gcmV2ZXJzZQotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IGFycmF5Lmxlbmd0aCAtIDMgOyBpID49IDA7IGkgLT0gMykgewotICAgICAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT09IGFycmF5W2ldICYmIG1ldGhvZCA9PT0gYXJyYXlbaSArIDFdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGluZGV4
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYWN0aW9uc0ZvcihvYmosIGV2ZW50TmFt
ZSkgewotICAgICAgICAgICAgdmFyIG1ldGEgPSBtZXRhRm9yKG9iaiwgdHJ1ZSksCi0gICAgICAg
ICAgICBhY3Rpb25zOwotCi0gICAgICAgICAgICBpZiAoIW1ldGEubGlzdGVuZXJzKSB7Ci0gICAg
ICAgICAgICAgICAgbWV0YS5saXN0ZW5lcnMgPSB7fTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFtZXRhLmhhc093blByb3BlcnR5KCdsaXN0ZW5lcnMnKSkgewotICAgICAgICAg
ICAgICAgIC8vIHNldHVwIGluaGVyaXRlZCBjb3B5IG9mIHRoZSBsaXN0ZW5lcnMgb2JqZWN0Ci0g
ICAgICAgICAgICAgICAgbWV0YS5saXN0ZW5lcnMgPSBjcmVhdGUobWV0YS5saXN0ZW5lcnMpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhY3Rpb25zID0gbWV0YS5saXN0ZW5lcnNbZXZl
bnROYW1lXTsKLQotICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGFjdGlvbnMsIGJ1dCB0aGUg
ZXZlbnROYW1lIGRvZXNuJ3QgZXhpc3QgaW4gb3VyIGxpc3RlbmVycywgdGhlbiBjb3B5IHRoZW0g
ZnJvbSB0aGUgcHJvdG90eXBlCi0gICAgICAgICAgICBpZiAoYWN0aW9ucyAmJiAhbWV0YS5saXN0
ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkgewotICAgICAgICAgICAgICAgIGFjdGlv
bnMgPSBtZXRhLmxpc3RlbmVyc1tldmVudE5hbWVdID0gbWV0YS5saXN0ZW5lcnNbZXZlbnROYW1l
XS5zbGljZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghYWN0aW9ucykgewotICAgICAgICAg
ICAgICAgIGFjdGlvbnMgPSBtZXRhLmxpc3RlbmVyc1tldmVudE5hbWVdID0gW107Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gbGlzdGVuZXJzVW5pb24ob2JqLCBldmVudE5hbWUsIG90aGVyQWN0aW9ucykg
ewotICAgICAgICAgICAgdmFyIG1ldGEgPSBvYmpbTUVUQV9LRVldLAotICAgICAgICAgICAgYWN0
aW9ucyA9IG1ldGEgJiYgbWV0YS5saXN0ZW5lcnMgJiYgbWV0YS5saXN0ZW5lcnNbZXZlbnROYW1l
XTsKLQotICAgICAgICAgICAgaWYgKCFhY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGFjdGlvbnMubGVuZ3Ro
IC0gMzsgaSA+PSAwOyBpIC09IDMpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYWN0
aW9uc1tpXSwKLSAgICAgICAgICAgICAgICBtZXRob2QgPSBhY3Rpb25zW2kgKyAxXSwKLSAgICAg
ICAgICAgICAgICBmbGFncyA9IGFjdGlvbnNbaSArIDJdLAotICAgICAgICAgICAgICAgIGFjdGlv
bkluZGV4ID0gaW5kZXhPZihvdGhlckFjdGlvbnMsIHRhcmdldCwgbWV0aG9kKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChhY3Rpb25JbmRleCA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
b3RoZXJBY3Rpb25zLnB1c2godGFyZ2V0LCBtZXRob2QsIGZsYWdzKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5saXN0
ZW5lcnNVbmlvbiA9IGxpc3RlbmVyc1VuaW9uOwotICAgICAgICBmdW5jdGlvbiBsaXN0ZW5lcnNE
aWZmKG9iaiwgZXZlbnROYW1lLCBvdGhlckFjdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBtZXRh
ID0gb2JqW01FVEFfS0VZXSwKLSAgICAgICAgICAgIGFjdGlvbnMgPSBtZXRhICYmIG1ldGEubGlz
dGVuZXJzICYmIG1ldGEubGlzdGVuZXJzW2V2ZW50TmFtZV0sCi0gICAgICAgICAgICBkaWZmQWN0
aW9ucyA9IFtdOwotCi0gICAgICAgICAgICBpZiAoIWFjdGlvbnMpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gYWN0aW9u
cy5sZW5ndGggLSAzOyBpID49IDA7IGkgLT0gMykgewotICAgICAgICAgICAgICAgIHZhciB0YXJn
ZXQgPSBhY3Rpb25zW2ldLAotICAgICAgICAgICAgICAgIG1ldGhvZCA9IGFjdGlvbnNbaSArIDFd
LAotICAgICAgICAgICAgICAgIGZsYWdzID0gYWN0aW9uc1tpICsgMl0sCi0gICAgICAgICAgICAg
ICAgYWN0aW9uSW5kZXggPSBpbmRleE9mKG90aGVyQWN0aW9ucywgdGFyZ2V0LCBtZXRob2QpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkluZGV4ICE9PSAtMSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBv
dGhlckFjdGlvbnMucHVzaCh0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpOwotICAgICAgICAgICAgICAg
IGRpZmZBY3Rpb25zLnB1c2godGFyZ2V0LCBtZXRob2QsIGZsYWdzKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGRpZmZBY3Rpb25zOwotICAgICAgICB9Ci0KLSAgICAgICAg
X19leHBvcnRzX18ubGlzdGVuZXJzRGlmZiA9IGxpc3RlbmVyc0RpZmY7IC8qKgotICAgICAgICAg
ICAgICBBZGQgYW4gZXZlbnQgbGlzdGVuZXIKLQotICAgICAgICAgICAgICBAbWV0aG9kIGFkZExp
c3RlbmVyCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9i
agotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCi0gICAgICAgICAgICAg
IEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXRPck1ldGhvZCBBIHRhcmdldCBvYmplY3Qg
b3IgYSBmdW5jdGlvbgotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0
aG9kIEEgZnVuY3Rpb24gb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24g
YHRhcmdldGAKLSAgICAgICAgICAgICAgQHBhcmFtIHtCb29sZWFufSBvbmNlIEEgZmxhZyB3aGV0
aGVyIGEgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAgICAgICAgICAgICov
Ci0gICAgICAgIGZ1bmN0aW9uIGFkZExpc3RlbmVyKG9iaiwgZXZlbnROYW1lLCB0YXJnZXQsIG1l
dGhvZCwgb25jZSkgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCBwYXNzIGF0
IGxlYXN0IGFuIG9iamVjdCBhbmQgZXZlbnQgbmFtZSB0byBFbWJlci5hZGRMaXN0ZW5lciIsICEh
b2JqICYmICEhZXZlbnROYW1lKTsKLQotICAgICAgICAgICAgaWYgKCFtZXRob2QgJiYgJ2Z1bmN0
aW9uJyA9PT0gdHlwZW9mIHRhcmdldCkgewotICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRhcmdl
dDsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB2YXIgYWN0aW9ucyA9IGFjdGlvbnNGb3Iob2JqLCBldmVudE5hbWUpLAotICAgICAg
ICAgICAgYWN0aW9uSW5kZXggPSBpbmRleE9mKGFjdGlvbnMsIHRhcmdldCwgbWV0aG9kKSwKLSAg
ICAgICAgICAgIGZsYWdzID0gMDsKLQotICAgICAgICAgICAgaWYgKG9uY2UpIAotICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IE9OQ0U7Ci0KLSAgICAgICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGFjdGlvbnMucHVzaCh0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpOwotCi0gICAgICAgICAgICBp
ZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai5kaWRBZGRMaXN0ZW5lcikgewotICAgICAgICAg
ICAgICAgIG9iai5kaWRBZGRMaXN0ZW5lcihldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFkZExpc3RlbmVy
ID0gYWRkTGlzdGVuZXI7IC8qKgotICAgICAgICAgICAgICBSZW1vdmUgYW4gZXZlbnQgbGlzdGVu
ZXIKLQotICAgICAgICAgICAgICBBcmd1bWVudHMgc2hvdWxkIG1hdGNoIHRob3NlIHBhc3NlZCB0
byBgRW1iZXIuYWRkTGlzdGVuZXJgLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlTGlz
dGVuZXIKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0gb2Jq
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUKLSAgICAgICAgICAgICAg
QHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IHRhcmdldE9yTWV0aG9kIEEgdGFyZ2V0IG9iamVjdCBv
ciBhIGZ1bmN0aW9uCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRo
b2QgQSBmdW5jdGlvbiBvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBg
dGFyZ2V0YAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIo
b2JqLCBldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgICAgICAgICBFbWJlci5hc3Nl
cnQoIllvdSBtdXN0IHBhc3MgYXQgbGVhc3QgYW4gb2JqZWN0IGFuZCBldmVudCBuYW1lIHRvIEVt
YmVyLnJlbW92ZUxpc3RlbmVyIiwgISFvYmogJiYgISFldmVudE5hbWUpOwotCi0gICAgICAgICAg
ICBpZiAoIW1ldGhvZCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdGFyZ2V0KSB7Ci0gICAgICAg
ICAgICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgIHRhcmdldCA9IG51bGw7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lcih0
YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgICAgIHZhciBhY3Rpb25zID0gYWN0aW9uc0Zv
cihvYmosIGV2ZW50TmFtZSksCi0gICAgICAgICAgICAgICAgYWN0aW9uSW5kZXggPSBpbmRleE9m
KGFjdGlvbnMsIHRhcmdldCwgbWV0aG9kKTsKLQotICAgICAgICAgICAgICAgIC8vIGFjdGlvbiBk
b2Vzbid0IGV4aXN0LCBnaXZlIHVwIHNpbGVudGx5Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlv
bkluZGV4ID09PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgYWN0aW9ucy5zcGxpY2UoYWN0aW9uSW5kZXgsIDMp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmouZGlkUmVt
b3ZlTGlzdGVuZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqLmRpZFJlbW92ZUxpc3RlbmVy
KGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICAgICAgICAgIF9yZW1v
dmVMaXN0ZW5lcih0YXJnZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHZhciBtZXRhID0gb2JqW01FVEFfS0VZXSwKLSAgICAgICAgICAgICAgICBhY3Rp
b25zID0gbWV0YSAmJiBtZXRhLmxpc3RlbmVycyAmJiBtZXRhLmxpc3RlbmVyc1tldmVudE5hbWVd
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IGFjdGlvbnMubGVuZ3RoIC0gMzsgaSA+PSAwOyBpIC09IDMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgX3JlbW92ZUxpc3RlbmVyKGFjdGlvbnNbaV0sIGFjdGlvbnNbaSArIDFdKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgU3VzcGVuZCBsaXN0ZW5lciBkdXJpbmcgY2FsbGJhY2suCi0KLSAgICAgICAgICAg
ICAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50IGxp
c3RlbmVyCi0gICAgICAgICAgICAgIHdoZW4gaXQgaXMgdGFraW5nIGFuIGFjdGlvbiB0aGF0IHdv
dWxkIGNhdXNlIHRoZSBldmVudCwgZS5nLgotICAgICAgICAgICAgICBhbiBvYmplY3QgbWlnaHQg
c3VzcGVuZCBpdHMgcHJvcGVydHkgY2hhbmdlIGxpc3RlbmVyIHdoaWxlIGl0IGlzCi0gICAgICAg
ICAgICAgIHNldHRpbmcgdGhhdCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHN1
c3BlbmRMaXN0ZW5lcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0KLSAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZ30gZXZlbnROYW1lCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9u
fSB0YXJnZXRPck1ldGhvZCBBIHRhcmdldCBvYmplY3Qgb3IgYSBmdW5jdGlvbgotICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIEEgZnVuY3Rpb24gb3IgdGhlIG5h
bWUgb2YgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gYHRhcmdldGAKLSAgICAgICAgICAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHN1c3BlbmRMaXN0ZW5lcihvYmosIGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIGNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2Yg
dGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAgICAgICAgICAg
ICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhY3Rp
b25zID0gYWN0aW9uc0ZvcihvYmosIGV2ZW50TmFtZSksCi0gICAgICAgICAgICBhY3Rpb25JbmRl
eCA9IGluZGV4T2YoYWN0aW9ucywgdGFyZ2V0LCBtZXRob2QpOwotCi0gICAgICAgICAgICBpZiAo
YWN0aW9uSW5kZXggIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uc1thY3Rpb25JbmRl
eCArIDJdIHw9IFNVU1BFTkRFRDsgLy8gbWFyayB0aGUgYWN0aW9uIGFzIHN1c3BlbmRlZAotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiB0cnlhYmxlKCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHRhcmdldCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmdW5jdGlvbiBmaW5hbGl6ZXIoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlv
bkluZGV4ICE9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rpb25zW2FjdGlvbkluZGV4
ICsgMl0gJj0gflNVU1BFTkRFRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiB0cnlGaW5hbGx5KHRyeWFibGUsIGZpbmFsaXplcik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5zdXNwZW5kTGlzdGVuZXIgPSBzdXNwZW5kTGlz
dGVuZXI7IC8qKgotICAgICAgICAgICAgICBTdXNwZW5kcyBtdWx0aXBsZSBsaXN0ZW5lcnMgZHVy
aW5nIGEgY2FsbGJhY2suCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBzdXNwZW5kTGlzdGVuZXJz
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICBAcGFyYW0gb2JqCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGV2ZW50
TmFtZSBBcnJheSBvZiBldmVudCBuYW1lcwotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdHxG
dW5jdGlvbn0gdGFyZ2V0T3JNZXRob2QgQSB0YXJnZXQgb2JqZWN0IG9yIGEgZnVuY3Rpb24KLSAg
ICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBBIGZ1bmN0aW9uIG9y
IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGB0YXJnZXRgCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBzdXNwZW5kTGlzdGVuZXJzKG9iaiwgZXZlbnROYW1lcywgdGFyZ2V0LCBtZXRo
b2QsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZCAmJiAnZnVuY3Rpb24nID09
PSB0eXBlb2YgdGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAg
ICAgICAgICAgICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZhciBzdXNwZW5kZWRBY3Rpb25zID0gW10sCi0gICAgICAgICAgICBhY3Rpb25zTGlzdCA9IFtd
LAotICAgICAgICAgICAgZXZlbnROYW1lLCBhY3Rpb25zLCBpLCBsOwotCi0gICAgICAgICAgICBm
b3IgKGkgPSAwLCBsID0gZXZlbnROYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWVzW2ldOwotICAgICAgICAgICAgICAgIGFjdGlv
bnMgPSBhY3Rpb25zRm9yKG9iaiwgZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICB2YXIgYWN0
aW9uSW5kZXggPSBpbmRleE9mKGFjdGlvbnMsIHRhcmdldCwgbWV0aG9kKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChhY3Rpb25JbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0
aW9uc1thY3Rpb25JbmRleCArIDJdIHw9IFNVU1BFTkRFRDsKLSAgICAgICAgICAgICAgICAgICAg
c3VzcGVuZGVkQWN0aW9ucy5wdXNoKGFjdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
YWN0aW9uc0xpc3QucHVzaChhY3Rpb25zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHRyeWFibGUoKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNhbGxiYWNrLmNhbGwodGFyZ2V0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZnVuY3Rpb24gZmluYWxpemVyKCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gc3VzcGVuZGVkQWN0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGFjdGlvbkluZGV4ID0gc3VzcGVuZGVkQWN0aW9uc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uc0xpc3RbaV1bYWN0aW9uSW5kZXggKyAyXSAmPSB+U1VTUEVOREVE
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHRyeUZpbmFsbHkodHJ5YWJsZSwgZmluYWxpemVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLnN1c3BlbmRMaXN0ZW5lcnMgPSBzdXNwZW5kTGlzdGVuZXJzOyAvKioKLSAgICAg
ICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBjdXJyZW50bHkgd2F0Y2hlZCBldmVudHMKLQotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHdhdGNoZWRFdmVudHMK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0gb2JqCi0gICAg
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB3YXRjaGVkRXZlbnRzKG9iaikgewotICAgICAg
ICAgICAgdmFyIGxpc3RlbmVycyA9IG9ialtNRVRBX0tFWV0ubGlzdGVuZXJzLCByZXQgPSBbXTsK
LQotICAgICAgICAgICAgaWYgKGxpc3RlbmVycykgewotICAgICAgICAgICAgICAgIGZvciAodmFy
IGV2ZW50TmFtZSBpbiBsaXN0ZW5lcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3Rl
bmVyc1tldmVudE5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChldmVu
dE5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLndhdGNoZWRFdmVudHMgPSB3YXRjaGVkRXZlbnRzOyAvKioKLSAgICAgICAgICAg
ICAgU2VuZCBhbiBldmVudC4gVGhlIGV4ZWN1dGlvbiBvZiBzdXNwZW5kZWQgbGlzdGVuZXJzCi0g
ICAgICAgICAgICAgIGlzIHNraXBwZWQsIGFuZCBvbmNlIGxpc3RlbmVycyBhcmUgcmVtb3ZlZC4g
QSBsaXN0ZW5lciB3aXRob3V0Ci0gICAgICAgICAgICAgIGEgdGFyZ2V0IGlzIGV4ZWN1dGVkIG9u
IHRoZSBwYXNzZWQgb2JqZWN0LiBJZiBhbiBhcnJheSBvZiBhY3Rpb25zCi0gICAgICAgICAgICAg
IGlzIG5vdCBwYXNzZWQsIHRoZSBhY3Rpb25zIHN0b3JlZCBvbiB0aGUgcGFzc2VkIG9iamVjdCBh
cmUgaW52b2tlZC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHNlbmRFdmVudAotICAgICAgICAg
ICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZQotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBw
YXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZWFjaCBsaXN0ZW5lci4KLSAgICAgICAgICAg
ICAgQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBPcHRpb25hbCBhcnJheSBvZiBhY3Rpb25zIChsaXN0
ZW5lcnMpLgotICAgICAgICAgICAgICBAcmV0dXJuIHRydWUKLSAgICAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIHNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgcGFyYW1zLCBhY3Rpb25zKSB7
Ci0gICAgICAgICAgICAvLyBmaXJzdCBnaXZlIG9iamVjdCBhIGNoYW5jZSB0byBoYW5kbGUgaXQK
LSAgICAgICAgICAgIGlmIChvYmogIT09IEVtYmVyICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBv
Ymouc2VuZEV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgb2JqLnNlbmRFdmVudChldmVudE5hbWUs
IHBhcmFtcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYWN0aW9ucykgewot
ICAgICAgICAgICAgICAgIHZhciBtZXRhID0gb2JqW01FVEFfS0VZXTsKLSAgICAgICAgICAgICAg
ICBhY3Rpb25zID0gbWV0YSAmJiBtZXRhLmxpc3RlbmVycyAmJiBtZXRhLmxpc3RlbmVyc1tldmVu
dE5hbWVdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWFjdGlvbnMpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSBhY3Rpb25zLmxlbmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAzKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gbG9vcGluZyBpbiByZXZlcnNlIGZvciBvbmNlIGxpc3RlbmVycwotICAgICAgICAg
ICAgICAgIHZhciB0YXJnZXQgPSBhY3Rpb25zW2ldLCBtZXRob2QgPSBhY3Rpb25zW2kgKyAxXSwg
ZmxhZ3MgPSBhY3Rpb25zW2kgKyAyXTsKLSAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZCkgewot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGZsYWdzICYgU1VTUEVOREVEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBP
TkNFKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG9iaiwgZXZlbnROYW1l
LCB0YXJnZXQsIG1ldGhvZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghdGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IG9iajsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgbWV0aG9k
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGx5U3RyKHRhcmdldCwgbWV0aG9kLCBwYXJhbXMpOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0oKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5
KHRhcmdldCwgbWV0aG9kLCBwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwodGFyZ2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uc2VuZEV2ZW50
ID0gc2VuZEV2ZW50OyAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAg
QG1ldGhvZCBoYXNMaXN0ZW5lcnMKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAg
ICAgICBAcGFyYW0gb2JqCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUK
LSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGhhc0xpc3RlbmVycyhvYmosIGV2ZW50
TmFtZSkgewotICAgICAgICAgICAgdmFyIG1ldGEgPSBvYmpbTUVUQV9LRVldLAotICAgICAgICAg
ICAgYWN0aW9ucyA9IG1ldGEgJiYgbWV0YS5saXN0ZW5lcnMgJiYgbWV0YS5saXN0ZW5lcnNbZXZl
bnROYW1lXTsKLQotICAgICAgICAgICAgcmV0dXJuICEhKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5n
dGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uaGFzTGlzdGVuZXJzID0gaGFz
TGlzdGVuZXJzOyAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQG1l
dGhvZCBsaXN0ZW5lcnNGb3IKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAg
ICBAcGFyYW0gb2JqCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUKLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGxpc3RlbmVyc0ZvcihvYmosIGV2ZW50TmFt
ZSkgewotICAgICAgICAgICAgdmFyIHJldCA9IFtdOwotICAgICAgICAgICAgdmFyIG1ldGEgPSBv
YmpbTUVUQV9LRVldLAotICAgICAgICAgICAgYWN0aW9ucyA9IG1ldGEgJiYgbWV0YS5saXN0ZW5l
cnMgJiYgbWV0YS5saXN0ZW5lcnNbZXZlbnROYW1lXTsKLQotICAgICAgICAgICAgaWYgKCFhY3Rp
b25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhY3Rpb25zLmxlbmd0aDsgaSA8IGw7IGkgKz0g
MykgewotICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhY3Rpb25zW2ldLAotICAgICAgICAg
ICAgICAgIG1ldGhvZCA9IGFjdGlvbnNbaSArIDFdOwotICAgICAgICAgICAgICAgIHJldC5wdXNo
KFt0YXJnZXQsIG1ldGhvZF0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
cmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubGlzdGVuZXJzRm9yID0gbGlz
dGVuZXJzRm9yOyAvKioKLSAgICAgICAgICAgICAgRGVmaW5lIGEgcHJvcGVydHkgYXMgYSBmdW5j
dGlvbiB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCB3aGVuCi0gICAgICAgICAgICAgIGEgc3BlY2lm
aWVkIGV2ZW50IG9yIGV2ZW50cyBhcmUgdHJpZ2dlcmVkLgotCi0KLSAgICAgICAgICAgICAgYGBg
IGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEpvYiA9IEVtYmVyLk9iamVjdC5leHRlbmQo
ewotICAgICAgICAgICAgICAgIGxvZ0NvbXBsZXRlZDogRW1iZXIub24oJ2NvbXBsZXRlZCcsIGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0pvYiBjb21wbGV0ZWQh
Jyk7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgdmFyIGpvYiA9IEpvYi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICBFbWJlci5zZW5kRXZl
bnQoam9iLCAnY29tcGxldGVkJyk7IC8vIExvZ3MgJ0pvYiBjb21wbGV0ZWQhJwotICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2Qgb24KLSAgICAgICAgICAgICAgQGZvciBF
bWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lcyoKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYwotICAgICAgICAgICAgICBAcmV0dXJuIGZ1bmMK
LSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9uKCkgewotICAgICAgICAgICAgdmFy
IGZ1bmMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAtMSlbMF0sCi0gICAgICAgICAgICBldmVu
dHMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSk7Ci0gICAgICAgICAgICBmdW5jLl9f
ZW1iZXJfbGlzdGVuc19fID0gZXZlbnRzOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmM7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5vbiA9IG9uOwotICAgICAgICBfX2V4cG9ydHNf
Xy5yZW1vdmVMaXN0ZW5lciA9IHJlbW92ZUxpc3RlbmVyOwotICAgIH0pOwotICAgIGRlZmluZSgi
ZW1iZXItbWV0YWwvZXhwYW5kX3Byb3BlcnRpZXMiLAotICAgIFsiZW1iZXItbWV0YWwvZXJyb3Ii
LCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kx
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kyX18uZm9y
RWFjaDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAot
ICAgICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBCUkFDRV9FWFBBTlNJT04gPSAvXigoPzpb
XlwuXSpcLikqKVx7KC4qKVx9JC87Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEV4cGFu
ZHMgYHBhdHRlcm5gLCBpbnZva2luZyBgY2FsbGJhY2tgIGZvciBlYWNoIGV4cGFuc2lvbi4KLQot
ICAgICAgICAgICAgICBUaGUgb25seSBwYXR0ZXJuIHN1cHBvcnRlZCBpcyBicmFjZS1leHBhbnNp
b24sIGFueXRoaW5nIGVsc2Ugd2lsbCBiZSBwYXNzZWQKLSAgICAgICAgICAgICAgb25jZSB0byBg
Y2FsbGJhY2tgIGRpcmVjdGx5LiBCcmFjZSBleHBhbnNpb24gY2FuIG9ubHkgYXBwZWFyIGF0IHRo
ZSBlbmQgb2YgYQotICAgICAgICAgICAgICBwYXR0ZXJuLCBmb3IgYW4gZXhhbXBsZSBzZWUgdGhl
IGxhc3QgY2FsbCBiZWxvdy4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0gICAgICAgICAgICAg
IGBgYGpzCi0gICAgICAgICAgICAgIGZ1bmN0aW9uIGVjaG8oYXJnKXsgY29uc29sZS5sb2coYXJn
KTsgfQotCi0gICAgICAgICAgICAgIEVtYmVyLmV4cGFuZFByb3BlcnRpZXMoJ2Zvby5iYXInLCBl
Y2hvKTsgICAgICAgIC8vPT4gJ2Zvby5iYXInCi0gICAgICAgICAgICAgIEVtYmVyLmV4cGFuZFBy
b3BlcnRpZXMoJ3tmb28sYmFyfScsIGVjaG8pOyAgICAgIC8vPT4gJ2ZvbycsICdiYXInCi0gICAg
ICAgICAgICAgIEVtYmVyLmV4cGFuZFByb3BlcnRpZXMoJ2Zvby57YmFyLGJhen0nLCBlY2hvKTsg
IC8vPT4gJ2Zvby5iYXInLCAnZm9vLmJheicKLSAgICAgICAgICAgICAgRW1iZXIuZXhwYW5kUHJv
cGVydGllcygne2ZvbyxiYXJ9LmJheicsIGVjaG8pOyAgLy89PiAne2ZvbyxiYXJ9LmJheicKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZAotICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICBAcGFyYW0ge3N0cmluZ30gcGF0dGVybiBUaGUgcHJvcGVy
dHkgcGF0dGVybiB0byBleHBhbmQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IGNh
bGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UuICBJdCBpcyBpbnZva2VkIG9uY2UgcGVyCi0g
ICAgICAgICAgICAgIGV4cGFuc2lvbiwgYW5kIGlzIHBhc3NlZCB0aGUgZXhwYW5zaW9uLgotICAg
ICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24g
ZXhwYW5kUHJvcGVydGllcyhwYXR0ZXJuLCBjYWxsYmFjaykgewotICAgICAgICAgICAgdmFyIG1h
dGNoLCBwcmVmaXgsIGxpc3Q7Ci0KLSAgICAgICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJyAn
KSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoJ0JyYWNlIGV4
cGFuZGVkIHByb3BlcnRpZXMgY2Fubm90IGNvbnRhaW4gc3BhY2VzLCAnICsgCi0gICAgICAgICAg
ICAgICAgJ2UuZy4gYHVzZXIue2ZpcnN0TmFtZSwgbGFzdE5hbWV9YCBzaG91bGQgYmUgYHVzZXIu
e2ZpcnN0TmFtZSxsYXN0TmFtZX1gJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChtYXRjaCA9IEJSQUNFX0VYUEFOU0lPTi5leGVjKHBhdHRlcm4pKSB7Ci0gICAgICAgICAgICAg
ICAgcHJlZml4ID0gbWF0Y2hbMV07Ci0gICAgICAgICAgICAgICAgbGlzdCA9IG1hdGNoWzJdOwot
Ci0gICAgICAgICAgICAgICAgZm9yRWFjaChsaXN0LnNwbGl0KCcsJyksIGZ1bmN0aW9uIChzdWZm
aXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socHJlZml4ICsgc3VmZml4KTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y2FsbGJhY2socGF0dGVybik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLW1ldGFsL2dldF9wcm9wZXJ0aWVzIiwKLSAgICBbImVtYmVyLW1ldGFs
L3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5n
ZXQ7Ci0gICAgICAgIHZhciB0eXBlT2YgPSBfX2RlcGVuZGVuY3kyX18udHlwZU9mOwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBUbyBnZXQgbXVsdGlwbGUgcHJvcGVydGllcyBhdCBvbmNl
LCBjYWxsIGBFbWJlci5nZXRQcm9wZXJ0aWVzYAotICAgICAgICAgICAgICB3aXRoIGFuIG9iamVj
dCBmb2xsb3dlZCBieSBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBhbiBhcnJheToKLQotICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmdldFByb3BlcnRpZXMocmVj
b3JkLCAnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3ppcENvZGUnKTsKLSAgICAgICAgICAgICAg
Ly8geyBmaXJzdE5hbWU6ICdKb2huJywgbGFzdE5hbWU6ICdEb2UnLCB6aXBDb2RlOiAnMTAwMTEn
IH0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgaXMgZXF1aXZhbGVudCB0bzoK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmdldFBy
b3BlcnRpZXMocmVjb3JkLCBbJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd6aXBDb2RlJ10pOwot
ICAgICAgICAgICAgICAvLyB7IGZpcnN0TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0RvZScsIHpp
cENvZGU6ICcxMDAxMScgfQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0
aG9kIGdldFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZy4uLnxBcnJheX0gbGlzdCBvZiBrZXlzIHRvIGdldAotICAgICAgICAg
ICAgICBAcmV0dXJuIHtIYXNofQotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGdldFByb3BlcnRpZXMob2JqKSB7Ci0gICAgICAgICAgICB2
YXIgcmV0ID0ge30sCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gYXJndW1lbnRzLAotICAg
ICAgICAgICAgaSA9IDE7Ci0KLSAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAy
ICYmIHR5cGVPZihhcmd1bWVudHNbMV0pID09PSAnYXJyYXknKSB7Ci0gICAgICAgICAgICAgICAg
aSA9IDA7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IGFyZ3VtZW50c1sxXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodmFyIGxlbiA9IHByb3BlcnR5TmFtZXMubGVu
Z3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICByZXRbcHJvcGVydHlOYW1lc1tp
XV0gPSBnZXQob2JqLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1l
dGFsL2luc3RydW1lbnRhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1l
dGFsL3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IHRyeUNhdGNoRmluYWxseSA9IF9fZGVwZW5kZW5jeTJfXy50cnlDYXRjaEZpbmFsbHk7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoZSBFbWJlciBJbnN0cnVt
ZW50YXRpb24gbW9kdWxlIGlzCi0gICAgICAgICAgICAgIHRvIHByb3ZpZGUgZWZmaWNpZW50LCBn
ZW5lcmFsLXB1cnBvc2UgaW5zdHJ1bWVudGF0aW9uCi0gICAgICAgICAgICAgIGZvciBFbWJlci4K
LQotICAgICAgICAgICAgICBTdWJzY3JpYmUgdG8gYSBsaXN0ZW5lciBieSB1c2luZyBgRW1iZXIu
c3Vic2NyaWJlYDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IEVtYmVyLnN1YnNjcmliZSgicmVuZGVyIiwgewotICAgICAgICAgICAgICAgIGJlZm9yZTogZnVu
Y3Rpb24obmFtZSwgdGltZXN0YW1wLCBwYXlsb2FkKSB7Ci0KLSAgICAgICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIHRpbWVzdGFtcCwgcGF5bG9h
ZCkgewotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91IHJldHVybiBhIHZhbHVlIGZyb20gdGhlIGBi
ZWZvcmVgIGNhbGxiYWNrLCB0aGF0IHNhbWUKLSAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSBw
YXNzZWQgYXMgYSBmb3VydGggcGFyYW1ldGVyIHRvIHRoZSBgYWZ0ZXJgCi0gICAgICAgICAgICAg
IGNhbGxiYWNrLgotCi0gICAgICAgICAgICAgIEluc3RydW1lbnQgYSBibG9jayBvZiBjb2RlIGJ5
IHVzaW5nIGBFbWJlci5pbnN0cnVtZW50YDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIEVtYmVyLmluc3RydW1lbnQoInJlbmRlci5oYW5kbGViYXJzIiwgcGF5
bG9hZCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGxvZ2ljCi0g
ICAgICAgICAgICAgIH0sIGJpbmRpbmcpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBFdmVudCBuYW1lcyBwYXNzZWQgdG8gYEVtYmVyLmluc3RydW1lbnRgIGFyZSBuYW1lc3Bh
Y2VkCi0gICAgICAgICAgICAgIGJ5IHBlcmlvZHMsIGZyb20gbW9yZSBnZW5lcmFsIHRvIG1vcmUg
c3BlY2lmaWMuIFN1YnNjcmliZXJzCi0gICAgICAgICAgICAgIGNhbiBsaXN0ZW4gZm9yIGV2ZW50
cyBieSB3aGF0ZXZlciBsZXZlbCBvZiBncmFudWxhcml0eSB0aGV5Ci0gICAgICAgICAgICAgIGFy
ZSBpbnRlcmVzdGVkIGluLgotCi0gICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0
aGUgZXZlbnQgaXMgYHJlbmRlci5oYW5kbGViYXJzYCwKLSAgICAgICAgICAgICAgYW5kIHRoZSBz
dWJzY3JpYmVyIGxpc3RlbmVkIGZvciBhbGwgZXZlbnRzIGJlZ2lubmluZyB3aXRoCi0gICAgICAg
ICAgICAgIGByZW5kZXJgLiBJdCB3b3VsZCByZWNlaXZlIGNhbGxiYWNrcyBmb3IgZXZlbnRzIG5h
bWVkCi0gICAgICAgICAgICAgIGByZW5kZXJgLCBgcmVuZGVyLmhhbmRsZWJhcnNgLCBgcmVuZGVy
LmNvbnRhaW5lcmAsIG9yCi0gICAgICAgICAgICAgIGV2ZW4gYHJlbmRlci5oYW5kbGViYXJzLmxh
eW91dGAuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEluc3RydW1lbnRhdGlvbgotICAgICAgICAg
ICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAg
ICovCi0gICAgICAgIHZhciBzdWJzY3JpYmVycyA9IFtdLCBjYWNoZSA9IHt9OwotCi0gICAgICAg
IHZhciBwb3B1bGF0ZUxpc3RlbmVycyA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgIHZh
ciBsaXN0ZW5lcnMgPSBbXSwgc3Vic2NyaWJlcjsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBzdWJzY3JpYmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBzdWJzY3JpYmVyID0gc3Vic2NyaWJlcnNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN1YnNj
cmliZXIucmVnZXgudGVzdChuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMu
cHVzaChzdWJzY3JpYmVyLm9iamVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBjYWNoZVtuYW1lXSA9IGxpc3RlbmVyczsKLSAgICAgICAgICAgIHJl
dHVybiBsaXN0ZW5lcnM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIHRpbWUgPSAoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICB2YXIgcGVyZiA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2lu
ZG93ID8gd2luZG93LnBlcmZvcm1hbmNlIHx8IHt9Ci0gICAgICAgICAgICA6IHt9OwotICAgICAg
ICAgICAgdmFyIGZuID0gcGVyZi5ub3cgfHwgcGVyZi5tb3pOb3cgfHwgcGVyZi53ZWJraXROb3cg
fHwgcGVyZi5tc05vdyB8fCBwZXJmLm9Ob3c7Ci0gICAgICAgICAgICAvLyBmbi5iaW5kIHdpbGwg
YmUgYXZhaWxhYmxlIGluIGFsbCB0aGUgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHRoZSBhZHZhbmNl
ZCB3aW5kb3cucGVyZm9ybWFuY2UuLi4gOy0pCi0gICAgICAgICAgICByZXR1cm4gZm4gPyBmbi5i
aW5kKHBlcmYpIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICsgbmV3IERh
dGUoKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0pKCk7Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIE5vdGlmaWVzIGV2ZW50J3Mgc3Vic2NyaWJlcnMsIGNhbGxzIGBiZWZvcmVgIGFu
ZCBgYWZ0ZXJgIGhvb2tzLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgaW5zdHJ1bWVudAotICAg
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyLkluc3RydW1lbnRhdGlvbgotCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBbbmFtZV0gTmFtZXNwYWNlZCBldmVudCBuYW1lLgotICAgICAg
ICAgICAgICBAcGFyYW0ge09iamVjdH0gcGF5bG9hZAotICAgICAgICAgICAgICBAcGFyYW0ge0Z1
bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IHlvdSdyZSBpbnN0cnVtZW50aW5nLgotICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gYmluZGluZyBDb250ZXh0IHRoYXQgaW5zdHJ1bWVu
dCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aC4KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIGluc3RydW1lbnQobmFtZSwgcGF5bG9hZCwgY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAgICAg
ICAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYWNoZVtuYW1lXSwgdGltZU5hbWUsIHJldDsKLQotICAg
ICAgICAgICAgLy8gRVM2VE9ETzogRG9jcy4gV2hhdCBpcyB0aGlzPwotICAgICAgICAgICAgaWYg
KEVtYmVyLlNUUlVDVFVSRURfUFJPRklMRSkgewotICAgICAgICAgICAgICAgIHRpbWVOYW1lID0g
bmFtZSArICI6ICIgKyBwYXlsb2FkLm9iamVjdDsKLSAgICAgICAgICAgICAgICBjb25zb2xlLnRp
bWUodGltZU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxpc3RlbmVy
cykgewotICAgICAgICAgICAgICAgIGxpc3RlbmVycyA9IHBvcHVsYXRlTGlzdGVuZXJzKG5hbWUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0g
MCkgewotICAgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrLmNhbGwoYmluZGluZyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKEVtYmVyLlNUUlVDVFVSRURfUFJPRklMRSkgewotICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLnRpbWVFbmQodGltZU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgYmVmb3JlVmFsdWVzID0gW10sIGxpc3RlbmVyLCBpLCBsOwotCi0gICAgICAgICAgICBmdW5j
dGlvbiB0cnlhYmxlKCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBsaXN0ZW5l
cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyID0g
bGlzdGVuZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICBiZWZvcmVWYWx1ZXNbaV0gPSBsaXN0
ZW5lci5iZWZvcmUobmFtZSwgdGltZSgpLCBwYXlsb2FkKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChiaW5kaW5nKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gY2F0Y2hhYmxlKGUpIHsKLSAgICAgICAgICAg
ICAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCB7fTsKLSAgICAgICAgICAgICAgICBwYXlsb2FkLmV4
Y2VwdGlvbiA9IGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmFs
aXplcigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVy
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuYWZ0ZXIobmFtZSwgdGltZSgpLCBw
YXlsb2FkLCBiZWZvcmVWYWx1ZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChFbWJlci5TVFJVQ1RVUkVEX1BST0ZJTEUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS50aW1lRW5kKHRpbWVOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnlDYXRjaEZpbmFsbHkodHJ5YWJsZSwgY2F0
Y2hhYmxlLCBmaW5hbGl6ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uaW5z
dHJ1bWVudCA9IGluc3RydW1lbnQ7IC8qKgotICAgICAgICAgICAgICBTdWJzY3JpYmVzIHRvIGEg
cGFydGljdWxhciBldmVudCBvciBpbnN0cnVtZW50ZWQgYmxvY2sgb2YgY29kZS4KLQotICAgICAg
ICAgICAgICBAbWV0aG9kIHN1YnNjcmliZQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVy
Lkluc3RydW1lbnRhdGlvbgotCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBbcGF0dGVy
bl0gTmFtZXNwYWNlZCBldmVudCBuYW1lLgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
W29iamVjdF0gQmVmb3JlIGFuZCBBZnRlciBob29rcy4KLQotICAgICAgICAgICAgICBAcmV0dXJu
IHtTdWJzY3JpYmVyfQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gc3Vic2NyaWJl
KHBhdHRlcm4sIG9iamVjdCkgewotICAgICAgICAgICAgdmFyIHBhdGhzID0gcGF0dGVybi5zcGxp
dCgiLiIpLCBwYXRoLCByZWdleCA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IHBhdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIHBhdGggPSBw
YXRoc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gIioiKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZ2V4LnB1c2goIlteXFwuXSoiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICByZWdleC5wdXNoKHBhdGgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVnZXggPSByZWdleC5qb2luKCJcXC4i
KTsKLSAgICAgICAgICAgIHJlZ2V4ID0gcmVnZXggKyAiKFxcLi4qKT8iOwotCi0gICAgICAgICAg
ICB2YXIgc3Vic2NyaWJlciA9IHsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLAot
ICAgICAgICAgICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCJeIiArIHJlZ2V4ICsgIiQiKSwKLSAg
ICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTsKLSAgICAgICAgICAgIGNhY2hlID0ge307
Ci0KLSAgICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVyOwotICAgICAgICB9Ci0KLSAgICAgICAg
X19leHBvcnRzX18uc3Vic2NyaWJlID0gc3Vic2NyaWJlOyAvKioKLSAgICAgICAgICAgICAgVW5z
dWJzY3JpYmVzIGZyb20gYSBwYXJ0aWN1bGFyIGV2ZW50IG9yIGluc3RydW1lbnRlZCBibG9jayBv
ZiBjb2RlLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgdW5zdWJzY3JpYmUKLSAgICAgICAgICAg
ICAgQG5hbWVzcGFjZSBFbWJlci5JbnN0cnVtZW50YXRpb24KLQotICAgICAgICAgICAgICBAcGFy
YW0ge09iamVjdH0gW3N1YnNjcmliZXJdCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biB1bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXg7Ci0KLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vic2NyaWJlcnMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXJzW2ldID09PSBzdWJzY3JpYmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShpbmRleCwgMSk7
Ci0gICAgICAgICAgICBjYWNoZSA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRz
X18udW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTsgLyoqCi0gICAgICAgICAgICAgIFJlc2V0cyBg
RW1iZXIuSW5zdHJ1bWVudGF0aW9uYCBieSBmbHVzaGluZyBsaXN0IG9mIHN1YnNjcmliZXJzLgot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgcmVzZXQKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBF
bWJlci5JbnN0cnVtZW50YXRpb24KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHJl
c2V0KCkgewotICAgICAgICAgICAgc3Vic2NyaWJlcnMgPSBbXTsKLSAgICAgICAgICAgIGNhY2hl
ID0ge307Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZXNldCA9IHJlc2V0Owot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvaXNfYmxhbmsiLAotICAgIFsiZW1iZXIt
bWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9pc19lbXB0eSIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIGRlcHJlY2F0ZUZ1bmMKLSAgICAgICAgdmFyIGlzRW1w
dHkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgQSB2YWx1ZSBpcyBibGFuayBpZiBpdCBpcyBlbXB0eSBvciBhIHdoaXRlc3BhY2Ugc3Ry
aW5nLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIu
aXNCbGFuaygpOyAgICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAgIEVtYmVyLmlz
QmxhbmsobnVsbCk7ICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc0Js
YW5rKHVuZGVmaW5lZCk7ICAgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAgRW1iZXIuaXNCbGFu
aygnJyk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAgIEVtYmVyLmlzQmxhbmso
W10pOyAgICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc0JsYW5rKCdc
blx0Jyk7ICAgICAgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAgRW1iZXIuaXNCbGFuaygnICAn
KTsgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAgIEVtYmVyLmlzQmxhbmsoe30pOyAg
ICAgICAgICAgICAgLy8gZmFsc2UKLSAgICAgICAgICAgICAgRW1iZXIuaXNCbGFuaygnXG5cdCBI
ZWxsbycpOyAgICAvLyBmYWxzZQotICAgICAgICAgICAgICBFbWJlci5pc0JsYW5rKCdIZWxsbyB3
b3JsZCcpOyAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVyLmlzQmxhbmsoWzEsMiwzXSk7
ICAgICAgICAgLy8gZmFsc2UKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1l
dGhvZCBpc0JsYW5rCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IG9iaiBWYWx1ZSB0byB0ZXN0Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0Jv
b2xlYW59Ci0gICAgICAgICAgICAgIEBzaW5jZSAxLjUuMAotICAgICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gaXNCbGFuayhvYmopIHsKLSAg
ICAgICAgICAgIHJldHVybiBpc0VtcHR5KG9iaikgfHwgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcn
ICYmIG9iai5tYXRjaCgvXFMvKSA9PT0gbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLW1ldGFsL2lzX2VtcHR5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL2lzX25vbmUiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIGRl
cHJlY2F0ZUZ1bmMKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAg
ICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgVmVyaWZpZXMgdGhhdCBhIHZhbHVlIGlzIGBudWxsYCBvciBhbiBl
bXB0eSBzdHJpbmcsIGVtcHR5IGFycmF5LAotICAgICAgICAgICAgICBvciBlbXB0eSBmdW5jdGlv
bi4KLQotICAgICAgICAgICAgICBDb25zdHJhaW5zIHRoZSBydWxlcyBvbiBgRW1iZXIuaXNOb25l
YCBieSByZXR1cm5pbmcgZmFsc2UgZm9yIGVtcHR5Ci0gICAgICAgICAgICAgIHN0cmluZyBhbmQg
ZW1wdHkgYXJyYXlzLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgRW1iZXIuaXNFbXB0eSgpOyAgICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAg
IEVtYmVyLmlzRW1wdHkobnVsbCk7ICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBF
bWJlci5pc0VtcHR5KHVuZGVmaW5lZCk7ICAgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAgRW1i
ZXIuaXNFbXB0eSgnJyk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAgICAgIEVtYmVy
LmlzRW1wdHkoW10pOyAgICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5p
c0VtcHR5KCdBZGFtIEhhd2tpbnMnKTsgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVyLmlz
RW1wdHkoWzAsMSwyXSk7ICAgICAgICAgLy8gZmFsc2UKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBpc0VtcHR5Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBWYWx1ZSB0byB0ZXN0Ci0gICAgICAgICAg
ICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBp
c0VtcHR5KG9iaikgewotICAgICAgICAgICAgcmV0dXJuIGlzTm9uZShvYmopIHx8IChvYmoubGVu
Z3RoID09PSAwICYmIHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicpIHx8ICh0eXBlb2Ygb2JqID09
PSAnb2JqZWN0JyAmJiBnZXQob2JqLCAnbGVuZ3RoJykgPT09IDApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFyIGVtcHR5ID0gRW1iZXIuZGVwcmVjYXRlRnVuYygiRW1iZXIuZW1wdHkgaXMgZGVw
cmVjYXRlZC4gUGxlYXNlIHVzZSBFbWJlci5pc0VtcHR5IGluc3RlYWQuIiwgaXNFbXB0eSk7Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmVtcHR5ID0gZW1wdHk7Ci0gICAgICAgIF9fZXhwb3J0c19fWyJk
ZWZhdWx0Il0gPSBpc0VtcHR5OwotICAgICAgICBfX2V4cG9ydHNfXy5pc0VtcHR5ID0gaXNFbXB0
eTsKLSAgICAgICAgX19leHBvcnRzX18uZW1wdHkgPSBlbXB0eTsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLW1ldGFsL2lzX25vbmUiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1si
ZGVmYXVsdCJdOwotICAgICAgICAvLyBkZXByZWNhdGVGdW5jCi0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIHZhbHVlIGlzIG51bGwgb3IgdW5k
ZWZpbmVkLiBUaGlzIGF2b2lkcyBlcnJvcnMKLSAgICAgICAgICAgICAgZnJvbSBKU0xpbnQgY29t
cGxhaW5pbmcgYWJvdXQgdXNlIG9mID09LCB3aGljaCBjYW4gYmUgdGVjaG5pY2FsbHkKLSAgICAg
ICAgICAgICAgY29uZnVzaW5nLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgRW1iZXIuaXNOb25lKCk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgICAgICAg
ICAgIEVtYmVyLmlzTm9uZShudWxsKTsgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICBF
bWJlci5pc05vbmUodW5kZWZpbmVkKTsgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAgRW1iZXIu
aXNOb25lKCcnKTsgICAgICAgICAgICAvLyBmYWxzZQotICAgICAgICAgICAgICBFbWJlci5pc05v
bmUoW10pOyAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVyLmlzTm9uZShm
dW5jdGlvbigpIHt9KTsgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIEBtZXRob2QgaXNOb25lCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IG9iaiBWYWx1ZSB0byB0ZXN0Ci0gICAgICAgICAgICAgIEByZXR1
cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBpc05vbmUob2Jq
KSB7Ci0gICAgICAgICAgICByZXR1cm4gb2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVk
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5vbmUgPSBFbWJlci5kZXByZWNhdGVGdW5jKCJF
bWJlci5ub25lIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgRW1iZXIuaXNOb25lIGluc3RlYWQu
IiwgaXNOb25lKTsKLSAgICAgICAgX19leHBvcnRzX18ubm9uZSA9IG5vbmU7Ci0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBpc05vbmU7Ci0gICAgICAgIF9fZXhwb3J0c19fLmlzTm9u
ZSA9IGlzTm9uZTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL2xpYnJhcmllcyIs
Ci0gICAgWyJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgLy8gUHJvdmlkZXMgYSB3YXkgdG8gcmVnaXN0ZXIgbGlicmFyeSB2ZXJz
aW9ucyB3aXRoIGVtYmVyLgotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTFfXy5m
b3JFYWNoOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5kZW5jeTFfXy5pbmRleE9mOwot
Ci0gICAgICAgIHZhciBsaWJyYXJpZXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBf
bGlicmFyaWVzID0gW107Ci0gICAgICAgICAgICB2YXIgY29yZUxpYkluZGV4ID0gMDsKLQotICAg
ICAgICAgICAgdmFyIGdldExpYnJhcnkgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfbGlicmFyaWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChfbGlicmFyaWVzW2ldLm5hbWUgPT09IG5hbWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBfbGlicmFyaWVzW2ldOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgX2xp
YnJhcmllcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIHZlcnNpb24pIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWdldExpYnJhcnkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgX2xpYnJh
cmllcy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIF9saWJy
YXJpZXMucmVnaXN0ZXJDb3JlTGlicmFyeSA9IGZ1bmN0aW9uKG5hbWUsIHZlcnNpb24pIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWdldExpYnJhcnkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgX2xpYnJhcmllcy5zcGxpY2UoY29yZUxpYkluZGV4KyssIDAsIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB2
ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIF9saWJyYXJpZXMuZGVSZWdpc3RlciA9IGZ1bmN0aW9u
KG5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGliID0gZ2V0TGlicmFyeShuYW1lKTsKLSAg
ICAgICAgICAgICAgICBpZiAobGliKSAKLSAgICAgICAgICAgICAgICAgICAgX2xpYnJhcmllcy5z
cGxpY2UoaW5kZXhPZihfbGlicmFyaWVzLCBsaWIpLCAxKTsKLSAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgIF9saWJyYXJpZXMuZWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgIGZvckVhY2goX2xpYnJhcmllcywgZnVuY3Rpb24obGliKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKGxpYi5uYW1lLCBsaWIudmVyc2lvbik7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXR1cm4gX2xpYnJhcmllczsK
LSAgICAgICAgfSgpOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBsaWJyYXJp
ZXM7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1tZXRhbC9sb2dnZXIiLAotICAgIFsiZW1i
ZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9lcnJvciIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Ml9fWyJk
ZWZhdWx0Il07Ci0KLSAgICAgICAgZnVuY3Rpb24gY29uc29sZU1ldGhvZChuYW1lKSB7Ci0gICAg
ICAgICAgICB2YXIgY29uc29sZU9iaiwgbG9nVG9Db25zb2xlOwotICAgICAgICAgICAgaWYgKEVt
YmVyLmltcG9ydHMuY29uc29sZSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGVPYmogPSBFbWJl
ci5pbXBvcnRzLmNvbnNvbGU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25zb2xl
ICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGNvbnNvbGVPYmogPSBjb25zb2xl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbWV0aG9kID0gdHlwZW9mIGNvbnNv
bGVPYmogPT09ICdvYmplY3QnID8gY29uc29sZU9ialtuYW1lXSA6IG51bGw7Ci0KLSAgICAgICAg
ICAgIGlmIChtZXRob2QpIHsKLSAgICAgICAgICAgICAgICAvLyBPbGRlciBJRSBkb2Vzbid0IHN1
cHBvcnQgYXBwbHksIGJ1dCBDaHJvbWUgbmVlZHMgaXQKLSAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIG1ldGhvZC5hcHBseSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgICAgICBs
b2dUb0NvbnNvbGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhv
ZC5hcHBseShjb25zb2xlT2JqLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgICAgICAgICBsb2dUb0NvbnNvbGUuZGlzcGxheU5hbWUgPSAnY29uc29sZS4n
ICsgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ1RvQ29uc29sZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlw
ZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnLCAnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1l
dGhvZChtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhc3NlcnRQb2x5
ZmlsbCh0ZXN0LCBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBpZiAoIXRlc3QpIHsKLSAgICAgICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHByZXNlcnZl
IHRoZSBzdGFjawotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiYXNz
ZXJ0aW9uIGZhaWxlZDogIiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfSwg
MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIEluc2lkZSBFbWJlci1NZXRhbCwgc2ltcGx5IHVzZXMgdGhl
IG1ldGhvZHMgZnJvbSBgaW1wb3J0cy5jb25zb2xlYC4KLSAgICAgICAgICAgICAgT3ZlcnJpZGUg
dGhpcyB0byBwcm92aWRlIG1vcmUgcm9idXN0IGxvZ2dpbmcgZnVuY3Rpb25hbGl0eS4KLQotICAg
ICAgICAgICAgICBAY2xhc3MgTG9nZ2VyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIK
LSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSB7Ci0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBMb2dzIHRoZSBhcmd1bWVudHMgdG8gdGhl
IGNvbnNvbGUuCi0gICAgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFzIG1hbnkgYXJndW1l
bnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyIHdpdGggYSBz
cGFjZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBmb28gPSAxOwotICAgICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIubG9n
KCdsb2cgdmFsdWUgb2YgZm9vOicsIGZvbyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vICJsb2cg
dmFsdWUgb2YgZm9vOiAxIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGxvZwotICAgICAg
ICAgICAgICAgICAgIEBmb3IgRW1iZXIuTG9nZ2VyCi0gICAgICAgICAgICAgICAgICAgQHBhcmFt
IHsqfSBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBsb2c6IGNv
bnNvbGVNZXRob2QoJ2xvZycpIHx8IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgIFByaW50cyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zb2xlIHdpdGggYSB3
YXJuaW5nIGljb24uCi0gICAgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFzIG1hbnkgYXJn
dW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyIHdpdGgg
YSBzcGFjZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLkxvZ2dlci53YXJuKCdTb21ldGhpbmcgaGFwcGVuZWQhJyk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vICJTb21ldGhpbmcgaGFwcGVuZWQhIiB3aWxsIGJlIHByaW50ZWQg
dG8gdGhlIGNvbnNvbGUgd2l0aCBhIHdhcm5pbmcgaWNvbi4KLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHdhcm4KLSAgICAgICAgICAgICAgICAg
ICBAZm9yIEVtYmVyLkxvZ2dlcgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gYXJndW1l
bnRzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2FybjogY29uc29sZU1ldGhv
ZCgnd2FybicpIHx8IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgIFByaW50cyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3IgaWNv
biwgcmVkIHRleHQgYW5kIGEgc3RhY2sgdHJhY2UuCi0gICAgICAgICAgICAgICAgICAgWW91IGNh
biBwYXNzIGFzIG1hbnkgYXJndW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9p
bmVkIHRvZ2V0aGVyIHdpdGggYSBzcGFjZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5lcnJvcignRGFuZ2VyISBE
YW5nZXIhJyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vICJEYW5nZXIhIERhbmdlciEiIHdpbGwg
YmUgcHJpbnRlZCB0byB0aGUgY29uc29sZSBpbiByZWQgdGV4dC4KLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGVycm9yCi0gICAgICAgICAgICAg
ICAgICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IGFy
Z3VtZW50cwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGVycm9yOiBjb25zb2xl
TWV0aG9kKCdlcnJvcicpIHx8IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgIExvZ3MgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29uc29sZS4KLSAgICAgICAgICAg
ICAgICAgICBZb3UgY2FuIHBhc3MgYXMgbWFueSBhcmd1bWVudHMgYXMgeW91IHdhbnQgYW5kIHRo
ZXkgd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIgd2l0aCBhIHNwYWNlLgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZvbyA9IDE7Ci0g
ICAgICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5pbmZvKCdsb2cgdmFsdWUgb2YgZm9vOics
IGZvbyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vICJsb2cgdmFsdWUgb2YgZm9vOiAxIiB3aWxs
IGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGluZm8KLSAgICAgICAgICAgICAgICAgICBAZm9yIEVt
YmVyLkxvZ2dlcgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gYXJndW1lbnRzCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5mbzogY29uc29sZU1ldGhvZCgnaW5mbycp
IHx8IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIExvZ3Mg
dGhlIGFyZ3VtZW50cyB0byB0aGUgY29uc29sZSBpbiBibHVlIHRleHQuCi0gICAgICAgICAgICAg
ICAgICAgWW91IGNhbiBwYXNzIGFzIG1hbnkgYXJndW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5
IHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyIHdpdGggYSBzcGFjZS4KLQotICAgICAgICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmb28gPSAxOwotICAg
ICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIuZGVidWcoJ2xvZyB2YWx1ZSBvZiBmb286Jywg
Zm9vKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gImxvZyB2YWx1ZSBvZiBmb286IDEiIHdpbGwg
YmUgcHJpbnRlZCB0byB0aGUgY29uc29sZQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgZGVidWcKLSAgICAgICAgICAgICAgICAgICBAZm9yIEVt
YmVyLkxvZ2dlcgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gYXJndW1lbnRzCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVidWc6IGNvbnNvbGVNZXRob2QoJ2RlYnVn
JykgfHwgY29uc29sZU1ldGhvZCgnaW5mbycpIHx8IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBwYXNzZWQgaW50byBgRW1iZXIuTG9n
Z2VyLmFzc2VydGAgaXMgbm90IHRydXRoeSBpdCB3aWxsIHRocm93IGFuIGVycm9yIHdpdGggYSBz
dGFjayB0cmFjZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5hc3NlcnQodHJ1ZSk7IC8vIHVuZGVmaW5lZAotICAg
ICAgICAgICAgICAgICAgICBFbWJlci5Mb2dnZXIuYXNzZXJ0KHRydWUgPT09IGZhbHNlKTsgLy8g
VGhyb3dzIGFuIEFzc2VydGlvbiBmYWlsZWQgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhc3NlcnQKLSAgICAgICAgICAgICAgICAg
ICBAZm9yIEVtYmVyLkxvZ2dlcgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0g
Ym9vbCBWYWx1ZSB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXNz
ZXJ0OiBjb25zb2xlTWV0aG9kKCdhc3NlcnQnKSB8fCBhc3NlcnRQb2x5ZmlsbAotICAgICAgICB9
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvbWFwIiwKLSAgICBbImVtYmVyLW1l
dGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9hcnJh
eSIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8q
KgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8KLQotICAg
ICAgICAvKgotICAgICAgICAgICAgICBKYXZhU2NyaXB0IChiZWZvcmUgRVM2KSBkb2VzIG5vdCBo
YXZlIGEgTWFwIGltcGxlbWVudGF0aW9uLiBPYmplY3RzLAotICAgICAgICAgICAgICB3aGljaCBh
cmUgb2Z0ZW4gdXNlZCBhcyBkaWN0aW9uYXJpZXMsIG1heSBvbmx5IGhhdmUgU3RyaW5ncyBhcyBr
ZXlzLgotCi0gICAgICAgICAgICAgIEJlY2F1c2UgRW1iZXIgaGFzIGEgd2F5IHRvIGdldCBhIHVu
aXF1ZSBpZGVudGlmaWVyIGZvciBldmVyeSBvYmplY3QKLSAgICAgICAgICAgICAgdmlhIGBFbWJl
ci5ndWlkRm9yYCwgd2UgY2FuIGltcGxlbWVudCBhIHBlcmZvcm1hbnQgTWFwIHdpdGggYXJiaXRy
YXJ5Ci0gICAgICAgICAgICAgIGtleXMuIEJlY2F1c2UgaXQgaXMgY29tbW9ubHkgdXNlZCBpbiBs
b3ctbGV2ZWwgYm9va2tlZXBpbmcsIE1hcCBpcwotICAgICAgICAgICAgICBpbXBsZW1lbnRlZCBh
cyBhIHB1cmUgSmF2YVNjcmlwdCBvYmplY3QgZm9yIHBlcmZvcm1hbmNlLgotCi0gICAgICAgICAg
ICAgIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgY3VycmVudCBpdGVyYXRpb24gb2Yg
dGhlIEVTNiBwcm9wb3NhbCBmb3IKLSAgICAgICAgICAgICAgbWFwcyAoaHR0cDovL3dpa2kuZWNt
YXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpzaW1wbGVfbWFwc19hbmRfc2V0cyksCi0g
ICAgICAgICAgICAgIHdpdGggdHdvIGV4Y2VwdGlvbnMuIEZpcnN0LCBiZWNhdXNlIHdlIG5lZWQg
b3VyIGltcGxlbWVudGF0aW9uIHRvIGJlIHBsZWFzYW50Ci0gICAgICAgICAgICAgIG9uIG9sZGVy
IGJyb3dzZXJzLCB3ZSBkbyBub3QgdXNlIHRoZSBgZGVsZXRlYCBuYW1lICh1c2luZyBgcmVtb3Zl
YCBpbnN0ZWFkKS4KLSAgICAgICAgICAgICAgU2Vjb25kLCBhcyB3ZSBkbyBub3QgaGF2ZSB0aGUg
bHV4dXJ5IG9mIGluLVZNIGl0ZXJhdGlvbiwgd2UgaW1wbGVtZW50IGEKLSAgICAgICAgICAgICAg
Zm9yRWFjaCBtZXRob2QgZm9yIGl0ZXJhdGlvbi4KLQotICAgICAgICAgICAgICBNYXAgaXMgbW9j
a2VkIG91dCB0byBsb29rIGxpa2UgYW4gRW1iZXIgb2JqZWN0LCBzbyB5b3UgY2FuIGRvCi0gICAg
ICAgICAgICAgIGBFbWJlci5NYXAuY3JlYXRlKClgIGZvciBzeW1tZXRyeSB3aXRoIG90aGVyIEVt
YmVyIGNsYXNzZXMuCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVu
ZGVuY3kxX18uc2V0OwotICAgICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTJfXy5ndWlk
Rm9yOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5kZW5jeTNfXy5pbmRleE9mOwotICAg
ICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5NF9fLmNyZWF0ZTsKLQotICAgICAgICBmdW5j
dGlvbiBjb3B5KG9iaikgewotICAgICAgICAgICAgdmFyIG91dHB1dCA9IHt9OwotCi0gICAgICAg
ICAgICBmb3IgKHZhciBwcm9wIGluIG9iaikgewotICAgICAgICAgICAgICAgIGlmIChvYmouaGFz
T3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0W3Byb3BdID0g
b2JqW3Byb3BdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG91dHB1dDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNvcHlNYXAo
b3JpZ2luYWwsIG5ld09iamVjdCkgewotICAgICAgICAgICAgdmFyIGtleXMgPSBvcmlnaW5hbC5r
ZXlzLmNvcHkoKSwKLSAgICAgICAgICAgIHZhbHVlcyA9IGNvcHkob3JpZ2luYWwudmFsdWVzKTsK
LQotICAgICAgICAgICAgbmV3T2JqZWN0LmtleXMgPSBrZXlzOwotICAgICAgICAgICAgbmV3T2Jq
ZWN0LnZhbHVlcyA9IHZhbHVlczsKLSAgICAgICAgICAgIG5ld09iamVjdC5sZW5ndGggPSBvcmln
aW5hbC5sZW5ndGg7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7Ci0gICAgICAgIH0K
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyB1c2VkIGludGVybmFs
bHkgYnkgRW1iZXIgYW5kIEVtYmVyIERhdGEuCi0gICAgICAgICAgICAgIFBsZWFzZSBkbyBub3Qg
dXNlIGl0IGF0IHRoaXMgdGltZS4gV2UgcGxhbiB0byBjbGVhbiBpdCB1cAotICAgICAgICAgICAg
ICBhbmQgYWRkIG1hbnkgdGVzdHMgc29vbi4KLQotICAgICAgICAgICAgICBAY2xhc3MgT3JkZXJl
ZFNldAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBjb25z
dHJ1Y3RvcgotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gT3JkZXJlZFNldCgpIHsKLSAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZQotICAgICAg
ICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk9yZGVyZWRTZXR9
Ci0gICAgICAgICAgICAqLwotICAgICAgICBPcmRlcmVkU2V0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgcmV0dXJuIG5ldyBPcmRlcmVkU2V0KCk7Ci0gICAgICAgIH07Ci0KLQot
ICAgICAgICBPcmRlcmVkU2V0LnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGNsZWFyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucHJlc2VuY2VT
ZXQgPSB7fTsKLSAgICAgICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZAotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0gb2JqCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgYWRkOiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1
aWRGb3Iob2JqKSwKLSAgICAgICAgICAgICAgICBwcmVzZW5jZVNldCA9IHRoaXMucHJlc2VuY2VT
ZXQsCi0gICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMubGlzdDsKLQotICAgICAgICAgICAgICAg
IGlmIChndWlkIGluIHByZXNlbmNlU2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcmVzZW5jZVNldFtndWlkXSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgbGlzdC5wdXNoKG9iaik7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmUKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJlbW92ZTogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGd1aWQg
PSBndWlkRm9yKG9iaiksCi0gICAgICAgICAgICAgICAgcHJlc2VuY2VTZXQgPSB0aGlzLnByZXNl
bmNlU2V0LAotICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmxpc3Q7Ci0KLSAgICAgICAgICAg
ICAgICBkZWxldGUgcHJlc2VuY2VTZXRbZ3VpZF07Ci0KLSAgICAgICAgICAgICAgICB2YXIgaW5k
ZXggPSBpbmRleE9mLmNhbGwobGlzdCwgb2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
PiAtMSkgewotICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgaXNFbXB0eQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtCb29sZWFufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzRW1wdHk6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QubGVuZ3RoID09PSAw
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgaGFzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBoYXM6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgICAgIHZhciBndWlkID0gZ3Vp
ZEZvcihvYmopLAotICAgICAgICAgICAgICAgIHByZXNlbmNlU2V0ID0gdGhpcy5wcmVzZW5jZVNl
dDsKLQotICAgICAgICAgICAgICAgIHJldHVybiBndWlkIGluIHByZXNlbmNlU2V0OwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
Zm9yRWFjaAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmbgotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0gc2VsZgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGZvckVhY2g6IGZ1bmN0aW9uKGZuLCBzZWxmKSB7Ci0gICAgICAgICAgICAgICAgLy8gYWxs
b3cgbXV0YXRpb24gZHVyaW5nIGl0ZXJhdGlvbgotICAgICAgICAgICAgICAgIHZhciBsaXN0ID0g
dGhpcy50b0FycmF5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGxp
c3QubGVuZ3RoOyBpIDwgajsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZuLmNhbGwoc2Vs
ZiwgbGlzdFtpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdG9BcnJheQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5s
aXN0LnNsaWNlKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBjb3B5Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLk9yZGVyZWRTZXR9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29weTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNldCA9IG5ldyBPcmRlcmVkU2V0KCk7
Ci0KLSAgICAgICAgICAgICAgICBzZXQucHJlc2VuY2VTZXQgPSBjb3B5KHRoaXMucHJlc2VuY2VT
ZXQpOwotICAgICAgICAgICAgICAgIHNldC5saXN0ID0gdGhpcy50b0FycmF5KCk7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBBIE1hcCBzdG9yZXMgdmFsdWVzIGluZGV4ZWQgYnkga2V5
cy4gVW5saWtlIEphdmFTY3JpcHQncwotICAgICAgICAgICAgICBkZWZhdWx0IE9iamVjdHMsIHRo
ZSBrZXlzIG9mIGEgTWFwIGNhbiBiZSBhbnkgSmF2YVNjcmlwdAotICAgICAgICAgICAgICBvYmpl
Y3QuCi0KLSAgICAgICAgICAgICAgSW50ZXJuYWxseSwgYSBNYXAgaGFzIHR3byBkYXRhIHN0cnVj
dHVyZXM6Ci0KLSAgICAgICAgICAgICAgMS4gYGtleXNgOiBhbiBPcmRlcmVkU2V0IG9mIGFsbCBv
ZiB0aGUgZXhpc3Rpbmcga2V5cwotICAgICAgICAgICAgICAyLiBgdmFsdWVzYDogYSBKYXZhU2Ny
aXB0IE9iamVjdCBpbmRleGVkIGJ5IHRoZSBgRW1iZXIuZ3VpZEZvcihrZXkpYAotCi0gICAgICAg
ICAgICAgIFdoZW4gYSBrZXkvdmFsdWUgcGFpciBpcyBhZGRlZCBmb3IgdGhlIGZpcnN0IHRpbWUs
IHdlCi0gICAgICAgICAgICAgIGFkZCB0aGUga2V5IHRvIHRoZSBga2V5c2AgT3JkZXJlZFNldCwg
YW5kIGNyZWF0ZSBvcgotICAgICAgICAgICAgICByZXBsYWNlIGFuIGVudHJ5IGluIGB2YWx1ZXNg
LiBXaGVuIGFuIGVudHJ5IGlzIGRlbGV0ZWQsCi0gICAgICAgICAgICAgIHdlIGRlbGV0ZSBpdHMg
ZW50cnkgaW4gYGtleXNgIGFuZCBgdmFsdWVzYC4KLQotICAgICAgICAgICAgICBAY2xhc3MgTWFw
Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgICAgICAgQGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBNYXAoKSB7Ci0gICAgICAgICAgICB0aGlzLmtleXMgPSBPcmRlcmVkU2V0LmNyZWF0ZSgp
OwotICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIEVt
YmVyLk1hcCA9IE1hcDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1ldGhvZCBjcmVh
dGUKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgKi8KLSAgICAgICAgTWFwLmNy
ZWF0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAoKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICBNYXAucHJvdG90eXBlID0gewotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgcHJvcGVydHkgd2lsbCBjaGFuZ2UgYXMgdGhlIG51bWJlciBv
ZiBvYmplY3RzIGluIHRoZSBtYXAgY2hhbmdlcy4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgbGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIG51bWJlcgotICAgICAgICAg
ICAgICAgICAgICBAZGVmYXVsdCAwCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
bGVuZ3RoOiAwLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0cmll
dmUgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleS4KLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGdldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IGtleQot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHsqfSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRo
IHRoZSBrZXksIG9yIGB1bmRlZmluZWRgCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gdGhp
cy52YWx1ZXMsCi0gICAgICAgICAgICAgICAgZ3VpZCA9IGd1aWRGb3Ioa2V5KTsKLQotICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZXNbZ3VpZF07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyBhIHZhbHVlIHRvIHRoZSBtYXAuIElm
IGEgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXkgaGFzIGFscmVhZHkgYmVlbgotICAgICAgICAgICAg
ICAgICAgICBwcm92aWRlZCwgdGhlIG5ldyB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIG9sZCB2YWx1
ZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldAotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0geyp9IGtleQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IHZhbHVlCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsCi0gICAgICAgICAgICAg
ICAgdmFsdWVzID0gdGhpcy52YWx1ZXMsCi0gICAgICAgICAgICAgICAgZ3VpZCA9IGd1aWRGb3Io
a2V5KTsKLQotICAgICAgICAgICAgICAgIGtleXMuYWRkKGtleSk7Ci0gICAgICAgICAgICAgICAg
dmFsdWVzW2d1aWRdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdsZW5ndGgn
LCBrZXlzLmxpc3QubGVuZ3RoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGEgdmFsdWUgZnJvbSB0aGUgbWFwIGZvciBhbiBh
c3NvY2lhdGVkIGtleS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZQotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IGtleQotICAgICAgICAgICAgICAgICAgICBAcmV0
dXJuIHtCb29sZWFufSB0cnVlIGlmIGFuIGl0ZW0gd2FzIHJlbW92ZWQsIGZhbHNlIG90aGVyd2lz
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5
KSB7Ci0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIEVTNiAiZGVsZXRlIiBiZWNhdXNlIGl0
IHdpbGwgYmUgYW5ub3lpbmcKLSAgICAgICAgICAgICAgICAvLyB0byB1c2UgaW4gYnJvd3NlcnMg
dGhhdCBhcmUgbm90IEVTNiBmcmllbmRseTsKLSAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRo
aXMua2V5cywKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnZhbHVlcywKLSAgICAgICAg
ICAgICAgICBndWlkID0gZ3VpZEZvcihrZXkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHZhbHVl
cy5oYXNPd25Qcm9wZXJ0eShndWlkKSkgewotICAgICAgICAgICAgICAgICAgICBrZXlzLnJlbW92
ZShrZXkpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVzW2d1aWRdOwotICAgICAg
ICAgICAgICAgICAgICBzZXQodGhpcywgJ2xlbmd0aCcsIGtleXMubGlzdC5sZW5ndGgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENoZWNr
IHdoZXRoZXIgYSBrZXkgaXMgcHJlc2VudC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGhhcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9IGtleQotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBpdGVtIHdhcyBwcmVzZW50LCBmYWxz
ZSBvdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoYXM6IGZ1bmN0
aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLnZhbHVlcywKLSAg
ICAgICAgICAgICAgICBndWlkID0gZ3VpZEZvcihrZXkpOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShndWlkKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJdGVyYXRlIG92ZXIgYWxsIHRoZSBrZXlz
IGFuZCB2YWx1ZXMuIENhbGxzIHRoZSBmdW5jdGlvbiBvbmNlCi0gICAgICAgICAgICAgICAgICAg
IGZvciBlYWNoIGtleSwgcGFzc2luZyBpbiB0aGUga2V5IGFuZCB2YWx1ZSwgaW4gdGhhdCBvcmRl
ci4KLQotICAgICAgICAgICAgICAgICAgICBUaGUga2V5cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBp
dGVyYXRlZCBvdmVyIGluIGluc2VydGlvbiBvcmRlci4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGZvckVhY2gKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2Fs
bGJhY2sKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsqfSBzZWxmIGlmIHBhc3NlZCwgdGhl
IGB0aGlzYCB2YWx1ZSBpbnNpZGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2su
IEJ5IGRlZmF1bHQsIGB0aGlzYCBpcyB0aGUgbWFwLgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKGNhbGxiYWNrLCBzZWxmKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMsCi0gICAgICAgICAgICAgICAgdmFsdWVzID0gdGhp
cy52YWx1ZXM7Ci0KLSAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihrZXkpOwotICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjay5jYWxsKHNlbGYsIGtleSwgdmFsdWVzW2d1aWRdKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBAbWV0aG9kIGNvcHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
RW1iZXIuTWFwfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvcHk6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb3B5TWFwKHRoaXMsIG5ldyBNYXAoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEBjbGFzcyBNYXBXaXRoRGVmYXVsdAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0g
ICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLk1hcAotICAgICAgICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAgICAgICAgICAgICAgQHBhcmFtIFtvcHRpb25z
XQotICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gW29wdGlvbnMuZGVmYXVsdFZhbHVlXQotICAg
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gTWFwV2l0aERlZmF1bHQob3B0aW9ucykgewot
ICAgICAgICAgICAgTWFwLmNhbGwodGhpcyk7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1
ZSA9IG9wdGlvbnMuZGVmYXVsdFZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgIEBtZXRob2QgY3JlYXRlCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAg
ICAgICAgQHBhcmFtIFtvcHRpb25zXQotICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gW29wdGlv
bnMuZGVmYXVsdFZhbHVlXQotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5NYXBXaXRoRGVm
YXVsdHxFbWJlci5NYXB9IElmIG9wdGlvbnMgYXJlIHBhc3NlZCwgcmV0dXJucwotICAgICAgICAg
ICAgICAgIGBFbWJlci5NYXBXaXRoRGVmYXVsdGAgb3RoZXJ3aXNlIHJldHVybnMgYEVtYmVyLk1h
cGAKLSAgICAgICAgICAgICovCi0gICAgICAgIE1hcFdpdGhEZWZhdWx0LmNyZWF0ZSA9IGZ1bmN0
aW9uKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIGlmIChvcHRpb25zKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBNYXBXaXRoRGVmYXVsdChvcHRpb25zKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLQotICAgICAgICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUgPSBjcmVhdGUoTWFw
LnByb3RvdHlwZSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJldHJpZXZlIHRoZSB2
YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXkuCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBnZXQKLSAgICAgICAgICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgICAgICAgICAgQHJldHVy
biB7Kn0gdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LCBvciB0aGUgZGVmYXVsdCB2
YWx1ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgTWFwV2l0aERlZmF1bHQucHJvdG90eXBlLmdl
dCA9IGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5oYXMo
a2V5KTsKLQotICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIE1hcC5wcm90b3R5cGUuZ2V0LmNhbGwodGhpcywga2V5KTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVl
KGtleSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2QgY29weQotICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5NYXBXaXRoRGVmYXVsdH0KLSAgICAgICAgICAgICovCi0gICAg
ICAgIE1hcFdpdGhEZWZhdWx0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gY29weU1hcCh0aGlzLCBuZXcgTWFwV2l0aERlZmF1bHQoewotICAgICAgICAg
ICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kZWZhdWx0VmFsdWUKLSAgICAgICAgICAgIH0pKTsK
LSAgICAgICAgfTsKLQotICAgICAgICBfX2V4cG9ydHNfXy5PcmRlcmVkU2V0ID0gT3JkZXJlZFNl
dDsKLSAgICAgICAgX19leHBvcnRzX18uTWFwID0gTWFwOwotICAgICAgICBfX2V4cG9ydHNfXy5N
YXBXaXRoRGVmYXVsdCA9IE1hcFdpdGhEZWZhdWx0OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItbWV0YWwvbWVyZ2UiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IE1lcmdlIHRoZSBjb250ZW50cyBvZiB0d28gb2JqZWN0cyB0b2dldGhlciBpbnRvIHRoZSBmaXJz
dCBvYmplY3QuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBF
bWJlci5tZXJnZSh7Zmlyc3Q6ICdUb20nfSwge2xhc3Q6ICdEYWxlJ30pOyAvLyB7Zmlyc3Q6ICdU
b20nLCBsYXN0OiAnRGFsZSd9Ci0gICAgICAgICAgICAgIHZhciBhID0ge2ZpcnN0OiAnWWVodWRh
J30sIGIgPSB7bGFzdDogJ0thdHonfTsKLSAgICAgICAgICAgICAgRW1iZXIubWVyZ2UoYSwgYik7
IC8vIGEgPT0ge2ZpcnN0OiAnWWVodWRhJywgbGFzdDogJ0thdHonfSwgYiA9PSB7bGFzdDogJ0th
dHonfQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIG1lcmdlCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9y
aWdpbmFsIFRoZSBvYmplY3QgdG8gbWVyZ2UgaW50bwotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gdXBkYXRlcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge09iamVjdH0KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0
c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBtZXJnZShvcmlnaW5hbCwgdXBkYXRlcykgewotICAg
ICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB1cGRhdGVzKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF1cGRhdGVzLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcmlnaW5hbFtwcm9w
XSA9IHVwZGF0ZXNbcHJvcF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb3Jp
Z2luYWw7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL21peGlu
IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXIt
bWV0YWwvYXJyYXkiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvdXRpbHMi
LCAiZW1iZXItbWV0YWwvZXhwYW5kX3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvcHJvcGVydGll
cyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9iaW5kaW5nIiwgImVtYmVy
LW1ldGFsL29ic2VydmVyIiwgImVtYmVyLW1ldGFsL2V2ZW50cyIsICJleHBvcnRzIl0sCi0gICAg
ZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNf
XywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19k
ZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRl
bmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAg
ICAgIEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFy
IEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIHdhcm4sIGFz
c2VydCwgd3JhcCwgZXQ7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgbWFwID0gX19kZXBlbmRlbmN5M19fLm1hcDsKLSAgICAgICAg
dmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3kzX18uaW5kZXhPZjsKLSAgICAgICAgdmFyIGZvckVh
Y2ggPSBfX2RlcGVuZGVuY3kzX18uZm9yRWFjaDsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVw
ZW5kZW5jeTRfXy5jcmVhdGU7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRlbmN5NV9f
Lmd1aWRGb3I7Ci0gICAgICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5NV9fLm1ldGE7Ci0gICAg
ICAgIHZhciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5jeTVfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFy
IHdyYXAgPSBfX2RlcGVuZGVuY3k1X18ud3JhcDsKLSAgICAgICAgdmFyIG1ha2VBcnJheSA9IF9f
ZGVwZW5kZW5jeTVfXy5tYWtlQXJyYXk7Ci0gICAgICAgIHZhciBhcHBseSA9IF9fZGVwZW5kZW5j
eTVfXy5hcHBseTsKLSAgICAgICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3k2
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERlc2NyaXB0b3IgPSBfX2RlcGVuZGVuY3k3X18u
RGVzY3JpcHRvcjsKLSAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5N19f
LmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgQ29tcHV0ZWRQcm9wZXJ0eSA9IF9fZGVwZW5k
ZW5jeThfXy5Db21wdXRlZFByb3BlcnR5OwotICAgICAgICB2YXIgQmluZGluZyA9IF9fZGVwZW5k
ZW5jeTlfXy5CaW5kaW5nOwotICAgICAgICB2YXIgYWRkT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kx
MF9fLmFkZE9ic2VydmVyOwotICAgICAgICB2YXIgcmVtb3ZlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVu
Y3kxMF9fLnJlbW92ZU9ic2VydmVyOwotICAgICAgICB2YXIgYWRkQmVmb3JlT2JzZXJ2ZXIgPSBf
X2RlcGVuZGVuY3kxMF9fLmFkZEJlZm9yZU9ic2VydmVyOwotICAgICAgICB2YXIgcmVtb3ZlQmVm
b3JlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMF9fLnJlbW92ZUJlZm9yZU9ic2VydmVyOwotICAg
ICAgICB2YXIgYWRkTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kxMV9fLmFkZExpc3RlbmVyOwotICAg
ICAgICB2YXIgcmVtb3ZlTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kxMV9fLnJlbW92ZUxpc3RlbmVy
OwotCi0gICAgICAgIHZhciBSRVFVSVJFRCwKLSAgICAgICAgYV9tYXAgPSBtYXAsCi0gICAgICAg
IGFfaW5kZXhPZiA9IGluZGV4T2YsCi0gICAgICAgIGFfZm9yRWFjaCA9IGZvckVhY2gsCi0gICAg
ICAgIGFfc2xpY2UgPSBbXS5zbGljZSwKLSAgICAgICAgb19jcmVhdGUgPSBjcmVhdGUsCi0gICAg
ICAgIG1ldGFGb3IgPSBtZXRhOwotCi0gICAgICAgIGZ1bmN0aW9uIHN1cGVyRnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICB2YXIgcmV0LCBmdW5jID0gdGhpcy5fX25leHRTdXBlcjsKLSAgICAgICAg
ICAgIGlmIChmdW5jKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fX25leHRTdXBlciA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXBwbHkodGhpcywgZnVuYywgYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9fbmV4dFN1cGVyID0gZnVuYzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtaXhp
bnNNZXRhKG9iaikgewotICAgICAgICAgICAgdmFyIG0gPSBtZXRhRm9yKG9iaiwgdHJ1ZSksIHJl
dCA9IG0ubWl4aW5zOwotICAgICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICBy
ZXQgPSBtLm1peGlucyA9IHt9OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbS5oYXNPd25Qcm9w
ZXJ0eSgnbWl4aW5zJykpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBtLm1peGlucyA9IG9fY3Jl
YXRlKHJldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5pdE1peGluKG1peGluLCBhcmdzKSB7Ci0gICAgICAg
ICAgICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICBtaXhp
bi5taXhpbnMgPSBhX21hcC5jYWxsKGFyZ3MsIGZ1bmN0aW9uKHgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHggaW5zdGFuY2VvZiBNaXhpbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBOb3RlOiBNYW51YWxseSBzZXR1cCBhIHByaW1pdGl2ZSBtaXhpbiBoZXJlLiBUaGlzIGlzIHRo
ZSBvbmx5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdheSB0byBhY3R1YWxseSBnZXQgYSBwcmlt
aXRpdmUgbWl4aW4uIFRoaXMgd2F5IG5vcm1hbCBjcmVhdGlvbgotICAgICAgICAgICAgICAgICAg
ICAvLyBvZiBtaXhpbnMgd2lsbCBnaXZlIHlvdSBjb21iaW5lZCBtaXhpbnMuLi4KLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG1peGluID0gbmV3IE1peGluKCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1peGluLnByb3BlcnRpZXMgPSB4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWl4aW47
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
bWl4aW47Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpc01ldGhvZChvYmopIHsKLSAg
ICAgICAgICAgIHJldHVybiAnZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqICYmCi0gICAgICAgICAg
ICBvYmouaXNNZXRob2QgIT09IGZhbHNlICYmCi0gICAgICAgICAgICBvYmogIT09IEJvb2xlYW4g
JiYgb2JqICE9PSBPYmplY3QgJiYgb2JqICE9PSBOdW1iZXIgJiYgb2JqICE9PSBBcnJheSAmJiBv
YmogIT09IERhdGUgJiYgb2JqICE9PSBTdHJpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
Q09OVElOVUUgPSB7fTsKLQotICAgICAgICBmdW5jdGlvbiBtaXhpblByb3BlcnRpZXMobWl4aW5z
TWV0YSwgbWl4aW4pIHsKLSAgICAgICAgICAgIHZhciBndWlkOwotCi0gICAgICAgICAgICBpZiAo
bWl4aW4gaW5zdGFuY2VvZiBNaXhpbikgewotICAgICAgICAgICAgICAgIGd1aWQgPSBndWlkRm9y
KG1peGluKTsKLSAgICAgICAgICAgICAgICBpZiAobWl4aW5zTWV0YVtndWlkXSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ09OVElOVUU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG1peGluc01ldGFbZ3VpZF0gPSBtaXhpbjsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWl4aW4ucHJvcGVydGllczsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1peGluOyAvLyBhcHBseSBhbm9ueW1vdXMgbWl4aW4gcHJvcGVydGllcwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29uY2F0ZW5hdGVkTWl4
aW5Qcm9wZXJ0aWVzKGNvbmNhdFByb3AsIHByb3BzLCB2YWx1ZXMsIGJhc2UpIHsKLSAgICAgICAg
ICAgIHZhciBjb25jYXRzOwotCi0gICAgICAgICAgICAvLyByZXNldCBiZWZvcmUgYWRkaW5nIGVh
Y2ggbmV3IG1peGluIHRvIHBpY2t1cCBjb25jYXRzIGZyb20gcHJldmlvdXMKLSAgICAgICAgICAg
IGNvbmNhdHMgPSB2YWx1ZXNbY29uY2F0UHJvcF0gfHwgYmFzZVtjb25jYXRQcm9wXTsKLSAgICAg
ICAgICAgIGlmIChwcm9wc1tjb25jYXRQcm9wXSkgewotICAgICAgICAgICAgICAgIGNvbmNhdHMg
PSBjb25jYXRzID8gY29uY2F0cy5jb25jYXQocHJvcHNbY29uY2F0UHJvcF0pIDogcHJvcHNbY29u
Y2F0UHJvcF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjb25jYXRzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZ2l2ZURlc2NyaXB0b3JTdXBlcihtZXRhLCBr
ZXksIHByb3BlcnR5LCB2YWx1ZXMsIGRlc2NzKSB7Ci0gICAgICAgICAgICB2YXIgc3VwZXJQcm9w
ZXJ0eTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBvdmVycmlkZSBtZXRo
b2RzLCBhbmQgZG8gbm90IGNhbGwgc3VwZXIgdG8gdGhlbQotICAgICAgICAgICAgaWYgKHZhbHVl
c1trZXldID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBvcmln
aW5hbCBkZXNjcmlwdG9yIGluIGEgcGFyZW50IG1peGluCi0gICAgICAgICAgICAgICAgc3VwZXJQ
cm9wZXJ0eSA9IGRlc2NzW2tleV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIHRoZSBvcmlnaW5hbCBkZXNjcmlwdG9yIGluIGEgcGFyZW50IG1peGlu
LCBmaW5kCi0gICAgICAgICAgICAvLyBpdCBvbiB0aGUgb3JpZ2luYWwgb2JqZWN0LgotICAgICAg
ICAgICAgc3VwZXJQcm9wZXJ0eSA9IHN1cGVyUHJvcGVydHkgfHwgbWV0YS5kZXNjc1trZXldOwot
Ci0gICAgICAgICAgICBpZiAoIXN1cGVyUHJvcGVydHkgfHwgIShzdXBlclByb3BlcnR5IGluc3Rh
bmNlb2YgQ29tcHV0ZWRQcm9wZXJ0eSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVy
dHk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNpbmNlIG11bHRpcGxlIG1peGlu
cyBtYXkgaW5oZXJpdCBmcm9tIHRoZSBzYW1lIHBhcmVudCwgd2UgbmVlZAotICAgICAgICAgICAg
Ly8gdG8gY2xvbmUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHNvIHRoYXQgb3RoZXIgbWl4aW5zIGRv
IG5vdCByZWNlaXZlCi0gICAgICAgICAgICAvLyB0aGUgd3JhcHBlZCB2ZXJzaW9uLgotICAgICAg
ICAgICAgcHJvcGVydHkgPSBvX2NyZWF0ZShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBwcm9wZXJ0
eS5mdW5jID0gd3JhcChwcm9wZXJ0eS5mdW5jLCBzdXBlclByb3BlcnR5LmZ1bmMpOwotCi0gICAg
ICAgICAgICByZXR1cm4gcHJvcGVydHk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBn
aXZlTWV0aG9kU3VwZXIob2JqLCBrZXksIG1ldGhvZCwgdmFsdWVzLCBkZXNjcykgewotICAgICAg
ICAgICAgdmFyIHN1cGVyTWV0aG9kOwotCi0gICAgICAgICAgICAvLyBNZXRob2RzIG92ZXJ3cml0
ZSBjb21wdXRlZCBwcm9wZXJ0aWVzLCBhbmQgZG8gbm90IGNhbGwgc3VwZXIgdG8gdGhlbS4KLSAg
ICAgICAgICAgIGlmIChkZXNjc1trZXldID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGaW5kIHRoZSBvcmlnaW5hbCBtZXRob2QgaW4gYSBwYXJlbnQgbWl4aW4KLSAgICAgICAg
ICAgICAgICBzdXBlck1ldGhvZCA9IHZhbHVlc1trZXldOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYSBwYXJl
bnQgbWl4aW4sIGZpbmQgaXQgaW4KLSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBvYmplY3QK
LSAgICAgICAgICAgIHN1cGVyTWV0aG9kID0gc3VwZXJNZXRob2QgfHwgb2JqW2tleV07Ci0KLSAg
ICAgICAgICAgIC8vIE9ubHkgd3JhcCB0aGUgbmV3IG1ldGhvZCBpZiB0aGUgb3JpZ2luYWwgbWV0
aG9kIHdhcyBhIGZ1bmN0aW9uCi0gICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9m
IHN1cGVyTWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHdyYXAobWV0aG9kLCBzdXBlck1ldGhvZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhcHBseUNvbmNhdGVuYXRlZFByb3BlcnRpZXMo
b2JqLCBrZXksIHZhbHVlLCB2YWx1ZXMpIHsKLSAgICAgICAgICAgIHZhciBiYXNlVmFsdWUgPSB2
YWx1ZXNba2V5XSB8fCBvYmpba2V5XTsKLQotICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZSkgewot
ICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgYmFzZVZhbHVlLmNvbmNh
dCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmNvbmNhdCh2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VBcnJheShiYXNlVmFsdWUpLmNvbmNhdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KHZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGFwcGx5TWVy
Z2VkUHJvcGVydGllcyhvYmosIGtleSwgdmFsdWUsIHZhbHVlcykgewotICAgICAgICAgICAgdmFy
IGJhc2VWYWx1ZSA9IHZhbHVlc1trZXldIHx8IG9ialtrZXldOwotCi0gICAgICAgICAgICBpZiAo
IWJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIG5ld0Jhc2UgPSBtZXJnZSh7fSwgYmFzZVZhbHVlKSwKLSAg
ICAgICAgICAgIGhhc0Z1bmN0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIHBy
b3AgaW4gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5
KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSB2YWx1ZVtwcm9wXTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNNZXRob2QocHJvcFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBUT0RPOiBzdXBwb3J0IGZvciBDb21wdXRlZCBQcm9wZXJ0aWVzLCBldGM/Ci0gICAgICAg
ICAgICAgICAgICAgIGhhc0Z1bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3
QmFzZVtwcm9wXSA9IGdpdmVNZXRob2RTdXBlcihvYmosIHByb3AsIHByb3BWYWx1ZSwgYmFzZVZh
bHVlLCB7fSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
bmV3QmFzZVtwcm9wXSA9IHByb3BWYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChoYXNGdW5jdGlvbikgewotICAgICAgICAgICAgICAgIG5l
d0Jhc2UuX3N1cGVyID0gc3VwZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG5ld0Jhc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhZGROb3Jt
YWxpemVkUHJvcGVydHkoYmFzZSwga2V5LCB2YWx1ZSwgbWV0YSwgZGVzY3MsIHZhbHVlcywgY29u
Y2F0cywgbWVyZ2luZ3MpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERlc2Ny
aXB0b3IpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFJFUVVJUkVEICYmIGRlc2Nz
W2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTlRJTlVFOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdyYXAgZGVzY3JpcHRvciBmdW5jdGlvbiB0
byBpbXBsZW1lbnQKLSAgICAgICAgICAgICAgICAvLyBfX25leHRTdXBlcigpIGlmIG5lZWRlZAot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5mdW5jKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gZ2l2ZURlc2NyaXB0b3JTdXBlcihtZXRhLCBrZXksIHZhbHVlLCB2YWx1ZXMsIGRlc2Nz
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZXNjc1trZXldID0gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICgoY29uY2F0cyAmJiBhX2luZGV4T2YuY2Fs
bChjb25jYXRzLCBrZXkpID49IDApIHx8Ci0gICAgICAgICAgICAgICAga2V5ID09PSAnY29uY2F0
ZW5hdGVkUHJvcGVydGllcycgfHwKLSAgICAgICAgICAgICAgICBrZXkgPT09ICdtZXJnZWRQcm9w
ZXJ0aWVzJykgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFwcGx5Q29uY2F0ZW5hdGVk
UHJvcGVydGllcyhiYXNlLCBrZXksIHZhbHVlLCB2YWx1ZXMpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKG1lcmdpbmdzICYmIGFfaW5kZXhPZi5jYWxsKG1lcmdpbmdzLCBrZXkpID49IDAp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXBwbHlNZXJnZWRQcm9wZXJ0aWVzKGJh
c2UsIGtleSwgdmFsdWUsIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc01l
dGhvZCh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnaXZlTWV0aG9kU3Vw
ZXIoYmFzZSwga2V5LCB2YWx1ZSwgdmFsdWVzLCBkZXNjcyk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgZGVzY3Nba2V5XSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICB2YWx1ZXNba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gbWVyZ2VNaXhpbnMobWl4aW5zLCBtLCBkZXNjcywgdmFsdWVzLCBiYXNlLCBr
ZXlzKSB7Ci0gICAgICAgICAgICB2YXIgbWl4aW4sIHByb3BzLCBrZXksIGNvbmNhdHMsIG1lcmdp
bmdzLCBtZXRhOwotCi0gICAgICAgICAgICBmdW5jdGlvbiByZW1vdmVLZXlzKGtleU5hbWUpIHsK
LSAgICAgICAgICAgICAgICBkZWxldGUgZGVzY3Nba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIHZhbHVlc1trZXlOYW1lXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBtaXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgbWl4aW4gPSBtaXhpbnNbaV07Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdF
eHBlY3RlZCBoYXNoIG9yIE1peGluIGluc3RhbmNlLCBnb3QgJyArIE9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmcuY2FsbChtaXhpbiksCi0gICAgICAgICAgICAgICAgdHlwZW9mIG1peGluID09PSAn
b2JqZWN0JyAmJiBtaXhpbiAhPT0gbnVsbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh
bGwobWl4aW4pICE9PSAnW29iamVjdCBBcnJheV0nKTsKLQotICAgICAgICAgICAgICAgIHByb3Bz
ID0gbWl4aW5Qcm9wZXJ0aWVzKG0sIG1peGluKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcHMg
PT09IENPTlRJTlVFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwcm9wcykgewotICAgICAgICAgICAgICAg
ICAgICBtZXRhID0gbWV0YUZvcihiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2Uu
d2lsbE1lcmdlTWl4aW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Uud2lsbE1lcmdl
TWl4aW4ocHJvcHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGNvbmNhdHMgPSBjb25jYXRlbmF0ZWRNaXhpblByb3BlcnRpZXMoJ2NvbmNhdGVuYXRlZFByb3Bl
cnRpZXMnLCBwcm9wcywgdmFsdWVzLCBiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgbWVyZ2lu
Z3MgPSBjb25jYXRlbmF0ZWRNaXhpblByb3BlcnRpZXMoJ21lcmdlZFByb3BlcnRpZXMnLCBwcm9w
cywgdmFsdWVzLCBiYXNlKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBwcm9w
cykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShr
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE5vcm1hbGl6ZWRQcm9wZXJ0eShiYXNlLCBrZXks
IHByb3BzW2tleV0sIG1ldGEsIGRlc2NzLCB2YWx1ZXMsIGNvbmNhdHMsIG1lcmdpbmdzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGNv
cHkgdG9TdHJpbmcoKSBiZWNhdXNlIHNvbWUgSlMgZW5naW5lcyBkbyBub3QgZW51bWVyYXRlIGl0
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcn
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS50b1N0cmluZyA9IHByb3BzLnRvU3Ry
aW5nOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICht
aXhpbi5taXhpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVyZ2VNaXhpbnMobWl4aW4ubWl4
aW5zLCBtLCBkZXNjcywgdmFsdWVzLCBiYXNlLCBrZXlzKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1peGluLl93aXRob3V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhX2ZvckVhY2gu
Y2FsbChtaXhpbi5fd2l0aG91dCwgcmVtb3ZlS2V5cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgSVNfQklORElORyA9IC9eLitCaW5kaW5nJC87Ci0KLSAgICAgICAgZnVuY3Rpb24gZGV0ZWN0
QmluZGluZyhvYmosIGtleSwgdmFsdWUsIG0pIHsKLSAgICAgICAgICAgIGlmIChJU19CSU5ESU5H
LnRlc3Qoa2V5KSkgewotICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG0uYmluZGluZ3M7
Ci0gICAgICAgICAgICAgICAgaWYgKCFiaW5kaW5ncykgewotICAgICAgICAgICAgICAgICAgICBi
aW5kaW5ncyA9IG0uYmluZGluZ3MgPSB7fTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFt
Lmhhc093blByb3BlcnR5KCdiaW5kaW5ncycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJpbmRp
bmdzID0gbS5iaW5kaW5ncyA9IG9fY3JlYXRlKG0uYmluZGluZ3MpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBiaW5kaW5nc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjb25uZWN0QmluZGluZ3Mob2JqLCBtKSB7
Ci0gICAgICAgICAgICAvLyBUT0RPIE1peGluLmFwcGx5KGluc3RhbmNlKSBzaG91bGQgZGlzY29u
bmVjdCBiaW5kaW5nIGlmIGV4aXN0cwotICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gbS5iaW5k
aW5ncywga2V5LCBiaW5kaW5nLCB0bzsKLSAgICAgICAgICAgIGlmIChiaW5kaW5ncykgewotICAg
ICAgICAgICAgICAgIGZvciAoa2V5IGluIGJpbmRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGJpbmRpbmcgPSBiaW5kaW5nc1trZXldOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGlu
ZykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSBrZXkuc2xpY2UoMCwgLTcpOyAvLyBz
dHJpcCBCaW5kaW5nIG9mZiBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kaW5n
IGluc3RhbmNlb2YgQmluZGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRp
bmcgPSBiaW5kaW5nLmNvcHkoKTsgLy8gY29weSBwcm90b3R5cGVzJyBpbnN0YW5jZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcudG8odG8pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaW5kaW5nIGlz
IHN0cmluZyBwYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZyA9IG5ldyBC
aW5kaW5nKHRvLCBiaW5kaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJpbmRpbmcuY29ubmVjdChvYmopOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqW2tleV0gPSBiaW5kaW5nOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgYXBwbGllZAotICAgICAgICAg
ICAgICAgIG0uYmluZGluZ3MgPSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGZpbmlzaFBhcnRpYWwob2JqLCBtKSB7Ci0gICAgICAgICAgICBjb25uZWN0
QmluZGluZ3Mob2JqLCBtIHx8IG1ldGFGb3Iob2JqKSk7Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZm9sbG93QWxpYXMob2JqLCBkZXNjLCBt
LCBkZXNjcywgdmFsdWVzKSB7Ci0gICAgICAgICAgICB2YXIgYWx0S2V5ID0gZGVzYy5tZXRob2RO
YW1lLCB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChkZXNjc1thbHRLZXldIHx8IHZhbHVlc1thbHRL
ZXldKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbYWx0S2V5XTsKLSAgICAgICAg
ICAgICAgICBkZXNjID0gZGVzY3NbYWx0S2V5XTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobS5k
ZXNjc1thbHRLZXldKSB7Ci0gICAgICAgICAgICAgICAgZGVzYyA9IG0uZGVzY3NbYWx0S2V5XTsK
LSAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgZGVzYyA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IG9ialthbHRLZXldOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVl
IAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU9i
c2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgb2JzZXJ2ZXJPckxpc3RlbmVyLCBwYXRoc0tl
eSwgdXBkYXRlTWV0aG9kKSB7Ci0gICAgICAgICAgICB2YXIgcGF0aHMgPSBvYnNlcnZlck9yTGlz
dGVuZXJbcGF0aHNLZXldOwotCi0gICAgICAgICAgICBpZiAocGF0aHMpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVNZXRob2Qob2JqLCBwYXRoc1tpXSwgbnVsbCwga2V5KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiByZXBsYWNlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9y
TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIHZhciBwcmV2ID0gb2JqW2tleV07Ci0KLSAgICAgICAg
ICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgcHJldikgewotICAgICAgICAgICAgICAgIHVw
ZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgcHJldiwgJ19fZW1iZXJfb2JzZXJ2
ZXNCZWZvcmVfXycsIHJlbW92ZUJlZm9yZU9ic2VydmVyKTsKLSAgICAgICAgICAgICAgICB1cGRh
dGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIHByZXYsICdfX2VtYmVyX29ic2VydmVz
X18nLCByZW1vdmVPYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgdXBkYXRlT2JzZXJ2ZXJzQW5k
TGlzdGVuZXJzKG9iaiwga2V5LCBwcmV2LCAnX19lbWJlcl9saXN0ZW5zX18nLCByZW1vdmVMaXN0
ZW5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0
eXBlb2Ygb2JzZXJ2ZXJPckxpc3RlbmVyKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlT2JzZXJ2
ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIsICdfX2VtYmVyX29i
c2VydmVzQmVmb3JlX18nLCBhZGRCZWZvcmVPYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgdXBk
YXRlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIsICdf
X2VtYmVyX29ic2VydmVzX18nLCBhZGRPYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgdXBkYXRl
T2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIsICdfX2Vt
YmVyX2xpc3RlbnNfXycsIGFkZExpc3RlbmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGFwcGx5TWl4aW4ob2JqLCBtaXhpbnMsIHBhcnRpYWwpIHsKLSAg
ICAgICAgICAgIHZhciBkZXNjcyA9IHt9LCB2YWx1ZXMgPSB7fSwgbSA9IG1ldGFGb3Iob2JqKSwK
LSAgICAgICAgICAgIGtleSwgdmFsdWUsIGRlc2MsIGtleXMgPSBbXTsKLQotICAgICAgICAgICAg
b2JqLl9zdXBlciA9IHN1cGVyRnVuY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIEdvIHRocm91Z2gg
YWxsIG1peGlucyBhbmQgaGFzaGVzIHBhc3NlZCBpbiwgYW5kOgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vICogSGFuZGxlIGNvbmNhdGVuYXRlZCBwcm9wZXJ0aWVzCi0gICAgICAgICAg
ICAvLyAqIEhhbmRsZSBtZXJnZWQgcHJvcGVydGllcwotICAgICAgICAgICAgLy8gKiBTZXQgdXAg
X3N1cGVyIHdyYXBwaW5nIGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgLy8gKiBTZXQgdXAgY29t
cHV0ZWQgcHJvcGVydHkgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgIC8vICogQ29weWluZyBgdG9T
dHJpbmdgIGluIGJyb2tlbiBicm93c2VycwotICAgICAgICAgICAgbWVyZ2VNaXhpbnMobWl4aW5z
LCBtaXhpbnNNZXRhKG9iaiksIGRlc2NzLCB2YWx1ZXMsIG9iaiwga2V5cyk7Ci0KLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBrZXkgPSBrZXlzW2ldOwotICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdj
b25zdHJ1Y3RvcicgfHwgIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGRlc2MgPSBkZXNjc1trZXldOwotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2tleV07
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVzYyA9PT0gUkVRVUlSRUQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
d2hpbGUgKGRlc2MgJiYgZGVzYyBpbnN0YW5jZW9mIEFsaWFzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBmb2xsb3dlZCA9IGZvbGxvd0FsaWFzKG9iaiwgZGVzYywgbSwgZGVzY3MsIHZhbHVl
cyk7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBmb2xsb3dlZC5kZXNjOwotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGZvbGxvd2VkLnZhbHVlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChkZXNjID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IHVuZGVm
aW5lZCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXBsYWNlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZGV0ZWN0QmluZGluZyhvYmosIGtleSwgdmFsdWUs
IG0pOwotICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCBkZXNjLCB2YWx1
ZSwgbSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcGFydGlhbCkgewotICAg
ICAgICAgICAgICAgIC8vIGRvbid0IGFwcGx5IHRvIHByb3RvdHlwZQotICAgICAgICAgICAgICAg
IGZpbmlzaFBhcnRpYWwob2JqLCBtKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIG9iajsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9k
IG1peGluCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9i
agotICAgICAgICAgICAgICBAcGFyYW0gbWl4aW5zKgotICAgICAgICAgICAgICBAcmV0dXJuIG9i
agotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWl4aW4ob2JqKSB7Ci0gICAgICAg
ICAgICB2YXIgYXJncyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAgICAgICAgICAg
YXBwbHlNaXhpbihvYmosIGFyZ3MsIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBvYmo7Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5taXhpbiA9IG1peGluOyAvKioKLSAgICAg
ICAgICAgICAgVGhlIGBFbWJlci5NaXhpbmAgY2xhc3MgYWxsb3dzIHlvdSB0byBjcmVhdGUgbWl4
aW5zLCB3aG9zZSBwcm9wZXJ0aWVzIGNhbiBiZQotICAgICAgICAgICAgICBhZGRlZCB0byBvdGhl
ciBjbGFzc2VzLiBGb3IgaW5zdGFuY2UsCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBBcHAuRWRpdGFibGUgPSBFbWJlci5NaXhpbi5jcmVhdGUoewotICAgICAg
ICAgICAgICAgIGVkaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coJ3N0YXJ0aW5nIHRvIGVkaXQnKTsKLSAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdpc0Vk
aXRpbmcnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGlzRWRp
dGluZzogZmFsc2UKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgLy8gTWl4IG1p
eGlucyBpbnRvIGNsYXNzZXMgYnkgcGFzc2luZyB0aGVtIGFzIHRoZSBmaXJzdCBhcmd1bWVudHMg
dG8KLSAgICAgICAgICAgICAgLy8gLmV4dGVuZC4KLSAgICAgICAgICAgICAgQXBwLkNvbW1lbnRW
aWV3ID0gRW1iZXIuVmlldy5leHRlbmQoQXBwLkVkaXRhYmxlLCB7Ci0gICAgICAgICAgICAgICAg
dGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgne3sjaWYgdmlldy5pc0VkaXRpbmd9
fS4uLnt7ZWxzZX19Li4ue3svaWZ9fScpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICAgIGNvbW1lbnRWaWV3ID0gQXBwLkNvbW1lbnRWaWV3LmNyZWF0ZSgpOwotICAgICAgICAgICAg
ICBjb21tZW50Vmlldy5lZGl0KCk7IC8vIG91dHB1dHMgJ3N0YXJ0aW5nIHRvIGVkaXQnCi0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBNaXhpbnMgYXJlIGNyZWF0
ZWQgd2l0aCBgRW1iZXIuTWl4aW4uY3JlYXRlYCwgbm90Ci0gICAgICAgICAgICAgIGBFbWJlci5N
aXhpbi5leHRlbmRgLgotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBtaXhpbnMgZXh0ZW5kIGEg
Y29uc3RydWN0b3IncyBwcm90b3R5cGUgc28gYXJyYXlzIGFuZCBvYmplY3QgbGl0ZXJhbHMKLSAg
ICAgICAgICAgICAgZGVmaW5lZCBhcyBwcm9wZXJ0aWVzIHdpbGwgYmUgc2hhcmVkIGFtb25nc3Qg
b2JqZWN0cyB0aGF0IGltcGxlbWVudCB0aGUgbWl4aW4uCi0gICAgICAgICAgICAgIElmIHlvdSB3
YW50IHRvIGRlZmluZSBhIHByb3BlcnR5IGluIGEgbWl4aW4gdGhhdCBpcyBub3Qgc2hhcmVkLCB5
b3UgY2FuIGRlZmluZQotICAgICAgICAgICAgICBpdCBlaXRoZXIgYXMgYSBjb21wdXRlZCBwcm9w
ZXJ0eSBvciBoYXZlIGl0IGJlIGNyZWF0ZWQgb24gaW5pdGlhbGl6YXRpb24gb2YgdGhlIG9iamVj
dC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIC8vZmlsdGVy
cyBhcnJheSB3aWxsIGJlIHNoYXJlZCBhbW9uZ3N0IGFueSBvYmplY3QgaW1wbGVtZW50aW5nIG1p
eGluCi0gICAgICAgICAgICAgIEFwcC5GaWx0ZXJhYmxlID0gRW1iZXIuTWl4aW4uY3JlYXRlKHsK
LSAgICAgICAgICAgICAgICBmaWx0ZXJzOiBFbWJlci5BKCkKLSAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgLy9maWx0ZXJzIHdpbGwgYmUgYSBzZXBhcmF0ZSAgYXJyYXkgZm9yIGV2
ZXJ5IG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIG1peGluCi0gICAgICAgICAgICAgIEFwcC5GaWx0
ZXJhYmxlID0gRW1iZXIuTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBmaWx0ZXJzOiBF
bWJlci5jb21wdXRlZChmdW5jdGlvbigpe3JldHVybiBFbWJlci5BKCk7fSkKLSAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgICAgLy9maWx0ZXJzIHdpbGwgYmUgY3JlYXRlZCBhcyBhIHNl
cGFyYXRlIGFycmF5IGR1cmluZyB0aGUgb2JqZWN0J3MgaW5pdGlhbGl6YXRpb24KLSAgICAgICAg
ICAgICAgQXBwLkZpbHRlcmFibGUgPSBFbWJlci5NaXhpbi5jcmVhdGUoewotICAgICAgICAgICAg
ICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsK
LSAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KCJmaWx0ZXJzIiwgRW1iZXIuQSgpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAY2xhc3MgTWl4aW4KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGluOwot
ICAgICAgICBmdW5jdGlvbiBNaXhpbigpIHsKLSAgICAgICAgICAgIHJldHVybiBpbml0TWl4aW4o
dGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgfQotICAgICAgICBNaXhpbi5wcm90b3R5cGUgPSB7
Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzOiBudWxsLAotICAgICAgICAgICAgbWl4aW5zOiBudWxs
LAotICAgICAgICAgICAgb3duZXJDb25zdHJ1Y3RvcjogbnVsbAotICAgICAgICB9OwotCi0gICAg
ICAgIE1peGluLl9hcHBseSA9IGFwcGx5TWl4aW47Ci0KLSAgICAgICAgTWl4aW4uYXBwbHlQYXJ0
aWFsID0gZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IGFfc2xpY2UuY2Fs
bChhcmd1bWVudHMsIDEpOwotICAgICAgICAgICAgcmV0dXJuIGFwcGx5TWl4aW4ob2JqLCBhcmdz
LCB0cnVlKTsKLSAgICAgICAgfTsKLQotICAgICAgICBNaXhpbi5maW5pc2hQYXJ0aWFsID0gZmlu
aXNoUGFydGlhbDsKLQotICAgICAgICAvLyBFUzZUT0RPOiB0aGlzIHJlbGllcyBvbiBhIGdsb2Jh
bCBzdGF0ZT8KLSAgICAgICAgRW1iZXIuYW55VW5wcm9jZXNzZWRNaXhpbnMgPSBmYWxzZTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1ldGhvZCBjcmVhdGUKLSAgICAgICAgICAgICAg
QHN0YXRpYwotICAgICAgICAgICAgICBAcGFyYW0gYXJndW1lbnRzKgotICAgICAgICAgICAgKi8K
LSAgICAgICAgTWl4aW4uY3JlYXRlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyBFUzZU
T0RPOiB0aGlzIHJlbGllcyBvbiBhIGdsb2JhbCBzdGF0ZT8KLSAgICAgICAgICAgIEVtYmVyLmFu
eVVucHJvY2Vzc2VkTWl4aW5zID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBNID0gdGhpczsKLSAg
ICAgICAgICAgIHJldHVybiBpbml0TWl4aW4obmV3IE0oKSwgYXJndW1lbnRzKTsKLSAgICAgICAg
fTsKLQotICAgICAgICB2YXIgTWl4aW5Qcm90b3R5cGUgPSBNaXhpbi5wcm90b3R5cGU7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2QgcmVvcGVuCi0gICAgICAgICAgICAgIEBw
YXJhbSBhcmd1bWVudHMqCi0gICAgICAgICAgICAqLwotICAgICAgICBNaXhpblByb3RvdHlwZS5y
ZW9wZW4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBtaXhpbiwgdG1wOwotCi0gICAg
ICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICAgICAgbWl4aW4gPSBN
aXhpbi5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBtaXhpbi5wcm9wZXJ0aWVzID0gdGhpcy5w
cm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnByb3BlcnRpZXM7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5taXhpbnMgPSBbbWl4aW5dOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICghdGhpcy5taXhpbnMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm1peGlucyA9IFtdOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWl4
aW5zID0gdGhpcy5taXhpbnMsIGlkeDsKLQotICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHgg
PCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgbWl4aW4gPSBhcmd1bWVudHNbaWR4XTsK
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ0V4cGVjdGVkIGhhc2ggb3IgTWl4aW4gaW5z
dGFuY2UsIGdvdCAnICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1peGluKSwKLSAg
ICAgICAgICAgICAgICB0eXBlb2YgbWl4aW4gPT09ICdvYmplY3QnICYmIG1peGluICE9PSBudWxs
ICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtaXhpbikgIT09ICdbb2JqZWN0IEFy
cmF5XScpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1peGluIGluc3RhbmNlb2YgTWl4aW4pIHsK
LSAgICAgICAgICAgICAgICAgICAgbWl4aW5zLnB1c2gobWl4aW4pOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcCA9IE1peGluLmNyZWF0ZSgpOwotICAg
ICAgICAgICAgICAgICAgICB0bXAucHJvcGVydGllcyA9IG1peGluOwotICAgICAgICAgICAgICAg
ICAgICBtaXhpbnMucHVzaCh0bXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIEBtZXRob2QgYXBwbHkKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAg
ICAgICAgICAgICBAcmV0dXJuIGFwcGxpZWQgb2JqZWN0Ci0gICAgICAgICAgICAqLwotICAgICAg
ICBNaXhpblByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgcmV0
dXJuIGFwcGx5TWl4aW4ob2JqLCBbdGhpc10sIGZhbHNlKTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBNaXhpblByb3RvdHlwZS5hcHBseVBhcnRpYWwgPSBmdW5jdGlvbihvYmopIHsKLSAgICAgICAg
ICAgIHJldHVybiBhcHBseU1peGluKG9iaiwgW3RoaXNdLCB0cnVlKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICBmdW5jdGlvbiBfZGV0ZWN0KGN1ck1peGluLCB0YXJnZXRNaXhpbiwgc2Vlbikgewot
ICAgICAgICAgICAgdmFyIGd1aWQgPSBndWlkRm9yKGN1ck1peGluKTsKLQotICAgICAgICAgICAg
aWYgKHNlZW5bZ3VpZF0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzZWVuW2d1aWRdID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYg
KGN1ck1peGluID09PSB0YXJnZXRNaXhpbikgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1peGlucyA9IGN1ck1peGluLm1peGlu
cywgbG9jID0gbWl4aW5zID8gbWl4aW5zLmxlbmd0aCA6IDA7Ci0gICAgICAgICAgICB3aGlsZSAo
LS1sb2MgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChfZGV0ZWN0KG1peGluc1tsb2NdLCB0
YXJnZXRNaXhpbiwgc2VlbikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2QgZGV0ZWN0
Ci0gICAgICAgICAgICAgIEBwYXJhbSBvYmoKLSAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVh
bn0KLSAgICAgICAgICAgICovCi0gICAgICAgIE1peGluUHJvdG90eXBlLmRldGVjdCA9IGZ1bmN0
aW9uKG9iaikgewotICAgICAgICAgICAgaWYgKCFvYmopIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2Yg
TWl4aW4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gX2RldGVjdChvYmosIHRoaXMsIHt9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBtID0gb2JqW01FVEFfS0VZXSwKLSAgICAg
ICAgICAgIG1peGlucyA9IG0gJiYgbS5taXhpbnM7Ci0gICAgICAgICAgICBpZiAobWl4aW5zKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEhbWl4aW5zW2d1aWRGb3IodGhpcyldOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotCi0gICAgICAg
IE1peGluUHJvdG90eXBlLndpdGhvdXQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBy
ZXQgPSBuZXcgTWl4aW4odGhpcyk7Ci0gICAgICAgICAgICByZXQuX3dpdGhvdXQgPSBhX3NsaWNl
LmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgZnVuY3Rpb24gX2tleXMocmV0LCBtaXhpbiwgc2VlbikgewotICAgICAgICAgICAg
aWYgKHNlZW5bZ3VpZEZvcihtaXhpbildKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc2VlbltndWlkRm9yKG1peGluKV0gPSB0cnVlOwotCi0g
ICAgICAgICAgICBpZiAobWl4aW4ucHJvcGVydGllcykgewotICAgICAgICAgICAgICAgIHZhciBw
cm9wcyA9IG1peGluLnByb3BlcnRpZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IHByb3BzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShr
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1peGluLm1peGlucykgewotICAgICAgICAgICAgICAgIGFfZm9yRWFjaC5jYWxsKG1peGluLm1p
eGlucywgZnVuY3Rpb24oeCkgewotICAgICAgICAgICAgICAgICAgICBfa2V5cyhyZXQsIHgsIHNl
ZW4pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgTWl4aW5Qcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFy
IGtleXMgPSB7fSwgc2VlbiA9IHt9LCByZXQgPSBbXTsKLSAgICAgICAgICAgIF9rZXlzKGtleXMs
IHRoaXMsIHNlZW4pOwotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGtleXMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldC5wdXNoKGtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyByZXR1cm5z
IHRoZSBtaXhpbnMgY3VycmVudGx5IGFwcGxpZWQgdG8gdGhlIHNwZWNpZmllZCBvYmplY3QKLSAg
ICAgICAgLy8gVE9ETzogTWFrZSBFbWJlci5taXhpbgotICAgICAgICBNaXhpbi5taXhpbnMgPSBm
dW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgIHZhciBtID0gb2JqW01FVEFfS0VZXSwKLSAgICAg
ICAgICAgIG1peGlucyA9IG0gJiYgbS5taXhpbnMsIHJldCA9IFtdOwotCi0gICAgICAgICAgICBp
ZiAoIW1peGlucykgewotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBtaXhpbnMpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgbWl4aW4gPSBtaXhpbnNba2V5XTsKLQotICAgICAgICAgICAgICAgIC8vIHNraXAgcHJp
bWl0aXZlIG1peGlucyBzaW5jZSB0aGVzZSBhcmUgYWx3YXlzIGFub255bW91cwotICAgICAgICAg
ICAgICAgIGlmICghbWl4aW4ucHJvcGVydGllcykgewotICAgICAgICAgICAgICAgICAgICByZXQu
cHVzaChtaXhpbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gcmV0OwotICAgICAgICB9OwotCi0gICAgICAgIFJFUVVJUkVEID0gbmV3IERl
c2NyaXB0b3IoKTsKLSAgICAgICAgUkVRVUlSRUQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIHJldHVybiAnKFJlcXVpcmVkIFByb3BlcnR5KSc7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIERlbm90ZXMgYSByZXF1aXJlZCBwcm9wZXJ0eSBmb3Ig
YSBtaXhpbgotCi0gICAgICAgICAgICAgIEBtZXRob2QgcmVxdWlyZWQKLSAgICAgICAgICAgICAg
QGZvciBFbWJlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcmVxdWlyZWQoKSB7
Ci0gICAgICAgICAgICByZXR1cm4gUkVRVUlSRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4
cG9ydHNfXy5yZXF1aXJlZCA9IHJlcXVpcmVkOwotICAgICAgICBmdW5jdGlvbiBBbGlhcyhtZXRo
b2ROYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLm1ldGhvZE5hbWUgPSBtZXRob2ROYW1lOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQWxpYXMucHJvdG90eXBlID0gbmV3IERlc2NyaXB0b3IoKTsKLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgTWFrZXMgYSBtZXRob2QgYXZhaWxhYmxlIHZpYSBh
biBhZGRpdGlvbmFsIG5hbWUuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgbmFtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gJ1RvbWh1ZGEg
S2F0emRhbGUnOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgbW9uaWtlcjog
RW1iZXIuYWxpYXNNZXRob2QoJ25hbWUnKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICB2YXIgZ29vZEd1eSA9IEFwcC5QZXJzb24uY3JlYXRlKCk7Ci0gICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICBnb29kR3V5Lm5hbWUoKTsgICAgLy8gJ1RvbWh1ZGEgS2F0emRhbGUnCi0g
ICAgICAgICAgICAgIGdvb2RHdXkubW9uaWtlcigpOyAvLyAnVG9taHVkYSBLYXR6ZGFsZScKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBhbGlhc01ldGhvZAotICAg
ICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBtZXRo
b2ROYW1lIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBhbGlhcwotICAgICAgICAgICAgICBAcmV0dXJu
IHtFbWJlci5EZXNjcmlwdG9yfQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYWxp
YXNNZXRob2QobWV0aG9kTmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyhtZXRo
b2ROYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFsaWFzTWV0aG9kID0g
YWxpYXNNZXRob2Q7IC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gT0JTRVJWRVIgSEVMUEVSCi0gICAgICAgIC8v
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNwZWNpZnkgYSBtZXRob2QgdGhhdCBvYnNl
cnZlcyBwcm9wZXJ0eSBjaGFuZ2VzLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdmFsdWVP
YnNlcnZlcjogRW1iZXIub2JzZXJ2ZXIoJ3ZhbHVlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAvLyBFeGVjdXRlcyB3aGVuZXZlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBjaGFuZ2Vz
Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEluIHRoZSBmdXR1cmUgdGhpcyBtZXRob2QgbWF5IGJlY29tZSBh
c3luY2hyb25vdXMuIElmIHlvdSB3YW50IHRvIGVuc3VyZQotICAgICAgICAgICAgICBzeW5jaHJv
bm91cyBiZWhhdmlvciwgdXNlIGBpbW1lZGlhdGVPYnNlcnZlcmAuCi0KLSAgICAgICAgICAgICAg
QWxzbyBhdmFpbGFibGUgYXMgYEZ1bmN0aW9uLnByb3RvdHlwZS5vYnNlcnZlc2AgaWYgcHJvdG90
eXBlIGV4dGVuc2lvbnMgYXJlCi0gICAgICAgICAgICAgIGVuYWJsZWQuCi0KLSAgICAgICAgICAg
ICAgQG1ldGhvZCBvYnNlcnZlcgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVzKgotICAgICAgICAgICAgICBAcGFyYW0g
e0Z1bmN0aW9ufSBmdW5jCi0gICAgICAgICAgICAgIEByZXR1cm4gZnVuYwotICAgICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZXIoKSB7Ci0gICAgICAgICAgICB2YXIgZnVuYyA9
IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIC0xKVswXTsKLSAgICAgICAgICAgIHZhciBwYXRoczsK
LQotICAgICAgICAgICAgdmFyIGFkZFdhdGNoZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwYXRoKSB7
Ci0gICAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB2YXIgX3BhdGhzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpOwotCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAg
ICAgICAvLyByZXZlcnQgdG8gb2xkLCBzb2Z0LWRlcHJlY2F0ZWQgYXJndW1lbnQgb3JkZXJpbmcK
LQotICAgICAgICAgICAgICAgIGZ1bmMgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgICAgICAgICAg
X3BhdGhzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHBhdGhzID0gW107Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
X3BhdGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZXhwYW5kUHJvcGVydGllcyhf
cGF0aHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFbWJlci5FcnJvcigiRW1iZXIub2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5j
dGlvbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jLl9fZW1iZXJfb2JzZXJ2
ZXNfXyA9IHBhdGhzOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmM7Ci0gICAgICAgIH0KLQotICAg
ICAgICBfX2V4cG9ydHNfXy5vYnNlcnZlciA9IG9ic2VydmVyOyAvKioKLSAgICAgICAgICAgICAg
U3BlY2lmeSBhIG1ldGhvZCB0aGF0IG9ic2VydmVzIHByb3BlcnR5IGNoYW5nZXMuCi0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5PYmplY3QuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICB2YWx1ZU9ic2VydmVyOiBFbWJlci5pbW1lZGlhdGVPYnNlcnZl
cigndmFsdWUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGVzIHdo
ZW5ldmVyIHRoZSAidmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgICAgICAgICB9KQot
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4g
dGhlIGZ1dHVyZSwgYEVtYmVyLm9ic2VydmVyYCBtYXkgYmVjb21lIGFzeW5jaHJvbm91cy4gSW4g
dGhpcyBldmVudCwKLSAgICAgICAgICAgICAgYEVtYmVyLmltbWVkaWF0ZU9ic2VydmVyYCB3aWxs
IG1haW50YWluIHRoZSBzeW5jaHJvbm91cyBiZWhhdmlvci4KLQotICAgICAgICAgICAgICBBbHNv
IGF2YWlsYWJsZSBhcyBgRnVuY3Rpb24ucHJvdG90eXBlLm9ic2VydmVzSW1tZWRpYXRlbHlgIGlm
IHByb3RvdHlwZSBleHRlbnNpb25zIGFyZQotICAgICAgICAgICAgICBlbmFibGVkLgotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgaW1tZWRpYXRlT2JzZXJ2ZXIKLSAgICAgICAgICAgICAgQGZvciBF
bWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlOYW1lcyoKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYwotICAgICAgICAgICAgICBAcmV0dXJuIGZ1
bmMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGltbWVkaWF0ZU9ic2VydmVyKCkg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoIkltbWVkaWF0ZSBvYnNlcnZlcnMgbXVzdCBvYnNlcnZl
IGludGVybmFsIHByb3BlcnRpZXMgb25seSwgbm90IHByb3BlcnRpZXMgb24gb3RoZXIgb2JqZWN0
cy4iLCB0eXBlb2YgYXJnICE9PSAic3RyaW5nIiB8fCBhcmcuaW5kZXhPZignLicpID09PSAtMSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uaW1tZWRpYXRl
T2JzZXJ2ZXIgPSBpbW1lZGlhdGVPYnNlcnZlcjsgLyoqCi0gICAgICAgICAgICAgIFdoZW4gb2Jz
ZXJ2ZXJzIGZpcmUsIHRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudHMgYG9iamAsIGBr
ZXlOYW1lYC4KLQotICAgICAgICAgICAgICBOb3RlLCBgQGVhY2gucHJvcGVydHlgIG9ic2VydmVy
IGlzIGNhbGxlZCBwZXIgZWFjaCBhZGQgb3IgcmVwbGFjZSBvZiBhbiBlbGVtZW50Ci0gICAgICAg
ICAgICAgIGFuZCBpdCdzIG5vdCBjYWxsZWQgd2l0aCBhIHNwZWNpZmljIGVudW1lcmF0aW9uIGl0
ZW0uCi0KLSAgICAgICAgICAgICAgQSBgYmVmb3JlT2JzZXJ2ZXJgIGZpcmVzIGJlZm9yZSBhIHBy
b3BlcnR5IGNoYW5nZXMuCi0KLSAgICAgICAgICAgICAgQSBgYmVmb3JlT2JzZXJ2ZXJgIGlzIGFu
IGFsdGVybmF0aXZlIGZvcm0gb2YgYC5vYnNlcnZlc0JlZm9yZSgpYC4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5QZXJzb25WaWV3ID0gRW1iZXIuVmll
dy5leHRlbmQoewotICAgICAgICAgICAgICAgIGZyaWVuZHM6IFt7IG5hbWU6ICdUb20nIH0sIHsg
bmFtZTogJ1N0ZWZhbicgfSwgeyBuYW1lOiAnS3JpcycgfV0sCi0KLSAgICAgICAgICAgICAgICB2
YWx1ZVdpbGxDaGFuZ2U6IEVtYmVyLmJlZm9yZU9ic2VydmVyKCdjb250ZW50LnZhbHVlJywgZnVu
Y3Rpb24ob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLmNoYW5naW5nRnJv
bSA9IG9iai5nZXQoa2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAg
ICAgICB2YWx1ZURpZENoYW5nZTogRW1iZXIub2JzZXJ2ZXIoJ2NvbnRlbnQudmFsdWUnLCBmdW5j
dGlvbihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBydW4gaWYg
dXBkYXRpbmcgYSB2YWx1ZSBhbHJlYWR5IGluIHRoZSBET00KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuZ2V0KCdzdGF0ZScpID09PSAnaW5ET00nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbG9yID0gb2JqLmdldChrZXlOYW1lKSA+IHRoaXMuY2hhbmdpbmdGcm9tID8gJ2dy
ZWVuJyA6ICdyZWQnOwotICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZ2ljCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgICAgIGZyaWVu
ZHNEaWRDaGFuZ2U6IEVtYmVyLm9ic2VydmVyKCdmcmllbmRzLkBlYWNoLm5hbWUnLCBmdW5jdGlv
bihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgIC8vIHNvbWUgbG9naWMKLSAgICAg
ICAgICAgICAgICAgIC8vIG9iai5nZXQoa2V5TmFtZSkgcmV0dXJucyBmcmllbmRzIGFycmF5Ci0g
ICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEFsc28gYXZhaWxhYmxlIGFzIGBGdW5jdGlvbi5wcm90b3R5cGUub2Jz
ZXJ2ZXNCZWZvcmVgIGlmIHByb3RvdHlwZSBleHRlbnNpb25zIGFyZQotICAgICAgICAgICAgICBl
bmFibGVkLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgYmVmb3JlT2JzZXJ2ZXIKLSAgICAgICAg
ICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlO
YW1lcyoKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYwotICAgICAgICAgICAg
ICBAcmV0dXJuIGZ1bmMKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGJlZm9yZU9i
c2VydmVyKCkgewotICAgICAgICAgICAgdmFyIGZ1bmMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRz
LCAtMSlbMF07Ci0gICAgICAgICAgICB2YXIgcGF0aHM7Ci0KLSAgICAgICAgICAgIHZhciBhZGRX
YXRjaGVkUHJvcGVydHkgPSBmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAgICAgICAgcGF0aHMu
cHVzaChwYXRoKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBfcGF0aHMgPSBh
X3NsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSk7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZnVuYyAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIC8vIHJldmVydCB0byBvbGQs
IHNvZnQtZGVwcmVjYXRlZCBhcmd1bWVudCBvcmRlcmluZwotCi0gICAgICAgICAgICAgICAgZnVu
YyA9IGFyZ3VtZW50c1swXTsKLSAgICAgICAgICAgICAgICBfcGF0aHMgPSBhX3NsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGF0aHMgPSBbXTsK
LQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcGF0aHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzKF9wYXRoc1tpXSwgYWRkV2F0Y2hlZFBy
b3BlcnR5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9
PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyLkVycm9yKCJF
bWJlci5iZWZvcmVPYnNlcnZlciBjYWxsZWQgd2l0aG91dCBhIGZ1bmN0aW9uIik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmMuX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fID0gcGF0
aHM7Ci0gICAgICAgICAgICByZXR1cm4gZnVuYzsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhw
b3J0c19fLmJlZm9yZU9ic2VydmVyID0gYmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIF9fZXhwb3J0
c19fLklTX0JJTkRJTkcgPSBJU19CSU5ESU5HOwotICAgICAgICBfX2V4cG9ydHNfXy5NaXhpbiA9
IE1peGluOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLAotICAg
IFsiZW1iZXItbWV0YWwvd2F0Y2hpbmciLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXItbWV0
YWwvZXZlbnRzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciB3YXRjaCA9IF9fZGVwZW5kZW5jeTFfXy53YXRjaDsK
LSAgICAgICAgdmFyIHVud2F0Y2ggPSBfX2RlcGVuZGVuY3kxX18udW53YXRjaDsKLSAgICAgICAg
dmFyIG1hcCA9IF9fZGVwZW5kZW5jeTJfXy5tYXA7Ci0gICAgICAgIHZhciBsaXN0ZW5lcnNGb3Ig
PSBfX2RlcGVuZGVuY3kzX18ubGlzdGVuZXJzRm9yOwotICAgICAgICB2YXIgYWRkTGlzdGVuZXIg
PSBfX2RlcGVuZGVuY3kzX18uYWRkTGlzdGVuZXI7Ci0gICAgICAgIHZhciByZW1vdmVMaXN0ZW5l
ciA9IF9fZGVwZW5kZW5jeTNfXy5yZW1vdmVMaXN0ZW5lcjsKLSAgICAgICAgdmFyIHN1c3BlbmRM
aXN0ZW5lcnMgPSBfX2RlcGVuZGVuY3kzX18uc3VzcGVuZExpc3RlbmVyczsKLSAgICAgICAgdmFy
IHN1c3BlbmRMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTNfXy5zdXNwZW5kTGlzdGVuZXI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8K
LQotICAgICAgICB2YXIgQUZURVJfT0JTRVJWRVJTID0gJzpjaGFuZ2UnOwotICAgICAgICB2YXIg
QkVGT1JFX09CU0VSVkVSUyA9ICc6YmVmb3JlJzsKLQotICAgICAgICBmdW5jdGlvbiBjaGFuZ2VF
dmVudChrZXlOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4ga2V5TmFtZSArIEFGVEVSX09CU0VS
VkVSUzsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGJlZm9yZUV2ZW50KGtleU5hbWUp
IHsKLSAgICAgICAgICAgIHJldHVybiBrZXlOYW1lICsgQkVGT1JFX09CU0VSVkVSUzsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAbWV0aG9kIGFkZE9ic2VydmVyCi0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dHxGdW5jdGlvbn0gdGFyZ2V0T3JNZXRob2QKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bnxTdHJpbmd9IFttZXRob2RdCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBhZGRP
YnNlcnZlcihvYmosIF9wYXRoLCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgYWRkTGlz
dGVuZXIob2JqLCBjaGFuZ2VFdmVudChfcGF0aCksIHRhcmdldCwgbWV0aG9kKTsKLSAgICAgICAg
ICAgIHdhdGNoKG9iaiwgX3BhdGgpOwotCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFkZE9ic2VydmVyID0gYWRkT2JzZXJ2ZXI7Ci0g
ICAgICAgIGZ1bmN0aW9uIG9ic2VydmVyc0ZvcihvYmosIHBhdGgpIHsKLSAgICAgICAgICAgIHJl
dHVybiBsaXN0ZW5lcnNGb3Iob2JqLCBjaGFuZ2VFdmVudChwYXRoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBfX2V4cG9ydHNfXy5vYnNlcnZlcnNGb3IgPSBvYnNlcnZlcnNGb3I7IC8qKgotICAg
ICAgICAgICAgICBAbWV0aG9kIHJlbW92ZU9ic2VydmVyCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0T3JN
ZXRob2QKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IFttZXRob2RdCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYmosIF9wYXRo
LCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgdW53YXRjaChvYmosIF9wYXRoKTsKLSAg
ICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG9iaiwgY2hhbmdlRXZlbnQoX3BhdGgpLCB0YXJnZXQs
IG1ldGhvZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18ucmVtb3ZlT2JzZXJ2ZXIgPSByZW1vdmVPYnNlcnZlcjsgLyoqCi0gICAg
ICAgICAgICAgIEBtZXRob2QgYWRkQmVmb3JlT2JzZXJ2ZXIKLSAgICAgICAgICAgICAgQGZvciBF
bWJlcgotICAgICAgICAgICAgICBAcGFyYW0gb2JqCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBwYXRoCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXRP
ck1ldGhvZAotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gW21ldGhvZF0K
LSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGFkZEJlZm9yZU9ic2VydmVyKG9iaiwg
X3BhdGgsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgICAgICAgICBhZGRMaXN0ZW5lcihvYmosIGJl
Zm9yZUV2ZW50KF9wYXRoKSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAgICAgd2F0Y2gob2Jq
LCBfcGF0aCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18uYWRkQmVmb3JlT2JzZXJ2ZXIgPSBhZGRCZWZvcmVPYnNlcnZlcjsgLy8g
U3VzcGVuZCBvYnNlcnZlciBkdXJpbmcgY2FsbGJhY2suCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgdGFyZ2V0IG9mIHRoZSBvYnNlcnZlcgot
ICAgICAgICAvLyB3aGlsZSBpdCBpcyBzZXR0aW5nIHRoZSBvYnNlcnZlZCBwYXRoLgotICAgICAg
ICBmdW5jdGlvbiBfc3VzcGVuZEJlZm9yZU9ic2VydmVyKG9iaiwgcGF0aCwgdGFyZ2V0LCBtZXRo
b2QsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3VzcGVuZExpc3RlbmVyKG9iaiwg
YmVmb3JlRXZlbnQocGF0aCksIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjayk7Ci0gICAgICAgIH0K
LQotICAgICAgICBfX2V4cG9ydHNfXy5fc3VzcGVuZEJlZm9yZU9ic2VydmVyID0gX3N1c3BlbmRC
ZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgZnVuY3Rpb24gX3N1c3BlbmRPYnNlcnZlcihvYmosIHBh
dGgsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgICAgICAgICAgcmV0dXJuIHN1c3Bl
bmRMaXN0ZW5lcihvYmosIGNoYW5nZUV2ZW50KHBhdGgpLCB0YXJnZXQsIG1ldGhvZCwgY2FsbGJh
Y2spOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uX3N1c3BlbmRPYnNlcnZlciA9
IF9zdXNwZW5kT2JzZXJ2ZXI7Ci0gICAgICAgIGZ1bmN0aW9uIF9zdXNwZW5kQmVmb3JlT2JzZXJ2
ZXJzKG9iaiwgcGF0aHMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgICAgICAgICAg
dmFyIGV2ZW50cyA9IG1hcC5jYWxsKHBhdGhzLCBiZWZvcmVFdmVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3VzcGVuZExpc3RlbmVycyhvYmosIGV2ZW50cywgdGFyZ2V0LCBtZXRob2QsIGNhbGxi
YWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLl9zdXNwZW5kQmVmb3JlT2Jz
ZXJ2ZXJzID0gX3N1c3BlbmRCZWZvcmVPYnNlcnZlcnM7Ci0gICAgICAgIGZ1bmN0aW9uIF9zdXNw
ZW5kT2JzZXJ2ZXJzKG9iaiwgcGF0aHMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAg
ICAgICAgICAgdmFyIGV2ZW50cyA9IG1hcC5jYWxsKHBhdGhzLCBjaGFuZ2VFdmVudCk7Ci0gICAg
ICAgICAgICByZXR1cm4gc3VzcGVuZExpc3RlbmVycyhvYmosIGV2ZW50cywgdGFyZ2V0LCBtZXRo
b2QsIGNhbGxiYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLl9zdXNwZW5k
T2JzZXJ2ZXJzID0gX3N1c3BlbmRPYnNlcnZlcnM7Ci0gICAgICAgIGZ1bmN0aW9uIGJlZm9yZU9i
c2VydmVyc0ZvcihvYmosIHBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcnNGb3Io
b2JqLCBiZWZvcmVFdmVudChwYXRoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNf
Xy5iZWZvcmVPYnNlcnZlcnNGb3IgPSBiZWZvcmVPYnNlcnZlcnNGb3I7IC8qKgotICAgICAgICAg
ICAgICBAbWV0aG9kIHJlbW92ZUJlZm9yZU9ic2VydmVyCi0gICAgICAgICAgICAgIEBmb3IgRW1i
ZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gcGF0aAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0T3JN
ZXRob2QKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IFttZXRob2RdCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiByZW1vdmVCZWZvcmVPYnNlcnZlcihvYmos
IF9wYXRoLCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgdW53YXRjaChvYmosIF9wYXRo
KTsKLSAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG9iaiwgYmVmb3JlRXZlbnQoX3BhdGgpLCB0
YXJnZXQsIG1ldGhvZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0K
LSAgICAgICAgX19leHBvcnRzX18ucmVtb3ZlQmVmb3JlT2JzZXJ2ZXIgPSByZW1vdmVCZWZvcmVP
YnNlcnZlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL29ic2VydmVyX3NldCIs
Ci0gICAgWyJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBndWlkRm9yID0g
X19kZXBlbmRlbmN5MV9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBzZW5kRXZlbnQgPSBfX2RlcGVu
ZGVuY3kyX18uc2VuZEV2ZW50OwotCi0gICAgICAgIC8qCi0gICAgICAgICAgICAgIHRoaXMub2Jz
ZXJ2ZXJTZXQgPSB7Ci0gICAgICAgICAgICAgICAgW3NlbmRlckd1aWRdOiB7IC8vIHZhcmlhYmxl
IG5hbWU6IGBrZXlTZXRgCi0gICAgICAgICAgICAgICAgICBba2V5TmFtZV06IGxpc3RJbmRleAot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgdGhpcy5v
YnNlcnZlcnMgPSBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgc2VuZGVy
OiBvYmosCi0gICAgICAgICAgICAgICAgICBrZXlOYW1lOiBrZXlOYW1lLAotICAgICAgICAgICAg
ICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCi0gICAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6
IFsKLSAgICAgICAgICAgICAgICAgICAgW3RhcmdldCwgbWV0aG9kLCBmbGFnc10KLSAgICAgICAg
ICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIC4uLgotICAg
ICAgICAgICAgICBdCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVs
dCJdID0gT2JzZXJ2ZXJTZXQ7Ci0gICAgICAgIGZ1bmN0aW9uIE9ic2VydmVyU2V0KCkgewotICAg
ICAgICAgICAgdGhpcy5jbGVhcigpOwotICAgICAgICB9Ci0KLQotICAgICAgICBPYnNlcnZlclNl
dC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oc2VuZGVyLCBrZXlOYW1lLCBldmVudE5hbWUpIHsK
LSAgICAgICAgICAgIHZhciBvYnNlcnZlclNldCA9IHRoaXMub2JzZXJ2ZXJTZXQsCi0gICAgICAg
ICAgICBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycywKLSAgICAgICAgICAgIHNlbmRlckd1aWQg
PSBndWlkRm9yKHNlbmRlciksCi0gICAgICAgICAgICBrZXlTZXQgPSBvYnNlcnZlclNldFtzZW5k
ZXJHdWlkXSwKLSAgICAgICAgICAgIGluZGV4OwotCi0gICAgICAgICAgICBpZiAoIWtleVNldCkg
ewotICAgICAgICAgICAgICAgIG9ic2VydmVyU2V0W3NlbmRlckd1aWRdID0ga2V5U2V0ID0ge307
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCA9IGtleVNldFtrZXlOYW1lXTsKLSAg
ICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgaW5k
ZXggPSBvYnNlcnZlcnMucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRlcjogc2VuZGVy
LAotICAgICAgICAgICAgICAgICAgICBrZXlOYW1lOiBrZXlOYW1lLAotICAgICAgICAgICAgICAg
ICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJz
OiBbXQotICAgICAgICAgICAgICAgIH0pIC0gMTsKLSAgICAgICAgICAgICAgICBrZXlTZXRba2V5
TmFtZV0gPSBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvYnNlcnZl
cnNbaW5kZXhdLmxpc3RlbmVyczsKLSAgICAgICAgfTsKLQotICAgICAgICBPYnNlcnZlclNldC5w
cm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBvYnNlcnZlcnMg
PSB0aGlzLm9ic2VydmVycywgaSwgbGVuLCBvYnNlcnZlciwgc2VuZGVyOwotICAgICAgICAgICAg
dGhpcy5jbGVhcigpOwotICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gb2JzZXJ2ZXJzLmxl
bmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgb2JzZXJ2ZXIgPSBvYnNlcnZl
cnNbaV07Ci0gICAgICAgICAgICAgICAgc2VuZGVyID0gb2JzZXJ2ZXIuc2VuZGVyOwotICAgICAg
ICAgICAgICAgIGlmIChzZW5kZXIuaXNEZXN0cm95aW5nIHx8IHNlbmRlci5pc0Rlc3Ryb3llZCkg
ewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc2VuZEV2ZW50KHNlbmRlciwgb2JzZXJ2ZXIuZXZlbnROYW1lLCBbc2VuZGVy
LCBvYnNlcnZlci5rZXlOYW1lXSwgb2JzZXJ2ZXIubGlzdGVuZXJzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfTsKLQotICAgICAgICBPYnNlcnZlclNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJTZXQgPSB7fTsKLSAgICAgICAgICAg
IHRoaXMub2JzZXJ2ZXJzID0gW107Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1tZXRhbC9wbGF0Zm9ybSIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImV4cG9ydHMi
XSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLypnbG9iYWxzIE5vZGUgKi8KLQotICAgICAgICB2YXIg
RW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIFBsYXRmb3JtIHNwZWNpZmljIG1ldGhvZHMgYW5kIGZlYXR1cmUgZGV0
ZWN0b3JzIG5lZWRlZCBieSB0aGUgZnJhbWV3b3JrLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBw
bGF0Zm9ybQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBz
dGF0aWMKLSAgICAgICAgICAgICovCi0gICAgICAgIC8vIFRPRE8gcmVtb3ZlIHRoaXMKLSAgICAg
ICAgdmFyIHBsYXRmb3JtID0ge307Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIElkZW50
aWNhbCB0byBgT2JqZWN0LmNyZWF0ZSgpYC4gSW1wbGVtZW50cyBpZiBub3QgYXZhaWxhYmxlIG5h
dGl2ZWx5LgotCi0gICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlCi0gICAgICAgICAgICAgIEBm
b3IgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3Jl
YXRlOwotCi0gICAgICAgIC8vIElFOCBoYXMgT2JqZWN0LmNyZWF0ZSBidXQgaXQgY291bGRuJ3Qg
dHJlYXQgcHJvcGVydHkgZGVzY3JpcHRvcnMuCi0gICAgICAgIGlmIChjcmVhdGUpIHsKLSAgICAg
ICAgICAgIGlmIChjcmVhdGUoewotICAgICAgICAgICAgICAgIGE6IDEKLSAgICAgICAgICAgIH0s
IHsKLSAgICAgICAgICAgICAgICBhOiB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAyCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSkuYSAhPT0gMikgewotICAgICAgICAgICAg
ICAgIGNyZWF0ZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBTVFVCX09CSkVDVF9DUkVBVEUgYWxsb3dzIHVzIHRvIG92ZXJyaWRlIG90aGVyIGxpYnJhcmll
cyB0aGF0IHN0dWIKLSAgICAgICAgLy8gT2JqZWN0LmNyZWF0ZSBkaWZmZXJlbnQgdGhhbiB3ZSB3
b3VsZCBwcmVmZXIKLSAgICAgICAgaWYgKCFjcmVhdGUgfHwgRW1iZXIuRU5WLlNUVUJfT0JKRUNU
X0NSRUFURSkgewotICAgICAgICAgICAgdmFyIEsgPSBmdW5jdGlvbigpIHt9OwotCi0gICAgICAg
ICAgICBjcmVhdGUgPSBmdW5jdGlvbihvYmosIHByb3BzKSB7Ci0gICAgICAgICAgICAgICAgSy5w
cm90b3R5cGUgPSBvYmo7Ci0gICAgICAgICAgICAgICAgb2JqID0gbmV3IEsoKTsKLSAgICAgICAg
ICAgICAgICBpZiAocHJvcHMpIHsKLSAgICAgICAgICAgICAgICAgICAgSy5wcm90b3R5cGUgPSBv
Ymo7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcHMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEsucHJvdG90eXBlW3Byb3BdID0gcHJvcHNbcHJvcF0udmFsdWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2JqID0gbmV3IEso
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgSy5wcm90b3R5cGUgPSBudWxs
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIGNyZWF0ZS5pc1NpbXVsYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBj
YW5SZWRlZmluZVByb3BlcnRpZXMsIGNhbkRlZmluZVByb3BlcnR5T25ET007Ci0KLSAgICAgICAg
Ly8gQ2F0Y2ggSUU4IHdoZXJlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBleGlzdHMgYnV0IG9ubHkg
d29ya3Mgb24gRE9NIGVsZW1lbnRzCi0gICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eSkgewotICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7fQotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGRlZmluZVBy
b3BlcnR5ID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
ZWZpbmVQcm9wZXJ0eSkgewotICAgICAgICAgICAgLy8gRGV0ZWN0cyBhIGJ1ZyBpbiBBbmRyb2lk
IDwzLjIgd2hlcmUgeW91IGNhbm5vdCByZWRlZmluZSBhIHByb3BlcnR5IHVzaW5nCi0gICAgICAg
ICAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkgb25jZSBhY2Nlc3NvcnMgaGF2ZSBhbHJlYWR5
IGJlZW4gc2V0LgotICAgICAgICAgICAgY2FuUmVkZWZpbmVQcm9wZXJ0aWVzID0gKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fTsKLQotICAgICAgICAgICAgICAgIGRl
ZmluZVByb3BlcnR5KG9iaiwgJ2EnLCB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHt9LAotICAgICAgICAgICAgICAgICAgICBzZXQ6
IGZ1bmN0aW9uKCkge30KLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGRl
ZmluZVByb3BlcnR5KG9iaiwgJ2EnLCB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0
cnVlCi0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmEg
PT09IHRydWU7Ci0gICAgICAgICAgICB9KSgpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGZv
ciBTYWZhcmkgNS4wLCB3aGljaCBzdXBwb3J0cyBPYmplY3QuZGVmaW5lUHJvcGVydHksIGJ1dCBu
b3QKLSAgICAgICAgICAgIC8vIG9uIERPTSBub2Rlcy4KLSAgICAgICAgICAgIGNhbkRlZmluZVBy
b3BlcnR5T25ET00gPSAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JyksICdkZWZpbmVQcm9wZXJ0eU9uRE9NJywge30pOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSkoKTsKLQotICAgICAgICAgICAgaWYgKCFj
YW5SZWRlZmluZVByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSA9
IG51bGw7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYW5EZWZpbmVQcm9wZXJ0eU9uRE9NKSB7
Ci0gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIGtleU5hbWUs
IGRlc2MpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlzTm9kZTsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAodHlwZW9mIE5vZGUgPT09ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpc05vZGUgPSBvYmogaW5zdGFuY2VvZiBOb2RlOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2RlID0gdHlwZW9mIG9iaiA9
PT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSA9PT0gIm51bWJlciIgJiYgdHlwZW9m
IG9iai5ub2RlTmFtZSA9PT0gInN0cmluZyI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUT0RPOiBTaG91bGQgd2UgaGF2ZSBhIHdhcm5pbmcgaGVyZT8KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAob2JqW2tleU5hbWVdID0gZGVzYy52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmRl
ZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICBAY2xhc3MgcGxhdGZvcm0KLSAgICAgICAgICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIElkZW50
aWNhbCB0byBgT2JqZWN0LmRlZmluZVByb3BlcnR5KClgLiBJbXBsZW1lbnRzIGFzIG11Y2ggZnVu
Y3Rpb25hbGl0eQotICAgICAgICAgICAgICBhcyBwb3NzaWJsZSBpZiBub3QgYXZhaWxhYmxlIG5h
dGl2ZWx5LgotCi0gICAgICAgICAgICAgIEBtZXRob2QgZGVmaW5lUHJvcGVydHkKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIG1vZGlmeQotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBwcm9wZXJ0eSBuYW1lIHRvIG1vZGlmeQotICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZGVzYyBkZXNjcmlwdG9yIGhhc2gKLSAgICAgICAg
ICAgICAgQHJldHVybiB7dm9pZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIHBsYXRmb3JtLmRl
ZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFNldCB0byB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBuYXRpdmUgZ2V0dGVycyBh
bmQgc2V0dGVycy4KLQotICAgICAgICAgICAgICBAcHJvcGVydHkgaGFzUHJvcGVydHlBY2Nlc3Nv
cnMKLSAgICAgICAgICAgICAgQGZpbmFsCi0gICAgICAgICAgICAqLwotICAgICAgICBwbGF0Zm9y
bS5oYXNQcm9wZXJ0eUFjY2Vzc29ycyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFwbGF0Zm9ybS5k
ZWZpbmVQcm9wZXJ0eSkgewotICAgICAgICAgICAgcGxhdGZvcm0uaGFzUHJvcGVydHlBY2Nlc3Nv
cnMgPSBmYWxzZTsKLQotICAgICAgICAgICAgcGxhdGZvcm0uZGVmaW5lUHJvcGVydHkgPSBmdW5j
dGlvbihvYmosIGtleU5hbWUsIGRlc2MpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWRlc2MuZ2V0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ialtrZXlOYW1lXSA9IGRlc2MudmFsdWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgcGxhdGZvcm0uZGVm
aW5lUHJvcGVydHkuaXNTaW11bGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KEVtYmVyLkVOVi5NQU5EQVRPUllfU0VUVEVSICYmICFwbGF0Zm9ybS5oYXNQcm9wZXJ0eUFjY2Vz
c29ycykgewotICAgICAgICAgICAgRW1iZXIuRU5WLk1BTkRBVE9SWV9TRVRURVIgPSBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmNyZWF0ZSA9IGNyZWF0ZTsKLSAgICAg
ICAgX19leHBvcnRzX18ucGxhdGZvcm0gPSBwbGF0Zm9ybTsKLSAgICB9KTsKLSAgICBkZWZpbmUo
ImVtYmVyLW1ldGFsL3Byb3BlcnRpZXMiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJl
ci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9ldmVudHMiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X3NldCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVu
ZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5jeTJfXy5NRVRBX0tFWTsK
LSAgICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVuY3kyX18ubWV0YTsKLSAgICAgICAgdmFyIHBs
YXRmb3JtID0gX19kZXBlbmRlbmN5M19fLnBsYXRmb3JtOwotICAgICAgICB2YXIgb3ZlcnJpZGVD
aGFpbnMgPSBfX2RlcGVuZGVuY3k0X18ub3ZlcnJpZGVDaGFpbnM7Ci0gICAgICAgIHZhciBnZXQg
PSBfX2RlcGVuZGVuY3k1X18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Nl9f
LnNldDsKLQotICAgICAgICB2YXIgbWV0YUZvciA9IG1ldGEsCi0gICAgICAgIG9iamVjdERlZmlu
ZVByb3BlcnR5ID0gcGxhdGZvcm0uZGVmaW5lUHJvcGVydHk7Ci0KLSAgICAgICAgdmFyIE1BTkRB
VE9SWV9TRVRURVIgPSBFbWJlci5FTlYuTUFOREFUT1JZX1NFVFRFUjsKLQotICAgICAgICAvLyAu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Ci0gICAgICAgIC8vIERFU0NSSVBUT1IKLSAgICAgICAgLy8KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgT2JqZWN0cyBvZiB0aGlzIHR5cGUgY2FuIGltcGxlbWVudCBhbiBpbnRlcmZhY2Ug
dG8gcmVzcG9uZCB0byByZXF1ZXN0cyB0bwotICAgICAgICAgICAgICBnZXQgYW5kIHNldC4gVGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBzaW1wbGUgcHJvcGVydGllcy4KLQotICAg
ICAgICAgICAgICBZb3UgZ2VuZXJhbGx5IHdvbid0IG5lZWQgdG8gY3JlYXRlIG9yIHN1YmNsYXNz
IHRoaXMgZGlyZWN0bHkuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIERlc2NyaXB0b3IKLSAgICAg
ICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICBAY29uc3RydWN0b3IKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIERl
c2NyaXB0b3IoKSB7fQotCi0gICAgICAgIF9fZXhwb3J0c19fLkRlc2NyaXB0b3IgPSBEZXNjcmlw
dG9yOyAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uCi0gICAgICAgIC8vIERFRklOSU5HIFBST1BFUlRJRVMgQVBJCi0gICAgICAgIC8v
Ci0KLSAgICAgICAgdmFyIE1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJT04gPSBFbWJlci5NQU5EQVRP
UllfU0VUVEVSX0ZVTkNUSU9OID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgIEVtYmVy
LmFzc2VydCgiWW91IG11c3QgdXNlIEVtYmVyLnNldCgpIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5
IChvZiAiICsgdGhpcyArICIpIiwgZmFsc2UpOwotICAgICAgICB9OwotCi0gICAgICAgIHZhciBE
RUZBVUxUX0dFVFRFUl9GVU5DVElPTiA9IEVtYmVyLkRFRkFVTFRfR0VUVEVSX0ZVTkNUSU9OID0g
ZnVuY3Rpb24gREVGQVVMVF9HRVRURVJfRlVOQ1RJT04obmFtZSkgewotICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBtZXRhID0gdGhpc1tNRVRBX0tF
WV07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGEgJiYgbWV0YS52YWx1ZXNbbmFtZV07Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBO
T1RFOiBUaGlzIGlzIGEgbG93LWxldmVsIG1ldGhvZCB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRo
ZSBBUEkuIFlvdSBhbG1vc3QKLSAgICAgICAgICAgICAgbmV2ZXIgd2FudCB0byBjYWxsIHRoaXMg
bWV0aG9kIGRpcmVjdGx5LiBJbnN0ZWFkIHlvdSBzaG91bGQgdXNlCi0gICAgICAgICAgICAgIGBF
bWJlci5taXhpbigpYCB0byBkZWZpbmUgbmV3IHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAg
RGVmaW5lcyBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gVGhpcyBtZXRob2Qgd29ya3MgbXVjaCBs
aWtlIHRoZSBFUzUKLSAgICAgICAgICAgICAgYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpYCBtZXRo
b2QgZXhjZXB0IHRoYXQgaXQgY2FuIGFsc28gYWNjZXB0IGNvbXB1dGVkCi0gICAgICAgICAgICAg
IHByb3BlcnRpZXMgYW5kIG90aGVyIHNwZWNpYWwgZGVzY3JpcHRvcnMuCi0KLSAgICAgICAgICAg
ICAgTm9ybWFsbHkgdGhpcyBtZXRob2QgdGFrZXMgb25seSB0aHJlZSBwYXJhbWV0ZXJzLiBIb3dl
dmVyIGlmIHlvdSBwYXNzIGFuCi0gICAgICAgICAgICAgIGluc3RhbmNlIG9mIGBFbWJlci5EZXNj
cmlwdG9yYCBhcyB0aGUgdGhpcmQgcGFyYW0gdGhlbiB5b3UgY2FuIHBhc3MgYW4KLSAgICAgICAg
ICAgICAgb3B0aW9uYWwgdmFsdWUgYXMgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIuIFRoaXMgaXMgb2Z0
ZW4gbW9yZSBlZmZpY2llbnQgdGhhbgotICAgICAgICAgICAgICBjcmVhdGluZyBuZXcgZGVzY3Jp
cHRvciBoYXNoZXMgZm9yIGVhY2ggcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgIyMgRXhhbXBs
ZXMKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIC8vIEVTNSBj
b21wYXRpYmxlIG1vZGUKLSAgICAgICAgICAgICAgRW1iZXIuZGVmaW5lUHJvcGVydHkoY29udGFj
dCwgJ2ZpcnN0TmFtZScsIHsKLSAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKLSAgICAg
ICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAotICAgICAgICAgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCi0gICAgICAgICAgICAgICAgdmFsdWU6ICdDaGFybGVzJwotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICAvLyBkZWZpbmUgYSBzaW1wbGUgcHJvcGVydHkKLSAgICAg
ICAgICAgICAgRW1iZXIuZGVmaW5lUHJvcGVydHkoY29udGFjdCwgJ2xhc3ROYW1lJywgdW5kZWZp
bmVkLCAnSm9sbGV5Jyk7Ci0KLSAgICAgICAgICAgICAgLy8gZGVmaW5lIGEgY29tcHV0ZWQgcHJv
cGVydHkKLSAgICAgICAgICAgICAgRW1iZXIuZGVmaW5lUHJvcGVydHkoY29udGFjdCwgJ2Z1bGxO
YW1lJywgRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmlyc3ROYW1lKycgJyt0aGlzLmxhc3ROYW1lOwotICAgICAgICAgICAgICB9KS5wcm9w
ZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykpOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGRlZmluZVByb3BlcnR5
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IG9iaiB0aGUgb2JqZWN0IHRvIGRlZmluZSB0aGlzIHByb3BlcnR5IG9uLiBUaGlzIG1heSBiZSBh
IHByb3RvdHlwZS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgdGhlIG5h
bWUgb2YgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRGVzY3JpcHRv
cn0gW2Rlc2NdIGFuIGluc3RhbmNlIG9mIGBFbWJlci5EZXNjcmlwdG9yYCAodHlwaWNhbGx5IGEK
LSAgICAgICAgICAgICAgICBjb21wdXRlZCBwcm9wZXJ0eSkgb3IgYW4gRVM1IGRlc2NyaXB0b3Iu
Ci0gICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGlzIG9yIGBkYXRhYCBidXQgbm90
IGJvdGguCi0gICAgICAgICAgICAgIEBwYXJhbSB7Kn0gW2RhdGFdIHNvbWV0aGluZyBvdGhlciB0
aGFuIGEgZGVzY3JpcHRvciwgdGhhdCB3aWxsCi0gICAgICAgICAgICAgICAgYmVjb21lIHRoZSBl
eHBsaWNpdCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5LgotICAgICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBkZXNjLCBkYXRhLCBtZXRhKSB7
Ci0gICAgICAgICAgICB2YXIgZGVzY3MsIGV4aXN0aW5nRGVzYywgd2F0Y2hpbmcsIHZhbHVlOwot
Ci0gICAgICAgICAgICBpZiAoIW1ldGEpIAotICAgICAgICAgICAgICAgIG1ldGEgPSBtZXRhRm9y
KG9iaik7Ci0gICAgICAgICAgICBkZXNjcyA9IG1ldGEuZGVzY3M7Ci0gICAgICAgICAgICBleGlz
dGluZ0Rlc2MgPSBtZXRhLmRlc2NzW2tleU5hbWVdOwotICAgICAgICAgICAgd2F0Y2hpbmcgPSBt
ZXRhLndhdGNoaW5nW2tleU5hbWVdID4gMDsKLQotICAgICAgICAgICAgaWYgKGV4aXN0aW5nRGVz
YyBpbnN0YW5jZW9mIERlc2NyaXB0b3IpIHsKLSAgICAgICAgICAgICAgICBleGlzdGluZ0Rlc2Mu
dGVhcmRvd24ob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGRlc2MgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBk
ZXNjOwotCi0gICAgICAgICAgICAgICAgZGVzY3Nba2V5TmFtZV0gPSBkZXNjOwotICAgICAgICAg
ICAgICAgIGlmIChNQU5EQVRPUllfU0VUVEVSICYmIHdhdGNoaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG9iamVjdERlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ZW51bWVyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCAvLyBtYWtlIGVudW1l
cmFibGUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgb2JqW2tleU5hbWVdID0gdW5kZWZpbmVkOyAvLyBtYWtlIGVu
dW1lcmFibGUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2Muc2V0
dXApIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy5zZXR1cChvYmosIGtleU5hbWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVz
Y3Nba2V5TmFtZV0gPSB1bmRlZmluZWQ7IC8vIHNoYWRvdyBkZXNjcmlwdG9yIGluIHByb3RvCi0g
ICAgICAgICAgICAgICAgaWYgKGRlc2MgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGRhdGE7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKE1BTkRBVE9SWV9TRVRURVIg
JiYgd2F0Y2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEudmFsdWVzW2tleU5h
bWVdID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdERlZmluZVByb3BlcnR5
KG9iaiwga2V5TmFtZSwgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogTUFOREFUT1JZX1NFVFRFUl9GVU5DVElP
TiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IERFRkFVTFRfR0VUVEVSX0ZVTkNU
SU9OKGtleU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXlOYW1lXSA9IGRh
dGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlc2M7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Y29tcGF0aWJpbGl0eSB3aXRoIEVTNQotICAgICAgICAgICAgICAgICAgICBvYmplY3REZWZpbmVQ
cm9wZXJ0eShvYmosIGtleU5hbWUsIGRlc2MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gaWYga2V5IGlzIGJlaW5nIHdhdGNoZWQsIG92ZXJyaWRl
IGNoYWlucyB0aGF0Ci0gICAgICAgICAgICAvLyB3ZXJlIGluaXRpYWxpemVkIHdpdGggdGhlIHBy
b3RvdHlwZQotICAgICAgICAgICAgaWYgKHdhdGNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgb3Zl
cnJpZGVDaGFpbnMob2JqLCBrZXlOYW1lLCBtZXRhKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVGhlIGB2YWx1ZWAgcGFzc2VkIHRvIHRoZSBgZGlkRGVmaW5lUHJvcGVydHlgIGhv
b2sgaXMKLSAgICAgICAgICAgIC8vIGVpdGhlciB0aGUgZGVzY3JpcHRvciBvciBkYXRhLCB3aGlj
aGV2ZXIgd2FzIHBhc3NlZC4KLSAgICAgICAgICAgIGlmIChvYmouZGlkRGVmaW5lUHJvcGVydHkp
IHsKLSAgICAgICAgICAgICAgICBvYmouZGlkRGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCB2
YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0
eTsgLyoqCi0gICAgICAgICAgICAgIFVzZWQgaW50ZXJuYWxseSB0byBhbGxvdyBjaGFuZ2luZyBw
cm9wZXJ0aWVzIGluIGEgYmFja3dhcmRzIGNvbXBhdGlibGUgd2F5LCBhbmQgcHJpbnQgYSBoZWxw
ZnVsCi0gICAgICAgICAgICAgIGRlcHJlY2F0aW9uIHdhcm5pbmcuCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBkZXByZWNhdGVQcm9wZXJ0eQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
b2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIHRoZSBkZXByZWNhdGVkIHByb3BlcnR5IHRvLgotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwcmVjYXRlZEtleSBUaGUgcHJvcGVydHkgdG8g
YWRkIChhbmQgcHJpbnQgZGVwcmVjYXRpb24gd2FybmluZ3MgdXBvbiBhY2Nlc3NpbmcpLgotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmV3S2V5IFRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwg
YmUgYWxpYXNlZC4KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0KLSAg
ICAgICAgZnVuY3Rpb24gZGVwcmVjYXRlUHJvcGVydHkob2JqZWN0LCBkZXByZWNhdGVkS2V5LCBu
ZXdLZXkpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHsKLSAgICAgICAgICAg
ICAgICBFbWJlci5kZXByZWNhdGUoJ1VzYWdlIG9mIGAnICsgZGVwcmVjYXRlZEtleSArICdgIGlz
IGRlcHJlY2F0ZWQsIHVzZSBgJyArIG5ld0tleSArICdgIGluc3RlYWQuJyk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybS5oYXNQcm9wZXJ0eUFjY2Vzc29ycykgewot
ICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwgZGVwcmVjYXRlZEtleSwgewot
ICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAg
ICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldChvYmplY3QsIG5ld0tleSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0KG9iamVjdCwgbmV3S2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18uZGVwcmVjYXRlUHJvcGVydHkgPSBkZXByZWNhdGVQcm9wZXJ0eTsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyIsCi0gICAgWyJlbWJlci1tZXRh
bC91dGlscyIsICJlbWJlci1tZXRhbC9ldmVudHMiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXJfc2V0
IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5j
eTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5jeTFfXy5NRVRBX0tFWTsKLSAg
ICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3kxX18uZ3VpZEZvcjsKLSAgICAgICAgdmFy
IHRyeUZpbmFsbHkgPSBfX2RlcGVuZGVuY3kxX18udHJ5RmluYWxseTsKLSAgICAgICAgdmFyIHNl
bmRFdmVudCA9IF9fZGVwZW5kZW5jeTJfXy5zZW5kRXZlbnQ7Ci0gICAgICAgIHZhciBsaXN0ZW5l
cnNVbmlvbiA9IF9fZGVwZW5kZW5jeTJfXy5saXN0ZW5lcnNVbmlvbjsKLSAgICAgICAgdmFyIGxp
c3RlbmVyc0RpZmYgPSBfX2RlcGVuZGVuY3kyX18ubGlzdGVuZXJzRGlmZjsKLSAgICAgICAgdmFy
IE9ic2VydmVyU2V0ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFy
IGJlZm9yZU9ic2VydmVyU2V0ID0gbmV3IE9ic2VydmVyU2V0KCk7Ci0gICAgICAgIHZhciBvYnNl
cnZlclNldCA9IG5ldyBPYnNlcnZlclNldCgpOwotICAgICAgICB2YXIgZGVmZXJyZWQgPSAwOwot
Ci0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gUFJPUEVSVFkgQ0hBTkdFUwotICAgICAgICAvLwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0
IGJlZm9yZSBhbiBvYmplY3QgcHJvcGVydHkgaXMgYWJvdXQgdG8gY2hhbmdlLgotICAgICAgICAg
ICAgICBJdCB3aWxsIG5vdGlmeSBhbnkgYmVmb3JlIG9ic2VydmVycyBhbmQgcHJlcGFyZSBjYWNo
ZXMgYW1vbmcgb3RoZXIgdGhpbmdzLgotCi0gICAgICAgICAgICAgIE5vcm1hbGx5IHlvdSB3aWxs
IG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHkgYnV0IGlmIGZvciBzb21lCi0g
ICAgICAgICAgICAgIHJlYXNvbiB5b3UgY2FuJ3QgZGlyZWN0bHkgd2F0Y2ggYSBwcm9wZXJ0eSB5
b3UgY2FuIGludm9rZSB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICBtYW51YWxseSBhbG9uZyB3
aXRoIGBFbWJlci5wcm9wZXJ0eURpZENoYW5nZSgpYCB3aGljaCB5b3Ugc2hvdWxkIGNhbGwganVz
dAotICAgICAgICAgICAgICBhZnRlciB0aGUgcHJvcGVydHkgdmFsdWUgY2hhbmdlcy4KLQotICAg
ICAgICAgICAgICBAbWV0aG9kIHByb3BlcnR5V2lsbENoYW5nZQotICAgICAgICAgICAgICBAZm9y
IEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB3aXRo
IHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgY2hhbmdlCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgKG9yIHBhdGgpIHRoYXQgd2lsbCBjaGFuZ2Uu
Ci0gICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAgICAgICAqLwotICAgICAgICBm
dW5jdGlvbiBwcm9wZXJ0eVdpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICB2
YXIgbSA9IG9ialtNRVRBX0tFWV0sCi0gICAgICAgICAgICB3YXRjaGluZyA9IChtICYmIG0ud2F0
Y2hpbmdba2V5TmFtZV0gPiAwKSB8fCBrZXlOYW1lID09PSAnbGVuZ3RoJywKLSAgICAgICAgICAg
IHByb3RvID0gbSAmJiBtLnByb3RvLAotICAgICAgICAgICAgZGVzYyA9IG0gJiYgbS5kZXNjc1tr
ZXlOYW1lXTsKLQotICAgICAgICAgICAgaWYgKCF3YXRjaGluZykgewotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwcm90byA9PT0gb2JqKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGRlc2MgJiYgZGVzYy53aWxsQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgZGVzYy53aWxsQ2hh
bmdlKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXBlbmRlbnRL
ZXlzV2lsbENoYW5nZShvYmosIGtleU5hbWUsIG0pOwotICAgICAgICAgICAgY2hhaW5zV2lsbENo
YW5nZShvYmosIGtleU5hbWUsIG0pOwotICAgICAgICAgICAgbm90aWZ5QmVmb3JlT2JzZXJ2ZXJz
KG9iaiwga2V5TmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAg
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQganVzdCBhZnRlciBhbiBvYmplY3QgcHJvcGVydHkgaGFz
IGNoYW5nZWQuCi0gICAgICAgICAgICAgIEl0IHdpbGwgbm90aWZ5IGFueSBvYnNlcnZlcnMgYW5k
IGNsZWFyIGNhY2hlcyBhbW9uZyBvdGhlciB0aGluZ3MuCi0KLSAgICAgICAgICAgICAgTm9ybWFs
bHkgeW91IHdpbGwgbm90IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSBidXQgaWYg
Zm9yIHNvbWUKLSAgICAgICAgICAgICAgcmVhc29uIHlvdSBjYW4ndCBkaXJlY3RseSB3YXRjaCBh
IHByb3BlcnR5IHlvdSBjYW4gaW52b2tlIHRoaXMgbWV0aG9kCi0gICAgICAgICAgICAgIG1hbnVh
bGx5IGFsb25nIHdpdGggYEVtYmVyLnByb3BlcnR5V2lsbENoYW5nZSgpYCB3aGljaCB5b3Ugc2hv
dWxkIGNhbGwganVzdAotICAgICAgICAgICAgICBiZWZvcmUgdGhlIHByb3BlcnR5IHZhbHVlIGNo
YW5nZXMuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBwcm9wZXJ0eURpZENoYW5nZQotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhl
IG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgY2hhbmdlCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgKG9yIHBhdGgpIHRoYXQg
d2lsbCBjaGFuZ2UuCi0gICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAgICAgICAq
LwotICAgICAgICBmdW5jdGlvbiBwcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5hbWUpIHsKLSAg
ICAgICAgICAgIHZhciBtID0gb2JqW01FVEFfS0VZXSwKLSAgICAgICAgICAgIHdhdGNoaW5nID0g
KG0gJiYgbS53YXRjaGluZ1trZXlOYW1lXSA+IDApIHx8IGtleU5hbWUgPT09ICdsZW5ndGgnLAot
ICAgICAgICAgICAgcHJvdG8gPSBtICYmIG0ucHJvdG8sCi0gICAgICAgICAgICBkZXNjID0gbSAm
JiBtLmRlc2NzW2tleU5hbWVdOwotCi0gICAgICAgICAgICBpZiAocHJvdG8gPT09IG9iaikgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
c2hvdWxkbid0IHRoaXMgbWVhbiB0aGF0IHdlJ3JlIHdhdGNoaW5nIHRoaXMga2V5PwotICAgICAg
ICAgICAgaWYgKGRlc2MgJiYgZGVzYy5kaWRDaGFuZ2UpIHsKLSAgICAgICAgICAgICAgICBkZXNj
LmRpZENoYW5nZShvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCF3YXRjaGluZyAmJiBrZXlOYW1lICE9PSAnbGVuZ3RoJykgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVwZW5kZW50S2V5c0RpZENoYW5n
ZShvYmosIGtleU5hbWUsIG0pOwotICAgICAgICAgICAgY2hhaW5zRGlkQ2hhbmdlKG9iaiwga2V5
TmFtZSwgbSwgZmFsc2UpOwotICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKG9iaiwga2V5TmFt
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgV0lMTF9TRUVOLCBESURfU0VFTjsKLQotICAg
ICAgICAvLyBjYWxsZWQgd2hlbmV2ZXIgYSBwcm9wZXJ0eSBpcyBhYm91dCB0byBjaGFuZ2UgdG8g
Y2xlYXIgdGhlIGNhY2hlIG9mIGFueSBkZXBlbmRlbnQga2V5cyAoYW5kIG5vdGlmeSB0aG9zZSBw
cm9wZXJ0aWVzIG9mIGNoYW5nZXMsIGV0Yy4uLikKLSAgICAgICAgZnVuY3Rpb24gZGVwZW5kZW50
S2V5c1dpbGxDaGFuZ2Uob2JqLCBkZXBLZXksIG1ldGEpIHsKLSAgICAgICAgICAgIGlmIChvYmou
aXNEZXN0cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgc2VlbiA9IFdJTExfU0VFTiwgdG9wID0gIXNlZW47Ci0gICAgICAg
ICAgICBpZiAodG9wKSB7Ci0gICAgICAgICAgICAgICAgc2VlbiA9IFdJTExfU0VFTiA9IHt9Owot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaXRlckRlcHMocHJvcGVydHlXaWxsQ2hhbmdlLCBv
YmosIGRlcEtleSwgc2VlbiwgbWV0YSk7Ci0gICAgICAgICAgICBpZiAodG9wKSB7Ci0gICAgICAg
ICAgICAgICAgV0lMTF9TRUVOID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIGNhbGxlZCB3aGVuZXZlciBhIHByb3BlcnR5IGhhcyBqdXN0IGNoYW5nZWQgdG8g
dXBkYXRlIGRlcGVuZGVudCBrZXlzCi0gICAgICAgIGZ1bmN0aW9uIGRlcGVuZGVudEtleXNEaWRD
aGFuZ2Uob2JqLCBkZXBLZXksIG1ldGEpIHsKLSAgICAgICAgICAgIGlmIChvYmouaXNEZXN0cm95
aW5nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgc2VlbiA9IERJRF9TRUVOLCB0b3AgPSAhc2VlbjsKLSAgICAgICAgICAgIGlmICh0
b3ApIHsKLSAgICAgICAgICAgICAgICBzZWVuID0gRElEX1NFRU4gPSB7fTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGl0ZXJEZXBzKHByb3BlcnR5RGlkQ2hhbmdlLCBvYmosIGRlcEtleSwg
c2VlbiwgbWV0YSk7Ci0gICAgICAgICAgICBpZiAodG9wKSB7Ci0gICAgICAgICAgICAgICAgRElE
X1NFRU4gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gaXRlckRlcHMobWV0aG9kLCBvYmosIGRlcEtleSwgc2VlbiwgbWV0YSkgewotICAgICAgICAg
ICAgdmFyIGd1aWQgPSBndWlkRm9yKG9iaik7Ci0gICAgICAgICAgICBpZiAoIXNlZW5bZ3VpZF0p
IAotICAgICAgICAgICAgICAgIHNlZW5bZ3VpZF0gPSB7fTsKLSAgICAgICAgICAgIGlmIChzZWVu
W2d1aWRdW2RlcEtleV0pIAotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHNl
ZW5bZ3VpZF1bZGVwS2V5XSA9IHRydWU7Ci0KLSAgICAgICAgICAgIHZhciBkZXBzID0gbWV0YS5k
ZXBzOwotICAgICAgICAgICAgZGVwcyA9IGRlcHMgJiYgZGVwc1tkZXBLZXldOwotICAgICAgICAg
ICAgaWYgKGRlcHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGVwcykgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IG1ldGEuZGVzY3Nba2V5XTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlc2MgJiYgZGVzYy5fc3VzcGVuZGVkID09PSBvYmopIAotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZChv
YmosIGtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gY2hhaW5zV2lsbENoYW5nZShvYmosIGtleU5hbWUsIG0pIHsKLSAg
ICAgICAgICAgIGlmICghKG0uaGFzT3duUHJvcGVydHkoJ2NoYWluV2F0Y2hlcnMnKSAmJgotICAg
ICAgICAgICAgbS5jaGFpbldhdGNoZXJzW2tleU5hbWVdKSkgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG5vZGVzID0gbS5jaGFpbldh
dGNoZXJzW2tleU5hbWVdLAotICAgICAgICAgICAgZXZlbnRzID0gW10sCi0gICAgICAgICAgICBp
LCBsOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgbm9kZXNbaV0ud2lsbENoYW5nZShldmVudHMpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXZlbnRzLmxlbmd0aDsg
aSA8IGw7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZShldmVu
dHNbaV0sIGV2ZW50c1tpICsgMV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gY2hhaW5zRGlkQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSwgc3VwcHJlc3NFdmVu
dHMpIHsKLSAgICAgICAgICAgIGlmICghKG0gJiYgbS5oYXNPd25Qcm9wZXJ0eSgnY2hhaW5XYXRj
aGVycycpICYmCi0gICAgICAgICAgICBtLmNoYWluV2F0Y2hlcnNba2V5TmFtZV0pKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbm9k
ZXMgPSBtLmNoYWluV2F0Y2hlcnNba2V5TmFtZV0sCi0gICAgICAgICAgICBldmVudHMgPSBzdXBw
cmVzc0V2ZW50cyA/IG51bGwgOiBbXSwKLSAgICAgICAgICAgIGksIGw7Ci0KLSAgICAgICAgICAg
IGZvciAoaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBub2Rlc1tpXS5kaWRDaGFuZ2UoZXZlbnRzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHN1cHByZXNzRXZlbnRzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXZlbnRzLmxlbmd0aDsg
aSA8IGw7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKGV2ZW50
c1tpXSwgZXZlbnRzW2kgKyAxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBvdmVycmlkZUNoYWlucyhvYmosIGtleU5hbWUsIG0pIHsKLSAgICAgICAgICAg
IGNoYWluc0RpZENoYW5nZShvYmosIGtleU5hbWUsIG0sIHRydWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2QgYmVnaW5Qcm9wZXJ0eUNoYW5nZXMKLSAg
ICAgICAgICAgICAgQGNoYWluYWJsZQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYmVnaW5Qcm9wZXJ0eUNoYW5nZXMoKSB7Ci0gICAgICAg
ICAgICBkZWZlcnJlZCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEBtZXRob2QgZW5kUHJvcGVydHlDaGFuZ2VzCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBlbmRQcm9wZXJ0eUNoYW5nZXMoKSB7Ci0gICAg
ICAgICAgICBkZWZlcnJlZC0tOwotICAgICAgICAgICAgaWYgKGRlZmVycmVkIDw9IDApIHsKLSAg
ICAgICAgICAgICAgICBiZWZvcmVPYnNlcnZlclNldC5jbGVhcigpOwotICAgICAgICAgICAgICAg
IG9ic2VydmVyU2V0LmZsdXNoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgTWFrZSBhIHNlcmllcyBvZiBwcm9wZXJ0eSBjaGFuZ2VzIHRv
Z2V0aGVyIGluIGFuCi0gICAgICAgICAgICAgIGV4Y2VwdGlvbi1zYWZlIHdheS4KLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmNoYW5nZVByb3BlcnRp
ZXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgb2JqMS5zZXQoJ2ZvbycsIG1heUJsb3dV
cFdoZW5TZXQpOwotICAgICAgICAgICAgICAgIG9iajIuc2V0KCdiYXInLCBiYXopOwotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBj
aGFuZ2VQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNr
Ci0gICAgICAgICAgICAgIEBwYXJhbSBbYmluZGluZ10KLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIGNoYW5nZVByb3BlcnRpZXMoY2IsIGJpbmRpbmcpIHsKLSAgICAgICAgICAgIGJl
Z2luUHJvcGVydHlDaGFuZ2VzKCk7Ci0gICAgICAgICAgICB0cnlGaW5hbGx5KGNiLCBlbmRQcm9w
ZXJ0eUNoYW5nZXMsIGJpbmRpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbm90
aWZ5QmVmb3JlT2JzZXJ2ZXJzKG9iaiwga2V5TmFtZSkgewotICAgICAgICAgICAgaWYgKG9iai5p
c0Rlc3Ryb3lpbmcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBrZXlOYW1lICsgJzpiZWZvcmUnLCBsaXN0ZW5l
cnMsIGRpZmY7Ci0gICAgICAgICAgICBpZiAoZGVmZXJyZWQpIHsKLSAgICAgICAgICAgICAgICBs
aXN0ZW5lcnMgPSBiZWZvcmVPYnNlcnZlclNldC5hZGQob2JqLCBrZXlOYW1lLCBldmVudE5hbWUp
OwotICAgICAgICAgICAgICAgIGRpZmYgPSBsaXN0ZW5lcnNEaWZmKG9iaiwgZXZlbnROYW1lLCBs
aXN0ZW5lcnMpOwotICAgICAgICAgICAgICAgIHNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgW29i
aiwga2V5TmFtZV0sIGRpZmYpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBzZW5kRXZlbnQob2JqLCBldmVudE5hbWUsIFtvYmosIGtleU5hbWVdKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG5vdGlmeU9ic2VydmVycyhvYmosIGtl
eU5hbWUpIHsKLSAgICAgICAgICAgIGlmIChvYmouaXNEZXN0cm95aW5nKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgZXZlbnROYW1l
ID0ga2V5TmFtZSArICc6Y2hhbmdlJywgbGlzdGVuZXJzOwotICAgICAgICAgICAgaWYgKGRlZmVy
cmVkKSB7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gb2JzZXJ2ZXJTZXQuYWRkKG9iaiwg
a2V5TmFtZSwgZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICBsaXN0ZW5lcnNVbmlvbihvYmos
IGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2VuZEV2ZW50KG9iaiwgZXZlbnROYW1lLCBbb2JqLCBrZXlOYW1lXSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5wcm9wZXJ0eVdpbGxDaGFu
Z2UgPSBwcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0gICAgICAgIF9fZXhwb3J0c19fLnByb3BlcnR5RGlk
Q2hhbmdlID0gcHJvcGVydHlEaWRDaGFuZ2U7Ci0gICAgICAgIF9fZXhwb3J0c19fLm92ZXJyaWRl
Q2hhaW5zID0gb3ZlcnJpZGVDaGFpbnM7Ci0gICAgICAgIF9fZXhwb3J0c19fLmJlZ2luUHJvcGVy
dHlDaGFuZ2VzID0gYmVnaW5Qcm9wZXJ0eUNoYW5nZXM7Ci0gICAgICAgIF9fZXhwb3J0c19fLmVu
ZFByb3BlcnR5Q2hhbmdlcyA9IGVuZFByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgX19leHBvcnRz
X18uY2hhbmdlUHJvcGVydGllcyA9IGNoYW5nZVByb3BlcnRpZXM7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9lcnJvciIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioK
LSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBN
RVRBX0tFWSA9IF9fZGVwZW5kZW5jeTJfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFyIEVtYmVyRXJy
b3IgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZ2V0OwotCi0g
ICAgICAgIHZhciBNQU5EQVRPUllfU0VUVEVSID0gRW1iZXIuRU5WLk1BTkRBVE9SWV9TRVRURVI7
Ci0KLSAgICAgICAgdmFyIElTX0dMT0JBTF9QQVRIID0gL14oW0EtWiRdfChbMC05XVtBLVokXSkp
LipbXC5dLzsKLSAgICAgICAgdmFyIEhBU19USElTID0gJ3RoaXMuJzsKLSAgICAgICAgdmFyIEZJ
UlNUX0tFWSA9IC9eKFteXC5dKykvOwotCi0gICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gR0VUIEFO
RCBTRVQKLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgcGxhdGZvcm0gdGhh
dCBzdXBwb3J0cyBhY2Nlc3NvcnMgd2UgY2FuIHVzZSB0aG9zZS4KLSAgICAgICAgLy8gT3RoZXJ3
aXNlIHNpbXVsYXRlIGFjY2Vzc29ycyBieSBsb29raW5nIHVwIHRoZSBwcm9wZXJ0eSBkaXJlY3Rs
eSBvbiB0aGUKLSAgICAgICAgLy8gb2JqZWN0LgotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gSWYgdGhlIHByb3Bl
cnR5IGlzIGNvbXB1dGVkLAotICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gd2lsbCBiZSBpbnZv
a2VkLiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgYnV0IHRoZQotICAgICAgICAgICAg
ICBvYmplY3QgaW1wbGVtZW50cyB0aGUgYHVua25vd25Qcm9wZXJ0eWAgbWV0aG9kIHRoZW4gdGhh
dCB3aWxsIGJlIGludm9rZWQuCi0KLSAgICAgICAgICAgICAgSWYgeW91IHBsYW4gdG8gcnVuIG9u
IElFOCBhbmQgb2xkZXIgYnJvd3NlcnMgdGhlbiB5b3Ugc2hvdWxkIHVzZSB0aGlzCi0gICAgICAg
ICAgICAgIG1ldGhvZCBhbnl0aW1lIHlvdSB3YW50IHRvIHJldHJpZXZlIGEgcHJvcGVydHkgb24g
YW4gb2JqZWN0IHRoYXQgeW91IGRvbid0Ci0gICAgICAgICAgICAgIGtub3cgZm9yIHN1cmUgaXMg
cHJpdmF0ZS4gKFByb3BlcnRpZXMgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZSAnXycKLSAg
ICAgICAgICAgICAgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4pCi0KLSAgICAgICAgICAgICAgT24g
YWxsIG5ld2VyIGJyb3dzZXJzLCB5b3Ugb25seSBuZWVkIHRvIHVzZSB0aGlzIG1ldGhvZCB0byBy
ZXRyaWV2ZQotICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGlmIHRoZSBwcm9wZXJ0eSBtaWdodCBu
b3QgYmUgZGVmaW5lZCBvbiB0aGUgb2JqZWN0IGFuZCB5b3Ugd2FudAotICAgICAgICAgICAgICB0
byByZXNwZWN0IHRoZSBgdW5rbm93blByb3BlcnR5YCBoYW5kbGVyLiBPdGhlcndpc2UgeW91IGNh
biBpZ25vcmUgdGhpcwotICAgICAgICAgICAgICBtZXRob2QuCi0KLSAgICAgICAgICAgICAgTm90
ZSB0aGF0IGlmIHRoZSBvYmplY3QgaXRzZWxmIGlzIGB1bmRlZmluZWRgLCB0aGlzIG1ldGhvZCB3
aWxsIHRocm93Ci0gICAgICAgICAgICAgIGFuIGVycm9yLgotCi0gICAgICAgICAgICAgIEBtZXRo
b2QgZ2V0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtP
YmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJldHJpZXZlIGZyb20uCi0gICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdG8gcmV0cmlldmUKLSAgICAg
ICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgcHJvcGVydHkgdmFsdWUgb3IgYG51bGxgLgot
ICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmosIGtleU5h
bWUpIHsKLSAgICAgICAgICAgIC8vIEhlbHBlcnMgdGhhdCBvcGVyYXRlIHdpdGggJ3RoaXMnIHdp
dGhpbiBhbiAjZWFjaAotICAgICAgICAgICAgaWYgKGtleU5hbWUgPT09ICcnKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFr
ZXlOYW1lICYmICdzdHJpbmcnID09PSB0eXBlb2Ygb2JqKSB7Ci0gICAgICAgICAgICAgICAga2V5
TmFtZSA9IG9iajsKLSAgICAgICAgICAgICAgICBvYmogPSBudWxsOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIkNhbm5vdCBjYWxsIGdldCB3aXRoICIgKyBrZXlO
YW1lICsgIiBrZXkuIiwgISFrZXlOYW1lKTsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ2Fu
bm90IGNhbGwgZ2V0IHdpdGggJyIgKyBrZXlOYW1lICsgIicgb24gYW4gdW5kZWZpbmVkIG9iamVj
dC4iLCBvYmogIT09IHVuZGVmaW5lZCk7Ci0KLSAgICAgICAgICAgIGlmIChvYmogPT09IG51bGwp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gX2dldFBhdGgob2JqLCBrZXlOYW1lKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG1ldGEgPSBvYmpbTUVUQV9LRVldLCBkZXNjID0g
bWV0YSAmJiBtZXRhLmRlc2NzW2tleU5hbWVdLCByZXQ7Ci0KLSAgICAgICAgICAgIGlmIChkZXNj
ID09PSB1bmRlZmluZWQgJiYga2V5TmFtZS5pbmRleE9mKCcuJykgIT09IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIF9nZXRQYXRoKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChkZXNjKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0
KG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChNQU5EQVRPUllfU0VUVEVSICYmIG1ldGEgJiYgbWV0YS53YXRjaGluZ1trZXlOYW1lXSA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWV0YS52YWx1ZXNba2V5TmFtZV07Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gb2JqW2tleU5h
bWVdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IHVu
ZGVmaW5lZCAmJgotICAgICAgICAgICAgICAgICdvYmplY3QnID09PSB0eXBlb2Ygb2JqICYmICEo
a2V5TmFtZSBpbiBvYmopICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmoudW5rbm93blByb3Bl
cnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoudW5rbm93blByb3BlcnR5KGtl
eU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gQ3VycmVudGx5IHVzZWQg
b25seSBieSBFbWJlciBEYXRhIHRlc3RzCi0gICAgICAgIGlmIChFbWJlci5jb25maWcub3ZlcnJp
ZGVBY2Nlc3NvcnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmdldCA9IGdldDsKLSAgICAgICAgICAg
IEVtYmVyLmNvbmZpZy5vdmVycmlkZUFjY2Vzc29ycygpOwotICAgICAgICAgICAgZ2V0ID0gRW1i
ZXIuZ2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIE5vcm1hbGl6
ZXMgYSB0YXJnZXQvcGF0aCBwYWlyIHRvIHJlZmxlY3QgdGhhdCBhY3R1YWwgdGFyZ2V0L3BhdGgg
dGhhdCBzaG91bGQKLSAgICAgICAgICAgICAgYmUgb2JzZXJ2ZWQsIGV0Yy4gVGhpcyB0YWtlcyBp
bnRvIGFjY291bnQgcGFzc2luZyBpbiBnbG9iYWwgcHJvcGVydHkKLSAgICAgICAgICAgICAgcGF0
aHMgKGkuZS4gYSBwYXRoIGJlZ2lubmluZyB3aXRoIGEgY2FwdGlhbCBsZXR0ZXIgbm90IGRlZmlu
ZWQgb24gdGhlCi0gICAgICAgICAgICAgIHRhcmdldCkuCi0KLSAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgQG1ldGhvZCBub3JtYWxpemVUdXBsZQotICAgICAgICAgICAgICBA
Zm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIGN1cnJl
bnQgdGFyZ2V0LiBNYXkgYmUgYG51bGxgLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
cGF0aCBBIHBhdGggb24gdGhlIHRhcmdldCBvciBhIGdsb2JhbCBwcm9wZXJ0eSBwYXRoLgotICAg
ICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gYSB0ZW1wb3JhcnkgYXJyYXkgd2l0aCB0aGUgbm9y
bWFsaXplZCB0YXJnZXQvcGF0aCBwYWlyLgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rp
b24gbm9ybWFsaXplVHVwbGUodGFyZ2V0LCBwYXRoKSB7Ci0gICAgICAgICAgICB2YXIgaGFzVGhp
cyA9IHBhdGguaW5kZXhPZihIQVNfVEhJUykgPT09IDAsCi0gICAgICAgICAgICBpc0dsb2JhbCA9
ICFoYXNUaGlzICYmIElTX0dMT0JBTF9QQVRILnRlc3QocGF0aCksCi0gICAgICAgICAgICBrZXk7
Ci0KLSAgICAgICAgICAgIGlmICghdGFyZ2V0IHx8IGlzR2xvYmFsKSAKLSAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBFbWJlci5sb29rdXA7Ci0gICAgICAgICAgICBpZiAoaGFzVGhpcykgCi0gICAg
ICAgICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoNSk7Ci0KLSAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT09IEVtYmVyLmxvb2t1cCkgewotICAgICAgICAgICAgICAgIGtleSA9IHBhdGgubWF0Y2go
RklSU1RfS0VZKVswXTsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXQodGFyZ2V0LCBrZXkp
OwotICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGtleS5sZW5ndGggKyAxKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbXVzdCByZXR1cm4gc29tZSBraW5kIG9mIHBh
dGggdG8gYmUgdmFsaWQgZWxzZSBvdGhlciB0aGluZ3Mgd2lsbCBicmVhay4KLSAgICAgICAgICAg
IGlmICghcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCkgCi0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVtYmVyRXJyb3IoJ1BhdGggY2Fubm90IGJlIGVtcHR5Jyk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBbIHRhcmdldCwgcGF0aCBdOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gX2dl
dFBhdGgocm9vdCwgcGF0aCkgewotICAgICAgICAgICAgdmFyIGhhc1RoaXMsIHBhcnRzLCB0dXBs
ZSwgaWR4LCBsZW47Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJvb3QgYW5kIHBh
dGggaXMgYSBrZXkgbmFtZSwgcmV0dXJuIHRoYXQKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGZy
b20gdGhlIGdsb2JhbCBvYmplY3QuCi0gICAgICAgICAgICAvLyBFLmcuIGdldCgnRW1iZXInKSAt
PiBFbWJlcgotICAgICAgICAgICAgaWYgKHJvb3QgPT09IG51bGwgJiYgcGF0aC5pbmRleE9mKCcu
JykgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldChFbWJlci5sb29rdXAsIHBh
dGgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkZXRlY3QgY29tcGxpY2F0ZWQg
cGF0aHMgYW5kIG5vcm1hbGl6ZSB0aGVtCi0gICAgICAgICAgICBoYXNUaGlzID0gcGF0aC5pbmRl
eE9mKEhBU19USElTKSA9PT0gMDsKLQotICAgICAgICAgICAgaWYgKCFyb290IHx8IGhhc1RoaXMp
IHsKLSAgICAgICAgICAgICAgICB0dXBsZSA9IG5vcm1hbGl6ZVR1cGxlKHJvb3QsIHBhdGgpOwot
ICAgICAgICAgICAgICAgIHJvb3QgPSB0dXBsZVswXTsKLSAgICAgICAgICAgICAgICBwYXRoID0g
dHVwbGVbMV07Ci0gICAgICAgICAgICAgICAgdHVwbGUubGVuZ3RoID0gMDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcGFydHMgPSBwYXRoLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICBs
ZW4gPSBwYXJ0cy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKGlkeCA9IDA7IHJvb3QgIT0gbnVs
bCAmJiBpZHggPCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgcm9vdCA9IGdldChyb290
LCBwYXJ0c1tpZHhdLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAocm9vdCAmJiByb290Lmlz
RGVzdHJveWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJvb3Q7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRXaXRoRGVmYXVsdChyb290LCBrZXksIGRl
ZmF1bHRWYWx1ZSkgewotICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KHJvb3QsIGtleSk7Ci0K
LSAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmdldFdpdGhEZWZhdWx0ID0g
Z2V0V2l0aERlZmF1bHQ7Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBnZXQ7Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmdldCA9IGdldDsKLSAgICAgICAgX19leHBvcnRzX18ubm9ybWFs
aXplVHVwbGUgPSBub3JtYWxpemVUdXBsZTsKLSAgICAgICAgX19leHBvcnRzX18uX2dldFBhdGgg
PSBfZ2V0UGF0aDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL3Byb3BlcnR5X3Nl
dCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIs
ICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9lcnJvciIsICJleHBvcnRzIl0sCi0g
ICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5j
eTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywg
X19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldFBhdGggPSBfX2Rl
cGVuZGVuY3kyX18uX2dldFBhdGg7Ci0gICAgICAgIHZhciBNRVRBX0tFWSA9IF9fZGVwZW5kZW5j
eTNfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFyIHByb3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5k
ZW5jeTRfXy5wcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0gICAgICAgIHZhciBwcm9wZXJ0eURpZENoYW5n
ZSA9IF9fZGVwZW5kZW5jeTRfXy5wcm9wZXJ0eURpZENoYW5nZTsKLSAgICAgICAgdmFyIGRlZmlu
ZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5NV9fLmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIg
RW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBN
QU5EQVRPUllfU0VUVEVSID0gRW1iZXIuRU5WLk1BTkRBVE9SWV9TRVRURVI7Ci0gICAgICAgIHZh
ciBJU19HTE9CQUwgPSAvXihbQS1aJF18KFswLTldW0EtWiRdKSkvOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGFuIG9iamVjdCwg
cmVzcGVjdGluZyBjb21wdXRlZCBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIGFuZCBub3RpZnlp
bmcgb2JzZXJ2ZXJzIGFuZCBvdGhlciBsaXN0ZW5lcnMgb2YgdGhlIGNoYW5nZS4gSWYgdGhlCi0g
ICAgICAgICAgICAgIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIGJ1dCB0aGUgb2JqZWN0IGltcGxl
bWVudHMgdGhlIGBzZXRVbmtub3duUHJvcGVydHlgCi0gICAgICAgICAgICAgIG1ldGhvZCB0aGVu
IHRoYXQgd2lsbCBiZSBpbnZva2VkIGFzIHdlbGwuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBz
ZXQKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gb2JqIFRoZSBvYmplY3QgdG8gbW9kaWZ5LgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IHRvIHNldAotICAgICAgICAgICAgICBAcGFyYW0g
e09iamVjdH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldAotICAgICAgICAgICAgICBAcmV0dXJuIHtP
YmplY3R9IHRoZSBwYXNzZWQgdmFsdWUuCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgc2V0
ID0gZnVuY3Rpb24gc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUsIHRvbGVyYW50KSB7Ci0gICAgICAg
ICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoIlBhdGggJyIgKyBvYmogKyAiJyBtdXN0IGJlIGdsb2JhbCBpZiBubyBvYmogaXMg
Z2l2ZW4uIiwgSVNfR0xPQkFMLnRlc3Qob2JqKSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBr
ZXlOYW1lOwotICAgICAgICAgICAgICAgIGtleU5hbWUgPSBvYmo7Ci0gICAgICAgICAgICAgICAg
b2JqID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJD
YW5ub3QgY2FsbCBzZXQgd2l0aCAiICsga2V5TmFtZSArICIga2V5LiIsICEha2V5TmFtZSk7Ci0K
LSAgICAgICAgICAgIGlmICghb2JqKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNldFBhdGgo
b2JqLCBrZXlOYW1lLCB2YWx1ZSwgdG9sZXJhbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV0sIGRlc2MgPSBtZXRhICYmIG1ldGEuZGVzY3Nb
a2V5TmFtZV0sCi0gICAgICAgICAgICBpc1Vua25vd24sIGN1cnJlbnRWYWx1ZTsKLQotICAgICAg
ICAgICAgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCAmJiBrZXlOYW1lLmluZGV4T2YoJy4nKSAhPT0g
LTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0UGF0aChvYmosIGtleU5hbWUsIHZhbHVl
LCB0b2xlcmFudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgi
WW91IG5lZWQgdG8gcHJvdmlkZSBhbiBvYmplY3QgYW5kIGtleSB0byBgc2V0YC4iLCAhIW9iaiAm
JiBrZXlOYW1lICE9PSB1bmRlZmluZWQpOwotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCdjYWxs
aW5nIHNldCBvbiBkZXN0cm95ZWQgb2JqZWN0JywgIW9iai5pc0Rlc3Ryb3llZCk7Ci0KLSAgICAg
ICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBkZXNjLnNl
dChvYmosIGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsICYmIHZh
bHVlICE9PSB1bmRlZmluZWQgJiYgb2JqW2tleU5hbWVdID09PSB2YWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaXNVbmtub3duID0gJ29iamVjdCcgPT09IHR5cGVvZiBvYmogJiYgIShrZXlOYW1lIGlu
IG9iaik7Ci0KLSAgICAgICAgICAgICAgICAvLyBzZXRVbmtub3duUHJvcGVydHkgaXMgY2FsbGVk
IGlmIGBvYmpgIGlzIGFuIG9iamVjdCwKLSAgICAgICAgICAgICAgICAvLyB0aGUgcHJvcGVydHkg
ZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgYW5kIHRoZQotICAgICAgICAgICAgICAgIC8vIGBzZXRV
bmtub3duUHJvcGVydHlgIG1ldGhvZCBleGlzdHMgb24gdGhlIG9iamVjdAotICAgICAgICAgICAg
ICAgIGlmIChpc1Vua25vd24gJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai5zZXRVbmtub3du
UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqLnNldFVua25vd25Qcm9wZXJ0eShr
ZXlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhICYmIG1ldGEu
d2F0Y2hpbmdba2V5TmFtZV0gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChNQU5EQVRP
UllfU0VUVEVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBtZXRh
LnZhbHVlc1trZXlOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IG9ialtrZXlOYW1lXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHRyaWdnZXIgYSBjaGFuZ2Ug
aWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAh
PT0gY3VycmVudFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxD
aGFuZ2Uob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNQU5EQVRP
UllfU0VUVEVSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjdXJyZW50VmFs
dWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleU5hbWUgaW4gb2JqKSkgfHwgIW9iai5wcm9wZXJ0eUlz
RW51bWVyYWJsZShrZXlOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIG51bGwsIHZhbHVlKTsgLy8gc2V0dXAgbWFuZGF0
b3J5IHNldHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEudmFsdWVzW2tleU5hbWVdID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5TmFtZV0gPSB2YWx1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5RGlkQ2hhbmdlKG9iaiwga2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvYmpba2V5TmFtZV0gPSB2
YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gQ3VycmVudGx5IHVzZWQgb25seSBi
eSBFbWJlciBEYXRhIHRlc3RzCi0gICAgICAgIC8vIEVTNlRPRE86IFZlcmlmeSBzdGlsbCB0cnVl
Ci0gICAgICAgIGlmIChFbWJlci5jb25maWcub3ZlcnJpZGVBY2Nlc3NvcnMpIHsKLSAgICAgICAg
ICAgIEVtYmVyLnNldCA9IHNldDsKLSAgICAgICAgICAgIEVtYmVyLmNvbmZpZy5vdmVycmlkZUFj
Y2Vzc29ycygpOwotICAgICAgICAgICAgc2V0ID0gRW1iZXIuc2V0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gc2V0UGF0aChyb290LCBwYXRoLCB2YWx1ZSwgdG9sZXJhbnQpIHsKLSAg
ICAgICAgICAgIHZhciBrZXlOYW1lOwotCi0gICAgICAgICAgICAvLyBnZXQgdGhlIGxhc3QgcGFy
dCBvZiB0aGUgcGF0aAotICAgICAgICAgICAga2V5TmFtZSA9IHBhdGguc2xpY2UocGF0aC5sYXN0
SW5kZXhPZignLicpICsgMSk7Ci0KLSAgICAgICAgICAgIC8vIGdldCB0aGUgZmlyc3QgcGFydCBv
ZiB0aGUgcGFydAotICAgICAgICAgICAgcGF0aCA9IChwYXRoID09PSBrZXlOYW1lKSA/IGtleU5h
bWUgOiBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gKGtleU5hbWUubGVuZ3RoICsgMSkpOwot
Ci0gICAgICAgICAgICAvLyB1bmxlc3MgdGhlIHBhdGggaXMgdGhpcywgbG9vayB1cCB0aGUgZmly
c3QgcGFydCB0bwotICAgICAgICAgICAgLy8gZ2V0IHRoZSByb290Ci0gICAgICAgICAgICBpZiAo
cGF0aCAhPT0gJ3RoaXMnKSB7Ci0gICAgICAgICAgICAgICAgcm9vdCA9IGdldFBhdGgocm9vdCwg
cGF0aCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgha2V5TmFtZSB8fCBrZXlO
YW1lLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9y
KCdQcm9wZXJ0eSBzZXQgZmFpbGVkOiBZb3UgcGFzc2VkIGFuIGVtcHR5IHBhdGgnKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFyb290KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRvbGVyYW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcignUHJv
cGVydHkgc2V0IGZhaWxlZDogb2JqZWN0IGluIHBhdGggIicgKyBwYXRoICsgJyIgY291bGQgbm90
IGJlIGZvdW5kIG9yIHdhcyBkZXN0cm95ZWQuJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc2V0KHJvb3QsIGtleU5hbWUsIHZhbHVlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBFcnJvci10b2xlcmFudCBm
b3JtIG9mIGBFbWJlci5zZXRgLiBXaWxsIG5vdCBibG93IHVwIGlmIGFueSBwYXJ0IG9mIHRoZQot
ICAgICAgICAgICAgICBjaGFpbiBpcyBgdW5kZWZpbmVkYCwgYG51bGxgLCBvciBkZXN0cm95ZWQu
Ci0KLSAgICAgICAgICAgICAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZCB3aGVuIHN5bmNpbmcgYmlu
ZGluZ3MsIHdoaWNoIG1heSB0cnkgdG8gdXBkYXRlIGFmdGVyCi0gICAgICAgICAgICAgIGFuIG9i
amVjdCBoYXMgYmVlbiBkZXN0cm95ZWQuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCB0cnlTZXQK
LSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
b2JqIFRoZSBvYmplY3QgdG8gbW9kaWZ5LgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
cGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byBzZXQKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHRyeVNldChyb290LCBwYXRoLCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIHNldChy
b290LCBwYXRoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNf
Xy50cnlTZXQgPSB0cnlTZXQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLnNldCA9IHNldDsKLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL3J1bl9sb29wIiwKLSAgICBbImVtYmVyLW1ldGFs
L2NvcmUiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXIt
bWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBhcHBseSA9IF9f
ZGVwZW5kZW5jeTJfXy5hcHBseTsKLSAgICAgICAgdmFyIGluZGV4T2YgPSBfX2RlcGVuZGVuY3kz
X18uaW5kZXhPZjsKLSAgICAgICAgdmFyIGJlZ2luUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRl
bmN5NF9fLmJlZ2luUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIgZW5kUHJvcGVydHlDaGFu
Z2VzID0gX19kZXBlbmRlbmN5NF9fLmVuZFByb3BlcnR5Q2hhbmdlczsKLQotICAgICAgICBmdW5j
dGlvbiBvbkJlZ2luKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIHJ1bi5jdXJyZW50UnVuTG9vcCA9
IGN1cnJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBvbkVuZChjdXJyZW50LCBu
ZXh0KSB7Ci0gICAgICAgICAgICBydW4uY3VycmVudFJ1bkxvb3AgPSBuZXh0OwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRVM2VE9ETzogc2hvdWxkIEJhY2tidXJuZXIgYmVjb21lIGVzNj8KLSAg
ICAgICAgdmFyIEJhY2tidXJuZXIgPSByZXF1aXJlTW9kdWxlKCdiYWNrYnVybmVyJykuQmFja2J1
cm5lcjsKLSAgICAgICAgdmFyIGJhY2tidXJuZXIgPSBuZXcgQmFja2J1cm5lcihbJ3N5bmMnLCAn
YWN0aW9ucycsICdkZXN0cm95J10sIHsKLSAgICAgICAgICAgIHN5bmM6IHsKLSAgICAgICAgICAg
ICAgICBiZWZvcmU6IGJlZ2luUHJvcGVydHlDaGFuZ2VzLAotICAgICAgICAgICAgICAgIGFmdGVy
OiBlbmRQcm9wZXJ0eUNoYW5nZXMKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBkZWZhdWx0
UXVldWU6ICdhY3Rpb25zJywKLSAgICAgICAgICAgIG9uQmVnaW46IG9uQmVnaW4sCi0gICAgICAg
ICAgICBvbkVuZDogb25FbmQsCi0gICAgICAgICAgICBvbkVycm9yVGFyZ2V0OiBFbWJlciwKLSAg
ICAgICAgICAgIG9uRXJyb3JNZXRob2Q6ICdvbmVycm9yJwotICAgICAgICB9KTsKLSAgICAgICAg
dmFyIHNsaWNlID0gW10uc2xpY2U7Ci0gICAgICAgIHZhciBjb25jYXQgPSBbXS5jb25jYXQ7Ci0K
LSAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLgotICAgICAgICAvLyBydW4gLSB0aGlzIGlzIGlkZWFsbHkgdGhlIG9ubHkg
cHVibGljIEFQSSB0aGUgZGV2IHNlZXMKLSAgICAgICAgLy8KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgUnVucyB0aGUgcGFzc2VkIHRhcmdldCBhbmQgbWV0aG9kIGluc2lkZSBvZiBhIFJ1
bkxvb3AsIGVuc3VyaW5nIGFueQotICAgICAgICAgICAgICBkZWZlcnJlZCBhY3Rpb25zIGluY2x1
ZGluZyBiaW5kaW5ncyBhbmQgdmlld3MgdXBkYXRlcyBhcmUgZmx1c2hlZCBhdCB0aGUKLSAgICAg
ICAgICAgICAgZW5kLgotCi0gICAgICAgICAgICAgIE5vcm1hbGx5IHlvdSBzaG91bGQgbm90IG5l
ZWQgdG8gaW52b2tlIHRoaXMgbWV0aG9kIHlvdXJzZWxmLiBIb3dldmVyIGlmCi0gICAgICAgICAg
ICAgIHlvdSBhcmUgaW1wbGVtZW50aW5nIHJhdyBldmVudCBoYW5kbGVycyB3aGVuIGludGVyZmFj
aW5nIHdpdGggb3RoZXIKLSAgICAgICAgICAgICAgbGlicmFyaWVzIG9yIHBsdWdpbnMsIHlvdSBz
aG91bGQgcHJvYmFibHkgd3JhcCBhbGwgb2YgeW91ciBjb2RlIGluc2lkZSB0aGlzCi0gICAgICAg
ICAgICAgIGNhbGwuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gY29kZSB0byBiZSBleGVjdXRl
IHdpdGhpbiBhIFJ1bkxvb3AKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBjbGFzcyBydW4KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJl
cgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEBjb25zdHJ1Y3RvcgotICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gdGFyZ2V0IG9mIG1ldGhvZCB0byBj
YWxsCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgTWV0aG9k
IHRvIGludm9rZS4KLSAgICAgICAgICAgICAgICBNYXkgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmlu
Zy4gSWYgeW91IHBhc3MgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICB0aGVuIGl0IHdpbGwgYmUg
bG9va2VkIHVwIG9uIHRoZSBwYXNzZWQgdGFyZ2V0LgotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gW2FyZ3MqXSBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgeW91IHdpc2ggdG8gcGFzcyB0
byB0aGUgbWV0aG9kLgotICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHJldHVybiB2YWx1
ZSBmcm9tIGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uCi0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gcnVuOwotICAgICAgICBmdW5jdGlvbiBydW4o
KSB7Ci0gICAgICAgICAgICByZXR1cm4gYXBwbHkoYmFja2J1cm5lciwgYmFja2J1cm5lci5ydW4s
IGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgSWYg
bm8gcnVuLWxvb3AgaXMgcHJlc2VudCwgaXQgY3JlYXRlcyBhIG5ldyBvbmUuIElmIGEgcnVuIGxv
b3AgaXMKLSAgICAgICAgICAgICAgcHJlc2VudCBpdCB3aWxsIHF1ZXVlIGl0c2VsZiB0byBydW4g
b24gdGhlIGV4aXN0aW5nIHJ1bi1sb29wcyBhY3Rpb24KLSAgICAgICAgICAgICAgcXVldWUuCi0K
LSAgICAgICAgICAgICAgUGxlYXNlIG5vdGU6IFRoaXMgaXMgbm90IGZvciBub3JtYWwgdXNhZ2Us
IGFuZCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkuCi0KLSAgICAgICAgICAgICAgSWYgaW52b2tl
ZCB3aGVuIG5vdCB3aXRoaW4gYSBydW4gbG9vcDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIHJ1bi5qb2luKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IC8vIGNyZWF0ZXMgYSBuZXcgcnVuLWxvb3AKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIGNhbGxlZCB3aXRoaW4g
YW4gZXhpc3RpbmcgcnVuIGxvb3A6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBh
IG5ldyBydW4tbG9vcAotICAgICAgICAgICAgICAgIHJ1bi5qb2luKGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgLy8gam9pbnMgd2l0aCB0aGUgZXhpc3RpbmcgcnVuLWxvb3AsIGFuZCBx
dWV1ZXMgZm9yIGludm9jYXRpb24gb24KLSAgICAgICAgICAgICAgICAgIC8vIHRoZSBleGlzdGlu
ZyBydW4tbG9vcHMgYWN0aW9uIHF1ZXVlLgotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBqb2lu
Ci0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtP
YmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8gY2FsbAotICAgICAgICAgICAgICBA
cGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBpbnZva2UuCi0gICAgICAg
ICAgICAgICAgTWF5IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmcuIElmIHlvdSBwYXNzIGEgc3Ry
aW5nCi0gICAgICAgICAgICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBvbiB0aGUgcGFz
c2VkIHRhcmdldC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gQW55IGFk
ZGl0aW9uYWwgYXJndW1lbnRzIHlvdSB3aXNoIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC4KLSAgICAg
ICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBSZXR1cm4gdmFsdWUgZnJvbSBpbnZva2luZyB0aGUg
cGFzc2VkIGZ1bmN0aW9uLiBQbGVhc2Ugbm90ZSwKLSAgICAgICAgICAgICAgd2hlbiBjYWxsZWQg
d2l0aGluIGFuIGV4aXN0aW5nIGxvb3AsIG5vIHJldHVybiB2YWx1ZSBpcyBwb3NzaWJsZS4KLSAg
ICAgICAgICAgICovCi0gICAgICAgIHJ1bi5qb2luID0gZnVuY3Rpb24odGFyZ2V0LCBtZXRob2Qg
LyogYXJncyAqLwotICAgICAgICApIHsKLSAgICAgICAgICAgIGlmICghcnVuLmN1cnJlbnRSdW5M
b29wKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5KEVtYmVyLCBydW4sIGFyZ3VtZW50
cyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChh
cmd1bWVudHMpOwotICAgICAgICAgICAgYXJncy51bnNoaWZ0KCdhY3Rpb25zJyk7Ci0gICAgICAg
ICAgICBhcHBseShydW4sIHJ1bi5zY2hlZHVsZSwgYXJncyk7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFByb3ZpZGVzIGEgdXNlZnVsIHV0aWxpdHkgZm9yIHdoZW4g
aW50ZWdyYXRpbmcgd2l0aCBub24tRW1iZXIgbGlicmFyaWVzCi0gICAgICAgICAgICAgIHRoYXQg
cHJvdmlkZSBhc3luY2hyb25vdXMgY2FsbGJhY2tzLgotCi0gICAgICAgICAgICAgIEVtYmVyIHV0
aWxpemVzIGEgcnVuLWxvb3AgdG8gYmF0Y2ggYW5kIGNvYWxlc2NlIGNoYW5nZXMuIFRoaXMgd29y
a3MgYnkKLSAgICAgICAgICAgICAgbWFya2luZyB0aGUgc3RhcnQgYW5kIGVuZCBvZiBFbWJlci1y
ZWxhdGVkIEphdmFzY3JpcHQgZXhlY3V0aW9uLgotCi0gICAgICAgICAgICAgIFdoZW4gdXNpbmcg
ZXZlbnRzIHN1Y2ggYXMgYSBWaWV3J3MgY2xpY2sgaGFuZGxlciwgRW1iZXIgd3JhcHMgdGhlIGV2
ZW50Ci0gICAgICAgICAgICAgIGhhbmRsZXIgaW4gYSBydW4tbG9vcCwgYnV0IHdoZW4gaW50ZWdy
YXRpbmcgd2l0aCBub24tRW1iZXIgbGlicmFyaWVzIHRoaXMKLSAgICAgICAgICAgICAgY2FuIGJl
IHRlZGlvdXMuCi0KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMg
cmF0aGVyIHZlcmJvc2UgYnV0IGlzIHRoZSBjb3JyZWN0IHdheSB0byBjb21iaW5lCi0gICAgICAg
ICAgICAgIHRoaXJkLXBhcnR5IGV2ZW50cyBhbmQgRW1iZXIgY29kZS4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKLSAgICAgICAg
ICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKCl7Ci0gICAgICAgICAg
ICAgICAgcnVuKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICB0aGF0LmhhbmRsZVJlc2l6
ZSgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgVG8gcmVkdWNlIHRoZSBib2lsZXJwbGF0ZSwgdGhlIGZv
bGxvd2luZyBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYQotICAgICAgICAgICAgICBydW4tbG9v
cC13cmFwcGVkIGNhbGxiYWNrIGhhbmRsZXIuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgcnVuLmJpbmQodGhp
cywgdGhpcy5oYW5kbGVSZXNpemUpKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgQG1ldGhvZCBiaW5kCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8gY2FsbAot
ICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBp
bnZva2UuCi0gICAgICAgICAgICAgICAgTWF5IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmcuIElm
IHlvdSBwYXNzIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tl
ZCB1cCBvbiB0aGUgcGFzc2VkIHRhcmdldC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IFthcmdzKl0gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHlvdSB3aXNoIHRvIHBhc3MgdG8gdGhl
IG1ldGhvZC4KLSAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSByZXR1cm4gdmFsdWUgZnJv
bSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLiBQbGVhc2Ugbm90ZSwKLSAgICAgICAgICAg
ICAgd2hlbiBjYWxsZWQgd2l0aGluIGFuIGV4aXN0aW5nIGxvb3AsIG5vIHJldHVybiB2YWx1ZSBp
cyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAqLwot
ICAgICAgICBydW4uYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgbWV0aG9kIC8qIGFyZ3MqLwotICAg
ICAgICApIHsKLSAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpOwot
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBh
cHBseShydW4sIHJ1bi5qb2luLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTsK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcnVuLmJhY2tidXJuZXIgPSBi
YWNrYnVybmVyOwotICAgICAgICBydW4uY3VycmVudFJ1bkxvb3AgPSBudWxsOwotICAgICAgICBy
dW4ucXVldWVzID0gYmFja2J1cm5lci5xdWV1ZU5hbWVzOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBCZWdpbnMgYSBuZXcgUnVuTG9vcC4gQW55IGRlZmVycmVkIGFjdGlvbnMgaW52b2tl
ZCBhZnRlciB0aGUgYmVnaW4gd2lsbAotICAgICAgICAgICAgICBiZSBidWZmZXJlZCB1bnRpbCB5
b3UgaW52b2tlIGEgbWF0Y2hpbmcgY2FsbCB0byBgcnVuLmVuZCgpYC4gVGhpcyBpcwotICAgICAg
ICAgICAgICBhIGxvd2VyLWxldmVsIHdheSB0byB1c2UgYSBSdW5Mb29wIGluc3RlYWQgb2YgdXNp
bmcgYHJ1bigpYC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IHJ1bi5iZWdpbigpOwotICAgICAgICAgICAgICAvLyBjb2RlIHRvIGJlIGV4ZWN1dGUgd2l0aGlu
IGEgUnVuTG9vcAotICAgICAgICAgICAgICBydW4uZW5kKCk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgYmVnaW4KLSAgICAgICAgICAgICAgQHJldHVybiB7dm9p
ZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1bi5iZWdpbiA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgYmFja2J1cm5lci5iZWdpbigpOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBFbmRzIGEgUnVuTG9vcC4gVGhpcyBtdXN0IGJlIGNhbGxlZCBzb21ldGlt
ZSBhZnRlciB5b3UgY2FsbAotICAgICAgICAgICAgICBgcnVuLmJlZ2luKClgIHRvIGZsdXNoIGFu
eSBkZWZlcnJlZCBhY3Rpb25zLiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgd2F5Ci0gICAgICAgICAg
ICAgIHRvIHVzZSBhIFJ1bkxvb3AgaW5zdGVhZCBvZiB1c2luZyBgcnVuKClgLgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgcnVuLmJlZ2luKCk7Ci0gICAgICAg
ICAgICAgIC8vIGNvZGUgdG8gYmUgZXhlY3V0ZSB3aXRoaW4gYSBSdW5Mb29wCi0gICAgICAgICAg
ICAgIHJ1bi5lbmQoKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBlbmQKLSAgICAgICAgICAgICAgQHJldHVybiB7dm9pZH0KLSAgICAgICAgICAgICovCi0gICAg
ICAgIHJ1bi5lbmQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGJhY2tidXJuZXIuZW5kKCk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFycmF5IG9mIG5hbWVk
IHF1ZXVlcy4gVGhpcyBhcnJheSBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCBxdWV1ZXMK
LSAgICAgICAgICAgICAgYXJlIGZsdXNoZWQgYXQgdGhlIGVuZCBvZiB0aGUgUnVuTG9vcC4gWW91
IGNhbiBkZWZpbmUgeW91ciBvd24gcXVldWVzIGJ5Ci0gICAgICAgICAgICAgIHNpbXBseSBhZGRp
bmcgdGhlIHF1ZXVlIG5hbWUgdG8gdGhpcyBhcnJheS4gTm9ybWFsbHkgeW91IHNob3VsZCBub3Qg
bmVlZAotICAgICAgICAgICAgICB0byBpbnNwZWN0IG9yIG1vZGlmeSB0aGlzIHByb3BlcnR5Lgot
Ci0gICAgICAgICAgICAgIEBwcm9wZXJ0eSBxdWV1ZXMKLSAgICAgICAgICAgICAgQHR5cGUgQXJy
YXkKLSAgICAgICAgICAgICAgQGRlZmF1bHQgWydzeW5jJywgJ2FjdGlvbnMnLCAnZGVzdHJveSdd
Ci0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBZGRzIHRoZSBw
YXNzZWQgdGFyZ2V0L21ldGhvZCBhbmQgYW55IG9wdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgbmFt
ZWQKLSAgICAgICAgICAgICAgcXVldWUgdG8gYmUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiB0aGUg
UnVuTG9vcC4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkKLSAgICAgICAgICAgICAgc3RhcnRlZCBh
IFJ1bkxvb3Agd2hlbiBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uZSB3aWxsIGJlIHN0YXJ0ZWQgZm9y
IHlvdQotICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5LgotCi0gICAgICAgICAgICAgIEF0IHRo
ZSBlbmQgb2YgYSBSdW5Mb29wLCBhbnkgbWV0aG9kcyBzY2hlZHVsZWQgaW4gdGhpcyB3YXkgd2ls
bCBiZSBpbnZva2VkLgotICAgICAgICAgICAgICBNZXRob2RzIHdpbGwgYmUgaW52b2tlZCBpbiBh
biBvcmRlciBtYXRjaGluZyB0aGUgbmFtZWQgcXVldWVzIGRlZmluZWQgaW4KLSAgICAgICAgICAg
ICAgdGhlIGBydW4ucXVldWVzYCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZSgnc3luYycsIHRoaXMsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgZmlyc3Qg
UnVuTG9vcCBxdWV1ZSwgd2hlbiBiaW5kaW5ncyBhcmUgc3luY2VkCi0gICAgICAgICAgICAgICAg
Y29uc29sZS5sb2coInNjaGVkdWxlZCBvbiBzeW5jIHF1ZXVlIik7Ci0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZSgnYWN0aW9ucycsIHRoaXMsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgJ2Fj
dGlvbnMnIHF1ZXVlLCBhZnRlciBiaW5kaW5ncyBoYXZlIHN5bmNlZC4KLSAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygic2NoZWR1bGVkIG9uIGFjdGlvbnMgcXVldWUiKTsKLSAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgZnVuY3Rpb25zIHdpbGwgYmUgcnVu
IGluIG9yZGVyIGJhc2VkIG9uIHRoZSBydW4gcXVldWVzIG9yZGVyLgotICAgICAgICAgICAgICAv
LyBPdXRwdXQgd291bGQgYmU6Ci0gICAgICAgICAgICAgIC8vICAgc2NoZWR1bGVkIG9uIHN5bmMg
cXVldWUKLSAgICAgICAgICAgICAgLy8gICBzY2hlZHVsZWQgb24gYWN0aW9ucyBxdWV1ZQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHNjaGVkdWxlCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBxdWV1ZSBUaGUgbmFtZSBvZiB0aGUgcXVldWUgdG8gc2No
ZWR1bGUgYWdhaW5zdC4KLSAgICAgICAgICAgICAgICBEZWZhdWx0IHF1ZXVlcyBhcmUgJ3N5bmMn
IGFuZCAnYWN0aW9ucycKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRh
cmdldCBvYmplY3QgdG8gdXNlIGFzIHRoZSBjb250ZXh0IHdoZW4gaW52b2tpbmcgYSBtZXRob2Qu
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBtZXRob2QgVGhlIG1ldGhv
ZCB0byBpbnZva2UuIElmIHlvdSBwYXNzIGEgc3RyaW5nIGl0Ci0gICAgICAgICAgICAgICAgd2ls
bCBiZSByZXNvbHZlZCBvbiB0aGUgdGFyZ2V0IG9iamVjdCBhdCB0aGUgdGltZSB0aGUgc2NoZWR1
bGVkIGl0ZW0gaXMKLSAgICAgICAgICAgICAgICBpbnZva2VkIGFsbG93aW5nIHlvdSB0byBjaGFu
Z2UgdGhlIHRhcmdldCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFth
cmd1bWVudHMqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBxdWV1ZWQg
bWV0aG9kLgotICAgICAgICAgICAgICBAcmV0dXJuIHt2b2lkfQotICAgICAgICAgICAgKi8KLSAg
ICAgICAgcnVuLnNjaGVkdWxlID0gZnVuY3Rpb24ocXVldWUsIHRhcmdldCwgbWV0aG9kKSB7Ci0g
ICAgICAgICAgICBjaGVja0F1dG9SdW4oKTsKLSAgICAgICAgICAgIGFwcGx5KGJhY2tidXJuZXIs
IGJhY2tidXJuZXIuc2NoZWR1bGUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gVXNlZCBieSBnbG9iYWwgdGVzdCB0ZWFyZG93bgotICAgICAgICBydW4uaGFzU2NoZWR1bGVk
VGltZXJzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2J1cm5lci5oYXNU
aW1lcnMoKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBVc2VkIGJ5IGdsb2JhbCB0ZXN0IHRl
YXJkb3duCi0gICAgICAgIHJ1bi5jYW5jZWxUaW1lcnMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICBiYWNrYnVybmVyLmNhbmNlbFRpbWVycygpOwotICAgICAgICB9OwotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBJbW1lZGlhdGVseSBmbHVzaGVzIGFueSBldmVudHMgc2NoZWR1bGVk
IGluIHRoZSAnc3luYycgcXVldWUuIEJpbmRpbmdzCi0gICAgICAgICAgICAgIHVzZSB0aGlzIHF1
ZXVlIHNvIHRoaXMgbWV0aG9kIGlzIGEgdXNlZnVsIHdheSB0byBpbW1lZGlhdGVseSBmb3JjZSBh
bGwKLSAgICAgICAgICAgICAgYmluZGluZ3MgaW4gdGhlIGFwcGxpY2F0aW9uIHRvIHN5bmMuCi0K
LSAgICAgICAgICAgICAgWW91IHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFueXRpbWUgeW91IG5l
ZWQgYW55IGNoYW5nZWQgc3RhdGUgdG8gcHJvcGFnYXRlCi0gICAgICAgICAgICAgIHRocm91Z2hv
dXQgdGhlIGFwcCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcGFpbnRpbmcgdGhlIFVJICh3aGljaCBo
YXBwZW5zCi0gICAgICAgICAgICAgIGluIHRoZSBsYXRlciAncmVuZGVyJyBxdWV1ZSBhZGRlZCBi
eSB0aGUgYGVtYmVyLXZpZXdzYCBwYWNrYWdlKS4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIHJ1bi5zeW5jKCk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2Qgc3luYwotICAgICAgICAgICAgICBAcmV0dXJuIHt2b2lkfQotICAg
ICAgICAgICAgKi8KLSAgICAgICAgcnVuLnN5bmMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGlmIChiYWNrYnVybmVyLmN1cnJlbnRJbnN0YW5jZSkgewotICAgICAgICAgICAgICAgIGJhY2ti
dXJuZXIuY3VycmVudEluc3RhbmNlLnF1ZXVlcy5zeW5jLmZsdXNoKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEludm9rZXMgdGhlIHBh
c3NlZCB0YXJnZXQvbWV0aG9kIGFuZCBvcHRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgYSBzcGVjaWZp
ZWQKLSAgICAgICAgICAgICAgcGVyaW9kIGlmIHRpbWUuIFRoZSBsYXN0IHBhcmFtZXRlciBvZiB0
aGlzIG1ldGhvZCBtdXN0IGFsd2F5cyBiZSBhIG51bWJlcgotICAgICAgICAgICAgICBvZiBtaWxs
aXNlY29uZHMuCi0KLSAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhpcyBtZXRob2Qgd2hl
bmV2ZXIgeW91IG5lZWQgdG8gcnVuIHNvbWUgYWN0aW9uIGFmdGVyIGEKLSAgICAgICAgICAgICAg
cGVyaW9kIG9mIHRpbWUgaW5zdGVhZCBvZiB1c2luZyBgc2V0VGltZW91dCgpYC4gVGhpcyBtZXRo
b2Qgd2lsbCBlbnN1cmUgdGhhdAotICAgICAgICAgICAgICBpdGVtcyB0aGF0IGV4cGlyZSBkdXJp
bmcgdGhlIHNhbWUgc2NyaXB0IGV4ZWN1dGlvbiBjeWNsZSBhbGwgZXhlY3V0ZQotICAgICAgICAg
ICAgICB0b2dldGhlciwgd2hpY2ggaXMgb2Z0ZW4gbW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyBh
IHJlYWwgc2V0VGltZW91dC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIHJ1bi5sYXRlcihteUNvbnRleHQsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IC8vIGNvZGUgaGVyZSB3aWxsIGV4ZWN1dGUgd2l0aGluIGEgUnVuTG9vcCBpbiBhYm91dCA1MDBt
cyB3aXRoIHRoaXMgPT0gbXlDb250ZXh0Ci0gICAgICAgICAgICAgIH0sIDUwMCk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgbGF0ZXIKLSAgICAgICAgICAgICAg
QHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2QgdG8gaW52b2tlCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0byBp
bnZva2UuCi0gICAgICAgICAgICAgICAgSWYgeW91IHBhc3MgYSBzdHJpbmcgaXQgd2lsbCBiZSBy
ZXNvbHZlZCBvbiB0aGUKLSAgICAgICAgICAgICAgICB0YXJnZXQgYXQgdGhlIHRpbWUgdGhlIG1l
dGhvZCBpcyBpbnZva2VkLgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBP
cHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4KLSAgICAgICAgICAgICAg
QHBhcmFtIHtOdW1iZXJ9IHdhaXQgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LgotICAg
ICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IGEgc3RyaW5nIHlvdSBjYW4gdXNlIHRvIGNhbmNl
bCB0aGUgdGltZXIgaW4KLSAgICAgICAgICAgICAgICBgcnVuLmNhbmNlbGAgbGF0ZXIuCi0gICAg
ICAgICAgICAqLwotICAgICAgICBydW4ubGF0ZXIgPSBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCkg
ewotICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2tidXJuZXIsIGJhY2tidXJuZXIubGF0ZXIs
IGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNj
aGVkdWxlIGEgZnVuY3Rpb24gdG8gcnVuIG9uZSB0aW1lIGR1cmluZyB0aGUgY3VycmVudCBSdW5M
b29wLiBUaGlzIGlzIGVxdWl2YWxlbnQKLSAgICAgICAgICAgICAgdG8gY2FsbGluZyBgc2NoZWR1
bGVPbmNlYCB3aXRoIHRoZSAiYWN0aW9ucyIgcXVldWUuCi0KLSAgICAgICAgICAgICAgQG1ldGhv
ZCBvbmNlCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0
IG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9u
fFN0cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgIElm
IHlvdSBwYXNzIGEgc3RyaW5nIGl0IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlCi0gICAgICAgICAg
ICAgICAgdGFyZ2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KLSAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3Mg
dG8gdGhlIHRpbWVvdXQuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGltZXIgaW5m
b3JtYXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgICAg
ICAgICAgKi8KLSAgICAgICAgcnVuLm9uY2UgPSBmdW5jdGlvbih0YXJnZXQsIG1ldGhvZCkgewot
ICAgICAgICAgICAgY2hlY2tBdXRvUnVuKCk7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNl
LmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIGFyZ3MudW5zaGlmdCgnYWN0aW9ucycpOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2tidXJuZXIsIGJhY2tidXJuZXIuc2NoZWR1bGVP
bmNlLCBhcmdzKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU2No
ZWR1bGVzIGEgZnVuY3Rpb24gdG8gcnVuIG9uZSB0aW1lIGluIGEgZ2l2ZW4gcXVldWUgb2YgdGhl
IGN1cnJlbnQgUnVuTG9vcC4KLSAgICAgICAgICAgICAgQ2FsbGluZyB0aGlzIG1ldGhvZCB3aXRo
IHRoZSBzYW1lIHF1ZXVlL3RhcmdldC9tZXRob2QgY29tYmluYXRpb24gd2lsbCBoYXZlCi0gICAg
ICAgICAgICAgIG5vIGVmZmVjdCAocGFzdCB0aGUgaW5pdGlhbCBjYWxsKS4KLQotICAgICAgICAg
ICAgICBOb3RlIHRoYXQgYWx0aG91Z2ggeW91IGNhbiBwYXNzIG9wdGlvbmFsIGFyZ3VtZW50cyB0
aGVzZSB3aWxsIG5vdCBiZQotICAgICAgICAgICAgICBjb25zaWRlcmVkIHdoZW4gbG9va2luZyBm
b3IgZHVwbGljYXRlcy4gTmV3IGFyZ3VtZW50cyB3aWxsIHJlcGxhY2UgcHJldmlvdXMKLSAgICAg
ICAgICAgICAgY2FsbHMuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNheUhpID0gZnVuY3Rp
b24oKSB7IGNvbnNvbGUubG9nKCdoaScpOyB9Ci0gICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxl
T25jZSgnYWZ0ZXJSZW5kZXInLCBteUNvbnRleHQsIHNheUhpKTsKLSAgICAgICAgICAgICAgICBy
dW4uc2NoZWR1bGVPbmNlKCdhZnRlclJlbmRlcicsIG15Q29udGV4dCwgc2F5SGkpOwotICAgICAg
ICAgICAgICAgIC8vIHNheUhpIHdpbGwgb25seSBiZSBleGVjdXRlZCBvbmNlLCBpbiB0aGUgYWZ0
ZXJSZW5kZXIgcXVldWUgb2YgdGhlIFJ1bkxvb3AKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFsc28gbm90ZSB0aGF0IHBhc3NpbmcgYW4gYW5v
bnltb3VzIGZ1bmN0aW9uIHRvIGBydW4uc2NoZWR1bGVPbmNlYCB3aWxsCi0gICAgICAgICAgICAg
IG5vdCBwcmV2ZW50IGFkZGl0aW9uYWwgY2FsbHMgd2l0aCBhbiBpZGVudGljYWwgYW5vbnltb3Vz
IGZ1bmN0aW9uIGZyb20KLSAgICAgICAgICAgICAgc2NoZWR1bGluZyB0aGUgaXRlbXMgbXVsdGlw
bGUgdGltZXMsIGUuZy46Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBmdW5jdGlvbiBzY2hlZHVsZUl0KCkgewotICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVs
ZU9uY2UoJ2FjdGlvbnMnLCBteUNvbnRleHQsIGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygiQ2xv
c3VyZSIpOyB9KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzY2hlZHVsZUl0KCk7
Ci0gICAgICAgICAgICAgIHNjaGVkdWxlSXQoKTsKLSAgICAgICAgICAgICAgLy8gIkNsb3N1cmUi
IHdpbGwgcHJpbnQgdHdpY2UsIGV2ZW4gdGhvdWdoIHdlJ3JlIHVzaW5nIGBydW4uc2NoZWR1bGVP
bmNlYCwKLSAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgZnVuY3Rpb24gd2UgcGFzcyB0byBp
dCBpcyBhbm9ueW1vdXMgYW5kIHdvbid0IG1hdGNoIHRoZQotICAgICAgICAgICAgICAvLyBwcmV2
aW91c2x5IHNjaGVkdWxlZCBvcGVyYXRpb24uCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEF2YWlsYWJsZSBxdWV1ZXMsIGFuZCB0aGVpciBvcmRlciwgY2FuIGJlIGZvdW5kIGF0
IGBydW4ucXVldWVzYAotCi0gICAgICAgICAgICAgIEBtZXRob2Qgc2NoZWR1bGVPbmNlCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBbcXVldWVdIFRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0
byBzY2hlZHVsZSBhZ2FpbnN0LiBEZWZhdWx0IHF1ZXVlcyBhcmUgJ3N5bmMnIGFuZCAnYWN0aW9u
cycuCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9m
IHRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0
cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgIElmIHlv
dSBwYXNzIGEgc3RyaW5nIGl0IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlCi0gICAgICAgICAgICAg
ICAgdGFyZ2V0IGF0IHRoZSB0aW1lIHRoZSBtZXRob2QgaXMgaW52b2tlZC4KLSAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8g
dGhlIHRpbWVvdXQuCi0gICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGltZXIgaW5mb3Jt
YXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgcnVuLnNjaGVkdWxlT25jZSA9IGZ1bmN0aW9uKHF1ZXVlLCB0YXJnZXQs
IG1ldGhvZCkgewotICAgICAgICAgICAgY2hlY2tBdXRvUnVuKCk7Ci0gICAgICAgICAgICByZXR1
cm4gYXBwbHkoYmFja2J1cm5lciwgYmFja2J1cm5lci5zY2hlZHVsZU9uY2UsIGFyZ3VtZW50cyk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFNjaGVkdWxlcyBhbiBp
dGVtIHRvIHJ1biBmcm9tIHdpdGhpbiBhIHNlcGFyYXRlIHJ1biBsb29wLCBhZnRlcgotICAgICAg
ICAgICAgICBjb250cm9sIGhhcyBiZWVuIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uIFRoaXMgaXMg
ZXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICAgICAgICAgICAgIGBydW4ubGF0ZXJgIHdpdGggYSB3
YWl0IHRpbWUgb2YgMW1zLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgcnVuLm5leHQobXlDb250ZXh0LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAv
LyBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBuZXh0IHJ1biBsb29wLAotICAgICAgICAgICAg
ICAgIC8vIHdoaWNoIHdpbGwgYmUgc2NoZWR1bGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZQotICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgTXVsdGlw
bGUgb3BlcmF0aW9ucyBzY2hlZHVsZWQgd2l0aCBgcnVuLm5leHRgIHdpbGwgY29hbGVzY2UKLSAg
ICAgICAgICAgICAgaW50byB0aGUgc2FtZSBsYXRlciBydW4gbG9vcCwgYWxvbmcgd2l0aCBhbnkg
b3RoZXIgb3BlcmF0aW9ucwotICAgICAgICAgICAgICBzY2hlZHVsZWQgYnkgYHJ1bi5sYXRlcmAg
dGhhdCBleHBpcmUgcmlnaHQgYXJvdW5kIHRoZSBzYW1lCi0gICAgICAgICAgICAgIHRpbWUgdGhh
dCBgcnVuLm5leHRgIG9wZXJhdGlvbnMgd2lsbCBmaXJlLgotCi0gICAgICAgICAgICAgIE5vdGUg
dGhhdCB0aGVyZSBhcmUgb2Z0ZW4gYWx0ZXJuYXRpdmVzIHRvIHVzaW5nIGBydW4ubmV4dGAuCi0g
ICAgICAgICAgICAgIEZvciBpbnN0YW5jZSwgaWYgeW91J2QgbGlrZSB0byBzY2hlZHVsZSBhbiBv
cGVyYXRpb24gdG8gaGFwcGVuCi0gICAgICAgICAgICAgIGFmdGVyIGFsbCBET00gZWxlbWVudCBv
cGVyYXRpb25zIGhhdmUgY29tcGxldGVkIHdpdGhpbiB0aGUgY3VycmVudAotICAgICAgICAgICAg
ICBydW4gbG9vcCwgeW91IGNhbiBtYWtlIHVzZSBvZiB0aGUgYGFmdGVyUmVuZGVyYCBydW4gbG9v
cCBxdWV1ZSAoYWRkZWQKLSAgICAgICAgICAgICAgYnkgdGhlIGBlbWJlci12aWV3c2AgcGFja2Fn
ZSwgYWxvbmcgd2l0aCB0aGUgcHJlY2VkaW5nIGByZW5kZXJgIHF1ZXVlCi0gICAgICAgICAgICAg
IHdoZXJlIGFsbCB0aGUgRE9NIGVsZW1lbnQgb3BlcmF0aW9ucyBoYXBwZW4pLiBFeGFtcGxlOgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLk15Q29sbGVj
dGlvblZpZXcgPSBFbWJlci5Db2xsZWN0aW9uVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAg
IGRpZEluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgcnVuLnNj
aGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCB0aGlzLCAncHJvY2Vzc0NoaWxkRWxlbWVudHMnKTsK
LSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHByb2Nlc3NDaGlsZEVsZW1lbnRz
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0
aCBjb2xsZWN0aW9uVmlldydzIGNoaWxkIHZpZXcKLSAgICAgICAgICAgICAgICAgIC8vIGVsZW1l
bnRzIGFmdGVyIHRoZXkndmUgZmluaXNoZWQgcmVuZGVyaW5nLCB3aGljaAotICAgICAgICAgICAg
ICAgICAgLy8gY2FuJ3QgYmUgZG9uZSB3aXRoaW4gdGhlIENvbGxlY3Rpb25WaWV3J3MKLSAgICAg
ICAgICAgICAgICAgIC8vIGBkaWRJbnNlcnRFbGVtZW50YCBob29rIGJlY2F1c2UgdGhhdCBnZXRz
IHJ1bgotICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBjaGlsZCBlbGVtZW50cyBoYXZl
IGJlZW4gYWRkZWQgdG8gdGhlIERPTS4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBPbmUgYmVuZWZpdCBvZiB0
aGUgYWJvdmUgYXBwcm9hY2ggY29tcGFyZWQgdG8gdXNpbmcgYHJ1bi5uZXh0YCBpcwotICAgICAg
ICAgICAgICB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBET00vQ1NTIG9wZXJhdGlv
bnMgYmVmb3JlIHVucHJvY2Vzc2VkCi0gICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSByZW5kZXJl
ZCB0byB0aGUgc2NyZWVuLCB3aGljaCBtYXkgcHJldmVudCBmbGlja2VyaW5nIG9yCi0gICAgICAg
ICAgICAgIG90aGVyIGFydGlmYWN0cyBjYXVzZWQgYnkgZGVsYXlpbmcgcHJvY2Vzc2luZyB1bnRp
bCBhZnRlciByZW5kZXJpbmcuCi0KLSAgICAgICAgICAgICAgVGhlIG90aGVyIG1ham9yIGJlbmVm
aXQgdG8gdGhlIGFib3ZlIGFwcHJvYWNoIGlzIHRoYXQgYHJ1bi5uZXh0YAotICAgICAgICAgICAg
ICBpbnRyb2R1Y2VzIGFuIGVsZW1lbnQgb2Ygbm9uLWRldGVybWluaXNtLCB3aGljaCBjYW4gbWFr
ZSB0aGluZ3MgbXVjaAotICAgICAgICAgICAgICBoYXJkZXIgdG8gdGVzdCwgZHVlIHRvIGl0cyBy
ZWxpYW5jZSBvbiBgc2V0VGltZW91dGA7IGl0J3MgbXVjaCBoYXJkZXIKLSAgICAgICAgICAgICAg
dG8gZ3VhcmFudGVlIHRoZSBvcmRlciBvZiBzY2hlZHVsZWQgb3BlcmF0aW9ucyB3aGVuIHRoZXkg
YXJlIHNjaGVkdWxlZAotICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHJ1biBs
b29wLCBpLmUuIHdpdGggYHJ1bi5uZXh0YC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIG5leHQK
LSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2Qg
dG8gaW52b2tlCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2Qg
VGhlIG1ldGhvZCB0byBpbnZva2UuCi0gICAgICAgICAgICAgICAgSWYgeW91IHBhc3MgYSBzdHJp
bmcgaXQgd2lsbCBiZSByZXNvbHZlZCBvbiB0aGUKLSAgICAgICAgICAgICAgICB0YXJnZXQgYXQg
dGhlIHRpbWUgdGhlIG1ldGhvZCBpcyBpbnZva2VkLgotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4K
LSAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNl
IGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNhbmNlbGAuCi0gICAgICAgICAgICAqLwotICAgICAg
ICBydW4ubmV4dCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5j
YWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBhcmdzLnB1c2goMSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXBwbHkoYmFja2J1cm5lciwgYmFja2J1cm5lci5sYXRlciwgYXJncyk7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENhbmNlbHMgYSBzY2hlZHVsZWQgaXRl
bS4gTXVzdCBiZSBhIHZhbHVlIHJldHVybmVkIGJ5IGBydW4ubGF0ZXIoKWAsCi0gICAgICAgICAg
ICAgIGBydW4ub25jZSgpYCwgYHJ1bi5uZXh0KClgLCBgcnVuLmRlYm91bmNlKClgLCBvcgotICAg
ICAgICAgICAgICBgcnVuLnRocm90dGxlKClgLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgdmFyIHJ1bk5leHQgPSBydW4ubmV4dChteUNvbnRleHQsIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCi0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICBydW4uY2FuY2VsKHJ1bk5leHQpOwotCi0gICAgICAg
ICAgICAgIHZhciBydW5MYXRlciA9IHJ1bi5sYXRlcihteUNvbnRleHQsIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCi0gICAgICAgICAgICAgIH0s
IDUwMCk7Ci0gICAgICAgICAgICAgIHJ1bi5jYW5jZWwocnVuTGF0ZXIpOwotCi0gICAgICAgICAg
ICAgIHZhciBydW5PbmNlID0gcnVuLm9uY2UobXlDb250ZXh0LCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAvLyB3aWxsIG5vdCBiZSBleGVjdXRlZAotICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgcnVuLmNhbmNlbChydW5PbmNlKTsKLQotICAgICAgICAgICAgICB2YXIgdGhy
b3R0bGUgPSBydW4udGhyb3R0bGUobXlDb250ZXh0LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAvLyB3aWxsIG5vdCBiZSBleGVjdXRlZAotICAgICAgICAgICAgICB9LCAxLCBmYWxzZSk7
Ci0gICAgICAgICAgICAgIHJ1bi5jYW5jZWwodGhyb3R0bGUpOwotCi0gICAgICAgICAgICAgIHZh
ciBkZWJvdW5jZSA9IHJ1bi5kZWJvdW5jZShteUNvbnRleHQsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCi0gICAgICAgICAgICAgIH0sIDEpOwot
ICAgICAgICAgICAgICBydW4uY2FuY2VsKGRlYm91bmNlKTsKLQotICAgICAgICAgICAgICB2YXIg
ZGVib3VuY2VJbW1lZGlhdGUgPSBydW4uZGVib3VuY2UobXlDb250ZXh0LCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkIHNpbmNlIHdlIHBhc3NlZCBpbiB0
cnVlIChpbW1lZGlhdGUpCi0gICAgICAgICAgICAgIH0sIDEwMCwgdHJ1ZSk7Ci0gICAgICAgICAg
ICAgIC8vIHRoZSAxMDBtcyBkZWxheSB1bnRpbCB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGFn
YWluIHdpbGwgYmUgY2FuY2VsbGVkCi0gICAgICAgICAgICAgIHJ1bi5jYW5jZWwoZGVib3VuY2VJ
bW1lZGlhdGUpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNh
bmNlbAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdGltZXIgVGltZXIgb2JqZWN0IHRv
IGNhbmNlbAotICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGNhbmNlbGxl
ZCBvciBmYWxzZS91bmRlZmluZWQgaWYgaXQgd2Fzbid0IGZvdW5kCi0gICAgICAgICAgICAqLwot
ICAgICAgICBydW4uY2FuY2VsID0gZnVuY3Rpb24odGltZXIpIHsKLSAgICAgICAgICAgIHJldHVy
biBiYWNrYnVybmVyLmNhbmNlbCh0aW1lcik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIERlbGF5IGNhbGxpbmcgdGhlIHRhcmdldCBtZXRob2QgdW50aWwgdGhlIGRl
Ym91bmNlIHBlcmlvZCBoYXMgZWxhcHNlZAotICAgICAgICAgICAgICB3aXRoIG5vIGFkZGl0aW9u
YWwgZGVib3VuY2UgY2FsbHMuIElmIGBkZWJvdW5jZWAgaXMgY2FsbGVkIGFnYWluIGJlZm9yZQot
ICAgICAgICAgICAgICB0aGUgc3BlY2lmaWVkIHRpbWUgaGFzIGVsYXBzZWQsIHRoZSB0aW1lciBp
cyByZXNldCBhbmQgdGhlIGVudGlyZSBwZXJpb2QKLSAgICAgICAgICAgICAgbXVzdCBwYXNzIGFn
YWluIGJlZm9yZSB0aGUgdGFyZ2V0IG1ldGhvZCBpcyBjYWxsZWQuCi0KLSAgICAgICAgICAgICAg
VGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgd2hlbiBhbiBldmVudCBtYXkgYmUgY2FsbGVkIG11
bHRpcGxlIHRpbWVzCi0gICAgICAgICAgICAgIGJ1dCB0aGUgYWN0aW9uIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBvbmNlIHdoZW4gdGhlIGV2ZW50IGlzIGRvbmUgZmlyaW5nLgotICAgICAgICAgICAg
ICBBIGNvbW1vbiBleGFtcGxlIGlzIGZvciBzY3JvbGwgZXZlbnRzIHdoZXJlIHlvdSBvbmx5IHdh
bnQgdXBkYXRlcyB0bwotICAgICAgICAgICAgICBoYXBwZW4gb25jZSBzY3JvbGxpbmcgaGFzIGNl
YXNlZC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgdmFy
IG15RnVuYyA9IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZyh0aGlzLm5hbWUgKyAnIHJhbi4nKTsg
fTsKLSAgICAgICAgICAgICAgICB2YXIgbXlDb250ZXh0ID0ge25hbWU6ICdkZWJvdW5jZSd9Owot
Ci0gICAgICAgICAgICAgICAgcnVuLmRlYm91bmNlKG15Q29udGV4dCwgbXlGdW5jLCAxNTApOwot
Ci0gICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIDE1MG1zIHBhc3NlcwotCi0gICAgICAgICAg
ICAgICAgcnVuLmRlYm91bmNlKG15Q29udGV4dCwgbXlGdW5jLCAxNTApOwotCi0gICAgICAgICAg
ICAgICAgLy8gMTUwbXMgcGFzc2VzCi0gICAgICAgICAgICAgICAgLy8gbXlGdW5jIGlzIGludm9r
ZWQgd2l0aCBjb250ZXh0IG15Q29udGV4dAotICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUgbG9n
cyAnZGVib3VuY2UgcmFuLicgb25lIHRpbWUuCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEltbWVkaWF0ZSBhbGxvd3MgeW91IHRvIHJ1biB0aGUgZnVuY3Rpb24gaW1tZWRpYXRl
bHksIGJ1dCBkZWJvdW5jZQotICAgICAgICAgICAgICBvdGhlciBjYWxscyBmb3IgdGhpcyBmdW5j
dGlvbiB1bnRpbCB0aGUgd2FpdCB0aW1lIGhhcyBlbGFwc2VkLiBJZgotICAgICAgICAgICAgICBg
ZGVib3VuY2VgIGlzIGNhbGxlZCBhZ2FpbiBiZWZvcmUgdGhlIHNwZWNpZmllZCB0aW1lIGhhcyBl
bGFwc2VkLAotICAgICAgICAgICAgICB0aGUgdGltZXIgaXMgcmVzZXQgYW5kIHRoZSBlbnRpcmUg
cGVyaW9kIG11c3QgcGFzcyBhZ2FpbiBiZWZvcmUKLSAgICAgICAgICAgICAgdGhlIG1ldGhvZCBj
YW4gYmUgY2FsbGVkIGFnYWluLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICB2YXIgbXlGdW5jID0gZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKHRoaXMubmFt
ZSArICcgcmFuLicpOyB9OwotICAgICAgICAgICAgICAgIHZhciBteUNvbnRleHQgPSB7bmFtZTog
J2RlYm91bmNlJ307Ci0KLSAgICAgICAgICAgICAgICBydW4uZGVib3VuY2UobXlDb250ZXh0LCBt
eUZ1bmMsIDE1MCwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb25zb2xlIGxvZ3MgJ2Rl
Ym91bmNlIHJhbi4nIG9uZSB0aW1lIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgICAgIC8vIDEw
MG1zIHBhc3NlcwotCi0gICAgICAgICAgICAgICAgcnVuLmRlYm91bmNlKG15Q29udGV4dCwgbXlG
dW5jLCAxNTAsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgLy8gMTUwbXMgcGFzc2VzIGFuZCBu
b3RoaW5nIGVsc2UgaXMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIGFuZAotICAgICAgICAgICAgICAg
IC8vIHRoZSBkZWJvdW5jZWUgaXMgbm8gbG9uZ2VyIGJlaW5nIHdhdGNoZWQKLQotICAgICAgICAg
ICAgICAgIHJ1bi5kZWJvdW5jZShteUNvbnRleHQsIG15RnVuYywgMTUwLCB0cnVlKTsKLQotICAg
ICAgICAgICAgICAgIC8vIGNvbnNvbGUgbG9ncyAnZGVib3VuY2UgcmFuLicgb25lIHRpbWUgaW1t
ZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgLy8gMTUwbXMgcGFzc2VzIGFuZCBub3RoaW5nIGVs
c2UgaXMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIGFuZAotICAgICAgICAgICAgICAgIC8vIHRoZSBk
ZWJvdW5jZWUgaXMgbm8gbG9uZ2VyIGJlaW5nIHdhdGNoZWQKLQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBAbWV0aG9kIGRlYm91bmNlCi0gICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGludm9rZQotICAgICAgICAgICAg
ICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgot
ICAgICAgICAgICAgICAgIE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nLiBJZiB5b3UgcGFz
cyBhIHN0cmluZwotICAgICAgICAgICAgICAgIHRoZW4gaXQgd2lsbCBiZSBsb29rZWQgdXAgb24g
dGhlIHBhc3NlZCB0YXJnZXQuCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypd
IE9wdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB0aW1lb3V0LgotICAgICAgICAgICAg
ICBAcGFyYW0ge051bWJlcn0gd2FpdCBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQuCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gaW1tZWRpYXRlIFRyaWdnZXIgdGhlIGZ1bmN0
aW9uIG9uIHRoZSBsZWFkaW5nIGluc3RlYWQKLSAgICAgICAgICAgICAgICBvZiB0aGUgdHJhaWxp
bmcgZWRnZSBvZiB0aGUgd2FpdCBpbnRlcnZhbC4gRGVmYXVsdHMgdG8gZmFsc2UuCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge0FycmF5fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNl
bGxpbmcsIHNlZSBgcnVuLmNhbmNlbGAuCi0gICAgICAgICAgICAqLwotICAgICAgICBydW4uZGVi
b3VuY2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBhcHBseShiYWNrYnVybmVy
LCBiYWNrYnVybmVyLmRlYm91bmNlLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgICBFbnN1cmUgdGhhdCB0aGUgdGFyZ2V0IG1ldGhvZCBpcyBuZXZl
ciBjYWxsZWQgbW9yZSBmcmVxdWVudGx5IHRoYW4KLSAgICAgICAgICAgICAgdGhlIHNwZWNpZmll
ZCBzcGFjaW5nIHBlcmlvZC4gVGhlIHRhcmdldCBtZXRob2QgaXMgY2FsbGVkIGltbWVkaWF0ZWx5
LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICB2YXIgbXlG
dW5jID0gZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKHRoaXMubmFtZSArICcgcmFuLicpOyB9Owot
ICAgICAgICAgICAgICAgIHZhciBteUNvbnRleHQgPSB7bmFtZTogJ3Rocm90dGxlJ307Ci0KLSAg
ICAgICAgICAgICAgICBydW4udGhyb3R0bGUobXlDb250ZXh0LCBteUZ1bmMsIDE1MCk7Ci0gICAg
ICAgICAgICAgICAgLy8gbXlGdW5jIGlzIGludm9rZWQgd2l0aCBjb250ZXh0IG15Q29udGV4dAot
ICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUgbG9ncyAndGhyb3R0bGUgcmFuLicKLQotICAgICAg
ICAgICAgICAgIC8vIDUwbXMgcGFzc2VzCi0gICAgICAgICAgICAgICAgcnVuLnRocm90dGxlKG15
Q29udGV4dCwgbXlGdW5jLCAxNTApOwotCi0gICAgICAgICAgICAgICAgLy8gNTBtcyBwYXNzZXMK
LSAgICAgICAgICAgICAgICBydW4udGhyb3R0bGUobXlDb250ZXh0LCBteUZ1bmMsIDE1MCk7Ci0K
LSAgICAgICAgICAgICAgICAvLyAxNTBtcyBwYXNzZXMKLSAgICAgICAgICAgICAgICBydW4udGhy
b3R0bGUobXlDb250ZXh0LCBteUZ1bmMsIDE1MCk7Ci0gICAgICAgICAgICAgICAgLy8gbXlGdW5j
IGlzIGludm9rZWQgd2l0aCBjb250ZXh0IG15Q29udGV4dAotICAgICAgICAgICAgICAgIC8vIGNv
bnNvbGUgbG9ncyAndGhyb3R0bGUgcmFuLicKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCB0aHJvdHRsZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW3Rh
cmdldF0gdGFyZ2V0IG9mIG1ldGhvZCB0byBpbnZva2UKLSAgICAgICAgICAgICAgQHBhcmFtIHtG
dW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICAgICAgICAg
ICAgICBNYXkgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZy4gSWYgeW91IHBhc3MgYSBzdHJpbmcK
LSAgICAgICAgICAgICAgICB0aGVuIGl0IHdpbGwgYmUgbG9va2VkIHVwIG9uIHRoZSBwYXNzZWQg
dGFyZ2V0LgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBPcHRpb25hbCBh
cmd1bWVudHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtO
dW1iZXJ9IHNwYWNpbmcgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBzcGFjZSBvdXQgcmVxdWVz
dHMuCi0gICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gaW1tZWRpYXRlIFRyaWdnZXIgdGhl
IGZ1bmN0aW9uIG9uIHRoZSBsZWFkaW5nIGluc3RlYWQKLSAgICAgICAgICAgICAgICBvZiB0aGUg
dHJhaWxpbmcgZWRnZSBvZiB0aGUgd2FpdCBpbnRlcnZhbC4gRGVmYXVsdHMgdG8gdHJ1ZS4KLSAg
ICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IFRpbWVyIGluZm9ybWF0aW9uIGZvciB1c2UgaW4g
Y2FuY2VsbGluZywgc2VlIGBydW4uY2FuY2VsYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIHJ1
bi50aHJvdHRsZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGFwcGx5KGJhY2ti
dXJuZXIsIGJhY2tidXJuZXIudGhyb3R0bGUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIGl0J3Mgbm90IGFuIGF1dG9ydW4gZHVyaW5nIHRlc3RpbmcKLSAg
ICAgICAgZnVuY3Rpb24gY2hlY2tBdXRvUnVuKCkgewotICAgICAgICAgICAgaWYgKCFydW4uY3Vy
cmVudFJ1bkxvb3ApIHsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBoYXZlIHR1
cm5lZCBvbiB0ZXN0aW5nIG1vZGUsIHdoaWNoIGRpc2FibGVkIHRoZSBydW4tbG9vcCdzIGF1dG9y
dW4uIFlvdSB3aWxsIG5lZWQgdG8gd3JhcCBhbnkgY29kZSB3aXRoIGFzeW5jaHJvbm91cyBzaWRl
LWVmZmVjdHMgaW4gYW4gcnVuIiwgIUVtYmVyLnRlc3RpbmcpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFkZCBhIG5ldyBuYW1lZCBxdWV1
ZSBhZnRlciB0aGUgc3BlY2lmaWVkIHF1ZXVlLgotCi0gICAgICAgICAgICAgIFRoZSBxdWV1ZSB0
byBhZGQgd2lsbCBvbmx5IGJlIGFkZGVkIG9uY2UuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBf
YWRkUXVldWUKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2Yg
dGhlIHF1ZXVlIHRvIGFkZC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGFmdGVyIHRo
ZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byBhZGQgYWZ0ZXIuCi0gICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAqLwotICAgICAgICBydW4uX2FkZFF1ZXVlID0gZnVuY3Rpb24obmFtZSwg
YWZ0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpbmRleE9mLmNhbGwocnVuLnF1ZXVlcywgbmFtZSkg
PT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcnVuLnF1ZXVlcy5zcGxpY2UoaW5kZXhPZi5jYWxs
KHJ1bi5xdWV1ZXMsIGFmdGVyKSArIDEsIDAsIG5hbWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvc2V0X3Byb3BlcnRpZXMiLAot
ICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIGNoYW5nZVByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3kxX18uY2hhbmdlUHJvcGVydGllczsK
LSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTJfXy5zZXQ7Ci0KLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgIFNldCBhIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhbiBvYmplY3QuIFRoZXNl
IHByb3BlcnRpZXMgYXJlIHNldCBpbnNpZGUKLSAgICAgICAgICAgICAgYSBzaW5nbGUgYGJlZ2lu
UHJvcGVydHlDaGFuZ2VzYCBhbmQgYGVuZFByb3BlcnR5Q2hhbmdlc2AgYmF0Y2gsIHNvCi0gICAg
ICAgICAgICAgIG9ic2VydmVycyB3aWxsIGJlIGJ1ZmZlcmVkLgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gRW1iZXIuT2JqZWN0LmNy
ZWF0ZSgpOwotCi0gICAgICAgICAgICAgIGFuT2JqZWN0LnNldFByb3BlcnRpZXMoewotICAgICAg
ICAgICAgICAgIGZpcnN0TmFtZTogJ1N0YW5sZXknLAotICAgICAgICAgICAgICAgIGxhc3ROYW1l
OiAnU3R1YXJ0JywKLSAgICAgICAgICAgICAgICBhZ2U6IDIxCi0gICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHNldFByb3BlcnRpZXMK
LSAgICAgICAgICAgICAgQHBhcmFtIHNlbGYKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9
IGhhc2gKLSAgICAgICAgICAgICAgQHJldHVybiBzZWxmCi0gICAgICAgICAgICAqLwotICAgICAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gc2V0UHJvcGVydGllcyhzZWxmLCBo
YXNoKSB7Ci0gICAgICAgICAgICBjaGFuZ2VQcm9wZXJ0aWVzKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gaGFzaCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzaC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c2V0KHNlbGYsIHByb3AsIGhhc2hbcHJvcF0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZjsK
LSAgICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvdXRpbHMiLAotICAg
IFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRh
bC9hcnJheSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQi
XTsKLSAgICAgICAgdmFyIHBsYXRmb3JtID0gX19kZXBlbmRlbmN5Ml9fLnBsYXRmb3JtOwotICAg
ICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5Ml9fLmNyZWF0ZTsKLQotICAgICAgICB2YXIg
Zm9yRWFjaCA9IF9fZGVwZW5kZW5jeTNfXy5mb3JFYWNoOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgUHJldmlvdXNseSB3ZSB1c2VkIGBFbWJlci4kLnV1aWRgLCBob3dldmVy
IGAkLnV1aWRgIGhhcyBiZWVuIHJlbW92ZWQgZnJvbQotICAgICAgICAgICAgICBqUXVlcnkgbWFz
dGVyLiBXZSdsbCBqdXN0IGJvb3RzdHJhcCBvdXIgb3duIHV1aWQgbm93LgotCi0gICAgICAgICAg
ICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgIEByZXR1cm4ge051bWJlcn0gdGhlIHV1aWQKLSAg
ICAgICAgICAgICovCi0gICAgICAgIHZhciBfdXVpZCA9IDA7Ci0KLSAgICAgICAgZnVuY3Rpb24g
dXVpZCgpIHsKLSAgICAgICAgICAgIHJldHVybiArK191dWlkOwotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18udXVpZCA9IHV1aWQ7IC8qKgotICAgICAgICAgICAgICBQcmVmaXggdXNl
ZCBmb3IgZ3VpZHMgdGhyb3VnaCBvdXQgRW1iZXIuCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgIEBwcm9wZXJ0eSBHVUlEX1BSRUZJWAotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICBAZmluYWwKLSAg
ICAgICAgICAgICovCi0gICAgICAgIHZhciBHVUlEX1BSRUZJWCA9ICdlbWJlcic7Ci0KLSAgICAg
ICAgdmFyIG9fZGVmaW5lUHJvcGVydHkgPSBwbGF0Zm9ybS5kZWZpbmVQcm9wZXJ0eTsKLSAgICAg
ICAgdmFyIG9fY3JlYXRlID0gY3JlYXRlOwotICAgICAgICAvLyBVc2VkIGZvciBndWlkIGdlbmVy
YXRpb24uLi4KLSAgICAgICAgdmFyIG51bWJlckNhY2hlID0gW107Ci0gICAgICAgIHZhciBzdHJp
bmdDYWNoZSA9IHt9OwotICAgICAgICB2YXIgTUFOREFUT1JZX1NFVFRFUiA9IEVtYmVyLkVOVi5N
QU5EQVRPUllfU0VUVEVSOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIHVuaXF1ZSBr
ZXkgdXNlZCB0byBhc3NpZ24gZ3VpZHMgYW5kIG90aGVyIHByaXZhdGUgbWV0YWRhdGEgdG8gb2Jq
ZWN0cy4KLSAgICAgICAgICAgICAgSWYgeW91IGluc3BlY3QgYW4gb2JqZWN0IGluIHlvdXIgYnJv
d3NlciBkZWJ1Z2dlciB5b3Ugd2lsbCBvZnRlbiBzZWUgdGhlc2UuCi0gICAgICAgICAgICAgIFRo
ZXkgY2FuIGJlIHNhZmVseSBpZ25vcmVkLgotCi0gICAgICAgICAgICAgIE9uIGJyb3dzZXJzIHRo
YXQgc3VwcG9ydCBpdCwgdGhlc2UgcHJvcGVydGllcyBhcmUgYWRkZWQgd2l0aCBlbnVtZXJhdGlv
bgotICAgICAgICAgICAgICBkaXNhYmxlZCBzbyB0aGV5IHdvbid0IHNob3cgdXAgd2hlbiB5b3Ug
aXRlcmF0ZSBvdmVyIHlvdXIgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICAgICAgICBAcHJvcGVydHkgR1VJRF9LRVkKLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgQGZpbmFsCi0gICAg
ICAgICAgICAqLwotICAgICAgICB2YXIgR1VJRF9LRVkgPSAnX19lbWJlcicgKyAoICsgbmV3IERh
dGUoKSk7Ci0KLSAgICAgICAgdmFyIEdVSURfREVTQyA9IHsKLSAgICAgICAgICAgIHdyaXRhYmxl
OiBmYWxzZSwKLSAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCi0gICAgICAgICAgICBl
bnVtZXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIHZhbHVlOiBudWxsCi0gICAgICAgIH07Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEdlbmVyYXRlcyBhIG5ldyBndWlkLCBvcHRpb25h
bGx5IHNhdmluZyB0aGUgZ3VpZCB0byB0aGUgb2JqZWN0IHRoYXQgeW91Ci0gICAgICAgICAgICAg
IHBhc3MgaW4uIFlvdSB3aWxsIHJhcmVseSBuZWVkIHRvIHVzZSB0aGlzIG1ldGhvZC4gSW5zdGVh
ZCB5b3Ugc2hvdWxkCi0gICAgICAgICAgICAgIGNhbGwgYEVtYmVyLmd1aWRGb3Iob2JqKWAsIHdo
aWNoIHJldHVybiBhbiBleGlzdGluZyBndWlkIGlmIGF2YWlsYWJsZS4KLQotICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIGdlbmVyYXRlR3VpZAotICAgICAgICAg
ICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbb2JqXSBPYmpl
Y3QgdGhlIGd1aWQgd2lsbCBiZSB1c2VkIGZvci4gSWYgcGFzc2VkIGluLCB0aGUgZ3VpZCB3aWxs
Ci0gICAgICAgICAgICAgICAgYmUgc2F2ZWQgb24gdGhlIG9iamVjdCBhbmQgcmV1c2VkIHdoZW5l
dmVyIHlvdSBwYXNzIHRoZSBzYW1lIG9iamVjdAotICAgICAgICAgICAgICAgIGFnYWluLgotCi0g
ICAgICAgICAgICAgICAgSWYgbm8gb2JqZWN0IGlzIHBhc3NlZCwganVzdCBnZW5lcmF0ZSBhIG5l
dyBndWlkLgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ByZWZpeF0gUHJlZml4IHRv
IHBsYWNlIGluIGZyb250IG9mIHRoZSBndWlkLiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0bwotICAg
ICAgICAgICAgICAgIHNlcGFyYXRlIHRoZSBndWlkIGludG8gc2VwYXJhdGUgbmFtZXNwYWNlcy4K
LSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgZ3VpZAotICAgICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVHdWlkKG9iaiwgcHJlZml4KSB7Ci0gICAgICAgICAg
ICBpZiAoIXByZWZpeCkgCi0gICAgICAgICAgICAgICAgcHJlZml4ID0gR1VJRF9QUkVGSVg7Ci0g
ICAgICAgICAgICB2YXIgcmV0ID0gKHByZWZpeCArIHV1aWQoKSk7Ci0gICAgICAgICAgICBpZiAo
b2JqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9ialtHVUlEX0tFWV0gPT09IG51bGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgb2JqW0dVSURfS0VZXSA9IHJldDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBHVUlEX0RFU0MudmFsdWUgPSByZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIG9fZGVmaW5lUHJvcGVydHkob2JqLCBHVUlEX0tFWSwgR1VJRF9ERVND
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZ2VuZXJhdGVHdWlkID0gZ2Vu
ZXJhdGVHdWlkOyAvKioKLSAgICAgICAgICAgICAgUmV0dXJucyBhIHVuaXF1ZSBpZCBmb3IgdGhl
IG9iamVjdC4gSWYgdGhlIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIGd1aWQsCi0gICAgICAg
ICAgICAgIG9uZSB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0LiBZb3UgY2FuIGNhbGwgdGhpcyBvbiBh
bnkgb2JqZWN0LAotICAgICAgICAgICAgICBgRW1iZXIuT2JqZWN0YC1iYXNlZCBvciBub3QsIGJ1
dCBiZSBhd2FyZSB0aGF0IGl0IHdpbGwgYWRkIGEgYF9ndWlkYAotICAgICAgICAgICAgICBwcm9w
ZXJ0eS4KLQotICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoaXMgbWV0aG9kIG9uIERP
TSBFbGVtZW50IG9iamVjdHMuCi0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgQG1ldGhvZCBndWlkRm9yCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IG9iaiBhbnkgb2JqZWN0LCBzdHJpbmcsIG51bWJlciwgRWxlbWVu
dCwgb3IgcHJpbWl0aXZlCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaXF1
ZSBndWlkIGZvciB0aGlzIGluc3RhbmNlLgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rp
b24gZ3VpZEZvcihvYmopIHsKLQotICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB3aGVyZSB3
ZSBkb24ndCB3YW50IHRvIGFkZCBhIGtleSB0byBvYmplY3QKLSAgICAgICAgICAgIGlmIChvYmog
PT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAgICAgcmV0dXJuICIodW5kZWZpbmVkKSI7Ci0g
ICAgICAgICAgICBpZiAob2JqID09PSBudWxsKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gIihu
dWxsKSI7Ci0KLSAgICAgICAgICAgIHZhciByZXQ7Ci0gICAgICAgICAgICB2YXIgdHlwZSA9IHR5
cGVvZiBvYmo7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHByb3RvdHlwZSBjaGFuZ2Vz
IHRvIFN0cmluZyBldGMuIHRvIGNoYW5nZSB0aGUgZ3VpZEZvcgotICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJl
dCA9IG51bWJlckNhY2hlW29ial07Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXQpIAotICAgICAg
ICAgICAgICAgICAgICByZXQgPSBudW1iZXJDYWNoZVtvYmpdID0gJ251JyArIG9iajsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgICBjYXNlICdzdHJpbmcnOgotICAg
ICAgICAgICAgICAgIHJldCA9IHN0cmluZ0NhY2hlW29ial07Ci0gICAgICAgICAgICAgICAgaWYg
KCFyZXQpIAotICAgICAgICAgICAgICAgICAgICByZXQgPSBzdHJpbmdDYWNoZVtvYmpdID0gJ3N0
JyArIHV1aWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgICBj
YXNlICdib29sZWFuJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqID8gJyh0cnVlKScgOiAn
KGZhbHNlKSc7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG9i
altHVUlEX0tFWV0pIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW0dVSURfS0VZXTsK
LSAgICAgICAgICAgICAgICBpZiAob2JqID09PSBPYmplY3QpIAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJyhPYmplY3QpJzsKLSAgICAgICAgICAgICAgICBpZiAob2JqID09PSBBcnJheSkg
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnKEFycmF5KSc7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gJ2VtYmVyJyArIHV1aWQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChvYmpbR1VJRF9L
RVldID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ialtHVUlEX0tFWV0gPSByZXQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgR1VJRF9ERVND
LnZhbHVlID0gcmV0OwotICAgICAgICAgICAgICAgICAgICBvX2RlZmluZVByb3BlcnR5KG9iaiwg
R1VJRF9LRVksIEdVSURfREVTQyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5ndWlkRm9yID0gZ3VpZEZvcjsgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAvLyBNRVRBCi0gICAgICAgIC8v
Ci0KLSAgICAgICAgdmFyIE1FVEFfREVTQyA9IHsKLSAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVl
LAotICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKLSAgICAgICAgICAgIGVudW1lcmFi
bGU6IGZhbHNlLAotICAgICAgICAgICAgdmFsdWU6IG51bGwKLSAgICAgICAgfTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgVGhlIGtleSB1c2VkIHRvIHN0b3JlIG1ldGEgaW5mb3JtYXRp
b24gb24gb2JqZWN0IGZvciBwcm9wZXJ0eSBvYnNlcnZpbmcuCi0KLSAgICAgICAgICAgICAgQHBy
b3BlcnR5IE1FVEFfS0VZCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAg
QHByaXZhdGUKLSAgICAgICAgICAgICAgQGZpbmFsCi0gICAgICAgICAgICAgIEB0eXBlIFN0cmlu
ZwotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIE1FVEFfS0VZID0gJ19fZW1iZXJfbWV0YV9f
JzsKLQotICAgICAgICB2YXIgaXNEZWZpbmVQcm9wZXJ0eVNpbXVsYXRlZCA9IHBsYXRmb3JtLmRl
ZmluZVByb3BlcnR5LmlzU2ltdWxhdGVkOwotCi0gICAgICAgIGZ1bmN0aW9uIE1ldGEob2JqKSB7
Ci0gICAgICAgICAgICB0aGlzLmRlc2NzID0ge307Ci0gICAgICAgICAgICB0aGlzLndhdGNoaW5n
ID0ge307Ci0gICAgICAgICAgICB0aGlzLmNhY2hlID0ge307Ci0gICAgICAgICAgICB0aGlzLmNh
Y2hlTWV0YSA9IHt9OwotICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBvYmo7Ci0gICAgICAgIH0K
LQotICAgICAgICBNZXRhLnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIGRlc2NzOiBudWxsLAot
ICAgICAgICAgICAgZGVwczogbnVsbCwKLSAgICAgICAgICAgIHdhdGNoaW5nOiBudWxsLAotICAg
ICAgICAgICAgbGlzdGVuZXJzOiBudWxsLAotICAgICAgICAgICAgY2FjaGU6IG51bGwsCi0gICAg
ICAgICAgICBjYWNoZU1ldGE6IG51bGwsCi0gICAgICAgICAgICBzb3VyY2U6IG51bGwsCi0gICAg
ICAgICAgICBtaXhpbnM6IG51bGwsCi0gICAgICAgICAgICBiaW5kaW5nczogbnVsbCwKLSAgICAg
ICAgICAgIGNoYWluczogbnVsbCwKLSAgICAgICAgICAgIGNoYWluV2F0Y2hlcnM6IG51bGwsCi0g
ICAgICAgICAgICB2YWx1ZXM6IG51bGwsCi0gICAgICAgICAgICBwcm90bzogbnVsbAotICAgICAg
ICB9OwotCi0gICAgICAgIGlmIChpc0RlZmluZVByb3BlcnR5U2ltdWxhdGVkKSB7Ci0gICAgICAg
ICAgICAvLyBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGVudW1lcmFibGUgZmFsc2UK
LSAgICAgICAgICAgIC8vIG1ha2UgbWV0YSBmYWlsIGpRdWVyeS5pc1BsYWluT2JqZWN0KCkgdG8g
aGlkZSBmcm9tCi0gICAgICAgICAgICAvLyBqUXVlcnkuZXh0ZW5kKCkgYnkgaGF2aW5nIGEgcHJv
cGVydHkgdGhhdCBmYWlscwotICAgICAgICAgICAgLy8gaGFzT3duUHJvcGVydHkgY2hlY2suCi0g
ICAgICAgICAgICBNZXRhLnByb3RvdHlwZS5fX3ByZXZlbnRQbGFpbk9iamVjdF9fID0gdHJ1ZTsK
LQotICAgICAgICAgICAgLy8gV2l0aG91dCBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLCBtZXRh
IG9iamVjdHMgd2lsbCBiZSBvdXRwdXQgaW4gSlNPTgotICAgICAgICAgICAgLy8gdW5sZXNzIGV4
cGxpY2l0bHkgc3VwcHJlc3NlZAotICAgICAgICAgICAgTWV0YS5wcm90b3R5cGUudG9KU09OID0g
ZnVuY3Rpb24gKCkge307Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3Ig
bm9uLXdyaXRhYmxlIG1ldGFzLgotICAgICAgICB2YXIgRU1QVFlfTUVUQSA9IG5ldyBNZXRhKG51
bGwpOwotCi0gICAgICAgIGlmIChNQU5EQVRPUllfU0VUVEVSKSB7Ci0gICAgICAgICAgICBFTVBU
WV9NRVRBLnZhbHVlcyA9IHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIFJldHJpZXZlcyB0aGUgbWV0YSBoYXNoIGZvciBhbiBvYmplY3QuIElmIGB3cml0YWJsZWAg
aXMgdHJ1ZSBlbnN1cmVzIHRoZQotICAgICAgICAgICAgICBoYXNoIGlzIHdyaXRhYmxlIGZvciB0
aGlzIG9iamVjdCBhcyB3ZWxsLgotCi0gICAgICAgICAgICAgIFRoZSBtZXRhIG9iamVjdCBjb250
YWlucyBpbmZvcm1hdGlvbiBhYm91dCBjb21wdXRlZCBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBhcwot
ICAgICAgICAgICAgICB3ZWxsIGFzIGFueSB3YXRjaGVkIHByb3BlcnRpZXMgYW5kIG90aGVyIGlu
Zm9ybWF0aW9uLiBZb3UgZ2VuZXJhbGx5IHdpbGwKLSAgICAgICAgICAgICAgbm90IGFjY2VzcyB0
aGlzIGluZm9ybWF0aW9uIGRpcmVjdGx5IGJ1dCBpbnN0ZWFkIHdvcmsgd2l0aCBoaWdoZXIgbGV2
ZWwKLSAgICAgICAgICAgICAgbWV0aG9kcyB0aGF0IG1hbmlwdWxhdGUgdGhpcyBoYXNoIGluZGly
ZWN0bHkuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBtZXRhCi0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcmV0cmlldmUgbWV0YSBmb3IKLSAgICAgICAgICAgICAg
QHBhcmFtIHtCb29sZWFufSBbd3JpdGFibGU9dHJ1ZV0gUGFzcyBgZmFsc2VgIGlmIHlvdSBkbyBu
b3QgaW50ZW5kIHRvIG1vZGlmeQotICAgICAgICAgICAgICAgIHRoZSBtZXRhIGhhc2gsIGFsbG93
aW5nIHRoZSBtZXRob2QgdG8gYXZvaWQgbWFraW5nIGFuIHVubmVjZXNzYXJ5IGNvcHkuCi0gICAg
ICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIG1ldGEgaGFzaCBmb3IgYW4gb2JqZWN0Ci0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBtZXRhKG9iaiwgd3JpdGFibGUpIHsKLQot
ICAgICAgICAgICAgdmFyIHJldCA9IG9ialtNRVRBX0tFWV07Ci0gICAgICAgICAgICBpZiAod3Jp
dGFibGUgPT09IGZhbHNlKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8IEVNUFRZX01F
VEE7Ci0KLSAgICAgICAgICAgIGlmICghcmV0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0Rl
ZmluZVByb3BlcnR5U2ltdWxhdGVkKSAKLSAgICAgICAgICAgICAgICAgICAgb19kZWZpbmVQcm9w
ZXJ0eShvYmosIE1FVEFfS0VZLCBNRVRBX0RFU0MpOwotCi0gICAgICAgICAgICAgICAgcmV0ID0g
bmV3IE1ldGEob2JqKTsKLQotICAgICAgICAgICAgICAgIGlmIChNQU5EQVRPUllfU0VUVEVSKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldC52YWx1ZXMgPSB7fTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBvYmpbTUVUQV9LRVldID0gcmV0OwotCi0gICAgICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGFjY2lkZW50YWxseSB0cnkgdG8gY3JlYXRlIGNvbnN0
cnVjdG9yIGxpa2UgZGVzYwotICAgICAgICAgICAgICAgIHJldC5kZXNjcy5jb25zdHJ1Y3RvciA9
IG51bGw7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0LnNvdXJjZSAhPT0gb2JqKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpc0RlZmluZVByb3BlcnR5U2ltdWxhdGVkKSAKLSAgICAgICAg
ICAgICAgICAgICAgb19kZWZpbmVQcm9wZXJ0eShvYmosIE1FVEFfS0VZLCBNRVRBX0RFU0MpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IG9fY3JlYXRlKHJldCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldC5kZXNjcyA9IG9fY3JlYXRlKHJldC5kZXNjcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldC53YXRjaGluZyA9IG9fY3JlYXRlKHJldC53YXRjaGluZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldC5jYWNoZSA9IHt9OwotICAgICAgICAgICAgICAgICAgICByZXQuY2FjaGVNZXRh
ID0ge307Ci0gICAgICAgICAgICAgICAgICAgIHJldC5zb3VyY2UgPSBvYmo7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKE1BTkRBVE9SWV9TRVRURVIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldC52YWx1ZXMgPSBvX2NyZWF0ZShyZXQudmFsdWVzKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG9ialtNRVRBX0tFWV0gPSByZXQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gZ2V0TWV0YShvYmosIHByb3BlcnR5KSB7Ci0gICAgICAgICAgICB2YXIgX21ldGEgPSBt
ZXRhKG9iaiwgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIF9tZXRhW3Byb3BlcnR5XTsKLSAg
ICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmdldE1ldGEgPSBnZXRNZXRhOwotICAgICAg
ICBmdW5jdGlvbiBzZXRNZXRhKG9iaiwgcHJvcGVydHksIHZhbHVlKSB7Ci0gICAgICAgICAgICB2
YXIgX21ldGEgPSBtZXRhKG9iaiwgdHJ1ZSk7Ci0gICAgICAgICAgICBfbWV0YVtwcm9wZXJ0eV0g
PSB2YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fLnNldE1ldGEgPSBzZXRNZXRhOyAvKioKLSAgICAgICAgICAgICAgQGRlcHJl
Y2F0ZWQKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBJbiBvcmRlciB0
byBzdG9yZSBkZWZhdWx0cyBmb3IgYSBjbGFzcywgYSBwcm90b3R5cGUgbWF5IG5lZWQgdG8gY3Jl
YXRlCi0gICAgICAgICAgICAgIGEgZGVmYXVsdCBtZXRhIG9iamVjdCwgd2hpY2ggd2lsbCBiZSBp
bmhlcml0ZWQgYnkgYW55IG9iamVjdHMgaW5zdGFudGlhdGVkCi0gICAgICAgICAgICAgIGZyb20g
dGhlIGNsYXNzJ3MgY29uc3RydWN0b3IuCi0KLSAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIHBy
b3BlcnRpZXMgb2YgdGhhdCBtZXRhIG9iamVjdCBhcmUgb25seSBzaGFsbG93LWNsb25lZCwKLSAg
ICAgICAgICAgICAgc28gaWYgYSBwcm9wZXJ0eSBpcyBhIGhhc2ggKGxpa2UgdGhlIGV2ZW50IHN5
c3RlbSdzIGBsaXN0ZW5lcnNgIGhhc2gpLAotICAgICAgICAgICAgICBpdCB3aWxsIGJ5IGRlZmF1
bHQgYmUgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MuCi0KLSAgICAg
ICAgICAgICAgVGhpcyBtZXRob2QgYWxsb3dzIGV4dGVuc2lvbnMgdG8gZGVlcGx5IGNsb25lIGEg
c2VyaWVzIG9mIG5lc3RlZCBoYXNoZXMgb3IKLSAgICAgICAgICAgICAgb3RoZXIgY29tcGxleCBv
YmplY3RzLiBGb3IgaW5zdGFuY2UsIHRoZSBldmVudCBzeXN0ZW0gbWlnaHQgcGFzcwotICAgICAg
ICAgICAgICBgWydsaXN0ZW5lcnMnLCAnZm9vOmNoYW5nZScsICdlbWJlcjE1NyddYCB0byBgcHJl
cGFyZU1ldGFQYXRoYCwgd2hpY2ggd2lsbAotICAgICAgICAgICAgICB3YWxrIGRvd24gdGhlIGtl
eXMgcHJvdmlkZWQuCi0KLSAgICAgICAgICAgICAgRm9yIGVhY2gga2V5LCBpZiB0aGUga2V5IGRv
ZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiBJZiBpdCBhbHJlYWR5Ci0gICAgICAgICAgICAg
IGV4aXN0cyBhbmQgaXQgd2FzIGluaGVyaXRlZCBmcm9tIGl0cyBjb25zdHJ1Y3RvciwgdGhlIGNv
bnN0cnVjdG9yJ3MKLSAgICAgICAgICAgICAga2V5IGlzIGNsb25lZC4KLQotICAgICAgICAgICAg
ICBZb3UgY2FuIGFsc28gcGFzcyBmYWxzZSBmb3IgYHdyaXRhYmxlYCwgd2hpY2ggd2lsbCBzaW1w
bHkgcmV0dXJuCi0gICAgICAgICAgICAgIHVuZGVmaW5lZCBpZiBgcHJlcGFyZU1ldGFQYXRoYCBk
aXNjb3ZlcnMgYW55IHBhcnQgb2YgdGhlIHBhdGggdGhhdAotICAgICAgICAgICAgICBzaGFyZWQg
b3IgdW5kZWZpbmVkLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgbWV0YVBhdGgKLSAgICAgICAg
ICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBv
YmplY3Qgd2hvc2UgbWV0YSB3ZSBhcmUgZXhhbWluaW5nCi0gICAgICAgICAgICAgIEBwYXJhbSB7
QXJyYXl9IHBhdGggQW4gYXJyYXkgb2Yga2V5cyB0byB3YWxrIGRvd24KLSAgICAgICAgICAgICAg
QHBhcmFtIHtCb29sZWFufSB3cml0YWJsZSB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBuZXcg
bWV0YQotICAgICAgICAgICAgICAgIChvciBtZXRhIHByb3BlcnR5KSBpZiBvbmUgZG9lcyBub3Qg
YWxyZWFkeSBleGlzdCBvciBpZiBpdCdzCi0gICAgICAgICAgICAgICAgc2hhcmVkIHdpdGggaXRz
IGNvbnN0cnVjdG9yCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBtZXRhUGF0aChv
YmosIHBhdGgsIHdyaXRhYmxlKSB7Ci0gICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIkVtYmVy
Lm1ldGFQYXRoIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGZ1dHVyZSBy
ZWxlYXNlcy4iKTsKLSAgICAgICAgICAgIHZhciBfbWV0YSA9IG1ldGEob2JqLCB3cml0YWJsZSks
IGtleU5hbWUsIHZhbHVlOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGgu
bGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAga2V5TmFtZSA9IHBhdGhbaV07
Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBfbWV0YVtrZXlOYW1lXTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3cml0YWJsZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9tZXRhW2tleU5hbWVdID0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgX19lbWJlcl9zb3VyY2VfXzogb2JqIAotICAgICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuX19lbWJlcl9z
b3VyY2VfXyAhPT0gb2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd3JpdGFibGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfbWV0YVtrZXlOYW1lXSA9IG9f
Y3JlYXRlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUuX19lbWJlcl9zb3VyY2Vf
XyA9IG9iajsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBfbWV0YSA9IHZh
bHVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5tZXRhUGF0aCA9IG1ldGFQYXRoOyAvKioKLSAgICAg
ICAgICAgICAgV3JhcHMgdGhlIHBhc3NlZCBmdW5jdGlvbiBzbyB0aGF0IGB0aGlzLl9zdXBlcmAg
d2lsbCBwb2ludCB0byB0aGUgc3VwZXJGdW5jCi0gICAgICAgICAgICAgIHdoZW4gdGhlIGZ1bmN0
aW9uIGlzIGludm9rZWQuIFRoaXMgaXMgdGhlIHByaW1pdGl2ZSB3ZSB1c2UgdG8gaW1wbGVtZW50
Ci0gICAgICAgICAgICAgIGNhbGxzIHRvIHN1cGVyLgotCi0gICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgIEBtZXRob2Qgd3JhcAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhbGwK
LSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gc3VwZXJGdW5jIFRoZSBzdXBlciBmdW5j
dGlvbi4KLSAgICAgICAgICAgICAgQHJldHVybiB7RnVuY3Rpb259IHdyYXBwZWQgZnVuY3Rpb24u
Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB3cmFwKGZ1bmMsIHN1cGVyRnVuYykg
ewotICAgICAgICAgICAgZnVuY3Rpb24gc3VwZXJXcmFwcGVyKCkgewotICAgICAgICAgICAgICAg
IHZhciByZXQsIHN1cCA9IHRoaXMgJiYgdGhpcy5fX25leHRTdXBlcjsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9fbmV4dFN1cGVyID0gc3Vw
ZXJGdW5jOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXQgPSBhcHBseSh0
aGlzLCBmdW5jLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX19uZXh0U3VwZXIgPSBzdXA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHN1cGVyV3JhcHBlci53cmFwcGVkRnVuY3Rpb24gPSBmdW5jOwotICAgICAgICAgICAgc3Vw
ZXJXcmFwcGVyLndyYXBwZWRGdW5jdGlvbi5fX2VtYmVyX2FyaXR5X18gPSBmdW5jLmxlbmd0aDsK
LSAgICAgICAgICAgIHN1cGVyV3JhcHBlci5fX2VtYmVyX29ic2VydmVzX18gPSBmdW5jLl9fZW1i
ZXJfb2JzZXJ2ZXNfXzsKLSAgICAgICAgICAgIHN1cGVyV3JhcHBlci5fX2VtYmVyX29ic2VydmVz
QmVmb3JlX18gPSBmdW5jLl9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXzsKLSAgICAgICAgICAgIHN1
cGVyV3JhcHBlci5fX2VtYmVyX2xpc3RlbnNfXyA9IGZ1bmMuX19lbWJlcl9saXN0ZW5zX187Ci0K
LSAgICAgICAgICAgIHJldHVybiBzdXBlcldyYXBwZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBf
X2V4cG9ydHNfXy53cmFwID0gd3JhcDsKLSAgICAgICAgdmFyIEVtYmVyQXJyYXk7Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIG9iamVjdCBp
cyBhbiBhcnJheSBvciBBcnJheS1saWtlLgotCi0gICAgICAgICAgICAgIEVtYmVyIEFycmF5IFBy
b3RvY29sOgotCi0gICAgICAgICAgICAgICAgLSB0aGUgb2JqZWN0IGhhcyBhbiBvYmplY3RBdCBw
cm9wZXJ0eQotICAgICAgICAgICAgICAgIC0gdGhlIG9iamVjdCBpcyBhIG5hdGl2ZSBBcnJheQot
ICAgICAgICAgICAgICAgIC0gdGhlIG9iamVjdCBpcyBhbiBPYmplY3QsIGFuZCBoYXMgYSBsZW5n
dGggcHJvcGVydHkKLQotICAgICAgICAgICAgICBVbmxpa2UgYEVtYmVyLnR5cGVPZmAgdGhpcyBt
ZXRob2QgcmV0dXJucyB0cnVlIGV2ZW4gaWYgdGhlIHBhc3NlZCBvYmplY3QgaXMKLSAgICAgICAg
ICAgICAgbm90IGZvcm1hbGx5IGFycmF5IGJ1dCBhcHBlYXJzIHRvIGJlIGFycmF5LWxpa2UgKGku
ZS4gaW1wbGVtZW50cyBgRW1iZXIuQXJyYXlgKQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgRW1iZXIuaXNBcnJheSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIEVtYmVyLmlzQXJyYXko
W10pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlCi0gICAg
ICAgICAgICAgIEVtYmVyLmlzQXJyYXkoRW1iZXIuQXJyYXlQcm94eS5jcmVhdGUoeyBjb250ZW50
OiBbXSB9KSk7ICAvLyB0cnVlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgaXNBcnJheQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBw
YXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byB0ZXN0Ci0gICAgICAgICAgICAgIEByZXR1
cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHBhc3NlZCBvYmplY3QgaXMgYW4gYXJyYXkgb3IgQXJy
YXktbGlrZQotICAgICAgICAgICAgKi8KLSAgICAgICAgLy8gRVM2VE9ETzogTW92ZSB1cCB0byBy
dW50aW1lPyBUaGlzIGlzIG9ubHkgdXNlIGluIGVtYmVyLW1ldGFsIGJ5IGNvbmNhdGVuYXRlZFBy
b3BlcnRpZXMKLSAgICAgICAgZnVuY3Rpb24gaXNBcnJheShvYmopIHsKLSAgICAgICAgICAgIHZh
ciBtb2R1bGVQYXRoLCB0eXBlOwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIEVtYmVyQXJyYXkg
PT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgbW9kdWxlUGF0aCA9ICdlbWJlci1y
dW50aW1lL21peGlucy9hcnJheSc7Ci0gICAgICAgICAgICAgICAgaWYgKEVtYmVyLl9fbG9hZGVy
LnJlZ2lzdHJ5W21vZHVsZVBhdGhdKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyQXJyYXkg
PSBFbWJlci5fX2xvYWRlci5yZXF1aXJlKG1vZHVsZVBhdGgpWydkZWZhdWx0J107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW9iaiB8fCBvYmou
c2V0SW50ZXJ2YWwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSAmJiBBcnJheS5pc0FycmF5KG9iaikp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChFbWJlckFycmF5ICYmIEVtYmVyQXJyYXkuZGV0ZWN0KG9iaikpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHlwZSA9
IHR5cGVPZihvYmopOwotICAgICAgICAgICAgaWYgKCdhcnJheScgPT09IHR5cGUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgo
b2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSAmJiAnb2JqZWN0JyA9PT0gdHlwZSkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEZvcmNlcyB0
aGUgcGFzc2VkIG9iamVjdCB0byBiZSBwYXJ0IG9mIGFuIGFycmF5LiBJZiB0aGUgb2JqZWN0IGlz
IGFscmVhZHkKLSAgICAgICAgICAgICAgYW4gYXJyYXkgb3IgYXJyYXktbGlrZSwgcmV0dXJucyB0
aGUgb2JqZWN0LiBPdGhlcndpc2UgYWRkcyB0aGUgb2JqZWN0IHRvCi0gICAgICAgICAgICAgIGFu
IGFycmF5LiBJZiBvYmogaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCByZXR1cm5zIGFuIGVtcHR5
IGFycmF5LgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1i
ZXIubWFrZUFycmF5KCk7ICAgICAgICAgICAgLy8gW10KLSAgICAgICAgICAgICAgRW1iZXIubWFr
ZUFycmF5KG51bGwpOyAgICAgICAgLy8gW10KLSAgICAgICAgICAgICAgRW1iZXIubWFrZUFycmF5
KHVuZGVmaW5lZCk7ICAgLy8gW10KLSAgICAgICAgICAgICAgRW1iZXIubWFrZUFycmF5KCdsaW5k
c2F5Jyk7ICAgLy8gWydsaW5kc2F5J10KLSAgICAgICAgICAgICAgRW1iZXIubWFrZUFycmF5KFsx
LCAyLCA0Ml0pOyAgLy8gWzEsIDIsIDQyXQotCi0gICAgICAgICAgICAgIHZhciBjb250cm9sbGVy
ID0gRW1iZXIuQXJyYXlQcm94eS5jcmVhdGUoeyBjb250ZW50OiBbXSB9KTsKLQotICAgICAgICAg
ICAgICBFbWJlci5tYWtlQXJyYXkoY29udHJvbGxlcikgPT09IGNvbnRyb2xsZXI7ICAvLyB0cnVl
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgbWFrZUFycmF5Ci0g
ICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9i
aiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fQotICAgICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KG9iaikgewotICAgICAgICAgICAgaWYgKG9i
aiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIHJldHVy
biBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpc0FycmF5KG9iaikgPyBv
YmogOiBbb2JqXTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLm1ha2VBcnJheSA9
IG1ha2VBcnJheTsgLyoqCi0gICAgICAgICAgICAgIENoZWNrcyB0byBzZWUgaWYgdGhlIGBtZXRo
b2ROYW1lYCBleGlzdHMgb24gdGhlIGBvYmpgLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgdmFyIGZvbyA9IHsgYmFyOiBFbWJlci5LLCBiYXo6IG51bGwgfTsK
LQotICAgICAgICAgICAgICBFbWJlci5jYW5JbnZva2UoZm9vLCAnYmFyJyk7IC8vIHRydWUKLSAg
ICAgICAgICAgICAgRW1iZXIuY2FuSW52b2tlKGZvbywgJ2JheicpOyAvLyBmYWxzZQotICAgICAg
ICAgICAgICBFbWJlci5jYW5JbnZva2UoZm9vLCAnYmF0Jyk7IC8vIGZhbHNlCi0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY2FuSW52b2tlCi0gICAgICAgICAgICAg
IEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0
IHRvIGNoZWNrIGZvciB0aGUgbWV0aG9kCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBt
ZXRob2ROYW1lIFRoZSBtZXRob2QgbmFtZSB0byBjaGVjayBmb3IKLSAgICAgICAgICAgICAgQHJl
dHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbkludm9r
ZShvYmosIG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAhIShvYmogJiYgdHlwZW9m
IG9ialttZXRob2ROYW1lXSA9PT0gJ2Z1bmN0aW9uJyk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiB0aGUgYG1ldGhvZE5hbWVgIGV4aXN0
cyBvbiB0aGUgYG9iamAsCi0gICAgICAgICAgICAgIGFuZCBpZiBpdCBkb2VzLCBpbnZva2VzIGl0
IHdpdGggdGhlIGFyZ3VtZW50cyBwYXNzZWQuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKCcwMy8xNS8yMDEzJyk7Ci0KLSAgICAg
ICAgICAgICAgRW1iZXIudHJ5SW52b2tlKGQsICdnZXRUaW1lJyk7ICAgICAgICAgICAgICAvLyAx
MzYzMzIwMDAwMDAwCi0gICAgICAgICAgICAgIEVtYmVyLnRyeUludm9rZShkLCAnc2V0RnVsbFll
YXInLCBbMjAxNF0pOyAgLy8gMTM5NDg1NjAwMDAwMAotICAgICAgICAgICAgICBFbWJlci50cnlJ
bnZva2UoZCwgJ25vU3VjaE1ldGhvZCcsIFsyMDE0XSk7IC8vIHVuZGVmaW5lZAotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHRyeUludm9rZQotICAgICAgICAgICAg
ICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVj
dCB0byBjaGVjayBmb3IgdGhlIG1ldGhvZAotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
bWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2hlY2sgZm9yCi0gICAgICAgICAgICAgIEBw
YXJhbSB7QXJyYXl9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZAot
ICAgICAgICAgICAgICBAcmV0dXJuIHsqfSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBpbnZva2Vk
IG1ldGhvZCBvciB1bmRlZmluZWQgaWYgaXQgY2Fubm90IGJlIGludm9rZWQKLSAgICAgICAgICAg
ICovCi0gICAgICAgIGZ1bmN0aW9uIHRyeUludm9rZShvYmosIG1ldGhvZE5hbWUsIGFyZ3MpIHsK
LSAgICAgICAgICAgIGlmIChjYW5JbnZva2Uob2JqLCBtZXRob2ROYW1lKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBhcmdzID8gYXBwbHlTdHIob2JqLCBtZXRob2ROYW1lLCBhcmdzKSA6IGFw
cGx5U3RyKG9iaiwgbWV0aG9kTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBfX2V4cG9ydHNfXy50cnlJbnZva2UgPSB0cnlJbnZva2U7IC8vIGh0dHBzOi8vZ2l0aHVi
LmNvbS9lbWJlcmpzL2VtYmVyLmpzL3B1bGwvMTYxNwotICAgICAgICB2YXIgbmVlZHNGaW5hbGx5
Rml4ID0gKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKLSAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHt9IGZpbmFsbHkgewotICAgICAgICAgICAg
ICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25l
ZWRzRmluYWxseUZpeFRlc3QnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNh
dGNoIChlKSB7fQotCi0gICAgICAgICAgICByZXR1cm4gY291bnQgIT09IDE7Ci0gICAgICAgIH0p
KCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFByb3ZpZGVzIHRyeS9maW5hbGx5IGZ1
bmN0aW9uYWxpdHksIHdoaWxlIHdvcmtpbmcKLSAgICAgICAgICAgICAgYXJvdW5kIFNhZmFyaSdz
IGRvdWJsZSBmaW5hbGx5IGJ1Zy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIHZhciB0cnlhYmxlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc29t
ZVJlc291cmNlLmxvY2soKTsKLSAgICAgICAgICAgICAgICBydW5DYWxsYmFjaygpOyAvLyBNYXkg
dGhyb3cgZXJyb3IuCi0gICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgdmFyIGZpbmFs
aXplciA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNvbWVSZXNvdXJjZS51bmxvY2so
KTsKLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICBFbWJlci50cnlGaW5hbGx5KHRy
eWFibGUsIGZpbmFsaXplcik7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgdHJ5RmluYWxseQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAg
IEBwYXJhbSB7RnVuY3Rpb259IHRyeWFibGUgVGhlIGZ1bmN0aW9uIHRvIHJ1biB0aGUgdHJ5IGNh
bGxiYWNrCi0gICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGZpbmFsaXplciBUaGUgZnVu
Y3Rpb24gdG8gcnVuIHRoZSBmaW5hbGx5IGNhbGxiYWNrCi0gICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBbYmluZGluZ10gVGhlIG9wdGlvbmFsIGNhbGxpbmcgb2JqZWN0LiBEZWZhdWx0cyB0
byAndGhpcycKLSAgICAgICAgICAgICAgQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBpcyB0
aGUgdGhhdCBvZiB0aGUgZmluYWxpemVyLAotICAgICAgICAgICAgICB1bmxlc3MgdGhhdCB2YWx1
ZSBpcyB1bmRlZmluZWQsIGluIHdoaWNoIGNhc2UgaXQgaXMgdGhlIHJldHVybiB2YWx1ZQotICAg
ICAgICAgICAgICBvZiB0aGUgdHJ5YWJsZQotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIg
dHJ5RmluYWxseTsKLSAgICAgICAgaWYgKG5lZWRzRmluYWxseUZpeCkgewotICAgICAgICAgICAg
dHJ5RmluYWxseSA9IGZ1bmN0aW9uKHRyeWFibGUsIGZpbmFsaXplciwgYmluZGluZykgewotICAg
ICAgICAgICAgICAgIHZhciByZXN1bHQsIGZpbmFsUmVzdWx0LCBmaW5hbEVycm9yOwotCi0gICAg
ICAgICAgICAgICAgYmluZGluZyA9IGJpbmRpbmcgfHwgdGhpczsKLQotICAgICAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyeWFibGUuY2FsbChiaW5kaW5n
KTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxSZXN1bHQgPSBmaW5hbGl6ZXIuY2FsbChi
aW5kaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZmluYWxFcnJvciA9IGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZmluYWxFcnJvcikgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBmaW5hbEVycm9yOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiAoZmluYWxSZXN1bHQgPT09IHVuZGVmaW5lZCkgPyByZXN1bHQg
OiBmaW5hbFJlc3VsdDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB0cnlGaW5hbGx5ID0gZnVuY3Rpb24odHJ5YWJsZSwgZmluYWxpemVyLCBiaW5kaW5nKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgZmluYWxSZXN1bHQ7Ci0KLSAgICAgICAgICAg
ICAgICBiaW5kaW5nID0gYmluZGluZyB8fCB0aGlzOwotCi0gICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ5YWJsZS5jYWxsKGJpbmRpbmcpOwotICAg
ICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0
ID0gZmluYWxpemVyLmNhbGwoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIChmaW5hbFJlc3VsdCA9PT0gdW5kZWZpbmVkKSA/IHJlc3VsdCA6IGZp
bmFsUmVzdWx0OwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBQcm92aWRlcyB0cnkvY2F0Y2gvZmluYWxseSBmdW5jdGlvbmFsaXR5LCB3aGls
ZSB3b3JraW5nCi0gICAgICAgICAgICAgIGFyb3VuZCBTYWZhcmkncyBkb3VibGUgZmluYWxseSBi
dWcuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgdHJ5
YWJsZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBsaXN0
ZW5lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9
IGxpc3RlbmVyc1tpXTsKLSAgICAgICAgICAgICAgICAgIGJlZm9yZVZhbHVlc1tpXSA9IGxpc3Rl
bmVyLmJlZm9yZShuYW1lLCB0aW1lKCksIHBheWxvYWQpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGJpbmRpbmcpOwotICAgICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICAgIHZhciBjYXRjaGFibGUgPSBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWQgfHwge307Ci0gICAgICAgICAgICAgICAg
cGF5bG9hZC5leGNlcHRpb24gPSBlOwotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAg
IHZhciBmaW5hbGl6ZXIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
LCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAg
bGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07Ci0gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5hZnRl
cihuYW1lLCB0aW1lKCksIHBheWxvYWQsIGJlZm9yZVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIEVtYmVyLnRyeUNhdGNoRmlu
YWxseSh0cnlhYmxlLCBjYXRjaGFibGUsIGZpbmFsaXplcik7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgdHJ5Q2F0Y2hGaW5hbGx5Ci0gICAgICAgICAgICAgIEBm
b3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gdHJ5YWJsZSBUaGUgZnVu
Y3Rpb24gdG8gcnVuIHRoZSB0cnkgY2FsbGJhY2sKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gY2F0Y2hhYmxlIFRoZSBmdW5jdGlvbiB0byBydW4gdGhlIGNhdGNoYWJsZSBjYWxsYmFj
awotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5hbGl6ZXIgVGhlIGZ1bmN0aW9u
IHRvIHJ1biB0aGUgZmluYWxseSBjYWxsYmFjawotICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gW2JpbmRpbmddIFRoZSBvcHRpb25hbCBjYWxsaW5nIG9iamVjdC4gRGVmYXVsdHMgdG8gJ3Ro
aXMnCi0gICAgICAgICAgICAgIEByZXR1cm4geyp9IFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHRo
YXQgb2YgdGhlIGZpbmFsaXplciwKLSAgICAgICAgICAgICAgdW5sZXNzIHRoYXQgdmFsdWUgaXMg
dW5kZWZpbmVkLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAg
ICAgICAgb2YgdGhlIHRyeWFibGUuCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgdHJ5Q2F0
Y2hGaW5hbGx5OwotICAgICAgICBpZiAobmVlZHNGaW5hbGx5Rml4KSB7Ci0gICAgICAgICAgICB0
cnlDYXRjaEZpbmFsbHkgPSBmdW5jdGlvbih0cnlhYmxlLCBjYXRjaGFibGUsIGZpbmFsaXplciwg
YmluZGluZykgewotICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGZpbmFsUmVzdWx0LCBmaW5h
bEVycm9yOwotCi0gICAgICAgICAgICAgICAgYmluZGluZyA9IGJpbmRpbmcgfHwgdGhpczsKLQot
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyeWFi
bGUuY2FsbChiaW5kaW5nKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBjYXRjaGFibGUuY2FsbChiaW5kaW5nLCBlcnJvcik7
Ci0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0ID0gZmluYWxpemVyLmNhbGwoYmlu
ZGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmFsRXJyb3IgPSBlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZpbmFsRXJyb3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgZmluYWxFcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gKGZpbmFsUmVzdWx0ID09PSB1bmRlZmluZWQpID8gcmVzdWx0IDog
ZmluYWxSZXN1bHQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdHJ5Q2F0Y2hGaW5hbGx5ID0gZnVuY3Rpb24odHJ5YWJsZSwgY2F0Y2hhYmxlLCBmaW5hbGl6
ZXIsIGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0LCBmaW5hbFJlc3VsdDsK
LQotICAgICAgICAgICAgICAgIGJpbmRpbmcgPSBiaW5kaW5nIHx8IHRoaXM7Ci0KLSAgICAgICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnlhYmxlLmNhbGwo
YmluZGluZyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gY2F0Y2hhYmxlLmNhbGwoYmluZGluZywgZXJyb3IpOwotICAgICAg
ICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdWx0ID0g
ZmluYWxpemVyLmNhbGwoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIChmaW5hbFJlc3VsdCA9PT0gdW5kZWZpbmVkKSA/IHJlc3VsdCA6IGZpbmFs
UmVzdWx0OwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgLy8gVFlQSU5HICYgQVJS
QVkgTUVTU0FHSU5HCi0gICAgICAgIC8vCi0KLSAgICAgICAgdmFyIFRZUEVfTUFQID0ge307Ci0g
ICAgICAgIHZhciB0ID0gIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRl
IFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIik7Ci0gICAgICAgIGZvckVhY2guY2FsbCh0LCBmdW5j
dGlvbihuYW1lKSB7Ci0gICAgICAgICAgICBUWVBFX01BUFsgIltvYmplY3QgIiArIG5hbWUgKyAi
XSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIHRv
U3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKLQotICAgICAgICB2YXIgRW1iZXJP
YmplY3Q7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJldHVybnMgYSBjb25zaXN0ZW50
IHR5cGUgZm9yIHRoZSBwYXNzZWQgaXRlbS4KLQotICAgICAgICAgICAgICBVc2UgdGhpcyBpbnN0
ZWFkIG9mIHRoZSBidWlsdC1pbiBgdHlwZW9mYCB0byBnZXQgdGhlIHR5cGUgb2YgYW4gaXRlbS4K
LSAgICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGFjcm9zcyBhbGwg
YnJvd3NlcnMgYW5kIGluY2x1ZGVzIGEgYml0Ci0gICAgICAgICAgICAgIG1vcmUgZGV0YWlsLiBI
ZXJlIGlzIHdoYXQgd2lsbCBiZSByZXR1cm5lZDoKLQotICAgICAgICAgICAgICAgICAgfCBSZXR1
cm4gVmFsdWUgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgICAgICAgICAg
ICAgICAgIHwgJ3N0cmluZycgICAgICB8IFN0cmluZyBwcmltaXRpdmUgb3IgU3RyaW5nIG9iamVj
dC4gICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAnbnVtYmVyJyAgICAg
IHwgTnVtYmVyIHByaW1pdGl2ZSBvciBOdW1iZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICB8
Ci0gICAgICAgICAgICAgICAgICB8ICdib29sZWFuJyAgICAgfCBCb29sZWFuIHByaW1pdGl2ZSBv
ciBCb29sZWFuIG9iamVjdC4gICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwg
J251bGwnICAgICAgICB8IE51bGwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAndW5kZWZpbmVkJyAgIHwgVW5kZWZp
bmVkIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAg
ICAgICAgICAgICB8ICdmdW5jdGlvbicgICAgfCBBIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgJ2FycmF5JyAg
ICAgICB8IEFuIGluc3RhbmNlIG9mIEFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAotICAgICAgICAgICAgICAgICAgfCAncmVnZXhwJyAgICAgIHwgQW4gaW5zdGFuY2Ugb2Yg
UmVnRXhwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAg
ICB8ICdkYXRlJyAgICAgICAgfCBBbiBpbnN0YW5jZSBvZiBEYXRlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgJ2NsYXNzJyAgICAgICB8IEFu
IEVtYmVyIGNsYXNzIChjcmVhdGVkIHVzaW5nIEVtYmVyLk9iamVjdC5leHRlbmQoKSkgfAotICAg
ICAgICAgICAgICAgICAgfCAnaW5zdGFuY2UnICAgIHwgQW4gRW1iZXIgb2JqZWN0IGluc3RhbmNl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICdlcnJv
cicgICAgICAgfCBBbiBpbnN0YW5jZSBvZiB0aGUgRXJyb3Igb2JqZWN0ICAgICAgICAgICAgICAg
ICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgJ29iamVjdCcgICAgICB8IEEgSmF2YVNjcmlw
dCBvYmplY3Qgbm90IGluaGVyaXRpbmcgZnJvbSBFbWJlci5PYmplY3QgfAotCi0gICAgICAgICAg
ICAgIEV4YW1wbGVzOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgRW1iZXIudHlwZU9mKCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5kZWZpbmVkJwot
ICAgICAgICAgICAgICBFbWJlci50eXBlT2YobnVsbCk7ICAgICAgICAgICAgICAgICAgIC8vICdu
dWxsJwotICAgICAgICAgICAgICBFbWJlci50eXBlT2YodW5kZWZpbmVkKTsgICAgICAgICAgICAg
IC8vICd1bmRlZmluZWQnCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZignbWljaGFlbCcpOyAg
ICAgICAgICAgICAgLy8gJ3N0cmluZycKLSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKG5ldyBT
dHJpbmcoJ21pY2hhZWwnKSk7ICAvLyAnc3RyaW5nJwotICAgICAgICAgICAgICBFbWJlci50eXBl
T2YoMTAxKTsgICAgICAgICAgICAgICAgICAgIC8vICdudW1iZXInCi0gICAgICAgICAgICAgIEVt
YmVyLnR5cGVPZihuZXcgTnVtYmVyKDEwMSkpOyAgICAgICAgLy8gJ251bWJlcicKLSAgICAgICAg
ICAgICAgRW1iZXIudHlwZU9mKHRydWUpOyAgICAgICAgICAgICAgICAgICAvLyAnYm9vbGVhbicK
LSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKG5ldyBCb29sZWFuKHRydWUpKTsgICAgICAvLyAn
Ym9vbGVhbicKLSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKEVtYmVyLm1ha2VBcnJheSk7ICAg
ICAgICAvLyAnZnVuY3Rpb24nCi0gICAgICAgICAgICAgIEVtYmVyLnR5cGVPZihbMSwgMiwgOTBd
KTsgICAgICAgICAgICAgLy8gJ2FycmF5JwotICAgICAgICAgICAgICBFbWJlci50eXBlT2YoL2Fi
Yy8pOyAgICAgICAgICAgICAgICAgIC8vICdyZWdleHAnCi0gICAgICAgICAgICAgIEVtYmVyLnR5
cGVPZihuZXcgRGF0ZSgpKTsgICAgICAgICAgICAgLy8gJ2RhdGUnCi0gICAgICAgICAgICAgIEVt
YmVyLnR5cGVPZihFbWJlci5PYmplY3QuZXh0ZW5kKCkpOyAgLy8gJ2NsYXNzJwotICAgICAgICAg
ICAgICBFbWJlci50eXBlT2YoRW1iZXIuT2JqZWN0LmNyZWF0ZSgpKTsgIC8vICdpbnN0YW5jZScK
LSAgICAgICAgICAgICAgRW1iZXIudHlwZU9mKG5ldyBFcnJvcigndGVhbW9jaWwnKSk7ICAvLyAn
ZXJyb3InCi0KLSAgICAgICAgICAgICAgLy8gJ25vcm1hbCcgSmF2YVNjcmlwdCBvYmplY3QKLSAg
ICAgICAgICAgICAgRW1iZXIudHlwZU9mKHsgYTogJ2InIH0pOyAgICAgICAgICAgICAvLyAnb2Jq
ZWN0JwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHR5cGVPZgot
ICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBp
dGVtIHRoZSBpdGVtIHRvIGNoZWNrCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gdGhl
IHR5cGUKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHR5cGVPZihpdGVtKSB7Ci0g
ICAgICAgICAgICB2YXIgcmV0LCBtb2R1bGVQYXRoOwotCi0gICAgICAgICAgICAvLyBFUzZUT0RP
OiBEZXBlbmRzIG9uIEVtYmVyLk9iamVjdCB3aGljaCBpcyBkZWZpbmVkIGluIHJ1bnRpbWUuCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIEVtYmVyT2JqZWN0ID09PSAidW5kZWZpbmVkIikgewotICAg
ICAgICAgICAgICAgIG1vZHVsZVBhdGggPSAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JzsK
LSAgICAgICAgICAgICAgICBpZiAoRW1iZXIuX19sb2FkZXIucmVnaXN0cnlbbW9kdWxlUGF0aF0p
IHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXJPYmplY3QgPSBFbWJlci5fX2xvYWRlci5yZXF1
aXJlKG1vZHVsZVBhdGgpWydkZWZhdWx0J107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXQgPSAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRl
ZmluZWQpID8gU3RyaW5nKGl0ZW0pIDogVFlQRV9NQVBbdG9TdHJpbmcuY2FsbChpdGVtKV0gfHwg
J29iamVjdCc7Ci0KLSAgICAgICAgICAgIGlmIChyZXQgPT09ICdmdW5jdGlvbicpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoRW1iZXJPYmplY3QgJiYgRW1iZXJPYmplY3QuZGV0ZWN0KGl0ZW0pKSAK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gJ2NsYXNzJzsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAocmV0ID09PSAnb2JqZWN0JykgewotICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNl
b2YgRXJyb3IpIAotICAgICAgICAgICAgICAgICAgICByZXQgPSAnZXJyb3InOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKEVtYmVyT2JqZWN0ICYmIGl0ZW0gaW5zdGFuY2VvZiBFbWJlck9iamVj
dCkgCi0gICAgICAgICAgICAgICAgICAgIHJldCA9ICdpbnN0YW5jZSc7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGUpIAotICAgICAgICAgICAgICAgICAgICBy
ZXQgPSAnZGF0ZSc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ29udmVuaWVuY2UgbWV0aG9k
IHRvIGluc3BlY3QgYW4gb2JqZWN0LiBUaGlzIG1ldGhvZCB3aWxsIGF0dGVtcHQgdG8KLSAgICAg
ICAgICAgICAgY29udmVydCB0aGUgb2JqZWN0IGludG8gYSB1c2VmdWwgc3RyaW5nIGRlc2NyaXB0
aW9uLgotCi0gICAgICAgICAgICAgIEl0IGlzIGEgcHJldHR5IHNpbXBsZSBpbXBsZW1lbnRhdGlv
bi4gSWYgeW91IHdhbnQgc29tZXRoaW5nIG1vcmUgcm9idXN0LAotICAgICAgICAgICAgICB1c2Ug
c29tZXRoaW5nIGxpa2UgSlNEdW1wOiBodHRwczovL2dpdGh1Yi5jb20vTlYvanNEdW1wCi0KLSAg
ICAgICAgICAgICAgQG1ldGhvZCBpbnNwZWN0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAg
ICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHlvdSB3YW50IHRvIGlu
c3BlY3QuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1N0cmluZ30gQSBkZXNjcmlwdGlvbiBvZiB0
aGUgb2JqZWN0Ci0gICAgICAgICAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgKi8KLSAg
ICAgICAgZnVuY3Rpb24gaW5zcGVjdChvYmopIHsKLSAgICAgICAgICAgIHZhciB0eXBlID0gdHlw
ZU9mKG9iaik7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FycmF5JykgewotICAgICAgICAg
ICAgICAgIHJldHVybiAnWycgKyBvYmogKyAnXSc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqICsg
Jyc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciB2LCByZXQgPSBbXTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKLSAgICAgICAgICAgICAgICBpZiAob2JqLmhh
c093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdiA9IG9ialtrZXldOwot
ICAgICAgICAgICAgICAgICAgICBpZiAodiA9PT0gJ3RvU3RyaW5nJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaWdub3JlIHVzZWxlc3MgaXRlbXMKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGVPZih2KSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdiA9
ICJmdW5jdGlvbigpIHsgLi4uIH0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHJldC5wdXNoKGtleSArICI6ICIgKyB2KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gInsiICsgcmV0LmpvaW4oIiwgIikgKyAi
fSI7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5pbnNwZWN0ID0gaW5zcGVjdDsg
Ly8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGludGVudGlvbmFsbHkgbWluaWZpZWQgdG8g
a2VlcCB0aGUgZnVuY3Rpb25zCi0gICAgICAgIC8vIGJlbG93IENocm9tZSdzIGZ1bmN0aW9uIGJv
ZHkgc2l6ZSBpbmxpbmluZyBsaW1pdCBvZiA2MDAgY2hhcnMuCi0KLSAgICAgICAgZnVuY3Rpb24g
YXBwbHkodCAvKiB0YXJnZXQgKi8KLSAgICAgICAgLCBtIC8qIG1ldGhvZCAqLwotICAgICAgICAs
IGEgLyogYXJncyAqLwotICAgICAgICApIHsKLSAgICAgICAgICAgIHZhciBsID0gYSAmJiBhLmxl
bmd0aDsKLSAgICAgICAgICAgIGlmICghYSB8fCAhbCkgewotICAgICAgICAgICAgICAgIHJldHVy
biBtLmNhbGwodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGwpIHsKLSAg
ICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4gbS5jYWxsKHQsIGFbMF0p
OwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiBtLmNhbGwodCwg
YVswXSwgYVsxXSk7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG0uY2FsbCh0LCBhWzBdLCBhWzFdLCBhWzJdKTsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbS5jYWxsKHQsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM10pOwotICAg
ICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIHJldHVybiBtLmNhbGwodCwgYVswXSwg
YVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBtLmFwcGx5KHQsIGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgX19leHBvcnRzX18uYXBwbHkgPSBhcHBseTsKLSAgICAgICAgZnVuY3Rpb24gYXBw
bHlTdHIodCAvKiB0YXJnZXQgKi8KLSAgICAgICAgLCBtIC8qIG1ldGhvZCAqLwotICAgICAgICAs
IGEgLyogYXJncyAqLwotICAgICAgICApIHsKLSAgICAgICAgICAgIHZhciBsID0gYSAmJiBhLmxl
bmd0aDsKLSAgICAgICAgICAgIGlmICghYSB8fCAhbCkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0W21dKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGwpIHsKLSAgICAg
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4gdFttXShhWzBdKTsKLSAgICAg
ICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gdFttXShhWzBdLCBhWzFdKTsK
LSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdFttXShhWzBdLCBh
WzFdLCBhWzJdKTsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
dFttXShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdFttXShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRbbV0uYXBwbHkodCwg
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5hcHBs
eVN0ciA9IGFwcGx5U3RyOwotICAgICAgICBfX2V4cG9ydHNfXy5HVUlEX0tFWSA9IEdVSURfS0VZ
OwotICAgICAgICBfX2V4cG9ydHNfXy5HVUlEX1BSRUZJWCA9IEdVSURfUFJFRklYOwotICAgICAg
ICBfX2V4cG9ydHNfXy5NRVRBX0RFU0MgPSBNRVRBX0RFU0M7Ci0gICAgICAgIF9fZXhwb3J0c19f
LkVNUFRZX01FVEEgPSBFTVBUWV9NRVRBOwotICAgICAgICBfX2V4cG9ydHNfXy5NRVRBX0tFWSA9
IE1FVEFfS0VZOwotICAgICAgICBfX2V4cG9ydHNfXy5tZXRhID0gbWV0YTsKLSAgICAgICAgX19l
eHBvcnRzX18udHlwZU9mID0gdHlwZU9mOwotICAgICAgICBfX2V4cG9ydHNfXy50cnlDYXRjaEZp
bmFsbHkgPSB0cnlDYXRjaEZpbmFsbHk7Ci0gICAgICAgIF9fZXhwb3J0c19fLmlzQXJyYXkgPSBp
c0FycmF5OwotICAgICAgICBfX2V4cG9ydHNfXy5jYW5JbnZva2UgPSBjYW5JbnZva2U7Ci0gICAg
ICAgIF9fZXhwb3J0c19fLnRyeUZpbmFsbHkgPSB0cnlGaW5hbGx5OwotICAgIH0pOwotICAgIGRl
ZmluZSgiZW1iZXItbWV0YWwvd2F0Y2hfa2V5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAi
ZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVu
Y3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFy
IEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBtZXRhID0g
X19kZXBlbmRlbmN5Ml9fLm1ldGE7Ci0gICAgICAgIHZhciB0eXBlT2YgPSBfX2RlcGVuZGVuY3ky
X18udHlwZU9mOwotICAgICAgICB2YXIgcGxhdGZvcm0gPSBfX2RlcGVuZGVuY3kzX18ucGxhdGZv
cm07Ci0KLSAgICAgICAgdmFyIG1ldGFGb3IgPSBtZXRhOyAvLyB1dGlscy5qcwotICAgICAgICB2
YXIgTUFOREFUT1JZX1NFVFRFUiA9IEVtYmVyLkVOVi5NQU5EQVRPUllfU0VUVEVSOwotICAgICAg
ICB2YXIgb19kZWZpbmVQcm9wZXJ0eSA9IHBsYXRmb3JtLmRlZmluZVByb3BlcnR5OwotCi0gICAg
ICAgIGZ1bmN0aW9uIHdhdGNoS2V5KG9iaiwga2V5TmFtZSwgbWV0YSkgewotICAgICAgICAgICAg
Ly8gY2FuJ3Qgd2F0Y2ggbGVuZ3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgotICAgICAg
ICAgICAgaWYgKGtleU5hbWUgPT09ICdsZW5ndGgnICYmIHR5cGVPZihvYmopID09PSAnYXJyYXkn
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2YXIgbSA9IG1ldGEgfHwgbWV0YUZvcihvYmopLCB3YXRjaGluZyA9IG0ud2F0Y2hpbmc7Ci0K
LSAgICAgICAgICAgIC8vIGFjdGl2YXRlIHdhdGNoaW5nIGZpcnN0IHRpbWUKLSAgICAgICAgICAg
IGlmICghd2F0Y2hpbmdba2V5TmFtZV0pIHsKLSAgICAgICAgICAgICAgICB3YXRjaGluZ1trZXlO
YW1lXSA9IDE7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IG0uZGVzY3Nba2V5TmFtZV07
Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2MgJiYgZGVzYy53aWxsV2F0Y2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzYy53aWxsV2F0Y2gob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai53aWxs
V2F0Y2hQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBvYmoud2lsbFdhdGNoUHJvcGVy
dHkoa2V5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKE1B
TkRBVE9SWV9TRVRURVIgJiYga2V5TmFtZSBpbiBvYmopIHsKLSAgICAgICAgICAgICAgICAgICAg
bS52YWx1ZXNba2V5TmFtZV0gPSBvYmpba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIG9f
ZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBv
YmoucHJvcGVydHlJc0VudW1lcmFibGUoa2V5TmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXQ6IEVtYmVyLk1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJT04sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBnZXQ6IEVtYmVyLkRFRkFVTFRfR0VUVEVSX0ZVTkNUSU9OKGtleU5hbWUpCi0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgd2F0Y2hpbmdba2V5TmFtZV0gPSAod2F0Y2hpbmdba2V5TmFt
ZV0gfHwgMCkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18ud2F0Y2hLZXkgPSB3YXRjaEtleTsKLSAgICAgICAgZnVuY3Rpb24gdW53YXRjaEtleShv
YmosIGtleU5hbWUsIG1ldGEpIHsKLSAgICAgICAgICAgIHZhciBtID0gbWV0YSB8fCBtZXRhRm9y
KG9iaiksIHdhdGNoaW5nID0gbS53YXRjaGluZzsKLQotICAgICAgICAgICAgaWYgKHdhdGNoaW5n
W2tleU5hbWVdID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgd2F0Y2hpbmdba2V5TmFtZV0gPSAw
OwotCi0gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBtLmRlc2NzW2tleU5hbWVdOwotICAgICAg
ICAgICAgICAgIGlmIChkZXNjICYmIGRlc2MuZGlkVW53YXRjaCkgewotICAgICAgICAgICAgICAg
ICAgICBkZXNjLmRpZFVud2F0Y2gob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iai5kaWRVbndhdGNo
UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqLmRpZFVud2F0Y2hQcm9wZXJ0eShr
ZXlOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoTUFOREFU
T1JZX1NFVFRFUiAmJiBrZXlOYW1lIGluIG9iaikgewotICAgICAgICAgICAgICAgICAgICBvX2Rl
ZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogb2Jq
LnByb3BlcnR5SXNFbnVtZXJhYmxlKGtleU5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
c2V0OiBmdW5jdGlvbih2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRl
ZmluZSB0byBzZXQgYXMgZW51bWVyYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9f
ZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1l
cmFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgbS52YWx1ZXNba2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBFbWJlci5ERUZBVUxUX0dFVFRFUl9GVU5D
VElPTihrZXlOYW1lKQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHdhdGNoaW5nW2tleU5hbWVdID4gMSkgewotICAgICAg
ICAgICAgICAgIHdhdGNoaW5nW2tleU5hbWVdLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBfX2V4cG9ydHNfXy51bndhdGNoS2V5ID0gdW53YXRjaEtleTsKLSAgICB9KTsK
LSAgICBkZWZpbmUoImVtYmVyLW1ldGFsL3dhdGNoX3BhdGgiLAotICAgIFsiZW1iZXItbWV0YWwv
dXRpbHMiLCAiZW1iZXItbWV0YWwvY2hhaW5zIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgbWV0YSA9IF9fZGVwZW5kZW5jeTFfXy5tZXRhOwot
ICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5MV9fLnR5cGVPZjsKLSAgICAgICAgdmFy
IENoYWluTm9kZSA9IF9fZGVwZW5kZW5jeTJfXy5DaGFpbk5vZGU7Ci0KLSAgICAgICAgdmFyIG1l
dGFGb3IgPSBtZXRhOwotCi0gICAgICAgIC8vIGdldCB0aGUgY2hhaW5zIGZvciB0aGUgY3VycmVu
dCBvYmplY3QuIElmIHRoZSBjdXJyZW50IG9iamVjdCBoYXMKLSAgICAgICAgLy8gY2hhaW5zIGlu
aGVyaXRlZCBmcm9tIHRoZSBwcm90byB0aGV5IHdpbGwgYmUgY2xvbmVkIGFuZCByZWNvbmZpZ3Vy
ZWQgZm9yCi0gICAgICAgIC8vIHRoZSBjdXJyZW50IG9iamVjdC4KLSAgICAgICAgZnVuY3Rpb24g
Y2hhaW5zRm9yKG9iaiwgbWV0YSkgewotICAgICAgICAgICAgdmFyIG0gPSBtZXRhIHx8IG1ldGFG
b3Iob2JqKSwgcmV0ID0gbS5jaGFpbnM7Ci0gICAgICAgICAgICBpZiAoIXJldCkgewotICAgICAg
ICAgICAgICAgIHJldCA9IG0uY2hhaW5zID0gbmV3IENoYWluTm9kZShudWxsLCBudWxsLCBvYmop
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXQudmFsdWUoKSAhPT0gb2JqKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0ID0gbS5jaGFpbnMgPSByZXQuY29weShvYmopOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHdh
dGNoUGF0aChvYmosIGtleVBhdGgsIG1ldGEpIHsKLSAgICAgICAgICAgIC8vIGNhbid0IHdhdGNo
IGxlbmd0aCBvbiBBcnJheSAtIGl0IGlzIHNwZWNpYWwuLi4KLSAgICAgICAgICAgIGlmIChrZXlQ
YXRoID09PSAnbGVuZ3RoJyAmJiB0eXBlT2Yob2JqKSA9PT0gJ2FycmF5JykgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG0gPSBtZXRh
IHx8IG1ldGFGb3Iob2JqKSwgd2F0Y2hpbmcgPSBtLndhdGNoaW5nOwotCi0gICAgICAgICAgICBp
ZiAoIXdhdGNoaW5nW2tleVBhdGhdKSB7Ci0gICAgICAgICAgICAgICAgLy8gYWN0aXZhdGUgd2F0
Y2hpbmcgZmlyc3QgdGltZQotICAgICAgICAgICAgICAgIHdhdGNoaW5nW2tleVBhdGhdID0gMTsK
LSAgICAgICAgICAgICAgICBjaGFpbnNGb3Iob2JqLCBtKS5hZGQoa2V5UGF0aCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdhdGNoaW5nW2tleVBhdGhdID0gKHdhdGNo
aW5nW2tleVBhdGhdIHx8IDApICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIF9fZXhwb3J0c19fLndhdGNoUGF0aCA9IHdhdGNoUGF0aDsKLSAgICAgICAgZnVuY3Rpb24g
dW53YXRjaFBhdGgob2JqLCBrZXlQYXRoLCBtZXRhKSB7Ci0gICAgICAgICAgICB2YXIgbSA9IG1l
dGEgfHwgbWV0YUZvcihvYmopLCB3YXRjaGluZyA9IG0ud2F0Y2hpbmc7Ci0KLSAgICAgICAgICAg
IGlmICh3YXRjaGluZ1trZXlQYXRoXSA9PT0gMSkgewotICAgICAgICAgICAgICAgIHdhdGNoaW5n
W2tleVBhdGhdID0gMDsKLSAgICAgICAgICAgICAgICBjaGFpbnNGb3Iob2JqLCBtKS5yZW1vdmUo
a2V5UGF0aCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHdhdGNoaW5nW2tleVBhdGhdID4gMSkg
ewotICAgICAgICAgICAgICAgIHdhdGNoaW5nW2tleVBhdGhdLS07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy51bndhdGNoUGF0aCA9IHVud2F0Y2hQYXRo
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItbWV0YWwvd2F0Y2hpbmciLAotICAgIFsiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvY2hhaW5zIiwgImVtYmVyLW1ldGFsL3dhdGNo
X2tleSIsICJlbWJlci1tZXRhbC93YXRjaF9wYXRoIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyLW1ldGFsCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5MV9fLm1ldGE7Ci0gICAgICAgIHZhciBN
RVRBX0tFWSA9IF9fZGVwZW5kZW5jeTFfXy5NRVRBX0tFWTsKLSAgICAgICAgdmFyIEdVSURfS0VZ
ID0gX19kZXBlbmRlbmN5MV9fLkdVSURfS0VZOwotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBl
bmRlbmN5MV9fLnR5cGVPZjsKLSAgICAgICAgdmFyIGdlbmVyYXRlR3VpZCA9IF9fZGVwZW5kZW5j
eTFfXy5nZW5lcmF0ZUd1aWQ7Ci0gICAgICAgIHZhciByZW1vdmVDaGFpbldhdGNoZXIgPSBfX2Rl
cGVuZGVuY3kyX18ucmVtb3ZlQ2hhaW5XYXRjaGVyOwotICAgICAgICB2YXIgZmx1c2hQZW5kaW5n
Q2hhaW5zID0gX19kZXBlbmRlbmN5Ml9fLmZsdXNoUGVuZGluZ0NoYWluczsKLSAgICAgICAgdmFy
IHdhdGNoS2V5ID0gX19kZXBlbmRlbmN5M19fLndhdGNoS2V5OwotICAgICAgICB2YXIgdW53YXRj
aEtleSA9IF9fZGVwZW5kZW5jeTNfXy51bndhdGNoS2V5OwotICAgICAgICB2YXIgd2F0Y2hQYXRo
ID0gX19kZXBlbmRlbmN5NF9fLndhdGNoUGF0aDsKLSAgICAgICAgdmFyIHVud2F0Y2hQYXRoID0g
X19kZXBlbmRlbmN5NF9fLnVud2F0Y2hQYXRoOwotCi0gICAgICAgIHZhciBtZXRhRm9yID0gbWV0
YTsgLy8gdXRpbHMuanMKLQotICAgICAgICAvLyByZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBw
YXRoIGlzIGp1c3QgYSBrZXlOYW1lCi0gICAgICAgIGZ1bmN0aW9uIGlzS2V5TmFtZShwYXRoKSB7
Ci0gICAgICAgICAgICByZXR1cm4gcGF0aC5pbmRleE9mKCcuJykgPT09IC0xOwotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFN0YXJ0cyB3YXRjaGluZyBhIHByb3BlcnR5
IG9uIGFuIG9iamVjdC4gV2hlbmV2ZXIgdGhlIHByb3BlcnR5IGNoYW5nZXMsCi0gICAgICAgICAg
ICAgIGludm9rZXMgYEVtYmVyLnByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBFbWJlci5wcm9wZXJ0
eURpZENoYW5nZWAuIFRoaXMgaXMgdGhlCi0gICAgICAgICAgICAgIHByaW1pdGl2ZSB1c2VkIGJ5
IG9ic2VydmVycyBhbmQgZGVwZW5kZW50IGtleXM7IHVzdWFsbHkgeW91IHdpbGwgbmV2ZXIgY2Fs
bAotICAgICAgICAgICAgICB0aGlzIG1ldGhvZCBkaXJlY3RseSBidXQgaW5zdGVhZCB1c2UgaGln
aGVyIGxldmVsIG1ldGhvZHMgbGlrZQotICAgICAgICAgICAgICBgRW1iZXIuYWRkT2JzZXJ2ZXIo
KWAKLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHdhdGNo
Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gd2F0Y2gob2JqLCBfa2V5UGF0aCwgbSkgewotICAgICAgICAgICAgLy8gY2Fu
J3Qgd2F0Y2ggbGVuZ3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgotICAgICAgICAgICAg
aWYgKF9rZXlQYXRoID09PSAnbGVuZ3RoJyAmJiB0eXBlT2Yob2JqKSA9PT0gJ2FycmF5Jykgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGlzS2V5TmFtZShfa2V5UGF0aCkpIHsKLSAgICAgICAgICAgICAgICB3YXRjaEtleShvYmosIF9r
ZXlQYXRoLCBtKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2F0Y2hQ
YXRoKG9iaiwgX2tleVBhdGgsIG0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgX19leHBvcnRzX18ud2F0Y2ggPSB3YXRjaDsKLQotICAgICAgICBmdW5jdGlvbiBpc1dhdGNo
aW5nKG9iaiwga2V5KSB7Ci0gICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV07Ci0g
ICAgICAgICAgICByZXR1cm4gKG1ldGEgJiYgbWV0YS53YXRjaGluZ1trZXldKSA+IDA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5pc1dhdGNoaW5nID0gaXNXYXRjaGluZzsKLSAg
ICAgICAgd2F0Y2guZmx1c2hQZW5kaW5nID0gZmx1c2hQZW5kaW5nQ2hhaW5zOwotCi0gICAgICAg
IGZ1bmN0aW9uIHVud2F0Y2gob2JqLCBfa2V5UGF0aCwgbSkgewotICAgICAgICAgICAgLy8gY2Fu
J3Qgd2F0Y2ggbGVuZ3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgotICAgICAgICAgICAg
aWYgKF9rZXlQYXRoID09PSAnbGVuZ3RoJyAmJiB0eXBlT2Yob2JqKSA9PT0gJ2FycmF5Jykgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGlzS2V5TmFtZShfa2V5UGF0aCkpIHsKLSAgICAgICAgICAgICAgICB1bndhdGNoS2V5KG9iaiwg
X2tleVBhdGgsIG0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bndh
dGNoUGF0aChvYmosIF9rZXlQYXRoLCBtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIF9fZXhwb3J0c19fLnVud2F0Y2ggPSB1bndhdGNoOyAvKioKLSAgICAgICAgICAgICAg
Q2FsbCBvbiBhbiBvYmplY3Qgd2hlbiB5b3UgZmlyc3QgYmVnZXQgaXQgZnJvbSBhbm90aGVyIG9i
amVjdC4gVGhpcyB3aWxsCi0gICAgICAgICAgICAgIHNldHVwIGFueSBjaGFpbmVkIHdhdGNoZXJz
IG9uIHRoZSBvYmplY3QgaW5zdGFuY2UgYXMgbmVlZGVkLiBUaGlzIG1ldGhvZCBpcwotICAgICAg
ICAgICAgICBzYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMuCi0KLSAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgQG1ldGhvZCByZXdhdGNoCi0gICAgICAgICAgICAgIEBmb3Ig
RW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIG9iagotICAgICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24gcmV3YXRjaChvYmopIHsKLSAgICAgICAgICAgIHZhciBtID0gb2JqW01FVEFfS0VZ
XSwgY2hhaW5zID0gbSAmJiBtLmNoYWluczsKLQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRo
ZSBvYmplY3QgaGFzIGl0cyBvd24gZ3VpZC4KLSAgICAgICAgICAgIGlmIChHVUlEX0tFWSBpbiBv
YmogJiYgIW9iai5oYXNPd25Qcm9wZXJ0eShHVUlEX0tFWSkpIHsKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0ZUd1aWQob2JqKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIGFueSBjaGFpbmVkIHdhdGNoZXJzIHVwZGF0ZS4KLSAgICAgICAgICAgIGlmIChjaGFpbnMg
JiYgY2hhaW5zLnZhbHVlKCkgIT09IG9iaikgewotICAgICAgICAgICAgICAgIG0uY2hhaW5zID0g
Y2hhaW5zLmNvcHkob2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fLnJld2F0Y2ggPSByZXdhdGNoOwotICAgICAgICB2YXIgTk9ERV9TVEFDSyA9IFtd
OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUZWFycyBkb3duIHRoZSBtZXRhIG9uIGFu
IG9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICAgICAgICAg
ICAgTXVsdGlwbGUgY2FsbHMgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLQotICAgICAgICAgICAgICBA
bWV0aG9kIGRlc3Ryb3kKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gb2JqICB0aGUgb2JqZWN0IHRvIGRlc3Ryb3kKLSAgICAgICAgICAgICAg
QHJldHVybiB7dm9pZH0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3ko
b2JqKSB7Ci0gICAgICAgICAgICB2YXIgbWV0YSA9IG9ialtNRVRBX0tFWV0sIG5vZGUsIG5vZGVz
LCBrZXksIG5vZGVPYmplY3Q7Ci0gICAgICAgICAgICBpZiAobWV0YSkgewotICAgICAgICAgICAg
ICAgIG9ialtNRVRBX0tFWV0gPSBudWxsOwotICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjaGFp
bldhdGNoZXJzIHRvIHJlbW92ZSBjaXJjdWxhciByZWZlcmVuY2VzIHRoYXQgd291bGQgcHJldmVu
dCBHQwotICAgICAgICAgICAgICAgIG5vZGUgPSBtZXRhLmNoYWluczsKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZSkgewotICAgICAgICAgICAgICAgICAgICBOT0RFX1NUQUNLLnB1c2gobm9kZSk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgdHJlZQotICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoTk9ERV9TVEFDSy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gTk9ERV9TVEFDSy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1
c2ggY2hpbGRyZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzID0gbm9kZS5fY2hhaW5z
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChrZXkgaW4gbm9kZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGVzLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5PREVfU1RBQ0sucHVzaChub2Rlc1trZXldKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHJlbW92ZSBjaGFpbldhdGNoZXIgaW4gbm9kZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLl93YXRjaGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVPYmplY3QgPSBub2RlLl9vYmplY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGVPYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hh
aW5XYXRjaGVyKG5vZGVPYmplY3QsIG5vZGUuX2tleSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uZGVzdHJveSA9IGRlc3Ryb3k7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJl
bWJlci1oYW5kbGViYXJzIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsICJlbWJlci1y
b3V0aW5nLWhhbmRsZWJhcnMvaGVscGVycy9zaGFyZWQiLCAiZW1iZXItcm91dGluZy1oYW5kbGVi
YXJzL2hlbHBlcnMvbGlua190byIsICJlbWJlci1yb3V0aW5nLWhhbmRsZWJhcnMvaGVscGVycy9v
dXRsZXQiLCAiZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvcmVuZGVyIiwgImVtYmVy
LXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL2FjdGlvbiIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywg
X19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBl
bmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBFbWJlciBSb3V0aW5nIEhhbmRsZWJh
cnMKLQotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBl
bWJlci1yb3V0aW5nLWhhbmRsZWJhcnMKLSAgICAgICAgICAgIEByZXF1aXJlcyBlbWJlci12aWV3
cwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTJf
X1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgUm91dGVyID0gX19kZXBlbmRlbmN5M19fWyJkZWZh
dWx0Il07Ci0KLSAgICAgICAgdmFyIHJlc29sdmVQYXRocyA9IF9fZGVwZW5kZW5jeTRfXy5yZXNv
bHZlUGF0aHM7Ci0gICAgICAgIHZhciByZXNvbHZlUGFyYW1zID0gX19kZXBlbmRlbmN5NF9fLnJl
c29sdmVQYXJhbXM7Ci0KLSAgICAgICAgdmFyIGRlcHJlY2F0ZWRMaW5rVG9IZWxwZXIgPSBfX2Rl
cGVuZGVuY3k1X18uZGVwcmVjYXRlZExpbmtUb0hlbHBlcjsKLSAgICAgICAgdmFyIGxpbmtUb0hl
bHBlciA9IF9fZGVwZW5kZW5jeTVfXy5saW5rVG9IZWxwZXI7Ci0gICAgICAgIHZhciBMaW5rVmll
dyA9IF9fZGVwZW5kZW5jeTVfXy5MaW5rVmlldzsKLQotICAgICAgICB2YXIgb3V0bGV0SGVscGVy
ID0gX19kZXBlbmRlbmN5Nl9fLm91dGxldEhlbHBlcjsKLSAgICAgICAgdmFyIE91dGxldFZpZXcg
PSBfX2RlcGVuZGVuY3k2X18uT3V0bGV0VmlldzsKLQotICAgICAgICB2YXIgcmVuZGVySGVscGVy
ID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIEFjdGlvbkhlbHBl
ciA9IF9fZGVwZW5kZW5jeThfXy5BY3Rpb25IZWxwZXI7Ci0gICAgICAgIHZhciBhY3Rpb25IZWxw
ZXIgPSBfX2RlcGVuZGVuY3k4X18uYWN0aW9uSGVscGVyOwotCi0gICAgICAgIFJvdXRlci5yZXNv
bHZlUGFyYW1zID0gcmVzb2x2ZVBhcmFtczsKLSAgICAgICAgUm91dGVyLnJlc29sdmVQYXRocyA9
IHJlc29sdmVQYXRoczsKLQotICAgICAgICBFbWJlci5MaW5rVmlldyA9IExpbmtWaWV3OwotICAg
ICAgICBFbWJlckhhbmRsZWJhcnMuQWN0aW9uSGVscGVyID0gQWN0aW9uSGVscGVyOwotICAgICAg
ICBFbWJlckhhbmRsZWJhcnMuT3V0bGV0VmlldyA9IE91dGxldFZpZXc7Ci0KLSAgICAgICAgRW1i
ZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdyZW5kZXInLCByZW5kZXJIZWxwZXIpOwotICAg
ICAgICBFbWJlckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2FjdGlvbicsIGFjdGlvbkhlbHBl
cik7Ci0gICAgICAgIEVtYmVySGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignb3V0bGV0Jywgb3V0
bGV0SGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKCdsaW5r
LXRvJywgbGlua1RvSGVscGVyKTsKLSAgICAgICAgRW1iZXJIYW5kbGViYXJzLnJlZ2lzdGVySGVs
cGVyKCdsaW5rVG8nLCBkZXByZWNhdGVkTGlua1RvSGVscGVyKTsKLQotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gRW1iZXI7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0
aW5nLWhhbmRsZWJhcnMvaGVscGVycy9hY3Rpb24iLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAiZW1iZXIt
bWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItdmlld3Mvc3lzdGVt
L3V0aWxzIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsICJlbWJlci1oYW5kbGViYXJz
IiwgImVtYmVyLWhhbmRsZWJhcnMvZXh0IiwgImVtYmVyLWhhbmRsZWJhcnMvaGVscGVycy92aWV3
IiwgImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL3NoYXJlZCIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZf
XywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19k
ZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1
bHQiXTsKLSAgICAgICAgLy8gSGFuZGxlYmFycywgdXVpZCwgRkVBVFVSRVMsIGFzc2VydCwgZGVw
cmVjYXRlCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2
YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTNfXy5mb3JFYWNoOwotICAgICAgICB2YXIgdXVpZCA9
IF9fZGVwZW5kZW5jeTRfXy51dWlkOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5NV9f
WyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIGlzU2ltcGxlQ2xpY2sgPSBfX2RlcGVuZGVuY3k2
X18uaXNTaW1wbGVDbGljazsKLSAgICAgICAgdmFyIEVtYmVyUm91dGVyID0gX19kZXBlbmRlbmN5
N19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIEVtYmVySGFuZGxlYmFycyA9IF9fZGVwZW5k
ZW5jeThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGFuZGxlYmFyc0dldCA9IF9fZGVwZW5k
ZW5jeTlfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIgdmlld0hlbHBlciA9IF9fZGVwZW5k
ZW5jeTEwX18udmlld0hlbHBlcjsKLSAgICAgICAgdmFyIHJlc29sdmVQYXJhbXMgPSBfX2RlcGVu
ZGVuY3kxMV9fLnJlc29sdmVQYXJhbXM7Ci0gICAgICAgIHZhciByZXNvbHZlUGF0aCA9IF9fZGVw
ZW5kZW5jeTExX18ucmVzb2x2ZVBhdGg7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9k
dWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgdmFyIFNhZmVTdHJpbmcgPSBFbWJlckhhbmRsZWJhcnMuU2FmZVN0
cmluZzsKLSAgICAgICAgdmFyIGFfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gYXJncyhvcHRpb25zLCBhY3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICB2
YXIgcmV0ID0gW107Ci0gICAgICAgICAgICBpZiAoYWN0aW9uTmFtZSkgewotICAgICAgICAgICAg
ICAgIHJldC5wdXNoKGFjdGlvbk5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgdHlwZXMgPSBvcHRpb25zLm9wdGlvbnMudHlwZXMuc2xpY2UoMSksCi0gICAgICAgICAgICBk
YXRhID0gb3B0aW9ucy5vcHRpb25zLmRhdGE7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXQuY29u
Y2F0KHJlc29sdmVQYXJhbXMob3B0aW9ucy5jb250ZXh0LCBvcHRpb25zLnBhcmFtcywgewotICAg
ICAgICAgICAgICAgIHR5cGVzOiB0eXBlcywKLSAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIAot
ICAgICAgICAgICAgfSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIEFjdGlvbkhlbHBlciA9
IHsKLSAgICAgICAgICAgIHJlZ2lzdGVyZWRBY3Rpb25zOiB7fQotICAgICAgICB9OwotCi0gICAg
ICAgIF9fZXhwb3J0c19fLkFjdGlvbkhlbHBlciA9IEFjdGlvbkhlbHBlcjsKLQotICAgICAgICB2
YXIga2V5cyA9IFsiYWx0IiwgInNoaWZ0IiwgIm1ldGEiLCAiY3RybCJdOwotCi0gICAgICAgIHZh
ciBQT0lOVEVSX0VWRU5UX1RZUEVfUkVHRVggPSAvXmNsaWNrfG1vdXNlfHRvdWNoLzsKLQotICAg
ICAgICB2YXIgaXNBbGxvd2VkRXZlbnQgPSBmdW5jdGlvbihldmVudCwgYWxsb3dlZEtleXMpIHsK
LSAgICAgICAgICAgIGlmICh0eXBlb2YgYWxsb3dlZEtleXMgPT09ICJ1bmRlZmluZWQiKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKFBPSU5URVJfRVZFTlRfVFlQRV9SRUdFWC50ZXN0KGV2ZW50LnR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1NpbXBsZUNsaWNrKGV2ZW50KTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbGxvd2VkS2V5
cyA9ICcnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGFsbG93ZWRLZXlzLmluZGV4T2YoImFueSIpID49IDApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFsbG93ZWQgPSB0
cnVlOwotCi0gICAgICAgICAgICBmb3JFYWNoLmNhbGwoa2V5cywgZnVuY3Rpb24oa2V5KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV2ZW50W2tleSArICJLZXkiXSAmJiBhbGxvd2VkS2V5cy5pbmRl
eE9mKGtleSkgPT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmV0dXJu
IGFsbG93ZWQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQWN0aW9uSGVscGVyLnJlZ2lzdGVyQWN0
aW9uID0gZnVuY3Rpb24oYWN0aW9uTmFtZU9yUGF0aCwgb3B0aW9ucywgYWxsb3dlZEtleXMpIHsK
LSAgICAgICAgICAgIHZhciBhY3Rpb25JZCA9IHV1aWQoKTsKLQotICAgICAgICAgICAgQWN0aW9u
SGVscGVyLnJlZ2lzdGVyZWRBY3Rpb25zW2FjdGlvbklkXSA9IHsKLSAgICAgICAgICAgICAgICBl
dmVudE5hbWU6IG9wdGlvbnMuZXZlbnROYW1lLAotICAgICAgICAgICAgICAgIGhhbmRsZXI6IGZ1
bmN0aW9uIGhhbmRsZVJlZ2lzdGVyZWRBY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0FsbG93ZWRFdmVudChldmVudCwgYWxsb3dlZEtleXMpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnByZXZlbnREZWZhdWx0ICE9PSBmYWxzZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJ1YmJsZXMg
PT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRp
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhciB0
YXJnZXQgPSBvcHRpb25zLnRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9
IG9wdGlvbnMucGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uTmFtZTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gaGFuZGxlYmFyc0dldCh0YXJnZXQucm9vdCwgdGFyZ2V0LnRhcmdl
dCwgdGFyZ2V0Lm9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnJvb3Q7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ib3VuZFByb3BlcnR5KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25OYW1lID0gcmVzb2x2ZVBhcmFtcyhwYXJh
bWV0ZXJzLmNvbnRleHQsIFthY3Rpb25OYW1lT3JQYXRoXSwgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVzOiBbJ0lEJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YTogcGFyYW1ldGVycy5vcHRpb25zLmRhdGEgCi0gICAgICAgICAgICAgICAgICAgICAgICB9KVsw
XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25OYW1lID09PSAn
dW5kZWZpbmVkJyB8fCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IHNwZWNpZmllZCBhIHF1b3Rl
bGVzcyBwYXRoIHRvIHRoZSB7e2FjdGlvbn19IGhlbHBlciAnIiArIGFjdGlvbk5hbWVPclBhdGgg
KyAiJyB3aGljaCBkaWQgbm90IHJlc29sdmUgdG8gYW4gYWN0aW9uTmFtZS4gUGVyaGFwcyB5b3Ug
bWVhbnQgdG8gdXNlIGEgcXVvdGVkIGFjdGlvbk5hbWU/IChlLmcuIHt7YWN0aW9uICciICsgYWN0
aW9uTmFtZU9yUGF0aCArICInfX0pLiIsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjdGlvbk5hbWUgPSBhY3Rpb25OYW1lT3JQYXRoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFh
Y3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25OYW1lID0gYWN0aW9u
TmFtZU9yUGF0aDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHJ1bihmdW5jdGlvbiBydW5SZWdpc3RlcmVkQWN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldC5zZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0LnNlbmQuYXBwbHkodGFyZ2V0LCBhcmdzKHBhcmFtZXRlcnMsIGFjdGlvbk5hbWUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJUaGUgYWN0aW9uICciICsgYWN0aW9uTmFtZSArICInIGRpZCBub3Qg
ZXhpc3Qgb24gIiArIHRhcmdldCwgdHlwZW9mIHRhcmdldFthY3Rpb25OYW1lXSA9PT0gJ2Z1bmN0
aW9uJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2FjdGlvbk5hbWVdLmFw
cGx5KHRhcmdldCwgYXJncyhwYXJhbWV0ZXJzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgIG9wdGlvbnMudmlldy5vbignd2lsbENsZWFyUmVuZGVyJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIEFjdGlvbkhlbHBlci5yZWdpc3RlcmVk
QWN0aW9uc1thY3Rpb25JZF07Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmV0dXJu
IGFjdGlvbklkOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGUg
YHt7YWN0aW9ufX1gIGhlbHBlciByZWdpc3RlcnMgYW4gSFRNTCBlbGVtZW50IHdpdGhpbiBhIHRl
bXBsYXRlIGZvciBET00KLSAgICAgICAgICAgICAgZXZlbnQgaGFuZGxpbmcgYW5kIGZvcndhcmRz
IHRoYXQgaW50ZXJhY3Rpb24gdG8gdGhlIHRlbXBsYXRlcydzIGNvbnRyb2xsZXIKLSAgICAgICAg
ICAgICAgb3Igc3VwcGxpZWQgYHRhcmdldGAgb3B0aW9uIChzZWUgJ1NwZWNpZnlpbmcgYSBUYXJn
ZXQnKS4KLQotICAgICAgICAgICAgICBJZiB0aGUgY29udHJvbGxlciBkb2VzIG5vdCBpbXBsZW1l
bnQgdGhlIGV2ZW50LCB0aGUgZXZlbnQgaXMgc2VudAotICAgICAgICAgICAgICB0byB0aGUgY3Vy
cmVudCByb3V0ZSwgYW5kIGl0IGJ1YmJsZXMgdXAgdGhlIHJvdXRlIGhpZXJhcmNoeSBmcm9tIHRo
ZXJlLgotCi0gICAgICAgICAgICAgIFVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGF0IGVsZW1lbnQg
d2lsbCBpbnZva2UgdGhlIHN1cHBsaWVkIGFjdGlvbiBuYW1lIG9uCi0gICAgICAgICAgICAgIHRo
ZSBhcHByb3ByaWF0ZSB0YXJnZXQuIFNwZWNpZnlpbmcgYSBub24tcXVvdGVkIGFjdGlvbiBuYW1l
IHdpbGwgcmVzdWx0IGluCi0gICAgICAgICAgICAgIGEgYm91bmQgcHJvcGVydHkgbG9va3VwIGF0
IHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGJlIHRyaWdnZXJlZC4KLQotICAgICAgICAgICAgICBH
aXZlbiB0aGUgZm9sbG93aW5nIGFwcGxpY2F0aW9uIEhhbmRsZWJhcnMgdGVtcGxhdGUgb24gdGhl
IHBhZ2UKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDxkaXYg
e3thY3Rpb24gJ2FuQWN0aW9uTmFtZSd9fT4KLSAgICAgICAgICAgICAgICBjbGljayBtZQotICAg
ICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW5k
IGFwcGxpY2F0aW9uIGNvZGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgYW5BY3Rp
b25OYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHJlbmRlcmVkIEhUTUwKLQotICAgICAgICAg
ICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAg
ICAgICAgICAgICAgIDxkaXYgZGF0YS1lbWJlci1hY3Rpb249IjEiPgotICAgICAgICAgICAgICAg
ICAgY2xpY2sgbWUKLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIENsaWNraW5nICJjbGljayBtZSIg
d2lsbCB0cmlnZ2VyIHRoZSBgYW5BY3Rpb25OYW1lYCBhY3Rpb24gb2YgdGhlCi0gICAgICAgICAg
ICAgIGBBcHAuQXBwbGljYXRpb25Db250cm9sbGVyYC4gSW4gdGhpcyBjYXNlLCBubyBhZGRpdGlv
bmFsIHBhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQuCi0KLSAgICAgICAgICAgICAgSWYgeW91IHBy
b3ZpZGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBoZWxwZXI6Ci0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8YnV0dG9uIHt7YWN0aW9uICdlZGl0JyBw
b3N0fX0+RWRpdDwvYnV0dG9uPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBU
aG9zZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcGFzc2VkIGFsb25nIGFzIGFyZ3VtZW50cyB0byB0aGUg
SmF2YVNjcmlwdAotICAgICAgICAgICAgICBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIGFjdGlv
bi4KLQotICAgICAgICAgICAgICAjIyMgRXZlbnQgUHJvcGFnYXRpb24KLQotICAgICAgICAgICAg
ICBFdmVudHMgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGFjdGlvbiBoZWxwZXIgd2lsbCBhdXRvbWF0
aWNhbGx5IGhhdmUKLSAgICAgICAgICAgICAgYC5wcmV2ZW50RGVmYXVsdCgpYCBjYWxsZWQgb24g
dGhlbS4gWW91IGRvIG5vdCBuZWVkIHRvIGRvIHNvIGluIHlvdXIgZXZlbnQKLSAgICAgICAgICAg
ICAgaGFuZGxlcnMuIElmIHlvdSBuZWVkIHRvIGFsbG93IGV2ZW50IHByb3BhZ2F0aW9uICh0byBo
YW5kbGUgZmlsZSBpbnB1dHMgZm9yCi0gICAgICAgICAgICAgIGV4YW1wbGUpIHlvdSBjYW4gc3Vw
cGx5IHRoZSBgcHJldmVudERlZmF1bHQ9ZmFsc2VgIG9wdGlvbiB0byB0aGUgYHt7YWN0aW9ufX1g
IGhlbHBlcjoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIDxk
aXYge3thY3Rpb24gInNheUhlbGxvIiBwcmV2ZW50RGVmYXVsdD1mYWxzZX19PgotICAgICAgICAg
ICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAvPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBl
PSJjaGVja2JveCIgLz4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIFRvIGRpc2FibGUgYnViYmxpbmcsIHBhc3MgYGJ1YmJsZXM9ZmFsc2Vg
IHRvIHRoZSBoZWxwZXI6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAg
ICAgICA8YnV0dG9uIHt7YWN0aW9uICdlZGl0JyBwb3N0IGJ1YmJsZXM9ZmFsc2V9fT5FZGl0PC9i
dXR0b24+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRo
ZSBkZWZhdWx0IGhhbmRsZXIgdG8gdHJpZ2dlciB5b3Ugc2hvdWxkIGVpdGhlciByZWdpc3RlciB5
b3VyCi0gICAgICAgICAgICAgIG93biBldmVudCBoYW5kbGVyLCBvciB1c2UgZXZlbnQgbWV0aG9k
cyBvbiB5b3VyIHZpZXcgY2xhc3MuIFNlZSBbRW1iZXIuVmlld10oL2FwaS9jbGFzc2VzL0VtYmVy
LlZpZXcuaHRtbCkKLSAgICAgICAgICAgICAgJ1Jlc3BvbmRpbmcgdG8gQnJvd3NlciBFdmVudHMn
IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgICMjIyBTcGVjaWZ5aW5nIERP
TSBldmVudCB0eXBlCi0KLSAgICAgICAgICAgICAgQnkgZGVmYXVsdCB0aGUgYHt7YWN0aW9ufX1g
IGhlbHBlciByZWdpc3RlcnMgZm9yIERPTSBgY2xpY2tgIGV2ZW50cy4gWW91IGNhbgotICAgICAg
ICAgICAgICBzdXBwbHkgYW4gYG9uYCBvcHRpb24gdG8gdGhlIGhlbHBlciB0byBzcGVjaWZ5IGEg
ZGlmZmVyZW50IERPTSBldmVudCBuYW1lOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgICAgICAgICAgPGRpdiB7e2FjdGlvbiAiYW5BY3Rpb25OYW1lIiBvbj0iZG91YmxlQ2xp
Y2sifX0+Ci0gICAgICAgICAgICAgICAgY2xpY2sgbWUKLSAgICAgICAgICAgICAgPC9kaXY+Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFNlZSBgRW1iZXIuVmlld2AgJ1Jlc3Bv
bmRpbmcgdG8gQnJvd3NlciBFdmVudHMnIGZvciBhIGxpc3Qgb2YKLSAgICAgICAgICAgICAgYWNj
ZXB0YWJsZSBET00gZXZlbnQgbmFtZXMuCi0KLSAgICAgICAgICAgICAgTk9URTogQmVjYXVzZSBg
e3thY3Rpb259fWAgZGVwZW5kcyBvbiBFbWJlcidzIGV2ZW50IGRpc3BhdGNoIHN5c3RlbSBpdCB3
aWxsCi0gICAgICAgICAgICAgIG9ubHkgZnVuY3Rpb24gaWYgYW4gYEVtYmVyLkV2ZW50RGlzcGF0
Y2hlcmAgaW5zdGFuY2UgaXMgYXZhaWxhYmxlLiBBbgotICAgICAgICAgICAgICBgRW1iZXIuRXZl
bnREaXNwYXRjaGVyYCBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBhIG5ldyBgRW1iZXIu
QXBwbGljYXRpb25gCi0gICAgICAgICAgICAgIGlzIGNyZWF0ZWQuIEhhdmluZyBhbiBpbnN0YW5j
ZSBvZiBgRW1iZXIuQXBwbGljYXRpb25gIHdpbGwgc2F0aXNmeSB0aGlzCi0gICAgICAgICAgICAg
IHJlcXVpcmVtZW50LgotCi0gICAgICAgICAgICAgICMjIyBTcGVjaWZ5aW5nIGFsbG93ZWQgbW9k
aWZpZXIga2V5cwotCi0gICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGB7e2FjdGlvbn19YCBo
ZWxwZXIgd2lsbCBpZ25vcmUgY2xpY2sgZXZlbnQgd2l0aCBwcmVzc2VkIG1vZGlmaWVyCi0gICAg
ICAgICAgICAgIGtleXMuIFlvdSBjYW4gc3VwcGx5IGFuIGBhbGxvd2VkS2V5c2Agb3B0aW9uIHRv
IHNwZWNpZnkgd2hpY2gga2V5cyBzaG91bGQgbm90IGJlIGlnbm9yZWQuCi0KLSAgICAgICAgICAg
ICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICA8ZGl2IHt7YWN0aW9uICJhbkFjdGlvbk5h
bWUiIGFsbG93ZWRLZXlzPSJhbHQifX0+Ci0gICAgICAgICAgICAgICAgY2xpY2sgbWUKLSAgICAg
ICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMg
d2F5IHRoZSBge3thY3Rpb259fWAgd2lsbCBmaXJlIHdoZW4gY2xpY2tpbmcgd2l0aCB0aGUgYWx0
IGtleSBwcmVzc2VkIGRvd24uCi0KLSAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgc3VwcGx5
ICJhbnkiIHRvIHRoZSBgYWxsb3dlZEtleXNgIG9wdGlvbiB0byBhY2NlcHQgYW55IGNvbWJpbmF0
aW9uIG9mIG1vZGlmaWVyIGtleXMuCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAg
ICAgICAgICAgICA8ZGl2IHt7YWN0aW9uICJhbkFjdGlvbk5hbWUiIGFsbG93ZWRLZXlzPSJhbnki
fX0+Ci0gICAgICAgICAgICAgICAgY2xpY2sgbWUgd2l0aCBhbnkga2V5IHByZXNzZWQKLSAgICAg
ICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBT
cGVjaWZ5aW5nIGEgVGFyZ2V0Ci0KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgcG9z
c2libGUgdGFyZ2V0IG9iamVjdHMgZm9yIGB7e2FjdGlvbn19YCBoZWxwZXJzOgotCi0gICAgICAg
ICAgICAgIEluIGEgdHlwaWNhbCBFbWJlciBhcHBsaWNhdGlvbiwgd2hlcmUgdmlld3MgYXJlIG1h
bmFnZWQgdGhyb3VnaCB1c2Ugb2YgdGhlCi0gICAgICAgICAgICAgIGB7e291dGxldH19YCBoZWxw
ZXIsIGFjdGlvbnMgd2lsbCBidWJibGUgdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlciwgdGhlbgot
ICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCByb3V0ZSwgYW5kIHRoZW4gdXAgdGhlIHJvdXRl
IGhpZXJhcmNoeS4KLQotICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCBhIGB0YXJnZXRgIG9w
dGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIGhlbHBlciB0byBjaGFuZ2UKLSAgICAgICAgICAg
ICAgd2hpY2ggb2JqZWN0IHdpbGwgcmVjZWl2ZSB0aGUgbWV0aG9kIGNhbGwuIFRoaXMgb3B0aW9u
IG11c3QgYmUgYSBwYXRoCi0gICAgICAgICAgICAgIHRvIGFuIG9iamVjdCwgYWNjZXNzaWJsZSBp
biB0aGUgY3VycmVudCBjb250ZXh0OgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3shIHRoZSBhcHBsaWNhdGlvbiB0ZW1wbGF0ZSB9fQotICAgICAgICAgICAg
ICA8ZGl2IHt7YWN0aW9uICJhbkFjdGlvbk5hbWUiIHRhcmdldD12aWV3fX0+Ci0gICAgICAgICAg
ICAgICAgY2xpY2sgbWUKLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0
aW9uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBhY3Rpb25zOiB7
Ci0gICAgICAgICAgICAgICAgICBhbkFjdGlvbk5hbWU6IGZ1bmN0aW9uKCl7fQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgIyMjIEFkZGl0aW9uYWwgUGFyYW1ldGVycwotCi0gICAgICAgICAgICAgIFlvdSBt
YXkgc3BlY2lmeSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhlIGB7e2FjdGlvbn19YCBoZWxw
ZXIuIFRoZXNlCi0gICAgICAgICAgICAgIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBhbG9uZyBhcyB0
aGUgYXJndW1lbnRzIHRvIHRoZSBKYXZhU2NyaXB0IGZ1bmN0aW9uCi0gICAgICAgICAgICAgIGlt
cGxlbWVudGluZyB0aGUgYWN0aW9uLgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICAgICAgICAgICAge3sjZWFjaCBwZXJzb24gaW4gcGVvcGxlfX0KLSAgICAgICAgICAgICAgICA8
ZGl2IHt7YWN0aW9uICJlZGl0IiBwZXJzb259fT4KLSAgICAgICAgICAgICAgICAgIGNsaWNrIG1l
Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIHt7L2VhY2h9fQotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBDbGlja2luZyAiY2xpY2sgbWUiIHdpbGwgdHJp
Z2dlciB0aGUgYGVkaXRgIG1ldGhvZCBvbiB0aGUgY3VycmVudCBjb250cm9sbGVyCi0gICAgICAg
ICAgICAgIHdpdGggdGhlIHZhbHVlIG9mIGBwZXJzb25gIGFzIGEgcGFyYW1ldGVyLgotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgYWN0aW9uCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxl
YmFycy5oZWxwZXJzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25OYW1lCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF0qCi0gICAgICAgICAgICAgIEBw
YXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gYWN0
aW9uSGVscGVyKGFjdGlvbk5hbWUpIHsKLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXJndW1l
bnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGNvbnRleHRzID0gYV9zbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMSwgLTEpOwotCi0gICAgICAgICAgICB2YXIgaGFzaCA9IG9wdGlv
bnMuaGFzaCwKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBvcHRpb25zLmRhdGEua2V5d29yZHMu
Y29udHJvbGxlcjsKLQotICAgICAgICAgICAgLy8gY3JlYXRlIGEgaGFzaCB0byBwYXNzIGFsb25n
IHRvIHJlZ2lzdGVyQWN0aW9uCi0gICAgICAgICAgICB2YXIgYWN0aW9uID0gewotICAgICAgICAg
ICAgICAgIGV2ZW50TmFtZTogaGFzaC5vbiB8fCAiY2xpY2siLAotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnM6IHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dDogdGhpcywKLSAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1z
OiBjb250ZXh0cwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgdmlldzogb3B0
aW9ucy5kYXRhLnZpZXcsCi0gICAgICAgICAgICAgICAgYnViYmxlczogaGFzaC5idWJibGVzLAot
ICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBoYXNoLnByZXZlbnREZWZhdWx0LAotICAg
ICAgICAgICAgICAgIHRhcmdldDogewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRp
b25zIAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgYm91bmRQcm9wZXJ0eTog
b3B0aW9ucy50eXBlc1swXSA9PT0gIklEIgotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
aWYgKGhhc2gudGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uLnRhcmdldC5yb290ID0g
dGhpczsKLSAgICAgICAgICAgICAgICBhY3Rpb24udGFyZ2V0LnRhcmdldCA9IGhhc2gudGFyZ2V0
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgICAg
YWN0aW9uLnRhcmdldC5yb290ID0gY29udHJvbGxlcjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIGFjdGlvbklkID0gQWN0aW9uSGVscGVyLnJlZ2lzdGVyQWN0aW9uKGFjdGlvbk5h
bWUsIGFjdGlvbiwgaGFzaC5hbGxvd2VkS2V5cyk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNh
ZmVTdHJpbmcoJ2RhdGEtZW1iZXItYWN0aW9uPSInICsgYWN0aW9uSWQgKyAnIicpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uYWN0aW9uSGVscGVyID0gYWN0aW9uSGVscGVyOwot
ICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvbGlu
a190byIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dl
dCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1i
ZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbGF6eV9sb2FkIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJl
ci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItcnVudGltZS9rZXlzIiwgImVtYmVyLXZp
ZXdzL3N5c3RlbS91dGlscyIsICJlbWJlci12aWV3cy92aWV3cy9jb21wb25lbnQiLCAiZW1iZXIt
aGFuZGxlYmFycyIsICJlbWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdmlldyIsICJlbWJlci1yb3V0
aW5nL3N5c3RlbS9yb3V0ZXIiLCAiZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvc2hh
cmVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19k
ZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVu
ZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVu
Y3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICAvLyBGRUFUVVJFUywgTG9nZ2VyLCBIYW5kbGViYXJzLCB3YXJuLCBhc3NlcnQKLSAg
ICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBf
X2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k0X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k2X18uY29tcHV0ZWQ7Ci0KLSAg
ICAgICAgdmFyIG9uTG9hZCA9IF9fZGVwZW5kZW5jeTdfXy5vbkxvYWQ7Ci0gICAgICAgIHZhciBm
bXQgPSBfX2RlcGVuZGVuY3k4X18uZm10OwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2Rl
cGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGtleXMgPSBfX2RlcGVuZGVuY3kx
MF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpc1NpbXBsZUNsaWNrID0gX19kZXBlbmRlbmN5
MTFfXy5pc1NpbXBsZUNsaWNrOwotICAgICAgICB2YXIgRW1iZXJDb21wb25lbnQgPSBfX2RlcGVu
ZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfX2Rl
cGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciB2aWV3SGVscGVyID0gX19kZXBl
bmRlbmN5MTRfXy52aWV3SGVscGVyOwotICAgICAgICB2YXIgRW1iZXJSb3V0ZXIgPSBfX2RlcGVu
ZGVuY3kxNV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciByZXNvbHZlUGFyYW1zID0gX19kZXBl
bmRlbmN5MTZfXy5yZXNvbHZlUGFyYW1zOwotICAgICAgICB2YXIgcmVzb2x2ZVBhdGhzID0gX19k
ZXBlbmRlbmN5MTZfXy5yZXNvbHZlUGF0aHM7Ci0gICAgICAgIHZhciByb3V0ZUFyZ3MgPSBfX2Rl
cGVuZGVuY3kxNl9fLnJvdXRlQXJnczsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1
bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAg
ICAgKi8KLQotICAgICAgICB2YXIgc2xpY2UgPSBbXS5zbGljZTsKLQotICAgICAgICByZXF1aXJl
TW9kdWxlKCdlbWJlci1oYW5kbGViYXJzJyk7Ci0KLSAgICAgICAgdmFyIG51bWJlck9mQ29udGV4
dHNBY2NlcHRlZEJ5SGFuZGxlciA9IGZ1bmN0aW9uKGhhbmRsZXIsIGhhbmRsZXJJbmZvcykgewot
ICAgICAgICAgICAgdmFyIHJlcSA9IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9
IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICByZXEg
PSByZXEgKyBoYW5kbGVySW5mb3NbaV0ubmFtZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgIGlm
IChoYW5kbGVySW5mb3NbaV0uaGFuZGxlciA9PT0gaGFuZGxlcikKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXE7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgdmFyIFF1ZXJ5UGFyYW1zID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgIHZhbHVlczogbnVsbAotICAgICAgICB9KTsKLQotICAgICAgICBmdW5jdGlv
biBnZXRSZXNvbHZlZFBhdGhzKG9wdGlvbnMpIHsKLQotICAgICAgICAgICAgdmFyIHR5cGVzID0g
b3B0aW9ucy5vcHRpb25zLnR5cGVzLAotICAgICAgICAgICAgZGF0YSA9IG9wdGlvbnMub3B0aW9u
cy5kYXRhOwotCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhdGhzKG9wdGlvbnMuY29udGV4
dCwgb3B0aW9ucy5wYXJhbXMsIHsKLSAgICAgICAgICAgICAgICB0eXBlczogdHlwZXMsCi0gICAg
ICAgICAgICAgICAgZGF0YTogZGF0YSAKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5MaW5rVmlld2AgcmVuZGVycyBhbiBlbGVt
ZW50IHdob3NlIGBjbGlja2AgZXZlbnQgdHJpZ2dlcnMgYQotICAgICAgICAgICAgICB0cmFuc2l0
aW9uIG9mIHRoZSBhcHBsaWNhdGlvbidzIGluc3RhbmNlIG9mIGBFbWJlci5Sb3V0ZXJgIHRvCi0g
ICAgICAgICAgICAgIGEgc3VwcGxpZWQgcm91dGUgYnkgbmFtZS4KLQotICAgICAgICAgICAgICBJ
bnN0YW5jZXMgb2YgYExpbmtWaWV3YCB3aWxsIG1vc3QgbGlrZWx5IGJlIGNyZWF0ZWQgdGhyb3Vn
aAotICAgICAgICAgICAgICB0aGUgYGxpbmstdG9gIEhhbmRsZWJhcnMgaGVscGVyLCBidXQgcHJv
cGVydGllcyBvZiB0aGlzIGNsYXNzCi0gICAgICAgICAgICAgIGNhbiBiZSBvdmVycmlkZGVuIHRv
IGN1c3RvbWl6ZSBhcHBsaWNhdGlvbi13aWRlIGJlaGF2aW9yLgotCi0gICAgICAgICAgICAgIEBj
bGFzcyBMaW5rVmlldwotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAg
ICAgIEBleHRlbmRzIEVtYmVyLlZpZXcKLSAgICAgICAgICAgICAgQHNlZSB7SGFuZGxlYmFycy5o
ZWxwZXJzLmxpbmstdG99Ci0gICAgICAgICAgICAqKi8KLSAgICAgICAgdmFyIExpbmtWaWV3ID0g
RW1iZXIuTGlua1ZpZXcgPSBFbWJlckNvbXBvbmVudC5leHRlbmQoewotICAgICAgICAgICAgdGFn
TmFtZTogJ2EnLAotICAgICAgICAgICAgY3VycmVudFdoZW46IG51bGwsCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBgdGl0bGVgIGF0dHJpYnV0ZSBvZiB0
aGUgYExpbmtWaWV3YCdzIEhUTUwgZWxlbWVudC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgdGl0bGUKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAg
ICAgICAgICAgKiovCi0gICAgICAgICAgICB0aXRsZTogbnVsbCwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGByZWxgIGF0dHJpYnV0ZSBvZiB0aGUgYExp
bmtWaWV3YCdzIEhUTUwgZWxlbWVudC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkg
cmVsCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAg
ICoqLwotICAgICAgICAgICAgcmVsOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVGhlIENTUyBjbGFzcyB0byBhcHBseSB0byBgTGlua1ZpZXdgJ3MgZWxlbWVu
dCB3aGVuIGl0cyBgYWN0aXZlYAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBpcyBgdHJ1
ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGFjdGl2ZUNsYXNzCi0gICAgICAg
ICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBh
Y3RpdmUKLSAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgYWN0aXZlQ2xhc3M6ICdh
Y3RpdmUnLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIENTUyBj
bGFzcyB0byBhcHBseSB0byBgTGlua1ZpZXdgJ3MgZWxlbWVudCB3aGVuIGl0cyBgbG9hZGluZ2AK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgaXMgYHRydWVgLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSBsb2FkaW5nQ2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUg
U3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGxvYWRpbmcKLSAgICAgICAgICAg
ICAgICAgICoqLwotICAgICAgICAgICAgbG9hZGluZ0NsYXNzOiAnbG9hZGluZycsCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRv
IGEgYExpbmtWaWV3YCdzIGVsZW1lbnQgd2hlbiBpdHMgYGRpc2FibGVkYAotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eSBpcyBgdHJ1ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IGRpc2FibGVkQ2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAgIEBkZWZhdWx0IGRpc2FibGVkCi0gICAgICAgICAgICAgICAgICAqKi8K
LSAgICAgICAgICAgIGRpc2FibGVkQ2xhc3M6ICdkaXNhYmxlZCcsCi0gICAgICAgICAgICBfaXNE
aXNhYmxlZDogZmFsc2UsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBE
ZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGBMaW5rVmlld2Agd2lsbCB0cmlnZ2VyIHJvdXRpbmcgdmlh
Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBgcmVwbGFjZVdpdGhgIHJvdXRpbmcgc3RyYXRlZ3ku
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJlcGxhY2UKLSAgICAgICAgICAgICAg
ICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBmYWxzZQot
ICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICByZXBsYWNlOiBmYWxzZSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGB7e2xpbmst
dG99fWAgaGVscGVyIHdpbGwgYmluZCB0byB0aGUgYGhyZWZgIGFuZAotICAgICAgICAgICAgICAg
ICAgICBgdGl0bGVgIGF0dHJpYnV0ZXMuIEl0J3MgZGlzY291cmFnZSB0aGF0IHlvdSBvdmVycmlk
ZSB0aGVzZSBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICAgICAgaG93ZXZlciB5b3UgY2FuIHB1
c2ggb250byB0aGUgYXJyYXkgaWYgbmVlZGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9w
ZXJ0eSBhdHRyaWJ1dGVCaW5kaW5ncwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheSB8
IFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBbJ2hyZWYnLCAndGl0bGUnLCAn
cmVsJ10KLSAgICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIGF0dHJpYnV0ZUJpbmRp
bmdzOiBbJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBCeSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1gIGhlbHBlciB3aWxsIGJp
bmQgdG8gdGhlIGBhY3RpdmVgLCBgbG9hZGluZ2AsIGFuZAotICAgICAgICAgICAgICAgICAgICBg
ZGlzYWJsZWRgIGNsYXNzZXMuIEl0IGlzIGRpc2NvdXJhZ2VkIHRvIG92ZXJyaWRlIHRoZXNlIGRp
cmVjdGx5LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjbGFzc05hbWVCaW5kaW5n
cwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAgICAgICAgICAgICAgICBA
ZGVmYXVsdCBbJ2FjdGl2ZScsICdsb2FkaW5nJywgJ2Rpc2FibGVkJ10KLSAgICAgICAgICAgICAg
ICAgICAqKi8KLSAgICAgICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2FjdGl2ZScsICdsb2Fk
aW5nJywgJ2Rpc2FibGVkJ10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBCeSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1gIGhlbHBlciByZXNwb25kcyB0byB0aGUgYGNs
aWNrYCBldmVudC4gWW91Ci0gICAgICAgICAgICAgICAgICAgIGNhbiBvdmVycmlkZSB0aGlzIGds
b2JhbGx5IGJ5IHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byB5b3VyIGN1c3RvbQotICAgICAgICAg
ICAgICAgICAgICBldmVudCBuYW1lLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgcGFy
dGljdWxhcmx5IHVzZWZ1bCBvbiBtb2JpbGUgd2hlbiBvbmUgd2FudHMgdG8gYXZvaWQgdGhlIDMw
MG1zCi0gICAgICAgICAgICAgICAgICAgIGNsaWNrIGRlbGF5IHVzaW5nIHNvbWUgc29ydCBvZiBj
dXN0b20gYHRhcGAgZXZlbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGV2ZW50
TmFtZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAg
ICAgQGRlZmF1bHQgY2xpY2sKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBldmVu
dE5hbWU6ICdjbGljaycsCi0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgZG9jJ2VkIGhlcmUgc28g
aXQgc2hvd3MgdXAgaW4gdGhlIGV2ZW50cwotICAgICAgICAgICAgLy8gc2VjdGlvbiBvZiB0aGUg
QVBJIGRvY3VtZW50YXRpb24sIHdoaWNoIGlzIHdoZXJlCi0gICAgICAgICAgICAvLyBwZW9wbGUg
d2lsbCBsaWtlbHkgZ28gbG9va2luZyBmb3IgaXQuCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVHJpZ2dlcnMgdGhlIGBMaW5rVmlld2AncyByb3V0aW5nIGJlaGF2aW9yLiBJ
ZgotICAgICAgICAgICAgICAgICAgICBgZXZlbnROYW1lYCBpcyBjaGFuZ2VkIHRvIGEgdmFsdWUg
b3RoZXIgdGhhbiBgY2xpY2tgCi0gICAgICAgICAgICAgICAgICAgIHRoZSByb3V0aW5nIGJlaGF2
aW9yIHdpbGwgdHJpZ2dlciBvbiB0aGF0IGN1c3RvbSBldmVudAotICAgICAgICAgICAgICAgICAg
ICBpbnN0ZWFkLgotCi0gICAgICAgICAgICAgICAgICAgIEBldmVudCBjbGljawotICAgICAgICAg
ICAgICAgICAgKiovCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBbiBv
dmVycmlkYWJsZSBtZXRob2QgY2FsbGVkIHdoZW4gTGlua1ZpZXcgb2JqZWN0cyBhcmUgaW5zdGFu
dGlhdGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuTXlMaW5rVmlldyA9
IEVtYmVyLkxpbmtWaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmxvZygnRXZlbnQgaXMgJyArIHRoaXMuZ2V0
KCdldmVudE5hbWUnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
Tk9URTogSWYgeW91IGRvIG92ZXJyaWRlIGBpbml0YCBmb3IgYSBmcmFtZXdvcmsgY2xhc3MgbGlr
ZSBgRW1iZXIuVmlld2Agb3IKLSAgICAgICAgICAgICAgICAgICAgYEVtYmVyLkFycmF5Q29udHJv
bGxlcmAsIGJlIHN1cmUgdG8gY2FsbCBgdGhpcy5fc3VwZXIoKWAgaW4geW91cgotICAgICAgICAg
ICAgICAgICAgICBgaW5pdGAgZGVjbGFyYXRpb24hIElmIHlvdSBkb24ndCwgRW1iZXIgbWF5IG5v
dCBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvCi0gICAgICAgICAgICAgICAgICAgIGRvIGltcG9ydGFu
dCBzZXR1cCB3b3JrLCBhbmQgeW91J2xsIHNlZSBzdHJhbmdlIGJlaGF2aW9yIGluIHlvdXIKLSAg
ICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBpbml0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5pdDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLQotICAgICAgICAgICAgICAgIC8vIE1hcCBkZXNpcmVkIGV2ZW50IG5hbWUgdG8gaW52b2tl
IGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGdldCh0aGlzLCAnZXZl
bnROYW1lJyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vbihldmVudE5hbWUsIHRoaXMsIHRoaXMu
X2ludm9rZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSBvYnNlcnZlcnMgaW5zdGFsbGVkIGR1
cmluZyBgaW5pdGAgdGhhdCBmaXJlCi0gICAgICAgICAgICAgICAgICAgIHdoZW5ldmVyIHRoZSBw
YXJhbXMgY2hhbmdlCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBfcGFyYW1zQ2hhbmdlZAotICAgICAgICAgICAgICAgICAgICBAc2lu
Y2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX3BhcmFtc0NoYW5n
ZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFu
Z2UoJ3Jlc29sdmVkUGFyYW1zJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB0byBzZXR1cCBvYnNlcnZlcnMgdGhh
dCB3aWxsIHRyaWdnZXIgYSByZXJlbmRlci4KLQotICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfc2V0dXBQYXRoT2JzZXJ2ZXJzCi0gICAgICAg
ICAgICAgICAgICAgQHNpbmNlIDEuMy4wCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAg
ICAgIF9zZXR1cFBhdGhPYnNlcnZlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZh
ciBoZWxwZXJQYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgIGxp
bmtUZXh0UGF0aCA9IGhlbHBlclBhcmFtZXRlcnMub3B0aW9ucy5saW5rVGV4dFBhdGgsCi0gICAg
ICAgICAgICAgICAgcGF0aHMgPSBnZXRSZXNvbHZlZFBhdGhzKGhlbHBlclBhcmFtZXRlcnMpLAot
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBw
YXRoLCBpLCBub3JtYWxpemVkUGF0aDsKLQotICAgICAgICAgICAgICAgIGlmIChsaW5rVGV4dFBh
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGggPSBnZXROb3JtYWxpemVk
UGF0aChsaW5rVGV4dFBhdGgsIGhlbHBlclBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIobm9ybWFsaXplZFBhdGgucm9vdCwgbm9ybWFsaXplZFBh
dGgucGF0aCwgdGhpcywgdGhpcy5yZXJlbmRlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhdGggPSBwYXRoc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09
IHBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbGl0ZXJhbCB2YWx1ZSB3YXMg
cHJvdmlkZWQsIG5vdCBhIHBhdGgsIHNvIG5vdGhpbmcgdG8gb2JzZXJ2ZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsaXplZFBhdGggPSBnZXROb3JtYWxpemVkUGF0aChwYXRoLCBoZWxw
ZXJQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3Rlck9ic2VydmVy
KG5vcm1hbGl6ZWRQYXRoLnJvb3QsIG5vcm1hbGl6ZWRQYXRoLnBhdGgsIHRoaXMsIHRoaXMuX3Bh
cmFtc0NoYW5nZWQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBx
dWVyeVBhcmFtc09iamVjdCA9IHRoaXMucXVlcnlQYXJhbXNPYmplY3Q7Ci0gICAgICAgICAgICAg
ICAgaWYgKHF1ZXJ5UGFyYW1zT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1
ZXMgPSBxdWVyeVBhcmFtc09iamVjdC52YWx1ZXM7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
SW5zdGFsbCBvYnNlcnZlcnMgZm9yIGFsbCBvZiB0aGUgaGFzaCBvcHRpb25zCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHByb3ZpZGVkIGluIHRoZSAocXVlcnktcGFyYW1zKSBzdWJleHByZXNzaW9u
LgotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIHZhbHVlcykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkoaykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zT2JqZWN0LnR5cGVzW2td
ID09PSAnSUQnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGgg
PSBnZXROb3JtYWxpemVkUGF0aCh2YWx1ZXNba10sIGhlbHBlclBhcmFtZXRlcnMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcihub3JtYWxpemVkUGF0
aC5yb290LCBub3JtYWxpemVkUGF0aC5wYXRoLCB0aGlzLCB0aGlzLl9wYXJhbXNDaGFuZ2VkKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFmdGVyUmVuZGVyOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwUGF0aE9ic2VydmVycygpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0KLSAgICAgICAgICAgICAgICAgICAgQWNj
ZXNzZWQgYXMgYSBjbGFzc25hbWUgYmluZGluZyB0byBhcHBseSB0aGUgYExpbmtWaWV3YCdzIGBk
aXNhYmxlZENsYXNzYAotICAgICAgICAgICAgICAgICAgICBDU1MgYGNsYXNzYCB0byB0aGUgZWxl
bWVudCB3aGVuIHRoZSBsaW5rIGlzIGRpc2FibGVkLgotCi0gICAgICAgICAgICAgICAgICAgIFdo
ZW4gYHRydWVgIGludGVyYWN0aW9ucyB3aXRoIHRoZSBlbGVtZW50IHdpbGwgbm90IHRyaWdnZXIg
cm91dGUgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGRpc2FibGVkCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGlzYWJsZWQ6IGNvbXB1dGVkKGZ1bmN0
aW9uIGNvbXB1dGVMaW5rVmlld0Rpc2FibGVkKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnNl
dCgnX2lzRGlzYWJsZWQnLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlID8gZ2V0KHRoaXMsICdkaXNhYmxlZENsYXNzJykgOiBmYWxzZTsK
LSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
QWNjZXNzZWQgYXMgYSBjbGFzc25hbWUgYmluZGluZyB0byBhcHBseSB0aGUgYExpbmtWaWV3YCdz
IGBhY3RpdmVDbGFzc2AKLSAgICAgICAgICAgICAgICAgICAgQ1NTIGBjbGFzc2AgdG8gdGhlIGVs
ZW1lbnQgd2hlbiB0aGUgbGluayBpcyBhY3RpdmUuCi0KLSAgICAgICAgICAgICAgICAgICAgQSBg
TGlua1ZpZXdgIGlzIGNvbnNpZGVyZWQgYWN0aXZlIHdoZW4gaXRzIGBjdXJyZW50V2hlbmAgcHJv
cGVydHkgaXMgYHRydWVgCi0gICAgICAgICAgICAgICAgICAgIG9yIHRoZSBhcHBsaWNhdGlvbidz
IGN1cnJlbnQgcm91dGUgaXMgdGhlIHJvdXRlIHRoZSBgTGlua1ZpZXdgIHdvdWxkIHRyaWdnZXIK
LSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMgaW50by4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgYWN0aXZlCi0gICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAg
IGFjdGl2ZTogY29tcHV0ZWQoJ2xvYWRlZFBhcmFtcycsIGZ1bmN0aW9uIGNvbXB1dGVMaW5rVmll
d0FjdGl2ZSgpIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdsb2FkaW5nJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSBnZXQodGhpcywgJ3JvdXRlcicpLAotICAgICAg
ICAgICAgICAgIGxvYWRlZFBhcmFtcyA9IGdldCh0aGlzLCAnbG9hZGVkUGFyYW1zJyksCi0gICAg
ICAgICAgICAgICAgY29udGV4dHMgPSBsb2FkZWRQYXJhbXMubW9kZWxzLAotICAgICAgICAgICAg
ICAgIGN1cnJlbnRXaGVuID0gdGhpcy5jdXJyZW50V2hlbiB8fCBsb2FkZWRQYXJhbXMudGFyZ2V0
Um91dGVOYW1lLAotICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gcm91dGVyLnJvdXRlci5yZWNv
Z25pemVyLmhhbmRsZXJzRm9yKGN1cnJlbnRXaGVuKSwKLSAgICAgICAgICAgICAgICBsZWFmTmFt
ZSA9IGhhbmRsZXJzW2hhbmRsZXJzLmxlbmd0aC0xXS5oYW5kbGVyLAotICAgICAgICAgICAgICAg
IG1heGltdW1Db250ZXh0cyA9IG51bWJlck9mQ29udGV4dHNBY2NlcHRlZEJ5SGFuZGxlcihjdXJy
ZW50V2hlbiwgaGFuZGxlcnMpOwotCi0gICAgICAgICAgICAgICAgLy8gTk9URTogYW55IHVnbGlu
ZXNzIGluIHRoZSBjYWxjdWxhdGlvbiBvZiBhY3RpdmVuZXNzIGlzIGxhcmdlbHkKLSAgICAgICAg
ICAgICAgICAvLyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBzdXBwb3J0IGF1dG9tYXRpYyBub3Jt
YWxpemluZyBvZgotICAgICAgICAgICAgICAgIC8vIGByZXNvdXJjZWAgLT4gYHJlc291cmNlLmlu
ZGV4YCwgZXZlbiB0aG91Z2ggdGhlcmUgbWlnaHQgYmUKLSAgICAgICAgICAgICAgICAvLyBkeW5h
bWljIHNlZ21lbnRzIC8gcXVlcnkgcGFyYW1zIGRlZmluZWQgb24gYHJlc291cmNlLmluZGV4YAot
ICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNvbXBsaWNhdGVzIChhbmQgbWFrZXMgc29tZXdoYXQg
YW1iaWd1b3VzKSB0aGUgY2FsY3VsYXRpb24KLSAgICAgICAgICAgICAgICAvLyBvZiBhY3RpdmVu
ZXNzIGZvciBsaW5rcyB0aGF0IGxpbmsgdG8gYHJlc291cmNlYCBpbnN0ZWFkIG9mCi0gICAgICAg
ICAgICAgICAgLy8gZGlyZWN0bHkgdG8gYHJlc291cmNlLmluZGV4YC4KLQotICAgICAgICAgICAg
ICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGNvbnRleHRzIHJldmVydCBiYWNrIHRvIGZ1
bGwgcm91dGUgbmFtZQotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYmVjYXVzZSB0aGUgbGVh
ZiByb3V0ZSB3aWxsIHVzZSBvbmUgb2YgdGhlIGNvbnRleHRzCi0gICAgICAgICAgICAgICAgaWYg
KGNvbnRleHRzLmxlbmd0aCA+IG1heGltdW1Db250ZXh0cykgewotICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50V2hlbiA9IGxlYWZOYW1lOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciBhcmdzID0gcm91dGVBcmdzKGN1cnJlbnRXaGVuLCBjb250ZXh0cywgbnVsbCk7
Ci0gICAgICAgICAgICAgICAgdmFyIGlzQWN0aXZlID0gcm91dGVyLmlzQWN0aXZlLmFwcGx5KHJv
dXRlciwgYXJncyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuY3VycmVudFdoZW4gJiYgbGVhZk5hbWUgPT09IGxvYWRlZFBhcmFt
cy50YXJnZXRSb3V0ZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZpc2libGVRdWVy
eVBhcmFtcyA9IHt9OwotICAgICAgICAgICAgICAgICAgICBtZXJnZSh2aXNpYmxlUXVlcnlQYXJh
bXMsIGxvYWRlZFBhcmFtcy5xdWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRl
ci5fcHJlcGFyZVF1ZXJ5UGFyYW1zKGxvYWRlZFBhcmFtcy50YXJnZXRSb3V0ZU5hbWUsIGxvYWRl
ZFBhcmFtcy5tb2RlbHMsIHZpc2libGVRdWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgICAg
IGlzQWN0aXZlID0gc2hhbGxvd0VxdWFsKHZpc2libGVRdWVyeVBhcmFtcywgcm91dGVyLnJvdXRl
ci5zdGF0ZS5xdWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAg
ICAgICBpZiAoaXNBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlz
LCAnYWN0aXZlQ2xhc3MnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFjY2Vzc2VkIGFzIGEgY2xhc3Nu
YW1lIGJpbmRpbmcgdG8gYXBwbHkgdGhlIGBMaW5rVmlld2AncyBgbG9hZGluZ0NsYXNzYAotICAg
ICAgICAgICAgICAgICAgICBDU1MgYGNsYXNzYCB0byB0aGUgZWxlbWVudCB3aGVuIHRoZSBsaW5r
IGlzIGxvYWRpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgQSBgTGlua1ZpZXdgIGlzIGNvbnNp
ZGVyZWQgbG9hZGluZyB3aGVuIGl0IGhhcyBhdCBsZWFzdCBvbmUKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyIHdob3NlIHZhbHVlIGlzIGN1cnJlbnRseSBudWxsIG9yIHVuZGVmaW5lZC4g
RHVyaW5nCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgdGltZSwgY2xpY2tpbmcgdGhlIGxpbmsg
d2lsbCBwZXJmb3JtIG5vIHRyYW5zaXRpb24gYW5kCi0gICAgICAgICAgICAgICAgICAgIGVtaXQg
YSB3YXJuaW5nIHRoYXQgdGhlIGxpbmsgaXMgc3RpbGwgaW4gYSBsb2FkaW5nIHN0YXRlLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBsb2FkaW5nCi0gICAgICAgICAgICAgICAgICAq
Ki8KLSAgICAgICAgICAgIGxvYWRpbmc6IGNvbXB1dGVkKCdsb2FkZWRQYXJhbXMnLCBmdW5jdGlv
biBjb21wdXRlTGlua1ZpZXdMb2FkaW5nKCkgewotICAgICAgICAgICAgICAgIGlmICghZ2V0KHRo
aXMsICdsb2FkZWRQYXJhbXMnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRo
aXMsICdsb2FkaW5nQ2xhc3MnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGFwcGxp
Y2F0aW9uJ3MgbWFpbiByb3V0ZXIgZnJvbSB0aGUgY29udGFpbmVyLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSByb3V0ZXIKLSAg
ICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgcm91dGVyOiBjb21wdXRlZChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdjb250cm9sbGVyJykuY29u
dGFpbmVyLmxvb2t1cCgncm91dGVyOm1haW4nKTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRXZlbnQgaGFuZGxlciB0aGF0IGludm9rZXMg
dGhlIGxpbmssIGFjdGl2YXRpbmcgdGhlIGFzc29jaWF0ZWQgcm91dGUuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfaW52b2tlCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgX2ludm9rZTogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzU2ltcGxlQ2xpY2soZXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlz
LnByZXZlbnREZWZhdWx0ICE9PSBmYWxzZSkgewotCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5idWJibGVzID09PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICBldmVu
dC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZ2V0KHRoaXMsICdfaXNEaXNhYmxlZCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0
KHRoaXMsICdsb2FkaW5nJykpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLndh
cm4oIlRoaXMgbGluay10byBpcyBpbiBhbiBpbmFjdGl2ZSBsb2FkaW5nIHN0YXRlIGJlY2F1c2Ug
YXQgbGVhc3Qgb25lIG9mIGl0cyBwYXJhbWV0ZXJzIHByZXNlbnRseSBoYXMgYSBudWxsL3VuZGVm
aW5lZCB2YWx1ZSwgb3IgdGhlIHByb3ZpZGVkIHJvdXRlIG5hbWUgaXMgaW52YWxpZC4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciByb3V0ZXIgPSBnZXQodGhpcywgJ3JvdXRlcicpLAotICAgICAgICAg
ICAgICAgIGxvYWRlZFBhcmFtcyA9IGdldCh0aGlzLCAnbG9hZGVkUGFyYW1zJyk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHJvdXRlci5fZG9UcmFuc2l0aW9uKGxvYWRlZFBh
cmFtcy50YXJnZXRSb3V0ZU5hbWUsIGxvYWRlZFBhcmFtcy5tb2RlbHMsIGxvYWRlZFBhcmFtcy5x
dWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAncmVwbGFjZScpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24ubWV0aG9kKCdyZXBsYWNlJyk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgZWFnZXIgVVJMIHVw
ZGF0ZSwgYnV0IGFmdGVyIHdlJ3ZlIGdpdmVuIHRoZSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAg
ICAgLy8gYSBjaGFuY2UgdG8gc3luY2hyb25vdXNseSByZWRpcmVjdC4KLSAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGFsd2F5cyBnZW5lcmF0ZSB0aGUgVVJMIGluc3RlYWQgb2YgdXNpbmcg
dGhlIGhyZWYgYmVjYXVzZQotICAgICAgICAgICAgICAgIC8vIHRoZSBocmVmIHdpbGwgaW5jbHVk
ZSBhbnkgcm9vdFVSTCBzZXQsIGJ1dCB0aGUgcm91dGVyIGV4cGVjdHMgYSBVUkwKLSAgICAgICAg
ICAgICAgICAvLyB3aXRob3V0IGl0ISBOb3RlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBmaXJzdCBs
ZXZlbCByb3V0ZXIgYmVjYXVzZSBpdAotICAgICAgICAgICAgICAgIC8vIGNhbGxzIGxvY2F0aW9u
LmZvcm1hdFVSTCgpLCB3aGljaCBhbHNvIHdvdWxkIGFkZCB0aGUgcm9vdFVSTCEKLSAgICAgICAg
ICAgICAgICB2YXIgYXJncyA9IHJvdXRlQXJncyhsb2FkZWRQYXJhbXMudGFyZ2V0Um91dGVOYW1l
LCBsb2FkZWRQYXJhbXMubW9kZWxzLCB0cmFuc2l0aW9uLnN0YXRlLnF1ZXJ5UGFyYW1zKTsKLSAg
ICAgICAgICAgICAgICB2YXIgdXJsID0gcm91dGVyLnJvdXRlci5nZW5lcmF0ZS5hcHBseShyb3V0
ZXIucm91dGVyLCBhcmdzKTsKLQotICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZU9uY2UoJ3Jv
dXRlclRyYW5zaXRpb25zJywgdGhpcywgdGhpcy5fZWFnZXJVcGRhdGVVcmwsIHRyYW5zaXRpb24s
IHVybCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfZWFnZXJVcGRhdGVV
cmwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIGhyZWYKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2Vh
Z2VyVXBkYXRlVXJsOiBmdW5jdGlvbih0cmFuc2l0aW9uLCBocmVmKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0cmFuc2l0aW9uLmlzQWN0aXZlIHx8ICF0cmFuc2l0aW9uLnVybE1ldGhvZCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIHdhcyBhYm9ydGVkLCBhbHJlYWR5IHJh
biB0byBjb21wbGV0aW9uLAotICAgICAgICAgICAgICAgICAgICAvLyBvciBpdCBoYXMgYSBudWxs
IHVybC11cGRhdGVkIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChocmVmLmluZGV4T2YoJyMnKSA9PT0g
MCkgewotICAgICAgICAgICAgICAgICAgICBocmVmID0gaHJlZi5zbGljZSgxKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBSZS11c2UgdGhlIHJvdXRlcmpzIGhvb2tz
IHNldCB1cCBieSB0aGUgRW1iZXIgcm91dGVyLgotICAgICAgICAgICAgICAgIHZhciByb3V0ZXJq
cyA9IGdldCh0aGlzLCAncm91dGVyLnJvdXRlcicpOwotICAgICAgICAgICAgICAgIGlmICh0cmFu
c2l0aW9uLnVybE1ldGhvZCA9PT0gJ3VwZGF0ZScpIHsKLSAgICAgICAgICAgICAgICAgICAgcm91
dGVyanMudXBkYXRlVVJMKGhyZWYpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNp
dGlvbi51cmxNZXRob2QgPT09ICdyZXBsYWNlJykgewotICAgICAgICAgICAgICAgICAgICByb3V0
ZXJqcy5yZXBsYWNlVVJMKGhyZWYpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIFByZXZlbnQgbGF0ZXIgdXBkYXRlIHVybCByZWZpcmUuCi0gICAgICAgICAgICAgICAg
dHJhbnNpdGlvbi5tZXRob2QobnVsbCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQ29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIGFu
IGFycmF5IG9mIHRoZQotICAgICAgICAgICAgICAgICAgICByZXNvbHZlZCBwYXJhbWV0ZXJzIHBh
c3NlZCB0byB0aGUgYGxpbmstdG9gIGhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgZS5nLjoK
LQotICAgICAgICAgICAgICAgICAgICBgYGBoYnMKLSAgICAgICAgICAgICAgICAgICAge3tsaW5r
LXRvIGEgYiAnMTIzJyBjfX0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgd2lsbCBnZW5lcmF0ZSBhIGByZXNvbHZlZFBhcmFtc2Agb2Y6Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgW2FPYmplY3QsIGJPYmplY3Qs
ICcxMjMnLCBjT2JqZWN0XQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkKLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJlc29sdmVkUGFyYW1zOiBjb21wdXRlZCgncm91dGVyLnVybCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzLAotICAg
ICAgICAgICAgICAgIG9wdGlvbnMgPSBwYXJhbWV0ZXJzLm9wdGlvbnMsCi0gICAgICAgICAgICAg
ICAgdHlwZXMgPSBvcHRpb25zLnR5cGVzLAotICAgICAgICAgICAgICAgIGRhdGEgPSBvcHRpb25z
LmRhdGEsCi0gICAgICAgICAgICAgICAgdGFyZ2V0Um91dGVOYW1lLCBtb2RlbHM7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgb25seVF1ZXJ5UGFyYW1zU3VwcGxpZWQgPSAocGFyYW1ldGVycy5wYXJh
bXMubGVuZ3RoID09PSAwKTsKLSAgICAgICAgICAgICAgICBpZiAob25seVF1ZXJ5UGFyYW1zU3Vw
cGxpZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFwcENvbnRyb2xsZXIgPSB0aGlzLmNv
bnRhaW5lci5sb29rdXAoJ2NvbnRyb2xsZXI6YXBwbGljYXRpb24nKTsKLSAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0Um91dGVOYW1lID0gZ2V0KGFwcENvbnRyb2xsZXIsICdjdXJyZW50Um91dGVO
YW1lJyk7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGVscyA9IFtdOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGVscyA9IHJlc29sdmVQYXJhbXMocGFy
YW1ldGVycy5jb250ZXh0LCBwYXJhbWV0ZXJzLnBhcmFtcywgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZXM6IHR5cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSAK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFJvdXRl
TmFtZSA9IG1vZGVscy5zaGlmdCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhciBzdXBwbGllZFF1ZXJ5UGFyYW1zID0gZ2V0UmVzb2x2ZWRRdWVyeVBhcmFtcyh0aGlz
LCB0YXJnZXRSb3V0ZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0Um91dGVOYW1lOiB0YXJnZXRSb3V0ZU5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgIG1vZGVsczogbW9kZWxzLAotICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFt
czogc3VwcGxpZWRRdWVyeVBhcmFtcwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9
KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENvbXB1dGVkIHByb3Bl
cnR5IHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCByb3V0ZSBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICBkeW5hbWljIHNlZ21lbnRzLCBhbmQgcXVlcnkgcGFyYW1zLiBSZXR1cm5zIGZhbHN5IGlm
Ci0gICAgICAgICAgICAgICAgICAgIGZvciBudWxsL3VuZGVmaW5lZCBwYXJhbXMgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgbGluayB2aWV3Ci0gICAgICAgICAgICAgICAgICAgIGlzIHN0aWxsIGluIGEg
bG9hZGluZyBzdGF0ZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9
IEFuIGFycmF5IHdpdGggdGhlIHJvdXRlIG5hbWUgYW5kIGFueSBkeW5hbWljIHNlZ21lbnRzCi0g
ICAgICAgICAgICAgICAgICAqKi8KLSAgICAgICAgICAgIGxvYWRlZFBhcmFtczogY29tcHV0ZWQo
J3Jlc29sdmVkUGFyYW1zJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtWaWV3Um91dGVBcmdzKCkgewot
ICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZFBhcmFtcyA9IGdldCh0aGlzLCAncmVzb2x2ZWRQ
YXJhbXMnKSwKLSAgICAgICAgICAgICAgICByb3V0ZXIgPSBnZXQodGhpcywgJ3JvdXRlcicpLAot
ICAgICAgICAgICAgICAgIG5hbWVkUm91dGUgPSByZXNvbHZlZFBhcmFtcy50YXJnZXRSb3V0ZU5h
bWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW5hbWVkUm91dGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEVtYmVy
LmFzc2VydChmbXQoIlRoZSBhdHRlbXB0IHRvIGxpbmstdG8gcm91dGUgJyVAJyBmYWlsZWQuICIg
KwotICAgICAgICAgICAgICAgICJUaGUgcm91dGVyIGRpZCBub3QgZmluZCAnJUAnIGluIGl0cyBw
b3NzaWJsZSByb3V0ZXM6ICclQCciLAotICAgICAgICAgICAgICAgIFtuYW1lZFJvdXRlLCBuYW1l
ZFJvdXRlLCBrZXlzKHJvdXRlci5yb3V0ZXIucmVjb2duaXplci5uYW1lcykuam9pbigiJywgJyIp
XSksCi0gICAgICAgICAgICAgICAgcm91dGVyLmhhc1JvdXRlKG5hbWVkUm91dGUpKTsKLQotICAg
ICAgICAgICAgICAgIGlmICghcGFyYW1zQXJlTG9hZGVkKHJlc29sdmVkUGFyYW1zLm1vZGVscykp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFBhcmFtczsKLSAgICAgICAgICAgIH0pLAotCi0g
ICAgICAgICAgICBxdWVyeVBhcmFtc09iamVjdDogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGVsZW1lbnQncyBgaHJlZmAgYXR0cmlidXRlIHRv
IHRoZSB1cmwgZm9yCi0gICAgICAgICAgICAgICAgICAgIHRoZSBgTGlua1ZpZXdgJ3MgdGFyZ2V0
ZWQgcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGBMaW5rVmlld2AncyBgdGFn
TmFtZWAgaXMgY2hhbmdlZCB0byBhIHZhbHVlIG90aGVyCi0gICAgICAgICAgICAgICAgICAgIHRo
YW4gYGFgLCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4KLQotICAgICAgICAgICAgICAg
ICAgICBAcHJvcGVydHkgaHJlZgotICAgICAgICAgICAgICAgICAgKiovCi0gICAgICAgICAgICBo
cmVmOiBjb21wdXRlZCgnbG9hZGVkUGFyYW1zJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtWaWV3SHJl
ZigpIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICd0YWdOYW1lJykgIT09ICdhJykg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIHJvdXRlciA9IGdldCh0aGlzLCAncm91dGVyJyksCi0gICAgICAgICAg
ICAgICAgbG9hZGVkUGFyYW1zID0gZ2V0KHRoaXMsICdsb2FkZWRQYXJhbXMnKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghbG9hZGVkUGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnZXQodGhpcywgJ2xvYWRpbmdIcmVmJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIHZpc2libGVRdWVyeVBhcmFtcyA9IHt9OwotCi0gICAgICAgICAgICAgICAg
bWVyZ2UodmlzaWJsZVF1ZXJ5UGFyYW1zLCBsb2FkZWRQYXJhbXMucXVlcnlQYXJhbXMpOwotICAg
ICAgICAgICAgICAgIHJvdXRlci5fcHJlcGFyZVF1ZXJ5UGFyYW1zKGxvYWRlZFBhcmFtcy50YXJn
ZXRSb3V0ZU5hbWUsIGxvYWRlZFBhcmFtcy5tb2RlbHMsIHZpc2libGVRdWVyeVBhcmFtcyk7Ci0K
LQotICAgICAgICAgICAgICAgIHZhciBhcmdzID0gcm91dGVBcmdzKGxvYWRlZFBhcmFtcy50YXJn
ZXRSb3V0ZU5hbWUsIGxvYWRlZFBhcmFtcy5tb2RlbHMsIHZpc2libGVRdWVyeVBhcmFtcyk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJvdXRlci5nZW5lcmF0ZS5hcHBseShyb3V0ZXIs
IGFyZ3MpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGhyZWYg
dmFsdWUgdG8gdXNlIHdoaWxlIGEgbGluay10byBpcyBsb2FkaW5nLgotICAgICAgICAgICAgICAg
ICAgICBPbmx5IGFwcGxpZXMgd2hlbiB0YWdOYW1lIGlzICdhJwotCi0gICAgICAgICAgICAgICAg
ICAgIEBwcm9wZXJ0eSBsb2FkaW5nSHJlZgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJp
bmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgIwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIGxvYWRpbmdIcmVmOiAnIycKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgTGlu
a1ZpZXcudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiAiTGlua1Zp
ZXciOwotICAgICAgICB9OwotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBge3ts
aW5rLXRvfX1gIGhlbHBlciByZW5kZXJzIGEgbGluayB0byB0aGUgc3VwcGxpZWQKLSAgICAgICAg
ICAgICAgYHJvdXRlTmFtZWAgcGFzc2luZyBhbiBvcHRpb25hbGx5IHN1cHBsaWVkIG1vZGVsIHRv
IHRoZQotICAgICAgICAgICAgICByb3V0ZSBhcyBpdHMgYG1vZGVsYCBjb250ZXh0IG9mIHRoZSBy
b3V0ZS4gVGhlIGJsb2NrCi0gICAgICAgICAgICAgIGZvciBge3tsaW5rLXRvfX1gIGJlY29tZXMg
dGhlIGlubmVySFRNTCBvZiB0aGUgcmVuZGVyZWQKLSAgICAgICAgICAgICAgZWxlbWVudDoKLQot
ICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2xpbmstdG8gJ3Bo
b3RvR2FsbGVyeSd9fQotICAgICAgICAgICAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAg
ICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBgYGBodG1sCi0gICAgICAgICAgICAgIDxhIGhyZWY9Ii9oYW1zdGVyLXBob3RvcyI+Ci0gICAg
ICAgICAgICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKLSAgICAgICAgICAgICAgPC9hPgotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgU3VwcGx5aW5nIGEgdGFnTmFtZQot
ICAgICAgICAgICAgICBCeSBkZWZhdWx0IGB7e2xpbmstdG99fWAgcmVuZGVycyBhbiBgPGE+YCBl
bGVtZW50LiBUaGlzIGNhbgotICAgICAgICAgICAgICBiZSBvdmVycmlkZGVuIGZvciBhIHNpbmds
ZSB1c2Ugb2YgYHt7bGluay10b319YCBieSBzdXBwbHlpbmcKLSAgICAgICAgICAgICAgYSBgdGFn
TmFtZWAgb3B0aW9uOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAg
ICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5JyB0YWdOYW1lPSJsaSJ9fQotICAgICAgICAgICAg
ICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxs
aT4KLSAgICAgICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgICAgICAgICAgICA8
L2xpPgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUbyBvdmVycmlkZSB0aGlz
IG9wdGlvbiBmb3IgeW91ciBlbnRpcmUgYXBwbGljYXRpb24sIHNlZQotICAgICAgICAgICAgICAi
T3ZlcnJpZGluZyBBcHBsaWNhdGlvbi13aWRlIERlZmF1bHRzIi4KLQotICAgICAgICAgICAgICAj
IyMgRGlzYWJsaW5nIHRoZSBgbGluay10b2AgaGVscGVyCi0gICAgICAgICAgICAgIEJ5IGRlZmF1
bHQgYHt7bGluay10b319YCBpcyBlbmFibGVkLgotICAgICAgICAgICAgICBhbnkgcGFzc2VkIHZh
bHVlIHRvIGBkaXNhYmxlZGAgaGVscGVyIHByb3BlcnR5IHdpbGwgZGlzYWJsZSB0aGUgYGxpbmst
dG9gIGhlbHBlci4KLQotICAgICAgICAgICAgICBzdGF0aWMgdXNlOiB0aGUgYGRpc2FibGVkYCBv
cHRpb246Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNs
aW5rLXRvICdwaG90b0dhbGxlcnknIGRpc2FibGVkPXRydWV9fQotICAgICAgICAgICAgICAgIEdy
ZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBkeW5hbWljIHVzZTogdGhlIGBkaXNhYmxlZFdoZW5g
IG9wdGlvbjoKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7
I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgZGlzYWJsZWRXaGVuPWNvbnRyb2xsZXIuc29tZVByb3Bl
cnR5fX0KLSAgICAgICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgICAgICAgICAg
ICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYW55IHBh
c3NlZCB2YWx1ZSB0byBgZGlzYWJsZWRgIHdpbGwgZGlzYWJsZSBpdCBleGNlcHQgYHVuZGVmaW5l
ZGAuCi0gICAgICAgICAgICAgIHRvIGVuc3VyZSB0aGF0IG9ubHkgYHRydWVgIGRpc2FibGUgdGhl
IGBsaW5rLXRvYCBoZWxwZXIgeW91IGNhbgotICAgICAgICAgICAgICBvdmVycmlkZSB0aGUgZ2xv
YmFsIGJlaGF2aW91ciBvZiBgRW1iZXIuTGlua1ZpZXdgLgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuTGlua1ZpZXcucmVvcGVuKHsKLSAgICAgICAg
ICAgICAgICBkaXNhYmxlZDogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewot
ICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZXQoJ19pc0Rpc2FibGVkJywgdmFsdWUgPT09IHRydWUpOwotICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlID8g
Z2V0KHRoaXMsICdkaXNhYmxlZENsYXNzJykgOiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9KQot
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgc2Vl
ICJPdmVycmlkaW5nIEFwcGxpY2F0aW9uLXdpZGUgRGVmYXVsdHMiIGZvciBtb3JlLgotCi0gICAg
ICAgICAgICAgICMjIyBIYW5kbGluZyBgaHJlZmAKLSAgICAgICAgICAgICAgYHt7bGluay10b319
YCB3aWxsIHVzZSB5b3VyIGFwcGxpY2F0aW9uJ3MgUm91dGVyIHRvCi0gICAgICAgICAgICAgIGZp
bGwgdGhlIGVsZW1lbnQncyBgaHJlZmAgcHJvcGVydHkgd2l0aCBhIHVybCB0aGF0Ci0gICAgICAg
ICAgICAgIG1hdGNoZXMgdGhlIHBhdGggdG8gdGhlIHN1cHBsaWVkIGByb3V0ZU5hbWVgIGZvciB5
b3VyCi0gICAgICAgICAgICAgIHJvdXRlcnMncyBjb25maWd1cmVkIGBMb2NhdGlvbmAgc2NoZW1l
LCB3aGljaCBkZWZhdWx0cwotICAgICAgICAgICAgICB0byBFbWJlci5IYXNoTG9jYXRpb24uCi0K
LSAgICAgICAgICAgICAgIyMjIEhhbmRsaW5nIGN1cnJlbnQgcm91dGUKLSAgICAgICAgICAgICAg
YHt7bGluay10b319YCB3aWxsIGFwcGx5IGEgQ1NTIGNsYXNzIG5hbWUgb2YgJ2FjdGl2ZScKLSAg
ICAgICAgICAgICAgd2hlbiB0aGUgYXBwbGljYXRpb24ncyBjdXJyZW50IHJvdXRlIG1hdGNoZXMK
LSAgICAgICAgICAgICAgdGhlIHN1cHBsaWVkIHJvdXRlTmFtZS4gRm9yIGV4YW1wbGUsIGlmIHRo
ZSBhcHBsaWNhdGlvbidzCi0gICAgICAgICAgICAgIGN1cnJlbnQgcm91dGUgaXMgJ3Bob3RvR2Fs
bGVyeS5yZWNlbnQnIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgdXNlIG9mIGB7e2xpbmst
dG99fWA6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNs
aW5rLXRvICdwaG90b0dhbGxlcnkucmVjZW50J319Ci0gICAgICAgICAgICAgICAgR3JlYXQgSGFt
c3RlciBQaG90b3MgZnJvbSB0aGUgbGFzdCB3ZWVrCi0gICAgICAgICAgICAgIHt7L2xpbmstdG99
fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICB3aWxsIHJlc3VsdCBpbgotCi0g
ICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGEgaHJlZj0iL2hhbXN0ZXItcGhv
dG9zL3RoaXMtd2VlayIgY2xhc3M9ImFjdGl2ZSI+Ci0gICAgICAgICAgICAgICAgR3JlYXQgSGFt
c3RlciBQaG90b3MKLSAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBUaGUgQ1NTIGNsYXNzIG5hbWUgdXNlZCBmb3IgYWN0aXZlIGNsYXNzZXMgY2Fu
IGJlIGN1c3RvbWl6ZWQKLSAgICAgICAgICAgICAgZm9yIGEgc2luZ2xlIHVzZSBvZiBge3tsaW5r
LXRvfX1gIGJ5IHBhc3NpbmcgYW4gYGFjdGl2ZUNsYXNzYAotICAgICAgICAgICAgICBvcHRpb246
Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNsaW5rLXRv
ICdwaG90b0dhbGxlcnkucmVjZW50JyBhY3RpdmVDbGFzcz0iY3VycmVudC11cmwifX0KLSAgICAg
ICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcyBmcm9tIHRoZSBsYXN0IHdlZWsKLSAgICAg
ICAgICAgICAge3svbGluay10b319Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IGBgYGh0bWwKLSAgICAgICAgICAgICAgPGEgaHJlZj0iL2hhbXN0ZXItcGhvdG9zL3RoaXMtd2Vl
ayIgY2xhc3M9ImN1cnJlbnQtdXJsIj4KLSAgICAgICAgICAgICAgICBHcmVhdCBIYW1zdGVyIFBo
b3RvcwotICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgIFRvIG92ZXJyaWRlIHRoaXMgb3B0aW9uIGZvciB5b3VyIGVudGlyZSBhcHBsaWNhdGlvbiwg
c2VlCi0gICAgICAgICAgICAgICJPdmVycmlkaW5nIEFwcGxpY2F0aW9uLXdpZGUgRGVmYXVsdHMi
LgotCi0gICAgICAgICAgICAgICMjIyBTdXBwbHlpbmcgYSBtb2RlbAotICAgICAgICAgICAgICBB
biBvcHRpb25hbCBtb2RlbCBhcmd1bWVudCBjYW4gYmUgdXNlZCBmb3Igcm91dGVzIHdob3NlCi0g
ICAgICAgICAgICAgIHBhdGhzIGNvbnRhaW4gZHluYW1pYyBzZWdtZW50cy4gVGhpcyBhcmd1bWVu
dCB3aWxsIGJlY29tZQotICAgICAgICAgICAgICB0aGUgbW9kZWwgY29udGV4dCBvZiB0aGUgbGlu
a2VkIHJvdXRlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
QXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJj
ZSgicGhvdG9HYWxsZXJ5Iiwge3BhdGg6ICJoYW1zdGVyLXBob3Rvcy86cGhvdG9faWQifSk7Ci0g
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBo
YW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgYVBob3Rv
fX0KLSAgICAgICAgICAgICAgICB7e2FQaG90by50aXRsZX19Ci0gICAgICAgICAgICAgIHt7L2xp
bmstdG99fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAg
ICAgICAgICAgIDxhIGhyZWY9Ii9oYW1zdGVyLXBob3Rvcy80MiI+Ci0gICAgICAgICAgICAgICAg
VG9tc3RlcgotICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICMjIyBTdXBwbHlpbmcgbXVsdGlwbGUgbW9kZWxzCi0gICAgICAgICAgICAgIEZvciBk
ZWVwLWxpbmtpbmcgdG8gcm91dGUgcGF0aHMgdGhhdCBjb250YWluIG11bHRpcGxlCi0gICAgICAg
ICAgICAgIGR5bmFtaWMgc2VnbWVudHMsIG11bHRpcGxlIG1vZGVsIGFyZ3VtZW50cyBjYW4gYmUg
dXNlZC4KLSAgICAgICAgICAgICAgQXMgdGhlIHJvdXRlciB0cmFuc2l0aW9ucyB0aHJvdWdoIHRo
ZSByb3V0ZSBwYXRoLCBlYWNoCi0gICAgICAgICAgICAgIHN1cHBsaWVkIG1vZGVsIGFyZ3VtZW50
IHdpbGwgYmVjb21lIHRoZSBjb250ZXh0IGZvciB0aGUKLSAgICAgICAgICAgICAgcm91dGUgd2l0
aCB0aGUgZHluYW1pYyBzZWdtZW50czoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHRoaXMucmVzb3VyY2UoInBob3RvR2FsbGVyeSIsIHtwYXRoOiAiaGFtc3Rlci1waG90b3MvOnBo
b3RvX2lkIn0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSgiY29t
bWVudCIsIHtwYXRoOiAiY29tbWVudHMvOmNvbW1lbnRfaWQifSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAg
VGhpcyBhcmd1bWVudCB3aWxsIGJlY29tZSB0aGUgbW9kZWwgY29udGV4dCBvZiB0aGUgbGlua2Vk
IHJvdXRlOgotCi0gICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sj
bGluay10byAncGhvdG9HYWxsZXJ5LmNvbW1lbnQnIGFQaG90byBjb21tZW50fX0KLSAgICAgICAg
ICAgICAgICB7e2NvbW1lbnQuYm9keX19Ci0gICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxh
IGhyZWY9Ii9oYW1zdGVyLXBob3Rvcy80Mi9jb21tZW50LzcxOCI+Ci0gICAgICAgICAgICAgICAg
QSsrKyB3b3VsZCBzbnVnZ2xlIGFnYWluLgotICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIyBTdXBwbHlpbmcgYW4gZXhwbGljaXQgZHluYW1p
YyBzZWdtZW50IHZhbHVlCi0gICAgICAgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIGEgbW9kZWwg
b2JqZWN0IGF2YWlsYWJsZSB0byBwYXNzIHRvIGB7e2xpbmstdG99fWAsCi0gICAgICAgICAgICAg
IGFuIG9wdGlvbmFsIHN0cmluZyBvciBpbnRlZ2VyIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgZm9y
IHJvdXRlcyB3aG9zZQotICAgICAgICAgICAgICBwYXRocyBjb250YWluIGR5bmFtaWMgc2VnbWVu
dHMuIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUgdGhlIHZhbHVlCi0gICAgICAgICAgICAgIG9m
IHRoZSBkeW5hbWljIHNlZ21lbnQ6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnJlc291cmNlKCJwaG90b0dhbGxlcnkiLCB7cGF0aDogImhhbXN0ZXItcGhvdG9zLzpwaG90
b19pZCJ9KTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjbGluay10byAncGhvdG9HYWxs
ZXJ5JyBhUGhvdG9JZH19Ci0gICAgICAgICAgICAgICAge3thUGhvdG8udGl0bGV9fQotICAgICAg
ICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
YGBgaHRtbAotICAgICAgICAgICAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3MvNDIiPgotICAg
ICAgICAgICAgICAgIFRvbXN0ZXIKLSAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBXaGVuIHRyYW5zaXRpb25pbmcgaW50byB0aGUgbGlua2VkIHJv
dXRlLCB0aGUgYG1vZGVsYCBob29rIHdpbGwKLSAgICAgICAgICAgICAgYmUgdHJpZ2dlcmVkIHdp
dGggcGFyYW1ldGVycyBpbmNsdWRpbmcgdGhpcyBwYXNzZWQgaWRlbnRpZmllci4KLQotICAgICAg
ICAgICAgICAjIyMgQWxsb3dpbmcgRGVmYXVsdCBBY3Rpb24KLQotICAgICAgICAgICAgIEJ5IGRl
ZmF1bHQgdGhlIGB7e2xpbmstdG99fWAgaGVscGVyIHByZXZlbnRzIHRoZSBkZWZhdWx0IGJyb3dz
ZXIgYWN0aW9uCi0gICAgICAgICAgICAgYnkgY2FsbGluZyBgcHJldmVudERlZmF1bHQoKWAgYXMg
dGhpcyBzb3J0IG9mIGFjdGlvbiBidWJibGluZyBpcyBub3JtYWxseQotICAgICAgICAgICAgIGhh
bmRsZWQgaW50ZXJuYWxseSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gdGFrZSB0aGUgYnJvd3NlciB0
byBhIG5ldyBVUkwgKGZvcgotICAgICAgICAgICAgIGV4YW1wbGUpLgotCi0gICAgICAgICAgICAg
SWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvciBzcGVjaWZ5IGBwcmV2ZW50RGVm
YXVsdD1mYWxzZWAgaW4KLSAgICAgICAgICAgICB5b3VyIHRlbXBsYXRlOgotCi0gICAgICAgICAg
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5
JyBhUGhvdG9JZCBwcmV2ZW50RGVmYXVsdD1mYWxzZX19Ci0gICAgICAgICAgICAgICAge3thUGhv
dG9JZC50aXRsZX19Ci0gICAgICAgICAgICAgIHt7L2xpbmstdG99fQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAjIyMgT3ZlcnJpZGluZyBhdHRyaWJ1dGVzCi0gICAgICAgICAg
ICAgIFlvdSBjYW4gb3ZlcnJpZGUgYW55IGdpdmVuIHByb3BlcnR5IG9mIHRoZSBFbWJlci5MaW5r
VmlldwotICAgICAgICAgICAgICB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgYHt7bGluay10b319
YCBoZWxwZXIgYnkgcGFzc2luZwotICAgICAgICAgICAgICBrZXkvdmFsdWUgcGFpcnMsIGxpa2Ug
c286Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICB7eyNsaW5r
LXRvICBhUGhvdG8gdGFnTmFtZT0nbGknIHRpdGxlPSdGb2xsb3dpbmcgdGhpcyBsaW5rIHdpbGwg
Y2hhbmdlIHlvdXIgbGlmZScgY2xhc3NOYW1lcz0ncGljIHN3ZWV0J319Ci0gICAgICAgICAgICAg
ICAgVWgtbWF6aW5nIQotICAgICAgICAgICAgICB7ey9saW5rLXRvfX0KLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgU2VlIFtFbWJlci5MaW5rVmlld10oL2FwaS9jbGFzc2VzL0Vt
YmVyLkxpbmtWaWV3Lmh0bWwpIGZvciBhCi0gICAgICAgICAgICAgIGNvbXBsZXRlIGxpc3Qgb2Yg
b3ZlcnJpZGVhYmxlIHByb3BlcnRpZXMuIEJlIHN1cmUgdG8gYWxzbwotICAgICAgICAgICAgICBj
aGVjayBvdXQgaW5oZXJpdGVkIHByb3BlcnRpZXMgb2YgYExpbmtWaWV3YC4KLQotICAgICAgICAg
ICAgICAjIyMgT3ZlcnJpZGluZyBBcHBsaWNhdGlvbi13aWRlIERlZmF1bHRzCi0gICAgICAgICAg
ICAgIGBge3tsaW5rLXRvfX1gYCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIEVtYmVyLkxpbmtWaWV3
Ci0gICAgICAgICAgICAgIGZvciByZW5kZXJpbmcuIFRvIG92ZXJyaWRlIG9wdGlvbnMgZm9yIHlv
dXIgZW50aXJlCi0gICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCByZW9wZW4gRW1iZXIuTGlua1Zp
ZXcgYW5kIHN1cHBseSB0aGUKLSAgICAgICAgICAgICAgZGVzaXJlZCB2YWx1ZXM6Ci0KLSAgICAg
ICAgICAgICAgYGBgIGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuTGlua1ZpZXcucmVv
cGVuKHsKLSAgICAgICAgICAgICAgICBhY3RpdmVDbGFzczogImlzLWFjdGl2ZSIsCi0gICAgICAg
ICAgICAgICAgdGFnTmFtZTogJ2xpJwotICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBk
ZWZhdWx0IGV2ZW50IGluCi0gICAgICAgICAgICAgIHRoaXMgbWFubmVyOgotCi0gICAgICAgICAg
ICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEVtYmVyLkxpbmtWaWV3LnJlb3Blbih7
Ci0gICAgICAgICAgICAgICAgZXZlbnROYW1lOiAnY3VzdG9tRXZlbnROYW1lJwotICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBsaW5r
LXRvCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSByb3V0ZU5hbWUKLSAgICAgICAgICAgICAgQHBhcmFtIHtP
YmplY3R9IFtjb250ZXh0XSoKLSAgICAgICAgICAgICAgQHBhcmFtIFtvcHRpb25zXSB7T2JqZWN0
fSBIYW5kbGViYXJzIGtleS92YWx1ZSBwYWlycyBvZiBvcHRpb25zLCB5b3UgY2FuIG92ZXJyaWRl
IGFueSBwcm9wZXJ0eSBvZiBFbWJlci5MaW5rVmlldwotICAgICAgICAgICAgICBAcmV0dXJuIHtT
dHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAgIEBzZWUge0VtYmVyLkxpbmtWaWV3fQot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbGlua1RvSGVscGVyKG5hbWUpIHsKLSAg
ICAgICAgICAgIHZhciBvcHRpb25zID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIC0xKVswXSwKLSAg
ICAgICAgICAgIHBhcmFtcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksCi0gICAgICAg
ICAgICBoYXNoID0gb3B0aW9ucy5oYXNoOwotCi0gICAgICAgICAgICBFbWJlci5hc3NlcnQoIllv
dSBtdXN0IHByb3ZpZGUgb25lIG9yIG1vcmUgcGFyYW1ldGVycyB0byB0aGUgbGluay10byBoZWxw
ZXIuIiwgcGFyYW1zLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJhbXNbcGFyYW1zLmxl
bmd0aCAtIDFdIGluc3RhbmNlb2YgUXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBoYXNo
LnF1ZXJ5UGFyYW1zT2JqZWN0ID0gcGFyYW1zLnBvcCgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBoYXNoLmRpc2FibGVkQmluZGluZyA9IGhhc2guZGlzYWJsZWRXaGVuOwotCi0gICAg
ICAgICAgICBpZiAoIW9wdGlvbnMuZm4pIHsKLSAgICAgICAgICAgICAgICB2YXIgbGlua1RpdGxl
ID0gcGFyYW1zLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmtUeXBlID0gb3B0aW9u
cy50eXBlcy5zaGlmdCgpOwotICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpczsKLSAg
ICAgICAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdJRCcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgb3B0aW9ucy5saW5rVGV4dFBhdGggPSBsaW5rVGl0bGU7Ci0gICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMuZm4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBFbWJlckhhbmRsZWJhcnMuZ2V0RXNjYXBlZChjb250ZXh0LCBsaW5rVGl0bGUsIG9wdGlvbnMp
OwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMuZm4gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsaW5rVGl0bGU7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoYXNoLnBhcmFtZXRl
cnMgPSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dDogdGhpcywKLSAgICAgICAgICAgICAgICBv
cHRpb25zOiBvcHRpb25zLAotICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zCi0gICAgICAg
ICAgICB9OwotCi0gICAgICAgICAgICBvcHRpb25zLmhlbHBlck5hbWUgPSBvcHRpb25zLmhlbHBl
ck5hbWUgfHwgJ2xpbmstdG8nOwotCi0gICAgICAgICAgICByZXR1cm4gdmlld0hlbHBlci5jYWxs
KHRoaXMsIExpbmtWaWV3LCBvcHRpb25zKTsKLSAgICAgICAgfQotCi0KLQotICAgICAgICBFbWJl
ckhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ3F1ZXJ5LXBhcmFtcycsIGZ1bmN0aW9uIHF1ZXJ5
UGFyYW1zSGVscGVyKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIEVtYmVyLmFzc2VydChmbXQoIlRo
ZSBgcXVlcnktcGFyYW1zYCBoZWxwZXIgb25seSBhY2NlcHRzIGhhc2ggcGFyYW1ldGVycywgZS5n
LiAocXVlcnktcGFyYW1zIHF1ZXJ5UGFyYW1Qcm9wZXJ0eU5hbWU9JyVAJykgYXMgb3Bwb3NlZCB0
byBqdXN0IChxdWVyeS1wYXJhbXMgJyVAJykiLCBbb3B0aW9ucywgb3B0aW9uc10pLCBhcmd1bWVu
dHMubGVuZ3RoID09PSAxKTsKLQotICAgICAgICAgICAgcmV0dXJuIFF1ZXJ5UGFyYW1zLmNyZWF0
ZSh7Ci0gICAgICAgICAgICAgICAgdmFsdWVzOiBvcHRpb25zLmhhc2gsCi0gICAgICAgICAgICAg
ICAgdHlwZXM6IG9wdGlvbnMuaGFzaFR5cGVzCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU2VlIFtsaW5rLXRvXSgvYXBpL2NsYXNz
ZXMvRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0bWwjbWV0aG9kX2xpbmstdG8pCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBsaW5rVG8KLSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGVi
YXJzLmhlbHBlcnMKLSAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IHJvdXRlTmFtZQotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gW2Nv
bnRleHRdKgotICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAg
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBkZXByZWNhdGVkTGlua1RvSGVscGVyKCkgewot
ICAgICAgICAgICAgRW1iZXIud2FybigiVGhlICdsaW5rVG8nIHZpZXcgaGVscGVyIGlzIGRlcHJl
Y2F0ZWQgaW4gZmF2b3Igb2YgJ2xpbmstdG8nIik7Ci0gICAgICAgICAgICByZXR1cm4gbGlua1Rv
SGVscGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBnZXRSZXNvbHZlZFF1ZXJ5UGFyYW1zKGxpbmtWaWV3LCB0YXJnZXRSb3V0ZU5hbWUpIHsK
LSAgICAgICAgICAgIHZhciBoZWxwZXJQYXJhbWV0ZXJzID0gbGlua1ZpZXcucGFyYW1ldGVycywK
LSAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqZWN0ID0gbGlua1ZpZXcucXVlcnlQYXJhbXNPYmpl
Y3QsCi0gICAgICAgICAgICByZXNvbHZlZFF1ZXJ5UGFyYW1zID0ge307Ci0KLSAgICAgICAgICAg
IGlmICghcXVlcnlQYXJhbXNPYmplY3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2
ZWRRdWVyeVBhcmFtczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciByYXdQYXJhbXMg
PSBxdWVyeVBhcmFtc09iamVjdC52YWx1ZXM7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGtleSBp
biByYXdQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJhd1BhcmFtcy5oYXNPd25Qcm9w
ZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJhd1BhcmFtc1trZXldLAotICAg
ICAgICAgICAgICAgIHR5cGUgPSBxdWVyeVBhcmFtc09iamVjdC50eXBlc1trZXldOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdJRCcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IG5vcm1hbGl6ZWRQYXRoID0gZ2V0Tm9ybWFsaXplZFBhdGgodmFsdWUsIGhlbHBlclBhcmFtZXRl
cnMpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEVtYmVySGFuZGxlYmFycy5nZXQobm9y
bWFsaXplZFBhdGgucm9vdCwgbm9ybWFsaXplZFBhdGgucGF0aCwgaGVscGVyUGFyYW1ldGVycy5v
cHRpb25zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRRdWVy
eVBhcmFtc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmVzb2x2ZWRRdWVyeVBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdldE5v
cm1hbGl6ZWRQYXRoKHBhdGgsIGhlbHBlclBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIHJldHVy
biBFbWJlckhhbmRsZWJhcnMubm9ybWFsaXplUGF0aChoZWxwZXJQYXJhbWV0ZXJzLmNvbnRleHQs
IHBhdGgsIGhlbHBlclBhcmFtZXRlcnMub3B0aW9ucy5kYXRhKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHBhcmFtc0FyZUxvYWRlZChwYXJhbXMpIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4gPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFt
ID09PSBudWxsIHx8IHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
c2hhbGxvd0VxdWFsKGEsIGIpIHsKLSAgICAgICAgICAgIHZhciBrOwotICAgICAgICAgICAgZm9y
IChrIGluIGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoYS5oYXNPd25Qcm9wZXJ0eShrKSAmJiBh
W2tdICE9PSBiW2tdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGsgaW4gYikgewot
ICAgICAgICAgICAgICAgIGlmIChiLmhhc093blByb3BlcnR5KGspICYmIGFba10gIT09IGJba10p
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uTGlua1ZpZXcgPSBMaW5rVmlldzsKLSAgICAgICAgX19leHBvcnRz
X18uZGVwcmVjYXRlZExpbmtUb0hlbHBlciA9IGRlcHJlY2F0ZWRMaW5rVG9IZWxwZXI7Ci0gICAg
ICAgIF9fZXhwb3J0c19fLmxpbmtUb0hlbHBlciA9IGxpbmtUb0hlbHBlcjsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL291dGxldCIsCi0gICAg
WyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkIiwgImVt
YmVyLXZpZXdzL3ZpZXdzL2NvbnRhaW5lcl92aWV3IiwgImVtYmVyLWhhbmRsZWJhcnMvdmlld3Mv
bWV0YW1vcnBoX3ZpZXciLCAiZW1iZXItaGFuZGxlYmFycy9oZWxwZXJzL3ZpZXciLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVu
Y3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgLy8gYXNzZXJ0Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0Owot
ICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIG9uTG9h
ZCA9IF9fZGVwZW5kZW5jeTRfXy5vbkxvYWQ7Ci0gICAgICAgIHZhciBDb250YWluZXJWaWV3ID0g
X19kZXBlbmRlbmN5NV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBfTWV0YW1vcnBoID0gX19k
ZXBlbmRlbmN5Nl9fLl9NZXRhbW9ycGg7Ci0gICAgICAgIHZhciB2aWV3SGVscGVyID0gX19kZXBl
bmRlbmN5N19fLnZpZXdIZWxwZXI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxl
IGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgICAgICAgICAg
ICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAg
ICAgICAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAgICovCi0KLSAgICAg
ICAgdmFyIE91dGxldFZpZXcgPSBDb250YWluZXJWaWV3LmV4dGVuZChfTWV0YW1vcnBoKTsKLSAg
ICAgICAgX19leHBvcnRzX18uT3V0bGV0VmlldyA9IE91dGxldFZpZXc7Ci0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBUaGUgYG91dGxldGAgaGVscGVyIGlzIGEgcGxhY2Vob2xkZXIgdGhhdCB0
aGUgcm91dGVyIHdpbGwgZmlsbCBpbiB3aXRoCi0gICAgICAgICAgICAgIHRoZSBhcHByb3ByaWF0
ZSB0ZW1wbGF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24u
Ci0KLSAgICAgICAgICAgICAgYGBgIGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3tvdXRsZXR9
fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBhIHRlbXBs
YXRlIGJhc2VkIG9uIEVtYmVyJ3MgbmFtaW5nIGNvbnZlbnRpb25zIHdpbGwgYmUgcmVuZGVyZWQK
LSAgICAgICAgICAgICAgaW50byB0aGUgYG91dGxldGAgKGUuZy4gYEFwcC5Qb3N0c1JvdXRlYCB3
aWxsIHJlbmRlciB0aGUgYHBvc3RzYCB0ZW1wbGF0ZSkuCi0KLSAgICAgICAgICAgICAgWW91IGNh
biByZW5kZXIgYSBkaWZmZXJlbnQgdGVtcGxhdGUgYnkgdXNpbmcgdGhlIGByZW5kZXIoKWAgbWV0
aG9kIGluIHRoZQotICAgICAgICAgICAgICByb3V0ZSdzIGByZW5kZXJUZW1wbGF0ZWAgaG9vay4g
VGhlIGZvbGxvd2luZyB3aWxsIHJlbmRlciB0aGUgYGZhdm9yaXRlUG9zdGAKLSAgICAgICAgICAg
ICAgdGVtcGxhdGUgaW50byB0aGUgYG91dGxldGAuCi0KLSAgICAgICAgICAgICAgYGBgIGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgQXBwLlBvc3RzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQo
ewotICAgICAgICAgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgIHRoaXMucmVuZGVyKCdmYXZvcml0ZVBvc3QnKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBZ
b3UgY2FuIGNyZWF0ZSBjdXN0b20gbmFtZWQgb3V0bGV0cyBmb3IgbW9yZSBjb250cm9sLgotCi0g
ICAgICAgICAgICAgIGBgYCBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7b3V0bGV0ICdmYXZv
cml0ZVBvc3QnfX0KLSAgICAgICAgICAgICAge3tvdXRsZXQgJ3Bvc3RzJ319Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoZW4geW91IGNhbiBkZWZpbmUgd2hhdCB0ZW1wbGF0
ZSBpcyByZW5kZXJlZCBpbnRvIGVhY2ggb3V0bGV0IGluIHlvdXIKLSAgICAgICAgICAgICAgcm91
dGUuCi0KLQotICAgICAgICAgICAgICBgYGAgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBcHAu
UG9zdHNSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgcmVuZGVy
VGVtcGxhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoJ2Zh
dm9yaXRlUG9zdCcsIHsgb3V0bGV0OiAnZmF2b3JpdGVQb3N0JyB9KTsKLSAgICAgICAgICAgICAg
ICAgIHRoaXMucmVuZGVyKCdwb3N0cycsIHsgb3V0bGV0OiAncG9zdHMnIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFlvdSBjYW4gc3BlY2lmeSB0aGUgdmlldyB0aGF0IHRoZSBvdXRsZXQgdXNlcyB0byBj
b250YWluIGFuZCBtYW5hZ2UgdGhlCi0gICAgICAgICAgICAgIHRlbXBsYXRlcyByZW5kZXJlZCBp
bnRvIGl0LgotCi0gICAgICAgICAgICAgIGBgYCBoYW5kbGViYXJzCi0gICAgICAgICAgICAgIHt7
b3V0bGV0IHZpZXc9J3NlY3Rpb25Db250YWluZXInfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgYGBgIGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLlNlY3Rpb25Db250
YWluZXIgPSBFbWJlci5Db250YWluZXJWaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGFn
TmFtZTogJ3NlY3Rpb24nLAotICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsnc3BlY2lhbCdd
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBA
bWV0aG9kIG91dGxldAotICAgICAgICAgICAgICBAZm9yIEVtYmVyLkhhbmRsZWJhcnMuaGVscGVy
cwotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgdGhlIHByb3BlcnR5IG9u
IHRoZSBjb250cm9sbGVyCi0gICAgICAgICAgICAgICAgdGhhdCBob2xkcyB0aGUgdmlldyBmb3Ig
dGhpcyBvdXRsZXQKLSAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwot
ICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gb3V0bGV0SGVscGVyKHByb3BlcnR5LCBv
cHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgb3V0bGV0U291cmNlOwotICAgICAgICAgICAgdmFy
IGNvbnRhaW5lcjsKLSAgICAgICAgICAgIHZhciB2aWV3TmFtZTsKLSAgICAgICAgICAgIHZhciB2
aWV3Q2xhc3M7Ci0gICAgICAgICAgICB2YXIgdmlld0Z1bGxOYW1lOwotCi0gICAgICAgICAgICBp
ZiAocHJvcGVydHkgJiYgcHJvcGVydHkuZGF0YSAmJiBwcm9wZXJ0eS5kYXRhLmlzUmVuZGVyRGF0
YSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eSA9ICdtYWluJzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGFp
bmVyID0gb3B0aW9ucy5kYXRhLnZpZXcuY29udGFpbmVyOwotCi0gICAgICAgICAgICBvdXRsZXRT
b3VyY2UgPSBvcHRpb25zLmRhdGEudmlldzsKLSAgICAgICAgICAgIHdoaWxlICghb3V0bGV0U291
cmNlLmdldCgndGVtcGxhdGUuaXNUb3AnKSkgewotICAgICAgICAgICAgICAgIG91dGxldFNvdXJj
ZSA9IG91dGxldFNvdXJjZS5nZXQoJ19wYXJlbnRWaWV3Jyk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIHByb3ZpZGUgY29udHJvbGxlciBvdmVycmlkZQotICAgICAgICAgICAgdmll
d05hbWUgPSBvcHRpb25zLmhhc2gudmlldzsKLQotICAgICAgICAgICAgaWYgKHZpZXdOYW1lKSB7
Ci0gICAgICAgICAgICAgICAgdmlld0Z1bGxOYW1lID0gJ3ZpZXc6JyArIHZpZXdOYW1lOwotICAg
ICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVXNpbmcgYSBxdW90ZWxlc3MgdmlldyBwYXJhbWV0
ZXIgd2l0aCB7e291dGxldH19IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gcXVv
dGVkIHVzYWdlICd7e291dGxldCBcIiIgKyB2aWV3TmFtZSArICJcIn19LiIsIG9wdGlvbnMuaGFz
aFR5cGVzLnZpZXcgIT09ICdJRCcpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiVGhl
IHZpZXcgbmFtZSB5b3Ugc3VwcGxpZWQgJyIgKyB2aWV3TmFtZSArICInIGRpZCBub3QgcmVzb2x2
ZSB0byBhIHZpZXcuIiwgY29udGFpbmVyLmhhcyh2aWV3RnVsbE5hbWUpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmlld0NsYXNzID0gdmlld05hbWUgPyBjb250YWluZXIubG9va3Vw
RmFjdG9yeSh2aWV3RnVsbE5hbWUpIDogb3B0aW9ucy5oYXNoLnZpZXdDbGFzcyB8fCBPdXRsZXRW
aWV3OwotCi0gICAgICAgICAgICBvcHRpb25zLmRhdGEudmlldy5zZXQoJ291dGxldFNvdXJjZScs
IG91dGxldFNvdXJjZSk7Ci0gICAgICAgICAgICBvcHRpb25zLmhhc2guY3VycmVudFZpZXdCaW5k
aW5nID0gJ192aWV3Lm91dGxldFNvdXJjZS5fb3V0bGV0cy4nICsgcHJvcGVydHk7Ci0KLSAgICAg
ICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9IG9wdGlvbnMuaGVscGVyTmFtZSB8fCAnb3V0bGV0
JzsKLQotICAgICAgICAgICAgcmV0dXJuIHZpZXdIZWxwZXIuY2FsbCh0aGlzLCB2aWV3Q2xhc3Ms
IG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ub3V0bGV0SGVscGVy
ID0gb3V0bGV0SGVscGVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy1oYW5k
bGViYXJzL2hlbHBlcnMvcmVuZGVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXIt
bWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X3NldCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXItcm91dGlu
Zy9zeXN0ZW0vZ2VuZXJhdGVfY29udHJvbGxlciIsICJlbWJlci1oYW5kbGViYXJzL2V4dCIsICJl
bWJlci1oYW5kbGViYXJzL2hlbHBlcnMvdmlldyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBl
bmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5
N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIC8vIGFzc2VydCwgZGVwcmVjYXRlCi0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBl
bmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kzX18u
Z2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5NF9fLnNldDsKLSAgICAgICAgdmFy
IGNhbWVsaXplID0gX19kZXBlbmRlbmN5NV9fLmNhbWVsaXplOwotICAgICAgICB2YXIgZ2VuZXJh
dGVDb250cm9sbGVyRmFjdG9yeSA9IF9fZGVwZW5kZW5jeTZfXy5nZW5lcmF0ZUNvbnRyb2xsZXJG
YWN0b3J5OwotICAgICAgICB2YXIgZ2VuZXJhdGVDb250cm9sbGVyID0gX19kZXBlbmRlbmN5Nl9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoYW5kbGViYXJzR2V0ID0gX19kZXBlbmRlbmN5N19f
LmhhbmRsZWJhcnNHZXQ7Ci0gICAgICAgIHZhciB2aWV3SGVscGVyID0gX19kZXBlbmRlbmN5OF9f
LnZpZXdIZWxwZXI7Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ2FsbGluZyBgYHt7cmVuZGVyfX1gYCBmcm9tIHdp
dGhpbiBhIHRlbXBsYXRlIHdpbGwgaW5zZXJ0IGFub3RoZXIKLSAgICAgICAgICAgICAgdGVtcGxh
dGUgdGhhdCBtYXRjaGVzIHRoZSBwcm92aWRlZCBuYW1lLiBUaGUgaW5zZXJ0ZWQgdGVtcGxhdGUg
d2lsbAotICAgICAgICAgICAgICBhY2Nlc3MgaXRzIHByb3BlcnRpZXMgb24gaXRzIG93biBjb250
cm9sbGVyIChyYXRoZXIgdGhhbiB0aGUgY29udHJvbGxlcgotICAgICAgICAgICAgICBvZiB0aGUg
cGFyZW50IHRlbXBsYXRlKS4KLQotICAgICAgICAgICAgICBJZiBhIHZpZXcgY2xhc3Mgd2l0aCB0
aGUgc2FtZSBuYW1lIGV4aXN0cywgdGhlIHZpZXcgY2xhc3MgYWxzbyB3aWxsIGJlIHVzZWQuCi0K
LSAgICAgICAgICAgICAgTm90ZTogQSBnaXZlbiBjb250cm9sbGVyIG1heSBvbmx5IGJlIHVzZWQg
Km9uY2UqIGluIHlvdXIgYXBwIGluIHRoaXMgbWFubmVyLgotICAgICAgICAgICAgICBBIHNpbmds
ZXRvbiBpbnN0YW5jZSBvZiB0aGUgY29udHJvbGxlciB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4K
LQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgQXBwLk5hdmlnYXRpb25Db250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxl
ci5leHRlbmQoewotICAgICAgICAgICAgICAgIHdobzogIndvcmxkIgotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAg
ICAgICAgICAgICA8IS0tIG5hdmlnYXRpb24uaGJzIC0tPgotICAgICAgICAgICAgICBIZWxsbywg
e3t3aG99fS4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGBgaGFuZGVsYmFy
cwotICAgICAgICAgICAgICA8IS0tIGFwcGxpY2F0aW9uLmhicyAtLT4KLSAgICAgICAgICAgICAg
PGgxPk15IGdyZWF0IGFwcDwvaDE+Ci0gICAgICAgICAgICAgIHt7cmVuZGVyICJuYXZpZ2F0aW9u
In19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAg
ICAgICAgPGgxPk15IGdyZWF0IGFwcDwvaDE+Ci0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2Vt
YmVyLXZpZXcnPgotICAgICAgICAgICAgICAgIEhlbGxvLCB3b3JsZC4KLSAgICAgICAgICAgICAg
PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIE9wdGlvbmFsbHkgeW91
IG1heSBwcm92aWRlIGEgc2Vjb25kIGFyZ3VtZW50OiBhIHByb3BlcnR5IHBhdGgKLSAgICAgICAg
ICAgICAgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgbW9kZWxgIHByb3BlcnR5IG9mIHRoZSBj
b250cm9sbGVyLgotCi0gICAgICAgICAgICAgIElmIGEgYG1vZGVsYCBwcm9wZXJ0eSBwYXRoIGlz
IHNwZWNpZmllZCwgdGhlbiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUKLSAgICAgICAgICAgICAgY29u
dHJvbGxlciB3aWxsIGJlIGNyZWF0ZWQgYW5kIGB7e3JlbmRlcn19YCBjYW4gYmUgdXNlZCBtdWx0
aXBsZSB0aW1lcwotICAgICAgICAgICAgICB3aXRoIHRoZSBzYW1lIG5hbWUuCi0KLSAgICAgICAg
ICAgICBGb3IgZXhhbXBsZSBpZiB5b3UgaGFkIHRoaXMgYGF1dGhvcmAgdGVtcGxhdGUuCi0KLSAg
ICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdXRob3Ii
PgotICAgICAgICAgICAgV3JpdHRlbiBieSB7e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fS4KLSAg
ICAgICAgICAgIFRvdGFsIFBvc3RzOiB7e3Bvc3RDb3VudH19Ci0gICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICBZb3UgY291bGQgcmVuZGVyIGl0IGluc2lk
ZSB0aGUgYHBvc3RgIHRlbXBsYXRlIHVzaW5nIHRoZSBgcmVuZGVyYCBoZWxwZXIuCi0KLSAgICAg
ICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3QiPgotICAg
ICAgICAgICAgPGgxPnt7dGl0bGV9fTwvaDE+Ci0gICAgICAgICAgICA8ZGl2Pnt7Ym9keX19PC9k
aXY+Ci0gICAgICAgICAgICB7e3JlbmRlciAiYXV0aG9yIiBhdXRob3J9fQotICAgICAgICAgICAg
PC9kaXY+Ci0gICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCByZW5kZXIK
LSAgICAgICAgICAgICAgQGZvciBFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3Q/fSBj
b250ZXh0U3RyaW5nCi0gICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgICAg
ICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5nCi0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gcmVuZGVySGVscGVyKG5hbWUs
IGNvbnRleHRTdHJpbmcsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1
bWVudHMubGVuZ3RoOwotCi0gICAgICAgICAgICB2YXIgY29udGV4dFByb3ZpZGVkID0gbGVuZ3Ro
ID09PSAzLAotICAgICAgICAgICAgY29udGFpbmVyLCByb3V0ZXIsIGNvbnRyb2xsZXIsIHZpZXcs
IGNvbnRleHQsIGxvb2t1cE9wdGlvbnM7Ci0KLSAgICAgICAgICAgIGNvbnRhaW5lciA9IChvcHRp
b25zIHx8IGNvbnRleHRTdHJpbmcpLmRhdGEua2V5d29yZHMuY29udHJvbGxlci5jb250YWluZXI7
Ci0gICAgICAgICAgICByb3V0ZXIgPSBjb250YWluZXIubG9va3VwKCdyb3V0ZXI6bWFpbicpOwot
Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAyKSB7Ci0gICAgICAgICAgICAgICAgLy8gdXNl
IHRoZSBzaW5nbGV0b24gY29udHJvbGxlcgotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBjb250
ZXh0U3RyaW5nOwotICAgICAgICAgICAgICAgIGNvbnRleHRTdHJpbmcgPSB1bmRlZmluZWQ7Ci0g
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgY2FuIG9ubHkgdXNlIHRoZSB7e3JlbmRl
cn19IGhlbHBlciBvbmNlIHdpdGhvdXQgYSBtb2RlbCBvYmplY3QgYXMgaXRzIHNlY29uZCBhcmd1
bWVudCwgYXMgaW4ge3tyZW5kZXIgXCJwb3N0XCIgcG9zdH19LiIsICFyb3V0ZXIgfHwgIXJvdXRl
ci5fbG9va3VwQWN0aXZlVmlldyhuYW1lKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0
aCA9PT0gMykgewotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBjb250cm9sbGVyCi0g
ICAgICAgICAgICAgICAgY29udGV4dCA9IGhhbmRsZWJhcnNHZXQob3B0aW9ucy5jb250ZXh0c1sx
XSwgY29udGV4dFN0cmluZywgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJZb3UgbXVzdCBwYXNzIGEgdGVtcGxhdGVO
YW1lIHRvIHJlbmRlciIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBFbWJlci5kZXBy
ZWNhdGUoIlVzaW5nIGEgcXVvdGVsZXNzIHBhcmFtZXRlciB3aXRoIHt7cmVuZGVyfX0gaXMgZGVw
cmVjYXRlZC4gUGxlYXNlIHVwZGF0ZSB0byBxdW90ZWQgdXNhZ2UgJ3t7cmVuZGVyIFwiIiArIG5h
bWUgKyAiXCJ9fS4iLCBvcHRpb25zLnR5cGVzWzBdICE9PSAnSUQnKTsKLQotICAgICAgICAgICAg
Ly8gIyBsZWdhY3kgbmFtZXNwYWNlCi0gICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9c
Ly9nLCAnLicpOwotICAgICAgICAgICAgLy8gXCBsZWdhY3kgc2xhc2ggYXMgbmFtZXNwYWNlIHN1
cHBvcnQKLQotCi0gICAgICAgICAgICB2aWV3ID0gY29udGFpbmVyLmxvb2t1cCgndmlldzonICsg
bmFtZSkgfHwgY29udGFpbmVyLmxvb2t1cCgndmlldzpkZWZhdWx0Jyk7Ci0KLSAgICAgICAgICAg
IC8vIHByb3ZpZGUgY29udHJvbGxlciBvdmVycmlkZQotICAgICAgICAgICAgdmFyIGNvbnRyb2xs
ZXJOYW1lID0gb3B0aW9ucy5oYXNoLmNvbnRyb2xsZXIgfHwgbmFtZTsKLSAgICAgICAgICAgIHZh
ciBjb250cm9sbGVyRnVsbE5hbWUgPSAnY29udHJvbGxlcjonICsgY29udHJvbGxlck5hbWU7Ci0K
LSAgICAgICAgICAgIGlmIChvcHRpb25zLmhhc2guY29udHJvbGxlcikgewotICAgICAgICAgICAg
ICAgIEVtYmVyLmFzc2VydCgiVGhlIGNvbnRyb2xsZXIgbmFtZSB5b3Ugc3VwcGxpZWQgJyIgKyBj
b250cm9sbGVyTmFtZSArICInIGRpZCBub3QgcmVzb2x2ZSB0byBhIGNvbnRyb2xsZXIuIiwgY29u
dGFpbmVyLmhhcyhjb250cm9sbGVyRnVsbE5hbWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIHBhcmVudENvbnRyb2xsZXIgPSBvcHRpb25zLmRhdGEua2V5d29yZHMuY29udHJv
bGxlcjsKLQotICAgICAgICAgICAgLy8gY2hvb3NlIG5hbWUKLSAgICAgICAgICAgIGlmIChsZW5n
dGggPiAyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZhY3RvcnkgPSBjb250YWluZXIubG9va3Vw
RmFjdG9yeShjb250cm9sbGVyRnVsbE5hbWUpIHx8Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVD
b250cm9sbGVyRmFjdG9yeShjb250YWluZXIsIGNvbnRyb2xsZXJOYW1lLCBjb250ZXh0KTsKLQot
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBmYWN0b3J5LmNyZWF0ZSh7Ci0gICAgICAgICAg
ICAgICAgICAgIG1vZGVsOiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250
cm9sbGVyOiBwYXJlbnRDb250cm9sbGVyLAotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHBh
cmVudENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHZp
ZXcub25lKCd3aWxsRGVzdHJveUVsZW1lbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udHJvbGxlci5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250YWluZXIubG9v
a3VwKGNvbnRyb2xsZXJGdWxsTmFtZSkgfHwKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbnRy
b2xsZXIoY29udGFpbmVyLCBjb250cm9sbGVyTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBjb250
cm9sbGVyLnNldFByb3BlcnRpZXMoewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHBhcmVu
dENvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXI6IHBhcmVu
dENvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIHJvb3QgPSBvcHRpb25zLmNvbnRleHRzWzFdOwotCi0gICAgICAgICAgICBpZiAo
cm9vdCkgewotICAgICAgICAgICAgICAgIHZpZXcucmVnaXN0ZXJPYnNlcnZlcihyb290LCBjb250
ZXh0U3RyaW5nLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5z
ZXQoJ21vZGVsJywgaGFuZGxlYmFyc0dldChyb290LCBjb250ZXh0U3RyaW5nLCBvcHRpb25zKSk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlv
bnMuaGFzaC52aWV3TmFtZSA9IGNhbWVsaXplKG5hbWUpOwotCi0gICAgICAgICAgICB2YXIgdGVt
cGxhdGVOYW1lID0gJ3RlbXBsYXRlOicgKyBuYW1lOwotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJZb3UgdXNlZCBge3tyZW5kZXIgJyIgKyBuYW1lICsgIid9fWAsIGJ1dCAnIiArIG5hbWUgKyAi
JyBjYW4gbm90IGJlIGZvdW5kIGFzIGVpdGhlciBhIHRlbXBsYXRlIG9yIGEgdmlldy4iLCBjb250
YWluZXIuaGFzKCJ2aWV3OiIgKyBuYW1lKSB8fCBjb250YWluZXIuaGFzKHRlbXBsYXRlTmFtZSkg
fHwgb3B0aW9ucy5mbik7Ci0gICAgICAgICAgICBvcHRpb25zLmhhc2gudGVtcGxhdGUgPSBjb250
YWluZXIubG9va3VwKHRlbXBsYXRlTmFtZSk7Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuaGFzaC5j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgICAgICAgICAgaWYgKHJvdXRlciAmJiAhY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIHJvdXRlci5fY29ubmVjdEFjdGl2ZVZpZXcobmFtZSwg
dmlldyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMuaGVscGVyTmFtZSA9
IG9wdGlvbnMuaGVscGVyTmFtZSB8fCAoJ3JlbmRlciAiJyArIG5hbWUgKyAnIicpOwotCi0gICAg
ICAgICAgICB2aWV3SGVscGVyLmNhbGwodGhpcywgdmlldywgb3B0aW9ucyk7Ci0gICAgICAgIH0K
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmctaGFuZGxlYmFycy9oZWxwZXJzL3No
YXJlZCIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvYXJy
YXkiLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsICJlbWJlci1oYW5kbGViYXJz
L2V4dCIsICJlbWJlci1tZXRhbC91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZh
ciBtYXAgPSBfX2RlcGVuZGVuY3kyX18ubWFwOwotICAgICAgICB2YXIgQ29udHJvbGxlck1peGlu
ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBoYW5kbGViYXJzUmVz
b2x2ZSA9IF9fZGVwZW5kZW5jeTRfXy5yZXNvbHZlUGFyYW1zOwotICAgICAgICB2YXIgaGFuZGxl
YmFyc0dldCA9IF9fZGVwZW5kZW5jeTRfXy5oYW5kbGViYXJzR2V0OwotICAgICAgICB2YXIgdHlw
ZU9mID0gX19kZXBlbmRlbmN5NV9fLnR5cGVPZjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5k
ZW5jeTFfXy5nZXQ7Ci0KLSAgICAgICAgZnVuY3Rpb24gcm91dGVBcmdzKHRhcmdldFJvdXRlTmFt
ZSwgbW9kZWxzLCBxdWVyeVBhcmFtcykgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTsKLSAg
ICAgICAgICAgIGlmICh0eXBlT2YodGFyZ2V0Um91dGVOYW1lKSA9PT0gJ3N0cmluZycpIHsKLSAg
ICAgICAgICAgICAgICBhcmdzLnB1c2goJycgKyB0YXJnZXRSb3V0ZU5hbWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIG1vZGVscyk7Ci0gICAgICAg
ICAgICBhcmdzLnB1c2goewotICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFt
cyAKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgICAgIH0K
LQotICAgICAgICBfX2V4cG9ydHNfXy5yb3V0ZUFyZ3MgPSByb3V0ZUFyZ3M7Ci0gICAgICAgIGZ1
bmN0aW9uIGdldEFjdGl2ZVRhcmdldE5hbWUocm91dGVyKSB7Ci0gICAgICAgICAgICB2YXIgaGFu
ZGxlckluZm9zID0gcm91dGVyLmFjdGl2ZVRyYW5zaXRpb24gPwotICAgICAgICAgICAgcm91dGVy
LmFjdGl2ZVRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zIDoKLSAgICAgICAgICAgIHJvdXRl
ci5zdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlckluZm9zW2hh
bmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBv
cnRzX18uZ2V0QWN0aXZlVGFyZ2V0TmFtZSA9IGdldEFjdGl2ZVRhcmdldE5hbWU7Ci0gICAgICAg
IGZ1bmN0aW9uIHJlc29sdmVQYXJhbXMoY29udGV4dCwgcGFyYW1zLCBvcHRpb25zKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFwLmNhbGwocmVzb2x2ZVBhdGhzKGNvbnRleHQsIHBhcmFtcywgb3B0
aW9ucyksIGZ1bmN0aW9uKHBhdGgsIGkpIHsKLSAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0g
cGF0aCkgewotICAgICAgICAgICAgICAgICAgICAvLyBQYXJhbSB3YXMgc3RyaW5nL251bWJlciwg
bm90IGEgcGF0aCwgc28ganVzdCByZXR1cm4gcmF3IHN0cmluZy9udW1iZXIuCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWJhcnNHZXQoY29udGV4dCwgcGF0aCwgb3B0
aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZlUGFyYW1zID0gcmVzb2x2ZVBhcmFtczsKLSAgICAg
ICAgZnVuY3Rpb24gc3Rhc2hQYXJhbU5hbWVzKHJvdXRlciwgaGFuZGxlckluZm9zKSB7Ci0gICAg
ICAgICAgICBpZiAoaGFuZGxlckluZm9zLl9uYW1lc1N0YXNoZWQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaGVscGVyIGV4
aXN0cyBiZWNhdXNlIHJvdXRlci5qcy9yb3V0ZS1yZWNvZ25pemVyLmpzIGF3a3dhcmRseQotICAg
ICAgICAgICAgLy8ga2VlcHMgc2VwYXJhdGUgYSBoYW5kbGVySW5mbydzIGxpc3Qgb2YgcGFyYW1l
dGVyIG5hbWVzIGRlcGVuZGluZwotICAgICAgICAgICAgLy8gb24gd2hldGhlciBhIFVSTCB0cmFu
c2l0aW9uIG9yIG5hbWVkIHRyYW5zaXRpb24gaXMgaGFwcGVuaW5nLgotICAgICAgICAgICAgLy8g
SG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAg
dmFyIHRhcmdldFJvdXRlTmFtZSA9IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3MubGVuZ3RoLTFd
Lm5hbWU7Ci0gICAgICAgICAgICB2YXIgcmVjb2dIYW5kbGVycyA9IHJvdXRlci5yb3V0ZXIucmVj
b2duaXplci5oYW5kbGVyc0Zvcih0YXJnZXRSb3V0ZU5hbWUpOwotICAgICAgICAgICAgdmFyIGR5
bmFtaWNQYXJlbnQgPSBudWxsOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0g
aGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9zW2ldOwotICAgICAgICAgICAgICAgIHZhciBuYW1l
cyA9IHJlY29nSGFuZGxlcnNbaV0ubmFtZXM7Ci0KLSAgICAgICAgICAgICAgICBpZiAobmFtZXMu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGR5bmFtaWNQYXJlbnQgPSBoYW5kbGVySW5m
bzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBoYW5kbGVySW5mby5fbmFt
ZXMgPSBuYW1lczsKLQotICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IGhhbmRsZXJJbmZvLmhh
bmRsZXI7Ci0gICAgICAgICAgICAgICAgcm91dGUuX3N0YXNoTmFtZXMoaGFuZGxlckluZm8sIGR5
bmFtaWNQYXJlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVySW5mb3Mu
X25hbWVzU3Rhc2hlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5z
dGFzaFBhcmFtTmFtZXMgPSBzdGFzaFBhcmFtTmFtZXM7Ci0gICAgICAgIGZ1bmN0aW9uIHJlc29s
dmVQYXRocyhjb250ZXh0LCBwYXJhbXMsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciByZXNv
bHZlZCA9IGhhbmRsZWJhcnNSZXNvbHZlKGNvbnRleHQsIHBhcmFtcywgb3B0aW9ucyksCi0gICAg
ICAgICAgICB0eXBlcyA9IG9wdGlvbnMudHlwZXM7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXAu
Y2FsbChyZXNvbHZlZCwgZnVuY3Rpb24ob2JqZWN0LCBpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHR5cGVzW2ldID09PSAnSUQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bndyYXAo
b2JqZWN0LCBwYXJhbXNbaV0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICBmdW5jdGlvbiB1bndyYXAob2JqZWN0LCBwYXRoKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBhdGggPT09ICdjb250cm9sbGVyJykgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
Q29udHJvbGxlck1peGluLmRldGVjdChvYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB1bndyYXAoZ2V0KG9iamVjdCwgJ21vZGVsJyksIHBhdGggPyBwYXRoICsgJy5tb2RlbCcg
OiAnbW9kZWwnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5yZXNvbHZlUGF0aHMgPSByZXNvbHZlUGF0aHM7Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nIiwKLSAgICBbImVtYmVyLWhhbmRsZWJh
cnMiLCAiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1yb3V0aW5nL2V4dC9ydW5fbG9vcCIsICJl
bWJlci1yb3V0aW5nL2V4dC9jb250cm9sbGVyIiwgImVtYmVyLXJvdXRpbmcvZXh0L3ZpZXciLCAi
ZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9ub25l
X2xvY2F0aW9uIiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIsICJlbWJl
ci1yb3V0aW5nL2xvY2F0aW9uL2hpc3RvcnlfbG9jYXRpb24iLCAiZW1iZXItcm91dGluZy9sb2Nh
dGlvbi9hdXRvX2xvY2F0aW9uIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRy
b2xsZXIiLCAiZW1iZXItcm91dGluZy9zeXN0ZW0vY29udHJvbGxlcl9mb3IiLCAiZW1iZXItcm91
dGluZy9zeXN0ZW0vZHNsIiwgImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsICJlbWJlci1y
b3V0aW5nL3N5c3RlbS9yb3V0ZSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9f
LCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2Rl
cGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRl
bmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5
MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJp
Y3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyIFJvdXRpbmcKLQotICAgICAgICAg
ICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0g
ICAgICAgICAgICBAcmVxdWlyZXMgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgdmFyIEVtYmVySGFuZGxlYmFycyA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLQotICAgICAgICAv
LyBFUzZUT0RPOiBDbGVhbnVwIG1vZHVsZXMgd2l0aCBzaWRlLWVmZmVjdHMgYmVsb3cKLQotICAg
ICAgICB2YXIgRW1iZXJMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgTm9uZUxvY2F0aW9uID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBIYXNoTG9jYXRpb24gPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIEhpc3RvcnlMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgQXV0b0xvY2F0aW9uID0gX19kZXBlbmRlbmN5MTBfX1siZGVmYXVsdCJdOwotCi0g
ICAgICAgIHZhciBnZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5ID0gX19kZXBlbmRlbmN5MTFfXy5n
ZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5OwotICAgICAgICB2YXIgZ2VuZXJhdGVDb250cm9sbGVy
ID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY29udHJvbGxlckZv
ciA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJvdXRlckRTTCA9
IF9fZGVwZW5kZW5jeTEzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJvdXRlciA9IF9fZGVw
ZW5kZW5jeTE0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJvdXRlID0gX19kZXBlbmRlbmN5
MTVfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIEVtYmVyLkxvY2F0aW9uID0gRW1iZXJMb2NhdGlv
bjsKLSAgICAgICAgRW1iZXIuQXV0b0xvY2F0aW9uID0gQXV0b0xvY2F0aW9uOwotICAgICAgICBF
bWJlci5IYXNoTG9jYXRpb24gPSBIYXNoTG9jYXRpb247Ci0gICAgICAgIEVtYmVyLkhpc3RvcnlM
b2NhdGlvbiA9IEhpc3RvcnlMb2NhdGlvbjsKLSAgICAgICAgRW1iZXIuTm9uZUxvY2F0aW9uID0g
Tm9uZUxvY2F0aW9uOwotCi0gICAgICAgIEVtYmVyLmNvbnRyb2xsZXJGb3IgPSBjb250cm9sbGVy
Rm9yOwotICAgICAgICBFbWJlci5nZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5ID0gZ2VuZXJhdGVD
b250cm9sbGVyRmFjdG9yeTsKLSAgICAgICAgRW1iZXIuZ2VuZXJhdGVDb250cm9sbGVyID0gZ2Vu
ZXJhdGVDb250cm9sbGVyOwotICAgICAgICBFbWJlci5Sb3V0ZXJEU0wgPSBSb3V0ZXJEU0w7Ci0g
ICAgICAgIEVtYmVyLlJvdXRlciA9IFJvdXRlcjsKLSAgICAgICAgRW1iZXIuUm91dGUgPSBSb3V0
ZTsKLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXI7Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nL2V4dC9jb250cm9sbGVyIiwKLSAgICBbImVtYmVyLW1l
dGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X3NldCIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC91dGlscyIsICJl
bWJlci1tZXRhbC9tZXJnZSIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdf
XywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7
Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICAvLyBGRUFUVVJFUywgZGVwcmVjYXRlCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3ky
X18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAg
dmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5NF9fLmNvbXB1dGVkOwotICAgICAgICB2YXIgdHlw
ZU9mID0gX19kZXBlbmRlbmN5NV9fLnR5cGVPZjsKLSAgICAgICAgdmFyIG1ldGEgPSBfX2RlcGVu
ZGVuY3k1X18ubWV0YTsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBtYXAgPSBfX2RlcGVuZGVuY3k3X18ubWFwOwotCi0gICAgICAg
IHZhciBDb250cm9sbGVyTWl4aW4gPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1
bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQotICAgICAgICBDb250cm9sbGVyTWl4
aW4ucmVvcGVuKHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFuc2l0
aW9uIHRoZSBhcHBsaWNhdGlvbiBpbnRvIGFub3RoZXIgcm91dGUuIFRoZSByb3V0ZSBtYXkKLSAg
ICAgICAgICAgICAgICAgICAgYmUgZWl0aGVyIGEgc2luZ2xlIHJvdXRlIG9yIHJvdXRlIHBhdGg6
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnYmxvZ1Bvc3RzJyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nUG9zdHMucmVjZW50
RW50cmllcycpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAg
ICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVsIGZvciB0aGUgcm91dGUgaW4gcXVlc3Rpb24uIFRo
ZSBtb2RlbAotICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUg
VVJMIHVzaW5nIHRoZSBgc2VyaWFsaXplYCBob29rIG9mCi0gICAgICAgICAgICAgICAgICAgIHRo
ZSByb3V0ZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nUG9zdCcsIGFQb3N0
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgYSBs
aXRlcmFsIGlzIHBhc3NlZCAoc3VjaCBhcyBhIG51bWJlciBvciBhIHN0cmluZyksIGl0IHdpbGwK
LSAgICAgICAgICAgICAgICAgICAgYmUgdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyIGluc3RlYWQu
IEluIHRoaXMgY2FzZSwgdGhlIGBtb2RlbGAKLSAgICAgICAgICAgICAgICAgICAgaG9vayBvZiB0
aGUgcm91dGUgd2lsbCBiZSB0cmlnZ2VyZWQ6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0
ZSgnYmxvZ1Bvc3QnLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgTXVsdGlwbGUgbW9kZWxzIHdpbGwgYmUgYXBwbGllZCBsYXN0IHRvIGZpcnN0IHJl
Y3Vyc2l2ZWx5IHVwIHRoZQotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSB0cmVlLgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgQXBw
LlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNv
dXJjZSgnYmxvZ1Bvc3QnLCB7cGF0aDonOmJsb2dQb3N0SWQnfSwgZnVuY3Rpb24oKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ2Jsb2dDb21tZW50Jywge3BhdGg6ICc6
YmxvZ0NvbW1lbnRJZCd9KTsKLSAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIudHJhbnNpdGlv
blRvUm91dGUoJ2Jsb2dDb21tZW50JywgYVBvc3QsIGFDb21tZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgYUNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dDb21tZW50JywgMSwgMTMp
OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJdCBpcyBh
bHNvIHBvc3NpYmxlIHRvIHBhc3MgYSBVUkwgKGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggYQot
ICAgICAgICAgICAgICAgICAgICBgL2ApLiBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0aW5nIGFu
ZCBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kCi0gICAgICAgICAgICAgICAgICAgIHNob3VsZCByYXJl
bHkgYmUgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9S
b3V0ZSgnLycpOwotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9uVG9S
b3V0ZSgnL2Jsb2cvcG9zdC8xL2NvbW1lbnQvMTMnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgU2VlIGFsc28gW3JlcGxhY2VSb3V0ZV0oL2FwaS9jbGFz
c2VzL0VtYmVyLkNvbnRyb2xsZXJNaXhpbi5odG1sI21ldGhvZF9yZXBsYWNlUm91dGUpLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBy
b3V0ZSBvciBhIFVSTAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gey4uLk9iamVjdH0gbW9k
ZWxzIHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJlIHVzZWQKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUuCi0gICAgICAgICAgICAg
ICAgICAgIEBmb3IgRW1iZXIuQ29udHJvbGxlck1peGluCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgdHJhbnNpdGlvblRvUm91dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICB0cmFuc2l0aW9uVG9Sb3V0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGFy
Z2V0IG1heSBiZSBlaXRoZXIgYW5vdGhlciBjb250cm9sbGVyIG9yIGEgcm91dGVyCi0gICAgICAg
ICAgICAgICAgdmFyIHRhcmdldCA9IGdldCh0aGlzLCAndGFyZ2V0Jyk7Ci0gICAgICAgICAgICAg
ICAgdmFyIG1ldGhvZCA9IHRhcmdldC50cmFuc2l0aW9uVG9Sb3V0ZSB8fCB0YXJnZXQudHJhbnNp
dGlvblRvOwotICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1
bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBkZXByZWNhdGVkCi0gICAgICAgICAgICAgICAgICAgIEBmb3IgRW1iZXIuQ29udHJv
bGxlck1peGluCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdHJhbnNpdGlvblRvCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHJhbnNpdGlvblRvOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoInRyYW5zaXRpb25UbyBpcyBkZXByZWNh
dGVkLiBQbGVhc2UgdXNlIHRyYW5zaXRpb25Ub1JvdXRlLiIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnRyYW5zaXRpb25Ub1JvdXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNp
dGlvbiBpbnRvIGFub3RoZXIgcm91dGUgd2hpbGUgcmVwbGFjaW5nIHRoZSBjdXJyZW50IFVSTCwg
aWYgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCByZXBsYWNlIHRoZSBj
dXJyZW50IGhpc3RvcnkgZW50cnkgaW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgb25lLgotICAgICAg
ICAgICAgICAgICAgICBCZXNpZGUgdGhhdCwgaXQgaXMgaWRlbnRpY2FsIHRvIGB0cmFuc2l0aW9u
VG9Sb3V0ZWAgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJvdXRl
KCdibG9nUG9zdHMnKTsKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJv
dXRlKCdibG9nUG9zdHMucmVjZW50RW50cmllcycpOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVsIGZvciB0aGUg
cm91dGUgaW4gcXVlc3Rpb24uIFRoZSBtb2RlbAotICAgICAgICAgICAgICAgICAgICB3aWxsIGJl
IHNlcmlhbGl6ZWQgaW50byB0aGUgVVJMIHVzaW5nIHRoZSBgc2VyaWFsaXplYCBob29rIG9mCi0g
ICAgICAgICAgICAgICAgICAgIHRoZSByb3V0ZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgn
YmxvZ1Bvc3QnLCBhUG9zdCk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIElmIGEgbGl0ZXJhbCBpcyBwYXNzZWQgKHN1Y2ggYXMgYSBudW1iZXIgb3IgYSBz
dHJpbmcpLCBpdCB3aWxsCi0gICAgICAgICAgICAgICAgICAgIGJlIHRyZWF0ZWQgYXMgYW4gaWRl
bnRpZmllciBpbnN0ZWFkLiBJbiB0aGlzIGNhc2UsIHRoZSBgbW9kZWxgCi0gICAgICAgICAgICAg
ICAgICAgIGhvb2sgb2YgdGhlIHJvdXRlIHdpbGwgYmUgdHJpZ2dlcmVkOgotCi0gICAgICAgICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIu
cmVwbGFjZVJvdXRlKCdibG9nUG9zdCcsIDEpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBtb2RlbHMgd2lsbCBiZSBhcHBsaWVkIGxhc3Qg
dG8gZmlyc3QgcmVjdXJzaXZlbHkgdXAgdGhlCi0gICAgICAgICAgICAgICAgICAgIHJlc291cmNl
IHRyZWUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlc291cmNlKCdibG9nUG9zdCcsIHtwYXRoOic6YmxvZ1Bvc3RJZCd9LCBmdW5jdGlv
bigpewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYmxvZ0NvbW1lbnQn
LCB7cGF0aDogJzpibG9nQ29tbWVudElkJ30pOwotICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBhQ29udHJvbGxl
ci5yZXBsYWNlUm91dGUoJ2Jsb2dDb21tZW50JywgYVBvc3QsIGFDb21tZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJvdXRlKCdibG9nQ29tbWVudCcsIDEsIDEz
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSXQgaXMg
YWxzbyBwb3NzaWJsZSB0byBwYXNzIGEgVVJMIChhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIGEK
LSAgICAgICAgICAgICAgICAgICAgYC9gKS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyBh
bmQgZGVidWdnaW5nIHB1cnBvc2VzIGFuZAotICAgICAgICAgICAgICAgICAgICBzaG91bGQgcmFy
ZWx5IGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgYUNvbnRyb2xsZXIucmVwbGFjZVJvdXRl
KCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnL2Js
b2cvcG9zdC8xL2NvbW1lbnQvMTMnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRl
IG9yIGEgVVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMg
dGhlIG1vZGVsKHMpIG9yIGlkZW50aWZpZXIocykgdG8gYmUgdXNlZAotICAgICAgICAgICAgICAg
ICAgICB3aGlsZSB0cmFuc2l0aW9uaW5nIHRvIHRoZSByb3V0ZS4KLSAgICAgICAgICAgICAgICAg
ICAgQGZvciBFbWJlci5Db250cm9sbGVyTWl4aW4KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCByZXBsYWNlUm91dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXBsYWNl
Um91dGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIHRhcmdldCBtYXkgYmUgZWl0
aGVyIGFub3RoZXIgY29udHJvbGxlciBvciBhIHJvdXRlcgotICAgICAgICAgICAgICAgIHZhciB0
YXJnZXQgPSBnZXQodGhpcywgJ3RhcmdldCcpOwotICAgICAgICAgICAgICAgIHZhciBtZXRob2Qg
PSB0YXJnZXQucmVwbGFjZVJvdXRlIHx8IHRhcmdldC5yZXBsYWNlV2l0aDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZAot
ICAgICAgICAgICAgICAgICAgICBAZm9yIEVtYmVyLkNvbnRyb2xsZXJNaXhpbgotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHJlcGxhY2VXaXRoCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVy
LmRlcHJlY2F0ZSgicmVwbGFjZVdpdGggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZXBsYWNl
Um91dGUuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZVJvdXRlLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IHZhciBBTExfUEVSSU9EU19SRUdFWCA9IC9cLi9nOwotCi0KLSAgICAgICAgQ29udHJvbGxlck1p
eGluLnJlb3Blbih7Ci0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAg
IGxpc3RlbkZvclF1ZXJ5UGFyYW1DaGFuZ2VzKHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogWydxdWVyeVBhcmFtcycsICdfcENhY2hl
TWV0YSddLAotICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG51bGwsCi0KLSAgICAgICAgICAgIF9x
cERlbGVnYXRlOiBudWxsLAotICAgICAgICAgICAgX25vcm1hbGl6ZWRRdWVyeVBhcmFtczogY29t
cHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG0gPSBtZXRhKHRoaXMpOwot
ICAgICAgICAgICAgICAgIGlmIChtLnByb3RvICE9PSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnZXQobS5wcm90bywgJ19ub3JtYWxpemVkUXVlcnlQYXJhbXMnKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSB0aGlzLnF1
ZXJ5UGFyYW1zOwotICAgICAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy5fcXBNYXApIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zLl9xcE1hcDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcXBNYXAgPSBxdWVyeVBhcmFtcy5fcXBNYXAg
PSB7fTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBxdWVyeVBhcmFt
cy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRl
UXVlcnlQYXJhbURlc2NyaXB0b3JzKHF1ZXJ5UGFyYW1zW2ldLCBxcE1hcCk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHFwTWFwOwotICAgICAgICAgICAgfSks
Ci0KLSAgICAgICAgICAgIF9jYWNoZU1ldGE6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciBtID0gbWV0YSh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobS5wcm90
byAhPT0gdGhpcykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KG0ucHJvdG8sICdf
Y2FjaGVNZXRhJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGNh
Y2hlTWV0YSA9IHt9OwotICAgICAgICAgICAgICAgIHZhciBxcE1hcCA9IGdldCh0aGlzLCAnX25v
cm1hbGl6ZWRRdWVyeVBhcmFtcycpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4g
cXBNYXApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFxcE1hcC5oYXNPd25Qcm9wZXJ0eShw
cm9wKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgcXAgPSBxcE1hcFtwcm9wXTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHNjb3BlID0gcXAuc2NvcGU7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBwYXJ0czsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUgPT09ICdjb250
cm9sbGVyJykgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBbXTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlTWV0YVtwcm9wXSA9IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzOiBwYXJ0cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByb3ZpZGVkIGJ5IHJvdXRlIGlmICdtb2RlbCcgc2NvcGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlczogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
b3ZpZGVkIGJ5IHJvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogc2NvcGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICIiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmOiBnZXQodGhpcywgcHJvcCkKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVNZXRhOwotICAgICAgICAg
ICAgfSksCi0KLSAgICAgICAgICAgIF91cGRhdGVDYWNoZVBhcmFtczogZnVuY3Rpb24ocGFyYW1z
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhY2hlTWV0YSA9IGdldCh0aGlzLCAnX2NhY2hlTWV0
YScpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gY2FjaGVNZXRhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghY2FjaGVNZXRhLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcE1ldGEgPSBjYWNoZU1ldGFbcHJvcF07Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BNZXRhLnZhbHVlcyA9IHBhcmFtczsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgY2FjaGVLZXkgPSB0aGlzLl9jYWxjdWxhdGVDYWNoZUtleShwcm9wTWV0YS5w
cmVmaXgsIHByb3BNZXRhLnBhcnRzLCBwcm9wTWV0YS52YWx1ZXMpOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgY2FjaGUgPSB0aGlzLl9idWNrZXRDYWNoZTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHZhbHVlID0gY2FjaGUubG9va3VwKGNhY2hlS2V5LCBwcm9wLCBwcm9wTWV0YS5kZWYpOwot
Ci0gICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCBwcm9wLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3FwQ2hhbmdlZDogZnVuY3Rp
b24oY29udHJvbGxlciwgX3Byb3ApIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IF9wcm9w
LnN1YnN0cigwLCBfcHJvcC5sZW5ndGgtMyk7Ci0gICAgICAgICAgICAgICAgdmFyIGNhY2hlTWV0
YSA9IGdldChjb250cm9sbGVyLCAnX2NhY2hlTWV0YScpOwotICAgICAgICAgICAgICAgIHZhciBw
cm9wQ2FjaGUgPSBjYWNoZU1ldGFbcHJvcF07Ci0gICAgICAgICAgICAgICAgdmFyIGNhY2hlS2V5
ID0gY29udHJvbGxlci5fY2FsY3VsYXRlQ2FjaGVLZXkocHJvcENhY2hlLnByZWZpeCB8fCAiIiwg
cHJvcENhY2hlLnBhcnRzLCBwcm9wQ2FjaGUudmFsdWVzKTsKLSAgICAgICAgICAgICAgICB2YXIg
dmFsdWUgPSBnZXQoY29udHJvbGxlciwgcHJvcCk7Ci0KLSAgICAgICAgICAgICAgICAvLyAxLiBV
cGRhdGUgbW9kZWwtZGVwIGNhY2hlCi0gICAgICAgICAgICAgICAgY29udHJvbGxlci5fYnVja2V0
Q2FjaGUuc3Rhc2goY2FjaGVLZXksIHByb3AsIHZhbHVlKTsKLQotICAgICAgICAgICAgICAgIC8v
IDIuIE5vdGlmeSBhIGRlbGVnYXRlIChlLmcuIHRvIGZpcmUgYSBxcCB0cmFuc2l0aW9uKQotICAg
ICAgICAgICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRyb2xsZXIuX3FwRGVsZWdhdGU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGVnYXRl
KGNvbnRyb2xsZXIsIHByb3ApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIF9jYWxjdWxhdGVDYWNoZUtleTogZnVuY3Rpb24ocHJlZml4LCBfcGFydHMs
IHZhbHVlcykgewotICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IF9wYXJ0cyB8fCBbXSwgc3Vm
Zml4ZXMgPSAiIjsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFydHMu
bGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBw
YXJ0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KHZhbHVlcywgcGFy
dCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1ZmZpeGVzICs9ICI6OiIgKyBwYXJ0ICsgIjoiICsg
dmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXgg
KyBzdWZmaXhlcy5yZXBsYWNlKEFMTF9QRVJJT0RTX1JFR0VYLCAnLScpOwotICAgICAgICAgICAg
fQotICAgICAgICB9KTsKLQotCi0gICAgICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVRdWVyeVBhcmFt
RGVzY3JpcHRvcnMoX2Rlc2MsIGFjY3VtKSB7Ci0gICAgICAgICAgICB2YXIgZGVzYyA9IF9kZXNj
LCB0bXA7Ci0gICAgICAgICAgICBpZiAodHlwZU9mKGRlc2MpID09PSAnc3RyaW5nJykgewotICAg
ICAgICAgICAgICAgIHRtcCA9IHt9OwotICAgICAgICAgICAgICAgIHRtcFtkZXNjXSA9IHsKLSAg
ICAgICAgICAgICAgICAgICAgYXM6IG51bGwgCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICBkZXNjID0gdG1wOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gZGVzYykgewotICAgICAgICAgICAgICAgIGlmICghZGVzYy5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2luZ2xlRGVzYyA9IGRlc2Nba2V5XTsKLSAgICAgICAg
ICAgICAgICBpZiAodHlwZU9mKHNpbmdsZURlc2MpID09PSAnc3RyaW5nJykgewotICAgICAgICAg
ICAgICAgICAgICBzaW5nbGVEZXNjID0gewotICAgICAgICAgICAgICAgICAgICAgICAgYXM6IHNp
bmdsZURlc2MgCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdG1wID0gYWNjdW1ba2V5XSB8fCB7Ci0gICAgICAgICAgICAgICAgICAg
IGFzOiBudWxsLAotICAgICAgICAgICAgICAgICAgICBzY29wZTogJ21vZGVsJyAKLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgIG1lcmdlKHRtcCwgc2luZ2xlRGVzYyk7Ci0KLSAg
ICAgICAgICAgICAgICBhY2N1bVtrZXldID0gdG1wOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gbGlzdGVuRm9yUXVlcnlQYXJhbUNoYW5nZXMoY29udHJvbGxl
cikgewotICAgICAgICAgICAgdmFyIHFwTWFwID0gZ2V0KGNvbnRyb2xsZXIsICdfbm9ybWFsaXpl
ZFF1ZXJ5UGFyYW1zJyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHFwTWFwKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFxcE1hcC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgY29udHJvbGxlci5hZGRPYnNlcnZlcihwcm9wICsgJy5bXScsIGNvbnRyb2xsZXIsIGNvbnRy
b2xsZXIuX3FwQ2hhbmdlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAg
IF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBDb250cm9sbGVyTWl4aW47Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1yb3V0aW5nL2V4dC9ydW5fbG9vcCIsCi0gICAgWyJlbWJlci1tZXRhbC9y
dW5fbG9vcCJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXykgewotICAgICAgICAidXNl
IHN0cmljdCI7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBz
dWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gQWRkIGEg
bmV3IG5hbWVkIHF1ZXVlIGFmdGVyIHRoZSAnYWN0aW9ucycgcXVldWUgKHdoZXJlIFJTVlAgcHJv
bWlzZXMKLSAgICAgICAgLy8gcmVzb2x2ZSksIHdoaWNoIGlzIHVzZWQgaW4gcm91dGVyIHRyYW5z
aXRpb25zIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkKLSAgICAgICAgLy8gbG9hZGluZyBzdGF0ZSBl
bnRyeSBpZiBhbGwgY29udGV4dCBwcm9taXNlcyByZXNvbHZlIG9uIHRoZQotICAgICAgICAvLyAn
YWN0aW9ucycgcXVldWUgZmlyc3QuCi0KLSAgICAgICAgdmFyIHF1ZXVlcyA9IHJ1bi5xdWV1ZXM7
Ci0gICAgICAgIHJ1bi5fYWRkUXVldWUoJ3JvdXRlclRyYW5zaXRpb25zJywgJ2FjdGlvbnMnKTsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmcvZXh0L3ZpZXciLAotICAgIFsiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci1tZXRhbC9ydW5fbG9vcCIsICJlbWJlci12aWV3cy92aWV3cy92aWV3IiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZh
ciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRl
bmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlclZpZXcgPSBfX2RlcGVuZGVuY3k0
X19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQot
ICAgICAgICBFbWJlclZpZXcucmVvcGVuKHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFNldHMgdGhlIHByaXZhdGUgYF9vdXRsZXRzYCBvYmplY3Qgb24gdGhlIHZpZXcu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbml0Ci0gICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNldCh0
aGlzLCAnX291dGxldHMnLCB7fSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBNYW51
YWxseSBmaWxsIGFueSBvZiBhIHZpZXcncyBge3tvdXRsZXR9fWAgYXJlYXMgd2l0aCB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgc3VwcGxpZWQgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICB2YXIgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ0NoaWxkIHZpZXc6IHt7
b3V0bGV0ICJtYWluIn19ICcpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgbXlWaWV3ID0gTXlWaWV3LmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAg
ICBteVZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGh0
bWwgZm9yIG15VmlldyBub3cgbG9va3MgbGlrZToKLSAgICAgICAgICAgICAgICAgICAgLy8gPGRp
diBpZD0iZW1iZXIyMjgiIGNsYXNzPSJlbWJlci12aWV3Ij5DaGlsZCB2aWV3OiA8L2Rpdj4KLQot
ICAgICAgICAgICAgICAgICAgICB2YXIgRm9vVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCc8
aDE+Rm9vPC9oMT4gJykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBmb29WaWV3ID0gRm9vVmlldy5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
bXlWaWV3LmNvbm5lY3RPdXRsZXQoJ21haW4nLCBmb29WaWV3KTsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGh0bWwgZm9yIG15VmlldyBub3cgbG9va3MgbGlrZToKLSAgICAgICAgICAgICAg
ICAgICAgLy8gPGRpdiBpZD0iZW1iZXIyMjgiIGNsYXNzPSJlbWJlci12aWV3Ij5DaGlsZCB2aWV3
OgotICAgICAgICAgICAgICAgICAgICAvLyAgIDxkaXYgaWQ9ImVtYmVyMjM0IiBjbGFzcz0iZW1i
ZXItdmlldyI+PGgxPkZvbzwvaDE+IDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAvLyA8L2Rp
dj4KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
Y29ubmVjdE91dGxldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gIHtTdHJpbmd9IG91dGxl
dE5hbWUgQSB1bmlxdWUgbmFtZSBmb3IgdGhlIG91dGxldAotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0gIHtPYmplY3R9IHZpZXcgICAgICAgQW4gRW1iZXIuVmlldwotICAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBjb25uZWN0T3V0bGV0OiBmdW5jdGlvbihvdXRsZXROYW1lLCB2
aWV3KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0aW9ucykg
ewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcGVuZGluZ0Rpc2Nvbm5lY3Rpb25z
W291dGxldE5hbWVdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9oYXNFcXVpdmFsZW50VmlldyhvdXRsZXROYW1lLCB2aWV3KSkgewotICAgICAgICAgICAg
ICAgICAgICB2aWV3LmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBvdXRsZXRzID0gZ2V0KHRoaXMs
ICdfb3V0bGV0cycpOwotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBnZXQodGhpcywg
J2NvbnRhaW5lcicpOwotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSBjb250YWluZXIgJiYg
Y29udGFpbmVyLmxvb2t1cCgncm91dGVyOm1haW4nKTsKLSAgICAgICAgICAgICAgICB2YXIgcmVu
ZGVyZWROYW1lID0gZ2V0KHZpZXcsICdyZW5kZXJlZE5hbWUnKTsKLQotICAgICAgICAgICAgICAg
IHNldChvdXRsZXRzLCBvdXRsZXROYW1lLCB2aWV3KTsKLQotICAgICAgICAgICAgICAgIGlmIChy
b3V0ZXIgJiYgcmVuZGVyZWROYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRlci5fY29u
bmVjdEFjdGl2ZVZpZXcocmVuZGVyZWROYW1lLCB2aWV3KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRGV0
ZXJtaW5lcyBpZiB0aGUgdmlldyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYnkgY2hlY2tpbmcg
aWYKLSAgICAgICAgICAgICAgICAgICAgdGhlIHZpZXcgaGFzIHRoZSBzYW1lIGNvbnN0cnVjdG9y
LCB0ZW1wbGF0ZSwgYW5kIGNvbnRleHQgYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZpZXcg
aW4gdGhlIGBfb3V0bGV0c2Agb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2hhc0VxdWl2YWxlbnRWaWV3Ci0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSAge1N0cmluZ30gb3V0bGV0TmFtZSBUaGUgbmFtZSBvZiB0aGUg
b3V0bGV0IHdlIGFyZSBjaGVja2luZwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gIHtPYmpl
Y3R9IHZpZXcgICAgICAgQW4gRW1iZXIuVmlldwotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtCb29sZWFufQotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfaGFzRXF1aXZh
bGVudFZpZXc6IGZ1bmN0aW9uKG91dGxldE5hbWUsIHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZXhpc3RpbmdWaWV3ID0gZ2V0KHRoaXMsICdfb3V0bGV0cy4nICsgb3V0bGV0TmFtZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVmlldyAmJgotICAgICAgICAgICAgICAgIGV4
aXN0aW5nVmlldy5jb25zdHJ1Y3RvciA9PT0gdmlldy5jb25zdHJ1Y3RvciAmJgotICAgICAgICAg
ICAgICAgIGV4aXN0aW5nVmlldy5nZXQoJ3RlbXBsYXRlJykgPT09IHZpZXcuZ2V0KCd0ZW1wbGF0
ZScpICYmCi0gICAgICAgICAgICAgICAgZXhpc3RpbmdWaWV3LmdldCgnY29udGV4dCcpID09PSB2
aWV3LmdldCgnY29udGV4dCcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFJlbW92ZXMgYW4gb3V0bGV0IGZyb20gdGhlIHZpZXcuCi0KLSAg
ICAgICAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21w
aWxlKCdDaGlsZCB2aWV3OiB7e291dGxldCAibWFpbiJ9fSAnKQotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG15VmlldyA9IE15Vmlldy5jcmVhdGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgbXlWaWV3LmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIG15VmlldydzIGh0bWw6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxkaXYg
aWQ9ImVtYmVyMjI4IiBjbGFzcz0iZW1iZXItdmlldyI+Q2hpbGQgdmlldzogPC9kaXY+Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIEZvb1ZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgnPGgx
PkZvbzwvaDE+ICcpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgZm9vVmlldyA9IEZvb1ZpZXcuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG15
Vmlldy5jb25uZWN0T3V0bGV0KCdtYWluJywgZm9vVmlldyk7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIG15VmlldydzIGh0bWw6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxkaXYgaWQ9ImVtYmVy
MjI4IiBjbGFzcz0iZW1iZXItdmlldyI+Q2hpbGQgdmlldzoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICA8ZGl2IGlkPSJlbWJlcjIzNCIgY2xhc3M9ImVtYmVyLXZpZXciPjxoMT5Gb288L2gxPiA8
L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgLy8gPC9kaXY+Ci0KLSAgICAgICAgICAgICAgICAg
ICAgbXlWaWV3LmRpc2Nvbm5lY3RPdXRsZXQoJ21haW4nKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gbXlWaWV3J3MgaHRtbDoKLSAgICAgICAgICAgICAgICAgICAgLy8gPGRpdiBpZD0iZW1iZXIy
MjgiIGNsYXNzPSJlbWJlci12aWV3Ij5DaGlsZCB2aWV3OiA8L2Rpdj4KLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkaXNjb25uZWN0T3V0bGV0
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSAge1N0cmluZ30gb3V0bGV0TmFtZSBUaGUgbmFt
ZSBvZiB0aGUgb3V0bGV0IHRvIGJlIHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZGlzY29ubmVjdE91dGxldDogZnVuY3Rpb24ob3V0bGV0TmFtZSkgewotICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0Rpc2Nvbm5lY3Rpb25zKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0aW9ucyA9IHt9OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nRGlzY29ubmVjdGlvbnNbb3V0bGV0
TmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIHJ1bi5vbmNlKHRoaXMsICdfZmluaXNoRGlz
Y29ubmVjdGlvbnMnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBHZXRzIGFuIG91dGxldCB0aGF0IGlzIHBlbmRpbmcgZGlzY29ubmVjdGlv
biBhbmQgdGhlbgotICAgICAgICAgICAgICAgICAgICBudWxsaWZ5cyB0aGUgb2JqZWN0IG9uIHRo
ZSBgX291dGxldGAgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgX2ZpbmlzaERpc2Nvbm5lY3Rpb25zCi0gICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIF9maW5pc2hEaXNjb25uZWN0aW9uczogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIAotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIF9vdXRsZXRzIHdpbGwgYmUgZ29uZSBhbnl3YXkKLSAgICAgICAg
ICAgICAgICB2YXIgb3V0bGV0cyA9IGdldCh0aGlzLCAnX291dGxldHMnKTsKLSAgICAgICAgICAg
ICAgICB2YXIgcGVuZGluZ0Rpc2Nvbm5lY3Rpb25zID0gdGhpcy5fcGVuZGluZ0Rpc2Nvbm5lY3Rp
b25zOwotICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0aW9ucyA9IG51bGw7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBvdXRsZXROYW1lIGluIHBlbmRpbmdEaXNjb25u
ZWN0aW9ucykgewotICAgICAgICAgICAgICAgICAgICBzZXQob3V0bGV0cywgb3V0bGV0TmFtZSwg
bnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJWaWV3OwotICAgIH0pOwotICAg
IGRlZmluZSgiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiLAotICAgIFsiZW1iZXItbWV0YWwv
Y29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlf
c2V0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICAvLyBkZXByZWNhdGUsIGFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRl
bmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXJvdXRpbmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIEVtYmVyLkxvY2F0aW9uIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvcnJlY3Qg
aW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgICAgICAgdGhlIGBsb2NhdGlvbmAgQVBJLgotCi0g
ICAgICAgICAgICAgICMjIEltcGxlbWVudGF0aW9ucwotCi0gICAgICAgICAgICAgIFlvdSBjYW4g
cGFzcyBhbiBpbXBsZW1lbnRhdGlvbiBuYW1lIChgaGFzaGAsIGBoaXN0b3J5YCwgYG5vbmVgKSB0
byBmb3JjZSBhCi0gICAgICAgICAgICAgIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gdG8gYmUg
dXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLgotCi0gICAgICAgICAgICAgICMjIyBIYXNoTG9jYXRp
b24KLQotICAgICAgICAgICAgICBVc2luZyBgSGFzaExvY2F0aW9uYCByZXN1bHRzIGluIFVSTHMg
d2l0aCBhIGAjYCAoaGFzaCBzaWduKSBzZXBhcmF0aW5nIHRoZQotICAgICAgICAgICAgICBzZXJ2
ZXIgc2lkZSBVUkwgcG9ydGlvbiBvZiB0aGUgVVJMIGZyb20gdGhlIHBvcnRpb24gdGhhdCBpcyB1
c2VkIGJ5IEVtYmVyLgotICAgICAgICAgICAgICBUaGlzIHJlbGllcyB1cG9uIHRoZSBgaGFzaGNo
YW5nZWAgZXZlbnQgZXhpc3RpbmcgaW4gdGhlIGJyb3dzZXIuCi0KLSAgICAgICAgICAgICAgRXhh
bXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5S
b3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bv
c3RzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCduZXcnKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
QXBwLlJvdXRlci5yZW9wZW4oewotICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnaGFzaCcKLSAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMg
d2lsbCByZXN1bHQgaW4gYSBwb3N0cy5uZXcgdXJsIG9mIGAvIy9wb3N0cy9uZXdgLgotCi0gICAg
ICAgICAgICAgICMjIyBIaXN0b3J5TG9jYXRpb24KLQotICAgICAgICAgICAgICBVc2luZyBgSGlz
dG9yeUxvY2F0aW9uYCByZXN1bHRzIGluIFVSTHMgdGhhdCBhcmUgaW5kaXN0aW5ndWlzaGFibGUg
ZnJvbSBhCi0gICAgICAgICAgICAgIHN0YW5kYXJkIFVSTC4gVGhpcyByZWxpZXMgdXBvbiB0aGUg
YnJvd3NlcidzIGBoaXN0b3J5YCBBUEkuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3RzJywgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCduZXcnKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgQXBwLlJvdXRlci5y
ZW9wZW4oewotICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnaGlzdG9yeScKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMgd2lsbCByZXN1
bHQgaW4gYSBwb3N0cy5uZXcgdXJsIG9mIGAvcG9zdHMvbmV3YC4KLQotICAgICAgICAgICAgICBL
ZWVwIGluIG1pbmQgdGhhdCB5b3VyIHNlcnZlciBtdXN0IHNlcnZlIHRoZSBFbWJlciBhcHAgYXQg
YWxsIHRoZSByb3V0ZXMgeW91Ci0gICAgICAgICAgICAgIGRlZmluZS4KLQotICAgICAgICAgICAg
ICAjIyMgQXV0b0xvY2F0aW9uCi0KLSAgICAgICAgICAgICAgVXNpbmcgYEF1dG9Mb2NhdGlvbmAs
IHRoZSByb3V0ZXIgd2lsbCB1c2UgdGhlIGJlc3QgTG9jYXRpb24gY2xhc3Mgc3VwcG9ydGVkIGJ5
Ci0gICAgICAgICAgICAgIHRoZSBicm93c2VyIGl0IGlzIHJ1bm5pbmcgaW4uCi0KLSAgICAgICAg
ICAgICAgQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHRoZSBgaGlzdG9yeWAgQVBJIHdpbGwgdXNlIGBI
aXN0b3J5TG9jYXRpb25gLCB0aG9zZSB0aGF0Ci0gICAgICAgICAgICAgIGRvIG5vdCwgYnV0IHN0
aWxsIHN1cHBvcnQgdGhlIGBoYXNoY2hhbmdlYCBldmVudCB3aWxsIHVzZSBgSGFzaExvY2F0aW9u
YCwgYW5kCi0gICAgICAgICAgICAgIGluIHRoZSByYXJlIGNhc2UgbmVpdGhlciBpcyBzdXBwb3J0
ZWQgd2lsbCB1c2UgYE5vbmVMb2NhdGlvbmAuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZToKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFw
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3RzJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCduZXcnKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgQXBwLlJvdXRl
ci5yZW9wZW4oewotICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYXV0bycKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMgd2lsbCByZXN1
bHQgaW4gYSBwb3N0cy5uZXcgdXJsIG9mIGAvcG9zdHMvbmV3YCBmb3IgbW9kZXJuIGJyb3dzZXJz
IHRoYXQKLSAgICAgICAgICAgICAgc3VwcG9ydCB0aGUgYGhpc3RvcnlgIGFwaSBvciBgLyMvcG9z
dHMvbmV3YCBmb3Igb2xkZXIgb25lcywgbGlrZSBJbnRlcm5ldAotICAgICAgICAgICAgICBFeHBs
b3JlciA5IGFuZCBiZWxvdy4KLQotICAgICAgICAgICAgICBXaGVuIGEgdXNlciB2aXNpdHMgYSBs
aW5rIHRvIHlvdXIgYXBwbGljYXRpb24sIHRoZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0gICAg
ICAgICAgICAgIHVwZ3JhZGVkIG9yIGRvd25ncmFkZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGBMb2Nh
dGlvbmAgY2xhc3MsIHdpdGggdGhlIFVSTAotICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCBhY2Nv
cmRpbmdseSwgaWYgbmVlZGVkLgotCi0gICAgICAgICAgICAgIEtlZXAgaW4gbWluZCB0aGF0IHNp
bmNlIHNvbWUgb2YgeW91ciB1c2VycyB3aWxsIHVzZSBgSGlzdG9yeUxvY2F0aW9uYCwgeW91cgot
ICAgICAgICAgICAgICBzZXJ2ZXIgbXVzdCBzZXJ2ZSB0aGUgRW1iZXIgYXBwIGF0IGFsbCB0aGUg
cm91dGVzIHlvdSBkZWZpbmUuCi0KLSAgICAgICAgICAgICAgIyMjIE5vbmVMb2NhdGlvbgotCi0g
ICAgICAgICAgICAgIFVzaW5nIGBOb25lTG9jYXRpb25gIGNhdXNlcyBFbWJlciB0byBub3Qgc3Rv
cmUgdGhlIGFwcGxpY2F0aW9ucyBVUkwgc3RhdGUKLSAgICAgICAgICAgICAgaW4gdGhlIGFjdHVh
bCBVUkwuIFRoaXMgaXMgZ2VuZXJhbGx5IHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMsIGFuZCBp
cyBvbmUKLSAgICAgICAgICAgICAgb2YgdGhlIGNoYW5nZXMgbWFkZSB3aGVuIGNhbGxpbmcgYEFw
cC5zZXR1cEZvclRlc3RpbmcoKWAuCi0KLSAgICAgICAgICAgICAgIyMgTG9jYXRpb24gQVBJCi0K
LSAgICAgICAgICAgICAgRWFjaCBsb2NhdGlvbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUg
dGhlIGZvbGxvd2luZyBtZXRob2RzOgotCi0gICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb246
IHJldHVybnMgdGhlIHN0cmluZyBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSBpbXBsZW1lbnRh
dGlvbi4KLSAgICAgICAgICAgICAgKiBnZXRVUkw6IHJldHVybnMgdGhlIGN1cnJlbnQgVVJMLgot
ICAgICAgICAgICAgICAqIHNldFVSTChwYXRoKTogc2V0cyB0aGUgY3VycmVudCBVUkwuCi0gICAg
ICAgICAgICAgICogcmVwbGFjZVVSTChwYXRoKTogcmVwbGFjZSB0aGUgY3VycmVudCBVUkwgKG9w
dGlvbmFsKS4KLSAgICAgICAgICAgICAgKiBvblVwZGF0ZVVSTChjYWxsYmFjayk6IHRyaWdnZXJz
IHRoZSBjYWxsYmFjayB3aGVuIHRoZSBVUkwgY2hhbmdlcy4KLSAgICAgICAgICAgICAgKiBmb3Jt
YXRVUkwodXJsKTogZm9ybWF0cyBgdXJsYCB0byBiZSBwbGFjZWQgaW50byBgaHJlZmAgYXR0cmli
dXRlLgotCi0gICAgICAgICAgICAgIENhbGxpbmcgc2V0VVJMIG9yIHJlcGxhY2VVUkwgd2lsbCBu
b3QgdHJpZ2dlciBvblVwZGF0ZVVSTCBjYWxsYmFja3MuCi0KLSAgICAgICAgICAgICAgQGNsYXNz
IExvY2F0aW9uCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAg
QHN0YXRpYwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9
IHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZGVwcmVjYXRl
ZCBpbiBmYXZvciBvZiB1c2luZyB0aGUgY29udGFpbmVyIHRvIGxvb2t1cCB0aGUgbG9jYXRpb24K
LSAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBhcyBkZXNpcmVkLgotCi0gICAgICAg
ICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgLy8gR2l2ZW4gYSBsb2NhdGlvbiByZWdpc3RlcmVkIGFz
IGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKCdsb2NhdGlv
bjpoaXN0b3J5LXRlc3QnLCBIaXN0b3J5VGVzdExvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAg
ICAgIC8vIFlvdSBjb3VsZCBjcmVhdGUgYSBuZXcgaW5zdGFuY2UgdmlhOgotICAgICAgICAgICAg
ICAgICAgIGNvbnRhaW5lci5sb29rdXAoJ2xvY2F0aW9uOmhpc3RvcnktdGVzdCcpOwotICAgICAg
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCi0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge09iamVjdH0gYW4gaW5zdGFuY2Ugb2YgYW4gaW1wbGVtZW50YXRpb24g
b2YgdGhlIGBsb2NhdGlvbmAgQVBJCi0gICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkIFVz
ZSB0aGUgY29udGFpbmVyIHRvIGxvb2t1cCB0aGUgbG9jYXRpb24gaW1wbGVtZW50YXRpb24gdGhh
dCB5b3UKLSAgICAgICAgICAgICAgICAgICAgbmVlZC4KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaW1wbGVtZW50YXRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGVtZW50YXRpb247Ci0g
ICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJFbWJlci5Mb2NhdGlvbi5jcmVhdGU6IHlvdSBt
dXN0IHNwZWNpZnkgYSAnaW1wbGVtZW50YXRpb24nIG9wdGlvbiIsICEhaW1wbGVtZW50YXRpb24p
OwotCi0gICAgICAgICAgICAgICAgdmFyIGltcGxlbWVudGF0aW9uQ2xhc3MgPSB0aGlzLmltcGxl
bWVudGF0aW9uc1tpbXBsZW1lbnRhdGlvbl07Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJFbWJlci5Mb2NhdGlvbi5jcmVhdGU6ICIgKyBpbXBsZW1lbnRhdGlvbiArICIgaXMgbm90IGEg
dmFsaWQgaW1wbGVtZW50YXRpb24iLCAhIWltcGxlbWVudGF0aW9uQ2xhc3MpOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uQ2xhc3MuY3JlYXRlLmFwcGx5KGltcGxlbWVu
dGF0aW9uQ2xhc3MsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdXNp
bmcgdGhlIGNvbnRhaW5lciB0byByZWdpc3RlciB0aGUKLSAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbiBpbXBsZW1lbnRhdGlvbiBhcyBkZXNpcmVkLgotCi0gICAgICAgICAgICAgICAgICAgRXhh
bXBsZToKLQotICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6
ICJoaXN0b3J5LXRlc3QtbG9jYXRpb24iLAotCi0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXBwbGljYXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICBhcHBsaWNhdGlvbi5yZWdpc3RlcignbG9jYXRpb246aGlzdG9yeS10ZXN0JywgSGlzdG9y
eVRlc3RMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcmVnaXN0ZXJJbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lCi0gICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGltcGxlbWVudGF0
aW9uIG9mIHRoZSBgbG9jYXRpb25gIEFQSQotICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVk
IFJlZ2lzdGVyIHlvdXIgY3VzdG9tIGxvY2F0aW9uIGltcGxlbWVudGF0aW9uIHdpdGggdGhlCi0g
ICAgICAgICAgICAgICAgICAgY29udGFpbmVyIGRpcmVjdGx5LgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIHJlZ2lzdGVySW1wbGVtZW50YXRpb246IGZ1bmN0aW9uKG5hbWUsIGlt
cGxlbWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCdVc2luZyB0
aGUgRW1iZXIuTG9jYXRpb24ucmVnaXN0ZXJJbXBsZW1lbnRhdGlvbiBpcyBubyBsb25nZXIgc3Vw
cG9ydGVkLiBSZWdpc3RlciB5b3VyIGN1c3RvbSBsb2NhdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRo
IHRoZSBjb250YWluZXIgaW5zdGVhZC4nLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlz
LmltcGxlbWVudGF0aW9uc1tuYW1lXSA9IGltcGxlbWVudGF0aW9uOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zOiB7fSwKLSAgICAgICAgICAgIF9sb2NhdGlv
bjogd2luZG93LmxvY2F0aW9uLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24uaGFzaGAgYnkgcGFyc2luZyBsb2NhdGlv
bi5ocmVmIHNpbmNlIGJyb3dzZXJzCi0gICAgICAgICAgICAgICAgICAgIGluY29uc2lzdGVudGx5
IFVSTC1kZWNvZGUgYGxvY2F0aW9uLmhhc2hgLgotCi0gICAgICAgICAgICAgICAgICAgIGh0dHBz
Oi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MzMwNAotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0SGFz
aAotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS40LjAKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBfZ2V0SGFzaDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIC8v
IEF1dG9Mb2NhdGlvbiBoYXMgaXQgYXQgX2xvY2F0aW9uLCBIYXNoTG9jYXRpb24gYXQgLmxvY2F0
aW9uLgotICAgICAgICAgICAgICAgIC8vIEJlaW5nIG5pY2UgYW5kIG5vdCBjaGFuZ2luZwotICAg
ICAgICAgICAgICAgIHZhciBocmVmID0gKHRoaXMuX2xvY2F0aW9uIHx8IHRoaXMubG9jYXRpb24p
LmhyZWY7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc2hJbmRleCA9IGhyZWYuaW5kZXhPZignIycp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGhhc2hJbmRleCA9PT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBocmVmLnN1YnN0cihoYXNoSW5kZXgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVy
LXJvdXRpbmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3Jl
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQi
LCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9o
aXN0b3J5X2xvY2F0aW9uIiwgImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIs
ICJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL25vbmVfbG9jYXRpb24iLCAiZXhwb3J0cyJdLAotICAg
IGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kz
X18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9f
ZGVwZW5kZW5jeTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8g
RkVBVFVSRVMKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAg
IHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotCi0gICAgICAgIHZhciBFbWJlckxvY2F0
aW9uID0gX19kZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBIaXN0b3J5TG9j
YXRpb24gPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEhhc2hMb2Nh
dGlvbiA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTm9uZUxvY2F0
aW9uID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcK
LSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEVtYmVyLkF1dG9M
b2NhdGlvbiB3aWxsIHNlbGVjdCB0aGUgYmVzdCBsb2NhdGlvbiBvcHRpb24gYmFzZWQgb2ZmIGJy
b3dzZXIKLSAgICAgICAgICAgICAgc3VwcG9ydCB3aXRoIHRoZSBwcmlvcml0eSBvcmRlcjogaGlz
dG9yeSwgaGFzaCwgbm9uZS4KLQotICAgICAgICAgICAgICBDbGVhbiBwdXNoU3RhdGUgcGF0aHMg
YWNjZXNzZWQgYnkgaGFzaGNoYW5nZS1vbmx5IGJyb3dzZXJzIHdpbGwgYmUgcmVkaXJlY3RlZAot
ICAgICAgICAgICAgICB0byB0aGUgaGFzaC1lcXVpdmFsZW50IGFuZCB2aWNlIHZlcnNhIHNvIGZ1
dHVyZSB0cmFuc2l0aW9ucyBhcmUgY29uc2lzdGVudC4KLQotICAgICAgICAgICAgICBLZWVwIGlu
IG1pbmQgdGhhdCBzaW5jZSBzb21lIG9mIHlvdXIgdXNlcnMgd2lsbCB1c2UgYEhpc3RvcnlMb2Nh
dGlvbmAsIHlvdXIKLSAgICAgICAgICAgICAgc2VydmVyIG11c3Qgc2VydmUgdGhlIEVtYmVyIGFw
cCBhdCBhbGwgdGhlIHJvdXRlcyB5b3UgZGVmaW5lLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBB
dXRvTG9jYXRpb24KLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAg
ICBAc3RhdGljCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJd
ID0gewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQot
ICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgcm91dGVyOm1haW4g
dG8ga25vdyB3aGV0aGVyIHRvIGNhbmNlbCB0aGUgcm91dGluZwotICAgICAgICAgICAgICAgICAg
ICBzZXR1cCBwcm9jZXNzLCB3aGljaCBpcyBuZWVkZWQgd2hpbGUgd2UgcmVkaXJlY3QgdGhlIGJy
b3dzZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNS4xCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSBjYW5jZWxSb3V0ZXJTZXR1cAotICAgICAgICAgICAgICAgICAgICBA
ZGVmYXVsdCBmYWxzZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhbmNlbFJv
dXRlclNldHVwOiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgV2lsbCBiZSBwcmUtcGVuZGVkIHRvIHBh
dGggdXBvbiBzdGF0ZSBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNS4x
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSByb290VVJMCi0gICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0ICcvJwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJvb3RV
Ukw6ICcvJywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0KLSAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWQgZm9yIG1vY2tpbmcgaW4gdGVzdHMKLQot
ICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjEKLSAgICAgICAgICAgICAgICAgICAgQHBy
b3BlcnR5IF93aW5kb3cKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgd2luZG93Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX3dpbmRvdzogd2luZG93LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAg
ICAgICBBdHRhY2hlZCBmb3IgbW9ja2luZyBpbiB0ZXN0cwotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB3aW5kb3cu
bG9jYXRpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfbG9jYXRpb246IHdp
bmRvdy5sb2NhdGlvbiwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBw
cml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQXR0YWNoZWQgZm9yIG1vY2tpbmcgaW4gdGVz
dHMKLQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjEKLSAgICAgICAgICAgICAgICAg
ICAgQHByb3BlcnR5IF9oaXN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHdpbmRv
dy5oaXN0b3J5Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2hpc3Rvcnk6IHdp
bmRvdy5oaXN0b3J5LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHBy
aXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBBdHRhY2hlZCBmb3IgbW9ja2luZyBpbiB0ZXN0
cwotCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgICAgICAgICAgICAg
ICBAcHJvcGVydHkgX0hpc3RvcnlMb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBFbWJlci5IaXN0b3J5TG9jYXRpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBfSGlzdG9yeUxvY2F0aW9uOiBIaXN0b3J5TG9jYXRpb24sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEF0dGFj
aGVkIGZvciBtb2NraW5nIGluIHRlc3RzCi0KLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEu
NS4xCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBfSGFzaExvY2F0aW9uCi0gICAgICAg
ICAgICAgICAgICAgIEBkZWZhdWx0IEVtYmVyLkhhc2hMb2NhdGlvbgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIF9IYXNoTG9jYXRpb246IEhhc2hMb2NhdGlvbiwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAg
ICAgICAgQXR0YWNoZWQgZm9yIG1vY2tpbmcgaW4gdGVzdHMKLQotICAgICAgICAgICAgICAgICAg
ICBAc2luY2UgMS41LjEKLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IF9Ob25lTG9jYXRp
b24KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuTm9uZUxvY2F0aW9uCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX05vbmVMb2NhdGlvbjogTm9uZUxvY2F0aW9u
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAg
ICAgICAgICAgICAgICAgICBSZXR1cm5zIGxvY2F0aW9uLm9yaWdpbiBvciBidWlsZHMgaXQgaWYg
ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IF9nZXRPcmlnaW4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0T3JpZ2lu
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9j
YXRpb247Ci0gICAgICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGxvY2F0aW9uLm9yaWdpbjsKLQot
ICAgICAgICAgICAgICAgIC8vIE9sZGVyIGJyb3dzZXJzLCBlc3BlY2lhbGx5IElFLCBkb24ndCBo
YXZlIG9yaWdpbgotICAgICAgICAgICAgICAgIGlmICghb3JpZ2luKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG9yaWdpbiA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3Ru
YW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wb3J0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4gKz0gJzonICsgbG9jYXRpb24ucG9ydDsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biBvcmlnaW47Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBXZSBhc3N1bWUgdGhhdCBp
ZiB0aGUgaGlzdG9yeSBvYmplY3QgaGFzIGEgcHVzaFN0YXRlIG1ldGhvZCwgdGhlIGhvc3Qgc2hv
dWxkCi0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgSGlzdG9yeUxvY2F0aW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgX2dldFN1cHBvcnRzSGlzdG9yeQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIF9nZXRTdXBwb3J0c0hpc3Rvcnk6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgICAgICAvLyBCb29zdGVkIGZyb20gTW9kZXJuaXpyOiBodHRwczovL2dpdGh1
Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvaGlz
dG9yeS5qcwotICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9jayBicm93c2VyIG9uIEFuZHJvaWQg
Mi4yICYgMi4zIHJldHVybnMgcG9zaXRpdmUgb24gaGlzdG9yeSBzdXBwb3J0Ci0gICAgICAgICAg
ICAgICAgLy8gVW5mb3J0dW5hdGVseSBzdXBwb3J0IGlzIHJlYWxseSBidWdneSBhbmQgdGhlcmUg
aXMgbm8gY2xlYW4gd2F5IHRvIGRldGVjdAotICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Z3Ms
IHNvIHdlIGZhbGwgYmFjayB0byBhIHVzZXIgYWdlbnQgc25pZmYgOigKLSAgICAgICAgICAgICAg
ICB2YXIgdXNlckFnZW50ID0gdGhpcy5fd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgQW5kcm9pZCAyLCBzdG9jayBicm93c2VyLCBh
bmQgbm90IENocm9tZSB3aGljaCBpZGVudGlmaWVzCi0gICAgICAgICAgICAgICAgLy8gaXRzZWxm
IGFzICdNb2JpbGUgU2FmYXJpJyBhcyB3ZWxsCi0gICAgICAgICAgICAgICAgaWYgKHVzZXJBZ2Vu
dC5pbmRleE9mKCdBbmRyb2lkIDInKSAhPT0gLTEgJiYKLSAgICAgICAgICAgICAgICB1c2VyQWdl
bnQuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJgotICAgICAgICAgICAgICAgIHVz
ZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biAhISh0aGlzLl9oaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIHRoaXMuX2hpc3RvcnkpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2
YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgSUU4IHJ1bm5pbmcgaW4gSUU3IGNvbXBhdGliaWxp
dHkgbW9kZSBnaXZlcyBmYWxzZSBwb3NpdGl2ZSwgc28gd2UgbXVzdCBhbHNvCi0gICAgICAgICAg
ICAgICAgICAgIGNoZWNrIGRvY3VtZW50TW9kZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIF9nZXRTdXBwb3J0c0hhc2hDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBfZ2V0U3VwcG9ydHNIYXNoQ2hhbmdlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIF93aW5kb3cgPSB0aGlzLl93aW5kb3c7Ci0gICAgICAgICAgICAgICAgdmFyIGRvY3Vt
ZW50TW9kZSA9IF93aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRNb2RlOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICgnb25oYXNoY2hhbmdlJyBpbiBfd2luZG93ICYmIChkb2N1bWVudE1vZGUgPT09
IHVuZGVmaW5lZCB8fCBkb2N1bWVudE1vZGUgPiA3ICkpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAg
ICAgICAgICAgUmVkaXJlY3RzIHRoZSBicm93c2VyIHVzaW5nIGxvY2F0aW9uLnJlcGxhY2UsIHBy
ZXBlbmRpbmcgdGhlIGxvY2F0aW4ub3JpZ2luCi0gICAgICAgICAgICAgICAgICAgIHRvIHByZXZl
bnQgcGhpc2hpbmcgYXR0ZW1wdHMKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9yZXBs
YWNlUGF0aAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9yZXBsYWNlUGF0aDog
ZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9sb2NhdGlvbi5yZXBsYWNl
KHRoaXMuX2dldE9yaWdpbigpICsgcGF0aCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNlIDEuNS4xCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2dldFJvb3RVUkwKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfZ2V0Um9vdFVSTDogZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3RVUkw7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAg
ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGBsb2NhdGlvbi5wYXRobmFtZWAsIG5v
cm1hbGl6ZWQgZm9yIElFIGluY29uc2lzdGVuY2llcy4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIF9nZXRQYXRoCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2dldFBh
dGg6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGF0aG5hbWUgPSB0aGlzLl9s
b2NhdGlvbi5wYXRobmFtZTsKLSAgICAgICAgICAgICAgICAvLyBWYXJpb3VzIHZlcnNpb25zIG9m
IElFL09wZXJhIGRvbid0IGFsd2F5cyByZXR1cm4gYSBsZWFkaW5nIHNsYXNoCi0gICAgICAgICAg
ICAgICAgaWYgKHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyBub3JtYWxpemVkIGxvY2F0aW9uLmhhc2ggYXMgYW4gYWxpYXMgdG8gRW1iZXIu
TG9jYXRpb24uX2dldEhhc2gKLQotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS41LjEKLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfZ2V0SGFzaAotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF9nZXRIYXNoOiBFbWJlckxvY2F0aW9uLl9nZXRIYXNoLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAg
ICAgICBSZXR1cm5zIGxvY2F0aW9uLnNlYXJjaAotCi0gICAgICAgICAgICAgICAgICAgIEBzaW5j
ZSAxLjUuMQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9nZXRRdWVyeQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIF9nZXRRdWVyeTogZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2g7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAg
ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBmdWxsIHBhdGhuYW1lIGluY2x1ZGluZyBxdWVyeSBh
bmQgaGFzaAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2dldEZ1bGxQYXRoCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2dldEZ1bGxQYXRoOiBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBhdGgoKSArIHRoaXMuX2dldFF1ZXJ5
KCkgKyB0aGlzLl9nZXRIYXNoKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBSZXR1
cm5zIHRoZSBjdXJyZW50IHBhdGggYXMgaXQgc2hvdWxkIGFwcGVhciBmb3IgSGlzdG9yeUxvY2F0
aW9uIHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgICBicm93c2Vycy4gVGhpcyBtYXkgdmVy
eSB3ZWxsIGRpZmZlciBmcm9tIHRoZSByZWFsIGN1cnJlbnQgcGF0aCAoZS5nLiBpZiBpdAotICAg
ICAgICAgICAgICAgICAgICBzdGFydHMgb2ZmIGFzIGEgaGFzaGVkIFVSTCkKLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIF9nZXRIaXN0b3J5UGF0aAotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIF9nZXRIaXN0b3J5UGF0aDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
ICAgIHZhciByb290VVJMID0gdGhpcy5fZ2V0Um9vdFVSTCgpOwotICAgICAgICAgICAgICAgIHZh
ciBwYXRoID0gdGhpcy5fZ2V0UGF0aCgpOwotICAgICAgICAgICAgICAgIHZhciBoYXNoID0gdGhp
cy5fZ2V0SGFzaCgpOwotICAgICAgICAgICAgICAgIHZhciBxdWVyeSA9IHRoaXMuX2dldFF1ZXJ5
KCk7Ci0gICAgICAgICAgICAgICAgdmFyIHJvb3RVUkxJbmRleCA9IHBhdGguaW5kZXhPZihyb290
VVJMKTsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVIYXNoLCBoYXNoUGFydHM7Ci0KLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1BhdGggJyArIHBhdGggKyAnIGRvZXMgbm90IHN0YXJ0
IHdpdGggdGhlIHByb3ZpZGVkIHJvb3RVUkwgJyArIHJvb3RVUkwsIHJvb3RVUkxJbmRleCA9PT0g
MCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBCeSBjb252ZW50aW9uLCBFbWJlci5qcyByb3V0ZXMg
dXNpbmcgSGFzaExvY2F0aW9uIGFyZSByZXF1aXJlZCB0byBzdGFydAotICAgICAgICAgICAgICAg
IC8vIHdpdGggYCMvYC4gQW55dGhpbmcgZWxzZSBzaG91bGQgTk9UIGJlIGNvbnNpZGVyZWQgYSBy
b3V0ZSBhbmQgc2hvdWxkCi0gICAgICAgICAgICAgICAgLy8gYmUgcGFzc2VkIHN0cmFpZ2h0IHRo
cm91Z2gsIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgaWYgKGhhc2gu
c3Vic3RyKDAsIDIpID09PSAnIy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGNv
dWxkIGJlIGV4dHJhIGhhc2ggc2VnbWVudHMgYWZ0ZXIgdGhlIHJvdXRlCi0gICAgICAgICAgICAg
ICAgICAgIGhhc2hQYXJ0cyA9IGhhc2guc3Vic3RyKDEpLnNwbGl0KCcjJyk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBmaXJzdCBvbmUgaXMgYWx3YXlzIHRoZSByb3V0ZSB1cmwKLSAgICAg
ICAgICAgICAgICAgICAgcm91dGVIYXNoID0gaGFzaFBhcnRzLnNoaWZ0KCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIHBhdGggYWxyZWFkeSBoYXMgYSB0cmFpbGluZyBzbGFzaCwg
cmVtb3ZlIHRoZSBvbmUKLSAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgaGFzaGVkIHJv
dXRlIHNvIHdlIGRvbid0IGRvdWJsZSB1cC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGgu
c2xpY2UoLTEpID09PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlSGFzaCA9
IHJvdXRlSGFzaC5zdWJzdHIoMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSAiZXhwZWN0ZWQiIGZpbmFsIG9yZGVyCi0gICAgICAg
ICAgICAgICAgICAgIHBhdGggKz0gcm91dGVIYXNoOwotICAgICAgICAgICAgICAgICAgICBwYXRo
ICs9IHF1ZXJ5OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNoUGFydHMubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoICs9ICcjJyArIGhhc2hQYXJ0cy5qb2luKCcj
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBwYXRoICs9IHF1ZXJ5OwotICAgICAgICAgICAgICAgICAgICBwYXRo
ICs9IGhhc2g7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBh
dGg7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHBh
dGggYXMgaXQgc2hvdWxkIGFwcGVhciBmb3IgSGFzaExvY2F0aW9uIHN1cHBvcnRlZAotICAgICAg
ICAgICAgICAgICAgICBicm93c2Vycy4gVGhpcyBtYXkgdmVyeSB3ZWxsIGRpZmZlciBmcm9tIHRo
ZSByZWFsIGN1cnJlbnQgcGF0aC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9nZXRI
YXNoUGF0aAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9nZXRIYXNoUGF0aDog
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHZhciByb290VVJMID0gdGhpcy5fZ2V0Um9v
dFVSTCgpOwotICAgICAgICAgICAgICAgIHZhciBwYXRoID0gcm9vdFVSTDsKLSAgICAgICAgICAg
ICAgICB2YXIgaGlzdG9yeVBhdGggPSB0aGlzLl9nZXRIaXN0b3J5UGF0aCgpOwotICAgICAgICAg
ICAgICAgIHZhciByb3V0ZVBhdGggPSBoaXN0b3J5UGF0aC5zdWJzdHIocm9vdFVSTC5sZW5ndGgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHJvdXRlUGF0aCAhPT0gJycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHJvdXRlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGVQYXRoID0gJy8nICsgcm91dGVQYXRoOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcGF0aCArPSAnIycgKyByb3V0ZVBhdGg7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2VsZWN0cyB0
aGUgYmVzdCBsb2NhdGlvbiBvcHRpb24gYmFzZWQgb2ZmIGJyb3dzZXIgc3VwcG9ydCBhbmQgcmV0
dXJucyBhbgotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiB0aGF0IExvY2F0aW9uIGNs
YXNzLgotCi0gICAgICAgICAgICAgICAgICAgIEBzZWUgRW1iZXIuQXV0b0xvY2F0aW9uCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgICAgICAgICAgIGlm
IChvcHRpb25zICYmIG9wdGlvbnMucm9vdFVSTCkgewotICAgICAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoJ3Jvb3RVUkwgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGZvcndhcmQgc2xhc2gg
ZS5nLiAiL2FwcC8iJywgb3B0aW9ucy5yb290VVJMLmNoYXJBdChvcHRpb25zLnJvb3RVUkwubGVu
Z3RoLTEpID09PSAnLycpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3RVUkwgPSBvcHRp
b25zLnJvb3RVUkw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGhp
c3RvcnlQYXRoLCBoYXNoUGF0aDsKLSAgICAgICAgICAgICAgICB2YXIgY2FuY2VsUm91dGVyU2V0
dXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB2YXIgaW1wbGVtZW50YXRpb25DbGFzcyA9IHRo
aXMuX05vbmVMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudFBhdGggPSB0aGlz
Ll9nZXRGdWxsUGF0aCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dldFN1cHBvcnRz
SGlzdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhpc3RvcnlQYXRoID0gdGhpcy5fZ2V0
SGlzdG9yeVBhdGgoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBzdXBwb3J0
IGhpc3RvcnkgcGF0aHMsIGxldCdzIGJlIHN1cmUgd2UncmUgdXNpbmcgdGhlbSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHN3aXRjaCB0aGUgbG9jYXRpb24gb3ZlciB0byBpdC4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXRoID09PSBoaXN0b3J5UGF0aCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25DbGFzcyA9IHRoaXMuX0hpc3RvcnlMb2Nh
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbmNlbFJvdXRlclNldHVwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3JlcGxhY2VQYXRoKGhpc3RvcnlQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nZXRTdXBwb3J0c0hhc2hDaGFuZ2UoKSkg
ewotICAgICAgICAgICAgICAgICAgICBoYXNoUGF0aCA9IHRoaXMuX2dldEhhc2hQYXRoKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQmUgc3VyZSB3ZSdyZSB1c2luZyBhIGhhc2hlZCBwYXRo
LCBvdGhlcndpc2UgbGV0J3Mgc3dpdGNoIG92ZXIgaXQgdG8gc28KLSAgICAgICAgICAgICAgICAg
ICAgLy8gd2Ugc3RhcnQgb2ZmIGNsZWFuIGFuZCBjb25zaXN0ZW50LiBXZSdsbCBjb3VudCBhbiBp
bmRleCBwYXRoIHdpdGggbm8KLSAgICAgICAgICAgICAgICAgICAgLy8gaGFzaCBhcyAiZ29vZCBl
bm91Z2giIGFzIHdlbGwuCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGF0aCA9PT0g
aGFzaFBhdGggfHwgKGN1cnJlbnRQYXRoID09PSAnLycgJiYgaGFzaFBhdGggPT09ICcvIy8nKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25DbGFzcyA9IHRoaXMuX0hh
c2hMb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE91ciBVUkwgaXNuJ3QgaW4gdGhlIGV4cGVjdGVkIGhhc2gtc3VwcG9ydGVk
IGZvcm1hdCwgc28gd2Ugd2FudCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2Vs
IHRoZSByb3V0ZXIgc2V0dXAgYW5kIHJlcGxhY2UgdGhlIFVSTCB0byBzdGFydCBvZmYgY2xlYW4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJvdXRlclNldHVwID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VQYXRoKGhhc2hQYXRoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBp
bXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uQ2xhc3MuY3JlYXRlLmFwcGx5KGltcGxlbWVu
dGF0aW9uQ2xhc3MsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FuY2VsUm91
dGVyU2V0dXApIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KGltcGxlbWVudGF0aW9uLCAnY2Fu
Y2VsUm91dGVyU2V0dXAnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gaW1wbGVtZW50YXRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2hhc2hfbG9jYXRpb24i
LAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJl
ci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiLCAi
ZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBnZXQg
PSBfX2RlcGVuZGVuY3kxX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Ml9f
LnNldDsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTRfXy5ndWlkRm9yOwotCi0gICAgICAgIHZh
ciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
RW1iZXJMb2NhdGlvbiA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIg
alF1ZXJ5ID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRp
bmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5I
YXNoTG9jYXRpb25gIGltcGxlbWVudHMgdGhlIGxvY2F0aW9uIEFQSSB1c2luZyB0aGUgYnJvd3Nl
cidzCi0gICAgICAgICAgICAgIGhhc2guIEF0IHByZXNlbnQsIGl0IHJlbGllcyBvbiBhIGBoYXNo
Y2hhbmdlYCBldmVudCBleGlzdGluZyBpbiB0aGUKLSAgICAgICAgICAgICAgYnJvd3Nlci4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgSGFzaExvY2F0aW9uCi0gICAgICAgICAgICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAg
ICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJPYmplY3QuZXh0ZW5k
KHsKLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9uOiAnaGFzaCcsCi0KLSAgICAgICAgICAgIGlu
aXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnbG9jYXRpb24nLCBn
ZXQodGhpcywgJ19sb2NhdGlvbicpIHx8IHdpbmRvdy5sb2NhdGlvbik7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAg
ICAgICAgICAgICAgICAgICBSZXR1cm5zIG5vcm1hbGl6ZWQgbG9jYXRpb24uaGFzaAotCi0gICAg
ICAgICAgICAgICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGdldEhhc2gKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRIYXNoOiBFbWJl
ckxvY2F0aW9uLl9nZXRIYXNoLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24uaGFzaGAsIG1pbnVzIHRoZSAnIycgYXQg
dGhlIGZyb250LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgZ2V0VVJMCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Z2V0VVJMOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRIYXNo
KCkuc3Vic3RyKDEpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFNldCB0aGUgYGxvY2F0aW9uLmhhc2hgIGFuZCByZW1lbWJlcnMgd2hhdCB3
YXMgc2V0LiBUaGlzIHByZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgIGBvblVwZGF0ZVVSTGAg
Y2FsbGJhY2tzIGZyb20gdHJpZ2dlcmluZyB3aGVuIHRoZSBoYXNoIHdhcyBzZXQgYnkKLSAgICAg
ICAgICAgICAgICAgICAgYEhhc2hMb2NhdGlvbmAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRVUkwKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBzZXRVUkw6IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICBnZXQodGhpcywg
J2xvY2F0aW9uJykuaGFzaCA9IHBhdGg7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdsYXN0
U2V0VVJMJywgcGF0aCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgVXNlcyBsb2NhdGlvbi5yZXBsYWNlIHRvIHVwZGF0ZSB0aGUgdXJsIHdp
dGhvdXQgYSBwYWdlIHJlbG9hZAotICAgICAgICAgICAgICAgICAgICBvciBoaXN0b3J5IG1vZGlm
aWNhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIHJlcGxhY2VVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHBhdGgg
e1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXBsYWNlVVJMOiBm
dW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdsb2NhdGlvbicpLnJl
cGxhY2UoJyMnICsgcGF0aCk7Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdsYXN0U2V0VVJM
JywgcGF0aCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGhhc2gg
Y2hhbmdlcy4gVGhlc2UKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzIHdpbGwgZXhlY3V0
ZSB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIGJhY2sgb3IgZm9yd2FyZAotICAgICAgICAgICAg
ICAgICAgICBidXR0b24sIGJ1dCBub3QgYWZ0ZXIgYHNldFVSTGAgaXMgaW52b2tlZC4KLQotICAg
ICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9u
VXBkYXRlVVJMCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBjYWxsYmFjayB7RnVuY3Rpb259
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgb25VcGRhdGVVUkw6IGZ1bmN0aW9u
KGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICAg
ICAgICAgIHZhciBndWlkID0gZ3VpZEZvcih0aGlzKTsKLQotICAgICAgICAgICAgICAgIGpRdWVy
eSh3aW5kb3cpLm9uKCdoYXNoY2hhbmdlLmVtYmVyLWxvY2F0aW9uLScgKyBndWlkLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHBhdGggPSBzZWxmLmdldFVSTCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdldChzZWxmLCAnbGFzdFNldFVSTCcpID09PSBwYXRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzZXQoc2VsZiwgJ2xhc3RTZXRVUkwnLCBudWxsKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socGF0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgVVJMLCBmb3JtYXRzIGl0IHRvIGJl
IHBsYWNlZCBpbnRvIHRoZSBwYWdlIGFzIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgb2YgYW4g
ZWxlbWVudCdzIGBocmVmYCBhdHRyaWJ1dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBp
cyB1c2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyB0aGUge3thY3Rpb259fSBoZWxwZXIKLSAg
ICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgYSBVUkwgYmFzZWQgb24gYW4gZXZlbnQuCi0K
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBmb3JtYXRVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHVybCB7U3RyaW5nfQotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvcm1hdFVSTDogZnVuY3Rpb24odXJsKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIHVybDsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDbGVhbnMgdXAgdGhlIEhhc2hMb2Nh
dGlvbiBldmVudCBsaXN0ZW5lci4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHdpbGxEZXN0cm95Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHZhciBndWlkID0gZ3VpZEZvcih0aGlzKTsKLQotICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5k
b3cpLm9mZignaGFzaGNoYW5nZS5lbWJlci1sb2NhdGlvbi0nICsgZ3VpZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9sb2Nh
dGlvbi9oaXN0b3J5X2xvY2F0aW9uIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXIt
bWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1t
ZXRhbC91dGlscyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItdmlld3Mv
c3lzdGVtL2pxdWVyeSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2Rl
cGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQi
XTsKLSAgICAgICAgLy8gRkVBVFVSRVMKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJf
Xy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2
YXIgZ3VpZEZvciA9IF9fZGVwZW5kZW5jeTRfXy5ndWlkRm9yOwotCi0gICAgICAgIHZhciBFbWJl
ck9iamVjdCA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgalF1ZXJ5
ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIHBvcHN0YXRlRmlyZWQgPSBmYWxzZTsKLSAgICAg
ICAgdmFyIHN1cHBvcnRzSGlzdG9yeVN0YXRlID0gd2luZG93Lmhpc3RvcnkgJiYgJ3N0YXRlJyBp
biB3aW5kb3cuaGlzdG9yeTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRW1iZXIuSGlz
dG9yeUxvY2F0aW9uIGltcGxlbWVudHMgdGhlIGxvY2F0aW9uIEFQSSB1c2luZyB0aGUgYnJvd3Nl
cidzCi0gICAgICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlIEFQSS4KLQotICAgICAgICAgICAg
ICBAY2xhc3MgSGlzdG9yeUxvY2F0aW9uCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIK
LSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAgICAqLwotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gRW1iZXJPYmplY3QuZXh0ZW5kKHsKLSAgICAg
ICAgICAgIGltcGxlbWVudGF0aW9uOiAnaGlzdG9yeScsCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnbG9jYXRpb24nLCBnZXQodGhp
cywgJ2xvY2F0aW9uJykgfHwgd2luZG93LmxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBzZXQo
dGhpcywgJ2Jhc2VVUkwnLCBqUXVlcnkoJ2Jhc2UnKS5hdHRyKCdocmVmJykgfHwgJycpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVzZWQg
dG8gc2V0IHN0YXRlIG9uIGZpcnN0IGNhbGwgdG8gc2V0VVJMCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbml0U3RhdGUKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbml0U3RhdGU6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHNldCh0aGlzLCAnaGlzdG9yeScsIGdldCh0aGlzLCAnaGlzdG9yeScpIHx8
IHdpbmRvdy5oaXN0b3J5KTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTdGF0ZSh0aGlz
LmZvcm1hdFVSTCh0aGlzLmdldFVSTCgpKSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgV2lsbCBiZSBwcmUtcGVuZGVkIHRvIHBhdGggdXBv
biBzdGF0ZSBjaGFuZ2UKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcm9vdFVSTAot
ICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCAnLycKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICByb290VVJMOiAnLycsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IGBsb2NhdGlvbi5wYXRobmFtZWAgd2l0aG91dCBg
cm9vdFVSTGAgb3IgYGJhc2VVUkxgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBnZXRVUkwKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB1cmwge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRV
Ukw6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciByb290VVJMID0gZ2V0KHRoaXMs
ICdyb290VVJMJyk7Ci0gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0KHRoaXMsICds
b2NhdGlvbicpOwotICAgICAgICAgICAgICAgIHZhciBwYXRoID0gbG9jYXRpb24ucGF0aG5hbWU7
Ci0gICAgICAgICAgICAgICAgdmFyIGJhc2VVUkwgPSBnZXQodGhpcywgJ2Jhc2VVUkwnKTsKLQot
ICAgICAgICAgICAgICAgIHJvb3RVUkwgPSByb290VVJMLnJlcGxhY2UoL1wvJC8sICcnKTsKLSAg
ICAgICAgICAgICAgICBiYXNlVVJMID0gYmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAnJyk7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgdXJsID0gcGF0aC5yZXBsYWNlKGJhc2VVUkwsICcnKS5yZXBsYWNl
KHJvb3RVUkwsICcnKTsKLQotCi0gICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IGxvY2F0aW9u
LnNlYXJjaCB8fCAnJzsKLSAgICAgICAgICAgICAgICB1cmwgKz0gc2VhcmNoOwotCi0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFVzZXMgYGhpc3RvcnkucHVzaFN0YXRlYCB0byB1cGRhdGUg
dGhlIHVybCB3aXRob3V0IGEgcGFnZSByZWxvYWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBy
aXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRVUkwKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBzZXRVUkw6IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUg
PSB0aGlzLmdldFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuZm9ybWF0VVJM
KHBhdGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5wYXRoICE9PSBw
YXRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKHBhdGgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBVc2VzIGBoaXN0b3J5LnJlcGxhY2VTdGF0ZWAgdG8gdXBkYXRlIHRoZSB1cmwg
d2l0aG91dCBhIHBhZ2UgcmVsb2FkCi0gICAgICAgICAgICAgICAgICAgIG9yIGhpc3RvcnkgbW9k
aWZpY2F0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVwbGFjZVVSTAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcGF0
aCB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VVUkw6
IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLmdldFN0
YXRlKCk7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuZm9ybWF0VVJMKHBhdGgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5wYXRoICE9PSBwYXRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZVN0YXRlKHBhdGgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
IEdldCB0aGUgY3VycmVudCBgaGlzdG9yeS5zdGF0ZWAuIENoZWNrcyBmb3IgaWYgYSBwb2x5Zmls
bCBpcwotICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGFuZCBpZiBzbyBmZXRjaGVzIHRoaXMu
X2hpc3RvcnlTdGF0ZS4gVGhlIHN0YXRlIHJldHVybmVkCi0gICAgICAgICAgICAgICAgICAgZnJv
bSBnZXRTdGF0ZSBtYXkgYmUgbnVsbCBpZiBhbiBpZnJhbWUgaGFzIGNoYW5nZWQgYSB3aW5kb3cn
cwotICAgICAgICAgICAgICAgICAgIGhpc3RvcnkuCi0KLSAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0U3RhdGUKLSAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHN0YXRlIHtPYmplY3R9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBzdXBw
b3J0c0hpc3RvcnlTdGF0ZSA/IGdldCh0aGlzLCAnaGlzdG9yeScpLnN0YXRlIDogdGhpcy5faGlz
dG9yeVN0YXRlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgUHVzaGVzIGEgbmV3IHN0YXRlLgotCi0gICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHB1c2hTdGF0ZQotICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcHVzaFN0YXRlOiBmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRl
ID0gewotICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoIAotICAgICAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgICAgICBnZXQodGhpcywgJ2hpc3RvcnknKS5wdXNoU3RhdGUoc3RhdGUs
IG51bGwsIHBhdGgpOwotCi0gICAgICAgICAgICAgICAgLy8gc3RvcmUgc3RhdGUgaWYgYnJvd3Nl
ciBkb2Vzbid0IHN1cHBvcnQgYGhpc3Rvcnkuc3RhdGVgCi0gICAgICAgICAgICAgICAgaWYgKCFz
dXBwb3J0c0hpc3RvcnlTdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaXN0b3J5
U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB1
c2VkIGZvciB3ZWJraXQgd29ya2Fyb3VuZAotICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3Vz
VVJMID0gdGhpcy5nZXRVUkwoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgIFJlcGxhY2VzIHRoZSBjdXJyZW50IHN0YXRlLgotCi0gICAgICAg
ICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlcGxhY2VT
dGF0ZQotICAgICAgICAgICAgICAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihwYXRoKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gewotICAgICAgICAgICAgICAgICAgICBwYXRoOiBw
YXRoIAotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBnZXQodGhpcywgJ2hp
c3RvcnknKS5yZXBsYWNlU3RhdGUoc3RhdGUsIG51bGwsIHBhdGgpOwotCi0gICAgICAgICAgICAg
ICAgLy8gc3RvcmUgc3RhdGUgaWYgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgYGhpc3Rvcnkuc3Rh
dGVgCi0gICAgICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0hpc3RvcnlTdGF0ZSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9oaXN0b3J5U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB1c2VkIGZvciB3ZWJraXQgd29ya2Fyb3VuZAotICAg
ICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVVJMID0gdGhpcy5nZXRVUkwoKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBh
IGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbmV2ZXIgdGhlIGJyb3dzZXIKLSAgICAgICAgICAg
ICAgICAgICAgaGlzdG9yeSBjaGFuZ2VzLCBpbmNsdWRpbmcgdXNpbmcgZm9yd2FyZCBhbmQgYmFj
ayBidXR0b25zLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2Qgb25VcGRhdGVVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGNh
bGxiYWNrIHtGdW5jdGlvbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvblVw
ZGF0ZVVSTDogZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9
IGd1aWRGb3IodGhpcyk7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotCi0gICAg
ICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlLmVtYmVyLWxvY2F0aW9uLScg
KyBndWlkLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbml0
aWFsIHBhZ2UgbG9hZCBwb3BzdGF0ZSBldmVudCBpbiBDaHJvbWUKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwb3BzdGF0ZUZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3BzdGF0
ZUZpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmdldFVSTCgp
ID09PSBzZWxmLl9wcmV2aW91c1VSTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxmLmdldFVSTCgpKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBVc2VkIHdoZW4gdXNpbmcgYHt7YWN0aW9ufX1gIGhlbHBlci4gIFRoZSB1cmwgaXMg
YWx3YXlzIGFwcGVuZGVkIHRvIHRoZSByb290VVJMLgotCi0gICAgICAgICAgICAgICAgICAgIEBw
cml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZm9ybWF0VVJMCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB1cmwge1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biBmb3JtYXR0ZWQgdXJsIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZm9ybWF0VVJMOiBmdW5jdGlvbih1cmwpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm9vdFVS
TCA9IGdldCh0aGlzLCAncm9vdFVSTCcpOwotICAgICAgICAgICAgICAgIHZhciBiYXNlVVJMID0g
Z2V0KHRoaXMsICdiYXNlVVJMJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodXJsICE9PSAnJykg
ewotICAgICAgICAgICAgICAgICAgICByb290VVJMID0gcm9vdFVSTC5yZXBsYWNlKC9cLyQvLCAn
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VVUkwgPSBiYXNlVVJMLnJlcGxhY2UoL1wvJC8s
ICcnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VVUkwubWF0Y2goL15cLy8pICYm
IHJvb3RVUkwubWF0Y2goL15cLy8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VVUkwgPSBi
YXNlVVJMLnJlcGxhY2UoL1wvJC8sICcnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gYmFzZVVSTCArIHJvb3RVUkwgKyB1cmw7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2xlYW5zIHVwIHRoZSBIaXN0
b3J5TG9jYXRpb24gZXZlbnQgbGlzdGVuZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3aWxsRGVzdHJveQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3IodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBqUXVl
cnkod2luZG93KS5vZmYoJ3BvcHN0YXRlLmVtYmVyLWxvY2F0aW9uLScgKyBndWlkKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1yb3V0aW5n
L2xvY2F0aW9uL25vbmVfbG9jYXRpb24iLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmpl
Y3QiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFfXy5nZXQ7Ci0gICAgICAgIHZh
ciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAg
ICAgICAgKi8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRW1iZXIuTm9uZUxvY2F0aW9u
IGRvZXMgbm90IGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXIuIEl0IGlzIHVzZWZ1bCBmb3IKLSAg
ICAgICAgICAgICAgdGVzdGluZywgb3Igd2hlbiB5b3UgbmVlZCB0byBtYW5hZ2Ugc3RhdGUgd2l0
aCB5b3VyIFJvdXRlciwgYnV0IHRlbXBvcmFyaWx5Ci0gICAgICAgICAgICAgIGRvbid0IHdhbnQg
aXQgdG8gbXVjayB3aXRoIHRoZSBVUkwgKGZvciBleGFtcGxlIHdoZW4geW91IGVtYmVkIHlvdXIK
LSAgICAgICAgICAgICAgYXBwbGljYXRpb24gaW4gYSBsYXJnZXIgcGFnZSkuCi0KLSAgICAgICAg
ICAgICAgQGNsYXNzIE5vbmVMb2NhdGlvbgotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVy
Ci0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgICAgICAgICAgKi8KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbjogJ25vbmUnLAotICAgICAgICAgICAgcGF0aDogJycsCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50
IHBhdGguCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBnZXRVUkwKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBw
YXRoCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0VVJMOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdwYXRoJyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBwYXRo
IGFuZCByZW1lbWJlcnMgd2hhdCB3YXMgc2V0LiBVc2luZyB0aGlzIG1ldGhvZAotICAgICAgICAg
ICAgICAgICAgICB0byBjaGFuZ2UgdGhlIHBhdGggd2lsbCBub3QgaW52b2tlIHRoZSBgdXBkYXRl
VVJMYCBjYWxsYmFjay4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHNldFVSTAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcGF0
aCB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNldFVSTDogZnVu
Y3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAncGF0aCcsIHBhdGgpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJl
Z2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBwYXRoIGNoYW5nZXMuIFRo
ZXNlCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcyB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUg
dXNlciBwcmVzc2VzIHRoZSBiYWNrIG9yIGZvcndhcmQKLSAgICAgICAgICAgICAgICAgICAgYnV0
dG9uLCBidXQgbm90IGFmdGVyIGBzZXRVUkxgIGlzIGludm9rZWQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBvblVwZGF0ZVVSTAot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0gY2FsbGJhY2sge0Z1bmN0aW9ufQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIG9uVXBkYXRlVVJMOiBmdW5jdGlvbihjYWxsYmFjaykg
ewotICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRo
ZSBwYXRoIGFuZCBjYWxscyB0aGUgYHVwZGF0ZVVSTGAgY2FsbGJhY2suCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBoYW5kbGVVUkwK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGNhbGxiYWNrIHtGdW5jdGlvbn0KLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBoYW5kbGVVUkw6IGZ1bmN0aW9uKHVybCkgewotICAg
ICAgICAgICAgICAgIHNldCh0aGlzLCAncGF0aCcsIHVybCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy51cGRhdGVDYWxsYmFjayh1cmwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgVVJMLCBmb3JtYXRzIGl0IHRvIGJlIHBsYWNl
ZCBpbnRvIHRoZSBwYWdlIGFzIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgb2YgYW4gZWxlbWVu
dCdzIGBocmVmYCBhdHRyaWJ1dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2Vk
LCBmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyB0aGUge3thY3Rpb259fSBoZWxwZXIKLSAgICAgICAg
ICAgICAgICAgICAgdG8gZ2VuZXJhdGUgYSBVUkwgYmFzZWQgb24gYW4gZXZlbnQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmb3Jt
YXRVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHVybCB7U3RyaW5nfQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHVybAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGZvcm1hdFVSTDogZnVuY3Rpb24odXJsKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhlIHJldHVybiB2YWx1ZSBpcyBub3Qgb3Zlcmx5IG1lYW5pbmdmdWwsIGJ1dCB3ZSBkbyBub3Qg
d2FudCB0byB0aHJvdwotICAgICAgICAgICAgICAgIC8vIGVycm9ycyB3aGVuIHRlc3QgY29kZSBy
ZW5kZXJzIHRlbXBsYXRlcyBjb250YWluaW5nIHt7YWN0aW9uIGhyZWY9dHJ1ZX19Ci0gICAgICAg
ICAgICAgICAgLy8gaGVscGVycy4KLSAgICAgICAgICAgICAgICByZXR1cm4gdXJsOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmcv
c3lzdGVtL2NhY2hlIiwKLSAgICBbImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5j
eTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJl
ck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5jYWNoZSA9IHt9OwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGhh
czogZnVuY3Rpb24oYnVja2V0S2V5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1Y2tldEtl
eSBpbiB0aGlzLmNhY2hlOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHN0YXNoOiBmdW5j
dGlvbihidWNrZXRLZXksIGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnVja2V0
ID0gdGhpcy5jYWNoZVtidWNrZXRLZXldOwotICAgICAgICAgICAgICAgIGlmICghYnVja2V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IHRoaXMuY2FjaGVbYnVja2V0S2V5XSA9IHt9
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWNrZXRba2V5XSA9IHZhbHVl
OwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGxvb2t1cDogZnVuY3Rpb24oYnVja2V0S2V5
LCBwcm9wLCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlz
LmNhY2hlOwotICAgICAgICAgICAgICAgIGlmICghKGJ1Y2tldEtleSBpbiBjYWNoZSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgdmFyIGJ1Y2tldCA9IGNhY2hlW2J1Y2tldEtleV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHByb3AgaW4gYnVja2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBidWNrZXRbcHJvcF07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgY2FjaGU6IG51bGwKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250cm9sbGVyX2ZvciIsCi0gICAgWyJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3Qi
OwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBz
dWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQotICAgICAgICAvKioKLQot
ICAgICAgICAgICAgICBGaW5kcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2UuCi0KLSAgICAgICAgICAg
ICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAbWV0aG9kIGNvbnRyb2xsZXJGb3IKLSAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJk
ZWZhdWx0Il0gPSBmdW5jdGlvbiBjb250cm9sbGVyRm9yKGNvbnRhaW5lciwgY29udHJvbGxlck5h
bWUsIGxvb2t1cE9wdGlvbnMpIHsKLSAgICAgICAgICAgIHJldHVybiBjb250YWluZXIubG9va3Vw
KCdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZSwgbG9va3VwT3B0aW9ucyk7Ci0gICAgICAg
IH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCIsCi0gICAg
WyJlbWJlci1tZXRhbC9jb3JlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFy
IEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEZFQVRVUkVT
LCBhc3NlcnQKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAg
ICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAgICAgICAgICAgKi8KLQotICAgICAg
ICBmdW5jdGlvbiBEU0wobmFtZSkgewotICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBuYW1lOwot
ICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gW107Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IERTTDsKLQotICAgICAgICBEU0wucHJvdG90eXBlID0gewotICAg
ICAgICAgICAgcm91dGU6IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIG9wdGlvbnMg
PT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25z
OwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucyA9IHt9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciB0eXBlID0gb3B0aW9ucy5yZXNldE5hbWVzcGFjZSA9PT0gdHJ1ZSA/ICdyZXNv
dXJjZScgOiAncm91dGUnOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiJ2Jhc2ljJyBj
YW5ub3QgYmUgdXNlZCBhcyBhICIgKyB0eXBlICsgIiBuYW1lLiIsIG5hbWUgIT09ICdiYXNpYycp
OwotCi0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGF0aCAhPT0gJ3N0cmlu
ZycpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXRoID0gIi8iICsgbmFtZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FuTmVzdCh0aGlzKSAmJiBv
cHRpb25zLnJlc2V0TmFtZXNwYWNlICE9PSB0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWUgPSB0aGlzLnBhcmVudCArICIuIiArIG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkc2wg
PSBuZXcgRFNMKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICByb3V0ZShkc2wsICdsb2FkaW5n
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRlKGRzbCwgJ2Vycm9yJywgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aDogIi9fdW51c2VkX2R1bW15X2Vycm9yX3BhdGhfcm91dGVfIiAr
IG5hbWUgKyAiLzplcnJvciIgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2suY2FsbChkc2wpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5wdXNoKG9wdGlvbnMucGF0aCwgbmFtZSwgZHNsLmdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChvcHRpb25z
LnBhdGgsIG5hbWUsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24odXJsLCBuYW1lLCBjYWxsYmFjaykgewotICAg
ICAgICAgICAgICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTsKLSAgICAgICAgICAgICAg
ICBpZiAodXJsID09PSAiIiB8fCB1cmwgPT09ICIvIiB8fCBwYXJ0c1twYXJ0cy5sZW5ndGgtMV0g
PT09ICJpbmRleCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBsaWNpdEluZGV4ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMu
cHVzaChbdXJsLCBuYW1lLCBjYWxsYmFja10pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgcmVzb3VyY2U6IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMsIGNhbGxiYWNrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIG9wdGlvbnMgPT09
ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zOwot
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge307Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucyA9IHt9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG9wdGlvbnMucmVzZXROYW1lc3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRoaXMu
cm91dGUobmFtZSwgb3B0aW9ucywgY2FsbGJhY2spOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBkc2xNYXRj
aGVzID0gdGhpcy5tYXRjaGVzOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGxpY2l0
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGUodGhpcywgImluZGV4IiwgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0aDogIi8iIAotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obWF0
Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkc2xNYXRjaGVz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRzbE1h
dGNoID0gZHNsTWF0Y2hlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaE9i
aiA9IG1hdGNoKGRzbE1hdGNoWzBdKS50byhkc2xNYXRjaFsxXSwgZHNsTWF0Y2hbMl0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBjYW5OZXN0KGRzbCkgewotICAgICAgICAgICAg
cmV0dXJuIGRzbC5wYXJlbnQgJiYgZHNsLnBhcmVudCAhPT0gJ2FwcGxpY2F0aW9uJzsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJvdXRlKGRzbCwgbmFtZSwgb3B0aW9ucykgewotICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgbXVzdCB1c2UgYHRoaXMucmVzb3VyY2VgIHRvIG5l
c3QiLCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyk7Ci0KLSAgICAgICAgICAgIG9wdGlv
bnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGF0
aCAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGggPSAiLyIgKyBu
YW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2FuTmVzdChkc2wpICYmIG9w
dGlvbnMucmVzZXROYW1lc3BhY2UgIT09IHRydWUpIHsKLSAgICAgICAgICAgICAgICBuYW1lID0g
ZHNsLnBhcmVudCArICIuIiArIG5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRz
bC5wdXNoKG9wdGlvbnMucGF0aCwgbmFtZSwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBE
U0wubWFwID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZhciBkc2wgPSBuZXcg
RFNMKCk7Ci0gICAgICAgICAgICBjYWxsYmFjay5jYWxsKGRzbCk7Ci0gICAgICAgICAgICByZXR1
cm4gZHNsOwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9z
eXN0ZW0vZ2VuZXJhdGVfY29udHJvbGxlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2
YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gTG9nZ2Vy
Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgaXNB
cnJheSA9IF9fZGVwZW5kZW5jeTNfXy5pc0FycmF5OwotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBHZW5lcmF0ZXMgYSBj
b250cm9sbGVyIGZhY3RvcnkKLQotICAgICAgICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJh
dGVkIGNvbnRyb2xsZXIgZmFjdG9yeSBpcyBkZXJpdmVkCi0gICAgICAgICAgICAgIGZyb20gdGhl
IGNvbnRleHQuIElmIHRoZSBjb250ZXh0IGlzIGFuIGFycmF5IGFuIGFycmF5IGNvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgaXMgZ2VuZXJhdGVkLCBpZiBhbiBvYmplY3QsIGFuIG9iamVjdCBjb250
cm9sbGVyIG90aGVyd2lzZSwgYSBiYXNpYwotICAgICAgICAgICAgICBjb250cm9sbGVyIGlzIGdl
bmVyYXRlZC4KLQotICAgICAgICAgICAgICBZb3UgY2FuIGN1c3RvbWl6ZSB5b3VyIGdlbmVyYXRl
ZCBjb250cm9sbGVycyBieSBkZWZpbmluZwotICAgICAgICAgICAgICBgQXBwLk9iamVjdENvbnRy
b2xsZXJgIG9yIGBBcHAuQXJyYXlDb250cm9sbGVyYC4KLQotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEBtZXRob2QgZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeQotICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgKi8KLQotICAgICAgICBmdW5jdGlvbiBn
ZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5KGNvbnRhaW5lciwgY29udHJvbGxlck5hbWUsIGNvbnRl
eHQpIHsKLSAgICAgICAgICAgIHZhciBGYWN0b3J5LCBmdWxsTmFtZSwgaW5zdGFuY2UsIG5hbWUs
IGZhY3RvcnlOYW1lLCBjb250cm9sbGVyVHlwZTsKLQotICAgICAgICAgICAgaWYgKGNvbnRleHQg
JiYgaXNBcnJheShjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJUeXBlID0g
J2FycmF5JzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCkgewotICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXJUeXBlID0gJ29iamVjdCc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXJUeXBlID0gJ2Jhc2ljJzsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZmFjdG9yeU5hbWUgPSAnY29udHJvbGxlcjonICsgY29udHJvbGxlclR5cGU7
Ci0KLSAgICAgICAgICAgIEZhY3RvcnkgPSBjb250YWluZXIubG9va3VwRmFjdG9yeShmYWN0b3J5
TmFtZSkuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBpc0dlbmVyYXRlZDogdHJ1ZSwKLSAgICAg
ICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiKGdlbmVyYXRlZCAiICsgY29udHJvbGxlck5hbWUgKyAiIGNvbnRyb2xsZXIpIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgZnVsbE5hbWUg
PSAnY29udHJvbGxlcjonICsgY29udHJvbGxlck5hbWU7Ci0KLSAgICAgICAgICAgIGNvbnRhaW5l
ci5yZWdpc3RlcihmdWxsTmFtZSwgRmFjdG9yeSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBGYWN0
b3J5OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZ2VuZXJhdGVDb250cm9sbGVy
RmFjdG9yeSA9IGdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnk7IC8qKgotICAgICAgICAgICAgICBH
ZW5lcmF0ZXMgYW5kIGluc3RhbnRpYXRlcyBhIGNvbnRyb2xsZXIuCi0KLSAgICAgICAgICAgICAg
VGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBjb250cm9sbGVyIGZhY3RvcnkgaXMgZGVyaXZlZAot
ICAgICAgICAgICAgICBmcm9tIHRoZSBjb250ZXh0LiBJZiB0aGUgY29udGV4dCBpcyBhbiBhcnJh
eSBhbiBhcnJheSBjb250cm9sbGVyCi0gICAgICAgICAgICAgIGlzIGdlbmVyYXRlZCwgaWYgYW4g
b2JqZWN0LCBhbiBvYmplY3QgY29udHJvbGxlciBvdGhlcndpc2UsIGEgYmFzaWMKLSAgICAgICAg
ICAgICAgY29udHJvbGxlciBpcyBnZW5lcmF0ZWQuCi0KLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAbWV0aG9kIGdlbmVyYXRlQ29udHJvbGxlcgotICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICovCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiBnZW5lcmF0ZUNvbnRyb2xs
ZXIoY29udGFpbmVyLCBjb250cm9sbGVyTmFtZSwgY29udGV4dCkgewotICAgICAgICAgICAgZ2Vu
ZXJhdGVDb250cm9sbGVyRmFjdG9yeShjb250YWluZXIsIGNvbnRyb2xsZXJOYW1lLCBjb250ZXh0
KTsKLSAgICAgICAgICAgIHZhciBmdWxsTmFtZSA9ICdjb250cm9sbGVyOicgKyBjb250cm9sbGVy
TmFtZTsKLSAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNvbnRhaW5lci5sb29rdXAoZnVsbE5h
bWUpOwotCi0gICAgICAgICAgICBpZiAoZ2V0KGluc3RhbmNlLCAnbmFtZXNwYWNlLkxPR19BQ1RJ
VkVfR0VORVJBVElPTicpKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmluZm8oImdl
bmVyYXRlZCAtPiAiICsgZnVsbE5hbWUsIHsKLSAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6
IGZ1bGxOYW1lIAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVt
YmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFs
L3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9nZXRfcHJvcGVydGllcyIsICJlbWJlci1tZXRh
bC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFsL2lzX25vbmUiLCAiZW1iZXItbWV0YWwv
Y29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZW1i
ZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItcnVudGltZS9rZXlzIiwgImVtYmVyLXJ1bnRpbWUv
Y29weSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXItcnVudGltZS9zeXN0
ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwgImVtYmVy
LXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRyb2xsZXIiLCAiZW1iZXItcm91dGluZy1oYW5k
bGViYXJzL2hlbHBlcnMvc2hhcmVkIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0
X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9f
ZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVu
ZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVu
Y3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2RlcGVuZGVuY3kx
N19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyBGRUFUVVJFUywgSywgQSwgZGVwcmVjYXRlLCBhc3NlcnQsIExvZ2dlcgotICAgICAg
ICB2YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgZ2V0ID0gX19kZXBlbmRlbmN5M19fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5k
ZW5jeTRfXy5zZXQ7Ci0gICAgICAgIHZhciBnZXRQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5NV9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5Nl9fLmZvckVh
Y2g7Ci0gICAgICAgIHZhciByZXBsYWNlID0gX19kZXBlbmRlbmN5Nl9fLnJlcGxhY2U7Ci0gICAg
ICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k3X18uaXNOb25lOwotICAgICAgICB2YXIgY29t
cHV0ZWQgPSBfX2RlcGVuZGVuY3k4X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9f
ZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5k
ZW5jeTEwX18uaXNBcnJheTsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTEwX18u
dHlwZU9mOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIga2V5cyA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLSAgICAgICAg
dmFyIGNvcHkgPSBfX2RlcGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjbGFz
c2lmeSA9IF9fZGVwZW5kZW5jeTE0X18uY2xhc3NpZnk7Ci0gICAgICAgIHZhciBmbXQgPSBfX2Rl
cGVuZGVuY3kxNF9fLmZtdDsKLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5
MTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQWN0aW9uSGFuZGxlciA9IF9fZGVwZW5kZW5j
eTE2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdlbmVyYXRlQ29udHJvbGxlciA9IF9fZGVw
ZW5kZW5jeTE3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHN0YXNoUGFyYW1OYW1lcyA9IF9f
ZGVwZW5kZW5jeTE4X18uc3Rhc2hQYXJhbU5hbWVzOwotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGUgYEVtYmVyLlJv
dXRlYCBjbGFzcyBpcyB1c2VkIHRvIGRlZmluZSBpbmRpdmlkdWFsIHJvdXRlcy4gUmVmZXIgdG8K
LSAgICAgICAgICAgICAgdGhlIFtyb3V0aW5nIGd1aWRlXShodHRwOi8vZW1iZXJqcy5jb20vZ3Vp
ZGVzL3JvdXRpbmcvKSBmb3IgZG9jdW1lbnRhdGlvbi4KLQotICAgICAgICAgICAgICBAY2xhc3Mg
Um91dGUKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0
ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuQWN0aW9uSGFuZGxl
cgotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIFJvdXRlID0gRW1iZXJPYmplY3QuZXh0ZW5k
KEFjdGlvbkhhbmRsZXIsIHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBleGl0Ci0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgZXhpdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5kZWFjdGl2YXRlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy50ZWFyZG93blZpZXdz
KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc2V0Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKGlzRXhpdGluZywgdHJh
bnNpdGlvbikgewotCi0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRy
b2xsZXI7Ci0gICAgICAgICAgICAgICAgY29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9IGdldCh0aGlz
LCAnX3FwLnN0YXRlcy5pbmFjdGl2ZScpOwotICAgICAgICAgICAgICAgIHRoaXMucmVzZXRDb250
cm9sbGVyKHRoaXMuY29udHJvbGxlciwgaXNFeGl0aW5nLCB0cmFuc2l0aW9uKTsKLQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBlbnRlcgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LmFjdGl2YXRlKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHZpZXcgdG8gdXNlIGJ5IGRlZmF1bHQgd2hlbiBy
ZW5kZXJpbmcgdGhpcyByb3V0ZXMgdGVtcGxhdGUuCi0KLSAgICAgICAgICAgICAgICAgICAgV2hl
biByZW5kZXJpbmcgYSB0ZW1wbGF0ZSwgdGhlIHJvdXRlIHdpbGwsIGJ5IGRlZmF1bHQsIGRldGVy
bWluZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgYW5kIHZpZXcgdG8gdXNlIGZy
b20gdGhlIG5hbWUgb2YgdGhlIHJvdXRlIGl0c2VsZi4gSWYgeW91IG5lZWQgdG8KLSAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIGEgc3BlY2lmaWMgdmlldywgc2V0IHRoaXMgcHJvcGVydHkuCi0K
LSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2VmdWwgd2hlbiBtdWx0aXBsZSByb3V0ZXMg
d291bGQgYmVuZWZpdCBmcm9tIHVzaW5nIHRoZSBzYW1lIHZpZXcKLSAgICAgICAgICAgICAgICAg
ICAgYmVjYXVzZSBpdCBkb2Vzbid0IHJlcXVpcmUgYSBjdXN0b20gYHJlbmRlclRlbXBsYXRlYCBt
ZXRob2QuIEZvciBleGFtcGxlLAotICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHJv
dXRlcyB3aWxsIGFsbCByZW5kZXIgdXNpbmcgdGhlIGBBcHAuUG9zdHNMaXN0Vmlld2AgdmlldzoK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICB2YXIgUG9z
dHNMaXN0ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICB2aWV3
TmFtZTogJ3Bvc3RzTGlzdCcKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgQXBwLlBvc3RzSW5kZXhSb3V0ZSA9IFBvc3RzTGlzdC5leHRlbmQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLlBvc3RzQXJjaGl2ZWRSb3V0ZSA9IFBvc3RzTGlzdC5leHRlbmQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3Bl
cnR5IHZpZXdOYW1lCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAg
ICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjQu
MAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHZpZXdOYW1lOiBudWxsLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBs
YXRlIHRvIHVzZSBieSBkZWZhdWx0IHdoZW4gcmVuZGVyaW5nIHRoaXMgcm91dGVzCi0gICAgICAg
ICAgICAgICAgICAgIHRlbXBsYXRlLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgc2lt
aWxhciB3aXRoIGB2aWV3TmFtZWAsIGJ1dCBpcyB1c2VmdWwgd2hlbiB5b3UganVzdCB3YW50IGEg
Y3VzdG9tCi0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIHdpdGhvdXQgYSB2aWV3LgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIHZhciBQb3N0c0xp
c3QgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRl
TmFtZTogJ3Bvc3RzL2xpc3QnCi0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgIEFwcC5Qb3N0c0luZGV4Um91dGUgPSBQb3N0c0xpc3QuZXh0ZW5kKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcC5Qb3N0c0FyY2hpdmVkUm91dGUgPSBQb3N0c0xpc3QuZXh0ZW5k
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9w
ZXJ0eSB0ZW1wbGF0ZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICAgQHNpbmNl
IDEuNC4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiBu
dWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2Yg
dGhlIGNvbnRyb2xsZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyByb3V0ZS4KLQotICAgICAgICAg
ICAgICAgICAgICBCeSBkZWZhdWx0LCBFbWJlciB3aWxsIGxvb2t1cCBhIHJvdXRlJ3MgY29udHJv
bGxlciB0aGF0IG1hdGNoZXMgdGhlIG5hbWUKLSAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJv
dXRlIChpLmUuIGBBcHAuUG9zdENvbnRyb2xsZXJgIGZvciBgQXBwLlBvc3RSb3V0ZWApLiBIb3dl
dmVyLAotICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd291bGQgbGlrZSB0byBkZWZpbmUgYSBz
cGVjaWZpYyBjb250cm9sbGVyIHRvIHVzZSwgeW91IGNhbiBkbyBzbwotICAgICAgICAgICAgICAg
ICAgICB1c2luZyB0aGlzIHByb3BlcnR5LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMg
dXNlZnVsIGluIG1hbnkgd2F5cywgYXMgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIHdpbGwgYmU6
Ci0KLSAgICAgICAgICAgICAgICAgICAgKiBwYXNzZWQgdG8gdGhlIGBzZXR1cENvbnRyb2xsZXJg
IG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgKiB1c2VkIGFzIHRoZSBjb250cm9sbGVyIGZv
ciB0aGUgdmlldyBiZWluZyByZW5kZXJlZCBieSB0aGUgcm91dGUuCi0gICAgICAgICAgICAgICAg
ICAgICogcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8gYGNvbnRyb2xsZXJGb3JgIGZvciB0aGUgcm91
dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGNvbnRyb2xsZXJOYW1lCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBudWxsCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGNvbnRyb2xsZXJOYW1lOiBudWxsLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGB3aWxsVHJhbnNpdGlvbmAgYWN0aW9uIGlzIGZp
cmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55Ci0gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRl
ZCB0cmFuc2l0aW9uIHdpdGggYSBgVHJhbnNpdGlvbmAgb2JqZWN0IGFzIHRoZSBzb2xlCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50LiBUaGlzIGFjdGlvbiBjYW4gYmUgdXNlZCBmb3IgYWJv
cnRpbmcsIHJlZGlyZWN0aW5nLAotICAgICAgICAgICAgICAgICAgICBvciBkZWNvcmF0aW5nIHRo
ZSB0cmFuc2l0aW9uIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91dGVzLgotCi0gICAgICAg
ICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIHByZXZlbnRpbmcgbmF2aWdhdGlvbiB3aGVu
IGEgZm9ybSBpcwotICAgICAgICAgICAgICAgICAgICBoYWxmLWZpbGxlZCBvdXQ6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLkNvbnRhY3RGb3Jt
Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
bnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxUcmFuc2l0aW9uOiBmdW5jdGlvbih0
cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xs
ZXIuZ2V0KCd1c2VySGFzRW50ZXJlZERhdGEnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29udHJvbGxlci5kaXNwbGF5TmF2aWdhdGlvbkNvbmZpcm0oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmFib3J0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVkaXJlY3QgZWxzZXdoZXJlIGJ5
IGNhbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgYHRoaXMudHJhbnNpdGlvblRvKCdlbHNld2hl
cmUnKWAgZnJvbSB3aXRoaW4gYHdpbGxUcmFuc2l0aW9uYC4KLSAgICAgICAgICAgICAgICAgICAg
Tm90ZSB0aGF0IGB3aWxsVHJhbnNpdGlvbmAgd2lsbCBub3QgYmUgZmlyZWQgZm9yIHRoZQotICAg
ICAgICAgICAgICAgICAgICByZWRpcmVjdGluZyBgdHJhbnNpdGlvblRvYCwgc2luY2UgYHdpbGxU
cmFuc2l0aW9uYCBkb2Vzbid0Ci0gICAgICAgICAgICAgICAgICAgIGZpcmUgd2hlbiB0aGVyZSBp
cyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB1bmRlcndheS4gSWYgeW91IHdhbnQKLSAgICAgICAgICAg
ICAgICAgICAgc3Vic2VxdWVudCBgd2lsbFRyYW5zaXRpb25gIGFjdGlvbnMgdG8gZmlyZSBmb3Ig
dGhlIHJlZGlyZWN0aW5nCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24sIHlvdSBtdXN0
IGZpcnN0IGV4cGxpY2l0bHkgY2FsbAotICAgICAgICAgICAgICAgICAgICBgdHJhbnNpdGlvbi5h
Ym9ydCgpYC4KLQotICAgICAgICAgICAgICAgICAgICBAZXZlbnQgd2lsbFRyYW5zaXRpb24KLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAg
ICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhl
IGBkaWRUcmFuc2l0aW9uYCBhY3Rpb24gaXMgZmlyZWQgYWZ0ZXIgYSB0cmFuc2l0aW9uIGhhcwot
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgYmVlbiBjb21wbGV0ZWQuIFRoaXMgb2Nj
dXJzIGFmdGVyIHRoZSBub3JtYWwgbW9kZWwKLSAgICAgICAgICAgICAgICAgICAgaG9va3MgKGBi
ZWZvcmVNb2RlbGAsIGBtb2RlbGAsIGBhZnRlck1vZGVsYCwgYHNldHVwQ29udHJvbGxlcmApCi0g
ICAgICAgICAgICAgICAgICAgIGhhdmUgcmVzb2x2ZWQuIFRoZSBgZGlkVHJhbnNpdGlvbmAgYWN0
aW9uIGhhcyBubyBhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIsIGl0IGNh
biBiZSB1c2VmdWwgZm9yIHRyYWNraW5nIHBhZ2Ugdmlld3Mgb3IgcmVzZXR0aW5nCi0gICAgICAg
ICAgICAgICAgICAgIHN0YXRlIG9uIHRoZSBjb250cm9sbGVyLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Mb2dpblJvdXRlID0gRW1iZXIuUm91
dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkaWRUcmFuc2l0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmdldCgnZXJyb3JzLmJhc2UnKS5jbGVhcigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQnViYmxlIHRoZSBkaWRU
cmFuc2l0aW9uIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IGRpZFRyYW5zaXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIGBsb2FkaW5nYCBhY3Rpb24gaXMgZmly
ZWQgb24gdGhlIHJvdXRlIHdoZW4gYSByb3V0ZSdzIGBtb2RlbGAKLSAgICAgICAgICAgICAgICAg
ICAgaG9vayByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIG5vdCBhbHJlYWR5IHJlc29sdmVkLiBU
aGUgY3VycmVudAotICAgICAgICAgICAgICAgICAgICBgVHJhbnNpdGlvbmAgb2JqZWN0IGlzIHRo
ZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIHRoZSByb3V0ZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAg
IHRyaWdnZXJlZCB0aGUgbG9hZGluZyBldmVudCBpcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuQXBwbGlj
YXRpb25Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAg
YWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZnVuY3Rpb24odHJh
bnNpdGlvbiwgcm91dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBF
bWJlci5WaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1l
czogWydhcHAtbG9hZGluZyddCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJvdXRlci5vbmUoJ2RpZFRyYW5zaXRpb24nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlldy5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQnVi
YmxlIHRoZSBsb2FkaW5nIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IGxvYWRpbmcKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RW1iZXIuUm91dGV9IHJvdXRlIFRoZSByb3V0ZSB0aGF0IHRyaWdnZXJl
ZCB0aGUgbG9hZGluZyBldmVudAotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4yLjAKLSAg
ICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBXaGVuIGF0dGVtcHRpbmcgdG8gdHJhbnNpdGlvbiBpbnRvIGEgcm91dGUsIGFueSBvZiB0aGUg
aG9va3MKLSAgICAgICAgICAgICAgICAgICAgbWF5IHJldHVybiBhIHByb21pc2UgdGhhdCByZWpl
Y3RzLCBhdCB3aGljaCBwb2ludCBhbiBgZXJyb3JgCi0gICAgICAgICAgICAgICAgICAgIGFjdGlv
biB3aWxsIGJlIGZpcmVkIG9uIHRoZSBwYXJ0aWFsbHktZW50ZXJlZCByb3V0ZXMsIGFsbG93aW5n
Ci0gICAgICAgICAgICAgICAgICAgIGZvciBwZXItcm91dGUgZXJyb3IgaGFuZGxpbmcgbG9naWMs
IG9yIHNoYXJlZCBlcnJvciBoYW5kbGluZwotICAgICAgICAgICAgICAgICAgICBsb2dpYyBkZWZp
bmVkIG9uIGEgcGFyZW50IHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4g
ZXhhbXBsZSBvZiBhbiBlcnJvciBoYW5kbGVyIHRoYXQgd2lsbCBiZSBpbnZva2VkCi0gICAgICAg
ICAgICAgICAgICAgIGZvciByZWplY3RlZCBwcm9taXNlcyBmcm9tIHRoZSB2YXJpb3VzIGhvb2tz
IG9uIHRoZSByb3V0ZSwKLSAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbnkgdW5oYW5k
bGVkIGVycm9ycyBmcm9tIGNoaWxkIHJvdXRlczoKLQotICAgICAgICAgICAgICAgICAgICBgYGBq
cwotICAgICAgICAgICAgICAgICAgICBBcHAuQWRtaW5Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTW9kZWw6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLlJTVlAucmVqZWN0KCJiYWQgdGhpbmdz
ISIpOwotICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3Is
IHRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1pbmcgd2Ug
Z290IGhlcmUgZHVlIHRvIHRoZSBlcnJvciBpbiBgYmVmb3JlTW9kZWxgLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBjYW4gZXhwZWN0IHRoYXQgZXJyb3IgPT09ICJiYWQgdGhpbmdz
ISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBhIHByb21pc2UgbW9kZWwgcmVq
ZWN0aW5nIHdvdWxkIGFsc28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbCB0aGlz
IGhvb2ssIGFzIHdvdWxkIGFueSBlcnJvcnMgZW5jb3VudGVyZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gYGFmdGVyTW9kZWxgLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSBgZXJyb3JgIGhvb2sgaXMgYWxzbyBwcm92aWRlZCB0aGUgZmFpbGVkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGB0cmFuc2l0aW9uYCwgd2hpY2ggY2FuIGJlIHN0b3JlZCBh
bmQgbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYC5yZXRyeSgpYGQgaWYgZGVz
aXJlZC4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygnbG9n
aW4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICBgZXJyb3JgIGFjdGlvbnMgdGhhdCBidWJibGUgdXAgYWxsIHRoZSB3
YXkgdG8gYEFwcGxpY2F0aW9uUm91dGVgCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgZmlyZSBh
IGRlZmF1bHQgZXJyb3IgaGFuZGxlciB0aGF0IGxvZ3MgdGhlIGVycm9yLiBZb3UgY2FuCi0gICAg
ICAgICAgICAgICAgICAgIHNwZWNpZnkgeW91ciBvd24gZ2xvYmFsIGRlZmF1bHQgZXJyb3IgaGFu
ZGxlciBieSBvdmVycmlkaW5nIHRoZQotICAgICAgICAgICAgICAgICAgICBgZXJyb3JgIGhhbmRs
ZXIgb24gYEFwcGxpY2F0aW9uUm91dGVgOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvblJvdXRlID0gRW1iZXIuUm91dGUuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3IsIHRyYW5zaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyRm9yKCdiYW5uZXInKS5kaXNwbGF5RXJyb3Io
ZXJyb3IubWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0gICAgICAgICAgICAgICAgICAgIEBldmVudCBlcnJvcgotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge0Vycm9yfSBlcnJvcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1RyYW5z
aXRpb259IHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBUaGUgY29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhp
cyByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuRm9ybVJvdXRlID0g
RW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3aWxsVHJhbnNpdGlvbjogZnVuY3Rpb24odHJhbnNpdGlv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldCgn
dXNlckhhc0VudGVyZWREYXRhJykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFj
b25maXJtKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gYWJhbmRvbiBwcm9ncmVzcz8iKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24uYWJvcnQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBCdWJibGUgdGhlIGB3aWxsVHJhbnNpdGlvbmAgYWN0aW9uIHNvIHRoYXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBwYXJlbnQgcm91dGVzIGNhbiBkZWNpZGUgd2hldGhlciBvciBu
b3QgdG8gYWJvcnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udHJvbGxl
cgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBFbWJlci5Db250cm9sbGVyCi0gICAgICAgICAg
ICAgICAgICAgIEBzaW5jZSAxLjYuMAotICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAg
ICAgX2FjdGlvbnM6IHsKLQotICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zRGlkQ2hhbmdlOiBm
dW5jdGlvbihjaGFuZ2VkLCB0b3RhbFByZXNlbnQsIHJlbW92ZWQpIHsKLQotICAgICAgICAgICAg
ICAgICAgICB2YXIgdG90YWxDaGFuZ2VkID0ga2V5cyhjaGFuZ2VkKS5jb25jYXQoa2V5cyhyZW1v
dmVkKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0b3RhbENo
YW5nZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB1cmxLZXkgPSB0b3RhbENoYW5nZWRbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zID0gZ2V0KHRoaXMucXVlcnlQYXJhbXMsIHVybEtleSkgfHwge307Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2V0KG9wdGlvbnMsICdyZWZyZXNoTW9kZWwnKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIGZpbmFsaXplUXVl
cnlQYXJhbUNoYW5nZTogZnVuY3Rpb24ocGFyYW1zLCBmaW5hbFBhcmFtcywgdHJhbnNpdGlvbikg
ewotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlTmFtZSAhPT0gJ2FwcGxpY2F0
aW9uJykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2l0aW9uIG9iamVjdCBp
cyBhYnNlbnQgZm9yIGludGVybWVkaWF0ZSB0cmFuc2l0aW9ucy4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlcklu
Zm9zID0gdHJhbnNpdGlvbi5zdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHFwTWV0
YSA9IHJvdXRlci5fcXVlcnlQYXJhbXNGb3IoaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5n
dGgtMV0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VzID0gcm91dGVyLl9x
cFVwZGF0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlVXJsOwotCi0gICAgICAg
ICAgICAgICAgICAgIHN0YXNoUGFyYW1OYW1lcyhyb3V0ZXIsIGhhbmRsZXJJbmZvcyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHFwTWV0YS5xcHMubGVuZ3Ro
OyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxcCA9IHFwTWV0
YS5xcHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGUgPSBxcC5yb3V0ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gcm91dGUuY29udHJvbGxl
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVzZW50S2V5ID0gcXAudXJsS2V5IGlu
IHBhcmFtcyAmJiBxcC51cmxLZXk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIGEg
cmV2ZXJzZSBsb29rdXAgdG8gc2VlIGlmIHRoZSBjaGFuZ2VkIHF1ZXJ5Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJhbSBVUkwga2V5IGNvcnJlc3BvbmRzIHRvIGEgUVAgcHJvcGVydHkg
b24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY29udHJvbGxlci4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgc3ZhbHVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoYW5nZXMgJiYgcXAudXJsS2V5IGluIGNoYW5nZXMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDb250cm9sbGVyIG92ZXJyb2RlIHRoaXMgdmFsdWUgaW4gc2V0dXBD
b250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXQoY29udHJv
bGxlciwgcXAucHJvcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZhbHVlID0gcm91
dGUuc2VyaWFsaXplUXVlcnlQYXJhbSh2YWx1ZSwgcXAudXJsS2V5LCBxcC50eXBlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXNlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZhbHVl
ID0gcGFyYW1zW3ByZXNlbnRLZXldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHJvdXRlLmRlc2VyaWFsaXplUXVlcnlQYXJhbShzdmFsdWUsIHFwLnVybEtleSwgcXAu
dHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm8gUVAgcHJvdmlkZWQ7IHVzZSBkZWZhdWx0IHZhbHVl
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmFsdWUgPSBxcC5zZGVmOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHFwLmRlZjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEVtYmVyLkEodmFsdWUuc2xpY2UoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuX3FwRGVsZWdhdGUgPSBnZXQodGhpcywgJ19xcC5zdGF0ZXMuaW5hY3Rp
dmUnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNRdWVyeVBhcmFtQ2hhbmdl
ZCA9IChzdmFsdWUgIT09IHFwLnN2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpc1F1ZXJ5UGFyYW1DaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG9wdGlvbnMgPSBnZXQocm91dGUsICdxdWVyeVBhcmFtcy4nICsgcXAudXJsS2V5KSB8fCB7fTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnF1ZXJ5UGFyYW1z
T25seSAmJiByZXBsYWNlVXJsICE9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmVwbGFjZUNvbmZpZ1ZhbHVlID0gZ2V0KG9wdGlvbnMsICdyZXBsYWNlJyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlQ29uZmlnVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VVcmwgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VDb25m
aWdWYWx1ZSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEV4cGxpY2l0IHB1c2hTdGF0ZSB3aW5zIG92ZXIgYW55IG90aGVyIHJlcGxhY2VTdGF0ZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVXJsID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoY29udHJvbGxlciwg
cXAucHJvcCwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdGFzaCBjdXJyZW50IHNlcmlhbGl6ZWQgdmFsdWUgb2YgY29udHJv
bGxlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIHFwLnN2YWx1ZSA9IHN2YWx1ZTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNRdWVyeVBhcmFtSGFzRGVmYXVsdFZhbHVlID0g
KHFwLnNkZWYgPT09IHN2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXNR
dWVyeVBhcmFtSGFzRGVmYXVsdFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWxQYXJhbXMucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
OiBzdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcHJlc2VudEtleSB8fCBxcC51
cmxLZXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChyZXBsYWNlVXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLm1ldGhv
ZCgncmVwbGFjZScpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yRWFjaChxcE1ldGEucXBzLCBmdW5jdGlvbihxcCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHJvdXRlUXBNZXRhID0gZ2V0KHFwLnJvdXRlLCAnX3FwJyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZmluYWxpemVkQ29udHJvbGxlciA9IHFwLnJvdXRlLmNvbnRyb2xs
ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZWRDb250cm9sbGVyLl9xcERlbGVn
YXRlID0gZ2V0KHJvdXRlUXBNZXRhLCAnc3RhdGVzLmFjdGl2ZScpOwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVyLl9xcFVwZGF0ZXMgPSBudWxsOwot
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkCi0KLSAgICAgICAgICAgICAgICAgICAgUGxl
YXNlIHVzZSBgYWN0aW9uc2AgaW5zdGVhZC4KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBl
dmVudHMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBldmVudHM6IG51bGwsCi0K
LSAgICAgICAgICAgIG1lcmdlZFByb3BlcnRpZXM6IFsnZXZlbnRzJ10sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIGhvb2sgaXMgZXhlY3V0ZWQgd2hlbiB0aGUg
cm91dGVyIGNvbXBsZXRlbHkgZXhpdHMgdGhpcyByb3V0ZS4gSXQgaXMKLSAgICAgICAgICAgICAg
ICAgICAgbm90IGV4ZWN1dGVkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUgY2hhbmdlcy4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRlYWN0aXZhdGUKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBkZWFjdGl2YXRlOiBFbWJlci5LLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBob29rIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHJv
dXRlciBlbnRlcnMgdGhlIHJvdXRlLiBJdCBpcyBub3QgZXhlY3V0ZWQKLSAgICAgICAgICAgICAg
ICAgICAgd2hlbiB0aGUgbW9kZWwgZm9yIHRoZSByb3V0ZSBjaGFuZ2VzLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgYWN0aXZhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBhY3RpdmF0ZTogRW1iZXIuSywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFRyYW5zaXRpb24gdGhlIGFwcGxpY2F0aW9uIGludG8gYW5vdGhlciByb3V0ZS4gVGhl
IHJvdXRlIG1heQotICAgICAgICAgICAgICAgICAgICBiZSBlaXRoZXIgYSBzaW5nbGUgcm91dGUg
b3Igcm91dGUgcGF0aDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdibG9nUG9zdHMnKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0cy5yZWNlbnRFbnRyaWVzJyk7
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIE9wdGlvbmFs
bHkgc3VwcGx5IGEgbW9kZWwgZm9yIHRoZSByb3V0ZSBpbiBxdWVzdGlvbi4gVGhlIG1vZGVsCi0g
ICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBVUkwgdXNpbmcg
dGhlIGBzZXJpYWxpemVgIGhvb2sgb2YKLSAgICAgICAgICAgICAgICAgICAgdGhlIHJvdXRlOgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0JywgYVBvc3QpOwotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJZiBhIGxpdGVyYWwgaXMgcGFzc2VkIChzdWNo
IGFzIGEgbnVtYmVyIG9yIGEgc3RyaW5nKSwgaXQgd2lsbAotICAgICAgICAgICAgICAgICAgICBi
ZSB0cmVhdGVkIGFzIGFuIGlkZW50aWZpZXIgaW5zdGVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgYG1v
ZGVsYAotICAgICAgICAgICAgICAgICAgICBob29rIG9mIHRoZSByb3V0ZSB3aWxsIGJlIHRyaWdn
ZXJlZDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdibG9nUG9zdCcsIDEpOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBtb2RlbHMgd2lsbCBiZSBh
cHBsaWVkIGxhc3QgdG8gZmlyc3QgcmVjdXJzaXZlbHkgdXAgdGhlCi0gICAgICAgICAgICAgICAg
ICAgIHJlc291cmNlIHRyZWUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCdibG9nUG9zdCcsIHtwYXRoOic6YmxvZ1Bvc3RJ
ZCd9LCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgn
YmxvZ0NvbW1lbnQnLCB7cGF0aDogJzpibG9nQ29tbWVudElkJ30pOwotICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ0NvbW1lbnQnLCBhUG9zdCwgYUNvbW1lbnQpOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ0NvbW1lbnQnLCAxLCAxMyk7
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEl0IGlzIGFs
c28gcG9zc2libGUgdG8gcGFzcyBhIFVSTCAoYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBhCi0g
ICAgICAgICAgICAgICAgICAgIGAvYCkuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5k
IGRlYnVnZ2luZyBwdXJwb3NlcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJhcmVs
eSBiZSB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCcvJyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKCcvYmxvZy9wb3N0LzEvY29tbWVu
dC8xMycpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBT
ZWUgYWxzbyAncmVwbGFjZVdpdGgnLgotCi0gICAgICAgICAgICAgICAgICAgIFNpbXBsZSBUcmFu
c2l0aW9uIEV4YW1wbGUKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucm91dGUoImluZGV4Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yb3V0ZSgic2VjcmV0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSgiZm91
ck9oRm91ciIsIHsgcGF0aDogIio6In0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0g
ICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAg
bW92ZVRvU2VjcmV0OiBmdW5jdGlvbihjb250ZXh0KXsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dGhvcml6ZWQoKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
cmFuc2l0aW9uVG8oJ3NlY3JldCcsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2ZvdXJP
aEZvdXInKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uIHRvIGEgbmVzdGVkIHJvdXRlCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUm91
dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNl
KCdhcnRpY2xlcycsIHsgcGF0aDogJy9hcnRpY2xlcycgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlKCduZXcnKTsKLSAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBw
LkluZGV4Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAg
IGFjdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25Ub05ld0FydGlj
bGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRp
b25UbygnYXJ0aWNsZXMubmV3Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGUgTW9kZWxzIEV4YW1wbGUK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
IEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cm91dGUoImluZGV4Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnYnJl
YWtmYXN0Jywge3BhdGg6JzpicmVha2Zhc3RJZCd9LCBmdW5jdGlvbigpewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnY2VyZWFsJywge3BhdGg6ICc6Y2VyZWFsSWQnfSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5JbmRleFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtb3ZlVG9DaG9jb2xhdGVDZXJlYWw6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjZXJlYWwgPSB7IGNlcmVhbElkOiAiQ2hvY29sYXRlWXVtbWluZXNzIn0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha2Zhc3QgPSB7YnJlYWtmYXN0SWQ6ICJD
ZXJlYWxBbmRNaWxrIn07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2l0
aW9uVG8oJ2NlcmVhbCcsIGJyZWFrZmFzdCwgY2VyZWFsKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRy
YW5zaXRpb25UbwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUg
bmFtZSBvZiB0aGUgcm91dGUgb3IgYSBVUkwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsu
Li5PYmplY3R9IG1vZGVscyB0aGUgbW9kZWwocykgb3IgaWRlbnRpZmllcihzKSB0byBiZSB1c2Vk
IHdoaWxlCi0gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUu
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1RyYW5zaXRpb259IHRoZSB0cmFuc2l0aW9u
IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAgICAgICAgICAgICAgICAgIGF0dGVt
cHRlZCB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHJhbnNp
dGlvblRvOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJv
dXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZXIudHJhbnNp
dGlvblRvLmFwcGx5KHJvdXRlciwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBQZXJmb3JtIGEgc3luY2hyb25vdXMgdHJh
bnNpdGlvbiBpbnRvIGFub3RoZXIgcm91dGUgd2l0aG91dCBhdHRlbXB0aW5nCi0gICAgICAgICAg
ICAgICAgICAgIHRvIHJlc29sdmUgcHJvbWlzZXMsIHVwZGF0ZSB0aGUgVVJMLCBvciBhYm9ydCBh
bnkgY3VycmVudGx5IGFjdGl2ZQotICAgICAgICAgICAgICAgICAgICBhc3luY2hyb25vdXMgdHJh
bnNpdGlvbnMgKGkuZS4gcmVndWxhciB0cmFuc2l0aW9ucyBjYXVzZWQgYnkKLSAgICAgICAgICAg
ICAgICAgICAgYHRyYW5zaXRpb25Ub2Agb3IgVVJMIGNoYW5nZXMpLgotCi0gICAgICAgICAgICAg
ICAgICAgIFRoaXMgbWV0aG9kIGlzIGhhbmR5IGZvciBwZXJmb3JtaW5nIGludGVybWVkaWF0ZSB0
cmFuc2l0aW9ucyBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgd2F5IHRvIGEgZmluYWwgZGVz
dGluYXRpb24gcm91dGUsIGFuZCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSB0aGUKLSAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGBlcnJvcmAgYW5kIGBs
b2FkaW5nYCBoYW5kbGVycy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGludGVybWVk
aWF0ZVRyYW5zaXRpb25UbwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFt
ZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsuLi5P
YmplY3R9IG1vZGVscyB0aGUgbW9kZWwocykgdG8gYmUgdXNlZCB3aGlsZSB0cmFuc2l0aW9uaW5n
Ci0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSByb3V0ZS4KLSAgICAgICAgICAgICAgICAgICAg
QHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludGVybWVk
aWF0ZVRyYW5zaXRpb25UbzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRl
ciA9IHRoaXMucm91dGVyOwotICAgICAgICAgICAgICAgIHJvdXRlci5pbnRlcm1lZGlhdGVUcmFu
c2l0aW9uVG8uYXBwbHkocm91dGVyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlZnJlc2ggdGhlIG1vZGVsIG9uIHRo
aXMgcm91dGUgYW5kIGFueSBjaGlsZCByb3V0ZXMsIGZpcmluZyB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgYGJlZm9yZU1vZGVsYCwgYG1vZGVsYCwgYW5kIGBhZnRlck1vZGVsYCBob29rcyBpbiBh
IHNpbWlsYXIgZmFzaGlvbgotICAgICAgICAgICAgICAgICAgICB0byBob3cgcm91dGVzIGFyZSBl
bnRlcmVkIHdoZW4gdHJhbnNpdGlvbmluZyBpbiBmcm9tIG90aGVyIHJvdXRlLgotICAgICAgICAg
ICAgICAgICAgICBUaGUgY3VycmVudCByb3V0ZSBwYXJhbXMgKGUuZy4gYGFydGljbGVfaWRgKSB3
aWxsIGJlIHBhc3NlZCBpbgotICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmVzcGVjdGl2ZSBt
b2RlbCBob29rcywgYW5kIGlmIGEgZGlmZmVyZW50IG1vZGVsIGlzIHJldHVybmVkLAotICAgICAg
ICAgICAgICAgICAgICBgc2V0dXBDb250cm9sbGVyYCBhbmQgYXNzb2NpYXRlZCByb3V0ZSBob29r
cyB3aWxsIHJlLWZpcmUgYXMgd2VsbC4KLQotICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxl
IHVzYWdlIG9mIHRoaXMgbWV0aG9kIGlzIHJlLXF1ZXJ5aW5nIHRoZSBzZXJ2ZXIgZm9yIHRoZQot
ICAgICAgICAgICAgICAgICAgICBsYXRlc3QgaW5mb3JtYXRpb24gdXNpbmcgdGhlIHNhbWUgcGFy
YW1ldGVycyBhcyB3aGVuIHRoZSByb3V0ZQotICAgICAgICAgICAgICAgICAgICB3YXMgZmlyc3Qg
ZW50ZXJlZC4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNl
IGBtb2RlbGAgaG9va3MgdG8gZmlyZSBldmVuIG9uIHJvdXRlcwotICAgICAgICAgICAgICAgICAg
ICB0aGF0IHdlcmUgcHJvdmlkZWQgYSBtb2RlbCBvYmplY3Qgd2hlbiB0aGUgcm91dGUgd2FzIGlu
aXRpYWxseQotICAgICAgICAgICAgICAgICAgICBlbnRlcmVkLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgcmVmcmVzaAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtUcmFuc2l0
aW9ufSB0aGUgdHJhbnNpdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgICAg
ICAgICAgICAgICAgICBhdHRlbXB0ZWQgdHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBA
c2luY2UgMS40LjAKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVmcmVzaDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLnJvdXRlci5y
ZWZyZXNoKHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFRyYW5zaXRpb24gaW50byBhbm90aGVyIHJvdXRlIHdoaWxlIHJlcGxhY2lu
ZyB0aGUgY3VycmVudCBVUkwsIGlmIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICAgICBUaGlz
IHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgYWRkaW5n
IGEgbmV3IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgQmVzaWRlIHRoYXQsIGl0IGlzIGlkZW50
aWNhbCB0byBgdHJhbnNpdGlvblRvYCBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuIFNlZQotICAgICAg
ICAgICAgICAgICAgICAndHJhbnNpdGlvblRvJyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBy
ZWdhcmRpbmcgbXVsdGlwbGUgbW9kZWxzLgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGUK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
IEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cm91dGUoImluZGV4Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSgic2VjcmV0
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5T
ZWNyZXRSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAg
YWZ0ZXJNb2RlbDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF1
dGhvcml6ZWQoKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZVdpdGgo
J2luZGV4Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXBsYWNlV2l0aAotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3IgYSBVUkwK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHsuLi5PYmplY3R9IG1vZGVscyB0aGUgbW9kZWwo
cykgb3IgaWRlbnRpZmllcihzKSB0byBiZSB1c2VkIHdoaWxlCi0gICAgICAgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1
cm4ge1RyYW5zaXRpb259IHRoZSB0cmFuc2l0aW9uIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhp
cwotICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRlZCB0cmFuc2l0aW9uCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcm91dGVyLnJlcGxhY2VXaXRoLmFwcGx5KHJvdXRlciwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZW5kcyBhbiBh
Y3Rpb24gdG8gdGhlIHJvdXRlciwgd2hpY2ggd2lsbCBkZWxlZ2F0ZSBpdCB0byB0aGUgY3VycmVu
dGx5Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSByb3V0ZSBoaWVyYXJjaHkgcGVyIHRoZSBi
dWJibGluZyBydWxlcyBleHBsYWluZWQgdW5kZXIgYGFjdGlvbnNgLgotCi0gICAgICAgICAgICAg
ICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucm91dGUoImluZGV4Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5BcHBsaWNhdGlvblJvdXRlID0gRW1iZXIuUm91dGUu
ZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0cmFjazogZnVuY3Rpb24oYXJnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKGFyZywgJ3dhcyBjbGlja2VkJyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICAgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhY2tJZkRlYnVnOiBmdW5jdGlvbihhcmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlYnVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5k
KCd0cmFjaycsIGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhl
IG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7Li4uKn0gYXJncwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNlbmQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5zZW5kLmFwcGx5
KHRoaXMucm91dGVyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaG9vayBpcyB0aGUgZW50cnkgcG9pbnQgZm9y
IHJvdXRlci5qcwotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2Qgc2V0dXAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBz
ZXR1cDogZnVuY3Rpb24oY29udGV4dCwgdHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgIHZh
ciBjb250cm9sbGVyTmFtZSA9IHRoaXMuY29udHJvbGxlck5hbWUgfHwgdGhpcy5yb3V0ZU5hbWU7
Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXJGb3IoY29u
dHJvbGxlck5hbWUsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0aGlzLmdlbmVyYXRlQ29udHJvbGxl
cihjb250cm9sbGVyTmFtZSwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gQXNzaWduIHRoZSByb3V0ZSdzIGNvbnRyb2xsZXIgc28gdGhhdCBpdCBjYW4g
bW9yZSBlYXNpbHkgYmUKLSAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2VkIGluIGFjdGlvbiBo
YW5kbGVycwotICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0K
LSAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR1cENvbnRyb2xsZXJzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgiRW1iZXIuUm91dGUuc2V0dXBDb250cm9sbGVycyBp
cyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEVtYmVyLlJvdXRlLnNldHVwQ29udHJvbGxlcihjb250
cm9sbGVyLCBtb2RlbCkgaW5zdGVhZC4iKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR1
cENvbnRyb2xsZXJzKGNvbnRyb2xsZXIsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlcyA9IGdldCh0aGlzLCAnX3FwLnN0
YXRlcycpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RlbCBkZXAgdmFsdWVzIHVzZWQgdG8gY2Fs
Y3VsYXRlIGNhY2hlIGtleXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9x
cERlbGVnYXRlID0gc3RhdGVzLmNoYW5naW5nS2V5czsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXIuX3VwZGF0ZUNhY2hlUGFyYW1zKHRyYW5zaXRpb24ucGFyYW1zKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9xcERlbGVn
YXRlID0gc3RhdGVzLmFsbG93T3ZlcnJpZGVzOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMu
c2V0dXBDb250cm9sbGVyKGNvbnRyb2xsZXIsIGNvbnRleHQsIHRyYW5zaXRpb24pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlclRlbXBsYXRlcykg
ewotICAgICAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIkVtYmVyLlJvdXRlLnJlbmRl
clRlbXBsYXRlcyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEVtYmVyLlJvdXRlLnJlbmRlclRl
bXBsYXRlKGNvbnRyb2xsZXIsIG1vZGVsKSBpbnN0ZWFkLiIpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlbmRlclRlbXBsYXRlcyhjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRlbXBsYXRlKGNvbnRyb2xsZXIsIGNv
bnRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlzIGhvb2sgaXMgdGhlIGZpcnN0IG9mIHRoZSBy
b3V0ZSBlbnRyeSB2YWxpZGF0aW9uIGhvb2tzCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZCB3
aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byB0cmFuc2l0aW9uIGludG8gYSByb3V0ZQotICAgICAg
ICAgICAgICAgICAgICBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLiBJdCBpcyBjYWxsZWQgYmVmb3Jl
IGBtb2RlbGAgYW5kCi0gICAgICAgICAgICAgICAgICAgIGBhZnRlck1vZGVsYCwgYW5kIGlzIGFw
cHJvcHJpYXRlIGZvciBjYXNlcyB3aGVuOgotCi0gICAgICAgICAgICAgICAgICAgIDEpIEEgZGVj
aXNpb24gY2FuIGJlIG1hZGUgdG8gcmVkaXJlY3QgZWxzZXdoZXJlIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgbmVlZGluZyB0byByZXNvbHZlIHRoZSBtb2RlbCBmaXJzdC4KLSAgICAg
ICAgICAgICAgICAgICAgMikgQW55IGFzeW5jIG9wZXJhdGlvbnMgbmVlZCB0byBvY2N1ciBmaXJz
dCBiZWZvcmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGlzIGF0dGVtcHRlZCB0
byBiZSByZXNvbHZlZC4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGhvb2sgaXMgcHJvdmlk
ZWQgdGhlIGN1cnJlbnQgYHRyYW5zaXRpb25gIGF0dGVtcHQKLSAgICAgICAgICAgICAgICAgICAg
YXMgYSBwYXJhbWV0ZXIsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGAuYWJvcnQoKWAgdGhlIHRyYW5z
aXRpb24sCi0gICAgICAgICAgICAgICAgICAgIHNhdmUgaXQgZm9yIGEgbGF0ZXIgYC5yZXRyeSgp
YCwgb3IgcmV0cmlldmUgdmFsdWVzIHNldAotICAgICAgICAgICAgICAgICAgICBvbiBpdCBmcm9t
IGEgcHJldmlvdXMgaG9vay4gWW91IGNhbiBhbHNvIGp1c3QgY2FsbAotICAgICAgICAgICAgICAg
ICAgICBgdGhpcy50cmFuc2l0aW9uVG9gIHRvIGFub3RoZXIgcm91dGUgdG8gaW1wbGljaXRseQot
ICAgICAgICAgICAgICAgICAgICBhYm9ydCB0aGUgYHRyYW5zaXRpb25gLgotCi0gICAgICAgICAg
ICAgICAgICAgIFlvdSBjYW4gcmV0dXJuIGEgcHJvbWlzZSBmcm9tIHRoaXMgaG9vayB0byBwYXVz
ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbiB1bnRpbCB0aGUgcHJvbWlzZSBy
ZXNvbHZlcyAob3IgcmVqZWN0cykuIFRoaXMgY291bGQKLSAgICAgICAgICAgICAgICAgICAgYmUg
dXNlZnVsLCBmb3IgaW5zdGFuY2UsIGZvciByZXRyaWV2aW5nIGFzeW5jIGNvZGUgZnJvbQotICAg
ICAgICAgICAgICAgICAgICB0aGUgc2VydmVyIHRoYXQgaXMgcmVxdWlyZWQgdG8gZW50ZXIgYSBy
b3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBB
cHAuUG9zdFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAg
ICBiZWZvcmVNb2RlbDogZnVuY3Rpb24odHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFBcHAuUG9zdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RW1iZXIuJC5nZXRTY3JpcHQoJy9tb2RlbHMvcG9zdC5qcycpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIElmIGBBcHAu
UG9zdGAgZG9lc24ndCBleGlzdCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKLSAgICAgICAgICAgICAg
ICAgICAgYGJlZm9yZU1vZGVsYCB3aWxsIHVzZSBqUXVlcnkncyBgZ2V0U2NyaXB0YCwgd2hpY2gK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRl
ciB0aGUgc2VydmVyIGhhcwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcmV0cmll
dmVkIGFuZCBleGVjdXRlZCB0aGUgY29kZSBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAgICBz
ZXJ2ZXIuIE5vdGUgdGhhdCBpZiBhbiBlcnJvciB3ZXJlIHRvIG9jY3VyLCBpdCB3b3VsZAotICAg
ICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgdG8gdGhlIGBlcnJvcmAgaG9vayBvbiBgRW1iZXIu
Um91dGVgLCBidXQKLSAgICAgICAgICAgICAgICAgICAgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhh
bmRsZSBlcnJvcnMgc3BlY2lmaWMgdG8KLSAgICAgICAgICAgICAgICAgICAgYGJlZm9yZU1vZGVs
YCByaWdodCBmcm9tIHdpdGhpbiB0aGUgaG9vayAodG8gZGlzdGluZ3Vpc2gKLSAgICAgICAgICAg
ICAgICAgICAgZnJvbSB0aGUgc2hhcmVkIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yIG9mIHRoZSBg
ZXJyb3JgCi0gICAgICAgICAgICAgICAgICAgIGhvb2spOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5l
eHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZU1vZGVsOiBmdW5jdGlvbih0cmFu
c2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFwcC5Qb3N0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEVtYmVyLiQuZ2V0U2NyaXB0KCdwb3N0LmpzJykudGhlbihudWxsLCBm
dW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmFuc2l0aW9u
VG8oJ2hlbHAnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGUgYWJvdmUgdHJhbnNpdGlvblRvIHdpbGwgaW1wbGljaXRseQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhbHQgdGhlIHRyYW5zaXRpb24uIElmIHlvdSB3ZXJlIHRvIHJldHVybgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgZnJvbSB0aGlzIHByb21pc2Ug
cmVqZWN0IGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWNjb3JkaW5n
IHRvIHByb21pc2Ugc2VtYW50aWNzLCB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY29udmVydCB0aGUgcmVqZWN0IGludG8gYSByZXNvbHZlIGFuZCB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIHdvdWxkIGNvbnRpbnVlLiBUbyBw
cm9wYWdhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3Igc28gdGhh
dCBpdCdkIGJlIGhhbmRsZWQgYnkgdGhlIGBlcnJvcmAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBob29rLCB5b3Ugd291bGQgaGF2ZSB0byBlaXRoZXIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRW1iZXIuUlNWUC5yZWplY3QoZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYmVmb3JlTW9kZWwKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBxdWVyeVBhcmFtcyB0aGUgYWN0aXZlIHF1ZXJ5IHBhcmFtcyBm
b3IgdGhpcyByb3V0ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtQcm9taXNlfSBpZiB0
aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGlzIGhvb2sgaXMKLSAgICAgICAgICAgICAgICAgICAg
ICBhIHByb21pc2UsIHRoZSB0cmFuc2l0aW9uIHdpbGwgcGF1c2UgdW50aWwgdGhlIHRyYW5zaXRp
b24KLSAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlcy4gT3RoZXJ3aXNlLCBub24tcHJvbWlz
ZSByZXR1cm4gdmFsdWVzIGFyZSBub3QKLSAgICAgICAgICAgICAgICAgICAgICB1dGlsaXplZCBp
biBhbnkgd2F5LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJlZm9yZU1vZGVs
OiBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBo
b29rIGlzIGNhbGxlZCBhZnRlciB0aGlzIHJvdXRlJ3MgbW9kZWwgaGFzIHJlc29sdmVkLgotICAg
ICAgICAgICAgICAgICAgICBJdCBmb2xsb3dzIGlkZW50aWNhbCBhc3luYy9wcm9taXNlIHNlbWFu
dGljcyB0byBgYmVmb3JlTW9kZWxgCi0gICAgICAgICAgICAgICAgICAgIGJ1dCBpcyBwcm92aWRl
ZCB0aGUgcm91dGUncyByZXNvbHZlZCBtb2RlbCBpbiBhZGRpdGlvbiB0bwotICAgICAgICAgICAg
ICAgICAgICB0aGUgYHRyYW5zaXRpb25gLCBhbmQgaXMgdGhlcmVmb3JlIHN1aXRlZCB0byBwZXJm
b3JtaW5nCi0gICAgICAgICAgICAgICAgICAgIGxvZ2ljIHRoYXQgY2FuIG9ubHkgdGFrZSBwbGFj
ZSBhZnRlciB0aGUgbW9kZWwgaGFzIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBw
LlBvc3RzUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAg
IGFmdGVyTW9kZWw6IGZ1bmN0aW9uKHBvc3RzLCB0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocG9zdHMuZ2V0KCdsZW5ndGgnKSA9PT0gMSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygncG9zdC5zaG93JywgcG9zdHMuZ2V0KCdm
aXJzdE9iamVjdCcpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBSZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBgYmVm
b3JlTW9kZWxgIGZvciBhIGRlc2NyaXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIG9mIHRyYW5z
aXRpb24tcGF1c2luZyBzZW1hbnRpY3Mgd2hlbiBhIHByb21pc2UgaXMgcmV0dXJuZWQKLSAgICAg
ICAgICAgICAgICAgICAgZnJvbSB0aGlzIGhvb2suCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBhZnRlck1vZGVsCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSByZXNv
bHZlZE1vZGVsIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGBtb2RlbGAsCi0gICAgICAgICAgICAg
ICAgICAgICAgb3IgaXRzIHJlc29sdmVkIHZhbHVlIGlmIGl0IHdhcyBhIHByb21pc2UKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBxdWVyeVBhcmFtcyB0aGUgYWN0aXZlIHF1ZXJ5IHBh
cmFtcyBmb3IgdGhpcyBoYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge1Byb21p
c2V9IGlmIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoaXMgaG9vayBpcwotICAgICAgICAgICAg
ICAgICAgICAgIGEgcHJvbWlzZSwgdGhlIHRyYW5zaXRpb24gd2lsbCBwYXVzZSB1bnRpbCB0aGUg
dHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVzLiBPdGhlcndpc2UsIG5v
bi1wcm9taXNlIHJldHVybiB2YWx1ZXMgYXJlIG5vdAotICAgICAgICAgICAgICAgICAgICAgIHV0
aWxpemVkIGluIGFueSB3YXkuCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFm
dGVyTW9kZWw6IEVtYmVyLkssCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBIGhvb2sgeW91IGNhbiBpbXBsZW1lbnQgdG8gb3B0aW9uYWxseSByZWRpcmVjdCB0byBhbm90
aGVyIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBjYWxsIGB0aGlzLnRyYW5z
aXRpb25Ub2AgZnJvbSBpbnNpZGUgb2YgdGhpcyBob29rLCB0aGlzIHJvdXRlCi0gICAgICAgICAg
ICAgICAgICAgIHdpbGwgbm90IGJlIGVudGVyZWQgaW4gZmF2b3Igb2YgdGhlIG90aGVyIGhvb2su
Ci0KLSAgICAgICAgICAgICAgICAgICAgYHJlZGlyZWN0YCBhbmQgYGFmdGVyTW9kZWxgIGJlaGF2
ZSB2ZXJ5IHNpbWlsYXJseSBhbmQgYXJlCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZCBhbG1v
c3QgYXQgdGhlIHNhbWUgdGltZSwgYnV0IHRoZXkgaGF2ZSBhbiBpbXBvcnRhbnQKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdGluY3Rpb24gaW4gdGhlIGNhc2UgdGhhdCwgZnJvbSBvbmUgb2YgdGhl
c2UgaG9va3MsIGEKLSAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3QgaW50byBhIGNoaWxkIHJv
dXRlIG9mIHRoaXMgcm91dGUgb2NjdXJzOiByZWRpcmVjdHMKLSAgICAgICAgICAgICAgICAgICAg
ZnJvbSBgYWZ0ZXJNb2RlbGAgZXNzZW50aWFsbHkgaW52YWxpZGF0ZSB0aGUgY3VycmVudCBhdHRl
bXB0Ci0gICAgICAgICAgICAgICAgICAgIHRvIGVudGVyIHRoaXMgcm91dGUsIGFuZCB3aWxsIHJl
c3VsdCBpbiB0aGlzIHJvdXRlJ3MgYGJlZm9yZU1vZGVsYCwKLSAgICAgICAgICAgICAgICAgICAg
YG1vZGVsYCwgYW5kIGBhZnRlck1vZGVsYCBob29rcyBiZWluZyBmaXJlZCBhZ2FpbiB3aXRoaW4K
LSAgICAgICAgICAgICAgICAgICAgdGhlIG5ldywgcmVkaXJlY3RpbmcgdHJhbnNpdGlvbi4gUmVk
aXJlY3RzIHRoYXQgb2NjdXIgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBgcmVkaXJl
Y3RgIGhvb2ssIG9uIHRoZSBvdGhlciBoYW5kLCB3aWxsIF9ub3RfIGNhdXNlCi0gICAgICAgICAg
ICAgICAgICAgIHRoZXNlIGhvb2tzIHRvIGJlIGZpcmVkIGFnYWluIHRoZSBzZWNvbmQgdGltZSBh
cm91bmQ7IGluCi0gICAgICAgICAgICAgICAgICAgIG90aGVyIHdvcmRzLCBieSB0aGUgdGltZSB0
aGUgYHJlZGlyZWN0YCBob29rIGhhcyBiZWVuIGNhbGxlZCwKLSAgICAgICAgICAgICAgICAgICAg
Ym90aCB0aGUgcmVzb2x2ZWQgbW9kZWwgYW5kIGF0dGVtcHRlZCBlbnRyeSBpbnRvIHRoaXMgcm91
dGUKLSAgICAgICAgICAgICAgICAgICAgYXJlIGNvbnNpZGVyZWQgdG8gYmUgZnVsbHkgdmFsaWRh
dGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVkaXJlY3QKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG1vZGVsIHRoZSBtb2RlbCBmb3IgdGhpcyByb3V0ZQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlZGlyZWN0OiBFbWJlci5LLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIGNvbnRl
eHQgaXMgY2hhbmdlZCBieSByb3V0ZXIuanMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb250ZXh0RGlkQ2hhbmdlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgY29udGV4dERpZENoYW5nZTogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSB0aGlzLmNvbnRleHQ7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBob29r
IHlvdSBjYW4gaW1wbGVtZW50IHRvIGNvbnZlcnQgdGhlIFVSTCBpbnRvIHRoZSBtb2RlbCBmb3IK
LSAgICAgICAgICAgICAgICAgICAgdGhpcyByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBg
YGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlKCdwb3N0Jywge3BhdGg6ICcvcG9zdHMv
OnBvc3RfaWQnfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUaGUgbW9kZWwgZm9yIHRoZSBgcG9zdGAgcm91
dGUgaXMgYEFwcC5Qb3N0LmZpbmQocGFyYW1zLnBvc3RfaWQpYC4KLQotICAgICAgICAgICAgICAg
ICAgICBCeSBkZWZhdWx0LCBpZiB5b3VyIHJvdXRlIGhhcyBhIGR5bmFtaWMgc2VnbWVudCBlbmRp
bmcgaW4gYF9pZGA6Ci0KLSAgICAgICAgICAgICAgICAgICAgKiBUaGUgbW9kZWwgY2xhc3MgaXMg
ZGV0ZXJtaW5lZCBmcm9tIHRoZSBzZWdtZW50IChgcG9zdF9pZGAncwotICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzIGlzIGBBcHAuUG9zdGApCi0gICAgICAgICAgICAgICAgICAgICogVGhlIGZp
bmQgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgbW9kZWwgY2xhc3Mgd2l0aCB0aGUgdmFsdWUgb2YK
LSAgICAgICAgICAgICAgICAgICAgICB0aGUgZHluYW1pYyBzZWdtZW50LgotCi0gICAgICAgICAg
ICAgICAgICAgIE5vdGUgdGhhdCBmb3Igcm91dGVzIHdpdGggZHluYW1pYyBzZWdtZW50cywgdGhp
cyBob29rIGlzIG9ubHkKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgd2hlbiBlbnRlcmVk
IHZpYSB0aGUgVVJMLiBJZiB0aGUgcm91dGUgaXMgZW50ZXJlZAotICAgICAgICAgICAgICAgICAg
ICB0aHJvdWdoIGEgdHJhbnNpdGlvbiAoZS5nLiB3aGVuIHVzaW5nIHRoZSBgbGluay10b2AgSGFu
ZGxlYmFycwotICAgICAgICAgICAgICAgICAgICBoZWxwZXIpLCB0aGVuIGEgbW9kZWwgY29udGV4
dCBpcyBhbHJlYWR5IHByb3ZpZGVkIGFuZCB0aGlzIGhvb2sKLSAgICAgICAgICAgICAgICAgICAg
aXMgbm90IGNhbGxlZC4gUm91dGVzIHdpdGhvdXQgZHluYW1pYyBzZWdtZW50cyB3aWxsIGFsd2F5
cwotICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBtb2RlbCBob29rLgotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgaG9vayBmb2xsb3dzIHRoZSBhc3luY2hyb25vdXMvcHJvbWlzZSBz
ZW1hbnRpY3MKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0
aW9uIGZvciBgYmVmb3JlTW9kZWxgLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAgICAgICAgICAg
ICBpZiBhIHByb21pc2UgcmV0dXJuZWQgZnJvbSBgbW9kZWxgIGZhaWxzLCB0aGUgZXJyb3Igd2ls
bCBiZQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkIGJ5IHRoZSBgZXJyb3JgIGhvb2sgb24g
YEVtYmVyLlJvdXRlYC4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLlBvc3RSb3V0ZSA9IEVt
YmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGZ1bmN0aW9u
KHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFwcC5Qb3N0LmZpbmQo
cGFyYW1zLnBvc3RfaWQpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgbW9kZWwKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcmFt
cyB0aGUgcGFyYW1ldGVycyBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gcXVlcnlQYXJhbXMgdGhlIHF1ZXJ5IHBhcmFtcyBmb3IgdGhpcyByb3V0
ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R8UHJvbWlzZX0gdGhlIG1vZGVs
IGZvciB0aGlzIHJvdXRlLiBJZgotICAgICAgICAgICAgICAgICAgICAgIGEgcHJvbWlzZSBpcyBy
ZXR1cm5lZCwgdGhlIHRyYW5zaXRpb24gd2lsbCBwYXVzZSB1bnRpbAotICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBwcm9taXNlIHJlc29sdmVzLCBhbmQgdGhlIHJlc29sdmVkIHZhbHVlIG9mIHRo
ZSBwcm9taXNlCi0gICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkIGFzIHRoZSBtb2Rl
bCBmb3IgdGhpcyByb3V0ZS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtb2Rl
bDogZnVuY3Rpb24ocGFyYW1zLCB0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1h
dGNoLCBuYW1lLCBzYXdQYXJhbXMsIHZhbHVlOwotCi0gICAgICAgICAgICAgICAgdmFyIHF1ZXJ5
UGFyYW1zOwotCi0gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBnZXQodGhpcywgJ19xcC5t
YXAnKTsKLQotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09ICdxdWVyeVBhcmFtcycgfHwgKHF1ZXJ5UGFy
YW1zICYmIHByb3AgaW4gcXVlcnlQYXJhbXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChtYXRjaCA9IHByb3AubWF0Y2goL14oLiopX2lkJC8pKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lID0gbWF0Y2hbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBh
cmFtc1twcm9wXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBz
YXdQYXJhbXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICghbmFtZSAmJiBzYXdQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHko
cGFyYW1zKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnJlc29sdmVJbmRleCAhPT0gdHJhbnNpdGlvbi5zdGF0
ZS5oYW5kbGVySW5mb3MubGVuZ3RoLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJl
bnRNb2RlbCA9IHRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zW3RyYW5zaXRpb24ucmVzb2x2
ZUluZGV4LTFdLmNvbnRleHQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudE1v
ZGVsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmRNb2RlbChuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBkZXNlcmlhbGl6ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyYW1z
IHRoZSBwYXJhbWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkwKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBy
ZXR1cm4ge09iamVjdHxQcm9taXNlfSB0aGUgbW9kZWwgZm9yIHRoaXMgcm91dGUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgUm91dGVyLmpzIGhvb2suCi0gICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbihwYXJhbXMsIHRyYW5zaXRpb24pIHsKLQot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsKHRoaXMucGFyYW1zRm9yKHRoaXMucm91
dGVOYW1lKSwgdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZpbmRNb2RlbAotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgbW9kZWwgdHlwZQotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgdGhlIHZhbHVlIHBhc3NlZCB0byBmaW5kCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZmluZE1vZGVsOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBnZXQodGhpcywgJ3N0b3JlJyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0b3JlLmZpbmQuYXBwbHkoc3RvcmUsIGFyZ3VtZW50cyk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU3RvcmUgcHJv
cGVydHkgcHJvdmlkZXMgYSBob29rIGZvciBkYXRhIHBlcnNpc3RlbmNlIGxpYnJhcmllcyB0byBp
bmplY3QgdGhlbXNlbHZlcy4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlz
IHN0b3JlIHByb3BlcnR5IHByb3ZpZGVzIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHkgcHJl
dmlvdXNseQotICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbW9kZWwgaG9vay4KLQotICAgICAg
ICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZSByZXF1aXJlZCBpbnRlcmZhY2UgaXM6Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYHN0b3JlLmZpbmQobW9kZWxOYW1lLCBmaW5kQXJndW1lbnRzKWAK
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHN0b3JlCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7T2JqZWN0fSBzdG9yZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHN0b3JlOiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFp
bmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlTmFtZSA9IHRo
aXMucm91dGVOYW1lOwotICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXQodGhpcywg
J3JvdXRlci5uYW1lc3BhY2UnKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbW9kZWxDbGFzcyA9IGNvbnRhaW5lci5sb29rdXBGYWN0b3J5KCdtb2Rl
bDonICsgbmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91
IHVzZWQgdGhlIGR5bmFtaWMgc2VnbWVudCAiICsgbmFtZSArICJfaWQgaW4geW91ciByb3V0ZSAi
ICsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlTmFtZSArICIsIGJ1dCAiICsgbmFtZXNw
YWNlICsgIi4iICsgY2xhc3NpZnkobmFtZSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBk
aWQgbm90IGV4aXN0IGFuZCB5b3UgZGlkIG5vdCBvdmVycmlkZSB5b3VyIHJvdXRlJ3MgYG1vZGVs
YCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJob29rLiIsIG1vZGVsQ2xhc3MpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGVsQ2xhc3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydChjbGFzc2lmeShuYW1lKSArICcgaGFzIG5v
IG1ldGhvZCBgZmluZGAuJywgdHlwZW9mIG1vZGVsQ2xhc3MuZmluZCA9PT0gJ2Z1bmN0aW9uJyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbENsYXNzLmZpbmQodmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBob29rIHlvdSBj
YW4gaW1wbGVtZW50IHRvIGNvbnZlcnQgdGhlIHJvdXRlJ3MgbW9kZWwgaW50byBwYXJhbWV0ZXJz
Ci0gICAgICAgICAgICAgICAgICAgIGZvciB0aGUgVVJMLgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UoJ3Bvc3QnLCB7cGF0aDogJy9wb3N0
cy86cG9zdF9pZCd9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgQXBwLlBvc3RSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgICAgICAgbW9kZWw6IGZ1bmN0aW9uKHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIHNlcnZlciByZXR1cm5zIGB7IGlkOiAxMiB9YAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5nZXRKU09OKCIvcG9zdHMvIiArIHBhcmFtcy5wb3N0X2lkKTsK
LSAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgc2VyaWFs
aXplOiBmdW5jdGlvbihtb2RlbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3
aWxsIG1ha2UgdGhlIFVSTCBgL3Bvc3RzLzEyYAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgcG9zdF9pZDogbW9kZWwuaWQgfTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBUaGUgZGVmYXVsdCBgc2VyaWFsaXplYCBtZXRob2Qgd2lsbCBpbnNlcnQgdGhl
IG1vZGVsJ3MgYGlkYCBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICByb3V0ZSdzIGR5bmFt
aWMgc2VnbWVudCAoaW4gdGhpcyBjYXNlLCBgOnBvc3RfaWRgKSBpZiB0aGUgc2VnbWVudCBjb250
YWlucyAnX2lkJy4KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHJvdXRlIGhhcyBtdWx0aXBs
ZSBkeW5hbWljIHNlZ21lbnRzIG9yIGRvZXMgbm90IGNvbnRhaW4gJ19pZCcsIGBzZXJpYWxpemVg
Ci0gICAgICAgICAgICAgICAgICAgIHdpbGwgcmV0dXJuIGBFbWJlci5nZXRQcm9wZXJ0aWVzKG1v
ZGVsLCBwYXJhbXMpYAotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCB3aGVuIGB0cmFuc2l0aW9uVG9gIGlzIGNhbGxlZCB3aXRoIGEgY29udGV4dAotICAgICAgICAg
ICAgICAgICAgICBpbiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgVVJMLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2Qgc2VyaWFsaXplCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBtb2RlbCB0aGUgcm91dGUncyBtb2RlbAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0FycmF5fSBwYXJhbXMgYW4gQXJyYXkgb2YgcGFyYW1ldGVyIG5hbWVzIGZvciB0aGUgY3VycmVu
dAotICAgICAgICAgICAgICAgICAgICAgIHJvdXRlIChpbiB0aGUgZXhhbXBsZSwgYFsncG9zdF9p
ZCddYC4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSB0aGUgc2VyaWFsaXpl
ZCBwYXJhbWV0ZXJzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2VyaWFsaXpl
OiBmdW5jdGlvbihtb2RlbCwgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5s
ZW5ndGggPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFtb2RlbCkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBw
YXJhbXNbMF0sIG9iamVjdCA9IHt9OwotCi0gICAgICAgICAgICAgICAgaWYgKC9faWQkLy50ZXN0
KG5hbWUpICYmIHBhcmFtcy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0W25hbWVdID0gZ2V0KG1vZGVsLCAiaWQiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBnZXRQcm9wZXJ0aWVzKG1vZGVsLCBwYXJhbXMp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQSBo
b29rIHlvdSBjYW4gdXNlIHRvIHNldHVwIHRoZSBjb250cm9sbGVyIGZvciB0aGUgY3VycmVudCBy
b3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0
aGUgY29udHJvbGxlciBmb3IgdGhlIGN1cnJlbnQgcm91dGUgYW5kIHRoZQotICAgICAgICAgICAg
ICAgICAgICBtb2RlbCBzdXBwbGllZCBieSB0aGUgYG1vZGVsYCBob29rLgotCi0gICAgICAgICAg
ICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBgc2V0dXBDb250cm9sbGVyYCBob29rIHNldHMgdGhl
IGBtb2RlbGAgcHJvcGVydHkgb2YKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRyb2xsZXIg
dG8gdGhlIGBtb2RlbGAuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IGltcGxlbWVudCB0
aGUgYHNldHVwQ29udHJvbGxlcmAgaG9vayBpbiB5b3VyIFJvdXRlLCBpdCB3aWxsCi0gICAgICAg
ICAgICAgICAgICAgIHByZXZlbnQgdGhpcyBkZWZhdWx0IGJlaGF2aW9yLiBJZiB5b3Ugd2FudCB0
byBwcmVzZXJ2ZSB0aGF0IGJlaGF2aW9yCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gaW1wbGVt
ZW50aW5nIHlvdXIgYHNldHVwQ29udHJvbGxlcmAgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBjYWxs
Ci0gICAgICAgICAgICAgICAgICAgIGBfc3VwZXJgOgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5QaG90b3NSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFwcC5QaG90by5maW5kKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgIHNldHVwQ29udHJvbGxlcjogZnVu
Y3Rpb24gKGNvbnRyb2xsZXIsIG1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YWxsIF9zdXBlciBmb3IgZGVmYXVsdCBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc3VwZXIoY29udHJvbGxlciwgbW9kZWwpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSW1wbGVtZW50IHlvdXIgY3VzdG9tIHNldHVwIGFmdGVyCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRyb2xsZXJGb3IoJ2FwcGxpY2F0aW9uJykuc2V0KCdzaG93aW5nUGhvdG9z
JywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBt
ZWFucyB0aGF0IHlvdXIgdGVtcGxhdGUgd2lsbCBnZXQgYSBwcm94eSBmb3IgdGhlIG1vZGVsIGFz
IGl0cwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBhbmQgeW91IGNhbiBhY3QgYXMgdGhv
dWdoIHRoZSBtb2RlbCBpdHNlbGYgd2FzIHRoZSBjb250ZXh0LgotCi0gICAgICAgICAgICAgICAg
ICAgIFRoZSBwcm92aWRlZCBjb250cm9sbGVyIHdpbGwgYmUgb25lIHJlc29sdmVkIGJhc2VkIG9u
IHRoZSBuYW1lCi0gICAgICAgICAgICAgICAgICAgIG9mIHRoaXMgcm91dGUuCi0KLSAgICAgICAg
ICAgICAgICAgICAgSWYgbm8gZXhwbGljaXQgY29udHJvbGxlciBpcyBkZWZpbmVkLCBFbWJlciB3
aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIGFuIGFwcHJvcHJp
YXRlIGNvbnRyb2xsZXIgZm9yIHRoZSBtb2RlbC4KLQotICAgICAgICAgICAgICAgICAgICAqIGlm
IHRoZSBtb2RlbCBpcyBhbiBgRW1iZXIuQXJyYXlgIChpbmNsdWRpbmcgcmVjb3JkIGFycmF5cyBm
cm9tIEVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgRGF0YSksIHRoZSBjb250cm9sbGVyIGlz
IGFuIGBFbWJlci5BcnJheUNvbnRyb2xsZXJgLgotICAgICAgICAgICAgICAgICAgICAqIG90aGVy
d2lzZSwgdGhlIGNvbnRyb2xsZXIgaXMgYW4gYEVtYmVyLk9iamVjdENvbnRyb2xsZXJgLgotCi0g
ICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSByb3V0ZXI6Ci0K
LSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLlJvdXRl
ci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgn
cG9zdCcsIHtwYXRoOiAnL3Bvc3RzLzpwb3N0X2lkJ30pOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgRm9yIHRo
ZSBgcG9zdGAgcm91dGUsIGEgY29udHJvbGxlciBuYW1lZCBgQXBwLlBvc3RDb250cm9sbGVyYCB3
b3VsZAotICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIGlmIGl0IGlzIGRlZmluZWQuIElmIGl0
IGlzIG5vdCBkZWZpbmVkLCBhbiBgRW1iZXIuT2JqZWN0Q29udHJvbGxlcmAKLSAgICAgICAgICAg
ICAgICAgICAgaW5zdGFuY2Ugd291bGQgYmUgdXNlZC4KLQotICAgICAgICAgICAgICAgICAgICBF
eGFtcGxlCi0KLSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAg
QXBwLlBvc3RSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAg
ICAgc2V0dXBDb250cm9sbGVyOiBmdW5jdGlvbihjb250cm9sbGVyLCBtb2RlbCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zZXQoJ21vZGVsJywgbW9kZWwpOwotICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2V0dXBDb250cm9sbGVy
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Q29udHJvbGxlcn0gY29udHJvbGxlciBpbnN0
YW5jZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gbW9kZWwKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9uKGNvbnRy
b2xsZXIsIGNvbnRleHQsIHRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udHJv
bGxlciAmJiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSkgewotICAgICAgICAgICAgICAgICAgICBz
ZXQoY29udHJvbGxlciwgJ21vZGVsJywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVy
bnMgdGhlIGNvbnRyb2xsZXIgZm9yIGEgcGFydGljdWxhciByb3V0ZSBvciBuYW1lLgotCi0gICAg
ICAgICAgICAgICAgICAgIFRoZSBjb250cm9sbGVyIGluc3RhbmNlIG11c3QgYWxyZWFkeSBoYXZl
IGJlZW4gY3JlYXRlZCwgZWl0aGVyIHRocm91Z2ggZW50ZXJpbmcgdGhlCi0gICAgICAgICAgICAg
ICAgICAgIGFzc29jaWF0ZWQgcm91dGUgb3IgdXNpbmcgYGdlbmVyYXRlQ29udHJvbGxlcmAuCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLlBvc3RS
b3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgc2V0dXBD
b250cm9sbGVyOiBmdW5jdGlvbihjb250cm9sbGVyLCBwb3N0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9zdXBlcihjb250cm9sbGVyLCBwb3N0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udHJvbGxlckZvcigncG9zdHMnKS5zZXQoJ2N1cnJlbnRQb3N0JywgcG9z
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjb250
cm9sbGVyRm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBu
YW1lIG9mIHRoZSByb3V0ZSBvciBjb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgIEByZXR1
cm4ge0VtYmVyLkNvbnRyb2xsZXJ9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Y29udHJvbGxlckZvcjogZnVuY3Rpb24obmFtZSwgX3NraXBBc3NlcnQpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5jb250YWluZXI7Ci0gICAgICAgICAgICAgICAgdmFy
IHJvdXRlID0gY29udGFpbmVyLmxvb2t1cCgncm91dGU6JyArIG5hbWUpOwotICAgICAgICAgICAg
ICAgIHZhciBjb250cm9sbGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKHJvdXRlICYmIHJvdXRl
LmNvbnRyb2xsZXJOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByb3V0ZS5jb250
cm9sbGVyTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjb250cm9s
bGVyID0gY29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjonICsgbmFtZSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBOT1RFOiBXZSdyZSBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgdGhhdCBza2lwQXNz
ZXJ0IGlzIHRydWUsIGJlY2F1c2UgYWNjb3JkaW5nCi0gICAgICAgICAgICAgICAgLy8gICB0byB0
aGUgb2xkIEFQSSB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMgbW9kZWwuIFdlIGRvIG5vdCB3YW50
IHBlb3BsZSB3aG8KLSAgICAgICAgICAgICAgICAvLyAgIHBhc3NlZCBhIG1vZGVsIHRvIHNraXAg
dGhlIGFzc2VydGlvbi4KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBjb250cm9s
bGVyIG5hbWVkICciICsgbmFtZSArICInIGNvdWxkIG5vdCBiZSBmb3VuZC4gTWFrZSBzdXJlICIg
KwotICAgICAgICAgICAgICAgICJ0aGF0IHRoaXMgcm91dGUgZXhpc3RzIGFuZCBoYXMgYWxyZWFk
eSBiZWVuIGVudGVyZWQgYXQgbGVhc3QgIiArCi0gICAgICAgICAgICAgICAgIm9uY2UuIElmIHlv
dSBhcmUgYWNjZXNzaW5nIGEgY29udHJvbGxlciBub3QgYXNzb2NpYXRlZCB3aXRoIGEgIiArCi0g
ICAgICAgICAgICAgICAgInJvdXRlLCBtYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgY2xhc3MgaXMg
ZXhwbGljaXRseSBkZWZpbmVkLiIsCi0gICAgICAgICAgICAgICAgY29udHJvbGxlciB8fCBfc2tp
cEFzc2VydCA9PT0gdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlcjsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBH
ZW5lcmF0ZXMgYSBjb250cm9sbGVyIGZvciBhIHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAg
IElmIHRoZSBvcHRpb25hbCBtb2RlbCBpcyBwYXNzZWQgdGhlbiB0aGUgY29udHJvbGxlciB0eXBl
IGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSwKLSAgICAgICAgICAgICAgICAgICAgZS5nLiwg
YW4gQXJyYXlDb250cm9sbGVyIGZvciBhcnJheXMuCi0KLSAgICAgICAgICAgICAgICAgICAgRXhh
bXBsZQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFw
cC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAg
IHNldHVwQ29udHJvbGxlcjogZnVuY3Rpb24oY29udHJvbGxlciwgcG9zdCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoY29udHJvbGxlciwgcG9zdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ29udHJvbGxlcigncG9zdHMnLCBwb3N0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdlbmVyYXRlQ29u
dHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFt
ZSBvZiB0aGUgY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0g
bW9kZWwgdGhlIG1vZGVsIHRvIGluZmVyIHRoZSB0eXBlIG9mIHRoZSBjb250cm9sbGVyIChvcHRp
b25hbCkKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZW5lcmF0ZUNvbnRyb2xs
ZXI6IGZ1bmN0aW9uKG5hbWUsIG1vZGVsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5l
ciA9IHRoaXMuY29udGFpbmVyOwotCi0gICAgICAgICAgICAgICAgbW9kZWwgPSBtb2RlbCB8fCB0
aGlzLm1vZGVsRm9yKG5hbWUpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQ29u
dHJvbGxlcihjb250YWluZXIsIG5hbWUsIG1vZGVsKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBtb2RlbCBvZiBhIHBh
cmVudCAob3IgYW55IGFuY2VzdG9yKSByb3V0ZQotICAgICAgICAgICAgICAgICAgICBpbiBhIHJv
dXRlIGhpZXJhcmNoeS4gIER1cmluZyBhIHRyYW5zaXRpb24sIGFsbCByb3V0ZXMKLSAgICAgICAg
ICAgICAgICAgICAgbXVzdCByZXNvbHZlIGEgbW9kZWwgb2JqZWN0LCBhbmQgaWYgYSByb3V0ZQot
ICAgICAgICAgICAgICAgICAgICBuZWVkcyBhY2Nlc3MgdG8gYSBwYXJlbnQgcm91dGUncyBtb2Rl
bCBpbiBvcmRlciB0bwotICAgICAgICAgICAgICAgICAgICByZXNvbHZlIGEgbW9kZWwgKG9yIGp1
c3QgcmV1c2UgdGhlIG1vZGVsIGZyb20gYSBwYXJlbnQpLAotICAgICAgICAgICAgICAgICAgICBp
dCBjYW4gY2FsbCBgdGhpcy5tb2RlbEZvcih0aGVOYW1lT2ZQYXJlbnRSb3V0ZSlgIHRvCi0gICAg
ICAgICAgICAgICAgICAgIHJldHJpZXZlIGl0LgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1w
bGUKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAu
Um91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVz
b3VyY2UoJ3Bvc3QnLCB7IHBhdGg6ICcvcG9zdC86cG9zdF9pZCcgfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSgnY29tbWVudHMnKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICBBcHAuQ29tbWVudHNSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck1vZGVsOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCgncG9zdCcsIHRoaXMubW9kZWxGb3IoJ3Bv
c3QnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IG1vZGVsRm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBu
YW1lIG9mIHRoZSByb3V0ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRo
ZSBtb2RlbCBvYmplY3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtb2RlbEZv
cjogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IHRoaXMuY29u
dGFpbmVyLmxvb2t1cCgncm91dGU6JyArIG5hbWUpOwotICAgICAgICAgICAgICAgIHZhciB0cmFu
c2l0aW9uID0gdGhpcy5yb3V0ZXIgPyB0aGlzLnJvdXRlci5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlv
biA6IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbWlkLXRyYW5zaXRpb24s
IHdlIHdhbnQgdG8gdHJ5IGFuZCBsb29rIHVwCi0gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZWQg
cGFyZW50IGNvbnRleHRzIG9uIHRoZSBjdXJyZW50IHRyYW5zaXRpb25FdmVudC4KLSAgICAgICAg
ICAgICAgICBpZiAodHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWxM
b29rdXBOYW1lID0gKHJvdXRlICYmIHJvdXRlLnJvdXRlTmFtZSkgfHwgbmFtZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24ucmVzb2x2ZWRNb2RlbHMuaGFzT3duUHJvcGVydHko
bW9kZWxMb29rdXBOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5z
aXRpb24ucmVzb2x2ZWRNb2RlbHNbbW9kZWxMb29rdXBOYW1lXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZSAm
JiByb3V0ZS5jdXJyZW50TW9kZWw7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQSBob29rIHlvdSBjYW4gdXNlIHRvIHJlbmRlciB0aGUgdGVt
cGxhdGUgZm9yIHRoZSBjdXJyZW50IHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBjb250cm9sbGVyIGZvciB0aGUgY3VycmVudCByb3V0
ZSBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgIG1vZGVsIHN1cHBsaWVkIGJ5IHRoZSBgbW9k
ZWxgIGhvb2suIEJ5IGRlZmF1bHQsIGl0IHJlbmRlcnMgdGhlIHJvdXRlJ3MKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcGxhdGUsIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY29udHJvbGxlciBmb3IgdGhl
IHJvdXRlLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlk
ZGVuIHRvIHNldCB1cCBhbmQgcmVuZGVyIGFkZGl0aW9uYWwgb3IKLSAgICAgICAgICAgICAgICAg
ICAgYWx0ZXJuYXRpdmUgdGVtcGxhdGVzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5Qb3N0c1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICByZW5kZXJUZW1wbGF0ZTogZnVuY3Rpb24oY29udHJvbGxl
ciwgbW9kZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYXZDb250cm9sbGVyID0g
dGhpcy5jb250cm9sbGVyRm9yKCdmYXZvcml0ZVBvc3QnKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVuZGVyIHRoZSBgZmF2b3JpdGVQb3N0YCB0ZW1wbGF0ZSBpbnRvCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgb3V0bGV0IGBwb3N0c2AsIGFuZCBkaXNwbGF5IHRoZSBg
ZmF2b3JpdGVQb3N0YAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlci4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCdmYXZvcml0ZVBvc3QnLCB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dGxldDogJ3Bvc3RzJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udHJvbGxlcjogZmF2Q29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBy
ZW5kZXJUZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gY29udHJv
bGxlciB0aGUgcm91dGUncyBjb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
T2JqZWN0fSBtb2RlbCB0aGUgcm91dGUncyBtb2RlbAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbihjb250cm9sbGVyLCBtb2RlbCkgewot
ICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgYHJlbmRlcmAgaXMgdXNlZCB0byByZW5kZXIg
YSB0ZW1wbGF0ZSBpbnRvIGEgcmVnaW9uIG9mIGFub3RoZXIgdGVtcGxhdGUKLSAgICAgICAgICAg
ICAgICAgICAgKGluZGljYXRlZCBieSBhbiBge3tvdXRsZXR9fWApLiBgcmVuZGVyYCBpcyB1c2Vk
IGJvdGggZHVyaW5nIHRoZSBlbnRyeQotICAgICAgICAgICAgICAgICAgICBwaGFzZSBvZiByb3V0
aW5nICh2aWEgdGhlIGByZW5kZXJUZW1wbGF0ZWAgaG9vaykgYW5kIGxhdGVyIGluIHJlc3BvbnNl
IHRvCi0gICAgICAgICAgICAgICAgICAgIHVzZXIgaW50ZXJhY3Rpb24uCi0KLSAgICAgICAgICAg
ICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgbWluaW1hbCByb3V0ZXIg
YW5kIHRlbXBsYXRlczoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAg
ICAgICAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgIHRo
aXMucmVzb3VyY2UoJ3Bob3RvcycpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAg
ICAgICAgICAgICAgICAgICA8IS0tIGFwcGxpY2F0aW9uLmhicyAtLT4KLSAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0nc29tZXRoaW5nLWluLXRoZS1hcHAtaGJzJz4KLSAgICAgICAgICAg
ICAgICAgICAgICB7e291dGxldCAiYW5PdXRsZXROYW1lIn19Ci0gICAgICAgICAgICAgICAgICAg
IDwvZGl2PgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBg
YGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgICAgICAgIDwhLS0gcGhvdG9zLmhicyAtLT4KLSAg
ICAgICAgICAgICAgICAgICAgPGgxPlBob3RvczwvaDE+Ci0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVuZGVyIGBwaG90b3MuaGJzYCBpbnRv
IHRoZSBgImFuT3V0bGV0TmFtZSJgIG91dGxldCBvZgotICAgICAgICAgICAgICAgICAgICBgYXBw
bGljYXRpb24uaGJzYCBieSBjYWxsaW5nIGByZW5kZXJgOgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIC8vIHBvc3RzIHJvdXRlCi0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
VGVtcGxhdGU6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRl
cigncG9zdHMnLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGludG86ICdhcHBsaWNhdGlv
bicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxldDogJ2FuT3V0bGV0TmFtZScKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgYHJlbmRlcmAgYWRkaXRpb25hbGx5IGFsbG93cyB5b3UgdG8gc3VwcGx5IHdoaWNo
IGB2aWV3YCwgYGNvbnRyb2xsZXJgLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgYG1vZGVsYCBv
YmplY3RzIHNob3VsZCBiZSBsb2FkZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVuZGVyZWQg
dGVtcGxhdGUuCi0KLQotICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAg
ICAgICAvLyBwb3N0cyByb3V0ZQotICAgICAgICAgICAgICAgICAgICBFbWJlci5Sb3V0ZS5leHRl
bmQoewotICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlvbihjb250
cm9sbGVyLCBtb2RlbCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcigncG9z
dHMnLCB7ICAgIC8vIHRoZSB0ZW1wbGF0ZSB0byByZW5kZXIsIHJlZmVyZW5jZWQgYnkgbmFtZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvOiAnYXBwbGljYXRpb24nLCAgICAvLyB0aGUg
dGVtcGxhdGUgdG8gcmVuZGVyIGludG8sIHJlZmVyZW5jZWQgYnkgbmFtZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRsZXQ6ICdhbk91dGxldE5hbWUnLCAvLyB0aGUgb3V0bGV0IGluc2lk
ZSBgb3B0aW9ucy50ZW1wbGF0ZWAgdG8gcmVuZGVyIGludG8uCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHZpZXc6ICdhVmlld05hbWUnLCAgICAgIC8vIHRoZSB2aWV3IHRvIHVzZSBmb3IgdGhp
cyB0ZW1wbGF0ZSwgcmVmZXJlbmNlZCBieSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXI6ICdzb21lQ29udHJvbGxlck5hbWUnLCAvLyB0aGUgY29udHJvbGxlciB0byB1
c2UgZm9yIHRoaXMgdGVtcGxhdGUsIHJlZmVyZW5jZWQgYnkgbmFtZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2RlbDogbW9kZWwgICAgICAgICAgICAvLyB0aGUgbW9kZWwgdG8gc2V0IG9u
IGBvcHRpb25zLmNvbnRyb2xsZXJgLgotICAgICAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUaGUgc3RyaW5nIHZhbHVlcyBwcm92
aWRlZCBmb3IgdGhlIHRlbXBsYXRlIG5hbWUsIHZpZXcsIGFuZCBjb250cm9sbGVyCi0gICAgICAg
ICAgICAgICAgICAgIHdpbGwgZXZlbnR1YWxseSBwYXNzIHRocm91Z2ggdG8gdGhlIHJlc29sdmVy
IGZvciBsb29rdXAuIFNlZQotICAgICAgICAgICAgICAgICAgICBFbWJlci5SZXNvbHZlciBmb3Ig
aG93IHRoZXNlIGFyZSBtYXBwZWQgdG8gSmF2YVNjcmlwdCBvYmplY3RzIGluIHlvdXIKLSAgICAg
ICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCi0KLSAgICAgICAgICAgICAgICAgICAgTm90IGFs
bCBvcHRpb25zIG5lZWQgdG8gYmUgcGFzc2VkIHRvIGByZW5kZXJgLiBEZWZhdWx0IHZhbHVlcyB3
aWxsIGJlIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhl
IHJvdXRlIHNwZWNpZmllZCBpbiB0aGUgcm91dGVyIG9yIHRoZSBSb3V0ZSdzCi0gICAgICAgICAg
ICAgICAgICAgIGBjb250cm9sbGVyTmFtZWAsIGB2aWV3TmFtZWAgYW5kIGFuZCBgdGVtcGxhdGVO
YW1lYCBwcm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIC8vIHJvdXRlcgot
ICAgICAgICAgICAgICAgICAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucm91dGUoJ2luZGV4Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZXNvdXJjZSgncG9zdCcsIHtwYXRoOiAnL3Bvc3RzLzpwb3N0X2lkJ30pOwotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
ICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgLy8gcG9zdCByb3V0ZQotICAgICAgICAg
ICAgICAgICAgICBQb3N0Um91dGUgPSBBcHAuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICAgICAgICByZW5kZXJUZW1wbGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlbmRlcigpOyAvLyBhbGwgZGVmYXVsdHMgYXBwbHkKLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYFBvc3RSb3V0ZWAsIGRl
ZmluZWQgYnkgdGhlIHJvdXRlciwgaXMgYHBvc3RgLgotCi0gICAgICAgICAgICAgICAgICAgIFRo
ZSBmb2xsb3dpbmcgZXF1aXZhbGVudCBkZWZhdWx0IG9wdGlvbnMgd2lsbCBiZSBhcHBsaWVkIHdo
ZW4KLSAgICAgICAgICAgICAgICAgICAgdGhlIFJvdXRlIGNhbGxzIGByZW5kZXJgOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVuZGVyKCdwb3N0JywgeyAgLy8gdGhlIHRlbXBsYXRlIG5hbWUgYXNz
b2NpYXRlZCB3aXRoICdwb3N0JyBSb3V0ZQotICAgICAgICAgICAgICAgICAgICAgIGludG86ICdh
cHBsaWNhdGlvbicsIC8vIHRoZSBwYXJlbnQgcm91dGUgdG8gJ3Bvc3QnIFJvdXRlCi0gICAgICAg
ICAgICAgICAgICAgICAgb3V0bGV0OiAnbWFpbicsICAgICAgLy8ge3tvdXRsZXR9fSBhbmQge3tv
dXRsZXQgJ21haW4nIGFyZSBzeW5vbnltb3VzfX0sCi0gICAgICAgICAgICAgICAgICAgICAgdmll
dzogJ3Bvc3QnLCAgICAgICAgLy8gdGhlIHZpZXcgYXNzb2NpYXRlZCB3aXRoIHRoZSAncG9zdCcg
Um91dGUKLSAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiAncG9zdCcsICAvLyB0aGUg
Y29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlICdwb3N0JyBSb3V0ZQotICAgICAgICAgICAg
ICAgICAgICB9KQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAg
ICBCeSBkZWZhdWx0IHRoZSBjb250cm9sbGVyJ3MgYG1vZGVsYCB3aWxsIGJlIHRoZSByb3V0ZSdz
IG1vZGVsLCBzbyBpdCBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIHBh
c3NlZCB1bmxlc3MgeW91IHdpc2ggdG8gY2hhbmdlIHdoaWNoIG1vZGVsIGlzIGJlaW5nIHVzZWQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW5kZXIKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIHJlbmRl
cgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyB0aGUgb3B0aW9u
cwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5pbnRvIHRoZSB0
ZW1wbGF0ZSB0byByZW5kZXIgaW50bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZWQgYnkgbmFtZS4gRGVmYXVsdHMgdG8gdGhlIHBhcmVudCB0ZW1wbGF0ZQot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5vdXRsZXQgdGhlIG91
dGxldCBpbnNpZGUgYG9wdGlvbnMudGVtcGxhdGVgIHRvIHJlbmRlciBpbnRvLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gJ21haW4nCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmNvbnRyb2xsZXIgdGhlIGNvbnRyb2xs
ZXIgdG8gdXNlIGZvciB0aGlzIHRlbXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVmZXJlbmNlZCBieSBuYW1lLiBEZWZhdWx0cyB0byB0aGUgUm91dGUncyBwYWly
ZWQgY29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9u
cy5tb2RlbCB0aGUgbW9kZWwgb2JqZWN0IHRvIHNldCBvbiBgb3B0aW9ucy5jb250cm9sbGVyYAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIHJldHVy
biB2YWx1ZSBvZiB0aGUgUm91dGUncyBtb2RlbCBob29rCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7Ci0gICAgICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCJUaGUgbmFtZSBpbiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGlzIHVu
ZGVmaW5lZCIsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gIWlzTm9uZShhcmd1bWVudHNbMF0pIDog
dHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbmFtZVBhc3NlZCA9IHR5cGVvZiBuYW1lID09
PSAnc3RyaW5nJyAmJiAhIW5hbWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUg
PT09ICdvYmplY3QnICYmICFvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMg
PSBuYW1lOwotICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5yb3V0ZU5hbWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307
Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5uYW1lUGFzc2VkID0gbmFtZVBhc3NlZDsKLQotICAg
ICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZU5hbWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAobmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9cLy9nLCAnLicp
OwotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWUgPSBuYW1lOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJvdXRlTmFtZTsK
LSAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lID0gdGhpcy50ZW1wbGF0ZU5hbWUgfHwg
bmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmlld05hbWUg
PSBvcHRpb25zLnZpZXcgfHwgbmFtZVBhc3NlZCAmJiBuYW1lIHx8IHRoaXMudmlld05hbWUgfHwg
bmFtZTsKLQotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcjsK
LSAgICAgICAgICAgICAgICB2YXIgdmlldyA9IGNvbnRhaW5lci5sb29rdXAoJ3ZpZXc6JyArIHZp
ZXdOYW1lKTsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSB2aWV3ID8gdmlldy5nZXQo
J3RlbXBsYXRlJykgOiBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgewot
ICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbnRhaW5lci5sb29rdXAoJ3RlbXBsYXRl
OicgKyB0ZW1wbGF0ZU5hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICghdmlldyAmJiAhdGVtcGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCJDb3VsZCBub3QgZmluZCBcIiIgKyBuYW1lICsgIlwiIHRlbXBsYXRlIG9yIHZpZXcuIiwg
RW1iZXIuaXNFbXB0eShhcmd1bWVudHNbMF0pKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdl
dCh0aGlzLnJvdXRlciwgJ25hbWVzcGFjZS5MT0dfVklFV19MT09LVVBTJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEVtYmVyLkxvZ2dlci5pbmZvKCJDb3VsZCBub3QgZmluZCBcIiIgKyBu
YW1lICsgIlwiIHRlbXBsYXRlIG9yIHZpZXcuIE5vdGhpbmcgd2lsbCBiZSByZW5kZXJlZCIsIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ3RlbXBsYXRlOicgKyBuYW1l
IAotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSBub3JtYWxpemVPcHRpb25zKHRoaXMsIG5hbWUsIHRlbXBsYXRlLCBv
cHRpb25zKTsKLSAgICAgICAgICAgICAgICB2aWV3ID0gc2V0dXBWaWV3KHZpZXcsIGNvbnRhaW5l
ciwgb3B0aW9ucyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRsZXQgPT09ICdt
YWluJykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RSZW5kZXJlZFRlbXBsYXRlID0g
bmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhcHBlbmRWaWV3KHRo
aXMsIHZpZXcsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIERpc2Nvbm5lY3RzIGEgdmlldyB0aGF0IGhhcyBiZWVuIHJlbmRl
cmVkIGludG8gYW4gb3V0bGV0LgotCi0gICAgICAgICAgICAgICAgICAgIFlvdSBtYXkgcGFzcyBh
bnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBgZGlzY29ubmVjdE91dGxldGA6
Ci0KLSAgICAgICAgICAgICAgICAgICAgKiBgb3V0bGV0YDogdGhlIG5hbWUgb2YgdGhlIG91dGxl
dCB0byBjbGVhciAoZGVmYXVsdDogJ21haW4nKQotICAgICAgICAgICAgICAgICAgICAqIGBwYXJl
bnRWaWV3YDogdGhlIG5hbWUgb2YgdGhlIHZpZXcgY29udGFpbmluZyB0aGUgb3V0bGV0IHRvIGNs
ZWFyCi0gICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiB0aGUgdmlldyByZW5kZXJlZCBi
eSB0aGUgcGFyZW50IHJvdXRlKQotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgICAgICAgQXBwLkFwcGxpY2F0
aW9uUm91dGUgPSBBcHAuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uKGV2dCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcihldnQubW9kYWxOYW1lLCB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGV0OiAnbW9kYWwnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludG86ICdhcHBsaWNhdGlvbicKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
ICAgICAgICAgaGlkZU1vZGFsOiBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kaXNjb25uZWN0T3V0bGV0KHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRsZXQ6ICdtb2RhbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Vmll
dzogJ2FwcGxpY2F0aW9uJwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAg
ICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHBhc3MgdGhlIGBvdXRsZXRgIG5hbWUgZGlyZWN0bHkg
YXMgYSBzdHJpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBoaWRlTW9kYWw6IGZ1bmN0aW9u
KGV2dCkgewotICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdE91dGxldCgnbW9k
YWwnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGRpc2Nvbm5lY3RPdXRsZXQKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBvcHRpb25zIHRoZSBvcHRpb25zIGhhc2gg
b3Igb3V0bGV0IG5hbWUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkaXNjb25u
ZWN0T3V0bGV0OiBmdW5jdGlvbihvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcHRp
b25zIHx8IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgb3V0bGV0TmFtZSA9IG9wdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMg
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRsZXQgPSBvdXRsZXROYW1lOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcHRpb25zLnBhcmVudFZpZXcgPSBv
cHRpb25zLnBhcmVudFZpZXcgPyBvcHRpb25zLnBhcmVudFZpZXcucmVwbGFjZSgvXC8vZywgJy4n
KSA6IHBhcmVudFRlbXBsYXRlKHRoaXMpOwotICAgICAgICAgICAgICAgIG9wdGlvbnMub3V0bGV0
ID0gb3B0aW9ucy5vdXRsZXQgfHwgJ21haW4nOwotCi0gICAgICAgICAgICAgICAgdmFyIHBhcmVu
dFZpZXcgPSB0aGlzLnJvdXRlci5fbG9va3VwQWN0aXZlVmlldyhvcHRpb25zLnBhcmVudFZpZXcp
OwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmVudFZpZXcuZGlzY29ubmVjdE91dGxldChvcHRpb25zLm91dGxldCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMudGVhcmRvd25WaWV3cygpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB0ZWFyZG93blZpZXdzCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgdGVhcmRvd25WaWV3czogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGVhciBkb3duIHRoZSB0b3AgbGV2ZWwgdmlldwotICAgICAgICAgICAgICAg
IGlmICh0aGlzLnRlYXJkb3duVG9wTGV2ZWxWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMudGVhcmRvd25Ub3BMZXZlbFZpZXcoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUZWFyIGRvd24gYW55IG91dGxldHMgcmVuZGVyZWQgd2l0aCAnaW50bycKLSAg
ICAgICAgICAgICAgICB2YXIgdGVhcmRvd25PdXRsZXRWaWV3cyA9IHRoaXMudGVhcmRvd25PdXRs
ZXRWaWV3cyB8fCBbXTsKLSAgICAgICAgICAgICAgICBmb3JFYWNoKHRlYXJkb3duT3V0bGV0Vmll
d3MsIGZ1bmN0aW9uKHRlYXJkb3duT3V0bGV0VmlldykgewotICAgICAgICAgICAgICAgICAgICB0
ZWFyZG93bk91dGxldFZpZXcoKTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLnRlYXJkb3duVG9wTGV2ZWxWaWV3OwotICAgICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLnRlYXJkb3duT3V0bGV0Vmlld3M7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMubGFzdFJlbmRlcmVkVGVtcGxhdGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIHZhciBkZWZhdWx0UVBNZXRhID0gewotICAgICAgICAgICAgcXBzOiBbXSwKLSAgICAg
ICAgICAgIG1hcDoge30sCi0gICAgICAgICAgICBzdGF0ZXM6IHt9Ci0gICAgICAgIH07Ci0KLQot
ICAgICAgICBSb3V0ZS5yZW9wZW4oewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgICAgQ29uZmlndXJhdGlvbiBoYXNoIGZvciB0aGlzIHJvdXRlJ3MgcXVlcnlQYXJhbXMuIFRo
ZSBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBh
bmQgdGhlaXIgZGVmYXVsdHMgYXJlIGFzIGZvbGxvd3MKLSAgICAgICAgICAgICAgICAgICAgICAo
YXNzdW1pbmcgYSBxdWVyeSBwYXJhbSB3aG9zZSBVUkwga2V5IGlzIGBwYWdlYCk6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1z
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEJ5IGRlZmF1bHQsIGNvbnRyb2xsZXIgcXVlcnkgcGFyYW0gcHJvcGVydGllcyBk
b24ndAotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVzZSBhIGZ1bGwgdHJhbnNpdGlv
biB3aGVuIHRoZXkgYXJlIGNoYW5nZWQsIGJ1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyByYXRoZXIgb25seSBjYXVzZSB0aGUgVVJMIHRvIHVwZGF0ZS4gU2V0dGluZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBgcmVmcmVzaE1vZGVsYCB0byB0cnVlIHdpbGwgY2F1c2UgYW4g
ImluLXBsYWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIG9j
Y3VyLCB3aGVyZWJ5IHRoZSBtb2RlbCBob29rcyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyByb3V0ZSAoYW5kIGFueSBjaGlsZCByb3V0ZXMpIHdpbGwgcmUtZmlyZSwgYWxs
b3dpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geW91IHRvIHJlbG9hZCBtb2RlbHMg
KGUuZy4sIGZyb20gdGhlIHNlcnZlcikgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHVwZGF0ZWQgcXVlcnkgcGFyYW0gdmFsdWVzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWZyZXNoTW9kZWw6IGZhbHNlLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEJ5IGRlZmF1bHQsIGNoYW5nZXMgdG8gY29udHJvbGxlciBxdWVyeSBwYXJhbSBwcm9wZXJ0aWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlIHRoZSBVUkwgdG8gdXBkYXRlIHZp
YSBgcHVzaFN0YXRlYCwgd2hpY2ggbWVhbnMgYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaXRlbSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBicm93c2VyJ3MgaGlzdG9yeSwgYWxsb3dpbmcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geW91IHRvIHVzZSB0aGUgYmFjayBidXR0b24g
dG8gcmVzdG9yZSB0aGUgYXBwIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBw
cmV2aW91cyBzdGF0ZSBiZWZvcmUgdGhlIHF1ZXJ5IHBhcmFtIHByb3BlcnR5IHdhcyBjaGFuZ2Vk
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGByZXBsYWNlYCB0byB0cnVl
IHdpbGwgdXNlIGByZXBsYWNlU3RhdGVgIChvciBpdHMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFzaCBsb2NhdGlvbiBlcXVpdmFsZW50KSwgd2hpY2ggY2F1c2VzIG5vIGJyb3dzZXIg
aGlzdG9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVtIHRvIGJlIGFkZGVkLiBU
aGlzIG9wdGlvbnMgbmFtZSBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIHNhbWUgYXMgdGhlIGBsaW5rLXRvYCBoZWxwZXIncyBgcmVwbGFjZWAg
b3B0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlOiBmYWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBxdWVyeVBh
cmFtcwotICAgICAgICAgICAgICAgICAgICAgIEBmb3IgRW1iZXIuUm91dGUKLSAgICAgICAgICAg
ICAgICAgICAgICBAdHlwZSBIYXNoCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBxdWVyeVBhcmFtczoge30sCi0KLSAgICAgICAgICAgIF9xcDogY29tcHV0ZWQoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJOYW1lID0gdGhpcy5jb250cm9sbGVy
TmFtZSB8fCB0aGlzLnJvdXRlTmFtZTsKLSAgICAgICAgICAgICAgICB2YXIgZnVsbE5hbWUgPSB0
aGlzLmNvbnRhaW5lci5ub3JtYWxpemUoJ2NvbnRyb2xsZXI6JyArIGNvbnRyb2xsZXJOYW1lKTsK
LSAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlckNsYXNzID0gdGhpcy5jb250YWluZXIubG9v
a3VwRmFjdG9yeShmdWxsTmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xsZXJD
bGFzcykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdFFQTWV0YTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlclByb3RvID0gY29u
dHJvbGxlckNsYXNzLnByb3RvKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHFwUHJvcHMgPSBnZXQo
Y29udHJvbGxlclByb3RvLCAnX25vcm1hbGl6ZWRRdWVyeVBhcmFtcycpOwotICAgICAgICAgICAg
ICAgIHZhciBjYWNoZU1ldGEgPSBnZXQoY29udHJvbGxlclByb3RvLCAnX2NhY2hlTWV0YScpOwot
Ci0gICAgICAgICAgICAgICAgdmFyIHFwcyA9IFtdLCBtYXAgPSB7fSwgc2VsZiA9IHRoaXM7Ci0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcXBQcm9wcykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXFwUHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBkZXNjID0gcXBQcm9wc1twcm9wTmFtZV0sCi0gICAgICAg
ICAgICAgICAgICAgIHVybEtleSA9IGRlc2MuYXMgfHwgdGhpcy5zZXJpYWxpemVRdWVyeVBhcmFt
S2V5KHByb3BOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZ2V0KGNv
bnRyb2xsZXJQcm90bywgcHJvcE5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0Fy
cmF5KGRlZmF1bHRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1
ZSA9IEVtYmVyLkEoZGVmYXVsdFZhbHVlLnNsaWNlKCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlT2YoZGVmYXVsdFZhbHVlKSwK
LSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlU2VyaWFsaXplZCA9IHRoaXMuc2VyaWFs
aXplUXVlcnlQYXJhbShkZWZhdWx0VmFsdWUsIHVybEtleSwgdHlwZSksCi0gICAgICAgICAgICAg
ICAgICAgIGZwcm9wID0gY29udHJvbGxlck5hbWUgKyAnOicgKyBwcm9wTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgcXAgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWY6IGRlZmF1bHRW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkZWY6IGRlZmF1bHRWYWx1ZVNlcmlhbGl6
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsS2V5OiB1cmxLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wOiBw
cm9wTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcm9wOiBmcHJvcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN0cmw6IGNvbnRyb2xsZXJOYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY1Byb3RvOiBjb250cm9sbGVyUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dmFsdWU6IGRlZmF1bHRWYWx1ZVNlcmlhbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBj
YWNoZVR5cGU6IGRlc2Muc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogdGhp
cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlTWV0YTogY2FjaGVNZXRhW3Byb3BOYW1l
XQotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIG1hcFtwcm9w
TmFtZV0gPSBtYXBbdXJsS2V5XSA9IG1hcFtmcHJvcF0gPSBxcDsKLSAgICAgICAgICAgICAgICAg
ICAgcXBzLnB1c2gocXApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHFwczogcXBzLAotICAgICAgICAgICAgICAgICAg
ICBtYXA6IG1hcCwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGVzOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhY3RpdmU6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHByb3ApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWN0aXZlUVBDaGFuZ2VkKGNvbnRyb2xs
ZXIsIG1hcFtwcm9wXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgYWxsb3dPdmVycmlkZXM6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHByb3ApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBkYXRpbmdRUENoYW5n
ZWQoY29udHJvbGxlciwgbWFwW3Byb3BdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZ0tleXM6IGZ1bmN0aW9uKGNvbnRyb2xsZXIs
IHByb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdXBkYXRl
U2VyaWFsaXplZFFQVmFsdWUoY29udHJvbGxlciwgbWFwW3Byb3BdKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgX25hbWVzOiBudWxsLAotICAgICAgICAgICAg
X3N0YXNoTmFtZXM6IGZ1bmN0aW9uKF9oYW5kbGVySW5mbywgZHluYW1pY1BhcmVudCkgewotICAg
ICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IF9oYW5kbGVySW5mbzsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fbmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSB0aGlzLl9uYW1lcyA9
IGhhbmRsZXJJbmZvLl9uYW1lczsKLQotICAgICAgICAgICAgICAgIGlmICghbmFtZXMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJJbmZvID0gZHluYW1pY1BhcmVudDsKLSAg
ICAgICAgICAgICAgICAgICAgbmFtZXMgPSBoYW5kbGVySW5mbyAmJiBoYW5kbGVySW5mby5fbmFt
ZXMgfHwgW107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHFwcyA9
IGdldCh0aGlzLCAnX3FwLnFwcycpOwotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBxcHMubGVu
Z3RoOwotCi0gICAgICAgICAgICAgICAgdmFyIG5hbWVQYXRocyA9IG5ldyBBcnJheShuYW1lcy5s
ZW5ndGgpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwLCBubGVuID0gbmFtZXMubGVu
Z3RoOyBhIDwgbmxlbjsgKythKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVQYXRoc1thXSA9
IGhhbmRsZXJJbmZvLm5hbWUgKyAnLicgKyBuYW1lc1thXTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBxcCA9IHFwc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNh
Y2hlTWV0YSA9IHFwLmNhY2hlTWV0YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlTWV0
YS5zY29wZSA9PT0gJ21vZGVsJykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNZXRh
LnBhcnRzID0gbmFtZVBhdGhzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGNhY2hlTWV0YS5wcmVmaXggPSBxcC5jdHJsOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF91cGRhdGVTZXJpYWxpemVkUVBWYWx1ZTogZnVu
Y3Rpb24oY29udHJvbGxlciwgcXApIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQo
Y29udHJvbGxlciwgcXAucHJvcCk7Ci0gICAgICAgICAgICAgICAgcXAuc3ZhbHVlID0gdGhpcy5z
ZXJpYWxpemVRdWVyeVBhcmFtKHZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgX2FjdGl2ZVFQQ2hhbmdlZDogZnVuY3Rpb24oY29udHJvbGxl
ciwgcXApIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXQoY29udHJvbGxlciwgcXAu
cHJvcCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIuX3F1ZXVlZFFQQ2hhbmdlc1txcC5m
cHJvcF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBydW4ub25jZSh0aGlzLCB0aGlzLl9maXJl
UXVlcnlQYXJhbVRyYW5zaXRpb24pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy9f
aW5hY3RpdmVRUENoYW5nZWQ6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHFwKSB7Ci0gICAgICAgICAg
ICAvL30sCi0KLSAgICAgICAgICAgIF91cGRhdGluZ1FQQ2hhbmdlZDogZnVuY3Rpb24oY29udHJv
bGxlciwgcXApIHsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFyb3V0ZXIuX3FwVXBkYXRlcykgewotICAgICAgICAgICAgICAg
ICAgICByb3V0ZXIuX3FwVXBkYXRlcyA9IHt9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByb3V0ZXIuX3FwVXBkYXRlc1txcC51cmxLZXldID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIG1lcmdlZFByb3BlcnRpZXM6IFsncXVlcnlQYXJhbXMnXSwKLQot
ICAgICAgICAgICAgcGFyYW1zRm9yOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHJvdXRlID0gdGhpcy5jb250YWluZXIubG9va3VwKCdyb3V0ZTonICsgbmFtZSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIXJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7
fTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9
IHRoaXMucm91dGVyLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgIHZh
ciBzdGF0ZSA9IHRyYW5zaXRpb24gPyB0cmFuc2l0aW9uLnN0YXRlIDogdGhpcy5yb3V0ZXIucm91
dGVyLnN0YXRlOwotICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTsKLQotICAgICAgICAg
ICAgICAgIG1lcmdlKHBhcmFtcywgc3RhdGUucGFyYW1zW25hbWVdKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXRlLmZ1bGxRdWVyeVBhcmFtcyA9IHt9OwotICAgICAgICAgICAgICAgICAgICBtZXJnZShzdGF0
ZS5mdWxsUXVlcnlQYXJhbXMsIHN0YXRlLnF1ZXJ5UGFyYW1zKTsKLQotICAgICAgICAgICAgICAg
ICAgICB2YXIgdGFyZ2V0Um91dGVOYW1lID0gc3RhdGUuaGFuZGxlckluZm9zW3N0YXRlLmhhbmRs
ZXJJbmZvcy5sZW5ndGgtMV0ubmFtZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIu
X2Rlc2VyaWFsaXplUXVlcnlQYXJhbXModGFyZ2V0Um91dGVOYW1lLCBzdGF0ZS5mdWxsUXVlcnlQ
YXJhbXMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBxcE1ldGEg
PSBnZXQocm91dGUsICdfcXAnKTsKLQotICAgICAgICAgICAgICAgIGlmICghcXBNZXRhKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIE5vIHF1ZXJ5IHBhcmFtcyBzcGVjaWZpZWQgb24gdGhlIGNv
bnRyb2xsZXIuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ29weSBvdmVyIGFsbCB0aGUgcXVlcnkgcGFy
YW1zIGZvciB0aGlzIHJvdXRlL2NvbnRyb2xsZXIgaW50byBwYXJhbXMgaGFzaC4KLSAgICAgICAg
ICAgICAgICAvLyBUT0RPOiBpcyB0aGlzIGNvcnJlY3Q/IEkgdGhpbmsgdGhpcyB3b24ndCBkbyBt
b2RlbCBkZXAgc3RhdGUuCi0gICAgICAgICAgICAgICAgdmFyIHFwcyA9IHFwTWV0YS5xcHM7Ci0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHFwcy5sZW5ndGg7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgICAgICAgICAvLyBQdXQgZGVzZXJpYWxpemVkIHFwIG9uIHBh
cmFtcyBoYXNoLgotICAgICAgICAgICAgICAgICAgICB2YXIgcXAgPSBxcHNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghKHFwLnByb3AgaW4gcGFyYW1zKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW3FwLnByb3BdID0gc3RhdGUuZnVsbFF1ZXJ5UGFyYW1zW3FwLnByb3Bd
IHx8IHFwLmRlZjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBzZXJpYWxpemVRdWVyeVBhcmFtS2V5OiBmdW5jdGlvbihjb250cm9sbGVyUHJvcGVydHlO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJQcm9wZXJ0eU5hbWU7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzZXJpYWxpemVRdWVyeVBhcmFtOiBmdW5jdGlv
bih2YWx1ZSwgdXJsS2V5LCBkZWZhdWx0VmFsdWVUeXBlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
dXJsS2V5IGlzbid0IHVzZWQgaGVyZSwgYnV0IGFueW9uZSBvdmVycmlkaW5nCi0gICAgICAgICAg
ICAgICAgLy8gY2FuIHVzZSBpdCB0byBwcm92aWRlIHNlcmlhbGl6YXRpb24gc3BlY2lmaWMKLSAg
ICAgICAgICAgICAgICAvLyB0byBhIGNlcnRhaW4gcXVlcnkgcGFyYW0uCi0gICAgICAgICAgICAg
ICAgaWYgKGRlZmF1bHRWYWx1ZVR5cGUgPT09ICdhcnJheScpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICcnICsgdmFsdWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBkZXNlcmlhbGl6ZVF1ZXJ5UGFyYW06IGZ1bmN0aW9uKHZhbHVlLCB1cmxLZXksIGRlZmF1
bHRWYWx1ZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyB1cmxLZXkgaXNuJ3QgdXNlZCBoZXJl
LCBidXQgYW55b25lIG92ZXJyaWRpbmcKLSAgICAgICAgICAgICAgICAvLyBjYW4gdXNlIGl0IHRv
IHByb3ZpZGUgZGVzZXJpYWxpemF0aW9uIHNwZWNpZmljCi0gICAgICAgICAgICAgICAgLy8gdG8g
YSBjZXJ0YWluIHF1ZXJ5IHBhcmFtLgotCi0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBkZWZh
dWx0VmFsdWVUeXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlICh0aGUgaW5pdGlhbCB2YWx1ZSBhc3Np
Z25lZCB0byBhCi0gICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBxdWVyeSBwYXJhbSBwcm9w
ZXJ0eSksIHRvIGludGVsbGlnZW50bHkgZGVzZXJpYWxpemUgYW5kIGNhc3QuCi0gICAgICAgICAg
ICAgICAgaWYgKGRlZmF1bHRWYWx1ZVR5cGUgPT09ICdib29sZWFuJykgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKHZhbHVlID09PSAndHJ1ZScpID8gdHJ1ZSA6IGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlVHlwZSA9PT0gJ251bWJlcicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIChOdW1iZXIodmFsdWUpKS52YWx1ZU9mKCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWVUeXBlID09PSAnYXJyYXknKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5BKEpTT04ucGFyc2UodmFsdWUpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgfSwKLQotCi0gICAgICAgICAgICBfZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubyh7Ci0gICAgICAgICAgICAg
ICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnJvdXRlci5fcXVldWVkUVBDaGFuZ2VzIAotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLl9xdWV1ZWRRUENoYW5n
ZXMgPSB7fTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICAgIEEgaG9vayB5b3UgY2FuIHVzZSB0byByZXNldCBjb250cm9sbGVyIHZhbHVlcyBl
aXRoZXIgd2hlbiB0aGUgbW9kZWwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIG9yIHRo
ZSByb3V0ZSBpcyBleGl0aW5nLgotCi0gICAgICAgICAgICAgICAgICAgICAgYGBganMKLSAgICAg
ICAgICAgICAgICAgICAgICBBcHAuQXJ0aWNsZXNSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzZXRDb250cm9sbGVyOiBmdW5jdGlvbiAoY29udHJvbGxlciwgaXNFeGl0aW5nLCB0cmFu
c2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0V4aXRpbmcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldCgncGFnZScsIDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlc2V0Q29udHJvbGxlcgotICAgICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7Q29udHJvbGxlcn0gY29udHJvbGxlciBpbnN0YW5jZQotICAgICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gaXNFeGl0aW5nCi0gICAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtPYmplY3R9IHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJlc2V0Q29udHJvbGxlcjogRW1iZXIuSwotICAgICAgICB9KTsKLQotCi0g
ICAgICAgIGZ1bmN0aW9uIHBhcmVudFJvdXRlKHJvdXRlKSB7Ci0gICAgICAgICAgICB2YXIgaGFu
ZGxlckluZm8gPSBoYW5kbGVySW5mb0Zvcihyb3V0ZSwgcm91dGUucm91dGVyLnJvdXRlci5zdGF0
ZS5oYW5kbGVySW5mb3MsIC0xKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW5mbyAmJiBo
YW5kbGVySW5mby5oYW5kbGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGFuZGxl
ckluZm9Gb3Iocm91dGUsIGhhbmRsZXJJbmZvcywgX29mZnNldCkgewotICAgICAgICAgICAgaWYg
KCFoYW5kbGVySW5mb3MpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHZhciBvZmZzZXQgPSBfb2Zmc2V0IHx8IDAsIGN1cnJlbnQ7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gaGFuZGxlckluZm9zW2ldLmhhbmRsZXI7
Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IHJvdXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoYW5kbGVySW5mb3NbaSArIG9mZnNldF07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyZW50VGVt
cGxhdGUocm91dGUpIHsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRSb3V0ZShyb3V0
ZSksIHRlbXBsYXRlOwotCi0gICAgICAgICAgICBpZiAoIXBhcmVudCkgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRlbXBsYXRlID0g
cGFyZW50Lmxhc3RSZW5kZXJlZFRlbXBsYXRlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRl
bXBsYXRlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
ZW50VGVtcGxhdGUocGFyZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbnMocm91dGUsIG5hbWUsIHRlbXBsYXRlLCBvcHRpb25z
KSB7Ci0gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICAgICAgICAgIG9w
dGlvbnMuaW50byA9IG9wdGlvbnMuaW50byA/IG9wdGlvbnMuaW50by5yZXBsYWNlKC9cLy9nLCAn
LicpIDogcGFyZW50VGVtcGxhdGUocm91dGUpOwotICAgICAgICAgICAgb3B0aW9ucy5vdXRsZXQg
PSBvcHRpb25zLm91dGxldCB8fCAnbWFpbic7Ci0gICAgICAgICAgICBvcHRpb25zLm5hbWUgPSBu
YW1lOwotICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZSA9IHRlbXBsYXRlOwotICAgICAgICAg
ICAgb3B0aW9ucy5MT0dfVklFV19MT09LVVBTID0gZ2V0KHJvdXRlLnJvdXRlciwgJ25hbWVzcGFj
ZS5MT0dfVklFV19MT09LVVBTJyk7Ci0KLSAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQW4gb3V0
bGV0ICgiICsgb3B0aW9ucy5vdXRsZXQgKyAiKSB3YXMgc3BlY2lmaWVkIGJ1dCB3YXMgbm90IGZv
dW5kLiIsIG9wdGlvbnMub3V0bGV0ID09PSAnbWFpbicgfHwgb3B0aW9ucy5pbnRvKTsKLQotICAg
ICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBvcHRpb25zLmNvbnRyb2xsZXIsCi0gICAgICAgICAg
ICBtb2RlbCA9IG9wdGlvbnMubW9kZWwsCi0gICAgICAgICAgICBuYW1lZENvbnRyb2xsZXI7Ci0K
LSAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgICBj
b250cm9sbGVyID0gb3B0aW9ucy5jb250cm9sbGVyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChv
cHRpb25zLm5hbWVQYXNzZWQpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gcm91dGUu
Y29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjonICsgbmFtZSkgfHwgcm91dGUuY29udHJvbGxl
ck5hbWUgfHwgcm91dGUucm91dGVOYW1lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjb250cm9sbGVyID0gcm91dGUuY29udHJvbGxlck5hbWUgfHwgcm91dGUuY29udGFp
bmVyLmxvb2t1cCgnY29udHJvbGxlcjonICsgbmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgY29udHJvbGxlciA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29udHJvbGxlck5hbWUgPSBjb250cm9sbGVyOwotICAgICAgICAgICAgICAgIGNv
bnRyb2xsZXIgPSByb3V0ZS5jb250YWluZXIubG9va3VwKCdjb250cm9sbGVyOicgKyBjb250cm9s
bGVyTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJZb3UgcGFzc2VkIGBjb250cm9sbGVyOiAn
IiArIGNvbnRyb2xsZXJOYW1lICsgIidgIGludG8gdGhlIGByZW5kZXJgIG1ldGhvZCwgYnV0IG5v
IHN1Y2ggY29udHJvbGxlciBjb3VsZCBiZSBmb3VuZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtb2RlbCkgewotICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXIuc2V0KCdtb2RlbCcsIG1vZGVsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgb3B0aW9ucy5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgICAgICAgICAgcmV0
dXJuIG9wdGlvbnM7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzZXR1cFZpZXcodmll
dywgY29udGFpbmVyLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAodmlldykgewotICAgICAg
ICAgICAgICAgIGlmIChvcHRpb25zLkxPR19WSUVXX0xPT0tVUFMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuTG9nZ2VyLmluZm8oIlJlbmRlcmluZyAiICsgb3B0aW9ucy5uYW1lICsgIiB3
aXRoICIgKyB2aWV3LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ3ZpZXc6
JyArIG9wdGlvbnMubmFtZSAKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFZp
ZXcgPSBvcHRpb25zLmludG8gPyAndmlldzpkZWZhdWx0JyA6ICd2aWV3OnRvcGxldmVsJzsKLSAg
ICAgICAgICAgICAgICB2aWV3ID0gY29udGFpbmVyLmxvb2t1cChkZWZhdWx0Vmlldyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuTE9HX1ZJRVdfTE9PS1VQUykgewotICAgICAgICAgICAg
ICAgICAgICBFbWJlci5Mb2dnZXIuaW5mbygiUmVuZGVyaW5nICIgKyBvcHRpb25zLm5hbWUgKyAi
IHdpdGggZGVmYXVsdCB2aWV3ICIgKyB2aWV3LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dWxsTmFtZTogJ3ZpZXc6JyArIG9wdGlvbnMubmFtZSAKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWdl
dCh2aWV3LCAndGVtcGxhdGVOYW1lJykpIHsKLSAgICAgICAgICAgICAgICBzZXQodmlldywgJ3Rl
bXBsYXRlJywgb3B0aW9ucy50ZW1wbGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICBzZXQodmlldywg
J19kZWJ1Z1RlbXBsYXRlTmFtZScsIG9wdGlvbnMubmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHNldCh2aWV3LCAncmVuZGVyZWROYW1lJywgb3B0aW9ucy5uYW1lKTsKLSAgICAg
ICAgICAgIHNldCh2aWV3LCAnY29udHJvbGxlcicsIG9wdGlvbnMuY29udHJvbGxlcik7Ci0KLSAg
ICAgICAgICAgIHJldHVybiB2aWV3OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYXBw
ZW5kVmlldyhyb3V0ZSwgdmlldywgb3B0aW9ucykgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMu
aW50bykgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnRWaWV3ID0gcm91dGUucm91dGVyLl9s
b29rdXBBY3RpdmVWaWV3KG9wdGlvbnMuaW50byk7Ci0gICAgICAgICAgICAgICAgdmFyIHRlYXJk
b3duT3V0bGV0VmlldyA9IGdlbmVyYXRlT3V0bGV0VGVhcmRvd24ocGFyZW50Vmlldywgb3B0aW9u
cy5vdXRsZXQpOwotICAgICAgICAgICAgICAgIGlmICghcm91dGUudGVhcmRvd25PdXRsZXRWaWV3
cykgewotICAgICAgICAgICAgICAgICAgICByb3V0ZS50ZWFyZG93bk91dGxldFZpZXdzID0gW107
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlcGxhY2Uocm91dGUudGVhcmRv
d25PdXRsZXRWaWV3cywgMCwgMCwgW3RlYXJkb3duT3V0bGV0Vmlld10pOwotICAgICAgICAgICAg
ICAgIHBhcmVudFZpZXcuY29ubmVjdE91dGxldChvcHRpb25zLm91dGxldCwgdmlldyk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciByb290RWxlbWVudCA9IGdldChy
b3V0ZSwgJ3JvdXRlci5uYW1lc3BhY2Uucm9vdEVsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICAv
LyB0ZWFyIGRvd24gdmlldyBpZiBvbmUgaXMgYWxyZWFkeSByZW5kZXJlZAotICAgICAgICAgICAg
ICAgIGlmIChyb3V0ZS50ZWFyZG93blRvcExldmVsVmlldykgewotICAgICAgICAgICAgICAgICAg
ICByb3V0ZS50ZWFyZG93blRvcExldmVsVmlldygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByb3V0ZS5yb3V0ZXIuX2Nvbm5lY3RBY3RpdmVWaWV3KG9wdGlvbnMubmFtZSwg
dmlldyk7Ci0gICAgICAgICAgICAgICAgcm91dGUudGVhcmRvd25Ub3BMZXZlbFZpZXcgPSBnZW5l
cmF0ZVRvcExldmVsVGVhcmRvd24odmlldyk7Ci0gICAgICAgICAgICAgICAgdmlldy5hcHBlbmRU
byhyb290RWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBnZW5lcmF0ZVRvcExldmVsVGVhcmRvd24odmlldykgewotICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZpZXcuZGVzdHJveSgpOwotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlT3V0bGV0VGVhcmRv
d24ocGFyZW50Vmlldywgb3V0bGV0KSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgcGFyZW50Vmlldy5kaXNjb25uZWN0T3V0bGV0KG91dGxldCk7Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQi
XSA9IFJvdXRlOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vcm91
dGVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci1tZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFs
L21lcmdlIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVf
dXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvc3lz
dGVtL29iamVjdCIsICJlbWJlci1ydW50aW1lL21peGlucy9ldmVudGVkIiwgImVtYmVyLXJvdXRp
bmcvc3lzdGVtL2RzbCIsICJlbWJlci12aWV3cy92aWV3cy92aWV3IiwgImVtYmVyLXJvdXRpbmcv
bG9jYXRpb24vYXBpIiwgImVtYmVyLWhhbmRsZWJhcnMvdmlld3MvbWV0YW1vcnBoX3ZpZXciLCAi
ZW1iZXItcm91dGluZy1oYW5kbGViYXJzL2hlbHBlcnMvc2hhcmVkIiwgImV4cG9ydHMiXSwKLSAg
ICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5
M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBf
X2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVu
ZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVu
Y3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kx
Nl9fLCBfX2RlcGVuZGVuY3kxN19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAg
ICAgICAvLyBGRUFUVVJFUywgTG9nZ2VyLCBLLCBhc3NlcnQKLSAgICAgICAgdmFyIEVtYmVyRXJy
b3IgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVw
ZW5kZW5jeTNfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k0X18uc2V0Owot
ICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k1X18uZGVmaW5lUHJvcGVy
dHk7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTZfXy5jb21wdXRlZDsKLSAg
ICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBydW4gPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGZvckVhY2gg
PSBfX2RlcGVuZGVuY3k5X18uZm9yRWFjaDsKLQotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRl
bmN5MTBfXy5mbXQ7Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5jeTExX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEV2ZW50ZWQgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBFbWJlclJvdXRlckRTTCA9IF9fZGVwZW5kZW5jeTEzX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyVmlldyA9IF9fZGVwZW5kZW5jeTE0X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyTG9jYXRpb24gPSBfX2RlcGVuZGVuY3kxNV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBfTWV0YW1vcnBoVmlldyA9IF9fZGVwZW5kZW5jeTE2X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIHJvdXRlQXJncyA9IF9fZGVwZW5kZW5jeTE3X18ucm91dGVB
cmdzOwotICAgICAgICB2YXIgZ2V0QWN0aXZlVGFyZ2V0TmFtZSA9IF9fZGVwZW5kZW5jeTE3X18u
Z2V0QWN0aXZlVGFyZ2V0TmFtZTsKLSAgICAgICAgdmFyIHN0YXNoUGFyYW1OYW1lcyA9IF9fZGVw
ZW5kZW5jeTE3X18uc3Rhc2hQYXJhbU5hbWVzOwotCi0gICAgICAgIC8vIHJlcXVpcmVNb2R1bGUo
ImVtYmVyLWhhbmRsZWJhcnMiKTsKLSAgICAgICAgLy8gcmVxdWlyZU1vZHVsZSgiZW1iZXItcnVu
dGltZSIpOwotICAgICAgICAvLyByZXF1aXJlTW9kdWxlKCJlbWJlci12aWV3cyIpOwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1yb3V0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8vIC8vIHNpZGUgZWZm
ZWN0IG9mIGxvYWRpbmcgc29tZSBFbWJlciBnbG9iYWxzLCBmb3Igbm93Ci0gICAgICAgIC8vIHJl
cXVpcmVNb2R1bGUoImVtYmVyLWhhbmRsZWJhcnMiKTsKLSAgICAgICAgLy8gcmVxdWlyZU1vZHVs
ZSgiZW1iZXItcnVudGltZSIpOwotICAgICAgICAvLyByZXF1aXJlTW9kdWxlKCJlbWJlci12aWV3
cyIpOwotCi0gICAgICAgIHZhciBSb3V0ZXIgPSByZXF1aXJlTW9kdWxlKCJyb3V0ZXIiKVsnZGVm
YXVsdCddOwotICAgICAgICB2YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmVNb2R1bGUoInJvdXRlci90
cmFuc2l0aW9uIikuVHJhbnNpdGlvbjsKLQotICAgICAgICB2YXIgc2xpY2UgPSBbXS5zbGljZTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGBFbWJlci5Sb3V0ZXJgIGNsYXNzIG1h
bmFnZXMgdGhlIGFwcGxpY2F0aW9uIHN0YXRlIGFuZCBVUkxzLiBSZWZlciB0bwotICAgICAgICAg
ICAgICB0aGUgW3JvdXRpbmcgZ3VpZGVdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvcm91dGlu
Zy8pIGZvciBkb2N1bWVudGF0aW9uLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBSb3V0ZXIKLSAg
ICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJl
ci5PYmplY3QKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlclJvdXRlciA9IEVtYmVy
T2JqZWN0LmV4dGVuZChFdmVudGVkLCB7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgVGhlIGBsb2NhdGlvbmAgcHJvcGVydHkgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBVUkwn
cyB0aGF0IHlvdXIKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gd2lsbCB1c2UuCi0K
LSAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsb2NhdGlvbiB0eXBlcyBhcmUgY3Vy
cmVudGx5IGF2YWlsYWJsZToKLQotICAgICAgICAgICAgICAgICAgICAqIGBoYXNoYAotICAgICAg
ICAgICAgICAgICAgICAqIGBoaXN0b3J5YAotICAgICAgICAgICAgICAgICAgICAqIGBub25lYAot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBsb2NhdGlvbgotICAgICAgICAgICAgICAg
ICAgICBAZGVmYXVsdCAnaGFzaCcKLSAgICAgICAgICAgICAgICAgICAgQHNlZSB7RW1iZXIuTG9j
YXRpb259Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9jYXRpb246ICdoYXNo
JywKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgUmVwcmVzZW50cyB0aGUg
VVJMIG9mIHRoZSByb290IG9mIHRoZSBhcHBsaWNhdGlvbiwgb2Z0ZW4gJy8nLiBUaGlzIHByZWZp
eCBpcwotICAgICAgICAgICAgICAgICAgIGFzc3VtZWQgb24gYWxsIHJvdXRlcyBkZWZpbmVkIG9u
IHRoaXMgcm91dGVyLgotCi0gICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHJvb3RVUkwKLSAg
ICAgICAgICAgICAgICAgICBAZGVmYXVsdCAnLycKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICByb290VVJMOiAnLycsCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHRoaXMucm91dGVyID0gdGhpcy5jb25zdHJ1Y3Rvci5yb3V0ZXIgfHwg
dGhpcy5jb25zdHJ1Y3Rvci5tYXAoRW1iZXIuSyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYWN0
aXZlVmlld3MgPSB7fTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cExvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fcXBDYWNoZSA9IHt9OwotICAgICAgICAgICAgICAgIHRoaXMu
X3F1ZXVlZFFQQ2hhbmdlcyA9IHt9OwotCi0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAn
bmFtZXNwYWNlLkxPR19UUkFOU0lUSU9OU19JTlRFUk5BTCcpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMucm91dGVyLmxvZyA9IEVtYmVyLkxvZ2dlci5kZWJ1ZzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmVwcmVzZW50cyB0aGUgY3VycmVudCBVUkwuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCB1cmwKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBUaGUgY3VycmVu
dCBVUkwuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdXJsOiBjb21wdXRlZChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdsb2NhdGlvbicp
LmdldFVSTCgpOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBJbml0aWFsaXplcyB0aGUgY3VycmVudCByb3V0ZXIgaW5zdGFuY2UgYW5kIHNl
dHMgdXAgdGhlIGNoYW5nZSBoYW5kbGluZwotICAgICAgICAgICAgICAgICAgICBldmVudCBsaXN0
ZW5lcnMgdXNlZCBieSB0aGUgaW5zdGFuY2VzIGBsb2NhdGlvbmAgaW1wbGVtZW50YXRpb24uCi0K
LSAgICAgICAgICAgICAgICAgICAgQSBwcm9wZXJ0eSBuYW1lZCBgaW5pdGlhbFVSTGAgd2lsbCBi
ZSB1c2VkIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBVUkwuCi0gICAgICAgICAgICAgICAgICAg
IElmIG5vIHZhbHVlIGlzIGZvdW5kIGAvYCB3aWxsIGJlIHVzZWQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBzdGFydFJvdXRpbmcKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdGFydFJvdXRpbmc6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHRoaXMucm91dGVyID0gdGhpcy5yb3V0ZXIgfHwgdGhpcy5j
b25zdHJ1Y3Rvci5tYXAoRW1iZXIuSyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0g
dGhpcy5yb3V0ZXI7Ci0gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0KHRoaXMsICds
b2NhdGlvbicpOwotICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5l
cjsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgdmFy
IGluaXRpYWxVUkwgPSBnZXQodGhpcywgJ2luaXRpYWxVUkwnKTsKLQotICAgICAgICAgICAgICAg
IC8vIEFsbG93IHRoZSBMb2NhdGlvbiBjbGFzcyB0byBjYW5jZWwgdGhlIHJvdXRlciBzZXR1cCB3
aGlsZSBpdCByZWZyZXNoZXMKLSAgICAgICAgICAgICAgICAvLyB0aGUgcGFnZQotICAgICAgICAg
ICAgICAgIGlmIChnZXQobG9jYXRpb24sICdjYW5jZWxSb3V0ZXJTZXR1cCcpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB0aGlzLl9zZXR1cFJvdXRlcihyb3V0ZXIsIGxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAg
IGNvbnRhaW5lci5yZWdpc3RlcigndmlldzpkZWZhdWx0JywgX01ldGFtb3JwaFZpZXcpOwotICAg
ICAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcigndmlldzp0b3BsZXZlbCcsIEVtYmVyVmll
dy5leHRlbmQoKSk7Ci0KLSAgICAgICAgICAgICAgICBsb2NhdGlvbi5vblVwZGF0ZVVSTChmdW5j
dGlvbih1cmwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVVUkwodXJsKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFVS
TCA9PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFVSTCA9IGxv
Y2F0aW9uLmdldFVSTCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRo
aXMuaGFuZGxlVVJMKGluaXRpYWxVUkwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEhhbmRsZXMgdXBkYXRpbmcgdGhlIHBhdGhzIGFuZCBu
b3RpZnlpbmcgYW55IGxpc3RlbmVycyBvZiB0aGUgVVJMCi0gICAgICAgICAgICAgICAgICAgIGNo
YW5nZS4KLQotICAgICAgICAgICAgICAgICAgICBUcmlnZ2VycyB0aGUgcm91dGVyIGxldmVsIGBk
aWRUcmFuc2l0aW9uYCBob29rLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZGlkVHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAg
ICBAc2luY2UgMS4yLjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkaWRUcmFu
c2l0aW9uOiBmdW5jdGlvbihpbmZvcykgewotICAgICAgICAgICAgICAgIHVwZGF0ZVBhdGhzKHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsTG9hZGluZ0V2ZW50KCk7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKCd1cmwnKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFB1dCB0aGlzIGluIHRoZSBydW5sb29wIHNvIHVybCB3aWxsIGJlIGFjY3Vy
YXRlLiBTZWVtcwotICAgICAgICAgICAgICAgIC8vIGxlc3Mgc3VycHJpc2luZyB0aGFuIGRpZFRy
YW5zaXRpb24gYmVpbmcgb3V0IG9mIHN5bmMuCi0gICAgICAgICAgICAgICAgcnVuLm9uY2UodGhp
cywgdGhpcy50cmlnZ2VyLCAnZGlkVHJhbnNpdGlvbicpOwotCi0gICAgICAgICAgICAgICAgaWYg
KGdldCh0aGlzLCAnbmFtZXNwYWNlJykuTE9HX1RSQU5TSVRJT05TKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLkxvZ2dlci5sb2coIlRyYW5zaXRpb25lZCBpbnRvICciICsgRW1iZXJSb3V0
ZXIuX3JvdXRlUGF0aChpbmZvcykgKyAiJyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGhhbmRsZVVSTDogZnVuY3Rpb24odXJsKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2RvVVJMVHJhbnNpdGlvbignaGFuZGxlVVJMJywgdXJsKTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9kb1VSTFRyYW5zaXRpb246IGZ1bmN0aW9u
KHJvdXRlckpzTWV0aG9kLCB1cmwpIHsKLSAgICAgICAgICAgICAgICB2YXIgdHJhbnNpdGlvbiA9
IHRoaXMucm91dGVyW3JvdXRlckpzTWV0aG9kXSh1cmwgfHwgJy8nKTsKLSAgICAgICAgICAgICAg
ICBsaXN0ZW5Gb3JUcmFuc2l0aW9uRXJyb3JzKHRyYW5zaXRpb24pOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cmFuc2l0aW9uOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdHJhbnNp
dGlvblRvOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNh
bGwoYXJndW1lbnRzKSwgcXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc2VtYmxl
c1VSTChhcmdzWzBdKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZG9VUkxU
cmFuc2l0aW9uKCd0cmFuc2l0aW9uVG8nLCBhcmdzWzBdKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcG9zc2libGVRdWVyeVBhcmFtcyA9IGFyZ3NbYXJncy5sZW5n
dGgtMV07Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlUXVlcnlQYXJhbXMgJiYgcG9zc2li
bGVRdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgncXVlcnlQYXJhbXMnKSkgewotICAgICAgICAg
ICAgICAgICAgICBxdWVyeVBhcmFtcyA9IGFyZ3MucG9wKCkucXVlcnlQYXJhbXM7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB7fTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Um91dGVOYW1l
ID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kb1RyYW5zaXRp
b24odGFyZ2V0Um91dGVOYW1lLCBhcmdzLCBxdWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHRoaXMucm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25Uby5hcHBseSh0
aGlzLnJvdXRlciwgYXJndW1lbnRzKTsKLQotICAgICAgICAgICAgICAgIHVwZGF0ZVBhdGhzKHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgdmFyIGluZm9zID0gdGhpcy5yb3V0ZXIuY3VycmVudEhh
bmRsZXJJbmZvczsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICduYW1lc3BhY2UnKS5M
T0dfVFJBTlNJVElPTlMpIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmxvZygi
SW50ZXJtZWRpYXRlLXRyYW5zaXRpb25lZCBpbnRvICciICsgRW1iZXJSb3V0ZXIuX3JvdXRlUGF0
aChpbmZvcykgKyAiJyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy50cmFuc2l0aW9uVG8uYXBwbHkodGhpcywgYXJndW1lbnRzKS5tZXRob2QoJ3JlcGxh
Y2UnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdlbmVyYXRlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5yb3V0ZXIuZ2VuZXJhdGUuYXBwbHko
dGhpcy5yb3V0ZXIsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9j
YXRpb24uZm9ybWF0VVJMKHVybCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBpZiB0aGUgc3VwcGxpZWQgcm91dGUgaXMg
Y3VycmVudGx5IGFjdGl2ZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGlzQWN0aXZl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSByb3V0ZU5hbWUKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpc0FjdGl2ZTogZnVuY3Rpb24ocm91dGVOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgICAg
ICAgICAgIHJldHVybiByb3V0ZXIuaXNBY3RpdmUuYXBwbHkocm91dGVyLCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFu
IGFsdGVybmF0aXZlIGZvcm0gb2YgYGlzQWN0aXZlYCB0aGF0IGRvZXNuJ3QgcmVxdWlyZQotICAg
ICAgICAgICAgICAgICAgICBtYW51YWwgY29uY2F0ZW5hdGlvbiBvZiB0aGUgYXJndW1lbnRzIGlu
dG8gYSBzaW5nbGUKLSAgICAgICAgICAgICAgICAgICAgYXJyYXkuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBpc0FjdGl2ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcm91dGVO
YW1lCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBtb2RlbHMKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHF1ZXJ5UGFyYW1zCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xl
YW59Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgaXNBY3RpdmVJbnRlbnQ6IGZ1bmN0aW9uKHJvdXRlTmFtZSwgbW9kZWxzLCBx
dWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsK
LSAgICAgICAgICAgICAgICByZXR1cm4gcm91dGVyLmlzQWN0aXZlLmFwcGx5KHJvdXRlciwgYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKG5h
bWUsIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci50cmlnZ2VyLmFwcGx5
KHRoaXMucm91dGVyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIERvZXMgdGhpcyByb3V0ZXIgaW5zdGFuY2UgaGF2ZSB0
aGUgZ2l2ZW4gcm91dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBoYXNSb3V0ZQot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGhhc1JvdXRlOiBm
dW5jdGlvbihyb3V0ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5oYXNS
b3V0ZShyb3V0ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGVyIGJ5IGNsZWFyaW5nIHRo
ZSBjdXJyZW50IHJvdXRlCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzIGFuZCBkZWFjdGl2
YXRpbmcgdGhlbS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIHJlc2V0Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHJlc2V0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5yZXNldCgp
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2xvb2t1cEFjdGl2ZVZpZXc6IGZ1bmN0
aW9uKHRlbXBsYXRlTmFtZSkgewotICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSB0aGlzLl9h
Y3RpdmVWaWV3c1t0ZW1wbGF0ZU5hbWVdOwotICAgICAgICAgICAgICAgIHJldHVybiBhY3RpdmUg
JiYgYWN0aXZlWzBdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2Nvbm5lY3RBY3Rp
dmVWaWV3OiBmdW5jdGlvbih0ZW1wbGF0ZU5hbWUsIHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZXhpc3RpbmcgPSB0aGlzLl9hY3RpdmVWaWV3c1t0ZW1wbGF0ZU5hbWVdOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nWzBd
Lm9mZignd2lsbERlc3Ryb3lFbGVtZW50JywgdGhpcywgZXhpc3RpbmdbMV0pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpc2Nvbm5lY3RBY3RpdmVWaWV3
KCkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYWN0aXZlVmlld3NbdGVtcGxh
dGVOYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9hY3Rp
dmVWaWV3c1t0ZW1wbGF0ZU5hbWVdID0gW3ZpZXcsIGRpc2Nvbm5lY3RBY3RpdmVWaWV3XTsKLSAg
ICAgICAgICAgICAgICB2aWV3Lm9uZSgnd2lsbERlc3Ryb3lFbGVtZW50JywgdGhpcywgZGlzY29u
bmVjdEFjdGl2ZVZpZXcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3NldHVwTG9j
YXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGdldCh0
aGlzLCAnbG9jYXRpb24nKTsKLSAgICAgICAgICAgICAgICB2YXIgcm9vdFVSTCA9IGdldCh0aGlz
LCAncm9vdFVSTCcpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJvb3RVUkwgJiYgdGhpcy5jb250
YWluZXIgJiYgIXRoaXMuY29udGFpbmVyLmhhcygnLWxvY2F0aW9uLXNldHRpbmc6cm9vdC11cmwn
KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZWdpc3RlcignLWxvY2F0
aW9uLXNldHRpbmc6cm9vdC11cmwnLCByb290VVJMLCB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnN0YW50aWF0ZTogZmFsc2UgCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIGxvY2F0
aW9uICYmIHRoaXMuY29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZl
ZExvY2F0aW9uID0gdGhpcy5jb250YWluZXIubG9va3VwKCdsb2NhdGlvbjonICsgbG9jYXRpb24p
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHJlc29s
dmVkTG9jYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gc2V0KHRo
aXMsICdsb2NhdGlvbicsIHJlc29sdmVkTG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0ZWQg
cmVnaXN0cmF0aW9uIG9mIGN1c3RvbSBsb2NhdGlvbiBBUEkncwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVt
ZW50YXRpb246IGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHNldCh0aGlzLCAnbG9jYXRpb24nLCBFbWJlckxv
Y2F0aW9uLmNyZWF0ZShvcHRpb25zKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocm9vdFVSTCAmJiB0eXBlb2Ygcm9vdFVS
TCA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucm9vdFVSTCA9
IHJvb3RVUkw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gZW5zdXJl
IHRoYXQgaW5pdFN0YXRlIGlzIGNhbGxlZCBBRlRFUiB0aGUgcm9vdFVSTCBpcyBzZXQgb24KLSAg
ICAgICAgICAgICAgICAvLyB0aGUgbG9jYXRpb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgICBp
ZiAodHlwZW9mIGxvY2F0aW9uLmluaXRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbi5pbml0U3RhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBfZ2V0SGFuZGxlckZ1bmN0aW9uOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB2YXIgc2VlbiA9IHt9LCBjb250YWluZXIgPSB0aGlzLmNvbnRh
aW5lcjsKLSAgICAgICAgICAgICAgICB2YXIgRGVmYXVsdFJvdXRlID0gY29udGFpbmVyLmxvb2t1
cEZhY3RvcnkoJ3JvdXRlOmJhc2ljJyk7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHJvdXRlTmFtZSA9ICdyb3V0ZTonICsgbmFtZTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGhhbmRsZXIgPSBjb250YWluZXIubG9va3VwKHJvdXRlTmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNlZW5bbmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBoYW5kbGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgc2VlbltuYW1lXSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5k
bGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIucmVnaXN0ZXIocm91dGVO
YW1lLCBEZWZhdWx0Um91dGUuZXh0ZW5kKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlciA9IGNvbnRhaW5lci5sb29rdXAocm91dGVOYW1lKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdldChzZWxmLCAnbmFtZXNwYWNlLkxPR19BQ1RJVkVfR0VORVJBVElPTicpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuTG9nZ2VyLmluZm8oImdlbmVyYXRl
ZCAtPiAiICsgcm91dGVOYW1lLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bGxOYW1lOiByb3V0ZU5hbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyLnJvdXRlTmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBoYW5kbGVyOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBfc2V0dXBSb3V0ZXI6IGZ1bmN0aW9uKHJvdXRlciwgbG9jYXRpb24pIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbGFzdFVSTCwgZW1iZXJSb3V0ZXIgPSB0aGlzOwotCi0gICAgICAg
ICAgICAgICAgcm91dGVyLmdldEhhbmRsZXIgPSB0aGlzLl9nZXRIYW5kbGVyRnVuY3Rpb24oKTsK
LQotICAgICAgICAgICAgICAgIHZhciBkb1VwZGF0ZVVSTCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbi5zZXRVUkwobGFzdFVSTCk7Ci0gICAgICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgICAgIHJvdXRlci51cGRhdGVVUkwgPSBmdW5jdGlvbihwYXRoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RVUkwgPSBwYXRoOwotICAgICAgICAgICAgICAgICAg
ICBydW4ub25jZShkb1VwZGF0ZVVSTCk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgICAgIGlmIChsb2NhdGlvbi5yZXBsYWNlVVJMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBkb1JlcGxhY2VVUkwgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLnJlcGxhY2VVUkwobGFzdFVSTCk7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcm91dGVyLnJlcGxhY2VVUkwgPSBmdW5jdGlvbihwYXRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0VVJMID0gcGF0aDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bi5vbmNlKGRvUmVwbGFjZVVSTCk7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcm91dGVyLmRpZFRyYW5zaXRpb24g
PSBmdW5jdGlvbihpbmZvcykgewotICAgICAgICAgICAgICAgICAgICBlbWJlclJvdXRlci5kaWRU
cmFuc2l0aW9uKGluZm9zKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgX3NlcmlhbGl6ZVF1ZXJ5UGFyYW1zOiBmdW5jdGlvbih0YXJnZXRSb3V0ZU5h
bWUsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGdyb3VwZWRCeVVybEtleSA9
IHt9OwotCi0gICAgICAgICAgICAgICAgZm9yRWFjaFF1ZXJ5UGFyYW0odGhpcywgdGFyZ2V0Um91
dGVOYW1lLCBxdWVyeVBhcmFtcywgZnVuY3Rpb24oa2V5LCB2YWx1ZSwgcXApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHVybEtleSA9IHFwLnVybEtleTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFncm91cGVkQnlVcmxLZXlbdXJsS2V5XSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Z3JvdXBlZEJ5VXJsS2V5W3VybEtleV0gPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBncm91cGVkQnlVcmxLZXlbdXJsS2V5XS5wdXNoKHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHFwOiBxcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2
YWx1ZQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHF1ZXJ5UGFyYW1zW2tleV07Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gZ3JvdXBlZEJ5VXJsS2V5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBxcHMgPSBncm91cGVkQnlVcmxLZXlba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHFwcy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXAwID0gcXBz
WzBdLnFwLCBxcDEgPSBxcHNbMV0ucXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoZm10KCJZb3UncmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGNvbnRy
b2xsZXIgcHJvcGVydHkgbWFwIHRvIHRoZSBzYW1lIHF1ZXJ5IHBhcmFtIGtleSwgYnV0IGJvdGgg
YCVAYCBhbmQgYCVAYCBtYXAgdG8gYCVAYC4gWW91IGNhbiBmaXggdGhpcyBieSBtYXBwaW5nIG9u
ZSBvZiB0aGUgY29udHJvbGxlciBwcm9wZXJ0aWVzIHRvIGEgZGlmZmVyZW50IHF1ZXJ5IHBhcmFt
IGtleSB2aWEgdGhlIGBhc2AgY29uZmlnIG9wdGlvbiwgZS5nLiBgJUA6IHsgYXM6ICdvdGhlci0l
QCcgfWAiLCBbcXAwLmZwcm9wLCBxcDEuZnByb3AsIHFwMC51cmxLZXksIHFwMC5wcm9wLCBxcDAu
cHJvcF0pLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHFwID0gcXBzWzBdLnFwOwotICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1tx
cC51cmxLZXldID0gcXAucm91dGUuc2VyaWFsaXplUXVlcnlQYXJhbShxcHNbMF0udmFsdWUsIHFw
LnVybEtleSwgcXAudHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgX2Rlc2VyaWFsaXplUXVlcnlQYXJhbXM6IGZ1bmN0aW9uKHRhcmdldFJvdXRl
TmFtZSwgcXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBmb3JFYWNoUXVlcnlQYXJhbSh0
aGlzLCB0YXJnZXRSb3V0ZU5hbWUsIHF1ZXJ5UGFyYW1zLCBmdW5jdGlvbihrZXksIHZhbHVlLCBx
cCkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTsKLSAgICAg
ICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbcXAucHJvcF0gPSBxcC5yb3V0ZS5kZXNlcmlhbGl6
ZVF1ZXJ5UGFyYW0odmFsdWUsIHFwLnVybEtleSwgcXAudHlwZSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfcHJ1bmVEZWZhdWx0UXVlcnlQYXJh
bVZhbHVlczogZnVuY3Rpb24odGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcykgewotICAgICAg
ICAgICAgICAgIHZhciBxcHMgPSB0aGlzLl9xdWVyeVBhcmFtc0Zvcih0YXJnZXRSb3V0ZU5hbWUp
OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBxdWVyeVBhcmFtcykgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgcXAgPSBxcHMubWFwW2tleV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChxcCAmJiBxcC5zZGVmID09PSBxdWVyeVBhcmFtc1trZXldKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9kb1Ry
YW5zaXRpb246IGZ1bmN0aW9uKF90YXJnZXRSb3V0ZU5hbWUsIG1vZGVscywgX3F1ZXJ5UGFyYW1z
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRhcmdldFJvdXRlTmFtZSA9IF90YXJnZXRSb3V0ZU5h
bWUgfHwgZ2V0QWN0aXZlVGFyZ2V0TmFtZSh0aGlzLnJvdXRlcik7Ci0gICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJUaGUgcm91dGUgIiArIHRhcmdldFJvdXRlTmFtZSArICIgd2FzIG5vdCBm
b3VuZCIsIHRhcmdldFJvdXRlTmFtZSAmJiB0aGlzLnJvdXRlci5oYXNSb3V0ZSh0YXJnZXRSb3V0
ZU5hbWUpKTsKLQotICAgICAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IHt9OwotCi0gICAg
ICAgICAgICAgICAgbWVyZ2UocXVlcnlQYXJhbXMsIF9xdWVyeVBhcmFtcyk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fcHJlcGFyZVF1ZXJ5UGFyYW1zKHRhcmdldFJvdXRlTmFtZSwgbW9kZWxzLCBx
dWVyeVBhcmFtcyk7Ci0KLQotICAgICAgICAgICAgICAgIHZhciB0cmFuc2l0aW9uQXJncyA9IHJv
dXRlQXJncyh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMpOwotICAgICAgICAg
ICAgICAgIHZhciB0cmFuc2l0aW9uUHJvbWlzZSA9IHRoaXMucm91dGVyLnRyYW5zaXRpb25Uby5h
cHBseSh0aGlzLnJvdXRlciwgdHJhbnNpdGlvbkFyZ3MpOwotCi0gICAgICAgICAgICAgICAgbGlz
dGVuRm9yVHJhbnNpdGlvbkVycm9ycyh0cmFuc2l0aW9uUHJvbWlzZSk7Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJhbnNpdGlvblByb21pc2U7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBfcHJlcGFyZVF1ZXJ5UGFyYW1zOiBmdW5jdGlvbih0YXJnZXRSb3V0ZU5hbWUsIG1vZGVs
cywgcXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9oeWRyYXRlVW5zdXBwbGll
ZFF1ZXJ5UGFyYW1zKHRhcmdldFJvdXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcyk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplUXVlcnlQYXJhbXModGFyZ2V0Um91dGVOYW1lLCBx
dWVyeVBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcHJ1bmVEZWZhdWx0UXVlcnlQYXJh
bVZhbHVlcyh0YXJnZXRSb3V0ZU5hbWUsIHF1ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgbWVyZ2VkIHF1
ZXJ5IHBhcmFtcyBtZXRhIG9iamVjdCBmb3IgYSBnaXZlbiByb3V0ZS4KLSAgICAgICAgICAgICAg
ICAgICAgVXNlZnVsIGZvciBhc2tpbmcgYSByb3V0ZSB3aGF0IGl0cyBrbm93biBxdWVyeSBwYXJh
bXMgYXJlLgotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfcXVlcnlQYXJhbXNG
b3I6IGZ1bmN0aW9uKGxlYWZSb3V0ZU5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5f
cXBDYWNoZVtsZWFmUm91dGVOYW1lXSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fcXBDYWNoZVtsZWFmUm91dGVOYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgbWFwID0ge30sIHFwcyA9IFtdLCBxcENhY2hlID0gdGhpcy5fcXBDYWNoZVts
ZWFmUm91dGVOYW1lXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXAsCi0gICAgICAg
ICAgICAgICAgICAgIHFwczogcXBzCi0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ICAgIHZhciByb3V0ZXJqcyA9IHRoaXMucm91dGVyLAotICAgICAgICAgICAgICAgIHJlY29nSGFu
ZGxlckluZm9zID0gcm91dGVyanMucmVjb2duaXplci5oYW5kbGVyc0ZvcihsZWFmUm91dGVOYW1l
KTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSByZWNvZ0hhbmRsZXJJ
bmZvcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVj
b2dIYW5kbGVyID0gcmVjb2dIYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciByb3V0ZSA9IHJvdXRlcmpzLmdldEhhbmRsZXIocmVjb2dIYW5kbGVyLmhhbmRsZXIpOwotICAg
ICAgICAgICAgICAgICAgICB2YXIgcXBNZXRhID0gZ2V0KHJvdXRlLCAnX3FwJyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFxcE1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVy
Z2UobWFwLCBxcE1ldGEubWFwKTsKLSAgICAgICAgICAgICAgICAgICAgcXBzLnB1c2guYXBwbHko
cXBzLCBxcE1ldGEucXBzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBxcHM6IHFwcywKLSAgICAgICAgICAgICAgICAg
ICAgbWFwOiBtYXAKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgYmVjb21lUmVzb2x2ZWQ6IGZ1bmN0aW9uKHBh
eWxvYWQsIHJlc29sdmVkQ29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJh
bXMgPSB0aGlzLnNlcmlhbGl6ZShyZXNvbHZlZENvbnRleHQpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBheWxvYWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Rhc2hS
ZXNvbHZlZE1vZGVsKHBheWxvYWQsIHJlc29sdmVkQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwYXlsb2FkLnBhcmFtcyA9IHBheWxvYWQucGFyYW1zIHx8IHt9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgcGF5bG9hZC5wYXJhbXNbdGhpcy5uYW1lXSA9IHBhcmFtczsKLSAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
YWN0b3J5KCdyZXNvbHZlZCcsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHJl
c29sdmVkQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zCi0gICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAg
ICAgICBfaHlkcmF0ZVVuc3VwcGxpZWRRdWVyeVBhcmFtczogZnVuY3Rpb24obGVhZlJvdXRlTmFt
ZSwgY29udGV4dHMsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0g
Y2FsY3VsYXRlUG9zdFRyYW5zaXRpb25TdGF0ZSh0aGlzLCBsZWFmUm91dGVOYW1lLCBjb250ZXh0
cyk7Ci0gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJbmZv
czsKLSAgICAgICAgICAgICAgICB2YXIgYXBwQ2FjaGUgPSB0aGlzLl9idWNrZXRDYWNoZTsKLQot
ICAgICAgICAgICAgICAgIHN0YXNoUGFyYW1OYW1lcyh0aGlzLCBoYW5kbGVySW5mb3MpOwotCi0g
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7
IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGUgPSBoYW5kbGVy
SW5mb3NbaV0uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHFwTWV0YSA9IGdldChy
b3V0ZSwgJ19xcCcpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBxcExl
biA9IHFwTWV0YS5xcHMubGVuZ3RoOyBqIDwgcXBMZW47ICsraikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHFwID0gcXBNZXRhLnFwc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwcmVzZW50UHJvcCA9IHFwLnByb3AgaW4gcXVlcnlQYXJhbXMgJiYgcXAucHJvcCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgcXAuZnByb3AgaW4gcXVlcnlQYXJhbXMgJiYgcXAuZnBy
b3A7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZW50UHJvcCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZW50UHJvcCAhPT0gcXAuZnByb3ApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbcXAuZnByb3BdID0gcXVl
cnlQYXJhbXNbcHJlc2VudFByb3BdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgcXVlcnlQYXJhbXNbcHJlc2VudFByb3BdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXJQcm90byA9IHFwLmNQcm90bzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY2FjaGVNZXRhID0gZ2V0KGNvbnRyb2xsZXJQcm90bywgJ19j
YWNoZU1ldGEnKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZUtleSA9
IGNvbnRyb2xsZXJQcm90by5fY2FsY3VsYXRlQ2FjaGVLZXkocXAuY3RybCwgY2FjaGVNZXRhW3Fw
LnByb3BdLnBhcnRzLCBzdGF0ZS5wYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHF1ZXJ5UGFyYW1zW3FwLmZwcm9wXSA9IGFwcENhY2hlLmxvb2t1cChjYWNoZUtleSwgcXAucHJv
cCwgcXAuZGVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9z
Y2hlZHVsZUxvYWRpbmdFdmVudDogZnVuY3Rpb24odHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsK
LSAgICAgICAgICAgICAgICB0aGlzLl9jYW5jZWxMb2FkaW5nRXZlbnQoKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9sb2FkaW5nU3RhdGVUaW1lciA9IHJ1bi5zY2hlZHVsZU9uY2UoJ3JvdXRlclRy
YW5zaXRpb25zJywgdGhpcywgJ19maXJlTG9hZGluZ0V2ZW50JywgdHJhbnNpdGlvbiwgb3JpZ2lu
Um91dGUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2ZpcmVMb2FkaW5nRXZlbnQ6
IGZ1bmN0aW9uKHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0aGlzLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IERvbid0IGZpcmUgYW4gZXZlbnQgaWYgd2UndmUgc2luY2UgbW92ZWQgb24gZnJvbQotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNpdGlvbiB0aGF0IHB1dCB1cyBpbiBhIGxvYWRpbmcg
c3RhdGUuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnRyaWdnZXIodHJ1ZSwgJ2xvYWRpbmcnLCB0cmFu
c2l0aW9uLCBvcmlnaW5Sb3V0ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfY2Fu
Y2VsTG9hZGluZ0V2ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2xvYWRpbmdTdGF0ZVRpbWVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bi5jYW5jZWwodGhp
cy5fbG9hZGluZ1N0YXRlVGltZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB0aGlzLl9sb2FkaW5nU3RhdGVUaW1lciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIC8qCi0gICAgICAgICAgICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRl
cmF0aW5nIHJvb3Qtd2FyZCwgc3RhcnRpbmcKLSAgICAgICAgICAgICAgZnJvbSAoYnV0IG5vdCBp
bmNsdWRpbmcpIHRoZSBwcm92aWRlZCBgb3JpZ2luUm91dGVgLgotCi0gICAgICAgICAgICAgIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgbGFzdCBjYWxsYmFjayBmaXJlZCByZXF1ZXN0ZWQKLSAgICAgICAg
ICAgICAgdG8gYnViYmxlIHVwd2FyZC4KLQotICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAg
ICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZvckVhY2hSb3V0ZUFib3ZlKG9yaWdpblJvdXRl
LCB0cmFuc2l0aW9uLCBjYWxsYmFjaykgewotICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9
IHRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zOwotICAgICAgICAgICAgdmFyIG9yaWdpblJv
dXRlRm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbywgcm91dGU7Ci0K
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSBoYW5kbGVySW5mb3MubGVuZ3RoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsK
LSAgICAgICAgICAgICAgICByb3V0ZSA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIW9yaWdpblJvdXRlRm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG9yaWdpblJvdXRlID09PSByb3V0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2lu
Um91dGVGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KGNhbGxiYWNrKHJvdXRlLCBoYW5kbGVySW5mb3NbaSArIDFdLmhhbmRsZXIpICE9PSB0cnVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRoZXNlIGdldCBpbnZva2VkIHdoZW4gYW4gYWN0aW9uIGJ1YmJsZXMgYWJvdmUgQXBw
bGljYXRpb25Sb3V0ZQotICAgICAgICAvLyBhbmQgYXJlIG5vdCBtZWFudCB0byBiZSBvdmVycmlk
YWJsZS4KLSAgICAgICAgdmFyIGRlZmF1bHRBY3Rpb25IYW5kbGVycyA9IHsKLQotICAgICAgICAg
ICAgd2lsbFJlc29sdmVNb2RlbDogZnVuY3Rpb24odHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsK
LSAgICAgICAgICAgICAgICBvcmlnaW5Sb3V0ZS5yb3V0ZXIuX3NjaGVkdWxlTG9hZGluZ0V2ZW50
KHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGVycm9yOiBmdW5jdGlvbihlcnJvciwgdHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3Igc3Vic3Rh
dGUgdG8gZW50ZXIuCi0gICAgICAgICAgICAgICAgdmFyIHJvdXRlciA9IG9yaWdpblJvdXRlLnJv
dXRlcjsKLQotICAgICAgICAgICAgICAgIHZhciB0cnlUb3BMZXZlbCA9IGZvckVhY2hSb3V0ZUFi
b3ZlKG9yaWdpblJvdXRlLCB0cmFuc2l0aW9uLCBmdW5jdGlvbihyb3V0ZSwgY2hpbGRSb3V0ZSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRFcnJvclJvdXRlTmFtZSA9IGZpbmRDaGls
ZFJvdXRlTmFtZShyb3V0ZSwgY2hpbGRSb3V0ZSwgJ2Vycm9yJyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaGlsZEVycm9yUm91dGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
b3V0ZXIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKGNoaWxkRXJyb3JSb3V0ZU5hbWUsIGVycm9y
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICAgIGlmICh0cnlUb3BMZXZlbCkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBDaGVjayBmb3IgdG9wLWxldmVsIGVycm9yIHN0YXRlIHRvIGVudGVyLgotICAgICAgICAg
ICAgICAgICAgICBpZiAocm91dGVIYXNCZWVuRGVmaW5lZChvcmlnaW5Sb3V0ZS5yb3V0ZXIsICdh
cHBsaWNhdGlvbl9lcnJvcicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXIuaW50
ZXJtZWRpYXRlVHJhbnNpdGlvblRvKCdhcHBsaWNhdGlvbl9lcnJvcicsIGVycm9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGZpcmUgYW4g
YXNzZXJ0aW9uIGlmIHdlIGZvdW5kIGFuIGVycm9yIHN1YnN0YXRlLgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbG9nRXJy
b3IoZXJyb3IsICdFcnJvciB3aGlsZSBwcm9jZXNzaW5nIHJvdXRlOiAnICsgdHJhbnNpdGlvbi50
YXJnZXROYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxvYWRpbmc6IGZ1bmN0
aW9uKHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKSB7Ci0gICAgICAgICAgICAgICAgLy8gQXR0ZW1w
dCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGxvYWRpbmcgc3Vic3RhdGUgdG8gZW50ZXIuCi0gICAg
ICAgICAgICAgICAgdmFyIHJvdXRlciA9IG9yaWdpblJvdXRlLnJvdXRlcjsKLQotICAgICAgICAg
ICAgICAgIHZhciB0cnlUb3BMZXZlbCA9IGZvckVhY2hSb3V0ZUFib3ZlKG9yaWdpblJvdXRlLCB0
cmFuc2l0aW9uLCBmdW5jdGlvbihyb3V0ZSwgY2hpbGRSb3V0ZSkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgY2hpbGRMb2FkaW5nUm91dGVOYW1lID0gZmluZENoaWxkUm91dGVOYW1lKHJvdXRl
LCBjaGlsZFJvdXRlLCAnbG9hZGluZycpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZExvYWRpbmdSb3V0ZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlci5pbnRl
cm1lZGlhdGVUcmFuc2l0aW9uVG8oY2hpbGRMb2FkaW5nUm91dGVOYW1lKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSBhYm92ZSBwaXZvdCByb3V0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zaXRpb24ucGl2b3RIYW5kbGVyICE9PSByb3V0ZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICh0cnlUb3BMZXZlbCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdG9wLWxldmVsIGxvYWRpbmcgc3RhdGUg
dG8gZW50ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZUhhc0JlZW5EZWZpbmVkKG9y
aWdpblJvdXRlLnJvdXRlciwgJ2FwcGxpY2F0aW9uX2xvYWRpbmcnKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25UbygnYXBwbGljYXRpb25f
bG9hZGluZycpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgICAgIGZ1bmN0aW9uIGxvZ0Vycm9yKGVycm9yLCBpbml0aWFsTWVzc2FnZSkgewotICAg
ICAgICAgICAgdmFyIGVycm9yQXJncyA9IFtdOwotCi0gICAgICAgICAgICBpZiAoaW5pdGlhbE1l
c3NhZ2UpIHsKLSAgICAgICAgICAgICAgICBlcnJvckFyZ3MucHVzaChpbml0aWFsTWVzc2FnZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAg
ICAgIGlmIChlcnJvci5tZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yQXJncy5w
dXNoKGVycm9yLm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoZXJyb3Iuc3RhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JBcmdzLnB1c2goZXJy
b3Iuc3RhY2spOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgZXJyb3IgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yQXJncy5w
dXNoKGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEVtYmVyLkxvZ2dlci5lcnJvci5hcHBseSh0aGlzLCBlcnJvckFyZ3MpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gZmluZENoaWxkUm91dGVOYW1lKHBhcmVudFJvdXRlLCBvcmln
aW5hdGluZ0NoaWxkUm91dGUsIG5hbWUpIHsKLSAgICAgICAgICAgIHZhciByb3V0ZXIgPSBwYXJl
bnRSb3V0ZS5yb3V0ZXI7Ci0gICAgICAgICAgICB2YXIgY2hpbGROYW1lOwotICAgICAgICAgICAg
dmFyIHRhcmdldENoaWxkUm91dGVOYW1lID0gb3JpZ2luYXRpbmdDaGlsZFJvdXRlLnJvdXRlTmFt
ZS5zcGxpdCgnLicpLnBvcCgpOwotICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHBhcmVudFJv
dXRlLnJvdXRlTmFtZSA9PT0gJ2FwcGxpY2F0aW9uJyA/ICcnIDogcGFyZW50Um91dGUucm91dGVO
YW1lICsgJy4nOwotCi0KLSAgICAgICAgICAgIC8vIFNlY29uZCwgdHJ5IGdlbmVyYWwgbG9hZGlu
ZyBzdGF0ZSwgZS5nLiAnbG9hZGluZycKLSAgICAgICAgICAgIGNoaWxkTmFtZSA9IG5hbWVzcGFj
ZSArIG5hbWU7Ci0gICAgICAgICAgICBpZiAocm91dGVIYXNCZWVuRGVmaW5lZChyb3V0ZXIsIGNo
aWxkTmFtZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGROYW1lOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcm91dGVIYXNCZWVuRGVmaW5lZChy
b3V0ZXIsIG5hbWUpIHsKLSAgICAgICAgICAgIHZhciBjb250YWluZXIgPSByb3V0ZXIuY29udGFp
bmVyOwotICAgICAgICAgICAgcmV0dXJuIHJvdXRlci5oYXNSb3V0ZShuYW1lKSAmJgotICAgICAg
ICAgICAgKGNvbnRhaW5lci5oYXMoJ3RlbXBsYXRlOicgKyBuYW1lKSB8fCBjb250YWluZXIuaGFz
KCdyb3V0ZTonICsgbmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gdHJpZ2dl
ckV2ZW50KGhhbmRsZXJJbmZvcywgaWdub3JlRmFpbHVyZSwgYXJncykgewotICAgICAgICAgICAg
dmFyIG5hbWUgPSBhcmdzLnNoaWZ0KCk7Ci0KLSAgICAgICAgICAgIGlmICghaGFuZGxlckluZm9z
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlnbm9yZUZhaWx1cmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRW1iZXJFcnJvcigiQ2FuJ3QgdHJpZ2dlciBhY3Rpb24gJyIgKyBuYW1lICsgIicgYmVjYXVz
ZSB5b3VyIGFwcCBoYXNuJ3QgZmluaXNoZWQgdHJhbnNpdGlvbmluZyBpbnRvIGl0cyBmaXJzdCBy
b3V0ZS4gVG8gdHJpZ2dlciBhbiBhY3Rpb24gb24gZGVzdGluYXRpb24gcm91dGVzIGR1cmluZyBh
IHRyYW5zaXRpb24sIHlvdSBjYW4gY2FsbCBgLnNlbmQoKWAgb24gdGhlIGBUcmFuc2l0aW9uYCBv
YmplY3QgcGFzc2VkIHRvIHRoZSBgbW9kZWwvYmVmb3JlTW9kZWwvYWZ0ZXJNb2RlbGAgaG9va3Mu
Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBldmVudFdhc0hhbmRsZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbywgaGFuZGxlcjsKLQotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZvcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewot
ICAgICAgICAgICAgICAgIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9zW2ldOwotICAgICAgICAg
ICAgICAgIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotCi0gICAgICAgICAgICAgICAg
aWYgKGhhbmRsZXIuX2FjdGlvbnMgJiYgaGFuZGxlci5fYWN0aW9uc1tuYW1lXSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFuZGxlci5fYWN0aW9uc1tuYW1lXS5hcHBseShoYW5kbGVyLCBh
cmdzKSA9PT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRlZmF1bHRBY3Rpb25IYW5kbGVyc1tu
YW1lXSkgewotICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb25IYW5kbGVyc1tuYW1lXS5hcHBs
eShudWxsLCBhcmdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghZXZlbnRXYXNIYW5kbGVkICYmICFpZ25vcmVGYWlsdXJlKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIk5vdGhpbmcgaGFuZGxlZCB0aGUg
YWN0aW9uICciICsgbmFtZSArICInLiBJZiB5b3UgZGlkIGhhbmRsZSB0aGUgYWN0aW9uLCB0aGlz
IGVycm9yIGNhbiBiZSBjYXVzZWQgYnkgcmV0dXJuaW5nIHRydWUgZnJvbSBhbiBhY3Rpb24gaGFu
ZGxlciBpbiBhIGNvbnRyb2xsZXIsIGNhdXNpbmcgdGhlIGFjdGlvbiB0byBidWJibGUuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVQb3N0
VHJhbnNpdGlvblN0YXRlKGVtYmVyUm91dGVyLCBsZWFmUm91dGVOYW1lLCBjb250ZXh0cykgewot
ICAgICAgICAgICAgdmFyIHJvdXRlcmpzID0gZW1iZXJSb3V0ZXIucm91dGVyOwotICAgICAgICAg
ICAgdmFyIHN0YXRlID0gcm91dGVyanMuYXBwbHlJbnRlbnQobGVhZlJvdXRlTmFtZSwgY29udGV4
dHMpOwotICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJbmZvczsK
LSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBzdGF0ZS5wYXJhbXM7Ci0KLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsZW4gPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsK
LSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3NbaV07Ci0gICAg
ICAgICAgICAgICAgaWYgKCFoYW5kbGVySW5mby5pc1Jlc29sdmVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm8uYmVjb21lUmVzb2x2ZWQobnVsbCwgaGFu
ZGxlckluZm8uY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBh
cmFtc1toYW5kbGVySW5mby5uYW1lXSA9IGhhbmRsZXJJbmZvLnBhcmFtczsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIHVwZGF0ZVBhdGhzKHJvdXRlcikgewotICAgICAgICAgICAgdmFyIGFwcENvbnRyb2xsZXIg
PSByb3V0ZXIuY29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjphcHBsaWNhdGlvbicpOwotCi0g
ICAgICAgICAgICBpZiAoIWFwcENvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBhcHBD
b250cm9sbGVyIG1pZ2h0IG5vdCBleGlzdCB3aGVuIHRvcC1sZXZlbCBsb2FkaW5nL2Vycm9yCi0g
ICAgICAgICAgICAgICAgLy8gc3Vic3RhdGVzIGhhdmUgYmVlbiBlbnRlcmVkIHNpbmNlIEFwcGxp
Y2F0aW9uUm91dGUgaGFzbid0Ci0gICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgYmVlbiBlbnRl
cmVkIGF0IHRoYXQgcG9pbnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YXIgaW5mb3MgPSByb3V0ZXIucm91dGVyLmN1cnJlbnRIYW5kbGVy
SW5mb3MsCi0gICAgICAgICAgICBwYXRoID0gRW1iZXJSb3V0ZXIuX3JvdXRlUGF0aChpbmZvcyk7
Ci0KLSAgICAgICAgICAgIGlmICghKCdjdXJyZW50UGF0aCcgaW4gYXBwQ29udHJvbGxlcikpIHsK
LSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShhcHBDb250cm9sbGVyLCAnY3VycmVudFBh
dGgnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0KGFwcENvbnRyb2xsZXIsICdj
dXJyZW50UGF0aCcsIHBhdGgpOwotCi0gICAgICAgICAgICBpZiAoISgnY3VycmVudFJvdXRlTmFt
ZScgaW4gYXBwQ29udHJvbGxlcikpIHsKLSAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShh
cHBDb250cm9sbGVyLCAnY3VycmVudFJvdXRlTmFtZScpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzZXQoYXBwQ29udHJvbGxlciwgJ2N1cnJlbnRSb3V0ZU5hbWUnLCBpbmZvc1tpbmZv
cy5sZW5ndGggLSAxXS5uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIEVtYmVyUm91dGVyLnJl
b3BlbkNsYXNzKHsKLSAgICAgICAgICAgIHJvdXRlcjogbnVsbCwKLSAgICAgICAgICAgIG1hcDog
ZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpcy5y
b3V0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKCFyb3V0ZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcm91dGVyID0gbmV3IFJvdXRlcigpOwotCi0KLSAgICAgICAgICAgICAgICAgICAgcm91dGVy
Ll90cmlnZ2VyV2lsbENoYW5nZUNvbnRleHQgPSBFbWJlci5LOwotICAgICAgICAgICAgICAgICAg
ICByb3V0ZXIuX3RyaWdnZXJXaWxsTGVhdmUgPSBFbWJlci5LOwotCi0KLSAgICAgICAgICAgICAg
ICAgICAgcm91dGVyLmNhbGxiYWNrcyA9IFtdOwotICAgICAgICAgICAgICAgICAgICByb3V0ZXIu
dHJpZ2dlckV2ZW50ID0gdHJpZ2dlckV2ZW50OwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJl
b3BlbkNsYXNzKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjogcm91dGVyIAotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgZHNsID0gRW1iZXJSb3V0ZXJEU0wubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlc291cmNlKCdhcHBsaWNhdGlvbicsIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGg6ICIvIiAKLSAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdXRlci5jYWxsYmFj
a3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXIuY2Fs
bGJhY2tzW2ldLmNhbGwodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJvdXRlci5jYWxs
YmFja3MucHVzaChjYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgcm91dGVyLm1hcChkc2wuZ2Vu
ZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlcjsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIF9yb3V0ZVBhdGg6IGZ1bmN0aW9uKGhhbmRsZXJJbmZvcykgewotICAg
ICAgICAgICAgICAgIHZhciBwYXRoID0gW107Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGhhbmRsZSBjb2FsZXNjaW5nIHJlc291cmNlIG5hbWVzIHRoYXQKLSAgICAgICAgICAgICAg
ICAvLyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVpciBwYXJlbnQncyBuYW1lcywgZS5nLgotICAgICAg
ICAgICAgICAgIC8vIFsnZm9vJywgJ2Zvby5iYXIuYmF6J10gPT4gJ2Zvby5iYXIuYmF6Jywgbm90
ICdmb28uZm9vLmJhci5iYXonCi0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnRlcnNlY3Rp
b25NYXRjaGVzKGExLCBhMikgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwg
bGVuID0gYTEubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhMVtpXSAhPT0gYTJbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUsIG5hbWVQYXJ0cywgb2xkTmFtZVBhcnRzOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8
IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gaGFuZGxlckluZm9zW2ldLm5h
bWU7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoIi4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgb2xkTmFtZVBhcnRzID0gc2xpY2UuY2FsbChwYXRoKTsKLQotICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAob2xkTmFtZVBhcnRzLmxlbmd0aCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbk1hdGNoZXMob2xkTmFtZVBhcnRzLCBuYW1l
UGFydHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGROYW1lUGFydHMuc2hp
ZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHBhdGgu
cHVzaC5hcHBseShwYXRoLCBuYW1lUGFydHMuc2xpY2Uob2xkTmFtZVBhcnRzLmxlbmd0aCkpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBwYXRoLmpvaW4oIi4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gbGlzdGVu
Rm9yVHJhbnNpdGlvbkVycm9ycyh0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICB0cmFuc2l0aW9u
LnRoZW4obnVsbCwgZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVycm9y
IHx8ICFlcnJvci5uYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gIlVucmVjb2du
aXplZFVSTEVycm9yIikgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBV
UkwgJyIgKyBlcnJvci5tZXNzYWdlICsgIicgZGlkIG5vdCBtYXRjaCBhbnkgcm91dGVzIGluIHlv
dXIgYXBwbGljYXRpb24iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUg
PT09ICdUcmFuc2l0aW9uQWJvcnRlZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBp
Z25vcmUgVHJhbnNpdGlvbkFib3J0ZWQgaGVyZQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICB9LCAnRW1iZXI6IFBy
b2Nlc3MgZXJyb3JzIGZyb20gUm91dGVyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlv
biByZXNlbWJsZXNVUkwoc3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHN0ciA9PT0g
J3N0cmluZycgJiYgKCBzdHIgPT09ICcnIHx8IHN0ci5jaGFyQXQoMCkgPT09ICcvJyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmb3JFYWNoUXVlcnlQYXJhbShyb3V0ZXIsIHRhcmdl
dFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMsIGNhbGxiYWNrKSB7Ci0KLSAgICAgICAgICAgIHZhciBx
cENhY2hlID0gcm91dGVyLl9xdWVyeVBhcmFtc0Zvcih0YXJnZXRSb3V0ZU5hbWUpLAotICAgICAg
ICAgICAgcXBzID0gcXBDYWNoZS5xcHM7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBx
dWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbXMuaGFzT3duUHJv
cGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcXVlcnlQYXJhbXNba2V5XSwKLSAg
ICAgICAgICAgICAgICBxcCA9IHFwQ2FjaGUubWFwW2tleV07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAocXApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soa2V5LCB2YWx1ZSwgcXApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9f
ZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlclJvdXRlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUo
ImVtYmVyLXJ1bnRpbWUiLAotICAgIFsiZW1iZXItbWV0YWwiLCAiZW1iZXItcnVudGltZS9jb3Jl
IiwgImVtYmVyLXJ1bnRpbWUva2V5cyIsICJlbWJlci1ydW50aW1lL2NvbXBhcmUiLCAiZW1iZXIt
cnVudGltZS9jb3B5IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hbWVzcGFjZSIsICJlbWJlci1y
dW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vdHJhY2tlZF9hcnJh
eSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdWJhcnJheSIsICJlbWJlci1ydW50aW1lL3N5c3Rl
bS9jb250YWluZXIiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vYXBwbGljYXRpb24iLCAiZW1iZXIt
cnVudGltZS9zeXN0ZW0vYXJyYXlfcHJveHkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0
X3Byb3h5IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0IiwgImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL2VhY2hfcHJveHkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5
IiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3NldCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJp
bmciLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vZGVmZXJyZWQiLCAiZW1iZXItcnVudGltZS9zeXN0
ZW0vbGF6eV9sb2FkIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwgImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL2NvbXBhcmFibGUiLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29weWFibGUiLCAi
ZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsICJlbWJlci1ydW50aW1lL21peGlucy9m
cmVlemFibGUiLCAiZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZSIsICJlbWJlci1ydW50
aW1lL21peGlucy9hY3Rpb25faGFuZGxlciIsICJlbWJlci1ydW50aW1lL21peGlucy9kZWZlcnJl
ZCIsICJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1lcmFibGUiLCAiZW1iZXItcnVu
dGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsICJlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRf
YWN0aW9uX3N1cHBvcnQiLCAiZW1iZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCIsICJlbWJlci1y
dW50aW1lL21peGlucy9wcm9taXNlX3Byb3h5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3NvcnRh
YmxlIiwgImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvYXJyYXlfY29tcHV0ZWQiLCAiZW1iZXItcnVu
dGltZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWQiLCAiZW1iZXItcnVudGltZS9jb21wdXRlZC9y
ZWR1Y2VfY29tcHV0ZWRfbWFjcm9zIiwgImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvYXJyYXlf
Y29udHJvbGxlciIsICJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL29iamVjdF9jb250cm9sbGVy
IiwgImVtYmVyLXJ1bnRpbWUvY29udHJvbGxlcnMvY29udHJvbGxlciIsICJlbWJlci1ydW50aW1l
L21peGlucy9jb250cm9sbGVyIiwgImVtYmVyLXJ1bnRpbWUvZXh0L3JzdnAiLCAiZW1iZXItcnVu
dGltZS9leHQvc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9uIiwgImV4cG9ydHMi
XSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBl
bmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5
Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBf
X2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2Rl
cGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVu
ZGVuY3kxNl9fLCBfX2RlcGVuZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2RlcGVuZGVu
Y3kxOV9fLCBfX2RlcGVuZGVuY3kyMF9fLCBfX2RlcGVuZGVuY3kyMV9fLCBfX2RlcGVuZGVuY3ky
Ml9fLCBfX2RlcGVuZGVuY3kyM19fLCBfX2RlcGVuZGVuY3kyNF9fLCBfX2RlcGVuZGVuY3kyNV9f
LCBfX2RlcGVuZGVuY3kyNl9fLCBfX2RlcGVuZGVuY3kyN19fLCBfX2RlcGVuZGVuY3kyOF9fLCBf
X2RlcGVuZGVuY3kyOV9fLCBfX2RlcGVuZGVuY3kzMF9fLCBfX2RlcGVuZGVuY3kzMV9fLCBfX2Rl
cGVuZGVuY3kzMl9fLCBfX2RlcGVuZGVuY3kzM19fLCBfX2RlcGVuZGVuY3kzNF9fLCBfX2RlcGVu
ZGVuY3kzNV9fLCBfX2RlcGVuZGVuY3kzNl9fLCBfX2RlcGVuZGVuY3kzN19fLCBfX2RlcGVuZGVu
Y3kzOF9fLCBfX2RlcGVuZGVuY3kzOV9fLCBfX2RlcGVuZGVuY3k0MF9fLCBfX2RlcGVuZGVuY3k0
MV9fLCBfX2RlcGVuZGVuY3k0Ml9fLCBfX2RlcGVuZGVuY3k0M19fLCBfX2RlcGVuZGVuY3k0NF9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAg
ICAgICAgICAgRW1iZXIgUnVudGltZQotCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAg
ICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgIEByZXF1aXJlcyBl
bWJlci1tZXRhbAotICAgICAgICAgICAgKi8KLQotICAgICAgICAvLyBCRUdJTiBJTVBPUlRTCi0g
ICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgaXNFcXVhbCA9IF9fZGVwZW5kZW5jeTJfXy5pc0VxdWFsOwotICAgICAgICB2YXIga2V5cyA9
IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY29tcGFyZSA9IF9fZGVw
ZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY29weSA9IF9fZGVwZW5kZW5jeTVf
X1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBOYW1lc3BhY2UgPSBfX2RlcGVuZGVuY3k2X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5N19fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBUcmFja2VkQXJyYXkgPSBfX2RlcGVuZGVuY3k4X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIFN1YkFycmF5ID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBDb250YWluZXIgPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBBcHBsaWNhdGlvbiA9IF9fZGVwZW5kZW5jeTExX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIEFycmF5UHJveHkgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBPYmplY3RQcm94eSA9IF9fZGVwZW5kZW5jeTEzX19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIENvcmVPYmplY3QgPSBfX2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBFYWNoQXJyYXkgPSBfX2RlcGVuZGVuY3kxNV9fLkVhY2hBcnJheTsKLSAgICAgICAg
dmFyIEVhY2hQcm94eSA9IF9fZGVwZW5kZW5jeTE1X18uRWFjaFByb3h5OwotCi0gICAgICAgIHZh
ciBOYXRpdmVBcnJheSA9IF9fZGVwZW5kZW5jeTE2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IFNldCA9IF9fZGVwZW5kZW5jeTE3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyU3Ry
aW5nVXRpbHMgPSBfX2RlcGVuZGVuY3kxOF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBEZWZl
cnJlZCA9IF9fZGVwZW5kZW5jeTE5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIG9uTG9hZCA9
IF9fZGVwZW5kZW5jeTIwX18ub25Mb2FkOwotICAgICAgICB2YXIgcnVuTG9hZEhvb2tzID0gX19k
ZXBlbmRlbmN5MjBfXy5ydW5Mb2FkSG9va3M7Ci0KLSAgICAgICAgdmFyIEVtYmVyQXJyYXkgPSBf
X2RlcGVuZGVuY3kyMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBDb21wYXJhYmxlID0gX19k
ZXBlbmRlbmN5MjJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29weWFibGUgPSBfX2RlcGVu
ZGVuY3kyM19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbnVtZXJhYmxlID0gX19kZXBlbmRl
bmN5MjRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRnJlZXphYmxlID0gX19kZXBlbmRlbmN5
MjVfXy5GcmVlemFibGU7Ci0gICAgICAgIHZhciBGUk9aRU5fRVJST1IgPSBfX2RlcGVuZGVuY3ky
NV9fLkZST1pFTl9FUlJPUjsKLQotICAgICAgICB2YXIgT2JzZXJ2YWJsZSA9IF9fZGVwZW5kZW5j
eTI2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEFjdGlvbkhhbmRsZXIgPSBfX2RlcGVuZGVu
Y3kyN19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBEZWZlcnJlZE1peGluID0gX19kZXBlbmRl
bmN5MjhfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgTXV0YWJsZUVudW1lcmFibGUgPSBfX2Rl
cGVuZGVuY3kyOV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBNdXRhYmxlQXJyYXkgPSBfX2Rl
cGVuZGVuY3kzMF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBUYXJnZXRBY3Rpb25TdXBwb3J0
ID0gX19kZXBlbmRlbmN5MzFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRXZlbnRlZCA9IF9f
ZGVwZW5kZW5jeTMyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFByb21pc2VQcm94eU1peGlu
ID0gX19kZXBlbmRlbmN5MzNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgU29ydGFibGVNaXhp
biA9IF9fZGVwZW5kZW5jeTM0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGFycmF5Q29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3kzNV9fLmFycmF5Q29tcHV0ZWQ7Ci0gICAgICAgIHZhciBBcnJheUNv
bXB1dGVkUHJvcGVydHkgPSBfX2RlcGVuZGVuY3kzNV9fLkFycmF5Q29tcHV0ZWRQcm9wZXJ0eTsK
LQotICAgICAgICB2YXIgcmVkdWNlQ29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kzNl9fLnJlZHVjZUNv
bXB1dGVkOwotICAgICAgICB2YXIgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eSA9IF9fZGVwZW5kZW5j
eTM2X18uUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eTsKLQotICAgICAgICB2YXIgc3VtID0gX19kZXBl
bmRlbmN5MzdfXy5zdW07Ci0gICAgICAgIHZhciBtaW4gPSBfX2RlcGVuZGVuY3kzN19fLm1pbjsK
LSAgICAgICAgdmFyIG1heCA9IF9fZGVwZW5kZW5jeTM3X18ubWF4OwotICAgICAgICB2YXIgbWFw
ID0gX19kZXBlbmRlbmN5MzdfXy5tYXA7Ci0gICAgICAgIHZhciBzb3J0ID0gX19kZXBlbmRlbmN5
MzdfXy5zb3J0OwotICAgICAgICB2YXIgc2V0RGlmZiA9IF9fZGVwZW5kZW5jeTM3X18uc2V0RGlm
ZjsKLSAgICAgICAgdmFyIG1hcEJ5ID0gX19kZXBlbmRlbmN5MzdfXy5tYXBCeTsKLSAgICAgICAg
dmFyIG1hcFByb3BlcnR5ID0gX19kZXBlbmRlbmN5MzdfXy5tYXBQcm9wZXJ0eTsKLSAgICAgICAg
dmFyIGZpbHRlciA9IF9fZGVwZW5kZW5jeTM3X18uZmlsdGVyOwotICAgICAgICB2YXIgZmlsdGVy
QnkgPSBfX2RlcGVuZGVuY3kzN19fLmZpbHRlckJ5OwotICAgICAgICB2YXIgZmlsdGVyUHJvcGVy
dHkgPSBfX2RlcGVuZGVuY3kzN19fLmZpbHRlclByb3BlcnR5OwotICAgICAgICB2YXIgdW5pcSA9
IF9fZGVwZW5kZW5jeTM3X18udW5pcTsKLSAgICAgICAgdmFyIHVuaW9uID0gX19kZXBlbmRlbmN5
MzdfXy51bmlvbjsKLSAgICAgICAgdmFyIGludGVyc2VjdCA9IF9fZGVwZW5kZW5jeTM3X18uaW50
ZXJzZWN0OwotCi0gICAgICAgIHZhciBBcnJheUNvbnRyb2xsZXIgPSBfX2RlcGVuZGVuY3kzOF9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBPYmplY3RDb250cm9sbGVyID0gX19kZXBlbmRlbmN5
MzlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29udHJvbGxlciA9IF9fZGVwZW5kZW5jeTQw
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIENvbnRyb2xsZXJNaXhpbiA9IF9fZGVwZW5kZW5j
eTQxX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgUlNWUCA9IF9fZGVwZW5kZW5jeTQyX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgLy8ganVzdCBmb3Igc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5n
IEVtYmVyLlJTVlAKLSAgICAgICAgLy8ganVzdCBmb3Igc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5n
IFN0cmluZy5wcm90b3R5cGUKLSAgICAgICAgLy8ganVzdCBmb3Igc2lkZSBlZmZlY3Qgb2YgZXh0
ZW5kaW5nIEZ1bmN0aW9uLnByb3RvdHlwZQotICAgICAgICAvLyBFTkQgSU1QT1JUUwotCi0gICAg
ICAgIC8vIEJFR0lOIEVYUE9SVFMKLSAgICAgICAgRW1iZXIuY29tcGFyZSA9IGNvbXBhcmU7Ci0g
ICAgICAgIEVtYmVyLmNvcHkgPSBjb3B5OwotICAgICAgICBFbWJlci5pc0VxdWFsID0gaXNFcXVh
bDsKLSAgICAgICAgRW1iZXIua2V5cyA9IGtleXM7Ci0KLSAgICAgICAgRW1iZXIuQXJyYXkgPSBF
bWJlckFycmF5OwotCi0gICAgICAgIEVtYmVyLkNvbXBhcmFibGUgPSBDb21wYXJhYmxlOwotICAg
ICAgICBFbWJlci5Db3B5YWJsZSA9IENvcHlhYmxlOwotCi0gICAgICAgIEVtYmVyLlNvcnRhYmxl
TWl4aW4gPSBTb3J0YWJsZU1peGluOwotCi0gICAgICAgIEVtYmVyLkZyZWV6YWJsZSA9IEZyZWV6
YWJsZTsKLSAgICAgICAgRW1iZXIuRlJPWkVOX0VSUk9SID0gRlJPWkVOX0VSUk9SOwotCi0gICAg
ICAgIEVtYmVyLkRlZmVycmVkTWl4aW4gPSBEZWZlcnJlZE1peGluOwotCi0gICAgICAgIEVtYmVy
Lk11dGFibGVFbnVtZXJhYmxlID0gTXV0YWJsZUVudW1lcmFibGU7Ci0gICAgICAgIEVtYmVyLk11
dGFibGVBcnJheSA9IE11dGFibGVBcnJheTsKLQotICAgICAgICBFbWJlci5UYXJnZXRBY3Rpb25T
dXBwb3J0ID0gVGFyZ2V0QWN0aW9uU3VwcG9ydDsKLSAgICAgICAgRW1iZXIuRXZlbnRlZCA9IEV2
ZW50ZWQ7Ci0KLSAgICAgICAgRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4gPSBQcm9taXNlUHJveHlN
aXhpbjsKLQotICAgICAgICBFbWJlci5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZTsKLQotICAgICAg
ICBFbWJlci5hcnJheUNvbXB1dGVkID0gYXJyYXlDb21wdXRlZDsKLSAgICAgICAgRW1iZXIuQXJy
YXlDb21wdXRlZFByb3BlcnR5ID0gQXJyYXlDb21wdXRlZFByb3BlcnR5OwotICAgICAgICBFbWJl
ci5yZWR1Y2VDb21wdXRlZCA9IHJlZHVjZUNvbXB1dGVkOwotICAgICAgICBFbWJlci5SZWR1Y2VD
b21wdXRlZFByb3BlcnR5ID0gUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eTsKLQotICAgICAgICAvLyBF
UzZUT0RPOiB0aGlzIHNlZW1zIGEgbGVzcyB0aGFuIGlkZWFsIHdheS9wbGFjZSB0byBhZGQgcHJv
cGVydGllcyB0byBFbWJlci5jb21wdXRlZAotICAgICAgICB2YXIgRW1Db21wdXRlZCA9IEVtYmVy
LmNvbXB1dGVkOwotCi0gICAgICAgIEVtQ29tcHV0ZWQuc3VtID0gc3VtOwotICAgICAgICBFbUNv
bXB1dGVkLm1pbiA9IG1pbjsKLSAgICAgICAgRW1Db21wdXRlZC5tYXggPSBtYXg7Ci0gICAgICAg
IEVtQ29tcHV0ZWQubWFwID0gbWFwOwotICAgICAgICBFbUNvbXB1dGVkLnNvcnQgPSBzb3J0Owot
ICAgICAgICBFbUNvbXB1dGVkLnNldERpZmYgPSBzZXREaWZmOwotICAgICAgICBFbUNvbXB1dGVk
Lm1hcEJ5ID0gbWFwQnk7Ci0gICAgICAgIEVtQ29tcHV0ZWQubWFwUHJvcGVydHkgPSBtYXBQcm9w
ZXJ0eTsKLSAgICAgICAgRW1Db21wdXRlZC5maWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgIEVtQ29t
cHV0ZWQuZmlsdGVyQnkgPSBmaWx0ZXJCeTsKLSAgICAgICAgRW1Db21wdXRlZC5maWx0ZXJQcm9w
ZXJ0eSA9IGZpbHRlclByb3BlcnR5OwotICAgICAgICBFbUNvbXB1dGVkLnVuaXEgPSB1bmlxOwot
ICAgICAgICBFbUNvbXB1dGVkLnVuaW9uID0gdW5pb247Ci0gICAgICAgIEVtQ29tcHV0ZWQuaW50
ZXJzZWN0ID0gaW50ZXJzZWN0OwotCi0gICAgICAgIEVtYmVyLlN0cmluZyA9IEVtYmVyU3RyaW5n
VXRpbHM7Ci0gICAgICAgIEVtYmVyLk9iamVjdCA9IEVtYmVyT2JqZWN0OwotICAgICAgICBFbWJl
ci5UcmFja2VkQXJyYXkgPSBUcmFja2VkQXJyYXk7Ci0gICAgICAgIEVtYmVyLlN1YkFycmF5ID0g
U3ViQXJyYXk7Ci0gICAgICAgIEVtYmVyLkNvbnRhaW5lciA9IENvbnRhaW5lcjsKLSAgICAgICAg
RW1iZXIuTmFtZXNwYWNlID0gTmFtZXNwYWNlOwotICAgICAgICBFbWJlci5FbnVtZXJhYmxlID0g
RW51bWVyYWJsZTsKLSAgICAgICAgRW1iZXIuQXJyYXlQcm94eSA9IEFycmF5UHJveHk7Ci0gICAg
ICAgIEVtYmVyLk9iamVjdFByb3h5ID0gT2JqZWN0UHJveHk7Ci0gICAgICAgIEVtYmVyLkFjdGlv
bkhhbmRsZXIgPSBBY3Rpb25IYW5kbGVyOwotICAgICAgICBFbWJlci5Db3JlT2JqZWN0ID0gQ29y
ZU9iamVjdDsKLSAgICAgICAgRW1iZXIuRWFjaEFycmF5ID0gRWFjaEFycmF5OwotICAgICAgICBF
bWJlci5FYWNoUHJveHkgPSBFYWNoUHJveHk7Ci0gICAgICAgIEVtYmVyLk5hdGl2ZUFycmF5ID0g
TmF0aXZlQXJyYXk7Ci0gICAgICAgIC8vIEVTNlRPRE86IEN1cnJlbnRseSB3ZSBtdXN0IHJlbHkg
b24gdGhlIGdsb2JhbCBmcm9tIGVtYmVyLW1ldGFsL2NvcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVw
cwotICAgICAgICAvLyBFbWJlci5BID0gQTsKLSAgICAgICAgRW1iZXIuU2V0ID0gU2V0OwotICAg
ICAgICBFbWJlci5EZWZlcnJlZCA9IERlZmVycmVkOwotICAgICAgICBFbWJlci5vbkxvYWQgPSBv
bkxvYWQ7Ci0gICAgICAgIEVtYmVyLnJ1bkxvYWRIb29rcyA9IHJ1bkxvYWRIb29rczsKLQotICAg
ICAgICBFbWJlci5BcnJheUNvbnRyb2xsZXIgPSBBcnJheUNvbnRyb2xsZXI7Ci0gICAgICAgIEVt
YmVyLk9iamVjdENvbnRyb2xsZXIgPSBPYmplY3RDb250cm9sbGVyOwotICAgICAgICBFbWJlci5D
b250cm9sbGVyID0gQ29udHJvbGxlcjsKLSAgICAgICAgRW1iZXIuQ29udHJvbGxlck1peGluID0g
Q29udHJvbGxlck1peGluOwotCi0gICAgICAgIEVtYmVyLlJTVlAgPSBSU1ZQOwotICAgICAgICAv
LyBFTkQgRVhQT1JUUwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlcjsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvY29tcGFyZSIsCi0gICAgWyJlbWJl
ci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5z
L2NvbXBhcmFibGUiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIC8vIGZvciBFbWJlci5PUkRFUl9ERUZJTklUSU9OCi0gICAgICAgIHZh
ciB0eXBlT2YgPSBfX2RlcGVuZGVuY3kyX18udHlwZU9mOwotICAgICAgICB2YXIgQ29tcGFyYWJs
ZSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8vIFVzZWQgYnkgRW1i
ZXIuY29tcGFyZQotICAgICAgICBFbWJlci5PUkRFUl9ERUZJTklUSU9OID0gRW1iZXIuRU5WLk9S
REVSX0RFRklOSVRJT04gfHwgWwotICAgICAgICAndW5kZWZpbmVkJywKLSAgICAgICAgJ251bGwn
LAotICAgICAgICAnYm9vbGVhbicsCi0gICAgICAgICdudW1iZXInLAotICAgICAgICAnc3RyaW5n
JywKLSAgICAgICAgJ2FycmF5JywKLSAgICAgICAgJ29iamVjdCcsCi0gICAgICAgICdpbnN0YW5j
ZScsCi0gICAgICAgICdmdW5jdGlvbicsCi0gICAgICAgICdjbGFzcycsCi0gICAgICAgICdkYXRl
JwotICAgICAgICBdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgIFRoaXMgd2lsbCBjb21w
YXJlIHR3byBqYXZhc2NyaXB0IHZhbHVlcyBvZiBwb3NzaWJseSBkaWZmZXJlbnQgdHlwZXMuCi0g
ICAgICAgICAgICAgSXQgd2lsbCB0ZWxsIHlvdSB3aGljaCBvbmUgaXMgZ3JlYXRlciB0aGFuIHRo
ZSBvdGhlciBieSByZXR1cm5pbmc6Ci0KLSAgICAgICAgICAgICAgLSAtMSBpZiB0aGUgZmlyc3Qg
aXMgc21hbGxlciB0aGFuIHRoZSBzZWNvbmQsCi0gICAgICAgICAgICAgIC0gMCBpZiBib3RoIGFy
ZSBlcXVhbCwKLSAgICAgICAgICAgICAgLSAxIGlmIHRoZSBmaXJzdCBpcyBncmVhdGVyIHRoYW4g
dGhlIHNlY29uZC4KLQotICAgICAgICAgICAgIFRoZSBvcmRlciBpcyBjYWxjdWxhdGVkIGJhc2Vk
IG9uIGBFbWJlci5PUkRFUl9ERUZJTklUSU9OYCwgaWYgdHlwZXMgYXJlIGRpZmZlcmVudC4KLSAg
ICAgICAgICAgICBJbiBjYXNlIHRoZXkgaGF2ZSB0aGUgc2FtZSB0eXBlIGFuIGFwcHJvcHJpYXRl
IGNvbXBhcmlzb24gZm9yIHRoaXMgdHlwZSBpcyBtYWRlLgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuY29tcGFyZSgnaGVsbG8nLCAnaGVsbG8nKTsg
IC8vIDAKLSAgICAgICAgICAgICAgRW1iZXIuY29tcGFyZSgnYWJjJywgJ2RmZycpOyAgICAgIC8v
IC0xCi0gICAgICAgICAgICAgIEVtYmVyLmNvbXBhcmUoMiwgMSk7ICAgICAgICAgICAgICAvLyAx
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgQG1ldGhvZCBjb21wYXJlCi0gICAg
ICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB2IEZpcnN0
IHZhbHVlIHRvIGNvbXBhcmUKLSAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdyBTZWNvbmQg
dmFsdWUgdG8gY29tcGFyZQotICAgICAgICAgICAgIEByZXR1cm4ge051bWJlcn0gLTEgaWYgdiA8
IHcsIDAgaWYgdiA9IHcgYW5kIDEgaWYgdiA+IHcuCi0gICAgICAgICAgICAqLwotICAgICAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gY29tcGFyZSh2LCB3KSB7Ci0gICAgICAg
ICAgICBpZiAodiA9PT0gdykgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB2YXIgdHlwZTEgPSB0eXBlT2Yodik7Ci0gICAgICAgICAgICB2
YXIgdHlwZTIgPSB0eXBlT2Yodyk7Ci0KLSAgICAgICAgICAgIGlmIChDb21wYXJhYmxlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHR5cGUxID09PSAnaW5zdGFuY2UnICYmIENvbXBhcmFibGUuZGV0
ZWN0KHYuY29uc3RydWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2LmNvbnN0
cnVjdG9yLmNvbXBhcmUodiwgdyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUyID09PSAnaW5zdGFuY2UnICYmIENvbXBhcmFibGUuZGV0ZWN0KHcuY29uc3Ry
dWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxIC0gdy5jb25zdHJ1Y3Rvci5j
b21wYXJlKHcsIHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgZ2VuZXJhdGVkIGEgcmV2ZXJzZS1tYXBwaW5nIG9m
IEVtYmVyLk9SREVSX0RFRklOSVRJT04sCi0gICAgICAgICAgICAvLyBkbyBzbyBub3cuCi0gICAg
ICAgICAgICB2YXIgbWFwcGluZyA9IEVtYmVyLk9SREVSX0RFRklOSVRJT05fTUFQUElORzsKLSAg
ICAgICAgICAgIGlmICghbWFwcGluZykgewotICAgICAgICAgICAgICAgIHZhciBvcmRlciA9IEVt
YmVyLk9SREVSX0RFRklOSVRJT047Ci0gICAgICAgICAgICAgICAgbWFwcGluZyA9IEVtYmVyLk9S
REVSX0RFRklOSVRJT05fTUFQUElORyA9IHt9OwotICAgICAgICAgICAgICAgIHZhciBpZHgsIGxl
bjsKLSAgICAgICAgICAgICAgICBmb3IgKGlkeCA9IDAsIGxlbiA9IG9yZGVyLmxlbmd0aDsgaWR4
IDwgbGVuOyArK2lkeCkgewotICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW29yZGVyW2lkeF1d
ID0gaWR4OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdlIG5vIGxv
bmdlciBuZWVkIEVtYmVyLk9SREVSX0RFRklOSVRJT04uCi0gICAgICAgICAgICAgICAgZGVsZXRl
IEVtYmVyLk9SREVSX0RFRklOSVRJT047Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZh
ciB0eXBlMUluZGV4ID0gbWFwcGluZ1t0eXBlMV07Ci0gICAgICAgICAgICB2YXIgdHlwZTJJbmRl
eCA9IG1hcHBpbmdbdHlwZTJdOwotCi0gICAgICAgICAgICBpZiAodHlwZTFJbmRleCA8IHR5cGUy
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAodHlwZTFJbmRleCA+IHR5cGUySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdHlwZXMgYXJlIGVxdWFs
IC0gc28gd2UgaGF2ZSB0byBjaGVjayB2YWx1ZXMgbm93Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5
cGUxKSB7Ci0gICAgICAgICAgICBjYXNlICdib29sZWFuJzoKLSAgICAgICAgICAgIGNhc2UgJ251
bWJlcic6Ci0gICAgICAgICAgICAgICAgaWYgKHYgPCB3KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHYgPiB3
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKLSAg
ICAgICAgICAgICAgICB2YXIgY29tcCA9IHYubG9jYWxlQ29tcGFyZSh3KTsKLSAgICAgICAgICAg
ICAgICBpZiAoY29tcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29tcCA+IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgICAgICBjYXNlICdhcnJheSc6Ci0gICAgICAgICAgICAgICAg
dmFyIHZMZW4gPSB2Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICB2YXIgd0xlbiA9IHcubGVuZ3Ro
OwotICAgICAgICAgICAgICAgIHZhciBsID0gTWF0aC5taW4odkxlbiwgd0xlbik7Ci0gICAgICAg
ICAgICAgICAgdmFyIHIgPSAwOwotICAgICAgICAgICAgICAgIHZhciBpID0gMDsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAociA9PT0gMCAmJiBpIDwgbCkgewotICAgICAgICAgICAgICAgICAgICBy
ID0gY29tcGFyZSh2W2ldLCB3W2ldKTsKLSAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAociAhPT0gMCkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBhbGwgZWxlbWVudHMgYXJlIGVxdWFsIG5vdwotICAgICAgICAgICAgICAgIC8vIHNob3J0ZXIg
YXJyYXkgc2hvdWxkIGJlIG9yZGVyZWQgZmlyc3QKLSAgICAgICAgICAgICAgICBpZiAodkxlbiA8
IHdMZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAodkxlbiA+IHdMZW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGFycmF5
cyBhcmUgZXF1YWwgbm93Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAg
IGNhc2UgJ2luc3RhbmNlJzoKLSAgICAgICAgICAgICAgICBpZiAoQ29tcGFyYWJsZSAmJiBDb21w
YXJhYmxlLmRldGVjdCh2KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5jb21wYXJl
KHYsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQot
ICAgICAgICAgICAgY2FzZSAnZGF0ZSc6Ci0gICAgICAgICAgICAgICAgdmFyIHZOdW0gPSB2Lmdl
dFRpbWUoKTsKLSAgICAgICAgICAgICAgICB2YXIgd051bSA9IHcuZ2V0VGltZSgpOwotICAgICAg
ICAgICAgICAgIGlmICh2TnVtIDwgd051bSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
LTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2TnVtID4gd051bSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvYXJyYXlfY29tcHV0ZWQiLAotICAgIFsiZW1i
ZXItbWV0YWwvY29yZSIsICJlbWJlci1ydW50aW1lL2NvbXB1dGVkL3JlZHVjZV9jb21wdXRlZCIs
ICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwg
ImVtYmVyLW1ldGFsL29ic2VydmVyIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRl
bmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJl
ciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcmVkdWNlQ29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3kyX18ucmVkdWNlQ29tcHV0ZWQ7Ci0gICAgICAgIHZhciBSZWR1Y2VD
b21wdXRlZFByb3BlcnR5ID0gX19kZXBlbmRlbmN5Ml9fLlJlZHVjZUNvbXB1dGVkUHJvcGVydHk7
Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5M19fLmZvckVhY2g7Ci0gICAgICAg
IHZhciBvX2NyZWF0ZSA9IF9fZGVwZW5kZW5jeTRfXy5jcmVhdGU7Ci0gICAgICAgIHZhciBhZGRP
YnNlcnZlciA9IF9fZGVwZW5kZW5jeTVfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFyIEVtYmVy
RXJyb3IgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgYV9zbGlj
ZSA9IFtdLnNsaWNlOwotCi0gICAgICAgIGZ1bmN0aW9uIEFycmF5Q29tcHV0ZWRQcm9wZXJ0eSgp
IHsKLSAgICAgICAgICAgIHZhciBjcCA9IHRoaXM7Ci0KLSAgICAgICAgICAgIFJlZHVjZUNvbXB1
dGVkUHJvcGVydHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgICAgICAgdGhpcy5m
dW5jID0gKGZ1bmN0aW9uKHJlZHVjZUZ1bmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gKHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNwLl9oYXNJ
bnN0YW5jZU1ldGEodGhpcywgcHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2hlbiB3ZSByZWNvbXB1dGUgYW4gYXJyYXkgY29tcHV0ZWQgcHJvcGVydHksIHdlIG5l
ZWQgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVkIGFycmF5cyB0
byBiZSB1cGRhdGVkOyB3ZSBjYW4ndCBzaW1wbHkgZW1wdHkgdGhlIGNhY2hlIGFuZAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaG9wZSB0aGUgYXJyYXkgaXMgcmUtcmV0cmlldmVkLgotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjcC5fZGVwZW5kZW50S2V5cywgZnVuY3Rpb24o
ZGVwZW5kZW50S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIo
dGhpcywgZGVwZW5kZW50S2V5LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3AucmVjb21wdXRlT25jZS5jYWxsKHRoaXMsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LCB0
aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWR1Y2VGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIH0pKHRoaXMuZnVuYyk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQXJyYXlDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZSA9IG9f
Y3JlYXRlKFJlZHVjZUNvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlKTsKLSAgICAgICAgQXJyYXlD
b21wdXRlZFByb3BlcnR5LnByb3RvdHlwZS5pbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gRW1iZXIuQSgpOwotICAgICAgICB9OwotICAgICAgICBBcnJheUNv
bXB1dGVkUHJvcGVydHkucHJvdG90eXBlLnJlc2V0VmFsdWUgPSBmdW5jdGlvbiAoYXJyYXkpIHsK
LSAgICAgICAgICAgIGFycmF5LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHN0b3BnYXAgdG8ga2VlcCB0aGUgcmVm
ZXJlbmNlIGNvdW50cyBjb3JyZWN0IHdpdGggbGF6eSBDUHMuCi0gICAgICAgIEFycmF5Q29tcHV0
ZWRQcm9wZXJ0eS5wcm90b3R5cGUuZGlkQ2hhbmdlID0gZnVuY3Rpb24gKG9iaiwga2V5TmFtZSkg
ewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBDcmVhdGVzIGEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggb3BlcmF0ZXMgb24gZGVw
ZW5kZW50IGFycmF5cyBhbmQKLSAgICAgICAgICAgICAgaXMgdXBkYXRlZCB3aXRoICJvbmUgYXQg
YSB0aW1lIiBzZW1hbnRpY3MuIFdoZW4gaXRlbXMgYXJlIGFkZGVkIG9yCi0gICAgICAgICAgICAg
IHJlbW92ZWQgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5KHMpIGFuIGFycmF5IGNvbXB1dGVkIG9u
bHkgb3BlcmF0ZXMKLSAgICAgICAgICAgICAgb24gdGhlIGNoYW5nZSBpbnN0ZWFkIG9mIHJlLWV2
YWx1YXRpbmcgdGhlIGVudGlyZSBhcnJheS4gVGhpcyBzaG91bGQKLSAgICAgICAgICAgICAgcmV0
dXJuIGFuIGFycmF5LCBpZiB5b3UnZCBsaWtlIHRvIHVzZSAib25lIGF0IGEgdGltZSIgc2VtYW50
aWNzIGFuZAotICAgICAgICAgICAgICBjb21wdXRlIHNvbWUgdmFsdWUgb3RoZXIgdGhlbiBhbiBh
cnJheSBsb29rIGF0Ci0gICAgICAgICAgICAgIGBFbWJlci5yZWR1Y2VDb21wdXRlZGAuCi0KLSAg
ICAgICAgICAgICAgSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnRzIHRoZSBmaXJz
dCBhcmd1bWVudHMgYXJlCi0gICAgICAgICAgICAgIGNvbnNpZGVyZWQgdG8gYmUgZGVwZW5kZW50
IHByb3BlcnR5IGtleXMuIFRoZSBsYXN0IGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgIHJlcXVp
cmVkIHRvIGJlIGFuIG9wdGlvbnMgb2JqZWN0LiBUaGUgb3B0aW9ucyBvYmplY3QgY2FuIGhhdmUg
dGhlCi0gICAgICAgICAgICAgIGZvbGxvd2luZyB0aHJlZSBwcm9wZXJ0aWVzLgotCi0gICAgICAg
ICAgICAgIGBpbml0aWFsaXplYCAtIEFuIG9wdGlvbmFsIGluaXRpYWxpemUgZnVuY3Rpb24uIFR5
cGljYWxseSB0aGlzIHdpbGwgYmUgdXNlZAotICAgICAgICAgICAgICB0byBzZXQgdXAgc3RhdGUg
b24gdGhlIGluc3RhbmNlTWV0YSBvYmplY3QuCi0KLSAgICAgICAgICAgICAgYHJlbW92ZWRJdGVt
YCAtIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZWFjaCB0aW1lIGFuIGVsZW1lbnQgaXMKLSAg
ICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheS4KLQotICAgICAgICAgICAgICBgYWRk
ZWRJdGVtYCAtIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZWFjaCB0aW1lIGFuIGVsZW1lbnQg
aXMKLSAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIGFycmF5LgotCi0KLSAgICAgICAgICAgICAg
VGhlIGBpbml0aWFsaXplYCBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6Ci0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBmdW5jdGlvbihhcnJh
eSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKQotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBgYXJyYXlgIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGFycmF5Q29tcHV0ZWQs
IGFuIGVtcHR5IGFycmF5LgotCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCAtIEFuIG9iamVj
dCB3aGljaCBjb250YWlucyBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgICAgICAgICAg
ICBjb21wdXRlZC4gSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotCi0gICAg
ICAgICAgICAgICAgIC0gYHByb3BlcnR5YCB0aGUgY29tcHV0ZWQgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgICAgLSBgcHJvcGVydHlOYW1lYCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgb24gdGhl
IG9iamVjdAotCi0gICAgICAgICAgICAgIGBpbnN0YW5jZU1ldGFgIC0gQW4gb2JqZWN0IHRoYXQg
Y2FuIGJlIHVzZWQgdG8gc3RvcmUgbWV0YQotICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBuZWVk
ZWQgZm9yIGNhbGN1bGF0aW5nIHlvdXIgY29tcHV0ZWQuIEZvciBleGFtcGxlIGEKLSAgICAgICAg
ICAgICAgdW5pcXVlIGNvbXB1dGVkIG1pZ2h0IHVzZSB0aGlzIHRvIHN0b3JlIHRoZSBudW1iZXIg
b2YgdGltZXMgYSBnaXZlbgotICAgICAgICAgICAgICBlbGVtZW50IGlzIGZvdW5kIGluIHRoZSBk
ZXBlbmRlbnQgYXJyYXkuCi0KLQotICAgICAgICAgICAgICBUaGUgYHJlbW92ZWRJdGVtYCBhbmQg
YGFkZGVkSXRlbWAgZnVuY3Rpb25zIGJvdGggaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGZ1bmN0aW9uKGFj
Y3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkKLSAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGFjY3VtdWxhdGVkVmFsdWVgIC0gVGhlIHZhbHVl
IHJldHVybmVkIGZyb20gdGhlIGxhc3QgdGltZQotICAgICAgICAgICAgICBgcmVtb3ZlZEl0ZW1g
IG9yIGBhZGRlZEl0ZW1gIHdhcyBjYWxsZWQgb3IgYW4gZW1wdHkgYXJyYXkuCi0KLSAgICAgICAg
ICAgICAgYGl0ZW1gIC0gdGhlIGVsZW1lbnQgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBhcnJh
eQotCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCAtIEFuIG9iamVjdCB3aGljaCBjb250YWlu
cyBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgICAgICAgICAgICBjaGFuZ2UuIEl0IGNv
bnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLQotICAgICAgICAgICAgICAgIC0gYHBy
b3BlcnR5YCB0aGUgY29tcHV0ZWQgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAtIGBwcm9wZXJ0
eU5hbWVgIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0Ci0gICAgICAgICAg
ICAgICAgLSBgaW5kZXhgIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgb3IgcmVtb3ZlZCBpdGVtCi0g
ICAgICAgICAgICAgICAgLSBgaXRlbWAgdGhlIGFkZGVkIG9yIHJlbW92ZWQgaXRlbTogdGhpcyBp
cyBleGFjdGx5IHRoZSBzYW1lIGFzCi0gICAgICAgICAgICAgICAgICB0aGUgc2Vjb25kIGFyZwot
ICAgICAgICAgICAgICAgIC0gYGFycmF5Q2hhbmdlZGAgdGhlIGFycmF5IHRoYXQgdHJpZ2dlcmVk
IHRoZSBjaGFuZ2UuIENhbiBiZQotICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gZGVwZW5k
aW5nIG9uIG11bHRpcGxlIGFycmF5cy4KLQotICAgICAgICAgICAgICBGb3IgcHJvcGVydHkgY2hh
bmdlcyB0cmlnZ2VyZWQgb24gYW4gaXRlbSBwcm9wZXJ0eSBjaGFuZ2UgKHdoZW4KLSAgICAgICAg
ICAgICAgZGVwS2V5IGlzIHNvbWV0aGluZyBsaWtlIGBzb21lQXJyYXkuQGVhY2guc29tZVByb3Bl
cnR5YCksCi0gICAgICAgICAgICAgIGBjaGFuZ2VNZXRhYCB3aWxsIGFsc28gY29udGFpbiB0aGUg
Zm9sbG93aW5nIHByb3BlcnR5OgotCi0gICAgICAgICAgICAgICAgLSBgcHJldmlvdXNWYWx1ZXNg
IGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgcHJvcGVydGllcyB0aGF0IGNoYW5nZWQgb24K
LSAgICAgICAgICAgICAgICB0aGUgaXRlbSwgYW5kIHdob3NlIHZhbHVlcyBhcmUgdGhlIGl0ZW0n
cyBwcmV2aW91cyB2YWx1ZXMuCi0KLSAgICAgICAgICAgICAgYHByZXZpb3VzVmFsdWVzYCBpcyBp
bXBvcnRhbnQgRW1iZXIgY29hbGVzY2VzIGl0ZW0gcHJvcGVydHkgY2hhbmdlcyB2aWEKLSAgICAg
ICAgICAgICAgRW1iZXIucnVuLm9uY2UuIFRoaXMgbWVhbnMgdGhhdCBieSB0aGUgdGltZSByZW1v
dmVkSXRlbSBnZXRzIGNhbGxlZCwgaXRlbSBoYXMKLSAgICAgICAgICAgICAgdGhlIG5ldyB2YWx1
ZXMsIGJ1dCB5b3UgbWF5IG5lZWQgdGhlIHByZXZpb3VzIHZhbHVlIChlZyBmb3Igc29ydGluZyAm
Ci0gICAgICAgICAgICAgIGZpbHRlcmluZykuCi0KLSAgICAgICAgICAgICAgYGluc3RhbmNlTWV0
YWAgLSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBtZXRhCi0gICAgICAgICAg
ICAgIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgeW91ciBjb21wdXRlZC4gRm9y
IGV4YW1wbGUgYQotICAgICAgICAgICAgICB1bmlxdWUgY29tcHV0ZWQgbWlnaHQgdXNlIHRoaXMg
dG8gc3RvcmUgdGhlIG51bWJlciBvZiB0aW1lcyBhIGdpdmVuCi0gICAgICAgICAgICAgIGVsZW1l
bnQgaXMgZm91bmQgaW4gdGhlIGRlcGVuZGVudCBhcnJheS4KLQotICAgICAgICAgICAgICBUaGUg
YHJlbW92ZWRJdGVtYCBhbmQgYGFkZGVkSXRlbWAgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gdGhl
IGFjY3VtdWxhdGVkCi0gICAgICAgICAgICAgIHZhbHVlLiBJdCBpcyBhY2NlcHRhYmxlIHRvIG5v
dCByZXR1cm4gYW55dGhpbmcgKGllIHJldHVybiB1bmRlZmluZWQpCi0gICAgICAgICAgICAgIHRv
IGludmFsaWRhdGUgdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIGdlbmVyYWxseSBub3QgYSBnb29k
IGlkZWEgZm9yCi0gICAgICAgICAgICAgIGFycmF5Q29tcHV0ZWQgYnV0IGl0J3MgdXNlZCBpbiBl
ZyBtYXggYW5kIG1pbi4KLQotICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5jb21wdXRlZC5tYXAgPSBmdW5jdGlv
bihkZXBlbmRlbnRLZXksIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMg
PSB7Ci0gICAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBj
aGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBl
ZCA9IGNhbGxiYWNrKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcnJheS5pbnNlcnRBdChj
aGFuZ2VNZXRhLmluZGV4LCBtYXBwZWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJy
YXk7Ci0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW06
IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXJyYXkucmVtb3ZlQXQoY2hhbmdlTWV0YS5pbmRleCwgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLmFycmF5Q29tcHV0
ZWQoZGVwZW5kZW50S2V5LCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBhcnJheUNvbXB1dGVkCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFtkZXBlbmRlbnRL
ZXlzKl0KLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgICAgICAg
ICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0KLSAgICAgICAgICAgICovCi0gICAg
ICAgIGZ1bmN0aW9uIGFycmF5Q29tcHV0ZWQgKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBh
cmdzOwotCi0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAg
ICAgICAgICBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpOwotICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAtMSlbMF07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gIm9iamVjdCIpIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiQXJyYXkgQ29tcHV0ZWQgUHJv
cGVydHkgZGVjbGFyZWQgd2l0aG91dCBhbiBvcHRpb25zIGhhc2giKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIGNwID0gbmV3IEFycmF5Q29tcHV0ZWRQcm9wZXJ0eShvcHRpb25z
KTsKLQotICAgICAgICAgICAgaWYgKGFyZ3MpIHsKLSAgICAgICAgICAgICAgICBjcC5wcm9wZXJ0
eS5hcHBseShjcCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBj
cDsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmFycmF5Q29tcHV0ZWQgPSBhcnJh
eUNvbXB1dGVkOwotICAgICAgICBfX2V4cG9ydHNfXy5BcnJheUNvbXB1dGVkUHJvcGVydHkgPSBB
cnJheUNvbXB1dGVkUHJvcGVydHk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1l
L2NvbXB1dGVkL3JlZHVjZV9jb21wdXRlZCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFs
L29ic2VydmVyIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL3BsYXRmb3Jt
IiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0v
dHJhY2tlZF9hcnJheSIsICJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsICJlbWJlci1tZXRh
bC9ydW5fbG9vcCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zZXQiLCAiZXhwb3J0cyJdLAotICAg
IGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kz
X18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9f
ZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5k
ZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5kZW5j
eTEzX18sIF9fZGVwZW5kZW5jeTE0X18sIF9fZGVwZW5kZW5jeTE1X18sIF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgZV9n
ZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5
M19fLnNldDsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18uZ3VpZEZvcjsK
LSAgICAgICAgdmFyIG1ldGFGb3IgPSBfX2RlcGVuZGVuY3k0X18ubWV0YTsKLSAgICAgICAgdmFy
IEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHBy
b3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5kZW5jeTZfXy5wcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0g
ICAgICAgIHZhciBwcm9wZXJ0eURpZENoYW5nZSA9IF9fZGVwZW5kZW5jeTZfXy5wcm9wZXJ0eURp
ZENoYW5nZTsKLSAgICAgICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSBfX2RlcGVuZGVuY3k3X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5OF9fLmFk
ZE9ic2VydmVyOwotICAgICAgICB2YXIgb2JzZXJ2ZXJzRm9yID0gX19kZXBlbmRlbmN5OF9fLm9i
c2VydmVyc0ZvcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRlbmN5OF9f
LnJlbW92ZU9ic2VydmVyOwotICAgICAgICB2YXIgYWRkQmVmb3JlT2JzZXJ2ZXIgPSBfX2RlcGVu
ZGVuY3k4X18uYWRkQmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciByZW1vdmVCZWZvcmVPYnNl
cnZlciA9IF9fZGVwZW5kZW5jeThfXy5yZW1vdmVCZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFy
IENvbXB1dGVkUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k5X18uQ29tcHV0ZWRQcm9wZXJ0eTsKLSAg
ICAgICAgdmFyIGNhY2hlRm9yID0gX19kZXBlbmRlbmN5OV9fLmNhY2hlRm9yOwotICAgICAgICB2
YXIgb19jcmVhdGUgPSBfX2RlcGVuZGVuY3kxMF9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIGZvckVh
Y2ggPSBfX2RlcGVuZGVuY3kxMV9fLmZvckVhY2g7Ci0gICAgICAgIHZhciBUcmFja2VkQXJyYXkg
PSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlckFycmF5ID0g
X19kZXBlbmRlbmN5MTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcnVuID0gX19kZXBlbmRl
bmN5MTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgU2V0ID0gX19kZXBlbmRlbmN5MTVfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5jeTRfXy5pc0FycmF5
OwotCi0gICAgICAgIHZhciBjYWNoZVNldCA9IGNhY2hlRm9yLnNldDsKLSAgICAgICAgdmFyIGNh
Y2hlR2V0ID0gY2FjaGVGb3IuZ2V0OwotICAgICAgICB2YXIgY2FjaGVSZW1vdmUgPSBjYWNoZUZv
ci5yZW1vdmU7Ci0gICAgICAgIHZhciBhX3NsaWNlID0gW10uc2xpY2U7Ci0gICAgICAgIC8vIEhl
cmUgd2UgZXhwbGljaXRseSBkb24ndCBhbGxvdyBgQGVhY2guZm9vYDsgaXQgd291bGQgcmVxdWly
ZSBzb21lIHNwZWNpYWwKLSAgICAgICAgLy8gdGVzdGluZywgYnV0IHRoZXJlJ3Mgbm8gcGFydGlj
dWxhciByZWFzb24gd2h5IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkLgotICAgICAgICB2YXIgZWFj
aFByb3BlcnR5UGF0dGVybiA9IC9eKC4qKVwuQGVhY2hcLiguKikvOwotICAgICAgICB2YXIgZG91
YmxlRWFjaFByb3BlcnR5UGF0dGVybiA9IC8oLipcLkBlYWNoKXsyLH0vOwotICAgICAgICB2YXIg
YXJyYXlCcmFja2V0UGF0dGVybiA9IC9cLlxbXF0kLzsKLQotICAgICAgICBmdW5jdGlvbiBnZXQo
b2JqLCBrZXkpIHsKLSAgICAgICAgICAgIGlmIChrZXkgPT09ICdAdGhpcycpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb2JqOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4g
ZV9nZXQob2JqLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICAgICAg
VHJhY2tzIGNoYW5nZXMgdG8gZGVwZW5kZW50IGFycmF5cywgYXMgd2VsbCBhcyB0byBwcm9wZXJ0
aWVzIG9mIGl0ZW1zIGluCi0gICAgICAgICAgICAgIGRlcGVuZGVudCBhcnJheXMuCi0KLSAgICAg
ICAgICAgICAgQGNsYXNzIERlcGVuZGVudEFycmF5c09ic2VydmVyCi0gICAgICAgICAgICAqLwot
ICAgICAgICBmdW5jdGlvbiBEZXBlbmRlbnRBcnJheXNPYnNlcnZlcihjYWxsYmFja3MsIGNwLCBp
bnN0YW5jZU1ldGEsIGNvbnRleHQsIHByb3BlcnR5TmFtZSwgc3VnYXJNZXRhKSB7Ci0gICAgICAg
ICAgICAvLyB1c2VyIHNwZWNpZmllZCBjYWxsYmFja3MgZm9yIGBhZGRlZEl0ZW1gIGFuZCBgcmVt
b3ZlZEl0ZW1gCi0gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IGNhbGxiYWNrczsKLQotICAg
ICAgICAgICAgLy8gdGhlIGNvbXB1dGVkIHByb3BlcnR5OiByZW1lbWJlciB0aGVzZSBhcmUgc2hh
cmVkIGFjcm9zcyBpbnN0YW5jZXMKLSAgICAgICAgICAgIHRoaXMuY3AgPSBjcDsKLQotICAgICAg
ICAgICAgLy8gdGhlIFJlZHVjZUNvbXB1dGVkUHJvcGVydHlJbnN0YW5jZU1ldGEgdGhpcyBEZXBl
bmRlbnRBcnJheXNPYnNlcnZlciBpcwotICAgICAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoCi0g
ICAgICAgICAgICB0aGlzLmluc3RhbmNlTWV0YSA9IGluc3RhbmNlTWV0YTsKLQotICAgICAgICAg
ICAgLy8gQSBtYXAgb2YgYXJyYXkgZ3VpZHMgdG8gZGVwZW5kZW50S2V5cywgZm9yIHRoZSBnaXZl
biBjb250ZXh0LiAgV2UgdHJhY2sKLSAgICAgICAgICAgIC8vIHRoaXMgYmVjYXVzZSB3ZSB3YW50
IHRvIHNldCB1cCB0aGUgY29tcHV0ZWQgcHJvcGVydHkgcG90ZW50aWFsbHkgYmVmb3JlIHRoZQot
ICAgICAgICAgICAgLy8gZGVwZW5kZW50IGFycmF5IGV2ZW4gZXhpc3RzLCBidXQgd2hlbiB0aGUg
YXJyYXkgb2JzZXJ2ZXIgZmlyZXMsIHdlIGxhY2sKLSAgICAgICAgICAgIC8vIGVub3VnaCBjb250
ZXh0IHRvIGtub3cgd2hhdCB0byB1cGRhdGU6IHdlIGNhbiByZWNvdmVyIHRoYXQgY29udGV4dCBi
eQotICAgICAgICAgICAgLy8gZ2V0dGluZyB0aGUgZGVwZW5kZW50S2V5LgotICAgICAgICAgICAg
dGhpcy5kZXBlbmRlbnRLZXlzQnlHdWlkID0ge307Ci0KLSAgICAgICAgICAgIC8vIGEgbWFwIG9m
IGRlcGVuZGVudCBhcnJheSBndWlkcyAtPiBUcmFja2VkQXJyYXkgaW5zdGFuY2VzLiAgV2UgdXNl
Ci0gICAgICAgICAgICAvLyB0aGlzIHRvIGxhemlseSByZWNvbXB1dGUgaW5kZXhlcyBmb3IgaXRl
bSBwcm9wZXJ0eSBvYnNlcnZlcnMuCi0gICAgICAgICAgICB0aGlzLnRyYWNrZWRBcnJheXNCeUd1
aWQgPSB7fTsKLQotICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZCBvYnNlcnZlcnMgdG8gaWdub3Jl
IHJlcGxhY2VtZW50cyBmcm9tIGByZXNldGAgd2hlbiB0b3RhbGx5Ci0gICAgICAgICAgICAvLyBy
ZWNvbXB1dGluZy4gIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IHByb3Blcmx5IHN1c3BlbmQgdGhl
IG9ic2VydmVycwotICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBvbmx5IGhhdmUgdGhlIGtleTsg
aW5zdGVhZCB3ZSBtYWtlIHRoZSBvYnNlcnZlcnMgbm8tb3BzCi0gICAgICAgICAgICB0aGlzLnN1
c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29hbGVz
Y2UgaXRlbSBjaGFuZ2VzIGZyb20gcHJvcGVydHkgb2JzZXJ2ZXJzIHdpdGhpbiBhCi0gICAgICAg
ICAgICAvLyBzaW5nbGUgaXRlbS4KLSAgICAgICAgICAgIHRoaXMuY2hhbmdlZEl0ZW1zID0ge307
Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gY29hbGVzY2UgaXRlbSBjaGFuZ2VzIGZv
ciBtdWx0aXBsZSBpdGVtcyB0aGF0IGRlcGVuZCBvbgotICAgICAgICAgICAgLy8gc29tZSBzaGFy
ZWQgc3RhdGUuCi0gICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVtQ291bnQgPSAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gSXRlbVByb3BlcnR5T2JzZXJ2ZXJDb250ZXh0IChkZXBl
bmRlbnRBcnJheSwgaW5kZXgsIHRyYWNrZWRBcnJheSkgewotICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCJJbnRlcm5hbCBlcnJvcjogdHJhY2tlZEFycmF5IGlzIG51bGwgb3IgdW5kZWZpbmVkIiwg
dHJhY2tlZEFycmF5KTsKLQotICAgICAgICAgICAgdGhpcy5kZXBlbmRlbnRBcnJheSA9IGRlcGVu
ZGVudEFycmF5OwotICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgICAgICAg
dGhpcy5pdGVtID0gZGVwZW5kZW50QXJyYXkub2JqZWN0QXQoaW5kZXgpOwotICAgICAgICAgICAg
dGhpcy50cmFja2VkQXJyYXkgPSB0cmFja2VkQXJyYXk7Ci0gICAgICAgICAgICB0aGlzLmJlZm9y
ZU9ic2VydmVyID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsOwotCi0g
ICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
RGVwZW5kZW50QXJyYXlzT2JzZXJ2ZXIucHJvdG90eXBlID0gewotICAgICAgICAgICAgc2V0VmFs
dWU6IGZ1bmN0aW9uIChuZXdWYWx1ZSkgewotICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VN
ZXRhLnNldFZhbHVlKG5ld1ZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlu
c3RhbmNlTWV0YS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2V0
dXBPYnNlcnZlcnM6IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheSwgZGVwZW5kZW50S2V5KSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbnRLZXlzQnlHdWlkW2d1aWRGb3IoZGVwZW5kZW50
QXJyYXkpXSA9IGRlcGVuZGVudEtleTsKLQotICAgICAgICAgICAgICAgIGRlcGVuZGVudEFycmF5
LmFkZEFycmF5T2JzZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdl
OiAnZGVwZW5kZW50QXJyYXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAgICAgICAgZGlkQ2hh
bmdlOiAnZGVwZW5kZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5jcC5faXRlbVByb3BlcnR5S2V5c1tkZXBlbmRlbnRLZXld
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBQcm9wZXJ0eU9ic2VydmVycyhkZXBl
bmRlbnRLZXksIHRoaXMuY3AuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50S2V5XSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdGVhcmRvd25PYnNl
cnZlcnM6IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheSwgZGVwZW5kZW50S2V5KSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGl0ZW1Qcm9wZXJ0eUtleXMgPSB0aGlzLmNwLl9pdGVtUHJvcGVydHlLZXlz
W2RlcGVuZGVudEtleV0gfHwgW107Ci0KLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kZXBl
bmRlbnRLZXlzQnlHdWlkW2d1aWRGb3IoZGVwZW5kZW50QXJyYXkpXTsKLQotICAgICAgICAgICAg
ICAgIHRoaXMudGVhcmRvd25Qcm9wZXJ0eU9ic2VydmVycyhkZXBlbmRlbnRLZXksIGl0ZW1Qcm9w
ZXJ0eUtleXMpOwotCi0gICAgICAgICAgICAgICAgZGVwZW5kZW50QXJyYXkucmVtb3ZlQXJyYXlP
YnNlcnZlcih0aGlzLCB7Ci0gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICdkZXBlbmRl
bnRBcnJheVdpbGxDaGFuZ2UnLAotICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2U6ICdkZXBl
bmRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHN1c3BlbmRBcnJheU9ic2VydmVyczogZnVuY3Rpb24gKGNhbGxiYWNr
LCBiaW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9sZFN1c3BlbmRlZCA9IHRoaXMuc3Vz
cGVuZGVkOwotICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFjay5jYWxsKGJpbmRpbmcpOwotICAgICAgICAgICAgICAgIHRoaXMuc3Vz
cGVuZGVkID0gb2xkU3VzcGVuZGVkOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2V0
dXBQcm9wZXJ0eU9ic2VydmVyczogZnVuY3Rpb24gKGRlcGVuZGVudEtleSwgaXRlbVByb3BlcnR5
S2V5cykgewotICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRBcnJheSA9IGdldCh0aGlzLmlu
c3RhbmNlTWV0YS5jb250ZXh0LCBkZXBlbmRlbnRLZXkpLAotICAgICAgICAgICAgICAgIGxlbmd0
aCA9IGdldChkZXBlbmRlbnRBcnJheSwgJ2xlbmd0aCcpLAotICAgICAgICAgICAgICAgIG9ic2Vy
dmVyQ29udGV4dHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHRoaXMu
cmVzZXRUcmFuc2Zvcm1hdGlvbnMoZGVwZW5kZW50S2V5LCBvYnNlcnZlckNvbnRleHRzKTsKLQot
ICAgICAgICAgICAgICAgIGZvckVhY2goZGVwZW5kZW50QXJyYXksIGZ1bmN0aW9uIChpdGVtLCBp
bmRleCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJDb250ZXh0ID0gdGhpcy5j
cmVhdGVQcm9wZXJ0eU9ic2VydmVyQ29udGV4dChkZXBlbmRlbnRBcnJheSwgaW5kZXgsIHRoaXMu
dHJhY2tlZEFycmF5c0J5R3VpZFtkZXBlbmRlbnRLZXldKTsKLSAgICAgICAgICAgICAgICAgICAg
b2JzZXJ2ZXJDb250ZXh0c1tpbmRleF0gPSBvYnNlcnZlckNvbnRleHQ7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yRWFjaChpdGVtUHJvcGVydHlLZXlzLCBmdW5jdGlvbiAocHJvcGVydHlLZXkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEJlZm9yZU9ic2VydmVyKGl0ZW0sIHByb3Bl
cnR5S2V5LCB0aGlzLCBvYnNlcnZlckNvbnRleHQuYmVmb3JlT2JzZXJ2ZXIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoaXRlbSwgcHJvcGVydHlLZXksIHRoaXMsIG9ic2Vy
dmVyQ29udGV4dC5vYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAg
ICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdGVh
cmRvd25Qcm9wZXJ0eU9ic2VydmVyczogZnVuY3Rpb24gKGRlcGVuZGVudEtleSwgaXRlbVByb3Bl
cnR5S2V5cykgewotICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRBcnJheU9ic2VydmVyID0g
dGhpcywKLSAgICAgICAgICAgICAgICB0cmFja2VkQXJyYXkgPSB0aGlzLnRyYWNrZWRBcnJheXNC
eUd1aWRbZGVwZW5kZW50S2V5XSwKLSAgICAgICAgICAgICAgICBiZWZvcmVPYnNlcnZlciwKLSAg
ICAgICAgICAgICAgICBvYnNlcnZlciwKLSAgICAgICAgICAgICAgICBpdGVtOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCF0cmFja2VkQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRyYWNrZWRBcnJheS5hcHBs
eShmdW5jdGlvbiAob2JzZXJ2ZXJDb250ZXh0cywgb2Zmc2V0LCBvcGVyYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gVHJhY2tlZEFycmF5LkRFTEVURSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChvYnNlcnZlckNvbnRleHRzLCBmdW5jdGlvbiAo
b2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRl
eHQuZGVzdHJveWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZU9ic2Vy
dmVyID0gb2JzZXJ2ZXJDb250ZXh0LmJlZm9yZU9ic2VydmVyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb2JzZXJ2ZXIgPSBvYnNlcnZlckNvbnRleHQub2JzZXJ2ZXI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtID0gb2JzZXJ2ZXJDb250ZXh0Lml0ZW07Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvckVhY2goaXRlbVByb3BlcnR5S2V5cywgZnVuY3Rpb24gKHByb3BlcnR5S2V5
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIoaXRl
bSwgcHJvcGVydHlLZXksIGRlcGVuZGVudEFycmF5T2JzZXJ2ZXIsIGJlZm9yZU9ic2VydmVyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcihpdGVtLCBwcm9wZXJ0
eUtleSwgZGVwZW5kZW50QXJyYXlPYnNlcnZlciwgb2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY3JlYXRlUHJvcGVydHlPYnNlcnZlckNv
bnRleHQ6IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheSwgaW5kZXgsIHRyYWNrZWRBcnJheSkgewot
ICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlckNvbnRleHQgPSBuZXcgSXRlbVByb3BlcnR5T2Jz
ZXJ2ZXJDb250ZXh0KGRlcGVuZGVudEFycmF5LCBpbmRleCwgdHJhY2tlZEFycmF5KTsKLQotICAg
ICAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydHlPYnNlcnZlcihvYnNlcnZlckNvbnRleHQp
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQ29udGV4dDsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXI6IGZ1bmN0aW9uIChvYnNl
cnZlckNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVwZW5kZW50QXJyYXlPYnNlcnZl
ciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRleHQuYmVmb3JlT2JzZXJ2
ZXIgPSBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBkZXBlbmRlbnRBcnJheU9ic2VydmVyLml0ZW1Qcm9wZXJ0eVdpbGxDaGFuZ2Uob2JqLCBrZXlO
YW1lLCBvYnNlcnZlckNvbnRleHQuZGVwZW5kZW50QXJyYXksIG9ic2VydmVyQ29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBvYnNlcnZlckNvbnRleHQub2JzZXJ2
ZXIgPSBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBkZXBlbmRlbnRBcnJheU9ic2VydmVyLml0ZW1Qcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5h
bWUsIG9ic2VydmVyQ29udGV4dC5kZXBlbmRlbnRBcnJheSwgb2JzZXJ2ZXJDb250ZXh0KTsKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVzZXRUcmFu
c2Zvcm1hdGlvbnM6IGZ1bmN0aW9uIChkZXBlbmRlbnRLZXksIG9ic2VydmVyQ29udGV4dHMpIHsK
LSAgICAgICAgICAgICAgICB0aGlzLnRyYWNrZWRBcnJheXNCeUd1aWRbZGVwZW5kZW50S2V5XSA9
IG5ldyBUcmFja2VkQXJyYXkob2JzZXJ2ZXJDb250ZXh0cyk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICB0cmFja0FkZDogZnVuY3Rpb24gKGRlcGVuZGVudEtleSwgaW5kZXgsIG5ld0l0
ZW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyYWNrZWRBcnJheSA9IHRoaXMudHJhY2tlZEFy
cmF5c0J5R3VpZFtkZXBlbmRlbnRLZXldOwotICAgICAgICAgICAgICAgIGlmICh0cmFja2VkQXJy
YXkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhY2tlZEFycmF5LmFkZEl0ZW1zKGluZGV4LCBu
ZXdJdGVtcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgdHJhY2tSZW1vdmU6IGZ1bmN0aW9uIChkZXBlbmRlbnRLZXksIGluZGV4LCByZW1vdmVkQ291
bnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdHJhY2tlZEFycmF5ID0gdGhpcy50cmFja2VkQXJy
YXlzQnlHdWlkW2RlcGVuZGVudEtleV07Ci0KLSAgICAgICAgICAgICAgICBpZiAodHJhY2tlZEFy
cmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFja2VkQXJyYXkucmVtb3ZlSXRl
bXMoaW5kZXgsIHJlbW92ZWRDb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFtdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdXBkYXRlSW5k
ZXhlczogZnVuY3Rpb24gKHRyYWNrZWRBcnJheSwgYXJyYXkpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbGVuZ3RoID0gZ2V0KGFycmF5LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgLy8gT1BU
SU1JWkU6IHdlIGNvdWxkIHN0b3AgdXBkYXRpbmcgb25jZSB3ZSBoaXQgdGhlIG9iamVjdCB3aG9z
ZSBvYnNlcnZlcgotICAgICAgICAgICAgICAgIC8vIGZpcmVkOyBpZSBwYXJ0aWFsbHkgYXBwbHkg
dGhlIHRyYW5zZm9ybWF0aW9ucwotICAgICAgICAgICAgICAgIHRyYWNrZWRBcnJheS5hcHBseShm
dW5jdGlvbiAob2JzZXJ2ZXJDb250ZXh0cywgb2Zmc2V0LCBvcGVyYXRpb24sIG9wZXJhdGlvbklu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGV2ZW4gaGF2ZSBvYnNlcnZl
ciBjb250ZXh0cyBmb3IgcmVtb3ZlZCBpdGVtcywgZXZlbiBpZiB3ZSBkaWQsCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHRoZXkgbm8gbG9uZ2VyIGhhdmUgYW55IGluZGV4IGluIHRoZSBhcnJheQot
ICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uID09PSBUcmFja2VkQXJyYXkuREVMRVRF
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbkluZGV4ID09PSAwICYmIG9wZXJh
dGlvbiA9PT0gVHJhY2tlZEFycmF5LlJFVEFJTiAmJiBvYnNlcnZlckNvbnRleHRzLmxlbmd0aCA9
PT0gbGVuZ3RoICYmIG9mZnNldCA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UgdXBkYXRlIG1hbnkgaXRlbXMgd2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBhcnJheSBl
YWNoIHRpbWU6IHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG5lZWQgdG8gdXBk
YXRlIHRoZSBpbmRleGVzIGF0IG1vc3Qgb25jZSBwZXIgcnVuIGxvb3AuCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBmb3JFYWNoKG9ic2VydmVyQ29udGV4dHMsIGZ1bmN0aW9uIChjb250ZXh0LCBpbmRl
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5pbmRleCA9IGluZGV4ICsgb2Zm
c2V0OwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRlcGVuZGVudEFycmF5V2lsbENoYW5nZTogZnVuY3Rp
b24gKGRlcGVuZGVudEFycmF5LCBpbmRleCwgcmVtb3ZlZENvdW50LCBhZGRlZENvdW50KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VzcGVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVtb3Zl
ZEl0ZW0gPSB0aGlzLmNhbGxiYWNrcy5yZW1vdmVkSXRlbTsKLSAgICAgICAgICAgICAgICB2YXIg
Y2hhbmdlTWV0YTsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3IoZGVwZW5kZW50
QXJyYXkpOwotICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRLZXkgPSB0aGlzLmRlcGVuZGVu
dEtleXNCeUd1aWRbZ3VpZF07Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW1Qcm9wZXJ0eUtleXMg
PSB0aGlzLmNwLl9pdGVtUHJvcGVydHlLZXlzW2RlcGVuZGVudEtleV0gfHwgW107Ci0gICAgICAg
ICAgICAgICAgdmFyIGxlbmd0aCA9IGdldChkZXBlbmRlbnRBcnJheSwgJ2xlbmd0aCcpOwotICAg
ICAgICAgICAgICAgIHZhciBub3JtYWxpemVkSW5kZXggPSBub3JtYWxpemVJbmRleChpbmRleCwg
bGVuZ3RoLCAwKTsKLSAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFJlbW92ZUNvdW50ID0g
bm9ybWFsaXplUmVtb3ZlQ291bnQobm9ybWFsaXplZEluZGV4LCBsZW5ndGgsIHJlbW92ZWRDb3Vu
dCk7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW0sIGl0ZW1JbmRleCwgc2xpY2VJbmRleCwgb2Jz
ZXJ2ZXJDb250ZXh0czsKLQotICAgICAgICAgICAgICAgIG9ic2VydmVyQ29udGV4dHMgPSB0aGlz
LnRyYWNrUmVtb3ZlKGRlcGVuZGVudEtleSwgbm9ybWFsaXplZEluZGV4LCBub3JtYWxpemVkUmVt
b3ZlQ291bnQpOwotCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXJzKHBy
b3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyQ29udGV4dHNbc2xpY2VJ
bmRleF0uZGVzdHJveWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQmVmb3Jl
T2JzZXJ2ZXIoaXRlbSwgcHJvcGVydHlLZXksIHRoaXMsIG9ic2VydmVyQ29udGV4dHNbc2xpY2VJ
bmRleF0uYmVmb3JlT2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAgICAgICByZW1vdmVPYnNlcnZl
cihpdGVtLCBwcm9wZXJ0eUtleSwgdGhpcywgb2JzZXJ2ZXJDb250ZXh0c1tzbGljZUluZGV4XS5v
YnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChzbGlj
ZUluZGV4ID0gbm9ybWFsaXplZFJlbW92ZUNvdW50IC0gMTsgc2xpY2VJbmRleCA+PSAwOyAtLXNs
aWNlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4ID0gbm9ybWFsaXplZElu
ZGV4ICsgc2xpY2VJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSBs
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGRlcGVuZGVudEFycmF5Lm9iamVj
dEF0KGl0ZW1JbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChpdGVtUHJvcGVy
dHlLZXlzLCByZW1vdmVPYnNlcnZlcnMsIHRoaXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGNo
YW5nZU1ldGEgPSBuZXcgQ2hhbmdlTWV0YShkZXBlbmRlbnRBcnJheSwgaXRlbSwgaXRlbUluZGV4
LCB0aGlzLmluc3RhbmNlTWV0YS5wcm9wZXJ0eU5hbWUsIHRoaXMuY3AsIG5vcm1hbGl6ZWRSZW1v
dmVDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUoIHJlbW92ZWRJdGVt
LmNhbGwoCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VNZXRhLmNvbnRleHQsIHRo
aXMuZ2V0VmFsdWUoKSwgaXRlbSwgY2hhbmdlTWV0YSwgdGhpcy5pbnN0YW5jZU1ldGEuc3VnYXJN
ZXRhKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ZGVwZW5kZW50QXJyYXlEaWRDaGFuZ2U6IGZ1bmN0aW9uIChkZXBlbmRlbnRBcnJheSwgaW5kZXgs
IHJlbW92ZWRDb3VudCwgYWRkZWRDb3VudCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1
c3BlbmRlZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdmFyIGFkZGVkSXRlbSA9IHRoaXMuY2FsbGJhY2tzLmFkZGVk
SXRlbTsKLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3IoZGVwZW5kZW50QXJyYXkp
OwotICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRLZXkgPSB0aGlzLmRlcGVuZGVudEtleXNC
eUd1aWRbZ3VpZF07Ci0gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyQ29udGV4dHMgPSBuZXcg
QXJyYXkoYWRkZWRDb3VudCk7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW1Qcm9wZXJ0eUtleXMg
PSB0aGlzLmNwLl9pdGVtUHJvcGVydHlLZXlzW2RlcGVuZGVudEtleV07Ci0gICAgICAgICAgICAg
ICAgdmFyIGxlbmd0aCA9IGdldChkZXBlbmRlbnRBcnJheSwgJ2xlbmd0aCcpOwotICAgICAgICAg
ICAgICAgIHZhciBub3JtYWxpemVkSW5kZXggPSBub3JtYWxpemVJbmRleChpbmRleCwgbGVuZ3Ro
LCBhZGRlZENvdW50KTsKLSAgICAgICAgICAgICAgICB2YXIgY2hhbmdlTWV0YSwgb2JzZXJ2ZXJD
b250ZXh0OwotCi0gICAgICAgICAgICAgICAgZm9yRWFjaChkZXBlbmRlbnRBcnJheS5zbGljZShu
b3JtYWxpemVkSW5kZXgsIG5vcm1hbGl6ZWRJbmRleCArIGFkZGVkQ291bnQpLCBmdW5jdGlvbiAo
aXRlbSwgc2xpY2VJbmRleCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVByb3BlcnR5
S2V5cykgewotICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJDb250ZXh0ID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVyQ29udGV4dHNbc2xpY2VJbmRleF0gPQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQcm9wZXJ0eU9ic2VydmVyQ29udGV4dChkZXBl
bmRlbnRBcnJheSwgbm9ybWFsaXplZEluZGV4ICsgc2xpY2VJbmRleCwgdGhpcy50cmFja2VkQXJy
YXlzQnlHdWlkW2RlcGVuZGVudEtleV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFj
aChpdGVtUHJvcGVydHlLZXlzLCBmdW5jdGlvbiAocHJvcGVydHlLZXkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRCZWZvcmVPYnNlcnZlcihpdGVtLCBwcm9wZXJ0eUtleSwgdGhp
cywgb2JzZXJ2ZXJDb250ZXh0LmJlZm9yZU9ic2VydmVyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRPYnNlcnZlcihpdGVtLCBwcm9wZXJ0eUtleSwgdGhpcywgb2JzZXJ2ZXJDb250
ZXh0Lm9ic2VydmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlTWV0YSA9IG5ldyBD
aGFuZ2VNZXRhKGRlcGVuZGVudEFycmF5LCBpdGVtLCBub3JtYWxpemVkSW5kZXggKyBzbGljZUlu
ZGV4LCB0aGlzLmluc3RhbmNlTWV0YS5wcm9wZXJ0eU5hbWUsIHRoaXMuY3AsIGFkZGVkQ291bnQp
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKCBhZGRlZEl0ZW0uY2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZU1ldGEuY29udGV4dCwgdGhpcy5nZXRWYWx1
ZSgpLCBpdGVtLCBjaGFuZ2VNZXRhLCB0aGlzLmluc3RhbmNlTWV0YS5zdWdhck1ldGEpKTsKLSAg
ICAgICAgICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAgICAgICAgIHRoaXMudHJhY2tBZGQo
ZGVwZW5kZW50S2V5LCBub3JtYWxpemVkSW5kZXgsIG9ic2VydmVyQ29udGV4dHMpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgaXRlbVByb3BlcnR5V2lsbENoYW5nZTogZnVuY3Rpb24g
KG9iaiwga2V5TmFtZSwgYXJyYXksIG9ic2VydmVyQ29udGV4dCkgewotICAgICAgICAgICAgICAg
IHZhciBndWlkID0gZ3VpZEZvcihvYmopOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNo
YW5nZWRJdGVtc1tndWlkXSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJdGVt
c1tndWlkXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5OiBhcnJheSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9ic2VydmVyQ29udGV4dDogb2JzZXJ2ZXJDb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqOiBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c1ZhbHVlczoge30KLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgKyt0aGlzLmNoYW5nZWRJdGVtQ291bnQ7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLmNoYW5nZWRJdGVtc1tndWlkXS5wcmV2aW91c1ZhbHVlc1trZXlOYW1lXSA9
IGdldChvYmosIGtleU5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaXRlbVBy
b3BlcnR5RGlkQ2hhbmdlOiBmdW5jdGlvbihvYmosIGtleU5hbWUsIGFycmF5LCBvYnNlcnZlckNv
bnRleHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoLS10aGlzLmNoYW5nZWRJdGVtQ291bnQgPT09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mbHVzaENoYW5nZXMoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBmbHVzaENoYW5nZXM6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VkSXRlbXMgPSB0aGlzLmNoYW5n
ZWRJdGVtcywga2V5LCBjLCBjaGFuZ2VNZXRhOwotCi0gICAgICAgICAgICAgICAgZm9yIChrZXkg
aW4gY2hhbmdlZEl0ZW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBjaGFuZ2VkSXRlbXNb
a2V5XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMub2JzZXJ2ZXJDb250ZXh0LmRlc3Ryb3ll
ZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUluZGV4ZXMoYy5vYnNlcnZl
ckNvbnRleHQudHJhY2tlZEFycmF5LCBjLm9ic2VydmVyQ29udGV4dC5kZXBlbmRlbnRBcnJheSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlTWV0YSA9IG5ldyBDaGFuZ2VNZXRhKGMuYXJy
YXksIGMub2JqLCBjLm9ic2VydmVyQ29udGV4dC5pbmRleCwgdGhpcy5pbnN0YW5jZU1ldGEucHJv
cGVydHlOYW1lLCB0aGlzLmNwLCBjaGFuZ2VkSXRlbXMubGVuZ3RoLCBjLnByZXZpb3VzVmFsdWVz
KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSgKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jYWxsYmFja3MucmVtb3ZlZEl0ZW0uY2FsbCh0aGlzLmluc3RhbmNlTWV0YS5jb250
ZXh0LCB0aGlzLmdldFZhbHVlKCksIGMub2JqLCBjaGFuZ2VNZXRhLCB0aGlzLmluc3RhbmNlTWV0
YS5zdWdhck1ldGEpKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSgKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuYWRkZWRJdGVtLmNhbGwodGhpcy5pbnN0YW5j
ZU1ldGEuY29udGV4dCwgdGhpcy5nZXRWYWx1ZSgpLCBjLm9iaiwgY2hhbmdlTWV0YSwgdGhpcy5p
bnN0YW5jZU1ldGEuc3VnYXJNZXRhKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHRoaXMuY2hhbmdlZEl0ZW1zID0ge307Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplSW5kZXgoaW5kZXgsIGxlbmd0aCwgbmV3SXRlbXNP
ZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0aC5tYXgoMCwgbGVuZ3RoICsgaW5kZXgpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAg
ICAgICAgIH0gZWxzZSAvKiBpbmRleCA+IGxlbmd0aCAqLwotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBNYXRoLm1pbihsZW5ndGggLSBuZXdJdGVtc09mZnNldCwgaW5kZXgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXpl
UmVtb3ZlQ291bnQoaW5kZXgsIGxlbmd0aCwgcmVtb3ZlZENvdW50KSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gTWF0aC5taW4ocmVtb3ZlZENvdW50LCBsZW5ndGggLSBpbmRleCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBDaGFuZ2VNZXRhKGRlcGVuZGVudEFycmF5LCBpdGVtLCBpbmRl
eCwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eSwgY2hhbmdlZENvdW50LCBwcmV2aW91c1ZhbHVlcykg
ewotICAgICAgICAgICAgdGhpcy5hcnJheUNoYW5nZWQgPSBkZXBlbmRlbnRBcnJheTsKLSAgICAg
ICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07
Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAg
ICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgIHRoaXMuY2hhbmdlZENv
dW50ID0gY2hhbmdlZENvdW50OwotCi0gICAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZXMpIHsK
LSAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyB2YWx1ZXMgb25seSBhdmFpbGFibGUgZm9yIGl0
ZW0gcHJvcGVydHkgY2hhbmdlcwotICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZXMg
PSBwcmV2aW91c1ZhbHVlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGFkZEl0ZW1zIChkZXBlbmRlbnRBcnJheSwgY2FsbGJhY2tzLCBjcCwgcHJvcGVydHlO
YW1lLCBtZXRhKSB7Ci0gICAgICAgICAgICBmb3JFYWNoKGRlcGVuZGVudEFycmF5LCBmdW5jdGlv
biAoaXRlbSwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBtZXRhLnNldFZhbHVlKCBjYWxsYmFj
a3MuYWRkZWRJdGVtLmNhbGwoCi0gICAgICAgICAgICAgICAgdGhpcywgbWV0YS5nZXRWYWx1ZSgp
LCBpdGVtLCBuZXcgQ2hhbmdlTWV0YShkZXBlbmRlbnRBcnJheSwgaXRlbSwgaW5kZXgsIHByb3Bl
cnR5TmFtZSwgY3AsIGRlcGVuZGVudEFycmF5Lmxlbmd0aCksIG1ldGEuc3VnYXJNZXRhKSk7Ci0g
ICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJlc2V0
KGNwLCBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgIHZhciBjYWxsYmFja3MgPSBjcC5fY2Fs
bGJhY2tzKCksCi0gICAgICAgICAgICBtZXRhOwotCi0gICAgICAgICAgICBpZiAoY3AuX2hhc0lu
c3RhbmNlTWV0YSh0aGlzLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgbWV0YSA9
IGNwLl9pbnN0YW5jZU1ldGEodGhpcywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBt
ZXRhLnNldFZhbHVlKGNwLnJlc2V0VmFsdWUobWV0YS5nZXRWYWx1ZSgpKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1ldGEgPSBjcC5faW5zdGFuY2VNZXRhKHRoaXMs
IHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjcC5vcHRp
b25zLmluaXRpYWxpemUpIHsKLSAgICAgICAgICAgICAgICBjcC5vcHRpb25zLmluaXRpYWxpemUu
Y2FsbCh0aGlzLCBtZXRhLmdldFZhbHVlKCksIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHk6IGNwLAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSAK
LSAgICAgICAgICAgICAgICB9LCBtZXRhLnN1Z2FyTWV0YSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJ0aWFsbHlSZWNvbXB1dGVGb3Iob2JqLCBkZXBl
bmRlbnRLZXkpIHsKLSAgICAgICAgICAgIGlmIChhcnJheUJyYWNrZXRQYXR0ZXJuLnRlc3QoZGVw
ZW5kZW50S2V5KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0KG9iaiwgZGVwZW5kZW50S2V5KTsKLSAg
ICAgICAgICAgIHJldHVybiBFbWJlckFycmF5LmRldGVjdCh2YWx1ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBSZWR1Y2VDb21wdXRlZFByb3BlcnR5SW5zdGFuY2VNZXRhKGNvbnRl
eHQsIHByb3BlcnR5TmFtZSwgaW5pdGlhbFZhbHVlKSB7Ci0gICAgICAgICAgICB0aGlzLmNvbnRl
eHQgPSBjb250ZXh0OwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5h
bWU7Ci0gICAgICAgICAgICB0aGlzLmNhY2hlID0gbWV0YUZvcihjb250ZXh0KS5jYWNoZTsKLQot
ICAgICAgICAgICAgdGhpcy5kZXBlbmRlbnRBcnJheXMgPSB7fTsKLSAgICAgICAgICAgIHRoaXMu
c3VnYXJNZXRhID0ge307Ci0KLSAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gaW5pdGlh
bFZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eUluc3Rh
bmNlTWV0YS5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNhY2hlR2V0KHRoaXMuY2FjaGUsIHRoaXMu
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldFZhbHVlOiBm
dW5jdGlvbihuZXdWYWx1ZSwgdHJpZ2dlck9ic2VydmVycykgewotICAgICAgICAgICAgICAgIC8v
IFRoaXMgbGV0cyBzdWdhcnMgZm9yY2UgYSByZWNvbXB1dGF0aW9uLCBoYW5keSBmb3IgdmVyeSBz
aW1wbGUKLSAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgZWcgbWF4LgotICAg
ICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gY2FjaGVHZXQodGhpcy5jYWNoZSwgdGhpcy5w
cm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHJpZ2dlck9ic2VydmVycykgewotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcy5jb250ZXh0LCB0aGlzLnByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5ld1Zh
bHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVSZW1vdmUodGhp
cy5jYWNoZSwgdGhpcy5wcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhY2hlU2V0KHRoaXMuY2FjaGUsIHRoaXMucHJvcGVydHlOYW1l
LCBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRy
aWdnZXJPYnNlcnZlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2Uo
dGhpcy5jb250ZXh0LCB0aGlzLnByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNv
bXB1dGVkIHByb3BlcnR5IHdob3NlIGRlcGVuZGVudCBrZXlzIGFyZSBhcnJheXMgYW5kIHdoaWNo
IGlzIHVwZGF0ZWQgd2l0aAotICAgICAgICAgICAgICAib25lIGF0IGEgdGltZSIgc2VtYW50aWNz
LgotCi0gICAgICAgICAgICAgIEBjbGFzcyBSZWR1Y2VDb21wdXRlZFByb3BlcnR5Ci0gICAgICAg
ICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQ29t
cHV0ZWRQcm9wZXJ0eQotICAgICAgICAgICAgICBAY29uc3RydWN0b3IKLSAgICAgICAgICAgICov
Ci0KLSAgICAgICAgX19leHBvcnRzX18uUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eSA9IFJlZHVjZUNv
bXB1dGVkUHJvcGVydHk7Ci0gICAgICAgIC8vIFRPRE86IGRlZmF1bHQgZXhwb3J0Ci0gICAgICAg
IGZ1bmN0aW9uIFJlZHVjZUNvbXB1dGVkUHJvcGVydHkob3B0aW9ucykgewotICAgICAgICAgICAg
dmFyIGNwID0gdGhpczsKLQotICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLQot
ICAgICAgICAgICAgdGhpcy5fZGVwZW5kZW50S2V5cyA9IG51bGw7Ci0gICAgICAgICAgICAvLyBB
IG1hcCBvZiBkZXBlbmRlbnRLZXkgLT4gW2l0ZW1Qcm9wZXJ0eSwgLi4uXSB0aGF0IHRyYWNrcyB3
aGF0IHByb3BlcnRpZXMgb2YKLSAgICAgICAgICAgIC8vIGl0ZW1zIGluIHRoZSBhcnJheSB3ZSBt
dXN0IHRyYWNrIHRvIHVwZGF0ZSB0aGlzIHByb3BlcnR5LgotICAgICAgICAgICAgdGhpcy5faXRl
bVByb3BlcnR5S2V5cyA9IHt9OwotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNJdGVtUHJvcGVy
dHlLZXlzID0ge307Ci0KLSAgICAgICAgICAgIHRoaXMucmVhZE9ubHkoKTsKLSAgICAgICAgICAg
IHRoaXMuY2FjaGVhYmxlKCk7Ci0KLSAgICAgICAgICAgIHRoaXMucmVjb21wdXRlT25jZSA9IGZ1
bmN0aW9uKHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIC8vIFdoYXQgd2UgcmVhbGx5
IHdhbnQgdG8gZG8gaXMgY29hbGVzY2UgYnkgPGNwLCBwcm9wZXJ0eU5hbWU+LgotICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgYSBmb3JtIG9mIGBzY2hlZHVsZU9uY2VgIHRoYXQgYWNjZXB0cyBh
biBhcmJpdHJhcnkgdG9rZW4gdG8KLSAgICAgICAgICAgICAgICAvLyBjb2FsZXNjZSBieSwgaW4g
YWRkaXRpb24gdG8gdGhlIHRhcmdldCBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgIHJ1bi5v
bmNlKHRoaXMsIHJlY29tcHV0ZSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB2YXIgcmVjb21wdXRlID0gZnVuY3Rpb24ocHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGRlcGVuZGVudEtleXMgPSBjcC5fZGVwZW5kZW50S2V5cywKLSAgICAgICAg
ICAgICAgICBtZXRhID0gY3AuX2luc3RhbmNlTWV0YSh0aGlzLCBwcm9wZXJ0eU5hbWUpLAotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrcyA9IGNwLl9jYWxsYmFja3MoKTsKLQotICAgICAgICAgICAg
ICAgIHJlc2V0LmNhbGwodGhpcywgY3AsIHByb3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgICAgICAg
ICBtZXRhLmRlcGVuZGVudEFycmF5c09ic2VydmVyLnN1c3BlbmRBcnJheU9ic2VydmVycyhmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvckVhY2goY3AuX2RlcGVuZGVudEtleXMs
IGZ1bmN0aW9uIChkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVy
LmFzc2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZXBlbmRlbnQgYXJyYXkgIiArIGRl
cGVuZGVudEtleSArICIgbXVzdCBiZSBhbiBgRW1iZXIuQXJyYXlgLiAgIiArCi0gICAgICAgICAg
ICAgICAgICAgICAgICAiSWYgeW91IGFyZSBub3QgZXh0ZW5kaW5nIGFycmF5cywgeW91IHdpbGwg
bmVlZCB0byB3cmFwIG5hdGl2ZSBhcnJheXMgd2l0aCBgRW1iZXIuQWAiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIShpc0FycmF5KGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpKSAmJiAhRW1iZXJB
cnJheS5kZXRlY3QoZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkpKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcGFydGlhbGx5UmVjb21wdXRlRm9yKHRoaXMsIGRlcGVuZGVudEtleSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbnRBcnJheSA9
IGdldCh0aGlzLCBkZXBlbmRlbnRLZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNEZXBlbmRlbnRBcnJheSA9IG1ldGEuZGVwZW5kZW50QXJyYXlzW2RlcGVuZGVudEtleV07Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbnRBcnJheSA9PT0gcHJldmlvdXNE
ZXBlbmRlbnRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhcnJh
eSBtYXkgYmUgdGhlIHNhbWUsIGJ1dCBvdXIgaXRlbSBwcm9wZXJ0eSBrZXlzIG1heSBoYXZlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlZCwgc28gd2Ugc2V0IHRoZW0gdXAg
YWdhaW4uICBXZSBjYW4ndCBlYXNpbHkgdGVsbCBpZiB0aGV5J3ZlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbmdlZDogdGhlIGFycmF5IG1heSBiZSB0aGUgc2FtZSBvYmplY3Qs
IGJ1dCB3aXRoIGRpZmZlcmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRl
bnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcC5fcHJldmlvdXNJdGVtUHJv
cGVydHlLZXlzW2RlcGVuZGVudEtleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGNwLl9wcmV2aW91c0l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50S2V5XTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS5kZXBlbmRlbnRBcnJheXNPYnNlcnZl
ci5zZXR1cFByb3BlcnR5T2JzZXJ2ZXJzKGRlcGVuZGVudEtleSwgY3AuX2l0ZW1Qcm9wZXJ0eUtl
eXNbZGVwZW5kZW50S2V5XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRhLmRlcGVuZGVudEFycmF5c1tkZXBlbmRlbnRLZXldID0gZGVwZW5kZW50QXJyYXk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNEZXBlbmRlbnRBcnJheSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLmRlcGVuZGVudEFycmF5c09ic2Vy
dmVyLnRlYXJkb3duT2JzZXJ2ZXJzKHByZXZpb3VzRGVwZW5kZW50QXJyYXksIGRlcGVuZGVudEtl
eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRlcGVuZGVudEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ldGEuZGVwZW5kZW50QXJyYXlzT2JzZXJ2ZXIuc2V0dXBPYnNlcnZlcnMoZGVwZW5k
ZW50QXJyYXksIGRlcGVuZGVudEtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsK
LSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLQotICAgICAgICAgICAgICAgIGZvckVhY2goY3Au
X2RlcGVuZGVudEtleXMsIGZ1bmN0aW9uKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBhcnRpYWxseVJlY29tcHV0ZUZvcih0aGlzLCBkZXBlbmRlbnRLZXkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICB2YXIgZGVwZW5kZW50QXJyYXkgPSBnZXQodGhpcywgZGVwZW5k
ZW50S2V5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVudEFycmF5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhZGRJdGVtcy5jYWxsKHRoaXMsIGRlcGVuZGVudEFycmF5LCBj
YWxsYmFja3MsIGNwLCBwcm9wZXJ0eU5hbWUsIG1ldGEpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICB9OwotCi0KLSAgICAgICAg
ICAgIHRoaXMuZnVuYyA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAg
ICBFbWJlci5hc3NlcnQoIkNvbXB1dGVkIHJlZHVjZSB2YWx1ZXMgcmVxdWlyZSBhdCBsZWFzdCBv
bmUgZGVwZW5kZW50IGtleSIsIGNwLl9kZXBlbmRlbnRLZXlzKTsKLQotICAgICAgICAgICAgICAg
IHJlY29tcHV0ZS5jYWxsKHRoaXMsIHByb3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3AuX2luc3RhbmNlTWV0YSh0aGlzLCBwcm9wZXJ0eU5hbWUpLmdldFZhbHVlKCk7Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0
eS5wcm90b3R5cGUgPSBvX2NyZWF0ZShDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZSk7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKGNvbXB1dGVkVmFsdWUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBjb21wdXRlZFZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVkdWNlQ29t
cHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUuX2NhbGxiYWNrcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIGlmICghdGhpcy5jYWxsYmFja3MpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3B0aW9u
cyA9IHRoaXMub3B0aW9uczsKLSAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW06IG9wdGlvbnMucmVtb3ZlZEl0ZW0gfHwgZGVm
YXVsdENhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IG9wdGlvbnMuYWRk
ZWRJdGVtIHx8IGRlZmF1bHRDYWxsYmFjawotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFja3M7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUuX2hhc0luc3RhbmNlTWV0YSA9
IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAh
IW1ldGFGb3IoY29udGV4dCkuY2FjaGVNZXRhW3Byb3BlcnR5TmFtZV07Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUuX2luc3RhbmNlTWV0YSA9
IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgIHZhciBjYWNo
ZU1ldGEgPSBtZXRhRm9yKGNvbnRleHQpLmNhY2hlTWV0YSwKLSAgICAgICAgICAgIG1ldGEgPSBj
YWNoZU1ldGFbcHJvcGVydHlOYW1lXTsKLQotICAgICAgICAgICAgaWYgKCFtZXRhKSB7Ci0gICAg
ICAgICAgICAgICAgbWV0YSA9IGNhY2hlTWV0YVtwcm9wZXJ0eU5hbWVdID0gbmV3IFJlZHVjZUNv
bXB1dGVkUHJvcGVydHlJbnN0YW5jZU1ldGEoY29udGV4dCwgcHJvcGVydHlOYW1lLCB0aGlzLmlu
aXRpYWxWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBtZXRhLmRlcGVuZGVudEFycmF5c09ic2Vy
dmVyID0gbmV3IERlcGVuZGVudEFycmF5c09ic2VydmVyKHRoaXMuX2NhbGxiYWNrcygpLCB0aGlz
LCBtZXRhLCBjb250ZXh0LCBwcm9wZXJ0eU5hbWUsIG1ldGEuc3VnYXJNZXRhKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG1ldGE7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUuaW5pdGlhbFZhbHVlID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaW5pdGlhbFZhbHVlID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pbml0
aWFsVmFsdWUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMub3B0aW9ucy5pbml0aWFsVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUucmVzZXRWYWx1ZSA9IGZ1
bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlKCk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGUu
aXRlbVByb3BlcnR5S2V5ID0gZnVuY3Rpb24gKGRlcGVuZGVudEFycmF5S2V5LCBpdGVtUHJvcGVy
dHlLZXkpIHsKLSAgICAgICAgICAgIHRoaXMuX2l0ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50QXJy
YXlLZXldID0gdGhpcy5faXRlbVByb3BlcnR5S2V5c1tkZXBlbmRlbnRBcnJheUtleV0gfHwgW107
Ci0gICAgICAgICAgICB0aGlzLl9pdGVtUHJvcGVydHlLZXlzW2RlcGVuZGVudEFycmF5S2V5XS5w
dXNoKGl0ZW1Qcm9wZXJ0eUtleSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUmVkdWNlQ29tcHV0
ZWRQcm9wZXJ0eS5wcm90b3R5cGUuY2xlYXJJdGVtUHJvcGVydHlLZXlzID0gZnVuY3Rpb24gKGRl
cGVuZGVudEFycmF5S2V5KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5faXRlbVByb3BlcnR5S2V5
c1tkZXBlbmRlbnRBcnJheUtleV0pIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9wcmV2aW91c0l0
ZW1Qcm9wZXJ0eUtleXNbZGVwZW5kZW50QXJyYXlLZXldID0gdGhpcy5faXRlbVByb3BlcnR5S2V5
c1tkZXBlbmRlbnRBcnJheUtleV07Ci0gICAgICAgICAgICAgICAgdGhpcy5faXRlbVByb3BlcnR5
S2V5c1tkZXBlbmRlbnRBcnJheUtleV0gPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LQotICAgICAgICBSZWR1Y2VDb21wdXRlZFByb3BlcnR5LnByb3RvdHlwZS5wcm9wZXJ0eSA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjcCA9IHRoaXMsCi0gICAgICAgICAgICBhcmdz
ID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyksCi0gICAgICAgICAgICBwcm9wZXJ0eUFyZ3MgPSBu
ZXcgU2V0KCksCi0gICAgICAgICAgICBtYXRjaCwKLSAgICAgICAgICAgIGRlcGVuZGVudEFycmF5
S2V5LAotICAgICAgICAgICAgaXRlbVByb3BlcnR5S2V5OwotCi0gICAgICAgICAgICBmb3JFYWNo
KGFyZ3MsIGZ1bmN0aW9uIChkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZG91
YmxlRWFjaFByb3BlcnR5UGF0dGVybi50ZXN0KGRlcGVuZGVudEtleSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIk5lc3RlZCBAZWFjaCBwcm9wZXJ0aWVzIG5v
dCBzdXBwb3J0ZWQ6ICIgKyBkZXBlbmRlbnRLZXkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobWF0Y2ggPSBlYWNoUHJvcGVydHlQYXR0ZXJuLmV4ZWMoZGVwZW5kZW50S2V5KSkgewotICAg
ICAgICAgICAgICAgICAgICBkZXBlbmRlbnRBcnJheUtleSA9IG1hdGNoWzFdOwotCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBpdGVtUHJvcGVydHlLZXlQYXR0ZXJuID0gbWF0Y2hbMl0sCi0gICAg
ICAgICAgICAgICAgICAgIGFkZEl0ZW1Qcm9wZXJ0eUtleSA9IGZ1bmN0aW9uIChpdGVtUHJvcGVy
dHlLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwLml0ZW1Qcm9wZXJ0eUtleShkZXBl
bmRlbnRBcnJheUtleSwgaXRlbVByb3BlcnR5S2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzKGl0ZW1Qcm9wZXJ0eUtleVBh
dHRlcm4sIGFkZEl0ZW1Qcm9wZXJ0eUtleSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
QXJncy5hZGQoZGVwZW5kZW50QXJyYXlLZXkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QXJncy5hZGQoZGVwZW5kZW50S2V5KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmV0dXJuIENvbXB1
dGVkUHJvcGVydHkucHJvdG90eXBlLnByb3BlcnR5LmFwcGx5KHRoaXMsIHByb3BlcnR5QXJncy50
b0FycmF5KCkpOwotCi0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIENy
ZWF0ZXMgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBvcGVyYXRlcyBvbiBkZXBlbmRlbnQgYXJy
YXlzIGFuZAotICAgICAgICAgICAgICBpcyB1cGRhdGVkIHdpdGggIm9uZSBhdCBhIHRpbWUiIHNl
bWFudGljcy4gV2hlbiBpdGVtcyBhcmUgYWRkZWQgb3IKLSAgICAgICAgICAgICAgcmVtb3ZlZCBm
cm9tIHRoZSBkZXBlbmRlbnQgYXJyYXkocykgYSByZWR1Y2UgY29tcHV0ZWQgb25seSBvcGVyYXRl
cwotICAgICAgICAgICAgICBvbiB0aGUgY2hhbmdlIGluc3RlYWQgb2YgcmUtZXZhbHVhdGluZyB0
aGUgZW50aXJlIGFycmF5LgotCi0gICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4g
b25lIGFyZ3VtZW50cyB0aGUgZmlyc3QgYXJndW1lbnRzIGFyZQotICAgICAgICAgICAgICBjb25z
aWRlcmVkIHRvIGJlIGRlcGVuZGVudCBwcm9wZXJ0eSBrZXlzLiBUaGUgbGFzdCBhcmd1bWVudCBp
cwotICAgICAgICAgICAgICByZXF1aXJlZCB0byBiZSBhbiBvcHRpb25zIG9iamVjdC4gVGhlIG9w
dGlvbnMgb2JqZWN0IGNhbiBoYXZlIHRoZQotICAgICAgICAgICAgICBmb2xsb3dpbmcgZm91ciBw
cm9wZXJ0aWVzOgotCi0gICAgICAgICAgICAgIGBpbml0aWFsVmFsdWVgIC0gQSB2YWx1ZSBvciBm
dW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5pdGlhbAotICAgICAgICAgICAgICB2
YWx1ZSBmb3IgdGhlIGNvbXB1dGVkLiBJZiB0aGlzIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gdGhl
IHJlc3VsdCBvZiBjYWxsaW5nCi0gICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHVz
ZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUuIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQuCi0KLSAg
ICAgICAgICAgICAgYGluaXRpYWxpemVgIC0gQW4gb3B0aW9uYWwgaW5pdGlhbGl6ZSBmdW5jdGlv
bi4gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB1c2VkCi0gICAgICAgICAgICAgIHRvIHNldCB1cCBz
dGF0ZSBvbiB0aGUgaW5zdGFuY2VNZXRhIG9iamVjdC4KLQotICAgICAgICAgICAgICBgcmVtb3Zl
ZEl0ZW1gIC0gQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBlYWNoIHRpbWUgYW4gZWxlbWVudCBp
cyByZW1vdmVkCi0gICAgICAgICAgICAgIGZyb20gdGhlIGFycmF5LgotCi0gICAgICAgICAgICAg
IGBhZGRlZEl0ZW1gIC0gQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBlYWNoIHRpbWUgYW4gZWxl
bWVudCBpcyBhZGRlZCB0bwotICAgICAgICAgICAgICB0aGUgYXJyYXkuCi0KLQotICAgICAgICAg
ICAgICBUaGUgYGluaXRpYWxpemVgIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVy
ZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGZ1bmN0aW9u
KGluaXRpYWxWYWx1ZSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKQotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBgaW5pdGlhbFZhbHVlYCAtIFRoZSB2YWx1ZSBvZiB0aGUgYGlu
aXRpYWxWYWx1ZWAgcHJvcGVydHkgZnJvbSB0aGUKLSAgICAgICAgICAgICAgb3B0aW9ucyBvYmpl
Y3QuCi0KLSAgICAgICAgICAgICAgYGNoYW5nZU1ldGFgIC0gQW4gb2JqZWN0IHdoaWNoIGNvbnRh
aW5zIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICAgICAgICAgICAgIGNvbXB1dGVkLiBJ
dCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0KLSAgICAgICAgICAgICAgICAg
LSBgcHJvcGVydHlgIHRoZSBjb21wdXRlZCBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAtIGBw
cm9wZXJ0eU5hbWVgIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0Ci0KLSAg
ICAgICAgICAgICAgYGluc3RhbmNlTWV0YWAgLSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0
byBzdG9yZSBtZXRhCi0gICAgICAgICAgICAgIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgY2FsY3Vs
YXRpbmcgeW91ciBjb21wdXRlZC4gRm9yIGV4YW1wbGUgYQotICAgICAgICAgICAgICB1bmlxdWUg
Y29tcHV0ZWQgbWlnaHQgdXNlIHRoaXMgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB0aW1lcyBhIGdp
dmVuCi0gICAgICAgICAgICAgIGVsZW1lbnQgaXMgZm91bmQgaW4gdGhlIGRlcGVuZGVudCBhcnJh
eS4KLQotCi0gICAgICAgICAgICAgIFRoZSBgcmVtb3ZlZEl0ZW1gIGFuZCBgYWRkZWRJdGVtYCBm
dW5jdGlvbnMgYm90aCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24oYWNjdW11bGF0ZWRWYWx1
ZSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBgYWNjdW11bGF0ZWRWYWx1ZWAgLSBUaGUgdmFsdWUgcmV0dXJuZWQgZnJv
bSB0aGUgbGFzdCB0aW1lCi0gICAgICAgICAgICAgIGByZW1vdmVkSXRlbWAgb3IgYGFkZGVkSXRl
bWAgd2FzIGNhbGxlZCBvciBgaW5pdGlhbFZhbHVlYC4KLQotICAgICAgICAgICAgICBgaXRlbWAg
LSB0aGUgZWxlbWVudCBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIGFycmF5Ci0KLSAgICAgICAg
ICAgICAgYGNoYW5nZU1ldGFgIC0gQW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIG1ldGEgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlCi0gICAgICAgICAgICAgIGNoYW5nZS4gSXQgY29udGFpbnMgdGhlIGZv
bGxvd2luZyBwcm9wZXJ0aWVzOgotCi0gICAgICAgICAgICAgICAgLSBgcHJvcGVydHlgIHRoZSBj
b21wdXRlZCBwcm9wZXJ0eQotICAgICAgICAgICAgICAgIC0gYHByb3BlcnR5TmFtZWAgdGhlIG5h
bWUgb2YgdGhlIHByb3BlcnR5IG9uIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAtIGBpbmRl
eGAgdGhlIGluZGV4IG9mIHRoZSBhZGRlZCBvciByZW1vdmVkIGl0ZW0KLSAgICAgICAgICAgICAg
ICAtIGBpdGVtYCB0aGUgYWRkZWQgb3IgcmVtb3ZlZCBpdGVtOiB0aGlzIGlzIGV4YWN0bHkgdGhl
IHNhbWUgYXMKLSAgICAgICAgICAgICAgICAgIHRoZSBzZWNvbmQgYXJnCi0gICAgICAgICAgICAg
ICAgLSBgYXJyYXlDaGFuZ2VkYCB0aGUgYXJyYXkgdGhhdCB0cmlnZ2VyZWQgdGhlIGNoYW5nZS4g
Q2FuIGJlCi0gICAgICAgICAgICAgICAgICB1c2VmdWwgd2hlbiBkZXBlbmRpbmcgb24gbXVsdGlw
bGUgYXJyYXlzLgotCi0gICAgICAgICAgICAgIEZvciBwcm9wZXJ0eSBjaGFuZ2VzIHRyaWdnZXJl
ZCBvbiBhbiBpdGVtIHByb3BlcnR5IGNoYW5nZSAod2hlbgotICAgICAgICAgICAgICBkZXBLZXkg
aXMgc29tZXRoaW5nIGxpa2UgYHNvbWVBcnJheS5AZWFjaC5zb21lUHJvcGVydHlgKSwKLSAgICAg
ICAgICAgICAgYGNoYW5nZU1ldGFgIHdpbGwgYWxzbyBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJv
cGVydHk6Ci0KLSAgICAgICAgICAgICAgICAtIGBwcmV2aW91c1ZhbHVlc2AgYW4gb2JqZWN0IHdo
b3NlIGtleXMgYXJlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2hhbmdlZCBvbgotICAgICAgICAgICAg
ICAgIHRoZSBpdGVtLCBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgaXRlbSdzIHByZXZpb3VzIHZh
bHVlcy4KLQotICAgICAgICAgICAgICBgcHJldmlvdXNWYWx1ZXNgIGlzIGltcG9ydGFudCBFbWJl
ciBjb2FsZXNjZXMgaXRlbSBwcm9wZXJ0eSBjaGFuZ2VzIHZpYQotICAgICAgICAgICAgICBFbWJl
ci5ydW4ub25jZS4gVGhpcyBtZWFucyB0aGF0IGJ5IHRoZSB0aW1lIHJlbW92ZWRJdGVtIGdldHMg
Y2FsbGVkLCBpdGVtIGhhcwotICAgICAgICAgICAgICB0aGUgbmV3IHZhbHVlcywgYnV0IHlvdSBt
YXkgbmVlZCB0aGUgcHJldmlvdXMgdmFsdWUgKGVnIGZvciBzb3J0aW5nICYKLSAgICAgICAgICAg
ICAgZmlsdGVyaW5nKS4KLQotICAgICAgICAgICAgICBgaW5zdGFuY2VNZXRhYCAtIEFuIG9iamVj
dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIG1ldGEKLSAgICAgICAgICAgICAgaW5mb3JtYXRp
b24gbmVlZGVkIGZvciBjYWxjdWxhdGluZyB5b3VyIGNvbXB1dGVkLiBGb3IgZXhhbXBsZSBhCi0g
ICAgICAgICAgICAgIHVuaXF1ZSBjb21wdXRlZCBtaWdodCB1c2UgdGhpcyB0byBzdG9yZSB0aGUg
bnVtYmVyIG9mIHRpbWVzIGEgZ2l2ZW4KLSAgICAgICAgICAgICAgZWxlbWVudCBpcyBmb3VuZCBp
biB0aGUgZGVwZW5kZW50IGFycmF5LgotCi0gICAgICAgICAgICAgIFRoZSBgcmVtb3ZlZEl0ZW1g
IGFuZCBgYWRkZWRJdGVtYCBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiB0aGUgYWNjdW11bGF0ZWQK
LSAgICAgICAgICAgICAgdmFsdWUuIEl0IGlzIGFjY2VwdGFibGUgdG8gbm90IHJldHVybiBhbnl0
aGluZyAoaWUgcmV0dXJuIHVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgdG8gaW52YWxpZGF0ZSB0
aGUgY29tcHV0YXRpb24uIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSBmb3IKLSAg
ICAgICAgICAgICAgYXJyYXlDb21wdXRlZCBidXQgaXQncyB1c2VkIGluIGVnIG1heCBhbmQgbWlu
LgotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBvYnNlcnZlcnMgd2lsbCBiZSBmaXJlZCBpZiBl
aXRoZXIgb2YgdGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIHZhbHVlCi0gICAgICAgICAgICAgIHRo
YXQgZGlmZmVycyBmcm9tIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS4gIFdoZW4gcmV0dXJuaW5nIGFu
IG9iamVjdCB0aGF0Ci0gICAgICAgICAgICAgIG11dGF0ZXMgaW4gcmVzcG9uc2UgdG8gYXJyYXkg
Y2hhbmdlcywgZm9yIGV4YW1wbGUgYW4gYXJyYXkgdGhhdCBtYXBzCi0gICAgICAgICAgICAgIGV2
ZXJ5dGhpbmcgZnJvbSBzb21lIG90aGVyIGFycmF5IChzZWUgYEVtYmVyLmNvbXB1dGVkLm1hcGAp
LCBpdCBpcyB1c3VhbGx5Ci0gICAgICAgICAgICAgIGltcG9ydGFudCB0aGF0IHRoZSAqc2FtZSog
YXJyYXkgYmUgcmV0dXJuZWQgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgb2JzZXJ2
ZXJzLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgIEVtYmVyLmNvbXB1dGVkLm1heCA9IGZ1bmN0aW9uKGRlcGVuZGVu
dEtleSkgewotICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5yZWR1Y2VDb21wdXRlZChkZXBl
bmRlbnRLZXksIHsKLSAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogLUluZmluaXR5LAot
Ci0gICAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uKGFjY3VtdWxhdGVkVmFsdWUs
IGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTWF0aC5tYXgoYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSk7Ci0gICAgICAgICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAgICAgICByZW1vdmVkSXRlbTogZnVuY3Rpb24oYWNjdW11bGF0
ZWRWYWx1ZSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpdGVtIDwgYWNjdW11bGF0ZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhY2N1bXVsYXRlZFZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIERlcGVuZGVudCBrZXlzIG1heSByZWZl
ciB0byBgQHRoaXNgIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgb2JqZWN0IGl0c2VsZiwKLSAg
ICAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBhcnJheS1saWtlLCByYXRoZXIgdGhhbiBhIHByb3Bl
cnR5IG9mIHRoZSBvYmplY3QuICBUaGlzIGlzCi0gICAgICAgICAgICAgIG1vc3RseSB1c2VmdWwg
Zm9yIGFycmF5IHByb3hpZXMsIHRvIGVuc3VyZSBvYmplY3RzIGFyZSByZXRyaWV2ZWQgdmlhCi0g
ICAgICAgICAgICAgIGBvYmplY3RBdENvbnRlbnRgLiAgVGhpcyBpcyBob3cgeW91IGNvdWxkIHNv
cnQgaXRlbXMgYnkgcHJvcGVydGllcyBkZWZpbmVkIG9uIGFuIGl0ZW0gY29udHJvbGxlci4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBBcHAuUGVvcGxlQ29udHJvbGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5l
eHRlbmQoewotICAgICAgICAgICAgICAgIGl0ZW1Db250cm9sbGVyOiAncGVyc29uJywKLQotICAg
ICAgICAgICAgICAgIHNvcnRlZFBlb3BsZTogRW1iZXIuY29tcHV0ZWQuc29ydCgnQHRoaXMuQGVh
Y2gucmV2ZXJzZWROYW1lJywgZnVuY3Rpb24ocGVyc29uQSwgcGVyc29uQikgewotICAgICAgICAg
ICAgICAgICAgLy8gYHJldmVyc2VkTmFtZWAgaXNuJ3QgZGVmaW5lZCBvbiBQZXJzb24sIGJ1dCB3
ZSBoYXZlIGFjY2VzcyB0byBpdCB2aWEKLSAgICAgICAgICAgICAgICAgIC8vIHRoZSBpdGVtIGNv
bnRyb2xsZXIgQXBwLlBlcnNvbkNvbnRyb2xsZXIuICBJZiB3ZSdkIHVzZWQKLSAgICAgICAgICAg
ICAgICAgIC8vIGBjb250ZW50LkBlYWNoLnJldmVyc2VkTmFtZWAgYWJvdmUsIHdlIHdvdWxkIGJl
IGdldHRpbmcgdGhlIG9iamVjdHMKLSAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IGFuZCBu
b3QgaGF2ZSBhY2Nlc3MgdG8gYHJldmVyc2VkTmFtZWAuCi0gICAgICAgICAgICAgICAgICAvLwot
ICAgICAgICAgICAgICAgICAgdmFyIHJldmVyc2VkTmFtZUEgPSBnZXQocGVyc29uQSwgJ3JldmVy
c2VkTmFtZScpLAotICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VkTmFtZUIgPSBnZXQocGVy
c29uQiwgJ3JldmVyc2VkTmFtZScpOwotCi0gICAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIu
Y29tcGFyZShyZXZlcnNlZE5hbWVBLCByZXZlcnNlZE5hbWVCKTsKLSAgICAgICAgICAgICAgICB9
KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBBcHAuUGVyc29uQ29udHJvbGxl
ciA9IEVtYmVyLk9iamVjdENvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICByZXZl
cnNlZE5hbWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmVyc2Uo
Z2V0KHRoaXMsICduYW1lJykpOwotICAgICAgICAgICAgICAgIH0ucHJvcGVydHkoJ25hbWUnKQot
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgRGVw
ZW5kZW50IGtleXMgd2hvc2UgdmFsdWVzIGFyZSBub3QgYXJyYXlzIGFyZSB0cmVhdGVkIGFzIHJl
Z3VsYXIKLSAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiB3aGVuIHRoZXkgY2hhbmdlLCB0aGUg
Y29tcHV0ZWQgcHJvcGVydHkgaXMgY29tcGxldGVseQotICAgICAgICAgICAgICByZWNhbGN1bGF0
ZWQuICBJdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGhhdmUgZGVwZW5kZW50IGFycmF5cyB3aXRo
IHNpbWlsYXIKLSAgICAgICAgICAgICAgc2VtYW50aWNzLiAgRGVwZW5kZW50IGtleXMgd2hpY2gg
ZW5kIGluIGAuW11gIGRvIG5vdCB1c2UgIm9uZSBhdCBhIHRpbWUiCi0gICAgICAgICAgICAgIHNl
bWFudGljcy4gIFdoZW4gYW4gaXRlbSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gc3VjaCBhIGRl
cGVuZGVuY3ksIHRoZQotICAgICAgICAgICAgICBjb21wdXRlZCBwcm9wZXJ0eSBpcyBjb21wbGV0
ZWx5IHJlY29tcHV0ZWQuCi0KLSAgICAgICAgICAgICAgV2hlbiB0aGUgY29tcHV0ZWQgcHJvcGVy
dHkgaXMgY29tcGxldGVseSByZWNvbXB1dGVkLCB0aGUgYGFjY3VtdWxhdGVkVmFsdWVgCi0gICAg
ICAgICAgICAgIGlzIGRpc2NhcmRlZCwgaXQgc3RhcnRzIHdpdGggYGluaXRpYWxWYWx1ZWAgYWdh
aW4sIGFuZCBlYWNoIGl0ZW0gaXMgcGFzc2VkCi0gICAgICAgICAgICAgIHRvIGBhZGRlZEl0ZW1g
IGluIHR1cm4uCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAg
ICAgICAgLy8gV2hlbiBgc3RyaW5nYCBpcyBjaGFuZ2VkLCBgY29tcHV0ZWRgIGlzIGNvbXBsZXRl
bHkgcmVjb21wdXRlZC4KLSAgICAgICAgICAgICAgICBzdHJpbmc6ICdhIHN0cmluZycsCi0KLSAg
ICAgICAgICAgICAgICAvLyBXaGVuIGFuIGl0ZW0gaXMgYWRkZWQgdG8gYGFycmF5YCwgYGFkZGVk
SXRlbWAgaXMgY2FsbGVkLgotICAgICAgICAgICAgICAgIGFycmF5OiBbXSwKLQotICAgICAgICAg
ICAgICAgIC8vIFdoZW4gYW4gaXRlbSBpcyBhZGRlZCB0byBgYW5vdGhlckFycmF5YCwgYGNvbXB1
dGVkYCBpcyBjb21wbGV0ZWx5Ci0gICAgICAgICAgICAgICAgLy8gcmVjb21wdXRlZC4KLSAgICAg
ICAgICAgICAgICBhbm90aGVyQXJyYXk6IFtdLAotCi0gICAgICAgICAgICAgICAgY29tcHV0ZWQ6
IEVtYmVyLnJlZHVjZUNvbXB1dGVkKCdzdHJpbmcnLCAnYXJyYXknLCAnYW5vdGhlckFycmF5Lltd
JywgewotICAgICAgICAgICAgICAgICAgYWRkZWRJdGVtOiBhZGRlZEl0ZW1DYWxsYmFjaywKLSAg
ICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiByZW1vdmVkSXRlbUNhbGxiYWNrCi0gICAgICAg
ICAgICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEBtZXRob2QgcmVkdWNlQ29tcHV0ZWQKLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW2RlcGVuZGVudEtleXMqXQotICAgICAg
ICAgICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgICAgICAgICBAcmV0dXJuIHtF
bWJlci5Db21wdXRlZFByb3BlcnR5fQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
cmVkdWNlQ29tcHV0ZWQob3B0aW9ucykgewotICAgICAgICAgICAgdmFyIGFyZ3M7Ci0KLSAgICAg
ICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAgIGFyZ3Mg
PSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSk7Ci0gICAgICAgICAgICAgICAgb3B0aW9u
cyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIC0xKVswXTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAib2JqZWN0IikgewotICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJSZWR1Y2UgQ29tcHV0ZWQgUHJvcGVydHkgZGVjbGFy
ZWQgd2l0aG91dCBhbiBvcHRpb25zIGhhc2giKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCEoJ2luaXRpYWxWYWx1ZScgaW4gb3B0aW9ucykpIHsKLSAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRW1iZXJFcnJvcigiUmVkdWNlIENvbXB1dGVkIFByb3BlcnR5IGRlY2xhcmVkIHdp
dGhvdXQgYW4gaW5pdGlhbCB2YWx1ZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2
YXIgY3AgPSBuZXcgUmVkdWNlQ29tcHV0ZWRQcm9wZXJ0eShvcHRpb25zKTsKLQotICAgICAgICAg
ICAgaWYgKGFyZ3MpIHsKLSAgICAgICAgICAgICAgICBjcC5wcm9wZXJ0eS5hcHBseShjcCwgYXJn
cyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjcDsKLSAgICAgICAgfQot
Ci0gICAgICAgIF9fZXhwb3J0c19fLnJlZHVjZUNvbXB1dGVkID0gcmVkdWNlQ29tcHV0ZWQ7Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2NvbXB1dGVkL3JlZHVjZV9jb21wdXRl
ZF9tYWNyb3MiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9tZXJnZSIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0Iiwg
ImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL2Vu
dW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvb2Jz
ZXJ2ZXIiLCAiZW1iZXItcnVudGltZS9jb21wdXRlZC9hcnJheV9jb21wdXRlZCIsICJlbWJlci1y
dW50aW1lL2NvbXB1dGVkL3JlZHVjZV9jb21wdXRlZCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9v
YmplY3RfcHJveHkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3ViYXJyYXkiLCAiZW1iZXItcnVu
dGltZS9rZXlzIiwgImVtYmVyLXJ1bnRpbWUvY29tcGFyZSIsICJleHBvcnRzIl0sCi0gICAgZnVu
Y3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywg
X19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBl
bmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5
MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNf
XywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19leHBvcnRzX18pIHsKLSAg
ICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1i
ZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8K
LQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXIuYXNzZXJ0Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5M19fLmdldDsKLSAgICAg
ICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTRfXy5zZXQ7Ci0gICAgICAgIHZhciBpc0FycmF5ID0g
X19kZXBlbmRlbmN5NV9fLmlzQXJyYXk7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRl
bmN5NV9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRlbmN5Nl9f
WyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5N19fLmZvckVh
Y2g7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5OV9fLmFkZE9ic2VydmVyOwotICAgICAg
ICB2YXIgYXJyYXlDb21wdXRlZCA9IF9fZGVwZW5kZW5jeTEwX18uYXJyYXlDb21wdXRlZDsKLSAg
ICAgICAgdmFyIHJlZHVjZUNvbXB1dGVkID0gX19kZXBlbmRlbmN5MTFfXy5yZWR1Y2VDb21wdXRl
ZDsKLSAgICAgICAgdmFyIE9iamVjdFByb3h5ID0gX19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgU3ViQXJyYXkgPSBfX2RlcGVuZGVuY3kxM19fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBrZXlzID0gX19kZXBlbmRlbmN5MTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgY29tcGFyZSA9IF9fZGVwZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIg
YV9zbGljZSA9IFtdLnNsaWNlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgIEEgY29tcHV0
ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRoZSBzdW0gb2YgdGhlIHZhbHVlCi0gICAgICAgICAg
ICAgaW4gdGhlIGRlcGVuZGVudCBhcnJheS4KLQotICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0
ZWQuc3VtCi0gICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSBjb21wdXRlcyB0aGUgc3VtIG9mIGFsbCB2YWx1ZXMgaW4gdGhlIGRlcGVuZGVudEtl
eSdzIGFycmF5Ci0gICAgICAgICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAqLwotCi0g
ICAgICAgIGZ1bmN0aW9uIHN1bShkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VDb21wdXRlZChkZXBlbmRlbnRLZXksIHsKLSAgICAgICAgICAgICAgICBpbml0aWFsVmFs
dWU6IDAsCi0KLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06IGZ1bmN0aW9uKGFjY3VtdWxhdGVk
VmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYWNjdW11bGF0ZWRWYWx1ZSArIGl0ZW07Ci0gICAgICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbihhY2N1bXVsYXRlZFZhbHVl
LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGFjY3VtdWxhdGVkVmFsdWUgLSBpdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uc3VtID0gc3VtOyAv
KioKLSAgICAgICAgICAgICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGN1bGF0ZXMgdGhl
IG1heGltdW0gdmFsdWUgaW4gdGhlCi0gICAgICAgICAgICAgIGRlcGVuZGVudCBhcnJheS4gVGhp
cyB3aWxsIHJldHVybiBgLUluZmluaXR5YCB3aGVuIHRoZSBkZXBlbmRlbnQKLSAgICAgICAgICAg
ICAgYXJyYXkgaXMgZW1wdHkuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgY2hpbGRBZ2VzOiBFbWJlci5jb21wdXRlZC5tYXBCeSgnY2hpbGRyZW4nLCAnYWdlJyksCi0g
ICAgICAgICAgICAgICAgbWF4Q2hpbGRBZ2U6IEVtYmVyLmNvbXB1dGVkLm1heCgnY2hpbGRBZ2Vz
JykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIGxvcmRCeXJvbiA9IFBl
cnNvbi5jcmVhdGUoeyBjaGlsZHJlbjogW10gfSk7Ci0KLSAgICAgICAgICAgICAgbG9yZEJ5cm9u
LmdldCgnbWF4Q2hpbGRBZ2UnKTsgLy8gLUluZmluaXR5Ci0gICAgICAgICAgICAgIGxvcmRCeXJv
bi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdCh7Ci0gICAgICAgICAgICAgICAgbmFtZTogJ0F1
Z3VzdGEgQWRhIEJ5cm9uJywgYWdlOiA3Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICBsb3JkQnlyb24uZ2V0KCdtYXhDaGlsZEFnZScpOyAvLyA3Ci0gICAgICAgICAgICAgIGxvcmRC
eXJvbi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdHMoW3sKLSAgICAgICAgICAgICAgICBuYW1l
OiAnQWxsZWdyYSBCeXJvbicsCi0gICAgICAgICAgICAgICAgYWdlOiA1Ci0gICAgICAgICAgICAg
IH0sIHsKLSAgICAgICAgICAgICAgICBuYW1lOiAnRWxpemFiZXRoIE1lZG9yYSBMZWlnaCcsCi0g
ICAgICAgICAgICAgICAgYWdlOiA4Ci0gICAgICAgICAgICAgIH1dKTsKLSAgICAgICAgICAgICAg
bG9yZEJ5cm9uLmdldCgnbWF4Q2hpbGRBZ2UnKTsgLy8gOAotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAbWV0aG9kIGNvbXB1dGVkLm1heAotICAgICAgICAgICAgICBAZm9yIEVt
YmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAg
ICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgdGhlIGxhcmdl
c3QgdmFsdWUgaW4gdGhlIGRlcGVuZGVudEtleSdzIGFycmF5Ci0gICAgICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBtYXggKGRlcGVuZGVudEtleSkgewotICAgICAgICAgICAgcmV0dXJuIHJl
ZHVjZUNvbXB1dGVkKGRlcGVuZGVudEtleSwgewotICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1
ZTogLSBJbmZpbml0eSwKLQotICAgICAgICAgICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24gKGFj
Y3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSk7Ci0g
ICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlv
biAoYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVtIDwgYWNjdW11bGF0ZWRWYWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkVmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIF9fZXhwb3J0c19fLm1heCA9IG1heDsgLyoqCi0gICAgICAgICAgICAgIEEgY29t
cHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZQot
ICAgICAgICAgICAgICBkZXBlbmRlbnQgYXJyYXkuIFRoaXMgd2lsbCByZXR1cm4gYEluZmluaXR5
YCB3aGVuIHRoZSBkZXBlbmRlbnQKLSAgICAgICAgICAgICAgYXJyYXkgaXMgZW1wdHkuCi0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgUGVyc29uID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2hpbGRBZ2VzOiBFbWJlci5jb21w
dXRlZC5tYXBCeSgnY2hpbGRyZW4nLCAnYWdlJyksCi0gICAgICAgICAgICAgICAgbWluQ2hpbGRB
Z2U6IEVtYmVyLmNvbXB1dGVkLm1pbignY2hpbGRBZ2VzJykKLSAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgdmFyIGxvcmRCeXJvbiA9IFBlcnNvbi5jcmVhdGUoeyBjaGlsZHJlbjog
W10gfSk7Ci0KLSAgICAgICAgICAgICAgbG9yZEJ5cm9uLmdldCgnbWluQ2hpbGRBZ2UnKTsgLy8g
SW5maW5pdHkKLSAgICAgICAgICAgICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRyZW4nKS5wdXNoT2Jq
ZWN0KHsKLSAgICAgICAgICAgICAgICBuYW1lOiAnQXVndXN0YSBBZGEgQnlyb24nLCBhZ2U6IDcK
LSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQoJ21pbkNoaWxk
QWdlJyk7IC8vIDcKLSAgICAgICAgICAgICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRyZW4nKS5wdXNo
T2JqZWN0cyhbewotICAgICAgICAgICAgICAgIG5hbWU6ICdBbGxlZ3JhIEJ5cm9uJywKLSAgICAg
ICAgICAgICAgICBhZ2U6IDUKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIG5h
bWU6ICdFbGl6YWJldGggTWVkb3JhIExlaWdoJywKLSAgICAgICAgICAgICAgICBhZ2U6IDgKLSAg
ICAgICAgICAgICAgfV0pOwotICAgICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdtaW5DaGlsZEFn
ZScpOyAvLyA1Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29t
cHV0ZWQubWluCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFt
IHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5Db21w
dXRlZFByb3BlcnR5fSBjb21wdXRlcyB0aGUgc21hbGxlc3QgdmFsdWUgaW4gdGhlIGRlcGVuZGVu
dEtleSdzIGFycmF5Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBtaW4oZGVwZW5k
ZW50S2V5KSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ29tcHV0ZWQoZGVwZW5kZW50S2V5
LCB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBJbmZpbml0eSwKLQotICAgICAgICAg
ICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24gKGFjY3VtdWxhdGVkVmFsdWUsIGl0ZW0sIGNoYW5n
ZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5t
aW4oYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSk7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbiAoYWNjdW11bGF0ZWRWYWx1ZSwgaXRlbSwg
Y2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
ID4gYWNjdW11bGF0ZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFj
Y3VtdWxhdGVkVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLm1pbiA9
IG1pbjsgLyoqCi0gICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgbWFwcGVkIHZpYSB0aGUg
Y2FsbGJhY2sKLQotICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRl
IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLgotICAgICAgICAgICAgICBgaXRl
bWAgaXMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24oaXRlbSk7Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgZXhjaXRpbmdDaG9yZXM6IEVtYmVyLmNvbXB1dGVkLm1hcCgnY2hv
cmVzJywgZnVuY3Rpb24oY2hvcmUpIHsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBjaG9yZS50
b1VwcGVyQ2FzZSgpICsgJyEnOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoewotICAgICAg
ICAgICAgICAgIGNob3JlczogWydjbGVhbicsICd3cml0ZSBtb3JlIHVuaXQgdGVzdHMnXQotICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBoYW1zdGVyLmdldCgnZXhjaXRpbmdDaG9y
ZXMnKTsgLy8gWydDTEVBTiEnLCAnV1JJVEUgTU9SRSBVTklUIFRFU1RTISddCi0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQubWFwCi0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtl
eQotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgICAgICAg
ICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBhbiBhcnJheSBtYXBwZWQgdmlhIHRo
ZSBjYWxsYmFjawotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWFwKGRlcGVuZGVu
dEtleSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAg
ICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3Rh
bmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkID0gY2FsbGJhY2suY2Fs
bCh0aGlzLCBpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXkuaW5zZXJ0QXQoY2hhbmdl
TWV0YS5pbmRleCwgbWFwcGVkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW06IGZ1bmN0aW9u
KGFycmF5LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXkucmVtb3ZlQXQoY2hhbmdlTWV0YS5pbmRleCwgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlDb21wdXRlZChkZXBlbmRlbnRLZXksIG9wdGlvbnMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18ubWFwID0gbWFwOyAvKioKLSAgICAg
ICAgICAgICAgUmV0dXJucyBhbiBhcnJheSBtYXBwZWQgdG8gdGhlIHNwZWNpZmllZCBrZXkuCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgUGVyc29uID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2hpbGRBZ2VzOiBFbWJlci5j
b21wdXRlZC5tYXBCeSgnY2hpbGRyZW4nLCAnYWdlJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgICAgdmFyIGxvcmRCeXJvbiA9IFBlcnNvbi5jcmVhdGUoeyBjaGlsZHJlbjogW10g
fSk7Ci0KLSAgICAgICAgICAgICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRBZ2VzJyk7IC8vIFtdCi0g
ICAgICAgICAgICAgIGxvcmRCeXJvbi5nZXQoJ2NoaWxkcmVuJykucHVzaE9iamVjdCh7IG5hbWU6
ICdBdWd1c3RhIEFkYSBCeXJvbicsIGFnZTogNyB9KTsKLSAgICAgICAgICAgICAgbG9yZEJ5cm9u
LmdldCgnY2hpbGRBZ2VzJyk7IC8vIFs3XQotICAgICAgICAgICAgICBsb3JkQnlyb24uZ2V0KCdj
aGlsZHJlbicpLnB1c2hPYmplY3RzKFt7Ci0gICAgICAgICAgICAgICAgbmFtZTogJ0FsbGVncmEg
Qnlyb24nLAotICAgICAgICAgICAgICAgIGFnZTogNQotICAgICAgICAgICAgICB9LCB7Ci0gICAg
ICAgICAgICAgICAgbmFtZTogJ0VsaXphYmV0aCBNZWRvcmEgTGVpZ2gnLAotICAgICAgICAgICAg
ICAgIGFnZTogOAotICAgICAgICAgICAgICB9XSk7Ci0gICAgICAgICAgICAgIGxvcmRCeXJvbi5n
ZXQoJ2NoaWxkQWdlcycpOyAvLyBbNywgNSwgOF0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5tYXBCeQotICAgICAgICAgICAgICBAZm9yIEVtYmVy
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5S2V5Ci0gICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLkNvbXB1dGVkUHJvcGVydHl9IGFuIGFycmF5IG1hcHBlZCB0byB0aGUgc3BlY2lmaWVkIGtl
eQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gbWFwQnkgKGRlcGVuZGVudEtleSwg
cHJvcGVydHlLZXkpIHsKLSAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKGl0ZW0p
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KGl0ZW0sIHByb3BlcnR5S2V5KTsKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICByZXR1cm4gbWFwKGRlcGVuZGVudEtleSArICcuQGVhY2gu
JyArIHByb3BlcnR5S2V5LCBjYWxsYmFjayk7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5tYXBCeSA9IG1hcEJ5OyAvKioKLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5t
YXBQcm9wZXJ0eQotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBkZXBy
ZWNhdGVkIFVzZSBgRW1iZXIuY29tcHV0ZWQubWFwQnlgIGluc3RlYWQKLSAgICAgICAgICAgICAg
QHBhcmFtIGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0gcHJvcGVydHlLZXkKLSAg
ICAgICAgICAgICovCi0gICAgICAgIHZhciBtYXBQcm9wZXJ0eSA9IG1hcEJ5OwotICAgICAgICBf
X2V4cG9ydHNfXy5tYXBQcm9wZXJ0eSA9IG1hcFByb3BlcnR5OwotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgRmlsdGVycyB0aGUgYXJyYXkgYnkgdGhlIGNhbGxiYWNrLgotCi0gICAgICAgICAg
ICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxv
d2luZyBzaWduYXR1cmUuCi0gICAgICAgICAgICAgIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVt
IGluIHRoZSBpdGVyYXRpb24uCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBmdW5jdGlvbihpdGVtKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVj
dC5leHRlbmQoewotICAgICAgICAgICAgICAgIHJlbWFpbmluZ0Nob3JlczogRW1iZXIuY29tcHV0
ZWQuZmlsdGVyKCdjaG9yZXMnLCBmdW5jdGlvbihjaG9yZSkgewotICAgICAgICAgICAgICAgICAg
cmV0dXJuICFjaG9yZS5kb25lOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rlci5jcmVhdGUoeyAKLSAgICAg
ICAgICAgICAgICBjaG9yZXM6IFsKLSAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2Nvb2snLCBk
b25lOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjbGVhbicsIGRvbmU6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0cycs
IGRvbmU6IGZhbHNlIH0KLSAgICAgICAgICAgICAgICBdIAotICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICBoYW1zdGVyLmdldCgncmVtYWluaW5nQ2hvcmVzJyk7IC8vIFt7bmFtZTog
J3dyaXRlIG1vcmUgdW5pdCB0ZXN0cycsIGRvbmU6IGZhbHNlfV0KLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5maWx0ZXIKLSAgICAgICAgICAgICAg
QGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0g
ICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAgIEBy
ZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRoZSBmaWx0ZXJlZCBhcnJheQotICAgICAg
ICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlsdGVyKGRlcGVuZGVudEtleSwgY2FsbGJhY2sp
IHsKLSAgICAgICAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICAgICAgICAgIGluaXRpYWxp
emU6IGZ1bmN0aW9uIChhcnJheSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGluc3RhbmNlTWV0YS5maWx0ZXJlZEFycmF5SW5kZXhlcyA9IG5ldyBTdWJB
cnJheSgpOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBhZGRlZEl0ZW06
IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjaGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gISFjYWxsYmFjay5jYWxsKHRoaXMsIGl0ZW0pLAot
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJJbmRleCA9IGluc3RhbmNlTWV0YS5maWx0ZXJlZEFy
cmF5SW5kZXhlcy5hZGRJdGVtKGNoYW5nZU1ldGEuaW5kZXgsIG1hdGNoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Lmlu
c2VydEF0KGZpbHRlckluZGV4LCBpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgcmVtb3ZlZEl0ZW06IGZ1bmN0aW9uKGFycmF5LCBpdGVtLCBjaGFuZ2VNZXRh
LCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlckluZGV4ID0g
aW5zdGFuY2VNZXRhLmZpbHRlcmVkQXJyYXlJbmRleGVzLnJlbW92ZUl0ZW0oY2hhbmdlTWV0YS5p
bmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckluZGV4ID4gLTEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnJlbW92ZUF0KGZpbHRlckluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXR1cm4gYXJy
YXlDb21wdXRlZChkZXBlbmRlbnRLZXksIG9wdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
X19leHBvcnRzX18uZmlsdGVyID0gZmlsdGVyOyAvKioKLSAgICAgICAgICAgICAgRmlsdGVycyB0
aGUgYXJyYXkgYnkgdGhlIHByb3BlcnR5IGFuZCB2YWx1ZQotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDaG9yZXM6IEVtYmVyLmNvbXB1dGVkLmZpbHRl
ckJ5KCdjaG9yZXMnLCAnZG9uZScsIGZhbHNlKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICBj
aG9yZXM6IFsKLSAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ2Nvb2snLCBkb25lOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgICB7IG5hbWU6ICdjbGVhbicsIGRvbmU6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICAgIHsgbmFtZTogJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0cycsIGRvbmU6IGZhbHNl
IH0KLSAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
IGhhbXN0ZXIuZ2V0KCdyZW1haW5pbmdDaG9yZXMnKTsgLy8gW3sgbmFtZTogJ3dyaXRlIG1vcmUg
dW5pdCB0ZXN0cycsIGRvbmU6IGZhbHNlIH1dCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZmlsdGVyQnkKLSAgICAgICAgICAgICAgQGZvciBFbWJl
cgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleQotICAgICAgICAgICAgICBAcGFyYW0geyp9
IHZhbHVlCi0gICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRo
ZSBmaWx0ZXJlZCBhcnJheQotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlsdGVy
QnkgKGRlcGVuZGVudEtleSwgcHJvcGVydHlLZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIg
Y2FsbGJhY2s7Ci0KLSAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnZXQoaXRlbSwgcHJvcGVydHlLZXkpOwotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rp
b24oaXRlbSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KGl0ZW0sIHByb3BlcnR5
S2V5KSA9PT0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIGZpbHRlcihkZXBlbmRlbnRLZXkgKyAnLkBlYWNoLicgKyBwcm9wZXJ0
eUtleSwgY2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uZmlsdGVy
QnkgPSBmaWx0ZXJCeTsgLyoqCi0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQuZmlsdGVy
UHJvcGVydHkKLSAgICAgICAgICAgICAgQGZvciBFbWJlcgotICAgICAgICAgICAgICBAcGFyYW0g
ZGVwZW5kZW50S2V5Ci0gICAgICAgICAgICAgIEBwYXJhbSBwcm9wZXJ0eUtleQotICAgICAgICAg
ICAgICBAcGFyYW0gdmFsdWUKLSAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBFbWJlci5j
b21wdXRlZC5maWx0ZXJCeWAgaW5zdGVhZAotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIGZp
bHRlclByb3BlcnR5ID0gZmlsdGVyQnk7Ci0gICAgICAgIF9fZXhwb3J0c19fLmZpbHRlclByb3Bl
cnR5ID0gZmlsdGVyUHJvcGVydHk7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNvbXB1
dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlIHVuaXF1
ZQotICAgICAgICAgICAgICBlbGVtZW50cyBmcm9tIG9uZSBvciBtb3JlIGRlcGVuZGVudCBhcnJh
eXMuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICB1bmlxdWVGcnVpdHM6IEVtYmVyLmNvbXB1dGVkLnVuaXEoJ2ZydWl0cycp
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBoYW1zdGVyID0gSGFtc3Rl
ci5jcmVhdGUoewotICAgICAgICAgICAgICAgIGZydWl0czogWwotICAgICAgICAgICAgICAgICAg
J2JhbmFuYScsCi0gICAgICAgICAgICAgICAgICAnZ3JhcGUnLAotICAgICAgICAgICAgICAgICAg
J2thbGUnLAotICAgICAgICAgICAgICAgICAgJ2JhbmFuYScKLSAgICAgICAgICAgICAgICBdCi0g
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGhhbXN0ZXIuZ2V0KCd1bmlxdWVGcnVp
dHMnKTsgLy8gWydiYW5hbmEnLCAnZ3JhcGUnLCAna2FsZSddCi0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBtZXRob2QgY29tcHV0ZWQudW5pcQotICAgICAgICAgICAgICBAZm9y
IEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleSoKLSAgICAg
ICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcg
YXJyYXkgd2l0aCBhbGwgdGhlCi0gICAgICAgICAgICAgIHVuaXF1ZSBlbGVtZW50cyBmcm9tIHRo
ZSBkZXBlbmRlbnQgYXJyYXkKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHVuaXEo
KSB7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAg
ICAgICAgICAgYXJncy5wdXNoKHsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlv
bihhcnJheSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGluc3RhbmNlTWV0YS5pdGVtQ291bnRzID0ge307Ci0gICAgICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGNoYW5nZU1ldGEs
IGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3Io
aXRlbSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZU1ldGEuaXRlbUNvdW50
c1tndWlkXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VNZXRhLml0ZW1Db3Vu
dHNbZ3VpZF0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgKytpbnN0YW5jZU1ldGEuaXRlbUNvdW50c1tndWlkXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcnJheS5hZGRPYmplY3QoaXRlbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgIHJlbW92ZWRJdGVtOiBmdW5jdGlvbihhcnJheSwgaXRlbSwgXywgaW5zdGFu
Y2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBndWlkID0gZ3VpZEZvcihpdGVtKSwK
LSAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50cyA9IGluc3RhbmNlTWV0YS5pdGVtQ291bnRz
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgtLWl0ZW1Db3VudHNbZ3VpZF0gPT09IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnJlbW92ZU9iamVjdChpdGVtKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlD
b21wdXRlZC5hcHBseShudWxsLCBhcmdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLnVuaXEgPSB1bmlxOyAvKioKLSAgICAgICAgICAgICAgQWxpYXMgZm9yIFtFbWJlci5jb21w
dXRlZC51bmlxXSgvYXBpLyNtZXRob2RfY29tcHV0ZWRfdW5pcSkuCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBjb21wdXRlZC51bmlvbgotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleSoKLSAgICAgICAgICAgICAgQHJldHVy
biB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0aCBhbGwg
dGhlCi0gICAgICAgICAgICAgIHVuaXF1ZSBlbGVtZW50cyBmcm9tIHRoZSBkZXBlbmRlbnQgYXJy
YXkKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciB1bmlvbiA9IHVuaXE7Ci0gICAgICAgIF9f
ZXhwb3J0c19fLnVuaW9uID0gdW5pb247Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBBIGNv
bXB1dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlIGR1
cGxpY2F0ZWQKLSAgICAgICAgICAgICAgZWxlbWVudHMgZnJvbSB0d28gb3IgbW9yZSBkZXBlbmRl
bnQgYXJyYXlzLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBvYmogPSBFbWJlci5PYmplY3QuY3JlYXRlV2l0
aE1peGlucyh7Ci0gICAgICAgICAgICAgICAgYWRhRnJpZW5kczogWydDaGFybGVzIEJhYmJhZ2Un
LCAnSm9obiBIb2Job3VzZScsICdXaWxsaWFtIEtpbmcnLCAnTWFyeSBTb21lcnZpbGxlJ10sCi0g
ICAgICAgICAgICAgICAgY2hhcmxlc0ZyaWVuZHM6IFsnV2lsbGlhbSBLaW5nJywgJ01hcnkgU29t
ZXJ2aWxsZScsICdBZGEgTG92ZWxhY2UnLCAnR2VvcmdlIFBlYWNvY2snXSwKLSAgICAgICAgICAg
ICAgICBmcmllbmRzSW5Db21tb246IEVtYmVyLmNvbXB1dGVkLmludGVyc2VjdCgnYWRhRnJpZW5k
cycsICdjaGFybGVzRnJpZW5kcycpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
IG9iai5nZXQoJ2ZyaWVuZHNJbkNvbW1vbicpOyAvLyBbJ1dpbGxpYW0gS2luZycsICdNYXJ5IFNv
bWVydmlsbGUnXQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIGNv
bXB1dGVkLmludGVyc2VjdAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleSoKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1i
ZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCi0g
ICAgICAgICAgICAgIGR1cGxpY2F0ZWQgZWxlbWVudHMgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5
cwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gaW50ZXJzZWN0KCkgewotICAgICAg
ICAgICAgdmFyIGdldERlcGVuZGVudEtleUd1aWRzID0gZnVuY3Rpb24gKGNoYW5nZU1ldGEpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbWFwKGNoYW5nZU1ldGEucHJvcGVydHkuX2RlcGVuZGVu
dEtleXMsIGZ1bmN0aW9uIChkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGd1aWRGb3IoZGVwZW5kZW50S2V5KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cyk7
Ci0gICAgICAgICAgICBhcmdzLnB1c2goewotICAgICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1
bmN0aW9uIChhcnJheSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGluc3RhbmNlTWV0YS5pdGVtQ291bnRzID0ge307Ci0gICAgICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGNoYW5n
ZU1ldGEsIGluc3RhbmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUd1aWQg
PSBndWlkRm9yKGl0ZW0pLAotICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnRHdWlkcyA9IGdl
dERlcGVuZGVudEtleUd1aWRzKGNoYW5nZU1ldGEpLAotICAgICAgICAgICAgICAgICAgICBkZXBl
bmRlbnRHdWlkID0gZ3VpZEZvcihjaGFuZ2VNZXRhLmFycmF5Q2hhbmdlZCksCi0gICAgICAgICAg
ICAgICAgICAgIG51bWJlck9mRGVwZW5kZW50QXJyYXlzID0gY2hhbmdlTWV0YS5wcm9wZXJ0eS5f
ZGVwZW5kZW50S2V5cy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudHMgPSBp
bnN0YW5jZU1ldGEuaXRlbUNvdW50czsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1D
b3VudHNbaXRlbUd1aWRdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnRzW2l0
ZW1HdWlkXSA9IHt9OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpdGVtQ291bnRzW2l0ZW1HdWlkXVtkZXBlbmRlbnRHdWlkXSA9PT0gdW5kZWZpbmVkKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnRzW2l0ZW1HdWlkXVtkZXBlbmRlbnRH
dWlkXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoKytpdGVtQ291bnRzW2l0ZW1HdWlkXVtkZXBlbmRlbnRHdWlkXSA9PT0gMSAmJgotICAgICAg
ICAgICAgICAgICAgICBudW1iZXJPZkRlcGVuZGVudEFycmF5cyA9PT0ga2V5cyhpdGVtQ291bnRz
W2l0ZW1HdWlkXSkubGVuZ3RoKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LmFk
ZE9iamVjdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICByZW1v
dmVkSXRlbTogZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGNoYW5nZU1ldGEsIGluc3RhbmNlTWV0YSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUd1aWQgPSBndWlkRm9yKGl0ZW0pLAotICAg
ICAgICAgICAgICAgICAgICBkZXBlbmRlbnRHdWlkcyA9IGdldERlcGVuZGVudEtleUd1aWRzKGNo
YW5nZU1ldGEpLAotICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnRHdWlkID0gZ3VpZEZvcihj
aGFuZ2VNZXRhLmFycmF5Q2hhbmdlZCksCi0gICAgICAgICAgICAgICAgICAgIG51bWJlck9mRGVw
ZW5kZW50QXJyYXlzID0gY2hhbmdlTWV0YS5wcm9wZXJ0eS5fZGVwZW5kZW50S2V5cy5sZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJyYXlzSXRlbUFwcGVhcnNJbiwKLSAgICAg
ICAgICAgICAgICAgICAgaXRlbUNvdW50cyA9IGluc3RhbmNlTWV0YS5pdGVtQ291bnRzOwotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ291bnRzW2l0ZW1HdWlkXVtkZXBlbmRlbnRHdWlk
XSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnRzW2l0
ZW1HdWlkXVtkZXBlbmRlbnRHdWlkXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKC0taXRlbUNvdW50c1tpdGVtR3VpZF1bZGVwZW5kZW50R3VpZF0g
PT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ291bnRzW2l0ZW1H
dWlkXVtkZXBlbmRlbnRHdWlkXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mQXJy
YXlzSXRlbUFwcGVhcnNJbiA9IGtleXMoaXRlbUNvdW50c1tpdGVtR3VpZF0pLmxlbmd0aDsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mQXJyYXlzSXRlbUFwcGVhcnNJbiA9
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ291bnRzW2l0
ZW1HdWlkXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFycmF5LnJlbW92ZU9iamVjdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlDb21wdXRlZC5hcHBseShudWxsLCBh
cmdzKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmludGVyc2VjdCA9IGludGVy
c2VjdDsgLyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJu
cyBhIG5ldyBhcnJheSB3aXRoIGFsbCB0aGUKLSAgICAgICAgICAgICAgcHJvcGVydGllcyBmcm9t
IHRoZSBmaXJzdCBkZXBlbmRlbnQgYXJyYXkgdGhhdCBhcmUgbm90IGluIHRoZSBzZWNvbmQKLSAg
ICAgICAgICAgICAgZGVwZW5kZW50IGFycmF5LgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgbGlrZXM6IFsnYmFuYW5hJywg
J2dyYXBlJywgJ2thbGUnXSwKLSAgICAgICAgICAgICAgICB3YW50czogRW1iZXIuY29tcHV0ZWQu
c2V0RGlmZignbGlrZXMnLCAnZnJ1aXRzJykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgZnJ1
aXRzOiBbCi0gICAgICAgICAgICAgICAgICAnZ3JhcGUnLAotICAgICAgICAgICAgICAgICAgJ2th
bGUnLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgaGFtc3Rlci5nZXQoJ3dhbnRzJyk7IC8vIFsnYmFuYW5hJ10KLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb21wdXRlZC5zZXREaWZmCi0gICAgICAgICAgICAg
IEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHNldEFQcm9wZXJ0eQot
ICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc2V0QlByb3BlcnR5Ci0gICAgICAgICAgICAg
IEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIGEgbmV3IGFycmF5IHdp
dGggYWxsIHRoZQotICAgICAgICAgICAgICBpdGVtcyBmcm9tIHRoZSBmaXJzdCBkZXBlbmRlbnQg
YXJyYXkgdGhhdCBhcmUgbm90IGluIHRoZSBzZWNvbmQKLSAgICAgICAgICAgICAgZGVwZW5kZW50
IGFycmF5Ci0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBzZXREaWZmKHNldEFQcm9w
ZXJ0eSwgc2V0QlByb3BlcnR5KSB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAh
PT0gMikgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJzZXREaWZmIHJl
cXVpcmVzIGV4YWN0bHkgdHdvIGRlcGVuZGVudCBhcnJheXMuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gYXJyYXlDb21wdXRlZChzZXRBUHJvcGVydHksIHNldEJQcm9wZXJ0
eSwgewotICAgICAgICAgICAgICAgIGFkZGVkSXRlbTogZnVuY3Rpb24gKGFycmF5LCBpdGVtLCBj
aGFuZ2VNZXRhLCBpbnN0YW5jZU1ldGEpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNldEEg
PSBnZXQodGhpcywgc2V0QVByb3BlcnR5KSwKLSAgICAgICAgICAgICAgICAgICAgc2V0QiA9IGdl
dCh0aGlzLCBzZXRCUHJvcGVydHkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VN
ZXRhLmFycmF5Q2hhbmdlZCA9PT0gc2V0QSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFzZXRCLmNvbnRhaW5zKGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy
YXkuYWRkT2JqZWN0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucmVtb3Zl
T2JqZWN0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBhcnJheTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgcmVt
b3ZlZEl0ZW06IGZ1bmN0aW9uIChhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRh
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzZXRBID0gZ2V0KHRoaXMsIHNldEFQcm9wZXJ0
eSksCi0gICAgICAgICAgICAgICAgICAgIHNldEIgPSBnZXQodGhpcywgc2V0QlByb3BlcnR5KTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlTWV0YS5hcnJheUNoYW5nZWQgPT09IHNl
dEIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXRBLmNvbnRhaW5zKGl0ZW0pKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuYWRkT2JqZWN0KGl0ZW0pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyYXkucmVtb3ZlT2JqZWN0KGl0ZW0pOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0
c19fLnNldERpZmYgPSBzZXREaWZmOwotICAgICAgICBmdW5jdGlvbiBiaW5hcnlTZWFyY2goYXJy
YXksIGl0ZW0sIGxvdywgaGlnaCkgewotICAgICAgICAgICAgdmFyIG1pZCwgbWlkSXRlbSwgcmVz
LCBndWlkTWlkLCBndWlkSXRlbTsKLQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PCA0KSB7Ci0gICAgICAgICAgICAgICAgaGlnaCA9IGdldChhcnJheSwgJ2xlbmd0aCcpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7Ci0gICAg
ICAgICAgICAgICAgbG93ID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxv
dyA9PT0gaGlnaCkgewotICAgICAgICAgICAgICAgIHJldHVybiBsb3c7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIG1pZCA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7
Ci0gICAgICAgICAgICBtaWRJdGVtID0gYXJyYXkub2JqZWN0QXQobWlkKTsKLQotICAgICAgICAg
ICAgZ3VpZE1pZCA9IF9ndWlkRm9yKG1pZEl0ZW0pOwotICAgICAgICAgICAgZ3VpZEl0ZW0gPSBf
Z3VpZEZvcihpdGVtKTsKLQotICAgICAgICAgICAgaWYgKGd1aWRNaWQgPT09IGd1aWRJdGVtKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmVzID0gdGhpcy5vcmRlcihtaWRJdGVtLCBpdGVtKTsKLSAgICAgICAgICAgIGlmIChyZXMg
PT09IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSBndWlkTWlkIDwgZ3VpZEl0ZW0gPyAtMSA6
IDE7Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5hcnlTZWFyY2goYXJyYXksIGl0ZW0sIG1pZCArIDEs
IGhpZ2gpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuYmluYXJ5U2VhcmNoKGFycmF5LCBpdGVtLCBsb3csIG1pZCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtaWQ7Ci0KLSAgICAgICAgICAgIGZ1bmN0
aW9uIF9ndWlkRm9yKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoU2VhcmNoUHJveHkuZGV0
ZWN0SW5zdGFuY2UoaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGd1aWRGb3Io
Z2V0KGl0ZW0sICdjb250ZW50JykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ3VpZEZvcihpdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAg
ICAgICAgdmFyIFNlYXJjaFByb3h5ID0gT2JqZWN0UHJveHkuZXh0ZW5kKCk7Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAgICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhIG5l
dyBhcnJheSB3aXRoIGFsbCB0aGUKLSAgICAgICAgICAgICAgcHJvcGVydGllcyBmcm9tIHRoZSBm
aXJzdCBkZXBlbmRlbnQgYXJyYXkgc29ydGVkIGJhc2VkIG9uIGEgcHJvcGVydHkKLSAgICAgICAg
ICAgICAgb3Igc29ydCBmdW5jdGlvbi4KLQotICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0
aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24oaXRlbUEs
IGl0ZW1CKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgLSBgaXRlbUFgIHRo
ZSBmaXJzdCBpdGVtIHRvIGNvbXBhcmUuCi0gICAgICAgICAgICAgIC0gYGl0ZW1CYCB0aGUgc2Vj
b25kIGl0ZW0gdG8gY29tcGFyZS4KLQotICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCByZXR1cm4gbmVnYXRpdmUgbnVtYmVyIChlLmcuIGAtMWApIHdoZW4gYGl0ZW1BYCBzaG91bGQg
Y29tZSBiZWZvcmUKLSAgICAgICAgICAgICAgYGl0ZW1CYC4gSXQgc2hvdWxkIHJldHVybiBwb3Np
dGl2ZSBudW1iZXIgKGUuZy4gYDFgKSB3aGVuIGBpdGVtQWAgc2hvdWxkIGNvbWUgYWZ0ZXIKLSAg
ICAgICAgICAgICAgYGl0ZW1CYC4gSWYgdGhlIGBpdGVtQWAgYW5kIGBpdGVtQmAgYXJlIGVxdWFs
IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBgMGAuCi0KLSAgICAgICAgICAgICAgVGhlcmVm
b3JlLCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbXBhcmluZyBzb21lIG51bWVyaWMgdmFsdWVzLCBz
aW1wbGUgYGl0ZW1BIC0gaXRlbUJgIG9yCi0gICAgICAgICAgICAgIGBpdGVtQS5nZXQoICdmb28n
ICkgLSBpdGVtQi5nZXQoICdmb28nIClgIGNhbiBiZSB1c2VkIGluc3RlYWQgb2Ygc2VyaWVzIG9m
IGBpZmAuCi0KLSAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgdmFyIFRvRG9MaXN0ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICAgICAgICAgICAgLy8gdXNpbmcgc3RhbmRhcmQgYXNjZW5kaW5nIHNvcnQKLSAgICAg
ICAgICAgICAgICB0b2Rvc1NvcnRpbmc6IFsnbmFtZSddLAotICAgICAgICAgICAgICAgIHNvcnRl
ZFRvZG9zOiBFbWJlci5jb21wdXRlZC5zb3J0KCd0b2RvcycsICd0b2Rvc1NvcnRpbmcnKSwKLQot
ICAgICAgICAgICAgICAgIC8vIHVzaW5nIGRlc2NlbmRpbmcgc29ydAotICAgICAgICAgICAgICAg
IHRvZG9zU29ydGluZ0Rlc2M6IFsnbmFtZTpkZXNjJ10sCi0gICAgICAgICAgICAgICAgc29ydGVk
VG9kb3NEZXNjOiBFbWJlci5jb21wdXRlZC5zb3J0KCd0b2RvcycsICd0b2Rvc1NvcnRpbmdEZXNj
JyksCi0KLSAgICAgICAgICAgICAgICAvLyB1c2luZyBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uCi0g
ICAgICAgICAgICAgICAgcHJpb3JpdHlUb2RvczogRW1iZXIuY29tcHV0ZWQuc29ydCgndG9kb3Mn
LCBmdW5jdGlvbihhLCBiKXsKLSAgICAgICAgICAgICAgICAgIGlmIChhLnByaW9yaXR5ID4gYi5w
cmlvcml0eSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJpb3JpdHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICB2YXIgdG9kb0xpc3QgPSBUb0RvTGlzdC5jcmVhdGUoe3RvZG9zOiBbCi0gICAg
ICAgICAgICAgICAgeyBuYW1lOiAnVW5pdCBUZXN0JywgcHJpb3JpdHk6IDIgfSwKLSAgICAgICAg
ICAgICAgICB7IG5hbWU6ICdEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6IDMgfSwKLSAgICAgICAg
ICAgICAgICB7IG5hbWU6ICdSZWxlYXNlJywgcHJpb3JpdHk6IDEgfQotICAgICAgICAgICAgICBd
fSk7Ci0KLSAgICAgICAgICAgICAgdG9kb0xpc3QuZ2V0KCdzb3J0ZWRUb2RvcycpOyAgICAgIC8v
IFt7IG5hbWU6J0RvY3VtZW50YXRpb24nLCBwcmlvcml0eTozIH0sIHsgbmFtZTonUmVsZWFzZScs
IHByaW9yaXR5OjEgfSwgeyBuYW1lOidVbml0IFRlc3QnLCBwcmlvcml0eToyIH1dCi0gICAgICAg
ICAgICAgIHRvZG9MaXN0LmdldCgnc29ydGVkVG9kb3NEZXNjJyk7ICAvLyBbeyBuYW1lOidVbml0
IFRlc3QnLCBwcmlvcml0eToyIH0sIHsgbmFtZTonUmVsZWFzZScsIHByaW9yaXR5OjEgfSwgeyBu
YW1lOidEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6MyB9XQotICAgICAgICAgICAgICB0b2RvTGlz
dC5nZXQoJ3ByaW9yaXR5VG9kb3MnKTsgICAgLy8gW3sgbmFtZTonUmVsZWFzZScsIHByaW9yaXR5
OjEgfSwgeyBuYW1lOidVbml0IFRlc3QnLCBwcmlvcml0eToyIH0sIHsgbmFtZTonRG9jdW1lbnRh
dGlvbicsIHByaW9yaXR5OjMgfV0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QG1ldGhvZCBjb21wdXRlZC5zb3J0Ci0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgICAgICAgICAgICBAcGFyYW0g
e1N0cmluZyBvciBGdW5jdGlvbn0gc29ydERlZmluaXRpb24gYSBkZXBlbmRlbnQga2V5IHRvIGFu
Ci0gICAgICAgICAgICAgIGFycmF5IG9mIHNvcnQgcHJvcGVydGllcyAoYWRkIGA6ZGVzY2AgdG8g
dGhlIGFycmF5cyBzb3J0IHByb3BlcnRpZXMgdG8gc29ydCBkZXNjZW5kaW5nKSBvciBhIGZ1bmN0
aW9uIHRvIHVzZSB3aGVuIHNvcnRpbmcKLSAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQ29t
cHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgc29ydGVkIGFycmF5IGJhc2VkCi0gICAgICAg
ICAgICAgIG9uIHRoZSBzb3J0IHByb3BlcnR5IGFycmF5IG9yIGNhbGxiYWNrIGZ1bmN0aW9uCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBzb3J0KGl0ZW1zS2V5LCBzb3J0RGVmaW5p
dGlvbikgewotICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJFbWJlci5jb21wdXRlZC5zb3J0IHJl
cXVpcmVzIHR3byBhcmd1bWVudHM6IGFuIGFycmF5IGtleSB0byBzb3J0IGFuZCBlaXRoZXIgYSBz
b3J0IHByb3BlcnRpZXMga2V5IG9yIHNvcnQgZnVuY3Rpb24iLCBhcmd1bWVudHMubGVuZ3RoID09
PSAyKTsKLQotICAgICAgICAgICAgdmFyIGluaXRGbiwgc29ydFByb3BlcnRpZXNLZXk7Ci0KLSAg
ICAgICAgICAgIGlmICh0eXBlb2Ygc29ydERlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHsKLSAg
ICAgICAgICAgICAgICBpbml0Rm4gPSBmdW5jdGlvbiAoYXJyYXksIGNoYW5nZU1ldGEsIGluc3Rh
bmNlTWV0YSkgewotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZU1ldGEub3JkZXIgPSBzb3J0
RGVmaW5pdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VNZXRhLmJpbmFyeVNlYXJj
aCA9IGJpbmFyeVNlYXJjaDsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzb3J0UHJvcGVydGllc0tleSA9IHNvcnREZWZpbml0aW9uOwot
ICAgICAgICAgICAgICAgIGluaXRGbiA9IGZ1bmN0aW9uIChhcnJheSwgY2hhbmdlTWV0YSwgaW5z
dGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwU29ydFByb3Bl
cnRpZXMoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29ydFByb3BlcnR5RGVmaW5p
dGlvbnMgPSBnZXQodGhpcywgc29ydFByb3BlcnRpZXNLZXkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc29ydFByb3BlcnR5LAotICAgICAgICAgICAgICAgICAgICAgICAgc29ydFByb3BlcnRp
ZXMgPSBpbnN0YW5jZU1ldGEuc29ydFByb3BlcnRpZXMgPSBbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNvcnRQcm9wZXJ0eUFzY2VuZGluZyA9IGluc3RhbmNlTWV0YS5zb3J0UHJvcGVydHlB
c2NlbmRpbmcgPSB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkeCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFzYzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJDYW5ub3Qgc29ydDogJyIgKyBzb3J0UHJvcGVydGllc0tleSArICInIGlzIG5vdCBhbiBhcnJh
eS4iLCBpc0FycmF5KHNvcnRQcm9wZXJ0eURlZmluaXRpb25zKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZU1ldGEucHJvcGVydHkuY2xlYXJJdGVtUHJvcGVydHlLZXlzKGl0ZW1z
S2V5KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChzb3J0UHJvcGVydHlEZWZp
bml0aW9ucywgZnVuY3Rpb24gKHNvcnRQcm9wZXJ0eURlZmluaXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGlkeCA9IHNvcnRQcm9wZXJ0eURlZmluaXRpb24uaW5kZXhP
ZignOicpKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydFBy
b3BlcnR5ID0gc29ydFByb3BlcnR5RGVmaW5pdGlvbi5zdWJzdHJpbmcoMCwgaWR4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gc29ydFByb3BlcnR5RGVmaW5pdGlvbi5z
dWJzdHJpbmcoaWR4ICsgMSkudG9Mb3dlckNhc2UoKSAhPT0gJ2Rlc2MnOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvcnRQcm9wZXJ0eSA9IHNvcnRQcm9wZXJ0eURlZmluaXRpb247Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzYyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXMucHVzaChzb3J0
UHJvcGVydHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRQcm9wZXJ0eUFzY2Vu
ZGluZ1tzb3J0UHJvcGVydHldID0gYXNjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZU1ldGEucHJvcGVydHkuaXRlbVByb3BlcnR5S2V5KGl0ZW1zS2V5LCBzb3J0UHJvcGVydHkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHNvcnRQcm9wZXJ0eURlZmluaXRpb25zLmFkZE9ic2VydmVyKCdAZWFjaCcsIHRoaXMsIHVwZGF0
ZVNvcnRQcm9wZXJ0aWVzT25jZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVTb3J0UHJvcGVydGllc09uY2UoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBydW4ub25jZSh0aGlzLCB1cGRhdGVTb3J0UHJvcGVydGllcywgY2hh
bmdlTWV0YS5wcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlU29ydFByb3BlcnRpZXMocHJvcGVydHlOYW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR1cFNvcnRQcm9wZXJ0aWVzLmNhbGwodGhpcyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNZXRhLnByb3BlcnR5LnJlY29tcHV0ZU9u
Y2UuY2FsbCh0aGlzLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIodGhpcywgc29ydFByb3BlcnRpZXNLZXksIHVw
ZGF0ZVNvcnRQcm9wZXJ0aWVzT25jZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2V0dXBTb3J0
UHJvcGVydGllcy5jYWxsKHRoaXMpOwotCi0KLSAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VN
ZXRhLm9yZGVyID0gZnVuY3Rpb24gKGl0ZW1BLCBpdGVtQikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGlzUHJveHkgPSBpdGVtQiBpbnN0YW5jZW9mIFNlYXJjaFByb3h5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgc29ydFByb3BlcnR5LCByZXN1bHQsIGFzYzsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNvcnRQcm9wZXJ0aWVzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydFByb3BlcnR5ID0g
dGhpcy5zb3J0UHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBjb21wYXJlKGdldChpdGVtQSwgc29ydFByb3BlcnR5KSwgaXNQcm94eSA/IGl0ZW1CW3Nv
cnRQcm9wZXJ0eV0gOiBnZXQoaXRlbUIsIHNvcnRQcm9wZXJ0eSkpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc2MgPSB0aGlzLnNvcnRQcm9wZXJ0eUFzY2VuZGluZ1tzb3J0UHJvcGVydHld
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXNjID8gcmVzdWx0IDog
KC0xICogcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlTWV0YS5i
aW5hcnlTZWFyY2ggPSBiaW5hcnlTZWFyY2g7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGFycmF5Q29tcHV0ZWQoaXRlbXNLZXksIHsKLSAg
ICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0Rm4sCi0KLSAgICAgICAgICAgICAgICBhZGRl
ZEl0ZW06IGZ1bmN0aW9uIChhcnJheSwgaXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGluc3RhbmNlTWV0YS5iaW5hcnlTZWFy
Y2goYXJyYXksIGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcnJheS5pbnNlcnRBdChpbmRl
eCwgaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW06IGZ1bmN0aW9uIChhcnJheSwg
aXRlbSwgY2hhbmdlTWV0YSwgaW5zdGFuY2VNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBwcm94eVByb3BlcnRpZXMsIGluZGV4LCBzZWFyY2hJdGVtOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaGFuZ2VNZXRhLnByZXZpb3VzVmFsdWVzKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm94eVByb3BlcnRpZXMgPSBtZXJnZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGVudDogaXRlbSAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNoYW5nZU1ldGEu
cHJldmlvdXNWYWx1ZXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJdGVtID0g
U2VhcmNoUHJveHkuY3JlYXRlKHByb3h5UHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJdGVtID0gaXRlbTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5zdGFu
Y2VNZXRhLmJpbmFyeVNlYXJjaChhcnJheSwgc2VhcmNoSXRlbSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGFycmF5LnJlbW92ZUF0KGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uc29ydCA9IHNvcnQ7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJl
ci1ydW50aW1lL2NvbnRyb2xsZXJzL2FycmF5X2NvbnRyb2xsZXIiLAotICAgIFsiZW1iZXItbWV0
YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfc2V0IiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItcnVudGltZS9z
eXN0ZW0vYXJyYXlfcHJveHkiLCAiZW1iZXItcnVudGltZS9taXhpbnMvc29ydGFibGUiLCAiZW1i
ZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJl
bWJlci1tZXRhbC9lcnJvciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5
MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBf
X2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVu
ZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAg
ICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAgICB2
YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9
IF9fZGVwZW5kZW5jeTJfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18u
c2V0OwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTRfXy5mb3JFYWNoOwotICAg
ICAgICB2YXIgcmVwbGFjZSA9IF9fZGVwZW5kZW5jeTRfXy5yZXBsYWNlOwotICAgICAgICB2YXIg
QXJyYXlQcm94eSA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgU29y
dGFibGVNaXhpbiA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgQ29u
dHJvbGxlck1peGluID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBj
b21wdXRlZCA9IF9fZGVwZW5kZW5jeThfXy5jb21wdXRlZDsKLSAgICAgICAgdmFyIEVtYmVyRXJy
b3IgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLQotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBgRW1iZXIuQXJyYXlDb250cm9sbGVyYCBwcm92aWRlcyBhIHdheSBmb3IgeW91IHRv
IHB1Ymxpc2ggYSBjb2xsZWN0aW9uIG9mCi0gICAgICAgICAgICAgIG9iamVjdHMgc28gdGhhdCB5
b3UgY2FuIGVhc2lseSBiaW5kIHRvIHRoZSBjb2xsZWN0aW9uIGZyb20gYSBIYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIGAjZWFjaGAgaGVscGVyLCBhbiBgRW1iZXIuQ29sbGVjdGlvblZpZXdgLCBv
ciBvdGhlciBjb250cm9sbGVycy4KLQotICAgICAgICAgICAgICBUaGUgYWR2YW50YWdlIG9mIHVz
aW5nIGFuIGBBcnJheUNvbnRyb2xsZXJgIGlzIHRoYXQgeW91IG9ubHkgaGF2ZSB0byBzZXQgdXAK
LSAgICAgICAgICAgICAgeW91ciB2aWV3IGJpbmRpbmdzIG9uY2U7IHRvIGNoYW5nZSB3aGF0J3Mg
ZGlzcGxheWVkLCBzaW1wbHkgc3dhcCBvdXQgdGhlCi0gICAgICAgICAgICAgIGBtb2RlbGAgcHJv
cGVydHkgb24gdGhlIGNvbnRyb2xsZXIuCi0KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlt
YWdpbmUgeW91IHdhbnRlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBpdGVtcyBmZXRjaGVkIHZpYSBh
biBYSFIKLSAgICAgICAgICAgICAgcmVxdWVzdC4gQ3JlYXRlIGFuIGBFbWJlci5BcnJheUNvbnRy
b2xsZXJgIGFuZCBzZXQgaXRzIGBtb2RlbGAgcHJvcGVydHk6Ci0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICBNeUFwcC5saXN0Q29udHJvbGxlciA9IEVtYmVyLkFy
cmF5Q29udHJvbGxlci5jcmVhdGUoKTsKLQotICAgICAgICAgICAgICAkLmdldCgncGVvcGxlLmpz
b24nLCBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAgICAgICAgTXlBcHAubGlzdENvbnRyb2xs
ZXIuc2V0KCdtb2RlbCcsIGRhdGEpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgVGhlbiwgY3JlYXRlIGEgdmlldyB0aGF0IGJpbmRzIHRvIHlv
dXIgbmV3IGNvbnRyb2xsZXI6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICB7eyNlYWNoIE15QXBwLmxpc3RDb250cm9sbGVyfX0KLSAgICAgICAgICAgICAgICB7
e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fQotICAgICAgICAgICAgICB7ey9lYWNofX0KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGFyZSBiaW5kaW5nIHRv
IHRoZSBjb250cm9sbGVyLCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb250cm9sbGVyCi0gICAgICAg
ICAgICAgIGlzIHRvIHBhc3MgdGhyb3VnaCBhbnkgbWV0aG9kcyBvciBwcm9wZXJ0aWVzIHRvIHRo
ZSB1bmRlcmx5aW5nIGFycmF5LiBUaGlzCi0gICAgICAgICAgICAgIGNhcGFiaWxpdHkgY29tZXMg
ZnJvbSBgRW1iZXIuQXJyYXlQcm94eWAsIHdoaWNoIHRoaXMgY2xhc3MgaW5oZXJpdHMgZnJvbS4K
LQotICAgICAgICAgICAgICBTb21ldGltZXMgeW91IHdhbnQgdG8gZGlzcGxheSBjb21wdXRlZCBw
cm9wZXJ0aWVzIHdpdGhpbiB0aGUgYm9keSBvZiBhbgotICAgICAgICAgICAgICBgI2VhY2hgIGhl
bHBlciB0aGF0IGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyBpdGVtcyBpbiBgbW9kZWxgLCBidXQg
YXJlIG5vdAotICAgICAgICAgICAgICBwcmVzZW50IG9uIHRob3NlIGl0ZW1zLiAgIFRvIGRvIHRo
aXMsIHNldCBgaXRlbUNvbnRyb2xsZXJgIHRvIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgICAgICAg
Y29udHJvbGxlciAocHJvYmFibHkgYW4gYE9iamVjdENvbnRyb2xsZXJgKSB0aGF0IHdpbGwgd3Jh
cCBlYWNoIGluZGl2aWR1YWwgaXRlbS4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKLQot
ICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAgICAgICAgICAgICAge3sjZWFjaCBwb3N0
IGluIGNvbnRyb2xsZXJ9fQotICAgICAgICAgICAgICAgICAgPGxpPnt7cG9zdC50aXRsZX19ICh7
e3Bvc3QudGl0bGVMZW5ndGh9fSBjaGFyYWN0ZXJzKTwvbGk+Ci0gICAgICAgICAgICAgICAge3sv
ZWFjaH19Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgQXBwLlBvc3RzQ29udHJvbGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxl
ci5leHRlbmQoewotICAgICAgICAgICAgICAgIGl0ZW1Db250cm9sbGVyOiAncG9zdCcKLSAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgQXBwLlBvc3RDb250cm9sbGVyID0gRW1iZXIu
T2JqZWN0Q29udHJvbGxlci5leHRlbmQoewotICAgICAgICAgICAgICAgIC8vIHRoZSBgdGl0bGVg
IHByb3BlcnR5IHdpbGwgYmUgcHJveGllZCB0byB0aGUgdW5kZXJseWluZyBwb3N0LgotCi0gICAg
ICAgICAgICAgICAgdGl0bGVMZW5ndGg6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZ2V0KCd0aXRsZScpLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9LnByb3Bl
cnR5KCd0aXRsZScpCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBJbiBzb21lIGNhc2VzIGl0IGlzIGhlbHBmdWwgdG8gcmV0dXJuIGEgZGlmZmVy
ZW50IGBpdGVtQ29udHJvbGxlcmAgZGVwZW5kaW5nCi0gICAgICAgICAgICAgIG9uIHRoZSBwYXJ0
aWN1bGFyIGl0ZW0uICBTdWJjbGFzc2VzIGNhbiBkbyB0aGlzIGJ5IG92ZXJyaWRpbmcKLSAgICAg
ICAgICAgICAgYGxvb2t1cEl0ZW1Db250cm9sbGVyYC4KLQotICAgICAgICAgICAgICBGb3IgZXhh
bXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFwcC5N
eUFycmF5Q29udHJvbGxlciA9IEVtYmVyLkFycmF5Q29udHJvbGxlci5leHRlbmQoewotICAgICAg
ICAgICAgICAgIGxvb2t1cEl0ZW1Db250cm9sbGVyOiBmdW5jdGlvbiggb2JqZWN0ICkgewotICAg
ICAgICAgICAgICAgICAgaWYgKG9iamVjdC5nZXQoJ2lzU3BlY2lhbCcpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAic3BlY2lhbCI7IC8vIHVzZSBBcHAuU3BlY2lhbENvbnRyb2xsZXIK
LSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAi
cmVndWxhciI7IC8vIHVzZSBBcHAuUmVndWxhckNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBUaGUgaXRlbUNvbnRyb2xsZXIgaW5zdGFuY2VzIHdpbGwgaGF2
ZSBhIGBwYXJlbnRDb250cm9sbGVyYCBwcm9wZXJ0eSBzZXQgdG8KLSAgICAgICAgICAgICAgdGhl
IGBBcnJheUNvbnRyb2xsZXJgIGluc3RhbmNlLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBBcnJh
eUNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAg
ICBAZXh0ZW5kcyBFbWJlci5BcnJheVByb3h5Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLlNv
cnRhYmxlTWl4aW4KLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuQ29udHJvbGxlck1peGluCi0g
ICAgICAgICAgICAqLwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBBcnJheVBy
b3h5LmV4dGVuZChDb250cm9sbGVyTWl4aW4sIFNvcnRhYmxlTWl4aW4sIHsKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjb250cm9sbGVyIHVzZWQgdG8gd3JhcCBp
dGVtcywgaWYgYW55LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpdGVtQ29udHJv
bGxlcgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAg
ICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGl0ZW1D
b250cm9sbGVyOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
UmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHRvIHdyYXAgaXRlbXMsIG9yIGBudWxs
YCBpZiBpdGVtcyBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgYmUgcmV0dXJuZWQgZGlyZWN0
bHkuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgcmV0dXJucyB0aGUKLSAgICAg
ICAgICAgICAgICAgICAgYGl0ZW1Db250cm9sbGVyYCBwcm9wZXJ0eSwgYnV0IHN1YmNsYXNzZXMg
Y2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybgotICAgICAgICAgICAgICAgICAgICBk
aWZmZXJlbnQgY29udHJvbGxlcnMgZm9yIGRpZmZlcmVudCBvYmplY3RzLgotCi0gICAgICAgICAg
ICAgICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgQXBwLk15QXJyYXlDb250cm9sbGVyID0gRW1iZXIuQXJy
YXlDb250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbG9va3VwSXRlbUNv
bnRyb2xsZXI6IGZ1bmN0aW9uKCBvYmplY3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob2JqZWN0LmdldCgnaXNTcGVjaWFsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJzcGVjaWFsIjsgLy8gdXNlIEFwcC5TcGVjaWFsQ29udHJvbGxlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJyZWd1bGFyIjsgLy8gdXNlIEFwcC5SZWd1bGFyQ29udHJvbGxlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgbG9va3VwSXRlbUNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmpl
Y3R9IG9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9va3VwSXRlbUNvbnRyb2xsZXI6IGZ1bmN0aW9u
KG9iamVjdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1Db250cm9s
bGVyJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBvYmplY3RBdENvbnRlbnQ6IGZ1
bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBnZXQodGhpcywgJ2xl
bmd0aCcpOwotICAgICAgICAgICAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQgPSBnZXQodGhpcywg
J2FycmFuZ2VkQ29udGVudCcpOwotICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBhcnJhbmdl
ZENvbnRlbnQgJiYgYXJyYW5nZWRDb250ZW50Lm9iamVjdEF0KGlkeCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNvbnRyb2xsZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGlmIChpZHggPj0gMCAm
JiBpZHggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlckNsYXNzID0g
dGhpcy5sb29rdXBJdGVtQ29udHJvbGxlcihvYmplY3QpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoY29udHJvbGxlckNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5jb250cm9sbGVyQXQoaWR4LCBvYmplY3QsIGNvbnRyb2xsZXJDbGFzcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXaGVu
IGBjb250cm9sbGVyQ2xhc3NgIGlzIGZhbHN5LCB3ZSBoYXZlIG5vdCBvcHRlZCBpbiB0byB1c2lu
ZyBpdGVtCi0gICAgICAgICAgICAgICAgLy8gY29udHJvbGxlcnMsIHNvIHJldHVybiB0aGUgb2Jq
ZWN0IGRpcmVjdGx5LgotCi0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaW5kZXggaXMgb3V0
IG9mIHJhbmdlLCB3ZSB3YW50IHRvIHJldHVybiB0aGUgIm91dCBvZiByYW5nZSIKLSAgICAgICAg
ICAgICAgICAvLyB2YWx1ZSwgd2hhdGV2ZXIgdGhhdCBtaWdodCBiZS4gIFJhdGhlciB0aGFuIG1h
a2UgYXNzdW1wdGlvbnMKLSAgICAgICAgICAgICAgICAvLyAoZS5nLiBndWVzc2luZyBgbnVsbGAg
b3IgYHVuZGVmaW5lZGApIHdlIGRlZmVyIHRoaXMgdG8gYGFycmFuZ2VkQ29udGVudGAuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGFycmFuZ2VkQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFN1YkNvbnRyb2xsZXJz
KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhcnJheUNvbnRlbnREaWRDaGFuZ2U6
IGZ1bmN0aW9uKGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgc3ViQ29udHJvbGxlcnMgPSB0aGlzLl9zdWJDb250cm9sbGVyczsKLQotICAgICAgICAgICAg
ICAgIGlmIChzdWJDb250cm9sbGVycy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHN1YkNvbnRyb2xsZXJzVG9SZW1vdmUgPSBzdWJDb250cm9sbGVycy5zbGljZShpZHgsIGlkeCAr
IHJlbW92ZWRDbnQpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvckVhY2goc3ViQ29udHJvbGxl
cnNUb1JlbW92ZSwgZnVuY3Rpb24oc3ViQ29udHJvbGxlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN1YkNvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJDb250cm9sbGVyLmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShzdWJDb250
cm9sbGVycywgaWR4LCByZW1vdmVkQ250LCBuZXcgQXJyYXkoYWRkZWRDbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgc2hhZG93IGFycmF5IG9mIHN1YmNv
bnRyb2xsZXJzIG11c3QgYmUgdXBkYXRlZCBiZWZvcmUgd2UgdHJpZ2dlcgotICAgICAgICAgICAg
ICAgIC8vIG9ic2VydmVycywgb3RoZXJ3aXNlIG9ic2VydmVycyB3aWxsIGdldCB0aGUgd3Jvbmcg
c3ViY29udGFpbmVyIHdoZW4KLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIGBvYmplY3RBdGAK
LSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcihpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250KTsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3ViQ29udHJv
bGxlcnMgPSBbXTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIG1vZGVsOiBjb21wdXRl
ZChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLkEoKTsKLSAgICAg
ICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAqIEZsYWcg
dG8gbWFyayBhcyBiZWluZyAidmlydHVhbCIuIFVzZWQgdG8ga2VlcCB0aGlzIGluc3RhbmNlCi0g
ICAgICAgICAgICAgICAgICAgKiBmcm9tIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHBhcmVudENvbnRy
b2xsZXIgaGllcmFyY2h5LgotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAg
ICAqIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgKiBAcHJvcGVydHkgX2lzVmlydHVhbAot
ICAgICAgICAgICAgICAgICAgICogQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBfaXNWaXJ0dWFsOiBmYWxzZSwKLQotICAgICAgICAgICAgY29udHJvbGxl
ckF0OiBmdW5jdGlvbihpZHgsIG9iamVjdCwgY29udHJvbGxlckNsYXNzKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGZ1bGxOYW1lLCBzdWJDb250cm9sbGVyLCBwYXJlbnRDb250cm9sbGVyOwotCi0g
ICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGdldCh0aGlzLCAnY29udGFpbmVyJyk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHN1YkNvbnRyb2xsZXJzID0gdGhpcy5fc3ViQ29udHJvbGxlcnM7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3ViQ29udHJvbGxlcnMubGVuZ3RoID4gaWR4KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1YkNvbnRyb2xsZXIgPSBzdWJDb250cm9sbGVyc1tpZHhdOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdWJDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3ViQ29udHJvbGxlcjsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZ1bGxOYW1lID0gJ2NvbnRyb2xs
ZXI6JyArIGNvbnRyb2xsZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVy
LmhhcyhmdWxsTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJy
b3IoJ0NvdWxkIG5vdCByZXNvbHZlIGl0ZW1Db250cm9sbGVyOiAiJyArIGNvbnRyb2xsZXJDbGFz
cyArICciJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2lzVmlydHVhbCkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250cm9sbGVyID0gZ2V0
KHRoaXMsICdwYXJlbnRDb250cm9sbGVyJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGFyZW50Q29udHJvbGxlciA9IHRoaXM7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgc3ViQ29udHJvbGxlciA9IGNvbnRhaW5lci5sb29rdXBG
YWN0b3J5KGZ1bGxOYW1lKS5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHBh
cmVudENvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXI6IHBh
cmVudENvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgICAgIG1vZGVsOiBvYmplY3QKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHN1YkNvbnRyb2xsZXJzW2lkeF0gPSBz
dWJDb250cm9sbGVyOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN1YkNvbnRyb2xsZXI7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfc3ViQ29udHJvbGxlcnM6IG51bGwsCi0KLSAg
ICAgICAgICAgIF9yZXNldFN1YkNvbnRyb2xsZXJzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29udHJvbGxlcjsKLSAgICAgICAgICAgICAgICB2YXIgc3ViQ29udHJvbGxlcnMg
PSB0aGlzLl9zdWJDb250cm9sbGVyczsKLQotICAgICAgICAgICAgICAgIGlmIChzdWJDb250cm9s
bGVycy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0
aCA9IHN1YkNvbnRyb2xsZXJzLmxlbmd0aDsgbGVuZ3RoID4gaTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVyID0gc3ViQ29udHJvbGxlcnNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29udHJvbGxlcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuZGVzdHJveSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3ViQ29udHJvbGxlcnMu
bGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVz
ZXRTdWJDb250cm9sbGVycygpOwotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGlt
ZS9jb250cm9sbGVycy9jb250cm9sbGVyIiwKLSAgICBbImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29i
amVjdCIsICJlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyIiwgImV4cG9ydHMiXSwKLSAg
ICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5
Ml9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVy
Ci0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBjbGFzcyBDb250cm9sbGVyCi0gICAgICAgICAg
ICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0
Ci0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLkNvbnRyb2xsZXJNaXhpbgotICAgICAgICAgICAg
Ki8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyT2JqZWN0LmV4dGVuZChN
aXhpbik7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL29i
amVjdF9jb250cm9sbGVyIiwKLSAgICBbImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIi
LCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0X3Byb3h5IiwgImV4cG9ydHMiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgQ29udHJvbGxlck1peGluID0gX19k
ZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBPYmplY3RQcm94eSA9IF9fZGVw
ZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVs
ZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAg
ICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgRW1iZXIuT2JqZWN0Q29udHJvbGxl
cmAgaXMgcGFydCBvZiBFbWJlcidzIENvbnRyb2xsZXIgbGF5ZXIuIEl0IGlzIGludGVuZGVkCi0g
ICAgICAgICAgICAgIHRvIHdyYXAgYSBzaW5nbGUgb2JqZWN0LCBwcm94eWluZyB1bmhhbmRsZWQg
YXR0ZW1wdHMgdG8gYGdldGAgYW5kIGBzZXRgIHRvIHRoZSB1bmRlcmx5aW5nCi0gICAgICAgICAg
ICAgIG1vZGVsIG9iamVjdCwgYW5kIHRvIGZvcndhcmQgdW5oYW5kbGVkIGFjdGlvbiBhdHRlbXB0
cyB0byBpdHMgYHRhcmdldGAuCi0KLSAgICAgICAgICAgICAgYEVtYmVyLk9iamVjdENvbnRyb2xs
ZXJgIGRlcml2ZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGZyb20gaXRzIHN1cGVyY2xhc3MKLSAgICAg
ICAgICAgICAgYEVtYmVyLk9iamVjdFByb3h5YCBhbmQgdGhlIGBFbWJlci5Db250cm9sbGVyTWl4
aW5gIG1peGluLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBPYmplY3RDb250cm9sbGVyCi0gICAg
ICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIu
T2JqZWN0UHJveHkKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuQ29udHJvbGxlck1peGluCi0g
ICAgICAgICAgICAqKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE9iamVjdFBy
b3h5LmV4dGVuZChDb250cm9sbGVyTWl4aW4pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXIt
cnVudGltZS9jb3B5IiwKLSAgICBbImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1i
ZXItbWV0YWwvdXRpbHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1
bnRpbWUvbWl4aW5zL2NvcHlhYmxlIiwgImVtYmVyLW1ldGFsL3BsYXRmb3JtIiwgImV4cG9ydHMi
XSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBl
bmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18p
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5k
ZW5jeTFfXy5pbmRleE9mOwotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBlbmRlbmN5Ml9fLnR5
cGVPZjsKLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0
Il07Ci0gICAgICAgIHZhciBDb3B5YWJsZSA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5NV9fLmNyZWF0ZTsKLQotICAgICAgICBm
dW5jdGlvbiBfY29weShvYmosIGRlZXAsIHNlZW4sIGNvcGllcykgewotICAgICAgICAgICAgdmFy
IHJldCwgbG9jLCBrZXk7Ci0KLSAgICAgICAgICAgIC8vIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGFy
ZSBpbW11dGFibGUsIGp1c3QgcmV0dXJuIHRoZW0uCi0gICAgICAgICAgICBpZiAoJ29iamVjdCcg
IT09IHR5cGVvZiBvYmogfHwgb2JqID09PSBudWxsKSAKLSAgICAgICAgICAgICAgICByZXR1cm4g
b2JqOwotCi0gICAgICAgICAgICAvLyBhdm9pZCBjeWNsaWNhbCBsb29wcwotICAgICAgICAgICAg
aWYgKGRlZXAgJiYgKGxvYyA9IGluZGV4T2Yoc2Vlbiwgb2JqKSkgPj0gMCkgCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNvcGllc1tsb2NdOwotCi0gICAgICAgICAgICBFbWJlci5hc3NlcnQoJ0Nh
bm5vdCBjbG9uZSBhbiBFbWJlci5PYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgRW1iZXIu
Q29weWFibGUnLCAhKG9iaiBpbnN0YW5jZW9mIEVtYmVyT2JqZWN0KSB8fCAoQ29weWFibGUgJiYg
Q29weWFibGUuZGV0ZWN0KG9iaikpKTsKLQotICAgICAgICAgICAgLy8gSU1QT1JUQU5UOiB0aGlz
IHNwZWNpZmljIHRlc3Qgd2lsbCBkZXRlY3QgYSBuYXRpdmUgYXJyYXkgb25seS4gQW55IG90aGVy
Ci0gICAgICAgICAgICAvLyBvYmplY3Qgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBDb3B5YWJsZS4K
LSAgICAgICAgICAgIGlmICh0eXBlT2Yob2JqKSA9PT0gJ2FycmF5JykgewotICAgICAgICAgICAg
ICAgIHJldCA9IG9iai5zbGljZSgpOwotICAgICAgICAgICAgICAgIGlmIChkZWVwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxvYyA9IHJldC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlICgtLWxvYyA+PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldFtsb2NdID0gX2Nv
cHkocmV0W2xvY10sIGRlZXAsIHNlZW4sIGNvcGllcyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIGlmIChDb3B5YWJsZSAmJiBDb3B5YWJsZS5kZXRlY3Qob2JqKSkgewot
ICAgICAgICAgICAgICAgIHJldCA9IG9iai5jb3B5KGRlZXAsIHNlZW4sIGNvcGllcyk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHsKLSAgICAgICAgICAgICAg
ICByZXQgPSBuZXcgRGF0ZShvYmouZ2V0VGltZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcmV0ID0ge307Ci0gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gb2Jq
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFByZXZlbnRzIGJyb3dzZXJzIHRoYXQgZG9uJ3QgcmVzcGVjdCBub24tZW51bWVyYWJp
bGl0eSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3B5aW5nIGludGVybmFsIEVt
YmVyIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3Vic3RyaW5n
KDAsIDIpID09PSAnX18nKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gZGVlcCA/IF9jb3B5KG9i
altrZXldLCBkZWVwLCBzZWVuLCBjb3BpZXMpIDogb2JqW2tleV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVlcCkgewotICAgICAgICAgICAg
ICAgIHNlZW4ucHVzaChvYmopOwotICAgICAgICAgICAgICAgIGNvcGllcy5wdXNoKHJldCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBwYXNzZWQgb2Jq
ZWN0LiBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIGp1c3QgYWJvdXQKLSAgICAgICAgICAgICAgYW55
IHR5cGUgb2Ygb2JqZWN0IGFuZCBjcmVhdGUgYSBjbG9uZSBvZiBpdCwgaW5jbHVkaW5nIHByaW1p
dGl2ZSB2YWx1ZXMKLSAgICAgICAgICAgICAgKHdoaWNoIGFyZSBub3QgYWN0dWFsbHkgY2xvbmVk
IGJlY2F1c2UgdGhleSBhcmUgaW1tdXRhYmxlKS4KLQotICAgICAgICAgICAgICBJZiB0aGUgcGFz
c2VkIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBgY2xvbmUoKWAgbWV0aG9kLCB0aGVuIHRoaXMgZnVu
Y3Rpb24KLSAgICAgICAgICAgICAgd2lsbCBzaW1wbHkgY2FsbCB0aGF0IG1ldGhvZCBhbmQgcmV0
dXJuIHRoZSByZXN1bHQuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjb3B5Ci0gICAgICAgICAg
ICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2Jq
ZWN0IHRvIGNsb25lCi0gICAgICAgICAgICAgIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcCBJZiB0cnVl
LCBhIGRlZXAgY29weSBvZiB0aGUgb2JqZWN0IGlzIG1hZGUKLSAgICAgICAgICAgICAgQHJldHVy
biB7T2JqZWN0fSBUaGUgY2xvbmVkIG9iamVjdAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IGZ1bmN0aW9uIGNvcHkob2JqLCBkZWVwKSB7Ci0gICAgICAg
ICAgICAvLyBmYXN0IHBhdGhzCi0gICAgICAgICAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBv
YmogfHwgb2JqID09PSBudWxsKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqOyAvLyBjYW4n
dCBjb3B5IHByaW1pdGl2ZXMKLSAgICAgICAgICAgIGlmIChDb3B5YWJsZSAmJiBDb3B5YWJsZS5k
ZXRlY3Qob2JqKSkgCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5jb3B5KGRlZXApOwotICAg
ICAgICAgICAgcmV0dXJuIF9jb3B5KG9iaiwgZGVlcCwgZGVlcCA/IFtdIDogbnVsbCwgZGVlcCA/
IFtdIDogbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRp
bWUvY29yZSIsCi0gICAgWyJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsK
LSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUg
ZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAg
Ki8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQ29tcGFyZXMgdHdvIG9iamVjdHMsIHJl
dHVybmluZyB0cnVlIGlmIHRoZXkgYXJlIGxvZ2ljYWxseSBlcXVhbC4gVGhpcyBpcwotICAgICAg
ICAgICAgICBhIGRlZXBlciBjb21wYXJpc29uIHRoYW4gYSBzaW1wbGUgdHJpcGxlIGVxdWFsLiBG
b3Igc2V0cyBpdCB3aWxsIGNvbXBhcmUgdGhlCi0gICAgICAgICAgICAgIGludGVybmFsIG9iamVj
dHMuIEZvciBhbnkgb3RoZXIgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyBgaXNFcXVhbCgpYCBpdCB3
aWxsCi0gICAgICAgICAgICAgIHJlc3BlY3QgdGhhdCBtZXRob2QuCi0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJlci5pc0VxdWFsKCdoZWxsbycsICdoZWxs
bycpOyAgLy8gdHJ1ZQotICAgICAgICAgICAgICBFbWJlci5pc0VxdWFsKDEsIDIpOyAgICAgICAg
ICAgICAgLy8gZmFsc2UKLSAgICAgICAgICAgICAgRW1iZXIuaXNFcXVhbChbNCwgMl0sIFs0LCAy
XSk7ICAgIC8vIGZhbHNlCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBtZXRo
b2QgaXNFcXVhbAotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBhIGZpcnN0IG9iamVjdCB0byBjb21wYXJlCi0gICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSBiIHNlY29uZCBvYmplY3QgdG8gY29tcGFyZQotICAgICAgICAgICAgICBAcmV0
dXJuIHtCb29sZWFufQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIGlzRXF1YWwgPSBmdW5j
dGlvbiBpc0VxdWFsKGEsIGIpIHsKLSAgICAgICAgICAgIGlmIChhICYmICdmdW5jdGlvbicgPT09
IHR5cGVvZiBhLmlzRXF1YWwpIAotICAgICAgICAgICAgICAgIHJldHVybiBhLmlzRXF1YWwoYik7
Ci0gICAgICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGEgPT09IGI7Ci0gICAgICAgIH07Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmlzRXF1YWwgPSBpc0VxdWFsOwotICAgIH0pOwotICAgIGRlZmlu
ZSgiZW1iZXItcnVudGltZS9leHQvZnVuY3Rpb24iLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9leHBhbmRfcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVu
ZGVuY3kzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQot
ICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuRVhURU5EX1BST1RPVFlQRVMsIEVtYmVyLmFzc2Vy
dAotICAgICAgICB2YXIgZXhwYW5kUHJvcGVydGllcyA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVs
dCJdOwotICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kzX18uY29tcHV0ZWQ7Ci0K
LSAgICAgICAgdmFyIGFfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7Ci0gICAgICAgIHZh
ciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTsKLQotICAgICAgICBpZiAo
RW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwgRW1iZXIuRVhURU5EX1BST1RPVFlQ
RVMuRnVuY3Rpb24pIHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRo
ZSBgcHJvcGVydHlgIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3MgRnVuY3Rpb24gcHJvdG90eXBl
IGlzIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICB3aGVuIGBFbWJlci5FWFRFTkRfUFJP
VE9UWVBFU2Agb3IgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uYCBpcwotICAgICAg
ICAgICAgICAgICAgICBgdHJ1ZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgotCi0gICAgICAgICAg
ICAgICAgICAgIENvbXB1dGVkIHByb3BlcnRpZXMgYWxsb3cgeW91IHRvIHRyZWF0IGEgZnVuY3Rp
b24gbGlrZSBhIHByb3BlcnR5OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgICAgICAgTXlBcHAuUHJlc2lkZW50ID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiAnJywKLSAgICAgICAgICAgICAg
ICAgICAgICBsYXN0TmFtZTogICcnLAotCi0gICAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdm
aXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0KCdsYXN0TmFtZScpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWxsIHRoaXMgZmxhZyB0byBtYXJrIHRoZSBmdW5jdGlvbiBhcyBhIHBy
b3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpCi0gICAgICAgICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBwcmVzaWRlbnQgPSBNeUFwcC5Q
cmVzaWRlbnQuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICJCYXJh
Y2siLAotICAgICAgICAgICAgICAgICAgICAgIGxhc3ROYW1lOiAiT2JhbWEiCi0gICAgICAgICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHByZXNpZGVudC5nZXQoJ2Z1bGxO
YW1lJyk7ICAgIC8vICJCYXJhY2sgT2JhbWEiCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIFRyZWF0aW5nIGEgZnVuY3Rpb24gbGlrZSBhIHByb3BlcnR5IGlz
IHVzZWZ1bCBiZWNhdXNlIHRoZXkgY2FuIHdvcmsgd2l0aAotICAgICAgICAgICAgICAgICAgICBi
aW5kaW5ncywganVzdCBsaWtlIGFueSBvdGhlciBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAg
ICAgICBNYW55IGNvbXB1dGVkIHByb3BlcnRpZXMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIg
cHJvcGVydGllcy4gRm9yCi0gICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsIGluIHRoZSBhYm92
ZSBleGFtcGxlLCB0aGUgYGZ1bGxOYW1lYCBwcm9wZXJ0eSBkZXBlbmRzIG9uCi0gICAgICAgICAg
ICAgICAgICAgIGBmaXJzdE5hbWVgIGFuZCBgbGFzdE5hbWVgIHRvIGRldGVybWluZSBpdHMgdmFs
dWUuIFlvdSBjYW4gdGVsbCBFbWJlcgotICAgICAgICAgICAgICAgICAgICBhYm91dCB0aGVzZSBk
ZXBlbmRlbmNpZXMgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgICAgICAgTXlBcHAuUHJlc2lkZW50ID0gRW1iZXIuT2JqZWN0LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiAnJywKLSAgICAgICAgICAg
ICAgICAgICAgICBsYXN0TmFtZTogICcnLAotCi0gICAgICAgICAgICAgICAgICAgICAgZnVsbE5h
bWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0
KCdmaXJzdE5hbWUnKSArICcgJyArIHRoaXMuZ2V0KCdsYXN0TmFtZScpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUZWxsIEVtYmVyLmpzIHRoYXQgdGhpcyBjb21wdXRlZCBwcm9wZXJ0
eSBkZXBlbmRzIG9uIGZpcnN0TmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGxh
c3ROYW1lCi0gICAgICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xh
c3ROYW1lJykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3UgbGlzdCB0aGVzZSBkZXBlbmRl
bmNpZXMgc28gRW1iZXIga25vd3Mgd2hlbiB0byB1cGRhdGUKLSAgICAgICAgICAgICAgICAgICAg
YmluZGluZ3MgdGhhdCBjb25uZWN0IHRvIGEgY29tcHV0ZWQgcHJvcGVydHkuIENoYW5naW5nIGEg
ZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBpbW1lZGlhdGVseSB0cmln
Z2VyIGFuIHVwZGF0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHksIGJ1dAotICAgICAgICAgICAg
ICAgICAgICB3aWxsIGluc3RlYWQgY2xlYXIgdGhlIGNhY2hlIHNvIHRoYXQgaXQgaXMgdXBkYXRl
ZCB3aGVuIHRoZSBuZXh0IGBnZXRgCi0gICAgICAgICAgICAgICAgICAgIGlzIGNhbGxlZCBvbiB0
aGUgcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgICAgICAgU2VlIFtFbWJlci5Db21wdXRlZFBy
b3BlcnR5XSgvYXBpL2NsYXNzZXMvRW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eS5odG1sKSwgW0VtYmVy
LmNvbXB1dGVkXSgvYXBpLyNtZXRob2RfY29tcHV0ZWQpLgotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQGZvciBGdW5jdGlvbgotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlLnByb3BlcnR5
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCA9IGNvbXB1dGVkKHRoaXMp
OwotICAgICAgICAgICAgICAgIC8vIENvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLnByb3BlcnR5
IGV4cGFuZHMgcHJvcGVydGllczsgbm8gbmVlZCBmb3IgdXMgdG8KLSAgICAgICAgICAgICAgICAv
LyBkbyBzbyBoZXJlLgotICAgICAgICAgICAgICAgIHJldHVybiByZXQucHJvcGVydHkuYXBwbHko
cmV0LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoZSBgb2JzZXJ2ZXNgIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3Mg
RnVuY3Rpb24gcHJvdG90eXBlIGlzIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICB3aGVu
IGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Agb3IgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1
bmN0aW9uYCBpcwotICAgICAgICAgICAgICAgICAgICB0cnVlLCB3aGljaCBpcyB0aGUgZGVmYXVs
dC4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG9ic2VydmUgcHJvcGVydHkgY2hhbmdl
cyBzaW1wbHkgYnkgYWRkaW5nIHRoZSBgb2JzZXJ2ZXNgCi0gICAgICAgICAgICAgICAgICAgIGNh
bGwgdG8gdGhlIGVuZCBvZiB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyB0aGF0
IHlvdSB3cml0ZS4KLSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5PYmpl
Y3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5ldmVyIHRoZSAi
dmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgICAgICAgICAgICAgICB9Lm9ic2VydmVz
KCd2YWx1ZScpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZnV0dXJlIHRoaXMgbWV0aG9kIG1heSBi
ZWNvbWUgYXN5bmNocm9ub3VzLiBJZiB5b3Ugd2FudCB0byBlbnN1cmUKLSAgICAgICAgICAgICAg
ICAgICAgc3luY2hyb25vdXMgYmVoYXZpb3IsIHVzZSBgb2JzZXJ2ZXNJbW1lZGlhdGVseWAuCi0K
LSAgICAgICAgICAgICAgICAgICAgU2VlIGBFbWJlci5vYnNlcnZlcmAuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQG1ldGhvZCBvYnNlcnZlcwotICAgICAgICAgICAgICAgICAgICBAZm9yIEZ1bmN0
aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUu
b2JzZXJ2ZXMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYWRkV2F0Y2hlZFBy
b3BlcnR5ID0gZnVuY3Rpb24gKG9icykgewotICAgICAgICAgICAgICAgICAgICB3YXRjaGVkLnB1
c2gob2JzKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHZhciB3YXRjaGVk
ID0gW107Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzKGFyZ3Vt
ZW50c1tpXSwgYWRkV2F0Y2hlZFByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB0aGlzLl9fZW1iZXJfb2JzZXJ2ZXNfXyA9IHdhdGNoZWQ7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBUaGUgYG9ic2VydmVzSW1tZWRpYXRlbHlgIGV4dGVuc2lvbiBv
ZiBKYXZhc2NyaXB0J3MgRnVuY3Rpb24gcHJvdG90eXBlIGlzCi0gICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJsZSB3aGVuIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Agb3IKLSAgICAgICAgICAg
ICAgICAgICAgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uYCBpcyB0cnVlLCB3aGlj
aCBpcyB0aGUgZGVmYXVsdC4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG9ic2VydmUg
cHJvcGVydHkgY2hhbmdlcyBzaW1wbHkgYnkgYWRkaW5nIHRoZSBgb2JzZXJ2ZXNJbW1lZGlhdGVs
eWAKLSAgICAgICAgICAgICAgICAgICAgY2FsbCB0byB0aGUgZW5kIG9mIHlvdXIgbWV0aG9kIGRl
Y2xhcmF0aW9ucyBpbiBjbGFzc2VzIHRoYXQgeW91IHdyaXRlLgotICAgICAgICAgICAgICAgICAg
ICBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlT2JzZXJ2ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRXhlY3V0ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICJ2YWx1ZSIgcHJvcGVydHkgY2hhbmdl
cwotICAgICAgICAgICAgICAgICAgICAgIH0ub2JzZXJ2ZXNJbW1lZGlhdGVseSgndmFsdWUnKQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgSW4gdGhlIGZ1dHVyZSwgYG9ic2VydmVzYCBtYXkgYmVjb21lIGFzeW5j
aHJvbm91cy4gSW4gdGhpcyBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgYG9ic2VydmVzSW1t
ZWRpYXRlbHlgIHdpbGwgbWFpbnRhaW4gdGhlIHN5bmNocm9ub3VzIGJlaGF2aW9yLgotCi0gICAg
ICAgICAgICAgICAgICAgIFNlZSBgRW1iZXIuaW1tZWRpYXRlT2JzZXJ2ZXJgLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXNJbW1lZGlhdGVseQotICAgICAgICAgICAgICAg
ICAgICBAZm9yIEZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgRnVu
Y3Rpb25Qcm90b3R5cGUub2JzZXJ2ZXNJbW1lZGlhdGVseSA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOwotICAgICAg
ICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIkltbWVkaWF0ZSBvYnNlcnZlcnMgbXVzdCBvYnNl
cnZlIGludGVybmFsIHByb3BlcnRpZXMgb25seSwgbm90IHByb3BlcnRpZXMgb24gb3RoZXIgb2Jq
ZWN0cy4iLCBhcmcuaW5kZXhPZignLicpID09PSAtMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gb2JzZXJ2ZXMgaGFuZGxlcyBwcm9wZXJ0eSBleHBhbnNpb24KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFRoZSBgb2JzZXJ2ZXNCZWZvcmVgIGV4dGVuc2lvbiBvZiBKYXZhc2NyaXB0J3MgRnVuY3Rpb24g
cHJvdG90eXBlIGlzCi0gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB3aGVuIGBFbWJlci5F
WFRFTkRfUFJPVE9UWVBFU2Agb3IKLSAgICAgICAgICAgICAgICAgICAgYEVtYmVyLkVYVEVORF9Q
Uk9UT1RZUEVTLkZ1bmN0aW9uYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KLQotICAg
ICAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCBub3RpZmllZCB3aGVuIGEgcHJvcGVydHkgY2hh
bmdlIGlzIGFib3V0IHRvIGhhcHBlbiBieQotICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcg
dGhlIGBvYnNlcnZlc0JlZm9yZWAgY2FsbCB0byB0aGUgZW5kIG9mIHlvdXIgbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyBpbiBjbGFzc2VzIHRoYXQgeW91IHdyaXRlLiBG
b3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgIEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlT2JzZXJ2ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJ2YWx1ZSIgcHJvcGVydHkgaXMgYWJvdXQgdG8gY2hhbmdl
Ci0gICAgICAgICAgICAgICAgICAgICAgfS5vYnNlcnZlc0JlZm9yZSgndmFsdWUnKQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgICAgICAgU2VlIGBFbWJlci5iZWZvcmVPYnNlcnZlcmAuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBvYnNlcnZlc0JlZm9yZQotICAgICAgICAgICAgICAgICAgICBAZm9yIEZ1bmN0
aW9uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUu
b2JzZXJ2ZXNCZWZvcmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYWRkV2F0
Y2hlZFByb3BlcnR5ID0gZnVuY3Rpb24gKG9icykgewotICAgICAgICAgICAgICAgICAgICB3YXRj
aGVkLnB1c2gob2JzKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHZhciB3
YXRjaGVkID0gW107Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVz
KGFyZ3VtZW50c1tpXSwgYWRkV2F0Y2hlZFByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0aGlzLl9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyA9IHdhdGNoZWQ7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgYG9uYCBleHRlbnNpb24gb2YgSmF2
YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUKLSAgICAgICAgICAgICAg
ICAgICAgd2hlbiBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yIGBFbWJlci5FWFRFTkRfUFJP
VE9UWVBFUy5GdW5jdGlvbmAgaXMKLSAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgd2hpY2ggaXMg
dGhlIGRlZmF1bHQuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBsaXN0ZW4gZm9yIGV2
ZW50cyBzaW1wbHkgYnkgYWRkaW5nIHRoZSBgb25gIGNhbGwgdG8gdGhlIGVuZCBvZgotICAgICAg
ICAgICAgICAgICAgICB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyBvciBtaXhp
bnMgdGhhdCB5b3Ugd3JpdGUuIEZvciBleGFtcGxlOgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuTWl4aW4uY3JlYXRlKHsKLSAg
ICAgICAgICAgICAgICAgICAgICBkb1NvbWV0aGluZ1dpdGhFbGVtZW50OiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5ldmVyIHRoZSAiZGlkSW5z
ZXJ0RWxlbWVudCIgZXZlbnQgZmlyZXMKLSAgICAgICAgICAgICAgICAgICAgICB9Lm9uKCdkaWRJ
bnNlcnRFbGVtZW50JykKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFNlZSBgRW1iZXIub25gLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2Qgb24KLSAgICAgICAgICAgICAgICAgICAgQGZvciBGdW5jdGlv
bgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9u
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IGFfc2xpY2UuY2Fs
bChhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHRoaXMuX19lbWJlcl9saXN0ZW5zX18gPSBl
dmVudHM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9OwotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL2V4dC9yc3ZwIiwKLSAg
ICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvbG9nZ2VyIiwgImV4cG9ydHMiXSwK
LSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKiBnbG9iYWxzIFJTVlA6dHJ1
ZSAqLwotCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwot
ICAgICAgICB2YXIgTG9nZ2VyID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0KLSAgICAg
ICAgdmFyIFJTVlAgPSByZXF1aXJlTW9kdWxlKCJyc3ZwIik7Ci0gICAgICAgIHZhciBUZXN0LCB0
ZXN0TW9kdWxlTmFtZSA9ICdlbWJlci10ZXN0aW5nL3Rlc3QnOwotCi0gICAgICAgIFJTVlAub25l
cnJvckRlZmF1bHQgPSBmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgaWYgKGVycm9yIGlu
c3RhbmNlb2YgRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBpZiAoRW1iZXIudGVzdGluZykgewot
ICAgICAgICAgICAgICAgICAgICAvLyBFUzZUT0RPOiByZW1vdmUgd2hlbiBwb3NzaWJsZQotICAg
ICAgICAgICAgICAgICAgICBpZiAoIVRlc3QgJiYgRW1iZXIuX19sb2FkZXIucmVnaXN0cnlbdGVz
dE1vZHVsZU5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXN0ID0gcmVxdWlyZU1v
ZHVsZSh0ZXN0TW9kdWxlTmFtZSlbJ2RlZmF1bHQnXTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChUZXN0ICYmIFRlc3QuYWRhcHRlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgVGVzdC5hZGFwdGVyLmV4Y2VwdGlvbihlcnJvcik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJv
cjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoRW1i
ZXIub25lcnJvcikgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5vbmVycm9yKGVycm9yKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBMb2dnZXIuZXJy
b3IoZXJyb3Iuc3RhY2spOwotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoZXJyb3Is
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgUlNWUC5vbignZXJyb3InLCBSU1ZQLm9uZXJyb3JEZWZhdWx0KTsKLQotICAgICAg
ICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gUlNWUDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVt
YmVyLXJ1bnRpbWUvZXh0L3N0cmluZyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL3N0cmluZyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLCBFbWJl
ci5hc3NlcnQsIEVtYmVyLkZFQVRVUkVTCi0gICAgICAgIHZhciBmbXQgPSBfX2RlcGVuZGVuY3ky
X18uZm10OwotICAgICAgICB2YXIgdyA9IF9fZGVwZW5kZW5jeTJfXy53OwotICAgICAgICB2YXIg
bG9jID0gX19kZXBlbmRlbmN5Ml9fLmxvYzsKLSAgICAgICAgdmFyIGNhbWVsaXplID0gX19kZXBl
bmRlbmN5Ml9fLmNhbWVsaXplOwotICAgICAgICB2YXIgZGVjYW1lbGl6ZSA9IF9fZGVwZW5kZW5j
eTJfXy5kZWNhbWVsaXplOwotICAgICAgICB2YXIgZGFzaGVyaXplID0gX19kZXBlbmRlbmN5Ml9f
LmRhc2hlcml6ZTsKLSAgICAgICAgdmFyIHVuZGVyc2NvcmUgPSBfX2RlcGVuZGVuY3kyX18udW5k
ZXJzY29yZTsKLSAgICAgICAgdmFyIGNhcGl0YWxpemUgPSBfX2RlcGVuZGVuY3kyX18uY2FwaXRh
bGl6ZTsKLSAgICAgICAgdmFyIGNsYXNzaWZ5ID0gX19kZXBlbmRlbmN5Ml9fLmNsYXNzaWZ5Owot
Ci0gICAgICAgIHZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlOwotCi0gICAg
ICAgIGlmIChFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9PT0gdHJ1ZSB8fCBFbWJlci5FWFRFTkRf
UFJPVE9UWVBFUy5TdHJpbmcpIHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFNlZSBbRW1iZXIuU3RyaW5nLmZtdF0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1s
I21ldGhvZF9mbXQpLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZm10Ci0gICAgICAg
ICAgICAgICAgICAgIEBmb3IgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgU3RyaW5nUHJvdG90eXBlLmZtdCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmbXQodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy53XSgvYXBpL2NsYXNz
ZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX3cpLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgdwotICAgICAgICAgICAgICAgICAgICBAZm9yIFN0cmluZwotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZS53ID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHcodGhpcyk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2VlIFtFbWJlci5TdHJpbmcubG9jXSgvYXBpL2Ns
YXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2xvYykuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBsb2MKLSAgICAgICAgICAgICAgICAgICAgQGZvciBTdHJpbmcKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBTdHJpbmdQcm90b3R5cGUubG9jID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYyh0aGlzLCBhcmd1bWVudHMpOwotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNlZSBbRW1i
ZXIuU3RyaW5nLmNhbWVsaXplXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9k
X2NhbWVsaXplKS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNhbWVsaXplCi0gICAg
ICAgICAgICAgICAgICAgIEBmb3IgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgU3RyaW5nUHJvdG90eXBlLmNhbWVsaXplID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNhbWVsaXplKHRoaXMpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNlZSBbRW1iZXIuU3RyaW5nLmRlY2FtZWxpemVd
KC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZGVjYW1lbGl6ZSkuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkZWNhbWVsaXplCi0gICAgICAgICAgICAgICAgICAg
IEBmb3IgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgU3RyaW5nUHJv
dG90eXBlLmRlY2FtZWxpemUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZGVjYW1lbGl6ZSh0aGlzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5kYXNoZXJpemVdKC9hcGkvY2xhc3Nl
cy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZGFzaGVyaXplKS4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGRhc2hlcml6ZQotICAgICAgICAgICAgICAgICAgICBAZm9yIFN0cmluZwot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZS5kYXNoZXJp
emUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGFzaGVyaXplKHRoaXMp
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IFNlZSBbRW1iZXIuU3RyaW5nLnVuZGVyc2NvcmVdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcu
aHRtbCNtZXRob2RfdW5kZXJzY29yZSkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB1
bmRlcnNjb3JlCi0gICAgICAgICAgICAgICAgICAgIEBmb3IgU3RyaW5nCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgU3RyaW5nUHJvdG90eXBlLnVuZGVyc2NvcmUgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5kZXJzY29yZSh0aGlzKTsKLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVy
LlN0cmluZy5jbGFzc2lmeV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9j
bGFzc2lmeSkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjbGFzc2lmeQotICAgICAg
ICAgICAgICAgICAgICBAZm9yIFN0cmluZwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIFN0cmluZ1Byb3RvdHlwZS5jbGFzc2lmeSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBjbGFzc2lmeSh0aGlzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBTZWUgW0VtYmVyLlN0cmluZy5jYXBpdGFsaXplXSgv
YXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2NhcGl0YWxpemUpLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY2FwaXRhbGl6ZQotICAgICAgICAgICAgICAgICAgICBA
Zm9yIFN0cmluZwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFN0cmluZ1Byb3Rv
dHlwZS5jYXBpdGFsaXplID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNh
cGl0YWxpemUodGhpcyk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci1ydW50aW1lL2tleXMiLAotICAgIFsiZW1iZXItbWV0YWwvZW51bWVyYWJs
ZV91dGlscyIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVudW1lcmFibGVVdGlscyA9IF9fZGVwZW5k
ZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5Ml9f
LmNyZWF0ZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgUmV0dXJucyBhbGwgb2YgdGhl
IGtleXMgZGVmaW5lZCBvbiBhbiBvYmplY3Qgb3IgaGFzaC4gVGhpcyBpcyB1c2VmdWwKLSAgICAg
ICAgICAgICAgd2hlbiBpbnNwZWN0aW5nIG9iamVjdHMgZm9yIGRlYnVnZ2luZy4gT24gYnJvd3Nl
cnMgdGhhdCBzdXBwb3J0IGl0LCB0aGlzCi0gICAgICAgICAgICAgIHVzZXMgdGhlIG5hdGl2ZSBg
T2JqZWN0LmtleXNgIGltcGxlbWVudGF0aW9uLgotCi0gICAgICAgICAgICAgIEBtZXRob2Qga2V5
cwotICAgICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBvYmoKLSAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IEFycmF5IGNvbnRhaW5pbmcga2V5
cyBvZiBvYmoKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXM7
Ci0gICAgICAgIGlmICgha2V5cyB8fCBjcmVhdGUuaXNTaW11bGF0ZWQpIHsKLSAgICAgICAgICAg
IHZhciBwcm90b3R5cGVQcm9wZXJ0aWVzID0gWwotICAgICAgICAgICAgJ2NvbnN0cnVjdG9yJywK
LSAgICAgICAgICAgICdoYXNPd25Qcm9wZXJ0eScsCi0gICAgICAgICAgICAnaXNQcm90b3R5cGVP
ZicsCi0gICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLAotICAgICAgICAgICAgJ3Zh
bHVlT2YnLAotICAgICAgICAgICAgJ3RvTG9jYWxlU3RyaW5nJywKLSAgICAgICAgICAgICd0b1N0
cmluZycKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICBwdXNoUHJvcGVydHlOYW1lID0gZnVu
Y3Rpb24ob2JqLCBhcnJheSwga2V5KSB7Ci0gICAgICAgICAgICAgICAgLy8gUHJldmVudHMgYnJv
d3NlcnMgdGhhdCBkb24ndCByZXNwZWN0IG5vbi1lbnVtZXJhYmlsaXR5IGZyb20KLSAgICAgICAg
ICAgICAgICAvLyBjb3B5aW5nIGludGVybmFsIEVtYmVyIHByb3BlcnRpZXMKLSAgICAgICAgICAg
ICAgICBpZiAoa2V5LnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJykgCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnX3N1cGVyJykgCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoRW51bWVyYWJsZVV0
aWxzLmluZGV4T2YoYXJyYXksIGtleSkgPj0gMCkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1
bmN0aW9uJyAmJiAhb2JqLmhhc093blByb3BlcnR5KGtleSkpIAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGtleSk7Ci0gICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICBrZXlzID0gZnVuY3Rpb24ga2V5cyhvYmopIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcmV0ID0gW10sIGtleTsKLSAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBv
YmopIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaFByb3BlcnR5TmFtZShvYmosIHJldCwga2V5
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJRTggZG9lc24ndCBl
bnVtZXJhdGUgcHJvcGVydHkgdGhhdCBuYW1lZCB0aGUgc2FtZSBhcyBwcm90b3R5cGUgcHJvcGVy
dGllcy4KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHByb3RvdHlwZVByb3Bl
cnRpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHBy
b3RvdHlwZVByb3BlcnRpZXNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgcHVzaFByb3BlcnR5
TmFtZShvYmosIHJldCwga2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBrZXlzOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVu
dGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLAotICAgIFsiZW1iZXItbWV0YWwvbWVyZ2UiLCAi
ZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1l
dGFsL3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0
c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBA
bW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAg
ICAgICAgICovCi0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3kyX18uTWl4aW47Ci0gICAgICAgIHZh
ciBnZXQgPSBfX2RlcGVuZGVuY3kzX18uZ2V0OwotICAgICAgICB2YXIgdHlwZU9mID0gX19kZXBl
bmRlbmN5NF9fLnR5cGVPZjsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGBFbWJl
ci5BY3Rpb25IYW5kbGVyYCBtaXhpbiBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIG1vdmluZyBhbiBg
YWN0aW9uc2AKLSAgICAgICAgICAgICAgcHJvcGVydHkgdG8gYW4gYF9hY3Rpb25zYCBwcm9wZXJ0
eSBhdCBleHRlbmQgdGltZSwgYW5kIGFkZGluZyBgX2FjdGlvbnNgCi0gICAgICAgICAgICAgIHRv
IHRoZSBvYmplY3QncyBtZXJnZWRQcm9wZXJ0aWVzIGxpc3QuCi0KLSAgICAgICAgICAgICAgYEVt
YmVyLkFjdGlvbkhhbmRsZXJgIGlzIGF2YWlsYWJsZSBvbiBzb21lIGZhbWlsaWFyIGNsYXNzZXMg
aW5jbHVkaW5nCi0gICAgICAgICAgICAgIGBFbWJlci5Sb3V0ZWAsIGBFbWJlci5WaWV3YCwgYEVt
YmVyLkNvbXBvbmVudGAsIGFuZCBjb250cm9sbGVycyBzdWNoIGFzCi0gICAgICAgICAgICAgIGBF
bWJlci5Db250cm9sbGVyYCBhbmQgYEVtYmVyLk9iamVjdENvbnRyb2xsZXJgLgotICAgICAgICAg
ICAgICAoSW50ZXJuYWxseSB0aGUgbWl4aW4gaXMgdXNlZCBieSBgRW1iZXIuQ29yZVZpZXdgLCBg
RW1iZXIuQ29udHJvbGxlck1peGluYCwKLSAgICAgICAgICAgICAgYW5kIGBFbWJlci5Sb3V0ZWAg
YW5kIGF2YWlsYWJsZSB0byB0aGUgYWJvdmUgY2xhc3NlcyB0aHJvdWdoCi0gICAgICAgICAgICAg
IGluaGVyaXRhbmNlLikKLQotICAgICAgICAgICAgICBAY2xhc3MgQWN0aW9uSGFuZGxlcgotICAg
ICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIg
QWN0aW9uSGFuZGxlciA9IE1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAgICBtZXJnZWRQcm9wZXJ0
aWVzOiBbJ19hY3Rpb25zJ10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUaGUgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMsIGtleWVkIGJ5IG5hbWUsIGF2YWlsYWJsZSBv
biB0aGlzCi0gICAgICAgICAgICAgICAgICAgIGBBY3Rpb25IYW5kbGVyYCBhcyBhY3Rpb24gdGFy
Z2V0cy4KLQotICAgICAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBpbnZv
a2VkIHdoZW4gYSBtYXRjaGluZyBge3thY3Rpb259fWAgaXMgdHJpZ2dlcmVkCi0gICAgICAgICAg
ICAgICAgICAgIGZyb20gd2l0aGluIGEgdGVtcGxhdGUgYW5kIHRoZSBhcHBsaWNhdGlvbidzIGN1
cnJlbnQgcm91dGUgaXMgdGhpcyByb3V0ZS4KLQotICAgICAgICAgICAgICAgICAgICBBY3Rpb25z
IGNhbiBhbHNvIGJlIGludm9rZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB5b3VyIGFwcGxpY2F0aW9u
Ci0gICAgICAgICAgICAgICAgICAgIHZpYSBgQWN0aW9uSGFuZGxlciNzZW5kYC4KLQotICAgICAg
ICAgICAgICAgICAgICBUaGUgYGFjdGlvbnNgIGhhc2ggd2lsbCBpbmhlcml0IGFjdGlvbiBoYW5k
bGVycyBmcm9tCi0gICAgICAgICAgICAgICAgICAgIHRoZSBgYWN0aW9uc2AgaGFzaCBkZWZpbmVk
IG9uIGV4dGVuZGVkIHBhcmVudCBjbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgIG9yIG1peGlu
cyByYXRoZXIgdGhhbiBqdXN0IHJlcGxhY2UgdGhlIGVudGlyZSBoYXNoLCBlLmcuOgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5DYW5EaXNwbGF5
QmFubmVyID0gRW1iZXIuTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rp
b25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5QmFubmVyOiBmdW5jdGlvbiht
c2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgICAgICAgICBBcHAuV2VsY29tZVJvdXRlID0gRW1iZXIuUm91dGUu
ZXh0ZW5kKEFwcC5DYW5EaXNwbGF5QmFubmVyLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0
aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgcGxheU11c2ljOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBgV2VsY29tZVJvdXRlYCwgd2hlbiBhY3RpdmUsIHdpbGwg
YmUgYWJsZSB0byByZXNwb25kCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGJvdGggYWN0aW9u
cywgc2luY2UgdGhlIGFjdGlvbnMgaGFzaCBpcyBtZXJnZWQgcmF0aGVyCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoZW4gcmVwbGFjZWQgd2hlbiBleHRlbmRpbmcgbWl4aW5zIC8gcGFyZW50IGNs
YXNzZXMuCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZCgnZGlzcGxheUJhbm5lcicpOwot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmQoJ3BsYXlNdXNpYycpOwotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBXaXRoaW4gYSBDb250cm9sbGVyLCBS
b3V0ZSwgVmlldyBvciBDb21wb25lbnQncyBhY3Rpb24gaGFuZGxlciwKLSAgICAgICAgICAgICAg
ICAgICAgdGhlIHZhbHVlIG9mIHRoZSBgdGhpc2AgY29udGV4dCBpcyB0aGUgQ29udHJvbGxlciwg
Um91dGUsIFZpZXcgb3IKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50IG9iamVjdDoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuU29uZ1Jv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25z
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteUFjdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckZvcigic29uZyIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25Ubygib3RoZXIucm91dGUiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJs
ZSB0byBjYWxsIGB0aGlzLl9zdXBlcigpYCBmcm9tIHdpdGhpbiBhbgotICAgICAgICAgICAgICAg
ICAgICBhY3Rpb24gaGFuZGxlciBpZiBpdCBvdmVycmlkZXMgYSBoYW5kbGVyIGRlZmluZWQgb24g
YSBwYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Mgb3IgbWl4aW46Ci0KLSAgICAgICAg
ICAgICAgICAgICAgVGFrZSBmb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIHJvdXRlczoKLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqcwotICAgICAgICAgICAgICAgICAgICBBcHAuRGVidWdSb3V0
ZSA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uczog
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdSb3V0ZUluZm9ybWF0aW9uOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygidHJvbG9sbyIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkFubm95aW5n
RGVidWdSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZChBcHAuRGVidWdSb3V0ZSwgewotICAgICAg
ICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn
Um91dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFsc28gY2FsbCB0aGUgZGVidWdSb3V0ZUluZm9ybWF0aW9uIG9mIG1peGVkIGluIEFwcC5E
ZWJ1Z1JvdXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyBhZGRpdGlvbmFsIGFubm95YW5jZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoLi4uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICAjIyBC
dWJibGluZwotCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGFuIGFjdGlvbiB3aWxs
IHN0b3AgYnViYmxpbmcgb25jZSBhIGhhbmRsZXIgZGVmaW5lZAotICAgICAgICAgICAgICAgICAg
ICBvbiB0aGUgYGFjdGlvbnNgIGhhc2ggaGFuZGxlcyBpdC4gVG8gY29udGludWUgYnViYmxpbmcg
dGhlIGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgcmV0dXJuIGB0cnVlYCBm
cm9tIHRoZSBoYW5kbGVyOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAg
ICAgICAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVzb3VyY2UoImFsYnVtIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJvdXRlKCJzb25nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5BbGJ1bVJv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25z
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBsYXlpbmc6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkFsYnVtU29uZ1Jv
dXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25z
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBsYXlpbmc6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYWN0aW9uU2hvdWxkQWxzb0JlVHJpZ2dlcmVkT25QYXJlbnRSb3V0ZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGFjdGlvbnMKLSAgICAgICAgICAgICAgICAg
ICAgQHR5cGUgSGFzaAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAg
ICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgTW92
ZXMgYGFjdGlvbnNgIHRvIGBfYWN0aW9uc2AgYXQgZXh0ZW5kIHRpbWUuIE5vdGUgdGhhdCB0aGlz
IGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBtb2RpZmllcyB0aGUgbWl4aW4gdGhlbXNl
bHZlcywgd2hpY2ggaXMgdGVjaG5pY2FsbHkgZHViaW91cyBidXQKLSAgICAgICAgICAgICAgICAg
ICAgaXMgcHJhY3RpY2FsbHkgb2YgbGl0dGxlIGNvbnNlcXVlbmNlLiBUaGlzIG1heSBjaGFuZ2Ug
aW4gdGhlIGZ1dHVyZS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHdpbGxNZXJnZU1peGluCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgd2lsbE1lcmdlTWl4aW46IGZ1bmN0aW9uKHByb3BzKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGhhc2hOYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKCFwcm9wcy5fYWN0aW9u
cykgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIidhY3Rpb25zJyBzaG91bGQg
bm90IGJlIGEgZnVuY3Rpb24iLCB0eXBlb2YocHJvcHMuYWN0aW9ucykgIT09ICdmdW5jdGlvbicp
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlT2YocHJvcHMuYWN0aW9ucykgPT09ICdv
YmplY3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoTmFtZSA9ICdhY3Rpb25zJzsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlT2YocHJvcHMuZXZlbnRzKSA9PT0g
J29iamVjdCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnQWN0
aW9uIGhhbmRsZXJzIGNvbnRhaW5lZCBpbiBhbiBgZXZlbnRzYCBvYmplY3QgYXJlIGRlcHJlY2F0
ZWQgaW4gZmF2b3Igb2YgcHV0dGluZyB0aGVtIGluIGFuIGBhY3Rpb25zYCBvYmplY3QnLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoTmFtZSA9ICdldmVudHMnOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc2hOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5fYWN0aW9ucyA9IG1lcmdlKHByb3BzLl9hY3Rp
b25zIHx8IHt9LCBwcm9wc1toYXNoTmFtZV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzW2hhc2hOYW1lXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgVHJpZ2dlcnMgYSBuYW1lZCBhY3Rpb24gb24gdGhlIGBBY3Rpb25IYW5kbGVyYC4gQW55IHBh
cmFtZXRlcnMKLSAgICAgICAgICAgICAgICAgICAgc3VwcGxpZWQgYWZ0ZXIgdGhlIGBhY3Rpb25O
YW1lYCBzdHJpbmcgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzCi0gICAgICAgICAgICAgICAg
ICAgIHRvIHRoZSBhY3Rpb24gdGFyZ2V0IGZ1bmN0aW9uLgotCi0gICAgICAgICAgICAgICAgICAg
IElmIHRoZSBgQWN0aW9uSGFuZGxlcmAgaGFzIGl0cyBgdGFyZ2V0YCBwcm9wZXJ0eSBzZXQsIGFj
dGlvbnMgbWF5Ci0gICAgICAgICAgICAgICAgICAgIGJ1YmJsZSB0byB0aGUgYHRhcmdldGAuIEJ1
YmJsaW5nIGhhcHBlbnMgd2hlbiBhbiBgYWN0aW9uTmFtZWAgY2FuCi0gICAgICAgICAgICAgICAg
ICAgIG5vdCBiZSBmb3VuZCBpbiB0aGUgYEFjdGlvbkhhbmRsZXJgJ3MgYGFjdGlvbnNgIGhhc2gg
b3IgaWYgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbiB0YXJnZXQgZnVuY3Rpb24gcmV0
dXJucyBgdHJ1ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZQotCi0gICAgICAgICAg
ICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgICAgICAgIEFwcC5XZWxjb21lUm91dGUgPSBF
bWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYXlUaGVtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnNlbmQoJ3BsYXlNdXNpYycsICd0aGVtZS5tcDMnKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBwbGF5TXVz
aWM6IGZ1bmN0aW9uKHRyYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLgot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2Qgc2VuZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIHRvIHRyaWdnZXIKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHsqfSBjb250ZXh0IGEgY29udGV4dCB0byBzZW5kIHdpdGggdGhlIGFjdGlvbgotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKGFjdGlvbk5hbWUp
IHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KSwgdGFyZ2V0OwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGlvbnMgJiYgdGhpcy5f
YWN0aW9uc1thY3Rpb25OYW1lXSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWN0
aW9uc1thY3Rpb25OYW1lXS5hcHBseSh0aGlzLCBhcmdzKSA9PT0gdHJ1ZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaGFuZGxlciByZXR1cm5lZCB0cnVlLCBzbyB0aGlzIGFjdGlvbiB3
aWxsIGJ1YmJsZQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghRW1iZXIuRkVBVFVSRVMuaXNFbmFibGVkKCdlbWJlci1yb3V0aW5nLWRyb3At
ZGVwcmVjYXRlZC1hY3Rpb24tc3R5bGUnKSAmJiB0aGlzLmRlcHJlY2F0ZWRTZW5kICYmIHRoaXMu
ZGVwcmVjYXRlZFNlbmRIYW5kbGVzICYmIHRoaXMuZGVwcmVjYXRlZFNlbmRIYW5kbGVzKGFjdGlv
bk5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLndhcm4oIlRoZSBjdXJyZW50IGRl
ZmF1bHQgaXMgZGVwcmVjYXRlZCBidXQgd2lsbCBwcmVmZXIgdG8gaGFuZGxlIGFjdGlvbnMgZGly
ZWN0bHkgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZiBhIHNpbWlsYXJseSBuYW1lZCBhY3Rp
b24gaW4gdGhlIGFjdGlvbnMgaGFzaC4gVG8gdHVybiBvZmYgdGhpcyBkZXByZWNhdGVkIGZlYXR1
cmUgc2V0OiBFbWJlci5GRUFUVVJFU1snZW1iZXItcm91dGluZy1kcm9wLWRlcHJlY2F0ZWQtYWN0
aW9uLXN0eWxlJ10gPSB0cnVlIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcHJl
Y2F0ZWRTZW5kLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkgPT09IHRydWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgcmV0dXJuIHRydWUsIHNvIHRo
aXMgYWN0aW9uIHdpbGwgYnViYmxlCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID0gZ2V0KHRoaXMsICd0
YXJnZXQnKSkgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIlRoZSBgdGFyZ2V0
YCBmb3IgIiArIHRoaXMgKyAiICgiICsgdGFyZ2V0ICsgIikgZG9lcyBub3QgaGF2ZSBhIGBzZW5k
YCBtZXRob2QiLCB0eXBlb2YgdGFyZ2V0LnNlbmQgPT09ICdmdW5jdGlvbicpOwotICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQuc2VuZC5hcHBseSh0YXJnZXQsIGFyZ3VtZW50cyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gQWN0aW9uSGFuZGxlcjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVt
YmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9pc19ub25lIiwgImVtYmVyLXJ1bnRpbWUv
bWl4aW5zL2VudW1lcmFibGUiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJl
ci1tZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMiLCAiZW1iZXItbWV0
YWwvZXZlbnRzIiwgImVtYmVyLW1ldGFsL3dhdGNoaW5nIiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVu
ZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kx
MF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAg
QHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4K
LSAgICAgICAgLy8gSEVMUEVSUwotICAgICAgICAvLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRVM2VE9ETzogRW1iZXIuQQotCi0g
ICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0g
X19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5
NF9fLmNvbXB1dGVkOwotICAgICAgICB2YXIgY2FjaGVGb3IgPSBfX2RlcGVuZGVuY3k0X18uY2Fj
aGVGb3I7Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k1X18uaXNOb25lOwotICAg
ICAgICB2YXIgbm9uZSA9IF9fZGVwZW5kZW5jeTVfXy5ub25lOwotICAgICAgICB2YXIgRW51bWVy
YWJsZSA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWFwID0gX19k
ZXBlbmRlbmN5N19fLm1hcDsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5OF9fLk1p
eGluOwotICAgICAgICB2YXIgcmVxdWlyZWQgPSBfX2RlcGVuZGVuY3k4X18ucmVxdWlyZWQ7Ci0g
ICAgICAgIHZhciBwcm9wZXJ0eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3k5X18ucHJvcGVydHlX
aWxsQ2hhbmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3k5
X18ucHJvcGVydHlEaWRDaGFuZ2U7Ci0gICAgICAgIHZhciBhZGRMaXN0ZW5lciA9IF9fZGVwZW5k
ZW5jeTEwX18uYWRkTGlzdGVuZXI7Ci0gICAgICAgIHZhciByZW1vdmVMaXN0ZW5lciA9IF9fZGVw
ZW5kZW5jeTEwX18ucmVtb3ZlTGlzdGVuZXI7Ci0gICAgICAgIHZhciBzZW5kRXZlbnQgPSBfX2Rl
cGVuZGVuY3kxMF9fLnNlbmRFdmVudDsKLSAgICAgICAgdmFyIGhhc0xpc3RlbmVycyA9IF9fZGVw
ZW5kZW5jeTEwX18uaGFzTGlzdGVuZXJzOwotICAgICAgICB2YXIgaXNXYXRjaGluZyA9IF9fZGVw
ZW5kZW5jeTExX18uaXNXYXRjaGluZzsKLQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIEFSUkFZ
Ci0gICAgICAgIC8vCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIG1peGluIGltcGxl
bWVudHMgT2JzZXJ2ZXItZnJpZW5kbHkgQXJyYXktbGlrZSBiZWhhdmlvci4gSXQgaXMgbm90IGEK
LSAgICAgICAgICAgICAgY29uY3JldGUgaW1wbGVtZW50YXRpb24sIGJ1dCBpdCBjYW4gYmUgdXNl
ZCB1cCBieSBvdGhlciBjbGFzc2VzIHRoYXQgd2FudAotICAgICAgICAgICAgICB0byBhcHBlYXIg
bGlrZSBhcnJheXMuCi0KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEFycmF5UHJveHkgYW5k
IEFycmF5Q29udHJvbGxlciBhcmUgYm90aCBjb25jcmV0ZSBjbGFzc2VzIHRoYXQgY2FuCi0gICAg
ICAgICAgICAgIGJlIGluc3RhbnRpYXRlZCB0byBpbXBsZW1lbnQgYXJyYXktbGlrZSBiZWhhdmlv
ci4gQm90aCBvZiB0aGVzZSBjbGFzc2VzIHVzZQotICAgICAgICAgICAgICB0aGUgQXJyYXkgTWl4
aW4gYnkgd2F5IG9mIHRoZSBNdXRhYmxlQXJyYXkgbWl4aW4sIHdoaWNoIGFsbG93cyBvYnNlcnZh
YmxlCi0gICAgICAgICAgICAgIGNoYW5nZXMgdG8gYmUgbWFkZSB0byB0aGUgdW5kZXJseWluZyBh
cnJheS4KLQotICAgICAgICAgICAgICBVbmxpa2UgYEVtYmVyLkVudW1lcmFibGUsYCB0aGlzIG1p
eGluIGRlZmluZXMgbWV0aG9kcyBzcGVjaWZpY2FsbHkgZm9yCi0gICAgICAgICAgICAgIGNvbGxl
Y3Rpb25zIHRoYXQgcHJvdmlkZSBpbmRleC1vcmRlcmVkIGFjY2VzcyB0byB0aGVpciBjb250ZW50
cy4gV2hlbiB5b3UKLSAgICAgICAgICAgICAgYXJlIGRlc2lnbmluZyBjb2RlIHRoYXQgbmVlZHMg
dG8gYWNjZXB0IGFueSBraW5kIG9mIEFycmF5LWxpa2Ugb2JqZWN0LCB5b3UKLSAgICAgICAgICAg
ICAgc2hvdWxkIHVzZSB0aGVzZSBtZXRob2RzIGluc3RlYWQgb2YgQXJyYXkgcHJpbWl0aXZlcyBi
ZWNhdXNlIHRoZXNlIHdpbGwKLSAgICAgICAgICAgICAgcHJvcGVybHkgbm90aWZ5IG9ic2VydmVy
cyBvZiBjaGFuZ2VzIHRvIHRoZSBhcnJheS4KLQotICAgICAgICAgICAgICBBbHRob3VnaCB0aGVz
ZSBtZXRob2RzIGFyZSBlZmZpY2llbnQsIHRoZXkgZG8gYWRkIGEgbGF5ZXIgb2YgaW5kaXJlY3Rp
b24gdG8KLSAgICAgICAgICAgICAgeW91ciBhcHBsaWNhdGlvbiBzbyBpdCBpcyBhIGdvb2QgaWRl
YSB0byB1c2UgdGhlbSBvbmx5IHdoZW4geW91IG5lZWQgdGhlCi0gICAgICAgICAgICAgIGZsZXhp
YmlsaXR5IG9mIHVzaW5nIGJvdGggdHJ1ZSBKYXZhU2NyaXB0IGFycmF5cyBhbmQgInZpcnR1YWwi
IGFycmF5cyBzdWNoCi0gICAgICAgICAgICAgIGFzIGNvbnRyb2xsZXJzIGFuZCBjb2xsZWN0aW9u
cy4KLQotICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgbWV0aG9kcyBkZWZpbmVkIGluIHRo
aXMgbW9kdWxlIHRvIGFjY2VzcyBhbmQgbW9kaWZ5IGFycmF5Ci0gICAgICAgICAgICAgIGNvbnRl
bnRzIGluIGEgS1ZPLWZyaWVuZGx5IHdheS4gWW91IGNhbiBhbHNvIGJlIG5vdGlmaWVkIHdoZW5l
dmVyIHRoZQotICAgICAgICAgICAgICBtZW1iZXJzaGlwIG9mIGFuIGFycmF5IGNoYW5nZXMgYnkg
dXNpbmcgYC5vYnNlcnZlcygnbXlBcnJheS5bXScpYC4KLQotICAgICAgICAgICAgICBUbyBzdXBw
b3J0IGBFbWJlci5BcnJheWAgaW4geW91ciBvd24gY2xhc3MsIHlvdSBtdXN0IG92ZXJyaWRlIHR3
bwotICAgICAgICAgICAgICBwcmltaXRpdmVzIHRvIHVzZSBpdDogYHJlcGxhY2UoKWAgYW5kIGBv
YmplY3RBdCgpYC4KLQotICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIEVtYmVyLkFycmF5IG1p
eGluIGFsc28gaW5jb3Jwb3JhdGVzIHRoZSBgRW1iZXIuRW51bWVyYWJsZWAKLSAgICAgICAgICAg
ICAgbWl4aW4uIEFsbCBgRW1iZXIuQXJyYXlgLWxpa2Ugb2JqZWN0cyBhcmUgYWxzbyBlbnVtZXJh
YmxlLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBBcnJheQotICAgICAgICAgICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLkVudW1lcmFibGUKLSAgICAgICAg
ICAgICAgQHNpbmNlIEVtYmVyIDAuOS4wCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKEVudW1lcmFibGUsIHsKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFlvdXIgYXJyYXkgbXVzdCBzdXBwb3J0IHRoZSBg
bGVuZ3RoYCBwcm9wZXJ0eS4gWW91ciByZXBsYWNlIG1ldGhvZHMgc2hvdWxkCi0gICAgICAgICAg
ICAgICAgICAgIHNldCB0aGlzIHByb3BlcnR5IHdoZW5ldmVyIGl0IGNoYW5nZXMuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHByb3BlcnR5IHtOdW1iZXJ9IGxlbmd0aAotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGxlbmd0aDogcmVxdWlyZWQoKSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgZ2l2ZW4gYGlu
ZGV4YC4gSWYgdGhlIGdpdmVuIGBpbmRleGAgaXMgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAg
ICAgb3IgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBhcnJheSBsZW5ndGgsIHJldHVybnMg
YHVuZGVmaW5lZGAuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIHBy
aW1pdGl2ZXMgeW91IG11c3QgaW1wbGVtZW50IHRvIHN1cHBvcnQgYEVtYmVyLkFycmF5YC4KLSAg
ICAgICAgICAgICAgICAgICAgSWYgeW91ciBvYmplY3Qgc3VwcG9ydHMgcmV0cmlldmluZyB0aGUg
dmFsdWUgb2YgYW4gYXJyYXkgaXRlbSB1c2luZyBgZ2V0KClgCi0gICAgICAgICAgICAgICAgICAg
IChpLmUuIGBteUFycmF5LmdldCgwKWApLCB0aGVuIHlvdSBkbyBub3QgbmVlZCB0byBpbXBsZW1l
bnQgdGhpcyBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgeW91cnNlbGYuCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0g
WydhJywgJ2InLCAnYycsICdkJ107Ci0gICAgICAgICAgICAgICAgICAgIGFyci5vYmplY3RBdCgw
KTsgICAvLyAiYSIKLSAgICAgICAgICAgICAgICAgICAgYXJyLm9iamVjdEF0KDMpOyAgIC8vICJk
IgotICAgICAgICAgICAgICAgICAgICBhcnIub2JqZWN0QXQoLTEpOyAgLy8gdW5kZWZpbmVkCi0g
ICAgICAgICAgICAgICAgICAgIGFyci5vYmplY3RBdCg0KTsgICAvLyB1bmRlZmluZWQKLSAgICAg
ICAgICAgICAgICAgICAgYXJyLm9iamVjdEF0KDUpOyAgIC8vIHVuZGVmaW5lZAotICAgICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9iamVjdEF0Ci0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBpZHggVGhlIGluZGV4IG9mIHRoZSBp
dGVtIHRvIHJldHVybi4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7Kn0gaXRlbSBhdCBp
bmRleCBvciB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvYmpl
Y3RBdDogZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChpZHggPCAwKSB8fCAo
aWR4ID49IGdldCh0aGlzLCAnbGVuZ3RoJykpKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGlkeCk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyBy
ZXR1cm5zIHRoZSBvYmplY3RzIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcywgdXNpbmcgYG9iamVj
dEF0YC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBhcnIgPcKgWydhJywgJ2InLCAnYycsICdkJ107Ci0gICAgICAgICAgICAgICAg
ICAgIGFyci5vYmplY3RzQXQoWzAsIDEsIDJdKTsgIC8vIFsiYSIsICJiIiwgImMiXQotICAgICAg
ICAgICAgICAgICAgICBhcnIub2JqZWN0c0F0KFsyLCAzLCA0XSk7ICAvLyBbImMiLCAiZCIsIHVu
ZGVmaW5lZF0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBvYmplY3RzQXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtBcnJheX0gaW5k
ZXhlcyBBbiBhcnJheSBvZiBpbmRleGVzIG9mIGl0ZW1zIHRvIHJldHVybi4KLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7QXJyYXl9Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIG9iamVjdHNBdDogZnVuY3Rpb24oaW5kZXhlcykgewotICAgICAgICAgICAgICAgIHZhciBz
ZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwKGluZGV4ZXMsIGZ1bmN0aW9u
KGlkeCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmplY3RBdChpZHgpOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gb3Zl
cnJpZGVzIEVtYmVyLkVudW1lcmFibGUgdmVyc2lvbgotICAgICAgICAgICAgbmV4dE9iamVjdDog
ZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0QXQoaWR4
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUaGlzIGlzIHRoZSBoYW5kbGVyIGZvciB0aGUgc3BlY2lhbCBhcnJheSBjb250ZW50IHByb3Bl
cnR5LiBJZiB5b3UgZ2V0Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHksIGl0IHdp
bGwgcmV0dXJuIHRoaXMuIElmIHlvdSBzZXQgdGhpcyBwcm9wZXJ0eSB0byBhIG5ldwotICAgICAg
ICAgICAgICAgICAgICBhcnJheSwgaXQgd2lsbCByZXBsYWNlIHRoZSBjdXJyZW50IGNvbnRlbnQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9wZXJ0eSBvdmVycmlkZXMgdGhlIGRlZmF1
bHQgcHJvcGVydHkgZGVmaW5lZCBpbiBgRW1iZXIuRW51bWVyYWJsZWAuCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHByb3BlcnR5IFtdCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gdGhpcwot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICdbXSc6IGNvbXB1dGVkKGZ1bmN0aW9u
KGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkg
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZSgwLCBnZXQodGhpcywgJ2xlbmd0aCcp
LCB2YWx1ZSkgOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzIDsKLSAgICAgICAgICAgIH0p
LAotCi0gICAgICAgICAgICBmaXJzdE9iamVjdDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0QXQoMCk7Ci0gICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgbGFzdE9iamVjdDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMub2JqZWN0QXQoZ2V0KHRoaXMsICdsZW5ndGgnKS0xKTsKLSAgICAg
ICAgICAgIH0pLAotCi0gICAgICAgICAgICAvLyBvcHRpbWl6ZWQgdmVyc2lvbiBmcm9tIEVudW1l
cmFibGUKLSAgICAgICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5pbmRleE9mKG9iaikgPj0gMDsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8vIEFkZCBhbnkgZXh0cmEgbWV0aG9kcyB0byBFbWJlci5BcnJheSB0aGF0IGFy
ZSBuYXRpdmUgdG8gdGhlIGJ1aWx0LWluIEFycmF5LgotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFJldHVybnMgYSBuZXcgYXJyYXkgdGhhdCBpcyBhIHNsaWNlIG9mIHRoZSBy
ZWNlaXZlci4gVGhpcyBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICB1c2VzIHRo
ZSBvYnNlcnZhYmxlIGFycmF5IG1ldGhvZHMgdG8gcmV0cmlldmUgdGhlIG9iamVjdHMgZm9yIHRo
ZSBuZXcKLSAgICAgICAgICAgICAgICAgICAgc2xpY2UuCi0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gWydyZWQnLCAnZ3Jl
ZW4nLCAnYmx1ZSddOwotICAgICAgICAgICAgICAgICAgICBhcnIuc2xpY2UoMCk7ICAgICAgIC8v
IFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXQotICAgICAgICAgICAgICAgICAgICBhcnIuc2xpY2Uo
MCwgMik7ICAgIC8vIFsncmVkJywgJ2dyZWVuJ10KLSAgICAgICAgICAgICAgICAgICAgYXJyLnNs
aWNlKDEsIDEwMCk7ICAvLyBbJ2dyZWVuJywgJ2JsdWUnXQotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNsaWNlCi0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7SW50ZWdlcn0gYmVnaW5JbmRleCAoT3B0aW9uYWwpIGluZGV4IHRvIGJlZ2lu
IHNsaWNpbmcgZnJvbS4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtJbnRlZ2VyfSBlbmRJ
bmRleCAoT3B0aW9uYWwpIGluZGV4IHRvIGVuZCB0aGUgc2xpY2UgYXQgKGJ1dCBub3QgaW5jbHVk
ZWQpLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gTmV3IGFycmF5IHdpdGgg
c3BlY2lmaWVkIHNsaWNlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2xpY2U6
IGZ1bmN0aW9uKGJlZ2luSW5kZXgsIGVuZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJl
dCA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0KHRoaXMsICds
ZW5ndGgnKSA7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTm9uZShiZWdpbkluZGV4KSkgCi0gICAg
ICAgICAgICAgICAgICAgIGJlZ2luSW5kZXggPSAwIDsKLSAgICAgICAgICAgICAgICBpZiAoaXNO
b25lKGVuZEluZGV4KSB8fCAoZW5kSW5kZXggPiBsZW5ndGgpKSAKLSAgICAgICAgICAgICAgICAg
ICAgZW5kSW5kZXggPSBsZW5ndGggOwotCi0gICAgICAgICAgICAgICAgaWYgKGJlZ2luSW5kZXgg
PCAwKSAKLSAgICAgICAgICAgICAgICAgICAgYmVnaW5JbmRleCA9IGxlbmd0aCArIGJlZ2luSW5k
ZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGVuZEluZGV4IDwgMCkgCi0gICAgICAgICAgICAgICAg
ICAgIGVuZEluZGV4ID0gbGVuZ3RoICsgZW5kSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICB3aGls
ZSAoYmVnaW5JbmRleCA8IGVuZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldFtyZXQu
bGVuZ3RoXSA9IHRoaXMub2JqZWN0QXQoYmVnaW5JbmRleCsrKSA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXQgOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBn
aXZlbiBvYmplY3QncyBmaXJzdCBvY2N1cnJlbmNlLgotICAgICAgICAgICAgICAgICAgICBJZiBu
byBgc3RhcnRBdGAgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBzdGFydGluZyBsb2NhdGlvbiB0bwot
ICAgICAgICAgICAgICAgICAgICBzZWFyY2ggaXMgMC4gSWYgaXQncyBuZWdhdGl2ZSwgd2lsbCBj
b3VudCBiYWNrd2FyZCBmcm9tCi0gICAgICAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGFy
cmF5LiBSZXR1cm5zIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsiYSIsICJi
IiwgImMiLCAiZCIsICJhIl07Ci0gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKCJhIik7
ICAgICAgIC8vICAwCi0gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKCJ6Iik7ICAgICAg
IC8vIC0xCi0gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKCJhIiwgMik7ICAgIC8vICA0
Ci0gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKCJhIiwgLTEpOyAgIC8vICA0Ci0gICAg
ICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKCJiIiwgMyk7ICAgIC8vIC0xCi0gICAgICAgICAg
ICAgICAgICAgIGFyci5pbmRleE9mKCJhIiwgMTAwKTsgIC8vIC0xCi0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgaW5kZXhPZgotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IHRoZSBpdGVtIHRvIHNlYXJjaCBmb3IK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0QXQgb3B0aW9uYWwgc3Rh
cnRpbmcgbG9jYXRpb24gdG8gc2VhcmNoLCBkZWZhdWx0IDAKLSAgICAgICAgICAgICAgICAgICAg
QHJldHVybiB7TnVtYmVyfSBpbmRleCBvciAtMSBpZiBub3QgZm91bmQKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBpbmRleE9mOiBmdW5jdGlvbihvYmplY3QsIHN0YXJ0QXQpIHsK
LSAgICAgICAgICAgICAgICB2YXIgaWR4LCBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHN0YXJ0QXQgPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXJ0QXQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGFydEF0IDwgMCkgCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgKz0gbGVuOwotCi0gICAgICAgICAgICAgICAgZm9y
IChpZHggPSBzdGFydEF0OyBpZHggPCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLm9iamVjdEF0KGlkeCkgPT09IG9iamVjdCkgCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaWR4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gLTE7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9iamVjdCdzIGxhc3Qgb2NjdXJy
ZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgSWYgbm8gYHN0YXJ0QXRgIGFyZ3VtZW50IGlzIGdp
dmVuLCB0aGUgc2VhcmNoIHN0YXJ0cyBmcm9tCi0gICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0
IHBvc2l0aW9uLiBJZiBpdCdzIG5lZ2F0aXZlLCB3aWxsIGNvdW50IGJhY2t3YXJkCi0gICAgICAg
ICAgICAgICAgICAgIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFJldHVybnMgLTEgaWYgbm8g
bWF0Y2ggaXMgZm91bmQuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICB2YXIgYXJyID0gWyJhIiwgImIiLCAiYyIsICJkIiwgImEiXTsKLSAg
ICAgICAgICAgICAgICAgICAgYXJyLmxhc3RJbmRleE9mKCJhIik7ICAgICAgIC8vICA0Ci0gICAg
ICAgICAgICAgICAgICAgIGFyci5sYXN0SW5kZXhPZigieiIpOyAgICAgICAvLyAtMQotICAgICAg
ICAgICAgICAgICAgICBhcnIubGFzdEluZGV4T2YoImEiLCAyKTsgICAgLy8gIDAKLSAgICAgICAg
ICAgICAgICAgICAgYXJyLmxhc3RJbmRleE9mKCJhIiwgLTEpOyAgIC8vICA0Ci0gICAgICAgICAg
ICAgICAgICAgIGFyci5sYXN0SW5kZXhPZigiYiIsIDMpOyAgICAvLyAgMQotICAgICAgICAgICAg
ICAgICAgICBhcnIubGFzdEluZGV4T2YoImEiLCAxMDApOyAgLy8gIDQKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBsYXN0SW5kZXhPZgotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IHRoZSBpdGVtIHRvIHNlYXJj
aCBmb3IKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0QXQgb3B0aW9u
YWwgc3RhcnRpbmcgbG9jYXRpb24gdG8gc2VhcmNoLCBkZWZhdWx0IDAKLSAgICAgICAgICAgICAg
ICAgICAgQHJldHVybiB7TnVtYmVyfSBpbmRleCBvciAtMSBpZiBub3QgZm91bmQKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24ob2JqZWN0LCBz
dGFydEF0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlkeCwgbGVuID0gZ2V0KHRoaXMsICdsZW5n
dGgnKTsKLQotICAgICAgICAgICAgICAgIGlmIChzdGFydEF0ID09PSB1bmRlZmluZWQgfHwgc3Rh
cnRBdCA+PSBsZW4pIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ID0gbGVuLTE7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0QXQgPCAwKSAKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRB
dCArPSBsZW47Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGlkeCA9IHN0YXJ0QXQ7IGlkeCA+PSAw
OyBpZHgtLSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmplY3RBdChpZHgpID09
PSBvYmplY3QpIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkeDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gQVJSQVkgT0JTRVJWRVJTCi0gICAgICAg
ICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkcyBhbiBh
cnJheSBvYnNlcnZlciB0byB0aGUgcmVjZWl2aW5nIGFycmF5LiBUaGUgYXJyYXkgb2JzZXJ2ZXIg
b2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IG11c3QgaW1wbGVtZW50IHR3byBt
ZXRob2RzOgotCi0gICAgICAgICAgICAgICAgICAgICogYGFycmF5V2lsbENoYW5nZShvYnNlcnZl
ZE9iaiwgc3RhcnQsIHJlbW92ZUNvdW50LCBhZGRDb3VudClgIC0gVGhpcyBtZXRob2Qgd2lsbCBi
ZQotICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgYXJyYXkgaXMg
bW9kaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICogYGFycmF5RGlkQ2hhbmdlKG9ic2VydmVk
T2JqLCBzdGFydCwgcmVtb3ZlQ291bnQsIGFkZENvdW50KWAgLSBUaGlzIG1ldGhvZCB3aWxsIGJl
Ci0gICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIGFycmF5IGlzIG1v
ZGlmaWVkLgotCi0gICAgICAgICAgICAgICAgICAgIEJvdGggY2FsbGJhY2tzIHdpbGwgYmUgcGFz
c2VkIHRoZSBvYnNlcnZlZCBvYmplY3QsIHN0YXJ0aW5nIGluZGV4IG9mIHRoZQotICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2UgYXMgd2VsbCBhIGEgY291bnQgb2YgdGhlIGl0ZW1zIHRvIGJlIHJl
bW92ZWQgYW5kIGFkZGVkLiBZb3UgY2FuIHVzZQotICAgICAgICAgICAgICAgICAgICB0aGVzZSBj
YWxsYmFja3MgdG8gb3B0aW9uYWxseSBpbnNwZWN0IHRoZSBhcnJheSBkdXJpbmcgdGhlIGNoYW5n
ZSwgY2xlYXIKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVzLCBvciBkbyBhbnkgb3RoZXIgYm9v
a2tlZXBpbmcgbmVjZXNzYXJ5LgotCi0gICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRv
IHBhc3NpbmcgYSB0YXJnZXQsIHlvdSBjYW4gYWxzbyBpbmNsdWRlIGFuIG9wdGlvbnMgaGFzaAot
ICAgICAgICAgICAgICAgICAgICB3aGljaCB5b3UgY2FuIHVzZSB0byBvdmVycmlkZSB0aGUgbWV0
aG9kIG5hbWVzIHRoYXQgd2lsbCBiZSBpbnZva2VkIG9uIHRoZQotICAgICAgICAgICAgICAgICAg
ICB0YXJnZXQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhZGRBcnJheU9ic2VydmVy
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIG9ic2VydmVy
IG9iamVjdC4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBvcHRzIE9wdGlvbmFs
IGhhc2ggb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZwotICAgICAgICAgICAgICAg
ICAgICAgIGB3aWxsQ2hhbmdlYCBhbmQgYGRpZENoYW5nZWAgb3B0aW9uLgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBhZGRBcnJheU9ic2VydmVyOiBmdW5jdGlvbih0YXJnZXQsIG9wdHMp
IHsKLSAgICAgICAgICAgICAgICB2YXIgd2lsbENoYW5nZSA9IChvcHRzICYmIG9wdHMud2lsbENo
YW5nZSkgfHwgJ2FycmF5V2lsbENoYW5nZScsCi0gICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0g
KG9wdHMgJiYgb3B0cy5kaWRDaGFuZ2UpIHx8ICdhcnJheURpZENoYW5nZSc7Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgaGFzT2JzZXJ2ZXJzID0gZ2V0KHRoaXMsICdoYXNBcnJheU9ic2VydmVycycp
OwotICAgICAgICAgICAgICAgIGlmICghaGFzT2JzZXJ2ZXJzKSAKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdoYXNBcnJheU9ic2VydmVycycpOwotICAgICAg
ICAgICAgICAgIGFkZExpc3RlbmVyKHRoaXMsICdAYXJyYXk6YmVmb3JlJywgdGFyZ2V0LCB3aWxs
Q2hhbmdlKTsKLSAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcih0aGlzLCAnQGFycmF5OmNoYW5n
ZScsIHRhcmdldCwgZGlkQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc09ic2VydmVy
cykgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdoYXNBcnJh
eU9ic2VydmVycycpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92ZXMgYW4gYXJy
YXkgb2JzZXJ2ZXIgZnJvbSB0aGUgb2JqZWN0IGlmIHRoZSBvYnNlcnZlciBpcyBjdXJyZW50Ci0g
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWQuIENhbGxpbmcgdGhpcyBtZXRob2QgbXVsdGlw
bGUgdGltZXMgd2l0aCB0aGUgc2FtZSBvYmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICBo
YXZlIG5vIGVmZmVjdC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUFycmF5
T2JzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUaGUg
b2JqZWN0IG9ic2VydmluZyB0aGUgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7
SGFzaH0gb3B0cyBPcHRpb25hbCBoYXNoIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbmNsdWRp
bmcKLSAgICAgICAgICAgICAgICAgICAgICBgd2lsbENoYW5nZWAgYW5kIGBkaWRDaGFuZ2VgIG9w
dGlvbi4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVy
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVtb3ZlQXJyYXlPYnNlcnZlcjog
ZnVuY3Rpb24odGFyZ2V0LCBvcHRzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHdpbGxDaGFuZ2Ug
PSAob3B0cyAmJiBvcHRzLndpbGxDaGFuZ2UpIHx8ICdhcnJheVdpbGxDaGFuZ2UnLAotICAgICAg
ICAgICAgICAgIGRpZENoYW5nZSA9IChvcHRzICYmIG9wdHMuZGlkQ2hhbmdlKSB8fCAnYXJyYXlE
aWRDaGFuZ2UnOwotCi0gICAgICAgICAgICAgICAgdmFyIGhhc09ic2VydmVycyA9IGdldCh0aGlz
LCAnaGFzQXJyYXlPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJz
KSAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdoYXNBcnJh
eU9ic2VydmVycycpOwotICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKHRoaXMsICdAYXJy
YXk6YmVmb3JlJywgdGFyZ2V0LCB3aWxsQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICByZW1vdmVM
aXN0ZW5lcih0aGlzLCAnQGFycmF5OmNoYW5nZScsIHRhcmdldCwgZGlkQ2hhbmdlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKSAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlEaWRDaGFuZ2UodGhpcywgJ2hhc0FycmF5T2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgQmVjb21lcyB0cnVlIHdoZW5ldmVyIHRoZSBhcnJheSBjdXJyZW50bHkgaGFz
IG9ic2VydmVycyB3YXRjaGluZyBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIG9uIHRoZSBh
cnJheS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkge0Jvb2xlYW59IGhhc0FycmF5
T2JzZXJ2ZXJzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaGFzQXJyYXlPYnNl
cnZlcnM6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBoYXNM
aXN0ZW5lcnModGhpcywgJ0BhcnJheTpjaGFuZ2UnKSB8fCBoYXNMaXN0ZW5lcnModGhpcywgJ0Bh
cnJheTpiZWZvcmUnKTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbXBsZW1lbnRpbmcgYW4gb2JqZWN0IHRoYXQgc3Vw
cG9ydHMgYEVtYmVyLkFycmF5YCwgY2FsbCB0aGlzCi0gICAgICAgICAgICAgICAgICAgIG1ldGhv
ZCBqdXN0IGJlZm9yZSB0aGUgYXJyYXkgY29udGVudCBjaGFuZ2VzIHRvIG5vdGlmeSBhbnkgb2Jz
ZXJ2ZXJzIGFuZAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlIGFueSByZWxhdGVkIHBy
b3BlcnRpZXMuIFBhc3MgdGhlIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBjaGFuZ2UKLSAgICAgICAg
ICAgICAgICAgICAgYXMgd2VsbCBhcyBhIGRlbHRhIG9mIHRoZSBhbW91bnRzIHRvIGNoYW5nZS4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFycmF5Q29udGVudFdpbGxDaGFuZ2UKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0SWR4IFRoZSBzdGFydGluZyBp
bmRleCBpbiB0aGUgYXJyYXkgdGhhdCB3aWxsIGNoYW5nZS4KLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtOdW1iZXJ9IHJlbW92ZUFtdCBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2lsbCBi
ZSByZW1vdmVkLiBJZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgICBwYXNzIGBudWxsYCBhc3N1
bWVzIDAKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IGFkZEFtdCBUaGUgbnVt
YmVyIG9mIGl0ZW1zIHRoYXQgd2lsbCBiZSBhZGRlZC4gSWYgeW91Ci0gICAgICAgICAgICAgICAg
ICAgICAgcGFzcyBgbnVsbGAgYXNzdW1lcyAwLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtFbWJlci5BcnJheX0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBhcnJheUNvbnRlbnRXaWxsQ2hhbmdlOiBmdW5jdGlvbihzdGFydElkeCwgcmVtb3ZlQW10LCBh
ZGRBbXQpIHsKLQotICAgICAgICAgICAgICAgIC8vIGlmIG5vIGFyZ3MgYXJlIHBhc3NlZCBhc3N1
bWUgZXZlcnl0aGluZyBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRJZHggPSAwOwotICAgICAgICAg
ICAgICAgICAgICByZW1vdmVBbXQgPSBhZGRBbXQgPSAtMTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlQW10ID09PSB1bmRlZmluZWQpIAot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW10ID0tIDE7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhZGRBbXQgPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRBbXQgPS0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIEBlYWNoIHByb3h5IGlzIHNldCB1cCBpZiBhbnlvbmUgaXMgb2JzZXJ2aW5nIEBl
YWNoCi0gICAgICAgICAgICAgICAgaWYgKGlzV2F0Y2hpbmcodGhpcywgJ0BlYWNoJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdAZWFjaCcpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHNlbmRFdmVudCh0aGlzLCAnQGFycmF5OmJlZm9yZScsIFt0aGlz
LCBzdGFydElkeCwgcmVtb3ZlQW10LCBhZGRBbXRdKTsKLQotICAgICAgICAgICAgICAgIHZhciBy
ZW1vdmluZywgbGltOwotICAgICAgICAgICAgICAgIGlmIChzdGFydElkeCA+PSAwICYmIHJlbW92
ZUFtdCA+PSAwICYmIGdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlbW92aW5nID0gW107Ci0gICAgICAgICAgICAgICAgICAgIGxpbSA9
IHN0YXJ0SWR4ICsgcmVtb3ZlQW10OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHgg
PSBzdGFydElkeDsgaWR4IDwgbGltOyBpZHgrKykgCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZW1vdmluZy5wdXNoKHRoaXMub2JqZWN0QXQoaWR4KSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZpbmcgPSByZW1vdmVBbXQ7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudFdpbGxDaGFu
Z2UocmVtb3ZpbmcsIGFkZEFtdCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB5
b3UgYXJlIGltcGxlbWVudGluZyBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBgRW1iZXIuQXJyYXlg
LCBjYWxsIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGp1c3QgYWZ0ZXIgdGhlIGFy
cmF5IGNvbnRlbnQgY2hhbmdlcyB0byBub3RpZnkgYW55IG9ic2VydmVycyBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgaW52YWxpZGF0ZSBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzLiBQYXNzIHRoZSBz
dGFydGluZyBpbmRleCBvZiB0aGUgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIGFzIHdlbGwg
YXMgYSBkZWx0YSBvZiB0aGUgYW1vdW50cyB0byBjaGFuZ2UuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBhcnJheUNvbnRlbnREaWRDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtOdW1iZXJ9IHN0YXJ0SWR4IFRoZSBzdGFydGluZyBpbmRleCBpbiB0aGUgYXJyYXkgdGhh
dCBkaWQgY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gcmVtb3Zl
QW10IFRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQuIElmIHlvdQotICAgICAg
ICAgICAgICAgICAgICAgIHBhc3MgYG51bGxgIGFzc3VtZXMgMAotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge051bWJlcn0gYWRkQW10IFRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCB3ZXJlIGFk
ZGVkLiBJZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgICBwYXNzIGBudWxsYCBhc3N1bWVzIDAu
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFycmF5Q29udGVudERpZENoYW5nZTogZnVu
Y3Rpb24oc3RhcnRJZHgsIHJlbW92ZUFtdCwgYWRkQW10KSB7Ci0KLSAgICAgICAgICAgICAgICAv
LyBpZiBubyBhcmdzIGFyZSBwYXNzZWQgYXNzdW1lIGV2ZXJ5dGhpbmcgY2hhbmdlcwotICAgICAg
ICAgICAgICAgIGlmIChzdGFydElkeCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXJ0SWR4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW10ID0gYWRkQW10
ID0gLTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJlbW92ZUFtdCA9PT0gdW5kZWZpbmVkKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92
ZUFtdCA9LSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWRkQW10ID09PSB1bmRlZmluZWQp
IAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQW10ID0tIDE7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdmFyIGFkZGluZywgbGltOwotICAgICAgICAgICAgICAgIGlm
IChzdGFydElkeCA+PSAwICYmIGFkZEFtdCA+PSAwICYmIGdldCh0aGlzLCAnaGFzRW51bWVyYWJs
ZU9ic2VydmVycycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZGluZyA9IFtdOwotICAgICAg
ICAgICAgICAgICAgICBsaW0gPSBzdGFydElkeCArIGFkZEFtdDsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaWR4ID0gc3RhcnRJZHg7IGlkeCA8IGxpbTsgaWR4KyspIAotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkaW5nLnB1c2godGhpcy5vYmplY3RBdChpZHgpKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhZGRpbmcgPSBhZGRBbXQ7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5lbnVtZXJhYmxlQ29udGVu
dERpZENoYW5nZShyZW1vdmVBbXQsIGFkZGluZyk7Ci0gICAgICAgICAgICAgICAgc2VuZEV2ZW50
KHRoaXMsICdAYXJyYXk6Y2hhbmdlJywgW3RoaXMsIHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFt
dF0pOwotCi0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGdldCh0aGlzLCAnbGVuZ3RoJyks
Ci0gICAgICAgICAgICAgICAgY2FjaGVkRmlyc3QgPSBjYWNoZUZvcih0aGlzLCAnZmlyc3RPYmpl
Y3QnKSwKLSAgICAgICAgICAgICAgICBjYWNoZWRMYXN0ID0gY2FjaGVGb3IodGhpcywgJ2xhc3RP
YmplY3QnKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5vYmplY3RBdCgwKSAhPT0gY2FjaGVk
Rmlyc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdm
aXJzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlz
LCAnZmlyc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMub2JqZWN0QXQobGVuZ3RoLTEpICE9PSBjYWNoZWRMYXN0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gRU5VTUVSQVRFRCBQUk9QRVJU
SUVTCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyBhIHNwZWNpYWwgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gb2JzZXJ2ZSBp
bmRpdmlkdWFsIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIGFycmF5LiBK
dXN0IGdldCBhbiBlcXVpdmFsZW50IHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IGFuZCBpdCB3aWxs
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbiBlbnVtZXJhYmxlIHRoYXQgbWFwcyBhdXRv
bWF0aWNhbGx5IHRvIHRoZSBuYW1lZCBrZXkgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgIG1l
bWJlciBvYmplY3RzLgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBtZXJlbHkgd2FudCB0
byB3YXRjaCBmb3IgYW55IGl0ZW1zIGJlaW5nIGFkZGVkIG9yIHJlbW92ZWQgdG8gdGhlIGFycmF5
LAotICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGBbXWAgcHJvcGVydHkgaW5zdGVhZCBvZiBg
QGVhY2hgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBAZWFjaAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgICdAZWFjaCc6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fX2VhY2gpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gRVM2VE9ETzogR1JSUlJSCi0gICAgICAgICAgICAgICAgICAgIHZhciBFYWNoUHJveHkgPSBy
ZXF1aXJlTW9kdWxlKCdlbWJlci1ydW50aW1lL3N5c3RlbS9lYWNoX3Byb3h5JylbJ0VhY2hQcm94
eSddOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX19lYWNoID0gbmV3IEVhY2hQcm94eSh0
aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
X2VhY2g7Ci0gICAgICAgICAgICB9KQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUo
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUiLAotICAgIFsiZW1iZXItbWV0YWwvbWl4
aW4iLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVu
ZGVuY3kxX18uTWl4aW47Ci0gICAgICAgIHZhciByZXF1aXJlZCA9IF9fZGVwZW5kZW5jeTFfXy5y
ZXF1aXJlZDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAg
ICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgSW1wbGVtZW50cyBzb21lIHN0YW5kYXJkIG1ldGhvZHMgZm9y
IGNvbXBhcmluZyBvYmplY3RzLiBBZGQgdGhpcyBtaXhpbiB0bwotICAgICAgICAgICAgICBhbnkg
Y2xhc3MgeW91IGNyZWF0ZSB0aGF0IGNhbiBjb21wYXJlIGl0cyBpbnN0YW5jZXMuCi0KLSAgICAg
ICAgICAgICAgWW91IHNob3VsZCBpbXBsZW1lbnQgdGhlIGBjb21wYXJlKClgIG1ldGhvZC4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgQ29tcGFyYWJsZQotICAgICAgICAgICAgICBAbmFtZXNwYWNl
IEVtYmVyCi0gICAgICAgICAgICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICAgICAgICAgICovCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoewotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgdG8gcmV0dXJuIHRoZSByZXN1
bHQgb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLiBUaGUKLSAgICAgICAg
ICAgICAgICAgICAgY29tcGFyZSBtZXRob2Qgc2hvdWxkIHJldHVybjoKLQotICAgICAgICAgICAg
ICAgICAgICAtIGAtMWAgaWYgYGEgPCBiYAotICAgICAgICAgICAgICAgICAgICAtIGAwYCBpZiBg
YSA9PSBiYAotICAgICAgICAgICAgICAgICAgICAtIGAxYCBpZiBgYSA+IGJgCi0KLSAgICAgICAg
ICAgICAgICAgICAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByYWlzZXMgYW4gZXhjZXB0aW9uLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29tcGFyZQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0gYSB7T2JqZWN0fSB0aGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIGIge09iamVjdH0gdGhlIHNlY29uZCBvYmplY3QgdG8gY29tcGFy
ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtJbnRlZ2VyfSB0aGUgcmVzdWx0IG9mIHRo
ZSBjb21wYXJpc29uCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29tcGFyZTog
cmVxdWlyZWQoRnVuY3Rpb24pCi0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3Qi
LCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItcnVu
dGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLCAiZW1iZXItcnVudGltZS9taXhpbnMvY29udHJv
bGxlcl9jb250ZW50X21vZGVsX2FsaWFzX2RlcHJlY2F0aW9uIiwgImV4cG9ydHMiXSwKLSAgICBm
dW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19f
LCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2Rl
cGVuZGVuY3k3X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVt
YmVyLmFzc2VydCwgRW1iZXIuZGVwcmVjYXRlCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVu
Y3kyX18uZ2V0OwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVuY3kzX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5NF9fLk1peGluOwotICAg
ICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k1X18uY29tcHV0ZWQ7Ci0gICAgICAgIHZh
ciBBY3Rpb25IYW5kbGVyID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBDb250cm9sbGVyQ29udGVudE1vZGVsQWxpYXNEZXByZWNhdGlvbiA9IF9fZGVwZW5kZW5jeTdf
X1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgRW1iZXIuQ29udHJv
bGxlck1peGluYCBwcm92aWRlcyBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgYWxsIGNsYXNzZXMg
dGhhdAotICAgICAgICAgICAgICBjb21wb3NlIEVtYmVyJ3MgY29udHJvbGxlciBsYXllcjogYEVt
YmVyLkNvbnRyb2xsZXJgLAotICAgICAgICAgICAgICBgRW1iZXIuQXJyYXlDb250cm9sbGVyYCwg
YW5kIGBFbWJlci5PYmplY3RDb250cm9sbGVyYC4KLQotICAgICAgICAgICAgICBAY2xhc3MgQ29u
dHJvbGxlck1peGluCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAg
ICAgQHVzZXMgRW1iZXIuQWN0aW9uSGFuZGxlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZShBY3Rpb25IYW5kbGVyLCBDb250cm9s
bGVyQ29udGVudE1vZGVsQWxpYXNEZXByZWNhdGlvbiwgewotICAgICAgICAgICAgLyogZHVja3R5
cGUgYXMgYSBjb250cm9sbGVyICovCi0gICAgICAgICAgICBpc0NvbnRyb2xsZXI6IHRydWUsCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIHdoaWNo
IGFjdGlvbnMgZnJvbSB0aGUgdmlldyBzaG91bGQgYmUgc2VudC4KLQotICAgICAgICAgICAgICAg
ICAgICBGb3IgZXhhbXBsZSwgd2hlbiBhIEhhbmRsZWJhcnMgdGVtcGxhdGUgdXNlcyB0aGUgYHt7
YWN0aW9ufX1gIGhlbHBlciwKLSAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBhdHRlbXB0IHRv
IHNlbmQgdGhlIGFjdGlvbiB0byB0aGUgdmlldydzIGNvbnRyb2xsZXIncyBgdGFyZ2V0YC4KLQot
ICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBw
cm9wZXJ0eSBpcyBzZXQgdG8gdGhlIHJvdXRlciwgYW5kCi0gICAgICAgICAgICAgICAgICAgIGlz
IGluamVjdGVkIHdoZW4gYSBjb250cm9sbGVyIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBpbmplY3Rp
b24gaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBpbiBFbWJlci5BcHBsaWNhdGlvbiNi
dWlsZENvbnRhaW5lciwgYW5kIGlzIGFwcGxpZWQgYXMgcGFydCBvZiB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgYXBwbGljYXRpb25zIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEl0IGNhbiBhbHNv
IGJlIHNldCBhZnRlciBhIGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4g
aW5zdGFudGlhdGVkLCBmb3IgaW5zdGFuY2Ugd2hlbiB1c2luZyB0aGUgcmVuZGVyIGhlbHBlciBp
biBhCi0gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLCBvciB3aGVuIGEgY29udHJvbGxlciBp
cyB1c2VkIGFzIGFuIGBpdGVtQ29udHJvbGxlcmAuIEluIG1vc3QKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZXMgdGhlIGB0YXJnZXRgIHByb3BlcnR5IHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQg
dG8gdGhlIGxvZ2ljYWwKLSAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIgb2YgYWN0aW9ucyBm
b3IgdGhlIGNvbnRyb2xsZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHRhcmdl
dAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgdGFyZ2V0OiBudWxsLAotCi0gICAgICAgICAgICBjb250YWluZXI6IG51
bGwsCi0KLSAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXI6IG51bGwsCi0KLSAgICAgICAgICAg
IHN0b3JlOiBudWxsLAotCi0gICAgICAgICAgICBtb2RlbDogbnVsbCwKLSAgICAgICAgICAgIGNv
bnRlbnQ6IGNvbXB1dGVkLmFsaWFzKCdtb2RlbCcpLAotCi0gICAgICAgICAgICBkZXByZWNhdGVk
U2VuZEhhbmRsZXM6IGZ1bmN0aW9uKGFjdGlvbk5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gISF0aGlzW2FjdGlvbk5hbWVdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVw
cmVjYXRlZFNlbmQ6IGZ1bmN0aW9uKGFjdGlvbk5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIg
YXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoJycgKyB0aGlzICsgIiBoYXMgdGhlIGFjdGlvbiAiICsgYWN0aW9uTmFtZSArICIg
YnV0IGl0IGlzIG5vdCBhIGZ1bmN0aW9uIiwgdHlwZW9mIHRoaXNbYWN0aW9uTmFtZV0gPT09ICdm
dW5jdGlvbicpOwotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnQWN0aW9uIGhhbmRs
ZXJzIGltcGxlbWVudGVkIGRpcmVjdGx5IG9uIGNvbnRyb2xsZXJzIGFyZSBkZXByZWNhdGVkIGlu
IGZhdm9yIG9mIGFjdGlvbiBoYW5kbGVycyBvbiBhbiBgYWN0aW9uc2Agb2JqZWN0ICggYWN0aW9u
OiBgJyArIGFjdGlvbk5hbWUgKyAnYCBvbiAnICsgdGhpcyArICcpJywgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIHRoaXNbYWN0aW9uTmFtZV0uYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlh
c19kZXByZWNhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBf
X2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuZGVwcmVjYXRlCi0g
ICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgTWl4aW4g
PSBfX2RlcGVuZGVuY3kzX18uTWl4aW47Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRo
ZSBDb250cm9sbGVyQ29udGVudE1vZGVsQWxpYXNEZXByZWNhdGlvbiBtaXhpbiBpcyB1c2VkIHRv
IHByb3ZpZGUgYSB1c2VmdWwKLSAgICAgICAgICAgICAgZGVwcmVjYXRpb24gd2FybmluZyB3aGVu
IHNwZWNpZnlpbmcgYGNvbnRlbnRgIGRpcmVjdGx5IG9uIGEgYEVtYmVyLkNvbnRyb2xsZXJgCi0g
ICAgICAgICAgICAgICh3aXRob3V0IGFsc28gc3BlY2lmeWluZyBgbW9kZWxgKS4KLQotICAgICAg
ICAgICAgICBFbWJlciB2ZXJzaW9ucyBwcmlvciB0byAxLjcgdXNlZCBgbW9kZWxgIGFzIGFuIGFs
aWFzIG9mIGBjb250ZW50YCwgYnV0IGR1ZSB0bwotICAgICAgICAgICAgICBtdWNoIGNvbmZ1c2lv
biB0aGlzIGFsaWFzIHdhcyByZXZlcnNlZCAoc28gYGNvbnRlbnRgIGlzIG5vdyBhbiBhbGlhcyBv
ZiBgbW9kZWwpLgotCi0gICAgICAgICAgICAgIFRoaXMgY2hhbmdlIHJlZHVjZXMgbWFueSBjYXZl
YXRzIHdpdGggbW9kZWwvY29udGVudCwgYW5kIGFsc28gc2V0cyBhCi0gICAgICAgICAgICAgIHNp
bXBsZSBncm91bmQgcnVsZTogTmV2ZXIgc2V0IGEgY29udHJvbGxlcnMgY29udGVudCwgcmF0aGVy
IGFsd2F5cyBzZXQKLSAgICAgICAgICAgICAgaXQncyBtb2RlbCBhbmQgZW1iZXIgd2lsbCBkbyB0
aGUgcmlnaHQgdGhpbmcuCi0KLQotICAgICAgICAgICAgICBgRW1iZXIuQ29udHJvbGxlckNvbnRl
bnRNb2RlbEFsaWFzRGVwcmVjYXRpb25gIGlzIHVzZWQgaW50ZXJuYWxseSBieSBFbWJlciBpbgot
ICAgICAgICAgICAgICBgRW1iZXIuQ29udHJvbGxlcmAuCi0KLSAgICAgICAgICAgICAgQGNsYXNz
IENvbnRyb2xsZXJDb250ZW50TW9kZWxBbGlhc0RlcHJlY2F0aW9uCi0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBNaXhpbi5jcmVhdGUoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBwcml2YXRlCi0KLSAgICAgICAgICAgICAgICAgICAgTW92ZXMgYGNvbnRlbnRgIHRvIGBt
b2RlbGAgIGF0IGV4dGVuZCB0aW1lIGlmIGEgYG1vZGVsYCBpcyBub3QgYWxzbyBzcGVjaWZpZWQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IG1vZGlmaWVz
IHRoZSBtaXhpbiB0aGVtc2VsdmVzLCB3aGljaCBpcyB0ZWNobmljYWxseQotICAgICAgICAgICAg
ICAgICAgICBkdWJpb3VzIGJ1dCBpcyBwcmFjdGljYWxseSBvZiBsaXR0bGUgY29uc2VxdWVuY2Uu
IFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgZnV0dXJlLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2lsbE1lcmdlTWl4aW4KLSAgICAgICAgICAgICAg
ICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2ls
bE1lcmdlTWl4aW46IGZ1bmN0aW9uKHByb3BzKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FsbGlu
ZyBzdXBlciBpcyBvbmx5IE9LIGhlcmUgc2luY2Ugd2UgS05PVyB0aGF0Ci0gICAgICAgICAgICAg
ICAgLy8gdGhlcmUgaXMgYW5vdGhlciBNaXhpbiBsb2FkZWQgZmlyc3QuCi0gICAgICAgICAgICAg
ICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgICAgICAgICAg
IHZhciBtb2RlbFNwZWNpZmllZCA9ICEhcHJvcHMubW9kZWw7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAocHJvcHMuY29udGVudCAmJiAhbW9kZWxTcGVjaWZpZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcHMubW9kZWwgPSBwcm9wcy5jb250ZW50OwotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgcHJvcHNbJ2NvbnRlbnQnXTsKLQotICAgICAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNh
dGUoJ0RvIG5vdCBzcGVjaWZ5IGBjb250ZW50YCBvbiBhIENvbnRyb2xsZXIsIHVzZSBgbW9kZWxg
IGluc3RlYWQuJywgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9jb3B5
YWJsZSIsCi0gICAgWyJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJv
cGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2Zy
ZWV6YWJsZSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1iZXItbWV0YWwvZXJy
b3IiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9f
LCBfX2RlcGVuZGVuY3k2X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3Vi
bW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLQotICAgICAgICB2YXIgZ2V0
ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTJf
Xy5zZXQ7Ci0gICAgICAgIHZhciByZXF1aXJlZCA9IF9fZGVwZW5kZW5jeTNfXy5yZXF1aXJlZDsK
LSAgICAgICAgdmFyIEZyZWV6YWJsZSA9IF9fZGVwZW5kZW5jeTRfXy5GcmVlemFibGU7Ci0gICAg
ICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTNfXy5NaXhpbjsKLSAgICAgICAgdmFyIGZtdCA9
IF9fZGVwZW5kZW5jeTVfXy5mbXQ7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRl
bmN5Nl9fWyJkZWZhdWx0Il07Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgSW1wbGVt
ZW50cyBzb21lIHN0YW5kYXJkIG1ldGhvZHMgZm9yIGNvcHlpbmcgYW4gb2JqZWN0LiBBZGQgdGhp
cyBtaXhpbiB0bwotICAgICAgICAgICAgICBhbnkgb2JqZWN0IHlvdSBjcmVhdGUgdGhhdCBjYW4g
Y3JlYXRlIGEgY29weSBvZiBpdHNlbGYuIFRoaXMgbWl4aW4gaXMKLSAgICAgICAgICAgICAgYWRk
ZWQgYXV0b21hdGljYWxseSB0byB0aGUgYnVpbHQtaW4gYXJyYXkuCi0KLSAgICAgICAgICAgICAg
WW91IHNob3VsZCBnZW5lcmFsbHkgaW1wbGVtZW50IHRoZSBgY29weSgpYCBtZXRob2QgdG8gcmV0
dXJuIGEgY29weSBvZiB0aGUKLSAgICAgICAgICAgICAgcmVjZWl2ZXIuCi0KLSAgICAgICAgICAg
ICAgTm90ZSB0aGF0IGBmcm96ZW5Db3B5KClgIHdpbGwgb25seSB3b3JrIGlmIHlvdSBhbHNvIGlt
cGxlbWVudAotICAgICAgICAgICAgICBgRW1iZXIuRnJlZXphYmxlYC4KLQotICAgICAgICAgICAg
ICBAY2xhc3MgQ29weWFibGUKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAc2luY2UgRW1iZXIgMC45Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBPdmVycmlkZSB0byByZXR1cm4gYSBjb3B5IG9mIHRoZSByZWNlaXZlci4g
RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByYWlzZXMKLSAgICAgICAgICAgICAgICAgICAgYW4gZXhj
ZXB0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY29weQotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge0Jvb2xlYW59IGRlZXAgaWYgYHRydWVgLCBhIGRlZXAgY29weSBvZiB0
aGUgb2JqZWN0IHNob3VsZCBiZSBtYWRlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09i
amVjdH0gY29weSBvZiByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGNvcHk6IHJlcXVpcmVkKEZ1bmN0aW9uKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIElmIHRoZSBvYmplY3QgaW1wbGVtZW50cyBgRW1iZXIuRnJlZXphYmxlYCwgdGhl
biB0aGlzIHdpbGwgcmV0dXJuIGEgbmV3Ci0gICAgICAgICAgICAgICAgICAgIGNvcHkgaWYgdGhl
IG9iamVjdCBpcyBub3QgZnJvemVuIGFuZCB0aGUgcmVjZWl2ZXIgaWYgdGhlIG9iamVjdCBpcyBm
cm96ZW4uCi0KLSAgICAgICAgICAgICAgICAgICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB5b3Ug
dHJ5IHRvIGNhbGwgdGhpcyBtZXRob2Qgb24gYSBvYmplY3QgdGhhdCBkb2VzCi0gICAgICAgICAg
ICAgICAgICAgIG5vdCBzdXBwb3J0IGZyZWV6aW5nLgotCi0gICAgICAgICAgICAgICAgICAgIFlv
dSBzaG91bGQgdXNlIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IGEgY29weSBvZiBhIGZy
ZWV6YWJsZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgc2luY2UgYSBmcmVlemFibGUgb2Jq
ZWN0IGNhbiBzaW1wbHkgcmV0dXJuIGl0c2VsZiB3aXRob3V0IGFjdHVhbGx5Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN1bWluZyBtb3JlIG1lbW9yeS4KLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGZyb3plbkNvcHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBj
b3B5IG9mIHJlY2VpdmVyIG9yIHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZnJvemVuQ29weTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyZWV6
YWJsZSAmJiBGcmVlemFibGUuZGV0ZWN0KHRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnZXQodGhpcywgJ2lzRnJvemVuJykgPyB0aGlzIDogdGhpcy5jb3B5KCkuZnJlZXplKCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVtYmVyRXJyb3IoZm10KCIlQCBkb2VzIG5vdCBzdXBwb3J0IGZyZWV6aW5nIiwgW3RoaXNdKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsK
LSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2RlZmVycmVkIiwKLSAgICBbImVtYmVy
LW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL21p
eGluIiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVt
YmVyLXJ1bnRpbWUvZXh0L3JzdnAiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRf
XywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZXhwb3J0c19fKSB7Ci0gICAg
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkZFQVRVUkVTLCBFbWJlci5UZXN0Ci0gICAgICAg
IHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgTWl4aW4gPSBfX2Rl
cGVuZGVuY3kzX18uTWl4aW47Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTRf
Xy5jb21wdXRlZDsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgUlNWUCA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotCi0gICAg
ICAgIHZhciBhc3luY1N0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoRW1iZXIu
VGVzdCAmJiBFbWJlci5UZXN0LmFkYXB0ZXIpIHsKLSAgICAgICAgICAgICAgICBFbWJlci5UZXN0
LmFkYXB0ZXIuYXN5bmNTdGFydCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAg
ICAgIHZhciBhc3luY0VuZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKEVtYmVyLlRl
c3QgJiYgRW1iZXIuVGVzdC5hZGFwdGVyKSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuVGVzdC5h
ZGFwdGVyLmFzeW5jRW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UlNWUC5jb25maWd1cmUoJ2FzeW5jJywgZnVuY3Rpb24oY2FsbGJhY2ssIHByb21pc2UpIHsKLSAg
ICAgICAgICAgIHZhciBhc3luYyA9ICFydW4uY3VycmVudFJ1bkxvb3A7Ci0KLSAgICAgICAgICAg
IGlmIChFbWJlci50ZXN0aW5nICYmIGFzeW5jKSB7Ci0gICAgICAgICAgICAgICAgYXN5bmNTdGFy
dCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBydW4uYmFja2J1cm5lci5zY2hlZHVs
ZSgnYWN0aW9ucycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChFbWJlci50ZXN0
aW5nICYmIGFzeW5jKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzeW5jRW5kKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb21pc2UpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIFJTVlAuUHJvbWlzZS5wcm90b3R5cGUuZmFp
bCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBsYWJlbCkgewotICAgICAgICAgICAgRW1iZXIuZGVwcmVj
YXRlKCdSU1ZQLlByb21pc2UuZmFpbCBoYXMgYmVlbiByZW5hbWVkIGFzIFJTVlAuUHJvbWlzZS5j
YXRjaCcpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXNbJ2NhdGNoJ10oY2FsbGJhY2ssIGxhYmVs
KTsKLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIK
LSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQot
Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAY2xhc3MgRGVmZXJyZWQKLSAgICAgICAgICAg
ICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19f
WyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIEFkZCBoYW5kbGVycyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgRGVmZXJyZWQgb2Jq
ZWN0IGlzIHJlc29sdmVkIG9yIHJlamVjdGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgdGhlbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZG9uZQotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUg
Y2FsbGVkIHdoZW4gZmFpbGVkCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGhl
bjogZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0LCBsYWJlbCkgewotICAgICAgICAgICAgICAgIHZh
ciBkZWZlcnJlZCwgcHJvbWlzZSwgZW50aXR5OwotCi0gICAgICAgICAgICAgICAgZW50aXR5ID0g
dGhpczsKLSAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGdldCh0aGlzLCAnX2RlZmVycmVkJyk7
Ci0gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7Ci0KLSAgICAgICAg
ICAgICAgICBmdW5jdGlvbiBmdWxmaWxsbWVudEhhbmRsZXIoZnVsZmlsbG1lbnQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZ1bGZpbGxtZW50ID09PSBwcm9taXNlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShlbnRpdHkpOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZnVsZmls
bG1lbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihyZXNvbHZlICYmIGZ1bGZpbGxtZW50SGFu
ZGxlciwgcmVqZWN0LCBsYWJlbCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZSBhIERlZmVycmVkIG9iamVjdCBhbmQgY2FsbCBh
bnkgYGRvbmVDYWxsYmFja3NgIHdpdGggdGhlIGdpdmVuIGFyZ3MuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCByZXNvbHZlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
cmVzb2x2ZTogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVmZXJyZWQs
IHByb21pc2U7Ci0KLSAgICAgICAgICAgICAgICBkZWZlcnJlZCA9IGdldCh0aGlzLCAnX2RlZmVy
cmVkJyk7Ci0gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZShwcm9taXNlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmVqZWN0IGEgRGVmZXJyZWQgb2JqZWN0IGFuZCBjYWxsIGFueSBgZmFpbENhbGxiYWNrc2Ag
d2l0aCB0aGUgZ2l2ZW4gYXJncy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlamVj
dAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlamVjdDogZnVuY3Rpb24odmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBnZXQodGhpcywgJ19kZWZlcnJlZCcpLnJlamVjdCh2YWx1
ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfZGVmZXJyZWQ6IGNvbXB1dGVkKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJlY2F0ZSgnVXNhZ2Ugb2YgRW1i
ZXIuRGVmZXJyZWRNaXhpbiBvciBFbWJlci5EZWZlcnJlZCBpcyBkZXByZWNhdGVkLicsIHRoaXMu
X3N1cHByZXNzRGVmZXJyZWREZXByZWNhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
UlNWUC5kZWZlcignRW1iZXI6IERlZmVycmVkTWl4aW4gLSAnICsgdGhpcyk7Ci0gICAgICAgICAg
ICB9KQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4
aW5zL2VudW1lcmFibGUiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9w
cm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0
aWxzIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMi
LCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwg
ImVtYmVyLW1ldGFsL2V2ZW50cyIsICJlbWJlci1ydW50aW1lL2NvbXBhcmUiLCAiZXhwb3J0cyJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVu
ZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2
X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9f
ZGVwZW5kZW5jeTEwX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAg
ICAvLyBIRUxQRVJTCi0gICAgICAgIC8vCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRl
bmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0
OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGFw
cGx5ID0gX19kZXBlbmRlbmN5NF9fLmFwcGx5OwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVu
ZGVuY3k1X18uTWl4aW47Ci0gICAgICAgIHZhciByZXF1aXJlZCA9IF9fZGVwZW5kZW5jeTVfXy5y
ZXF1aXJlZDsKLSAgICAgICAgdmFyIGFsaWFzTWV0aG9kID0gX19kZXBlbmRlbmN5NV9fLmFsaWFz
TWV0aG9kOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5kZW5jeTZfXy5pbmRleE9mOwot
ICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k3X18uY29tcHV0ZWQ7Ci0gICAgICAg
IHZhciBwcm9wZXJ0eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3k4X18ucHJvcGVydHlXaWxsQ2hh
bmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3k4X18ucHJv
cGVydHlEaWRDaGFuZ2U7Ci0gICAgICAgIHZhciBhZGRMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTlf
Xy5hZGRMaXN0ZW5lcjsKLSAgICAgICAgdmFyIHJlbW92ZUxpc3RlbmVyID0gX19kZXBlbmRlbmN5
OV9fLnJlbW92ZUxpc3RlbmVyOwotICAgICAgICB2YXIgc2VuZEV2ZW50ID0gX19kZXBlbmRlbmN5
OV9fLnNlbmRFdmVudDsKLSAgICAgICAgdmFyIGhhc0xpc3RlbmVycyA9IF9fZGVwZW5kZW5jeTlf
Xy5oYXNMaXN0ZW5lcnM7Ci0gICAgICAgIHZhciBjb21wYXJlID0gX19kZXBlbmRlbmN5MTBfX1si
ZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBhX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
OwotCi0gICAgICAgIHZhciBjb250ZXh0cyA9IFtdOwotCi0gICAgICAgIGZ1bmN0aW9uIHBvcEN0
eCgpIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0cy5sZW5ndGggPT09IDAgPyB7fSA6IGNv
bnRleHRzLnBvcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcHVzaEN0eChjdHgp
IHsKLSAgICAgICAgICAgIGNvbnRleHRzLnB1c2goY3R4KTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaXRlcihrZXksIHZhbHVlKSB7Ci0g
ICAgICAgICAgICB2YXIgdmFsdWVQcm92aWRlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDI7Ci0K
LSAgICAgICAgICAgIGZ1bmN0aW9uIGkoaXRlbSkgewotICAgICAgICAgICAgICAgIHZhciBjdXIg
PSBnZXQoaXRlbSwga2V5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVQcm92aWRlZCA/
IHZhbHVlID09PSBjdXIgOiAhIWN1cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIGk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyBtaXhp
biBkZWZpbmVzIHRoZSBjb21tb24gaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IGVudW1lcmFibGUg
b2JqZWN0cwotICAgICAgICAgICAgICBpbiBFbWJlci4gTW9zdCBvZiB0aGVzZSBtZXRob2RzIGZv
bGxvdyB0aGUgc3RhbmRhcmQgQXJyYXkgaXRlcmF0aW9uCi0gICAgICAgICAgICAgIEFQSSBkZWZp
bmVkIHVwIHRvIEphdmFTY3JpcHQgMS44IChleGNsdWRpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmVh
dHVyZXMgdGhhdAotICAgICAgICAgICAgICBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gb2xkZXIgdmVy
c2lvbnMgb2YgSmF2YVNjcmlwdCkuCi0KLSAgICAgICAgICAgICAgVGhpcyBtaXhpbiBpcyBhcHBs
aWVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIEFycmF5IGNsYXNzIG9uIHBhZ2UgbG9hZCwgc28geW91
Ci0gICAgICAgICAgICAgIGNhbiB1c2UgYW55IG9mIHRoZXNlIG1ldGhvZHMgb24gc2ltcGxlIGFy
cmF5cy4gSWYgQXJyYXkgYWxyZWFkeSBpbXBsZW1lbnRzCi0gICAgICAgICAgICAgIG9uZSBvZiB0
aGVzZSBtZXRob2RzLCB0aGUgbWl4aW4gd2lsbCBub3Qgb3ZlcnJpZGUgdGhlbS4KLQotICAgICAg
ICAgICAgICAjIyBXcml0aW5nIFlvdXIgT3duIEVudW1lcmFibGUKLQotICAgICAgICAgICAgICBU
byBtYWtlIHlvdXIgb3duIGN1c3RvbSBjbGFzcyBlbnVtZXJhYmxlLCB5b3UgbmVlZCB0d28gaXRl
bXM6Ci0KLSAgICAgICAgICAgICAgMS4gWW91IG11c3QgaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eS4g
VGhpcyBwcm9wZXJ0eSBzaG91bGQgY2hhbmdlIHdoZW5ldmVyCi0gICAgICAgICAgICAgICAgIHRo
ZSBudW1iZXIgb2YgaXRlbXMgaW4geW91ciBlbnVtZXJhYmxlIG9iamVjdCBjaGFuZ2VzLiBJZiB5
b3UgdXNlIHRoaXMKLSAgICAgICAgICAgICAgICAgd2l0aCBhbiBgRW1iZXIuT2JqZWN0YCBzdWJj
bGFzcywgeW91IHNob3VsZCBiZSBzdXJlIHRvIGNoYW5nZSB0aGUgbGVuZ3RoCi0gICAgICAgICAg
ICAgICAgIHByb3BlcnR5IHVzaW5nIGBzZXQoKS5gCi0KLSAgICAgICAgICAgICAgMi4gWW91IG11
c3QgaW1wbGVtZW50IGBuZXh0T2JqZWN0KCkuYCBTZWUgZG9jdW1lbnRhdGlvbi4KLQotICAgICAg
ICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZXNlIHR3byBtZXRob2RzIGltcGxlbWVudGVkLCBhcHBs
eSB0aGUgYEVtYmVyLkVudW1lcmFibGVgIG1peGluCi0gICAgICAgICAgICAgIHRvIHlvdXIgY2xh
c3MgYW5kIHlvdSB3aWxsIGJlIGFibGUgdG8gZW51bWVyYXRlIHRoZSBjb250ZW50cyBvZiB5b3Vy
IG9iamVjdAotICAgICAgICAgICAgICBsaWtlIGFueSBvdGhlciBjb2xsZWN0aW9uLgotCi0gICAg
ICAgICAgICAgICMjIFVzaW5nIEVtYmVyIEVudW1lcmF0aW9uIHdpdGggT3RoZXIgTGlicmFyaWVz
Ci0KLSAgICAgICAgICAgICAgTWFueSBvdGhlciBsaWJyYXJpZXMgcHJvdmlkZSBzb21lIGtpbmQg
b2YgaXRlcmF0b3Igb3IgZW51bWVyYXRpb24gbGlrZQotICAgICAgICAgICAgICBmYWNpbGl0eS4g
VGhpcyBpcyBvZnRlbiB3aGVyZSB0aGUgbW9zdCBjb21tb24gQVBJIGNvbmZsaWN0cyBvY2N1ci4K
LSAgICAgICAgICAgICAgRW1iZXIncyBBUEkgaXMgZGVzaWduZWQgdG8gYmUgYXMgZnJpZW5kbHkg
YXMgcG9zc2libGUgd2l0aCBvdGhlcgotICAgICAgICAgICAgICBsaWJyYXJpZXMgYnkgaW1wbGVt
ZW50aW5nIG9ubHkgbWV0aG9kcyB0aGF0IG1vc3RseSBjb3JyZXNwb25kIHRvIHRoZQotICAgICAg
ICAgICAgICBKYXZhU2NyaXB0IDEuOCBBUEkuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEVudW1l
cmFibGUKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc2lu
Y2UgRW1iZXIgMC45Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVs
dCJdID0gTWl4aW4uY3JlYXRlKHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBtYWtlIHlvdXIgY2xhc3MgZW51bWVyYWJsZS4K
LQotICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGwgcmVwZWF0ZWRs
eSBkdXJpbmcgZW51bWVyYXRpb24uIFRoZSBpbmRleCB2YWx1ZQotICAgICAgICAgICAgICAgICAg
ICB3aWxsIGFsd2F5cyBiZWdpbiB3aXRoIDAgYW5kIGluY3JlbWVudCBtb25vdG9uaWNhbGx5LiBZ
b3UgZG9uJ3QgaGF2ZSB0bwotICAgICAgICAgICAgICAgICAgICByZWx5IG9uIHRoZSBpbmRleCB2
YWx1ZSB0byBkZXRlcm1pbmUgd2hhdCBvYmplY3QgdG8gcmV0dXJuLCBidXQgeW91IHNob3VsZAot
ICAgICAgICAgICAgICAgICAgICBhbHdheXMgY2hlY2sgdGhlIHZhbHVlIGFuZCBzdGFydCBmcm9t
IHRoZSBiZWdpbm5pbmcgd2hlbiB5b3Ugc2VlIHRoZQotICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0ZWQgaW5kZXggaXMgMC4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgYHByZXZpb3VzT2Jq
ZWN0YCBpcyB0aGUgb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGZyb20gdGhlIGxhc3QgY2FsbAot
ICAgICAgICAgICAgICAgICAgICB0byBgbmV4dE9iamVjdGAgZm9yIHRoZSBjdXJyZW50IGl0ZXJh
dGlvbi4gVGhpcyBpcyBhIHVzZWZ1bCB3YXkgdG8KLSAgICAgICAgICAgICAgICAgICAgbWFuYWdl
IGl0ZXJhdGlvbiBpZiB5b3UgYXJlIHRyYWNpbmcgYSBsaW5rZWQgbGlzdCwgZm9yIGV4YW1wbGUu
Ci0KLSAgICAgICAgICAgICAgICAgICAgRmluYWxseSB0aGUgY29udGV4dCBwYXJhbWV0ZXIgd2ls
bCBhbHdheXMgY29udGFpbiBhIGhhc2ggeW91IGNhbiB1c2UgYXMKLSAgICAgICAgICAgICAgICAg
ICAgYSAic2NyYXRjaHBhZCIgdG8gbWFpbnRhaW4gYW55IG90aGVyIHN0YXRlIHlvdSBuZWVkIGlu
IG9yZGVyIHRvIGl0ZXJhdGUKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVybHkuIFRoZSBjb250
ZXh0IG9iamVjdCBpcyByZXVzZWQgYW5kIGlzIG5vdCByZXNldCBiZXR3ZWVuCi0gICAgICAgICAg
ICAgICAgICAgIGl0ZXJhdGlvbnMgc28gbWFrZSBzdXJlIHlvdSBzZXR1cCB0aGUgY29udGV4dCB3
aXRoIGEgZnJlc2ggc3RhdGUgd2hlbmV2ZXIKLSAgICAgICAgICAgICAgICAgICAgdGhlIGluZGV4
IHBhcmFtZXRlciBpcyAwLgotCi0gICAgICAgICAgICAgICAgICAgIEdlbmVyYWxseSBpdGVyYXRv
cnMgd2lsbCBjb250aW51ZSB0byBjYWxsIGBuZXh0T2JqZWN0YCB1bnRpbCB0aGUgaW5kZXgKLSAg
ICAgICAgICAgICAgICAgICAgcmVhY2hlcyB0aGUgeW91ciBjdXJyZW50IGxlbmd0aC0xLiBJZiB5
b3UgcnVuIG91dCBvZiBkYXRhIGJlZm9yZSB0aGlzCi0gICAgICAgICAgICAgICAgICAgIHRpbWUg
Zm9yIHNvbWUgcmVhc29uLCB5b3Ugc2hvdWxkIHNpbXBseSByZXR1cm4gdW5kZWZpbmVkLgotCi0g
ICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0
aG9kIHNpbXBseSBsb29rcyB1cCB0aGUgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgIFRoaXMg
d29ya3MgZ3JlYXQgb24gYW55IEFycmF5LWxpa2Ugb2JqZWN0cy4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIG5leHRPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1i
ZXJ9IGluZGV4IHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBpdGVyYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHByZXZpb3VzT2JqZWN0IHRoZSB2YWx1ZSByZXR1cm5l
ZCBieSB0aGUgbGFzdCBjYWxsIHRvCi0gICAgICAgICAgICAgICAgICAgICAgYG5leHRPYmplY3Rg
LgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gY29udGV4dCBhIGNvbnRleHQg
b2JqZWN0IHlvdSBjYW4gdXNlIHRvIG1haW50YWluIHN0YXRlLgotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtPYmplY3R9IHRoZSBuZXh0IG9iamVjdCBpbiB0aGUgaXRlcmF0aW9uIG9yIHVu
ZGVmaW5lZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5leHRPYmplY3Q6IHJl
cXVpcmVkKEZ1bmN0aW9uKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYSBjb2xsZWN0aW9u
LiBUaGlzIGlzIHVzdWFsbHkKLSAgICAgICAgICAgICAgICAgICAgdXNlZCBieSBiaW5kaW5ncyBh
bmQgb3RoZXIgcGFydHMgb2YgdGhlIGZyYW1ld29yayB0byBleHRyYWN0IGEgc2luZ2xlCi0gICAg
ICAgICAgICAgICAgICAgIG9iamVjdCBpZiB0aGUgZW51bWVyYWJsZSBjb250YWlucyBvbmx5IG9u
ZSBpdGVtLgotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhv
ZCwgeW91IHNob3VsZCBpbXBsZW1lbnQgaXQgc28gdGhhdCBpdCB3aWxsCi0gICAgICAgICAgICAg
ICAgICAgIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgdmFsdWUgZWFjaCB0aW1lIGl0IGlzIGNhbGxl
ZC4gSWYgeW91ciBlbnVtZXJhYmxlCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIG9ubHkg
b25lIG9iamVjdCwgdGhpcyBtZXRob2Qgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhhdCBvYmplY3Qu
Ci0gICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZW51bWVyYWJsZSBpcyBlbXB0eSwgdGhpcyBt
ZXRob2Qgc2hvdWxkIHJldHVybiBgdW5kZWZpbmVkYC4KLQotICAgICAgICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbImEiLCAiYiIsICJj
Il07Ci0gICAgICAgICAgICAgICAgICAgIGFyci5nZXQoJ2ZpcnN0T2JqZWN0Jyk7ICAvLyAiYSIK
LQotICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107Ci0gICAgICAgICAgICAgICAgICAg
IGFyci5nZXQoJ2ZpcnN0T2JqZWN0Jyk7ICAvLyB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGZpcnN0T2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIG9iamVjdCBvciB1bmRlZmluZWQK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmaXJzdE9iamVjdDogY29tcHV0ZWQo
J1tdJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnbGVuZ3Ro
JykgPT09IDApIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkIDsKLQotICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZSBnZW5lcmljIGVudW1lcmFibGVzCi0gICAgICAgICAgICAg
ICAgdmFyIGNvbnRleHQgPSBwb3BDdHgoKSwgcmV0OwotICAgICAgICAgICAgICAgIHJldCA9IHRo
aXMubmV4dE9iamVjdCgwLCBudWxsLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBwdXNoQ3R4
KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEhlbHBlciBtZXRob2QgcmV0
dXJucyB0aGUgbGFzdCBvYmplY3QgZnJvbSBhIGNvbGxlY3Rpb24uIElmIHlvdXIgZW51bWVyYWJs
ZQotICAgICAgICAgICAgICAgICAgICBjb250YWlucyBvbmx5IG9uZSBvYmplY3QsIHRoaXMgbWV0
aG9kIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoYXQgb2JqZWN0LgotICAgICAgICAgICAgICAgICAg
ICBJZiB5b3VyIGVudW1lcmFibGUgaXMgZW1wdHksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4g
YHVuZGVmaW5lZGAuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICB2YXIgYXJyID0gWyJhIiwgImIiLCAiYyJdOwotICAgICAgICAgICAgICAg
ICAgICBhcnIuZ2V0KCdsYXN0T2JqZWN0Jyk7ICAvLyAiYyIKLQotICAgICAgICAgICAgICAgICAg
ICB2YXIgYXJyID0gW107Ci0gICAgICAgICAgICAgICAgICAgIGFyci5nZXQoJ2xhc3RPYmplY3Qn
KTsgIC8vIHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgbGFzdE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJu
IHtPYmplY3R9IHRoZSBsYXN0IG9iamVjdCBvciB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBsYXN0T2JqZWN0OiBjb21wdXRlZCgnW10nLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICB2YXIgbGVuID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAg
ICAgICAgICBpZiAobGVuID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZCA7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBwb3BDdHgoKSwgaWR4ID0gMCwg
Y3VyLCBsYXN0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxhc3QgPSBjdXI7Ci0gICAgICAgICAgICAgICAgICAgIGN1ciA9IHRoaXMubmV4dE9iamVj
dChpZHgrKywgbGFzdCwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHdoaWxlIChjdXIgIT09IHVuZGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgcHVzaEN0eChj
b250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIH0pLAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYg
dGhlIHBhc3NlZCBvYmplY3QgY2FuIGJlIGZvdW5kIGluIHRoZSByZWNlaXZlci4gVGhlCi0gICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGl0ZXJhdGUgdGhyb3VnaCB0aGUg
ZW51bWVyYWJsZSB1bnRpbCB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIGlzIGZvdW5k
LiBZb3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB3aXRoIGEgbW9yZSBlZmZpY2llbnQgdmVy
c2lvbi4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBhcnIgPSBbImEiLCAiYiIsICJjIl07Ci0gICAgICAgICAgICAgICAgICAgIGFy
ci5jb250YWlucygiYSIpOyAvLyB0cnVlCi0gICAgICAgICAgICAgICAgICAgIGFyci5jb250YWlu
cygieiIpOyAvLyBmYWxzZQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGNvbnRhaW5zCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBvYmogVGhlIG9iamVjdCB0byBzZWFyY2ggZm9yLgotICAgICAgICAgICAgICAgICAgICBA
cmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgb2JqZWN0IGlzIGZvdW5kIGluIGVudW1lcmFibGUu
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKG9i
aikgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmQoZnVuY3Rpb24oaXRlbSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gb2JqOwotICAgICAgICAgICAgICAg
IH0pICE9PSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgSXRlcmF0ZXMgdGhyb3VnaCB0aGUgZW51bWVyYWJsZSwgY2FsbGlu
ZyB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9uIGVhY2gKLSAgICAgICAgICAgICAgICAgICAgaXRlbS4g
VGhpcyBtZXRob2QgY29ycmVzcG9uZHMgdG8gdGhlIGBmb3JFYWNoKClgIG1ldGhvZCBkZWZpbmVk
IGluCi0gICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgMS42LgotCi0gICAgICAgICAgICAg
ICAgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZv
bGxvd2luZyBzaWduYXR1cmUgKGFsbAotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFy
ZSBvcHRpb25hbCk6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBj
dXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLSBgaW5k
ZXhgIGlzIHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAg
ICAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0K
LSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ss
IHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIHRhcmdldAotICAgICAgICAgICAgICAgICAg
ICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBgdGhpc2Agb24gdGhlIGNvbnRleHQuIFRoaXMg
aXMgYSBnb29kIHdheQotICAgICAgICAgICAgICAgICAgICB0byBnaXZlIHlvdXIgaXRlcmF0b3Ig
ZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGZvckVhY2gKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHVzZQotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oY2FsbGJhY2ssIHRhcmdldCkgewot
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIAotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCkgOwotICAgICAgICAgICAgICAg
IHZhciBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpLCBsYXN0ID0gbnVsbCwgY29udGV4dCA9IHBv
cEN0eCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSAKLSAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IG5leHQgPSB0aGlzLm5leHRPYmplY3QoaWR4LCBsYXN0LCBjb250ZXh0KSA7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGFyZ2V0LCBuZXh0LCBpZHgsIHRoaXMpOwotICAgICAg
ICAgICAgICAgICAgICBsYXN0ID0gbmV4dCA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGxhc3QgPSBudWxsIDsKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gcHVzaEN0eChj
b250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcyA7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWxpYXMgZm9yIGBtYXBCeWAK
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGdldEVhY2gKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGtleSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtBcnJheX0gVGhlIG1hcHBlZCBhcnJheS4KLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBnZXRFYWNoOiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5tYXBCeShrZXkpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIHZhbHVlIG9uIHRoZSBuYW1lZCBw
cm9wZXJ0eSBmb3IgZWFjaCBtZW1iZXIuIFRoaXMgaXMgbW9yZQotICAgICAgICAgICAgICAgICAg
ICBlZmZpY2llbnQgdGhhbiB1c2luZyBvdGhlciBtZXRob2RzIGRlZmluZWQgb24gdGhpcyBoZWxw
ZXIuIElmIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50cyBFbWJlci5P
YnNlcnZhYmxlLCB0aGUgdmFsdWUgd2lsbCBiZSBjaGFuZ2VkIHRvIGBzZXQoKSxgIG90aGVyd2lz
ZQotICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIGJlIHNldCBkaXJlY3RseS4gYG51bGxgIG9i
amVjdHMgYXJlIHNraXBwZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRFYWNo
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB0byBzZXQK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlIFRoZSBvYmplY3QgdG8g
c2V0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gcmVjZWl2ZXIKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZXRFYWNoOiBmdW5jdGlvbihrZXksIHZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldChpdGVtLCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBNYXBzIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGVudW1lcmF0aW9uIHRvIGFub3Ro
ZXIgdmFsdWUsIHJldHVybmluZwotICAgICAgICAgICAgICAgICAgICBhIG5ldyBhcnJheS4gVGhp
cyBtZXRob2QgY29ycmVzcG9uZHMgdG8gYG1hcCgpYCBkZWZpbmVkIGluIEphdmFTY3JpcHQgMS42
LgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUg
c2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFsbAotICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCk6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51
bWVyYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAg
ICAgICAgICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBpdGVyYXRp
b24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxl
IG9iamVjdCBpdHNlbGYuCi0KLSAgICAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIHJldHVybiB0
aGUgbWFwcGVkIHZhbHVlLgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpbiBhZGRp
dGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQK
LSAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9u
IHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgICAgICAgICAgICAgICAgdG8g
Z2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmplY3Qu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBtYXAKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0
IHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gVGhlIG1hcHBlZCBh
cnJheS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtYXA6IGZ1bmN0aW9uKGNh
bGxiYWNrLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gRW1iZXIuQSgpOwot
ICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih4LCBpZHgsIGkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0W2lkeF0gPSBjYWxsYmFjay5jYWxsKHRhcmdldCwgeCwgaWR4LCBp
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0IDsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTaW1p
bGFyIHRvIG1hcCwgdGhpcyBzcGVjaWFsaXplZCBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBv
ZiB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgb24gYWxsIGl0ZW1zIGlu
IHRoZSBlbnVtZXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG1hcEJ5Ci0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgbmFtZSBvZiB0aGUgcHJvcGVy
dHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IFRoZSBtYXBwZWQgYXJyYXku
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbWFwQnk6IGZ1bmN0aW9uKGtleSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihuZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnZXQobmV4dCwga2V5KTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBTaW1pbGFyIHRvIG1hcCwgdGhpcyBzcGVjaWFsaXplZCBmdW5jdGlvbiByZXR1cm5zIHRoZSB2
YWx1ZSBvZiB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgb24gYWxsIGl0
ZW1zIGluIHRoZSBlbnVtZXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG1h
cFByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgbmFtZSBv
ZiB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IFRoZSBt
YXBwZWQgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkIFVzZSBgbWFwQnlg
IGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIG1hcFByb3BlcnR5
OiBhbGlhc01ldGhvZCgnbWFwQnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBlbnVt
ZXJhdGlvbiB0aGF0IHRoZSBwYXNzZWQKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0
dXJucyB0cnVlIGZvci4gVGhpcyBtZXRob2QgY29ycmVzcG9uZHMgdG8gYGZpbHRlcigpYCBkZWZp
bmVkIGluCi0gICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgMS42LgotCi0gICAgICAgICAg
ICAgICAgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhl
IGZvbGxvd2luZyBzaWduYXR1cmUgKGFsbAotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
IGFyZSBvcHRpb25hbCk6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIC0gYGl0ZW1gIGlzIHRo
ZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLSBg
aW5kZXhgIGlzIHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAgICAg
ICAgICAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYu
Ci0KLSAgICAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIHJldHVybiB0aGUgYHRydWVgIHRvIGlu
Y2x1ZGUgdGhlIGl0ZW0gaW4gdGhlIHJlc3VsdHMsIGBmYWxzZWAKLSAgICAgICAgICAgICAgICAg
ICAgb3RoZXJ3aXNlLgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlv
biB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9uIHRo
ZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgICAgICAgICAgICAgICAgdG8gZ2l2
ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFjY2VzcyB0byB0aGUgY3VycmVudCBvYmplY3QuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2JqZWN0
IHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gQSBmaWx0ZXJlZCBh
cnJheS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9u
KGNhbGxiYWNrLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gRW1iZXIuQSgp
OwotICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih4LCBpZHgsIGkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGFyZ2V0LCB4LCBpZHgsIGkpKSAK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHgpOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIHJldHVybiByZXQgOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwg
b2YgdGhlIGl0ZW1zIGluIHRoZSBlbnVtZXJhdGlvbiB3aGVyZSB0aGUgcGFzc2VkCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yLiBUaGlzIG1ldGhvZCBpcyB0
aGUgaW52ZXJzZSBvZiBmaWx0ZXIoKS4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJh
Y2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJl
IChhbGwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oaXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICAtICppdGVtKiBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRo
ZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gKmluZGV4KiBpcyB0aGUgY3VycmVu
dCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIC0gKmVudW1lcmFi
bGUqIGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0KLSAgICAgICAgICAgICAgICAg
ICAgSXQgc2hvdWxkIHJldHVybiB0aGUgYSBmYWxzZXkgdmFsdWUgdG8gaW5jbHVkZSB0aGUgaXRl
bSBpbiB0aGUgcmVzdWx0cy4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaW4gYWRk
aXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0
Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzICJ0aGlzIiBv
biB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0gICAgICAgICAgICAgICAgICAgIHRv
IGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9i
amVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IEEgcmVqZWN0
ZWQgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlamVjdDogZnVu
Y3Rpb24oY2FsbGJhY2ssIHRhcmdldCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bHRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoYXBwbHkodGFy
Z2V0LCBjYWxsYmFjaywgYXJndW1lbnRzKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBh
biBhcnJheSB3aXRoIGp1c3QgdGhlIGl0ZW1zIHdpdGggdGhlIG1hdGNoZWQgcHJvcGVydHkuIFlv
dQotICAgICAgICAgICAgICAgICAgICBjYW4gcGFzcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1l
bnQgd2l0aCB0aGUgdGFyZ2V0IHZhbHVlLiBPdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAg
dGhpcyB3aWxsIG1hdGNoIGFueSBwcm9wZXJ0eSB0aGF0IGV2YWx1YXRlcyB0byBgdHJ1ZWAuCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBmaWx0ZXJCeQotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge1N0cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7Kn0gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3Qu
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBhcnJheQotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZpbHRlckJ5OiBmdW5jdGlvbihrZXksIHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGFwcGx5KHRoaXMsIGl0
ZXIsIGFyZ3VtZW50cykpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCBqdXN0IHRoZSBpdGVtcyB3aXRo
IHRoZSBtYXRjaGVkIHByb3BlcnR5LiBZb3UKLSAgICAgICAgICAgICAgICAgICAgY2FuIHBhc3Mg
YW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2YWx1ZS4gT3RoZXJ3
aXNlCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgd2lsbCBtYXRjaCBhbnkgcHJvcGVydHkgdGhh
dCBldmFsdWF0ZXMgdG8gYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmls
dGVyUHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUg
cHJvcGVydHkgdG8gdGVzdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3Zh
bHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge0FycmF5fSBmaWx0ZXJlZCBhcnJheQotICAgICAgICAgICAgICAgICAgICBAZGVw
cmVjYXRlZCBVc2UgYGZpbHRlckJ5YCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZmlsdGVyUHJvcGVydHk6IGFsaWFzTWV0aG9kKCdmaWx0ZXJCeScpLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBhbiBhcnJheSB3aXRoIHRo
ZSBpdGVtcyB0aGF0IGRvIG5vdCBoYXZlIHRydXRoeSB2YWx1ZXMgZm9yCi0gICAgICAgICAgICAg
ICAgICAgIGtleS4gIFlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgd2l0
aCB0aGUgdGFyZ2V0IHZhbHVlLiAgT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgIHRoaXMg
d2lsbCBtYXRjaCBhbnkgcHJvcGVydHkgdGhhdCBldmFsdWF0ZXMgdG8gZmFsc2UuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCByZWplY3RCeQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4K
LSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IHJlamVjdGVkIGFycmF5Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVqZWN0Qnk6IGZ1bmN0aW9uKGtleSwgdmFs
dWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXhhY3RWYWx1ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldChpdGVtLCBrZXkpID09PSB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gZnVuY3Rpb24oaXRl
bSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFnZXQoaXRlbSwga2V5KTsKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHVzZSA9IChhcmd1bWVudHMubGVuZ3RoID09
PSAyID8gZXhhY3RWYWx1ZSA6IGhhc1ZhbHVlKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnJlamVjdCh1c2UpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgaXRlbXMgdGhhdCBkbyBu
b3QgaGF2ZSB0cnV0aHkgdmFsdWVzIGZvcgotICAgICAgICAgICAgICAgICAgICBrZXkuICBZb3Ug
Y2FuIHBhc3MgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2YWx1
ZS4gIE90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICB0aGlzIHdpbGwgbWF0Y2ggYW55IHBy
b3BlcnR5IHRoYXQgZXZhbHVhdGVzIHRvIGZhbHNlLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgcmVqZWN0UHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9
IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAg
ICAgICAgICAgIEByZXR1cm4ge0FycmF5fSByZWplY3RlZCBhcnJheQotICAgICAgICAgICAgICAg
ICAgICBAZGVwcmVjYXRlZCBVc2UgYHJlamVjdEJ5YCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmVqZWN0UHJvcGVydHk6IGFsaWFzTWV0aG9kKCdyZWplY3RCeScp
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgZmly
c3QgaXRlbSBpbiB0aGUgYXJyYXkgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUu
Ci0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIHNpbWlsYXIgdG8gdGhlIGBm
aWx0ZXIoKWAgbWV0aG9kIGRlZmluZWQgaW4gSmF2YVNjcmlwdCAxLjYKLSAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0IHRoYXQgaXQgd2lsbCBzdG9wIHdvcmtpbmcgb24gdGhlIGFycmF5IG9uY2Ug
YSBtYXRjaCBpcyBmb3VuZC4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgbWV0
aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0gICAgICAg
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24o
aXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVy
YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRl
eCBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJhYmxlYCBp
cyB0aGUgZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIEl0
IHNob3VsZCByZXR1cm4gdGhlIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBpdGVtIGluIHRoZSByZXN1
bHRzLCBgZmFsc2VgCi0gICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZS4KLQotICAgICAgICAg
ICAgICAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBh
bHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCB0
aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qg
d2F5Ci0gICAgICAgICAgICAgICAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5jdGlvbiBh
Y2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgZmluZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBU
aGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVj
dH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge09iamVjdH0gRm91bmQgaXRlbSBvciBgdW5kZWZpbmVkYC4KLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihjYWxsYmFjaywgdGFyZ2V0KSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJykgOwotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAgICAgICAg
IHRhcmdldCA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IG51bGwsIG5leHQs
IGZvdW5kID0gZmFsc2UsIHJldCA7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBwb3BD
dHgoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW4gJiYgIWZv
dW5kOyBpZHgrKykgewotICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdGhpcy5uZXh0T2JqZWN0
KGlkeCwgbGFzdCwgY29udGV4dCkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPSBj
YWxsYmFjay5jYWxsKHRhcmdldCwgbmV4dCwgaWR4LCB0aGlzKSkgCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBuZXh0IDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5leHQgOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXh0ID0gbGFzdCA9IG51bGwgOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwdXNoQ3R4KGNvbnRleHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiByZXQgOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0gd2l0aCBhIHByb3BlcnR5IG1h
dGNoaW5nIHRoZSBwYXNzZWQgdmFsdWUuIFlvdQotICAgICAgICAgICAgICAgICAgICBjYW4gcGFz
cyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgd2l0aCB0aGUgdGFyZ2V0IHZhbHVlLiBPdGhl
cndpc2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcyB3aWxsIG1hdGNoIGFueSBwcm9wZXJ0eSB0
aGF0IGV2YWx1YXRlcyB0byBgdHJ1ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRo
b2Qgd29ya3MgbXVjaCBsaWtlIHRoZSBtb3JlIGdlbmVyaWMgYGZpbmQoKWAgbWV0aG9kLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmluZEJ5Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0
LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGZvdW5kIGl0ZW0gb3IgYHVu
ZGVmaW5lZGAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmaW5kQnk6IGZ1bmN0
aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kKGFwcGx5
KHRoaXMsIGl0ZXIsIGFyZ3VtZW50cykpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0gd2l0aCBhIHBy
b3BlcnR5IG1hdGNoaW5nIHRoZSBwYXNzZWQgdmFsdWUuIFlvdQotICAgICAgICAgICAgICAgICAg
ICBjYW4gcGFzcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgd2l0aCB0aGUgdGFyZ2V0IHZh
bHVlLiBPdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcyB3aWxsIG1hdGNoIGFueSBw
cm9wZXJ0eSB0aGF0IGV2YWx1YXRlcyB0byBgdHJ1ZWAuCi0KLSAgICAgICAgICAgICAgICAgICAg
VGhpcyBtZXRob2Qgd29ya3MgbXVjaCBsaWtlIHRoZSBtb3JlIGdlbmVyaWMgYGZpbmQoKWAgbWV0
aG9kLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZmluZFByb3BlcnR5Ci0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUg
dG8gdGVzdCBhZ2FpbnN0LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IGZv
dW5kIGl0ZW0gb3IgYHVuZGVmaW5lZGAKLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQg
VXNlIGBmaW5kQnlgIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBm
aW5kUHJvcGVydHk6IGFsaWFzTWV0aG9kKCdmaW5kQnknKSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVuY3Rpb24g
cmV0dXJucyB0cnVlIGZvciBldmVyeSBpdGVtIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBl
bnVtZXJhdGlvbi4gVGhpcyBjb3JyZXNwb25kcyB3aXRoIHRoZSBgZXZlcnkoKWAgbWV0aG9kIGlu
IEphdmFTY3JpcHQgMS42LgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsYmFjayBtZXRo
b2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgKGFsbAot
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCk6Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihp
dGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJh
dGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJyZW50IGluZGV4
IGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGVudW1lcmFibGVgIGlz
IHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0KLSAgICAgICAgICAgICAgICAgICAgSXQg
c2hvdWxkIHJldHVybiB0aGUgYHRydWVgIG9yIGBmYWxzZWAuCi0KLSAgICAgICAgICAgICAgICAg
ICAgTm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNz
IGFuIG9wdGlvbmFsIHRhcmdldAotICAgICAgICAgICAgICAgICAgICBvYmplY3QgdGhhdCB3aWxs
IGJlIHNldCBhcyBgdGhpc2Agb24gdGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQotICAg
ICAgICAgICAgICAgICAgICB0byBnaXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRv
IHRoZSBjdXJyZW50IG9iamVjdC4KLQotICAgICAgICAgICAgICAgICAgICBFeGFtcGxlIFVzYWdl
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBlb3BsZS5ldmVyeShpc0VuZ2luZWVyKSkgeyBQYXljaGVja3MuYWRkQmlnQm9udXMo
KTsgfQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kIGV2ZXJ5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNr
IFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBl
dmVyeTogZnVuY3Rpb24oY2FsbGJhY2ssIHRhcmdldCkgewotICAgICAgICAgICAgICAgIHJldHVy
biAhdGhpcy5maW5kKGZ1bmN0aW9uKHgsIGlkeCwgaSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIWNhbGxiYWNrLmNhbGwodGFyZ2V0LCB4LCBpZHgsIGkpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgZXZlcnlCeQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
a2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KLSAgICAgICAgICAg
ICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBpc0V2ZXJ5YCBpbnN0ZWFkCi0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZXZlcnlCeTogYWxpYXNNZXRob2QoJ2lzRXZlcnknKSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZXZlcnlQcm9wZXJ0eQotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3Qg
YWdhaW5zdC4KLSAgICAgICAgICAgICAgICAgICAgQGRlcHJlY2F0ZWQgVXNlIGBpc0V2ZXJ5YCBp
bnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgZXZlcnlQcm9wZXJ0eTogYWxpYXNNZXRob2QoJ2lzRXZl
cnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYHRy
dWVgIGlmIHRoZSBwYXNzZWQgcHJvcGVydHkgcmVzb2x2ZXMgdG8gYHRydWVgIGZvciBhbGwgaXRl
bXMgaW4KLSAgICAgICAgICAgICAgICAgICAgdGhlIGVudW1lcmFibGUuIFRoaXMgbWV0aG9kIGlz
IG9mdGVuIHNpbXBsZXIvZmFzdGVyIHRoYW4gdXNpbmcgYSBjYWxsYmFjay4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGlzRXZlcnkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAg
ICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICAgICAgICAgICAgICAgIEBz
aW5jZSAxLjMuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzRXZlcnk6IGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVyeShh
cHBseSh0aGlzLCBpdGVyLCBhcmd1bWVudHMpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGFzc2Vk
IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYW55IGl0ZW0gaW4gdGhlCi0gICAgICAgICAgICAg
ICAgICAgIGVudW1lcmF0aW9uLiBUaGlzIGNvcnJlc3BvbmRzIHdpdGggdGhlIGBzb21lKClgIG1l
dGhvZCBpbiBKYXZhU2NyaXB0IDEuNi4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJh
Y2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJl
IChhbGwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oaXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRo
ZSBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVu
dCBpbmRleCBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJh
YmxlYCBpcyB0aGUgZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAg
ICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBpdGVtIGluIHRo
ZSByZXN1bHRzLCBgZmFsc2VgCi0gICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZS4KLQotICAg
ICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gYSBjYWxsYmFjaywgeW91
IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgICAgIG9i
amVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBh
IGdvb2Qgd2F5Ci0gICAgICAgICAgICAgICAgICAgIHRvIGdpdmUgeW91ciBpdGVyYXRvciBmdW5j
dGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAg
IFVzYWdlIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBpZiAocGVvcGxlLmFueShpc01hbmFnZXIpKSB7IFBheWNoZWNrcy5h
ZGRCaWdnZXJCb251cygpOyB9Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAg
ICAgICAgICAgIEBtZXRob2QgYW55Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVu
Y3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGFueSBpdGVtCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgYW55OiBmdW5jdGlvbihjYWxsYmFjaywgdGFyZ2V0KSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyksCi0gICAgICAgICAgICAgICAgY29u
dGV4dCA9IHBvcEN0eCgpLAotICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2UsCi0gICAgICAg
ICAgICAgICAgbGFzdCA9IG51bGwsCi0gICAgICAgICAgICAgICAgbmV4dCwgaWR4OwotCi0gICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Zm9yIChpZHggPSAwOyBpZHggPCBsZW4gJiYgIWZvdW5kOyBpZHgrKykgewotICAgICAgICAgICAg
ICAgICAgICBuZXh0ID0gdGhpcy5uZXh0T2JqZWN0KGlkeCwgbGFzdCwgY29udGV4dCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gY2FsbGJhY2suY2FsbCh0YXJnZXQsIG5leHQsIGlkeCwg
dGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBuZXh0OwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIG5leHQgPSBsYXN0ID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0ID0gcHVzaEN0eChjb250ZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm91
bmQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9y
IGFueSBpdGVtIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbi4gVGhpcyBj
b3JyZXNwb25kcyB3aXRoIHRoZSBgc29tZSgpYCBtZXRob2QgaW4gSmF2YVNjcmlwdCAxLjYuCi0K
LSAgICAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91
bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJh
YmxlKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgLSBg
aXRlbWAgaXMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAg
ICAgICAgICAtIGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2Jq
ZWN0IGl0c2VsZi4KLQotICAgICAgICAgICAgICAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBg
dHJ1ZWAgdG8gaW5jbHVkZSB0aGUgaXRlbSBpbiB0aGUgcmVzdWx0cywgYGZhbHNlYAotICAgICAg
ICAgICAgICAgICAgICBvdGhlcndpc2UuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0
IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFs
IHRhcmdldAotICAgICAgICAgICAgICAgICAgICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBg
dGhpc2Agb24gdGhlIGNvbnRleHQuIFRoaXMgaXMgYSBnb29kIHdheQotICAgICAgICAgICAgICAg
ICAgICB0byBnaXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50
IG9iamVjdC4KLQotICAgICAgICAgICAgICAgICAgICBVc2FnZSBFeGFtcGxlOgotCi0gICAgICAg
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBlb3Bs
ZS5zb21lKGlzTWFuYWdlcikpIHsgUGF5Y2hlY2tzLmFkZEJpZ2dlckJvbnVzKCk7IH0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzb21lCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFj
ayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0
XSBUaGUgdGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9y
IGFueSBpdGVtCi0gICAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkIFVzZSBgYW55YCBpbnN0
ZWFkCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc29tZTogYWxpYXNNZXRob2Qo
J2FueScpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBg
dHJ1ZWAgaWYgdGhlIHBhc3NlZCBwcm9wZXJ0eSByZXNvbHZlcyB0byBgdHJ1ZWAgZm9yIGFueSBp
dGVtIGluCi0gICAgICAgICAgICAgICAgICAgIHRoZSBlbnVtZXJhYmxlLiBUaGlzIG1ldGhvZCBp
cyBvZnRlbiBzaW1wbGVyL2Zhc3RlciB0aGFuIHVzaW5nIGEgY2FsbGJhY2suCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBpc0FueQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVu
Y3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGFueSBpdGVtCi0gICAgICAgICAgICAgICAgICAgIEBz
aW5jZSAxLjMuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzQW55OiBmdW5j
dGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW55KGFwcGx5
KHRoaXMsIGl0ZXIsIGFyZ3VtZW50cykpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYW55QnkKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVzdAotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFn
YWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0
aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkgaXRlbQotICAgICAgICAg
ICAgICAgICAgICBAZGVwcmVjYXRlZCBVc2UgYGlzQW55YCBpbnN0ZWFkCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgYW55Qnk6IGFsaWFzTWV0aG9kKCdpc0FueScpLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzb21lUHJvcGVydHkKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVydHkgdG8gdGVz
dAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gW3ZhbHVlXSBvcHRpb25hbCB2
YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Jvb2xl
YW59IGB0cnVlYCBpZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIGZvciBhbnkg
aXRlbQotICAgICAgICAgICAgICAgICAgICBAZGVwcmVjYXRlZCBVc2UgYGlzQW55YCBpbnN0ZWFk
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc29tZVByb3BlcnR5OiBhbGlhc01l
dGhvZCgnaXNBbnknKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRo
aXMgd2lsbCBjb21iaW5lIHRoZSB2YWx1ZXMgb2YgdGhlIGVudW1lcmF0b3IgaW50byBhIHNpbmds
ZSB2YWx1ZS4gSXQKLSAgICAgICAgICAgICAgICAgICAgaXMgYSB1c2VmdWwgd2F5IHRvIGNvbGxl
Y3QgYSBzdW1tYXJ5IHZhbHVlIGZyb20gYW4gZW51bWVyYXRpb24uIFRoaXMKLSAgICAgICAgICAg
ICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhlIGByZWR1Y2UoKWAgbWV0aG9kIGRlZmluZWQgaW4g
SmF2YVNjcmlwdCAxLjguCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNrIG1ldGhv
ZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHBy
ZXZpb3VzVmFsdWUsIGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgLSBgcHJldmlvdXNWYWx1ZWAgaXMgdGhlIHZh
bHVlIHJldHVybmVkIGJ5IHRoZSBsYXN0IGNhbGwgdG8gdGhlIGl0ZXJhdG9yLgotICAgICAgICAg
ICAgICAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0
aGUgaXRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUg
ZW51bWVyYWJsZSBvYmplY3QgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIFJldHVybiB0
aGUgbmV3IGN1bXVsYXRpdmUgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAgSW4gYWRkaXRp
b24gdG8gdGhlIGNhbGxiYWNrIHlvdSBjYW4gYWxzbyBwYXNzIGFuIGBpbml0aWFsVmFsdWVgLiBB
biBlcnJvcgotICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHJhaXNlZCBpZiB5b3UgZG8gbm90
IHBhc3MgYW4gaW5pdGlhbCB2YWx1ZSBhbmQgdGhlIGVudW1lcmF0b3IgaXMKLSAgICAgICAgICAg
ICAgICAgICAgZW1wdHkuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHVubGlrZSB0
aGUgb3RoZXIgbWV0aG9kcywgdGhpcyBtZXRob2QgZG9lcyBub3QgYWxsb3cgeW91IHRvCi0gICAg
ICAgICAgICAgICAgICAgIHBhc3MgYSB0YXJnZXQgb2JqZWN0IHRvIHNldCBhcyB0aGlzIGZvciB0
aGUgY2FsbGJhY2suIEl0J3MgcGFydCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgc3BlYy4g
U29ycnkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZWR1Y2UKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1
dGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGluaXRpYWxWYWx1ZSBJbml0
aWFsIHZhbHVlIGZvciB0aGUgcmVkdWNlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3Ry
aW5nfSByZWR1Y2VyUHJvcGVydHkgaW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4ge09iamVjdH0gVGhlIHJlZHVjZWQgdmFsdWUuCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihjYWxsYmFjaywgaW5pdGlhbFZhbHVl
LCByZWR1Y2VyUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNr
ICE9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gaW5p
dGlhbFZhbHVlOwotCi0gICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0s
IGkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2socmV0LCBpdGVtLCBpLCB0
aGlzLCByZWR1Y2VyUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBJbnZva2VzIHRoZSBuYW1lZCBtZXRob2Qgb24gZXZlcnkg
b2JqZWN0IGluIHRoZSByZWNlaXZlciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGltcGxlbWVu
dHMgaXQuIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpbgot
ICAgICAgICAgICAgICAgICAgICBQcm90b3R5cGUgMS42LgotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgaW52b2tlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBtZXRo
b2ROYW1lIHRoZSBuYW1lIG9mIHRoZSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtPYmplY3QuLi59IGFyZ3Mgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYXMgd2VsbC4KLSAg
ICAgICAgICAgICAgICAgICAgQHJldHVybiB7QXJyYXl9IHJldHVybiB2YWx1ZXMgZnJvbSBjYWxs
aW5nIGludm9rZS4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnZva2U6IGZ1
bmN0aW9uKG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncywgcmV0ID0gRW1i
ZXIuQSgpOwotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ3MgPSBhX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLQotICAg
ICAgICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih4LCBpZHgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIG1ldGhvZCA9IHggJiYgeFttZXRob2ROYW1lXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBtZXRob2QpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldFtpZHhdID0gYXJncyA/IGFwcGx5KHgsIG1ldGhvZCwgYXJncykgOiB4W21l
dGhvZE5hbWVdKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCB0
aGlzKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgU2ltcGx5IGNvbnZlcnRzIHRoZSBl
bnVtZXJhYmxlIGludG8gYSBnZW51aW5lIGFycmF5LiBUaGUgb3JkZXIgaXMgbm90Ci0gICAgICAg
ICAgICAgICAgICAgIGd1YXJhbnRlZWQuIENvcnJlc3BvbmRzIHRvIHRoZSBtZXRob2QgaW1wbGVt
ZW50ZWQgYnkgUHJvdG90eXBlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdG9BcnJh
eQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gdGhlIGVudW1lcmFibGUgYXMg
YW4gYXJyYXkuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdG9BcnJheTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCA9IEVtYmVyLkEoKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24obywgaWR4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldFtpZHhdID0gbzsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFJldHVybnMgYSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGFsbCBudWxsIGFuZCB1
bmRlZmluZWQgZWxlbWVudHMgcmVtb3ZlZC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbImEiLCBudWxsLCAiYyIsIHVu
ZGVmaW5lZF07Ci0gICAgICAgICAgICAgICAgICAgIGFyci5jb21wYWN0KCk7ICAvLyBbImEiLCAi
YyJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgY29tcGFjdAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtBcnJheX0gdGhlIGFycmF5
IHdpdGhvdXQgbnVsbCBhbmQgdW5kZWZpbmVkIGVsZW1lbnRzLgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGNvbXBhY3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgbmV3IGVu
dW1lcmFibGUgdGhhdCBleGNsdWRlcyB0aGUgcGFzc2VkIHZhbHVlLiBUaGUgZGVmYXVsdAotICAg
ICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGFycmF5IHJlZ2FyZGxl
c3Mgb2YgdGhlIHJlY2VpdmVyIHR5cGUgdW5sZXNzCi0gICAgICAgICAgICAgICAgICAgIHRoZSBy
ZWNlaXZlciBkb2VzIG5vdCBjb250YWluIHRoZSB2YWx1ZS4KLQotICAgICAgICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbImEiLCAiYiIs
ICJhIiwgImMiXTsKLSAgICAgICAgICAgICAgICAgICAgYXJyLndpdGhvdXQoImEiKTsgIC8vIFsi
YiIsICJjIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB2YWx1
ZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5FbnVtZXJhYmxlfQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdpdGhvdXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKHZhbHVlKSkgCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOyAvLyBub3RoaW5nIHRvIGRvCi0gICAgICAgICAgICAgICAgdmFy
IHJldCA9IEVtYmVyLkEoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24o
aykgewotICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gdmFsdWUpIAotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0W3JldC5sZW5ndGhdID0gazsKLSAgICAgICAgICAgICAgICB9KSA7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJldCA7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBhIG5ldyBlbnVtZXJhYmxlIHRoYXQg
Y29udGFpbnMgb25seSB1bmlxdWUgdmFsdWVzLiBUaGUgZGVmYXVsdAotICAgICAgICAgICAgICAg
ICAgICBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIHJl
Y2VpdmVyIHR5cGUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICB2YXIgYXJyID0gWyJhIiwgImEiLCAiYiIsICJiIl07Ci0gICAgICAgICAg
ICAgICAgICAgIGFyci51bmlxKCk7ICAvLyBbImEiLCAiYiJdCi0gICAgICAgICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdW5pcQotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5FbnVtZXJhYmxlfQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHVuaXE6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciByZXQgPSBF
bWJlci5BKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4T2YocmV0LCBrKSA8IDApIAotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goayk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IHdpbGwgdHJpZ2dlciBhbnl0aW1lIHRoZSBl
bnVtZXJhYmxlJ3MgY29udGVudCBjaGFuZ2VzLgotICAgICAgICAgICAgICAgICAgICBZb3UgY2Fu
IG9ic2VydmUgdGhpcyBwcm9wZXJ0eSB0byBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIHRvIHRoZSBl
bnVtZXJhYmxlcwotICAgICAgICAgICAgICAgICAgICBjb250ZW50LgotCi0gICAgICAgICAgICAg
ICAgICAgIEZvciBwbGFpbiBlbnVtZXJhYmxlcywgdGhpcyBwcm9wZXJ0eSBpcyByZWFkIG9ubHku
IGBBcnJheWAgb3ZlcnJpZGVzCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgbWV0aG9kLgotCi0g
ICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBbXQotICAgICAgICAgICAgICAgICAgICBAdHlw
ZSBBcnJheQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHRoaXMKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICAnW10nOiBjb21wdXRlZChmdW5jdGlvbihrZXksIHZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAg
ICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLgotICAgICAgICAgICAgLy8gRU5VTUVSQUJMRSBPQlNFUlZFUlMKLSAgICAgICAg
ICAgIC8vCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcnMg
YW4gZW51bWVyYWJsZSBvYnNlcnZlci4gTXVzdCBpbXBsZW1lbnQgYEVtYmVyLkVudW1lcmFibGVP
YnNlcnZlcmAKLSAgICAgICAgICAgICAgICAgICAgbWl4aW4uCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBhZGRFbnVtZXJhYmxlT2JzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgQHBh
cmFtIHtPYmplY3R9IHRhcmdldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IFtv
cHRzXQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHRoaXMKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBhZGRFbnVtZXJhYmxlT2JzZXJ2ZXI6IGZ1bmN0aW9uKHRhcmdldCwg
b3B0cykgewotICAgICAgICAgICAgICAgIHZhciB3aWxsQ2hhbmdlID0gKG9wdHMgJiYgb3B0cy53
aWxsQ2hhbmdlKSB8fCAnZW51bWVyYWJsZVdpbGxDaGFuZ2UnLAotICAgICAgICAgICAgICAgIGRp
ZENoYW5nZSA9IChvcHRzICYmIG9wdHMuZGlkQ2hhbmdlKSB8fCAnZW51bWVyYWJsZURpZENoYW5n
ZSc7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaGFzT2JzZXJ2ZXJzID0gZ2V0KHRoaXMsICdoYXNF
bnVtZXJhYmxlT2JzZXJ2ZXJzJyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNPYnNlcnZlcnMp
IAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2hhc0VudW1l
cmFibGVPYnNlcnZlcnMnKTsKLSAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcih0aGlzLCAnQGVu
dW1lcmFibGU6YmVmb3JlJywgdGFyZ2V0LCB3aWxsQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICBh
ZGRMaXN0ZW5lcih0aGlzLCAnQGVudW1lcmFibGU6Y2hhbmdlJywgdGFyZ2V0LCBkaWRDaGFuZ2Up
OwotICAgICAgICAgICAgICAgIGlmICghaGFzT2JzZXJ2ZXJzKSAKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlEaWRDaGFuZ2UodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGEgcmVnaXN0ZXJlZCBlbnVtZXJhYmxl
IG9ic2VydmVyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlRW51bWVyYWJs
ZU9ic2VydmVyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBbb3B0c10KLSAgICAgICAgICAgICAgICAg
ICAgQHJldHVybiB0aGlzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVtb3Zl
RW51bWVyYWJsZU9ic2VydmVyOiBmdW5jdGlvbih0YXJnZXQsIG9wdHMpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgd2lsbENoYW5nZSA9IChvcHRzICYmIG9wdHMud2lsbENoYW5nZSkgfHwgJ2VudW1l
cmFibGVXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSAob3B0cyAmJiBv
cHRzLmRpZENoYW5nZSkgfHwgJ2VudW1lcmFibGVEaWRDaGFuZ2UnOwotCi0gICAgICAgICAgICAg
ICAgdmFyIGhhc09ic2VydmVycyA9IGdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycp
OwotICAgICAgICAgICAgICAgIGlmIChoYXNPYnNlcnZlcnMpIAotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKTsKLSAg
ICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcih0aGlzLCAnQGVudW1lcmFibGU6YmVmb3JlJywg
dGFyZ2V0LCB3aWxsQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcih0aGlz
LCAnQGVudW1lcmFibGU6Y2hhbmdlJywgdGFyZ2V0LCBkaWRDaGFuZ2UpOwotICAgICAgICAgICAg
ICAgIGlmIChoYXNPYnNlcnZlcnMpIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENo
YW5nZSh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIEJlY29tZXMgdHJ1ZSB3aGVuZXZlciB0aGUgYXJyYXkgY3VycmVudGx5IGhhcyBv
YnNlcnZlcnMgd2F0Y2hpbmcgY2hhbmdlcwotICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYXJy
YXkuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGhhc0VudW1lcmFibGVPYnNlcnZl
cnMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGhhc0VudW1lcmFibGVPYnNlcnZlcnM6IGNvbXB1dGVkKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBoYXNMaXN0ZW5lcnModGhpcywgJ0BlbnVtZXJh
YmxlOmNoYW5nZScpIHx8IGhhc0xpc3RlbmVycyh0aGlzLCAnQGVudW1lcmFibGU6YmVmb3JlJyk7
Ci0gICAgICAgICAgICB9KSwKLQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgSW52b2tlIHRoaXMgbWV0aG9kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBvZiB5b3VyIGVu
dW1lcmFibGUgd2lsbAotICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuIFlvdSBjYW4gZWl0aGVy
IG9taXQgdGhlIHBhcmFtZXRlcnMgY29tcGxldGVseSBvciBwYXNzIHRoZSBvYmplY3RzCi0gICAg
ICAgICAgICAgICAgICAgIHRvIGJlIHJlbW92ZWQgb3IgYWRkZWQgaWYgYXZhaWxhYmxlIG9yIGp1
c3QgYSBjb3VudC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGVudW1lcmFibGVDb250
ZW50V2lsbENoYW5nZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFi
bGV8TnVtYmVyfSByZW1vdmluZyBBbiBlbnVtZXJhYmxlIG9mIHRoZSBvYmplY3RzIHRvCi0gICAg
ICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBvciB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJl
IHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZXxO
dW1iZXJ9IGFkZGluZyBBbiBlbnVtZXJhYmxlIG9mIHRoZSBvYmplY3RzIHRvIGJlCi0gICAgICAg
ICAgICAgICAgICAgICAgYWRkZWQgb3IgdGhlIG51bWJlciBvZiBpdGVtcyB0byBiZSBhZGRlZC4K
LSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJsZQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGVudW1lcmFibGVDb250ZW50V2lsbENoYW5nZTogZnVuY3Rpb24ocmVtb3Zpbmcs
IGFkZGluZykgewotCi0gICAgICAgICAgICAgICAgdmFyIHJlbW92ZUNudCwgYWRkQ250LCBoYXNE
ZWx0YTsKLQotICAgICAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHJlbW92aW5n
KSAKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ250ID0gcmVtb3Zpbmc7Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAocmVtb3ZpbmcpIAotICAgICAgICAgICAgICAgICAgICByZW1vdmVDbnQg
PSBnZXQocmVtb3ZpbmcsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICBlbHNlIAotICAgICAg
ICAgICAgICAgICAgICByZW1vdmVDbnQgPSByZW1vdmluZyA9IC0xOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgYWRkaW5nKSAKLSAgICAgICAgICAgICAgICAgICAg
YWRkQ250ID0gYWRkaW5nOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFkZGluZykgCi0gICAg
ICAgICAgICAgICAgICAgIGFkZENudCA9IGdldChhZGRpbmcsICdsZW5ndGgnKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICBhZGRDbnQgPSBhZGRpbmcgPSAtMTsK
LQotICAgICAgICAgICAgICAgIGhhc0RlbHRhID0gYWRkQ250IDwgMCB8fCByZW1vdmVDbnQgPCAw
IHx8IGFkZENudCAtIHJlbW92ZUNudCAhPT0gMDsKLQotICAgICAgICAgICAgICAgIGlmIChyZW1v
dmluZyA9PT0gLTEpIAotICAgICAgICAgICAgICAgICAgICByZW1vdmluZyA9IG51bGw7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFkZGluZyA9PT0gLTEpIAotICAgICAgICAgICAgICAgICAgICBhZGRp
bmcgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdb
XScpOwotICAgICAgICAgICAgICAgIGlmIChoYXNEZWx0YSkgCi0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgc2Vu
ZEV2ZW50KHRoaXMsICdAZW51bWVyYWJsZTpiZWZvcmUnLCBbdGhpcywgcmVtb3ZpbmcsIGFkZGlu
Z10pOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW52b2tlIHRoaXMgbWV0aG9kIHdo
ZW4gdGhlIGNvbnRlbnRzIG9mIHlvdXIgZW51bWVyYWJsZSBoYXMgY2hhbmdlZC4KLSAgICAgICAg
ICAgICAgICAgICAgVGhpcyB3aWxsIG5vdGlmeSBhbnkgb2JzZXJ2ZXJzIHdhdGNoaW5nIGZvciBj
b250ZW50IGNoYW5nZXMuIElmIHlvdSBhcmUKLSAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50
aW5nIGFuIG9yZGVyZWQgZW51bWVyYWJsZSAoc3VjaCBhcyBhbiBhcnJheSksIGFsc28gcGFzcyB0
aGUKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgYW5kIGVuZCB2YWx1ZXMgd2hlcmUgdGhlIGNv
bnRlbnQgY2hhbmdlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvCi0gICAgICAgICAgICAgICAg
ICAgIG5vdGlmeSByYW5nZSBvYnNlcnZlcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBlbnVtZXJhYmxlQ29udGVudERpZENoYW5nZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0VtYmVyLkVudW1lcmFibGV8TnVtYmVyfSByZW1vdmluZyBBbiBlbnVtZXJhYmxlIG9mIHRoZSBv
YmplY3RzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBvciB0aGUgbnVtYmVy
IG9mIGl0ZW1zIHRvIGJlIHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RW1i
ZXIuRW51bWVyYWJsZXxOdW1iZXJ9IGFkZGluZyAgQW4gZW51bWVyYWJsZSBvZiB0aGUgb2JqZWN0
cyB0bwotICAgICAgICAgICAgICAgICAgICAgIGJlIGFkZGVkIG9yIHRoZSBudW1iZXIgb2YgaXRl
bXMgdG8gYmUgYWRkZWQuCi0gICAgICAgICAgICAgICAgICAgIEBjaGFpbmFibGUKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICBlbnVtZXJhYmxlQ29udGVudERpZENoYW5nZTogZnVu
Y3Rpb24ocmVtb3ZpbmcsIGFkZGluZykgewotICAgICAgICAgICAgICAgIHZhciByZW1vdmVDbnQs
IGFkZENudCwgaGFzRGVsdGE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5
cGVvZiByZW1vdmluZykgCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNudCA9IHJlbW92aW5n
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbW92aW5nKSAKLSAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlQ250ID0gZ2V0KHJlbW92aW5nLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ250ID0gcmVtb3ZpbmcgPSAtMTsKLQot
ICAgICAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGFkZGluZykgCi0gICAgICAg
ICAgICAgICAgICAgIGFkZENudCA9IGFkZGluZzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChh
ZGRpbmcpIAotICAgICAgICAgICAgICAgICAgICBhZGRDbnQgPSBnZXQoYWRkaW5nLCAnbGVuZ3Ro
Jyk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgYWRkQ250ID0g
YWRkaW5nID0gLTE7Ci0KLSAgICAgICAgICAgICAgICBoYXNEZWx0YSA9IGFkZENudCA8IDAgfHwg
cmVtb3ZlQ250IDwgMCB8fCBhZGRDbnQgLSByZW1vdmVDbnQgIT09IDA7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocmVtb3ZpbmcgPT09IC0xKSAKLSAgICAgICAgICAgICAgICAgICAgcmVtb3Zpbmcg
PSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChhZGRpbmcgPT09IC0xKSAKLSAgICAgICAgICAg
ICAgICAgICAgYWRkaW5nID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIHNlbmRFdmVudCh0aGlz
LCAnQGVudW1lcmFibGU6Y2hhbmdlJywgW3RoaXMsIHJlbW92aW5nLCBhZGRpbmddKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaGFzRGVsdGEpIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURp
ZENoYW5nZSh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFu
Z2UodGhpcywgJ1tdJyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcyA7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ29udmVydHMg
dGhlIGVudW1lcmFibGUgaW50byBhbiBhcnJheSBhbmQgc29ydHMgYnkgdGhlIGtleXMKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudC4KLQotICAgICAgICAgICAg
ICAgICAgICBZb3UgbWF5IHByb3ZpZGUgbXVsdGlwbGUgYXJndW1lbnRzIHRvIHNvcnQgYnkgbXVs
dGlwbGUgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNvcnRCeQot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHkgbmFtZShzKSB0byBz
b3J0IG9uCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0FycmF5fSBUaGUgc29ydGVkIGFy
cmF5LgotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4yLjAKLSAgICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHNvcnRCeTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHNvcnRLZXlzID0gYXJndW1lbnRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRv
QXJyYXkoKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzb3J0S2V5cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGtleSA9IHNvcnRLZXlzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cEEgPSBnZXQoYSwga2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BCID0gZ2V0KGIs
IGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gMSBvciAtMSBlbHNlIGNv
bnRpbnVlIHRvIHRoZSBuZXh0IHNvcnRLZXkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBj
b21wYXJlVmFsdWUgPSBjb21wYXJlKHByb3BBLCBwcm9wQik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29tcGFyZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBhcmVWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1ydW50aW1lL21peGlucy9ldmVudGVkIiwKLSAgICBbImVtYmVyLW1ldGFsL21peGluIiwg
ImVtYmVyLW1ldGFsL2V2ZW50cyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3Ry
aWN0IjsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5MV9fLk1peGluOwotICAgICAg
ICB2YXIgYWRkTGlzdGVuZXIgPSBfX2RlcGVuZGVuY3kyX18uYWRkTGlzdGVuZXI7Ci0gICAgICAg
IHZhciByZW1vdmVMaXN0ZW5lciA9IF9fZGVwZW5kZW5jeTJfXy5yZW1vdmVMaXN0ZW5lcjsKLSAg
ICAgICAgdmFyIGhhc0xpc3RlbmVycyA9IF9fZGVwZW5kZW5jeTJfXy5oYXNMaXN0ZW5lcnM7Ci0g
ICAgICAgIHZhciBzZW5kRXZlbnQgPSBfX2RlcGVuZGVuY3kyX18uc2VuZEV2ZW50OwotCi0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgICBUaGlzIG1peGluIGFsbG93cyBmb3IgRW1iZXIgb2JqZWN0cyB0byBzdWJzY3JpYmUgdG8g
YW5kIGVtaXQgZXZlbnRzLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoRW1iZXIuRXZlbnRlZCwgewot
ICAgICAgICAgICAgICAgIGdyZWV0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIC8v
IC4uLgotICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdncmVldCcpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgdmFyIHBlcnNvbiA9
IEFwcC5QZXJzb24uY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgcGVyc29uLm9uKCdncmVldCcs
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPdXIgcGVyc29uIGhh
cyBncmVldGVkJyk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHBlcnNvbi5n
cmVldCgpOwotCi0gICAgICAgICAgICAgIC8vIG91dHB1dHM6ICdPdXIgcGVyc29uIGhhcyBncmVl
dGVkJwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gY2hh
aW4gbXVsdGlwbGUgZXZlbnQgc3Vic2NyaXB0aW9uczoKLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIHBlcnNvbi5vbignZ3JlZXQnLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcpOwotICAg
ICAgICAgICAgICB9KS5vbmUoJ2dyZWV0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZS5sb2coJ09mZmVyIG9uZS10aW1lIHNwZWNpYWwnKTsKLSAgICAgICAgICAgICAgfSku
b2ZmKCdldmVudCcsIHRoaXMsIGZvcmdldFRoaXMpOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAY2xhc3MgRXZlbnRlZAotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVy
Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE1peGlu
LmNyZWF0ZSh7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFN1YnNjcmli
ZXMgdG8gYSBuYW1lZCBldmVudCB3aXRoIGdpdmVuIGZ1bmN0aW9uLgotCi0gICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgIHBlcnNvbi5vbignZGlkTG9h
ZCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgLy8gZmlyZWQgb25jZSB0aGUg
cGVyc29uIGhhcyBsb2FkZWQKLSAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIHRhcmdldCBjYW4gYmUg
cGFzc2VkIGluIGFzIHRoZSAybmQgYXJndW1lbnQgdGhhdCB3aWxsCi0gICAgICAgICAgICAgICAg
ICAgYmUgc2V0IGFzIHRoZSAidGhpcyIgZm9yIHRoZSBjYWxsYmFjay4gVGhpcyBpcyBhIGdvb2Qg
d2F5IHRvIGdpdmUgeW91cgotICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjY2VzcyB0byB0
aGUgb2JqZWN0IHRyaWdnZXJpbmcgdGhlIGV2ZW50LiBXaGVuIHRoZSB0YXJnZXQKLSAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXIgaXMgdXNlZCB0aGUgY2FsbGJhY2sgYmVjb21lcyB0aGUgdGhp
cmQgYXJndW1lbnQuCi0KLSAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9uCi0gICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50Ci0gICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSAidGhpcyIgYmluZGlu
ZyBmb3IgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
bWV0aG9kIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICAgICAgICAgICAgICAgQHJldHVy
biB0aGlzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgb246IGZ1bmN0aW9uKG5h
bWUsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIodGhpcywg
bmFtZSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFN1YnNj
cmliZXMgYSBmdW5jdGlvbiB0byBhIG5hbWVkIGV2ZW50IGFuZCB0aGVuIGNhbmNlbHMgdGhlIHN1
YnNjcmlwdGlvbgotICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgZmlyc3QgdGltZSB0aGUg
ZXZlbnQgaXMgdHJpZ2dlcmVkLiBJdCBpcyBnb29kIHRvIHVzZSBgYG9uZWBgIHdoZW4KLSAgICAg
ICAgICAgICAgICAgICAgeW91IG9ubHkgY2FyZSBhYm91dCB0aGUgZmlyc3QgdGltZSBhbiBldmVu
dCBoYXMgdGFrZW4gcGxhY2UuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB0
YWtlcyBhbiBvcHRpb25hbCAybmQgYXJndW1lbnQgdGhhdCB3aWxsIGJlY29tZSB0aGUgInRoaXMi
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlIGZvciB0aGUgY2FsbGJhY2suIElmIHRoaXMgYXJn
dW1lbnQgaXMgcGFzc2VkIHRoZW4gdGhlIDNyZCBhcmd1bWVudAotICAgICAgICAgICAgICAgICAg
ICBiZWNvbWVzIHRoZSBmdW5jdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG9u
ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0
aGUgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRo
ZSAidGhpcyIgYmluZGluZyBmb3IgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7RnVuY3Rpb259IG1ldGhvZCBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHRoaXMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBvbmU6IGZ1bmN0aW9uKG5hbWUsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtZXRob2QpIHsKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGFkZExpc3RlbmVyKHRoaXMsIG5hbWUsIHRhcmdldCwgbWV0aG9kLCB0cnVl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmlnZ2VycyBhIG5hbWVkIGV2ZW50IGZv
ciB0aGUgb2JqZWN0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAg
ICAgd2lsbCBiZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgYXJl
IHN1YnNjcmliZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50LgotCi0gICAgICAg
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgcGVyc29uLm9u
KCdkaWRFYXQnLCBmdW5jdGlvbihmb29kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc29s
ZS5sb2coJ3BlcnNvbiBhdGUgc29tZSAnICsgZm9vZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgICAgICAgIHBlcnNvbi50cmlnZ2VyKCdkaWRFYXQnLCAnYnJvY2Nv
bGknKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBvdXRwdXRzOiBwZXJzb24gYXRlIHNvbWUg
YnJvY2NvbGkKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgdHJpZ2dlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBU
aGUgbmFtZSBvZiB0aGUgZXZlbnQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3Qu
Li59IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3Mgb24KLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgdmFyIGFy
Z3MgPSBuZXcgQXJyYXkobGVuZ3RoIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NbaSAtIDFd
ID0gYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNl
bmRFdmVudCh0aGlzLCBuYW1lLCBhcmdzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBDYW5jZWxzIHN1YnNjcmlwdGlvbiBmb3IgZ2l2ZW4g
bmFtZSwgdGFyZ2V0LCBhbmQgbWV0aG9kLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
b2ZmCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSBldmVudAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRo
ZSB0YXJnZXQgb2YgdGhlIHN1YnNjcmlwdGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e0Z1bmN0aW9ufSBtZXRob2QgVGhlIGZ1bmN0aW9uIG9mIHRoZSBzdWJzY3JpcHRpb24KLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB0aGlzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgb2ZmOiBmdW5jdGlvbihuYW1lLCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAg
ICAgIHJlbW92ZUxpc3RlbmVyKHRoaXMsIG5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBDaGVja3MgdG8gc2VlIGlmIG9iamVjdCBoYXMgYW55IHN1YnNj
cmlwdGlvbnMgZm9yIG5hbWVkIGV2ZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
aGFzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSBldmVudAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufSBkb2VzIHRo
ZSBvYmplY3QgaGF2ZSBhIHN1YnNjcmlwdGlvbiBmb3IgZXZlbnQKLSAgICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgaGFzOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGhhc0xpc3RlbmVycyh0aGlzLCBuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL21peGlucy9mcmVlemFibGUi
LAotICAgIFsiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0Iiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBt
b2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAg
ICAgICAgKi8KLQotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3kxX18uTWl4aW47Ci0g
ICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0g
X19kZXBlbmRlbmN5M19fLnNldDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhlIGBF
bWJlci5GcmVlemFibGVgIG1peGluIGltcGxlbWVudHMgc29tZSBiYXNpYyBtZXRob2RzIGZvciBt
YXJraW5nIGFuCi0gICAgICAgICAgICAgIG9iamVjdCBhcyBmcm96ZW4uIE9uY2UgYW4gb2JqZWN0
IGlzIGZyb3plbiBpdCBzaG91bGQgYmUgcmVhZCBvbmx5LiBObyBjaGFuZ2VzCi0gICAgICAgICAg
ICAgIG1heSBiZSBtYWRlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgotCi0gICAg
ICAgICAgICAgICMjIEVuZm9yY2VtZW50Ci0KLSAgICAgICAgICAgICAgVG8gZnVsbHkgc3VwcG9y
dCBmcmVlemluZyBpbiB5b3VyIHN1YmNsYXNzLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgbWl4aW4g
YW5kCi0gICAgICAgICAgICAgIG92ZXJyaWRlIGFueSBtZXRob2QgdGhhdCBtaWdodCBhbHRlciBh
bnkgcHJvcGVydHkgb24gdGhlIG9iamVjdCB0byBpbnN0ZWFkCi0gICAgICAgICAgICAgIHJhaXNl
IGFuIGV4Y2VwdGlvbi4gWW91IGNhbiBjaGVjayB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0IGJ5IGNo
ZWNraW5nIHRoZQotICAgICAgICAgICAgICBgaXNGcm96ZW5gIHByb3BlcnR5LgotCi0gICAgICAg
ICAgICAgIEFsdGhvdWdoIGZ1dHVyZSB2ZXJzaW9ucyBvZiBKYXZhU2NyaXB0IG1heSBzdXBwb3J0
IGxhbmd1YWdlLWxldmVsIGZyZWV6aW5nCi0gICAgICAgICAgICAgIG9iamVjdCBvYmplY3RzLCB0
aGF0IGlzIG5vdCB0aGUgY2FzZSB0b2RheS4gRXZlbiBpZiBhbiBvYmplY3QgaXMgZnJlZXphYmxl
LAotICAgICAgICAgICAgICBpdCBpcyBzdGlsbCB0ZWNobmljYWxseSBwb3NzaWJsZSB0byBtb2Rp
ZnkgdGhlIG9iamVjdCwgZXZlbiB0aG91Z2ggaXQgY291bGQKLSAgICAgICAgICAgICAgYnJlYWsg
b3RoZXIgcGFydHMgb2YgeW91ciBhcHBsaWNhdGlvbiB0aGF0IGRvIG5vdCBleHBlY3QgYSBmcm96
ZW4gb2JqZWN0IHRvCi0gICAgICAgICAgICAgIGNoYW5nZS4gSXQgaXMsIHRoZXJlZm9yZSwgdmVy
eSBpbXBvcnRhbnQgdGhhdCB5b3UgYWx3YXlzIHJlc3BlY3QgdGhlCi0gICAgICAgICAgICAgIGBp
c0Zyb3plbmAgcHJvcGVydHkgb24gYWxsIGZyZWV6YWJsZSBvYmplY3RzLgotCi0gICAgICAgICAg
ICAgICMjIEV4YW1wbGUgVXNhZ2UKLQotICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBiZWxvdyBz
aG93cyBhIHNpbXBsZSBvYmplY3QgdGhhdCBpbXBsZW1lbnQgdGhlIGBFbWJlci5GcmVlemFibGVg
Ci0gICAgICAgICAgICAgIHByb3RvY29sLgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgQ29udGFjdCA9IEVtYmVyLk9iamVjdC5leHRlbmQoRW1iZXIuRnJlZXph
YmxlLCB7Ci0gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBudWxsLAotICAgICAgICAgICAgICAg
IGxhc3ROYW1lOiBudWxsLAotCi0gICAgICAgICAgICAgICAgLy8gc3dhcHMgdGhlIG5hbWVzCi0g
ICAgICAgICAgICAgICAgc3dhcE5hbWVzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLmdldCgnaXNGcm96ZW4nKSkgdGhyb3cgRW1iZXIuRlJPWkVOX0VSUk9SOwotICAg
ICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMuZ2V0KCdmaXJzdE5hbWUnKTsKLSAgICAgICAg
ICAgICAgICAgIHRoaXMuc2V0KCdmaXJzdE5hbWUnLCB0aGlzLmdldCgnbGFzdE5hbWUnKSk7Ci0g
ICAgICAgICAgICAgICAgICB0aGlzLnNldCgnbGFzdE5hbWUnLCB0bXApOwotICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgIGMgPSBDb250YWN0LmNyZWF0ZSh7IGZpcnN0TmFtZTogIkpvaG4i
LCBsYXN0TmFtZTogIkRvZSIgfSk7Ci0gICAgICAgICAgICAgIGMuc3dhcE5hbWVzKCk7ICAvLyBy
ZXR1cm5zIGMKLSAgICAgICAgICAgICAgYy5mcmVlemUoKTsKLSAgICAgICAgICAgICAgYy5zd2Fw
TmFtZXMoKTsgIC8vIEVYQ0VQVElPTgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAjIyBDb3B5aW5nCi0KLSAgICAgICAgICAgICAgVXN1YWxseSB0aGUgYEVtYmVyLkZyZWV6YWJs
ZWAgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgaW4gY29vcGVyYXRpb24gd2l0aCB0aGUKLSAgICAg
ICAgICAgICAgYEVtYmVyLkNvcHlhYmxlYCBwcm90b2NvbCwgd2hpY2ggZGVmaW5lcyBhIGBmcm96
ZW5Db3B5KClgIG1ldGhvZCB0aGF0IHdpbGwKLSAgICAgICAgICAgICAgcmV0dXJuIGEgZnJvemVu
IG9iamVjdCwgaWYgdGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoaXMgbWV0aG9kIGFzIHdlbGwuCi0K
LSAgICAgICAgICAgICAgQGNsYXNzIEZyZWV6YWJsZQotICAgICAgICAgICAgICBAbmFtZXNwYWNl
IEVtYmVyCi0gICAgICAgICAgICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICAgICAgICAgICovCi0g
ICAgICAgIHZhciBGcmVlemFibGUgPSBNaXhpbi5jcmVhdGUoewotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgU2V0IHRvIGB0cnVlYCB3aGVuIHRoZSBvYmplY3QgaXMgZnJv
emVuLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBkZXRlY3QKLSAgICAgICAgICAgICAgICAgICAgd2hl
dGhlciB5b3VyIG9iamVjdCBpcyBmcm96ZW4gb3Igbm90LgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBpc0Zyb3plbgotICAgICAgICAgICAgICAgICAgICBAdHlwZSBCb29sZWFuCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaXNGcm96ZW46IGZhbHNlLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgRnJlZXplcyB0aGUgb2JqZWN0LiBPbmNl
IHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCB0aGUgb2JqZWN0IHNob3VsZAotICAgICAgICAg
ICAgICAgICAgICBubyBsb25nZXIgYWxsb3cgYW55IHByb3BlcnRpZXMgdG8gYmUgZWRpdGVkLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZnJlZXplCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge09iamVjdH0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBmcmVlemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywg
J2lzRnJvemVuJykpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
ICAgICAgICBzZXQodGhpcywgJ2lzRnJvemVuJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSk7Ci0gICAgICAgIF9fZXhwb3J0
c19fLkZyZWV6YWJsZSA9IEZyZWV6YWJsZTsKLSAgICAgICAgdmFyIEZST1pFTl9FUlJPUiA9ICJG
cm96ZW4gb2JqZWN0IGNhbm5vdCBiZSBtb2RpZmllZC4iOwotICAgICAgICBfX2V4cG9ydHNfXy5G
Uk9aRU5fRVJST1IgPSBGUk9aRU5fRVJST1I7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1y
dW50aW1lL21peGlucy9tdXRhYmxlX2FycmF5IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAi
ZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItcnVudGltZS9t
aXhpbnMvYXJyYXkiLCAiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlIiwg
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0
aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9f
ZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5k
ZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotCi0KLSAgICAgICAg
Ly8gcmVxdWlyZSgnZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXknKTsKLSAgICAgICAgLy8gcmVx
dWlyZSgnZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlJyk7Ci0KLSAgICAg
ICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLgotICAgICAgICAvLyBDT05TVEFOVFMKLSAgICAgICAgLy8KLQotICAgICAgICB2YXIg
T1VUX09GX1JBTkdFX0VYQ0VQVElPTiA9ICJJbmRleCBvdXQgb2YgcmFuZ2UiOwotICAgICAgICB2
YXIgRU1QVFkgPSBbXTsKLQotICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgIC8vIEhFTFBFUlMKLSAgICAg
ICAgLy8KLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAg
dmFyIHNldCA9IF9fZGVwZW5kZW5jeTJfXy5zZXQ7Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX19k
ZXBlbmRlbmN5M19fLmlzQXJyYXk7Ci0gICAgICAgIHZhciBFbWJlckVycm9yID0gX19kZXBlbmRl
bmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTVfXy5N
aXhpbjsKLSAgICAgICAgdmFyIHJlcXVpcmVkID0gX19kZXBlbmRlbmN5NV9fLnJlcXVpcmVkOwot
ICAgICAgICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgTXV0YWJsZUVudW1lcmFibGUgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIEVudW1lcmFibGUgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgbWl4aW4gZGVmaW5lcyB0aGUgQVBJIGZvciBt
b2RpZnlpbmcgYXJyYXktbGlrZSBvYmplY3RzLiBUaGVzZSBtZXRob2RzCi0gICAgICAgICAgICAg
IGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gYSBjb2xsZWN0aW9uIHRoYXQga2VlcHMgaXRzIGl0ZW1z
IGluIGFuIG9yZGVyZWQgc2V0LgotICAgICAgICAgICAgICBJdCBidWlsZHMgdXBvbiB0aGUgQXJy
YXkgbWl4aW4gYW5kIGFkZHMgbWV0aG9kcyB0byBtb2RpZnkgdGhlIGFycmF5LgotICAgICAgICAg
ICAgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBpbmNsdWRlIEFycmF5
UHJveHkgYW5kIEFycmF5Q29udHJvbGxlci4KLQotICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRh
bnQgdG8gdXNlIHRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3MgdG8gbW9kaWZ5IGFycmF5cyBzbyB0
aGF0Ci0gICAgICAgICAgICAgIGNoYW5nZXMgYXJlIG9ic2VydmFibGUuIFRoaXMgYWxsb3dzIHRo
ZSBiaW5kaW5nIHN5c3RlbSBpbiBFbWJlciB0byBmdW5jdGlvbgotICAgICAgICAgICAgICBjb3Jy
ZWN0bHkuCi0KLQotICAgICAgICAgICAgICBOb3RlIHRoYXQgYW4gQXJyYXkgY2FuIGNoYW5nZSBl
dmVuIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGlzIG1peGluLgotICAgICAgICAgICAgICBG
b3IgZXhhbXBsZSwgb25lIG1pZ2h0IGltcGxlbWVudCBhIFNwYXJzZUFycmF5IHRoYXQgY2Fubm90
IGJlIGRpcmVjdGx5Ci0gICAgICAgICAgICAgIG1vZGlmaWVkLCBidXQgaWYgaXRzIHVuZGVybHlp
bmcgZW51bWVyYWJsZSBjaGFuZ2VzLCBpdCB3aWxsIGNoYW5nZSBhbHNvLgotCi0gICAgICAgICAg
ICAgIEBjbGFzcyBNdXRhYmxlQXJyYXkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgICAgICAgICAgICBAdXNlcyBFbWJlci5BcnJheQotICAgICAgICAgICAgICBAdXNlcyBFbWJl
ci5NdXRhYmxlRW51bWVyYWJsZQotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IE1peGluLmNyZWF0ZShFbWJlckFycmF5LCBNdXRhYmxlRW51bWVyYWJsZSwg
ewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgX19SZXF1aXJlZC5fXyBZ
b3UgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYXBwbHkgdGhpcyBtaXhpbi4KLQotICAg
ICAgICAgICAgICAgICAgICBUaGlzIGlzIG9uZSBvZiB0aGUgcHJpbWl0aXZlcyB5b3UgbXVzdCBp
bXBsZW1lbnQgdG8gc3VwcG9ydCBgRW1iZXIuQXJyYXlgLgotICAgICAgICAgICAgICAgICAgICBZ
b3Ugc2hvdWxkIHJlcGxhY2UgYW10IG9iamVjdHMgc3RhcnRlZCBhdCBpZHggd2l0aCB0aGUgb2Jq
ZWN0cyBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFycmF5LiBZb3Ugc2hvdWxk
IGFsc28gY2FsbCBgdGhpcy5lbnVtZXJhYmxlQ29udGVudERpZENoYW5nZSgpYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgcmVwbGFjZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
e051bWJlcn0gaWR4IFN0YXJ0aW5nIGluZGV4IGluIHRoZSBhcnJheSB0byByZXBsYWNlLiBJZgot
ICAgICAgICAgICAgICAgICAgICAgIGlkeCA+PSBsZW5ndGgsIHRoZW4gYXBwZW5kIHRvIHRoZSBl
bmQgb2YgdGhlIGFycmF5LgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gYW10
IE51bWJlciBvZiBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20KLSAgICAgICAg
ICAgICAgICAgICAgICB0aGUgYXJyYXksIHN0YXJ0aW5nIGF0ICppZHgqLgotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge0FycmF5fSBvYmplY3RzIEFuIGFycmF5IG9mIHplcm8gb3IgbW9yZSBv
YmplY3RzIHRoYXQgc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgaW50
byB0aGUgYXJyYXkgYXQgKmlkeCoKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBy
ZXBsYWNlOiByZXF1aXJlZCgpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgUmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBhcnJheS4gVGhpcyBpcyB1c2VmdWwgaWYg
eW91Ci0gICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gcmV1c2UgYW4gZXhpc3RpbmcgYXJyYXkg
d2l0aG91dCBoYXZpbmcgdG8gcmVjcmVhdGUgaXQuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gWyJyZWQiLCAiZ3Jl
ZW4iLCAiYmx1ZSJdOwotICAgICAgICAgICAgICAgICAgICBjb2xvci5sZW5ndGgoKTsgICAvLyAg
MwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuY2xlYXIoKTsgICAvLyAgW10KLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JzLmxlbmd0aCgpOyAgLy8gIDAKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjbGVhcgotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gQW4gZW1wdHkgQXJyYXkuCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgbGVuID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICBpZiAobGVu
ID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5yZXBsYWNlKDAsIGxlbiwgRU1QVFkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFRoaXMgd2lsbCB1c2UgdGhlIHByaW1pdGl2ZSBgcmVwbGFjZSgpYCBtZXRob2QgdG8gaW5z
ZXJ0IGFuIG9iamVjdCBhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluZGV4
LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbG9ycyA9IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXTsKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JzLmluc2VydEF0KDIsICJ5ZWxsb3ciKTsgIC8vIFsicmVkIiwgImdyZWVuIiwg
InllbGxvdyIsICJibHVlIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLmluc2VydEF0KDUs
ICJvcmFuZ2UiKTsgIC8vIEVycm9yOiBJbmRleCBvdXQgb2YgcmFuZ2UKLSAgICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbnNlcnRBdAotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge051bWJlcn0gaWR4IGluZGV4IG9mIGluc2VydCB0aGUgb2Jq
ZWN0IGF0LgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVj
dCB0byBpbnNlcnQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJl
Y2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5zZXJ0QXQ6IGZ1bmN0
aW9uKGlkeCwgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkeCA+IGdldCh0aGlzLCAn
bGVuZ3RoJykpIAotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihPVVRf
T0ZfUkFOR0VfRVhDRVBUSU9OKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2UoaWR4LCAw
LCBbb2JqZWN0XSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIGFuIG9iamVj
dCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHVzaW5nIHRoZSBgcmVwbGFjZSgpYCBwcmltaXRpdmUK
LSAgICAgICAgICAgICAgICAgICAgbWV0aG9kLiBZb3UgY2FuIHBhc3MgZWl0aGVyIGEgc2luZ2xl
IGluZGV4LCBvciBhIHN0YXJ0IGFuZCBhIGxlbmd0aC4KLQotICAgICAgICAgICAgICAgICAgICBJ
ZiB5b3UgcGFzcyBhIHN0YXJ0IGFuZCBsZW5ndGggdGhhdCBpcyBiZXlvbmQgdGhlCi0gICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIGBPVVRfT0ZfUkFO
R0VfRVhDRVBUSU9OYC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIiwgInll
bGxvdyIsICJvcmFuZ2UiXTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnJlbW92ZUF0KDAp
OyAgICAgLy8gWyJncmVlbiIsICJibHVlIiwgInllbGxvdyIsICJvcmFuZ2UiXQotICAgICAgICAg
ICAgICAgICAgICBjb2xvcnMucmVtb3ZlQXQoMiwgMik7ICAvLyBbImdyZWVuIiwgImJsdWUiXQot
ICAgICAgICAgICAgICAgICAgICBjb2xvcnMucmVtb3ZlQXQoNCwgMik7ICAvLyBFcnJvcjogSW5k
ZXggb3V0IG9mIHJhbmdlCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVtb3ZlQXQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1i
ZXJ9IHN0YXJ0IGluZGV4LCBzdGFydCBvZiByYW5nZQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge051bWJlcn0gbGVuIGxlbmd0aCBvZiBwYXNzaW5nIHJhbmdlCi0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJlbW92ZUF0OiBmdW5jdGlvbihzdGFydCwgbGVuKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2Ygc3RhcnQpIHsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ID49IGdldCh0aGlzLCAnbGVuZ3RoJykpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihPVVRfT0ZfUkFO
R0VfRVhDRVBUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGZhc3QgY2FzZQotICAgICAgICAgICAgICAgICAgICBpZiAobGVuID09PSB1bmRlZmlu
ZWQpIAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5yZXBsYWNlKHN0YXJ0LCBsZW4sIEVNUFRZKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBQdXNoIHRoZSBvYmplY3Qgb250byB0aGUgZW5k
IG9mIHRoZSBhcnJheS4gV29ya3MganVzdCBsaWtlIGBwdXNoKClgIGJ1dCBpdAotICAgICAgICAg
ICAgICAgICAgICBpcyBLVk8tY29tcGxpYW50LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFsicmVkIiwgImdyZWVu
Il07Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoT2JqZWN0KCJibGFjayIpOyAgICAg
Ly8gWyJyZWQiLCAiZ3JlZW4iLCAiYmxhY2siXQotICAgICAgICAgICAgICAgICAgICBjb2xvcnMu
cHVzaE9iamVjdChbInllbGxvdyJdKTsgIC8vIFsicmVkIiwgImdyZWVuIiwgWyJ5ZWxsb3ciXV0K
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBw
dXNoT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Kn0gb2JqIG9iamVjdCB0byBw
dXNoCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4gb2JqZWN0IHNhbWUgb2JqZWN0IHBhc3Nl
ZCBhcyBhIHBhcmFtCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHVzaE9iamVj
dDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRBdChnZXQodGhp
cywgJ2xlbmd0aCcpLCBvYmopOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQWRkIHRoZSBv
YmplY3RzIGluIHRoZSBwYXNzZWQgbnVtZXJhYmxlIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBE
ZWZlcnMKLSAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nIG9ic2VydmVycyBvZiB0aGUgY2hh
bmdlIHVudGlsIGFsbCBvYmplY3RzIGFyZSBhZGRlZC4KLQotICAgICAgICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCJdOwot
ICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaE9iamVjdHMoWyJ5ZWxsb3ciLCAib3Jhbmdl
Il0pOyAgLy8gWyJyZWQiLCAieWVsbG93IiwgIm9yYW5nZSJdCi0gICAgICAgICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcHVzaE9iamVjdHMKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3Rz
IHRvIGFkZAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2
ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdXNoT2JqZWN0czogZnVuY3Rp
b24ob2JqZWN0cykgewotICAgICAgICAgICAgICAgIGlmICghKEVudW1lcmFibGUuZGV0ZWN0KG9i
amVjdHMpIHx8IGlzQXJyYXkob2JqZWN0cykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoIk11c3QgcGFzcyBFbWJlci5FbnVtZXJhYmxlIHRvIEVtYmVyLk11dGFi
bGVBcnJheSNwdXNoT2JqZWN0cyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB0aGlzLnJlcGxhY2UoZ2V0KHRoaXMsICdsZW5ndGgnKSwgMCwgb2JqZWN0cyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgUG9wIG9iamVjdCBmcm9tIGFycmF5IG9yIG5pbCBpZiBub25l
IGFyZSBsZWZ0LiBXb3JrcyBqdXN0IGxpa2UgYHBvcCgpYCBidXQKLSAgICAgICAgICAgICAgICAg
ICAgaXQgaXMgS1ZPLWNvbXBsaWFudC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJi
bHVlIl07Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wb3BPYmplY3QoKTsgICAvLyAiYmx1
ZSIKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JzKTsgIC8vIFsicmVkIiwg
ImdyZWVuIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBwb3BPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiBvYmplY3QKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwb3BPYmplY3Q6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHZhciBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpOwotICAgICAgICAg
ICAgICAgIGlmIChsZW4gPT09IDApIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LQotICAgICAgICAgICAgICAgIHZhciByZXQgPSB0aGlzLm9iamVjdEF0KGxlbi0xKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLnJlbW92ZUF0KGxlbi0xLCAxKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFNoaWZ0IGFuIG9iamVjdCBmcm9tIHN0YXJ0IG9mIGFycmF5IG9yIG5pbCBpZiBub25l
IGFyZSBsZWZ0LiBXb3JrcyBqdXN0Ci0gICAgICAgICAgICAgICAgICAgIGxpa2UgYHNoaWZ0KClg
IGJ1dCBpdCBpcyBLVk8tY29tcGxpYW50LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFsicmVkIiwgImdyZWVuIiwg
ImJsdWUiXTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnNoaWZ0T2JqZWN0KCk7ICAvLyAi
cmVkIgotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb2xvcnMpOyAgIC8vIFsiZ3Jl
ZW4iLCAiYmx1ZSJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2Qgc2hpZnRPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiBvYmpl
Y3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzaGlmdE9iamVjdDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnbGVuZ3RoJykgPT09IDApIAot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gdGhpcy5vYmplY3RBdCgwKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUF0KDApOwot
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgVW5zaGlmdCBhbiBvYmplY3QgdG8gc3RhcnQgb2Yg
YXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgdW5zaGlmdCgpYCBidXQgaXQgaXMKLSAgICAgICAgICAg
ICAgICAgICAgS1ZPLWNvbXBsaWFudC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCJdOwotICAgICAgICAg
ICAgICAgICAgICBjb2xvcnMudW5zaGlmdE9iamVjdCgieWVsbG93Iik7ICAgIC8vIFsieWVsbG93
IiwgInJlZCJdCi0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy51bnNoaWZ0T2JqZWN0KFsiYmxh
Y2siXSk7ICAgLy8gW1siYmxhY2siXSwgInllbGxvdyIsICJyZWQiXQotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVuc2hpZnRPYmplY3QKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIHVuc2hpZnQKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiBvYmplY3Qgc2FtZSBvYmplY3QgcGFzc2VkIGFzIGEgcGFy
YW0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB1bnNoaWZ0T2JqZWN0OiBmdW5j
dGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICB0aGlzLmluc2VydEF0KDAsIG9iaik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9iajsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBBZGRzIHRoZSBuYW1lZCBvYmplY3RzIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGFycmF5LiBEZWZlcnMgbm90aWZ5aW5nCi0gICAgICAgICAgICAgICAgICAg
IG9ic2VydmVycyB1bnRpbCBhbGwgb2JqZWN0cyBoYXZlIGJlZW4gYWRkZWQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3Jz
ID0gWyJyZWQiXTsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnVuc2hpZnRPYmplY3RzKFsi
YmxhY2siLCAid2hpdGUiXSk7ICAgLy8gWyJibGFjayIsICJ3aGl0ZSIsICJyZWQiXQotICAgICAg
ICAgICAgICAgICAgICBjb2xvcnMudW5zaGlmdE9iamVjdHMoInllbGxvdyIpOyAvLyBUeXBlIEVy
cm9yOiAndW5kZWZpbmVkJyBpcyBub3QgYSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVuc2hpZnRPYmplY3RzCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZX0gb2JqZWN0cyB0aGUgb2JqZWN0
cyB0byBhZGQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2Vp
dmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5zaGlmdE9iamVjdHM6IGZ1
bmN0aW9uKG9iamVjdHMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2UoMCwgMCwgb2Jq
ZWN0cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZSBvYmplY3RzIGluIHRo
ZSBhcnJheS4gV29ya3MganVzdCBsaWtlIGByZXZlcnNlKClgIGJ1dCBpdCBpcwotICAgICAgICAg
ICAgICAgICAgICBLVk8tY29tcGxpYW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qg
cmV2ZXJzZU9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9
IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldmVyc2VPYmpl
Y3RzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGVuID0gZ2V0KHRoaXMsICds
ZW5ndGgnKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuID09PSAwKSAKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgdmFyIG9iamVjdHMgPSB0aGlzLnRv
QXJyYXkoKS5yZXZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlKDAsIGxlbiwg
b2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVwbGFjZSBhbGwgdGhlIHRo
ZSByZWNlaXZlcidzIGNvbnRlbnQgd2l0aCBjb250ZW50IG9mIHRoZSBhcmd1bWVudC4KLSAgICAg
ICAgICAgICAgICAgICAgSWYgYXJndW1lbnQgaXMgYW4gZW1wdHkgYXJyYXkgcmVjZWl2ZXIgd2ls
bCBiZSBjbGVhcmVkLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXTsKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JzLnNldE9iamVjdHMoWyJibGFjayIsICJ3aGl0ZSJdKTsg
IC8vIFsiYmxhY2siLCAid2hpdGUiXQotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuc2V0T2Jq
ZWN0cyhbXSk7ICAgICAgICAgICAgICAgICAgLy8gW10KLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRPYmplY3RzCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RW1iZXIuQXJyYXl9IG9iamVjdHMgYXJyYXkgd2hvc2UgY29udGVudCB3
aWxsIGJlIHVzZWQgZm9yIHJlcGxhY2luZwotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNv
bnRlbnQgb2YgdGhlIHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVy
LkFycmF5fSByZWNlaXZlciB3aXRoIHRoZSBuZXcgY29udGVudAotICAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBzZXRPYmplY3RzOiBmdW5jdGlvbihvYmplY3RzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuY2xlYXIoKTsKLQotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBnZXQodGhp
cywgJ2xlbmd0aCcpOwotICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZSgwLCBsZW4sIG9iamVj
dHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gSU1QTEVNRU5UIEVtYmVyLk11dGFibGVFbnVt
ZXJhYmxlCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgUmVtb3ZlIGFsbCBvY2N1cmFuY2VzIG9mIGFuIG9iamVjdCBpbiB0aGUgYXJyYXkuCi0K
LSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2
YXIgY2l0aWVzID0gWyJDaGljYWdvIiwgIkJlcmxpbiIsICJMaW1hIiwgIkNoaWNhZ28iXTsKLSAg
ICAgICAgICAgICAgICAgICAgY2l0aWVzLnJlbW92ZU9iamVjdCgiQ2hpY2FnbyIpOyAgLy8gWyJC
ZXJsaW4iLCAiTGltYSJdCi0gICAgICAgICAgICAgICAgICAgIGNpdGllcy5yZW1vdmVPYmplY3Qo
IkxpbWEiKTsgICAgIC8vIFsiQmVybGluIl0KLSAgICAgICAgICAgICAgICAgICAgY2l0aWVzLnJl
bW92ZU9iamVjdCgiVG9reW8iKSAgICAgLy8gWyJCZXJsaW4iXQotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZU9iamVjdAotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gcmVtb3ZlCi0gICAgICAgICAg
ICAgICAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHJlbW92ZU9iamVjdDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGxvYyA9IGdldCh0aGlzLCAnbGVuZ3RoJykgfHwgMDsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAoLS1sb2MgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY3VyT2Jq
ZWN0ID0gdGhpcy5vYmplY3RBdChsb2MpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyT2Jq
ZWN0ID09PSBvYmopIAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBdChsb2Mp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBQdXNoIHRo
ZSBvYmplY3Qgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheSBpZiBpdCBpcyBub3QgYWxyZWFkeQot
ICAgICAgICAgICAgICAgICAgICBwcmVzZW50IGluIHRoZSBhcnJheS4KLQotICAgICAgICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaXRpZXMgPSBb
IkNoaWNhZ28iLCAiQmVybGluIl07Ci0gICAgICAgICAgICAgICAgICAgIGNpdGllcy5hZGRPYmpl
Y3QoIkxpbWEiKTsgICAgLy8gWyJDaGljYWdvIiwgIkJlcmxpbiIsICJMaW1hIl0KLSAgICAgICAg
ICAgICAgICAgICAgY2l0aWVzLmFkZE9iamVjdCgiQmVybGluIik7ICAvLyBbIkNoaWNhZ28iLCAi
QmVybGluIiwgIkxpbWEiXQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgICBAbWV0aG9kIGFkZE9iamVjdAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0geyp9
IG9iaiBvYmplY3QgdG8gYWRkLCBpZiBub3QgYWxyZWFkeSBwcmVzZW50Ci0gICAgICAgICAgICAg
ICAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIGFkZE9iamVjdDogZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLmNvbnRhaW5zKG9iaikpIAotICAgICAgICAgICAgICAgICAgICB0aGlzLnB1
c2hPYmplY3Qob2JqKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4
aW5zL211dGFibGVfZW51bWVyYWJsZSIsCi0gICAgWyJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0
aWxzIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCAiZW1iZXItbWV0YWwvbWl4
aW4iLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAg
ICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kxX18uZm9yRWFjaDsKLSAgICAgICAgdmFy
IEVudW1lcmFibGUgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE1p
eGluID0gX19kZXBlbmRlbmN5M19fLk1peGluOwotICAgICAgICB2YXIgcmVxdWlyZWQgPSBfX2Rl
cGVuZGVuY3kzX18ucmVxdWlyZWQ7Ci0gICAgICAgIHZhciBiZWdpblByb3BlcnR5Q2hhbmdlcyA9
IF9fZGVwZW5kZW5jeTRfXy5iZWdpblByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgdmFyIGVuZFBy
b3BlcnR5Q2hhbmdlcyA9IF9fZGVwZW5kZW5jeTRfXy5lbmRQcm9wZXJ0eUNoYW5nZXM7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIFRoaXMgbWl4aW4gZGVmaW5lcyB0aGUgQVBJIGZvciBtb2RpZnlpbmcgZ2VuZXJpYyBl
bnVtZXJhYmxlcy4gVGhlc2UgbWV0aG9kcwotICAgICAgICAgICAgICBjYW4gYmUgYXBwbGllZCB0
byBhbiBvYmplY3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIG9yZGVyZWQgb3IKLSAgICAg
ICAgICAgICAgdW5vcmRlcmVkLgotCi0gICAgICAgICAgICAgIE5vdGUgdGhhdCBhbiBFbnVtZXJh
YmxlIGNhbiBjaGFuZ2UgZXZlbiBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhpcyBtaXhpbi4K
LSAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgTWFwcGVkRW51bWVyYWJsZSBjYW5ub3QgYmUg
ZGlyZWN0bHkgbW9kaWZpZWQgYnV0IGlmIGl0cwotICAgICAgICAgICAgICB1bmRlcmx5aW5nIGVu
dW1lcmFibGUgY2hhbmdlcywgaXQgd2lsbCBjaGFuZ2UgYWxzby4KLQotICAgICAgICAgICAgICAj
IyBBZGRpbmcgT2JqZWN0cwotCi0gICAgICAgICAgICAgIFRvIGFkZCBhbiBvYmplY3QgdG8gYW4g
ZW51bWVyYWJsZSwgdXNlIHRoZSBgYWRkT2JqZWN0KClgIG1ldGhvZC4gVGhpcwotICAgICAgICAg
ICAgICBtZXRob2Qgd2lsbCBvbmx5IGFkZCB0aGUgb2JqZWN0IHRvIHRoZSBlbnVtZXJhYmxlIGlm
IHRoZSBvYmplY3QgaXMgbm90Ci0gICAgICAgICAgICAgIGFscmVhZHkgcHJlc2VudCBhbmQgaXMg
b2YgYSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgZW51bWVyYWJsZS4KLQotICAgICAgICAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHNldC5hZGRPYmplY3QoY29udGFjdCk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIFJlbW92aW5nIE9iamVjdHMKLQotICAg
ICAgICAgICAgICBUbyByZW1vdmUgYW4gb2JqZWN0IGZyb20gYW4gZW51bWVyYWJsZSwgdXNlIHRo
ZSBgcmVtb3ZlT2JqZWN0KClgIG1ldGhvZC4gVGhpcwotICAgICAgICAgICAgICB3aWxsIG9ubHkg
cmVtb3ZlIHRoZSBvYmplY3QgaWYgaXQgaXMgcHJlc2VudCBpbiB0aGUgZW51bWVyYWJsZSwgb3Ro
ZXJ3aXNlCi0gICAgICAgICAgICAgIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCi0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBzZXQucmVtb3ZlT2JqZWN0KGNv
bnRhY3QpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyBJbXBsZW1lbnRp
bmcgSW4gWW91ciBPd24gQ29kZQotCi0gICAgICAgICAgICAgIElmIHlvdSBhcmUgaW1wbGVtZW50
aW5nIGFuIG9iamVjdCBhbmQgd2FudCB0byBzdXBwb3J0IHRoaXMgQVBJLCBqdXN0IGluY2x1ZGUK
LSAgICAgICAgICAgICAgdGhpcyBtaXhpbiBpbiB5b3VyIGNsYXNzIGFuZCBpbXBsZW1lbnQgdGhl
IHJlcXVpcmVkIG1ldGhvZHMuIEluIHlvdXIgdW5pdAotICAgICAgICAgICAgICB0ZXN0cywgYmUg
c3VyZSB0byBhcHBseSB0aGUgRW1iZXIuTXV0YWJsZUVudW1lcmFibGVUZXN0cyB0byB5b3VyIG9i
amVjdC4KLQotICAgICAgICAgICAgICBAY2xhc3MgTXV0YWJsZUVudW1lcmFibGUKLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAdXNlcyBFbWJlci5FbnVtZXJh
YmxlCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4
aW4uY3JlYXRlKEVudW1lcmFibGUsIHsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFw
cGx5IHRoaXMgbWl4aW4uCi0KLSAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gYWRkIHRo
ZSBwYXNzZWQgb2JqZWN0IHRvIHRoZSByZWNlaXZlciBpZiB0aGUgb2JqZWN0IGlzIG5vdAotICAg
ICAgICAgICAgICAgICAgICBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGNvbGxlY3Rpb24uIElmIHRo
ZSBvYmplY3QgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgaGFz
IG5vIGVmZmVjdC4KLQotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcGFzc2VkIG9iamVjdCBp
cyBvZiBhIHR5cGUgbm90IHN1cHBvcnRlZCBieSB0aGUgcmVjZWl2ZXIsCi0gICAgICAgICAgICAg
ICAgICAgIHRoZW4gdGhpcyBtZXRob2Qgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4KLQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZE9iamVjdAotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIHRvIHRoZSBlbnVtZXJhYmxl
LgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYXNzZWQgb2JqZWN0
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYWRkT2JqZWN0OiByZXF1aXJlZChG
dW5jdGlvbiksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBZGRzIGVh
Y2ggb2JqZWN0IGluIHRoZSBwYXNzZWQgZW51bWVyYWJsZSB0byB0aGUgcmVjZWl2ZXIuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhZGRPYmplY3RzCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZX0gb2JqZWN0cyB0aGUgb2JqZWN0cyB0byBhZGQuCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gcmVjZWl2ZXIKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBhZGRPYmplY3RzOiBmdW5jdGlvbihvYmplY3RzKSB7Ci0g
ICAgICAgICAgICAgICAgYmVnaW5Qcm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICAgICAgICAg
ICAgZm9yRWFjaChvYmplY3RzLCBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5hZGRPYmplY3Qob2JqKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAg
ICAgICAgICBlbmRQcm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgICAgX19SZXF1aXJlZC5fXyBZb3UgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYXBw
bHkgdGhpcyBtaXhpbi4KLQotICAgICAgICAgICAgICAgICAgICBBdHRlbXB0cyB0byByZW1vdmUg
dGhlIHBhc3NlZCBvYmplY3QgZnJvbSB0aGUgcmVjZWl2ZXIgY29sbGVjdGlvbiBpZiB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIHByZXNlbnQgaW4gdGhlIGNvbGxlY3Rpb24uIElm
IHRoZSBvYmplY3QgaXMgbm90IHByZXNlbnQsCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgbWV0
aG9kIGhhcyBubyBlZmZlY3QuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHBhc3NlZCBv
YmplY3QgaXMgb2YgYSB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJlY2VpdmVyLAotICAgICAg
ICAgICAgICAgICAgICB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24u
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZW1vdmVPYmplY3QKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHJlbW92ZSBmcm9t
IHRoZSBlbnVtZXJhYmxlLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRo
ZSBwYXNzZWQgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVtb3Zl
T2JqZWN0OiByZXF1aXJlZChGdW5jdGlvbiksCi0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFJlbW92ZXMgZWFjaCBvYmplY3QgaW4gdGhlIHBhc3NlZCBlbnVtZXJhYmxl
IGZyb20gdGhlIHJlY2VpdmVyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3Zl
T2JqZWN0cwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV9IG9i
amVjdHMgdGhlIG9iamVjdHMgdG8gcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e09iamVjdH0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1v
dmVPYmplY3RzOiBmdW5jdGlvbihvYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgYmVnaW5Qcm9w
ZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG9iamVjdHMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1v
dmVPYmplY3Qob2JqZWN0c1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVuZFByb3BlcnR5Q2hhbmdlcyh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1y
dW50aW1lL21peGlucy9vYnNlcnZhYmxlIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJl
ci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9nZXRfcHJvcGVydGllcyIsICJlbWJlci1tZXRh
bC9zZXRfcHJvcGVydGllcyIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9ldmVu
dHMiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLW1ldGFsL29ic2VydmVy
IiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL2lzX25vbmUiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVu
Y3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18s
IF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUK
LSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQKLQotICAgICAgICB2YXIgZ2V0ID0gX19k
ZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIGdldFdpdGhEZWZhdWx0ID0gX19kZXBlbmRl
bmN5Ml9fLmdldFdpdGhEZWZhdWx0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19f
LnNldDsKLSAgICAgICAgdmFyIGFwcGx5ID0gX19kZXBlbmRlbmN5NF9fLmFwcGx5OwotICAgICAg
ICB2YXIgZ2V0UHJvcGVydGllcyA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgc2V0UHJvcGVydGllcyA9IF9fZGVwZW5kZW5jeTZfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k3X18uTWl4aW47Ci0gICAgICAgIHZhciBoYXNMaXN0
ZW5lcnMgPSBfX2RlcGVuZGVuY3k4X18uaGFzTGlzdGVuZXJzOwotICAgICAgICB2YXIgYmVnaW5Q
cm9wZXJ0eUNoYW5nZXMgPSBfX2RlcGVuZGVuY3k5X18uYmVnaW5Qcm9wZXJ0eUNoYW5nZXM7Ci0g
ICAgICAgIHZhciBwcm9wZXJ0eVdpbGxDaGFuZ2UgPSBfX2RlcGVuZGVuY3k5X18ucHJvcGVydHlX
aWxsQ2hhbmdlOwotICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3k5
X18ucHJvcGVydHlEaWRDaGFuZ2U7Ci0gICAgICAgIHZhciBlbmRQcm9wZXJ0eUNoYW5nZXMgPSBf
X2RlcGVuZGVuY3k5X18uZW5kUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIgYWRkT2JzZXJ2
ZXIgPSBfX2RlcGVuZGVuY3kxMF9fLmFkZE9ic2VydmVyOwotICAgICAgICB2YXIgYWRkQmVmb3Jl
T2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMF9fLmFkZEJlZm9yZU9ic2VydmVyOwotICAgICAgICB2
YXIgcmVtb3ZlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMF9fLnJlbW92ZU9ic2VydmVyOwotICAg
ICAgICB2YXIgb2JzZXJ2ZXJzRm9yID0gX19kZXBlbmRlbmN5MTBfXy5vYnNlcnZlcnNGb3I7Ci0g
ICAgICAgIHZhciBjYWNoZUZvciA9IF9fZGVwZW5kZW5jeTExX18uY2FjaGVGb3I7Ci0gICAgICAg
IHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3kxMl9fLmlzTm9uZTsKLQotCi0gICAgICAgIHZhciBz
bGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICMjIE92ZXJ2aWV3Ci0KLSAgICAgICAgICAgICAgVGhpcyBtaXhpbiBwcm92aWRlcyBwcm9wZXJ0
aWVzIGFuZCBwcm9wZXJ0eSBvYnNlcnZpbmcgZnVuY3Rpb25hbGl0eSwgY29yZQotICAgICAgICAg
ICAgICBmZWF0dXJlcyBvZiB0aGUgRW1iZXIgb2JqZWN0IG1vZGVsLgotCi0gICAgICAgICAgICAg
IFByb3BlcnRpZXMgYW5kIG9ic2VydmVycyBhbGxvdyBvbmUgb2JqZWN0IHRvIG9ic2VydmUgY2hh
bmdlcyB0byBhCi0gICAgICAgICAgICAgIHByb3BlcnR5IG9uIGFub3RoZXIgb2JqZWN0LiBUaGlz
IGlzIG9uZSBvZiB0aGUgZnVuZGFtZW50YWwgd2F5cyB0aGF0Ci0gICAgICAgICAgICAgIG1vZGVs
cywgY29udHJvbGxlcnMgYW5kIHZpZXdzIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciBpbiBh
biBFbWJlcgotICAgICAgICAgICAgICBhcHBsaWNhdGlvbi4KLQotICAgICAgICAgICAgICBBbnkg
b2JqZWN0IHRoYXQgaGFzIHRoaXMgbWl4aW4gYXBwbGllZCBjYW4gYmUgdXNlZCBpbiBvYnNlcnZl
cgotICAgICAgICAgICAgICBvcGVyYXRpb25zLiBUaGF0IGluY2x1ZGVzIGBFbWJlci5PYmplY3Rg
IGFuZCBtb3N0IG9iamVjdHMgeW91IHdpbGwKLSAgICAgICAgICAgICAgaW50ZXJhY3Qgd2l0aCBh
cyB5b3Ugd3JpdGUgeW91ciBFbWJlciBhcHBsaWNhdGlvbi4KLQotICAgICAgICAgICAgICBOb3Rl
IHRoYXQgeW91IHdpbGwgbm90IGdlbmVyYWxseSBhcHBseSB0aGlzIG1peGluIHRvIGNsYXNzZXMg
eW91cnNlbGYsCi0gICAgICAgICAgICAgIGJ1dCB5b3Ugd2lsbCB1c2UgdGhlIGZlYXR1cmVzIHBy
b3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIGZyZXF1ZW50bHksIHNvIGl0Ci0gICAgICAgICAgICAgIGlz
IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0byB1c2UgaXQuCi0KLSAgICAgICAgICAgICAg
IyMgVXNpbmcgYGdldCgpYCBhbmQgYHNldCgpYAotCi0gICAgICAgICAgICAgIEJlY2F1c2Ugb2Yg
RW1iZXIncyBzdXBwb3J0IGZvciBiaW5kaW5ncyBhbmQgb2JzZXJ2ZXJzLCB5b3Ugd2lsbCBhbHdh
eXMKLSAgICAgICAgICAgICAgYWNjZXNzIHByb3BlcnRpZXMgdXNpbmcgdGhlIGdldCBtZXRob2Qs
IGFuZCBzZXQgcHJvcGVydGllcyB1c2luZyB0aGUKLSAgICAgICAgICAgICAgc2V0IG1ldGhvZC4g
VGhpcyBhbGxvd3MgdGhlIG9ic2VydmluZyBvYmplY3RzIHRvIGJlIG5vdGlmaWVkIGFuZAotICAg
ICAgICAgICAgICBjb21wdXRlZCBwcm9wZXJ0aWVzIHRvIGJlIGhhbmRsZWQgcHJvcGVybHkuCi0K
LSAgICAgICAgICAgICAgTW9yZSBkb2N1bWVudGF0aW9uIGFib3V0IGBnZXRgIGFuZCBgc2V0YCBh
cmUgYmVsb3cuCi0KLSAgICAgICAgICAgICAgIyMgT2JzZXJ2aW5nIFByb3BlcnR5IENoYW5nZXMK
LQotICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IG9ic2VydmUgcHJvcGVydHkgY2hhbmdlcyBz
aW1wbHkgYnkgYWRkaW5nIHRoZSBgb2JzZXJ2ZXNgCi0gICAgICAgICAgICAgIGNhbGwgdG8gdGhl
IGVuZCBvZiB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyB0aGF0IHlvdSB3cml0
ZS4KLSAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAg
ICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1
dGVzIHdoZW5ldmVyIHRoZSAidmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgICAgICAg
ICB9Lm9ic2VydmVzKCd2YWx1ZScpCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICBBbHRob3VnaCB0aGlzIGlzIHRoZSBtb3N0IGNvbW1vbiB3YXkg
dG8gYWRkIGFuIG9ic2VydmVyLCB0aGlzIGNhcGFiaWxpdHkKLSAgICAgICAgICAgICAgaXMgYWN0
dWFsbHkgYnVpbHQgaW50byB0aGUgYEVtYmVyLk9iamVjdGAgY2xhc3Mgb24gdG9wIG9mIHR3byBt
ZXRob2RzCi0gICAgICAgICAgICAgIGRlZmluZWQgaW4gdGhpcyBtaXhpbjogYGFkZE9ic2VydmVy
YCBhbmQgYHJlbW92ZU9ic2VydmVyYC4gWW91IGNhbiB1c2UKLSAgICAgICAgICAgICAgdGhlc2Ug
dHdvIG1ldGhvZHMgdG8gYWRkIGFuZCByZW1vdmUgb2JzZXJ2ZXJzIHlvdXJzZWxmIGlmIHlvdSBu
ZWVkIHRvCi0gICAgICAgICAgICAgIGRvIHNvIGF0IHJ1bnRpbWUuCi0KLSAgICAgICAgICAgICAg
VG8gYWRkIGFuIG9ic2VydmVyIGZvciBhIHByb3BlcnR5LCBjYWxsOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgb2JqZWN0LmFkZE9ic2VydmVyKCdwcm9wZXJ0
eUtleScsIHRhcmdldE9iamVjdCwgdGFyZ2V0QWN0aW9uKQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBUaGlzIHdpbGwgY2FsbCB0aGUgYHRhcmdldEFjdGlvbmAgbWV0aG9kIG9u
IHRoZSBgdGFyZ2V0T2JqZWN0YCB3aGVuZXZlcgotICAgICAgICAgICAgICB0aGUgdmFsdWUgb2Yg
dGhlIGBwcm9wZXJ0eUtleWAgY2hhbmdlcy4KLQotICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYg
YHByb3BlcnR5S2V5YCBpcyBhIGNvbXB1dGVkIHByb3BlcnR5LCB0aGUgb2JzZXJ2ZXIgd2lsbCBi
ZQotICAgICAgICAgICAgICBjYWxsZWQgd2hlbiBhbnkgb2YgdGhlIHByb3BlcnR5IGRlcGVuZGVu
Y2llcyBhcmUgY2hhbmdlZCwgZXZlbiBpZiB0aGUKLSAgICAgICAgICAgICAgcmVzdWx0aW5nIHZh
bHVlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyB1bmNoYW5nZWQuIFRoaXMgaXMgbmVjZXNz
YXJ5Ci0gICAgICAgICAgICAgIGJlY2F1c2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgbm90IGNv
bXB1dGVkIHVudGlsIGBnZXRgIGlzIGNhbGxlZC4KLQotICAgICAgICAgICAgICBAY2xhc3MgT2Jz
ZXJ2YWJsZQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwot
ICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3JlYXRlKHsKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBw
cm9wZXJ0eSBmcm9tIHRoZSBvYmplY3QuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRo
b2QgaXMgdXN1YWxseSBzaW1pbGFyIHRvIHVzaW5nIGBvYmplY3Rba2V5TmFtZV1gIG9yIGBvYmpl
Y3Qua2V5TmFtZWAsCi0gICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIgaXQgc3VwcG9ydHMgYm90
aCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCB0aGUgdW5rbm93blByb3BlcnR5Ci0gICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBgZ2V0YCB1
bmlmaWVzIHRoZSBzeW50YXggZm9yIGFjY2Vzc2luZyBhbGwgdGhlc2Uga2luZHMKLSAgICAgICAg
ICAgICAgICAgICAgb2YgcHJvcGVydGllcywgaXQgY2FuIG1ha2UgbWFueSByZWZhY3RvcmluZ3Mg
ZWFzaWVyLCBzdWNoIGFzIHJlcGxhY2luZyBhCi0gICAgICAgICAgICAgICAgICAgIHNpbXBsZSBw
cm9wZXJ0eSB3aXRoIGEgY29tcHV0ZWQgcHJvcGVydHksIG9yIHZpY2UgdmVyc2EuCi0KLSAgICAg
ICAgICAgICAgICAgICAgIyMjIENvbXB1dGVkIFByb3BlcnRpZXMKLQotICAgICAgICAgICAgICAg
ICAgICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBtZXRob2RzIGRlZmluZWQgd2l0aCB0aGUgYHBy
b3BlcnR5YCBtb2RpZmllcgotICAgICAgICAgICAgICAgICAgICBkZWNsYXJlZCBhdCB0aGUgZW5k
LCBzdWNoIGFzOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgICAgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUn
KTsKLSAgICAgICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1l
JykKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgV2hlbiB5
b3UgY2FsbCBgZ2V0YCBvbiBhIGNvbXB1dGVkIHByb3BlcnR5LCB0aGUgZnVuY3Rpb24gd2lsbCBi
ZQotICAgICAgICAgICAgICAgICAgICBjYWxsZWQgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBi
ZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICBp
dHNlbGYuCi0KLSAgICAgICAgICAgICAgICAgICAgIyMjIFVua25vd24gUHJvcGVydGllcwotCi0g
ICAgICAgICAgICAgICAgICAgIExpa2V3aXNlLCBpZiB5b3UgdHJ5IHRvIGNhbGwgYGdldGAgb24g
YSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcwotICAgICAgICAgICAgICAgICAgICBgdW5kZWZpbmVk
YCwgdGhlIGB1bmtub3duUHJvcGVydHkoKWAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBv
YmplY3QuCi0gICAgICAgICAgICAgICAgICAgIElmIHRoaXMgbWV0aG9kIHJldHVybnMgYW55IHZh
bHVlIG90aGVyIHRoYW4gYHVuZGVmaW5lZGAsIGl0IHdpbGwgYmUgcmV0dXJuZWQKLSAgICAgICAg
ICAgICAgICAgICAgaW5zdGVhZC4gVGhpcyBhbGxvd3MgeW91IHRvIGltcGxlbWVudCAidmlydHVh
bCIgcHJvcGVydGllcyB0aGF0IGFyZQotICAgICAgICAgICAgICAgICAgICBub3QgZGVmaW5lZCB1
cGZyb250LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0Ci0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZQot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBv
ciB1bmRlZmluZWQuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBrZXlOYW1l
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUbyBnZXQgbXVsdGlwbGUgcHJvcGVydGllcyBhdCBvbmNlLCBjYWxsIGBnZXRQcm9wZXJ0aWVz
YAotICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbGlzdCBvZiBzdHJpbmdzIG9yIGFuIGFycmF5
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgcmVjb3JkLmdldFByb3BlcnRpZXMoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd6aXBDb2Rl
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHsgZmlyc3ROYW1lOiAnSm9obicsIGxhc3ROYW1l
OiAnRG9lJywgemlwQ29kZTogJzEwMDExJyB9Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIGlzIGVxdWl2YWxlbnQgdG86Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICByZWNvcmQuZ2V0UHJvcGVydGll
cyhbJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd6aXBDb2RlJ10pOwotICAgICAgICAgICAgICAg
ICAgICAvLyB7IGZpcnN0TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0RvZScsIHppcENvZGU6ICcx
MDAxMScgfQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGdldFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmcu
Li58QXJyYXl9IGxpc3Qgb2Yga2V5cyB0byBnZXQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7SGFzaH0KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZXRQcm9wZXJ0aWVz
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkobnVsbCwgZ2V0UHJv
cGVydGllcywgW3RoaXNdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBw
cm92aWRlZCBrZXkgb3IgcGF0aCB0byB0aGUgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAg
VGhpcyBtZXRob2QgaXMgZ2VuZXJhbGx5IHZlcnkgc2ltaWxhciB0byBjYWxsaW5nIGBvYmplY3Rb
a2V5XSA9IHZhbHVlYCBvcgotICAgICAgICAgICAgICAgICAgICBgb2JqZWN0LmtleSA9IHZhbHVl
YCwgZXhjZXB0IHRoYXQgaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tcHV0ZWQKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydGllcywgdGhlIGBzZXRVbmtub3duUHJvcGVydHkoKWAgbWV0aG9k
IGFuZCBwcm9wZXJ0eSBvYnNlcnZlcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgIyMjIENvbXB1
dGVkIFByb3BlcnRpZXMKLQotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdHJ5IHRvIHNldCBh
IHZhbHVlIG9uIGEga2V5IHRoYXQgaGFzIGEgY29tcHV0ZWQgcHJvcGVydHkgaGFuZGxlcgotICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVkIChzZWUgdGhlIGBnZXQoKWAgbWV0aG9kIGZvciBhbiBl
eGFtcGxlKSwgdGhlbiBgc2V0KClgIHdpbGwgY2FsbAotICAgICAgICAgICAgICAgICAgICB0aGF0
IG1ldGhvZCwgcGFzc2luZyBib3RoIHRoZSB2YWx1ZSBhbmQga2V5IGluc3RlYWQgb2Ygc2ltcGx5
IGNoYW5naW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBpdHNlbGYuIFRoaXMgaXMg
dXNlZnVsIGZvciB0aG9zZSB0aW1lcyB3aGVuIHlvdSBuZWVkIHRvCi0gICAgICAgICAgICAgICAg
ICAgIGltcGxlbWVudCBhIHByb3BlcnR5IHRoYXQgaXMgY29tcG9zZWQgb2Ygb25lIG9yIG1vcmUg
bWVtYmVyCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgIyMjIFVua25vd24gUHJvcGVydGllcwotCi0gICAgICAgICAgICAgICAgICAgIElmIHlv
dSB0cnkgdG8gc2V0IGEgdmFsdWUgb24gYSBrZXkgdGhhdCBpcyB1bmRlZmluZWQgaW4gdGhlIHRh
cmdldAotICAgICAgICAgICAgICAgICAgICBvYmplY3QsIHRoZW4gdGhlIGBzZXRVbmtub3duUHJv
cGVydHkoKWAgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiBUaGlzCi0gICAgICAgICAg
ICAgICAgICAgIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eSB0byBpbXBsZW1lbnQgY29tcGxleCAi
dmlydHVhbCIgcHJvcGVydGllcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGFyZSBub3QgcHJl
ZGVmaW5lZCBvbiB0aGUgb2JqZWN0LiBJZiBgc2V0VW5rbm93blByb3BlcnR5KClgIHJldHVybnMK
LSAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB0aGVuIGBzZXQoKWAgd2lsbCBzaW1wbHkg
c2V0IHRoZSB2YWx1ZSBvbiB0aGUgb2JqZWN0LgotCi0gICAgICAgICAgICAgICAgICAgICMjIyBQ
cm9wZXJ0eSBPYnNlcnZlcnMKLQotICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBj
aGFuZ2luZyB0aGUgcHJvcGVydHksIGBzZXQoKWAgd2lsbCBhbHNvIHJlZ2lzdGVyIGEgcHJvcGVy
dHkKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHdpdGggdGhlIG9iamVjdC4gVW5sZXNzIHlv
dSBoYXZlIHBsYWNlZCB0aGlzIGNhbGwgaW5zaWRlIG9mIGEKLSAgICAgICAgICAgICAgICAgICAg
YGJlZ2luUHJvcGVydHlDaGFuZ2VzKClgIGFuZCBgZW5kUHJvcGVydHlDaGFuZ2VzKCksYCBhbnkg
ImxvY2FsIiBvYnNlcnZlcnMKLSAgICAgICAgICAgICAgICAgICAgKGkuZS4gb2JzZXJ2ZXIgbWV0
aG9kcyBkZWNsYXJlZCBvbiB0aGUgc2FtZSBvYmplY3QpLCB3aWxsIGJlIGNhbGxlZAotICAgICAg
ICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQW55ICJyZW1vdGUiIG9ic2VydmVycyAoaS5lLiBv
YnNlcnZlciBtZXRob2RzIGRlY2xhcmVkIG9uCi0gICAgICAgICAgICAgICAgICAgIGFub3RoZXIg
b2JqZWN0KSB3aWxsIGJlIHBsYWNlZCBpbiBhIHF1ZXVlIGFuZCBjYWxsZWQgYXQgYSBsYXRlciB0
aW1lIGluIGEKLSAgICAgICAgICAgICAgICAgICAgY29hbGVzY2VkIG1hbm5lci4KLQotICAgICAg
ICAgICAgICAgICAgICAjIyMgQ2hhaW5pbmcKLQotICAgICAgICAgICAgICAgICAgICBJbiBhZGRp
dGlvbiB0byBwcm9wZXJ0eSBjaGFuZ2VzLCBgc2V0KClgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRo
ZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgaXRzZWxmIHNvIHlvdSBjYW4gZG8gY2hhaW5p
bmcgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgcmVjb3JkLnNldCgnZmlyc3ROYW1lJywgJ0NoYXJsZXMnKS5zZXQoJ2xh
c3ROYW1lJywgJ0pvbGxleScpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHNldAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5TmFtZSBUaGUgcHJvcGVydHkgdG8gc2V0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7T2JqZWN0fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IG9yIGBudWxsYC4KLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleU5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0KHRoaXMsIGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFNldHMgYSBsaXN0IG9mIHByb3BlcnRpZXMgYXQgb25jZS4gVGhlc2UgcHJvcGVydGll
cyBhcmUgc2V0IGluc2lkZQotICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBgYmVnaW5Qcm9w
ZXJ0eUNoYW5nZXNgIGFuZCBgZW5kUHJvcGVydHlDaGFuZ2VzYCBiYXRjaCwgc28KLSAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZXJzIHdpbGwgYmUgYnVmZmVyZWQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICByZWNvcmQuc2V0UHJvcGVy
dGllcyh7IGZpcnN0TmFtZTogJ0NoYXJsZXMnLCBsYXN0TmFtZTogJ0pvbGxleScgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2V0UHJv
cGVydGllcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0hhc2h9IGhhc2ggdGhlIGhhc2gg
b2Yga2V5cyBhbmQgdmFsdWVzIHRvIHNldAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtF
bWJlci5PYnNlcnZhYmxlfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNldFBy
b3BlcnRpZXM6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0UHJv
cGVydGllcyh0aGlzLCBoYXNoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBCZWdpbnMgYSBncm91cGluZyBvZiBwcm9wZXJ0eSBjaGFuZ2Vz
LgotCi0gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGdyb3Vw
IHByb3BlcnR5IGNoYW5nZXMgc28gdGhhdCBub3RpZmljYXRpb25zCi0gICAgICAgICAgICAgICAg
ICAgIHdpbGwgbm90IGJlIHNlbnQgdW50aWwgdGhlIGNoYW5nZXMgYXJlIGZpbmlzaGVkLiBJZiB5
b3UgcGxhbiB0byBtYWtlIGEKLSAgICAgICAgICAgICAgICAgICAgbGFyZ2UgbnVtYmVyIG9mIGNo
YW5nZXMgdG8gYW4gb2JqZWN0IGF0IG9uZSB0aW1lLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcwotICAg
ICAgICAgICAgICAgICAgICBtZXRob2QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2hhbmdlcyB0
byBiZWdpbiBkZWZlcnJpbmcgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlv
bnMuIFdoZW4geW91IGFyZSBkb25lIG1ha2luZyBjaGFuZ2VzLCBjYWxsCi0gICAgICAgICAgICAg
ICAgICAgIGBlbmRQcm9wZXJ0eUNoYW5nZXMoKWAgdG8gZGVsaXZlciB0aGUgZGVmZXJyZWQgY2hh
bmdlIG5vdGlmaWNhdGlvbnMgYW5kIGVuZAotICAgICAgICAgICAgICAgICAgICBkZWZlcnJpbmcu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBiZWdpblByb3BlcnR5Q2hhbmdlcwotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5PYnNlcnZhYmxlfQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGJlZ2luUHJvcGVydHlDaGFuZ2VzOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBiZWdpblByb3BlcnR5Q2hhbmdlcygpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEVuZHMgYSBncm91cGluZyBvZiBwcm9wZXJ0eSBjaGFuZ2VzLgotCi0gICAg
ICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGdyb3VwIHByb3BlcnR5
IGNoYW5nZXMgc28gdGhhdCBub3RpZmljYXRpb25zCi0gICAgICAgICAgICAgICAgICAgIHdpbGwg
bm90IGJlIHNlbnQgdW50aWwgdGhlIGNoYW5nZXMgYXJlIGZpbmlzaGVkLiBJZiB5b3UgcGxhbiB0
byBtYWtlIGEKLSAgICAgICAgICAgICAgICAgICAgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgdG8g
YW4gb2JqZWN0IGF0IG9uZSB0aW1lLCB5b3Ugc2hvdWxkIGNhbGwKLSAgICAgICAgICAgICAgICAg
ICAgYGJlZ2luUHJvcGVydHlDaGFuZ2VzKClgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNoYW5n
ZXMgdG8gZGVmZXIgY2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMuIFdo
ZW4geW91IGFyZSBkb25lIG1ha2luZyBjaGFuZ2VzLCBjYWxsIHRoaXMgbWV0aG9kIHRvCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGl2ZXIgdGhlIGRlZmVycmVkIGNoYW5nZSBub3RpZmljYXRpb25z
IGFuZCBlbmQgZGVmZXJyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZW5kUHJv
cGVydHlDaGFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk9ic2VydmFi
bGV9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZW5kUHJvcGVydHlDaGFuZ2Vz
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBlbmRQcm9wZXJ0eUNoYW5nZXMoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBOb3RpZnkgdGhlIG9ic2VydmVyIHN5c3RlbSB0aGF0
IGEgcHJvcGVydHkgaXMgYWJvdXQgdG8gY2hhbmdlLgotCi0gICAgICAgICAgICAgICAgICAgIFNv
bWV0aW1lcyB5b3UgbmVlZCB0byBjaGFuZ2UgYSB2YWx1ZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5
IHdpdGhvdXQKLSAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgY2FsbGluZyBgZ2V0KClgIG9y
IGBzZXQoKWAgb24gaXQuIEluIHRoaXMgY2FzZSwgeW91IGNhbiB1c2UgdGhpcwotICAgICAgICAg
ICAgICAgICAgICBtZXRob2QgYW5kIGBwcm9wZXJ0eURpZENoYW5nZSgpYCBpbnN0ZWFkLiBDYWxs
aW5nIHRoZXNlIHR3byBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyIHdpbGwg
bm90aWZ5IGFsbCBvYnNlcnZlcnMgdGhhdCB0aGUgcHJvcGVydHkgaGFzIHBvdGVudGlhbGx5Ci0g
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgdmFsdWUuCi0KLSAgICAgICAgICAgICAgICAgICAg
Tm90ZSB0aGF0IHlvdSBtdXN0IGFsd2F5cyBjYWxsIGBwcm9wZXJ0eVdpbGxDaGFuZ2VgIGFuZCBg
cHJvcGVydHlEaWRDaGFuZ2VgCi0gICAgICAgICAgICAgICAgICAgIGFzIGEgcGFpci4gSWYgeW91
IGRvIG5vdCwgaXQgbWF5IGdldCB0aGUgcHJvcGVydHkgY2hhbmdlIGdyb3VwcyBvdXQgb2YKLSAg
ICAgICAgICAgICAgICAgICAgb3JkZXIgYW5kIGNhdXNlIG5vdGlmaWNhdGlvbnMgdG8gYmUgZGVs
aXZlcmVkIG1vcmUgb2Z0ZW4gdGhhbiB5b3Ugd291bGQKLSAgICAgICAgICAgICAgICAgICAgbGlr
ZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHByb3BlcnR5V2lsbENoYW5nZQotICAg
ICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5
IHRoYXQgaXMgYWJvdXQgdG8gY2hhbmdlLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtF
bWJlci5PYnNlcnZhYmxlfQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3Bl
cnR5V2lsbENoYW5nZTogZnVuY3Rpb24oa2V5TmFtZSkgewotICAgICAgICAgICAgICAgIHByb3Bl
cnR5V2lsbENoYW5nZSh0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBOb3RpZnkgdGhlIG9ic2VydmVyIHN5c3RlbSB0aGF0IGEgcHJvcGVydHkgaGFzIGp1c3QgY2hh
bmdlZC4KLQotICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IG5lZWQgdG8gY2hhbmdl
IGEgdmFsdWUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB3aXRob3V0Ci0gICAgICAgICAgICAgICAg
ICAgIGFjdHVhbGx5IGNhbGxpbmcgYGdldCgpYCBvciBgc2V0KClgIG9uIGl0LiBJbiB0aGlzIGNh
c2UsIHlvdSBjYW4gdXNlIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGFuZCBgcHJv
cGVydHlXaWxsQ2hhbmdlKClgIGluc3RlYWQuIENhbGxpbmcgdGhlc2UgdHdvIG1ldGhvZHMKLSAg
ICAgICAgICAgICAgICAgICAgdG9nZXRoZXIgd2lsbCBub3RpZnkgYWxsIG9ic2VydmVycyB0aGF0
IHRoZSBwcm9wZXJ0eSBoYXMgcG90ZW50aWFsbHkKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB2YWx1ZS4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgeW91IG11c3QgYWx3YXlz
IGNhbGwgYHByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBwcm9wZXJ0eURpZENoYW5nZWAKLSAgICAg
ICAgICAgICAgICAgICAgYXMgYSBwYWlyLiBJZiB5b3UgZG8gbm90LCBpdCBtYXkgZ2V0IHRoZSBw
cm9wZXJ0eSBjaGFuZ2UgZ3JvdXBzIG91dCBvZgotICAgICAgICAgICAgICAgICAgICBvcmRlciBh
bmQgY2F1c2Ugbm90aWZpY2F0aW9ucyB0byBiZSBkZWxpdmVyZWQgbW9yZSBvZnRlbiB0aGFuIHlv
dSB3b3VsZAotICAgICAgICAgICAgICAgICAgICBsaWtlLgotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgcHJvcGVydHlEaWRDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5IGtleSB0aGF0IGhhcyBqdXN0IGNoYW5nZWQuCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLk9ic2VydmFibGV9Ci0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2U6IGZ1bmN0aW9uKGtleU5h
bWUpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlzLCBrZXlOYW1lKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgdG8gY2FsbCBg
cHJvcGVydHlXaWxsQ2hhbmdlYCBhbmQgYHByb3BlcnR5RGlkQ2hhbmdlYCBpbgotICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzaW9uLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgbm90
aWZ5UHJvcGVydHlDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIHByb3BlcnR5IGtleSB0byBiZSBub3RpZmllZCBhYm91dC4KLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBub3RpZnlQcm9wZXJ0eUNoYW5nZTogZnVuY3Rpb24oa2V5TmFtZSkgewot
ICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlXaWxsQ2hhbmdlKGtleU5hbWUpOwotICAgICAg
ICAgICAgICAgIHRoaXMucHJvcGVydHlEaWRDaGFuZ2Uoa2V5TmFtZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhZGRCZWZvcmVP
YnNlcnZlcjogZnVuY3Rpb24oa2V5LCB0YXJnZXQsIG1ldGhvZCkgewotICAgICAgICAgICAgICAg
IGFkZEJlZm9yZU9ic2VydmVyKHRoaXMsIGtleSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFkZHMgYW4gb2Jz
ZXJ2ZXIgb24gYSBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBj
b3JlIG1ldGhvZCB1c2VkIHRvIHJlZ2lzdGVyIGFuIG9ic2VydmVyIGZvciBhIHByb3BlcnR5Lgot
Ci0gICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGNhbGwgdGhpcyBtZXRob2QsIGFueSB0aW1l
IHRoZSBrZXkncyB2YWx1ZSBpcyBzZXQsIHlvdXIgb2JzZXJ2ZXIKLSAgICAgICAgICAgICAgICAg
ICAgd2lsbCBiZSBub3RpZmllZC4gTm90ZSB0aGF0IHRoZSBvYnNlcnZlcnMgYXJlIHRyaWdnZXJl
ZCBhbnkgdGltZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgc2V0LCByZWdhcmRs
ZXNzIG9mIHdoZXRoZXIgaXQgaGFzIGFjdHVhbGx5IGNoYW5nZWQuIFlvdXIKLSAgICAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGF0LgotCi0g
ICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwYXNzIGFuIG9wdGlvbmFsIGNvbnRleHQg
cGFyYW1ldGVyIHRvIHRoaXMgbWV0aG9kLiBUaGUKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dCB3aWxsIGJlIHBhc3NlZCB0byB5b3VyIG9ic2VydmVyIG1ldGhvZCB3aGVuZXZlciBpdCBpcyB0
cmlnZ2VyZWQuCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB5b3UgYWRkIHRoZSBz
YW1lIHRhcmdldC9tZXRob2QgcGFpciBvbiBhIGtleSBtdWx0aXBsZSB0aW1lcwotICAgICAgICAg
ICAgICAgICAgICB3aXRoIGRpZmZlcmVudCBjb250ZXh0IHBhcmFtZXRlcnMsIHlvdXIgb2JzZXJ2
ZXIgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlCi0gICAgICAgICAgICAgICAgICAgIHdpdGggdGhl
IGxhc3QgY29udGV4dCB5b3UgcGFzc2VkLgotCi0gICAgICAgICAgICAgICAgICAgICMjIyBPYnNl
cnZlciBNZXRob2RzCi0KLSAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZXIgbWV0aG9kcyB5b3Ug
cGFzcyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmUgaWYKLSAg
ICAgICAgICAgICAgICAgICAgeW91IGRvIG5vdCBwYXNzIGEgYGNvbnRleHRgIHBhcmFtZXRlcjoK
LQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
IGZvb0RpZENoYW5nZTogZnVuY3Rpb24oc2VuZGVyLCBrZXksIHZhbHVlLCByZXYpIHsgfTsKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIHNlbmRlciBp
cyB0aGUgb2JqZWN0IHRoYXQgY2hhbmdlZC4gVGhlIGtleSBpcyB0aGUgcHJvcGVydHkgdGhhdAot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLiBUaGUgdmFsdWUgcHJvcGVydHkgaXMgY3VycmVu
dGx5IHJlc2VydmVkIGFuZCB1bnVzZWQuIFRoZSByZXYKLSAgICAgICAgICAgICAgICAgICAgaXMg
dGhlIGxhc3QgcHJvcGVydHkgcmV2aXNpb24gb2YgdGhlIG9iamVjdCB3aGVuIGl0IGNoYW5nZWQs
IHdoaWNoIHlvdSBjYW4KLSAgICAgICAgICAgICAgICAgICAgdXNlIHRvIGRldGVjdCBpZiB0aGUg
a2V5IHZhbHVlIGhhcyByZWFsbHkgY2hhbmdlZCBvciBub3QuCi0KLSAgICAgICAgICAgICAgICAg
ICAgSWYgeW91IHBhc3MgYSBgY29udGV4dGAgcGFyYW1ldGVyLCB0aGUgY29udGV4dCB3aWxsIGJl
IHBhc3NlZCBiZWZvcmUgdGhlCi0gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uIGxpa2Ugc286
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBmb29EaWRDaGFuZ2U6IGZ1bmN0aW9uKHNlbmRlciwga2V5LCB2YWx1ZSwgY29udGV4dCwgcmV2
KSB7IH07Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFVz
dWFsbHkgeW91IHdpbGwgbm90IG5lZWQgdGhlIHZhbHVlLCBjb250ZXh0IG9yIHJldmlzaW9uIHBh
cmFtZXRlcnMgYXQKLSAgICAgICAgICAgICAgICAgICAgdGhlIGVuZC4gSW4gdGhpcyBjYXNlLCBp
dCBpcyBjb21tb24gdG8gd3JpdGUgb2JzZXJ2ZXIgbWV0aG9kcyB0aGF0IHRha2UKLSAgICAgICAg
ICAgICAgICAgICAgb25seSBhIHNlbmRlciBhbmQga2V5IHZhbHVlIGFzIHBhcmFtZXRlcnMgb3Is
IGlmIHlvdSBhcmVuJ3QgaW50ZXJlc3RlZCBpbgotICAgICAgICAgICAgICAgICAgICBhbnkgb2Yg
dGhlc2UgdmFsdWVzLCB0byB3cml0ZSBhbiBvYnNlcnZlciB0aGF0IGhhcyBubyBwYXJhbWV0ZXJz
IGF0IGFsbC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZE9ic2VydmVyCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB0byBvYnNlcnZlcgot
ICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRoZSB0YXJnZXQgb2Jq
ZWN0IHRvIGludm9rZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ3xGdW5jdGlv
bn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGFkZE9ic2VydmVyOiBmdW5jdGlvbihrZXksIHRhcmdldCwgbWV0aG9kKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIodGhpcywga2V5LCB0YXJnZXQsIG1ldGhvZCk7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVt
b3ZlIGFuIG9ic2VydmVyIHlvdSBoYXZlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvbiB0aGlzIG9i
amVjdC4gUGFzcwotICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBrZXksIHRhcmdldCwgYW5k
IG1ldGhvZCB5b3UgcGFzc2VkIHRvIGBhZGRPYnNlcnZlcigpYCBhbmQgeW91cgotICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQgd2lsbCBubyBsb25nZXIgcmVjZWl2ZSBub3RpZmljYXRpb25zLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlT2JzZXJ2ZXIKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUga2V5IHRvIG9ic2VydmVyCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIHRhcmdldCBvYmplY3QgdG8g
aW52b2tlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBtZXRo
b2QgVGhlIG1ldGhvZCB0byBpbnZva2UuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcmVtb3ZlT2JzZXJ2ZXI6IGZ1bmN0aW9uKGtleSwgdGFyZ2V0LCBtZXRob2QpIHsKLSAgICAg
ICAgICAgICAgICByZW1vdmVPYnNlcnZlcih0aGlzLCBrZXksIHRhcmdldCwgbWV0aG9kKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1
cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGN1cnJlbnRseSBoYXMgb2JzZXJ2ZXJzIHJlZ2lzdGVy
ZWQgZm9yIGEKLSAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBrZXkuIFlvdSBjYW4gdXNl
IHRoaXMgbWV0aG9kIHRvIHBvdGVudGlhbGx5IGRlZmVyIHBlcmZvcm1pbmcKLSAgICAgICAgICAg
ICAgICAgICAgYW4gZXhwZW5zaXZlIGFjdGlvbiB1bnRpbCBzb21lb25lIGJlZ2lucyBvYnNlcnZp
bmcgYSBwYXJ0aWN1bGFyIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIG9uIHRoZSBvYmpl
Y3QuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBoYXNPYnNlcnZlckZvcgotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30ga2V5IEtleSB0byBjaGVjawotICAgICAgICAg
ICAgICAgICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGhhc09ic2VydmVyRm9yOiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaGFzTGlzdGVuZXJzKHRoaXMsIGtleSArICc6Y2hhbmdlJyk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSB2
YWx1ZSBvZiBhIHByb3BlcnR5LCBvciBhIGRlZmF1bHQgdmFsdWUgaW4gdGhlIGNhc2UgdGhhdCB0
aGUKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgcmV0dXJucyBgdW5kZWZpbmVkYC4KLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHBl
cnNvbi5nZXRXaXRoRGVmYXVsdCgnbGFzdE5hbWUnLCAnRG9lJyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZ2V0V2l0aERlZmF1bHQKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIG5hbWUgb2YgdGhl
IHByb3BlcnR5IHRvIHJldHJpZXZlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0
fSBkZWZhdWx0VmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgdmFsdWUg
aXMgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gVGhlIHBy
b3BlcnR5IHZhbHVlIG9yIHRoZSBkZWZhdWx0VmFsdWUuCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgZ2V0V2l0aERlZmF1bHQ6IGZ1bmN0aW9uKGtleU5hbWUsIGRlZmF1bHRWYWx1
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaXRoRGVmYXVsdCh0aGlzLCBrZXlOYW1l
LCBkZWZhdWx0VmFsdWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSB0byB0aGUgY3VycmVu
dCB2YWx1ZSBwbHVzIHNvbWUgYW1vdW50LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgcGVyc29uLmluY3JlbWVudFByb3BlcnR5KCdhZ2Un
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVhbS5pbmNyZW1lbnRQcm9wZXJ0eSgnc2NvcmUnLCAy
KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBpbmNyZW1lbnRQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
a2V5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gaW5jcmVtZW50Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBpbmNyZW1lbnQgVGhlIGFtb3VudCB0byBpbmNyZW1l
bnQgYnkuIERlZmF1bHRzIHRvIDEKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7TnVtYmVy
fSBUaGUgbmV3IHByb3BlcnR5IHZhbHVlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgaW5jcmVtZW50UHJvcGVydHk6IGZ1bmN0aW9uKGtleU5hbWUsIGluY3JlbWVudCkgewotICAg
ICAgICAgICAgICAgIGlmIChpc05vbmUoaW5jcmVtZW50KSkgewotICAgICAgICAgICAgICAgICAg
ICBpbmNyZW1lbnQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoIk11c3QgcGFzcyBhIG51bWVyaWMgdmFsdWUgdG8gaW5jcmVtZW50UHJvcGVydHki
LCAoIWlzTmFOKHBhcnNlRmxvYXQoaW5jcmVtZW50KSkgJiYgaXNGaW5pdGUoaW5jcmVtZW50KSkp
OwotICAgICAgICAgICAgICAgIHNldCh0aGlzLCBrZXlOYW1lLCAocGFyc2VGbG9hdChnZXQodGhp
cywga2V5TmFtZSkpIHx8IDApICsgaW5jcmVtZW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0KHRoaXMsIGtleU5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSB0byB0aGUgY3Vy
cmVudCB2YWx1ZSBtaW51cyBzb21lIGFtb3VudC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHBsYXllci5kZWNyZW1lbnRQcm9wZXJ0eSgn
bGl2ZXMnKTsKLSAgICAgICAgICAgICAgICAgICAgb3JjLmRlY3JlbWVudFByb3BlcnR5KCdoZWFs
dGgnLCA1KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCBkZWNyZW1lbnRQcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0
cmluZ30ga2V5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGVjcmVtZW50Ci0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBkZWNyZW1lbnQgVGhlIGFtb3VudCB0byBk
ZWNyZW1lbnQgYnkuIERlZmF1bHRzIHRvIDEKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
TnVtYmVyfSBUaGUgbmV3IHByb3BlcnR5IHZhbHVlCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZGVjcmVtZW50UHJvcGVydHk6IGZ1bmN0aW9uKGtleU5hbWUsIGRlY3JlbWVudCkg
ewotICAgICAgICAgICAgICAgIGlmIChpc05vbmUoZGVjcmVtZW50KSkgewotICAgICAgICAgICAg
ICAgICAgICBkZWNyZW1lbnQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBFbWJlci5hc3NlcnQoIk11c3QgcGFzcyBhIG51bWVyaWMgdmFsdWUgdG8gZGVjcmVtZW50UHJv
cGVydHkiLCAoIWlzTmFOKHBhcnNlRmxvYXQoZGVjcmVtZW50KSkgJiYgaXNGaW5pdGUoZGVjcmVt
ZW50KSkpOwotICAgICAgICAgICAgICAgIHNldCh0aGlzLCBrZXlOYW1lLCAoZ2V0KHRoaXMsIGtl
eU5hbWUpIHx8IDApIC0gZGVjcmVtZW50KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRo
aXMsIGtleU5hbWUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgYSBib29sZWFuIHByb3BlcnR5IHRvIHRoZSBv
cHBvc2l0ZSBvZiBpdCdzCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgdmFsdWUuCi0KLSAg
ICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBzdGFy
c2hpcC50b2dnbGVQcm9wZXJ0eSgnd2FycERyaXZlRW5nYWdlZCcpOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHRvZ2dsZVByb3BlcnR5Ci0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBuYW1lIG9mIHRo
ZSBwcm9wZXJ0eSB0byB0b2dnbGUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0
fSBUaGUgbmV3IHByb3BlcnR5IHZhbHVlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgdG9nZ2xlUHJvcGVydHk6IGZ1bmN0aW9uKGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICBz
ZXQodGhpcywga2V5TmFtZSwgIWdldCh0aGlzLCBrZXlOYW1lKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdldCh0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBjYWNoZWQgdmFsdWUgb2YgYSBj
b21wdXRlZCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAgICAgICBUaGlz
IGFsbG93cyB5b3UgdG8gaW5zcGVjdCB0aGUgdmFsdWUgb2YgYSBjb21wdXRlZCBwcm9wZXJ0eQot
ICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFjY2lkZW50YWxseSBpbnZva2luZyBpdCBpZiBp
dCBpcyBpbnRlbmRlZCB0byBiZQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgbGF6aWx5
LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY2FjaGVGb3IKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVy
biB7T2JqZWN0fSBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSwgaWYg
YW55Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2FjaGVGb3I6IGZ1bmN0aW9u
KGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVGb3IodGhpcywga2V5TmFt
ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBpbnRlbmRlZCBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzCi0gICAgICAgICAgICBvYnNlcnZlcnNGb3JLZXk6IGZ1bmN0aW9uKGtleU5h
bWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzRm9yKHRoaXMsIGtleU5hbWUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL3Byb21pc2VfcHJveHkiLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9jb21wdXRl
ZCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1tZXRhbC9lcnJvciIsICJleHBvcnRzIl0s
Ci0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5k
ZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZXhwb3J0c19fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTFf
Xy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kyX18uc2V0OwotICAgICAgICB2
YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3kzX18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBNaXhp
biA9IF9fZGVwZW5kZW5jeTRfXy5NaXhpbjsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2Rl
cGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgbm90ID0gY29tcHV0ZWQubm90
OwotICAgICAgICB2YXIgb3IgPSBjb21wdXRlZC5vcjsKLQotICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRp
bWUKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgIGZ1bmN0aW9uIHRhcChwcm94eSwgcHJvbWlz
ZSkgewotICAgICAgICAgICAgc2V0KHByb3h5LCAnaXNGdWxmaWxsZWQnLCBmYWxzZSk7Ci0gICAg
ICAgICAgICBzZXQocHJveHksICdpc1JlamVjdGVkJywgZmFsc2UpOwotCi0gICAgICAgICAgICBy
ZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgc2V0
KHByb3h5LCAnaXNGdWxmaWxsZWQnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBzZXQocHJveHks
ICdjb250ZW50JywgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgICAgICAgIHNldChwcm94eSwg
J2lzUmVqZWN0ZWQnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBzZXQocHJveHksICdyZWFzb24n
LCByZWFzb24pOwotICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjsKLSAgICAgICAgICAgIH0s
ICJFbWJlcjogUHJvbWlzZVByb3h5Iik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQSBsb3cgbGV2ZWwgbWl4aW4gbWFraW5nIE9iamVjdFByb3h5LCBPYmplY3RDb250
cm9sbGVyIG9yIEFycmF5Q29udHJvbGxlcidzIHByb21pc2UgYXdhcmUuCi0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgT2JqZWN0UHJvbWlzZUNvbnRyb2xs
ZXIgPSBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZChFbWJlci5Qcm9taXNlUHJveHlNaXhp
bik7Ci0KLSAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBPYmplY3RQcm9taXNlQ29udHJv
bGxlci5jcmVhdGUoewotICAgICAgICAgICAgICAgIHByb21pc2U6ICQuZ2V0SlNPTignL3NvbWUv
cmVtb3RlL2RhdGEuanNvbicpCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGNv
bnRyb2xsZXIudGhlbihmdW5jdGlvbihqc29uKXsKLSAgICAgICAgICAgICAgICAgLy8gdGhlIGpz
b24KLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAg
IC8vIHRoZSByZWFzb24gd2h5IHlvdSBoYXZlIG5vIGpzb24KLSAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIHRoZSBjb250cm9sbGVyIGhhcyBiaW5k
YWJsZSBhdHRyaWJ1dGVzIHdoaWNoCi0gICAgICAgICAgICAgIHRyYWNrIHRoZSBwcm9taXNlcyBs
aWZlIGN5Y2xlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBj
b250cm9sbGVyLmdldCgnaXNQZW5kaW5nJykgICAvLz0+IHRydWUKLSAgICAgICAgICAgICAgY29u
dHJvbGxlci5nZXQoJ2lzU2V0dGxlZCcpICAvLz0+IGZhbHNlCi0gICAgICAgICAgICAgIGNvbnRy
b2xsZXIuZ2V0KCdpc1JlamVjdGVkJykgIC8vPT4gZmFsc2UKLSAgICAgICAgICAgICAgY29udHJv
bGxlci5nZXQoJ2lzRnVsZmlsbGVkJykgLy89PiBmYWxzZQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBXaGVuIHRoZSB0aGUgJC5nZXRKU09OIGNvbXBsZXRlcywgYW5kIHRoZSBw
cm9taXNlIGlzIGZ1bGZpbGxlZAotICAgICAgICAgICAgICB3aXRoIGpzb24sIHRoZSBsaWZlIGN5
Y2xlIGF0dHJpYnV0ZXMgd2lsbCB1cGRhdGUgYWNjb3JkaW5nbHkuCi0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBjb250cm9sbGVyLmdldCgnaXNQZW5kaW5nJykg
ICAvLz0+IGZhbHNlCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCdpc1NldHRsZWQnKSAg
IC8vPT4gdHJ1ZQotICAgICAgICAgICAgICBjb250cm9sbGVyLmdldCgnaXNSZWplY3RlZCcpICAv
Lz0+IGZhbHNlCi0gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0KCdpc0Z1bGZpbGxlZCcpIC8v
PT4gdHJ1ZQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBcyB0aGUgY29udHJv
bGxlciBpcyBhbiBPYmplY3RDb250cm9sbGVyLCBhbmQgdGhlIGpzb24gbm93IGl0cyBjb250ZW50
LAotICAgICAgICAgICAgICBhbGwgdGhlIGpzb24gcHJvcGVydGllcyB3aWxsIGJlIGF2YWlsYWJs
ZSBkaXJlY3RseSBmcm9tIHRoZSBjb250cm9sbGVyLgotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgLy8gQXNzdW1pbmcgdGhlIGZvbGxvd2luZyBqc29uOgotICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiAnU3RlZmFuJywKLSAgICAg
ICAgICAgICAgICBsYXN0TmFtZTogJ1Blbm5lcicKLSAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgIC8vIGJvdGggcHJvcGVydGllcyB3aWxsIGFjY2Vzc2libGUgb24gdGhlIGNvbnRyb2xs
ZXIKLSAgICAgICAgICAgICAgY29udHJvbGxlci5nZXQoJ2ZpcnN0TmFtZScpIC8vPT4gJ1N0ZWZh
bicKLSAgICAgICAgICAgICAgY29udHJvbGxlci5nZXQoJ2xhc3ROYW1lJykgIC8vPT4gJ1Blbm5l
cicKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgdGhlIGNvbnRyb2xsZXIg
aXMgYmFja2luZyBhIHRlbXBsYXRlLCB0aGUgYXR0cmlidXRlcyBhcmUKLSAgICAgICAgICAgICAg
YmluZGFibGUgZnJvbSB3aXRoaW4gdGhhdCB0ZW1wbGF0ZQotCi0gICAgICAgICAgICAgIGBgYGhh
bmRsZWJhcnMKLSAgICAgICAgICAgICAge3sjaWYgaXNQZW5kaW5nfX0KLSAgICAgICAgICAgICAg
ICBsb2FkaW5nLi4uCi0gICAgICAgICAgICAgIHt7ZWxzZX19Ci0gICAgICAgICAgICAgICAgZmly
c3ROYW1lOiB7e2ZpcnN0TmFtZX19Ci0gICAgICAgICAgICAgICAgbGFzdE5hbWU6IHt7bGFzdE5h
bWV9fQotICAgICAgICAgICAgICB7ey9pZn19Ci0gICAgICAgICAgICAgIGBgYAotICAgICAgICAg
ICAgICBAY2xhc3MgRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4KLSAgICAgICAgICAgICovCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhpbi5jcmVhdGUoewotICAgICAgICAgICAg
LyoqCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSBwcm94aWVkIHByb21pc2UgaXMgcmVqZWN0
ZWQgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIHJlYXNvbgotICAgICAgICAgICAgICAgICAgICBwcm92
aWRlZC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcmVhc29uCi0gICAgICAgICAg
ICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZWFzb246IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBP
bmNlIHRoZSBwcm94aWVkIHByb21pc2UgaGFzIHNldHRsZWQgdGhpcyB3aWxsIGJlY29tZSBgZmFs
c2VgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpc1BlbmRpbmcKLSAgICAgICAg
ICAgICAgICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGlzUGVuZGluZzogbm90KCdpc1NldHRsZWQnKS5yZWFkT25seSgpLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgcHJveGllZCBwcm9taXNlIGhhcyBz
ZXR0bGVkIHRoaXMgd2lsbCBiZWNvbWUgYHRydWVgLgotCi0gICAgICAgICAgICAgICAgICAgIEBw
cm9wZXJ0eSBpc1NldHRsZWQKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgZmFsc2UKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpc1NldHRsZWQ6IG9yKCdpc1JlamVjdGVk
JywgJ2lzRnVsZmlsbGVkJykucmVhZE9ubHkoKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFdpbGwgYmVjb21lIGB0cnVlYCBpZiB0aGUgcHJveGllZCBwcm9taXNlIGlz
IHJlamVjdGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBpc1JlamVjdGVkCi0g
ICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBXaWxsIGJlY29tZSBgdHJ1ZWAgaWYgdGhlIHByb3hpZWQgcHJvbWlzZSBp
cyBmdWxmaWxsZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGlzRnVsZmlsbGVk
Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgaXNGdWxmaWxsZWQ6IGZhbHNlLAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgVGhlIHByb21pc2Ugd2hvc2UgZnVsZmlsbG1lbnQgdmFsdWUgaXMg
YmVpbmcgcHJveGllZCBieSB0aGlzIG9iamVjdC4KLQotICAgICAgICAgICAgICAgICAgICBUaGlz
IHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIHVwb24gY3JlYXRpb24sIGFuZCBzaG91bGQgbm90
IGJlCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgb25jZSBjcmVhdGVkLgotCi0gICAgICAg
ICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICAgICAgICBFbWJlci5PYmplY3RDb250cm9sbGVyLmV4dGVuZChFbWJl
ci5Qcm9taXNlUHJveHlNaXhpbikuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlOiA8dGhlbmFibGU+Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgcHJvbWlzZQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb21pc2U6IGNvbXB1dGVkKGZ1bmN0aW9uKGtl
eSwgcHJvbWlzZSkgewotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXAodGhpcywgcHJvbWlzZSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVy
RXJyb3IoIlByb21pc2VQcm94eSdzIHByb21pc2UgbXVzdCBiZSBzZXQiKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEFuIGFsaWFzIHRvIHRoZSBwcm94aWVkIHByb21pc2UncyBgdGhlbmAuCi0KLSAgICAg
ICAgICAgICAgICAgICAgU2VlIFJTVlAuUHJvbWlzZS50aGVuLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgdGhlbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBj
YWxsYmFjawotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGhlbjogcHJvbWlzZUFsaWFzKCd0aGVuJyks
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBbiBhbGlhcyB0byB0aGUg
cHJveGllZCBwcm9taXNlJ3MgYGNhdGNoYC4KLQotICAgICAgICAgICAgICAgICAgICBTZWUgUlNW
UC5Qcm9taXNlLmNhdGNoLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY2F0Y2gKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7UlNWUC5Qcm9taXNlfQotICAgICAgICAgICAgICAgICAgICBAc2lu
Y2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAnY2F0Y2gnOiBwcm9t
aXNlQWxpYXMoJ2NhdGNoJyksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBbiBhbGlhcyB0byB0aGUgcHJveGllZCBwcm9taXNlJ3MgYGZpbmFsbHlgLgotCi0gICAgICAg
ICAgICAgICAgICAgIFNlZSBSU1ZQLlByb21pc2UuZmluYWxseS4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGZpbmFsbHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bn0gY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7UlNWUC5Qcm9taXNlfQot
ICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICAnZmluYWxseSc6IHByb21pc2VBbGlhcygnZmluYWxseScpCi0gICAgICAgIH0p
OwotCi0gICAgICAgIGZ1bmN0aW9uIHByb21pc2VBbGlhcyhuYW1lKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gZ2V0KHRo
aXMsICdwcm9taXNlJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VbbmFtZV0uYXBw
bHkocHJvbWlzZSwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICB9
KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3NvcnRhYmxlIiwKLSAgICBbImVt
YmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFs
L3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImVtYmVyLW1l
dGFsL21peGluIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfZW51bWVyYWJsZSIsICJl
bWJlci1ydW50aW1lL2NvbXBhcmUiLCAiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiLCAiZW1iZXItbWV0
YWwvY29tcHV0ZWQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywg
X19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBl
bmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5
OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBA
c3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2Vy
dCwgRW1iZXIuQQotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAg
ICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGZvckVhY2gg
PSBfX2RlcGVuZGVuY3k0X18uZm9yRWFjaDsKLSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRl
bmN5NV9fLk1peGluOwotICAgICAgICB2YXIgTXV0YWJsZUVudW1lcmFibGUgPSBfX2RlcGVuZGVu
Y3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNvbXBhcmUgPSBfX2RlcGVuZGVuY3k3X19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5OF9fLmFk
ZE9ic2VydmVyOwotICAgICAgICB2YXIgcmVtb3ZlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k4X18u
cmVtb3ZlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTlfXy5j
b21wdXRlZDsKLSAgICAgICAgdmFyIGJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5NV9fLmJl
Zm9yZU9ic2VydmVyOwotICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k1X18ub2Jz
ZXJ2ZXI7Ci0gICAgICAgIC8vRVM2VE9ETzogc2hvdWxkIHdlIGFjY2VzcyB0aGVzZSBkaXJlY3Rs
eSBmcm9tIHRoZWlyIHBhY2thZ2Ugb3IgZnJvbSBob3cgdGhpZXIgZXhwb3NlZCBpbiBlbWJlci1t
ZXRhbD8KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLlNvcnRhYmxlTWl4aW5g
IHByb3ZpZGVzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciBhcnJheSBwcm94aWVzCi0gICAgICAg
ICAgICAgIHRvIHNwZWNpZnkgYSBzb3J0IG9yZGVyIGFuZCBtYWludGFpbiB0aGlzIHNvcnRpbmcg
d2hlbiBvYmplY3RzIGFyZSBhZGRlZCwKLSAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgdXBkYXRl
ZCB3aXRob3V0IGNoYW5naW5nIHRoZSBpbXBsaWNpdCBvcmRlciBvZiB0aGVpciB1bmRlcmx5aW5n
Ci0gICAgICAgICAgICAgIG1vZGVsYXJyYXk6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgICAgICAgICBzb25ncyA9IFsKLSAgICAgICAgICAgICAgICB7dHJhY2tOdW1iZXI6
IDQsIHRpdGxlOiAnT2ItTGEtRGksIE9iLUxhLURhJ30sCi0gICAgICAgICAgICAgICAge3RyYWNr
TnVtYmVyOiAyLCB0aXRsZTogJ0JhY2sgaW4gdGhlIFUuUy5TLlIuJ30sCi0gICAgICAgICAgICAg
ICAge3RyYWNrTnVtYmVyOiAzLCB0aXRsZTogJ0dsYXNzIE9uaW9uJ30sCi0gICAgICAgICAgICAg
IF07Ci0KLSAgICAgICAgICAgICAgc29uZ3NDb250cm9sbGVyID0gRW1iZXIuQXJyYXlDb250cm9s
bGVyLmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgbW9kZWw6IHNvbmdzLAotICAgICAgICAgICAg
ICAgIHNvcnRQcm9wZXJ0aWVzOiBbJ3RyYWNrTnVtYmVyJ10sCi0gICAgICAgICAgICAgICAgc29y
dEFzY2VuZGluZzogdHJ1ZQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBzb25n
c0NvbnRyb2xsZXIuZ2V0KCdmaXJzdE9iamVjdCcpOyAgLy8ge3RyYWNrTnVtYmVyOiAyLCB0aXRs
ZTogJ0JhY2sgaW4gdGhlIFUuUy5TLlIuJ30KLQotICAgICAgICAgICAgICBzb25nc0NvbnRyb2xs
ZXIuYWRkT2JqZWN0KHt0cmFja051bWJlcjogMSwgdGl0bGU6ICdEZWFyIFBydWRlbmNlJ30pOwot
ICAgICAgICAgICAgICBzb25nc0NvbnRyb2xsZXIuZ2V0KCdmaXJzdE9iamVjdCcpOyAgLy8ge3Ry
YWNrTnVtYmVyOiAxLCB0aXRsZTogJ0RlYXIgUHJ1ZGVuY2UnfQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBJZiB5b3UgYWRkIG9yIHJlbW92ZSB0aGUgcHJvcGVydGllcyB0byBz
b3J0IGJ5IG9yIGNoYW5nZSB0aGUgc29ydCBkaXJlY3Rpb24gdGhlIG1vZGVsCi0gICAgICAgICAg
ICAgIHNvcnQgb3JkZXIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuCi0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBzb25nc0NvbnRyb2xsZXIuc2V0KCdz
b3J0UHJvcGVydGllcycsIFsndGl0bGUnXSk7Ci0gICAgICAgICAgICAgIHNvbmdzQ29udHJvbGxl
ci5nZXQoJ2ZpcnN0T2JqZWN0Jyk7IC8vIHt0cmFja051bWJlcjogMiwgdGl0bGU6ICdCYWNrIGlu
IHRoZSBVLlMuUy5SLid9Ci0KLSAgICAgICAgICAgICAgc29uZ3NDb250cm9sbGVyLnRvZ2dsZVBy
b3BlcnR5KCdzb3J0QXNjZW5kaW5nJyk7Ci0gICAgICAgICAgICAgIHNvbmdzQ29udHJvbGxlci5n
ZXQoJ2ZpcnN0T2JqZWN0Jyk7IC8vIHt0cmFja051bWJlcjogNCwgdGl0bGU6ICdPYi1MYS1EaSwg
T2ItTGEtRGEnfQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBTb3J0YWJsZU1p
eGluIHdvcmtzIGJ5IHNvcnRpbmcgdGhlIGFycmFuZ2VkQ29udGVudCBhcnJheSwgd2hpY2ggaXMg
dGhlIGFycmF5IHRoYXQKLSAgICAgICAgICAgICAgYXJyYXlQcm94eSBkaXNwbGF5cy4gRHVlIHRv
IHRoZSBmYWN0IHRoYXQgdGhlIHVuZGVybHlpbmcgJ2NvbnRlbnQnIGFycmF5IGlzIG5vdCBjaGFu
Z2VkLCB0aGF0Ci0gICAgICAgICAgICAgIGFycmF5IHdpbGwgbm90IGRpc3BsYXkgdGhlIHNvcnRl
ZCBsaXN0OgotCi0gICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHNv
bmdzQ29udHJvbGxlci5nZXQoJ2NvbnRlbnQnKS5nZXQoJ2ZpcnN0T2JqZWN0Jyk7IC8vIFJldHVy
bnMgdGhlIHVuc29ydGVkIG9yaWdpbmFsIGNvbnRlbnQKLSAgICAgICAgICAgICAgc29uZ3NDb250
cm9sbGVyLmdldCgnZmlyc3RPYmplY3QnKTsgLy8gUmV0dXJucyB0aGUgc29ydGVkIGNvbnRlbnQu
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzb3J0ZWQg
Y29udGVudCBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBhcnJhbmdlZENvbnRlbnQg
cHJvcGVydHksCi0gICAgICAgICAgICAgIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlIHRoZSBwcm94
aWVkIGNsYXNzIGFuZCBub3QgdGhlIGFycmFuZ2VkQ29udGVudCBhcnJheSBkaXJlY3RseS4KLQot
ICAgICAgICAgICAgICBAY2xhc3MgU29ydGFibGVNaXhpbgotICAgICAgICAgICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLk11dGFibGVFbnVtZXJhYmxlCi0g
ICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gTWl4aW4uY3Jl
YXRlKE11dGFibGVFbnVtZXJhYmxlLCB7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBTcGVjaWZpZXMgd2hpY2ggcHJvcGVydGllcyBkaWN0YXRlIHRoZSBhcnJhbmdlZENv
bnRlbnQncyBzb3J0IG9yZGVyLgotCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWlu
ZyBtdWx0aXBsZSBwcm9wZXJ0aWVzIHRoZSBzb3J0aW5nIHdpbGwgdXNlIHByb3BlcnRpZXMKLSAg
ICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYHNvcnRQcm9wZXJ0aWVzYCBhcnJheSBwcmlvcml0
aXplZCBmcm9tIGZpcnN0IHRvIGxhc3QuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5
IHtBcnJheX0gc29ydFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBzb3J0UHJvcGVydGllczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFNwZWNpZmllcyB0aGUgYXJyYW5nZWRDb250ZW50J3Mgc29ydCBkaXJlY3Rpb24uCi0g
ICAgICAgICAgICAgICAgICAgIFNvcnRzIHRoZSBjb250ZW50IGluIGFzY2VuZGluZyBvcmRlciBi
eSBkZWZhdWx0LiBTZXQgdG8gYGZhbHNlYCB0bwotICAgICAgICAgICAgICAgICAgICB1c2UgZGVz
Y2VuZGluZyBvcmRlci4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkge0Jvb2xlYW59
IHNvcnRBc2NlbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNvcnRBc2NlbmRpbmc6IHRydWUsCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gdXNlZCB0byBjb21w
YXJlIHR3byB2YWx1ZXMuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBpZiB5b3UKLSAgICAgICAgICAg
ICAgICAgICAgd2FudCB0byBkbyBjdXN0b20gY29tcGFyaXNvbnMuIEZ1bmN0aW9ucyBtdXN0IGJl
IG9mIHRoZSB0eXBlIGV4cGVjdGVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIEFycmF5I3NvcnQs
IGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCBpZiB0aGUgdHdvIHBhcmFtZXRl
cnMgYXJlIGVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIG5lZ2F0aXZlIHZh
bHVlIGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBzZWNvbmQgb3IK
LSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBvdGhlcndpc2U6
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbih4LHkpIHsgLy8gVGhlc2UgYXJlIGFzc3VtZWQgdG8gYmUgaW50ZWdlcnMKLSAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PT0geSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4IDwgeSA/IC0xIDogMTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICAgICAgICBAcHJvcGVydHkgc29ydEZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAg
IEB0eXBlIHtGdW5jdGlvbn0KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuY29t
cGFyZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNvcnRGdW5jdGlvbjogY29t
cGFyZSwKLQotICAgICAgICAgICAgb3JkZXJCeTogZnVuY3Rpb24oaXRlbTEsIGl0ZW0yKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDAsCi0gICAgICAgICAgICAgICAgc29ydFByb3Bl
cnRpZXMgPSBnZXQodGhpcywgJ3NvcnRQcm9wZXJ0aWVzJyksCi0gICAgICAgICAgICAgICAgc29y
dEFzY2VuZGluZyA9IGdldCh0aGlzLCAnc29ydEFzY2VuZGluZycpLAotICAgICAgICAgICAgICAg
IHNvcnRGdW5jdGlvbiA9IGdldCh0aGlzLCAnc29ydEZ1bmN0aW9uJyk7Ci0KLSAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoInlvdSBuZWVkIHRvIGRlZmluZSBgc29ydFByb3BlcnRpZXNgIiwg
ISFzb3J0UHJvcGVydGllcyk7Ci0KLSAgICAgICAgICAgICAgICBmb3JFYWNoKHNvcnRQcm9wZXJ0
aWVzLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc29ydEZ1bmN0
aW9uLmNhbGwodGhpcywgZ2V0KGl0ZW0xLCBwcm9wZXJ0eU5hbWUpLCBnZXQoaXRlbTIsIHByb3Bl
cnR5TmFtZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXN1bHQgIT09IDApICYm
ICFzb3J0QXNjZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
KC0xKSAqIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50
JyksCi0gICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXMgPSBnZXQodGhpcywgJ3NvcnRQcm9w
ZXJ0aWVzJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBzb3J0UHJvcGVydGll
cykgewotICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGNvbnRlbnQsIGZ1bmN0aW9uKGl0ZW0p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2goc29ydFByb3BlcnRpZXMsIGZ1bmN0
aW9uKHNvcnRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU9i
c2VydmVyKGl0ZW0sIHNvcnRQcm9wZXJ0eSwgdGhpcywgJ2NvbnRlbnRJdGVtU29ydFByb3BlcnR5
RGlkQ2hhbmdlJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBp
c1NvcnRlZDogY29tcHV0ZWQubm90RW1wdHkoJ3NvcnRQcm9wZXJ0aWVzJyksCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYXJyYW5n
ZWRDb250ZW50IGZyb20gYXJyYXlQcm94eSBpbiBvcmRlciB0byBzb3J0IGJ5IHNvcnRGdW5jdGlv
bi4KLSAgICAgICAgICAgICAgICAgICAgQWxzbyBzZXRzIHVwIG9ic2VydmVycyBmb3IgZWFjaCBz
b3J0UHJvcGVydHkgb24gZWFjaCBpdGVtIGluIHRoZSBjb250ZW50IEFycmF5LgotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcm9wZXJ0eSBhcnJhbmdlZENvbnRlbnQKLSAgICAgICAgICAgICAgICAg
ICovCi0KLSAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudDogY29tcHV0ZWQoJ2NvbnRlbnQnLCAn
c29ydFByb3BlcnRpZXMuQGVhY2gnLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKSwKLSAgICAgICAgICAgICAg
ICBpc1NvcnRlZCA9IGdldCh0aGlzLCAnaXNTb3J0ZWQnKSwKLSAgICAgICAgICAgICAgICBzb3J0
UHJvcGVydGllcyA9IGdldCh0aGlzLCAnc29ydFByb3BlcnRpZXMnKSwKLSAgICAgICAgICAgICAg
ICBzZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIGlzU29ydGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRlbnQuc29ydChmdW5jdGlvbihpdGVtMSwgaXRlbTIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9yZGVyQnkoaXRlbTEsIGl0ZW0yKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvckVhY2goY29u
dGVudCwgZnVuY3Rpb24oaXRlbSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChz
b3J0UHJvcGVydGllcywgZnVuY3Rpb24oc29ydFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoaXRlbSwgc29ydFByb3BlcnR5LCB0aGlzLCAnY29udGVu
dEl0ZW1Tb3J0UHJvcGVydHlEaWRDaGFuZ2UnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0s
IHRoaXMpOwotICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVtYmVyLkEoY29udGVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAg
X2NvbnRlbnRXaWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcignY29udGVudCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50JyksCi0g
ICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXMgPSBnZXQodGhpcywgJ3NvcnRQcm9wZXJ0aWVz
Jyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBzb3J0UHJvcGVydGllcykgewot
ICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGNvbnRlbnQsIGZ1bmN0aW9uKGl0ZW0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2goc29ydFByb3BlcnRpZXMsIGZ1bmN0aW9uKHNv
cnRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVy
KGl0ZW0sIHNvcnRQcm9wZXJ0eSwgdGhpcywgJ2NvbnRlbnRJdGVtU29ydFByb3BlcnR5RGlkQ2hh
bmdlJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhp
cy5fc3VwZXIoKTsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBzb3J0UHJvcGVydGll
c1dpbGxDaGFuZ2U6IGJlZm9yZU9ic2VydmVyKCdzb3J0UHJvcGVydGllcycsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RTb3J0QXNjZW5kaW5nID0gdW5kZWZpbmVkOwot
ICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIHNvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlOiBv
YnNlcnZlcignc29ydFByb3BlcnRpZXMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLl9sYXN0U29ydEFzY2VuZGluZyA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH0pLAotCi0g
ICAgICAgICAgICBzb3J0QXNjZW5kaW5nV2lsbENoYW5nZTogYmVmb3JlT2JzZXJ2ZXIoJ3NvcnRB
c2NlbmRpbmcnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9sYXN0U29ydEFz
Y2VuZGluZyA9IGdldCh0aGlzLCAnc29ydEFzY2VuZGluZycpOwotICAgICAgICAgICAgfSksCi0K
LSAgICAgICAgICAgIHNvcnRBc2NlbmRpbmdEaWRDaGFuZ2U6IG9ic2VydmVyKCdzb3J0QXNjZW5k
aW5nJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RTb3J0QXNj
ZW5kaW5nICE9PSB1bmRlZmluZWQgJiYgZ2V0KHRoaXMsICdzb3J0QXNjZW5kaW5nJykgIT09IHRo
aXMuX2xhc3RTb3J0QXNjZW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnJhbmdl
ZENvbnRlbnQgPSBnZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpOwotICAgICAgICAgICAgICAg
ICAgICBhcnJhbmdlZENvbnRlbnQucmV2ZXJzZU9iamVjdHMoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgY29udGVudEFycmF5V2lsbENoYW5nZTog
ZnVuY3Rpb24oYXJyYXksIGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZENvdW50KSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGlzU29ydGVkID0gZ2V0KHRoaXMsICdpc1NvcnRlZCcpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGlzU29ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnJhbmdl
ZENvbnRlbnQgPSBnZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgcmVtb3ZlZE9iamVjdHMgPSBhcnJheS5zbGljZShpZHgsIGlkeCArIHJlbW92ZWRD
b3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzb3J0UHJvcGVydGllcyA9IGdldCh0aGlz
LCAnc29ydFByb3BlcnRpZXMnKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHJlbW92
ZWRPYmplY3RzLCBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJh
bmdlZENvbnRlbnQucmVtb3ZlT2JqZWN0KGl0ZW0pOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JFYWNoKHNvcnRQcm9wZXJ0aWVzLCBmdW5jdGlvbihzb3J0UHJvcGVydHkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVPYnNlcnZlcihpdGVtLCBzb3J0UHJvcGVydHks
IHRoaXMsICdjb250ZW50SXRlbVNvcnRQcm9wZXJ0eURpZENoYW5nZScpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihhcnJh
eSwgaWR4LCByZW1vdmVkQ291bnQsIGFkZGVkQ291bnQpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgY29udGVudEFycmF5RGlkQ2hhbmdlOiBmdW5jdGlvbihhcnJheSwgaWR4LCByZW1v
dmVkQ291bnQsIGFkZGVkQ291bnQpIHsKLSAgICAgICAgICAgICAgICB2YXIgaXNTb3J0ZWQgPSBn
ZXQodGhpcywgJ2lzU29ydGVkJyksCi0gICAgICAgICAgICAgICAgc29ydFByb3BlcnRpZXMgPSBn
ZXQodGhpcywgJ3NvcnRQcm9wZXJ0aWVzJyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNTb3J0
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFkZGVkT2JqZWN0cyA9IGFycmF5LnNsaWNl
KGlkeCwgaWR4ICsgYWRkZWRDb3VudCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChh
ZGRlZE9iamVjdHMsIGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuaW5zZXJ0SXRlbVNvcnRlZChpdGVtKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
RWFjaChzb3J0UHJvcGVydGllcywgZnVuY3Rpb24oc29ydFByb3BlcnR5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoaXRlbSwgc29ydFByb3BlcnR5LCB0aGlzLCAn
Y29udGVudEl0ZW1Tb3J0UHJvcGVydHlEaWRDaGFuZ2UnKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIoYXJyYXksIGlkeCwg
cmVtb3ZlZENvdW50LCBhZGRlZENvdW50KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGluc2VydEl0ZW1Tb3J0ZWQ6IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICB2YXIg
YXJyYW5nZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLSAgICAgICAg
ICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0KGFycmFuZ2VkQ29udGVudCwgJ2xlbmd0aCcpOwotCi0g
ICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2JpbmFyeVNlYXJjaChpdGVtLCAwLCBsZW5n
dGgpOwotICAgICAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudC5pbnNlcnRBdChpZHgsIGl0ZW0p
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgY29udGVudEl0ZW1Tb3J0UHJvcGVydHlE
aWRDaGFuZ2U6IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYW5nZWRD
b250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBv
bGRJbmRleCA9IGFycmFuZ2VkQ29udGVudC5pbmRleE9mKGl0ZW0pLAotICAgICAgICAgICAgICAg
IGxlZnRJdGVtID0gYXJyYW5nZWRDb250ZW50Lm9iamVjdEF0KG9sZEluZGV4IC0gMSksCi0gICAg
ICAgICAgICAgICAgcmlnaHRJdGVtID0gYXJyYW5nZWRDb250ZW50Lm9iamVjdEF0KG9sZEluZGV4
ICsgMSksCi0gICAgICAgICAgICAgICAgbGVmdFJlc3VsdCA9IGxlZnRJdGVtICYmIHRoaXMub3Jk
ZXJCeShpdGVtLCBsZWZ0SXRlbSksCi0gICAgICAgICAgICAgICAgcmlnaHRSZXN1bHQgPSByaWdo
dEl0ZW0gJiYgdGhpcy5vcmRlckJ5KGl0ZW0sIHJpZ2h0SXRlbSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAobGVmdFJlc3VsdCA8IDAgfHwgcmlnaHRSZXN1bHQgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFycmFuZ2VkQ29udGVudC5yZW1vdmVPYmplY3QoaXRlbSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuaW5zZXJ0SXRlbVNvcnRlZChpdGVtKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfYmluYXJ5U2VhcmNoOiBmdW5jdGlvbihpdGVt
LCBsb3csIGhpZ2gpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWlkLCBtaWRJdGVtLCByZXMsIGFy
cmFuZ2VkQ29udGVudDsKLQotICAgICAgICAgICAgICAgIGlmIChsb3cgPT09IGhpZ2gpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvdzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBhcnJhbmdlZENvbnRlbnQgPSBnZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcp
OwotCi0gICAgICAgICAgICAgICAgbWlkID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykg
LyAyKTsKLSAgICAgICAgICAgICAgICBtaWRJdGVtID0gYXJyYW5nZWRDb250ZW50Lm9iamVjdEF0
KG1pZCk7Ci0KLSAgICAgICAgICAgICAgICByZXMgPSB0aGlzLm9yZGVyQnkobWlkSXRlbSwgaXRl
bSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fYmluYXJ5U2VhcmNoKGl0ZW0sIG1pZCArIDEsIGhpZ2gpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocmVzID4gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fYmluYXJ5U2VhcmNoKGl0ZW0sIGxvdywgbWlkKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWlkOwotICAgICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3RhcmdldF9hY3Rp
b25fc3VwcG9ydCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvdXRpbHMi
LCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZXhwb3J0cyJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVu
ZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFf
X1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5sb29rdXAsIEVtYmVyLmFzc2VydAotCi0g
ICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0g
X19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTRf
Xy50eXBlT2Y7Ci0gICAgICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTVfXy5NaXhpbjsKLSAg
ICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRlbmN5Nl9fLmNvbXB1dGVkOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgYEVtYmVyLlRhcmdldEFjdGlvblN1cHBvcnRgIGlzIGEgbWl4aW4g
dGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gYSBjbGFzcwotICAgICAgICAgICAgdG8gYWRkIGEgYHRy
aWdnZXJBY3Rpb25gIG1ldGhvZCB3aXRoIHNlbWFudGljcyBzaW1pbGFyIHRvIHRoZSBIYW5kbGVi
YXJzCi0gICAgICAgICAgICBge3thY3Rpb259fWAgaGVscGVyLiBJbiBub3JtYWwgRW1iZXIgdXNh
Z2UsIHRoZSBge3thY3Rpb259fWAgaGVscGVyIGlzCi0gICAgICAgICAgICB1c3VhbGx5IHRoZSBi
ZXN0IGNob2ljZS4gVGhpcyBtaXhpbiBpcyBtb3N0IG9mdGVuIHVzZWZ1bCB3aGVuIHlvdSBhcmUK
LSAgICAgICAgICAgIGRvaW5nIG1vcmUgY29tcGxleCBldmVudCBoYW5kbGluZyBpbiBWaWV3IG9i
amVjdHMuCi0KLSAgICAgICAgICAgIFNlZSBhbHNvIGBFbWJlci5WaWV3VGFyZ2V0QWN0aW9uU3Vw
cG9ydGAsIHdoaWNoIGhhcwotICAgICAgICAgICAgdmlldy1hd2FyZSBkZWZhdWx0cyBmb3IgdGFy
Z2V0IGFuZCBhY3Rpb25Db250ZXh0LgotCi0gICAgICAgICAgICBAY2xhc3MgVGFyZ2V0QWN0aW9u
U3VwcG9ydAotICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgQGV4dGVu
ZHMgRW1iZXIuTWl4aW4KLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBUYXJnZXRBY3Rpb25T
dXBwb3J0ID0gTWl4aW4uY3JlYXRlKHsKLSAgICAgICAgICAgIHRhcmdldDogbnVsbCwKLSAgICAg
ICAgICAgIGFjdGlvbjogbnVsbCwKLSAgICAgICAgICAgIGFjdGlvbkNvbnRleHQ6IG51bGwsCi0K
LSAgICAgICAgICAgIHRhcmdldE9iamVjdDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHRhcmdldCA9IGdldCh0aGlzLCAndGFyZ2V0Jyk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodHlwZU9mKHRhcmdldCkgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciB2YWx1ZSA9IGdldCh0aGlzLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBnZXQoRW1iZXIubG9va3VwLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pLnByb3BlcnR5KCd0YXJnZXQnKSwKLQotICAgICAgICAgICAgYWN0aW9uQ29u
dGV4dE9iamVjdDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFj
dGlvbkNvbnRleHQgPSBnZXQodGhpcywgJ2FjdGlvbkNvbnRleHQnKTsKLQotICAgICAgICAgICAg
ICAgIGlmICh0eXBlT2YoYWN0aW9uQ29udGV4dCkgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IGdldCh0aGlzLCBhY3Rpb25Db250ZXh0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gZ2V0KEVtYmVyLmxvb2t1cCwgYWN0aW9uQ29udGV4dCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25Db250
ZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLnByb3BlcnR5KCdhY3Rpb25D
b250ZXh0JyksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgU2VuZCBhbiBg
YWN0aW9uYCB3aXRoIGFuIGBhY3Rpb25Db250ZXh0YCB0byBhIGB0YXJnZXRgLiBUaGUgYWN0aW9u
LCBhY3Rpb25Db250ZXh0Ci0gICAgICAgICAgICAgICAgICBhbmQgdGFyZ2V0IHdpbGwgYmUgcmV0
cmlldmVkIGZyb20gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LiBGb3IgZXhhbXBsZToKLQotICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgQXBwLlNhdmVC
dXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydCwg
ewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdjb250
cm9sbGVyJyksCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NhdmUnLAotICAgICAgICAg
ICAgICAgICAgICBhY3Rpb25Db250ZXh0OiBFbWJlci5jb21wdXRlZC5hbGlhcygnY29udGV4dCcp
LAotICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50cmlnZ2VyQWN0aW9uKCk7IC8vIFNlbmRzIHRoZSBgc2F2ZWAgYWN0aW9u
LCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlcgotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAg
IGBgYAotCi0gICAgICAgICAgICAgICAgICBUaGUgYHRhcmdldGAsIGBhY3Rpb25gLCBhbmQgYGFj
dGlvbkNvbnRleHRgIGNhbiBiZSBwcm92aWRlZCBhcyBwcm9wZXJ0aWVzIG9mCi0gICAgICAgICAg
ICAgICAgICBhbiBvcHRpb25hbCBvYmplY3QgYXJndW1lbnQgdG8gYHRyaWdnZXJBY3Rpb25gIGFz
IHdlbGwuCi0KLSAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgIEFwcC5TYXZlQnV0dG9uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEVtYmVyLlRhcmdldEFj
dGlvblN1cHBvcnQsIHsKLSAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbih7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhY3Rpb246ICdzYXZlJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dDogdGhpcy5nZXQoJ2NvbnRyb2xsZXInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlv
bkNvbnRleHQ6IHRoaXMuZ2V0KCdjb250ZXh0JykKLSAgICAgICAgICAgICAgICAgICAgICB9KTsg
Ly8gU2VuZHMgdGhlIGBzYXZlYCBhY3Rpb24sIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgY29udGV4
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBjb250cm9sbGVy
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgIFRoZSBgYWN0aW9uQ29udGV4dGAgZGVm
YXVsdHMgdG8gdGhlIG9iamVjdCB5b3UgYXJlIG1peGluZyBgVGFyZ2V0QWN0aW9uU3VwcG9ydGAg
aW50by4KLSAgICAgICAgICAgICAgICAgIEJ1dCBgdGFyZ2V0YCBhbmQgYGFjdGlvbmAgbXVzdCBi
ZSBzcGVjaWZpZWQgZWl0aGVyIGFzIHByb3BlcnRpZXMgb3Igd2l0aCB0aGUgYXJndW1lbnQKLSAg
ICAgICAgICAgICAgICAgIHRvIGB0cmlnZ2VyQWN0aW9uYCwgb3IgYSBjb21iaW5hdGlvbjoKLQot
ICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgQXBwLlNh
dmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9y
dCwgewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdj
b250cm9sbGVyJyksCi0gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJBY3Rpb24oewotICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uOiAnc2F2ZScKLSAgICAgICAgICAgICAgICAgICAgICB9KTsgLy8gU2Vu
ZHMgdGhlIGBzYXZlYCBhY3Rpb24sIGFsb25nIHdpdGggYSByZWZlcmVuY2UgdG8gYHRoaXNgLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBjb250cm9sbGVyCi0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgIEBtZXRob2QgdHJpZ2dlckFjdGlvbgotICAg
ICAgICAgICAgICAgICAgQHBhcmFtIG9wdHMge0hhc2h9IChvcHRpb25hbCwgd2l0aCB0aGUgb3B0
aW9uYWwga2V5cyBhY3Rpb24sIHRhcmdldCBhbmQvb3IgYWN0aW9uQ29udGV4dCkKLSAgICAgICAg
ICAgICAgICAgIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFjdGlvbiB3YXMgc2VudCBz
dWNjZXNzZnVsbHkgYW5kIGRpZCBub3QgcmV0dXJuIGZhbHNlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgdHJpZ2dlckFjdGlvbjogZnVuY3Rpb24ob3B0cykgewotICAgICAgICAg
ICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9OwotICAgICAgICAgICAgICAgIHZhciBhY3Rpb24gPSBv
cHRzLmFjdGlvbiB8fCBnZXQodGhpcywgJ2FjdGlvbicpLAotICAgICAgICAgICAgICAgIHRhcmdl
dCA9IG9wdHMudGFyZ2V0IHx8IGdldCh0aGlzLCAndGFyZ2V0T2JqZWN0JyksCi0gICAgICAgICAg
ICAgICAgYWN0aW9uQ29udGV4dCA9IG9wdHMuYWN0aW9uQ29udGV4dDsKLQotICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIGFyZ3Mob3B0aW9ucywgYWN0aW9uTmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgcmV0ID0gW107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25OYW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChhY3Rpb25OYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQuY29uY2F0KG9w
dGlvbnMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
YWN0aW9uQ29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0
aW9uQ29udGV4dCA9IGdldCh0aGlzLCAnYWN0aW9uQ29udGV4dE9iamVjdCcpIHx8IHRoaXM7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAmJiBhY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0LnNlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRhcmdldC5z
ZW5kLmFwcGx5KHRhcmdldCwgYXJncyhhY3Rpb25Db250ZXh0LCBhY3Rpb24pKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgiVGhlIGFjdGlvbiAnIiArIGFjdGlvbiArICInIGRpZCBub3QgZXhpc3Qgb24gIiArIHRhcmdl
dCwgdHlwZW9mIHRhcmdldFthY3Rpb25dID09PSAnZnVuY3Rpb24nKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IHRhcmdldFthY3Rpb25dLmFwcGx5KHRhcmdldCwgYXJncyhhY3Rpb25D
b250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAocmV0ICE9PSBmYWxzZSkgCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IFRhcmdldEFjdGlvblN1cHBvcnQ7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1y
dW50aW1lL3N5c3RlbS9hcHBsaWNhdGlvbiIsCi0gICAgWyJlbWJlci1ydW50aW1lL3N5c3RlbS9u
YW1lc3BhY2UiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgTmFtZXNwYWNl
ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRl
ZmF1bHQiXSA9IE5hbWVzcGFjZS5leHRlbmQoKTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAi
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJl
bWJlci1tZXRhbC91dGlscyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9t
aXhpbiIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMiLCAiZW1iZXItbWV0YWwvZXJyb3Ii
LCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211
dGFibGVfYXJyYXkiLCAiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsICJlbWJlci1y
dW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5k
ZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRf
XywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19k
ZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5k
ZW5jeTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ug
c3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIC8vIEVtYmVyLkssIEVtYmVyLmFzc2VydAotICAgICAgICB2YXIgZ2V0ID0gX19k
ZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7
Ci0gICAgICAgIHZhciBpc0FycmF5ID0gX19kZXBlbmRlbmN5NF9fLmlzQXJyYXk7Ci0gICAgICAg
IHZhciBhcHBseSA9IF9fZGVwZW5kZW5jeTRfXy5hcHBseTsKLSAgICAgICAgdmFyIGNvbXB1dGVk
ID0gX19kZXBlbmRlbmN5NV9fLmNvbXB1dGVkOwotICAgICAgICB2YXIgYmVmb3JlT2JzZXJ2ZXIg
PSBfX2RlcGVuZGVuY3k2X18uYmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZhciBvYnNlcnZlciA9
IF9fZGVwZW5kZW5jeTZfXy5vYnNlcnZlcjsKLSAgICAgICAgdmFyIGJlZ2luUHJvcGVydHlDaGFu
Z2VzID0gX19kZXBlbmRlbmN5N19fLmJlZ2luUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIg
ZW5kUHJvcGVydHlDaGFuZ2VzID0gX19kZXBlbmRlbmN5N19fLmVuZFByb3BlcnR5Q2hhbmdlczsK
LSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBNdXRhYmxlQXJyYXkgPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBFbnVtZXJhYmxlID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgZm10ID0gX19kZXBlbmRlbmN5MTJfXy5mbXQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUK
LSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIE9VVF9PRl9SQU5HRV9FWENFUFRJT04gPSAi
SW5kZXggb3V0IG9mIHJhbmdlIjsKLSAgICAgICAgdmFyIEVNUFRZID0gW107Ci0gICAgICAgIHZh
ciBhbGlhcyA9IGNvbXB1dGVkLmFsaWFzOwotICAgICAgICB2YXIgSyA9IEVtYmVyLks7Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIEFuIEFycmF5UHJveHkgd3JhcHMgYW55IG90aGVyIG9i
amVjdCB0aGF0IGltcGxlbWVudHMgYEVtYmVyLkFycmF5YCBhbmQvb3IKLSAgICAgICAgICAgICAg
YEVtYmVyLk11dGFibGVBcnJheSxgIGZvcndhcmRpbmcgYWxsIHJlcXVlc3RzLiBUaGlzIG1ha2Vz
IGl0IHZlcnkgdXNlZnVsIGZvcgotICAgICAgICAgICAgICBhIG51bWJlciBvZiBiaW5kaW5nIHVz
ZSBjYXNlcyBvciBvdGhlciBjYXNlcyB3aGVyZSBiZWluZyBhYmxlIHRvIHN3YXAKLSAgICAgICAg
ICAgICAgb3V0IHRoZSB1bmRlcmx5aW5nIGFycmF5IGlzIHVzZWZ1bC4KLQotICAgICAgICAgICAg
ICBBIHNpbXBsZSBleGFtcGxlIG9mIHVzYWdlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgdmFyIHBldHMgPSBbJ2RvZycsICdjYXQnLCAnZmlzaCddOwotICAg
ICAgICAgICAgICB2YXIgYXAgPSBFbWJlci5BcnJheVByb3h5LmNyZWF0ZSh7IGNvbnRlbnQ6IEVt
YmVyLkEocGV0cykgfSk7Ci0KLSAgICAgICAgICAgICAgYXAuZ2V0KCdmaXJzdE9iamVjdCcpOyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2cnCi0gICAgICAgICAgICAgIGFwLnNldCgnY29u
dGVudCcsIFsnYW1vZWJhJywgJ3BhcmFtZWNpdW0nXSk7Ci0gICAgICAgICAgICAgIGFwLmdldCgn
Zmlyc3RPYmplY3QnKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW1vZWJhJwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBUaGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWZ1
bCBhcyBhIGxheWVyIHRvIHRyYW5zZm9ybSB0aGUgY29udGVudHMgb2YKLSAgICAgICAgICAgICAg
YW4gYXJyYXksIGFzIHRoZXkgYXJlIGFjY2Vzc2VkLiBUaGlzIGNhbiBiZSBkb25lIGJ5IG92ZXJy
aWRpbmcKLSAgICAgICAgICAgICAgYG9iamVjdEF0Q29udGVudGA6Ci0KLSAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcGV0cyA9IFsnZG9nJywgJ2NhdCcsICdm
aXNoJ107Ci0gICAgICAgICAgICAgIHZhciBhcCA9IEVtYmVyLkFycmF5UHJveHkuY3JlYXRlKHsK
LSAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IEVtYmVyLkEocGV0cyksCi0gICAgICAgICAgICAg
ICAgICBvYmplY3RBdENvbnRlbnQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmdldCgnY29udGVudCcpLm9iamVjdEF0KGlkeCkudG9VcHBlckNhc2Uo
KTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
ICAgYXAuZ2V0KCdmaXJzdE9iamVjdCcpOyAvLyAuICdET0cnCi0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIEBjbGFzcyBBcnJheVByb3h5Ci0gICAgICAgICAgICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgICAgICAg
ICAgIEB1c2VzIEVtYmVyLk11dGFibGVBcnJheQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFy
IEFycmF5UHJveHkgPSBFbWJlck9iamVjdC5leHRlbmQoTXV0YWJsZUFycmF5LCB7Ci0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgY29udGVudCBhcnJheS4gTXVzdCBi
ZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIGBFbWJlci5BcnJheWAgYW5kL29yCi0gICAgICAg
ICAgICAgICAgICAgIGBFbWJlci5NdXRhYmxlQXJyYXkuYAotCi0gICAgICAgICAgICAgICAgICAg
IEBwcm9wZXJ0eSBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEVtYmVyLkFycmF5
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29udGVudDogbnVsbCwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgVGhlIGFycmF5IHRoYXQgdGhlIHByb3h5
IHByZXRlbmRzIHRvIGJlLiBJbiB0aGUgZGVmYXVsdCBgQXJyYXlQcm94eWAKLSAgICAgICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbiwgdGhpcyBhbmQgYGNvbnRlbnRgIGFyZSB0aGUgc2FtZS4g
U3ViY2xhc3NlcyBvZiBgQXJyYXlQcm94eWAKLSAgICAgICAgICAgICAgICAgICBjYW4gb3ZlcnJp
ZGUgdGhpcyBwcm9wZXJ0eSB0byBwcm92aWRlIHRoaW5ncyBsaWtlIHNvcnRpbmcgYW5kIGZpbHRl
cmluZy4KLQotICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBhcnJhbmdlZENvbnRlbnQKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhcnJhbmdlZENvbnRlbnQ6IGFsaWFzKCdj
b250ZW50JyksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTaG91bGQg
YWN0dWFsbHkgcmV0cmlldmUgdGhlIG9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGZyb20g
dGhlCi0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBt
ZXRob2QgaW4gc3ViY2xhc3NlcyB0byB0cmFuc2Zvcm0gdGhlCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRlbnQgaXRlbSB0byBzb21ldGhpbmcgbmV3LgotCi0gICAgICAgICAgICAgICAgICAgIFRo
aXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgY29udGVudCBpcyBub24tYG51bGxgLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb2JqZWN0QXRDb250ZW50Ci0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSBpZHggVGhlIGluZGV4IHRvIHJldHJpZXZlLgotICAg
ICAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSB2YWx1ZSBvciB1bmRlZmluZWQg
aWYgbm9uZSBmb3VuZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9iamVjdEF0
Q29udGVudDogZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlz
LCAnYXJyYW5nZWRDb250ZW50Jykub2JqZWN0QXQoaWR4KTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTaG91bGQgYWN0dWFsbHkgcmVwbGFj
ZSB0aGUgc3BlY2lmaWVkIG9iamVjdHMgb24gdGhlIGNvbnRlbnQgYXJyYXkuCi0gICAgICAgICAg
ICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gc3ViY2xhc3NlcyB0byB0
cmFuc2Zvcm0gdGhlIGNvbnRlbnQgaXRlbQotICAgICAgICAgICAgICAgICAgICBpbnRvIHNvbWV0
aGluZyBuZXcuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJl
IGNhbGxlZCBpZiBjb250ZW50IGlzIG5vbi1gbnVsbGAuCi0KLSAgICAgICAgICAgICAgICAgICAg
QG1ldGhvZCByZXBsYWNlQ29udGVudAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJl
cn0gaWR4IFRoZSBzdGFydGluZyBpbmRleAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051
bWJlcn0gYW10IFRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmVtb3ZlIGZyb20gdGhlIGNvbnRlbnQu
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IG9iamVjdHMgT3B0aW9uYWwgYXJy
YXkgb2Ygb2JqZWN0cyB0byBpbnNlcnQgb3IgbnVsbCBpZiBubwotICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdHMuCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVwbGFjZUNvbnRlbnQ6IGZ1bmN0aW9uKGlkeCwg
YW10LCBvYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgZ2V0KHRoaXMsICdjb250ZW50JykucmVw
bGFjZShpZHgsIGFtdCwgb2JqZWN0cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aGVuIHRoZSBjb250ZW50IHByb3BlcnR5
IGlzIGFib3V0IHRvIGNoYW5nZS4gTm90aWZpZXMgb2JzZXJ2ZXJzIHRoYXQgdGhlCi0gICAgICAg
ICAgICAgICAgICAgIGVudGlyZSBhcnJheSBjb250ZW50IHdpbGwgY2hhbmdlLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2NvbnRl
bnRXaWxsQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2NvbnRlbnRX
aWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcignY29udGVudCcsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRoaXMuX3RlYXJkb3duQ29udGVudCgpOwotICAgICAgICAgICAgfSksCi0KLSAg
ICAgICAgICAgIF90ZWFyZG93bkNvbnRlbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoY29udGVudCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZW50LnJlbW92ZUFycmF5T2Jz
ZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ2NvbnRl
bnRBcnJheVdpbGxDaGFuZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlOiAn
Y29udGVudEFycmF5RGlkQ2hhbmdlJwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb250ZW50QXJyYXlXaWxs
Q2hhbmdlOiBLLAotICAgICAgICAgICAgY29udGVudEFycmF5RGlkQ2hhbmdlOiBLLAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aGVuIHRoZSBjb250ZW50
IHByb3BlcnR5IGNoYW5nZXMuIE5vdGlmaWVzIG9ic2VydmVycyB0aGF0IHRoZQotICAgICAgICAg
ICAgICAgICAgICBlbnRpcmUgYXJyYXkgY29udGVudCBoYXMgY2hhbmdlZC4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9jb250ZW50
RGlkQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2NvbnRlbnREaWRD
aGFuZ2U6IG9ic2VydmVyKCdjb250ZW50JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLQotICAgICAgICAgICAgICAgIEVt
YmVyLmFzc2VydCgiQ2FuJ3Qgc2V0IEFycmF5UHJveHkncyBjb250ZW50IHRvIGl0c2VsZiIsIGNv
bnRlbnQgIT09IHRoaXMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBDb250ZW50KCk7
Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgX3NldHVwQ29udGVudDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsK
LQotICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIEVt
YmVyLmFzc2VydChmbXQoJ0FycmF5UHJveHkgZXhwZWN0cyBhbiBBcnJheSBvciAnICsKLSAgICAg
ICAgICAgICAgICAgICAgJ0VtYmVyLkFycmF5UHJveHksIGJ1dCB5b3UgcGFzc2VkICVAJywgW3R5
cGVvZiBjb250ZW50XSksCi0gICAgICAgICAgICAgICAgICAgIGlzQXJyYXkoY29udGVudCkgfHwg
Y29udGVudC5pc0Rlc3Ryb3llZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGVudC5hZGRB
cnJheU9ic2VydmVyKHRoaXMsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6
ICdjb250ZW50QXJyYXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZENo
YW5nZTogJ2NvbnRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2FycmFuZ2Vk
Q29udGVudFdpbGxDaGFuZ2U6IGJlZm9yZU9ic2VydmVyKCdhcnJhbmdlZENvbnRlbnQnLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYW5nZWRDb250ZW50ID0gZ2V0KHRoaXMs
ICdhcnJhbmdlZENvbnRlbnQnKSwKLSAgICAgICAgICAgICAgICBsZW4gPSBhcnJhbmdlZENvbnRl
bnQgPyBnZXQoYXJyYW5nZWRDb250ZW50LCAnbGVuZ3RoJykgOiAwOwotCi0gICAgICAgICAgICAg
ICAgdGhpcy5hcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2UodGhpcywgMCwgbGVuLCB1bmRl
ZmluZWQpOwotICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZSh0
aGlzKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX3RlYXJkb3duQXJyYW5nZWRDb250ZW50KGFy
cmFuZ2VkQ29udGVudCk7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgX2FycmFuZ2Vk
Q29udGVudERpZENoYW5nZTogb2JzZXJ2ZXIoJ2FycmFuZ2VkQ29udGVudCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQgPSBnZXQodGhpcywgJ2FycmFu
Z2VkQ29udGVudCcpLAotICAgICAgICAgICAgICAgIGxlbiA9IGFycmFuZ2VkQ29udGVudCA/IGdl
dChhcnJhbmdlZENvbnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0KLSAgICAgICAgICAgICAgICBFbWJl
ci5hc3NlcnQoIkNhbid0IHNldCBBcnJheVByb3h5J3MgY29udGVudCB0byBpdHNlbGYiLCBhcnJh
bmdlZENvbnRlbnQgIT09IHRoaXMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBBcnJh
bmdlZENvbnRlbnQoKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50RGlk
Q2hhbmdlKHRoaXMpOwotICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50QXJyYXlE
aWRDaGFuZ2UodGhpcywgMCwgdW5kZWZpbmVkLCBsZW4pOwotICAgICAgICAgICAgfSksCi0KLSAg
ICAgICAgICAgIF9zZXR1cEFycmFuZ2VkQ29udGVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5nZWRDb250ZW50Jyk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYW5nZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydChmbXQoJ0FycmF5UHJveHkgZXhwZWN0cyBhbiBBcnJheSBvciAn
ICsKLSAgICAgICAgICAgICAgICAgICAgJ0VtYmVyLkFycmF5UHJveHksIGJ1dCB5b3UgcGFzc2Vk
ICVAJywgW3R5cGVvZiBhcnJhbmdlZENvbnRlbnRdKSwKLSAgICAgICAgICAgICAgICAgICAgaXNB
cnJheShhcnJhbmdlZENvbnRlbnQpIHx8IGFycmFuZ2VkQ29udGVudC5pc0Rlc3Ryb3llZCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50LmFkZEFycmF5T2JzZXJ2ZXIodGhp
cywgewotICAgICAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ2FycmFuZ2VkQ29udGVu
dEFycmF5V2lsbENoYW5nZScsCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2U6ICdh
cnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5nZScKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3RlYXJkb3du
QXJyYW5nZWRDb250ZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYW5n
ZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChhcnJhbmdlZENvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJyYW5nZWRD
b250ZW50LnJlbW92ZUFycmF5T2JzZXJ2ZXIodGhpcywgewotICAgICAgICAgICAgICAgICAgICAg
ICAgd2lsbENoYW5nZTogJ2FycmFuZ2VkQ29udGVudEFycmF5V2lsbENoYW5nZScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkaWRDaGFuZ2U6ICdhcnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5n
ZScKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZTogSywKLSAgICAg
ICAgICAgIGFycmFuZ2VkQ29udGVudERpZENoYW5nZTogSywKLQotICAgICAgICAgICAgb2JqZWN0
QXQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ2Nv
bnRlbnQnKSAmJiB0aGlzLm9iamVjdEF0Q29udGVudChpZHgpOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgbGVuZ3RoOiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgYXJyYW5nZWRDb250ZW50ID0gZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXJyYW5nZWRDb250ZW50ID8gZ2V0KGFycmFuZ2VkQ29udGVu
dCwgJ2xlbmd0aCcpIDogMDsKLSAgICAgICAgICAgICAgICAvLyBObyBkZXBlbmRlbmNpZXMgc2lu
Y2UgRW51bWVyYWJsZSBub3RpZmllcyBsZW5ndGggb2YgY2hhbmdlCi0gICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgX3JlcGxhY2U6IGZ1bmN0aW9uKGlkeCwgYW10LCBvYmplY3RzKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLSAgICAg
ICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1RoZSBjb250ZW50IHByb3BlcnR5IG9mICcgKyB0aGlz
LmNvbnN0cnVjdG9yICsgJyBzaG91bGQgYmUgc2V0IGJlZm9yZSBtb2RpZnlpbmcgaXQnLCBjb250
ZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY29udGVudCkgCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMucmVwbGFjZUNvbnRlbnQoaWR4LCBhbXQsIG9iamVjdHMpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVwbGFjZTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnYXJyYW5nZWRDb250ZW50
JykgPT09IGdldCh0aGlzLCAnY29udGVudCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGx5
KHRoaXMsIHRoaXMuX3JlcGxhY2UsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIlVzaW5nIHJlcGxh
Y2Ugb24gYW4gYXJyYW5nZWQgQXJyYXlQcm94eSBpcyBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfaW5zZXJ0QXQ6IGZ1bmN0
aW9uKGlkeCwgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkeCA+IGdldCh0aGlzLCAn
Y29udGVudC5sZW5ndGgnKSkgCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVy
cm9yKE9VVF9PRl9SQU5HRV9FWENFUFRJT04pOwotICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxh
Y2UoaWR4LCAwLCBbb2JqZWN0XSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBpbnNlcnRBdDogZnVuY3Rpb24oaWR4LCBvYmplY3Qp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKSA9PT0g
Z2V0KHRoaXMsICdjb250ZW50JykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2luc2VydEF0KGlkeCwgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiVXNpbmcgaW5zZXJ0QXQgb24gYW4g
YXJyYW5nZWQgQXJyYXlQcm94eSBpcyBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW1vdmVBdDogZnVuY3Rpb24oc3RhcnQs
IGxlbikgewotICAgICAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHN0YXJ0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gZ2V0KHRoaXMsICdjb250ZW50Jyks
Ci0gICAgICAgICAgICAgICAgICAgIGFycmFuZ2VkQ29udGVudCA9IGdldCh0aGlzLCAnYXJyYW5n
ZWRDb250ZW50JyksCi0gICAgICAgICAgICAgICAgICAgIGluZGljZXMgPSBbXSwgaTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ID49IGdldCh0aGlzLCAn
bGVuZ3RoJykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJv
cihPVVRfT0ZfUkFOR0VfRVhDRVBUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChsZW4gPT09IHVuZGVmaW5lZCkgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZW4gPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2Yg
aW5kaWNlcyBpbiBvcmlnaW5hbCBjb250ZW50IHRvIHJlbW92ZQotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFVzZSBhcnJhbmdlZENvbnRlbnQgaGVyZSBzbyB3ZSBhdm9pZCBjb25mdXNp
b24gd2l0aCBvYmplY3RzIHRyYW5zZm9ybWVkIGJ5IG9iamVjdEF0Q29udGVudAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGNvbnRlbnQuaW5kZXhPZihhcnJhbmdlZENvbnRl
bnQub2JqZWN0QXQoaSkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIFJlcGxhY2UgaW4gcmV2ZXJzZSBvcmRlciBzaW5jZSBpbmRpY2VzIHdpbGwgY2hh
bmdlCi0gICAgICAgICAgICAgICAgICAgIGluZGljZXMuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiAtIGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIGJlZ2luUHJvcGVydHlDaGFuZ2VzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlKGluZGljZXNbaV0sIDEsIEVNUFRZ
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbmRQcm9wZXJ0
eUNoYW5nZXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcyA7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBwdXNoT2JqZWN0OiBmdW5jdGlv
bihvYmopIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRBdChnZXQodGhpcywgJ2NvbnRl
bnQubGVuZ3RoJyksIG9iaikgOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmogOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgcHVzaE9iamVjdHM6IGZ1bmN0aW9uKG9iamVjdHMpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIShFbnVtZXJhYmxlLmRldGVjdChvYmplY3RzKSB8fCBpc0Fy
cmF5KG9iamVjdHMpKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJNdXN0IHBhc3MgRW1iZXIuRW51bWVyYWJsZSB0byBFbWJlci5NdXRhYmxlQXJyYXkjcHVzaE9i
amVjdHMiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFj
ZShnZXQodGhpcywgJ2xlbmd0aCcpLCAwLCBvYmplY3RzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldE9iamVjdHM6IGZ1bmN0
aW9uKG9iamVjdHMpIHsKLSAgICAgICAgICAgICAgICBpZiAob2JqZWN0cy5sZW5ndGggPT09IDAp
IAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhcigpOwotCi0gICAgICAgICAg
ICAgICAgdmFyIGxlbiA9IGdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fcmVwbGFjZSgwLCBsZW4sIG9iamVjdHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdW5zaGlmdE9iamVjdDogZnVuY3Rpb24o
b2JqKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0QXQoMCwgb2JqKSA7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iaiA7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB1bnNo
aWZ0T2JqZWN0czogZnVuY3Rpb24ob2JqZWN0cykgewotICAgICAgICAgICAgICAgIHRoaXMuX3Jl
cGxhY2UoMCwgMCwgb2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGFyciA9IHRoaXMudG9BcnJheSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBh
cnIuc2xpY2UuYXBwbHkoYXJyLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgYXJyYW5nZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlOiBmdW5jdGlvbihpdGVtLCBpZHgs
IHJlbW92ZWRDbnQsIGFkZGVkQ250KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5hcnJheUNvbnRl
bnRXaWxsQ2hhbmdlKGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2U6IGZ1bmN0aW9uKGl0
ZW0sIGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmFy
cmF5Q29udGVudERpZENoYW5nZShpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250KTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBDb250ZW50KCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBBcnJhbmdlZENvbnRlbnQoKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl90ZWFyZG93bkFycmFuZ2VkQ29udGVudCgpOwotICAgICAgICAgICAgICAgIHRo
aXMuX3RlYXJkb3duQ29udGVudCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAg
ICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQXJyYXlQcm94eTsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvbnRhaW5lciIsCi0gICAgWyJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgc2V0
ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIENvbnRhaW5lciA9
IHJlcXVpcmVNb2R1bGUoJ2NvbnRhaW5lcicpWyJkZWZhdWx0Il07Ci0gICAgICAgIENvbnRhaW5l
ci5zZXQgPSBzZXQ7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IENvbnRhaW5l
cjsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0
IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0Iiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJlci1t
ZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC93YXRjaGluZyIsICJlbWJlci1tZXRhbC9jaGFp
bnMiLCAiZW1iZXItbWV0YWwvZXZlbnRzIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1l
dGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItcnVudGlt
ZS9rZXlzIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwgImVtYmVyLW1l
dGFsL3Byb3BlcnRpZXMiLCAiZW1iZXItbWV0YWwvYmluZGluZyIsICJlbWJlci1tZXRhbC9jb21w
dXRlZCIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBl
bmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5
N19fLCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywg
X19kZXBlbmRlbmN5MTFfXywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19k
ZXBlbmRlbmN5MTRfXywgX19kZXBlbmRlbmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19kZXBl
bmRlbmN5MTdfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0g
X19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkVOVi5NQU5EQVRP
UllfU0VUVEVSLCBFbWJlci5hc3NlcnQsIEVtYmVyLkssIEVtYmVyLmNvbmZpZwotCi0gICAgICAg
IC8vIE5PVEU6IHRoaXMgb2JqZWN0IHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseS4g
SW5zdGVhZCB1c2UgYEVtYmVyLk9iamVjdGAuCi0gICAgICAgIC8vIFdlIG9ubHkgZGVmaW5lIHRo
aXMgc2VwYXJhdGVseSBzbyB0aGF0IGBFbWJlci5TZXRgIGNhbiBkZXBlbmQgb24gaXQuCi0gICAg
ICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19k
ZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3k0X18u
Z3VpZEZvcjsKLSAgICAgICAgdmFyIGFwcGx5ID0gX19kZXBlbmRlbmN5NF9fLmFwcGx5OwotICAg
ICAgICB2YXIgb19jcmVhdGUgPSBfX2RlcGVuZGVuY3k1X18uY3JlYXRlOwotICAgICAgICB2YXIg
Z2VuZXJhdGVHdWlkID0gX19kZXBlbmRlbmN5NF9fLmdlbmVyYXRlR3VpZDsKLSAgICAgICAgdmFy
IEdVSURfS0VZID0gX19kZXBlbmRlbmN5NF9fLkdVSURfS0VZOwotICAgICAgICB2YXIgbWV0YSA9
IF9fZGVwZW5kZW5jeTRfXy5tZXRhOwotICAgICAgICB2YXIgTUVUQV9LRVkgPSBfX2RlcGVuZGVu
Y3k0X18uTUVUQV9LRVk7Ci0gICAgICAgIHZhciBtYWtlQXJyYXkgPSBfX2RlcGVuZGVuY3k0X18u
bWFrZUFycmF5OwotICAgICAgICB2YXIgcmV3YXRjaCA9IF9fZGVwZW5kZW5jeTZfXy5yZXdhdGNo
OwotICAgICAgICB2YXIgZmluaXNoQ2hhaW5zID0gX19kZXBlbmRlbmN5N19fLmZpbmlzaENoYWlu
czsKLSAgICAgICAgdmFyIHNlbmRFdmVudCA9IF9fZGVwZW5kZW5jeThfXy5zZW5kRXZlbnQ7Ci0g
ICAgICAgIHZhciBJU19CSU5ESU5HID0gX19kZXBlbmRlbmN5OV9fLklTX0JJTkRJTkc7Ci0gICAg
ICAgIHZhciBNaXhpbiA9IF9fZGVwZW5kZW5jeTlfXy5NaXhpbjsKLSAgICAgICAgdmFyIHJlcXVp
cmVkID0gX19kZXBlbmRlbmN5OV9fLnJlcXVpcmVkOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9f
ZGVwZW5kZW5jeTEwX18uaW5kZXhPZjsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVu
ZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBwbGF0Zm9ybSA9IF9fZGVwZW5kZW5j
eTVfXy5wbGF0Zm9ybTsKLSAgICAgICAgdmFyIGtleXMgPSBfX2RlcGVuZGVuY3kxMl9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBBY3Rpb25IYW5kbGVyID0gX19kZXBlbmRlbmN5MTNfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3kxNF9fLmRl
ZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgQmluZGluZyA9IF9fZGVwZW5kZW5jeTE1X18uQmlu
ZGluZzsKLSAgICAgICAgdmFyIENvbXB1dGVkUHJvcGVydHkgPSBfX2RlcGVuZGVuY3kxNl9fLkNv
bXB1dGVkUHJvcGVydHk7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3kxN19fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBkZXN0cm95ID0gX19kZXBlbmRlbmN5Nl9fLmRlc3Ryb3k7Ci0K
LSAgICAgICAgdmFyIEsgPSBfX2RlcGVuZGVuY3kxX18uSzsKLSAgICAgICAgdmFyIG9fZGVmaW5l
UHJvcGVydHkgPSBwbGF0Zm9ybS5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIHNjaGVkdWxl
ID0gcnVuLnNjaGVkdWxlOwotICAgICAgICB2YXIgYXBwbHlNaXhpbiA9IE1peGluLl9hcHBseTsK
LSAgICAgICAgdmFyIGZpbmlzaFBhcnRpYWwgPSBNaXhpbi5maW5pc2hQYXJ0aWFsOwotICAgICAg
ICB2YXIgcmVvcGVuID0gTWl4aW4ucHJvdG90eXBlLnJlb3BlbjsKLSAgICAgICAgdmFyIE1BTkRB
VE9SWV9TRVRURVIgPSBFbWJlci5FTlYuTUFOREFUT1JZX1NFVFRFUjsKLSAgICAgICAgdmFyIGhh
c0NhY2hlZENvbXB1dGVkUHJvcGVydGllcyA9IGZhbHNlOwotCi0gICAgICAgIHZhciB1bmRlZmlu
ZWREZXNjcmlwdG9yID0gewotICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAg
ICAgICAgd3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAg
ICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgbnVs
bERlc2NyaXB0b3IgPSB7Ci0gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAg
ICAgICB3cml0YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAg
ICAgICAgICAgdmFsdWU6IG51bGwKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBtYWtl
Q3RvcigpIHsKLQotICAgICAgICAgICAgLy8gTm90ZTogYXZvaWQgYWNjZXNzaW5nIGFueSBwcm9w
ZXJ0aWVzIG9uIHRoZSBvYmplY3Qgc2luY2UgaXQgbWFrZXMgdGhlCi0gICAgICAgICAgICAvLyBt
ZXRob2QgYSBsb3QgZmFzdGVyLiBUaGlzIGlzIGdsdWUgY29kZSBzbyB3ZSB3YW50IGl0IHRvIGJl
IGFzIGZhc3QgYXMKLSAgICAgICAgICAgIC8vIHBvc3NpYmxlLgotCi0gICAgICAgICAgICB2YXIg
d2FzQXBwbGllZCA9IGZhbHNlLCBpbml0TWl4aW5zLCBpbml0UHJvcGVydGllczsKLQotICAgICAg
ICAgICAgdmFyIENsYXNzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3YXNB
cHBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIENsYXNzLnByb3RvKCk7IC8vIHByZXBhcmUg
cHJvdG90eXBlLi4uCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9fZGVmaW5l
UHJvcGVydHkodGhpcywgR1VJRF9LRVksIG51bGxEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAg
ICBvX2RlZmluZVByb3BlcnR5KHRoaXMsICdfX25leHRTdXBlcicsIHVuZGVmaW5lZERlc2NyaXB0
b3IpOwotICAgICAgICAgICAgICAgIHZhciBtID0gbWV0YSh0aGlzKSwgcHJvdG8gPSBtLnByb3Rv
OwotICAgICAgICAgICAgICAgIG0ucHJvdG8gPSB0aGlzOwotICAgICAgICAgICAgICAgIGlmIChp
bml0TWl4aW5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNhcHR1cmUgbG9jYWxseSBzbyB3
ZSBjYW4gY2xlYXIgdGhlIGNsb3NlZCBvdmVyIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAg
IHZhciBtaXhpbnMgPSBpbml0TWl4aW5zOwotICAgICAgICAgICAgICAgICAgICBpbml0TWl4aW5z
ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgYXBwbHkodGhpcywgdGhpcy5yZW9wZW4sIG1p
eGlucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpbml0UHJvcGVy
dGllcykgewotICAgICAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGxvY2FsbHkgc28gd2UgY2Fu
IGNsZWFyIHRoZSBjbG9zZWQgb3ZlciB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICB2YXIg
cHJvcHMgPSBpbml0UHJvcGVydGllczsKLSAgICAgICAgICAgICAgICAgICAgaW5pdFByb3BlcnRp
ZXMgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBjb25jYXRlbmF0ZWRQcm9wZXJ0
aWVzID0gdGhpcy5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gcHJvcHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHByb3BzW2ldOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIkVtYmVyLk9iamVjdC5jcmVhdGUgbm8gbG9uZ2Vy
IHN1cHBvcnRzIG1peGluZyBpbiBvdGhlciBkZWZpbml0aW9ucywgdXNlIGNyZWF0ZVdpdGhNaXhp
bnMgaW5zdGVhZC4iLCAhKHByb3BlcnRpZXMgaW5zdGFuY2VvZiBNaXhpbikpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgIT09ICdvYmplY3QnICYmIHBy
b3BlcnRpZXMgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFbWJlckVycm9yKCJFbWJlci5PYmplY3QuY3JlYXRlIG9ubHkgYWNjZXB0cyBvYmpl
Y3RzLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGtleU5hbWVzID0ga2V5cyhwcm9wZXJ0aWVzKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaiA9IDAsIGxsID0ga2V5TmFtZXMubGVuZ3RoOyBqIDwgbGw7IGorKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lID0ga2V5TmFtZXNbal07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmhhc093blByb3Bl
cnR5KGtleU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5TmFtZV07Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoSVNfQklORElORy50ZXN0KGtleU5hbWUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG0uYmluZGluZ3M7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmluZGluZ3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzID0gbS5iaW5kaW5ncyA9IHt9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtLmhhc093blByb3BlcnR5KCdi
aW5kaW5ncycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5n
cyA9IG0uYmluZGluZ3MgPSBvX2NyZWF0ZShtLmJpbmRpbmdzKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5n
c1trZXlOYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjID0gbS5kZXNjc1trZXlOYW1lXTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiRW1iZXIuT2JqZWN0LmNy
ZWF0ZSBubyBsb25nZXIgc3VwcG9ydHMgZGVmaW5pbmcgY29tcHV0ZWQgcHJvcGVydGllcy4gRGVm
aW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgdXNpbmcgZXh0ZW5kKCkgb3IgcmVvcGVuKCkgYmVmb3Jl
IGNhbGxpbmcgY3JlYXRlKCkuIiwgISh2YWx1ZSBpbnN0YW5jZW9mIENvbXB1dGVkUHJvcGVydHkp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIkVtYmVyLk9iamVj
dC5jcmVhdGUgbm8gbG9uZ2VyIHN1cHBvcnRzIGRlZmluaW5nIG1ldGhvZHMgdGhhdCBjYWxsIF9z
dXBlci4iLCAhKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS50b1N0cmluZygp
LmluZGV4T2YoJy5fc3VwZXInKSAhPT0gLTEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFbWJlci5hc3NlcnQoImBhY3Rpb25zYCBtdXN0IGJlIHByb3ZpZGVkIGF0IGV4dGVuZCB0aW1l
LCBub3QgYXQgY3JlYXRlICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lLCB3
aGVuIEVtYmVyLkFjdGlvbkhhbmRsZXIgaXMgdXNlZCAoaS5lLiB2aWV3cywgIiArCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNvbnRyb2xsZXJzICYgcm91dGVzKS4iLCAhKChrZXlOYW1l
ID09PSAnYWN0aW9ucycpICYmIEFjdGlvbkhhbmRsZXIuZGV0ZWN0KHRoaXMpKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uY2F0ZW5hdGVkUHJvcGVydGllcyAmJiBpbmRl
eE9mKGNvbmNhdGVuYXRlZFByb3BlcnRpZXMsIGtleU5hbWUpID49IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IHRoaXNba2V5TmFtZV07Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBiYXNl
VmFsdWUuY29uY2F0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBiYXNlVmFsdWUuY29uY2F0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBtYWtlQXJyYXkoYmFzZVZhbHVlKS5jb25jYXQodmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBtYWtlQXJyYXkodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlc2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5z
ZXQodGhpcywga2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5z
ZXRVbmtub3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgIShrZXlOYW1lIGluIHRoaXMpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVua25vd25Qcm9w
ZXJ0eShrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoTUFOREFUT1JZX1NFVFRFUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywga2V5TmFtZSwgbnVsbCwgdmFsdWUpOyAvLyBz
ZXR1cCBtYW5kYXRvcnkgc2V0dGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2tleU5hbWVd
ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluaXNoUGFy
dGlhbCh0aGlzLCBtKTsKLSAgICAgICAgICAgICAgICBhcHBseSh0aGlzLCB0aGlzLmluaXQsIGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgbS5wcm90byA9IHByb3RvOwotICAgICAgICAgICAg
ICAgIGZpbmlzaENoYWlucyh0aGlzKTsKLSAgICAgICAgICAgICAgICBzZW5kRXZlbnQodGhpcywg
ImluaXQiKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIENsYXNzLnRvU3RyaW5nID0g
TWl4aW4ucHJvdG90eXBlLnRvU3RyaW5nOwotICAgICAgICAgICAgQ2xhc3Mud2lsbFJlb3BlbiA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh3YXNBcHBsaWVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENsYXNzLlByb3RvdHlwZU1peGluID0gTWl4aW4uY3JlYXRlKENsYXNzLlBy
b3RvdHlwZU1peGluKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3YXNB
cHBsaWVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgQ2xhc3MuX2luaXRN
aXhpbnMgPSBmdW5jdGlvbihhcmdzKSB7Ci0gICAgICAgICAgICAgICAgaW5pdE1peGlucyA9IGFy
Z3M7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgQ2xhc3MuX2luaXRQcm9wZXJ0aWVzID0g
ZnVuY3Rpb24oYXJncykgewotICAgICAgICAgICAgICAgIGluaXRQcm9wZXJ0aWVzID0gYXJnczsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIENsYXNzLnByb3RvID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHN1cGVyY2xhc3MgPSBDbGFzcy5zdXBlcmNsYXNzOwotICAg
ICAgICAgICAgICAgIGlmIChzdXBlcmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVy
Y2xhc3MucHJvdG8oKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IXdhc0FwcGxpZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgd2FzQXBwbGllZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIENsYXNzLlByb3RvdHlwZU1peGluLmFwcGx5UGFydGlhbChDbGFz
cy5wcm90b3R5cGUpOwotICAgICAgICAgICAgICAgICAgICByZXdhdGNoKENsYXNzLnByb3RvdHlw
ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJv
dG90eXBlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgcmV0dXJuIENsYXNzOwotCi0g
ICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQGNsYXNzIENvcmVPYmplY3QK
LSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgKi8KLSAgICAgICAg
dmFyIENvcmVPYmplY3QgPSBtYWtlQ3RvcigpOwotICAgICAgICBDb3JlT2JqZWN0LnRvU3RyaW5n
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gIkVtYmVyLkNvcmVPYmplY3QiOwot
ICAgICAgICB9OwotCi0gICAgICAgIENvcmVPYmplY3QuUHJvdG90eXBlTWl4aW4gPSBNaXhpbi5j
cmVhdGUoewotICAgICAgICAgICAgcmVvcGVuOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICBhcHBseU1peGluKHRoaXMsIGFyZ3VtZW50cywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQW4gb3ZlcnJpZGFibGUgbWV0aG9kIGNhbGxlZCB3aGVuIG9iamVjdHMgYXJlIGlu
c3RhbnRpYXRlZC4gQnkgZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgZG9lcyBub3RoaW5n
IHVubGVzcyBpdCBpcyBvdmVycmlkZGVuIGR1cmluZyBjbGFzcyBkZWZpbml0aW9uLgotCi0gICAg
ICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhbGVydCgnTmFtZSBpcyAnICsgdGhpcy5nZXQoJ25hbWUnKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RldmUgPSBBcHAuUGVyc29uLmNyZWF0ZSh7Ci0gICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogIlN0ZXZlIgotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyBhbGVydHMgJ05hbWUgaXMgU3RldmUnLgotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBOT1RFOiBJZiB5b3UgZG8gb3ZlcnJpZGUg
YGluaXRgIGZvciBhIGZyYW1ld29yayBjbGFzcyBsaWtlIGBFbWJlci5WaWV3YCBvcgotICAgICAg
ICAgICAgICAgICAgICBgRW1iZXIuQXJyYXlDb250cm9sbGVyYCwgYmUgc3VyZSB0byBjYWxsIGB0
aGlzLl9zdXBlcigpYCBpbiB5b3VyCi0gICAgICAgICAgICAgICAgICAgIGBpbml0YCBkZWNsYXJh
dGlvbiEgSWYgeW91IGRvbid0LCBFbWJlciBtYXkgbm90IGhhdmUgYW4gb3Bwb3J0dW5pdHkgdG8K
LSAgICAgICAgICAgICAgICAgICAgZG8gaW1wb3J0YW50IHNldHVwIHdvcmssIGFuZCB5b3UnbGwg
c2VlIHN0cmFuZ2UgYmVoYXZpb3IgaW4geW91cgotICAgICAgICAgICAgICAgICAgICBhcHBsaWNh
dGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGluaXQKLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHt9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgcHJvcGVydGllcyB0aGF0IHdpbGwg
YmUgY29uY2F0ZW5hdGVkIGZyb20gdGhlIHN1cGVyY2xhc3MKLSAgICAgICAgICAgICAgICAgICAg
KGluc3RlYWQgb2Ygb3ZlcnJpZGRlbikuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVs
dCwgd2hlbiB5b3UgZXh0ZW5kIGFuIEVtYmVyIGNsYXNzIGEgcHJvcGVydHkgZGVmaW5lZCBpbgot
ICAgICAgICAgICAgICAgICAgICB0aGUgc3ViY2xhc3Mgb3ZlcnJpZGVzIGEgcHJvcGVydHkgd2l0
aCB0aGUgc2FtZSBuYW1lIHRoYXQgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBpbiB0
aGUgc3VwZXJjbGFzcy4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQgaXMg
cHJlZmVyYWJsZQotICAgICAgICAgICAgICAgICAgICB0byBidWlsZCB1cCBhIHByb3BlcnR5J3Mg
dmFsdWUgYnkgY29tYmluaW5nIHRoZSBzdXBlcmNsYXNzJyBwcm9wZXJ0eQotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSB3aXRoIHRoZSBzdWJjbGFzcycgdmFsdWUuIEFuIGV4YW1wbGUgb2YgdGhp
cyBpbiB1c2Ugd2l0aGluIEVtYmVyCi0gICAgICAgICAgICAgICAgICAgIGlzIHRoZSBgY2xhc3NO
YW1lc2AgcHJvcGVydHkgb2YgYEVtYmVyLlZpZXdgLgotCi0gICAgICAgICAgICAgICAgICAgIEhl
cmUgaXMgc29tZSBzYW1wbGUgY29kZSBzaG93aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBj
b25jYXRlbmF0ZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgYW5kIGEgbm9ybWFsIG9u
ZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAg
ICAgIEFwcC5CYXJWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgICAg
ICAgIHNvbWVOb25Db25jYXRlbmF0ZWRQcm9wZXJ0eTogWydiYXInXSwKLSAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc05hbWVzOiBbJ2JhciddCi0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIEFwcC5Gb29CYXJWaWV3ID0gQXBwLkJhclZpZXcuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBzb21lTm9uQ29uY2F0ZW5hdGVkUHJvcGVydHk6IFsnZm9v
J10sCi0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lczogWydmb28nXQotICAgICAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgZm9vQmFyVmlldyA9IEFw
cC5Gb29CYXJWaWV3LmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb29CYXJWaWV3Lmdl
dCgnc29tZU5vbkNvbmNhdGVuYXRlZFByb3BlcnR5Jyk7IC8vIFsnZm9vJ10KLSAgICAgICAgICAg
ICAgICAgICAgZm9vQmFyVmlldy5nZXQoJ2NsYXNzTmFtZXMnKTsgLy8gWydlbWJlci12aWV3Jywg
J2JhcicsICdmb28nXQotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAg
ICAgICBUaGlzIGJlaGF2aW9yIGV4dGVuZHMgdG8gb2JqZWN0IGNyZWF0aW9uIGFzIHdlbGwuIENv
bnRpbnVpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIGFib3ZlIGV4YW1wbGU6Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgdmll
dyA9IEFwcC5Gb29CYXJWaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgc29tZU5v
bkNvbmNhdGVuYXRlZFByb3BlcnR5OiBbJ2JheiddLAotICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzTmFtZXM6IFsnYmF6J10KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAg
ICAgICAgdmlldy5nZXQoJ3NvbWVOb25Db25jYXRlbmF0ZWRQcm9wZXJ0eScpOyAvLyBbJ2Jheidd
Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcuZ2V0KCdjbGFzc05hbWVzJyk7IC8vIFsnZW1iZXIt
dmlldycsICdiYXInLCAnZm9vJywgJ2JheiddCi0gICAgICAgICAgICAgICAgICAgIGBgYAotICAg
ICAgICAgICAgICAgICAgICBBZGRpbmcgYSBzaW5nbGUgcHJvcGVydHkgdGhhdCBpcyBub3QgYW4g
YXJyYXkgd2lsbCBqdXN0IGFkZCBpdCBpbiB0aGUgYXJyYXk6Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IEFwcC5Gb29C
YXJWaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lczogJ2JheicK
LSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgdmlldy5nZXQoJ2Ns
YXNzTmFtZXMnKTsgLy8gWydlbWJlci12aWV3JywgJ2JhcicsICdmb28nLCAnYmF6J10KLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGBjb25j
YXRlbmF0ZWRQcm9wZXJ0aWVzYCBwcm9wZXJ0eSwgd2UgY2FuIHRlbGwgdG8gRW1iZXIgdGhhdCBt
aXgKLSAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMuCi0K
LSAgICAgICAgICAgICAgICAgICAgSW4gYEVtYmVyLlZpZXdgIHRoZSBgY2xhc3NOYW1lQmluZGlu
Z3NgIGFuZCBgYXR0cmlidXRlQmluZGluZ3NgIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAg
ICAgYXJlIGFsc28gY29uY2F0ZW5hdGVkLCBpbiBhZGRpdGlvbiB0byBgY2xhc3NOYW1lc2AuCi0K
LSAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBmb3IgeW91IHRv
IHVzZSB0aHJvdWdob3V0IHRoZSBFbWJlciBvYmplY3QgbW9kZWwsCi0gICAgICAgICAgICAgICAg
ICAgIGFsdGhvdWdoIHR5cGljYWwgYXBwIGRldmVsb3BlcnMgYXJlIGxpa2VseSB0byB1c2UgaXQg
aW5mcmVxdWVudGx5LiBTaW5jZQotICAgICAgICAgICAgICAgICAgICBpdCBjaGFuZ2VzIGV4cGVj
dGF0aW9ucyBhYm91dCBiZWhhdmlvciBvZiBwcm9wZXJ0aWVzLCB5b3Ugc2hvdWxkIHByb3Blcmx5
Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50IGl0cyB1c2FnZSBpbiBlYWNoIGluZGl2aWR1
YWwgY29uY2F0ZW5hdGVkIHByb3BlcnR5ICh0byBub3QKLSAgICAgICAgICAgICAgICAgICAgbWlz
bGVhZCB5b3VyIHVzZXJzIHRvIHRoaW5rIHRoZXkgY2FuIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBp
biBhIHN1YmNsYXNzKS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29uY2F0ZW5h
dGVkUHJvcGVydGllcwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAgICAg
ICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIERlc3Ryb3llZCBvYmplY3QgcHJvcGVydHkgZmxhZy4KLQotICAgICAg
ICAgICAgICAgICAgICBpZiB0aGlzIHByb3BlcnR5IGlzIGB0cnVlYCB0aGUgb2JzZXJ2ZXJzIGFu
ZCBiaW5kaW5ncyB3ZXJlIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBieSB0
aGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhlIGBkZXN0cm95KClgIG1ldGhvZC4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgaXNEZXN0cm95ZWQKLSAgICAgICAgICAgICAgICAgICAgQGRl
ZmF1bHQgZmFsc2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpc0Rlc3Ryb3ll
ZDogZmFsc2UsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEZXN0cnVj
dGlvbiBzY2hlZHVsZWQgZmxhZy4gVGhlIGBkZXN0cm95KClgIG1ldGhvZCBoYXMgYmVlbiBjYWxs
ZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBzdGF5cyBpbnRhY3QgdW50aWwg
dGhlIGVuZCBvZiB0aGUgcnVuIGxvb3AgYXQgd2hpY2ggcG9pbnQKLSAgICAgICAgICAgICAgICAg
ICAgdGhlIGBpc0Rlc3Ryb3llZGAgZmxhZyBpcyBzZXQuCi0KLSAgICAgICAgICAgICAgICAgICAg
QHByb3BlcnR5IGlzRGVzdHJveWluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBmYWxz
ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlzRGVzdHJveWluZzogZmFsc2Us
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEZXN0cm95cyBhbiBvYmpl
Y3QgYnkgc2V0dGluZyB0aGUgYGlzRGVzdHJveWVkYCBmbGFnIGFuZCByZW1vdmluZyBpdHMKLSAg
ICAgICAgICAgICAgICAgICAgbWV0YWRhdGEsIHdoaWNoIGVmZmVjdGl2ZWx5IGRlc3Ryb3lzIG9i
c2VydmVycyBhbmQgYmluZGluZ3MuCi0KLSAgICAgICAgICAgICAgICAgICAgSWYgeW91IHRyeSB0
byBzZXQgYSBwcm9wZXJ0eSBvbiBhIGRlc3Ryb3llZCBvYmplY3QsIGFuIGV4Y2VwdGlvbiB3aWxs
IGJlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KLQotICAgICAgICAgICAgICAgICAgICBO
b3RlIHRoYXQgZGVzdHJ1Y3Rpb24gaXMgc2NoZWR1bGVkIGZvciB0aGUgZW5kIG9mIHRoZSBydW4g
bG9vcCBhbmQgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAgICAgaGFwcGVuIGltbWVkaWF0ZWx5
LiAgSXQgd2lsbCBzZXQgYW4gaXNEZXN0cm95aW5nIGZsYWcgaW1tZWRpYXRlbHkuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1
cm4ge0VtYmVyLk9iamVjdH0gcmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rl
c3Ryb3lpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB0aGlzLmlzRGVzdHJveWluZyA9IHRydWU7Ci0KLSAgICAgICAg
ICAgICAgICBzY2hlZHVsZSgnYWN0aW9ucycsIHRoaXMsIHRoaXMud2lsbERlc3Ryb3kpOwotICAg
ICAgICAgICAgICAgIHNjaGVkdWxlKCdkZXN0cm95JywgdGhpcywgdGhpcy5fc2NoZWR1bGVkRGVz
dHJveSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgdG8gaW1wbGVtZW50
IHRlYXJkb3duLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgd2lsbERlc3Ryb3kKLSAg
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2lsbERlc3Ryb3k6IEssCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJbnZva2VkIGJ5IHRoZSBydW4gbG9vcCB0
byBhY3R1YWxseSBkZXN0cm95IHRoZSBvYmplY3QuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAg
ICAgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gYnkgdGhlIGBkZXN0cm95YCBtZXRob2QuCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBf
c2NoZWR1bGVkRGVzdHJveQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9zY2hl
ZHVsZWREZXN0cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rl
c3Ryb3llZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGRlc3Ryb3kodGhpcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5p
c0Rlc3Ryb3llZCA9IHRydWU7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBiaW5kOiBm
dW5jdGlvbih0bywgZnJvbSkgewotICAgICAgICAgICAgICAgIGlmICghKGZyb20gaW5zdGFuY2Vv
ZiBCaW5kaW5nKSkgewotICAgICAgICAgICAgICAgICAgICBmcm9tID0gQmluZGluZy5mcm9tKGZy
b20pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcm9tLnRvKHRvKS5jb25u
ZWN0KHRoaXMpOwotICAgICAgICAgICAgICAgIHJldHVybiBmcm9tOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYSBzdHJpbmcg
cmVwcmVzZW50YXRpb24gd2hpY2ggYXR0ZW1wdHMgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9u
Ci0gICAgICAgICAgICAgICAgICAgIHRoYW4gSmF2YXNjcmlwdCdzIGB0b1N0cmluZ2AgdHlwaWNh
bGx5IGRvZXMsIGluIGEgZ2VuZXJpYyB3YXkgZm9yIGFsbCBFbWJlcgotICAgICAgICAgICAgICAg
ICAgICBvYmplY3RzLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLlBlcnNvbiA9IEVtLk9iamVjdC5leHRlbmQoKQotICAgICAgICAg
ICAgICAgICAgICBwZXJzb24gPSBBcHAuUGVyc29uLmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAg
ICAgIHBlcnNvbi50b1N0cmluZygpIC8vPT4gIjxBcHAuUGVyc29uOmVtYmVyMTAyND4iCi0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSBvYmplY3Qn
cyBjbGFzcyBpcyBub3QgZGVmaW5lZCBvbiBhbiBFbWJlciBuYW1lc3BhY2UsIGl0IHdpbGwKLSAg
ICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgaXQgaXMgYSBzdWJjbGFzcyBvZiB0aGUgcmVnaXN0
ZXJlZCBzdXBlcmNsYXNzOgotCi0gICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBTdHVkZW50ID0gQXBwLlBlcnNvbi5leHRlbmQoKQotICAgICAgICAg
ICAgICAgICAgICBzdHVkZW50ID0gU3R1ZGVudC5jcmVhdGUoKQotICAgICAgICAgICAgICAgICAg
ICBzdHVkZW50LnRvU3RyaW5nKCkgLy89PiAiPChzdWJjbGFzcyBvZiBBcHAuUGVyc29uKTplbWJl
cjEwMjU+IgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJ
ZiB0aGUgbWV0aG9kIGB0b1N0cmluZ0V4dGVuc2lvbmAgaXMgZGVmaW5lZCwgaXRzIHJldHVybiB2
YWx1ZSB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBBcHAuVGVhY2hlciA9IEFwcC5QZXJzb24uZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAg
ICB0b1N0cmluZ0V4dGVuc2lvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXQoJ2Z1bGxOYW1lJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgdGVhY2hlciA9IEFw
cC5UZWFjaGVyLmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHRlYWNoZXIudG9TdHJpbmco
KTsgLy89PiAiPEFwcC5UZWFjaGVyOmVtYmVyMTAyNjpUb20gRGFsZT4iCi0gICAgICAgICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgdG9TdHJpbmcKLSAgICAg
ICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24KLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJp
bmcoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGhhc1RvU3RyaW5nRXh0ZW5zaW9uID0gdHlwZW9m
IHRoaXMudG9TdHJpbmdFeHRlbnNpb24gPT09ICdmdW5jdGlvbicsCi0gICAgICAgICAgICAgICAg
ZXh0ZW5zaW9uID0gaGFzVG9TdHJpbmdFeHRlbnNpb24gPyAiOiIgKyB0aGlzLnRvU3RyaW5nRXh0
ZW5zaW9uKCkgOiAnJzsKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0gJzwnICsgdGhpcy5jb25z
dHJ1Y3Rvci50b1N0cmluZygpICsgJzonICsgZ3VpZEZvcih0aGlzKSArIGV4dGVuc2lvbiArICc+
JzsKLSAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gbWFrZVRvU3RyaW5nKHJldCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgQ29yZU9iamVjdC5Qcm90b3R5cGVNaXhpbi5vd25lckNvbnN0cnVjdG9yID0gQ29y
ZU9iamVjdDsKLQotICAgICAgICBmdW5jdGlvbiBtYWtlVG9TdHJpbmcocmV0KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRW1iZXIuY29uZmlnLm92ZXJy
aWRlUHJvdG90eXBlTWl4aW4pIHsKLSAgICAgICAgICAgIEVtYmVyLmNvbmZpZy5vdmVycmlkZVBy
b3RvdHlwZU1peGluKENvcmVPYmplY3QuUHJvdG90eXBlTWl4aW4pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29yZU9iamVjdC5fX3N1cGVyX18gPSBudWxsOwotCi0gICAgICAgIHZhciBDbGFzc01p
eGluID0gTWl4aW4uY3JlYXRlKHsKLQotICAgICAgICAgICAgQ2xhc3NNaXhpbjogcmVxdWlyZWQo
KSwKLQotICAgICAgICAgICAgUHJvdG90eXBlTWl4aW46IHJlcXVpcmVkKCksCi0KLSAgICAgICAg
ICAgIGlzQ2xhc3M6IHRydWUsCi0KLSAgICAgICAgICAgIGlzTWV0aG9kOiBmYWxzZSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBuZXcgc3ViY2xhc3Mu
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAg
ICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAg
ICAgc2F5OiBmdW5jdGlvbih0aGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQo
dGhpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGRl
ZmluZXMgYSBuZXcgc3ViY2xhc3Mgb2YgRW1iZXIuT2JqZWN0OiBgQXBwLlBlcnNvbmAuIEl0IGNv
bnRhaW5zIG9uZSBtZXRob2Q6IGBzYXkoKWAuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNh
biBhbHNvIGNyZWF0ZSBhIHN1YmNsYXNzIGZyb20gYW55IGV4aXN0aW5nIGNsYXNzIGJ5IGNhbGxp
bmcgaXRzIGBleHRlbmQoKWAgIG1ldGhvZC4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHRv
IGNyZWF0ZSBhIHN1YmNsYXNzIG9mIEVtYmVyJ3MgYnVpbHQtaW4gYEVtYmVyLlZpZXdgIGNsYXNz
OgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgQXBwLlBlcnNvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAg
ICAgICAgdGFnTmFtZTogJ2xpJywKLSAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVCaW5k
aW5nczogWydpc0FkbWluaXN0cmF0b3InXQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgV2hlbiBkZWZpbmluZyBh
IHN1YmNsYXNzLCB5b3UgY2FuIG92ZXJyaWRlIG1ldGhvZHMgYnV0IHN0aWxsIGFjY2VzcyB0aGUg
aW1wbGVtZW50YXRpb24gb2YgeW91ciBwYXJlbnQgY2xhc3MgYnkgY2FsbGluZyB0aGUgc3BlY2lh
bCBgX3N1cGVyKClgIG1ldGhvZDoKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBzYXk6IGZ1bmN0aW9uKHRoaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0KCduYW1lJyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhbGVydChuYW1lICsgJyBzYXlzOiAnICsgdGhpbmcpOwotICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgQXBwLlNvbGRpZXIgPSBBcHAuUGVyc29uLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAg
ICAgc2F5OiBmdW5jdGlvbih0aGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
c3VwZXIodGhpbmcgKyAiLCBzaXIhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICBtYXJjaDogZnVuY3Rpb24obnVtYmVyT2ZIb3VycykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYWxlcnQodGhpcy5nZXQoJ25hbWUnKSArICcgbWFyY2hlcyBmb3Ig
JyArIG51bWJlck9mSG91cnMgKyAnIGhvdXJzLicpCi0gICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgeWVodWRh
ID0gQXBwLlNvbGRpZXIuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAiWWVo
dWRhIEthdHoiCi0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAg
IHllaHVkYS5zYXkoIlllcyIpOyAgLy8gYWxlcnRzICJZZWh1ZGEgS2F0eiBzYXlzOiBZZXMsIHNp
ciEiCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBg
Y3JlYXRlKClgIG9uIGxpbmUgIzE3IGNyZWF0ZXMgYW4gKmluc3RhbmNlKiBvZiB0aGUgYEFwcC5T
b2xkaWVyYCBjbGFzcy4gVGhlIGBleHRlbmQoKWAgb24gbGluZSAjOCBjcmVhdGVzIGEgKnN1YmNs
YXNzKiBvZiBgQXBwLlBlcnNvbmAuIEFueSBpbnN0YW5jZSBvZiB0aGUgYEFwcC5QZXJzb25gIGNs
YXNzIHdpbGwgKm5vdCogaGF2ZSB0aGUgYG1hcmNoKClgIG1ldGhvZC4KLQotICAgICAgICAgICAg
ICAgICAgICBZb3UgY2FuIGFsc28gcGFzcyBgTWl4aW5gIGNsYXNzZXMgdG8gYWRkIGFkZGl0aW9u
YWwgcHJvcGVydGllcyB0byB0aGUgc3ViY2xhc3MuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0
LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgc2F5OiBmdW5jdGlvbih0aGluZykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQodGhpcy5nZXQoJ25hbWUnKSArICcgc2F5czog
JyArIHRoaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIEFwcC5TaW5naW5nTWl4aW4gPSBNaXhpbi5jcmVh
dGUoewotICAgICAgICAgICAgICAgICAgICAgIHNpbmc6IGZ1bmN0aW9uKHRoaW5nKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMuZ2V0KCduYW1lJykgKyAnIHNpbmdzOiBsYSBs
YSBsYSAnICsgdGhpbmcpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQXBwLkJyb2Fkd2F5U3RhciA9IEFwcC5Q
ZXJzb24uZXh0ZW5kKEFwcC5TaW5naW5nTWl4aW4sIHsKLSAgICAgICAgICAgICAgICAgICAgICBk
YW5jZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCh0aGlzLmdl
dCgnbmFtZScpICsgJyBkYW5jZXM6IHRhcCB0YXAgdGFwIHRhcCAnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBUaGUgYEFwcC5Ccm9hZHdheVN0YXJgIGNsYXNzIGNv
bnRhaW5zIHRocmVlIG1ldGhvZHM6IGBzYXkoKWAsIGBzaW5nKClgLCBhbmQgYGRhbmNlKClgLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgZXh0ZW5kCi0gICAgICAgICAgICAgICAgICAg
IEBzdGF0aWMKLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge01peGlufSBbbWl4aW5zXSog
T25lIG9yIG1vcmUgTWl4aW4gY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09i
amVjdH0gW2FyZ3VtZW50c10qIE9iamVjdCBjb250YWluaW5nIHZhbHVlcyB0byB1c2Ugd2l0aGlu
IHRoZSBuZXcgY2xhc3MKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBleHRlbmQ6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBDbGFzcyA9IG1ha2VDdG9yKCksIHBy
b3RvOwotICAgICAgICAgICAgICAgIENsYXNzLkNsYXNzTWl4aW4gPSBNaXhpbi5jcmVhdGUodGhp
cy5DbGFzc01peGluKTsKLSAgICAgICAgICAgICAgICBDbGFzcy5Qcm90b3R5cGVNaXhpbiA9IE1p
eGluLmNyZWF0ZSh0aGlzLlByb3RvdHlwZU1peGluKTsKLQotICAgICAgICAgICAgICAgIENsYXNz
LkNsYXNzTWl4aW4ub3duZXJDb25zdHJ1Y3RvciA9IENsYXNzOwotICAgICAgICAgICAgICAgIENs
YXNzLlByb3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0b3IgPSBDbGFzczsKLQotICAgICAgICAg
ICAgICAgIHJlb3Blbi5hcHBseShDbGFzcy5Qcm90b3R5cGVNaXhpbiwgYXJndW1lbnRzKTsKLQot
ICAgICAgICAgICAgICAgIENsYXNzLnN1cGVyY2xhc3MgPSB0aGlzOwotICAgICAgICAgICAgICAg
IENsYXNzLl9fc3VwZXJfXyA9IHRoaXMucHJvdG90eXBlOwotCi0gICAgICAgICAgICAgICAgcHJv
dG8gPSBDbGFzcy5wcm90b3R5cGUgPSBvX2NyZWF0ZSh0aGlzLnByb3RvdHlwZSk7Ci0gICAgICAg
ICAgICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDbGFzczsKLSAgICAgICAgICAgICAgICBnZW5l
cmF0ZUd1aWQocHJvdG8pOwotICAgICAgICAgICAgICAgIG1ldGEocHJvdG8pLnByb3RvID0gcHJv
dG87IC8vIHRoaXMgd2lsbCBkaXNhYmxlIG9ic2VydmVycyBvbiBwcm90b3R5cGUKLQotICAgICAg
ICAgICAgICAgIENsYXNzLkNsYXNzTWl4aW4uYXBwbHkoQ2xhc3MpOwotICAgICAgICAgICAgICAg
IHJldHVybiBDbGFzczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIGRvaW5nIGBleHRlbmQoYXJndW1lbnRzKS5jcmVh
dGUoKWAuCi0gICAgICAgICAgICAgICAgICAgIElmIHBvc3NpYmxlIHVzZSB0aGUgbm9ybWFsIGBj
cmVhdGVgIG1ldGhvZCBpbnN0ZWFkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY3Jl
YXRlV2l0aE1peGlucwotICAgICAgICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSBbYXJndW1lbnRzXSoKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBjcmVhdGVXaXRoTWl4aW5zOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIg
QyA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRNaXhpbnMoYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDKCk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhbiBpbnN0
YW5jZSBvZiBhIGNsYXNzLiBBY2NlcHRzIGVpdGhlciBubyBhcmd1bWVudHMsIG9yIGFuIG9iamVj
dAotICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHZhbHVlcyB0byBpbml0aWFsaXplIHRo
ZSBuZXdseSBpbnN0YW50aWF0ZWQgb2JqZWN0IHdpdGguCi0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29uID0gRW1iZXIuT2Jq
ZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgaGVsbG9Xb3JsZDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiSGksIG15IG5hbWUgaXMgIiArIHRo
aXMuZ2V0KCduYW1lJykpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHRvbSA9IEFwcC5QZXJzb24uY3Jl
YXRlKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVG9tIERhbGUnCi0gICAgICAgICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHRvbS5oZWxsb1dvcmxkKCk7IC8v
IGFsZXJ0cyAiSGksIG15IG5hbWUgaXMgVG9tIERhbGUiLgotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBgY3JlYXRlYCB3aWxsIGNhbGwgdGhlIGBpbml0YCBm
dW5jdGlvbiBpZiBkZWZpbmVkIGR1cmluZwotICAgICAgICAgICAgICAgICAgICBgRW1iZXIuQW55
T2JqZWN0LmV4dGVuZGAKLQotICAgICAgICAgICAgICAgICAgICBJZiBubyBhcmd1bWVudHMgYXJl
IHBhc3NlZCB0byBgY3JlYXRlYCwgaXQgd2lsbCBub3Qgc2V0IHZhbHVlcyB0byB0aGUgbmV3Ci0g
ICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIGR1cmluZyBpbml0aWFsaXphdGlvbjoKLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHZhciBu
b05hbWUgPSBBcHAuUGVyc29uLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBub05hbWUu
aGVsbG9Xb3JsZCgpOyAvLyBhbGVydHMgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIE5PVEU6IEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB5
b3UgY2Fubm90IGRlY2xhcmUgbWV0aG9kcyBvciBjb21wdXRlZAotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0aWVzIGR1cmluZyBgY3JlYXRlYC4gWW91IHNob3VsZCBpbnN0ZWFkIGRlY2xhcmUg
bWV0aG9kcyBhbmQgY29tcHV0ZWQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyB3aGVu
IHVzaW5nIGBleHRlbmRgIG9yIHVzZSB0aGUgYGNyZWF0ZVdpdGhNaXhpbnNgIHNob3J0aGFuZC4K
LQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNyZWF0ZQotICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBbYXJndW1lbnRzXSoKLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHZhciBDID0gdGhpczsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdFByb3BlcnRpZXMoYXJn
dW1lbnRzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBD
KCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQXVnbWVudHMgYSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSB3aXRoIGFkZGl0aW9uYWwKLSAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBhbmQgZnVuY3Rpb25zOgotCi0gICAgICAgICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgTXlPYmplY3QgPSBF
bWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYW4gb2Jq
ZWN0JwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBvID0g
TXlPYmplY3QuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG8uZ2V0KCduYW1lJyk7IC8v
ICdhbiBvYmplY3QnCi0KLSAgICAgICAgICAgICAgICAgICAgTXlPYmplY3QucmVvcGVuKHsKLSAg
ICAgICAgICAgICAgICAgICAgICBzYXk6IGZ1bmN0aW9uKG1zZyl7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZyhtc2cpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSkKLQotICAgICAgICAgICAgICAgICAgICBvMiA9IE15T2JqZWN0LmNy
ZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBvMi5zYXkoImhlbGxvIik7IC8vIGxvZ3MgImhl
bGxvIgotCi0gICAgICAgICAgICAgICAgICAgIG8uc2F5KCJnb29kYnllIik7IC8vIGxvZ3MgImdv
b2RieWUiCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFRv
IGFkZCBmdW5jdGlvbnMgYW5kIHByb3BlcnRpZXMgdG8gdGhlIGNvbnN0cnVjdG9yIGl0c2VsZiwK
LSAgICAgICAgICAgICAgICAgICAgc2VlIGByZW9wZW5DbGFzc2AKLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIHJlb3BlbgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJl
b3BlbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy53aWxsUmVvcGVuKCk7Ci0g
ICAgICAgICAgICAgICAgYXBwbHkodGhpcy5Qcm90b3R5cGVNaXhpbiwgcmVvcGVuLCBhcmd1bWVu
dHMpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEF1Z21lbnRzIGEgY29uc3RydWN0b3In
cyBvd24gcHJvcGVydGllcyBhbmQgZnVuY3Rpb25zOgotCi0gICAgICAgICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgTXlPYmplY3QgPSBFbWJlci5PYmplY3Qu
ZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYW4gb2JqZWN0JwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICBNeU9iamVjdC5yZW9wZW5D
bGFzcyh7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FuQnVpbGQ6IGZhbHNlCi0gICAgICAgICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIE15T2JqZWN0LmNhbkJ1aWxkOyAv
LyBmYWxzZQotICAgICAgICAgICAgICAgICAgICBvID0gTXlPYmplY3QuY3JlYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRz
LCB0aGlzIGNyZWF0ZXMgc3RhdGljIHByb3BlcnRpZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIGNs
YXNzLiBUaGVzZSBhcmUgb25seSBhdmFpbGFibGUgb24gdGhlIGNsYXNzCi0gICAgICAgICAgICAg
ICAgICAgIGFuZCBub3Qgb24gYW55IGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuCi0KLSAgICAgICAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29u
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgbmFtZSA6ICIi
LAotICAgICAgICAgICAgICAgICAgICAgIHNheUhlbGxvIDogZnVuY3Rpb24oKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFsZXJ0KCJIZWxsby4gTXkgbmFtZSBpcyAiICsgdGhpcy5nZXQoJ25h
bWUnKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICAgICAgICBBcHAuUGVyc29uLnJlb3BlbkNsYXNzKHsKLSAgICAgICAg
ICAgICAgICAgICAgICBzcGVjaWVzIDogIkhvbW8gc2FwaWVucyIsCi0gICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlUGVyc29uOiBmdW5jdGlvbihuZXdQZXJzb25zTmFtZSl7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQXBwLlBlcnNvbi5jcmVhdGUoewotICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lOm5ld1BlcnNvbnNOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIHZhciB0b20gPSBBcHAuUGVyc29uLmNyZWF0ZSh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA6ICJUb20gRGFsZSIKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB5ZWh1ZGEgPSBBcHAuUGVyc29uLmNyZWF0ZVBlcnNv
bigiWWVodWRhIEthdHoiKTsKLQotICAgICAgICAgICAgICAgICAgICB0b20uc2F5SGVsbG8oKTsg
Ly8gIkhlbGxvLiBNeSBuYW1lIGlzIFRvbSBEYWxlIgotICAgICAgICAgICAgICAgICAgICB5ZWh1
ZGEuc2F5SGVsbG8oKTsgLy8gIkhlbGxvLiBNeSBuYW1lIGlzIFllaHVkYSBLYXR6IgotICAgICAg
ICAgICAgICAgICAgICBhbGVydChBcHAuUGVyc29uLnNwZWNpZXMpOyAvLyAiSG9tbyBzYXBpZW5z
IgotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRo
YXQgYHNwZWNpZXNgIGFuZCBgY3JlYXRlUGVyc29uYCBhcmUgKm5vdCogdmFsaWQgb24gdGhlIGB0
b21gIGFuZCBgeWVodWRhYAotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuIFRoZXkgYXJl
IG9ubHkgdmFsaWQgb24gYEFwcC5QZXJzb25gLgotCi0gICAgICAgICAgICAgICAgICAgIFRvIGFk
ZCBmdW5jdGlvbnMgYW5kIHByb3BlcnRpZXMgdG8gaW5zdGFuY2VzIG9mCi0gICAgICAgICAgICAg
ICAgICAgIGEgY29uc3RydWN0b3IgYnkgZXh0ZW5kaW5nIHRoZSBjb25zdHJ1Y3RvcidzIHByb3Rv
dHlwZQotICAgICAgICAgICAgICAgICAgICBzZWUgYHJlb3BlbmAKLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIHJlb3BlbkNsYXNzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgcmVvcGVuQ2xhc3M6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGFwcGx5KHRoaXMu
Q2xhc3NNaXhpbiwgcmVvcGVuLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGFwcGx5TWl4
aW4odGhpcywgYXJndW1lbnRzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXRlY3Q6IGZ1bmN0aW9uKG9iaikgewot
ICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nICE9PSB0eXBlb2Ygb2JqKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBpZiAob2JqID09PSB0aGlz
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvYmogPSBvYmouc3VwZXJjbGFzczsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgZGV0ZWN0SW5zdGFuY2U6IGZ1bmN0aW9uKG9iaikgewotICAgICAg
ICAgICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiB0aGlzOwotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEluIHNvbWUgY2FzZXMsIHlvdSBt
YXkgd2FudCB0byBhbm5vdGF0ZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHdpdGggYWRkaXRpb25hbAot
ICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSBhYm91dCBob3cgdGhleSBmdW5jdGlvbiBvciB3
aGF0IHZhbHVlcyB0aGV5IG9wZXJhdGUgb24uIEZvcgotICAgICAgICAgICAgICAgICAgICBleGFt
cGxlLCBjb21wdXRlZCBwcm9wZXJ0eSBmdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgdmFyaWFibGVz
IHRoYXQgYXJlIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgbm8gbG9uZ2VyIGF2YWlsYWJsZSBm
b3IgaW50cm9zcGVjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHBhc3MgYSBo
YXNoIG9mIHRoZXNlIHZhbHVlcyB0byBhIGNvbXB1dGVkIHByb3BlcnR5IGxpa2UgdGhpczoKLQot
ICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIHBl
cnNvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNvbklkID0g
dGhpcy5nZXQoJ3BlcnNvbklkJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFwcC5Q
ZXJzb24uY3JlYXRlKHsgaWQ6IHBlcnNvbklkIH0pOwotICAgICAgICAgICAgICAgICAgICB9LnBy
b3BlcnR5KCkubWV0YSh7IHR5cGU6IEFwcC5QZXJzb24gfSkKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UndmUgZG9uZSB0aGlzLCB5b3UgY2Fu
IHJldHJpZXZlIHRoZSB2YWx1ZXMgc2F2ZWQgdG8gdGhlIGNvbXB1dGVkCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5IGZyb20geW91ciBjbGFzcyBsaWtlIHRoaXM6Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBNeUNsYXNzLm1ldGFG
b3JQcm9wZXJ0eSgncGVyc29uJyk7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgd2lsbCByZXR1cm4gdGhlIG9yaWdpbmFsIGhhc2ggdGhhdCB3YXMg
cGFzc2VkIHRvIGBtZXRhKClgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgbWV0YUZv
clByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBrZXkge1N0cmluZ30gcHJvcGVy
dHkgbmFtZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1ldGFGb3JQcm9wZXJ0
eTogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSB0aGlzLnByb3Rv
KClbTUVUQV9LRVldLAotICAgICAgICAgICAgICAgIGRlc2MgPSBtZXRhICYmIG1ldGEuZGVzY3Nb
a2V5XTsKLQotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgibWV0YUZvclByb3BlcnR5KCkg
Y291bGQgbm90IGZpbmQgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aXRoIGtleSAnIiArIGtleSArICIn
LiIsICEhZGVzYyAmJiBkZXNjIGluc3RhbmNlb2YgQ29tcHV0ZWRQcm9wZXJ0eSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGRlc2MuX21ldGEgfHwge307Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBfY29tcHV0ZWRQcm9wZXJ0aWVzOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBoYXNDYWNoZWRDb21wdXRlZFByb3BlcnRpZXMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHZhciBwcm90byA9IHRoaXMucHJvdG8oKTsKLSAgICAgICAgICAgICAgICB2
YXIgZGVzY3MgPSBtZXRhKHByb3RvKS5kZXNjczsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcGVy
dHk7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKLQotICAgICAgICAgICAg
ICAgIGZvciAodmFyIG5hbWUgaW4gZGVzY3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkgPSBkZXNjc1tuYW1lXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgaW5z
dGFuY2VvZiBDb21wdXRlZFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0aWVzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogcHJvcGVydHkuX21ldGEKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOwotICAgICAgICAgICAgfSku
cmVhZE9ubHkoKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEl0ZXJh
dGUgb3ZlciBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IGZvciB0aGUgY2xhc3MsIHBhc3NpbmcgaXRz
IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIChz
ZWUgYG1ldGFGb3JQcm9wZXJ0eWApIHRvIHRoZSBjYWxsYmFjay4KLQotICAgICAgICAgICAgICAg
ICAgICBAbWV0aG9kIGVhY2hDb21wdXRlZFByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2Jq
ZWN0fSBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZWFjaENvbXB1
dGVkUHJvcGVydHk6IGZ1bmN0aW9uKGNhbGxiYWNrLCBiaW5kaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHByb3BlcnR5LCBuYW1lOwotICAgICAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9Owot
Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBnZXQodGhpcywgJ19jb21wdXRlZFBy
b3BlcnRpZXMnKTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBw
cm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBy
b3BlcnR5Lm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZyB8
fCB0aGlzLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eS5tZXRhIHx8IGVtcHR5KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIENsYXNzTWl4
aW4ub3duZXJDb25zdHJ1Y3RvciA9IENvcmVPYmplY3Q7Ci0KLSAgICAgICAgaWYgKEVtYmVyLmNv
bmZpZy5vdmVycmlkZUNsYXNzTWl4aW4pIHsKLSAgICAgICAgICAgIEVtYmVyLmNvbmZpZy5vdmVy
cmlkZUNsYXNzTWl4aW4oQ2xhc3NNaXhpbik7Ci0gICAgICAgIH0KLQotICAgICAgICBDb3JlT2Jq
ZWN0LkNsYXNzTWl4aW4gPSBDbGFzc01peGluOwotCi0gICAgICAgIENsYXNzTWl4aW4uYXBwbHko
Q29yZU9iamVjdCk7Ci0KLSAgICAgICAgQ29yZU9iamVjdC5yZW9wZW4oewotICAgICAgICAgICAg
ZGlkRGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKHByb3RvLCBrZXksIHZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGhhc0NhY2hlZENvbXB1dGVkUHJvcGVydGllcyA9PT0gZmFsc2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFbWJlci5Db21wdXRlZFByb3BlcnR5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IEVtYmVyLm1ldGEodGhpcy5jb25zdHJ1Y3Rvciku
Y2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlLl9jb21wdXRlZFByb3BlcnRp
ZXMgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuX2NvbXB1
dGVkUHJvcGVydGllcyA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotCi0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IENv
cmVPYmplY3Q7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9kZWZl
cnJlZCIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2Rl
ZmVycmVkIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1ydW50aW1lL3N5c3Rl
bS9vYmplY3QiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19k
ZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIERlZmVycmVkTWl4aW4gPSBfX2RlcGVu
ZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTNfXy5n
ZXQ7Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9fZGVwZW5kZW5jeTRfX1siZGVmYXVsdCJd
OwotCi0gICAgICAgIHZhciBEZWZlcnJlZCA9IEVtYmVyT2JqZWN0LmV4dGVuZChEZWZlcnJlZE1p
eGluLCB7Ci0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBF
bWJlci5kZXByZWNhdGUoJ1VzYWdlIG9mIEVtYmVyLkRlZmVycmVkIGlzIGRlcHJlY2F0ZWQuJyk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgRGVmZXJyZWQucmVvcGVuQ2xhc3MoewotICAgICAgICAgICAgcHJvbWlz
ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVm
ZXJyZWQgPSBEZWZlcnJlZC5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxs
KGJpbmRpbmcsIGRlZmVycmVkKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0
Il0gPSBEZWZlcnJlZDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L2VhY2hfcHJveHkiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxz
IiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZW1iZXItbWV0YWwvYXJyYXkiLCAi
ZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXkiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0
IiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL29ic2VydmVyIiwgImVtYmVy
LW1ldGFsL2V2ZW50cyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL3By
b3BlcnR5X2V2ZW50cyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2Rl
cGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVu
Y3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFf
XywgX19kZXBlbmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19leHBvcnRzX18pIHsKLSAg
ICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1i
ZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8K
LQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXIuYXNzZXJ0Ci0KLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTJfXy5n
ZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3kzX18uc2V0OwotICAgICAgICB2YXIg
Z3VpZEZvciA9IF9fZGVwZW5kZW5jeTRfXy5ndWlkRm9yOwotICAgICAgICB2YXIgZm9yRWFjaCA9
IF9fZGVwZW5kZW5jeTVfXy5mb3JFYWNoOwotICAgICAgICB2YXIgaW5kZXhPZiA9IF9fZGVwZW5k
ZW5jeTZfXy5pbmRleE9mOwotICAgICAgICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5kZW5jeTdf
X1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFUzZUT0RPOiBXQVQ/IENpcmN1bGFyIGRlcD8KLSAg
ICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0gICAg
ICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTlfXy5jb21wdXRlZDsKLSAgICAgICAgdmFy
IGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRPYnNlcnZlcjsKLSAgICAgICAgdmFy
IGFkZEJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5hZGRCZWZvcmVPYnNlcnZlcjsK
LSAgICAgICAgdmFyIHJlbW92ZUJlZm9yZU9ic2VydmVyID0gX19kZXBlbmRlbmN5MTBfXy5yZW1v
dmVCZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZU9ic2VydmVyID0gX19kZXBlbmRl
bmN5MTBfXy5yZW1vdmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5j
eTRfXy50eXBlT2Y7Ci0gICAgICAgIHZhciB3YXRjaGVkRXZlbnRzID0gX19kZXBlbmRlbmN5MTFf
Xy53YXRjaGVkRXZlbnRzOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVu
Y3kxMl9fLmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgYmVnaW5Qcm9wZXJ0eUNoYW5nZXMg
PSBfX2RlcGVuZGVuY3kxM19fLmJlZ2luUHJvcGVydHlDaGFuZ2VzOwotICAgICAgICB2YXIgcHJv
cGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3kxM19fLnByb3BlcnR5RGlkQ2hhbmdlOwotICAg
ICAgICB2YXIgcHJvcGVydHlXaWxsQ2hhbmdlID0gX19kZXBlbmRlbmN5MTNfXy5wcm9wZXJ0eVdp
bGxDaGFuZ2U7Ci0gICAgICAgIHZhciBlbmRQcm9wZXJ0eUNoYW5nZXMgPSBfX2RlcGVuZGVuY3kx
M19fLmVuZFByb3BlcnR5Q2hhbmdlczsKLSAgICAgICAgdmFyIGNoYW5nZVByb3BlcnRpZXMgPSBf
X2RlcGVuZGVuY3kxM19fLmNoYW5nZVByb3BlcnRpZXM7Ci0KLSAgICAgICAgdmFyIEVhY2hBcnJh
eSA9IEVtYmVyT2JqZWN0LmV4dGVuZChFbWJlckFycmF5LCB7Ci0KLSAgICAgICAgICAgIGluaXQ6
IGZ1bmN0aW9uKGNvbnRlbnQsIGtleU5hbWUsIG93bmVyKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9rZXlOYW1lID0ga2V5TmFtZTsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9vd25lciA9IG93bmVyOwotICAgICAgICAgICAgICAgIHRoaXMu
X2NvbnRlbnQgPSBjb250ZW50OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgb2JqZWN0
QXQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fY29u
dGVudC5vYmplY3RBdChpZHgpOwotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICYmIGdldChp
dGVtLCB0aGlzLl9rZXlOYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxlbmd0
aDogY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0
aGlzLl9jb250ZW50OwotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50ID8gZ2V0KGNvbnRl
bnQsICdsZW5ndGgnKSA6IDA7Ci0gICAgICAgICAgICB9KQotICAgICAgICB9KTsKLQotICAgICAg
ICB2YXIgSVNfT0JTRVJWRVIgPSAvXi4rOihiZWZvcmV8Y2hhbmdlKSQvOwotCi0gICAgICAgIGZ1
bmN0aW9uIGFkZE9ic2VydmVyRm9yQ29udGVudEtleShjb250ZW50LCBrZXlOYW1lLCBwcm94eSwg
aWR4LCBsb2MpIHsKLSAgICAgICAgICAgIHZhciBvYmplY3RzID0gcHJveHkuX29iamVjdHMsIGd1
aWQ7Ci0gICAgICAgICAgICBpZiAoIW9iamVjdHMpIAotICAgICAgICAgICAgICAgIG9iamVjdHMg
PSBwcm94eS5fb2JqZWN0cyA9IHt9OwotCi0gICAgICAgICAgICB3aGlsZSAoLS1sb2MgPj0gaWR4
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBjb250ZW50Lm9iamVjdEF0KGxvYyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCdXaGVuIHVzaW5nIEBlYWNoIHRvIG9ic2VydmUgdGhlIGFycmF5ICcgKyBjb250ZW50ICsg
JywgdGhlIGFycmF5IG11c3QgcmV0dXJuIGFuIG9iamVjdCcsIHR5cGVPZihpdGVtKSA9PT0gJ2lu
c3RhbmNlJyB8fCB0eXBlT2YoaXRlbSkgPT09ICdvYmplY3QnKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkQmVmb3JlT2JzZXJ2ZXIoaXRlbSwga2V5TmFtZSwgcHJveHksICdjb250ZW50S2V5V2ls
bENoYW5nZScpOwotICAgICAgICAgICAgICAgICAgICBhZGRPYnNlcnZlcihpdGVtLCBrZXlOYW1l
LCBwcm94eSwgJ2NvbnRlbnRLZXlEaWRDaGFuZ2UnKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBlYWNoIGl0ZW0gd2FzIGZvdW5kIGF0IHNvIHdlIGNh
biBtYXAKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgYmFjayB3aGVuIHRoZSBvYmogY2hhbmdl
cy4KLSAgICAgICAgICAgICAgICAgICAgZ3VpZCA9IGd1aWRGb3IoaXRlbSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghb2JqZWN0c1tndWlkXSkgCi0gICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3RzW2d1aWRdID0gW107Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdHNbZ3VpZF0ucHVz
aChsb2MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyRm9yQ29udGVudEtleShjb250ZW50LCBrZXlO
YW1lLCBwcm94eSwgaWR4LCBsb2MpIHsKLSAgICAgICAgICAgIHZhciBvYmplY3RzID0gcHJveHku
X29iamVjdHM7Ci0gICAgICAgICAgICBpZiAoIW9iamVjdHMpIAotICAgICAgICAgICAgICAgIG9i
amVjdHMgPSBwcm94eS5fb2JqZWN0cyA9IHt9OwotICAgICAgICAgICAgdmFyIGluZGljaWVzLCBn
dWlkOwotCi0gICAgICAgICAgICB3aGlsZSAoLS1sb2MgPj0gaWR4KSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGl0ZW0gPSBjb250ZW50Lm9iamVjdEF0KGxvYyk7Ci0gICAgICAgICAgICAgICAgaWYg
KGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIoaXRlbSwg
a2V5TmFtZSwgcHJveHksICdjb250ZW50S2V5V2lsbENoYW5nZScpOwotICAgICAgICAgICAgICAg
ICAgICByZW1vdmVPYnNlcnZlcihpdGVtLCBrZXlOYW1lLCBwcm94eSwgJ2NvbnRlbnRLZXlEaWRD
aGFuZ2UnKTsKLQotICAgICAgICAgICAgICAgICAgICBndWlkID0gZ3VpZEZvcihpdGVtKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5kaWNpZXMgPSBvYmplY3RzW2d1aWRdOwotICAgICAgICAgICAg
ICAgICAgICBpbmRpY2llc1tpbmRleE9mLmNhbGwoaW5kaWNpZXMsIGxvYyldID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgb2JqZWN0IGluc3RhbmNlIHJldHVybmVkIHdoZW4g
eW91IGdldCB0aGUgYEBlYWNoYCBwcm9wZXJ0eSBvbiBhbgotICAgICAgICAgICAgICBhcnJheS4g
SXQgdXNlcyB0aGUgdW5rbm93blByb3BlcnR5IGhhbmRsZXIgdG8gYXV0b21hdGljYWxseSBjcmVh
dGUKLSAgICAgICAgICAgICAgRWFjaEFycmF5IGluc3RhbmNlcyBmb3IgcHJvcGVydHkgbmFtZXMu
Ci0KLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQGNsYXNzIEVhY2hQcm94
eQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRz
IEVtYmVyLk9iamVjdAotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIEVhY2hQcm94eSA9IEVt
YmVyT2JqZWN0LmV4dGVuZCh7Ci0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGNvbnRlbnQp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgICAgIHRoaXMu
X2NvbnRlbnQgPSBjb250ZW50OwotICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkQXJyYXlPYnNl
cnZlcih0aGlzKTsKLQotICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugc29tZW9uZSBpcyBhbHJl
YWR5IG9ic2VydmluZyBzb21lIGtleXMgbWFrZSBzdXJlIHRoZXkgYXJlCi0gICAgICAgICAgICAg
ICAgLy8gYWRkZWQKLSAgICAgICAgICAgICAgICBmb3JFYWNoKHdhdGNoZWRFdmVudHModGhpcyks
IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZEFkZExp
c3RlbmVyKGV2ZW50TmFtZSk7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXJl
Y3RseSBhY2Nlc3MgbWFwcGVkIHByb3BlcnRpZXMgYnkgc2ltcGx5IHJlcXVlc3RpbmcgdGhlbS4K
LSAgICAgICAgICAgICAgICAgICAgVGhlIGB1bmtub3duUHJvcGVydHlgIGhhbmRsZXIgd2lsbCBn
ZW5lcmF0ZSBhbiBFYWNoQXJyYXkgb2YgZWFjaCBpdGVtLgotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgdW5rbm93blByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBrZXlO
YW1lIHtTdHJpbmd9Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB2YWx1ZSB7Kn0KLSAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICB1bmtub3duUHJvcGVydHk6IGZ1bmN0aW9uKGtl
eU5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldDsKLSAgICAgICAgICAgICAg
ICByZXQgPSBuZXcgRWFjaEFycmF5KHRoaXMuX2NvbnRlbnQsIGtleU5hbWUsIHRoaXMpOwotICAg
ICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIGtleU5hbWUsIG51bGwsIHJldCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5iZWdpbk9ic2VydmluZ0NvbnRlbnRLZXkoa2V5TmFtZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4KLSAgICAgICAgICAgIC8vIEFSUkFZIENIQU5HRVMKLSAgICAgICAgICAgIC8vIEludm9r
ZXMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgYXJyYXkgaXRzZWxmIGNoYW5nZXMuCi0KLSAgICAgICAg
ICAgIGFycmF5V2lsbENoYW5nZTogZnVuY3Rpb24oY29udGVudCwgaWR4LCByZW1vdmVkQ250LCBh
ZGRlZENudCkgewotICAgICAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5fa2V5cywga2V5LCBs
aW07Ci0KLSAgICAgICAgICAgICAgICBsaW0gPSByZW1vdmVkQ250ID4gMCA/IGlkeCArIHJlbW92
ZWRDbnQgOiAtMTsKLSAgICAgICAgICAgICAgICBiZWdpblByb3BlcnR5Q2hhbmdlcyh0aGlzKTsK
LQotICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGtleXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFrZXlzLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpbSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVy
Rm9yQ29udGVudEtleShjb250ZW50LCBrZXksIHRoaXMsIGlkeCwgbGltKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZSh0aGlz
LCBrZXkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByb3BlcnR5V2ls
bENoYW5nZSh0aGlzLl9jb250ZW50LCAnQGVhY2gnKTsKLSAgICAgICAgICAgICAgICBlbmRQcm9w
ZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhcnJheURp
ZENoYW5nZTogZnVuY3Rpb24oY29udGVudCwgaWR4LCByZW1vdmVkQ250LCBhZGRlZENudCkgewot
ICAgICAgICAgICAgICAgIHZhciBrZXlzID0gdGhpcy5fa2V5cywgbGltOwotCi0gICAgICAgICAg
ICAgICAgbGltID0gYWRkZWRDbnQgPiAwID8gaWR4ICsgYWRkZWRDbnQgOiAtMTsKLSAgICAgICAg
ICAgICAgICBjaGFuZ2VQcm9wZXJ0aWVzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4ga2V5cykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFr
ZXlzLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxpbSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPYnNl
cnZlckZvckNvbnRlbnRLZXkoY29udGVudCwga2V5LCB0aGlzLCBpZHgsIGxpbSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGlk
Q2hhbmdlKHRoaXMsIGtleSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eURpZENoYW5nZSh0aGlzLl9jb250ZW50LCAnQGVhY2gnKTsKLSAgICAg
ICAgICAgICAgICB9LCB0aGlzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4K
LSAgICAgICAgICAgIC8vIExJU1RFTiBGT1IgTkVXIE9CU0VSVkVSUyBBTkQgT1RIRVIgRVZFTlQg
TElTVEVORVJTCi0gICAgICAgICAgICAvLyBTdGFydCBtb25pdG9yaW5nIGtleXMgYmFzZWQgb24g
d2hvIGlzIGxpc3RlbmluZy4uLgotCi0gICAgICAgICAgICBkaWRBZGRMaXN0ZW5lcjogZnVuY3Rp
b24oZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKElTX09CU0VSVkVSLnRlc3QoZXZl
bnROYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luT2JzZXJ2aW5nQ29udGVu
dEtleShldmVudE5hbWUuc2xpY2UoMCwgLTcpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBkaWRSZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24oZXZlbnRO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKElTX09CU0VSVkVSLnRlc3QoZXZlbnROYW1lKSkg
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BPYnNlcnZpbmdDb250ZW50S2V5KGV2ZW50
TmFtZS5zbGljZSgwLCAtNykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4KLSAgICAgICAgICAgIC8vIENPTlRFTlQgS0VZIE9CU0VSVklORwot
ICAgICAgICAgICAgLy8gQWN0dWFsIHdhdGNoIGtleXMgb24gdGhlIHNvdXJjZSBjb250ZW50Lgot
Ci0gICAgICAgICAgICBiZWdpbk9ic2VydmluZ0NvbnRlbnRLZXk6IGZ1bmN0aW9uKGtleU5hbWUp
IHsKLSAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMuX2tleXM7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFrZXlzKSAKLSAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2tleXMgPSB7
fTsKLSAgICAgICAgICAgICAgICBpZiAoIWtleXNba2V5TmFtZV0pIHsKLSAgICAgICAgICAgICAg
ICAgICAga2V5c1trZXlOYW1lXSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50
ID0gdGhpcy5fY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gZ2V0KGNvbnRlbnQs
ICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXJGb3JDb250ZW50S2V5
KGNvbnRlbnQsIGtleU5hbWUsIHRoaXMsIDAsIGxlbik7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAga2V5c1trZXlOYW1lXSsrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHN0b3BPYnNlcnZpbmdDb250ZW50S2V5
OiBmdW5jdGlvbihrZXlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGtleXMgPSB0aGlzLl9r
ZXlzOwotICAgICAgICAgICAgICAgIGlmIChrZXlzICYmIChrZXlzW2tleU5hbWVdID4gMCkgJiYg
KC0ta2V5c1trZXlOYW1lXSA8PSAwKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVu
dCA9IHRoaXMuX2NvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgIGxlbiA9IGdldChjb250ZW50
LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyRm9yQ29udGVu
dEtleShjb250ZW50LCBrZXlOYW1lLCB0aGlzLCAwLCBsZW4pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNvbnRlbnRLZXlXaWxsQ2hhbmdlOiBmdW5j
dGlvbihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVdpbGxDaGFuZ2Uo
dGhpcywga2V5TmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb250ZW50S2V5
RGlkQ2hhbmdlOiBmdW5jdGlvbihvYmosIGtleU5hbWUpIHsKLSAgICAgICAgICAgICAgICBwcm9w
ZXJ0eURpZENoYW5nZSh0aGlzLCBrZXlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgX19leHBvcnRzX18uRWFjaEFycmF5ID0gRWFjaEFycmF5OwotICAgICAgICBf
X2V4cG9ydHNfXy5FYWNoUHJveHkgPSBFYWNoUHJveHk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJl
bWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9hcnJheSIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXki
LCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5
Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICAgICAgLypnbG9iYWxzIEN1c3RvbUV2ZW50ICovCi0KLSAgICAgICAgdmFyIEVtYmVy
ID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLkVOVi5FTUJF
Ul9MT0FEX0hPT0tTCi0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5Ml9fLmZvckVh
Y2g7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSBFbWJlci5BIGlzIHNldHVwLgotCi0gICAgICAgIC8q
KgotICAgICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICAgIEBzdWJtb2R1bGUg
ZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgbG9hZEhvb2tzID0g
RW1iZXIuRU5WLkVNQkVSX0xPQURfSE9PS1MgfHwge307Ci0gICAgICAgIHZhciBsb2FkZWQgPSB7
fTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgRGV0ZWN0cyB3aGVuIGEgc3BlY2lmaWMg
cGFja2FnZSBvZiBFbWJlciAoZS5nLiAnRW1iZXIuSGFuZGxlYmFycycpCi0gICAgICAgICAgICAg
IGhhcyBmdWxseSBsb2FkZWQgYW5kIGlzIGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9uLgotCi0gICAg
ICAgICAgICAgIFRoZSBwcm92aWRlZCBgY2FsbGJhY2tgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhl
IGBuYW1lYCBwYXNzZWQKLSAgICAgICAgICAgICAgcmVzb2x2ZWQgZnJvbSBhIHN0cmluZyBpbnRv
IHRoZSBvYmplY3Q6Ci0KLSAgICAgICAgICAgICAgYGBgIGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgRW1iZXIub25Mb2FkKCdFbWJlci5IYW5kbGViYXJzJyBmdW5jdGlvbihoYmFycykgewotICAg
ICAgICAgICAgICAgIGhiYXJzLnJlZ2lzdGVySGVscGVyKC4uLik7Ci0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIG9uTG9hZAotICAg
ICAgICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBuYW1lIHtTdHJpbmd9
IG5hbWUgb2YgaG9vawotICAgICAgICAgICAgICBAcGFyYW0gY2FsbGJhY2sge0Z1bmN0aW9ufSBj
YWxsYmFjayB0byBiZSBjYWxsZWQKLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG9u
TG9hZChuYW1lLCBjYWxsYmFjaykgewotICAgICAgICAgICAgdmFyIG9iamVjdDsKLQotICAgICAg
ICAgICAgbG9hZEhvb2tzW25hbWVdID0gbG9hZEhvb2tzW25hbWVdIHx8IEVtYmVyLkEoKTsKLSAg
ICAgICAgICAgIGxvYWRIb29rc1tuYW1lXS5wdXNoT2JqZWN0KGNhbGxiYWNrKTsKLQotICAgICAg
ICAgICAgaWYgKG9iamVjdCA9IGxvYWRlZFtuYW1lXSkgewotICAgICAgICAgICAgICAgIGNhbGxi
YWNrKG9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfXy5vbkxvYWQgPSBvbkxvYWQ7IC8qKgotICAgICAgICAgICAgICBDYWxsZWQgd2hlbiBhbiBF
bWJlci5qcyBwYWNrYWdlIChlLmcgRW1iZXIuSGFuZGxlYmFycykgaGFzIGZpbmlzaGVkCi0gICAg
ICAgICAgICAgIGxvYWRpbmcuIFRyaWdnZXJzIGFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmb3Ig
dGhpcyBldmVudC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJ1bkxvYWRIb29rcwotICAgICAg
ICAgICAgICBAZm9yIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSBuYW1lIHtTdHJpbmd9IG5h
bWUgb2YgaG9vawotICAgICAgICAgICAgICBAcGFyYW0gb2JqZWN0IHtPYmplY3R9IG9iamVjdCB0
byBwYXNzIHRvIGNhbGxiYWNrcwotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gcnVu
TG9hZEhvb2tzKG5hbWUsIG9iamVjdCkgewotICAgICAgICAgICAgbG9hZGVkW25hbWVdID0gb2Jq
ZWN0OwotCi0gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlw
ZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBDdXN0b21F
dmVudCA9PT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyBD
dXN0b21FdmVudChuYW1lLCB7Ci0gICAgICAgICAgICAgICAgICAgIGRldGFpbDogb2JqZWN0LAot
ICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAobG9hZEhvb2tzW25hbWVdKSB7Ci0gICAgICAgICAgICAgICAgZm9y
RWFjaC5jYWxsKGxvYWRIb29rc1tuYW1lXSwgZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sob2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLnJ1bkxvYWRIb29rcyA9
IHJ1bkxvYWRIb29rczsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVt
L25hbWVzcGFjZSIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3Bl
cnR5X2dldCIsICJlbWJlci1tZXRhbC9hcnJheSIsICJlbWJlci1tZXRhbC91dGlscyIsICJlbWJl
ci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCAiZXhwb3J0cyJd
LAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVu
ZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2
X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLy8gRW1iZXIubG9va3VwLCBFbWJlci5C
T09URUQsIEVtYmVyLmRlcHJlY2F0ZSwgRW1iZXIuTkFNRV9LRVksIEVtYmVyLmFueVVucHJvY2Vz
c2VkTWl4aW5zCi0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIGlu
ZGV4T2YgPSBfX2RlcGVuZGVuY3kzX18uaW5kZXhPZjsKLSAgICAgICAgdmFyIEdVSURfS0VZID0g
X19kZXBlbmRlbmN5NF9fLkdVSURfS0VZOwotICAgICAgICB2YXIgZ3VpZEZvciA9IF9fZGVwZW5k
ZW5jeTRfXy5ndWlkRm9yOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k1X18uTWl4
aW47Ci0KLSAgICAgICAgdmFyIEVtYmVyT2JqZWN0ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0
Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEEgTmFtZXNwYWNlIGlzIGFuIG9iamVj
dCB1c3VhbGx5IHVzZWQgdG8gY29udGFpbiBvdGhlciBvYmplY3RzIG9yIG1ldGhvZHMKLSAgICAg
ICAgICAgICAgc3VjaCBhcyBhbiBhcHBsaWNhdGlvbiBvciBmcmFtZXdvcmsuIENyZWF0ZSBhIG5h
bWVzcGFjZSBhbnl0aW1lIHlvdSB3YW50Ci0gICAgICAgICAgICAgIHRvIGRlZmluZSBvbmUgb2Yg
dGhlc2UgbmV3IGNvbnRhaW5lcnMuCi0KLSAgICAgICAgICAgICAgIyBFeGFtcGxlIFVzYWdlCi0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBNeUZyYW1ld29yayA9
IEVtYmVyLk5hbWVzcGFjZS5jcmVhdGUoewotICAgICAgICAgICAgICAgIFZFUlNJT046ICcxLjAu
MCcKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
IEBjbGFzcyBOYW1lc3BhY2UKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgICAgICAgICovCi0gICAgICAgIHZh
ciBOYW1lc3BhY2UgPSBFbWJlck9iamVjdC5leHRlbmQoewotICAgICAgICAgICAgaXNOYW1lc3Bh
Y2U6IHRydWUsCi0KLSAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIE5hbWVzcGFjZS5OQU1FU1BBQ0VTLnB1c2godGhpcyk7Ci0gICAgICAgICAgICAgICAgTmFt
ZXNwYWNlLlBST0NFU1NFRCA9IGZhbHNlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
dG9TdHJpbmc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0KHRo
aXMsICduYW1lJyk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ZmluZE5hbWVzcGFjZXMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tOQU1FX0tFWV07
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBuYW1lQ2xhc3NlczogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc05hbWVzcGFjZShbdGhpcy50b1N0cmluZygpXSwgdGhp
cywge30pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBOYW1lc3BhY2UuTkFNRVNQQUNF
UywKLSAgICAgICAgICAgICAgICB0b1N0cmluZyA9IHRoaXMudG9TdHJpbmcoKTsKLQotICAgICAg
ICAgICAgICAgIGlmICh0b1N0cmluZykgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5sb29r
dXBbdG9TdHJpbmddID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgTmFt
ZXNwYWNlLk5BTUVTUEFDRVNfQllfSURbdG9TdHJpbmddOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBuYW1lc3BhY2VzLnNwbGljZShpbmRleE9mLmNhbGwobmFtZXNwYWNlcywg
dGhpcyksIDEpOwotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIE5hbWVzcGFjZS5yZW9wZW5DbGFzcyh7Ci0gICAgICAg
ICAgICBOQU1FU1BBQ0VTOiBbRW1iZXJdLAotICAgICAgICAgICAgTkFNRVNQQUNFU19CWV9JRDog
e30sCi0gICAgICAgICAgICBQUk9DRVNTRUQ6IGZhbHNlLAotICAgICAgICAgICAgcHJvY2Vzc0Fs
bDogcHJvY2Vzc0FsbE5hbWVzcGFjZXMsCi0gICAgICAgICAgICBieU5hbWU6IGZ1bmN0aW9uKG5h
bWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIUVtYmVyLkJPT1RFRCkgewotICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzQWxsTmFtZXNwYWNlcygpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBOQU1FU1BBQ0VTX0JZX0lEW25hbWVdOwotICAgICAgICAgICAg
fQotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgTkFNRVNQQUNFU19CWV9JRCA9IE5hbWVzcGFj
ZS5OQU1FU1BBQ0VTX0JZX0lEOwotCi0gICAgICAgIHZhciBoYXNPd25Qcm9wID0gKHt9KS5oYXNP
d25Qcm9wZXJ0eTsKLQotICAgICAgICBmdW5jdGlvbiBwcm9jZXNzTmFtZXNwYWNlKHBhdGhzLCBy
b290LCBzZWVuKSB7Ci0gICAgICAgICAgICB2YXIgaWR4ID0gcGF0aHMubGVuZ3RoOwotCi0gICAg
ICAgICAgICBOQU1FU1BBQ0VTX0JZX0lEW3BhdGhzLmpvaW4oJy4nKV0gPSByb290OwotCi0gICAg
ICAgICAgICAvLyBMb29wIG92ZXIgYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBuYW1lc3BhY2UsIGxv
b2tpbmcgZm9yIGNsYXNzZXMKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByb290KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wLmNhbGwocm9vdCwga2V5KSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdmFyIG9iaiA9IHJvb3Rba2V5XTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBw
cm9jZXNzaW5nIHRoZSBgRW1iZXJgIG5hbWVzcGFjZSwgZm9yIGV4YW1wbGUsIHRoZQotICAgICAg
ICAgICAgICAgIC8vIGBwYXRoc2Agd2lsbCBzdGFydCB3aXRoIGBbIkVtYmVyIl1gLiBFdmVyeSBp
dGVyYXRpb24gdGhyb3VnaAotICAgICAgICAgICAgICAgIC8vIHRoZSBsb29wIHdpbGwgdXBkYXRl
IHRoZSAqKnNlY29uZCoqIGVsZW1lbnQgb2YgdGhpcyBsaXN0IHdpdGgKLSAgICAgICAgICAgICAg
ICAvLyB0aGUga2V5LCBzbyBwcm9jZXNzaW5nIGBFbWJlci5WaWV3YCB3aWxsIG1ha2UgdGhlIEFy
cmF5Ci0gICAgICAgICAgICAgICAgLy8gYFsnRW1iZXInLCAnVmlldyddYC4KLSAgICAgICAgICAg
ICAgICBwYXRoc1tpZHhdID0ga2V5OwotCi0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBm
b3VuZCBhbiB1bnByb2Nlc3NlZCBjbGFzcwotICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2Jq
LnRvU3RyaW5nID09PSBjbGFzc1RvU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJl
cGxhY2UgdGhlIGNsYXNzJyBgdG9TdHJpbmdgIHdpdGggdGhlIGRvdC1zZXBhcmF0ZWQgcGF0aAot
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgc2V0IGl0cyBgTkFNRV9LRVlgCi0gICAgICAgICAg
ICAgICAgICAgIG9iai50b1N0cmluZyA9IG1ha2VUb1N0cmluZyhwYXRocy5qb2luKCcuJykpOwot
ICAgICAgICAgICAgICAgICAgICBvYmpbTkFNRV9LRVldID0gcGF0aHMuam9pbignLicpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgbmVzdGVkIG5hbWVzcGFjZXMKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouaXNOYW1lc3BhY2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gU2tpcCBhbGlhc2VkIG5hbWVzcGFjZXMKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHNlZW5bZ3VpZEZvcihvYmopXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VlbltndWlk
Rm9yKG9iaildID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBj
aGlsZCBuYW1lc3BhY2UKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc05hbWVzcGFjZShwYXRo
cywgb2JqLCBzZWVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHBhdGhzLmxlbmd0aCA9IGlkeDsgLy8gY3V0IG91dCBsYXN0IGl0ZW0KLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBTVEFSVFNfV0lUSF9VUFBFUkNBU0UgPSAvXltBLVpdLzsKLQotICAg
ICAgICBmdW5jdGlvbiB0cnlJc05hbWVzcGFjZShsb29rdXAsIHByb3ApIHsKLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxvb2t1cFtwcm9wXTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb2JqICYmIG9iai5pc05hbWVzcGFjZSAmJiBvYmo7Ci0gICAgICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgLy8gY29udGludWUKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmROYW1lc3BhY2VzKCkgewotICAg
ICAgICAgICAgdmFyIGxvb2t1cCA9IEVtYmVyLmxvb2t1cCwgb2JqLCBpc05hbWVzcGFjZTsKLQot
ICAgICAgICAgICAgaWYgKE5hbWVzcGFjZS5QUk9DRVNTRUQpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gbG9v
a3VwKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGVudGl0aWVzIHRoYXQgc3Rh
cnQgd2l0aCB1cHBlcmNhc2UgQS1aCi0gICAgICAgICAgICAgICAgaWYgKCFTVEFSVFNfV0lUSF9V
UFBFUkNBU0UudGVzdChwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBzb21l
IHZlcnNpb25zIG9mIElFIGRvbid0IHN1cHBvcnQgd2luZG93Lmhhc093blByb3BlcnR5Ci0gICAg
ICAgICAgICAgICAgaWYgKGxvb2t1cC5oYXNPd25Qcm9wZXJ0eSAmJiAhbG9va3VwLmhhc093blBy
b3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEF0IHRpbWVzIHdlIGFyZSBub3QgYWxsb3dl
ZCB0byBhY2Nlc3MgY2VydGFpbiBwcm9wZXJ0aWVzIGZvciBzZWN1cml0eSByZWFzb25zLgotICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBhbHNvIHRpbWVzIHdoZXJlIGV2ZW4gaWYgd2UgY2Fu
IGFjY2VzcyB0aGVtLCB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZWlyIHByb3BlcnRp
ZXMuCi0gICAgICAgICAgICAgICAgb2JqID0gdHJ5SXNOYW1lc3BhY2UobG9va3VwLCBwcm9wKTsK
LSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9ialtOQU1F
X0tFWV0gPSBwcm9wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBOQU1FX0tFWSA9IEVtYmVyLk5BTUVfS0VZID0gR1VJRF9LRVkgKyAn
X25hbWUnOwotCi0gICAgICAgIGZ1bmN0aW9uIHN1cGVyQ2xhc3NTdHJpbmcobWl4aW4pIHsKLSAg
ICAgICAgICAgIHZhciBzdXBlcmNsYXNzID0gbWl4aW4uc3VwZXJjbGFzczsKLSAgICAgICAgICAg
IGlmIChzdXBlcmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1cGVyY2xhc3NbTkFNRV9L
RVldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcmNsYXNzW05BTUVfS0VZXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vw
ZXJDbGFzc1N0cmluZyhzdXBlcmNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNsYXNzVG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICBp
ZiAoIUVtYmVyLkJPT1RFRCAmJiAhdGhpc1tOQU1FX0tFWV0pIHsKLSAgICAgICAgICAgICAgICBw
cm9jZXNzQWxsTmFtZXNwYWNlcygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIg
cmV0OwotCi0gICAgICAgICAgICBpZiAodGhpc1tOQU1FX0tFWV0pIHsKLSAgICAgICAgICAgICAg
ICByZXQgPSB0aGlzW05BTUVfS0VZXTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdG9T
dHJpbmcpIHsKLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl90b1N0cmluZzsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0ciA9IHN1cGVyQ2xhc3NTdHJpbmco
dGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cikgewotICAgICAgICAgICAgICAgICAgICBy
ZXQgPSAiKHN1YmNsYXNzIG9mICIgKyBzdHIgKyAiKSI7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gIih1bmtub3duIG1peGluKSI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBtYWtlVG9TdHJpbmco
cmV0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NBbGxOYW1lc3BhY2VzKCkgewotICAgICAgICAg
ICAgdmFyIHVucHJvY2Vzc2VkTmFtZXNwYWNlcyA9ICFOYW1lc3BhY2UuUFJPQ0VTU0VELAotICAg
ICAgICAgICAgdW5wcm9jZXNzZWRNaXhpbnMgPSBFbWJlci5hbnlVbnByb2Nlc3NlZE1peGluczsK
LQotICAgICAgICAgICAgaWYgKHVucHJvY2Vzc2VkTmFtZXNwYWNlcykgewotICAgICAgICAgICAg
ICAgIGZpbmROYW1lc3BhY2VzKCk7Ci0gICAgICAgICAgICAgICAgTmFtZXNwYWNlLlBST0NFU1NF
RCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh1bnByb2Nlc3NlZE5h
bWVzcGFjZXMgfHwgdW5wcm9jZXNzZWRNaXhpbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFt
ZXNwYWNlcyA9IE5hbWVzcGFjZS5OQU1FU1BBQ0VTLCBuYW1lc3BhY2U7Ci0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBuYW1lc3BhY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzW2ldOwotICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzTmFtZXNwYWNlKFtuYW1lc3BhY2UudG9TdHJpbmcoKV0sIG5hbWVz
cGFjZSwge30pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEVtYmVyLmFu
eVVucHJvY2Vzc2VkTWl4aW5zID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBtYWtlVG9TdHJpbmcocmV0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KLQotICAgICAgICBNaXhpbi5wcm90b3R5cGUudG9TdHJpbmcgPSBjbGFzc1Rv
U3RyaW5nOyAvLyBFUzZUT0RPOiBhbHRlcmluZyBpbXBvcnRlZCBvYmplY3RzLiBTQkIuCi0KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IE5hbWVzcGFjZTsKLSAgICB9KTsKLSAgICBk
ZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSIsCi0gICAgWyJlbWJlci1t
ZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJsZV91dGlscyIsICJlbWJlci1tZXRhbC9t
aXhpbiIsICJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsICJlbWJlci1ydW50aW1lL21peGlu
cy9tdXRhYmxlX2FycmF5IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUiLCAiZW1i
ZXItcnVudGltZS9taXhpbnMvY29weWFibGUiLCAiZW1iZXItcnVudGltZS9taXhpbnMvZnJlZXph
YmxlIiwgImVtYmVyLXJ1bnRpbWUvY29weSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2RlcGVuZGVuY3k4X18sIF9fZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19k
ZXBlbmRlbmN5MTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1
bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgRW1iZXIgPSBf
X2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuRVhURU5EX1BST1RP
VFlQRVMKLQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAg
dmFyIHNldCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciByZXBsYWNlID0gX19k
ZXBlbmRlbmN5NF9fLl9yZXBsYWNlOwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5j
eTRfXy5mb3JFYWNoOwotICAgICAgICB2YXIgTWl4aW4gPSBfX2RlcGVuZGVuY3k1X18uTWl4aW47
Ci0gICAgICAgIHZhciBFbWJlckFycmF5ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0g
ICAgICAgIHZhciBNdXRhYmxlQXJyYXkgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAg
ICAgICAgdmFyIE9ic2VydmFibGUgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIENvcHlhYmxlID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBGUk9aRU5fRVJST1IgPSBfX2RlcGVuZGVuY3kxMF9fLkZST1pFTl9FUlJPUjsKLSAgICAgICAg
dmFyIGNvcHkgPSBfX2RlcGVuZGVuY3kxMV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLy8gQWRk
IEVtYmVyLkFycmF5IHRvIEFycmF5LnByb3RvdHlwZS4gUmVtb3ZlIG1ldGhvZHMgd2l0aCBuYXRp
dmUKLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb25zIGFuZCBzdXBwbHkgc29tZSBtb3JlIG9wdGlt
aXplZCB2ZXJzaW9ucyBvZiBnZW5lcmljIG1ldGhvZHMKLSAgICAgICAgLy8gYmVjYXVzZSB0aGV5
IGFyZSBzbyBjb21tb24uCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBOYXRpdmVB
cnJheSBtaXhpbiBjb250YWlucyB0aGUgcHJvcGVydGllcyBuZWVkZWQgdG8gdG8gbWFrZSB0aGUg
bmF0aXZlCi0gICAgICAgICAgICAgIEFycmF5IHN1cHBvcnQgRW1iZXIuTXV0YWJsZUFycmF5IGFu
ZCBhbGwgb2YgaXRzIGRlcGVuZGVudCBBUElzLiBVbmxlc3MgeW91Ci0gICAgICAgICAgICAgIGhh
dmUgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBvciBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMu
QXJyYXlgIHNldCB0bwotICAgICAgICAgICAgICBmYWxzZSwgdGhpcyB3aWxsIGJlIGFwcGxpZWQg
YXV0b21hdGljYWxseS4gT3RoZXJ3aXNlIHlvdSBjYW4gYXBwbHkgdGhlIG1peGluCi0gICAgICAg
ICAgICAgIGF0IGFueXRpbWUgYnkgY2FsbGluZyBgRW1iZXIuTmF0aXZlQXJyYXkuYWN0aXZhdGVg
LgotCi0gICAgICAgICAgICAgIEBjbGFzcyBOYXRpdmVBcnJheQotICAgICAgICAgICAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLk11dGFibGVBcnJheQotICAg
ICAgICAgICAgICBAdXNlcyBFbWJlci5PYnNlcnZhYmxlCi0gICAgICAgICAgICAgIEB1c2VzIEVt
YmVyLkNvcHlhYmxlCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgTmF0aXZlQXJyYXkgPSBN
aXhpbi5jcmVhdGUoTXV0YWJsZUFycmF5LCBPYnNlcnZhYmxlLCBDb3B5YWJsZSwgewotCi0gICAg
ICAgICAgICAvLyBiZWNhdXNlIGxlbmd0aCBpcyBhIGJ1aWx0LWluIHByb3BlcnR5IHdlIG5lZWQg
dG8ga25vdyB0byBqdXN0IGdldCB0aGUKLSAgICAgICAgICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5
LgotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
a2V5ID09PSAnbGVuZ3RoJykgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0
aDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGtleSkgCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV07Ci0gICAgICAgICAgICAgICAgZWxz
ZSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyKGtleSk7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBvYmplY3RBdDogZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXNbaWR4XTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8vIHByaW1pdGl2ZSBmb3IgYXJyYXkgc3VwcG9ydC4KLSAgICAgICAgICAgIHJlcGxhY2U6IGZ1
bmN0aW9uKGlkeCwgYW10LCBvYmplY3RzKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5p
c0Zyb3plbikgCi0gICAgICAgICAgICAgICAgICAgIHRocm93IEZST1pFTl9FUlJPUjsKLQotICAg
ICAgICAgICAgICAgIC8vIGlmIHdlIHJlcGxhY2VkIGV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9m
IGl0ZW1zLCB0aGVuIHBhc3Mgb25seSB0aGUKLSAgICAgICAgICAgICAgICAvLyByZXBsYWNlZCBy
YW5nZS4gT3RoZXJ3aXNlLCBwYXNzIHRoZSBmdWxsIHJlbWFpbmluZyBhcnJheSBsZW5ndGgKLSAg
ICAgICAgICAgICAgICAvLyBzaW5jZSBldmVyeXRoaW5nIGhhcyBzaGlmdGVkCi0gICAgICAgICAg
ICAgICAgdmFyIGxlbiA9IG9iamVjdHMgPyBnZXQob2JqZWN0cywgJ2xlbmd0aCcpIDogMDsKLSAg
ICAgICAgICAgICAgICB0aGlzLmFycmF5Q29udGVudFdpbGxDaGFuZ2UoaWR4LCBhbXQsIGxlbik7
Ci0KLSAgICAgICAgICAgICAgICBpZiAobGVuID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuc3BsaWNlKGlkeCwgYW10KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlKHRoaXMsIGlkeCwgYW10LCBvYmplY3RzKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmFycmF5Q29udGVudERpZENoYW5nZShp
ZHgsIGFtdCwgbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8vIElmIHlvdSBhc2sgZm9yIGFuIHVua25vd24gcHJvcGVydHks
IHRoZW4gdHJ5IHRvIGNvbGxlY3QgdGhlIHZhbHVlCi0gICAgICAgICAgICAvLyBmcm9tIG1lbWJl
ciBpdGVtcy4KLSAgICAgICAgICAgIHVua25vd25Qcm9wZXJ0eTogZnVuY3Rpb24oa2V5LCB2YWx1
ZSkgewotICAgICAgICAgICAgICAgIHZhciByZXQ7IC8vID0gdGhpcy5yZWR1Y2VkUHJvcGVydHko
a2V5LCB2YWx1ZSkgOwotICAgICAgICAgICAgICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCkg
JiYgcmV0ID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gdGhpc1tr
ZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXQgOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gSWYgYnJvd3NlciBkaWQgbm90
IGltcGxlbWVudCBpbmRleE9mIG5hdGl2ZWx5LCB0aGVuIG92ZXJyaWRlIHdpdGgKLSAgICAgICAg
ICAgIC8vIHNwZWNpYWxpemVkIHZlcnNpb24KLSAgICAgICAgICAgIGluZGV4T2Y6IGZ1bmN0aW9u
KG9iamVjdCwgc3RhcnRBdCkgewotICAgICAgICAgICAgICAgIHZhciBpZHgsIGxlbiA9IHRoaXMu
bGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0QXQgPT09IHVuZGVmaW5lZCkgCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPSAoc3RhcnRBdCA8IDApID8gTWF0aC5jZWlsKHN0
YXJ0QXQpIDogTWF0aC5mbG9vcihzdGFydEF0KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRB
dCA8IDApIAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ICs9IGxlbjsKLQotICAgICAgICAg
ICAgICAgIGZvciAoaWR4ID0gc3RhcnRBdDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpc1tpZHhdID09PSBvYmplY3QpIAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlkeCA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxhc3RJbmRleE9mOiBmdW5j
dGlvbihvYmplY3QsIHN0YXJ0QXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgaWR4LCBsZW4gPSB0
aGlzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmIChzdGFydEF0ID09PSB1bmRlZmluZWQp
IAotICAgICAgICAgICAgICAgICAgICBzdGFydEF0ID0gbGVuLTE7Ci0gICAgICAgICAgICAgICAg
ZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRBdCA9IChzdGFydEF0IDwgMCkgPyBNYXRo
LmNlaWwoc3RhcnRBdCkgOiBNYXRoLmZsb29yKHN0YXJ0QXQpOwotICAgICAgICAgICAgICAgIGlm
IChzdGFydEF0IDwgMCkgCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgKz0gbGVuOwotCi0g
ICAgICAgICAgICAgICAgZm9yIChpZHggPSBzdGFydEF0OyBpZHggPj0gMDsgaWR4LS0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNbaWR4XSA9PT0gb2JqZWN0KSAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpZHggOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb3B5OiBmdW5j
dGlvbihkZWVwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZXApIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb3B5KGl0ZW0sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbGljZSgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvLyBSZW1vdmUgYW55IG1l
dGhvZHMgaW1wbGVtZW50ZWQgbmF0aXZlbHkgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgdGhlbQotICAg
ICAgICB2YXIgaWdub3JlID0gWydsZW5ndGgnXTsKLSAgICAgICAgZm9yRWFjaChOYXRpdmVBcnJh
eS5rZXlzKCksIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAgIGlmIChBcnJheS5w
cm90b3R5cGVbbWV0aG9kTmFtZV0pIAotICAgICAgICAgICAgICAgIGlnbm9yZS5wdXNoKG1ldGhv
ZE5hbWUpOwotICAgICAgICB9KTsKLQotICAgICAgICBpZiAoaWdub3JlLmxlbmd0aCA+IDApIHsK
LSAgICAgICAgICAgIE5hdGl2ZUFycmF5ID0gTmF0aXZlQXJyYXkud2l0aG91dC5hcHBseShOYXRp
dmVBcnJheSwgaWdub3JlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBDcmVhdGVzIGFuIGBFbWJlci5OYXRpdmVBcnJheWAgZnJvbSBhbiBBcnJheSBsaWtlIG9iamVj
dC4KLSAgICAgICAgICAgICAgRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3QuIEVt
YmVyLkEgaXMgbm90IG5lZWRlZCBpZgotICAgICAgICAgICAgICBgRW1iZXIuRVhURU5EX1BST1RP
VFlQRVNgIGlzIGB0cnVlYCAodGhlIGRlZmF1bHQgdmFsdWUpLiBIb3dldmVyLAotICAgICAgICAg
ICAgICBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgRW1iZXIuQSB3aGVuIGNyZWF0aW5n
IGFkZG9ucyBmb3IKLSAgICAgICAgICAgICAgZW1iZXIgb3Igd2hlbiB5b3UgY2FuIG5vdCBndWFy
YW50ZWUgdGhhdCBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVNgCi0gICAgICAgICAgICAgIHdpbGwg
YmUgYHRydWVgLgotCi0gICAgICAgICAgICAgIEV4YW1wbGUKLQotICAgICAgICAgICAgICBgYGBq
cwotICAgICAgICAgICAgICB2YXIgUGFnaW5hdGlvbiA9IEVtYmVyLkNvbGxlY3Rpb25WaWV3LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGFnTmFtZTogJ3VsJywKLSAgICAgICAgICAgICAgICBj
bGFzc05hbWVzOiBbJ3BhZ2luYXRpb24nXSwKLQotICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5nZXQoJ2NvbnRlbnQnKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
LnNldCgnY29udGVudCcsIEVtYmVyLkEoKSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgQG1ldGhvZCBBCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAg
ICAgQHJldHVybiB7RW1iZXIuTmF0aXZlQXJyYXl9Ci0gICAgICAgICAgICAqLwotICAgICAgICB2
YXIgQSA9IGZ1bmN0aW9uKGFycikgewotICAgICAgICAgICAgaWYgKGFyciA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgICAgICAgICAgYXJyID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gRW1iZXJBcnJheS5kZXRlY3QoYXJyKSA/IGFyciA6IE5hdGl2ZUFycmF5LmFwcGx5
KGFycik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFjdGl2YXRl
cyB0aGUgbWl4aW4gb24gdGhlIEFycmF5LnByb3RvdHlwZSBpZiBub3QgYWxyZWFkeSBhcHBsaWVk
LiBDYWxsaW5nCi0gICAgICAgICAgICAgIHRoaXMgbWV0aG9kIG1vcmUgdGhhbiBvbmNlIGlzIHNh
ZmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiBlbWJlciBpcyBsb2FkZWQKLSAgICAgICAgICAg
ICAgdW5sZXNzIHlvdSBoYXZlIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Agb3IgYEVtYmVyLkVY
VEVORF9QUk9UT1RZUEVTLkFycmF5YAotICAgICAgICAgICAgICBzZXQgdG8gYGZhbHNlYC4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlCi0KLSAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAg
ICAgaWYgKEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8IEVtYmVyLkVYVEVORF9Q
Uk9UT1RZUEVTLkFycmF5KSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuTmF0aXZlQXJyYXkuYWN0
aXZhdGUoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBAbWV0aG9kIGFjdGl2YXRlCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIuTmF0aXZlQXJy
YXkKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAcmV0dXJuIHt2b2lkfQot
ICAgICAgICAgICAgKi8KLSAgICAgICAgTmF0aXZlQXJyYXkuYWN0aXZhdGUgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIE5hdGl2ZUFycmF5LmFwcGx5KEFycmF5LnByb3RvdHlwZSk7Ci0KLSAg
ICAgICAgICAgIEEgPSBmdW5jdGlvbihhcnIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJy
IHx8IFtdOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoRW1iZXIu
RVhURU5EX1BST1RPVFlQRVMgPT09IHRydWUgfHwgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuQXJy
YXkpIHsKLSAgICAgICAgICAgIE5hdGl2ZUFycmF5LmFjdGl2YXRlKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBFbWJlci5BID0gQTsgLy8gRVM2VE9ETzogU2V0dGluZyBBIG9udG8gdGhlIG9iamVj
dCByZXR1cm5lZCBieSBlbWJlci1tZXRhbC9jb3JlIHRvIGF2b2lkIGNpcmNsZXMKLSAgICAgICAg
X19leHBvcnRzX18uQSA9IEE7Ci0gICAgICAgIF9fZXhwb3J0c19fLk5hdGl2ZUFycmF5ID0gTmF0
aXZlQXJyYXk7Ci0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBOYXRpdmVBcnJheTsK
LSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsCi0gICAg
WyJlbWJlci1ydW50aW1lL3N5c3RlbS9jb3JlX29iamVjdCIsICJlbWJlci1ydW50aW1lL21peGlu
cy9vYnNlcnZhYmxlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18s
IF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwot
ICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJt
b2R1bGUgZW1iZXItcnVudGltZQotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgQ29yZU9i
amVjdCA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgT2JzZXJ2YWJs
ZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAg
ICAgICBgRW1iZXIuT2JqZWN0YCBpcyB0aGUgbWFpbiBiYXNlIGNsYXNzIGZvciBhbGwgRW1iZXIg
b2JqZWN0cy4gSXQgaXMgYSBzdWJjbGFzcwotICAgICAgICAgICAgICBvZiBgRW1iZXIuQ29yZU9i
amVjdGAgd2l0aCB0aGUgYEVtYmVyLk9ic2VydmFibGVgIG1peGluIGFwcGxpZWQuIEZvciBkZXRh
aWxzLAotICAgICAgICAgICAgICBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggb2YgdGhl
c2UuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIE9iamVjdAotICAgICAgICAgICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBleHRlbmRzIEVtYmVyLkNvcmVPYmplY3QKLSAgICAg
ICAgICAgICAgQHVzZXMgRW1iZXIuT2JzZXJ2YWJsZQotICAgICAgICAgICAgKi8KLSAgICAgICAg
dmFyIEVtYmVyT2JqZWN0ID0gQ29yZU9iamVjdC5leHRlbmQoT2JzZXJ2YWJsZSk7Ci0gICAgICAg
IEVtYmVyT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4g
IkVtYmVyLk9iamVjdCI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IEVtYmVyT2JqZWN0OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGltZS9z
eXN0ZW0vb2JqZWN0X3Byb3h5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0
YWwvcHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRh
bC91dGlscyIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9l
dmVudHMiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZW1iZXItbWV0YWwvcHJvcGVydGllcyIs
ICJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2Rl
cGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVu
Y3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18s
IF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2Rl
cGVuZGVuY3kxMV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVs
ZSBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2Rl
cGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0gICAgICAg
IHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBl
bmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIG1ldGEgPSBfX2RlcGVuZGVuY3k0X18ubWV0YTsK
LSAgICAgICAgdmFyIGFkZE9ic2VydmVyID0gX19kZXBlbmRlbmN5NV9fLmFkZE9ic2VydmVyOwot
ICAgICAgICB2YXIgcmVtb3ZlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3k1X18ucmVtb3ZlT2JzZXJ2
ZXI7Ci0gICAgICAgIHZhciBhZGRCZWZvcmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTVfXy5hZGRC
ZWZvcmVPYnNlcnZlcjsKLSAgICAgICAgdmFyIHJlbW92ZUJlZm9yZU9ic2VydmVyID0gX19kZXBl
bmRlbmN5NV9fLnJlbW92ZUJlZm9yZU9ic2VydmVyOwotICAgICAgICB2YXIgcHJvcGVydHlXaWxs
Q2hhbmdlID0gX19kZXBlbmRlbmN5Nl9fLnByb3BlcnR5V2lsbENoYW5nZTsKLSAgICAgICAgdmFy
IHByb3BlcnR5RGlkQ2hhbmdlID0gX19kZXBlbmRlbmN5Nl9fLnByb3BlcnR5RGlkQ2hhbmdlOwot
ICAgICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k3X18uY29tcHV0ZWQ7Ci0gICAgICAg
IHZhciBkZWZpbmVQcm9wZXJ0eSA9IF9fZGVwZW5kZW5jeThfXy5kZWZpbmVQcm9wZXJ0eTsKLSAg
ICAgICAgdmFyIG9ic2VydmVyID0gX19kZXBlbmRlbmN5OV9fLm9ic2VydmVyOwotICAgICAgICB2
YXIgZm10ID0gX19kZXBlbmRlbmN5MTBfXy5mbXQ7Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9
IF9fZGVwZW5kZW5jeTExX19bImRlZmF1bHQiXTsKLQotICAgICAgICBmdW5jdGlvbiBjb250ZW50
UHJvcGVydHlXaWxsQ2hhbmdlKGNvbnRlbnQsIGNvbnRlbnRLZXkpIHsKLSAgICAgICAgICAgIHZh
ciBrZXkgPSBjb250ZW50S2V5LnNsaWNlKDgpOyAvLyByZW1vdmUgImNvbnRlbnQuIgotICAgICAg
ICAgICAgaWYgKGtleSBpbiB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gaWYgc2hhZG93ZWQgaW4gcHJveHkKLSAgICAgICAgICAg
IHByb3BlcnR5V2lsbENoYW5nZSh0aGlzLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gY29udGVudFByb3BlcnR5RGlkQ2hhbmdlKGNvbnRlbnQsIGNvbnRlbnRLZXkpIHsKLSAg
ICAgICAgICAgIHZhciBrZXkgPSBjb250ZW50S2V5LnNsaWNlKDgpOyAvLyByZW1vdmUgImNvbnRl
bnQuIgotICAgICAgICAgICAgaWYgKGtleSBpbiB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gaWYgc2hhZG93ZWQgaW4gcHJveHkK
LSAgICAgICAgICAgIHByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsIGtleSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLk9iamVjdFByb3h5YCBmb3J3YXJkcyBh
bGwgcHJvcGVydGllcyBub3QgZGVmaW5lZCBieSB0aGUgcHJveHkgaXRzZWxmCi0gICAgICAgICAg
ICAgIHRvIGEgcHJveGllZCBgY29udGVudGAgb2JqZWN0LgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgb2JqZWN0ID0gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0g
ICAgICAgICAgICAgICAgbmFtZTogJ0ZvbycKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgcHJveHkgPSBFbWJlci5PYmplY3RQcm94eS5jcmVhdGUoewotICAgICAgICAgICAgICAg
IGNvbnRlbnQ6IG9iamVjdAotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAvLyBB
Y2Nlc3MgYW5kIGNoYW5nZSBleGlzdGluZyBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgIHByb3h5
LmdldCgnbmFtZScpICAgICAgICAgIC8vICdGb28nCi0gICAgICAgICAgICAgIHByb3h5LnNldCgn
bmFtZScsICdCYXInKTsKLSAgICAgICAgICAgICAgb2JqZWN0LmdldCgnbmFtZScpICAgICAgICAg
Ly8gJ0JhcicKLQotICAgICAgICAgICAgICAvLyBDcmVhdGUgbmV3ICdkZXNjcmlwdGlvbicgcHJv
cGVydHkgb24gYG9iamVjdGAKLSAgICAgICAgICAgICAgcHJveHkuc2V0KCdkZXNjcmlwdGlvbics
ICdGb28gaXMgYSB3aGl6Ym9vIGJheicpOwotICAgICAgICAgICAgICBvYmplY3QuZ2V0KCdkZXNj
cmlwdGlvbicpICAvLyAnRm9vIGlzIGEgd2hpemJvbyBiYXonCi0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIFdoaWxlIGBjb250ZW50YCBpcyB1bnNldCwgc2V0dGluZyBhIHByb3Bl
cnR5IHRvIGJlIGRlbGVnYXRlZCB3aWxsIHRocm93IGFuCi0gICAgICAgICAgICAgIEVycm9yLgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgcHJveHkgPSBFbWJl
ci5PYmplY3RQcm94eS5jcmVhdGUoewotICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG51bGwsCi0g
ICAgICAgICAgICAgICAgZmxhZzogbnVsbAotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgcHJveHkuc2V0KCdmbGFnJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgIHByb3h5LmdldCgnZmxh
ZycpOyAgICAgICAgIC8vIHRydWUKLSAgICAgICAgICAgICAgcHJveHkuZ2V0KCdmb28nKTsgICAg
ICAgICAgLy8gdW5kZWZpbmVkCi0gICAgICAgICAgICAgIHByb3h5LnNldCgnZm9vJywgJ2RhdGEn
KTsgIC8vIHRocm93cyBFcnJvcgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBE
ZWxlZ2F0ZWQgcHJvcGVydGllcyBjYW4gYmUgYm91bmQgdG8gYW5kIHdpbGwgY2hhbmdlIHdoZW4g
Y29udGVudCBpcyB1cGRhdGVkLgotCi0gICAgICAgICAgICAgIENvbXB1dGVkIHByb3BlcnRpZXMg
b24gdGhlIHByb3h5IGl0c2VsZiBjYW4gZGVwZW5kIG9uIGRlbGVnYXRlZCBwcm9wZXJ0aWVzLgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgUHJveHlXaXRoQ29t
cHV0ZWRQcm9wZXJ0eSA9IEVtYmVyLk9iamVjdFByb3h5LmV4dGVuZCh7Ci0gICAgICAgICAgICAg
ICAgZnVsbE5hbWU6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE5h
bWUgPSB0aGlzLmdldCgnZmlyc3ROYW1lJyksCi0gICAgICAgICAgICAgICAgICAgICAgbGFzdE5h
bWUgPSB0aGlzLmdldCgnbGFzdE5hbWUnKTsKLSAgICAgICAgICAgICAgICAgIGlmIChmaXJzdE5h
bWUgJiYgbGFzdE5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSAr
ICcgJyArIGxhc3ROYW1lOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZpcnN0TmFtZSB8fCBsYXN0TmFtZTsKLSAgICAgICAgICAgICAgICB9LnByb3BlcnR5
KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICBwcm94eSA9IFByb3h5V2l0aENvbXB1dGVkUHJvcGVydHkuY3JlYXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgcHJveHkuZ2V0KCdmdWxsTmFtZScpOyAgLy8gdW5kZWZpbmVkCi0gICAgICAgICAg
ICAgIHByb3h5LnNldCgnY29udGVudCcsIHsKLSAgICAgICAgICAgICAgICBmaXJzdE5hbWU6ICdU
b20nLCBsYXN0TmFtZTogJ0RhbGUnCi0gICAgICAgICAgICAgIH0pOyAvLyB0cmlnZ2VycyBwcm9w
ZXJ0eSBjaGFuZ2UgZm9yIGZ1bGxOYW1lIG9uIHByb3h5Ci0KLSAgICAgICAgICAgICAgcHJveHku
Z2V0KCdmdWxsTmFtZScpOyAgLy8gJ1RvbSBEYWxlJwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBAY2xhc3MgT2JqZWN0UHJveHkKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBF
bWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICAgICAgICAgICov
Ci0gICAgICAgIHZhciBPYmplY3RQcm94eSA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVz
IHdpbGwgYmUgZm9yd2FyZGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjb250
ZW50Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEVtYmVyLk9iamVjdAotICAgICAgICAgICAg
ICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Y29udGVudDogbnVsbCwKLSAgICAgICAgICAgIF9jb250ZW50RGlkQ2hhbmdlOiBvYnNlcnZlcign
Y29udGVudCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ2Fu
J3Qgc2V0IE9iamVjdFByb3h5J3MgY29udGVudCB0byBpdHNlbGYiLCBnZXQodGhpcywgJ2NvbnRl
bnQnKSAhPT0gdGhpcyk7Ci0gICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgaXNUcnV0aHk6
IGNvbXB1dGVkLmJvb2woJ2NvbnRlbnQnKSwKLQotICAgICAgICAgICAgX2RlYnVnQ29udGFpbmVy
S2V5OiBudWxsLAotCi0gICAgICAgICAgICB3aWxsV2F0Y2hQcm9wZXJ0eTogZnVuY3Rpb24gKGtl
eSkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50S2V5ID0gJ2NvbnRlbnQuJyArIGtleTsK
LSAgICAgICAgICAgICAgICBhZGRCZWZvcmVPYnNlcnZlcih0aGlzLCBjb250ZW50S2V5LCBudWxs
LCBjb250ZW50UHJvcGVydHlXaWxsQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICBhZGRPYnNlcnZl
cih0aGlzLCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlEaWRDaGFuZ2UpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGlkVW53YXRjaFByb3BlcnR5OiBmdW5jdGlvbiAo
a2V5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRLZXkgPSAnY29udGVudC4nICsga2V5
OwotICAgICAgICAgICAgICAgIHJlbW92ZUJlZm9yZU9ic2VydmVyKHRoaXMsIGNvbnRlbnRLZXks
IG51bGwsIGNvbnRlbnRQcm9wZXJ0eVdpbGxDaGFuZ2UpOwotICAgICAgICAgICAgICAgIHJlbW92
ZU9ic2VydmVyKHRoaXMsIGNvbnRlbnRLZXksIG51bGwsIGNvbnRlbnRQcm9wZXJ0eURpZENoYW5n
ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB1bmtub3duUHJvcGVydHk6IGZ1bmN0
aW9uIChrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29u
dGVudCcpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnZXQoY29udGVudCwga2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBzZXRVbmtub3duUHJvcGVydHk6IGZ1bmN0aW9uIChrZXks
IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG0gPSBtZXRhKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChtLnByb3RvID09PSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IG1hcmtlZCBhcyBwcm90b3R5cGUgdGhlbiBqdXN0IGRlZmluZVByb3BlcnR5Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGRlbGVnYXRlCi0gICAgICAgICAgICAgICAgICAgIGRl
ZmluZVByb3BlcnR5KHRoaXMsIGtleSwgbnVsbCwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFy
IGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLSAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoZm10KCJDYW5ub3QgZGVsZWdhdGUgc2V0KCclQCcsICVAKSB0byB0aGUgJ2NvbnRlbnQn
IHByb3BlcnR5IG9mIG9iamVjdCBwcm94eSAlQDogaXRzICdjb250ZW50JyBpcyB1bmRlZmluZWQu
IiwgW2tleSwgdmFsdWUsIHRoaXNdKSwgY29udGVudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHNldChjb250ZW50LCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9KTsK
LQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gT2JqZWN0UHJveHk7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS9zZXQiLAotICAgIFsiZW1iZXItbWV0
YWwvY29yZSIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfc2V0IiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2lzX25vbmUiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2Jq
ZWN0IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfZW51bWVyYWJsZSIsICJlbWJlci1y
dW50aW1lL21peGlucy9lbnVtZXJhYmxlIiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxl
IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSIsICJlbWJlci1tZXRhbC9lcnJvciIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMiLCAiZW1iZXItbWV0YWwvbWl4aW4iLCAiZW1i
ZXItbWV0YWwvY29tcHV0ZWQiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5j
eTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywg
X19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBl
bmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9fZGVwZW5kZW5j
eTExX18sIF9fZGVwZW5kZW5jeTEyX18sIF9fZGVwZW5kZW5jeTEzX18sIF9fZGVwZW5kZW5jeTE0
X18sIF9fZGVwZW5kZW5jeTE1X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICBA
c3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBFbWJl
ciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5pc05vbmUK
LQotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5Ml9fLmdldDsKLSAgICAgICAgdmFyIHNl
dCA9IF9fZGVwZW5kZW5jeTNfXy5zZXQ7Ci0gICAgICAgIHZhciBndWlkRm9yID0gX19kZXBlbmRl
bmN5NF9fLmd1aWRGb3I7Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3k1X18uaXNO
b25lOwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5Nl9fLmZtdDsKLSAgICAgICAgdmFy
IENvcmVPYmplY3QgPSBfX2RlcGVuZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIE11
dGFibGVFbnVtZXJhYmxlID0gX19kZXBlbmRlbmN5OF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBFbnVtZXJhYmxlID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBD
b3B5YWJsZSA9IF9fZGVwZW5kZW5jeTEwX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEZyZWV6
YWJsZSA9IF9fZGVwZW5kZW5jeTExX18uRnJlZXphYmxlOwotICAgICAgICB2YXIgRlJPWkVOX0VS
Uk9SID0gX19kZXBlbmRlbmN5MTFfXy5GUk9aRU5fRVJST1I7Ci0gICAgICAgIHZhciBFbWJlckVy
cm9yID0gX19kZXBlbmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcHJvcGVydHlX
aWxsQ2hhbmdlID0gX19kZXBlbmRlbmN5MTNfXy5wcm9wZXJ0eVdpbGxDaGFuZ2U7Ci0gICAgICAg
IHZhciBwcm9wZXJ0eURpZENoYW5nZSA9IF9fZGVwZW5kZW5jeTEzX18ucHJvcGVydHlEaWRDaGFu
Z2U7Ci0gICAgICAgIHZhciBhbGlhc01ldGhvZCA9IF9fZGVwZW5kZW5jeTE0X18uYWxpYXNNZXRo
b2Q7Ci0gICAgICAgIHZhciBjb21wdXRlZCA9IF9fZGVwZW5kZW5jeTE1X18uY29tcHV0ZWQ7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIG9mIG9i
amVjdHMuCi0KLSAgICAgICAgICAgICAgQSBTZXQgd29ya3MgYSBiaXQgbGlrZSBhbiBhcnJheSBl
eGNlcHQgdGhhdCBpdHMgaXRlbXMgYXJlIG5vdCBvcmRlcmVkLiBZb3UKLSAgICAgICAgICAgICAg
Y2FuIGNyZWF0ZSBhIHNldCB0byBlZmZpY2llbnRseSB0ZXN0IGZvciBtZW1iZXJzaGlwIGZvciBh
biBvYmplY3QuIFlvdSBjYW4KLSAgICAgICAgICAgICAgYWxzbyBpdGVyYXRlIHRocm91Z2ggYSBz
ZXQganVzdCBsaWtlIGFuIGFycmF5LCBldmVuIGFjY2Vzc2luZyBvYmplY3RzIGJ5Ci0gICAgICAg
ICAgICAgIGluZGV4LCBob3dldmVyIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBhcyB0byB0aGVpciBv
cmRlci4KLQotICAgICAgICAgICAgICBBbGwgU2V0cyBhcmUgb2JzZXJ2YWJsZSB2aWEgdGhlIEVu
dW1lcmFibGUgT2JzZXJ2ZXIgQVBJIC0gd2hpY2ggd29ya3MKLSAgICAgICAgICAgICAgb24gYW55
IGVudW1lcmFibGUgb2JqZWN0IGluY2x1ZGluZyBib3RoIFNldHMgYW5kIEFycmF5cy4KLQotICAg
ICAgICAgICAgICAjIyBDcmVhdGluZyBhIFNldAotCi0gICAgICAgICAgICAgIFlvdSBjYW4gY3Jl
YXRlIGEgc2V0IGxpa2UgeW91IHdvdWxkIG1vc3Qgb2JqZWN0cyB1c2luZwotICAgICAgICAgICAg
ICBgbmV3IEVtYmVyLlNldCgpYC4gTW9zdCBuZXcgc2V0cyB5b3UgY3JlYXRlIHdpbGwgYmUgZW1w
dHksIGJ1dCB5b3UgY2FuCi0gICAgICAgICAgICAgIGFsc28gaW5pdGlhbGl6ZSB0aGUgc2V0IHdp
dGggc29tZSBjb250ZW50IGJ5IHBhc3NpbmcgYW4gYXJyYXkgb3Igb3RoZXIKLSAgICAgICAgICAg
ICAgZW51bWVyYWJsZSBvZiBvYmplY3RzIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLQotICAgICAgICAg
ICAgICBGaW5hbGx5LCB5b3UgY2FuIHBhc3MgaW4gYW4gZXhpc3Rpbmcgc2V0IGFuZCB0aGUgc2V0
IHdpbGwgYmUgY29waWVkLiBZb3UKLSAgICAgICAgICAgICAgY2FuIGFsc28gY3JlYXRlIGEgY29w
eSBvZiBhIHNldCBieSBjYWxsaW5nIGBFbWJlci5TZXQjY29weSgpYC4KLQotICAgICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBuZXcgZW1wdHkgc2V0
Ci0gICAgICAgICAgICAgIHZhciBmb3VuZE5hbWVzID0gbmV3IEVtYmVyLlNldCgpOwotCi0gICAg
ICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzZXQgd2l0aCBmb3VyIG5hbWVzIGluIGl0LgotICAgICAg
ICAgICAgICB2YXIgbmFtZXMgPSBuZXcgRW1iZXIuU2V0KFsiQ2hhcmxlcyIsICJUb20iLCAiSnVh
biIsICJBbGV4Il0pOyAvLyA6UAotCi0gICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBjb3B5IG9m
IHRoZSBuYW1lcyBzZXQuCi0gICAgICAgICAgICAgIHZhciBuYW1lc0NvcHkgPSBuZXcgRW1iZXIu
U2V0KG5hbWVzKTsKLQotICAgICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlLgotICAgICAgICAg
ICAgICB2YXIgYW5vdGhlck5hbWVzQ29weSA9IG5hbWVzLmNvcHkoKTsKLSAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgIyMgQWRkaW5nL1JlbW92aW5nIE9iamVjdHMKLQotICAgICAg
ICAgICAgICBZb3UgZ2VuZXJhbGx5IGFkZCBvciByZW1vdmUgb2JqZWN0cyBmcm9tIGEgc2V0IHVz
aW5nIGBhZGQoKWAgb3IKLSAgICAgICAgICAgICAgYHJlbW92ZSgpYC4gWW91IGNhbiBhZGQgYW55
IHR5cGUgb2Ygb2JqZWN0IGluY2x1ZGluZyBwcmltaXRpdmVzIHN1Y2ggYXMKLSAgICAgICAgICAg
ICAgbnVtYmVycywgc3RyaW5ncywgYW5kIGJvb2xlYW5zLgotCi0gICAgICAgICAgICAgIFVubGlr
ZSBhcnJheXMsIG9iamVjdHMgY2FuIG9ubHkgZXhpc3Qgb25lIHRpbWUgaW4gYSBzZXQuIElmIHlv
dSBjYWxsIGBhZGQoKWAKLSAgICAgICAgICAgICAgb24gYSBzZXQgd2l0aCB0aGUgc2FtZSBvYmpl
Y3QgbXVsdGlwbGUgdGltZXMsIHRoZSBvYmplY3Qgd2lsbCBvbmx5IGJlIGFkZGVkCi0gICAgICAg
ICAgICAgIG9uY2UuIExpa2V3aXNlLCBjYWxsaW5nIGByZW1vdmUoKWAgd2l0aCB0aGUgc2FtZSBv
YmplY3QgbXVsdGlwbGUgdGltZXMgd2lsbAotICAgICAgICAgICAgICByZW1vdmUgdGhlIG9iamVj
dCB0aGUgZmlyc3QgdGltZSBhbmQgaGF2ZSBubyBlZmZlY3Qgb24gZnV0dXJlIGNhbGxzIHVudGls
Ci0gICAgICAgICAgICAgIHlvdSBhZGQgdGhlIG9iamVjdCB0byB0aGUgc2V0IGFnYWluLgotCi0g
ICAgICAgICAgICAgIE5PVEU6IFlvdSBjYW5ub3QgYWRkL3JlbW92ZSBgbnVsbGAgb3IgYHVuZGVm
aW5lZGAgdG8gYSBzZXQuIEFueSBhdHRlbXB0IHRvIGRvCi0gICAgICAgICAgICAgIHNvIHdpbGwg
YmUgaWdub3JlZC4KLQotICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBhZGQvcmVtb3ZlIHlv
dSBjYW4gYWxzbyBjYWxsIGBwdXNoKClgL2Bwb3AoKWAuIFB1c2ggYmVoYXZlcwotICAgICAgICAg
ICAgICBqdXN0IGxpa2UgYGFkZCgpYCBidXQgYHBvcCgpYCwgdW5saWtlIGByZW1vdmUoKWAgd2ls
bCBwaWNrIGFuIGFyYml0cmFyeQotICAgICAgICAgICAgICBvYmplY3QsIHJlbW92ZSBpdCBhbmQg
cmV0dXJuIGl0LiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gdXNlIGEgc2V0IGFzIGEgam9iCi0gICAg
ICAgICAgICAgIHF1ZXVlIHdoZW4geW91IGRvbid0IGNhcmUgd2hpY2ggb3JkZXIgdGhlIGpvYnMg
YXJlIGV4ZWN1dGVkIGluLgotCi0gICAgICAgICAgICAgICMjIFRlc3RpbmcgZm9yIGFuIE9iamVj
dAotCi0gICAgICAgICAgICAgIFRvIHRlc3QgZm9yIGFuIG9iamVjdCdzIHByZXNlbmNlIGluIGEg
c2V0IHlvdSBzaW1wbHkgY2FsbAotICAgICAgICAgICAgICBgRW1iZXIuU2V0I2NvbnRhaW5zKClg
LgotCi0gICAgICAgICAgICAgICMjIE9ic2VydmluZyBjaGFuZ2VzCi0KLSAgICAgICAgICAgICAg
V2hlbiB1c2luZyBgRW1iZXIuU2V0YCwgeW91IGNhbiBvYnNlcnZlIHRoZSBgIltdImAgcHJvcGVy
dHkgdG8gYmUKLSAgICAgICAgICAgICAgYWxlcnRlZCB3aGVuZXZlciB0aGUgY29udGVudCBjaGFu
Z2VzLiBZb3UgY2FuIGFsc28gYWRkIGFuIGVudW1lcmFibGUKLSAgICAgICAgICAgICAgb2JzZXJ2
ZXIgdG8gdGhlIHNldCB0byBiZSBub3RpZmllZCBvZiBzcGVjaWZpYyBvYmplY3RzIHRoYXQgYXJl
IGFkZGVkIGFuZAotICAgICAgICAgICAgICByZW1vdmVkIGZyb20gdGhlIHNldC4gU2VlIFtFbWJl
ci5FbnVtZXJhYmxlXSgvYXBpL2NsYXNzZXMvRW1iZXIuRW51bWVyYWJsZS5odG1sKQotICAgICAg
ICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBlbnVtZXJhYmxlcy4KLQotICAgICAgICAg
ICAgICBUaGlzIGlzIG9mdGVuIHVuaGVscGZ1bC4gSWYgeW91IGFyZSBmaWx0ZXJpbmcgc2V0cyBv
ZiBvYmplY3RzLCBmb3IgaW5zdGFuY2UsCi0gICAgICAgICAgICAgIGl0IGlzIHZlcnkgaW5lZmZp
Y2llbnQgdG8gcmUtZmlsdGVyIGFsbCBvZiB0aGUgaXRlbXMgZWFjaCB0aW1lIHRoZSBzZXQKLSAg
ICAgICAgICAgICAgY2hhbmdlcy4gSXQgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBjb3VsZCBqdXN0
IGFkanVzdCB0aGUgZmlsdGVyZWQgc2V0IGJhc2VkCi0gICAgICAgICAgICAgIG9uIHdoYXQgd2Fz
IGNoYW5nZWQgb24gdGhlIG9yaWdpbmFsIHNldC4gVGhlIHNhbWUgaXNzdWUgYXBwbGllcyB0byBt
ZXJnaW5nCi0gICAgICAgICAgICAgIHNldHMsIGFzIHdlbGwuCi0KLSAgICAgICAgICAgICAgIyMg
T3RoZXIgTWV0aG9kcwotCi0gICAgICAgICAgICAgIGBFbWJlci5TZXRgIHByaW1hcnkgaW1wbGVt
ZW50cyBvdGhlciBtaXhpbiBBUElzLiBGb3IgYSBjb21wbGV0ZSByZWZlcmVuY2UKLSAgICAgICAg
ICAgICAgb24gdGhlIG1ldGhvZHMgeW91IHdpbGwgdXNlIHdpdGggYEVtYmVyLlNldGAsIHBsZWFz
ZSBjb25zdWx0IHRoZXNlIG1peGlucy4KLSAgICAgICAgICAgICAgVGhlIG1vc3QgdXNlZnVsIG9u
ZXMgd2lsbCBiZSBgRW1iZXIuRW51bWVyYWJsZWAgYW5kCi0gICAgICAgICAgICAgIGBFbWJlci5N
dXRhYmxlRW51bWVyYWJsZWAgd2hpY2ggaW1wbGVtZW50IG1vc3Qgb2YgdGhlIGNvbW1vbiBpdGVy
YXRvcgotICAgICAgICAgICAgICBtZXRob2RzIHlvdSBhcmUgdXNlZCB0byBvbiBBcnJheS4KLQot
ICAgICAgICAgICAgICBOb3RlIHRoYXQgeW91IGNhbiBhbHNvIHVzZSB0aGUgYEVtYmVyLkNvcHlh
YmxlYCBhbmQgYEVtYmVyLkZyZWV6YWJsZWAKLSAgICAgICAgICAgICAgQVBJcyBvbiBgRW1iZXIu
U2V0YCBhcyB3ZWxsLiBPbmNlIGEgc2V0IGlzIGZyb3plbiBpdCBjYW4gbm8gbG9uZ2VyIGJlCi0g
ICAgICAgICAgICAgIG1vZGlmaWVkLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzIHRoYXQgd2hlbiB5
b3UgY2FsbCBgZnJvemVuQ29weSgpYCBvbiBpdCwKLSAgICAgICAgICAgICAgRW1iZXIgd2lsbCBh
dm9pZCBtYWtpbmcgY29waWVzIG9mIHRoZSBzZXQuIFRoaXMgYWxsb3dzIHlvdSB0byB3cml0ZQot
ICAgICAgICAgICAgICBjb2RlIHRoYXQgY2FuIGtub3cgd2l0aCBjZXJ0YWludHkgd2hlbiB0aGUg
dW5kZXJseWluZyBzZXQgZGF0YSB3aWxsIG9yCi0gICAgICAgICAgICAgIHdpbGwgbm90IGJlIG1v
ZGlmaWVkLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBTZXQKLSAgICAgICAgICAgICAgQG5hbWVz
cGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5Db3JlT2JqZWN0Ci0gICAg
ICAgICAgICAgIEB1c2VzIEVtYmVyLk11dGFibGVFbnVtZXJhYmxlCi0gICAgICAgICAgICAgIEB1
c2VzIEVtYmVyLkNvcHlhYmxlCi0gICAgICAgICAgICAgIEB1c2VzIEVtYmVyLkZyZWV6YWJsZQot
ICAgICAgICAgICAgICBAc2luY2UgRW1iZXIgMC45Ci0gICAgICAgICAgICAqLwotICAgICAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gQ29yZU9iamVjdC5leHRlbmQoTXV0YWJsZUVudW1lcmFi
bGUsIENvcHlhYmxlLCBGcmVlemFibGUsIHsKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAg
ICAgLy8gSU1QTEVNRU5UIEVOVU1FUkFCTEUgQVBJUwotICAgICAgICAgICAgLy8KLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvcGVydHkgd2lsbCBjaGFuZ2Ug
YXMgdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXQgY2hhbmdlcy4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgbGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIG51
bWJlcgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCAwCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgbGVuZ3RoOiAwLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQ2xlYXJzIHRoZSBzZXQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHJl
dXNlIGFuIGV4aXN0aW5nIHNldAotICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGhhdmluZyB0
byByZWNyZWF0ZSBpdC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBuZXcgRW1iZXIuU2V0KFsicmVkIiwgImdyZWVu
IiwgImJsdWUiXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5sZW5ndGg7ICAvLyAzCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9ycy5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBj
b2xvcnMubGVuZ3RoOyAgLy8gMAotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGNsZWFyCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0Vt
YmVyLlNldH0gQW4gZW1wdHkgU2V0Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
Y2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRnJvemVuKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKEZST1pFTl9FUlJPUik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGdldCh0aGlz
LCAnbGVuZ3RoJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgZ3VpZDsKLQotICAgICAgICAgICAgICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnRX
aWxsQ2hhbmdlKGxlbiwgMCk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHRo
aXMsICdmaXJzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5V2lsbENoYW5nZSh0
aGlzLCAnbGFzdE9iamVjdCcpOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBndWlkID0gZ3VpZEZvcih0aGlzW2ld
KTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbZ3VpZF07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzW2ldOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHNldCh0aGlzLCAnbGVuZ3RoJywgMCk7Ci0KLSAgICAgICAgICAgICAgICBwcm9wZXJ0eURp
ZENoYW5nZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eURp
ZENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgIHRoaXMuZW51bWVy
YWJsZUNvbnRlbnREaWRDaGFuZ2UobGVuLCAwKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIG9iamVjdCBpcyBhbHNvIGFuIGVudW1lcmFi
bGUgdGhhdCBjb250YWlucyB0aGUKLSAgICAgICAgICAgICAgICAgICAgc2FtZSBvYmplY3RzIGFz
IHRoZSByZWNlaXZlci4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbInJlZCIsICJncmVlbiIsICJibHVlIl0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzYW1lX2NvbG9ycyA9IG5ldyBFbWJlci5TZXQoY29sb3Jz
KTsKLQotICAgICAgICAgICAgICAgICAgICBzYW1lX2NvbG9ycy5pc0VxdWFsKGNvbG9ycyk7ICAg
ICAgICAgICAgICAgLy8gdHJ1ZQotICAgICAgICAgICAgICAgICAgICBzYW1lX2NvbG9ycy5pc0Vx
dWFsKFsicHVycGxlIiwgImJyb3duIl0pOyAgLy8gZmFsc2UKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpc0VxdWFsCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RW1iZXIuU2V0fSBvYmogdGhlIG90aGVyIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBpc0VxdWFsOiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgICAgICAvLyBmYWls
IGZhc3QKLSAgICAgICAgICAgICAgICBpZiAoIUVudW1lcmFibGUuZGV0ZWN0KG9iaikpIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbG9j
ID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KG9iaiwgJ2xl
bmd0aCcpICE9PSBsb2MpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgICAgICB3aGlsZSAoLS1sb2MgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIW9iai5jb250YWlucyh0aGlzW2xvY10pKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBBZGRzIGFuIG9iamVjdCB0byB0aGUgc2V0LiBPbmx5IG5vbi1gbnVsbGAgb2JqZWN0cyBj
YW4gYmUgYWRkZWQgdG8gYSBzZXQKLSAgICAgICAgICAgICAgICAgICAgYW5kIHRob3NlIGNhbiBv
bmx5IGJlIGFkZGVkIG9uY2UuIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgc2V0IG9y
Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBwYXNzZWQgdmFsdWUgaXMgbnVsbCB0aGlzIG1ldGhv
ZCB3aWxsIGhhdmUgbm8gZWZmZWN0LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4g
YWxpYXMgZm9yIGBFbWJlci5NdXRhYmxlRW51bWVyYWJsZS5hZGRPYmplY3QoKWAuCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29s
b3JzID0gbmV3IEVtYmVyLlNldCgpOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuYWRkKCJi
bHVlIik7ICAgICAvLyBbImJsdWUiXQotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuYWRkKCJi
bHVlIik7ICAgICAvLyBbImJsdWUiXQotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuYWRkKCJy
ZWQiKTsgICAgICAvLyBbImJsdWUiLCAicmVkIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3Jz
LmFkZChudWxsKTsgICAgICAgLy8gWyJibHVlIiwgInJlZCJdCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9ycy5hZGQodW5kZWZpbmVkKTsgIC8vIFsiYmx1ZSIsICJyZWQiXQotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gYWRkLgotICAgICAg
ICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5TZXR9IFRoZSBzZXQgaXRzZWxmLgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkZDogYWxpYXNNZXRob2QoJ2FkZE9iamVjdCcp
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB0aGUgb2Jq
ZWN0IGZyb20gdGhlIHNldCBpZiBpdCBpcyBmb3VuZC4gSWYgeW91IHBhc3MgYSBgbnVsbGAgdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgb3IgYW4gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBub3Qg
aW4gdGhlIHNldCwgdGhpcyBtZXRob2Qgd2lsbCBoYXZlIG5vCi0gICAgICAgICAgICAgICAgICAg
IGVmZmVjdC4gVGhpcyBpcyBhbiBhbGlhcyBmb3IgYEVtYmVyLk11dGFibGVFbnVtZXJhYmxlLnJl
bW92ZU9iamVjdCgpYC4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBuZXcgRW1iZXIuU2V0KFsicmVkIiwgImdyZWVu
IiwgImJsdWUiXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9ycy5yZW1vdmUoInJlZCIpOyAg
ICAgLy8gWyJibHVlIiwgImdyZWVuIl0KLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnJlbW92
ZSgicHVycGxlIik7ICAvLyBbImJsdWUiLCAiZ3JlZW4iXQotICAgICAgICAgICAgICAgICAgICBj
b2xvcnMucmVtb3ZlKG51bGwpOyAgICAgIC8vIFsiYmx1ZSIsICJncmVlbiJdCi0gICAgICAgICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUK
LSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuU2V0fSBUaGUgc2V0IGl0c2VsZi4K
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmU6IGFsaWFzTWV0aG9kKCdy
ZW1vdmVPYmplY3QnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJl
bW92ZXMgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBzZXQgYW5kIHJldHVybnMgaXQsIG9yIGBu
dWxsYCBpZiBpdCdzIGVtcHR5LgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBFbWJlci5TZXQoWyJncmVlbiIs
ICJibHVlIl0pOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMucG9wKCk7ICAvLyAiYmx1ZSIK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnBvcCgpOyAgLy8gImdyZWVuIgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcnMucG9wKCk7ICAvLyBudWxsCi0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcG9wCi0gICAgICAgICAgICAgICAgICAg
IEByZXR1cm4ge09iamVjdH0gVGhlIHJlbW92ZWQgb2JqZWN0IGZyb20gdGhlIHNldCBvciBudWxs
LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBvcDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGdldCh0aGlzLCAnaXNGcm96ZW4nKSkgCi0gICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKEZST1pFTl9FUlJPUik7Ci0gICAgICAgICAgICAg
ICAgdmFyIG9iaiA9IHRoaXMubGVuZ3RoID4gMCA/IHRoaXNbdGhpcy5sZW5ndGgtMV0gOiBudWxs
OwotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKG9iaik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG9iajsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICBJbnNlcnRzIHRoZSBnaXZlbiBvYmplY3Qgb24gdG8gdGhlIGVuZCBvZiB0aGUgc2V0
LiBJdCByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgIHRoZSBzZXQgaXRzZWxmLgotCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGBFbWJlci5NdXRhYmxlRW51bWVy
YWJsZS5hZGRPYmplY3QoKWAuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEVtYmVyLlNldCgpOwotICAgICAg
ICAgICAgICAgICAgICBjb2xvcnMucHVzaCgicmVkIik7ICAgLy8gWyJyZWQiXQotICAgICAgICAg
ICAgICAgICAgICBjb2xvcnMucHVzaCgiZ3JlZW4iKTsgLy8gWyJyZWQiLCAiZ3JlZW4iXQotICAg
ICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgiYmx1ZSIpOyAgLy8gWyJyZWQiLCAiZ3JlZW4i
LCAiYmx1ZSJdCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgcHVzaAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5TZXR9IFRo
ZSBzZXQgaXRzZWxmLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHB1c2g6IGFs
aWFzTWV0aG9kKCdhZGRPYmplY3QnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIFJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBzZXQgYW5kIHJldHVybnMg
aXQsIG9yIGBudWxsYCBpZiBpdCdzIGVtcHR5LgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMg
aXMgYW4gYWxpYXMgZm9yIGBFbWJlci5TZXQucG9wKClgLgotCi0gICAgICAgICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBFbWJl
ci5TZXQoWyJncmVlbiIsICJibHVlIl0pOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuc2hp
ZnQoKTsgIC8vICJibHVlIgotICAgICAgICAgICAgICAgICAgICBjb2xvcnMuc2hpZnQoKTsgIC8v
ICJncmVlbiIKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzLnNoaWZ0KCk7ICAvLyBudWxsCi0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgc2hp
ZnQKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgcmVtb3ZlZCBvYmpl
Y3QgZnJvbSB0aGUgc2V0IG9yIG51bGwuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgc2hpZnQ6IGFsaWFzTWV0aG9kKCdwb3AnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIEluc2VydHMgdGhlIGdpdmVuIG9iamVjdCBvbiB0byB0aGUgZW5kIG9mIHRo
ZSBzZXQuIEl0IHJldHVybnMKLSAgICAgICAgICAgICAgICAgICAgdGhlIHNldCBpdHNlbGYuCi0K
LSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBhbGlhcyBvZiBgRW1iZXIuU2V0LnB1c2go
KWAKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBjb2xvcnMgPSBuZXcgRW1iZXIuU2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bG9ycy51bnNoaWZ0KCJyZWQiKTsgICAgLy8gWyJyZWQiXQotICAgICAgICAgICAgICAgICAgICBj
b2xvcnMudW5zaGlmdCgiZ3JlZW4iKTsgIC8vIFsicmVkIiwgImdyZWVuIl0KLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzLnVuc2hpZnQoImJsdWUiKTsgICAvLyBbInJlZCIsICJncmVlbiIsICJi
bHVlIl0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCB1bnNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLlNldH0gVGhl
IHNldCBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5zaGlmdDog
YWxpYXNNZXRob2QoJ3B1c2gnKSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIEFkZHMgZWFjaCBvYmplY3QgaW4gdGhlIHBhc3NlZCBlbnVtZXJhYmxlIHRvIHRoZSBzZXQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBhbGlhcyBvZiBgRW1iZXIuTXV0YWJs
ZUVudW1lcmFibGUuYWRkT2JqZWN0cygpYAotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBFbWJlci5TZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JzLmFkZEVhY2goWyJyZWQiLCAiZ3JlZW4iLCAiYmx1
ZSJdKTsgIC8vIFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFkZEVhY2gKLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3RzIHRvIGFk
ZC4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuU2V0fSBUaGUgc2V0IGl0c2Vs
Zi4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGRFYWNoOiBhbGlhc01ldGhv
ZCgnYWRkT2JqZWN0cycpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
UmVtb3ZlcyBlYWNoIG9iamVjdCBpbiB0aGUgcGFzc2VkIGVudW1lcmFibGUgdG8gdGhlIHNldC4K
LQotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGFsaWFzIG9mIGBFbWJlci5NdXRhYmxl
RW51bWVyYWJsZS5yZW1vdmVPYmplY3RzKClgCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzID0gbmV3IEVtYmVyLlNldChb
InJlZCIsICJncmVlbiIsICJibHVlIl0pOwotICAgICAgICAgICAgICAgICAgICBjb2xvcnMucmVt
b3ZlRWFjaChbInJlZCIsICJibHVlIl0pOyAgLy8gIFsiZ3JlZW4iXQotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUVhY2gKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmpl
Y3RzIHRvIHJlbW92ZS4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuU2V0fSBU
aGUgc2V0IGl0c2VsZi4KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVF
YWNoOiBhbGlhc01ldGhvZCgncmVtb3ZlT2JqZWN0cycpLAotCi0gICAgICAgICAgICAvLyAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0g
ICAgICAgICAgICAvLyBQUklWQVRFIEVOVU1FUkFCTEUgU1VQUE9SVAotICAgICAgICAgICAgLy8K
LQotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oaXRlbXMpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtcykgCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkT2JqZWN0cyhpdGVtcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvLyBpbXBsZW1lbnQgRW1iZXIuRW51bWVyYWJsZQotICAgICAgICAgICAgbmV4dE9iamVj
dDogZnVuY3Rpb24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbaWR4XTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIG1vcmUgb3B0aW1pemVkIHZlcnNpb24KLSAg
ICAgICAgICAgIGZpcnN0T2JqZWN0OiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwID8gdGhpc1swXSA6IHVuZGVmaW5lZDsKLSAgICAg
ICAgICAgIH0pLAotCi0gICAgICAgICAgICAvLyBtb3JlIG9wdGltaXplZCB2ZXJzaW9uCi0gICAg
ICAgICAgICBsYXN0T2JqZWN0OiBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5sZW5ndGggPiAwID8gdGhpc1t0aGlzLmxlbmd0aC0xXSA6IHVuZGVmaW5l
ZDsKLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvLyBpbXBsZW1lbnRzIEVtYmVyLk11
dGFibGVFbnVtZXJhYmxlCi0gICAgICAgICAgICBhZGRPYmplY3Q6IGZ1bmN0aW9uKG9iaikgewot
ICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywgJ2lzRnJvemVuJykpIAotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihGUk9aRU5fRVJST1IpOwotICAgICAgICAgICAg
ICAgIGlmIChpc05vbmUob2JqKSkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOyAv
LyBub3RoaW5nIHRvIGRvCi0KLSAgICAgICAgICAgICAgICB2YXIgZ3VpZCA9IGd1aWRGb3Iob2Jq
KSwKLSAgICAgICAgICAgICAgICBpZHggPSB0aGlzW2d1aWRdLAotICAgICAgICAgICAgICAgIGxl
biA9IGdldCh0aGlzLCAnbGVuZ3RoJyksCi0gICAgICAgICAgICAgICAgYWRkZWQgOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IGxlbiAmJiAodGhpc1tpZHhdID09PSBv
YmopKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGFkZGVkCi0KLSAgICAg
ICAgICAgICAgICBhZGRlZCA9IFtvYmpdOwotCi0gICAgICAgICAgICAgICAgdGhpcy5lbnVtZXJh
YmxlQ29udGVudFdpbGxDaGFuZ2UobnVsbCwgYWRkZWQpOwotICAgICAgICAgICAgICAgIHByb3Bl
cnR5V2lsbENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotCi0gICAgICAgICAgICAgICAgbGVu
ID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgICAgICAgICAgICB0aGlzW2d1aWRdID0gbGVu
OwotICAgICAgICAgICAgICAgIHRoaXNbbGVuXSA9IG9iajsKLSAgICAgICAgICAgICAgICBzZXQo
dGhpcywgJ2xlbmd0aCcsIGxlbiArIDEpOwotCi0gICAgICAgICAgICAgICAgcHJvcGVydHlEaWRD
aGFuZ2UodGhpcywgJ2xhc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICB0aGlzLmVudW1lcmFi
bGVDb250ZW50RGlkQ2hhbmdlKG51bGwsIGFkZGVkKTsKLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gaW1wbGVtZW50cyBFbWJl
ci5NdXRhYmxlRW51bWVyYWJsZQotICAgICAgICAgICAgcmVtb3ZlT2JqZWN0OiBmdW5jdGlvbihv
YmopIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0KHRoaXMsICdpc0Zyb3plbicpKSAKLSAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoRlJPWkVOX0VSUk9SKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNOb25lKG9iaikpIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsgLy8gbm90aGluZyB0byBkbwotCi0gICAgICAgICAgICAgICAgdmFyIGd1aWQgPSBndWlk
Rm9yKG9iaiksCi0gICAgICAgICAgICAgICAgaWR4ID0gdGhpc1tndWlkXSwKLSAgICAgICAgICAg
ICAgICBsZW4gPSBnZXQodGhpcywgJ2xlbmd0aCcpLAotICAgICAgICAgICAgICAgIGlzRmlyc3Qg
PSBpZHggPT09IDAsCi0gICAgICAgICAgICAgICAgaXNMYXN0ID0gaWR4ID09PSBsZW4tMSwKLSAg
ICAgICAgICAgICAgICBsYXN0LCByZW1vdmVkOwotCi0KLSAgICAgICAgICAgICAgICBpZiAoaWR4
ID49IDAgJiYgaWR4IDwgbGVuICYmICh0aGlzW2lkeF0gPT09IG9iaikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlZCA9IFtvYmpdOwotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuZW51
bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlKHJlbW92ZWQsIG51bGwpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNGaXJzdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlXaWxs
Q2hhbmdlKHRoaXMsICdmaXJzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc0xhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc3dhcCBpdGVtcyAtIGJhc2ljYWxseSBtb3Zl
IHRoZSBpdGVtIHRvIHRoZSBlbmQgc28gaXQgY2FuIGJlIHJlbW92ZWQKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGlkeCA8IGxlbi0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0g
dGhpc1tsZW4tMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2lkeF0gPSBsYXN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tndWlkRm9yKGxhc3QpXSA9IGlkeDsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2d1aWRd
OwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tsZW4tMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHNldCh0aGlzLCAnbGVuZ3RoJywgbGVuLTEpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChpc0ZpcnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURpZENoYW5n
ZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNMYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eURpZENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UocmVtb3Zl
ZCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBvcHRpbWl6ZWQgdmVyc2lvbgot
ICAgICAgICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzW2d1aWRGb3Iob2JqKV0gPj0gMDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGNvcHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcy5jb25z
dHJ1Y3RvciwgcmV0ID0gbmV3IEMoKSwgbG9jID0gZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAg
ICAgICAgICAgICBzZXQocmV0LCAnbGVuZ3RoJywgbG9jKTsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoLS1sb2MgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXRbbG9jXSA9IHRoaXNbbG9j
XTsKLSAgICAgICAgICAgICAgICAgICAgcmV0W2d1aWRGb3IodGhpc1tsb2NdKV0gPSBsb2M7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoLCBpZHgsIGFycmF5ID0gW107Ci0gICAgICAgICAgICAg
ICAgZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFycmF5W2lkeF0gPSB0aGlzW2lkeF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiBmbXQoIkVtYmVyLlNldDwlQD4iLCBbYXJyYXkuam9pbignLCcpXSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vc3RyaW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwv
dXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAg
IC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1vZHVsZSBl
bWJlci1ydW50aW1lCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuU1RSSU5HUywgRW1iZXIuRkVB
VFVSRVMKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kyX18uaXNBcnJheTsKLSAg
ICAgICAgdmFyIGVtYmVySW5zcGVjdCA9IF9fZGVwZW5kZW5jeTJfXy5pbnNwZWN0OwotCi0gICAg
ICAgIHZhciBTVFJJTkdfREFTSEVSSVpFX1JFR0VYUCA9ICgvWyBfXS9nKTsKLSAgICAgICAgdmFy
IFNUUklOR19EQVNIRVJJWkVfQ0FDSEUgPSB7fTsKLSAgICAgICAgdmFyIFNUUklOR19ERUNBTUVM
SVpFX1JFR0VYUCA9ICgvKFthLXpcZF0pKFtBLVpdKS9nKTsKLSAgICAgICAgdmFyIFNUUklOR19D
QU1FTElaRV9SRUdFWFAgPSAoLyhcLXxffFwufFxzKSsoLik/L2cpOwotICAgICAgICB2YXIgU1RS
SU5HX1VOREVSU0NPUkVfUkVHRVhQXzEgPSAoLyhbYS16XGRdKShbQS1aXSspL2cpOwotICAgICAg
ICB2YXIgU1RSSU5HX1VOREVSU0NPUkVfUkVHRVhQXzIgPSAoL1wtfFxzKy9nKTsKLQotICAgICAg
ICBmdW5jdGlvbiBmbXQoc3RyLCBmb3JtYXRzKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXJyYXko
Zm9ybWF0cykgfHwgYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKLSAgICAgICAgICAgICAgICBmb3Jt
YXRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gZmlyc3QsIHJlcGxhY2UgYW55IE9SREVSRUQgcmVwbGFj
ZW1lbnRzLgotICAgICAgICAgICAgdmFyIGlkeCA9IDA7IC8vIHRoZSBjdXJyZW50IGluZGV4IGZv
ciBub24tbnVtZXJpY2FsIHJlcGxhY2VtZW50cwotICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBs
YWNlKC8lQChbMC05XSspPy9nLCBmdW5jdGlvbihzLCBhcmdJbmRleCkgewotICAgICAgICAgICAg
ICAgIGFyZ0luZGV4ID0gKGFyZ0luZGV4KSA/IHBhcnNlSW50KGFyZ0luZGV4LCAxMCkgLSAxIDog
aWR4Kys7Ci0gICAgICAgICAgICAgICAgcyA9IGZvcm1hdHNbYXJnSW5kZXhdOwotICAgICAgICAg
ICAgICAgIHJldHVybiAocyA9PT0gbnVsbCkgPyAnKG51bGwpJyA6IChzID09PSB1bmRlZmluZWQp
ID8gJycgOiBlbWJlckluc3BlY3Qocyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGxvYyhzdHIsIGZvcm1hdHMpIHsKLSAgICAgICAgICAgIGlmICghaXNB
cnJheShmb3JtYXRzKSB8fCBhcmd1bWVudHMubGVuZ3RoID4gMikgewotICAgICAgICAgICAgICAg
IGZvcm1hdHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHIgPSBFbWJlci5TVFJJTkdTW3N0cl0gfHwgc3Ry
OwotICAgICAgICAgICAgcmV0dXJuIGZtdChzdHIsIGZvcm1hdHMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gdyhzdHIpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHIuc3BsaXQoL1xz
Ky8pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIpIHsKLSAg
ICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZShTVFJJTkdfREVDQU1FTElaRV9SRUdFWFAsICck
MV8kMicpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBkYXNo
ZXJpemUoc3RyKSB7Ci0gICAgICAgICAgICB2YXIgY2FjaGUgPSBTVFJJTkdfREFTSEVSSVpFX0NB
Q0hFLAotICAgICAgICAgICAgaGl0ID0gY2FjaGUuaGFzT3duUHJvcGVydHkoc3RyKSwKLSAgICAg
ICAgICAgIHJldDsKLQotICAgICAgICAgICAgaWYgKGhpdCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBjYWNoZVtzdHJdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBy
ZXQgPSBkZWNhbWVsaXplKHN0cikucmVwbGFjZShTVFJJTkdfREFTSEVSSVpFX1JFR0VYUCwgJy0n
KTsKLSAgICAgICAgICAgICAgICBjYWNoZVtzdHJdID0gcmV0OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2Ft
ZWxpemUoc3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoU1RSSU5HX0NBTUVM
SVpFX1JFR0VYUCwgZnVuY3Rpb24obWF0Y2gsIHNlcGFyYXRvciwgY2hyKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNociA/IGNoci50b1VwcGVyQ2FzZSgpIDogJyc7Ci0gICAgICAgICAgICB9
KS5yZXBsYWNlKC9eKFtBLVpdKS8sIGZ1bmN0aW9uKG1hdGNoLCBzZXBhcmF0b3IsIGNocikgewot
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBjbGFzc2lmeShzdHIpIHsKLSAgICAg
ICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgiLiIpLAotICAgICAgICAgICAgb3V0ID0gW107
Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbWVsaXplZCA9IGNhbWVsaXplKHBhcnRzW2ld
KTsKLSAgICAgICAgICAgICAgICBvdXQucHVzaChjYW1lbGl6ZWQuY2hhckF0KDApLnRvVXBwZXJD
YXNlKCkgKyBjYW1lbGl6ZWQuc3Vic3RyKDEpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG91dC5qb2luKCIuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1
bmRlcnNjb3JlKHN0cikgewotICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKFNUUklOR19V
TkRFUlNDT1JFX1JFR0VYUF8xLCAnJDFfJDInKS4KLSAgICAgICAgICAgIHJlcGxhY2UoU1RSSU5H
X1VOREVSU0NPUkVfUkVHRVhQXzIsICdfJykudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3Ry
LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cigxKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBoYXNoIG9mIGxvY2FsaXplZCBz
dHJpbmdzIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZS4gVXNlZCBieQotICAgICAgICAgICAgICB0
aGUgYEVtYmVyLlN0cmluZy5sb2MoKWAgaGVscGVyLiBUbyBsb2NhbGl6ZSwgYWRkIHN0cmluZyB2
YWx1ZXMgdG8gdGhpcwotICAgICAgICAgICAgICBoYXNoLgotCi0gICAgICAgICAgICAgIEBwcm9w
ZXJ0eSBTVFJJTkdTCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHR5
cGUgSGFzaAotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuU1RSSU5HUyA9IHt9OwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgICAgICBEZWZpbmVzIHN0cmluZyBoZWxwZXIgbWV0aG9kcyBp
bmNsdWRpbmcgc3RyaW5nIGZvcm1hdHRpbmcgYW5kIGxvY2FsaXphdGlvbi4KLSAgICAgICAgICAg
ICAgVW5sZXNzIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmdgIGlzIGBmYWxzZWAgdGhl
c2UgbWV0aG9kcyB3aWxsIGFsc28gYmUKLSAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIGBTdHJp
bmcucHJvdG90eXBlYCBhcyB3ZWxsLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBTdHJpbmcKLSAg
ICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAc3RhdGljCi0gICAg
ICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gewotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFwcGx5IGZvcm1hdHRpbmcgb3B0aW9ucyB0byB0
aGUgc3RyaW5nLiBUaGlzIHdpbGwgbG9vayBmb3Igb2NjdXJyZW5jZXMKLSAgICAgICAgICAgICAg
ICAgICAgb2YgIiVAIiBpbiB5b3VyIHN0cmluZyBhbmQgc3Vic3RpdHV0ZSB0aGVtIHdpdGggdGhl
IGFyZ3VtZW50cyB5b3UgcGFzcyBpbnRvCi0gICAgICAgICAgICAgICAgICAgIHRoaXMgbWV0aG9k
LiBJZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBzcGVjaWZpYyBvcmRlciBvZiByZXBsYWNlbWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYSBudW1iZXIgYWZ0ZXIgdGhlIGtl
eSBhcyB3ZWxsIHRvIGluZGljYXRlIHdoaWNoIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAg
IHlvdSB3YW50IHRvIGluc2VydC4KLQotICAgICAgICAgICAgICAgICAgICBPcmRlcmVkIGluc2Vy
dGlvbnMgYXJlIG1vc3QgdXNlZnVsIHdoZW4gYnVpbGRpbmcgbG9jIHN0cmluZ3Mgd2hlcmUgdmFs
dWVzCi0gICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGluc2VydCBtYXkgYXBwZWFyIGlu
IGRpZmZlcmVudCBvcmRlcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICAgICAgICAiSGVsbG8gJUAgJUAiLmZtdCgnSm9obicsICdEb2UnKTsgICAg
IC8vICJIZWxsbyBKb2huIERvZSIKLSAgICAgICAgICAgICAgICAgICAgIkhlbGxvICVAMiwgJUAx
Ii5mbXQoJ0pvaG4nLCAnRG9lJyk7ICAvLyAiSGVsbG8gRG9lLCBKb2huIgotICAgICAgICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGZtdAotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gZm9ybWF0Ci0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGZvcm1hdHMgQW4gYXJyYXkgb2YgcGFyYW1l
dGVycyB0byBpbnRlcnBvbGF0ZSBpbnRvIHN0cmluZy4KLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7U3RyaW5nfSBmb3JtYXR0ZWQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZm10OiBmbXQsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBGb3JtYXRzIHRoZSBwYXNzZWQgc3RyaW5nLCBidXQgZmlyc3QgbG9va3MgdXAgdGhlIHN0cmlu
ZyBpbiB0aGUgbG9jYWxpemVkCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgaGFzaC4gVGhp
cyBpcyBhIGNvbnZlbmllbnQgd2F5IHRvIGxvY2FsaXplIHRleHQuIFNlZQotICAgICAgICAgICAg
ICAgICAgICBgRW1iZXIuU3RyaW5nLmZtdCgpYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBmb3Jt
YXR0aW5nLgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpdCBpcyB0cmFkaXRpb25h
bCBidXQgbm90IHJlcXVpcmVkIHRvIHByZWZpeCBsb2NhbGl6ZWQgc3RyaW5nCi0gICAgICAgICAg
ICAgICAgICAgIGtleXMgd2l0aCBhbiB1bmRlcnNjb3JlIG9yIG90aGVyIGNoYXJhY3RlciBzbyB5
b3UgY2FuIGVhc2lseSBpZGVudGlmeQotICAgICAgICAgICAgICAgICAgICBsb2NhbGl6ZWQgc3Ry
aW5ncy4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLlNUUklOR1MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ19IZWxsbyBX
b3JsZCc6ICdCb25qb3VyIGxlIG1vbmRlJywKLSAgICAgICAgICAgICAgICAgICAgICAnX0hlbGxv
ICVAICVAJzogJ0JvbmpvdXIgJUAgJUAnCi0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgRW1iZXIuU3RyaW5nLmxvYygiX0hlbGxvIFdvcmxkIik7ICAvLyAnQm9u
am91ciBsZSBtb25kZSc7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlN0cmluZy5sb2MoIl9I
ZWxsbyAlQCAlQCIsIFsiSm9obiIsICJTbWl0aCJdKTsgIC8vICJCb25qb3VyIEpvaG4gU21pdGgi
OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGxvYwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcg
dG8gZm9ybWF0Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGZvcm1hdHMgT3B0
aW9uYWwgYXJyYXkgb2YgcGFyYW1ldGVycyB0byBpbnRlcnBvbGF0ZSBpbnRvIHN0cmluZy4KLSAg
ICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBmb3JtYXR0ZWQgc3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbG9jOiBsb2MsCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBTcGxpdHMgYSBzdHJpbmcgaW50byBzZXBhcmF0ZSB1bml0
cyBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBlbGltaW5hdGluZyBhbnkKLSAgICAgICAgICAgICAgICAg
ICAgZW1wdHkgc3RyaW5ncyBpbiB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1l
dGhvZCBmb3Igc3BsaXQgdGhhdAotICAgICAgICAgICAgICAgICAgICBpcyBtb3N0bHkgdXNlZnVs
IHdoZW4gYXBwbGllZCB0byB0aGUgYFN0cmluZy5wcm90b3R5cGVgLgotCi0gICAgICAgICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuU3RyaW5nLnco
ImFscGhhIGJldGEgZ2FtbWEiKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGtleSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vID4gYWxwaGEKLSAgICAgICAgICAgICAgICAgICAgLy8gPiBi
ZXRhCi0gICAgICAgICAgICAgICAgICAgIC8vID4gZ2FtbWEKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB3Ci0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBzcGxpdAotICAgICAgICAgICAgICAg
ICAgICBAcmV0dXJuIHtBcnJheX0gYXJyYXkgY29udGFpbmluZyB0aGUgc3BsaXQgc3RyaW5ncwot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHc6IHcsCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBDb252ZXJ0cyBhIGNhbWVsaXplZCBzdHJpbmcgaW50byBh
bGwgbG93ZXIgY2FzZSBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuCi0KLSAgICAgICAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICAnaW5uZXJIVE1MJy5kZWNh
bWVsaXplKCk7ICAgICAgICAgICAvLyAnaW5uZXJfaHRtbCcKLSAgICAgICAgICAgICAgICAgICAg
J2FjdGlvbl9uYW1lJy5kZWNhbWVsaXplKCk7ICAgICAgICAvLyAnYWN0aW9uX25hbWUnCi0gICAg
ICAgICAgICAgICAgICAgICdjc3MtY2xhc3MtbmFtZScuZGVjYW1lbGl6ZSgpOyAgICAgLy8gJ2Nz
cy1jbGFzcy1uYW1lJwotICAgICAgICAgICAgICAgICAgICAnbXkgZmF2b3JpdGUgaXRlbXMnLmRl
Y2FtZWxpemUoKTsgIC8vICdteSBmYXZvcml0ZSBpdGVtcycKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkZWNhbWVsaXplCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBkZWNhbWVsaXplLgot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSBkZWNhbWVsaXplZCBzdHJp
bmcuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVjYW1lbGl6ZTogZGVjYW1l
bGl6ZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlcGxhY2VzIHVu
ZGVyc2NvcmVzLCBzcGFjZXMsIG9yIGNhbWVsQ2FzZSB3aXRoIGRhc2hlcy4KLQotICAgICAgICAg
ICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICdpbm5lckhUTUwn
LmRhc2hlcml6ZSgpOyAgICAgICAgICAvLyAnaW5uZXItaHRtbCcKLSAgICAgICAgICAgICAgICAg
ICAgJ2FjdGlvbl9uYW1lJy5kYXNoZXJpemUoKTsgICAgICAgIC8vICdhY3Rpb24tbmFtZScKLSAg
ICAgICAgICAgICAgICAgICAgJ2Nzcy1jbGFzcy1uYW1lJy5kYXNoZXJpemUoKTsgICAgIC8vICdj
c3MtY2xhc3MtbmFtZScKLSAgICAgICAgICAgICAgICAgICAgJ215IGZhdm9yaXRlIGl0ZW1zJy5k
YXNoZXJpemUoKTsgIC8vICdteS1mYXZvcml0ZS1pdGVtcycKLSAgICAgICAgICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBkYXNoZXJpemUKLSAgICAgICAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGRhc2hlcml6ZS4KLSAg
ICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgZGFzaGVyaXplZCBzdHJpbmcu
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGFzaGVyaXplOiBkYXNoZXJpemUs
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBsb3dl
ckNhbWVsQ2FzZSBmb3JtIG9mIGEgc3RyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgJ2lubmVySFRNTCcuY2FtZWxpemUoKTsgICAg
ICAgICAgLy8gJ2lubmVySFRNTCcKLSAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJy5j
YW1lbGl6ZSgpOyAgICAgICAgLy8gJ2FjdGlvbk5hbWUnCi0gICAgICAgICAgICAgICAgICAgICdj
c3MtY2xhc3MtbmFtZScuY2FtZWxpemUoKTsgICAgIC8vICdjc3NDbGFzc05hbWUnCi0gICAgICAg
ICAgICAgICAgICAgICdteSBmYXZvcml0ZSBpdGVtcycuY2FtZWxpemUoKTsgIC8vICdteUZhdm9y
aXRlSXRlbXMnCi0gICAgICAgICAgICAgICAgICAgICdNeSBGYXZvcml0ZSBJdGVtcycuY2FtZWxp
emUoKTsgIC8vICdteUZhdm9yaXRlSXRlbXMnCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY2FtZWxpemUKLSAgICAgICAgICAgICAgICAgICAg
QHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGNhbWVsaXplLgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSBjYW1lbGl6ZWQgc3RyaW5nLgotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhbWVsaXplOiBjYW1lbGl6ZSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIFVwcGVyQ2FtZWxDYXNlIGZv
cm0gb2YgYSBzdHJpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICAnaW5uZXJIVE1MJy5jbGFzc2lmeSgpOyAgICAgICAgICAvLyAnSW5u
ZXJIVE1MJwotICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnLmNsYXNzaWZ5KCk7ICAg
ICAgICAvLyAnQWN0aW9uTmFtZScKLSAgICAgICAgICAgICAgICAgICAgJ2Nzcy1jbGFzcy1uYW1l
Jy5jbGFzc2lmeSgpOyAgICAgLy8gJ0Nzc0NsYXNzTmFtZScKLSAgICAgICAgICAgICAgICAgICAg
J215IGZhdm9yaXRlIGl0ZW1zJy5jbGFzc2lmeSgpOyAgLy8gJ015RmF2b3JpdGVJdGVtcycKLSAg
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBjbGFz
c2lmeQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzdHJpbmcg
dG8gY2xhc3NpZnkKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSB0aGUgY2xh
c3NpZmllZCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjbGFzc2lm
eTogY2xhc3NpZnksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBNb3Jl
IGdlbmVyYWwgdGhhbiBkZWNhbWVsaXplLiBSZXR1cm5zIHRoZSBsb3dlclxfY2FzZVxfYW5kXF91
bmRlcnNjb3JlZAotICAgICAgICAgICAgICAgICAgICBmb3JtIG9mIGEgc3RyaW5nLgotCi0gICAg
ICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgJ2lubmVy
SFRNTCcudW5kZXJzY29yZSgpOyAgICAgICAgICAvLyAnaW5uZXJfaHRtbCcKLSAgICAgICAgICAg
ICAgICAgICAgJ2FjdGlvbl9uYW1lJy51bmRlcnNjb3JlKCk7ICAgICAgICAvLyAnYWN0aW9uX25h
bWUnCi0gICAgICAgICAgICAgICAgICAgICdjc3MtY2xhc3MtbmFtZScudW5kZXJzY29yZSgpOyAg
ICAgLy8gJ2Nzc19jbGFzc19uYW1lJwotICAgICAgICAgICAgICAgICAgICAnbXkgZmF2b3JpdGUg
aXRlbXMnLnVuZGVyc2NvcmUoKTsgIC8vICdteV9mYXZvcml0ZV9pdGVtcycKLSAgICAgICAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCB1bmRlcnNjb3JlCi0g
ICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byB1bmRl
cnNjb3JlLgotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmRlcnNj
b3JlZCBzdHJpbmcuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5kZXJzY29y
ZTogdW5kZXJzY29yZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJl
dHVybnMgdGhlIENhcGl0YWxpemVkIGZvcm0gb2YgYSBzdHJpbmcKLQotICAgICAgICAgICAgICAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICdpbm5lckhUTUwnLmNhcGl0
YWxpemUoKSAgICAgICAgIC8vICdJbm5lckhUTUwnCi0gICAgICAgICAgICAgICAgICAgICdhY3Rp
b25fbmFtZScuY2FwaXRhbGl6ZSgpICAgICAgIC8vICdBY3Rpb25fbmFtZScKLSAgICAgICAgICAg
ICAgICAgICAgJ2Nzcy1jbGFzcy1uYW1lJy5jYXBpdGFsaXplKCkgICAgLy8gJ0Nzcy1jbGFzcy1u
YW1lJwotICAgICAgICAgICAgICAgICAgICAnbXkgZmF2b3JpdGUgaXRlbXMnLmNhcGl0YWxpemUo
KSAvLyAnTXkgZmF2b3JpdGUgaXRlbXMnCi0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY2FwaXRhbGl6ZQotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS4KLSAgICAgICAgICAg
ICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBUaGUgY2FwaXRhbGl6ZWQgc3RyaW5nLgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNhcGl0YWxpemU6IGNhcGl0YWxpemUKLSAgICAg
ICAgfTsKLQotICAgICAgICBfX2V4cG9ydHNfXy5mbXQgPSBmbXQ7Ci0gICAgICAgIF9fZXhwb3J0
c19fLmxvYyA9IGxvYzsKLSAgICAgICAgX19leHBvcnRzX18udyA9IHc7Ci0gICAgICAgIF9fZXhw
b3J0c19fLmRlY2FtZWxpemUgPSBkZWNhbWVsaXplOwotICAgICAgICBfX2V4cG9ydHNfXy5kYXNo
ZXJpemUgPSBkYXNoZXJpemU7Ci0gICAgICAgIF9fZXhwb3J0c19fLmNhbWVsaXplID0gY2FtZWxp
emU7Ci0gICAgICAgIF9fZXhwb3J0c19fLmNsYXNzaWZ5ID0gY2xhc3NpZnk7Ci0gICAgICAgIF9f
ZXhwb3J0c19fLnVuZGVyc2NvcmUgPSB1bmRlcnNjb3JlOwotICAgICAgICBfX2V4cG9ydHNfXy5j
YXBpdGFsaXplID0gY2FwaXRhbGl6ZTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL3N1YmFycmF5IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJl
bWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImV4cG9y
dHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAg
ICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kxX18uZ2V0OwotICAgICAgICB2YXIgRW1iZXJFcnJv
ciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW51bWVyYWJsZVV0
aWxzID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIFJFVEFJTiA9
ICdyJzsKLSAgICAgICAgdmFyIEZJTFRFUiA9ICdmJzsKLQotICAgICAgICBmdW5jdGlvbiBPcGVy
YXRpb24odHlwZSwgY291bnQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAg
ICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9y
dHNfX1siZGVmYXVsdCJdID0gU3ViQXJyYXk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAg
IEFuIGBFbWJlci5TdWJBcnJheWAgdHJhY2tzIGFuIGFycmF5IGluIGEgd2F5IHNpbWlsYXIgdG8s
IGJ1dCBtb3JlIHNwZWNpYWxpemVkCi0gICAgICAgICAgICAgIHRoYW4sIGBFbWJlci5UcmFja2Vk
QXJyYXlgLiAgSXQgaXMgdXNlZnVsIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBpbmRleGVzIG9m
Ci0gICAgICAgICAgICAgIGl0ZW1zIHdpdGhpbiBhIGZpbHRlcmVkIGFycmF5LgotCi0gICAgICAg
ICAgICAgIEBjbGFzcyBTdWJBcnJheQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBTdWJBcnJheSAobGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICAgICAgICBsZW5n
dGggPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGVuZ3RoID4gMCkgewot
ICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSBbbmV3IE9wZXJhdGlvbihSRVRBSU4s
IGxlbmd0aCldOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9v
cGVyYXRpb25zID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIFN1
YkFycmF5LnByb3RvdHlwZSA9IHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBUcmFjayB0aGF0IGFuIGl0ZW0gd2FzIGFkZGVkIHRvIHRoZSB0cmFja2VkIGFycmF5LgotCi0g
ICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYWRkSXRlbQotCi0gICAgICAgICAgICAgICAgICAg
IEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIHRyYWNr
ZWQgYXJyYXkuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Ym9vbGVhbn0gbWF0Y2ggYHRy
dWVgIGlmZiB0aGUgaXRlbSBpcyBpbmNsdWRlZCBpbiB0aGUgc3ViYXJyYXkuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7bnVtYmVyfSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhl
IHN1YmFycmF5LgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkZEl0ZW06IGZ1
bmN0aW9uKGluZGV4LCBtYXRjaCkgewotICAgICAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9
IC0xLAotICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gbWF0Y2ggPyBSRVRBSU4gOiBGSUxURVIs
Ci0gICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9m
aW5kT3BlcmF0aW9uKGluZGV4LCBmdW5jdGlvbihvcGVyYXRpb24sIG9wZXJhdGlvbkluZGV4LCBy
YW5nZVN0YXJ0LCByYW5nZUVuZCwgc2VlbkluU3ViQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG5ld09wZXJhdGlvbiwgc3BsaXRPcGVyYXRpb247Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW1UeXBlID09PSBvcGVyYXRpb24udHlwZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgKytvcGVyYXRpb24uY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aW5kZXggPT09IHJhbmdlU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2Vy
dCB0byB0aGUgbGVmdCBvZiBgb3BlcmF0aW9uYAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fb3BlcmF0aW9ucy5zcGxpY2Uob3BlcmF0aW9uSW5kZXgsIDAsIG5ldyBPcGVyYXRpb24oaXRl
bVR5cGUsIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld09wZXJhdGlvbiA9IG5ldyBPcGVyYXRpb24oaXRlbVR5cGUsIDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3BsaXRPcGVyYXRpb24gPSBuZXcgT3BlcmF0aW9uKG9wZXJh
dGlvbi50eXBlLCByYW5nZUVuZCAtIGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24uY291bnQgPSBpbmRleCAtIHJhbmdlU3RhcnQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX29wZXJhdGlvbnMuc3BsaWNlKG9wZXJhdGlvbkluZGV4ICsgMSwgMCwg
bmV3T3BlcmF0aW9uLCBzcGxpdE9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYXRpb24udHlwZSA9PT0gUkVUQUlOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBzZWVuSW5TdWJBcnJheSArIChpbmRleCAtIHJhbmdlU3RhcnQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHNlZW5JblN1YkFycmF5OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fY29tcG9zZUF0KG9wZXJhdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICB9LCBmdW5jdGlv
bihzZWVuSW5TdWJBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcGVyYXRpb25z
LnB1c2gobmV3IE9wZXJhdGlvbihpdGVtVHlwZSwgMSkpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBzZWVu
SW5TdWJBcnJheTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHNlbGYuX2NvbXBvc2VBdChzZWxmLl9vcGVyYXRpb25zLmxlbmd0aC0xKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUcmFjayB0aGF0
IGFuIGl0ZW0gd2FzIHJlbW92ZWQgZnJvbSB0aGUgdHJhY2tlZCBhcnJheS4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIHJlbW92ZUl0ZW0KLQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSB0cmFja2VkIGFy
cmF5LgotCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IG9m
IHRoZSBpdGVtIGluIHRoZSBzdWJhcnJheSwgb3IgYC0xYCBpZiB0aGUgaXRlbQotICAgICAgICAg
ICAgICAgICAgICB3YXMgbm90IGluIHRoZSBzdWJhcnJheS4KLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbihpbmRleCkgewotICAgICAgICAgICAg
ICAgIHZhciByZXR1cm5WYWx1ZSA9IC0xLAotICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOwot
Ci0gICAgICAgICAgICAgICAgdGhpcy5fZmluZE9wZXJhdGlvbihpbmRleCwgZnVuY3Rpb24gKG9w
ZXJhdGlvbiwgb3BlcmF0aW9uSW5kZXgsIHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBzZWVuSW5TdWJB
cnJheSkgewotICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09IFJFVEFJ
TikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBzZWVuSW5TdWJBcnJh
eSArIChpbmRleCAtIHJhbmdlU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi5jb3VudCA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC0tb3BlcmF0aW9uLmNvdW50OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3BlcmF0aW9ucy5zcGxpY2Uob3BlcmF0
aW9uSW5kZXgsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcG9zZUF0KG9w
ZXJhdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigi
Q2FuJ3QgcmVtb3ZlIGFuIGl0ZW0gdGhhdCBoYXMgbmV2ZXIgYmVlbiBhZGRlZC4iKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAg
ICAgICAgICAgIH0sCi0KLQotICAgICAgICAgICAgX2ZpbmRPcGVyYXRpb246IGZ1bmN0aW9uIChp
bmRleCwgZm91bmRDYWxsYmFjaywgbm90Rm91bmRDYWxsYmFjaykgewotICAgICAgICAgICAgICAg
IHZhciBvcGVyYXRpb25JbmRleCwKLSAgICAgICAgICAgICAgICBsZW4sCi0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgIHJhbmdlU3RhcnQsCi0gICAgICAgICAgICAg
ICAgcmFuZ2VFbmQsCi0gICAgICAgICAgICAgICAgc2VlbkluU3ViQXJyYXkgPSAwOwotCi0gICAg
ICAgICAgICAgICAgLy8gT1BUSU1JWkU6IGNoYW5nZSB0byBiYWxhbmNlZCB0cmVlCi0gICAgICAg
ICAgICAgICAgLy8gZmluZCBsZWZ0bW9zdCBvcGVyYXRpb24gdG8gdGhlIHJpZ2h0IG9mIGBpbmRl
eGAKLSAgICAgICAgICAgICAgICBmb3IgKG9wZXJhdGlvbkluZGV4ID0gcmFuZ2VTdGFydCA9IDAs
IGxlbiA9IHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoOyBvcGVyYXRpb25JbmRleCA8IGxlbjsgcmFu
Z2VTdGFydCA9IHJhbmdlRW5kICsgMSwgKytvcGVyYXRpb25JbmRleCkgewotICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW29wZXJhdGlvbkluZGV4XTsKLSAg
ICAgICAgICAgICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgb3BlcmF0aW9uLmNvdW50
IC0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gcmFuZ2VTdGFydCAmJiBp
bmRleCA8PSByYW5nZUVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDYWxsYmFj
ayhvcGVyYXRpb24sIG9wZXJhdGlvbkluZGV4LCByYW5nZVN0YXJ0LCByYW5nZUVuZCwgc2Vlbklu
U3ViQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSBSRVRBSU4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNlZW5JblN1YkFycmF5ICs9IG9wZXJhdGlvbi5jb3VudDsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5v
dEZvdW5kQ2FsbGJhY2soc2VlbkluU3ViQXJyYXkpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgX2NvbXBvc2VBdDogZnVuY3Rpb24oaW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIg
b3AgPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4XSwKLSAgICAgICAgICAgICAgICBvdGhlck9wOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcCkgewotICAgICAgICAgICAgICAgICAgICAvLyBDb21w
b3Npbmcgb3V0IG9mIGJvdW5kcyBpcyBhIG5vLW9wLCBhcyB3aGVuIHJlbW92aW5nIHRoZSBsYXN0
IG9wZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbGlzdC4KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmIChpbmRleCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgb3RoZXJPcCA9IHRoaXMuX29w
ZXJhdGlvbnNbaW5kZXgtMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlck9wLnR5cGUg
PT09IG9wLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wLmNvdW50ICs9IG90aGVy
T3AuY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRpb25zLnNwbGlj
ZShpbmRleC0xLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC0taW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPCB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aC0xKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG90aGVyT3AgPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4ICsgMV07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChvdGhlck9wLnR5cGUgPT09IG9wLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wLmNvdW50ICs9IG90aGVyT3AuY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9vcGVyYXRpb25zLnNwbGljZShpbmRleCArIDEsIDEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdG9T
dHJpbmc6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RyID0gIiI7Ci0gICAg
ICAgICAgICAgICAgRW51bWVyYWJsZVV0aWxzLmZvckVhY2godGhpcy5fb3BlcmF0aW9ucywgZnVu
Y3Rpb24gKG9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBzdHIgKz0gIiAiICsgb3Bl
cmF0aW9uLnR5cGUgKyAiOiIgKyBvcGVyYXRpb24uY291bnQ7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci1ydW50aW1lL3N5c3RlbS90
cmFja2VkX2FycmF5IiwKLSAgICBbImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1t
ZXRhbC9lbnVtZXJhYmxlX3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAg
dmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kyX18uZm9yRWFjaDsKLQotICAgICAgICB2YXIgUkVU
QUlOID0gJ3InOwotICAgICAgICB2YXIgSU5TRVJUID0gJ2knOwotICAgICAgICB2YXIgREVMRVRF
ID0gJ2QnOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBUcmFja2VkQXJyYXk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFuIGBFbWJlci5UcmFja2VkQXJyYXlgIHRy
YWNrcyBhcnJheSBvcGVyYXRpb25zLiAgSXQncyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0bwotICAg
ICAgICAgICAgICBsYXppbHkgY29tcHV0ZSB0aGUgaW5kZXhlcyBvZiBpdGVtcyBpbiBhbiBhcnJh
eSBhZnRlciB0aGV5J3ZlIGJlZW4gc2hpZnRlZCBieQotICAgICAgICAgICAgICBzdWJzZXF1ZW50
IG9wZXJhdGlvbnMuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIFRyYWNrZWRBcnJheQotICAgICAg
ICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7YXJyYXl9IFtp
dGVtcz1bXV0gVGhlIGFycmF5IHRvIGJlIHRyYWNrZWQuICBUaGlzIGlzIHVzZWQganVzdCB0byBn
ZXQKLSAgICAgICAgICAgICAgdGhlIGluaXRpYWwgaXRlbXMgZm9yIHRoZSBzdGFydGluZyBzdGF0
ZSBvZiByZXRhaW46bi4KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIFRyYWNrZWRB
cnJheShpdGVtcykgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7Ci0g
ICAgICAgICAgICAgICAgaXRlbXMgPSBbXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dmFyIGxlbmd0aCA9IGdldChpdGVtcywgJ2xlbmd0aCcpOwotCi0gICAgICAgICAgICBpZiAobGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucyA9IFtuZXcgQXJyYXlPcGVy
YXRpb24oUkVUQUlOLCBsZW5ndGgsIGl0ZW1zKV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIFRyYWNrZWRBcnJheS5SRVRBSU4gPSBSRVRBSU47Ci0gICAgICAgIFRy
YWNrZWRBcnJheS5JTlNFUlQgPSBJTlNFUlQ7Ci0gICAgICAgIFRyYWNrZWRBcnJheS5ERUxFVEUg
PSBERUxFVEU7Ci0KLSAgICAgICAgVHJhY2tlZEFycmF5LnByb3RvdHlwZSA9IHsKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRyYWNrIHRoYXQgYG5ld0l0ZW1zYCB3ZXJl
IGFkZGVkIHRvIHRoZSB0cmFja2VkIGFycmF5IGF0IGBpbmRleGAuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBhZGRJdGVtcwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gaW5kZXgK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIG5ld0l0ZW1zCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgYWRkSXRlbXM6IGZ1bmN0aW9uIChpbmRleCwgbmV3SXRlbXMpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgY291bnQgPSBnZXQobmV3SXRlbXMsICdsZW5ndGgnKTsKLSAgICAg
ICAgICAgICAgICBpZiAoY291bnQgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLl9m
aW5kQXJyYXlPcGVyYXRpb24oaW5kZXgpLAotICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9u
ID0gbWF0Y2gub3BlcmF0aW9uLAotICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9uSW5kZXgg
PSBtYXRjaC5pbmRleCwKLSAgICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvblJhbmdlU3RhcnQg
PSBtYXRjaC5yYW5nZVN0YXJ0LAotICAgICAgICAgICAgICAgIGNvbXBvc2VJbmRleCwKLSAgICAg
ICAgICAgICAgICBzcGxpdEluZGV4LAotICAgICAgICAgICAgICAgIHNwbGl0SXRlbXMsCi0gICAg
ICAgICAgICAgICAgc3BsaXRBcnJheU9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICBuZXdBcnJh
eU9wZXJhdGlvbjsKLQotICAgICAgICAgICAgICAgIG5ld0FycmF5T3BlcmF0aW9uID0gbmV3IEFy
cmF5T3BlcmF0aW9uKElOU0VSVCwgY291bnQsIG5ld0l0ZW1zKTsKLQotICAgICAgICAgICAgICAg
IGlmIChhcnJheU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoLnNw
bGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgbGVmdCBvZiBhcnJheU9w
ZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2Uo
YXJyYXlPcGVyYXRpb25JbmRleCwgMCwgbmV3QXJyYXlPcGVyYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcG9zZUluZGV4ID0gYXJyYXlPcGVyYXRpb25JbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NwbGl0
KGFycmF5T3BlcmF0aW9uSW5kZXgsIGluZGV4IC0gYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0LCBu
ZXdBcnJheU9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlSW5kZXgg
PSBhcnJheU9wZXJhdGlvbkluZGV4ICsgMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBhdCBlbmQK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5wdXNoKG5ld0FycmF5T3BlcmF0
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9zZUluZGV4ID0gYXJyYXlPcGVyYXRpb25J
bmRleDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3Nl
SW5zZXJ0KGNvbXBvc2VJbmRleCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgVHJhY2sgdGhhdCBgY291bnRgIGl0ZW1zIHdlcmUgcmVtb3Zl
ZCBhdCBgaW5kZXhgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlSXRlbXMK
LSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGluZGV4Ci0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSBjb3VudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZUl0ZW1z
OiBmdW5jdGlvbiAoaW5kZXgsIGNvdW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50IDwg
MSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5fZmluZEFycmF5T3BlcmF0aW9uKGluZGV4
KSwKLSAgICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvbiA9IG1hdGNoLm9wZXJhdGlvbiwKLSAg
ICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvbkluZGV4ID0gbWF0Y2guaW5kZXgsCi0gICAgICAg
ICAgICAgICAgYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0ID0gbWF0Y2gucmFuZ2VTdGFydCwKLSAg
ICAgICAgICAgICAgICBuZXdBcnJheU9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICBjb21wb3Nl
SW5kZXg7Ci0KLSAgICAgICAgICAgICAgICBuZXdBcnJheU9wZXJhdGlvbiA9IG5ldyBBcnJheU9w
ZXJhdGlvbihERUxFVEUsIGNvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoLnNwbGl0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBsZWZ0IG9mIGFycmF5T3BlcmF0aW9u
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMuc3BsaWNlKGFycmF5T3BlcmF0
aW9uSW5kZXgsIDAsIG5ld0FycmF5T3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgY29t
cG9zZUluZGV4ID0gYXJyYXlPcGVyYXRpb25JbmRleDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9zcGxpdChhcnJheU9wZXJhdGlvbkluZGV4LCBp
bmRleCAtIGFycmF5T3BlcmF0aW9uUmFuZ2VTdGFydCwgbmV3QXJyYXlPcGVyYXRpb24pOwotICAg
ICAgICAgICAgICAgICAgICBjb21wb3NlSW5kZXggPSBhcnJheU9wZXJhdGlvbkluZGV4ICsgMTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcG9z
ZURlbGV0ZShjb21wb3NlSW5kZXgpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIEFwcGx5IGFsbCBvcGVyYXRpb25zLCByZWR1Y2luZyB0aGVt
IHRvIHJldGFpbjpuLCBmb3IgYG5gLCB0aGUgbnVtYmVyIG9mCi0gICAgICAgICAgICAgICAgICAg
IGl0ZW1zIGluIHRoZSBhcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBgY2FsbGJhY2tgIHdp
bGwgYmUgY2FsbGVkIGZvciBlYWNoIG9wZXJhdGlvbiBhbmQgd2lsbCBiZSBwYXNzZWQgdGhlIGZv
bGxvd2luZyBhcmd1bWVudHM6Ci0KLSAgICAgICAgICAgICAgICAgICAgKiB7YXJyYXl9IGl0ZW1z
IFRoZSBpdGVtcyBmb3IgdGhlIGdpdmVuIG9wZXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAq
IHtudW1iZXJ9IG9mZnNldCBUaGUgY29tcHV0ZWQgb2Zmc2V0IG9mIHRoZSBpdGVtcywgaWUgdGhl
IGluZGV4IGluIHRoZQotICAgICAgICAgICAgICAgICAgICBhcnJheSBvZiB0aGUgZmlyc3QgaXRl
bSBmb3IgdGhpcyBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICoge3N0cmluZ30gb3Bl
cmF0aW9uIFRoZSB0eXBlIG9mIHRoZSBvcGVyYXRpb24uICBPbmUgb2YKLSAgICAgICAgICAgICAg
ICAgICAgYEVtYmVyLlRyYWNrZWRBcnJheS57UkVUQUlOLCBERUxFVEUsIElOU0VSVH1gCi0KLSAg
ICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhcHBseQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge2Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGFwcGx5OiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgaXRlbXMg
PSBbXSwKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOwotCi0gICAgICAgICAgICAgICAgZm9y
RWFjaCh0aGlzLl9vcGVyYXRpb25zLCBmdW5jdGlvbiAoYXJyYXlPcGVyYXRpb24sIG9wZXJhdGlv
bkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGFycmF5T3BlcmF0aW9uLml0
ZW1zLCBvZmZzZXQsIGFycmF5T3BlcmF0aW9uLnR5cGUsIG9wZXJhdGlvbkluZGV4KTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPcGVyYXRpb24udHlwZSAhPT0gREVMRVRFKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYXJyYXlPcGVyYXRpb24uY291bnQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChhcnJheU9wZXJhdGlv
bi5pdGVtcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSBbbmV3IEFycmF5T3BlcmF0aW9uKFJF
VEFJTiwgaXRlbXMubGVuZ3RoLCBpdGVtcyldOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJldHVybiBhbiBgQXJyYXlPcGVyYXRpb25NYXRj
aGAgZm9yIHRoZSBvcGVyYXRpb24gdGhhdCBjb250YWlucyB0aGUgaXRlbSBhdCBgaW5kZXhgLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2ZpbmRBcnJheU9wZXJhdGlvbgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwYXJhbSB7bnVtYmVyfSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0
ZW0gd2hvc2Ugb3BlcmF0aW9uIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHNob3Vs
ZCBiZSByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBfZmluZEFycmF5T3BlcmF0aW9uOiBmdW5jdGlvbiAoaW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJyYXlPcGVyYXRpb25JbmRleCwKLSAgICAgICAg
ICAgICAgICBsZW4sCi0gICAgICAgICAgICAgICAgc3BsaXQgPSBmYWxzZSwKLSAgICAgICAgICAg
ICAgICBhcnJheU9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICBhcnJheU9wZXJhdGlvblJhbmdl
U3RhcnQsCi0gICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb25SYW5nZUVuZDsKLQotICAgICAg
ICAgICAgICAgIC8vIE9QVElNSVpFOiB3ZSBjb3VsZCBzZWFyY2ggdGhlc2UgZmFzdGVyIGlmIHdl
IGtlcHQgYSBiYWxhbmNlZCB0cmVlLgotICAgICAgICAgICAgICAgIC8vIGZpbmQgbGVmdG1vc3Qg
YXJyYXlPcGVyYXRpb24gdG8gdGhlIHJpZ2h0IG9mIGBpbmRleGAKLSAgICAgICAgICAgICAgICBm
b3IgKGFycmF5T3BlcmF0aW9uSW5kZXggPSBhcnJheU9wZXJhdGlvblJhbmdlU3RhcnQgPSAwLCBs
ZW4gPSB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aDsgYXJyYXlPcGVyYXRpb25JbmRleCA8IGxlbjsg
KythcnJheU9wZXJhdGlvbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0
aW9uID0gdGhpcy5fb3BlcmF0aW9uc1thcnJheU9wZXJhdGlvbkluZGV4XTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJyYXlPcGVyYXRpb24udHlwZSA9PT0gREVMRVRFKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9uUmFuZ2VFbmQgPSBhcnJheU9wZXJhdGlvblJh
bmdlU3RhcnQgKyBhcnJheU9wZXJhdGlvbi5jb3VudCAtIDE7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4ID09PSBhcnJheU9wZXJhdGlvblJhbmdlU3RhcnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4
ID4gYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0ICYmIGluZGV4IDw9IGFycmF5T3BlcmF0aW9uUmFu
Z2VFbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb25SYW5nZVN0YXJ0ID0gYXJyYXlPcGVy
YXRpb25SYW5nZUVuZCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5T3BlcmF0aW9uTWF0Y2goYXJy
YXlPcGVyYXRpb24sIGFycmF5T3BlcmF0aW9uSW5kZXgsIHNwbGl0LCBhcnJheU9wZXJhdGlvblJh
bmdlU3RhcnQpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX3NwbGl0OiBmdW5jdGlv
biAoYXJyYXlPcGVyYXRpb25JbmRleCwgc3BsaXRJbmRleCwgbmV3QXJyYXlPcGVyYXRpb24pIHsK
LSAgICAgICAgICAgICAgICB2YXIgYXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW2Fy
cmF5T3BlcmF0aW9uSW5kZXhdOwotICAgICAgICAgICAgICAgIHZhciBzcGxpdEl0ZW1zID0gYXJy
YXlPcGVyYXRpb24uaXRlbXMuc2xpY2Uoc3BsaXRJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFy
IHNwbGl0QXJyYXlPcGVyYXRpb24gPSBuZXcgQXJyYXlPcGVyYXRpb24oYXJyYXlPcGVyYXRpb24u
dHlwZSwgc3BsaXRJdGVtcy5sZW5ndGgsIHNwbGl0SXRlbXMpOwotCi0gICAgICAgICAgICAgICAg
Ly8gdHJ1bmNhdGUgTEhTCi0gICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb24uY291bnQgPSBz
cGxpdEluZGV4OwotICAgICAgICAgICAgICAgIGFycmF5T3BlcmF0aW9uLml0ZW1zID0gYXJyYXlP
cGVyYXRpb24uaXRlbXMuc2xpY2UoMCwgc3BsaXRJbmRleCk7Ci0KLSAgICAgICAgICAgICAgICB0
aGlzLl9vcGVyYXRpb25zLnNwbGljZShhcnJheU9wZXJhdGlvbkluZGV4ICsgMSwgMCwgbmV3QXJy
YXlPcGVyYXRpb24sIHNwbGl0QXJyYXlPcGVyYXRpb24pOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLy8gc2VlIFN1YkFycmF5IGZvciBhIGJldHRlciBpbXBsZW1lbnRhdGlvbi4KLSAg
ICAgICAgICAgIF9jb21wb3NlSW5zZXJ0OiBmdW5jdGlvbiAoaW5kZXgpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgbmV3QXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4XSwKLSAg
ICAgICAgICAgICAgICBsZWZ0QXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4
LTFdLCAvLyBtYXkgYmUgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgcmlnaHRBcnJheU9wZXJh
dGlvbiA9IHRoaXMuX29wZXJhdGlvbnNbaW5kZXggKyAxXSwgLy8gbWF5IGJlIHVuZGVmaW5lZAot
ICAgICAgICAgICAgICAgIGxlZnRPcCA9IGxlZnRBcnJheU9wZXJhdGlvbiAmJiBsZWZ0QXJyYXlP
cGVyYXRpb24udHlwZSwKLSAgICAgICAgICAgICAgICByaWdodE9wID0gcmlnaHRBcnJheU9wZXJh
dGlvbiAmJiByaWdodEFycmF5T3BlcmF0aW9uLnR5cGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
bGVmdE9wID09PSBJTlNFUlQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgbGVmdAot
ICAgICAgICAgICAgICAgICAgICBsZWZ0QXJyYXlPcGVyYXRpb24uY291bnQgKz0gbmV3QXJyYXlP
cGVyYXRpb24uY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGxlZnRBcnJheU9wZXJhdGlvbi5p
dGVtcyA9IGxlZnRBcnJheU9wZXJhdGlvbi5pdGVtcy5jb25jYXQobmV3QXJyYXlPcGVyYXRpb24u
aXRlbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyaWdodE9wID09PSBJTlNFUlQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gbWVyZ2UgcmlnaHQgKHdlIGhhdmUgc3Bs
aXQgYW4gaW5zZXJ0IHdpdGggYW4gaW5zZXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dEFycmF5T3BlcmF0aW9uLmNvdW50ICs9IHJpZ2h0QXJyYXlPcGVyYXRpb24uY291bnQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0QXJyYXlPcGVyYXRpb24uaXRlbXMgPSBsZWZ0QXJyYXlP
cGVyYXRpb24uaXRlbXMuY29uY2F0KHJpZ2h0QXJyYXlPcGVyYXRpb24uaXRlbXMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXgsIDIpOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25s
eSBtZXJnZSBsZWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcGVyYXRpb25zLnNw
bGljZShpbmRleCwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T3AgPT09IElOU0VSVCkgewotICAgICAgICAgICAgICAgICAgICAvLyBt
ZXJnZSByaWdodAotICAgICAgICAgICAgICAgICAgICBuZXdBcnJheU9wZXJhdGlvbi5jb3VudCAr
PSByaWdodEFycmF5T3BlcmF0aW9uLmNvdW50OwotICAgICAgICAgICAgICAgICAgICBuZXdBcnJh
eU9wZXJhdGlvbi5pdGVtcyA9IG5ld0FycmF5T3BlcmF0aW9uLml0ZW1zLmNvbmNhdChyaWdodEFy
cmF5T3BlcmF0aW9uLml0ZW1zKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9u
cy5zcGxpY2UoaW5kZXggKyAxLCAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBfY29tcG9zZURlbGV0ZTogZnVuY3Rpb24gKGluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGFycmF5T3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9uc1tpbmRleF0s
Ci0gICAgICAgICAgICAgICAgZGVsZXRlc1RvR28gPSBhcnJheU9wZXJhdGlvbi5jb3VudCwKLSAg
ICAgICAgICAgICAgICBsZWZ0QXJyYXlPcGVyYXRpb24gPSB0aGlzLl9vcGVyYXRpb25zW2luZGV4
LTFdLCAvLyBtYXkgYmUgdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgbGVmdE9wID0gbGVmdEFy
cmF5T3BlcmF0aW9uICYmIGxlZnRBcnJheU9wZXJhdGlvbi50eXBlLAotICAgICAgICAgICAgICAg
IG5leHRBcnJheU9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICBuZXh0T3AsCi0gICAgICAgICAg
ICAgICAgbmV4dENvdW50LAotICAgICAgICAgICAgICAgIHJlbW92ZU5ld0FuZE5leHRPcCA9IGZh
bHNlLAotICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtcyA9IFtdOwotCi0gICAgICAgICAgICAg
ICAgaWYgKGxlZnRPcCA9PT0gREVMRVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5T3Bl
cmF0aW9uID0gbGVmdEFycmF5T3BlcmF0aW9uOwotICAgICAgICAgICAgICAgICAgICBpbmRleCAt
PSAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBp
bmRleCArIDE7IGRlbGV0ZXNUb0dvID4gMDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5l
eHRBcnJheU9wZXJhdGlvbiA9IHRoaXMuX29wZXJhdGlvbnNbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIG5leHRPcCA9IG5leHRBcnJheU9wZXJhdGlvbi50eXBlOwotICAgICAgICAgICAgICAgICAg
ICBuZXh0Q291bnQgPSBuZXh0QXJyYXlPcGVyYXRpb24uY291bnQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5leHRPcCA9PT0gREVMRVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cnJheU9wZXJhdGlvbi5jb3VudCArPSBuZXh0Q291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0Q291bnQgPiBkZWxldGVzVG9HbykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZDoyIHtyLGl9OjUgIHdlIHJlZHVjZSB0aGUgcmV0YWluIG9yIGluc2VydCwgYnV0IGl0IHN0
YXlzCi0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkSXRlbXMgPSByZW1vdmVkSXRlbXMu
Y29uY2F0KG5leHRBcnJheU9wZXJhdGlvbi5pdGVtcy5zcGxpY2UoMCwgZGVsZXRlc1RvR28pKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5leHRBcnJheU9wZXJhdGlvbi5jb3VudCAtPSBkZWxl
dGVzVG9HbzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUg
d2UgdHJ1bmNhdGUgdGhlIGxhc3QgYXJyYXlPcGVyYXRpb24sIHdlIGRvbid0IG5lZWQgdG8KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBpdDsgYWxzbyB0aGUgZGVsZXRlc1RvR28g
cmVkdWN0aW9uIGlzIG5vdCB0aGUgZW50aXJldHkgb2YKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5leHRDb3VudAotICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbmV4dENvdW50ID0gZGVsZXRlc1RvR287Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZXNUb0dvID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q291bnQgPT09IGRlbGV0ZXNUb0dvKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGVkZ2UgY2FzZSBvZiBkOjIg
aToyIGluIHdoaWNoIGNhc2UgYm90aCBvcGVyYXRpb25zIGdvIGF3YXkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkdXJpbmcgY29tcG9zaXRpb24uCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlTmV3QW5kTmV4dE9wID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVt
cy5jb25jYXQobmV4dEFycmF5T3BlcmF0aW9uLml0ZW1zKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZXNUb0dvIC09IG5leHRDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChuZXh0T3AgPT09IElOU0VSVCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZDoyIGk6MyB3aWxsIHJlc3VsdCBpbiBkZWxldGUgZ29pbmcgYXdheQot
ICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPcGVyYXRpb24uY291bnQgLT0gbmV4dENvdW50
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKGFycmF5T3BlcmF0aW9uLmNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBjb21wb3NlIG91ciBuZXcgZGVsZXRlIHdpdGggcG9zc2libHkgc2V2ZXJhbCBvcGVyYXRp
b25zIHRvIHRoZSByaWdodCBvZgotICAgICAgICAgICAgICAgICAgICAvLyBkaXNwYXJhdGUgdHlw
ZXMKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucy5zcGxpY2UoaW5kZXggKyAx
LCBpLTEgLSBpbmRleCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGRlbGV0ZSBvcGVyYXRpb24gY2FuIGdvIGF3YXk7IGl0IGhhcyBtZXJlbHkg
cmVkdWNlZCBzb21lIG90aGVyCi0gICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbiwgYXMg
aW4gZDozIGk6NDsgaXQgbWF5IGFsc28gaGF2ZSBlbGltaW5hdGVkIHRoYXQgb3BlcmF0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAvLyBhcyBpbiBkOjMgaTozLgotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9vcGVyYXRpb25zLnNwbGljZShpbmRleCwgcmVtb3ZlTmV3QW5kTmV4dE9wID8gMiA6
IDEpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVk
SXRlbXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgICAgIHZhciBzdHIgPSAiIjsKLSAgICAgICAgICAgICAgICBmb3JF
YWNoKHRoaXMuX29wZXJhdGlvbnMsIGZ1bmN0aW9uIChvcGVyYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICIgIiArIG9wZXJhdGlvbi50eXBlICsgIjoiICsgb3BlcmF0aW9uLmNv
dW50OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc3Vi
c3RyaW5nKDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgICBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgYW4gYXJyYXkg
b3BlcmF0aW9uLgotCi0gICAgICAgICAgICAgIEBtZXRob2QgQXJyYXlPcGVyYXRpb24KLSAgICAg
ICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAgICAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhl
IHR5cGUgb2YgdGhlIG9wZXJhdGlvbi4gIE9uZSBvZgotICAgICAgICAgICAgICBgRW1iZXIuVHJh
Y2tlZEFycmF5LntSRVRBSU4sIElOU0VSVCwgREVMRVRFfWAKLSAgICAgICAgICAgICAgQHBhcmFt
IHtudW1iZXJ9IGNvdW50IFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhpcyBvcGVyYXRpb24uCi0g
ICAgICAgICAgICAgIEBwYXJhbSB7YXJyYXl9IGl0ZW1zIFRoZSBpdGVtcyBvZiB0aGUgb3BlcmF0
aW9uLCBpZiBpbmNsdWRlZC4gIFJFVEFJTiBhbmQKLSAgICAgICAgICAgICAgSU5TRVJUIGluY2x1
ZGUgdGhlaXIgaXRlbXMsIERFTEVURSBkb2VzIG5vdC4KLSAgICAgICAgICAgICovCi0gICAgICAg
IGZ1bmN0aW9uIEFycmF5T3BlcmF0aW9uIChvcGVyYXRpb24sIGNvdW50LCBpdGVtcykgewotICAg
ICAgICAgICAgdGhpcy50eXBlID0gb3BlcmF0aW9uOyAvLyBSRVRBSU4gfCBJTlNFUlQgfCBERUxF
VEUKLSAgICAgICAgICAgIHRoaXMuY291bnQgPSBjb3VudDsKLSAgICAgICAgICAgIHRoaXMuaXRl
bXMgPSBpdGVtczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBJbnRl
cm5hbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gd2hlbiBsb29r
aW5nIHVwIG9wZXJhdGlvbnMKLSAgICAgICAgICAgICAgYnkgaXRlbSBpbmRleC4KLQotICAgICAg
ICAgICAgICBAbWV0aG9kIEFycmF5T3BlcmF0aW9uTWF0Y2gKLSAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgQHBhcmFtIHtBcnJheU9wZXJhdGlvbn0gb3BlcmF0aW9uCi0gICAg
ICAgICAgICAgIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgYG9wZXJhdGlvbmAg
aW4gdGhlIGFycmF5IG9mIG9wZXJhdGlvbnMuCi0gICAgICAgICAgICAgIEBwYXJhbSB7Ym9vbGVh
bn0gc3BsaXQgV2hldGhlciBvciBub3QgdGhlIGl0ZW0gaW5kZXggc2VhcmNoZWQgZm9yIHdvdWxk
Ci0gICAgICAgICAgICAgIHJlcXVpcmUgYSBzcGxpdCBmb3IgYSBuZXcgb3BlcmF0aW9uIHR5cGUu
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0IFRoZSBpbmRleCBvZiB0
aGUgZmlyc3QgaXRlbSBpbiB0aGUgb3BlcmF0aW9uLAotICAgICAgICAgICAgICB3aXRoIHJlc3Bl
Y3QgdG8gdGhlIHRyYWNrZWQgYXJyYXkuICBUaGUgaW5kZXggb2YgdGhlIGxhc3QgaXRlbSBjYW4g
YmUgY29tcHV0ZWQKLSAgICAgICAgICAgICAgZnJvbSBgcmFuZ2VTdGFydGAgYW5kIGBvcGVyYXRp
b24uY291bnRgLgotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gQXJyYXlPcGVyYXRp
b25NYXRjaChvcGVyYXRpb24sIGluZGV4LCBzcGxpdCwgcmFuZ2VTdGFydCkgewotICAgICAgICAg
ICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgICAgICAgICB0aGlzLmluZGV4ID0g
aW5kZXg7Ci0gICAgICAgICAgICB0aGlzLnNwbGl0ID0gc3BsaXQ7Ci0gICAgICAgICAgICB0aGlz
LnJhbmdlU3RhcnQgPSByYW5nZVN0YXJ0OwotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci10ZXN0aW5nIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItdGVzdGlu
Zy9pbml0aWFsaXplcnMiLCAiZW1iZXItdGVzdGluZy9zdXBwb3J0IiwgImVtYmVyLXRlc3Rpbmcv
c2V0dXBfZm9yX3Rlc3RpbmciLCAiZW1iZXItdGVzdGluZy90ZXN0IiwgImVtYmVyLXRlc3Rpbmcv
YWRhcHRlcnMvYWRhcHRlciIsICJlbWJlci10ZXN0aW5nL2FkYXB0ZXJzL3F1bml0IiwgImVtYmVy
LXRlc3RpbmcvaGVscGVycyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBl
bmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5
NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fKSB7
Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgLy8gdG8gc2V0dXAgaW5pdGlhbGl6ZXIKLSAgICAg
ICAgLy8gdG8gaGFuZGxlIHZhcmlvdXMgZWRnZSBjYXNlcwotCi0gICAgICAgIHZhciBzZXR1cEZv
clRlc3RpbmcgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRlc3Qg
PSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEFkYXB0ZXIgPSBfX2Rl
cGVuZGVuY3k2X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFFVbml0QWRhcHRlciA9IF9fZGVw
ZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBhZGRzIGhlbHBlcnMgdG8gaGVscGVy
cyBvYmplY3QgaW4gVGVzdAotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBFbWJlciBUZXN0
aW5nCi0KLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgICBAc3VibW9k
dWxlIGVtYmVyLXRlc3RpbmcKLSAgICAgICAgICAgICAgQHJlcXVpcmVzIGVtYmVyLWFwcGxpY2F0
aW9uCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIEVtYmVyLlRlc3QgPSBUZXN0OwotICAgICAg
ICBFbWJlci5UZXN0LkFkYXB0ZXIgPSBBZGFwdGVyOwotICAgICAgICBFbWJlci5UZXN0LlFVbml0
QWRhcHRlciA9IFFVbml0QWRhcHRlcjsKLSAgICAgICAgRW1iZXIuc2V0dXBGb3JUZXN0aW5nID0g
c2V0dXBGb3JUZXN0aW5nOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdGVzdGluZy9hZGFw
dGVycy9hZGFwdGVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvdXRp
bHMiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9
IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5LCi0gICAgICAg
IHZhciBpbnNwZWN0ID0gX19kZXBlbmRlbmN5Ml9fLmluc3BlY3Q7Ci0gICAgICAgIHZhciBFbWJl
ck9iamVjdCA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXRl
c3RpbmcKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBw
cmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBjcmVhdGUgaG9va3MgdGhhdCBjYW4g
YmUgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgYnkgYW4gYWRhcHRlciBmb3IgdmFyaW91cyB0
ZXN0IGZyYW1ld29ya3MuCi0KLSAgICAgICAgICAgICAgQGNsYXNzIEFkYXB0ZXIKLSAgICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlci5UZXN0Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIg
QWRhcHRlciA9IEVtYmVyT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhbiBhc3lu
YyBvcGVyYXRpb24gaXMgYWJvdXQgdG8gc3RhcnQuCi0KLSAgICAgICAgICAgICAgICAgICAgT3Zl
cnJpZGUgdGhpcyB0byBjYWxsIHlvdXIgZnJhbWV3b3JrJ3MgbWV0aG9kcyB0aGF0IGhhbmRsZSBh
c3luYwotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBwdWJsaWMKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBhc3luY1N0YXJ0Ci0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXN5bmNTdGFydDogRW1iZXIuSywKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBj
YWxsZWQgd2hlbmV2ZXIgYW4gYXN5bmMgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGFzeW5j
RW5kCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXN5bmNFbmQ6IEVtYmVyLkss
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBPdmVycmlkZSB0aGlzIG1l
dGhvZCB3aXRoIHlvdXIgdGVzdGluZyBmcmFtZXdvcmsncyBmYWxzZSBhc3NlcnRpb24uCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGFuIGV4Y2Vw
dGlvbiBvY2N1cnMgY2F1c2luZyB0aGUgdGVzdGluZwotICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlIHRvIGZhaWwuCi0KLSAgICAgICAgICAgICAgICAgICAgUVVuaXQgZXhhbXBsZToKLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9uOiBmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgb2soZmFs
c2UsIGVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBl
cnJvciBUaGUgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBleGNlcHRpb246IGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhw
b3J0c19fWyJkZWZhdWx0Il0gPSBBZGFwdGVyOwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXIt
dGVzdGluZy9hZGFwdGVycy9xdW5pdCIsCi0gICAgWyJlbWJlci10ZXN0aW5nL2FkYXB0ZXJzL2Fk
YXB0ZXIiLCAiZW1iZXItbWV0YWwvdXRpbHMiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBBZGFwdGVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBpbnNwZWN0ID0gX19kZXBlbmRlbmN5Ml9fLmluc3BlY3Q7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbWV0
aG9kcyBkZWZpbmVkIGJ5IEVtYmVyLlRlc3QuQWRhcHRlciBmb3IgdGhlCi0gICAgICAgICAgICAg
IFFVbml0IHRlc3RpbmcgZnJhbWV3b3JrLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBRVW5pdEFk
YXB0ZXIKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlci5UZXN0Ci0gICAgICAgICAgICAg
IEBleHRlbmRzIEVtYmVyLlRlc3QuQWRhcHRlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgX19l
eHBvcnRzX19bImRlZmF1bHQiXSA9IEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICAgICAgICAgIGFzeW5j
U3RhcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIFFVbml0LnN0b3AoKTsKLSAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICBhc3luY0VuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgUVVuaXQuc3RhcnQoKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBleGNlcHRp
b246IGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgb2soZmFsc2UsIGluc3BlY3Qo
ZXJyb3IpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCJlbWJlci10ZXN0aW5nL2hlbHBlcnMiLAotICAgIFsiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
IiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLXZp
ZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1iZXItdGVzdGluZy90ZXN0Il0sCi0gICAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBl
bmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5MV9fLmdldDsKLSAgICAgICAgdmFyIEVtYmVyRXJy
b3IgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVw
ZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgalF1ZXJ5ID0gX19kZXBlbmRlbmN5
NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBUZXN0ID0gX19kZXBlbmRlbmN5NV9fWyJkZWZh
dWx0Il07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAqIEBtb2R1bGUgZW1iZXIKLSAgICAg
ICAgICAgICogQHN1Ym1vZHVsZSBlbWJlci10ZXN0aW5nCi0gICAgICAgICAgICAqLwotCi0gICAg
ICAgIHZhciBoZWxwZXIgPSBUZXN0LnJlZ2lzdGVySGVscGVyOwotICAgICAgICB2YXIgYXN5bmNI
ZWxwZXIgPSBUZXN0LnJlZ2lzdGVyQXN5bmNIZWxwZXI7Ci0gICAgICAgIHZhciBjb3VudEFzeW5j
ID0gMDsKLQotICAgICAgICBmdW5jdGlvbiBjdXJyZW50Um91dGVOYW1lKGFwcCkgewotICAgICAg
ICAgICAgdmFyIGFwcENvbnRyb2xsZXIgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ2NvbnRy
b2xsZXI6YXBwbGljYXRpb24nKTsKLQotICAgICAgICAgICAgcmV0dXJuIGdldChhcHBDb250cm9s
bGVyLCAnY3VycmVudFJvdXRlTmFtZScpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
Y3VycmVudFBhdGgoYXBwKSB7Ci0gICAgICAgICAgICB2YXIgYXBwQ29udHJvbGxlciA9IGFwcC5f
X2NvbnRhaW5lcl9fLmxvb2t1cCgnY29udHJvbGxlcjphcHBsaWNhdGlvbicpOwotCi0gICAgICAg
ICAgICByZXR1cm4gZ2V0KGFwcENvbnRyb2xsZXIsICdjdXJyZW50UGF0aCcpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gY3VycmVudFVSTChhcHApIHsKLSAgICAgICAgICAgIHZhciBy
b3V0ZXIgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ3JvdXRlcjptYWluJyk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBnZXQocm91dGVyLCAnbG9jYXRpb24nKS5nZXRVUkwoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIHZpc2l0KGFwcCwgdXJsKSB7Ci0gICAgICAgICAgICB2YXIg
cm91dGVyID0gYXBwLl9fY29udGFpbmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicpOwotICAgICAg
ICAgICAgcm91dGVyLmxvY2F0aW9uLnNldFVSTCh1cmwpOwotCi0gICAgICAgICAgICBpZiAoYXBw
Ll9yZWFkaW5lc3NEZWZlcnJhbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcm91dGVyWydpbml0
aWFsVVJMJ10gPSB1cmw7Ci0gICAgICAgICAgICAgICAgcnVuKGFwcCwgJ2FkdmFuY2VSZWFkaW5l
c3MnKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgcm91dGVyWydpbml0aWFsVVJMJ107Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJ1bihhcHAsIGFwcC5oYW5kbGVVUkws
IHVybCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBhcHAudGVzdEhlbHBl
cnMud2FpdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2xpY2soYXBwLCBzZWxl
Y3RvciwgY29udGV4dCkgewotICAgICAgICAgICAgdmFyICRlbCA9IGFwcC50ZXN0SGVscGVycy5m
aW5kV2l0aEFzc2VydChzZWxlY3RvciwgY29udGV4dCk7Ci0gICAgICAgICAgICBydW4oJGVsLCAn
bW91c2Vkb3duJyk7Ci0KLSAgICAgICAgICAgIGlmICgkZWwuaXMoJzppbnB1dCcpKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHR5cGUgPSAkZWwucHJvcCgndHlwZScpOwotICAgICAgICAgICAgICAg
IGlmICh0eXBlICE9PSAnY2hlY2tib3gnICYmIHR5cGUgIT09ICdyYWRpbycgJiYgdHlwZSAhPT0g
J2hpZGRlbicpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuKCRlbCwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IHRyaWdnZXIgdGhlIGBm
b2N1c2luYCBldmVudCBpZiB0aGUgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBk
b2VzIG5vdCBoYXZlIGZvY3VzLiBJZiB0aGUgZG9jdW1lbnQgZG9lc24ndCBoYXZlIGZvY3VzIGp1
c3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0cmlnZ2VyKCdmb2N1c2luJykgaW5z
dGVhZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwg
ZG9jdW1lbnQuaGFzRm9jdXMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
Zm9jdXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdmb2N1c2luJyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcnVuKCRlbCwgJ21vdXNldXAnKTsKLSAgICAgICAg
ICAgIHJ1bigkZWwsICdjbGljaycpOwotCi0gICAgICAgICAgICByZXR1cm4gYXBwLnRlc3RIZWxw
ZXJzLndhaXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHRyaWdnZXJFdmVudChh
cHAsIHNlbGVjdG9yLCBjb250ZXh0LCB0eXBlLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMykgewotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBl
OwotICAgICAgICAgICAgICAgIHR5cGUgPSBjb250ZXh0OwotICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlv
bnMgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgJGVsID0gYXBwLnRlc3RIZWxwZXJzLmZpbmRX
aXRoQXNzZXJ0KHNlbGVjdG9yLCBjb250ZXh0KTsKLQotICAgICAgICAgICAgdmFyIGV2ZW50ID0g
alF1ZXJ5LkV2ZW50KHR5cGUsIG9wdGlvbnMpOwotCi0gICAgICAgICAgICBydW4oJGVsLCAndHJp
Z2dlcicsIGV2ZW50KTsKLQotICAgICAgICAgICAgcmV0dXJuIGFwcC50ZXN0SGVscGVycy53YWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBrZXlFdmVudChhcHAsIHNlbGVjdG9y
LCBjb250ZXh0LCB0eXBlLCBrZXlDb2RlKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGtleUNv
ZGUgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAga2V5Q29kZSA9IHR5cGU7Ci0g
ICAgICAgICAgICAgICAgdHlwZSA9IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9
IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBhcHAudGVzdEhlbHBl
cnMudHJpZ2dlckV2ZW50KHNlbGVjdG9yLCBjb250ZXh0LCB0eXBlLCB7Ci0gICAgICAgICAgICAg
ICAga2V5Q29kZToga2V5Q29kZSwKLSAgICAgICAgICAgICAgICB3aGljaDoga2V5Q29kZSAKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmlsbEluKGFwcCwg
c2VsZWN0b3IsIGNvbnRleHQsIHRleHQpIHsKLSAgICAgICAgICAgIHZhciAkZWw7Ci0gICAgICAg
ICAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAg
dGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAkZWwgPSBhcHAudGVzdEhlbHBlcnMuZmluZFdpdGhBc3NlcnQo
c2VsZWN0b3IsIGNvbnRleHQpOwotICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICRlbC52YWwodGV4dCkuY2hhbmdlKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybiBhcHAudGVzdEhlbHBlcnMud2FpdCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gZmluZFdpdGhBc3NlcnQoYXBwLCBzZWxlY3RvciwgY29udGV4dCkgewotICAg
ICAgICAgICAgdmFyICRlbCA9IGFwcC50ZXN0SGVscGVycy5maW5kKHNlbGVjdG9yLCBjb250ZXh0
KTsKLSAgICAgICAgICAgIGlmICgkZWwubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVtYmVyRXJyb3IoIkVsZW1lbnQgIiArIHNlbGVjdG9yICsgIiBub3QgZm91bmQu
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gJGVsOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gZmluZChhcHAsIHNlbGVjdG9yLCBjb250ZXh0KSB7Ci0gICAgICAg
ICAgICB2YXIgJGVsOwotICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZ2V0KGFwcCwg
J3Jvb3RFbGVtZW50Jyk7Ci0gICAgICAgICAgICAkZWwgPSBhcHAuJChzZWxlY3RvciwgY29udGV4
dCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAkZWw7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBhbmRUaGVuKGFwcCwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHJldHVybiBhcHAudGVz
dEhlbHBlcnMud2FpdChjYWxsYmFjayhhcHApKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIHdhaXQoYXBwLCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIFRlc3QucHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmly
c3QgYXN5bmMgcHJvbWlzZSwga2ljayBvZmYgdGhlIGFzeW5jIHRlc3QKLSAgICAgICAgICAgICAg
ICBpZiAoKytjb3VudEFzeW5jID09PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRlc3QuYWRh
cHRlci5hc3luY1N0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gRXZlcnkgMTBtcywgcG9sbCBmb3IgdGhlIGFzeW5jIHRoaW5nIHRvIGhhdmUgZmluaXNoZWQK
LSAgICAgICAgICAgICAgICB2YXIgd2F0Y2hlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyAxLiBJZiB0aGUgcm91dGVyIGlzIGxvYWRpbmcsIGtlZXAg
cG9sbGluZwotICAgICAgICAgICAgICAgICAgICB2YXIgcm91dGVySXNMb2FkaW5nID0gISFhcHAu
X19jb250YWluZXJfXy5sb29rdXAoJ3JvdXRlcjptYWluJykucm91dGVyLmFjdGl2ZVRyYW5zaXRp
b247Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZXJJc0xvYWRpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIDIuIElmIHRoZXJlIGFyZSBwZW5kaW5nIEFqYXggcmVxdWVzdHMsIGtl
ZXAgcG9sbGluZwotICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC5wZW5kaW5nQWpheFJlcXVl
c3RzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAzLiBJZiB0aGVyZSBhcmUgc2NoZWR1bGVk
IHRpbWVycyBvciB3ZSBhcmUgaW5zaWRlIG9mIGEgcnVuIGxvb3AsIGtlZXAgcG9sbGluZwotICAg
ICAgICAgICAgICAgICAgICBpZiAocnVuLmhhc1NjaGVkdWxlZFRpbWVycygpIHx8IHJ1bi5jdXJy
ZW50UnVuTG9vcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LndhaXRlcnMgJiYgVGVz
dC53YWl0ZXJzLmFueShmdW5jdGlvbih3YWl0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjb250ZXh0ID0gd2FpdGVyWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNh
bGxiYWNrID0gd2FpdGVyWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjYWxs
YmFjay5jYWxsKGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICB9KSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN0b3AgcG9sbGluZwotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVy
dmFsKHdhdGNoZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxh
c3QgYXN5bmMgcHJvbWlzZSwgZW5kIHRoZSBhc3luYyB0ZXN0Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgtLWNvdW50QXN5bmMgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRlc3Qu
YWRhcHRlci5hc3luY0VuZCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gU3luY2hyb25vdXNseSByZXNvbHZlIHRoZSBwcm9taXNlCi0gICAgICAgICAg
ICAgICAgICAgIHJ1bihudWxsLCByZXNvbHZlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfSwg
MTApOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAgICAqIExvYWRzIGEgcm91dGUsIHNldHMgdXAgYW55IGNvbnRyb2xsZXJzLCBhbmQgcmVu
ZGVycyBhbnkgdGVtcGxhdGVzIGFzc29jaWF0ZWQKLSAgICAgICAgICAgICogd2l0aCB0aGUgcm91
dGUgYXMgdGhvdWdoIGEgcmVhbCB1c2VyIGhhZCB0cmlnZ2VyZWQgdGhlIHJvdXRlIGNoYW5nZSB3
aGlsZQotICAgICAgICAgICAgKiB1c2luZyB5b3VyIGFwcC4KLSAgICAgICAgICAgICoKLSAgICAg
ICAgICAgICogRXhhbXBsZToKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICogYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgKiB2aXNpdCgncG9zdHMvaW5kZXgnKS50aGVuKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgKiAgIC8vIGFzc2VydCBzb21ldGhpbmcKLSAgICAgICAgICAgICogfSk7
Ci0gICAgICAgICAgICAqIGBgYAotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBAbWV0aG9k
IHZpc2l0Ci0gICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgdGhlIG5hbWUgb2YgdGhl
IHJvdXRlCi0gICAgICAgICAgICAqIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgICAgICAg
ICovCi0gICAgICAgIGFzeW5jSGVscGVyKCd2aXNpdCcsIHZpc2l0KTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICogQ2xpY2tzIGFuIGVsZW1lbnQgYW5kIHRyaWdnZXJzIGFueSBhY3Rpb25z
IHRyaWdnZXJlZCBieSB0aGUgZWxlbWVudCdzIGBjbGlja2AKLSAgICAgICAgICAgICogZXZlbnQu
Ci0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIEV4YW1wbGU6Ci0gICAgICAgICAgICAqCi0g
ICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICogY2xpY2soJy5zb21lLWpR
dWVyeS1zZWxlY3RvcicpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAqICAgLy8gYXNz
ZXJ0IHNvbWV0aGluZwotICAgICAgICAgICAgKiB9KTsKLSAgICAgICAgICAgICogYGBgCi0gICAg
ICAgICAgICAqCi0gICAgICAgICAgICAqIEBtZXRob2QgY2xpY2sKLSAgICAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmb3IgZmluZGluZyBlbGVtZW50
IG9uIHRoZSBET00KLSAgICAgICAgICAgICogQHJldHVybiB7UlNWUC5Qcm9taXNlfQotICAgICAg
ICAgICAgKi8KLSAgICAgICAgYXN5bmNIZWxwZXIoJ2NsaWNrJywgY2xpY2spOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgKiBTaW11bGF0ZXMgYSBrZXkgZXZlbnQsIGUuZy4gYGtleXByZXNz
YCwgYGtleWRvd25gLCBga2V5dXBgIHdpdGggdGhlIGRlc2lyZWQga2V5Q29kZQotICAgICAgICAg
ICAgKgotICAgICAgICAgICAgKiBFeGFtcGxlOgotICAgICAgICAgICAgKgotICAgICAgICAgICAg
KiBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAqIGtleUV2ZW50KCcuc29tZS1qUXVlcnktc2Vs
ZWN0b3InLCAna2V5cHJlc3MnLCAxMykudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICog
IC8vIGFzc2VydCBzb21ldGhpbmcKLSAgICAgICAgICAgICogfSk7Ci0gICAgICAgICAgICAqIGBg
YAotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBAbWV0aG9kIGtleUV2ZW50Ci0gICAgICAg
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBqUXVlcnkgc2VsZWN0b3IgZm9yIGZpbmRp
bmcgZWxlbWVudCBvbiB0aGUgRE9NCi0gICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBl
IHRoZSB0eXBlIG9mIGtleSBldmVudCwgZS5nLiBga2V5cHJlc3NgLCBga2V5ZG93bmAsIGBrZXl1
cGAKLSAgICAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGtleUNvZGUgdGhlIGtleUNvZGUgb2Yg
dGhlIHNpbXVsYXRlZCBrZXkgZXZlbnQKLSAgICAgICAgICAgICogQHJldHVybiB7UlNWUC5Qcm9t
aXNlfQotICAgICAgICAgICAgKiBAc2luY2UgMS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAg
IGFzeW5jSGVscGVyKCdrZXlFdmVudCcsIGtleUV2ZW50KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICogRmlsbHMgaW4gYW4gaW5wdXQgZWxlbWVudCB3aXRoIHNvbWUgdGV4dC4KLSAgICAg
ICAgICAgICoKLSAgICAgICAgICAgICogRXhhbXBsZToKLSAgICAgICAgICAgICoKLSAgICAgICAg
ICAgICogYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgKiBmaWxsSW4oJyNlbWFpbCcsICd5b3VA
ZXhhbXBsZS5jb20nKS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgKiAgIC8vIGFzc2Vy
dCBzb21ldGhpbmcKLSAgICAgICAgICAgICogfSk7Ci0gICAgICAgICAgICAqIGBgYAotICAgICAg
ICAgICAgKgotICAgICAgICAgICAgKiBAbWV0aG9kIGZpbGxJbgotICAgICAgICAgICAgKiBAcGFy
YW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIGZpbmRpbmcgYW4gaW5wdXQgZWxl
bWVudCBvbiB0aGUgRE9NCi0gICAgICAgICAgICAqIHRvIGZpbGwgdGV4dCB3aXRoCi0gICAgICAg
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRleHQgdG8gcGxhY2UgaW5zaWRlIHRoZSBpbnB1
dCBlbGVtZW50Ci0gICAgICAgICAgICAqIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgICAg
ICAgICovCi0gICAgICAgIGFzeW5jSGVscGVyKCdmaWxsSW4nLCBmaWxsSW4pOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgICAgKiBGaW5kcyBhbiBlbGVtZW50IGluIHRoZSBjb250ZXh0IG9mIHRo
ZSBhcHAncyBjb250YWluZXIgZWxlbWVudC4gQSBzaW1wbGUgYWxpYXMKLSAgICAgICAgICAgICog
Zm9yIGBhcHAuJChzZWxlY3RvcilgLgotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBFeGFt
cGxlOgotICAgICAgICAgICAgKgotICAgICAgICAgICAgKiBgYGBqYXZhc2NyaXB0Ci0gICAgICAg
ICAgICAqIHZhciAkZWwgPSBmaW5kKCcubXktc2VsZWN0b3InKTsKLSAgICAgICAgICAgICogYGBg
Ci0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIEBtZXRob2QgZmluZAotICAgICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgalF1ZXJ5IHN0cmluZyBzZWxlY3RvciBmb3IgZWxl
bWVudCBsb29rdXAKLSAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBqUXVlcnkgb2JqZWN0
IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkKLSAgICAgICAgICAgICovCi0g
ICAgICAgIGhlbHBlcignZmluZCcsIGZpbmQpOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
KiBMaWtlIGBmaW5kYCwgYnV0IHRocm93cyBhbiBlcnJvciBpZiB0aGUgZWxlbWVudCBzZWxlY3Rv
ciByZXR1cm5zIG5vIHJlc3VsdHMuCi0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIEV4YW1w
bGU6Ci0gICAgICAgICAgICAqCi0gICAgICAgICAgICAqIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICogdmFyICRlbCA9IGZpbmRXaXRoQXNzZXJ0KCcuZG9lc250LWV4aXN0Jyk7IC8vIHRocm93
cyBlcnJvcgotICAgICAgICAgICAgKiBgYGAKLSAgICAgICAgICAgICoKLSAgICAgICAgICAgICog
QG1ldGhvZCBmaW5kV2l0aEFzc2VydAotICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2Vs
ZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIHN0cmluZyBmb3IgZmluZGluZyBhbiBlbGVtZW50IHdpdGhp
bgotICAgICAgICAgICAgKiB0aGUgRE9NCi0gICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0g
alF1ZXJ5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5Ci0gICAg
ICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvd3MgZXJyb3IgaWYgalF1ZXJ5IG9iamVjdCBy
ZXR1cm5lZCBoYXMgYSBsZW5ndGggb2YgMAotICAgICAgICAgICAgKi8KLSAgICAgICAgaGVscGVy
KCdmaW5kV2l0aEFzc2VydCcsIGZpbmRXaXRoQXNzZXJ0KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQ2F1c2VzIHRoZSBydW4gbG9vcCB0byBwcm9jZXNzIGFueSBwZW5kaW5nIGV2ZW50
cy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0Ci0gICAgICAgICAgICAgIGFueSBhc3luYyBv
cGVyYXRpb25zIGZyb20gb3RoZXIgaGVscGVycyAob3IgeW91ciBhc3NlcnRpb25zKSBoYXZlIGJl
ZW4gcHJvY2Vzc2VkLgotCi0gICAgICAgICAgICAgIFRoaXMgaXMgbW9zdCBvZnRlbiB1c2VkIGFz
IHRoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBoZWxwZXIgZnVuY3Rpb25zIChzZWUgJ2NsaWNrJywK
LSAgICAgICAgICAgICAgJ2ZpbGxJbicsJ3Zpc2l0JyxldGMpLgotCi0gICAgICAgICAgICAgIEV4
YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBFbWJl
ci5UZXN0LnJlZ2lzdGVyQXN5bmNIZWxwZXIoJ2xvZ2luVXNlcicsIGZ1bmN0aW9uKGFwcCwgdXNl
cm5hbWUsIHBhc3N3b3JkKSB7Ci0gICAgICAgICAgICAgICAgdmlzaXQoJ3NlY3VyZWQvcGF0aC9o
ZXJlJykKLSAgICAgICAgICAgICAgICAuZmlsbEluKCcjdXNlcm5hbWUnLCB1c2VybmFtZSkKLSAg
ICAgICAgICAgICAgICAuZmlsbEluKCcjcGFzc3dvcmQnLCB1c2VybmFtZSkKLSAgICAgICAgICAg
ICAgICAuY2xpY2soJy5zdWJtaXQnKQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFwcC50ZXN0
SGVscGVycy53YWl0KCk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIEBtZXRo
b2Qgd2FpdAotICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgVGhlIHZhbHVlIHRv
IGJlIHJldHVybmVkLgotICAgICAgICAgICAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0gICAg
ICAgICAgICAqLwotICAgICAgICBhc3luY0hlbHBlcignd2FpdCcsIHdhaXQpOwotICAgICAgICBh
c3luY0hlbHBlcignYW5kVGhlbicsIGFuZFRoZW4pOwotCi0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91dGUgbmFtZS4KLQotICAgICAg
ICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ZnVuY3Rpb24gdmFsaWRhdGVSb3V0ZU5hbWUoKXsKLSAgICAgICAgICAgIGVxdWFsKGN1cnJlbnRS
b3V0ZU5hbWUoKSwgJ3NvbWUucGF0aCcsICJjb3JyZWN0IHJvdXRlIHdhcyB0cmFuc2l0aW9uZWQg
aW50by4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmlzaXQoJy9zb21lL3BhdGgn
KS50aGVuKHZhbGlkYXRlUm91dGVOYW1lKQotICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
IEBtZXRob2QgY3VycmVudFJvdXRlTmFtZQotICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBU
aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSByb3V0ZS4KLSAgICAgICAgICAgIEBzaW5j
ZSAxLjUuMAotICAgICAgICAgICAgKi8KLSAgICAgICAgaGVscGVyKCdjdXJyZW50Um91dGVOYW1l
JywgY3VycmVudFJvdXRlTmFtZSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJldHVy
bnMgdGhlIGN1cnJlbnQgcGF0aC4KLQotICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVUkwoKXsKLSAg
ICAgICAgICAgIGVxdWFsKGN1cnJlbnRQYXRoKCksICdzb21lLnBhdGguaW5kZXgnLCAiY29ycmVj
dCBwYXRoIHdhcyB0cmFuc2l0aW9uZWQgaW50by4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgY2xpY2soJyNzb21lLWxpbmstaWQnKS50aGVuKHZhbGlkYXRlVVJMKTsKLSAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICBAbWV0aG9kIGN1cnJlbnRQYXRoCi0gICAgICAgICAgICBA
cmV0dXJuIHtPYmplY3R9IFRoZSBjdXJyZW50bHkgYWN0aXZlIHBhdGguCi0gICAgICAgICAgICBA
c2luY2UgMS41LjAKLSAgICAgICAgICAgICovCi0gICAgICAgIGhlbHBlcignY3VycmVudFBhdGgn
LCBjdXJyZW50UGF0aCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFJldHVybnMgdGhl
IGN1cnJlbnQgVVJMLgotCi0gICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVSTCgpewotICAgICAgICAg
ICAgZXF1YWwoY3VycmVudFVSTCgpLCAnL3NvbWUvcGF0aCcsICJjb3JyZWN0IFVSTCB3YXMgdHJh
bnNpdGlvbmVkIGludG8uIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsaWNrKCcj
c29tZS1saW5rLWlkJykudGhlbih2YWxpZGF0ZVVSTCk7Ci0gICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgQG1ldGhvZCBjdXJyZW50VVJMCi0gICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9
IFRoZSBjdXJyZW50bHkgYWN0aXZlIFVSTC4KLSAgICAgICAgICAgIEBzaW5jZSAxLjUuMAotICAg
ICAgICAgICAgKi8KLSAgICAgICAgaGVscGVyKCdjdXJyZW50VVJMJywgY3VycmVudFVSTCk7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRyaWdnZXJzIHRoZSBnaXZlbiBET00gZXZlbnQg
b24gdGhlIGVsZW1lbnQgaWRlbnRpZmllZCBieSB0aGUgcHJvdmlkZWQgc2VsZWN0b3IuCi0KLSAg
ICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgIHRyaWdnZXJFdmVudCgnI3NvbWUtZWxlbS1pZCcsICdibHVyJyk7Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFRoaXMgaXMgYWN0dWFsbHkgdXNlZCBpbnRlcm5h
bGx5IGJ5IHRoZSBga2V5RXZlbnRgIGhlbHBlciBsaWtlIHNvOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCcjc29tZS1lbGVtLWlkJywg
J2tleXByZXNzJywgeyBrZXlDb2RlOiAxMyB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICBAbWV0aG9kIHRyaWdnZXJFdmVudAotICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBzZWxlY3RvciBqUXVlcnkgc2VsZWN0b3IgZm9yIGZpbmRpbmcgZWxlbWVudCBvbiB0aGUgRE9N
Ci0gICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFtjb250ZXh0XSBqUXVlcnkgc2VsZWN0b3Ig
dGhhdCB3aWxsIGxpbWl0IHRoZSBzZWxlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnQgdG8gZmluZCBvbmx5IHdpdGhpbiB0aGUgY29udGV4dCdzIGNo
aWxkcmVuCi0gICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUg
dG8gYmUgdHJpZ2dlcmVkLgotICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRo
ZSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBqUXVlcnkuRXZlbnQuCi0gICAgICAgICAgICAgQHJl
dHVybiB7UlNWUC5Qcm9taXNlfQotICAgICAgICAgICAgIEBzaW5jZSAxLjUuMAotICAgICAgICAg
ICAgKi8KLSAgICAgICAgYXN5bmNIZWxwZXIoJ3RyaWdnZXJFdmVudCcsIHRyaWdnZXJFdmVudCk7
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci10ZXN0aW5nL2luaXRpYWxpemVycyIsCi0gICAg
WyJlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgb25Mb2FkID0g
X19kZXBlbmRlbmN5MV9fLm9uTG9hZDsKLQotICAgICAgICB2YXIgbmFtZSA9ICdkZWZlclJlYWRp
bmVzcyBpbiBgdGVzdGluZ2AgbW9kZSc7Ci0KLSAgICAgICAgb25Mb2FkKCdFbWJlci5BcHBsaWNh
dGlvbicsIGZ1bmN0aW9uKEFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoIUFwcGxpY2F0
aW9uLmluaXRpYWxpemVyc1tuYW1lXSkgewotICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uLmlu
aXRpYWxpemVyKHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKLQotICAgICAgICAg
ICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIGFwcGxpY2F0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwbGljYXRpb24udGVzdGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLmRlZmVyUmVhZGluZXNzKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVm
aW5lKCJlbWJlci10ZXN0aW5nL3NldHVwX2Zvcl90ZXN0aW5nIiwKLSAgICBbImVtYmVyLW1ldGFs
L2NvcmUiLCAiZW1iZXItdGVzdGluZy9hZGFwdGVycy9xdW5pdCIsICJlbWJlci12aWV3cy9zeXN0
ZW0vanF1ZXJ5IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVs
dCJdOwotICAgICAgICAvLyBpbXBvcnQgVGVzdCBmcm9tICJlbWJlci10ZXN0aW5nL3Rlc3QiOyAg
Ly8gRVM2VE9ETzogZml4IHdoZW4gY3ljbGVzIGFyZSBzdXBwb3J0ZWQKLSAgICAgICAgdmFyIFFV
bml0QWRhcHRlciA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgalF1
ZXJ5ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgdmFyIFRlc3QsIHJl
cXVlc3RzOwotCi0gICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudEFqYXhQZW5kaW5nUmVxdWVzdHMo
XywgeGhyKSB7Ci0gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKHhocik7Ci0gICAgICAgICAgICBU
ZXN0LnBlbmRpbmdBamF4UmVxdWVzdHMgPSByZXF1ZXN0cy5sZW5ndGg7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiBkZWNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKF8sIHhocikgewot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIGlmICh4aHIgPT09IHJlcXVlc3RzW2ldKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBUZXN0LnBlbmRpbmdBamF4UmVxdWVzdHMgPSByZXF1ZXN0cy5s
ZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgU2V0cyBFbWJl
ciB1cCBmb3IgdGVzdGluZy4gVGhpcyBpcyB1c2VmdWwgdG8gcGVyZm9ybQotICAgICAgICAgICAg
ICBiYXNpYyBzZXR1cCBzdGVwcyBpbiBvcmRlciB0byB1bml0IHRlc3QuCi0KLSAgICAgICAgICAg
ICAgVXNlIGBBcHAuc2V0dXBGb3JUZXN0aW5nYCB0byBwZXJmb3JtIGludGVncmF0aW9uIHRlc3Rz
IChmdWxsCi0gICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHRlc3RpbmcpLgotCi0gICAgICAgICAg
ICAgIEBtZXRob2Qgc2V0dXBGb3JUZXN0aW5nCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICAgQHNpbmNlIDEuNS4wCi0gICAgICAgICAgICAqLwotICAgICAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0gZnVuY3Rpb24gc2V0dXBGb3JUZXN0aW5nKCkgewotICAg
ICAgICAgICAgaWYgKCFUZXN0KSB7Ci0gICAgICAgICAgICAgICAgVGVzdCA9IHJlcXVpcmVNb2R1
bGUoJ2VtYmVyLXRlc3RpbmcvdGVzdCcpWydkZWZhdWx0J107Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEVtYmVyLnRlc3RpbmcgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBpZiBhZGFw
dGVyIGlzIG5vdCBtYW51YWxseSBzZXQgZGVmYXVsdCB0byBRVW5pdAotICAgICAgICAgICAgaWYg
KCFUZXN0LmFkYXB0ZXIpIHsKLSAgICAgICAgICAgICAgICBUZXN0LmFkYXB0ZXIgPSBRVW5pdEFk
YXB0ZXIuY3JlYXRlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcXVlc3RzID0g
W107Ci0gICAgICAgICAgICBUZXN0LnBlbmRpbmdBamF4UmVxdWVzdHMgPSByZXF1ZXN0cy5sZW5n
dGg7Ci0KLSAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkub2ZmKCdhamF4U2VuZCcsIGluY3Jl
bWVudEFqYXhQZW5kaW5nUmVxdWVzdHMpOwotICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5v
ZmYoJ2FqYXhDb21wbGV0ZScsIGRlY3JlbWVudEFqYXhQZW5kaW5nUmVxdWVzdHMpOwotICAgICAg
ICAgICAgalF1ZXJ5KGRvY3VtZW50KS5vbignYWpheFNlbmQnLCBpbmNyZW1lbnRBamF4UGVuZGlu
Z1JlcXVlc3RzKTsKLSAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2FqYXhDb21wbGV0
ZScsIGRlY3JlbWVudEFqYXhQZW5kaW5nUmVxdWVzdHMpOwotICAgICAgICB9Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci10ZXN0aW5nL3N1cHBvcnQiLAotICAgIFsiZW1iZXItbWV0YWwvY29y
ZSIsICJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5Il0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGpR
dWVyeSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgICAgICBAbW9kdWxlIGVtYmVyCi0gICAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdGVz
dGluZwotICAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFyICQgPSBqUXVlcnk7Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBjaGVja2JveCBhbmQg
dHJpZ2dlcnMgdGhlIGNsaWNrIGV2ZW50IHRvIGZpcmUgdGhlCi0gICAgICAgICAgICAgIHBhc3Nl
ZCBpbiBoYW5kbGVyLiBJdCBpcyB1c2VkIHRvIGNvcnJlY3QgZm9yIGEgYnVnIGluIG9sZGVyIHZl
cnNpb25zCi0gICAgICAgICAgICAgIG9mIGpRdWVyeSAoZS5nIDEuOC4zKS4KLQotICAgICAgICAg
ICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAbWV0aG9kIHRlc3RDaGVja2JveENsaWNrCi0g
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB0ZXN0Q2hlY2tib3hDbGljayhoYW5kbGVy
KSB7Ci0gICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giPicpCi0gICAgICAgICAg
ICAuY3NzKHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKLSAgICAgICAg
ICAgICAgICBsZWZ0OiAnLTEwMDBweCcsCi0gICAgICAgICAgICAgICAgdG9wOiAnLTEwMDBweCcg
Ci0gICAgICAgICAgICB9KQotICAgICAgICAgICAgLmFwcGVuZFRvKCdib2R5JykKLSAgICAgICAg
ICAgIC5vbignY2xpY2snLCBoYW5kbGVyKQotICAgICAgICAgICAgLnRyaWdnZXIoJ2NsaWNrJykK
LSAgICAgICAgICAgIC5yZW1vdmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgICQoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmUgd2hldGhl
ciBhIGNoZWNrYm94IGNoZWNrZWQgdXNpbmcgalF1ZXJ5J3MgImNsaWNrIiBtZXRob2Qgd2lsbCBo
YXZlCi0gICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBpdHMgY2hlY2tl
ZCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBJZiB3ZSBkZXRlcm1pbmUgdGhhdCB0
aGUgY3VycmVudCBqUXVlcnkgdmVyc2lvbiBleGhpYml0cyB0aGlzIGJlaGF2aW9yLAotICAgICAg
ICAgICAgICAgICAgICBwYXRjaCBpdCB0byB3b3JrIGNvcnJlY3RseSBhcyBpbiB0aGUgY29tbWl0
IGZvciB0aGUgYWN0dWFsIGZpeDoKLSAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIu
Y29tL2pxdWVyeS9qcXVlcnkvY29tbWl0LzFmYjJmOTIuCi0gICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgdGVzdENoZWNrYm94Q2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLmNoZWNrZWQgJiYgISQuZXZlbnQuc3BlY2lhbC5jbGljaykgewotICAgICAg
ICAgICAgICAgICAgICAkLmV2ZW50LnNwZWNpYWwuY2xpY2sgPSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3Rh
dGUgd2lsbCBiZSByaWdodAotICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQubm9kZU5hbWUoIHRoaXMs
ICJpbnB1dCIgKSAmJiB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhpcy5jbGljaykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIC8v
IFRyeSBhZ2FpbiB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggdG9vayBlZmZlY3Qgb3IgYmxvdyB1
cC4KLSAgICAgICAgICAgIHRlc3RDaGVja2JveENsaWNrKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIEVtYmVyLndhcm4oImNsaWNrZWQgY2hlY2tib3hlcyBzaG91bGQgYmUgY2hlY2tlZCEg
dGhlIGpRdWVyeSBwYXRjaCBkaWRuJ3Qgd29yayIsIHRoaXMuY2hlY2tlZCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci10ZXN0aW5nL3Rl
c3QiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJl
bWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1ydW50aW1lL2NvbXBhcmUiLCAiZW1iZXItcnVu
dGltZS9leHQvcnN2cCIsICJlbWJlci10ZXN0aW5nL3NldHVwX2Zvcl90ZXN0aW5nIiwgImVtYmVy
LWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbiIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rp
b24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19k
ZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRl
bmN5N19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZh
ciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZW1iZXJS
dW4gPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9f
ZGVwZW5kZW5jeTNfXy5jcmVhdGU7Ci0gICAgICAgIHZhciBjb21wYXJlID0gX19kZXBlbmRlbmN5
NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBSU1ZQID0gX19kZXBlbmRlbmN5NV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBzZXR1cEZvclRlc3RpbmcgPSBfX2RlcGVuZGVuY3k2X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyQXBwbGljYXRpb24gPSBfX2RlcGVuZGVuY3k3X19b
ImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgot
ICAgICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXRlc3RpbmcKLSAgICAgICAgICAgICAqLwot
ICAgICAgICB2YXIgc2xpY2UgPSBbXS5zbGljZTsKLSAgICAgICAgdmFyIGhlbHBlcnMgPSB7fTsK
LSAgICAgICAgdmFyIGluamVjdEhlbHBlcnNDYWxsYmFja3MgPSBbXTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnRhaW5lciBmb3IgYW4gYXNzb3J0bWVudCBvZiB0
ZXN0aW5nIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eToKLQotICAgICAgICAgICAgICAqIENob29zZSB5
b3VyIGRlZmF1bHQgdGVzdCBhZGFwdGVyIChmb3IgeW91ciBmcmFtZXdvcmsgb2YgY2hvaWNlKS4K
LSAgICAgICAgICAgICAgKiBSZWdpc3Rlci9VbnJlZ2lzdGVyIGFkZGl0aW9uYWwgdGVzdCBoZWxw
ZXJzLgotICAgICAgICAgICAgICAqIFNldHVwIGNhbGxiYWNrcyB0byBiZSBmaXJlZCB3aGVuIHRo
ZSB0ZXN0IGhlbHBlcnMgYXJlIGluamVjdGVkIGludG8KLSAgICAgICAgICAgICAgICB5b3VyIGFw
cGxpY2F0aW9uLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBUZXN0Ci0gICAgICAgICAgICAgIEBu
YW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBUZXN0ID0gewotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEhhc2ggY29udGFpbmluZyBhbGwga25v
d24gdGVzdCBoZWxwZXJzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBfaGVscGVy
cwotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIF9oZWxwZXJzOiBoZWxwZXJzLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgYHJlZ2lzdGVySGVscGVyYCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGEgdGVzdCBo
ZWxwZXIgdGhhdCB3aWxsIGJlIGluamVjdGVkCi0gICAgICAgICAgICAgICAgICAgIHdoZW4gYEFw
cC5pbmplY3RUZXN0SGVscGVyc2AgaXMgY2FsbGVkLgotCi0gICAgICAgICAgICAgICAgICAgIFRo
ZSBoZWxwZXIgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IEFw
cGxpY2F0aW9uIGFzCi0gICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCi0K
LSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LnJlZ2lzdGVySGVs
cGVyKCdib290JywgZnVuY3Rpb24oYXBwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgRW1iZXIu
cnVuKGFwcCwgYXBwLmFkdmFuY2VSZWFkaW5lc3MpOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBoZWxw
ZXIgY2FuIGxhdGVyIGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cyBiZWNhdXNlIGl0IHdpbGwg
YmUKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVkIHdpdGggYGFwcGAgYXMgdGhlIGZpcnN0IHBh
cmFtZXRlci4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgICAgICAgIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBBcHAuaW5qZWN0VGVzdEhlbHBlcnMoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9v
dCgpOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHVi
bGljCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVnaXN0ZXJIZWxwZXIKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlbHBlciBt
ZXRob2QgdG8gYWRkLgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBoZWxw
ZXJNZXRob2QKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIG9wdGlvbnMge09iamVjdH0KLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24o
bmFtZSwgaGVscGVyTWV0aG9kKSB7Ci0gICAgICAgICAgICAgICAgaGVscGVyc1tuYW1lXSA9IHsK
LSAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBoZWxwZXJNZXRob2QsCi0gICAgICAgICAgICAg
ICAgICAgIG1ldGE6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQ6IGZhbHNlIAotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBgcmVnaXN0ZXJBc3luY0hlbHBl
cmAgaXMgdXNlZCB0byByZWdpc3RlciBhbiBhc3luYyB0ZXN0IGhlbHBlciB0aGF0IHdpbGwgYmUg
aW5qZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgd2hlbiBgQXBwLmluamVjdFRlc3RIZWxwZXJz
YCBpcyBjYWxsZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGhlbHBlciBtZXRob2Qgd2ls
bCBhbHdheXMgYmUgY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgQXBwbGljYXRpb24gYXMKLSAgICAg
ICAgICAgICAgICAgICAgdGhlIGZpcnN0IHBhcmFtZXRlci4KLQotICAgICAgICAgICAgICAgICAg
ICBGb3IgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJBc3luY0hlbHBlcignYm9vdCcsIGZ1
bmN0aW9uKGFwcCkgewotICAgICAgICAgICAgICAgICAgICAgIEVtYmVyLnJ1bihhcHAsIGFwcC5h
ZHZhbmNlUmVhZGluZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFRoZSBhZHZhbnRhZ2Ugb2YgYW4gYXN5
bmMgaGVscGVyIGlzIHRoYXQgaXQgd2lsbCBub3QgcnVuCi0gICAgICAgICAgICAgICAgICAgIHVu
dGlsIHRoZSBsYXN0IGFzeW5jIGhlbHBlciBoYXMgY29tcGxldGVkLiAgQWxsIGFzeW5jIGhlbHBl
cnMKLSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgaXQgd2lsbCB3YWl0IGZvciBpdCBjb21wbGV0
ZSBiZWZvcmUgcnVubmluZy4KLQotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgot
Ci0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIuVGVzdC5yZWdpc3RlckFzeW5jSGVscGVyKCdkZWxldGVQb3N0JywgZnVuY3Rpb24oYXBw
LCBwb3N0SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjbGljaygnLmRlbGV0ZS0nICsgcG9z
dElkKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
Li4uIGluIHlvdXIgdGVzdAotICAgICAgICAgICAgICAgICAgICB2aXNpdCgnL3Bvc3QvMicpOwot
ICAgICAgICAgICAgICAgICAgICBkZWxldGVQb3N0KDIpOwotICAgICAgICAgICAgICAgICAgICB2
aXNpdCgnL3Bvc3QvMycpOwotICAgICAgICAgICAgICAgICAgICBkZWxldGVQb3N0KDMpOwotICAg
ICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHVibGljCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgcmVnaXN0ZXJBc3luY0hlbHBlcgotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaGVscGVyIG1ldGhv
ZCB0byBhZGQuCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGhlbHBlck1l
dGhvZAotICAgICAgICAgICAgICAgICAgICBAc2luY2UgMS4yLjAKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICByZWdpc3RlckFzeW5jSGVscGVyOiBmdW5jdGlvbihuYW1lLCBoZWxw
ZXJNZXRob2QpIHsKLSAgICAgICAgICAgICAgICBoZWxwZXJzW25hbWVdID0gewotICAgICAgICAg
ICAgICAgICAgICBtZXRob2Q6IGhlbHBlck1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgbWV0
YTogewotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdDogdHJ1ZSAKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIGEgcHJldmlvdXNseSBhZGRlZCBoZWxw
ZXIgbWV0aG9kLgotCi0gICAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LnVu
cmVnaXN0ZXJIZWxwZXIoJ3dhaXQnKTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHVucmVn
aXN0ZXJIZWxwZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhl
IGhlbHBlciB0byByZW1vdmUuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdW5y
ZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBo
ZWxwZXJzW25hbWVdOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBUZXN0LlByb21pc2UucHJvdG90
eXBlW25hbWVdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgIFVzZWQgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIHRvIGJlIGZpcmVkIHdoZW5ldmVy
IGBBcHAuaW5qZWN0VGVzdEhlbHBlcnNgCi0gICAgICAgICAgICAgICAgICAgIGlzIGNhbGxlZC4K
LQotICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgd2lsbCByZWNlaXZlIHRoZSBjdXJy
ZW50IGFwcGxpY2F0aW9uIGFzIGFuIGFyZ3VtZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEV4
YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICBFbWJlci5UZXN0Lm9uSW5qZWN0SGVscGVycyhmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICBFbWJlci4kKGRvY3VtZW50KS5hamF4U2VuZChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cysrOwotICAgICAg
ICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgRW1iZXIuJChkb2N1
bWVudCkuYWpheENvbXBsZXRlKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
VGVzdC5wZW5kaW5nQWpheFJlcXVlc3RzLS07Ci0gICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICAgICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2Qgb25Jbmpl
Y3RIZWxwZXJzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNr
IFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQuCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgb25JbmplY3RIZWxwZXJzOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAg
ICAgIGluamVjdEhlbHBlcnNDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhpcyByZXR1cm5zIGEg
dGhlbmFibGUgdGFpbG9yZWQgZm9yIHRlc3RpbmcuICBJdCBjYXRjaGVzIGZhaWxlZAotICAgICAg
ICAgICAgICAgICAgICBgb25TdWNjZXNzYCBjYWxsYmFja3MgYW5kIGludm9rZXMgdGhlIGBFbWJl
ci5UZXN0LmFkYXB0ZXIuZXhjZXB0aW9uYAotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayBp
biB0aGUgbGFzdCBjaGFpbmVkIHRoZW4uCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRo
b2Qgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFzeW5jIGhlbHBlcnMgc3VjaCBhcyBgd2FpdGAuCi0K
LSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IHByb21pc2UKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZXIg
VGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4KLSAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbihyZXNvbHZlcikgewotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgVGVzdC5Qcm9taXNlKHJlc29sdmVyKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gYWxsb3cg
ZW1iZXItdGVzdGluZyB0byBjb21tdW5pY2F0ZSB3aXRoIGEgc3BlY2lmaWMgdGVzdGluZwotICAg
ICAgICAgICAgICAgICAgIGZyYW1ld29yay4KLQotICAgICAgICAgICAgICAgICAgIFlvdSBjYW4g
bWFudWFsbHkgc2V0IGl0IGJlZm9yZSBjYWxsaW5nIGBBcHAuc2V0dXBGb3JUZXN0aW5nKClgLgot
Ci0gICAgICAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICBFbWJlci5UZXN0LmFkYXB0ZXIgPSBNeUN1c3Rv
bUFkYXB0ZXIuY3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IGl0LCBlbWJlci10ZXN0aW5nIHdpbGwgZGVmYXVsdCB0
byBgRW1iZXIuVGVzdC5RVW5pdEFkYXB0ZXJgLgotCi0gICAgICAgICAgICAgICAgICAgQHB1Ymxp
YwotICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBhZGFwdGVyCi0gICAgICAgICAgICAgICAg
ICAgQHR5cGUge0NsYXNzfSBUaGUgYWRhcHRlciB0byBiZSB1c2VkLgotICAgICAgICAgICAgICAg
ICAgIEBkZWZhdWx0IEVtYmVyLlRlc3QuUVVuaXRBZGFwdGVyCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgYWRhcHRlcjogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgICAgICAgIFJlcGxhY2VtZW50IGZvciBgRW1iZXIuUlNWUC5yZXNvbHZlYAotICAgICAg
ICAgICAgICAgICAgICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoaXMgdXNlcwotICAgICAgICAg
ICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuVGVzdC5Qcm9taXNlYAotCi0gICAgICAg
ICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXNvbHZl
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TWl4ZWR9IFRoZSB2YWx1ZSB0byByZXNvbHZl
Ci0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBUZXN0LnByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2ZSh2YWwpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBl
bWJlci10ZXN0aW5nIHRvIHBsYXkgbmljZWx5IHdpdGggb3RoZXIgYXN5bmNocm9ub3VzCi0gICAg
ICAgICAgICAgICAgICAgICBldmVudHMsIHN1Y2ggYXMgYW4gYXBwbGljYXRpb24gdGhhdCBpcyB3
YWl0aW5nIGZvciBhIENTUzMKLSAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gb3IgYW4g
SW5kZXhEQiB0cmFuc2FjdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6
Ci0KLSAgICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJXYWl0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBteVBlbmRpbmdUcmFuc2FjdGlvbnMoKSA9PSAwOwotICAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICBgYGAKLSAgICAgICAgICAgICAg
ICAgICAgIFRoZSBgY29udGV4dGAgYXJndW1lbnQgYWxsb3dzIHlvdSB0byBvcHRpb25hbGx5IHNw
ZWNpZnkgdGhlIGB0aGlzYAotICAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB5b3VyIGNh
bGxiYWNrIHdpbGwgYmUgaW52b2tlZC4KLQotICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1w
bGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ICAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJXYWl0ZXIoTXlEQiwgTXlEQi5oYXNQZW5kaW5nVHJh
bnNhY3Rpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAg
ICAgICBAcHVibGljCi0gICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHJlZ2lzdGVyV2FpdGVy
Ci0gICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gY29udGV4dCAob3B0aW9uYWwp
Ci0gICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAg
ICAgICAgICAgICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgcmVnaXN0ZXJXYWl0ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2sgPSBjb250ZXh0OwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRl
cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy53YWl0ZXJzID0gRW1iZXIuQSgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLndhaXRlcnMucHVzaChbY29udGV4
dCwgY2FsbGJhY2tdKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgIGB1bnJlZ2lzdGVyV2FpdGVyYCBpcyB1c2VkIHRvIHVucmVnaXN0ZXIgYSBj
YWxsYmFjayB0aGF0IHdhcwotICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCB3aXRoIGBy
ZWdpc3RlcldhaXRlcmAuCi0KLSAgICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLSAgICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgdW5yZWdpc3RlcldhaXRlcgotICAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgKG9wdGlvbmFsKQotICAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgIEBzaW5j
ZSAxLjIuMAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHVucmVnaXN0ZXJXYWl0
ZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBh
aXI7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRlcnMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNv
bnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBwYWlyID0gW2NvbnRleHQsIGNhbGxiYWNrXTsKLSAgICAg
ICAgICAgICAgICB0aGlzLndhaXRlcnMgPSBFbWJlci5BKHRoaXMud2FpdGVycy5maWx0ZXIoZnVu
Y3Rpb24oZWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKGVsdCwgcGFp
cikgIT09IDA7Ci0gICAgICAgICAgICAgICAgfSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
OwotCi0gICAgICAgIGZ1bmN0aW9uIGhlbHBlcihhcHAsIG5hbWUpIHsKLSAgICAgICAgICAgIHZh
ciBmbiA9IGhlbHBlcnNbbmFtZV0ubWV0aG9kLAotICAgICAgICAgICAgbWV0YSA9IGhlbHBlcnNb
bmFtZV0ubWV0YTsKLQotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLAotICAgICAgICAgICAgICAg
IGxhc3RQcm9taXNlID0gVGVzdC5sYXN0UHJvbWlzZTsKLQotICAgICAgICAgICAgICAgIGFyZ3Mu
dW5zaGlmdChhcHApOwotCi0gICAgICAgICAgICAgICAgLy8gc29tZSBoZWxwZXJzIGFyZSBub3Qg
YXN5bmMgYW5kCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byByZXR1cm4gYSB2YWx1ZSBpbW1l
ZGlhdGVseS4KLSAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBgZmluZGAKLSAgICAgICAgICAg
ICAgICBpZiAoIW1ldGEud2FpdCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBw
bHkoYXBwLCBhcmdzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IWxhc3RQcm9taXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIGZpcnN0IGFz
eW5jIGhlbHBlciBpbiBjdXJyZW50IGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgbGFzdFBy
b21pc2UgPSBmbi5hcHBseShhcHAsIGFyZ3MpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIGxhc3QgaGVscGVyJ3MgcHJvbWlzZSB0byBy
ZXNvbHZlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGV4ZWN1dGUKLSAgICAgICAg
ICAgICAgICAgICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dFByb21pc2UgPSBUZXN0LnJlc29sdmUobGFzdFByb21pc2UpLnRoZW4oZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGFwcCwgYXJncyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RQcm9taXNlOwotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJ1bihmbikgewotICAg
ICAgICAgICAgaWYgKCFlbWJlclJ1bi5jdXJyZW50UnVuTG9vcCkgewotICAgICAgICAgICAgICAg
IGVtYmVyUnVuKGZuKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm4o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEVtYmVyQXBwbGljYXRpb24u
cmVvcGVuKHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvcGVy
dHkgY29udGFpbnMgdGhlIHRlc3RpbmcgaGVscGVycyBmb3IgdGhlIGN1cnJlbnQgYXBwbGljYXRp
b24uIFRoZXNlCi0gICAgICAgICAgICAgICAgICAgYXJlIGNyZWF0ZWQgb25jZSB5b3UgY2FsbCBg
aW5qZWN0VGVzdEhlbHBlcnNgIG9uIHlvdXIgYEVtYmVyLkFwcGxpY2F0aW9uYAotICAgICAgICAg
ICAgICAgICAgIGluc3RhbmNlLiBUaGUgaW5jbHVkZWQgaGVscGVycyBhcmUgYWxzbyBhdmFpbGFi
bGUgb24gdGhlIGB3aW5kb3dgIG9iamVjdCBieQotICAgICAgICAgICAgICAgICAgIGRlZmF1bHQs
IGJ1dCBjYW4gYmUgdXNlZCBmcm9tIHRoaXMgb2JqZWN0IG9uIHRoZSBpbmRpdmlkdWFsIGFwcGxp
Y2F0aW9uIGFsc28uCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHRlc3RIZWxwZXJz
Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIHtPYmplY3R9Ci0gICAgICAgICAgICAgICAgICAg
IEBkZWZhdWx0IHt9Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGVzdEhlbHBl
cnM6IHt9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICBUaGlzIHByb3Bl
cnR5IHdpbGwgY29udGFpbiB0aGUgb3JpZ2luYWwgbWV0aG9kcyB0aGF0IHdlcmUgcmVnaXN0ZXJl
ZAotICAgICAgICAgICAgICAgICAgIG9uIHRoZSBgaGVscGVyQ29udGFpbmVyYCBiZWZvcmUgYGlu
amVjdFRlc3RIZWxwZXJzYCBpcyBjYWxsZWQuCi0KLSAgICAgICAgICAgICAgICAgICBXaGVuIGBy
ZW1vdmVUZXN0SGVscGVyc2AgaXMgY2FsbGVkLCB0aGVzZSBtZXRob2RzIGFyZSByZXN0b3JlZCB0
byB0aGUKLSAgICAgICAgICAgICAgICAgICBgaGVscGVyQ29udGFpbmVyYC4KLQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgb3JpZ2luYWxNZXRob2RzCi0gICAgICAgICAgICAgICAgICAg
IEB0eXBlIHtPYmplY3R9Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHt9Ci0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBzaW5jZSAxLjMuMAot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kczoge30sCi0K
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICBUaGlzIHByb3BlcnR5IGluZGlj
YXRlcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSBpbgotICAg
ICAgICAgICAgICAgICAgdGVzdGluZyBtb2RlLiBUaGlzIGlzIHNldCB3aGVuIGBzZXR1cEZvclRl
c3RpbmdgIGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgICAgYXBwbGlj
YXRpb24uCi0KLSAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB0ZXN0aW5nCi0gICAgICAgICAg
ICAgICAgICBAdHlwZSB7Qm9vbGVhbn0KLSAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IGZhbHNl
Ci0gICAgICAgICAgICAgICAgICBAc2luY2UgMS4zLjAKLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB0ZXN0aW5nOiBmYWxzZSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgICAgICAgVGhpcyBob29rIGRlZmVycyB0aGUgcmVhZGluZXNzIG9mIHRoZSBhcHBsaWNhdGlv
biwgc28gdGhhdCB5b3UgY2FuIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgdGhlIGFwcCB3aGVu
IHlvdXIgdGVzdHMgYXJlIHJlYWR5IHRvIHJ1bi4gSXQgYWxzbyBzZXRzIHRoZSByb3V0ZXIncwot
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIHRvICdub25lJywgc28gdGhhdCB0aGUgd2luZG93
J3MgbG9jYXRpb24gd2lsbCBub3QgYmUgbW9kaWZpZWQKLSAgICAgICAgICAgICAgICAgICAocHJl
dmVudGluZyBib3RoIGFjY2lkZW50YWwgbGVha2luZyBvZiBzdGF0ZSBiZXR3ZWVuIHRlc3RzIGFu
ZCBpbnRlcmZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICB3aXRoIHlvdXIgdGVzdGluZyBmcmFt
ZXdvcmspLgotCi0gICAgICAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICAg
ICAgYGBgCi0gICAgICAgICAgICAgICAgICBBcHAuc2V0dXBGb3JUZXN0aW5nKCk7Ci0gICAgICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwRm9yVGVz
dGluZwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNldHVwRm9yVGVzdGluZzog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc2V0dXBGb3JUZXN0aW5nKCk7Ci0KLSAgICAg
ICAgICAgICAgICB0aGlzLnRlc3RpbmcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgdGhpcy5S
b3V0ZXIucmVvcGVuKHsKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246ICdub25lJwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250YWluZXIgdG8gaW5q
ZWN0IHRoZSB0ZXN0IGhlbHBlcnMgaW50by4gQnkKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dCB0aGUgaGVscGVycyBhcmUgaW5qZWN0ZWQgaW50byBgd2luZG93YC4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgaGVscGVyQ29udGFpbmVyCi0gICAgICAgICAgICAgICAgICAgIEB0
eXBlIHtPYmplY3R9IFRoZSBvYmplY3QgdG8gYmUgdXNlZCBmb3IgdGVzdCBoZWxwZXJzLgotICAg
ICAgICAgICAgICAgICAgICBAZGVmYXVsdCB3aW5kb3cKLSAgICAgICAgICAgICAgICAgICAgQHNp
bmNlIDEuMi4wCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaGVscGVyQ29udGFp
bmVyOiB3aW5kb3csCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGlz
IGluamVjdHMgdGhlIHRlc3QgaGVscGVycyBpbnRvIHRoZSBgaGVscGVyQ29udGFpbmVyYCBvYmpl
Y3QuIElmIGFuIG9iamVjdCBpcyBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICBpdCB3aWxs
IGJlIHVzZWQgYXMgdGhlIGhlbHBlckNvbnRhaW5lci4gSWYgYGhlbHBlckNvbnRhaW5lcmAgaXMg
bm90IHNldCBpdCB3aWxsIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgdG8gYHdpbmRvd2Au
IElmIGEgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQg
aXQgd2lsbCBiZSBjYWNoZWQKLSAgICAgICAgICAgICAgICAgICAgKHNvIHRoYXQgaXQgY2FuIGJl
IHJlc2V0IGlmIHRoZSBoZWxwZXIgaXMgcmVtb3ZlZCB3aXRoIGB1bnJlZ2lzdGVySGVscGVyYCBv
cgotICAgICAgICAgICAgICAgICAgICBgcmVtb3ZlVGVzdEhlbHBlcnNgKS4KLQotICAgICAgICAg
ICAgICAgICAgIEFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGBvbkluamVjdEhlbHBlcnNg
IHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlCi0gICAgICAgICAgICAgICAgICAgaGVscGVycyBoYXZl
IGJlZW4gaW5qZWN0ZWQuCi0KLSAgICAgICAgICAgICAgICAgIEV4YW1wbGU6Ci0gICAgICAgICAg
ICAgICAgICBgYGAKLSAgICAgICAgICAgICAgICAgIEFwcC5pbmplY3RUZXN0SGVscGVycygpOwot
ICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbmpl
Y3RUZXN0SGVscGVycwotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluamVjdFRl
c3RIZWxwZXJzOiBmdW5jdGlvbihoZWxwZXJDb250YWluZXIpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaGVscGVyQ29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVyQ29u
dGFpbmVyID0gaGVscGVyQ29udGFpbmVyOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRoaXMudGVzdEhlbHBlcnMgPSB7fTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBu
YW1lIGluIGhlbHBlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbE1ldGhv
ZHNbbmFtZV0gPSB0aGlzLmhlbHBlckNvbnRhaW5lcltuYW1lXTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy50ZXN0SGVscGVyc1tuYW1lXSA9IHRoaXMuaGVscGVyQ29udGFpbmVyW25hbWVdID0g
aGVscGVyKHRoaXMsIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBwcm90b1dyYXAoVGVzdC5Q
cm9taXNlLnByb3RvdHlwZSwgbmFtZSwgaGVscGVyKHRoaXMsIG5hbWUpLCBoZWxwZXJzW25hbWVd
Lm1ldGEud2FpdCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSBpbmplY3RIZWxwZXJzQ2FsbGJhY2tzLmxlbmd0aDsgaSA8IGw7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBpbmplY3RIZWxwZXJzQ2FsbGJhY2tzW2ldKHRoaXMpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBUaGlzIHJlbW92ZXMgYWxsIGhlbHBlcnMgdGhhdCBoYXZlIGJlZW4g
cmVnaXN0ZXJlZCwgYW5kIHJlc2V0cyBhbmQgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAg
IHRoYXQgd2VyZSBvdmVycmlkZGVuIGJ5IHRoZSBoZWxwZXJzLgotCi0gICAgICAgICAgICAgICAg
ICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICBBcHAucmVtb3ZlVGVzdEhlbHBlcnMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIHJlbW92ZVRlc3RIZWxwZXJzCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgcmVtb3ZlVGVzdEhlbHBlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGZv
ciAodmFyIG5hbWUgaW4gaGVscGVycykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmhlbHBl
ckNvbnRhaW5lcltuYW1lXSA9IHRoaXMub3JpZ2luYWxNZXRob2RzW25hbWVdOwotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy50ZXN0SGVscGVyc1tuYW1lXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMub3JpZ2luYWxNZXRob2RzW25hbWVdOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gVGhpcyBtZXRob2Qg
aXMgbm8gbG9uZ2VyIG5lZWRlZAotICAgICAgICAvLyBCdXQgc3RpbGwgaGVyZSBmb3IgYmFja3dh
cmRzIGNvbXBhdGliaWxpdHkKLSAgICAgICAgLy8gb2YgaGVscGVyIGNoYWluaW5nCi0gICAgICAg
IGZ1bmN0aW9uIHByb3RvV3JhcChwcm90bywgbmFtZSwgY2FsbGJhY2ssIGlzQXN5bmMpIHsKLSAg
ICAgICAgICAgIHByb3RvW25hbWVdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGFyZ3MgPSBhcmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4o
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBw
bHkodGhpcywgYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBUZXN0LlByb21pc2UgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIFJTVlAuUHJvbWlzZS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpOwotICAgICAgICAgICAgVGVzdC5sYXN0UHJvbWlzZSA9IHRoaXM7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgVGVzdC5Qcm9taXNlLnByb3RvdHlwZSA9IGNyZWF0ZShSU1ZQLlByb21pc2UucHJv
dG90eXBlKTsKLSAgICAgICAgVGVzdC5Qcm9taXNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRl
c3QuUHJvbWlzZTsKLQotICAgICAgICAvLyBQYXRjaCBgdGhlbmAgdG8gaXNvbGF0ZSBhc3luYyBt
ZXRob2RzCi0gICAgICAgIC8vIHNwZWNpZmljYWxseSBgRW1iZXIuVGVzdC5sYXN0UHJvbWlzZWAK
LSAgICAgICAgdmFyIG9yaWdpbmFsVGhlbiA9IFJTVlAuUHJvbWlzZS5wcm90b3R5cGUudGhlbjsK
LSAgICAgICAgVGVzdC5Qcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24ob25TdWNjZXNz
LCBvbkZhaWx1cmUpIHsKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRoZW4uY2FsbCh0aGlz
LCBmdW5jdGlvbih2YWwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNvbGF0ZShvblN1Y2Nl
c3MsIHZhbCk7Ci0gICAgICAgICAgICB9LCBvbkZhaWx1cmUpOwotICAgICAgICB9OwotCi0gICAg
ICAgIC8vIFRoaXMgbWV0aG9kIGlzb2xhdGVzIG5lc3RlZCBhc3luYyBtZXRob2RzCi0gICAgICAg
IC8vIHNvIHRoYXQgdGhleSBkb24ndCBjb25mbGljdCB3aXRoIG90aGVyIGxhc3QgcHJvbWlzZXMu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIDEuIFNldCBgRW1iZXIuVGVzdC5sYXN0UHJvbWlzZWAg
dG8gbnVsbAotICAgICAgICAvLyAyLiBJbnZva2UgbWV0aG9kCi0gICAgICAgIC8vIDMuIFJldHVy
biB0aGUgbGFzdCBwcm9taXNlIGNyZWF0ZWQgZHVyaW5nIG1ldGhvZAotICAgICAgICAvLyA0LiBS
ZXN0b3JlIGBFbWJlci5UZXN0Lmxhc3RQcm9taXNlYCB0byBvcmlnaW5hbCB2YWx1ZQotICAgICAg
ICBmdW5jdGlvbiBpc29sYXRlKGZuLCB2YWwpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSwgbGFz
dFByb21pc2U7Ci0KLSAgICAgICAgICAgIC8vIFJlc2V0IGxhc3RQcm9taXNlIGZvciBuZXN0ZWQg
aGVscGVycwotICAgICAgICAgICAgVGVzdC5sYXN0UHJvbWlzZSA9IG51bGw7Ci0KLSAgICAgICAg
ICAgIHZhbHVlID0gZm4odmFsKTsKLQotICAgICAgICAgICAgbGFzdFByb21pc2UgPSBUZXN0Lmxh
c3RQcm9taXNlOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgbWV0aG9kIHJldHVybmVkIGEgcHJv
bWlzZQotICAgICAgICAgICAgLy8gcmV0dXJuIHRoYXQgcHJvbWlzZS4gSWYgbm90LAotICAgICAg
ICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IGFzeW5jIGhlbHBlcidzIHByb21pc2UKLSAgICAgICAg
ICAgIGlmICgodmFsdWUgJiYgKHZhbHVlIGluc3RhbmNlb2YgVGVzdC5Qcm9taXNlKSkgfHwgIWxh
c3RQcm9taXNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhc3RQcm9taXNlID0gVGVzdC5yZXNvbHZlKGxhc3RQcm9taXNlKS50aGVuKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbGFzdFByb21pc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4
cG9ydHNfX1siZGVmYXVsdCJdID0gVGVzdDsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZp
ZXdzIiwKLSAgICBbImVtYmVyLXJ1bnRpbWUiLCAiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIs
ICJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCAiZW1iZXItdmlld3Mvc3lzdGVtL3JlbmRlcl9i
dWZmZXIiLCAiZW1iZXItdmlld3Mvc3lzdGVtL2V4dCIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0
ZXMiLCAiZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3Zp
ZXciLCAiZW1iZXItdmlld3Mvdmlld3Mvdmlld19jb2xsZWN0aW9uIiwgImVtYmVyLXZpZXdzL3Zp
ZXdzL2NvbnRhaW5lcl92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL2NvbGxlY3Rpb25fdmlldyIs
ICJlbWJlci12aWV3cy92aWV3cy9jb21wb25lbnQiLCAiZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50
X2Rpc3BhdGNoZXIiLCAiZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfdGFyZ2V0X2FjdGlvbl9zdXBw
b3J0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19k
ZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVu
ZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2V4cG9ydHNf
XykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgRW1i
ZXIgVmlld3MKLQotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAgICAgQHN1Ym1v
ZHVsZSBlbWJlci12aWV3cwotICAgICAgICAgICAgQHJlcXVpcmVzIGVtYmVyLXJ1bnRpbWUKLSAg
ICAgICAgICAgIEBtYWluIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwotCi0gICAgICAgIC8v
IEJFR0lOIElNUE9SVFMKLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIHNldElubmVySFRNTCA9IF9fZGVwZW5kZW5jeTNfXy5zZXRJbm5lckhUTUw7
Ci0gICAgICAgIHZhciBpc1NpbXBsZUNsaWNrID0gX19kZXBlbmRlbmN5M19fLmlzU2ltcGxlQ2xp
Y2s7Ci0gICAgICAgIHZhciBSZW5kZXJCdWZmZXIgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQi
XTsKLSAgICAgICAgLy8gZm9yIHRoZSBzaWRlIGVmZmVjdCBvZiBleHRlbmRpbmcgRW1iZXIucnVu
LnF1ZXVlcwotICAgICAgICB2YXIgY2xvbmVTdGF0ZXMgPSBfX2RlcGVuZGVuY3k2X18uY2xvbmVT
dGF0ZXM7Ci0gICAgICAgIHZhciBzdGF0ZXMgPSBfX2RlcGVuZGVuY3k2X18uc3RhdGVzOwotCi0g
ICAgICAgIHZhciBDb3JlVmlldyA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeThfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVmll
d0NvbGxlY3Rpb24gPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIENv
bnRhaW5lclZpZXcgPSBfX2RlcGVuZGVuY3kxMF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBD
b2xsZWN0aW9uVmlldyA9IF9fZGVwZW5kZW5jeTExX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IENvbXBvbmVudCA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIg
RXZlbnREaXNwYXRjaGVyID0gX19kZXBlbmRlbmN5MTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2
YXIgVmlld1RhcmdldEFjdGlvblN1cHBvcnQgPSBfX2RlcGVuZGVuY3kxNF9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIC8vIEVORCBJTVBPUlRTCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEFs
aWFzIGZvciBqUXVlcnkKLQotICAgICAgICAgICAgICBAbWV0aG9kICQKLSAgICAgICAgICAgICAg
QGZvciBFbWJlcgotICAgICAgICAgICAgKi8KLQotICAgICAgICAvLyBCRUdJTiBFWFBPUlRTCi0g
ICAgICAgIEVtYmVyLiQgPSBqUXVlcnk7Ci0KLSAgICAgICAgRW1iZXIuVmlld1RhcmdldEFjdGlv
blN1cHBvcnQgPSBWaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydDsKLSAgICAgICAgRW1iZXIuUmVuZGVy
QnVmZmVyID0gUmVuZGVyQnVmZmVyOwotCi0gICAgICAgIHZhciBWaWV3VXRpbHMgPSBFbWJlci5W
aWV3VXRpbHMgPSB7fTsKLSAgICAgICAgVmlld1V0aWxzLnNldElubmVySFRNTCA9IHNldElubmVy
SFRNTDsKLSAgICAgICAgVmlld1V0aWxzLmlzU2ltcGxlQ2xpY2sgPSBpc1NpbXBsZUNsaWNrOwot
Ci0gICAgICAgIEVtYmVyLkNvcmVWaWV3ID0gQ29yZVZpZXc7Ci0gICAgICAgIEVtYmVyLlZpZXcg
PSBWaWV3OwotICAgICAgICBFbWJlci5WaWV3LnN0YXRlcyA9IHN0YXRlczsKLSAgICAgICAgRW1i
ZXIuVmlldy5jbG9uZVN0YXRlcyA9IGNsb25lU3RhdGVzOwotCi0gICAgICAgIEVtYmVyLl9WaWV3
Q29sbGVjdGlvbiA9IFZpZXdDb2xsZWN0aW9uOwotICAgICAgICBFbWJlci5Db250YWluZXJWaWV3
ID0gQ29udGFpbmVyVmlldzsKLSAgICAgICAgRW1iZXIuQ29sbGVjdGlvblZpZXcgPSBDb2xsZWN0
aW9uVmlldzsKLSAgICAgICAgRW1iZXIuQ29tcG9uZW50ID0gQ29tcG9uZW50OwotICAgICAgICBF
bWJlci5FdmVudERpc3BhdGNoZXIgPSBFdmVudERpc3BhdGNoZXI7Ci0gICAgICAgIC8vIEVORCBF
WFBPUlRTCi0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IEVtYmVyOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItdmlld3MvbWl4aW5zL2NvbXBvbmVudF90ZW1wbGF0ZV9kZXBy
ZWNhdGlvbiIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCIsICJlbWJlci1tZXRhbC9taXhpbiIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVu
ZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuZGVwcmVjYXRlCi0gICAgICAg
IHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgTWl4aW4gPSBfX2Rl
cGVuZGVuY3kzX18uTWl4aW47Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoZSBDb21w
b25lbnRUZW1wbGF0ZURlcHJlY2F0aW9uIG1peGluIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHVzZWZ1
bAotICAgICAgICAgICAgICBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gdXNpbmcgZWl0aGVyIGB0
ZW1wbGF0ZWAgb3IgYHRlbXBsYXRlTmFtZWAgd2l0aAotICAgICAgICAgICAgICBhIGNvbXBvbmVu
dC4gVGhlIGB0ZW1wbGF0ZWAgYW5kIGB0ZW1wbGF0ZU5hbWVgIHByb3BlcnRpZXMgc3BlY2lmaWVk
IGF0Ci0gICAgICAgICAgICAgIGV4dGVuZCB0aW1lIGFyZSBtb3ZlZCB0byBgbGF5b3V0YCBhbmQg
YGxheW91dE5hbWVgIHJlc3BlY3RpdmVseS4KLQotICAgICAgICAgICAgICBgRW1iZXIuQ29tcG9u
ZW50VGVtcGxhdGVEZXByZWNhdGlvbmAgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IEVtYmVyIGluCi0g
ICAgICAgICAgICAgIGBFbWJlci5Db21wb25lbnRgLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBD
b21wb25lbnRUZW1wbGF0ZURlcHJlY2F0aW9uCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBNaXhp
bi5jcmVhdGUoewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0KLSAgICAgICAgICAgICAgICAgICAgTW92ZXMgYHRlbXBsYXRlTmFtZWAgdG8gYGxheW91dE5h
bWVgIGFuZCBgdGVtcGxhdGVgIHRvIGBsYXlvdXRgIGF0IGV4dGVuZAotICAgICAgICAgICAgICAg
ICAgICB0aW1lIGlmIGEgbGF5b3V0IGlzIG5vdCBhbHNvIHNwZWNpZmllZC4KLQotICAgICAgICAg
ICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBjdXJyZW50bHkgbW9kaWZpZXMgdGhlIG1peGluIHRo
ZW1zZWx2ZXMsIHdoaWNoIGlzIHRlY2huaWNhbGx5Ci0gICAgICAgICAgICAgICAgICAgIGR1Ymlv
dXMgYnV0IGlzIHByYWN0aWNhbGx5IG9mIGxpdHRsZSBjb25zZXF1ZW5jZS4gVGhpcyBtYXkgY2hh
bmdlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICBmdXR1cmUuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCB3aWxsTWVyZ2VNaXhpbgotICAgICAgICAgICAgICAgICAgICBAc2luY2Ug
MS40LjAKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aWxsTWVyZ2VNaXhpbjog
ZnVuY3Rpb24ocHJvcHMpIHsKLSAgICAgICAgICAgICAgICAvLyBtdXN0IGNhbGwgX3N1cGVyIGhl
cmUgdG8gZW5zdXJlIHRoYXQgdGhlIEFjdGlvbkhhbmRsZXIKLSAgICAgICAgICAgICAgICAvLyBt
aXhpbiBpcyBzZXR1cCBwcm9wZXJseSAobW92ZXMgYWN0aW9ucyAtPiBfYWN0aW9ucykKLSAgICAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIENhbGxpbmcgc3VwZXIgaXMgb25seSBP
SyBoZXJlIHNpbmNlIHdlIEtOT1cgdGhhdAotICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGFu
b3RoZXIgTWl4aW4gbG9hZGVkIGZpcnN0LgotICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZGVwcmVjYXRlZFBy
b3BlcnR5LCByZXBsYWNlbWVudFByb3BlcnR5LAotICAgICAgICAgICAgICAgIGxheW91dFNwZWNp
ZmllZCA9IChwcm9wcy5sYXlvdXROYW1lIHx8IHByb3BzLmxheW91dCB8fCBnZXQodGhpcywgJ2xh
eW91dE5hbWUnKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJvcHMudGVtcGxhdGVOYW1lICYm
ICFsYXlvdXRTcGVjaWZpZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZFByb3Bl
cnR5ID0gJ3RlbXBsYXRlTmFtZSc7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50UHJv
cGVydHkgPSAnbGF5b3V0TmFtZSc7Ci0KLSAgICAgICAgICAgICAgICAgICAgcHJvcHMubGF5b3V0
TmFtZSA9IHByb3BzLnRlbXBsYXRlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBy
b3BzWyd0ZW1wbGF0ZU5hbWUnXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAocHJvcHMudGVtcGxhdGUgJiYgIWxheW91dFNwZWNpZmllZCkgewotICAgICAgICAgICAg
ICAgICAgICBkZXByZWNhdGVkUHJvcGVydHkgPSAndGVtcGxhdGUnOwotICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudFByb3BlcnR5ID0gJ2xheW91dCc7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcHJvcHMubGF5b3V0ID0gcHJvcHMudGVtcGxhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBwcm9wc1sndGVtcGxhdGUnXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoZGVwcmVjYXRlZFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVy
LmRlcHJlY2F0ZSgnRG8gbm90IHNwZWNpZnkgJyArIGRlcHJlY2F0ZWRQcm9wZXJ0eSArICcgb24g
YSBDb21wb25lbnQsIHVzZSAnICsgcmVwbGFjZW1lbnRQcm9wZXJ0eSArICcgaW5zdGVhZC4nLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL21peGlucy92aWV3X3RhcmdldF9hY3Rpb25f
c3VwcG9ydCIsCi0gICAgWyJlbWJlci1tZXRhbC9taXhpbiIsICJlbWJlci1ydW50aW1lL21peGlu
cy90YXJnZXRfYWN0aW9uX3N1cHBvcnQiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5MV9fLk1peGluOwotICAgICAgICB2YXIgVGFyZ2V0
QWN0aW9uU3VwcG9ydCA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8v
IEVTNlRPRE86IGNvbXB1dGVkIHNob3VsZCBoYXZlIGl0cyBvd24gZXhwb3J0IHBhdGggc28geW91
IGNhbiBkbyBpbXBvcnQge2RlZmF1bHRUb30gZnJvbSBjb21wdXRlZAotICAgICAgICB2YXIgY29t
cHV0ZWQgPSBfX2RlcGVuZGVuY3kzX18uY29tcHV0ZWQ7Ci0gICAgICAgIHZhciBhbGlhcyA9IGNv
bXB1dGVkLmFsaWFzOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgYEVtYmVyLlZpZXdUYXJn
ZXRBY3Rpb25TdXBwb3J0YCBpcyBhIG1peGluIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGEKLSAg
ICAgICAgICAgIHZpZXcgY2xhc3MgdG8gYWRkIGEgYHRyaWdnZXJBY3Rpb25gIG1ldGhvZCB3aXRo
IHNlbWFudGljcyBzaW1pbGFyIHRvCi0gICAgICAgICAgICB0aGUgSGFuZGxlYmFycyBge3thY3Rp
b259fWAgaGVscGVyLiBJdCBwcm92aWRlcyBpbnRlbGxpZ2VudCBkZWZhdWx0cwotICAgICAgICAg
ICAgZm9yIHRoZSBhY3Rpb24ncyB0YXJnZXQ6IHRoZSB2aWV3J3MgY29udHJvbGxlcjsgYW5kIHRo
ZSBjb250ZXh0IHRoYXQgaXMKLSAgICAgICAgICAgIHNlbnQgd2l0aCB0aGUgYWN0aW9uOiB0aGUg
dmlldydzIGNvbnRleHQuCi0KLSAgICAgICAgICAgIE5vdGU6IEluIG5vcm1hbCBFbWJlciB1c2Fn
ZSwgdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIgaXMgdXN1YWxseSB0aGUgYmVzdAotICAgICAgICAg
ICAgY2hvaWNlLiBUaGlzIG1peGluIGlzIG1vc3Qgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFyZSBk
b2luZyBtb3JlIGNvbXBsZXgKLSAgICAgICAgICAgIGV2ZW50IGhhbmRsaW5nIGluIGN1c3RvbSBW
aWV3IHN1YmNsYXNzZXMuCi0KLSAgICAgICAgICAgIEZvciBleGFtcGxlOgotCi0gICAgICAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICBBcHAuU2F2ZUJ1dHRvblZpZXcgPSBFbWJlci5W
aWV3LmV4dGVuZChFbWJlci5WaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydCwgewotICAgICAgICAgICAg
ICBhY3Rpb246ICdzYXZlJywKLSAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbigpOyAvLyBTZW5kcyB0aGUgYHNhdmVgIGFj
dGlvbiwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIKLSAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
VGhlIGBhY3Rpb25gIGNhbiBiZSBwcm92aWRlZCBhcyBwcm9wZXJ0aWVzIG9mIGFuIG9wdGlvbmFs
IG9iamVjdCBhcmd1bWVudAotICAgICAgICAgICAgdG8gYHRyaWdnZXJBY3Rpb25gIGFzIHdlbGwu
Ci0KLSAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgIEFwcC5TYXZlQnV0dG9u
VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEVtYmVyLlZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0LCB7
Ci0gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LnRyaWdnZXJBY3Rpb24oewotICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2F2ZScKLSAgICAg
ICAgICAgICAgICB9KTsgLy8gU2VuZHMgdGhlIGBzYXZlYCBhY3Rpb24sIGFsb25nIHdpdGggdGhl
IGN1cnJlbnQgY29udGV4dAotICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBj
b250cm9sbGVyCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
YGBgCi0KLSAgICAgICAgICAgIEBjbGFzcyBWaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydAotICAgICAg
ICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuVGFyZ2V0
QWN0aW9uU3VwcG9ydAotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IE1peGluLmNyZWF0ZShUYXJnZXRBY3Rpb25TdXBwb3J0LCB7Ci0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB0YXJnZXQKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICB0YXJnZXQ6IGFsaWFzKCdjb250cm9sbGVyJyksCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBhY3Rpb25Db250ZXh0Ci0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgYWN0aW9uQ29udGV4dDogYWxpYXMoJ2NvbnRleHQn
KQotICAgICAgICB9KTsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL3N5c3RlbS9l
dmVudF9kaXNwYXRjaGVyIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9p
c19ub25lIiwgImVtYmVyLW1ldGFsL3J1bl9sb29wIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVt
YmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3Qi
LCAiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIsICJlbWJlci12aWV3cy92aWV3cy92aWV3Iiwg
ImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJf
XywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19k
ZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRl
bmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0
cmljdCI7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIEVt
YmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVtYmVyLmFzc2Vy
dAotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIg
c2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIGlzTm9uZSA9IF9fZGVwZW5k
ZW5jeTRfXy5pc05vbmU7Ci0gICAgICAgIHZhciBydW4gPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTZfXy50eXBlT2Y7Ci0gICAg
ICAgIHZhciBmbXQgPSBfX2RlcGVuZGVuY3k3X18uZm10OwotICAgICAgICB2YXIgRW1iZXJPYmpl
Y3QgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGpRdWVyeSA9IF9f
ZGVwZW5kZW5jeTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5j
eTEwX19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgQWN0aW9uSGVscGVyOwotCi0gICAgICAg
IC8vRVM2VE9ETzoKLSAgICAgICAgLy8gZmluZCBhIGJldHRlciB3YXkgdG8gZG8gRW1iZXIuVmll
dy52aWV3cyB3aXRob3V0IGdsb2JhbCBzdGF0ZQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAg
ICBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYCBoYW5kbGVzIGRlbGVnYXRpbmcgYnJvd3NlciBldmVu
dHMgdG8gdGhlaXIKLSAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBgRW1iZXIuVmlld3MuYCBG
b3IgZXhhbXBsZSwgd2hlbiB5b3UgY2xpY2sgb24gYSB2aWV3LAotICAgICAgICAgICAgICBgRW1i
ZXIuRXZlbnREaXNwYXRjaGVyYCBlbnN1cmVzIHRoYXQgdGhhdCB2aWV3J3MgYG1vdXNlRG93bmAg
bWV0aG9kIGdldHMKLSAgICAgICAgICAgICAgY2FsbGVkLgotCi0gICAgICAgICAgICAgIEBjbGFz
cyBFdmVudERpc3BhdGNoZXIKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAg
ICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAg
ICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBFbWJlck9iamVj
dC5leHRlbmQoewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIHNl
dCBvZiBldmVudHMgbmFtZXMgKGFuZCBhc3NvY2lhdGVkIGhhbmRsZXIgZnVuY3Rpb24gbmFtZXMp
IHRvIGJlIHNldHVwCi0gICAgICAgICAgICAgICAgICAgIGFuZCBkaXNwYXRjaGVkIGJ5IHRoZSBg
RXZlbnREaXNwYXRjaGVyYC4gQ3VzdG9tIGV2ZW50cyBjYW4gYWRkZWQgdG8gdGhpcyBsaXN0IGF0
IHNldHVwCi0gICAgICAgICAgICAgICAgICAgIHRpbWUsIGdlbmVyYWxseSB2aWEgdGhlIGBFbWJl
ci5BcHBsaWNhdGlvbi5jdXN0b21FdmVudHNgIGhhc2guIE9ubHkgb3ZlcnJpZGUgdGhpcwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0IHNldCB0byBwcmV2ZW50IHRoZSBFdmVudERpc3BhdGNo
ZXIgZnJvbSBsaXN0ZW5pbmcgb24gc29tZSBldmVudHMgYWxsIHRvZ2V0aGVyLgotCi0gICAgICAg
ICAgICAgICAgICAgIFRoaXMgc2V0IHdpbGwgYmUgbW9kaWZpZWQgYnkgYHNldHVwYCB0byBhbHNv
IGluY2x1ZGUgYW55IGV2ZW50cyBhZGRlZCBhdCB0aGF0IHRpbWUuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHByb3BlcnR5IGV2ZW50cwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBPYmplY3QK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBldmVudHM6IHsKLSAgICAgICAgICAg
ICAgICB0b3VjaHN0YXJ0IDogJ3RvdWNoU3RhcnQnLAotICAgICAgICAgICAgICAgIHRvdWNobW92
ZSA6ICd0b3VjaE1vdmUnLAotICAgICAgICAgICAgICAgIHRvdWNoZW5kIDogJ3RvdWNoRW5kJywK
LSAgICAgICAgICAgICAgICB0b3VjaGNhbmNlbCA6ICd0b3VjaENhbmNlbCcsCi0gICAgICAgICAg
ICAgICAga2V5ZG93biA6ICdrZXlEb3duJywKLSAgICAgICAgICAgICAgICBrZXl1cCA6ICdrZXlV
cCcsCi0gICAgICAgICAgICAgICAga2V5cHJlc3MgOiAna2V5UHJlc3MnLAotICAgICAgICAgICAg
ICAgIG1vdXNlZG93biA6ICdtb3VzZURvd24nLAotICAgICAgICAgICAgICAgIG1vdXNldXAgOiAn
bW91c2VVcCcsCi0gICAgICAgICAgICAgICAgY29udGV4dG1lbnUgOiAnY29udGV4dE1lbnUnLAot
ICAgICAgICAgICAgICAgIGNsaWNrIDogJ2NsaWNrJywKLSAgICAgICAgICAgICAgICBkYmxjbGlj
ayA6ICdkb3VibGVDbGljaycsCi0gICAgICAgICAgICAgICAgbW91c2Vtb3ZlIDogJ21vdXNlTW92
ZScsCi0gICAgICAgICAgICAgICAgZm9jdXNpbiA6ICdmb2N1c0luJywKLSAgICAgICAgICAgICAg
ICBmb2N1c291dCA6ICdmb2N1c091dCcsCi0gICAgICAgICAgICAgICAgbW91c2VlbnRlciA6ICdt
b3VzZUVudGVyJywKLSAgICAgICAgICAgICAgICBtb3VzZWxlYXZlIDogJ21vdXNlTGVhdmUnLAot
ICAgICAgICAgICAgICAgIHN1Ym1pdCA6ICdzdWJtaXQnLAotICAgICAgICAgICAgICAgIGlucHV0
IDogJ2lucHV0JywKLSAgICAgICAgICAgICAgICBjaGFuZ2UgOiAnY2hhbmdlJywKLSAgICAgICAg
ICAgICAgICBkcmFnc3RhcnQgOiAnZHJhZ1N0YXJ0JywKLSAgICAgICAgICAgICAgICBkcmFnIDog
J2RyYWcnLAotICAgICAgICAgICAgICAgIGRyYWdlbnRlciA6ICdkcmFnRW50ZXInLAotICAgICAg
ICAgICAgICAgIGRyYWdsZWF2ZSA6ICdkcmFnTGVhdmUnLAotICAgICAgICAgICAgICAgIGRyYWdv
dmVyIDogJ2RyYWdPdmVyJywKLSAgICAgICAgICAgICAgICBkcm9wIDogJ2Ryb3AnLAotICAgICAg
ICAgICAgICAgIGRyYWdlbmQgOiAnZHJhZ0VuZCcKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgcm9vdCBET00gZWxlbWVudCB0byB3aGlj
aCBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGF0dGFjaGVkLiBFdmVudAotICAgICAgICAgICAg
ICAgICAgICBsaXN0ZW5lcnMgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQgdW5sZXNz
IHRoaXMgaXMgb3ZlcnJpZGRlbi4KLQotICAgICAgICAgICAgICAgICAgICBDYW4gYmUgc3BlY2lm
aWVkIGFzIGEgRE9NRWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZy4KLQotICAgICAgICAgICAg
ICAgICAgICBUaGUgZGVmYXVsdCBib2R5IGlzIGEgc3RyaW5nIHNpbmNlIHRoaXMgbWF5IGJlIGV2
YWx1YXRlZCBiZWZvcmUgZG9jdW1lbnQuYm9keQotICAgICAgICAgICAgICAgICAgICBleGlzdHMg
aW4gdGhlIERPTS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgcm9vdEVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUg
RE9NRWxlbWVudAotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCAnYm9keScKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICByb290RWxlbWVudDogJ2JvZHknLAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSXQgZW5hYmxlcyBldmVudHMgdG8gYmUgZGlz
cGF0Y2hlZCB0byB0aGUgdmlldydzIGBldmVudE1hbmFnZXIuYCBXaGVuIHByZXNlbnQsCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMgb2JqZWN0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBoYW5kbGlu
ZyBvZiBldmVudHMgb24gdGhlIHZpZXcgaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIE5v
dGUgdGhhdCBtb3N0IEVtYmVyIGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIHRoaXMgZmVhdHVyZS4g
SWYgeW91ciBhcHAgYWxzbwotICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCB1c2UgaXQsIGNv
bnNpZGVyIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBnYWluIHNvbWUgcGVyZm9y
bWFuY2UKLSAgICAgICAgICAgICAgICAgICAgaW1wcm92ZW1lbnQgYnkgYWxsb3dpbmcgdGhlIEV2
ZW50RGlzcGF0Y2hlciB0byBza2lwIHRoZSBzZWFyY2ggZm9yIHRoZQotICAgICAgICAgICAgICAg
ICAgICBgZXZlbnRNYW5hZ2VyYCBvbiB0aGUgdmlldyB0cmVlLgotCi0gICAgICAgICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgdmFyIEV2ZW50RGlzcGF0Y2hl
ciA9IEVtLkV2ZW50RGlzcGF0Y2hlci5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGV2
ZW50czogewotICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljayAgICAgICA6ICdjbGljaycs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzaW4gICAgIDogJ2ZvY3VzSW4nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb2N1c291dCAgICA6ICdmb2N1c091dCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZSAgICAgIDogJ2NoYW5nZScKLSAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgIGNhbkRpc3BhdGNoVG9FdmVudE1hbmFn
ZXI6IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBj
b250YWluZXIucmVnaXN0ZXIoJ2V2ZW50X2Rpc3BhdGNoZXI6bWFpbicsIEV2ZW50RGlzcGF0Y2hl
cik7Ci0gICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9w
ZXJ0eSBjYW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyCi0gICAgICAgICAgICAgICAgICAgIEB0eXBl
IGJvb2xlYW4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgJ3RydWUnCi0gICAgICAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgY2FuRGlzcGF0Y2hUb0V2ZW50TWFuYWdlcjogdHJ1ZSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNldHMgdXAgZXZlbnQgbGlz
dGVuZXJzIGZvciBzdGFuZGFyZCBicm93c2VyIGV2ZW50cy4KLQotICAgICAgICAgICAgICAgICAg
ICBUaGlzIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBicm93c2VyIHNlbmRzIGEgYERPTUNvbnRl
bnRSZWFkeWAgZXZlbnQuIEJ5Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQsIGl0IHdpbGwg
c2V0IHVwIGFsbCBvZiB0aGUgbGlzdGVuZXJzIG9uIHRoZSBkb2N1bWVudCBib2R5LiBJZiB5b3UK
LSAgICAgICAgICAgICAgICAgICAgd291bGQgbGlrZSB0byByZWdpc3RlciB0aGUgbGlzdGVuZXJz
IG9uIGEgZGlmZmVyZW50IGVsZW1lbnQsIHNldCB0aGUgZXZlbnQKLSAgICAgICAgICAgICAgICAg
ICAgZGlzcGF0Y2hlcidzIGByb290YCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSBhZGRlZEV2ZW50cyB7SGFzaH0KLSAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oYWRkZWRFdmVudHMsIHJvb3RFbGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGV2ZW50LCBldmVudHMgPSBnZXQodGhpcywgJ2V2ZW50cycpOwot
Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZChldmVudHMsIGFkZGVkRXZlbnRzIHx8IHt9
KTsKLQotICAgICAgICAgICAgICAgIGlmICghaXNOb25lKHJvb3RFbGVtZW50KSkgewotICAgICAg
ICAgICAgICAgICAgICBzZXQodGhpcywgJ3Jvb3RFbGVtZW50Jywgcm9vdEVsZW1lbnQpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50ID0galF1ZXJ5KGdl
dCh0aGlzLCAncm9vdEVsZW1lbnQnKSk7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQo
Zm10KCdZb3UgY2Fubm90IHVzZSB0aGUgc2FtZSByb290IGVsZW1lbnQgKCVAKSBtdWx0aXBsZSB0
aW1lcyBpbiBhbiBFbWJlci5BcHBsaWNhdGlvbicsIFtyb290RWxlbWVudC5zZWxlY3RvciB8fCBy
b290RWxlbWVudFswXS50YWdOYW1lXSksICFyb290RWxlbWVudC5pcygnLmVtYmVyLWFwcGxpY2F0
aW9uJykpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgnWW91IGNhbm5vdCBtYWtlIGEg
bmV3IEVtYmVyLkFwcGxpY2F0aW9uIHVzaW5nIGEgcm9vdCBlbGVtZW50IHRoYXQgaXMgYSBkZXNj
ZW5kZW50IG9mIGFuIGV4aXN0aW5nIEVtYmVyLkFwcGxpY2F0aW9uJywgIXJvb3RFbGVtZW50LmNs
b3Nlc3QoJy5lbWJlci1hcHBsaWNhdGlvbicpLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCdZb3UgY2Fubm90IG1ha2UgYSBuZXcgRW1iZXIuQXBwbGljYXRpb24gdXNpbmcg
YSByb290IGVsZW1lbnQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiBhbiBleGlzdGluZyBFbWJlci5B
cHBsaWNhdGlvbicsICFyb290RWxlbWVudC5maW5kKCcuZW1iZXItYXBwbGljYXRpb24nKS5sZW5n
dGgpOwotCi0gICAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkQ2xhc3MoJ2VtYmVyLWFwcGxp
Y2F0aW9uJyk7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoJ1VuYWJsZSB0byBhZGQg
ImVtYmVyLWFwcGxpY2F0aW9uIiBjbGFzcyB0byByb290RWxlbWVudC4gTWFrZSBzdXJlIHlvdSBz
ZXQgcm9vdEVsZW1lbnQgdG8gdGhlIGJvZHkgb3IgYW4gZWxlbWVudCBpbiB0aGUgYm9keS4nLCBy
b290RWxlbWVudC5pcygnLmVtYmVyLWFwcGxpY2F0aW9uJykpOwotCi0gICAgICAgICAgICAgICAg
Zm9yIChldmVudCBpbiBldmVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50cy5o
YXNPd25Qcm9wZXJ0eShldmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0
dXBIYW5kbGVyKHJvb3RFbGVtZW50LCBldmVudCwgZXZlbnRzW2V2ZW50XSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVy
IG9uIHRoZSByb290RWxlbWVudC4gSWYgdGhlIGdpdmVuIGV2ZW50IGlzCi0gICAgICAgICAgICAg
ICAgICAgIHRyaWdnZXJlZCwgdGhlIHByb3ZpZGVkIGV2ZW50IGhhbmRsZXIgd2lsbCBiZSB0cmln
Z2VyZWQgb24gdGhlIHRhcmdldCB2aWV3LgotCi0gICAgICAgICAgICAgICAgICAgIElmIHRoZSB0
YXJnZXQgdmlldyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGV2ZW50IGhhbmRsZXIsIG9yIGlmIHRo
ZSBoYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgIHJldHVybnMgYGZhbHNlYCwgdGhlIHBhcmVu
dCB2aWV3IHdpbGwgYmUgY2FsbGVkLiBUaGUgZXZlbnQgd2lsbCBjb250aW51ZSB0bwotICAgICAg
ICAgICAgICAgICAgICBidWJibGUgdG8gZWFjaCBzdWNjZXNzaXZlIHBhcmVudCB2aWV3IHVudGls
IGl0IHJlYWNoZXMgdGhlIHRvcC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAg
ICAgICAgICAgICAgICAgICBAbWV0aG9kIHNldHVwSGFuZGxlcgotICAgICAgICAgICAgICAgICAg
ICBAcGFyYW0ge0VsZW1lbnR9IHJvb3RFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBldmVudCB0aGUgYnJvd3Nlci1vcmlnaW5hdGVkIGV2ZW50IHRvIGxpc3RlbiB0
bwotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lIHRoZSBuYW1l
IG9mIHRoZSBtZXRob2QgdG8gY2FsbCBvbiB0aGUgdmlldwotICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHNldHVwSGFuZGxlcjogZnVuY3Rpb24ocm9vdEVsZW1lbnQsIGV2ZW50LCBl
dmVudE5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAg
ICAgICAgICByb290RWxlbWVudC5vbihldmVudCArICcuZW1iZXInLCAnLmVtYmVyLXZpZXcnLCBm
dW5jdGlvbihldnQsIHRyaWdnZXJpbmdNYW5hZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciB2aWV3ID0gVmlldy52aWV3c1t0aGlzLmlkXSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgbWFuYWdlciA9IHNlbGYuY2FuRGlz
cGF0Y2hUb0V2ZW50TWFuYWdlciA/IHNlbGYuX2ZpbmROZWFyZXN0RXZlbnRNYW5hZ2VyKHZpZXcs
IGV2ZW50TmFtZSkgOiBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VyICYm
IG1hbmFnZXIgIT09IHRyaWdnZXJpbmdNYW5hZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9kaXNwYXRjaEV2ZW50KG1hbmFnZXIsIGV2dCwgZXZlbnROYW1lLCB2
aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9idWJibGVFdmVudCh2aWV3LCBldnQsIGV2ZW50
TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgcm9vdEVs
ZW1lbnQub24oZXZlbnQgKyAnLmVtYmVyJywgJ1tkYXRhLWVtYmVyLWFjdGlvbl0nLCBmdW5jdGlv
bihldnQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9FUzZUT0RPOiBOZWVkZWQgZm9yIEFjdGlv
bkhlbHBlciAoZ2VuZXJhbGx5IG5vdCBhdmFpbGFibGUgaW4gZW1iZXItdmlld3MgdGVzdCBzdWl0
ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBY3Rpb25IZWxwZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFjdGlvbkhlbHBlciA9IHJlcXVpcmVNb2R1bGUoImVtYmVyLXJvdXRpbmct
aGFuZGxlYmFycy9oZWxwZXJzL2FjdGlvbiIpWyJBY3Rpb25IZWxwZXIiXTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25JZCA9IGpRdWVyeShl
dnQuY3VycmVudFRhcmdldCkuYXR0cignZGF0YS1lbWJlci1hY3Rpb24nKSwKLSAgICAgICAgICAg
ICAgICAgICAgYWN0aW9uID0gQWN0aW9uSGVscGVyLnJlZ2lzdGVyZWRBY3Rpb25zW2FjdGlvbklk
XTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBhY3Rpb24g
aGVyZSBzaW5jZSBpbiBzb21lIGNhc2VzLCBqUXVlcnkgd2lsbCB0cmlnZ2VyCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGFuIGV2ZW50IG9uIGByZW1vdmVDaGlsZGAgKGkuZS4gZm9jdXNvdXQpIGFm
dGVyIHdlJ3ZlIGFscmVhZHkgdG9ybiBkb3duIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBh
Y3Rpb24gaGFuZGxlcnMgZm9yIHRoZSB2aWV3LgotICAgICAgICAgICAgICAgICAgICBpZiAoYWN0
aW9uICYmIGFjdGlvbi5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFjdGlvbi5oYW5kbGVyKGV2dCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9m
aW5kTmVhcmVzdEV2ZW50TWFuYWdlcjogZnVuY3Rpb24odmlldywgZXZlbnROYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG1hbmFnZXIgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgd2hpbGUg
KHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFuYWdlciA9IGdldCh2aWV3LCAnZXZlbnRN
YW5hZ2VyJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VyICYmIG1hbmFnZXJbZXZl
bnROYW1lXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gZ2V0KHZpZXcsICdwYXJlbnRW
aWV3Jyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hbmFn
ZXI7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfZGlzcGF0Y2hFdmVudDogZnVuY3Rp
b24ob2JqZWN0LCBldnQsIGV2ZW50TmFtZSwgdmlldykgewotICAgICAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBvYmplY3RbZXZl
bnROYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZU9mKGhhbmRsZXIpID09PSAnZnVuY3Rp
b24nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bihvYmplY3QsIGhhbmRsZXIs
IGV2dCwgdmlldyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBwcmV2ZW50RGVmYXVs
dCBpbiBldmVudE1hbmFnZXJzLgotICAgICAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0
aW9uKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gdGhpcy5fYnViYmxlRXZlbnQodmlldywgZXZ0LCBldmVudE5hbWUpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBfYnViYmxlRXZlbnQ6IGZ1bmN0aW9uKHZpZXcsIGV2dCwgZXZlbnRO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bih2aWV3LCB2aWV3LmhhbmRsZUV2ZW50
LCBldmVudE5hbWUsIGV2dCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXN0cm95
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXQodGhp
cywgJ3Jvb3RFbGVtZW50Jyk7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KHJvb3RFbGVtZW50KS5v
ZmYoJy5lbWJlcicsICcqKicpLnJlbW92ZUNsYXNzKCdlbWJlci1hcHBsaWNhdGlvbicpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiAn
KEV2ZW50RGlzcHRhY2hlciknOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsK
LSAgICBkZWZpbmUoImVtYmVyLXZpZXdzL3N5c3RlbS9leHQiLAotICAgIFsiZW1iZXItbWV0YWwv
cnVuX2xvb3AiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAg
ICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAg
dmFyIHJ1biA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8vIEFkZCBh
IG5ldyBuYW1lZCBxdWV1ZSBmb3IgcmVuZGVyaW5nIHZpZXdzIHRoYXQgaGFwcGVucwotICAgICAg
ICAvLyBhZnRlciBiaW5kaW5ncyBoYXZlIHN5bmNlZCwgYW5kIGEgcXVldWUgZm9yIHNjaGVkdWxp
bmcgYWN0aW9ucwotICAgICAgICAvLyB0aGF0IHRoYXQgc2hvdWxkIG9jY3VyIGFmdGVyIHZpZXcg
cmVuZGVyaW5nLgotICAgICAgICB2YXIgcXVldWVzID0gcnVuLnF1ZXVlczsKLSAgICAgICAgcnVu
Ll9hZGRRdWV1ZSgncmVuZGVyJywgJ2FjdGlvbnMnKTsKLSAgICAgICAgcnVuLl9hZGRRdWV1ZSgn
YWZ0ZXJSZW5kZXInLCAncmVuZGVyJyk7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3
cy9zeXN0ZW0vanF1ZXJ5IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMiLCAiZXhwb3J0
cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2Rl
cGVuZGVuY3kzX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAg
ICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIC8vIEVt
YmVyLmFzc2VydAotICAgICAgICB2YXIgdyA9IF9fZGVwZW5kZW5jeTJfXy53OwotCi0gICAgICAg
IC8vIEVTNlRPRE86IHRoZSBmdW5jdGlvbnMgb24gRW51bWVyYWJsZVV0aWxzIG5lZWQgdGhlaXIg
b3duIGV4cG9ydHMKLSAgICAgICAgdmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kzX18uZm9yRWFj
aDsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyIFZpZXdzCi0KLSAgICAgICAgICAg
IEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAg
ICAgICAgIEByZXF1aXJlcyBlbWJlci1ydW50aW1lCi0gICAgICAgICAgICBAbWFpbiBlbWJlci12
aWV3cwotICAgICAgICAgICAgKi8KLQotICAgICAgICB2YXIgalF1ZXJ5ID0gKEVtYmVyLmltcG9y
dHMgJiYgRW1iZXIuaW1wb3J0cy5qUXVlcnkpIHx8ICh0aGlzICYmIHRoaXMualF1ZXJ5KTsKLSAg
ICAgICAgaWYgKCFqUXVlcnkgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHsKLSAg
ICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgRW1iZXIuYXNzZXJ0KCJFbWJlciBWaWV3cyByZXF1aXJlIGpRdWVyeSBiZXR3ZWVuIDEuNyBh
bmQgMi4xIiwgalF1ZXJ5ICYmIChqUXVlcnkoKS5qcXVlcnkubWF0Y2goL14oKDFcLig3fDh8OXwx
MHwxMSkpfCgyXC4oMHwxKSkpKFwuXGQrKT8ocHJlfHJjXGQ/KT8vKSB8fCBFbWJlci5FTlYuRk9S
Q0VfSlFVRVJZKSk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVtYmVyCi0g
ICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwotICAgICAg
ICBpZiAoalF1ZXJ5KSB7Ci0gICAgICAgICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3Bl
Y3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kbmQuaHRtbCNkbmRldmVudHMKLSAg
ICAgICAgICAgIHZhciBkcmFnRXZlbnRzID0gdygnZHJhZ3N0YXJ0IGRyYWcgZHJhZ2VudGVyIGRy
YWdsZWF2ZSBkcmFnb3ZlciBkcm9wIGRyYWdlbmQnKTsKLQotICAgICAgICAgICAgLy8gQ29waWVz
IHRoZSBgZGF0YVRyYW5zZmVyYCBwcm9wZXJ0eSBmcm9tIGEgYnJvd3NlciBldmVudCBvYmplY3Qg
b250byB0aGUKLSAgICAgICAgICAgIC8vIGpRdWVyeSBldmVudCBvYmplY3QgZm9yIHRoZSBzcGVj
aWZpZWQgZXZlbnRzCi0gICAgICAgICAgICBmb3JFYWNoKGRyYWdFdmVudHMsIGZ1bmN0aW9uKGV2
ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1tldmVudE5h
bWVdID0gewotICAgICAgICAgICAgICAgICAgICBwcm9wczogWydkYXRhVHJhbnNmZXInXSAKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBf
X2V4cG9ydHNfX1siZGVmYXVsdCJdID0galF1ZXJ5OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1i
ZXItdmlld3Mvc3lzdGVtL3JlbmRlcl9idWZmZXIiLAotICAgIFsiZW1iZXItbWV0YWwvY29yZSIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0Iiwg
ImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyIsICJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5Iiwg
ImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJf
XywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIEVtYmVyID0gX19kZXBlbmRlbmN5MV9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIC8vIGpRdWVyeQotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVu
Y3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5M19fLnNldDsKLSAgICAg
ICAgdmFyIHNldElubmVySFRNTCA9IF9fZGVwZW5kZW5jeTRfXy5zZXRJbm5lckhUTUw7Ci0gICAg
ICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1bHQiXTsKLQotICAgICAgICBm
dW5jdGlvbiBDbGFzc1NldCgpIHsKLSAgICAgICAgICAgIHRoaXMuc2VlbiA9IHt9OwotICAgICAg
ICAgICAgdGhpcy5saXN0ID0gW107Ci0gICAgICAgIH0KLQotICAgICAgICBDbGFzc1NldC5wcm90
b3R5cGUgPSB7Ci0gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKHN0cmluZykgewotICAgICAgICAg
ICAgICAgIGlmIChzdHJpbmcgaW4gdGhpcy5zZWVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5zZWVuW3N0cmlu
Z10gPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgdGhpcy5saXN0LnB1c2goc3RyaW5nKTsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRvRE9NOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5saXN0LmpvaW4oIiAiKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLQotICAgICAgICB2YXIgQkFEX1RBR19OQU1FX1RFU1RfUkVHRVhQID0gL1teYS16QS1a
MC05XC1dLzsKLSAgICAgICAgdmFyIEJBRF9UQUdfTkFNRV9SRVBMQUNFX1JFR0VYUCA9IC9bXmEt
ekEtWjAtOVwtXS9nOwotCi0gICAgICAgIGZ1bmN0aW9uIHN0cmlwVGFnTmFtZSh0YWdOYW1lKSB7
Ci0gICAgICAgICAgICBpZiAoIXRhZ05hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFn
TmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFCQURfVEFHX05BTUVfVEVT
VF9SRUdFWFAudGVzdCh0YWdOYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0YWdOYW1l
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdGFnTmFtZS5yZXBsYWNlKEJB
RF9UQUdfTkFNRV9SRVBMQUNFX1JFR0VYUCwgJycpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IEJBRF9DSEFSU19SRUdFWFAgPSAvJig/IVx3KzspfFs8PiInYF0vZzsKLSAgICAgICAgdmFyIFBP
U1NJQkxFX0NIQVJTX1JFR0VYUCA9IC9bJjw+IidgXS87Ci0KLSAgICAgICAgZnVuY3Rpb24gZXNj
YXBlQXR0cmlidXRlKHZhbHVlKSB7Ci0gICAgICAgICAgICAvLyBTdG9sZW4gc2hhbWVsZXNzbHkg
ZnJvbSBIYW5kbGViYXJzCi0KLSAgICAgICAgICAgIHZhciBlc2NhcGUgPSB7Ci0gICAgICAgICAg
ICAgICAgIjwiOiAiJmx0OyIsCi0gICAgICAgICAgICAgICAgIj4iOiAiJmd0OyIsCi0gICAgICAg
ICAgICAgICAgJyInOiAiJnF1b3Q7IiwKLSAgICAgICAgICAgICAgICAiJyI6ICImI3gyNzsiLAot
ICAgICAgICAgICAgICAgICJgIjogIiYjeDYwOyIKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24oY2hyKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVzY2FwZVtjaHJdIHx8ICImYW1wOyI7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICB2YXIgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgaWYgKCFQT1NT
SUJMRV9DSEFSU19SRUdFWFAudGVzdChzdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0cmluZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFj
ZShCQURfQ0hBUlNfUkVHRVhQLCBlc2NhcGVDaGFyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IElFIDYvNyBoYXZlIGJ1Z3MgYXJvdW5kIHNldHRpbmcgbmFtZXMgb24gaW5wdXRzIGR1cmluZyBj
cmVhdGlvbi4KLSAgICAgICAgLy8gRnJvbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVz
L2xpYnJhcnkvaWUvbXM1MzYzODkodj12cy44NSkuYXNweDoKLSAgICAgICAgLy8gIlRvIGluY2x1
ZGUgdGhlIE5BTUUgYXR0cmlidXRlIGF0IHJ1biB0aW1lIG9uIG9iamVjdHMgY3JlYXRlZCB3aXRo
IHRoZSBjcmVhdGVFbGVtZW50IG1ldGhvZCwgdXNlIHRoZSBlVGFnLiIKLSAgICAgICAgdmFyIGNh
blNldE5hbWVPbklucHV0cyA9IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKLSAgICAgICAgICAgIGVsID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLQotICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdu
YW1lJywgJ2ZvbycpOwotICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGVsKTsKLQotICAgICAg
ICAgICAgcmV0dXJuICEhZGl2LmlubmVySFRNTC5tYXRjaCgnZm9vJyk7Ci0gICAgICAgIH0pKCk7
Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBFbWJlci5SZW5kZXJCdWZmZXJgIGdhdGhl
cnMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSB2aWV3IGFuZCBnZW5lcmF0ZXMgdGhlCi0gICAg
ICAgICAgICAgIGZpbmFsIHJlcHJlc2VudGF0aW9uLiBgRW1iZXIuUmVuZGVyQnVmZmVyYCB3aWxs
IGdlbmVyYXRlIEhUTUwgd2hpY2ggY2FuIGJlIHB1c2hlZAotICAgICAgICAgICAgICB0byB0aGUg
RE9NLgotCi0gICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICB2YXIg
YnVmZmVyID0gRW1iZXIuUmVuZGVyQnVmZmVyKCdkaXYnKTsKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQGNsYXNzIFJlbmRlckJ1ZmZlcgotICAgICAgICAgICAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgICAgICAgICAgIEBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgICBAcGFy
YW0ge1N0cmluZ30gdGFnTmFtZSB0YWcgbmFtZSAoc3VjaCBhcyAnZGl2JyBvciAncCcpIHVzZWQg
Zm9yIHRoZSBidWZmZXIKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBmdW5jdGlvbiBSZW5kZXJCdWZmZXIodGFnTmFtZSkgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyBfUmVuZGVyQnVmZmVyKHRhZ05hbWUpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmUKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIF9SZW5kZXJCdWZmZXIodGFnTmFtZSkgewotICAg
ICAgICAgICAgdGhpcy50YWdOYW1lcyA9IFt0YWdOYW1lIHx8IG51bGxdOwotICAgICAgICAgICAg
dGhpcy5idWZmZXIgPSAiIjsKLSAgICAgICAgfQotCi0gICAgICAgIF9SZW5kZXJCdWZmZXIucHJv
dG90eXBlID0gewotCi0gICAgICAgICAgICAvLyBUaGUgcm9vdCB2aWV3J3MgZWxlbWVudAotICAg
ICAgICAgICAgX2VsZW1lbnQ6IG51bGwsCi0KLSAgICAgICAgICAgIF9oYXNFbGVtZW50OiB0cnVl
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQW4gaW50ZXJuYWwgc2V0
IHVzZWQgdG8gZGUtZHVwZSBjbGFzcyBuYW1lcyB3aGVuIGBhZGRDbGFzcygpYCBpcwotICAgICAg
ICAgICAgICAgICAgICB1c2VkLiBBZnRlciBlYWNoIGNhbGwgdG8gYGFkZENsYXNzKClgLCB0aGUg
YGNsYXNzZXNgIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdXBkYXRlZC4K
LQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAcHJv
cGVydHkgZWxlbWVudENsYXNzZXMKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQXJyYXkKLSAg
ICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGVsZW1lbnRDbGFzc2VzOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgQXJyYXkgb2YgY2xhc3MgbmFtZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVk
IGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1
c2UgYHNldENsYXNzZXMoKWAgdG8gc2V0IHRoaXMgcHJvcGVydHkgZGlyZWN0bHkuIElmIHlvdQot
ICAgICAgICAgICAgICAgICAgICB1c2UgYGFkZENsYXNzKClgLCBpdCB3aWxsIGJlIG1haW50YWlu
ZWQgZm9yIHlvdS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY2xhc3NlcwotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAgICAgICAgICAgICAgICBAZGVmYXVs
dCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2xhc3NlczogbnVsbCwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSBpZCBpbiBvZiB0aGUg
ZWxlbWVudCwgdG8gYmUgYXBwbGllZCBpbiB0aGUgaWQgYXR0cmlidXRlLgotCi0gICAgICAgICAg
ICAgICAgICAgIFlvdSBzaG91bGQgbm90IHNldCB0aGlzIHByb3BlcnR5IHlvdXJzZWxmLCByYXRo
ZXIsIHlvdSBzaG91bGQgdXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSBgaWQoKWAgbWV0aG9k
IG9mIGBFbWJlci5SZW5kZXJCdWZmZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBlbGVtZW50SWQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAg
ICAgICAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBlbGVtZW50SWQ6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBIGhhc2gga2V5ZWQgb24gdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgd2hvc2UgdmFs
dWUgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIHRvIHRoYXQgYXR0cmlidXRl
LiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byBhcHBseSBhCi0gICAgICAgICAgICAgICAg
ICAgIGBkYXRhLXZpZXc9IkZvby5iYXIiYCBwcm9wZXJ0eSB0byBhbiBlbGVtZW50LCB5b3Ugd291
bGQgc2V0IHRoZQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50QXR0cmlidXRlcyBoYXNoIHRv
IGB7J2RhdGEtdmlldyc6J0Zvby5iYXInfWAuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IHNo
b3VsZCBub3QgbWFpbnRhaW4gdGhpcyBoYXNoIHlvdXJzZWxmLCByYXRoZXIsIHlvdSBzaG91bGQg
dXNlCi0gICAgICAgICAgICAgICAgICAgIHRoZSBgYXR0cigpYCBtZXRob2Qgb2YgYEVtYmVyLlJl
bmRlckJ1ZmZlcmAuCi0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGVsZW1lbnRBdHRy
aWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICAgICAg
ICAgQGRlZmF1bHQge30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbGVtZW50
QXR0cmlidXRlczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAg
IEEgaGFzaCBrZXllZCBvbiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydGllcyBhbmQgd2hvc2UgdmFs
dWUgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIHRvIHRoYXQgcHJvcGVydHku
IEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudGVkIHRvIGFwcGx5IGEKLSAgICAgICAgICAgICAgICAg
ICAgYGNoZWNrZWQ9dHJ1ZWAgcHJvcGVydHkgdG8gYW4gZWxlbWVudCwgeW91IHdvdWxkIHNldCB0
aGUKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFByb3BlcnRpZXMgaGFzaCB0byBgeydjaGVj
a2VkJzp0cnVlfWAuCi0KLSAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgbWFpbnRh
aW4gdGhpcyBoYXNoIHlvdXJzZWxmLCByYXRoZXIsIHlvdSBzaG91bGQgdXNlCi0gICAgICAgICAg
ICAgICAgICAgIHRoZSBgcHJvcCgpYCBtZXRob2Qgb2YgYEVtYmVyLlJlbmRlckJ1ZmZlcmAuCi0K
LSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGVsZW1lbnRQcm9wZXJ0aWVzCi0gICAgICAg
ICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge30K
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbGVtZW50UHJvcGVydGllczogbnVs
bCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoZSB0YWduYW1lIG9m
IHRoZSBlbGVtZW50IGFuIGluc3RhbmNlIG9mIGBFbWJlci5SZW5kZXJCdWZmZXJgIHJlcHJlc2Vu
dHMuCi0KLSAgICAgICAgICAgICAgICAgICAgVXN1YWxseSwgdGhpcyBnZXRzIHNldCBhcyB0aGUg
Zmlyc3QgcGFyYW1ldGVyIHRvIGBFbWJlci5SZW5kZXJCdWZmZXJgLiBGb3IKLSAgICAgICAgICAg
ICAgICAgICAgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byBjcmVhdGUgYSBgcGAgdGFnLCB0aGVu
IHlvdSB3b3VsZCBjYWxsCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBFbWJlci5SZW5kZXJCdWZmZXIoJ3AnKQotICAgICAgICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgZWxlbWVudFRhZwotICAg
ICAgICAgICAgICAgICAgICBAdHlwZSBTdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1
bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGVsZW1lbnRUYWc6IG51
bGwsCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBIGhhc2gga2V5ZWQg
b24gdGhlIG5hbWUgb2YgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhbmQgd2hvc2UgdmFsdWUgd2lsbAot
ICAgICAgICAgICAgICAgICAgICBiZSBhcHBsaWVkIHRvIHRoYXQgYXR0cmlidXRlLiBGb3IgZXhh
bXBsZSwgaWYgeW91IHdhbnRlZCB0byBhcHBseSBhCi0gICAgICAgICAgICAgICAgICAgIGBiYWNr
Z3JvdW5kLWNvbG9yOmJsYWNrO2Agc3R5bGUgdG8gYW4gZWxlbWVudCwgeW91IHdvdWxkIHNldCB0
aGUKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudFN0eWxlIGhhc2ggdG8gYHsnYmFja2dyb3Vu
ZC1jb2xvcic6J2JsYWNrJ31gLgotCi0gICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90
IG1haW50YWluIHRoaXMgaGFzaCB5b3Vyc2VsZiwgcmF0aGVyLCB5b3Ugc2hvdWxkIHVzZQotICAg
ICAgICAgICAgICAgICAgICB0aGUgYHN0eWxlKClgIG1ldGhvZCBvZiBgRW1iZXIuUmVuZGVyQnVm
ZmVyYC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgZWxlbWVudFN0eWxlCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQg
e30KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbGVtZW50U3R5bGU6IG51bGws
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBZGRzIGEgc3RyaW5nIG9m
IEhUTUwgdG8gdGhlIGBSZW5kZXJCdWZmZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcHVzaAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIEhUTUwg
dG8gcHVzaCBpbnRvIHRoZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJsZQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uKHN0cmluZykg
ewotICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyICs9IHN0cmluZzsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICAgICAgICBBZGRzIGEgY2xhc3MgdG8gdGhlIGJ1ZmZlciwgd2hpY2ggd2lsbCBiZSBy
ZW5kZXJlZCB0byB0aGUgY2xhc3MgYXR0cmlidXRlLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgYWRkQ2xhc3MKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGNsYXNz
TmFtZSBDbGFzcyBuYW1lIHRvIGFkZCB0byB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAg
IEBjaGFpbmFibGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZGRDbGFzczog
ZnVuY3Rpb24oY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAgICAgLy8gbGF6aWx5IGNyZWF0ZSBl
bGVtZW50Q2xhc3NlcwotICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudENsYXNzZXMgPSAodGhp
cy5lbGVtZW50Q2xhc3NlcyB8fCBuZXcgQ2xhc3NTZXQoKSk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5lbGVtZW50Q2xhc3Nlcy5hZGQoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNs
YXNzZXMgPSB0aGlzLmVsZW1lbnRDbGFzc2VzLmxpc3Q7Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNldENsYXNzZXM6IGZ1bmN0
aW9uKGNsYXNzTmFtZXMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRDbGFzc2VzID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgbGVuID0gY2xhc3NOYW1lcy5sZW5ndGgsIGk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWRkQ2xhc3MoY2xhc3NOYW1lc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNl
dHMgdGhlIGVsZW1lbnRJRCB0byBiZSB1c2VkIGZvciB0aGUgZWxlbWVudC4KLQotICAgICAgICAg
ICAgICAgICAgICBAbWV0aG9kIGlkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBpZAotICAgICAgICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgaWQ6IGZ1bmN0aW9uKGlkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5l
bGVtZW50SWQgPSBpZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8vIGR1Y2sgdHlwZSBhdHRyaWJ1dGUgZnVuY3Rpb25hbGl0eSBs
aWtlIGpRdWVyeSBzbyBhIHJlbmRlciBidWZmZXIKLSAgICAgICAgICAgIC8vIGNhbiBiZSB1c2Vk
IGxpa2UgYSBqUXVlcnkgb2JqZWN0IGluIGF0dHJpYnV0ZSBiaW5kaW5nIHNjZW5hcmlvcy4KLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFkZHMgYW4gYXR0cmlidXRlIHdo
aWNoIHdpbGwgYmUgcmVuZGVyZWQgdG8gdGhlIGVsZW1lbnQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBhdHRyCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQgdG8gdGhlIGF0dHJpYnV0ZQotICAgICAgICAg
ICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVy
LlJlbmRlckJ1ZmZlcnxTdHJpbmd9IHRoaXMgb3IgdGhlIGN1cnJlbnQgYXR0cmlidXRlIHZhbHVl
Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXR0cjogZnVuY3Rpb24obmFtZSwg
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuZWxlbWVudEF0
dHJpYnV0ZXMgPSAodGhpcy5lbGVtZW50QXR0cmlidXRlcyB8fCB7fSk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlc1tuYW1lXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9t
IHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgdG8gcmVuZGVyLgotCi0gICAgICAgICAgICAgICAgICAg
IEBtZXRob2QgcmVtb3ZlQXR0cgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30g
bmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgIEBjaGFp
bmFibGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVBdHRyOiBmdW5j
dGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmVsZW1l
bnRBdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzW25hbWVdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEFkZHMgYSBwcm9wZXJ0eSB3aGljaCB3aWxs
IGJlIHJlbmRlcmVkIHRvIHRoZSBlbGVtZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcHJvcAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFt
ZSBvZiB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHZh
bHVlIFRoZSB2YWx1ZSB0byBhZGQgdG8gdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAg
IEBjaGFpbmFibGUKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuUmVuZGVyQnVm
ZmVyfFN0cmluZ30gdGhpcyBvciB0aGUgY3VycmVudCBwcm9wZXJ0eSB2YWx1ZQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3A6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzID0g
KHRoaXMuZWxlbWVudFByb3BlcnRpZXMgfHwge30pOwotCi0gICAgICAgICAgICAgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3Bl
cnRpZXNbbmFtZV07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydGllc1tuYW1lXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbiBwcm9wZXJ0eSBmcm9tIHRoZSBsaXN0IG9m
IHByb3BlcnRpZXMgdG8gcmVuZGVyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVt
b3ZlUHJvcAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFt
ZSBvZiB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQGNoYWluYWJsZQotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKG5hbWUpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZWxlbWVudFByb3BlcnRpZXM7
Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHByb3BlcnRpZXNbbmFtZV07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgQWRkcyBhIHN0eWxlIHRvIHRoZSBzdHlsZSBhdHRyaWJ1dGUgd2hp
Y2ggd2lsbCBiZSByZW5kZXJlZCB0byB0aGUgZWxlbWVudC4KLQotICAgICAgICAgICAgICAgICAg
ICBAbWV0aG9kIHN0eWxlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IE5hbWUgb2YgdGhlIHN0eWxlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSB2
YWx1ZQotICAgICAgICAgICAgICAgICAgICBAY2hhaW5hYmxlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgc3R5bGU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5lbGVtZW50U3R5bGUgPSAodGhpcy5lbGVtZW50U3R5bGUgfHwge30pOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVbbmFtZV0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGJlZ2lu
OiBmdW5jdGlvbih0YWdOYW1lKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50YWdOYW1lcy5wdXNo
KHRhZ05hbWUgfHwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBwdXNoT3BlbmluZ1RhZzogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSB0aGlzLmN1cnJlbnRUYWdOYW1lKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0YWdOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFzRWxlbWVudCAm
JiAhdGhpcy5fZWxlbWVudCAmJiB0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuZ2VuZXJhdGVFbGVtZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXIsCi0gICAgICAgICAgICAgICAgaWQgPSB0aGlz
LmVsZW1lbnRJZCwKLSAgICAgICAgICAgICAgICBjbGFzc2VzID0gdGhpcy5jbGFzc2VzLAotICAg
ICAgICAgICAgICAgIGF0dHJzID0gdGhpcy5lbGVtZW50QXR0cmlidXRlcywKLSAgICAgICAgICAg
ICAgICBwcm9wcyA9IHRoaXMuZWxlbWVudFByb3BlcnRpZXMsCi0gICAgICAgICAgICAgICAgc3R5
bGUgPSB0aGlzLmVsZW1lbnRTdHlsZSwKLSAgICAgICAgICAgICAgICBhdHRyLCBwcm9wOwotCi0g
ICAgICAgICAgICAgICAgYnVmZmVyICs9ICc8JyArIHN0cmlwVGFnTmFtZSh0YWdOYW1lKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChpZCkgewotICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0g
JyBpZD0iJyArIGVzY2FwZUF0dHJpYnV0ZShpZCkgKyAnIic7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuZWxlbWVudElkID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsYXNzZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICcgY2xhc3M9
IicgKyBlc2NhcGVBdHRyaWJ1dGUoY2xhc3Nlcy5qb2luKCcgJykpICsgJyInOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNsYXNzZXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB0aGlz
LmVsZW1lbnRDbGFzc2VzID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICcgc3R5bGU9
Iic7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChwcm9wIGluIHN0eWxlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3R5bGUuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcHJvcCArICc6JyArIGVzY2FwZUF0dHJp
YnV0ZShzdHlsZVtwcm9wXSkgKyAnOyc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gJyInOwot
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFN0eWxlID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChhdHRyIGluIGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXR0cnMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gJyAnICsgYXR0ciArICc9IicgKyBlc2NhcGVBdHRyaWJ1dGUoYXR0cnNbYXR0
cl0pICsgJyInOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50QXR0cmlidXRlcyA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBwcm9wcykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlIHx8IHR5cGVvZih2YWx1ZSkgPT09ICdudW1iZXInKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICcgJyArIHByb3AgKyAnPSIn
ICsgcHJvcCArICciJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAnICcgKyBwcm9w
ICsgJz0iJyArIGVzY2FwZUF0dHJpYnV0ZShwcm9wc1twcm9wXSkgKyAnIic7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBidWZmZXIgKz0gJz4nOwotICAgICAgICAgICAgICAg
IHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHVz
aENsb3NpbmdUYWc6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0g
dGhpcy50YWdOYW1lcy5wb3AoKTsKLSAgICAgICAgICAgICAgICBpZiAodGFnTmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciArPSAnPC8nICsgc3RyaXBUYWdOYW1lKHRhZ05h
bWUpICsgJz4nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGN1cnJlbnRUYWdOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy50YWdOYW1lc1t0aGlzLnRhZ05hbWVzLmxlbmd0aC0xXTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRhZ05hbWUgPSB0aGlzLnRhZ05hbWVzLnBvcCgpLCAvLyBwb3Agc2luY2Ugd2UgZG9u
J3QgbmVlZCB0byBjbG9zZQotICAgICAgICAgICAgICAgIGlkID0gdGhpcy5lbGVtZW50SWQsCi0g
ICAgICAgICAgICAgICAgY2xhc3NlcyA9IHRoaXMuY2xhc3NlcywKLSAgICAgICAgICAgICAgICBh
dHRycyA9IHRoaXMuZWxlbWVudEF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgcHJvcHMgPSB0
aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgIHN0eWxlID0gdGhpcy5lbGVt
ZW50U3R5bGUsCi0gICAgICAgICAgICAgICAgc3R5bGVCdWZmZXIgPSAnJywgYXR0ciwgcHJvcCwg
dGFnU3RyaW5nOwotCi0gICAgICAgICAgICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLm5hbWUgJiYg
IWNhblNldE5hbWVPbklucHV0cykgewotICAgICAgICAgICAgICAgICAgICAvLyBJRSBhbGxvd3Mg
cGFzc2luZyBhIHRhZyB0byBjcmVhdGVFbGVtZW50LiBTZWUgbm90ZSBvbiBgY2FuU2V0TmFtZU9u
SW5wdXRzYCBhYm92ZSBhcyB3ZWxsLgotICAgICAgICAgICAgICAgICAgICB0YWdTdHJpbmcgPSAn
PCcgKyBzdHJpcFRhZ05hbWUodGFnTmFtZSkgKyAnIG5hbWU9IicgKyBlc2NhcGVBdHRyaWJ1dGUo
YXR0cnMubmFtZSkgKyAnIj4nOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRhZ1N0cmluZyA9IHRhZ05hbWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ1N0cmlu
ZyksCi0gICAgICAgICAgICAgICAgJGVsZW1lbnQgPSBqUXVlcnkoZWxlbWVudCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuYXR0cign
aWQnLCBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgJGVsZW1lbnQuYXR0cignY2xhc3MnLCBjbGFzc2VzLmpvaW4oJyAnKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuY2xhc3NlcyA9IG51bGw7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuZWxlbWVudENsYXNzZXMgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHByb3Ag
aW4gc3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS5oYXNPd25Qcm9w
ZXJ0eShwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQnVmZmVyICs9
IChwcm9wICsgJzonICsgc3R5bGVbcHJvcF0gKyAnOycpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgJGVsZW1l
bnQuYXR0cignc3R5bGUnLCBzdHlsZUJ1ZmZlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5lbGVtZW50U3R5bGUgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChhdHRycykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF0dHIgaW4gYXR0cnMp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShhdHRy
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmF0dHIoYXR0ciwgYXR0
cnNbYXR0cl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50QXR0cmlidXRlcyA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBwcm9wcykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGVsZW1lbnQucHJvcChwcm9wLCBwcm9wc1twcm9wXSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGVsZW1lbnQKLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIGVsZW1lbnQgY29ycmVzcG9uZGlu
ZyB0byB0aGUgZ2VuZXJhdGVkIEhUTUwKLSAgICAgICAgICAgICAgICAgICAgICBvZiB0aGlzIGJ1
ZmZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGVsZW1lbnQ6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciBodG1sID0gdGhpcy5pbm5lclN0cmluZygpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGh0bWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxl
bWVudCA9IHNldElubmVySFRNTCh0aGlzLl9lbGVtZW50LCBodG1sKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZXMgdGhl
IEhUTUwgY29udGVudCBmb3IgdGhpcyBidWZmZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7U3RyaW5nfSBUaGUgZ2Vu
ZXJhdGVkIEhUTUwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdHJpbmc6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9oYXNFbGVtZW50ICYmIHRoaXMu
X2VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB2ZXJzaW9ucyA8IDEx
IGRvIG5vdCBoYXZlIHN1cHBvcnQgZm9yIGVsZW1lbnQub3V0ZXJIVE1MLgotICAgICAgICAgICAg
ICAgICAgICB2YXIgdGhpc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQoKSwgb3V0ZXJIVE1MID0gdGhp
c0VsZW1lbnQub3V0ZXJIVE1MOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG91dGVy
SFRNTCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkoJzxkaXYvPicpLmFwcGVuZCh0aGlzRWxlbWVudCkuaHRtbCgpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlckhUTUw7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJT
dHJpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBpbm5lclN0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
YnVmZmVyOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgi
ZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzIiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZXhw
b3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAg
ICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvKiBnbG9iYWxzIFhNTFNlcmlhbGl6ZXIgKi8K
LQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgLy8gRW1iZXIuYXNzZXJ0Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVt
YmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIC8qIEJFR0lOIE1FVEFNT1JQSCBIRUxQRVJTICovCi0KLSAgICAgICAgLy8gSW50
ZXJuZXQgRXhwbG9yZXIgcHJpb3IgdG8gOSBkb2VzIG5vdCBhbGxvdyBzZXR0aW5nIGlubmVySFRN
TCBpZiB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAvLyBpcyBhICJ6ZXJvLXNjb3BlIiBlbGVt
ZW50LiBUaGlzIHByb2JsZW0gY2FuIGJlIHdvcmtlZCBhcm91bmQgYnkgbWFraW5nCi0gICAgICAg
IC8vIHRoZSBmaXJzdCBub2RlIGFuIGludmlzaWJsZSB0ZXh0IG5vZGUuIFdlLCBsaWtlIE1vZGVy
bml6ciwgdXNlICZzaHk7Ci0KLSAgICAgICAgdmFyIG5lZWRzU2h5ID0gdHlwZW9mIGRvY3VtZW50
ICE9PSAndW5kZWZpbmVkJyAmJiAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgdGVzdEVs
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgICAgICB0ZXN0RWwuaW5u
ZXJIVE1MID0gIjxkaXY+PC9kaXY+IjsKLSAgICAgICAgICAgIHRlc3RFbC5maXJzdENoaWxkLmlu
bmVySFRNTCA9ICI8c2NyaXB0Pjwvc2NyaXB0PiI7Ci0gICAgICAgICAgICByZXR1cm4gdGVzdEVs
LmZpcnN0Q2hpbGQuaW5uZXJIVE1MID09PSAnJzsKLSAgICAgICAgfSkoKTsKLQotICAgICAgICAv
LyBJRSA4IChhbmQgbGlrZWx5IGVhcmxpZXIpIGxpa2VzIHRvIG1vdmUgd2hpdGVzcGFjZSBwcmVj
ZWVkaW5nCi0gICAgICAgIC8vIGEgc2NyaXB0IHRhZyB0byBhcHBlYXIgYWZ0ZXIgaXQuIFRoaXMg
bWVhbnMgdGhhdCB3ZSBjYW4KLSAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHJlbW92ZSB3aGl0ZXNw
YWNlIHdoZW4gdXBkYXRpbmcgYSBtb3JwaC4KLSAgICAgICAgdmFyIG1vdmVzV2hpdGVzcGFjZSA9
IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgdmFyIHRlc3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAg
ICAgICAgdGVzdEVsLmlubmVySFRNTCA9ICJUZXN0OiA8c2NyaXB0IHR5cGU9J3RleHQveC1wbGFj
ZWhvbGRlcic+PC9zY3JpcHQ+VmFsdWUiOwotICAgICAgICAgICAgcmV0dXJuIHRlc3RFbC5jaGls
ZE5vZGVzWzBdLm5vZGVWYWx1ZSA9PT0gJ1Rlc3Q6JyAmJgotICAgICAgICAgICAgdGVzdEVsLmNo
aWxkTm9kZXNbMl0ubm9kZVZhbHVlID09PSAnIFZhbHVlJzsKLSAgICAgICAgfSkoKTsKLQotICAg
ICAgICAvLyBVc2UgdGhpcyB0byBmaW5kIGNoaWxkcmVuIGJ5IElEIGluc3RlYWQgb2YgdXNpbmcg
alF1ZXJ5Ci0gICAgICAgIHZhciBmaW5kQ2hpbGRCeUlkID0gZnVuY3Rpb24oZWxlbWVudCwgaWQp
IHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gaWQpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIGxlbiA9IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGgsIGlkeCwgbm9kZSwgZm91
bmQ7Ci0gICAgICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKLSAgICAg
ICAgICAgICAgICBub2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2lkeF07Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSBub2RlLm5vZGVUeXBlID09PSAxICYmIGZpbmRDaGlsZEJ5SWQobm9kZSwgaWQp
OwotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZm91bmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgICAgIHZhciBzZXRJbm5lckhUTUxXaXRob3V0Rml4ID0gZnVuY3Rpb24oZWxlbWVudCwg
aHRtbCkgewotICAgICAgICAgICAgaWYgKG5lZWRzU2h5KSB7Ci0gICAgICAgICAgICAgICAgaHRt
bCA9ICcmc2h5OycgKyBodG1sOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbWF0
Y2hlcyA9IFtdOwotICAgICAgICAgICAgaWYgKG1vdmVzV2hpdGVzcGFjZSkgewotICAgICAgICAg
ICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IGNoZWNrIGZvciBzY3JpcHQgdGFncyB3aXRoIGlk
cyB3aXRoIHRoZQotICAgICAgICAgICAgICAgIC8vIGdvYWwgb2YgdGFyZ2V0aW5nIG1vcnBocy4K
LSAgICAgICAgICAgICAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oXHMrKSg8c2NyaXB0IGlkPSco
W14nXSspJykvZywgZnVuY3Rpb24obWF0Y2gsIHNwYWNlcywgdGFnLCBpZCkgewotICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVzLnB1c2goW2lkLCBzcGFjZXNdKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRhZzsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBodG1sOwotCi0gICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIHRvIGRvIGFueSB3aGl0ZXNwYWNlIGFkanVzdG1lbnRzIGRvIHRoZW0gbm93Ci0gICAg
ICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxl
biA9IG1hdGNoZXMubGVuZ3RoLCBpZHg7Ci0gICAgICAgICAgICAgICAgZm9yIChpZHggPSAwOyBp
ZHggPCBsZW47IGlkeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPSBmaW5k
Q2hpbGRCeUlkKGVsZW1lbnQsIG1hdGNoZXNbaWR4XVswXSksCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtYXRjaGVzW2lkeF1bMV0pOwotICAgICAg
ICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgc2NyaXB0
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChu
ZWVkc1NoeSkgewotICAgICAgICAgICAgICAgIHZhciBzaHlFbGVtZW50ID0gZWxlbWVudC5maXJz
dENoaWxkOwotICAgICAgICAgICAgICAgIHdoaWxlIChzaHlFbGVtZW50Lm5vZGVUeXBlID09PSAx
ICYmICFzaHlFbGVtZW50Lm5vZGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoeUVsZW1l
bnQgPSBzaHlFbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChzaHlFbGVtZW50Lm5vZGVUeXBlID09PSAzICYmIHNoeUVsZW1lbnQubm9kZVZh
bHVlLmNoYXJBdCgwKSA9PT0gIlx1MDBBRCIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2h5RWxl
bWVudC5ub2RlVmFsdWUgPSBzaHlFbGVtZW50Lm5vZGVWYWx1ZS5zbGljZSgxKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyogRU5EIE1F
VEFNT1JQSCBIRUxQRVJTICovCi0KLQotICAgICAgICB2YXIgaW5uZXJIVE1MVGFncyA9IHt9Owot
ICAgICAgICB2YXIgY2FuU2V0SW5uZXJIVE1MID0gZnVuY3Rpb24odGFnTmFtZSkgewotICAgICAg
ICAgICAgaWYgKGlubmVySFRNTFRhZ3NbdGFnTmFtZV0gIT09IHVuZGVmaW5lZCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBpbm5lckhUTUxUYWdzW3RhZ05hbWVdOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgY2FuU2V0ID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gSUUgOCBh
bmQgZWFybGllciBkb24ndCBhbGxvdyB1cyB0byBkbyBpbm5lckhUTUwgb24gc2VsZWN0Ci0gICAg
ICAgICAgICBpZiAodGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0JykgewotICAgICAg
ICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpOwotICAg
ICAgICAgICAgICAgIHNldElubmVySFRNTFdpdGhvdXRGaXgoZWwsICc8b3B0aW9uIHZhbHVlPSJ0
ZXN0Ij5UZXN0PC9vcHRpb24+Jyk7Ci0gICAgICAgICAgICAgICAgY2FuU2V0ID0gZWwub3B0aW9u
cy5sZW5ndGggPT09IDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlubmVySFRNTFRh
Z3NbdGFnTmFtZV0gPSBjYW5TZXQ7Ci0KLSAgICAgICAgICAgIHJldHVybiBjYW5TZXQ7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gc2V0SW5uZXJIVE1MKGVsZW1lbnQsIGh0bWwpIHsK
LSAgICAgICAgICAgIHZhciB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lOwotCi0gICAgICAgICAg
ICBpZiAoY2FuU2V0SW5uZXJIVE1MKHRhZ05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5u
ZXJIVE1MV2l0aG91dEZpeChlbGVtZW50LCBodG1sKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRmlyZWZveCB2ZXJzaW9ucyA8IDExIGRvIG5vdCBoYXZlIHN1cHBv
cnQgZm9yIGVsZW1lbnQub3V0ZXJIVE1MLgotICAgICAgICAgICAgICAgIHZhciBvdXRlckhUTUwg
PSBlbGVtZW50Lm91dGVySFRNTCB8fCBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3Ry
aW5nKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQ2FuJ3Qgc2V0IGlu
bmVySFRNTCBvbiAiICsgZWxlbWVudC50YWdOYW1lICsgIiBpbiB0aGlzIGJyb3dzZXIiLCBvdXRl
ckhUTUwpOwotCi0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0VGFnID0gb3V0ZXJIVE1MLm1hdGNo
KG5ldyBSZWdFeHAoIjwiICsgdGFnTmFtZSArICIoW14+XSopPiIsICdpJykpWzBdLAotICAgICAg
ICAgICAgICAgIGVuZFRhZyA9ICc8LycgKyB0YWdOYW1lICsgJz4nOwotCi0gICAgICAgICAgICAg
ICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAg
ICAgICAgICBzZXRJbm5lckhUTUxXaXRob3V0Rml4KHdyYXBwZXIsIHN0YXJ0VGFnICsgaHRtbCAr
IGVuZFRhZyk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudCA9IHdyYXBwZXIuZmlyc3RDaGlsZDsK
LSAgICAgICAgICAgICAgICB3aGlsZSAoZWxlbWVudC50YWdOYW1lICE9PSB0YWdOYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJsaW5nOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5zZXRJbm5lckhUTUwgPSBzZXRJbm5l
ckhUTUw7Ci0gICAgICAgIGZ1bmN0aW9uIGlzU2ltcGxlQ2xpY2soZXZlbnQpIHsKLSAgICAgICAg
ICAgIHZhciBtb2RpZmllciA9IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZl
bnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXksCi0gICAgICAgICAgICBzZWNvbmRhcnlDbGljayA9
IGV2ZW50LndoaWNoID4gMTsgLy8gSUU5IG1heSByZXR1cm4gdW5kZWZpbmVkCi0KLSAgICAgICAg
ICAgIHJldHVybiAhbW9kaWZpZXIgJiYgIXNlY29uZGFyeUNsaWNrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX18uaXNTaW1wbGVDbGljayA9IGlzU2ltcGxlQ2xpY2s7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9jb2xsZWN0aW9uX3ZpZXciLAotICAgIFsi
ZW1iZXItbWV0YWwvY29yZSIsICJlbWJlci1tZXRhbC9wbGF0Zm9ybSIsICJlbWJlci1tZXRhbC9i
aW5kaW5nIiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
IiwgImVtYmVyLXZpZXdzL3ZpZXdzL2NvbnRhaW5lcl92aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdz
L2NvcmVfdmlldyIsICJlbWJlci12aWV3cy92aWV3cy92aWV3IiwgImVtYmVyLW1ldGFsL21peGlu
IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2Rl
cGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVu
Y3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9f
LCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2V4cG9ydHNfXykgewotICAg
ICAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVt
YmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAg
ICAvLyBFbWJlci5hc3NlcnQKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTJfXy5j
cmVhdGU7Ci0gICAgICAgIHZhciBpc0dsb2JhbFBhdGggPSBfX2RlcGVuZGVuY3kzX18uaXNHbG9i
YWxQYXRoOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5jeTVfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQg
PSBfX2RlcGVuZGVuY3k2X18uc2V0OwotICAgICAgICB2YXIgZm10ID0gX19kZXBlbmRlbmN5N19f
LmZtdDsKLSAgICAgICAgdmFyIENvbnRhaW5lclZpZXcgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIENvcmVWaWV3ID0gX19kZXBlbmRlbmN5OV9fWyJkZWZhdWx0Il07
Ci0gICAgICAgIHZhciBWaWV3ID0gX19kZXBlbmRlbmN5MTBfX1siZGVmYXVsdCJdOwotICAgICAg
ICB2YXIgb2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMV9fLm9ic2VydmVyOwotICAgICAgICB2YXIg
YmVmb3JlT2JzZXJ2ZXIgPSBfX2RlcGVuZGVuY3kxMV9fLmJlZm9yZU9ic2VydmVyOwotICAgICAg
ICB2YXIgRW1iZXJBcnJheSA9IF9fZGVwZW5kZW5jeTEyX19bImRlZmF1bHQiXTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgYEVtYmVyLkNvbGxlY3Rpb25WaWV3YCBpcyBhbiBgRW1iZXIu
Vmlld2AgZGVzY2VuZGVudCByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcKLSAgICAgICAgICAgICAg
YSBjb2xsZWN0aW9uIChhbiBhcnJheSBvciBhcnJheS1saWtlIG9iamVjdCkgYnkgbWFpbnRhaW5p
bmcgYSBjaGlsZCB2aWV3IG9iamVjdAotICAgICAgICAgICAgICBhbmQgYXNzb2NpYXRlZCBET00g
cmVwcmVzZW50YXRpb24gZm9yIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgYW5kIGVuc3VyaW5nCi0g
ICAgICAgICAgICAgIHRoYXQgY2hpbGQgdmlld3MgYW5kIHRoZWlyIGFzc29jaWF0ZWQgcmVuZGVy
ZWQgSFRNTCBhcmUgdXBkYXRlZCB3aGVuIGl0ZW1zIGluCi0gICAgICAgICAgICAgIHRoZSBhcnJh
eSBhcmUgYWRkZWQsIHJlbW92ZWQsIG9yIHJlcGxhY2VkLgotCi0gICAgICAgICAgICAgICMjIFNl
dHRpbmcgY29udGVudAotCi0gICAgICAgICAgICAgIFRoZSBtYW5hZ2VkIGNvbGxlY3Rpb24gb2Yg
b2JqZWN0cyBpcyByZWZlcmVuY2VkIGFzIHRoZSBgRW1iZXIuQ29sbGVjdGlvblZpZXdgCi0gICAg
ICAgICAgICAgIGluc3RhbmNlJ3MgYGNvbnRlbnRgIHByb3BlcnR5LgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgc29tZUl0ZW1zVmlldyA9IEVtYmVyLkNvbGxl
Y3Rpb25WaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgY29udGVudDogWydBJywgJ0InLCdD
J10KLSAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
VGhlIHZpZXcgZm9yIGVhY2ggaXRlbSBpbiB0aGUgY29sbGVjdGlvbiB3aWxsIGhhdmUgaXRzIGBj
b250ZW50YCBwcm9wZXJ0eSBzZXQKLSAgICAgICAgICAgICAgdG8gdGhlIGl0ZW0uCi0KLSAgICAg
ICAgICAgICAgIyMgU3BlY2lmeWluZyBpdGVtVmlld0NsYXNzCi0KLSAgICAgICAgICAgICAgQnkg
ZGVmYXVsdCB0aGUgdmlldyBjbGFzcyBmb3IgZWFjaCBpdGVtIGluIHRoZSBtYW5hZ2VkIGNvbGxl
Y3Rpb24gd2lsbCBiZSBhbgotICAgICAgICAgICAgICBpbnN0YW5jZSBvZiBgRW1iZXIuVmlld2Au
IFlvdSBjYW4gc3VwcGx5IGEgZGlmZmVyZW50IGNsYXNzIGJ5IHNldHRpbmcgdGhlCi0gICAgICAg
ICAgICAgIGBDb2xsZWN0aW9uVmlld2AncyBgaXRlbVZpZXdDbGFzc2AgcHJvcGVydHkuCi0KLSAg
ICAgICAgICAgICAgR2l2ZW4gYW4gZW1wdHkgYDxib2R5PmAgYW5kIHRoZSBmb2xsb3dpbmcgY29k
ZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHNvbWVJdGVt
c1ZpZXcgPSBFbWJlci5Db2xsZWN0aW9uVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgIGNs
YXNzTmFtZXM6IFsnYS1jb2xsZWN0aW9uJ10sCi0gICAgICAgICAgICAgICAgY29udGVudDogWydB
JywnQicsJ0MnXSwKLSAgICAgICAgICAgICAgICBpdGVtVmlld0NsYXNzOiBFbWJlci5WaWV3LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21w
aWxlKCJ0aGUgbGV0dGVyOiB7e3ZpZXcuY29udGVudH19IikKLSAgICAgICAgICAgICAgICB9KQot
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBzb21lSXRlbXNWaWV3LmFwcGVuZFRv
KCdib2R5Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0
IGluIHRoZSBmb2xsb3dpbmcgSFRNTCBzdHJ1Y3R1cmUKLQotICAgICAgICAgICAgICBgYGBodG1s
Ci0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXcgYS1jb2xsZWN0aW9uIj4KLSAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij50aGUgbGV0dGVyOiBBPC9kaXY+
Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXItdmlldyI+dGhlIGxldHRlcjogQjwv
ZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPnRoZSBsZXR0ZXI6
IEM8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgICMjIEF1dG9tYXRpYyBtYXRjaGluZyBvZiBwYXJlbnQvY2hpbGQgdGFnTmFtZXMK
LQotICAgICAgICAgICAgICBTZXR0aW5nIHRoZSBgdGFnTmFtZWAgcHJvcGVydHkgb2YgYSBgQ29s
bGVjdGlvblZpZXdgIHRvIGFueSBvZgotICAgICAgICAgICAgICAidWwiLCAib2wiLCAidGFibGUi
LCAidGhlYWQiLCAidGJvZHkiLCAidGZvb3QiLCAidHIiLCBvciAic2VsZWN0IiB3aWxsIHJlc3Vs
dAotICAgICAgICAgICAgICBpbiB0aGUgaXRlbSB2aWV3cyByZWNlaXZpbmcgYW4gYXBwcm9wcmlh
dGVseSBtYXRjaGVkIGB0YWdOYW1lYCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBHaXZlbiBh
biBlbXB0eSBgPGJvZHk+YCBhbmQgdGhlIGZvbGxvd2luZyBjb2RlOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgYW5Vbm9yZGVyZWRMaXN0VmlldyA9IEVtYmVy
LkNvbGxlY3Rpb25WaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgdGFnTmFtZTogJ3VsJywK
LSAgICAgICAgICAgICAgICBjb250ZW50OiBbJ0EnLCdCJywnQyddLAotICAgICAgICAgICAgICAg
IGl0ZW1WaWV3Q2xhc3M6IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoInRoZSBsZXR0ZXI6IHt7dmlldy5jb250
ZW50fX0iKQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgIGFuVW5vcmRlcmVkTGlzdFZpZXcuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1M
IHN0cnVjdHVyZQotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPHVsIGNs
YXNzPSJlbWJlci12aWV3IGEtY29sbGVjdGlvbiI+Ci0gICAgICAgICAgICAgICAgPGxpIGNsYXNz
PSJlbWJlci12aWV3Ij50aGUgbGV0dGVyOiBBPC9saT4KLSAgICAgICAgICAgICAgICA8bGkgY2xh
c3M9ImVtYmVyLXZpZXciPnRoZSBsZXR0ZXI6IEI8L2xpPgotICAgICAgICAgICAgICAgIDxsaSBj
bGFzcz0iZW1iZXItdmlldyI+dGhlIGxldHRlcjogQzwvbGk+Ci0gICAgICAgICAgICAgIDwvdWw+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFkZGl0aW9uYWwgYHRhZ05hbWVg
IHBhaXJzIGNhbiBiZSBwcm92aWRlZCBieSBhZGRpbmcgdG8KLSAgICAgICAgICAgICAgYEVtYmVy
LkNvbGxlY3Rpb25WaWV3LkNPTlRBSU5FUl9NQVAgYAotCi0gICAgICAgICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgICAgICAgICAgRW1iZXIuQ29sbGVjdGlvblZpZXcuQ09OVEFJTkVSX01BUFsn
YXJ0aWNsZSddID0gJ3NlY3Rpb24nCi0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAg
ICMjIFByb2dyYW1tYXRpYyBjcmVhdGlvbiBvZiBjaGlsZCB2aWV3cwotCi0gICAgICAgICAgICAg
IEZvciBjYXNlcyB3aGVyZSBhZGRpdGlvbmFsIGN1c3RvbWl6YXRpb24gYmV5b25kIHRoZSB1c2Ug
b2YgYSBzaW5nbGUKLSAgICAgICAgICAgICAgYGl0ZW1WaWV3Q2xhc3NgIG9yIGB0YWdOYW1lYCBt
YXRjaGluZyBpcyByZXF1aXJlZCBDb2xsZWN0aW9uVmlldydzCi0gICAgICAgICAgICAgIGBjcmVh
dGVDaGlsZFZpZXdgIG1ldGhvZCBjYW4gYmUgb3ZlcmlkZGVuOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQ3VzdG9tQ29sbGVjdGlvblZpZXcgPSBFbWJlci5D
b2xsZWN0aW9uVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGNyZWF0ZUNoaWxkVmlldzog
ZnVuY3Rpb24odmlld0NsYXNzLCBhdHRycykgewotICAgICAgICAgICAgICAgICAgaWYgKGF0dHJz
LmNvbnRlbnQua2luZCA9PSAnYWxidW0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXdDbGFz
cyA9IEFwcC5BbGJ1bVZpZXc7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB2aWV3Q2xhc3MgPSBBcHAuU29uZ1ZpZXc7Ci0gICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIodmlld0NsYXNzLCBhdHRycyk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgIyMgRW1wdHkgVmlldwotCi0gICAgICAgICAgICAgIFlvdSBjYW4g
cHJvdmlkZSBhbiBgRW1iZXIuVmlld2Agc3ViY2xhc3MgdG8gdGhlIGBFbWJlci5Db2xsZWN0aW9u
Vmlld2AKLSAgICAgICAgICAgICAgaW5zdGFuY2UgYXMgaXRzIGBlbXB0eVZpZXdgIHByb3BlcnR5
LiBJZiB0aGUgYGNvbnRlbnRgIHByb3BlcnR5IG9mIGEKLSAgICAgICAgICAgICAgYENvbGxlY3Rp
b25WaWV3YCBpcyBzZXQgdG8gYG51bGxgIG9yIGFuIGVtcHR5IGFycmF5LCBhbiBpbnN0YW5jZSBv
ZiB0aGlzIHZpZXcKLSAgICAgICAgICAgICAgd2lsbCBiZSB0aGUgYENvbGxlY3Rpb25WaWV3YHMg
b25seSBjaGlsZC4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAg
IGFMaXN0V2l0aE5vdGhpbmcgPSBFbWJlci5Db2xsZWN0aW9uVmlldy5jcmVhdGUoewotICAgICAg
ICAgICAgICAgIGNsYXNzTmFtZXM6IFsnbm90aGluZyddCi0gICAgICAgICAgICAgICAgY29udGVu
dDogbnVsbCwKLSAgICAgICAgICAgICAgICBlbXB0eVZpZXc6IEVtYmVyLlZpZXcuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoIlRo
ZSBjb2xsZWN0aW9uIGlzIGVtcHR5IikKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICBhTGlzdFdpdGhOb3RoaW5nLmFwcGVuZFRvKCdib2R5Jyk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHRoZSBm
b2xsb3dpbmcgSFRNTCBzdHJ1Y3R1cmUKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9ImVtYmVyLXZpZXcgbm90aGluZyI+Ci0gICAgICAgICAgICAgICAg
PGRpdiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICAgICAgICAgICAgICBUaGUgY29sbGVjdGlv
biBpcyBlbXB0eQotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4K
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgIyMgQWRkaW5nIGFuZCBSZW1vdmlu
ZyBpdGVtcwotCi0gICAgICAgICAgICAgIFRoZSBgY2hpbGRWaWV3c2AgcHJvcGVydHkgb2YgYSBg
Q29sbGVjdGlvblZpZXdgIHNob3VsZCBub3QgYmUgZGlyZWN0bHkKLSAgICAgICAgICAgICAgbWFu
aXB1bGF0ZWQuIEluc3RlYWQsIGFkZCwgcmVtb3ZlLCByZXBsYWNlIGl0ZW1zIGZyb20gaXRzIGBj
b250ZW50YCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgVGhpcyB3aWxsIHRyaWdnZXIgYXBwcm9w
cmlhdGUgY2hhbmdlcyB0byBpdHMgcmVuZGVyZWQgSFRNTC4KLQotCi0gICAgICAgICAgICAgIEBj
bGFzcyBDb2xsZWN0aW9uVmlldwotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAg
ICAgICAgICAgIEBleHRlbmRzIEVtYmVyLkNvbnRhaW5lclZpZXcKLSAgICAgICAgICAgICAgQHNp
bmNlIEVtYmVyIDAuOQotICAgICAgICAgICAgKi8KLSAgICAgICAgdmFyIENvbGxlY3Rpb25WaWV3
ID0gQ29udGFpbmVyVmlldy5leHRlbmQoewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgQSBsaXN0IG9mIGl0ZW1zIHRvIGJlIGRpc3BsYXllZCBieSB0aGUgYEVtYmVyLkNv
bGxlY3Rpb25WaWV3YC4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgY29udGVudAot
ICAgICAgICAgICAgICAgICAgICBAdHlwZSBFbWJlci5BcnJheQotICAgICAgICAgICAgICAgICAg
ICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29udGVu
dDogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgcHJv
dmlkZXMgbWV0YWRhdGEgYWJvdXQgd2hhdCBraW5kIG9mIGVtcHR5IHZpZXcgY2xhc3MgdGhpcwot
ICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIHdvdWxkIGxpa2UgaWYgaXQgaXMgYmVpbmcg
aW5zdGFudGlhdGVkIGZyb20gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gKGxp
a2UgSGFuZGxlYmFycykKLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgICBAcHJvcGVydHkgZW1wdHlWaWV3Q2xhc3MKLSAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBlbXB0eVZpZXdDbGFzczogVmlldywKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEFuIG9wdGlvbmFsIHZpZXcgdG8gZGlzcGxheSBpZiBjb250ZW50
IGlzIHNldCB0byBhbiBlbXB0eSBhcnJheS4KLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgZW1wdHlWaWV3Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEVtYmVyLlZpZXcKLSAgICAg
ICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGVtcHR5VmlldzogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEBwcm9wZXJ0eSBpdGVtVmlld0NsYXNzCi0gICAgICAgICAgICAgICAgICAgIEB0eXBl
IEVtYmVyLlZpZXcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgRW1iZXIuVmlldwotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3M6IFZpZXcsCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBTZXR1cCBhIENvbGxlY3Rpb25WaWV3
Ci0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBpbml0Ci0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJl
dCA9IHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudERpZENoYW5n
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aGVuIHRoZSBjb250ZW50
IHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZS4gTm90aWZpZXMgb2JzZXJ2ZXJzIHRoYXQgdGhl
Ci0gICAgICAgICAgICAgICAgICAgIGVudGlyZSBhcnJheSBjb250ZW50IHdpbGwgY2hhbmdlLgot
Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgX2NvbnRlbnRXaWxsQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
X2NvbnRlbnRXaWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcignY29udGVudCcsIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXQoJ2NvbnRlbnQnKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRl
bnQucmVtb3ZlQXJyYXlPYnNlcnZlcih0aGlzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdmFyIGxlbiA9IGNvbnRlbnQgPyBnZXQoY29udGVudCwgJ2xlbmd0aCcpIDogMDsK
LSAgICAgICAgICAgICAgICB0aGlzLmFycmF5V2lsbENoYW5nZShjb250ZW50LCAwLCBsZW4pOwot
ICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBD
aGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29udGVudCBoYXMgY2hhbmdlZCwgYW5kIGlmIHNv
LAotICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGhlIGNoaWxkcmVuIGRpcmVjdGx5LiBUaGlz
IGlzIGFsd2F5cyBzY2hlZHVsZWQKLSAgICAgICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzbHks
IHRvIGFsbG93IHRoZSBlbGVtZW50IHRvIGJlIGNyZWF0ZWQgYmVmb3JlCi0gICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmdzIGhhdmUgc3luY2hyb25pemVkIGFuZCB2aWNlIHZlcnNhLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2Nv
bnRlbnREaWRDaGFuZ2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfY29udGVu
dERpZENoYW5nZTogb2JzZXJ2ZXIoJ2NvbnRlbnQnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29udGVudCA9IGdldCh0aGlzLCAnY29udGVudCcpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXNzZXJ0QXJyYXlM
aWtlKGNvbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFkZEFycmF5T2JzZXJ2
ZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGxlbiA9
IGNvbnRlbnQgPyBnZXQoY29udGVudCwgJ2xlbmd0aCcpIDogMDsKLSAgICAgICAgICAgICAgICB0
aGlzLmFycmF5RGlkQ2hhbmdlKGNvbnRlbnQsIDAsIG51bGwsIGxlbik7Ci0gICAgICAgICAgICB9
KSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEVuc3VyZSB0aGF0IHRo
ZSBjb250ZW50IGltcGxlbWVudHMgRW1iZXIuQXJyYXkKLQotICAgICAgICAgICAgICAgICAgICBA
cHJpdmF0ZQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9hc3NlcnRBcnJheUxpa2UKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfYXNzZXJ0QXJyYXlMaWtlOiBmdW5jdGlv
bihjb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KGZtdCgiYW4gRW1iZXIu
Q29sbGVjdGlvblZpZXcncyBjb250ZW50IG11c3QgaW1wbGVtZW50IEVtYmVyLkFycmF5LiBZb3Ug
cGFzc2VkICVAIiwgW2NvbnRlbnRdKSwgRW1iZXJBcnJheS5kZXRlY3QoY29udGVudCkpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92
ZXMgdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgb2JzZXJ2ZXJzLgotCi0gICAgICAgICAgICAgICAg
ICAgIEBtZXRob2QgZGVzdHJveQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRl
c3Ryb3k6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3VwZXIoKSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBnZXQodGhpcywgJ2NvbnRlbnQnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY29udGVudCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZW50LnJlbW92
ZUFycmF5T2JzZXJ2ZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuX2NyZWF0ZWRFbXB0eVZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY3JlYXRlZEVtcHR5Vmlldy5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gYSBtdXRhdGlvbiB0byB0aGUgdW5k
ZXJseWluZyBjb250ZW50IGFycmF5IHdpbGwgb2NjdXIuCi0KLSAgICAgICAgICAgICAgICAgICAg
VGhpcyBtZXRob2Qgd2lsbCByZW1vdmUgYW55IHZpZXdzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0
aGUgdW5kZXJseWluZwotICAgICAgICAgICAgICAgICAgICBjb250ZW50IGFycmF5LgotCi0gICAg
ICAgICAgICAgICAgICAgIEludm9rZXMgd2hlbmV2ZXIgdGhlIGNvbnRlbnQgYXJyYXkgaXRzZWxm
IHdpbGwgY2hhbmdlLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgYXJyYXlXaWxsQ2hh
bmdlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGNvbnRlbnQgdGhlIG1hbmFn
ZWQgY29sbGVjdGlvbiBvZiBvYmplY3RzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVt
YmVyfSBzdGFydCB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGNoYW5nZXMgd2lsbCBvY2N1cnIKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZWQgbnVtYmVyIG9mIG9iamVj
dCB0byBiZSByZW1vdmVkIGZyb20gY29udGVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGFycmF5V2lsbENoYW5nZTogZnVuY3Rpb24oY29udGVudCwgc3RhcnQsIHJlbW92ZWRD
b3VudCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb250ZW50cyB3ZXJlIGVtcHR5IGJl
Zm9yZSBhbmQgdGhpcyB0ZW1wbGF0ZSBjb2xsZWN0aW9uIGhhcyBhbgotICAgICAgICAgICAgICAg
IC8vIGVtcHR5IHZpZXcgcmVtb3ZlIGl0IG5vdy4KLSAgICAgICAgICAgICAgICB2YXIgZW1wdHlW
aWV3ID0gZ2V0KHRoaXMsICdlbXB0eVZpZXcnKTsKLSAgICAgICAgICAgICAgICBpZiAoZW1wdHlW
aWV3ICYmIGVtcHR5VmlldyBpbnN0YW5jZW9mIFZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZW1wdHlWaWV3LnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggY2hpbGQgdmlld3MgdGhhdCBjb3JyZXNwb25kIHdp
dGggdGhlIHJlbW92ZWQgaXRlbXMuCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGxv
b3AgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSB0byB0aGUgYmVnaW5uaW5nIGJlY2F1c2UKLSAg
ICAgICAgICAgICAgICAvLyB3ZSBhcmUgbXV0YXRpbmcgaXQgYXMgd2UgZ28uCi0gICAgICAgICAg
ICAgICAgdmFyIGNoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzLCBjaGlsZFZpZXcsIGlkeCwg
bGVuOwotCi0gICAgICAgICAgICAgICAgbGVuID0gdGhpcy5fY2hpbGRWaWV3cy5sZW5ndGg7Ci0K
LSAgICAgICAgICAgICAgICB2YXIgcmVtb3ZpbmdBbGwgPSByZW1vdmVkQ291bnQgPT09IGxlbjsK
LQotICAgICAgICAgICAgICAgIGlmIChyZW1vdmluZ0FsbCkgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmN1cnJlbnRTdGF0ZS5lbXB0eSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5pbnZva2VSZWN1cnNpdmVseShmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2aWV3LnJlbW92ZWRGcm9tRE9NID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0g
c3RhcnQgKyByZW1vdmVkQ291bnQgLSAxOyBpZHggPj0gc3RhcnQ7IGlkeC0tKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoaWxkVmlldyA9IGNoaWxkVmlld3NbaWR4XTsKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGRWaWV3LmRlc3Ryb3koKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4g
YSBtdXRhdGlvbiB0byB0aGUgdW5kZXJseWluZyBjb250ZW50IGFycmF5IG9jY3Vycy4KLQotICAg
ICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIHJlcGxheSB0aGF0IG11dGF0aW9uIGFn
YWluc3QgdGhlIHZpZXdzIHRoYXQgY29tcG9zZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgYEVt
YmVyLkNvbGxlY3Rpb25WaWV3YCwgZW5zdXJpbmcgdGhhdCB0aGUgdmlldyByZWZsZWN0cyB0aGUg
bW9kZWwuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhpcyBhcnJheSBvYnNlcnZlciBpcyBhZGRl
ZCBpbiBgY29udGVudERpZENoYW5nZWAuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBh
cnJheURpZENoYW5nZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBjb250ZW50
IHRoZSBtYW5hZ2VkIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICBA
cGFyYW0ge051bWJlcn0gc3RhcnQgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBjaGFuZ2VzIG9jY3Vy
cmVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVtYmVyfSByZW1vdmVkIG51bWJlciBv
ZiBvYmplY3QgcmVtb3ZlZCBmcm9tIGNvbnRlbnQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtOdW1iZXJ9IGFkZGVkIG51bWJlciBvZiBvYmplY3QgYWRkZWQgdG8gY29udGVudAotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFycmF5RGlkQ2hhbmdlOiBmdW5jdGlvbihjb250
ZW50LCBzdGFydCwgcmVtb3ZlZCwgYWRkZWQpIHsKLSAgICAgICAgICAgICAgICB2YXIgYWRkZWRW
aWV3cyA9IFtdLCB2aWV3LCBpdGVtLCBpZHgsIGxlbiwgaXRlbVZpZXdDbGFzcywKLSAgICAgICAg
ICAgICAgICBlbXB0eVZpZXc7Ci0KLSAgICAgICAgICAgICAgICBsZW4gPSBjb250ZW50ID8gZ2V0
KGNvbnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGl0ZW1WaWV3Q2xhc3MgPSBnZXQodGhpcywgJ2l0ZW1WaWV3Q2xh
c3MnKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBpdGVt
Vmlld0NsYXNzICYmIGlzR2xvYmFsUGF0aChpdGVtVmlld0NsYXNzKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbVZpZXdDbGFzcyA9IGdldChpdGVtVmlld0NsYXNzKSB8fCBpdGVtVmll
d0NsYXNzOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KGZtdCgiaXRlbVZpZXdDbGFzcyBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgRW1iZXIu
Vmlldywgbm90ICVAIiwKLSAgICAgICAgICAgICAgICAgICAgW2l0ZW1WaWV3Q2xhc3NdKSwKLSAg
ICAgICAgICAgICAgICAgICAgJ3N0cmluZycgPT09IHR5cGVvZiBpdGVtVmlld0NsYXNzIHx8IFZp
ZXcuZGV0ZWN0KGl0ZW1WaWV3Q2xhc3MpKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGlk
eCA9IHN0YXJ0OyBpZHggPCBzdGFydCArIGFkZGVkOyBpZHgrKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbSA9IGNvbnRlbnQub2JqZWN0QXQoaWR4KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlldyA9IHRoaXMuY3JlYXRlQ2hpbGRWaWV3KGl0ZW1WaWV3Q2xhc3MsIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBpdGVtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRJbmRleDogaWR4Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRWaWV3cy5wdXNoKHZpZXcpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgZW1wdHlWaWV3ID0gZ2V0KHRoaXMsICdlbXB0eVZpZXcnKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVtcHR5VmlldykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCdz
dHJpbmcnID09PSB0eXBlb2YgZW1wdHlWaWV3ICYmIGlzR2xvYmFsUGF0aChlbXB0eVZpZXcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbXB0eVZpZXcgPSBnZXQoZW1wdHlWaWV3KSB8fCBl
bXB0eVZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBl
bXB0eVZpZXcgPSB0aGlzLmNyZWF0ZUNoaWxkVmlldyhlbXB0eVZpZXcpOwotICAgICAgICAgICAg
ICAgICAgICBhZGRlZFZpZXdzLnB1c2goZW1wdHlWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAg
c2V0KHRoaXMsICdlbXB0eVZpZXcnLCBlbXB0eVZpZXcpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChDb3JlVmlldy5kZXRlY3QoZW1wdHlWaWV3KSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fY3JlYXRlZEVtcHR5VmlldyA9IGVtcHR5VmlldzsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZShz
dGFydCwgMCwgYWRkZWRWaWV3cyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgSW5zdGFudGlhdGVzIGEgdmlldyB0byBiZSBhZGRlZCB0byB0
aGUgY2hpbGRWaWV3cyBhcnJheSBkdXJpbmcgdmlldwotICAgICAgICAgICAgICAgICAgICBpbml0
aWFsaXphdGlvbi4gWW91IGdlbmVyYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVj
dGx5IHVubGVzcwotICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIG92ZXJyaWRpbmcgYGNyZWF0
ZUNoaWxkVmlld3MoKWAuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCB3aWxsCi0gICAgICAgICAgICAg
ICAgICAgIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHRoZSBjb3JyZWN0IHNldHRpbmdzIG9uIHRo
ZSBuZXcgdmlldyBpbnN0YW5jZSB0bwotICAgICAgICAgICAgICAgICAgICBhY3QgYXMgYSBjaGls
ZCBvZiB0aGUgcGFyZW50LgotCi0gICAgICAgICAgICAgICAgICAgIFRoZSB0YWcgbmFtZSBmb3Ig
dGhlIHZpZXcgd2lsbCBiZSBzZXQgdG8gdGhlIHRhZ05hbWUgb2YgdGhlIHZpZXdDbGFzcwotICAg
ICAgICAgICAgICAgICAgICBwYXNzZWQgaW4uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBjcmVhdGVDaGlsZFZpZXcKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtDbGFzc30gdmll
d0NsYXNzCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7SGFzaH0gW2F0dHJzXSBBdHRyaWJ1
dGVzIHRvIGFkZAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSBuZXcg
aW5zdGFuY2UKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjcmVhdGVDaGlsZFZp
ZXc6IGZ1bmN0aW9uKHZpZXcsIGF0dHJzKSB7Ci0gICAgICAgICAgICAgICAgdmlldyA9IHRoaXMu
X3N1cGVyKHZpZXcsIGF0dHJzKTsKLQotICAgICAgICAgICAgICAgIHZhciBpdGVtVGFnTmFtZSA9
IGdldCh2aWV3LCAndGFnTmFtZScpOwotCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW1UYWdOYW1l
ID09PSBudWxsIHx8IGl0ZW1UYWdOYW1lID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaXRlbVRhZ05hbWUgPSBDb2xsZWN0aW9uVmlldy5DT05UQUlORVJfTUFQW2dldCh0aGlz
LCAndGFnTmFtZScpXTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHZpZXcsICd0YWdOYW1lJywg
aXRlbVRhZ05hbWUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB2aWV3OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgQSBtYXAgb2YgcGFyZW50IHRhZ3MgdG8gdGhlaXIgZGVmYXVsdCBjaGlsZCB0YWdz
LiBZb3UgY2FuIGFkZAotICAgICAgICAgICAgICBhZGRpdGlvbmFsIHBhcmVudCB0YWdzIGlmIHlv
dSB3YW50IGNvbGxlY3Rpb24gdmlld3MgdGhhdCB1c2UKLSAgICAgICAgICAgICAgYSBwYXJ0aWN1
bGFyIHBhcmVudCB0YWcgdG8gZGVmYXVsdCB0byBhIGNoaWxkIHRhZy4KLQotICAgICAgICAgICAg
ICBAcHJvcGVydHkgQ09OVEFJTkVSX01BUAotICAgICAgICAgICAgICBAdHlwZSBIYXNoCi0gICAg
ICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZpbmFsCi0gICAgICAgICAgICAqLwot
ICAgICAgICBDb2xsZWN0aW9uVmlldy5DT05UQUlORVJfTUFQID0gewotICAgICAgICAgICAgdWw6
ICdsaScsCi0gICAgICAgICAgICBvbDogJ2xpJywKLSAgICAgICAgICAgIHRhYmxlOiAndHInLAot
ICAgICAgICAgICAgdGhlYWQ6ICd0cicsCi0gICAgICAgICAgICB0Ym9keTogJ3RyJywKLSAgICAg
ICAgICAgIHRmb290OiAndHInLAotICAgICAgICAgICAgdHI6ICd0ZCcsCi0gICAgICAgICAgICBz
ZWxlY3Q6ICdvcHRpb24nCi0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1
bHQiXSA9IENvbGxlY3Rpb25WaWV3OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mv
dmlld3MvY29tcG9uZW50IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUiLCAiZW1iZXItdmlld3Mv
bWl4aW5zL2NvbXBvbmVudF90ZW1wbGF0ZV9kZXByZWNhdGlvbiIsICJlbWJlci1ydW50aW1lL21p
eGlucy90YXJnZXRfYWN0aW9uX3N1cHBvcnQiLCAiZW1iZXItdmlld3Mvdmlld3MvdmlldyIsICJl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0IiwgImVt
YmVyLW1ldGFsL2lzX25vbmUiLCAiZW1iZXItbWV0YWwvY29tcHV0ZWQiLCAiZXhwb3J0cyJdLAot
ICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVu
Y3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18s
IF9fZGVwZW5kZW5jeTdfXywgX19kZXBlbmRlbmN5OF9fLCBfX2V4cG9ydHNfXykgewotICAgICAg
ICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJlciA9IF9fZGVwZW5kZW5jeTFfX1siZGVm
YXVsdCJdOwotICAgICAgICAvLyBFbWJlci5hc3NlcnQsIEVtYmVyLkhhbmRsZWJhcnMKLQotICAg
ICAgICB2YXIgQ29tcG9uZW50VGVtcGxhdGVEZXByZWNhdGlvbiA9IF9fZGVwZW5kZW5jeTJfX1si
ZGVmYXVsdCJdOwotICAgICAgICB2YXIgVGFyZ2V0QWN0aW9uU3VwcG9ydCA9IF9fZGVwZW5kZW5j
eTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVmlldyA9IF9fZGVwZW5kZW5jeTRfX1siZGVm
YXVsdCJdOwotCi0gICAgICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3k1X18uZ2V0OwotICAgICAg
ICB2YXIgc2V0ID0gX19kZXBlbmRlbmN5Nl9fLnNldDsKLSAgICAgICAgdmFyIGlzTm9uZSA9IF9f
ZGVwZW5kZW5jeTdfXy5pc05vbmU7Ci0KLSAgICAgICAgdmFyIGNvbXB1dGVkID0gX19kZXBlbmRl
bmN5OF9fLmNvbXB1dGVkOwotCi0gICAgICAgIHZhciBhX3NsaWNlID0gQXJyYXkucHJvdG90eXBl
LnNsaWNlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAg
ICAgICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAgICAgICAgICAgKi8KLQotICAgICAgICAv
KioKLSAgICAgICAgICAgICAgQW4gYEVtYmVyLkNvbXBvbmVudGAgaXMgYSB2aWV3IHRoYXQgaXMg
Y29tcGxldGVseQotICAgICAgICAgICAgICBpc29sYXRlZC4gUHJvcGVydHkgYWNjZXNzIGluIGl0
cyB0ZW1wbGF0ZXMgZ28KLSAgICAgICAgICAgICAgdG8gdGhlIHZpZXcgb2JqZWN0IGFuZCBhY3Rp
b25zIGFyZSB0YXJnZXRlZCBhdAotICAgICAgICAgICAgICB0aGUgdmlldyBvYmplY3QuIFRoZXJl
IGlzIG5vIGFjY2VzcyB0byB0aGUKLSAgICAgICAgICAgICAgc3Vycm91bmRpbmcgY29udGV4dCBv
ciBvdXRlciBjb250cm9sbGVyOyBhbGwKLSAgICAgICAgICAgICAgY29udGV4dHVhbCBpbmZvcm1h
dGlvbiBtdXN0IGJlIHBhc3NlZCBpbi4KLQotICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkg
dG8gY3JlYXRlIGFuIGBFbWJlci5Db21wb25lbnRgIGlzIHZpYQotICAgICAgICAgICAgICBhIHRl
bXBsYXRlLiBJZiB5b3UgbmFtZSBhIHRlbXBsYXRlCi0gICAgICAgICAgICAgIGBjb21wb25lbnRz
L215LWZvb2AsIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlCi0gICAgICAgICAgICAgIGB7e215LWZv
b319YCBpbiBvdGhlciB0ZW1wbGF0ZXMsIHdoaWNoIHdpbGwgbWFrZQotICAgICAgICAgICAgICBh
biBpbnN0YW5jZSBvZiB0aGUgaXNvbGF0ZWQgY29tcG9uZW50LgotCi0gICAgICAgICAgICAgIGBg
YGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAge3thcHAtcHJvZmlsZSBwZXJzb249Y3VycmVudFVz
ZXJ9fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0g
ICAgICAgICAgICAgIDwhLS0gYXBwLXByb2ZpbGUgdGVtcGxhdGUgLS0+Ci0gICAgICAgICAgICAg
IDxoMT57e3BlcnNvbi50aXRsZX19PC9oMT4KLSAgICAgICAgICAgICAgPGltZyB7e2JpbmQtYXR0
ciBzcmM9cGVyc29uLmF2YXRhcn19PgotICAgICAgICAgICAgICA8cCBjbGFzcz0nc2lnbmF0dXJl
Jz57e3BlcnNvbi5zaWduYXR1cmV9fTwvcD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgWW91IGNhbiB1c2UgYHlpZWxkYCBpbnNpZGUgYSB0ZW1wbGF0ZSB0bwotICAgICAgICAg
ICAgICBpbmNsdWRlIHRoZSAqKmNvbnRlbnRzKiogb2YgYW55IGJsb2NrIGF0dGFjaGVkIHRvCi0g
ICAgICAgICAgICAgIHRoZSBjb21wb25lbnQuIFRoZSBibG9jayB3aWxsIGJlIGV4ZWN1dGVkIGlu
IHRoZQotICAgICAgICAgICAgICBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9y
IG91dGVyIGNvbnRyb2xsZXI6Ci0KLSAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAg
ICAgICAgICB7eyNhcHAtcHJvZmlsZSBwZXJzb249Y3VycmVudFVzZXJ9fQotICAgICAgICAgICAg
ICAgIDxwPkFkbWluIG1vZGU8L3A+Ci0gICAgICAgICAgICAgICAge3shIEV4ZWN1dGVkIGluIHRo
ZSBjb250cm9sbGVyJ3MgY29udGV4dC4gfX0KLSAgICAgICAgICAgICAge3svYXBwLXByb2ZpbGV9
fQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBgYGBoYW5kbGViYXJzCi0gICAg
ICAgICAgICAgIDwhLS0gYXBwLXByb2ZpbGUgdGVtcGxhdGUgLS0+Ci0gICAgICAgICAgICAgIDxo
MT57e3BlcnNvbi50aXRsZX19PC9oMT4KLSAgICAgICAgICAgICAge3shIEV4ZWN1dGVkIGluIHRo
ZSBjb21wb25lbnRzIGNvbnRleHQuIH19Ci0gICAgICAgICAgICAgIHt7eWllbGR9fSB7eyEgYmxv
Y2sgY29udGVudHMgfX0KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgeW91
IHdhbnQgdG8gY3VzdG9taXplIHRoZSBjb21wb25lbnQsIGluIG9yZGVyIHRvCi0gICAgICAgICAg
ICAgIGhhbmRsZSBldmVudHMgb3IgYWN0aW9ucywgeW91IGltcGxlbWVudCBhIHN1YmNsYXNzCi0g
ICAgICAgICAgICAgIG9mIGBFbWJlci5Db21wb25lbnRgIG5hbWVkIGFmdGVyIHRoZSBuYW1lIG9m
IHRoZQotICAgICAgICAgICAgICBjb21wb25lbnQuIE5vdGUgdGhhdCBgQ29tcG9uZW50YCBuZWVk
cyB0byBiZSBhcHBlbmRlZCB0byB0aGUgbmFtZSBvZgotICAgICAgICAgICAgICB5b3VyIHN1YmNs
YXNzIGxpa2UgYEFwcFByb2ZpbGVDb21wb25lbnRgLgotCi0gICAgICAgICAgICAgIEZvciBleGFt
cGxlLCB5b3UgY291bGQgaW1wbGVtZW50IHRoZSBhY3Rpb24KLSAgICAgICAgICAgICAgYGhlbGxv
YCBmb3IgdGhlIGBhcHAtcHJvZmlsZWAgY29tcG9uZW50OgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgQXBwLkFwcFByb2ZpbGVDb21wb25lbnQgPSBFbWJlci5D
b21wb25lbnQuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAg
ICAgICAgICBoZWxsbzogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLmxvZygiSGVsbG8iLCBuYW1lKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBBbmQgdGhlbiB1c2UgaXQgaW4gdGhlIGNvbXBvbmVudCdzIHRlbXBsYXRlOgotCi0gICAg
ICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgPCEtLSBhcHAtcHJvZmlsZSB0
ZW1wbGF0ZSAtLT4KLQotICAgICAgICAgICAgICA8aDE+e3twZXJzb24udGl0bGV9fTwvaDE+Ci0g
ICAgICAgICAgICAgIHt7eWllbGR9fSA8IS0tIGJsb2NrIGNvbnRlbnRzIC0tPgotCi0gICAgICAg
ICAgICAgIDxidXR0b24ge3thY3Rpb24gJ2hlbGxvJyBwZXJzb24ubmFtZX19PgotICAgICAgICAg
ICAgICAgIFNheSBIZWxsbyB0byB7e3BlcnNvbi5uYW1lfX0KLSAgICAgICAgICAgICAgPC9idXR0
b24+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIENvbXBvbmVudHMgbXVzdCBo
YXZlIGEgYC1gIGluIHRoZWlyIG5hbWUgdG8gYXZvaWQKLSAgICAgICAgICAgICAgY29uZmxpY3Rz
IHdpdGggYnVpbHQtaW4gY29udHJvbHMgdGhhdCB3cmFwIEhUTUwKLSAgICAgICAgICAgICAgZWxl
bWVudHMuIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzYW1lCi0gICAgICAgICAgICAgIHJl
cXVpcmVtZW50IGluIHdlYiBjb21wb25lbnRzLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBDb21w
b25lbnQKLSAgICAgICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0
ZW5kcyBFbWJlci5WaWV3Ci0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgQ29tcG9uZW50ID0g
Vmlldy5leHRlbmQoVGFyZ2V0QWN0aW9uU3VwcG9ydCwgQ29tcG9uZW50VGVtcGxhdGVEZXByZWNh
dGlvbiwgewotICAgICAgICAgICAgaW5zdHJ1bWVudE5hbWU6ICdjb21wb25lbnQnLAotICAgICAg
ICAgICAgaW5zdHJ1bWVudERpc3BsYXk6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9kZWJ1Z0NvbnRhaW5lcktleSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJ3t7JyArIHRoaXMuX2RlYnVnQ29udGFpbmVyS2V5LnNwbGl0KCc6JylbMV0gKyAn
fX0nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICBp
bml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAg
ICAgICAgICAgIHNldCh0aGlzLCAnb3JpZ0NvbnRleHQnLCBnZXQodGhpcywgJ2NvbnRleHQnKSk7
Ci0gICAgICAgICAgICAgICAgc2V0KHRoaXMsICdjb250ZXh0JywgdGhpcyk7Ci0gICAgICAgICAg
ICAgICAgc2V0KHRoaXMsICdjb250cm9sbGVyJywgdGhpcyk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBkZWZhdWx0TGF5b3V0OiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzWyd5aWVsZCddLmNhbGwoY29u
dGV4dCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgIEEgY29tcG9uZW50cyB0ZW1wbGF0ZSBwcm9wZXJ0eSBpcyBzZXQgYnkgcGFz
c2luZyBhIGJsb2NrCi0gICAgICAgICAgICAgICAgICBkdXJpbmcgaXRzIGludm9jYXRpb24uIEl0
IGlzIGV4ZWN1dGVkIHdpdGhpbiB0aGUgcGFyZW50IGNvbnRleHQuCi0KLSAgICAgICAgICAgICAg
ICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAg
ICAgICAgICAgIHt7I215LWNvbXBvbmVudH19Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0
aGluZyB0aGF0IGlzIHJ1biBpbiB0aGUgY29udGV4dAotICAgICAgICAgICAgICAgICAgICAvLyBv
ZiB0aGUgcGFyZW50IGNvbnRleHQKLSAgICAgICAgICAgICAgICAgIHt7L215LWNvbXBvbmVudH19
Ci0gICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyBh
IHRlbXBsYXRlIGRpcmVjdGx5IHRvIGEgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgd2l0aG91dAot
ICAgICAgICAgICAgICAgICAgYWxzbyBzcGVjaWZ5aW5nIHRoZSBsYXlvdXQgcHJvcGVydHkuCi0K
LSAgICAgICAgICAgICAgICAgIEBkZXByZWNhdGVkCi0gICAgICAgICAgICAgICAgICBAcHJvcGVy
dHkgdGVtcGxhdGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0ZW1wbGF0ZTog
Y29tcHV0ZWQoZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1
ZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gZ2V0
KHRoaXMsICd0ZW1wbGF0ZU5hbWUnKSwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMu
dGVtcGxhdGVGb3JOYW1lKHRlbXBsYXRlTmFtZSwgJ3RlbXBsYXRlJyk7Ci0KLSAgICAgICAgICAg
ICAgICBFbWJlci5hc3NlcnQoIllvdSBzcGVjaWZpZWQgdGhlIHRlbXBsYXRlTmFtZSAiICsgdGVt
cGxhdGVOYW1lICsgIiBmb3IgIiArIHRoaXMgKyAiLCBidXQgaXQgZGlkIG5vdCBleGlzdC4iLCAh
dGVtcGxhdGVOYW1lIHx8IHRlbXBsYXRlKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1w
bGF0ZSB8fCBnZXQodGhpcywgJ2RlZmF1bHRUZW1wbGF0ZScpOwotICAgICAgICAgICAgfSkucHJv
cGVydHkoJ3RlbXBsYXRlTmFtZScpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAg
ICAgIFNwZWNpZnlpbmcgYSBjb21wb25lbnRzIGB0ZW1wbGF0ZU5hbWVgIGlzIGRlcHJlY2F0ZWQg
d2l0aG91dCBhbHNvCi0gICAgICAgICAgICAgICAgICBwcm92aWRpbmcgdGhlIGBsYXlvdXRgIG9y
IGBsYXlvdXROYW1lYCBwcm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgICAgICBAZGVwcmVjYXRl
ZAotICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IHRlbXBsYXRlTmFtZQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbnVsbCwKLQotICAgICAgICAgICAg
Ly8gZHVyaW5nIHJlbmRlciwgaXNvbGF0ZSBrZXl3b3JkcwotICAgICAgICAgICAgY2xvbmVLZXl3
b3JkczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmlldzogdGhpcywKLSAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogdGhp
cwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfeWll
bGQ6IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmll
dyA9IG9wdGlvbnMuZGF0YS52aWV3LAotICAgICAgICAgICAgICAgIHBhcmVudFZpZXcgPSB0aGlz
Ll9wYXJlbnRWaWV3LAotICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gZ2V0KHRoaXMsICd0ZW1w
bGF0ZScpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLmFzc2VydCgiQSBDb21wb25lbnQgbXVzdCBoYXZlIGEgcGFyZW50IHZpZXcg
aW4gb3JkZXIgdG8geWllbGQuIiwgcGFyZW50Vmlldyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
dmlldy5hcHBlbmRDaGlsZChWaWV3LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc1ZpcnR1
YWw6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWdOYW1lOiAnJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIF9jb250ZXh0VmlldzogcGFyZW50VmlldywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQ6IG9wdGlvbnMuZGF0YS5pbnNpZGVHcm91cCA/IGdldCh0aGlzLCAnb3JpZ0NvbnRleHQn
KSA6IGdldChwYXJlbnRWaWV3LCAnY29udGV4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlcjogZ2V0KHBhcmVudFZpZXcsICdjb250cm9sbGVyJyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wbGF0ZURhdGE6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXl3b3JkczogcGFyZW50Vmlldy5jbG9uZUtleXdvcmRzKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zaWRlR3JvdXA6IG9wdGlvbnMuZGF0YS5pbnNpZGVHcm91cCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAg
ICAgIElmIHRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IGluc2VydGVkIGludG8gdGhlIERPTSBv
ZiBhIHBhcmVudCB2aWV3LCB0aGlzCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IHdpbGwg
cG9pbnQgdG8gdGhlIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCB2aWV3LgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcm9wZXJ0eSB0YXJnZXRPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgQHR5
cGUgRW1iZXIuQ29udHJvbGxlcgotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGFyZ2V0T2JqZWN0OiBjb21wdXRlZChm
dW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50VmlldyA9IGdldCh0aGlz
LCAnX3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50VmlldyA/IGdl
dChwYXJlbnRWaWV3LCAnY29udHJvbGxlcicpIDogbnVsbDsKLSAgICAgICAgICAgIH0pLnByb3Bl
cnR5KCdfcGFyZW50VmlldycpLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgVHJpZ2dlcnMgYSBuYW1lZCBhY3Rpb24gb24gdGhlIGNvbnRyb2xsZXIgY29udGV4dCB3aGVy
ZSB0aGUgY29tcG9uZW50IGlzIHVzZWQgaWYKLSAgICAgICAgICAgICAgICAgICAgdGhpcyBjb250
cm9sbGVyIGhhcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb25zIG9mIHRoZSBhY3Rpb24uCi0K
LSAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgYSBjb21wb25lbnQgZm9yIHBsYXlpbmcg
b3IgcGF1c2luZyBtdXNpYyBtYXkgdHJhbnNsYXRlIGNsaWNrIGV2ZW50cwotICAgICAgICAgICAg
ICAgICAgICBpbnRvIGFjdGlvbiBub3RpZmljYXRpb25zIG9mICJwbGF5IiBvciAic3RvcCIgZGVw
ZW5kaW5nIG9uIHNvbWUgaW50ZXJuYWwgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgb2YgdGhl
IGNvbXBvbmVudDoKLQotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgICAgICAgQXBwLlBsYXlCdXR0b25Db21wb25lbnQgPSBFbWJlci5Db21wb25lbnQu
ZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldCgnaXNQbGF5aW5nJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCdwbGF5Jyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRB
Y3Rpb24oJ3N0b3AnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgaW5zaWRlIGEgdGVtcGxhdGUgdGhl
c2UgY29tcG9uZW50IGFjdGlvbnMgYXJlIGNvbmZpZ3VyZWQgdG8KLSAgICAgICAgICAgICAgICAg
ICAgdHJpZ2dlciBhY3Rpb25zIGluIHRoZSBvdXRlciBhcHBsaWNhdGlvbiBjb250ZXh0OgotCi0g
ICAgICAgICAgICAgICAgICAgIGBgYGhhbmRsZWJhcnMKLSAgICAgICAgICAgICAgICAgICAge3sh
IGFwcGxpY2F0aW9uLmhicyB9fQotICAgICAgICAgICAgICAgICAgICB7e3BsYXktYnV0dG9uIHBs
YXk9Im11c2ljU3RhcnRlZCIgc3RvcD0ibXVzaWNTdG9wcGVkIn19Ci0gICAgICAgICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGNvbXBvbmVudCByZWNlaXZl
cyBhIGJyb3dzZXIgYGNsaWNrYCBldmVudCBpdCB0cmFuc2xhdGUgdGhpcwotICAgICAgICAgICAg
ICAgICAgICBpbnRlcmFjdGlvbiBpbnRvIGFwcGxpY2F0aW9uLXNwZWNpZmljIHNlbWFudGljcyAo
InBsYXkiIG9yICJzdG9wIikgYW5kCi0gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzIHRoZSBz
cGVjaWZpZWQgYWN0aW9uIG5hbWUgb24gdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSB0ZW1wbGF0ZQot
ICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVzZWQ6Ci0KLQotICAg
ICAgICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIEFwcC5B
cHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAg
ICAgICAgICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgbXVzaWNT
dGFydGVkOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWQg
d2hlbiB0aGUgcGxheSBidXR0b24gaXMgY2xpY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgdGhlIG11c2ljIHN0YXJ0ZWQgcGxheWluZwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG11c2ljU3RvcHBlZDogZnVuY3Rpb24oKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHBsYXkgYnV0dG9u
IGlzIGNsaWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBtdXNpYyBz
dG9wcGVkIHBsYXlpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBg
YGAKLQotICAgICAgICAgICAgICAgICAgICBJZiBubyBhY3Rpb24gbmFtZSBpcyBwYXNzZWQgdG8g
YHNlbmRBY3Rpb25gIGEgZGVmYXVsdCBuYW1lIG9mICJhY3Rpb24iCi0gICAgICAgICAgICAgICAg
ICAgIGlzIGFzc3VtZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICAgICAgICBBcHAuTmV4dEJ1dHRvbkNvbXBvbmVudCA9IEVtYmVyLkNvbXBvbmVu
dC5leHRlbmQoewotICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpewotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICAgICAgICAgICAg
ICB7eyEgYXBwbGljYXRpb24uaGJzIH19Ci0gICAgICAgICAgICAgICAgICAgIHt7bmV4dC1idXR0
b24gYWN0aW9uPSJwbGF5TmV4dFNvbmdJbkFsYnVtIn19Ci0gICAgICAgICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgICAg
ICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwbGF5TmV4dFNvbmdJbkFsYnVtOiBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAuLi4KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIHNlbmRBY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIFthY3Rpb25dIHtTdHJpbmd9IHRoZSBhY3Rpb24gdG8gdHJpZ2dlcgotICAgICAg
ICAgICAgICAgICAgICBAcGFyYW0gW2NvbnRleHRdIHsqfSBhIGNvbnRleHQgdG8gc2VuZCB3aXRo
IHRoZSBhY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZW5kQWN0aW9u
OiBmdW5jdGlvbihhY3Rpb24pIHsKLSAgICAgICAgICAgICAgICB2YXIgYWN0aW9uTmFtZSwKLSAg
ICAgICAgICAgICAgICBjb250ZXh0cyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwotCi0g
ICAgICAgICAgICAgICAgLy8gU2VuZCB0aGUgZGVmYXVsdCBhY3Rpb24KLSAgICAgICAgICAgICAg
ICBpZiAoYWN0aW9uID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9u
TmFtZSA9IGdldCh0aGlzLCAnYWN0aW9uJyk7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFz
c2VydCgiVGhlIGRlZmF1bHQgYWN0aW9uIHdhcyB0cmlnZ2VyZWQgb24gdGhlIGNvbXBvbmVudCAi
ICsgdGhpcy50b1N0cmluZygpICsKLSAgICAgICAgICAgICAgICAgICAgIiwgYnV0IHRoZSBhY3Rp
b24gbmFtZSAoIiArIGFjdGlvbk5hbWUgKyAiKSB3YXMgbm90IGEgc3RyaW5nLiIsCi0gICAgICAg
ICAgICAgICAgICAgIGlzTm9uZShhY3Rpb25OYW1lKSB8fCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0g
J3N0cmluZycpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFjdGlvbk5hbWUgPSBnZXQodGhpcywgYWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgRW1i
ZXIuYXNzZXJ0KCJUaGUgIiArIGFjdGlvbiArICIgYWN0aW9uIHdhcyB0cmlnZ2VyZWQgb24gdGhl
IGNvbXBvbmVudCAiICsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50b1N0cmluZygpICsgIiwg
YnV0IHRoZSBhY3Rpb24gbmFtZSAoIiArIGFjdGlvbk5hbWUgKwotICAgICAgICAgICAgICAgICAg
ICAiKSB3YXMgbm90IGEgc3RyaW5nLiIsCi0gICAgICAgICAgICAgICAgICAgIGlzTm9uZShhY3Rp
b25OYW1lKSB8fCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ3N0cmluZycpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIG5vIGFjdGlvbiBuYW1lIGZvciB0aGF0IGFj
dGlvbiBjb3VsZCBiZSBmb3VuZCwganVzdCBhYm9ydC4KLSAgICAgICAgICAgICAgICBpZiAoYWN0
aW9uTmFtZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJBY3Rpb24oewot
ICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgIGFjdGlvbkNvbnRleHQ6IGNvbnRleHRzCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBD
b21wb25lbnQ7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9jb250YWlu
ZXJfdmlldyIsCi0gICAgWyJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL21lcmdlIiwg
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfYXJyYXkiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0IiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci12aWV3cy92aWV3cy92
aWV3IiwgImVtYmVyLXZpZXdzL3ZpZXdzL3ZpZXdfY29sbGVjdGlvbiIsICJlbWJlci12aWV3cy92
aWV3cy9zdGF0ZXMiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvZW51bWVyYWJs
ZV91dGlscyIsICJlbWJlci1tZXRhbC9jb21wdXRlZCIsICJlbWJlci1tZXRhbC9ydW5fbG9vcCIs
ICJlbWJlci1tZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9yZW5kZXJfYnVm
ZmVyIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9h
cnJheSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1
X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9f
ZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19kZXBl
bmRlbmN5MTJfXywgX19kZXBlbmRlbmN5MTNfXywgX19kZXBlbmRlbmN5MTRfXywgX19kZXBlbmRl
bmN5MTVfXywgX19kZXBlbmRlbmN5MTZfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0LCBFbWJlci5LCi0KLSAgICAgICAgdmFyIG1lcmdlID0g
X19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBNdXRhYmxlQXJyYXkgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5kZW5j
eTRfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k1X18uc2V0OwotCi0gICAg
ICAgIHZhciBWaWV3ID0gX19kZXBlbmRlbmN5Nl9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBW
aWV3Q29sbGVjdGlvbiA9IF9fZGVwZW5kZW5jeTdfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZh
ciBjbG9uZVN0YXRlcyA9IF9fZGVwZW5kZW5jeThfXy5jbG9uZVN0YXRlczsKLSAgICAgICAgdmFy
IEVtYmVyVmlld1N0YXRlcyA9IF9fZGVwZW5kZW5jeThfXy5zdGF0ZXM7Ci0KLSAgICAgICAgdmFy
IEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k5X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIg
Zm9yRWFjaCA9IF9fZGVwZW5kZW5jeTEwX18uZm9yRWFjaDsKLQotICAgICAgICB2YXIgY29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3kxMV9fLmNvbXB1dGVkOwotICAgICAgICB2YXIgcnVuID0gX19kZXBl
bmRlbmN5MTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2Rl
cGVuZGVuY3kxM19fLmRlZmluZVByb3BlcnR5OwotICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0g
X19kZXBlbmRlbmN5MTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfX2Rl
cGVuZGVuY3kxNV9fLm9ic2VydmVyOwotICAgICAgICB2YXIgYmVmb3JlT2JzZXJ2ZXIgPSBfX2Rl
cGVuZGVuY3kxNV9fLmJlZm9yZU9ic2VydmVyOwotICAgICAgICB2YXIgZW1iZXJBID0gX19kZXBl
bmRlbmN5MTZfXy5BOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgot
ICAgICAgICAgICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAgICAgICAgICAgKi8KLQotICAg
ICAgICB2YXIgc3RhdGVzID0gY2xvbmVTdGF0ZXMoRW1iZXJWaWV3U3RhdGVzKTsKLQotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgQSBgQ29udGFpbmVyVmlld2AgaXMgYW4gYEVtYmVyLlZpZXdg
IHN1YmNsYXNzIHRoYXQgaW1wbGVtZW50cyBgRW1iZXIuTXV0YWJsZUFycmF5YAotICAgICAgICAg
ICAgICBhbGxvd2luZyBwcm9ncmFtbWF0aWMgbWFuYWdlbWVudCBvZiBpdHMgY2hpbGQgdmlld3Mu
Ci0KLSAgICAgICAgICAgICAgIyMgU2V0dGluZyBJbml0aWFsIENoaWxkIFZpZXdzCi0KLSAgICAg
ICAgICAgICAgVGhlIGluaXRpYWwgYXJyYXkgb2YgY2hpbGQgdmlld3MgY2FuIGJlIHNldCBpbiBv
bmUgb2YgdHdvIHdheXMuIFlvdSBjYW4KLSAgICAgICAgICAgICAgcHJvdmlkZSBhIGBjaGlsZFZp
ZXdzYCBwcm9wZXJ0eSBhdCBjcmVhdGlvbiB0aW1lIHRoYXQgY29udGFpbnMgaW5zdGFuY2Ugb2YK
LSAgICAgICAgICAgICAgYEVtYmVyLlZpZXdgOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgYUNvbnRhaW5lciA9IEVtYmVyLkNvbnRhaW5lclZpZXcuY3JlYXRl
KHsKLSAgICAgICAgICAgICAgICBjaGlsZFZpZXdzOiBbRW1iZXIuVmlldy5jcmVhdGUoKSwgRW1i
ZXIuVmlldy5jcmVhdGUoKV0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgbGlzdCBvZiBwcm9wZXJ0eSBu
YW1lcyB3aG9zZSB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZgotICAgICAgICAgICAgICBgRW1iZXIu
Vmlld2A6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBhQ29u
dGFpbmVyID0gRW1iZXIuQ29udGFpbmVyVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgIGNo
aWxkVmlld3M6IFsnYVZpZXcnLCAnYlZpZXcnLCAnY1ZpZXcnXSwKLSAgICAgICAgICAgICAgICBh
VmlldzogRW1iZXIuVmlldy5jcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBiVmlldzogRW1iZXIu
Vmlldy5jcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBjVmlldzogRW1iZXIuVmlldy5jcmVhdGUo
KQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
VGhlIHR3byBzdHJhdGVnaWVzIGNhbiBiZSBjb21iaW5lZDoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIGFDb250YWluZXIgPSBFbWJlci5Db250YWluZXJWaWV3
LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgY2hpbGRWaWV3czogWydhVmlldycsIEVtYmVyLlZp
ZXcuY3JlYXRlKCldLAotICAgICAgICAgICAgICAgIGFWaWV3OiBFbWJlci5WaWV3LmNyZWF0ZSgp
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBF
YWNoIGNoaWxkIHZpZXcncyByZW5kZXJpbmcgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250
YWluZXIncyByZW5kZXJlZAotICAgICAgICAgICAgICBIVE1MIGluIHRoZSBzYW1lIG9yZGVyIGFz
IGl0cyBwb3NpdGlvbiBpbiB0aGUgYGNoaWxkVmlld3NgIHByb3BlcnR5LgotCi0gICAgICAgICAg
ICAgICMjIEFkZGluZyBhbmQgUmVtb3ZpbmcgQ2hpbGQgVmlld3MKLQotICAgICAgICAgICAgICBU
aGUgY29udGFpbmVyIHZpZXcgaW1wbGVtZW50cyBgRW1iZXIuTXV0YWJsZUFycmF5YCBhbGxvd2lu
ZyBwcm9ncmFtbWF0aWMgbWFuYWdlbWVudCBvZiBpdHMgY2hpbGQgdmlld3MuCi0KLSAgICAgICAg
ICAgICAgVG8gcmVtb3ZlIGEgdmlldywgcGFzcyB0aGF0IHZpZXcgaW50byBhIGByZW1vdmVPYmpl
Y3RgIGNhbGwgb24gdGhlIGNvbnRhaW5lciB2aWV3LgotCi0gICAgICAgICAgICAgIEdpdmVuIGFu
IGVtcHR5IGA8Ym9keT5gIHRoZSBmb2xsb3dpbmcgY29kZQotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgYUNvbnRhaW5lciA9IEVtYmVyLkNvbnRhaW5lclZpZXcu
Y3JlYXRlKHsKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzOiBbJ3RoZS1jb250YWluZXInXSwK
LSAgICAgICAgICAgICAgICBjaGlsZFZpZXdzOiBbJ2FWaWV3JywgJ2JWaWV3J10sCi0gICAgICAg
ICAgICAgICAgYVZpZXc6IEVtYmVyLlZpZXcuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoIkEiKQotICAgICAgICAgICAgICAgIH0p
LAotICAgICAgICAgICAgICAgIGJWaWV3OiBFbWJlci5WaWV3LmNyZWF0ZSh7Ci0gICAgICAgICAg
ICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJCIikKLSAgICAgICAg
ICAgICAgICB9KQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBhQ29udGFpbmVy
LmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFJl
c3VsdHMgaW4gdGhlIEhUTUwKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAg
IDxkaXYgY2xhc3M9ImVtYmVyLXZpZXcgdGhlLWNvbnRhaW5lciI+Ci0gICAgICAgICAgICAgICAg
PGRpdiBjbGFzcz0iZW1iZXItdmlldyI+QTwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImVtYmVyLXZpZXciPkI8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAg
ICAgIGBgYAotCi0gICAgICAgICAgICAgIFJlbW92aW5nIGEgdmlldwotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgYUNvbnRhaW5lci50b0FycmF5KCk7ICAvLyBb
YUNvbnRhaW5lci5hVmlldywgYUNvbnRhaW5lci5iVmlld10KLSAgICAgICAgICAgICAgYUNvbnRh
aW5lci5yZW1vdmVPYmplY3QoYUNvbnRhaW5lci5nZXQoJ2JWaWV3JykpOwotICAgICAgICAgICAg
ICBhQ29udGFpbmVyLnRvQXJyYXkoKTsgIC8vIFthQ29udGFpbmVyLmFWaWV3XQotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhU
TUwKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVt
YmVyLXZpZXcgdGhlLWNvbnRhaW5lciI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1i
ZXItdmlldyI+QTwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgU2ltaWxhcmx5LCBhZGRpbmcgYSBjaGlsZCB2aWV3IGlzIGFjY29t
cGxpc2hlZCBieSBhZGRpbmcgYEVtYmVyLlZpZXdgIGluc3RhbmNlcyB0byB0aGUKLSAgICAgICAg
ICAgICAgY29udGFpbmVyIHZpZXcuCi0KLSAgICAgICAgICAgICAgR2l2ZW4gYW4gZW1wdHkgYDxi
b2R5PmAgdGhlIGZvbGxvd2luZyBjb2RlCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICBhQ29udGFpbmVyID0gRW1iZXIuQ29udGFpbmVyVmlldy5jcmVhdGUoewot
ICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IFsndGhlLWNvbnRhaW5lciddLAotICAgICAgICAg
ICAgICAgIGNoaWxkVmlld3M6IFsnYVZpZXcnLCAnYlZpZXcnXSwKLSAgICAgICAgICAgICAgICBh
VmlldzogRW1iZXIuVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IEVt
YmVyLkhhbmRsZWJhcnMuY29tcGlsZSgiQSIpCi0gICAgICAgICAgICAgICAgfSksCi0gICAgICAg
ICAgICAgICAgYlZpZXc6IEVtYmVyLlZpZXcuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgIHRl
bXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoIkIiKQotICAgICAgICAgICAgICAgIH0p
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIGFDb250YWluZXIuYXBwZW5kVG8o
J2JvZHknKTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgUmVzdWx0cyBpbiB0
aGUgSFRNTAotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0iZW1iZXItdmlldyB0aGUtY29udGFpbmVyIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJlbWJlci12aWV3Ij5BPC9kaXY+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1iZXIt
dmlldyI+QjwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQWRkaW5nIGEgdmlldwotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgQW5vdGhlclZpZXdDbGFzcyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsK
LSAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJBbm90
aGVyIHZpZXciKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBhQ29udGFpbmVy
LnRvQXJyYXkoKTsgIC8vIFthQ29udGFpbmVyLmFWaWV3LCBhQ29udGFpbmVyLmJWaWV3XQotICAg
ICAgICAgICAgICBhQ29udGFpbmVyLnB1c2hPYmplY3QoQW5vdGhlclZpZXdDbGFzcy5jcmVhdGUo
KSk7Ci0gICAgICAgICAgICAgIGFDb250YWluZXIudG9BcnJheSgpOyAvLyBbYUNvbnRhaW5lci5h
VmlldywgYUNvbnRhaW5lci5iVmlldywgPEFub3RoZXJWaWV3Q2xhc3MgaW5zdGFuY2U+XQotICAg
ICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93
aW5nIEhUTUwKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgY2xh
c3M9ImVtYmVyLXZpZXcgdGhlLWNvbnRhaW5lciI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0iZW1iZXItdmlldyI+QTwvZGl2PgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtYmVy
LXZpZXciPkI8L2Rpdj4KLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbWJlci12aWV3Ij5B
bm90aGVyIHZpZXc8L2Rpdj4KLSAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgICMjIFRlbXBsYXRlcyBhbmQgTGF5b3V0Ci0KLSAgICAgICAgICAg
ICAgQSBgdGVtcGxhdGVgLCBgdGVtcGxhdGVOYW1lYCwgYGRlZmF1bHRUZW1wbGF0ZWAsIGBsYXlv
dXRgLCBgbGF5b3V0TmFtZWAgb3IKLSAgICAgICAgICAgICAgYGRlZmF1bHRMYXlvdXRgIHByb3Bl
cnR5IG9uIGEgY29udGFpbmVyIHZpZXcgd2lsbCBub3QgcmVzdWx0IGluIHRoZSB0ZW1wbGF0ZQot
ICAgICAgICAgICAgICBvciBsYXlvdXQgYmVpbmcgcmVuZGVyZWQuIFRoZSBIVE1MIGNvbnRlbnRz
IG9mIGEgYEVtYmVyLkNvbnRhaW5lclZpZXdgJ3MgRE9NCi0gICAgICAgICAgICAgIHJlcHJlc2Vu
dGF0aW9uIHdpbGwgb25seSBiZSB0aGUgcmVuZGVyZWQgSFRNTCBvZiBpdHMgY2hpbGQgdmlld3Mu
Ci0KLSAgICAgICAgICAgICAgQGNsYXNzIENvbnRhaW5lclZpZXcKLSAgICAgICAgICAgICAgQG5h
bWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5WaWV3Ci0gICAgICAg
ICAgICAqLwotICAgICAgICB2YXIgQ29udGFpbmVyVmlldyA9IFZpZXcuZXh0ZW5kKE11dGFibGVB
cnJheSwgewotICAgICAgICAgICAgX3N0YXRlczogc3RhdGVzLAotCi0gICAgICAgICAgICBpbml0
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zdXBlcigpOwotCi0gICAgICAg
ICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSBnZXQodGhpcywgJ2NoaWxkVmlld3MnKTsKLQotICAg
ICAgICAgICAgICAgIC8vIHJlZGVmaW5lIHZpZXcncyBjaGlsZFZpZXdzIHByb3BlcnR5IHRoYXQg
d2FzIG9ibGl0ZXJhdGVkCi0gICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2No
aWxkVmlld3MnLCBWaWV3LmNoaWxkVmlld3NQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICB2
YXIgX2NoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzOwotCi0gICAgICAgICAgICAgICAgZm9y
RWFjaChjaGlsZFZpZXdzLCBmdW5jdGlvbih2aWV3TmFtZSwgaWR4KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciB2aWV3OwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgnc3RyaW5nJyA9PT0g
dHlwZW9mIHZpZXdOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3ID0gZ2V0KHRo
aXMsIHZpZXdOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSB0aGlzLmNyZWF0
ZUNoaWxkVmlldyh2aWV3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0aGlzLCB2aWV3
TmFtZSwgdmlldyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2aWV3ID0gdGhpcy5jcmVhdGVDaGlsZFZpZXcodmlld05hbWUpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgX2NoaWxkVmlld3NbaWR4XSA9
IHZpZXc7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
Y3VycmVudFZpZXcgPSBnZXQodGhpcywgJ2N1cnJlbnRWaWV3Jyk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghX2NoaWxkVmlld3Mu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfY2hpbGRWaWV3cyA9IHRoaXMuX2No
aWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzLnNsaWNlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgX2NoaWxkVmlld3MucHVzaCh0aGlzLmNyZWF0ZUNoaWxk
VmlldyhjdXJyZW50VmlldykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHJlcGxhY2U6IGZ1bmN0aW9uKGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZFZp
ZXdzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFkZGVkQ291bnQgPSBhZGRlZFZpZXdzID8gZ2V0
KGFkZGVkVmlld3MsICdsZW5ndGgnKSA6IDA7Ci0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOwotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiWW91IGNhbid0IGFkZCBhIGNoaWxk
IHRvIGEgY29udGFpbmVyIC0gdGhlIGNoaWxkIGlzIGFscmVhZHkgYSBjaGlsZCBvZiBhbm90aGVy
IHZpZXciLCBlbWJlckEoYWRkZWRWaWV3cykuZXZlcnkoZnVuY3Rpb24oaXRlbSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIWdldChpdGVtLCAnX3BhcmVudFZpZXcnKSB8fCBnZXQoaXRl
bSwgJ19wYXJlbnRWaWV3JykgPT09IHNlbGY7Ci0gICAgICAgICAgICAgICAgfSkpOwotCi0gICAg
ICAgICAgICAgICAgdGhpcy5hcnJheUNvbnRlbnRXaWxsQ2hhbmdlKGlkeCwgcmVtb3ZlZENvdW50
LCBhZGRlZENvdW50KTsKLSAgICAgICAgICAgICAgICB0aGlzLmNoaWxkVmlld3NXaWxsQ2hhbmdl
KHRoaXMuX2NoaWxkVmlld3MsIGlkeCwgcmVtb3ZlZENvdW50KTsKLQotICAgICAgICAgICAgICAg
IGlmIChhZGRlZENvdW50ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxk
Vmlld3Muc3BsaWNlKGlkeCwgcmVtb3ZlZENvdW50KSA7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaWR4LCByZW1vdmVkQ291bnRdLmNv
bmNhdChhZGRlZFZpZXdzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkVmlld3MubGVu
Z3RoICYmICF0aGlzLl9jaGlsZFZpZXdzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fY2hpbGRWaWV3cyA9IHRoaXMuX2NoaWxkVmlld3Muc2xpY2UoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGlsZFZpZXdzLnNwbGlj
ZS5hcHBseSh0aGlzLl9jaGlsZFZpZXdzLCBhcmdzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLmFycmF5Q29udGVudERpZENoYW5nZShpZHgsIHJlbW92ZWRDb3Vu
dCwgYWRkZWRDb3VudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZFZpZXdzRGlkQ2hhbmdl
KHRoaXMuX2NoaWxkVmlld3MsIGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZENvdW50KTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
b2JqZWN0QXQ6IGZ1bmN0aW9uKGlkeCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
aGlsZFZpZXdzW2lkeF07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBsZW5ndGg6IGNv
bXB1dGVkKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRW
aWV3cy5sZW5ndGg7Ci0gICAgICAgICAgICB9KVsidm9sYXRpbGUiXSgpLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3RzIGVhY2ggY2hpbGQgdmlldyB0byBy
ZW5kZXIgdG8gdGhlIHBhc3NlZCByZW5kZXIgYnVmZmVyLgotCi0gICAgICAgICAgICAgICAgICAg
IEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVuZGVyCi0gICAgICAgICAg
ICAgICAgICAgIEBwYXJhbSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIgdGhlIGJ1ZmZlciB0
byByZW5kZXIgdG8KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW5kZXI6IGZ1
bmN0aW9uKGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaENoaWxkVmlldyhm
dW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcucmVuZGVyVG9CdWZmZXIo
YnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIGluc3RydW1lbnROYW1lOiAnY29udGFpbmVyJywKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFdoZW4gYSBjaGlsZCB2aWV3IGlzIHJlbW92ZWQsIGRlc3Ryb3kgaXRz
IGVsZW1lbnQgc28gdGhhdAotICAgICAgICAgICAgICAgICAgICBpdCBpcyByZW1vdmVkIGZyb20g
dGhlIERPTS4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgYXJyYXkgb2JzZXJ2ZXIgdGhhdCB0
cmlnZ2VycyB0aGlzIGFjdGlvbiBpcyBzZXQgdXAgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAg
IGByZW5kZXJUb0J1ZmZlcmAgbWV0aG9kLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRl
Ci0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY2hpbGRWaWV3c1dpbGxDaGFuZ2UKLSAgICAg
ICAgICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5BcnJheX0gdmlld3MgdGhlIGNoaWxkIHZpZXdz
IGFycmF5IGJlZm9yZSBtdXRhdGlvbgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge051bWJl
cn0gc3RhcnQgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBtdXRhdGlvbgotICAgICAgICAgICAg
ICAgICAgICBAcGFyYW0ge051bWJlcn0gcmVtb3ZlZCB0aGUgbnVtYmVyIG9mIGNoaWxkIHZpZXdz
IHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgY2hpbGRWaWV3c1dp
bGxDaGFuZ2U6IGZ1bmN0aW9uKHZpZXdzLCBzdGFydCwgcmVtb3ZlZCkgewotICAgICAgICAgICAg
ICAgIHRoaXMucHJvcGVydHlXaWxsQ2hhbmdlKCdjaGlsZFZpZXdzJyk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocmVtb3ZlZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoYW5nZWRW
aWV3cyA9IHZpZXdzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHJlbW92ZWQpOwotICAgICAgICAgICAg
ICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIHByZVJlbmRlciBiZWZvcmUgY2xlYXJpbmcgcGFyZW50
VmlldwotICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5jaGlsZFZpZXdzV2ls
bENoYW5nZSh0aGlzLCB2aWV3cywgc3RhcnQsIHJlbW92ZWQpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmluaXRpYWxpemVWaWV3cyhjaGFuZ2VkVmlld3MsIG51bGwsIG51bGwpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlbW92ZUNoaWxkOiBm
dW5jdGlvbihjaGlsZCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlT2JqZWN0KGNoaWxk
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBXaGVuIGEgY2hpbGQgdmlldyBpcyBhZGRl
ZCwgbWFrZSBzdXJlIHRoZSBET00gZ2V0cyB1cGRhdGVkIGFwcHJvcHJpYXRlbHkuCi0KLSAgICAg
ICAgICAgICAgICAgICAgSWYgdGhlIHZpZXcgaGFzIGFscmVhZHkgcmVuZGVyZWQgYW4gZWxlbWVu
dCwgd2UgdGVsbCB0aGUgY2hpbGQgdmlldyB0bwotICAgICAgICAgICAgICAgICAgICBjcmVhdGUg
YW4gZWxlbWVudCBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIERPTS4gSWYgdGhlIGVuY2xvc2luZyBj
b250YWluZXIKLSAgICAgICAgICAgICAgICAgICAgdmlldyBoYXMgYWxyZWFkeSB3cml0dGVuIHRv
IGEgYnVmZmVyLCBidXQgbm90IHlldCBjb252ZXJ0ZWQgdGhhdCBidWZmZXIKLSAgICAgICAgICAg
ICAgICAgICAgaW50byBhbiBlbGVtZW50LCB3ZSBpbnNlcnQgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiB0aGUgY2hpbGQgaW50byB0aGUKLSAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlh
dGUgcGxhY2UgaW4gdGhlIGJ1ZmZlci4KLQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQot
ICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIGNoaWxkVmlld3NEaWRDaGFuZ2UKLSAgICAgICAg
ICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5BcnJheX0gdmlld3MgdGhlIGFycmF5IG9mIGNoaWxk
IHZpZXdzIGFmdGVyIHRoZSBtdXRhdGlvbiBoYXMgb2NjdXJyZWQKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgbXV0YXRp
b24KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZWQgdGhlIG51bWJl
ciBvZiBjaGlsZCB2aWV3cyByZW1vdmVkCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7TnVt
YmVyfSBhZGRlZCB0aGUgbnVtYmVyIG9mIGNoaWxkIHZpZXdzIGFkZGVkCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgY2hpbGRWaWV3c0RpZENoYW5nZTogZnVuY3Rpb24odmlld3Ms
IHN0YXJ0LCByZW1vdmVkLCBhZGRlZCkgewotICAgICAgICAgICAgICAgIGlmIChhZGRlZCA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoYW5nZWRWaWV3cyA9IHZpZXdzLnNsaWNlKHN0
YXJ0LCBzdGFydCArIGFkZGVkKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXpl
Vmlld3MoY2hhbmdlZFZpZXdzLCB0aGlzLCBnZXQodGhpcywgJ3RlbXBsYXRlRGF0YScpKTsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuY2hpbGRWaWV3c0RpZENoYW5nZSh0
aGlzLCB2aWV3cywgc3RhcnQsIGFkZGVkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdGhpcy5wcm9wZXJ0eURpZENoYW5nZSgnY2hpbGRWaWV3cycpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdzOiBmdW5jdGlvbih2aWV3cywgcGFyZW50
VmlldywgdGVtcGxhdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgZm9yRWFjaCh2aWV3cywgZnVu
Y3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICBzZXQodmlldywgJ19wYXJlbnRWaWV3
JywgcGFyZW50Vmlldyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3LmNvbnRhaW5l
ciAmJiBwYXJlbnRWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmlldywgJ2Nv
bnRhaW5lcicsIHBhcmVudFZpZXcuY29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0KHZpZXcsICd0ZW1wbGF0ZURhdGEnKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHZpZXcsICd0ZW1wbGF0ZURhdGEnLCB0ZW1wbGF0
ZURhdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBjdXJyZW50VmlldzogbnVsbCwKLQotICAgICAgICAg
ICAgX2N1cnJlbnRWaWV3V2lsbENoYW5nZTogYmVmb3JlT2JzZXJ2ZXIoJ2N1cnJlbnRWaWV3Jywg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWaWV3ID0gZ2V0KHRoaXMs
ICdjdXJyZW50VmlldycpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmlldykgewotICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Vmlldy5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9jdXJyZW50Vmlld0RpZENoYW5nZTog
b2JzZXJ2ZXIoJ2N1cnJlbnRWaWV3JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGN1cnJlbnRWaWV3ID0gZ2V0KHRoaXMsICdjdXJyZW50VmlldycpOwotICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50VmlldykgewotICAgICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllv
dSB0cmllZCB0byBzZXQgYSBjdXJyZW50IHZpZXcgdGhhdCBhbHJlYWR5IGhhcyBhIHBhcmVudC4g
TWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIG11bHRpcGxlIG91dGxldHMgaW4gdGhlIHNhbWUgdmll
dy4iLCAhZ2V0KGN1cnJlbnRWaWV3LCAnX3BhcmVudFZpZXcnKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMucHVzaE9iamVjdChjdXJyZW50Vmlldyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIF9lbnN1cmVDaGlsZHJlbkFyZUluRE9NOiBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZW5zdXJlQ2hpbGRy
ZW5BcmVJbkRPTSh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
bWVyZ2Uoc3RhdGVzLl9kZWZhdWx0LCB7Ci0gICAgICAgICAgICBjaGlsZFZpZXdzV2lsbENoYW5n
ZTogRW1iZXIuSywKLSAgICAgICAgICAgIGNoaWxkVmlld3NEaWRDaGFuZ2U6IEVtYmVyLkssCi0g
ICAgICAgICAgICBlbnN1cmVDaGlsZHJlbkFyZUluRE9NOiBFbWJlci5LCi0gICAgICAgIH0pOwot
Ci0gICAgICAgIG1lcmdlKHN0YXRlcy5pbkJ1ZmZlciwgewotICAgICAgICAgICAgY2hpbGRWaWV3
c0RpZENoYW5nZTogZnVuY3Rpb24ocGFyZW50Vmlldywgdmlld3MsIHN0YXJ0LCBhZGRlZCkgewot
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCdZb3UgY2Fubm90IG1vZGlmeSBj
aGlsZCB2aWV3cyB3aGlsZSBpbiB0aGUgaW5CdWZmZXIgc3RhdGUnKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgbWVyZ2Uoc3RhdGVzLmhhc0VsZW1lbnQsIHsKLSAgICAg
ICAgICAgIGNoaWxkVmlld3NXaWxsQ2hhbmdlOiBmdW5jdGlvbih2aWV3LCB2aWV3cywgc3RhcnQs
IHJlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdGFy
dCArIHJlbW92ZWQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2aWV3c1tpXS5yZW1vdmUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjaGls
ZFZpZXdzRGlkQ2hhbmdlOiBmdW5jdGlvbih2aWV3LCB2aWV3cywgc3RhcnQsIGFkZGVkKSB7Ci0g
ICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlT25jZSgncmVuZGVyJywgdmlldywgJ19lbnN1cmVD
aGlsZHJlbkFyZUluRE9NJyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBlbnN1cmVD
aGlsZHJlbkFyZUluRE9NOiBmdW5jdGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNo
aWxkVmlld3MgPSB2aWV3Ll9jaGlsZFZpZXdzLCBpLCBsZW4sIGNoaWxkVmlldywgcHJldmlvdXMs
IGJ1ZmZlciwgdmlld0NvbGxlY3Rpb24gPSBuZXcgVmlld0NvbGxlY3Rpb24oKTsKLQotICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGNoaWxkVmlld3MubGVuZ3RoOyBpIDwgbGVuOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRWaWV3ID0gY2hpbGRWaWV3c1tpXTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyID0gcmVuZGVyQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIuX2hhc0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZFZpZXcucmVuZGVyVG9CdWZmZXJJZk5lZWRlZChidWZmZXIp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi5wdXNoKGNoaWxkVmll
dyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmlld0NvbGxlY3Rpb24ubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRWaWV3Q29sbGVjdGlvbih2aWV3LCB2
aWV3Q29sbGVjdGlvbiwgcHJldmlvdXMsIGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBjaGls
ZFZpZXc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi5jbGVhcigpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXMgPSBjaGlsZFZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodmlld0NvbGxlY3Rpb24ubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGluc2VydFZpZXdDb2xsZWN0aW9uKHZpZXcsIHZpZXdDb2xsZWN0aW9u
LCBwcmV2aW91cywgYnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGZ1bmN0aW9uIGluc2VydFZpZXdDb2xsZWN0aW9uKHZpZXcs
IHZpZXdDb2xsZWN0aW9uLCBwcmV2aW91cywgYnVmZmVyKSB7Ci0gICAgICAgICAgICB2aWV3Q29s
bGVjdGlvbi50cmlnZ2VyUmVjdXJzaXZlbHkoJ3dpbGxJbnNlcnRFbGVtZW50Jyk7Ci0KLSAgICAg
ICAgICAgIGlmIChwcmV2aW91cykgewotICAgICAgICAgICAgICAgIHByZXZpb3VzLmRvbU1hbmFn
ZXIuYWZ0ZXIocHJldmlvdXMsIGJ1ZmZlci5zdHJpbmcoKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHZpZXcuZG9tTWFuYWdlci5wcmVwZW5kKHZpZXcsIGJ1ZmZlci5z
dHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZpZXdDb2xsZWN0aW9uLmZv
ckVhY2goZnVuY3Rpb24odikgewotICAgICAgICAgICAgICAgIHYuX3RyYW5zaXRpb25UbygnaW5E
T00nKTsKLSAgICAgICAgICAgICAgICB2LnByb3BlcnR5RGlkQ2hhbmdlKCdlbGVtZW50Jyk7Ci0g
ICAgICAgICAgICAgICAgdi50cmlnZ2VyUmVjdXJzaXZlbHkoJ2RpZEluc2VydEVsZW1lbnQnKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gQ29udGFpbmVyVmlldzsKLSAgICB9KTsKLSAgICBkZWZpbmUoImVtYmVyLXZpZXdz
L3ZpZXdzL2NvcmVfdmlldyIsCi0gICAgWyJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwgImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQi
LCAiZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLCAiZW1iZXItbWV0YWwvcHJv
cGVydGllcyIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXItbWV0YWwvcHJvcGVy
dHlfc2V0IiwgImVtYmVyLW1ldGFsL2NvbXB1dGVkIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVt
YmVyLW1ldGFsL2luc3RydW1lbnRhdGlvbiIsICJlbWJlci12aWV3cy9zeXN0ZW0vcmVuZGVyX2J1
ZmZlciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2RlcGVuZGVuY3k1
X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19fLCBfX2RlcGVuZGVuY3k4X18sIF9f
ZGVwZW5kZW5jeTlfXywgX19kZXBlbmRlbmN5MTBfXywgX19kZXBlbmRlbmN5MTFfXywgX19leHBv
cnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgY2xvbmVTdGF0ZXMg
PSBfX2RlcGVuZGVuY3kxX18uY2xvbmVTdGF0ZXM7Ci0gICAgICAgIHZhciBzdGF0ZXMgPSBfX2Rl
cGVuZGVuY3kxX18uc3RhdGVzOwotICAgICAgICB2YXIgRW1iZXJPYmplY3QgPSBfX2RlcGVuZGVu
Y3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEV2ZW50ZWQgPSBfX2RlcGVuZGVuY3kzX19b
ImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEFjdGlvbkhhbmRsZXIgPSBfX2RlcGVuZGVuY3k0X19b
ImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX2RlcGVuZGVuY3k1
X18uZGVmaW5lUHJvcGVydHk7Ci0gICAgICAgIHZhciBkZXByZWNhdGVQcm9wZXJ0eSA9IF9fZGVw
ZW5kZW5jeTVfXy5kZXByZWNhdGVQcm9wZXJ0eTsKLSAgICAgICAgdmFyIGdldCA9IF9fZGVwZW5k
ZW5jeTZfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVuY3k3X18uc2V0OwotICAg
ICAgICB2YXIgY29tcHV0ZWQgPSBfX2RlcGVuZGVuY3k4X18uY29tcHV0ZWQ7Ci0KLSAgICAgICAg
dmFyIHR5cGVPZiA9IF9fZGVwZW5kZW5jeTlfXy50eXBlT2Y7Ci0KLSAgICAgICAgdmFyIGluc3Ry
dW1lbnQgPSBfX2RlcGVuZGVuY3kxMF9fLmluc3RydW1lbnQ7Ci0KLQotICAgICAgICB2YXIgcmVu
ZGVyQnVmZmVyID0gX19kZXBlbmRlbmN5MTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBgRW1iZXIuQ29yZVZpZXdgIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQg
ZXhpc3RzIHRvIGdpdmUgdmlldy1saWtlIGJlaGF2aW9yCi0gICAgICAgICAgICAgIHRvIGJvdGgg
RW1iZXIncyBtYWluIHZpZXcgY2xhc3MgYEVtYmVyLlZpZXdgIGFuZCBvdGhlciBjbGFzc2VzIGxp
a2UKLSAgICAgICAgICAgICAgYEVtYmVyLl9TaW1wbGVNZXRhbW9ycGhWaWV3YCB0aGF0IGRvbid0
IG5lZWQgdGhlIGZ1bGx5IGZ1bmN0aW9uYWx0aXkgb2YKLSAgICAgICAgICAgICAgYEVtYmVyLlZp
ZXdgLgotCi0gICAgICAgICAgICAgIFVubGVzcyB5b3UgaGF2ZSBzcGVjaWZpYyBuZWVkcyBmb3Ig
YENvcmVWaWV3YCwgeW91IHdpbGwgdXNlIGBFbWJlci5WaWV3YAotICAgICAgICAgICAgICBpbiB5
b3VyIGFwcGxpY2F0aW9ucy4KLQotICAgICAgICAgICAgICBAY2xhc3MgQ29yZVZpZXcKLSAgICAg
ICAgICAgICAgQG5hbWVzcGFjZSBFbWJlcgotICAgICAgICAgICAgICBAZXh0ZW5kcyBFbWJlci5P
YmplY3QKLSAgICAgICAgICAgICAgQHVzZXMgRW1iZXIuRXZlbnRlZAotICAgICAgICAgICAgICBA
dXNlcyBFbWJlci5BY3Rpb25IYW5kbGVyCi0gICAgICAgICAgICAqLwotICAgICAgICB2YXIgQ29y
ZVZpZXcgPSBFbWJlck9iamVjdC5leHRlbmQoRXZlbnRlZCwgQWN0aW9uSGFuZGxlciwgewotICAg
ICAgICAgICAgaXNWaWV3OiB0cnVlLAotCi0gICAgICAgICAgICBfc3RhdGVzOiBjbG9uZVN0YXRl
cyhzdGF0ZXMpLAotCi0gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25Ubygn
cHJlUmVuZGVyJyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5faXNWaXNpYmxlID0gZ2V0KHRoaXMs
ICdpc1Zpc2libGUnKTsKLQotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVByb3BlcnR5KHRoaXMs
ICdzdGF0ZXMnLCAnX3N0YXRlcycpOwotICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVByb3BlcnR5
KHRoaXMsICdzdGF0ZScsICdfc3RhdGUnKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgdmlldyBpcyBjdXJyZW50bHkgaW5zZXJ0
ZWQgaW50byB0aGUgRE9NIG9mIGEgcGFyZW50IHZpZXcsIHRoaXMKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHkgd2lsbCBwb2ludCB0byB0aGUgcGFyZW50IG9mIHRoZSB2aWV3LgotCi0gICAg
ICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBwYXJlbnRWaWV3Ci0gICAgICAgICAgICAgICAgICAg
IEB0eXBlIEVtYmVyLlZpZXcKLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgbnVsbAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBhcmVudFZpZXc6IGNvbXB1dGVkKCdfcGFy
ZW50VmlldycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlz
Ll9wYXJlbnRWaWV3OwotCi0gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaXNW
aXJ0dWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQocGFyZW50LCAncGFyZW50
VmlldycpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJlbnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAg
ICAgICAgIF9zdGF0ZTogbnVsbCwKLQotICAgICAgICAgICAgX3BhcmVudFZpZXc6IG51bGwsCi0K
LSAgICAgICAgICAgIC8vIHJldHVybiB0aGUgY3VycmVudCB2aWV3LCBub3QgaW5jbHVkaW5nIHZp
cnR1YWwgdmlld3MKLSAgICAgICAgICAgIGNvbmNyZXRlVmlldzogY29tcHV0ZWQoJ3BhcmVudFZp
ZXcnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXJ0dWFsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ3BhcmVudFZpZXcuY29u
Y3JldGVWaWV3Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSksCi0KLSAgICAg
ICAgICAgIGluc3RydW1lbnROYW1lOiAnY29yZV92aWV3JywKLQotICAgICAgICAgICAgaW5zdHJ1
bWVudERldGFpbHM6IGZ1bmN0aW9uKGhhc2gpIHsKLSAgICAgICAgICAgICAgICBoYXNoLm9iamVj
dCA9IHRoaXMudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBoYXNoLmNvbnRhaW5lcktleSA9
IHRoaXMuX2RlYnVnQ29udGFpbmVyS2V5OwotICAgICAgICAgICAgICAgIGhhc2gudmlldyA9IHRo
aXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgSW52b2tlZCBieSB0aGUgdmlldyBzeXN0ZW0gd2hlbiB0aGlzIHZpZXcgbmVlZHMgdG8gcHJv
ZHVjZSBhbiBIVE1MCi0gICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uLiBUaGlzIG1l
dGhvZCB3aWxsIGNyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyLCBpZiBuZWVkZWQsCi0gICAgICAg
ICAgICAgICAgICAgIHRoZW4gYXBwbHkgYW55IGRlZmF1bHQgYXR0cmlidXRlcywgc3VjaCBhcyBj
bGFzcyBuYW1lcyBhbmQgdmlzaWJpbGl0eS4KLSAgICAgICAgICAgICAgICAgICAgRmluYWxseSwg
dGhlIGByZW5kZXIoKWAgbWV0aG9kIGlzIGludm9rZWQsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZv
cgotICAgICAgICAgICAgICAgICAgICBkb2luZyB0aGUgYnVsayBvZiB0aGUgcmVuZGVyaW5nLgot
Ci0gICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gb3ZlcnJpZGUgdGhp
cyBtZXRob2Q7IGluc3RlYWQsIGltcGxlbWVudCB0aGUKLSAgICAgICAgICAgICAgICAgICAgYHRl
bXBsYXRlYCBwcm9wZXJ0eSwgb3IgaWYgeW91IG5lZWQgbW9yZSBjb250cm9sLCBvdmVycmlkZSB0
aGUgYHJlbmRlcmAKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kLgotCi0gICAgICAgICAgICAg
ICAgICAgIEBtZXRob2QgcmVuZGVyVG9CdWZmZXIKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFt
IHtFbWJlci5SZW5kZXJCdWZmZXJ9IGJ1ZmZlciB0aGUgcmVuZGVyIGJ1ZmZlci4gSWYgbm8gYnVm
ZmVyIGlzCi0gICAgICAgICAgICAgICAgICAgICAgcGFzc2VkLCBhIGRlZmF1bHQgYnVmZmVyLCB1
c2luZyB0aGUgY3VycmVudCB2aWV3J3MgYHRhZ05hbWVgLCB3aWxsCi0gICAgICAgICAgICAgICAg
ICAgICAgYmUgdXNlZC4KLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICByZW5kZXJUb0J1ZmZlcjogZnVuY3Rpb24oYnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAncmVuZGVyLicgKyB0aGlzLmluc3RydW1lbnRO
YW1lLAotICAgICAgICAgICAgICAgIGRldGFpbHMgPSB7fTsKLQotICAgICAgICAgICAgICAgIHRo
aXMuaW5zdHJ1bWVudERldGFpbHMoZGV0YWlscyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
aW5zdHJ1bWVudChuYW1lLCBkZXRhaWxzLCBmdW5jdGlvbiBpbnN0cnVtZW50UmVuZGVyVG9CdWZm
ZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJUb0J1ZmZlcihi
dWZmZXIpOwotICAgICAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgX3JlbmRlclRvQnVmZmVyOiBmdW5jdGlvbihfYnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgdG9wLW1vc3Qgdmlldywgc3RhcnQgYSBuZXcgYnVmZmVy
LiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGJ1ZmZlciByZWxh
dGl2ZSB0byB0aGUgb3JpZ2luYWwgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgLy8gcHJvdmlk
ZWQgYnVmZmVyIG9wZXJhdGlvbiAoZm9yIGV4YW1wbGUsIGBpbnNlcnRBZnRlcmAgd2lsbAotICAg
ICAgICAgICAgICAgIC8vIGluc2VydCBhIG5ldyBidWZmZXIgYWZ0ZXIgdGhlICJwYXJlbnQgYnVm
ZmVyIikuCi0gICAgICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSB0aGlzLnRhZ05hbWU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGFnTmFtZSA9PT0gbnVsbCB8fCB0YWdOYW1lID09PSB1bmRlZmlu
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGFnTmFtZSA9ICdkaXYnOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlciA9IF9idWZm
ZXIgJiYgX2J1ZmZlci5iZWdpbih0YWdOYW1lKSB8fCByZW5kZXJCdWZmZXIodGFnTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvKCdpbkJ1ZmZlcicsIGZhbHNlKTsKLQot
ICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyKGJ1ZmZlcik7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5yZW5kZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFmdGVyUmVuZGVy
KGJ1ZmZlcik7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlIHRoZSBk
ZWZhdWx0IGV2ZW50IGZpcmluZyBmcm9tIGBFbWJlci5FdmVudGVkYCB0bwotICAgICAgICAgICAg
ICAgICAgICBhbHNvIGNhbGwgbWV0aG9kcyB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgdHJpZ2dlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
bmFtZSB7U3RyaW5nfQotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHRo
aXNbbmFtZV07Ci0gICAgICAgICAgICAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVwcmVjYXRlZFNlbmRI
YW5kbGVzOiBmdW5jdGlvbihhY3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEh
dGhpc1thY3Rpb25OYW1lXTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGRlcHJlY2F0
ZWRTZW5kOiBmdW5jdGlvbihhY3Rpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNz
ZXJ0KCcnICsgdGhpcyArICIgaGFzIHRoZSBhY3Rpb24gIiArIGFjdGlvbk5hbWUgKyAiIGJ1dCBp
dCBpcyBub3QgYSBmdW5jdGlvbiIsIHR5cGVvZiB0aGlzW2FjdGlvbk5hbWVdID09PSAnZnVuY3Rp
b24nKTsKLSAgICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoJ0FjdGlvbiBoYW5kbGVycyBp
bXBsZW1lbnRlZCBkaXJlY3RseSBvbiB2aWV3cyBhcmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBh
Y3Rpb24gaGFuZGxlcnMgb24gYW4gYGFjdGlvbnNgIG9iamVjdCAoIGFjdGlvbjogYCcgKyBhY3Rp
b25OYW1lICsgJ2Agb24gJyArIHRoaXMgKyAnKScsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0
aGlzW2FjdGlvbk5hbWVdLmFwcGx5KHRoaXMsIGFyZ3MpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGhhczogZnVuY3Rpb24obmFtZSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlT2YodGhpc1tuYW1lXSkgPT09ICdmdW5jdGlvbicg
fHwgdGhpcy5fc3VwZXIobmFtZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXN0
cm95OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5fcGFy
ZW50VmlldzsKLQotICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3VwZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgLy8gZGVzdHJveSB0aGUgZWxlbWVudCAtLSB0aGlzIHdpbGwgYXZvaWQgZWFjaCBjaGlsZCB2
aWV3IGRlc3Ryb3lpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGUgZWxlbWVudCBvdmVyIGFuZCBv
dmVyIGFnYWluLi4uCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW92ZWRGcm9tRE9NKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUVsZW1lbnQoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBwYXJlbnQgaWYgZm91bmQu
IERvbid0IGNhbGwgcmVtb3ZlRnJvbVBhcmVudCwKLSAgICAgICAgICAgICAgICAvLyBhcyByZW1v
dmVGcm9tUGFyZW50IHdpbGwgdHJ5IHRvIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tCi0gICAgICAg
ICAgICAgICAgLy8gdGhlIERPTSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG8oJ2Rlc3Ryb3lp
bmcnLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGNsZWFyUmVuZGVyZWRDaGlsZHJlbjogRW1iZXIuSywKLSAgICAg
ICAgICAgIHRyaWdnZXJSZWN1cnNpdmVseTogRW1iZXIuSywKLSAgICAgICAgICAgIGludm9rZVJl
Y3Vyc2l2ZWx5OiBFbWJlci5LLAotICAgICAgICAgICAgX3RyYW5zaXRpb25UbzogRW1iZXIuSywK
LSAgICAgICAgICAgIGRlc3Ryb3lFbGVtZW50OiBFbWJlci5LCi0gICAgICAgIH0pOwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBDb3JlVmlldzsKLSAgICB9KTsKLSAgICBkZWZp
bmUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcyIsCi0gICAgWyJlbWJlci1tZXRhbC9wbGF0Zm9y
bSIsICJlbWJlci1tZXRhbC9tZXJnZSIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVs
dCIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvcHJlX3JlbmRlciIsICJlbWJlci12aWV3cy92
aWV3cy9zdGF0ZXMvaW5fYnVmZmVyIiwgImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9oYXNfZWxl
bWVudCIsICJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvaW5fZG9tIiwgImVtYmVyLXZpZXdzL3Zp
ZXdzL3N0YXRlcy9kZXN0cm95aW5nIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVu
ZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0
X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9f
ZGVwZW5kZW5jeThfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgY3JlYXRlID0gX19kZXBlbmRlbmN5MV9fLmNyZWF0ZTsKLSAgICAgICAgdmFyIG1l
cmdlID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBfZGVmYXVsdCA9
IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgcHJlUmVuZGVyID0gX19k
ZXBlbmRlbmN5NF9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBpbkJ1ZmZlciA9IF9fZGVwZW5k
ZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGFzRWxlbWVudCA9IF9fZGVwZW5kZW5j
eTZfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaW5ET00gPSBfX2RlcGVuZGVuY3k3X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIGRlc3Ryb3lpbmcgPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1
bHQiXTsKLQotICAgICAgICBmdW5jdGlvbiBjbG9uZVN0YXRlcyhmcm9tKSB7Ci0gICAgICAgICAg
ICB2YXIgaW50byA9IHt9OwotCi0gICAgICAgICAgICBpbnRvLl9kZWZhdWx0ID0ge307Ci0gICAg
ICAgICAgICBpbnRvLnByZVJlbmRlciA9IGNyZWF0ZShpbnRvLl9kZWZhdWx0KTsKLSAgICAgICAg
ICAgIGludG8uZGVzdHJveWluZyA9IGNyZWF0ZShpbnRvLl9kZWZhdWx0KTsKLSAgICAgICAgICAg
IGludG8uaW5CdWZmZXIgPSBjcmVhdGUoaW50by5fZGVmYXVsdCk7Ci0gICAgICAgICAgICBpbnRv
Lmhhc0VsZW1lbnQgPSBjcmVhdGUoaW50by5fZGVmYXVsdCk7Ci0gICAgICAgICAgICBpbnRvLmlu
RE9NID0gY3JlYXRlKGludG8uaGFzRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIGZvciAodmFyIHN0
YXRlTmFtZSBpbiBmcm9tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcm9tLmhhc093blByb3Bl
cnR5KHN0YXRlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lcmdlKGludG9bc3RhdGVOYW1lXSwgZnJvbVtz
dGF0ZU5hbWVdKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGludG87Ci0g
ICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5jbG9uZVN0YXRlcyA9IGNsb25lU3RhdGVz
OwotICAgICAgICB2YXIgc3RhdGVzID0gewotICAgICAgICAgICAgX2RlZmF1bHQ6IF9kZWZhdWx0
LAotICAgICAgICAgICAgcHJlUmVuZGVyOiBwcmVSZW5kZXIsCi0gICAgICAgICAgICBpbkRPTTog
aW5ET00sCi0gICAgICAgICAgICBpbkJ1ZmZlcjogaW5CdWZmZXIsCi0gICAgICAgICAgICBoYXNF
bGVtZW50OiBoYXNFbGVtZW50LAotICAgICAgICAgICAgZGVzdHJveWluZzogZGVzdHJveWluZwot
ICAgICAgICB9OwotICAgICAgICBfX2V4cG9ydHNfXy5zdGF0ZXMgPSBzdGF0ZXM7Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCIsCi0gICAgWyJl
bWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCIsICJlbWJlci1tZXRh
bC9wcm9wZXJ0eV9zZXQiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvZXJy
b3IiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRl
bmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5kZW5jeTRfXywgX19kZXBlbmRlbmN5NV9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBFbWJl
ciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotICAgICAgICAvLyBFbWJlci5LCi0gICAg
ICAgIHZhciBnZXQgPSBfX2RlcGVuZGVuY3kyX18uZ2V0OwotICAgICAgICB2YXIgc2V0ID0gX19k
ZXBlbmRlbmN5M19fLnNldDsKLSAgICAgICAgdmFyIHJ1biA9IF9fZGVwZW5kZW5jeTRfX1siZGVm
YXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVs
dCJdOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgQG1vZHVsZSBlbWJlcgotICAgICAgICAg
ICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBv
cnRzX19bImRlZmF1bHQiXSA9IHsKLSAgICAgICAgICAgIC8vIGFwcGVuZENoaWxkIGlzIG9ubHkg
bGVnYWwgd2hpbGUgcmVuZGVyaW5nIHRoZSBidWZmZXIuCi0gICAgICAgICAgICBhcHBlbmRDaGls
ZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIllv
dSBjYW4ndCB1c2UgYXBwZW5kQ2hpbGQgb3V0c2lkZSBvZiB0aGUgcmVuZGVyaW5nIHByb2Nlc3Mi
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICQ6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBnZXRFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBldmVudHMgZnJvbSBgRW1i
ZXIuRXZlbnREaXNwYXRjaGVyYAotICAgICAgICAgICAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBjb250aW51ZSBldmVudCBwcm9wYWdh
dGlvbgotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0
aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICBzZXQodmlldywgJ2VsZW1lbnQnLCBudWxsKTsK
LSAgICAgICAgICAgICAgICBpZiAodmlldy5fc2NoZWR1bGVkSW5zZXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJ1bi5jYW5jZWwodmlldy5fc2NoZWR1bGVkSW5zZXJ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgdmlldy5fc2NoZWR1bGVkSW5zZXJ0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICByZW5kZXJUb0J1ZmZlcklmTmVlZGVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVyZW5kZXI6
IEVtYmVyLkssCi0gICAgICAgICAgICBpbnZva2VPYnNlcnZlcjogRW1iZXIuSwotICAgICAgICB9
OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2Rlc3Ryb3lp
bmciLAotICAgIFsiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAi
ZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9k
ZWZhdWx0IiwgImVtYmVyLW1ldGFsL2Vycm9yIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVu
ZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBz
dHJpY3QiOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsK
LSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5kZW5jeTJfXy5jcmVhdGU7Ci0gICAgICAgIHZh
ciBmbXQgPSBfX2RlcGVuZGVuY3kzX18uZm10OwotICAgICAgICB2YXIgX2RlZmF1bHQgPSBfX2Rl
cGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVu
ZGVuY3k1X19bImRlZmF1bHQiXTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICBAbW9kdWxlIGVt
YmVyCi0gICAgICAgICAgICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICAgICAgICAgICAqLwot
Ci0gICAgICAgIHZhciBkZXN0cm95aW5nRXJyb3IgPSAiWW91IGNhbid0IGNhbGwgJUAgb24gYSB2
aWV3IGJlaW5nIGRlc3Ryb3llZCI7Ci0KLSAgICAgICAgdmFyIGRlc3Ryb3lpbmcgPSBjcmVhdGUo
X2RlZmF1bHQpOwotCi0gICAgICAgIG1lcmdlKGRlc3Ryb3lpbmcsIHsKLSAgICAgICAgICAgIGFw
cGVuZENoaWxkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJF
cnJvcihmbXQoZGVzdHJveWluZ0Vycm9yLCBbJ2FwcGVuZENoaWxkJ10pKTsKLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICByZXJlbmRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVtYmVyRXJyb3IoZm10KGRlc3Ryb3lpbmdFcnJvciwgWydyZXJlbmRlciddKSk7
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKGZtdChkZXN0cm95aW5nRXJy
b3IsIFsnZGVzdHJveUVsZW1lbnQnXSkpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGVt
cHR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcihm
bXQoZGVzdHJveWluZ0Vycm9yLCBbJ2VtcHR5J10pKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgIHNldEVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFbWJlckVycm9yKGZtdChkZXN0cm95aW5nRXJyb3IsIFsic2V0KCdlbGVtZW50JywgLi4uKSJd
KSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW5kZXJUb0J1ZmZlcklmTmVlZGVk
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvLyBTaW5jZSBlbGVtZW50IGluc2VydGlvbiBpcyBzY2hlZHVs
ZWQsIGRvbid0IGRvIGFueXRoaW5nIGlmCi0gICAgICAgICAgICAvLyB0aGUgdmlldyBoYXMgYmVl
biBkZXN0cm95ZWQgYmV0d2VlbiBzY2hlZHVsaW5nIGFuZCBleGVjdXRpb24KLSAgICAgICAgICAg
IGluc2VydEVsZW1lbnQ6IEVtYmVyLksKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRz
X19bImRlZmF1bHQiXSA9IGRlc3Ryb3lpbmc7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlci12
aWV3cy92aWV3cy9zdGF0ZXMvaGFzX2VsZW1lbnQiLAotICAgIFsiZW1iZXItdmlld3Mvdmlld3Mv
c3RhdGVzL2RlZmF1bHQiLCAiZW1iZXItbWV0YWwvcnVuX2xvb3AiLCAiZW1iZXItbWV0YWwvbWVy
Z2UiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSIs
ICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQiLCAiZW1iZXIt
bWV0YWwvcHJvcGVydHlfc2V0IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18s
IF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVw
ZW5kZW5jeThfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAg
ICB2YXIgX2RlZmF1bHQgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFy
IHJ1biA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgbWVyZ2UgPSBf
X2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGNyZWF0ZSA9IF9fZGVwZW5k
ZW5jeTRfXy5jcmVhdGU7Ci0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3k1X19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3k2X19bImRlZmF1
bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAg
ICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFy
IGdldCA9IF9fZGVwZW5kZW5jeTdfXy5nZXQ7Ci0gICAgICAgIHZhciBzZXQgPSBfX2RlcGVuZGVu
Y3k4X18uc2V0OwotCi0gICAgICAgIHZhciBoYXNFbGVtZW50ID0gY3JlYXRlKF9kZWZhdWx0KTsK
LQotICAgICAgICBtZXJnZShoYXNFbGVtZW50LCB7Ci0gICAgICAgICAgICAkOiBmdW5jdGlvbih2
aWV3LCBzZWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGdldCh2aWV3LCAnZWxlbWVu
dCcpOwotICAgICAgICAgICAgICAgIHJldHVybiBzZWwgPyBqUXVlcnkoc2VsLCBlbGVtKSA6IGpR
dWVyeShlbGVtKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdldEVsZW1lbnQ6IGZ1
bmN0aW9uKHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZ2V0KHZpZXcsICdw
YXJlbnRWaWV3Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkgewotICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQgPSBnZXQocGFyZW50LCAnZWxlbWVudCcpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2aWV3LmZpbmRFbGVtZW50SW5QYXJlbnRFbGVtZW50KHBhcmVudCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIiMiICsgZ2V0KHZpZXcsICdl
bGVtZW50SWQnKSlbMF07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzZXRFbGVtZW50
OiBmdW5jdGlvbih2aWV3LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0g
bnVsbCkgewotICAgICAgICAgICAgICAgICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ3ByZVJlbmRl
cicpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFbWJlckVycm9yKCJZb3UgY2Fubm90IHNldCBhbiBlbGVtZW50IHRvIGEgbm9uLW51bGwg
dmFsdWUgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGluIHRoZSBET00uIik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgLy8gb25jZSB0aGUgdmlldyBoYXMgYmVlbiBpbnNlcnRlZCBpbnRv
IHRoZSBET00sIHJlcmVuZGVyaW5nIGlzCi0gICAgICAgICAgICAvLyBkZWZlcnJlZCB0byBhbGxv
dyBiaW5kaW5ncyB0byBzeW5jaHJvbml6ZS4KLSAgICAgICAgICAgIHJlcmVuZGVyOiBmdW5jdGlv
bih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgdmlldy50cmlnZ2VyUmVjdXJzaXZlbHkoJ3dpbGxD
bGVhclJlbmRlcicpOwotCi0gICAgICAgICAgICAgICAgdmlldy5jbGVhclJlbmRlcmVkQ2hpbGRy
ZW4oKTsKLQotICAgICAgICAgICAgICAgIHZpZXcuZG9tTWFuYWdlci5yZXBsYWNlKHZpZXcpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLy8gb25jZSB0aGUgdmlldyBpcyBhbHJlYWR5IGluIHRoZSBET00sIGRlc3Ryb3lpbmcgaXQg
cmVtb3ZlcyBpdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgRE9NLCBudWtlcyBpdHMgZWxlbWVu
dCwgYW5kIHB1dHMgaXQgYmFjayBpbnRvIHRoZQotICAgICAgICAgICAgLy8gcHJlUmVuZGVyIHN0
YXRlIGlmIGluRE9NLgotCi0gICAgICAgICAgICBkZXN0cm95RWxlbWVudDogZnVuY3Rpb24odmll
dykgewotICAgICAgICAgICAgICAgIHZpZXcuX25vdGlmeVdpbGxEZXN0cm95RWxlbWVudCgpOwot
ICAgICAgICAgICAgICAgIHZpZXcuZG9tTWFuYWdlci5yZW1vdmUodmlldyk7Ci0gICAgICAgICAg
ICAgICAgc2V0KHZpZXcsICdlbGVtZW50JywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZp
ZXcuX3NjaGVkdWxlZEluc2VydCkgewotICAgICAgICAgICAgICAgICAgICBydW4uY2FuY2VsKHZp
ZXcuX3NjaGVkdWxlZEluc2VydCk7Ci0gICAgICAgICAgICAgICAgICAgIHZpZXcuX3NjaGVkdWxl
ZEluc2VydCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biB2aWV3OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKHZp
ZXcpIHsKLSAgICAgICAgICAgICAgICB2YXIgX2NoaWxkVmlld3MgPSB2aWV3Ll9jaGlsZFZpZXdz
LCBsZW4sIGlkeDsKLSAgICAgICAgICAgICAgICBpZiAoX2NoaWxkVmlld3MpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGVuID0gX2NoaWxkVmlld3MubGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIF9jaGlsZFZpZXdzW2lkeF0uX25vdGlmeVdpbGxEZXN0cm95RWxlbWVudCgpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpZXcu
ZG9tTWFuYWdlci5lbXB0eSh2aWV3KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8v
IEhhbmRsZSBldmVudHMgZnJvbSBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYAotICAgICAgICAgICAg
aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKHZpZXcsIGV2ZW50TmFtZSwgZXZ0KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZpZXcuaGFzKGV2ZW50TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlciBzaG91bGQgYmUgYWJsZSB0byByZS1kaXNwYXRjaCBldmVudHMsIHNvIHdlIGRvbid0
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnREZWZhdWx0IG9yIHN0b3BQcm9wYWdhdGlv
bi4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXcudHJpZ2dlcihldmVudE5hbWUsIGV2
dCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7IC8vIGNvbnRpbnVlIGV2ZW50IHByb3BhZ2F0aW9uCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW52b2tlT2JzZXJ2ZXI6IGZ1bmN0aW9uKHRh
cmdldCwgb2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBvYnNlcnZlci5jYWxsKHRhcmdldCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZh
dWx0Il0gPSBoYXNFbGVtZW50OwotICAgIH0pOwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmll
d3Mvc3RhdGVzL2luX2J1ZmZlciIsCi0gICAgWyJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVm
YXVsdCIsICJlbWJlci1tZXRhbC9lcnJvciIsICJlbWJlci1tZXRhbC9jb3JlIiwgImVtYmVyLW1l
dGFsL3BsYXRmb3JtIiwgImVtYmVyLW1ldGFsL21lcmdlIiwgImV4cG9ydHMiXSwKLSAgICBmdW5j
dGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBf
X2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAg
InVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgX2RlZmF1bHQgPSBfX2RlcGVuZGVuY3kxX19bImRl
ZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVyRXJyb3IgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1
bHQiXTsKLQotICAgICAgICB2YXIgRW1iZXIgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsK
LSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0Ci0gICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVu
Y3k0X18uY3JlYXRlOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3k1X19bImRlZmF1
bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAg
ICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgdmFy
IGluQnVmZmVyID0gY3JlYXRlKF9kZWZhdWx0KTsKLQotICAgICAgICBtZXJnZShpbkJ1ZmZlciwg
ewotICAgICAgICAgICAgJDogZnVuY3Rpb24odmlldywgc2VsKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gaWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbGVtZW50IHlldCwgc29tZW9uZSBjYWxsaW5nIHRoaXMu
JCgpIGlzCi0gICAgICAgICAgICAgICAgLy8gdHJ5aW5nIHRvIHVwZGF0ZSBhbiBlbGVtZW50IHRo
YXQgaXNuJ3QgaW4gdGhlIERPTS4gSW5zdGVhZCwKLSAgICAgICAgICAgICAgICAvLyByZXJlbmRl
ciB0aGUgdmlldyB0byBhbGxvdyB0aGUgcmVuZGVyIG1ldGhvZCB0byByZWZsZWN0IHRoZQotICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgdmlldy5yZXJlbmRlcigp
OwotICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci4kKCk7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvLyB3aGVuIGEgdmlldyBpcyByZW5kZXJlZCBpbiBhIGJ1ZmZlciwgcmVyZW5k
ZXJpbmcgaXQgc2ltcGx5Ci0gICAgICAgICAgICAvLyByZXBsYWNlcyB0aGUgZXhpc3RpbmcgYnVm
ZmVyIHdpdGggYSBuZXcgb25lCi0gICAgICAgICAgICByZXJlbmRlcjogZnVuY3Rpb24odmlldykg
ewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFbWJlckVycm9yKCJTb21ldGhpbmcgeW91IGRp
ZCBjYXVzZWQgYSB2aWV3IHRvIHJlLXJlbmRlciBhZnRlciBpdCByZW5kZXJlZCBidXQgYmVmb3Jl
IGl0IHdhcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIik7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvLyB3aGVuIGEgdmlldyBpcyByZW5kZXJlZCBpbiBhIGJ1ZmZlciwgYXBwZW5kaW5n
IGEgY2hpbGQKLSAgICAgICAgICAgIC8vIHZpZXcgd2lsbCByZW5kZXIgdGhhdCB2aWV3IGFuZCBh
cHBlbmQgdGhlIHJlc3VsdGluZwotICAgICAgICAgICAgLy8gYnVmZmVyIGludG8gaXRzIGJ1ZmZl
ci4KLSAgICAgICAgICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbih2aWV3LCBjaGlsZFZpZXcsIG9w
dGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdmlldy5idWZmZXIsIF9jaGls
ZFZpZXdzID0gdmlldy5fY2hpbGRWaWV3czsKLQotICAgICAgICAgICAgICAgIGNoaWxkVmlldyA9
IHZpZXcuY3JlYXRlQ2hpbGRWaWV3KGNoaWxkVmlldywgb3B0aW9ucyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFfY2hpbGRWaWV3cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgX2NoaWxk
Vmlld3MgPSB2aWV3Ll9jaGlsZFZpZXdzID0gX2NoaWxkVmlld3Muc2xpY2UoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgX2NoaWxkVmlld3MucHVzaChjaGlsZFZpZXcpOwot
Ci0gICAgICAgICAgICAgICAgY2hpbGRWaWV3LnJlbmRlclRvQnVmZmVyKGJ1ZmZlcik7Ci0KLSAg
ICAgICAgICAgICAgICB2aWV3LnByb3BlcnR5RGlkQ2hhbmdlKCdjaGlsZFZpZXdzJyk7Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gY2hpbGRWaWV3OwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLy8gd2hlbiBhIHZpZXcgaXMgcmVuZGVyZWQgaW4gYSBidWZmZXIsIGRlc3Ryb3lpbmcg
dGhlCi0gICAgICAgICAgICAvLyBlbGVtZW50IHdpbGwgc2ltcGx5IGRlc3Ryb3kgdGhlIGJ1ZmZl
ciBhbmQgcHV0IHRoZQotICAgICAgICAgICAgLy8gc3RhdGUgYmFjayBpbnRvIHRoZSBwcmVSZW5k
ZXIgc3RhdGUuCi0gICAgICAgICAgICBkZXN0cm95RWxlbWVudDogZnVuY3Rpb24odmlldykgewot
ICAgICAgICAgICAgICAgIHZpZXcuY2xlYXJCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICB2YXIg
dmlld0NvbGxlY3Rpb24gPSB2aWV3Ll9ub3RpZnlXaWxsRGVzdHJveUVsZW1lbnQoKTsKLSAgICAg
ICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi50cmFuc2l0aW9uVG8oJ3ByZVJlbmRlcicsIGZhbHNl
KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIEVtYmVyLmFzc2Vy
dCgiRW1wdHlpbmcgYSB2aWV3IGluIHRoZSBpbkJ1ZmZlciBzdGF0ZSBpcyBub3QgYWxsb3dlZCBh
bmQgIiArCi0gICAgICAgICAgICAgICAgInNob3VsZCBub3QgaGFwcGVuIHVuZGVyIG5vcm1hbCBj
aXJjdW1zdGFuY2VzLiBNb3N0IGxpa2VseSAiICsKLSAgICAgICAgICAgICAgICAidGhlcmUgaXMg
YSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gVGhpcyBtYXkgYmUgZHVlIHRvICIgKwotICAgICAg
ICAgICAgICAgICJleGNlc3NpdmUgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbnMuIik7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZW5kZXJUb0J1ZmZlcklmTmVlZGVkOiBmdW5j
dGlvbiAodmlldywgYnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9y
IGEgcmVuZGVyZWQgdmlldyB0byBiZSBzY2hlZHVsZWQgZm9yCi0gICAgICAgICAgICAvLyBpbnNl
cnRpb24uCi0gICAgICAgICAgICBpbnNlcnRFbGVtZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRW1iZXJFcnJvcigiWW91IGNhbid0IGluc2VydCBhbiBlbGVtZW50
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZW5kZXJlZCIpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgc2V0RWxlbWVudDogZnVuY3Rpb24odmlldywgdmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy5fdHJh
bnNpdGlvblRvKCdwcmVSZW5kZXInKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICB2aWV3LmNsZWFyQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZXcuX3RyYW5zaXRpb25UbygnaGFzRWxlbWVudCcpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGludm9rZU9ic2VydmVyOiBmdW5jdGlvbih0YXJnZXQsIG9ic2VydmVyKSB7Ci0gICAgICAgICAg
ICAgICAgb2JzZXJ2ZXIuY2FsbCh0YXJnZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LQotICAgICAgICBfX2V4cG9ydHNfX1siZGVmYXVsdCJdID0gaW5CdWZmZXI7Ci0gICAgfSk7Ci0g
ICAgZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvaW5fZG9tIiwKLSAgICBbImVtYmVy
LW1ldGFsL2NvcmUiLCAiZW1iZXItbWV0YWwvcGxhdGZvcm0iLCAiZW1iZXItbWV0YWwvbWVyZ2Ui
LCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVt
ZW50IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5k
ZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgRW1i
ZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgLy8gRW1iZXIuYXNzZXJ0
Ci0gICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3kyX18uY3JlYXRlOwotICAgICAgICB2
YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIEVtYmVy
RXJyb3IgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1bHQiXTsKLQotICAgICAgICB2YXIgaGFzRWxl
bWVudCA9IF9fZGVwZW5kZW5jeTVfX1siZGVmYXVsdCJdOwotICAgICAgICAvKioKLSAgICAgICAg
ICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAg
ICAgICAgICAgICovCi0KLSAgICAgICAgdmFyIGluRE9NID0gY3JlYXRlKGhhc0VsZW1lbnQpOwot
Ci0gICAgICAgIHZhciBWaWV3OwotCi0gICAgICAgIG1lcmdlKGluRE9NLCB7Ci0gICAgICAgICAg
ICBlbnRlcjogZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgIGlmICghVmlldykgewot
ICAgICAgICAgICAgICAgICAgICBWaWV3ID0gcmVxdWlyZU1vZHVsZSgnZW1iZXItdmlld3Mvdmll
d3MvdmlldycpWyJkZWZhdWx0Il07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IC8vIEVTNlRPRE86IHRoaXMgc3Vja3MuIEhhdmUgdG8gYXZvaWQgY3ljbGVzLi4uCi0KLSAgICAg
ICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgdmlldyBmb3IgZXZlbnQgaGFuZGxpbmcuIFRoaXMg
aGFzaCBpcyB1c2VkIGJ5Ci0gICAgICAgICAgICAgICAgLy8gRW1iZXIuRXZlbnREaXNwYXRjaGVy
IHRvIGRpc3BhdGNoIGluY29taW5nIGV2ZW50cy4KLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcu
aXNWaXJ0dWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLmFzc2VydCgiQXR0ZW1wdGVk
IHRvIHJlZ2lzdGVyIGEgdmlldyB3aXRoIGFuIGlkIGFscmVhZHkgaW4gdXNlOiAiICsgdmlldy5l
bGVtZW50SWQsICFWaWV3LnZpZXdzW3ZpZXcuZWxlbWVudElkXSk7Ci0gICAgICAgICAgICAgICAg
ICAgIFZpZXcudmlld3Nbdmlldy5lbGVtZW50SWRdID0gdmlldzsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB2aWV3LmFkZEJlZm9yZU9ic2VydmVyKCdlbGVtZW50SWQnLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoIkNo
YW5naW5nIGEgdmlldydzIGVsZW1lbnRJZCBhZnRlciBjcmVhdGlvbiBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZXhp
dDogZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgIGlmICghVmlldykgewotICAgICAg
ICAgICAgICAgICAgICBWaWV3ID0gcmVxdWlyZU1vZHVsZSgnZW1iZXItdmlld3Mvdmlld3Mvdmll
dycpWyJkZWZhdWx0Il07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEVT
NlRPRE86IHRoaXMgc3Vja3MuIEhhdmUgdG8gYXZvaWQgY3ljbGVzLi4uCi0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuaXNWaXJ0dWFsKSAKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFZp
ZXcudmlld3Nbdmlldy5lbGVtZW50SWRdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
aW5zZXJ0RWxlbWVudDogZnVuY3Rpb24odmlldywgZm4pIHsKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRW1iZXJFcnJvcigiWW91IGNhbid0IGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlIERP
TSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGluRE9NOwotICAgIH0p
OwotICAgIGRlZmluZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL3ByZV9yZW5kZXIiLAotICAg
IFsiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiLCAiZW1iZXItbWV0YWwvcGxhdGZv
cm0iLCAiZW1iZXItbWV0YWwvbWVyZ2UiLCAiZXhwb3J0cyJdLAotICAgIGZ1bmN0aW9uKF9fZGVw
ZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIF9kZWZhdWx0ID0gX19kZXBl
bmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBjcmVhdGUgPSBfX2RlcGVuZGVuY3ky
X18uY3JlYXRlOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQi
XTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAg
IEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBwcmVS
ZW5kZXIgPSBjcmVhdGUoX2RlZmF1bHQpOwotCi0gICAgICAgIG1lcmdlKHByZVJlbmRlciwgewot
ICAgICAgICAgICAgLy8gYSB2aWV3IGxlYXZlcyB0aGUgcHJlUmVuZGVyIHN0YXRlIG9uY2UgaXRz
IGVsZW1lbnQgaGFzIGJlZW4KLSAgICAgICAgICAgIC8vIGNyZWF0ZWQgKGNyZWF0ZUVsZW1lbnQp
LgotICAgICAgICAgICAgaW5zZXJ0RWxlbWVudDogZnVuY3Rpb24odmlldywgZm4pIHsKLSAgICAg
ICAgICAgICAgICB2aWV3LmNyZWF0ZUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB2YXIgdmll
d0NvbGxlY3Rpb24gPSB2aWV3LnZpZXdIaWVyYXJjaHlDb2xsZWN0aW9uKCk7Ci0KLSAgICAgICAg
ICAgICAgICB2aWV3Q29sbGVjdGlvbi50cmlnZ2VyKCd3aWxsSW5zZXJ0RWxlbWVudCcpOwotCi0g
ICAgICAgICAgICAgICAgZm4uY2FsbCh2aWV3KTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIHRy
YW5zaXRpb24gdG8gYGluRE9NYCBpZiB0aGUgZWxlbWVudCBleGlzdHMgaW4gdGhlIERPTQotICAg
ICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdmlldy5nZXQoJ2VsZW1lbnQnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhlbGVtZW50KSkgewotICAgICAgICAg
ICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi50cmFuc2l0aW9uVG8oJ2luRE9NJywgZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi50cmlnZ2VyKCdkaWRJbnNlcnRFbGVt
ZW50Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
cmVuZGVyVG9CdWZmZXJJZk5lZWRlZDogZnVuY3Rpb24odmlldywgYnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgdmlldy5yZW5kZXJUb0J1ZmZlcihidWZmZXIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZW1wdHk6IEVtYmVyLkss
Ci0KLSAgICAgICAgICAgIHNldEVsZW1lbnQ6IGZ1bmN0aW9uKHZpZXcsIHZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZp
ZXcuX3RyYW5zaXRpb25UbygnaGFzRWxlbWVudCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBwcmVSZW5kZXI7Ci0gICAgfSk7Ci0gICAg
ZGVmaW5lKCJlbWJlci12aWV3cy92aWV3cy92aWV3IiwKLSAgICBbImVtYmVyLW1ldGFsL2NvcmUi
LCAiZW1iZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9v
YmplY3QiLCAiZW1iZXItbWV0YWwvZXJyb3IiLCAiZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0Iiwg
ImVtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCIsICJlbWJlci1tZXRhbC9zZXRfcHJvcGVydGllcyIs
ICJlbWJlci1tZXRhbC9ydW5fbG9vcCIsICJlbWJlci1tZXRhbC9vYnNlcnZlciIsICJlbWJlci1t
ZXRhbC9wcm9wZXJ0aWVzIiwgImVtYmVyLW1ldGFsL3V0aWxzIiwgImVtYmVyLW1ldGFsL2NvbXB1
dGVkIiwgImVtYmVyLW1ldGFsL21peGluIiwgImVtYmVyLW1ldGFsL2lzX25vbmUiLCAiY29udGFp
bmVyL2NvbnRhaW5lciIsICJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLCAiZW1i
ZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwgImVtYmVyLW1ldGFsL2VudW1lcmFibGVfdXRpbHMi
LCAiZW1iZXItcnVudGltZS9jb3B5IiwgImVtYmVyLW1ldGFsL2JpbmRpbmciLCAiZW1iZXItbWV0
YWwvcHJvcGVydHlfZXZlbnRzIiwgImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLCAiZW1iZXIt
dmlld3Mvc3lzdGVtL2V4dCIsICJlbWJlci12aWV3cy92aWV3cy9jb3JlX3ZpZXciLCAiZW1iZXIt
dmlld3Mvdmlld3Mvdmlld19jb2xsZWN0aW9uIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihf
X2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVu
ZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBfX2RlcGVuZGVuY3k3
X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9fLCBfX2RlcGVuZGVuY3kxMF9fLCBf
X2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBfX2RlcGVuZGVuY3kxM19fLCBfX2Rl
cGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2RlcGVuZGVuY3kxNl9fLCBfX2RlcGVu
ZGVuY3kxN19fLCBfX2RlcGVuZGVuY3kxOF9fLCBfX2RlcGVuZGVuY3kxOV9fLCBfX2RlcGVuZGVu
Y3kyMF9fLCBfX2RlcGVuZGVuY3kyMV9fLCBfX2RlcGVuZGVuY3kyMl9fLCBfX2RlcGVuZGVuY3ky
M19fLCBfX2RlcGVuZGVuY3kyNF9fLCBfX2RlcGVuZGVuY3kyNV9fLCBfX2V4cG9ydHNfXykgewot
ICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIC8vIEVtYmVyLmFzc2VydCwgRW1iZXIuZGVw
cmVjYXRlLCBFbWJlci53YXJuLCBFbWJlci5URU1QTEFURVMsCi0gICAgICAgIC8vIEVtYmVyLkss
IGpRdWVyeSwgRW1iZXIubG9va3VwLAotICAgICAgICAvLyBFbWJlci5Db250YWluZXJWaWV3IGNp
cmN1bGFyIGRlcGVuZGVuY3kKLSAgICAgICAgLy8gRW1iZXIuRU5WCi0gICAgICAgIHZhciBFbWJl
ciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBFdmVudGVkID0g
X19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBFbWJlck9iamVjdCA9IF9f
ZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgRW1iZXJFcnJvciA9IF9fZGVw
ZW5kZW5jeTRfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgZ2V0ID0gX19kZXBlbmRlbmN5NV9f
LmdldDsKLSAgICAgICAgdmFyIHNldCA9IF9fZGVwZW5kZW5jeTZfXy5zZXQ7Ci0gICAgICAgIHZh
ciBzZXRQcm9wZXJ0aWVzID0gX19kZXBlbmRlbmN5N19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBydW4gPSBfX2RlcGVuZGVuY3k4X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGFkZE9ic2Vy
dmVyID0gX19kZXBlbmRlbmN5OV9fLmFkZE9ic2VydmVyOwotICAgICAgICB2YXIgcmVtb3ZlT2Jz
ZXJ2ZXIgPSBfX2RlcGVuZGVuY3k5X18ucmVtb3ZlT2JzZXJ2ZXI7Ci0KLSAgICAgICAgdmFyIGRl
ZmluZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5MTBfXy5kZWZpbmVQcm9wZXJ0eTsKLSAgICAgICAg
dmFyIGRlcHJlY2F0ZVByb3BlcnR5ID0gX19kZXBlbmRlbmN5MTBfXy5kZXByZWNhdGVQcm9wZXJ0
eTsKLSAgICAgICAgdmFyIGd1aWRGb3IgPSBfX2RlcGVuZGVuY3kxMV9fLmd1aWRGb3I7Ci0gICAg
ICAgIHZhciBtZXRhID0gX19kZXBlbmRlbmN5MTFfXy5tZXRhOwotICAgICAgICB2YXIgY29tcHV0
ZWQgPSBfX2RlcGVuZGVuY3kxMl9fLmNvbXB1dGVkOwotICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBf
X2RlcGVuZGVuY3kxM19fLm9ic2VydmVyOwotCi0gICAgICAgIHZhciB0eXBlT2YgPSBfX2RlcGVu
ZGVuY3kxMV9fLnR5cGVPZjsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kxMV9f
LmlzQXJyYXk7Ci0gICAgICAgIHZhciBpc05vbmUgPSBfX2RlcGVuZGVuY3kxNF9fLmlzTm9uZTsK
LSAgICAgICAgdmFyIE1peGluID0gX19kZXBlbmRlbmN5MTNfXy5NaXhpbjsKLSAgICAgICAgdmFy
IENvbnRhaW5lciA9IF9fZGVwZW5kZW5jeTE1X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGVt
YmVyQSA9IF9fZGVwZW5kZW5jeTE2X18uQTsKLQotICAgICAgICB2YXIgZGFzaGVyaXplID0gX19k
ZXBlbmRlbmN5MTdfXy5kYXNoZXJpemU7Ci0KLSAgICAgICAgLy8gRVM2VE9ETzogZnVuY3Rpb25z
IG9uIEVudW1lcmFibGVVdGlscyBzaG91bGQgZ2V0IHRoZWlyIG93biBleHBvcnQKLSAgICAgICAg
dmFyIGZvckVhY2ggPSBfX2RlcGVuZGVuY3kxOF9fLmZvckVhY2g7Ci0gICAgICAgIHZhciBhZGRP
YmplY3QgPSBfX2RlcGVuZGVuY3kxOF9fLmFkZE9iamVjdDsKLSAgICAgICAgdmFyIHJlbW92ZU9i
amVjdCA9IF9fZGVwZW5kZW5jeTE4X18ucmVtb3ZlT2JqZWN0OwotCi0gICAgICAgIHZhciBiZWZv
cmVPYnNlcnZlciA9IF9fZGVwZW5kZW5jeTEzX18uYmVmb3JlT2JzZXJ2ZXI7Ci0gICAgICAgIHZh
ciBjb3B5ID0gX19kZXBlbmRlbmN5MTlfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaXNHbG9i
YWxQYXRoID0gX19kZXBlbmRlbmN5MjBfXy5pc0dsb2JhbFBhdGg7Ci0KLSAgICAgICAgdmFyIHBy
b3BlcnR5V2lsbENoYW5nZSA9IF9fZGVwZW5kZW5jeTIxX18ucHJvcGVydHlXaWxsQ2hhbmdlOwot
ICAgICAgICB2YXIgcHJvcGVydHlEaWRDaGFuZ2UgPSBfX2RlcGVuZGVuY3kyMV9fLnByb3BlcnR5
RGlkQ2hhbmdlOwotCi0gICAgICAgIHZhciBqUXVlcnkgPSBfX2RlcGVuZGVuY3kyMl9fWyJkZWZh
dWx0Il07Ci0gICAgICAgIC8vIGZvciB0aGUgc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5nIEVtYmVy
LnJ1bi5xdWV1ZXMKLQotICAgICAgICB2YXIgQ29yZVZpZXcgPSBfX2RlcGVuZGVuY3kyNF9fWyJk
ZWZhdWx0Il07Ci0gICAgICAgIHZhciBWaWV3Q29sbGVjdGlvbiA9IF9fZGVwZW5kZW5jeTI1X19b
ImRlZmF1bHQiXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEBtb2R1bGUgZW1iZXIKLSAg
ICAgICAgICAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgICAgICAgICAgICovCi0KLSAgICAg
ICAgdmFyIENvbnRhaW5lclZpZXc7Ci0KLSAgICAgICAgZnVuY3Rpb24gbnVsbFZpZXdzQnVmZmVy
KHZpZXcpIHsKLSAgICAgICAgICAgIHZpZXcuYnVmZmVyID0gbnVsbDsKLQotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gY2xlYXJDYWNoZWRFbGVtZW50KHZpZXcpIHsKLSAgICAgICAgICAg
IG1ldGEodmlldykuY2FjaGUuZWxlbWVudCA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBjaGlsZFZpZXdzUHJvcGVydHkgPSBjb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5fY2hpbGRWaWV3cywgcmV0ID0gZW1iZXJBKCks
IHZpZXcgPSB0aGlzOwotCi0gICAgICAgICAgICBmb3JFYWNoKGNoaWxkVmlld3MsIGZ1bmN0aW9u
KHZpZXcpIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudENoaWxkVmlld3M7Ci0gICAgICAg
ICAgICAgICAgaWYgKHZpZXcuaXNWaXJ0dWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50Q2hpbGRWaWV3cyA9IGdldCh2aWV3LCAnY2hpbGRWaWV3cycpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXQucHVzaE9iamVjdHMoY3VycmVudENoaWxkVmlld3MpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0LnB1c2godmlldyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgIHJldC5yZXBsYWNlID0gZnVuY3Rpb24gKGlkeCwgcmVtb3ZlZENvdW50
LCBhZGRlZFZpZXdzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFDb250YWluZXJWaWV3KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENvbnRhaW5lclZpZXcgPSByZXF1aXJlTW9kdWxlKCdlbWJlci12
aWV3cy92aWV3cy9jb250YWluZXJfdmlldycpWydkZWZhdWx0J107Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIC8vIEVTNlRPRE86IHN0dXBpZCBjaXJjdWxhciBkZXAKLQotICAg
ICAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgQ29udGFpbmVyVmlldykgewotICAgICAg
ICAgICAgICAgICAgICBFbWJlci5kZXByZWNhdGUoIk1hbmlwdWxhdGluZyBhbiBFbWJlci5Db250
YWluZXJWaWV3IHRocm91Z2ggaXRzIGNoaWxkVmlld3MgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4g
UGxlYXNlIHVzZSB0aGUgQ29udGFpbmVyVmlldyBpbnN0YW5jZSBpdHNlbGYgYXMgYW4gRW1iZXIu
TXV0YWJsZUFycmF5LiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5yZXBsYWNl
KGlkeCwgcmVtb3ZlZENvdW50LCBhZGRlZFZpZXdzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVtYmVyRXJyb3IoImNoaWxkVmlld3MgaXMgaW1tdXRhYmxl
Iik7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9
KTsKLQotICAgICAgICBFbWJlci53YXJuKCJUaGUgVklFV19QUkVTRVJWRVNfQ09OVEVYVCBmbGFn
IGhhcyBiZWVuIHJlbW92ZWQgYW5kIHRoZSBmdW5jdGlvbmFsaXR5IGNhbiBubyBsb25nZXIgYmUg
ZGlzYWJsZWQuIiwgRW1iZXIuRU5WLlZJRVdfUFJFU0VSVkVTX0NPTlRFWFQgIT09IGZhbHNlKTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgR2xvYmFsIGhhc2ggb2Ygc2hhcmVkIHRlbXBs
YXRlcy4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcG9wdWxhdGVkCi0gICAgICAgICAgICAg
IGJ5IHRoZSBidWlsZCB0b29scyBzbyB0aGF0IHlvdSBjYW4gc3RvcmUgeW91ciBIYW5kbGViYXJz
IHRlbXBsYXRlcyBpbgotICAgICAgICAgICAgICBzZXBhcmF0ZSBmaWxlcyB0aGF0IGdldCBsb2Fk
ZWQgaW50byBKYXZhU2NyaXB0IGF0IGJ1aWxkdGltZS4KLQotICAgICAgICAgICAgICBAcHJvcGVy
dHkgVEVNUExBVEVTCi0gICAgICAgICAgICAgIEBmb3IgRW1iZXIKLSAgICAgICAgICAgICAgQHR5
cGUgSGFzaAotICAgICAgICAgICAgKi8KLSAgICAgICAgRW1iZXIuVEVNUExBVEVTID0ge307Ci0K
LSAgICAgICAgdmFyIEVNUFRZX0FSUkFZID0gW107Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgIGBFbWJlci5WaWV3YCBpcyB0aGUgY2xhc3MgaW4gRW1iZXIgcmVzcG9uc2libGUgZm9yIGVu
Y2Fwc3VsYXRpbmcgdGVtcGxhdGVzIG9mCi0gICAgICAgICAgICAgIEhUTUwgY29udGVudCwgY29t
YmluaW5nIHRlbXBsYXRlcyB3aXRoIGRhdGEgdG8gcmVuZGVyIGFzIHNlY3Rpb25zIG9mIGEgcGFn
ZSdzCi0gICAgICAgICAgICAgIERPTSwgYW5kIHJlZ2lzdGVyaW5nIGFuZCByZXNwb25kaW5nIHRv
IHVzZXItaW5pdGlhdGVkIGV2ZW50cy4KLQotICAgICAgICAgICAgICAjIyBIVE1MIFRhZwotCi0g
ICAgICAgICAgICAgIFRoZSBkZWZhdWx0IEhUTUwgdGFnIG5hbWUgdXNlZCBmb3IgYSB2aWV3J3Mg
RE9NIHJlcHJlc2VudGF0aW9uIGlzIGBkaXZgLiBUaGlzCi0gICAgICAgICAgICAgIGNhbiBiZSBj
dXN0b21pemVkIGJ5IHNldHRpbmcgdGhlIGB0YWdOYW1lYCBwcm9wZXJ0eS4gVGhlIGZvbGxvd2lu
ZyB2aWV3Ci0gICAgICAgICAgICAgIGNsYXNzOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgUGFyYWdyYXBoVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICB0YWdOYW1lOiAnZW0nCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBXb3VsZCByZXN1bHQgaW4gaW5zdGFuY2VzIHdpdGgg
dGhlIGZvbGxvd2luZyBIVE1MOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAg
ICAgPGVtIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij48L2VtPgotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICAjIyBIVE1MIGBjbGFzc2AgQXR0cmlidXRlCi0KLSAgICAg
ICAgICAgICAgVGhlIEhUTUwgYGNsYXNzYCBhdHRyaWJ1dGUgb2YgYSB2aWV3J3MgdGFnIGNhbiBi
ZSBzZXQgYnkgcHJvdmlkaW5nIGEKLSAgICAgICAgICAgICAgYGNsYXNzTmFtZXNgIHByb3BlcnR5
IHRoYXQgaXMgc2V0IHRvIGFuIGFycmF5IG9mIHN0cmluZ3M6Ci0KLSAgICAgICAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgICAgICAgICBNeVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0g
ICAgICAgICAgICAgICAgY2xhc3NOYW1lczogWydteS1jbGFzcycsICdteS1vdGhlci1jbGFzcydd
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBX
aWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24g
b2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJl
cjEiIGNsYXNzPSJlbWJlci12aWV3IG15LWNsYXNzIG15LW90aGVyLWNsYXNzIj48L2Rpdj4KLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYGNsYXNzYCBhdHRyaWJ1dGUgdmFsdWVz
IGNhbiBhbHNvIGJlIHNldCBieSBwcm92aWRpbmcgYSBgY2xhc3NOYW1lQmluZGluZ3NgCi0gICAg
ICAgICAgICAgIHByb3BlcnR5IHNldCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0aWVzIG5hbWVzIGZv
ciB0aGUgdmlldy4gVGhlIHJldHVybiB2YWx1ZQotICAgICAgICAgICAgICBvZiB0aGVzZSBwcm9w
ZXJ0aWVzIHdpbGwgYmUgYWRkZWQgYXMgcGFydCBvZiB0aGUgdmFsdWUgZm9yIHRoZSB2aWV3J3Mg
YGNsYXNzYAotICAgICAgICAgICAgICBhdHRyaWJ1dGUuIFRoZXNlIHByb3BlcnRpZXMgY2FuIGJl
IGNvbXB1dGVkIHByb3BlcnRpZXM6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICBNeVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAg
Y2xhc3NOYW1lQmluZGluZ3M6IFsncHJvcGVydHlBJywgJ3Byb3BlcnR5QiddLAotICAgICAgICAg
ICAgICAgIHByb3BlcnR5QTogJ2Zyb20tYScsCi0gICAgICAgICAgICAgICAgcHJvcGVydHlCOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChzb21lTG9naWMpIHsgcmV0dXJuICdm
cm9tLWInOyB9Ci0gICAgICAgICAgICAgICAgfS5wcm9wZXJ0eSgpCi0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3
IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAg
ICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12
aWV3IGZyb20tYSBmcm9tLWIiPjwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICBJZiB0aGUgdmFsdWUgb2YgYSBjbGFzcyBuYW1lIGJpbmRpbmcgcmV0dXJucyBhIGJvb2xl
YW4gdGhlIHByb3BlcnR5IG5hbWUKLSAgICAgICAgICAgICAgaXRzZWxmIHdpbGwgYmUgdXNlZCBh
cyB0aGUgY2xhc3MgbmFtZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gVGhlIGNsYXNzIG5hbWUK
LSAgICAgICAgICAgICAgd2lsbCBub3QgYmUgYWRkZWQgaWYgdGhlIHZhbHVlIGlzIGBmYWxzZWAg
b3IgYHVuZGVmaW5lZGAuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICBNeVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NO
YW1lQmluZGluZ3M6IFsnaG92ZXJlZCddLAotICAgICAgICAgICAgICAgIGhvdmVyZWQ6IHRydWUK
LSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdp
bGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBv
ZjoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVy
MSIgY2xhc3M9ImVtYmVyLXZpZXcgaG92ZXJlZCI+PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAot
Ci0gICAgICAgICAgICAgIFdoZW4gdXNpbmcgYm9vbGVhbiBjbGFzcyBuYW1lIGJpbmRpbmdzIHlv
dSBjYW4gc3VwcGx5IGEgc3RyaW5nIHZhbHVlIG90aGVyCi0gICAgICAgICAgICAgIHRoYW4gdGhl
IHByb3BlcnR5IG5hbWUgZm9yIHVzZSBhcyB0aGUgYGNsYXNzYCBIVE1MIGF0dHJpYnV0ZSBieSBh
cHBlbmRpbmcgdGhlCi0gICAgICAgICAgICAgIHByZWZlcnJlZCB2YWx1ZSBhZnRlciBhICI6IiBj
aGFyYWN0ZXIgd2hlbiBkZWZpbmluZyB0aGUgYmluZGluZzoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydhd2Vzb21lOnNvLXZlcnktY29vbCdd
LAotICAgICAgICAgICAgICAgIGF3ZXNvbWU6IHRydWUKLSAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFu
Y2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBgYGBo
dG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXcgc28t
dmVyeS1jb29sIj48L2Rpdj4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQm9v
bGVhbiB2YWx1ZSBjbGFzcyBuYW1lIGJpbmRpbmdzIHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSBp
biBhCi0gICAgICAgICAgICAgIGNhbWVsQ2FzZS1zdHlsZSBmb3JtYXQgd2lsbCBiZSBjb252ZXJ0
ZWQgdG8gYSBkYXNoZXJpemVkIGZvcm1hdDoKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICAgICAgICAgIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAg
ICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc1VyZ2VudCddLAotICAgICAgICAgICAgICAgIGlz
VXJnZW50OiB0cnVlCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAg
ICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVw
cmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8
ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGlzLXVyZ2VudCI+PC9kaXY+Ci0gICAg
ICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIENsYXNzIG5hbWUgYmluZGluZ3MgY2FuIGFs
c28gcmVmZXIgdG8gb2JqZWN0IHZhbHVlcyB0aGF0IGFyZSBmb3VuZCBieQotICAgICAgICAgICAg
ICB0cmF2ZXJzaW5nIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgdmlldyBpdHNlbGY6Ci0KLSAgICAg
ICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBNeVZpZXcgPSBFbWJlci5WaWV3
LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnbWVzc2FnZXMu
ZW1wdHknXQotICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBFbWJlci5PYmplY3QuY3JlYXRlKHsK
LSAgICAgICAgICAgICAgICAgIGVtcHR5OiB0cnVlCi0gICAgICAgICAgICAgICAgfSkKLSAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVz
dWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQot
ICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xh
c3M9ImVtYmVyLXZpZXcgZW1wdHkiPjwvZGl2PgotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBjbGFzcyBuYW1lIGZvciBhIHByb3BlcnR5IHdo
aWNoIGV2YWx1YXRlcyB0byB0cnVlIGFuZAotICAgICAgICAgICAgICBhbmQgYSBkaWZmZXJlbnQg
Y2xhc3MgbmFtZSBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHlvdSBjYW4gcGFzcyBhIGJpbmRp
bmcKLSAgICAgICAgICAgICAgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgLy8gQXBwbGllcyAnZW5hYmxlZCcgY2xhc3Mgd2hlbiBpc0VuYWJs
ZWQgaXMgdHJ1ZSBhbmQgJ2Rpc2FibGVkJyB3aGVuIGlzRW5hYmxlZCBpcyBmYWxzZQotICAgICAg
ICAgICAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgY2xhc3NOYW1lQmlu
ZGluZ3M6IFsnaXNFbmFibGVkOmVuYWJsZWQ6ZGlzYWJsZWQnXQotICAgICAgICAgICAgICAgIGlz
RW5hYmxlZDogdHJ1ZQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJl
cHJlc2VudGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAg
PGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBlbmFibGVkIj48L2Rpdj4KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2hlbiBpc0VuYWJsZWQgaXMgYGZhbHNlYCwg
dGhlIHJlc3VsdGluZyBIVE1MIHJlcHJlbnNlbnRhdGlvbiBsb29rcyBsaWtlCi0gICAgICAgICAg
ICAgIHRoaXM6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlk
PSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGRpc2FibGVkIj48L2Rpdj4KLSAgICAgICAgICAg
ICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhpcyBzeW50YXggb2ZmZXJzIHRoZSBjb252ZW5pZW5j
ZSB0byBhZGQgYSBjbGFzcyBpZiBhIHByb3BlcnR5IGlzIGBmYWxzZWA6Ci0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAvLyBBcHBsaWVzIG5vIGNsYXNzIHdoZW4g
aXNFbmFibGVkIGlzIHRydWUgYW5kIGNsYXNzICdkaXNhYmxlZCcgd2hlbiBpc0VuYWJsZWQgaXMg
ZmFsc2UKLSAgICAgICAgICAgICAgRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAg
IGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2lzRW5hYmxlZDo6ZGlzYWJsZWQnXQotICAgICAgICAgICAg
ICAgIGlzRW5hYmxlZDogdHJ1ZQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBI
VE1MIHJlcHJlc2VudGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAg
ICAgICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+PC9kaXY+Ci0gICAgICAg
ICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdoZW4gdGhlIGBpc0VuYWJsZWRgIHByb3BlcnR5
IG9uIHRoZSB2aWV3IGlzIHNldCB0byBgZmFsc2VgLCBpdCB3aWxsIHJlc3VsdAotICAgICAgICAg
ICAgICBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0K
LSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlkPSJlbWJlcjEiIGNs
YXNzPSJlbWJlci12aWV3IGRpc2FibGVkIj48L2Rpdj4KLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgVXBkYXRlcyB0byB0aGUgdGhlIHZhbHVlIG9mIGEgY2xhc3MgbmFtZSBiaW5k
aW5nIHdpbGwgcmVzdWx0IGluIGF1dG9tYXRpYwotICAgICAgICAgICAgICB1cGRhdGUgb2YgdGhl
ICBIVE1MIGBjbGFzc2AgYXR0cmlidXRlIGluIHRoZSB2aWV3J3MgcmVuZGVyZWQgSFRNTAotICAg
ICAgICAgICAgICByZXByZXNlbnRhdGlvbi4gSWYgdGhlIHZhbHVlIGJlY29tZXMgYGZhbHNlYCBv
ciBgdW5kZWZpbmVkYCB0aGUgY2xhc3MgbmFtZQotICAgICAgICAgICAgICB3aWxsIGJlIHJlbW92
ZWQuCi0KLSAgICAgICAgICAgICAgQm90aCBgY2xhc3NOYW1lc2AgYW5kIGBjbGFzc05hbWVCaW5k
aW5nc2AgYXJlIGNvbmNhdGVuYXRlZCBwcm9wZXJ0aWVzLiBTZWUKLSAgICAgICAgICAgICAgW0Vt
YmVyLk9iamVjdF0oL2FwaS9jbGFzc2VzL0VtYmVyLk9iamVjdC5odG1sKSBkb2N1bWVudGF0aW9u
IGZvciBtb3JlCi0gICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGNvbmNhdGVuYXRlZCBw
cm9wZXJ0aWVzLgotCi0gICAgICAgICAgICAgICMjIEhUTUwgQXR0cmlidXRlcwotCi0gICAgICAg
ICAgICAgIFRoZSBIVE1MIGF0dHJpYnV0ZSBzZWN0aW9uIG9mIGEgdmlldydzIHRhZyBjYW4gYmUg
c2V0IGJ5IHByb3ZpZGluZyBhbgotICAgICAgICAgICAgICBgYXR0cmlidXRlQmluZGluZ3NgIHBy
b3BlcnR5IHNldCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvbiB0aGUgdmlldy4KLSAg
ICAgICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUg
dXNlZCBhcyB0aGUgdmFsdWUgb2YgdGhlIHZpZXcncwotICAgICAgICAgICAgICBIVE1MIGFzc29j
aWF0ZWQgYXR0cmlidXRlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgQW5jaG9yVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICB0
YWdOYW1lOiAnYScsCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnaHJlZidd
LAotICAgICAgICAgICAgICAgIGhyZWY6ICdodHRwOi8vZ29vZ2xlLmNvbScKLSAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0IGlu
IHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAg
ICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxhIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJl
ci12aWV3IiBocmVmPSJodHRwOi8vZ29vZ2xlLmNvbSI+PC9hPgotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBPbmUgcHJvcGVydHkgY2FuIGJlIG1hcHBlZCBvbiB0byBhbm90aGVy
IGJ5IHBsYWNpbmcgYSAiOiIgYmV0d2VlbgotICAgICAgICAgICAgICB0aGUgc291cmNlIHByb3Bl
cnR5IGFuZCB0aGUgZGVzdGluYXRpb24gcHJvcGVydHk6Ci0KLSAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICBBbmNob3JWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewot
ICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdhJywKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVC
aW5kaW5nczogWyd1cmw6aHJlZiddLAotICAgICAgICAgICAgICAgIHVybDogJ2h0dHA6Ly9nb29n
bGUuY29tJwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAg
ICAgICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2Vu
dGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGEgaWQ9
ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj48L2E+
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIElmIHRoZSByZXR1cm4gdmFsdWUg
b2YgYW4gYGF0dHJpYnV0ZUJpbmRpbmdzYCBtb25pdG9yZWQgcHJvcGVydHkgaXMgYSBib29sZWFu
Ci0gICAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB3aWxsIGZvbGxvdyBIVE1MJ3MgcGF0dGVybiBv
ZiByZXBlYXRpbmcgdGhlIGF0dHJpYnV0ZSdzIG5hbWUgYXMKLSAgICAgICAgICAgICAgaXRzIHZh
bHVlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgTXlUZXh0
SW5wdXQgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgdGFnTmFtZTogJ2lu
cHV0JywKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydkaXNhYmxlZCddLAot
ICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlCi0gICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNl
cyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0KLSAgICAgICAgICAgICAgYGBgaHRt
bAotICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciIGRp
c2FibGVkPSJkaXNhYmxlZCIgLz4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
YGF0dHJpYnV0ZUJpbmRpbmdzYCBjYW4gcmVmZXIgdG8gY29tcHV0ZWQgcHJvcGVydGllczoKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIE15VGV4dElucHV0ID0g
RW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIHRhZ05hbWU6ICdpbnB1dCcsCi0g
ICAgICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnZGlzYWJsZWQnXSwKLSAgICAgICAg
ICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoc29t
ZUxvZ2ljKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0ucHJvcGVydHkoKQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVXBkYXRlcyB0byB0aGUg
dGhlIHByb3BlcnR5IG9mIGFuIGF0dHJpYnV0ZSBiaW5kaW5nIHdpbGwgcmVzdWx0IGluIGF1dG9t
YXRpYwotICAgICAgICAgICAgICB1cGRhdGUgb2YgdGhlICBIVE1MIGF0dHJpYnV0ZSBpbiB0aGUg
dmlldydzIHJlbmRlcmVkIEhUTUwgcmVwcmVzZW50YXRpb24uCi0KLSAgICAgICAgICAgICAgYGF0
dHJpYnV0ZUJpbmRpbmdzYCBpcyBhIGNvbmNhdGVuYXRlZCBwcm9wZXJ0eS4gU2VlIFtFbWJlci5P
YmplY3RdKC9hcGkvY2xhc3Nlcy9FbWJlci5PYmplY3QuaHRtbCkKLSAgICAgICAgICAgICAgZG9j
dW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb25jYXRlbmF0ZWQgcHJvcGVy
dGllcy4KLQotICAgICAgICAgICAgICAjIyBUZW1wbGF0ZXMKLQotICAgICAgICAgICAgICBUaGUg
SFRNTCBjb250ZW50cyBvZiBhIHZpZXcncyByZW5kZXJlZCByZXByZXNlbnRhdGlvbiBhcmUgZGV0
ZXJtaW5lZCBieSBpdHMKLSAgICAgICAgICAgICAgdGVtcGxhdGUuIFRlbXBsYXRlcyBjYW4gYmUg
YW55IGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhbiBvcHRpb25hbCBjb250ZXh0Ci0gICAgICAgICAg
ICAgIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBIVE1MIHRoYXQgd2lsbCBiZSBp
bnNlcnRlZCB3aXRoaW4gdGhlCi0gICAgICAgICAgICAgIHZpZXcncyB0YWcuIE1vc3QgdHlwaWNh
bGx5IGluIEVtYmVyIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGNvbXBpbGVkCi0gICAgICAgICAg
ICAgIGBFbWJlci5IYW5kbGViYXJzYCB0ZW1wbGF0ZS4KLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAg
ICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ0kgYW0gdGhlIHRl
bXBsYXRlJykKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNl
bnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYg
aWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPkkgYW0gdGhlIHRlbXBsYXRlPC9kaXY+Ci0g
ICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpdGhpbiBhbiBFbWJlciBhcHBsaWNh
dGlvbiBpcyBtb3JlIGNvbW1vbiB0byBkZWZpbmUgYSBIYW5kbGViYXJzIHRlbXBsYXRlcyBhcwot
ICAgICAgICAgICAgICBwYXJ0IG9mIGEgcGFnZToKLQotICAgICAgICAgICAgICBgYGBodG1sCi0g
ICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC94LWhhbmRsZWJhcnMnIGRhdGEtdGVtcGxh
dGUtbmFtZT0nc29tZS10ZW1wbGF0ZSc+Ci0gICAgICAgICAgICAgICAgSGVsbG8KLSAgICAgICAg
ICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEFuZCBh
c3NvY2lhdGUgaXQgYnkgbmFtZSB1c2luZyBhIHZpZXcncyBgdGVtcGxhdGVOYW1lYCBwcm9wZXJ0
eToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0g
RW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJ3NvbWUt
dGVtcGxhdGUnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBJZiB5b3UgaGF2ZSBuZXN0ZWQgcmVzb3VyY2VzLCB5b3VyIEhhbmRsZWJhcnMgdGVt
cGxhdGUgd2lsbCBsb29rIGxpa2UgdGhpczoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0gICAg
ICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC94LWhhbmRsZWJhcnMnIGRhdGEtdGVtcGxhdGUt
bmFtZT0ncG9zdHMvbmV3Jz4KLSAgICAgICAgICAgICAgICA8aDE+TmV3IFBvc3Q8L2gxPgotICAg
ICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QW5kIGB0ZW1wbGF0ZU5hbWVgIHByb3BlcnR5OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgICAgICAgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgICAg
ICAgICAgdGVtcGxhdGVOYW1lOiAncG9zdHMvbmV3JwotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVXNpbmcgYSB2YWx1ZSBmb3IgYHRlbXBsYXRl
TmFtZWAgdGhhdCBkb2VzIG5vdCBoYXZlIGEgSGFuZGxlYmFycyB0ZW1wbGF0ZQotICAgICAgICAg
ICAgICB3aXRoIGEgbWF0Y2hpbmcgYGRhdGEtdGVtcGxhdGUtbmFtZWAgYXR0cmlidXRlIHdpbGwg
dGhyb3cgYW4gZXJyb3IuCi0KLSAgICAgICAgICAgICAgRm9yIHZpZXdzIGNsYXNzZXMgdGhhdCBt
YXkgaGF2ZSBhIHRlbXBsYXRlIGxhdGVyIGRlZmluZWQgKGUuZy4gYXMgdGhlIGJsb2NrCi0gICAg
ICAgICAgICAgIHBvcnRpb24gb2YgYSBge3t2aWV3fX1gIEhhbmRsZWJhcnMgaGVscGVyIGNhbGwg
aW4gYW5vdGhlciB0ZW1wbGF0ZSBvciBpbgotICAgICAgICAgICAgICBhIHN1YmNsYXNzKSwgeW91
IGNhbiBwcm92aWRlIGEgYGRlZmF1bHRUZW1wbGF0ZWAgcHJvcGVydHkgc2V0IHRvIGNvbXBpbGVk
Ci0gICAgICAgICAgICAgIHRlbXBsYXRlIGZ1bmN0aW9uLiBJZiBhIHRlbXBsYXRlIGlzIG5vdCBs
YXRlciBwcm92aWRlZCBmb3IgdGhlIHZpZXcgaW5zdGFuY2UKLSAgICAgICAgICAgICAgdGhlIGBk
ZWZhdWx0VGVtcGxhdGVgIHZhbHVlIHdpbGwgYmUgdXNlZDoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAg
ICAgICAgICAgICAgIGRlZmF1bHRUZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCdJ
IHdhcyB0aGUgZGVmYXVsdCcpLAotICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBudWxsLAotICAg
ICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogbnVsbAotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgV2lsbCByZXN1bHQgaW4gaW5zdGFuY2VzIHdp
dGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAgICAgICAgICAgICBgYGBodG1sCi0g
ICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPkkgd2FzIHRo
ZSBkZWZhdWx0PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIElmIGEg
YHRlbXBsYXRlYCBvciBgdGVtcGxhdGVOYW1lYCBpcyBwcm92aWRlZCBpdCB3aWxsIHRha2UgcHJl
Y2VkZW5jZSBvdmVyCi0gICAgICAgICAgICAgIGBkZWZhdWx0VGVtcGxhdGVgOgotCi0gICAgICAg
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4
dGVuZCh7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdFRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJz
LmNvbXBpbGUoJ0kgd2FzIHRoZSBkZWZhdWx0JykKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgYVZpZXcgPSBBVmlldy5jcmVhdGUoewotICAgICAgICAgICAgICAgIHRlbXBsYXRl
OiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ0kgd2FzIHRoZSB0ZW1wbGF0ZSwgbm90IGRlZmF1
bHQnKQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAg
ICAgV2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MIHJlcHJlc2VudGF0aW9uIHdoZW4g
cmVuZGVyZWQ6Ci0KLSAgICAgICAgICAgICAgYGBgaHRtbAotICAgICAgICAgICAgICA8ZGl2IGlk
PSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij5JIHdhcyB0aGUgdGVtcGxhdGUsIG5vdCBkZWZh
dWx0PC9kaXY+Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICMjIFZpZXcgQ29u
dGV4dAotCi0gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNvbnRleHQgb2YgdGhlIGNvbXBpbGVk
IHRlbXBsYXRlIGlzIHRoZSB2aWV3J3MgY29udHJvbGxlcjoKLQotICAgICAgICAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAg
ICAgICAgICAgICAgIHRlbXBsYXRlOiBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUoJ0hlbGxvIHt7
ZXhjaXRlZEdyZWV0aW5nfX0nKQotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICBh
Q29udHJvbGxlciA9IEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgICAgIGZpcnN0
TmFtZTogJ0JhcnJ5JywKLSAgICAgICAgICAgICAgICBleGNpdGVkR3JlZXRpbmc6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCJjb250ZW50LmZpcnN0TmFt
ZSIpICsgIiEhISIKLSAgICAgICAgICAgICAgICB9LnByb3BlcnR5KCkKLSAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgYVZpZXcgPSBBVmlldy5jcmVhdGUoewotICAgICAgICAgICAg
ICAgIGNvbnRyb2xsZXI6IGFDb250cm9sbGVyCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBXaWxsIHJlc3VsdCBpbiBhbiBIVE1MIHJlcHJlc2Vu
dGF0aW9uIG9mOgotCi0gICAgICAgICAgICAgIGBgYGh0bWwKLSAgICAgICAgICAgICAgPGRpdiBp
ZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+SGVsbG8gQmFycnkhISE8L2Rpdj4KLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQSBjb250ZXh0IGNhbiBhbHNvIGJlIGV4cGxp
Y2l0bHkgc3VwcGxpZWQgdGhyb3VnaCB0aGUgdmlldydzIGBjb250ZXh0YAotICAgICAgICAgICAg
ICBwcm9wZXJ0eS4gSWYgdGhlIHZpZXcgaGFzIG5laXRoZXIgYGNvbnRleHRgIG5vciBgY29udHJv
bGxlcmAgcHJvcGVydGllcywgdGhlCi0gICAgICAgICAgICAgIGBwYXJlbnRWaWV3YCdzIGNvbnRl
eHQgd2lsbCBiZSB1c2VkLgotCi0gICAgICAgICAgICAgICMjIExheW91dHMKLQotICAgICAgICAg
ICAgICBWaWV3cyBjYW4gaGF2ZSBhIHNlY29uZGFyeSB0ZW1wbGF0ZSB0aGF0IHdyYXBzIHRoZWly
IG1haW4gdGVtcGxhdGUuIExpa2UKLSAgICAgICAgICAgICAgcHJpbWFyeSB0ZW1wbGF0ZXMsIGxh
eW91dHMgY2FuIGJlIGFueSBmdW5jdGlvbiB0aGF0ICBhY2NlcHRzIGFuIG9wdGlvbmFsCi0gICAg
ICAgICAgICAgIGNvbnRleHQgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIEhUTUwg
dGhhdCB3aWxsIGJlIGluc2VydGVkIGluc2lkZQotICAgICAgICAgICAgICB2aWV3J3MgdGFnLiBW
aWV3cyB3aG9zZSBIVE1MIGVsZW1lbnQgaXMgc2VsZiBjbG9zaW5nIChlLmcuIGA8aW5wdXQgLz5g
KQotICAgICAgICAgICAgICBjYW5ub3QgaGF2ZSBhIGxheW91dCBhbmQgdGhpcyBwcm9wZXJ0eSB3
aWxsIGJlIGlnbm9yZWQuCi0KLSAgICAgICAgICAgICAgTW9zdCB0eXBpY2FsbHkgaW4gRW1iZXIg
YSBsYXlvdXQgd2lsbCBiZSBhIGNvbXBpbGVkIGBFbWJlci5IYW5kbGViYXJzYAotICAgICAgICAg
ICAgICB0ZW1wbGF0ZS4KLQotICAgICAgICAgICAgICBBIHZpZXcncyBsYXlvdXQgY2FuIGJlIHNl
dCBkaXJlY3RseSB3aXRoIHRoZSBgbGF5b3V0YCBwcm9wZXJ0eSBvciByZWZlcmVuY2UKLSAgICAg
ICAgICAgICAgYW4gZXhpc3RpbmcgSGFuZGxlYmFycyB0ZW1wbGF0ZSBieSBuYW1lIHdpdGggdGhl
IGBsYXlvdXROYW1lYCBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICBBIHRlbXBsYXRlIHVzZWQg
YXMgYSBsYXlvdXQgbXVzdCBjb250YWluIGEgc2luZ2xlIHVzZSBvZiB0aGUgSGFuZGxlYmFycwot
ICAgICAgICAgICAgICBge3t5aWVsZH19YCBoZWxwZXIuIFRoZSBIVE1MIGNvbnRlbnRzIG9mIGEg
dmlldydzIHJlbmRlcmVkIGB0ZW1wbGF0ZWAgd2lsbCBiZQotICAgICAgICAgICAgICBpbnNlcnRl
ZCBhdCB0aGlzIGxvY2F0aW9uOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgQVZpZXdXaXRoTGF5b3V0ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAg
ICAgICAgIGxheW91dDogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCI8ZGl2IGNsYXNzPSdteS1k
ZWNvcmF0aXZlLWNsYXNzJz57e3lpZWxkfX08L2Rpdj4iKSwKLSAgICAgICAgICAgICAgICB0ZW1w
bGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJJIGdvdCB3cmFwcGVkIikKLSAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIFdpbGwgcmVzdWx0
IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLQotICAg
ICAgICAgICAgICBgYGBodG1sCi0gICAgICAgICAgICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9
ImVtYmVyLXZpZXciPgotICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im15LWRlY29yYXRpdmUt
Y2xhc3MiPgotICAgICAgICAgICAgICAgICAgSSBnb3Qgd3JhcHBlZAotICAgICAgICAgICAgICAg
IDwvZGl2PgotICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAg
ICAgICAgICAgU2VlIFtFbWJlci5IYW5kbGViYXJzLmhlbHBlcnMueWllbGRdKC9hcGkvY2xhc3Nl
cy9FbWJlci5IYW5kbGViYXJzLmhlbHBlcnMuaHRtbCNtZXRob2RfeWllbGQpCi0gICAgICAgICAg
ICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgICMjIFJlc3BvbmRpbmcg
dG8gQnJvd3NlciBFdmVudHMKLQotICAgICAgICAgICAgICBWaWV3cyBjYW4gcmVzcG9uZCB0byB1
c2VyLWluaXRpYXRlZCBldmVudHMgaW4gb25lIG9mIHRocmVlIHdheXM6IG1ldGhvZAotICAgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbiwgdGhyb3VnaCBhbiBldmVudCBtYW5hZ2VyLCBhbmQgdGhy
b3VnaCBge3thY3Rpb259fWAgaGVscGVyIHVzZQotICAgICAgICAgICAgICBpbiB0aGVpciB0ZW1w
bGF0ZSBvciBsYXlvdXQuCi0KLSAgICAgICAgICAgICAgIyMjIE1ldGhvZCBJbXBsZW1lbnRhdGlv
bgotCi0gICAgICAgICAgICAgIFZpZXdzIGNhbiByZXNwb25kIHRvIHVzZXItaW5pdGlhdGVkIGV2
ZW50cyBieSBpbXBsZW1lbnRpbmcgYSBtZXRob2QgdGhhdAotICAgICAgICAgICAgICBtYXRjaGVz
IHRoZSBldmVudCBuYW1lLiBBIGBqUXVlcnkuRXZlbnRgIG9iamVjdCB3aWxsIGJlIHBhc3NlZCBh
cyB0aGUKLSAgICAgICAgICAgICAgYXJndW1lbnQgdG8gdGhpcyBtZXRob2QuCi0KLSAgICAgICAg
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAg
ICAgICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIHdoZW4gd2hlbiBhbiBpbnN0YW5jZSdzCi0gICAg
ICAgICAgICAgICAgICAvLyByZW5kZXJlZCBlbGVtZW50IGlzIGNsaWNrZWQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAg
ICAgICAjIyMgRXZlbnQgTWFuYWdlcnMKLQotICAgICAgICAgICAgICBWaWV3cyBjYW4gZGVmaW5l
IGFuIG9iamVjdCBhcyB0aGVpciBgZXZlbnRNYW5hZ2VyYCBwcm9wZXJ0eS4gVGhpcyBvYmplY3Qg
Y2FuCi0gICAgICAgICAgICAgIHRoZW4gaW1wbGVtZW50IG1ldGhvZHMgdGhhdCBtYXRjaCB0aGUg
ZGVzaXJlZCBldmVudCBuYW1lcy4gTWF0Y2hpbmcgZXZlbnRzCi0gICAgICAgICAgICAgIHRoYXQg
b2NjdXIgb24gdGhlIHZpZXcncyByZW5kZXJlZCBIVE1MIG9yIHRoZSByZW5kZXJlZCBIVE1MIG9m
IGFueSBvZiBpdHMgRE9NCi0gICAgICAgICAgICAgIGRlc2NlbmRhbnRzIHdpbGwgdHJpZ2dlciB0
aGlzIG1ldGhvZC4gQSBgalF1ZXJ5LkV2ZW50YCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQKLSAgICAg
ICAgICAgICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QgYW5kIGFuICBgRW1i
ZXIuVmlld2Agb2JqZWN0IGFzIHRoZQotICAgICAgICAgICAgICBzZWNvbmQuIFRoZSBgRW1iZXIu
Vmlld2Agd2lsbCBiZSB0aGUgdmlldyB3aG9zZSByZW5kZXJlZCBIVE1MIHdhcyBpbnRlcmFjdGVk
Ci0gICAgICAgICAgICAgIHdpdGguIFRoaXMgbWF5IGJlIHRoZSB2aWV3IHdpdGggdGhlIGBldmVu
dE1hbmFnZXJgIHByb3BlcnR5IG9yIG9uZSBvZiBpdHMKLSAgICAgICAgICAgICAgZGVzY2VuZGVu
dCB2aWV3cy4KLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIEFW
aWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlcjog
RW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgICAgICAgICAgICBkb3VibGVDbGljazogZnVu
Y3Rpb24oZXZlbnQsIHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBjYWxs
ZWQgd2hlbiB3aGVuIGFuIGluc3RhbmNlJ3MKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVuZGVy
ZWQgZWxlbWVudCBvciBhbnkgcmVuZGVyaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
aXMgdmlld3MncyBkZXNjZW5kZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIGlz
IGNsaWNrZWQKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KQotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQW4gZXZlbnQg
ZGVmaW5lZCBmb3IgYW4gZXZlbnQgbWFuYWdlciB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZXZlbnRz
IG9mIHRoZQotICAgICAgICAgICAgICBzYW1lIG5hbWUgaGFuZGxlZCB0aHJvdWdoIG1ldGhvZHMg
b24gdGhlIHZpZXcuCi0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICBtb3VzZUVudGVy
OiBmdW5jdGlvbihldmVudCkgewotICAgICAgICAgICAgICAgICAgLy8gd2lsbCBuZXZlciB0cmln
Z2VyLgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyOiBF
bWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0
aW9uKGV2ZW50LCB2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRha2VzIHByZWNlZGVu
Y2Ugb3ZlciBBVmlldyNtb3VzZUVudGVyCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIFNpbWlsYXJseSBhIHZpZXcncyBldmVudCBtYW5hZ2VyIHdpbGwgdGFrZSBwcmVjZWRl
bmNlIGZvciBldmVudHMgb2YgYW55IHZpZXdzCi0gICAgICAgICAgICAgIHJlbmRlcmVkIGFzIGEg
ZGVzY2VuZGVudC4gQSBtZXRob2QgbmFtZSB0aGF0IG1hdGNoZXMgYW4gZXZlbnQgbmFtZSB3aWxs
IG5vdAotICAgICAgICAgICAgICBiZSBjYWxsZWQgaWYgdGhlIHZpZXcgaW5zdGFuY2Ugd2FzIHJl
bmRlcmVkIGluc2lkZSB0aGUgSFRNTCByZXByZXNlbnRhdGlvbiBvZgotICAgICAgICAgICAgICBh
IHZpZXcgdGhhdCBoYXMgYW4gYGV2ZW50TWFuYWdlcmAgcHJvcGVydHkgZGVmaW5lZCB0aGF0IGhh
bmRsZXMgZXZlbnRzIG9mIHRoZQotICAgICAgICAgICAgICBuYW1lLiBFdmVudHMgbm90IGhhbmRs
ZWQgYnkgdGhlIGV2ZW50IG1hbmFnZXIgd2lsbCBzdGlsbCB0cmlnZ2VyIG1ldGhvZCBjYWxscwot
ICAgICAgICAgICAgICBvbiB0aGUgZGVzY2VuZGVudC4KLQotICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgIE91dGVyVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAg
ICAgICAgICAgICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJvdXRlciB7
eyN2aWV3IElubmVyVmlld319aW5uZXJ7ey92aWV3fX0gb3V0ZXIiKSwKLSAgICAgICAgICAgICAg
ICBldmVudE1hbmFnZXI6IEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICAgICAgICAgICAg
bW91c2VFbnRlcjogZnVuY3Rpb24oZXZlbnQsIHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdmlldyBtaWdodCBiZSBpbnN0YW5jZSBvZiBlaXRoZXIKLSAgICAgICAgICAgICAgICAgICAg
Ly8gT3V0ZXJWaWV3IG9yIElubmVyVmlldyBkZXBlbmRpbmcgb24KLSAgICAgICAgICAgICAgICAg
ICAgLy8gd2hlcmUgb24gdGhlIHBhZ2UgdGhlIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJlZAotICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgIElubmVyVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgIC8vIHdp
bGwgYmUgY2FsbGVkIGlmIHJlbmRlcmVkIGluc2lkZQotICAgICAgICAgICAgICAgICAgLy8gYW4g
T3V0ZXJWaWV3IGJlY2F1c2UgT3V0ZXJWaWV3J3MKLSAgICAgICAgICAgICAgICAgIC8vIGV2ZW50
TWFuYWdlciBkb2Vzbid0IGhhbmRsZSBjbGljayBldmVudHMKLSAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpZiByZW5kZXJlZCBpbnNpZGUKLSAgICAg
ICAgICAgICAgICAgIC8vIGFuIE91dGVyVmlldy4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAjIyMgSGFuZGxl
YmFycyBge3thY3Rpb259fWAgSGVscGVyCi0KLSAgICAgICAgICAgICAgU2VlIFtIYW5kbGViYXJz
LmhlbHBlcnMuYWN0aW9uXSgvYXBpL2NsYXNzZXMvRW1iZXIuSGFuZGxlYmFycy5oZWxwZXJzLmh0
bWwjbWV0aG9kX2FjdGlvbikuCi0KLSAgICAgICAgICAgICAgIyMjIEV2ZW50IE5hbWVzCi0KLSAg
ICAgICAgICAgICAgQWxsIG9mIHRoZSBldmVudCBoYW5kbGluZyBhcHByb2FjaGVzIGRlc2NyaWJl
ZCBhYm92ZSByZXNwb25kIHRvIHRoZSBzYW1lIHNldAotICAgICAgICAgICAgICBvZiBldmVudHMu
IFRoZSBuYW1lcyBvZiB0aGUgYnVpbHQtaW4gZXZlbnRzIGFyZSBsaXN0ZWQgYmVsb3cuIChUaGUg
aGFzaCBvZgotICAgICAgICAgICAgICBidWlsdC1pbiBldmVudHMgZXhpc3RzIGluIGBFbWJlci5F
dmVudERpc3BhdGNoZXJgLikgQWRkaXRpb25hbCwgY3VzdG9tIGV2ZW50cwotICAgICAgICAgICAg
ICBjYW4gYmUgcmVnaXN0ZXJlZCBieSB1c2luZyBgRW1iZXIuQXBwbGljYXRpb24uY3VzdG9tRXZl
bnRzYC4KLQotICAgICAgICAgICAgICBUb3VjaCBldmVudHM6Ci0KLSAgICAgICAgICAgICAgKiBg
dG91Y2hTdGFydGAKLSAgICAgICAgICAgICAgKiBgdG91Y2hNb3ZlYAotICAgICAgICAgICAgICAq
IGB0b3VjaEVuZGAKLSAgICAgICAgICAgICAgKiBgdG91Y2hDYW5jZWxgCi0KLSAgICAgICAgICAg
ICAgS2V5Ym9hcmQgZXZlbnRzCi0KLSAgICAgICAgICAgICAgKiBga2V5RG93bmAKLSAgICAgICAg
ICAgICAgKiBga2V5VXBgCi0gICAgICAgICAgICAgICogYGtleVByZXNzYAotCi0gICAgICAgICAg
ICAgIE1vdXNlIGV2ZW50cwotCi0gICAgICAgICAgICAgICogYG1vdXNlRG93bmAKLSAgICAgICAg
ICAgICAgKiBgbW91c2VVcGAKLSAgICAgICAgICAgICAgKiBgY29udGV4dE1lbnVgCi0gICAgICAg
ICAgICAgICogYGNsaWNrYAotICAgICAgICAgICAgICAqIGBkb3VibGVDbGlja2AKLSAgICAgICAg
ICAgICAgKiBgbW91c2VNb3ZlYAotICAgICAgICAgICAgICAqIGBmb2N1c0luYAotICAgICAgICAg
ICAgICAqIGBmb2N1c091dGAKLSAgICAgICAgICAgICAgKiBgbW91c2VFbnRlcmAKLSAgICAgICAg
ICAgICAgKiBgbW91c2VMZWF2ZWAKLQotICAgICAgICAgICAgICBGb3JtIGV2ZW50czoKLQotICAg
ICAgICAgICAgICAqIGBzdWJtaXRgCi0gICAgICAgICAgICAgICogYGNoYW5nZWAKLSAgICAgICAg
ICAgICAgKiBgZm9jdXNJbmAKLSAgICAgICAgICAgICAgKiBgZm9jdXNPdXRgCi0gICAgICAgICAg
ICAgICogYGlucHV0YAotCi0gICAgICAgICAgICAgIEhUTUw1IGRyYWcgYW5kIGRyb3AgZXZlbnRz
OgotCi0gICAgICAgICAgICAgICogYGRyYWdTdGFydGAKLSAgICAgICAgICAgICAgKiBgZHJhZ2AK
LSAgICAgICAgICAgICAgKiBgZHJhZ0VudGVyYAotICAgICAgICAgICAgICAqIGBkcmFnTGVhdmVg
Ci0gICAgICAgICAgICAgICogYGRyYWdPdmVyYAotICAgICAgICAgICAgICAqIGBkcmFnRW5kYAot
ICAgICAgICAgICAgICAqIGBkcm9wYAotCi0gICAgICAgICAgICAgICMjIEhhbmRsZWJhcnMgYHt7
dmlld319YCBIZWxwZXIKLQotICAgICAgICAgICAgICBPdGhlciBgRW1iZXIuVmlld2AgaW5zdGFu
Y2VzIGNhbiBiZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIGEgdmlldydzIHRlbXBsYXRlIGJ5Ci0gICAg
ICAgICAgICAgIHVzaW5nIHRoZSBge3t2aWV3fX1gIEhhbmRsZWJhcnMgaGVscGVyLiBTZWUgW0Vt
YmVyLkhhbmRsZWJhcnMuaGVscGVycy52aWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIuSGFuZGxlYmFy
cy5oZWxwZXJzLmh0bWwjbWV0aG9kX3ZpZXcpCi0gICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFs
IGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAgIEBjbGFzcyBWaWV3Ci0gICAgICAgICAgICAg
IEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAgICAgICAgQGV4dGVuZHMgRW1iZXIuQ29yZVZpZXcK
LSAgICAgICAgICAgICovCi0gICAgICAgIHZhciBWaWV3ID0gQ29yZVZpZXcuZXh0ZW5kKHsKLQot
ICAgICAgICAgICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogWydjbGFzc05hbWVzJywgJ2NsYXNz
TmFtZUJpbmRpbmdzJywgJ2F0dHJpYnV0ZUJpbmRpbmdzJ10sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgaXNWaWV3Ci0gICAgICAgICAgICAgICAgICAg
IEB0eXBlIEJvb2xlYW4KLSAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
aXNWaWV3OiB0cnVlLAotCi0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBURU1QTEFU
RSBTVVBQT1JUCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIGxvb2t1cCBpZiBubyB0ZW1wbGF0
ZSBpcyBwcm92aWRlZC4KLQotICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IGBFbWJlci5W
aWV3YCB3aWxsIGxvb2t1cCBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGluCi0gICAgICAgICAg
ICAgICAgICAgIGBFbWJlci5URU1QTEFURVNgIChhIHNoYXJlZCBnbG9iYWwgb2JqZWN0KS4KLQot
ICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgdGVtcGxhdGVOYW1lCi0gICAgICAgICAgICAg
ICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiBudWxsLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGxheW91
dCB0byBsb29rdXAgaWYgbm8gbGF5b3V0IGlzIHByb3ZpZGVkLgotCi0gICAgICAgICAgICAgICAg
ICAgIEJ5IGRlZmF1bHQgYEVtYmVyLlZpZXdgIHdpbGwgbG9va3VwIGEgdGVtcGxhdGUgd2l0aCB0
aGlzIG5hbWUgaW4KLSAgICAgICAgICAgICAgICAgICAgYEVtYmVyLlRFTVBMQVRFU2AgKGEgc2hh
cmVkIGdsb2JhbCBvYmplY3QpLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBsYXlv
dXROYW1lCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAg
ICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbGF5
b3V0TmFtZTogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFVz
ZWQgdG8gaWRlbnRpZnkgdGhpcyB2aWV3IGR1cmluZyBkZWJ1Z2dpbmcKLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgaW5zdHJ1bWVudERpc3BsYXkKLSAgICAgICAgICAgICAgICAgICAg
QHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5zdHJ1bWVu
dERpc3BsYXk6IGNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlz
LmhlbHBlck5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd7eycgKyB0aGlzLmhl
bHBlck5hbWUgKyAnfX0nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIHRlbXBsYXRlIHVzZWQgdG8g
cmVuZGVyIHRoZSB2aWV3LiBUaGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQKLSAgICAgICAg
ICAgICAgICAgICAgYWNjZXB0cyBhbiBvcHRpb25hbCBjb250ZXh0IHBhcmFtZXRlciBhbmQgcmV0
dXJucyBhIHN0cmluZyBvZiBIVE1MIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBp
bnNlcnRlZCBpbnRvIHRoZSBET00gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCB2aWV3LgotCi0gICAg
ICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgc2V0IHRoZSBgdGVtcGxhdGVO
YW1lYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIHNldHRpbmcKLSAgICAgICAgICAgICAgICAgICAgdGhl
IHRlbXBsYXRlIHlvdXJzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB0ZW1w
bGF0ZQotICAgICAgICAgICAgICAgICAgICBAdHlwZSBGdW5jdGlvbgotICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHRlbXBsYXRlOiBjb21wdXRlZCgndGVtcGxhdGVOYW1lJywgZnVu
Y3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gZ2V0KHRoaXMsICd0ZW1w
bGF0ZU5hbWUnKSwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGb3JO
YW1lKHRlbXBsYXRlTmFtZSwgJ3RlbXBsYXRlJyk7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoIllvdSBzcGVjaWZpZWQgdGhlIHRlbXBsYXRlTmFtZSAiICsgdGVtcGxhdGVOYW1lICsg
IiBmb3IgIiArIHRoaXMgKyAiLCBidXQgaXQgZGlkIG5vdCBleGlzdC4iLCAhdGVtcGxhdGVOYW1l
IHx8IHRlbXBsYXRlKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZSB8fCBnZXQo
dGhpcywgJ2RlZmF1bHRUZW1wbGF0ZScpOwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAg
IC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgY29udHJvbGxlciBtYW5hZ2luZyB0aGlzIHZp
ZXcuIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0LCBpdCB3aWxsIGJlCi0gICAgICAgICAgICAgICAg
ICAgIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIHRlbXBsYXRlLgotCi0gICAgICAgICAg
ICAgICAgICAgIEBwcm9wZXJ0eSBjb250cm9sbGVyCi0gICAgICAgICAgICAgICAgICAgIEB0eXBl
IE9iamVjdAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNv
bXB1dGVkKCdfcGFyZW50VmlldycsIGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZh
ciBwYXJlbnRWaWV3ID0gZ2V0KHRoaXMsICdfcGFyZW50VmlldycpOwotICAgICAgICAgICAgICAg
IHJldHVybiBwYXJlbnRWaWV3ID8gZ2V0KHBhcmVudFZpZXcsICdjb250cm9sbGVyJykgOiBudWxs
OwotICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBBIHZpZXcgbWF5IGNvbnRhaW4gYSBsYXlvdXQuIEEgbGF5b3V0IGlzIGEgcmVndWxhciB0ZW1w
bGF0ZSBidXQKLSAgICAgICAgICAgICAgICAgICAgc3VwZXJzZWRlcyB0aGUgYHRlbXBsYXRlYCBw
cm9wZXJ0eSBkdXJpbmcgcmVuZGVyaW5nLiBJdCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2liaWxpdHkgb2YgdGhlIGxheW91dCB0ZW1wbGF0ZSB0byByZXRyaWV2ZSB0aGUgYHRl
bXBsYXRlYAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBmcm9tIHRoZSB2aWV3IChvciBh
bHRlcm5hdGl2ZWx5LCBjYWxsIGBIYW5kbGViYXJzLmhlbHBlcnMueWllbGRgLAotICAgICAgICAg
ICAgICAgICAgICBge3t5aWVsZH19YCkgdG8gcmVuZGVyIGl0IGluIHRoZSBjb3JyZWN0IGxvY2F0
aW9uLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBhIHZpZXcgdGhh
dCBoYXMgYSBzaGFyZWQgd3JhcHBlciwgYnV0IHdoaWNoIGRlbGVnYXRlcwotICAgICAgICAgICAg
ICAgICAgICB0aGUgcmVuZGVyaW5nIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgd3JhcHBlciB0byB0
aGUgYHRlbXBsYXRlYCBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICBvbiBhIHN1YmNsYXNz
LgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBsYXlvdXQKLSAgICAgICAgICAgICAg
ICAgICAgQHR5cGUgRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBs
YXlvdXQ6IGNvbXB1dGVkKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZhciBsYXlv
dXROYW1lID0gZ2V0KHRoaXMsICdsYXlvdXROYW1lJyksCi0gICAgICAgICAgICAgICAgbGF5b3V0
ID0gdGhpcy50ZW1wbGF0ZUZvck5hbWUobGF5b3V0TmFtZSwgJ2xheW91dCcpOwotCi0gICAgICAg
ICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3Ugc3BlY2lmaWVkIHRoZSBsYXlvdXROYW1lICIgKyBs
YXlvdXROYW1lICsgIiBmb3IgIiArIHRoaXMgKyAiLCBidXQgaXQgZGlkIG5vdCBleGlzdC4iLCAh
bGF5b3V0TmFtZSB8fCBsYXlvdXQpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxheW91dCB8
fCBnZXQodGhpcywgJ2RlZmF1bHRMYXlvdXQnKTsKLSAgICAgICAgICAgIH0pLnByb3BlcnR5KCds
YXlvdXROYW1lJyksCi0KLSAgICAgICAgICAgIF95aWVsZDogZnVuY3Rpb24oY29udGV4dCwgb3B0
aW9ucykgewotICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGdldCh0aGlzLCAndGVtcGxh
dGUnKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGVtcGxhdGUoY29udGV4dCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgdGVtcGxhdGVGb3JOYW1lOiBmdW5jdGlvbihuYW1lLCB0
eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCJ0ZW1wbGF0ZU5hbWVzIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBlcmlvZHM6ICIgKyBu
YW1lLCBuYW1lLmluZGV4T2YoJy4nKSA9PT0gLTEpOwotCi0gICAgICAgICAgICAgICAgLy8gdGhl
IGRlZmF1bHRDb250YWluZXIgaXMgZGVwcmVjYXRlZAotICAgICAgICAgICAgICAgIHZhciBjb250
YWluZXIgPSB0aGlzLmNvbnRhaW5lciB8fCAoQ29udGFpbmVyICYmIENvbnRhaW5lci5kZWZhdWx0
Q29udGFpbmVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyICYmIGNvbnRhaW5l
ci5sb29rdXAoJ3RlbXBsYXRlOicgKyBuYW1lKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdGVtcGxh
dGVzIHNob3VsZCBhY2Nlc3MgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICAgICAgICBUaGlz
IG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gZWFjaCB0aW1l
IHRoZSByZW5kZXIKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGlzIGNhbGxlZCwgYnV0IGl0
IGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGF0Ci0gICAgICAg
ICAgICAgICAgICAgIHRvIGRvIHdpdGggaXQuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVm
YXVsdCwgdGhpcyB3aWxsIGJlIHRoZSB2aWV3J3MgY29udHJvbGxlci4KLQotICAgICAgICAgICAg
ICAgICAgICBAcHJvcGVydHkgY29udGV4dAotICAgICAgICAgICAgICAgICAgICBAdHlwZSBPYmpl
Y3QKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250ZXh0OiBjb21wdXRlZChm
dW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPT09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KHRoaXMsICdfY29udGV4dCcsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ19jb250ZXh0
Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSlbInZvbGF0aWxlIl0oKSwKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFByaXZhdGUgY29weSBvZiB0aGUg
dmlldydzIHRlbXBsYXRlIGNvbnRleHQuIFRoaXMgY2FuIGJlIHNldCBkaXJlY3RseQotICAgICAg
ICAgICAgICAgICAgICBieSBIYW5kbGViYXJzIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgb2JzZXJ2
ZXIgdGhhdCBjYXVzZXMgdGhlIHZpZXcKLSAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmUtcmVu
ZGVyZWQuCi0KLSAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRleHQgb2YgYSB2aWV3IGlzIGxv
b2tlZCB1cCBhcyBmb2xsb3dzOgotCi0gICAgICAgICAgICAgICAgICAgIDEuIFN1cHBsaWVkIGNv
bnRleHQgKHVzdWFsbHkgYnkgSGFuZGxlYmFycykKLSAgICAgICAgICAgICAgICAgICAgMi4gU3Bl
Y2lmaWVkIGNvbnRyb2xsZXIKLSAgICAgICAgICAgICAgICAgICAgMy4gYHBhcmVudFZpZXdgJ3Mg
Y29udGV4dCAoZm9yIGEgY2hpbGQgb2YgYSBDb250YWluZXJWaWV3KQotCi0gICAgICAgICAgICAg
ICAgICAgIFRoZSBjb2RlIGluIEhhbmRsZWJhcnMgdGhhdCBvdmVycmlkZXMgdGhlIGBfY29udGV4
dGAgcHJvcGVydHkgZmlyc3QKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tzIHRvIHNlZSB3aGV0
aGVyIHRoZSB2aWV3IGhhcyBhIHNwZWNpZmllZCBjb250cm9sbGVyLiBUaGlzIGlzCi0gICAgICAg
ICAgICAgICAgICAgIHNvbWV0aGluZyBvZiBhIGhhY2sgYW5kIHNob3VsZCBiZSByZXZpc2l0ZWQu
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IF9jb250ZXh0Ci0gICAgICAgICAgICAg
ICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX2NvbnRl
eHQ6IGNvbXB1dGVkKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnRW
aWV3LCBjb250cm9sbGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgPSBnZXQo
dGhpcywgJ2NvbnRyb2xsZXInKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJv
bGxlcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJlbnRWaWV3ID0g
dGhpcy5fcGFyZW50VmlldzsKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50VmlldykgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHBhcmVudFZpZXcsICdfY29udGV4dCcpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAg
ICAgfSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiBhIHZhbHVl
IHRoYXQgYWZmZWN0cyB0ZW1wbGF0ZSByZW5kZXJpbmcgY2hhbmdlcywgdGhlIHZpZXcgc2hvdWxk
IGJlCi0gICAgICAgICAgICAgICAgICAgIHJlLXJlbmRlcmVkIHRvIHJlZmxlY3QgdGhlIG5ldyB2
YWx1ZS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9jb250ZXh0RGlkQ2hhbmdlCi0g
ICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgX2NvbnRleHREaWRDaGFuZ2U6IG9ic2VydmVyKCdjb250ZXh0JywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXJlbmRlcigpOwotICAgICAgICAgICAgfSksCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZiBgZmFsc2VgLCB0aGUgdmlldyB3
aWxsIGFwcGVhciBoaWRkZW4gaW4gRE9NLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBpc1Zpc2libGUKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgICAg
ICAgICAgICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgaXNWaXNpYmxlOiB0cnVlLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgQXJyYXkgb2YgY2hpbGQgdmlld3MuIFlvdSBzaG91bGQgbmV2ZXIgZWRpdCB0aGlzIGFycmF5
IGRpcmVjdGx5LgotICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB1c2UgYGFwcGVuZENoaWxk
YCBhbmQgYHJlbW92ZUZyb21QYXJlbnRgLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0
eSBjaGlsZFZpZXdzCi0gICAgICAgICAgICAgICAgICAgIEB0eXBlIEFycmF5Ci0gICAgICAgICAg
ICAgICAgICAgIEBkZWZhdWx0IFtdCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2hpbGRWaWV3czogY2hpbGRWaWV3c1Byb3Bl
cnR5LAotCi0gICAgICAgICAgICBfY2hpbGRWaWV3czogRU1QVFlfQVJSQVksCi0KLSAgICAgICAg
ICAgIC8vIFdoZW4gaXQncyBhIHZpcnR1YWwgdmlldywgd2UgbmVlZCB0byBub3RpZnkgdGhlIHBh
cmVudCB0aGF0IHRoZWlyCi0gICAgICAgICAgICAvLyBjaGlsZFZpZXdzIHdpbGwgY2hhbmdlLgot
ICAgICAgICAgICAgX2NoaWxkVmlld3NXaWxsQ2hhbmdlOiBiZWZvcmVPYnNlcnZlcignY2hpbGRW
aWV3cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmlydHVhbCkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50VmlldyA9IGdldCh0aGlzLCAncGFyZW50
VmlldycpOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50VmlldykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlXaWxsQ2hhbmdlKHBhcmVudFZpZXcsICdjaGlsZFZpZXdz
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KSwKLQotICAgICAgICAgICAgLy8gV2hlbiBpdCdzIGEgdmlydHVhbCB2aWV3LCB3ZSBuZWVk
IHRvIG5vdGlmeSB0aGUgcGFyZW50IHRoYXQgdGhlaXIKLSAgICAgICAgICAgIC8vIGNoaWxkVmll
d3MgZGlkIGNoYW5nZS4KLSAgICAgICAgICAgIF9jaGlsZFZpZXdzRGlkQ2hhbmdlOiBvYnNlcnZl
cignY2hpbGRWaWV3cycsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmlz
VmlydHVhbCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50VmlldyA9IGdldCh0aGlz
LCAncGFyZW50VmlldycpOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Vmlldykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlEaWRDaGFuZ2UocGFyZW50VmlldywgJ2No
aWxkVmlld3MnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmV0
dXJuIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3Zp
ZGVkCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzLgotCi0gICAgICAgICAgICAgICAgICAgIEBt
ZXRob2QgbmVhcmVzdEluc3RhbmNlT2YKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtDbGFz
c30ga2xhc3MgU3ViY2xhc3Mgb2YgRW1iZXIuVmlldyAob3IgRW1iZXIuVmlldyBpdHNlbGYpCi0g
ICAgICAgICAgICAgICAgICAgIEByZXR1cm4gRW1iZXIuVmlldwotICAgICAgICAgICAgICAgICAg
ICBAZGVwcmVjYXRlZAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5lYXJlc3RJ
bnN0YW5jZU9mOiBmdW5jdGlvbihrbGFzcykgewotICAgICAgICAgICAgICAgIEVtYmVyLmRlcHJl
Y2F0ZSgibmVhcmVzdEluc3RhbmNlT2YgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVk
IGZyb20gZnV0dXJlIHJlbGVhc2VzLiBVc2UgbmVhcmVzdE9mVHlwZS4iKTsKLSAgICAgICAgICAg
ICAgICB2YXIgdmlldyA9IGdldCh0aGlzLCAncGFyZW50VmlldycpOwotCi0gICAgICAgICAgICAg
ICAgd2hpbGUgKHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcgaW5zdGFuY2Vv
ZiBrbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGdldCh2aWV3LCAncGFy
ZW50VmlldycpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm4gdGhlIG5lYXJlc3QgYW5jZXN0b3Ig
dGhhdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZWQKLSAgICAgICAgICAgICAgICAgICAg
Y2xhc3Mgb3IgbWl4aW4uCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBuZWFyZXN0T2ZU
eXBlCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Q2xhc3MsTWl4aW59IGtsYXNzIFN1YmNs
YXNzIG9mIEVtYmVyLlZpZXcgKG9yIEVtYmVyLlZpZXcgaXRzZWxmKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9yIGFuIGluc3RhbmNlIG9mIEVtYmVyLk1peGluLgotICAgICAgICAgICAg
ICAgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICBuZWFyZXN0T2ZUeXBlOiBmdW5jdGlvbihrbGFzcykgewotICAgICAgICAgICAgICAgIHZh
ciB2aWV3ID0gZ2V0KHRoaXMsICdwYXJlbnRWaWV3JyksCi0gICAgICAgICAgICAgICAgaXNPZlR5
cGUgPSBrbGFzcyBpbnN0YW5jZW9mIE1peGluID8KLSAgICAgICAgICAgICAgICBmdW5jdGlvbih2
aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBrbGFzcy5kZXRlY3Qodmlldyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICBmdW5j
dGlvbih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBrbGFzcy5kZXRlY3Qodmll
dy5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHdo
aWxlICh2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc09mVHlwZSh2aWV3KSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IGdldCh2aWV3LCAncGFyZW50VmlldycpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBSZXR1cm4gdGhlIG5lYXJlc3QgYW5jZXN0b3IgdGhhdCBoYXMgYSBn
aXZlbiBwcm9wZXJ0eS4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIG5lYXJlc3RXaXRo
UHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IEEg
cHJvcGVydHkgbmFtZQotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIEVtYmVyLlZpZXcKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBuZWFyZXN0V2l0aFByb3BlcnR5OiBmdW5j
dGlvbihwcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gZ2V0KHRoaXMsICdw
YXJlbnRWaWV3Jyk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAodmlldykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydHkgaW4gdmlldykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdmlldyA9IGdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1
cm4gdGhlIG5lYXJlc3QgYW5jZXN0b3Igd2hvc2UgcGFyZW50IGlzIGFuIGluc3RhbmNlIG9mCi0g
ICAgICAgICAgICAgICAgICAgIGBrbGFzc2AuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCBuZWFyZXN0Q2hpbGRPZgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0NsYXNzfSBrbGFz
cyBTdWJjbGFzcyBvZiBFbWJlci5WaWV3IChvciBFbWJlci5WaWV3IGl0c2VsZikKLSAgICAgICAg
ICAgICAgICAgICAgQHJldHVybiBFbWJlci5WaWV3Ci0gICAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgbmVhcmVzdENoaWxkT2Y6IGZ1bmN0aW9uKGtsYXNzKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHZpZXcgPSBnZXQodGhpcywgJ3BhcmVudFZpZXcnKTsKLQotICAgICAgICAgICAgICAg
IHdoaWxlICh2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXQodmlldywgJ3BhcmVu
dFZpZXcnKSBpbnN0YW5jZW9mIGtsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdmlldzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB2aWV3
ID0gZ2V0KHZpZXcsICdwYXJlbnRWaWV3Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIHBh
cmVudCB2aWV3IGNoYW5nZXMsIHJlY3Vyc2l2ZWx5IGludmFsaWRhdGUgYGNvbnRyb2xsZXJgCi0K
LSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfcGFyZW50Vmlld0RpZENoYW5nZQotICAgICAg
ICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IF9wYXJlbnRWaWV3RGlkQ2hhbmdlOiBvYnNlcnZlcignX3BhcmVudFZpZXcnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3lpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRo
aXMudHJpZ2dlcigncGFyZW50Vmlld0RpZENoYW5nZScpOwotCi0gICAgICAgICAgICAgICAgaWYg
KGdldCh0aGlzLCAncGFyZW50Vmlldy5jb250cm9sbGVyJykgJiYgIWdldCh0aGlzLCAnY29udHJv
bGxlcicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2Uo
J2NvbnRyb2xsZXInKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KSwKLQotICAg
ICAgICAgICAgX2NvbnRyb2xsZXJEaWRDaGFuZ2U6IG9ic2VydmVyKCdjb250cm9sbGVyJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95aW5nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB0aGlzLnJlcmVuZGVyKCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hDaGls
ZFZpZXcoZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgICAgICB2aWV3LnByb3BlcnR5
RGlkQ2hhbmdlKCdjb250cm9sbGVyJyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KSwKLQotICAgICAgICAgICAgY2xvbmVLZXl3b3JkczogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHRlbXBsYXRlRGF0YSA9IGdldCh0aGlzLCAndGVtcGxhdGVEYXRhJyk7Ci0K
LSAgICAgICAgICAgICAgICB2YXIga2V5d29yZHMgPSB0ZW1wbGF0ZURhdGEgPyBjb3B5KHRlbXBs
YXRlRGF0YS5rZXl3b3JkcykgOiB7fTsKLSAgICAgICAgICAgICAgICBzZXQoa2V5d29yZHMsICd2
aWV3JywgdGhpcy5pc1ZpcnR1YWwgPyBrZXl3b3Jkcy52aWV3IDogdGhpcyk7Ci0gICAgICAgICAg
ICAgICAgc2V0KGtleXdvcmRzLCAnX3ZpZXcnLCB0aGlzKTsKLSAgICAgICAgICAgICAgICBzZXQo
a2V5d29yZHMsICdjb250cm9sbGVyJywgZ2V0KHRoaXMsICdjb250cm9sbGVyJykpOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGtleXdvcmRzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCBvbiB5b3VyIHZpZXcgd2hlbiBpdCBz
aG91bGQgcHVzaCBzdHJpbmdzIG9mIEhUTUwgaW50byBhCi0gICAgICAgICAgICAgICAgICAgIGBF
bWJlci5SZW5kZXJCdWZmZXJgLiBNb3N0IHVzZXJzIHdpbGwgd2FudCB0byBvdmVycmlkZSB0aGUg
YHRlbXBsYXRlYAotICAgICAgICAgICAgICAgICAgICBvciBgdGVtcGxhdGVOYW1lYCBwcm9wZXJ0
aWVzIGluc3RlYWQgb2YgdGhpcyBtZXRob2QuCi0KLSAgICAgICAgICAgICAgICAgICAgQnkgZGVm
YXVsdCwgYEVtYmVyLlZpZXdgIHdpbGwgbG9vayBmb3IgYSBmdW5jdGlvbiBpbiB0aGUgYHRlbXBs
YXRlYAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBhbmQgaW52b2tlIGl0IHdpdGggdGhl
IHZhbHVlIG9mIGBjb250ZXh0YC4gVGhlIHZhbHVlIG9mCi0gICAgICAgICAgICAgICAgICAgIGBj
b250ZXh0YCB3aWxsIGJlIHRoZSB2aWV3J3MgY29udHJvbGxlciB1bmxlc3MgeW91IG92ZXJyaWRl
IGl0LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVuZGVyCi0gICAgICAgICAgICAg
ICAgICAgIEBwYXJhbSB7RW1iZXIuUmVuZGVyQnVmZmVyfSBidWZmZXIgVGhlIHJlbmRlciBidWZm
ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKGJ1
ZmZlcikgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgdmlldyBoYXMgYSBsYXlvdXQsIGl0
IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUKLSAgICAgICAgICAgICAgICAvLyB0aGUgbGF5
b3V0IHRvIHJlbmRlciB0aGUgdmlldydzIHRlbXBsYXRlLiBPdGhlcndpc2UsIHJlbmRlciB0aGUg
dGVtcGxhdGUKLSAgICAgICAgICAgICAgICAvLyBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICB2
YXIgdGVtcGxhdGUgPSBnZXQodGhpcywgJ2xheW91dCcpIHx8IGdldCh0aGlzLCAndGVtcGxhdGUn
KTsKLQotICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSkgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgY29udGV4dCA9IGdldCh0aGlzLCAnY29udGV4dCcpOwotICAgICAgICAgICAgICAgICAg
ICB2YXIga2V5d29yZHMgPSB0aGlzLmNsb25lS2V5d29yZHMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIG91dHB1dDsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpZXc6IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXI6IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVuZGVyRGF0YTogdHJ1
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBrZXl3b3JkcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2lkZUdyb3VwOiBnZXQodGhpcywgJ3RlbXBsYXRlRGF0YS5pbnNp
ZGVHcm91cCcpCi0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gSW52b2tlIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSBjb250ZXh0
LCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyBpcyB0aGUgdmlldydzIGNvbnRyb2xsZXIg
YnkgZGVmYXVsdC4gQSBoYXNoIG9mIGRhdGEgaXMgYWxzbyBwYXNzZWQgdGhhdCBwcm92aWRlcwot
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdGVtcGxhdGUgd2l0aCBhY2Nlc3MgdG8gdGhlIHZp
ZXcgYW5kIHJlbmRlciBidWZmZXIuCi0KLSAgICAgICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0
KCd0ZW1wbGF0ZSBtdXN0IGJlIGEgZnVuY3Rpb24uIERpZCB5b3UgbWVhbiB0byBjYWxsIEVtYmVy
LkhhbmRsZWJhcnMuY29tcGlsZSgiLi4uIikgb3Igc3BlY2lmeSB0ZW1wbGF0ZU5hbWUgaW5zdGVh
ZD8nLCB0eXBlb2YgdGVtcGxhdGUgPT09ICdmdW5jdGlvbicpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgdGVtcGxhdGUgc2hvdWxkIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSByZW5kZXIgYnVm
ZmVyIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgcmV0dXJuaW5nIGEgc3RyaW5n
LgotICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSB0ZW1wbGF0ZShjb250ZXh0LCB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIAotICAgICAgICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdGVtcGxhdGUgcmV0dXJuZWQgYSBzdHJp
bmcgaW5zdGVhZCBvZiB3cml0aW5nIHRvIHRoZSBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
IC8vIHB1c2ggdGhlIHN0cmluZyBvbnRvIHRoZSBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChvdXRwdXQgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLnB1c2gob3V0cHV0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJzIHRoZSB2aWV3IGFnYWluLiBUaGlzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHdo
ZXRoZXIgdGhlCi0gICAgICAgICAgICAgICAgICAgIHZpZXcgaXMgYWxyZWFkeSBpbiB0aGUgRE9N
IG9yIG5vdC4gSWYgdGhlIHZpZXcgaXMgaW4gdGhlIERPTSwgdGhlCi0gICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmluZyBwcm9jZXNzIHdpbGwgYmUgZGVmZXJyZWQgdG8gZ2l2ZSBiaW5kaW5ncyBh
IGNoYW5jZQotICAgICAgICAgICAgICAgICAgICB0byBzeW5jaHJvbml6ZS4KLQotICAgICAgICAg
ICAgICAgICAgICBJZiBjaGlsZHJlbiB3ZXJlIGFkZGVkIGR1cmluZyB0aGUgcmVuZGVyaW5nIHBy
b2Nlc3MgdXNpbmcgYGFwcGVuZENoaWxkYCwKLSAgICAgICAgICAgICAgICAgICAgYHJlcmVuZGVy
YCB3aWxsIHJlbW92ZSB0aGVtLCBiZWNhdXNlIHRoZXkgd2lsbCBiZSBhZGRlZCBhZ2FpbgotICAg
ICAgICAgICAgICAgICAgICBpZiBuZWVkZWQgYnkgdGhlIG5leHQgYHJlbmRlcmAuCi0KLSAgICAg
ICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgaWYgdGhlIGRpc3BsYXkgb2YgeW91ciB2aWV3IGNo
YW5nZXMsIHlvdSBzaG91bGQgbW9kaWZ5Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBET00gZWxl
bWVudCBkaXJlY3RseSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNhbGxpbmcgYHJlcmVuZGVyYCwgd2hp
Y2ggY2FuCi0gICAgICAgICAgICAgICAgICAgIGJlIHNsb3cuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCByZXJlbmRlcgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJl
cmVuZGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50
U3RhdGUucmVyZW5kZXIodGhpcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjbGVh
clJlbmRlcmVkQ2hpbGRyZW46IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBsZW5n
dGhCZWZvcmUgPSB0aGlzLmxlbmd0aEJlZm9yZVJlbmRlciwKLSAgICAgICAgICAgICAgICBsZW5n
dGhBZnRlciA9IHRoaXMubGVuZ3RoQWZ0ZXJSZW5kZXI7Ci0KLSAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSB3ZXJlIGNoaWxkIHZpZXdzIGNyZWF0ZWQgZHVyaW5nIHRoZSBsYXN0IGNhbGwgdG8g
cmVuZGVyKCksCi0gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZW0gdW5kZXIgdGhlIGFzc3Vt
cHRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmUtY3JlYXRlZCB3aGVuCi0gICAgICAgICAgICAgICAg
Ly8gd2UgcmUtcmVuZGVyLgotCi0gICAgICAgICAgICAgICAgLy8gVklFVy1UT0RPOiBVbml0IHRl
c3QgdGhpcyBwYXRoLgotICAgICAgICAgICAgICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5fY2hp
bGRWaWV3czsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbGVuZ3RoQWZ0ZXItMTsgaSA+
PSBsZW5ndGhCZWZvcmU7IGktLSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWaWV3
c1tpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRWaWV3c1tpXS5kZXN0cm95KCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0ZXMgb3ZlciB0
aGUgdmlldydzIGBjbGFzc05hbWVCaW5kaW5nc2AgYXJyYXksIGluc2VydHMgdGhlIHZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaW50byB0aGUgYGNs
YXNzTmFtZXNgIGFycmF5LCB0aGVuIGNyZWF0ZXMgYW4KLSAgICAgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZXIgdG8gdXBkYXRlIHRoZSB2aWV3J3MgZWxlbWVudCBpZiB0aGUgYm91bmQgcHJvcGVydHkg
ZXZlciBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSBmdXR1cmUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgQG1ldGhvZCBfYXBwbHlDbGFzc05hbWVCaW5kaW5ncwotICAgICAgICAg
ICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9h
cHBseUNsYXNzTmFtZUJpbmRpbmdzOiBmdW5jdGlvbihjbGFzc0JpbmRpbmdzKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSB0aGlzLmNsYXNzTmFtZXMsCi0gICAgICAgICAgICAg
ICAgZWxlbSwgbmV3Q2xhc3MsIGRhc2hlcml6ZWRDbGFzczsKLQotICAgICAgICAgICAgICAgIC8v
IExvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIGNvbmZpZ3VyZWQgYmluZGluZ3MuIFRoZXNlIHdpbGwg
YmUgZWl0aGVyCi0gICAgICAgICAgICAgICAgLy8gcHJvcGVydHkgbmFtZXMgKCdpc1VyZ2VudCcp
IG9yIHByb3BlcnR5IHBhdGhzIHJlbGF0aXZlIHRvIHRoZSB2aWV3Ci0gICAgICAgICAgICAgICAg
Ly8gKCdjb250ZW50LmlzVXJnZW50JykKLSAgICAgICAgICAgICAgICBmb3JFYWNoKGNsYXNzQmlu
ZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKLQotICAgICAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoImNsYXNzTmFtZUJpbmRpbmdzIG11c3Qgbm90IGhhdmUgc3BhY2VzIGluIHRoZW0uIE11
bHRpcGxlIGNsYXNzIG5hbWUgYmluZGluZ3MgY2FuIGJlIHByb3ZpZGVkIGFzIGVsZW1lbnRzIG9m
IGFuIGFycmF5LCBlLmcuIFsnZm9vJywgJzpiYXInXSIsIGJpbmRpbmcuaW5kZXhPZignICcpID09
PSAtMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVmFyaWFibGUgaW4gd2hpY2ggdGhlIG9s
ZCBjbGFzcyB2YWx1ZSBpcyBzYXZlZC4gVGhlIG9ic2VydmVyIGZ1bmN0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGNsb3NlcyBvdmVyIHRoaXMgdmFyaWFibGUsIHNvIGl0IGtub3dzIHdoaWNo
IHN0cmluZyB0byByZW1vdmUgd2hlbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcHJvcGVy
dHkgY2hhbmdlcy4KLSAgICAgICAgICAgICAgICAgICAgdmFyIG9sZENsYXNzOwotICAgICAgICAg
ICAgICAgICAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIHByb3BlcnR5IG5hbWUgZnJvbSBiaW5kaW5n
cyBsaWtlICdmb286YmFyJwotICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUGF0aCA9IFZp
ZXcuX3BhcnNlUHJvcGVydHlQYXRoKGJpbmRpbmcpOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IFNldCB1cCBhbiBvYnNlcnZlciBvbiB0aGUgY29udGV4dC4gSWYgdGhlIHByb3BlcnR5IGNoYW5n
ZXMsIHRvZ2dsZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gY2xhc3MgbmFtZS4KLSAgICAg
ICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBuZXdDbGFzcyA9IHRoaXMuX2NsYXNzU3RyaW5nRm9yUHJvcGVy
dHkoYmluZGluZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpcy4kKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhZCBwcmV2aW91c2x5IGFkZGVkIGEg
Y2xhc3MgdG8gdGhlIGVsZW1lbnQsIHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvbGRDbGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3Zl
Q2xhc3Mob2xkQ2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gcmVt
b3ZlIGZyb20gY2xhc3NOYW1lcyBzbyB0aGF0IGlmIHRoZSB2aWV3IGdldHMgcmVyZW5kZXJlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY2xhc3MgZG9lc24ndCBnZXQgYWRk
ZWQgYmFjayB0byB0aGUgRE9NLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZXMucmVtb3ZlT2JqZWN0KG9sZENsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBhZGQgYSBuZXcgY2xhc3Mu
IE1ha2Ugc3VyZSB3ZSBrZWVwIHRyYWNrIG9mIGl0IHNvCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpdCBjYW4gYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5ld0NsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5h
ZGRDbGFzcyhuZXdDbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2xhc3Mg
PSBuZXdDbGFzczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2xkQ2xhc3MgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgY2xhc3MgbmFtZSBmb3IgdGhlIHByb3BlcnR5IGF0IGl0cyBjdXJyZW50IHZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgIGRhc2hlcml6ZWRDbGFzcyA9IHRoaXMuX2NsYXNzU3RyaW5nRm9y
UHJvcGVydHkoYmluZGluZyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRhc2hlcml6ZWRD
bGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgZ2V0cyBp
bnRvIHRoZSBjbGFzc05hbWVzIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBp
dCBpcyBkaXNwbGF5ZWQgd2hlbiB3ZSByZW5kZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRPYmplY3QoY2xhc3NOYW1lcywgZGFzaGVyaXplZENsYXNzKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY2xhc3MgbmFtZSBzbyB3ZSBjYW4g
cmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgb2JzZXJ2ZXIgZmly
ZXMuIFJlbWVtYmVyIHRoYXQgdGhpcyB2YXJpYWJsZSBoYXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGJlZW4gY2xvc2VkIG92ZXIgYnkgdGhlIG9ic2VydmVyLgotICAgICAgICAgICAgICAg
ICAgICAgICAgb2xkQ2xhc3MgPSBkYXNoZXJpemVkQ2xhc3M7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIodGhpcywgcGFy
c2VkUGF0aC5wYXRoLCBvYnNlcnZlcik7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBj
bGFzc05hbWUgc28gd2hlbiB0aGUgdmlldyBpcyByZXJlbmRlcmVkLAotICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgY2xhc3NOYW1lIGlzIGFkZGVkIGJhc2VkIG9uIGJpbmRpbmcgcmVldmFsdWF0
aW9uCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub25lKCd3aWxsQ2xlYXJSZW5kZXInLCBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRDbGFzcykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMucmVtb3ZlT2JqZWN0KG9sZENsYXNzKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRDbGFzcyA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
ICAgfSwgdGhpcyk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfdW5zcGVjaWZpZWRB
dHRyaWJ1dGVCaW5kaW5nczogbnVsbCwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHZpZXcncyBhdHRyaWJ1dGUgYmluZGluZ3MsIHNl
dHMgdXAgb2JzZXJ2ZXJzIGZvciBlYWNoLAotICAgICAgICAgICAgICAgICAgICB0aGVuIGFwcGxp
ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZXMgdG8gdGhlIHBhc3NlZCByZW5k
ZXIgYnVmZmVyLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2FwcGx5QXR0cmlidXRl
QmluZGluZ3MKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtFbWJlci5SZW5kZXJCdWZmZXJ9
IGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAg
Ki8KLSAgICAgICAgICAgIF9hcHBseUF0dHJpYnV0ZUJpbmRpbmdzOiBmdW5jdGlvbihidWZmZXIs
IGF0dHJpYnV0ZUJpbmRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVl
LAotICAgICAgICAgICAgICAgIHVuc3BlY2lmaWVkQXR0cmlidXRlQmluZGluZ3MgPSB0aGlzLl91
bnNwZWNpZmllZEF0dHJpYnV0ZUJpbmRpbmdzID0gdGhpcy5fdW5zcGVjaWZpZWRBdHRyaWJ1dGVC
aW5kaW5ncyB8fCB7fTsKLQotICAgICAgICAgICAgICAgIGZvckVhY2goYXR0cmlidXRlQmluZGlu
Z3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0ID0g
YmluZGluZy5zcGxpdCgnOicpLAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHNwbGl0
WzBdLAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gc3BsaXRbMV0gfHwgcHJv
cGVydHk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluIHRoaXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwQXR0cmlidXRlQmluZGluZ09ic2VydmF0
aW9uKHByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHZhbHVlIGFuZCBhZGQgaXQgdG8gdGhlIHJlbmRlciBi
dWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gZ2V0KHRoaXMsIHByb3BlcnR5KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZpZXcuYXBwbHlBdHRyaWJ1dGVCaW5kaW5ncyhidWZmZXIs
IGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc3BlY2lmaWVkQXR0cmlidXRlQmluZGlu
Z3NbcHJvcGVydHldID0gYXR0cmlidXRlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgICAgICAgICAgLy8gTGF6aWx5IHNldHVw
IHNldFVua25vd25Qcm9wZXJ0eSBhZnRlciBhdHRyaWJ1dGVCaW5kaW5ncyBhcmUgaW5pdGlhbGx5
IGFwcGxpZWQKLSAgICAgICAgICAgICAgICB0aGlzLnNldFVua25vd25Qcm9wZXJ0eSA9IHRoaXMu
X3NldFVua25vd25Qcm9wZXJ0eTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIF9zZXR1
cEF0dHJpYnV0ZUJpbmRpbmdPYnNlcnZhdGlvbjogZnVuY3Rpb24ocHJvcGVydHksIGF0dHJpYnV0
ZU5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWUsIGVsZW07Ci0KLSAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgYW4gb2JzZXJ2ZXIgdG8gYWRkL3JlbW92ZS9jaGFuZ2Ug
dGhlIGF0dHJpYnV0ZSBpZiB0aGUKLSAgICAgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IHByb3Bl
cnR5IGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzLiQoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGdldCh0aGlzLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgVmlldy5hcHBseUF0dHJpYnV0ZUJpbmRpbmdzKGVsZW0sIGF0dHJpYnV0ZU5hbWUs
IGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAg
dGhpcy5yZWdpc3Rlck9ic2VydmVyKHRoaXMsIHByb3BlcnR5LCBvYnNlcnZlcik7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgV2UncmUgdXNp
bmcgc2V0VW5rbm93blByb3BlcnR5IGFzIGEgaG9vayB0byBzZXR1cCBhdHRyaWJ1dGVCaW5kaW5n
IG9ic2VydmVycyBmb3IKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyB0aGF0IGFyZW4n
dCBkZWZpbmVkIG9uIGEgdmlldyBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgotCi0gICAgICAgICAg
ICAgICAgICAgIE5vdGU6IHNldFVua25vd25Qcm9wZXJ0eSB3aWxsIG9ubHkgYmUgY2FsbGVkIG9u
Y2UgZm9yIGVhY2ggcHJvcGVydHkuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBzZXRV
bmtub3duUHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGtleQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0gdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZXRVbmtub3duUHJvcGVydHk6IG51bGws
Ci0gICAgICAgICAgICAvLyBHZXRzIGRlZmluZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gYnkgX2Fw
cGx5QXR0cmlidXRlQmluZGluZ3MKLQotICAgICAgICAgICAgX3NldFVua25vd25Qcm9wZXJ0eTog
ZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1l
ID0gdGhpcy5fdW5zcGVjaWZpZWRBdHRyaWJ1dGVCaW5kaW5ncyAmJiB0aGlzLl91bnNwZWNpZmll
ZEF0dHJpYnV0ZUJpbmRpbmdzW2tleV07Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBBdHRyaWJ1dGVCaW5kaW5nT2Jz
ZXJ2YXRpb24oa2V5LCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBzZXQodGhpcywga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgR2l2ZW4gYSBwcm9wZXJ0eSBuYW1lLCByZXR1cm5z
IGEgZGFzaGVyaXplZCB2ZXJzaW9uIG9mIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkgbmFtZSBpZiB0aGUgcHJvcGVydHkgZXZhbHVhdGVzIHRvIGEgbm9uLWZhbHN5IHZhbHVlLgot
Ci0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgdmlldyBoYXMgcHJvcGVy
dHkgYGlzVXJnZW50YCB0aGF0IGV2YWx1YXRlcyB0byB0cnVlLAotICAgICAgICAgICAgICAgICAg
ICBwYXNzaW5nIGBpc1VyZ2VudGAgdG8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYCJpcy11cmdl
bnQiYC4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9kIF9jbGFzc1N0cmluZ0ZvclByb3Bl
cnR5Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBwcm9wZXJ0eQotICAgICAgICAgICAgICAg
ICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9jbGFzc1N0
cmluZ0ZvclByb3BlcnR5OiBmdW5jdGlvbihwcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIHZh
ciBwYXJzZWRQYXRoID0gVmlldy5fcGFyc2VQcm9wZXJ0eVBhdGgocHJvcGVydHkpOwotICAgICAg
ICAgICAgICAgIHZhciBwYXRoID0gcGFyc2VkUGF0aC5wYXRoOwotCi0gICAgICAgICAgICAgICAg
dmFyIHZhbCA9IGdldCh0aGlzLCBwYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsID09PSB1
bmRlZmluZWQgJiYgaXNHbG9iYWxQYXRoKHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
bCA9IGdldChFbWJlci5sb29rdXAsIHBhdGgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBWaWV3Ll9jbGFzc1N0cmluZ0ZvclZhbHVlKHBhdGgsIHZhbCwgcGFy
c2VkUGF0aC5jbGFzc05hbWUsIHBhcnNlZFBhdGguZmFsc3lDbGFzc05hbWUpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gRUxFTUVOVCBTVVBQT1JU
Ci0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAg
UmV0dXJucyB0aGUgY3VycmVudCBET00gZWxlbWVudCBmb3IgdGhlIHZpZXcuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHByb3BlcnR5IGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgQHR5cGUg
RE9NRWxlbWVudAotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGVsZW1lbnQ6IGNv
bXB1dGVkKCdfcGFyZW50VmlldycsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5jdXJyZW50U3RhdGUuc2V0RWxlbWVudCh0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0
YXRlLmdldEVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSks
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgalF1ZXJ5
IG9iamVjdCBmb3IgdGhpcyB2aWV3J3MgZWxlbWVudC4gSWYgeW91IHBhc3MgaW4gYSBzZWxlY3Rv
cgotICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEg
alF1ZXJ5IG9iamVjdCwgdXNpbmcgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICBhcyBpdHMgYnVmZmVyLgotCi0gICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBj
YWxsaW5nIGB2aWV3LiQoJ2xpJylgIHdpbGwgcmV0dXJuIGEgalF1ZXJ5IG9iamVjdCBjb250YWlu
aW5nCi0gICAgICAgICAgICAgICAgICAgIGFsbCBvZiB0aGUgYGxpYCBlbGVtZW50cyBpbnNpZGUg
dGhlIERPTSBlbGVtZW50IG9mIHRoaXMgdmlldy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0
aG9kICQKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IFtzZWxlY3Rvcl0gYSBq
UXVlcnktY29tcGF0aWJsZSBzZWxlY3RvciBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgQHJl
dHVybiB7alF1ZXJ5fSB0aGUgalF1ZXJ5IG9iamVjdCBmb3IgdGhlIERPTSBub2RlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgJDogZnVuY3Rpb24oc2VsKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLiQodGhpcywgc2VsKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIG11dGF0ZUNoaWxkVmlld3M6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzLAotICAg
ICAgICAgICAgICAgIGlkeCA9IGNoaWxkVmlld3MubGVuZ3RoLAotICAgICAgICAgICAgICAgIHZp
ZXc7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1pZHggPj0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB2aWV3ID0gY2hpbGRWaWV3c1tpZHhdOwotICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayh0aGlzLCB2aWV3LCBpZHgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZm9yRWFjaENo
aWxkVmlldzogZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGRW
aWV3cyA9IHRoaXMuX2NoaWxkVmlld3M7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkVmll
d3MpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNoaWxkVmlld3MubGVuZ3RoLAotICAgICAg
ICAgICAgICAgIHZpZXcsIGlkeDsKLQotICAgICAgICAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4
IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY2hpbGRWaWV3c1tp
ZHhdOwotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh2aWV3KTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBBcHBlbmRzIHRoZSB2aWV3J3MgZWxl
bWVudCB0byB0aGUgc3BlY2lmaWVkIHBhcmVudCBlbGVtZW50LgotCi0gICAgICAgICAgICAgICAg
ICAgIElmIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgYW4gSFRNTCByZXByZXNlbnRhdGlvbiB5ZXQs
IGBjcmVhdGVFbGVtZW50KClgCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGF1
dG9tYXRpY2FsbHkuCi0KLSAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9k
IGp1c3Qgc2NoZWR1bGVzIHRoZSB2aWV3IHRvIGJlIGFwcGVuZGVkOyB0aGUgRE9NCi0gICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnQgd2lsbCBub3QgYmUgYXBwZW5kZWQgdG8gdGhlIGdpdmVuIGVs
ZW1lbnQgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgZmluaXNo
ZWQgc3luY2hyb25pemluZy4KLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCB0eXBp
Y2FsbHkgYSBmdW5jdGlvbiB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY2FsbCBkaXJlY3RseSB3aGVu
Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHlvdXIgYXBwbGljYXRpb24uIFlvdSBtaWdo
dCBjb25zaWRlciB1c2luZyBgRW1iZXIuQ29udGFpbmVyVmlld2AKLSAgICAgICAgICAgICAgICAg
ICAgaW5zdGVhZC4gSWYgeW91IGRvIG5lZWQgdG8gdXNlIGBhcHBlbmRUb2AsIGJlIHN1cmUgdGhh
dCB0aGUgdGFyZ2V0IGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBwcm92aWRp
bmcgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGBFbWJlci5BcHBsaWNhdGlvbmAgYW5kIGRvZXMgbm90
Ci0gICAgICAgICAgICAgICAgICAgIGhhdmUgYW4gYW5jZXN0b3IgZWxlbWVudCB0aGF0IGlzIGFz
c29jaWF0ZWQgd2l0aCBhbiBFbWJlciB2aWV3LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgYXBwZW5kVG8KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd8RE9NRWxlbWVu
dHxqUXVlcnl9IEEgc2VsZWN0b3IsIGVsZW1lbnQsIEhUTUwgc3RyaW5nLCBvciBqUXVlcnkgb2Jq
ZWN0Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXBwZW5kVG86IGZ1bmN0aW9uKHRhcmdl
dCkgewotICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBET00gZWxlbWVudCB0byBiZSBj
cmVhdGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgZ2l2ZW4KLSAgICAgICAgICAgICAgICAvLyBlbGVt
ZW50IGFmdGVyIGJpbmRpbmdzIGhhdmUgc3luY2hyb25pemVkLgotICAgICAgICAgICAgICAgIHRo
aXMuX2luc2VydEVsZW1lbnRMYXRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
RW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gYXBwZW5kIHRvICgiICsgdGFyZ2V0ICsgIikgYnV0
IHRoYXQgaXNuJ3QgaW4gdGhlIERPTSIsIGpRdWVyeSh0YXJnZXQpLmxlbmd0aCA+IDApOwotICAg
ICAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5ub3QgYXBwZW5kIHRvIGFuIGV4
aXN0aW5nIEVtYmVyLlZpZXcuIENvbnNpZGVyIHVzaW5nIEVtYmVyLkNvbnRhaW5lclZpZXcgaW5z
dGVhZC4iLCAhalF1ZXJ5KHRhcmdldCkuaXMoJy5lbWJlci12aWV3JykgJiYgIWpRdWVyeSh0YXJn
ZXQpLnBhcmVudHMoKS5pcygnLmVtYmVyLXZpZXcnKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuJCgpLmFwcGVuZFRvKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyB0aGUgY29udGVudCBvZiB0aGUgc3BlY2lmaWVk
IHBhcmVudCBlbGVtZW50IHdpdGggdGhpcyB2aWV3J3MKLSAgICAgICAgICAgICAgICAgICAgZWxl
bWVudC4gSWYgdGhlIHZpZXcgZG9lcyBub3QgaGF2ZSBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIHll
dCwKLSAgICAgICAgICAgICAgICAgICAgYGNyZWF0ZUVsZW1lbnQoKWAgd2lsbCBiZSBjYWxsZWQg
YXV0b21hdGljYWxseS4KLQotICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRo
b2QganVzdCBzY2hlZHVsZXMgdGhlIHZpZXcgdG8gYmUgYXBwZW5kZWQ7IHRoZSBET00KLSAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudCB3aWxsIG5vdCBiZSBhcHBlbmRlZCB0byB0aGUgZ2l2ZW4g
ZWxlbWVudCB1bnRpbCBhbGwgYmluZGluZ3MgaGF2ZQotICAgICAgICAgICAgICAgICAgICBmaW5p
c2hlZCBzeW5jaHJvbml6aW5nCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCByZXBsYWNl
SW4KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd8RE9NRWxlbWVudHxqUXVlcnl9
IHRhcmdldCBBIHNlbGVjdG9yLCBlbGVtZW50LCBIVE1MIHN0cmluZywgb3IgalF1ZXJ5IG9iamVj
dAotICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlZAotICAg
ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlcGxhY2VJbjogZnVuY3Rpb24odGFyZ2V0
KSB7Ci0gICAgICAgICAgICAgICAgRW1iZXIuYXNzZXJ0KCJZb3UgdHJpZWQgdG8gcmVwbGFjZSBp
biAoIiArIHRhcmdldCArICIpIGJ1dCB0aGF0IGlzbid0IGluIHRoZSBET00iLCBqUXVlcnkodGFy
Z2V0KS5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIllvdSBjYW5u
b3QgcmVwbGFjZSBhbiBleGlzdGluZyBFbWJlci5WaWV3LiBDb25zaWRlciB1c2luZyBFbWJlci5D
b250YWluZXJWaWV3IGluc3RlYWQuIiwgIWpRdWVyeSh0YXJnZXQpLmlzKCcuZW1iZXItdmlldycp
ICYmICFqUXVlcnkodGFyZ2V0KS5wYXJlbnRzKCkuaXMoJy5lbWJlci12aWV3JykpOwotCi0gICAg
ICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudExhdGVyKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkodGFyZ2V0KS5lbXB0eSgpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLiQoKS5hcHBlbmRUbyh0YXJnZXQpOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgU2NoZWR1bGVzIGEgRE9NIG9wZXJhdGlvbiB0byBvY2N1
ciBkdXJpbmcgdGhlIG5leHQgcmVuZGVyIHBoYXNlLiBUaGlzCi0gICAgICAgICAgICAgICAgICAg
IGVuc3VyZXMgdGhhdCBhbGwgYmluZGluZ3MgaGF2ZSBmaW5pc2hlZCBzeW5jaHJvbml6aW5nIGJl
Zm9yZSB0aGUgdmlldyBpcwotICAgICAgICAgICAgICAgICAgICByZW5kZXJlZC4KLQotICAgICAg
ICAgICAgICAgICAgICBUbyB1c2UsIHBhc3MgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgRE9N
IG9wZXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91ciBmdW5jdGlvbiBp
cyBjYWxsZWQsIHRoaXMgdmlldyBhbmQgYWxsIGNoaWxkIHZpZXdzIHdpbGwgcmVjZWl2ZQotICAg
ICAgICAgICAgICAgICAgICB0aGUgYHdpbGxJbnNlcnRFbGVtZW50YCBldmVudC4gQWZ0ZXIgeW91
ciBmdW5jdGlvbiBpcyBpbnZva2VkLCB0aGlzIHZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5k
IGFsbCBvZiBpdHMgY2hpbGQgdmlld3Mgd2lsbCByZWNlaXZlIHRoZSBgZGlkSW5zZXJ0RWxlbWVu
dGAgZXZlbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICAgICAgICB2aWV3Ll9pbnNlcnRFbGVtZW50TGF0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgdGhpcy4kKCkuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX2lu
c2VydEVsZW1lbnRMYXRlcgotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBm
biB0aGUgZnVuY3Rpb24gdGhhdCBpbnNlcnRzIHRoZSBlbGVtZW50IGludG8gdGhlIERPTQotICAg
ICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIF9pbnNlcnRFbGVtZW50TGF0ZXI6IGZ1bmN0aW9uKGZuKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fc2NoZWR1bGVkSW5zZXJ0ID0gcnVuLnNjaGVkdWxlT25jZSgncmVuZGVyJywgdGhpcywg
J19pbnNlcnRFbGVtZW50JywgZm4pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgX2lu
c2VydEVsZW1lbnQ6IGZ1bmN0aW9uIChmbikgewotICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVk
dWxlZEluc2VydCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuaW5z
ZXJ0RWxlbWVudCh0aGlzLCBmbik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQXBwZW5kcyB0aGUgdmlldydzIGVsZW1lbnQgdG8gdGhlIGRv
Y3VtZW50IGJvZHkuIElmIHRoZSB2aWV3IGRvZXMKLSAgICAgICAgICAgICAgICAgICAgbm90IGhh
dmUgYW4gSFRNTCByZXByZXNlbnRhdGlvbiB5ZXQsIGBjcmVhdGVFbGVtZW50KClgIHdpbGwgYmUg
Y2FsbGVkCi0gICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkuCi0KLSAgICAgICAgICAg
ICAgICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIHRoZSBgcm9vdEVsZW1lbnRgIHByb3Bl
cnR5LCB5b3UgbXVzdCBhcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgdGhlIHZpZXcgd2l0aGlu
IHRoYXQgZWxlbWVudC4gUmVuZGVyaW5nIHZpZXdzIG91dHNpZGUgb2YgdGhlIGByb290RWxlbWVu
dGAKLSAgICAgICAgICAgICAgICAgICAgaXMgbm90IHN1cHBvcnRlZC4KLQotICAgICAgICAgICAg
ICAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QganVzdCBzY2hlZHVsZXMgdGhlIHZpZXcgdG8g
YmUgYXBwZW5kZWQ7IHRoZSBET00KLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudCB3aWxsIG5v
dCBiZSBhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSB1bnRpbCBhbGwgYmluZGluZ3MgaGF2
ZQotICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCBzeW5jaHJvbml6aW5nLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBtZXRob2QgYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e0VtYmVyLlZpZXd9IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
YXBwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRU
byhkb2N1bWVudC5ib2R5KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAg
ICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSB2aWV3J3MgZWxlbWVudCBmcm9tIHRoZSBlbGVt
ZW50IHRvIHdoaWNoIGl0IGlzIGF0dGFjaGVkLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRo
b2QgcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2Vp
dmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAvLyBXaGF0IHdlIHNob3VsZCByZWFsbHkgZG8gaGVyZSBpcyB3
YWl0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHJ1biBsb29wCi0gICAgICAgICAgICAgICAgLy8gdG8g
ZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGhhcyBiZWVuIHJlLWFwcGVuZGVkIHRvIGEgZGlmZmVy
ZW50Ci0gICAgICAgICAgICAgICAgLy8gZWxlbWVudC4KLSAgICAgICAgICAgICAgICAvLyBJbiB0
aGUgaW50ZXJpbSwgd2Ugd2lsbCBqdXN0IHJlLXJlbmRlciBpZiB0aGF0IGhhcHBlbnMuIEl0IGlz
IG1vcmUKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQgdGhhbiBlbGVtZW50cyBnZXQgZ2Fy
YmFnZSBjb2xsZWN0ZWQuCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW92ZWRGcm9tRE9N
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUVsZW1lbnQoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VSZWN1cnNpdmVseShmdW5jdGlv
bih2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmNsZWFyUmVuZGVyZWRDaGls
ZHJlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5jbGVhclJlbmRlcmVkQ2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgZWxlbWVudElkOiBudWxsLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gZGlzY292ZXIgdGhlIGVsZW1lbnQg
aW4gdGhlIHBhcmVudCBlbGVtZW50LiBUaGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbiBsb29rcyBmb3IgYW4gZWxlbWVudCB3aXRoIGFuIElEIG9mIGBlbGVtZW50
SWRgIChvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgdmlldydzIGd1aWQgaWYgYGVsZW1lbnRJ
ZGAgaXMgbnVsbCkuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8KLSAgICAgICAgICAg
ICAgICAgICAgcHJvdmlkZSB5b3VyIG93biBmb3JtIG9mIGxvb2t1cC4gRm9yIGV4YW1wbGUsIGlm
IHlvdSB3YW50IHRvIGRpc2NvdmVyIHlvdXIKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudCB1
c2luZyBhIENTUyBjbGFzcyBuYW1lIGluc3RlYWQgb2YgYW4gSUQuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBmaW5kRWxlbWVudEluUGFyZW50RWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudEVsZW1lbnQgVGhlIHBhcmVudCdzIERPTSBl
bGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSBkaXNj
b3ZlcmVkIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmaW5kRWxl
bWVudEluUGFyZW50RWxlbWVudDogZnVuY3Rpb24ocGFyZW50RWxlbSkgewotICAgICAgICAgICAg
ICAgIHZhciBpZCA9ICIjIiArIHRoaXMuZWxlbWVudElkOwotICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkoaWQpWzBdIHx8IGpRdWVyeShpZCwgcGFyZW50RWxlbSlbMF07Ci0gICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhIERP
TSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmlldyBhbmQgYWxsIG9mIGl0cwotICAgICAgICAgICAg
ICAgICAgICBjaGlsZCB2aWV3cyBieSByZWN1cnNpdmVseSBjYWxsaW5nIHRoZSBgcmVuZGVyKClg
IG1ldGhvZC4KLQotICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgZWxlbWVudCBoYXMgYmVl
biBjcmVhdGVkLCBgZGlkSW5zZXJ0RWxlbWVudGAgd2lsbAotICAgICAgICAgICAgICAgICAgICBi
ZSBjYWxsZWQgb24gdGhpcyB2aWV3IGFuZCBhbGwgb2YgaXRzIGNoaWxkIHZpZXdzLgotCi0gICAg
ICAgICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlRWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlm
IChnZXQodGhpcywgJ2VsZW1lbnQnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhp
cy5yZW5kZXJUb0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIHNldCh0aGlzLCAnZWxlbWVudCcs
IGJ1ZmZlci5lbGVtZW50KCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQ2FsbGVk
IHdoZW4gYSB2aWV3IGlzIGdvaW5nIHRvIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlIERPTS4K
LQotICAgICAgICAgICAgICAgICAgICBAZXZlbnQgd2lsbEluc2VydEVsZW1lbnQKLSAgICAgICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICB3aWxsSW5zZXJ0RWxlbWVudDogRW1iZXIuSywKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVt
ZW50IG9mIHRoZSB2aWV3IGhhcyBiZWVuIGluc2VydGVkIGludG8gdGhlIERPTQotICAgICAgICAg
ICAgICAgICAgICBvciBhZnRlciB0aGUgdmlldyB3YXMgcmUtcmVuZGVyZWQuIE92ZXJyaWRlIHRo
aXMgZnVuY3Rpb24gdG8gZG8gYW55Ci0gICAgICAgICAgICAgICAgICAgIHNldCB1cCB0aGF0IHJl
cXVpcmVzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IGJvZHkuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQGV2ZW50IGRpZEluc2VydEVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBkaWRJbnNlcnRFbGVtZW50OiBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIHZpZXcgaXMgYWJvdXQgdG8gcmVyZW5k
ZXIsIGJ1dCBiZWZvcmUgYW55dGhpbmcgaGFzCi0gICAgICAgICAgICAgICAgICAgIGJlZW4gdG9y
biBkb3duLiBUaGlzIGlzIGEgZ29vZCBvcHBvcnR1bml0eSB0byB0ZWFyIGRvd24gYW55IG1hbnVh
bAotICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMgeW91IGhhdmUgaW5zdGFsbGVkIGJhc2Vk
IG9uIHRoZSBET00gc3RhdGUKLQotICAgICAgICAgICAgICAgICAgICBAZXZlbnQgd2lsbENsZWFy
UmVuZGVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2lsbENsZWFyUmVuZGVy
OiBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUnVuIHRo
aXMgY2FsbGJhY2sgb24gdGhlIGN1cnJlbnQgdmlldyAodW5sZXNzIGluY2x1ZGVTZWxmIGlzIGZh
bHNlKSBhbmQgcmVjdXJzaXZlbHkgb24gY2hpbGQgdmlld3MuCi0KLSAgICAgICAgICAgICAgICAg
ICAgQG1ldGhvZCBpbnZva2VSZWN1cnNpdmVseQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0g
Zm4ge0Z1bmN0aW9ufQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gaW5jbHVkZVNlbGYge0Jv
b2xlYW59IEluY2x1ZGVzIGl0c2VsZiBpZiB0cnVlLgotICAgICAgICAgICAgICAgICAgICBAcHJp
dmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGludm9rZVJlY3Vyc2l2ZWx5
OiBmdW5jdGlvbihmbiwgaW5jbHVkZVNlbGYpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGRW
aWV3cyA9IChpbmNsdWRlU2VsZiA9PT0gZmFsc2UpID8gdGhpcy5fY2hpbGRWaWV3cyA6IFt0aGlz
XTsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZpZXdzLCB2aWV3LCBjdXJyZW50Q2hpbGRW
aWV3czsKLQotICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZFZpZXdzLmxlbmd0aCkgewotICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Vmlld3MgPSBjaGlsZFZpZXdzLnNsaWNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoaWxkVmlld3MgPSBbXTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IGN1cnJlbnRWaWV3cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBjdXJyZW50Vmlld3NbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50Q2hpbGRWaWV3cyA9IHZpZXcuX2NoaWxkVmlld3MgPyB2aWV3
Ll9jaGlsZFZpZXdzLnNsaWNlKDApIDogbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZu
KHZpZXcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGlsZFZpZXdzKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRWaWV3cy5wdXNoLmFwcGx5KGNoaWxk
Vmlld3MsIGN1cnJlbnRDaGlsZFZpZXdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIHRyaWdnZXJSZWN1cnNpdmVseTogZnVuY3Rpb24oZXZlbnROYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSBbdGhpc10sIGN1cnJlbnRWaWV3cywgdmll
dywgY3VycmVudENoaWxkVmlld3M7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRWaWV3
cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXdzID0gY2hpbGRWaWV3
cy5zbGljZSgpOwotICAgICAgICAgICAgICAgICAgICBjaGlsZFZpZXdzID0gW107Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjdXJyZW50Vmlld3MubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3ID0gY3VycmVudFZpZXdz
W2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoaWxkVmlld3MgPSB2aWV3Ll9j
aGlsZFZpZXdzID8gdmlldy5fY2hpbGRWaWV3cy5zbGljZSgwKSA6IG51bGw7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmlldy50cmlnZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmlldy50cmlnZ2VyKGV2ZW50TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENoaWxkVmlld3MpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFZpZXdzLnB1c2guYXBwbHkoY2hpbGRWaWV3cywg
Y3VycmVudENoaWxkVmlld3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICB2aWV3SGllcmFyY2h5Q29sbGVjdGlvbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGN1cnJlbnRWaWV3LCB2aWV3Q29sbGVjdGlvbiA9IG5ldyBWaWV3Q29sbGVjdGlv
bihbdGhpc10pOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Q29s
bGVjdGlvbi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmlldyA9
IHZpZXdDb2xsZWN0aW9uLm9iamVjdEF0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFZpZXcuX2NoaWxkVmlld3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb2xs
ZWN0aW9uLnB1c2guYXBwbHkodmlld0NvbGxlY3Rpb24sIGN1cnJlbnRWaWV3Ll9jaGlsZFZpZXdz
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiB2aWV3Q29sbGVjdGlvbjsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBEZXN0cm95cyBhbnkgZXhpc3RpbmcgZWxlbWVu
dCBhbG9uZyB3aXRoIHRoZSBlbGVtZW50IGZvciBhbnkgY2hpbGQgdmlld3MKLSAgICAgICAgICAg
ICAgICAgICAgYXMgd2VsbC4gSWYgdGhlIHZpZXcgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYSBl
bGVtZW50LCB0aGVuIHRoaXMgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIHdpbGwgZG8gbm90
aGluZy4KLQotICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaW1wbGVtZW50IGB3aWxsRGVzdHJv
eUVsZW1lbnQoKWAgb24geW91ciB2aWV3LCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwKLSAgICAgICAg
ICAgICAgICAgICAgYmUgaW52b2tlZCBvbiB5b3VyIHZpZXcgYmVmb3JlIHlvdXIgZWxlbWVudCBp
cyBkZXN0cm95ZWQgdG8gZ2l2ZSB5b3UgYQotICAgICAgICAgICAgICAgICAgICBjaGFuY2UgdG8g
Y2xlYW4gdXAgYW55IGV2ZW50IGhhbmRsZXJzLCBldGMuCi0KLSAgICAgICAgICAgICAgICAgICAg
SWYgeW91IHdyaXRlIGEgYHdpbGxEZXN0cm95RWxlbWVudCgpYCBoYW5kbGVyLCB5b3UgY2FuIGFz
c3VtZSB0aGF0IHlvdXIKLSAgICAgICAgICAgICAgICAgICAgYGRpZEluc2VydEVsZW1lbnQoKWAg
aGFuZGxlciB3YXMgY2FsbGVkIGVhcmxpZXIgZm9yIHRoZSBzYW1lIGVsZW1lbnQuCi0KLSAgICAg
ICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgY2FsbCBvciBvdmVycmlkZSB0aGlzIG1ldGhv
ZCB5b3Vyc2VsZiwgYnV0IHlvdSBtYXkKLSAgICAgICAgICAgICAgICAgICAgd2FudCB0byBpbXBs
ZW1lbnQgdGhlIGFib3ZlIGNhbGxiYWNrcy4KLQotICAgICAgICAgICAgICAgICAgICBAbWV0aG9k
IGRlc3Ryb3lFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9
IHJlY2VpdmVyCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVzdHJveUVsZW1l
bnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0
ZS5kZXN0cm95RWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBvZiB0aGUgdmll
dyBpcyBnb2luZyB0byBiZSBkZXN0cm95ZWQuIE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAg
IHRoaXMgZnVuY3Rpb24gdG8gZG8gYW55IHRlYXJkb3duIHRoYXQgcmVxdWlyZXMgYW4gZWxlbWVu
dCwgbGlrZSByZW1vdmluZwotICAgICAgICAgICAgICAgICAgICBldmVudCBsaXN0ZW5lcnMuCi0K
LSAgICAgICAgICAgICAgICAgICAgQGV2ZW50IHdpbGxEZXN0cm95RWxlbWVudAotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIHdpbGxEZXN0cm95RWxlbWVudDogRW1iZXIuSywKLQot
ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFRyaWdnZXJzIHRoZSBgd2lsbERl
c3Ryb3lFbGVtZW50YCBldmVudCAod2hpY2ggaW52b2tlcyB0aGUKLSAgICAgICAgICAgICAgICAg
ICAgYHdpbGxEZXN0cm95RWxlbWVudCgpYCBtZXRob2QgaWYgaXQgZXhpc3RzKSBvbiB0aGlzIHZp
ZXcgYW5kIGFsbCBjaGlsZAotICAgICAgICAgICAgICAgICAgICB2aWV3cy4KLQotICAgICAgICAg
ICAgICAgICAgICBCZWZvcmUgdHJpZ2dlcmluZyBgd2lsbERlc3Ryb3lFbGVtZW50YCwgaXQgZmly
c3QgdHJpZ2dlcnMgdGhlCi0gICAgICAgICAgICAgICAgICAgIGB3aWxsQ2xlYXJSZW5kZXJgIGV2
ZW50IHJlY3Vyc2l2ZWx5LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgX25vdGlmeVdp
bGxEZXN0cm95RWxlbWVudAotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAg
ICAgICAgICAgKi8KLSAgICAgICAgICAgIF9ub3RpZnlXaWxsRGVzdHJveUVsZW1lbnQ6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB2aWV3Q29sbGVjdGlvbiA9IHRoaXMudmlld0hp
ZXJhcmNoeUNvbGxlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi50cmln
Z2VyKCd3aWxsQ2xlYXJSZW5kZXInKTsKLSAgICAgICAgICAgICAgICB2aWV3Q29sbGVjdGlvbi50
cmlnZ2VyKCd3aWxsRGVzdHJveUVsZW1lbnQnKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmll
d0NvbGxlY3Rpb247Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgSWYgdGhpcyB2aWV3J3MgZWxlbWVudCBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGlu
dmFsaWRhdGUgdGhlIGNhY2hlcyBvZiBvdXIKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQgdmll
d3Mgc28gdGhhdCB3ZSBkbyBub3QgcmV0YWluIHJlZmVyZW5jZXMgdG8gRE9NIGVsZW1lbnRzIHRo
YXQgYXJlCi0gICAgICAgICAgICAgICAgICAgIG5vIGxvbmdlciBuZWVkZWQuCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBfZWxlbWVudERpZENoYW5nZQotICAgICAgICAgICAgICAgICAg
ICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9lbGVtZW50RGlk
Q2hhbmdlOiBvYnNlcnZlcignZWxlbWVudCcsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHRoaXMuZm9yRWFjaENoaWxkVmlldyhjbGVhckNhY2hlZEVsZW1lbnQpOwotICAgICAgICAgICAg
fSksCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0
aGUgcGFyZW50VmlldyBwcm9wZXJ0eSBoYXMgY2hhbmdlZC4KLQotICAgICAgICAgICAgICAgICAg
ICBAZXZlbnQgcGFyZW50Vmlld0RpZENoYW5nZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHBhcmVudFZpZXdEaWRDaGFuZ2U6IEVtYmVyLkssCi0KLSAgICAgICAgICAgIGluc3Ry
dW1lbnROYW1lOiAndmlldycsCi0KLSAgICAgICAgICAgIGluc3RydW1lbnREZXRhaWxzOiBmdW5j
dGlvbihoYXNoKSB7Ci0gICAgICAgICAgICAgICAgaGFzaC50ZW1wbGF0ZSA9IGdldCh0aGlzLCAn
dGVtcGxhdGVOYW1lJyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoaGFzaCk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBfcmVuZGVyVG9CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZl
cikgewotICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoQmVmb3JlUmVuZGVyID0gdGhpcy5fY2hp
bGRWaWV3cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5fc3VwZXIoYnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aEFmdGVyUmVuZGVyID0gdGhpcy5fY2hp
bGRWaWV3cy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgcmVuZGVyVG9CdWZmZXJJZk5lZWRlZDogZnVuY3Rpb24g
KGJ1ZmZlcikgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5yZW5k
ZXJUb0J1ZmZlcklmTmVlZGVkKHRoaXMsIGJ1ZmZlcik7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uKGJ1ZmZlcikgewotICAgICAgICAgICAgICAg
IHRoaXMuYXBwbHlBdHRyaWJ1dGVzVG9CdWZmZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICBi
dWZmZXIucHVzaE9wZW5pbmdUYWcoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFm
dGVyUmVuZGVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICBidWZmZXIucHVz
aENsb3NpbmdUYWcoKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFwcGx5QXR0cmli
dXRlc1RvQnVmZmVyOiBmdW5jdGlvbihidWZmZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBDcmVh
dGVzIG9ic2VydmVycyBmb3IgYWxsIHJlZ2lzdGVyZWQgY2xhc3MgbmFtZSBhbmQgYXR0cmlidXRl
IGJpbmRpbmdzLAotICAgICAgICAgICAgICAgIC8vIHRoZW4gYWRkcyB0aGVtIHRvIHRoZSBlbGVt
ZW50LgotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWVCaW5kaW5ncyA9IGdldCh0aGlzLCAn
Y2xhc3NOYW1lQmluZGluZ3MnKTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lQmluZGlu
Z3MubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5Q2xhc3NOYW1lQmlu
ZGluZ3MoY2xhc3NOYW1lQmluZGluZ3MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIFBhc3MgdGhlIHJlbmRlciBidWZmZXIgc28gdGhlIG1ldGhvZCBjYW4gYXBwbHkg
YXR0cmlidXRlcyBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzbid0IG5lZWRl
ZCBmb3IgY2xhc3MgbmFtZSBiaW5kaW5ncyBiZWNhdXNlIHRoZXkgdXNlIHRoZQotICAgICAgICAg
ICAgICAgIC8vIGV4aXN0aW5nIGNsYXNzTmFtZXMgaW5mcmFzdHJ1Y3R1cmUuCi0gICAgICAgICAg
ICAgICAgdmFyIGF0dHJpYnV0ZUJpbmRpbmdzID0gZ2V0KHRoaXMsICdhdHRyaWJ1dGVCaW5kaW5n
cycpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVCaW5kaW5ncy5sZW5ndGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlBdHRyaWJ1dGVCaW5kaW5ncyhidWZmZXIsIGF0
dHJpYnV0ZUJpbmRpbmdzKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBi
dWZmZXIuc2V0Q2xhc3Nlcyh0aGlzLmNsYXNzTmFtZXMpOwotICAgICAgICAgICAgICAgIGJ1ZmZl
ci5pZCh0aGlzLmVsZW1lbnRJZCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm9sZSA9IGdldCh0
aGlzLCAnYXJpYVJvbGUnKTsKLSAgICAgICAgICAgICAgICBpZiAocm9sZSkgewotICAgICAgICAg
ICAgICAgICAgICBidWZmZXIuYXR0cigncm9sZScsIHJvbGUpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChnZXQodGhpcywgJ2lzVmlzaWJsZScpID09PSBmYWxzZSkg
ewotICAgICAgICAgICAgICAgICAgICBidWZmZXIuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAg
ICAgICAgICAgIC8vIFNUQU5EQVJEIFJFTkRFUiBQUk9QRVJUSUVTCi0gICAgICAgICAgICAvLwot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGFnIG5hbWUgZm9yIHRoZSB2
aWV3J3Mgb3V0ZXIgZWxlbWVudC4gVGhlIHRhZyBuYW1lIGlzIG9ubHkgdXNlZCB3aGVuIGFuCi0g
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgaXMgZmlyc3QgY3JlYXRlZC4gSWYgeW91IGNoYW5n
ZSB0aGUgYHRhZ05hbWVgIGZvciBhbiBlbGVtZW50LCB5b3UKLSAgICAgICAgICAgICAgICAgICAg
bXVzdCBkZXN0cm95IGFuZCByZWNyZWF0ZSB0aGUgdmlldyBlbGVtZW50LgotCi0gICAgICAgICAg
ICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSByZW5kZXIgYnVmZmVyIHdpbGwgdXNlIGEgYDxkaXY+
YCB0YWcgZm9yIHZpZXdzLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSB0YWdOYW1l
Ci0gICAgICAgICAgICAgICAgICAgIEB0eXBlIFN0cmluZwotICAgICAgICAgICAgICAgICAgICBA
ZGVmYXVsdCBudWxsCi0gICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAvLyBXZSBs
ZWF2ZSB0aGlzIG51bGwgYnkgZGVmYXVsdCBzbyB3ZSBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuCi0gICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBjYXNlIGFuZCBhIHVzZXItc3BlY2lm
aWVkIHRhZy4KLSAgICAgICAgICAgIHRhZ05hbWU6IG51bGwsCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBUaGUgV0FJLUFSSUEgcm9sZSBvZiB0aGUgY29udHJvbCByZXBy
ZXNlbnRlZCBieSB0aGlzIHZpZXcuIEZvciBleGFtcGxlLCBhCi0gICAgICAgICAgICAgICAgICAg
IGJ1dHRvbiBtYXkgaGF2ZSBhIHJvbGUgb2YgdHlwZSAnYnV0dG9uJywgb3IgYSBwYW5lIG1heSBo
YXZlIGEgcm9sZSBvZgotICAgICAgICAgICAgICAgICAgICB0eXBlICdhbGVydGRpYWxvZycuIFRo
aXMgcHJvcGVydHkgaXMgdXNlZCBieSBhc3Npc3RpdmUgc29mdHdhcmUgdG8gaGVscAotICAgICAg
ICAgICAgICAgICAgICB2aXN1YWxseSBjaGFsbGVuZ2VkIHVzZXJzIG5hdmlnYXRlIHJpY2ggd2Vi
IGFwcGxpY2F0aW9ucy4KLQotICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBsaXN0IG9mIHZh
bGlkIFdBSS1BUklBIHJvbGVzIGlzIGF2YWlsYWJsZSBhdDoKLSAgICAgICAgICAgICAgICAgICAg
W2h0dHA6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhL3JvbGVzI3JvbGVzX2NhdGVnb3JpemF0aW9u
XShodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS9yb2xlcyNyb2xlc19jYXRlZ29yaXphdGlv
bikKLQotICAgICAgICAgICAgICAgICAgICBAcHJvcGVydHkgYXJpYVJvbGUKLSAgICAgICAgICAg
ICAgICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IG51bGwK
LSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhcmlhUm9sZTogbnVsbCwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIENTUyBjbGFzcyBuYW1l
cyB0byBhcHBseSB0byB0aGUgdmlldydzIG91dGVyIGVsZW1lbnQuIFRoaXMKLSAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHkgYXV0b21hdGljYWxseSBpbmhlcml0cyBhbnkgY2xhc3MgbmFtZXMg
ZGVmaW5lZCBieSB0aGUgdmlldydzCi0gICAgICAgICAgICAgICAgICAgIHN1cGVyY2xhc3NlcyBh
cyB3ZWxsLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjbGFzc05hbWVzCi0gICAg
ICAgICAgICAgICAgICAgIEB0eXBlIEFycmF5Ci0gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0
IFsnZW1iZXItdmlldyddCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY2xhc3NO
YW1lczogWydlbWJlci12aWV3J10sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAg
ICAgICBBIGxpc3Qgb2YgcHJvcGVydGllcyBvZiB0aGUgdmlldyB0byBhcHBseSBhcyBjbGFzcyBu
YW1lcy4gSWYgdGhlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIGlzIGEgc3RyaW5nIHZh
bHVlLCB0aGUgdmFsdWUgb2YgdGhhdCBzdHJpbmcgd2lsbCBiZSBhcHBsaWVkIGFzIGEgY2xhc3MK
LSAgICAgICAgICAgICAgICAgICAgbmFtZS4KLQotICAgICAgICAgICAgICAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFwcGxpZXMgdGhlICdoaWdoJyBjbGFzcyB0
byB0aGUgdmlldyBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydwcmlvcml0eSdd
Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6ICdoaWdoJwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAg
SWYgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpcyBhIEJvb2xlYW4sIHRoZSBuYW1lIG9mIHRo
YXQgcHJvcGVydHkgaXMKLSAgICAgICAgICAgICAgICAgICAgYWRkZWQgYXMgYSBkYXNoZXJpemVk
IGNsYXNzIG5hbWUuCi0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICAvLyBBcHBsaWVzIHRoZSAnaXMtdXJnZW50JyBjbGFzcyB0byB0aGUgdmll
dyBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAg
ICAgICAgICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc1VyZ2VudCddCi0gICAgICAg
ICAgICAgICAgICAgICAgaXNVcmdlbnQ6IHRydWUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgICAgICAgIElmIHlvdSB3b3Vs
ZCBwcmVmZXIgdG8gdXNlIGEgY3VzdG9tIHZhbHVlIGluc3RlYWQgb2YgdGhlIGRhc2hlcml6ZWQK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgbmFtZSwgeW91IGNhbiBwYXNzIGEgYmluZGlu
ZyBsaWtlIHRoaXM6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICAgICAgICAvLyBBcHBsaWVzIHRoZSAndXJnZW50JyBjbGFzcyB0byB0aGUgdmlldyBl
bGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc1VyZ2VudDp1cmdlbnQnXQotICAg
ICAgICAgICAgICAgICAgICAgIGlzVXJnZW50OiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBUaGlzIGxp
c3Qgb2YgcHJvcGVydGllcyBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgdmlldydzIHN1cGVyY2xhc3Nl
cyBhcyB3ZWxsLgotCi0gICAgICAgICAgICAgICAgICAgIEBwcm9wZXJ0eSBjbGFzc05hbWVCaW5k
aW5ncwotICAgICAgICAgICAgICAgICAgICBAdHlwZSBBcnJheQotICAgICAgICAgICAgICAgICAg
ICBAZGVmYXVsdCBbXQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNsYXNzTmFt
ZUJpbmRpbmdzOiBFTVBUWV9BUlJBWSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
ICAgICAgIEEgbGlzdCBvZiBwcm9wZXJ0aWVzIG9mIHRoZSB2aWV3IHRvIGFwcGx5IGFzIGF0dHJp
YnV0ZXMuIElmIHRoZSBwcm9wZXJ0eSBpcwotICAgICAgICAgICAgICAgICAgICBhIHN0cmluZyB2
YWx1ZSwgdGhlIHZhbHVlIG9mIHRoYXQgc3RyaW5nIHdpbGwgYmUgYXBwbGllZCBhcyB0aGUgYXR0
cmlidXRlLgotCi0gICAgICAgICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQXBwbGllcyB0aGUgdHlwZSBhdHRyaWJ1dGUgdG8gdGhlIGVsZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgdmFsdWUgImJ1dHRvbiIsIGxpa2UgPGRpdiB0
eXBlPSJidXR0b24iPgotICAgICAgICAgICAgICAgICAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0g
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsndHlwZSddLAotICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nCi0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICAgICAgICBJZiB0aGUgdmFs
dWUgb2YgdGhlIHByb3BlcnR5IGlzIGEgQm9vbGVhbiwgdGhlIG5hbWUgb2YgdGhhdCBwcm9wZXJ0
eSBpcwotICAgICAgICAgICAgICAgICAgICBhZGRlZCBhcyBhbiBhdHRyaWJ1dGUuCi0KLSAgICAg
ICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICAvLyBSZW5k
ZXJzIHNvbWV0aGluZyBsaWtlIDxkaXYgZW5hYmxlZD0iZW5hYmxlZCI+Ci0gICAgICAgICAgICAg
ICAgICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVCaW5kaW5nczogWydlbmFibGVkJ10sCi0gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDog
dHJ1ZQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgICAgICAgQHByb3BlcnR5IGF0dHJpYnV0ZUJpbmRpbmdzCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgYXR0cmlidXRlQmluZGluZ3M6IEVNUFRZX0FSUkFZ
LAotCi0gICAgICAgICAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uCi0gICAgICAgICAgICAvLyBDT1JFIERJU1BMQVkgTUVUSE9EUwot
ICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFNl
dHVwIGEgdmlldywgYnV0IGRvIG5vdCBmaW5pc2ggd2FraW5nIGl0IHVwLgotCi0gICAgICAgICAg
ICAgICAgICAgICogY29uZmlndXJlIGBjaGlsZFZpZXdzYAotICAgICAgICAgICAgICAgICAgICAq
IHJlZ2lzdGVyIHRoZSB2aWV3IHdpdGggdGhlIGdsb2JhbCB2aWV3cyBoYXNoLCB3aGljaCBpcyB1
c2VkIGZvciBldmVudAotICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoCi0KLSAgICAgICAg
ICAgICAgICAgICAgQG1ldGhvZCBpbml0Ci0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0g
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSB0aGlzLmVsZW1lbnRJZCB8fCBndWlkRm9yKHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIoKTsKLQotICAgICAgICAgICAgICAg
IC8vIHNldHVwIGNoaWxkIHZpZXdzLiBiZSBzdXJlIHRvIGNsb25lIHRoZSBjaGlsZCB2aWV3cyBh
cnJheSBmaXJzdAotICAgICAgICAgICAgICAgIHRoaXMuX2NoaWxkVmlld3MgPSB0aGlzLl9jaGls
ZFZpZXdzLnNsaWNlKCk7Ci0KLSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIk9ubHkgYXJy
YXlzIGFyZSBhbGxvd2VkIGZvciAnY2xhc3NOYW1lQmluZGluZ3MnIiwgdHlwZU9mKHRoaXMuY2xh
c3NOYW1lQmluZGluZ3MpID09PSAnYXJyYXknKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNsYXNz
TmFtZUJpbmRpbmdzID0gZW1iZXJBKHRoaXMuY2xhc3NOYW1lQmluZGluZ3Muc2xpY2UoKSk7Ci0K
LSAgICAgICAgICAgICAgICBFbWJlci5hc3NlcnQoIk9ubHkgYXJyYXlzIGFyZSBhbGxvd2VkIGZv
ciAnY2xhc3NOYW1lcyciLCB0eXBlT2YodGhpcy5jbGFzc05hbWVzKSA9PT0gJ2FycmF5Jyk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWVzID0gZW1iZXJBKHRoaXMuY2xhc3NOYW1lcy5z
bGljZSgpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFwcGVuZENoaWxkOiBmdW5j
dGlvbih2aWV3LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVu
dFN0YXRlLmFwcGVuZENoaWxkKHRoaXMsIHZpZXcsIG9wdGlvbnMpOwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIFJlbW92ZXMgdGhlIGNoaWxk
IHZpZXcgZnJvbSB0aGUgcGFyZW50IHZpZXcuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhv
ZCByZW1vdmVDaGlsZAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge0VtYmVyLlZpZXd9IHZp
ZXcKLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuVmlld30gcmVjZWl2ZXIKLSAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24odmll
dykgewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGRlc3Ryb3lpbmcsIHRoZSBlbnRpcmUg
c3VidHJlZSB3aWxsIGJlCi0gICAgICAgICAgICAgICAgLy8gZnJlZWQsIGFuZCB0aGUgRE9NIHdp
bGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LAotICAgICAgICAgICAgICAgIC8vIHNvIG5vIG5lZWQg
dG8gbWVzcyB3aXRoIGNoaWxkVmlld3MuCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0
cm95aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IG5vZGUKLSAgICAgICAgICAgICAg
ICBzZXQodmlldywgJ19wYXJlbnRWaWV3JywgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBy
ZW1vdmUgdmlldyBmcm9tIGNoaWxkVmlld3MgYXJyYXkuCi0gICAgICAgICAgICAgICAgdmFyIGNo
aWxkVmlld3MgPSB0aGlzLl9jaGlsZFZpZXdzOwotCi0gICAgICAgICAgICAgICAgcmVtb3ZlT2Jq
ZWN0KGNoaWxkVmlld3MsIHZpZXcpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eURp
ZENoYW5nZSgnY2hpbGRWaWV3cycpOyAvLyBIVUg/ISB3aGF0IGhhcHBlbmVkIHRvIHdpbGwgY2hh
bmdlPwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyBhbGwgY2hpbGRyZW4g
ZnJvbSB0aGUgYHBhcmVudFZpZXdgLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVt
b3ZlQWxsQ2hpbGRyZW4KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7RW1iZXIuVmlld30g
cmVjZWl2ZXIKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZW1vdmVBbGxDaGls
ZHJlbjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubXV0YXRlQ2hp
bGRWaWV3cyhmdW5jdGlvbihwYXJlbnRWaWV3LCB2aWV3KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmVudFZpZXcucmVtb3ZlQ2hpbGQodmlldyk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBkZXN0cm95QWxsQ2hpbGRyZW46IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm11dGF0ZUNoaWxkVmlld3MoZnVuY3Rpb24o
cGFyZW50VmlldywgdmlldykgewotICAgICAgICAgICAgICAgICAgICB2aWV3LmRlc3Ryb3koKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgot
ICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSB2aWV3IGZyb20gaXRzIGBwYXJlbnRWaWV3
YCwgaWYgb25lIGlzIGZvdW5kLiBPdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAgZG9lcyBu
b3RoaW5nLgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgcmVtb3ZlRnJvbVBhcmVudAot
ICAgICAgICAgICAgICAgICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlbW92ZUZyb21QYXJlbnQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLl9wYXJlbnRWaWV3OwotCi0gICAg
ICAgICAgICAgICAgLy8gUmVtb3ZlIERPTSBlbGVtZW50IGZyb20gcGFyZW50Ci0gICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjYWxsIGBkZXN0cm95
YCBvbiBhIHZpZXcgdG8gZGVzdHJveSB0aGUgdmlldyAoYW5kIGFsbCBvZiBpdHMKLSAgICAgICAg
ICAgICAgICAgICAgY2hpbGQgdmlld3MpLiBUaGlzIHdpbGwgcmVtb3ZlIHRoZSB2aWV3IGZyb20g
YW55IHBhcmVudCBub2RlLCB0aGVuIG1ha2UKLSAgICAgICAgICAgICAgICAgICAgc3VyZSB0aGF0
IHRoZSBET00gZWxlbWVudCBtYW5hZ2VkIGJ5IHRoZSB2aWV3IGNhbiBiZSByZWxlYXNlZCBieSB0
aGUKLSAgICAgICAgICAgICAgICAgICAgbWVtb3J5IG1hbmFnZXIuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ZGVzdHJveTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoaWxkVmlld3MgPSB0
aGlzLl9jaGlsZFZpZXdzLAotICAgICAgICAgICAgICAgIC8vIGdldCBwYXJlbnRWaWV3IGJlZm9y
ZSBjYWxsaW5nIHN1cGVyIGJlY2F1c2UgaXQnbGwgYmUgZGVzdHJveWVkCi0gICAgICAgICAgICAg
ICAgbm9uVmlydHVhbFBhcmVudFZpZXcgPSBnZXQodGhpcywgJ3BhcmVudFZpZXcnKSwKLSAgICAg
ICAgICAgICAgICB2aWV3TmFtZSA9IHRoaXMudmlld05hbWUsCi0gICAgICAgICAgICAgICAgY2hp
bGRMZW4sIGk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N1cGVyKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGNoaWxkTGVuID0gY2hpbGRWaWV3cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZm9yIChp
ID0gY2hpbGRMZW4tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRW
aWV3c1tpXS5yZW1vdmVkRnJvbURPTSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gbm9uLXZpcnR1YWwgcGFyZW50IHZpZXcgaWYgdmll
d05hbWUgd2FzIHNwZWNpZmllZAotICAgICAgICAgICAgICAgIGlmICh2aWV3TmFtZSAmJiBub25W
aXJ0dWFsUGFyZW50VmlldykgewotICAgICAgICAgICAgICAgICAgICBub25WaXJ0dWFsUGFyZW50
Vmlldy5zZXQodmlld05hbWUsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGNoaWxkTGVuID0gY2hpbGRWaWV3cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZm9y
IChpID0gY2hpbGRMZW4tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGRWaWV3c1tpXS5kZXN0cm95KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICAgSW5zdGFudGlhdGVzIGEgdmlldyB0byBiZSBhZGRlZCB0byB0aGUgY2hp
bGRWaWV3cyBhcnJheSBkdXJpbmcgdmlldwotICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXph
dGlvbi4gWW91IGdlbmVyYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5IHVu
bGVzcwotICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIG92ZXJyaWRpbmcgYGNyZWF0ZUNoaWxk
Vmlld3MoKWAuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCB3aWxsCi0gICAgICAgICAgICAgICAgICAg
IGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHRoZSBjb3JyZWN0IHNldHRpbmdzIG9uIHRoZSBuZXcg
dmlldyBpbnN0YW5jZSB0bwotICAgICAgICAgICAgICAgICAgICBhY3QgYXMgYSBjaGlsZCBvZiB0
aGUgcGFyZW50LgotCi0gICAgICAgICAgICAgICAgICAgIEBtZXRob2QgY3JlYXRlQ2hpbGRWaWV3
Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Q2xhc3N8U3RyaW5nfSB2aWV3Q2xhc3MKLSAg
ICAgICAgICAgICAgICAgICAgQHBhcmFtIHtIYXNofSBbYXR0cnNdIEF0dHJpYnV0ZXMgdG8gYWRk
Ci0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IG5ldyBpbnN0YW5jZQot
ICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNyZWF0ZUNoaWxkVmlldzogZnVuY3Rp
b24odmlldywgYXR0cnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY3JlYXRlQ2hpbGRWaWV3cyBmaXJzdCBh
cmd1bWVudCBtdXN0IGV4aXN0Iik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHZpZXcuaXNWaWV3ICYmIHZpZXcuX3BhcmVudFZpZXcgPT09IHRoaXMgJiYgdmlldy5j
b250YWluZXIgPT09IHRoaXMuY29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB2aWV3OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGF0dHJzID0gYXR0
cnMgfHwge307Ci0gICAgICAgICAgICAgICAgYXR0cnMuX3BhcmVudFZpZXcgPSB0aGlzOwotCi0g
ICAgICAgICAgICAgICAgaWYgKENvcmVWaWV3LmRldGVjdCh2aWV3KSkgewotICAgICAgICAgICAg
ICAgICAgICBhdHRycy50ZW1wbGF0ZURhdGEgPSBhdHRycy50ZW1wbGF0ZURhdGEgfHwgZ2V0KHRo
aXMsICd0ZW1wbGF0ZURhdGEnKTsKLQotICAgICAgICAgICAgICAgICAgICBhdHRycy5jb250YWlu
ZXIgPSB0aGlzLmNvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IHZpZXcuY3Jl
YXRlKGF0dHJzKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzZXQgdGhlIHByb3Bl
cnR5IG9uIGEgdmlydHVhbCB2aWV3LCBhcyB0aGV5IGFyZSBpbnZpc2libGUgdG8KLSAgICAgICAg
ICAgICAgICAgICAgLy8gY29uc3VtZXJzIG9mIHRoZSB2aWV3IEFQSQotICAgICAgICAgICAgICAg
ICAgICBpZiAodmlldy52aWV3TmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGdl
dCh0aGlzLCAnY29uY3JldGVWaWV3JyksIHZpZXcudmlld05hbWUsIHZpZXcpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlw
ZW9mIHZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxOYW1lID0gJ3ZpZXc6JyAr
IHZpZXc7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBWaWV3S2xhc3MgPSB0aGlzLmNvbnRhaW5l
ci5sb29rdXBGYWN0b3J5KGZ1bGxOYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICBFbWJlci5h
c3NlcnQoIkNvdWxkIG5vdCBmaW5kIHZpZXc6ICciICsgZnVsbE5hbWUgKyAiJyIsICEhVmlld0ts
YXNzKTsKLQotICAgICAgICAgICAgICAgICAgICBhdHRycy50ZW1wbGF0ZURhdGEgPSBnZXQodGhp
cywgJ3RlbXBsYXRlRGF0YScpOwotICAgICAgICAgICAgICAgICAgICB2aWV3ID0gVmlld0tsYXNz
LmNyZWF0ZShhdHRycyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgRW1iZXIuYXNzZXJ0KCdZb3UgbXVzdCBwYXNzIGluc3RhbmNlIG9yIHN1YmNsYXNzIG9m
IFZpZXcnLCB2aWV3LmlzVmlldyk7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJzLmNvbnRhaW5l
ciA9IHRoaXMuY29udGFpbmVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0KHZpZXcs
ICd0ZW1wbGF0ZURhdGEnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMudGVtcGxh
dGVEYXRhID0gZ2V0KHRoaXMsICd0ZW1wbGF0ZURhdGEnKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHNldFByb3BlcnRpZXModmlldywgYXR0cnMpOwotCi0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBiZWNhbWVWaXNpYmxlOiBFbWJlci5LLAotICAgICAgICAg
ICAgYmVjYW1lSGlkZGVuOiBFbWJlci5LLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgICAgICAgV2hlbiB0aGUgdmlldydzIGBpc1Zpc2libGVgIHByb3BlcnR5IGNoYW5nZXMsIHRv
Z2dsZSB0aGUgdmlzaWJpbGl0eQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9mIHRoZSBh
Y3R1YWwgRE9NIGVsZW1lbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgQG1ldGhvZCBfaXNWaXNp
YmxlRGlkQ2hhbmdlCi0gICAgICAgICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgX2lzVmlzaWJsZURpZENoYW5nZTogb2JzZXJ2ZXIoJ2lzVmlz
aWJsZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1Zpc2libGUg
PT09IGdldCh0aGlzLCAnaXNWaXNpYmxlJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcnVuLnNjaGVkdWxlT25jZSgn
cmVuZGVyJywgdGhpcywgdGhpcy5fdG9nZ2xlVmlzaWJpbGl0eSk7Ci0gICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgX3RvZ2dsZVZpc2liaWxpdHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciAkZWwgPSB0aGlzLiQoKTsKLSAgICAgICAgICAgICAgICBpZiAoISRlbCkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIGlzVmlzaWJsZSA9IGdldCh0aGlzLCAnaXNWaXNpYmxlJyk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5faXNWaXNpYmxlID09PSBpc1Zpc2libGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAkZWwudG9nZ2xlKGlzVmlzaWJsZSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9pc1Zpc2li
bGUgPSBpc1Zpc2libGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNBbmNlc3Rvckhp
ZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX25vdGlmeUJlY2FtZVZpc2libGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlCZWNhbWVIaWRkZW4oKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfbm90aWZ5QmVjYW1lVmlz
aWJsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWNhbWVW
aXNpYmxlJyk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hDaGlsZFZpZXcoZnVuY3Rp
b24odmlldykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaXNWaXNpYmxlID0gZ2V0KHZpZXcs
ICdpc1Zpc2libGUnKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNWaXNpYmxlIHx8IGlz
VmlzaWJsZSA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5fbm90aWZ5
QmVjYW1lVmlzaWJsZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBfbm90aWZ5QmVjYW1lSGlkZGVuOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlY2FtZUhpZGRlbicp
OwotICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaENoaWxkVmlldyhmdW5jdGlvbih2aWV3KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpc1Zpc2libGUgPSBnZXQodmlldywgJ2lzVmlzaWJs
ZScpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc1Zpc2libGUgfHwgaXNWaXNpYmxlID09
PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Ll9ub3RpZnlCZWNhbWVIaWRk
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgX2lzQW5jZXN0b3JIaWRkZW46IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBnZXQodGhpcywgJ3BhcmVudFZpZXcnKTsKLQot
ICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGdldChwYXJlbnQsICdpc1Zpc2libGUnKSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcGFyZW50ID0gZ2V0KHBhcmVudCwgJ3BhcmVudFZpZXcnKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBjbGVhckJ1ZmZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5pbnZva2VSZWN1cnNpdmVseShudWxsVmlld3NCdWZmZXIpOwotICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgIHRyYW5zaXRpb25UbzogZnVuY3Rpb24oc3RhdGUsIGNoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICAgICAgRW1iZXIuZGVwcmVjYXRlKCJFbWJlci5WaWV3I3RyYW5zaXRpb25UbyBo
YXMgYmVlbiBkZXByZWNhdGVkLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkiKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG8oc3RhdGUsIGNoaWxkcmVuKTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBfdHJhbnNpdGlvblRvOiBmdW5jdGlvbihzdGF0ZSwgY2hpbGRy
ZW4pIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJpb3JTdGF0ZSA9IHRoaXMuY3VycmVudFN0YXRl
OwotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSB0aGlzLmN1cnJlbnRTdGF0ZSA9
IHRoaXMuX3N0YXRlc1tzdGF0ZV07Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0
YXRlOwotCi0gICAgICAgICAgICAgICAgaWYgKHByaW9yU3RhdGUgJiYgcHJpb3JTdGF0ZS5leGl0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW9yU3RhdGUuZXhpdCh0aGlzKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5lbnRlcikgewotICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUuZW50ZXIodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2luRE9NJykgewotICAgICAgICAg
ICAgICAgICAgICBtZXRhKHRoaXMpLmNhY2hlLmVsZW1lbnQgPSB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuICE9PSBmYWxzZSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hDaGlsZFZpZXcoZnVuY3Rpb24odmlldykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5fdHJhbnNpdGlvblRvKHN0YXRlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLgotICAgICAgICAgICAgLy8gRVZFTlQgSEFORExJTkcKLSAgICAgICAg
ICAgIC8vCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBIYW5kbGUgZXZl
bnRzIGZyb20gYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAKLQotICAgICAgICAgICAgICAgICAgICBA
bWV0aG9kIGhhbmRsZUV2ZW50Ci0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSBldmVudE5hbWUg
e1N0cmluZ30KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGV2dCB7RXZlbnR9Ci0gICAgICAg
ICAgICAgICAgICAgIEBwcml2YXRlCi0gICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgZXZ0KSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuY3VycmVudFN0YXRlLmhhbmRsZUV2ZW50KHRoaXMsIGV2ZW50TmFtZSwgZXZ0
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlZ2lzdGVyT2JzZXJ2ZXI6IGZ1bmN0
aW9uKHJvb3QsIHBhdGgsIHRhcmdldCwgb2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IW9ic2VydmVyICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiB0YXJnZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZXIgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFyb290IHx8
IHR5cGVvZiByb290ICE9PSAnb2JqZWN0JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLAot
ICAgICAgICAgICAgICAgIHN0YXRlQ2hlY2tlZE9ic2VydmVyID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZpZXcuY3VycmVudFN0YXRlLmludm9rZU9ic2VydmVyKHRoaXMsIG9i
c2VydmVyKTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHNjaGVkdWxlZE9i
c2VydmVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bi5zY2hlZHVsZU9u
Y2UoJ3JlbmRlcicsIHRoaXMsIHN0YXRlQ2hlY2tlZE9ic2VydmVyKTsKLSAgICAgICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICAgICAgYWRkT2JzZXJ2ZXIocm9vdCwgcGF0aCwgdGFyZ2V0LCBz
Y2hlZHVsZWRPYnNlcnZlcik7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLm9uZSgnd2lsbENsZWFy
UmVuZGVyJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZU9ic2VydmVy
KHJvb3QsIHBhdGgsIHRhcmdldCwgc2NoZWR1bGVkT2JzZXJ2ZXIpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0pOwotCi0gICAgICAgIC8qCi0gICAgICAg
ICAgICAgIERlc2NyaWJlIGhvdyB0aGUgc3BlY2lmaWVkIGFjdGlvbnMgc2hvdWxkIGJlaGF2ZSBp
biB0aGUgdmFyaW91cwotICAgICAgICAgICAgICBzdGF0ZXMgdGhhdCBhIHZpZXcgY2FuIGV4aXN0
IGluLiBQb3NzaWJsZSBzdGF0ZXM6Ci0KLSAgICAgICAgICAgICAgKiBwcmVSZW5kZXI6IHdoZW4g
YSB2aWV3IGlzIGZpcnN0IGluc3RhbnRpYXRlZCwgYW5kIGFmdGVyIGl0cwotICAgICAgICAgICAg
ICAgIGVsZW1lbnQgd2FzIGRlc3Ryb3llZCwgaXQgaXMgaW4gdGhlIHByZVJlbmRlciBzdGF0ZQot
ICAgICAgICAgICAgICAqIGluQnVmZmVyOiBvbmNlIGEgdmlldyBoYXMgYmVlbiByZW5kZXJlZCwg
YnV0IGJlZm9yZSBpdCBoYXMKLSAgICAgICAgICAgICAgICBiZWVuIGluc2VydGVkIGludG8gdGhl
IERPTSwgaXQgaXMgaW4gdGhlIGluQnVmZmVyIHN0YXRlCi0gICAgICAgICAgICAgICogaGFzRWxl
bWVudDogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmlldyBpcyBjcmVhdGVkLAotICAg
ICAgICAgICAgICAgIGFuZCBpcyByZWFkeSB0byBiZSBpbnNlcnRlZAotICAgICAgICAgICAgICAq
IGluRE9NOiBvbmNlIGEgdmlldyBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBET00gaXQgaXMg
aW4KLSAgICAgICAgICAgICAgICB0aGUgaW5ET00gc3RhdGUuIEEgdmlldyBzcGVuZHMgdGhlIHZh
c3QgbWFqb3JpdHkgb2YgaXRzCi0gICAgICAgICAgICAgICAgZXhpc3RlbmNlIGluIHRoaXMgc3Rh
dGUuCi0gICAgICAgICAgICAgICogZGVzdHJveWVkOiBvbmNlIGEgdmlldyBoYXMgYmVlbiBkZXN0
cm95ZWQgKHVzaW5nIHRoZSBkZXN0cm95Ci0gICAgICAgICAgICAgICAgbWV0aG9kKSwgaXQgaXMg
aW4gdGhpcyBzdGF0ZS4gTm8gZnVydGhlciBhY3Rpb25zIGNhbiBiZSBpbnZva2VkCi0gICAgICAg
ICAgICAgICAgb24gYSBkZXN0cm95ZWQgdmlldy4KLSAgICAgICAgICAgICovCi0KLSAgICAgICAg
Ly8gaW4gdGhlIGRlc3Ryb3llZCBzdGF0ZSwgZXZlcnl0aGluZyBpcyBpbGxlZ2FsCi0KLSAgICAg
ICAgLy8gYmVmb3JlIHJlbmRlcmluZyBoYXMgYmVndW4sIGFsbCBsZWdhbCBtYW5pcHVsYXRpb25z
IGFyZSBub29wcy4KLQotICAgICAgICAvLyBpbnNpZGUgdGhlIGJ1ZmZlciwgbGVnYWwgbWFuaXB1
bGF0aW9ucyBhcmUgZG9uZSBvbiB0aGUgYnVmZmVyCi0KLSAgICAgICAgLy8gb25jZSB0aGUgdmll
dyBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBET00sIGxlZ2FsIG1hbmlwdWxhdGlvbnMKLSAg
ICAgICAgLy8gYXJlIGRvbmUgb24gdGhlIERPTSBlbGVtZW50LgotCi0gICAgICAgIGZ1bmN0aW9u
IG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCkgewotICAgICAgICAgICAgcnVuLm9uY2UoVmlldywg
J25vdGlmeU11dGF0aW9uTGlzdGVuZXJzJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgRE9N
TWFuYWdlciA9IHsKLSAgICAgICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKHZpZXcsIGh0bWwpIHsK
LSAgICAgICAgICAgICAgICB2aWV3LiQoKS5wcmVwZW5kKGh0bWwpOwotICAgICAgICAgICAgICAg
IG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICBhZnRlcjogZnVuY3Rpb24odmlldywgaHRtbCkgewotICAgICAgICAgICAgICAgIHZpZXcuJCgp
LmFmdGVyKGh0bWwpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVuZXJzKCk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBodG1sOiBmdW5jdGlvbih2aWV3LCBodG1s
KSB7Ci0gICAgICAgICAgICAgICAgdmlldy4kKCkuaHRtbChodG1sKTsKLSAgICAgICAgICAgICAg
ICBub3RpZnlNdXRhdGlvbkxpc3RlbmVycygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgcmVwbGFjZTogZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAgIHZhciBlbGVtZW50
ID0gZ2V0KHZpZXcsICdlbGVtZW50Jyk7Ci0KLSAgICAgICAgICAgICAgICBzZXQodmlldywgJ2Vs
ZW1lbnQnLCBudWxsKTsKLQotICAgICAgICAgICAgICAgIHZpZXcuX2luc2VydEVsZW1lbnRMYXRl
cihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnJlcGxh
Y2VXaXRoKGdldCh2aWV3LCAnZWxlbWVudCcpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90aWZ5
TXV0YXRpb25MaXN0ZW5lcnMoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24odmlldykgewotICAgICAgICAgICAgICAg
IHZpZXcuJCgpLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeU11dGF0aW9uTGlzdGVu
ZXJzKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24odmll
dykgewotICAgICAgICAgICAgICAgIHZpZXcuJCgpLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAg
bm90aWZ5TXV0YXRpb25MaXN0ZW5lcnMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQot
ICAgICAgICBWaWV3LnJlb3Blbih7Ci0gICAgICAgICAgICBkb21NYW5hZ2VyOiBET01NYW5hZ2Vy
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIFZpZXcucmVvcGVuQ2xhc3MoewotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgUGFyc2UgYSBwYXRoIGFuZCByZXR1cm4gYW4gb2Jq
ZWN0IHdoaWNoIGhvbGRzIHRoZSBwYXJzZWQgcHJvcGVydGllcy4KLQotICAgICAgICAgICAgICAg
ICAgICBGb3IgZXhhbXBsZSBhIHBhdGggbGlrZSAiY29udGVudC5pc0VuYWJsZWQ6ZW5hYmxlZDpk
aXNhYmxlZCIgd2lsbCByZXR1cm4gdGhlCi0gICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBv
YmplY3Q6Ci0KLSAgICAgICAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcGF0aDogImNvbnRlbnQuaXNFbmFibGVk
IiwKLSAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICJlbmFibGVkIiwKLSAgICAgICAg
ICAgICAgICAgICAgICBmYWxzeUNsYXNzTmFtZTogImRpc2FibGVkIiwKLSAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc05hbWVzOiAiOmVuYWJsZWQ6ZGlzYWJsZWQiCi0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBfcGFyc2VQcm9wZXJ0eVBhdGgKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpYwotICAg
ICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIF9wYXJzZVByb3BlcnR5UGF0aDogZnVuY3Rpb24ocGF0aCkgewotICAgICAgICAgICAgICAg
IHZhciBzcGxpdCA9IHBhdGguc3BsaXQoJzonKSwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVBh
dGggPSBzcGxpdFswXSwKLSAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gIiIsCi0gICAgICAg
ICAgICAgICAgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgIGZhbHN5Q2xhc3NOYW1lOwotCi0g
ICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIGRlZmluZWQgYXMgcHJv
cDpjbGFzcyBvciBwcm9wOnRydWVDbGFzczpmYWxzZUNsYXNzCi0gICAgICAgICAgICAgICAgaWYg
KHNwbGl0Lmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gc3Bs
aXRbMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggPT09IDMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHN5Q2xhc3NOYW1lID0gc3BsaXRbMl07Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gJzonICsg
Y2xhc3NOYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc3lDbGFzc05hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgKz0gIjoiICsgZmFsc3lDbGFzc05hbWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBwYXRoOiBwcm9wZXJ0eVBhdGgsCi0g
ICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXMsCi0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzTmFtZTogKGNsYXNzTmFtZSA9PT0gJycpID8gdW5kZWZpbmVkIDogY2xhc3NO
YW1lLAotICAgICAgICAgICAgICAgICAgICBmYWxzeUNsYXNzTmFtZTogZmFsc3lDbGFzc05hbWUK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0g
ICAgICAgICAgICAgICAgICAgIEdldCB0aGUgY2xhc3MgbmFtZSBmb3IgYSBnaXZlbiB2YWx1ZSwg
YmFzZWQgb24gdGhlIHBhdGgsIG9wdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgIGBjbGFzc05h
bWVgIGFuZCBvcHRpb25hbCBgZmFsc3lDbGFzc05hbWVgLgotCi0gICAgICAgICAgICAgICAgICAg
IC0gaWYgYSBgY2xhc3NOYW1lYCBvciBgZmFsc3lDbGFzc05hbWVgIGhhcyBiZWVuIHNwZWNpZmll
ZDoKLSAgICAgICAgICAgICAgICAgICAgICAtIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIGBj
bGFzc05hbWVgIGhhcyBiZWVuIHNwZWNpZmllZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGBj
bGFzc05hbWVgIGlzIHJldHVybmVkCi0gICAgICAgICAgICAgICAgICAgICAgLSBpZiB0aGUgdmFs
dWUgaXMgZmFsc3kgYW5kIGBmYWxzeUNsYXNzTmFtZWAgaGFzIGJlZW4gc3BlY2lmaWVkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYGZhbHN5Q2xhc3NOYW1lYCBpcyByZXR1cm5lZAotICAgICAg
ICAgICAgICAgICAgICAgIC0gb3RoZXJ3aXNlIGBudWxsYCBpcyByZXR1cm5lZAotICAgICAgICAg
ICAgICAgICAgICAtIGlmIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAsIHRoZSBkYXNoZXJpemVkIGxhc3Qg
cGFydCBvZiB0aGUgc3VwcGxpZWQgcGF0aAotICAgICAgICAgICAgICAgICAgICAgIGlzIHJldHVy
bmVkCi0gICAgICAgICAgICAgICAgICAgIC0gaWYgdGhlIHZhbHVlIGlzIG5vdCBgZmFsc2VgLCBg
dW5kZWZpbmVkYCBvciBgbnVsbGAsIHRoZSBgdmFsdWVgCi0gICAgICAgICAgICAgICAgICAgICAg
aXMgcmV0dXJuZWQKLSAgICAgICAgICAgICAgICAgICAgLSBpZiBub25lIG9mIHRoZSBhYm92ZSBy
dWxlcyBhcHBseSwgYG51bGxgIGlzIHJldHVybmVkCi0KLSAgICAgICAgICAgICAgICAgICAgQG1l
dGhvZCBfY2xhc3NTdHJpbmdGb3JWYWx1ZQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gcGF0
aAotICAgICAgICAgICAgICAgICAgICBAcGFyYW0gdmFsCi0gICAgICAgICAgICAgICAgICAgIEBw
YXJhbSBjbGFzc05hbWUKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIGZhbHN5Q2xhc3NOYW1l
Ci0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgICAgICAgQHByaXZh
dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBfY2xhc3NTdHJpbmdGb3JWYWx1
ZTogZnVuY3Rpb24ocGF0aCwgdmFsLCBjbGFzc05hbWUsIGZhbHN5Q2xhc3NOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsKSkgewotICAgICAgICAgICAgICAgICAgICB2YWwg
PSBnZXQodmFsLCAnbGVuZ3RoJykgIT09IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gV2hlbiB1c2luZyB0aGUgY29sb24gc3ludGF4LCBldmFsdWF0ZSB0aGUgdHJ1
dGhpbmVzcyBvciBmYWxzaW5lc3MKLSAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdmFsdWUgdG8g
ZGV0ZXJtaW5lIHdoaWNoIGNsYXNzTmFtZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgICBpZiAo
Y2xhc3NOYW1lIHx8IGZhbHN5Q2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
bGFzc05hbWUgJiYgISF2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGFz
c05hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmYWxzeUNsYXNzTmFtZSAm
JiAhdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc3lDbGFzc05hbWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgdmFsdWUgaXMgYSBCb29sZWFuIGFuZCB0cnVlLCByZXR1cm4gdGhlIGRhc2hlcml6
ZWQgcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgLy8gbmFtZS4KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHZhbCA9PT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBOb3Jt
YWxpemUgcHJvcGVydHkgcGF0aCB0byBiZSBzdWl0YWJsZSBmb3IgdXNlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFzIGEgY2xhc3MgbmFtZS4gRm9yIGV4YXBsZSwgY29udGVudC5mb28uYmFyQmF6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJlY29tZXMgYmFyLWJhei4KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZGFzaGVyaXplKHBhcnRzW3BhcnRzLmxlbmd0aC0xXSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBmYWxzZSwgdW5kZWZpbmVkLCBvciBudWxsLCBy
ZXR1cm4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgb2YgdGhlIHBy
b3BlcnR5LgotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICE9PSBmYWxzZSAmJiB2YWwg
IT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZGlzcGxheS4gUmV0dXJuIG51bGwgc28gdGhhdCB0aGUg
b2xkIGNsYXNzIGlzIHJlbW92ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IG5vIG5ldyBj
bGFzcyBpcyBhZGRlZC4KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIHZhciBtdXRhdGlvbiA9IEVtYmVyT2JqZWN0LmV4dGVuZChFdmVu
dGVkKS5jcmVhdGUoKTsKLQotICAgICAgICBWaWV3LmFkZE11dGF0aW9uTGlzdGVuZXIgPSBmdW5j
dGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAgbXV0YXRpb24ub24oJ2NoYW5nZScsIGNhbGxi
YWNrKTsKLSAgICAgICAgfTsKLQotICAgICAgICBWaWV3LnJlbW92ZU11dGF0aW9uTGlzdGVuZXIg
PSBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAgbXV0YXRpb24ub2ZmKCdjaGFuZ2Un
LCBjYWxsYmFjayk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVmlldy5ub3RpZnlNdXRhdGlvbkxp
c3RlbmVycyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgbXV0YXRpb24udHJpZ2dlcignY2hh
bmdlJyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEdsb2JhbCB2
aWV3cyBoYXNoCi0KLSAgICAgICAgICAgICAgQHByb3BlcnR5IHZpZXdzCi0gICAgICAgICAgICAg
IEBzdGF0aWMKLSAgICAgICAgICAgICAgQHR5cGUgSGFzaAotICAgICAgICAgICAgKi8KLSAgICAg
ICAgVmlldy52aWV3cyA9IHt9OwotCi0gICAgICAgIC8vIElmIHNvbWVvbmUgb3ZlcnJpZGVzIHRo
ZSBjaGlsZCB2aWV3cyBjb21wdXRlZCBwcm9wZXJ0eSB3aGVuCi0gICAgICAgIC8vIGRlZmluaW5n
IHRoZWlyIGNsYXNzLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgdXNlcidzCi0g
ICAgICAgIC8vIHN1cHBsaWVkIGNoaWxkVmlld3MgYW5kIHRoZW4gcmVzdG9yZSB0aGUgb3JpZ2lu
YWwgY29tcHV0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gYXQgdmlldyBpbml0aWFsaXphdGlvbiB0
aW1lLiBUaGlzIGhhcHBlbnMgaW4gRW1iZXIuQ29udGFpbmVyVmlldydzIGluaXQKLSAgICAgICAg
Ly8gbWV0aG9kLgotICAgICAgICBWaWV3LmNoaWxkVmlld3NQcm9wZXJ0eSA9IGNoaWxkVmlld3NQ
cm9wZXJ0eTsKLQotICAgICAgICBWaWV3LmFwcGx5QXR0cmlidXRlQmluZGluZ3MgPSBmdW5jdGlv
bihlbGVtLCBuYW1lLCB2YWx1ZSkgewotICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlT2YodmFs
dWUpOwotCi0gICAgICAgICAgICAvLyBpZiB0aGlzIGNoYW5nZXMsIGFsc28gY2hhbmdlIHRoZSBs
b2dpYyBpbiBlbWJlci1oYW5kbGViYXJzL2xpYi9oZWxwZXJzL2JpbmRpbmcuanMKLSAgICAgICAg
ICAgIGlmIChuYW1lICE9PSAndmFsdWUnICYmICh0eXBlID09PSAnc3RyaW5nJyB8fCAodHlwZSA9
PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlICE9PSBlbGVtLmF0dHIobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbS5hdHRy
KG5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG5hbWUgPT09ICd2YWx1ZScgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzTm9uZSh2YWx1ZSkgfHwgdmFsdWUgPT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGBudWxsYCwgYHVuZGVmaW5lZGAgb3IgYGZhbHNlYCBzaG91bGQgcmVtb3ZlIGF0
dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHIobmFtZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEluIElFOCBgcHJvcGAgY291bGRuJ3QgcmVtb3ZlIGF0dHJpYnV0
ZSB3aGVuIG5hbWUgaXMgYHJlcXVpcmVkYC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT09ICdyZXF1aXJlZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlUHJv
cChuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucHJvcChuYW1lLCAnJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSBlbGVtLnByb3AobmFtZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBwcm9wZXJ0aWVzCi0gICAg
ICAgICAgICAgICAgICAgIGVsZW0ucHJvcChuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBlbGVt
LnJlbW92ZUF0dHIobmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
X19leHBvcnRzX19bImRlZmF1bHQiXSA9IFZpZXc7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJl
ci12aWV3cy92aWV3cy92aWV3X2NvbGxlY3Rpb24iLAotICAgIFsiZW1iZXItbWV0YWwvZW51bWVy
YWJsZV91dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBf
X2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBmb3JFYWNo
ID0gX19kZXBlbmRlbmN5MV9fLmZvckVhY2g7Ci0KLSAgICAgICAgZnVuY3Rpb24gVmlld0NvbGxl
Y3Rpb24oaW5pdGlhbFZpZXdzKSB7Ci0gICAgICAgICAgICB2YXIgdmlld3MgPSB0aGlzLnZpZXdz
ID0gaW5pdGlhbFZpZXdzIHx8IFtdOwotICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB2aWV3cy5s
ZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBWaWV3Q29sbGVjdGlvbi5wcm90b3R5cGUgPSB7
Ci0gICAgICAgICAgICBsZW5ndGg6IDAsCi0KLSAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9u
KGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICAgIHZhciB2aWV3cyA9IHRoaXMudmlld3MsIHZp
ZXc7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2aWV3cy5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldyA9IHZpZXdzW2ldOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodmlldy50cmlnZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2aWV3LnRyaWdnZXIoZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRyaWdnZXJSZWN1cnNp
dmVseTogZnVuY3Rpb24oZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXdzID0g
dGhpcy52aWV3czsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZpZXdzLmxl
bmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICB2aWV3c1tpXS50cmlnZ2Vy
UmVjdXJzaXZlbHkoZXZlbnROYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBpbnZva2VSZWN1cnNpdmVseTogZnVuY3Rpb24oZm4pIHsKLSAgICAg
ICAgICAgICAgICB2YXIgdmlld3MgPSB0aGlzLnZpZXdzLCB2aWV3OwotCi0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2aWV3cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmlldyA9IHZpZXdzW2ldOwotICAgICAgICAgICAgICAgICAgICBmbih2
aWV3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0
cmFuc2l0aW9uVG86IGZ1bmN0aW9uKHN0YXRlLCBjaGlsZHJlbikgewotICAgICAgICAgICAgICAg
IHZhciB2aWV3cyA9IHRoaXMudmlld3M7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSB2aWV3cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdmll
d3NbaV0uX3RyYW5zaXRpb25UbyhzdGF0ZSwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgdmFyIHZpZXdzID0gdGhpcy52aWV3czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlld3Mu
cHVzaC5hcHBseSh2aWV3cywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICAgIG9iamVjdEF0OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy52aWV3c1tpZHhdOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZm9yRWFjaDogZnVu
Y3Rpb24oY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgdmlld3MgPSB0aGlzLnZpZXdz
OwotICAgICAgICAgICAgICAgIHJldHVybiBmb3JFYWNoKHZpZXdzLCBjYWxsYmFjayk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgIHRoaXMudmlld3MubGVuZ3Ro
ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBfX2V4cG9ydHNfX1si
ZGVmYXVsdCJdID0gVmlld0NvbGxlY3Rpb247Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJlbWJlciIs
Ci0gICAgWyJlbWJlci1tZXRhbCIsICJlbWJlci1ydW50aW1lIiwgImVtYmVyLWhhbmRsZWJhcnMi
LCAiZW1iZXItdmlld3MiLCAiZW1iZXItcm91dGluZyIsICJlbWJlci1yb3V0aW5nLWhhbmRsZWJh
cnMiLCAiZW1iZXItYXBwbGljYXRpb24iLCAiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQiXSwKLSAg
ICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5
M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRlbmN5Nl9fLCBf
X2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXykgewotICAgICAgICAidXNlIHN0cmljdCI7
Ci0gICAgICAgIC8vIHJlcXVpcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciBlYWNoIG9mIHRo
ZXNlIHBhY2thZ2VzCi0gICAgICAgIC8vIHRoaXMgaXMgc28gdGhhdCB0aGUgZ2xvYmFsIGV4cG9y
dHMgb2NjdXIgcHJvcGVybHkKLQotICAgICAgICAvLyBkbyB0aGlzIHRvIGVuc3VyZSB0aGF0IEVt
YmVyLlRlc3QgaXMgZGVmaW5lZCBwcm9wZXJseSBvbiB0aGUgZ2xvYmFsCi0gICAgICAgIC8vIGlm
IGl0IGlzIHByZXNlbnQuCi0gICAgICAgIGlmIChFbWJlci5fX2xvYWRlci5yZWdpc3RyeVsnZW1i
ZXItdGVzdGluZyddKSB7Ci0gICAgICAgICAgICByZXF1aXJlTW9kdWxlKCdlbWJlci10ZXN0aW5n
Jyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICAgIEVtYmVyCi0KLSAgICAg
ICAgICAgIEBtb2R1bGUgZW1iZXIKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgZnVuY3Rpb24g
dGhyb3dXaXRoTWVzc2FnZShtc2cpIHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRW1iZXIuRXJyb3IobXNnKTsKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVJlbW92ZWRDbGFzcyhj
bGFzc05hbWUpIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSAiIGhhcyBiZWVuIG1vdmVkIGludG8g
YSBwbHVnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlcmpzL2VtYmVyLXN0YXRlcyI7Ci0KLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgZXh0ZW5kOiB0aHJvd1dpdGhNZXNz
YWdlKGNsYXNzTmFtZSArIG1zZyksCi0gICAgICAgICAgICAgICAgY3JlYXRlOiB0aHJvd1dpdGhN
ZXNzYWdlKGNsYXNzTmFtZSArIG1zZykKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICBFbWJlci5TdGF0ZU1hbmFnZXIgPSBnZW5lcmF0ZVJlbW92ZWRDbGFzcygiRW1iZXIuU3Rh
dGVNYW5hZ2VyIik7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgd2FzIGV4cG9y
dGVkIHRvIGVtYmVyLXN0YXRlcyBwbHVnaW4gZm9yIHYgMS4wLjAgcmVsZWFzZS4gU2VlOiBodHRw
czovL2dpdGh1Yi5jb20vZW1iZXJqcy9lbWJlci1zdGF0ZXMKLQotICAgICAgICAgICAgICBAY2xh
c3MgU3RhdGVNYW5hZ2VyCi0gICAgICAgICAgICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICAgICAg
ICAgICovCi0KLSAgICAgICAgRW1iZXIuU3RhdGUgPSBnZW5lcmF0ZVJlbW92ZWRDbGFzcygiRW1i
ZXIuU3RhdGUiKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgVGhpcyB3YXMgZXhwb3J0
ZWQgdG8gZW1iZXItc3RhdGVzIHBsdWdpbiBmb3IgdiAxLjAuMCByZWxlYXNlLiBTZWU6IGh0dHBz
Oi8vZ2l0aHViLmNvbS9lbWJlcmpzL2VtYmVyLXN0YXRlcwotCi0gICAgICAgICAgICAgIEBjbGFz
cyBTdGF0ZQotICAgICAgICAgICAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgICAgICAgICAqLwot
ICAgIH0pOwotICAgIGRlZmluZSgibWV0YW1vcnBoIiwKLSAgICBbXSwKLSAgICBmdW5jdGlvbigp
IHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
ICAgICAgICAvLyBQcm9qZWN0OiAgIG1ldGFtb3JwaAotICAgICAgICAvLyBDb3B5cmlnaHQ6IMKp
MjAxNCBUaWxkZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgICAgICAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi0gICAgICAgIHZhciBLID0gZnVuY3Rpb24oKSB7fSwKLSAgICAgICAgZ3Vp
ZCA9IDAsCi0gICAgICAgIGRpc2FibGVSYW5nZSA9IChmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIE1ldGFtb3JwaEVOVikgewotICAgICAgICAgICAg
ICAgIHJldHVybiBNZXRhbW9ycGhFTlYuRElTQUJMRV9SQU5HRV9BUEk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKCd1bmRlZmluZWQnICE9PSBFTlYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
RU5WLkRJU0FCTEVfUkFOR0VfQVBJOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pKCksCi0gICAgICAg
IC8vIEZlYXR1cmUtZGV0ZWN0IHRoZSBXM0MgcmFuZ2UgQVBJLCB0aGUgZXh0ZW5kZWQgY2hlY2sg
aXMgZm9yIElFOSB3aGljaCBvbmx5IHBhcnRpYWxseSBzdXBwb3J0cyByYW5nZXMKLSAgICAgICAg
c3VwcG9ydHNSYW5nZSA9ICghZGlzYWJsZVJhbmdlKSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1
bmRlZmluZWQnICYmICgnY3JlYXRlUmFuZ2UnIGluIGRvY3VtZW50KSAmJiAodHlwZW9mIFJhbmdl
ICE9PSAndW5kZWZpbmVkJykgJiYgUmFuZ2UucHJvdG90eXBlLmNyZWF0ZUNvbnRleHR1YWxGcmFn
bWVudCwKLSAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgcHJpb3IgdG8gOSBkb2VzIG5vdCBh
bGxvdyBzZXR0aW5nIGlubmVySFRNTCBpZiB0aGUgZmlyc3QgZWxlbWVudAotICAgICAgICAvLyBp
cyBhICJ6ZXJvLXNjb3BlIiBlbGVtZW50LiBUaGlzIHByb2JsZW0gY2FuIGJlIHdvcmtlZCBhcm91
bmQgYnkgbWFraW5nCi0gICAgICAgIC8vIHRoZSBmaXJzdCBub2RlIGFuIGludmlzaWJsZSB0ZXh0
IG5vZGUuIFdlLCBsaWtlIE1vZGVybml6ciwgdXNlICZzaHk7Ci0gICAgICAgIG5lZWRzU2h5ID0g
dHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAoZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAg
ICAgICB0ZXN0RWwuaW5uZXJIVE1MID0gIjxkaXY+PC9kaXY+IjsKLSAgICAgICAgICAgIHRlc3RF
bC5maXJzdENoaWxkLmlubmVySFRNTCA9ICI8c2NyaXB0Pjwvc2NyaXB0PiI7Ci0gICAgICAgICAg
ICByZXR1cm4gdGVzdEVsLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID09PSAnJzsKLSAgICAgICAgfSko
KSwKLQotICAgICAgICAvLyBJRSA4IChhbmQgbGlrZWx5IGVhcmxpZXIpIGxpa2VzIHRvIG1vdmUg
d2hpdGVzcGFjZSBwcmVjZWVkaW5nCi0gICAgICAgIC8vIGEgc2NyaXB0IHRhZyB0byBhcHBlYXIg
YWZ0ZXIgaXQuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4KLSAgICAgICAgLy8gYWNjaWRlbnRhbGx5
IHJlbW92ZSB3aGl0ZXNwYWNlIHdoZW4gdXBkYXRpbmcgYSBtb3JwaC4KLSAgICAgICAgbW92ZXNX
aGl0ZXNwYWNlID0gZG9jdW1lbnQgJiYgKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHRl
c3RFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICAgICAgdGVzdEVs
LmlubmVySFRNTCA9ICJUZXN0OiA8c2NyaXB0IHR5cGU9J3RleHQveC1wbGFjZWhvbGRlcic+PC9z
Y3JpcHQ+VmFsdWUiOwotICAgICAgICAgICAgcmV0dXJuIHRlc3RFbC5jaGlsZE5vZGVzWzBdLm5v
ZGVWYWx1ZSA9PT0gJ1Rlc3Q6JyAmJgotICAgICAgICAgICAgdGVzdEVsLmNoaWxkTm9kZXNbMl0u
bm9kZVZhbHVlID09PSAnIFZhbHVlJzsKLSAgICAgICAgfSkoKTsKLQotICAgICAgICAvLyBDb25z
dHJ1Y3RvciB0aGF0IHN1cHBvcnRzIGVpdGhlciBNZXRhbW9ycGgoJ2ZvbycpIG9yIG5ldwotICAg
ICAgICAvLyBNZXRhbW9ycGgoJ2ZvbycpOwotICAgICAgICAvLwotICAgICAgICAvLyBUYWtlcyBh
IHN0cmluZyBvZiBIVE1MIGFzIHRoZSBhcmd1bWVudC4KLQotICAgICAgICB2YXIgTWV0YW1vcnBo
ID0gZnVuY3Rpb24oaHRtbCkgewotICAgICAgICAgICAgdmFyIHNlbGY7Ci0KLSAgICAgICAgICAg
IGlmICh0aGlzIGluc3RhbmNlb2YgTWV0YW1vcnBoKSB7Ci0gICAgICAgICAgICAgICAgc2VsZiA9
IHRoaXM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlbGYgPSBuZXcg
SygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZWxmLmlubmVySFRNTCA9IGh0bWw7
Ci0gICAgICAgICAgICB2YXIgbXlHdWlkID0gJ21ldGFtb3JwaC0nICsgKGd1aWQrKyk7Ci0gICAg
ICAgICAgICBzZWxmLnN0YXJ0ID0gbXlHdWlkICsgJy1zdGFydCc7Ci0gICAgICAgICAgICBzZWxm
LmVuZCA9IG15R3VpZCArICctZW5kJzsKLQotICAgICAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgSy5wcm90b3R5cGUgPSBNZXRhbW9ycGgucHJvdG90eXBlOwotCi0g
ICAgICAgIHZhciByYW5nZUZvciwgaHRtbEZ1bmMsIHJlbW92ZUZ1bmMsIG91dGVySFRNTEZ1bmMs
IGFwcGVuZFRvRnVuYywgYWZ0ZXJGdW5jLCBwcmVwZW5kRnVuYywgc3RhcnRUYWdGdW5jLCBlbmRU
YWdGdW5jOwotCi0gICAgICAgIG91dGVySFRNTEZ1bmMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLnN0YXJ0VGFnKCkgKyB0aGlzLmlubmVySFRNTCArIHRoaXMuZW5kVGFn
KCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3RhcnRUYWdGdW5jID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICogV2UgcmVwbGFjZSBjaGV2cm9uIGJ5
IGl0cyBoZXggY29kZSBpbiBvcmRlciB0byBwcmV2ZW50IGVzY2FwaW5nIHByb2JsZW1zLgotICAg
ICAgICAgICAgICAgICAgICogQ2hlY2sgdGhpcyB0aHJlYWQgZm9yIG1vcmUgZXhwbGFpbmF0aW9u
OgotICAgICAgICAgICAgICAgICAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9u
cy84MjMxMDQ4L3doeS11c2UteDNjLWluc3RlYWQtb2Ytd2hlbi1nZW5lcmF0aW5nLWh0bWwtZnJv
bS1qYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiAi
PHNjcmlwdCBpZD0nIiArIHRoaXMuc3RhcnQgKyAiJyB0eXBlPSd0ZXh0L3gtcGxhY2Vob2xkZXIn
Plx4M0Mvc2NyaXB0PiI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZW5kVGFnRnVuYyA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAqIFdlIHJlcGxhY2Ug
Y2hldnJvbiBieSBpdHMgaGV4IGNvZGUgaW4gb3JkZXIgdG8gcHJldmVudCBlc2NhcGluZyBwcm9i
bGVtcy4KLSAgICAgICAgICAgICAgICAgICAqIENoZWNrIHRoaXMgdGhyZWFkIGZvciBtb3JlIGV4
cGxhaW5hdGlvbjoKLSAgICAgICAgICAgICAgICAgICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNv
bS9xdWVzdGlvbnMvODIzMTA0OC93aHktdXNlLXgzYy1pbnN0ZWFkLW9mLXdoZW4tZ2VuZXJhdGlu
Zy1odG1sLWZyb20tamF2YXNjcmlwdAotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICByZXR1cm4gIjxzY3JpcHQgaWQ9JyIgKyB0aGlzLmVuZCArICInIHR5cGU9J3RleHQveC1wbGFj
ZWhvbGRlcic+XHgzQy9zY3JpcHQ+IjsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBJZiB3ZSBo
YXZlIHRoZSBXM0MgcmFuZ2UgQVBJLCB0aGlzIHByb2Nlc3MgaXMgcmVsYXRpdmVseSBzdHJhaWdo
dCBmb3J3YXJkLgotICAgICAgICBpZiAoc3VwcG9ydHNSYW5nZSkgewotCi0gICAgICAgICAgICAv
LyBHZXQgYSByYW5nZSBmb3IgdGhlIGN1cnJlbnQgbW9ycGguIE9wdGlvbmFsbHkgaW5jbHVkZSB0
aGUgc3RhcnRpbmcgYW5kCi0gICAgICAgICAgICAvLyBlbmRpbmcgcGxhY2Vob2xkZXJzLgotICAg
ICAgICAgICAgcmFuZ2VGb3IgPSBmdW5jdGlvbihtb3JwaCwgb3V0ZXJUb28pIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAg
ICAgIHZhciBiZWZvcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb3JwaC5zdGFydCk7Ci0g
ICAgICAgICAgICAgICAgdmFyIGFmdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobW9ycGgu
ZW5kKTsKLQotICAgICAgICAgICAgICAgIGlmIChvdXRlclRvbykgewotICAgICAgICAgICAgICAg
ICAgICByYW5nZS5zZXRTdGFydEJlZm9yZShiZWZvcmUpOwotICAgICAgICAgICAgICAgICAgICBy
YW5nZS5zZXRFbmRBZnRlcihhZnRlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihiZWZvcmUpOwotICAgICAgICAgICAg
ICAgICAgICByYW5nZS5zZXRFbmRCZWZvcmUoYWZ0ZXIpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIGh0bWxGdW5jID0gZnVuY3Rpb24oaHRtbCwgb3V0ZXJUb28pIHsKLSAgICAgICAgICAgICAg
ICAvLyBnZXQgYSByYW5nZSBmb3IgdGhlIGN1cnJlbnQgbWV0YW1vcnBoIG9iamVjdAotICAgICAg
ICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlRm9yKHRoaXMsIG91dGVyVG9vKTsKLQotICAgICAg
ICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlLCB3aGljaCB3aWxs
IGJlIHRoZQotICAgICAgICAgICAgICAgIC8vIG5vZGVzIGJldHdlZW4gdGhlIHN0YXJ0aW5nIGFu
ZCBlbmRpbmcgcGxhY2Vob2xkZXIuCi0gICAgICAgICAgICAgICAgcmFuZ2UuZGVsZXRlQ29udGVu
dHMoKTsKLQotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBkb2N1bWVudCBmcmFnbWVu
dCBmb3IgdGhlIEhUTUwKLSAgICAgICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSByYW5nZS5jcmVh
dGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
dGhlIGZyYWdtZW50IGludG8gdGhlIHJhbmdlCi0gICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0
Tm9kZShmcmFnbWVudCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvKioKLSAgICAg
ICAgICAgICAgICAgICogQHB1YmxpYwotICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAg
ICAgICAgKiBSZW1vdmUgdGhpcyBvYmplY3QgKGluY2x1ZGluZyBzdGFydGluZyBhbmQgZW5kaW5n
Ci0gICAgICAgICAgICAgICAgICAqIHBsYWNlaG9sZGVycykuCi0gICAgICAgICAgICAgICAgICAq
Ci0gICAgICAgICAgICAgICAgICAqIEBtZXRob2QgcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgcmVtb3ZlRnVuYyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IC8vIGdldCBhIHJhbmdlIGZvciB0aGUgY3VycmVudCBtZXRhbW9ycGggb2JqZWN0IGluY2x1ZGlu
ZwotICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHBsYWNlaG9sZGVy
cy4KLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZUZvcih0aGlzLCB0cnVlKTsKLQot
ICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgZW50aXJlIHJhbmdlLgotICAgICAgICAgICAg
ICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICBhcHBlbmRUb0Z1bmMgPSBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJh
bmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICByYW5nZS5zZXRT
dGFydChub2RlKTsKLSAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgdmFyIGZyYWcgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodGhp
cy5vdXRlckhUTUwoKSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChmcmFnKTsK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGFmdGVyRnVuYyA9IGZ1bmN0aW9uKGh0bWwp
IHsKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwot
ICAgICAgICAgICAgICAgIHZhciBhZnRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMu
ZW5kKTsKLQotICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIoYWZ0ZXIpOwotICAg
ICAgICAgICAgICAgIHJhbmdlLnNldEVuZEFmdGVyKGFmdGVyKTsKLQotICAgICAgICAgICAgICAg
IHZhciBmcmFnbWVudCA9IHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTsKLSAg
ICAgICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWdtZW50KTsKLSAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgIHByZXBlbmRGdW5jID0gZnVuY3Rpb24oaHRtbCkgewotICAgICAgICAg
ICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN0YXJ0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zdGFydCk7Ci0KLSAg
ICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHN0YXJ0KTsKLSAgICAgICAgICAgICAg
ICByYW5nZS5zZXRFbmRBZnRlcihzdGFydCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZnJhZ21l
bnQgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7Ci0gICAgICAgICAgICAg
ICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnbWVudCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICogVGhpcyBjb2Rl
IGlzIG1vc3RseSB0YWtlbiBmcm9tIGpRdWVyeSwgd2l0aCBvbmUgZXhjZXB0aW9uLiBJbiBqUXVl
cnkncyBjYXNlLCB3ZQotICAgICAgICAgICAgICAgICAgICogaGF2ZSBzb21lIEhUTUwgYW5kIHdl
IG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY29udmVydCBpdCBpbnRvIHNvbWUgbm9kZXMuCi0g
ICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICogSW4gdGhpcyBjYXNlLCBq
UXVlcnkgbmVlZHMgdG8gc2NhbiB0aGUgSFRNTCBsb29raW5nIGZvciBhbiBvcGVuaW5nIHRhZyBh
bmQgdXNlCi0gICAgICAgICAgICAgICAgICAgKiB0aGF0IGFzIHRoZSBrZXkgZm9yIHRoZSB3cmFw
IG1hcC4gSW4gb3VyIGNhc2UsIHdlIGtub3cgdGhlIHBhcmVudCBub2RlLCBhbmQKLSAgICAgICAg
ICAgICAgICAgICAqIGNhbiB1c2UgaXRzIHR5cGUgYXMgdGhlIGtleSBmb3IgdGhlIHdyYXAgbWFw
LgotICAgICAgICAgICAgICAgICAgICoqLwotICAgICAgICAgICAgTWV0YW1vcnBoLl93cmFwTWFw
ID0gewotICAgICAgICAgICAgICAgIHNlbGVjdDogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVs
dGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCi0gICAgICAgICAgICAgICAgZmllbGRzZXQ6IFsgMSwg
IjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCi0gICAgICAgICAgICAgICAgdGFibGU6IFsg
MSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCi0gICAgICAgICAgICAgICAgdGJvZHk6IFsgMiwg
Ijx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCi0gICAgICAgICAgICAgICAg
dHI6IFsgMywgIjx0YWJsZT48dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0s
Ci0gICAgICAgICAgICAgICAgY29sZ3JvdXA6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48
Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCi0gICAgICAgICAgICAgICAgbWFw
OiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCi0gICAgICAgICAgICAgICAgX2RlZmF1bHQ6IFsg
MCwgIiIsICIiIF0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBmaW5kQ2hpbGRC
eUlkID0gZnVuY3Rpb24oZWxlbWVudCwgaWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBsZW4g
PSBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoLCBpZHgsIG5vZGUsIGZvdW5kOwotICAgICAgICAg
ICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICAgICAgICAg
ICAgICBub2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2lkeF07Ci0gICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBmaW5kQ2hpbGRCeUlkKG5vZGUsIGlkKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZm91bmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgc2V0SW5uZXJIVE1MID0gZnVuY3Rp
b24oZWxlbWVudCwgaHRtbCkgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gW107Ci0g
ICAgICAgICAgICAgICAgaWYgKG1vdmVzV2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBSaWdodCBub3cgd2Ugb25seSBjaGVjayBmb3Igc2NyaXB0IHRhZ3Mgd2l0aCBpZHMgd2l0
aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gZ29hbCBvZiB0YXJnZXRpbmcgbW9ycGhzLgot
ICAgICAgICAgICAgICAgICAgICBodG1sID0gaHRtbC5yZXBsYWNlKC8oXHMrKSg8c2NyaXB0IGlk
PScoW14nXSspJykvZywgZnVuY3Rpb24obWF0Y2gsIHNwYWNlcywgdGFnLCBpZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKFtpZCwgc3BhY2VzXSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGFnOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGh0bWw7
Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHRvIGRvIGFueSB3aGl0ZXNwYWNlIGFk
anVzdG1lbnRzIGRvIHRoZW0gbm93Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3Ro
ID4gMCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gbWF0Y2hlcy5sZW5ndGgsIGlk
eDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0gZmluZENoaWxkQnlJZChlbGVt
ZW50LCBtYXRjaGVzW2lkeF1bMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKG1hdGNoZXNbaWR4XVsxXSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgc2NyaXB0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgKiBHaXZlbiBhIHBhcmVudCBub2Rl
IGFuZCBzb21lIEhUTUwsIGdlbmVyYXRlIGEgc2V0IG9mIG5vZGVzLiBSZXR1cm4gdGhlIGZpcnN0
Ci0gICAgICAgICAgICAgICAgICAgKiBub2RlLCB3aGljaCB3aWxsIGFsbG93IHVzIHRvIHRyYXZl
cnNlIHRoZSByZXN0IHVzaW5nIG5leHRTaWJsaW5nLgotICAgICAgICAgICAgICAgICAgICoKLSAg
ICAgICAgICAgICAgICAgICAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGlubmVySFRNTCBp
biBJRSBkb2VzIG5vdCByZWFsbHkgcGFyc2UgdGhlIG5vZGVzLgotICAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICB2YXIgZmlyc3ROb2RlRm9yID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwg
aHRtbCkgewotICAgICAgICAgICAgICAgIHZhciB3cmFwTWFwID0gTWV0YW1vcnBoLl93cmFwTWFw
OwotICAgICAgICAgICAgICAgIHZhciBhcnIgPSB3cmFwTWFwW3BhcmVudE5vZGUudGFnTmFtZS50
b0xvd2VyQ2FzZSgpXSB8fCB3cmFwTWFwLl9kZWZhdWx0OwotICAgICAgICAgICAgICAgIHZhciBk
ZXB0aCA9IGFyclswXSwgc3RhcnQgPSBhcnJbMV0sIGVuZCA9IGFyclsyXTsKLQotICAgICAgICAg
ICAgICAgIGlmIChuZWVkc1NoeSkgewotICAgICAgICAgICAgICAgICAgICBodG1sID0gJyZzaHk7
JyArIGh0bWw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLQotICAgICAgICAgICAgICAgIHNl
dElubmVySFRNTChlbGVtZW50LCBzdGFydCArIGh0bWwgKyBlbmQpOwotCi0gICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gZGVwdGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gZWxlbWVudC5maXJzdENoaWxkOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIExvb2sgZm9yICZzaHk7IHRvIHJlbW92ZSBpdC4KLSAgICAgICAgICAg
ICAgICBpZiAobmVlZHNTaHkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNoeUVsZW1lbnQg
PSBlbGVtZW50OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB3ZSBnZXQgbmFt
ZWxlc3MgZWxlbWVudHMgd2l0aCB0aGUgc2h5IGluc2lkZQotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoc2h5RWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAhc2h5RWxlbWVudC5ub2RlTmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc2h5RWxlbWVudCA9IHNoeUVsZW1lbnQuZmlyc3RD
aGlsZDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEF0
IHRoaXMgcG9pbnQgaXQncyB0aGUgYWN0dWFsIHVuaWNvZGUgY2hhcmFjdGVyLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2h5RWxlbWVudC5ub2RlVHlwZSA9PT0gMyAmJiBzaHlFbGVtZW50Lm5v
ZGVWYWx1ZS5jaGFyQXQoMCkgPT09ICJcdTAwQUQiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzaHlFbGVtZW50Lm5vZGVWYWx1ZSA9IHNoeUVsZW1lbnQubm9kZVZhbHVlLnNsaWNlKDEpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAvKgotICAg
ICAgICAgICAgICAgICAgICogSW4gc29tZSBjYXNlcywgSW50ZXJuZXQgRXhwbG9yZXIgY2FuIGNy
ZWF0ZSBhbiBhbm9ueW1vdXMgbm9kZSBpbgotICAgICAgICAgICAgICAgICAgICogdGhlIGhpZXJh
cmNoeSB3aXRoIG5vIHRhZ05hbWUuIFlvdSBjYW4gY3JlYXRlIHRoaXMgc2NlbmFyaW8gdmlhOgot
ICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqICAgICBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICAgICAqICAgICBkaXYu
aW5uZXJIVE1MID0gIjx0YWJsZT4mc2h5PHNjcmlwdD48L3NjcmlwdD48dHI+PHRkPmhpPC90ZD48
L3RyPjwvdGFibGU+IjsKLSAgICAgICAgICAgICAgICAgICAqICAgICBkaXYuZmlyc3RDaGlsZC5m
aXJzdENoaWxkLnRhZ05hbWUgLy89PiAiIgotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAg
ICAgICAgICAgICAqIElmIG91ciBzY3JpcHQgbWFya2VycyBhcmUgaW5zaWRlIHN1Y2ggYSBub2Rl
LCB3ZSBuZWVkIHRvIGZpbmQgdGhhdAotICAgICAgICAgICAgICAgICAgICogbm9kZSBhbmQgdXNl
ICppdCogYXMgdGhlIG1hcmtlci4KLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
dmFyIHJlYWxOb2RlID0gZnVuY3Rpb24oc3RhcnQpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
c3RhcnQucGFyZW50Tm9kZS50YWdOYW1lID09PSAiIikgewotICAgICAgICAgICAgICAgICAgICBz
dGFydCA9IHN0YXJ0LnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLyoKLSAg
ICAgICAgICAgICAgICAgICAqIFdoZW4gYXV0b21hdGljYWxseSBhZGRpbmcgYSB0Ym9keSwgSW50
ZXJuZXQgRXhwbG9yZXIgaW5zZXJ0cyB0aGUKLSAgICAgICAgICAgICAgICAgICAqIHRib2R5IGlt
bWVkaWF0ZWx5IGJlZm9yZSB0aGUgZmlyc3QgPHRyPi4gT3RoZXIgYnJvd3NlcnMgY3JlYXRlIGl0
Ci0gICAgICAgICAgICAgICAgICAgKiBiZWZvcmUgdGhlIGZpcnN0IG5vZGUsIG5vIG1hdHRlciB3
aGF0LgotICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqIFRoaXMgbWVh
bnMgdGhlIHRoZSBmb2xsb3dpbmcgY29kZToKLSAgICAgICAgICAgICAgICAgICAqCi0gICAgICAg
ICAgICAgICAgICAgKiAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0g
ICAgICAgICAgICAgICAgICAgKiAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHNjcmlwdCBp
ZD0nZmlyc3QnPjwvc2NyaXB0Pjx0cj48dGQ+aGk8L3RkPjwvdHI+PHNjcmlwdCBpZD0nbGFzdCc+
PC9zY3JpcHQ+PC90YWJsZT4KLSAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAg
ICAgKiBHZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBET00gaW4gSUU6Ci0gICAgICAgICAgICAgICAg
ICAgKgotICAgICAgICAgICAgICAgICAgICogICAgICsgZGl2Ci0gICAgICAgICAgICAgICAgICAg
KiAgICAgICArIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgKiAgICAgICAgIC0gc2NyaXB0IGlk
PSdmaXJzdCcKLSAgICAgICAgICAgICAgICAgICAqICAgICAgICAgKyB0Ym9keQotICAgICAgICAg
ICAgICAgICAgICogICAgICAgICAgICsgdHIKLSAgICAgICAgICAgICAgICAgICAqICAgICAgICAg
ICAgICsgdGQKLSAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgLSAiaGkiCi0gICAg
ICAgICAgICAgICAgICAgKiAgICAgICAgICAgLSBzY3JpcHQgaWQ9J2xhc3QnCi0gICAgICAgICAg
ICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICogV2hpY2ggbWVhbnMgdGhhdCB0aGUgdHdv
IHNjcmlwdCB0YWdzLCBldmVuIHRob3VnaCB0aGV5IHdlcmUKLSAgICAgICAgICAgICAgICAgICAq
IGluc2VydGVkIGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZSBoaWVyYXJjaHkgaW4gdGhlIG9yaWdp
bmFsCi0gICAgICAgICAgICAgICAgICAgKiBIVE1MLCBub3cgaGF2ZSBkaWZmZXJlbnQgcGFyZW50
cy4KLSAgICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICAgKiBUaGlzIGNvZGUg
cmVwYXJlbnRzIHRoZSBmaXJzdCBzY3JpcHQgdGFnIGJ5IG1ha2luZyBpdCB0aGUgdGJvZHkncwot
ICAgICAgICAgICAgICAgICAgICogZmlyc3QgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgKgot
ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB2YXIgZml4UGFyZW50YWdlID0gZnVu
Y3Rpb24oc3RhcnQsIGVuZCkgewotICAgICAgICAgICAgICAgIGlmIChzdGFydC5wYXJlbnROb2Rl
ICE9PSBlbmQucGFyZW50Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBlbmQucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUoc3RhcnQsIGVuZC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGh0bWxGdW5jID0gZnVu
Y3Rpb24oaHRtbCwgb3V0ZXJUb28pIHsKLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHJlYWwg
c3RhcnRpbmcgbm9kZS4gc2VlIHJlYWxOb2RlIGZvciBkZXRhaWxzLgotICAgICAgICAgICAgICAg
IHZhciBzdGFydCA9IHJlYWxOb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3RhcnQp
KTsKLSAgICAgICAgICAgICAgICB2YXIgZW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhp
cy5lbmQpOwotICAgICAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZW5kLnBhcmVudE5vZGU7
Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUsIG5leHRTaWJsaW5nLCBsYXN0OwotCi0gICAgICAg
ICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgbm9kZXMgc2hhcmUg
dGhlIHNhbWUKLSAgICAgICAgICAgICAgICAvLyBwYXJlbnQuIElmIG5vdCwgZml4IGl0LgotICAg
ICAgICAgICAgICAgIGZpeFBhcmVudGFnZShzdGFydCwgZW5kKTsKLQotICAgICAgICAgICAgICAg
IC8vIHJlbW92ZSBhbGwgb2YgdGhlIG5vZGVzIGFmdGVyIHRoZSBzdGFydGluZyBwbGFjZWhvbGRl
ciBhbmQKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGVuZGluZyBwbGFjZWhvbGRlci4K
LSAgICAgICAgICAgICAgICBub2RlID0gc3RhcnQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBub2Rl
Lm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgICAgICBsYXN0ID0gbm9kZSA9PT0gZW5kOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgdGhlIGxhc3Qgbm9kZSwgYW5kIHdl
IHdhbnQgdG8gcmVtb3ZlIGl0IGFzIHdlbGwsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNldCB0
aGUgYGVuZGAgbm9kZSB0byB0aGUgbmV4dCBzaWJsaW5nLiBUaGlzIGlzIGJlY2F1c2UKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiwgd2UgaW5zZXJ0
IHRoZSBuZXcgbm9kZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBlbmQgKG5v
dGUgdGhhdCBpbnNlcnRCZWZvcmUobm9kZSwgbnVsbCkgaXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIHNhbWUgYXMgYXBwZW5kQ2hpbGQobm9kZSkpLgotICAgICAgICAgICAgICAgICAgICAv
LwotICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkbyBub3Qgd2FudCB0byByZW1vdmUgaXQs
IGp1c3QgYnJlYWsuCi0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3V0ZXJUb28pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQgPSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBpZiB0aGlzIGlzIHRoZSBsYXN0IG5vZGUgYW5kIHdlIGRpZG4ndCBicmVhayBiZWZvcmUKLSAg
ICAgICAgICAgICAgICAgICAgLy8gKGJlY2F1c2Ugd2Ugd2FudGVkIHRvIHJlbW92ZSB0aGUgb3V0
ZXIgbm9kZXMpLCBicmVhawotICAgICAgICAgICAgICAgICAgICAvLyBub3cuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChsYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0U2li
bGluZzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGZp
cnN0IG5vZGUgZm9yIHRoZSBIVE1MIHN0cmluZywgZXZlbiBpbiBjYXNlcyBsaWtlCi0gICAgICAg
ICAgICAgICAgLy8gdGFibGVzIGFuZCBsaXN0cyB3aGVyZSBhIHNpbXBsZSBpbm5lckhUTUwgb24g
YSBkaXYgd291bGQKLSAgICAgICAgICAgICAgICAvLyBzd2FsbG93IHNvbWUgb2YgdGhlIGNvbnRl
bnQuCi0gICAgICAgICAgICAgICAgbm9kZSA9IGZpcnN0Tm9kZUZvcihzdGFydC5wYXJlbnROb2Rl
LCBodG1sKTsKLQotICAgICAgICAgICAgICAgIGlmIChvdXRlclRvbykgewotICAgICAgICAgICAg
ICAgICAgICBzdGFydC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0YXJ0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBub2RlcyBmb3IgdGhlIEhUTUwg
YmV0d2VlbiB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZwotICAgICAgICAgICAgICAgIC8vIHBsYWNl
aG9sZGVyLgotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAg
cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZW5kKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbm9kZXMgaW4gdGhlIERPTSByZXByZXNlbnRpbmcg
dGhpcyBtZXRhbW9ycGguCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gdGhpcyBpbmNs
dWRlcyB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBwbGFjZWhvbGRlcnMuCi0gICAgICAgICAgICBy
ZW1vdmVGdW5jID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmVh
bE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zdGFydCkpOwotICAgICAgICAgICAg
ICAgIHZhciBlbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVuZCk7Ci0KLSAgICAg
ICAgICAgICAgICB0aGlzLmh0bWwoJycpOwotICAgICAgICAgICAgICAgIHN0YXJ0LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoc3RhcnQpOwotICAgICAgICAgICAgICAgIGVuZC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGVuZCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBhcHBlbmRUb0Z1
bmMgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBm
aXJzdE5vZGVGb3IocGFyZW50Tm9kZSwgdGhpcy5vdXRlckhUTUwoKSk7Ci0gICAgICAgICAgICAg
ICAgdmFyIG5leHRTaWJsaW5nOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nOwotICAgICAg
ICAgICAgICAgICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG5vZGUpOwotICAgICAgICAgICAg
ICAgICAgICBub2RlID0gbmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgYWZ0ZXJGdW5jID0gZnVuY3Rpb24oaHRtbCkgewotICAgICAg
ICAgICAgICAgIC8vIGdldCB0aGUgcmVhbCBzdGFydGluZyBub2RlLiBzZWUgcmVhbE5vZGUgZm9y
IGRldGFpbHMuCi0gICAgICAgICAgICAgICAgdmFyIGVuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKHRoaXMuZW5kKTsKLSAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0QmVmb3JlID0gZW5kLm5l
eHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZW5kLnBhcmVudE5v
ZGU7Ci0gICAgICAgICAgICAgICAgdmFyIG5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgIHZh
ciBub2RlOwotCi0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBmaXJzdCBub2RlIGZvciB0aGUg
SFRNTCBzdHJpbmcsIGV2ZW4gaW4gY2FzZXMgbGlrZQotICAgICAgICAgICAgICAgIC8vIHRhYmxl
cyBhbmQgbGlzdHMgd2hlcmUgYSBzaW1wbGUgaW5uZXJIVE1MIG9uIGEgZGl2IHdvdWxkCi0gICAg
ICAgICAgICAgICAgLy8gc3dhbGxvdyBzb21lIG9mIHRoZSBjb250ZW50LgotICAgICAgICAgICAg
ICAgIG5vZGUgPSBmaXJzdE5vZGVGb3IocGFyZW50Tm9kZSwgaHRtbCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBjb3B5IHRoZSBub2RlcyBmb3IgdGhlIEhUTUwgYmV0d2VlbiB0aGUgc3RhcnRpbmcg
YW5kIGVuZGluZwotICAgICAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyLgotICAgICAgICAgICAg
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gbm9k
ZS5uZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUobm9kZSwgaW5zZXJ0QmVmb3JlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHRT
aWJsaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IHByZXBlbmRGdW5jID0gZnVuY3Rpb24oaHRtbCkgewotICAgICAgICAgICAgICAgIHZhciBzdGFy
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3RhcnQpOwotICAgICAgICAgICAgICAg
IHZhciBwYXJlbnROb2RlID0gc3RhcnQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICB2YXIg
bmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGU7Ci0KLSAgICAgICAgICAgICAg
ICBub2RlID0gZmlyc3ROb2RlRm9yKHBhcmVudE5vZGUsIGh0bWwpOwotICAgICAgICAgICAgICAg
IHZhciBpbnNlcnRCZWZvcmUgPSBzdGFydC5uZXh0U2libGluZzsKLQotICAgICAgICAgICAgICAg
IHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nID0gbm9kZS5u
ZXh0U2libGluZzsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
bm9kZSwgaW5zZXJ0QmVmb3JlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHRTaWJs
aW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICBNZXRhbW9ycGgucHJvdG90eXBlLmh0bWwgPSBmdW5jdGlvbihodG1sKSB7Ci0gICAgICAg
ICAgICB0aGlzLmNoZWNrUmVtb3ZlZCgpOwotICAgICAgICAgICAgaWYgKGh0bWwgPT09IHVuZGVm
aW5lZCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlubmVySFRNTDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaHRtbEZ1bmMuY2FsbCh0aGlzLCBodG1sKTsKLQotICAgICAg
ICAgICAgdGhpcy5pbm5lckhUTUwgPSBodG1sOwotICAgICAgICB9OwotCi0gICAgICAgIE1ldGFt
b3JwaC5wcm90b3R5cGUucmVwbGFjZVdpdGggPSBmdW5jdGlvbihodG1sKSB7Ci0gICAgICAgICAg
ICB0aGlzLmNoZWNrUmVtb3ZlZCgpOwotICAgICAgICAgICAgaHRtbEZ1bmMuY2FsbCh0aGlzLCBo
dG1sLCB0cnVlKTsKLSAgICAgICAgfTsKLQotICAgICAgICBNZXRhbW9ycGgucHJvdG90eXBlLnJl
bW92ZSA9IHJlbW92ZUZ1bmM7Ci0gICAgICAgIE1ldGFtb3JwaC5wcm90b3R5cGUub3V0ZXJIVE1M
ID0gb3V0ZXJIVE1MRnVuYzsKLSAgICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5hcHBlbmRUbyA9
IGFwcGVuZFRvRnVuYzsKLSAgICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5hZnRlciA9IGFmdGVy
RnVuYzsKLSAgICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5wcmVwZW5kID0gcHJlcGVuZEZ1bmM7
Ci0gICAgICAgIE1ldGFtb3JwaC5wcm90b3R5cGUuc3RhcnRUYWcgPSBzdGFydFRhZ0Z1bmM7Ci0g
ICAgICAgIE1ldGFtb3JwaC5wcm90b3R5cGUuZW5kVGFnID0gZW5kVGFnRnVuYzsKLQotICAgICAg
ICBNZXRhbW9ycGgucHJvdG90eXBlLmlzUmVtb3ZlZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgdmFyIGJlZm9yZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3RhcnQpOwotICAg
ICAgICAgICAgdmFyIGFmdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lbmQpOwot
Ci0gICAgICAgICAgICByZXR1cm4gIWJlZm9yZSB8fCAhYWZ0ZXI7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgTWV0YW1vcnBoLnByb3RvdHlwZS5jaGVja1JlbW92ZWQgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLmlzUmVtb3ZlZCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb25zIG9uIGEgTWV0YW1vcnBoIHRoYXQg
aXMgbm90IGluIHRoZSBET00uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgcmV0dXJuIE1ldGFtb3JwaDsKLSAgICB9KTsKLQotICAgIGRlZmluZSgicm91dGUtcmVjb2du
aXplciIsCi0gICAgWyJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19leHBvcnRzX18pIHsKLSAg
ICAgICAgInVzZSBzdHJpY3QiOwotICAgICAgICB2YXIgc3BlY2lhbHMgPSBbCi0gICAgICAgICcv
JywgJy4nLCAnKicsICcrJywgJz8nLCAnfCcsCi0gICAgICAgICcoJywgJyknLCAnWycsICddJywg
J3snLCAnfScsICdcXCcKLSAgICAgICAgXTsKLQotICAgICAgICB2YXIgZXNjYXBlUmVnZXggPSBu
ZXcgUmVnRXhwKCcoXFwnICsgc3BlY2lhbHMuam9pbignfFxcJykgKyAnKScsICdnJyk7Ci0KLSAg
ICAgICAgZnVuY3Rpb24gaXNBcnJheSh0ZXN0KSB7Ci0gICAgICAgICAgICByZXR1cm4gT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRlc3QpID09PSAiW29iamVjdCBBcnJheV0iOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQSBTZWdtZW50IHJlcHJlc2VudHMgYSBzZWdtZW50IGluIHRo
ZSBvcmlnaW5hbCByb3V0ZSBkZXNjcmlwdGlvbi4KLSAgICAgICAgLy8gRWFjaCBTZWdtZW50IHR5
cGUgcHJvdmlkZXMgYW4gYGVhY2hDaGFyYCBhbmQgYHJlZ2V4YCBtZXRob2QuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoZSBgZWFjaENoYXJgIG1ldGhvZCBpbnZva2VzIHRoZSBjYWxsYmFjayB3
aXRoIG9uZSBvciBtb3JlIGNoYXJhY3RlcgotICAgICAgICAvLyBzcGVjaWZpY2F0aW9ucy4gQSBj
aGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBjb25zdW1lcyBvbmUgb3IgbW9yZSBpbnB1dAotICAgICAg
ICAvLyBjaGFyYWN0ZXJzLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgYHJlZ2V4YCBtZXRo
b2QgcmV0dXJucyBhIHJlZ2V4IGZyYWdtZW50IGZvciB0aGUgc2VnbWVudC4gSWYgdGhlCi0gICAg
ICAgIC8vIHNlZ21lbnQgaXMgYSBkeW5hbWljIG9mIHN0YXIgc2VnbWVudCwgdGhlIHJlZ2V4IGZy
YWdtZW50IGFsc28gaW5jbHVkZXMKLSAgICAgICAgLy8gYSBjYXB0dXJlLgotICAgICAgICAvLwot
ICAgICAgICAvLyBBIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGNvbnRhaW5zOgotICAgICAgICAv
LwotICAgICAgICAvLyAqIGB2YWxpZENoYXJzYDogYSBTdHJpbmcgd2l0aCBhIGxpc3Qgb2YgYWxs
IHZhbGlkIGNoYXJhY3RlcnMsIG9yCi0gICAgICAgIC8vICogYGludmFsaWRDaGFyc2A6IGEgU3Ry
aW5nIHdpdGggYSBsaXN0IG9mIGFsbCBpbnZhbGlkIGNoYXJhY3RlcnMKLSAgICAgICAgLy8gKiBg
cmVwZWF0YDogdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIHNwZWNpZmljYXRpb24gY2FuIHJlcGVhdAot
Ci0gICAgICAgIGZ1bmN0aW9uIFN0YXRpY1NlZ21lbnQoc3RyaW5nKSB7Ci0gICAgICAgICAgICB0
aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgICAgICAgfQotICAgICAgICBTdGF0aWNTZWdtZW50LnBy
b3RvdHlwZSA9IHsKLSAgICAgICAgICAgIGVhY2hDaGFyOiBmdW5jdGlvbihjYWxsYmFjaykgewot
ICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSB0aGlzLnN0cmluZywgY2g7Ci0KLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN0cmluZy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgY2ggPSBzdHJpbmcuY2hhckF0KGkpOwotICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayh7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZENoYXJzOiBj
aCAKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgcmVnZXg6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnN0cmluZy5yZXBsYWNlKGVzY2FwZVJlZ2V4LCAnXFwkMScpOwotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnN0cmluZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQot
ICAgICAgICBmdW5jdGlvbiBEeW5hbWljU2VnbWVudChuYW1lKSB7Ci0gICAgICAgICAgICB0aGlz
Lm5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0gICAgICAgIER5bmFtaWNTZWdtZW50LnByb3RvdHlw
ZSA9IHsKLSAgICAgICAgICAgIGVhY2hDaGFyOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHsKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZENoYXJzOiAi
LyIsCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdDogdHJ1ZSAKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHJlZ2V4OiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIihbXi9dKykiOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgZ2VuZXJhdGU6IGZ1bmN0aW9uKHBhcmFtcykgewotICAgICAgICAgICAgICAgIHJldHVy
biBwYXJhbXNbdGhpcy5uYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAg
ICBmdW5jdGlvbiBTdGFyU2VnbWVudChuYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLm5hbWUgPSBu
YW1lOwotICAgICAgICB9Ci0gICAgICAgIFN0YXJTZWdtZW50LnByb3RvdHlwZSA9IHsKLSAgICAg
ICAgICAgIGVhY2hDaGFyOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKHsKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZENoYXJzOiAiIiwKLSAgICAgICAg
ICAgICAgICAgICAgcmVwZWF0OiB0cnVlIAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgcmVnZXg6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHJldHVybiAiKC4rKSI7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBnZW5lcmF0ZTog
ZnVuY3Rpb24ocGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtc1t0aGlzLm5h
bWVdOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIEVwc2ls
b25TZWdtZW50KCkge30KLSAgICAgICAgRXBzaWxvblNlZ21lbnQucHJvdG90eXBlID0gewotICAg
ICAgICAgICAgZWFjaENoYXI6IGZ1bmN0aW9uKCkge30sCi0gICAgICAgICAgICByZWdleDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIGdlbmVyYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
IiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyc2Uo
cm91dGUsIG5hbWVzLCB0eXBlcykgewotICAgICAgICAgICAgLy8gbm9ybWFsaXplIHJvdXRlIGFz
IG5vdCBzdGFydGluZyB3aXRoIGEgIi8iLiBSZWNvZ25pdGlvbiB3aWxsCi0gICAgICAgICAgICAv
LyBhbHNvIG5vcm1hbGl6ZS4KLSAgICAgICAgICAgIGlmIChyb3V0ZS5jaGFyQXQoMCkgPT09ICIv
IikgewotICAgICAgICAgICAgICAgIHJvdXRlID0gcm91dGUuc3Vic3RyKDEpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB2YXIgc2VnbWVudHMgPSByb3V0ZS5zcGxpdCgiLyIpLCByZXN1
bHRzID0gW107Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2VnbWVudHMubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50
c1tpXSwgbWF0Y2g7Ci0KLSAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSBzZWdtZW50Lm1hdGNo
KC9eOihbXlwvXSspJC8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcg
RHluYW1pY1NlZ21lbnQobWF0Y2hbMV0pKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVz
aChtYXRjaFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVzLmR5bmFtaWNzKys7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IHNlZ21lbnQubWF0Y2goL15cKihbXlwvXSsp
JC8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgU3RhclNlZ21lbnQo
bWF0Y2hbMV0pKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaChtYXRjaFsxXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHR5cGVzLnN0YXJzKys7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChzZWdtZW50ID09PSAiIikgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2go
bmV3IEVwc2lsb25TZWdtZW50KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgU3RhdGljU2VnbWVudChzZWdtZW50KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHR5cGVzLnN0YXRpY3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQSBTdGF0ZSBoYXMgYSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhbmQgKGBj
aGFyU3BlY2ApIGFuZCBhIGxpc3Qgb2YgcG9zc2libGUKLSAgICAgICAgLy8gc3Vic2VxdWVudCBz
dGF0ZXMgKGBuZXh0U3RhdGVzYCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIGEgU3RhdGUg
aXMgYW4gYWNjZXB0aW5nIHN0YXRlLCBpdCB3aWxsIGFsc28gaGF2ZSBzZXZlcmFsIGFkZGl0aW9u
YWwKLSAgICAgICAgLy8gcHJvcGVydGllczoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gKiBgcmVn
ZXhgOiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdCBwYXJhbWV0
ZXJzIGZyb20gcGF0aHMKLSAgICAgICAgLy8gICB0aGF0IHJlYWNoZWQgdGhpcyBhY2NlcHRpbmcg
c3RhdGUuCi0gICAgICAgIC8vICogYGhhbmRsZXJzYDogSW5mb3JtYXRpb24gb24gaG93IHRvIGNv
bnZlcnQgdGhlIGxpc3Qgb2YgY2FwdHVyZXMgaW50byBjYWxscwotICAgICAgICAvLyAgIHRvIHJl
Z2lzdGVyZWQgaGFuZGxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKLSAgICAgICAg
Ly8gKiBgdHlwZXNgOiBIb3cgbWFueSBzdGF0aWMsIGR5bmFtaWMgb3Igc3RhciBzZWdtZW50cyBp
biB0aGlzIHJvdXRlLiBVc2VkIHRvCi0gICAgICAgIC8vICAgZGVjaWRlIHdoaWNoIHJvdXRlIHRv
IHVzZSBpZiBtdWx0aXBsZSByZWdpc3RlcmVkIHJvdXRlcyBtYXRjaCBhIHBhdGguCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIEN1cnJlbnRseSwgU3RhdGUgaXMgaW1wbGVtZW50ZWQgbmFpdmVseSBi
eSBsb29waW5nIG92ZXIgYG5leHRTdGF0ZXNgIGFuZAotICAgICAgICAvLyBjb21wYXJpbmcgYSBj
aGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhZ2FpbnN0IGEgY2hhcmFjdGVyLiBBIG1vcmUgZWZmaWNp
ZW50Ci0gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIHVzZSBhIGhhc2ggb2Yga2V5cyBw
b2ludGluZyBhdCBvbmUgb3IgbW9yZSBuZXh0IHN0YXRlcy4KLQotICAgICAgICBmdW5jdGlvbiBT
dGF0ZShjaGFyU3BlYykgewotICAgICAgICAgICAgdGhpcy5jaGFyU3BlYyA9IGNoYXJTcGVjOwot
ICAgICAgICAgICAgdGhpcy5uZXh0U3RhdGVzID0gW107Ci0gICAgICAgIH0KLQotICAgICAgICBT
dGF0ZS5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGNoYXJTcGVjKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIG5leHRTdGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXM7Ci0KLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5leHRTdGF0ZXMubGVuZ3RoOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IG5leHRTdGF0ZXNbaV07
Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGlzRXF1YWwgPSBjaGlsZC5jaGFyU3BlYy52YWxp
ZENoYXJzID09PSBjaGFyU3BlYy52YWxpZENoYXJzOwotICAgICAgICAgICAgICAgICAgICBpc0Vx
dWFsID0gaXNFcXVhbCAmJiBjaGlsZC5jaGFyU3BlYy5pbnZhbGlkQ2hhcnMgPT09IGNoYXJTcGVj
LmludmFsaWRDaGFyczsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNFcXVhbCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHV0OiBm
dW5jdGlvbihjaGFyU3BlYykgewotICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsKLQotICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhbHJlYWR5IGV4aXN0
cyBpbiBhIGNoaWxkIG9mIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgLy8gc3RhdGUsIGp1
c3QgcmV0dXJuIHRoYXQgc3RhdGUuCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID0gdGhpcy5n
ZXQoY2hhclNwZWMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIGEgbmV3IHN0YXRlIGZvciB0
aGUgY2hhcmFjdGVyIHNwZWMKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IG5ldyBTdGF0ZShjaGFy
U3BlYyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIG5ldyBzdGF0ZSBhcyBhIGNo
aWxkIG9mIHRoZSBjdXJyZW50IHN0YXRlCi0gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RhdGVz
LnB1c2goc3RhdGUpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBjaGFyYWN0ZXIgc3Bl
Y2lmaWNhdGlvbiByZXBlYXRzLCBpbnNlcnQgdGhlIG5ldyBzdGF0ZSBhcyBhIGNoaWxkCi0gICAg
ICAgICAgICAgICAgLy8gb2YgaXRzZWxmLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB0cmlnZ2Vy
IGFuIGluZmluaXRlIGxvb3AgYmVjYXVzZSBlYWNoCi0gICAgICAgICAgICAgICAgLy8gdHJhbnNp
dGlvbiBkdXJpbmcgcmVjb2duaXRpb24gY29uc3VtZXMgYSBjaGFyYWN0ZXIuCi0gICAgICAgICAg
ICAgICAgaWYgKGNoYXJTcGVjLnJlcGVhdCkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5u
ZXh0U3RhdGVzLnB1c2goc3RhdGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIFJldHVybiB0aGUgbmV3IHN0YXRlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRl
OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gRmluZCBhIGxpc3Qgb2YgY2hpbGQg
c3RhdGVzIG1hdGNoaW5nIHRoZSBuZXh0IGNoYXJhY3RlcgotICAgICAgICAgICAgbWF0Y2g6IGZ1
bmN0aW9uKGNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gREVCVUcgIlByb2Nlc3NpbmcgYCIgKyBj
aCArICJgOiIKLSAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXRlcyA9IHRoaXMubmV4dFN0YXRl
cywKLSAgICAgICAgICAgICAgICBjaGlsZCwgY2hhclNwZWMsIGNoYXJzOwotCi0gICAgICAgICAg
ICAgICAgLy8gREVCVUcgIiAgIiArIGRlYnVnU3RhdGUodGhpcykKLSAgICAgICAgICAgICAgICB2
YXIgcmV0dXJuZWQgPSBbXTsKLQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
bmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGQgPSBuZXh0U3RhdGVzW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXJTcGVjID0gY2hp
bGQuY2hhclNwZWM7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoY2hhcnMgPSBj
aGFyU3BlYy52YWxpZENoYXJzKSAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm5lZC5wdXNoKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNoYXJzID0gY2hhclNw
ZWMuaW52YWxpZENoYXJzKSAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjaGFycy5pbmRleE9mKGNoKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm5lZC5wdXNoKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHJldHVybiByZXR1cm5lZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqIElG
IERFQlVHCi0gICAgICAgICAgICAgICAgICAsIGRlYnVnOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGNoYXJTcGVjID0gdGhpcy5jaGFyU3BlYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYnVnID0gIlsiLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgPSBj
aGFyU3BlYy52YWxpZENoYXJzIHx8IGNoYXJTcGVjLmludmFsaWRDaGFyczsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hhclNwZWMuaW52YWxpZENoYXJzKSB7IGRlYnVnICs9ICJeIjsgfQot
ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyArPSBjaGFyczsKLSAgICAgICAgICAgICAgICAgICAg
ZGVidWcgKz0gIl0iOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyU3BlYy5yZXBlYXQp
IHsgZGVidWcgKz0gIisiOyB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlYnVnOwot
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgRU5EIElGICoqLwotICAgICAg
ICB9OwotCi0gICAgICAgIC8qKiBJRiBERUJVRwotICAgICAgICAgICAgZnVuY3Rpb24gZGVidWco
bG9nKSB7Ci0gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvZyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZ1bmN0aW9uIGRlYnVnU3RhdGUoc3RhdGUpIHsKLSAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRlLm5leHRTdGF0ZXMubWFwKGZ1bmN0aW9uKG4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAobi5uZXh0U3RhdGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gIiggIiArIG4uZGVidWco
KSArICIgW2FjY2VwdGluZ10gKSI7IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gIiggIiArIG4u
ZGVidWcoKSArICIgPHRoZW4+ICIgKyBuLm5leHRTdGF0ZXMubWFwKGZ1bmN0aW9uKHMpIHsgcmV0
dXJuIHMuZGVidWcoKSB9KS5qb2luKCIgb3IgIikgKyAiICkiOwotICAgICAgICAgICAgICB9KS5q
b2luKCIsICIpCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBFTkQgSUYgKiovCi0KLSAgICAg
ICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IG5haXZlIHN0cmF0ZWd5LCBidXQgc2hvdWxkIHdvcmsg
aW4gYSBsb3Qgb2YgY2FzZXMKLSAgICAgICAgLy8gQSBiZXR0ZXIgc3RyYXRlZ3kgd291bGQgcHJv
cGVybHkgcmVzb2x2ZSAvcG9zdHMvOmlkL25ldyBhbmQgL3Bvc3RzL2VkaXQvOmlkLgotICAgICAg
ICAvLwotICAgICAgICAvLyBUaGlzIHN0cmF0ZWd5IGdlbmVyYWxseSBwcmVmZXJzIG1vcmUgc3Rh
dGljIGFuZCBsZXNzIGR5bmFtaWMgbWF0Y2hpbmcuCi0gICAgICAgIC8vIFNwZWNpZmljYWxseSwg
aXQKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICogcHJlZmVycyBmZXdlciBzdGFycyB0byBtb3Jl
LCB0aGVuCi0gICAgICAgIC8vICAqIHByZWZlcnMgdXNpbmcgc3RhcnMgZm9yIGxlc3Mgb2YgdGhl
IG1hdGNoIHRvIG1vcmUsIHRoZW4KLSAgICAgICAgLy8gICogcHJlZmVycyBmZXdlciBkeW5hbWlj
IHNlZ21lbnRzIHRvIG1vcmUsIHRoZW4KLSAgICAgICAgLy8gICogcHJlZmVycyBtb3JlIHN0YXRp
YyBzZWdtZW50cyB0byBtb3JlCi0gICAgICAgIGZ1bmN0aW9uIHNvcnRTb2x1dGlvbnMoc3RhdGVz
KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGVzLnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAg
ICAgICAgICAgICAgIGlmIChhLnR5cGVzLnN0YXJzICE9PSBiLnR5cGVzLnN0YXJzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhLnR5cGVzLnN0YXJzIC0gYi50eXBlcy5zdGFyczsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYS50eXBlcy5zdGFycykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoYS50eXBlcy5zdGF0aWNzICE9PSBiLnR5cGVzLnN0YXRp
Y3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBh
LnR5cGVzLnN0YXRpY3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGEudHlwZXMuZHluYW1pY3MgIT09IGIudHlwZXMuZHluYW1pY3MpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBiLnR5cGVzLmR5bmFtaWNzIC0gYS50eXBlcy5keW5hbWlj
czsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChhLnR5cGVzLmR5bmFtaWNzICE9PSBiLnR5cGVzLmR5bmFtaWNzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhLnR5cGVzLmR5bmFtaWNzIC0gYi50eXBlcy5keW5hbWlj
czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGEudHlwZXMuc3RhdGlj
cyAhPT0gYi50eXBlcy5zdGF0aWNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnR5
cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHJlY29nbml6ZUNoYXIoc3RhdGVzLCBjaCkgewotICAgICAgICAgICAgdmFy
IG5leHRTdGF0ZXMgPSBbXTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdGF0
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3Rh
dGVzW2ldOwotCi0gICAgICAgICAgICAgICAgbmV4dFN0YXRlcyA9IG5leHRTdGF0ZXMuY29uY2F0
KHN0YXRlLm1hdGNoKGNoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBu
ZXh0U3RhdGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG9DcmVhdGUgPSBPYmplY3QuY3Jl
YXRlIHx8IGZ1bmN0aW9uKHByb3RvKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBGKCkge30KLSAg
ICAgICAgICAgIEYucHJvdG90eXBlID0gcHJvdG87Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEYo
KTsKLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBSZWNvZ25pemVSZXN1bHRzKHF1ZXJ5
UGFyYW1zKSB7Ci0gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMgfHwg
e307Ci0gICAgICAgIH0KLSAgICAgICAgUmVjb2duaXplUmVzdWx0cy5wcm90b3R5cGUgPSBvQ3Jl
YXRlKHsKLSAgICAgICAgICAgIHNwbGljZTogQXJyYXkucHJvdG90eXBlLnNwbGljZSwKLSAgICAg
ICAgICAgIHNsaWNlOiBBcnJheS5wcm90b3R5cGUuc2xpY2UsCi0gICAgICAgICAgICBwdXNoOiBB
cnJheS5wcm90b3R5cGUucHVzaCwKLSAgICAgICAgICAgIGxlbmd0aDogMCwKLSAgICAgICAgICAg
IHF1ZXJ5UGFyYW1zOiBudWxsCi0gICAgICAgIH0pOwotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmRI
YW5kbGVyKHN0YXRlLCBwYXRoLCBxdWVyeVBhcmFtcykgewotICAgICAgICAgICAgdmFyIGhhbmRs
ZXJzID0gc3RhdGUuaGFuZGxlcnMsIHJlZ2V4ID0gc3RhdGUucmVnZXg7Ci0gICAgICAgICAgICB2
YXIgY2FwdHVyZXMgPSBwYXRoLm1hdGNoKHJlZ2V4KSwgY3VycmVudENhcHR1cmUgPSAxOwotICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSZWNvZ25pemVSZXN1bHRzKHF1ZXJ5UGFyYW1zKTsK
LQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBs
OyBpKyspIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2ldLCBuYW1l
cyA9IGhhbmRsZXIubmFtZXMsIHBhcmFtcyA9IHt9OwotCi0gICAgICAgICAgICAgICAgZm9yICh2
YXIgaiA9IDAsIG0gPSBuYW1lcy5sZW5ndGg7IGogPCBtOyBqKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW25hbWVzW2pdXSA9IGNhcHR1cmVzW2N1cnJlbnRDYXB0dXJlKytdOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsKLSAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlci5oYW5kbGVyLAotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljOiAhIW5hbWVz
Lmxlbmd0aCAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGFkZFNlZ21l
bnQoY3VycmVudFN0YXRlLCBzZWdtZW50KSB7Ci0gICAgICAgICAgICBzZWdtZW50LmVhY2hDaGFy
KGZ1bmN0aW9uKGNoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlOwotCi0gICAgICAgICAg
ICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFN0YXRlLnB1dChjaCk7Ci0gICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRoZSBtYWluIGludGVyZmFjZQotCi0gICAgICAgIHZhciBSb3V0ZVJlY29nbml6ZXIg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHRoaXMucm9vdFN0YXRlID0gbmV3IFN0YXRlKCk7
Ci0gICAgICAgICAgICB0aGlzLm5hbWVzID0ge307Ci0gICAgICAgIH07Ci0KLQotICAgICAgICBS
b3V0ZVJlY29nbml6ZXIucHJvdG90eXBlID0gewotICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihy
b3V0ZXMsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gdGhp
cy5yb290U3RhdGUsIHJlZ2V4ID0gIl4iLAotICAgICAgICAgICAgICAgIHR5cGVzID0gewotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNzOiAwLAotICAgICAgICAgICAgICAgICAgICBkeW5hbWlj
czogMCwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnM6IDAgCi0gICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICBoYW5kbGVycyA9IFtdLCBhbGxTZWdtZW50cyA9IFtdLCBuYW1lOwot
Ci0gICAgICAgICAgICAgICAgdmFyIGlzRW1wdHkgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSByb3V0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciByb3V0ZSA9IHJvdXRlc1tpXSwgbmFtZXMgPSBbXTsKLQotICAgICAg
ICAgICAgICAgICAgICB2YXIgc2VnbWVudHMgPSBwYXJzZShyb3V0ZS5wYXRoLCBuYW1lcywgdHlw
ZXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGFsbFNlZ21lbnRzID0gYWxsU2VnbWVudHMuY29u
Y2F0KHNlZ21lbnRzKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9
IHNlZ21lbnRzLmxlbmd0aDsgaiA8IG07IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNlZ21lbnQgPSBzZWdtZW50c1tqXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNlZ21lbnQgaW5zdGFuY2VvZiBFcHNpbG9uU2VnbWVudCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFkZCBhICIvIiBmb3IgdGhlIG5ldyBzZWdtZW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZENoYXJzOiAiLyIgCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4ICs9ICIvIjsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlZ21lbnQgdG8gdGhlIE5G
QSBhbmQgcmVnZXgKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IGFkZFNl
Z21lbnQoY3VycmVudFN0YXRlLCBzZWdtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z2V4ICs9IHNlZ21lbnQucmVnZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gewotICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlcjogcm91dGUuaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1l
cyAKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMu
cHVzaChoYW5kbGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aXNFbXB0eSkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50U3Rh
dGUucHV0KHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkQ2hhcnM6ICIvIiAKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZ2V4ICs9ICIvIjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUuaGFuZGxlcnMg
PSBoYW5kbGVyczsKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUucmVnZXggPSBuZXcgUmVn
RXhwKHJlZ2V4ICsgIiQiKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUudHlwZXMgPSB0
eXBlczsKLQotICAgICAgICAgICAgICAgIGlmIChuYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLmFz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZXNbbmFtZV0gPSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWdtZW50czogYWxsU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVyczogaGFuZGxlcnMKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBoYW5kbGVyc0ZvcjogZnVu
Y3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHZhciByb3V0ZSA9IHRoaXMubmFtZXNbbmFt
ZV0sIHJlc3VsdCA9IFtdOwotICAgICAgICAgICAgICAgIGlmICghcm91dGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyByb3V0ZSBuYW1lZCAiICsg
bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSByb3V0ZS5oYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnB1c2gocm91dGUuaGFuZGxlcnNbaV0pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICBoYXNSb3V0ZTogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiAhIXRoaXMubmFtZXNbbmFtZV07Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBn
ZW5lcmF0ZTogZnVuY3Rpb24obmFtZSwgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJv
dXRlID0gdGhpcy5uYW1lc1tuYW1lXSwgb3V0cHV0ID0gIiI7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyb3V0ZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlz
IG5vIHJvdXRlIG5hbWVkICIgKyBuYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB2YXIgc2VnbWVudHMgPSByb3V0ZS5zZWdtZW50czsKLQotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNlZ21lbnQgaW5zdGFuY2VvZiBFcHNpbG9uU2VnbWVudCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gIi8iOwotICAgICAgICAgICAgICAgICAgICBvdXRw
dXQgKz0gc2VnbWVudC5nZW5lcmF0ZShwYXJhbXMpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChvdXRwdXQuY2hhckF0KDApICE9PSAnLycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0ID0gJy8nICsgb3V0cHV0OwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLnF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG91dHB1dCArPSB0aGlzLmdlbmVyYXRlUXVlcnlTdHJpbmcocGFyYW1zLnF1
ZXJ5UGFyYW1zLCByb3V0ZS5oYW5kbGVycyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG91dHB1dDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdl
bmVyYXRlUXVlcnlTdHJpbmc6IGZ1bmN0aW9uKHBhcmFtcywgaGFuZGxlcnMpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcGFpcnMgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdOwot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBrZXlzLnB1c2goa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBrZXlzLnNvcnQoKTsKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBrZXkgPSBrZXlzW2ldOwotICAgICAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSBwYXJhbXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0ga2V5OwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBqIDwgbDsgaisrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGFycmF5UGFpciA9IGtleSArICdbXScgKyAnPScgKyBlbmNvZGVV
UklDb21wb25lbnQodmFsdWVbal0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJz
LnB1c2goYXJyYXlQYWlyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgKz0gIj0iICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJz
LnB1c2gocGFpcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIj8iICsgcGFpcnMuam9pbigiJiIpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgcGFyc2VRdWVyeVN0cmluZzogZnVuY3Rpb24ocXVlcnlTdHJpbmcpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgcGFpcnMgPSBxdWVyeVN0cmluZy5zcGxpdCgiJiIpLCBxdWVyeVBhcmFtcyA9IHt9
OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpXS5zcGxpdCgnPScpLAot
ICAgICAgICAgICAgICAgICAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQocGFpclswXSksCi0g
ICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IGtleS5sZW5ndGgsCi0gICAgICAgICAgICAg
ICAgICAgIGlzQXJyYXkgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwYWlyLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSAndHJ1ZSc7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvL0hhbmRsZSBhcnJheXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChrZXlMZW5ndGggPiAyICYmIGtleS5zbGljZShrZXlMZW5ndGggLTIpID09PSAn
W10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnNsaWNlKDAsIGtleUxlbmd0aCAtIDIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbXNba2V5XSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gW107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYWlyWzFdID8gZGVjb2RlVVJJQ29tcG9u
ZW50KHBhaXJbMV0pIDogJyc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1z
W2tleV0ucHVzaCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gZGVjb2RlVVJJQ29tcG9uZW50KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICByZWNvZ25pemU6IGZ1bmN0aW9uKHBhdGgpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGVz
ID0gWyB0aGlzLnJvb3RTdGF0ZSBdLAotICAgICAgICAgICAgICAgIHBhdGhMZW4sIGksIGwsIHF1
ZXJ5U3RhcnQsIHF1ZXJ5UGFyYW1zID0ge30sCi0gICAgICAgICAgICAgICAgaXNTbGFzaERyb3Bw
ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHBhdGggPSBkZWNvZGVVUkkocGF0aCk7Ci0K
LSAgICAgICAgICAgICAgICBxdWVyeVN0YXJ0ID0gcGF0aC5pbmRleE9mKCc/Jyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHF1ZXJ5U3RhcnQgIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBxdWVyeVN0cmluZyA9IHBhdGguc3Vic3RyKHF1ZXJ5U3RhcnQgKyAxLCBwYXRoLmxlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigwLCBxdWVyeVN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmco
cXVlcnlTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERF
QlVHIEdST1VQIHBhdGgKLQotICAgICAgICAgICAgICAgIGlmIChwYXRoLmNoYXJBdCgwKSAhPT0g
Ii8iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSAiLyIgKyBwYXRoOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBhdGhMZW4gPSBwYXRoLmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICBpZiAocGF0aExlbiA+IDEgJiYgcGF0aC5jaGFyQXQocGF0aExlbiAtIDEpID09
PSAiLyIpIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHBhdGhM
ZW4gLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgaXNTbGFzaERyb3BwZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBwYXRoLmxl
bmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZXMgPSByZWNvZ25p
emVDaGFyKHN0YXRlcywgcGF0aC5jaGFyQXQoaSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0YXRlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
RU5EIERFQlVHIEdST1VQCi0KLSAgICAgICAgICAgICAgICB2YXIgc29sdXRpb25zID0gW107Ci0g
ICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlc1tpXS5oYW5kbGVycykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc29sdXRpb25zLnB1c2goc3RhdGVzW2ldKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YXRlcyA9
IHNvcnRTb2x1dGlvbnMoc29sdXRpb25zKTsKLQotICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9
IHNvbHV0aW9uc1swXTsKLQotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5oYW5k
bGVycykgewotICAgICAgICAgICAgICAgICAgICAvLyBpZiBhIHRyYWlsaW5nIHNsYXNoIHdhcyBk
cm9wcGVkIGFuZCBhIHN0YXIgc2VnbWVudCBpcyB0aGUgbGFzdCBzZWdtZW50Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHNwZWNpZmllZCwgcHV0IHRoZSB0cmFpbGluZyBzbGFzaCBiYWNrCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc1NsYXNoRHJvcHBlZCAmJiBzdGF0ZS5yZWdleC5zb3VyY2Uu
c2xpY2UoLTUpID09PSAiKC4rKSQiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0g
cGF0aCArICIvIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmluZEhhbmRsZXIoc3RhdGUsIHBhdGgsIHF1ZXJ5UGFyYW1zKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX19leHBvcnRzX19b
ImRlZmF1bHQiXSA9IFJvdXRlUmVjb2duaXplcjsKLQotICAgICAgICBmdW5jdGlvbiBUYXJnZXQo
cGF0aCwgbWF0Y2hlciwgZGVsZWdhdGUpIHsKLSAgICAgICAgICAgIHRoaXMucGF0aCA9IHBhdGg7
Ci0gICAgICAgICAgICB0aGlzLm1hdGNoZXIgPSBtYXRjaGVyOwotICAgICAgICAgICAgdGhpcy5k
ZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgVGFyZ2V0LnByb3RvdHlw
ZSA9IHsKLSAgICAgICAgICAgIHRvOiBmdW5jdGlvbih0YXJnZXQsIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGRlbGVnYXRlID0gdGhpcy5kZWxlZ2F0ZTsKLQotICAgICAgICAgICAg
ICAgIGlmIChkZWxlZ2F0ZSAmJiBkZWxlZ2F0ZS53aWxsQWRkUm91dGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdGUud2lsbEFkZFJvdXRlKHRoaXMubWF0Y2hlci50YXJn
ZXQsIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5t
YXRjaGVyLmFkZCh0aGlzLnBhdGgsIHRhcmdldCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2Fs
bGJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCA9PT0gMCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBoYXZl
IGFuIGFyZ3VtZW50IGluIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYHRvYCIpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlci5hZGRDaGlsZCh0
aGlzLnBhdGgsIHRhcmdldCwgY2FsbGJhY2ssIHRoaXMuZGVsZWdhdGUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBNYXRjaGVyKHRhcmdldCkgewotICAgICAgICAgICAg
dGhpcy5yb3V0ZXMgPSB7fTsKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSB7fTsKLSAgICAg
ICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgTWF0Y2hl
ci5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKHBhdGgsIGhhbmRsZXIp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnJvdXRlc1twYXRoXSA9IGhhbmRsZXI7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBhZGRDaGlsZDogZnVuY3Rpb24ocGF0aCwgdGFyZ2V0LCBj
YWxsYmFjaywgZGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBN
YXRjaGVyKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltwYXRoXSA9IG1h
dGNoZXI7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBnZW5lcmF0ZU1hdGNoKHBhdGgs
IG1hdGNoZXIsIGRlbGVnYXRlKTsKLQotICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSAmJiBk
ZWxlZ2F0ZS5jb250ZXh0RW50ZXJlZCkgewotICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5j
b250ZXh0RW50ZXJlZCh0YXJnZXQsIG1hdGNoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayhtYXRjaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVNYXRjaChzdGFydGluZ1BhdGgsIG1hdGNoZXIsIGRl
bGVnYXRlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCwgbmVzdGVkQ2FsbGJh
Y2spIHsKLSAgICAgICAgICAgICAgICB2YXIgZnVsbFBhdGggPSBzdGFydGluZ1BhdGggKyBwYXRo
OwotCi0gICAgICAgICAgICAgICAgaWYgKG5lc3RlZENhbGxiYWNrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lc3RlZENhbGxiYWNrKGdlbmVyYXRlTWF0Y2goZnVsbFBhdGgsIG1hdGNoZXIsIGRl
bGVnYXRlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBUYXJnZXQoc3RhcnRpbmdQYXRoICsgcGF0aCwgbWF0Y2hlciwgZGVsZWdhdGUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBhZGRSb3V0ZShyb3V0ZUFycmF5LCBwYXRoLCBoYW5kbGVyKSB7Ci0gICAgICAg
ICAgICB2YXIgbGVuID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcm91dGVB
cnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBsZW4gKz0gcm91dGVB
cnJheVtpXS5wYXRoLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGF0aCA9
IHBhdGguc3Vic3RyKGxlbik7Ci0gICAgICAgICAgICB2YXIgcm91dGUgPSB7Ci0gICAgICAgICAg
ICAgICAgcGF0aDogcGF0aCwKLSAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyIAotICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIHJvdXRlQXJyYXkucHVzaChyb3V0ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBlYWNoUm91dGUoYmFzZVJvdXRlLCBtYXRjaGVyLCBjYWxs
YmFjaywgYmluZGluZykgewotICAgICAgICAgICAgdmFyIHJvdXRlcyA9IG1hdGNoZXIucm91dGVz
OwotCi0gICAgICAgICAgICBmb3IgKHZhciBwYXRoIGluIHJvdXRlcykgewotICAgICAgICAgICAg
ICAgIGlmIChyb3V0ZXMuaGFzT3duUHJvcGVydHkocGF0aCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHJvdXRlQXJyYXkgPSBiYXNlUm91dGUuc2xpY2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkUm91dGUocm91dGVBcnJheSwgcGF0aCwgcm91dGVzW3BhdGhdKTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hlci5jaGlsZHJlbltwYXRoXSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZWFjaFJvdXRlKHJvdXRlQXJyYXksIG1hdGNoZXIuY2hpbGRyZW5bcGF0aF0sIGNh
bGxiYWNrLCBiaW5kaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZywgcm91dGVBcnJheSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBSb3V0ZVJlY29nbml6ZXIucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9u
KGNhbGxiYWNrLCBhZGRSb3V0ZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hlciA9
IG5ldyBNYXRjaGVyKCk7Ci0KLSAgICAgICAgICAgIGNhbGxiYWNrKGdlbmVyYXRlTWF0Y2goIiIs
IG1hdGNoZXIsIHRoaXMuZGVsZWdhdGUpKTsKLQotICAgICAgICAgICAgZWFjaFJvdXRlKFtdLCBt
YXRjaGVyLCBmdW5jdGlvbihyb3V0ZSkgewotICAgICAgICAgICAgICAgIGlmIChhZGRSb3V0ZUNh
bGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFJvdXRlQ2FsbGJhY2sodGhpcywgcm91
dGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
YWRkKHJvdXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCB0aGlzKTsKLSAg
ICAgICAgfTsKLSAgICB9KTsKLQotICAgIGRlZmluZSgicm91dGVyL2hhbmRsZXItaW5mbyIsCi0g
ICAgWyIuL3V0aWxzIiwgInJzdnAvcHJvbWlzZSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24o
X19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIGJpbmQgPSBfX2RlcGVuZGVuY3kxX18uYmluZDsK
LSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5MV9fLm1lcmdlOwotICAgICAgICB2YXIg
c2VyaWFsaXplID0gX19kZXBlbmRlbmN5MV9fLnNlcmlhbGl6ZTsKLSAgICAgICAgdmFyIHByb21p
c2VMYWJlbCA9IF9fZGVwZW5kZW5jeTFfXy5wcm9taXNlTGFiZWw7Ci0gICAgICAgIHZhciBQcm9t
aXNlID0gX19kZXBlbmRlbmN5Ml9fWyJkZWZhdWx0Il07Ci0KLSAgICAgICAgZnVuY3Rpb24gSGFu
ZGxlckluZm8oX3Byb3BzKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcHMgPSBfcHJvcHMgfHwge307
Ci0gICAgICAgICAgICBtZXJnZSh0aGlzLCBwcm9wcyk7Ci0gICAgICAgICAgICB0aGlzLmluaXRp
YWxpemUocHJvcHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgSGFuZGxlckluZm8ucHJvdG90eXBl
ID0gewotICAgICAgICAgICAgbmFtZTogbnVsbCwKLSAgICAgICAgICAgIGhhbmRsZXI6IG51bGws
Ci0gICAgICAgICAgICBwYXJhbXM6IG51bGwsCi0gICAgICAgICAgICBjb250ZXh0OiBudWxsLAot
Ci0gICAgICAgICAgICAvLyBJbmplY3RlZCBieSB0aGUgaGFuZGxlciBpbmZvIGZhY3RvcnkuCi0g
ICAgICAgICAgICBmYWN0b3J5OiBudWxsLAotCi0gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5j
dGlvbigpIHt9LAotCi0gICAgICAgICAgICBsb2c6IGZ1bmN0aW9uKHBheWxvYWQsIG1lc3NhZ2Up
IHsKLSAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5sb2cpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC5sb2codGhpcy5uYW1lICsgJzogJyArIG1lc3NhZ2UpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHByb21pc2VMYWJlbDogZnVuY3Rp
b24obGFiZWwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUxhYmVsKCInIiArIHRo
aXMubmFtZSArICInICIgKyBsYWJlbCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBn
ZXRVbnJlc29sdmVkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zIHx8IHt9OwotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24oc2hvdWxkQ29udGludWUsIHBheWxvYWQp
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2hlY2tGb3JBYm9ydCA9IGJpbmQodGhpcywgdGhpcy5j
aGVja0ZvckFib3J0LCBzaG91bGRDb250aW51ZSksCi0gICAgICAgICAgICAgICAgYmVmb3JlTW9k
ZWwgPSBiaW5kKHRoaXMsIHRoaXMucnVuQmVmb3JlTW9kZWxIb29rLCBwYXlsb2FkKSwKLSAgICAg
ICAgICAgICAgICBtb2RlbCA9IGJpbmQodGhpcywgdGhpcy5nZXRNb2RlbCwgcGF5bG9hZCksCi0g
ICAgICAgICAgICAgICAgYWZ0ZXJNb2RlbCA9IGJpbmQodGhpcywgdGhpcy5ydW5BZnRlck1vZGVs
SG9vaywgcGF5bG9hZCksCi0gICAgICAgICAgICAgICAgYmVjb21lUmVzb2x2ZWQgPSBiaW5kKHRo
aXMsIHRoaXMuYmVjb21lUmVzb2x2ZWQsIHBheWxvYWQpOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQsIHRoaXMucHJvbWlzZUxhYmVsKCJTdGFydCBo
YW5kbGVyIikpCi0gICAgICAgICAgICAgICAgLnRoZW4oY2hlY2tGb3JBYm9ydCwgbnVsbCwgdGhp
cy5wcm9taXNlTGFiZWwoIkNoZWNrIGZvciBhYm9ydCIpKQotICAgICAgICAgICAgICAgIC50aGVu
KGJlZm9yZU1vZGVsLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQmVmb3JlIG1vZGVsIikpCi0g
ICAgICAgICAgICAgICAgLnRoZW4oY2hlY2tGb3JBYm9ydCwgbnVsbCwgdGhpcy5wcm9taXNlTGFi
ZWwoIkNoZWNrIGlmIGFib3J0ZWQgZHVyaW5nICdiZWZvcmVNb2RlbCcgaG9vayIpKQotICAgICAg
ICAgICAgICAgIC50aGVuKG1vZGVsLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiTW9kZWwiKSkK
LSAgICAgICAgICAgICAgICAudGhlbihjaGVja0ZvckFib3J0LCBudWxsLCB0aGlzLnByb21pc2VM
YWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBpbiAnbW9kZWwnIGhvb2siKSkKLSAgICAgICAgICAgICAg
ICAudGhlbihhZnRlck1vZGVsLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQWZ0ZXIgbW9kZWwi
KSkKLSAgICAgICAgICAgICAgICAudGhlbihjaGVja0ZvckFib3J0LCBudWxsLCB0aGlzLnByb21p
c2VMYWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBpbiAnYWZ0ZXJNb2RlbCcgaG9vayIpKQotICAgICAg
ICAgICAgICAgIC50aGVuKGJlY29tZVJlc29sdmVkLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgi
QmVjb21lIHJlc29sdmVkIikpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcnVuQmVm
b3JlTW9kZWxIb29rOiBmdW5jdGlvbihwYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBh
eWxvYWQudHJpZ2dlcikgewotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnRyaWdnZXIodHJ1
ZSwgJ3dpbGxSZXNvbHZlTW9kZWwnLCBwYXlsb2FkLCB0aGlzLmhhbmRsZXIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5TaGFyZWRNb2RlbEhvb2so
cGF5bG9hZCwgJ2JlZm9yZU1vZGVsJywgW10pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgcnVuQWZ0ZXJNb2RlbEhvb2s6IGZ1bmN0aW9uKHBheWxvYWQsIHJlc29sdmVkTW9kZWwpIHsK
LSAgICAgICAgICAgICAgICAvLyBTdGFzaCB0aGUgcmVzb2x2ZWQgbW9kZWwgb24gdGhlIHBheWxv
YWQuCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXNlcnMg
dG8gc3dhcCBvdXQKLSAgICAgICAgICAgICAgICAvLyB0aGUgcmVzb2x2ZWQgbW9kZWwgaW4gYWZ0
ZXJNb2RlbC4KLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKLSAgICAgICAg
ICAgICAgICB0aGlzLnN0YXNoUmVzb2x2ZWRNb2RlbChwYXlsb2FkLCByZXNvbHZlZE1vZGVsKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1blNoYXJlZE1vZGVsSG9vayhwYXlsb2Fk
LCAnYWZ0ZXJNb2RlbCcsIFtyZXNvbHZlZE1vZGVsXSkKLSAgICAgICAgICAgICAgICAudGhlbihm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBmdWxmaWxsZWQg
dmFsdWUgcmV0dXJuZWQgZnJvbSBhZnRlck1vZGVsLgotICAgICAgICAgICAgICAgICAgICAvLyBS
ZXR1cm4gdGhlIHZhbHVlIHN0YXNoZWQgaW4gcmVzb2x2ZWRNb2RlbHMsIHdoaWNoCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG1pZ2h0IGhhdmUgYmVlbiBzd2FwcGVkIG91dCBpbiBhZnRlck1vZGVs
LgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5yZXNvbHZlZE1vZGVsc1tuYW1l
XTsKLSAgICAgICAgICAgICAgICB9LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiSWdub3JlIGZ1
bGZpbGxtZW50IHZhbHVlIGFuZCByZXR1cm4gbW9kZWwgdmFsdWUiKSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBydW5TaGFyZWRNb2RlbEhvb2s6IGZ1bmN0aW9uKHBheWxvYWQsIGhv
b2tOYW1lLCBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5sb2cocGF5bG9hZCwgImNhbGxp
bmcgIiArIGhvb2tOYW1lICsgIiBob29rIik7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5x
dWVyeVBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2godGhpcy5xdWVyeVBh
cmFtcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ3MucHVzaChwYXls
b2FkKTsKLQotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyOwotICAg
ICAgICAgICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGVyW2hvb2tOYW1lXSAmJiBoYW5kbGVyW2hv
b2tOYW1lXS5hcHBseShoYW5kbGVyLCBhcmdzKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgJiYgcmVzdWx0LmlzVHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUocmVzdWx0LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiUmVzb2x2ZSB2YWx1
ZSByZXR1cm5lZCBmcm9tIG9uZSBvZiB0aGUgbW9kZWwgaG9va3MiKSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAvLyBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMKLSAgICAgICAgICAg
IGdldE1vZGVsOiBudWxsLAotCi0gICAgICAgICAgICBjaGVja0ZvckFib3J0OiBmdW5jdGlvbihz
aG91bGRDb250aW51ZSwgcHJvbWlzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZShzaG91bGRDb250aW51ZSgpLCB0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sg
Zm9yIGFib3J0IikpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IGNhcmUgYWJvdXQgc2hvdWxkQ29udGludWUncyByZXNvbHZlIHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAvLyBwYXNzIGFsb25nIHRoZSBvcmlnaW5hbCB2YWx1ZSBwYXNzZWQgdG8g
dGhpcyBmbi4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VWYWx1ZTsKLSAgICAg
ICAgICAgICAgICB9LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiSWdub3JlIGZ1bGZpbGxtZW50
IHZhbHVlIGFuZCBjb250aW51ZSIpKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHN0
YXNoUmVzb2x2ZWRNb2RlbDogZnVuY3Rpb24ocGF5bG9hZCwgcmVzb2x2ZWRNb2RlbCkgewotICAg
ICAgICAgICAgICAgIHBheWxvYWQucmVzb2x2ZWRNb2RlbHMgPSBwYXlsb2FkLnJlc29sdmVkTW9k
ZWxzIHx8IHt9OwotICAgICAgICAgICAgICAgIHBheWxvYWQucmVzb2x2ZWRNb2RlbHNbdGhpcy5u
YW1lXSA9IHJlc29sdmVkTW9kZWw7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBiZWNv
bWVSZXNvbHZlZDogZnVuY3Rpb24ocGF5bG9hZCwgcmVzb2x2ZWRDb250ZXh0KSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuc2VyaWFsaXplKHJlc29sdmVkQ29udGV4dCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
LnN0YXNoUmVzb2x2ZWRNb2RlbChwYXlsb2FkLCByZXNvbHZlZENvbnRleHQpOwotICAgICAgICAg
ICAgICAgICAgICBwYXlsb2FkLnBhcmFtcyA9IHBheWxvYWQucGFyYW1zIHx8IHt9OwotICAgICAg
ICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFtc1t0aGlzLm5hbWVdID0gcGFyYW1zOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZhY3RvcnkoJ3Jlc29s
dmVkJywgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiByZXNvbHZlZENvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlcjogdGhpcy5oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFt
cwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgc2hv
dWxkU3VwZXJjZWRlOiBmdW5jdGlvbihvdGhlcikgewotICAgICAgICAgICAgICAgIC8vIFByZWZl
ciB0aGlzIG5ld2VyIGhhbmRsZXJJbmZvIG92ZXIgYG90aGVyYCBpZjoKLSAgICAgICAgICAgICAg
ICAvLyAxKSBUaGUgb3RoZXIgb25lIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAgICAgICAvLyAy
KSBUaGUgbmFtZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAvLyAzKSBUaGlzIGhhbmRs
ZXIgaGFzIGEgY29udGV4dCB0aGF0IGRvZXNuJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAvLyAg
ICB0aGUgb3RoZXIgb25lIChvciB0aGUgb3RoZXIgb25lIGRvZXNuJ3QgaGF2ZSBvbmUpLgotICAg
ICAgICAgICAgICAgIC8vIDQpIFRoaXMgaGFuZGxlciBoYXMgcGFyYW1ldGVycyB0aGF0IGRvbid0
IG1hdGNoIHRoZSBvdGhlci4KLSAgICAgICAgICAgICAgICBpZiAoIW90aGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciBjb250ZXh0c01hdGNoID0gKG90aGVyLmNvbnRleHQgPT09IHRoaXMuY29udGV4
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyLm5hbWUgIT09IHRoaXMubmFtZSB8fAot
ICAgICAgICAgICAgICAgICh0aGlzLmhhc093blByb3BlcnR5KCdjb250ZXh0JykgJiYgIWNvbnRl
eHRzTWF0Y2gpIHx8Ci0gICAgICAgICAgICAgICAgKHRoaXMuaGFzT3duUHJvcGVydHkoJ3BhcmFt
cycpICYmICFwYXJhbXNNYXRjaCh0aGlzLnBhcmFtcywgb3RoZXIucGFyYW1zKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyYW1zTWF0Y2goYSwgYikg
ewotICAgICAgICAgICAgaWYgKCghYSkgXiAoIWIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25s
eSBvbmUgaXMgbnVsbC4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgIC8vIEJvdGggbXVz
dCBiZSBudWxsLgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGFzc3VtZXMgdGhhdCBib3RoIHBhcmFtcyBoYXZl
IHRoZSBzYW1lCi0gICAgICAgICAgICAvLyBudW1iZXIgb2Yga2V5cywgYnV0IHNpbmNlIHdlJ3Jl
IGNvbXBhcmluZyB0aGUKLSAgICAgICAgICAgIC8vIHNhbWUgaGFuZGxlcnMsIHRoZXkgc2hvdWxk
LgotICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEu
aGFzT3duUHJvcGVydHkoaykgJiYgYVtrXSAhPT0gYltrXSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfX1siZGVm
YXVsdCJdID0gSGFuZGxlckluZm87Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvaGFuZGxl
ci1pbmZvL2ZhY3RvcnkiLAotICAgIFsicm91dGVyL2hhbmRsZXItaW5mby9yZXNvbHZlZC1oYW5k
bGVyLWluZm8iLCAicm91dGVyL2hhbmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5mby1i
eS1vYmplY3QiLCAicm91dGVyL2hhbmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5mby1i
eS1wYXJhbSIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2Rl
cGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVz
ZSBzdHJpY3QiOwotICAgICAgICB2YXIgUmVzb2x2ZWRIYW5kbGVySW5mbyA9IF9fZGVwZW5kZW5j
eTFfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlPYmpl
Y3QgPSBfX2RlcGVuZGVuY3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFVucmVzb2x2ZWRI
YW5kbGVySW5mb0J5UGFyYW0gPSBfX2RlcGVuZGVuY3kzX19bImRlZmF1bHQiXTsKLQotICAgICAg
ICBoYW5kbGVySW5mb0ZhY3Rvcnkua2xhc3NlcyA9IHsKLSAgICAgICAgICAgIHJlc29sdmVkOiBS
ZXNvbHZlZEhhbmRsZXJJbmZvLAotICAgICAgICAgICAgcGFyYW06IFVucmVzb2x2ZWRIYW5kbGVy
SW5mb0J5UGFyYW0sCi0gICAgICAgICAgICBvYmplY3Q6IFVucmVzb2x2ZWRIYW5kbGVySW5mb0J5
T2JqZWN0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gaGFuZGxlckluZm9GYWN0b3J5
KG5hbWUsIHByb3BzKSB7Ci0gICAgICAgICAgICB2YXIgQ3RvciA9IGhhbmRsZXJJbmZvRmFjdG9y
eS5rbGFzc2VzW25hbWVdLAotICAgICAgICAgICAgaGFuZGxlckluZm8gPSBuZXcgQ3Rvcihwcm9w
cyB8fCB7fSk7Ci0gICAgICAgICAgICBoYW5kbGVySW5mby5mYWN0b3J5ID0gaGFuZGxlckluZm9G
YWN0b3J5OwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJJbmZvOwotICAgICAgICB9Ci0KLSAg
ICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IGhhbmRsZXJJbmZvRmFjdG9yeTsKLSAgICB9
KTsKLSAgICBkZWZpbmUoInJvdXRlci9oYW5kbGVyLWluZm8vcmVzb2x2ZWQtaGFuZGxlci1pbmZv
IiwKLSAgICBbIi4uL2hhbmRsZXItaW5mbyIsICJyb3V0ZXIvdXRpbHMiLCAicnN2cC9wcm9taXNl
IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5j
eTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBIYW5kbGVySW5mbyA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgc3ViY2xhc3MgPSBfX2RlcGVuZGVuY3kyX18uc3ViY2xhc3M7Ci0gICAg
ICAgIHZhciBwcm9taXNlTGFiZWwgPSBfX2RlcGVuZGVuY3kyX18ucHJvbWlzZUxhYmVsOwotICAg
ICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotCi0gICAgICAg
IHZhciBSZXNvbHZlZEhhbmRsZXJJbmZvID0gc3ViY2xhc3MoSGFuZGxlckluZm8sIHsKLSAgICAg
ICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHNob3VsZENvbnRpbnVlLCBwYXlsb2FkKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gQSBSZXNvbHZlZEhhbmRsZXJJbmZvIGp1c3QgcmVzb2x2ZWQgd2l0aCBp
dHNlbGYuCi0gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5yZXNvbHZlZE1v
ZGVscykgewotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnJlc29sdmVkTW9kZWxzW3RoaXMu
bmFtZV0gPSB0aGlzLmNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcywgdGhpcy5wcm9taXNlTGFiZWwoIlJlc29sdmUi
KSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBnZXRVbnJlc29sdmVkOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mYWN0b3J5KCdwYXJhbScsIHsKLSAg
ICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLAotICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyOiB0aGlzLmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5w
YXJhbXMKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IGlzUmVzb2x2ZWQ6IHRydWUKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRl
ZmF1bHQiXSA9IFJlc29sdmVkSGFuZGxlckluZm87Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0
ZXIvaGFuZGxlci1pbmZvL3VucmVzb2x2ZWQtaGFuZGxlci1pbmZvLWJ5LW9iamVjdCIsCi0gICAg
WyIuLi9oYW5kbGVyLWluZm8iLCAicm91dGVyL3V0aWxzIiwgInJzdnAvcHJvbWlzZSIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgInVzZSBzdHJpY3QiOwotICAg
ICAgICB2YXIgSGFuZGxlckluZm8gPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAg
ICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5Ml9fLm1lcmdlOwotICAgICAgICB2YXIgc3ViY2xh
c3MgPSBfX2RlcGVuZGVuY3kyX18uc3ViY2xhc3M7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwg
PSBfX2RlcGVuZGVuY3kyX18ucHJvbWlzZUxhYmVsOwotICAgICAgICB2YXIgaXNQYXJhbSA9IF9f
ZGVwZW5kZW5jeTJfXy5pc1BhcmFtOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5j
eTNfX1siZGVmYXVsdCJdOwotCi0gICAgICAgIHZhciBVbnJlc29sdmVkSGFuZGxlckluZm9CeU9i
amVjdCA9IHN1YmNsYXNzKEhhbmRsZXJJbmZvLCB7Ci0gICAgICAgICAgICBnZXRNb2RlbDogZnVu
Y3Rpb24ocGF5bG9hZCkgewotICAgICAgICAgICAgICAgIHRoaXMubG9nKHBheWxvYWQsIHRoaXMu
bmFtZSArICI6IHJlc29sdmluZyBwcm92aWRlZCBtb2RlbCIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb250ZXh0KTsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKHByb3BzKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5uYW1lcyA9IHByb3BzLm5hbWVzIHx8IFtdOwotICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dCA9IHByb3BzLmNvbnRleHQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICAgICAgICBTZXJp
YWxpemVzIGEgaGFuZGxlciB1c2luZyBpdHMgY3VzdG9tIGBzZXJpYWxpemVgIG1ldGhvZCBvcgot
ICAgICAgICAgICAgICAgICAgICBieSBhIGRlZmF1bHQgdGhhdCBsb29rcyB1cCB0aGUgZXhwZWN0
ZWQgcHJvcGVydHkgbmFtZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgIHRoZSBkeW5hbWljIHNl
Z21lbnQuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG1vZGVsIHRoZSBt
b2RlbCB0byBiZSBzZXJpYWxpemVkIGZvciB0aGlzIGhhbmRsZXIKLSAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKF9tb2RlbCkgewotICAgICAgICAg
ICAgICAgIHZhciBtb2RlbCA9IF9tb2RlbCB8fCB0aGlzLmNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgbmFtZXMgPSB0aGlzLm5hbWVzLAotICAgICAgICAgICAgICAgIGhhbmRsZXIgPSB0aGlzLmhh
bmRsZXI7Ci0KLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge307Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzUGFyYW0obW9kZWwpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdFtuYW1l
c1swXV0gPSBtb2RlbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgY3VzdG9tIHNlcmlhbGl6ZSBp
ZiBpdCBleGlzdHMuCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuc2VyaWFsaXplKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLnNlcmlhbGl6ZShtb2RlbCwgbmFtZXMp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChuYW1lcy5sZW5ndGgg
IT09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmFtZXNbMF07Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoL19pZCQvLnRlc3QobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0W25h
bWVdID0gbW9kZWwuaWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0W25hbWVdID0gbW9kZWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBVbnJlc29sdmVkSGFuZGxlckluZm9CeU9iamVj
dDsKLSAgICB9KTsKLSAgICBkZWZpbmUoInJvdXRlci9oYW5kbGVyLWluZm8vdW5yZXNvbHZlZC1o
YW5kbGVyLWluZm8tYnktcGFyYW0iLAotICAgIFsiLi4vaGFuZGxlci1pbmZvIiwgInJvdXRlci91
dGlscyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVu
ZGVuY3kyX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAg
dmFyIEhhbmRsZXJJbmZvID0gX19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZh
ciBtZXJnZSA9IF9fZGVwZW5kZW5jeTJfXy5tZXJnZTsKLSAgICAgICAgdmFyIHN1YmNsYXNzID0g
X19kZXBlbmRlbmN5Ml9fLnN1YmNsYXNzOwotICAgICAgICB2YXIgcHJvbWlzZUxhYmVsID0gX19k
ZXBlbmRlbmN5Ml9fLnByb21pc2VMYWJlbDsKLQotICAgICAgICAvLyBHZW5lcmF0ZWQgYnkgVVJM
IHRyYW5zaXRpb25zIGFuZCBub24tZHluYW1pYyByb3V0ZSBzZWdtZW50cyBpbiBuYW1lZCBUcmFu
c2l0aW9ucy4KLSAgICAgICAgdmFyIFVucmVzb2x2ZWRIYW5kbGVySW5mb0J5UGFyYW0gPSBzdWJj
bGFzcyAoSGFuZGxlckluZm8sIHsKLSAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKHBy
b3BzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwcm9wcy5wYXJhbXMgfHwge307
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBnZXRNb2RlbDogZnVuY3Rpb24ocGF5bG9h
ZCkgewotICAgICAgICAgICAgICAgIHZhciBmdWxsUGFyYW1zID0gdGhpcy5wYXJhbXM7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5xdWVyeVBhcmFtcykgewotICAgICAg
ICAgICAgICAgICAgICBmdWxsUGFyYW1zID0ge307Ci0gICAgICAgICAgICAgICAgICAgIG1lcmdl
KGZ1bGxQYXJhbXMsIHRoaXMucGFyYW1zKTsKLSAgICAgICAgICAgICAgICAgICAgZnVsbFBhcmFt
cy5xdWVyeVBhcmFtcyA9IHBheWxvYWQucXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdHlwZW9mIHRoaXMuaGFuZGxlci5kZXNl
cmlhbGl6ZSA9PT0gJ2Z1bmN0aW9uJyA/Ci0gICAgICAgICAgICAgICAgJ2Rlc2VyaWFsaXplJyA6
ICdtb2RlbCc7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydW5TaGFyZWRNb2RlbEhv
b2socGF5bG9hZCwgaG9va05hbWUsIFtmdWxsUGFyYW1zXSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBVbnJlc29sdmVkSGFu
ZGxlckluZm9CeVBhcmFtOwotICAgIH0pOwotICAgIGRlZmluZSgicm91dGVyL3JvdXRlciIsCi0g
ICAgWyJyb3V0ZS1yZWNvZ25pemVyIiwgInJzdnAvcHJvbWlzZSIsICIuL3V0aWxzIiwgIi4vdHJh
bnNpdGlvbi1zdGF0ZSIsICIuL3RyYW5zaXRpb24iLCAiLi90cmFuc2l0aW9uLWludGVudC9uYW1l
ZC10cmFuc2l0aW9uLWludGVudCIsICIuL3RyYW5zaXRpb24taW50ZW50L3VybC10cmFuc2l0aW9u
LWludGVudCIsICIuL2hhbmRsZXItaW5mbyIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18sIF9fZGVwZW5kZW5jeTZfXywgX19kZXBlbmRlbmN5N19f
LCBfX2RlcGVuZGVuY3k4X18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsK
LSAgICAgICAgdmFyIFJvdXRlUmVjb2duaXplciA9IF9fZGVwZW5kZW5jeTFfX1siZGVmYXVsdCJd
OwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAg
ICAgICB2YXIgdHJpZ2dlciA9IF9fZGVwZW5kZW5jeTNfXy50cmlnZ2VyOwotICAgICAgICB2YXIg
bG9nID0gX19kZXBlbmRlbmN5M19fLmxvZzsKLSAgICAgICAgdmFyIHNsaWNlID0gX19kZXBlbmRl
bmN5M19fLnNsaWNlOwotICAgICAgICB2YXIgZm9yRWFjaCA9IF9fZGVwZW5kZW5jeTNfXy5mb3JF
YWNoOwotICAgICAgICB2YXIgbWVyZ2UgPSBfX2RlcGVuZGVuY3kzX18ubWVyZ2U7Ci0gICAgICAg
IHZhciBzZXJpYWxpemUgPSBfX2RlcGVuZGVuY3kzX18uc2VyaWFsaXplOwotICAgICAgICB2YXIg
ZXh0cmFjdFF1ZXJ5UGFyYW1zID0gX19kZXBlbmRlbmN5M19fLmV4dHJhY3RRdWVyeVBhcmFtczsK
LSAgICAgICAgdmFyIGdldENoYW5nZWxpc3QgPSBfX2RlcGVuZGVuY3kzX18uZ2V0Q2hhbmdlbGlz
dDsKLSAgICAgICAgdmFyIHByb21pc2VMYWJlbCA9IF9fZGVwZW5kZW5jeTNfXy5wcm9taXNlTGFi
ZWw7Ci0gICAgICAgIHZhciBUcmFuc2l0aW9uU3RhdGUgPSBfX2RlcGVuZGVuY3k0X19bImRlZmF1
bHQiXTsKLSAgICAgICAgdmFyIGxvZ0Fib3J0ID0gX19kZXBlbmRlbmN5NV9fLmxvZ0Fib3J0Owot
ICAgICAgICB2YXIgVHJhbnNpdGlvbiA9IF9fZGVwZW5kZW5jeTVfXy5UcmFuc2l0aW9uOwotICAg
ICAgICB2YXIgVHJhbnNpdGlvbkFib3J0ZWQgPSBfX2RlcGVuZGVuY3k1X18uVHJhbnNpdGlvbkFi
b3J0ZWQ7Ci0gICAgICAgIHZhciBOYW1lZFRyYW5zaXRpb25JbnRlbnQgPSBfX2RlcGVuZGVuY3k2
X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFVSTFRyYW5zaXRpb25JbnRlbnQgPSBfX2RlcGVu
ZGVuY3k3X19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFJlc29sdmVkSGFuZGxlckluZm8gPSBf
X2RlcGVuZGVuY3k4X18uUmVzb2x2ZWRIYW5kbGVySW5mbzsKLQotICAgICAgICB2YXIgcG9wID0g
QXJyYXkucHJvdG90eXBlLnBvcDsKLQotICAgICAgICBmdW5jdGlvbiBSb3V0ZXIoKSB7Ci0gICAg
ICAgICAgICB0aGlzLnJlY29nbml6ZXIgPSBuZXcgUm91dGVSZWNvZ25pemVyKCk7Ci0gICAgICAg
ICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSb3V0ZXIucHJvdG90eXBl
ID0gewotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgVGhlIG1haW4gZW50
cnkgcG9pbnQgaW50byB0aGUgcm91dGVyLiBUaGUgQVBJIGlzIGVzc2VudGlhbGx5Ci0gICAgICAg
ICAgICAgICAgICAgIHRoZSBzYW1lIGFzIHRoZSBgbWFwYCBtZXRob2QgaW4gYHJvdXRlLXJlY29n
bml6ZXJgLgotCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGV4dHJhY3RzIHRoZSBT
dHJpbmcgaGFuZGxlciBhdCB0aGUgbGFzdCBgLnRvKClgCi0gICAgICAgICAgICAgICAgICAgIGNh
bGwgYW5kIHVzZXMgaXQgYXMgdGhlIG5hbWUgb2YgdGhlIHdob2xlIHJvdXRlLgotCi0gICAgICAg
ICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgbWFwOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAgICAgICAgICAg
ICAgIHRoaXMucmVjb2duaXplci5kZWxlZ2F0ZSA9IHRoaXMuZGVsZWdhdGU7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLnJlY29nbml6ZXIubWFwKGNhbGxiYWNrLCBmdW5jdGlvbihyZWNvZ25pemVy
LCByb3V0ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJvdXRlcy5sZW5n
dGggLSAxLCBwcm9jZWVkID0gdHJ1ZTsgaSA+PSAwICYmIHByb2NlZWQ7IC0taSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHJvdXRlID0gcm91dGVzW2ldOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVjb2duaXplci5hZGQocm91dGVzLCB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXM6IHJvdXRlLmhhbmRsZXIgCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2NlZWQgPSByb3V0ZS5wYXRoID09PSAnLycgfHwgcm91
dGUucGF0aCA9PT0gJycgfHwgcm91dGUuaGFuZGxlci5zbGljZSgtNikgPT09ICcuaW5kZXgnOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICBoYXNSb3V0ZTogZnVuY3Rpb24ocm91dGUpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5yZWNvZ25pemVyLmhhc1JvdXRlKHJvdXRlKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIHF1ZXJ5UGFyYW1zVHJhbnNpdGlvbjogZnVuY3Rpb24oY2hhbmdl
bGlzdCwgd2FzVHJhbnNpdGlvbmluZywgb2xkU3RhdGUsIG5ld1N0YXRlKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHJvdXRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBmaXJlUXVlcnlQYXJh
bURpZENoYW5nZSh0aGlzLCBuZXdTdGF0ZSwgY2hhbmdlbGlzdCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIXdhc1RyYW5zaXRpb25pbmcgJiYgdGhpcy5hY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0aGUgaGFuZGxlcnMgaW4gcXVlcnlQYXJhbXNEaWRD
aGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2VkIGEgdHJhbnNpdGlvbi4gSnVzdCBy
ZXR1cm4gdGhhdCB0cmFuc2l0aW9uLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5h
Y3RpdmVUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFJ1bm5pbmcgcXVlcnlQYXJhbXNEaWRDaGFuZ2UgZGlkbid0IGNoYW5nZSBhbnl0
aGluZy4KLSAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCB1cGRhdGUgcXVlcnkgcGFyYW1zIGFu
ZCBiZSBvbiBvdXIgd2F5LgotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcmV0
dXJuIGEgbm9vcCB0cmFuc2l0aW9uIHRoYXQgd2lsbAotICAgICAgICAgICAgICAgICAgICAvLyBw
ZXJmb3JtIGEgVVJMIHVwZGF0ZSBhdCB0aGUgZW5kLiBUaGlzIGdpdmVzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSB1c2VyIHRoZSBhYmlsaXR5IHRvIHNldCB0aGUgdXJsIHVwZGF0ZQotICAg
ICAgICAgICAgICAgICAgICAvLyBtZXRob2QgKGRlZmF1bHQgaXMgcmVwbGFjZVN0YXRlKS4KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG5ld1RyYW5zaXRpb24gPSBuZXcgVHJhbnNpdGlvbih0aGlz
KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3VHJhbnNpdGlvbi5xdWVyeVBhcmFtc09ubHkgPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIG9sZFN0YXRlLnF1ZXJ5UGFyYW1zID0gZmluYWxp
emVRdWVyeVBhcmFtQ2hhbmdlKHRoaXMsIG5ld1N0YXRlLmhhbmRsZXJJbmZvcywgbmV3U3RhdGUu
cXVlcnlQYXJhbXMsIG5ld1RyYW5zaXRpb24pOwotCi0gICAgICAgICAgICAgICAgICAgIG5ld1Ry
YW5zaXRpb24ucHJvbWlzZSA9IG5ld1RyYW5zaXRpb24ucHJvbWlzZS50aGVuKGZ1bmN0aW9uKHJl
c3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVVJMKG5ld1RyYW5zaXRpb24s
IG9sZFN0YXRlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZXIuZGlk
VHJhbnNpdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlci5kaWRUcmFu
c2l0aW9uKHJvdXRlci5jdXJyZW50SGFuZGxlckluZm9zKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0sIG51bGwsIHByb21pc2VMYWJlbCgiVHJhbnNpdGlvbiBjb21wbGV0ZSIpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RyYW5zaXRpb247Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8gTk9URTogdGhpcyBkb2Vzbid0
IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IGhlcmUKLSAgICAgICAgICAgIC8vIGl0IHNoYWxsIHJl
bWFpbiB1bnRpbCBvdXIgRVM2IHRyYW5zcGlsZXIgY2FuCi0gICAgICAgICAgICAvLyBoYW5kbGUg
Y3ljbGljYWwgZGVwcy4KLSAgICAgICAgICAgIHRyYW5zaXRpb25CeUludGVudDogZnVuY3Rpb24o
aW50ZW50LCBpc0ludGVybWVkaWF0ZSkgewotCi0gICAgICAgICAgICAgICAgdmFyIHdhc1RyYW5z
aXRpb25pbmcgPSAhIXRoaXMuYWN0aXZlVHJhbnNpdGlvbjsKLSAgICAgICAgICAgICAgICB2YXIg
b2xkU3RhdGUgPSB3YXNUcmFuc2l0aW9uaW5nID8gdGhpcy5hY3RpdmVUcmFuc2l0aW9uLnN0YXRl
IDogdGhpcy5zdGF0ZTsKLSAgICAgICAgICAgICAgICB2YXIgbmV3VHJhbnNpdGlvbjsKLSAgICAg
ICAgICAgICAgICB2YXIgcm91dGVyID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IGludGVudC5hcHBseVRvU3RhdGUob2xk
U3RhdGUsIHRoaXMucmVjb2duaXplciwgdGhpcy5nZXRIYW5kbGVyLCBpc0ludGVybWVkaWF0ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVBhcmFtQ2hhbmdlbGlzdCA9IGdldENoYW5n
ZWxpc3Qob2xkU3RhdGUucXVlcnlQYXJhbXMsIG5ld1N0YXRlLnF1ZXJ5UGFyYW1zKTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckluZm9zRXF1YWwobmV3U3RhdGUuaGFuZGxlcklu
Zm9zLCBvbGRTdGF0ZS5oYW5kbGVySW5mb3MpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYSBuby1vcCB0cmFuc2l0aW9uLiBTZWUgaWYgcXVlcnkgcGFyYW1zIGNoYW5n
ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbUNoYW5nZWxpc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUcmFuc2l0aW9uID0gdGhpcy5xdWVyeVBh
cmFtc1RyYW5zaXRpb24ocXVlcnlQYXJhbUNoYW5nZWxpc3QsIHdhc1RyYW5zaXRpb25pbmcsIG9s
ZFN0YXRlLCBuZXdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Ry
YW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1Ry
YW5zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOby1vcC4gTm8gbmVlZCB0
byBjcmVhdGUgYSBuZXcgdHJhbnNpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgVHJhbnNpdGlvbih0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc0ludGVybWVkaWF0ZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0dXBDb250ZXh0cyh0aGlzLCBuZXdTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyBDcmVhdGUgYSBuZXcgdHJhbnNpdGlvbiB0byB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0gICAg
ICAgICAgICAgICAgICAgIG5ld1RyYW5zaXRpb24gPSBuZXcgVHJhbnNpdGlvbih0aGlzLCBpbnRl
bnQsIG5ld1N0YXRlKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCBhbmQgdXN1cnAg
YW55IHByZXZpb3VzbHkgYWN0aXZlIHRyYW5zaXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmFjdGl2ZVRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
YWN0aXZlVHJhbnNpdGlvbi5hYm9ydCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuYWN0aXZlVHJhbnNpdGlvbiA9IG5ld1RyYW5zaXRpb247Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBwcm9taXNlcyBieSBkZWZhdWx0IHJlc29s
dmUgd2l0aCByZXNvbHZlZCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG91ciBw
dXJwb3Nlcywgc3dhcCBvdXQgdGhlIHByb21pc2UgdG8gcmVzb2x2ZQotICAgICAgICAgICAgICAg
ICAgICAvLyBhZnRlciB0aGUgdHJhbnNpdGlvbiBoYXMgYmVlbiBmaW5hbGl6ZWQuCi0gICAgICAg
ICAgICAgICAgICAgIG5ld1RyYW5zaXRpb24ucHJvbWlzZSA9IG5ld1RyYW5zaXRpb24ucHJvbWlz
ZS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZpbmFsaXplVHJhbnNpdGlvbihuZXdUcmFuc2l0aW9uLCByZXN1bHQuc3RhdGUpOwotICAgICAg
ICAgICAgICAgICAgICB9LCBudWxsLCBwcm9taXNlTGFiZWwoIlNldHRsZSB0cmFuc2l0aW9uIHBy
b21pc2Ugd2hlbiB0cmFuc2l0aW9uIGlzIGZpbmFsaXplZCIpKTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXdhc1RyYW5zaXRpb25pbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
dGlmeUV4aXN0aW5nSGFuZGxlcnModGhpcywgbmV3U3RhdGUsIG5ld1RyYW5zaXRpb24pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmlyZVF1ZXJ5UGFyYW1E
aWRDaGFuZ2UodGhpcywgbmV3U3RhdGUsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0KTsKLQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3VHJhbnNpdGlvbjsKLSAgICAgICAgICAgICAgICB9IGNh
dGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbih0aGlz
LCBpbnRlbnQsIG51bGwsIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBDbGVhcnMgdGhlIGN1cnJlbnQg
YW5kIHRhcmdldCByb3V0ZSBoYW5kbGVycyBhbmQgdHJpZ2dlcnMgZXhpdAotICAgICAgICAgICAg
ICAgICAgICBvbiBlYWNoIG9mIHRoZW0gc3RhcnRpbmcgYXQgdGhlIGxlYWYgYW5kIHRyYXZlcnNp
bmcgdXAgdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICBpdHMgYW5jZXN0b3JzLgotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5zdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKHRo
aXMuc3RhdGUuaGFuZGxlckluZm9zLCBmdW5jdGlvbihoYW5kbGVySW5mbykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuZXhpdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXIuZXhpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB0aGlzLnN0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpOwotICAgICAgICAgICAgICAgIHRo
aXMuY3VycmVudEhhbmRsZXJJbmZvcyA9IG51bGw7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBhY3RpdmVUcmFuc2l0aW9uOiBudWxsLAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotICAgICAgICAg
ICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGEgY2hhbmdlIHRvIHRoZSBV
UkwgKHVzdWFsbHkKLSAgICAgICAgICAgICAgICAgICAgdmlhIHRoZSBiYWNrIGFuZCBmb3J3YXJk
IGJ1dHRvbikuCi0KLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBhbiBBcnJheSBvZiBoYW5k
bGVycyBhbmQgdGhlIHBhcmFtZXRlcnMgYXNzb2NpYXRlZAotICAgICAgICAgICAgICAgICAgICB3
aXRoIHRob3NlIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJp
bmd9IHVybCBhIFVSTCB0byBwcm9jZXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHJldHVybiB7
QXJyYXl9IGFuIEFycmF5IG9mIGBbaGFuZGxlciwgcGFyYW1ldGVyXWAgdHVwbGVzCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgaGFuZGxlVVJMOiBmdW5jdGlvbih1cmwpIHsKLSAg
ICAgICAgICAgICAgICAvLyBQZXJmb3JtIGEgVVJMLWJhc2VkIHRyYW5zaXRpb24sIGJ1dCBkb24n
dCBjaGFuZ2UKLSAgICAgICAgICAgICAgICAvLyB0aGUgVVJMIGFmdGVyd2FyZCwgc2luY2UgaXQg
YWxyZWFkeSBoYXBwZW5lZC4KLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwo
YXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBpZiAodXJsLmNoYXJBdCgwKSAhPT0gJy8nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSAnLycgKyB1cmw7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRvVHJhbnNpdGlvbih0aGlzLCBhcmdzKS5t
ZXRob2QobnVsbCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAg
ICAgICAgICAgICAgSG9vayBwb2ludCBmb3IgdXBkYXRpbmcgdGhlIFVSTC4KLQotICAgICAgICAg
ICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gdXJsIGEgVVJMIHRvIHVwZGF0ZSB0bwotICAgICAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHVwZGF0ZVVSTDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVVUkwgaXMgbm90IGltcGxlbWVudGVk
Iik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAg
ICAgSG9vayBwb2ludCBmb3IgcmVwbGFjaW5nIHRoZSBjdXJyZW50IFVSTCwgaS5lLiB3aXRoIHJl
cGxhY2VTdGF0ZQotCi0gICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhpcyBiZWhhdmVz
IHRoZSBzYW1lIGFzIGB1cGRhdGVVUkxgCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IHVybCBhIFVSTCB0byB1cGRhdGUgdG8KLSAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICByZXBsYWNlVVJMOiBmdW5jdGlvbih1cmwpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LnVwZGF0ZVVSTCh1cmwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIFRyYW5zaXRpb24gaW50byB0aGUgc3BlY2lmaWVkIG5hbWVkIHJvdXRl
LgotCi0gICAgICAgICAgICAgICAgICAgIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciB0aGUgZXhpdCBj
YWxsYmFjayBvbiBhbnkgaGFuZGxlcnMKLSAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm8g
bG9uZ2VyIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgcm91dGUuCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlCi0gICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgdHJhbnNpdGlvblRvOiBmdW5jdGlvbihuYW1lKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvVHJhbnNpdGlvbih0aGlzLCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvOiBm
dW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgZG9UcmFuc2l0aW9uKHRoaXMsIGFyZ3Vt
ZW50cywgdHJ1ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICByZWZyZXNoOiBmdW5j
dGlvbihwaXZvdEhhbmRsZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLmFj
dGl2ZVRyYW5zaXRpb24gPyB0aGlzLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGUgOiB0aGlzLnN0YXRl
OwotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7
Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9OwotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4gPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9zW2ldOwotICAg
ICAgICAgICAgICAgICAgICBwYXJhbXNbaGFuZGxlckluZm8ubmFtZV0gPSBoYW5kbGVySW5mby5w
YXJhbXMgfHwge307Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbG9nKHRo
aXMsICJTdGFydGluZyBhIHJlZnJlc2ggdHJhbnNpdGlvbiIpOwotICAgICAgICAgICAgICAgIHZh
ciBpbnRlbnQgPSBuZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsKLSAgICAgICAgICAgICAgICAg
ICAgbmFtZTogaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lLAotICAg
ICAgICAgICAgICAgICAgICBwaXZvdEhhbmRsZXI6IHBpdm90SGFuZGxlciB8fCBoYW5kbGVySW5m
b3NbMF0uaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtdLAotICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPIGNvbGxlY3QgY29udGV4dHMuLi4/Ci0gICAgICAgICAgICAg
ICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9jaGFuZ2VkUXVlcnlQYXJhbXMgfHwgc3RhdGUucXVl
cnlQYXJhbXMgfHwge30KLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnRyYW5zaXRpb25CeUludGVudChpbnRlbnQsIGZhbHNlKTsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBJZGVudGljYWwgdG8g
YHRyYW5zaXRpb25Ub2AgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgVVJMIHdpbGwgYmUgcmVwbGFj
ZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgcG9zc2libGUuCi0KLSAgICAgICAgICAgICAgICAg
ICAgVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgcHJpbWFyaWx5IGZvciB1c2Ugd2l0aCBgcmVwbGFj
ZVN0YXRlYC4KLQotICAgICAgICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUg
bmFtZSBvZiB0aGUgcm91dGUKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXBs
YWNlV2l0aDogZnVuY3Rpb24obmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBkb1RyYW5z
aXRpb24odGhpcywgYXJndW1lbnRzKS5tZXRob2QoJ3JlcGxhY2UnKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbmFtZWQgcm91
dGUgYW5kIGNvbnRleHQgb2JqZWN0cyBhbmQgZ2VuZXJhdGUgYQotICAgICAgICAgICAgICAgICAg
ICBVUkwuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5h
bWUgb2YgdGhlIHJvdXRlIHRvIGdlbmVyYXRlCi0gICAgICAgICAgICAgICAgICAgICAgYSBVUkwg
Zm9yCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBvYmplY3RzIGEgbGlz
dCBvZiBvYmplY3RzIHRvIHNlcmlhbGl6ZQotCi0gICAgICAgICAgICAgICAgICAgIEByZXR1cm4g
e1N0cmluZ30gYSBVUkwKLSAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnZW5lcmF0
ZTogZnVuY3Rpb24oaGFuZGxlck5hbWUpIHsKLQotICAgICAgICAgICAgICAgIHZhciBwYXJ0aXRp
b25lZEFyZ3MgPSBleHRyYWN0UXVlcnlQYXJhbXMoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSwK
LSAgICAgICAgICAgICAgICBzdXBwbGllZFBhcmFtcyA9IHBhcnRpdGlvbmVkQXJnc1swXSwKLSAg
ICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHBhcnRpdGlvbmVkQXJnc1sxXTsKLQotICAgICAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCBhIFRyYW5zaXRpb25JbnRlbnQgd2l0aCB0aGUgcHJvdmlk
ZWQgcGFyYW1zCi0gICAgICAgICAgICAgICAgLy8gYW5kIGFwcGx5IGl0IHRvIHRoZSBwcmVzZW50
IHN0YXRlIG9mIHRoZSByb3V0ZXIuCi0gICAgICAgICAgICAgICAgdmFyIGludGVudCA9IG5ldyBO
YW1lZFRyYW5zaXRpb25JbnRlbnQoewotICAgICAgICAgICAgICAgICAgICBuYW1lOiBoYW5kbGVy
TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IHN1cHBsaWVkUGFyYW1zIAotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IGludGVudC5hcHBs
eVRvU3RhdGUodGhpcy5zdGF0ZSwgdGhpcy5yZWNvZ25pemVyLCB0aGlzLmdldEhhbmRsZXIpOwot
ICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTsKLQotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4gPSBzdGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbGVuOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0gc3RhdGUuaGFuZGxlcklu
Zm9zW2ldOwotICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlclBhcmFtcyA9IGhhbmRsZXJJ
bmZvLnNlcmlhbGl6ZSgpOwotICAgICAgICAgICAgICAgICAgICBtZXJnZShwYXJhbXMsIGhhbmRs
ZXJQYXJhbXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbXMucXVl
cnlQYXJhbXMgPSBxdWVyeVBhcmFtczsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJl
Y29nbml6ZXIuZ2VuZXJhdGUoaGFuZGxlck5hbWUsIHBhcmFtcyk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBhcHBseUludGVudDogZnVuY3Rpb24oaGFuZGxlck5hbWUsIGNvbnRleHRz
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGludGVudCA9IG5ldyBOYW1lZFRyYW5zaXRpb25JbnRl
bnQoewotICAgICAgICAgICAgICAgICAgICBuYW1lOiBoYW5kbGVyTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dHM6IGNvbnRleHRzCi0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLmFjdGl2ZVRyYW5zaXRpb24gJiYgdGhpcy5hY3Rp
dmVUcmFuc2l0aW9uLnN0YXRlIHx8IHRoaXMuc3RhdGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGludGVudC5hcHBseVRvU3RhdGUoc3RhdGUsIHRoaXMucmVjb2duaXplciwgdGhpcy5nZXRIYW5k
bGVyKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGlzQWN0aXZlSW50ZW50OiBmdW5j
dGlvbihoYW5kbGVyTmFtZSwgY29udGV4dHMsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRhcmdldEhhbmRsZXJJbmZvcyA9IHRoaXMuc3RhdGUuaGFuZGxlckluZm9zLAotICAg
ICAgICAgICAgICAgIGZvdW5kID0gZmFsc2UsIG5hbWVzLCBvYmplY3QsIGhhbmRsZXJJbmZvLCBo
YW5kbGVyT2JqLCBpLCBsZW47Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRhcmdldEhhbmRsZXJJ
bmZvcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB0YXJnZXRIYW5kbGVyID0gdGFyZ2V0
SGFuZGxlckluZm9zW3RhcmdldEhhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lOwotICAgICAg
ICAgICAgICAgIHZhciByZWNvZ0hhbmRsZXJzID0gdGhpcy5yZWNvZ25pemVyLmhhbmRsZXJzRm9y
KHRhcmdldEhhbmRsZXIpOwotCi0gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAg
ICAgICAgICAgICBmb3IgKGxlbiA9IHJlY29nSGFuZGxlcnMubGVuZ3RoOyBpbmRleCA8IGxlbjsg
KytpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBoYW5kbGVySW5mbyA9IHRhcmdldEhhbmRs
ZXJJbmZvc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVySW5mby5uYW1l
ID09PSBoYW5kbGVyTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPT09IHJlY29nSGFuZGxlcnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFRoZSBwcm92aWRlZCByb3V0ZSBuYW1lIGlzbid0IGV2ZW4gaW4gdGhlIHJvdXRlIGhpZXJh
cmNoeS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IG5ldyBUcmFuc2l0aW9uU3RhdGUoKTsK
LSAgICAgICAgICAgICAgICBzdGF0ZS5oYW5kbGVySW5mb3MgPSB0YXJnZXRIYW5kbGVySW5mb3Mu
c2xpY2UoMCwgaW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICByZWNvZ0hhbmRsZXJzID0gcmVj
b2dIYW5kbGVycy5zbGljZSgwLCBpbmRleCArIDEpOwotCi0gICAgICAgICAgICAgICAgdmFyIGlu
dGVudCA9IG5ldyBOYW1lZFRyYW5zaXRpb25JbnRlbnQoewotICAgICAgICAgICAgICAgICAgICBu
YW1lOiB0YXJnZXRIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBjb250ZXh0czogY29udGV4
dHMKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIHZhciBuZXdTdGF0ZSA9
IGludGVudC5hcHBseVRvSGFuZGxlcnMoc3RhdGUsIHJlY29nSGFuZGxlcnMsIHRoaXMuZ2V0SGFu
ZGxlciwgdGFyZ2V0SGFuZGxlciwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIg
aGFuZGxlcnNFcXVhbCA9IGhhbmRsZXJJbmZvc0VxdWFsKG5ld1N0YXRlLmhhbmRsZXJJbmZvcywg
c3RhdGUuaGFuZGxlckluZm9zKTsKLSAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zIHx8
ICFoYW5kbGVyc0VxdWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc0Vx
dWFsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEdldCBhIGhhc2gg
b2YgUVBzIHRoYXQgd2lsbCBzdGlsbCBiZSBhY3RpdmUgb24gbmV3IHJvdXRlCi0gICAgICAgICAg
ICAgICAgdmFyIGFjdGl2ZVFQc09uTmV3SGFuZGxlciA9IHt9OwotICAgICAgICAgICAgICAgIG1l
cmdlKGFjdGl2ZVFQc09uTmV3SGFuZGxlciwgcXVlcnlQYXJhbXMpOwotCi0gICAgICAgICAgICAg
ICAgdmFyIGFjdGl2ZVF1ZXJ5UGFyYW1zID0gdGhpcy5zdGF0ZS5xdWVyeVBhcmFtczsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYWN0aXZlUXVlcnlQYXJhbXMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZVF1ZXJ5UGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYK
LSAgICAgICAgICAgICAgICAgICAgYWN0aXZlUVBzT25OZXdIYW5kbGVyLmhhc093blByb3BlcnR5
KGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVFQc09uTmV3SGFuZGxlcltr
ZXldID0gYWN0aXZlUXVlcnlQYXJhbXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc0VxdWFsICYm
ICFnZXRDaGFuZ2VsaXN0KGFjdGl2ZVFQc09uTmV3SGFuZGxlciwgcXVlcnlQYXJhbXMpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uKGhhbmRsZXJOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnRpdGlvbmVkQXJncyA9IGV4dHJhY3RRdWVyeVBh
cmFtcyhzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmlzQWN0aXZlSW50ZW50KGhhbmRsZXJOYW1lLCBwYXJ0aXRpb25lZEFyZ3NbMF0sIHBhcnRp
dGlvbmVkQXJnc1sxXSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0cmlnZ2VyOiBm
dW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFy
Z3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLCB0aGlzLmN1cnJlbnRIYW5k
bGVySW5mb3MsIGZhbHNlLCBhcmdzKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICAgICAgICBIb29rIHBvaW50IGZvciBsb2dnaW5nIHRyYW5zaXRpb24g
c3RhdHVzIHVwZGF0ZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IG1l
c3NhZ2UgVGhlIG1lc3NhZ2UgdG8gbG9nLgotICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIGxvZzogbnVsbCwKLQotICAgICAgICAgICAgX3dpbGxDaGFuZ2VDb250ZXh0RXZlbnQ6ICd3
aWxsQ2hhbmdlQ29udGV4dCcsCi0gICAgICAgICAgICBfdHJpZ2dlcldpbGxDaGFuZ2VDb250ZXh0
OiBmdW5jdGlvbihoYW5kbGVySW5mb3MsIG5ld1RyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAg
ICB0cmlnZ2VyKHRoaXMsIGhhbmRsZXJJbmZvcywgdHJ1ZSwgW3RoaXMuX3dpbGxDaGFuZ2VDb250
ZXh0RXZlbnQsIG5ld1RyYW5zaXRpb25dKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
IF90cmlnZ2VyV2lsbExlYXZlOiBmdW5jdGlvbihoYW5kbGVySW5mb3MsIG5ld1RyYW5zaXRpb24s
IGxlYXZpbmdDaGVja2VyKSB7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcih0aGlzLCBoYW5kbGVy
SW5mb3MsIHRydWUsIFsnd2lsbExlYXZlJywgbmV3VHJhbnNpdGlvbiwgbGVhdmluZ0NoZWNrZXJd
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvKioKLSAgICAgICAgICAg
ICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBGaXJlcyBxdWVyeVBhcmFtc0RpZENoYW5nZSBl
dmVudAotICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZmlyZVF1ZXJ5UGFyYW1EaWRD
aGFuZ2Uocm91dGVyLCBuZXdTdGF0ZSwgcXVlcnlQYXJhbUNoYW5nZWxpc3QpIHsKLSAgICAgICAg
ICAgIC8vIElmIHF1ZXJ5UGFyYW1zIGNoYW5nZWQgdHJpZ2dlciBldmVudAotICAgICAgICAgICAg
aWYgKHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0KSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGEgbGl0dGxlIGhhY2t5IGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IG9mIHN0b3JpbmcKLSAgICAgICAg
ICAgICAgICAvLyBjaGFuZ2VkIHF1ZXJ5IHBhcmFtcyBnaXZlbiB0aGF0IG5vIGFjdGl2ZVRyYW5z
aXRpb24KLSAgICAgICAgICAgICAgICAvLyBpcyBndWFyYW50ZWVkIHRvIGhhdmUgb2NjdXJyZWQu
Ci0gICAgICAgICAgICAgICAgcm91dGVyLl9jaGFuZ2VkUXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFt
Q2hhbmdlbGlzdC5hbGw7Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcihyb3V0ZXIsIG5ld1N0YXRl
LmhhbmRsZXJJbmZvcywgdHJ1ZSwgWydxdWVyeVBhcmFtc0RpZENoYW5nZScsIHF1ZXJ5UGFyYW1D
aGFuZ2VsaXN0LmNoYW5nZWQsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0LmFsbCwgcXVlcnlQYXJhbUNo
YW5nZWxpc3QucmVtb3ZlZF0pOwotICAgICAgICAgICAgICAgIHJvdXRlci5fY2hhbmdlZFF1ZXJ5
UGFyYW1zID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgIFRha2VzIGFuIEFycmF5IG9m
IGBIYW5kbGVySW5mb2BzLCBmaWd1cmVzIG91dCB3aGljaCBvbmVzIGFyZQotICAgICAgICAgICAg
ICBleGl0aW5nLCBlbnRlcmluZywgb3IgY2hhbmdpbmcgY29udGV4dHMsIGFuZCBjYWxscyB0aGUK
LSAgICAgICAgICAgICAgcHJvcGVyIGhhbmRsZXIgaG9va3MuCi0KLSAgICAgICAgICAgICAgRm9y
IGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHJlZSBvZiBoYW5kbGVycy4gRWFjaCBo
YW5kbGVyIGlzCi0gICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSBVUkwgc2VnbWVudCBpdCBo
YW5kbGVzLgotCi0gICAgICAgICAgICAgIGBgYAotICAgICAgICAgICAgICB8fmluZGV4ICgiLyIp
Ci0gICAgICAgICAgICAgIHwgfH5wb3N0cyAoIi9wb3N0cyIpCi0gICAgICAgICAgICAgIHwgfCB8
LXNob3dQb3N0ICgiLzppZCIpCi0gICAgICAgICAgICAgIHwgfCB8LW5ld1Bvc3QgKCIvbmV3IikK
LSAgICAgICAgICAgICAgfCB8IHwtZWRpdFBvc3QgKCIvZWRpdCIpCi0gICAgICAgICAgICAgIHwg
fH5hYm91dCAoIi9hYm91dC86aWQiKQotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAg
ICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOgotCi0gICAgICAgICAgICAgIDEu
IEEgVVJMIHRyYW5zaXRpb24gdG8gYC9wb3N0cy8xYC4KLSAgICAgICAgICAgICAgICAgMS4gVHJp
Z2dlcnMgdGhlIGAqbW9kZWxgIGNhbGxiYWNrcyBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAg
YGluZGV4YCwgYHBvc3RzYCwgYW5kIGBzaG93UG9zdGAgaGFuZGxlcnMKLSAgICAgICAgICAgICAg
ICAgMi4gVHJpZ2dlcnMgdGhlIGBlbnRlcmAgY2FsbGJhY2sgb24gdGhlIHNhbWUKLSAgICAgICAg
ICAgICAgICAgMy4gVHJpZ2dlcnMgdGhlIGBzZXR1cGAgY2FsbGJhY2sgb24gdGhlIHNhbWUKLSAg
ICAgICAgICAgICAgMi4gQSBkaXJlY3QgdHJhbnNpdGlvbiB0byBgbmV3UG9zdGAKLSAgICAgICAg
ICAgICAgICAgMS4gVHJpZ2dlcnMgdGhlIGBleGl0YCBjYWxsYmFjayBvbiBgc2hvd1Bvc3RgCi0g
ICAgICAgICAgICAgICAgIDIuIFRyaWdnZXJzIHRoZSBgZW50ZXJgIGNhbGxiYWNrIG9uIGBuZXdQ
b3N0YAotICAgICAgICAgICAgICAgICAzLiBUcmlnZ2VycyB0aGUgYHNldHVwYCBjYWxsYmFjayBv
biBgbmV3UG9zdGAKLSAgICAgICAgICAgICAgMy4gQSBkaXJlY3QgdHJhbnNpdGlvbiB0byBgYWJv
dXRgIHdpdGggYSBzcGVjaWZpZWQKLSAgICAgICAgICAgICAgICAgY29udGV4dCBvYmplY3QKLSAg
ICAgICAgICAgICAgICAgMS4gVHJpZ2dlcnMgdGhlIGBleGl0YCBjYWxsYmFjayBvbiBgbmV3UG9z
dGAKLSAgICAgICAgICAgICAgICAgICAgYW5kIGBwb3N0c2AKLSAgICAgICAgICAgICAgICAgMi4g
VHJpZ2dlcnMgdGhlIGBzZXJpYWxpemVgIGNhbGxiYWNrIG9uIGBhYm91dGAKLSAgICAgICAgICAg
ICAgICAgMy4gVHJpZ2dlcnMgdGhlIGBlbnRlcmAgY2FsbGJhY2sgb24gYGFib3V0YAotICAgICAg
ICAgICAgICAgICA0LiBUcmlnZ2VycyB0aGUgYHNldHVwYCBjYWxsYmFjayBvbiBgYWJvdXRgCi0K
LSAgICAgICAgICAgICAgQHBhcmFtIHtSb3V0ZXJ9IHRyYW5zaXRpb24KLSAgICAgICAgICAgICAg
QHBhcmFtIHtUcmFuc2l0aW9uU3RhdGV9IG5ld1N0YXRlCi0gICAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBzZXR1cENvbnRleHRzKHJvdXRlciwgbmV3U3RhdGUsIHRyYW5zaXRpb24pIHsK
LSAgICAgICAgICAgIHZhciBwYXJ0aXRpb24gPSBwYXJ0aXRpb25IYW5kbGVycyhyb3V0ZXIuc3Rh
dGUsIG5ld1N0YXRlKTsKLQotICAgICAgICAgICAgZm9yRWFjaChwYXJ0aXRpb24uZXhpdGVkLCBm
dW5jdGlvbihoYW5kbGVySW5mbykgewotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFu
ZGxlckluZm8uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICBkZWxldGUgaGFuZGxlci5jb250ZXh0
OwotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJlc2V0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXIucmVzZXQodHJ1ZSwgdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLmV4aXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlci5leGl0KHRyYW5zaXRpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICB2YXIgb2xkU3RhdGUgPSByb3V0ZXIub2xkU3RhdGUgPSByb3V0
ZXIuc3RhdGU7Ci0gICAgICAgICAgICByb3V0ZXIuc3RhdGUgPSBuZXdTdGF0ZTsKLSAgICAgICAg
ICAgIHZhciBjdXJyZW50SGFuZGxlckluZm9zID0gcm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3Mg
PSBwYXJ0aXRpb24udW5jaGFuZ2VkLnNsaWNlKCk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgZm9yRWFjaChwYXJ0aXRpb24ucmVzZXQsIGZ1bmN0aW9uKGhhbmRsZXJJbmZv
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlckluZm8uaGFuZGxl
cjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIucmVzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIucmVzZXQoZmFsc2UsIHRyYW5zaXRpb24pOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBmb3JF
YWNoKHBhcnRpdGlvbi51cGRhdGVkQ29udGV4dCwgZnVuY3Rpb24oaGFuZGxlckluZm8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJFbnRlcmVkT3JVcGRhdGVkKGN1cnJlbnRI
YW5kbGVySW5mb3MsIGhhbmRsZXJJbmZvLCBmYWxzZSwgdHJhbnNpdGlvbik7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBmb3JFYWNoKHBhcnRpdGlvbi5lbnRlcmVkLCBm
dW5jdGlvbihoYW5kbGVySW5mbykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxl
ckVudGVyZWRPclVwZGF0ZWQoY3VycmVudEhhbmRsZXJJbmZvcywgaGFuZGxlckluZm8sIHRydWUs
IHRyYW5zaXRpb24pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBjYXRjaCAo
ZSkgewotICAgICAgICAgICAgICAgIHJvdXRlci5zdGF0ZSA9IG9sZFN0YXRlOwotICAgICAgICAg
ICAgICAgIHJvdXRlci5jdXJyZW50SGFuZGxlckluZm9zID0gb2xkU3RhdGUuaGFuZGxlckluZm9z
OwotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJvdXRlci5zdGF0ZS5xdWVyeVBhcmFtcyA9IGZpbmFsaXplUXVlcnlQYXJhbUNoYW5nZShyb3V0
ZXIsIGN1cnJlbnRIYW5kbGVySW5mb3MsIG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCB0cmFuc2l0aW9u
KTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0K
LSAgICAgICAgICAgICAgSGVscGVyIG1ldGhvZCB1c2VkIGJ5IHNldHVwQ29udGV4dHMuIEhhbmRs
ZXMgZXJyb3JzIG9yIHJlZGlyZWN0cwotICAgICAgICAgICAgICB0aGF0IG1heSBoYXBwZW4gaW4g
ZW50ZXIvc2V0dXAuCi0gICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBoYW5kbGVyRW50
ZXJlZE9yVXBkYXRlZChjdXJyZW50SGFuZGxlckluZm9zLCBoYW5kbGVySW5mbywgZW50ZXIsIHRy
YW5zaXRpb24pIHsKLQotICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5k
bGVyLAotICAgICAgICAgICAgY29udGV4dCA9IGhhbmRsZXJJbmZvLmNvbnRleHQ7Ci0KLSAgICAg
ICAgICAgIGlmIChlbnRlciAmJiBoYW5kbGVyLmVudGVyKSB7Ci0gICAgICAgICAgICAgICAgaGFu
ZGxlci5lbnRlcih0cmFuc2l0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0
cmFuc2l0aW9uICYmIHRyYW5zaXRpb24uaXNBYm9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFRyYW5zaXRpb25BYm9ydGVkKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGhhbmRsZXIuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlci5jb250
ZXh0RGlkQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlci5jb250ZXh0RGlkQ2hhbmdl
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGVyLnNldHVwKSB7Ci0g
ICAgICAgICAgICAgICAgaGFuZGxlci5zZXR1cChjb250ZXh0LCB0cmFuc2l0aW9uKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24uaXNBYm9y
dGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRyYW5zaXRpb25BYm9ydGVkKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1cnJlbnRIYW5kbGVySW5mb3MucHVzaChoYW5k
bGVySW5mbyk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLQotICAg
ICAgICAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgVVJMIHRvCi0gICAg
ICAgICAgICAgIGFub3RoZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIGhhbmRsZXJzIGFyZSBubyBsb25n
ZXIgYWN0aXZlLAotICAgICAgICAgICAgICB3aGljaCBoYW5kbGVycyBhcmUgbmV3bHkgYWN0aXZl
LCBhbmQgd2hpY2ggaGFuZGxlcnMgcmVtYWluCi0gICAgICAgICAgICAgIGFjdGl2ZSBidXQgaGF2
ZSB0aGVpciBjb250ZXh0IGNoYW5nZWQuCi0KLSAgICAgICAgICAgICAgVGFrZSBhIGxpc3Qgb2Yg
b2xkIGhhbmRsZXJzIGFuZCBuZXcgaGFuZGxlcnMgYW5kIHBhcnRpdGlvbgotICAgICAgICAgICAg
ICB0aGVtIGludG8gZm91ciBidWNrZXRzOgotCi0gICAgICAgICAgICAgICogdW5jaGFuZ2VkOiB0
aGUgaGFuZGxlciB3YXMgYWN0aXZlIGluIGJvdGggdGhlIG9sZCBhbmQKLSAgICAgICAgICAgICAg
ICBuZXcgVVJMLCBhbmQgaXRzIGNvbnRleHQgcmVtYWlucyB0aGUgc2FtZQotICAgICAgICAgICAg
ICAqIHVwZGF0ZWQgY29udGV4dDogdGhlIGhhbmRsZXIgd2FzIGFjdGl2ZSBpbiBib3RoIHRoZQot
ICAgICAgICAgICAgICAgIG9sZCBhbmQgbmV3IFVSTCwgYnV0IGl0cyBjb250ZXh0IGNoYW5nZWQu
IFRoZSBoYW5kbGVyJ3MKLSAgICAgICAgICAgICAgICBgc2V0dXBgIG1ldGhvZCwgaWYgYW55LCB3
aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcKLSAgICAgICAgICAgICAgICBjb250ZXh0LgotICAg
ICAgICAgICAgICAqIGV4aXRlZDogdGhlIGhhbmRsZXIgd2FzIGFjdGl2ZSBpbiB0aGUgb2xkIFVS
TCwgYnV0IGlzCi0gICAgICAgICAgICAgICAgbm8gbG9uZ2VyIGFjdGl2ZS4KLSAgICAgICAgICAg
ICAgKiBlbnRlcmVkOiB0aGUgaGFuZGxlciB3YXMgbm90IGFjdGl2ZSBpbiB0aGUgb2xkIFVSTCwg
YnV0Ci0gICAgICAgICAgICAgICAgaXMgbm93IGFjdGl2ZS4KLQotICAgICAgICAgICAgICBUaGUg
UGFydGl0aW9uZWRIYW5kbGVycyBzdHJ1Y3R1cmUgaGFzIGZvdXIgZmllbGRzOgotCi0gICAgICAg
ICAgICAgICogYHVwZGF0ZWRDb250ZXh0YDogYSBsaXN0IG9mIGBIYW5kbGVySW5mb2Agb2JqZWN0
cyB0aGF0Ci0gICAgICAgICAgICAgICAgcmVwcmVzZW50IGhhbmRsZXJzIHRoYXQgcmVtYWluIGFj
dGl2ZSBidXQgaGF2ZSBhIGNoYW5nZWQKLSAgICAgICAgICAgICAgICBjb250ZXh0Ci0gICAgICAg
ICAgICAgICogYGVudGVyZWRgOiBhIGxpc3Qgb2YgYEhhbmRsZXJJbmZvYCBvYmplY3RzIHRoYXQg
cmVwcmVzZW50Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMgdGhhdCBhcmUgbmV3bHkgYWN0aXZl
Ci0gICAgICAgICAgICAgICogYGV4aXRlZGA6IGEgbGlzdCBvZiBgSGFuZGxlckluZm9gIG9iamVj
dHMgdGhhdCBhcmUgbm8KLSAgICAgICAgICAgICAgICBsb25nZXIgYWN0aXZlLgotICAgICAgICAg
ICAgICAqIGB1bmNoYW5nZWRgOiBhIGxpc3Qgb2YgYEhhbmRlckluZm9gIG9iamVjdHMgdGhhdCBy
ZW1haW4gYWN0aXZlLgotCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXlbSGFuZGxlckluZm9d
fSBvbGRIYW5kbGVycyBhIGxpc3Qgb2YgdGhlIGhhbmRsZXIKLSAgICAgICAgICAgICAgICBpbmZv
cm1hdGlvbiBmb3IgdGhlIHByZXZpb3VzIFVSTCAob3IgYFtdYCBpZiB0aGlzIGlzIHRoZQotICAg
ICAgICAgICAgICAgIGZpcnN0IGhhbmRsZWQgdHJhbnNpdGlvbikKLSAgICAgICAgICAgICAgQHBh
cmFtIHtBcnJheVtIYW5kbGVySW5mb119IG5ld0hhbmRsZXJzIGEgbGlzdCBvZiB0aGUgaGFuZGxl
cgotICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZvciB0aGUgbmV3IFVSTAotCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge1BhcnRpdGlvbn0KLSAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHBhcnRpdGlvbkhhbmRsZXJzKG9sZFN0YXRlLCBuZXdTdGF0ZSkgewotICAgICAgICAgICAg
dmFyIG9sZEhhbmRsZXJzID0gb2xkU3RhdGUuaGFuZGxlckluZm9zOwotICAgICAgICAgICAgdmFy
IG5ld0hhbmRsZXJzID0gbmV3U3RhdGUuaGFuZGxlckluZm9zOwotCi0gICAgICAgICAgICB2YXIg
aGFuZGxlcnMgPSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlZENvbnRleHQ6IFtdLAotICAgICAg
ICAgICAgICAgIGV4aXRlZDogW10sCi0gICAgICAgICAgICAgICAgZW50ZXJlZDogW10sCi0gICAg
ICAgICAgICAgICAgdW5jaGFuZ2VkOiBbXQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
dmFyIGhhbmRsZXJDaGFuZ2VkLCBjb250ZXh0Q2hhbmdlZCwgaSwgbDsKLQotICAgICAgICAgICAg
Zm9yIChpID0gMCwgbCA9IG5ld0hhbmRsZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
ICAgICAgICAgIHZhciBvbGRIYW5kbGVyID0gb2xkSGFuZGxlcnNbaV0sIG5ld0hhbmRsZXIgPSBu
ZXdIYW5kbGVyc1tpXTsKLQotICAgICAgICAgICAgICAgIGlmICghb2xkSGFuZGxlciB8fCBvbGRI
YW5kbGVyLmhhbmRsZXIgIT09IG5ld0hhbmRsZXIuaGFuZGxlcikgewotICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVyQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKGhhbmRsZXJDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRs
ZXJzLmVudGVyZWQucHVzaChuZXdIYW5kbGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9s
ZEhhbmRsZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmV4aXRlZC51bnNo
aWZ0KG9sZEhhbmRsZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjb250ZXh0Q2hhbmdlZCB8fCBvbGRIYW5kbGVyLmNvbnRleHQgIT09IG5ld0hh
bmRsZXIuY29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0Q2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnVwZGF0ZWRDb250ZXh0LnB1c2gobmV3
SGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlcnMudW5jaGFuZ2VkLnB1c2gob2xkSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGkgPSBuZXdIYW5kbGVycy5sZW5ndGgs
IGwgPSBvbGRIYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgICAgICBo
YW5kbGVycy5leGl0ZWQudW5zaGlmdChvbGRIYW5kbGVyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGhhbmRsZXJzLnJlc2V0ID0gaGFuZGxlcnMudXBkYXRlZENvbnRleHQuc2xp
Y2UoKTsKLSAgICAgICAgICAgIGhhbmRsZXJzLnJlc2V0LnJldmVyc2UoKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZXJzOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gdXBkYXRl
VVJMKHRyYW5zaXRpb24sIHN0YXRlLCBpbnB1dFVybCkgewotICAgICAgICAgICAgdmFyIHVybE1l
dGhvZCA9IHRyYW5zaXRpb24udXJsTWV0aG9kOwotCi0gICAgICAgICAgICBpZiAoIXVybE1ldGhv
ZCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIHJvdXRlciA9IHRyYW5zaXRpb24ucm91dGVyLAotICAgICAgICAgICAgaGFuZGxlcklu
Zm9zID0gc3RhdGUuaGFuZGxlckluZm9zLAotICAgICAgICAgICAgaGFuZGxlck5hbWUgPSBoYW5k
bGVySW5mb3NbaGFuZGxlckluZm9zLmxlbmd0aCAtIDFdLm5hbWUsCi0gICAgICAgICAgICBwYXJh
bXMgPSB7fTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZvcy5sZW5ndGgg
LSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGhh
bmRsZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICBtZXJnZShwYXJhbXMsIGhhbmRsZXJJbmZv
LnBhcmFtcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJJbmZvLmhhbmRsZXIuaW5hY2Nl
c3NpYmxlQnlVUkwpIHsKLSAgICAgICAgICAgICAgICAgICAgdXJsTWV0aG9kID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh1cmxNZXRo
b2QpIHsKLSAgICAgICAgICAgICAgICBwYXJhbXMucXVlcnlQYXJhbXMgPSB0cmFuc2l0aW9uLl92
aXNpYmxlUXVlcnlQYXJhbXMgfHwgc3RhdGUucXVlcnlQYXJhbXM7Ci0gICAgICAgICAgICAgICAg
dmFyIHVybCA9IHJvdXRlci5yZWNvZ25pemVyLmdlbmVyYXRlKGhhbmRsZXJOYW1lLCBwYXJhbXMp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHVybE1ldGhvZCA9PT0gJ3JlcGxhY2UnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJvdXRlci5yZXBsYWNlVVJMKHVybCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVyLnVwZGF0ZVVSTCh1cmwpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgot
ICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIFVSTCAo
aWYgbmVjZXNzYXJ5KSBhbmQgY2FsbHMgYHNldHVwQ29udGV4dHNgCi0gICAgICAgICAgICAgIHRv
IHVwZGF0ZSB0aGUgcm91dGVyJ3MgYXJyYXkgb2YgYGN1cnJlbnRIYW5kbGVySW5mb3NgLgotICAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplVHJhbnNpdGlvbih0cmFuc2l0
aW9uLCBuZXdTdGF0ZSkgewotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxv
Zyh0cmFuc2l0aW9uLnJvdXRlciwgdHJhbnNpdGlvbi5zZXF1ZW5jZSwgIlJlc29sdmVkIGFsbCBt
b2RlbHMgb24gZGVzdGluYXRpb24gcm91dGU7IGZpbmFsaXppbmcgdHJhbnNpdGlvbi4iKTsKLQot
ICAgICAgICAgICAgICAgIHZhciByb3V0ZXIgPSB0cmFuc2l0aW9uLnJvdXRlciwKLSAgICAgICAg
ICAgICAgICBoYW5kbGVySW5mb3MgPSBuZXdTdGF0ZS5oYW5kbGVySW5mb3MsCi0gICAgICAgICAg
ICAgICAgc2VxID0gdHJhbnNpdGlvbi5zZXF1ZW5jZTsKLQotICAgICAgICAgICAgICAgIC8vIFJ1
biBhbGwgdGhlIG5lY2Vzc2FyeSBlbnRlci9zZXR1cC9leGl0IGhvb2tzCi0gICAgICAgICAgICAg
ICAgc2V0dXBDb250ZXh0cyhyb3V0ZXIsIG5ld1N0YXRlLCB0cmFuc2l0aW9uKTsKLQotICAgICAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGEgcmVkaXJlY3Qgb2NjdXJyZWQgaW4gZW50ZXIvc2V0dXAK
LSAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbi5pc0Fib3J0ZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVE9ETzogY2xlYW5lciB3YXk/IGRpc3Rpbmd1aXNoIGIvdyB0YXJnZXRIYW5k
bGVySW5mb3M/Ci0gICAgICAgICAgICAgICAgICAgIHJvdXRlci5zdGF0ZS5oYW5kbGVySW5mb3Mg
PSByb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvczsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVqZWN0KGxvZ0Fib3J0KHRyYW5zaXRpb24pKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB1cGRhdGVVUkwodHJhbnNpdGlvbiwgbmV3U3RhdGUsIHRyYW5z
aXRpb24uaW50ZW50LnVybCk7Ci0KLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmlzQWN0aXZl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcm91dGVyLmFjdGl2ZVRyYW5zaXRpb24gPSBudWxs
OwotCi0gICAgICAgICAgICAgICAgdHJpZ2dlcihyb3V0ZXIsIHJvdXRlci5jdXJyZW50SGFuZGxl
ckluZm9zLCB0cnVlLCBbJ2RpZFRyYW5zaXRpb24nXSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
cm91dGVyLmRpZFRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcm91dGVyLmRpZFRy
YW5zaXRpb24ocm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3MpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGxvZyhyb3V0ZXIsIHRyYW5zaXRpb24uc2VxdWVuY2UsICJUUkFO
U0lUSU9OIENPTVBMRVRFLiIpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB3aXRoIHRo
ZSBmaW5hbCBoYW5kbGVyLgotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW5mb3NbaGFu
ZGxlckluZm9zLmxlbmd0aCAtIDFdLmhhbmRsZXI7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCEoKGUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uQWJvcnRlZCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vdmFyIGVycm9uZW91c0hhbmRsZXIgPSBoYW5kbGVy
SW5mb3MucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpbmZvcyA9IHRyYW5zaXRpb24u
c3RhdGUuaGFuZGxlckluZm9zOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnRyaWdn
ZXIodHJ1ZSwgJ2Vycm9yJywgZSwgdHJhbnNpdGlvbiwgaW5mb3NbaW5mb3MubGVuZ3RoLTFdLmhh
bmRsZXIpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLmFib3J0KCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAg
ICAgICAgIEJlZ2lucyBhbmQgcmV0dXJucyBhIFRyYW5zaXRpb24gYmFzZWQgb24gdGhlIHByb3Zp
ZGVkCi0gICAgICAgICAgICAgIGFyZ3VtZW50cy4gQWNjZXB0cyBhcmd1bWVudHMgaW4gdGhlIGZv
cm0gb2YgYm90aCBVUkwKLSAgICAgICAgICAgICAgdHJhbnNpdGlvbnMgYW5kIG5hbWVkIHRyYW5z
aXRpb25zLgotCi0gICAgICAgICAgICAgIEBwYXJhbSB7Um91dGVyfSByb3V0ZXIKLSAgICAgICAg
ICAgICAgQHBhcmFtIHtBcnJheVtPYmplY3RdfSBhcmdzIGFyZ3VtZW50cyBwYXNzZWQgdG8gdHJh
bnNpdGlvblRvLAotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoLCBvciBoYW5kbGVVUkwKLSAg
ICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRvVHJhbnNpdGlvbihyb3V0ZXIsIGFyZ3Ms
IGlzSW50ZXJtZWRpYXRlKSB7Ci0gICAgICAgICAgICAvLyBOb3JtYWxpemUgYmxhbmsgdHJhbnNp
dGlvbnMgdG8gcm9vdCBVUkwgdHJhbnNpdGlvbnMuCi0gICAgICAgICAgICB2YXIgbmFtZSA9IGFy
Z3NbMF0gfHwgJy8nOwotCi0gICAgICAgICAgICB2YXIgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5n
dGgtMV07Ci0gICAgICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAgICAgIGlm
IChsYXN0QXJnICYmIGxhc3RBcmcuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5UGFyYW1zJykpIHsKLSAg
ICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHBvcC5jYWxsKGFyZ3MpLnF1ZXJ5UGFyYW1zOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgaW50ZW50OwotICAgICAgICAgICAgaWYg
KGFyZ3MubGVuZ3RoID09PSAwKSB7Ci0KLSAgICAgICAgICAgICAgICBsb2cocm91dGVyLCAiVXBk
YXRpbmcgcXVlcnkgcGFyYW1zIik7Ci0KLSAgICAgICAgICAgICAgICAvLyBBIHF1ZXJ5IHBhcmFt
IHVwZGF0ZSBpcyByZWFsbHkganVzdCBhIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAvLyBp
bnRvIHRoZSByb3V0ZSB5b3UncmUgYWxyZWFkeSBvbi4KLSAgICAgICAgICAgICAgICB2YXIgaGFu
ZGxlckluZm9zID0gcm91dGVyLnN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICAgICAgICAgICAgICBp
bnRlbnQgPSBuZXcgTmFtZWRUcmFuc2l0aW9uSW50ZW50KHsKLSAgICAgICAgICAgICAgICAgICAg
bmFtZTogaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lLAotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0czogW10sCi0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFy
YW1zOiBxdWVyeVBhcmFtcwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB9IGVs
c2UgaWYgKG5hbWUuY2hhckF0KDApID09PSAnLycpIHsKLQotICAgICAgICAgICAgICAgIGxvZyhy
b3V0ZXIsICJBdHRlbXB0aW5nIFVSTCB0cmFuc2l0aW9uIHRvICIgKyBuYW1lKTsKLSAgICAgICAg
ICAgICAgICBpbnRlbnQgPSBuZXcgVVJMVHJhbnNpdGlvbkludGVudCh7Ci0gICAgICAgICAgICAg
ICAgICAgIHVybDogbmFtZSAKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgfSBl
bHNlIHsKLQotICAgICAgICAgICAgICAgIGxvZyhyb3V0ZXIsICJBdHRlbXB0aW5nIHRyYW5zaXRp
b24gdG8gIiArIG5hbWUpOwotICAgICAgICAgICAgICAgIGludGVudCA9IG5ldyBOYW1lZFRyYW5z
aXRpb25JbnRlbnQoewotICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcmdzWzBdLAotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0czogc2xpY2UuY2FsbChhcmdzLCAxKSwKLSAgICAgICAgICAg
ICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zCi0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByb3V0ZXIudHJhbnNpdGlvbkJ5SW50
ZW50KGludGVudCwgaXNJbnRlcm1lZGlhdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gaGFuZGxlckluZm9zRXF1YWwoaGFuZGxlckluZm9zLCBvdGhlckhhbmRsZXJJbmZvcykgewot
ICAgICAgICAgICAgaWYgKGhhbmRsZXJJbmZvcy5sZW5ndGggIT09IG90aGVySGFuZGxlckluZm9z
Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7
IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVySW5mb3NbaV0gIT09
IG90aGVySGFuZGxlckluZm9zW2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplUXVlcnlQYXJhbUNo
YW5nZShyb3V0ZXIsIHJlc29sdmVkSGFuZGxlcnMsIG5ld1F1ZXJ5UGFyYW1zLCB0cmFuc2l0aW9u
KSB7Ci0gICAgICAgICAgICAvLyBXZSBmaXJlIGEgZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlIGV2
ZW50IHdoaWNoCi0gICAgICAgICAgICAvLyBnaXZlcyB0aGUgbmV3IHJvdXRlIGhpZXJhcmNoeSBh
IGNoYW5jZSB0byB0ZWxsCi0gICAgICAgICAgICAvLyB1cyB3aGljaCBxdWVyeSBwYXJhbXMgaXQn
cyBjb25zdW1pbmcgYW5kIHdoYXQKLSAgICAgICAgICAgIC8vIHRoZWlyIGZpbmFsIHZhbHVlcyBh
cmUuIElmIGEgcXVlcnkgcGFyYW0gaXMKLSAgICAgICAgICAgIC8vIG5vIGxvbmdlciBjb25zdW1l
ZCBpbiB0aGUgZmluYWwgcm91dGUgaGllcmFyY2h5LAotICAgICAgICAgICAgLy8gaXRzIHNlcmlh
bGl6ZWQgc2VnbWVudCB3aWxsIGJlIHJlbW92ZWQKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIFVS
TC4KLQotICAgICAgICAgICAgZm9yICh2YXIgayBpbiBuZXdRdWVyeVBhcmFtcykgewotICAgICAg
ICAgICAgICAgIGlmIChuZXdRdWVyeVBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrKSAmJgotICAgICAg
ICAgICAgICAgIG5ld1F1ZXJ5UGFyYW1zW2tdID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBuZXdRdWVyeVBhcmFtc1trXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBmaW5hbFF1ZXJ5UGFyYW1zQXJyYXkgPSBbXTsKLSAg
ICAgICAgICAgIHRyaWdnZXIocm91dGVyLCByZXNvbHZlZEhhbmRsZXJzLCB0cnVlLCBbJ2ZpbmFs
aXplUXVlcnlQYXJhbUNoYW5nZScsIG5ld1F1ZXJ5UGFyYW1zLCBmaW5hbFF1ZXJ5UGFyYW1zQXJy
YXksIHRyYW5zaXRpb25dKTsKLQotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHsKLSAgICAg
ICAgICAgICAgICB0cmFuc2l0aW9uLl92aXNpYmxlUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIGZpbmFsUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBmaW5hbFF1ZXJ5UGFyYW1zQXJyYXkubGVuZ3RoOyBp
IDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcXAgPSBmaW5hbFF1ZXJ5UGFyYW1z
QXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgZmluYWxRdWVyeVBhcmFtc1txcC5rZXldID0gcXAu
dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24gJiYgcXAudmlzaWJsZSAhPT0g
ZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi5fdmlzaWJsZVF1ZXJ5UGFy
YW1zW3FwLmtleV0gPSBxcC52YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gZmluYWxRdWVyeVBhcmFtczsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIG5vdGlmeUV4aXN0aW5nSGFuZGxlcnMocm91dGVyLCBuZXdTdGF0ZSwgbmV3
VHJhbnNpdGlvbikgewotICAgICAgICAgICAgdmFyIG9sZEhhbmRsZXJzID0gcm91dGVyLnN0YXRl
LmhhbmRsZXJJbmZvcywKLSAgICAgICAgICAgIGNoYW5naW5nID0gW10sCi0gICAgICAgICAgICBs
ZWF2aW5nSW5kZXggPSBudWxsLAotICAgICAgICAgICAgbGVhdmluZywgbGVhdmluZ0NoZWNrZXIs
IGksIG9sZEhhbmRsZXIsIG5ld0hhbmRsZXI7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBvbGRIYW5kbGVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIG9sZEhhbmRsZXIg
PSBvbGRIYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAgICBuZXdIYW5kbGVyID0gbmV3U3RhdGUu
aGFuZGxlckluZm9zW2ldOwotCi0gICAgICAgICAgICAgICAgaWYgKCFuZXdIYW5kbGVyIHx8IG9s
ZEhhbmRsZXIubmFtZSAhPT0gbmV3SGFuZGxlci5uYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGxlYXZpbmdJbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbmV3SGFuZGxlci5pc1Jlc29sdmVkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nLnB1c2gob2xkSGFuZGxlcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGVhdmluZ0luZGV4
ICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbGVhdmluZyA9IG9sZEhhbmRsZXJzLnNsaWNl
KGxlYXZpbmdJbmRleCwgb2xkSGFuZGxlcnMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBsZWF2
aW5nQ2hlY2tlciA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaCA9IDA7IGggPCBsZWF2aW5nLmxlbmd0aDsgaCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGVhdmluZ1toXS5uYW1lID09PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICByb3V0ZXIuX3RyaWdnZXJXaWxsTGVhdmUo
bGVhdmluZywgbmV3VHJhbnNpdGlvbiwgbGVhdmluZ0NoZWNrZXIpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoY2hhbmdpbmcubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAg
IHJvdXRlci5fdHJpZ2dlcldpbGxDaGFuZ2VDb250ZXh0KGNoYW5naW5nLCBuZXdUcmFuc2l0aW9u
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJpZ2dlcihyb3V0ZXIsIG9sZEhhbmRs
ZXJzLCB0cnVlLCBbJ3dpbGxUcmFuc2l0aW9uJywgbmV3VHJhbnNpdGlvbl0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFJvdXRlcjsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoInJvdXRlci90cmFuc2l0aW9uLWludGVudCIsCi0gICAgWyIuL3V0aWxzIiwgImV4
cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRlbmN5MV9f
Lm1lcmdlOwotCi0gICAgICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25JbnRlbnQocHJvcHMpIHsKLSAg
ICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZShwcm9wcyk7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86
IHdhdAotICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhIHx8IHt9OwotICAgICAgICB9
Ci0KLSAgICAgICAgVHJhbnNpdGlvbkludGVudC5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICBp
bml0aWFsaXplOiBudWxsLAotICAgICAgICAgICAgYXBwbHlUb1N0YXRlOiBudWxsCi0gICAgICAg
IH07Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFRyYW5zaXRpb25JbnRlbnQ7
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvdHJhbnNpdGlvbi1pbnRlbnQvbmFtZWQtdHJh
bnNpdGlvbi1pbnRlbnQiLAotICAgIFsiLi4vdHJhbnNpdGlvbi1pbnRlbnQiLCAiLi4vdHJhbnNp
dGlvbi1zdGF0ZSIsICIuLi9oYW5kbGVyLWluZm8vZmFjdG9yeSIsICIuLi91dGlscyIsICJleHBv
cnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9f
ZGVwZW5kZW5jeTNfXywgX19kZXBlbmRlbmN5NF9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAi
dXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBUcmFuc2l0aW9uSW50ZW50ID0gX19kZXBlbmRlbmN5
MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBUcmFuc2l0aW9uU3RhdGUgPSBfX2RlcGVuZGVu
Y3kyX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIGhhbmRsZXJJbmZvRmFjdG9yeSA9IF9fZGVw
ZW5kZW5jeTNfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaXNQYXJhbSA9IF9fZGVwZW5kZW5j
eTRfXy5pc1BhcmFtOwotICAgICAgICB2YXIgZXh0cmFjdFF1ZXJ5UGFyYW1zID0gX19kZXBlbmRl
bmN5NF9fLmV4dHJhY3RRdWVyeVBhcmFtczsKLSAgICAgICAgdmFyIG1lcmdlID0gX19kZXBlbmRl
bmN5NF9fLm1lcmdlOwotICAgICAgICB2YXIgc3ViY2xhc3MgPSBfX2RlcGVuZGVuY3k0X18uc3Vi
Y2xhc3M7Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IHN1YmNsYXNzKFRyYW5z
aXRpb25JbnRlbnQsIHsKLSAgICAgICAgICAgIG5hbWU6IG51bGwsCi0gICAgICAgICAgICBwaXZv
dEhhbmRsZXI6IG51bGwsCi0gICAgICAgICAgICBjb250ZXh0czogbnVsbCwKLSAgICAgICAgICAg
IHF1ZXJ5UGFyYW1zOiBudWxsLAotCi0gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihw
cm9wcykgewotICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWU7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5waXZvdEhhbmRsZXIgPSBwcm9wcy5waXZvdEhhbmRsZXI7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0cyA9IHByb3BzLmNvbnRleHRzIHx8IFtdOwotICAgICAgICAg
ICAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBwcm9wcy5xdWVyeVBhcmFtczsKLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIGFwcGx5VG9TdGF0ZTogZnVuY3Rpb24ob2xkU3RhdGUsIHJlY29n
bml6ZXIsIGdldEhhbmRsZXIsIGlzSW50ZXJtZWRpYXRlKSB7Ci0KLSAgICAgICAgICAgICAgICB2
YXIgcGFydGl0aW9uZWRBcmdzID0gZXh0cmFjdFF1ZXJ5UGFyYW1zKFt0aGlzLm5hbWVdLmNvbmNh
dCh0aGlzLmNvbnRleHRzKSksCi0gICAgICAgICAgICAgICAgcHVyZUFyZ3MgPSBwYXJ0aXRpb25l
ZEFyZ3NbMF0sCi0gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBwYXJ0aXRpb25lZEFyZ3Nb
MV0sCi0gICAgICAgICAgICAgICAgaGFuZGxlcnMgPSByZWNvZ25pemVyLmhhbmRsZXJzRm9yKHB1
cmVBcmdzWzBdKTsKLQotICAgICAgICAgICAgICAgIHZhciB0YXJnZXRSb3V0ZU5hbWUgPSBoYW5k
bGVyc1toYW5kbGVycy5sZW5ndGgtMV0uaGFuZGxlcjsKLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmFwcGx5VG9IYW5kbGVycyhvbGRTdGF0ZSwgaGFuZGxlcnMsIGdldEhhbmRsZXIsIHRh
cmdldFJvdXRlTmFtZSwgaXNJbnRlcm1lZGlhdGUpOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgYXBwbHlUb0hhbmRsZXJzOiBmdW5jdGlvbihvbGRTdGF0ZSwgaGFuZGxlcnMsIGdldEhh
bmRsZXIsIHRhcmdldFJvdXRlTmFtZSwgaXNJbnRlcm1lZGlhdGUsIGNoZWNraW5nSWZBY3RpdmUp
IHsKLQotICAgICAgICAgICAgICAgIHZhciBpOwotICAgICAgICAgICAgICAgIHZhciBuZXdTdGF0
ZSA9IG5ldyBUcmFuc2l0aW9uU3RhdGUoKTsKLSAgICAgICAgICAgICAgICB2YXIgb2JqZWN0cyA9
IHRoaXMuY29udGV4dHMuc2xpY2UoMCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgaW52YWxpZGF0
ZUluZGV4ID0gaGFuZGxlcnMubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgLy8gUGl2b3QgaGFu
ZGxlcnMgYXJlIHByb3ZpZGVkIGZvciByZWZyZXNoIHRyYW5zaXRpb25zCi0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMucGl2b3RIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdldEhhbmRsZXIoaGFuZGxlcnNbaV0uaGFuZGxlcikgPT09IHRoaXMucGl2b3RIYW5kbGVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZUluZGV4ID0gaTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciBwaXZvdEhhbmRsZXJGb3VuZCA9ICF0aGlzLnBpdm90SGFuZGxlcjsKLQotICAg
ICAgICAgICAgICAgIGZvciAoaSA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGVyc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG5hbWUgPSByZXN1bHQuaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGhhbmRsZXIgPSBnZXRIYW5kbGVyKG5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAg
IHZhciBvbGRIYW5kbGVySW5mbyA9IG9sZFN0YXRlLmhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIG5ld0hhbmRsZXJJbmZvID0gbnVsbDsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm5hbWVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpID49IGludmFsaWRhdGVJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0hhbmRsZXJJbmZvID0gdGhpcy5jcmVhdGVQYXJhbUhhbmRsZXJJbmZvKG5hbWUsIGhh
bmRsZXIsIHJlc3VsdC5uYW1lcywgb2JqZWN0cywgb2xkSGFuZGxlckluZm8pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdI
YW5kbGVySW5mbyA9IHRoaXMuZ2V0SGFuZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudChuYW1lLCBo
YW5kbGVyLCByZXN1bHQubmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvLCB0YXJnZXRSb3V0
ZU5hbWUsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyByb3V0ZSBoYXMgbm8g
ZHluYW1pYyBzZWdtZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlIHRy
ZWF0IGFzIGEgcGFyYW0tYmFzZWQgaGFuZGxlckluZm8KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdpdGggZW1wdHkgcGFyYW1zLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGBtb2RlbGAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGhvb2sgdG8gYmUgY2FsbGVkIHdpdGggZW1wdHkgcGFyYW1z
LCB3aGljaCBpcyBkZXNpcmFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVy
SW5mbyA9IHRoaXMuY3JlYXRlUGFyYW1IYW5kbGVySW5mbyhuYW1lLCBoYW5kbGVyLCByZXN1bHQu
bmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2luZ0lmQWN0aXZlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBwZXJmb3JtaW5nIGFuIGlzQWN0aXZlIGNoZWNrLCB3
ZSB3YW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgVVJMIHBhcmFt
cyB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0LCBidXQKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGlnbm9yZSBtaXNtYXRjaGVzIGJldHdlZW4gb2xkIGFuZCBuZXcgY29udGV4dC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXJJbmZvID0gbmV3SGFuZGxlckluZm8uYmVjb21l
UmVzb2x2ZWQobnVsbCwgbmV3SGFuZGxlckluZm8uY29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgb2xkQ29udGV4dCA9IG9sZEhhbmRsZXJJbmZvICYmIG9sZEhhbmRsZXJJbmZv
LmNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5hbWVzLmxlbmd0
aCA+IDAgJiYgbmV3SGFuZGxlckluZm8uY29udGV4dCA9PT0gb2xkQ29udGV4dCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNvbnRleHRzIG1hdGNoIGluIGlzQWN0aXZlIHRl
c3QsIGFzc3VtZSBwYXJhbXMgYWxzbyBtYXRjaC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGFsbG93cyBmb3IgZmxleGliaWxpdHkgaW4gbm90IHJlcXVpcmluZyB0aGF0IGV2
ZXJ5IGxhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVyIHByb3ZpZGUg
YSBgc2VyaWFsaXplYCBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIYW5k
bGVySW5mby5wYXJhbXMgPSBvbGRIYW5kbGVySW5mbyAmJiBvbGRIYW5kbGVySW5mby5wYXJhbXM7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdI
YW5kbGVySW5mby5jb250ZXh0ID0gb2xkQ29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyVG9Vc2UgPSBvbGRIYW5kbGVySW5mbzsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gaW52YWxpZGF0ZUluZGV4IHx8IG5ld0hhbmRs
ZXJJbmZvLnNob3VsZFN1cGVyY2VkZShvbGRIYW5kbGVySW5mbykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludmFsaWRhdGVJbmRleCA9IE1hdGgubWluKGksIGludmFsaWRhdGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyVG9Vc2UgPSBuZXdIYW5kbGVySW5mbzsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludGVy
bWVkaWF0ZSAmJiAhY2hlY2tpbmdJZkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlclRvVXNlID0gaGFuZGxlclRvVXNlLmJlY29tZVJlc29sdmVkKG51bGwsIGhhbmRsZXJU
b1VzZS5jb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIG5ld1N0YXRlLmhhbmRsZXJJbmZvcy51bnNoaWZ0KGhhbmRsZXJUb1VzZSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG9iamVjdHMubGVuZ3RoID4gMCkgewot
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1vcmUgY29udGV4dCBvYmplY3Rz
IHdlcmUgcGFzc2VkIHRoYW4gdGhlcmUgYXJlIGR5bmFtaWMgc2VnbWVudHMgZm9yIHRoZSByb3V0
ZTogIiArIHRhcmdldFJvdXRlTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKCFpc0ludGVybWVkaWF0ZSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmlu
dmFsaWRhdGVDaGlsZHJlbihuZXdTdGF0ZS5oYW5kbGVySW5mb3MsIGludmFsaWRhdGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVyZ2UobmV3U3RhdGUucXVl
cnlQYXJhbXMsIHRoaXMucXVlcnlQYXJhbXMgfHwge30pOwotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ld1N0YXRlOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgaW52YWxpZGF0ZUNo
aWxkcmVuOiBmdW5jdGlvbihoYW5kbGVySW5mb3MsIGludmFsaWRhdGVJbmRleCkgewotICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSBpbnZhbGlkYXRlSW5kZXgsIGwgPSBoYW5kbGVySW5mb3Mu
bGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5m
byA9IGhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlckluZm9zW2ld
ID0gaGFuZGxlckluZm9zW2ldLmdldFVucmVzb2x2ZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBnZXRIYW5kbGVySW5mb0ZvckR5bmFtaWNTZWdt
ZW50OiBmdW5jdGlvbihuYW1lLCBoYW5kbGVyLCBuYW1lcywgb2JqZWN0cywgb2xkSGFuZGxlcklu
Zm8sIHRhcmdldFJvdXRlTmFtZSwgaSkgewotCi0gICAgICAgICAgICAgICAgdmFyIG51bU5hbWVz
ID0gbmFtZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgIHZhciBvYmplY3RUb1VzZTsKLSAgICAg
ICAgICAgICAgICBpZiAob2JqZWN0cy5sZW5ndGggPiAwKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gVXNlIHRoZSBvYmplY3RzIHByb3ZpZGVkIGZvciB0aGlzIHRyYW5zaXRpb24uCi0gICAg
ICAgICAgICAgICAgICAgIG9iamVjdFRvVXNlID0gb2JqZWN0c1tvYmplY3RzLmxlbmd0aCAtIDFd
OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbShvYmplY3RUb1VzZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8obmFt
ZSwgaGFuZGxlciwgbmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMucG9wKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZEhh
bmRsZXJJbmZvICYmIG9sZEhhbmRsZXJJbmZvLm5hbWUgPT09IG5hbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gUmV1c2UgdGhlIG1hdGNoaW5nIG9sZEhhbmRsZXJJbmZvCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvbGRIYW5kbGVySW5mbzsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVUcmFuc2l0aW9uU3RhdGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVUcmFuc2l0aW9uSGFuZGxlckluZm8gPSB0aGlz
LnByZVRyYW5zaXRpb25TdGF0ZS5oYW5kbGVySW5mb3NbaV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3RUb1VzZSA9IHByZVRyYW5zaXRpb25IYW5kbGVySW5mbyAmJiBwcmVUcmFuc2l0
aW9uSGFuZGxlckluZm8uY29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHRocm93IHRoaXMgZXJy
b3IgdG8gcHJvdmlkZSBtYXhpbWFsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcm1h
dGlvbiB0byB0aGUgdXNlciB0aGF0IG5vdCBlbm91Z2ggY29udGV4dCBvYmplY3RzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3ZXJlIHByb3ZpZGVkLCBidXQgdGhpcyBwcm92ZXMgdG9vIGN1
bWJlcnNvbWUgaW4gRW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2VzIHdo
ZXJlIGlubmVyIHRlbXBsYXRlIGhlbHBlcnMgYXJlIGV2YWx1YXRlZAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmVmb3JlIHBhcmVudCBoZWxwZXJzIHVuLXJlbmRlciwgaW4gd2hpY2ggY2Fz
ZXMgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3Igc29tZXdoYXQgcHJlbWF0
dXJlbHkgZmlyZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3Rocm93IG5ldyBFcnJvcigi
Tm90IGVub3VnaCBjb250ZXh0IG9iamVjdHMgd2VyZSBwcm92aWRlZCB0byBjb21wbGV0ZSBhIHRy
YW5zaXRpb24gdG8gIiArIHRhcmdldFJvdXRlTmFtZSArICIuIFNwZWNpZmljYWxseSwgdGhlICIg
KyBuYW1lICsgIiByb3V0ZSBuZWVkcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBp
bnRvIGl0cyBkeW5hbWljIFVSTCBzZWdtZW50cyBbIiArIG5hbWVzLmpvaW4oJywgJykgKyAiXSIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZEhhbmRsZXJJbmZvOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGhhbmRsZXJJbmZvRmFjdG9yeSgnb2JqZWN0JywgewotICAgICAgICAgICAgICAgICAgICBu
YW1lOiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0OiBvYmplY3RUb1VzZSwKLSAgICAgICAgICAgICAgICAgICAg
bmFtZXM6IG5hbWVzCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICBjcmVhdGVQYXJhbUhhbmRsZXJJbmZvOiBmdW5jdGlvbihuYW1lLCBoYW5kbGVyLCBu
YW1lcywgb2JqZWN0cywgb2xkSGFuZGxlckluZm8pIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
YW1zID0ge307Ci0KLSAgICAgICAgICAgICAgICAvLyBTb2FrIHVwIGFsbCB0aGUgcHJvdmlkZWQg
c3RyaW5nL251bWJlcnMKLSAgICAgICAgICAgICAgICB2YXIgbnVtTmFtZXMgPSBuYW1lcy5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG51bU5hbWVzLS0pIHsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IHVzZSBvbGQgcGFyYW1zIGlmIHRoZSBuYW1lcyBtYXRjaCB3aXRoIHRo
ZSBuZXcgaGFuZGxlcgotICAgICAgICAgICAgICAgICAgICB2YXIgb2xkUGFyYW1zID0gKG9sZEhh
bmRsZXJJbmZvICYmIG5hbWUgPT09IG9sZEhhbmRsZXJJbmZvLm5hbWUgJiYgb2xkSGFuZGxlcklu
Zm8ucGFyYW1zKSB8fCB7fTsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgcGVlayA9IG9iamVj
dHNbb2JqZWN0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtTmFt
ZSA9IG5hbWVzW251bU5hbWVzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW0ocGVl
aykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gIiIgKyBv
YmplY3RzLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgaGVyZSwgdGhpcyBtZWFucyBvbmx5IHNvbWUgb2YgdGhl
IHBhcmFtcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2VyZSBzdHJpbmcvbnVtYmVyIHBh
cmFtcywgc28gdHJ5IGFuZCB1c2UgYSBwYXJhbQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dmFsdWUgZnJvbSBhIHByZXZpb3VzIGhhbmRsZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob2xkUGFyYW1zLmhhc093blByb3BlcnR5KHBhcmFtTmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbcGFyYW1OYW1lXSA9IG9sZFBhcmFtc1twYXJhbU5hbWVdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBkaWRuJ3QgcHJvdmlkZSBlbm91Z2ggc3RyaW5nL251
bWVyaWMgcGFyYW1ldGVycyB0byBzYXRpc2Z5IGFsbCBvZiB0aGUgZHluYW1pYyBzZWdtZW50cyBm
b3Igcm91dGUgIiArIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZXJJbmZvRmFjdG9yeSgncGFyYW0nLCB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtczogcGFyYW1zCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGRlZmluZSgicm91dGVyL3RyYW5zaXRpb24t
aW50ZW50L3VybC10cmFuc2l0aW9uLWludGVudCIsCi0gICAgWyIuLi90cmFuc2l0aW9uLWludGVu
dCIsICIuLi90cmFuc2l0aW9uLXN0YXRlIiwgIi4uL2hhbmRsZXItaW5mby9mYWN0b3J5IiwgIi4u
L3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVw
ZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFyIFRyYW5zaXRpb25JbnRlbnQg
PSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLSAgICAgICAgdmFyIFRyYW5zaXRpb25TdGF0
ZSA9IF9fZGVwZW5kZW5jeTJfX1siZGVmYXVsdCJdOwotICAgICAgICB2YXIgaGFuZGxlckluZm9G
YWN0b3J5ID0gX19kZXBlbmRlbmN5M19fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBvQ3JlYXRl
ID0gX19kZXBlbmRlbmN5NF9fLm9DcmVhdGU7Ci0gICAgICAgIHZhciBtZXJnZSA9IF9fZGVwZW5k
ZW5jeTRfXy5tZXJnZTsKLSAgICAgICAgdmFyIHN1YmNsYXNzID0gX19kZXBlbmRlbmN5NF9fLnN1
YmNsYXNzOwotCi0gICAgICAgIF9fZXhwb3J0c19fWyJkZWZhdWx0Il0gPSBzdWJjbGFzcyhUcmFu
c2l0aW9uSW50ZW50LCB7Ci0gICAgICAgICAgICB1cmw6IG51bGwsCi0KLSAgICAgICAgICAgIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKHByb3BzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy51cmwgPSBw
cm9wcy51cmw7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBhcHBseVRvU3RhdGU6IGZ1
bmN0aW9uKG9sZFN0YXRlLCByZWNvZ25pemVyLCBnZXRIYW5kbGVyKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG5ld1N0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpOwotCi0gICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdHMgPSByZWNvZ25pemVyLnJlY29nbml6ZSh0aGlzLnVybCksCi0gICAgICAg
ICAgICAgICAgcXVlcnlQYXJhbXMgPSB7fSwKLSAgICAgICAgICAgICAgICBpLCBsZW47Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFVucmVjb2duaXplZFVSTEVycm9yKHRoaXMudXJsKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB2YXIgc3RhdGVzRGlmZmVyID0gZmFsc2U7Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZXN1bHRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgbmFtZSA9IHJlc3VsdC5oYW5kbGVyOwotICAgICAgICAgICAgICAgICAgICB2
YXIgaGFuZGxlciA9IGdldEhhbmRsZXIobmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGhhbmRsZXIuaW5hY2Nlc3NpYmxlQnlVUkwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBVbnJlY29nbml6ZWRVUkxFcnJvcih0aGlzLnVybCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YXIgbmV3SGFuZGxlckluZm8gPSBoYW5kbGVy
SW5mb0ZhY3RvcnkoJ3BhcmFtJywgewotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEhhbmRsZXJJbmZvID0gb2xkU3RhdGUu
aGFuZGxlckluZm9zW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVzRGlmZmVyIHx8
IG5ld0hhbmRsZXJJbmZvLnNob3VsZFN1cGVyY2VkZShvbGRIYW5kbGVySW5mbykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlc0RpZmZlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBuZXdTdGF0ZS5oYW5kbGVySW5mb3NbaV0gPSBuZXdIYW5kbGVySW5mbzsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRl
LmhhbmRsZXJJbmZvc1tpXSA9IG9sZEhhbmRsZXJJbmZvOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVyZ2UobmV3U3RhdGUucXVl
cnlQYXJhbXMsIHJlc3VsdHMucXVlcnlQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5ld1N0YXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAvKioKLSAg
ICAgICAgICAgICAgUHJvbWlzZSByZWplY3QgcmVhc29ucyBwYXNzZWQgdG8gcHJvbWlzZSByZWpl
Y3Rpb24KLSAgICAgICAgICAgICAgaGFuZGxlcnMgZm9yIGZhaWxlZCB0cmFuc2l0aW9ucy4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBVbnJlY29nbml6ZWRVUkxFcnJvcihtZXNz
YWdlKSB7Ci0gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAobWVzc2FnZSB8fCAiVW5yZWNvZ25p
emVkVVJMRXJyb3IiKTsKLSAgICAgICAgICAgIHRoaXMubmFtZSA9ICJVbnJlY29nbml6ZWRVUkxF
cnJvciI7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBkZWZpbmUoInJvdXRlci90cmFuc2l0aW9u
LXN0YXRlIiwKLSAgICBbIi4vaGFuZGxlci1pbmZvIiwgIi4vdXRpbHMiLCAicnN2cC9wcm9taXNl
IiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5j
eTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmlj
dCI7Ci0gICAgICAgIHZhciBSZXNvbHZlZEhhbmRsZXJJbmZvID0gX19kZXBlbmRlbmN5MV9fLlJl
c29sdmVkSGFuZGxlckluZm87Ci0gICAgICAgIHZhciBmb3JFYWNoID0gX19kZXBlbmRlbmN5Ml9f
LmZvckVhY2g7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSBfX2RlcGVuZGVuY3kyX18ucHJv
bWlzZUxhYmVsOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTNfX1siZGVmYXVs
dCJdOwotCi0gICAgICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25TdGF0ZShvdGhlcikgewotICAgICAg
ICAgICAgdGhpcy5oYW5kbGVySW5mb3MgPSBbXTsKLSAgICAgICAgICAgIHRoaXMucXVlcnlQYXJh
bXMgPSB7fTsKLSAgICAgICAgICAgIHRoaXMucGFyYW1zID0ge307Ci0gICAgICAgIH0KLQotICAg
ICAgICBUcmFuc2l0aW9uU3RhdGUucHJvdG90eXBlID0gewotICAgICAgICAgICAgaGFuZGxlcklu
Zm9zOiBudWxsLAotICAgICAgICAgICAgcXVlcnlQYXJhbXM6IG51bGwsCi0gICAgICAgICAgICBw
YXJhbXM6IG51bGwsCi0KLSAgICAgICAgICAgIHByb21pc2VMYWJlbDogZnVuY3Rpb24obGFiZWwp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TmFtZSA9ICcnOwotICAgICAgICAgICAgICAg
IGZvckVhY2godGhpcy5oYW5kbGVySW5mb3MsIGZ1bmN0aW9uKGhhbmRsZXJJbmZvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXROYW1lICE9PSAnJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0TmFtZSArPSAnLic7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSArPSBoYW5kbGVySW5mby5uYW1lOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlTGFiZWwoIiciICsgdGFy
Z2V0TmFtZSArICInOiAiICsgbGFiZWwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
cmVzb2x2ZTogZnVuY3Rpb24oc2hvdWxkQ29udGludWUsIHBheWxvYWQpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGN1bGF0
ZSBwYXJhbXMgZm9yIHRoaXMgc3RhdGUuIFRoaXMgaXMgdXNlZnVsCi0gICAgICAgICAgICAgICAg
Ly8gaW5mb3JtYXRpb24gdG8gcHJvdmlkZSB0byB0aGUgdmFyaW91cyByb3V0ZSBob29rcy4KLSAg
ICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7Ci0gICAgICAgICAgICAgICAg
Zm9yRWFjaCh0aGlzLmhhbmRsZXJJbmZvcywgZnVuY3Rpb24oaGFuZGxlckluZm8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2hhbmRsZXJJbmZvLm5hbWVdID0gaGFuZGxlckluZm8ucGFy
YW1zIHx8IHt9OwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgcGF5bG9h
ZCA9IHBheWxvYWQgfHwge307Ci0gICAgICAgICAgICAgICAgcGF5bG9hZC5yZXNvbHZlSW5kZXgg
PSAwOwotCi0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXM7Ci0gICAgICAg
ICAgICAgICAgdmFyIHdhc0Fib3J0ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIC8vIFRo
ZSBwcmVsdWRlIFJTVlAucmVzb2x2ZSgpIGFzeW5jcyB1cyBpbnRvIHRoZSBwcm9taXNlIGxhbmQu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsLCB0aGlzLnByb21p
c2VMYWJlbCgiU3RhcnQgdHJhbnNpdGlvbiIpKQotICAgICAgICAgICAgICAgIC50aGVuKHJlc29s
dmVPbmVIYW5kbGVySW5mbywgbnVsbCwgdGhpcy5wcm9taXNlTGFiZWwoJ1Jlc29sdmUgaGFuZGxl
cicpKVsnY2F0Y2gnXShoYW5kbGVFcnJvciwgdGhpcy5wcm9taXNlTGFiZWwoJ0hhbmRsZSBlcnJv
cicpKTsKLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyU2hvdWxkQ29udGludWUoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hvdWxkQ29udGlu
dWUoKSwgcHJvbWlzZUxhYmVsKCJDaGVjayBpZiBzaG91bGQgY29udGludWUiKSlbJ2NhdGNoJ10o
ZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkaXN0aW5n
dWlzaCBiZXR3ZWVuIGVycm9ycyB0aGF0IG9jY3VycmVkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkdXJpbmcgcmVzb2x1dGlvbiAoZS5nLiBiZWZvcmVNb2RlbC9tb2RlbC9hZnRlck1vZGVs
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhYm9ydHMgZHVlIHRvIGEgcmVqZWN0
aW5nIHByb21pc2UgZnJvbSBzaG91bGRDb250aW51ZSgpLgotICAgICAgICAgICAgICAgICAgICAg
ICAgd2FzQWJvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZWplY3QocmVhc29uKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgcHJvbWlzZUxhYmVs
KCJIYW5kbGUgYWJvcnQiKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgb25seSBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICAvLyByZWplY3QgdmFs
dWUgb2YgVHJhbnNpdGlvblN0YXRlI3Jlc29sdmUKLSAgICAgICAgICAgICAgICAgICAgdmFyIGhh
bmRsZXJJbmZvcyA9IGN1cnJlbnRTdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBlcnJvckhhbmRsZXJJbmRleCA9IHBheWxvYWQucmVzb2x2ZUluZGV4ID49IGhhbmRs
ZXJJbmZvcy5sZW5ndGggPwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVySW5mb3MubGVuZ3Ro
IC0gMSA6IHBheWxvYWQucmVzb2x2ZUluZGV4OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZWplY3QoewotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcldpdGhFcnJvcjogY3VycmVudFN0YXRlLmhh
bmRsZXJJbmZvc1tlcnJvckhhbmRsZXJJbmRleF0uaGFuZGxlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdhc0Fib3J0ZWQ6IHdhc0Fib3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZTogY3VycmVudFN0YXRlCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2NlZWQocmVzb2x2ZWRIYW5kbGVy
SW5mbykgewotICAgICAgICAgICAgICAgICAgICB2YXIgd2FzQWxyZWFkeVJlc29sdmVkID0gY3Vy
cmVudFN0YXRlLmhhbmRsZXJJbmZvc1twYXlsb2FkLnJlc29sdmVJbmRleF0uaXNSZXNvbHZlZDsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBTd2FwIHRoZSBwcmV2aW91c2x5IHVucmVzb2x2ZWQg
aGFuZGxlckluZm8gd2l0aAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcmVzb2x2ZWQgaGFu
ZGxlckluZm8KLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlLmhhbmRsZXJJbmZvc1tw
YXlsb2FkLnJlc29sdmVJbmRleCsrXSA9IHJlc29sdmVkSGFuZGxlckluZm87Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCF3YXNBbHJlYWR5UmVzb2x2ZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhbGwgdGhlIHJlZGlyZWN0IGhvb2suIFRoZSByZWFzb24gd2UgY2FsbCBpdCBo
ZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2cy4gYWZ0ZXJNb2RlbCBpcyBzbyB0aGF0
IHJlZGlyZWN0cyBpbnRvIGNoaWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMg
ZG9uJ3QgcmUtcnVuIHRoZSBtb2RlbCBob29rcyBmb3IgdGhpcwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYWxyZWFkeS1yZXNvbHZlZCByb3V0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBoYW5kbGVyID0gcmVzb2x2ZWRIYW5kbGVySW5mby5oYW5kbGVyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhbmRsZXIgJiYgaGFuZGxlci5yZWRpcmVjdCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIucmVkaXJlY3QocmVzb2x2ZWRIYW5kbGVySW5mby5j
b250ZXh0LCBwYXlsb2FkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFByb2NlZWQgYWZ0ZXIgZW5zdXJp
bmcgdGhhdCB0aGUgcmVkaXJlY3QgaG9vawotICAgICAgICAgICAgICAgICAgICAvLyBkaWRuJ3Qg
YWJvcnQgdGhpcyB0cmFuc2l0aW9uIGJ5IHRyYW5zaXRpb25pbmcgZWxzZXdoZXJlLgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5uZXJTaG91bGRDb250aW51ZSgpLnRoZW4ocmVzb2x2ZU9u
ZUhhbmRsZXJJbmZvLCBudWxsLCBwcm9taXNlTGFiZWwoJ1Jlc29sdmUgaGFuZGxlcicpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlT25lSGFu
ZGxlckluZm8oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnJlc29sdmVJbmRl
eCA9PT0gY3VycmVudFN0YXRlLmhhbmRsZXJJbmZvcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgaXMgdGhlIG9ubHkgcG9zc2libGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGZ1bGZpbGwgdmFsdWUgb2YgVHJhbnNpdGlvblN0YXRlI3Jlc29sdmUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3I6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGN1cnJl
bnRTdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGN1cnJlbnRTdGF0ZS5o
YW5kbGVySW5mb3NbcGF5bG9hZC5yZXNvbHZlSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBoYW5kbGVySW5mby5yZXNvbHZlKGlubmVyU2hvdWxkQ29udGludWUsIHBheWxvYWQp
Ci0gICAgICAgICAgICAgICAgICAgIC50aGVuKHByb2NlZWQsIG51bGwsIHByb21pc2VMYWJlbCgn
UHJvY2VlZCcpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgX19leHBvcnRzX19bImRlZmF1bHQiXSA9IFRyYW5zaXRpb25TdGF0ZTsKLSAg
ICB9KTsKLSAgICBkZWZpbmUoInJvdXRlci90cmFuc2l0aW9uIiwKLSAgICBbInJzdnAvcHJvbWlz
ZSIsICIuL2hhbmRsZXItaW5mbyIsICIuL3V0aWxzIiwgImV4cG9ydHMiXSwKLSAgICBmdW5jdGlv
bihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4
cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBQcm9taXNlID0g
X19kZXBlbmRlbmN5MV9fWyJkZWZhdWx0Il07Ci0gICAgICAgIHZhciBSZXNvbHZlZEhhbmRsZXJJ
bmZvID0gX19kZXBlbmRlbmN5Ml9fLlJlc29sdmVkSGFuZGxlckluZm87Ci0gICAgICAgIHZhciB0
cmlnZ2VyID0gX19kZXBlbmRlbmN5M19fLnRyaWdnZXI7Ci0gICAgICAgIHZhciBzbGljZSA9IF9f
ZGVwZW5kZW5jeTNfXy5zbGljZTsKLSAgICAgICAgdmFyIGxvZyA9IF9fZGVwZW5kZW5jeTNfXy5s
b2c7Ci0gICAgICAgIHZhciBwcm9taXNlTGFiZWwgPSBfX2RlcGVuZGVuY3kzX18ucHJvbWlzZUxh
YmVsOwotCi0gICAgICAgIC8qKgotICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAg
ICAgIEEgVHJhbnNpdGlvbiBpcyBhIHRoZW5uYWJsZSAoYSBwcm9taXNlLWxpa2Ugb2JqZWN0KSB0
aGF0IHJlcHJlc2VudHMKLSAgICAgICAgICAgICAgYW4gYXR0ZW1wdCB0byB0cmFuc2l0aW9uIHRv
IGFub3RoZXIgcm91dGUuIEl0IGNhbiBiZSBhYm9ydGVkLCBlaXRoZXIKLSAgICAgICAgICAgICAg
ZXhwbGljaXRseSB2aWEgYGFib3J0YCBvciBieSBhdHRlbXB0aW5nIGFub3RoZXIgdHJhbnNpdGlv
biB3aGlsZSBhCi0gICAgICAgICAgICAgIHByZXZpb3VzIG9uZSBpcyBzdGlsbCB1bmRlcndheS4g
QW4gYWJvcnRlZCB0cmFuc2l0aW9uIGNhbiBhbHNvCi0gICAgICAgICAgICAgIGJlIGByZXRyeSgp
YGQgbGF0ZXIuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gVHJhbnNpdGlvbihy
b3V0ZXIsIGludGVudCwgc3RhdGUsIGVycm9yKSB7Ci0gICAgICAgICAgICB2YXIgdHJhbnNpdGlv
biA9IHRoaXM7Ci0gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGUgfHwgcm91dGVyLnN0YXRl
OwotICAgICAgICAgICAgdGhpcy5pbnRlbnQgPSBpbnRlbnQ7Ci0gICAgICAgICAgICB0aGlzLnJv
dXRlciA9IHJvdXRlcjsKLSAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuaW50ZW50ICYmIHRo
aXMuaW50ZW50LmRhdGEgfHwge307Ci0gICAgICAgICAgICB0aGlzLnJlc29sdmVkTW9kZWxzID0g
e307Ci0gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge307Ci0KLSAgICAgICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9IFByb21pc2UucmVqZWN0
KGVycm9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChzdGF0ZSkgewotICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gc3RhdGUu
cGFyYW1zOwotICAgICAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBzdGF0ZS5xdWVyeVBh
cmFtczsKLSAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJ
bmZvczsKLQotICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzdGF0ZS5oYW5kbGVySW5mb3MubGVu
Z3RoOwotICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy50YXJnZXROYW1lID0gc3RhdGUuaGFuZGxlckluZm9zW3N0YXRlLmhhbmRsZXJJbmZvcy5sZW5n
dGgtMV0ubmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVy
SW5mbyA9IHN0YXRlLmhhbmRsZXJJbmZvc1tpXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBU
T0RPOiB0aGlzIGFsbCBzZWVtcyBoYWNreQotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRs
ZXJJbmZvLmlzUmVzb2x2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RIYW5kbGVy
ID0gaGFuZGxlckluZm8uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB0aGlzLnNlcXVlbmNlID0gVHJhbnNpdGlvbi5jdXJyZW50U2VxdWVuY2UrKzsKLSAgICAg
ICAgICAgICAgICB0aGlzLnByb21pc2UgPSBzdGF0ZS5yZXNvbHZlKGNoZWNrRm9yQWJvcnQsIHRo
aXMpWydjYXRjaCddKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0Lndhc0Fib3J0ZWQgfHwgdHJhbnNpdGlvbi5pc0Fib3J0ZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChsb2dBYm9ydCh0cmFuc2l0aW9uKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2l0aW9uLnRyaWdnZXIoJ2Vycm9yJywgcmVzdWx0LmVycm9yLCB0cmFuc2l0aW9uLCByZXN1
bHQuaGFuZGxlcldpdGhFcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9u
LmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qo
cmVzdWx0LmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0s
IHByb21pc2VMYWJlbCgnSGFuZGxlIEFib3J0JykpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLnByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5zdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZnVuY3Rpb24gY2hlY2tGb3JBYm9ydCgpIHsKLSAgICAgICAgICAgICAgICBpZiAo
dHJhbnNpdGlvbi5pc0Fib3J0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KHVuZGVmaW5lZCwgcHJvbWlzZUxhYmVsKCJUcmFuc2l0aW9uIGFib3J0ZWQgLSBy
ZWplY3QiKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgVHJhbnNpdGlvbi5jdXJyZW50U2VxdWVuY2UgPSAwOwotCi0gICAgICAgIFRyYW5z
aXRpb24ucHJvdG90eXBlID0gewotICAgICAgICAgICAgdGFyZ2V0TmFtZTogbnVsbCwKLSAgICAg
ICAgICAgIHVybE1ldGhvZDogJ3VwZGF0ZScsCi0gICAgICAgICAgICBpbnRlbnQ6IG51bGwsCi0g
ICAgICAgICAgICBwYXJhbXM6IG51bGwsCi0gICAgICAgICAgICBwaXZvdEhhbmRsZXI6IG51bGws
Ci0gICAgICAgICAgICByZXNvbHZlSW5kZXg6IDAsCi0gICAgICAgICAgICBoYW5kbGVySW5mb3M6
IG51bGwsCi0gICAgICAgICAgICByZXNvbHZlZE1vZGVsczogbnVsbCwKLSAgICAgICAgICAgIGlz
QWN0aXZlOiB0cnVlLAotICAgICAgICAgICAgc3RhdGU6IG51bGwsCi0gICAgICAgICAgICBxdWVy
eVBhcmFtc09ubHk6IGZhbHNlLAotCi0gICAgICAgICAgICBpc1RyYW5zaXRpb246IHRydWUsCi0K
LSAgICAgICAgICAgIGlzRXhpdGluZzogZnVuY3Rpb24oaGFuZGxlcikgewotICAgICAgICAgICAg
ICAgIHZhciBoYW5kbGVySW5mb3MgPSB0aGlzLmhhbmRsZXJJbmZvczsKLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGxlbjsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJJbmZvLm5hbWUgPT09IGhhbmRsZXIg
fHwgaGFuZGxlckluZm8uaGFuZGxlciA9PT0gaGFuZGxlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBwdWJsaWMKLQotICAgICAgICAgICAg
ICAgICAgICBUaGUgVHJhbnNpdGlvbidzIGludGVybmFsIHByb21pc2UuIENhbGxpbmcgYC50aGVu
YCBvbiB0aGlzIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgIGlzIHRoYXQgc2FtZSBhcyBj
YWxsaW5nIGAudGhlbmAgb24gdGhlIFRyYW5zaXRpb24gb2JqZWN0IGl0c2VsZiwgYnV0Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHkgaXMgZXhwb3NlZCBmb3Igd2hlbiB5b3Ugd2Fu
dCB0byBwYXNzIGFyb3VuZCBhCi0gICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb24ncyBwcm9t
aXNlLCBidXQgbm90IHRoZSBUcmFuc2l0aW9uIG9iamVjdCBpdHNlbGYsIHNpbmNlCi0gICAgICAg
ICAgICAgICAgICAgIFRyYW5zaXRpb24gb2JqZWN0IGNhbiBiZSBleHRlcm5hbGx5IGBhYm9ydGBl
ZCwgd2hpbGUgdGhlIHByb21pc2UKLSAgICAgICAgICAgICAgICAgICAgY2Fubm90LgotICAgICAg
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm9taXNlOiBudWxsLAotCi0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotCi0gICAgICAgICAgICAgICAgICAg
IEN1c3RvbSBzdGF0ZSBjYW4gYmUgc3RvcmVkIG9uIGEgVHJhbnNpdGlvbidzIGBkYXRhYCBvYmpl
Y3QuCi0gICAgICAgICAgICAgICAgICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGVjb3JhdGlu
ZyBhIFRyYW5zaXRpb24gd2l0aGluIGFuIGVhcmxpZXIKLSAgICAgICAgICAgICAgICAgICAgaG9v
ayBhbmQgc2hhcmVkIHdpdGggYSBsYXRlciBob29rLiBQcm9wZXJ0aWVzIHNldCBvbiBgZGF0YWAg
d2lsbAotICAgICAgICAgICAgICAgICAgICBiZSBjb3BpZWQgdG8gbmV3IHRyYW5zaXRpb25zIGdl
bmVyYXRlZCBieSBjYWxsaW5nIGByZXRyeWAgb24gdGhpcwotICAgICAgICAgICAgICAgICAgICB0
cmFuc2l0aW9uLgotICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkYXRhOiBudWxs
LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotCi0gICAg
ICAgICAgICAgICAgICAgIEEgc3RhbmRhcmQgcHJvbWlzZSBob29rIHRoYXQgcmVzb2x2ZXMgaWYg
dGhlIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VlZHMgYW5kIHJlamVjdHMg
aWYgaXQgZmFpbHMvcmVkaXJlY3RzL2Fib3J0cy4KLQotICAgICAgICAgICAgICAgICAgICBGb3J3
YXJkcyB0byB0aGUgaW50ZXJuYWwgYHByb21pc2VgIHByb3BlcnR5IHdoaWNoIHlvdSBjYW4KLSAg
ICAgICAgICAgICAgICAgICAgdXNlIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IHdhbnQgdG8gcGFz
cyBhcm91bmQgYSB0aGVubmFibGUsCi0gICAgICAgICAgICAgICAgICAgIGJ1dCBub3QgdGhlIFRy
YW5zaXRpb24gaXRzZWxmLgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259
IHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gZmFpbHVyZQot
ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0aGVuOiBmdW5jdGlvbihzdWNjZXNz
LCBmYWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZS50aGVuKHN1
Y2Nlc3MsIGZhaWx1cmUpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgIEBwdWJsaWMKLQotICAgICAgICAgICAgICAgICAgICBBYm9ydHMgdGhl
IFRyYW5zaXRpb24uIE5vdGUgeW91IGNhbiBhbHNvIGltcGxpY2l0bHkgYWJvcnQgYSB0cmFuc2l0
aW9uCi0gICAgICAgICAgICAgICAgICAgIGJ5IGluaXRpYXRpbmcgYW5vdGhlciB0cmFuc2l0aW9u
IHdoaWxlIGEgcHJldmlvdXMgb25lIGlzIHVuZGVyd2F5LgotICAgICAgICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMuaXNBYm9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsb2codGhpcy5yb3V0ZXIsIHRoaXMuc2VxdWVu
Y2UsIHRoaXMudGFyZ2V0TmFtZSArICI6IHRyYW5zaXRpb24gd2FzIGFib3J0ZWQiKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLmludGVudC5wcmVUcmFuc2l0aW9uU3RhdGUgPSB0aGlzLnJvdXRlci5z
dGF0ZTsKLSAgICAgICAgICAgICAgICB0aGlzLmlzQWJvcnRlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHRoaXMucm91dGVy
LmFjdGl2ZVRyYW5zaXRpb24gPSBudWxsOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgICAgICAgIEBw
dWJsaWMKLQotICAgICAgICAgICAgICAgICAgICBSZXRyaWVzIGEgcHJldmlvdXNseS1hYm9ydGVk
IHRyYW5zaXRpb24gKG1ha2luZyBzdXJlIHRvIGFib3J0IHRoZQotICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9uIGlmIGl0J3Mgc3RpbGwgYWN0aXZlKS4gUmV0dXJucyBhIG5ldyB0cmFuc2l0
aW9uIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgbmV3IGF0dGVtcHQg
dG8gdHJhbnNpdGlvbi4KLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0cnk6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGFkZCB0ZXN0cyBmb3IgbWVy
Z2VkIHN0YXRlIHJldHJ5KClzCi0gICAgICAgICAgICAgICAgdGhpcy5hYm9ydCgpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci50cmFuc2l0aW9uQnlJbnRlbnQodGhpcy5pbnRl
bnQsIGZhbHNlKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAg
ICAgICAgICAgICBAcHVibGljCi0KLSAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgVVJMLWNo
YW5naW5nIG1ldGhvZCB0byBiZSBlbXBsb3llZCBhdCB0aGUgZW5kIG9mIGEKLSAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc2Z1bCB0cmFuc2l0aW9uLiBCeSBkZWZhdWx0LCBhIG5ldyBUcmFuc2l0
aW9uIHdpbGwganVzdAotICAgICAgICAgICAgICAgICAgICB1c2UgYHVwZGF0ZVVSTGAsIGJ1dCBw
YXNzaW5nICdyZXBsYWNlJyB0byB0aGlzIG1ldGhvZCB3aWxsCi0gICAgICAgICAgICAgICAgICAg
IGNhdXNlIHRoZSBVUkwgdG8gdXBkYXRlIHVzaW5nICdyZXBsYWNlV2l0aCcgaW5zdGVhZC4gT21p
dHRpbmcKLSAgICAgICAgICAgICAgICAgICAgYSBwYXJhbWV0ZXIgd2lsbCBkaXNhYmxlIHRoZSBV
UkwgY2hhbmdlLCBhbGxvd2luZyBmb3IgdHJhbnNpdGlvbnMKLSAgICAgICAgICAgICAgICAgICAg
dGhhdCBkb24ndCB1cGRhdGUgdGhlIFVSTCBhdCBjb21wbGV0aW9uICh0aGlzIGlzIGFsc28gdXNl
ZCBmb3IKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlVVJMLCBzaW5jZSB0aGUgVVJMIGhhcyBh
bHJlYWR5IGNoYW5nZWQgYmVmb3JlIHRoZQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9u
IHRvb2sgcGxhY2UpLgotCi0gICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBtZXRo
b2QgdGhlIHR5cGUgb2YgVVJMLWNoYW5naW5nIG1ldGhvZCB0byB1c2UKLSAgICAgICAgICAgICAg
ICAgICAgICBhdCB0aGUgZW5kIG9mIGEgdHJhbnNpdGlvbi4gQWNjZXB0ZWQgdmFsdWVzIGFyZSAn
cmVwbGFjZScsCi0gICAgICAgICAgICAgICAgICAgICAgZmFsc3kgdmFsdWVzLCBvciBhbnkgb3Ro
ZXIgbm9uLWZhbHN5IHZhbHVlICh3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICAgIGludGVy
cHJldGVkIGFzIGFuIHVwZGF0ZVVSTCB0cmFuc2l0aW9uKS4KLQotICAgICAgICAgICAgICAgICAg
ICBAcmV0dXJuIHtUcmFuc2l0aW9ufSB0aGlzIHRyYW5zaXRpb24KLSAgICAgICAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbihtZXRob2QpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnVybE1ldGhvZCA9IG1ldGhvZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAg
ICBAcHVibGljCi0KLSAgICAgICAgICAgICAgICAgICAgRmlyZXMgYW4gZXZlbnQgb24gdGhlIGN1
cnJlbnQgbGlzdCBvZiByZXNvbHZlZC9yZXNvbHZpbmcKLSAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlcnMgd2l0aGluIHRoaXMgdHJhbnNpdGlvbi4gVXNlZnVsIGZvciBmaXJpbmcgZXZlbnRzCi0g
ICAgICAgICAgICAgICAgICAgIG9uIHJvdXRlIGhpZXJhcmNoaWVzIHRoYXQgaGF2ZW4ndCBmdWxs
eSBiZWVuIGVudGVyZWQgeWV0LgotCi0gICAgICAgICAgICAgICAgICAgIE5vdGU6IFRoaXMgbWV0
aG9kIGlzIGFsc28gYWxpYXNlZCBhcyBgc2VuZGAKLQotICAgICAgICAgICAgICAgICAgICBAcGFy
YW0ge0Jvb2xlYW59IFtpZ25vcmVGYWlsdXJlPWZhbHNlXSBhIGJvb2xlYW4gc3BlY2lmeWluZyB3
aGV0aGVyIHVuaGFuZGxlZCBldmVudHMgdGhyb3cgYW4gZXJyb3IKLSAgICAgICAgICAgICAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGZpcmUKLSAg
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24gKGlnbm9y
ZUZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1l
bnRzKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlnbm9yZUZhaWx1cmUgPT09ICdib29s
ZWFuJykgewotICAgICAgICAgICAgICAgICAgICBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3JzIG9uIHVuaGFu
ZGxlZCB0cmlnZ2VyIGV2ZW50cyBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIGlnbm9y
ZUZhaWx1cmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJp
Z2dlcih0aGlzLnJvdXRlciwgdGhpcy5zdGF0ZS5oYW5kbGVySW5mb3Muc2xpY2UoMCwgdGhpcy5y
ZXNvbHZlSW5kZXggKyAxKSwgaWdub3JlRmFpbHVyZSwgYXJncyk7Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAgICAgICAgQHB1YmxpYwotCi0gICAgICAg
ICAgICAgICAgICAgIFRyYW5zaXRpb25zIGFyZSBhYm9ydGVkIGFuZCB0aGVpciBwcm9taXNlcyBy
ZWplY3RlZAotICAgICAgICAgICAgICAgICAgICB3aGVuIHJlZGlyZWN0cyBvY2N1cjsgdGhpcyBt
ZXRob2QgcmV0dXJucyBhIHByb21pc2UKLSAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIGZv
bGxvdyBhbnkgcmVkaXJlY3RzIHRoYXQgb2NjdXIgYW5kIGZ1bGZpbGwKLSAgICAgICAgICAgICAg
ICAgICAgd2l0aCB0aGUgdmFsdWUgZnVsZmlsbGVkIGJ5IGFueSByZWRpcmVjdGluZyB0cmFuc2l0
aW9ucwotICAgICAgICAgICAgICAgICAgICB0aGF0IG9jY3VyLgotCi0gICAgICAgICAgICAgICAg
ICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpdGggdGhlIHNh
bWUKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0aGF0IHRoZSBmaW5hbCByZWRpcmVjdGlu
ZyB0cmFuc2l0aW9uIGZ1bGZpbGxzIHdpdGgKLSAgICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZm9sbG93UmVkaXJlY3RzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cm91dGVyID0gdGhpcy5yb3V0ZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlz
ZVsnY2F0Y2gnXShmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJv
dXRlci5hY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cm91dGVyLmFjdGl2ZVRyYW5zaXRpb24uZm9sbG93UmVkaXJlY3RzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNv
bik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0
b1N0cmluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJUcmFuc2l0aW9u
IChzZXF1ZW5jZSAiICsgdGhpcy5zZXF1ZW5jZSArICIpIjsKLSAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICBAcHJpdmF0ZQotICAgICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBsb2c6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAg
ICAgICAgICBsb2codGhpcy5yb3V0ZXIsIHRoaXMuc2VxdWVuY2UsIG1lc3NhZ2UpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8vIEFsaWFzICd0cmlnZ2VyJyBhcyAnc2Vu
ZCcKLSAgICAgICAgVHJhbnNpdGlvbi5wcm90b3R5cGUuc2VuZCA9IFRyYW5zaXRpb24ucHJvdG90
eXBlLnRyaWdnZXI7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBwcml2YXRlCi0KLSAg
ICAgICAgICAgICAgTG9ncyBhbmQgcmV0dXJucyBhIFRyYW5zaXRpb25BYm9ydGVkIGVycm9yLgot
ICAgICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGxvZ0Fib3J0KHRyYW5zaXRpb24pIHsK
LSAgICAgICAgICAgIGxvZyh0cmFuc2l0aW9uLnJvdXRlciwgdHJhbnNpdGlvbi5zZXF1ZW5jZSwg
ImRldGVjdGVkIGFib3J0LiIpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uQWJv
cnRlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gVHJhbnNpdGlvbkFib3J0ZWQo
bWVzc2FnZSkgewotICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gKG1lc3NhZ2UgfHwgIlRyYW5z
aXRpb25BYm9ydGVkIik7Ci0gICAgICAgICAgICB0aGlzLm5hbWUgPSAiVHJhbnNpdGlvbkFib3J0
ZWQiOwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uVHJhbnNpdGlvbiA9IFRyYW5z
aXRpb247Ci0gICAgICAgIF9fZXhwb3J0c19fLmxvZ0Fib3J0ID0gbG9nQWJvcnQ7Ci0gICAgICAg
IF9fZXhwb3J0c19fLlRyYW5zaXRpb25BYm9ydGVkID0gVHJhbnNpdGlvbkFib3J0ZWQ7Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCJyb3V0ZXIvdXRpbHMiLAotICAgIFsiZXhwb3J0cyJdLAotICAgIGZ1
bmN0aW9uKF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICJ1c2Ugc3RyaWN0IjsKLSAgICAgICAgdmFy
IHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlOwotCi0gICAgICAgIHZhciBfaXNBcnJheTsK
LSAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KSB7Ci0gICAgICAgICAgICBfaXNBcnJheSA9IGZ1
bmN0aW9uICh4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuY2FsbCh4KSA9PT0gIltvYmplY3QgQXJyYXldIjsKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgaXNBcnJheSA9IF9pc0FycmF5OwotICAgICAgICBfX2V4cG9y
dHNfXy5pc0FycmF5ID0gaXNBcnJheTsKLSAgICAgICAgZnVuY3Rpb24gbWVyZ2UoaGFzaCwgb3Ro
ZXIpIHsKLSAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb3RoZXIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAob3RoZXIuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFzaFtwcm9wXSA9IG90aGVyW3Byb3BdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZhciBvQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8
fCBmdW5jdGlvbihwcm90bykgewotICAgICAgICAgICAgZnVuY3Rpb24gRigpIHt9Ci0gICAgICAg
ICAgICBGLnByb3RvdHlwZSA9IHByb3RvOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBGKCk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIF9fZXhwb3J0c19fLm9DcmVhdGUgPSBvQ3JlYXRlOwotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLQotICAgICAgICAgICAgICBFeHRyYWN0cyBx
dWVyeSBwYXJhbXMgZnJvbSB0aGUgZW5kIG9mIGFuIGFycmF5Ci0gICAgICAgICAgICAqKi8KLSAg
ICAgICAgZnVuY3Rpb24gZXh0cmFjdFF1ZXJ5UGFyYW1zKGFycmF5KSB7Ci0gICAgICAgICAgICB2
YXIgbGVuID0gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCksIGhlYWQsIHF1ZXJ5UGFyYW1zOwotCi0g
ICAgICAgICAgICBpZiAobGVuICYmIGxlbiA+IDAgJiYgYXJyYXlbbGVuIC0gMV0gJiYgYXJyYXlb
bGVuIC0gMV0uaGFzT3duUHJvcGVydHkoJ3F1ZXJ5UGFyYW1zJykpIHsKLSAgICAgICAgICAgICAg
ICBxdWVyeVBhcmFtcyA9IGFycmF5W2xlbiAtIDFdLnF1ZXJ5UGFyYW1zOwotICAgICAgICAgICAg
ICAgIGhlYWQgPSBzbGljZS5jYWxsKGFycmF5LCAwLCBsZW4gLSAxKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gW2hlYWQsIHF1ZXJ5UGFyYW1zXTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIFthcnJheSwgbnVsbF07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5leHRyYWN0UXVlcnlQYXJhbXMgPSBleHRyYWN0UXVl
cnlQYXJhbXM7IC8qKgotICAgICAgICAgICAgICBAcHJpdmF0ZQotCi0gICAgICAgICAgICAgIENv
ZXJjZXMgcXVlcnkgcGFyYW0gcHJvcGVydGllcyBhbmQgYXJyYXkgZWxlbWVudHMgaW50byBzdHJp
bmdzLgotICAgICAgICAgICAgKiovCi0gICAgICAgIGZ1bmN0aW9uIGNvZXJjZVF1ZXJ5UGFyYW1z
VG9TdHJpbmcocXVlcnlQYXJhbXMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBxdWVy
eVBhcmFtcykgewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcXVlcnlQYXJhbXNba2V5XSA9
PT0gJ251bWJlcicpIHsKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9ICcn
ICsgcXVlcnlQYXJhbXNba2V5XTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXko
cXVlcnlQYXJhbXNba2V5XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBxdWVyeVBhcmFtc1trZXldLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XVtpXSA9ICcnICsgcXVlcnlQYXJhbXNba2V5XVtp
XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICAgICAgQHByaXZhdGUKLSAgICAg
ICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBsb2cocm91dGVyLCBzZXF1ZW5jZSwgbXNnKSB7
Ci0gICAgICAgICAgICBpZiAoIXJvdXRlci5sb2cpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAz
KSB7Ci0gICAgICAgICAgICAgICAgcm91dGVyLmxvZygiVHJhbnNpdGlvbiAjIiArIHNlcXVlbmNl
ICsgIjogIiArIG1zZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1z
ZyA9IHNlcXVlbmNlOwotICAgICAgICAgICAgICAgIHJvdXRlci5sb2cobXNnKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIF9fZXhwb3J0c19fLmxvZyA9IGxvZzsKLSAgICAg
ICAgZnVuY3Rpb24gYmluZChjb250ZXh0LCBmbikgewotICAgICAgICAgICAgdmFyIGJvdW5kQXJn
cyA9IGFyZ3VtZW50czsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewotICAg
ICAgICAgICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChib3VuZEFyZ3MsIDIpOwotICAgICAg
ICAgICAgICAgIGFyZ3MucHVzaCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFw
cGx5KGNvbnRleHQsIGFyZ3MpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IF9fZXhwb3J0c19fLmJpbmQgPSBiaW5kOwotICAgICAgICBmdW5jdGlvbiBpc1BhcmFtKG9iamVj
dCkgewotICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0ID09PSAic3RyaW5nIiB8fCBv
YmplY3QgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIG9iamVjdCA9PT0gIm51bWJlciIgfHwg
b2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgZnVuY3Rp
b24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbCAmJiBmYWxzZSAhPT0gY2FsbGJhY2soYXJyYXlbaV0p
OyBpKyspIHt9Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5mb3JFYWNoID0gZm9y
RWFjaDsKLSAgICAgICAgZnVuY3Rpb24gdHJpZ2dlcihyb3V0ZXIsIGhhbmRsZXJJbmZvcywgaWdu
b3JlRmFpbHVyZSwgYXJncykgewotICAgICAgICAgICAgaWYgKHJvdXRlci50cmlnZ2VyRXZlbnQp
IHsKLSAgICAgICAgICAgICAgICByb3V0ZXIudHJpZ2dlckV2ZW50KGhhbmRsZXJJbmZvcywgaWdu
b3JlRmFpbHVyZSwgYXJncyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YXIgbmFtZSA9IGFyZ3Muc2hpZnQoKTsKLQotICAgICAgICAgICAg
aWYgKCFoYW5kbGVySW5mb3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWdub3JlRmFpbHVyZSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IHRyaWdnZXIgZXZlbnQgJyIgKyBu
YW1lICsgIicuIFRoZXJlIGFyZSBubyBhY3RpdmUgaGFuZGxlcnMiKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmFyIGV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwotCi0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gaGFuZGxlckluZm9zLmxlbmd0aC0xOyBpID49IDA7IGktLSkgewotICAg
ICAgICAgICAgICAgIHZhciBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXSwKLSAgICAgICAg
ICAgICAgICBoYW5kbGVyID0gaGFuZGxlckluZm8uaGFuZGxlcjsKLQotICAgICAgICAgICAgICAg
IGlmIChoYW5kbGVyLmV2ZW50cyAmJiBoYW5kbGVyLmV2ZW50c1tuYW1lXSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFuZGxlci5ldmVudHNbbmFtZV0uYXBwbHkoaGFuZGxlciwgYXJncykg
PT09IHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZXZlbnRXYXNIYW5kbGVkICYmICFpZ25vcmVG
YWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3RoaW5nIGhhbmRs
ZWQgdGhlIGV2ZW50ICciICsgbmFtZSArICInLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgX19leHBvcnRzX18udHJpZ2dlciA9IHRyaWdnZXI7Ci0gICAgICAgIGZ1bmN0
aW9uIGdldENoYW5nZWxpc3Qob2xkT2JqZWN0LCBuZXdPYmplY3QpIHsKLSAgICAgICAgICAgIHZh
ciBrZXk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHsKLSAgICAgICAgICAgICAgICBhbGw6
IHt9LAotICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LAotICAgICAgICAgICAgICAgIHJlbW92
ZWQ6IHt9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBtZXJnZShyZXN1bHRzLmFsbCwg
bmV3T2JqZWN0KTsKLQotICAgICAgICAgICAgdmFyIGRpZENoYW5nZSA9IGZhbHNlOwotICAgICAg
ICAgICAgY29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZyhvbGRPYmplY3QpOwotICAgICAgICAgICAg
Y29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZyhuZXdPYmplY3QpOwotCi0gICAgICAgICAgICAvLyBD
YWxjdWxhdGUgcmVtb3ZhbHMKLSAgICAgICAgICAgIGZvciAoa2V5IGluIG9sZE9iamVjdCkgewot
ICAgICAgICAgICAgICAgIGlmIChvbGRPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5ld09iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5yZW1vdmVkW2tleV0gPSBvbGRPYmplY3Rba2V5XTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gQ2FsY3VsYXRlIGNoYW5nZXMKLSAgICAgICAgICAgIGZvciAoa2V5IGluIG5ld09i
amVjdCkgewotICAgICAgICAgICAgICAgIGlmIChuZXdPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShvbGRPYmplY3Rba2V5XSkgJiYg
aXNBcnJheShuZXdPYmplY3Rba2V5XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
bGRPYmplY3Rba2V5XS5sZW5ndGggIT09IG5ld09iamVjdFtrZXldLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2hhbmdlZFtrZXldID0gbmV3T2JqZWN0W2tl
eV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ2hhbmdlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBvbGRPYmplY3Rba2V5XS5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE9iamVjdFtrZXldW2ldICE9
PSBuZXdPYmplY3Rba2V5XVtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cy5jaGFuZ2VkW2tleV0gPSBuZXdPYmplY3Rba2V5XTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZENoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob2xkT2JqZWN0W2tleV0gIT09IG5ld09iamVjdFtrZXldKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jaGFuZ2VkW2tleV0gPSBuZXdP
YmplY3Rba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZGlkQ2hh
bmdlICYmIHJlc3VsdHM7Ci0gICAgICAgIH0KLQotICAgICAgICBfX2V4cG9ydHNfXy5nZXRDaGFu
Z2VsaXN0ID0gZ2V0Q2hhbmdlbGlzdDsKLSAgICAgICAgZnVuY3Rpb24gcHJvbWlzZUxhYmVsKGxh
YmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gJ1JvdXRlcjogJyArIGxhYmVsOwotICAgICAgICB9
Ci0KLSAgICAgICAgX19leHBvcnRzX18ucHJvbWlzZUxhYmVsID0gcHJvbWlzZUxhYmVsOwotICAg
ICAgICBmdW5jdGlvbiBzdWJjbGFzcyhwYXJlbnRDb25zdHJ1Y3RvciwgcHJvdG8pIHsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIEMocHJvcHMpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnRDb25zdHJ1
Y3Rvci5jYWxsKHRoaXMsIHByb3BzIHx8IHt9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEMucHJvdG90eXBlID0gb0NyZWF0ZShwYXJlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpOwotICAg
ICAgICAgICAgbWVyZ2UoQy5wcm90b3R5cGUsIHByb3RvKTsKLSAgICAgICAgICAgIHJldHVybiBD
OwotICAgICAgICB9Ci0KLSAgICAgICAgX19leHBvcnRzX18uc3ViY2xhc3MgPSBzdWJjbGFzczsK
LSAgICAgICAgX19leHBvcnRzX18ubWVyZ2UgPSBtZXJnZTsKLSAgICAgICAgX19leHBvcnRzX18u
c2xpY2UgPSBzbGljZTsKLSAgICAgICAgX19leHBvcnRzX18uaXNQYXJhbSA9IGlzUGFyYW07Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmNvZXJjZVF1ZXJ5UGFyYW1zVG9TdHJpbmcgPSBjb2VyY2VRdWVy
eVBhcmFtc1RvU3RyaW5nOwotICAgIH0pOwotICAgIGRlZmluZSgicm91dGVyIiwKLSAgICBbIi4v
cm91dGVyL3JvdXRlciIsICJleHBvcnRzIl0sCi0gICAgZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9f
LCBfX2V4cG9ydHNfXykgewotICAgICAgICAidXNlIHN0cmljdCI7Ci0gICAgICAgIHZhciBSb3V0
ZXIgPSBfX2RlcGVuZGVuY3kxX19bImRlZmF1bHQiXTsKLQotICAgICAgICBfX2V4cG9ydHNfX1si
ZGVmYXVsdCJdID0gUm91dGVyOwotICAgIH0pOwotICAgIC8qKgotICAgICAgQGNsYXNzIFJTVlAK
LSAgICAgIEBtb2R1bGUgUlNWUAotICAgICAgKi8KLSAgICBkZWZpbmUoJ3JzdnAvLWludGVybmFs
JywgWwotICAgICcuL3V0aWxzJywKLSAgICAnLi9pbnN0cnVtZW50JywKLSAgICAnLi9jb25maWcn
LAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVw
ZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNl
IHN0cmljdCc7Ci0gICAgICAgIHZhciBvYmplY3RPckZ1bmN0aW9uID0gX19kZXBlbmRlbmN5MV9f
Lm9iamVjdE9yRnVuY3Rpb247Ci0gICAgICAgIHZhciBpc0Z1bmN0aW9uID0gX19kZXBlbmRlbmN5
MV9fLmlzRnVuY3Rpb247Ci0gICAgICAgIHZhciBub3cgPSBfX2RlcGVuZGVuY3kxX18ubm93Owot
ICAgICAgICB2YXIgaW5zdHJ1bWVudCA9IF9fZGVwZW5kZW5jeTJfX1snZGVmYXVsdCddOwotICAg
ICAgICB2YXIgY29uZmlnID0gX19kZXBlbmRlbmN5M19fLmNvbmZpZzsKLSAgICAgICAgZnVuY3Rp
b24gbm9vcCgpIHt9Ci0gICAgICAgIHZhciBQRU5ESU5HID0gdm9pZCAwOwotICAgICAgICB2YXIg
RlVMRklMTEVEID0gMTsKLSAgICAgICAgdmFyIFJFSkVDVEVEID0gMjsKLSAgICAgICAgdmFyIEdF
VF9USEVOX0VSUk9SID0gbmV3IEVycm9yT2JqZWN0KCk7Ci0gICAgICAgIGZ1bmN0aW9uIGdldFRo
ZW4ocHJvbWlzZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cHJvbWlzZS50aGVuOwotICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yOwotICAgICAgICAgICAgICAgIHJldHVy
biBHRVRfVEhFTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5j
dGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhh
bmRsZXIpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdGhlbi5jYWxsKHZh
bHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAg
fSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNl
LCB0aGVuYWJsZSwgdGhlbikgewotICAgICAgICAgICAgY29uZmlnLmFzeW5jKGZ1bmN0aW9uIChw
cm9taXNlJDIpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VhbGVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgdmFyIGVycm9yID0gdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24gKHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWFsZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBzZWFsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhlbmFibGUgIT09
IHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHByb21pc2UkMiwgdmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZnVsZmlsbChwcm9taXNlJDIsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHNlYWxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNlYWxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlamVjdChwcm9taXNlJDIsIHJlYXNvbik7Ci0gICAgICAgICAgICAgICAg
fSwgJ1NldHRsZTogJyArIChwcm9taXNlJDIuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykp
OwotICAgICAgICAgICAgICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNlYWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJlamVjdChwcm9taXNl
JDIsIGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBwcm9taXNlKTsK
LSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0
aGVuYWJsZSkgewotICAgICAgICAgICAgcHJvbWlzZS5fb25lcnJvciA9IG51bGw7Ci0gICAgICAg
ICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHsKLSAgICAgICAgICAgICAg
ICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHsKLSAgICAgICAgICAgICAgICByZWpl
Y3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKHByb21p
c2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sIGZ1
bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIHJl
YXNvbik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxl
KSB7Ci0gICAgICAgICAgICBpZiAobWF5YmVUaGVuYWJsZSBpbnN0YW5jZW9mIHByb21pc2UuY29u
c3RydWN0b3IpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCBt
YXliZVRoZW5hYmxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHRoZW4gPSBnZXRUaGVuKG1heWJlVGhlbmFibGUpOwotICAgICAgICAgICAgICAgIGlmICh0aGVu
ID09PSBHRVRfVEhFTl9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZWplY3QocHJvbWlz
ZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhl
biA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwocHJvbWlzZSwg
bWF5YmVUaGVuYWJsZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRo
ZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNl
LCBtYXliZVRoZW5hYmxlLCB0aGVuKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiByZXNv
bHZlKHByb21pc2UsIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBo
YW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7
Ci0gICAgICAgICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikgewotICAgICAgICAgICAgICAgIHBy
b21pc2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHB1Ymxpc2gocHJvbWlzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gZnVsZmls
bChwcm9taXNlLCB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQ
RU5ESU5HKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7Ci0gICAgICAgICAgICBwcm9taXNlLl9zdGF0
ZSA9IEZVTEZJTExFRDsKLSAgICAgICAgICAgIGlmIChwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5n
dGggPT09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmluc3RydW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCgnZnVsZmlsbGVkJywgcHJvbWlzZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25m
aWcuYXN5bmMocHVibGlzaCwgcHJvbWlzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZnVuY3Rpb24gcmVqZWN0KHByb21pc2UsIHJlYXNvbikgewotICAgICAgICAgICAgaWYg
KHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDsKLSAg
ICAgICAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjsKLSAgICAgICAgICAgIGNvbmZpZy5h
c3luYyhwdWJsaXNoUmVqZWN0aW9uLCBwcm9taXNlKTsKLSAgICAgICAgfQotICAgICAgICBmdW5j
dGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24p
IHsKLSAgICAgICAgICAgIHZhciBzdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7Ci0g
ICAgICAgICAgICB2YXIgbGVuZ3RoID0gc3Vic2NyaWJlcnMubGVuZ3RoOwotICAgICAgICAgICAg
cGFyZW50Ll9vbmVycm9yID0gbnVsbDsKLSAgICAgICAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0g
PSBjaGlsZDsKLSAgICAgICAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBv
bkZ1bGZpbGxtZW50OwotICAgICAgICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURd
ID0gb25SZWplY3Rpb247Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5f
c3RhdGUpIHsKLSAgICAgICAgICAgICAgICBjb25maWcuYXN5bmMocHVibGlzaCwgcGFyZW50KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBwdWJsaXNoKHByb21p
c2UpIHsKLSAgICAgICAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJz
OwotICAgICAgICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTsKLSAgICAgICAgICAg
IGlmIChjb25maWcuaW5zdHJ1bWVudCkgewotICAgICAgICAgICAgICAgIGluc3RydW1lbnQoc2V0
dGxlZCA9PT0gRlVMRklMTEVEID8gJ2Z1bGZpbGxlZCcgOiAncmVqZWN0ZWQnLCBwcm9taXNlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2
YXIgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7Ci0gICAg
ICAgICAgICAgICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTsKLSAgICAgICAgICAgICAgICBjYWxs
YmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQs
IGNhbGxiYWNrLCBkZXRhaWwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKGRldGFpbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBmdW5jdGlvbiBFcnJvck9iamVjdCgpIHsKLSAgICAgICAgICAgIHRoaXMu
ZXJyb3IgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHZhciBUUllfQ0FUQ0hfRVJST1IgPSBu
ZXcgRXJyb3JPYmplY3QoKTsKLSAgICAgICAgZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRl
dGFpbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJh
Y2soZGV0YWlsKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBU
UllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlOwotICAgICAgICAgICAgICAgIHJldHVybiBUUllfQ0FU
Q0hfRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gaW52
b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkgewotICAgICAg
ICAgICAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksIHZhbHVlLCBlcnJv
ciwgc3VjY2VlZGVkLCBmYWlsZWQ7Ci0gICAgICAgICAgICBpZiAoaGFzQ2FsbGJhY2spIHsKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHRyeUNhdGNoKGNhbGxiYWNrLCBkZXRhaWwpOwotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yID0gdmFsdWUu
ZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlz
ZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHZhbHVlID0gZGV0YWlsOwotICAgICAgICAgICAgICAgIHN1
Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHJvbWlzZS5f
c3RhdGUgIT09IFBFTkRJTkcpIHt9Ci0gICAgICAgICAgICAvLyBub29wCi0gICAgICAgICAgICBl
bHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHsKLSAgICAgICAgICAgICAgICByZXNv
bHZlKHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7Ci0g
ICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc2V0dGxlZCA9PT0gRlVMRklMTEVEKSB7Ci0gICAgICAgICAgICAgICAgZnVsZmlsbChw
cm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IFJFSkVD
VEVEKSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9t
aXNlLCByZXNvbHZlcikgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXNv
bHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkgewotICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiBy
ZWplY3RQcm9taXNlKHJlYXNvbikgewotICAgICAgICAgICAgICAgICAgICByZWplY3QocHJvbWlz
ZSwgcmVhc29uKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICByZWplY3QocHJvbWlzZSwgZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgX19leHBvcnRzX18ubm9vcCA9IG5vb3A7Ci0gICAgICAgIF9fZXhw
b3J0c19fLnJlc29sdmUgPSByZXNvbHZlOwotICAgICAgICBfX2V4cG9ydHNfXy5yZWplY3QgPSBy
ZWplY3Q7Ci0gICAgICAgIF9fZXhwb3J0c19fLmZ1bGZpbGwgPSBmdWxmaWxsOwotICAgICAgICBf
X2V4cG9ydHNfXy5zdWJzY3JpYmUgPSBzdWJzY3JpYmU7Ci0gICAgICAgIF9fZXhwb3J0c19fLnB1
Ymxpc2ggPSBwdWJsaXNoOwotICAgICAgICBfX2V4cG9ydHNfXy5wdWJsaXNoUmVqZWN0aW9uID0g
cHVibGlzaFJlamVjdGlvbjsKLSAgICAgICAgX19leHBvcnRzX18uaW5pdGlhbGl6ZVByb21pc2Ug
PSBpbml0aWFsaXplUHJvbWlzZTsKLSAgICAgICAgX19leHBvcnRzX18uaW52b2tlQ2FsbGJhY2sg
PSBpbnZva2VDYWxsYmFjazsKLSAgICAgICAgX19leHBvcnRzX18uRlVMRklMTEVEID0gRlVMRklM
TEVEOwotICAgICAgICBfX2V4cG9ydHNfXy5SRUpFQ1RFRCA9IFJFSkVDVEVEOwotICAgIH0pOwot
ICAgIGRlZmluZSgncnN2cC9hbGwtc2V0dGxlZCcsIFsKLSAgICAnLi9lbnVtZXJhdG9yJywKLSAg
ICAnLi9wcm9taXNlJywKLSAgICAnLi91dGlscycsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVu
Y3Rpb24gKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18s
IF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIEVudW1l
cmF0b3IgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIG1ha2VTZXR0
bGVkUmVzdWx0ID0gX19kZXBlbmRlbmN5MV9fLm1ha2VTZXR0bGVkUmVzdWx0OwotICAgICAgICB2
YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTJfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgb19j
cmVhdGUgPSBfX2RlcGVuZGVuY3kzX18ub19jcmVhdGU7Ci0gICAgICAgIGZ1bmN0aW9uIEFsbFNl
dHRsZWQoQ29uc3RydWN0b3IsIGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgICAgICAgICB0aGlzLl9z
dXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9yLCBlbnRyaWVzLCBmYWxzZSwgbGFiZWwpOwotICAg
ICAgICB9Ci0gICAgICAgIEFsbFNldHRsZWQucHJvdG90eXBlID0gb19jcmVhdGUoRW51bWVyYXRv
ci5wcm90b3R5cGUpOwotICAgICAgICBBbGxTZXR0bGVkLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1
Y3RvciA9IEVudW1lcmF0b3I7Ci0gICAgICAgIEFsbFNldHRsZWQucHJvdG90eXBlLl9tYWtlUmVz
dWx0ID0gbWFrZVNldHRsZWRSZXN1bHQ7Ci0gICAgICAgIEFsbFNldHRsZWQucHJvdG90eXBlLl92
YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVy
cm9yKCdhbGxTZXR0bGVkIG11c3QgYmUgY2FsbGVkIHdpdGggYW4gYXJyYXknKTsKLSAgICAgICAg
fTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLmFsbFNldHRsZWRgIGlzIHNpbWls
YXIgdG8gYFJTVlAuYWxsYCwgYnV0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nCi0gICAgICAgICAg
ICAgIGEgZmFpbC1mYXN0IG1ldGhvZCwgaXQgd2FpdHMgdW50aWwgYWxsIHRoZSBwcm9taXNlcyBo
YXZlIHJldHVybmVkIGFuZAotICAgICAgICAgICAgICBzaG93cyB5b3UgYWxsIHRoZSByZXN1bHRz
LiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBoYW5kbGUgbXVsdGlwbGUKLSAgICAgICAg
ICAgICAgcHJvbWlzZXMnIGZhaWx1cmUgc3RhdGVzIHRvZ2V0aGVyIGFzIGEgc2V0LgotCi0gICAg
ICAgICAgICAgIFJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIHRo
ZSBnaXZlbiBwcm9taXNlcyBoYXZlIGJlZW4KLSAgICAgICAgICAgICAgc2V0dGxlZC4gVGhlIHJl
dHVybiBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIHRoZSBzdGF0ZXMgb2YK
LSAgICAgICAgICAgICAgdGhlIHByb21pc2VzIHBhc3NlZCBpbnRvIHRoZSBgcHJvbWlzZXNgIGFy
cmF5IGFyZ3VtZW50LgotCi0gICAgICAgICAgICAgIEVhY2ggc3RhdGUgb2JqZWN0IHdpbGwgZWl0
aGVyIGluZGljYXRlIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiwgYW5kCi0gICAgICAgICAgICAg
IHByb3ZpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb3IgcmVhc29uLiBUaGUgc3RhdGVzIHdp
bGwgdGFrZSBvbmUgb2YKLSAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgotCi0g
ICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgeyBzdGF0ZTogJ2Z1bGZp
bGxlZCcsIHZhbHVlOiB2YWx1ZSB9Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAg
eyBzdGF0ZTogJ3JlamVjdGVkJywgcmVhc29uOiByZWFzb24gfQotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgICAgICAgdmFyIHByb21pc2UxID0gUlNWUC5Qcm9taXNlLnJlc29sdmUoMSk7Ci0g
ICAgICAgICAgICAgIHZhciBwcm9taXNlMiA9IFJTVlAuUHJvbWlzZS5yZWplY3QobmV3IEVycm9y
KCcyJykpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTMgPSBSU1ZQLlByb21pc2UucmVqZWN0
KG5ldyBFcnJvcignMycpKTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNl
MSwgcHJvbWlzZTIsIHByb21pc2UzIF07Ci0KLSAgICAgICAgICAgICAgUlNWUC5hbGxTZXR0bGVk
KHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKLSAgICAgICAgICAgICAgICAvLyBhcnJh
eSA9PSBbCi0gICAgICAgICAgICAgICAgLy8gICB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6
IDEgfSwKLSAgICAgICAgICAgICAgICAvLyAgIHsgc3RhdGU6ICdyZWplY3RlZCcsIHJlYXNvbjog
RXJyb3IgfSwKLSAgICAgICAgICAgICAgICAvLyAgIHsgc3RhdGU6ICdyZWplY3RlZCcsIHJlYXNv
bjogRXJyb3IgfQotICAgICAgICAgICAgICAgIC8vIF0KLSAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgZm9yIHRoZSBzZWNvbmQgaXRlbSwgcmVhc29uLm1lc3NhZ2Ugd2lsbCBiZSAiMiIsIGFu
ZCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgLy8gdGhpcmQgaXRlbSwgcmVhc29uLm1lc3NhZ2Ug
d2lsbCBiZSAiMyIuCi0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gTm90IHJ1bi4gKFRoaXMgYmxvY2sgd291bGQgb25seSBiZSBjYWxsZWQgaWYg
YWxsU2V0dGxlZCBoYWQgZmFpbGVkLAotICAgICAgICAgICAgICAgIC8vIGZvciBpbnN0YW5jZSBp
ZiBwYXNzZWQgYW4gaW5jb3JyZWN0IGFyZ3VtZW50IHR5cGUuKQotICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBhbGxTZXR0bGVkCi0g
ICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZvciBSU1ZQCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5n
fSBsYWJlbCAtIG9wdGlvbmFsIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvbWlzZS4KLSAg
ICAgICAgICAgICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgICAgICAgICAgICBAcmV0dXJuIHtQ
cm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgdGhlIHNl
dHRsZWQKLSAgICAgICAgICAgICAgc3RhdGVzIG9mIHRoZSBjb25zdGl0dWVudCBwcm9taXNlcy4K
LSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlv
biBhbGxTZXR0bGVkKGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEFs
bFNldHRsZWQoUHJvbWlzZSwgZW50cmllcywgbGFiZWwpLnByb21pc2U7Ci0gICAgICAgIH07Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCdyc3ZwL2FsbCcsIFsKLSAgICAnLi9wcm9taXNlJywKLSAgICAn
ZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykg
ewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAgIHZhciBQcm9taXNlID0gX19kZXBlbmRl
bmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGlzIGEg
Y29udmVuaWVudCBhbGlhcyBmb3IgYFJTVlAuUHJvbWlzZS5hbGxgLgotCi0gICAgICAgICAgICAg
IEBtZXRob2QgYWxsCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZvciBS
U1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IG9mIHByb21pc2Vz
LgotICAgICAgICAgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgQW4gb3B0aW9uYWwgbGFiZWwu
IFRoaXMgaXMgdXNlZnVsCi0gICAgICAgICAgICAgIGZvciB0b29saW5nLgotICAgICAgICAgICAg
Ki8KLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIGFsbChhcnJheSwg
bGFiZWwpIHsKLSAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChhcnJheSwgbGFiZWwpOwot
ICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9hc2FwJywgWydleHBvcnRzJ10s
IGZ1bmN0aW9uIChfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAg
IHZhciBsZW5ndGggPSAwOwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rp
b24gYXNhcChjYWxsYmFjaywgYXJnKSB7Ci0gICAgICAgICAgICBxdWV1ZVtsZW5ndGhdID0gY2Fs
bGJhY2s7Ci0gICAgICAgICAgICBxdWV1ZVtsZW5ndGggKyAxXSA9IGFyZzsKLSAgICAgICAgICAg
IGxlbmd0aCArPSAyOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA9PT0gMikgewotICAgICAgICAg
ICAgICAgIC8vIElmIGxlbmd0aCBpcyAxLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hl
ZHVsZSBhbiBhc3luYyBmbHVzaC4KLSAgICAgICAgICAgICAgICAvLyBJZiBhZGRpdGlvbmFsIGNh
bGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleQotICAg
ICAgICAgICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBh
cmUgc2NoZWR1bGluZy4KLSAgICAgICAgICAgICAgICBzY2hlZHVsZUZsdXNoKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIHZhciBicm93c2VyR2xvYmFsID0gdHlwZW9mIHdp
bmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fTsKLSAgICAgICAgdmFyIEJyb3dzZXJN
dXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dz
ZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjsKLSAgICAgICAgLy8gdGVzdCBmb3Igd2Vi
IHdvcmtlciBidXQgbm90IGluIElFMTAKLSAgICAgICAgdmFyIGlzV29ya2VyID0gdHlwZW9mIFVp
bnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAh
PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJzsK
LSAgICAgICAgLy8gbm9kZQotICAgICAgICBmdW5jdGlvbiB1c2VOZXh0VGljaygpIHsKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0
VGljayhmbHVzaCk7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9u
IHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7Ci0gICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IDA7
Ci0gICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIo
Zmx1c2gpOwotICAgICAgICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgn
Jyk7Ci0gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsKLSAgICAgICAgICAgICAg
ICBjaGFyYWN0ZXJEYXRhOiB0cnVlIAotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IGl0ZXJhdGlvbnMg
PSArK2l0ZXJhdGlvbnMgJSAyOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgICAv
LyB3ZWIgd29ya2VyCi0gICAgICAgIGZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkgewotICAg
ICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICAgICAgICAg
IGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7Ci0gICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHVzZVNldFRpbWVv
dXQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoZmx1c2gsIDEpOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg
ICB2YXIgcXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7Ci0gICAgICAgIGZ1bmN0aW9uIGZsdXNoKCkg
ewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikgewotICAg
ICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldOwotICAgICAgICAgICAgICAgIHZh
ciBhcmcgPSBxdWV1ZVtpICsgMV07Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soYXJnKTsKLSAg
ICAgICAgICAgICAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBxdWV1
ZVtpICsgMV0gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGgg
PSAwOwotICAgICAgICB9Ci0gICAgICAgIHZhciBzY2hlZHVsZUZsdXNoOwotICAgICAgICAvLyBE
ZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBv
ZiBxdWV1ZWQgY2FsbGJhY2tzOgotICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRl
ZmluZWQnICYmIHt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3Nd
JykgewotICAgICAgICAgICAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIHNjaGVk
dWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNX
b3JrZXIpIHsKLSAgICAgICAgICAgIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRp
bWVvdXQoKTsKLSAgICAgICAgfQotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9jb25maWcnLCBb
Ci0gICAgJy4vZXZlbnRzJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBl
bmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAg
IHZhciBFdmVudFRhcmdldCA9IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAgICB2
YXIgY29uZmlnID0gewotICAgICAgICAgICAgaW5zdHJ1bWVudDogZmFsc2UgCi0gICAgICAgIH07
Ci0gICAgICAgIEV2ZW50VGFyZ2V0Lm1peGluKGNvbmZpZyk7Ci0gICAgICAgIGZ1bmN0aW9uIGNv
bmZpZ3VyZShuYW1lLCB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdvbmVycm9y
JykgewotICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgbGVnYWN5IHVzZXJzIHRoYXQgZXhw
ZWN0IHRoZSBhY3R1YWwKLSAgICAgICAgICAgICAgICAvLyBlcnJvciB0byBiZSBwYXNzZWQgdG8g
dGhlaXIgZnVuY3Rpb24gYWRkZWQgdmlhCi0gICAgICAgICAgICAgICAgLy8gYFJTVlAuY29uZmln
dXJlKCdvbmVycm9yJywgc29tZUZ1bmN0aW9uSGVyZSk7YAotICAgICAgICAgICAgICAgIGNvbmZp
Zy5vbignZXJyb3InLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKLSAgICAgICAg
ICAgICAgICBjb25maWdbbmFtZV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ1tuYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBfX2V4cG9ydHNfXy5jb25maWcgPSBjb25maWc7Ci0gICAgICAgIF9fZXhwb3J0
c19fLmNvbmZpZ3VyZSA9IGNvbmZpZ3VyZTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvZGVm
ZXInLCBbCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24g
KF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwot
ICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAg
ICAvKioKLSAgICAgICAgICAgICAgYFJTVlAuZGVmZXJgIHJldHVybnMgYW4gb2JqZWN0IHNpbWls
YXIgdG8galF1ZXJ5J3MgYCQuRGVmZXJyZWRgLgotICAgICAgICAgICAgICBgUlNWUC5kZWZlcmAg
c2hvdWxkIGJlIHVzZWQgd2hlbiBwb3J0aW5nIG92ZXIgY29kZSByZWxpYW50IG9uIGAkLkRlZmVy
cmVkYCdzCi0gICAgICAgICAgICAgIGludGVyZmFjZS4gTmV3IGNvZGUgc2hvdWxkIHVzZSB0aGUg
YFJTVlAuUHJvbWlzZWAgY29uc3RydWN0b3IgaW5zdGVhZC4KLQotICAgICAgICAgICAgICBUaGUg
b2JqZWN0IHJldHVybmVkIGZyb20gYFJTVlAuZGVmZXJgIGlzIGEgcGxhaW4gb2JqZWN0IHdpdGgg
dGhyZWUgcHJvcGVydGllczoKLQotICAgICAgICAgICAgICAqIHByb21pc2UgLSBhbiBgUlNWUC5Q
cm9taXNlYC4KLSAgICAgICAgICAgICAgKiByZWplY3QgLSBhIGZ1bmN0aW9uIHRoYXQgY2F1c2Vz
IHRoZSBgcHJvbWlzZWAgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8KLSAgICAgICAgICAgICAg
ICBiZWNvbWUgcmVqZWN0ZWQKLSAgICAgICAgICAgICAgKiByZXNvbHZlIC0gYSBmdW5jdGlvbiB0
aGF0IGNhdXNlcyB0aGUgYHByb21pc2VgIHByb3BlcnR5IG9uIHRoaXMgb2JqZWN0IHRvCi0gICAg
ICAgICAgICAgICAgYmVjb21lIGZ1bGZpbGxlZC4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgot
Ci0gICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgICB2YXIgZGVmZXJy
ZWQgPSBSU1ZQLmRlZmVyKCk7Ci0KLSAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoIlN1
Y2Nlc3MhIik7Ci0KLSAgICAgICAgICAgICAgIGRlZmVyZWQucHJvbWlzZS50aGVuKGZ1bmN0aW9u
KHZhbHVlKXsKLSAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaGVyZSBpcyAiU3VjY2VzcyEiCi0g
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgZGVmZXIKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAZm9yIFJT
VlAKLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBm
b3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGlu
Zy4KLSAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fQotICAgICAgICAgICAgICovCi0gICAg
ICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBkZWZlcihsYWJlbCkgewotICAg
ICAgICAgICAgdmFyIGRlZmVycmVkID0ge307Ci0gICAgICAgICAgICBkZWZlcnJlZC5wcm9taXNl
ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAg
ICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZlOwotICAgICAgICAgICAgICAgIGRlZmVycmVk
LnJlamVjdCA9IHJlamVjdDsKLSAgICAgICAgICAgIH0sIGxhYmVsKTsKLSAgICAgICAgICAgIHJl
dHVybiBkZWZlcnJlZDsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvZW51
bWVyYXRvcicsIFsKLSAgICAnLi91dGlscycsCi0gICAgJy4vLWludGVybmFsJywKLSAgICAnZXhw
b3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18s
IF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIGlzQXJy
YXkgPSBfX2RlcGVuZGVuY3kxX18uaXNBcnJheTsKLSAgICAgICAgdmFyIGlzTWF5YmVUaGVuYWJs
ZSA9IF9fZGVwZW5kZW5jeTFfXy5pc01heWJlVGhlbmFibGU7Ci0gICAgICAgIHZhciBub29wID0g
X19kZXBlbmRlbmN5Ml9fLm5vb3A7Ci0gICAgICAgIHZhciByZWplY3QgPSBfX2RlcGVuZGVuY3ky
X18ucmVqZWN0OwotICAgICAgICB2YXIgZnVsZmlsbCA9IF9fZGVwZW5kZW5jeTJfXy5mdWxmaWxs
OwotICAgICAgICB2YXIgc3Vic2NyaWJlID0gX19kZXBlbmRlbmN5Ml9fLnN1YnNjcmliZTsKLSAg
ICAgICAgdmFyIEZVTEZJTExFRCA9IF9fZGVwZW5kZW5jeTJfXy5GVUxGSUxMRUQ7Ci0gICAgICAg
IHZhciBSRUpFQ1RFRCA9IF9fZGVwZW5kZW5jeTJfXy5SRUpFQ1RFRDsKLSAgICAgICAgdmFyIFBF
TkRJTkcgPSBfX2RlcGVuZGVuY3kyX18uUEVORElORzsKLSAgICAgICAgdmFyIEFCT1JUX09OX1JF
SkVDVElPTiA9IHRydWU7Ci0gICAgICAgIF9fZXhwb3J0c19fLkFCT1JUX09OX1JFSkVDVElPTiA9
IEFCT1JUX09OX1JFSkVDVElPTjsKLSAgICAgICAgZnVuY3Rpb24gbWFrZVNldHRsZWRSZXN1bHQo
c3RhdGUsIHBvc2l0aW9uLCB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKHN0YXRlID09PSBGVUxG
SUxMRUQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICBz
dGF0ZTogJ2Z1bGZpbGxlZCcsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAncmVqZWN0ZWQnLAotICAgICAgICAg
ICAgICAgICAgICByZWFzb246IHZhbHVlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBfX2V4cG9ydHNfXy5tYWtlU2V0dGxlZFJlc3VsdCA9IG1h
a2VTZXR0bGVkUmVzdWx0OwotICAgICAgICBmdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9y
LCBpbnB1dCwgYWJvcnRPblJlamVjdCwgbGFiZWwpIHsKLSAgICAgICAgICAgIHRoaXMuX2luc3Rh
bmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjsKLSAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9
IG5ldyBDb25zdHJ1Y3Rvcihub29wLCBsYWJlbCk7Ci0gICAgICAgICAgICB0aGlzLl9hYm9ydE9u
UmVqZWN0ID0gYWJvcnRPblJlamVjdDsKLSAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZUlu
cHV0KGlucHV0KSkgewotICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAg
dGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoOwotICAgICAgICAgICAgICAgIHRoaXMuX2lu
aXQoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlz
Lmxlbmd0aCB8fCAwOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnVtZXJhdGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLnByb21pc2UsIHRoaXMuX3ZhbGlkYXRpb25F
cnJvcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBFbnVtZXJhdG9yLnBy
b3RvdHlwZS5fdmFsaWRhdGVJbnB1dCA9IGZ1bmN0aW9uIChpbnB1dCkgewotICAgICAgICAgICAg
cmV0dXJuIGlzQXJyYXkoaW5wdXQpOwotICAgICAgICB9OwotICAgICAgICBFbnVtZXJhdG9yLnBy
b3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7
Ci0gICAgICAgIH07Ci0gICAgICAgIEVudW1lcmF0b3IucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3Ro
KTsKLSAgICAgICAgfTsKLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IEVudW1lcmF0
b3I7Ci0gICAgICAgIEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICB2
YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTsKLSAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMu
X2lucHV0OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSBQ
RU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHRoaXMuX2VhY2hF
bnRyeShpbnB1dFtpXSwgaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIEVu
dW1lcmF0b3IucHJvdG90eXBlLl9lYWNoRW50cnkgPSBmdW5jdGlvbiAoZW50cnksIGkpIHsKLSAg
ICAgICAgICAgIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjsKLSAgICAgICAgICAg
IGlmIChpc01heWJlVGhlbmFibGUoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5
LmNvbnN0cnVjdG9yID09PSBjICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykgewotICAgICAg
ICAgICAgICAgICAgICBlbnRyeS5fb25lcnJvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dpbGxTZXR0bGVB
dChjLnJlc29sdmUoZW50cnkpLCBpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuX3JlbWFpbmluZy0tOwotICAgICAgICAgICAg
ICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHRoaXMuX21ha2VSZXN1bHQoRlVMRklMTEVELCBpLCBlbnRy
eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIEVudW1lcmF0b3IucHJvdG90
eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7Ci0gICAgICAgICAg
ICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTsKLSAgICAgICAgICAgIGlmIChwcm9taXNlLl9z
dGF0ZSA9PT0gUEVORElORykgewotICAgICAgICAgICAgICAgIHRoaXMuX3JlbWFpbmluZy0tOwot
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hYm9ydE9uUmVqZWN0ICYmIHN0YXRlID09PSBSRUpF
Q1RFRCkgewotICAgICAgICAgICAgICAgICAgICByZWplY3QocHJvbWlzZSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3VsdFtp
XSA9IHRoaXMuX21ha2VSZXN1bHQoc3RhdGUsIGksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7
Ci0gICAgICAgICAgICAgICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9OwotICAgICAgICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fbWFrZVJl
c3VsdCA9IGZ1bmN0aW9uIChzdGF0ZSwgaSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgRW51bWVyYXRvci5wcm90b3R5cGUuX3dpbGxTZXR0
bGVBdCA9IGZ1bmN0aW9uIChwcm9taXNlLCBpKSB7Ci0gICAgICAgICAgICB2YXIgZW51bWVyYXRv
ciA9IHRoaXM7Ci0gICAgICAgICAgICBzdWJzY3JpYmUocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5j
dGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVM
RklMTEVELCBpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0g
ICAgICAgICAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24p
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3Zw
L2V2ZW50cycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoX19leHBvcnRzX18pIHsKLSAgICAgICAg
J3VzZSBzdHJpY3QnOwotICAgICAgICBmdW5jdGlvbiBpbmRleE9mKGNhbGxiYWNrcywgY2FsbGJh
Y2spIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FsbGJhY2tzLmxlbmd0aDsg
aSA8IGw7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAg
ICBmdW5jdGlvbiBjYWxsYmFja3NGb3Iob2JqZWN0KSB7Ci0gICAgICAgICAgICB2YXIgY2FsbGJh
Y2tzID0gb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzOwotICAgICAgICAgICAgaWYgKCFjYWxsYmFj
a3MpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja3MgPSBvYmplY3QuX3Byb21pc2VDYWxsYmFj
a3MgPSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjYWxsYmFja3M7Ci0g
ICAgICAgIH0KLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBjbGFzcyBSU1ZQLkV2ZW50VGFy
Z2V0Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gewot
ICAgICAgICAgICAgbWl4aW46IGZ1bmN0aW9uIChvYmplY3QpIHsKLSAgICAgICAgICAgICAgICBv
YmplY3Qub24gPSB0aGlzLm9uOwotICAgICAgICAgICAgICAgIG9iamVjdC5vZmYgPSB0aGlzLm9m
ZjsKLSAgICAgICAgICAgICAgICBvYmplY3QudHJpZ2dlciA9IHRoaXMudHJpZ2dlcjsKLSAgICAg
ICAgICAgICAgICBvYmplY3QuX3Byb21pc2VDYWxsYmFja3MgPSB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvbjog
ZnVuY3Rpb24gKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICB2YXIgYWxs
Q2FsbGJhY2tzID0gY2FsbGJhY2tzRm9yKHRoaXMpLCBjYWxsYmFja3M7Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV07Ci0gICAgICAgICAgICAgICAg
aWYgKCFjYWxsYmFja3MpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzID0gYWxsQ2Fs
bGJhY2tzW2V2ZW50TmFtZV0gPSBbXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKGluZGV4T2YoY2FsbGJhY2tzLCBjYWxsYmFjaykgPT09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgb2ZmOiBmdW5jdGlvbiAoZXZlbnROYW1lLCBjYWxs
YmFjaykgewotICAgICAgICAgICAgICAgIHZhciBhbGxDYWxsYmFja3MgPSBjYWxsYmFja3NGb3Io
dGhpcyksIGNhbGxiYWNrcywgaW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykg
ewotICAgICAgICAgICAgICAgICAgICBhbGxDYWxsYmFja3NbZXZlbnROYW1lXSA9IFtdOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdOwotICAgICAgICAgICAgICAg
IGluZGV4ID0gaW5kZXhPZihjYWxsYmFja3MsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2Uo
aW5kZXgsIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICB0cmlnZ2VyOiBmdW5jdGlvbiAoZXZlbnROYW1lLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGFsbENhbGxiYWNrcyA9IGNhbGxiYWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzLCBjYWxs
YmFja1R1cGxlLCBjYWxsYmFjaywgYmluZGluZzsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJh
Y2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RG9uJ3QgY2FjaGUgdGhlIGNhbGxiYWNrcy5sZW5ndGggc2luY2UgaXQgbWF5IGdyb3cKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ldOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAg
fSk7Ci0gICAgZGVmaW5lKCdyc3ZwL2ZpbHRlcicsIFsKLSAgICAnLi9wcm9taXNlJywKLSAgICAn
Li91dGlscycsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFf
XywgX19kZXBlbmRlbmN5Ml9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7
Ci0gICAgICAgIHZhciBQcm9taXNlID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAg
ICAgIHZhciBpc0Z1bmN0aW9uID0gX19kZXBlbmRlbmN5Ml9fLmlzRnVuY3Rpb247Ci0gICAgICAg
IHZhciBpc01heWJlVGhlbmFibGUgPSBfX2RlcGVuZGVuY3kyX18uaXNNYXliZVRoZW5hYmxlOwot
ICAgICAgICAvKioKLSAgICAgICAgICAgICBgUlNWUC5maWx0ZXJgIGlzIHNpbWlsYXIgdG8gSmF2
YVNjcmlwdCdzIG5hdGl2ZSBgZmlsdGVyYCBtZXRob2QsIGV4Y2VwdCB0aGF0IGl0Ci0gICAgICAg
ICAgICAgIHdhaXRzIGZvciBhbGwgcHJvbWlzZXMgdG8gYmVjb21lIGZ1bGZpbGxlZCBiZWZvcmUg
cnVubmluZyB0aGUgYGZpbHRlckZuYCBvbgotICAgICAgICAgICAgICBlYWNoIGl0ZW0gaW4gZ2l2
ZW4gdG8gYHByb21pc2VzYC4gYFJTVlAuZmlsdGVyYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdp
bGwKLSAgICAgICAgICAgICAgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgcnVu
bmluZyBgZmlsdGVyRm5gIG9uIHRoZSB2YWx1ZXMgdGhlCi0gICAgICAgICAgICAgIHByb21pc2Vz
IGJlY29tZSBmdWxmaWxsZWQgd2l0aC4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0KLSAgICAgICAgICAgICAgdmFyIHByb21pc2Ux
ID0gUlNWUC5yZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLnJl
c29sdmUoMik7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVzb2x2ZSgzKTsK
LQotICAgICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSBbcHJvbWlzZTEsIHByb21pc2UyLCBwcm9t
aXNlM107Ci0KLSAgICAgICAgICAgICAgdmFyIGZpbHRlckZuID0gZnVuY3Rpb24oaXRlbSl7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPiAxOwotICAgICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICAgIFJTVlAuZmlsdGVyKHByb21pc2VzLCBmaWx0ZXJGbikudGhlbihmdW5jdGlvbihy
ZXN1bHQpewotICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBpcyBbIDIsIDMgXQotICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgYW55IG9mIHRo
ZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQLmZpbHRlcmAgYXJlIHJlamVjdGVkLCB0aGUgZmly
c3QgcHJvbWlzZQotICAgICAgICAgICAgICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4g
YXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2UncwotICAgICAgICAgICAgICBy
ZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLnJlc29sdmUoMSk7Ci0gICAg
ICAgICAgICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBFcnJvcigiMiIpKTsKLSAg
ICAgICAgICAgICAgdmFyIHByb21pc2UzID0gUlNWUC5yZWplY3QobmV3IEVycm9yKCIzIikpOwot
ICAgICAgICAgICAgICB2YXIgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlz
ZTMgXTsKLQotICAgICAgICAgICAgICB2YXIgZmlsdGVyRm4gPSBmdW5jdGlvbihpdGVtKXsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaXRlbSA+IDE7Ci0gICAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgICAgUlNWUC5maWx0ZXIocHJvbWlzZXMsIGZpbHRlckZuKS50aGVuKGZ1bmN0aW9uKGFy
cmF5KXsKLSAgICAgICAgICAgICAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRo
ZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyEKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ocmVh
c29uKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICIyIgotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYFJTVlAuZmls
dGVyYCB3aWxsIGFsc28gd2FpdCBmb3IgYW55IHByb21pc2VzIHJldHVybmVkIGZyb20gYGZpbHRl
ckZuYC4KLSAgICAgICAgICAgICAgRm9yIGluc3RhbmNlLCB5b3UgbWF5IHdhbnQgdG8gZmV0Y2gg
YSBsaXN0IG9mIHVzZXJzIHRoZW4gcmV0dXJuIGEgc3Vic2V0Ci0gICAgICAgICAgICAgIG9mIHRo
b3NlIHVzZXJzIGJhc2VkIG9uIHNvbWUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbjoKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0KLSAgICAgICAgICAgICAgdmFyIGFsaWNlID0geyBuYW1l
OiAnYWxpY2UnIH07Ci0gICAgICAgICAgICAgIHZhciBib2IgICA9IHsgbmFtZTogJ2JvYicgfTsK
LSAgICAgICAgICAgICAgdmFyIHVzZXJzID0gWyBhbGljZSwgYm9iIF07Ci0KLSAgICAgICAgICAg
ICAgdmFyIHByb21pc2VzID0gdXNlcnMubWFwKGZ1bmN0aW9uKHVzZXIpewotICAgICAgICAgICAg
ICAgIHJldHVybiBSU1ZQLnJlc29sdmUodXNlcik7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgIHZhciBmaWx0ZXJGbiA9IGZ1bmN0aW9uKHVzZXIpewotICAgICAgICAgICAgICAg
IC8vIEhlcmUsIEFsaWNlIGhhcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYSBibG9nIHBvc3QsIGJ1
dCBCb2IgZG9lcyBub3QuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdldFByaXZpbGVnZXNGb3JV
c2VyKHVzZXIpLnRoZW4oZnVuY3Rpb24ocHJpdnMpewotICAgICAgICAgICAgICAgICAgcmV0dXJu
IHByaXZzLmNhbl9jcmVhdGVfYmxvZ19wb3N0ID09PSB0cnVlOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICBSU1ZQLmZpbHRlcihwcm9taXNlcywg
ZmlsdGVyRm4pLnRoZW4oZnVuY3Rpb24odXNlcnMpewotICAgICAgICAgICAgICAgIC8vIHRydWUs
IGJlY2F1c2UgdGhlIHNlcnZlciB0b2xkIHVzIG9ubHkgQWxpY2UgY2FuIGNyZWF0ZSBhIGJsb2cg
cG9zdC4KLSAgICAgICAgICAgICAgICB1c2Vycy5sZW5ndGggPT09IDE7Ci0gICAgICAgICAgICAg
ICAgLy8gZmFsc2UsIGJlY2F1c2UgQWxpY2UgaXMgdGhlIG9ubHkgdXNlciBwcmVzZW50IGluIGB1
c2Vyc2AKLSAgICAgICAgICAgICAgICB1c2Vyc1swXSA9PT0gYm9iOwotICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBmaWx0ZXIKLSAg
ICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAg
ICAgQHBhcmFtIHtBcnJheX0gcHJvbWlzZXMKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlv
bn0gZmlsdGVyRm4gLSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCByZXNvbHZlZCB2YWx1
ZSB0bwotICAgICAgICAgICAgICBmaWx0ZXIgdGhlIGZpbmFsIHJlc3VsdHMuCi0gICAgICAgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZGVzY3JpYmluZyB0aGUg
cHJvbWlzZS4gVXNlZnVsIGZvcgotICAgICAgICAgICAgICB0b29saW5nLgotICAgICAgICAgICAg
ICBAcmV0dXJuIHtQcm9taXNlfQotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19b
J2RlZmF1bHQnXSA9IGZ1bmN0aW9uIGZpbHRlcihwcm9taXNlcywgZmlsdGVyRm4sIGxhYmVsKSB7
Ci0gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMsIGxhYmVsKS50aGVuKGZ1
bmN0aW9uICh2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzRnVuY3Rpb24oZmlsdGVy
Rm4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0
IHBhc3MgYSBmdW5jdGlvbiBhcyBmaWx0ZXJcJ3Mgc2Vjb25kIGFyZ3VtZW50LicpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsK
LSAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZpbHRlcmVkW2ldID0gZmlsdGVyRm4odmFsdWVzW2ldKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZpbHRlcmVkLCBsYWJl
bCkudGhlbihmdW5jdGlvbiAoZmlsdGVyZWQkMikgewotICAgICAgICAgICAgICAgICAgICB2YXIg
cmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbmV3
TGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMDsgaSQyIDwg
bGVuZ3RoOyBpJDIrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkJDJb
aSQyXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbbmV3TGVuZ3RoXSA9
IHZhbHVlc1tpJDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xlbmd0aCsrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdHMubGVuZ3RoID0gbmV3TGVuZ3RoOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9oYXNoLXNldHRsZWQnLCBb
Ci0gICAgJy4vcHJvbWlzZScsCi0gICAgJy4vZW51bWVyYXRvcicsCi0gICAgJy4vcHJvbWlzZS1o
YXNoJywKLSAgICAnLi91dGlscycsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2
YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgbWFr
ZVNldHRsZWRSZXN1bHQgPSBfX2RlcGVuZGVuY3kyX18ubWFrZVNldHRsZWRSZXN1bHQ7Ci0gICAg
ICAgIHZhciBQcm9taXNlSGFzaCA9IF9fZGVwZW5kZW5jeTNfX1snZGVmYXVsdCddOwotICAgICAg
ICB2YXIgRW51bWVyYXRvciA9IF9fZGVwZW5kZW5jeTJfX1snZGVmYXVsdCddOwotICAgICAgICB2
YXIgb19jcmVhdGUgPSBfX2RlcGVuZGVuY3k0X18ub19jcmVhdGU7Ci0gICAgICAgIGZ1bmN0aW9u
IEhhc2hTZXR0bGVkKENvbnN0cnVjdG9yLCBvYmplY3QsIGxhYmVsKSB7Ci0gICAgICAgICAgICB0
aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9yLCBvYmplY3QsIGZhbHNlLCBsYWJlbCk7
Ci0gICAgICAgIH0KLSAgICAgICAgSGFzaFNldHRsZWQucHJvdG90eXBlID0gb19jcmVhdGUoUHJv
bWlzZUhhc2gucHJvdG90eXBlKTsKLSAgICAgICAgSGFzaFNldHRsZWQucHJvdG90eXBlLl9zdXBl
ckNvbnN0cnVjdG9yID0gRW51bWVyYXRvcjsKLSAgICAgICAgSGFzaFNldHRsZWQucHJvdG90eXBl
Ll9tYWtlUmVzdWx0ID0gbWFrZVNldHRsZWRSZXN1bHQ7Ci0gICAgICAgIEhhc2hTZXR0bGVkLnBy
b3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyBFcnJvcignaGFzaFNldHRsZWQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3Qn
KTsKLSAgICAgICAgfTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLmhhc2hTZXR0
bGVkYCBpcyBzaW1pbGFyIHRvIGBSU1ZQLmFsbFNldHRsZWRgLCBidXQgdGFrZXMgYW4gb2JqZWN0
Ci0gICAgICAgICAgICAgIGluc3RlYWQgb2YgYW4gYXJyYXkgZm9yIGl0cyBgcHJvbWlzZXNgIGFy
Z3VtZW50LgotCi0gICAgICAgICAgICAgIFVubGlrZSBgUlNWUC5hbGxgIG9yIGBSU1ZQLmhhc2hg
LCB3aGljaCBpbXBsZW1lbnQgYSBmYWlsLWZhc3QgbWV0aG9kLAotICAgICAgICAgICAgICBidXQg
bGlrZSBgUlNWUC5hbGxTZXR0bGVkYCwgYGhhc2hTZXR0bGVkYCB3YWl0cyB1bnRpbCBhbGwgdGhl
Ci0gICAgICAgICAgICAgIGNvbnN0aXR1ZW50IHByb21pc2VzIGhhdmUgcmV0dXJuZWQgYW5kIHRo
ZW4gc2hvd3MgeW91IGFsbCB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICB3aXRoIHRoZWlyIHN0
YXRlcyBhbmQgdmFsdWVzL3JlYXNvbnMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCi0g
ICAgICAgICAgICAgIGhhbmRsZSBtdWx0aXBsZSBwcm9taXNlcycgZmFpbHVyZSBzdGF0ZXMgdG9n
ZXRoZXIgYXMgYSBzZXQuCi0KLSAgICAgICAgICAgICAgUmV0dXJucyBhIHByb21pc2UgdGhhdCBp
cyBmdWxmaWxsZWQgd2hlbiBhbGwgdGhlIGdpdmVuIHByb21pc2VzIGhhdmUgYmVlbgotICAgICAg
ICAgICAgICBzZXR0bGVkLCBvciByZWplY3RlZCBpZiB0aGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJl
IGludmFsaWQuCi0KLSAgICAgICAgICAgICAgVGhlIHJldHVybmVkIHByb21pc2UgaXMgZnVsZmls
bGVkIHdpdGggYSBoYXNoIHRoYXQgaGFzIHRoZSBzYW1lIGtleSBuYW1lcyBhcwotICAgICAgICAg
ICAgICB0aGUgYHByb21pc2VzYCBvYmplY3QgYXJndW1lbnQuIElmIGFueSBvZiB0aGUgdmFsdWVz
IGluIHRoZSBvYmplY3QgYXJlIG5vdAotICAgICAgICAgICAgICBwcm9taXNlcywgdGhleSB3aWxs
IGJlIGNvcGllZCBvdmVyIHRvIHRoZSBmdWxmaWxsZWQgb2JqZWN0IGFuZCBtYXJrZWQgd2l0aCBz
dGF0ZQotICAgICAgICAgICAgICAnZnVsZmlsbGVkJy4KLQotICAgICAgICAgICAgICBFeGFtcGxl
OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21p
c2VzID0gewotICAgICAgICAgICAgICAgIG15UHJvbWlzZTogUlNWUC5Qcm9taXNlLnJlc29sdmUo
MSksCi0gICAgICAgICAgICAgICAgeW91clByb21pc2U6IFJTVlAuUHJvbWlzZS5yZXNvbHZlKDIp
LAotICAgICAgICAgICAgICAgIHRoZWlyUHJvbWlzZTogUlNWUC5Qcm9taXNlLnJlc29sdmUoMyks
Ci0gICAgICAgICAgICAgICAgbm90QVByb21pc2U6IDQKLSAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICBSU1ZQLmhhc2hTZXR0bGVkKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gp
ewotICAgICAgICAgICAgICAgIC8vIGhhc2ggaGVyZSBpcyBhbiBvYmplY3QgdGhhdCBsb29rcyBs
aWtlOgotICAgICAgICAgICAgICAgIC8vIHsKLSAgICAgICAgICAgICAgICAvLyAgIG15UHJvbWlz
ZTogeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAxIH0sCi0gICAgICAgICAgICAgICAgLy8g
ICB5b3VyUHJvbWlzZTogeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAyIH0sCi0gICAgICAg
ICAgICAgICAgLy8gICB0aGVpclByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTog
MyB9LAotICAgICAgICAgICAgICAgIC8vICAgbm90QVByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxs
ZWQnLCB2YWx1ZTogNCB9Ci0gICAgICAgICAgICAgICAgLy8gfQotICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSBgcHJvbWlz
ZXNgIGdpdmVuIHRvIGBSU1ZQLmhhc2hgIGFyZSByZWplY3RlZCwgdGhlIHN0YXRlIHdpbGwKLSAg
ICAgICAgICAgICAgYmUgc2V0IHRvICdyZWplY3RlZCcgYW5kIHRoZSByZWFzb24gZm9yIHJlamVj
dGlvbiBwcm92aWRlZC4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gewotICAgICAgICAg
ICAgICAgIG15UHJvbWlzZTogUlNWUC5Qcm9taXNlLnJlc29sdmUoMSksCi0gICAgICAgICAgICAg
ICAgcmVqZWN0ZWRQcm9taXNlOiBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigncmVqZWN0
aW9uJykpLAotICAgICAgICAgICAgICAgIGFub3RoZXJSZWplY3RlZFByb21pc2U6IFJTVlAuUHJv
bWlzZS5yZWplY3QobmV3IEVycm9yKCdtb3JlIHJlamVjdGlvbicpKQotICAgICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICAgIFJTVlAuaGFzaFNldHRsZWQocHJvbWlzZXMpLnRoZW4oZnVuY3Rp
b24oaGFzaCl7Ci0gICAgICAgICAgICAgICAgLy8gaGFzaCBoZXJlIGlzIGFuIG9iamVjdCB0aGF0
IGxvb2tzIGxpa2U6Ci0gICAgICAgICAgICAgICAgLy8gewotICAgICAgICAgICAgICAgIC8vICAg
bXlQcm9taXNlOiAgICAgICAgICAgICAgeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAxIH0s
Ci0gICAgICAgICAgICAgICAgLy8gICByZWplY3RlZFByb21pc2U6ICAgICAgICB7IHN0YXRlOiAn
cmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCi0gICAgICAgICAgICAgICAgLy8gICBhbm90aGVy
UmVqZWN0ZWRQcm9taXNlOiB7IHN0YXRlOiAncmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCi0g
ICAgICAgICAgICAgICAgLy8gfQotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBmb3IgcmVq
ZWN0ZWRQcm9taXNlLCByZWFzb24ubWVzc2FnZSA9PSAncmVqZWN0aW9uJywKLSAgICAgICAgICAg
ICAgICAvLyBhbmQgZm9yIGFub3RoZXJSZWplY3RlZFByb21pc2UsIHJlYXNvbi5tZXNzYWdlID09
ICdtb3JlIHJlamVjdGlvbicuCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBBbiBpbXBvcnRhbnQgbm90ZTogYFJTVlAuaGFzaFNldHRsZWRgIGlz
IGludGVuZGVkIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMgdGhhdAotICAgICAgICAgICAg
ICBhcmUganVzdCBhIHNldCBvZiBrZXlzIGFuZCB2YWx1ZXMuIGBSU1ZQLmhhc2hTZXR0bGVkYCB3
aWxsIE5PVCBwcmVzZXJ2ZSBwcm90b3R5cGUKLSAgICAgICAgICAgICAgY2hhaW5zLgotCi0gICAg
ICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICBmdW5jdGlvbiBNeUNvbnN0cnVjdG9yKCl7Ci0gICAgICAgICAgICAgICAgdGhpcy5l
eGFtcGxlID0gUlNWUC5Qcm9taXNlLnJlc29sdmUoJ0V4YW1wbGUnKTsKLSAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgIE15Q29uc3RydWN0b3IucHJvdG90eXBlID0gewotICAgICAgICAg
ICAgICAgIHByb3RvUHJvcGVydHk6IFJTVlAuUHJvbWlzZS5yZXNvbHZlKCdQcm90byBQcm9wZXJ0
eScpCi0gICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgdmFyIG15T2JqZWN0ID0gbmV3
IE15Q29uc3RydWN0b3IoKTsKLQotICAgICAgICAgICAgICBSU1ZQLmhhc2hTZXR0bGVkKG15T2Jq
ZWN0KS50aGVuKGZ1bmN0aW9uKGhhc2gpewotICAgICAgICAgICAgICAgIC8vIHByb3RvUHJvcGVy
dHkgd2lsbCBub3QgYmUgcHJlc2VudCwgaW5zdGVhZCB5b3Ugd2lsbCBqdXN0IGhhdmUgYW4KLSAg
ICAgICAgICAgICAgICAvLyBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAgICAgICAgICAgICAg
IC8vIHsKLSAgICAgICAgICAgICAgICAvLyAgIGV4YW1wbGU6IHsgc3RhdGU6ICdmdWxmaWxsZWQn
LCB2YWx1ZTogJ0V4YW1wbGUnIH0KLSAgICAgICAgICAgICAgICAvLyB9Ci0gICAgICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgICAgICAvLyBoYXNoLmhhc093blByb3BlcnR5KCdwcm90b1Byb3Bl
cnR5Jyk7IC8vIGZhbHNlCi0gICAgICAgICAgICAgICAgLy8gJ3VuZGVmaW5lZCcgPT09IHR5cGVv
ZiBoYXNoLnByb3RvUHJvcGVydHkKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBg
YAotCi0gICAgICAgICAgICAgIEBtZXRob2QgaGFzaFNldHRsZWQKLSAgICAgICAgICAgICAgQGZv
ciBSU1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwcm9taXNlcwotICAgICAgICAg
ICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIHRoYXQgZGVzY3JpYmVz
IHRoZSBwcm9taXNlLgotICAgICAgICAgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAg
ICAgICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiB3
aGVuIGFsbCBwcm9wZXJ0aWVzIG9mIGBwcm9taXNlc2AKLSAgICAgICAgICAgICAgaGF2ZSBiZWVu
IHNldHRsZWQuCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAgICAg
IF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBoYXNoU2V0dGxlZChvYmplY3QsIGxh
YmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hTZXR0bGVkKFByb21pc2UsIG9iamVj
dCwgbGFiZWwpLnByb21pc2U7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3Zw
L2hhc2gnLCBbCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJy4vcHJvbWlzZS1oYXNoJywKLSAgICAn
Li9lbnVtZXJhdG9yJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRl
bmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19leHBvcnRzX18pIHsK
LSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgUHJvbWlzZSA9IF9fZGVwZW5kZW5j
eTFfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgUHJvbWlzZUhhc2ggPSBfX2RlcGVuZGVuY3ky
X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIEFCT1JUX09OX1JFSkVDVElPTiA9IF9fZGVwZW5k
ZW5jeTNfXy5BQk9SVF9PTl9SRUpFQ1RJT047Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBg
UlNWUC5oYXNoYCBpcyBzaW1pbGFyIHRvIGBSU1ZQLmFsbGAsIGJ1dCB0YWtlcyBhbiBvYmplY3Qg
aW5zdGVhZCBvZiBhbiBhcnJheQotICAgICAgICAgICAgICBmb3IgaXRzIGBwcm9taXNlc2AgYXJn
dW1lbnQuCi0KLSAgICAgICAgICAgICAgUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBmdWxmaWxs
ZWQgd2hlbiBhbGwgdGhlIGdpdmVuIHByb21pc2VzIGhhdmUgYmVlbgotICAgICAgICAgICAgICBm
dWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC4gVGhl
IHJldHVybmVkIHByb21pc2UKLSAgICAgICAgICAgICAgaXMgZnVsZmlsbGVkIHdpdGggYSBoYXNo
IHRoYXQgaGFzIHRoZSBzYW1lIGtleSBuYW1lcyBhcyB0aGUgYHByb21pc2VzYCBvYmplY3QKLSAg
ICAgICAgICAgICAgYXJndW1lbnQuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHRoZSBvYmplY3Qg
YXJlIG5vdCBwcm9taXNlcywgdGhleSB3aWxsCi0gICAgICAgICAgICAgIHNpbXBseSBiZSBjb3Bp
ZWQgb3ZlciB0byB0aGUgZnVsZmlsbGVkIG9iamVjdC4KLQotICAgICAgICAgICAgICBFeGFtcGxl
OgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21p
c2VzID0gewotICAgICAgICAgICAgICAgIG15UHJvbWlzZTogUlNWUC5yZXNvbHZlKDEpLAotICAg
ICAgICAgICAgICAgIHlvdXJQcm9taXNlOiBSU1ZQLnJlc29sdmUoMiksCi0gICAgICAgICAgICAg
ICAgdGhlaXJQcm9taXNlOiBSU1ZQLnJlc29sdmUoMyksCi0gICAgICAgICAgICAgICAgbm90QVBy
b21pc2U6IDQKLSAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICBSU1ZQLmhhc2gocHJv
bWlzZXMpLnRoZW4oZnVuY3Rpb24oaGFzaCl7Ci0gICAgICAgICAgICAgICAgLy8gaGFzaCBoZXJl
IGlzIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6Ci0gICAgICAgICAgICAgICAgLy8gewotICAg
ICAgICAgICAgICAgIC8vICAgbXlQcm9taXNlOiAxLAotICAgICAgICAgICAgICAgIC8vICAgeW91
clByb21pc2U6IDIsCi0gICAgICAgICAgICAgICAgLy8gICB0aGVpclByb21pc2U6IDMsCi0gICAg
ICAgICAgICAgICAgLy8gICBub3RBUHJvbWlzZTogNAotICAgICAgICAgICAgICAgIC8vIH0KLSAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYGAKLQotICAgICAgICAgICAgICBJZiBh
bnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYFJTVlAuaGFzaGAgYXJlIHJlamVjdGVkLCB0
aGUgZmlyc3QgcHJvbWlzZQotICAgICAgICAgICAgICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUg
Z2l2ZW4gYXMgdGhlIHJlYXNvbiB0byB0aGUgcmVqZWN0aW9uIGhhbmRsZXIuCi0KLSAgICAgICAg
ICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAg
ICAgIHZhciBwcm9taXNlcyA9IHsKLSAgICAgICAgICAgICAgICBteVByb21pc2U6IFJTVlAucmVz
b2x2ZSgxKSwKLSAgICAgICAgICAgICAgICByZWplY3RlZFByb21pc2U6IFJTVlAucmVqZWN0KG5l
dyBFcnJvcigicmVqZWN0ZWRQcm9taXNlIikpLAotICAgICAgICAgICAgICAgIGFub3RoZXJSZWpl
Y3RlZFByb21pc2U6IFJTVlAucmVqZWN0KG5ldyBFcnJvcigiYW5vdGhlclJlamVjdGVkUHJvbWlz
ZSIpKQotICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgIFJTVlAuaGFzaChwcm9taXNl
cykudGhlbihmdW5jdGlvbihoYXNoKXsKLSAgICAgICAgICAgICAgICAvLyBDb2RlIGhlcmUgbmV2
ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyEKLSAgICAgICAgICAg
ICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVhc29uLm1lc3Nh
Z2UgPT09ICJyZWplY3RlZFByb21pc2UiCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICBgYGAKLQotICAgICAgICAgICAgICBBbiBpbXBvcnRhbnQgbm90ZTogYFJTVlAuaGFzaGAgaXMg
aW50ZW5kZWQgZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cyB0aGF0Ci0gICAgICAgICAgICAg
IGFyZSBqdXN0IGEgc2V0IG9mIGtleXMgYW5kIHZhbHVlcy4gYFJTVlAuaGFzaGAgd2lsbCBOT1Qg
cHJlc2VydmUgcHJvdG90eXBlCi0gICAgICAgICAgICAgIGNoYWlucy4KLQotICAgICAgICAgICAg
ICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
ZnVuY3Rpb24gTXlDb25zdHJ1Y3RvcigpewotICAgICAgICAgICAgICAgIHRoaXMuZXhhbXBsZSA9
IFJTVlAucmVzb2x2ZSgiRXhhbXBsZSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgTXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAgICAgICAgcHJvdG9Qcm9w
ZXJ0eTogUlNWUC5yZXNvbHZlKCJQcm90byBQcm9wZXJ0eSIpCi0gICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgdmFyIG15T2JqZWN0ID0gbmV3IE15Q29uc3RydWN0b3IoKTsKLQotICAg
ICAgICAgICAgICBSU1ZQLmhhc2gobXlPYmplY3QpLnRoZW4oZnVuY3Rpb24oaGFzaCl7Ci0gICAg
ICAgICAgICAgICAgLy8gcHJvdG9Qcm9wZXJ0eSB3aWxsIG5vdCBiZSBwcmVzZW50LCBpbnN0ZWFk
IHlvdSB3aWxsIGp1c3QgaGF2ZSBhbgotICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0IGxv
b2tzIGxpa2U6Ci0gICAgICAgICAgICAgICAgLy8gewotICAgICAgICAgICAgICAgIC8vICAgZXhh
bXBsZTogIkV4YW1wbGUiCi0gICAgICAgICAgICAgICAgLy8gfQotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgLy8gaGFzaC5oYXNPd25Qcm9wZXJ0eSgncHJvdG9Qcm9wZXJ0eScp
OyAvLyBmYWxzZQotICAgICAgICAgICAgICAgIC8vICd1bmRlZmluZWQnID09PSB0eXBlb2YgaGFz
aC5wcm90b1Byb3BlcnR5Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAbWV0aG9kIGhhc2gKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAg
ICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHByb21pc2Vz
Ci0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgdGhh
dCBkZXNjcmliZXMgdGhlIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGlu
Zy4KLSAgICAgICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZp
bGxlZCB3aGVuIGFsbCBwcm9wZXJ0aWVzIG9mIGBwcm9taXNlc2AKLSAgICAgICAgICAgICAgaGF2
ZSBiZWVuIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVj
dGVkLgotICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IGZ1
bmN0aW9uIGhhc2gob2JqZWN0LCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9t
aXNlSGFzaChQcm9taXNlLCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOwotICAgICAgICB9OwotICAg
IH0pOwotICAgIGRlZmluZSgncnN2cC9pbnN0cnVtZW50JywgWwotICAgICcuL2NvbmZpZycsCi0g
ICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJp
Y3QnOwotICAgICAgICB2YXIgY29uZmlnID0gX19kZXBlbmRlbmN5MV9fLmNvbmZpZzsKLSAgICAg
ICAgdmFyIG5vdyA9IF9fZGVwZW5kZW5jeTJfXy5ub3c7Ci0gICAgICAgIHZhciBxdWV1ZSA9IFtd
OwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rpb24gaW5zdHJ1bWVudChl
dmVudE5hbWUsIHByb21pc2UsIGNoaWxkKSB7Ci0gICAgICAgICAgICBpZiAoMSA9PT0gcXVldWUu
cHVzaCh7Ci0gICAgICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLAotICAgICAgICAgICAgICAg
IHBheWxvYWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgZ3VpZDogcHJvbWlzZS5fZ3VpZEtleSAr
IHByb21pc2UuX2lkLAotICAgICAgICAgICAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBwcm9taXNlLl9yZXN1bHQsCi0gICAgICAgICAg
ICAgICAgICAgIGNoaWxkR3VpZDogY2hpbGQgJiYgcHJvbWlzZS5fZ3VpZEtleSArIGNoaWxkLl9p
ZCwKLSAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHByb21pc2UuX2xhYmVsLAotICAgICAgICAg
ICAgICAgICAgICB0aW1lU3RhbXA6IG5vdygpLAotICAgICAgICAgICAgICAgICAgICBzdGFjazog
bmV3IEVycm9yKHByb21pc2UuX2xhYmVsKS5zdGFjawotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0pKSB7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkgPSBxdWV1ZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50cmln
Z2VyKGVudHJ5Lm5hbWUsIGVudHJ5LnBheWxvYWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgfSwg
NTApOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2
cC9tYXAnLCBbCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRz
JwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgUHJvbWlzZSA9
IF9fZGVwZW5kZW5jeTFfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgaXNBcnJheSA9IF9fZGVw
ZW5kZW5jeTJfXy5pc0FycmF5OwotICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IF9fZGVwZW5kZW5j
eTJfXy5pc0Z1bmN0aW9uOwotICAgICAgICAvKioKLSAgICAgICAgICAgICBgUlNWUC5tYXBgIGlz
IHNpbWlsYXIgdG8gSmF2YVNjcmlwdCdzIG5hdGl2ZSBgbWFwYCBtZXRob2QsIGV4Y2VwdCB0aGF0
IGl0Ci0gICAgICAgICAgICAgIHdhaXRzIGZvciBhbGwgcHJvbWlzZXMgdG8gYmVjb21lIGZ1bGZp
bGxlZCBiZWZvcmUgcnVubmluZyB0aGUgYG1hcEZuYCBvbgotICAgICAgICAgICAgICBlYWNoIGl0
ZW0gaW4gZ2l2ZW4gdG8gYHByb21pc2VzYC4gYFJTVlAubWFwYCByZXR1cm5zIGEgcHJvbWlzZSB0
aGF0IHdpbGwKLSAgICAgICAgICAgICAgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSByZXN1bHQg
b2YgcnVubmluZyBgbWFwRm5gIG9uIHRoZSB2YWx1ZXMgdGhlIHByb21pc2VzCi0gICAgICAgICAg
ICAgIGJlY29tZSBmdWxmaWxsZWQgd2l0aC4KLQotICAgICAgICAgICAgICBGb3IgZXhhbXBsZToK
LQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0KLSAgICAgICAgICAgICAgdmFyIHByb21p
c2UxID0gUlNWUC5yZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQ
LnJlc29sdmUoMik7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVzb2x2ZSgz
KTsKLSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHBy
b21pc2UzIF07Ci0KLSAgICAgICAgICAgICAgdmFyIG1hcEZuID0gZnVuY3Rpb24oaXRlbSl7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gKyAxOwotICAgICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICAgIFJTVlAubWFwKHByb21pc2VzLCBtYXBGbikudGhlbihmdW5jdGlvbihyZXN1bHQp
ewotICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBpcyBbIDIsIDMsIDQgXQotICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSBg
cHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQLm1hcGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJv
bWlzZQotICAgICAgICAgICAgICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4g
YXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2UncwotICAgICAgICAgICAgICByZWplY3Rp
b24gaGFuZGxlci4gRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgICAgICAgICB2YXIgcHJvbWlzZTEgPSBSU1ZQLnJlc29sdmUoMSk7Ci0gICAgICAgICAg
ICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBFcnJvcigiMiIpKTsKLSAgICAgICAg
ICAgICAgdmFyIHByb21pc2UzID0gUlNWUC5yZWplY3QobmV3IEVycm9yKCIzIikpOwotICAgICAg
ICAgICAgICB2YXIgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTsK
LQotICAgICAgICAgICAgICB2YXIgbWFwRm4gPSBmdW5jdGlvbihpdGVtKXsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gaXRlbSArIDE7Ci0gICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAg
UlNWUC5tYXAocHJvbWlzZXMsIG1hcEZuKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKLSAgICAgICAg
ICAgICAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFyZSByZWplY3Rl
ZCBwcm9taXNlcyEKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICIyIgotICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgYFJTVlAubWFwYCB3aWxsIGFsc28gd2Fp
dCBpZiBhIHByb21pc2UgaXMgcmV0dXJuZWQgZnJvbSBgbWFwRm5gLiBGb3IgZXhhbXBsZSwKLSAg
ICAgICAgICAgICAgc2F5IHlvdSB3YW50IHRvIGdldCBhbGwgY29tbWVudHMgZnJvbSBhIHNldCBv
ZiBibG9nIHBvc3RzLCBidXQgeW91IG5lZWQKLSAgICAgICAgICAgICAgdGhlIGJsb2cgcG9zdHMg
Zmlyc3QgYmVjYXVzZSB0aGV5IGNvbnRhaW4gYSB1cmwgdG8gdGhvc2UgY29tbWVudHMuCi0KLSAg
ICAgICAgICAgICAgYGBgamF2c2NyaXB0Ci0KLSAgICAgICAgICAgICAgdmFyIG1hcEZuID0gZnVu
Y3Rpb24oYmxvZ1Bvc3QpewotICAgICAgICAgICAgICAgIC8vIGdldENvbW1lbnRzIGRvZXMgc29t
ZSBhamF4IGFuZCByZXR1cm5zIGFuIFJTVlAuUHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZAotICAg
ICAgICAgICAgICAgIC8vIHdpdGggc29tZSBjb21tZW50cyBkYXRhCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGdldENvbW1lbnRzKGJsb2dQb3N0LmNvbW1lbnRzX3VybCk7Ci0gICAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgICAgLy8gZ2V0QmxvZ1Bvc3RzIGRvZXMgc29tZSBhamF4IGFuZCBy
ZXR1cm5zIGFuIFJTVlAuUHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZAotICAgICAgICAgICAgICAv
LyB3aXRoIHNvbWUgYmxvZyBwb3N0IGRhdGEKLSAgICAgICAgICAgICAgUlNWUC5tYXAoZ2V0Qmxv
Z1Bvc3RzKCksIG1hcEZuKS50aGVuKGZ1bmN0aW9uKGNvbW1lbnRzKXsKLSAgICAgICAgICAgICAg
ICAvLyBjb21tZW50cyBpcyB0aGUgcmVzdWx0IG9mIGFza2luZyB0aGUgc2VydmVyIGZvciB0aGUg
Y29tbWVudHMKLSAgICAgICAgICAgICAgICAvLyBvZiBhbGwgYmxvZyBwb3N0cyByZXR1cm5lZCBm
cm9tIGdldEJsb2dQb3N0cygpCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBAbWV0aG9kIG1hcAotICAgICAgICAgICAgICBAc3RhdGljCi0gICAg
ICAgICAgICAgIEBmb3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBwcm9taXNl
cwotICAgICAgICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBtYXBGbiBmdW5jdGlvbiB0byBiZSBj
YWxsZWQgb24gZWFjaCBmdWxmaWxsZWQgcHJvbWlzZS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtT
dHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCi0g
ICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAgICAgICAgICAgQHJldHVybiB7
UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YgY2Fs
bGluZwotICAgICAgICAgICAgICBgbWFwRm5gIG9uIGVhY2ggZnVsZmlsbGVkIHByb21pc2Ugb3Ig
dmFsdWUgd2hlbiB0aGV5IGJlY29tZSBmdWxmaWxsZWQuCi0gICAgICAgICAgICAgICBUaGUgcHJv
bWlzZSB3aWxsIGJlIHJlamVjdGVkIGlmIGFueSBvZiB0aGUgZ2l2ZW4gYHByb21pc2VzYCBiZWNv
bWUgcmVqZWN0ZWQuCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAg
ICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBtYXAocHJvbWlzZXMsIG1hcEZu
LCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzLCBsYWJl
bCkudGhlbihmdW5jdGlvbiAodmFsdWVzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0Z1bmN0
aW9uKG1hcEZuKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZ
b3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgbWFwXCdzIHNlY29uZCBhcmd1bWVudC4nKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlcy5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBtYXBGbih2YWx1ZXNbaV0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cywgbGFiZWwp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3Zw
L25vZGUnLCBbCi0gICAgJy4vcHJvbWlzZScsCi0gICAgJy4vdXRpbHMnLAotICAgICdleHBvcnRz
JwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19l
eHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICAvKiBnbG9iYWwgIGFy
cmF5U2xpY2UgKi8KLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1
bHQnXTsKLSAgICAgICAgdmFyIGlzQXJyYXkgPSBfX2RlcGVuZGVuY3kyX18uaXNBcnJheTsKLSAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLmRlbm9kZWlmeWAgdGFrZXMgYSAibm9kZS1z
dHlsZSIgZnVuY3Rpb24gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0Ci0gICAgICAgICAgICAg
IHdpbGwgcmV0dXJuIGFuIGBSU1ZQLlByb21pc2VgLiBZb3UgY2FuIHVzZSBgZGVub2RlaWZ5YCBp
biBOb2RlLmpzIG9yIHRoZQotICAgICAgICAgICAgICBicm93c2VyIHdoZW4geW91J2QgcHJlZmVy
IHRvIHVzZSBwcm9taXNlcyBvdmVyIHVzaW5nIGNhbGxiYWNrcy4gRm9yIGV4YW1wbGUsCi0gICAg
ICAgICAgICAgIGBkZW5vZGVpZnlgIHRyYW5zZm9ybXMgdGhlIGZvbGxvd2luZzoKLQotICAgICAg
ICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2Zz
Jyk7Ci0KLSAgICAgICAgICAgICAgZnMucmVhZEZpbGUoJ215ZmlsZS50eHQnLCBmdW5jdGlvbihl
cnIsIGRhdGEpewotICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBoYW5kbGVFcnJvcihl
cnIpOwotICAgICAgICAgICAgICAgIGhhbmRsZURhdGEoZGF0YSk7Ci0gICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBpbnRvOgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTsK
LSAgICAgICAgICAgICAgdmFyIHJlYWRGaWxlID0gUlNWUC5kZW5vZGVpZnkoZnMucmVhZEZpbGUp
OwotCi0gICAgICAgICAgICAgIHJlYWRGaWxlKCdteWZpbGUudHh0JykudGhlbihoYW5kbGVEYXRh
LCBoYW5kbGVFcnJvcik7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIElmIHRo
ZSBub2RlIGZ1bmN0aW9uIGhhcyBtdWx0aXBsZSBzdWNjZXNzIHBhcmFtZXRlcnMsIHRoZW4gYGRl
bm9kZWlmeWAKLSAgICAgICAgICAgICAganVzdCByZXR1cm5zIHRoZSBmaXJzdCBvbmU6Ci0KLSAg
ICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IFJT
VlAuZGVub2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSk7Ci0KLSAgICAgICAgICAgICAgcmVxdWVz
dCgnaHR0cDovL2V4YW1wbGUuY29tJykudGhlbihmdW5jdGlvbihyZXMpIHsKLSAgICAgICAgICAg
ICAgICAvLyAuLi4KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAg
ICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIGFsbCBzdWNjZXNzIHBhcmFtZXRlcnMsIHNl
dHRpbmcgYGRlbm9kZWlmeWAncwotICAgICAgICAgICAgICBzZWNvbmQgcGFyYW1ldGVyIHRvIGB0
cnVlYCBjYXVzZXMgaXQgdG8gcmV0dXJuIGFsbCBzdWNjZXNzIHBhcmFtZXRlcnMKLSAgICAgICAg
ICAgICAgYXMgYW4gYXJyYXk6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
ICAgICAgICB2YXIgcmVxdWVzdCA9IFJTVlAuZGVub2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSwg
dHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgcmVxdWVzdCgnaHR0cDovL2V4YW1wbGUuY29tJykudGhl
bihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvLyByZXN1bHRbMF0gLT4gcmVz
Ci0gICAgICAgICAgICAgICAgLy8gcmVzdWx0WzFdIC0+IGJvZHkKLSAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIE9yIGlmIHlvdSBwYXNzIGl0IGFu
IGFycmF5IHdpdGggbmFtZXMgaXQgcmV0dXJucyB0aGUgcGFyYW1ldGVycyBhcyBhIGhhc2g6Ci0K
LSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9
IFJTVlAuZGVub2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSwgWydyZXMnLCAnYm9keSddKTsKLQot
ICAgICAgICAgICAgICByZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5jb20nKS50aGVuKGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICAgICAgICAgIC8vIHJlc3VsdC5yZXMKLSAgICAgICAgICAgICAg
ICAvLyByZXN1bHQuYm9keQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBuZWVkIHRvIHJldGFpbiB0aGUgYHRoaXNgOgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIGFwcCA9IHJl
cXVpcmUoJ2V4cHJlc3MnKSgpOwotICAgICAgICAgICAgICB2YXIgcmVuZGVyID0gUlNWUC5kZW5v
ZGVpZnkoYXBwLnJlbmRlci5iaW5kKGFwcCkpOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBUaGUgZGVub2RpZmllZCBmdW5jdGlvbiBpbmhlcml0cyBmcm9tIHRoZSBvcmlnaW5h
bCBmdW5jdGlvbi4gSXQgd29ya3MgaW4gYWxsCi0gICAgICAgICAgICAgIGVudmlyb25tZW50cywg
ZXhjZXB0IElFIDEwIGFuZCBiZWxvdy4gQ29uc2VxdWVudGx5IGFsbCBwcm9wZXJ0aWVzIG9mIHRo
ZSBvcmlnaW5hbAotICAgICAgICAgICAgICBmdW5jdGlvbiBhcmUgYXZhaWxhYmxlIHRvIHlvdS4g
SG93ZXZlciwgYW55IHByb3BlcnRpZXMgeW91IGNoYW5nZSBvbiB0aGUKLSAgICAgICAgICAgICAg
ZGVub2RlaWZpZWQgZnVuY3Rpb24gd29uJ3QgYmUgY2hhbmdlZCBvbiB0aGUgb3JpZ2luYWwgZnVu
Y3Rpb24uIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgICAg
ICAgICB2YXIgcmVxdWVzdCA9IFJTVlAuZGVub2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSksCi0g
ICAgICAgICAgICAgICAgICBjb29raWVKYXIgPSByZXF1ZXN0LmphcigpOyAvLyA8LSBJbmhlcml0
YW5jZSBpcyB1c2VkIGhlcmUKLQotICAgICAgICAgICAgICByZXF1ZXN0KCdodHRwOi8vZXhhbXBs
ZS5jb20nLCB7amFyOiBjb29raWVKYXJ9KS50aGVuKGZ1bmN0aW9uKHJlcykgewotICAgICAgICAg
ICAgICAgIC8vIGNvb2tpZUphci5jb29raWVzIGhvbGRzIG5vdyB0aGUgY29va2llcyByZXR1cm5l
ZCBieSBleGFtcGxlLmNvbQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgVXNpbmcgYGRlbm9kZWlmeWAgbWFrZXMgaXQgZWFzaWVyIHRvIGNvbXBv
c2UgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgaW5zdGVhZAotICAgICAgICAgICAgICBvZiB1c2lu
ZyBjYWxsYmFja3MuIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mOgotCi0gICAgICAgICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTsKLQotICAg
ICAgICAgICAgICBmcy5yZWFkRmlsZSgnbXlmaWxlLnR4dCcsIGZ1bmN0aW9uKGVyciwgZGF0YSl7
Ci0gICAgICAgICAgICAgICAgaWYgKGVycikgeyAuLi4gfSAvLyBIYW5kbGUgZXJyb3IKLSAgICAg
ICAgICAgICAgICBmcy53cml0ZUZpbGUoJ215ZmlsZTIudHh0JywgZGF0YSwgZnVuY3Rpb24oZXJy
KXsKLSAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsgLi4uIH0gLy8gSGFuZGxlIGVycm9yCi0g
ICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZG9uZScpCi0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICB5
b3UgY2FuIGNoYWluIHRoZSBvcGVyYXRpb25zIHRvZ2V0aGVyIHVzaW5nIGB0aGVuYCBmcm9tIHRo
ZSByZXR1cm5lZCBwcm9taXNlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTsKLSAgICAgICAgICAgICAgdmFyIHJlYWRG
aWxlID0gUlNWUC5kZW5vZGVpZnkoZnMucmVhZEZpbGUpOwotICAgICAgICAgICAgICB2YXIgd3Jp
dGVGaWxlID0gUlNWUC5kZW5vZGVpZnkoZnMud3JpdGVGaWxlKTsKLQotICAgICAgICAgICAgICBy
ZWFkRmlsZSgnbXlmaWxlLnR4dCcpLnRoZW4oZnVuY3Rpb24oZGF0YSl7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdyaXRlRmlsZSgnbXlmaWxlMi50eHQnLCBkYXRhKTsKLSAgICAgICAgICAgICAg
fSkudGhlbihmdW5jdGlvbigpewotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkb25lJykK
LSAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpewotICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBlcnJvcgotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0K
LSAgICAgICAgICAgICAgQG1ldGhvZCBkZW5vZGVpZnkKLSAgICAgICAgICAgICAgQHN0YXRpYwot
ICAgICAgICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0g
bm9kZUZ1bmMgYSAibm9kZS1zdHlsZSIgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGNhbGxiYWNrIGFz
Ci0gICAgICAgICAgICAgIGl0cyBsYXN0IGFyZ3VtZW50LiBUaGUgY2FsbGJhY2sgZXhwZWN0cyBh
biBlcnJvciB0byBiZSBwYXNzZWQgYXMgaXRzIGZpcnN0Ci0gICAgICAgICAgICAgIGFyZ3VtZW50
IChpZiBhbiBlcnJvciBvY2N1cnJlZCwgb3RoZXJ3aXNlIG51bGwpLCBhbmQgdGhlIHZhbHVlIGZy
b20gdGhlCi0gICAgICAgICAgICAgIG9wZXJhdGlvbiBhcyBpdHMgc2Vjb25kIGFyZ3VtZW50ICgi
ZnVuY3Rpb24oZXJyLCB2YWx1ZSl7IH0iKS4KLSAgICAgICAgICAgICAgQHBhcmFtIHtCb29sZWFu
fEFycmF5fSBhcmd1bWVudE5hbWVzIEFuIG9wdGlvbmFsIHBhcmFtdGVyIHRoYXQgaWYgc2V0Ci0g
ICAgICAgICAgICAgIHRvIGB0cnVlYCBjYXVzZXMgdGhlIHByb21pc2UgdG8gZnVsZmlsbCB3aXRo
IHRoZSBjYWxsYmFjaydzIHN1Y2Nlc3MgYXJndW1lbnRzCi0gICAgICAgICAgICAgIGFzIGFuIGFy
cmF5LiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgbm9kZSBmdW5jdGlvbiBoYXMgbXVsdGlwbGUgc3Vj
Y2VzcwotICAgICAgICAgICAgICBwYXJhbXRlcnMuIElmIHlvdSBzZXQgdGhpcyBwYXJhbXRlciB0
byBhbiBhcnJheSB3aXRoIG5hbWVzLCB0aGUgcHJvbWlzZSB3aWxsCi0gICAgICAgICAgICAgIGZ1
bGZpbGwgd2l0aCBhIGhhc2ggd2l0aCB0aGVzZSBuYW1lcyBhcyBrZXlzIGFuZCB0aGUgc3VjY2Vz
cyBwYXJhbWV0ZXJzIGFzCi0gICAgICAgICAgICAgIHZhbHVlcy4KLSAgICAgICAgICAgICAgQHJl
dHVybiB7RnVuY3Rpb259IGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgbm9kZUZ1bmNgIHRvIHJldHVy
biBhbgotICAgICAgICAgICAgICBgUlNWUC5Qcm9taXNlYAotICAgICAgICAgICAgICBAc3RhdGlj
Ci0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rp
b24gZGVub2RlaWZ5KG5vZGVGdW5jLCBhcmd1bWVudE5hbWVzKSB7Ci0gICAgICAgICAgICB2YXIg
YXNBcnJheSA9IGFyZ3VtZW50TmFtZXMgPT09IHRydWU7Ci0gICAgICAgICAgICB2YXIgYXNIYXNo
ID0gaXNBcnJheShhcmd1bWVudE5hbWVzKTsKLSAgICAgICAgICAgIGZ1bmN0aW9uIGRlbm9kZWlm
aWVkRnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVBcmdzID0gbmV3IEFycmF5KGxlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBub2RlQXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHRoaXNBcmc7Ci0gICAgICAgICAgICAgICAgaWYg
KCFhc0FycmF5ICYmICFhc0hhc2ggJiYgYXJndW1lbnROYW1lcykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIGNvbnNvbGUgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uOiBSU1ZQLmRlbm9kZWlmeSgpIGRvZXNu
XCd0IGFsbG93IHNldHRpbmcgdGhlICcgKyAnInRoaXMiIGJpbmRpbmcgYW55bW9yZS4gVXNlIHlv
dXJGdW5jdGlvbi5iaW5kKHlvdXJUaGlzKSBpbnN0ZWFkLicpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNBcmcgPSBhcmd1bWVudE5hbWVzOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNBcmcgPSB0aGlzOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobm9k
ZUFyZ3MpLnRoZW4oZnVuY3Rpb24gKG5vZGVBcmdzJDIpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmVyKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gc3dl
ZXQuanMgaGFzIGEgYnVnLCB0aGlzIHJlc29sdmVyIGNhbid0IGJlIGRlZmluZWQgaW4gdGhlIGNv
bnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgICAgIC8vIG9yIHRoZSBhcnJheVNsaWNlIG1hY3Jv
IGRvZXNuJ3Qgd29yawotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlcihyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgkMiA9IGFyZ3VtZW50
cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJy
YXkobGVuZ3RoJDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9
IDA7IGkkMiA8IGxlbmd0aCQyOyBpJDIrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzW2kkMl0gPSBhcmd1bWVudHNbaSQyXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gYXJnc1swXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzWzFdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWplY3QoZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYXNBcnJheSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNv
bHZlKGFyZ3Muc2xpY2UoMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYXNIYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7
fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3NBcmd1bWVudHMg
PSBhcmdzLnNsaWNlKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFt
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkkMzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpJDMgPSAwOyBpJDMgPCBhcmd1bWVudE5hbWVzLmxl
bmd0aDsgaSQzKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBhcmd1bWVudE5hbWVzW2kkM107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvYmpbbmFtZV0gPSBzdWNjZXNzQXJndW1lbnRzW2kkM107Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShv
YmopOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVBcmdzJDIucHVzaChjYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlRnVuYy5hcHBseSh0aGlzQXJnLCBub2RlQXJncyQyKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVub2Rl
aWZpZWRGdW5jdGlvbi5fX3Byb3RvX18gPSBub2RlRnVuYzsKLSAgICAgICAgICAgIHJldHVybiBk
ZW5vZGVpZmllZEZ1bmN0aW9uOwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2
cC9wcm9taXNlLWhhc2gnLCBbCi0gICAgJy4vZW51bWVyYXRvcicsCi0gICAgJy4vLWludGVybmFs
JywKLSAgICAnLi91dGlscycsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVw
ZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZXhwb3J0c19f
KSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIEVudW1lcmF0b3IgPSBfX2Rl
cGVuZGVuY3kxX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIFBFTkRJTkcgPSBfX2RlcGVuZGVu
Y3kyX18uUEVORElORzsKLSAgICAgICAgdmFyIEZVTEZJTExFRCA9IF9fZGVwZW5kZW5jeTJfXy5G
VUxGSUxMRUQ7Ci0gICAgICAgIHZhciBvX2NyZWF0ZSA9IF9fZGVwZW5kZW5jeTNfXy5vX2NyZWF0
ZTsKLSAgICAgICAgZnVuY3Rpb24gUHJvbWlzZUhhc2goQ29uc3RydWN0b3IsIG9iamVjdCwgbGFi
ZWwpIHsKLSAgICAgICAgICAgIHRoaXMuX3N1cGVyQ29uc3RydWN0b3IoQ29uc3RydWN0b3IsIG9i
amVjdCwgdHJ1ZSwgbGFiZWwpOwotICAgICAgICB9Ci0gICAgICAgIF9fZXhwb3J0c19fWydkZWZh
dWx0J10gPSBQcm9taXNlSGFzaDsKLSAgICAgICAgUHJvbWlzZUhhc2gucHJvdG90eXBlID0gb19j
cmVhdGUoRW51bWVyYXRvci5wcm90b3R5cGUpOwotICAgICAgICBQcm9taXNlSGFzaC5wcm90b3R5
cGUuX3N1cGVyQ29uc3RydWN0b3IgPSBFbnVtZXJhdG9yOwotICAgICAgICBQcm9taXNlSGFzaC5w
cm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLl9yZXN1bHQg
PSB7fTsKLSAgICAgICAgfTsKLSAgICAgICAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl92YWxpZGF0
ZUlucHV0ID0gZnVuY3Rpb24gKGlucHV0KSB7Ci0gICAgICAgICAgICByZXR1cm4gaW5wdXQgJiYg
dHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JzsKLSAgICAgICAgfTsKLSAgICAgICAgUHJvbWlzZUhh
c2gucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IEVycm9yKCdQcm9taXNlLmhhc2ggbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBv
YmplY3QnKTsKLSAgICAgICAgfTsKLSAgICAgICAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl9lbnVt
ZXJhdGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJv
bWlzZTsKLSAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuX2lucHV0OwotICAgICAgICAgICAg
dmFyIHJlc3VsdHMgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpbnB1dCkgewot
ICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpbnB1dC5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjoga2V5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgZW50cnk6IGlucHV0W2tleV0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJl
c3VsdHMubGVuZ3RoOwotICAgICAgICAgICAgdGhpcy5fcmVtYWluaW5nID0gbGVuZ3RoOwotICAg
ICAgICAgICAgdmFyIHJlc3VsdDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBwcm9taXNl
Ll9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHRzW2ldOwotICAgICAgICAgICAgICAgIHRoaXMuX2VhY2hFbnRyeShy
ZXN1bHQuZW50cnksIHJlc3VsdC5wb3NpdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3ZwL3Byb21pc2UnLCBbCi0gICAgJy4vY29uZmlnJywK
LSAgICAnLi9ldmVudHMnLAotICAgICcuL2luc3RydW1lbnQnLAotICAgICcuL3V0aWxzJywKLSAg
ICAnLi8taW50ZXJuYWwnLAotICAgICcuL3Byb21pc2UvY2FzdCcsCi0gICAgJy4vcHJvbWlzZS9h
bGwnLAotICAgICcuL3Byb21pc2UvcmFjZScsCi0gICAgJy4vcHJvbWlzZS9yZXNvbHZlJywKLSAg
ICAnLi9wcm9taXNlL3JlamVjdCcsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9f
ZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kzX18sIF9fZGVwZW5k
ZW5jeTRfXywgX19kZXBlbmRlbmN5NV9fLCBfX2RlcGVuZGVuY3k2X18sIF9fZGVwZW5kZW5jeTdf
XywgX19kZXBlbmRlbmN5OF9fLCBfX2RlcGVuZGVuY3k5X18sIF9fZGVwZW5kZW5jeTEwX18sIF9f
ZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIGNvbmZpZyA9
IF9fZGVwZW5kZW5jeTFfXy5jb25maWc7Ci0gICAgICAgIHZhciBFdmVudFRhcmdldCA9IF9fZGVw
ZW5kZW5jeTJfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgaW5zdHJ1bWVudCA9IF9fZGVwZW5k
ZW5jeTNfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgb2JqZWN0T3JGdW5jdGlvbiA9IF9fZGVw
ZW5kZW5jeTRfXy5vYmplY3RPckZ1bmN0aW9uOwotICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IF9f
ZGVwZW5kZW5jeTRfXy5pc0Z1bmN0aW9uOwotICAgICAgICB2YXIgbm93ID0gX19kZXBlbmRlbmN5
NF9fLm5vdzsKLSAgICAgICAgdmFyIG5vb3AgPSBfX2RlcGVuZGVuY3k1X18ubm9vcDsKLSAgICAg
ICAgdmFyIHJlc29sdmUgPSBfX2RlcGVuZGVuY3k1X18ucmVzb2x2ZTsKLSAgICAgICAgdmFyIHJl
amVjdCA9IF9fZGVwZW5kZW5jeTVfXy5yZWplY3Q7Ci0gICAgICAgIHZhciBmdWxmaWxsID0gX19k
ZXBlbmRlbmN5NV9fLmZ1bGZpbGw7Ci0gICAgICAgIHZhciBzdWJzY3JpYmUgPSBfX2RlcGVuZGVu
Y3k1X18uc3Vic2NyaWJlOwotICAgICAgICB2YXIgaW5pdGlhbGl6ZVByb21pc2UgPSBfX2RlcGVu
ZGVuY3k1X18uaW5pdGlhbGl6ZVByb21pc2U7Ci0gICAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9
IF9fZGVwZW5kZW5jeTVfXy5pbnZva2VDYWxsYmFjazsKLSAgICAgICAgdmFyIEZVTEZJTExFRCA9
IF9fZGVwZW5kZW5jeTVfXy5GVUxGSUxMRUQ7Ci0gICAgICAgIHZhciBjYXN0ID0gX19kZXBlbmRl
bmN5Nl9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBhbGwgPSBfX2RlcGVuZGVuY3k3X19bJ2Rl
ZmF1bHQnXTsKLSAgICAgICAgdmFyIHJhY2UgPSBfX2RlcGVuZGVuY3k4X19bJ2RlZmF1bHQnXTsK
LSAgICAgICAgdmFyIFJlc29sdmUgPSBfX2RlcGVuZGVuY3k5X19bJ2RlZmF1bHQnXTsKLSAgICAg
ICAgdmFyIFJlamVjdCA9IF9fZGVwZW5kZW5jeTEwX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFy
IGd1aWRLZXkgPSAncnN2cF8nICsgbm93KCkgKyAnLSc7Ci0gICAgICAgIHZhciBjb3VudGVyID0g
MDsKLSAgICAgICAgZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUg
Zmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTsKLSAgICAgICAgfQot
ICAgICAgICBmdW5jdGlvbiBuZWVkc05ldygpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ0ZhaWxlZCB0byBjb25zdHJ1Y3QgXCdQcm9taXNlXCc6IFBsZWFzZSB1c2UgdGhlIFwn
bmV3XCcgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQg
YXMgYSBmdW5jdGlvbi4nKTsKLSAgICAgICAgfQotICAgICAgICBfX2V4cG9ydHNfX1snZGVmYXVs
dCddID0gUHJvbWlzZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFByb21pc2Ugb2JqZWN0
cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0
aW9uLiBUaGUKLSAgICAgICAgICAgICAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBh
IHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2gKLSAgICAgICAgICAg
ICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2
ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24KLSAgICAgICAgICAgICAgd2h5IHRoZSBwcm9taXNl
IGNhbm5vdCBiZSBmdWxmaWxsZWQuCi0KLSAgICAgICAgICAgICAgVGVybWlub2xvZ3kKLSAgICAg
ICAgICAgICAgLS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICAtIGBwcm9taXNlYCBpcyBhbiBv
YmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29u
Zm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLgotICAgICAgICAgICAgICAtIGB0aGVuYWJsZWAg
aXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuCi0g
ICAgICAgICAgICAgIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5j
bHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS4KLSAgICAgICAgICAg
ICAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJv
dyBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGlu
ZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC4KLSAgICAgICAgICAgICAgLSBgc2V0
dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3Ig
cmVqZWN0ZWQuCi0KLSAgICAgICAgICAgICAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhy
ZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLgotCi0gICAgICAgICAg
ICAgIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUg
YW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkCi0gICAgICAgICAgICAgIHN0YXRlLiAgUHJvbWlzZXMg
dGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGUK
LSAgICAgICAgICAgICAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5l
dmVyIGEgdGhlbmFibGUuCi0KLSAgICAgICAgICAgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2Fp
ZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhCi0gICAgICAg
ICAgICAgIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRl
IHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3MKLSAgICAgICAgICAgICAgc2V0dGxlZCBzdGF0ZS4gIFNv
IGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsCi0g
ICAgICAgICAgICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMq
IGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGwKLSAgICAgICAgICAgICAgaXRzZWxmIGZ1bGZp
bGwuCi0KLQotICAgICAgICAgICAgICBCYXNpYyBVc2FnZToKLSAgICAgICAgICAgICAgLS0tLS0t
LS0tLS0tCi0KLSAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgdmFyIHByb21pc2Ug
PSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAg
ICAvLyBvbiBzdWNjZXNzCi0gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBvbiBmYWlsdXJlCi0gICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7
Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlv
bih2YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50Ci0gICAgICAgICAg
ICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgICAgICAgICAgIC8vIG9uIHJlamVjdGlv
bgotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAg
QWR2YW5jZWQgVXNhZ2U6Ci0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAg
ICAgICAgIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMg
aW50ZXJhY3Rpb25zIHN1Y2ggYXMKLSAgICAgICAgICAgICAgYFhNTEh0dHBSZXF1ZXN0YHMuCi0K
LSAgICAgICAgICAgICAgYGBganMKLSAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SlNPTih1cmwp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwg
cmVqZWN0KXsKLSAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKLQotICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7Ci0gICAgICAgICAg
ICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjsKLSAgICAgICAgICAgICAg
ICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7Ci0gICAgICAgICAgICAgICAgICB4aHIuc2V0
UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKLSAgICAgICAgICAg
ICAgICAgIHhoci5zZW5kKCk7Ci0KLSAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9O
RSkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpOwotICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3
IEVycm9yKCJnZXRKU09OOiBgIiArIHVybCArICJgIGZhaWxlZCB3aXRoIHN0YXR1czogWyIgKyB0
aGlzLnN0YXR1cyArICJdIikpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhl
bihmdW5jdGlvbihqc29uKSB7Ci0gICAgICAgICAgICAgICAgLy8gb24gZnVsZmlsbG1lbnQKLSAg
ICAgICAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAgLy8gb24g
cmVqZWN0aW9uCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAg
ICAgICAgICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBw
cmltaXRpdmVzLgotCi0gICAgICAgICAgICAgIGBgYGpzCi0gICAgICAgICAgICAgIFByb21pc2Uu
YWxsKFsKLSAgICAgICAgICAgICAgICBnZXRKU09OKCcvcG9zdHMnKSwKLSAgICAgICAgICAgICAg
ICBnZXRKU09OKCcvY29tbWVudHMnKQotICAgICAgICAgICAgICBdKS50aGVuKGZ1bmN0aW9uKHZh
bHVlcyl7Ci0gICAgICAgICAgICAgICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTgotICAgICAg
ICAgICAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT04KLQotICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZXM7Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAY2xhc3MgUlNWUC5Qcm9taXNlCi0gICAgICAgICAgICAgIEBwYXJhbSB7
ZnVuY3Rpb259IHJlc29sdmVyCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBv
cHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgICAgICAgICBV
c2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEBjb25zdHJ1Y3RvcgotICAgICAgICAg
ICAgKi8KLSAgICAgICAgZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlciwgbGFiZWwpIHsKLSAgICAg
ICAgICAgIHRoaXMuX2lkID0gY291bnRlcisrOwotICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBs
YWJlbDsKLSAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107Ci0gICAgICAgICAgICBp
ZiAoY29uZmlnLmluc3RydW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVtZW50KCdjcmVh
dGVkJywgdGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9vcCAhPT0gcmVz
b2x2ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzRnVuY3Rpb24ocmVzb2x2ZXIpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG5lZWRzUmVzb2x2ZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG5lZWRzTmV3KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBQcm9taXNlLmNhc3QgPSBjYXN0OwotICAgICAgICBQcm9taXNlLmFs
bCA9IGFsbDsKLSAgICAgICAgUHJvbWlzZS5yYWNlID0gcmFjZTsKLSAgICAgICAgUHJvbWlzZS5y
ZXNvbHZlID0gUmVzb2x2ZTsKLSAgICAgICAgUHJvbWlzZS5yZWplY3QgPSBSZWplY3Q7Ci0gICAg
ICAgIFByb21pc2UucHJvdG90eXBlID0gewotICAgICAgICAgICAgY29uc3RydWN0b3I6IFByb21p
c2UsCi0gICAgICAgICAgICBfaWQ6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIF9ndWlkS2V5OiBn
dWlkS2V5LAotICAgICAgICAgICAgX2xhYmVsOiB1bmRlZmluZWQsCi0gICAgICAgICAgICBfc3Rh
dGU6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgIF9yZXN1bHQ6IHVuZGVmaW5lZCwKLSAgICAgICAg
ICAgIF9zdWJzY3JpYmVyczogdW5kZWZpbmVkLAotICAgICAgICAgICAgX29uZXJyb3I6IGZ1bmN0
aW9uIChyZWFzb24pIHsKLSAgICAgICAgICAgICAgICBjb25maWcudHJpZ2dlcignZXJyb3InLCBy
ZWFzb24pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChvbkZ1
bGZpbGxtZW50LCBvblJlamVjdGlvbiwgbGFiZWwpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFy
ZW50ID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJlbnQuX29uZXJyb3IgPSBudWxsOwotICAg
ICAgICAgICAgICAgIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG5vb3AsIGxhYmVs
KTsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBwYXJlbnQuX3N0YXRlOwotICAgICAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBwYXJlbnQuX3Jlc3VsdDsKLSAgICAgICAgICAgICAgICBpZiAo
Y29uZmlnLmluc3RydW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudCgnY2hh
aW5lZCcsIHBhcmVudCwgY2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGUgPT09IEZVTEZJTExFRCAmJiBvbkZ1bGZpbGxtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbmZpZy5hc3luYyhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBv
blJlamVjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBj
aGlsZDsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25S
ZWplY3Rpb24sIGxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlbihudWxs
LCBvblJlamVjdGlvbiwgbGFiZWwpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdmaW5h
bGx5JzogZnVuY3Rpb24gKGNhbGxiYWNrLCBsYWJlbCkgewotICAgICAgICAgICAgICAgIHZhciBj
b25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMudGhlbihmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0sIGxhYmVsKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAvcHJvbWlzZS9hbGwnLCBbCi0gICAg
Jy4uL2VudW1lcmF0b3InLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVu
ZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAg
dmFyIEVudW1lcmF0b3IgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1bHQnXTsKLSAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgIGBSU1ZQLlByb21pc2UuYWxsYCBhY2NlcHRzIGFuIGFycmF5IG9mIHBy
b21pc2VzLCBhbmQgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoCi0gICAgICAgICAgICAgIGlz
IGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIGZ1bGZpbGxtZW50IHZhbHVlcyBmb3IgdGhlIHBh
c3NlZCBwcm9taXNlcywgb3IKLSAgICAgICAgICAgICAgcmVqZWN0ZWQgd2l0aCB0aGUgcmVhc29u
IG9mIHRoZSBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBiZSByZWplY3RlZC4gSXQgY2FzdHMgYWxs
Ci0gICAgICAgICAgICAgIGVsZW1lbnRzIG9mIHRoZSBwYXNzZWQgaXRlcmFibGUgdG8gcHJvbWlz
ZXMgYXMgaXQgcnVucyB0aGlzIGFsZ29yaXRobS4KLQotICAgICAgICAgICAgICBFeGFtcGxlOgot
Ci0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2Ux
ID0gUlNWUC5yZXNvbHZlKDEpOwotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLnJl
c29sdmUoMik7Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMyA9IFJTVlAucmVzb2x2ZSgzKTsK
LSAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21p
c2UzIF07Ci0KLSAgICAgICAgICAgICAgUlNWUC5Qcm9taXNlLmFsbChwcm9taXNlcykudGhlbihm
dW5jdGlvbihhcnJheSl7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQg
YmUgWyAxLCAyLCAzIF07Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYFJTVlAuYWxs
YCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlCi0gICAgICAgICAgICAgIHRoYXQgaXMg
cmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJv
bWlzZXMncwotICAgICAgICAgICAgICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6Ci0K
LSAgICAgICAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICAgICAgICAgIHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsKLSAgICAgICAgICAg
ICAgdmFyIHByb21pc2UyID0gUlNWUC5yZWplY3QobmV3IEVycm9yKCIyIikpOwotICAgICAgICAg
ICAgICB2YXIgcHJvbWlzZTMgPSBSU1ZQLnJlamVjdChuZXcgRXJyb3IoIjMiKSk7Ci0gICAgICAg
ICAgICAgIHZhciBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwot
Ci0gICAgICAgICAgICAgIFJTVlAuUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24o
YXJyYXkpewotICAgICAgICAgICAgICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2Ug
dGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIQotICAgICAgICAgICAgICB9LCBmdW5jdGlvbihl
cnJvcikgewotICAgICAgICAgICAgICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09ICIyIgotICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBh
bGwKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAcGFyYW0ge0FycmF5fSBl
bnRyaWVzIGFycmF5IG9mIHByb21pc2VzCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBs
YWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgICAg
ICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9
IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgYHByb21pc2VzYCBoYXZlIGJlZW4K
LSAgICAgICAgICAgICAgZnVsZmlsbGVkLCBvciByZWplY3RlZCBpZiBhbnkgb2YgdGhlbSBiZWNv
bWUgcmVqZWN0ZWQuCi0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAg
ICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiBhbGwoZW50cmllcywgbGFiZWwp
IHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzLCB0cnVl
LCBsYWJlbCkucHJvbWlzZTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAv
cHJvbWlzZS9jYXN0JywgWwotICAgICcuL3Jlc29sdmUnLAotICAgICdleHBvcnRzJwotICAgIF0s
IGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0gICAgICAgICd1c2Ug
c3RyaWN0JzsKLSAgICAgICAgdmFyIHJlc29sdmUgPSBfX2RlcGVuZGVuY3kxX19bJ2RlZmF1bHQn
XTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIEBkZXByZWNhdGVkCi0KLSAgICAgICAgICAg
ICAgYFJTVlAuUHJvbWlzZS5jYXN0YCBjb2VyY2VzIGl0cyBhcmd1bWVudCB0byBhIHByb21pc2Us
IG9yIHJldHVybnMgdGhlCi0gICAgICAgICAgICAgIGFyZ3VtZW50IGlmIGl0IGlzIGFscmVhZHkg
YSBwcm9taXNlIHdoaWNoIHNoYXJlcyBhIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNhc3Rlci4KLQot
ICAgICAgICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgICAgICAgICAgdmFyIHByb21pc2UgPSBSU1ZQLlByb21pc2UucmVzb2x2ZSgxKTsKLSAgICAg
ICAgICAgICAgdmFyIGNhc3RlZCA9IFJTVlAuUHJvbWlzZS5jYXN0KHByb21pc2UpOwotCi0gICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKHByb21pc2UgPT09IGNhc3RlZCk7IC8vIHRydWUKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgSW4gdGhlIGNhc2Ugb2YgYSBwcm9taXNlIHdo
b3NlIGNvbnN0cnVjdG9yIGRvZXMgbm90IG1hdGNoLCBpdCBpcyBhc3NpbWlsYXRlZC4KLSAgICAg
ICAgICAgICAgVGhlIHJlc3VsdGluZyBwcm9taXNlIHdpbGwgZnVsZmlsbCBvciByZWplY3QgYmFz
ZWQgb24gdGhlIG91dGNvbWUgb2YgdGhlCi0gICAgICAgICAgICAgIHByb21pc2UgYmVpbmcgY2Fz
dGVkLgotCi0gICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICAgICAgICB2YXIgdGhlbm5hYmxlID0gJC5nZXRKU09OKCcvYXBpL2Zvbycp
OwotICAgICAgICAgICAgICB2YXIgY2FzdGVkID0gUlNWUC5Qcm9taXNlLmNhc3QodGhlbm5hYmxl
KTsKLQotICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGVubmFibGUgPT09IGNhc3RlZCk7IC8v
IGZhbHNlCi0gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNhc3RlZCBpbnN0YW5jZW9mIFJTVlAu
UHJvbWlzZSkgLy8gdHJ1ZQotCi0gICAgICAgICAgICAgIGNhc3RlZC50aGVuKGZ1bmN0aW9uKGRh
dGEpIHsKLSAgICAgICAgICAgICAgICAvLyBkYXRhIGlzIHRoZSB2YWx1ZSBnZXRKU09OIGZ1bGZp
bGxzIHdpdGgKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAg
ICAgICAgIEluIHRoZSBjYXNlIG9mIGEgbm9uLXByb21pc2UsIGEgcHJvbWlzZSB3aGljaCB3aWxs
IGZ1bGZpbGwgd2l0aCB0aGF0IHZhbHVlIGlzCi0gICAgICAgICAgICAgIHJldHVybmVkLgotCi0g
ICAgICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgICAgICAgICB2YXIgdmFsdWUgPSAxOyAvLyBjb3VsZCBiZSBhIG51bWJlciwgYm9vbGVhbiwg
c3RyaW5nLCB1bmRlZmluZWQuLi4KLSAgICAgICAgICAgICAgdmFyIGNhc3RlZCA9IFJTVlAuUHJv
bWlzZS5jYXN0KHZhbHVlKTsKLQotICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSA9PT0g
Y2FzdGVkKTsgLy8gZmFsc2UKLSAgICAgICAgICAgICAgY29uc29sZS5sb2coY2FzdGVkIGluc3Rh
bmNlb2YgUlNWUC5Qcm9taXNlKSAvLyB0cnVlCi0KLSAgICAgICAgICAgICAgY2FzdGVkLnRoZW4o
ZnVuY3Rpb24odmFsKSB7Ci0gICAgICAgICAgICAgICAgdmFsID09PSB2YWx1ZSAvLyA9PiB0cnVl
Ci0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBg
UlNWUC5Qcm9taXNlLmNhc3RgIGlzIHNpbWlsYXIgdG8gYFJTVlAuUHJvbWlzZS5yZXNvbHZlYCwg
YnV0IGBSU1ZQLlByb21pc2UuY2FzdGAgZGlmZmVycyBpbiB0aGUKLSAgICAgICAgICAgICAgZm9s
bG93aW5nIHdheXM6Ci0KLSAgICAgICAgICAgICAgKiBgUlNWUC5Qcm9taXNlLmNhc3RgIHNlcnZl
cyBhcyBhIG1lbW9yeS1lZmZpY2llbnQgd2F5IG9mIGdldHRpbmcgYSBwcm9taXNlLCB3aGVuIHlv
dQotICAgICAgICAgICAgICBoYXZlIHNvbWV0aGluZyB0aGF0IGNvdWxkIGVpdGhlciBiZSBhIHBy
b21pc2Ugb3IgYSB2YWx1ZS4gUlNWUC5yZXNvbHZlCi0gICAgICAgICAgICAgIHdpbGwgaGF2ZSB0
aGUgc2FtZSBlZmZlY3QgYnV0IHdpbGwgY3JlYXRlIGEgbmV3IHByb21pc2Ugd3JhcHBlciBpZiB0
aGUKLSAgICAgICAgICAgICAgYXJndW1lbnQgaXMgYSBwcm9taXNlLgotICAgICAgICAgICAgICAq
IGBSU1ZQLlByb21pc2UuY2FzdGAgaXMgYSB3YXkgb2YgY2FzdGluZyBpbmNvbWluZyB0aGVuYWJs
ZXMgb3IgcHJvbWlzZSBzdWJjbGFzc2VzIHRvCi0gICAgICAgICAgICAgIHByb21pc2VzIG9mIHRo
ZSBleGFjdCBjbGFzcyBzcGVjaWZpZWQsIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBvYmplY3QncyBg
dGhlbmAgaXMKLSAgICAgICAgICAgICAgZW5zdXJlZCB0byBoYXZlIHRoZSBiZWhhdmlvciBvZiB0
aGUgY29uc3RydWN0b3IgeW91IGFyZSBjYWxsaW5nIGNhc3Qgb24gKGkuZS4sIFJTVlAuUHJvbWlz
ZSkuCi0KLSAgICAgICAgICAgICAgQG1ldGhvZCBjYXN0Ci0gICAgICAgICAgICAgIEBzdGF0aWMK
LSAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCB0byBiZSBjYXN0ZWQKLSAgICAg
ICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxp
bmcgdGhlIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAg
ICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZQotICAgICAgICAgICAgKi8KLSAgICAg
ICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IHJlc29sdmU7Ci0gICAgfSk7Ci0gICAgZGVmaW5l
KCdyc3ZwL3Byb21pc2UvcmFjZScsIFsKLSAgICAnLi4vdXRpbHMnLAotICAgICcuLi8taW50ZXJu
YWwnLAotICAgICdleHBvcnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAg
ICAgICB2YXIgaXNBcnJheSA9IF9fZGVwZW5kZW5jeTFfXy5pc0FycmF5OwotICAgICAgICB2YXIg
aXNGdW5jdGlvbiA9IF9fZGVwZW5kZW5jeTFfXy5pc0Z1bmN0aW9uOwotICAgICAgICB2YXIgaXNN
YXliZVRoZW5hYmxlID0gX19kZXBlbmRlbmN5MV9fLmlzTWF5YmVUaGVuYWJsZTsKLSAgICAgICAg
dmFyIG5vb3AgPSBfX2RlcGVuZGVuY3kyX18ubm9vcDsKLSAgICAgICAgdmFyIHJlc29sdmUgPSBf
X2RlcGVuZGVuY3kyX18ucmVzb2x2ZTsKLSAgICAgICAgdmFyIHJlamVjdCA9IF9fZGVwZW5kZW5j
eTJfXy5yZWplY3Q7Ci0gICAgICAgIHZhciBzdWJzY3JpYmUgPSBfX2RlcGVuZGVuY3kyX18uc3Vi
c2NyaWJlOwotICAgICAgICB2YXIgUEVORElORyA9IF9fZGVwZW5kZW5jeTJfXy5QRU5ESU5HOwot
ICAgICAgICAvKioKLSAgICAgICAgICAgICAgYFJTVlAuUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEg
bmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlCi0gICAg
ICAgICAgICAgIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS4KLQotICAgICAgICAgICAg
ICBFeGFtcGxlOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAg
dmFyIHByb21pc2UxID0gbmV3IFJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
ewotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAg
ICAgIHJlc29sdmUoInByb21pc2UgMSIpOwotICAgICAgICAgICAgICAgIH0sIDIwMCk7Ci0gICAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgIHZhciBwcm9taXNlMiA9IG5ldyBSU1ZQLlBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICByZXNvbHZlKCJwcm9taXNlIDIiKTsK
LSAgICAgICAgICAgICAgICB9LCAxMDApOwotICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICBSU1ZQLlByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlv
bihyZXN1bHQpewotICAgICAgICAgICAgICAgIC8vIHJlc3VsdCA9PT0gInByb21pc2UgMiIgYmVj
YXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxCi0gICAgICAgICAgICAgICAgLy8g
d2FzIHJlc29sdmVkLgotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBgCi0KLSAg
ICAgICAgICAgICAgYFJTVlAuUHJvbWlzZS5yYWNlYCBpcyBkZXRlcm1pbmlzdGljIGluIHRoYXQg
b25seSB0aGUgc3RhdGUgb2YgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgIHNldHRsZWQgcHJvbWlz
ZSBtYXR0ZXJzLiBGb3IgZXhhbXBsZSwgZXZlbiBpZiBvdGhlciBwcm9taXNlcyBnaXZlbiB0byB0
aGUKLSAgICAgICAgICAgICAgYHByb21pc2VzYCBhcnJheSBhcmd1bWVudCBhcmUgcmVzb2x2ZWQs
IGJ1dCB0aGUgZmlyc3Qgc2V0dGxlZCBwcm9taXNlIGhhcwotICAgICAgICAgICAgICBiZWNvbWUg
cmVqZWN0ZWQgYmVmb3JlIHRoZSBvdGhlciBwcm9taXNlcyBiZWNhbWUgZnVsZmlsbGVkLCB0aGUg
cmV0dXJuZWQKLSAgICAgICAgICAgICAgcHJvbWlzZSB3aWxsIGJlY29tZSByZWplY3RlZDoKLQot
ICAgICAgICAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAgICAgICAgIHZhciBwcm9taXNlMSA9
IG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICByZXNvbHZlKCJw
cm9taXNlIDEiKTsKLSAgICAgICAgICAgICAgICB9LCAyMDApOwotICAgICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCl7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigicHJvbWlzZSAyIikpOwotICAg
ICAgICAgICAgICAgIH0sIDEwMCk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
IFJTVlAuUHJvbWlzZS5yYWNlKFtwcm9taXNlMSwgcHJvbWlzZTJdKS50aGVuKGZ1bmN0aW9uKHJl
c3VsdCl7Ci0gICAgICAgICAgICAgICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMKLSAgICAgICAg
ICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXsKLSAgICAgICAgICAgICAgICAvLyByZWFzb24ubWVz
c2FnZSA9PT0gInByb21pc2UgMiIgYmVjYXVzZSBwcm9taXNlIDIgYmVjYW1lIHJlamVjdGVkIGJl
Zm9yZQotICAgICAgICAgICAgICAgIC8vIHByb21pc2UgMSBiZWNhbWUgZnVsZmlsbGVkCi0gICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAKLQotICAgICAgICAgICAgICBBbiBleGFt
cGxlIHJlYWwtd29ybGQgdXNlIGNhc2UgaXMgaW1wbGVtZW50aW5nIHRpbWVvdXRzOgotCi0gICAg
ICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgUlNWUC5Qcm9taXNlLnJhY2Uo
W2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKQotICAgICAgICAgICAgICBgYGAKLQot
ICAgICAgICAgICAgICBAbWV0aG9kIHJhY2UKLSAgICAgICAgICAgICAgQHN0YXRpYwotICAgICAg
ICAgICAgICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNl
cnZlCi0gICAgICAgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcg
Zm9yIGRlc2NyaWJpbmcgdGhlIHByb21pc2UgcmV0dXJuZWQuCi0gICAgICAgICAgICAgIFVzZWZ1
bCBmb3IgdG9vbGluZy4KLSAgICAgICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNl
IHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWQKLSAgICAg
ICAgICAgICAgcHJvbWlzZSB0byBzZXR0bGUuCi0gICAgICAgICAgICAqLwotICAgICAgICBfX2V4
cG9ydHNfX1snZGVmYXVsdCddID0gZnVuY3Rpb24gcmFjZShlbnRyaWVzLCBsYWJlbCkgewotICAg
ICAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KLSAgICAgICAgICAgIHZhciBDb25z
dHJ1Y3RvciA9IHRoaXMsIGVudHJ5OwotICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgQ29u
c3RydWN0b3Iobm9vcCwgbGFiZWwpOwotICAgICAgICAgICAgaWYgKCFpc0FycmF5KGVudHJpZXMp
KSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ1lvdSBt
dXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBy
b21pc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5s
ZW5ndGg7Ci0gICAgICAgICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxtZW50KHZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmdW5jdGlvbiBvblJlamVjdGlvbihyZWFzb24pIHsKLSAgICAgICAgICAgICAgICBy
ZWplY3QocHJvbWlzZSwgcmVhc29uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBzdWJzY3JpYmUoQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVz
W2ldKSwgdW5kZWZpbmVkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAg
ICBkZWZpbmUoJ3JzdnAvcHJvbWlzZS9yZWplY3QnLCBbCi0gICAgJy4uLy1pbnRlcm5hbCcsCi0g
ICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFfXywgX19leHBvcnRz
X18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgbm9vcCA9IF9fZGVwZW5k
ZW5jeTFfXy5ub29wOwotICAgICAgICB2YXIgX3JlamVjdCA9IF9fZGVwZW5kZW5jeTFfXy5yZWpl
Y3Q7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgUlNWUC5Qcm9taXNlLnJlamVjdGAgcmV0
dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLgotICAgICAg
ICAgICAgICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBSU1ZQLlBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgICAgICAgICByZWplY3Qo
bmV3IEVycm9yKCdXSE9PUFMnKSk7Ci0gICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAg
IHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7Ci0gICAgICAgICAgICAgICAgLy8gQ29kZSBo
ZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhCi0gICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7Ci0gICAgICAgICAgICAgICAgLy8gcmVhc29uLm1l
c3NhZ2UgPT09ICdXSE9PUFMnCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICBgYGAK
LQotICAgICAgICAgICAgICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUg
bm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICAgICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFJTVlAuUHJvbWlzZS5yZWplY3Qo
bmV3IEVycm9yKCdXSE9PUFMnKSk7Ci0KLSAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0
aW9uKHZhbHVlKXsKLSAgICAgICAgICAgICAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVj
YXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCEKLSAgICAgICAgICAgICAgfSwgZnVuY3Rpb24o
cmVhc29uKXsKLSAgICAgICAgICAgICAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUycK
LSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIGBgYAotCi0gICAgICAgICAgICAgIEBt
ZXRob2QgcmVqZWN0Ci0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQHBhcmFt
IHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVq
ZWN0ZWQgd2l0aC4KLSAgICAgICAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFs
IHN0cmluZyBmb3IgaWRlbnRpZnlpbmcgdGhlIHJldHVybmVkIHByb21pc2UuCi0gICAgICAgICAg
ICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAgICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0g
YSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIGdpdmVuIGByZWFzb25gLgotICAgICAgICAgICAg
Ki8KLSAgICAgICAgX19leHBvcnRzX19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIHJlamVjdChyZWFz
b24sIGxhYmVsKSB7Ci0gICAgICAgICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLwotICAg
ICAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpczsKLSAgICAgICAgICAgIHZhciBwcm9taXNl
ID0gbmV3IENvbnN0cnVjdG9yKG5vb3AsIGxhYmVsKTsKLSAgICAgICAgICAgIF9yZWplY3QocHJv
bWlzZSwgcmVhc29uKTsKLSAgICAgICAgICAgIHJldHVybiBwcm9taXNlOwotICAgICAgICB9Owot
ICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9wcm9taXNlL3Jlc29sdmUnLCBbCi0gICAgJy4uLy1p
bnRlcm5hbCcsCi0gICAgJ2V4cG9ydHMnCi0gICAgXSwgZnVuY3Rpb24gKF9fZGVwZW5kZW5jeTFf
XywgX19leHBvcnRzX18pIHsKLSAgICAgICAgJ3VzZSBzdHJpY3QnOwotICAgICAgICB2YXIgbm9v
cCA9IF9fZGVwZW5kZW5jeTFfXy5ub29wOwotICAgICAgICB2YXIgX3Jlc29sdmUgPSBfX2RlcGVu
ZGVuY3kxX18ucmVzb2x2ZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIGBSU1ZQLlByb21p
c2UucmVzb2x2ZWAgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSByZXNvbHZlZCB3
aXRoIHRoZQotICAgICAgICAgICAgICBwYXNzZWQgYHZhbHVlYC4gSXQgaXMgc2hvcnRoYW5kIGZv
ciB0aGUgZm9sbG93aW5nOgotCi0gICAgICAgICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAg
ICAgICAgdmFyIHByb21pc2UgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCl7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZSgxKTsKLSAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgICAg
ICAgICAvLyB2YWx1ZSA9PT0gMQotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgYGBg
Ci0KLSAgICAgICAgICAgICAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2Rl
IG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOgotCi0gICAgICAgICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBSU1ZQLlByb21pc2UucmVzb2x2
ZSgxKTsKLQotICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpewotICAg
ICAgICAgICAgICAgIC8vIHZhbHVlID09PSAxCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICBgYGAKLQotICAgICAgICAgICAgICBAbWV0aG9kIHJlc29sdmUKLSAgICAgICAgICAgICAg
QHN0YXRpYwotICAgICAgICAgICAgICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUg
cmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGgKLSAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgaWRlbnRpZnlpbmcgdGhlIHJl
dHVybmVkIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAg
ICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVs
ZmlsbGVkIHdpdGggdGhlIGdpdmVuCi0gICAgICAgICAgICAgIGB2YWx1ZWAKLSAgICAgICAgICAg
ICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiByZXNvbHZlKG9i
amVjdCwgbGFiZWwpIHsKLSAgICAgICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovCi0g
ICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzOwotICAgICAgICAgICAgaWYgKG9iamVj
dCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09
IENvbnN0cnVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3AsIGxh
YmVsKTsKLSAgICAgICAgICAgIF9yZXNvbHZlKHByb21pc2UsIG9iamVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcHJvbWlzZTsKLSAgICAgICAgfTsKLSAgICB9KTsKLSAgICBkZWZpbmUoJ3JzdnAv
cmFjZScsIFsKLSAgICAnLi9wcm9taXNlJywKLSAgICAnZXhwb3J0cycKLSAgICBdLCBmdW5jdGlv
biAoX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7
Ci0gICAgICAgIHZhciBQcm9taXNlID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAg
ICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVudCBhbGlhcyBmb3IgYFJT
VlAuUHJvbWlzZS5yYWNlYC4KLQotICAgICAgICAgICAgICBAbWV0aG9kIHJhY2UKLSAgICAgICAg
ICAgICAgQHN0YXRpYwotICAgICAgICAgICAgICBAZm9yIFJTVlAKLSAgICAgICAgICAgICAgQHBh
cmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgb2YgcHJvbWlzZXMuCi0gICAgICAgICAgICAgIEBwYXJh
bSB7U3RyaW5nfSBsYWJlbCBBbiBvcHRpb25hbCBsYWJlbC4gVGhpcyBpcyB1c2VmdWwKLSAgICAg
ICAgICAgICAgZm9yIHRvb2xpbmcuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgX19leHBvcnRz
X19bJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIHJhY2UoYXJyYXksIGxhYmVsKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gUHJvbWlzZS5yYWNlKGFycmF5LCBsYWJlbCk7Ci0gICAgICAgIH07Ci0gICAgfSk7
Ci0gICAgZGVmaW5lKCdyc3ZwL3JlamVjdCcsIFsKLSAgICAnLi9wcm9taXNlJywKLSAgICAnZXhw
b3J0cycKLSAgICBdLCBmdW5jdGlvbiAoX19kZXBlbmRlbmN5MV9fLCBfX2V4cG9ydHNfXykgewot
ICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAgIHZhciBQcm9taXNlID0gX19kZXBlbmRlbmN5
MV9fWydkZWZhdWx0J107Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBUaGlzIGlzIGEgY29u
dmVuaWVudCBhbGlhcyBmb3IgYFJTVlAuUHJvbWlzZS5yZWplY3RgLgotCi0gICAgICAgICAgICAg
IEBtZXRob2QgcmVqZWN0Ci0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICAgQGZv
ciBSU1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7QW55fSByZWFzb24gdmFsdWUgdGhhdCB0aGUg
cmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGguCi0gICAgICAgICAgICAgIEBw
YXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5aW5nIHRoZSBy
ZXR1cm5lZCBwcm9taXNlLgotICAgICAgICAgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAg
ICAgICAgICAgIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBn
aXZlbiBgcmVhc29uYC4KLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZh
dWx0J10gPSBmdW5jdGlvbiByZWplY3QocmVhc29uLCBsYWJlbCkgewotICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbiwgbGFiZWwpOwotICAgICAgICB9OwotICAgIH0pOwot
ICAgIGRlZmluZSgncnN2cC9yZXNvbHZlJywgWwotICAgICcuL3Byb21pc2UnLAotICAgICdleHBv
cnRzJwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZXhwb3J0c19fKSB7Ci0g
ICAgICAgICd1c2Ugc3RyaWN0JzsKLSAgICAgICAgdmFyIFByb21pc2UgPSBfX2RlcGVuZGVuY3kx
X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgLyoqCi0gICAgICAgICAgICAgIFRoaXMgaXMgYSBjb252
ZW5pZW50IGFsaWFzIGZvciBgUlNWUC5Qcm9taXNlLnJlc29sdmVgLgotCi0gICAgICAgICAgICAg
IEBtZXRob2QgcmVzb2x2ZQotICAgICAgICAgICAgICBAc3RhdGljCi0gICAgICAgICAgICAgIEBm
b3IgUlNWUAotICAgICAgICAgICAgICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUg
cmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGgKLSAgICAgICAgICAgICAgQHBh
cmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgaWRlbnRpZnlpbmcgdGhlIHJl
dHVybmVkIHByb21pc2UuCi0gICAgICAgICAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAg
ICAgICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVs
ZmlsbGVkIHdpdGggdGhlIGdpdmVuCi0gICAgICAgICAgICAgIGB2YWx1ZWAKLSAgICAgICAgICAg
ICovCi0gICAgICAgIF9fZXhwb3J0c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiByZXNvbHZlKHZh
bHVlLCBsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSwg
bGFiZWwpOwotICAgICAgICB9OwotICAgIH0pOwotICAgIGRlZmluZSgncnN2cC9yZXRocm93Jywg
WydleHBvcnRzJ10sIGZ1bmN0aW9uIChfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmlj
dCc7Ci0gICAgICAgIC8qKgotICAgICAgICAgICAgICBgUlNWUC5yZXRocm93YCB3aWxsIHJldGhy
b3cgYW4gZXJyb3Igb24gdGhlIG5leHQgdHVybiBvZiB0aGUgSmF2YVNjcmlwdCBldmVudAotICAg
ICAgICAgICAgICBsb29wIGluIG9yZGVyIHRvIGFpZCBkZWJ1Z2dpbmcuCi0KLSAgICAgICAgICAg
ICAgUHJvbWlzZXMgQSsgc3BlY2lmaWVzIHRoYXQgYW55IGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciB3
aXRoIGEgcHJvbWlzZSBtdXN0IGJlCi0gICAgICAgICAgICAgIGNhdWdodCBieSB0aGUgcHJvbWlz
ZXMgaW1wbGVtZW50YXRpb24gYW5kIGJ1YmJsZWQgdG8gdGhlIGxhc3QgaGFuZGxlci4gRm9yCi0g
ICAgICAgICAgICAgIHRoaXMgcmVhc29uLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdh
eXMgc3BlY2lmeSBhIHNlY29uZCByZWplY3Rpb24KLSAgICAgICAgICAgICAgaGFuZGxlciBmdW5j
dGlvbiB0byBgdGhlbmAuIEhvd2V2ZXIsIGBSU1ZQLnJldGhyb3dgIHdpbGwgdGhyb3cgdGhlIGV4
Y2VwdGlvbgotICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBwcm9taXNlLCBzbyBpdCBidWJi
bGVzIHVwIHRvIHlvdXIgY29uc29sZSBpZiBpbiB0aGUgYnJvd3NlciwKLSAgICAgICAgICAgICAg
b3IgZG9tYWluL2NhdXNlIHVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBOb2RlLiBgcmV0aHJvd2Agd2ls
bCBhbHNvIHRocm93IHRoZQotICAgICAgICAgICAgICBlcnJvciBhZ2FpbiBzbyB0aGUgZXJyb3Ig
Y2FuIGJlIGhhbmRsZWQgYnkgdGhlIHByb21pc2UgcGVyIHRoZSBzcGVjLgotCi0gICAgICAgICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICAgICAgICAgZnVuY3Rpb24gdGhyb3dzKCl7Ci0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXaG9vcHMhJyk7Ci0gICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgICAgICAgICB0aHJvd3MoKTsKLSAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgICAgcHJvbWlzZS5jYXRjaChSU1ZQLnJldGhyb3cpLnRoZW4o
ZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVj
YXVzZSB0aGUgcHJvbWlzZSBiZWNhbWUgcmVqZWN0ZWQgZHVlIHRvIGFuCi0gICAgICAgICAgICAg
ICAgLy8gZXJyb3IhCi0gICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpewotICAgICAgICAg
ICAgICAgIC8vIGhhbmRsZSB0aGUgZXJyb3IgaGVyZQotICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgYGBgCi0KLSAgICAgICAgICAgICAgVGhlICdXaG9vcHMnIGVycm9yIHdpbGwgYmUg
dGhyb3duIG9uIHRoZSBuZXh0IHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AKLSAgICAgICAgICAgICAg
YW5kIHlvdSBjYW4gd2F0Y2ggZm9yIGl0IGluIHlvdXIgY29uc29sZS4gWW91IGNhbiBhbHNvIGhh
bmRsZSBpdCB1c2luZyBhCi0gICAgICAgICAgICAgIHJlamVjdGlvbiBoYW5kbGVyIGdpdmVuIHRv
IGAudGhlbmAgb3IgYC5jYXRjaGAgb24gdGhlIHJldHVybmVkIHByb21pc2UuCi0KLSAgICAgICAg
ICAgICAgQG1ldGhvZCByZXRocm93Ci0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAg
ICAgQGZvciBSU1ZQCi0gICAgICAgICAgICAgIEBwYXJhbSB7RXJyb3J9IHJlYXNvbiByZWFzb24g
dGhlIHByb21pc2UgYmVjYW1lIHJlamVjdGVkLgotICAgICAgICAgICAgICBAdGhyb3dzIEVycm9y
Ci0gICAgICAgICAgICAgIEBzdGF0aWMKLSAgICAgICAgICAgICovCi0gICAgICAgIF9fZXhwb3J0
c19fWydkZWZhdWx0J10gPSBmdW5jdGlvbiByZXRocm93KHJlYXNvbikgewotICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgcmVhc29uOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aHJvdyByZWFzb247Ci0gICAgICAgIH07Ci0g
ICAgfSk7Ci0gICAgZGVmaW5lKCdyc3ZwL3V0aWxzJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChf
X2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAgICAgIGZ1bmN0aW9uIG9i
amVjdE9yRnVuY3Rpb24oeCkgewotICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVu
Y3Rpb24nIHx8IHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsOwotICAgICAgICB9
Ci0gICAgICAgIF9fZXhwb3J0c19fLm9iamVjdE9yRnVuY3Rpb24gPSBvYmplY3RPckZ1bmN0aW9u
OwotICAgICAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHsKLSAgICAgICAgICAgIHJldHVybiB0
eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJzsKLSAgICAgICAgfQotICAgICAgICBfX2V4cG9ydHNfXy5p
c0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKLSAgICAgICAgZnVuY3Rpb24gaXNNYXliZVRoZW5hYmxl
KHgpIHsKLSAgICAgICAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0g
bnVsbDsKLSAgICAgICAgfQotICAgICAgICBfX2V4cG9ydHNfXy5pc01heWJlVGhlbmFibGUgPSBp
c01heWJlVGhlbmFibGU7Ci0gICAgICAgIHZhciBfaXNBcnJheTsKLSAgICAgICAgaWYgKCFBcnJh
eS5pc0FycmF5KSB7Ci0gICAgICAgICAgICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0g
J1tvYmplY3QgQXJyYXldJzsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFy
IGlzQXJyYXkgPSBfaXNBcnJheTsKLSAgICAgICAgX19leHBvcnRzX18uaXNBcnJheSA9IGlzQXJy
YXk7Ci0gICAgICAgIC8vIERhdGUubm93IGlzIG5vdCBhdmFpbGFibGUgaW4gYnJvd3NlcnMgPCBJ
RTkKLSAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9X
ZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS9ub3cjQ29tcGF0aWJp
bGl0eQotICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotICAgICAgICB9OwotICAgICAgICBf
X2V4cG9ydHNfXy5ub3cgPSBub3c7Ci0gICAgICAgIHZhciBvX2NyZWF0ZSA9IE9iamVjdC5jcmVh
dGUgfHwgZnVuY3Rpb24gKG9iamVjdCkgewotICAgICAgICAgICAgdmFyIG8gPSBmdW5jdGlvbiAo
KSB7fTsKLSAgICAgICAgICAgIG8ucHJvdG90eXBlID0gb2JqZWN0OwotICAgICAgICAgICAgcmV0
dXJuIG87Ci0gICAgICAgIH07Ci0gICAgICAgIF9fZXhwb3J0c19fLm9fY3JlYXRlID0gb19jcmVh
dGU7Ci0gICAgfSk7Ci0gICAgZGVmaW5lKCdyc3ZwJywgWwotICAgICcuL3JzdnAvcHJvbWlzZScs
Ci0gICAgJy4vcnN2cC9ldmVudHMnLAotICAgICcuL3JzdnAvbm9kZScsCi0gICAgJy4vcnN2cC9h
bGwnLAotICAgICcuL3JzdnAvYWxsLXNldHRsZWQnLAotICAgICcuL3JzdnAvcmFjZScsCi0gICAg
Jy4vcnN2cC9oYXNoJywKLSAgICAnLi9yc3ZwL2hhc2gtc2V0dGxlZCcsCi0gICAgJy4vcnN2cC9y
ZXRocm93JywKLSAgICAnLi9yc3ZwL2RlZmVyJywKLSAgICAnLi9yc3ZwL2NvbmZpZycsCi0gICAg
Jy4vcnN2cC9tYXAnLAotICAgICcuL3JzdnAvcmVzb2x2ZScsCi0gICAgJy4vcnN2cC9yZWplY3Qn
LAotICAgICcuL3JzdnAvZmlsdGVyJywKLSAgICAnLi9yc3ZwL2FzYXAnLAotICAgICdleHBvcnRz
JwotICAgIF0sIGZ1bmN0aW9uIChfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19k
ZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18sIF9fZGVwZW5kZW5jeTVfXywgX19kZXBlbmRl
bmN5Nl9fLCBfX2RlcGVuZGVuY3k3X18sIF9fZGVwZW5kZW5jeThfXywgX19kZXBlbmRlbmN5OV9f
LCBfX2RlcGVuZGVuY3kxMF9fLCBfX2RlcGVuZGVuY3kxMV9fLCBfX2RlcGVuZGVuY3kxMl9fLCBf
X2RlcGVuZGVuY3kxM19fLCBfX2RlcGVuZGVuY3kxNF9fLCBfX2RlcGVuZGVuY3kxNV9fLCBfX2Rl
cGVuZGVuY3kxNl9fLCBfX2V4cG9ydHNfXykgewotICAgICAgICAndXNlIHN0cmljdCc7Ci0gICAg
ICAgIHZhciBQcm9taXNlID0gX19kZXBlbmRlbmN5MV9fWydkZWZhdWx0J107Ci0gICAgICAgIHZh
ciBFdmVudFRhcmdldCA9IF9fZGVwZW5kZW5jeTJfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIg
ZGVub2RlaWZ5ID0gX19kZXBlbmRlbmN5M19fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciBhbGwg
PSBfX2RlcGVuZGVuY3k0X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGFsbFNldHRsZWQgPSBf
X2RlcGVuZGVuY3k1X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIHJhY2UgPSBfX2RlcGVuZGVu
Y3k2X19bJ2RlZmF1bHQnXTsKLSAgICAgICAgdmFyIGhhc2ggPSBfX2RlcGVuZGVuY3k3X19bJ2Rl
ZmF1bHQnXTsKLSAgICAgICAgdmFyIGhhc2hTZXR0bGVkID0gX19kZXBlbmRlbmN5OF9fWydkZWZh
dWx0J107Ci0gICAgICAgIHZhciByZXRocm93ID0gX19kZXBlbmRlbmN5OV9fWydkZWZhdWx0J107
Ci0gICAgICAgIHZhciBkZWZlciA9IF9fZGVwZW5kZW5jeTEwX19bJ2RlZmF1bHQnXTsKLSAgICAg
ICAgdmFyIGNvbmZpZyA9IF9fZGVwZW5kZW5jeTExX18uY29uZmlnOwotICAgICAgICB2YXIgY29u
ZmlndXJlID0gX19kZXBlbmRlbmN5MTFfXy5jb25maWd1cmU7Ci0gICAgICAgIHZhciBtYXAgPSBf
X2RlcGVuZGVuY3kxMl9fWydkZWZhdWx0J107Ci0gICAgICAgIHZhciByZXNvbHZlID0gX19kZXBl
bmRlbmN5MTNfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgcmVqZWN0ID0gX19kZXBlbmRlbmN5
MTRfX1snZGVmYXVsdCddOwotICAgICAgICB2YXIgZmlsdGVyID0gX19kZXBlbmRlbmN5MTVfX1sn
ZGVmYXVsdCddOwotICAgICAgICB2YXIgYXNhcCA9IF9fZGVwZW5kZW5jeTE2X19bJ2RlZmF1bHQn
XTsKLSAgICAgICAgY29uZmlnLmFzeW5jID0gYXNhcDsKLSAgICAgICAgLy8gZGVmYXVsdCBhc3lu
YyBpcyBhc2FwOwotICAgICAgICBmdW5jdGlvbiBhc3luYyhjYWxsYmFjaywgYXJnKSB7Ci0gICAg
ICAgICAgICBjb25maWcuYXN5bmMoY2FsbGJhY2ssIGFyZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnVuY3Rpb24gb24oKSB7Ci0gICAgICAgICAgICBjb25maWcub24uYXBwbHkoY29uZmlnLCBhcmd1
bWVudHMpOwotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIG9mZigpIHsKLSAgICAgICAgICAg
IGNvbmZpZy5vZmYuYXBwbHkoY29uZmlnLCBhcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFNldCB1cCBpbnN0cnVtZW50YXRpb24gdGhyb3VnaCBgd2luZG93Ll9fUFJPTUlTRV9JTlRS
VU1FTlRBVElPTl9fYAotICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcg
JiYgdHlwZW9mIHdpbmRvdy5fX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX18gPT09ICdvYmplY3Qn
KSB7Ci0gICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gd2luZG93Ll9fUFJPTUlTRV9JTlNUUlVN
RU5UQVRJT05fXzsKLSAgICAgICAgICAgIGNvbmZpZ3VyZSgnaW5zdHJ1bWVudCcsIHRydWUpOwot
ICAgICAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGNhbGxiYWNrcykgewotICAgICAgICAg
ICAgICAgIGlmIChjYWxsYmFja3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkgewotICAgICAg
ICAgICAgICAgICAgICBvbihldmVudE5hbWUsIGNhbGxiYWNrc1tldmVudE5hbWVdKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX19leHBvcnRz
X18uUHJvbWlzZSA9IFByb21pc2U7Ci0gICAgICAgIF9fZXhwb3J0c19fLkV2ZW50VGFyZ2V0ID0g
RXZlbnRUYXJnZXQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLmFsbCA9IGFsbDsKLSAgICAgICAgX19l
eHBvcnRzX18uYWxsU2V0dGxlZCA9IGFsbFNldHRsZWQ7Ci0gICAgICAgIF9fZXhwb3J0c19fLnJh
Y2UgPSByYWNlOwotICAgICAgICBfX2V4cG9ydHNfXy5oYXNoID0gaGFzaDsKLSAgICAgICAgX19l
eHBvcnRzX18uaGFzaFNldHRsZWQgPSBoYXNoU2V0dGxlZDsKLSAgICAgICAgX19leHBvcnRzX18u
cmV0aHJvdyA9IHJldGhyb3c7Ci0gICAgICAgIF9fZXhwb3J0c19fLmRlZmVyID0gZGVmZXI7Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmRlbm9kZWlmeSA9IGRlbm9kZWlmeTsKLSAgICAgICAgX19leHBv
cnRzX18uY29uZmlndXJlID0gY29uZmlndXJlOwotICAgICAgICBfX2V4cG9ydHNfXy5vbiA9IG9u
OwotICAgICAgICBfX2V4cG9ydHNfXy5vZmYgPSBvZmY7Ci0gICAgICAgIF9fZXhwb3J0c19fLnJl
c29sdmUgPSByZXNvbHZlOwotICAgICAgICBfX2V4cG9ydHNfXy5yZWplY3QgPSByZWplY3Q7Ci0g
ICAgICAgIF9fZXhwb3J0c19fLmFzeW5jID0gYXN5bmM7Ci0gICAgICAgIF9fZXhwb3J0c19fLm1h
cCA9IG1hcDsKLSAgICAgICAgX19leHBvcnRzX18uZmlsdGVyID0gZmlsdGVyOwotICAgIH0pOwot
Ci0gICAgcmVxdWlyZU1vZHVsZSgiZW1iZXIiKTsKLQotfSkoKTsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvaGFuZGxlYmFycy5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMvaGFuZGxlYmFycy5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTkwMzM0NjBhNGVhZTkwYzcyOTNkNDY2ZGMzYTEyZjZiNzFkYTg1
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL2hhbmRsZWJhcnMuanMKKysrIC9kZXYvbnVs
bApAQCAtMSwyNzQ2ICswLDAgQEAKLS8qIQotCi0gaGFuZGxlYmFycyB2MS4zLjAKLQotQ29weXJp
Z2h0IChDKSAyMDExIGJ5IFllaHVkYSBLYXR6Ci0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50
ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRo
aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0
d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlm
eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1j
b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg
U29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p
c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50
aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE
ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJ
RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ
TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE
RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFks
IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ
U0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotVEhFIFNPRlRXQVJFLgotCi1AbGljZW5zZQot
Ki8KLS8qIGV4cG9ydGVkIEhhbmRsZWJhcnMgKi8KLXZhciBIYW5kbGViYXJzID0gKGZ1bmN0aW9u
KCkgewotLy8gaGFuZGxlYmFycy9zYWZlLXN0cmluZy5qcwotdmFyIF9fbW9kdWxlNF9fID0gKGZ1
bmN0aW9uKCkgewotICAidXNlIHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXzsKLSAgLy8gQnVp
bGQgb3V0IG91ciBiYXNpYyBTYWZlU3RyaW5nIHR5cGUKLSAgZnVuY3Rpb24gU2FmZVN0cmluZyhz
dHJpbmcpIHsKLSAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgfQotCi0gIFNhZmVTdHJpbmcu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICIiICsgdGhpcy5z
dHJpbmc7Ci0gIH07Ci0KLSAgX19leHBvcnRzX18gPSBTYWZlU3RyaW5nOwotICByZXR1cm4gX19l
eHBvcnRzX187Ci19KSgpOwotCi0vLyBoYW5kbGViYXJzL3V0aWxzLmpzCi12YXIgX19tb2R1bGUz
X18gPSAoZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLSAgdmFy
IF9fZXhwb3J0c19fID0ge307Ci0gIC8qanNoaW50IC1XMDA0ICovCi0gIHZhciBTYWZlU3RyaW5n
ID0gX19kZXBlbmRlbmN5MV9fOwotCi0gIHZhciBlc2NhcGUgPSB7Ci0gICAgIiYiOiAiJmFtcDsi
LAotICAgICI8IjogIiZsdDsiLAotICAgICI+IjogIiZndDsiLAotICAgICciJzogIiZxdW90OyIs
Ci0gICAgIiciOiAiJiN4Mjc7IiwKLSAgICAiYCI6ICImI3g2MDsiCi0gIH07Ci0KLSAgdmFyIGJh
ZENoYXJzID0gL1smPD4iJ2BdL2c7Ci0gIHZhciBwb3NzaWJsZSA9IC9bJjw+IidgXS87Ci0KLSAg
ZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHsKLSAgICByZXR1cm4gZXNjYXBlW2Nocl0gfHwgIiZh
bXA7IjsKLSAgfQotCi0gIGZ1bmN0aW9uIGV4dGVuZChvYmosIHZhbHVlKSB7Ci0gICAgZm9yKHZh
ciBrZXkgaW4gdmFsdWUpIHsKLSAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkuY2FsbCh2YWx1ZSwga2V5KSkgewotICAgICAgICBvYmpba2V5XSA9IHZhbHVlW2tleV07Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgX19leHBvcnRzX18uZXh0ZW5kID0gZXh0ZW5kO3ZhciB0
b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Ci0gIF9fZXhwb3J0c19fLnRvU3Ry
aW5nID0gdG9TdHJpbmc7Ci0gIC8vIFNvdXJjZWQgZnJvbSBsb2Rhc2gKLSAgLy8gaHR0cHM6Ly9n
aXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dAotICB2YXIg
aXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9
PT0gJ2Z1bmN0aW9uJzsKLSAgfTsKLSAgLy8gZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zIG9m
IENocm9tZSBhbmQgU2FmYXJpCi0gIGlmIChpc0Z1bmN0aW9uKC94LykpIHsKLSAgICBpc0Z1bmN0
aW9uID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdm
dW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7
Ci0gICAgfTsKLSAgfQotICB2YXIgaXNGdW5jdGlvbjsKLSAgX19leHBvcnRzX18uaXNGdW5jdGlv
biA9IGlzRnVuY3Rpb247Ci0gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlv
bih2YWx1ZSkgewotICAgIHJldHVybiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0
JykgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJyA6IGZhbHNlOwot
ICB9OwotICBfX2V4cG9ydHNfXy5pc0FycmF5ID0gaXNBcnJheTsKLQotICBmdW5jdGlvbiBlc2Nh
cGVFeHByZXNzaW9uKHN0cmluZykgewotICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywg
c2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmUKLSAgICBpZiAoc3RyaW5nIGluc3RhbmNlb2YgU2Fm
ZVN0cmluZykgewotICAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwotICAgIH0gZWxzZSBp
ZiAoIXN0cmluZyAmJiBzdHJpbmcgIT09IDApIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0K
LSAgICAvLyBGb3JjZSBhIHN0cmluZyBjb252ZXJzaW9uIGFzIHRoaXMgd2lsbCBiZSBkb25lIGJ5
IHRoZSBhcHBlbmQgcmVnYXJkbGVzcyBhbmQKLSAgICAvLyB0aGUgcmVnZXggdGVzdCB3aWxsIGRv
IHRoaXMgdHJhbnNwYXJlbnRseSBiZWhpbmQgdGhlIHNjZW5lcywgY2F1c2luZyBpc3N1ZXMgaWYK
LSAgICAvLyBhbiBvYmplY3QncyB0byBzdHJpbmcgaGFzIGVzY2FwZWQgY2hhcmFjdGVycyBpbiBp
dC4KLSAgICBzdHJpbmcgPSAiIiArIHN0cmluZzsKLQotICAgIGlmKCFwb3NzaWJsZS50ZXN0KHN0
cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfQotICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRD
aGFycywgZXNjYXBlQ2hhcik7Ci0gIH0KLQotICBfX2V4cG9ydHNfXy5lc2NhcGVFeHByZXNzaW9u
ID0gZXNjYXBlRXhwcmVzc2lvbjtmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7Ci0gICAgaWYgKCF2
YWx1ZSAmJiB2YWx1ZSAhPT0gMCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlm
IChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAg
X19leHBvcnRzX18uaXNFbXB0eSA9IGlzRW1wdHk7Ci0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0p
KF9fbW9kdWxlNF9fKTsKLQotLy8gaGFuZGxlYmFycy9leGNlcHRpb24uanMKLXZhciBfX21vZHVs
ZTVfXyA9IChmdW5jdGlvbigpIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIgX19leHBvcnRzX187
Ci0KLSAgdmFyIGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywgJ2ZpbGVOYW1lJywgJ2xpbmVO
dW1iZXInLCAnbWVzc2FnZScsICduYW1lJywgJ251bWJlcicsICdzdGFjayddOwotCi0gIGZ1bmN0
aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7Ci0gICAgdmFyIGxpbmU7Ci0gICAgaWYgKG5v
ZGUgJiYgbm9kZS5maXJzdExpbmUpIHsKLSAgICAgIGxpbmUgPSBub2RlLmZpcnN0TGluZTsKLQot
ICAgICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBub2RlLmZpcnN0Q29sdW1uOwot
ICAgIH0KLQotICAgIHZhciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0
aGlzLCBtZXNzYWdlKTsKLQotICAgIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51
bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24n
dCB3b3JrLgotICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBp
ZHgrKykgewotICAgICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4
XV07Ci0gICAgfQotCi0gICAgaWYgKGxpbmUpIHsKLSAgICAgIHRoaXMubGluZU51bWJlciA9IGxp
bmU7Ci0gICAgICB0aGlzLmNvbHVtbiA9IG5vZGUuZmlyc3RDb2x1bW47Ci0gICAgfQotICB9Ci0K
LSAgRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwotCi0gIF9fZXhwb3J0c19fID0g
RXhjZXB0aW9uOwotICByZXR1cm4gX19leHBvcnRzX187Ci19KSgpOwotCi0vLyBoYW5kbGViYXJz
L2Jhc2UuanMKLXZhciBfX21vZHVsZTJfXyA9IChmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9f
ZGVwZW5kZW5jeTJfXykgewotICAidXNlIHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXyA9IHt9
OwotICB2YXIgVXRpbHMgPSBfX2RlcGVuZGVuY3kxX187Ci0gIHZhciBFeGNlcHRpb24gPSBfX2Rl
cGVuZGVuY3kyX187Ci0KLSAgdmFyIFZFUlNJT04gPSAiMS4zLjAiOwotICBfX2V4cG9ydHNfXy5W
RVJTSU9OID0gVkVSU0lPTjt2YXIgQ09NUElMRVJfUkVWSVNJT04gPSA0OwotICBfX2V4cG9ydHNf
Xy5DT01QSUxFUl9SRVZJU0lPTiA9IENPTVBJTEVSX1JFVklTSU9OOwotICB2YXIgUkVWSVNJT05f
Q0hBTkdFUyA9IHsKLSAgICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxs
eSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdAotICAgIDI6ICc9PSAxLjAuMC1yYy4zJywKLSAg
ICAzOiAnPT0gMS4wLjAtcmMuNCcsCi0gICAgNDogJz49IDEuMC4wJwotICB9OwotICBfX2V4cG9y
dHNfXy5SRVZJU0lPTl9DSEFOR0VTID0gUkVWSVNJT05fQ0hBTkdFUzsKLSAgdmFyIGlzQXJyYXkg
PSBVdGlscy5pc0FycmF5LAotICAgICAgaXNGdW5jdGlvbiA9IFV0aWxzLmlzRnVuY3Rpb24sCi0g
ICAgICB0b1N0cmluZyA9IFV0aWxzLnRvU3RyaW5nLAotICAgICAgb2JqZWN0VHlwZSA9ICdbb2Jq
ZWN0IE9iamVjdF0nOwotCi0gIGZ1bmN0aW9uIEhhbmRsZWJhcnNFbnZpcm9ubWVudChoZWxwZXJz
LCBwYXJ0aWFscykgewotICAgIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307Ci0gICAgdGhp
cy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9OwotCi0gICAgcmVnaXN0ZXJEZWZhdWx0SGVscGVy
cyh0aGlzKTsKLSAgfQotCi0gIF9fZXhwb3J0c19fLkhhbmRsZWJhcnNFbnZpcm9ubWVudCA9IEhh
bmRsZWJhcnNFbnZpcm9ubWVudDtIYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0gewot
ICAgIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsCi0KLSAgICBsb2dnZXI6IGxv
Z2dlciwKLSAgICBsb2c6IGxvZywKLQotICAgIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1l
LCBmbiwgaW52ZXJzZSkgewotICAgICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVj
dFR5cGUpIHsKLSAgICAgICAgaWYgKGludmVyc2UgfHwgZm4pIHsgdGhyb3cgbmV3IEV4Y2VwdGlv
bignQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBoZWxwZXJzJyk7IH0KLSAgICAgICAg
VXRpbHMuZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoaW52ZXJzZSkgeyBmbi5ub3QgPSBpbnZlcnNlOyB9Ci0gICAgICAgIHRoaXMuaGVscGVy
c1tuYW1lXSA9IGZuOwotICAgICAgfQotICAgIH0sCi0KLSAgICByZWdpc3RlclBhcnRpYWw6IGZ1
bmN0aW9uKG5hbWUsIHN0cikgewotICAgICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9i
amVjdFR5cGUpIHsKLSAgICAgICAgVXRpbHMuZXh0ZW5kKHRoaXMucGFydGlhbHMsICBuYW1lKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBzdHI7Ci0gICAg
ICB9Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5z
dGFuY2UpIHsKLSAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaGVscGVyTWlzc2luZycsIGZ1
bmN0aW9uKGFyZykgewotICAgICAgaWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewotICAgICAg
ICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IEV4
Y2VwdGlvbigiTWlzc2luZyBoZWxwZXI6ICciICsgYXJnICsgIiciKTsKLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBm
dW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAgICB2YXIgaW52ZXJzZSA9IG9wdGlvbnMu
aW52ZXJzZSB8fCBmdW5jdGlvbigpIHt9LCBmbiA9IG9wdGlvbnMuZm47Ci0KLSAgICAgIGlmIChp
c0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH0KLQot
ICAgICAgaWYoY29udGV4dCA9PT0gdHJ1ZSkgewotICAgICAgICByZXR1cm4gZm4odGhpcyk7Ci0g
ICAgICB9IGVsc2UgaWYoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7Ci0g
ICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpOwotICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGNv
bnRleHQpKSB7Ci0gICAgICAgIGlmKGNvbnRleHQubGVuZ3RoID4gMCkgewotICAgICAgICAgIHJl
dHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7Ci0gICAgICAgIH0KLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmbihjb250ZXh0KTsKLSAgICAgIH0KLSAgICB9KTsK
LQotICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdlYWNoJywgZnVuY3Rpb24oY29udGV4dCwg
b3B0aW9ucykgewotICAgICAgdmFyIGZuID0gb3B0aW9ucy5mbiwgaW52ZXJzZSA9IG9wdGlvbnMu
aW52ZXJzZTsKLSAgICAgIHZhciBpID0gMCwgcmV0ID0gIiIsIGRhdGE7Ci0KLSAgICAgIGlmIChp
c0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH0KLQot
ICAgICAgaWYgKG9wdGlvbnMuZGF0YSkgewotICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0
aW9ucy5kYXRhKTsKLSAgICAgIH0KLQotICAgICAgaWYoY29udGV4dCAmJiB0eXBlb2YgY29udGV4
dCA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgaWYgKGlzQXJyYXkoY29udGV4dCkpIHsKLSAgICAg
ICAgICBmb3IodmFyIGogPSBjb250ZXh0Lmxlbmd0aDsgaTxqOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAgIGRhdGEuaW5kZXggPSBpOwotICAgICAgICAgICAg
ICBkYXRhLmZpcnN0ID0gKGkgPT09IDApOwotICAgICAgICAgICAgICBkYXRhLmxhc3QgID0gKGkg
PT09IChjb250ZXh0Lmxlbmd0aC0xKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXQg
PSByZXQgKyBmbihjb250ZXh0W2ldLCB7IGRhdGE6IGRhdGEgfSk7Ci0gICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGZvcih2YXIga2V5IGluIGNvbnRleHQpIHsKLSAgICAg
ICAgICAgIGlmKGNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICBp
ZihkYXRhKSB7IAotICAgICAgICAgICAgICAgIGRhdGEua2V5ID0ga2V5OyAKLSAgICAgICAgICAg
ICAgICBkYXRhLmluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBkYXRhLmZpcnN0ID0gKGkgPT09
IDApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldCA9IHJldCArIGZuKGNvbnRl
eHRba2V5XSwge2RhdGE6IGRhdGF9KTsKLSAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZihpID09PSAwKXsK
LSAgICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJl
dDsKLSAgICB9KTsKLQotICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdpZicsIGZ1bmN0aW9u
KGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7Ci0gICAgICBpZiAoaXNGdW5jdGlvbihjb25kaXRpb25h
bCkpIHsgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5jYWxsKHRoaXMpOyB9Ci0KLSAgICAgIC8v
IERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2
YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS4KLSAgICAgIC8vIFRoZSBgaW5jbHVkZVplcm9g
IG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3Qg
ZW1wdHkgYmFzZWQgb24gdGhlCi0gICAgICAvLyBiZWhhdmlvciBvZiBpc0VtcHR5LiBFZmZlY3Rp
dmVseSB0aGlzIGRldGVybWluZXMgaWYgMCBpcyBoYW5kbGVkIGJ5IHRoZSBwb3NpdGl2ZSBwYXRo
IG9yIG5lZ2F0aXZlLgotICAgICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFj
b25kaXRpb25hbCkgfHwgVXRpbHMuaXNFbXB0eShjb25kaXRpb25hbCkpIHsKLSAgICAgICAgcmV0
dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
biBvcHRpb25zLmZuKHRoaXMpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgaW5zdGFuY2UucmVn
aXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7Ci0g
ICAgICByZXR1cm4gaW5zdGFuY2UuaGVscGVyc1snaWYnXS5jYWxsKHRoaXMsIGNvbmRpdGlvbmFs
LCB7Zm46IG9wdGlvbnMuaW52ZXJzZSwgaW52ZXJzZTogb3B0aW9ucy5mbiwgaGFzaDogb3B0aW9u
cy5oYXNofSk7Ci0gICAgfSk7Ci0KLSAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignd2l0aCcs
IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRl
eHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH0KLQotICAgICAgaWYgKCFVdGls
cy5pc0VtcHR5KGNvbnRleHQpKSByZXR1cm4gb3B0aW9ucy5mbihjb250ZXh0KTsKLSAgICB9KTsK
LQotICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb2cnLCBmdW5jdGlvbihjb250ZXh0LCBv
cHRpb25zKSB7Ci0gICAgICB2YXIgbGV2ZWwgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRh
LmxldmVsICE9IG51bGwgPyBwYXJzZUludChvcHRpb25zLmRhdGEubGV2ZWwsIDEwKSA6IDE7Ci0g
ICAgICBpbnN0YW5jZS5sb2cobGV2ZWwsIGNvbnRleHQpOwotICAgIH0pOwotICB9Ci0KLSAgdmFy
IGxvZ2dlciA9IHsKLSAgICBtZXRob2RNYXA6IHsgMDogJ2RlYnVnJywgMTogJ2luZm8nLCAyOiAn
d2FybicsIDM6ICdlcnJvcicgfSwKLQotICAgIC8vIFN0YXRlIGVudW0KLSAgICBERUJVRzogMCwK
LSAgICBJTkZPOiAxLAotICAgIFdBUk46IDIsCi0gICAgRVJST1I6IDMsCi0gICAgbGV2ZWw6IDMs
Ci0KLSAgICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudAotICAg
IGxvZzogZnVuY3Rpb24obGV2ZWwsIG9iaikgewotICAgICAgaWYgKGxvZ2dlci5sZXZlbCA8PSBs
ZXZlbCkgewotICAgICAgICB2YXIgbWV0aG9kID0gbG9nZ2VyLm1ldGhvZE1hcFtsZXZlbF07Ci0g
ICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZVttZXRo
b2RdKSB7Ci0gICAgICAgICAgY29uc29sZVttZXRob2RdLmNhbGwoY29uc29sZSwgb2JqKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsKLSAgX19leHBvcnRzX18ubG9nZ2VyID0gbG9n
Z2VyOwotICBmdW5jdGlvbiBsb2cobGV2ZWwsIG9iaikgeyBsb2dnZXIubG9nKGxldmVsLCBvYmop
OyB9Ci0KLSAgX19leHBvcnRzX18ubG9nID0gbG9nO3ZhciBjcmVhdGVGcmFtZSA9IGZ1bmN0aW9u
KG9iamVjdCkgewotICAgIHZhciBvYmogPSB7fTsKLSAgICBVdGlscy5leHRlbmQob2JqLCBvYmpl
Y3QpOwotICAgIHJldHVybiBvYmo7Ci0gIH07Ci0gIF9fZXhwb3J0c19fLmNyZWF0ZUZyYW1lID0g
Y3JlYXRlRnJhbWU7Ci0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0pKF9fbW9kdWxlM19fLCBfX21v
ZHVsZTVfXyk7Ci0KLS8vIGhhbmRsZWJhcnMvcnVudGltZS5qcwotdmFyIF9fbW9kdWxlNl9fID0g
KGZ1bmN0aW9uKF9fZGVwZW5kZW5jeTFfXywgX19kZXBlbmRlbmN5Ml9fLCBfX2RlcGVuZGVuY3kz
X18pIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIgX19leHBvcnRzX18gPSB7fTsKLSAgdmFyIFV0
aWxzID0gX19kZXBlbmRlbmN5MV9fOwotICB2YXIgRXhjZXB0aW9uID0gX19kZXBlbmRlbmN5Ml9f
OwotICB2YXIgQ09NUElMRVJfUkVWSVNJT04gPSBfX2RlcGVuZGVuY3kzX18uQ09NUElMRVJfUkVW
SVNJT047Ci0gIHZhciBSRVZJU0lPTl9DSEFOR0VTID0gX19kZXBlbmRlbmN5M19fLlJFVklTSU9O
X0NIQU5HRVM7Ci0KLSAgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHsKLSAg
ICB2YXIgY29tcGlsZXJSZXZpc2lvbiA9IGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0g
fHwgMSwKLSAgICAgICAgY3VycmVudFJldmlzaW9uID0gQ09NUElMRVJfUkVWSVNJT047Ci0KLSAg
ICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7Ci0gICAgICBpZiAo
Y29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikgewotICAgICAgICB2YXIgcnVudGlt
ZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLAotICAgICAgICAg
ICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07
Ci0gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3
aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRp
bWUuICIrCi0gICAgICAgICAgICAgICJQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8g
YSBuZXdlciB2ZXJzaW9uICgiK3J1bnRpbWVWZXJzaW9ucysiKSBvciBkb3duZ3JhZGUgeW91ciBy
dW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCIrY29tcGlsZXJWZXJzaW9ucysiKS4iKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lvbiBpbmZvIHNp
bmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9uIHlldAotICAg
ICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBh
IG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICIr
Ci0gICAgICAgICAgICAgICJQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZl
cnNpb24gKCIrY29tcGlsZXJJbmZvWzFdKyIpLiIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IF9fZXhwb3J0c19fLmNoZWNrUmV2aXNpb24gPSBjaGVja1JldmlzaW9uOy8vIFRPRE86IFJlbW92
ZSB0aGlzIGxpbmUgYW5kIGJyZWFrIHVwIGNvbXBpbGVQYXJ0aWFsCi0KLSAgZnVuY3Rpb24gdGVt
cGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHsKLSAgICBpZiAoIWVudikgewotICAgICAgdGhyb3cg
bmV3IEV4Y2VwdGlvbigiTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlIik7Ci0gICAg
fQotCi0gICAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9j
YWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3cKLSAgICAv
LyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHN1ZWRvLXN1cHBvcnRl
ZCBBUElzLgotICAgIHZhciBpbnZva2VQYXJ0aWFsV3JhcHBlciA9IGZ1bmN0aW9uKHBhcnRpYWws
IG5hbWUsIGNvbnRleHQsIGhlbHBlcnMsIHBhcnRpYWxzLCBkYXRhKSB7Ci0gICAgICB2YXIgcmVz
dWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAg
IGlmIChyZXN1bHQgIT0gbnVsbCkgeyByZXR1cm4gcmVzdWx0OyB9Ci0KLSAgICAgIGlmIChlbnYu
Y29tcGlsZSkgewotICAgICAgICB2YXIgb3B0aW9ucyA9IHsgaGVscGVyczogaGVscGVycywgcGFy
dGlhbHM6IHBhcnRpYWxzLCBkYXRhOiBkYXRhIH07Ci0gICAgICAgIHBhcnRpYWxzW25hbWVdID0g
ZW52LmNvbXBpbGUocGFydGlhbCwgeyBkYXRhOiBkYXRhICE9PSB1bmRlZmluZWQgfSwgZW52KTsK
LSAgICAgICAgcmV0dXJuIHBhcnRpYWxzW25hbWVdKGNvbnRleHQsIG9wdGlvbnMpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIHBhcnRpYWwgIiArIG5h
bWUgKyAiIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5
IG1vZGUiKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gSnVzdCBhZGQgd2F0ZXIKLSAgICB2
YXIgY29udGFpbmVyID0gewotICAgICAgZXNjYXBlRXhwcmVzc2lvbjogVXRpbHMuZXNjYXBlRXhw
cmVzc2lvbiwKLSAgICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLAotICAg
ICAgcHJvZ3JhbXM6IFtdLAotICAgICAgcHJvZ3JhbTogZnVuY3Rpb24oaSwgZm4sIGRhdGEpIHsK
LSAgICAgICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXTsKLSAgICAgICAg
aWYoZGF0YSkgewotICAgICAgICAgIHByb2dyYW1XcmFwcGVyID0gcHJvZ3JhbShpLCBmbiwgZGF0
YSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7Ci0gICAgICAgICAgcHJv
Z3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gcHJvZ3JhbShpLCBmbik7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyOwotICAgICAgfSwKLSAgICAgIG1lcmdl
OiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7Ci0gICAgICAgIHZhciByZXQgPSBwYXJhbSB8fCBj
b21tb247Ci0KLSAgICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiAocGFyYW0gIT09IGNvbW1v
bikpIHsKLSAgICAgICAgICByZXQgPSB7fTsKLSAgICAgICAgICBVdGlscy5leHRlbmQocmV0LCBj
b21tb24pOwotICAgICAgICAgIFV0aWxzLmV4dGVuZChyZXQsIHBhcmFtKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfSwKLSAgICAgIHByb2dyYW1XaXRoRGVwdGg6IGVu
di5WTS5wcm9ncmFtV2l0aERlcHRoLAotICAgICAgbm9vcDogZW52LlZNLm5vb3AsCi0gICAgICBj
b21waWxlckluZm86IG51bGwKLSAgICB9OwotCi0gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRleHQs
IG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgICAgdmFyIG5h
bWVzcGFjZSA9IG9wdGlvbnMucGFydGlhbCA/IG9wdGlvbnMgOiBlbnYsCi0gICAgICAgICAgaGVs
cGVycywKLSAgICAgICAgICBwYXJ0aWFsczsKLQotICAgICAgaWYgKCFvcHRpb25zLnBhcnRpYWwp
IHsKLSAgICAgICAgaGVscGVycyA9IG9wdGlvbnMuaGVscGVyczsKLSAgICAgICAgcGFydGlhbHMg
PSBvcHRpb25zLnBhcnRpYWxzOwotICAgICAgfQotICAgICAgdmFyIHJlc3VsdCA9IHRlbXBsYXRl
U3BlYy5jYWxsKAotICAgICAgICAgICAgY29udGFpbmVyLAotICAgICAgICAgICAgbmFtZXNwYWNl
LCBjb250ZXh0LAotICAgICAgICAgICAgaGVscGVycywKLSAgICAgICAgICAgIHBhcnRpYWxzLAot
ICAgICAgICAgICAgb3B0aW9ucy5kYXRhKTsKLQotICAgICAgaWYgKCFvcHRpb25zLnBhcnRpYWwp
IHsKLSAgICAgICAgZW52LlZNLmNoZWNrUmV2aXNpb24oY29udGFpbmVyLmNvbXBpbGVySW5mbyk7
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLSAgfQotCi0gIF9fZXhw
b3J0c19fLnRlbXBsYXRlID0gdGVtcGxhdGU7ZnVuY3Rpb24gcHJvZ3JhbVdpdGhEZXB0aChpLCBm
biwgZGF0YSAvKiwgJGRlcHRoICovKSB7Ci0gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDMpOwotCi0gICAgdmFyIHByb2cgPSBmdW5jdGlvbihjb250
ZXh0LCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAg
cmV0dXJuIGZuLmFwcGx5KHRoaXMsIFtjb250ZXh0LCBvcHRpb25zLmRhdGEgfHwgZGF0YV0uY29u
Y2F0KGFyZ3MpKTsKLSAgICB9OwotICAgIHByb2cucHJvZ3JhbSA9IGk7Ci0gICAgcHJvZy5kZXB0
aCA9IGFyZ3MubGVuZ3RoOwotICAgIHJldHVybiBwcm9nOwotICB9Ci0KLSAgX19leHBvcnRzX18u
cHJvZ3JhbVdpdGhEZXB0aCA9IHByb2dyYW1XaXRoRGVwdGg7ZnVuY3Rpb24gcHJvZ3JhbShpLCBm
biwgZGF0YSkgewotICAgIHZhciBwcm9nID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewot
ICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICAgIHJldHVybiBmbihjb250ZXh0
LCBvcHRpb25zLmRhdGEgfHwgZGF0YSk7Ci0gICAgfTsKLSAgICBwcm9nLnByb2dyYW0gPSBpOwot
ICAgIHByb2cuZGVwdGggPSAwOwotICAgIHJldHVybiBwcm9nOwotICB9Ci0KLSAgX19leHBvcnRz
X18ucHJvZ3JhbSA9IHByb2dyYW07ZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBuYW1l
LCBjb250ZXh0LCBoZWxwZXJzLCBwYXJ0aWFscywgZGF0YSkgewotICAgIHZhciBvcHRpb25zID0g
eyBwYXJ0aWFsOiB0cnVlLCBoZWxwZXJzOiBoZWxwZXJzLCBwYXJ0aWFsczogcGFydGlhbHMsIGRh
dGE6IGRhdGEgfTsKLQotICAgIGlmKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkgewotICAgICAgdGhy
b3cgbmV3IEV4Y2VwdGlvbigiVGhlIHBhcnRpYWwgIiArIG5hbWUgKyAiIGNvdWxkIG5vdCBiZSBm
b3VuZCIpOwotICAgIH0gZWxzZSBpZihwYXJ0aWFsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKLSAg
ICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpOwotICAgIH0KLSAgfQotCi0gIF9f
ZXhwb3J0c19fLmludm9rZVBhcnRpYWwgPSBpbnZva2VQYXJ0aWFsO2Z1bmN0aW9uIG5vb3AoKSB7
IHJldHVybiAiIjsgfQotCi0gIF9fZXhwb3J0c19fLm5vb3AgPSBub29wOwotICByZXR1cm4gX19l
eHBvcnRzX187Ci19KShfX21vZHVsZTNfXywgX19tb2R1bGU1X18sIF9fbW9kdWxlMl9fKTsKLQot
Ly8gaGFuZGxlYmFycy5ydW50aW1lLmpzCi12YXIgX19tb2R1bGUxX18gPSAoZnVuY3Rpb24oX19k
ZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18sIF9fZGVwZW5kZW5jeTNfXywgX19kZXBlbmRl
bmN5NF9fLCBfX2RlcGVuZGVuY3k1X18pIHsKLSAgInVzZSBzdHJpY3QiOwotICB2YXIgX19leHBv
cnRzX187Ci0gIC8qZ2xvYmFscyBIYW5kbGViYXJzOiB0cnVlICovCi0gIHZhciBiYXNlID0gX19k
ZXBlbmRlbmN5MV9fOwotCi0gIC8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFy
cyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS4KLSAgLy8gKFRoaXMgaXMgZG9uZSB0byBl
YXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cykKLSAgdmFy
IFNhZmVTdHJpbmcgPSBfX2RlcGVuZGVuY3kyX187Ci0gIHZhciBFeGNlcHRpb24gPSBfX2RlcGVu
ZGVuY3kzX187Ci0gIHZhciBVdGlscyA9IF9fZGVwZW5kZW5jeTRfXzsKLSAgdmFyIHJ1bnRpbWUg
PSBfX2RlcGVuZGVuY3k1X187Ci0KLSAgLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91
dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFt
ZXNwYWNlCi0gIHZhciBjcmVhdGUgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGIgPSBuZXcgYmFz
ZS5IYW5kbGViYXJzRW52aXJvbm1lbnQoKTsKLQotICAgIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7
Ci0gICAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7Ci0gICAgaGIuRXhjZXB0aW9uID0gRXhj
ZXB0aW9uOwotICAgIGhiLlV0aWxzID0gVXRpbHM7Ci0KLSAgICBoYi5WTSA9IHJ1bnRpbWU7Ci0g
ICAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7Ci0gICAgICByZXR1cm4gcnVudGltZS50
ZW1wbGF0ZShzcGVjLCBoYik7Ci0gICAgfTsKLQotICAgIHJldHVybiBoYjsKLSAgfTsKLQotICB2
YXIgSGFuZGxlYmFycyA9IGNyZWF0ZSgpOwotICBIYW5kbGViYXJzLmNyZWF0ZSA9IGNyZWF0ZTsK
LQotICBfX2V4cG9ydHNfXyA9IEhhbmRsZWJhcnM7Ci0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0p
KF9fbW9kdWxlMl9fLCBfX21vZHVsZTRfXywgX19tb2R1bGU1X18sIF9fbW9kdWxlM19fLCBfX21v
ZHVsZTZfXyk7Ci0KLS8vIGhhbmRsZWJhcnMvY29tcGlsZXIvYXN0LmpzCi12YXIgX19tb2R1bGU3
X18gPSAoZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLSAgdmFy
IF9fZXhwb3J0c19fOwotICB2YXIgRXhjZXB0aW9uID0gX19kZXBlbmRlbmN5MV9fOwotCi0gIGZ1
bmN0aW9uIExvY2F0aW9uSW5mbyhsb2NJbmZvKXsKLSAgICBsb2NJbmZvID0gbG9jSW5mbyB8fCB7
fTsKLSAgICB0aGlzLmZpcnN0TGluZSAgID0gbG9jSW5mby5maXJzdF9saW5lOwotICAgIHRoaXMu
Zmlyc3RDb2x1bW4gPSBsb2NJbmZvLmZpcnN0X2NvbHVtbjsKLSAgICB0aGlzLmxhc3RDb2x1bW4g
ID0gbG9jSW5mby5sYXN0X2NvbHVtbjsKLSAgICB0aGlzLmxhc3RMaW5lICAgID0gbG9jSW5mby5s
YXN0X2xpbmU7Ci0gIH0KLQotICB2YXIgQVNUID0gewotICAgIFByb2dyYW1Ob2RlOiBmdW5jdGlv
bihzdGF0ZW1lbnRzLCBpbnZlcnNlU3RyaXAsIGludmVyc2UsIGxvY0luZm8pIHsKLSAgICAgIHZh
ciBpbnZlcnNlTG9jYXRpb25JbmZvLCBmaXJzdEludmVyc2VOb2RlOwotICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDMpIHsKLSAgICAgICAgbG9jSW5mbyA9IGludmVyc2U7Ci0gICAgICAg
IGludmVyc2UgPSBudWxsOwotICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAy
KSB7Ci0gICAgICAgIGxvY0luZm8gPSBpbnZlcnNlU3RyaXA7Ci0gICAgICAgIGludmVyc2VTdHJp
cCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIExvY2F0aW9uSW5mby5jYWxsKHRoaXMsIGxvY0lu
Zm8pOwotICAgICAgdGhpcy50eXBlID0gInByb2dyYW0iOwotICAgICAgdGhpcy5zdGF0ZW1lbnRz
ID0gc3RhdGVtZW50czsKLSAgICAgIHRoaXMuc3RyaXAgPSB7fTsKLQotICAgICAgaWYoaW52ZXJz
ZSkgewotICAgICAgICBmaXJzdEludmVyc2VOb2RlID0gaW52ZXJzZVswXTsKLSAgICAgICAgaWYg
KGZpcnN0SW52ZXJzZU5vZGUpIHsKLSAgICAgICAgICBpbnZlcnNlTG9jYXRpb25JbmZvID0gewot
ICAgICAgICAgICAgZmlyc3RfbGluZTogZmlyc3RJbnZlcnNlTm9kZS5maXJzdExpbmUsCi0gICAg
ICAgICAgICBsYXN0X2xpbmU6IGZpcnN0SW52ZXJzZU5vZGUubGFzdExpbmUsCi0gICAgICAgICAg
ICBsYXN0X2NvbHVtbjogZmlyc3RJbnZlcnNlTm9kZS5sYXN0Q29sdW1uLAotICAgICAgICAgICAg
Zmlyc3RfY29sdW1uOiBmaXJzdEludmVyc2VOb2RlLmZpcnN0Q29sdW1uCi0gICAgICAgICAgfTsK
LSAgICAgICAgICB0aGlzLmludmVyc2UgPSBuZXcgQVNULlByb2dyYW1Ob2RlKGludmVyc2UsIGlu
dmVyc2VTdHJpcCwgaW52ZXJzZUxvY2F0aW9uSW5mbyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgdGhpcy5pbnZlcnNlID0gbmV3IEFTVC5Qcm9ncmFtTm9kZShpbnZlcnNlLCBpbnZlcnNl
U3RyaXApOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc3RyaXAucmlnaHQgPSBpbnZlcnNlU3Ry
aXAubGVmdDsKLSAgICAgIH0gZWxzZSBpZiAoaW52ZXJzZVN0cmlwKSB7Ci0gICAgICAgIHRoaXMu
c3RyaXAubGVmdCA9IGludmVyc2VTdHJpcC5yaWdodDsKLSAgICAgIH0KLSAgICB9LAotCi0gICAg
TXVzdGFjaGVOb2RlOiBmdW5jdGlvbihyYXdQYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJ
bmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRo
aXMudHlwZSA9ICJtdXN0YWNoZSI7Ci0gICAgICB0aGlzLnN0cmlwID0gc3RyaXA7Ci0KLSAgICAg
IC8vIE9wZW4gbWF5IGJlIGEgc3RyaW5nIHBhcnNlZCBmcm9tIHRoZSBwYXJzZXIgb3IgYSBwYXNz
ZWQgYm9vbGVhbiBmbGFnCi0gICAgICBpZiAob3BlbiAhPSBudWxsICYmIG9wZW4uY2hhckF0KSB7
Ci0gICAgICAgIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMAotICAgICAg
ICB2YXIgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpOwotICAg
ICAgICB0aGlzLmVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0g
JyYnOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5lc2NhcGVkID0gISFvcGVuOwotICAg
ICAgfQotCi0gICAgICBpZiAocmF3UGFyYW1zIGluc3RhbmNlb2YgQVNULlNleHByTm9kZSkgewot
ICAgICAgICB0aGlzLnNleHByID0gcmF3UGFyYW1zOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gU3VwcG9ydCBvbGQgQVNUIEFQSQotICAgICAgICB0aGlzLnNleHByID0gbmV3IEFTVC5TZXhw
ck5vZGUocmF3UGFyYW1zLCBoYXNoKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5zZXhwci5pc1Jv
b3QgPSB0cnVlOwotCi0gICAgICAvLyBTdXBwb3J0IG9sZCBBU1QgQVBJIHRoYXQgc3RvcmVkIHRo
aXMgaW5mbyBpbiBNdXN0YWNoZU5vZGUKLSAgICAgIHRoaXMuaWQgPSB0aGlzLnNleHByLmlkOwot
ICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLnNleHByLnBhcmFtczsKLSAgICAgIHRoaXMuaGFzaCA9
IHRoaXMuc2V4cHIuaGFzaDsKLSAgICAgIHRoaXMuZWxpZ2libGVIZWxwZXIgPSB0aGlzLnNleHBy
LmVsaWdpYmxlSGVscGVyOwotICAgICAgdGhpcy5pc0hlbHBlciA9IHRoaXMuc2V4cHIuaXNIZWxw
ZXI7Ci0gICAgfSwKLQotICAgIFNleHByTm9kZTogZnVuY3Rpb24ocmF3UGFyYW1zLCBoYXNoLCBs
b2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLQotICAg
ICAgdGhpcy50eXBlID0gInNleHByIjsKLSAgICAgIHRoaXMuaGFzaCA9IGhhc2g7Ci0KLSAgICAg
IHZhciBpZCA9IHRoaXMuaWQgPSByYXdQYXJhbXNbMF07Ci0gICAgICB2YXIgcGFyYW1zID0gdGhp
cy5wYXJhbXMgPSByYXdQYXJhbXMuc2xpY2UoMSk7Ci0KLSAgICAgIC8vIGEgbXVzdGFjaGUgaXMg
YW4gZWxpZ2libGUgaGVscGVyIGlmOgotICAgICAgLy8gKiBpdHMgaWQgaXMgc2ltcGxlIChhIHNp
bmdsZSBwYXJ0LCBub3QgYHRoaXNgIG9yIGAuLmApCi0gICAgICB2YXIgZWxpZ2libGVIZWxwZXIg
PSB0aGlzLmVsaWdpYmxlSGVscGVyID0gaWQuaXNTaW1wbGU7Ci0KLSAgICAgIC8vIGEgbXVzdGFj
aGUgaXMgZGVmaW5pdGVseSBhIGhlbHBlciBpZjoKLSAgICAgIC8vICogaXQgaXMgYW4gZWxpZ2li
bGUgaGVscGVyLCBhbmQKLSAgICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIg
b3IgaGFzaCBzZWdtZW50Ci0gICAgICB0aGlzLmlzSGVscGVyID0gZWxpZ2libGVIZWxwZXIgJiYg
KHBhcmFtcy5sZW5ndGggfHwgaGFzaCk7Ci0KLSAgICAgIC8vIGlmIGEgbXVzdGFjaGUgaXMgYW4g
ZWxpZ2libGUgaGVscGVyIGJ1dCBub3QgYSBkZWZpbml0ZQotICAgICAgLy8gaGVscGVyLCBpdCBp
cyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXIKLSAgICAgIC8vIHBh
c3Mgb3IgYXQgcnVudGltZS4KLSAgICB9LAotCi0gICAgUGFydGlhbE5vZGU6IGZ1bmN0aW9uKHBh
cnRpYWxOYW1lLCBjb250ZXh0LCBzdHJpcCwgbG9jSW5mbykgewotICAgICAgTG9jYXRpb25JbmZv
LmNhbGwodGhpcywgbG9jSW5mbyk7Ci0gICAgICB0aGlzLnR5cGUgICAgICAgICA9ICJwYXJ0aWFs
IjsKLSAgICAgIHRoaXMucGFydGlhbE5hbWUgID0gcGFydGlhbE5hbWU7Ci0gICAgICB0aGlzLmNv
bnRleHQgICAgICA9IGNvbnRleHQ7Ci0gICAgICB0aGlzLnN0cmlwID0gc3RyaXA7Ci0gICAgfSwK
LQotICAgIEJsb2NrTm9kZTogZnVuY3Rpb24obXVzdGFjaGUsIHByb2dyYW0sIGludmVyc2UsIGNs
b3NlLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsK
LQotICAgICAgaWYobXVzdGFjaGUuc2V4cHIuaWQub3JpZ2luYWwgIT09IGNsb3NlLnBhdGgub3Jp
Z2luYWwpIHsKLSAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihtdXN0YWNoZS5zZXhwci5pZC5v
cmlnaW5hbCArICIgZG9lc24ndCBtYXRjaCAiICsgY2xvc2UucGF0aC5vcmlnaW5hbCwgdGhpcyk7
Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMudHlwZSA9ICdibG9jayc7Ci0gICAgICB0aGlzLm11c3Rh
Y2hlID0gbXVzdGFjaGU7Ci0gICAgICB0aGlzLnByb2dyYW0gID0gcHJvZ3JhbTsKLSAgICAgIHRo
aXMuaW52ZXJzZSAgPSBpbnZlcnNlOwotCi0gICAgICB0aGlzLnN0cmlwID0gewotICAgICAgICBs
ZWZ0OiBtdXN0YWNoZS5zdHJpcC5sZWZ0LAotICAgICAgICByaWdodDogY2xvc2Uuc3RyaXAucmln
aHQKLSAgICAgIH07Ci0KLSAgICAgIChwcm9ncmFtIHx8IGludmVyc2UpLnN0cmlwLmxlZnQgPSBt
dXN0YWNoZS5zdHJpcC5yaWdodDsKLSAgICAgIChpbnZlcnNlIHx8IHByb2dyYW0pLnN0cmlwLnJp
Z2h0ID0gY2xvc2Uuc3RyaXAubGVmdDsKLQotICAgICAgaWYgKGludmVyc2UgJiYgIXByb2dyYW0p
IHsKLSAgICAgICAgdGhpcy5pc0ludmVyc2UgPSB0cnVlOwotICAgICAgfQotICAgIH0sCi0KLSAg
ICBDb250ZW50Tm9kZTogZnVuY3Rpb24oc3RyaW5nLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlv
bkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJjb250ZW50IjsK
LSAgICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwotICAgIH0sCi0KLSAgICBIYXNoTm9kZTogZnVu
Y3Rpb24ocGFpcnMsIGxvY0luZm8pIHsKLSAgICAgIExvY2F0aW9uSW5mby5jYWxsKHRoaXMsIGxv
Y0luZm8pOwotICAgICAgdGhpcy50eXBlID0gImhhc2giOwotICAgICAgdGhpcy5wYWlycyA9IHBh
aXJzOwotICAgIH0sCi0KLSAgICBJZE5vZGU6IGZ1bmN0aW9uKHBhcnRzLCBsb2NJbmZvKSB7Ci0g
ICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9
ICJJRCI7Ci0KLSAgICAgIHZhciBvcmlnaW5hbCA9ICIiLAotICAgICAgICAgIGRpZyA9IFtdLAot
ICAgICAgICAgIGRlcHRoID0gMDsKLQotICAgICAgZm9yKHZhciBpPTAsbD1wYXJ0cy5sZW5ndGg7
IGk8bDsgaSsrKSB7Ci0gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV0ucGFydDsKLSAgICAgICAg
b3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0OwotCi0gICAgICAg
IGlmIChwYXJ0ID09PSAiLi4iIHx8IHBhcnQgPT09ICIuIiB8fCBwYXJ0ID09PSAidGhpcyIpIHsK
LSAgICAgICAgICBpZiAoZGlnLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBF
eGNlcHRpb24oIkludmFsaWQgcGF0aDogIiArIG9yaWdpbmFsLCB0aGlzKTsKLSAgICAgICAgICB9
IGVsc2UgaWYgKHBhcnQgPT09ICIuLiIpIHsKLSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuaXNTY29wZWQgPSB0cnVlOwotICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBkaWcucHVzaChwYXJ0KTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICB0aGlzLm9yaWdpbmFsID0gb3JpZ2luYWw7Ci0gICAgICB0aGlz
LnBhcnRzICAgID0gZGlnOwotICAgICAgdGhpcy5zdHJpbmcgICA9IGRpZy5qb2luKCcuJyk7Ci0g
ICAgICB0aGlzLmRlcHRoICAgID0gZGVwdGg7Ci0KLSAgICAgIC8vIGFuIElEIGlzIHNpbXBsZSBp
ZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3QKLSAgICAgIC8vIGAu
LmAgb3IgYHRoaXNgLgotICAgICAgdGhpcy5pc1NpbXBsZSA9IHBhcnRzLmxlbmd0aCA9PT0gMSAm
JiAhdGhpcy5pc1Njb3BlZCAmJiBkZXB0aCA9PT0gMDsKLQotICAgICAgdGhpcy5zdHJpbmdNb2Rl
VmFsdWUgPSB0aGlzLnN0cmluZzsKLSAgICB9LAotCi0gICAgUGFydGlhbE5hbWVOb2RlOiBmdW5j
dGlvbihuYW1lLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJ
bmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJQQVJUSUFMX05BTUUiOwotICAgICAgdGhpcy5uYW1l
ID0gbmFtZS5vcmlnaW5hbDsKLSAgICB9LAotCi0gICAgRGF0YU5vZGU6IGZ1bmN0aW9uKGlkLCBs
b2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAg
IHRoaXMudHlwZSA9ICJEQVRBIjsKLSAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9LAotCi0gICAg
U3RyaW5nTm9kZTogZnVuY3Rpb24oc3RyaW5nLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbklu
Zm8uY2FsbCh0aGlzLCBsb2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJTVFJJTkciOwotICAg
ICAgdGhpcy5vcmlnaW5hbCA9Ci0gICAgICAgIHRoaXMuc3RyaW5nID0KLSAgICAgICAgdGhpcy5z
dHJpbmdNb2RlVmFsdWUgPSBzdHJpbmc7Ci0gICAgfSwKLQotICAgIEludGVnZXJOb2RlOiBmdW5j
dGlvbihpbnRlZ2VyLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBs
b2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJJTlRFR0VSIjsKLSAgICAgIHRoaXMub3JpZ2lu
YWwgPQotICAgICAgICB0aGlzLmludGVnZXIgPSBpbnRlZ2VyOwotICAgICAgdGhpcy5zdHJpbmdN
b2RlVmFsdWUgPSBOdW1iZXIoaW50ZWdlcik7Ci0gICAgfSwKLQotICAgIEJvb2xlYW5Ob2RlOiBm
dW5jdGlvbihib29sLCBsb2NJbmZvKSB7Ci0gICAgICBMb2NhdGlvbkluZm8uY2FsbCh0aGlzLCBs
b2NJbmZvKTsKLSAgICAgIHRoaXMudHlwZSA9ICJCT09MRUFOIjsKLSAgICAgIHRoaXMuYm9vbCA9
IGJvb2w7Ci0gICAgICB0aGlzLnN0cmluZ01vZGVWYWx1ZSA9IGJvb2wgPT09ICJ0cnVlIjsKLSAg
ICB9LAotCi0gICAgQ29tbWVudE5vZGU6IGZ1bmN0aW9uKGNvbW1lbnQsIGxvY0luZm8pIHsKLSAg
ICAgIExvY2F0aW9uSW5mby5jYWxsKHRoaXMsIGxvY0luZm8pOwotICAgICAgdGhpcy50eXBlID0g
ImNvbW1lbnQiOwotICAgICAgdGhpcy5jb21tZW50ID0gY29tbWVudDsKLSAgICB9Ci0gIH07Ci0K
LSAgLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qg
b2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXIKLSAgLy8gbW9zdCBtb2RpZnkgdGhlIG9i
amVjdCB0byBvcGVyYXRlIHByb3Blcmx5LgotICBfX2V4cG9ydHNfXyA9IEFTVDsKLSAgcmV0dXJu
IF9fZXhwb3J0c19fOwotfSkoX19tb2R1bGU1X18pOwotCi0vLyBoYW5kbGViYXJzL2NvbXBpbGVy
L3BhcnNlci5qcwotdmFyIF9fbW9kdWxlOV9fID0gKGZ1bmN0aW9uKCkgewotICAidXNlIHN0cmlj
dCI7Ci0gIHZhciBfX2V4cG9ydHNfXzsKLSAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqLwotICAv
KiBKaXNvbiBnZW5lcmF0ZWQgcGFyc2VyICovCi0gIHZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9u
KCl7Ci0gIHZhciBwYXJzZXIgPSB7dHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkgeyB9LAotICB5eTog
e30sCi0gIHN5bWJvbHNfOiB7ImVycm9yIjoyLCJyb290IjozLCJzdGF0ZW1lbnRzIjo0LCJFT0Yi
OjUsInByb2dyYW0iOjYsInNpbXBsZUludmVyc2UiOjcsInN0YXRlbWVudCI6OCwib3BlbkludmVy
c2UiOjksImNsb3NlQmxvY2siOjEwLCJvcGVuQmxvY2siOjExLCJtdXN0YWNoZSI6MTIsInBhcnRp
YWwiOjEzLCJDT05URU5UIjoxNCwiQ09NTUVOVCI6MTUsIk9QRU5fQkxPQ0siOjE2LCJzZXhwciI6
MTcsIkNMT1NFIjoxOCwiT1BFTl9JTlZFUlNFIjoxOSwiT1BFTl9FTkRCTE9DSyI6MjAsInBhdGgi
OjIxLCJPUEVOIjoyMiwiT1BFTl9VTkVTQ0FQRUQiOjIzLCJDTE9TRV9VTkVTQ0FQRUQiOjI0LCJP
UEVOX1BBUlRJQUwiOjI1LCJwYXJ0aWFsTmFtZSI6MjYsInBhcnRpYWxfb3B0aW9uMCI6MjcsInNl
eHByX3JlcGV0aXRpb24wIjoyOCwic2V4cHJfb3B0aW9uMCI6MjksImRhdGFOYW1lIjozMCwicGFy
YW0iOjMxLCJTVFJJTkciOjMyLCJJTlRFR0VSIjozMywiQk9PTEVBTiI6MzQsIk9QRU5fU0VYUFIi
OjM1LCJDTE9TRV9TRVhQUiI6MzYsImhhc2giOjM3LCJoYXNoX3JlcGV0aXRpb25fcGx1czAiOjM4
LCJoYXNoU2VnbWVudCI6MzksIklEIjo0MCwiRVFVQUxTIjo0MSwiREFUQSI6NDIsInBhdGhTZWdt
ZW50cyI6NDMsIlNFUCI6NDQsIiRhY2NlcHQiOjAsIiRlbmQiOjF9LAotICB0ZXJtaW5hbHNfOiB7
MjoiZXJyb3IiLDU6IkVPRiIsMTQ6IkNPTlRFTlQiLDE1OiJDT01NRU5UIiwxNjoiT1BFTl9CTE9D
SyIsMTg6IkNMT1NFIiwxOToiT1BFTl9JTlZFUlNFIiwyMDoiT1BFTl9FTkRCTE9DSyIsMjI6Ik9Q
RU4iLDIzOiJPUEVOX1VORVNDQVBFRCIsMjQ6IkNMT1NFX1VORVNDQVBFRCIsMjU6Ik9QRU5fUEFS
VElBTCIsMzI6IlNUUklORyIsMzM6IklOVEVHRVIiLDM0OiJCT09MRUFOIiwzNToiT1BFTl9TRVhQ
UiIsMzY6IkNMT1NFX1NFWFBSIiw0MDoiSUQiLDQxOiJFUVVBTFMiLDQyOiJEQVRBIiw0NDoiU0VQ
In0sCi0gIHByb2R1Y3Rpb25zXzogWzAsWzMsMl0sWzMsMV0sWzYsMl0sWzYsM10sWzYsMl0sWzYs
MV0sWzYsMV0sWzYsMF0sWzQsMV0sWzQsMl0sWzgsM10sWzgsM10sWzgsMV0sWzgsMV0sWzgsMV0s
WzgsMV0sWzExLDNdLFs5LDNdLFsxMCwzXSxbMTIsM10sWzEyLDNdLFsxMyw0XSxbNywyXSxbMTcs
M10sWzE3LDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDNdLFszNywx
XSxbMzksM10sWzI2LDFdLFsyNiwxXSxbMjYsMV0sWzMwLDJdLFsyMSwxXSxbNDMsM10sWzQzLDFd
LFsyNywwXSxbMjcsMV0sWzI4LDBdLFsyOCwyXSxbMjksMF0sWzI5LDFdLFszOCwxXSxbMzgsMl1d
LAotICBwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBhbm9ueW1vdXMoeXl0ZXh0LHl5bGVuZyx5eWxp
bmVubyx5eSx5eXN0YXRlLCQkLF8kKSB7Ci0KLSAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTsKLSAg
c3dpdGNoICh5eXN0YXRlKSB7Ci0gIGNhc2UgMTogcmV0dXJuIG5ldyB5eS5Qcm9ncmFtTm9kZSgk
JFskMC0xXSwgdGhpcy5fJCk7IAotICBicmVhazsKLSAgY2FzZSAyOiByZXR1cm4gbmV3IHl5LlBy
b2dyYW1Ob2RlKFtdLCB0aGlzLl8kKTsgCi0gIGJyZWFrOwotICBjYXNlIDM6dGhpcy4kID0gbmV3
IHl5LlByb2dyYW1Ob2RlKFtdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7
Ci0gIGNhc2UgNDp0aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoJCRbJDAtMl0sICQkWyQwLTFd
LCAkJFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSA1OnRoaXMuJCA9IG5ldyB5eS5Q
cm9ncmFtTm9kZSgkJFskMC0xXSwgJCRbJDBdLCBbXSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBj
YXNlIDY6dGhpcy4kID0gbmV3IHl5LlByb2dyYW1Ob2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJy
ZWFrOwotICBjYXNlIDc6dGhpcy4kID0gbmV3IHl5LlByb2dyYW1Ob2RlKFtdLCB0aGlzLl8kKTsK
LSAgYnJlYWs7Ci0gIGNhc2UgODp0aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoW10sIHRoaXMu
XyQpOwotICBicmVhazsKLSAgY2FzZSA5OnRoaXMuJCA9IFskJFskMF1dOwotICBicmVhazsKLSAg
Y2FzZSAxMDogJCRbJDAtMV0ucHVzaCgkJFskMF0pOyB0aGlzLiQgPSAkJFskMC0xXTsgCi0gIGJy
ZWFrOwotICBjYXNlIDExOnRoaXMuJCA9IG5ldyB5eS5CbG9ja05vZGUoJCRbJDAtMl0sICQkWyQw
LTFdLmludmVyc2UsICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2Fz
ZSAxMjp0aGlzLiQgPSBuZXcgeXkuQmxvY2tOb2RlKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAt
MV0uaW52ZXJzZSwgJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTM6dGhpcy4k
ID0gJCRbJDBdOwotICBicmVhazsKLSAgY2FzZSAxNDp0aGlzLiQgPSAkJFskMF07Ci0gIGJyZWFr
OwotICBjYXNlIDE1OnRoaXMuJCA9IG5ldyB5eS5Db250ZW50Tm9kZSgkJFskMF0sIHRoaXMuXyQp
OwotICBicmVhazsKLSAgY2FzZSAxNjp0aGlzLiQgPSBuZXcgeXkuQ29tbWVudE5vZGUoJCRbJDBd
LCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTc6dGhpcy4kID0gbmV3IHl5Lk11c3RhY2hl
Tm9kZSgkJFskMC0xXSwgbnVsbCwgJCRbJDAtMl0sIHN0cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQw
XSksIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAxODp0aGlzLiQgPSBuZXcgeXkuTXVzdGFj
aGVOb2RlKCQkWyQwLTFdLCBudWxsLCAkJFskMC0yXSwgc3RyaXBGbGFncygkJFskMC0yXSwgJCRb
JDBdKSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDE5OnRoaXMuJCA9IHtwYXRoOiAkJFsk
MC0xXSwgc3RyaXA6IHN0cmlwRmxhZ3MoJCRbJDAtMl0sICQkWyQwXSl9OwotICBicmVhazsKLSAg
Y2FzZSAyMDp0aGlzLiQgPSBuZXcgeXkuTXVzdGFjaGVOb2RlKCQkWyQwLTFdLCBudWxsLCAkJFsk
MC0yXSwgc3RyaXBGbGFncygkJFskMC0yXSwgJCRbJDBdKSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwot
ICBjYXNlIDIxOnRoaXMuJCA9IG5ldyB5eS5NdXN0YWNoZU5vZGUoJCRbJDAtMV0sIG51bGwsICQk
WyQwLTJdLCBzdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pLCB0aGlzLl8kKTsKLSAgYnJlYWs7
Ci0gIGNhc2UgMjI6dGhpcy4kID0gbmV3IHl5LlBhcnRpYWxOb2RlKCQkWyQwLTJdLCAkJFskMC0x
XSwgc3RyaXBGbGFncygkJFskMC0zXSwgJCRbJDBdKSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBj
YXNlIDIzOnRoaXMuJCA9IHN0cmlwRmxhZ3MoJCRbJDAtMV0sICQkWyQwXSk7Ci0gIGJyZWFrOwot
ICBjYXNlIDI0OnRoaXMuJCA9IG5ldyB5eS5TZXhwck5vZGUoWyQkWyQwLTJdXS5jb25jYXQoJCRb
JDAtMV0pLCAkJFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAyNTp0aGlzLiQgPSBu
ZXcgeXkuU2V4cHJOb2RlKFskJFskMF1dLCBudWxsLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNh
c2UgMjY6dGhpcy4kID0gJCRbJDBdOwotICBicmVhazsKLSAgY2FzZSAyNzp0aGlzLiQgPSBuZXcg
eXkuU3RyaW5nTm9kZSgkJFskMF0sIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2FzZSAyODp0aGlz
LiQgPSBuZXcgeXkuSW50ZWdlck5vZGUoJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNh
c2UgMjk6dGhpcy4kID0gbmV3IHl5LkJvb2xlYW5Ob2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJy
ZWFrOwotICBjYXNlIDMwOnRoaXMuJCA9ICQkWyQwXTsKLSAgYnJlYWs7Ci0gIGNhc2UgMzE6JCRb
JDAtMV0uaXNIZWxwZXIgPSB0cnVlOyB0aGlzLiQgPSAkJFskMC0xXTsKLSAgYnJlYWs7Ci0gIGNh
c2UgMzI6dGhpcy4kID0gbmV3IHl5Lkhhc2hOb2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJyZWFr
OwotICBjYXNlIDMzOnRoaXMuJCA9IFskJFskMC0yXSwgJCRbJDBdXTsKLSAgYnJlYWs7Ci0gIGNh
c2UgMzQ6dGhpcy4kID0gbmV3IHl5LlBhcnRpYWxOYW1lTm9kZSgkJFskMF0sIHRoaXMuXyQpOwot
ICBicmVhazsKLSAgY2FzZSAzNTp0aGlzLiQgPSBuZXcgeXkuUGFydGlhbE5hbWVOb2RlKG5ldyB5
eS5TdHJpbmdOb2RlKCQkWyQwXSwgdGhpcy5fJCksIHRoaXMuXyQpOwotICBicmVhazsKLSAgY2Fz
ZSAzNjp0aGlzLiQgPSBuZXcgeXkuUGFydGlhbE5hbWVOb2RlKG5ldyB5eS5JbnRlZ2VyTm9kZSgk
JFskMF0sIHRoaXMuXyQpKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMzc6dGhpcy4kID0gbmV3IHl5LkRh
dGFOb2RlKCQkWyQwXSwgdGhpcy5fJCk7Ci0gIGJyZWFrOwotICBjYXNlIDM4OnRoaXMuJCA9IG5l
dyB5eS5JZE5vZGUoJCRbJDBdLCB0aGlzLl8kKTsKLSAgYnJlYWs7Ci0gIGNhc2UgMzk6ICQkWyQw
LTJdLnB1c2goe3BhcnQ6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAk
JFskMC0yXTsgCi0gIGJyZWFrOwotICBjYXNlIDQwOnRoaXMuJCA9IFt7cGFydDogJCRbJDBdfV07
Ci0gIGJyZWFrOwotICBjYXNlIDQzOnRoaXMuJCA9IFtdOwotICBicmVhazsKLSAgY2FzZSA0NDok
JFskMC0xXS5wdXNoKCQkWyQwXSk7Ci0gIGJyZWFrOwotICBjYXNlIDQ3OnRoaXMuJCA9IFskJFsk
MF1dOwotICBicmVhazsKLSAgY2FzZSA0ODokJFskMC0xXS5wdXNoKCQkWyQwXSk7Ci0gIGJyZWFr
OwotICB9Ci0gIH0sCi0gIHRhYmxlOiBbezM6MSw0OjIsNTpbMSwzXSw4OjQsOTo1LDExOjYsMTI6
NywxMzo4LDE0OlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMl0sMTk6WzEsMTFdLDIyOlsxLDEzXSwy
MzpbMSwxNF0sMjU6WzEsMTVdfSx7MTpbM119LHs1OlsxLDE2XSw4OjE3LDk6NSwxMTo2LDEyOjcs
MTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJdLDE5OlsxLDExXSwyMjpbMSwxM10sMjM6
WzEsMTRdLDI1OlsxLDE1XX0sezE6WzIsMl19LHs1OlsyLDldLDE0OlsyLDldLDE1OlsyLDldLDE2
OlsyLDldLDE5OlsyLDldLDIwOlsyLDldLDIyOlsyLDldLDIzOlsyLDldLDI1OlsyLDldfSx7NDoy
MCw2OjE4LDc6MTksODo0LDk6NSwxMTo2LDEyOjcsMTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6
WzEsMTJdLDE5OlsxLDIxXSwyMDpbMiw4XSwyMjpbMSwxM10sMjM6WzEsMTRdLDI1OlsxLDE1XX0s
ezQ6MjAsNjoyMiw3OjE5LDg6NCw5OjUsMTE6NiwxMjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBd
LDE2OlsxLDEyXSwxOTpbMSwyMV0sMjA6WzIsOF0sMjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwx
NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE2OlsyLDEzXSwxOTpbMiwxM10sMjA6
WzIsMTNdLDIyOlsyLDEzXSwyMzpbMiwxM10sMjU6WzIsMTNdfSx7NTpbMiwxNF0sMTQ6WzIsMTRd
LDE1OlsyLDE0XSwxNjpbMiwxNF0sMTk6WzIsMTRdLDIwOlsyLDE0XSwyMjpbMiwxNF0sMjM6WzIs
MTRdLDI1OlsyLDE0XX0sezU6WzIsMTVdLDE0OlsyLDE1XSwxNTpbMiwxNV0sMTY6WzIsMTVdLDE5
OlsyLDE1XSwyMDpbMiwxNV0sMjI6WzIsMTVdLDIzOlsyLDE1XSwyNTpbMiwxNV19LHs1OlsyLDE2
XSwxNDpbMiwxNl0sMTU6WzIsMTZdLDE2OlsyLDE2XSwxOTpbMiwxNl0sMjA6WzIsMTZdLDIyOlsy
LDE2XSwyMzpbMiwxNl0sMjU6WzIsMTZdfSx7MTc6MjMsMjE6MjQsMzA6MjUsNDA6WzEsMjhdLDQy
OlsxLDI3XSw0MzoyNn0sezE3OjI5LDIxOjI0LDMwOjI1LDQwOlsxLDI4XSw0MjpbMSwyN10sNDM6
MjZ9LHsxNzozMCwyMToyNCwzMDoyNSw0MDpbMSwyOF0sNDI6WzEsMjddLDQzOjI2fSx7MTc6MzEs
MjE6MjQsMzA6MjUsNDA6WzEsMjhdLDQyOlsxLDI3XSw0MzoyNn0sezIxOjMzLDI2OjMyLDMyOlsx
LDM0XSwzMzpbMSwzNV0sNDA6WzEsMjhdLDQzOjI2fSx7MTpbMiwxXX0sezU6WzIsMTBdLDE0Olsy
LDEwXSwxNTpbMiwxMF0sMTY6WzIsMTBdLDE5OlsyLDEwXSwyMDpbMiwxMF0sMjI6WzIsMTBdLDIz
OlsyLDEwXSwyNTpbMiwxMF19LHsxMDozNiwyMDpbMSwzN119LHs0OjM4LDg6NCw5OjUsMTE6Niwx
Mjo3LDEzOjgsMTQ6WzEsOV0sMTU6WzEsMTBdLDE2OlsxLDEyXSwxOTpbMSwxMV0sMjA6WzIsN10s
MjI6WzEsMTNdLDIzOlsxLDE0XSwyNTpbMSwxNV19LHs3OjM5LDg6MTcsOTo1LDExOjYsMTI6Nywx
Mzo4LDE0OlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMl0sMTk6WzEsMjFdLDIwOlsyLDZdLDIyOlsx
LDEzXSwyMzpbMSwxNF0sMjU6WzEsMTVdfSx7MTc6MjMsMTg6WzEsNDBdLDIxOjI0LDMwOjI1LDQw
OlsxLDI4XSw0MjpbMSwyN10sNDM6MjZ9LHsxMDo0MSwyMDpbMSwzN119LHsxODpbMSw0Ml19LHsx
ODpbMiw0M10sMjQ6WzIsNDNdLDI4OjQzLDMyOlsyLDQzXSwzMzpbMiw0M10sMzQ6WzIsNDNdLDM1
OlsyLDQzXSwzNjpbMiw0M10sNDA6WzIsNDNdLDQyOlsyLDQzXX0sezE4OlsyLDI1XSwyNDpbMiwy
NV0sMzY6WzIsMjVdfSx7MTg6WzIsMzhdLDI0OlsyLDM4XSwzMjpbMiwzOF0sMzM6WzIsMzhdLDM0
OlsyLDM4XSwzNTpbMiwzOF0sMzY6WzIsMzhdLDQwOlsyLDM4XSw0MjpbMiwzOF0sNDQ6WzEsNDRd
fSx7MjE6NDUsNDA6WzEsMjhdLDQzOjI2fSx7MTg6WzIsNDBdLDI0OlsyLDQwXSwzMjpbMiw0MF0s
MzM6WzIsNDBdLDM0OlsyLDQwXSwzNTpbMiw0MF0sMzY6WzIsNDBdLDQwOlsyLDQwXSw0MjpbMiw0
MF0sNDQ6WzIsNDBdfSx7MTg6WzEsNDZdfSx7MTg6WzEsNDddfSx7MjQ6WzEsNDhdfSx7MTg6WzIs
NDFdLDIxOjUwLDI3OjQ5LDQwOlsxLDI4XSw0MzoyNn0sezE4OlsyLDM0XSw0MDpbMiwzNF19LHsx
ODpbMiwzNV0sNDA6WzIsMzVdfSx7MTg6WzIsMzZdLDQwOlsyLDM2XX0sezU6WzIsMTFdLDE0Olsy
LDExXSwxNTpbMiwxMV0sMTY6WzIsMTFdLDE5OlsyLDExXSwyMDpbMiwxMV0sMjI6WzIsMTFdLDIz
OlsyLDExXSwyNTpbMiwxMV19LHsyMTo1MSw0MDpbMSwyOF0sNDM6MjZ9LHs4OjE3LDk6NSwxMTo2
LDEyOjcsMTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJdLDE5OlsxLDExXSwyMDpbMiwz
XSwyMjpbMSwxM10sMjM6WzEsMTRdLDI1OlsxLDE1XX0sezQ6NTIsODo0LDk6NSwxMTo2LDEyOjcs
MTM6OCwxNDpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJdLDE5OlsxLDExXSwyMDpbMiw1XSwyMjpb
MSwxM10sMjM6WzEsMTRdLDI1OlsxLDE1XX0sezE0OlsyLDIzXSwxNTpbMiwyM10sMTY6WzIsMjNd
LDE5OlsyLDIzXSwyMDpbMiwyM10sMjI6WzIsMjNdLDIzOlsyLDIzXSwyNTpbMiwyM119LHs1Olsy
LDEyXSwxNDpbMiwxMl0sMTU6WzIsMTJdLDE2OlsyLDEyXSwxOTpbMiwxMl0sMjA6WzIsMTJdLDIy
OlsyLDEyXSwyMzpbMiwxMl0sMjU6WzIsMTJdfSx7MTQ6WzIsMThdLDE1OlsyLDE4XSwxNjpbMiwx
OF0sMTk6WzIsMThdLDIwOlsyLDE4XSwyMjpbMiwxOF0sMjM6WzIsMThdLDI1OlsyLDE4XX0sezE4
OlsyLDQ1XSwyMTo1NiwyNDpbMiw0NV0sMjk6NTMsMzA6NjAsMzE6NTQsMzI6WzEsNTddLDMzOlsx
LDU4XSwzNDpbMSw1OV0sMzU6WzEsNjFdLDM2OlsyLDQ1XSwzNzo1NSwzODo2MiwzOTo2Myw0MDpb
MSw2NF0sNDI6WzEsMjddLDQzOjI2fSx7NDA6WzEsNjVdfSx7MTg6WzIsMzddLDI0OlsyLDM3XSwz
MjpbMiwzN10sMzM6WzIsMzddLDM0OlsyLDM3XSwzNTpbMiwzN10sMzY6WzIsMzddLDQwOlsyLDM3
XSw0MjpbMiwzN119LHsxNDpbMiwxN10sMTU6WzIsMTddLDE2OlsyLDE3XSwxOTpbMiwxN10sMjA6
WzIsMTddLDIyOlsyLDE3XSwyMzpbMiwxN10sMjU6WzIsMTddfSx7NTpbMiwyMF0sMTQ6WzIsMjBd
LDE1OlsyLDIwXSwxNjpbMiwyMF0sMTk6WzIsMjBdLDIwOlsyLDIwXSwyMjpbMiwyMF0sMjM6WzIs
MjBdLDI1OlsyLDIwXX0sezU6WzIsMjFdLDE0OlsyLDIxXSwxNTpbMiwyMV0sMTY6WzIsMjFdLDE5
OlsyLDIxXSwyMDpbMiwyMV0sMjI6WzIsMjFdLDIzOlsyLDIxXSwyNTpbMiwyMV19LHsxODpbMSw2
Nl19LHsxODpbMiw0Ml19LHsxODpbMSw2N119LHs4OjE3LDk6NSwxMTo2LDEyOjcsMTM6OCwxNDpb
MSw5XSwxNTpbMSwxMF0sMTY6WzEsMTJdLDE5OlsxLDExXSwyMDpbMiw0XSwyMjpbMSwxM10sMjM6
WzEsMTRdLDI1OlsxLDE1XX0sezE4OlsyLDI0XSwyNDpbMiwyNF0sMzY6WzIsMjRdfSx7MTg6WzIs
NDRdLDI0OlsyLDQ0XSwzMjpbMiw0NF0sMzM6WzIsNDRdLDM0OlsyLDQ0XSwzNTpbMiw0NF0sMzY6
WzIsNDRdLDQwOlsyLDQ0XSw0MjpbMiw0NF19LHsxODpbMiw0Nl0sMjQ6WzIsNDZdLDM2OlsyLDQ2
XX0sezE4OlsyLDI2XSwyNDpbMiwyNl0sMzI6WzIsMjZdLDMzOlsyLDI2XSwzNDpbMiwyNl0sMzU6
WzIsMjZdLDM2OlsyLDI2XSw0MDpbMiwyNl0sNDI6WzIsMjZdfSx7MTg6WzIsMjddLDI0OlsyLDI3
XSwzMjpbMiwyN10sMzM6WzIsMjddLDM0OlsyLDI3XSwzNTpbMiwyN10sMzY6WzIsMjddLDQwOlsy
LDI3XSw0MjpbMiwyN119LHsxODpbMiwyOF0sMjQ6WzIsMjhdLDMyOlsyLDI4XSwzMzpbMiwyOF0s
MzQ6WzIsMjhdLDM1OlsyLDI4XSwzNjpbMiwyOF0sNDA6WzIsMjhdLDQyOlsyLDI4XX0sezE4Olsy
LDI5XSwyNDpbMiwyOV0sMzI6WzIsMjldLDMzOlsyLDI5XSwzNDpbMiwyOV0sMzU6WzIsMjldLDM2
OlsyLDI5XSw0MDpbMiwyOV0sNDI6WzIsMjldfSx7MTg6WzIsMzBdLDI0OlsyLDMwXSwzMjpbMiwz
MF0sMzM6WzIsMzBdLDM0OlsyLDMwXSwzNTpbMiwzMF0sMzY6WzIsMzBdLDQwOlsyLDMwXSw0Mjpb
MiwzMF19LHsxNzo2OCwyMToyNCwzMDoyNSw0MDpbMSwyOF0sNDI6WzEsMjddLDQzOjI2fSx7MTg6
WzIsMzJdLDI0OlsyLDMyXSwzNjpbMiwzMl0sMzk6NjksNDA6WzEsNzBdfSx7MTg6WzIsNDddLDI0
OlsyLDQ3XSwzNjpbMiw0N10sNDA6WzIsNDddfSx7MTg6WzIsNDBdLDI0OlsyLDQwXSwzMjpbMiw0
MF0sMzM6WzIsNDBdLDM0OlsyLDQwXSwzNTpbMiw0MF0sMzY6WzIsNDBdLDQwOlsyLDQwXSw0MTpb
MSw3MV0sNDI6WzIsNDBdLDQ0OlsyLDQwXX0sezE4OlsyLDM5XSwyNDpbMiwzOV0sMzI6WzIsMzld
LDMzOlsyLDM5XSwzNDpbMiwzOV0sMzU6WzIsMzldLDM2OlsyLDM5XSw0MDpbMiwzOV0sNDI6WzIs
MzldLDQ0OlsyLDM5XX0sezU6WzIsMjJdLDE0OlsyLDIyXSwxNTpbMiwyMl0sMTY6WzIsMjJdLDE5
OlsyLDIyXSwyMDpbMiwyMl0sMjI6WzIsMjJdLDIzOlsyLDIyXSwyNTpbMiwyMl19LHs1OlsyLDE5
XSwxNDpbMiwxOV0sMTU6WzIsMTldLDE2OlsyLDE5XSwxOTpbMiwxOV0sMjA6WzIsMTldLDIyOlsy
LDE5XSwyMzpbMiwxOV0sMjU6WzIsMTldfSx7MzY6WzEsNzJdfSx7MTg6WzIsNDhdLDI0OlsyLDQ4
XSwzNjpbMiw0OF0sNDA6WzIsNDhdfSx7NDE6WzEsNzFdfSx7MjE6NTYsMzA6NjAsMzE6NzMsMzI6
WzEsNTddLDMzOlsxLDU4XSwzNDpbMSw1OV0sMzU6WzEsNjFdLDQwOlsxLDI4XSw0MjpbMSwyN10s
NDM6MjZ9LHsxODpbMiwzMV0sMjQ6WzIsMzFdLDMyOlsyLDMxXSwzMzpbMiwzMV0sMzQ6WzIsMzFd
LDM1OlsyLDMxXSwzNjpbMiwzMV0sNDA6WzIsMzFdLDQyOlsyLDMxXX0sezE4OlsyLDMzXSwyNDpb
MiwzM10sMzY6WzIsMzNdLDQwOlsyLDMzXX1dLAotICBkZWZhdWx0QWN0aW9uczogezM6WzIsMl0s
MTY6WzIsMV0sNTA6WzIsNDJdfSwKLSAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihz
dHIsIGhhc2gpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpOwotICB9LAotICBwYXJzZTog
ZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHsKLSAgICAgIHZhciBzZWxmID0gdGhpcywgc3RhY2sgPSBb
MF0sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhpcy50YWJsZSwgeXl0
ZXh0ID0gIiIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJP
UiA9IDIsIEVPRiA9IDE7Ci0gICAgICB0aGlzLmxleGVyLnNldElucHV0KGlucHV0KTsKLSAgICAg
IHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5OwotICAgICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4
ZXI7Ci0gICAgICB0aGlzLnl5LnBhcnNlciA9IHRoaXM7Ci0gICAgICBpZiAodHlwZW9mIHRoaXMu
bGV4ZXIueXlsbG9jID09ICJ1bmRlZmluZWQiKQotICAgICAgICAgIHRoaXMubGV4ZXIueXlsbG9j
ID0ge307Ci0gICAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYzsKLSAgICAgIGxzdGFj
ay5wdXNoKHl5bG9jKTsKLSAgICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYg
dGhpcy5sZXhlci5vcHRpb25zLnJhbmdlczsKLSAgICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJz
ZUVycm9yID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMu
eXkucGFyc2VFcnJvcjsKLSAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHsKLSAgICAgICAgICBz
dGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjsKLSAgICAgICAgICB2c3RhY2subGVu
Z3RoID0gdnN0YWNrLmxlbmd0aCAtIG47Ci0gICAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFj
ay5sZW5ndGggLSBuOwotICAgICAgfQotICAgICAgZnVuY3Rpb24gbGV4KCkgewotICAgICAgICAg
IHZhciB0b2tlbjsKLSAgICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTsKLSAg
ICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSAibnVtYmVyIikgewotICAgICAgICAgICAgICB0
b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuOwotICAgICAgICAgIH0KLSAgICAg
ICAgICByZXR1cm4gdG9rZW47Ci0gICAgICB9Ci0gICAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5
bWJvbCwgc3RhdGUsIGFjdGlvbiwgYSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwg
ZXhwZWN0ZWQ7Ci0gICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgIHN0YXRlID0gc3RhY2tb
c3RhY2subGVuZ3RoIC0gMV07Ci0gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3Rh
dGVdKSB7Ci0gICAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVd
OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwg
fHwgdHlwZW9mIHN5bWJvbCA9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgICAgc3lt
Ym9sID0gbGV4KCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYWN0aW9uID0gdGFi
bGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gInVuZGVmaW5lZCIgfHwgIWFjdGlvbi5sZW5ndGggfHwg
IWFjdGlvblswXSkgewotICAgICAgICAgICAgICB2YXIgZXJyU3RyID0gIiI7Ci0gICAgICAgICAg
ICAgIGlmICghcmVjb3ZlcmluZykgewotICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTsK
LSAgICAgICAgICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pCi0gICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gMikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKCInIiArIHRoaXMudGVybWluYWxzX1twXSArICIn
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bGV4ZXIuc2hvd1Bvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gIlBh
cnNlIGVycm9yIG9uIGxpbmUgIiArICh5eWxpbmVubyArIDEpICsgIjpcbiIgKyB0aGlzLmxleGVy
LnNob3dQb3NpdGlvbigpICsgIlxuRXhwZWN0aW5nICIgKyBleHBlY3RlZC5qb2luKCIsICIpICsg
IiwgZ290ICciICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAiJyI7Ci0g
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGVyclN0ciA9
ICJQYXJzZSBlcnJvciBvbiBsaW5lICIgKyAoeXlsaW5lbm8gKyAxKSArICI6IFVuZXhwZWN0ZWQg
IiArIChzeW1ib2wgPT0gMT8iZW5kIG9mIGlucHV0IjoiJyIgKyAodGhpcy50ZXJtaW5hbHNfW3N5
bWJvbF0gfHwgc3ltYm9sKSArICInIik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwg
dG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhl
ci55eWxpbmVubywgbG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFy
cmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIgKyBz
dGF0ZSArICIsIHRva2VuOiAiICsgc3ltYm9sKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3dp
dGNoIChhY3Rpb25bMF0pIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgIHN0YWNr
LnB1c2goc3ltYm9sKTsKLSAgICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRl
eHQpOwotICAgICAgICAgICAgICBsc3RhY2sucHVzaCh0aGlzLmxleGVyLnl5bGxvYyk7Ci0gICAg
ICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTsKLSAgICAgICAgICAgICAgc3ltYm9sID0g
bnVsbDsKLSAgICAgICAgICAgICAgaWYgKCFwcmVFcnJvclN5bWJvbCkgewotICAgICAgICAgICAg
ICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7Ci0gICAgICAgICAgICAgICAgICB5eXRl
eHQgPSB0aGlzLmxleGVyLnl5dGV4dDsKLSAgICAgICAgICAgICAgICAgIHl5bGluZW5vID0gdGhp
cy5sZXhlci55eWxpbmVubzsKLSAgICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55
eWxsb2M7Ci0gICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgcmVjb3ZlcmluZy0tOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7Ci0gICAgICAgICAgICAgICAgICBw
cmVFcnJvclN5bWJvbCA9IG51bGw7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rp
b25zX1thY3Rpb25bMV1dWzFdOwotICAgICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFj
ay5sZW5ndGggLSBsZW5dOwotICAgICAgICAgICAgICB5eXZhbC5fJCA9IHtmaXJzdF9saW5lOiBs
c3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsIGxhc3RfbGluZTog
bHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsIGZpcnN0X2NvbHVtbjogbHN0YWNr
W2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sIGxhc3RfY29sdW1uOiBs
c3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1ufTsKLSAgICAgICAgICAgICAgaWYg
KHJhbmdlcykgewotICAgICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xz
dGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGgg
LSAxXS5yYW5nZVsxXV07Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgciA9IHRoaXMu
cGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMu
eXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spOwotICAgICAgICAgICAgICBpZiAodHlwZW9m
IHIgIT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gcjsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICBz
dGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7Ci0gICAgICAgICAgICAgICAgICB2
c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pOwotICAgICAgICAgICAgICAgICAgbHN0
YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTsKLSAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pOwotICAg
ICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTsKLSAgICAgICAgICAgICAgbHN0YWNrLnB1
c2goeXl2YWwuXyQpOwotICAgICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNr
Lmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07Ci0gICAgICAgICAgICAgIHN0
YWNrLnB1c2gobmV3U3RhdGUpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IDM6Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIHJldHVybiB0cnVlOwotICB9Ci0gIH07Ci0KLQotICBmdW5jdGlvbiBzdHJpcEZsYWdzKG9w
ZW4sIGNsb3NlKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGxlZnQ6IG9wZW4uY2hhckF0KDIpID09
PSAnficsCi0gICAgICByaWdodDogY2xvc2UuY2hhckF0KDApID09PSAnficgfHwgY2xvc2UuY2hh
ckF0KDEpID09PSAnficKLSAgICB9OwotICB9Ci0KLSAgLyogSmlzb24gZ2VuZXJhdGVkIGxleGVy
ICovCi0gIHZhciBsZXhlciA9IChmdW5jdGlvbigpewotICB2YXIgbGV4ZXIgPSAoe0VPRjoxLAot
ICBwYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7Ci0gICAgICAgICAg
aWYgKHRoaXMueXkucGFyc2VyKSB7Ci0gICAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNl
RXJyb3Ioc3RyLCBoYXNoKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3Ioc3RyKTsKLSAgICAgICAgICB9Ci0gICAgICB9LAotICBzZXRJbnB1dDpmdW5j
dGlvbiAoaW5wdXQpIHsKLSAgICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0OwotICAgICAgICAg
IHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7Ci0gICAgICAgICAg
dGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDsKLSAgICAgICAgICB0aGlzLnl5dGV4dCA9
IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJzsKLSAgICAgICAgICB0aGlzLmNvbmRpdGlv
blN0YWNrID0gWydJTklUSUFMJ107Ci0gICAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGlu
ZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9OwotICAgICAgICAg
IGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLDBdOwotICAg
ICAgICAgIHRoaXMub2Zmc2V0ID0gMDsKLSAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0s
Ci0gIGlucHV0OmZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFsw
XTsKLSAgICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDsKLSAgICAgICAgICB0aGlzLnl5bGVuZysr
OwotICAgICAgICAgIHRoaXMub2Zmc2V0Kys7Ci0gICAgICAgICAgdGhpcy5tYXRjaCArPSBjaDsK
LSAgICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7Ci0gICAgICAgICAgdmFyIGxpbmVzID0gY2gu
bWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpOwotICAgICAgICAgIGlmIChsaW5lcykgewotICAgICAg
ICAgICAgICB0aGlzLnl5bGluZW5vKys7Ci0gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3Rf
bGluZSsrOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmxh
c3RfY29sdW1uKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFu
Z2VzKSB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrOwotCi0gICAgICAgICAgdGhpcy5faW5wdXQgPSB0
aGlzLl9pbnB1dC5zbGljZSgxKTsKLSAgICAgICAgICByZXR1cm4gY2g7Ci0gICAgICB9LAotICB1
bnB1dDpmdW5jdGlvbiAoY2gpIHsKLSAgICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoOwotICAg
ICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7Ci0KLSAgICAgICAg
ICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7Ci0gICAgICAgICAgdGhpcy55eXRleHQg
PSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoLWxlbi0xKTsKLSAgICAg
ICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjsKLSAgICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47
Ci0gICAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4p
L2cpOwotICAgICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1h
dGNoLmxlbmd0aC0xKTsKLSAgICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vi
c3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7Ci0KLSAgICAgICAgICBpZiAobGluZXMubGVu
Z3RoLTEpIHRoaXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoLTE7Ci0gICAgICAgICAgdmFyIHIg
PSB0aGlzLnl5bGxvYy5yYW5nZTsKLQotICAgICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xp
bmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsCi0gICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMu
eXlsaW5lbm8rMSwKLSAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3Rf
Y29sdW1uLAotICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8KLSAgICAgICAgICAgICAg
ICAobGluZXMubGVuZ3RoID09PSBvbGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9j
b2x1bW4gOiAwKSArIG9sZExpbmVzW29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVu
Z3RoIC0gbGluZXNbMF0ubGVuZ3RoOgotICAgICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0
X2NvbHVtbiAtIGxlbgotICAgICAgICAgICAgfTsKLQotICAgICAgICAgIGlmICh0aGlzLm9wdGlv
bnMucmFuZ2VzKSB7Ci0gICAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJb
MF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgfSwKLSAgbW9yZTpmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdGhpcy5fbW9y
ZSA9IHRydWU7Ci0gICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9LAotICBsZXNzOmZ1bmN0
aW9uIChuKSB7Ci0gICAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTsKLSAg
ICAgIH0sCi0gIHBhc3RJbnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdmFyIHBhc3QgPSB0
aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxl
bmd0aCk7Ci0gICAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsg
cGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCAiIik7Ci0gICAgICB9LAotICB1cGNvbWlu
Z0lucHV0OmZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7Ci0g
ICAgICAgICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHsKLSAgICAgICAgICAgICAgbmV4dCArPSB0
aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpOwotICAgICAgICAgIH0KLSAgICAg
ICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsMjApKyhuZXh0Lmxlbmd0aCA+IDIwID8gJy4uLic6
JycpKS5yZXBsYWNlKC9cbi9nLCAiIik7Ci0gICAgICB9LAotICBzaG93UG9zaXRpb246ZnVuY3Rp
b24gKCkgewotICAgICAgICAgIHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpOwotICAgICAgICAg
IHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKCItIik7Ci0gICAgICAgICAg
cmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgIlxuIiArIGMrIl4iOwotICAgICAg
fSwKLSAgbmV4dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgaWYgKHRoaXMuZG9uZSkgewotICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgh
dGhpcy5faW5wdXQpIHRoaXMuZG9uZSA9IHRydWU7Ci0KLSAgICAgICAgICB2YXIgdG9rZW4sCi0g
ICAgICAgICAgICAgIG1hdGNoLAotICAgICAgICAgICAgICB0ZW1wTWF0Y2gsCi0gICAgICAgICAg
ICAgIGluZGV4LAotICAgICAgICAgICAgICBjb2wsCi0gICAgICAgICAgICAgIGxpbmVzOwotICAg
ICAgICAgIGlmICghdGhpcy5fbW9yZSkgewotICAgICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcn
OwotICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gJyc7Ci0gICAgICAgICAgfQotICAgICAgICAg
IHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpOwotICAgICAgICAgIGZvciAodmFyIGk9
MDtpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhp
cy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pOwotICAgICAgICAgICAgICBpZiAo
dGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxl
bmd0aCkpIHsKLSAgICAgICAgICAgICAgICAgIG1hdGNoID0gdGVtcE1hdGNoOwotICAgICAgICAg
ICAgICAgICAgaW5kZXggPSBpOwotICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMu
ZmxleCkgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYg
KG1hdGNoKSB7Ci0gICAgICAgICAgICAgIGxpbmVzID0gbWF0Y2hbMF0ubWF0Y2goLyg/OlxyXG4/
fFxuKS4qL2cpOwotICAgICAgICAgICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGlu
ZXMubGVuZ3RoOwotICAgICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlz
Lnl5bGxvYy5sYXN0X2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfbGlu
ZTogdGhpcy55eWxpbmVubysxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9j
b2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxp
bmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxs
b2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGh9OwotICAgICAgICAgICAgICB0aGlzLnl5
dGV4dCArPSBtYXRjaFswXTsKLSAgICAgICAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTsK
LSAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7Ci0gICAgICAgICAgICAgIHRoaXMu
eXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoOwotICAgICAgICAgICAgICBpZiAodGhpcy5vcHRp
b25zLnJhbmdlcykgewotICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhp
cy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHRoaXMuX2lu
cHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTsKLSAgICAgICAgICAgICAg
dGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdOwotICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMucGVy
Zm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIHJ1bGVzW2luZGV4XSx0aGlzLmNv
bmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKTsKLSAgICAgICAgICAg
ICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAgICBlbHNlIHJl
dHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSAiIikgewot
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcr
KHRoaXMueXlsaW5lbm8rMSkrJy4gVW5yZWNvZ25pemVkIHRleHQuXG4nK3RoaXMuc2hvd1Bvc2l0
aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAge3RleHQ6ICIiLCB0b2tlbjogbnVsbCwgbGlu
ZTogdGhpcy55eWxpbmVub30pOwotICAgICAgICAgIH0KLSAgICAgIH0sCi0gIGxleDpmdW5jdGlv
biBsZXgoKSB7Ci0gICAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTsKLSAgICAgICAgICBpZiAo
dHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgIHJldHVybiByOwotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpOwotICAgICAg
ICAgIH0KLSAgICAgIH0sCi0gIGJlZ2luOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikgewotICAg
ICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pOwotICAgICAgfSwKLSAg
cG9wU3RhdGU6ZnVuY3Rpb24gcG9wU3RhdGUoKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuY29u
ZGl0aW9uU3RhY2sucG9wKCk7Ci0gICAgICB9LAotICBfY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9j
dXJyZW50UnVsZXMoKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlzLmNv
bmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczsKLSAgICAg
IH0sCi0gIHRvcFN0YXRlOmZ1bmN0aW9uICgpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5jb25k
aXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0yXTsKLSAgICAgIH0sCi0gIHB1
c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHsKLSAgICAgICAgICB0aGlzLmJlZ2lu
KGNvbmRpdGlvbik7Ci0gICAgICB9fSk7Ci0gIGxleGVyLm9wdGlvbnMgPSB7fTsKLSAgbGV4ZXIu
cGVyZm9ybUFjdGlvbiA9IGZ1bmN0aW9uIGFub255bW91cyh5eSx5eV8sJGF2b2lkaW5nX25hbWVf
Y29sbGlzaW9ucyxZWV9TVEFSVCkgewotCi0KLSAgZnVuY3Rpb24gc3RyaXAoc3RhcnQsIGVuZCkg
ewotICAgIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55
eWxlbmctZW5kKTsKLSAgfQotCi0KLSAgdmFyIFlZU1RBVEU9WVlfU1RBUlQKLSAgc3dpdGNoKCRh
dm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHsKLSAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSAiXFxcXCIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCJtdSIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZih5eV8ueXl0ZXh0LnNs
aWNlKC0xKSA9PT0gIlxcIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyaXAoMCwxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuYmVnaW4oImVtdSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2lu
KCJtdSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBicmVhazsKLSAgY2FzZSAxOnJl
dHVybiAxNDsKLSAgYnJlYWs7Ci0gIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDE0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgYnJlYWs7Ci0gIGNhc2UgMzpzdHJpcCgwLDQpOyB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAx
NTsKLSAgYnJlYWs7Ci0gIGNhc2UgNDpyZXR1cm4gMzU7Ci0gIGJyZWFrOwotICBjYXNlIDU6cmV0
dXJuIDM2OwotICBicmVhazsKLSAgY2FzZSA2OnJldHVybiAyNTsKLSAgYnJlYWs7Ci0gIGNhc2Ug
NzpyZXR1cm4gMTY7Ci0gIGJyZWFrOwotICBjYXNlIDg6cmV0dXJuIDIwOwotICBicmVhazsKLSAg
Y2FzZSA5OnJldHVybiAxOTsKLSAgYnJlYWs7Ci0gIGNhc2UgMTA6cmV0dXJuIDE5OwotICBicmVh
azsKLSAgY2FzZSAxMTpyZXR1cm4gMjM7Ci0gIGJyZWFrOwotICBjYXNlIDEyOnJldHVybiAyMjsK
LSAgYnJlYWs7Ci0gIGNhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpOyB0aGlzLmJlZ2luKCdjb20nKTsK
LSAgYnJlYWs7Ci0gIGNhc2UgMTQ6c3RyaXAoMyw1KTsgdGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4g
MTU7Ci0gIGJyZWFrOwotICBjYXNlIDE1OnJldHVybiAyMjsKLSAgYnJlYWs7Ci0gIGNhc2UgMTY6
cmV0dXJuIDQxOwotICBicmVhazsKLSAgY2FzZSAxNzpyZXR1cm4gNDA7Ci0gIGJyZWFrOwotICBj
YXNlIDE4OnJldHVybiA0MDsKLSAgYnJlYWs7Ci0gIGNhc2UgMTk6cmV0dXJuIDQ0OwotICBicmVh
azsKLSAgY2FzZSAyMDovLyBpZ25vcmUgd2hpdGVzcGFjZQotICBicmVhazsKLSAgY2FzZSAyMTp0
aGlzLnBvcFN0YXRlKCk7IHJldHVybiAyNDsKLSAgYnJlYWs7Ci0gIGNhc2UgMjI6dGhpcy5wb3BT
dGF0ZSgpOyByZXR1cm4gMTg7Ci0gIGJyZWFrOwotICBjYXNlIDIzOnl5Xy55eXRleHQgPSBzdHJp
cCgxLDIpLnJlcGxhY2UoL1xcIi9nLCciJyk7IHJldHVybiAzMjsKLSAgYnJlYWs7Ci0gIGNhc2Ug
MjQ6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMikucmVwbGFjZSgvXFwnL2csIiciKTsgcmV0dXJuIDMy
OwotICBicmVhazsKLSAgY2FzZSAyNTpyZXR1cm4gNDI7Ci0gIGJyZWFrOwotICBjYXNlIDI2OnJl
dHVybiAzNDsKLSAgYnJlYWs7Ci0gIGNhc2UgMjc6cmV0dXJuIDM0OwotICBicmVhazsKLSAgY2Fz
ZSAyODpyZXR1cm4gMzM7Ci0gIGJyZWFrOwotICBjYXNlIDI5OnJldHVybiA0MDsKLSAgYnJlYWs7
Ci0gIGNhc2UgMzA6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMik7IHJldHVybiA0MDsKLSAgYnJlYWs7
Ci0gIGNhc2UgMzE6cmV0dXJuICdJTlZBTElEJzsKLSAgYnJlYWs7Ci0gIGNhc2UgMzI6cmV0dXJu
IDU7Ci0gIGJyZWFrOwotICB9Ci0gIH07Ci0gIGxleGVyLnJ1bGVzID0gWy9eKD86W15ceDAwXSo/
KD89KFx7XHspKSkvLC9eKD86W15ceDAwXSspLywvXig/OlteXHgwMF17Mix9Pyg/PShce1x7fFxc
XHtce3xcXFxcXHtce3wkKSkpLywvXig/Oltcc1xTXSo/LS1cfVx9KS8sL14oPzpcKCkvLC9eKD86
XCkpLywvXig/Olx7XHsofik/PikvLC9eKD86XHtceyh+KT8jKS8sL14oPzpce1x7KH4pP1wvKS8s
L14oPzpce1x7KH4pP1xeKS8sL14oPzpce1x7KH4pP1xzKmVsc2VcYikvLC9eKD86XHtceyh+KT9c
eykvLC9eKD86XHtceyh+KT8mKS8sL14oPzpce1x7IS0tKS8sL14oPzpce1x7IVtcc1xTXSo/XH1c
fSkvLC9eKD86XHtceyh+KT8pLywvXig/Oj0pLywvXig/OlwuXC4pLywvXig/OlwuKD89KFs9fn1c
c1wvLildKSkpLywvXig/OltcLy5dKS8sL14oPzpccyspLywvXig/Olx9KH4pP1x9XH0pLywvXig/
Oih+KT9cfVx9KS8sL14oPzoiKFxcWyJdfFteIl0pKiIpLywvXig/OicoXFxbJ118W14nXSkqJykv
LC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1ccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxzKV0p
KSkvLC9eKD86LT9bMC05XSsoPz0oW359XHMpXSkpKS8sL14oPzooW15ccyEiIyUtLFwuXC87LT5A
XFstXF5gXHstfl0rKD89KFs9fn1cc1wvLildKSkpKS8sL14oPzpcW1teXF1dKlxdKS8sL14oPzou
KS8sL14oPzokKS9dOwotICBsZXhlci5jb25kaXRpb25zID0geyJtdSI6eyJydWxlcyI6WzQsNSw2
LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2
LDI3LDI4LDI5LDMwLDMxLDMyXSwiaW5jbHVzaXZlIjpmYWxzZX0sImVtdSI6eyJydWxlcyI6WzJd
LCJpbmNsdXNpdmUiOmZhbHNlfSwiY29tIjp7InJ1bGVzIjpbM10sImluY2x1c2l2ZSI6ZmFsc2V9
LCJJTklUSUFMIjp7InJ1bGVzIjpbMCwxLDMyXSwiaW5jbHVzaXZlIjp0cnVlfX07Ci0gIHJldHVy
biBsZXhlcjt9KSgpCi0gIHBhcnNlci5sZXhlciA9IGxleGVyOwotICBmdW5jdGlvbiBQYXJzZXIg
KCkgeyB0aGlzLnl5ID0ge307IH1QYXJzZXIucHJvdG90eXBlID0gcGFyc2VyO3BhcnNlci5QYXJz
ZXIgPSBQYXJzZXI7Ci0gIHJldHVybiBuZXcgUGFyc2VyOwotICB9KSgpO19fZXhwb3J0c19fID0g
aGFuZGxlYmFyczsKLSAgLyoganNoaW50IGlnbm9yZTplbmQgKi8KLSAgcmV0dXJuIF9fZXhwb3J0
c19fOwotfSkoKTsKLQotLy8gaGFuZGxlYmFycy9jb21waWxlci9iYXNlLmpzCi12YXIgX19tb2R1
bGU4X18gPSAoZnVuY3Rpb24oX19kZXBlbmRlbmN5MV9fLCBfX2RlcGVuZGVuY3kyX18pIHsKLSAg
InVzZSBzdHJpY3QiOwotICB2YXIgX19leHBvcnRzX18gPSB7fTsKLSAgdmFyIHBhcnNlciA9IF9f
ZGVwZW5kZW5jeTFfXzsKLSAgdmFyIEFTVCA9IF9fZGVwZW5kZW5jeTJfXzsKLQotICBfX2V4cG9y
dHNfXy5wYXJzZXIgPSBwYXJzZXI7Ci0KLSAgZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHsKLSAgICAv
LyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGUgQVNUIHdhcyBwYXNzZWQgaW4uCi0g
ICAgaWYoaW5wdXQuY29uc3RydWN0b3IgPT09IEFTVC5Qcm9ncmFtTm9kZSkgeyByZXR1cm4gaW5w
dXQ7IH0KLQotICAgIHBhcnNlci55eSA9IEFTVDsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGlu
cHV0KTsKLSAgfQotCi0gIF9fZXhwb3J0c19fLnBhcnNlID0gcGFyc2U7Ci0gIHJldHVybiBfX2V4
cG9ydHNfXzsKLX0pKF9fbW9kdWxlOV9fLCBfX21vZHVsZTdfXyk7Ci0KLS8vIGhhbmRsZWJhcnMv
Y29tcGlsZXIvY29tcGlsZXIuanMKLXZhciBfX21vZHVsZTEwX18gPSAoZnVuY3Rpb24oX19kZXBl
bmRlbmN5MV9fKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLSAgdmFyIF9fZXhwb3J0c19fID0ge307Ci0g
IHZhciBFeGNlcHRpb24gPSBfX2RlcGVuZGVuY3kxX187Ci0KLSAgZnVuY3Rpb24gQ29tcGlsZXIo
KSB7fQotCi0gIF9fZXhwb3J0c19fLkNvbXBpbGVyID0gQ29tcGlsZXI7Ly8gdGhlIGZvdW5kSGVs
cGVyIHJlZ2lzdGVyIHdpbGwgZGlzYW1iaWd1YXRlIGhlbHBlciBsb29rdXAgZnJvbSBmaW5kaW5n
IGEKLSAgLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVz
dGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2gKLSAgLy8gcmVxdWlyZXMgdGhhdCBjb250ZXh0IGZ1
bmN0aW9ucyBpbiBibG9ja3MgYXJlIGV2YWx1YXRlZCBieSBibG9ja0hlbHBlck1pc3NpbmcsCi0g
IC8vIGFuZCB0aGVuIHByb2NlZWQgYXMgaWYgdGhlIHJlc3VsdGluZyB2YWx1ZSB3YXMgcHJvdmlk
ZWQgdG8gYmxvY2tIZWxwZXJNaXNzaW5nLgotCi0gIENvbXBpbGVyLnByb3RvdHlwZSA9IHsKLSAg
ICBjb21waWxlcjogQ29tcGlsZXIsCi0KLSAgICBkaXNhc3NlbWJsZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICB2YXIgb3Bjb2RlcyA9IHRoaXMub3Bjb2Rlcywgb3Bjb2RlLCBvdXQgPSBbXSwgcGFyYW1z
LCBwYXJhbTsKLQotICAgICAgZm9yICh2YXIgaT0wLCBsPW9wY29kZXMubGVuZ3RoOyBpPGw7IGkr
KykgewotICAgICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldOwotCi0gICAgICAgIGlmIChvcGNvZGUu
b3Bjb2RlID09PSAnREVDTEFSRScpIHsKLSAgICAgICAgICBvdXQucHVzaCgiREVDTEFSRSAiICsg
b3Bjb2RlLm5hbWUgKyAiPSIgKyBvcGNvZGUudmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHBhcmFtcyA9IFtdOwotICAgICAgICAgIGZvciAodmFyIGo9MDsgajxvcGNvZGUuYXJn
cy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgcGFyYW0gPSBvcGNvZGUuYXJnc1tqXTsKLSAg
ICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAg
IHBhcmFtID0gIlwiIiArIHBhcmFtLnJlcGxhY2UoIlxuIiwgIlxcbiIpICsgIlwiIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgb3V0LnB1c2gob3Bjb2RlLm9wY29kZSArICIgIiArIHBhcmFtcy5qb2luKCIgIikp
OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBvdXQuam9pbigiXG4iKTsKLSAg
ICB9LAotCi0gICAgZXF1YWxzOiBmdW5jdGlvbihvdGhlcikgewotICAgICAgdmFyIGxlbiA9IHRo
aXMub3Bjb2Rlcy5sZW5ndGg7Ci0gICAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxl
bikgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgdmFyIG9wY29kZSA9IHRoaXMub3Bjb2Rlc1tp
XSwKLSAgICAgICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTsKLSAgICAgICAg
aWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCBvcGNvZGUuYXJncy5s
ZW5ndGggIT09IG90aGVyT3Bjb2RlLmFyZ3MubGVuZ3RoKSB7Ci0gICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3Bjb2RlLmFyZ3Mu
bGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAob3Bjb2RlLmFyZ3Nbal0gIT09IG90aGVyT3Bj
b2RlLmFyZ3Nbal0pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7Ci0g
ICAgICBpZiAob3RoZXIuY2hpbGRyZW4ubGVuZ3RoICE9PSBsZW4pIHsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAg
ICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7Ci0g
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0sCi0KLSAgICBndWlkOiAwLAotCi0gICAgY29tcGlsZTogZnVuY3Rpb24o
cHJvZ3JhbSwgb3B0aW9ucykgewotICAgICAgdGhpcy5vcGNvZGVzID0gW107Ci0gICAgICB0aGlz
LmNoaWxkcmVuID0gW107Ci0gICAgICB0aGlzLmRlcHRocyA9IHtsaXN0OiBbXX07Ci0gICAgICB0
aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotCi0gICAgICAvLyBUaGVzZSBjaGFuZ2VzIHdpbGwgcHJv
cGFnYXRlIHRvIHRoZSBvdGhlciBjb21waWxlciBjb21wb25lbnRzCi0gICAgICB2YXIga25vd25I
ZWxwZXJzID0gdGhpcy5vcHRpb25zLmtub3duSGVscGVyczsKLSAgICAgIHRoaXMub3B0aW9ucy5r
bm93bkhlbHBlcnMgPSB7Ci0gICAgICAgICdoZWxwZXJNaXNzaW5nJzogdHJ1ZSwKLSAgICAgICAg
J2Jsb2NrSGVscGVyTWlzc2luZyc6IHRydWUsCi0gICAgICAgICdlYWNoJzogdHJ1ZSwKLSAgICAg
ICAgJ2lmJzogdHJ1ZSwKLSAgICAgICAgJ3VubGVzcyc6IHRydWUsCi0gICAgICAgICd3aXRoJzog
dHJ1ZSwKLSAgICAgICAgJ2xvZyc6IHRydWUKLSAgICAgIH07Ci0gICAgICBpZiAoa25vd25IZWxw
ZXJzKSB7Ci0gICAgICAgIGZvciAodmFyIG5hbWUgaW4ga25vd25IZWxwZXJzKSB7Ci0gICAgICAg
ICAgdGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSA9IGtub3duSGVscGVyc1tuYW1lXTsK
LSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7
Ci0gICAgfSwKLQotICAgIGFjY2VwdDogZnVuY3Rpb24obm9kZSkgewotICAgICAgdmFyIHN0cmlw
ID0gbm9kZS5zdHJpcCB8fCB7fSwKLSAgICAgICAgICByZXQ7Ci0gICAgICBpZiAoc3RyaXAubGVm
dCkgewotICAgICAgICB0aGlzLm9wY29kZSgnc3RyaXAnKTsKLSAgICAgIH0KLQotICAgICAgcmV0
ID0gdGhpc1tub2RlLnR5cGVdKG5vZGUpOwotCi0gICAgICBpZiAoc3RyaXAucmlnaHQpIHsKLSAg
ICAgICAgdGhpcy5vcGNvZGUoJ3N0cmlwJyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZXQ7
Ci0gICAgfSwKLQotICAgIHByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHsKLSAgICAgIHZhciBz
dGF0ZW1lbnRzID0gcHJvZ3JhbS5zdGF0ZW1lbnRzOwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1z
dGF0ZW1lbnRzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgdGhpcy5hY2NlcHQoc3RhdGVt
ZW50c1tpXSk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmlzU2ltcGxlID0gbCA9PT0gMTsKLQotICAg
ICAgdGhpcy5kZXB0aHMubGlzdCA9IHRoaXMuZGVwdGhzLmxpc3Quc29ydChmdW5jdGlvbihhLCBi
KSB7Ci0gICAgICAgIHJldHVybiBhIC0gYjsKLSAgICAgIH0pOwotCi0gICAgICByZXR1cm4gdGhp
czsKLSAgICB9LAotCi0gICAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHsKLSAg
ICAgIHZhciByZXN1bHQgPSBuZXcgdGhpcy5jb21waWxlcigpLmNvbXBpbGUocHJvZ3JhbSwgdGhp
cy5vcHRpb25zKTsKLSAgICAgIHZhciBndWlkID0gdGhpcy5ndWlkKyssIGRlcHRoOwotCi0gICAg
ICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7
Ci0KLSAgICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7Ci0KLSAgICAgIGZvcih2YXIg
aT0wLCBsPXJlc3VsdC5kZXB0aHMubGlzdC5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgIGRl
cHRoID0gcmVzdWx0LmRlcHRocy5saXN0W2ldOwotCi0gICAgICAgIGlmKGRlcHRoIDwgMikgeyBj
b250aW51ZTsgfQotICAgICAgICBlbHNlIHsgdGhpcy5hZGREZXB0aChkZXB0aCAtIDEpOyB9Ci0g
ICAgICB9Ci0KLSAgICAgIHJldHVybiBndWlkOwotICAgIH0sCi0KLSAgICBibG9jazogZnVuY3Rp
b24oYmxvY2spIHsKLSAgICAgIHZhciBtdXN0YWNoZSA9IGJsb2NrLm11c3RhY2hlLAotICAgICAg
ICAgIHByb2dyYW0gPSBibG9jay5wcm9ncmFtLAotICAgICAgICAgIGludmVyc2UgPSBibG9jay5p
bnZlcnNlOwotCi0gICAgICBpZiAocHJvZ3JhbSkgewotICAgICAgICBwcm9ncmFtID0gdGhpcy5j
b21waWxlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGludmVyc2UpIHsK
LSAgICAgICAgaW52ZXJzZSA9IHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7Ci0gICAgICB9
Ci0KLSAgICAgIHZhciBzZXhwciA9IG11c3RhY2hlLnNleHByOwotICAgICAgdmFyIHR5cGUgPSB0
aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpOwotCi0gICAgICBpZiAodHlwZSA9PT0gImhlbHBlciIp
IHsKLSAgICAgICAgdGhpcy5oZWxwZXJTZXhwcihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSk7Ci0g
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJzaW1wbGUiKSB7Ci0gICAgICAgIHRoaXMuc2ltcGxl
U2V4cHIoc2V4cHIpOwotCi0gICAgICAgIC8vIG5vdyB0aGF0IHRoZSBzaW1wbGUgbXVzdGFjaGUg
aXMgcmVzb2x2ZWQsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0
aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgCi0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3Jh
bScsIHByb2dyYW0pOwotICAgICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNl
KTsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpOwotICAgICAgICB0aGlzLm9wY29k
ZSgnYmxvY2tWYWx1ZScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5hbWJpZ3VvdXNT
ZXhwcihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSk7Ci0KLSAgICAgICAgLy8gbm93IHRoYXQgdGhl
IHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0bwotICAgICAgICAvLyBldmFs
dWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2AKLSAgICAgICAgdGhpcy5v
cGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNo
UHJvZ3JhbScsIGludmVyc2UpOwotICAgICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7Ci0g
ICAgICAgIHRoaXMub3Bjb2RlKCdhbWJpZ3VvdXNCbG9ja1ZhbHVlJyk7Ci0gICAgICB9Ci0KLSAg
ICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTsKLSAgICB9LAotCi0gICAgaGFzaDogZnVuY3Rpb24o
aGFzaCkgewotICAgICAgdmFyIHBhaXJzID0gaGFzaC5wYWlycywgcGFpciwgdmFsOwotCi0gICAg
ICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTsKLQotICAgICAgZm9yKHZhciBpPTAsIGw9cGFpcnMu
bGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBwYWlyID0gcGFpcnNbaV07Ci0gICAgICAgIHZh
bCAgPSBwYWlyWzFdOwotCi0gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7
Ci0gICAgICAgICAgaWYodmFsLmRlcHRoKSB7Ci0gICAgICAgICAgICB0aGlzLmFkZERlcHRoKHZh
bC5kZXB0aCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0
JywgdmFsLmRlcHRoIHx8IDApOwotICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nUGFy
YW0nLCB2YWwuc3RyaW5nTW9kZVZhbHVlLCB2YWwudHlwZSk7Ci0KLSAgICAgICAgICBpZiAodmFs
LnR5cGUgPT09ICdzZXhwcicpIHsKLSAgICAgICAgICAgIC8vIFN1YmV4cHJlc3Npb25zIGdldCBl
dmFsdWF0ZWQgYW5kIHBhc3NlZCBpbgotICAgICAgICAgICAgLy8gaW4gc3RyaW5nIHBhcmFtcyBt
b2RlLgotICAgICAgICAgICAgdGhpcy5zZXhwcih2YWwpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB0aGlzLmFjY2VwdCh2YWwpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJbMF0pOwotICAgICAgfQotICAgICAg
dGhpcy5vcGNvZGUoJ3BvcEhhc2gnKTsKLSAgICB9LAotCi0gICAgcGFydGlhbDogZnVuY3Rpb24o
cGFydGlhbCkgewotICAgICAgdmFyIHBhcnRpYWxOYW1lID0gcGFydGlhbC5wYXJ0aWFsTmFtZTsK
LSAgICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7Ci0KLSAgICAgIGlmKHBhcnRpYWwuY29udGV4
dCkgewotICAgICAgICB0aGlzLklEKHBhcnRpYWwuY29udGV4dCk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB0aGlzLm9wY29kZSgncHVzaCcsICdkZXB0aDAnKTsKLSAgICAgIH0KLQotICAgICAg
dGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBwYXJ0aWFsTmFtZS5uYW1lKTsKLSAgICAgIHRo
aXMub3Bjb2RlKCdhcHBlbmQnKTsKLSAgICB9LAotCi0gICAgY29udGVudDogZnVuY3Rpb24oY29u
dGVudCkgewotICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnN0cmlu
Zyk7Ci0gICAgfSwKLQotICAgIG11c3RhY2hlOiBmdW5jdGlvbihtdXN0YWNoZSkgewotICAgICAg
dGhpcy5zZXhwcihtdXN0YWNoZS5zZXhwcik7Ci0KLSAgICAgIGlmKG11c3RhY2hlLmVzY2FwZWQg
JiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkgewotICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5k
RXNjYXBlZCcpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcp
OwotICAgICAgfQotICAgIH0sCi0KLSAgICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIs
IHByb2dyYW0sIGludmVyc2UpIHsKLSAgICAgIHZhciBpZCA9IHNleHByLmlkLAotICAgICAgICAg
IG5hbWUgPSBpZC5wYXJ0c1swXSwKLSAgICAgICAgICBpc0Jsb2NrID0gcHJvZ3JhbSAhPSBudWxs
IHx8IGludmVyc2UgIT0gbnVsbDsKLQotICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBp
ZC5kZXB0aCk7Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOwot
ICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7Ci0KLSAgICAgIHRoaXMu
b3Bjb2RlKCdpbnZva2VBbWJpZ3VvdXMnLCBuYW1lLCBpc0Jsb2NrKTsKLSAgICB9LAotCi0gICAg
c2ltcGxlU2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7Ci0gICAgICB2YXIgaWQgPSBzZXhwci5pZDsK
LQotICAgICAgaWYgKGlkLnR5cGUgPT09ICdEQVRBJykgewotICAgICAgICB0aGlzLkRBVEEoaWQp
OwotICAgICAgfSBlbHNlIGlmIChpZC5wYXJ0cy5sZW5ndGgpIHsKLSAgICAgICAgdGhpcy5JRChp
ZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTaW1wbGlmaWVkIElEIGZvciBgdGhpc2AK
LSAgICAgICAgdGhpcy5hZGREZXB0aChpZC5kZXB0aCk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdn
ZXRDb250ZXh0JywgaWQuZGVwdGgpOwotICAgICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQn
KTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScp
OwotICAgIH0sCi0KLSAgICBoZWxwZXJTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGlu
dmVyc2UpIHsKLSAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1z
KHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSwKLSAgICAgICAgICBuYW1lID0gc2V4cHIuaWQucGFy
dHNbMF07Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7Ci0g
ICAgICAgIHRoaXMub3Bjb2RlKCdpbnZva2VLbm93bkhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIG5h
bWUpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkgewot
ICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJZb3Ugc3BlY2lmaWVkIGtub3duSGVscGVyc09u
bHksIGJ1dCB1c2VkIHRoZSB1bmtub3duIGhlbHBlciAiICsgbmFtZSwgc2V4cHIpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5n
dGgsIG5hbWUsIHNleHByLmlzUm9vdCk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHNleHByOiBm
dW5jdGlvbihzZXhwcikgewotICAgICAgdmFyIHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4
cHIpOwotCi0gICAgICBpZiAodHlwZSA9PT0gInNpbXBsZSIpIHsKLSAgICAgICAgdGhpcy5zaW1w
bGVTZXhwcihzZXhwcik7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJoZWxwZXIiKSB7Ci0g
ICAgICAgIHRoaXMuaGVscGVyU2V4cHIoc2V4cHIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
dGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIElEOiBm
dW5jdGlvbihpZCkgewotICAgICAgdGhpcy5hZGREZXB0aChpZC5kZXB0aCk7Ci0gICAgICB0aGlz
Lm9wY29kZSgnZ2V0Q29udGV4dCcsIGlkLmRlcHRoKTsKLQotICAgICAgdmFyIG5hbWUgPSBpZC5w
YXJ0c1swXTsKLSAgICAgIGlmICghbmFtZSkgewotICAgICAgICB0aGlzLm9wY29kZSgncHVzaENv
bnRleHQnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBPbkNv
bnRleHQnLCBpZC5wYXJ0c1swXSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvcih2YXIgaT0xLCBsPWlk
LnBhcnRzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cCcs
IGlkLnBhcnRzW2ldKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgREFUQTogZnVuY3Rpb24oZGF0
YSkgewotICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlOwotICAgICAgaWYgKGRhdGEuaWQu
aXNTY29wZWQgfHwgZGF0YS5pZC5kZXB0aCkgewotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9u
KCdTY29wZWQgZGF0YSByZWZlcmVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkOiAnICsgZGF0YS5vcmln
aW5hbCwgZGF0YSk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJyk7
Ci0gICAgICB2YXIgcGFydHMgPSBkYXRhLmlkLnBhcnRzOwotICAgICAgZm9yKHZhciBpPTAsIGw9
cGFydHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICB0aGlzLm9wY29kZSgnbG9va3VwJywg
cGFydHNbaV0pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBTVFJJTkc6IGZ1bmN0aW9uKHN0cmlu
ZykgewotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcuc3RyaW5nKTsKLSAg
ICB9LAotCi0gICAgSU5URUdFUjogZnVuY3Rpb24oaW50ZWdlcikgewotICAgICAgdGhpcy5vcGNv
ZGUoJ3B1c2hMaXRlcmFsJywgaW50ZWdlci5pbnRlZ2VyKTsKLSAgICB9LAotCi0gICAgQk9PTEVB
TjogZnVuY3Rpb24oYm9vbCkgewotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9v
bC5ib29sKTsKLSAgICB9LAotCi0gICAgY29tbWVudDogZnVuY3Rpb24oKSB7fSwKLQotICAgIC8v
IEhFTFBFUlMKLSAgICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHRoaXMub3Bjb2Rl
cy5wdXNoKHsgb3Bjb2RlOiBuYW1lLCBhcmdzOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkg
fSk7Ci0gICAgfSwKLQotICAgIGRlY2xhcmU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAg
ICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogJ0RFQ0xBUkUnLCBuYW1lOiBuYW1lLCB2YWx1
ZTogdmFsdWUgfSk7Ci0gICAgfSwKLQotICAgIGFkZERlcHRoOiBmdW5jdGlvbihkZXB0aCkgewot
ICAgICAgaWYoZGVwdGggPT09IDApIHsgcmV0dXJuOyB9Ci0KLSAgICAgIGlmKCF0aGlzLmRlcHRo
c1tkZXB0aF0pIHsKLSAgICAgICAgdGhpcy5kZXB0aHNbZGVwdGhdID0gdHJ1ZTsKLSAgICAgICAg
dGhpcy5kZXB0aHMubGlzdC5wdXNoKGRlcHRoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgY2xh
c3NpZnlTZXhwcjogZnVuY3Rpb24oc2V4cHIpIHsKLSAgICAgIHZhciBpc0hlbHBlciAgID0gc2V4
cHIuaXNIZWxwZXI7Ci0gICAgICB2YXIgaXNFbGlnaWJsZSA9IHNleHByLmVsaWdpYmxlSGVscGVy
OwotICAgICAgdmFyIG9wdGlvbnMgICAgPSB0aGlzLm9wdGlvbnM7Ci0KLSAgICAgIC8vIGlmIGFt
YmlndW91cywgd2UgY2FuIHBvc3NpYmx5IHJlc29sdmUgdGhlIGFtYmlndWl0eSBub3cKLSAgICAg
IGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikgewotICAgICAgICB2YXIgbmFtZSA9IHNleHBy
LmlkLnBhcnRzWzBdOwotCi0gICAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkg
ewotICAgICAgICAgIGlzSGVscGVyID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChvcHRpb25z
Lmtub3duSGVscGVyc09ubHkpIHsKLSAgICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlzSGVscGVyKSB7IHJldHVybiAiaGVscGVyIjsg
fQotICAgICAgZWxzZSBpZiAoaXNFbGlnaWJsZSkgeyByZXR1cm4gImFtYmlndW91cyI7IH0KLSAg
ICAgIGVsc2UgeyByZXR1cm4gInNpbXBsZSI7IH0KLSAgICB9LAotCi0gICAgcHVzaFBhcmFtczog
ZnVuY3Rpb24ocGFyYW1zKSB7Ci0gICAgICB2YXIgaSA9IHBhcmFtcy5sZW5ndGgsIHBhcmFtOwot
Ci0gICAgICB3aGlsZShpLS0pIHsKLSAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV07Ci0KLSAgICAg
ICAgaWYodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcykgewotICAgICAgICAgIGlmKHBhcmFtLmRl
cHRoKSB7Ci0gICAgICAgICAgICB0aGlzLmFkZERlcHRoKHBhcmFtLmRlcHRoKTsKLSAgICAgICAg
ICB9Ci0KLSAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhcmFtLmRlcHRoIHx8
IDApOwotICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nUGFyYW0nLCBwYXJhbS5zdHJp
bmdNb2RlVmFsdWUsIHBhcmFtLnR5cGUpOwotCi0gICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09
ICdzZXhwcicpIHsKLSAgICAgICAgICAgIC8vIFN1YmV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQg
YW5kIHBhc3NlZCBpbgotICAgICAgICAgICAgLy8gaW4gc3RyaW5nIHBhcmFtcyBtb2RlLgotICAg
ICAgICAgICAgdGhpcy5zZXhwcihwYXJhbSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHRoaXNbcGFyYW0udHlwZV0ocGFyYW0pOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLQotICAgIHNldHVwRnVsbE11c3RhY2hlUGFyYW1zOiBmdW5jdGlvbihzZXhwciwg
cHJvZ3JhbSwgaW52ZXJzZSkgewotICAgICAgdmFyIHBhcmFtcyA9IHNleHByLnBhcmFtczsKLSAg
ICAgIHRoaXMucHVzaFBhcmFtcyhwYXJhbXMpOwotCi0gICAgICB0aGlzLm9wY29kZSgncHVzaFBy
b2dyYW0nLCBwcm9ncmFtKTsKLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVy
c2UpOwotCi0gICAgICBpZiAoc2V4cHIuaGFzaCkgewotICAgICAgICB0aGlzLmhhc2goc2V4cHIu
aGFzaCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0
aW9uIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGVudikgewotICAgIGlmIChpbnB1dCA9PSBu
dWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LmNvbnN0cnVjdG9yICE9
PSBlbnYuQVNULlByb2dyYW1Ob2RlKSkgewotICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiWW91
IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNv
bXBpbGUuIFlvdSBwYXNzZWQgIiArIGlucHV0KTsKLSAgICB9Ci0KLSAgICBvcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKLSAgICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHsKLSAgICAgIG9wdGlv
bnMuZGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgdmFyIGFzdCA9IGVudi5wYXJzZShpbnB1dCk7
Ci0gICAgdmFyIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBv
cHRpb25zKTsKLSAgICByZXR1cm4gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxl
KGVudmlyb25tZW50LCBvcHRpb25zKTsKLSAgfQotCi0gIF9fZXhwb3J0c19fLnByZWNvbXBpbGUg
PSBwcmVjb21waWxlO2Z1bmN0aW9uIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGVudikgewotICAg
IGlmIChpbnB1dCA9PSBudWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0
LmNvbnN0cnVjdG9yICE9PSBlbnYuQVNULlByb2dyYW1Ob2RlKSkgewotICAgICAgdGhyb3cgbmV3
IEV4Y2VwdGlvbigiWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBI
YW5kbGViYXJzLmNvbXBpbGUuIFlvdSBwYXNzZWQgIiArIGlucHV0KTsKLSAgICB9Ci0KLSAgICBv
cHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkg
ewotICAgICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2YXIgY29tcGlsZWQ7
Ci0KLSAgICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7Ci0gICAgICB2YXIgYXN0ID0gZW52LnBh
cnNlKGlucHV0KTsKLSAgICAgIHZhciBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5j
b21waWxlKGFzdCwgb3B0aW9ucyk7Ci0gICAgICB2YXIgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5K
YXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmlu
ZWQsIHRydWUpOwotICAgICAgcmV0dXJuIGVudi50ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMpOwotICAg
IH0KLQotICAgIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBj
YWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC4KLSAgICByZXR1cm4gZnVuY3Rpb24oY29udGV4dCwgb3B0
aW9ucykgewotICAgICAgaWYgKCFjb21waWxlZCkgewotICAgICAgICBjb21waWxlZCA9IGNvbXBp
bGVJbnB1dCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29u
dGV4dCwgb3B0aW9ucyk7Ci0gICAgfTsKLSAgfQotCi0gIF9fZXhwb3J0c19fLmNvbXBpbGUgPSBj
b21waWxlOwotICByZXR1cm4gX19leHBvcnRzX187Ci19KShfX21vZHVsZTVfXyk7Ci0KLS8vIGhh
bmRsZWJhcnMvY29tcGlsZXIvamF2YXNjcmlwdC1jb21waWxlci5qcwotdmFyIF9fbW9kdWxlMTFf
XyA9IChmdW5jdGlvbihfX2RlcGVuZGVuY3kxX18sIF9fZGVwZW5kZW5jeTJfXykgewotICAidXNl
IHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXzsKLSAgdmFyIENPTVBJTEVSX1JFVklTSU9OID0g
X19kZXBlbmRlbmN5MV9fLkNPTVBJTEVSX1JFVklTSU9OOwotICB2YXIgUkVWSVNJT05fQ0hBTkdF
UyA9IF9fZGVwZW5kZW5jeTFfXy5SRVZJU0lPTl9DSEFOR0VTOwotICB2YXIgbG9nID0gX19kZXBl
bmRlbmN5MV9fLmxvZzsKLSAgdmFyIEV4Y2VwdGlvbiA9IF9fZGVwZW5kZW5jeTJfXzsKLQotICBm
dW5jdGlvbiBMaXRlcmFsKHZhbHVlKSB7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICB9Ci0K
LSAgZnVuY3Rpb24gSmF2YVNjcmlwdENvbXBpbGVyKCkge30KLQotICBKYXZhU2NyaXB0Q29tcGls
ZXIucHJvdG90eXBlID0gewotICAgIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhl
c2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGUKLSAgICAvLyBhbHRlcm5hdGl2ZSBj
b21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3MKLSAg
ICBuYW1lTG9va3VwOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUgLyogLCB0eXBlKi8pIHsKLSAgICAg
IHZhciB3cmFwLAotICAgICAgICAgIHJldDsKLSAgICAgIGlmIChwYXJlbnQuaW5kZXhPZignZGVw
dGgnKSA9PT0gMCkgewotICAgICAgICB3cmFwID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgaWYg
KC9eWzAtOV0rJC8udGVzdChuYW1lKSkgewotICAgICAgICByZXQgPSBwYXJlbnQgKyAiWyIgKyBu
YW1lICsgIl0iOwotICAgICAgfSBlbHNlIGlmIChKYXZhU2NyaXB0Q29tcGlsZXIuaXNWYWxpZEph
dmFTY3JpcHRWYXJpYWJsZU5hbWUobmFtZSkpIHsKLSAgICAgICAgcmV0ID0gcGFyZW50ICsgIi4i
ICsgbmFtZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICByZXQgPSBwYXJlbnQgKyAi
WyciICsgbmFtZSArICInXSI7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh3cmFwKSB7Ci0gICAgICAg
IHJldHVybiAnKCcgKyBwYXJlbnQgKyAnICYmICcgKyByZXQgKyAnKSc7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotICAgIH0sCi0KLSAgICBjb21waWxlcklu
Zm86IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIHJldmlzaW9uID0gQ09NUElMRVJfUkVWSVNJT04s
Ci0gICAgICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTsKLSAgICAg
IHJldHVybiAidGhpcy5jb21waWxlckluZm8gPSBbIityZXZpc2lvbisiLCciK3ZlcnNpb25zKyIn
XTtcbiI7Ci0gICAgfSwKLQotICAgIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzdHJpbmcpIHsK
LSAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7Ci0gICAgICAgIHJldHVybiAi
cmV0dXJuICIgKyBzdHJpbmcgKyAiOyI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4g
ewotICAgICAgICAgIGFwcGVuZFRvQnVmZmVyOiB0cnVlLAotICAgICAgICAgIGNvbnRlbnQ6IHN0
cmluZywKLSAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiAiYnVmZmVyICs9
ICIgKyBzdHJpbmcgKyAiOyI7IH0KLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAg
aW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5xdW90ZWRT
dHJpbmcoIiIpOwotICAgIH0sCi0KLSAgICBuYW1lc3BhY2U6ICJIYW5kbGViYXJzIiwKLSAgICAv
LyBFTkQgUFVCTElDIEFQSQotCi0gICAgY29tcGlsZTogZnVuY3Rpb24oZW52aXJvbm1lbnQsIG9w
dGlvbnMsIGNvbnRleHQsIGFzT2JqZWN0KSB7Ci0gICAgICB0aGlzLmVudmlyb25tZW50ID0gZW52
aXJvbm1lbnQ7Ci0gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICBs
b2coJ2RlYnVnJywgdGhpcy5lbnZpcm9ubWVudC5kaXNhc3NlbWJsZSgpICsgIlxuXG4iKTsKLQot
ICAgICAgdGhpcy5uYW1lID0gdGhpcy5lbnZpcm9ubWVudC5uYW1lOwotICAgICAgdGhpcy5pc0No
aWxkID0gISFjb250ZXh0OwotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7Ci0gICAg
ICAgIHByb2dyYW1zOiBbXSwKLSAgICAgICAgZW52aXJvbm1lbnRzOiBbXSwKLSAgICAgICAgYWxp
YXNlczogeyB9Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnByZWFtYmxlKCk7Ci0KLSAgICAgIHRo
aXMuc3RhY2tTbG90ID0gMDsKLSAgICAgIHRoaXMuc3RhY2tWYXJzID0gW107Ci0gICAgICB0aGlz
LnJlZ2lzdGVycyA9IHsgbGlzdDogW10gfTsKLSAgICAgIHRoaXMuaGFzaGVzID0gW107Ci0gICAg
ICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdOwotICAgICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdOwot
Ci0gICAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7Ci0KLSAg
ICAgIHZhciBvcGNvZGVzID0gZW52aXJvbm1lbnQub3Bjb2Rlcywgb3Bjb2RlOwotCi0gICAgICB0
aGlzLmkgPSAwOwotCi0gICAgICBmb3IodmFyIGw9b3Bjb2Rlcy5sZW5ndGg7IHRoaXMuaTxsOyB0
aGlzLmkrKykgewotICAgICAgICBvcGNvZGUgPSBvcGNvZGVzW3RoaXMuaV07Ci0KLSAgICAgICAg
aWYob3Bjb2RlLm9wY29kZSA9PT0gJ0RFQ0xBUkUnKSB7Ci0gICAgICAgICAgdGhpc1tvcGNvZGUu
bmFtZV0gPSBvcGNvZGUudmFsdWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpc1tv
cGNvZGUub3Bjb2RlXS5hcHBseSh0aGlzLCBvcGNvZGUuYXJncyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBSZXNldCB0aGUgc3RyaXBOZXh0IGZsYWcgaWYgaXQgd2FzIG5vdCBzZXQgYnkgdGhp
cyBvcGVyYXRpb24uCi0gICAgICAgIGlmIChvcGNvZGUub3Bjb2RlICE9PSB0aGlzLnN0cmlwTmV4
dCkgewotICAgICAgICAgIHRoaXMuc3RyaXBOZXh0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotICAgICAgLy8gRmx1c2ggYW55IHRyYWlsaW5nIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBw
ZW5kaW5nLgotICAgICAgdGhpcy5wdXNoU291cmNlKCcnKTsKLQotICAgICAgaWYgKHRoaXMuc3Rh
Y2tTbG90IHx8IHRoaXMuaW5saW5lU3RhY2subGVuZ3RoIHx8IHRoaXMuY29tcGlsZVN0YWNrLmxl
bmd0aCkgewotICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3
aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhp
cy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpOwotICAgIH0sCi0KLSAgICBwcmVhbWJs
ZTogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgb3V0ID0gW107Ci0KLSAgICAgIGlmICghdGhpcy5p
c0NoaWxkKSB7Ci0gICAgICAgIHZhciBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZTsKLQotICAg
ICAgICB2YXIgY29waWVzID0gImhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsICIgKyBuYW1l
c3BhY2UgKyAiLmhlbHBlcnMpOyI7Ci0gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBh
cnRpYWwpIHsgY29waWVzID0gY29waWVzICsgIiBwYXJ0aWFscyA9IHRoaXMubWVyZ2UocGFydGlh
bHMsICIgKyBuYW1lc3BhY2UgKyAiLnBhcnRpYWxzKTsiOyB9Ci0gICAgICAgIGlmICh0aGlzLm9w
dGlvbnMuZGF0YSkgeyBjb3BpZXMgPSBjb3BpZXMgKyAiIGRhdGEgPSBkYXRhIHx8IHt9OyI7IH0K
LSAgICAgICAgb3V0LnB1c2goY29waWVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dC5w
dXNoKCcnKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LmlzU2ltcGxl
KSB7Ci0gICAgICAgIG91dC5wdXNoKCIsIGJ1ZmZlciA9ICIgKyB0aGlzLmluaXRpYWxpemVCdWZm
ZXIoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvdXQucHVzaCgiIik7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIHRyYWNrIHRoZSBsYXN0IGNvbnRleHQgcHVzaGVkIGludG8gcGxhY2UgdG8gYWxs
b3cgc2tpcHBpbmcgdGhlCi0gICAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxk
IGJlIGEgbm9vcAotICAgICAgdGhpcy5sYXN0Q29udGV4dCA9IDA7Ci0gICAgICB0aGlzLnNvdXJj
ZSA9IG91dDsKLSAgICB9LAotCi0gICAgY3JlYXRlRnVuY3Rpb25Db250ZXh0OiBmdW5jdGlvbihh
c09iamVjdCkgewotICAgICAgdmFyIGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlz
LnJlZ2lzdGVycy5saXN0KTsKLQotICAgICAgaWYobG9jYWxzLmxlbmd0aCA+IDApIHsKLSAgICAg
ICAgdGhpcy5zb3VyY2VbMV0gPSB0aGlzLnNvdXJjZVsxXSArICIsICIgKyBsb2NhbHMuam9pbigi
LCAiKTsKLSAgICAgIH0KLQotICAgICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBp
bmdzCi0gICAgICBpZiAoIXRoaXMuaXNDaGlsZCkgewotICAgICAgICBmb3IgKHZhciBhbGlhcyBp
biB0aGlzLmNvbnRleHQuYWxpYXNlcykgewotICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuYWxp
YXNlcy5oYXNPd25Qcm9wZXJ0eShhbGlhcykpIHsKLSAgICAgICAgICAgIHRoaXMuc291cmNlWzFd
ID0gdGhpcy5zb3VyY2VbMV0gKyAnLCAnICsgYWxpYXMgKyAnPScgKyB0aGlzLmNvbnRleHQuYWxp
YXNlc1thbGlhc107Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlm
ICh0aGlzLnNvdXJjZVsxXSkgewotICAgICAgICB0aGlzLnNvdXJjZVsxXSA9ICJ2YXIgIiArIHRo
aXMuc291cmNlWzFdLnN1YnN0cmluZygyKSArICI7IjsKLSAgICAgIH0KLQotICAgICAgLy8gTWVy
Z2UgY2hpbGRyZW4KLSAgICAgIGlmICghdGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIHRoaXMuc291
cmNlWzFdICs9ICdcbicgKyB0aGlzLmNvbnRleHQucHJvZ3JhbXMuam9pbignXG4nKSArICdcbic7
Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgewotICAg
ICAgICB0aGlzLnB1c2hTb3VyY2UoInJldHVybiBidWZmZXI7Iik7Ci0gICAgICB9Ci0KLSAgICAg
IHZhciBwYXJhbXMgPSB0aGlzLmlzQ2hpbGQgPyBbImRlcHRoMCIsICJkYXRhIl0gOiBbIkhhbmRs
ZWJhcnMiLCAiZGVwdGgwIiwgImhlbHBlcnMiLCAicGFydGlhbHMiLCAiZGF0YSJdOwotCi0gICAg
ICBmb3IodmFyIGk9MCwgbD10aGlzLmVudmlyb25tZW50LmRlcHRocy5saXN0Lmxlbmd0aDsgaTxs
OyBpKyspIHsKLSAgICAgICAgcGFyYW1zLnB1c2goImRlcHRoIiArIHRoaXMuZW52aXJvbm1lbnQu
ZGVwdGhzLmxpc3RbaV0pOwotICAgICAgfQotCi0gICAgICAvLyBQZXJmb3JtIGEgc2Vjb25kIHBh
c3Mgb3ZlciB0aGUgb3V0cHV0IHRvIG1lcmdlIGNvbnRlbnQgd2hlbiBwb3NzaWJsZQotICAgICAg
dmFyIHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UoKTsKLQotICAgICAgaWYgKCF0aGlzLmlzQ2hp
bGQpIHsKLSAgICAgICAgc291cmNlID0gdGhpcy5jb21waWxlckluZm8oKStzb3VyY2U7Ci0gICAg
ICB9Ci0KLSAgICAgIGlmIChhc09iamVjdCkgewotICAgICAgICBwYXJhbXMucHVzaChzb3VyY2Up
OwotCi0gICAgICAgIHJldHVybiBGdW5jdGlvbi5hcHBseSh0aGlzLCBwYXJhbXMpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdmFyIGZ1bmN0aW9uU291cmNlID0gJ2Z1bmN0aW9uICcgKyAodGhp
cy5uYW1lIHx8ICcnKSArICcoJyArIHBhcmFtcy5qb2luKCcsJykgKyAnKSB7XG4gICcgKyBzb3Vy
Y2UgKyAnfSc7Ci0gICAgICAgIGxvZygnZGVidWcnLCBmdW5jdGlvblNvdXJjZSArICJcblxuIik7
Ci0gICAgICAgIHJldHVybiBmdW5jdGlvblNvdXJjZTsKLSAgICAgIH0KLSAgICB9LAotICAgIG1l
cmdlU291cmNlOiBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFdBUk46IFdlIGFyZSBub3QgaGFuZGxp
bmcgdGhlIGNhc2Ugd2hlcmUgYnVmZmVyIGlzIHN0aWxsIHBvcHVsYXRlZCBhcyB0aGUgc291cmNl
IHNob3VsZAotICAgICAgLy8gbm90IGhhdmUgYnVmZmVyIGFwcGVuZCBvcGVyYXRpb25zIGFzIHRo
ZWlyIGZpbmFsIGFjdGlvbi4KLSAgICAgIHZhciBzb3VyY2UgPSAnJywKLSAgICAgICAgICBidWZm
ZXI7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwg
bGVuOyBpKyspIHsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNvdXJjZVtpXTsKLSAgICAgICAg
aWYgKGxpbmUuYXBwZW5kVG9CdWZmZXIpIHsKLSAgICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAg
ICAgICAgICBidWZmZXIgPSBidWZmZXIgKyAnXG4gICAgKyAnICsgbGluZS5jb250ZW50OwotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXIgPSBsaW5lLmNvbnRlbnQ7Ci0gICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAg
ICAgICAgIHNvdXJjZSArPSAnYnVmZmVyICs9ICcgKyBidWZmZXIgKyAnO1xuICAnOwotICAgICAg
ICAgICAgYnVmZmVyID0gdW5kZWZpbmVkOwotICAgICAgICAgIH0KLSAgICAgICAgICBzb3VyY2Ug
Kz0gbGluZSArICdcbiAgJzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHNvdXJj
ZTsKLSAgICB9LAotCi0gICAgLy8gW2Jsb2NrVmFsdWVdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFj
aywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZQotICAgIC8vIE9uIHN0YWNr
LCBhZnRlcjogcmV0dXJuIHZhbHVlIG9mIGJsb2NrSGVscGVyTWlzc2luZwotICAgIC8vCi0gICAg
Ly8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBm
b3JtCi0gICAgLy8gYHt7I2Zvb319Li4ue3svZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBg
Zm9vYCwgYW5kCi0gICAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0
IG9mIHByb3Blcmx5Ci0gICAgLy8gaW52b2tpbmcgYmxvY2tIZWxwZXJNaXNzaW5nLgotICAgIGJs
b2NrVmFsdWU6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuYmxvY2tI
ZWxwZXJNaXNzaW5nID0gJ2hlbHBlcnMuYmxvY2tIZWxwZXJNaXNzaW5nJzsKLQotICAgICAgdmFy
IHBhcmFtcyA9IFsiZGVwdGgwIl07Ci0gICAgICB0aGlzLnNldHVwUGFyYW1zKDAsIHBhcmFtcyk7
Ci0KLSAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGZ1bmN0aW9uKGN1cnJlbnQpIHsKLSAgICAgICAg
cGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTsKLSAgICAgICAgcmV0dXJuICJibG9ja0hlbHBl
ck1pc3NpbmcuY2FsbCgiICsgcGFyYW1zLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICB9KTsKLSAg
ICB9LAotCi0gICAgLy8gW2FtYmlndW91c0Jsb2NrVmFsdWVdCi0gICAgLy8KLSAgICAvLyBPbiBz
dGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZQotICAgIC8vIENvbXBp
bGVyIHZhbHVlLCBiZWZvcmU6IGxhc3RIZWxwZXI9dmFsdWUgb2YgbGFzdCBmb3VuZCBoZWxwZXIs
IGlmIGFueQotICAgIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBh
cyBbYmxvY2tWYWx1ZV0KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZh
bHVlCi0gICAgYW1iaWd1b3VzQmxvY2tWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmNv
bnRleHQuYWxpYXNlcy5ibG9ja0hlbHBlck1pc3NpbmcgPSAnaGVscGVycy5ibG9ja0hlbHBlck1p
c3NpbmcnOwotCi0gICAgICB2YXIgcGFyYW1zID0gWyJkZXB0aDAiXTsKLSAgICAgIHRoaXMuc2V0
dXBQYXJhbXMoMCwgcGFyYW1zKTsKLQotICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNr
KCk7Ci0gICAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpOwotCi0gICAgICB0aGlzLnB1
c2hTb3VyY2UoImlmICghIiArIHRoaXMubGFzdEhlbHBlciArICIpIHsgIiArIGN1cnJlbnQgKyAi
ID0gYmxvY2tIZWxwZXJNaXNzaW5nLmNhbGwoIiArIHBhcmFtcy5qb2luKCIsICIpICsgIik7IH0i
KTsKLSAgICB9LAotCi0gICAgLy8gW2FwcGVuZENvbnRlbnRdCi0gICAgLy8KLSAgICAvLyBPbiBz
dGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgotICAgIC8vCi0g
ICAgLy8gQXBwZW5kcyB0aGUgc3RyaW5nIHZhbHVlIG9mIGBjb250ZW50YCB0byB0aGUgY3VycmVu
dCBidWZmZXIKLSAgICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7Ci0gICAgICBp
ZiAodGhpcy5wZW5kaW5nQ29udGVudCkgewotICAgICAgICBjb250ZW50ID0gdGhpcy5wZW5kaW5n
Q29udGVudCArIGNvbnRlbnQ7Ci0gICAgICB9Ci0gICAgICBpZiAodGhpcy5zdHJpcE5leHQpIHsK
LSAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXlxzKy8sICcnKTsKLSAgICAgIH0K
LQotICAgICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfSwKLQotICAgIC8v
IFtzdHJpcF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9u
IHN0YWNrLCBhZnRlcjogLi4uCi0gICAgLy8KLSAgICAvLyBSZW1vdmVzIGFueSB0cmFpbGluZyB3
aGl0ZXNwYWNlIGZyb20gdGhlIHByaW9yIGNvbnRlbnQgbm9kZSBhbmQgZmxhZ3MKLSAgICAvLyB0
aGUgbmV4dCBvcGVyYXRpb24gZm9yIHN0cmlwcGluZyBpZiBpdCBpcyBhIGNvbnRlbnQgbm9kZS4K
LSAgICBzdHJpcDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkg
ewotICAgICAgICB0aGlzLnBlbmRpbmdDb250ZW50ID0gdGhpcy5wZW5kaW5nQ29udGVudC5yZXBs
YWNlKC9ccyskLywgJycpOwotICAgICAgfQotICAgICAgdGhpcy5zdHJpcE5leHQgPSAnc3RyaXAn
OwotICAgIH0sCi0KLSAgICAvLyBbYXBwZW5kXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJl
Zm9yZTogdmFsdWUsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uCi0gICAgLy8KLSAg
ICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1
cnJlbnQgYnVmZmVyLgotICAgIC8vCi0gICAgLy8gSWYgYHZhbHVlYCBpcyB0cnV0aHksIG9yIDAs
IGl0IGlzIGNvZXJjZWQgaW50byBhIHN0cmluZyBhbmQgYXBwZW5kZWQKLSAgICAvLyBPdGhlcndp
c2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWQKLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgLy8gRm9yY2UgYW55dGhpbmcgdGhhdCBpcyBpbmxpbmVkIG9udG8gdGhlIHN0YWNr
IHNvIHdlIGRvbid0IGhhdmUgZHVwbGljYXRpb24KLSAgICAgIC8vIHdoZW4gd2UgZXhhbWluZSBs
b2NhbAotICAgICAgdGhpcy5mbHVzaElubGluZSgpOwotICAgICAgdmFyIGxvY2FsID0gdGhpcy5w
b3BTdGFjaygpOwotICAgICAgdGhpcy5wdXNoU291cmNlKCJpZigiICsgbG9jYWwgKyAiIHx8ICIg
KyBsb2NhbCArICIgPT09IDApIHsgIiArIHRoaXMuYXBwZW5kVG9CdWZmZXIobG9jYWwpICsgIiB9
Iik7Ci0gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgewotICAgICAgICB0aGlz
LnB1c2hTb3VyY2UoImVsc2UgeyAiICsgdGhpcy5hcHBlbmRUb0J1ZmZlcigiJyciKSArICIgfSIp
OwotICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBbYXBwZW5kRXNjYXBlZF0KLSAgICAvLwotICAg
IC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6
IC4uLgotICAgIC8vCi0gICAgLy8gRXNjYXBlIGB2YWx1ZWAgYW5kIGFwcGVuZCBpdCB0byB0aGUg
YnVmZmVyCi0gICAgYXBwZW5kRXNjYXBlZDogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmNvbnRl
eHQuYWxpYXNlcy5lc2NhcGVFeHByZXNzaW9uID0gJ3RoaXMuZXNjYXBlRXhwcmVzc2lvbic7Ci0K
LSAgICAgIHRoaXMucHVzaFNvdXJjZSh0aGlzLmFwcGVuZFRvQnVmZmVyKCJlc2NhcGVFeHByZXNz
aW9uKCIgKyB0aGlzLnBvcFN0YWNrKCkgKyAiKSIpKTsKLSAgICB9LAotCi0gICAgLy8gW2dldENv
bnRleHRdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBz
dGFjaywgYWZ0ZXI6IC4uLgotICAgIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRl
eHQ9ZGVwdGgKLSAgICAvLwotICAgIC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIGBsYXN0Q29udGV4
dGAgY29tcGlsZXIgdmFsdWUgdG8gdGhlIGRlcHRoCi0gICAgZ2V0Q29udGV4dDogZnVuY3Rpb24o
ZGVwdGgpIHsKLSAgICAgIGlmKHRoaXMubGFzdENvbnRleHQgIT09IGRlcHRoKSB7Ci0gICAgICAg
IHRoaXMubGFzdENvbnRleHQgPSBkZXB0aDsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2xv
b2t1cE9uQ29udGV4dF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAg
IC8vIE9uIHN0YWNrLCBhZnRlcjogY3VycmVudENvbnRleHRbbmFtZV0sIC4uLgotICAgIC8vCi0g
ICAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0
IGFuZCBwdXNoZXMKLSAgICAvLyBpdCBvbnRvIHRoZSBzdGFjay4KLSAgICBsb29rdXBPbkNvbnRl
eHQ6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHRoaXMucHVzaCh0aGlzLm5hbWVMb29rdXAoJ2Rl
cHRoJyArIHRoaXMubGFzdENvbnRleHQsIG5hbWUsICdjb250ZXh0JykpOwotICAgIH0sCi0KLSAg
ICAvLyBbcHVzaENvbnRleHRdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4K
LSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0LCAuLi4KLSAgICAvLwotICAg
IC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFj
ay4KLSAgICBwdXNoQ29udGV4dDogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xp
dGVyYWwoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRleHQpOwotICAgIH0sCi0KLSAgICAvLyBbcmVz
b2x2ZVBvc3NpYmxlTGFtYmRhXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFs
dWUsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzb2x2ZWQgdmFsdWUsIC4uLgotICAg
IC8vCi0gICAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhl
IHN0YWNrIGJ5Ci0gICAgLy8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgbGFtYmRhCi0gICAgcmVz
b2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuY29udGV4dC5hbGlh
c2VzLmZ1bmN0aW9uVHlwZSA9ICciZnVuY3Rpb24iJzsKLQotICAgICAgdGhpcy5yZXBsYWNlU3Rh
Y2soZnVuY3Rpb24oY3VycmVudCkgewotICAgICAgICByZXR1cm4gInR5cGVvZiAiICsgY3VycmVu
dCArICIgPT09IGZ1bmN0aW9uVHlwZSA/ICIgKyBjdXJyZW50ICsgIi5hcHBseShkZXB0aDApIDog
IiArIGN1cnJlbnQ7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLy8gW2xvb2t1cF0KLSAgICAv
LwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4KLSAgICAvLyBPbiBzdGFjaywg
YWZ0ZXI6IHZhbHVlW25hbWVdLCAuLi4KLSAgICAvLwotICAgIC8vIFJlcGxhY2UgdGhlIHZhbHVl
IG9uIHRoZSBzdGFjayB3aXRoIHRoZSByZXN1bHQgb2YgbG9va2luZwotICAgIC8vIHVwIGBuYW1l
YCBvbiBgdmFsdWVgCi0gICAgbG9va3VwOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB0aGlzLnJl
cGxhY2VTdGFjayhmdW5jdGlvbihjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50ICsg
IiA9PSBudWxsIHx8ICIgKyBjdXJyZW50ICsgIiA9PT0gZmFsc2UgPyAiICsgY3VycmVudCArICIg
OiAiICsgdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIG5hbWUsICdjb250ZXh0Jyk7Ci0gICAgICB9
KTsKLSAgICB9LAotCi0gICAgLy8gW2xvb2t1cERhdGFdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFj
aywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGRhdGEsIC4uLgotICAgIC8v
Ci0gICAgLy8gUHVzaCB0aGUgZGF0YSBsb29rdXAgb3BlcmF0b3IKLSAgICBsb29rdXBEYXRhOiBm
dW5jdGlvbigpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnZGF0YScpOwotICAgIH0s
Ci0KLSAgICAvLyBbcHVzaFN0cmluZ1BhcmFtXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJl
Zm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0
LCAuLi4KLSAgICAvLwotICAgIC8vIFRoaXMgb3Bjb2RlIGlzIGRlc2lnbmVkIGZvciB1c2UgaW4g
c3RyaW5nIG1vZGUsIHdoaWNoCi0gICAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBh
IHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0cwotICAgIC8vIGRlcHRoIHJhdGhlciB0aGFuIHJlc29s
dmluZyBpdCBpbW1lZGlhdGVseS4KLSAgICBwdXNoU3RyaW5nUGFyYW06IGZ1bmN0aW9uKHN0cmlu
ZywgdHlwZSkgewotICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkZXB0aCcgKyB0aGlzLmxh
c3RDb250ZXh0KTsKLQotICAgICAgdGhpcy5wdXNoU3RyaW5nKHR5cGUpOwotCi0gICAgICAvLyBJ
ZiBpdCdzIGEgc3ViZXhwcmVzc2lvbiwgdGhlIHN0cmluZyByZXN1bHQKLSAgICAgIC8vIHdpbGwg
YmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLgotICAgICAgaWYgKHR5cGUgIT09ICdzZXhwcicp
IHsKLSAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAg
dGhpcy5wdXNoU3RyaW5nKHN0cmluZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhp
cy5wdXNoU3RhY2tMaXRlcmFsKHN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAot
Ci0gICAgZW1wdHlIYXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJh
bCgne30nKTsKLQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAg
ICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoQ29udGV4dHMKLSAgICAgICAgdGhpcy5wdXNoKCd7
fScpOyAvLyBoYXNoVHlwZXMKLSAgICAgIH0KLSAgICB9LAotICAgIHB1c2hIYXNoOiBmdW5jdGlv
bigpIHsKLSAgICAgIGlmICh0aGlzLmhhc2gpIHsKLSAgICAgICAgdGhpcy5oYXNoZXMucHVzaCh0
aGlzLmhhc2gpOwotICAgICAgfQotICAgICAgdGhpcy5oYXNoID0ge3ZhbHVlczogW10sIHR5cGVz
OiBbXSwgY29udGV4dHM6IFtdfTsKLSAgICB9LAotICAgIHBvcEhhc2g6IGZ1bmN0aW9uKCkgewot
ICAgICAgdmFyIGhhc2ggPSB0aGlzLmhhc2g7Ci0gICAgICB0aGlzLmhhc2ggPSB0aGlzLmhhc2hl
cy5wb3AoKTsKLQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAg
ICAgdGhpcy5wdXNoKCd7JyArIGhhc2guY29udGV4dHMuam9pbignLCcpICsgJ30nKTsKLSAgICAg
ICAgdGhpcy5wdXNoKCd7JyArIGhhc2gudHlwZXMuam9pbignLCcpICsgJ30nKTsKLSAgICAgIH0K
LQotICAgICAgdGhpcy5wdXNoKCd7XG4gICAgJyArIGhhc2gudmFsdWVzLmpvaW4oJyxcbiAgICAn
KSArICdcbiAgfScpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaFN0cmluZ10KLSAgICAvLwotICAg
IC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcXVvdGVk
U3RyaW5nKHN0cmluZyksIC4uLgotICAgIC8vCi0gICAgLy8gUHVzaCBhIHF1b3RlZCB2ZXJzaW9u
IG9mIGBzdHJpbmdgIG9udG8gdGhlIHN0YWNrCi0gICAgcHVzaFN0cmluZzogZnVuY3Rpb24oc3Ry
aW5nKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3Ry
aW5nKSk7Ci0gICAgfSwKLQotICAgIC8vIFtwdXNoXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ss
IGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiBleHByLCAuLi4KLSAgICAvLwot
ICAgIC8vIFB1c2ggYW4gZXhwcmVzc2lvbiBvbnRvIHRoZSBzdGFjawotICAgIHB1c2g6IGZ1bmN0
aW9uKGV4cHIpIHsKLSAgICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTsKLSAgICAgIHJl
dHVybiBleHByOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaExpdGVyYWxdCi0gICAgLy8KLSAgICAv
LyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHZhbHVlLCAu
Li4KLSAgICAvLwotICAgIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9w
ZXJhdGlvbiBwcmV2ZW50cwotICAgIC8vIHRoZSBjb21waWxlciBmcm9tIGNyZWF0aW5nIGEgdGVt
cG9yYXJ5IHZhcmlhYmxlIHRvIGhvbGQKLSAgICAvLyBpdC4KLSAgICBwdXNoTGl0ZXJhbDogZnVu
Y3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh2YWx1ZSk7Ci0gICAg
fSwKLQotICAgIC8vIFtwdXNoUHJvZ3JhbV0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZv
cmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uCi0gICAg
Ly8KLSAgICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0YWNrLiBUaGlz
IHRha2VzCi0gICAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBh
IHJ1bnRpbWUtYWNjZXNzaWJsZQotICAgIC8vIGV4cHJlc3Npb24uCi0gICAgcHVzaFByb2dyYW06
IGZ1bmN0aW9uKGd1aWQpIHsKLSAgICAgIGlmIChndWlkICE9IG51bGwpIHsKLSAgICAgICAgdGhp
cy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucHJvZ3JhbUV4cHJlc3Npb24oZ3VpZCkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICAvLyBbaW52b2tlSGVscGVyXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ss
IGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi4KLSAgICAvLyBP
biBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvbgotICAgIC8vCi0gICAg
Ly8gUG9wcyBvZmYgdGhlIGhlbHBlcidzIHBhcmFtZXRlcnMsIGludm9rZXMgdGhlIGhlbHBlciwK
LSAgICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3Rh
Y2suCi0gICAgLy8KLSAgICAvLyBJZiB0aGUgaGVscGVyIGlzIG5vdCBmb3VuZCwgYGhlbHBlck1p
c3NpbmdgIGlzIGNhbGxlZC4KLSAgICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwg
bmFtZSwgaXNSb290KSB7Ci0gICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5oZWxwZXJNaXNzaW5n
ID0gJ2hlbHBlcnMuaGVscGVyTWlzc2luZyc7Ci0gICAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxw
ZXInKTsKLQotICAgICAgdmFyIGhlbHBlciA9IHRoaXMubGFzdEhlbHBlciA9IHRoaXMuc2V0dXBI
ZWxwZXIocGFyYW1TaXplLCBuYW1lLCB0cnVlKTsKLSAgICAgIHZhciBub25IZWxwZXIgPSB0aGlz
Lm5hbWVMb29rdXAoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRleHQsIG5hbWUsICdjb250ZXh0Jyk7
Ci0KLSAgICAgIHZhciBsb29rdXAgPSAnaGVscGVyID0gJyArIGhlbHBlci5uYW1lICsgJyB8fCAn
ICsgbm9uSGVscGVyOwotICAgICAgaWYgKGhlbHBlci5wYXJhbXNJbml0KSB7Ci0gICAgICAgIGxv
b2t1cCArPSAnLCcgKyBoZWxwZXIucGFyYW1zSW5pdDsKLSAgICAgIH0KLQotICAgICAgdGhpcy5w
dXNoKAotICAgICAgICAnKCcKLSAgICAgICAgICArIGxvb2t1cAotICAgICAgICAgICsgJyxoZWxw
ZXIgJwotICAgICAgICAgICAgKyAnPyBoZWxwZXIuY2FsbCgnICsgaGVscGVyLmNhbGxQYXJhbXMg
KyAnKSAnCi0gICAgICAgICAgICArICc6IGhlbHBlck1pc3NpbmcuY2FsbCgnICsgaGVscGVyLmhl
bHBlck1pc3NpbmdQYXJhbXMgKyAnKSknKTsKLQotICAgICAgLy8gQWx3YXlzIGZsdXNoIHN1YmV4
cHJlc3Npb25zLiBUaGlzIGlzIGJvdGggdG8gcHJldmVudCB0aGUgY29tcG91bmRpbmcgc2l6ZSBp
c3N1ZSB0aGF0Ci0gICAgICAvLyBvY2N1cnMgd2hlbiB0aGUgY29kZSBoYXMgdG8gYmUgZHVwbGlj
YXRlZCBmb3IgaW5saW5pbmcgYW5kIGFsc28gdG8gcHJldmVudCBlcnJvcnMKLSAgICAgIC8vIGR1
ZSB0byB0aGUgaW5jb3JyZWN0IG9wdGlvbnMgb2JqZWN0IGJlaW5nIHBhc3NlZCBkdWUgdG8gdGhl
IHNoYXJlZCByZWdpc3Rlci4KLSAgICAgIGlmICghaXNSb290KSB7Ci0gICAgICAgIHRoaXMuZmx1
c2hJbmxpbmUoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2ludm9rZUtub3duSGVscGVy
XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3Jh
bSwgcGFyYW1zLi4uLCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxw
ZXIgaW52b2NhdGlvbgotICAgIC8vCi0gICAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVu
IHRoZSBoZWxwZXIgaXMga25vd24gdG8gZXhpc3QsCi0gICAgLy8gc28gYSBgaGVscGVyTWlzc2lu
Z2AgZmFsbGJhY2sgaXMgbm90IHJlcXVpcmVkLgotICAgIGludm9rZUtub3duSGVscGVyOiBmdW5j
dGlvbihwYXJhbVNpemUsIG5hbWUpIHsKLSAgICAgIHZhciBoZWxwZXIgPSB0aGlzLnNldHVwSGVs
cGVyKHBhcmFtU2l6ZSwgbmFtZSk7Ci0gICAgICB0aGlzLnB1c2goaGVscGVyLm5hbWUgKyAiLmNh
bGwoIiArIGhlbHBlci5jYWxsUGFyYW1zICsgIikiKTsKLSAgICB9LAotCi0gICAgLy8gW2ludm9r
ZUFtYmlndW91c10KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVy
c2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1
bHQgb2YgZGlzYW1iaWd1YXRpb24KLSAgICAvLwotICAgIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVz
ZWQgd2hlbiBhbiBleHByZXNzaW9uIGxpa2UgYHt7Zm9vfX1gCi0gICAgLy8gaXMgcHJvdmlkZWQs
IGJ1dCB3ZSBkb24ndCBrbm93IGF0IGNvbXBpbGUtdGltZSB3aGV0aGVyIGl0Ci0gICAgLy8gaXMg
YSBoZWxwZXIgb3IgYSBwYXRoLgotICAgIC8vCi0gICAgLy8gVGhpcyBvcGVyYXRpb24gZW1pdHMg
bW9yZSBjb2RlIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMsCi0gICAgLy8gYW5kIGNhbiBiZSBhdm9p
ZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZAotICAgIC8vIGBrbm93bkhlbHBl
cnNPbmx5YCBmbGFncyBhdCBjb21waWxlLXRpbWUuCi0gICAgaW52b2tlQW1iaWd1b3VzOiBmdW5j
dGlvbihuYW1lLCBoZWxwZXJDYWxsKSB7Ci0gICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5mdW5j
dGlvblR5cGUgPSAnImZ1bmN0aW9uIic7Ci0gICAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXIn
KTsKLQotICAgICAgdGhpcy5lbXB0eUhhc2goKTsKLSAgICAgIHZhciBoZWxwZXIgPSB0aGlzLnNl
dHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpOwotCi0gICAgICB2YXIgaGVscGVyTmFtZSA9
IHRoaXMubGFzdEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdoZWxw
ZXInKTsKLQotICAgICAgdmFyIG5vbkhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnZGVwdGgnICsg
dGhpcy5sYXN0Q29udGV4dCwgbmFtZSwgJ2NvbnRleHQnKTsKLSAgICAgIHZhciBuZXh0U3RhY2sg
PSB0aGlzLm5leHRTdGFjaygpOwotCi0gICAgICBpZiAoaGVscGVyLnBhcmFtc0luaXQpIHsKLSAg
ICAgICAgdGhpcy5wdXNoU291cmNlKGhlbHBlci5wYXJhbXNJbml0KTsKLSAgICAgIH0KLSAgICAg
IHRoaXMucHVzaFNvdXJjZSgnaWYgKGhlbHBlciA9ICcgKyBoZWxwZXJOYW1lICsgJykgeyAnICsg
bmV4dFN0YWNrICsgJyA9IGhlbHBlci5jYWxsKCcgKyBoZWxwZXIuY2FsbFBhcmFtcyArICcpOyB9
Jyk7Ci0gICAgICB0aGlzLnB1c2hTb3VyY2UoJ2Vsc2UgeyBoZWxwZXIgPSAnICsgbm9uSGVscGVy
ICsgJzsgJyArIG5leHRTdGFjayArICcgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUg
PyBoZWxwZXIuY2FsbCgnICsgaGVscGVyLmNhbGxQYXJhbXMgKyAnKSA6IGhlbHBlcjsgfScpOwot
ICAgIH0sCi0KLSAgICAvLyBbaW52b2tlUGFydGlhbF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNr
LCBiZWZvcmU6IGNvbnRleHQsIC4uLgotICAgIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2Yg
cGFydGlhbCBpbnZvY2F0aW9uCi0gICAgLy8KLSAgICAvLyBUaGlzIG9wZXJhdGlvbiBwb3BzIG9m
ZiBhIGNvbnRleHQsIGludm9rZXMgYSBwYXJ0aWFsIHdpdGggdGhhdCBjb250ZXh0LAotICAgIC8v
IGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLgotICAgIGludm9r
ZVBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHZhciBwYXJhbXMgPSBbdGhpcy5uYW1l
TG9va3VwKCdwYXJ0aWFscycsIG5hbWUsICdwYXJ0aWFsJyksICInIiArIG5hbWUgKyAiJyIsIHRo
aXMucG9wU3RhY2soKSwgImhlbHBlcnMiLCAicGFydGlhbHMiXTsKLQotICAgICAgaWYgKHRoaXMu
b3B0aW9ucy5kYXRhKSB7Ci0gICAgICAgIHBhcmFtcy5wdXNoKCJkYXRhIik7Ci0gICAgICB9Ci0K
LSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhpcyI7Ci0gICAgICB0aGlzLnB1
c2goInNlbGYuaW52b2tlUGFydGlhbCgiICsgcGFyYW1zLmpvaW4oIiwgIikgKyAiKSIpOwotICAg
IH0sCi0KLSAgICAvLyBbYXNzaWduVG9IYXNoXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJl
Zm9yZTogdmFsdWUsIGhhc2gsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogaGFzaCwgLi4u
Ci0gICAgLy8KLSAgICAvLyBQb3BzIGEgdmFsdWUgYW5kIGhhc2ggb2ZmIHRoZSBzdGFjaywgYXNz
aWducyBgaGFzaFtrZXldID0gdmFsdWVgCi0gICAgLy8gYW5kIHB1c2hlcyB0aGUgaGFzaCBiYWNr
IG9udG8gdGhlIHN0YWNrLgotICAgIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7Ci0gICAg
ICB2YXIgdmFsdWUgPSB0aGlzLnBvcFN0YWNrKCksCi0gICAgICAgICAgY29udGV4dCwKLSAgICAg
ICAgICB0eXBlOwotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcykgewotICAg
ICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpOwotICAgICAgICBjb250ZXh0ID0gdGhpcy5wb3BT
dGFjaygpOwotICAgICAgfQotCi0gICAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaDsKLSAgICAgIGlm
IChjb250ZXh0KSB7Ci0gICAgICAgIGhhc2guY29udGV4dHMucHVzaCgiJyIgKyBrZXkgKyAiJzog
IiArIGNvbnRleHQpOwotICAgICAgfQotICAgICAgaWYgKHR5cGUpIHsKLSAgICAgICAgaGFzaC50
eXBlcy5wdXNoKCInIiArIGtleSArICInOiAiICsgdHlwZSk7Ci0gICAgICB9Ci0gICAgICBoYXNo
LnZhbHVlcy5wdXNoKCInIiArIGtleSArICInOiAoIiArIHZhbHVlICsgIikiKTsKLSAgICB9LAot
Ci0gICAgLy8gSEVMUEVSUwotCi0gICAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlciwKLQot
ICAgIGNvbXBpbGVDaGlsZHJlbjogZnVuY3Rpb24oZW52aXJvbm1lbnQsIG9wdGlvbnMpIHsKLSAg
ICAgIHZhciBjaGlsZHJlbiA9IGVudmlyb25tZW50LmNoaWxkcmVuLCBjaGlsZCwgY29tcGlsZXI7
Ci0KLSAgICAgIGZvcih2YXIgaT0wLCBsPWNoaWxkcmVuLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAg
ICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgY29tcGlsZXIgPSBuZXcgdGhpcy5j
b21waWxlcigpOwotCi0gICAgICAgIHZhciBpbmRleCA9IHRoaXMubWF0Y2hFeGlzdGluZ1Byb2dy
YW0oY2hpbGQpOwotCi0gICAgICAgIGlmIChpbmRleCA9PSBudWxsKSB7Ci0gICAgICAgICAgdGhp
cy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAgICAgLy8gUGxhY2Vob2xkZXIgdG8gcHJldmVu
dCBuYW1lIGNvbmZsaWN0cyBmb3IgbmVzdGVkIGNoaWxkcmVuCi0gICAgICAgICAgaW5kZXggPSB0
aGlzLmNvbnRleHQucHJvZ3JhbXMubGVuZ3RoOwotICAgICAgICAgIGNoaWxkLmluZGV4ID0gaW5k
ZXg7Ci0gICAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4OwotICAgICAgICAg
IHRoaXMuY29udGV4dC5wcm9ncmFtc1tpbmRleF0gPSBjb21waWxlci5jb21waWxlKGNoaWxkLCBv
cHRpb25zLCB0aGlzLmNvbnRleHQpOwotICAgICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVu
dHNbaW5kZXhdID0gY2hpbGQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2hpbGQuaW5k
ZXggPSBpbmRleDsKLSAgICAgICAgICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgaW5kZXg7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5j
dGlvbihjaGlsZCkgewotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY29udGV4dC5l
bnZpcm9ubWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgdmFyIGVudmlyb25t
ZW50ID0gdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tpXTsKLSAgICAgICAgaWYgKGVudmlyb25t
ZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHsKLSAgICAgICAgICByZXR1cm4gaTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBwcm9ncmFtRXhwcmVzc2lvbjogZnVu
Y3Rpb24oZ3VpZCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuc2VsZiA9ICJ0aGlzIjsK
LQotICAgICAgaWYoZ3VpZCA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiAic2VsZi5ub29wIjsK
LSAgICAgIH0KLQotICAgICAgdmFyIGNoaWxkID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltn
dWlkXSwKLSAgICAgICAgICBkZXB0aHMgPSBjaGlsZC5kZXB0aHMubGlzdCwgZGVwdGg7Ci0KLSAg
ICAgIHZhciBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCBjaGlsZC5uYW1lLCAiZGF0YSJd
OwotCi0gICAgICBmb3IodmFyIGk9MCwgbCA9IGRlcHRocy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0g
ICAgICAgIGRlcHRoID0gZGVwdGhzW2ldOwotCi0gICAgICAgIGlmKGRlcHRoID09PSAxKSB7IHBy
b2dyYW1QYXJhbXMucHVzaCgiZGVwdGgwIik7IH0KLSAgICAgICAgZWxzZSB7IHByb2dyYW1QYXJh
bXMucHVzaCgiZGVwdGgiICsgKGRlcHRoIC0gMSkpOyB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biAoZGVwdGhzLmxlbmd0aCA9PT0gMCA/ICJzZWxmLnByb2dyYW0oIiA6ICJzZWxmLnByb2dyYW1X
aXRoRGVwdGgoIikgKyBwcm9ncmFtUGFyYW1zLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgfSwKLQot
ICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lLCB2YWwpIHsKLSAgICAgIHRoaXMudXNlUmVnaXN0
ZXIobmFtZSk7Ci0gICAgICB0aGlzLnB1c2hTb3VyY2UobmFtZSArICIgPSAiICsgdmFsICsgIjsi
KTsKLSAgICB9LAotCi0gICAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIGlm
KCF0aGlzLnJlZ2lzdGVyc1tuYW1lXSkgewotICAgICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9
IHRydWU7Ci0gICAgICAgIHRoaXMucmVnaXN0ZXJzLmxpc3QucHVzaChuYW1lKTsKLSAgICAgIH0K
LSAgICB9LAotCi0gICAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24oaXRlbSkgewotICAgICAg
cmV0dXJuIHRoaXMucHVzaChuZXcgTGl0ZXJhbChpdGVtKSk7Ci0gICAgfSwKLQotICAgIHB1c2hT
b3VyY2U6IGZ1bmN0aW9uKHNvdXJjZSkgewotICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQp
IHsKLSAgICAgICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLmFwcGVuZFRvQnVmZmVyKHRoaXMucXVv
dGVkU3RyaW5nKHRoaXMucGVuZGluZ0NvbnRlbnQpKSk7Ci0gICAgICAgIHRoaXMucGVuZGluZ0Nv
bnRlbnQgPSB1bmRlZmluZWQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzb3VyY2UpIHsKLSAgICAg
ICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBwdXNo
U3RhY2s6IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgIHRoaXMuZmx1c2hJbmxpbmUoKTsKLQotICAg
ICAgdmFyIHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTsKLSAgICAgIGlmIChpdGVtKSB7Ci0gICAg
ICAgIHRoaXMucHVzaFNvdXJjZShzdGFjayArICIgPSAiICsgaXRlbSArICI7Iik7Ci0gICAgICB9
Ci0gICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKHN0YWNrKTsKLSAgICAgIHJldHVybiBzdGFj
azsKLSAgICB9LAotCi0gICAgcmVwbGFjZVN0YWNrOiBmdW5jdGlvbihjYWxsYmFjaykgewotICAg
ICAgdmFyIHByZWZpeCA9ICcnLAotICAgICAgICAgIGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSwK
LSAgICAgICAgICBzdGFjaywKLSAgICAgICAgICBjcmVhdGVkU3RhY2ssCi0gICAgICAgICAgdXNl
ZExpdGVyYWw7Ci0KLSAgICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5saW5lIHRoZW4gd2Ug
d2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZQotICAgICAgLy8gcmVw
bGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCcKLSAgICAgIGlmIChpbmxpbmUpIHsKLSAgICAgICAg
dmFyIHRvcCA9IHRoaXMucG9wU3RhY2sodHJ1ZSk7Ci0KLSAgICAgICAgaWYgKHRvcCBpbnN0YW5j
ZW9mIExpdGVyYWwpIHsKLSAgICAgICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBp
bmxpbmVkCi0gICAgICAgICAgc3RhY2sgPSB0b3AudmFsdWU7Ci0gICAgICAgICAgdXNlZExpdGVy
YWwgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIEdldCBvciBjcmVhdGUg
dGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmUKLSAgICAgICAgICBj
cmVhdGVkU3RhY2sgPSAhdGhpcy5zdGFja1Nsb3Q7Ci0gICAgICAgICAgdmFyIG5hbWUgPSAhY3Jl
YXRlZFN0YWNrID8gdGhpcy50b3BTdGFja05hbWUoKSA6IHRoaXMuaW5jclN0YWNrKCk7Ci0KLSAg
ICAgICAgICBwcmVmaXggPSAnKCcgKyB0aGlzLnB1c2gobmFtZSkgKyAnID0gJyArIHRvcCArICcp
LCc7Ci0gICAgICAgICAgc3RhY2sgPSB0aGlzLnRvcFN0YWNrKCk7Ci0gICAgICAgIH0KLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN0YWNrID0gdGhpcy50b3BTdGFjaygpOwotICAgICAgfQotCi0g
ICAgICB2YXIgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spOwotCi0gICAgICBpZiAo
aW5saW5lKSB7Ci0gICAgICAgIGlmICghdXNlZExpdGVyYWwpIHsKLSAgICAgICAgICB0aGlzLnBv
cFN0YWNrKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNyZWF0ZWRTdGFjaykgewotICAgICAg
ICAgIHRoaXMuc3RhY2tTbG90LS07Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5wdXNoKCcoJyAr
IHByZWZpeCArIGl0ZW0gKyAnKScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUHJldmVu
dCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRleHQgZGVwdGggdmFyaWFibGUuIFRocm91Z2ggcmVw
bGFjZVN0YWNrCi0gICAgICAgIGlmICghL15zdGFjay8udGVzdChzdGFjaykpIHsKLSAgICAgICAg
ICBzdGFjayA9IHRoaXMubmV4dFN0YWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnB1
c2hTb3VyY2Uoc3RhY2sgKyAiID0gKCIgKyBwcmVmaXggKyBpdGVtICsgIik7Iik7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAgfSwKLQotICAgIG5leHRTdGFjazogZnVuY3Rpb24o
KSB7Ci0gICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soKTsKLSAgICB9LAotCi0gICAgaW5jclN0
YWNrOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuc3RhY2tTbG90Kys7Ci0gICAgICBpZih0aGlz
LnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNo
KCJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdCk7IH0KLSAgICAgIHJldHVybiB0aGlzLnRvcFN0YWNr
TmFtZSgpOwotICAgIH0sCi0gICAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgIHJl
dHVybiAic3RhY2siICsgdGhpcy5zdGFja1Nsb3Q7Ci0gICAgfSwKLSAgICBmbHVzaElubGluZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrOwot
ICAgICAgaWYgKGlubGluZVN0YWNrLmxlbmd0aCkgewotICAgICAgICB0aGlzLmlubGluZVN0YWNr
ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBpbmxpbmVTdGFjay5sZW5ndGg7
IGkgPCBsZW47IGkrKykgewotICAgICAgICAgIHZhciBlbnRyeSA9IGlubGluZVN0YWNrW2ldOwot
ICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIExpdGVyYWwpIHsKLSAgICAgICAgICAgIHRo
aXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB0aGlzLnB1c2hTdGFjayhlbnRyeSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSwKLSAgICBpc0lubGluZTogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhp
cy5pbmxpbmVTdGFjay5sZW5ndGg7Ci0gICAgfSwKLQotICAgIHBvcFN0YWNrOiBmdW5jdGlvbih3
cmFwcGVkKSB7Ci0gICAgICB2YXIgaW5saW5lID0gdGhpcy5pc0lubGluZSgpLAotICAgICAgICAg
IGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5w
b3AoKTsKLQotICAgICAgaWYgKCF3cmFwcGVkICYmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkp
IHsKLSAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIWlubGluZSkgewotICAgICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHsKLSAgICAgICAg
ICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgc3RhY2sgcG9wJyk7Ci0gICAgICAgICAg
fQotICAgICAgICAgIHRoaXMuc3RhY2tTbG90LS07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGl0ZW07Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHRvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVk
KSB7Ci0gICAgICB2YXIgc3RhY2sgPSAodGhpcy5pc0lubGluZSgpID8gdGhpcy5pbmxpbmVTdGFj
ayA6IHRoaXMuY29tcGlsZVN0YWNrKSwKLSAgICAgICAgICBpdGVtID0gc3RhY2tbc3RhY2subGVu
Z3RoIC0gMV07Ci0KLSAgICAgIGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9mIExpdGVy
YWwpKSB7Ci0gICAgICAgIHJldHVybiBpdGVtLnZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcmV0dXJuIGl0ZW07Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHF1b3RlZFN0cmluZzogZnVu
Y3Rpb24oc3RyKSB7Ci0gICAgICByZXR1cm4gJyInICsgc3RyCi0gICAgICAgIC5yZXBsYWNlKC9c
XC9nLCAnXFxcXCcpCi0gICAgICAgIC5yZXBsYWNlKC8iL2csICdcXCInKQotICAgICAgICAucmVw
bGFjZSgvXG4vZywgJ1xcbicpCi0gICAgICAgIC5yZXBsYWNlKC9cci9nLCAnXFxyJykKLSAgICAg
ICAgLnJlcGxhY2UoL1x1MjAyOC9nLCAnXFx1MjAyOCcpICAgLy8gUGVyIEVjbWEtMjYyIDcuMyAr
IDcuOC40Ci0gICAgICAgIC5yZXBsYWNlKC9cdTIwMjkvZywgJ1xcdTIwMjknKSArICciJzsKLSAg
ICB9LAotCi0gICAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgbWlzc2lu
Z1BhcmFtcykgewotICAgICAgdmFyIHBhcmFtcyA9IFtdLAotICAgICAgICAgIHBhcmFtc0luaXQg
PSB0aGlzLnNldHVwUGFyYW1zKHBhcmFtU2l6ZSwgcGFyYW1zLCBtaXNzaW5nUGFyYW1zKTsKLSAg
ICAgIHZhciBmb3VuZEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdo
ZWxwZXInKTsKLQotICAgICAgcmV0dXJuIHsKLSAgICAgICAgcGFyYW1zOiBwYXJhbXMsCi0gICAg
ICAgIHBhcmFtc0luaXQ6IHBhcmFtc0luaXQsCi0gICAgICAgIG5hbWU6IGZvdW5kSGVscGVyLAot
ICAgICAgICBjYWxsUGFyYW1zOiBbImRlcHRoMCJdLmNvbmNhdChwYXJhbXMpLmpvaW4oIiwgIiks
Ci0gICAgICAgIGhlbHBlck1pc3NpbmdQYXJhbXM6IG1pc3NpbmdQYXJhbXMgJiYgWyJkZXB0aDAi
LCB0aGlzLnF1b3RlZFN0cmluZyhuYW1lKV0uY29uY2F0KHBhcmFtcykuam9pbigiLCAiKQotICAg
ICAgfTsKLSAgICB9LAotCi0gICAgc2V0dXBPcHRpb25zOiBmdW5jdGlvbihwYXJhbVNpemUsIHBh
cmFtcykgewotICAgICAgdmFyIG9wdGlvbnMgPSBbXSwgY29udGV4dHMgPSBbXSwgdHlwZXMgPSBb
XSwgcGFyYW0sIGludmVyc2UsIHByb2dyYW07Ci0KLSAgICAgIG9wdGlvbnMucHVzaCgiaGFzaDoi
ICsgdGhpcy5wb3BTdGFjaygpKTsKLQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJh
bXMpIHsKLSAgICAgICAgb3B0aW9ucy5wdXNoKCJoYXNoVHlwZXM6IiArIHRoaXMucG9wU3RhY2so
KSk7Ci0gICAgICAgIG9wdGlvbnMucHVzaCgiaGFzaENvbnRleHRzOiIgKyB0aGlzLnBvcFN0YWNr
KCkpOwotICAgICAgfQotCi0gICAgICBpbnZlcnNlID0gdGhpcy5wb3BTdGFjaygpOwotICAgICAg
cHJvZ3JhbSA9IHRoaXMucG9wU3RhY2soKTsKLQotICAgICAgLy8gQXZvaWQgc2V0dGluZyBmbiBh
bmQgaW52ZXJzZSBpZiBuZWl0aGVyIGFyZSBzZXQuIFRoaXMgYWxsb3dzCi0gICAgICAvLyBoZWxw
ZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgCi0gICAgICBpZiAocHJvZ3Jh
bSB8fCBpbnZlcnNlKSB7Ci0gICAgICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICAgIHRoaXMu
Y29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhpcyI7Ci0gICAgICAgICAgcHJvZ3JhbSA9ICJzZWxm
Lm5vb3AiOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbnZlcnNlKSB7Ci0gICAgICAgICAg
dGhpcy5jb250ZXh0LmFsaWFzZXMuc2VsZiA9ICJ0aGlzIjsKLSAgICAgICAgICBpbnZlcnNlID0g
InNlbGYubm9vcCI7Ci0gICAgICAgIH0KLQotICAgICAgICBvcHRpb25zLnB1c2goImludmVyc2U6
IiArIGludmVyc2UpOwotICAgICAgICBvcHRpb25zLnB1c2goImZuOiIgKyBwcm9ncmFtKTsKLSAg
ICAgIH0KLQotICAgICAgZm9yKHZhciBpPTA7IGk8cGFyYW1TaXplOyBpKyspIHsKLSAgICAgICAg
cGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7Ci0gICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKLQot
ICAgICAgICBpZih0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgICAgdHlwZXMu
cHVzaCh0aGlzLnBvcFN0YWNrKCkpOwotICAgICAgICAgIGNvbnRleHRzLnB1c2godGhpcy5wb3BT
dGFjaygpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLnN0
cmluZ1BhcmFtcykgewotICAgICAgICBvcHRpb25zLnB1c2goImNvbnRleHRzOlsiICsgY29udGV4
dHMuam9pbigiLCIpICsgIl0iKTsKLSAgICAgICAgb3B0aW9ucy5wdXNoKCJ0eXBlczpbIiArIHR5
cGVzLmpvaW4oIiwiKSArICJdIik7Ci0gICAgICB9Ci0KLSAgICAgIGlmKHRoaXMub3B0aW9ucy5k
YXRhKSB7Ci0gICAgICAgIG9wdGlvbnMucHVzaCgiZGF0YTpkYXRhIik7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiBvcHRpb25zOwotICAgIH0sCi0KLSAgICAvLyB0aGUgcGFyYW1zIGFuZCBjb250
ZXh0cyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiBhcnJheXMKLSAgICAvLyB0byBmaWxsIGluCi0g
ICAgc2V0dXBQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikg
ewotICAgICAgdmFyIG9wdGlvbnMgPSAneycgKyB0aGlzLnNldHVwT3B0aW9ucyhwYXJhbVNpemUs
IHBhcmFtcykuam9pbignLCcpICsgJ30nOwotCi0gICAgICBpZiAodXNlUmVnaXN0ZXIpIHsKLSAg
ICAgICAgdGhpcy51c2VSZWdpc3Rlcignb3B0aW9ucycpOwotICAgICAgICBwYXJhbXMucHVzaCgn
b3B0aW9ucycpOwotICAgICAgICByZXR1cm4gJ29wdGlvbnM9JyArIG9wdGlvbnM7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBwYXJhbXMucHVzaChvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuICcn
OwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICB2YXIgcmVzZXJ2ZWRXb3JkcyA9ICgKLSAgICAi
YnJlYWsgZWxzZSBuZXcgdmFyIiArCi0gICAgIiBjYXNlIGZpbmFsbHkgcmV0dXJuIHZvaWQiICsK
LSAgICAiIGNhdGNoIGZvciBzd2l0Y2ggd2hpbGUiICsKLSAgICAiIGNvbnRpbnVlIGZ1bmN0aW9u
IHRoaXMgd2l0aCIgKwotICAgICIgZGVmYXVsdCBpZiB0aHJvdyIgKwotICAgICIgZGVsZXRlIGlu
IHRyeSIgKwotICAgICIgZG8gaW5zdGFuY2VvZiB0eXBlb2YiICsKLSAgICAiIGFic3RyYWN0IGVu
dW0gaW50IHNob3J0IiArCi0gICAgIiBib29sZWFuIGV4cG9ydCBpbnRlcmZhY2Ugc3RhdGljIiAr
Ci0gICAgIiBieXRlIGV4dGVuZHMgbG9uZyBzdXBlciIgKwotICAgICIgY2hhciBmaW5hbCBuYXRp
dmUgc3luY2hyb25pemVkIiArCi0gICAgIiBjbGFzcyBmbG9hdCBwYWNrYWdlIHRocm93cyIgKwot
ICAgICIgY29uc3QgZ290byBwcml2YXRlIHRyYW5zaWVudCIgKwotICAgICIgZGVidWdnZXIgaW1w
bGVtZW50cyBwcm90ZWN0ZWQgdm9sYXRpbGUiICsKLSAgICAiIGRvdWJsZSBpbXBvcnQgcHVibGlj
IGxldCB5aWVsZCIKLSAgKS5zcGxpdCgiICIpOwotCi0gIHZhciBjb21waWxlcldvcmRzID0gSmF2
YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307Ci0KLSAgZm9yKHZhciBpPTAsIGw9
cmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgY29tcGlsZXJXb3Jkc1tyZXNl
cnZlZFdvcmRzW2ldXSA9IHRydWU7Ci0gIH0KLQotICBKYXZhU2NyaXB0Q29tcGlsZXIuaXNWYWxp
ZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAgaWYoIUphdmFT
Y3JpcHRDb21waWxlci5SRVNFUlZFRF9XT1JEU1tuYW1lXSAmJiAvXlthLXpBLVpfJF1bMC05YS16
QS1aXyRdKiQvLnRlc3QobmFtZSkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgX19leHBvcnRzX18gPSBKYXZhU2NyaXB0Q29tcGlsZXI7
Ci0gIHJldHVybiBfX2V4cG9ydHNfXzsKLX0pKF9fbW9kdWxlMl9fLCBfX21vZHVsZTVfXyk7Ci0K
LS8vIGhhbmRsZWJhcnMuanMKLXZhciBfX21vZHVsZTBfXyA9IChmdW5jdGlvbihfX2RlcGVuZGVu
Y3kxX18sIF9fZGVwZW5kZW5jeTJfXywgX19kZXBlbmRlbmN5M19fLCBfX2RlcGVuZGVuY3k0X18s
IF9fZGVwZW5kZW5jeTVfXykgewotICAidXNlIHN0cmljdCI7Ci0gIHZhciBfX2V4cG9ydHNfXzsK
LSAgLypnbG9iYWxzIEhhbmRsZWJhcnM6IHRydWUgKi8KLSAgdmFyIEhhbmRsZWJhcnMgPSBfX2Rl
cGVuZGVuY3kxX187Ci0KLSAgLy8gQ29tcGlsZXIgaW1wb3J0cwotICB2YXIgQVNUID0gX19kZXBl
bmRlbmN5Ml9fOwotICB2YXIgUGFyc2VyID0gX19kZXBlbmRlbmN5M19fLnBhcnNlcjsKLSAgdmFy
IHBhcnNlID0gX19kZXBlbmRlbmN5M19fLnBhcnNlOwotICB2YXIgQ29tcGlsZXIgPSBfX2RlcGVu
ZGVuY3k0X18uQ29tcGlsZXI7Ci0gIHZhciBjb21waWxlID0gX19kZXBlbmRlbmN5NF9fLmNvbXBp
bGU7Ci0gIHZhciBwcmVjb21waWxlID0gX19kZXBlbmRlbmN5NF9fLnByZWNvbXBpbGU7Ci0gIHZh
ciBKYXZhU2NyaXB0Q29tcGlsZXIgPSBfX2RlcGVuZGVuY3k1X187Ci0KLSAgdmFyIF9jcmVhdGUg
PSBIYW5kbGViYXJzLmNyZWF0ZTsKLSAgdmFyIGNyZWF0ZSA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBoYiA9IF9jcmVhdGUoKTsKLQotICAgIGhiLmNvbXBpbGUgPSBmdW5jdGlvbihpbnB1dCwgb3B0
aW9ucykgewotICAgICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTsKLSAgICB9
OwotICAgIGhiLnByZWNvbXBpbGUgPSBmdW5jdGlvbiAoaW5wdXQsIG9wdGlvbnMpIHsKLSAgICAg
IHJldHVybiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBoYik7Ci0gICAgfTsKLQotICAgIGhi
LkFTVCA9IEFTVDsKLSAgICBoYi5Db21waWxlciA9IENvbXBpbGVyOwotICAgIGhiLkphdmFTY3Jp
cHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjsKLSAgICBoYi5QYXJzZXIgPSBQYXJzZXI7
Ci0gICAgaGIucGFyc2UgPSBwYXJzZTsKLQotICAgIHJldHVybiBoYjsKLSAgfTsKLQotICBIYW5k
bGViYXJzID0gY3JlYXRlKCk7Ci0gIEhhbmRsZWJhcnMuY3JlYXRlID0gY3JlYXRlOwotCi0gIF9f
ZXhwb3J0c19fID0gSGFuZGxlYmFyczsKLSAgcmV0dXJuIF9fZXhwb3J0c19fOwotfSkoX19tb2R1
bGUxX18sIF9fbW9kdWxlN19fLCBfX21vZHVsZThfXywgX19tb2R1bGUxMF9fLCBfX21vZHVsZTEx
X18pOwotCi0gIHJldHVybiBfX21vZHVsZTBfXzsKLX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9q
cy9qcXVlcnkubWluLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9qcy9q
cXVlcnkubWluLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWY4ZWE1YmM5MGNh
YjNiYmNiNTQ4N2RjZmQwMGE3YmMyMDJmZjdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvanMv
anF1ZXJ5Lm1pbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDMxNzggKzAsMCBAQAotLyohIGpRdWVy
eSB2MS45LjEgfCAoYykgMjAwNSwgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVy
eS5vcmcvbGljZW5zZQotLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5Lm1pbi5tYXAKLSovCi0o
ZnVuY3Rpb24oZSwgdCkgewotICAgIHZhciBuLCByLCBpID0gdHlwZW9mIHQsIG8gPSBlLmRvY3Vt
ZW50LCBhID0gZS5sb2NhdGlvbiwgcyA9IGUualF1ZXJ5LCB1ID0gZS4kLCBsID0ge30sIGMgPSBb
XSwgcCA9ICIxLjkuMSIsIGYgPSBjLmNvbmNhdCwgZCA9IGMucHVzaCwgaCA9IGMuc2xpY2UsIGcg
PSBjLmluZGV4T2YsIG0gPSBsLnRvU3RyaW5nLCB5ID0gbC5oYXNPd25Qcm9wZXJ0eSwgdiA9IHAu
dHJpbSwgYiA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBiLmZuLmluaXQo
ZSwgdCwgcikKLSAgICB9LCB4ID0gL1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wp
Ly5zb3VyY2UsIHcgPSAvXFMrL2csIFQgPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEw
XSskL2csIE4gPSAvXig/Oig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLCBDID0gL148KFx3
KylccypcLz8+KD86PFwvXDE+fCkkLywgayA9IC9eW1xdLDp7fVxzXSokLywgRSA9IC8oPzpefDp8
LCkoPzpccypcWykrL2csIFMgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2cs
IEEgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VF
XVsrLV0/XGQrfCkvZywgaiA9IC9eLW1zLS8sIEQgPSAvLShbXGRhLXpdKS9naSwgTCA9IGZ1bmN0
aW9uKGUsIHQpIHsKLSAgICAgICAgcmV0dXJuIHQudG9VcHBlckNhc2UoKQotICAgIH0sIEggPSBm
dW5jdGlvbihlKSB7Ci0gICAgICAgIChvLmFkZEV2ZW50TGlzdGVuZXIgfHwgImxvYWQiID09PSBl
LnR5cGUgfHwgImNvbXBsZXRlIiA9PT0gby5yZWFkeVN0YXRlKSAmJiAocSgpLCBiLnJlYWR5KCkp
Ci0gICAgfSwgcSA9IGZ1bmN0aW9uKCkgewotICAgICAgICBvLmFkZEV2ZW50TGlzdGVuZXIgPyAo
by5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgSCwgITEpLCBlLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCBILCAhMSkpIDogKG8uZGV0YWNoRXZlbnQoIm9ucmVhZHlz
dGF0ZWNoYW5nZSIsIEgpLCBlLmRldGFjaEV2ZW50KCJvbmxvYWQiLCBIKSkKLSAgICB9OwotICAg
IGIuZm4gPSBiLnByb3RvdHlwZSA9IHsKLSAgICAgICAganF1ZXJ5OiBwLAotICAgICAgICBjb25z
dHJ1Y3RvcjogYiwKLSAgICAgICAgaW5pdDogZnVuY3Rpb24oZSwgbiwgcikgewotICAgICAgICAg
ICAgdmFyIGksIGE7Ci0gICAgICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaSA9ICI8IiA9PT0gZS5jaGFyQXQoMCkgJiYgIj4iID09PSBlLmNoYXJBdChl
Lmxlbmd0aC0xKSAmJiBlLmxlbmd0aCA+PSAzID8gW251bGwsIGUsIG51bGxdIDogTi5leGVjKGUp
LCAhaSB8fCFpWzFdICYmIG4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhbiB8fCBuLmpx
dWVyeSA/IChuIHx8IHIpLmZpbmQoZSkgOiB0aGlzLmNvbnN0cnVjdG9yKG4pLmZpbmQoZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4gPSBu
IGluc3RhbmNlb2YgYiA/IG5bMF0gOiBuLCBiLm1lcmdlKHRoaXMsIGIucGFyc2VIVE1MKGlbMV0s
IG4gJiYgbi5ub2RlVHlwZSA/IG4ub3duZXJEb2N1bWVudCB8fCBuIDogbywgITApCi0gICAgICAg
ICAgICAgICAgICAgICAgICApLCBDLnRlc3QoaVsxXSkgJiYgYi5pc1BsYWluT2JqZWN0KG4pKWZv
ciAoaSBpbiBuKQotICAgICAgICAgICAgICAgICAgICAgICAgYi5pc0Z1bmN0aW9uKHRoaXNbaV0p
ID8gdGhpc1tpXShuW2ldKSA6IHRoaXMuYXR0cihpLCBuW2ldKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGEg
PSBvLmdldEVsZW1lbnRCeUlkKGlbMl0pLCBhICYmIGEucGFyZW50Tm9kZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYS5pZCAhPT0gaVsyXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByLmZpbmQoZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMSwgdGhp
c1swXSA9IGEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y29udGV4dCA9IG8sIHRoaXMuc2VsZWN0b3IgPSBlLCB0aGlzCi0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gZS5ub2RlVHlwZSA/ICh0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gZSwg
dGhpcy5sZW5ndGggPSAxLCB0aGlzKSA6IGIuaXNGdW5jdGlvbihlKSA/IHIucmVhZHkoZSkgOiAo
ZS5zZWxlY3RvciAhPT0gdCAmJiAodGhpcy5zZWxlY3RvciA9IGUuc2VsZWN0b3IsIHRoaXMuY29u
dGV4dCA9IGUuY29udGV4dCksIGIubWFrZUFycmF5KGUsIHRoaXMpKQotICAgICAgICB9LAotICAg
ICAgICBzZWxlY3RvcjogIiIsCi0gICAgICAgIGxlbmd0aDogMCwKLSAgICAgICAgc2l6ZTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGgKLSAgICAgICAgfSwKLSAg
ICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gaC5jYWxsKHRo
aXMpCi0gICAgICAgIH0sCi0gICAgICAgIGdldDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
cmV0dXJuIG51bGwgPT0gZSA/IHRoaXMudG9BcnJheSgpIDogMCA+IGUgPyB0aGlzW3RoaXMubGVu
Z3RoICsgZV0gOiB0aGlzW2VdCi0gICAgICAgIH0sCi0gICAgICAgIHB1c2hTdGFjazogZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgdmFyIHQgPSBiLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSwg
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdC5wcmV2T2JqZWN0ID0gdGhpcywgdC5jb250ZXh0ID0g
dGhpcy5jb250ZXh0LCB0Ci0gICAgICAgIH0sCi0gICAgICAgIGVhY2g6IGZ1bmN0aW9uKGUsIHQp
IHsKLSAgICAgICAgICAgIHJldHVybiBiLmVhY2godGhpcywgZSwgdCkKLSAgICAgICAgfSwKLSAg
ICAgICAgcmVhZHk6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBiLnJlYWR5LnBy
b21pc2UoKS5kb25lKGUpLCB0aGlzCi0gICAgICAgIH0sCi0gICAgICAgIHNsaWNlOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhoLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykpCi0gICAgICAgIH0sCi0gICAgICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVxKDApCi0gICAgICAgIH0sCi0gICAgICAgIGxhc3Q6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEoLTEpCi0gICAgICAgIH0sCi0gICAg
ICAgIGVxOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9IHRoaXMubGVuZ3RoLCBu
ID0rIGUgKyAoMCA+IGUgPyB0IDogMCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2sobiA+PSAwICYmIHQgPiBuID8gW3RoaXNbbl1dIDogW10pCi0gICAgICAgIH0sCi0gICAgICAg
IG1hcDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGIu
bWFwKHRoaXMsIGZ1bmN0aW9uKHQsIG4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS5jYWxs
KHQsIG4sIHQpCi0gICAgICAgICAgICB9KSkKLSAgICAgICAgfSwKLSAgICAgICAgZW5kOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25z
dHJ1Y3RvcihudWxsKQotICAgICAgICB9LAotICAgICAgICBwdXNoOiBkLAotICAgICAgICBzb3J0
OiBbXS5zb3J0LAotICAgICAgICBzcGxpY2U6IFtdLnNwbGljZQotICAgIH0sIGIuZm4uaW5pdC5w
cm90b3R5cGUgPSBiLmZuLCBiLmV4dGVuZCA9IGIuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBlLCBuLCByLCBpLCBvLCBhLCBzID0gYXJndW1lbnRzWzBdIHx8IHt9LCB1ID0g
MSwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGM9ITE7Ci0gICAgICAgIGZvciAoImJvb2xlYW4iID09
IHR5cGVvZiBzICYmIChjID0gcywgcyA9IGFyZ3VtZW50c1sxXSB8fCB7fSwgdSA9IDIpLCAib2Jq
ZWN0IiA9PSB0eXBlb2YgcyB8fCBiLmlzRnVuY3Rpb24ocykgfHwgKHMgPSB7fSksIGwgPT09IHUg
JiYgKHMgPSB0aGlzLCAtLXUpOwotICAgICAgICBsID4gdTsKLSAgICAgICAgdSsrKWlmIChudWxs
ICE9IChvID0gYXJndW1lbnRzW3VdKSkKLSAgICAgICAgICAgIGZvciAoaSBpbiBvKQotICAgICAg
ICAgICAgICAgIGUgPSBzW2ldLCByID0gb1tpXSwgcyAhPT0gciAmJiAoYyAmJiByICYmIChiLmlz
UGxhaW5PYmplY3QocikgfHwgKG4gPSBiLmlzQXJyYXkocikpKSA/IChuID8gKG49ITEsIGEgPSBl
ICYmIGIuaXNBcnJheShlKSA/IGUgOiBbXSkgOiBhID0gZSAmJiBiLmlzUGxhaW5PYmplY3QoZSkg
PyBlIDoge30sIHNbaV0gPSBiLmV4dGVuZChjLCBhLCByKSkgOiByICE9PSB0ICYmIChzW2ldID0g
cikpOwotICAgICAgICByZXR1cm4gcwotICAgIH0sIGIuZXh0ZW5kKHsKLSAgICAgICAgbm9Db25m
bGljdDogZnVuY3Rpb24odCkgewotICAgICAgICAgICAgcmV0dXJuIGUuJCA9PT0gYiAmJiAoZS4k
ID0gdSksIHQgJiYgZS5qUXVlcnkgPT09IGIgJiYgKGUualF1ZXJ5ID0gcyksIGIKLSAgICAgICAg
fSwKLSAgICAgICAgaXNSZWFkeTogITEsCi0gICAgICAgIHJlYWR5V2FpdDogMSwKLSAgICAgICAg
aG9sZFJlYWR5OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICBlID8gYi5yZWFkeVdhaXQrKyA6
IGIucmVhZHkoITApCi0gICAgICAgIH0sCi0gICAgICAgIHJlYWR5OiBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICBpZiAoZT09PSEwPyEtLWIucmVhZHlXYWl0IDogIWIuaXNSZWFkeSkgewotICAg
ICAgICAgICAgICAgIGlmICghby5ib2R5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
VGltZW91dChiLnJlYWR5KTsKLSAgICAgICAgICAgICAgICBiLmlzUmVhZHk9ITAsIGUhPT0hMCYm
LS1iLnJlYWR5V2FpdCA+IDAgfHwgKG4ucmVzb2x2ZVdpdGgobywgW2JdKSwgYi5mbi50cmlnZ2Vy
ICYmIGIobykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5IikpCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgIGlzRnVuY3Rpb246IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAg
IHJldHVybiAiZnVuY3Rpb24iID09PSBiLnR5cGUoZSkKLSAgICAgICAgfSwKLSAgICAgICAgaXNB
cnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ImFycmF5IiA9PT0gYi50eXBlKGUpCi0gICAgICAgIH0sCi0gICAgICAgIGlzV2luZG93OiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbCAhPSBlICYmIGUgPT0gZS53aW5kb3cK
LSAgICAgICAgfSwKLSAgICAgICAgaXNOdW1lcmljOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQoZSkpICYmIGlzRmluaXRlKGUpCi0gICAgICAgIH0s
Ci0gICAgICAgIHR5cGU6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsID09
IGUgPyBlICsgIiIgOiAib2JqZWN0IiA9PSB0eXBlb2YgZSB8fCAiZnVuY3Rpb24iID09IHR5cGVv
ZiBlID8gbFttLmNhbGwoZSldIHx8ICJvYmplY3QiIDogdHlwZW9mIGUKLSAgICAgICAgfSwKLSAg
ICAgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgaWYgKCFlIHx8
ICJvYmplY3QiICE9PSBiLnR5cGUoZSkgfHwgZS5ub2RlVHlwZSB8fCBiLmlzV2luZG93KGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiAhMTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGUuY29uc3RydWN0b3ImJiF5LmNhbGwoZSwgImNvbnN0cnVjdG9yIikmJiF5LmNh
bGwoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIikpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhMQotICAgICAgICAgICAgfSBjYXRjaCAobikgewotICAgICAgICAg
ICAgICAgIHJldHVybiAhMQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHI7Ci0gICAg
ICAgICAgICBmb3IgKHIgaW4gZSk7Ci0gICAgICAgICAgICByZXR1cm4gciA9PT0gdCB8fCB5LmNh
bGwoZSwgcikKLSAgICAgICAgfSwKLSAgICAgICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgdmFyIHQ7Ci0gICAgICAgICAgICBmb3IgKHQgaW4gZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gITE7Ci0gICAgICAgICAgICByZXR1cm4gITAKLSAgICAgICAgfSwKLSAg
ICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHRocm93IEVycm9yKGUpCi0g
ICAgICAgIH0sCi0gICAgICAgIHBhcnNlSFRNTDogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAg
ICAgICAgaWYgKCFlIHx8ICJzdHJpbmciICE9IHR5cGVvZiBlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICAgICAgImJvb2xlYW4iID09IHR5cGVvZiB0ICYmIChuID0gdCwg
dD0hMSksIHQgPSB0IHx8IG87Ci0gICAgICAgICAgICB2YXIgciA9IEMuZXhlYyhlKSwgaT0hbiAm
JiBbXTsKLSAgICAgICAgICAgIHJldHVybiByID8gW3QuY3JlYXRlRWxlbWVudChyWzFdKV0gOiAo
ciA9IGIuYnVpbGRGcmFnbWVudChbZV0sIHQsIGkpLCBpICYmIGIoaSkucmVtb3ZlKCksIGIubWVy
Z2UoW10sIHIuY2hpbGROb2RlcykpCi0gICAgICAgIH0sCi0gICAgICAgIHBhcnNlSlNPTjogZnVu
Y3Rpb24obikgewotICAgICAgICAgICAgcmV0dXJuIGUuSlNPTiAmJiBlLkpTT04ucGFyc2UgPyBl
LkpTT04ucGFyc2UobikgOiBudWxsID09PSBuID8gbiA6ICJzdHJpbmciID09IHR5cGVvZiBuICYm
IChuID0gYi50cmltKG4pLCBuICYmIGsudGVzdChuLnJlcGxhY2UoUywgIkAiKS5yZXBsYWNlKEEs
ICJdIikucmVwbGFjZShFLCAiIikpKSA/IEZ1bmN0aW9uKCJyZXR1cm4gIiArIG4pKCkgOiAoYi5l
cnJvcigiSW52YWxpZCBKU09OOiAiICsgbiksIHQpCi0gICAgICAgIH0sCi0gICAgICAgIHBhcnNl
WE1MOiBmdW5jdGlvbihuKSB7Ci0gICAgICAgICAgICB2YXIgciwgaTsKLSAgICAgICAgICAgIGlm
ICghbiB8fCAic3RyaW5nIiAhPSB0eXBlb2YgbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZS5ET01QYXJzZXIgPyAoaSA9
IG5ldyBET01QYXJzZXIsIHIgPSBpLnBhcnNlRnJvbVN0cmluZyhuLCAidGV4dC94bWwiKSkgOiAo
ciA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksIHIuYXN5bmMgPSAiZmFs
c2UiLCByLmxvYWRYTUwobikpCi0gICAgICAgICAgICB9IGNhdGNoIChvKSB7Ci0gICAgICAgICAg
ICAgICAgciA9IHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByICYmIHIuZG9j
dW1lbnRFbGVtZW50JiYhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5n
dGggfHwgYi5lcnJvcigiSW52YWxpZCBYTUw6ICIgKyBuKSwgcgotICAgICAgICB9LAotICAgICAg
ICBub29wOiBmdW5jdGlvbigpIHt9LAotICAgICAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbih0KSB7
Ci0gICAgICAgICAgICB0ICYmIGIudHJpbSh0KSAmJiAoZS5leGVjU2NyaXB0IHx8IGZ1bmN0aW9u
KHQpIHsKLSAgICAgICAgICAgICAgICBlLmV2YWwuY2FsbChlLCB0KQotICAgICAgICAgICAgfSko
dCkKLSAgICAgICAgfSwKLSAgICAgICAgY2FtZWxDYXNlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZS5yZXBsYWNlKGosICJtcy0iKS5yZXBsYWNlKEQsIEwpCi0gICAgICAgIH0s
Ci0gICAgICAgIG5vZGVOYW1lOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZS5ub2RlTmFtZSAmJiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHQudG9Mb3dlckNhc2Uo
KQotICAgICAgICB9LAotICAgICAgICBlYWNoOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAg
ICAgICB2YXIgciwgaSA9IDAsIG8gPSBlLmxlbmd0aCwgYSA9IE0oZSk7Ci0gICAgICAgICAgICBp
ZiAobikgewotICAgICAgICAgICAgICAgIGlmIChhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoOyBvID4gaTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSB0LmFwcGx5
KGVbaV0sIG4pLCByPT09ITEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSB0LmFwcGx5KGVbaV0sIG4pLCByPT09ITEp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYSkgewotICAgICAgICAgICAgICAgIGZvciAoOyBvID4gaTsgaSsrKQotICAgICAgICAgICAg
ICAgICAgICBpZiAociA9IHQuY2FsbChlW2ldLCBpLCBlW2ldKSwgcj09PSExKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgICAg
ICBmb3IgKGkgaW4gZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSB0LmNhbGwoZVtpXSwg
aSwgZVtpXSksIHI9PT0hMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgcmV0dXJuIGUKLSAgICAgICAgfSwKLSAgICAgICAgdHJpbTogdiYmIXYuY2FsbCgiXHVm
ZWZmXHUwMGEwIikgPyBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbCA9PSBl
ID8gIiIgOiB2LmNhbGwoZSkKLSAgICAgICAgfQotICAgICAgICA6IGZ1bmN0aW9uKGUpIHsKLSAg
ICAgICAgICAgIHJldHVybiBudWxsID09IGUgPyAiIiA6IChlICsgIiIpLnJlcGxhY2UoVCwgIiIp
Ci0gICAgICAgIH0sCi0gICAgICAgIG1ha2VBcnJheTogZnVuY3Rpb24oZSwgdCkgewotICAgICAg
ICAgICAgdmFyIG4gPSB0IHx8IFtdOwotICAgICAgICAgICAgcmV0dXJuIG51bGwgIT0gZSAmJiAo
TShPYmplY3QoZSkpID8gYi5tZXJnZShuLCAic3RyaW5nIiA9PSB0eXBlb2YgZSA/IFtlXSA6IGUp
IDogZC5jYWxsKG4sIGUpKSwgbgotICAgICAgICB9LAotICAgICAgICBpbkFycmF5OiBmdW5jdGlv
bihlLCB0LCBuKSB7Ci0gICAgICAgICAgICB2YXIgcjsKLSAgICAgICAgICAgIGlmICh0KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnLmNhbGwo
dCwgZSwgbik7Ci0gICAgICAgICAgICAgICAgZm9yIChyID0gdC5sZW5ndGgsIG4gPSBuID8gMCA+
IG4gPyBNYXRoLm1heCgwLCByICsgbikgCi0gICAgICAgICAgICAgICAgICAgIDogbjoKLSAgICAg
ICAgICAgICAgICAwOwotICAgICAgICAgICAgICAgIHIgPiBuOwotICAgICAgICAgICAgICAgIG4r
KylpZiAobiBpbiB0ICYmIHRbbl0gPT09IGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgfSwKLSAgICAg
ICAgbWVyZ2U6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgICAgIHZhciByID0gbi5sZW5ndGgs
IGkgPSBlLmxlbmd0aCwgbyA9IDA7Ci0gICAgICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9m
IHIpCi0gICAgICAgICAgICAgICAgZm9yICg7IHIgPiBvOyBvKyspCi0gICAgICAgICAgICAgICAg
ICAgIGVbaSsrXSA9IG5bb107Ci0gICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgIHdo
aWxlIChuW29dICE9PSB0KQotICAgICAgICAgICAgICAgICAgICBlW2krK10gPSBuW28rK107Ci0g
ICAgICAgICAgICByZXR1cm4gZS5sZW5ndGggPSBpLCBlCi0gICAgICAgIH0sCi0gICAgICAgIGdy
ZXA6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHZhciByLCBpID0gW10sIG8gPSAw
LCBhID0gZS5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKG49ISFuOyBhID4gbzsgbysrKQotICAg
ICAgICAgICAgICAgIHI9ISF0KGVbb10sIG8pLCBuICE9PSByICYmIGkucHVzaChlW29dKTsKLSAg
ICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIH0sCi0gICAgICAgIG1hcDogZnVuY3Rpb24oZSwg
dCwgbikgewotICAgICAgICAgICAgdmFyIHIsIGkgPSAwLCBvID0gZS5sZW5ndGgsIGEgPSBNKGUp
LCBzID0gW107Ci0gICAgICAgICAgICBpZiAoYSkKLSAgICAgICAgICAgICAgICBmb3IgKDsgbyA+
IGk7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgciA9IHQoZVtpXSwgaSwgbiksIG51bGwgIT0g
ciAmJiAoc1tzLmxlbmd0aF0gPSByKTsKLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAg
ICAgZm9yIChpIGluIGUpCi0gICAgICAgICAgICAgICAgICAgIHIgPSB0KGVbaV0sIGksIG4pLCBu
dWxsICE9IHIgJiYgKHNbcy5sZW5ndGhdID0gcik7Ci0gICAgICAgICAgICByZXR1cm4gZi5hcHBs
eShbXSwgcykKLSAgICAgICAgfSwKLSAgICAgICAgZ3VpZDogMSwKLSAgICAgICAgcHJveHk6IGZ1
bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgICAgIHZhciByLCBpLCBvOwotICAgICAgICAgICAgcmV0
dXJuICJzdHJpbmciID09IHR5cGVvZiBuICYmIChvID0gZVtuXSwgbiA9IGUsIGUgPSBvKSwgYi5p
c0Z1bmN0aW9uKGUpID8gKHIgPSBoLmNhbGwoYXJndW1lbnRzLCAyKSwgaSA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlLmFwcGx5KG4gfHwgdGhpcywgci5jb25jYXQoaC5j
YWxsKGFyZ3VtZW50cykpKQotICAgICAgICAgICAgfSwgaS5ndWlkID0gZS5ndWlkID0gZS5ndWlk
IHx8IGIuZ3VpZCsrLCBpKSA6IHQKLSAgICAgICAgfSwKLSAgICAgICAgYWNjZXNzOiBmdW5jdGlv
bihlLCBuLCByLCBpLCBvLCBhLCBzKSB7Ci0gICAgICAgICAgICB2YXIgdSA9IDAsIGwgPSBlLmxl
bmd0aCwgYyA9IG51bGwgPT0gcjsKLSAgICAgICAgICAgIGlmICgib2JqZWN0IiA9PT0gYi50eXBl
KHIpKSB7Ci0gICAgICAgICAgICAgICAgbz0hMDsKLSAgICAgICAgICAgICAgICBmb3IgKHUgaW4g
cikKLSAgICAgICAgICAgICAgICAgICAgYi5hY2Nlc3MoZSwgbiwgdSwgclt1XSwgITAsIGEsIHMp
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGkgIT09IHQgJiYgKG89ITAsIGIuaXNGdW5jdGlvbihp
KSB8fCAocz0hMCksIGMgJiYgKHMgPyAobi5jYWxsKGUsIGkpCi0gICAgICAgICAgICAgICAgLCBu
ID0gbnVsbCkgOiAoYyA9IG4sIG4gPSBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGMuY2FsbChiKGUpLCBuKQotICAgICAgICAgICAgfSkpLCBuKSlmb3IgKDsgbCA+
IHU7IHUrKykKLSAgICAgICAgICAgICAgICBuKGVbdV0sIHIsIHMgPyBpIDogaS5jYWxsKGVbdV0s
IHUsIG4oZVt1XSwgcikpKTsKLSAgICAgICAgICAgIHJldHVybiBvID8gZSA6IGMgPyBuLmNhbGwo
ZSkgOiBsID8gbihlWzBdLCByKSA6IGEKLSAgICAgICAgfSwKLSAgICAgICAgbm93OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUpLmdldFRpbWUoKQotICAgICAgICB9
Ci0gICAgfSksIGIucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgaWYgKCFu
KQotICAgICAgICAgICAgaWYgKG4gPSBiLkRlZmVycmVkKCksICJjb21wbGV0ZSIgPT09IG8ucmVh
ZHlTdGF0ZSkKLSAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGIucmVhZHkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoby5hZGRFdmVudExpc3RlbmVyKQotICAgICAgICAgICAgICAgIG8uYWRkRXZl
bnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIEgsICExKSwgZS5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgSCwgITEpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG8uYXR0YWNoRXZl
bnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIEgpLCBlLmF0dGFjaEV2ZW50KCJvbmxvYWQiLCBIKTsK
LSAgICAgICAgICAgIHZhciByPSExOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAg
ICByID0gbnVsbCA9PSBlLmZyYW1lRWxlbWVudCAmJiBvLmRvY3VtZW50RWxlbWVudAotICAgICAg
ICAgICAgfSBjYXRjaCAoaSkge30KLSAgICAgICAgICAgIHIgJiYgci5kb1Njcm9sbCAmJiBmdW5j
dGlvbiBhKCkgewotICAgICAgICAgICAgICAgIGlmICghYi5pc1JlYWR5KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByLmRvU2Nyb2xsKCJsZWZ0
IikKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNldFRpbWVvdXQoYSwgNTApCi0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgcSgpLCBiLnJlYWR5KCkKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KCkKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbi5wcm9taXNlKHQpCi0gICAg
fSwgYi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdF
eHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGxb
IltvYmplY3QgIiArIHQgKyAiXSJdID0gdC50b0xvd2VyQ2FzZSgpCi0gICAgfSk7Ci0gICAgZnVu
Y3Rpb24gTShlKSB7Ci0gICAgICAgIHZhciB0ID0gZS5sZW5ndGgsIG4gPSBiLnR5cGUoZSk7Ci0g
ICAgICAgIHJldHVybiBiLmlzV2luZG93KGUpPyExIDogMSA9PT0gZS5ub2RlVHlwZSAmJiB0PyEw
IDogImFycmF5IiA9PT0gbiB8fCAiZnVuY3Rpb24iICE9PSBuICYmICgwID09PSB0IHx8ICJudW1i
ZXIiID09IHR5cGVvZiB0ICYmIHQgPiAwICYmIHQtMSBpbiBlKQotICAgIH0KLSAgICByID0gYihv
KTsKLSAgICB2YXIgXyA9IHt9OwotICAgIGZ1bmN0aW9uIEYoZSkgewotICAgICAgICB2YXIgdCA9
IF9bZV0gPSB7fTsKLSAgICAgICAgcmV0dXJuIGIuZWFjaChlLm1hdGNoKHcpIHx8IFtdLCBmdW5j
dGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB0W25dPSEwCi0gICAgICAgIH0pLCB0Ci0gICAgfQot
ICAgIGIuQ2FsbGJhY2tzID0gZnVuY3Rpb24oZSkgewotICAgICAgICBlID0gInN0cmluZyIgPT0g
dHlwZW9mIGUgPyBfW2VdIHx8IEYoZSkgOiBiLmV4dGVuZCh7fSwgZSk7Ci0gICAgICAgIHZhciBu
LCByLCBpLCBvLCBhLCBzLCB1ID0gW10sIGw9IWUub25jZSAmJiBbXSwgYyA9IGZ1bmN0aW9uKHQp
IHsKLSAgICAgICAgICAgIGZvciAociA9IGUubWVtb3J5ICYmIHQsIGk9ITAsIGEgPSBzIHx8IDAs
IHMgPSAwLCBvID0gdS5sZW5ndGgsIG49ITA7IHUgJiYgbyA+IGE7IGErKykKLSAgICAgICAgICAg
ICAgICBpZiAodVthXS5hcHBseSh0WzBdLCB0WzFdKT09PSExICYmIGUuc3RvcE9uRmFsc2UpIHsK
LSAgICAgICAgICAgICAgICAgICAgcj0hMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBuPSExLCB1ICYmIChsID8gbC5sZW5ndGggJiYg
YyhsLnNoaWZ0KCkpIDogciA/IHUgPSBbXSA6IHAuZGlzYWJsZSgpKQotICAgICAgICB9LCBwID0g
ewotICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHUubGVuZ3RoOwotICAgICAgICAgICAgICAg
ICAgICAoZnVuY3Rpb24gaSh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiLmVhY2godCwg
ZnVuY3Rpb24odCwgbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gYi50
eXBlKG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIgPT09IHIgPyBl
LnVuaXF1ZSAmJiBwLmhhcyhuKSB8fCB1LnB1c2gobikgOiBuICYmIG4ubGVuZ3RoICYmICJzdHJp
bmciICE9PSByICYmIGkobikKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAg
ICAgICAgICAgIH0pKGFyZ3VtZW50cyksIG4gPyBvID0gdS5sZW5ndGggOiByICYmIChzID0gdCwg
YyhyKSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMKLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB1ICYmIGIuZWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKGUsIHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHI7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgociA9
IGIuaW5BcnJheSh0LCB1LCByKSk+LTEpCi0gICAgICAgICAgICAgICAgICAgICAgICB1LnNwbGlj
ZShyLCAxKSwgbiAmJiAobyA+PSByICYmIG8tLSwgYSA+PSByICYmIGEtLSkKLSAgICAgICAgICAg
ICAgICB9KSwgdGhpcwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGhhczogZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBlID8gYi5pbkFycmF5KGUsIHUpPi0xIDogISgh
dSB8fCF1Lmxlbmd0aCkKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBlbXB0eTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHUgPSBbXSwgdGhpcwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB1ID0gbCA9IHIgPSB0LCB0aGlzCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZGlz
YWJsZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiAhdQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBsID0gdCwgciB8fCBwLmRpc2FibGUoKSwgdGhpcwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFsCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKGUsIHQpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdCA9IHQgfHwgW10sIHQgPSBbZSwgdC5zbGljZSA/IHQuc2xp
Y2UoKTogdF0sICF1IHx8IGkmJiFsIHx8IChuID8gbC5wdXNoKHQpIDogYyh0KSksIHRoaXMKLSAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICBmaXJlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcC5maXJlV2l0aCh0aGlzLCBhcmd1bWVudHMpLCB0aGlzCi0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgZmlyZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiAhIWkKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHAKLSAg
ICB9LCBiLmV4dGVuZCh7Ci0gICAgICAgIERlZmVycmVkOiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICB2YXIgdCA9IFtbInJlc29sdmUiLCAiZG9uZSIsIGIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9y
eSIpLCAicmVzb2x2ZWQiXSwgWyJyZWplY3QiLCAiZmFpbCIsIGIuQ2FsbGJhY2tzKCJvbmNlIG1l
bW9yeSIpLCAicmVqZWN0ZWQiXSwgWyJub3RpZnkiLCAicHJvZ3Jlc3MiLCBiLkNhbGxiYWNrcygi
bWVtb3J5IildXSwgbiA9ICJwZW5kaW5nIiwgciA9IHsKLSAgICAgICAgICAgICAgICBzdGF0ZTog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuCi0gICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLCB0aGlzCi0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGUgPSBhcmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBiLkRlZmVycmVkKGZ1bmN0aW9uKG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGIuZWFjaCh0LCBmdW5jdGlvbih0LCBvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGEgPSBvWzBdLCBzID0gYi5pc0Z1bmN0aW9uKGVbdF0pICYmIGVbdF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaVtvWzFdXShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGUgPSBzICYmIHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSAmJiBiLmlzRnVuY3Rpb24oZS5wcm9taXNl
KSA/IGUucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhu
Lm5vdGlmeSkgOiBuW2EgKyAiV2l0aCJdKHRoaXMgPT09IHIgPyBuLnByb21pc2UoKSA6IHRoaXMs
IHMgPyBbZV0gOiBhcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pLCBlID0gbnVsbAotICAgICAgICAgICAgICAgICAgICB9
KS5wcm9taXNlKCkKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHByb21pc2U6
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgIT0gZSA/IGIu
ZXh0ZW5kKGUsIHIpIDogcgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIGkgPSB7
fTsKLSAgICAgICAgICAgIHJldHVybiByLnBpcGUgPSByLnRoZW4sIGIuZWFjaCh0LCBmdW5jdGlv
bihlLCBvKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGEgPSBvWzJdLCBzID0gb1szXTsKLSAgICAg
ICAgICAgICAgICByW29bMV1dID0gYS5hZGQsIHMgJiYgYS5hZGQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG4gPSBzCi0gICAgICAgICAgICAgICAgfSwgdFsxXmVdWzJdLmRpc2Fi
bGUsIHRbMl1bMl0ubG9jayksIGlbb1swXV0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlbb1swXSArICJXaXRoIl0odGhpcyA9PT0gaSA/IHIgOiB0aGlzLCBhcmd1
bWVudHMpLCB0aGlzCi0gICAgICAgICAgICAgICAgfSwgaVtvWzBdICsgIldpdGgiXSA9IGEuZmly
ZVdpdGgKLSAgICAgICAgICAgIH0pLCByLnByb21pc2UoaSksIGUgJiYgZS5jYWxsKGksIGkpLCBp
Ci0gICAgICAgIH0sCi0gICAgICAgIHdoZW46IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZh
ciB0ID0gMCwgbiA9IGguY2FsbChhcmd1bWVudHMpLCByID0gbi5sZW5ndGgsIGkgPSAxICE9PSBy
IHx8IGUgJiYgYi5pc0Z1bmN0aW9uKGUucHJvbWlzZSkgPyByOiAwLCBvID0gMSA9PT0gaSA/IGU6
IGIuRGVmZXJyZWQoKSwgYSA9IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24ocikgewotICAgICAgICAgICAgICAgICAgICB0W2VdID0gdGhpcywgbltl
XSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gaC5jYWxsKGFyZ3VtZW50cykgOiByLCBuID09PSBz
ID8gby5ub3RpZnlXaXRoKHQsIG4pIDogLS1pIHx8IG8ucmVzb2x2ZVdpdGgodCwgbikKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBzLCB1LCBsOwotICAgICAgICAgICAgaWYgKHIg
PiAxKQotICAgICAgICAgICAgICAgIGZvciAocyA9IEFycmF5KHIpLCB1ID0gQXJyYXkocikKLSAg
ICAgICAgICAgICAgICAgICAgLCBsID0gQXJyYXkocik7Ci0gICAgICAgICAgICByID4gdDsKLSAg
ICAgICAgICAgIHQrKyluW3RdICYmIGIuaXNGdW5jdGlvbihuW3RdLnByb21pc2UpID8gblt0XS5w
cm9taXNlKCkuZG9uZShhKHQsIGwsIG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhhKHQsIHUs
IHMpKSA6IC0taTsKLSAgICAgICAgICAgIHJldHVybiBpIHx8IG8ucmVzb2x2ZVdpdGgobCwgbiks
IG8ucHJvbWlzZSgpCi0gICAgICAgIH0KLSAgICB9KSwgYi5zdXBwb3J0ID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHZhciB0LCBuLCByLCBhLCBzLCB1LCBsLCBjLCBwLCBmLCBkID0gby5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgaWYgKGQuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCAi
dCIpLCBkLmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+
YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLCBuID0gZC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiKiIpCi0gICAgICAgICAgICAsIHIgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0s
ICFuIHx8IXIgfHwhbi5sZW5ndGgpcmV0dXJuIHt9OwotICAgICAgICBzID0gby5jcmVhdGVFbGVt
ZW50KCJzZWxlY3QiKSwgbCA9IHMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24i
KSksIGEgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLCByLnN0eWxlLmNzc1Rl
eHQgPSAidG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLCB0ID0gewotICAgICAgICAgICAg
Z2V0U2V0QXR0cmlidXRlOiAidCIgIT09IGQuY2xhc3NOYW1lLAotICAgICAgICAgICAgbGVhZGlu
Z1doaXRlc3BhY2U6IDMgPT09IGQuZmlyc3RDaGlsZC5ub2RlVHlwZSwKLSAgICAgICAgICAgIHRi
b2R5OiAhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsCi0gICAgICAgICAg
ICBodG1sU2VyaWFsaXplOiAhIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgs
Ci0gICAgICAgICAgICBzdHlsZTogL3RvcC8udGVzdChyLmdldEF0dHJpYnV0ZSgic3R5bGUiKSks
Ci0gICAgICAgICAgICBocmVmTm9ybWFsaXplZDogIi9hIiA9PT0gci5nZXRBdHRyaWJ1dGUoImhy
ZWYiKSwKLSAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41Ly50ZXN0KHIuc3R5bGUub3BhY2l0eSks
Ci0gICAgICAgICAgICBjc3NGbG9hdDogISFyLnN0eWxlLmNzc0Zsb2F0LAotICAgICAgICAgICAg
Y2hlY2tPbjogISFhLnZhbHVlLAotICAgICAgICAgICAgb3B0U2VsZWN0ZWQ6IGwuc2VsZWN0ZWQs
Ci0gICAgICAgICAgICBlbmN0eXBlOiAhIW8uY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUs
Ci0gICAgICAgICAgICBodG1sNUNsb25lOiAiPDpuYXY+PC86bmF2PiIgIT09IG8uY3JlYXRlRWxl
bWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsCi0gICAgICAgICAgICBib3hNb2Rl
bDogIkNTUzFDb21wYXQiID09PSBvLmNvbXBhdE1vZGUsCi0gICAgICAgICAgICBkZWxldGVFeHBh
bmRvOiAhMCwKLSAgICAgICAgICAgIG5vQ2xvbmVFdmVudDogITAsCi0gICAgICAgICAgICBpbmxp
bmVCbG9ja05lZWRzTGF5b3V0OiAhMSwKLSAgICAgICAgICAgIHNocmlua1dyYXBCbG9ja3M6ICEx
LAotICAgICAgICAgICAgcmVsaWFibGVNYXJnaW5SaWdodDogITAsCi0gICAgICAgICAgICBib3hT
aXppbmdSZWxpYWJsZTogITAsCi0gICAgICAgICAgICBwaXhlbFBvc2l0aW9uOiAhMQotICAgICAg
ICB9LCBhLmNoZWNrZWQ9ITAsIHQubm9DbG9uZUNoZWNrZWQgPSBhLmNsb25lTm9kZSghMCkuY2hl
Y2tlZCwgcy5kaXNhYmxlZD0hMCwgdC5vcHREaXNhYmxlZD0hbC5kaXNhYmxlZDsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIGRlbGV0ZSBkLnRlc3QKLSAgICAgICAgfSBjYXRjaCAoaCkgewot
ICAgICAgICAgICAgdC5kZWxldGVFeHBhbmRvPSExCi0gICAgICAgIH0KLSAgICAgICAgYSA9IG8u
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKSwgYS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgIiIpLCB0Lmlu
cHV0ID0gIiIgPT09IGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLCBhLnZhbHVlID0gInQiLCBhLnNl
dEF0dHJpYnV0ZSgidHlwZSIsICJyYWRpbyIpLCB0LnJhZGlvVmFsdWUgPSAidCIgPT09IGEudmFs
dWUsIGEuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgInQiKSwgYS5zZXRBdHRyaWJ1dGUoIm5hbWUi
LCAidCIpLCB1ID0gby5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIHUuYXBwZW5kQ2hpbGQoYSks
IHQuYXBwZW5kQ2hlY2tlZCA9IGEuY2hlY2tlZCwgdC5jaGVja0Nsb25lID0gdS5jbG9uZU5vZGUo
ITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsIGQuYXR0YWNoRXZlbnQgJiYgKGQu
YXR0YWNoRXZlbnQoIm9uY2xpY2siLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHQubm9DbG9u
ZUV2ZW50PSExCi0gICAgICAgIH0pLCBkLmNsb25lTm9kZSghMCkuY2xpY2soKSk7Ci0gICAgICAg
IGZvciAoZiBpbnsKLSAgICAgICAgICAgIHN1Ym1pdDogITAsCi0gICAgICAgICAgICBjaGFuZ2U6
ICEwLAotICAgICAgICAgICAgZm9jdXNpbjogITAKLSAgICAgICAgfSkKLSAgICAgICAgICAgIGQu
c2V0QXR0cmlidXRlKGMgPSAib24iICsgZiwgInQiKSwgdFtmICsgIkJ1YmJsZXMiXSA9IGMgaW4g
ZSB8fCBkLmF0dHJpYnV0ZXNbY10uZXhwYW5kbz09PSExOwotICAgICAgICByZXR1cm4gZC5zdHls
ZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCIsIGQuY2xvbmVOb2RlKCEwKS5zdHlsZS5i
YWNrZ3JvdW5kQ2xpcCA9ICIiLCB0LmNsZWFyQ2xvbmVTdHlsZSA9ICJjb250ZW50LWJveCIgPT09
IGQuc3R5bGUuYmFja2dyb3VuZENsaXAsIGIoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIg
biwgciwgYSwgcyA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jazti
b3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0
LWJveC1zaXppbmc6Y29udGVudC1ib3g7IiwgdSA9IG8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJv
ZHkiKVswXTsKLSAgICAgICAgICAgIHUgJiYgKG4gPSBvLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBu
LnN0eWxlLmNzc1RleHQgPSAiYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjphYnNv
bHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHgiLCB1LmFwcGVuZENoaWxkKG4p
LmFwcGVuZENoaWxkKGQpLCBkLmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50
PC90ZD48L3RyPjwvdGFibGU+IiwgYSA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksIGFb
MF0uc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpu
b25lIiwgcCA9IDAgPT09IGFbMF0ub2Zmc2V0SGVpZ2h0LCBhWzBdLnN0eWxlLmRpc3BsYXkgPSAi
IiwgYVsxXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiLCB0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9
IHAgJiYgMCA9PT0gYVswXS5vZmZzZXRIZWlnaHQsIGQuaW5uZXJIVE1MID0gIiIsIGQuc3R5bGUu
Y3NzVGV4dCA9ICJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1i
b3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtk
aXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3Rv
cDoxJTsiLCB0LmJveFNpemluZyA9IDQgPT09IGQub2Zmc2V0V2lkdGgsIHQuZG9lc05vdEluY2x1
ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAxICE9PSB1Lm9mZnNldFRvcCwgZS5nZXRDb21wdXRlZFN0
eWxlICYmICh0LnBpeGVsUG9zaXRpb24gPSAiMSUiICE9PSAoZS5nZXRDb21wdXRlZFN0eWxlKGQs
IG51bGwpIHx8IHt9KS50b3AsIHQuYm94U2l6aW5nUmVsaWFibGUgPSAiNHB4IiA9PT0gKGUuZ2V0
Q29tcHV0ZWRTdHlsZShkLCBudWxsKSB8fCB7Ci0gICAgICAgICAgICAgICAgd2lkdGg6ICI0cHgi
Ci0gICAgICAgICAgICB9KS53aWR0aCwgciA9IGQuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50
KCJkaXYiKSksIHIuc3R5bGUuY3NzVGV4dCA9IGQuc3R5bGUuY3NzVGV4dCA9IHMsIHIuc3R5bGUu
bWFyZ2luUmlnaHQgPSByLnN0eWxlLndpZHRoID0gIjAiLCBkLnN0eWxlLndpZHRoID0gIjFweCIs
IHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKHIs
IG51bGwpIHx8IHt9KS5tYXJnaW5SaWdodCkpLCB0eXBlb2YgZC5zdHlsZS56b29tICE9PSBpICYm
IChkLmlubmVySFRNTCA9ICIiLCBkLnN0eWxlLmNzc1RleHQgPSBzICsgIndpZHRoOjFweDtwYWRk
aW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiLCB0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQg
PSAzID09PSBkLm9mZnNldFdpZHRoLCBkLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siLCBkLmlubmVy
SFRNTCA9ICI8ZGl2PjwvZGl2PiIsIGQuZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9ICI1cHgiLCB0
LnNocmlua1dyYXBCbG9ja3MgPSAzICE9PSBkLm9mZnNldFdpZHRoLCB0LmlubGluZUJsb2NrTmVl
ZHNMYXlvdXQgJiYgKHUuc3R5bGUuem9vbSA9IDEpKSwgdS5yZW1vdmVDaGlsZChuKSwgbiA9IGQg
PSBhID0gciA9IG51bGwpCi0gICAgICAgIH0pLCBuID0gcyA9IHUgPSBsID0gciA9IGEgPSBudWxs
LCB0Ci0gICAgfSgpOwotICAgIHZhciBPID0gLyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQv
LCBCID0gLyhbQS1aXSkvZzsKLSAgICBmdW5jdGlvbiBQKGUsIG4sIHIsIGkpIHsKLSAgICAgICAg
aWYgKGIuYWNjZXB0RGF0YShlKSkgewotICAgICAgICAgICAgdmFyIG8sIGEsIHMgPSBiLmV4cGFu
ZG8sIHUgPSAic3RyaW5nIiA9PSB0eXBlb2YgbiwgbCA9IGUubm9kZVR5cGUsIHAgPSBsID8gYi5j
YWNoZTogZSwgZiA9IGwgPyBlW3NdOiBlW3NdICYmIHM7Ci0gICAgICAgICAgICBpZiAoZiAmJiBw
W2ZdICYmIChpIHx8IHBbZl0uZGF0YSkgfHwhdSB8fCByICE9PSB0KQotICAgICAgICAgICAgICAg
IHJldHVybiBmIHx8IChsID8gZVtzXSA9IGYgPSBjLnBvcCgpIHx8IGIuZ3VpZCsrIDogZiA9IHMp
LCBwW2ZdIHx8IChwW2ZdID0ge30sIGwgfHwgKHBbZl0udG9KU09OID0gYi5ub29wKSksICgib2Jq
ZWN0IiA9PSB0eXBlb2YgbiB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBuKSAmJiAoaSA/IHBbZl0g
PSBiLmV4dGVuZChwW2ZdLCBuKSA6IHBbZl0uZGF0YSA9IGIuZXh0ZW5kKHBbZl0uZGF0YSwgbikp
LCBvID0gcFtmXSwgaSB8fCAoby5kYXRhIHx8IChvLmRhdGEgPSB7fSksIG8gPSBvLmRhdGEpLCBy
ICE9PSB0ICYmIChvW2IuY2FtZWxDYXNlKG4pXSA9IHIpLCB1ID8gKGEgPSBvW25dLCBudWxsID09
IGEgJiYgKGEgPSBvW2IuY2FtZWxDYXNlKG4pXSkpIDogYSA9IG8sIGEKLSAgICAgICAgfQotICAg
IH0KLSAgICBmdW5jdGlvbiBSKGUsIHQsIG4pIHsKLSAgICAgICAgaWYgKGIuYWNjZXB0RGF0YShl
KSkgewotICAgICAgICAgICAgdmFyIHIsIGksIG8sIGEgPSBlLm5vZGVUeXBlLCBzID0gYSA/IGIu
Y2FjaGU6IGUsIHUgPSBhID8gZVtiLmV4cGFuZG9dOiBiLmV4cGFuZG87Ci0gICAgICAgICAgICBp
ZiAoc1t1XSkgewotICAgICAgICAgICAgICAgIGlmICh0ICYmIChvID0gbiA/IHNbdV0gOiBzW3Vd
LmRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGIuaXNBcnJheSh0KSA/IHQgPSB0LmNvbmNh
dChiLm1hcCh0LCBiLmNhbWVsQ2FzZSkpIDogdCBpbiBvID8gdCA9IFt0XSA6ICh0ID0gYi5jYW1l
bENhc2UodCksIHQgPSB0IGluIG8gPyBbdF0gOiB0LnNwbGl0KCIgIikpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHIgPSAwLCBpID0gdC5sZW5ndGg7IGkgPiByOyByKyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgb1t0W3JdXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEo
biA/ICQgOiBiLmlzRW1wdHlPYmplY3QpKG8pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIAotICAgICAgICAgICAgICAgIH0obiB8fCAoZGVsZXRlIHNbdV0uZGF0YSwgJChzW3VdKSkp
ICYmIChhID8gYi5jbGVhbkRhdGEoW2VdLCAhMCkgOiBiLnN1cHBvcnQuZGVsZXRlRXhwYW5kbyB8
fCBzICE9IHMud2luZG93ID8gZGVsZXRlIHNbdV0gOiBzW3VdID0gbnVsbCkKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBiLmV4dGVuZCh7Ci0gICAgICAgIGNhY2hlOiB7fSwK
LSAgICAgICAgZXhwYW5kbzogImpRdWVyeSIgKyAocCArIE1hdGgucmFuZG9tKCkpLnJlcGxhY2Uo
L1xEL2csICIiKSwKLSAgICAgICAgbm9EYXRhOiB7Ci0gICAgICAgICAgICBlbWJlZDogITAsCi0g
ICAgICAgICAgICBvYmplY3Q6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1
NDAwMDAiLAotICAgICAgICAgICAgYXBwbGV0OiAhMAotICAgICAgICB9LAotICAgICAgICBoYXNE
YXRhOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gZSA9IGUubm9kZVR5cGUgPyBi
LmNhY2hlW2VbYi5leHBhbmRvXV0gOiBlW2IuZXhwYW5kb10sICEhZSYmISQoZSkKLSAgICAgICAg
fSwKLSAgICAgICAgZGF0YTogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAgICAgICAgcmV0dXJu
IFAoZSwgdCwgbikKLSAgICAgICAgfSwKLSAgICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oZSwg
dCkgewotICAgICAgICAgICAgcmV0dXJuIFIoZSwgdCkKLSAgICAgICAgfSwKLSAgICAgICAgX2Rh
dGE6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHJldHVybiBQKGUsIHQsIG4sICEw
KQotICAgICAgICB9LAotICAgICAgICBfcmVtb3ZlRGF0YTogZnVuY3Rpb24oZSwgdCkgewotICAg
ICAgICAgICAgcmV0dXJuIFIoZSwgdCwgITApCi0gICAgICAgIH0sCi0gICAgICAgIGFjY2VwdERh
dGE6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGlmIChlLm5vZGVUeXBlICYmIDEgIT09IGUu
bm9kZVR5cGUgJiYgOSAhPT0gZS5ub2RlVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gITE7
Ci0gICAgICAgICAgICB2YXIgdCA9IGUubm9kZU5hbWUgJiYgYi5ub0RhdGFbZS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpXTsKLSAgICAgICAgICAgIHJldHVybiAhdCB8fCB0IT09ITAgJiYgZS5nZXRB
dHRyaWJ1dGUoImNsYXNzaWQiKSA9PT0gdAotICAgICAgICB9Ci0gICAgfSksIGIuZm4uZXh0ZW5k
KHsKLSAgICAgICAgZGF0YTogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFyIHIsIGks
IG8gPSB0aGlzWzBdLCBhID0gMCwgcyA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoZSA9PT0gdCkg
ewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCAmJiAocyA9IGIuZGF0YShvKSwgMSA9
PT0gby5ub2RlVHlwZSYmIWIuX2RhdGEobywgInBhcnNlZEF0dHJzIikpCi0gICAgICAgICAgICAg
ICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSBvLmF0dHJpYnV0ZXM7IHIu
bGVuZ3RoID4gYTsgYSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJbYV0ubmFtZSwg
aS5pbmRleE9mKCJkYXRhLSIpIHx8IChpID0gYi5jYW1lbENhc2UoaS5zbGljZSg1KSksIFcobywg
aSwgc1tpXSkpOwotICAgICAgICAgICAgICAgICAgICBiLl9kYXRhKG8sICJwYXJzZWRBdHRycyIs
ICEwKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiID09IHR5cGVvZiBlID8gdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGIuZGF0YSh0aGlzLCBlKQotICAgICAg
ICAgICAgfSkgOiBiLmFjY2Vzcyh0aGlzLCBmdW5jdGlvbihuKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG4gPT09IHQgPyBvID8gVyhvLCBlLCBiLmRhdGEobywgZSkpIDogbnVsbCA6ICh0aGlz
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGIuZGF0YSh0aGlzLCBlLCBu
KQotICAgICAgICAgICAgICAgIH0pLCB0KQotICAgICAgICAgICAgfSwgbnVsbCwgbiwgYXJndW1l
bnRzLmxlbmd0aCA+IDEsIG51bGwsICEwKQotICAgICAgICB9LAotICAgICAgICByZW1vdmVEYXRh
OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIGIucmVtb3ZlRGF0YSh0aGlzLCBlKQotICAgICAgICAgICAgfSkK
LSAgICAgICAgfQotICAgIH0pOwotICAgIGZ1bmN0aW9uIFcoZSwgbiwgcikgewotICAgICAgICBp
ZiAociA9PT0gdCAmJiAxID09PSBlLm5vZGVUeXBlKSB7Ci0gICAgICAgICAgICB2YXIgaSA9ICJk
YXRhLSIgKyBuLnJlcGxhY2UoQiwgIi0kMSIpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICBp
ZiAociA9IGUuZ2V0QXR0cmlidXRlKGkpLCAic3RyaW5nIiA9PSB0eXBlb2YgcikgewotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAidHJ1ZSIgPT09IHI/ITAg
OiAiZmFsc2UiID09PSByPyExIDogIm51bGwiID09PSByID8gbnVsbCA6ICsgciArICIiID09PSBy
PytyIDogTy50ZXN0KHIpID8gYi5wYXJzZUpTT04ocikgOiByCi0gICAgICAgICAgICAgICAgfSBj
YXRjaCAobykge30KLSAgICAgICAgICAgICAgICBiLmRhdGEoZSwgbiwgcikKLSAgICAgICAgICAg
IH0gZWxzZSAKLSAgICAgICAgICAgICAgICByID0gdAotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biByCi0gICAgfQotICAgIGZ1bmN0aW9uICQoZSkgewotICAgICAgICB2YXIgdDsKLSAgICAgICAg
Zm9yICh0IGluIGUpCi0gICAgICAgICAgICBpZiAoKCJkYXRhIiAhPT0gdCB8fCFiLmlzRW1wdHlP
YmplY3QoZVt0XSkpICYmICJ0b0pTT04iICE9PSB0KQotICAgICAgICAgICAgICAgIHJldHVybiAh
MTsKLSAgICAgICAgcmV0dXJuICEwCi0gICAgfQotICAgIGIuZXh0ZW5kKHsKLSAgICAgICAgcXVl
dWU6IGZ1bmN0aW9uKGUsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpOwotICAgICAgICAgICAg
cmV0dXJuIGUgPyAobiA9IChuIHx8ICJmeCIpICsgInF1ZXVlIiwgaSA9IGIuX2RhdGEoZSwgbiks
IHIgJiYgKCFpIHx8IGIuaXNBcnJheShyKSA/IGkgPSBiLl9kYXRhKGUsIG4sIGIubWFrZUFycmF5
KHIpKSA6IGkucHVzaChyKSksIGkgfHwgW10pIDogdAotICAgICAgICB9LAotICAgICAgICBkZXF1
ZXVlOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB0ID0gdCB8fCAiZngiOwotICAgICAg
ICAgICAgdmFyIG4gPSBiLnF1ZXVlKGUsIHQpLCByID0gbi5sZW5ndGgsIGkgPSBuLnNoaWZ0KCks
IG8gPSBiLl9xdWV1ZUhvb2tzKGUsIHQpLCBhID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgYi5kZXF1ZXVlKGUsIHQpCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgImlucHJvZ3Jl
c3MiID09PSBpICYmIChpID0gbi5zaGlmdCgpLCByLS0pLCBvLmN1ciA9IGksIGkgJiYgKCJmeCIg
PT09IHQgJiYgbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksIGRlbGV0ZSBvLnN0b3AsIGkuY2FsbChl
LCBhLCBvKSksICFyICYmIG8gJiYgby5lbXB0eS5maXJlKCkKLSAgICAgICAgfSwKLSAgICAgICAg
X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gdCArICJx
dWV1ZUhvb2tzIjsKLSAgICAgICAgICAgIHJldHVybiBiLl9kYXRhKGUsIG4pIHx8IGIuX2RhdGEo
ZSwgbiwgewotICAgICAgICAgICAgICAgIGVtcHR5OiBiLkNhbGxiYWNrcygib25jZSBtZW1vcnki
KS5hZGQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGIuX3JlbW92ZURhdGEoZSwg
dCArICJxdWV1ZSIpLCBiLl9yZW1vdmVEYXRhKGUsIG4pCi0gICAgICAgICAgICAgICAgfSkKLSAg
ICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9KSwgYi5mbi5leHRlbmQoewotICAgICAgICBx
dWV1ZTogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFyIHIgPSAyOwotICAgICAgICAg
ICAgcmV0dXJuICJzdHJpbmciICE9IHR5cGVvZiBlICYmIChuID0gZSwgZSA9ICJmeCIsIHItLSks
IHIgPiBhcmd1bWVudHMubGVuZ3RoID8gYi5xdWV1ZSh0aGlzWzBdLCBlKSA6IG4gPT09IHQgPyB0
aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciB0ID0gYi5x
dWV1ZSh0aGlzLCBlLCBuKTsKLSAgICAgICAgICAgICAgICBiLl9xdWV1ZUhvb2tzKHRoaXMsIGUp
LCAiZngiID09PSBlICYmICJpbnByb2dyZXNzIiAhPT0gdFswXSAmJiBiLmRlcXVldWUodGhpcywg
ZSkKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIGRlcXVldWU6IGZ1bmN0aW9u
KGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgYi5kZXF1ZXVlKHRoaXMsIGUpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAot
ICAgICAgICBkZWxheTogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcmV0dXJuIGUgPSBi
LmZ4ID8gYi5meC5zcGVlZHNbZV0gfHwgZSA6IGUsIHQgPSB0IHx8ICJmeCIsIHRoaXMucXVldWUo
dCwgZnVuY3Rpb24odCwgbikgewotICAgICAgICAgICAgICAgIHZhciByID0gc2V0VGltZW91dCh0
LCBlKTsKLSAgICAgICAgICAgICAgICBuLnN0b3AgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2xlYXJUaW1lb3V0KHIpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSkKLSAgICAgICAgfSwKLSAgICAgICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMucXVldWUoZSB8fCAiZngiLCBbXSkKLSAgICAgICAgfSwKLSAgICAg
ICAgcHJvbWlzZTogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgdmFyIHIsIGkgPSAxLCBv
ID0gYi5EZWZlcnJlZCgpLCBhID0gdGhpcywgcyA9IHRoaXMubGVuZ3RoLCB1ID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgLS1pIHx8IG8ucmVzb2x2ZVdpdGgoYSwgW2FdKQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICJzdHJpbmciICE9IHR5cGVvZiBlICYmIChuID0gZSwgZSA9
IHQpLCBlID0gZSB8fCAiZngiOwotICAgICAgICAgICAgd2hpbGUgKHMtLSkKLSAgICAgICAgICAg
ICAgICByID0gYi5fZGF0YShhW3NdLCBlICsgInF1ZXVlSG9va3MiKSwgciAmJiByLmVtcHR5ICYm
IChpKyssIHIuZW1wdHkuYWRkKHUpKTsKLSAgICAgICAgICAgIHJldHVybiB1KCksIG8ucHJvbWlz
ZShuKQotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgdmFyIEksIHosIFggPSAvW1x0XHJcbl0vZywg
VSA9IC9cci9nLCBWID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkk
L2ksIFkgPSAvXig/OmF8YXJlYSkkL2ksIEogPSAvXig/OmNoZWNrZWR8c2VsZWN0ZWR8YXV0b2Zv
Y3VzfGF1dG9wbGF5fGFzeW5jfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11
bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkKSQvaSwgRyA9IC9eKD86Y2hlY2tl
ZHxzZWxlY3RlZCkkL2ksIFEgPSBiLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlLCBLID0gYi5zdXBw
b3J0LmlucHV0OwotICAgIGIuZm4uZXh0ZW5kKHsKLSAgICAgICAgYXR0cjogZnVuY3Rpb24oZSwg
dCkgewotICAgICAgICAgICAgcmV0dXJuIGIuYWNjZXNzKHRoaXMsIGIuYXR0ciwgZSwgdCwgYXJn
dW1lbnRzLmxlbmd0aCA+IDEpCi0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgYi5yZW1vdmVBdHRyKHRoaXMsIGUpCi0gICAgICAgICAgICB9KQotICAgICAg
ICB9LAotICAgICAgICBwcm9wOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
Yi5hY2Nlc3ModGhpcywgYi5wcm9wLCBlLCB0LCBhcmd1bWVudHMubGVuZ3RoID4gMSkKLSAgICAg
ICAgfSwKLSAgICAgICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0
dXJuIGUgPSBiLnByb3BGaXhbZV0gfHwgZSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNbZV0gPSB0LCBkZWxldGUg
dGhpc1tlXQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHt9Ci0gICAgICAgICAgICB9KQot
ICAgICAgICB9LAotICAgICAgICBhZGRDbGFzczogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
dmFyIHQsIG4sIHIsIGksIG8sIGEgPSAwLCBzID0gdGhpcy5sZW5ndGgsIHUgPSAic3RyaW5nIiA9
PSB0eXBlb2YgZSAmJiBlOwotICAgICAgICAgICAgaWYgKGIuaXNGdW5jdGlvbihlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYih0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcywgdCwgdGhpcy5jbGFzc05hbWUpKQot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHUpCi0gICAgICAgICAgICAgICAg
Zm9yICh0ID0gKGUgfHwgIiIpLm1hdGNoKHcpIHx8IFtdOyBzID4gYTsgYSsrKQotICAgICAgICAg
ICAgICAgICAgICBpZiAobiA9IHRoaXNbYV0sIHIgPSAxID09PSBuLm5vZGVUeXBlICYmIChuLmNs
YXNzTmFtZSA/ICgiICIgKyBuLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShYLCAiICIpIAotICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiICIpKSB7Ci0gICAgICAgICAgICAgICAgbyA9IDA7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKGkgPSB0W28rK10pCi0gICAgICAgICAgICAgICAgICAgIDAg
PiByLmluZGV4T2YoIiAiICsgaSArICIgIikgJiYgKHIgKz0gaSArICIgIik7Ci0gICAgICAgICAg
ICAgICAgbi5jbGFzc05hbWUgPSBiLnRyaW0ocikKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0aGlzCi0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgICB2YXIgdCwgbiwgciwgaSwgbywgYSA9IDAsIHMgPSB0aGlzLmxlbmd0
aCwgdSA9IDAgPT09IGFyZ3VtZW50cy5sZW5ndGggfHwgInN0cmluZyIgPT0gdHlwZW9mIGUgJiYg
ZTsKLSAgICAgICAgICAgIGlmIChiLmlzRnVuY3Rpb24oZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGIodGhpcyku
cmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsIHQsIHRoaXMuY2xhc3NOYW1lKSkKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIGlmICh1KQotICAgICAgICAgICAgICAgIGZvciAodCA9IChl
IHx8ICIiKS5tYXRjaCh3KSB8fCBbXTsgcyA+IGE7IGErKykKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG4gPSB0aGlzW2FdLCByID0gMSA9PT0gbi5ub2RlVHlwZSAmJiAobi5jbGFzc05hbWUgPyAo
IiAiICsgbi5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoWCwgIiAiKSAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIDogIiIpKSB7Ci0gICAgICAgICAgICAgICAgbyA9IDA7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKGkgPSB0W28rK10pCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyLmluZGV4
T2YoIiAiICsgaSArICIgIikgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByLnJl
cGxhY2UoIiAiICsgaSArICIgIiwgIiAiKTsKLSAgICAgICAgICAgICAgICBuLmNsYXNzTmFtZSA9
IGUgPyBiLnRyaW0ocikgOiAiIgotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRo
aXMKLSAgICAgICAgfSwKLSAgICAgICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGUsIHQpIHsKLSAg
ICAgICAgICAgIHZhciBuID0gdHlwZW9mIGUsIHIgPSAiYm9vbGVhbiIgPT0gdHlwZW9mIHQ7Ci0g
ICAgICAgICAgICByZXR1cm4gYi5pc0Z1bmN0aW9uKGUpID8gdGhpcy5lYWNoKGZ1bmN0aW9uKG4p
IHsKLSAgICAgICAgICAgICAgICBiKHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLCBuLCB0
aGlzLmNsYXNzTmFtZSwgdCksIHQpCi0gICAgICAgICAgICB9KSA6IHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICBpZiAoInN0cmluZyIgPT09IG4pIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIG8sIGEgPSAwLCBzID0gYih0aGlzKSwgdSA9IHQsIGwgPSBlLm1hdGNoKHcp
IHx8IFtdOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobyA9IGxbYSsrXSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHUgPSByID8gdSA6ICFzLmhhc0NsYXNzKG8pLCBzW3UgPyAiYWRkQ2xh
c3MiOiAicmVtb3ZlQ2xhc3MiXShvKQotICAgICAgICAgICAgICAgIH0gZWxzZSAobiA9PT0gaSB8
fCAiYm9vbGVhbiIgPT09IG4pIAotICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5jbGFzc05h
bWUgJiYgYi5fZGF0YSh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lKSwgdGhp
cy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCBlPT09ITEgPyAiIiA6IGIuX2RhdGEodGhp
cywgIl9fY2xhc3NOYW1lX18iKSB8fCAiIikKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0g
ICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9ICIgIiAr
IGUgKyAiICIsIG4gPSAwLCByID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKDsgciA+
IG47IG4rKykKLSAgICAgICAgICAgICAgICBpZiAoMSA9PT0gdGhpc1tuXS5ub2RlVHlwZSAmJiAo
IiAiICsgdGhpc1tuXS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoWCwgIiAiKS5pbmRleE9mKHQp
ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMDsKLSAgICAgICAgICAgIHJldHVy
biAhMQotICAgICAgICB9LAotICAgICAgICB2YWw6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAg
IHZhciBuLCByLCBpLCBvID0gdGhpc1swXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPSBi
LmlzRnVuY3Rpb24oZSksIHRoaXMuZWFjaChmdW5jdGlvbihuKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBvLCBhID0gYih0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgMSA9PT0gdGhpcy5u
b2RlVHlwZSAmJiAobyA9IGkgPyBlLmNhbGwodGhpcywgbiwgYS52YWwoKSkgOiBlLCBudWxsID09
IG8gPyBvID0gIiIgOiAibnVtYmVyIiA9PSB0eXBlb2YgbyA/IG8gKz0gIiIgOiBiLmlzQXJyYXko
bykgJiYgKG8gPSBiLm1hcChvLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbCA9PSBlID8gIiIgOiBlICsgIiIKLSAgICAgICAgICAgICAgICAgICAgfSkp
LCByID0gYi52YWxIb29rc1t0aGlzLnR5cGVdIHx8IGIudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpXSwgciAmJiAic2V0ImluIHIgJiYgci5zZXQodGhpcywgbywgInZhbHVlIikg
IT09IHQgfHwgKHRoaXMudmFsdWUgPSBvKSkKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICBpZiAobykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHIgPSBiLnZhbEhvb2tz
W28udHlwZV0gfHwgYi52YWxIb29rc1tvLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLCByICYmICJn
ZXQiaW4gciAmJiAobiA9IHIuZ2V0KG8sICJ2YWx1ZSIpKSAhPT0gdCA/IG4gOiAobiA9IG8udmFs
dWUsICJzdHJpbmciID09IHR5cGVvZiBuID8gbi5yZXBsYWNlKFUsICIiKSA6IG51bGwgPT0gbiA/
ICIiIDogbikKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pLCBiLmV4dGVuZCh7Ci0g
ICAgICAgIHZhbEhvb2tzOiB7Ci0gICAgICAgICAgICBvcHRpb246IHsKLSAgICAgICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlLmF0dHJp
YnV0ZXMudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhdCB8fCB0LnNwZWNpZmll
ZCA/IGUudmFsdWUgOiBlLnRleHQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgc2VsZWN0OiB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0LCBuLCByID0gZS5vcHRpb25zLCBpID0gZS5zZWxl
Y3RlZEluZGV4LCBvID0gInNlbGVjdC1vbmUiID09PSBlLnR5cGUgfHwgMCA+IGksIGEgPSBvID8g
bnVsbDogW10sIHMgPSBvID8gaSArIDE6IHIubGVuZ3RoLCB1ID0gMCA+IGkgPyBzOiBvID8gaTog
MDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IHMgPiB1OyB1KyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobiA9IHJbdV0sICEoIW4uc2VsZWN0ZWQgJiYgdSAhPT0gaSB8fCAoYi5z
dXBwb3J0Lm9wdERpc2FibGVkID8gbi5kaXNhYmxlZCA6IG51bGwgIT09IG4uZ2V0QXR0cmlidXRl
KCJkaXNhYmxlZCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCBuLnBhcmVudE5v
ZGUuZGlzYWJsZWQgJiYgYi5ub2RlTmFtZShuLnBhcmVudE5vZGUsICJvcHRncm91cCIpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPSBiKG4pLnZhbCgpLCBvKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICAgICAgICAgICAgICAgICAgYS5w
dXNoKHQpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGEKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZSwg
dCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGIubWFrZUFycmF5KHQpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYihlKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGIuaW5BcnJheShiKHRo
aXMpLnZhbCgpLCBuKSA+PSAwCi0gICAgICAgICAgICAgICAgICAgIH0pLCBuLmxlbmd0aCB8fCAo
ZS5zZWxlY3RlZEluZGV4ID0tIDEpLCBuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICBhdHRyOiBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAg
ICAgICB2YXIgbywgYSwgcywgdSA9IGUubm9kZVR5cGU7Ci0gICAgICAgICAgICBpZiAoZSAmJiAz
ICE9PSB1ICYmIDggIT09IHUgJiYgMiAhPT0gdSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZW9mIGUuZ2V0QXR0cmlidXRlID09PSBpID8gYi5wcm9wKGUsIG4sIHIpIDogKGEgPSAxICE9PSB1
IHx8IWIuaXNYTUxEb2MoZSksIGEgJiYgKG4gPSBuLnRvTG93ZXJDYXNlKCksIG8gPSBiLmF0dHJI
b29rc1tuXSB8fCAoSi50ZXN0KG4pID8geiA6IEkpKSwgciA9PT0gdCA/IG8gJiYgYSAmJiAiZ2V0
ImluIG8gJiYgbnVsbCAhPT0gKHMgPSBvLmdldChlLCBuKSkgPyBzIDogKHR5cGVvZiBlLmdldEF0
dHJpYnV0ZSAhPT0gaSAmJiAocyA9IGUuZ2V0QXR0cmlidXRlKG4pKSwgbnVsbCA9PSBzID8gdCA6
IHMpIDogbnVsbCAhPT0gciA/IG8gJiYgYSAmJiAic2V0ImluIG8gJiYgKHMgPSBvLnNldChlLCBy
LCBuKSkgIT09IHQgPyBzIDogKGUuc2V0QXR0cmlidXRlKG4sIHIgKyAiIiksIHIpIDogKGIucmVt
b3ZlQXR0cihlLCBuKSwgdCkpCi0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0
aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuLCByLCBpID0gMCwgbyA9IHQgJiYgdC5tYXRj
aCh3KTsKLSAgICAgICAgICAgIGlmIChvICYmIDEgPT09IGUubm9kZVR5cGUpCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKG4gPSBvW2krK10pCi0gICAgICAgICAgICAgICAgICAgIHIgPSBiLnByb3BG
aXhbbl0gfHwgbiwgSi50ZXN0KG4pPyFRICYmIEcudGVzdChuKSA/IGVbYi5jYW1lbENhc2UoImRl
ZmF1bHQtIiArIG4pXSA9IGVbcl09ITEgOiBlW3JdPSExIDogYi5hdHRyKGUsIG4sICIiKSwgZS5y
ZW1vdmVBdHRyaWJ1dGUoUSA/IG4gOiByKQotICAgICAgICB9LAotICAgICAgICBhdHRySG9va3M6
IHsKLSAgICAgICAgICAgIHR5cGU6IHsKLSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUs
IHQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFiLnN1cHBvcnQucmFkaW9WYWx1ZSAmJiAi
cmFkaW8iID09PSB0ICYmIGIubm9kZU5hbWUoZSwgImlucHV0IikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBuID0gZS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlLnNldEF0dHJpYnV0ZSgidHlwZSIsIHQpLCBuICYmIChlLnZhbHVlID0gbiksIHQKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgcHJvcEZpeDogewotICAgICAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRl
eCIsCi0gICAgICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKLSAgICAgICAgICAgICJmb3Ii
OiAiaHRtbEZvciIsCi0gICAgICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKLSAgICAgICAg
ICAgIG1heGxlbmd0aDogIm1heExlbmd0aCIsCi0gICAgICAgICAgICBjZWxsc3BhY2luZzogImNl
bGxTcGFjaW5nIiwKLSAgICAgICAgICAgIGNlbGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAotICAg
ICAgICAgICAgcm93c3BhbjogInJvd1NwYW4iLAotICAgICAgICAgICAgY29sc3BhbjogImNvbFNw
YW4iLAotICAgICAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKLSAgICAgICAgICAgIGZyYW1lYm9y
ZGVyOiAiZnJhbWVCb3JkZXIiLAotICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVu
dEVkaXRhYmxlIgotICAgICAgICB9LAotICAgICAgICBwcm9wOiBmdW5jdGlvbihlLCBuLCByKSB7
Ci0gICAgICAgICAgICB2YXIgaSwgbywgYSwgcyA9IGUubm9kZVR5cGU7Ci0gICAgICAgICAgICBp
ZiAoZSAmJiAzICE9PSBzICYmIDggIT09IHMgJiYgMiAhPT0gcykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYSA9IDEgIT09IHMgfHwhYi5pc1hNTERvYyhlKSwgYSAmJiAobiA9IGIucHJvcEZpeFtu
XSB8fCBuLCBvID0gYi5wcm9wSG9va3Nbbl0pLCByICE9PSB0ID8gbyAmJiAic2V0ImluIG8gJiYg
KGkgPSBvLnNldChlLCByLCBuKSkgIT09IHQgPyBpIDogZVtuXSA9IHIgOiBvICYmICJnZXQiaW4g
byAmJiBudWxsICE9PSAoaSA9IG8uZ2V0KGUsIG4pKSA/IGkgOiBlW25dCi0gICAgICAgIH0sCi0g
ICAgICAgIHByb3BIb29rczogewotICAgICAgICAgICAgdGFiSW5kZXg6IHsKLSAgICAgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBlLmdl
dEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
ICYmIG4uc3BlY2lmaWVkID8gcGFyc2VJbnQobi52YWx1ZSwgMTApIDogVi50ZXN0KGUubm9kZU5h
bWUpIHx8IFkudGVzdChlLm5vZGVOYW1lKSAmJiBlLmhyZWYgPyAwIDogdAotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pLCB6ID0gewotICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgICAgIHZhciByID0gYi5wcm9wKGUsIG4pLCBp
ID0gImJvb2xlYW4iID09IHR5cGVvZiByICYmIGUuZ2V0QXR0cmlidXRlKG4pLCBvID0gImJvb2xl
YW4iID09IHR5cGVvZiByID8gSyAmJiBRID8gbnVsbCAhPSBpOiBHLnRlc3QobikgPyBlW2IuY2Ft
ZWxDYXNlKCJkZWZhdWx0LSIgKyBuKV06ICEhaTogZS5nZXRBdHRyaWJ1dGVOb2RlKG4pOwotICAg
ICAgICAgICAgcmV0dXJuIG8gJiYgby52YWx1ZSE9PSExID8gbi50b0xvd2VyQ2FzZSgpIDogdAot
ICAgICAgICB9LAotICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAg
IHJldHVybiB0PT09ITEgPyBiLnJlbW92ZUF0dHIoZSwgbikgOiBLICYmIFEgfHwhRy50ZXN0KG4p
ID8gZS5zZXRBdHRyaWJ1dGUoIVEgJiYgYi5wcm9wRml4W25dIHx8IG4sIG4pIDogZVtiLmNhbWVs
Q2FzZSgiZGVmYXVsdC0iICsgbildID0gZVtuXT0hMCwgbgotICAgICAgICB9Ci0gICAgfSwgSyAm
JiBRIHx8IChiLmF0dHJIb29rcy52YWx1ZSA9IHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbihlLCBu
KSB7Ci0gICAgICAgICAgICB2YXIgciA9IGUuZ2V0QXR0cmlidXRlTm9kZShuKTsKLSAgICAgICAg
ICAgIHJldHVybiBiLm5vZGVOYW1lKGUsICJpbnB1dCIpID8gZS5kZWZhdWx0VmFsdWUgOiByICYm
IHIuc3BlY2lmaWVkID8gci52YWx1ZSA6IHQKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5j
dGlvbihlLCBuLCByKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5ub2RlTmFtZShlLCAiaW5wdXQi
KSA/IChlLmRlZmF1bHRWYWx1ZSA9IG4sIHQpIDogSSAmJiBJLnNldChlLCBuLCByKQotICAgICAg
ICB9Ci0gICAgfSksIFEgfHwgKEkgPSBiLnZhbEhvb2tzLmJ1dHRvbiA9IHsKLSAgICAgICAgZ2V0
OiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB2YXIgciA9IGUuZ2V0QXR0cmlidXRlTm9k
ZShuKTsKLSAgICAgICAgICAgIHJldHVybiByICYmICgiaWQiID09PSBuIHx8ICJuYW1lIiA9PT0g
biB8fCAiY29vcmRzIiA9PT0gbiA/ICIiICE9PSByLnZhbHVlIDogci5zcGVjaWZpZWQpID8gci52
YWx1ZSA6IHQKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbihlLCBuLCByKSB7Ci0g
ICAgICAgICAgICB2YXIgaSA9IGUuZ2V0QXR0cmlidXRlTm9kZShyKTsKLSAgICAgICAgICAgIHJl
dHVybiBpIHx8IGUuc2V0QXR0cmlidXRlTm9kZShpID0gZS5vd25lckRvY3VtZW50LmNyZWF0ZUF0
dHJpYnV0ZShyKSksIGkudmFsdWUgPSBuICs9ICIiLCAidmFsdWUiID09PSByIHx8IG4gPT09IGUu
Z2V0QXR0cmlidXRlKHIpID8gbiA6IHQKLSAgICAgICAgfQotICAgIH0sIGIuYXR0ckhvb2tzLmNv
bnRlbnRlZGl0YWJsZSA9IHsKLSAgICAgICAgZ2V0IDogSS5nZXQsIHNldCA6IGZ1bmN0aW9uKGUs
IHQsIG4pIHsKLSAgICAgICAgICAgIEkuc2V0KGUsICIiID09PSB0PyExIDogdCwgbikKLSAgICAg
ICAgfQotICAgIH0sIGIuZWFjaChbIndpZHRoIiwgImhlaWdodCJdLCBmdW5jdGlvbihlLCBuKSB7
Ci0gICAgICAgIGIuYXR0ckhvb2tzW25dID0gYi5leHRlbmQoYi5hdHRySG9va3Nbbl0sIHsKLSAg
ICAgICAgICAgIHNldDogZnVuY3Rpb24oZSwgcikgewotICAgICAgICAgICAgICAgIHJldHVybiAi
IiA9PT0gciA/IChlLnNldEF0dHJpYnV0ZShuLCAiYXV0byIpLCByKSA6IHQKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSkKLSAgICB9KSksIGIuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCB8fCAoYi5l
YWNoKFsiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0Il0sIGZ1bmN0aW9uKGUsIG4pIHsK
LSAgICAgICAgYi5hdHRySG9va3Nbbl0gPSBiLmV4dGVuZChiLmF0dHJIb29rc1tuXSwgewotICAg
ICAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHIgPSBlLmdl
dEF0dHJpYnV0ZShuLCAyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSByID8gdCA6
IHIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSkKLSAgICB9KSwgYi5lYWNoKFsiaHJlZiIsICJz
cmMiXSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICBiLnByb3BIb29rc1t0XSA9IHsKLSAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBlLmdldEF0
dHJpYnV0ZSh0LCA0KQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSkpLCBiLnN1cHBv
cnQuc3R5bGUgfHwgKGIuYXR0ckhvb2tzLnN0eWxlID0gewotICAgICAgICBnZXQ6IGZ1bmN0aW9u
KGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlLnN0eWxlLmNzc1RleHQgfHwgdAotICAgICAgICB9
LAotICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiBlLnN0
eWxlLmNzc1RleHQgPSB0ICsgIiIKLSAgICAgICAgfQotICAgIH0pLCBiLnN1cHBvcnQub3B0U2Vs
ZWN0ZWQgfHwgKGIucHJvcEhvb2tzLnNlbGVjdGVkID0gYi5leHRlbmQoYi5wcm9wSG9va3Muc2Vs
ZWN0ZWQsIHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9
IGUucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIHJldHVybiB0ICYmICh0LnNlbGVjdGVkSW5kZXgs
IHQucGFyZW50Tm9kZSAmJiB0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksIG51bGwKLSAgICAg
ICAgfQotICAgIH0pKSwgYi5zdXBwb3J0LmVuY3R5cGUgfHwgKGIucHJvcEZpeC5lbmN0eXBlID0g
ImVuY29kaW5nIiksIGIuc3VwcG9ydC5jaGVja09uIHx8IGIuZWFjaChbInJhZGlvIiwgImNoZWNr
Ym94Il0sIGZ1bmN0aW9uKCkgewotICAgICAgICBiLnZhbEhvb2tzW3RoaXNdID0gewotICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgPT09
IGUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID8gIm9uIiA6IGUudmFsdWUKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0pLCBiLmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlv
bigpIHsKLSAgICAgICAgYi52YWxIb29rc1t0aGlzXSA9IGIuZXh0ZW5kKGIudmFsSG9va3NbdGhp
c10sIHsKLSAgICAgICAgICAgIHNldDogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAg
IHJldHVybiBiLmlzQXJyYXkobikgPyBlLmNoZWNrZWQgPSBiLmluQXJyYXkoYihlKS52YWwoKSwg
bikgPj0gMCA6IHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSkKLSAgICB9KTsKLSAgICB2YXIg
WiA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSwgZXQgPSAvXmtleS8sIHR0ID0gL14o
Pzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLCBudCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vz
b3V0Ymx1cikkLywgcnQgPSAvXihbXi5dKikoPzpcLiguKyl8KSQvOwotICAgIGZ1bmN0aW9uIGl0
KCkgewotICAgICAgICByZXR1cm4gITAKLSAgICB9Ci0gICAgZnVuY3Rpb24gb3QoKSB7Ci0gICAg
ICAgIHJldHVybiAhMQotICAgIH0KLSAgICBiLmV2ZW50ID0gewotICAgICAgICBnbG9iYWw6IHt9
LAotICAgICAgICBhZGQ6IGZ1bmN0aW9uKGUsIG4sIHIsIG8sIGEpIHsKLSAgICAgICAgICAgIHZh
ciBzLCB1LCBsLCBjLCBwLCBmLCBkLCBoLCBnLCBtLCB5LCB2ID0gYi5fZGF0YShlKTsKLSAgICAg
ICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAgci5oYW5kbGVyICYmIChjID0gciwgciA9
IGMuaGFuZGxlciwgYSA9IGMuc2VsZWN0b3IpLCByLmd1aWQgfHwgKHIuZ3VpZCA9IGIuZ3VpZCsr
KSwgKHUgPSB2LmV2ZW50cykgfHwgKHUgPSB2LmV2ZW50cyA9IHt9KSwgKGYgPSB2LmhhbmRsZSkg
fHwgKGYgPSB2LmhhbmRsZSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHR5cGVvZiBiID09PSBpIHx8IGUgJiYgYi5ldmVudC50cmlnZ2VyZWQgPT09IGUudHlwZSA/
IHQgOiBiLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGYuZWxlbSwgYXJndW1lbnRzKQotICAgICAgICAg
ICAgICAgIH0sIGYuZWxlbSA9IGUpLCBuID0gKG4gfHwgIiIpLm1hdGNoKHcpIHx8IFsiIl0sIGwg
PSBuLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB3aGlsZSAobC0tKQotICAgICAgICAgICAgICAg
ICAgICBzID0gcnQuZXhlYyhuW2xdKSB8fCBbXSwgZyA9IHkgPSBzWzFdLCBtID0gKHNbMl0gfHwg
IiIpLnNwbGl0KCIuIikuc29ydCgpLCBwID0gYi5ldmVudC5zcGVjaWFsW2ddIHx8IHt9LCBnID0g
KGEgPyBwLmRlbGVnYXRlVHlwZSA6IHAuYmluZFR5cGUpIHx8IGcsIHAgPSBiLmV2ZW50LnNwZWNp
YWxbZ10gfHwge30sIGQgPSBiLmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IGcs
Ci0gICAgICAgICAgICAgICAgICAgIG9yaWdUeXBlOiB5LAotICAgICAgICAgICAgICAgICAgICBk
YXRhOiBvLAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiByLAotICAgICAgICAgICAgICAg
ICAgICBndWlkOiByLmd1aWQsCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBhLAotICAg
ICAgICAgICAgICAgICAgICBuZWVkc0NvbnRleHQ6IGEgJiYgYi5leHByLm1hdGNoLm5lZWRzQ29u
dGV4dC50ZXN0KGEpLAotICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG0uam9pbigiLiIp
Ci0gICAgICAgICAgICAgICAgfSwgYyksIChoID0gdVtnXSkgfHwgKGggPSB1W2ddID0gW10sIGgu
ZGVsZWdhdGVDb3VudCA9IDAsIHAuc2V0dXAgJiYgcC5zZXR1cC5jYWxsKGUsIG8sIG0sIGYpIT09
ITEgfHwgKGUuYWRkRXZlbnRMaXN0ZW5lciA/IGUuYWRkRXZlbnRMaXN0ZW5lcihnLCBmLCAhMSkg
OiBlLmF0dGFjaEV2ZW50ICYmIGUuYXR0YWNoRXZlbnQoIm9uIiArIGcsIGYpKSksIHAuYWRkICYm
IChwLmFkZC5jYWxsKGUsIGQpLCBkLmhhbmRsZXIuZ3VpZCB8fCAoZC5oYW5kbGVyLmd1aWQgPSBy
Lmd1aWQpKSwgYSA/IGguc3BsaWNlKGguZGVsZWdhdGVDb3VudCsrLCAwLCBkKSA6IGgucHVzaChk
KSwgYi5ldmVudC5nbG9iYWxbZ109ITA7Ci0gICAgICAgICAgICAgICAgZSA9IG51bGwKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihlLCB0LCBuLCBy
LCBpKSB7Ci0gICAgICAgICAgICB2YXIgbywgYSwgcywgdSwgbCwgYywgcCwgZiwgZCwgaCwgZywg
bSA9IGIuaGFzRGF0YShlKSAmJiBiLl9kYXRhKGUpOwotICAgICAgICAgICAgaWYgKG0gJiYgKGMg
PSBtLmV2ZW50cykpIHsKLSAgICAgICAgICAgICAgICB0ID0gKHQgfHwgIiIpLm1hdGNoKHcpIHx8
IFsiIl0sIGwgPSB0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICB3aGlsZSAobC0tKQotICAgICAg
ICAgICAgICAgICAgICBpZiAocyA9IHJ0LmV4ZWModFtsXSkgfHwgW10sIGQgPSBnID0gc1sxXSwg
aCA9IChzWzJdIHx8ICIiKS5zcGxpdCgiLiIpLnNvcnQoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgLCBkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBiLmV2ZW50LnNwZWNpYWxbZF0gfHwg
e30sIGQgPSAociA/IHAuZGVsZWdhdGVUeXBlIDogcC5iaW5kVHlwZSkgfHwgZCwgZiA9IGNbZF0g
fHwgW10sIHMgPSBzWzJdICYmIFJlZ0V4cCgiKF58XFwuKSIgKyBoLmpvaW4oIlxcLig/Oi4qXFwu
fCkiKSArICIoXFwufCQpIiksIHUgPSBvID0gZi5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAg
IHdoaWxlIChvLS0pCi0gICAgICAgICAgICAgICAgICAgICAgICBhID0gZltvXSwgIWkgJiYgZyAh
PT0gYS5vcmlnVHlwZSB8fCBuICYmIG4uZ3VpZCAhPT0gYS5ndWlkIHx8IHMmJiFzLnRlc3QoYS5u
YW1lc3BhY2UpIHx8IHIgJiYgciAhPT0gYS5zZWxlY3RvciAmJiAoIioqIiAhPT0gciB8fCFhLnNl
bGVjdG9yKSB8fCAoZi5zcGxpY2UobywgMSksIGEuc2VsZWN0b3IgJiYgZi5kZWxlZ2F0ZUNvdW50
LS0sIHAucmVtb3ZlICYmIHAucmVtb3ZlLmNhbGwoZSwgYSkpOwotICAgICAgICAgICAgICAgICAg
ICB1JiYhZi5sZW5ndGggJiYgKHAudGVhcmRvd24gJiYgcC50ZWFyZG93bi5jYWxsKGUsIGgsIG0u
aGFuZGxlKSE9PSExIHx8IGIucmVtb3ZlRXZlbnQoZSwgZCwgbS5oYW5kbGUpLCBkZWxldGUgY1tk
XSkKLSAgICAgICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoZCBp
biBjKQotICAgICAgICAgICAgICAgICAgICAgICAgYi5ldmVudC5yZW1vdmUoZSwgZCArIHRbbF0s
IG4sIHIsICEwKTsKLSAgICAgICAgICAgICAgICBiLmlzRW1wdHlPYmplY3QoYykgJiYgKGRlbGV0
ZSBtLmhhbmRsZSwgYi5fcmVtb3ZlRGF0YShlLCAiZXZlbnRzIikpCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKG4sIHIsIGksIGEpIHsKLSAgICAg
ICAgICAgIHZhciBzLCB1LCBsLCBjLCBwLCBmLCBkLCBoID0gW2kgfHwgb10sIGcgPSB5LmNhbGwo
biwgInR5cGUiKSA/IG4udHlwZTogbiwgbSA9IHkuY2FsbChuLCAibmFtZXNwYWNlIikgPyBuLm5h
bWVzcGFjZS5zcGxpdCgiLiIpOiBbXTsKLSAgICAgICAgICAgIGlmIChsID0gZiA9IGkgPSBpIHx8
IG8sIDMgIT09IGkubm9kZVR5cGUgJiYgOCAhPT0gaS5ub2RlVHlwZSYmIW50LnRlc3QoZyArIGIu
ZXZlbnQudHJpZ2dlcmVkKSAmJiAoZy5pbmRleE9mKCIuIikgPj0gMCAmJiAobSA9IGcuc3BsaXQo
Ii4iKSwgZyA9IG0uc2hpZnQoKSwgbS5zb3J0KCkKLSAgICAgICAgICAgICAgICApLCB1ID0gMCA+
IGcuaW5kZXhPZigiOiIpICYmICJvbiIgKyBnLCBuID0gbltiLmV4cGFuZG9dID8gbiA6IG5ldyBi
LkV2ZW50KGcsICJvYmplY3QiID09IHR5cGVvZiBuICYmIG4pLCBuLmlzVHJpZ2dlcj0hMCwgbi5u
YW1lc3BhY2UgPSBtLmpvaW4oIi4iKSwgbi5uYW1lc3BhY2VfcmUgPSBuLm5hbWVzcGFjZSA/IFJl
Z0V4cCgiKF58XFwuKSIgKyBtLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBu
dWxsLCBuLnJlc3VsdCA9IHQsIG4udGFyZ2V0IHx8IChuLnRhcmdldCA9IGkpLCByID0gbnVsbCA9
PSByID8gW25dIDogYi5tYWtlQXJyYXkociwgW25dKSwgcCA9IGIuZXZlbnQuc3BlY2lhbFtnXSB8
fCB7fSwgYSB8fCFwLnRyaWdnZXIgfHwgcC50cmlnZ2VyLmFwcGx5KGksIHIpIT09ITEpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhJiYhcC5ub0J1YmJsZSYmIWIuaXNXaW5kb3coaSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChjID0gcC5kZWxlZ2F0ZVR5cGUgfHwgZywgbnQudGVzdChj
ICsgZykgCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAobCA9IGwucGFyZW50Tm9kZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGw7Ci0gICAgICAgICAgICAgICAgICAgIGwgPSBsLnBhcmVudE5v
ZGUpaC5wdXNoKGwpLCBmID0gbDsKLSAgICAgICAgICAgICAgICAgICAgZiA9PT0gKGkub3duZXJE
b2N1bWVudCB8fCBvKSAmJiBoLnB1c2goZi5kZWZhdWx0VmlldyB8fCBmLnBhcmVudFdpbmRvdyB8
fCBlKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkID0gMDsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAoKGwgPSBoW2QrK10pJiYhbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKQot
ICAgICAgICAgICAgICAgICAgICBuLnR5cGUgPSBkID4gMSA/IGMgOiBwLmJpbmRUeXBlIHx8IGcs
IHMgPSAoYi5fZGF0YShsLCAiZXZlbnRzIikgfHwge30pW24udHlwZV0gJiYgYi5fZGF0YShsLCAi
aGFuZGxlIiksIHMgJiYgcy5hcHBseShsLCByKSwgcyA9IHUgJiYgbFt1XSwgcyAmJiBiLmFjY2Vw
dERhdGEobCkgJiYgcy5hcHBseSAmJiBzLmFwcGx5KGwsIHIpPT09ITEgJiYgbi5wcmV2ZW50RGVm
YXVsdCgpOwotICAgICAgICAgICAgICAgIGlmIChuLnR5cGUgPSBnLCAhKGEgfHwgbi5pc0RlZmF1
bHRQcmV2ZW50ZWQoKSB8fCBwLl9kZWZhdWx0ICYmIHAuX2RlZmF1bHQuYXBwbHkoaS5vd25lckRv
Y3VtZW50LCByKSE9PSExIHx8ICJjbGljayIgPT09IGcgJiYgYi5ub2RlTmFtZShpLCAiYSIpIHx8
IWIuYWNjZXB0RGF0YShpKSB8fCF1IHx8IWlbZ10gfHwgYi5pc1dpbmRvdyhpKQotICAgICAgICAg
ICAgICAgICAgICApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBpW3VdLCBmICYmIChpW3Vd
ID0gbnVsbCksIGIuZXZlbnQudHJpZ2dlcmVkID0gZzsKLSAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlbZ10oKQotICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoICh2KSB7fQotICAgICAgICAgICAgICAgICAgICBiLmV2ZW50LnRyaWdnZXJlZCA9IHQs
IGYgJiYgKGlbdV0gPSBmKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gbi5yZXN1bHQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgZGlzcGF0Y2g6
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGUgPSBiLmV2ZW50LmZpeChlKTsKLSAgICAgICAg
ICAgIHZhciBuLCByLCBpLCBvLCBhLCBzID0gW10sIHUgPSBoLmNhbGwoYXJndW1lbnRzKSwgbCA9
IChiLl9kYXRhKHRoaXMsICJldmVudHMiKSB8fCB7fSlbZS50eXBlXSB8fCBbXSwgYyA9IGIuZXZl
bnQuc3BlY2lhbFtlLnR5cGVdIHx8IHt9OwotICAgICAgICAgICAgaWYgKHVbMF0gPSBlLCBlLmRl
bGVnYXRlVGFyZ2V0ID0gdGhpcywgIWMucHJlRGlzcGF0Y2ggfHwgYy5wcmVEaXNwYXRjaC5jYWxs
KHRoaXMsIGUpIT09ITEpIHsKLSAgICAgICAgICAgICAgICBzID0gYi5ldmVudC5oYW5kbGVycy5j
YWxsKHRoaXMsIGUsIGwpLCBuID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKG8gPSBzW24r
K10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUu
Y3VycmVudFRhcmdldCA9IG8uZWxlbSwgYSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgoaSA9IG8uaGFuZGxlcnNbYSsrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk
KCkpKCFlLm5hbWVzcGFjZV9yZSB8fCBlLm5hbWVzcGFjZV9yZS50ZXN0KGkubmFtZXNwYWNlKSkg
JiYgKGUuaGFuZGxlT2JqID0gaSwgZS5kYXRhID0gaS5kYXRhLCByID0gKChiLmV2ZW50LnNwZWNp
YWxbaS5vcmlnVHlwZV0gfHwge30pLmhhbmRsZSB8fCBpLmhhbmRsZXIpLmFwcGx5KG8uZWxlbSwg
dSksIHIgIT09IHQgJiYgKGUucmVzdWx0ID0gcik9PT0hMSAmJiAoZS5wcmV2ZW50RGVmYXVsdCgp
LCBlLnN0b3BQcm9wYWdhdGlvbigpKSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGMucG9zdERpc3BhdGNoICYmIGMucG9zdERpc3BhdGNoLmNhbGwodGhpcywgZSks
IGUucmVzdWx0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIGhhbmRsZXJzOiBm
dW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICB2YXIgciwgaSwgbywgYSwgcyA9IFtdLCB1ID0g
bi5kZWxlZ2F0ZUNvdW50LCBsID0gZS50YXJnZXQ7Ci0gICAgICAgICAgICBpZiAodSAmJiBsLm5v
ZGVUeXBlICYmICghZS5idXR0b24gfHwgImNsaWNrIiAhPT0gZS50eXBlKSkKLSAgICAgICAgICAg
ICAgICBmb3IgKDsgbCAhPSB0aGlzOyBsID0gbC5wYXJlbnROb2RlIHx8IHRoaXMpCi0gICAgICAg
ICAgICAgICAgICAgIGlmICgxID09PSBsLm5vZGVUeXBlICYmIChsLmRpc2FibGVkIT09ITAgfHwg
ImNsaWNrIiAhPT0gZS50eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChvID0g
W10sIGEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdSA+IGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhKyspaSA9IG5bYV0sIHIgPSBpLnNlbGVjdG9yICsgIiAiLCBvW3JdID09PSB0
ICYmIChvW3JdID0gaS5uZWVkc0NvbnRleHQgPyBiKHIsIHRoaXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLmluZGV4KGwpID49IDAgOiBiLmZpbmQociwgdGhpcywgbnVsbCwgW2xdKS5s
ZW5ndGgpLCBvW3JdICYmIG8ucHVzaChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
Lmxlbmd0aCAmJiBzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
OiBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyczogbwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBuLmxlbmd0aCA+IHUgJiYgcy5wdXNoKHsKLSAgICAgICAgICAgICAgICBlbGVt
OiB0aGlzLAotICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBuLnNsaWNlKHUpCi0gICAgICAgICAg
ICB9KSwgcwotICAgICAgICB9LAotICAgICAgICBmaXg6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAg
ICAgIGlmIChlW2IuZXhwYW5kb10pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGU7Ci0gICAgICAg
ICAgICB2YXIgdCwgbiwgciwgaSA9IGUudHlwZSwgYSA9IGUsIHMgPSB0aGlzLmZpeEhvb2tzW2ld
OwotICAgICAgICAgICAgcyB8fCAodGhpcy5maXhIb29rc1tpXSA9IHMgPSB0dC50ZXN0KGkpID8g
dGhpcy5tb3VzZUhvb2tzIDogZXQudGVzdChpKSA/IHRoaXMua2V5SG9va3MgOiB7fSksIHIgPSBz
LnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcykgOiB0aGlzLnByb3BzLCBlID0gbmV3
IGIuRXZlbnQoYSksIHQgPSByLmxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlICh0LS0pCi0gICAg
ICAgICAgICAgICAgbiA9IHJbdF0sIGVbbl0gPSBhW25dOwotICAgICAgICAgICAgcmV0dXJuIGUu
dGFyZ2V0IHx8IChlLnRhcmdldCA9IGEuc3JjRWxlbWVudCB8fCBvKSwgMyA9PT0gZS50YXJnZXQu
bm9kZVR5cGUgJiYgKGUudGFyZ2V0ID0gZS50YXJnZXQucGFyZW50Tm9kZSksIGUubWV0YUtleT0h
IWUubWV0YUtleSwgcy5maWx0ZXIgPyBzLmZpbHRlcihlLCBhKSA6IGUKLSAgICAgICAgfSwKLSAg
ICAgICAgcHJvcHM6ICJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRh
cmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGlt
ZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksCi0gICAgICAgIGZpeEhvb2tzOiB7fSwKLSAg
ICAgICAga2V5SG9va3M6IHsKLSAgICAgICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkg
a2V5Q29kZSIuc3BsaXQoIiAiKSwKLSAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsID09IGUud2hpY2ggJiYgKGUud2hpY2ggPSBu
dWxsICE9IHQuY2hhckNvZGUgPyB0LmNoYXJDb2RlIDogdC5rZXlDb2RlKSwgZQotICAgICAgICAg
ICAgfQotICAgICAgICB9LAotICAgICAgICBtb3VzZUhvb2tzOiB7Ci0gICAgICAgICAgICBwcm9w
czogImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9m
ZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSwK
LSAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAgIHZh
ciByLCBpLCBhLCBzID0gbi5idXR0b24sIHUgPSBuLmZyb21FbGVtZW50OwotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsID09IGUucGFnZVggJiYgbnVsbCAhPSBuLmNsaWVudFggJiYgKGkgPSBl
LnRhcmdldC5vd25lckRvY3VtZW50IHx8IG8sIGEgPSBpLmRvY3VtZW50RWxlbWVudCwgciA9IGku
Ym9keSwgZS5wYWdlWCA9IG4uY2xpZW50WCArIChhICYmIGEuc2Nyb2xsTGVmdCB8fCByICYmIHIu
c2Nyb2xsTGVmdCB8fCAwKSAtIChhICYmIGEuY2xpZW50TGVmdCB8fCByICYmIHIuY2xpZW50TGVm
dCB8fCAwKSwgZS5wYWdlWSA9IG4uY2xpZW50WSArIChhICYmIGEuc2Nyb2xsVG9wIHx8IHIgJiYg
ci5zY3JvbGxUb3AgfHwgMCkgLSAoYSAmJiBhLmNsaWVudFRvcCB8fCByICYmIHIuY2xpZW50VG9w
IHx8IDApKSwgIWUucmVsYXRlZFRhcmdldCAmJiB1ICYmIChlLnJlbGF0ZWRUYXJnZXQgPSB1ID09
PSBlLnRhcmdldCA/IG4udG9FbGVtZW50IDogdSksIGUud2hpY2ggfHwgcyA9PT0gdCB8fCAoZS53
aGljaCA9IDEgJiBzID8gMSA6IDIgJiBzID8gMyA6IDQgJiBzID8gMiA6IDApLCBlCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHNwZWNpYWw6IHsKLSAgICAgICAgICAgIGxvYWQ6
IHsKLSAgICAgICAgICAgICAgICBub0J1YmJsZTogITAKLSAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICBjbGljazogewotICAgICAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYi5ub2RlTmFtZSh0aGlzLCAiaW5wdXQiKSAmJiAiY2hl
Y2tib3giID09PSB0aGlzLnR5cGUgJiYgdGhpcy5jbGljayA/ICh0aGlzLmNsaWNrKCksICExKSA6
IHQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZm9jdXM6
IHsKLSAgICAgICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMgIT09IG8uYWN0aXZlRWxlbWVudCAmJiB0aGlzLmZvY3VzKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5mb2N1cygpLCAhMQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNp
biIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBibHVyOiB7Ci0gICAgICAgICAgICAgICAg
dHJpZ2dlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzID09
PSBvLmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5ibHVyID8gKHRoaXMuYmx1cigpLCAhMSkgOiB0Ci0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291
dCIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKLSAgICAgICAg
ICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZS5yZXN1bHQgIT09IHQgJiYgKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGUucmVzdWx0
KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAg
c2ltdWxhdGU6IGZ1bmN0aW9uKGUsIHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpID0gYi5l
eHRlbmQobmV3IGIuRXZlbnQsIG4sIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBlLAotICAgICAg
ICAgICAgICAgIGlzU2ltdWxhdGVkOiAhMCwKLSAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50
OiB7fQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByID8gYi5ldmVudC50cmlnZ2VyKGks
IG51bGwsIHQpIDogYi5ldmVudC5kaXNwYXRjaC5jYWxsKHQsIGkpLCBpLmlzRGVmYXVsdFByZXZl
bnRlZCgpICYmIG4ucHJldmVudERlZmF1bHQoKQotICAgICAgICB9Ci0gICAgfSwgYi5yZW1vdmVF
dmVudCA9IG8ucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAg
ICAgZS5yZW1vdmVFdmVudExpc3RlbmVyICYmIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCBuLCAh
MSkKLSAgICB9IDogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAgICB2YXIgciA9ICJvbiIgKyB0
OwotICAgICAgICBlLmRldGFjaEV2ZW50ICYmICh0eXBlb2YgZVtyXSA9PT0gaSAmJiAoZVtyXSA9
IG51bGwpLCBlLmRldGFjaEV2ZW50KHIsIG4pKQotICAgIH0sIGIuRXZlbnQgPSBmdW5jdGlvbihl
LCBuKSB7Ci0gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYi5FdmVudCA/IChlICYmIGUu
dHlwZSA/ICh0aGlzLm9yaWdpbmFsRXZlbnQgPSBlLCB0aGlzLnR5cGUgPSBlLnR5cGUsIHRoaXMu
aXNEZWZhdWx0UHJldmVudGVkID0gZS5kZWZhdWx0UHJldmVudGVkIHx8IGUucmV0dXJuVmFsdWU9
PT0hMSB8fCBlLmdldFByZXZlbnREZWZhdWx0ICYmIGUuZ2V0UHJldmVudERlZmF1bHQoKSA/IGl0
IDogb3QpIDogdGhpcy50eXBlID0gZSwgbiAmJiBiLmV4dGVuZCh0aGlzLCBuKSwgdGhpcy50aW1l
U3RhbXAgPSBlICYmIGUudGltZVN0YW1wIHx8IGIubm93KCksIHRoaXNbYi5leHBhbmRvXT0hMCwg
dCkgOiBuZXcgYi5FdmVudChlLCBuKQotICAgIH0sIGIuRXZlbnQucHJvdG90eXBlID0gewotICAg
ICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IG90LAotICAgICAgICBpc1Byb3BhZ2F0aW9uU3RvcHBl
ZDogb3QsCi0gICAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiBvdCwKLSAgICAg
ICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGUgPSB0aGlz
Lm9yaWdpbmFsRXZlbnQ7Ci0gICAgICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGl0
LCBlICYmIChlLnByZXZlbnREZWZhdWx0ID8gZS5wcmV2ZW50RGVmYXVsdCgpIDogZS5yZXR1cm5W
YWx1ZT0hMSkKLSAgICAgICAgfSwKLSAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotICAgICAgICAgICAg
dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGl0LCBlICYmIChlLnN0b3BQcm9wYWdhdGlvbiAm
JiBlLnN0b3BQcm9wYWdhdGlvbigpLCBlLmNhbmNlbEJ1YmJsZT0hMCkKLSAgICAgICAgfSwKLSAg
ICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBpdCwgdGhpcy5zdG9wUHJvcGFn
YXRpb24oKQotICAgICAgICB9Ci0gICAgfSwgYi5lYWNoKHsKLSAgICAgICAgbW91c2VlbnRlcjog
Im1vdXNlb3ZlciIsCi0gICAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKLSAgICB9LCBmdW5j
dGlvbihlLCB0KSB7Ci0gICAgICAgIGIuZXZlbnQuc3BlY2lhbFtlXSA9IHsKLSAgICAgICAgICAg
IGRlbGVnYXRlVHlwZTogdCwKLSAgICAgICAgICAgIGJpbmRUeXBlOiB0LAotICAgICAgICAgICAg
aGFuZGxlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG4sIHIgPSB0aGlzLCBp
ID0gZS5yZWxhdGVkVGFyZ2V0LCBvID0gZS5oYW5kbGVPYmo7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICghaSB8fCBpICE9PSByJiYhYi5jb250YWlucyhyLCBpKSkgJiYgKGUudHlwZSA9IG8ub3Jp
Z1R5cGUsIG4gPSBvLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZS50eXBlID0gdCks
IG4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pLCBiLnN1cHBvcnQuc3VibWl0QnVi
YmxlcyB8fCAoYi5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKLSAgICAgICAgc2V0dXA6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGIubm9kZU5hbWUodGhpcywgImZvcm0iKT8hMSA6
IChiLmV2ZW50LmFkZCh0aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IiwgZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZhciBuID0gZS50YXJnZXQsIHIgPSBiLm5vZGVO
YW1lKG4sICJpbnB1dCIpIHx8IGIubm9kZU5hbWUobiwgImJ1dHRvbiIpID8gbi5mb3JtOiB0Owot
ICAgICAgICAgICAgICAgIHImJiFiLl9kYXRhKHIsICJzdWJtaXRCdWJibGVzIikgJiYgKGIuZXZl
bnQuYWRkKHIsICJzdWJtaXQuX3N1Ym1pdCIsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZS5fc3VibWl0X2J1YmJsZT0hMAotICAgICAgICAgICAgICAgIH0pLCBiLl9kYXRhKHIs
ICJzdWJtaXRCdWJibGVzIiwgITApKQotICAgICAgICAgICAgfSksIHQpCi0gICAgICAgIH0sCi0g
ICAgICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgZS5fc3VibWl0
X2J1YmJsZSAmJiAoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsIHRoaXMucGFyZW50Tm9kZSYmIWUu
aXNUcmlnZ2VyICYmIGIuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwg
ZSwgITApKQotICAgICAgICB9LAotICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gYi5ub2RlTmFtZSh0aGlzLCAiZm9ybSIpPyExIDogKGIuZXZlbnQucmVt
b3ZlKHRoaXMsICIuX3N1Ym1pdCIpLCB0KQotICAgICAgICB9Ci0gICAgfSksIGIuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzIHx8IChiLmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewotICAgICAgICBzZXR1
cDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gWi50ZXN0KHRoaXMubm9kZU5hbWUp
ID8gKCgiY2hlY2tib3giID09PSB0aGlzLnR5cGUgfHwgInJhZGlvIiA9PT0gdGhpcy50eXBlKSAm
JiAoYi5ldmVudC5hZGQodGhpcywgInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbihl
KSB7Ci0gICAgICAgICAgICAgICAgImNoZWNrZWQiID09PSBlLm9yaWdpbmFsRXZlbnQucHJvcGVy
dHlOYW1lICYmICh0aGlzLl9qdXN0X2NoYW5nZWQ9ITApCi0gICAgICAgICAgICB9KSwgYi5ldmVu
dC5hZGQodGhpcywgImNsaWNrLl9jaGFuZ2UiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fanVzdF9jaGFuZ2VkJiYhZS5pc1RyaWdnZXIgJiYgKHRoaXMuX2p1c3RfY2hhbmdl
ZD0hMSksIGIuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsIHRoaXMsIGUsICEwKQotICAgICAgICAg
ICAgfSkpLCAhMSkgOiAoYi5ldmVudC5hZGQodGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2Ui
LCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBlLnRhcmdldDsKLSAgICAg
ICAgICAgICAgICBaLnRlc3QodC5ub2RlTmFtZSkmJiFiLl9kYXRhKHQsICJjaGFuZ2VCdWJibGVz
IikgJiYgKGIuZXZlbnQuYWRkKHQsICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgIXRoaXMucGFyZW50Tm9kZSB8fCBlLmlzU2ltdWxhdGVkIHx8IGUu
aXNUcmlnZ2VyIHx8IGIuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsIHRoaXMucGFyZW50Tm9kZSwg
ZSwgITApCi0gICAgICAgICAgICAgICAgfSksIGIuX2RhdGEodCwgImNoYW5nZUJ1YmJsZXMiLCAh
MCkpCi0gICAgICAgICAgICB9KSwgdCkKLSAgICAgICAgfSwKLSAgICAgICAgaGFuZGxlOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgbiA9IGUudGFyZ2V0OwotICAgICAgICAgICAgcmV0
dXJuIHRoaXMgIT09IG4gfHwgZS5pc1NpbXVsYXRlZCB8fCBlLmlzVHJpZ2dlciB8fCAicmFkaW8i
ICE9PSBuLnR5cGUgJiYgImNoZWNrYm94IiAhPT0gbi50eXBlID8gZS5oYW5kbGVPYmouaGFuZGxl
ci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdAotICAgICAgICB9LAotICAgICAgICB0ZWFyZG93
bjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5ldmVudC5yZW1vdmUodGhpcywg
Ii5fY2hhbmdlIiksICFaLnRlc3QodGhpcy5ub2RlTmFtZSkKLSAgICAgICAgfQotICAgIH0pLCBi
LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgfHwgYi5lYWNoKHsKLSAgICAgICAgZm9jdXM6ICJmb2N1
c2luIiwKLSAgICAgICAgYmx1cjogImZvY3Vzb3V0IgotICAgIH0sIGZ1bmN0aW9uKGUsIHQpIHsK
LSAgICAgICAgdmFyIG4gPSAwLCByID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgYi5ldmVu
dC5zaW11bGF0ZSh0LCBlLnRhcmdldCwgYi5ldmVudC5maXgoZSksICEwKQotICAgICAgICB9Owot
ICAgICAgICBiLmV2ZW50LnNwZWNpYWxbdF0gPSB7Ci0gICAgICAgICAgICBzZXR1cDogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgMCA9PT0gbisrJiZvLmFkZEV2ZW50TGlzdGVuZXIoZSwg
ciwgITApCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIDA9PT0tLW4gJiYgby5yZW1vdmVFdmVudExpc3RlbmVyKGUsIHIs
ICEwKQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSksIGIuZm4uZXh0ZW5kKHsKLSAg
ICAgICAgb246IGZ1bmN0aW9uKGUsIG4sIHIsIGksIG8pIHsKLSAgICAgICAgICAgIHZhciBhLCBz
OwotICAgICAgICAgICAgaWYgKCJvYmplY3QiID09IHR5cGVvZiBlKSB7Ci0gICAgICAgICAgICAg
ICAgInN0cmluZyIgIT0gdHlwZW9mIG4gJiYgKHIgPSByIHx8IG4sIG4gPSB0KTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGEgaW4gZSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vbihhLCBuLCBy
LCBlW2FdLCBvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG51bGwgPT0gciAmJiBudWxsID09IGkgPyAoaSA9IG4sIHIgPSBuID0g
dCkgOiBudWxsID09IGkgJiYgKCJzdHJpbmciID09IHR5cGVvZiBuID8gKGkgPSByLCByID0gdCkg
OiAoaSA9IHIsIHIgPSBuLCBuID0gdCkpLCBpPT09ITEpCi0gICAgICAgICAgICAgICAgaSA9IG90
OwotICAgICAgICAgICAgZWxzZSBpZiAoIWkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgICAgICByZXR1cm4gMSA9PT0gbyAmJiAocyA9IGksIGkgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIoKS5vZmYoZSksIHMuYXBwbHkodGhpcywgYXJndW1l
bnRzKQotICAgICAgICAgICAgfSwgaS5ndWlkID0gcy5ndWlkIHx8IChzLmd1aWQgPSBiLmd1aWQr
KykpLCB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgYi5ldmVudC5hZGQo
dGhpcywgZSwgaSwgciwgbikKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIG9u
ZTogZnVuY3Rpb24oZSwgdCwgbiwgcikgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oZSwg
dCwgbiwgciwgMSkKLSAgICAgICAgfSwKLSAgICAgICAgb2ZmOiBmdW5jdGlvbihlLCBuLCByKSB7
Ci0gICAgICAgICAgICB2YXIgaSwgbzsKLSAgICAgICAgICAgIGlmIChlICYmIGUucHJldmVudERl
ZmF1bHQgJiYgZS5oYW5kbGVPYmopCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPSBlLmhhbmRs
ZU9iaiwgYihlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2UgPyBpLm9yaWdUeXBlICsg
Ii4iICsgaS5uYW1lc3BhY2UgOiBpLm9yaWdUeXBlLCBpLnNlbGVjdG9yLCBpLmhhbmRsZXIpLCB0
aGlzOwotICAgICAgICAgICAgaWYgKCJvYmplY3QiID09IHR5cGVvZiBlKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChvIGluIGUpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKG8sIG4sIGVb
b10pOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gKG49PT0hMSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBuKSAmJiAociA9IG4s
IG4gPSB0KSwgcj09PSExICYmIChyID0gb3QpLCB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgYi5ldmVudC5yZW1vdmUodGhpcywgZSwgciwgbikKLSAgICAgICAgICAgIH0p
Ci0gICAgICAgIH0sCi0gICAgICAgIGJpbmQ6IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9uKGUsIG51bGwsIHQsIG4pCi0gICAgICAgIH0sCi0gICAgICAgIHVu
YmluZDogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMub2ZmKGUsIG51
bGwsIHQpCi0gICAgICAgIH0sCi0gICAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbihlLCB0LCBuLCBy
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5vbih0LCBlLCBuLCByKQotICAgICAgICB9LAot
ICAgICAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICByZXR1
cm4gMSA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMub2ZmKGUsICIqKiIpIDogdGhpcy5vZmYo
dCwgZSB8fCAiKioiLCBuKQotICAgICAgICB9LAotICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbihl
LCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIGIuZXZlbnQudHJpZ2dlcihlLCB0LCB0aGlzKQotICAgICAgICAgICAgfSkKLSAg
ICAgICAgfSwKLSAgICAgICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAg
ICAgICAgIHZhciByID0gdGhpc1swXTsKLSAgICAgICAgICAgIHJldHVybiByID8gYi5ldmVudC50
cmlnZ2VyKGUsIG4sIHIsICEwKSA6IHQKLSAgICAgICAgfQotICAgIH0pLCBmdW5jdGlvbihlLCB0
KSB7Ci0gICAgICAgIHZhciBuLCByLCBpLCBvLCBhLCBzLCB1LCBsLCBjLCBwLCBmLCBkLCBoLCBn
LCBtLCB5LCB2LCB4ID0gInNpenpsZSIgKy0gbmV3IERhdGUsIHcgPSBlLmRvY3VtZW50LCBUID0g
e30sIE4gPSAwLCBDID0gMCwgayA9IGl0KCksIEUgPSBpdCgpLCBTID0gaXQoKSwgQSA9IHR5cGVv
ZiB0LCBqID0gMTw8MzEsIEQgPSBbXSwgTCA9IEQucG9wLCBIID0gRC5wdXNoLCBxID0gRC5zbGlj
ZSwgTSA9IEQuaW5kZXhPZiB8fCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9IDAs
IG4gPSB0aGlzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAoOyBuID4gdDsgdCsrKQotICAgICAg
ICAgICAgICAgIGlmICh0aGlzW3RdID09PSBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dDsKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICB9LCBfID0gIltcXHgyMFxcdFxcclxc
blxcZl0iLCBGID0gIig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwgTyA9IEYucmVw
bGFjZSgidyIsICJ3IyIpLCBCID0gIihbKl4kfCF+XT89KSIsIFAgPSAiXFxbIiArIF8gKyAiKigi
ICsgRiArICIpIiArIF8gKyAiKig/OiIgKyBCICsgXyArICIqKD86KFsnXCJdKSgoPzpcXFxcLnxb
XlxcXFxdKSo/KVxcM3woIiArIE8gKyAiKXwpfCkiICsgXyArICIqXFxdIiwgUiA9ICI6KCIgKyBG
ICsgIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15c
XFxcKClbXFxdXXwiICsgUC5yZXBsYWNlKDMsIDgpICsgIikqKXwuKilcXCl8KSIsIFcgPSBSZWdF
eHAoIl4iICsgXyArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgXyArICIrJCIsICJn
IiksICQgPSBSZWdFeHAoIl4iICsgXyArICIqLCIgKyBfICsgIioiKSwgSSA9IFJlZ0V4cCgiXiIg
KyBfICsgIiooW1xceDIwXFx0XFxyXFxuXFxmPit+XSkiICsgXyArICIqIiksIHogPSBSZWdFeHAo
UiksIFggPSBSZWdFeHAoIl4iICsgTyArICIkIiksIFUgPSB7Ci0gICAgICAgICAgICBJRDogUmVn
RXhwKCJeIygiICsgRiArICIpIiksCi0gICAgICAgICAgICBDTEFTUzogUmVnRXhwKCJeXFwuKCIg
KyBGICsgIikiKSwKLSAgICAgICAgICAgIE5BTUU6IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIg
KyBGICsgIilbJ1wiXT9cXF0iKSwKLSAgICAgICAgICAgIFRBRzogUmVnRXhwKCJeKCIgKyBGLnJl
cGxhY2UoInciLCAidyoiKSArICIpIiksCi0gICAgICAgICAgICBBVFRSOiBSZWdFeHAoIl4iICsg
UCksCi0gICAgICAgICAgICBQU0VVRE86IFJlZ0V4cCgiXiIgKyBSKSwKLSAgICAgICAgICAgIENI
SUxEOiBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10
eXBlKSg/OlxcKCIgKyBfICsgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgXyArICIq
KD86KFsrLV18KSIgKyBfICsgIiooXFxkKyl8KSkiICsgXyArICIqXFwpfCkiLCAiaSIpLAotICAg
ICAgICAgICAgbmVlZHNDb250ZXh0OiBSZWdFeHAoIl4iICsgXyArICIqWz4rfl18OihldmVufG9k
ZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsgXyArICIqKCg/Oi1cXGQpP1xcZCop
IiArIF8gKyAiKlxcKXwpKD89W14tXXwkKSIsICJpIikKLSAgICAgICAgfSwgViA9IC9bXHgyMFx0
XHJcblxmXSpbK35dLywgWSA9IC9eW157XStce1xzKlxbbmF0aXZlIGNvZGUvLCBKID0gL14oPzoj
KFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywgRyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRh
cmVhfGJ1dHRvbikkL2ksIFEgPSAvXmhcZCQvaSwgSyA9IC8nfFxcL2csIFogPSAvXD1bXHgyMFx0
XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywgZXQgPSAvXFwoW1xkYS1mQS1G
XXsxLDZ9W1x4MjBcdFxyXG5cZl0/fC4pL2csIHR0ID0gZnVuY3Rpb24oZSwgdCkgewotICAgICAg
ICAgICAgdmFyIG4gPSAiMHgiICsgdC02NTUzNjsKLSAgICAgICAgICAgIHJldHVybiBuICE9PSBu
ID8gdCA6IDAgPiBuID8gU3RyaW5nLmZyb21DaGFyQ29kZShuICsgNjU1MzYpIDogU3RyaW5nLmZy
b21DaGFyQ29kZSg1NTI5NiB8IG4+PjEwLCA1NjMyMCB8IDEwMjMgJiBuKQotICAgICAgICB9Owot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgcS5jYWxsKHcuZG9jdW1lbnRFbGVtZW50LmNoaWxk
Tm9kZXMsIDApWzBdLm5vZGVUeXBlCi0gICAgICAgIH0gY2F0Y2ggKG50KSB7Ci0gICAgICAgICAg
ICBxID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZhciB0LCBuID0gW107Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKHQgPSB0aGlzW2UrK10pCi0gICAgICAgICAgICAgICAgICAgIG4u
cHVzaCh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbgotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGZ1bmN0aW9uIHJ0KGUpIHsKLSAgICAgICAgICAgIHJldHVybiBZLnRlc3Qo
ZSArICIiKQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGl0KCkgewotICAgICAgICAgICAg
dmFyIGUsIHQgPSBbXTsKLSAgICAgICAgICAgIHJldHVybiBlID0gZnVuY3Rpb24obiwgcikgewot
ICAgICAgICAgICAgICAgIHJldHVybiB0LnB1c2gobiArPSAiICIpID4gaS5jYWNoZUxlbmd0aCAm
JiBkZWxldGUgZVt0LnNoaWZ0KCldLCBlW25dID0gcgotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGZ1bmN0aW9uIG90KGUpIHsKLSAgICAgICAgICAgIHJldHVybiBlW3hdPSEwLCBl
Ci0gICAgICAgIH0KLSAgICAgICAgZnVuY3Rpb24gYXQoZSkgewotICAgICAgICAgICAgdmFyIHQg
PSBwLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZSh0KQotICAgICAgICAgICAgfSBjYXRjaCAobikgewotICAgICAgICAgICAg
ICAgIHJldHVybiAhMQotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0
ID0gbnVsbAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIHN0KGUs
IHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpLCBvLCBhLCBzLCB1LCBsLCBmLCBnLCBtLCB2
OwotICAgICAgICAgICAgaWYgKCh0ID8gdC5vd25lckRvY3VtZW50IHx8IHQgOiB3KSAhPT0gcCAm
JiBjKHQpLCB0ID0gdCB8fCBwLCBuID0gbiB8fCBbXSwgIWUgfHwgInN0cmluZyIgIT0gdHlwZW9m
IGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICBpZiAoMSAhPT0gKHMg
PSB0Lm5vZGVUeXBlKSAmJiA5ICE9PSBzKQotICAgICAgICAgICAgICAgIHJldHVybiBbXTsKLSAg
ICAgICAgICAgIGlmICghZCYmIXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA9IEouZXhlYyhl
KSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGEgPSBpWzFdKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoOSA9PT0gcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
ID0gdC5nZXRFbGVtZW50QnlJZChhKSwgIW8gfHwhby5wYXJlbnROb2RlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG8uaWQgPT09IGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbi5wdXNoKG8pLCBuCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHQub3duZXJEb2N1bWVudCAmJiAobyA9IHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChh
KSkgJiYgeSh0LCBvKSAmJiBvLmlkID09PSBhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuLnB1c2gobyksIG4KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpWzJdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBILmFwcGx5KG4sIHEuY2FsbCh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpLCAwKSks
IG47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gaVszXSkgJiYgVC5nZXRC
eUNsYXNzTmFtZSAmJiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBILmFwcGx5KG4sIHEuY2FsbCh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoYSksIDApKSwgbgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKFQucXNhJiYhaC50ZXN0KGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmPSEw
LCBnID0geCwgbSA9IHQsIHYgPSA5ID09PSBzICYmIGUsIDEgPT09IHMgJiYgIm9iamVjdCIgIT09
IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsID0gZnQoZSksIChmID0gdC5nZXRBdHRyaWJ1dGUoImlk
IikpID8gZyA9IGYucmVwbGFjZShLLCAiXFwkJiIpIDogdC5zZXRBdHRyaWJ1dGUoImlkIiwgZyks
IGcgPSAiW2lkPSciICsgZyArICInXSAiLCB1ID0gbC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAodS0tKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxbdV0gPSBn
ICsgZHQobFt1XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtID0gVi50ZXN0KGUpICYmIHQu
cGFyZW50Tm9kZSB8fCB0LCB2ID0gbC5qb2luKCIsIikKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAodikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEguYXBwbHkobiwgcS5jYWxsKG0u
cXVlcnlTZWxlY3RvckFsbCh2KSwgMCkpLCBuCi0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGIpIHt9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgZiB8fCB0LnJlbW92ZUF0
dHJpYnV0ZSgiaWQiKQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHd0KGUucmVwbGFjZShXLCAiJDEiKSwg
dCwgbiwgcikKLSAgICAgICAgfQotICAgICAgICBhID0gc3QuaXNYTUwgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICB2YXIgdCA9IGUgJiYgKGUub3duZXJEb2N1bWVudCB8fCBlKS5kb2N1bWVu
dEVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gdCA/ICJIVE1MIiAhPT0gdC5ub2RlTmFtZSA6
ICExCi0gICAgICAgIH0sIGMgPSBzdC5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIHZhciBuID0gZSA/IGUub3duZXJEb2N1bWVudCB8fCBlOiB3OwotICAgICAgICAgICAg
cmV0dXJuIG4gIT09IHAgJiYgOSA9PT0gbi5ub2RlVHlwZSAmJiBuLmRvY3VtZW50RWxlbWVudCA/
IChwID0gbiwgZiA9IG4uZG9jdW1lbnRFbGVtZW50LCBkID0gYShuKSwgVC50YWdOYW1lTm9Db21t
ZW50cyA9IGF0KGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS5hcHBlbmRD
aGlsZChuLmNyZWF0ZUNvbW1lbnQoIiIpKSwgIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5s
ZW5ndGgKLSAgICAgICAgICAgIH0pLCBULmF0dHJpYnV0ZXMgPSBhdChmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICAgICAgZS5pbm5lckhUTUwgPSAiPHNlbGVjdD48L3NlbGVjdD4iOwotICAgICAg
ICAgICAgICAgIHZhciB0ID0gdHlwZW9mIGUubGFzdENoaWxkLmdldEF0dHJpYnV0ZSgibXVsdGlw
bGUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iICE9PSB0ICYmICJzdHJpbmci
ICE9PSB0Ci0gICAgICAgICAgICB9KSwgVC5nZXRCeUNsYXNzTmFtZSA9IGF0KGZ1bmN0aW9uKGUp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZS5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlk
ZGVuIGUnPjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IiwgZS5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lICYmIGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA/IChlLmxh
c3RDaGlsZC5jbGFzc05hbWUgPSAiZSIsIDIgPT09IGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgi
ZSIpLmxlbmd0aCkgOiAhMQotICAgICAgICAgICAgfSksIFQuZ2V0QnlOYW1lID0gYXQoZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgICAgIGUuaWQgPSB4ICsgMCwgZS5pbm5lckhUTUwgPSAiPGEg
bmFtZT0nIiArIHggKyAiJz48L2E+PGRpdiBuYW1lPSciICsgeCArICInPjwvZGl2PiIsIGYuaW5z
ZXJ0QmVmb3JlKGUsIGYuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBuLmdl
dEVsZW1lbnRzQnlOYW1lICYmIG4uZ2V0RWxlbWVudHNCeU5hbWUoeCkubGVuZ3RoID09PSAyICsg
bi5nZXRFbGVtZW50c0J5TmFtZSh4ICsgMCkubGVuZ3RoOwotICAgICAgICAgICAgICAgIHJldHVy
biBULmdldElkTm90TmFtZT0hbi5nZXRFbGVtZW50QnlJZCh4KSwgZi5yZW1vdmVDaGlsZChlKSwg
dAotICAgICAgICAgICAgfSksIGkuYXR0ckhhbmRsZSA9IGF0KGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZS5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiIsIGUuZmly
c3RDaGlsZCAmJiB0eXBlb2YgZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSAhPT0gQSAmJiAiIyIg
PT09IGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKQotICAgICAgICAgICAgfSkgPyB7
fSA6IHsKLSAgICAgICAgICAgICAgICBocmVmOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlLmdldEF0dHJpYnV0ZSgiaHJlZiIsIDIpCi0gICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICB0eXBlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlLmdldEF0dHJpYnV0ZSgidHlwZSIpCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSwgVC5nZXRJZE5vdE5hbWUgPyAoaS5maW5kLklEID0gZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCAhPT0gQSYmIWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0LmdldEVsZW1lbnRCeUlkKGUpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbiAmJiBuLnBhcmVudE5vZGUgPyBbbl0gOiBbXQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIGkuZmlsdGVyLklEID0gZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgICAgIHZhciB0ID0gZS5yZXBsYWNlKGV0LCB0dCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUu
Z2V0QXR0cmlidXRlKCJpZCIpID09PSB0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSkgOiAoaS5maW5kLklEID0gZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAgIGlmICh0
eXBlb2Ygbi5nZXRFbGVtZW50QnlJZCAhPT0gQSYmIWQpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHIgPSBuLmdldEVsZW1lbnRCeUlkKGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ciA/IHIuaWQgPT09IGUgfHwgdHlwZW9mIHIuZ2V0QXR0cmlidXRlTm9kZSAhPT0gQSAmJiByLmdl
dEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGUgPyBbcl0gOiB0IDogW10KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LCBpLmZpbHRlci5JRCA9IGZ1bmN0aW9uKGUpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdCA9IGUucmVwbGFjZShldCwgdHQpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuID0gdHlwZW9m
IGUuZ2V0QXR0cmlidXRlTm9kZSAhPT0gQSAmJiBlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuICYmIG4udmFsdWUgPT09IHQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KSwgaS5maW5kLlRBRyA9IFQudGFnTmFtZU5vQ29tbWVudHMg
PyBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBuLmdldEVs
ZW1lbnRzQnlUYWdOYW1lICE9PSBBID8gbi5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSA6IHQKLSAg
ICAgICAgICAgIH0gOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIG4sIHIg
PSBbXSwgaSA9IDAsIG8gPSB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOwotICAgICAgICAgICAg
ICAgIGlmICgiKiIgPT09IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4gPSBvW2kr
K10pCi0gICAgICAgICAgICAgICAgICAgICAgICAxID09PSBuLm5vZGVUeXBlICYmIHIucHVzaChu
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHIKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG8KLSAgICAgICAgICAgIH0sIGkuZmluZC5OQU1FID0gVC5nZXRC
eU5hbWUgJiYgZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Yg
bi5nZXRFbGVtZW50c0J5TmFtZSAhPT0gQSA/IG4uZ2V0RWxlbWVudHNCeU5hbWUobmFtZSkgOiB0
Ci0gICAgICAgICAgICB9LCBpLmZpbmQuQ0xBU1MgPSBULmdldEJ5Q2xhc3NOYW1lICYmIGZ1bmN0
aW9uKGUsIG4pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG4uZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSA9PT0gQSB8fCBkID8gdCA6IG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKQot
ICAgICAgICAgICAgfSwgZyA9IFtdLCBoID0gWyI6Zm9jdXMiXSwgKFQucXNhID0gcnQobi5xdWVy
eVNlbGVjdG9yQWxsKSkgJiYgKGF0KGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBlLmlu
bmVySFRNTCA9ICI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+
IiwgZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoIHx8IGgucHVzaCgiXFxb
IiArIF8gKyAiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2Vs
ZWN0ZWR8dmFsdWUpIiksIGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggfHwg
aC5wdXNoKCI6Y2hlY2tlZCIpCi0gICAgICAgICAgICB9KSwgYXQoZnVuY3Rpb24oZSkgewotICAg
ICAgICAgICAgICAgIGUuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nIGk9JycvPiIs
IGUucXVlcnlTZWxlY3RvckFsbCgiW2lePScnXSIpLmxlbmd0aCAmJiBoLnB1c2goIlsqXiRdPSIg
KyBfICsgIiooPzpcIlwifCcnKSIpLCBlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVu
Z3RoIHx8IGgucHVzaCgiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiksIGUucXVlcnlTZWxlY3RvckFs
bCgiKiw6eCIpLCBoLnB1c2goIiwuKjoiKQotICAgICAgICAgICAgfSkpLCAoVC5tYXRjaGVzU2Vs
ZWN0b3IgPSBydChtID0gZi5tYXRjaGVzU2VsZWN0b3IgfHwgZi5tb3pNYXRjaGVzU2VsZWN0b3Ig
fHwgZi53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZi5vTWF0Y2hlc1NlbGVjdG9yIHx8IGYubXNN
YXRjaGVzU2VsZWN0b3IpKSAmJiBhdChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgVC5k
aXNjb25uZWN0ZWRNYXRjaCA9IG0uY2FsbChlLCAiZGl2IiksIG0uY2FsbChlLCAiW3MhPScnXTp4
IiksIGcucHVzaCgiIT0iLCBSKQotICAgICAgICAgICAgfSksIGggPSBSZWdFeHAoaC5qb2luKCJ8
IikpLCBnID0gUmVnRXhwKGcuam9pbigifCIpKSwgeSA9IHJ0KGYuY29udGFpbnMpIHx8IGYuY29t
cGFyZURvY3VtZW50UG9zaXRpb24gPyBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIG4gPSA5ID09PSBlLm5vZGVUeXBlID8gZS5kb2N1bWVudEVsZW1lbnQ6IGUsIHIgPSB0ICYm
IHQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZSA9PT0gciB8fCEoIXIgfHwg
MSAhPT0gci5ub2RlVHlwZSB8fCEobi5jb250YWlucyA/IG4uY29udGFpbnMocikgOiBlLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uICYmIDE2ICYgZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkp
Ci0gICAgICAgICAgICB9IDogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgICAgIGlmICh0
KQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA9IHQucGFyZW50Tm9kZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ID09PSBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gITEKLSAgICAgICAgICAgIH0sIHYg
PSBmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAg
ICAgICAgIHZhciByOwotICAgICAgICAgICAgICAgIHJldHVybiBlID09PSB0ID8gKHU9ITAsIDAp
IDogKHIgPSB0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGUuY29tcGFyZURvY3VtZW50UG9z
aXRpb24gJiYgZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSkgPyAxICYgciB8fCBlLnBhcmVu
dE5vZGUgJiYgMTEgPT09IGUucGFyZW50Tm9kZS5ub2RlVHlwZSA/IGUgPT09IG4gfHwgeSh3LCBl
KT8tMSA6IHQgPT09IG4gfHwgeSh3LCB0KSA/IDEgOiAwIDogNCAmIHI/LTEgOiAxIDogZS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbj8tMSA6IDEKLSAgICAgICAgICAgIH0gOiBmdW5jdGlvbihlLCB0
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHIsIGkgPSAwLCBvID0gZS5wYXJlbnROb2RlLCBhID0g
dC5wYXJlbnROb2RlLCBzID0gW2VdLCBsID0gW3RdOwotICAgICAgICAgICAgICAgIGlmIChlID09
PSB0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdT0hMCwgMDsKLSAgICAgICAgICAgICAg
ICBpZiAoIW8gfHwhYSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPT09IG4/LTEgOiB0
ID09PSBuID8gMSA6IG8/LTEgOiBhID8gMSA6IDA7Ci0gICAgICAgICAgICAgICAgaWYgKG8gPT09
IGEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dChlLCB0KTsKLSAgICAgICAgICAgICAg
ICByID0gZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAociA9IHIucGFyZW50Tm9kZSkKLSAgICAg
ICAgICAgICAgICAgICAgcy51bnNoaWZ0KHIpOwotICAgICAgICAgICAgICAgIHIgPSB0OwotICAg
ICAgICAgICAgICAgIHdoaWxlIChyID0gci5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAgICAg
ICBsLnVuc2hpZnQocik7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHNbaV0gPT09IGxbaV0pCi0g
ICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA/IHV0KHNb
aV0sIGxbaV0pIDogc1tpXSA9PT0gdz8tMSA6IGxbaV0gPT09IHcgPyAxIDogMAotICAgICAgICAg
ICAgfSwgdT0hMSwgWzAsIDBdLnNvcnQodiksIFQuZGV0ZWN0RHVwbGljYXRlcyA9IHUsIHApIDog
cAotICAgICAgICB9LCBzdC5tYXRjaGVzID0gZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAg
cmV0dXJuIHN0KGUsIG51bGwsIG51bGwsIHQpCi0gICAgICAgIH0sIHN0Lm1hdGNoZXNTZWxlY3Rv
ciA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIGlmICgoZS5vd25lckRvY3VtZW50IHx8
IGUpICE9PSBwICYmIGMoZSksIHQgPSB0LnJlcGxhY2UoWiwgIj0nJDEnXSIpCi0gICAgICAgICAg
ICAgICAgLCAhKCFULm1hdGNoZXNTZWxlY3RvciB8fCBkIHx8IGcgJiYgZy50ZXN0KHQpIHx8IGgu
dGVzdCh0KSkpdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgbiA9IG0uY2FsbChlLCB0KTsKLSAg
ICAgICAgICAgICAgICBpZiAobiB8fCBULmRpc2Nvbm5lY3RlZE1hdGNoIHx8IGUuZG9jdW1lbnQg
JiYgMTEgIT09IGUuZG9jdW1lbnQubm9kZVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBuCi0gICAgICAgICAgICB9IGNhdGNoIChyKSB7fQotICAgICAgICAgICAgcmV0dXJuIHN0KHQs
IHAsIG51bGwsIFtlXSkubGVuZ3RoID4gMAotICAgICAgICB9LCBzdC5jb250YWlucyA9IGZ1bmN0
aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiAoZS5vd25lckRvY3VtZW50IHx8IGUpICE9
PSBwICYmIGMoZSksIHkoZSwgdCkKLSAgICAgICAgfSwgc3QuYXR0ciA9IGZ1bmN0aW9uKGUsIHQp
IHsKLSAgICAgICAgICAgIHZhciBuOwotICAgICAgICAgICAgcmV0dXJuIChlLm93bmVyRG9jdW1l
bnQgfHwgZSkgIT09IHAgJiYgYyhlKSwgZCB8fCAodCA9IHQudG9Mb3dlckNhc2UoKSksIChuID0g
aS5hdHRySGFuZGxlW3RdKSA/IG4oZSkgOiBkIHx8IFQuYXR0cmlidXRlcyA/IGUuZ2V0QXR0cmli
dXRlKHQpIDogKChuID0gZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSB8fCBlLmdldEF0dHJpYnV0ZSh0
KSkgJiYgZVt0XT09PSEwID8gdCA6IG4gJiYgbi5zcGVjaWZpZWQgPyBuLnZhbHVlIDogbnVsbAot
ICAgICAgICB9LCBzdC5lcnJvciA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHRocm93IEVy
cm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgZSkKLSAgICAg
ICAgfSwgc3QudW5pcXVlU29ydCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0LCBu
ID0gW10sIHIgPSAxLCBpID0gMDsKLSAgICAgICAgICAgIGlmICh1PSFULmRldGVjdER1cGxpY2F0
ZXMsIGUuc29ydCh2KQotICAgICAgICAgICAgICAgICwgdSkgewotICAgICAgICAgICAgICAgIGZv
ciAoOyB0ID0gZVtyXTsgcisrKQotICAgICAgICAgICAgICAgICAgICB0ID09PSBlW3ItMV0gJiYg
KGkgPSBuLnB1c2gocikpOwotICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAg
ICAgICAgICAgIGUuc3BsaWNlKG5baV0sIDEpCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gZQotICAgICAgICB9OwotICAgICAgICBmdW5jdGlvbiB1dChlLCB0KSB7Ci0gICAgICAg
ICAgICB2YXIgbiA9IHQgJiYgZSwgciA9IG4gJiYgKH50LnNvdXJjZUluZGV4IHx8IGopIC0gKH5l
LnNvdXJjZUluZGV4IHx8IGopOwotICAgICAgICAgICAgaWYgKHIpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgICAgICBpZiAobikKLSAgICAgICAgICAgICAgICB3aGlsZSAobiA9
IG4ubmV4dFNpYmxpbmcpCi0gICAgICAgICAgICAgICAgICAgIGlmIChuID09PSB0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgcmV0dXJuIGUgPyAxIDog
LTEKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBsdChlKSB7Ci0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24odCkgewotICAgICAgICAgICAgICAgIHZhciBuID0gdC5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAiaW5wdXQiID09PSBuICYmIHQudHlw
ZSA9PT0gZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9uIGN0KGUp
IHsKLSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgdmFy
IG4gPSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgi
aW5wdXQiID09PSBuIHx8ICJidXR0b24iID09PSBuKSAmJiB0LnR5cGUgPT09IGUKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBwdChlKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gb3QoZnVuY3Rpb24odCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0ID0rIHQsIG90
KGZ1bmN0aW9uKG4sIHIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGksIG8gPSBlKFtdLCBu
Lmxlbmd0aCwgdCksIGEgPSBvLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGEt
LSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5baSA9IG9bYV1dICYmIChuW2ldPSEocltpXSA9
IG5baV0pKQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICB9KQotICAgICAgICB9Ci0g
ICAgICAgIG8gPSBzdC5nZXRUZXh0ID0gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIHQs
IG4gPSAiIiwgciA9IDAsIGkgPSBlLm5vZGVUeXBlOwotICAgICAgICAgICAgaWYgKGkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoMSA9PT0gaSB8fCA5ID09PSBpIHx8IDExID09PSBpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZS50ZXh0Q29udGVudCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnRleHRDb250ZW50OwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGUgPSBlLmZpcnN0Q2hpbGQ7IGU7IGUgPSBlLm5leHRTaWJsaW5nKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbiArPSBvKGUpCi0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoMyA9PT0gaSB8fCA0ID09PSBpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGUubm9kZVZhbHVlCi0gICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgZm9yICg7
IHQgPSBlW3JdOyByKyspCi0gICAgICAgICAgICAgICAgICAgIG4gKz0gbyh0KTsKLSAgICAgICAg
ICAgIHJldHVybiBuCi0gICAgICAgIH0sIGkgPSBzdC5zZWxlY3RvcnMgPSB7Ci0gICAgICAgICAg
ICBjYWNoZUxlbmd0aDogNTAsCi0gICAgICAgICAgICBjcmVhdGVQc2V1ZG86IG90LAotICAgICAg
ICAgICAgbWF0Y2g6IFUsCi0gICAgICAgICAgICBmaW5kOiB7fSwKLSAgICAgICAgICAgIHJlbGF0
aXZlOiB7Ci0gICAgICAgICAgICAgICAgIj4iOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRpcjog
InBhcmVudE5vZGUiLAotICAgICAgICAgICAgICAgICAgICBmaXJzdDogITAKLSAgICAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgICAgICIgIjogewotICAgICAgICAgICAgICAgICAgICBkaXI6
ICJwYXJlbnROb2RlIgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgIisiOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGRpcjogInByZXZpb3VzU2libGluZyIsCi0gICAgICAgICAg
ICAgICAgICAgIGZpcnN0OiAhMAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
In4iOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRpcjogInByZXZpb3VzU2libGluZyIKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcHJlRmlsdGVyOiB7Ci0g
ICAgICAgICAgICAgICAgQVRUUjogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZVsxXSA9IGVbMV0ucmVwbGFjZShldCwgdHQpLCBlWzNdID0gKGVbNF0gfHwgZVs1XSB8
fCAiIikucmVwbGFjZShldCwgdHQpLCAifj0iID09PSBlWzJdICYmIChlWzNdID0gIiAiICsgZVsz
XSArICIgIiksIGUuc2xpY2UoMCwgNCkKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgIENISUxEOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlWzFd
ID0gZVsxXS50b0xvd2VyQ2FzZSgpLCAibnRoIiA9PT0gZVsxXS5zbGljZSgwLCAzKSA/IChlWzNd
IHx8IHN0LmVycm9yKGVbMF0pLCBlWzRdID0rIChlWzRdID8gZVs1XSArIChlWzZdIHx8IDEpIDog
MiAqICgiZXZlbiIgPT09IGVbM10gfHwgIm9kZCIgPT09IGVbM10pKSwgZVs1XSA9KyAoZVs3XSAr
IGVbOF0gfHwgIm9kZCIgPT09IGVbM10pKSA6IGVbM10gJiYgc3QuZXJyb3IoZVswXSksIGUKLSAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIFBTRVVETzogZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgdCwgbj0hZVs1XSAmJiBlWzJdOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVS5DSElMRC50ZXN0KGVbMF0pID8gbnVsbCA6IChlWzRdID8gZVsyXSA9
IGVbNF0gOiBuICYmIHoudGVzdChuKSAmJiAodCA9IGZ0KG4sICEwKSkgJiYgKHQgPSBuLmluZGV4
T2YoIikiLCBuLmxlbmd0aCAtIHQpIC0gbi5sZW5ndGgpICYmIChlWzBdID0gZVswXS5zbGljZSgw
LCB0KSwgZVsyXSA9IG4uc2xpY2UoMCwgdCkpLCBlLnNsaWNlKDAsIDMpKQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBmaWx0ZXI6IHsKLSAgICAgICAgICAg
ICAgICBUQUc6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIqIiA9
PT0gZSA/IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwCi0g
ICAgICAgICAgICAgICAgICAgIH0gOiAoZSA9IGUucmVwbGFjZShldCwgdHQpLnRvTG93ZXJDYXNl
KCksIGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0Lm5vZGVO
YW1lICYmIHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZQotICAgICAgICAgICAgICAgICAg
ICB9KQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgQ0xBU1M6IGZ1bmN0aW9u
KGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBrW2UgKyAiICJdOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdCB8fCAodCA9IFJlZ0V4cCgiKF58IiArIF8gKyAiKSIgKyBlICsg
IigiICsgXyArICJ8JCkiKSkgJiYgayhlLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdC50ZXN0KGUuY2xhc3NOYW1lIHx8IHR5cGVvZiBlLmdldEF0dHJpYnV0
ZSAhPT0gQSAmJiBlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIikKLSAgICAgICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIEFUVFI6IGZ1bmN0
aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gc3QuYXR0cihyLCBlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsID09IGkgPyAiIT0iID09PSB0IDogdCA/IChpICs9
ICIiLCAiPSIgPT09IHQgPyBpID09PSBuIDogIiE9IiA9PT0gdCA/IGkgIT09IG4gOiAiXj0iID09
PSB0ID8gbiAmJiAwID09PSBpLmluZGV4T2YobikgOiAiKj0iID09PSB0ID8gbiAmJiBpLmluZGV4
T2Yobik+LTEgOiAiJD0iID09PSB0ID8gbiAmJiBpLnNsaWNlKCAtIG4ubGVuZ3RoKSA9PT0gbiA6
ICJ+PSIgPT09IHQgPyAoIiAiICsgaSArICIgIikuaW5kZXhPZihuKT4tMSA6ICJ8PSIgPT09IHQg
PyBpID09PSBuIHx8IGkuc2xpY2UoMCwgbi5sZW5ndGggKyAxKSA9PT0gbiArICItIiA6ICExKSA6
ICEwCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgIENISUxEOiBmdW5jdGlvbihlLCB0LCBuLCByLCBpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBvID0gIm50aCIgIT09IGUuc2xpY2UoMCwgMyksIGEgPSAibGFzdCIgIT09IGUuc2xp
Y2UoLTQpLCBzID0gIm9mLXR5cGUiID09PSB0OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MSA9PT0gciAmJiAwID09PSBpID8gZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICEhZS5wYXJlbnROb2RlCi0gICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlv
bih0LCBuLCB1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCwgYywgcCwgZiwgZCwg
aCwgZyA9IG8gIT09IGEgPyAibmV4dFNpYmxpbmciOiAicHJldmlvdXNTaWJsaW5nIiwgbSA9IHQu
cGFyZW50Tm9kZSwgeSA9IHMgJiYgdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCB2PSF1JiYhczsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGcp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPSBwW2ddKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID8gcC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSB5IDogMSA9PT0gcC5ub2RlVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICExOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaCA9IGcgPSAib25seSIgPT09IGUmJiFoICYmICJuZXh0U2libGluZyIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gITAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGggPSBbYSA/IG0uZmlyc3RDaGlsZDogbS5sYXN0Q2hpbGRd
LCBhICYmIHYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG1beF0gfHwg
KG1beF0gPSB7fSksIGwgPSBjW2VdIHx8IFtdLCBkID0gbFswXSA9PT0gTiAmJiBsWzFdLCBmID0g
bFswXSA9PT0gTiAmJiBsWzJdLCBwID0gZCAmJiBtLmNoaWxkTm9kZXNbZF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwPSsrZCAmJiBwICYmIHBbZ10gfHwgKGYgPSBk
ID0gMCkgfHwgaC5wb3AoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKWlm
ICgxID09PSBwLm5vZGVUeXBlJiYrK2YgJiYgcCA9PT0gdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY1tlXSA9IFtOLCBkLCBmXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgJiYgKGwgPSAodFt4XSB8
fCAodFt4XSA9IHt9KSlbZV0pICYmIGxbMF0gPT09IE4pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGYgPSBsWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwPSsrZCAmJiBwICYmIHBbZ10g
fHwgKGYgPSBkID0gMCkgfHwgaC5wb3AoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKWlmICgocyA/IHAubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0geSA6IDEgPT09IHAu
bm9kZVR5cGUpJiYrK2YgJiYgKHYgJiYgKChwW3hdIHx8IChwW3hdID0ge30pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIClbZV0gPSBbTiwgZl0pLCBwID09PSB0KSlicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZiAtPSBpLCBmID09PSByIHx8IDAgPT09
IGYlciAmJiBmIC8gciA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIFBTRVVETzog
ZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbiwgciA9IGkucHNldWRv
c1tlXSB8fCBpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXSB8fCBzdC5lcnJvcigidW5zdXBw
b3J0ZWQgcHNldWRvOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByW3hdID8g
cih0KSA6IHIubGVuZ3RoID4gMSA/IChuID0gW2UsIGUsICIiLCB0XSwgaS5zZXRGaWx0ZXJzLmhh
c093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSkgPyBvdChmdW5jdGlvbihlLCBuKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaSwgbyA9IHIoZSwgdCksIGEgPSBvLmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhLS0paSA9IE0uY2FsbChlLCBvW2FdKSwgZVtp
XT0hKG5baV0gPSBvW2FdKQotICAgICAgICAgICAgICAgICAgICB9KSA6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByKGUsIDAsIG4pCi0gICAgICAgICAgICAg
ICAgICAgIH0pIDogcgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICBwc2V1ZG9zOiB7Ci0gICAgICAgICAgICAgICAgbm90OiBvdChmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciB0ID0gW10sIG4gPSBbXSwgciA9IHMoZS5yZXBsYWNlKFcs
ICIkMSIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJbeF0gPyBvdChmdW5jdGlvbihl
LCB0LCBuLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbywgYSA9IHIoZSwgbnVs
bCwgaSwgW10pLCBzID0gZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
cy0tKShvID0gYVtzXSkgJiYgKGVbc109ISh0W3NdID0gbykpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9KSA6IGZ1bmN0aW9uKGUsIGksIG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0WzBdID0gZSwgcih0LCBudWxsLCBvLCBuKSwgIW4ucG9wKCkKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0pLCBoYXMgOiBvdChmdW5jdGlvbihlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3QoZSwgdCkubGVuZ3RoID4gMAotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSksIGNvbnRhaW5zOiBvdChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKHQudGV4dENvbnRlbnQgfHwgdC5pbm5lclRleHQgfHwgbyh0KSkuaW5kZXhPZihlKT4t
MQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSksIGxhbmc6IG90KGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFgudGVzdChlIHx8ICIiKSB8
fCBzdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIiArIGUpLCBlID0gZS5yZXBsYWNlKGV0LCB0
dCkudG9Mb3dlckNhc2UoKSwgZnVuY3Rpb24odCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG47Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobiA9IGQgPyB0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKSB8fCB0LmdldEF0
dHJpYnV0ZSgibGFuZyIpIDogdC5sYW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbiA9IG4udG9Mb3dlckNhc2UoKSwgbiA9PT0gZSB8fCAwID09PSBuLmluZGV4T2Yo
ZSArICItIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHQgPSB0LnBhcmVudE5v
ZGUpICYmIDEgPT09IHQubm9kZVR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICExCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwgdGFyZ2V0OiBm
dW5jdGlvbih0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBuID0gZS5sb2NhdGlvbiAmJiBl
LmxvY2F0aW9uLmhhc2g7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuICYmIG4uc2xpY2Uo
MSkgPT09IHQuaWQKLSAgICAgICAgICAgICAgICB9LCByb290OiBmdW5jdGlvbihlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlID09PSBmCi0gICAgICAgICAgICAgICAgfSwgZm9jdXM6
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPT09IHAuYWN0aXZl
RWxlbWVudCAmJiAoIXAuaGFzRm9jdXMgfHwgcC5oYXNGb2N1cygpKSYmISEoZS50eXBlIHx8IGUu
aHJlZnx8fmUudGFiSW5kZXgpCi0gICAgICAgICAgICAgICAgfSwgZW5hYmxlZDogZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5kaXNhYmxlZD09PSExCi0gICAgICAg
ICAgICAgICAgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMAotICAgICAgICAgICAgICAgIH0sIGNoZWNrZWQ6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW5wdXQiID09PSB0JiYhIWUuY2hl
Y2tlZCB8fCAib3B0aW9uIiA9PT0gdCYmISFlLnNlbGVjdGVkCi0gICAgICAgICAgICAgICAgfSwg
c2VsZWN0ZWQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucGFy
ZW50Tm9kZSAmJiBlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgZS5zZWxlY3RlZD09PSEwCi0g
ICAgICAgICAgICAgICAgfSwgZW1wdHk6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBlID0gZS5uZXh0U2libGluZykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlLm5vZGVOYW1lID4gIkAiIHx8IDMgPT09IGUubm9kZVR5cGUg
fHwgNCA9PT0gZS5ub2RlVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ITE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMAotICAgICAgICAgICAgICAgIH0sIHBh
cmVudDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWkucHNldWRv
cy5lbXB0eShlKQotICAgICAgICAgICAgICAgIH0sIGhlYWRlcjogZnVuY3Rpb24oZSkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUS50ZXN0KGUubm9kZU5hbWUpCi0gICAgICAgICAgICAg
ICAgfSwgaW5wdXQ6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEcu
dGVzdChlLm5vZGVOYW1lKQotICAgICAgICAgICAgICAgIH0sIGJ1dHRvbjogZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnB1dCIgPT09IHQgJiYgImJ1dHRvbiIgPT09
IGUudHlwZSB8fCAiYnV0dG9uIiA9PT0gdAotICAgICAgICAgICAgICAgIH0sIHRleHQ6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHQ7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiAiaW5wdXQiID09PSBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgInRleHQiID09
PSBlLnR5cGUgJiYgKG51bGwgPT0gKHQgPSBlLmdldEF0dHJpYnV0ZSgidHlwZSIpKSB8fCB0LnRv
TG93ZXJDYXNlKCkgPT09IGUudHlwZSkKLSAgICAgICAgICAgICAgICB9LCBmaXJzdDogcHQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMF0KLSAgICAgICAgICAgICAg
ICB9KSwgbGFzdDogcHQoZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gW3QtMV0KLSAgICAgICAgICAgICAgICB9KSwgZXE6IHB0KGZ1bmN0aW9uKGUsIHQsIG4pIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFswID4gbiA/IG4gKyB0OiBuXQotICAgICAgICAg
ICAgICAgIH0pLCBldmVuOiBwdChmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IHQgPiBuOyBuICs9IDIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBlLnB1c2gobik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlCi0gICAgICAgICAgICAgICAgfSksIG9kZDogcHQoZnVuY3Rpb24oZSwgdCkgewotICAg
ICAgICAgICAgICAgICAgICB2YXIgbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyB0
ID4gbjsgbiArPSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgZS5wdXNoKG4pOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZQotICAgICAgICAgICAgICAgIH0pLCBsdDogcHQoZnVuY3Rp
b24oZSwgdCwgbikgewotICAgICAgICAgICAgICAgICAgICB2YXIgciA9IDAgPiBuID8gbiArIHQ6
IG47Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyAtLXIgPj0gMDspCi0gICAgICAgICAgICAg
ICAgICAgICAgICBlLnB1c2gocik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlCi0gICAg
ICAgICAgICAgICAgfSksIGd0OiBwdChmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciByID0gMCA+IG4gPyBuICsgdDogbjsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICg7IHQ+KytyOykKLSAgICAgICAgICAgICAgICAgICAgICAgIGUucHVzaChyKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGUKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgfQot
ICAgICAgICB9OyBmb3IgKG4gaW57Ci0gICAgICAgICAgICByYWRpbyA6ICEwLCBjaGVja2JveCA6
ICEwLCBmaWxlIDogITAsIHBhc3N3b3JkIDogITAsIGltYWdlIDogITAKLSAgICAgICAgfSlpLnBz
ZXVkb3Nbbl0gPSBsdChuKTsKLSAgICAgICAgZm9yIChuIGluewotICAgICAgICAgICAgc3VibWl0
OiAhMCwKLSAgICAgICAgICAgIHJlc2V0OiAhMAotICAgICAgICB9KWkucHNldWRvc1tuXSA9IGN0
KG4pOwotICAgICAgICBmdW5jdGlvbiBmdChlLAotICAgICAgICB0KSB7Ci0gICAgICAgICAgICB2
YXIgbiwKLSAgICAgICAgICAgIHIsCi0gICAgICAgICAgICBvLAotICAgICAgICAgICAgYSwKLSAg
ICAgICAgICAgIHMsCi0gICAgICAgICAgICB1LAotICAgICAgICAgICAgbCwKLSAgICAgICAgICAg
IGMgPSBFW2UgKyAiICJdOwotICAgICAgICAgICAgaWYgKGMpcmV0dXJuIHQgPyAwOiBjLnNsaWNl
KDApOwotICAgICAgICAgICAgcyA9IGUsCi0gICAgICAgICAgICB1ID0gW10sCi0gICAgICAgICAg
ICBsID0gaS5wcmVGaWx0ZXI7Ci0gICAgICAgICAgICB3aGlsZSAocykgewotICAgICAgICAgICAg
ICAgICghbiB8fCAociA9ICQuZXhlYyhzKSkpICYmIChyICYmIChzID0gcy5zbGljZShyWzBdLmxl
bmd0aCkgfHwgcyksCi0gICAgICAgICAgICAgICAgdS5wdXNoKG8gPSBbXSkpLAotICAgICAgICAg
ICAgICAgIG49ITEsCi0gICAgICAgICAgICAgICAgKHIgPSBJLmV4ZWMocykpICYmIChuID0gci5z
aGlmdCgpLAotICAgICAgICAgICAgICAgIG8ucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgIHZh
bHVlOiBuLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiByWzBdLnJlcGxhY2UoVywKLSAgICAg
ICAgICAgICAgICAgICAgIiAiKQotICAgICAgICAgICAgICAgIH0pLCBzID0gcy5zbGljZShuLmxl
bmd0aCkpOwotICAgICAgICAgICAgICAgIGZvciAoYSBpbiBpLmZpbHRlcikKLSAgICAgICAgICAg
ICAgICAgICAgIShyID0gVVthXS5leGVjKHMpKSB8fCBsW2FdJiYhKHIgPSBsW2FdKHIpKSB8fCAo
biA9IHIuc2hpZnQoKSwgby5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDog
biwgdHlwZSA6IGEsIG1hdGNoZXMgOiByCi0gICAgICAgICAgICAgICAgICAgIH0pLCBzID0gcy5z
bGljZShuLmxlbmd0aCkpOwotICAgICAgICAgICAgICAgIGlmICghbikKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0ID8gcy5sZW5n
dGggOiBzID8gc3QuZXJyb3IoZSkgOiBFKGUsIHUpLnNsaWNlKDApCi0gICAgICAgIH0KLSAgICAg
ICAgZnVuY3Rpb24gZHQoZSkgewotICAgICAgICAgICAgdmFyIHQgPSAwLCBuID0gZS5sZW5ndGgs
IHIgPSAiIjsKLSAgICAgICAgICAgIGZvciAoOyBuID4gdDsgdCsrKQotICAgICAgICAgICAgICAg
IHIgKz0gZVt0XS52YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiByCi0gICAgICAgIH0KLSAgICAg
ICAgZnVuY3Rpb24gaHQoZSwgdCwgbikgewotICAgICAgICAgICAgdmFyIGkgPSB0LmRpciwgbyA9
IG4gJiYgInBhcmVudE5vZGUiID09PSBpLCBhID0gQysrOwotICAgICAgICAgICAgcmV0dXJuIHQu
Zmlyc3QgPyBmdW5jdGlvbih0LCBuLCByKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHQgPSB0
W2ldKQotICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PT0gdC5ub2RlVHlwZSB8fCBvKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUodCwgbiwgcikKLSAgICAgICAgICAgIH0gOiBm
dW5jdGlvbih0LCBuLCBzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHUsIGwsIGMsIHAgPSBOICsg
IiAiICsgYTsKLSAgICAgICAgICAgICAgICBpZiAocykgewotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAodCA9IHRbaV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDEgPT09IHQubm9k
ZVR5cGUgfHwgbykgJiYgZSh0LCBuLCBzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gITAKLSAgICAgICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIHdo
aWxlICh0ID0gdFtpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxID09PSB0Lm5vZGVU
eXBlIHx8IG8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPSB0W3hdIHx8ICh0
W3hdID0ge30pLCAobCA9IGNbaV0pICYmIGxbMF0gPT09IHApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCh1ID0gbFsxXSk9PT0hMCB8fCB1ID09PSByKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHU9PT0hMAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobCA9IGNbaV0gPSBb
cF0sIGxbMV0gPSBlKHQsIG4sIHMpIHx8IHIsIGxbMV09PT0hMClyZXR1cm4gITAKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBndChlKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZS5sZW5ndGggPiAxID8gZnVuY3Rpb24odCwgbiwgcikgewotICAgICAgICAgICAgICAg
IHZhciBpID0gZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlW2ldKHQsIG4sIHIpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICExOwotICAgICAgICAgICAgICAgIHJldHVybiAhMAotICAgICAgICAgICAgfSA6IGVb
MF0KLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBtdChlLCB0LCBuLCByLCBpKSB7Ci0gICAg
ICAgICAgICB2YXIgbywgYSA9IFtdLCBzID0gMCwgdSA9IGUubGVuZ3RoLCBsID0gbnVsbCAhPSB0
OwotICAgICAgICAgICAgZm9yICg7IHUgPiBzOyBzKyspKG8gPSBlW3NdKSAKLSAgICAgICAgICAg
ICAgICAmJiAoIW4gfHwgbihvLCByLCBpKSkgJiYgKGEucHVzaChvKSwgbCAmJiB0LnB1c2gocykp
OwotICAgICAgICAgICAgcmV0dXJuIGEKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiB5dChl
LCB0LCBuLCByLCBpLCBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gciYmIXJbeF0gJiYgKHIgPSB5
dChyKSksIGkmJiFpW3hdICYmIChpID0geXQoaSwgbykpLCBvdChmdW5jdGlvbihvLCBhLCBzLCB1
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGwsIGMsIHAsIGYgPSBbXSwgZCA9IFtdLCBoID0gYS5s
ZW5ndGgsIGcgPSBvIHx8IHh0KHQgfHwgIioiLCBzLm5vZGVUeXBlID8gW3NdIDogcywgW10pLCBt
PSFlIHx8IW8gJiYgdCA/IGcgOiBtdChnLCBmLCBlLCBzLCB1KSwgeSA9IG4gPyBpIHx8IChvID8g
ZSA6IGggfHwgcikgPyBbXSA6IGEgOiBtOwotICAgICAgICAgICAgICAgIGlmIChuICYmIG4obSwg
eSwgcywgdSksIHIpIHsKLSAgICAgICAgICAgICAgICAgICAgbCA9IG10KHksIGQpLCByKGwsIFtd
LCBzLCB1KSwgYyA9IGwubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYy0tKShw
ID0gbFtjXSkgJiYgKHlbZFtjXV09IShtW2RbY11dID0gcCkpCi0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAobykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaSB8
fCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGwgPSBbXSwgYyA9IHkubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChjLS0pKHAgPSB5W2NdKSAmJiBsLnB1c2gobVtjXSA9IHApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGkobnVsbCwgeSA9IFtdLCBsLCB1KQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHkubGVuZ3RoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMtLSkocCA9IHlbY10pICYmIChsID0gaSA/IE0u
Y2FsbChvLCBwKSA6IGZbY10pPi0xICYmIChvW2xdPSEoYVtsXSA9IHApKQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgICAgICAg
ICAgeSA9IG10KHkgPT09IGEgPyB5LnNwbGljZShoLCB5Lmxlbmd0aCkgOiB5KSwgaSA/IGkobnVs
bCwgYSwgeSwgdSkgOiBILmFwcGx5KGEsIHkpCi0gICAgICAgICAgICB9KQotICAgICAgICB9Ci0g
ICAgICAgIGZ1bmN0aW9uIHZ0KGUpIHsKLSAgICAgICAgICAgIHZhciB0LCBuLCByLCBvID0gZS5s
ZW5ndGgsIGEgPSBpLnJlbGF0aXZlW2VbMF0udHlwZV0sIHMgPSBhIHx8IGkucmVsYXRpdmVbIiAi
XSwgdSA9IGEgPyAxOiAwLCBjID0gaHQoZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlID09PSB0Ci0gICAgICAgICAgICB9LCBzLCAhMCksIHAgPSBodChmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE0uY2FsbCh0LCBlKT4tMQotICAgICAgICAgICAgfSwg
cywgITApLCBmID0gW2Z1bmN0aW9uKGUsIG4sIHIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
IWEgJiYgKHIgfHwgbiAhPT0gbCkgfHwgKCh0ID0gbikubm9kZVR5cGUgPyBjKGUsIG4sIHIpIDog
cChlLCBuLCByKSkKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF07Ci0gICAgICAgICAgICBm
b3IgKDsgbyA+IHU7IHUrKykKLSAgICAgICAgICAgICAgICBpZiAobiA9IGkucmVsYXRpdmVbZVt1
XS50eXBlXSkKLSAgICAgICAgICAgICAgICAgICAgZiA9IFtodChndChmKSwgbildOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobiA9IGkuZmlsdGVyW2Vb
dV0udHlwZV0uYXBwbHkobnVsbCwgZVt1XS5tYXRjaGVzKSwgblt4XSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChyPSsrdTsgbyA+IHI7IHIrKykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaS5yZWxhdGl2ZVtlW3JdLnR5cGVdKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHl0KHUgPiAxICYmIGd0KGYpLCB1ID4gMSAmJiBkdChlLnNsaWNlKDAsIHUtMSkpLnJlcGxhY2Uo
VywgIiQxIiksIG4sIHIgPiB1ICYmIHZ0KGUuc2xpY2UodSwgcikpLCBvID4gciAmJiB2dChlID0g
ZS5zbGljZShyKSksIG8gPiByICYmIGR0KGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLnB1c2gobikKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gZ3QoZikKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlv
biBidChlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCA+IDAsIGEg
PSBlLmxlbmd0aCA+IDAsIHMgPSBmdW5jdGlvbihzLCB1LCBjLCBmLCBkKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGgsIGcsIG0sIHkgPSBbXSwgdiA9IDAsIGIgPSAiMCIsIHggPSBzICYmIFtdLCB3
ID0gbnVsbCAhPSBkLCBUID0gbCwgQyA9IHMgfHwgYSAmJiBpLmZpbmQuVEFHKCIqIiwgZCAmJiB1
LnBhcmVudE5vZGUgfHwgdSksIGsgPSBOICs9IG51bGwgPT0gVCA/IDE6IE1hdGgucmFuZG9tKCkg
fHwgLjE7Ci0gICAgICAgICAgICAgICAgZm9yICh3ICYmIChsID0gdSAhPT0gcCAmJiB1LCByID0g
bik7IG51bGwgIT0gKGggPSBDW2JdKTsgYisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
ICYmIGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAwOwotICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKG0gPSBlW2crK10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG0oaCwgdSwgYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5wdXNo
KGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHcgJiYgKE4gPSBrLCBy
PSsrbikKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvICYmICgo
aD0hbSAmJiBoKSAmJiB2LS0sIHMgJiYgeC5wdXNoKGgpKQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAodiArPSBiLCBvICYmIGIgIT09IHYpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChtID0gdFtnKytdKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbSh4LCB5LCB1LCBjKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID4gMCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoYi0tKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4W2JdIHx8IHlbYl0gfHwgKHlbYl0gPSBMLmNhbGwoZikpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgeSA9IG10KHkpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgSC5hcHBseShmLCB5KSwgdyYmIXMgJiYgeS5sZW5ndGggPiAwICYmIHYgKyB0Lmxlbmd0
aCA+IDEgJiYgc3QudW5pcXVlU29ydChmKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdyAmJiAoTiA9IGssIGwgPSBUKSwgeAotICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIHJldHVybiBvID8gb3QocykgOiBzCi0gICAgICAgIH0KLSAgICAgICAgcyA9IHN0LmNv
bXBpbGUgPSBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiwgciA9IFtdLCBpID0g
W10sIG8gPSBTW2UgKyAiICJdOwotICAgICAgICAgICAgaWYgKCFvKSB7Ci0gICAgICAgICAgICAg
ICAgdCB8fCAodCA9IGZ0KGUpKSwgbiA9IHQubGVuZ3RoOwotICAgICAgICAgICAgICAgIHdoaWxl
IChuLS0pCi0gICAgICAgICAgICAgICAgICAgIG8gPSB2dCh0W25dKSwgb1t4XSA/IHIucHVzaChv
KSA6IGkucHVzaChvKTsKLSAgICAgICAgICAgICAgICBvID0gUyhlLCBidChpLCByKSkKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvCi0gICAgICAgIH07Ci0gICAgICAgIGZ1bmN0
aW9uIHh0KGUsIHQsIG4pIHsKLSAgICAgICAgICAgIHZhciByID0gMCwgaSA9IHQubGVuZ3RoOwot
ICAgICAgICAgICAgZm9yICg7IGkgPiByOyByKyspCi0gICAgICAgICAgICAgICAgc3QoZSwgdFty
XSwgbik7Ci0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICB9Ci0gICAgICAgIGZ1bmN0aW9u
IHd0KGUsIHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBvLCBhLCB1LCBsLCBjLCBwID0gZnQo
ZSk7Ci0gICAgICAgICAgICBpZiAoIXIgJiYgMSA9PT0gcC5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYSA9IHBbMF0gPSBwWzBdLnNsaWNlKDApLCBhLmxlbmd0aCA+IDIgJiYgIklEIiA9
PT0gKHUgPSBhWzBdKS50eXBlICYmIDkgPT09IHQubm9kZVR5cGUmJiFkICYmIGkucmVsYXRpdmVb
YVsxXS50eXBlXSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodCA9IGkuZmluZC5JRCh1Lm1h
dGNoZXNbMF0ucmVwbGFjZShldCwgdHQpLCB0KVswXSwgIXQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbjsKLSAgICAgICAgICAgICAgICAgICAgZSA9IGUuc2xpY2UoYS5zaGlmdCgp
LnZhbHVlLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbyA9IFUu
bmVlZHNDb250ZXh0LnRlc3QoZSkgPyAwIDogYS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKG8tLSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodSA9IGFbb10sIGkucmVsYXRpdmVb
bCA9IHUudHlwZV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKChjID0gaS5maW5kW2xdKSAmJiAociA9IGModS5tYXRjaGVzWzBdLnJlcGxh
Y2UoZXQsIHR0KSwgVi50ZXN0KGFbMF0udHlwZSkgJiYgdC5wYXJlbnROb2RlIHx8IHQpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuc3BsaWNlKG8sIDEpLCBlID0gci5sZW5ndGgg
JiYgZHQoYSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICFlKXJldHVybiBILmFwcGx5
KG4sIHEuY2FsbChyLCAwKSksIG47Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHMoZSwgcCkociwgdCwgZCwgbiwgVi50ZXN0KGUpKSwgbgotICAgICAg
ICB9Ci0gICAgICAgIGkucHNldWRvcy5udGggPSBpLnBzZXVkb3MuZXE7Ci0gICAgICAgIGZ1bmN0
aW9uIFR0KCkge30KLSAgICAgICAgaS5maWx0ZXJzID0gVHQucHJvdG90eXBlID0gaS5wc2V1ZG9z
LCBpLnNldEZpbHRlcnMgPSBuZXcgVHQsIGMoKSwgc3QuYXR0ciA9IGIuYXR0ciwgYi5maW5kID0g
c3QsIGIuZXhwciA9IHN0LnNlbGVjdG9ycywgYi5leHByWyI6Il0gPSBiLmV4cHIucHNldWRvcywg
Yi51bmlxdWUgPSBzdC51bmlxdWVTb3J0LCBiLnRleHQgPSBzdC5nZXRUZXh0LCBiLmlzWE1MRG9j
ID0gc3QuaXNYTUwsIGIuY29udGFpbnMgPSBzdC5jb250YWlucwotICAgIH0oZSk7Ci0gICAgdmFy
IGF0ID0gL1VudGlsJC8sIHN0ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIHV0
ID0gL14uW146I1xbXC4sXSokLywgbHQgPSBiLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LCBjdCA9
IHsKLSAgICAgICAgY2hpbGRyZW46ICEwLAotICAgICAgICBjb250ZW50czogITAsCi0gICAgICAg
IG5leHQ6ICEwLAotICAgICAgICBwcmV2OiAhMAotICAgIH07Ci0gICAgYi5mbi5leHRlbmQoewot
ICAgICAgICBmaW5kOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCwgbiwgciwgaSA9
IHRoaXMubGVuZ3RoOwotICAgICAgICAgICAgaWYgKCJzdHJpbmciICE9IHR5cGVvZiBlKQotICAg
ICAgICAgICAgICAgIHJldHVybiByID0gdGhpcywgdGhpcy5wdXNoU3RhY2soYihlKS5maWx0ZXIo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh0ID0gMDsgaSA+IHQ7IHQrKykKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGIuY29udGFpbnMoclt0XSwgdGhpcykpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gITAKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIGZv
ciAobiA9IFtdLCB0ID0gMDsKLSAgICAgICAgICAgIGkgPiB0OwotICAgICAgICAgICAgdCsrKWIu
ZmluZChlLCB0aGlzW3RdLCBuKTsKLSAgICAgICAgICAgIHJldHVybiBuID0gdGhpcy5wdXNoU3Rh
Y2soaSA+IDEgPyBiLnVuaXF1ZShuKSA6IG4pLCBuLnNlbGVjdG9yID0gKHRoaXMuc2VsZWN0b3Ig
PyB0aGlzLnNlbGVjdG9yICsgIiAiIDogIiIpICsgZSwgbgotICAgICAgICB9LAotICAgICAgICBo
YXM6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHZhciB0LCBuID0gYihlLCB0aGlzKSwgciA9
IG4ubGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGZvciAodCA9IDA7IHIgPiB0OyB0KyspCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChiLmNvbnRhaW5zKHRoaXMsIG5bdF0pKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICEwCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBub3Q6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLCBlLCAh
MSkpCi0gICAgICAgIH0sCi0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsIGUsICEwKSkKLSAgICAgICAgfSwKLSAg
ICAgICAgaXM6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhIWUgJiYgKCJzdHJp
bmciID09IHR5cGVvZiBlID8gbHQudGVzdChlKSA/IGIoZSwgdGhpcy5jb250ZXh0KS5pbmRleCh0
aGlzWzBdKSA+PSAwIDogYi5maWx0ZXIoZSwgdGhpcykubGVuZ3RoID4gMCA6IHRoaXMuZmlsdGVy
KGUpLmxlbmd0aCA+IDApCi0gICAgICAgIH0sCi0gICAgICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKGUs
IHQpIHsKLSAgICAgICAgICAgIHZhciBuLCByID0gMCwgaSA9IHRoaXMubGVuZ3RoLCBvID0gW10s
IGEgPSBsdC50ZXN0KGUpIHx8ICJzdHJpbmciICE9IHR5cGVvZiBlID8gYihlLCB0IHx8IHRoaXMu
Y29udGV4dCk6IDA7Ci0gICAgICAgICAgICBmb3IgKDsgaSA+IHI7IHIrKykgewotICAgICAgICAg
ICAgICAgIG4gPSB0aGlzW3JdOwotICAgICAgICAgICAgICAgIHdoaWxlIChuICYmIG4ub3duZXJE
b2N1bWVudCAmJiBuICE9PSB0ICYmIDExICE9PSBuLm5vZGVUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhID8gYS5pbmRleChuKT4tMSA6IGIuZmluZC5tYXRjaGVzU2VsZWN0b3Iobiwg
ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG8ucHVzaChuKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgbiA9IG4ucGFyZW50Tm9kZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aCA+IDEgPyBiLnVuaXF1ZShv
KSA6IG8pCi0gICAgICAgIH0sCi0gICAgICAgIGluZGV4OiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZSA/ICJzdHJpbmciID09IHR5cGVvZiBlID8gYi5pbkFycmF5KHRoaXNbMF0s
IGIoZSkpIDogYi5pbkFycmF5KGUuanF1ZXJ5ID8gZVswXSA6IGUsIHRoaXMpIDogdGhpc1swXSAm
JiB0aGlzWzBdLnBhcmVudE5vZGUgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0x
Ci0gICAgICAgIH0sCi0gICAgICAgIGFkZDogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAg
dmFyIG4gPSAic3RyaW5nIiA9PSB0eXBlb2YgZSA/IGIoZSwgdCk6IGIubWFrZUFycmF5KGUgJiYg
ZS5ub2RlVHlwZSA/IFtlXSA6IGUpLCByID0gYi5tZXJnZSh0aGlzLmdldCgpLCBuKTsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhiLnVuaXF1ZShyKSkKLSAgICAgICAgfSwKLSAg
ICAgICAgYWRkQmFjazogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRk
KG51bGwgPT0gZSA/IHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkp
Ci0gICAgICAgIH0KLSAgICB9KSwgYi5mbi5hbmRTZWxmID0gYi5mbi5hZGRCYWNrOwotICAgIGZ1
bmN0aW9uIHB0KGUsIHQpIHsKLSAgICAgICAgZG8gCi0gICAgICAgICAgICBlID0gZVt0XTsKLSAg
ICAgICAgd2hpbGUgKGUgJiYgMSAhPT0gZS5ub2RlVHlwZSk7Ci0gICAgICAgIHJldHVybiBlCi0g
ICAgfQotICAgIGIuZWFjaCh7Ci0gICAgICAgIHBhcmVudDogZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgdmFyIHQgPSBlLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICByZXR1cm4gdCAmJiAxMSAh
PT0gdC5ub2RlVHlwZSA/IHQgOiBudWxsCi0gICAgICAgIH0sCi0gICAgICAgIHBhcmVudHM6IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBiLmRpcihlLCAicGFyZW50Tm9kZSIpCi0g
ICAgICAgIH0sCi0gICAgICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oZSwgdCwgbikgewotICAg
ICAgICAgICAgcmV0dXJuIGIuZGlyKGUsICJwYXJlbnROb2RlIiwgbikKLSAgICAgICAgfSwKLSAg
ICAgICAgbmV4dDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIHB0KGUsICJuZXh0
U2libGluZyIpCi0gICAgICAgIH0sCi0gICAgICAgIHByZXY6IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIHJldHVybiBwdChlLCAicHJldmlvdXNTaWJsaW5nIikKLSAgICAgICAgfSwKLSAgICAg
ICAgbmV4dEFsbDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIuZGlyKGUsICJu
ZXh0U2libGluZyIpCi0gICAgICAgIH0sCi0gICAgICAgIHByZXZBbGw6IGZ1bmN0aW9uKGUpIHsK
LSAgICAgICAgICAgIHJldHVybiBiLmRpcihlLCAicHJldmlvdXNTaWJsaW5nIikKLSAgICAgICAg
fSwKLSAgICAgICAgbmV4dFVudGlsOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYi5kaXIoZSwgIm5leHRTaWJsaW5nIiwgbikKLSAgICAgICAgfSwKLSAgICAgICAgcHJl
dlVudGlsOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5kaXIoZSwg
InByZXZpb3VzU2libGluZyIsIG4pCi0gICAgICAgIH0sCi0gICAgICAgIHNpYmxpbmdzOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5zaWJsaW5nKChlLnBhcmVudE5vZGUgfHwg
e30pLmZpcnN0Q2hpbGQsIGUpCi0gICAgICAgIH0sCi0gICAgICAgIGNoaWxkcmVuOiBmdW5jdGlv
bihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5zaWJsaW5nKGUuZmlyc3RDaGlsZCkKLSAgICAg
ICAgfSwKLSAgICAgICAgY29udGVudHM6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIHJldHVy
biBiLm5vZGVOYW1lKGUsICJpZnJhbWUiKSA/IGUuY29udGVudERvY3VtZW50IHx8IGUuY29udGVu
dFdpbmRvdy5kb2N1bWVudCA6IGIubWVyZ2UoW10sIGUuY2hpbGROb2RlcykKLSAgICAgICAgfQot
ICAgIH0sIGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgYi5mbltlXSA9IGZ1bmN0aW9uKG4sIHIp
IHsKLSAgICAgICAgICAgIHZhciBpID0gYi5tYXAodGhpcywgdCwgbik7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXQudGVzdChlKSB8fCAociA9IG4pLCByICYmICJzdHJpbmciID09IHR5cGVvZiByICYm
IChpID0gYi5maWx0ZXIociwgaSkpLCBpID0gdGhpcy5sZW5ndGggPiAxJiYhY3RbZV0gPyBiLnVu
aXF1ZShpKSA6IGksIHRoaXMubGVuZ3RoID4gMSAmJiBzdC50ZXN0KGUpICYmIChpID0gaS5yZXZl
cnNlKCkpLCB0aGlzLnB1c2hTdGFjayhpKQotICAgICAgICB9Ci0gICAgfSksIGIuZXh0ZW5kKHsK
LSAgICAgICAgZmlsdGVyOiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4g
biAmJiAoZSA9ICI6bm90KCIgKyBlICsgIikiKSwgMSA9PT0gdC5sZW5ndGggPyBiLmZpbmQubWF0
Y2hlc1NlbGVjdG9yKHRbMF0sIGUpID8gW3RbMF1dIDogW10gOiBiLmZpbmQubWF0Y2hlcyhlLCB0
KQotICAgICAgICB9LAotICAgICAgICBkaXI6IGZ1bmN0aW9uKGUsIG4sIHIpIHsKLSAgICAgICAg
ICAgIHZhciBpID0gW10sIG8gPSBlW25dOwotICAgICAgICAgICAgd2hpbGUgKG8gJiYgOSAhPT0g
by5ub2RlVHlwZSAmJiAociA9PT0gdCB8fCAxICE9PSBvLm5vZGVUeXBlIHx8IWIobykuaXMocikp
KQotICAgICAgICAgICAgICAgIDEgPT09IG8ubm9kZVR5cGUgJiYgaS5wdXNoKG8pLCBvID0gb1tu
XTsKLSAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIH0sCi0gICAgICAgIHNpYmxpbmc6IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gW107Ci0gICAgICAgICAgICBmb3Ig
KDsgZTsgZSA9IGUubmV4dFNpYmxpbmcpCi0gICAgICAgICAgICAgICAgMSA9PT0gZS5ub2RlVHlw
ZSAmJiBlICE9PSB0ICYmIG4ucHVzaChlKTsKLSAgICAgICAgICAgIHJldHVybiBuCi0gICAgICAg
IH0KLSAgICB9KTsKLSAgICBmdW5jdGlvbiBmdChlLCB0LCBuKSB7Ci0gICAgICAgIGlmICh0ID0g
dCB8fCAwLCBiLmlzRnVuY3Rpb24odCkKLSAgICAgICAgICAgIClyZXR1cm4gYi5ncmVwKGUsIGZ1
bmN0aW9uKGUsIHIpIHsKLSAgICAgICAgICAgIHZhciBpPSEhdC5jYWxsKGUsIHIsIGUpOwotICAg
ICAgICAgICAgcmV0dXJuIGkgPT09IG4KLSAgICAgICAgfSk7Ci0gICAgICAgIGlmICh0Lm5vZGVU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIGIuZ3JlcChlLCBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGUgPT09IHQgPT09IG4KLSAgICAgICAgICAgIH0pOwotICAgICAgICBp
ZiAoInN0cmluZyIgPT0gdHlwZW9mIHQpIHsKLSAgICAgICAgICAgIHZhciByID0gYi5ncmVwKGUs
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMSA9PT0gZS5ub2RlVHlwZQot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAodXQudGVzdCh0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYi5maWx0ZXIodCwgciwgIW4pOwotICAgICAgICAgICAgdCA9IGIuZmlsdGVy
KHQsIHIpCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGIuZ3JlcChlLCBmdW5jdGlvbihlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gYi5pbkFycmF5KGUsIHQpID49IDAgPT09IG4KLSAgICAgICAg
fSkKLSAgICB9Ci0gICAgZnVuY3Rpb24gZHQoZSkgewotICAgICAgICB2YXIgdCA9IGh0LnNwbGl0
KCJ8IiksIG4gPSBlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgaWYgKG4uY3Jl
YXRlRWxlbWVudCkKLSAgICAgICAgICAgIHdoaWxlICh0Lmxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBuLmNyZWF0ZUVsZW1lbnQodC5wb3AoKSk7Ci0gICAgICAgIHJldHVybiBuCi0gICAgfQotICAg
IHZhciBodCA9ICJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFs
aXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xt
ZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIiwgZ3Qg
PSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLCBtdCA9IFJlZ0V4cCgiPCg/OiIgKyBodCAr
ICIpW1xccy8+XSIsICJpIiksIHl0ID0gL15ccysvLCB2dCA9IC88KD8hYXJlYXxicnxjb2x8ZW1i
ZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksIGJ0
ID0gLzwoW1x3Ol0rKS8sIHh0ID0gLzx0Ym9keS9pLCB3dCA9IC88fCYjP1x3KzsvLCBUdCA9IC88
KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksIE50ID0gL14oPzpjaGVja2JveHxyYWRpbykkL2ksIEN0
ID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksIGt0ID0gL14kfFwvKD86amF2
YXxlY21hKXNjcmlwdC9pLCBFdCA9IC9edHJ1ZVwvKC4qKS8sIFN0ID0gL15ccyo8ISg/OlxbQ0RB
VEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLCBBdCA9IHsKLSAgICAgICAgb3B0aW9uOiBbMSwg
IjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+Il0sCi0gICAgICAgIGxl
Z2VuZDogWzEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+Il0sCi0gICAgICAgIGFyZWE6IFsx
LCAiPG1hcD4iLCAiPC9tYXA+Il0sCi0gICAgICAgIHBhcmFtOiBbMSwgIjxvYmplY3Q+IiwgIjwv
b2JqZWN0PiJdLAotICAgICAgICB0aGVhZDogWzEsICI8dGFibGU+IiwgIjwvdGFibGU+Il0sCi0g
ICAgICAgIHRyOiBbMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iXSwKLSAg
ICAgICAgY29sOiBbMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29s
Z3JvdXA+PC90YWJsZT4iXSwKLSAgICAgICAgdGQ6IFszLCAiPHRhYmxlPjx0Ym9keT48dHI+Iiwg
IjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLAotICAgICAgICBfZGVmYXVsdDogYi5zdXBwb3J0Lmh0
bWxTZXJpYWxpemUgPyBbMCwgIiIsICIiXTogWzEsICJYPGRpdj4iLCAiPC9kaXY+Il0KLSAgICB9
LCBqdCA9IGR0KG8pLCBEdCA9IGp0LmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2Iikp
OwotICAgIEF0Lm9wdGdyb3VwID0gQXQub3B0aW9uLCBBdC50Ym9keSA9IEF0LnRmb290ID0gQXQu
Y29sZ3JvdXAgPSBBdC5jYXB0aW9uID0gQXQudGhlYWQsIEF0LnRoID0gQXQudGQsIGIuZm4uZXh0
ZW5kKHsKLSAgICAgICAgdGV4dDogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgcmV0dXJuIGIu
YWNjZXNzKHRoaXMsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZSA9PT0g
dCA/IGIudGV4dCh0aGlzKSA6IHRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0gJiYgdGhpc1sw
XS5vd25lckRvY3VtZW50IHx8IG8pLmNyZWF0ZVRleHROb2RlKGUpKQotICAgICAgICAgICAgfSwg
bnVsbCwgZSwgYXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgfSwKLSAgICAgICAgd3JhcEFsbDog
ZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgaWYgKGIuaXNGdW5jdGlvbihlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYih0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLCB0KSkKLSAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIGlmICh0aGlzWzBdKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBiKGUs
IHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApOwotICAgICAgICAgICAgICAg
IHRoaXNbMF0ucGFyZW50Tm9kZSAmJiB0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSwgdC5tYXAoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlID0gdGhpczsKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKGUuZmlyc3RDaGlsZCAmJiAxID09PSBlLmZpcnN0Q2hpbGQubm9kZVR5
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlID0gZS5maXJzdENoaWxkOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZQotICAgICAgICAgICAgICAgIH0pLmFwcGVuZCh0aGlzKQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMKLSAgICAgICAgfSwKLSAgICAgICAg
d3JhcElubmVyOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5pc0Z1bmN0aW9u
KGUpID8gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgICBiKHRoaXMpLndy
YXBJbm5lcihlLmNhbGwodGhpcywgdCkpCi0gICAgICAgICAgICB9KSA6IHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdCA9IGIodGhpcyksIG4gPSB0LmNvbnRlbnRz
KCk7Ci0gICAgICAgICAgICAgICAgbi5sZW5ndGggPyBuLndyYXBBbGwoZSkgOiB0LmFwcGVuZChl
KQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgd3JhcDogZnVuY3Rpb24oZSkg
ewotICAgICAgICAgICAgdmFyIHQgPSBiLmlzRnVuY3Rpb24oZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pIHsKLSAgICAgICAgICAgICAgICBiKHRoaXMpLndyYXBB
bGwodCA/IGUuY2FsbCh0aGlzLCBuKSA6IGUpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAot
ICAgICAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFy
ZW50KCkuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBiLm5vZGVOYW1lKHRoaXMs
ICJib2R5IikgfHwgYih0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpCi0gICAgICAg
ICAgICB9KS5lbmQoKQotICAgICAgICB9LAotICAgICAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCAhMCwgZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgICAgICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0aGlz
Lm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpICYmIHRoaXMuYXBwZW5kQ2hpbGQoZSkK
LSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCAhMCwgZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgICAgICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0
aGlzLm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpICYmIHRoaXMuaW5zZXJ0QmVmb3Jl
KGUsIHRoaXMuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAg
IGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChh
cmd1bWVudHMsICExLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRO
b2RlICYmIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSwgdGhpcykKLSAgICAgICAgICAg
IH0pCi0gICAgICAgIH0sCi0gICAgICAgIGFmdGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgITEsIGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9y
ZShlLCB0aGlzLm5leHRTaWJsaW5nKQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAg
ICAgcmVtb3ZlOiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICB2YXIgbiwgciA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKDsgbnVsbCAhPSAobiA9IHRoaXNbcl0pOyByKyspKCFlIHx8IGIuZmls
dGVyKGUsIFtuXSkubGVuZ3RoID4gMCkgCi0gICAgICAgICAgICAgICAgJiYgKHQgfHwgMSAhPT0g
bi5ub2RlVHlwZSB8fCBiLmNsZWFuRGF0YShPdChuKSksIG4ucGFyZW50Tm9kZSAmJiAodCAmJiBi
LmNvbnRhaW5zKG4ub3duZXJEb2N1bWVudCwgbikgJiYgTXQoT3QobiwgInNjcmlwdCIpKSwgbi5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcwotICAg
ICAgICB9LAotICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgZSwg
dCA9IDA7Ci0gICAgICAgICAgICBmb3IgKDsgbnVsbCAhPSAoZSA9IHRoaXNbdF0pOyB0KyspIHsK
LSAgICAgICAgICAgICAgICAxID09PSBlLm5vZGVUeXBlICYmIGIuY2xlYW5EYXRhKE90KGUsICEx
KSk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGUuZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAg
ICAgICAgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOwotICAgICAgICAgICAgICAgIGUub3B0
aW9ucyAmJiBiLm5vZGVOYW1lKGUsICJzZWxlY3QiKSAmJiAoZS5vcHRpb25zLmxlbmd0aCA9IDAp
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcwotICAgICAgICB9LAotICAg
ICAgICBjbG9uZTogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAgcmV0dXJuIGUgPSBudWxs
ID09IGU/ITEgOiBlLCB0ID0gbnVsbCA9PSB0ID8gZSA6IHQsIHRoaXMubWFwKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBiLmNsb25lKHRoaXMsIGUsIHQpCi0gICAgICAgICAg
ICB9KQotICAgICAgICB9LAotICAgICAgICBodG1sOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYi5hY2Nlc3ModGhpcywgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZh
ciBuID0gdGhpc1swXSB8fCB7fSwgciA9IDAsIGkgPSB0aGlzLmxlbmd0aDsKLSAgICAgICAgICAg
ICAgICBpZiAoZSA9PT0gdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgPT09IG4ubm9k
ZVR5cGUgPyBuLmlubmVySFRNTC5yZXBsYWNlKGd0LCAiIikgOiB0OwotICAgICAgICAgICAgICAg
IGlmICghKCJzdHJpbmciICE9IHR5cGVvZiBlIHx8IFR0LnRlc3QoZSkgfHwhYi5zdXBwb3J0Lmh0
bWxTZXJpYWxpemUgJiYgbXQudGVzdChlKSB8fCFiLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2Ug
JiYgeXQudGVzdChlKSB8fCBBdFsoYnQuZXhlYyhlKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNh
c2UoKV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBlLnJlcGxhY2UodnQsICI8JDE+PC8k
Mj4iKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoOyBpID4gcjsgcisrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0aGlz
W3JdIHx8IHt9LCAxID09PSBuLm5vZGVUeXBlICYmIChiLmNsZWFuRGF0YShPdChuLCAhMSkpLCBu
LmlubmVySFRNTCA9IGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDAKLSAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaCAobykge30KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbiAmJiB0aGlzLmVtcHR5KCkuYXBwZW5kKGUpCi0gICAgICAgICAgICB9LCBudWxsLCBl
LCBhcmd1bWVudHMubGVuZ3RoKQotICAgICAgICB9LAotICAgICAgICByZXBsYWNlV2l0aDogZnVu
Y3Rpb24oZSkgewotICAgICAgICAgICAgdmFyIHQgPSBiLmlzRnVuY3Rpb24oZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdCB8fCAic3RyaW5nIiA9PSB0eXBlb2YgZSB8fCAoZSA9IGIoZSkubm90KHRo
aXMpLmRldGFjaCgpKSwgdGhpcy5kb21NYW5pcChbZV0sICEwLCBmdW5jdGlvbihlKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHQgPSB0aGlzLm5leHRTaWJsaW5nLCBuID0gdGhpcy5wYXJlbnROb2Rl
OwotICAgICAgICAgICAgICAgIG4gJiYgKGIodGhpcykucmVtb3ZlKCksIG4uaW5zZXJ0QmVmb3Jl
KGUsIHQpKQotICAgICAgICAgICAgfSkKLSAgICAgICAgfSwKLSAgICAgICAgZGV0YWNoOiBmdW5j
dGlvbihlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmUoZSwgITApCi0gICAgICAg
IH0sCi0gICAgICAgIGRvbU1hbmlwOiBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAgICAgICBl
ID0gZi5hcHBseShbXSwgZSk7Ci0gICAgICAgICAgICB2YXIgaSwgbywgYSwgcywgdSwgbCwgYyA9
IDAsIHAgPSB0aGlzLmxlbmd0aCwgZCA9IHRoaXMsIGggPSBwLTEsIGcgPSBlWzBdLCBtID0gYi5p
c0Z1bmN0aW9uKGcpOwotICAgICAgICAgICAgaWYgKG0gfHwhKDEgPj0gcCB8fCAic3RyaW5nIiAh
PSB0eXBlb2YgZyB8fCBiLnN1cHBvcnQuY2hlY2tDbG9uZSkgJiYgQ3QudGVzdChnKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIG8gPSBkLmVxKGkpOwotICAgICAgICAgICAgICAgICAgICBtICYmIChlWzBdID0g
Zy5jYWxsKHRoaXMsIGksIG4gPyBvLmh0bWwoKSA6IHQpKSwgby5kb21NYW5pcChlLCBuLCByKQot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHAgJiYgKGwgPSBiLmJ1aWxkRnJh
Z21lbnQoZSwgdGhpc1swXS5vd25lckRvY3VtZW50LCAhMSwgdGhpcyksIGkgPSBsLmZpcnN0Q2hp
bGQsIDEgPT09IGwuY2hpbGROb2Rlcy5sZW5ndGggJiYgKGwgPSBpKSwgaSkKLSAgICAgICAgICAg
ICAgICApIHsKLSAgICAgICAgICAgICAgICBmb3IgKG4gPSBuICYmIGIubm9kZU5hbWUoaSwgInRy
IiksIHMgPSBiLm1hcChPdChsLCAic2NyaXB0IikKLSAgICAgICAgICAgICAgICAgICAgLCBIdCks
IGEgPSBzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBwID4gYzsKLSAgICAgICAgICAgICAgICBj
KyspbyA9IGwsIGMgIT09IGggJiYgKG8gPSBiLmNsb25lKG8sICEwLCAhMCksIGEgJiYgYi5tZXJn
ZShzLCBPdChvLCAic2NyaXB0IikpKSwgci5jYWxsKG4gJiYgYi5ub2RlTmFtZSh0aGlzW2NdLCAi
dGFibGUiKSA/IEx0KHRoaXNbY10sICJ0Ym9keSIpIDogdGhpc1tjXSwgbywgYyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGEpCi0gICAgICAgICAgICAgICAgICAgIGZvciAodSA9IHNbcy5sZW5ndGgt
MV0ub3duZXJEb2N1bWVudCwgYi5tYXAocywgcXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAs
IGMgPSAwOwotICAgICAgICAgICAgICAgIGEgPiBjOwotICAgICAgICAgICAgICAgIGMrKylvID0g
c1tjXSwga3QudGVzdChvLnR5cGUgfHwgIiIpJiYhYi5fZGF0YShvLCAiZ2xvYmFsRXZhbCIpICYm
IGIuY29udGFpbnModSwgbykgJiYgKG8uc3JjID8gYi5hamF4KHsKLSAgICAgICAgICAgICAgICAg
ICAgdXJsOiBvLnNyYywKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKLSAgICAgICAgICAgICAgICAgICAgYXN5
bmM6ICExLAotICAgICAgICAgICAgICAgICAgICBnbG9iYWw6ICExLAotICAgICAgICAgICAgICAg
ICAgICAidGhyb3dzIjogITAKLSAgICAgICAgICAgICAgICB9KSA6IGIuZ2xvYmFsRXZhbCgoby50
ZXh0IHx8IG8udGV4dENvbnRlbnQgfHwgby5pbm5lckhUTUwgfHwgIiIpLnJlcGxhY2UoU3QsICIi
KSkpOwotICAgICAgICAgICAgICAgIGwgPSBpID0gbnVsbAotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMKLSAgICAgICAgfQotICAgIH0pOwotICAgIGZ1bmN0aW9uIEx0KGUs
IHQpIHsKLSAgICAgICAgcmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodClbMF0gfHwgZS5h
cHBlbmRDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSkKLSAgICB9Ci0gICAg
ZnVuY3Rpb24gSHQoZSkgewotICAgICAgICB2YXIgdCA9IGUuZ2V0QXR0cmlidXRlTm9kZSgidHlw
ZSIpOwotICAgICAgICByZXR1cm4gZS50eXBlID0gKHQgJiYgdC5zcGVjaWZpZWQpICsgIi8iICsg
ZS50eXBlLCBlCi0gICAgfQotICAgIGZ1bmN0aW9uIHF0KGUpIHsKLSAgICAgICAgdmFyIHQgPSBF
dC5leGVjKGUudHlwZSk7Ci0gICAgICAgIHJldHVybiB0ID8gZS50eXBlID0gdFsxXSA6IGUucmVt
b3ZlQXR0cmlidXRlKCJ0eXBlIiksIGUKLSAgICB9Ci0gICAgZnVuY3Rpb24gTXQoZSwgdCkgewot
ICAgICAgICB2YXIgbiwgciA9IDA7Ci0gICAgICAgIGZvciAoOyBudWxsICE9IChuID0gZVtyXSk7
IHIrKykKLSAgICAgICAgICAgIGIuX2RhdGEobiwgImdsb2JhbEV2YWwiLCAhdCB8fCBiLl9kYXRh
KHRbcl0sICJnbG9iYWxFdmFsIikpCi0gICAgfQotICAgIGZ1bmN0aW9uIF90KGUsIHQpIHsKLSAg
ICAgICAgaWYgKDEgPT09IHQubm9kZVR5cGUgJiYgYi5oYXNEYXRhKGUpKSB7Ci0gICAgICAgICAg
ICB2YXIgbiwgciwgaSwgbyA9IGIuX2RhdGEoZSksIGEgPSBiLl9kYXRhKHQsIG8pLCBzID0gby5l
dmVudHM7Ci0gICAgICAgICAgICBpZiAocykgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBhLmhh
bmRsZSwgYS5ldmVudHMgPSB7fTsKLSAgICAgICAgICAgICAgICBmb3IgKG4gaW4gcykKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChyID0gMCwgaSA9IHNbbl0ubGVuZ3RoOyBpID4gcjsgcisrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYi5ldmVudC5hZGQodCwgbiwgc1tuXVtyXSkKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYS5kYXRhICYmIChhLmRhdGEgPSBiLmV4dGVu
ZCh7fSwgYS5kYXRhKSkKLSAgICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiBGdChlLCB0KSB7
Ci0gICAgICAgIHZhciBuLCByLCBpOwotICAgICAgICBpZiAoMSA9PT0gdC5ub2RlVHlwZSkgewot
ICAgICAgICAgICAgaWYgKG4gPSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksICFiLnN1cHBvcnQu
bm9DbG9uZUV2ZW50ICYmIHRbYi5leHBhbmRvXSkgewotICAgICAgICAgICAgICAgIGkgPSBiLl9k
YXRhKHQpOwotICAgICAgICAgICAgICAgIGZvciAociBpbiBpLmV2ZW50cykKLSAgICAgICAgICAg
ICAgICAgICAgYi5yZW1vdmVFdmVudCh0LCByLCBpLmhhbmRsZSk7Ci0gICAgICAgICAgICAgICAg
dC5yZW1vdmVBdHRyaWJ1dGUoYi5leHBhbmRvKQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
InNjcmlwdCIgPT09IG4gJiYgdC50ZXh0ICE9PSBlLnRleHQgPyAoSHQodCkudGV4dCA9IGUudGV4
dCwgcXQodCkpIDogIm9iamVjdCIgPT09IG4gPyAodC5wYXJlbnROb2RlICYmICh0Lm91dGVySFRN
TCA9IGUub3V0ZXJIVE1MKSwgYi5zdXBwb3J0Lmh0bWw1Q2xvbmUgJiYgZS5pbm5lckhUTUwmJiFi
LnRyaW0odC5pbm5lckhUTUwpICYmICh0LmlubmVySFRNTCA9IGUuaW5uZXJIVE1MKSkgOiAiaW5w
dXQiID09PSBuICYmIE50LnRlc3QoZS50eXBlKSA/ICh0LmRlZmF1bHRDaGVja2VkID0gdC5jaGVj
a2VkID0gZS5jaGVja2VkLCB0LnZhbHVlICE9PSBlLnZhbHVlICYmICh0LnZhbHVlID0gZS52YWx1
ZSkpIDogIm9wdGlvbiIgPT09IG4gPyB0LmRlZmF1bHRTZWxlY3RlZCA9IHQuc2VsZWN0ZWQgPSBl
LmRlZmF1bHRTZWxlY3RlZCA6ICgiaW5wdXQiID09PSBuIHx8ICJ0ZXh0YXJlYSIgPT09IG4pICYm
ICh0LmRlZmF1bHRWYWx1ZSA9IGUuZGVmYXVsdFZhbHVlKQotICAgICAgICB9Ci0gICAgfQotICAg
IGIuZWFjaCh7Ci0gICAgICAgIGFwcGVuZFRvOiAiYXBwZW5kIiwKLSAgICAgICAgcHJlcGVuZFRv
OiAicHJlcGVuZCIsCi0gICAgICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCi0gICAgICAgIGlu
c2VydEFmdGVyOiAiYWZ0ZXIiLAotICAgICAgICByZXBsYWNlQWxsOiAicmVwbGFjZVdpdGgiCi0g
ICAgfSwgZnVuY3Rpb24oZSwgdCkgewotICAgICAgICBiLmZuW2VdID0gZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgdmFyIG4sIHIgPSAwLCBpID0gW10sIG8gPSBiKGUpLCBhID0gby5sZW5ndGgt
MTsKLSAgICAgICAgICAgIGZvciAoOyBhID49IHI7IHIrKykKLSAgICAgICAgICAgICAgICBuID0g
ciA9PT0gYSA/IHRoaXMgOiB0aGlzLmNsb25lKCEwKSwgYihvW3JdKVt0XShuKSwgZC5hcHBseShp
LCBuLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhpKQotICAgICAg
ICB9Ci0gICAgfSk7Ci0gICAgZnVuY3Rpb24gT3QoZSwgbikgewotICAgICAgICB2YXIgciwgbywg
YSA9IDAsIHMgPSB0eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gaSA/IGUuZ2V0RWxl
bWVudHNCeVRhZ05hbWUobiB8fCAiKiIpOiB0eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsICE9PSBp
ID8gZS5xdWVyeVNlbGVjdG9yQWxsKG4gfHwgIioiKTogdDsKLSAgICAgICAgaWYgKCFzKQotICAg
ICAgICAgICAgZm9yIChzID0gW10sIHIgPSBlLmNoaWxkTm9kZXMgfHwgZTsKLSAgICAgICAgICAg
IG51bGwgIT0gKG8gPSByW2FdKTsgYSsrKQotICAgICAgICAgICAgICAgICFuIHx8IGIubm9kZU5h
bWUobywgbikgPyBzLnB1c2gobykgOiBiLm1lcmdlKHMsIE90KG8sIG4pKTsKLSAgICAgICAgcmV0
dXJuIG4gPT09IHQgfHwgbiAmJiBiLm5vZGVOYW1lKGUsIG4pID8gYi5tZXJnZShbZV0sIHMpIDog
cwotICAgIH0KLSAgICBmdW5jdGlvbiBCdChlKSB7Ci0gICAgICAgIE50LnRlc3QoZS50eXBlKSAm
JiAoZS5kZWZhdWx0Q2hlY2tlZCA9IGUuY2hlY2tlZCkKLSAgICB9Ci0gICAgYi5leHRlbmQoewot
ICAgICAgICBjbG9uZTogZnVuY3Rpb24oZSwgdCwgbikgewotICAgICAgICAgICAgdmFyIHIsIGks
IG8sIGEsIHMsIHUgPSBiLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSk7Ci0gICAgICAgICAg
ICBpZiAoYi5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgYi5pc1hNTERvYyhlKSB8fCFtdC50ZXN0KCI8
IiArIGUubm9kZU5hbWUgKyAiPiIpID8gbyA9IGUuY2xvbmVOb2RlKCEwKSA6IChEdC5pbm5lckhU
TUwgPSBlLm91dGVySFRNTCwgRHQucmVtb3ZlQ2hpbGQobyA9IER0LmZpcnN0Q2hpbGQpKQotICAg
ICAgICAgICAgICAgICwgIShiLnN1cHBvcnQubm9DbG9uZUV2ZW50ICYmIGIuc3VwcG9ydC5ub0Ns
b25lQ2hlY2tlZCB8fCAxICE9PSBlLm5vZGVUeXBlICYmIDExICE9PSBlLm5vZGVUeXBlIHx8IGIu
aXNYTUxEb2MoZSkpKWZvciAociA9IE90KG8pLCBzID0gT3QoZSkKLSAgICAgICAgICAgICAgICAs
IGEgPSAwOwotICAgICAgICAgICAgbnVsbCAhPSAoaSA9IHNbYV0pOwotICAgICAgICAgICAgKyth
KXJbYV0gJiYgRnQoaSwgclthXSk7Ci0gICAgICAgICAgICBpZiAodCkKLSAgICAgICAgICAgICAg
ICBpZiAobikKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gcyB8fCBPdChlKSwgciA9IHIg
fHwgT3QobykKLSAgICAgICAgICAgICAgICAgICAgICAgICwgYSA9IDA7Ci0gICAgICAgICAgICBu
dWxsICE9IChpID0gc1thXSk7Ci0gICAgICAgICAgICBhKyspX3QoaSwgclthXSk7Ci0gICAgICAg
ICAgICBlbHNlIAotICAgICAgICAgICAgICAgIF90KGUsIG8pOwotICAgICAgICAgICAgcmV0dXJu
IHIgPSBPdChvLCAic2NyaXB0IiksIHIubGVuZ3RoID4gMCAmJiBNdChyLCAhdSAmJiBPdChlLCAi
c2NyaXB0IikpLCByID0gcyA9IGkgPSBudWxsLCBvCi0gICAgICAgIH0sCi0gICAgICAgIGJ1aWxk
RnJhZ21lbnQ6IGZ1bmN0aW9uKGUsIHQsIG4sIHIpIHsKLSAgICAgICAgICAgIHZhciBpLCBvLCBh
LCBzLCB1LCBsLCBjLCBwID0gZS5sZW5ndGgsIGYgPSBkdCh0KSwgZCA9IFtdLCBoID0gMDsKLSAg
ICAgICAgICAgIGZvciAoOyBwID4gaDsgaCsrKQotICAgICAgICAgICAgICAgIGlmIChvID0gZVto
XSwgbyB8fCAwID09PSBvKQotICAgICAgICAgICAgICAgICAgICBpZiAoIm9iamVjdCIgPT09IGIu
dHlwZShvKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGIubWVyZ2UoZCwgby5ub2RlVHlwZSA/
IFtvXSA6IG8pOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3dC50ZXN0KG8pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzID0gcyB8fCBmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxl
bWVudCgiZGl2IikpLCB1ID0gKGJ0LmV4ZWMobykgfHwgWyIiLCAiIl0pWzFdLnRvTG93ZXJDYXNl
KCksIGMgPSBBdFt1XSB8fCBBdC5fZGVmYXVsdCwgcy5pbm5lckhUTUwgPSBjWzFdICsgby5yZXBs
YWNlKHZ0LCAiPCQxPjwvJDI+IikgKyBjWzJdLCBpID0gY1swXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMubGFz
dENoaWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYi5zdXBwb3J0LmxlYWRp
bmdXaGl0ZXNwYWNlICYmIHl0LnRlc3QobykgJiYgZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoeXQu
ZXhlYyhvKVswXSkpLCAhYi5zdXBwb3J0LnRib2R5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG8gPSAidGFibGUiICE9PSB1IHx8IHh0LnRlc3QobykgPyAiPHRhYmxlPiIgIT09
IGNbMV0gfHwgeHQudGVzdChvKSA/IDAgOiBzIDogcy5maXJzdENoaWxkLCBpID0gbyAmJiBvLmNo
aWxkTm9kZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
aS0tKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5ub2RlTmFtZShsID0g
by5jaGlsZE5vZGVzW2ldLCAidGJvZHkiKSYmIWwuY2hpbGROb2Rlcy5sZW5ndGggJiYgby5yZW1v
dmVDaGlsZChsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGIubWVyZ2UoZCwgcy5jaGlsZE5vZGVzKSwgcy50ZXh0Q29u
dGVudCA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocy5maXJz
dENoaWxkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5yZW1vdmVDaGls
ZChzLmZpcnN0Q2hpbGQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9
IGYubGFzdENoaWxkCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpOwotICAgICAgICAg
ICAgcyAmJiBmLnJlbW92ZUNoaWxkKHMpLCBiLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCB8fCBiLmdy
ZXAoT3QoZCwgImlucHV0IiksIEJ0KSwgaCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAobyA9IGRb
aCsrXSkKLSAgICAgICAgICAgICAgICBpZiAoKCFyfHwtMSA9PT0gYi5pbkFycmF5KG8sIHIpKSAm
JiAoYSA9IGIuY29udGFpbnMoby5vd25lckRvY3VtZW50LCBvKSwgcyA9IE90KGYuYXBwZW5kQ2hp
bGQobyksICJzY3JpcHQiKQotICAgICAgICAgICAgICAgICAgICAsIGEgJiYgTXQocyksIG4pKSB7
Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG8gPSBzW2kr
K10pCi0gICAgICAgICAgICAgICAgICAgIGt0LnRlc3Qoby50eXBlIHx8ICIiKSAmJiBuLnB1c2go
bykKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHMgPSBudWxsLCBm
Ci0gICAgICAgIH0sCi0gICAgICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oZSwgdCkgewotICAgICAg
ICAgICAgdmFyIG4sIHIsIG8sIGEsIHMgPSAwLCB1ID0gYi5leHBhbmRvLCBsID0gYi5jYWNoZSwg
cCA9IGIuc3VwcG9ydC5kZWxldGVFeHBhbmRvLCBmID0gYi5ldmVudC5zcGVjaWFsOwotICAgICAg
ICAgICAgZm9yICg7IG51bGwgIT0gKG4gPSBlW3NdKTsgcysrKQotICAgICAgICAgICAgICAgIGlm
ICgodCB8fCBiLmFjY2VwdERhdGEobikpICYmIChvID0gblt1XSwgYSA9IG8gJiYgbFtvXSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGEuZXZlbnRzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChyIGluIGEuZXZlbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZbcl0g
PyBiLmV2ZW50LnJlbW92ZShuLCByKSA6IGIucmVtb3ZlRXZlbnQobiwgciwgYS5oYW5kbGUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxbb10gJiYgKGRlbGV0ZSBsW29dLCBwID8gZGVs
ZXRlIG5bdV0gOiB0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUgIT09IGkgPyBuLnJlbW92ZUF0dHJp
YnV0ZSh1KSA6IG5bdV0gPSBudWxsLCBjLnB1c2gobykpCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSk7Ci0gICAgdmFyIFB0LCBSdCwgV3QsICR0ID0gL2FscGhhXChbXildKlwp
L2ksIEl0ID0gL29wYWNpdHlccyo9XHMqKFteKV0qKS8sIHp0ID0gL14odG9wfHJpZ2h0fGJvdHRv
bXxsZWZ0KSQvLCBYdCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLywgVXQgPSAvXm1hcmdp
bi8sIFZ0ID0gUmVnRXhwKCJeKCIgKyB4ICsgIikoLiopJCIsICJpIiksIFl0ID0gUmVnRXhwKCJe
KCIgKyB4ICsgIikoPyFweClbYS16JV0rJCIsICJpIiksIEp0ID0gUmVnRXhwKCJeKFsrLV0pPSgi
ICsgeCArICIpIiwgImkiKSwgR3QgPSB7Ci0gICAgICAgIEJPRFk6ICJibG9jayIKLSAgICB9LCBR
dCA9IHsKLSAgICAgICAgcG9zaXRpb246ICJhYnNvbHV0ZSIsCi0gICAgICAgIHZpc2liaWxpdHk6
ICJoaWRkZW4iLAotICAgICAgICBkaXNwbGF5OiAiYmxvY2siCi0gICAgfSwgS3QgPSB7Ci0gICAg
ICAgIGxldHRlclNwYWNpbmc6IDAsCi0gICAgICAgIGZvbnRXZWlnaHQ6IDQwMAotICAgIH0sIFp0
ID0gWyJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiXSwgZW4gPSBbIldlYmtpdCIsICJP
IiwgIk1veiIsICJtcyJdOwotICAgIGZ1bmN0aW9uIHRuKGUsIHQpIHsKLSAgICAgICAgaWYgKHQg
aW4gZSkKLSAgICAgICAgICAgIHJldHVybiB0OwotICAgICAgICB2YXIgbiA9IHQuY2hhckF0KDAp
LnRvVXBwZXJDYXNlKCkgKyB0LnNsaWNlKDEpLCByID0gdCwgaSA9IGVuLmxlbmd0aDsKLSAgICAg
ICAgd2hpbGUgKGktLSkKLSAgICAgICAgICAgIGlmICh0ID0gZW5baV0gKyBuLCB0IGluIGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIHJldHVybiByCi0gICAgfQotICAgIGZ1
bmN0aW9uIG5uKGUsIHQpIHsKLSAgICAgICAgcmV0dXJuIGUgPSB0IHx8IGUsICJub25lIiA9PT0g
Yi5jc3MoZSwgImRpc3BsYXkiKSB8fCFiLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCwgZSkKLSAg
ICB9Ci0gICAgZnVuY3Rpb24gcm4oZSwgdCkgewotICAgICAgICB2YXIgbiwgciwgaSwgbyA9IFtd
LCBhID0gMCwgcyA9IGUubGVuZ3RoOwotICAgICAgICBmb3IgKDsgcyA+IGE7IGErKykKLSAgICAg
ICAgICAgIHIgPSBlW2FdLCByLnN0eWxlICYmIChvW2FdID0gYi5fZGF0YShyLCAib2xkZGlzcGxh
eSIpLCBuID0gci5zdHlsZS5kaXNwbGF5LCB0ID8gKG9bYV0gfHwgIm5vbmUiICE9PSBuIHx8IChy
LnN0eWxlLmRpc3BsYXkgPSAiIiksICIiID09PSByLnN0eWxlLmRpc3BsYXkgJiYgbm4ocikgJiYg
KG9bYV0gPSBiLl9kYXRhKHIsICJvbGRkaXNwbGF5IiwgdW4oci5ub2RlTmFtZSkpKSkgOiBvW2Fd
IHx8IChpID0gbm4ociksIChuICYmICJub25lIiAhPT0gbiB8fCFpKSAmJiBiLl9kYXRhKHIsICJv
bGRkaXNwbGF5IiwgaSA/IG4gOiBiLmNzcyhyLCAiZGlzcGxheSIpKSkpOwotICAgICAgICBmb3Ig
KGEgPSAwOyBzID4gYTsgYSsrKQotICAgICAgICAgICAgciA9IGVbYV0sIHIuc3R5bGUgJiYgKHQg
JiYgIm5vbmUiICE9PSByLnN0eWxlLmRpc3BsYXkgJiYgIiIgIT09IHIuc3R5bGUuZGlzcGxheSB8
fCAoci5zdHlsZS5kaXNwbGF5ID0gdCA/IG9bYV0gfHwgIiIgOiAibm9uZSIpKTsKLSAgICAgICAg
cmV0dXJuIGUKLSAgICB9Ci0gICAgYi5mbi5leHRlbmQoewotICAgICAgICBjc3M6IGZ1bmN0aW9u
KGUsIG4pIHsKLSAgICAgICAgICAgIHJldHVybiBiLmFjY2Vzcyh0aGlzLCBmdW5jdGlvbihlLCBu
LCByKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGksIG8sIGEgPSB7fSwgcyA9IDA7Ci0gICAgICAg
ICAgICAgICAgaWYgKGIuaXNBcnJheShuKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKG8g
PSBSdChlKSwgaSA9IG4ubGVuZ3RoOyBpID4gczsgcysrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYVtuW3NdXSA9IGIuY3NzKGUsIG5bc10sICExLCBvKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHIgIT09
IHQgPyBiLnN0eWxlKGUsIG4sIHIpIDogYi5jc3MoZSwgbikKLSAgICAgICAgICAgIH0sIGUsIG4s
IGFyZ3VtZW50cy5sZW5ndGggPiAxKQotICAgICAgICB9LAotICAgICAgICBzaG93OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHJldHVybiBybih0aGlzLCAhMCkKLSAgICAgICAgfSwKLSAgICAg
ICAgaGlkZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gcm4odGhpcykKLSAgICAg
ICAgfSwKLSAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICB2YXIgdCA9
ICJib29sZWFuIiA9PSB0eXBlb2YgZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgKHQgPyBlIDogbm4odGhpcykpID8gYih0aGlzKS5z
aG93KCkgOiBiKHRoaXMpLmhpZGUoKQotICAgICAgICAgICAgfSkKLSAgICAgICAgfQotICAgIH0p
LCBiLmV4dGVuZCh7Ci0gICAgICAgIGNzc0hvb2tzOiB7Ci0gICAgICAgICAgICBvcGFjaXR5OiB7
Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFd0KGUsICJvcGFj
aXR5Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiIgPT09IG4gPyAiMSIgOiBu
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0gICAgICAgIGNzc051bWJlcjogewotICAgICAgICAgICAgY29sdW1uQ291
bnQ6ICEwLAotICAgICAgICAgICAgZmlsbE9wYWNpdHk6ICEwLAotICAgICAgICAgICAgZm9udFdl
aWdodDogITAsCi0gICAgICAgICAgICBsaW5lSGVpZ2h0OiAhMCwKLSAgICAgICAgICAgIG9wYWNp
dHk6ICEwLAotICAgICAgICAgICAgb3JwaGFuczogITAsCi0gICAgICAgICAgICB3aWRvd3M6ICEw
LAotICAgICAgICAgICAgekluZGV4OiAhMCwKLSAgICAgICAgICAgIHpvb206ICEwCi0gICAgICAg
IH0sCi0gICAgICAgIGNzc1Byb3BzOiB7Ci0gICAgICAgICAgICAiZmxvYXQiOiBiLnN1cHBvcnQu
Y3NzRmxvYXQgPyAiY3NzRmxvYXQiOiAic3R5bGVGbG9hdCIKLSAgICAgICAgfSwKLSAgICAgICAg
c3R5bGU6IGZ1bmN0aW9uKGUsIG4sIHIsIGkpIHsKLSAgICAgICAgICAgIGlmIChlICYmIDMgIT09
IGUubm9kZVR5cGUgJiYgOCAhPT0gZS5ub2RlVHlwZSAmJiBlLnN0eWxlKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIG8sIGEsIHMsIHUgPSBiLmNhbWVsQ2FzZShuKSwgbCA9IGUuc3R5bGU7Ci0gICAg
ICAgICAgICAgICAgaWYgKG4gPSBiLmNzc1Byb3BzW3VdIHx8IChiLmNzc1Byb3BzW3VdID0gdG4o
bCwgdSkpLCBzID0gYi5jc3NIb29rc1tuXSB8fCBiLmNzc0hvb2tzW3VdLCByID09PSB0KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcyAmJiAiZ2V0ImluIHMgJiYgKG8gPSBzLmdldChlLCAh
MSwgaSkpICE9PSB0ID8gbyA6IGxbbl07Ci0gICAgICAgICAgICAgICAgaWYgKGEgPSB0eXBlb2Yg
ciwgInN0cmluZyIgPT09IGEgJiYgKG8gPSBKdC5leGVjKHIpCi0gICAgICAgICAgICAgICAgICAg
ICkgJiYgKHIgPSAob1sxXSArIDEpICogb1syXSArIHBhcnNlRmxvYXQoYi5jc3MoZSwgbikpLCBh
ID0gIm51bWJlciIpLCAhKG51bGwgPT0gciB8fCAibnVtYmVyIiA9PT0gYSAmJiBpc05hTihyKSB8
fCAoIm51bWJlciIgIT09IGEgfHwgYi5jc3NOdW1iZXJbdV0gfHwgKHIgKz0gInB4IiksIGIuc3Vw
cG9ydC5jbGVhckNsb25lU3R5bGUgfHwgIiIgIT09IHIgfHwgMCAhPT0gbi5pbmRleE9mKCJiYWNr
Z3JvdW5kIikgfHwgKGxbbl0gPSAiaW5oZXJpdCIpLCBzICYmICJzZXQiaW4gcyAmJiAociA9IHMu
c2V0KGUsIHIsIGkpKSA9PT0gdCkpKXRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGxbbl0gPSBy
Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoYykge30KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSwKLSAgICAgICAgY3NzOiBmdW5jdGlvbihlLCBuLCByLCBpKSB7Ci0gICAgICAgICAgICB2YXIg
bywgYSwgcywgdSA9IGIuY2FtZWxDYXNlKG4pOwotICAgICAgICAgICAgcmV0dXJuIG4gPSBiLmNz
c1Byb3BzW3VdIHx8IChiLmNzc1Byb3BzW3VdID0gdG4oZS5zdHlsZSwgdSkpLCBzID0gYi5jc3NI
b29rc1tuXSB8fCBiLmNzc0hvb2tzW3VdLCBzICYmICJnZXQiaW4gcyAmJiAoYSA9IHMuZ2V0KGUs
ICEwLCByKSksIGEgPT09IHQgJiYgKGEgPSBXdChlLCBuLCBpKSksICJub3JtYWwiID09PSBhICYm
IG4gaW4gS3QgJiYgKGEgPSBLdFtuXSksICIiID09PSByIHx8IHIgPyAobyA9IHBhcnNlRmxvYXQo
YSksIHI9PT0hMCB8fCBiLmlzTnVtZXJpYyhvKSA/IG8gfHwgMCA6IGEpIDogYQotICAgICAgICB9
LAotICAgICAgICBzd2FwOiBmdW5jdGlvbihlLCB0LCBuLCByKSB7Ci0gICAgICAgICAgICB2YXIg
aSwgbywgYSA9IHt9OwotICAgICAgICAgICAgZm9yIChvIGluIHQpCi0gICAgICAgICAgICAgICAg
YVtvXSA9IGUuc3R5bGVbb10sIGUuc3R5bGVbb10gPSB0W29dOwotICAgICAgICAgICAgaSA9IG4u
YXBwbHkoZSwgciB8fCBbXSk7Ci0gICAgICAgICAgICBmb3IgKG8gaW4gdCkKLSAgICAgICAgICAg
ICAgICBlLnN0eWxlW29dID0gYVtvXTsKLSAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIH0K
LSAgICB9KSwgZS5nZXRDb21wdXRlZFN0eWxlID8gKFJ0ID0gZnVuY3Rpb24odCkgewotICAgICAg
ICByZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsIG51bGwpCi0gICAgfSwgV3QgPSBmdW5jdGlv
bihlLCBuLCByKSB7Ci0gICAgICAgIHZhciBpLCBvLCBhLCBzID0gciB8fCBSdChlKSwgdSA9IHMg
PyBzLmdldFByb3BlcnR5VmFsdWUobikgfHwgc1tuXSA6IHQsIGwgPSBlLnN0eWxlOwotICAgICAg
ICByZXR1cm4gcyAmJiAoIiIgIT09IHUgfHwgYi5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsIGUp
IHx8ICh1ID0gYi5zdHlsZShlLCBuKSksIFl0LnRlc3QodSkgJiYgVXQudGVzdChuKSAmJiAoaSA9
IGwud2lkdGgsIG8gPSBsLm1pbldpZHRoLCBhID0gbC5tYXhXaWR0aCwgbC5taW5XaWR0aCA9IGwu
bWF4V2lkdGggPSBsLndpZHRoID0gdSwgdSA9IHMud2lkdGgsIGwud2lkdGggPSBpLCBsLm1pbldp
ZHRoID0gbywgbC5tYXhXaWR0aCA9IGEpKSwgdQotICAgIH0pIDogby5kb2N1bWVudEVsZW1lbnQu
Y3VycmVudFN0eWxlICYmIChSdCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgcmV0dXJuIGUuY3Vy
cmVudFN0eWxlCi0gICAgfSwgV3QgPSBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAgIHZhciBp
LCBvLCBhLCBzID0gciB8fCBSdChlKSwgdSA9IHMgPyBzW25dOiB0LCBsID0gZS5zdHlsZTsKLSAg
ICAgICAgcmV0dXJuIG51bGwgPT0gdSAmJiBsICYmIGxbbl0gJiYgKHUgPSBsW25dKSwgWXQudGVz
dCh1KSYmIXp0LnRlc3QobikgJiYgKGkgPSBsLmxlZnQsIG8gPSBlLnJ1bnRpbWVTdHlsZSwgYSA9
IG8gJiYgby5sZWZ0LCBhICYmIChvLmxlZnQgPSBlLmN1cnJlbnRTdHlsZS5sZWZ0KSwgbC5sZWZ0
ID0gImZvbnRTaXplIiA9PT0gbiA/ICIxZW0iIDogdSwgdSA9IGwucGl4ZWxMZWZ0ICsgInB4Iiwg
bC5sZWZ0ID0gaSwgYSAmJiAoby5sZWZ0ID0gYSkpLCAiIiA9PT0gdSA/ICJhdXRvIiA6IHUKLSAg
ICB9KTsKLSAgICBmdW5jdGlvbiBvbihlLCB0LCBuKSB7Ci0gICAgICAgIHZhciByID0gVnQuZXhl
Yyh0KTsKLSAgICAgICAgcmV0dXJuIHIgPyBNYXRoLm1heCgwLCByWzFdIC0gKG4gfHwgMCkpICsg
KHJbMl0gfHwgInB4IikgOiB0Ci0gICAgfQotICAgIGZ1bmN0aW9uIGFuKGUsIHQsIG4sIHIsIGkp
IHsKLSAgICAgICAgdmFyIG8gPSBuID09PSAociA/ICJib3JkZXIiIDogImNvbnRlbnQiKSA/IDQ6
ICJ3aWR0aCIgPT09IHQgPyAxOiAwLCBhID0gMDsKLSAgICAgICAgZm9yICg7IDQgPiBvOyBvICs9
IDIpCi0gICAgICAgICAgICAibWFyZ2luIiA9PT0gbiAmJiAoYSArPSBiLmNzcyhlLCBuICsgWnRb
b10sICEwLCBpKSksIHIgPyAoImNvbnRlbnQiID09PSBuICYmIChhIC09IGIuY3NzKGUsICJwYWRk
aW5nIiArIFp0W29dLCAhMCwgaSkpLCAibWFyZ2luIiAhPT0gbiAmJiAoYSAtPSBiLmNzcyhlLCAi
Ym9yZGVyIiArIFp0W29dICsgIldpZHRoIiwgITAsIGkpKSkgOiAoYSArPSBiLmNzcyhlLCAicGFk
ZGluZyIgKyBadFtvXSwgITAsIGkpLCAicGFkZGluZyIgIT09IG4gJiYgKGEgKz0gYi5jc3MoZSwg
ImJvcmRlciIgKyBadFtvXSArICJXaWR0aCIsICEwLCBpKSkpOwotICAgICAgICByZXR1cm4gYQot
ICAgIH0KLSAgICBmdW5jdGlvbiBzbihlLCB0LCBuKSB7Ci0gICAgICAgIHZhciByPSEwLCBpID0g
IndpZHRoIiA9PT0gdCA/IGUub2Zmc2V0V2lkdGggOiBlLm9mZnNldEhlaWdodCwgbyA9IFJ0KGUp
LCBhID0gYi5zdXBwb3J0LmJveFNpemluZyAmJiAiYm9yZGVyLWJveCIgPT09IGIuY3NzKGUsICJi
b3hTaXppbmciLCAhMSwgbyk7Ci0gICAgICAgIGlmICgwID49IGkgfHwgbnVsbCA9PSBpKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA9IFd0KGUsIHQsIG8pLCAoMCA+IGkgfHwgbnVsbCA9PSBpKSAmJiAo
aSA9IGUuc3R5bGVbdF0pCi0gICAgICAgICAgICAgICAgLCBZdC50ZXN0KGkpKXJldHVybiBpOwot
ICAgICAgICAgICAgciA9IGEgJiYgKGIuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSB8fCBpID09
PSBlLnN0eWxlW3RdKSwgaSA9IHBhcnNlRmxvYXQoaSkgfHwgMAotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBpICsgYW4oZSwgdCwgbiB8fCAoYSA/ICJib3JkZXIiIDogImNvbnRlbnQiKSwgciwg
bykgKyAicHgiCi0gICAgfQotICAgIGZ1bmN0aW9uIHVuKGUpIHsKLSAgICAgICAgdmFyIHQgPSBv
LCBuID0gR3RbZV07Ci0gICAgICAgIHJldHVybiBuIHx8IChuID0gbG4oZSwgdCksICJub25lIiAh
PT0gbiAmJiBuIHx8IChQdCA9IChQdCB8fCBiKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0
aD0nMCcgaGVpZ2h0PScwJy8+IikuY3NzKCJjc3NUZXh0IiwgImRpc3BsYXk6YmxvY2sgIWltcG9y
dGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksIHQgPSAoUHRbMF0uY29udGVudFdp
bmRvdyB8fCBQdFswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LCB0LndyaXRlKCI8IWRvY3R5
cGUgaHRtbD48aHRtbD48Ym9keT4iKSwgdC5jbG9zZSgpLCBuID0gbG4oZSwgdCksIFB0LmRldGFj
aCgpKSwgR3RbZV0gPSBuKSwgbgotICAgIH0KLSAgICBmdW5jdGlvbiBsbihlLCB0KSB7Ci0gICAg
ICAgIHZhciBuID0gYih0LmNyZWF0ZUVsZW1lbnQoZSkpLmFwcGVuZFRvKHQuYm9keSksIHIgPSBi
LmNzcyhuWzBdLCAiZGlzcGxheSIpOwotICAgICAgICByZXR1cm4gbi5yZW1vdmUoKSwgcgotICAg
IH0KLSAgICBiLmVhY2goWyJoZWlnaHQiLCAid2lkdGgiXSwgZnVuY3Rpb24oZSwgbikgewotICAg
ICAgICBiLmNzc0hvb2tzW25dID0gewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlLCByLCBp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHIgPyAwID09PSBlLm9mZnNldFdpZHRoICYmIFh0
LnRlc3QoYi5jc3MoZSwgImRpc3BsYXkiKSkgPyBiLnN3YXAoZSwgUXQsIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc24oZSwgbiwgaSkKLSAgICAgICAgICAgICAgICB9
KSA6IHNuKGUsIG4sIGkpIDogdAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNldDogZnVu
Y3Rpb24oZSwgdCwgcikgewotICAgICAgICAgICAgICAgIHZhciBpID0gciAmJiBSdChlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gb24oZSwgdCwgciA/IGFuKGUsIG4sIHIsIGIuc3VwcG9ydC5i
b3hTaXppbmcgJiYgImJvcmRlci1ib3giID09PSBiLmNzcyhlLCAiYm94U2l6aW5nIiwgITEsIGkp
LCBpKSA6IDApCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KSwgYi5zdXBwb3J0Lm9w
YWNpdHkgfHwgKGIuY3NzSG9va3Mub3BhY2l0eSA9IHsKLSAgICAgICAgZ2V0OiBmdW5jdGlvbihl
LCB0KSB7Ci0gICAgICAgICAgICByZXR1cm4gSXQudGVzdCgodCAmJiBlLmN1cnJlbnRTdHlsZSA/
IGUuY3VycmVudFN0eWxlLmZpbHRlciA6IGUuc3R5bGUuZmlsdGVyKSB8fCAiIikgPyAuMDEgKiBw
YXJzZUZsb2F0KFJlZ0V4cC4kMSkgKyAiIiA6IHQgPyAiMSIgOiAiIgotICAgICAgICB9LAotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuID0gZS5zdHlsZSwg
ciA9IGUuY3VycmVudFN0eWxlLCBpID0gYi5pc051bWVyaWModCkgPyAiYWxwaGEob3BhY2l0eT0i
ICsgMTAwICogdCArICIpIjogIiIsIG8gPSByICYmIHIuZmlsdGVyIHx8IG4uZmlsdGVyIHx8ICIi
OwotICAgICAgICAgICAgbi56b29tID0gMSwgKHQgPj0gMSB8fCAiIiA9PT0gdCkgJiYgIiIgPT09
IGIudHJpbShvLnJlcGxhY2UoJHQsICIiKSkgJiYgbi5yZW1vdmVBdHRyaWJ1dGUgJiYgKG4ucmVt
b3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwgIiIgPT09IHQgfHwgciYmIXIuZmlsdGVyKSB8fCAobi5m
aWx0ZXIgPSAkdC50ZXN0KG8pID8gby5yZXBsYWNlKCR0LCBpKSA6IG8gKyAiICIgKyBpKQotICAg
ICAgICB9Ci0gICAgfSksIGIoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGIuc3VwcG9ydC5yZWxpYWJs
ZU1hcmdpblJpZ2h0IHx8IChiLmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gewotICAgICAgICAgICAg
Z2V0OiBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG4gPyBiLnN3YXAo
ZSwgewotICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIgotICAgICAg
ICAgICAgICAgIH0sIFd0LCBbZSwgIm1hcmdpblJpZ2h0Il0pIDogdAotICAgICAgICAgICAgfQot
ICAgICAgICB9KSwgIWIuc3VwcG9ydC5waXhlbFBvc2l0aW9uICYmIGIuZm4ucG9zaXRpb24gJiYg
Yi5lYWNoKFsidG9wIiwgImxlZnQiXSwgZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgYi5j
c3NIb29rc1tuXSA9IHsKLSAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGUsIHIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHIgPyAociA9IFd0KGUsIG4pLCBZdC50ZXN0KHIpID8g
YihlKS5wb3NpdGlvbigpW25dICsgInB4IiA6IHIpIDogdAotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSkKLSAgICB9KSwgYi5leHByICYmIGIuZXhwci5maWx0ZXJz
ICYmIChiLmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIHJldHVy
biAwID49IGUub2Zmc2V0V2lkdGggJiYgMCA+PSBlLm9mZnNldEhlaWdodCB8fCFiLnN1cHBvcnQu
cmVsaWFibGVIaWRkZW5PZmZzZXRzICYmICJub25lIiA9PT0gKGUuc3R5bGUgJiYgZS5zdHlsZS5k
aXNwbGF5IHx8IGIuY3NzKGUsICJkaXNwbGF5IikpCi0gICAgfSwgYi5leHByLmZpbHRlcnMudmlz
aWJsZSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgcmV0dXJuICFiLmV4cHIuZmlsdGVycy5oaWRk
ZW4oZSkKLSAgICB9KSwgYi5lYWNoKHsKLSAgICAgICAgbWFyZ2luOiAiIiwKLSAgICAgICAgcGFk
ZGluZzogIiIsCi0gICAgICAgIGJvcmRlcjogIldpZHRoIgotICAgIH0sIGZ1bmN0aW9uKGUsIHQp
IHsKLSAgICAgICAgYi5jc3NIb29rc1tlICsgdF0gPSB7Ci0gICAgICAgICAgICBleHBhbmQ6IGZ1
bmN0aW9uKG4pIHsKLSAgICAgICAgICAgICAgICB2YXIgciA9IDAsIGkgPSB7fSwgbyA9ICJzdHJp
bmciID09IHR5cGVvZiBuID8gbi5zcGxpdCgiICIpOiBbbl07Ci0gICAgICAgICAgICAgICAgZm9y
ICg7IDQgPiByOyByKyspCi0gICAgICAgICAgICAgICAgICAgIGlbZSArIFp0W3JdICsgdF0gPSBv
W3JdIHx8IG9bci0yXSB8fCBvWzBdOwotICAgICAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sIFV0LnRlc3QoZSkgfHwgKGIuY3NzSG9va3NbZSArIHRdLnNldCA9
IG9uKQotICAgIH0pOwotICAgIHZhciBjbiA9IC8lMjAvZywgcG4gPSAvXFtcXSQvLCBmbiA9IC9c
cj9cbi9nLCBkbiA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSwgaG4g
PSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7Ci0gICAgYi5mbi5leHRlbmQo
ewotICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGIu
cGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKQotICAgICAgICB9LAotICAgICAgICBzZXJpYWxp
emVBcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGUgPSBiLnByb3AodGhpcywgImVsZW1lbnRzIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGUgPyBiLm1ha2VBcnJheShlKSA6IHRoaXMKLSAgICAg
ICAgICAgIH0pLmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgZSA9IHRo
aXMudHlwZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lJiYhYih0aGlzKS5pcygi
OmRpc2FibGVkIikgJiYgaG4udGVzdCh0aGlzLm5vZGVOYW1lKSYmIWRuLnRlc3QoZSkgJiYgKHRo
aXMuY2hlY2tlZCB8fCFOdC50ZXN0KGUpKQotICAgICAgICAgICAgfSkubWFwKGZ1bmN0aW9uKGUs
IHQpIHsKLSAgICAgICAgICAgICAgICB2YXIgbiA9IGIodGhpcykudmFsKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGwgPT0gbiA/IG51bGwgOiBiLmlzQXJyYXkobikgPyBiLm1hcChuLCBm
dW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lOiB0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTog
ZS5yZXBsYWNlKGZuLCAiXHJcbiIpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KSA6IHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZTogdC5uYW1lLAotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogbi5yZXBsYWNlKGZuLCAiXHJcbiIpCi0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSkuZ2V0KCkKLSAgICAgICAgfQotICAgIH0pLCBiLnBhcmFtID0gZnVu
Y3Rpb24oZSwgbikgewotICAgICAgICB2YXIgciwgaSA9IFtdLCBvID0gZnVuY3Rpb24oZSwgdCkg
ewotICAgICAgICAgICAgdCA9IGIuaXNGdW5jdGlvbih0KSA/IHQoKSA6IG51bGwgPT0gdCA/ICIi
IDogdCwgaVtpLmxlbmd0aF0gPSBlbmNvZGVVUklDb21wb25lbnQoZSkgKyAiPSIgKyBlbmNvZGVV
UklDb21wb25lbnQodCkKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKG4gPT09IHQgJiYgKG4gPSBi
LmFqYXhTZXR0aW5ncyAmJiBiLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksIGIuaXNBcnJheShl
KSB8fCBlLmpxdWVyeSYmIWIuaXNQbGFpbk9iamVjdChlKQotICAgICAgICAgICAgKWIuZWFjaChl
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIG8odGhpcy5uYW1lLCB0aGlzLnZhbHVlKQotICAg
ICAgICB9KTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIGZvciAociBpbiBlKQotICAgICAg
ICAgICAgICAgIGduKHIsIGVbcl0sIG4sIG8pOwotICAgICAgICByZXR1cm4gaS5qb2luKCImIiku
cmVwbGFjZShjbiwgIisiKQotICAgIH07Ci0gICAgZnVuY3Rpb24gZ24oZSwgdCwgbiwgcikgewot
ICAgICAgICB2YXIgaTsKLSAgICAgICAgaWYgKGIuaXNBcnJheSh0KSkKLSAgICAgICAgICAgIGIu
ZWFjaCh0LCBmdW5jdGlvbih0LCBpKSB7Ci0gICAgICAgICAgICAgICAgbiB8fCBwbi50ZXN0KGUp
ID8gcihlLCBpKSA6IGduKGUgKyAiWyIgKyAoIm9iamVjdCIgPT0gdHlwZW9mIGkgPyB0IDogIiIp
ICsgIl0iLCBpLCBuLCByKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIGVsc2UgaWYgKG4gfHwg
Im9iamVjdCIgIT09IGIudHlwZSh0KSkKLSAgICAgICAgICAgIHIoZSwgdCk7Ci0gICAgICAgIGVs
c2UgCi0gICAgICAgICAgICBmb3IgKGkgaW4gdCkKLSAgICAgICAgICAgICAgICBnbihlICsgIlsi
ICsgaSArICJdIiwgdFtpXSwgbiwgcikKLSAgICB9Ci0gICAgYi5lYWNoKCJibHVyIGZvY3VzIGZv
Y3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBt
b3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIg
bW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVy
cm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGIu
Zm5bdF0gPSBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxl
bmd0aCA+IDAgPyB0aGlzLm9uKHQsIG51bGwsIGUsIG4pIDogdGhpcy50cmlnZ2VyKHQpCi0gICAg
ICAgIH0KLSAgICB9KSwgYi5mbi5ob3ZlciA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHQgfHwgZSkKLSAgICB9OwotICAgIHZh
ciBtbiwgeW4sIHZuID0gYi5ub3coKSwgYm4gPSAvXD8vLCB4biA9IC8jLiokLywgd24gPSAvKFs/
Jl0pXz1bXiZdKi8sIFRuID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSwgTm4gPSAv
Xig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTok
LywgQ24gPSAvXig/OkdFVHxIRUFEKSQvLCBrbiA9IC9eXC9cLy8sIEVuID0gL14oW1x3ListXSs6
KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLCBTbiA9IGIuZm4ubG9hZCwgQW4gPSB7
fSwgam4gPSB7fSwgRG4gPSAiKi8iLmNvbmNhdCgiKiIpOwotICAgIHRyeSB7Ci0gICAgICAgIHlu
ID0gYS5ocmVmCi0gICAgfSBjYXRjaCAoTG4pIHsKLSAgICAgICAgeW4gPSBvLmNyZWF0ZUVsZW1l
bnQoImEiKSwgeW4uaHJlZiA9ICIiLCB5biA9IHluLmhyZWYKLSAgICB9Ci0gICAgbW4gPSBFbi5l
eGVjKHluLnRvTG93ZXJDYXNlKCkpIHx8IFtdOwotICAgIGZ1bmN0aW9uIEhuKGUpIHsKLSAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKHQsIG4pIHsKLSAgICAgICAgICAgICJzdHJpbmciICE9IHR5cGVv
ZiB0ICYmIChuID0gdCwgdCA9ICIqIik7Ci0gICAgICAgICAgICB2YXIgciwgaSA9IDAsIG8gPSB0
LnRvTG93ZXJDYXNlKCkubWF0Y2godykgfHwgW107Ci0gICAgICAgICAgICBpZiAoYi5pc0Z1bmN0
aW9uKG4pKQotICAgICAgICAgICAgICAgIHdoaWxlIChyID0gb1tpKytdKQotICAgICAgICAgICAg
ICAgICAgICAiKyIgPT09IHJbMF0gPyAociA9IHIuc2xpY2UoMSkgfHwgIioiLCAoZVtyXSA9IGVb
cl0gfHwgW10pLnVuc2hpZnQobikpIDogKGVbcl0gPSBlW3JdIHx8IFtdKS5wdXNoKG4pCi0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gcW4oZSwgbiwgciwgaSkgewotICAgICAgICB2YXIg
byA9IHt9LCBhID0gZSA9PT0gam47Ci0gICAgICAgIGZ1bmN0aW9uIHModSkgewotICAgICAgICAg
ICAgdmFyIGw7Ci0gICAgICAgICAgICByZXR1cm4gb1t1XT0hMCwgYi5lYWNoKGVbdV0gfHwgW10s
IGZ1bmN0aW9uKGUsIHUpIHsKLSAgICAgICAgICAgICAgICB2YXIgYyA9IHUobiwgciwgaSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciICE9IHR5cGVvZiBjIHx8IGEgfHwgb1tjXSA/
IGE/IShsID0gYykgOiB0IDogKG4uZGF0YVR5cGVzLnVuc2hpZnQoYyksIHMoYyksICExKQotICAg
ICAgICAgICAgfSksIGwKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcyhuLmRhdGFUeXBlc1sw
XSkgfHwhb1siKiJdICYmIHMoIioiKQotICAgIH0KLSAgICBmdW5jdGlvbiBNbihlLCBuKSB7Ci0g
ICAgICAgIHZhciByLCBpLCBvID0gYi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0g
ICAgICAgIGZvciAoaSBpbiBuKQotICAgICAgICAgICAgbltpXSAhPT0gdCAmJiAoKG9baV0gPyBl
IDogciB8fCAociA9IHt9KSlbaV0gPSBuW2ldKTsKLSAgICAgICAgcmV0dXJuIHIgJiYgYi5leHRl
bmQoITAsIGUsIHIpLCBlCi0gICAgfQotICAgIGIuZm4ubG9hZCA9IGZ1bmN0aW9uKGUsIG4sIHIp
IHsKLSAgICAgICAgaWYgKCJzdHJpbmciICE9IHR5cGVvZiBlICYmIFNuKQotICAgICAgICAgICAg
cmV0dXJuIFNuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIHZhciBpLCBvLCBhLCBz
ID0gdGhpcywgdSA9IGUuaW5kZXhPZigiICIpOwotICAgICAgICByZXR1cm4gdSA+PSAwICYmIChp
ID0gZS5zbGljZSh1LCBlLmxlbmd0aCksIGUgPSBlLnNsaWNlKDAsIHUpKSwgYi5pc0Z1bmN0aW9u
KG4pID8gKHIgPSBuLCBuID0gdCkgOiBuICYmICJvYmplY3QiID09IHR5cGVvZiBuICYmIChhID0g
IlBPU1QiKSwgcy5sZW5ndGggPiAwICYmIGIuYWpheCh7Ci0gICAgICAgICAgICB1cmw6IGUsCi0g
ICAgICAgICAgICB0eXBlOiBhLAotICAgICAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKLSAgICAg
ICAgICAgIGRhdGE6IG4KLSAgICAgICAgfSkuZG9uZShmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICBvID0gYXJndW1lbnRzLCBzLmh0bWwoaSA/IGIoIjxkaXY+IikuYXBwZW5kKGIucGFyc2VIVE1M
KGUpKS5maW5kKGkpIDogZSkKLSAgICAgICAgfSkuY29tcGxldGUociAmJiBmdW5jdGlvbihlLCB0
KSB7Ci0gICAgICAgICAgICBzLmVhY2gociwgbyB8fCBbZS5yZXNwb25zZVRleHQsIHQsIGVdKQot
ICAgICAgICB9KSwgdGhpcwotICAgIH0sIGIuZWFjaChbImFqYXhTdGFydCIsICJhamF4U3RvcCIs
ICJhamF4Q29tcGxldGUiLCAiYWpheEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIl0s
IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgYi5mblt0XSA9IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLm9uKHQsIGUpCi0gICAgICAgIH0KLSAgICB9KSwgYi5lYWNoKFsi
Z2V0IiwgInBvc3QiXSwgZnVuY3Rpb24oZSwgbikgewotICAgICAgICBiW25dID0gZnVuY3Rpb24o
ZSwgciwgaSwgbykgewotICAgICAgICAgICAgcmV0dXJuIGIuaXNGdW5jdGlvbihyKSAmJiAobyA9
IG8gfHwgaSwgaSA9IHIsIHIgPSB0KSwgYi5hamF4KHsKLSAgICAgICAgICAgICAgICB1cmw6IGUs
Ci0gICAgICAgICAgICAgICAgdHlwZTogbiwKLSAgICAgICAgICAgICAgICBkYXRhVHlwZTogbywK
LSAgICAgICAgICAgICAgICBkYXRhOiByLAotICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGkKLSAg
ICAgICAgICAgIH0pCi0gICAgICAgIH0KLSAgICB9KSwgYi5leHRlbmQoewotICAgICAgICBhY3Rp
dmU6IDAsCi0gICAgICAgIGxhc3RNb2RpZmllZDoge30sCi0gICAgICAgIGV0YWc6IHt9LAotICAg
ICAgICBhamF4U2V0dGluZ3M6IHsKLSAgICAgICAgICAgIHVybDogeW4sCi0gICAgICAgICAgICB0
eXBlOiAiR0VUIiwKLSAgICAgICAgICAgIGlzTG9jYWw6IE5uLnRlc3QobW5bMV0pLAotICAgICAg
ICAgICAgZ2xvYmFsOiAhMCwKLSAgICAgICAgICAgIHByb2Nlc3NEYXRhOiAhMCwKLSAgICAgICAg
ICAgIGFzeW5jOiAhMCwKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13
d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKLSAgICAgICAgICAgIGFjY2VwdHM6
IHsKLSAgICAgICAgICAgICAgICAiKiI6IERuLAotICAgICAgICAgICAgICAgIHRleHQ6ICJ0ZXh0
L3BsYWluIiwKLSAgICAgICAgICAgICAgICBodG1sOiAidGV4dC9odG1sIiwKLSAgICAgICAgICAg
ICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLSAgICAgICAgICAgICAgICBq
c29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgotICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgICAgICAgICAgeG1sOiAveG1sLywKLSAg
ICAgICAgICAgICAgICBodG1sOiAvaHRtbC8sCi0gICAgICAgICAgICAgICAganNvbjogL2pzb24v
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcmVzcG9uc2VGaWVsZHM6IHsKLSAgICAgICAg
ICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCi0gICAgICAgICAgICAgICAgdGV4dDogInJlc3Bv
bnNlVGV4dCIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBjb252ZXJ0ZXJzOiB7Ci0gICAg
ICAgICAgICAgICAgIiogdGV4dCI6IGUuU3RyaW5nLAotICAgICAgICAgICAgICAgICJ0ZXh0IGh0
bWwiOiAhMCwKLSAgICAgICAgICAgICAgICAidGV4dCBqc29uIjogYi5wYXJzZUpTT04sCi0gICAg
ICAgICAgICAgICAgInRleHQgeG1sIjogYi5wYXJzZVhNTAotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIGZsYXRPcHRpb25zOiB7Ci0gICAgICAgICAgICAgICAgdXJsOiAhMCwKLSAgICAgICAg
ICAgICAgICBjb250ZXh0OiAhMAotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICBh
amF4U2V0dXA6IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHJldHVybiB0ID8gTW4oTW4o
ZSwgYi5hamF4U2V0dGluZ3MpLCB0KSA6IE1uKGIuYWpheFNldHRpbmdzLCBlKQotICAgICAgICB9
LAotICAgICAgICBhamF4UHJlZmlsdGVyOiBIbihBbiksCi0gICAgICAgIGFqYXhUcmFuc3BvcnQ6
IEhuKGpuKSwKLSAgICAgICAgYWpheDogZnVuY3Rpb24oZSwgbikgewotICAgICAgICAgICAgIm9i
amVjdCIgPT0gdHlwZW9mIGUgJiYgKG4gPSBlLCBlID0gdCksIG4gPSBuIHx8IHt9OwotICAgICAg
ICAgICAgdmFyIHIsIGksIG8sIGEsIHMsIHUsIGwsIGMsIHAgPSBiLmFqYXhTZXR1cCh7fSwgbiks
IGYgPSBwLmNvbnRleHQgfHwgcCwgZCA9IHAuY29udGV4dCAmJiAoZi5ub2RlVHlwZSB8fCBmLmpx
dWVyeSkgPyBiKGYpOiBiLmV2ZW50LCBoID0gYi5EZWZlcnJlZCgpLCBnID0gYi5DYWxsYmFja3Mo
Im9uY2UgbWVtb3J5IiksIG0gPSBwLnN0YXR1c0NvZGUgfHwge30sIHkgPSB7fSwgdiA9IHt9LCB4
ID0gMCwgVCA9ICJjYW5jZWxlZCIsIE4gPSB7Ci0gICAgICAgICAgICAgICAgcmVhZHlTdGF0ZTog
MCwKLSAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oZSkgewotICAg
ICAgICAgICAgICAgICAgICB2YXIgdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKDIgPT09IHgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA9
IFRuLmV4ZWMoYSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbdFsxXS50b0xv
d2VyQ2FzZSgpXSA9IHRbMl0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHQgPSBjW2UudG9Mb3dlckNhc2UoKV0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbCA9PSB0ID8gbnVsbCA6IHQKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAyID09PSB4ID8gYSA6IG51bGwK
LSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBlLnRvTG93ZXJDYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB4IHx8IChlID0gdltuXSA9IHZbbl0gfHwg
ZSwgeVtlXSA9IHQpLCB0aGlzCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBv
dmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB4IHx8IChwLm1pbWVUeXBlID0gZSksIHRoaXMKLSAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgIHN0YXR1c0NvZGU6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKDIgPiB4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCBpbiBlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtW3RdID0gW21bdF0sIGVbdF1dOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
LmFsd2F5cyhlW04uc3RhdHVzXSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzCi0g
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGUgfHwgVDsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGwgJiYgbC5hYm9ydCh0KSwgaygwLCB0KSwgdGhpcwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAoaC5wcm9taXNlKE4pLmNvbXBsZXRlID0g
Zy5hZGQsIE4uc3VjY2VzcyA9IE4uZG9uZSwgTi5lcnJvciA9IE4uZmFpbCwgcC51cmwgPSAoKGUg
fHwgcC51cmwgfHwgeW4pICsgIiIpLnJlcGxhY2UoeG4sICIiKS5yZXBsYWNlKGtuLCBtblsxXSAr
ICIvLyIpLCBwLnR5cGUgPSBuLm1ldGhvZCB8fCBuLnR5cGUgfHwgcC5tZXRob2QgfHwgcC50eXBl
LCBwLmRhdGFUeXBlcyA9IGIudHJpbShwLmRhdGFUeXBlIHx8ICIqIikudG9Mb3dlckNhc2UoKS5t
YXRjaCh3KSB8fCBbIiJdLCBudWxsID09IHAuY3Jvc3NEb21haW4gJiYgKHIgPSBFbi5leGVjKHAu
dXJsLnRvTG93ZXJDYXNlKCkpLCBwLmNyb3NzRG9tYWluPSEoIXIgfHwgclsxXSA9PT0gbW5bMV0g
JiYgclsyXSA9PT0gbW5bMl0gJiYgKHJbM10gfHwgKCJodHRwOiIgPT09IHJbMV0gPyA4MCA6IDQ0
MykpID09IChtblszXSB8fCAoImh0dHA6IiA9PT0gbW5bMV0gPyA4MCA6IDQ0MykpKSksIHAuZGF0
YSAmJiBwLnByb2Nlc3NEYXRhICYmICJzdHJpbmciICE9IHR5cGVvZiBwLmRhdGEgJiYgKHAuZGF0
YSA9IGIucGFyYW0ocC5kYXRhLCBwLnRyYWRpdGlvbmFsKSksIHFuKEFuLCBwLCBuLCBOKSwgMiA9
PT0geClyZXR1cm4gTjsKLSAgICAgICAgICAgIHUgPSBwLmdsb2JhbCwgdSAmJiAwID09PSBiLmFj
dGl2ZSsrJiZiLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLCBwLnR5cGUgPSBwLnR5cGUudG9V
cHBlckNhc2UoKSwgcC5oYXNDb250ZW50PSFDbi50ZXN0KHAudHlwZSksIG8gPSBwLnVybCwgcC5o
YXNDb250ZW50IHx8IChwLmRhdGEgJiYgKG8gPSBwLnVybCArPSAoYm4udGVzdChvKSA/ICImIiA6
ICI/IikgKyBwLmRhdGEsIGRlbGV0ZSBwLmRhdGEpLCBwLmNhY2hlPT09ITEgJiYgKHAudXJsID0g
d24udGVzdChvKSA/IG8ucmVwbGFjZSh3biwgIiQxXz0iICsgdm4rKykgOiBvICsgKGJuLnRlc3Qo
bykgPyAiJiIgOiAiPyIpICsgIl89IiArIHZuKyspKSwgcC5pZk1vZGlmaWVkICYmIChiLmxhc3RN
b2RpZmllZFtvXSAmJiBOLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIiwgYi5s
YXN0TW9kaWZpZWRbb10pLCBiLmV0YWdbb10gJiYgTi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25l
LU1hdGNoIiwgYi5ldGFnW29dKSksIChwLmRhdGEgJiYgcC5oYXNDb250ZW50ICYmIHAuY29udGVu
dFR5cGUhPT0hMSB8fCBuLmNvbnRlbnRUeXBlKSAmJiBOLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRl
bnQtVHlwZSIsIHAuY29udGVudFR5cGUpLCBOLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsIHAu
ZGF0YVR5cGVzWzBdICYmIHAuYWNjZXB0c1twLmRhdGFUeXBlc1swXV0gPyBwLmFjY2VwdHNbcC5k
YXRhVHlwZXNbMF1dICsgKCIqIiAhPT0gcC5kYXRhVHlwZXNbMF0gPyAiLCAiICsgRG4gKyAiOyBx
PTAuMDEiIDogIiIpIDogcC5hY2NlcHRzWyIqIl0pOwotICAgICAgICAgICAgZm9yIChpIGluIHAu
aGVhZGVycykKLSAgICAgICAgICAgICAgICBOLnNldFJlcXVlc3RIZWFkZXIoaSwgcC5oZWFkZXJz
W2ldKTsKLSAgICAgICAgICAgIGlmIChwLmJlZm9yZVNlbmQgJiYgKHAuYmVmb3JlU2VuZC5jYWxs
KGYsIE4sIHApPT09ITEgfHwgMiA9PT0geCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE4uYWJv
cnQoKTsKLSAgICAgICAgICAgIFQgPSAiYWJvcnQiOwotICAgICAgICAgICAgZm9yIChpIGluewot
ICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IDEsCi0gICAgICAgICAgICAgICAgZXJyb3I6IDEsCi0g
ICAgICAgICAgICAgICAgY29tcGxldGU6IDEKLSAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAg
ICAgTltpXShwW2ldKTsKLSAgICAgICAgICAgIGlmIChsID0gcW4oam4sIHAsIG4sIE4pKSB7Ci0g
ICAgICAgICAgICAgICAgTi5yZWFkeVN0YXRlID0gMSwgdSAmJiBkLnRyaWdnZXIoImFqYXhTZW5k
IiwgW04sIHBdKSwgcC5hc3luYyAmJiBwLnRpbWVvdXQgPiAwICYmIChzID0gc2V0VGltZW91dChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgTi5hYm9ydCgidGltZW91dCIpCi0gICAg
ICAgICAgICAgICAgfSwgcC50aW1lb3V0KSk7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgeCA9IDEsIGwuc2VuZCh5LCBrKQotICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKEMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoMiA+IHgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgQzsKLSAgICAgICAgICAgICAgICAgICAgaygtMSwgQykKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAgaygtMSwg
Ik5vIFRyYW5zcG9ydCIpOwotICAgICAgICAgICAgZnVuY3Rpb24gayhlLCBuLCByLCBpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGMsIHksIHYsIHcsIFQsIEMgPSBuOwotICAgICAgICAgICAgICAg
IDIgIT09IHggJiYgKHggPSAyLCBzICYmIGNsZWFyVGltZW91dChzKSwgbCA9IHQsIGEgPSBpIHx8
ICIiLCBOLnJlYWR5U3RhdGUgPSBlID4gMCA/IDQgOiAwLCByICYmICh3ID0gX24ocCwgTiwgcikp
LCBlID49IDIwMCAmJiAzMDAgPiBlIHx8IDMwNCA9PT0gZSA/IChwLmlmTW9kaWZpZWQgJiYgKFQg
PSBOLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksIFQgJiYgKGIubGFzdE1vZGlm
aWVkW29dID0gVCksIFQgPSBOLmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksIFQgJiYgKGIuZXRh
Z1tvXSA9IFQpKSwgMjA0ID09PSBlID8gKGM9ITAsIEMgPSAibm9jb250ZW50IikgOiAzMDQgPT09
IGUgPyAoYz0hMCwgQyA9ICJub3Rtb2RpZmllZCIpIDogKGMgPSBGbihwLCB3KSwgQyA9IGMuc3Rh
dGUsIHkgPSBjLmRhdGEsIHYgPSBjLmVycm9yLCBjPSF2KSkgOiAodiA9IEMsIChlIHx8IUMpICYm
IChDID0gImVycm9yIiwgMCA+IGUgJiYgKGUgPSAwKSkpLCBOLnN0YXR1cyA9IGUsIE4uc3RhdHVz
VGV4dCA9IChuIHx8IEMpICsgIiIsIGMgPyBoLnJlc29sdmVXaXRoKGYsIFt5LCBDLCBOXSkgOiBo
LnJlamVjdFdpdGgoZiwgW04sIEMsIHZdKSwgTi5zdGF0dXNDb2RlKG0pLCBtID0gdCwgdSAmJiBk
LnRyaWdnZXIoYyA/ICJhamF4U3VjY2VzcyIgOiAiYWpheEVycm9yIiwgW04sIHAsIGMgPyB5OiB2
XSksIGcuZmlyZVdpdGgoZiwgW04sIENdKSwgdSAmJiAoZC50cmlnZ2VyKCJhamF4Q29tcGxldGUi
LCBbTiwgcF0pLCAtLWIuYWN0aXZlIHx8IGIuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTgotICAgICAgICB9LAotICAgICAgICBn
ZXRTY3JpcHQ6IGZ1bmN0aW9uKGUsIG4pIHsKLSAgICAgICAgICAgIHJldHVybiBiLmdldChlLCB0
LCBuLCAic2NyaXB0IikKLSAgICAgICAgfSwKLSAgICAgICAgZ2V0SlNPTjogZnVuY3Rpb24oZSwg
dCwgbikgewotICAgICAgICAgICAgcmV0dXJuIGIuZ2V0KGUsIHQsIG4sICJqc29uIikKLSAgICAg
ICAgfQotICAgIH0pOwotICAgIGZ1bmN0aW9uIF9uKGUsIG4sIHIpIHsKLSAgICAgICAgdmFyIGks
IG8sIGEsIHMsIHUgPSBlLmNvbnRlbnRzLCBsID0gZS5kYXRhVHlwZXMsIGMgPSBlLnJlc3BvbnNl
RmllbGRzOwotICAgICAgICBmb3IgKHMgaW4gYykKLSAgICAgICAgICAgIHMgaW4gciAmJiAobltj
W3NdXSA9IHJbc10pOwotICAgICAgICB3aGlsZSAoIioiID09PSBsWzBdKQotICAgICAgICAgICAg
bC5zaGlmdCgpLCBvID09PSB0ICYmIChvID0gZS5taW1lVHlwZSB8fCBuLmdldFJlc3BvbnNlSGVh
ZGVyKCJDb250ZW50LVR5cGUiKSk7Ci0gICAgICAgIGlmIChvKQotICAgICAgICAgICAgZm9yIChz
IGluIHUpCi0gICAgICAgICAgICAgICAgaWYgKHVbc10gJiYgdVtzXS50ZXN0KG8pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGwudW5zaGlmdChzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIGlmIChsWzBdaW4gcikKLSAgICAgICAgICAgIGEg
PSBsWzBdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAocyBpbiByKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFsWzBdIHx8IGUuY29udmVydGVyc1tzICsgIiAiICsgbFswXV0pIHsK
LSAgICAgICAgICAgICAgICAgICAgYSA9IHM7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGkgfHwgKGkgPSBzKQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYSA9IGEgfHwgaQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBh
ID8gKGEgIT09IGxbMF0gJiYgbC51bnNoaWZ0KGEpLCByW2FdKSA6IHQKLSAgICB9Ci0gICAgZnVu
Y3Rpb24gRm4oZSwgdCkgewotICAgICAgICB2YXIgbiwgciwgaSwgbywgYSA9IHt9LCBzID0gMCwg
dSA9IGUuZGF0YVR5cGVzLnNsaWNlKCksIGwgPSB1WzBdOwotICAgICAgICBpZiAoZS5kYXRhRmls
dGVyICYmICh0ID0gZS5kYXRhRmlsdGVyKHQsIGUuZGF0YVR5cGUpKSwgdVsxXSkKLSAgICAgICAg
ICAgIGZvciAoaSBpbiBlLmNvbnZlcnRlcnMpCi0gICAgICAgICAgICAgICAgYVtpLnRvTG93ZXJD
YXNlKCldID0gZS5jb252ZXJ0ZXJzW2ldOwotICAgICAgICBmb3IgKDsgciA9IHVbKytzXTspCi0g
ICAgICAgICAgICBpZiAoIioiICE9PSByKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCIqIiAhPT0g
bCAmJiBsICE9PSByKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID0gYVtsICsgIiAiICsg
cl0gfHwgYVsiKiAiICsgcl0sICFpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuIGlu
IGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBuLnNwbGl0KCIgIiksIG9b
MV0gPT09IHIgJiYgKGkgPSBhW2wgKyAiICIgKyBvWzBdXSB8fCBhWyIqICIgKyBvWzBdXSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpPT09ITAgPyBpID0gYVtuXSA6IGFbbl0hPT0hMCAmJiAociA9IG9bMF0s
IHUuc3BsaWNlKHMtLSwgMCwgcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaSE9PSEwKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgJiYgZVsidGhyb3dzIl0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdCA9IGkodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBpKHQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoYykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICJwYXJz
ZXJlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcjogaSA/IGM6ICJObyBjb252ZXJzaW9uIGZyb20gIiArIGwgKyAiIHRvICIgKyByCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gcgot
ICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgc3RhdGU6ICJzdWNj
ZXNzIiwKLSAgICAgICAgICAgIGRhdGE6IHQKLSAgICAgICAgfQotICAgIH0KLSAgICBiLmFqYXhT
ZXR1cCh7Ci0gICAgICAgIGFjY2VwdHM6IHsKLSAgICAgICAgICAgIHNjcmlwdDogInRleHQvamF2
YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwg
YXBwbGljYXRpb24veC1lY21hc2NyaXB0IgotICAgICAgICB9LAotICAgICAgICBjb250ZW50czog
ewotICAgICAgICAgICAgc2NyaXB0OiAvKD86amF2YXxlY21hKXNjcmlwdC8KLSAgICAgICAgfSwK
LSAgICAgICAgY29udmVydGVyczogewotICAgICAgICAgICAgInRleHQgc2NyaXB0IjogZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBiLmdsb2JhbEV2YWwoZSksIGUKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0pLCBiLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsIGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgZS5jYWNoZSA9PT0gdCAmJiAoZS5jYWNoZT0hMSksIGUuY3Jv
c3NEb21haW4gJiYgKGUudHlwZSA9ICJHRVQiLCBlLmdsb2JhbD0hMSkKLSAgICB9KSwgYi5hamF4
VHJhbnNwb3J0KCJzY3JpcHQiLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmIChlLmNyb3NzRG9t
YWluKSB7Ci0gICAgICAgICAgICB2YXIgbiwgciA9IG8uaGVhZCB8fCBiKCJoZWFkIilbMF0gfHwg
by5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
IHNlbmQ6IGZ1bmN0aW9uKHQsIGkpIHsKLSAgICAgICAgICAgICAgICAgICAgbiA9IG8uY3JlYXRl
RWxlbWVudCgic2NyaXB0IiksIG4uYXN5bmM9ITAsIGUuc2NyaXB0Q2hhcnNldCAmJiAobi5jaGFy
c2V0ID0gZS5zY3JpcHRDaGFyc2V0KSwgbi5zcmMgPSBlLnVybCwgbi5vbmxvYWQgPSBuLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICh0IHx8IW4ucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KG4ucmVhZHlTdGF0
ZSkpICYmIChuLm9ubG9hZCA9IG4ub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbCwgbi5wYXJlbnRO
b2RlICYmIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSwgbiA9IG51bGwsIHQgfHwgaSgyMDAs
ICJzdWNjZXNzIikpCi0gICAgICAgICAgICAgICAgICAgIH0sIHIuaW5zZXJ0QmVmb3JlKG4sIHIu
Zmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGFib3J0OiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgbiAmJiBuLm9ubG9hZCh0LCAhMCkKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICB2
YXIgT24gPSBbXSwgQm4gPSAvKD0pXD8oPz0mfCQpfFw/XD8vOwotICAgIGIuYWpheFNldHVwKHsK
LSAgICAgICAganNvbnA6ICJjYWxsYmFjayIsCi0gICAgICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgdmFyIGUgPSBPbi5wb3AoKSB8fCBiLmV4cGFuZG8gKyAiXyIg
KyB2bisrOwotICAgICAgICAgICAgcmV0dXJuIHRoaXNbZV09ITAsIGUKLSAgICAgICAgfQotICAg
IH0pLCBiLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLCBmdW5jdGlvbihuLCByLCBpKSB7Ci0g
ICAgICAgIHZhciBvLCBhLCBzLCB1ID0gbi5qc29ucCE9PSExICYmIChCbi50ZXN0KG4udXJsKSA/
ICJ1cmwiIDogInN0cmluZyIgPT0gdHlwZW9mIG4uZGF0YSYmIShuLmNvbnRlbnRUeXBlIHx8ICIi
KS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSAmJiBCbi50ZXN0
KG4uZGF0YSkgJiYgImRhdGEiKTsKLSAgICAgICAgcmV0dXJuIHUgfHwgImpzb25wIiA9PT0gbi5k
YXRhVHlwZXNbMF0gPyAobyA9IG4uanNvbnBDYWxsYmFjayA9IGIuaXNGdW5jdGlvbihuLmpzb25w
Q2FsbGJhY2spID8gbi5qc29ucENhbGxiYWNrKCkgOiBuLmpzb25wQ2FsbGJhY2ssIHUgPyBuW3Vd
ID0gblt1XS5yZXBsYWNlKEJuLCAiJDEiICsgbykgOiBuLmpzb25wIT09ITEgJiYgKG4udXJsICs9
IChibi50ZXN0KG4udXJsKSA/ICImIiA6ICI/IikgKyBuLmpzb25wICsgIj0iICsgbyksIG4uY29u
dmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJu
IHMgfHwgYi5lcnJvcihvICsgIiB3YXMgbm90IGNhbGxlZCIpLCBzWzBdCi0gICAgICAgIH0sIG4u
ZGF0YVR5cGVzWzBdID0gImpzb24iLCBhID0gZVtvXSwgZVtvXSA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgcyA9IGFyZ3VtZW50cwotICAgICAgICB9LCBpLmFsd2F5cyhmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIGVbb10gPSBhLCBuW29dICYmIChuLmpzb25wQ2FsbGJhY2sgPSByLmpzb25w
Q2FsbGJhY2ssIE9uLnB1c2gobykpLCBzICYmIGIuaXNGdW5jdGlvbihhKSAmJiBhKHNbMF0pLCBz
ID0gYSA9IHQKLSAgICAgICAgfSksICJzY3JpcHQiKSA6IHQKLSAgICB9KTsKLSAgICB2YXIgUG4s
IFJuLCBXbiA9IDAsICRuID0gZS5BY3RpdmVYT2JqZWN0ICYmIGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgZTsKLSAgICAgICAgZm9yIChlIGluIFBuKQotICAgICAgICAgICAgUG5bZV0odCwgITAp
Ci0gICAgfTsKLSAgICBmdW5jdGlvbiBJbigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdAotICAgICAgICB9IGNhdGNoICh0KSB7fQotICAg
IH0KLSAgICBmdW5jdGlvbiB6bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgZS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpCi0gICAgICAgIH0gY2F0
Y2ggKHQpIHt9Ci0gICAgfQotICAgIGIuYWpheFNldHRpbmdzLnhociA9IGUuQWN0aXZlWE9iamVj
dCA/IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBJbigpIHx8
IHpuKCkKLSAgICB9IDogSW4sIFJuID0gYi5hamF4U2V0dGluZ3MueGhyKCksIGIuc3VwcG9ydC5j
b3JzPSEhUm4gJiYgIndpdGhDcmVkZW50aWFscyJpbiBSbiwgUm4gPSBiLnN1cHBvcnQuYWpheD0h
IVJuLCBSbiAmJiBiLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24obikgewotICAgICAgICBpZiAoIW4u
Y3Jvc3NEb21haW4gfHwgYi5zdXBwb3J0LmNvcnMpIHsKLSAgICAgICAgICAgIHZhciByOwotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbihpLCBvKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhLCBzLCB1ID0gbi54aHIoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG4udXNlcm5hbWUgPyB1Lm9wZW4obi50eXBlLCBuLnVybCwgbi5hc3luYywg
bi51c2VybmFtZSwgbi5wYXNzd29yZCkgOiB1Lm9wZW4obi50eXBlLCBuLnVybCwgbi5hc3luYyks
IG4ueGhyRmllbGRzKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzIGluIG4ueGhyRmll
bGRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVbc10gPSBuLnhockZpZWxkc1tzXTsK
LSAgICAgICAgICAgICAgICAgICAgbi5taW1lVHlwZSAmJiB1Lm92ZXJyaWRlTWltZVR5cGUgJiYg
dS5vdmVycmlkZU1pbWVUeXBlKG4ubWltZVR5cGUpLCBuLmNyb3NzRG9tYWluIHx8IGlbIlgtUmVx
dWVzdGVkLVdpdGgiXSB8fCAoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdID0gIlhNTEh0dHBSZXF1ZXN0
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHMgaW4gaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LnNldFJlcXVlc3RIZWFk
ZXIocywgaVtzXSkKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobCkge30KLSAgICAgICAg
ICAgICAgICAgICAgdS5zZW5kKG4uaGFzQ29udGVudCAmJiBuLmRhdGEgfHwgbnVsbCksIHIgPSBm
dW5jdGlvbihlLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcywgbCwgYywgcDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHIgJiYgKGkgfHwgNCA9PT0gdS5yZWFkeVN0YXRlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHIgPSB0LCBhICYmICh1Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGIu
bm9vcCwgJG4gJiYgZGVsZXRlIFBuW2FdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCBpKTQgIT09IHUucmVhZHlTdGF0ZSAmJiB1LmFib3J0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg
PSB7fSwgcyA9IHUuc3RhdHVzLCBsID0gdS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSwgInN0cmlu
ZyIgPT0gdHlwZW9mIHUucmVzcG9uc2VUZXh0ICYmIChwLnRleHQgPSB1LnJlc3BvbnNlVGV4dCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjID0gdS5zdGF0dXNUZXh0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGMgPSAiIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHMgfHwhbi5pc0xvY2FsIHx8IG4uY3Jvc3NEb21haW4g
PyAxMjIzID09PSBzICYmIChzID0gMjA0KSA6IHMgPSBwLnRleHQgPyAyMDAgOiA0MDQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
IChkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSB8fCBvKC0xLCBkKQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcCAmJiBvKHMsIGMs
IHAsIGwpCi0gICAgICAgICAgICAgICAgICAgIH0sIG4uYXN5bmMgPyA0ID09PSB1LnJlYWR5U3Rh
dGUgPyBzZXRUaW1lb3V0KHIpIDogKGE9KytXbiwgJG4gJiYgKFBuIHx8IChQbiA9IHt9LCBiKGUp
LnVubG9hZCgkbikpLCBQblthXSA9IHIpLCB1Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHIpIDogcigp
Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHIgJiYgcih0LCAhMCkKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICB2YXIgWG4sIFVuLCBWbiA9IC9e
KD86dG9nZ2xlfHNob3d8aGlkZSkkLywgWW4gPSBSZWdFeHAoIl4oPzooWystXSk9fCkoIiArIHgg
KyAiKShbYS16JV0qKSQiLCAiaSIpLCBKbiA9IC9xdWV1ZUhvb2tzJC8sIEduID0gW25yXSwgUW4g
PSB7Ci0gICAgICAgICIqIjogW2Z1bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIHZhciBuLCBy
LCBpID0gdGhpcy5jcmVhdGVUd2VlbihlLCB0KSwgbyA9IFluLmV4ZWModCksIGEgPSBpLmN1cigp
LCBzID0rIGEgfHwgMCwgdSA9IDEsIGwgPSAyMDsKLSAgICAgICAgICAgIGlmIChvKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG4gPSsgb1syXSwgciA9IG9bM10gfHwgKGIuY3NzTnVtYmVyW2VdID8g
IiIgOiAicHgiKQotICAgICAgICAgICAgICAgICAgICAsICJweCIgIT09IHIgJiYgcykgewotICAg
ICAgICAgICAgICAgICAgICBzID0gYi5jc3MoaS5lbGVtLCBlLCAhMCkgfHwgbiB8fCAxOwotICAg
ICAgICAgICAgICAgICAgICBkbyAKLSAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1IHx8ICIu
NSIsIHMvPXUsIGIuc3R5bGUoaS5lbGVtLCBlLCBzICsgcik7Ci0gICAgICAgICAgICAgICAgICAg
IHdoaWxlICh1ICE9PSAodSA9IGkuY3VyKCkgLyBhKSAmJiAxICE9PSB1JiYtLWwpCi0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpLnVuaXQgPSByLCBpLnN0YXJ0ID0gcywg
aS5lbmQgPSBvWzFdID8gcyArIChvWzFdICsgMSkgKiBuIDogbgotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGkKLSAgICAgICAgfQotICAgICAgICBdCi0gICAgfTsKLSAgICBmdW5j
dGlvbiBLbigpIHsKLSAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBYbiA9IHQKLSAgICAgICAgfSksIFhuID0gYi5ub3coKQotICAgIH0KLSAgICBmdW5j
dGlvbiBabihlLCB0KSB7Ci0gICAgICAgIGIuZWFjaCh0LCBmdW5jdGlvbih0LCBuKSB7Ci0gICAg
ICAgICAgICB2YXIgciA9IChRblt0XSB8fCBbXSkuY29uY2F0KFFuWyIqIl0pLAotICAgICAgICAg
ICAgaSA9IDAsCi0gICAgICAgICAgICBvID0gci5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKDsK
LSAgICAgICAgICAgIG8gPiBpOwotICAgICAgICAgICAgaSsrKWlmIChyW2ldLmNhbGwoZSwKLSAg
ICAgICAgICAgIHQsCi0gICAgICAgICAgICBuKSlyZXR1cm4gCi0gICAgICAgIH0pCi0gICAgfQot
ICAgIGZ1bmN0aW9uIGVyKGUsIHQsIG4pIHsKLSAgICAgICAgdmFyIHIsIGksIG8gPSAwLCBhID0g
R24ubGVuZ3RoLCBzID0gYi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSB1LmVsZW0KLSAgICAgICAgfSksIHUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIGlmIChpKQotICAgICAgICAgICAgICAgIHJldHVybiAhMTsKLSAgICAgICAgICAgIHZhciB0
ID0gWG4gfHwgS24oKSwgbiA9IE1hdGgubWF4KDAsIGwuc3RhcnRUaW1lICsgbC5kdXJhdGlvbiAt
IHQpLCByID0gbiAvIGwuZHVyYXRpb24gfHwgMCwgbyA9IDEgLSByLCBhID0gMCwgdSA9IGwudHdl
ZW5zLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAoOyB1ID4gYTsgYSsrKQotICAgICAgICAgICAg
ICAgIGwudHdlZW5zW2FdLnJ1bihvKTsKLSAgICAgICAgICAgIHJldHVybiBzLm5vdGlmeVdpdGgo
ZSwgW2wsIG8sIG5dKSwgMSA+IG8gJiYgdSA/IG4gOiAocy5yZXNvbHZlV2l0aChlLCBbbF0pLCAh
MSkKLSAgICAgICAgfSwgbCA9IHMucHJvbWlzZSh7Ci0gICAgICAgICAgICBlbGVtOiBlLAotICAg
ICAgICAgICAgcHJvcHM6IGIuZXh0ZW5kKHt9LCB0KSwKLSAgICAgICAgICAgIG9wdHM6IGIuZXh0
ZW5kKCEwLCB7Ci0gICAgICAgICAgICAgICAgc3BlY2lhbEVhc2luZzoge30KLSAgICAgICAgICAg
IH0sIG4pLAotICAgICAgICAgICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiB0LAotICAgICAgICAgICAg
b3JpZ2luYWxPcHRpb25zOiBuLAotICAgICAgICAgICAgc3RhcnRUaW1lOiBYbiB8fCBLbigpLAot
ICAgICAgICAgICAgZHVyYXRpb246IG4uZHVyYXRpb24sCi0gICAgICAgICAgICB0d2VlbnM6IFtd
LAotICAgICAgICAgICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKHQsIG4pIHsKLSAgICAgICAgICAg
ICAgICB2YXIgciA9IGIuVHdlZW4oZSwgbC5vcHRzLCB0LCBuLCBsLm9wdHMuc3BlY2lhbEVhc2lu
Z1t0XSB8fCBsLm9wdHMuZWFzaW5nKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbC50d2VlbnMu
cHVzaChyKSwgcgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKHQp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbiA9IDAsIHIgPSB0ID8gbC50d2VlbnMubGVuZ3RoOiAw
OwotICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgICAgICBmb3IgKGk9ITA7IHIgPiBuOyBuKyspCi0gICAgICAgICAgICAg
ICAgICAgIGwudHdlZW5zW25dLnJ1bigxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdCA/IHMu
cmVzb2x2ZVdpdGgoZSwgW2wsIHRdKSA6IHMucmVqZWN0V2l0aChlLCBbbCwgdF0pLCB0aGlzCi0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pLCBjID0gbC5wcm9wczsKLSAgICAgICAgZm9yICh0cihj
LCBsLm9wdHMuc3BlY2lhbEVhc2luZyk7Ci0gICAgICAgIGEgPiBvOwotICAgICAgICBvKyspaWYg
KHIgPSBHbltvXS5jYWxsKGwsIGUsIGMsIGwub3B0cykpCi0gICAgICAgICAgICByZXR1cm4gcjsK
LSAgICAgICAgcmV0dXJuIFpuKGwsIGMpLCBiLmlzRnVuY3Rpb24obC5vcHRzLnN0YXJ0KSAmJiBs
Lm9wdHMuc3RhcnQuY2FsbChlLCBsKSwgYi5meC50aW1lcihiLmV4dGVuZCh1LCB7Ci0gICAgICAg
ICAgICBlbGVtOiBlLAotICAgICAgICAgICAgYW5pbTogbCwKLSAgICAgICAgICAgIHF1ZXVlOiBs
Lm9wdHMucXVldWUKLSAgICAgICAgfSkpLCBsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9u
ZShsLm9wdHMuZG9uZSwgbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMo
bC5vcHRzLmFsd2F5cykKLSAgICB9Ci0gICAgZnVuY3Rpb24gdHIoZSwgdCkgewotICAgICAgICB2
YXIgbiwgciwgaSwgbywgYTsKLSAgICAgICAgZm9yIChpIGluIGUpCi0gICAgICAgICAgICBpZiAo
ciA9IGIuY2FtZWxDYXNlKGkpLCBvID0gdFtyXSwgbiA9IGVbaV0sIGIuaXNBcnJheShuKSAmJiAo
byA9IG5bMV0sIG4gPSBlW2ldID0gblswXSkKLSAgICAgICAgICAgICAgICAsIGkgIT09IHIgJiYg
KGVbcl0gPSBuLCBkZWxldGUgZVtpXSksIGEgPSBiLmNzc0hvb2tzW3JdLCBhICYmICJleHBhbmQi
aW4gYSkgewotICAgICAgICAgICAgbiA9IGEuZXhwYW5kKG4pLCBkZWxldGUgZVtyXTsKLSAgICAg
ICAgICAgIGZvciAoaSBpbiBuKQotICAgICAgICAgICAgICAgIGkgaW4gZSB8fCAoZVtpXSA9IG5b
aV0sIHRbaV0gPSBvKQotICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICB0W3JdID0gbwotICAg
IH0KLSAgICBiLkFuaW1hdGlvbiA9IGIuZXh0ZW5kKGVyLCB7Ci0gICAgICAgIHR3ZWVuZXI6IGZ1
bmN0aW9uKGUsIHQpIHsKLSAgICAgICAgICAgIGIuaXNGdW5jdGlvbihlKSA/ICh0ID0gZSwgZSA9
IFsiKiJdKSA6IGUgPSBlLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICB2YXIgbiwgciA9IDAsIGkg
PSBlLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAoOyBpID4gcjsgcisrKQotICAgICAgICAgICAg
ICAgIG4gPSBlW3JdLCBRbltuXSA9IFFuW25dIHx8IFtdLCBRbltuXS51bnNoaWZ0KHQpCi0gICAg
ICAgIH0sCi0gICAgICAgIHByZWZpbHRlcjogZnVuY3Rpb24oZSwgdCkgewotICAgICAgICAgICAg
dCA/IEduLnVuc2hpZnQoZSkgOiBHbi5wdXNoKGUpCi0gICAgICAgIH0KLSAgICB9KTsKLSAgICBm
dW5jdGlvbiBucihlLCB0LCBuKSB7Ci0gICAgICAgIHZhciByLCBpLCBvLCBhLCBzLCB1LCBsLCBj
LCBwLCBmID0gdGhpcywgZCA9IGUuc3R5bGUsIGggPSB7fSwgZyA9IFtdLCBtID0gZS5ub2RlVHlw
ZSAmJiBubihlKTsKLSAgICAgICAgbi5xdWV1ZSB8fCAoYyA9IGIuX3F1ZXVlSG9va3MoZSwgImZ4
IiksIG51bGwgPT0gYy51bnF1ZXVlZCAmJiAoYy51bnF1ZXVlZCA9IDAsIHAgPSBjLmVtcHR5LmZp
cmUsIGMuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgYy51bnF1ZXVlZCB8
fCBwKCkKLSAgICAgICAgfSksIGMudW5xdWV1ZWQrKywgZi5hbHdheXMoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICBmLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBjLnVucXVl
dWVkLS0sIGIucXVldWUoZSwgImZ4IikubGVuZ3RoIHx8IGMuZW1wdHkuZmlyZSgpCi0gICAgICAg
ICAgICB9KQotICAgICAgICB9KSksIDEgPT09IGUubm9kZVR5cGUgJiYgKCJoZWlnaHQiaW4gdCB8
fCAid2lkdGgiaW4gdCkgJiYgKG4ub3ZlcmZsb3cgPSBbZC5vdmVyZmxvdywgZC5vdmVyZmxvd1gs
IGQub3ZlcmZsb3dZXSwgImlubGluZSIgPT09IGIuY3NzKGUsICJkaXNwbGF5IikgJiYgIm5vbmUi
ID09PSBiLmNzcyhlLCAiZmxvYXQiKSAmJiAoYi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlv
dXQgJiYgImlubGluZSIgIT09IHVuKGUubm9kZU5hbWUpID8gZC56b29tID0gMSA6IGQuZGlzcGxh
eSA9ICJpbmxpbmUtYmxvY2siKSksIG4ub3ZlcmZsb3cgJiYgKGQub3ZlcmZsb3cgPSAiaGlkZGVu
IiwgYi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgfHwgZi5hbHdheXMoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICBkLm92ZXJmbG93ID0gbi5vdmVyZmxvd1swXSwgZC5vdmVyZmxvd1ggPSBuLm92
ZXJmbG93WzFdLCBkLm92ZXJmbG93WSA9IG4ub3ZlcmZsb3dbMl0KLSAgICAgICAgfSkpOwotICAg
ICAgICBmb3IgKGkgaW4gdCkKLSAgICAgICAgICAgIGlmIChhID0gdFtpXSwgVm4uZXhlYyhhKQot
ICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgaWYgKGRlbGV0ZSB0W2ldLCB1ID0gdSB8
fCAidG9nZ2xlIiA9PT0gYSwgYSA9PT0gKG0gPyAiaGlkZSIgOiAic2hvdyIpCi0gICAgICAgICAg
ICAgICAgKWNvbnRpbnVlOwotICAgICAgICAgICAgZy5wdXNoKGkpCi0gICAgICAgIH0KLSAgICAg
ICAgaWYgKG8gPSBnLmxlbmd0aCkgewotICAgICAgICAgICAgcyA9IGIuX2RhdGEoZSwgImZ4c2hv
dyIpIHx8IGIuX2RhdGEoZSwgImZ4c2hvdyIsIHt9KSwgImhpZGRlbiJpbiBzICYmIChtID0gcy5o
aWRkZW4pLCB1ICYmIChzLmhpZGRlbj0hbSksIG0gPyBiKGUpLnNob3coKSA6IGYuZG9uZShmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICBiKGUpLmhpZGUoKQotICAgICAgICAgICAgfSksIGYu
ZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdDsKLSAgICAgICAgICAgICAg
ICBiLl9yZW1vdmVEYXRhKGUsICJmeHNob3ciKTsKLSAgICAgICAgICAgICAgICBmb3IgKHQgaW4g
aCkKLSAgICAgICAgICAgICAgICAgICAgYi5zdHlsZShlLCB0LCBoW3RdKQotICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBvID4gaTsgaSsrKQotICAgICAgICAgICAgICAg
IHIgPSBnW2ldLCBsID0gZi5jcmVhdGVUd2VlbihyLCBtID8gc1tyXSA6IDApLCBoW3JdID0gc1ty
XSB8fCBiLnN0eWxlKGUsIHIpLCByIGluIHMgfHwgKHNbcl0gPSBsLnN0YXJ0LCBtICYmIChsLmVu
ZCA9IGwuc3RhcnQsIGwuc3RhcnQgPSAid2lkdGgiID09PSByIHx8ICJoZWlnaHQiID09PSByID8g
MSA6IDApKQotICAgICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJyKGUsIHQsIG4sIHIsIGkp
IHsKLSAgICAgICAgcmV0dXJuIG5ldyByci5wcm90b3R5cGUuaW5pdChlLCB0LCBuLCByLCBpKQot
ICAgIH0KLSAgICBiLlR3ZWVuID0gcnIsIHJyLnByb3RvdHlwZSA9IHsKLSAgICAgICAgY29uc3Ry
dWN0b3I6IHJyLAotICAgICAgICBpbml0OiBmdW5jdGlvbihlLCB0LCBuLCByLCBpLCBvKSB7Ci0g
ICAgICAgICAgICB0aGlzLmVsZW0gPSBlLCB0aGlzLnByb3AgPSBuLCB0aGlzLmVhc2luZyA9IGkg
fHwgInN3aW5nIiwgdGhpcy5vcHRpb25zID0gdCwgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhp
cy5jdXIoKSwgdGhpcy5lbmQgPSByLCB0aGlzLnVuaXQgPSBvIHx8IChiLmNzc051bWJlcltuXSA/
ICIiIDogInB4IikKLSAgICAgICAgfSwKLSAgICAgICAgY3VyOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgIHZhciBlID0gcnIucHJvcEhvb2tzW3RoaXMucHJvcF07Ci0gICAgICAgICAgICByZXR1
cm4gZSAmJiBlLmdldCA/IGUuZ2V0KHRoaXMpIDogcnIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0
aGlzKQotICAgICAgICB9LAotICAgICAgICBydW46IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAg
IHZhciB0LCBuID0gcnIucHJvcEhvb2tzW3RoaXMucHJvcF07Ci0gICAgICAgICAgICByZXR1cm4g
dGhpcy5wb3MgPSB0ID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uID8gYi5lYXNpbmdbdGhpcy5lYXNp
bmddKGUsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIGUsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJh
dGlvbikgOiBlLCB0aGlzLm5vdyA9ICh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdCArIHRoaXMu
c3RhcnQsIHRoaXMub3B0aW9ucy5zdGVwICYmIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5l
bGVtLCB0aGlzLm5vdywgdGhpcyksIG4gJiYgbi5zZXQgPyBuLnNldCh0aGlzKSA6IHJyLnByb3BI
b29rcy5fZGVmYXVsdC5zZXQodGhpcyksIHRoaXMKLSAgICAgICAgfQotICAgIH0sIHJyLnByb3Rv
dHlwZS5pbml0LnByb3RvdHlwZSA9IHJyLnByb3RvdHlwZSwgcnIucHJvcEhvb2tzID0gewotICAg
ICAgICBfZGVmYXVsdDogewotICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gZS5lbGVtW2Uu
cHJvcF0gfHwgZS5lbGVtLnN0eWxlICYmIG51bGwgIT0gZS5lbGVtLnN0eWxlW2UucHJvcF0gPyAo
dCA9IGIuY3NzKGUuZWxlbSwgZS5wcm9wLCAiIiksIHQgJiYgImF1dG8iICE9PSB0ID8gdCA6IDAp
IDogZS5lbGVtW2UucHJvcF0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzZXQ6IGZ1bmN0
aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBiLmZ4LnN0ZXBbZS5wcm9wXSA/IGIuZnguc3RlcFtl
LnByb3BdKGUpIDogZS5lbGVtLnN0eWxlICYmIChudWxsICE9IGUuZWxlbS5zdHlsZVtiLmNzc1By
b3BzW2UucHJvcF1dIHx8IGIuY3NzSG9va3NbZS5wcm9wXSkgPyBiLnN0eWxlKGUuZWxlbSwgZS5w
cm9wLCBlLm5vdyArIGUudW5pdCkgOiBlLmVsZW1bZS5wcm9wXSA9IGUubm93Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9LCByci5wcm9wSG9va3Muc2Nyb2xsVG9wID0gcnIucHJvcEhv
b2tzLnNjcm9sbExlZnQgPSB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24oZSkgewotICAgICAgICAg
ICAgZS5lbGVtLm5vZGVUeXBlICYmIGUuZWxlbS5wYXJlbnROb2RlICYmIChlLmVsZW1bZS5wcm9w
XSA9IGUubm93KQotICAgICAgICB9Ci0gICAgfSwgYi5lYWNoKFsidG9nZ2xlIiwgInNob3ciLCAi
aGlkZSJdLCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIHZhciBuID0gYi5mblt0XTsKLSAgICAg
ICAgYi5mblt0XSA9IGZ1bmN0aW9uKGUsIHIsIGkpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxs
ID09IGUgfHwgImJvb2xlYW4iID09IHR5cGVvZiBlID8gbi5hcHBseSh0aGlzLCBhcmd1bWVudHMp
IDogdGhpcy5hbmltYXRlKGlyKHQsICEwKSwgZSwgciwgaSkKLSAgICAgICAgfQotICAgIH0pLCBi
LmZuLmV4dGVuZCh7Ci0gICAgICAgIGZhZGVUbzogZnVuY3Rpb24oZSwgdCwgbiwgcikgewotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5uKS5jc3MoIm9wYWNpdHkiLCAwKS5zaG93KCku
ZW5kKCkuYW5pbWF0ZSh7Ci0gICAgICAgICAgICAgICAgb3BhY2l0eTogdAotICAgICAgICAgICAg
fSwgZSwgbiwgcikKLSAgICAgICAgfSwKLSAgICAgICAgYW5pbWF0ZTogZnVuY3Rpb24oZSwgdCwg
biwgcikgewotICAgICAgICAgICAgdmFyIGkgPSBiLmlzRW1wdHlPYmplY3QoZSksIG8gPSBiLnNw
ZWVkKHQsIG4sIHIpLCBhID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHQgPSBl
cih0aGlzLCBiLmV4dGVuZCh7fSwgZSksIG8pOwotICAgICAgICAgICAgICAgIGEuZmluaXNoID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHQuc3RvcCghMCkKLSAgICAgICAgICAg
ICAgICB9LCAoaSB8fCBiLl9kYXRhKHRoaXMsICJmaW5pc2giKSkgJiYgdC5zdG9wKCEwKQotICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBhLmZpbmlzaCA9IGEsIGkgfHwgby5xdWV1
ZT09PSExID8gdGhpcy5lYWNoKGEpIDogdGhpcy5xdWV1ZShvLnF1ZXVlLCBhKQotICAgICAgICB9
LAotICAgICAgICBzdG9wOiBmdW5jdGlvbihlLCBuLCByKSB7Ci0gICAgICAgICAgICB2YXIgaSA9
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdCA9IGUuc3RvcDsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgZS5zdG9wLCB0KHIpCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
cmV0dXJuICJzdHJpbmciICE9IHR5cGVvZiBlICYmIChyID0gbiwgbiA9IGUsIGUgPSB0KSwgbiAm
JiBlIT09ITEgJiYgdGhpcy5xdWV1ZShlIHx8ICJmeCIsIFtdKSwgdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgIHZhciB0PSEwLCBuID0gbnVsbCAhPSBlICYmIGUgKyAicXVl
dWVIb29rcyIsIG8gPSBiLnRpbWVycywgYSA9IGIuX2RhdGEodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG4pCi0gICAgICAgICAgICAgICAgICAgIGFbbl0gJiYgYVtuXS5zdG9wICYmIGkoYVtu
XSk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChuIGlu
IGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhW25dICYmIGFbbl0uc3RvcCAmJiBKbi50ZXN0
KG4pICYmIGkoYVtuXSk7Ci0gICAgICAgICAgICAgICAgZm9yIChuID0gby5sZW5ndGg7IG4tLTsp
Ci0gICAgICAgICAgICAgICAgICAgIG9bbl0uZWxlbSAhPT0gdGhpcyB8fCBudWxsICE9IGUgJiYg
b1tuXS5xdWV1ZSAhPT0gZSB8fCAob1tuXS5hbmltLnN0b3AociksIHQ9ITEsIG8uc3BsaWNlKG4s
IDEpKTsKLSAgICAgICAgICAgICAgICAodCB8fCFyKSAmJiBiLmRlcXVldWUodGhpcywgZSkKLSAg
ICAgICAgICAgIH0pCi0gICAgICAgIH0sCi0gICAgICAgIGZpbmlzaDogZnVuY3Rpb24oZSkgewot
ICAgICAgICAgICAgcmV0dXJuIGUhPT0hMSAmJiAoZSA9IGUgfHwgImZ4IiksIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgdCwgbiA9IGIuX2RhdGEodGhpcyksIHIg
PSBuW2UgKyAicXVldWUiXSwgaSA9IG5bZSArICJxdWV1ZUhvb2tzIl0sIG8gPSBiLnRpbWVycywg
YSA9IHIgPyByLmxlbmd0aDogMDsKLSAgICAgICAgICAgICAgICBmb3IgKG4uZmluaXNoPSEwLCBi
LnF1ZXVlKHRoaXMsIGUsIFtdKQotICAgICAgICAgICAgICAgICAgICAsIGkgJiYgaS5jdXIgJiYg
aS5jdXIuZmluaXNoICYmIGkuY3VyLmZpbmlzaC5jYWxsKHRoaXMpLCB0ID0gby5sZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgdC0tOwotICAgICAgICAgICAgICAgIClvW3RdLmVsZW0gPT09IHRoaXMg
JiYgb1t0XS5xdWV1ZSA9PT0gZSAmJiAob1t0XS5hbmltLnN0b3AoITApLCBvLnNwbGljZSh0LCAx
KSk7Ci0gICAgICAgICAgICAgICAgZm9yICh0ID0gMDsgYSA+IHQ7IHQrKykKLSAgICAgICAgICAg
ICAgICAgICAgclt0XSAmJiByW3RdLmZpbmlzaCAmJiByW3RdLmZpbmlzaC5jYWxsKHRoaXMpOwot
ICAgICAgICAgICAgICAgIGRlbGV0ZSBuLmZpbmlzaAotICAgICAgICAgICAgfSkKLSAgICAgICAg
fQotICAgIH0pOwotICAgIGZ1bmN0aW9uIGlyKGUsIHQpIHsKLSAgICAgICAgdmFyIG4sIHIgPSB7
Ci0gICAgICAgICAgICBoZWlnaHQ6IGUKLSAgICAgICAgfSwgaSA9IDA7Ci0gICAgICAgIGZvciAo
dCA9IHQgPyAxIDogMDsgNCA+IGk7IGkgKz0gMiAtIHQpCi0gICAgICAgICAgICBuID0gWnRbaV0s
IHJbIm1hcmdpbiIgKyBuXSA9IHJbInBhZGRpbmciICsgbl0gPSBlOwotICAgICAgICByZXR1cm4g
dCAmJiAoci5vcGFjaXR5ID0gci53aWR0aCA9IGUpLCByCi0gICAgfQotICAgIGIuZWFjaCh7Ci0g
ICAgICAgIHNsaWRlRG93bjogaXIoInNob3ciKSwKLSAgICAgICAgc2xpZGVVcDogaXIoImhpZGUi
KSwKLSAgICAgICAgc2xpZGVUb2dnbGU6IGlyKCJ0b2dnbGUiKSwKLSAgICAgICAgZmFkZUluOiB7
Ci0gICAgICAgICAgICBvcGFjaXR5OiAic2hvdyIKLSAgICAgICAgfSwKLSAgICAgICAgZmFkZU91
dDogewotICAgICAgICAgICAgb3BhY2l0eTogImhpZGUiCi0gICAgICAgIH0sCi0gICAgICAgIGZh
ZGVUb2dnbGU6IHsKLSAgICAgICAgICAgIG9wYWNpdHk6ICJ0b2dnbGUiCi0gICAgICAgIH0KLSAg
ICB9LCBmdW5jdGlvbihlLCB0KSB7Ci0gICAgICAgIGIuZm5bZV0gPSBmdW5jdGlvbihlLCBuLCBy
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKHQsIGUsIG4sIHIpCi0gICAgICAg
IH0KLSAgICB9KSwgYi5zcGVlZCA9IGZ1bmN0aW9uKGUsIHQsIG4pIHsKLSAgICAgICAgdmFyIHIg
PSBlICYmICJvYmplY3QiID09IHR5cGVvZiBlID8gYi5leHRlbmQoe30sIGUpOiB7Ci0gICAgICAg
ICAgICBjb21wbGV0ZTogbiB8fCFuICYmIHQgfHwgYi5pc0Z1bmN0aW9uKGUpICYmIGUsCi0gICAg
ICAgICAgICBkdXJhdGlvbjogZSwKLSAgICAgICAgICAgIGVhc2luZzogbiAmJiB0IHx8IHQmJiFi
LmlzRnVuY3Rpb24odCkgJiYgdAotICAgICAgICB9OwotICAgICAgICByZXR1cm4gci5kdXJhdGlv
biA9IGIuZngub2ZmID8gMCA6ICJudW1iZXIiID09IHR5cGVvZiByLmR1cmF0aW9uID8gci5kdXJh
dGlvbiA6IHIuZHVyYXRpb24gaW4gYi5meC5zcGVlZHMgPyBiLmZ4LnNwZWVkc1tyLmR1cmF0aW9u
XSA6IGIuZnguc3BlZWRzLl9kZWZhdWx0LCAobnVsbCA9PSByLnF1ZXVlIHx8IHIucXVldWU9PT0h
MCkgJiYgKHIucXVldWUgPSAiZngiKSwgci5vbGQgPSByLmNvbXBsZXRlLCByLmNvbXBsZXRlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBiLmlzRnVuY3Rpb24oci5vbGQpICYmIHIub2xkLmNh
bGwodGhpcyksIHIucXVldWUgJiYgYi5kZXF1ZXVlKHRoaXMsIHIucXVldWUpCi0gICAgICAgIH0s
IHIKLSAgICB9LCBiLmVhc2luZyA9IHsKLSAgICAgICAgbGluZWFyOiBmdW5jdGlvbihlKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gZQotICAgICAgICB9LAotICAgICAgICBzd2luZzogZnVuY3Rpb24o
ZSkgewotICAgICAgICAgICAgcmV0dXJuIC41IC0gTWF0aC5jb3MoZSAqIE1hdGguUEkpIC8gMgot
ICAgICAgICB9Ci0gICAgfSwgYi50aW1lcnMgPSBbXSwgYi5meCA9IHJyLnByb3RvdHlwZS5pbml0
LCBiLmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGUsIG4gPSBiLnRpbWVycywg
ciA9IDA7Ci0gICAgICAgIGZvciAoWG4gPSBiLm5vdygpOyBuLmxlbmd0aCA+IHI7IHIrKykKLSAg
ICAgICAgICAgIGUgPSBuW3JdLCBlKCkgfHwgbltyXSAhPT0gZSB8fCBuLnNwbGljZShyLS0sIDEp
OwotICAgICAgICBuLmxlbmd0aCB8fCBiLmZ4LnN0b3AoKSwgWG4gPSB0Ci0gICAgfSwgYi5meC50
aW1lciA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgZSgpICYmIGIudGltZXJzLnB1c2goZSkgJiYg
Yi5meC5zdGFydCgpCi0gICAgfSwgYi5meC5pbnRlcnZhbCA9IDEzLCBiLmZ4LnN0YXJ0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIFVuIHx8IChVbiA9IHNldEludGVydmFsKGIuZngudGljaywgYi5m
eC5pbnRlcnZhbCkpCi0gICAgfSwgYi5meC5zdG9wID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNs
ZWFySW50ZXJ2YWwoVW4pLCBVbiA9IG51bGwKLSAgICB9LCBiLmZ4LnNwZWVkcyA9IHsKLSAgICAg
ICAgc2xvdzogNjAwLAotICAgICAgICBmYXN0OiAyMDAsCi0gICAgICAgIF9kZWZhdWx0OiA0MDAK
LSAgICB9LCBiLmZ4LnN0ZXAgPSB7fSwgYi5leHByICYmIGIuZXhwci5maWx0ZXJzICYmIChiLmV4
cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgcmV0dXJuIGIuZ3Jl
cChiLnRpbWVycywgZnVuY3Rpb24odCkgewotICAgICAgICAgICAgcmV0dXJuIGUgPT09IHQuZWxl
bQotICAgICAgICB9KS5sZW5ndGgKLSAgICB9KSwgYi5mbi5vZmZzZXQgPSBmdW5jdGlvbihlKSB7
Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGUgPT09
IHQgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uKHQpIHsKLSAgICAgICAgICAgICAgICBiLm9m
ZnNldC5zZXRPZmZzZXQodGhpcywgZSwgdCkKLSAgICAgICAgICAgIH0pOwotICAgICAgICB2YXIg
biwgciwgbyA9IHsKLSAgICAgICAgICAgIHRvcDogMCwKLSAgICAgICAgICAgIGxlZnQ6IDAKLSAg
ICAgICAgfSwgYSA9IHRoaXNbMF0sIHMgPSBhICYmIGEub3duZXJEb2N1bWVudDsKLSAgICAgICAg
aWYgKHMpCi0gICAgICAgICAgICByZXR1cm4gbiA9IHMuZG9jdW1lbnRFbGVtZW50LCBiLmNvbnRh
aW5zKG4sIGEpID8gKHR5cGVvZiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gaSAmJiAobyA9
IGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLCByID0gb3IocyksIHsKLSAgICAgICAgICAgIHRv
cCA6IG8udG9wICsgKHIucGFnZVlPZmZzZXQgfHwgbi5zY3JvbGxUb3ApIC0gKG4uY2xpZW50VG9w
IHx8IDApLCBsZWZ0OiBvLmxlZnQgKyAoci5wYWdlWE9mZnNldCB8fCBuLnNjcm9sbExlZnQpIC0g
KG4uY2xpZW50TGVmdCB8fCAwKQotICAgICAgICB9KSA6IG8KLSAgICB9LCBiLm9mZnNldCA9IHsK
LSAgICAgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbihlLCB0LCBuKSB7Ci0gICAgICAgICAgICB2YXIg
ciA9IGIuY3NzKGUsICJwb3NpdGlvbiIpOwotICAgICAgICAgICAgInN0YXRpYyIgPT09IHIgJiYg
KGUuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiKTsKLSAgICAgICAgICAgIHZhciBpID0gYihl
KSwgbyA9IGkub2Zmc2V0KCksIGEgPSBiLmNzcyhlLCAidG9wIiksIHMgPSBiLmNzcyhlLCAibGVm
dCIpLCB1ID0gKCJhYnNvbHV0ZSIgPT09IHIgfHwgImZpeGVkIiA9PT0gcikgJiYgYi5pbkFycmF5
KCJhdXRvIiwgW2EsIHNdKT4tMSwgbCA9IHt9LCBjID0ge30sIHAsIGY7Ci0gICAgICAgICAgICB1
ID8gKGMgPSBpLnBvc2l0aW9uKCksIHAgPSBjLnRvcCwgZiA9IGMubGVmdCkgOiAocCA9IHBhcnNl
RmxvYXQoYSkgfHwgMCwgZiA9IHBhcnNlRmxvYXQocykgfHwgMCksIGIuaXNGdW5jdGlvbih0KSAm
JiAodCA9IHQuY2FsbChlLCBuLCBvKSksIG51bGwgIT0gdC50b3AgJiYgKGwudG9wID0gdC50b3Ag
LSBvLnRvcCArIHApLCBudWxsICE9IHQubGVmdCAmJiAobC5sZWZ0ID0gdC5sZWZ0IC0gby5sZWZ0
ICsgZiksICJ1c2luZyJpbiB0ID8gdC51c2luZy5jYWxsKGUsIGwpIDogaS5jc3MobCkKLSAgICAg
ICAgfQotICAgIH0sIGIuZm4uZXh0ZW5kKHsKLSAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgaWYgKHRoaXNbMF0pIHsKLSAgICAgICAgICAgICAgICB2YXIgZSwgdCwg
biA9IHsKLSAgICAgICAgICAgICAgICAgICAgdG9wOiAwLAotICAgICAgICAgICAgICAgICAgICBs
ZWZ0OiAwCi0gICAgICAgICAgICAgICAgfSwgciA9IHRoaXNbMF07Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICJmaXhlZCIgPT09IGIuY3NzKHIsICJwb3NpdGlvbiIpID8gdCA9IHIuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkgOiAoZSA9IHRoaXMub2Zmc2V0UGFyZW50KCksIHQgPSB0aGlzLm9mZnNl
dCgpLCBiLm5vZGVOYW1lKGVbMF0sICJodG1sIikgfHwgKG4gPSBlLm9mZnNldCgpKSwgbi50b3Ag
Kz0gYi5jc3MoZVswXSwgImJvcmRlclRvcFdpZHRoIiwgITApLCBuLmxlZnQgKz0gYi5jc3MoZVsw
XSwgImJvcmRlckxlZnRXaWR0aCIsICEwKSksIHsKLSAgICAgICAgICAgICAgICAgICAgdG9wOiB0
LnRvcCAtIG4udG9wIC0gYi5jc3MociwgIm1hcmdpblRvcCIsICEwKSwgbGVmdDogdC5sZWZ0IC0g
bi5sZWZ0IC0gYi5jc3MociwgIm1hcmdpbkxlZnQiLCAhMCkKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGUgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBvLmRvY3VtZW50RWxlbWVudDsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoZSYmIWIubm9kZU5hbWUoZSwgImh0bWwiKSAmJiAic3RhdGlj
IiA9PT0gYi5jc3MoZSwgInBvc2l0aW9uIikpCi0gICAgICAgICAgICAgICAgICAgIGUgPSBlLm9m
ZnNldFBhcmVudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZSB8fCBvLmRvY3VtZW50RWxlbWVu
dAotICAgICAgICAgICAgfSkKLSAgICAgICAgfQotICAgIH0pLCBiLmVhY2goewotICAgICAgICBz
Y3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLAotICAgICAgICBzY3JvbGxUb3A6ICJwYWdlWU9mZnNl
dCIKLSAgICB9LCBmdW5jdGlvbihlLCBuKSB7Ci0gICAgICAgIHZhciByID0gL1kvLnRlc3Qobik7
Ci0gICAgICAgIGIuZm5bZV0gPSBmdW5jdGlvbihpKSB7Ci0gICAgICAgICAgICByZXR1cm4gYi5h
Y2Nlc3ModGhpcywgZnVuY3Rpb24oZSwgaSwgbykgewotICAgICAgICAgICAgICAgIHZhciBhID0g
b3IoZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG8gPT09IHQgPyBhID8gbiBpbiBhID8gYVtu
XSA6IGEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2ldIDogZVtpXSA6IChhID8gYS5zY3JvbGxU
byhyID8gYihhKS5zY3JvbGxMZWZ0KCkgOiBvLCByID8gbyA6IGIoYSkuc2Nyb2xsVG9wKCkpIDog
ZVtpXSA9IG8sIHQpCi0gICAgICAgICAgICB9LCBlLCBpLCBhcmd1bWVudHMubGVuZ3RoLCBudWxs
KQotICAgICAgICB9Ci0gICAgfSk7Ci0gICAgZnVuY3Rpb24gb3IoZSkgewotICAgICAgICByZXR1
cm4gYi5pc1dpbmRvdyhlKSA/IGUgOiA5ID09PSBlLm5vZGVUeXBlID8gZS5kZWZhdWx0VmlldyB8
fCBlLnBhcmVudFdpbmRvdyA6ICExCi0gICAgfQotICAgIGIuZWFjaCh7Ci0gICAgICAgIEhlaWdo
dDogImhlaWdodCIsCi0gICAgICAgIFdpZHRoOiAid2lkdGgiCi0gICAgfSwgZnVuY3Rpb24oZSwg
bikgewotICAgICAgICBiLmVhY2goewotICAgICAgICAgICAgcGFkZGluZzogImlubmVyIiArIGUs
Ci0gICAgICAgICAgICBjb250ZW50OiBuLAotICAgICAgICAgICAgIiI6ICJvdXRlciIgKyBlCi0g
ICAgICAgIH0sIGZ1bmN0aW9uKHIsIGkpIHsKLSAgICAgICAgICAgIGIuZm5baV0gPSBmdW5jdGlv
bihpLCBvKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGEgPSBhcmd1bWVudHMubGVuZ3RoICYmIChy
IHx8ICJib29sZWFuIiAhPSB0eXBlb2YgaSksIHMgPSByIHx8IChpPT09ITAgfHwgbz09PSEwID8g
Im1hcmdpbiIgOiAiYm9yZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIuYWNjZXNzKHRo
aXMsIGZ1bmN0aW9uKG4sIHIsIGkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG87Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBiLmlzV2luZG93KG4pID8gbi5kb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnRbImNsaWVudCIgKyBlXSA6IDkgPT09IG4ubm9kZVR5cGUgPyAobyA9IG4uZG9jdW1l
bnRFbGVtZW50LCBNYXRoLm1heChuLmJvZHlbInNjcm9sbCIgKyBlXSwgb1sic2Nyb2xsIiArIGVd
LCBuLmJvZHlbIm9mZnNldCIgKyBlXSwgb1sib2Zmc2V0IiArIGVdLCBvWyJjbGllbnQiICsgZV0p
KSA6IGkgPT09IHQgPyBiLmNzcyhuLCByLCBzKSA6IGIuc3R5bGUobiwgciwgaSwgcykKLSAgICAg
ICAgICAgICAgICB9LCBuLCBhID8gaSA6IHQsIGEsIG51bGwpCi0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pCi0gICAgfSksIGUualF1ZXJ5ID0gZS4kID0gYiwgImZ1bmN0aW9uIiA9PSB0eXBlb2Yg
ZGVmaW5lICYmIGRlZmluZS5hbWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgJiYgZGVmaW5lKCJqcXVl
cnkiLCBbXSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBiCi0gICAgfSkKLX0pKHdpbmRv
dyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL21hbmlm
ZXN0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9tYW5pZmVzdC5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwNjM4MjU5NTQ4N2ViZGMzOWZlNzNiNzVl
YjJlNjQyMmIyN2FmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL21hbmlmZXN0LmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMzk5ICswLDAgQEAKLUFwcC5Nb2RlbCA9IERTLk1vZGVsOwotCi1BcHAu
TmFtZUxhYmVsTW9kZWwgPSBEUy5Nb2RlbC5leHRlbmQoewotICAgIG5hbWU6IERTLmF0dHIoJ3N0
cmluZycpLAotICAgIGxhYmVsOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0KCduYW1lJyk7Ci0gICAgfS5wcm9wZXJ0eSgnbmFtZScpLAotfSk7Ci0KLUFwcC5UZXN0
ID0gQXBwLk5hbWVMYWJlbE1vZGVsLmV4dGVuZCh7Ci0gICAgdXJsOiBEUy5hdHRyKCdzdHJpbmcn
KSwKLSAgICBwYXJlbnQ6IERTLmJlbG9uZ3NUbygndGVzdCcsIHtpbnZlcnNlOiAnY2hpbGRUZXN0
cyd9KSwKLSAgICBjaGlsZFRlc3RzOiBEUy5oYXNNYW55KCd0ZXN0Jywge2ludmVyc2U6ICdwYXJl
bnQnfSksCi0gICAgbWV0cmljczogRFMuaGFzTWFueSgnbWV0cmljcycpLAotfSk7Ci0KLUFwcC5N
ZXRyaWMgPSBBcHAuTmFtZUxhYmVsTW9kZWwuZXh0ZW5kKHsKLSAgICB0ZXN0OiBEUy5iZWxvbmdz
VG8oJ3Rlc3QnKSwKLSAgICBhZ2dyZWdhdG9yOiBEUy5hdHRyKCdzdHJpbmcnKSwKLSAgICBsYWJl
bDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgnbmFtZScpICsg
KHRoaXMuZ2V0KCdhZ2dyZWdhdG9yJykgPyAnIDogJyArIHRoaXMuZ2V0KCdhZ2dyZWdhdG9yJykg
OiAnJyk7Ci0gICAgfS5wcm9wZXJ0eSgnbmFtZScsICdhZ2dyZWdhdG9yJyksCi0gICAgcGF0aDog
ZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXRoID0gW107Ci0gICAgICAgIHZhciBw
YXJlbnQgPSB0aGlzLmdldCgndGVzdCcpOwotICAgICAgICB3aGlsZSAocGFyZW50KSB7Ci0gICAg
ICAgICAgICBwYXRoLnB1c2gocGFyZW50LmdldCgnbmFtZScpKTsKLSAgICAgICAgICAgIHBhcmVu
dCA9IHBhcmVudC5nZXQoJ3BhcmVudCcpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXRo
LnJldmVyc2UoKTsKLSAgICB9LnByb3BlcnR5KCduYW1lJywgJ3Rlc3QnKSwKLSAgICBmdWxsTmFt
ZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgncGF0aCcpLmpv
aW4oJyBcdTIyMGIgJykgLyogJm5pOyAqLwotICAgICAgICAgICAgKyAnIDogJyArIHRoaXMuZ2V0
KCdsYWJlbCcpOwotICAgIH0ucHJvcGVydHkoJ3BhdGgnLCAnbGFiZWwnKSwKLSAgICBjaGlsZE1l
dHJpY3M6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgdGVzdCA9IHRoaXMuZ2V0KCd0
ZXN0Jyk7Ci0gICAgICAgIHZhciBjaGlsZE1ldHJpY3MgPSBbXTsKLSAgICAgICAgdGVzdC5nZXQo
J2NoaWxkVGVzdHMnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFRlc3QpIHsKLSAgICAgICAgICAg
IGNoaWxkVGVzdC5nZXQoJ21ldHJpY3MnKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRyaWMpIHsKLSAg
ICAgICAgICAgICAgICBjaGlsZE1ldHJpY3MucHVzaChtZXRyaWMpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gY2hpbGRNZXRyaWNzOwotICAgIH0ucHJvcGVy
dHkoJ3Rlc3QuY2hpbGRUZXN0cycpLAotfSk7Ci0KLUFwcC5CdWlsZGVyID0gQXBwLk5hbWVMYWJl
bE1vZGVsLmV4dGVuZCh7Ci0gICAgYnVpbGRVcmw6IERTLmF0dHIoJ3N0cmluZycpLAotICAgIHVy
bEZyb21CdWlsZE51bWJlcjogZnVuY3Rpb24gKGJ1aWxkTnVtYmVyKQotICAgIHsKLSAgICAgICAg
dmFyIHRlbXBsYXRlID0gdGhpcy5nZXQoJ2J1aWxkVXJsJyk7Ci0gICAgICAgIHJldHVybiB0ZW1w
bGF0ZSA/IHRlbXBsYXRlLnJlcGxhY2UoL1wkYnVpbGRlck5hbWUvZywgdGhpcy5nZXQoJ25hbWUn
KSkucmVwbGFjZSgvXCRidWlsZE51bWJlci9nLCBidWlsZE51bWJlcikgOiBudWxsOwotICAgIH0K
LX0pOwotCi1BcHAuQnVnVHJhY2tlciA9IEFwcC5OYW1lTGFiZWxNb2RlbC5leHRlbmQoewotICAg
IGJ1Z1VybDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgbmV3QnVnVXJsOiBEUy5hdHRyKCdzdHJp
bmcnKSwKLSAgICByZXBvc2l0b3JpZXM6IERTLmhhc01hbnkoJ3JlcG9zaXRvcnknKSwKLSAgICB1
cmxGcm9tQnVnTnVtYmVyOiBmdW5jdGlvbiAoYnVnTnVtYmVyKSB7Ci0gICAgICAgIHZhciB0ZW1w
bGF0ZSA9IHRoaXMuZ2V0KCdidWdVcmwnKTsKLSAgICAgICAgcmV0dXJuIHRlbXBsYXRlICYmIGJ1
Z051bWJlciA/IHRlbXBsYXRlLnJlcGxhY2UoL1wkbnVtYmVyL2csIGJ1Z051bWJlcikgOiBudWxs
OwotICAgIH0KLX0pOwotCi1BcHAuRGF0ZUFycmF5VHJhbnNmb3JtID0gRFMuVHJhbnNmb3JtLmV4
dGVuZCh7Ci0gICAgZGVzZXJpYWxpemU6IGZ1bmN0aW9uIChzZXJpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQubWFwKGZ1bmN0aW9uICh0aW1lKSB7IHJldHVybiBuZXcg
RGF0ZSh0aW1lKTsgfSk7Ci0gICAgfQotfSk7Ci0KLUFwcC5QbGF0Zm9ybSA9IEFwcC5OYW1lTGFi
ZWxNb2RlbC5leHRlbmQoewotICAgIF9tZXRyaWNTZXQ6IG51bGwsCi0gICAgX3Rlc3RTZXQ6IG51
bGwsCi0gICAgbWV0cmljczogRFMuaGFzTWFueSgnbWV0cmljJyksCi0gICAgbGFzdE1vZGlmaWVk
OiBEUy5hdHRyKCdkYXRlQXJyYXknKSwKLSAgICBjb250YWluc01ldHJpYzogZnVuY3Rpb24gKG1l
dHJpYykKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbWV0cmljU2V0KQotICAgICAgICAgICAg
dGhpcy5fbWV0cmljU2V0ID0gbmV3IEVtYmVyLlNldCh0aGlzLmdldCgnbWV0cmljcycpKTsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY1NldC5jb250YWlucyhtZXRyaWMpOwotICAgIH0sCi0g
ICAgbGFzdE1vZGlmaWVkVGltZUZvck1ldHJpYzogZnVuY3Rpb24gKG1ldHJpYykKLSAgICB7Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0KCdtZXRyaWNzJykuaW5kZXhPZihtZXRyaWMpOwot
ICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IHJldHVybiB0aGlzLmdldCgnbGFzdE1vZGlmaWVkJykub2JqZWN0QXQoaW5kZXgpOwotICAgIH0s
Ci0gICAgY29udGFpbnNUZXN0OiBmdW5jdGlvbiAodGVzdCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fdGVzdFNldCkgewotICAgICAgICAgICAgdmFyIHNldCA9IG5ldyBFbWJlci5TZXQoKTsK
LSAgICAgICAgICAgIHRoaXMuZ2V0KCdtZXRyaWNzJykuZm9yRWFjaChmdW5jdGlvbiAobWV0cmlj
KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgdGVzdCA9IG1ldHJpYy5nZXQoJ3Rlc3QnKTsg
dGVzdDsgdGVzdCA9IHRlc3QuZ2V0KCdwYXJlbnQnKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0
LnB1c2godGVzdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX3Rlc3RTZXQg
PSBzZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3RTZXQuY29udGFpbnMo
dGVzdCk7Ci0gICAgfSwKLX0pOwotCi1BcHAuUmVwb3NpdG9yeSA9IEFwcC5OYW1lTGFiZWxNb2Rl
bC5leHRlbmQoewotICAgIHVybDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgYmxhbWVVcmw6IERT
LmF0dHIoJ3N0cmluZycpLAotICAgIGhhc1JlcG9ydGVkQ29tbWl0czogRFMuYXR0cignYm9vbGVh
bicpLAotICAgIHVybEZvclJldmlzaW9uOiBmdW5jdGlvbiAoY3VycmVudFJldmlzaW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmdldCgndXJsJykgfHwgJycpLnJlcGxhY2UoL1wkMS9n
LCBjdXJyZW50UmV2aXNpb24pOwotICAgIH0sCi0gICAgdXJsRm9yUmV2aXNpb25SYW5nZTogZnVu
Y3Rpb24gKGZyb20sIHRvKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmdldCgnYmxhbWVV
cmwnKSB8fCAnJykucmVwbGFjZSgvXCQxL2csIGZyb20pLnJlcGxhY2UoL1wkMi9nLCB0byk7Ci0g
ICAgfSwKLX0pOwotCi1BcHAuRGFzaGJvYXJkID0gQXBwLk5hbWVMYWJlbE1vZGVsLmV4dGVuZCh7
Ci0gICAgc2VyaWFsaXplZDogRFMuYXR0cignc3RyaW5nJyksCi0gICAgdGFibGU6IGZ1bmN0aW9u
ICgpCi0gICAgewotICAgICAgICB2YXIganNvbiA9IHRoaXMuZ2V0KCdzZXJpYWxpemVkJyk7Ci0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTsK
LSAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGYWls
ZWQgdG8gcGFyc2UgdGhlIGdyaWQ6IiwgZXJyb3IsIGpzb24pOwotICAgICAgICAgICAgcmV0dXJu
IFtdOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcGFyc2VkKQotICAgICAgICAgICAgcmV0dXJu
IFtdOwotICAgICAgICByZXR1cm4gdGhpcy5fbm9ybWFsaXplVGFibGUocGFyc2VkKTsKLSAgICB9
LnByb3BlcnR5KCdzZXJpYWxpemVkJyksCi0KLSAgICByb3dzOiBmdW5jdGlvbiAoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCd0YWJsZScpLnNsaWNlKDEpOwotICAgIH0ucHJvcGVy
dHkoJ3RhYmxlJyksCi0KLSAgICBoZWFkZXJDb2x1bW5zOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgdmFyIHRhYmxlID0gdGhpcy5nZXQoJ3RhYmxlJyk7Ci0gICAgICAgIGlmICghdGFibGUg
fHwgIXRhYmxlLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAgcmV0dXJu
IHRhYmxlWzBdLm1hcChmdW5jdGlvbiAobmFtZSwgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVy
biB7bGFiZWw6bmFtZSwgaW5kZXg6IGluZGV4fTsKLSAgICAgICAgfSk7Ci0gICAgfS5wcm9wZXJ0
eSgndGFibGUnKSwKLQotICAgIF9ub3JtYWxpemVUYWJsZTogZnVuY3Rpb24gKHRhYmxlKQotICAg
IHsKLSAgICAgICAgdmFyIG1heENvbHVtbkNvdW50ID0gTWF0aC5tYXgodGFibGUubWFwKGZ1bmN0
aW9uIChjb2x1bW4pIHsgcmV0dXJuIGNvbHVtbi5sZW5ndGg7IH0pKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIHJvdyA9
IHRhYmxlW2ldOwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByb3cubGVuZ3RoOyBq
KyspIHsKLSAgICAgICAgICAgICAgICBpZiAocm93W2pdICYmICEocm93W2pdIGluc3RhbmNlb2Yg
QXJyYXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVbnJlY29nbml6ZWQg
KHBsYXRmb3JtLCBtZXRyaWMpIHBhaXIgYXQgY29sdW1uICcgKyBpICsgJyByb3cgJyArIGogKyAn
OicgKyByb3dbal0pOwotICAgICAgICAgICAgICAgICAgICByb3dbal0gPSBbXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhYmxl
OwotICAgIH0sCi19KTsKLQotQXBwLk1ldHJpY1NlcmlhbGl6ZXIgPSBBcHAuUGxhdGZvcm1TZXJp
YWxpemVyID0gRFMuUkVTVFNlcmlhbGl6ZXIuZXh0ZW5kKHsKLSAgICBub3JtYWxpemVQYXlsb2Fk
OiBmdW5jdGlvbiAocGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHRzID0gewotICAg
ICAgICAgICAgcGxhdGZvcm1zOiB0aGlzLl9ub3JtYWxpemVJZE1hcChwYXlsb2FkWydhbGwnXSks
Ci0gICAgICAgICAgICBidWlsZGVyczogdGhpcy5fbm9ybWFsaXplSWRNYXAocGF5bG9hZFsnYnVp
bGRlcnMnXSksCi0gICAgICAgICAgICB0ZXN0czogdGhpcy5fbm9ybWFsaXplSWRNYXAocGF5bG9h
ZFsndGVzdHMnXSkubWFwKGZ1bmN0aW9uICh0ZXN0KSB7Ci0gICAgICAgICAgICAgICAgdGVzdFsn
cGFyZW50J10gPSB0ZXN0WydwYXJlbnRJZCddOwotICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0
OwotICAgICAgICAgICAgfSksCi0gICAgICAgICAgICBtZXRyaWNzOiB0aGlzLl9ub3JtYWxpemVJ
ZE1hcChwYXlsb2FkWydtZXRyaWNzJ10pLAotICAgICAgICAgICAgcmVwb3NpdG9yaWVzOiB0aGlz
Ll9ub3JtYWxpemVJZE1hcChwYXlsb2FkWydyZXBvc2l0b3JpZXMnXSksCi0gICAgICAgICAgICBi
dWdUcmFja2VyczogdGhpcy5fbm9ybWFsaXplSWRNYXAocGF5bG9hZFsnYnVnVHJhY2tlcnMnXSks
Ci0gICAgICAgICAgICBkYXNoYm9hcmRzOiBbXSwKLSAgICAgICAgfTsKLQotICAgICAgICBmb3Ig
KHZhciB0ZXN0SWQgaW4gcGF5bG9hZFsndGVzdHMnXSkgewotICAgICAgICAgICAgdmFyIHRlc3Qg
PSBwYXlsb2FkWyd0ZXN0cyddW3Rlc3RJZF07Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0gcGF5
bG9hZFsndGVzdHMnXVt0ZXN0WydwYXJlbnQnXV07Ci0gICAgICAgICAgICBpZiAoIXBhcmVudCkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghcGFyZW50WydjaGls
ZFRlc3RzJ10pCi0gICAgICAgICAgICAgICAgcGFyZW50WydjaGlsZFRlc3RzJ10gPSBbXTsKLSAg
ICAgICAgICAgIHBhcmVudFsnY2hpbGRUZXN0cyddLnB1c2godGVzdElkKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAodmFyIG1ldHJpY0lkIGluIHBheWxvYWRbJ21ldHJpY3MnXSkgewotICAg
ICAgICAgICAgdmFyIG1ldHJpYyA9IHBheWxvYWRbJ21ldHJpY3MnXVttZXRyaWNJZF07Ci0gICAg
ICAgICAgICB2YXIgdGVzdCA9IHBheWxvYWRbJ3Rlc3RzJ11bbWV0cmljWyd0ZXN0J11dOwotICAg
ICAgICAgICAgaWYgKCF0ZXN0WydtZXRyaWNzJ10pCi0gICAgICAgICAgICAgICAgdGVzdFsnbWV0
cmljcyddID0gW107Ci0gICAgICAgICAgICB0ZXN0WydtZXRyaWNzJ10ucHVzaChtZXRyaWNJZCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaWQgPSAxOwotICAgICAgICB2YXIgZGFzaGJvYXJk
c0luUGF5bG9hZCA9IHBheWxvYWRbJ2Rhc2hib2FyZHMnXTsKLSAgICAgICAgZm9yICh2YXIgZGFz
aGJvYXJkTmFtZSBpbiBkYXNoYm9hcmRzSW5QYXlsb2FkKSB7Ci0gICAgICAgICAgICByZXN1bHRz
WydkYXNoYm9hcmRzJ10ucHVzaCh7Ci0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAg
ICAgICAgIG5hbWU6IGRhc2hib2FyZE5hbWUsCi0gICAgICAgICAgICAgICAgc2VyaWFsaXplZDog
SlNPTi5zdHJpbmdpZnkoZGFzaGJvYXJkc0luUGF5bG9hZFtkYXNoYm9hcmROYW1lXSkKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgaWQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBz
aXRlVGl0bGUgPSBwYXlsb2FkWydzaXRlVGl0bGUnXTsKLSAgICAgICAgaWYgKHNpdGVUaXRsZSkg
ewotICAgICAgICAgICAgQXBwLk1hbmlmZXN0LnNldCgnc2l0ZVRpdGxlJywgc2l0ZVRpdGxlKTsK
LSAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gc2l0ZVRpdGxlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLSAgICBfbm9ybWFsaXplSWRNYXA6IGZ1bmN0
aW9uIChpZE1hcCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgICAgIGZv
ciAodmFyIGlkIGluIGlkTWFwKSB7Ci0gICAgICAgICAgICB2YXIgZGVmaW5pdGlvbiA9IGlkTWFw
W2lkXTsKLSAgICAgICAgICAgIGRlZmluaXRpb25bJ2lkJ10gPSBpZDsKLSAgICAgICAgICAgIHJl
c3VsdHMucHVzaChkZWZpbml0aW9uKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICB9Ci19KTsKLQotQXBwLlBsYXRmb3JtQWRhcHRlciA9IERTLlJFU1RBZGFwdGVyLmV4
dGVuZCh7Ci0gICAgYnVpbGRVUkw6IGZ1bmN0aW9uICh0eXBlLCBpZCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAnLi4vZGF0YS9tYW5pZmVzdC5qc29uJzsKLSAgICB9LAotfSk7Ci0KLUFwcC5NZXRy
aWNBZGFwdGVyID0gRFMuUkVTVEFkYXB0ZXIuZXh0ZW5kKHsKLSAgICBidWlsZFVSTDogZnVuY3Rp
b24gKHR5cGUsIGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuICcuLi9kYXRhL21hbmlmZXN0Lmpz
b24nOwotICAgIH0sCi19KTsKLQotQXBwLk1hbmlmZXN0ID0gRW1iZXIuQ29udHJvbGxlci5leHRl
bmQoewotICAgIHBsYXRmb3JtczogbnVsbCwKLSAgICB0b3BMZXZlbFRlc3RzOiBudWxsLAotICAg
IHJlcG9zaXRvcmllczogW10sCi0gICAgcmVwb3NpdG9yaWVzV2l0aFJlcG9ydGVkQ29tbWl0czog
W10sCi0gICAgYnVnVHJhY2tlcnM6IFtdLAotICAgIF9wbGF0Zm9ybUJ5SWQ6IHt9LAotICAgIF9t
ZXRyaWNCeUlkOiB7fSwKLSAgICBfYnVpbGRlckJ5SWQ6IHt9LAotICAgIF9yZXBvc2l0b3J5QnlJ
ZDoge30sCi0gICAgX2Rhc2hib2FyZEJ5TmFtZToge30sCi0gICAgX2RlZmF1bHREYXNoYm9hcmRO
YW1lOiBudWxsLAotICAgIF9mZXRjaFByb21pc2U6IG51bGwsCi0gICAgZmV0Y2g6IGZ1bmN0aW9u
IChzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZmV0Y2hQcm9taXNlKQotICAgICAg
ICAgICAgdGhpcy5fZmV0Y2hQcm9taXNlID0gc3RvcmUuZmluZEFsbCgncGxhdGZvcm0nKS50aGVu
KHRoaXMuX2ZldGNoZWRNYW5pZmVzdC5iaW5kKHRoaXMsIHN0b3JlKSk7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9mZXRjaFByb21pc2U7Ci0gICAgfSwKLSAgICBpc0ZldGNoZWQ6IGZ1bmN0aW9uICgp
IHsgcmV0dXJuICEhdGhpcy5nZXQoJ3BsYXRmb3JtcycpOyB9LnByb3BlcnR5KCdwbGF0Zm9ybXMn
KSwKLSAgICBwbGF0Zm9ybTogZnVuY3Rpb24gKGlkKSB7IHJldHVybiB0aGlzLl9wbGF0Zm9ybUJ5
SWRbaWRdOyB9LAotICAgIG1ldHJpYzogZnVuY3Rpb24gKGlkKSB7IHJldHVybiB0aGlzLl9tZXRy
aWNCeUlkW2lkXTsgfSwKLSAgICBidWlsZGVyOiBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIHRoaXMu
X2J1aWxkZXJCeUlkW2lkXTsgfSwKLSAgICByZXBvc2l0b3J5OiBmdW5jdGlvbiAoaWQpIHsgcmV0
dXJuIHRoaXMuX3JlcG9zaXRvcnlCeUlkW2lkXTsgfSwKLSAgICBkYXNoYm9hcmRCeU5hbWU6IGZ1
bmN0aW9uIChuYW1lKSB7IHJldHVybiB0aGlzLl9kYXNoYm9hcmRCeU5hbWVbbmFtZV07IH0sCi0g
ICAgZGVmYXVsdERhc2hib2FyZE5hbWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RlZmF1
bHREYXNoYm9hcmROYW1lOyB9LAotICAgIF9mZXRjaGVkTWFuaWZlc3Q6IGZ1bmN0aW9uIChzdG9y
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwotICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgdmFyIHRvcExldmVsVGVzdHMgPSBbXTsKLSAgICAg
ICAgc3RvcmUuYWxsKCd0ZXN0JykuZm9yRWFjaChmdW5jdGlvbiAodGVzdCkgewotICAgICAgICAg
ICAgdmFyIHBhcmVudCA9IHRlc3QuZ2V0KCdwYXJlbnQnKTsKLSAgICAgICAgICAgIGlmICghcGFy
ZW50KQotICAgICAgICAgICAgICAgIHRvcExldmVsVGVzdHMucHVzaCh0ZXN0KTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHRoaXMuc2V0KCd0b3BMZXZlbFRlc3RzJywgdG9wTGV2ZWxUZXN0cyk7Ci0K
LSAgICAgICAgc3RvcmUuYWxsKCdtZXRyaWMnKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRyaWMpIHsK
LSAgICAgICAgICAgIHNlbGYuX21ldHJpY0J5SWRbbWV0cmljLmdldCgnaWQnKV0gPSBtZXRyaWM7
Ci0gICAgICAgIH0pOwotICAgICAgICB2YXIgcGxhdGZvcm1zID0gc3RvcmUuYWxsKCdwbGF0Zm9y
bScpOwotICAgICAgICBwbGF0Zm9ybXMuZm9yRWFjaChmdW5jdGlvbiAocGxhdGZvcm0pIHsKLSAg
ICAgICAgICAgIHNlbGYuX3BsYXRmb3JtQnlJZFtwbGF0Zm9ybS5nZXQoJ2lkJyldID0gcGxhdGZv
cm07Ci0gICAgICAgIH0pOwotICAgICAgICB0aGlzLnNldCgncGxhdGZvcm1zJywgcGxhdGZvcm1z
KTsKLQotICAgICAgICBzdG9yZS5hbGwoJ2J1aWxkZXInKS5mb3JFYWNoKGZ1bmN0aW9uIChidWls
ZGVyKSB7Ci0gICAgICAgICAgICBzZWxmLl9idWlsZGVyQnlJZFtidWlsZGVyLmdldCgnaWQnKV0g
PSBidWlsZGVyOwotICAgICAgICB9KTsKLQotICAgICAgICB2YXIgcmVwb3NpdG9yaWVzID0gc3Rv
cmUuYWxsKCdyZXBvc2l0b3J5Jyk7Ci0gICAgICAgIHJlcG9zaXRvcmllcy5mb3JFYWNoKGZ1bmN0
aW9uIChyZXBvc2l0b3J5KSB7Ci0gICAgICAgICAgICBzZWxmLl9yZXBvc2l0b3J5QnlJZFtyZXBv
c2l0b3J5LmdldCgnaWQnKV0gPSByZXBvc2l0b3J5OwotICAgICAgICB9KTsKLSAgICAgICAgdGhp
cy5zZXQoJ3JlcG9zaXRvcmllcycsIHJlcG9zaXRvcmllcy5zb3J0QnkoJ2lkJykpOwotICAgICAg
ICB0aGlzLnNldCgncmVwb3NpdG9yaWVzV2l0aFJlcG9ydGVkQ29tbWl0cycsCi0gICAgICAgICAg
ICByZXBvc2l0b3JpZXMuZmlsdGVyKGZ1bmN0aW9uIChyZXBvc2l0b3J5KSB7IHJldHVybiByZXBv
c2l0b3J5LmdldCgnaGFzUmVwb3J0ZWRDb21taXRzJyk7IH0pKTsKLQotICAgICAgICB0aGlzLnNl
dCgnYnVnVHJhY2tlcnMnLCBzdG9yZS5hbGwoJ2J1Z1RyYWNrZXInKS5zb3J0QnkoJ25hbWUnKSk7
Ci0KLSAgICAgICAgdmFyIGRhc2hib2FyZHMgPSBzdG9yZS5hbGwoJ2Rhc2hib2FyZCcpLnRvQXJy
YXkoKTsKLSAgICAgICAgdGhpcy5zZXQoJ2Rhc2hib2FyZHMnLCBkYXNoYm9hcmRzKTsKLSAgICAg
ICAgZGFzaGJvYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChkYXNoYm9hcmQpIHsgc2VsZi5fZGFzaGJv
YXJkQnlOYW1lW2Rhc2hib2FyZC5nZXQoJ25hbWUnKV0gPSBkYXNoYm9hcmQ7IH0pOwotICAgICAg
ICB0aGlzLl9kZWZhdWx0RGFzaGJvYXJkTmFtZSA9IGRhc2hib2FyZHMubGVuZ3RoID8gZGFzaGJv
YXJkc1swXS5nZXQoJ25hbWUnKSA6IG51bGw7Ci0gICAgfSwKLSAgICBmZXRjaFJ1bnNXaXRoUGxh
dGZvcm1BbmRNZXRyaWM6IGZ1bmN0aW9uIChzdG9yZSwgcGxhdGZvcm1JZCwgbWV0cmljSWQsIHRl
c3RHcm91cElkLCB1c2VDYWNoZSkKLSAgICB7Ci0gICAgICAgIEVtYmVyLmFzc2VydCgiQ2FuJ3Qg
Y2FjaGUgcmVzdWx0cyBmb3IgdGVzdCBncm91cHMiLCAhKHRlc3RHcm91cElkICYmIHVzZUNhY2hl
KSk7Ci0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgcmV0dXJuIEVtYmVyLlJTVlAu
YWxsKFsKLSAgICAgICAgICAgIFJ1bnNEYXRhLmZldGNoUnVucyhwbGF0Zm9ybUlkLCBtZXRyaWNJ
ZCwgdGVzdEdyb3VwSWQsIHVzZUNhY2hlKSwKLSAgICAgICAgICAgIHRoaXMuZmV0Y2goc3RvcmUp
LAotICAgICAgICBdKS50aGVuKGZ1bmN0aW9uICh2YWx1ZXMpIHsKLSAgICAgICAgICAgIHZhciBy
ZXNwb25zZSA9IHZhbHVlc1swXTsKLQotICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gQXBwLk1h
bmlmZXN0LnBsYXRmb3JtKHBsYXRmb3JtSWQpOwotICAgICAgICAgICAgdmFyIG1ldHJpYyA9IEFw
cC5NYW5pZmVzdC5tZXRyaWMobWV0cmljSWQpOwotCi0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICBtZXRyaWM6
IG1ldHJpYywKLSAgICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZSA/IHNlbGYuX2Zvcm1hdEZl
dGNoZWREYXRhKG1ldHJpYy5nZXQoJ25hbWUnKSwgcmVzcG9uc2UuY29uZmlndXJhdGlvbnMpIDog
bnVsbCwKLSAgICAgICAgICAgICAgICBzaG91bGRSZWZldGNoOiAhcmVzcG9uc2UgfHwgK3Jlc3Bv
bnNlLmxhc3RNb2RpZmllZCA8ICtwbGF0Zm9ybS5sYXN0TW9kaWZpZWRUaW1lRm9yTWV0cmljKG1l
dHJpYyksCi0gICAgICAgICAgICB9OwotICAgICAgICB9KTsKLSAgICB9LAotICAgIF9tYWtlRm9y
bWF0dGVyOiBmdW5jdGlvbiAodW5pdCwgc2lnRmlnLCBhbHdheXNTaG93U2lnbikKLSAgICB7Ci0g
ICAgICAgIHZhciBpc01pbGlzZWNvbmRzID0gZmFsc2U7Ci0gICAgICAgIGlmICh1bml0ID09ICdt
cycpIHsKLSAgICAgICAgICAgIGlzTWlsaXNlY29uZHMgPSB0cnVlOwotICAgICAgICAgICAgdW5p
dCA9ICdzJzsKLSAgICAgICAgfQotICAgICAgICB2YXIgZGl2aXNvciA9IHVuaXQgPT0gJ0InID8g
MTAyNCA6IDEwMDA7Ci0KLSAgICAgICAgdmFyIHN1ZmZpeCA9IFsnXHUwM0JDJywgJ20nLCAnJywg
J0snLCAnTScsICdHJywgJ1QnLCAnUCcsICdFJ107Ci0gICAgICAgIHZhciB0aHJlc2hvbGQgPSBz
aWdGaWcgPj0gMyA/IGRpdmlzb3IgOiAoZGl2aXNvciAvIDEwKTsKLSAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgdmFyIGk7Ci0gICAgICAgICAgICB2YXIgc2ln
biA9IHZhbHVlID49IDAgPyAoYWx3YXlzU2hvd1NpZ24gPyAnKycgOiAnJykgOiAnLSc7Ci0gICAg
ICAgICAgICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTsKLSAgICAgICAgICAgIGZvciAoaSA9IGlz
TWlsaXNlY29uZHMgPyAxIDogMjsgdmFsdWUgPCAxICYmIGkgPiAwOyBpLS0pCi0gICAgICAgICAg
ICAgICAgdmFsdWUgKj0gZGl2aXNvcjsKLSAgICAgICAgICAgIGZvciAoOyB2YWx1ZSA+PSB0aHJl
c2hvbGQ7IGkrKykKLSAgICAgICAgICAgICAgICB2YWx1ZSAvPSBkaXZpc29yOwotICAgICAgICAg
ICAgcmV0dXJuIHNpZ24gKyB2YWx1ZS50b1ByZWNpc2lvbihNYXRoLm1heCgyLCBzaWdGaWcpKSAr
ICcgJyArIHN1ZmZpeFtpXSArICh1bml0IHx8ICcnKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAg
X2Zvcm1hdEZldGNoZWREYXRhOiBmdW5jdGlvbiAobWV0cmljTmFtZSwgY29uZmlndXJhdGlvbnMp
Ci0gICAgewotICAgICAgICB2YXIgdW5pdCA9IFJ1bnNEYXRhLnVuaXRGcm9tTWV0cmljTmFtZSht
ZXRyaWNOYW1lKTsKLSAgICAgICAgdmFyIHNtYWxsZXJJc0JldHRlciA9IFJ1bnNEYXRhLmlzU21h
bGxlckJldHRlcih1bml0KTsKLSAgICAgICAgdmFyIGRlbHRhRm9ybWF0dGVyV2l0aG91dFNpZ24g
PSB0aGlzLl9tYWtlRm9ybWF0dGVyKHVuaXQsIDIsIGZhbHNlKTsKLQotICAgICAgICB2YXIgY3Vy
cmVudFRpbWVTZXJpZXMgPSBjb25maWd1cmF0aW9ucy5jdXJyZW50LnRpbWVTZXJpZXNCeUNvbW1p
dFRpbWUoZmFsc2UpOwotICAgICAgICB2YXIgYmFzZWxpbmVUaW1lU2VyaWVzID0gY29uZmlndXJh
dGlvbnMuYmFzZWxpbmUgPyBjb25maWd1cmF0aW9ucy5iYXNlbGluZS50aW1lU2VyaWVzQnlDb21t
aXRUaW1lKGZhbHNlLCB0cnVlKSA6IG51bGw7Ci0gICAgICAgIHZhciB0YXJnZXRUaW1lU2VyaWVz
ID0gY29uZmlndXJhdGlvbnMudGFyZ2V0ID8gY29uZmlndXJhdGlvbnMudGFyZ2V0LnRpbWVTZXJp
ZXNCeUNvbW1pdFRpbWUoZmFsc2UsIHRydWUpIDogbnVsbDsKLQotICAgICAgICB2YXIgdW5maWx0
ZXJlZEN1cnJlbnRUaW1lU2VyaWVzID0gY29uZmlndXJhdGlvbnMuY3VycmVudC50aW1lU2VyaWVz
QnlDb21taXRUaW1lKHRydWUpOwotICAgICAgICB2YXIgdW5maWx0ZXJlZEJhc2VsaW5lVGltZVNl
cmllcyA9IGNvbmZpZ3VyYXRpb25zLmJhc2VsaW5lID8gY29uZmlndXJhdGlvbnMuYmFzZWxpbmUu
dGltZVNlcmllc0J5Q29tbWl0VGltZSh0cnVlLCB0cnVlKSA6IG51bGw7Ci0gICAgICAgIHZhciB1
bmZpbHRlcmVkVGFyZ2V0VGltZVNlcmllcyA9IGNvbmZpZ3VyYXRpb25zLnRhcmdldCA/IGNvbmZp
Z3VyYXRpb25zLnRhcmdldC50aW1lU2VyaWVzQnlDb21taXRUaW1lKHRydWUsIHRydWUpIDogbnVs
bDsKLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgY3VycmVudDogY3VycmVudFRpbWVT
ZXJpZXMsCi0gICAgICAgICAgICBiYXNlbGluZTogYmFzZWxpbmVUaW1lU2VyaWVzLAotICAgICAg
ICAgICAgdGFyZ2V0OiB0YXJnZXRUaW1lU2VyaWVzLAotCi0gICAgICAgICAgICB1bmZpbHRlcmVk
Q3VycmVudFRpbWVTZXJpZXM6IHVuZmlsdGVyZWRDdXJyZW50VGltZVNlcmllcywKLSAgICAgICAg
ICAgIHVuZmlsdGVyZWRCYXNlbGluZVRpbWVTZXJpZXM6IHVuZmlsdGVyZWRCYXNlbGluZVRpbWVT
ZXJpZXMsCi0gICAgICAgICAgICB1bmZpbHRlcmVkVGFyZ2V0VGltZVNlcmllczogdW5maWx0ZXJl
ZFRhcmdldFRpbWVTZXJpZXMsCi0KLSAgICAgICAgICAgIGZvcm1hdFdpdGhEZWx0YUFuZFVuaXQ6
IGZ1bmN0aW9uICh2YWx1ZSwgZGVsdGEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZm9ybWF0dGVyKHZhbHVlKSArIChkZWx0YSAmJiAhaXNOYU4oZGVsdGEpID8g
JyBcdTAwYjEgJyArIGRlbHRhRm9ybWF0dGVyV2l0aG91dFNpZ24oZGVsdGEpIDogJycpOwotICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgIGZvcm1hdHRlcjogdGhpcy5fbWFrZUZvcm1hdHRlcih1
bml0LCA0LCBmYWxzZSksCi0gICAgICAgICAgICBkZWx0YUZvcm1hdHRlcjogdGhpcy5fbWFrZUZv
cm1hdHRlcih1bml0LCAyLCB0cnVlKSwKLSAgICAgICAgICAgIHNtYWxsZXJJc0JldHRlcjogc21h
bGxlcklzQmV0dGVyLAotICAgICAgICAgICAgc2hvd091dGxpZXI6IGZ1bmN0aW9uIChzaG93KQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHNob3cgPyB1bmZp
bHRlcmVkQ3VycmVudFRpbWVTZXJpZXMgOiBjdXJyZW50VGltZVNlcmllczsKLSAgICAgICAgICAg
ICAgICB0aGlzLmJhc2VsaW5lID0gc2hvdyA/IHVuZmlsdGVyZWRCYXNlbGluZVRpbWVTZXJpZXMg
OiBiYXNlbGluZVRpbWVTZXJpZXM7Ci0gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBzaG93
ID8gdW5maWx0ZXJlZFRhcmdldFRpbWVTZXJpZXMgOiB0YXJnZXRUaW1lU2VyaWVzOwotICAgICAg
ICAgICAgfSwKLSAgICAgICAgfTsKLSAgICB9Ci19KS5jcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvcG9wdXAuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YyL3BvcHVwLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NTBmMjc3MDRhNjFkN2VmMzcxMGIxYzI0ZGQ1ODA5Njg5ZGU0YjhhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjIvcG9wdXAuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAot
QXBwLlBvcHVwVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICB0ZW1wbGF0ZU5hbWU6ICdw
b3B1cCcsCi0gICAgY2xhc3NOYW1lczogWydwb3B1cCddLAotICAgIHBvcHVwTGlzdENvbnRhaW5l
clZpZXc6IEVtYmVyLkNvbnRhaW5lclZpZXcuZXh0ZW5kKCksCi0gICAgaW5pdDogZnVuY3Rpb24g
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgICAgIHRoaXMuX2xpc3RWaWV3
ID0gbnVsbDsKLSAgICB9LAotICAgIHNob3dQb3B1cDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMudW5zY2hlZHVsZUhpZGluZygpOwotICAgICAgICBpZiAoIXRoaXMuX2xpc3RWaWV3
KSB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMuZ2V0KCdsaXN0Jyk7Ci0gICAgICAgICAg
ICB0aGlzLl9saXN0VmlldyA9IEFwcC5Qb3B1cExpc3RWaWV3LmNyZWF0ZSh7dGFnTmFtZTogJ3Vs
JywgbGlzdDogbGlzdH0pOwotICAgICAgICAgICAgdGhpcy5nZXQoJ3BvcHVwTGlzdENvbnRhaW5l
clZpZXdJbnN0YW5jZScpLnB1c2hPYmplY3QodGhpcy5fbGlzdFZpZXcpOwotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMuX2xpc3RWaWV3LnNob3dMaXN0KCk7Ci0gICAgfSwKLSAgICBzY2hlZHVsZUhp
ZGluZzogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2hpZGluZ1RpbWVyID0gRW1i
ZXIucnVuLmxhdGVyKHRoaXMsIHRoaXMuaGlkZU5vdywgNTAwKTsKLSAgICB9LAotICAgIHVuc2No
ZWR1bGVIaWRpbmc6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICBFbWJlci5ydW4uY2FuY2Vs
KHRoaXMuX2hpZGluZ1RpbWVyKTsKLSAgICAgICAgdGhpcy5faGlkaW5nVGltZXIgPSBudWxsOwot
ICAgIH0sCi0gICAgaGlkZU5vdzogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9saXN0VmlldykKLSAgICAgICAgICAgIHRoaXMuX2xpc3RWaWV3LmhpZGVMaXN0KCk7Ci0gICAg
fQotfSk7Ci0KLUFwcC5Qb3B1cEJ1dHRvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAg
dGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgne3t2aWV3LmxhYmVsfX0nKSwKLSAg
ICBjbGFzc05hbWVzOiBbJ3BvcHVwLWJ1dHRvbiddLAotICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBb
J2hyZWYnXSwKLSAgICBocmVmOiAnIycsCi0gICAgbW91c2VFbnRlcjogZnVuY3Rpb24gKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuZ2V0KCdwYXJlbnRWaWV3Jykuc2hvd1BvcHVwKCk7Ci0gICAgfSwK
LSAgICBjbGljazogZnVuY3Rpb24gKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5nZXQoJ3Bh
cmVudFZpZXcnKS5zaG93UG9wdXAoKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LSAgICB9LAotICAgIG1vdXNlTGVhdmU6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlz
LmdldCgncGFyZW50VmlldycpLnNjaGVkdWxlSGlkaW5nKCk7Ci0gICAgfSwKLX0pOwotCi1BcHAu
UG9wdXBMaXN0VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICB0ZW1wbGF0ZU5hbWU6ICdw
b3B1cC1saXN0JywKLSAgICBpbml0OiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5f
c3VwZXIoKTsKLSAgICAgICAgdGhpcy5fc2hvdWxkSGlkZSA9IHRydWU7Ci0gICAgfSwKLSAgICBf
cG91cFZpZXc6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2YXIgY29udGFpbmVyVmlldyA9
IHRoaXMuZ2V0KCdwYXJlbnRWaWV3Jyk7Ci0gICAgICAgIHJldHVybiBjb250YWluZXJWaWV3Lmdl
dCgncGFyZW50VmlldycpOwotICAgIH0sCi0gICAgZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rpb24g
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zaG91bGRIaWRlKQotICAgICAgICAgICAgdGhp
cy4kKCkuaGlkZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9zaG93TGlzdFN5
bmNJZlBvc3NpYmxlKCk7Ci0gICAgICAgIHRoaXMuX3N1cGVyKCk7Ci0gICAgfSwKLSAgICBtb3Vz
ZUVudGVyOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAgdGhpcy5fcG91cFZpZXcoKS51bnNj
aGVkdWxlSGlkaW5nKCk7Ci0gICAgfSwKLSAgICBtb3VzZUxlYXZlOiBmdW5jdGlvbiAoKQotICAg
IHsKLSAgICAgICAgdGhpcy5fcG91cFZpZXcoKS5zY2hlZHVsZUhpZGluZygpOwotICAgIH0sCi0g
ICAgc2hvd0xpc3Q6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLl9zaG91bGRIaWRl
ID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3Nob3dMaXN0U3luY0lmUG9zc2libGUoKTsKLSAgICB9
LAotICAgIF9zaG93TGlzdFN5bmNJZlBvc3NpYmxlOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLiQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHBvcHVw
VmlldyA9IHRoaXMuX3BvdXBWaWV3KCk7Ci0gICAgICAgIGlmIChwb3B1cFZpZXcuZ2V0KCdwYXJl
bnRWaWV3JykgaW5zdGFuY2VvZiBBcHAuUG9wdXBMaXN0VmlldykgewotICAgICAgICAgICAgdmFy
IHBhcmVudExpc3RWaWV3ID0gcG9wdXBWaWV3LmdldCgncGFyZW50VmlldycpOwotICAgICAgICAg
ICAgcGFyZW50TGlzdFZpZXcuZ2V0KCdjaGlsZFZpZXdzJykubWFwKGZ1bmN0aW9uIChzaWJsaW5n
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcgIT0gcG9wdXBWaWV3KQotICAgICAgICAg
ICAgICAgICAgICBzaWJsaW5nLmhpZGVOb3coKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgdGhpcy4kKCkuY3NzKCdsZWZ0JywgcGFyZW50TGlzdFZpZXcuJCgpLm91dGVyV2lkdGgoKSAr
IDUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuJCgpLmNzcygndG9wJywgcG9w
dXBWaWV3LiQoKS5oZWlnaHQoKSAtIDUpOwotICAgICAgICB0aGlzLiQoKS5zaG93KCk7Ci0gICAg
fSwKLSAgICBoaWRlTGlzdDogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3Vs
ZEhpZGUgPSB0cnVlOwotICAgICAgICB0aGlzLl9oaWRlTGlzdFN5bmNJZlBvc3NpYmxlKCk7Ci0g
ICAgfSwKLSAgICBfaGlkZUxpc3RTeW5jSWZQb3NzaWJsZTogZnVuY3Rpb24gKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy4kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
JCgpLmhpZGUoKTsKLSAgICB9Ci19KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjIvc3RhdGlzdGljcy1zdHJhdGVnaWVzLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92Mi9zdGF0aXN0aWNzLXN0cmF0ZWdpZXMuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUzYWU4Njg2ZTExMjAwMTY2MWE4YTk3OWNiMmI2OTQ3ZDhmM2Yw
YzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9zdGF0aXN0aWNzLXN0cmF0ZWdpZXMuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotCi12YXIgU3RhdGlzdGljc1N0cmF0ZWdpZXMg
PSB7fTsKLQotKGZ1bmN0aW9uICgpIHsKLQotU3RhdGlzdGljc1N0cmF0ZWdpZXMuTW92aW5nQXZl
cmFnZVN0cmF0ZWdpZXMgPSBbCi0gICAgewotICAgICAgICBpZDogMSwKLSAgICAgICAgbGFiZWw6
ICdTaW1wbGUgTW92aW5nIEF2ZXJhZ2UnLAotICAgICAgICBwYXJhbWV0ZXJMaXN0OiBbCi0gICAg
ICAgICAgICB7bGFiZWw6ICJCYWNrd2FyZCB3aW5kb3cgc2l6ZSIsIHZhbHVlOiA4LCBtaW46IDIs
IHN0ZXA6IDF9LAotICAgICAgICAgICAge2xhYmVsOiAiRm9yd2FyZCB3aW5kb3cgc2l6ZSIsIHZh
bHVlOiA0LCBtaW46IDAsIHN0ZXA6IDF9Ci0gICAgICAgIF0sCi0gICAgICAgIGV4ZWN1dGU6IGZ1
bmN0aW9uIChiYWNrd2FyZFdpbmRvd1NpemUsIGZvcndhcmRXaW5kb3dTaXplLCB2YWx1ZXMpIHsK
LSAgICAgICAgICAgIHJldHVybiBTdGF0aXN0aWNzLm1vdmluZ0F2ZXJhZ2UodmFsdWVzLCBiYWNr
d2FyZFdpbmRvd1NpemUsIGZvcndhcmRXaW5kb3dTaXplKTsKLSAgICAgICAgfSwKLSAgICB9LAot
ICAgIHsKLSAgICAgICAgaWQ6IDIsCi0gICAgICAgIGxhYmVsOiAnQ3VtdWxhdGl2ZSBNb3Zpbmcg
QXZlcmFnZScsCi0gICAgICAgIGV4ZWN1dGU6IFN0YXRpc3RpY3MuY3VtdWxhdGl2ZU1vdmluZ0F2
ZXJhZ2UsCi0gICAgfSwKLSAgICB7Ci0gICAgICAgIGlkOiAzLAotICAgICAgICBsYWJlbDogJ0V4
cG9uZW50aWFsIE1vdmluZyBBdmVyYWdlJywKLSAgICAgICAgcGFyYW1ldGVyTGlzdDogW3tsYWJl
bDogIlNtb290aGluZyBmYWN0b3IiLCB2YWx1ZTogMC4xLCBtaW46IDAuMDAxLCBtYXg6IDAuOX1d
LAotICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAoc21vb3RoaW5nRmFjdG9yLCB2YWx1ZXMpIHsK
LSAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCB8fCB0eXBlb2Yoc21vb3RoaW5nRmFjdG9y
KSAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAg
ICByZXR1cm4gU3RhdGlzdGljcy5leHBvbmVudGlhbE1vdmluZ0F2ZXJhZ2UodmFsdWVzLCBzbW9v
dGhpbmdGYWN0b3IpOwotICAgICAgICB9Ci0gICAgfSwKLSAgICB7Ci0gICAgICAgIGlkOiA0LAot
ICAgICAgICBpc1NlZ21lbnRhdGlvbjogdHJ1ZSwKLSAgICAgICAgbGFiZWw6ICdTZWdtZW50YXRp
b246IFJlY3Vyc2l2ZSB0LXRlc3QnLAotICAgICAgICBkZXNjcmlwdGlvbjogIlJlY3Vyc2l2ZWx5
IHNwbGl0IHZhbHVlcyBpbnRvIHR3byBzZWdtZW50cyBpZiBXZWxjaCdzIHQtdGVzdCBkZXRlY3Rz
IGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLiIsCi0gICAgICAgIHBhcmFt
ZXRlckxpc3Q6IFt7bGFiZWw6ICJNaW5pbXVtIHNlZ21lbnQgbGVuZ3RoIiwgdmFsdWU6IDIwLCBt
aW46IDV9XSwKLSAgICAgICAgZXhlY3V0ZTogZnVuY3Rpb24gKG1pbkxlbmd0aCwgdmFsdWVzKSB7
Ci0gICAgICAgICAgICByZXR1cm4gYXZlcmFnZXNGcm9tU2VnbWVudHModmFsdWVzLCBTdGF0aXN0
aWNzLnNlZ21lbnRUaW1lU2VyaWVzR3JlZWR5V2l0aFN0dWRlbnRzVFRlc3QodmFsdWVzLCBtaW5M
ZW5ndGgpKTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgewotICAgICAgICBpZDogNSwKLSAgICAg
ICAgaXNTZWdtZW50YXRpb246IHRydWUsCi0gICAgICAgIGxhYmVsOiAnU2VnbWVudGF0aW9uOiBT
Y2h3YXJ6IGNyaXRlcmlvbicsCi0gICAgICAgIGRlc2NyaXB0aW9uOiAnQWRhcHRpdmUgYWxnb3Jp
dGhtIHRoYXQgbWF4aW1pemVzIHRoZSBTY2h3YXJ6IGNyaXRlcmlvbiAoQklDKS4nLAotICAgICAg
ICAvLyBCYXNlZCBvbiBEZXRlY3Rpb24gb2YgTXVsdGlwbGUgQ2hhbmdl4oCTUG9pbnRzIGluIE11
bHRpdmFyaWF0ZSBUaW1lIFNlcmllcyBieSBNYXJjIExhdmllbGxlIChKdWx5IDIwMDYpLgotICAg
ICAgICBleGVjdXRlOiBmdW5jdGlvbiAodmFsdWVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXZl
cmFnZXNGcm9tU2VnbWVudHModmFsdWVzLCBTdGF0aXN0aWNzLnNlZ21lbnRUaW1lU2VyaWVzQnlN
YXhpbWl6aW5nU2Nod2FyekNyaXRlcmlvbih2YWx1ZXMpKTsKLSAgICAgICAgfQotICAgIH0sCi1d
OwotCi1mdW5jdGlvbiBhdmVyYWdlc0Zyb21TZWdtZW50cyh2YWx1ZXMsIHNlZ21lbnRTdGFydElu
ZGljZXMpIHsKLSAgICB2YXIgYXZlcmFnZXMgPSBuZXcgQXJyYXkodmFsdWVzLmxlbmd0aCk7Ci0g
ICAgdmFyIGF2ZXJhZ2VJbmRleCA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50
U3RhcnRJbmRpY2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBzZWdtZW50ID0gdmFsdWVz
LnNsaWNlKHNlZ21lbnRTdGFydEluZGljZXNbaSAtIDFdLCBzZWdtZW50U3RhcnRJbmRpY2VzW2ld
KTsKLSAgICAgICAgdmFyIGF2ZXJhZ2UgPSBTdGF0aXN0aWNzLnN1bShzZWdtZW50KSAvIHNlZ21l
bnQubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlZ21lbnQubGVuZ3RoOyBq
KyspCi0gICAgICAgICAgICBhdmVyYWdlc1thdmVyYWdlSW5kZXgrK10gPSBhdmVyYWdlOwotICAg
IH0KLSAgICByZXR1cm4gYXZlcmFnZXM7Ci19Ci0KLQotU3RhdGlzdGljc1N0cmF0ZWdpZXMuRW52
ZWxvcGluZ1N0cmF0ZWdpZXMgPSBbCi0gICAgewotICAgICAgICBpZDogMTAwLAotICAgICAgICBs
YWJlbDogJ0F2ZXJhZ2UgRGlmZmVyZW5jZScsCi0gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGF2
ZXJhZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIHZhbHVlcy4nLAotICAgICAgICBl
eGVjdXRlOiBmdW5jdGlvbiAodmFsdWVzLCBtb3ZpbmdBdmVyYWdlcykgewotICAgICAgICAgICAg
aWYgKHZhbHVlcy5sZW5ndGggPCAxKQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0KLSAg
ICAgICAgICAgIHZhciBkaWZmID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
dmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGRpZmYgKz0gTWF0aC5hYnModmFs
dWVzW2ldIC0gdmFsdWVzW2kgLSAxXSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBkaWZmIC8gdmFs
dWVzLmxlbmd0aDsKLSAgICAgICAgfQotICAgIH0sCi0gICAgewotICAgICAgICBpZDogMTAxLAot
ICAgICAgICBsYWJlbDogJ01vdmluZyBBdmVyYWdlIFN0YW5kYXJkIERldmlhdGlvbicsCi0gICAg
ICAgIGRlc2NyaXB0aW9uOiAnVGhlIHNxdWFyZSByb290IG9mIHRoZSBhdmVyYWdlIGRldmlhdGlv
biBmcm9tIHRoZSBtb3ZpbmcgYXZlcmFnZSB3aXRoIEJlc3NlbFwncyBjb3JyZWN0aW9uLicsCi0g
ICAgICAgIGV4ZWN1dGU6IGZ1bmN0aW9uICh2YWx1ZXMsIG1vdmluZ0F2ZXJhZ2VzKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5h
TjsKLQotICAgICAgICAgICAgdmFyIGRpZmZTcXVhcmVTdW0gPSAwOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICB2
YXIgZGlmZiA9ICh2YWx1ZXNbaV0gLSBtb3ZpbmdBdmVyYWdlc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgZGlmZlNxdWFyZVN1bSArPSBkaWZmICogZGlmZjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcmV0dXJuIE1hdGguc3FydChkaWZmU3F1YXJlU3VtIC8gKHZhbHVlcy5sZW5ndGggLSAx
KSk7Ci0gICAgICAgIH0KLSAgICB9LAotXTsKLQotCi1TdGF0aXN0aWNzU3RyYXRlZ2llcy5UZXN0
UmFuZ2VTZWxlY3Rpb25TdHJhdGVnaWVzID0gWwotICAgIHsKLSAgICAgICAgaWQ6IDMwMSwKLSAg
ICAgICAgbGFiZWw6ICJ0LXRlc3QgOTklIHNpZ25pZmljYW5jZSIsCi0gICAgICAgIGV4ZWN1dGU6
IGZ1bmN0aW9uICh2YWx1ZXMsIHNlZ21lbnRlZFZhbHVlcykgewotICAgICAgICAgICAgaWYgKCF2
YWx1ZXMubGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBbXTsKLQotICAgICAgICAgICAg
dmFyIHByZXZpb3VzTWVhbiA9IHNlZ21lbnRlZFZhbHVlc1swXTsKLSAgICAgICAgICAgIHZhciBz
ZWxlY3RlZFJhbmdlcyA9IG5ldyBBcnJheTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgc2VnbWVudGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGN1
cnJlbnRNZWFuID0gc2VnbWVudGVkVmFsdWVzW2ldOwotICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50TWVhbiA9PSBwcmV2aW91c01lYW4pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAo
dmFyIGxlZnRFZGdlID0gaSAtIDIsIHJpZ2h0RWRnZSA9IGkgKyAyOyBsZWZ0RWRnZSA+PSAwICYm
IHJpZ2h0RWRnZSA8PSB2YWx1ZXMubGVuZ3RoOyBsZWZ0RWRnZS0tLCByaWdodEVkZ2UrKykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudGVkVmFsdWVzW2xlZnRFZGdlXSAhPSBwcmV2
aW91c01lYW4gfHwgc2VnbWVudGVkVmFsdWVzW3JpZ2h0RWRnZSAtIDFdICE9IGN1cnJlbnRNZWFu
KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBTdGF0aXN0aWNzLmNvbXB1dGVXZWxjaHNUKHZhbHVlcywgbGVmdEVkZ2UsIGkg
LSBsZWZ0RWRnZSwgdmFsdWVzLCBpLCByaWdodEVkZ2UgLSBpLCAwLjk4KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5zaWduaWZpY2FudGx5RGlmZmVyZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlcy5wdXNoKFtsZWZ0RWRnZSwgcmlnaHRFZGdlIC0g
MV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBTdGF0aXN0aWNzLmRlYnVnZ2luZ1Rl
c3RpbmdSYW5nZU5vbWluYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdG
YWlsZWQgdG8gZmluZCBhIHRlc3RpbmcgcmFuZ2UgYXQnLCBpLCAnY2hhbmdpbmcgZnJvbScsIHBy
ZXZpb3VzTWVhbiwgJ3RvJywgY3VycmVudE1lYW4pOwotICAgICAgICAgICAgICAgIHByZXZpb3Vz
TWVhbiA9IGN1cnJlbnRNZWFuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNl
bGVjdGVkUmFuZ2VzOwotICAgICAgICB9Ci0gICAgfQotXTsKLQotCi0KLWZ1bmN0aW9uIGNyZWF0
ZVdlc3Rlcm5FbGVjdHJpY1J1bGUod2luZG93U2l6ZSwgbWluT3V0bGluZXJDb3VudCwgbGltaXRG
YWN0b3IpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlcywgbW92aW5nQXZlcmFnZXMsIGRl
dmlhdGlvbikgewotICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3Ro
KTsKLSAgICAgICAgdmFyIGxpbWl0ID0gbGltaXRGYWN0b3IgKiBkZXZpYXRpb247Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVz
dWx0c1tpXSA9IGNvdW50VmFsdWVzT25TYW1lU2lkZSh2YWx1ZXMsIG1vdmluZ0F2ZXJhZ2VzLCBs
aW1pdCwgaSwgd2luZG93U2l6ZSkgPj0gbWluT3V0bGluZXJDb3VudCA/IHdpbmRvd1NpemUgOiAw
OwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGNvdW50VmFs
dWVzT25TYW1lU2lkZSh2YWx1ZXMsIG1vdmluZ0F2ZXJhZ2VzLCBsaW1pdCwgc3RhcnRJbmRleCwg
d2luZG93U2l6ZSkgewotICAgIHZhciB2YWx1ZXNBYm92ZUxpbWl0ID0gMDsKLSAgICB2YXIgdmFs
dWVzQmVsb3dMaW1pdCA9IDA7Ci0gICAgdmFyIGNlbnRlciA9IG1vdmluZ0F2ZXJhZ2VzW3N0YXJ0
SW5kZXhdOwotICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgc3RhcnRJbmRleCArIHdp
bmRvd1NpemUgJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgZGlmZiA9
IHZhbHVlc1tpXSAtIGNlbnRlcjsKLSAgICAgICAgdmFsdWVzQWJvdmVMaW1pdCArPSAoZGlmZiA+
IGxpbWl0KTsKLSAgICAgICAgdmFsdWVzQmVsb3dMaW1pdCArPSAoZGlmZiA8IC1saW1pdCk7Ci0g
ICAgfQotICAgIHJldHVybiBNYXRoLm1heCh2YWx1ZXNBYm92ZUxpbWl0LCB2YWx1ZXNCZWxvd0xp
bWl0KTsKLX0KLQotU3RhdGlzdGljc1N0cmF0ZWdpZXMuQW5vbWFseURldGVjdGlvblN0cmF0ZWd5
ID0gWwotICAgIC8vIFdlc3Rlcm4gRWxlY3RyaWMgcnVsZXM6IGh0dHA6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvV2VzdGVybl9FbGVjdHJpY19ydWxlcwotICAgIHsKLSAgICAgICAgaWQ6IDIwMCwK
LSAgICAgICAgbGFiZWw6ICdXZXN0ZXJuIEVsZWN0cmljOiBhbnkgcG9pbnQgYmV5b25kIDPPgycs
Ci0gICAgICAgIGRlc2NyaXB0aW9uOiAnQW55IHNpbmdsZSBwb2ludCBmYWxscyBvdXRzaWRlIDPP
gyBsaW1pdCBmcm9tIHRoZSBtb3ZpbmcgYXZlcmFnZScsCi0gICAgICAgIGV4ZWN1dGU6IGNyZWF0
ZVdlc3Rlcm5FbGVjdHJpY1J1bGUoMSwgMSwgMyksCi0gICAgfSwKLSAgICB7Ci0gICAgICAgIGlk
OiAyMDEsCi0gICAgICAgIGxhYmVsOiAnV2VzdGVybiBFbGVjdHJpYzogMi8zIHBvaW50cyBiZXlv
bmQgMs+DJywKLSAgICAgICAgZGVzY3JpcHRpb246ICdUd28gb3V0IG9mIHRocmVlIGNvbnNlY3V0
aXZlIHBvaW50cyBmYWxsIG91dHNpZGUgMs+DIGxpbWl0IGZyb20gdGhlIG1vdmluZyBhdmVyYWdl
IG9uIHRoZSBzYW1lIHNpZGUnLAotICAgICAgICBleGVjdXRlOiBjcmVhdGVXZXN0ZXJuRWxlY3Ry
aWNSdWxlKDMsIDIsIDIpLAotICAgIH0sCi0gICAgewotICAgICAgICBpZDogMjAyLAotICAgICAg
ICBsYWJlbDogJ1dlc3Rlcm4gRWxlY3RyaWM6IDQvNSBwb2ludHMgYmV5b25kIM+DJywKLSAgICAg
ICAgZGVzY3JpcHRpb246ICdGb3VyIG91dCBvZiBmaXZlIGNvbnNlY3V0aXZlIHBvaW50cyBmYWxs
IG91dHNpZGUgMs+DIGxpbWl0IGZyb20gdGhlIG1vdmluZyBhdmVyYWdlIG9uIHRoZSBzYW1lIHNp
ZGUnLAotICAgICAgICBleGVjdXRlOiBjcmVhdGVXZXN0ZXJuRWxlY3RyaWNSdWxlKDUsIDQsIDEp
LAotICAgIH0sCi0gICAgewotICAgICAgICBpZDogMjAzLAotICAgICAgICBsYWJlbDogJ1dlc3Rl
cm4gRWxlY3RyaWM6IDkgcG9pbnRzIG9uIHNhbWUgc2lkZScsCi0gICAgICAgIGRlc2NyaXB0aW9u
OiAnTmluZSBjb25zZWN1dGl2ZSBwb2ludHMgb24gdGhlIHNhbWUgc2lkZSBvZiB0aGUgbW92aW5n
IGF2ZXJhZ2UnLAotICAgICAgICBleGVjdXRlOiBjcmVhdGVXZXN0ZXJuRWxlY3RyaWNSdWxlKDks
IDksIDApLAotICAgIH0sCi0gICAgewotICAgICAgICBpZDogMjEwLAotICAgICAgICBsYWJlbDog
J01vemlsbGE6IHQtdGVzdCA1IHZzLiAyMCBiZWZvcmUgdGhhdCcsCi0gICAgICAgIGRlc2NyaXB0
aW9uOiAiVXNlIHN0dWRlbnQncyB0LXRlc3QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG1lYW4g
b2YgdGhlIGxhc3QgZml2ZSBkYXRhIHBvaW50cyBkaWZmZXJzIGZyb20gdGhlIG1lYW4gb2YgdGhl
IHR3ZW50eSB2YWx1ZXMgYmVmb3JlIHRoYXQiLAotICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAo
dmFsdWVzLCBtb3ZpbmdBdmVyYWdlcywgZGV2aWF0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgcmVz
dWx0cyA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTsKLSAgICAgICAgICAgIHZhciBwID0gZmFs
c2U7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMjA7IGkgPCB2YWx1ZXMubGVuZ3RoIC0gNTsg
aSsrKQotICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBTdGF0aXN0aWNzLnRlc3RXZWxjaHNU
KHZhbHVlcy5zbGljZShpIC0gMjAsIGkpLCB2YWx1ZXMuc2xpY2UoaSwgaSArIDUpLCAwLjk4KSA/
IDUgOiAwOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgIH0KLSAgICB9LAot
XQotCi1TdGF0aXN0aWNzU3RyYXRlZ2llcy5leGVjdXRlU3RyYXRlZ3kgPSBmdW5jdGlvbiAoc3Ry
YXRlZ3ksIHJhd1ZhbHVlcywgYWRkaXRpb25hbEFyZ3VtZW50cykKLXsKLSAgICB2YXIgcGFyYW1l
dGVycyA9IChzdHJhdGVneS5wYXJhbWV0ZXJMaXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKHBhcmFt
KSB7Ci0gICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZUZsb2F0KHBhcmFtLnZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIE1hdGgubWluKHBhcmFtLm1heCB8fCBJbmZpbml0eSwgTWF0aC5tYXgocGFyYW0u
bWluIHx8IC1JbmZpbml0eSwgaXNOYU4ocGFyc2VkKSA/IDAgOiBwYXJzZWQpKTsKLSAgICB9KTsK
LSAgICBwYXJhbWV0ZXJzLnB1c2gocmF3VmFsdWVzKTsKLSAgICByZXR1cm4gc3RyYXRlZ3kuZXhl
Y3V0ZS5hcHBseShzdHJhdGVneSwgcGFyYW1ldGVycy5jb25jYXQoYWRkaXRpb25hbEFyZ3VtZW50
cykpOwotfTsKLQotfSkoKTsKLQotaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsK
LSAgICBmb3IgKHZhciBrZXkgaW4gU3RhdGlzdGljc1N0cmF0ZWdpZXMpCi0gICAgICAgIG1vZHVs
ZS5leHBvcnRzW2tleV0gPSBTdGF0aXN0aWNzU3RyYXRlZ2llc1trZXldOwotfQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2RldGVjdC1jaGFuZ2VzLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2RldGVjdC1jaGFuZ2VzLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCA5ZmI2NTk1ZmZlNGI2MDJhZTA4Mzk3MjU5NTgzMTNiODkyNzU5
MTdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9kZXRlY3QtY2hhbmdlcy5qcworKysgL2Rldi9udWxs
CkBAIC0xLDQwMSArMCwwIEBACi0jIS91c3IvbG9jYWwvYmluL25vZGUKLQotdmFyIGZzID0gcmVx
dWlyZSgnZnMnKTsKLXZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpOwotdmFyIGh0dHBzID0gcmVx
dWlyZSgnaHR0cHMnKTsKLXZhciBkYXRhID0gcmVxdWlyZSgnLi4vcHVibGljL3YyL2RhdGEuanMn
KTsKLXZhciBSdW5zRGF0YSA9IGRhdGEuUnVuc0RhdGE7Ci12YXIgU3RhdGlzdGljcyA9IHJlcXVp
cmUoJy4uL3B1YmxpYy9zaGFyZWQvc3RhdGlzdGljcy5qcycpOwotdmFyIFN0YXRpc3RpY3NTdHJh
dGVnaWVzID0gcmVxdWlyZSgnLi4vcHVibGljL3YyL3N0YXRpc3RpY3Mtc3RyYXRlZ2llcy5qcycp
OwotdmFyIHBhcnNlQXJndW1lbnRzID0gcmVxdWlyZSgnLi9qcy9wYXJzZS1hcmd1bWVudHMuanMn
KS5wYXJzZUFyZ3VtZW50czsKLQotLy8gRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgYSBnbG9iYWwg
dmFyaWFibGUgbGlrZSB0aGlzLgotdmFyIHNldHRpbmdzOwotZnVuY3Rpb24gbWFpbihhcmd2KQot
ewotICAgIHZhciBvcHRpb25zID0gcGFyc2VBcmd1bWVudHMoYXJndiwgWwotICAgICAgICB7bmFt
ZTogJy0tc2VydmVyLWNvbmZpZy1qc29uJywgcmVxdWlyZWQ6IHRydWV9LAotICAgICAgICB7bmFt
ZTogJy0tY2hhbmdlLWRldGVjdGlvbi1jb25maWctanNvbicsIHJlcXVpcmVkOiB0cnVlfSwKLSAg
ICAgICAge25hbWU6ICctLXNlY29uZHMtdG8tc2xlZXAnLCB0eXBlOiBwYXJzZUZsb2F0LCBkZWZh
dWx0OiAxMjAwfSwKLSAgICBdKTsKLSAgICBpZiAoIW9wdGlvbnMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHNldHRpbmdzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMob3B0aW9uc1snLS1j
aGFuZ2UtZGV0ZWN0aW9uLWNvbmZpZy1qc29uJ10sICd1dGY4JykpOwotICAgIHNldHRpbmdzLnNl
Y29uZHNUb1NsZWVwID0gb3B0aW9uc1snLS1zZWNvbmRzLXRvLXNsZWVwJ107Ci0KLSAgICBmZXRj
aE1hbmlmZXN0QW5kQW5hbHl6ZURhdGEob3B0aW9uc1snLS1zZXJ2ZXItY29uZmlnLWpzb24nXSk7
Ci19Ci0KLWZ1bmN0aW9uIGZldGNoTWFuaWZlc3RBbmRBbmFseXplRGF0YShzZXJ2ZXJDb25maWdK
U09OKQotewotICAgIGxvYWRTZXJ2ZXJDb25maWcoc2VydmVyQ29uZmlnSlNPTik7Ci0KLSAgICBn
ZXRKU09OKHNldHRpbmdzLnBlcmZzZXJ2ZXIsICcvZGF0YS9tYW5pZmVzdC5qc29uJykudGhlbihm
dW5jdGlvbiAobWFuaWZlc3QpIHsKLSAgICAgICAgcmV0dXJuIG1hcEluT3JkZXIoY29uZmlndXJh
dGlvbnNGb3JUZXN0aW5nKG1hbmlmZXN0KSwgYW5hbHl6ZUNvbmZpZ3VyYXRpb24pOwotICAgIH0p
LmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVk
IHRvIG9idGFpbiB0aGUgbWFuaWZlc3QgZmlsZScsIHJlYXNvbik7Ci0gICAgfSkudGhlbihmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCcnKTsKLSAgICAgICAgY29uc29sZS5sb2co
J1NsZWVpbmcgZm9yJywgc2V0dGluZ3Muc2Vjb25kc1RvU2xlZXAsICdzZWNvbmRzJyk7Ci0gICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgZmV0Y2hNYW5pZmVzdEFu
ZEFuYWx5emVEYXRhKHNlcnZlckNvbmZpZ0pTT04pOwotICAgICAgICB9LCBzZXR0aW5ncy5zZWNv
bmRzVG9TbGVlcCAqIDEwMDApOwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBsb2FkU2VydmVyQ29u
ZmlnKHNlcnZlckNvbmZpZ0pTT04pCi17Ci0gICAgdmFyIHNlcnZlckNvbmZpZyA9IEpTT04ucGFy
c2UoZnMucmVhZEZpbGVTeW5jKHNlcnZlckNvbmZpZ0pTT04sICd1dGY4JykpOwotCi0gICAgdmFy
IHNlcnZlciA9IHNlcnZlckNvbmZpZ1snc2VydmVyJ107Ci0gICAgaWYgKCdhdXRoJyBpbiBzZXJ2
ZXIpCi0gICAgICAgIHNlcnZlclsnYXV0aCddID0gc2VydmVyWydhdXRoJ11bJ3VzZXJuYW1lJ10g
KyAnOicgKyBzZXJ2ZXJbJ2F1dGgnXVsncGFzc3dvcmQnXTsKLQotICAgIHNldHRpbmdzLnBlcmZz
ZXJ2ZXIgPSBzZXJ2ZXI7Ci0gICAgc2V0dGluZ3Mud29ya2VyID0gc2VydmVyQ29uZmlnWyd3b3Jr
ZXInXTsKLX0KLQotZnVuY3Rpb24gbWFwSW5PcmRlcihhcnJheSwgY2FsbGJhY2ssIHN0YXJ0SW5k
ZXgpCi17Ci0gICAgaWYgKHN0YXJ0SW5kZXggPT09IHVuZGVmaW5lZCkKLSAgICAgICAgc3RhcnRJ
bmRleCA9IDA7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPj0gYXJyYXkubGVuZ3RoKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hcEluT3JkZXIo
YXJyYXksIGNhbGxiYWNrLCBzdGFydEluZGV4ICsgMSk7IH07Ci0gICAgdmFyIHJldHVyblZhbHVl
ID0gY2FsbGJhY2soYXJyYXlbc3RhcnRJbmRleF0pOwotICAgIGlmICh0eXBlb2YocmV0dXJuVmFs
dWUpID09PSAnb2JqZWN0JyAmJiByZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpCi0gICAg
ICAgIHJldHVybiByZXR1cm5WYWx1ZS50aGVuKG5leHQpLmNhdGNoKG5leHQpOwotICAgIHJldHVy
biBuZXh0KCk7Ci19Ci0KLWZ1bmN0aW9uIGNvbmZpZ3VyYXRpb25zRm9yVGVzdGluZyhtYW5pZmVz
dCkKLXsKLSAgICB2YXIgY29uZmlndXJhdGlvbnMgPSBbXTsKLSAgICBmb3IgKHZhciBuYW1lIGlu
IG1hbmlmZXN0LmRhc2hib2FyZHMpIHsKLSAgICAgICAgdmFyIGRhc2hib2FyZCA9IG1hbmlmZXN0
LmRhc2hib2FyZHNbbmFtZV07Ci0gICAgICAgIGZvciAodmFyIHJvdyBvZiBkYXNoYm9hcmQpIHsK
LSAgICAgICAgICAgIGZvciAodmFyIGNlbGwgb2Ygcm93KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNlbGwgaW5zdGFuY2VvZiBBcnJheSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcGxhdGZv
cm1JZCA9IHBhcnNlSW50KGNlbGxbMF0pOwotICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmlj
SWQgPSBwYXJzZUludChjZWxsWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihw
bGF0Zm9ybUlkKSAmJiAhaXNOYU4obWV0cmljSWQpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlndXJhdGlvbnMucHVzaCh7cGxhdGZvcm1JZDogcGxhdGZvcm1JZCwgbWV0cmljSWQ6IG1l
dHJpY0lkfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdmFyIHBsYXRmb3JtcyA9IG1hbmlmZXN0LmFsbDsKLSAgICBmb3IgKHZhciBj
b25maWcgb2YgY29uZmlndXJhdGlvbnMpIHsKLSAgICAgICAgdmFyIG1ldHJpYyA9IG1hbmlmZXN0
Lm1ldHJpY3NbY29uZmlnLm1ldHJpY0lkXTsKLQotICAgICAgICB2YXIgdGVzdFBhdGggPSBbXTsK
LSAgICAgICAgdmFyIGlkID0gbWV0cmljLnRlc3Q7Ci0gICAgICAgIHdoaWxlIChpZCkgewotICAg
ICAgICAgICAgdmFyIHRlc3QgPSBtYW5pZmVzdC50ZXN0c1tpZF07Ci0gICAgICAgICAgICB0ZXN0
UGF0aC5wdXNoKHRlc3QubmFtZSk7Ci0gICAgICAgICAgICBpZCA9IHRlc3QucGFyZW50SWQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb25maWcudW5pdCA9IFJ1bnNEYXRhLnVuaXRGcm9tTWV0cmlj
TmFtZShtZXRyaWMubmFtZSk7Ci0gICAgICAgIGNvbmZpZy5zbWFsbGVySXNCZXR0ZXIgPSBSdW5z
RGF0YS5pc1NtYWxsZXJCZXR0ZXIoY29uZmlnLnVuaXQpOwotICAgICAgICBjb25maWcucGxhdGZv
cm1OYW1lID0gcGxhdGZvcm1zW2NvbmZpZy5wbGF0Zm9ybUlkXS5uYW1lOwotICAgICAgICBjb25m
aWcudGVzdE5hbWUgPSB0ZXN0UGF0aC5yZXZlcnNlKCkuam9pbignID4gJyk7Ci0gICAgICAgIGNv
bmZpZy5mdWxsVGVzdE5hbWUgPSBjb25maWcudGVzdE5hbWUgKyAnOicgKyBtZXRyaWMubmFtZTsK
LSAgICAgICAgY29uZmlnLnJlcG9zaXRvcmllcyA9IG1hbmlmZXN0LnJlcG9zaXRvcmllczsKLSAg
ICAgICAgaWYgKG1ldHJpYy5hZ2dyZWdhdG9yKQotICAgICAgICAgICAgY29uZmlnLmZ1bGxUZXN0
TmFtZSArPSAnOicgKyBtZXRyaWMuYWdncmVnYXRvcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29u
ZmlndXJhdGlvbnM7Ci19Ci0KLWZ1bmN0aW9uIGFuYWx5emVDb25maWd1cmF0aW9uKGNvbmZpZykK
LXsKLSAgICB2YXIgbWluVGltZSA9IERhdGUubm93KCkgLSBzZXR0aW5ncy5tYXhEYXlzICogMjQg
KiAzNjAwICogMTAwMDsKLQotICAgIGNvbnNvbGUubG9nKCcnKTsKLSAgICBjb25zb2xlLmxvZygn
PT0gQW5hbHl6aW5nIHRoZSBsYXN0Jywgc2V0dGluZ3MubWF4RGF5cywgJ2RheXM6JywgY29uZmln
LmZ1bGxUZXN0TmFtZSwgJ29uJywgY29uZmlnLnBsYXRmb3JtTmFtZSwgJz09Jyk7Ci0KLSAgICBy
ZXR1cm4gY29tcHV0ZVJhbmdlc0ZvclRlc3Rpbmcoc2V0dGluZ3MucGVyZnNlcnZlciwgc2V0dGlu
Z3Muc3RyYXRlZ2llcywgY29uZmlnLnBsYXRmb3JtSWQsIGNvbmZpZy5tZXRyaWNJZCkudGhlbihm
dW5jdGlvbiAocmFuZ2VzKSB7Ci0gICAgICAgIHZhciBmaWx0ZXJlZFJhbmdlcyA9IHJhbmdlcy5m
aWx0ZXIoZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiByYW5nZS5lbmRUaW1lID49IG1pblRpbWUg
JiYgIXJhbmdlLm92ZXJsYXBwaW5nQW5hbHlzaXNUYXNrcy5sZW5ndGg7IH0pCi0gICAgICAgICAg
ICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5lbmRUaW1lIC0gYi5lbmRUaW1lIH0p
OwotCi0gICAgICAgIHZhciBzdW1tYXJ5OwotICAgICAgICB2YXIgcmFuZ2U7Ci0gICAgICAgIGZv
ciAocmFuZ2Ugb2YgZmlsdGVyZWRSYW5nZXMpIHsKLSAgICAgICAgICAgIHZhciBzdW1tYXJ5ID0g
c3VtbWFyaXplUmFuZ2UoY29uZmlnLCByYW5nZSk7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygn
RGV0ZWN0ZWQ6Jywgc3VtbWFyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJhbmdlKSB7
Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygnTm90aGluZyB0byBhbmFseXplJyk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY3JlYXRlQW5hbHlzaXNU
YXNrQW5kTm90aWZ5KGNvbmZpZywgcmFuZ2UsIHN1bW1hcnkpOwotICAgIH0pOwotfQotCi1mdW5j
dGlvbiBjb21wdXRlUmFuZ2VzRm9yVGVzdGluZyhzZXJ2ZXIsIHN0cmF0ZWdpZXMsIHBsYXRmb3Jt
SWQsIG1ldHJpY0lkKQotewotICAgIC8vIEZJWE1FOiBTdG9yZSB0aGUgc2VnbWVudGF0aW9uIHN0
cmF0ZWd5IG9uIHRoZSBzZXJ2ZXIgc2lkZS4KLSAgICAvLyBGSVhNRTogQ29uZmlndXJlIGVhY2gg
c3RyYXRlZ3kuCi0gICAgdmFyIHNlZ21lbnRhdGlvblN0cmF0ZWd5ID0gZmluZFN0cmF0ZWd5QnlM
YWJlbChTdGF0aXN0aWNzU3RyYXRlZ2llcy5Nb3ZpbmdBdmVyYWdlU3RyYXRlZ2llcywgc3RyYXRl
Z2llcy5zZWdtZW50YXRpb24ubGFiZWwpOwotICAgIGlmICghc2VnbWVudGF0aW9uU3RyYXRlZ3kp
IHsKLSAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZpbmQgdGhlIHNlZ21lbnRhdGlv
biBzdHJhdGVneTogJyArIHN0cmF0ZWdpZXMuc2VnbWVudGF0aW9uLmxhYmVsKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHZhciB0ZXN0UmFuZ2VTdHJhdGVneSA9IGZpbmRTdHJhdGVn
eUJ5TGFiZWwoU3RhdGlzdGljc1N0cmF0ZWdpZXMuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ2ll
cywgc3RyYXRlZ2llcy50ZXN0UmFuZ2UubGFiZWwpOwotICAgIGlmICghdGVzdFJhbmdlU3RyYXRl
Z3kpIHsKLSAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZpbmQgdGhlIHRlc3QgcmFu
Z2Ugc2VsZWN0aW9uIHN0cmF0ZWd5OiAnICsgc3RyYXRlZ2llcy50ZXN0UmFuZ2UubGFiZWwpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGN1cnJlbnRQcm9taXNlID0gZ2V0SlNP
TihzZXJ2ZXIsIFJ1bnNEYXRhLnBhdGhGb3JGZXRjaGluZ1J1bnMocGxhdGZvcm1JZCwgbWV0cmlj
SWQpKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewotICAgICAgICBpZiAocmVzcG9uc2Uuc3Rh
dHVzICE9ICdPSycpCi0gICAgICAgICAgICB0aHJvdyByZXNwb25zZTsKLSAgICAgICAgcmV0dXJu
IFJ1bnNEYXRhLmNyZWF0ZVJ1bnNEYXRhSW5SZXNwb25zZShyZXNwb25zZSkuY29uZmlndXJhdGlv
bnMuY3VycmVudDsKLSAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgIGNvbnNvbGUu
ZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCB0aGUgbWVhc3VyZW1lbnRzOicsIHJlYXNvbik7Ci0gICAg
fSk7Ci0KLSAgICB2YXIgYW5hbHlzaXNUYXNrc1Byb21pc2UgPSBnZXRKU09OKHNlcnZlciwgJy9h
cGkvYW5hbHlzaXMtdGFza3M/cGxhdGZvcm09JyArIHBsYXRmb3JtSWQgKyAnJm1ldHJpYz0nICsg
bWV0cmljSWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChyZXNwb25z
ZS5zdGF0dXMgIT0gJ09LJykKLSAgICAgICAgICAgIHRocm93IHJlc3BvbnNlOwotICAgICAgICBy
ZXR1cm4gcmVzcG9uc2UuYW5hbHlzaXNUYXNrcy5maWx0ZXIoZnVuY3Rpb24gKHRhc2spIHsgcmV0
dXJuIHRhc2suc3RhcnRSdW4gJiYgdGFzay5lbmRSdW47IH0pOwotICAgIH0sIGZ1bmN0aW9uIChy
ZWFzb24pIHsKLSAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHRoZSBhbmFs
eXNpcyB0YXNrczonLCByZWFzb24pOwotICAgIH0pOwotCi0gICAgcmV0dXJuIFByb21pc2UuYWxs
KFtjdXJyZW50UHJvbWlzZSwgYW5hbHlzaXNUYXNrc1Byb21pc2VdKS50aGVuKGZ1bmN0aW9uIChy
ZXN1bHRzKSB7Ci0gICAgICAgIHZhciBjdXJyZW50VGltZVNlcmllcyA9IHJlc3VsdHNbMF0udGlt
ZVNlcmllc0J5Q29tbWl0VGltZSgpOwotICAgICAgICB2YXIgYW5hbHlzaXNUYXNrcyA9IHJlc3Vs
dHNbMV07Ci0gICAgICAgIHZhciByYXdWYWx1ZXMgPSBjdXJyZW50VGltZVNlcmllcy5yYXdWYWx1
ZXMoKTsKLSAgICAgICAgdmFyIHNlZ21lbnRlZFZhbHVlcyA9IFN0YXRpc3RpY3NTdHJhdGVnaWVz
LmV4ZWN1dGVTdHJhdGVneShzZWdtZW50YXRpb25TdHJhdGVneSwgcmF3VmFsdWVzKTsKLQotICAg
ICAgICB2YXIgcmFuZ2VzID0gU3RhdGlzdGljc1N0cmF0ZWdpZXMuZXhlY3V0ZVN0cmF0ZWd5KHRl
c3RSYW5nZVN0cmF0ZWd5LCByYXdWYWx1ZXMsIFtzZWdtZW50ZWRWYWx1ZXNdKS5tYXAoZnVuY3Rp
b24gKHJhbmdlKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnRQb2ludCA9IGN1cnJlbnRUaW1lU2Vy
aWVzLmZpbmRQb2ludEJ5SW5kZXgocmFuZ2VbMF0pOwotICAgICAgICAgICAgdmFyIGVuZFBvaW50
ID0gY3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlJbmRleChyYW5nZVsxXSk7Ci0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHJhbmdlWzBdLAotICAg
ICAgICAgICAgICAgIGVuZEluZGV4OiByYW5nZVsxXSwKLSAgICAgICAgICAgICAgICBvdmVybGFw
cGluZ0FuYWx5c2lzVGFza3M6IFtdLAotICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnRQ
b2ludC50aW1lLAotICAgICAgICAgICAgICAgIGVuZFRpbWU6IGVuZFBvaW50LnRpbWUsCi0gICAg
ICAgICAgICAgICAgcmVsYXRpdmVDaGFuZ2VJblNlZ21lbnRlZFZhbHVlczogKHNlZ21lbnRlZFZh
bHVlc1tyYW5nZVsxXV0gLSBzZWdtZW50ZWRWYWx1ZXNbcmFuZ2VbMF1dKSAvIHNlZ21lbnRlZFZh
bHVlc1tyYW5nZVswXV0sCi0gICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlbWVudDogc3RhcnRQ
b2ludC5tZWFzdXJlbWVudCwKLSAgICAgICAgICAgICAgICBlbmRNZWFzdXJlbWVudDogZW5kUG9p
bnQubWVhc3VyZW1lbnQsCi0gICAgICAgICAgICB9OwotICAgICAgICB9KTsKLQotICAgICAgICBm
b3IgKHZhciB0YXNrIG9mIGFuYWx5c2lzVGFza3MpIHsKLSAgICAgICAgICAgIHZhciB0YXNrU3Rh
cnRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZCh0YXNr
LnN0YXJ0UnVuKTsKLSAgICAgICAgICAgIHZhciB0YXNrRW5kUG9pbnQgPSBjdXJyZW50VGltZVNl
cmllcy5maW5kUG9pbnRCeU1lYXN1cmVtZW50SWQodGFzay5lbmRSdW4pOwotICAgICAgICAgICAg
Zm9yICh2YXIgcmFuZ2Ugb2YgcmFuZ2VzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpc2pvaW50
ID0gcmFuZ2UuZW5kSW5kZXggPCB0YXNrU3RhcnRQb2ludC5zZXJpZXNJbmRleAotICAgICAgICAg
ICAgICAgICAgICB8fCB0YXNrRW5kUG9pbnQuc2VyaWVzSW5kZXggPCByYW5nZS5zdGFydEluZGV4
OwotICAgICAgICAgICAgICAgIGlmICghZGlzam9pbnQpCi0gICAgICAgICAgICAgICAgICAgIHJh
bmdlLm92ZXJsYXBwaW5nQW5hbHlzaXNUYXNrcy5wdXNoKHRhc2spOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJhbmdlczsKLSAgICB9KTsKLX0KLQotZnVuY3Rp
b24gY3JlYXRlQW5hbHlzaXNUYXNrQW5kTm90aWZ5KGNvbmZpZywgcmFuZ2UsIHN1bW1hcnkpCi17
Ci0gICAgdmFyIHNlZ21lbnRhdGlvblN0cmF0ZWd5ID0gc2V0dGluZ3Muc3RyYXRlZ2llcy5zZWdt
ZW50YXRpb24ubGFiZWw7Ci0gICAgdmFyIHRlc3RSYW5nZVN0cmF0ZWd5ID0gc2V0dGluZ3Muc3Ry
YXRlZ2llcy50ZXN0UmFuZ2UubGFiZWw7Ci0KLSAgICB2YXIgYW5hbHlzaXNUYXNrRGF0YSA9IHsK
LSAgICAgICAgbmFtZTogc3VtbWFyeSwKLSAgICAgICAgc3RhcnRSdW46IHJhbmdlLnN0YXJ0TWVh
c3VyZW1lbnQuaWQoKSwKLSAgICAgICAgZW5kUnVuOiByYW5nZS5lbmRNZWFzdXJlbWVudC5pZCgp
LAotICAgICAgICBzZWdtZW50YXRpb25TdHJhdGVneTogc2VnbWVudGF0aW9uU3RyYXRlZ3ksCi0g
ICAgICAgIHRlc3RSYW5nZVN0cmF0ZWd5OiB0ZXN0UmFuZ2VTdHJhdGVneSwKLQotICAgICAgICB3
b3JrZXJOYW1lOiBzZXR0aW5ncy53b3JrZXIubmFtZSwKLSAgICAgICAgd29ya2VyUGFzc3dvcmQ6
IHNldHRpbmdzLndvcmtlci5wYXNzd29yZCwKLSAgICB9OwotCi0gICAgcmV0dXJuIHBvc3RKU09O
KHNldHRpbmdzLnBlcmZzZXJ2ZXIsICcvcHJpdmlsZWdlZC1hcGkvY3JlYXRlLWFuYWx5c2lzLXRh
c2snLCBhbmFseXNpc1Rhc2tEYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewotICAgICAg
ICBpZiAocmVzcG9uc2VbJ3N0YXR1cyddICE9ICdPSycpCi0gICAgICAgICAgICB0aHJvdyByZXNw
b25zZTsKLQotICAgICAgICB2YXIgYW5hbHlzaXNUYXNrSWQgPSByZXNwb25zZVsndGFza0lkJ107
Ci0KLSAgICAgICAgdmFyIHRpdGxlID0gJ1snICsgY29uZmlnLnRlc3ROYW1lICsgJ11bJyArIGNv
bmZpZy5wbGF0Zm9ybU5hbWUgKyAnXSAnICsgc3VtbWFyeTsKLSAgICAgICAgdmFyIGFuYWx5c2lz
VGFza1VSTCA9IHNldHRpbmdzLnBlcmZzZXJ2ZXIuc2NoZW1lICsgJzovLycgKyBzZXR0aW5ncy5w
ZXJmc2VydmVyLmhvc3QgKyAnL3YyLyMvYW5hbHlzaXMvdGFzay8nICsgYW5hbHlzaXNUYXNrSWQ7
Ci0gICAgICAgIHZhciBjaGFuZ2VUeXBlID0gY2hhbmdlVHlwZUZvclJhbmdlKGNvbmZpZywgcmFu
Z2UpOwotICAgICAgICAvLyBGSVhNRTogVGVtcGxhdGl6ZSB0aGlzLgotICAgICAgICB2YXIgbWVz
c2FnZSA9ICc8Yj4nICsgc2V0dGluZ3Mubm90aWZpY2F0aW9uLnNlcnZpY2VOYW1lICsgJzwvYj4g
ZGV0ZWN0ZWQgYSBwb3RlbnRpYWwgJyArIGNoYW5nZVR5cGUgKyAnOjxicj48YnI+JwotICAgICAg
ICAgICAgKyAnPHRhYmxlIGJvcmRlcj0xPjxjYXB0aW9uPicgKyBzdW1tYXJ5ICsgJzwvY2FwdGlv
bj48dGJvZHk+JwotICAgICAgICAgICAgKyAnPHRyPjx0aD5UZXN0PC90aD48dGQ+JyArIGNvbmZp
Zy5mdWxsVGVzdE5hbWUgKyAnPC90ZD48L3RyPicKLSAgICAgICAgICAgICsgJzx0cj48dGg+UGxh
dGZvcm08L3RoPjx0ZD4nICsgY29uZmlnLnBsYXRmb3JtTmFtZSArICc8L3RkPjwvdHI+JwotICAg
ICAgICAgICAgKyAnPHRyPjx0aD5BbGdvcml0aG08L3RoPjx0ZD4nICsgc2VnbWVudGF0aW9uU3Ry
YXRlZ3kgKyAnPGJyPicgKyB0ZXN0UmFuZ2VTdHJhdGVneSArICc8L3RkPjwvdHI+JwotICAgICAg
ICAgICAgKyAnPC90YWJsZT48YnI+JwotICAgICAgICAgICAgKyAnPGEgaHJlZj0iJyArIGFuYWx5
c2lzVGFza1VSTCArICciPk9wZW4gdGhlIGFuYWx5c2lzIHRhc2s8L2E+JzsKLQotICAgICAgICBy
ZXR1cm4gZ2V0SlNPTihzZXR0aW5ncy5wZXJmc2VydmVyLCAnL2FwaS90cmlnZ2VyYWJsZXM/dGFz
az0nICsgYW5hbHlzaXNUYXNrSWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7Ci0gICAgICAg
ICAgICB2YXIgc3RhdHVzID0gcmVzcG9uc2VbJ3N0YXR1cyddOwotICAgICAgICAgICAgdmFyIHRy
aWdnZXJhYmxlcyA9IHJlc3BvbnNlWyd0cmlnZ2VyYWJsZXMnXSB8fCBbXTsKLSAgICAgICAgICAg
IGlmIChzdGF0dXMgPT0gJ1RyaWdnZXJhYmxlTm90Rm91bmRGb3JUYXNrJyB8fCB0cmlnZ2VyYWJs
ZXMubGVuZ3RoICE9IDEpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICcgKEEvQiB0ZXN0
aW5nIHdhcyBub3QgYXZhaWxhYmxlKSc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAnT0snKQotICAgICAgICAgICAgICAg
IHRocm93IHJlc3BvbnNlOwotCi0gICAgICAgICAgICB2YXIgdHJpZ2dlcmFibGUgPSByZXNwb25z
ZVsndHJpZ2dlcmFibGVzJ11bMF07Ci0gICAgICAgICAgICB2YXIgY29tbWl0U2V0cyA9IHt9Owot
ICAgICAgICAgICAgZm9yICh2YXIgcmVwb3NpdG9yeUlkIG9mIHRyaWdnZXJhYmxlWydhY2NlcHRl
ZFJlcG9zaXRvcmllcyddKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmV2aXNpb24gPSBy
YW5nZS5zdGFydE1lYXN1cmVtZW50LnJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5SWQp
OwotICAgICAgICAgICAgICAgIHZhciBlbmRSZXZpc2lvbiA9IHJhbmdlLmVuZE1lYXN1cmVtZW50
LnJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5SWQpOwotICAgICAgICAgICAgICAgIGlm
IChzdGFydFJldmlzaW9uID09IG51bGwgfHwgZW5kUmV2aXNpb24gPT0gbnVsbCkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY29tbWl0U2V0c1tjb25maWcu
cmVwb3NpdG9yaWVzW3JlcG9zaXRvcnlJZF0ubmFtZV0gPSBbc3RhcnRSZXZpc2lvbiwgZW5kUmV2
aXNpb25dOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgdGVzdERhdGEgPSB7Ci0g
ICAgICAgICAgICAgICAgdGFzazogYW5hbHlzaXNUYXNrSWQsCi0gICAgICAgICAgICAgICAgbmFt
ZTogJ0NvbmZpcm1pbmcgdGhlICcgKyBjaGFuZ2VUeXBlLAotICAgICAgICAgICAgICAgIGNvbW1p
dFNldHM6IGNvbW1pdFNldHMsCi0gICAgICAgICAgICAgICAgcmVwZXRpdGlvbkNvdW50OiBNYXRo
Lm1heCgyLCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKChyYW5nZS5lbmRJbmRleCAtIHJhbmdlLnN0
YXJ0SW5kZXgpIC8gNCkpKSwKLQotICAgICAgICAgICAgICAgIHdvcmtlck5hbWU6IHNldHRpbmdz
Lndvcmtlci5uYW1lLAotICAgICAgICAgICAgICAgIHdvcmtlclBhc3N3b3JkOiBzZXR0aW5ncy53
b3JrZXIucGFzc3dvcmQsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICByZXR1cm4gcG9z
dEpTT04oc2V0dGluZ3MucGVyZnNlcnZlciwgJy9wcml2aWxlZ2VkLWFwaS9jcmVhdGUtdGVzdC1n
cm91cCcsIHRlc3REYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewotICAgICAgICAgICAg
ICAgIGlmIChyZXNwb25zZVsnc3RhdHVzJ10gIT0gJ09LJykKLSAgICAgICAgICAgICAgICAgICAg
dGhyb3cgcmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnICh0cmlnZ2VyZWQg
YW4gQS9CIHRlc3RpbmcpJzsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KS5jYXRjaChmdW5j
dGlvbiAocmVhc29uKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbik7Ci0gICAg
ICAgICAgICBtZXNzYWdlICs9ICcgKGZhaWxlZCB0byBjcmVhdGUgYSBuZXcgQS9CIHRlc3Rpbmcp
JzsKLSAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gcG9z
dE5vdGlmaWNhdGlvbihzZXR0aW5ncy5ub3RpZmljYXRpb24uc2VydmVyLCBzZXR0aW5ncy5ub3Rp
ZmljYXRpb24udGVtcGxhdGUsIHRpdGxlLCBtZXNzYWdlKS50aGVuKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygnICBTZW50IGEgbm90aWZpY2F0aW9uJyk7Ci0gICAg
ICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5l
cnJvcignICBGYWlsZWQgdG8gc2VuZCBhIG5vdGlmaWNhdGlvbicsIHJlYXNvbik7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikgewot
ICAgICAgICBjb25zb2xlLmVycm9yKCcgIEZhaWxlZCB0byBjcmVhdGUgYW4gYW5hbHlzaXMgdGFz
aycsIHJlYXNvbik7Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGZpbmRTdHJhdGVneUJ5TGFiZWwo
bGlzdCwgbGFiZWwpCi17Ci0gICAgZm9yICh2YXIgc3RyYXRlZ3kgb2YgbGlzdCkgewotICAgICAg
ICBpZiAoc3RyYXRlZ3kubGFiZWwgPT0gbGFiZWwpCi0gICAgICAgICAgICByZXR1cm4gc3RyYXRl
Z3k7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotfQotCi1mdW5jdGlvbiBjaGFuZ2VUeXBlRm9y
UmFuZ2UoY29uZmlnLCByYW5nZSkKLXsKLSAgICB2YXIgZW5kVmFsdWVJc0xhcmdlciA9IHJhbmdl
LnJlbGF0aXZlQ2hhbmdlSW5TZWdtZW50ZWRWYWx1ZXMgPiAwOwotICAgIHJldHVybiBlbmRWYWx1
ZUlzTGFyZ2VyID09IGNvbmZpZy5zbWFsbGVySXNCZXR0ZXIgPyAncmVncmVzc2lvbicgOiAncHJv
Z3Jlc3Npb24nOwotfQotCi1mdW5jdGlvbiBzdW1tYXJpemVSYW5nZShjb25maWcsIHJhbmdlKQot
ewotICAgIHJldHVybiAnUG90ZW50aWFsICcgKyBNYXRoLmFicyhyYW5nZS5yZWxhdGl2ZUNoYW5n
ZUluU2VnbWVudGVkVmFsdWVzICogMTAwKS50b1ByZWNpc2lvbigyKSArICclICcKLSAgICAgICAg
KyBjaGFuZ2VUeXBlRm9yUmFuZ2UoY29uZmlnLCByYW5nZSkgKyAnIGJldHdlZW4gJyArIGZvcm1h
dFRpbWVSYW5nZShyYW5nZS5zdGFydFRpbWUsIHJhbmdlLmVuZFRpbWUpOwotfQotCi1mdW5jdGlv
biBmb3JtYXRUaW1lUmFuZ2Uoc3RhcnQsIGVuZCkKLXsKLSAgICB2YXIgZm9ybWF0dGVyID0gZnVu
Y3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdUJywgJyAn
KS5yZXBsYWNlKC86XGR7Mn1cLlxkK1okLywgJycpOyB9Ci0gICAgdmFyIGZvcm1hdHRlZFN0YXJ0
ID0gZm9ybWF0dGVyKHN0YXJ0KTsKLSAgICB2YXIgZm9ybWF0dGVkRW5kID0gZm9ybWF0dGVyKGVu
ZCk7Ci0gICAgaWYgKHN0YXJ0LnRvRGF0ZVN0cmluZygpID09IGVuZC50b0RhdGVTdHJpbmcoKSkK
LSAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFN0YXJ0ICsgJyBhbmQgJyArIGZvcm1hdHRlZEVuZC5z
dWJzdHJpbmcoZm9ybWF0dGVkRW5kLmluZGV4T2YoJyAnKSArIDEpOwotICAgIGlmIChzdGFydC5n
ZXRGdWxsWWVhcigpID09IGVuZC5nZXRGdWxsWWVhcigpKQotICAgICAgICByZXR1cm4gZm9ybWF0
dGVkU3RhcnQgKyAnIGFuZCAnICsgZm9ybWF0dGVkRW5kLnN1YnN0cmluZyg1KTsKLSAgICByZXR1
cm4gZm9ybWF0dGVkU3RhcnQgKyAnIGFuZCAnICsgZm9ybWF0dGVkRW5kOwotfQotCi1mdW5jdGlv
biBnZXRKU09OKHNlcnZlciwgcGF0aCwgZGF0YSkKLXsKLSAgICByZXR1cm4gZmV0Y2hKU09OKHNl
cnZlci5zY2hlbWUsIHsKLSAgICAgICAgJ2hvc3RuYW1lJzogc2VydmVyLmhvc3QsCi0gICAgICAg
ICdwb3J0Jzogc2VydmVyLnBvcnQsCi0gICAgICAgICdhdXRoJzogc2VydmVyLmF1dGgsCi0gICAg
ICAgICdwYXRoJzogcGF0aCwKLSAgICAgICAgJ21ldGhvZCc6ICdHRVQnLAotICAgIH0sICdhcHBs
aWNhdGlvbi9qc29uJyk7Ci19Ci0KLWZ1bmN0aW9uIHBvc3RKU09OKHNlcnZlciwgcGF0aCwgZGF0
YSkKLXsKLSAgICByZXR1cm4gZmV0Y2hKU09OKHNlcnZlci5zY2hlbWUsIHsKLSAgICAgICAgJ2hv
c3RuYW1lJzogc2VydmVyLmhvc3QsCi0gICAgICAgICdwb3J0Jzogc2VydmVyLnBvcnQsCi0gICAg
ICAgICdhdXRoJzogc2VydmVyLmF1dGgsCi0gICAgICAgICdwYXRoJzogcGF0aCwKLSAgICAgICAg
J21ldGhvZCc6ICdQT1NUJywKLSAgICB9LCAnYXBwbGljYXRpb24vanNvbicsIEpTT04uc3RyaW5n
aWZ5KGRhdGEpKTsKLX0KLQotZnVuY3Rpb24gcG9zdE5vdGlmaWNhdGlvbihzZXJ2ZXIsIHRlbXBs
YXRlLCB0aXRsZSwgbWVzc2FnZSkKLXsKLSAgICB2YXIgbm90aWZpY2F0aW9uID0gaW5zdGFudGlh
dGVOb3RpZmljYXRpb25UZW1wbGF0ZSh0ZW1wbGF0ZSwgdGl0bGUsIG1lc3NhZ2UpOwotICAgIHJl
dHVybiBmZXRjaEpTT04oc2VydmVyLnNjaGVtZSwgewotICAgICAgICAnaG9zdG5hbWUnOiBzZXJ2
ZXIuaG9zdCwKLSAgICAgICAgJ3BvcnQnOiBzZXJ2ZXIucG9ydCwKLSAgICAgICAgJ2F1dGgnOiBz
ZXJ2ZXIuYXV0aCwKLSAgICAgICAgJ3BhdGgnOiBzZXJ2ZXIucGF0aCwKLSAgICAgICAgJ21ldGhv
ZCc6IHNlcnZlci5tZXRob2QsCi0gICAgfSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBKU09OLnN0cmlu
Z2lmeShub3RpZmljYXRpb24pKTsKLX0KLQotZnVuY3Rpb24gaW5zdGFudGlhdGVOb3RpZmljYXRp
b25UZW1wbGF0ZSh0ZW1wbGF0ZSwgdGl0bGUsIG1lc3NhZ2UpCi17Ci0gICAgdmFyIGluc3RhbmNl
ID0ge307Ci0gICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZSkgewotICAgICAgICB2YXIgdmFs
dWUgPSB0ZW1wbGF0ZVtuYW1lXTsKLSAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdzdHJp
bmcnKQotICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSB2YWx1ZS5yZXBsYWNlKC9cJHRpdGxl
L2csIHRpdGxlKS5yZXBsYWNlKC9cJG1lc3NhZ2UvZywgbWVzc2FnZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKHR5cGVvZih0ZW1wbGF0ZVtuYW1lXSkgPT09ICdvYmplY3QnKQotICAgICAgICAgICAgaW5z
dGFuY2VbbmFtZV0gPSBpbnN0YW50aWF0ZU5vdGlmaWNhdGlvblRlbXBsYXRlKHZhbHVlLCB0aXRs
ZSwgbWVzc2FnZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0g
dmFsdWU7Ci0gICAgfQotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQotZnVuY3Rpb24gZmV0Y2hK
U09OKHNjaGVtZU5hbWUsIG9wdGlvbnMsIGNvbnRlbnRUeXBlLCBjb250ZW50KSB7Ci0gICAgdmFy
IHJlcXVlc3RlciA9IHNjaGVtZU5hbWUgPT0gJ2h0dHBzJyA/IGh0dHBzIDogaHR0cDsKLSAgICBy
ZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICB2
YXIgcmVxdWVzdCA9IHJlcXVlc3Rlci5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIChyZXNwb25z
ZSkgewotICAgICAgICAgICAgdmFyIHJlc3BvbnNlVGV4dCA9ICcnOwotICAgICAgICAgICAgcmVz
cG9uc2Uuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKLSAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdkYXRh
JywgZnVuY3Rpb24gKGNodW5rKSB7IHJlc3BvbnNlVGV4dCArPSBjaHVuazsgfSk7Ci0gICAgICAg
ICAgICByZXNwb25zZS5vbignZW5kJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXNwb25zZVRl
eHQpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlamVjdCh7ZXJyb3I6IGVycm9yLCByZXNwb25zZVRleHQ6IHJlc3BvbnNlVGV4dH0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXNvbHZlKGpzb24pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0
aW9uIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyB9KTsKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBl
KQotICAgICAgICAgICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRU
eXBlKTsKLSAgICAgICAgaWYgKGNvbnRlbnQpCi0gICAgICAgICAgICByZXF1ZXN0LndyaXRlKGNv
bnRlbnQpOwotICAgICAgICByZXF1ZXN0LmVuZCgpOwotICAgIH0pOwotfQotCi1tYWluKHByb2Nl
c3MuYXJndik7Cg==
</data>
<flag name="review"
          id="443528"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>